@axinom/mosaic-ui 0.31.0-rc.9 → 0.32.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.d.ts.map +1 -1
- package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/renderers.model.d.ts +5 -4
- package/dist/components/DynamicDataList/DynamicListDataEntry/Renderers/renderers.model.d.ts.map +1 -1
- package/dist/components/DynamicDataList/index.d.ts +1 -1
- package/dist/components/DynamicDataList/index.d.ts.map +1 -1
- package/dist/components/EmptyStation/EmptyStation.d.ts +1 -1
- package/dist/components/EmptyStation/EmptyStation.d.ts.map +1 -1
- package/dist/components/Explorer/Explorer.d.ts.map +1 -1
- package/dist/components/FormElements/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/FormElements/CustomTags/CustomTags.d.ts.map +1 -1
- package/dist/components/FormElements/DateTimeField/DateTimeText.d.ts.map +1 -1
- package/dist/components/FormElements/DateTimeField/DateTimeTextField.d.ts.map +1 -1
- package/dist/components/FormElements/Form.models.d.ts +4 -4
- package/dist/components/FormElements/Form.models.d.ts.map +1 -1
- package/dist/components/FormElements/FormElementContainer/FormElementContainer.d.ts.map +1 -1
- package/dist/components/FormElements/MaskedSingleLineText/MaskedSingleLineText.d.ts +20 -0
- package/dist/components/FormElements/MaskedSingleLineText/MaskedSingleLineText.d.ts.map +1 -0
- package/dist/components/FormElements/MaskedSingleLineText/MaskedSingleLineTextField.d.ts +15 -0
- package/dist/components/FormElements/MaskedSingleLineText/MaskedSingleLineTextField.d.ts.map +1 -0
- package/dist/components/FormElements/Radio/Radio.d.ts +1 -0
- package/dist/components/FormElements/Radio/Radio.d.ts.map +1 -1
- package/dist/components/FormElements/SingleLineText/SingleLineText.d.ts +5 -2
- package/dist/components/FormElements/SingleLineText/SingleLineText.d.ts.map +1 -1
- package/dist/components/FormElements/ToggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/components/FormElements/index.d.ts +1 -0
- package/dist/components/FormElements/index.d.ts.map +1 -1
- package/dist/components/FormStation/FormStation.d.ts.map +1 -1
- package/dist/components/PageHeader/PageHeaderAction/PageHeaderAction.d.ts.map +1 -1
- package/dist/components/Utils/Postgraphile/index.d.ts +3 -3
- package/dist/components/Utils/Postgraphile/index.d.ts.map +1 -1
- package/dist/components/Utils/Transformers/Timestamp.d.ts.map +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/helpers/utils.d.ts +8 -0
- package/dist/helpers/utils.d.ts.map +1 -1
- package/dist/index.es.js +4 -3
- package/dist/index.es.js.map +1 -0
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -0
- package/package.json +4 -3
- package/src/components/Actions/Action/Action.spec.tsx +2 -2
- package/src/components/Actions/Action/Action.tsx +1 -1
- package/src/components/DynamicDataList/DynamicListDataEntry/DynamicListDataEntry.scss +5 -1
- package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.scss +0 -45
- package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.spec.tsx +3 -61
- package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.tsx +14 -15
- package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/createSelectRenderer/createSelectRenderer.scss +2 -2
- package/src/components/DynamicDataList/DynamicListDataEntry/Renderers/renderers.model.ts +6 -4
- package/src/components/DynamicDataList/index.ts +2 -2
- package/src/components/EmptyStation/EmptyStation.spec.tsx +1 -1
- package/src/components/EmptyStation/EmptyStation.tsx +1 -1
- package/src/components/Explorer/Explorer.tsx +2 -2
- package/src/components/FormElements/Checkbox/Checkbox.scss +4 -1
- package/src/components/FormElements/Checkbox/Checkbox.tsx +1 -1
- package/src/components/FormElements/CustomTags/CustomTags.scss +0 -2
- package/src/components/FormElements/CustomTags/CustomTags.tsx +10 -4
- package/src/components/FormElements/DateTimeField/DateTimeText.tsx +1 -0
- package/src/components/FormElements/DateTimeField/DateTimeTextField.tsx +1 -2
- package/src/components/FormElements/Form.models.ts +4 -4
- package/src/components/FormElements/FormElementContainer/FormElementContainer.scss +6 -1
- package/src/components/FormElements/FormElementContainer/FormElementContainer.tsx +8 -1
- package/src/components/FormElements/MaskedSingleLineText/MaskedSingleLineText.spec.tsx +19 -0
- package/src/components/FormElements/MaskedSingleLineText/MaskedSingleLineText.stories.tsx +65 -0
- package/src/components/FormElements/MaskedSingleLineText/MaskedSingleLineText.tsx +60 -0
- package/src/components/FormElements/MaskedSingleLineText/MaskedSingleLineTextField.tsx +37 -0
- package/src/components/FormElements/Radio/Radio.scss +4 -0
- package/src/components/FormElements/Radio/Radio.spec.tsx +1 -1
- package/src/components/FormElements/Radio/Radio.tsx +30 -24
- package/src/components/FormElements/Select/Select.scss +10 -3
- package/src/components/FormElements/SingleLineText/SingleLineText.scss +1 -0
- package/src/components/FormElements/SingleLineText/SingleLineText.spec.tsx +2 -32
- package/src/components/FormElements/SingleLineText/SingleLineText.stories.tsx +9 -1
- package/src/components/FormElements/SingleLineText/SingleLineText.tsx +24 -32
- package/src/components/FormElements/Tags/Tags.scss +8 -1
- package/src/components/FormElements/ToggleButton/ToggleButton.scss +3 -2
- package/src/components/FormElements/ToggleButton/ToggleButton.tsx +1 -1
- package/src/components/FormElements/index.ts +1 -0
- package/src/components/FormStation/FormStation.stories.tsx +9 -0
- package/src/components/FormStation/FormStation.tsx +1 -1
- package/src/components/PageHeader/PageHeaderAction/PageHeaderAction.spec.tsx +1 -1
- package/src/components/PageHeader/PageHeaderAction/PageHeaderAction.tsx +1 -1
- package/src/components/Utils/Postgraphile/index.ts +3 -3
- package/src/components/Utils/Transformers/Timestamp.spec.ts +2 -2
- package/src/components/Utils/Transformers/Timestamp.ts +5 -1
- package/src/components/index.ts +1 -1
- package/src/helpers/utils.ts +17 -0
- package/src/styles/variables.scss +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../node_modules/clsx/dist/clsx.m.js","../src/hooks/useExpand/useExpand.ts","../src/components/Buttons/Button.model.ts","../../../node_modules/tslib/tslib.es6.js","../src/helpers/utils.ts","../src/components/Icons/Icons.models.ts","../../../node_modules/style-inject/dist/style-inject.es.js","../src/components/Icons/Icons.tsx","../src/components/Buttons/Button/Button.tsx","../src/components/Buttons/CompositeButton/CompositeButton.tsx","../src/components/Buttons/TextButton/TextButton.tsx","../src/components/Accordion/AccordionItem/AccordionItem.tsx","../src/components/Accordion/Accordion.tsx","../../../node_modules/react-popper/lib/esm/utils.js","../../../node_modules/@popperjs/core/lib/enums.js","../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../../node_modules/@popperjs/core/lib/utils/math.js","../../../node_modules/@popperjs/core/lib/utils/within.js","../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../../node_modules/@popperjs/core/lib/utils/format.js","../../../node_modules/@popperjs/core/lib/utils/validateModifiers.js","../../../node_modules/@popperjs/core/lib/createPopper.js","../../../node_modules/@popperjs/core/lib/utils/debounce.js","../../../node_modules/@popperjs/core/lib/utils/uniqueBy.js","../../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../../node_modules/@popperjs/core/lib/popper.js","../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../../node_modules/react-popper/node_modules/react-fast-compare/index.js","../../../node_modules/react-popper/lib/esm/usePopper.js","../src/components/Message/Message.tsx","../src/components/ConfirmDialog/ConfirmDialog.tsx","../src/components/Actions/Action/Action.tsx","../src/components/Actions/Actions.tsx","../src/components/Actions/Actions.models.ts","../../../node_modules/@babel/runtime/helpers/esm/extends.js","../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../../node_modules/react-is/cjs/react-is.production.min.js","../../../node_modules/react-is/cjs/react-is.development.js","../../../node_modules/react-is/index.js","../../../node_modules/object-assign/index.js","../../../node_modules/prop-types/lib/has.js","../../../node_modules/prop-types/lib/ReactPropTypesSecret.js","../../../node_modules/prop-types/checkPropTypes.js","../../../node_modules/prop-types/factoryWithTypeCheckers.js","../../../node_modules/prop-types/factoryWithThrowingShims.js","../../../node_modules/prop-types/index.js","../../../node_modules/dom-helpers/esm/removeClass.js","../../../node_modules/react-transition-group/esm/config.js","../../../node_modules/react-transition-group/esm/utils/PropTypes.js","../../../node_modules/react-transition-group/esm/TransitionGroupContext.js","../../../node_modules/react-transition-group/esm/Transition.js","../../../node_modules/react-transition-group/esm/CSSTransition.js","../../../node_modules/dom-helpers/esm/addClass.js","../../../node_modules/dom-helpers/esm/hasClass.js","../../../node_modules/react-transition-group/esm/utils/ChildMapping.js","../../../node_modules/react-transition-group/esm/TransitionGroup.js","../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../src/components/DynamicDataList/DynamicListDataEntry/DynamicListDataEntry.tsx","../src/components/DynamicDataList/DynamicListHeader/DynamicListHeader.tsx","../src/utils/ToolTipHelpers.ts","../src/components/InlineMenu/InlineMenu.tsx","../src/components/DynamicDataList/DynamicListRow/DynamicListRow.tsx","../src/components/DynamicDataList/DynamicDataList.tsx","../src/components/InfoTooltip/InfoTooltip.tsx","../src/components/FormElements/FormElementContainer/FormElementContainer.tsx","../src/components/FormElements/BooleanView/BooleanViewField.tsx","../src/components/FormElements/Checkbox/Checkbox.tsx","../src/components/FormElements/useFormikError.tsx","../src/components/FormElements/Checkbox/CheckboxField.tsx","../src/hooks/useDebounce/useDebounce.tsx","../src/components/FormElements/CustomTags/CustomTags.tsx","../src/components/FormElements/CustomTags/CustomTagsField.tsx","../../../node_modules/luxon/src/errors.js","../../../node_modules/luxon/src/impl/formats.js","../../../node_modules/luxon/src/zone.js","../../../node_modules/luxon/src/zones/systemZone.js","../../../node_modules/luxon/src/zones/IANAZone.js","../../../node_modules/luxon/src/impl/locale.js","../../../node_modules/luxon/src/impl/english.js","../../../node_modules/luxon/src/zones/fixedOffsetZone.js","../../../node_modules/luxon/src/zones/invalidZone.js","../../../node_modules/luxon/src/impl/zoneUtil.js","../../../node_modules/luxon/src/impl/util.js","../../../node_modules/luxon/src/settings.js","../../../node_modules/luxon/src/impl/formatter.js","../../../node_modules/luxon/src/impl/invalid.js","../../../node_modules/luxon/src/impl/regexParser.js","../../../node_modules/luxon/src/duration.js","../../../node_modules/luxon/src/interval.js","../../../node_modules/luxon/src/info.js","../../../node_modules/luxon/src/impl/diff.js","../../../node_modules/luxon/src/impl/digits.js","../../../node_modules/luxon/src/impl/tokenParser.js","../../../node_modules/luxon/src/impl/conversions.js","../../../node_modules/luxon/src/datetime.js","../../../node_modules/merge-class-names/dist/esm/index.js","../../../node_modules/lodash.once/index.js","../../../node_modules/get-user-locale/dist/esm/index.js","../../../node_modules/@wojtekmaj/date-utils/dist/esm/index.js","../../../node_modules/react-calendar/dist/esm/shared/const.js","../../../node_modules/react-calendar/dist/esm/shared/dateFormatter.js","../../../node_modules/react-calendar/dist/esm/shared/dates.js","../../../node_modules/react-calendar/dist/esm/shared/propTypes.js","../../../node_modules/react-calendar/dist/esm/Calendar/Navigation.js","../../../node_modules/react-calendar/dist/esm/Flex.js","../../../node_modules/react-calendar/dist/esm/shared/utils.js","../../../node_modules/react-calendar/dist/esm/TileGroup.js","../../../node_modules/react-calendar/dist/esm/Tile.js","../../../node_modules/react-calendar/dist/esm/CenturyView/Decade.js","../../../node_modules/react-calendar/dist/esm/CenturyView/Decades.js","../../../node_modules/react-calendar/dist/esm/CenturyView.js","../../../node_modules/react-calendar/dist/esm/DecadeView/Year.js","../../../node_modules/react-calendar/dist/esm/DecadeView/Years.js","../../../node_modules/react-calendar/dist/esm/DecadeView.js","../../../node_modules/react-calendar/dist/esm/YearView/Month.js","../../../node_modules/react-calendar/dist/esm/YearView/Months.js","../../../node_modules/react-calendar/dist/esm/YearView.js","../../../node_modules/react-calendar/dist/esm/MonthView/Day.js","../../../node_modules/react-calendar/dist/esm/MonthView/Days.js","../../../node_modules/react-calendar/dist/esm/MonthView/Weekdays.js","../../../node_modules/react-calendar/dist/esm/MonthView/WeekNumber.js","../../../node_modules/react-calendar/dist/esm/MonthView/WeekNumbers.js","../../../node_modules/react-calendar/dist/esm/MonthView.js","../../../node_modules/react-calendar/dist/esm/Calendar.js","../../../node_modules/react-calendar/dist/esm/index.js","../src/components/DateTime/DatePicker/DatePicker.tsx","../src/components/DateTime/TimePicker/ScrollColumn/ScrollColumn.tsx","../src/components/DateTime/TimePicker/TimePicker.tsx","../src/components/DateTime/DateTimePicker.tsx","../src/components/Utils/Postgraphile/CreateConnectionRenderer.ts","../src/components/Utils/Postgraphile/FilterTransformer.ts","../src/components/Utils/Postgraphile/getArrayDiff.ts","../src/components/Utils/Postgraphile/generateArrayMutations.ts","../src/components/Utils/Postgraphile/getFormDiff.ts","../src/components/Utils/Postgraphile/RangeTransformer.ts","../src/components/Utils/Postgraphile/SortTransformer.ts","../src/components/Utils/Postgraphile/UpdateGQLFragmentGenerator.ts","../src/components/Utils/Transformers/Boolean.ts","../src/components/Utils/Transformers/DateTime.ts","../src/components/Utils/Transformers/FileSize.ts","../src/components/Utils/Transformers/SortArray.ts","../src/components/Utils/Transformers/Timestamp.ts","../src/components/Utils/Transformers/TitleCase.ts","../src/components/FormElements/DateTimeField/DateTimeText.tsx","../src/components/FormElements/DateTimeField/DateTimeTextField.tsx","../src/components/FormElements/Divider/Divider.tsx","../src/components/FormElements/DynamicDataListControl/DynamicDataListControl.tsx","../src/components/FormElements/DynamicDataListControl/DynamicDataListField.tsx","../src/components/ProgressBar/ProgressBar.tsx","../src/components/ProgressBar/ProgressBar.model.ts","../src/components/FormElements/FileUploadControl/FileUploadControl.tsx","../src/components/FormElements/FileUploadControl/FileUploadField.tsx","../src/components/FormElements/FormGroupTitle/FormGroupTitle.tsx","../src/components/FormElements/FormikDebug/FormikDebug.tsx","../src/components/FormElements/GenericField/GenericField.tsx","../src/components/FormElements/Link/LinkField.tsx","../../../node_modules/imask/esm/_rollupPluginBabelHelpers-6b3bd404.js","../../../node_modules/imask/esm/core/holder.js","../../../node_modules/imask/esm/core/change-details.js","../../../node_modules/imask/esm/core/utils.js","../../../node_modules/imask/esm/core/action-details.js","../../../node_modules/imask/esm/core/continuous-tail-details.js","../../../node_modules/imask/esm/masked/base.js","../../../node_modules/imask/esm/masked/factory.js","../../../node_modules/imask/esm/masked/pattern/input-definition.js","../../../node_modules/imask/esm/masked/pattern/fixed-definition.js","../../../node_modules/imask/esm/masked/pattern/chunk-tail-details.js","../../../node_modules/imask/esm/masked/pattern/cursor.js","../../../node_modules/imask/esm/masked/regexp.js","../../../node_modules/imask/esm/masked/pattern.js","../../../node_modules/imask/esm/masked/range.js","../../../node_modules/imask/esm/masked/date.js","../../../node_modules/imask/esm/controls/mask-element.js","../../../node_modules/imask/esm/controls/html-mask-element.js","../../../node_modules/imask/esm/controls/html-contenteditable-mask-element.js","../../../node_modules/imask/esm/controls/input.js","../../../node_modules/imask/esm/masked/enum.js","../../../node_modules/imask/esm/masked/number.js","../../../node_modules/imask/esm/masked/function.js","../../../node_modules/imask/esm/masked/dynamic.js","../../../node_modules/imask/esm/masked/pipe.js","../../../node_modules/imask/esm/index.js","../../../node_modules/react-imask/esm/_rollupPluginBabelHelpers-2cac7098.js","../../../node_modules/react-imask/esm/mixin.js","../../../node_modules/react-imask/esm/input.js","../../../node_modules/react-imask/esm/hook.js","../src/components/FormElements/SingleLineText/SingleLineText.tsx","../src/components/FormElements/MaskedSingleLineText/MaskedSingleLineText.tsx","../src/components/FormElements/Radio/Radio.tsx","../src/components/FormElements/Radio/RadioField.tsx","../src/components/FormElements/ReadOnly/ReadOnlyField.tsx","../src/components/FormElements/ReadOnlyText/ReadOnlyTextField.tsx","../src/components/FormElements/Select/Select.tsx","../src/components/FormElements/Select/SelectField.tsx","../src/components/FormElements/SingleLineText/SingleLineTextField.tsx","../src/components/FormElements/Tags/Tags.tsx","../src/components/FormElements/Tags/TagsField.tsx","../src/components/FormElements/TextArea/TextArea.tsx","../src/components/FormElements/TextArea/TextAreaField.tsx","../src/components/FormElements/ToggleButton/ToggleButton.tsx","../src/components/FormElements/ToggleButton/ToggleButtonField.tsx","../src/components/DynamicDataList/DynamicListDataEntry/Renderers/createInputRenderer/createInputRenderer.tsx","../src/components/DynamicDataList/DynamicListDataEntry/Renderers/createSelectRenderer/createSelectRenderer.tsx","../src/components/MessageBar/MessageBar.tsx","../../../node_modules/lodash/isObject.js","../../../node_modules/lodash/_freeGlobal.js","../../../node_modules/lodash/_root.js","../../../node_modules/lodash/now.js","../../../node_modules/lodash/_trimmedEndIndex.js","../../../node_modules/lodash/_baseTrim.js","../../../node_modules/lodash/_Symbol.js","../../../node_modules/lodash/_getRawTag.js","../../../node_modules/lodash/_objectToString.js","../../../node_modules/lodash/_baseGetTag.js","../../../node_modules/lodash/isObjectLike.js","../../../node_modules/lodash/isSymbol.js","../../../node_modules/lodash/toNumber.js","../../../node_modules/lodash/debounce.js","../src/components/PageHeader/PageHeaderAction/PageHeaderAction.tsx","../src/components/PageHeader/PageHeaderBulkActions/PageHeaderBulkActions.tsx","../src/components/PageHeader/PageHeader.tsx","../src/hooks/useWindowSize/useWindowSize.tsx","../src/components/EmptyStation/EmptyStation.tsx","../src/initialize.ts","../src/utils/ErrorTypeToStationError.tsx","../src/components/Filters/Filters.model.ts","../src/components/Filters/SelectionTypes/DateTimeFilter/DateTimeFilter.tsx","../src/components/Filters/SelectionTypes/FreeTextFilter/FreeTextFilter.tsx","../src/components/Filters/SelectionTypes/NumericTextFilter/NumericTextFilter.tsx","../src/components/Filters/SelectionTypes/OptionsFilter/OptionsFilter.tsx","../src/components/Filters/SelectionTypes/SearcheableOptionsFilter/SearcheableOptionsFilter.tsx","../src/components/Filters/Filter/Filter.tsx","../src/components/Filters/Filters.tsx","../src/components/List/List.model.ts","../src/components/List/ListCheckBox/ListCheckBox.tsx","../src/components/List/ListHeader/ColumnLabel/ColumnLabel.tsx","../src/components/List/ListHeader/ListHeader.tsx","../src/components/List/ListRow/ListRow.tsx","../../../node_modules/react-content-loader/dist/react-content-loader.es.js","../src/components/Loaders/skeletons.tsx","../src/components/Loaders/Loader/Loader.tsx","../src/components/List/ListRow/ListRowLoader.tsx","../src/components/List/List.tsx","../src/components/List/ListRow/Renderers/BooleanDotRenderer/BooleanDotRenderer.tsx","../src/components/List/ListRow/Renderers/DateRenderer/DateRenderer.tsx","../src/components/List/ListRow/Renderers/ExternalLinkRenderer/ExternalLinkRenderer.tsx","../src/components/List/ListRow/Renderers/StateRenderer/StateRenderer.tsx","../src/components/List/ListRow/Renderers/TimestampRenderer/TimestampRenderer.tsx","../src/components/Utils/State/GlobalState.ts","../../../node_modules/lodash/_listCacheClear.js","../../../node_modules/lodash/eq.js","../../../node_modules/lodash/_assocIndexOf.js","../../../node_modules/lodash/_listCacheDelete.js","../../../node_modules/lodash/_listCacheGet.js","../../../node_modules/lodash/_listCacheHas.js","../../../node_modules/lodash/_listCacheSet.js","../../../node_modules/lodash/_ListCache.js","../../../node_modules/lodash/_stackClear.js","../../../node_modules/lodash/_stackDelete.js","../../../node_modules/lodash/_stackGet.js","../../../node_modules/lodash/_stackHas.js","../../../node_modules/lodash/isFunction.js","../../../node_modules/lodash/_coreJsData.js","../../../node_modules/lodash/_isMasked.js","../../../node_modules/lodash/_toSource.js","../../../node_modules/lodash/_baseIsNative.js","../../../node_modules/lodash/_getValue.js","../../../node_modules/lodash/_getNative.js","../../../node_modules/lodash/_Map.js","../../../node_modules/lodash/_nativeCreate.js","../../../node_modules/lodash/_hashClear.js","../../../node_modules/lodash/_hashDelete.js","../../../node_modules/lodash/_hashGet.js","../../../node_modules/lodash/_hashHas.js","../../../node_modules/lodash/_hashSet.js","../../../node_modules/lodash/_Hash.js","../../../node_modules/lodash/_mapCacheClear.js","../../../node_modules/lodash/_isKeyable.js","../../../node_modules/lodash/_getMapData.js","../../../node_modules/lodash/_mapCacheDelete.js","../../../node_modules/lodash/_mapCacheGet.js","../../../node_modules/lodash/_mapCacheHas.js","../../../node_modules/lodash/_mapCacheSet.js","../../../node_modules/lodash/_MapCache.js","../../../node_modules/lodash/_stackSet.js","../../../node_modules/lodash/_Stack.js","../../../node_modules/lodash/_arrayEach.js","../../../node_modules/lodash/_defineProperty.js","../../../node_modules/lodash/_baseAssignValue.js","../../../node_modules/lodash/_assignValue.js","../../../node_modules/lodash/_copyObject.js","../../../node_modules/lodash/_baseTimes.js","../../../node_modules/lodash/_baseIsArguments.js","../../../node_modules/lodash/isArguments.js","../../../node_modules/lodash/isArray.js","../../../node_modules/lodash/stubFalse.js","../../../node_modules/lodash/isBuffer.js","../../../node_modules/lodash/_isIndex.js","../../../node_modules/lodash/isLength.js","../../../node_modules/lodash/_baseIsTypedArray.js","../../../node_modules/lodash/_baseUnary.js","../../../node_modules/lodash/_nodeUtil.js","../../../node_modules/lodash/isTypedArray.js","../../../node_modules/lodash/_arrayLikeKeys.js","../../../node_modules/lodash/_isPrototype.js","../../../node_modules/lodash/_overArg.js","../../../node_modules/lodash/_nativeKeys.js","../../../node_modules/lodash/_baseKeys.js","../../../node_modules/lodash/isArrayLike.js","../../../node_modules/lodash/keys.js","../../../node_modules/lodash/_baseAssign.js","../../../node_modules/lodash/_nativeKeysIn.js","../../../node_modules/lodash/_baseKeysIn.js","../../../node_modules/lodash/keysIn.js","../../../node_modules/lodash/_baseAssignIn.js","../../../node_modules/lodash/_cloneBuffer.js","../../../node_modules/lodash/_copyArray.js","../../../node_modules/lodash/_arrayFilter.js","../../../node_modules/lodash/stubArray.js","../../../node_modules/lodash/_getSymbols.js","../../../node_modules/lodash/_copySymbols.js","../../../node_modules/lodash/_arrayPush.js","../../../node_modules/lodash/_getPrototype.js","../../../node_modules/lodash/_getSymbolsIn.js","../../../node_modules/lodash/_copySymbolsIn.js","../../../node_modules/lodash/_baseGetAllKeys.js","../../../node_modules/lodash/_getAllKeys.js","../../../node_modules/lodash/_getAllKeysIn.js","../../../node_modules/lodash/_DataView.js","../../../node_modules/lodash/_Promise.js","../../../node_modules/lodash/_Set.js","../../../node_modules/lodash/_WeakMap.js","../../../node_modules/lodash/_getTag.js","../../../node_modules/lodash/_initCloneArray.js","../../../node_modules/lodash/_Uint8Array.js","../../../node_modules/lodash/_cloneArrayBuffer.js","../../../node_modules/lodash/_cloneDataView.js","../../../node_modules/lodash/_cloneRegExp.js","../../../node_modules/lodash/_cloneSymbol.js","../../../node_modules/lodash/_cloneTypedArray.js","../../../node_modules/lodash/_initCloneByTag.js","../../../node_modules/lodash/_baseCreate.js","../../../node_modules/lodash/_initCloneObject.js","../../../node_modules/lodash/_baseIsMap.js","../../../node_modules/lodash/isMap.js","../../../node_modules/lodash/_baseIsSet.js","../../../node_modules/lodash/isSet.js","../../../node_modules/lodash/_baseClone.js","../../../node_modules/lodash/cloneDeep.js","../src/hooks/useUpdatingRef/useUpdatingRef.ts","../src/components/Explorer/useDataProvider.tsx","../src/components/Explorer/Explorer.tsx","../src/components/Explorer/useStationMessage.tsx","../src/components/Explorer/InMemoryDataProvider.ts","../src/components/Explorer/NavigationExplorer/NavigationExplorer.tsx","../src/components/Explorer/SelectionExplorer/SelectionExplorer.tsx","../src/components/Filters/Validators/DateRangeFilterValidator.ts","../src/components/Filters/Validators/NumberRangeFilterValidator.ts","../../../node_modules/lodash/isNull.js","../../../node_modules/lodash/isUndefined.js","../../../node_modules/lodash/_isKey.js","../../../node_modules/lodash/memoize.js","../../../node_modules/lodash/_memoizeCapped.js","../../../node_modules/lodash/_stringToPath.js","../../../node_modules/lodash/_arrayMap.js","../../../node_modules/lodash/_baseToString.js","../../../node_modules/lodash/toString.js","../../../node_modules/lodash/_castPath.js","../../../node_modules/lodash/_toKey.js","../../../node_modules/lodash/_baseGet.js","../../../node_modules/lodash/_baseSet.js","../../../node_modules/lodash/_basePickBy.js","../../../node_modules/lodash/_baseHasIn.js","../../../node_modules/lodash/_hasPath.js","../../../node_modules/lodash/hasIn.js","../../../node_modules/lodash/_basePick.js","../../../node_modules/lodash/_isFlattenable.js","../../../node_modules/lodash/_baseFlatten.js","../../../node_modules/lodash/flatten.js","../../../node_modules/lodash/_apply.js","../../../node_modules/lodash/_overRest.js","../../../node_modules/lodash/constant.js","../../../node_modules/lodash/identity.js","../../../node_modules/lodash/_baseSetToString.js","../../../node_modules/lodash/_shortOut.js","../../../node_modules/lodash/_setToString.js","../../../node_modules/lodash/_flatRest.js","../../../node_modules/lodash/pick.js","../src/hooks/useReactRouterPause/utils.tsx","../src/hooks/useReactRouterPause/useReactRouterPause.tsx","../src/hooks/useValueOrOnDemand/useValueOrOnDemand.ts","../src/components/FormStation/SaveOnNavigate/SaveOnNavigate.tsx","../src/components/FormStation/SaveOnNavigate/handleNavigationAttempt.ts","../src/components/FormStation/FormStation.tsx","../src/components/FormStation/Create/Create.tsx","../src/components/FormStation/Details/Details.tsx","../src/components/Hub/Tile/Tile.tsx","../src/components/Hub/Hub.tsx","../src/components/Loaders/ImageLoader/ImageLoader.tsx","../src/components/InfoPanel/InfoImage/InfoImage.tsx","../src/components/InfoPanel/InfoPanel.tsx","../src/components/InfoPanel/Paragraph/Paragraph.tsx","../src/components/InfoPanel/Section/Section.tsx","../src/components/LandingPageHeader/LandingPageHeader.tsx","../src/components/LandingPageTiles/TileLarge/TileLarge.tsx","../src/components/LandingPageTiles/TileSmall/TileSmall.tsx","../src/components/LandingPageTiles/LandingPageTiles.tsx","../src/components/Modal/Modal.tsx","../src/components/Modal/useModal.tsx","../src/components/NavigationAwareStation/NavigationAwareStation.tsx","../src/validators/timestamp/timestamp.ts"],"sourcesContent":["function toVal(mix) {\n\tvar k, y, str='';\n\n\tif (typeof mix === 'string' || typeof mix === 'number') {\n\t\tstr += mix;\n\t} else if (typeof mix === 'object') {\n\t\tif (Array.isArray(mix)) {\n\t\t\tfor (k=0; k < mix.length; k++) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tif (y = toVal(mix[k])) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (k in mix) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\tstr += k;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn str;\n}\n\nexport default function () {\n\tvar i=0, tmp, x, str='';\n\twhile (i < arguments.length) {\n\t\tif (tmp = arguments[i++]) {\n\t\t\tif (x = toVal(tmp)) {\n\t\t\t\tstr && (str += ' ');\n\t\t\t\tstr += x\n\t\t\t}\n\t\t}\n\t}\n\treturn str;\n}\n","import { useCallback, useState } from 'react';\n\n/**\n * Determines if state isExpanded (default: false)\n * @member isExpanded returns the current state\n * @member expand will set isExpanded to true\n * @member collapse will set isExpanded to false\n * @member toggleExpanded will toggle isExpanded state\n * @example\n * <div>\n * <span>{String(isExpanded)}</span>\n * <button id=\"expand\" onClick={expand}></button>\n * <button id=\"collapse\" onClick={collapse}></button>\n * <button id=\"toggle\" onClick={toggleExpanded}></button>\n * </div>\n */\nexport const useExpand = (\n initialValue = false,\n): {\n readonly isExpanded: boolean;\n readonly expand: () => void;\n readonly collapse: () => void;\n readonly toggleExpanded: () => void;\n} => {\n const [isExpanded, setIsExpanded] = useState(initialValue);\n const expand = useCallback(() => {\n setIsExpanded(true);\n }, []);\n const collapse = useCallback(() => {\n setIsExpanded(false);\n }, []);\n\n const toggleExpanded = useCallback(() => {\n setIsExpanded((previous) => !previous);\n }, []);\n\n return {\n isExpanded,\n expand,\n collapse,\n toggleExpanded,\n } as const;\n};\n","/** Button's context type. This type defines the button's colors and border. */\nexport enum ButtonContext {\n Navigation,\n Context,\n Active,\n Icon,\n None,\n}\n\n/** Base options for all button components */\nexport interface BaseButtonOptions {\n /** HTML button type attribute (default: 'button') */\n type?: 'button' | 'submit' | 'reset';\n /** Button type (default: 'Navigation') */\n buttonContext?: ButtonContext;\n /** Whether the button is disabled. If set to true, disallows interactions. (default: undefined) */\n disabled?: boolean;\n /** Optional class */\n className?: string;\n /** Optional data-test-id */\n dataTestId?: string;\n /** Event to raise when the button is clicked */\n onButtonClicked?: (\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n ) => void;\n onBlur?: React.FocusEventHandler<HTMLButtonElement>;\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.push(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.push(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","/**\n * A function doing nothing. Useful for example as fallback value for optional callbacks.\n *\n * using `parameter = () => {}` would drop your test coverage (unless you explicitly have a case testing calling the fallback value) - with `parameter = noop` it does not count as \"untested function\"\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop(): void {}\n\n/**\n * Function that can be used for exhaustiveness checks on switch statements.\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const assertNever = (_type: never): void => {\n // eslint-disable-next-line no-console\n console.error(`Switch was not exhaustive`);\n};\n\n/**\n * Declares a nullable T\n */\nexport type Maybe<T> = T | null;\n\n/**\n * Make all properties in T nullable\n */\nexport type Nullable<T> = {\n [P in keyof T]: T[P] | null;\n};\n\n/**\n * Checks if the ref is available before executing the provided function.\n * @param ref Mutable Ref Object to check\n * @param fn Function to execute\n * @param args Arguments for the function\n */\nexport const executeIfRefAvailable = async <U, T = never>(\n ref: React.RefObject<U>,\n fn: (arg0: U, ...args: T[]) => void,\n ...args: T[]\n): Promise<void> => {\n if (ref.current) {\n fn(ref.current, ...args);\n }\n};\n","/**\n * Icon enums used for determining which icon should be displayed\n */\nexport enum IconName {\n Archive,\n Unarchive,\n BackwardOne,\n BackwardTen,\n Block,\n Bulk,\n Calendar,\n Checkmark,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n Copy,\n Delete,\n Details,\n Drag,\n Ellipsis,\n Error,\n External,\n File,\n ForwardOne,\n ForwardTen,\n Info,\n MidlineEllipsis,\n Minus,\n Mute,\n NavigateRight,\n Pause,\n Play,\n Plus,\n Publish,\n RemoveFilter,\n Retry,\n Replace,\n Snapshot,\n Stop,\n Success,\n Undo,\n Unmute,\n Unpublish,\n Upload,\n Warning,\n X,\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import clsx from 'clsx';\nimport React from 'react';\nimport { IconName } from './Icons.models';\nimport classes from './Icons.scss';\n\nexport interface IconsProps {\n /** Icon type */\n icon?: IconName;\n /** Optional class */\n className?: string;\n}\n\nconst ArchiveIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M27.6,14.7H39V39H1.1V14.6h11.6 M9.9,22.1l10.3,9.1\n\tl10.3-9.1 M20.1,31.2V0\"\n />\n </svg>\n);\n\nconst BackwardOne: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n stroke=\"#1478AF\"\n strokeWidth=\"2\"\n d=\"M4.1,10.5C7.7,5.4,14.3,2,20,2c9.9,0,18,8.1,18,18s-8.1,18-18,18S2,29.9,2,20 M12.1,10.5H4.1V2.5 M20.9,25.5V15\n\tc0,0-1.1,2.1-3.8,3.1\"\n />\n </svg>\n);\n\nconst BackwardTen: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n stroke=\"#1478AF\"\n strokeWidth=\"2\"\n d=\"M4.2,10.5C7.8,5.4,14.4,2,20.1,2c9.9,0,18,8.1,18,18s-8.1,18-18,18s-18-8.1-18-18 M12.1,10.5H4.2V2.6\n\t M12.3,18.1c2.7-1,3.8-3.1,3.8-3.1v10.5 M23.6,15.3c1.8,0,3.2,2.3,3.2,5.2s-1.4,5.2-3.2,5.2s-3.2-2.3-3.2-5.2S21.8,15.3,23.6,15.3z\"\n />\n </svg>\n);\n\nconst BlockIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M20.4,2.4c9.9,0,18,8.1,18,18s-8.1,18-18,18s-18-8.1-18-18S10.5,2.4,20.4,2.4z M9.8,20.4H31\"\n />\n </svg>\n);\n\nconst BulkIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M33.1,38.6H1.3V6.8h31.8V38.6z M26.8,14.4L15.1,27.8l-7.1-7.5 M38.7,31.2V1.4h-29\"\n />\n </svg>\n);\n\nconst CalendarIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n stroke=\"#0E7CB4\"\n strokeWidth=\"2\"\n d=\"M12.6,34.8H1.9V5h33.8v8.6 M26.7,15.1c-6.3,0-11.5,5.2-11.5,11.5S20.3,38,26.7,38s11.4-5.2,11.4-11.6\n S33,15.1,26.7,15.1z M35.7,10.9 M1.9,10.9 M10.9,1v9.4 M26.7,1v9.4 M26.2,19.1v8.2l0,0h6.5\"\n />\n </svg>\n);\n\nconst CheckmarkIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M0.9,17.8L16,32.5l23.1-25\"\n />\n </svg>\n);\n\nconst ChevronDownIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n transform=\"rotate(90, 20, 20)\"\n d=\"M9.2,39.1L30.8,20L9.2,0.9\"\n />\n </svg>\n);\n\nconst ChevronLeftIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n transform=\"rotate(180, 20, 20)\"\n d=\"M9.2,39.1L30.8,20L9.2,0.9\"\n />\n </svg>\n);\n\nconst ChevronRightIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M9.2,39.1L30.8,20L9.2,0.9\"\n />\n </svg>\n);\n\nconst ChevronUpIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n transform=\"rotate(-90, 20, 20)\"\n d=\"M9.2,39.1L30.8,20L9.2,0.9\"\n />\n </svg>\n);\n\nconst CopyIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n stroke=\"#1478AF\"\n strokeWidth=\"2\"\n d=\"M29.6,38.8H3.2V8.4h17l9.3,9.3V38.8z M20.2,8.4v9.3h9.3 M33.4,31.6h3.4V10.5l-9.3-9.3h-17v3.2 M27.5,1.2v9.3\n\th9.3\"\n />\n </svg>\n);\n\nconst DeleteIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M6.5,7.3l2.9,31.3h21.1l2.9-31.3 M0.5,7.2h39 M15.1,13.4L16,33.1 M24.7,13.4l-0.9,19.7 M14.2,7.2l1.2-5.8h8.3\n l1.1,5.8\"\n />\n </svg>\n);\n\nconst DetailsIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M4,8.7h32 M4,16.4h10.2 M36,31.3h-9.5 M18.3,16.4H36 M22.4,31.3H4 M4,24.1h32\"\n />\n </svg>\n);\n\nconst DragIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <rect x=\"11.4\" y=\"5.4\" />\n <rect x=\"11.4\" y=\"17.7\" />\n <rect x=\"11.4\" y=\"30\" />\n <rect x=\"23.6\" y=\"5.4\" />\n <rect x=\"23.6\" y=\"17.7\" />\n <rect x=\"23.6\" y=\"30\" />\n </svg>\n);\n\nconst EllipsisIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M6.8,30c0,1.3-1.1,2.4-2.4,2.4S2,31.3,2,30s1.1-2.4,2.4-2.4S6.8,28.7,6.8,30z M20,27.6c-1.3,0-2.4,1.1-2.4,2.4\n s1.1,2.4,2.4,2.4s2.4-1.1,2.4-2.4S21.3,27.6,20,27.6z M35.6,27.6c-1.3,0-2.4,1.1-2.4,2.4s1.1,2.4,2.4,2.4S38,31.3,38,30\n S36.9,27.6,35.6,27.6z\"\n />\n </svg>\n);\n\nconst ErrorIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M20,2c9.9,0,18,8.1,18,18s-8.1,18-18,18S2,29.9,2,20S10.1,2,20,2z M12.5,12.5l15,15 M27.5,12.5l-15,15\"\n />\n </svg>\n);\n\nconst ExternalIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M39.8,14.8 M25.1,0.2 M38.9,15.7V1.3H24.8 M38.9,1.3\n\tL16.4,23.8 M20.8,8.5H1.2v30.4h29.7V19.4\"\n />\n </svg>\n);\n\nconst FileIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M1,34.7l4.4-18.8H39l-4.3,18.8L1,34.7L1,5.3h12.1\n l3.5,3.8h18.1v6.9\"\n />\n </svg>\n);\n\nconst ForwardOne: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M35.9,10.5C32.3,5.4,25.7,2,20,2C10.1,2,2,10.1,2,20s8.1,18,18,18s18-8.1,18-18 M28,10.5h7.9V2.6 M17.1,18.1\n\tc2.7-1,3.8-3.1,3.8-3.1v10.5\"\n />\n </svg>\n);\n\nconst ForwardTen: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M35.9,10.5C32.3,5.4,25.7,2,20,2C10.1,2,2,10.1,2,20s8.1,18,18,18s18-8.1,18-18 M28,10.5h7.9V2.6 M12.3,18.1\n\tc2.7-1,3.8-3.1,3.8-3.1v10.5 M23.6,15.3c1.8,0,3.2,2.3,3.2,5.2s-1.4,5.2-3.2,5.2s-3.2-2.3-3.2-5.2S21.8,15.3,23.6,15.3z\"\n />\n </svg>\n);\n\nconst InfoIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M20,2c9.9,0,18,8.1,18,18s-8.1,18-18,18S2,29.9,2,20S10.1,2,20,2z M20,29.9\n V16.2l0,0V29.9z M20,10.1v2.6l0,0V10.1z\"\n />\n </svg>\n);\n\nconst MidlineEllipsisIcon: React.FC<{ className?: string }> = ({\n className,\n}) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n stroke=\"#1478AF\"\n strokeWidth=\"2\"\n d=\"M8,20c0,1.1-0.9,2-2,2S4,21.1,4,20s0.9-2,2-2S8,18.9,8,20z M20,18\n c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S21.1,18,20,18z M34,18c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S35.1,18,34,18z\"\n />\n </svg>\n);\n\nconst MinusIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M0,20h40\"\n />\n </svg>\n);\n\nconst MuteIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n stroke=\"#1478AF\"\n strokeWidth=\"2\"\n d=\"M22,7.5v25L13.5,25h-9V15h9L22,7.5z M26.4,24.6c1.8-0.8,3-2.6,3-4.7c0-1.9-1.1-3.6-2.6-4.5 M28.7,30.6\n\tc4-1.9,6.8-6,6.8-10.7c0-4.5-2.6-8.5-6.3-10.5\"\n />\n </svg>\n);\n\nconst NavigateRightIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n stroke=\"#FFFFFF\"\n strokeWidth=\"2\"\n d=\"M22.8,1.1l15.4,15.4L24.1,30.6 M38.2,16.5H4.4v23.1\"\n />\n </svg>\n);\n\nconst PauseIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M4.5,2h10.3v36H4.5V2z M25.2,2h10.3v36H25.2V2z\"\n />\n </svg>\n);\n\nconst PlayIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path fill=\"none\" strokeWidth=\"2\" d=\"M33,20L7,35.4V4.6L33,20z\" />\n </svg>\n);\n\nconst PlusIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M0,20h40 M20,40V0\"\n />\n </svg>\n);\n\nconst PublishIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M1,27v8.6h38V27 M4.6,10.6l5.6-6.3l6.2,6.3 M10.2,4.4v24 M23.6,10.6l5.6-6.3l6.2,6.3 M29.2,4.4v24\"\n />\n </svg>\n);\n\nconst RemoveFilterIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n stroke=\"#1478AF\"\n strokeWidth=\"2\"\n d=\"M13.7,16.9L3,4.6h28.6l-11.3,12v13.6l-6.5,5.1V16.9z M32.9,22.9l6.1,6.1L32.9,22.9z M32.9,22.9\n\tl-6.1-6.1L32.9,22.9l-6.1,6.1L32.9,22.9z M32.9,22.9l6.1-6.1L32.9,22.9z\"\n />\n </svg>\n);\n\nconst ReplaceIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n stroke=\"#000000\"\n strokeWidth=\"2\"\n d=\"M25.6,6.4l6.2,6.2l-6.2,6.2\n\t M31.8,12.6H8.2 M14.4,21.2l-6.2,6.2l6.2,6.2 M8.2,27.4h23.6\"\n ></path>\n </svg>\n);\n\nconst RetryIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M9.5,27.3c-4.1-5.8-2.6-13.8,3.1-17.8c4.5-3.2,10.6-3.1,15,0.2 M11.9,18.8l-2.4,8.5L1,24.8 M27,21.4l4.2-7.8\n\tl7.8,4.2 M31.2,13.6c3.6,6.1,1.5,13.9-4.6,17.5c-4.1,2.4-9.2,2.3-13.2-0.2\"\n />\n </svg>\n);\n\nconst SnapshotIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M29.5,21c0,5.2-4.3,9.5-9.5,9.5s-9.5-4.3-9.5-9.5s4.3-9.5,9.5-9.5S29.5,15.8,29.5,21z M37.9,9.1h-8.1l-2.3-4.2\n\tH12.6l-2.3,4.2H2.1C1.5,9.1,1,9.6,1,10.3v23.6C1,34.5,1.5,35,2.1,35h35.7c0.6,0,1.1-0.5,1.1-1.1V10.3C39,9.6,38.5,9.1,37.9,9.1z\n\t M34.8,13.4h-1.5v1.4h1.5V13.4z M14.1,19.8l5.4,5.4l8.5-9.3\"\n />\n </svg>\n);\n\nconst StopIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path fill=\"none\" strokeWidth=\"2\" d=\"M5,5h30v30H5V5z\" />\n </svg>\n);\n\nconst SuccessIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M20,2c9.9,0,18,8.1,18,18s-8.1,18-18,18S2,29.9,2,20S10.1,2,20,2z M29,13.5\n L17.8,26.3L11,19.1\"\n />\n </svg>\n);\n\nconst UnarchiveIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n stroke=\"#FFFFFF\"\n strokeWidth=\"2\"\n d=\"M27.6,16.2H39V39H1.1V16.1h11.6 M30.6,11.1L20.3,2L10,11.1 M20.3,2v31.2\"\n />\n </svg>\n);\n\nconst UndoIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M2,11.8h36v25.8H3.2 M11.4,2.4L2,11.8l9.4,9.4\"\n />\n </svg>\n);\n\nconst UnmuteIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n stroke=\"#1478AF\"\n strokeWidth=\"2\"\n d=\"M22,7.5v25L13.4,25h-9V15h9L22,7.5z M26.2,14.9l9.4,9.4 M35.6,14.9l-9.4,9.4\"\n />\n </svg>\n);\n\nconst UnpublishIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M26.1,7.6l-6.2-5.5l-6.2,5.5 M19.9,2v14.8 M9.1,16.2L30.9,38 M30.9,16.2L9.1,38\"\n />\n </svg>\n);\n\nconst UploadIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M2,1.4h36 M20.1,39.4V8.7 M29.8,17.3l-9.7-8.6l-9.7,8.6\"\n />\n </svg>\n);\n\nconst WarningIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M20,2c9.9,0,18,8.1,18,18s-8.1,18-18,18S2,29.9,2,20S10.1,2,20,2z M20,10.1v13.7l0,0V10.1z M20,29.9v-2.6l0,0\n V29.9z\"\n ></path>\n </svg>\n);\n\nconst XIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n <path\n vectorEffect=\"non-scaling-stroke\"\n fill=\"none\"\n strokeWidth=\"2\"\n d=\"M2.4,2.4l35.3,35.3 M37.6,2.4L2.4,37.6\"\n />\n </svg>\n);\n\n/**\n * Default SVG icons. A 'className' prop can also be passed in.\n * @example\n * <Icons icon={action.icon} />\n */\nexport const Icons: React.FC<IconsProps> = ({ icon, className }) => {\n const icons: { [key in IconName]: JSX.Element } = {\n [IconName.Archive]: <ArchiveIcon className={className} />,\n [IconName.BackwardOne]: <BackwardOne className={className} />,\n [IconName.BackwardTen]: <BackwardTen className={className} />,\n [IconName.Block]: <BlockIcon className={className} />,\n [IconName.Bulk]: <BulkIcon className={className} />,\n [IconName.Calendar]: <CalendarIcon className={className} />,\n [IconName.Checkmark]: <CheckmarkIcon className={className} />,\n [IconName.ChevronDown]: <ChevronDownIcon className={className} />,\n [IconName.ChevronLeft]: <ChevronLeftIcon className={className} />,\n [IconName.ChevronRight]: <ChevronRightIcon className={className} />,\n [IconName.ChevronUp]: <ChevronUpIcon className={className} />,\n [IconName.Copy]: <CopyIcon className={className} />,\n [IconName.Delete]: <DeleteIcon className={className} />,\n [IconName.Details]: <DetailsIcon className={className} />,\n [IconName.Drag]: <DragIcon className={className} />,\n [IconName.Ellipsis]: <EllipsisIcon className={className} />,\n [IconName.Error]: <ErrorIcon className={className} />,\n [IconName.External]: <ExternalIcon className={className} />,\n [IconName.File]: <FileIcon className={className} />,\n [IconName.ForwardOne]: <ForwardOne className={className} />,\n [IconName.ForwardTen]: <ForwardTen className={className} />,\n [IconName.Info]: <InfoIcon className={className} />,\n [IconName.MidlineEllipsis]: <MidlineEllipsisIcon className={className} />,\n [IconName.Minus]: <MinusIcon className={className} />,\n [IconName.Mute]: <MuteIcon className={className} />,\n [IconName.NavigateRight]: <NavigateRightIcon className={className} />,\n [IconName.Pause]: <PauseIcon className={className} />,\n [IconName.Play]: <PlayIcon className={className} />,\n [IconName.Plus]: <PlusIcon className={className} />,\n [IconName.Publish]: <PublishIcon className={className} />,\n [IconName.RemoveFilter]: <RemoveFilterIcon className={className} />,\n [IconName.Replace]: <ReplaceIcon className={className} />,\n [IconName.Retry]: <RetryIcon className={className} />,\n [IconName.Snapshot]: <SnapshotIcon className={className} />,\n [IconName.Stop]: <StopIcon className={className} />,\n [IconName.Success]: <SuccessIcon className={className} />,\n [IconName.Unarchive]: <UnarchiveIcon className={className} />,\n [IconName.Undo]: <UndoIcon className={className} />,\n [IconName.Unmute]: <UnmuteIcon className={className} />,\n [IconName.Unpublish]: <UnpublishIcon className={className} />,\n [IconName.Upload]: <UploadIcon className={className} />,\n [IconName.Warning]: <WarningIcon className={className} />,\n [IconName.X]: <XIcon className={className} />,\n };\n\n const actionIcon: JSX.Element =\n icon !== undefined ? (\n icons[icon]\n ) : (\n <svg\n className={clsx(classes.icons, className)}\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n ></svg>\n );\n\n return actionIcon;\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { noop } from '../../../helpers/utils';\nimport { IconName, Icons } from '../../Icons';\nimport { BaseButtonOptions, ButtonContext } from '../Button.model';\nimport classes from './Button.scss';\n\nexport interface ButtonProps extends BaseButtonOptions {\n /** Button's height (default: '50px') */\n height?: string | number;\n /** Button's width (default: '50px') */\n width?: string | number;\n /** Optional icon */\n icon?: IconName;\n}\n\nconst ButtonElement: React.ForwardRefRenderFunction<\n HTMLButtonElement,\n ButtonProps\n> = (\n {\n type = 'button',\n height,\n width,\n buttonContext = ButtonContext.Navigation,\n disabled = false,\n icon,\n className = '',\n dataTestId = undefined,\n onButtonClicked = noop,\n onBlur,\n },\n ref,\n) => {\n const customStyles = {\n height: height,\n width: width,\n } as React.CSSProperties;\n\n return (\n <button\n ref={ref}\n className={clsx(\n classes.container,\n { [classes.navigation]: buttonContext === ButtonContext.Navigation },\n {\n [classes.context]: buttonContext === ButtonContext.Context,\n },\n {\n [classes.icon]: buttonContext === ButtonContext.Icon,\n },\n {\n [classes.active]: buttonContext === ButtonContext.Active,\n },\n 'button-container',\n className,\n )}\n type={type}\n style={customStyles}\n onClick={onButtonClicked}\n disabled={disabled}\n onBlur={onBlur}\n data-test-id={dataTestId ?? 'button'}\n >\n <Icons icon={icon} />\n </button>\n );\n};\n\n/**\n * Button which can render an icon.\n * @example\n * <Button type=\"button\" icon={IconName.X} />\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ButtonElement,\n);\n","import clsx from 'clsx';\nimport React from 'react';\nimport { noop } from '../../../helpers/utils';\nimport { IconName, Icons } from '../../Icons';\nimport { BaseButtonOptions, ButtonContext } from '../Button.model';\nimport classes from './CompositeButton.scss';\n\n// TODO: Refactor buttons. Use a composition model.\nexport interface CompositeButtonProps extends BaseButtonOptions {\n /** Button's height (default: '30px') */\n height?: string | number;\n /** Button's width (default: undefined) */\n width?: string | number;\n /** Button text */\n text?: string;\n /** Optional icon */\n icon?: IconName;\n /** Optional Icon Position */\n iconPosition?: 'left' | 'right';\n}\n\n/**\n * Button which can render an text together with an icon.\n * @example\n * <CompositeButton type=\"button\" text=\"Click me!\" />\n */\nexport const CompositeButton: React.FC<CompositeButtonProps> = ({\n type = 'button',\n height,\n width,\n buttonContext = ButtonContext.Context,\n disabled = false,\n text = '',\n icon,\n iconPosition,\n className,\n dataTestId = undefined,\n onButtonClicked = noop,\n}: CompositeButtonProps) => {\n const customStyles = {\n height: height,\n width: width,\n direction: iconPosition === 'left' ? 'rtl' : 'ltr',\n } as React.CSSProperties;\n\n return (\n <button\n className={clsx(\n classes.container,\n { [classes.navigation]: buttonContext === ButtonContext.Navigation },\n {\n [classes.context]: buttonContext === ButtonContext.Context,\n },\n {\n [classes.active]: buttonContext === ButtonContext.Active,\n },\n 'composite-button-container',\n className,\n )}\n type={type}\n style={customStyles}\n onClick={onButtonClicked}\n disabled={disabled}\n data-test-id={dataTestId ?? 'text-button'}\n >\n <div>{text}</div>\n <div className={classes.icon}>\n {icon !== null && icon !== undefined && <Icons icon={icon} />}\n </div>\n </button>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { noop } from '../../../helpers/utils';\nimport { BaseButtonOptions, ButtonContext } from '../Button.model';\nimport classes from './TextButton.scss';\n\nexport interface TextButtonProps extends BaseButtonOptions {\n /** Button's height (default: '30px') */\n height?: string | number;\n /** Button's width (default: undefined) */\n width?: string | number;\n /** Button text */\n text?: string;\n}\n\n/**\n * Button which can render a text string.\n * @example\n * <TextButton type=\"button\" text=\"Click me!\" />\n */\nexport const TextButton: React.FC<TextButtonProps> = ({\n type = 'button',\n height,\n width,\n buttonContext = ButtonContext.Context,\n disabled = false,\n text = '',\n className,\n dataTestId = undefined,\n onButtonClicked = noop,\n}: TextButtonProps) => {\n const customStyles = {\n height: height,\n width: width,\n } as React.CSSProperties;\n\n return (\n <button\n className={clsx(\n classes.container,\n { [classes.navigation]: buttonContext === ButtonContext.Navigation },\n {\n [classes.context]: buttonContext === ButtonContext.Context,\n },\n {\n [classes.active]: buttonContext === ButtonContext.Active,\n },\n 'text-button-container',\n className,\n )}\n type={type}\n style={customStyles}\n onClick={onButtonClicked}\n disabled={disabled}\n data-test-id={dataTestId ?? 'text-button'}\n >\n {text}\n </button>\n );\n};\n","import clsx from 'clsx';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { Button, ButtonContext } from '../../Buttons';\nimport { IconName } from '../../Icons';\nimport classes from './AccordionItem.scss';\n\nexport interface AccordionItemProps {\n header: JSX.Element;\n\n /** Callback to emit when the expand button is clicked. When used within the Accordion component, this callback will be overridden. */\n toggleExpanded?: () => void;\n\n /** The current expanded state of the item. When used within the Accordion component, this prop will be overridden. */\n isExpanded?: boolean;\n\n /** Determines if spacing will be added to align with the Accordion header (default: true) */\n allowLeftSpacing?: boolean;\n\n /** Sticky state of the current row. When used within the Accordion component, this prop will be overridden with the value from stickyRows. */\n sticky?: boolean;\n}\n\n/**\n * Renders a single Accordion Item\n * @example\n * <AccordionItem header={<b>Item 2</b>}>\n <p>Content 2</p>\n </AccordionItem>\n */\nexport const AccordionItem: React.FC<AccordionItemProps> = ({\n header,\n children,\n toggleExpanded,\n isExpanded = false,\n allowLeftSpacing = true,\n sticky = false,\n}) => {\n const [scrollHeight, setScrollHeight] = useState<number>(0);\n const elementRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (elementRef.current) {\n setScrollHeight(elementRef.current.scrollHeight);\n }\n }, [scrollHeight, children]);\n\n return (\n <div data-test-id=\"accordion-item\">\n <div\n data-test-id=\"accordion-item-row\"\n className={clsx(\n classes.row,\n { [classes.sticky]: sticky },\n {\n [classes.rowExpanded]: isExpanded,\n },\n )}\n onClick={toggleExpanded}\n >\n <Button\n icon={isExpanded ? IconName.ChevronDown : IconName.ChevronRight}\n className={classes.button}\n buttonContext={ButtonContext.None}\n />\n {header}\n </div>\n <div\n data-test-id=\"accordion-item-content\"\n ref={elementRef}\n className={\n isExpanded\n ? clsx(classes.container, classes.expanded)\n : classes.container\n }\n style={{ maxHeight: isExpanded ? scrollHeight : 0 }}\n >\n <div\n className={classes.content}\n style={{ gridTemplateColumns: !allowLeftSpacing ? '1fr' : undefined }}\n >\n {allowLeftSpacing && <div></div>}\n {children}\n </div>\n </div>\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React, {\n ReactElement,\n useEffect,\n useLayoutEffect,\n useState,\n} from 'react';\nimport { useExpand } from '../../hooks/useExpand/useExpand';\nimport { Button, ButtonContext } from '../Buttons';\nimport { IconName } from '../Icons';\nimport classes from './Accordion.scss';\nimport {\n AccordionItem,\n AccordionItemProps,\n} from './AccordionItem/AccordionItem';\n\ninterface ExpandedState {\n [key: string]: boolean;\n}\n\nexport interface AccordionProps {\n /** React element which will be displayed as the Accordion Header */\n header?: JSX.Element;\n\n /** Whether the Accordion should be expanded or collapsed during the first render */\n expandedByDefault?: boolean;\n\n /** Determines if spacing will be added to align with the Accordion item with the header (default: true) */\n alignAccordionItem?: boolean;\n\n /** Whether the rows of the accordion should stick to the top */\n stickyRows?: boolean;\n\n /** CSS Class name for additional styles */\n className?: string;\n}\n\n/**\n * Renders a component in which each child component of the class AccordionItem can be expanded.\n * \n * @example \n * <Accordion header={<b>Header</b>}>\n <AccordionItem header={<b>Item 1</b>}>\n <p>Content 1</p>\n </AccordionItem>\n <AccordionItem header={<b>Item 2</b>}>\n <p>Content 2</p>\n </AccordionItem>\n </Accordion>\n */\nexport const Accordion: React.FC<AccordionProps> = ({\n header,\n expandedByDefault = false,\n children,\n stickyRows,\n alignAccordionItem,\n className = '',\n}) => {\n const expandAll = useExpand();\n const [expanded, setExpanded] = useState<ExpandedState>({});\n\n useEffect(() => {\n const updatedState: ExpandedState = { ...expanded };\n React.Children.map(children, (child, i) => {\n if (React.isValidElement(child)) {\n if (child.type === AccordionItem) {\n const keyString = String(child.key ?? i);\n\n if (!Object.keys(updatedState).includes(keyString)) {\n updatedState[keyString] = expandedByDefault;\n }\n }\n }\n });\n\n setExpanded(updatedState);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [children, expandedByDefault]);\n\n useLayoutEffect(() => {\n expandAll.collapse();\n Object.keys(expanded).forEach((e) => {\n if (expanded[e]) {\n expandAll.expand();\n }\n });\n });\n\n return (\n <div\n className={clsx(classes.container, className)}\n data-test-id=\"accordion\"\n >\n <div className={clsx(classes.wrapper)}>\n {header && (\n <div className={clsx(classes.header)} data-test-id=\"accordion-header\">\n <Button\n icon={\n expandAll.isExpanded\n ? IconName.ChevronDown\n : IconName.ChevronRight\n }\n onButtonClicked={() => {\n const updatedState = { ...expanded };\n\n Object.keys(updatedState).forEach((e) => {\n updatedState[e] = !expandAll.isExpanded;\n });\n\n setExpanded(updatedState);\n expandAll.toggleExpanded();\n }}\n className={clsx(classes.button)}\n buttonContext={ButtonContext.None}\n ></Button>\n {header}\n </div>\n )}\n {React.Children.map(children, (child, i) => {\n if (React.isValidElement(child)) {\n if (child.type === AccordionItem) {\n const keyString = String(child.key ?? i);\n return React.cloneElement(\n child as ReactElement<AccordionItemProps>,\n {\n sticky: (child.props.sticky ?? stickyRows) && header,\n key: keyString,\n allowLeftSpacing: alignAccordionItem,\n isExpanded: expanded[keyString] ?? expandedByDefault,\n toggleExpanded: () => {\n const updatedState = { ...expanded };\n if (!Object.keys(updatedState).includes(keyString)) {\n updatedState[keyString] = !expandedByDefault;\n } else {\n updatedState[keyString] = !updatedState[keyString];\n }\n setExpanded(updatedState);\n },\n },\n );\n } else {\n return child;\n }\n }\n })}\n </div>\n </div>\n );\n};\n","import * as React from 'react';\n\n/**\n * Takes an argument and if it's an array, returns the first item in the array,\n * otherwise returns the argument. Used for Preact compatibility.\n */\nexport var unwrapArray = function unwrapArray(arg) {\n return Array.isArray(arg) ? arg[0] : arg;\n};\n/**\n * Takes a maybe-undefined function and arbitrary args and invokes the function\n * only if it is defined.\n */\n\nexport var safeInvoke = function safeInvoke(fn) {\n if (typeof fn === 'function') {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return fn.apply(void 0, args);\n }\n};\n/**\n * Sets a ref using either a ref callback or a ref object\n */\n\nexport var setRef = function setRef(ref, node) {\n // if its a function call it\n if (typeof ref === 'function') {\n return safeInvoke(ref, node);\n } // otherwise we should treat it as a ref object\n else if (ref != null) {\n ref.current = node;\n }\n};\n/**\n * Simple ponyfill for Object.fromEntries\n */\n\nexport var fromEntries = function fromEntries(entries) {\n return entries.reduce(function (acc, _ref) {\n var key = _ref[0],\n value = _ref[1];\n acc[key] = value;\n return acc;\n }, {});\n};\n/**\n * Small wrapper around `useLayoutEffect` to get rid of the warning on SSR envs\n */\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && window.document && window.document.createElement ? React.useLayoutEffect : React.useEffect;","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","import { isHTMLElement } from \"./instanceOf.js\";\nvar round = Math.round;\nexport default function getBoundingClientRect(element, includeScale) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n var rect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (isHTMLElement(element) && includeScale) {\n var offsetHeight = element.offsetHeight;\n var offsetWidth = element.offsetWidth; // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n // Fallback to 1 in case both values are `0`\n\n if (offsetWidth > 0) {\n scaleX = rect.width / offsetWidth || 1;\n }\n\n if (offsetHeight > 0) {\n scaleY = rect.height / offsetHeight || 1;\n }\n }\n\n return {\n width: round(rect.width / scaleX),\n height: round(rect.height / scaleY),\n top: round(rect.top / scaleY),\n right: round(rect.right / scaleX),\n bottom: round(rect.bottom / scaleY),\n left: round(rect.left / scaleX),\n x: round(rect.left / scaleX),\n y: round(rect.top / scaleY)\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport default function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(round(x * dpr) / dpr) || 0,\n y: round(round(y * dpr) / dpr) || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets;\n\n var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n _ref3$x = _ref3.x,\n x = _ref3$x === void 0 ? 0 : _ref3$x,\n _ref3$y = _ref3.y,\n y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom; // $FlowFixMe[prop-missing]\n\n y -= offsetParent[heightProp] - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right; // $FlowFixMe[prop-missing]\n\n x -= offsetParent[widthProp] - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref4) {\n var state = _ref4.state,\n options = _ref4.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n var rect = getBoundingClientRect(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = rect.width / element.offsetWidth || 1;\n var scaleY = rect.height / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function format(str) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return [].concat(args).reduce(function (p, c) {\n return p.replace(/%s/, c);\n }, str);\n}","import format from \"./format.js\";\nimport { modifierPhases } from \"../enums.js\";\nvar INVALID_MODIFIER_ERROR = 'Popper: modifier \"%s\" provided an invalid %s property, expected %s but got %s';\nvar MISSING_DEPENDENCY_ERROR = 'Popper: modifier \"%s\" requires \"%s\", but \"%s\" modifier is not available';\nvar VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options'];\nexport default function validateModifiers(modifiers) {\n modifiers.forEach(function (modifier) {\n [].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)`\n .filter(function (value, index, self) {\n return self.indexOf(value) === index;\n }).forEach(function (key) {\n switch (key) {\n case 'name':\n if (typeof modifier.name !== 'string') {\n console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '\"name\"', '\"string\"', \"\\\"\" + String(modifier.name) + \"\\\"\"));\n }\n\n break;\n\n case 'enabled':\n if (typeof modifier.enabled !== 'boolean') {\n console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"enabled\"', '\"boolean\"', \"\\\"\" + String(modifier.enabled) + \"\\\"\"));\n }\n\n break;\n\n case 'phase':\n if (modifierPhases.indexOf(modifier.phase) < 0) {\n console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"phase\"', \"either \" + modifierPhases.join(', '), \"\\\"\" + String(modifier.phase) + \"\\\"\"));\n }\n\n break;\n\n case 'fn':\n if (typeof modifier.fn !== 'function') {\n console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"fn\"', '\"function\"', \"\\\"\" + String(modifier.fn) + \"\\\"\"));\n }\n\n break;\n\n case 'effect':\n if (modifier.effect != null && typeof modifier.effect !== 'function') {\n console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"effect\"', '\"function\"', \"\\\"\" + String(modifier.fn) + \"\\\"\"));\n }\n\n break;\n\n case 'requires':\n if (modifier.requires != null && !Array.isArray(modifier.requires)) {\n console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"requires\"', '\"array\"', \"\\\"\" + String(modifier.requires) + \"\\\"\"));\n }\n\n break;\n\n case 'requiresIfExists':\n if (!Array.isArray(modifier.requiresIfExists)) {\n console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"requiresIfExists\"', '\"array\"', \"\\\"\" + String(modifier.requiresIfExists) + \"\\\"\"));\n }\n\n break;\n\n case 'options':\n case 'data':\n break;\n\n default:\n console.error(\"PopperJS: an invalid property has been provided to the \\\"\" + modifier.name + \"\\\" modifier, valid properties are \" + VALID_PROPERTIES.map(function (s) {\n return \"\\\"\" + s + \"\\\"\";\n }).join(', ') + \"; but \\\"\" + key + \"\\\" was provided.\");\n }\n\n modifier.requires && modifier.requires.forEach(function (requirement) {\n if (modifiers.find(function (mod) {\n return mod.name === requirement;\n }) == null) {\n console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));\n }\n });\n });\n });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function uniqueBy(arr, fn) {\n var identifiers = new Set();\n return arr.filter(function (item) {\n var identifier = fn(item);\n\n if (!identifiers.has(identifier)) {\n identifiers.add(identifier);\n return true;\n }\n });\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\";\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport within from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { max as mathMax, min as mathMin } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis || checkAltAxis) {\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = popperOffsets[mainAxis] + overflow[mainSide];\n var max = popperOffsets[mainAxis] - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n if (checkMainAxis) {\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var _preventedOffset = within(tether ? mathMin(_min, tetherMin) : _min, _offset, tether ? mathMax(_max, tetherMax) : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport within from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.1\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","import * as React from 'react';\nimport { createPopper as defaultCreatePopper } from '@popperjs/core';\nimport isEqual from 'react-fast-compare';\nimport { fromEntries, useIsomorphicLayoutEffect } from './utils';\nvar EMPTY_MODIFIERS = [];\nexport var usePopper = function usePopper(referenceElement, popperElement, options) {\n if (options === void 0) {\n options = {};\n }\n\n var prevOptions = React.useRef(null);\n var optionsWithDefaults = {\n onFirstUpdate: options.onFirstUpdate,\n placement: options.placement || 'bottom',\n strategy: options.strategy || 'absolute',\n modifiers: options.modifiers || EMPTY_MODIFIERS\n };\n\n var _React$useState = React.useState({\n styles: {\n popper: {\n position: optionsWithDefaults.strategy,\n left: '0',\n top: '0'\n },\n arrow: {\n position: 'absolute'\n }\n },\n attributes: {}\n }),\n state = _React$useState[0],\n setState = _React$useState[1];\n\n var updateStateModifier = React.useMemo(function () {\n return {\n name: 'updateState',\n enabled: true,\n phase: 'write',\n fn: function fn(_ref) {\n var state = _ref.state;\n var elements = Object.keys(state.elements);\n setState({\n styles: fromEntries(elements.map(function (element) {\n return [element, state.styles[element] || {}];\n })),\n attributes: fromEntries(elements.map(function (element) {\n return [element, state.attributes[element]];\n }))\n });\n },\n requires: ['computeStyles']\n };\n }, []);\n var popperOptions = React.useMemo(function () {\n var newOptions = {\n onFirstUpdate: optionsWithDefaults.onFirstUpdate,\n placement: optionsWithDefaults.placement,\n strategy: optionsWithDefaults.strategy,\n modifiers: [].concat(optionsWithDefaults.modifiers, [updateStateModifier, {\n name: 'applyStyles',\n enabled: false\n }])\n };\n\n if (isEqual(prevOptions.current, newOptions)) {\n return prevOptions.current || newOptions;\n } else {\n prevOptions.current = newOptions;\n return newOptions;\n }\n }, [optionsWithDefaults.onFirstUpdate, optionsWithDefaults.placement, optionsWithDefaults.strategy, optionsWithDefaults.modifiers, updateStateModifier]);\n var popperInstanceRef = React.useRef();\n useIsomorphicLayoutEffect(function () {\n if (popperInstanceRef.current) {\n popperInstanceRef.current.setOptions(popperOptions);\n }\n }, [popperOptions]);\n useIsomorphicLayoutEffect(function () {\n if (referenceElement == null || popperElement == null) {\n return;\n }\n\n var createPopper = options.createPopper || defaultCreatePopper;\n var popperInstance = createPopper(referenceElement, popperElement, popperOptions);\n popperInstanceRef.current = popperInstance;\n return function () {\n popperInstance.destroy();\n popperInstanceRef.current = null;\n };\n }, [referenceElement, popperElement, options.createPopper]);\n return {\n state: popperInstanceRef.current ? popperInstanceRef.current.state : null,\n styles: state.styles,\n attributes: state.attributes,\n update: popperInstanceRef.current ? popperInstanceRef.current.update : null,\n forceUpdate: popperInstanceRef.current ? popperInstanceRef.current.forceUpdate : null\n };\n};","import clsx from 'clsx';\nimport React from 'react';\nimport { IconName, Icons } from '../Icons';\nimport classes from './Message.scss';\n\nexport type MessageType = 'error' | 'info' | 'success' | 'warning';\ntype MessageClass = 'hasError' | 'hasInfo' | 'hasSuccess' | 'hasWarning';\n\nexport interface MessageProps {\n /** Title of the Message */\n title: string | React.ReactNode;\n /** Message type. default: ('error') */\n type?: MessageType;\n /** React element which will be rendered after the title */\n header?: JSX.Element;\n /** Determines if the body is rendered (default: 'false')*/\n isBodyOpen?: boolean;\n /** Disables 'position: absolute' styling if set to false (default: true)*/\n isBodyPositionAbsolute?: boolean;\n /** Optional class */\n className?: string;\n /** Optional data-test-id. Defaults to 'message' */\n dataTestId?: string;\n}\n\n/**\n * Renders a contextual feedback message\n * Takes optional children which will be hidden by default. If the child is only a string, it will be wrapped in a '<p>' element.\n * @example\n * <Message type=\"error\" title=\"An error has occurred\" />\n */\nexport const Message: React.FC<MessageProps> = ({\n children,\n type = 'error',\n title,\n header,\n isBodyOpen = false,\n isBodyPositionAbsolute = true,\n className,\n dataTestId = 'message',\n}) => {\n const state: {\n [Key in MessageType]: MessageClass;\n } = {\n error: 'hasError',\n info: 'hasInfo',\n success: 'hasSuccess',\n warning: 'hasWarning',\n };\n\n const icon: {\n [Key in MessageType]: IconName;\n } = {\n error: IconName.Error,\n info: IconName.Info,\n success: IconName.Success,\n warning: IconName.Warning,\n };\n\n return (\n <div\n className={clsx(\n classes.container,\n classes[state[type]],\n 'message-container',\n className,\n )}\n data-test-id={dataTestId}\n data-test-type={type}\n >\n <div className={classes.titleWrapper}>\n <div className={clsx(classes.typeIcon)}>\n <Icons icon={icon[type]} className={classes.icon} />\n </div>\n\n <div className={classes.title}>\n <p data-test-id=\"message-title\">{title}</p>\n </div>\n\n {header && <div className={classes.header}>{header}</div>}\n </div>\n {children && isBodyOpen && (\n <div\n className={clsx(classes.body, {\n [classes.absolute]: isBodyPositionAbsolute,\n })}\n >\n {children}\n </div>\n )}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React, { useEffect, useState } from 'react';\nimport { usePopper } from 'react-popper';\nimport { noop } from '../../helpers/utils';\nimport { ButtonContext, TextButton } from '../Buttons';\nimport { Message } from '../Message';\nimport {\n ConfirmationMode,\n ConfirmationPlacement,\n} from './ConfirmDialog.models';\nimport classes from './ConfirmDialog.scss';\n\n// Popper needs useState not useRef to know when the state of the component changes. More info here: https://www.youtube.com/watch?v=cIUfTktVZRM\ninterface useConfirmationDelayProps {\n confirmationMode: ConfirmationMode;\n confirmation: boolean;\n setConfirmation: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nexport interface ConfirmDialogProps {\n referenceElement?: HTMLElement;\n /** Dialog title default('Confirmation needed') */\n title?: string;\n /** Cancel button text default('Cancel') */\n cancelButtonText?: string;\n /** Confirm button text default('Confirm') */\n confirmButtonText?: string;\n /** Optional class */\n className?: string;\n /** Default placement can be changed with this optional property (default: 'top') */\n placement?: ConfirmationPlacement;\n /** Move along the reference element default(0) */\n offsetSkidding?: number;\n /** Distance to the reference element default(6) */\n offsetDistance?: number;\n /** Raised when the 'Cancel' button is clicked */\n onCancel?: () => void;\n /** Raised when the 'Confirm' button is clicked */\n onConfirm?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n /** Emits on mount and un-mount */\n onConfirmOpen?: (isOpen: boolean) => void;\n}\n\n/**\n * Renders a dialog pop up. Giving the user the option to confirm or cancel an action.\n * @example\n * const [referenceElement, setReferenceElement] = useState<HTMLElement>();\n * <div ref={setReferenceElement as React.LegacyRef<HTMLDivElement>}>\n * <ConfirmDialog\n * referenceElement={referenceElement}\n * onCancel={onCancelHandler}\n * onConfirm={onConfirmHandler}\n * />\n * </div>\n */\nexport const ConfirmDialog: React.FC<ConfirmDialogProps> = ({\n referenceElement,\n title = 'Confirmation needed',\n children,\n cancelButtonText = 'Cancel',\n confirmButtonText = 'Confirm',\n className = '',\n placement = 'top',\n offsetSkidding = 0,\n offsetDistance = 6,\n onCancel = noop,\n onConfirm = noop,\n onConfirmOpen,\n}) => {\n useEffect(() => {\n onConfirmOpen && onConfirmOpen(true);\n return () => {\n onConfirmOpen && onConfirmOpen(false);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [popperElement, setPopperElement] = useState<HTMLDivElement>();\n const [arrowElement, setArrowElement] = useState<HTMLDivElement>();\n\n const { styles, attributes } = usePopper(referenceElement, popperElement, {\n modifiers: [\n {\n name: 'arrow',\n options: { element: arrowElement },\n },\n {\n name: 'offset',\n options: {\n offset: [offsetSkidding, offsetDistance],\n },\n },\n ],\n placement,\n });\n\n return (\n <div\n className={clsx(classes.container, 'confirm-dialog-container', className)}\n ref={setPopperElement as React.LegacyRef<HTMLDivElement>}\n style={styles.popper}\n {...attributes.popper}\n onClick={(e) => e.stopPropagation()}\n >\n <Message\n title={title}\n type=\"warning\"\n isBodyOpen={true}\n isBodyPositionAbsolute={false}\n >\n <div className={classes.confirmBody}>\n <div className={classes.confirmBodyText}>{getChildren(children)}</div>\n <TextButton\n className={classes.confirmButton}\n text={cancelButtonText}\n onButtonClicked={onCancel}\n dataTestId=\"cancel\"\n />\n <TextButton\n className={classes.confirmButton}\n text={confirmButtonText}\n onButtonClicked={onConfirm}\n buttonContext={ButtonContext.Active}\n dataTestId=\"confirm\"\n />\n </div>\n </Message>\n\n <div\n ref={setArrowElement as React.LegacyRef<HTMLDivElement>}\n className={classes.arrow}\n />\n </div>\n );\n};\n\n// Extracted into a separate hook for reusability in the future\nexport const useConfirmationDelay = ({\n confirmationMode,\n confirmation,\n setConfirmation,\n}: useConfirmationDelayProps): {\n readonly isMouseOver: boolean;\n readonly setIsMouseOver: React.Dispatch<React.SetStateAction<boolean>>;\n} => {\n // Remove confirmation 0.5 seconds after onMouseLeave\n const [isMouseOver, setIsMouseOver] = useState<boolean>(false);\n useEffect(() => {\n let timer: NodeJS.Timeout | undefined;\n if (confirmationMode === 'Simple') {\n // start time out after mouse leaves component\n if (confirmation && !isMouseOver) {\n if (timer === undefined) {\n timer = global.setTimeout(() => {\n setConfirmation(false);\n }, 500);\n }\n // clear the timer if mouse enters again\n } else if (timer !== undefined && confirmation && isMouseOver) {\n () => clearTimeout(timer as NodeJS.Timeout);\n }\n }\n // clear the timer after the component is unmounted\n return () => clearTimeout(timer as NodeJS.Timeout);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [confirmation, isMouseOver]);\n\n return { isMouseOver, setIsMouseOver } as const;\n};\n\n/**\n * If children is just a 'string', will wrap it in 'p' tags, otherwise will just return children.\n * @param child component's children\n * @returns React.ReactNode\n */\nconst getChildren = (child?: React.ReactNode): React.ReactNode => {\n let result: React.ReactNode;\n\n switch (true) {\n case child === undefined:\n result = (\n <p className={classes.defaultText}>\n The action is irreversible. Please confirm to proceed.\n </p>\n );\n break;\n case typeof child === 'string':\n result = <p className={classes.defaultText}>{child}</p>;\n break;\n default:\n result = child;\n break;\n }\n\n return result;\n};\n","import clsx from 'clsx';\nimport React, { useEffect, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport {\n ConfirmationConfig,\n ConfirmDialog,\n useConfirmationDelay,\n} from '../../ConfirmDialog';\nimport { IconName, Icons } from '../../Icons';\nimport {\n ActionData,\n ContextActionData,\n NavigationActionData,\n} from '../Actions.models';\nimport classes from './Action.scss';\n\nexport interface ActionProps {\n /** Action to perform */\n action: ActionData;\n onActionClick?: ActionClickHandler;\n}\n\nexport type ActionClickHandler = (\n e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n action: ContextActionData,\n) => void;\n\n/**\n * Simple Confirm message\n * @example\n * <SimpleConfirmDialog />\n */\nconst SimpleConfirmDialog: React.FC<{\n onConfirmOpen: ConfirmationConfig['onConfirmOpen'];\n}> = ({ onConfirmOpen }) => {\n useEffect(() => {\n onConfirmOpen && onConfirmOpen(true);\n return () => {\n onConfirmOpen && onConfirmOpen(false);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return <span data-test-id=\"confirm\">Click again to confirm</span>;\n};\n\n/**\n * Renders an action a user can click on\n * @example\n * // Action with click handler\n * <Action\n * action: {{\n * label: 'Context Action',\n * onActionSelected={clickHandler}\n * }}\n * />\n * // An anchor tag leading to the path within the application\n * <Action\n * action: {{\n * label: 'Navigation Action',\n * path={path}\n * }}\n * />\n */\nexport const Action: React.FC<ActionProps> = ({ action, onActionClick }) =>\n isNavigationAction(action) ? (\n <NavigationAction action={action} />\n ) : (\n <ContextAction action={action} onActionClick={onActionClick} />\n );\n\n/**\n * Renders HTML element with onClick handler and specified confirmation mode\n * @example\n * <ContextAction action={action} onActionClick={onActionClick}/>\n */\nconst ContextAction: React.FC<{\n action: ContextActionData;\n onActionClick?: ActionClickHandler;\n}> = ({ action, onActionClick }) => {\n const {\n label,\n icon,\n confirmationMode = 'None',\n confirmationConfig = {},\n onActionSelected,\n isDisabled = false,\n } = action;\n const [confirmation, setConfirmation] = useState<boolean>(false);\n const [referenceElement, setReferenceElement] = useState<HTMLElement>();\n const { isMouseOver, setIsMouseOver } = useConfirmationDelay({\n confirmationMode,\n confirmation,\n setConfirmation,\n });\n\n const { title, body, cancelButtonText, confirmButtonText, onConfirmOpen } =\n confirmationConfig;\n\n // Action has been clicked\n const onClickHandler: React.MouseEventHandler<HTMLDivElement> = (e): void => {\n switch (confirmationMode) {\n case 'Simple':\n !confirmation\n ? setConfirmation(true)\n : (onActionSelected?.(), setConfirmation(false));\n break;\n case 'Advanced':\n setConfirmation(true);\n break;\n default:\n onActionSelected?.();\n setConfirmation(false);\n break;\n }\n onActionClick?.(e, action);\n };\n\n return (\n <div\n className={clsx(\n classes.container,\n classes.context,\n {\n [classes.hasConfirm]: confirmation,\n [classes.hasIcon]: icon !== undefined,\n [classes.isDisabled]: isDisabled,\n },\n 'action-container',\n )} // Show different bg-color when confirmation is displayed\n ref={setReferenceElement as React.LegacyRef<HTMLDivElement>}\n onClick={isDisabled ? undefined : onClickHandler}\n onMouseEnter={() => setIsMouseOver(true)}\n onMouseLeave={() => setIsMouseOver(false)}\n onMouseOver={() => {\n // Needed in cases where the mouse enters the component after another confirmation dialog was dismissed\n if (!isMouseOver) {\n setIsMouseOver(true);\n }\n }}\n data-test-id=\"action\"\n >\n {confirmation && confirmationMode === 'Simple' ? (\n <SimpleConfirmDialog onConfirmOpen={onConfirmOpen} />\n ) : (\n <span data-test-id=\"label\">{label}</span>\n )}\n {icon !== undefined && !confirmation && (\n <Icons icon={icon} className={classes.icon} />\n )}\n {confirmation && confirmationMode === 'Advanced' && (\n <ConfirmDialog\n referenceElement={referenceElement}\n title={title}\n cancelButtonText={cancelButtonText}\n confirmButtonText={confirmButtonText}\n offsetSkidding={1}\n onCancel={() => setConfirmation(false)}\n onConfirm={() => {\n onActionSelected?.();\n setConfirmation(false);\n }}\n onConfirmOpen={\n confirmationMode === 'Advanced' && onConfirmOpen !== undefined\n ? onConfirmOpen\n : undefined\n }\n >\n {body}\n </ConfirmDialog>\n )}\n </div>\n );\n};\n\n/**\n * Renders HTML anchor element\n * @example\n * <NavigationAction action={{ path: '#', label: 'Navigation Action'}} />\n */\nconst NavigationAction: React.FC<{ action: NavigationActionData }> = ({\n action,\n}) => {\n const {\n path,\n label,\n icon = IconName.ChevronRight,\n isDisabled = false,\n } = action;\n return (\n <Link\n to={path}\n className={clsx(\n classes.container,\n classes.containerLink,\n classes.hasIcon,\n {\n [classes.isDisabled]: isDisabled,\n },\n 'action-container',\n )}\n data-test-id=\"action\"\n >\n <span data-test-id=\"label\">{label}</span>\n <Icons icon={icon} className={classes.icon} />\n </Link>\n );\n};\n\n/**\n * Determines whether an action data object is a NavigationActionData object.\n * @param {ActionData} action - The action data object to check.\n * @returns {boolean} - Whether the action data object is a NavigationActionData object.\n */\nexport function isNavigationAction(\n action: ActionData<unknown>,\n): action is NavigationActionData {\n return 'path' in action && !!action.path;\n}\n\n/**\n * Determines whether an action data object is a ContextActionData object.\n * @param {ActionData} action - The action data object to check.\n * @returns {boolean} - Whether the action data object is a ContextActionData object.\n */\nexport function isContextAction(\n action: ActionData<unknown>,\n): action is ContextActionData {\n return 'onActionSelected' in action && !!action.onActionSelected;\n}\n","import clsx from 'clsx';\nimport React from 'react';\nimport { Action } from './Action/Action';\nimport { ActionData, ContextActionData } from './Actions.models';\nimport classes from './Actions.scss';\n\nexport interface ActionsProps {\n /** Array of Actions to be rendered */\n actions?: ActionData[];\n /** Width of the container */\n width?: string;\n /** CSS Class name for additional styles */\n className?: string;\n onActionClick?: (\n e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n action: ContextActionData,\n ) => void;\n}\n\n/**\n * Renders an array of actions\n * @example\n * <Actions\n * actions={[{ label: 'Action Label', onActionSelected={actionSelectedHandler} }]}\n * />\n */\nexport const Actions: React.FC<ActionsProps> = ({\n actions = [],\n width = '300px',\n className = '',\n onActionClick,\n}) => {\n const customStyles = {\n width: width,\n } as React.CSSProperties;\n\n return (\n <div\n className={clsx(classes.container, 'actions-container', className)}\n style={customStyles}\n data-test-id=\"actions\"\n >\n {actions.map((action, index) => (\n <Action key={index} action={action} onActionClick={onActionClick} />\n ))}\n </div>\n );\n};\n","import { Not } from '../../types';\nimport { ConfirmationConfig, ConfirmationMode } from '../ConfirmDialog';\nimport { IconName } from '../Icons';\nimport { ErrorType } from '../models';\n\n/**\n * @deprecated ActionData interface has been changed and no longer uses `actionType` property\n */\nexport enum ActionType {\n Navigation,\n Context,\n}\n\nexport type ActionData<THandler = DefaultSelectionHandler> =\n | ContextActionData<THandler>\n | NavigationActionData;\n\n/**\n * Properties necessary for context type action\n * to render an element with JS handler\n * and specified confirmation mode for click event\n */\nexport interface ContextActionData<THandler = DefaultSelectionHandler>\n extends ActionBaseData,\n ConfirmAction,\n HandledAction<THandler>,\n Not<LinkAction> {}\n\n/**\n * Properties necessary for navigation type action\n * to render an anchor tag\n */\nexport interface NavigationActionData\n extends ActionBaseData,\n LinkAction,\n Not<ConfirmAction>,\n Not<HandledAction<unknown>> {}\n\nexport type DefaultSelectionHandler = () =>\n | Promise<ErrorType | undefined | void>\n | ErrorType\n | undefined\n | void;\n\ninterface LinkAction {\n /** Path to navigate to when the action is clicked. */\n path: string;\n}\n\ninterface HandledAction<THandler> {\n /** Callback emitted when a user clicks on the Action. */\n onActionSelected: THandler;\n}\n\ninterface ConfirmAction {\n /** If set to 'Simple', the action will require confirmation. If set to 'Advanced', action will require confirmation via a confirmation pop up. (default: 'None') */\n confirmationMode?: ConfirmationMode;\n /** Optional text overrides for the confirmation pop up. */\n confirmationConfig?: ConfirmationConfig;\n}\n\ninterface ActionBaseData {\n /**\n * @deprecated this property is no longer used,\n * instead specify `path` property for navigation type actions\n * and `onActionSelected` handler for context type actions\n */\n actionType?: ActionType;\n /** The label of the action. */\n label: string;\n /** Optional icon (default: 'IconName.ChevronRight') */\n icon?: IconName;\n /** Renders an un-clickable button if true. */\n isDisabled?: boolean;\n}\n","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_ASYNC_MODE_TYPE:\n case REACT_CONCURRENT_MODE_TYPE:\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n }\n }\n\n return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = require('./lib/has');\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) { /**/ }\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n /* global Symbol */\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n /**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n * var iteratorFn = getIteratorFn(myIterable);\n * if (iteratorFn) {\n * var iterator = iteratorFn.call(myIterable);\n * ...\n * }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\n function getIteratorFn(maybeIterable) {\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n if (typeof iteratorFn === 'function') {\n return iteratorFn;\n }\n }\n\n /**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n * var Props = require('ReactPropTypes');\n * var MyArticle = React.createClass({\n * propTypes: {\n * // An optional string prop named \"description\".\n * description: Props.string,\n *\n * // A required enum prop named \"category\".\n * category: Props.oneOf(['News','Photos']).isRequired,\n *\n * // A prop named \"dialog\" that requires an instance of Dialog.\n * dialog: Props.instanceOf(Dialog).isRequired\n * },\n * render: function() { ... }\n * });\n *\n * A more formal specification of how these methods are used:\n *\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n * decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n * var MyLink = React.createClass({\n * propTypes: {\n * // An optional string or URI prop named \"href\".\n * href: function(props, propName, componentName) {\n * var propValue = props[propName];\n * if (propValue != null && typeof propValue !== 'string' &&\n * !(propValue instanceof URI)) {\n * return new Error(\n * 'Expected a string or an URI for ' + propName + ' in ' +\n * componentName\n * );\n * }\n * }\n * },\n * render: function() {...}\n * });\n *\n * @internal\n */\n\n var ANONYMOUS = '<<anonymous>>';\n\n // Important!\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n var ReactPropTypes = {\n array: createPrimitiveTypeChecker('array'),\n bigint: createPrimitiveTypeChecker('bigint'),\n bool: createPrimitiveTypeChecker('boolean'),\n func: createPrimitiveTypeChecker('function'),\n number: createPrimitiveTypeChecker('number'),\n object: createPrimitiveTypeChecker('object'),\n string: createPrimitiveTypeChecker('string'),\n symbol: createPrimitiveTypeChecker('symbol'),\n\n any: createAnyTypeChecker(),\n arrayOf: createArrayOfTypeChecker,\n element: createElementTypeChecker(),\n elementType: createElementTypeTypeChecker(),\n instanceOf: createInstanceTypeChecker,\n node: createNodeChecker(),\n objectOf: createObjectOfTypeChecker,\n oneOf: createEnumTypeChecker,\n oneOfType: createUnionTypeChecker,\n shape: createShapeTypeChecker,\n exact: createStrictShapeTypeChecker,\n };\n\n /**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n /*eslint-disable no-self-compare*/\n function is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return x !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n }\n /*eslint-enable no-self-compare*/\n\n /**\n * We use an Error-like object for backward compatibility as people may call\n * PropTypes directly and inspect their output. However, we don't use real\n * Errors anymore. We don't inspect their stack anyway, and creating them\n * is prohibitively expensive if they are created too often, such as what\n * happens in oneOfType() for any type before the one that matched.\n */\n function PropTypeError(message, data) {\n this.message = message;\n this.data = data && typeof data === 'object' ? data: {};\n this.stack = '';\n }\n // Make `instanceof Error` still work for returned errors.\n PropTypeError.prototype = Error.prototype;\n\n function createChainableTypeChecker(validate) {\n if (process.env.NODE_ENV !== 'production') {\n var manualPropTypeCallCache = {};\n var manualPropTypeWarningCount = 0;\n }\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n componentName = componentName || ANONYMOUS;\n propFullName = propFullName || propName;\n\n if (secret !== ReactPropTypesSecret) {\n if (throwOnDirectAccess) {\n // New behavior only for users of `prop-types` package\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n // Old behavior for people using React.PropTypes\n var cacheKey = componentName + ':' + propName;\n if (\n !manualPropTypeCallCache[cacheKey] &&\n // Avoid spamming the console because they are often not actionable except for lib authors\n manualPropTypeWarningCount < 3\n ) {\n printWarning(\n 'You are manually calling a React.PropTypes validation ' +\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n 'and will throw in the standalone `prop-types` package. ' +\n 'You may be seeing this warning due to a third-party PropTypes ' +\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n );\n manualPropTypeCallCache[cacheKey] = true;\n manualPropTypeWarningCount++;\n }\n }\n }\n if (props[propName] == null) {\n if (isRequired) {\n if (props[propName] === null) {\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n }\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n }\n return null;\n } else {\n return validate(props, propName, componentName, location, propFullName);\n }\n }\n\n var chainedCheckType = checkType.bind(null, false);\n chainedCheckType.isRequired = checkType.bind(null, true);\n\n return chainedCheckType;\n }\n\n function createPrimitiveTypeChecker(expectedType) {\n function validate(props, propName, componentName, location, propFullName, secret) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== expectedType) {\n // `propValue` being instance of, say, date/regexp, pass the 'object'\n // check, but we can offer a more precise error message here rather than\n // 'of type `object`'.\n var preciseType = getPreciseType(propValue);\n\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n {expectedType: expectedType}\n );\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createAnyTypeChecker() {\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n }\n\n function createArrayOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n }\n var propValue = props[propName];\n if (!Array.isArray(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n }\n for (var i = 0; i < propValue.length; i++) {\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!isValidElement(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createElementTypeTypeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n if (!ReactIs.isValidElementType(propValue)) {\n var propType = getPropType(propValue);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createInstanceTypeChecker(expectedClass) {\n function validate(props, propName, componentName, location, propFullName) {\n if (!(props[propName] instanceof expectedClass)) {\n var expectedClassName = expectedClass.name || ANONYMOUS;\n var actualClassName = getClassName(props[propName]);\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createEnumTypeChecker(expectedValues) {\n if (!Array.isArray(expectedValues)) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n printWarning(\n 'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n );\n } else {\n printWarning('Invalid argument supplied to oneOf, expected an array.');\n }\n }\n return emptyFunctionThatReturnsNull;\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n for (var i = 0; i < expectedValues.length; i++) {\n if (is(propValue, expectedValues[i])) {\n return null;\n }\n }\n\n var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n var type = getPreciseType(value);\n if (type === 'symbol') {\n return String(value);\n }\n return value;\n });\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createObjectOfTypeChecker(typeChecker) {\n function validate(props, propName, componentName, location, propFullName) {\n if (typeof typeChecker !== 'function') {\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n }\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n }\n for (var key in propValue) {\n if (has(propValue, key)) {\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error instanceof Error) {\n return error;\n }\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createUnionTypeChecker(arrayOfTypeCheckers) {\n if (!Array.isArray(arrayOfTypeCheckers)) {\n process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n return emptyFunctionThatReturnsNull;\n }\n\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n if (typeof checker !== 'function') {\n printWarning(\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n );\n return emptyFunctionThatReturnsNull;\n }\n }\n\n function validate(props, propName, componentName, location, propFullName) {\n var expectedTypes = [];\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n var checker = arrayOfTypeCheckers[i];\n var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n if (checkerResult == null) {\n return null;\n }\n if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n expectedTypes.push(checkerResult.data.expectedType);\n }\n }\n var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n }\n return createChainableTypeChecker(validate);\n }\n\n function createNodeChecker() {\n function validate(props, propName, componentName, location, propFullName) {\n if (!isNode(props[propName])) {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function invalidValidatorError(componentName, location, propFullName, key, type) {\n return new PropTypeError(\n (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n );\n }\n\n function createShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n for (var key in shapeTypes) {\n var checker = shapeTypes[key];\n if (typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n return createChainableTypeChecker(validate);\n }\n\n function createStrictShapeTypeChecker(shapeTypes) {\n function validate(props, propName, componentName, location, propFullName) {\n var propValue = props[propName];\n var propType = getPropType(propValue);\n if (propType !== 'object') {\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n }\n // We need to check all keys in case some are required but missing from props.\n var allKeys = assign({}, props[propName], shapeTypes);\n for (var key in allKeys) {\n var checker = shapeTypes[key];\n if (has(shapeTypes, key) && typeof checker !== 'function') {\n return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n }\n if (!checker) {\n return new PropTypeError(\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n '\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\n '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\n );\n }\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n if (error) {\n return error;\n }\n }\n return null;\n }\n\n return createChainableTypeChecker(validate);\n }\n\n function isNode(propValue) {\n switch (typeof propValue) {\n case 'number':\n case 'string':\n case 'undefined':\n return true;\n case 'boolean':\n return !propValue;\n case 'object':\n if (Array.isArray(propValue)) {\n return propValue.every(isNode);\n }\n if (propValue === null || isValidElement(propValue)) {\n return true;\n }\n\n var iteratorFn = getIteratorFn(propValue);\n if (iteratorFn) {\n var iterator = iteratorFn.call(propValue);\n var step;\n if (iteratorFn !== propValue.entries) {\n while (!(step = iterator.next()).done) {\n if (!isNode(step.value)) {\n return false;\n }\n }\n } else {\n // Iterator will provide entry [k,v] tuples rather than values.\n while (!(step = iterator.next()).done) {\n var entry = step.value;\n if (entry) {\n if (!isNode(entry[1])) {\n return false;\n }\n }\n }\n }\n } else {\n return false;\n }\n\n return true;\n default:\n return false;\n }\n }\n\n function isSymbol(propType, propValue) {\n // Native Symbol.\n if (propType === 'symbol') {\n return true;\n }\n\n // falsy value can't be a Symbol\n if (!propValue) {\n return false;\n }\n\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n if (propValue['@@toStringTag'] === 'Symbol') {\n return true;\n }\n\n // Fallback for non-spec compliant Symbols which are polyfilled.\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n return true;\n }\n\n return false;\n }\n\n // Equivalent of `typeof` but with special handling for array and regexp.\n function getPropType(propValue) {\n var propType = typeof propValue;\n if (Array.isArray(propValue)) {\n return 'array';\n }\n if (propValue instanceof RegExp) {\n // Old webkits (at least until Android 4.0) return 'function' rather than\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n // passes PropTypes.object.\n return 'object';\n }\n if (isSymbol(propType, propValue)) {\n return 'symbol';\n }\n return propType;\n }\n\n // This handles more types than `getPropType`. Only used for error messages.\n // See `createPrimitiveTypeChecker`.\n function getPreciseType(propValue) {\n if (typeof propValue === 'undefined' || propValue === null) {\n return '' + propValue;\n }\n var propType = getPropType(propValue);\n if (propType === 'object') {\n if (propValue instanceof Date) {\n return 'date';\n } else if (propValue instanceof RegExp) {\n return 'regexp';\n }\n }\n return propType;\n }\n\n // Returns a string that is postfixed to a warning about an invalid type.\n // For example, \"undefined\" or \"of type array\"\n function getPostfixForTypeWarning(value) {\n var type = getPreciseType(value);\n switch (type) {\n case 'array':\n case 'object':\n return 'an ' + type;\n case 'boolean':\n case 'date':\n case 'regexp':\n return 'a ' + type;\n default:\n return type;\n }\n }\n\n // Returns class name of the object, if any.\n function getClassName(propValue) {\n if (!propValue.constructor || !propValue.constructor.name) {\n return ANONYMOUS;\n }\n return propValue.constructor.name;\n }\n\n ReactPropTypes.checkPropTypes = checkPropTypes;\n ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","function replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n\nexport default function removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else if (typeof element.className === 'string') {\n ;\n element.className = replaceClassName(element.className, className);\n } else {\n element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n }\n}","export default {\n disabled: false\n};","import PropTypes from 'prop-types';\nexport var timeoutsShape = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n enter: PropTypes.number,\n exit: PropTypes.number,\n appear: PropTypes.number\n}).isRequired]) : null;\nexport var classNamesShape = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.string, PropTypes.shape({\n enter: PropTypes.string,\n exit: PropTypes.string,\n active: PropTypes.string\n}), PropTypes.shape({\n enter: PropTypes.string,\n enterDone: PropTypes.string,\n enterActive: PropTypes.string,\n exit: PropTypes.string,\n exitDone: PropTypes.string,\n exitActive: PropTypes.string\n})]) : null;","import React from 'react';\nexport default React.createContext(null);","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 1 },\n * entered: { opacity: 1 },\n * exiting: { opacity: 0 },\n * exited: { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * <Transition in={inProp} timeout={duration}>\n * {state => (\n * <div style={{\n * ...defaultStyle,\n * ...transitionStyles[state]\n * }}>\n * I'm a fade Transition!\n * </div>\n * )}\n * </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <Transition in={inProp} timeout={500}>\n * {state => (\n * // ...\n * )}\n * </Transition>\n * <button onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n } // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n ;\n\n var _proto = Transition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus === ENTERING) {\n this.performEnter(mounting);\n } else {\n this.performExit();\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context ? this.context.isMounting : mounting;\n\n var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n maybeNode = _ref2[0],\n maybeAppearing = _ref2[1];\n\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode);\n });\n return;\n }\n\n this.props.onEnter(maybeNode, maybeAppearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(maybeNode, maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode, maybeAppearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit() {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts();\n var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n if (!exit || config.disabled) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n return;\n }\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n this.setNextCallback(handler);\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n maybeNode = _ref3[0],\n maybeNextCallback = _ref3[1];\n\n this.props.addEndListener(maybeNode, maybeNextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n _in = _this$props.in,\n _mountOnEnter = _this$props.mountOnEnter,\n _unmountOnExit = _this$props.unmountOnExit,\n _appear = _this$props.appear,\n _enter = _this$props.enter,\n _exit = _this$props.exit,\n _timeout = _this$props.timeout,\n _addEndListener = _this$props.addEndListener,\n _onEnter = _this$props.onEnter,\n _onEntering = _this$props.onEntering,\n _onEntered = _this$props.onEntered,\n _onExit = _this$props.onExit,\n _onExiting = _this$props.onExiting,\n _onExited = _this$props.onExited,\n _nodeRef = _this$props.nodeRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n return (\n /*#__PURE__*/\n // allows for nested Transitions\n React.createElement(TransitionGroupContext.Provider, {\n value: null\n }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n );\n };\n\n return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A React reference to DOM element that need to transition:\n * https://stackoverflow.com/a/51127130/4671932\n *\n * - When `nodeRef` prop is used, `node` is not passed to callback functions\n * (e.g. `onEnter`) because user already has direct access to the node.\n * - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n * `nodeRef` need to be provided to `Transition` with changed `key` prop\n * (see\n * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n */\n nodeRef: PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : PropTypes.instanceOf(Element)\n }),\n\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * <Transition in={this.state.in} timeout={150}>\n * {state => (\n * <MyComponent className={`fade fade-${state}`} />\n * )}\n * </Transition>\n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * By default the child component does not perform the enter transition when\n * it first mounts, regardless of the value of `in`. If you want this\n * behavior, set both `appear` and `in` to `true`.\n *\n * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n * > only adds an additional enter transition. However, in the\n * > `<CSSTransition>` component that first enter transition does result in\n * > additional `.appear-*` classes, that way you can choose to style it\n * > differently.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. Timeouts are still used as a fallback if provided.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport addOneClass from 'dom-helpers/addClass';\nimport removeOneClass from 'dom-helpers/removeClass';\nimport React from 'react';\nimport Transition from './Transition';\nimport { classNamesShape } from './utils/PropTypes';\n\nvar _addClass = function addClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return addOneClass(node, c);\n });\n};\n\nvar removeClass = function removeClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return removeOneClass(node, c);\n });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should\n * use it if you're using CSS transitions or animations. It's built upon the\n * [`Transition`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` states of the transition. The first class is applied and then a\n * second `*-active` class in order to activate the CSS transition. After the\n * transition, matching `*-done` class names are applied to persist the\n * transition state.\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <CSSTransition in={inProp} timeout={200} classNames=\"my-node\">\n * <div>\n * {\"I'll receive my-node-* classes\"}\n * </div>\n * </CSSTransition>\n * <button type=\"button\" onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the `in` prop is set to `true`, the child component will first receive\n * the class `example-enter`, then the `example-enter-active` will be added in\n * the next tick. `CSSTransition` [forces a\n * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * between before adding the `example-enter-active`. This is an important trick\n * because it allows us to transition between `example-enter` and\n * `example-enter-active` even though they were added immediately one after\n * another. Most notably, this is what makes it possible for us to animate\n * _appearance_.\n *\n * ```css\n * .my-node-enter {\n * opacity: 0;\n * }\n * .my-node-enter-active {\n * opacity: 1;\n * transition: opacity 200ms;\n * }\n * .my-node-exit {\n * opacity: 1;\n * }\n * .my-node-exit-active {\n * opacity: 0;\n * transition: opacity 200ms;\n * }\n * ```\n *\n * `*-active` classes represent which styles you want to animate **to**, so it's\n * important to add `transition` declaration only to them, otherwise transitions\n * might not behave as intended! This might not be obvious when the transitions\n * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in\n * the example above (minus `transition`), but it becomes apparent in more\n * complex transitions.\n *\n * **Note**: If you're using the\n * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)\n * prop, make sure to define styles for `.appear-*` classes as well.\n */\n\n\nvar CSSTransition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(CSSTransition, _React$Component);\n\n function CSSTransition() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.appliedClasses = {\n appear: {},\n enter: {},\n exit: {}\n };\n\n _this.onEnter = function (maybeNode, maybeAppearing) {\n var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),\n node = _this$resolveArgument[0],\n appearing = _this$resolveArgument[1];\n\n _this.removeClasses(node, 'exit');\n\n _this.addClass(node, appearing ? 'appear' : 'enter', 'base');\n\n if (_this.props.onEnter) {\n _this.props.onEnter(maybeNode, maybeAppearing);\n }\n };\n\n _this.onEntering = function (maybeNode, maybeAppearing) {\n var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),\n node = _this$resolveArgument2[0],\n appearing = _this$resolveArgument2[1];\n\n var type = appearing ? 'appear' : 'enter';\n\n _this.addClass(node, type, 'active');\n\n if (_this.props.onEntering) {\n _this.props.onEntering(maybeNode, maybeAppearing);\n }\n };\n\n _this.onEntered = function (maybeNode, maybeAppearing) {\n var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),\n node = _this$resolveArgument3[0],\n appearing = _this$resolveArgument3[1];\n\n var type = appearing ? 'appear' : 'enter';\n\n _this.removeClasses(node, type);\n\n _this.addClass(node, type, 'done');\n\n if (_this.props.onEntered) {\n _this.props.onEntered(maybeNode, maybeAppearing);\n }\n };\n\n _this.onExit = function (maybeNode) {\n var _this$resolveArgument4 = _this.resolveArguments(maybeNode),\n node = _this$resolveArgument4[0];\n\n _this.removeClasses(node, 'appear');\n\n _this.removeClasses(node, 'enter');\n\n _this.addClass(node, 'exit', 'base');\n\n if (_this.props.onExit) {\n _this.props.onExit(maybeNode);\n }\n };\n\n _this.onExiting = function (maybeNode) {\n var _this$resolveArgument5 = _this.resolveArguments(maybeNode),\n node = _this$resolveArgument5[0];\n\n _this.addClass(node, 'exit', 'active');\n\n if (_this.props.onExiting) {\n _this.props.onExiting(maybeNode);\n }\n };\n\n _this.onExited = function (maybeNode) {\n var _this$resolveArgument6 = _this.resolveArguments(maybeNode),\n node = _this$resolveArgument6[0];\n\n _this.removeClasses(node, 'exit');\n\n _this.addClass(node, 'exit', 'done');\n\n if (_this.props.onExited) {\n _this.props.onExited(maybeNode);\n }\n };\n\n _this.resolveArguments = function (maybeNode, maybeAppearing) {\n return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`\n : [maybeNode, maybeAppearing];\n };\n\n _this.getClassNames = function (type) {\n var classNames = _this.props.classNames;\n var isStringClassNames = typeof classNames === 'string';\n var prefix = isStringClassNames && classNames ? classNames + \"-\" : '';\n var baseClassName = isStringClassNames ? \"\" + prefix + type : classNames[type];\n var activeClassName = isStringClassNames ? baseClassName + \"-active\" : classNames[type + \"Active\"];\n var doneClassName = isStringClassNames ? baseClassName + \"-done\" : classNames[type + \"Done\"];\n return {\n baseClassName: baseClassName,\n activeClassName: activeClassName,\n doneClassName: doneClassName\n };\n };\n\n return _this;\n }\n\n var _proto = CSSTransition.prototype;\n\n _proto.addClass = function addClass(node, type, phase) {\n var className = this.getClassNames(type)[phase + \"ClassName\"];\n\n var _this$getClassNames = this.getClassNames('enter'),\n doneClassName = _this$getClassNames.doneClassName;\n\n if (type === 'appear' && phase === 'done' && doneClassName) {\n className += \" \" + doneClassName;\n } // This is for to force a repaint,\n // which is necessary in order to transition styles when adding a class name.\n\n\n if (phase === 'active') {\n /* eslint-disable no-unused-expressions */\n node && node.scrollTop;\n }\n\n if (className) {\n this.appliedClasses[type][phase] = className;\n\n _addClass(node, className);\n }\n };\n\n _proto.removeClasses = function removeClasses(node, type) {\n var _this$appliedClasses$ = this.appliedClasses[type],\n baseClassName = _this$appliedClasses$.base,\n activeClassName = _this$appliedClasses$.active,\n doneClassName = _this$appliedClasses$.done;\n this.appliedClasses[type] = {};\n\n if (baseClassName) {\n removeClass(node, baseClassName);\n }\n\n if (activeClassName) {\n removeClass(node, activeClassName);\n }\n\n if (doneClassName) {\n removeClass(node, doneClassName);\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n _ = _this$props.classNames,\n props = _objectWithoutPropertiesLoose(_this$props, [\"classNames\"]);\n\n return /*#__PURE__*/React.createElement(Transition, _extends({}, props, {\n onEnter: this.onEnter,\n onEntered: this.onEntered,\n onEntering: this.onEntering,\n onExit: this.onExit,\n onExiting: this.onExiting,\n onExited: this.onExited\n }));\n };\n\n return CSSTransition;\n}(React.Component);\n\nCSSTransition.defaultProps = {\n classNames: ''\n};\nCSSTransition.propTypes = process.env.NODE_ENV !== \"production\" ? _extends({}, Transition.propTypes, {\n /**\n * The animation classNames applied to the component as it appears, enters,\n * exits or has finished the transition. A single name can be provided, which\n * will be suffixed for each stage, e.g. `classNames=\"fade\"` applies:\n *\n * - `fade-appear`, `fade-appear-active`, `fade-appear-done`\n * - `fade-enter`, `fade-enter-active`, `fade-enter-done`\n * - `fade-exit`, `fade-exit-active`, `fade-exit-done`\n *\n * A few details to note about how these classes are applied:\n *\n * 1. They are _joined_ with the ones that are already defined on the child\n * component, so if you want to add some base styles, you can use\n * `className` without worrying that it will be overridden.\n *\n * 2. If the transition component mounts with `in={false}`, no classes are\n * applied yet. You might be expecting `*-exit-done`, but if you think\n * about it, a component cannot finish exiting if it hasn't entered yet.\n *\n * 2. `fade-appear-done` and `fade-enter-done` will _both_ be applied. This\n * allows you to define different behavior for when appearing is done and\n * when regular entering is done, using selectors like\n * `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply\n * an epic entrance animation when element first appears in the DOM using\n * [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can\n * simply use `fade-enter-done` for defining both cases.\n *\n * Each individual classNames can also be specified independently like:\n *\n * ```js\n * classNames={{\n * appear: 'my-appear',\n * appearActive: 'my-active-appear',\n * appearDone: 'my-done-appear',\n * enter: 'my-enter',\n * enterActive: 'my-active-enter',\n * enterDone: 'my-done-enter',\n * exit: 'my-exit',\n * exitActive: 'my-active-exit',\n * exitDone: 'my-done-exit',\n * }}\n * ```\n *\n * If you want to set these classes using CSS Modules:\n *\n * ```js\n * import styles from './styles.css';\n * ```\n *\n * you might want to use camelCase in your CSS file, that way could simply\n * spread them instead of listing them one by one:\n *\n * ```js\n * classNames={{ ...styles }}\n * ```\n *\n * @type {string | {\n * appear?: string,\n * appearActive?: string,\n * appearDone?: string,\n * enter?: string,\n * enterActive?: string,\n * enterDone?: string,\n * exit?: string,\n * exitActive?: string,\n * exitDone?: string,\n * }}\n */\n classNames: classNamesShape,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is\n * applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEnter: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter-active' or\n * 'appear-active' class is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter' or\n * 'appear' classes are **removed** and the `done` class is added to the DOM node.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntered: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit' class is\n * applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement)\n */\n onExit: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit-active' is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement)\n */\n onExiting: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit' classes\n * are **removed** and the `exit-done` class is added to the DOM node.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement)\n */\n onExited: PropTypes.func\n}) : {};\nexport default CSSTransition;","import hasClass from './hasClass';\nexport default function addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}","export default function hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);\n return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}","import { Children, cloneElement, isValidElement } from 'react';\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\n\nexport function getChildMapping(children, mapFn) {\n var mapper = function mapper(child) {\n return mapFn && isValidElement(child) ? mapFn(child) : child;\n };\n\n var result = Object.create(null);\n if (children) Children.map(children, function (c) {\n return c;\n }).forEach(function (child) {\n // run the map function here instead so that the key is the computed one\n result[child.key] = mapper(child);\n });\n return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\nexport function mergeChildMappings(prev, next) {\n prev = prev || {};\n next = next || {};\n\n function getValueForKey(key) {\n return key in next ? next[key] : prev[key];\n } // For each key of `next`, the list of keys to insert before that key in\n // the combined list\n\n\n var nextKeysPending = Object.create(null);\n var pendingKeys = [];\n\n for (var prevKey in prev) {\n if (prevKey in next) {\n if (pendingKeys.length) {\n nextKeysPending[prevKey] = pendingKeys;\n pendingKeys = [];\n }\n } else {\n pendingKeys.push(prevKey);\n }\n }\n\n var i;\n var childMapping = {};\n\n for (var nextKey in next) {\n if (nextKeysPending[nextKey]) {\n for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n var pendingNextKey = nextKeysPending[nextKey][i];\n childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n }\n }\n\n childMapping[nextKey] = getValueForKey(nextKey);\n } // Finally, add the keys which didn't appear before any key in `next`\n\n\n for (i = 0; i < pendingKeys.length; i++) {\n childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n }\n\n return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nexport function getInitialChildMapping(props, onExited) {\n return getChildMapping(props.children, function (child) {\n return cloneElement(child, {\n onExited: onExited.bind(null, child),\n in: true,\n appear: getProp(child, 'appear', props),\n enter: getProp(child, 'enter', props),\n exit: getProp(child, 'exit', props)\n });\n });\n}\nexport function getNextChildMapping(nextProps, prevChildMapping, onExited) {\n var nextChildMapping = getChildMapping(nextProps.children);\n var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n Object.keys(children).forEach(function (key) {\n var child = children[key];\n if (!isValidElement(child)) return;\n var hasPrev = (key in prevChildMapping);\n var hasNext = (key in nextChildMapping);\n var prevChild = prevChildMapping[key];\n var isLeaving = isValidElement(prevChild) && !prevChild.props.in; // item is new (entering)\n\n if (hasNext && (!hasPrev || isLeaving)) {\n // console.log('entering', key)\n children[key] = cloneElement(child, {\n onExited: onExited.bind(null, child),\n in: true,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n } else if (!hasNext && hasPrev && !isLeaving) {\n // item is old (exiting)\n // console.log('leaving', key)\n children[key] = cloneElement(child, {\n in: false\n });\n } else if (hasNext && hasPrev && isValidElement(prevChild)) {\n // item hasn't changed transition states\n // copy over the last transition props;\n // console.log('unchanged', key)\n children[key] = cloneElement(child, {\n onExited: onExited.bind(null, child),\n in: prevChild.props.in,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n }\n });\n return children;\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { getChildMapping, getInitialChildMapping, getNextChildMapping } from './utils/ChildMapping';\n\nvar values = Object.values || function (obj) {\n return Object.keys(obj).map(function (k) {\n return obj[k];\n });\n};\n\nvar defaultProps = {\n component: 'div',\n childFactory: function childFactory(child) {\n return child;\n }\n};\n/**\n * The `<TransitionGroup>` component manages a set of transition components\n * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition\n * components, `<TransitionGroup>` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the `<TransitionGroup>`.\n *\n * Note that `<TransitionGroup>` does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\nvar TransitionGroup = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(TransitionGroup, _React$Component);\n\n function TransitionGroup(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n\n var handleExited = _this.handleExited.bind(_assertThisInitialized(_this)); // Initial children should all be entering, dependent on appear\n\n\n _this.state = {\n contextValue: {\n isMounting: true\n },\n handleExited: handleExited,\n firstRender: true\n };\n return _this;\n }\n\n var _proto = TransitionGroup.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.mounted = true;\n this.setState({\n contextValue: {\n isMounting: false\n }\n });\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.mounted = false;\n };\n\n TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n var prevChildMapping = _ref.children,\n handleExited = _ref.handleExited,\n firstRender = _ref.firstRender;\n return {\n children: firstRender ? getInitialChildMapping(nextProps, handleExited) : getNextChildMapping(nextProps, prevChildMapping, handleExited),\n firstRender: false\n };\n } // node is `undefined` when user provided `nodeRef` prop\n ;\n\n _proto.handleExited = function handleExited(child, node) {\n var currentChildMapping = getChildMapping(this.props.children);\n if (child.key in currentChildMapping) return;\n\n if (child.props.onExited) {\n child.props.onExited(node);\n }\n\n if (this.mounted) {\n this.setState(function (state) {\n var children = _extends({}, state.children);\n\n delete children[child.key];\n return {\n children: children\n };\n });\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n Component = _this$props.component,\n childFactory = _this$props.childFactory,\n props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n var contextValue = this.state.contextValue;\n var children = values(this.state.children).map(childFactory);\n delete props.appear;\n delete props.enter;\n delete props.exit;\n\n if (Component === null) {\n return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n value: contextValue\n }, children);\n }\n\n return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n value: contextValue\n }, /*#__PURE__*/React.createElement(Component, props, children));\n };\n\n return TransitionGroup;\n}(React.Component);\n\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * `<TransitionGroup>` renders a `<div>` by default. You can change this\n * behavior by providing a `component` prop.\n * If you use React v16+ and would like to avoid a wrapping `<div>` element\n * you can pass in `component={null}`. This is useful if the wrapping div\n * borks your css styles.\n */\n component: PropTypes.any,\n\n /**\n * A set of `<Transition>` components, that are toggled `in` and out as they\n * leave. the `<TransitionGroup>` will inject specific transition props, so\n * remember to spread them through if you are wrapping the `<Transition>` as\n * with our `<Fade>` example.\n *\n * While this component is meant for multiple `Transition` or `CSSTransition`\n * children, sometimes you may want to have a single transition child with\n * content that you want to be transitioned out and in when you change it\n * (e.g. routes, images etc.) In that case you can change the `key` prop of\n * the transition child as you change its content, this will cause\n * `TransitionGroup` to transition the child out and back in.\n */\n children: PropTypes.node,\n\n /**\n * A convenience prop that enables or disables appear animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n appear: PropTypes.bool,\n\n /**\n * A convenience prop that enables or disables enter animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * A convenience prop that enables or disables exit animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * You may need to apply reactive updates to a child as it is exiting.\n * This is generally done by using `cloneElement` however in the case of an exiting\n * child the element has already been removed and not accessible to the consumer.\n *\n * If you do need to update a child as it leaves you can provide a `childFactory`\n * to wrap every child, even the ones that are leaving.\n *\n * @type Function(child: ReactElement) -> ReactElement\n */\n childFactory: PropTypes.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\nexport default TransitionGroup;","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}","import clsx from 'clsx';\nimport React, {\n PropsWithChildren,\n ReactElement,\n useEffect,\n useState,\n} from 'react';\nimport { ValidationError } from 'yup';\nimport { OptionalObjectSchema } from 'yup/lib/object';\nimport { noop } from '../../../helpers/utils';\nimport { Data } from '../../../types/data';\nimport { Button, ButtonContext } from '../../Buttons';\nimport { ObjectSchemaDefinition } from '../../FormStation';\nimport { IconName, Icons } from '../../Icons';\nimport { DynamicListColumn } from '../DynamicDataList.model';\nimport classes from './DynamicListDataEntry.scss';\n\n// TODO: Add sizing for DragIcon and Input container. Similar to ActionButton sizing\n\nexport interface DynamicListDataEntryProps<T extends Data> {\n /** The column definition */\n columns: DynamicListColumn<T>[];\n /** Spacing between columns */\n columnSizes: string;\n /** Header row height */\n columnGap?: string;\n /** List row height */\n rowHeight?: string;\n /** Size of action button and checkbox */\n actionSize?: string;\n /** Horizontal alignment of text */\n horizontalTextAlign?: 'left' | 'right' | 'center';\n /** Vertical alignment of text */\n verticalTextAlign?: 'start' | 'center' | 'end';\n /** Property name that is used to determine data position (default: undefined) */\n positionKey?: keyof T;\n /** If set to true, the add action button will be rendered (default: undefined) */\n allowAdd?: boolean;\n /** Whether add new item button should be disabled */\n disabled?: boolean;\n /** If set to true, rows can be be repositioned using the input field (default: undefined) */\n allowReordering?: boolean;\n /** If set to true, this component can be dragged (default: undefined) */\n allowDragging?: boolean;\n /** Position the new data will receive */\n newDataPosition?: number;\n /** Optional Yup validation object for validating new data */\n rowValidationSchema?: OptionalObjectSchema<ObjectSchemaDefinition<T>>;\n /** Sets default values to be populated in the new row when new data is allowed. */\n defaultValuesForNewData?: Partial<T>;\n /** Overrides the default action button context behavior */\n actionButtonContext?: ButtonContext;\n /** CSS Class name for additional styles */\n className?: string;\n /** Whether Data Entry row should stick to the top below Header (default: true) */\n sticky?: boolean;\n /** If header is shown */\n showHeader?: boolean;\n /** Emits when the action button is clicked. Data is supplied as a parameter */\n onActionClicked?: (data: T) => void;\n /** override default add button (+) */\n customAddButton?: (onAddItem: () => Promise<void>) => ReactElement;\n}\n\nexport const DynamicListDataEntry = <T extends Data>({\n columns,\n columnSizes,\n columnGap,\n rowHeight,\n actionSize,\n horizontalTextAlign,\n verticalTextAlign,\n positionKey,\n allowAdd,\n disabled = false,\n allowReordering,\n allowDragging,\n newDataPosition,\n rowValidationSchema,\n defaultValuesForNewData,\n actionButtonContext,\n className = '',\n sticky = true,\n showHeader,\n onActionClicked = noop,\n customAddButton,\n}: PropsWithChildren<DynamicListDataEntryProps<T>>): JSX.Element => {\n const customStyles = {\n gridAutoRows: rowHeight,\n gridTemplateColumns: columnSizes,\n gridColumnGap: columnGap,\n justifyItems: horizontalTextAlign,\n alignItems: verticalTextAlign,\n } as React.CSSProperties;\n\n if (sticky) {\n customStyles.position = 'sticky';\n customStyles.top = showHeader ? '50px' : 0;\n }\n\n const [state, setState] = useState<T>(\n (defaultValuesForNewData as T) ?? ({} as T),\n );\n const [isDirty, setIsDirty] = useState<boolean>(false);\n const [error, setError] = useState<Record<string, string>>({});\n\n useEffect(() => {\n if (rowValidationSchema && isDirty) {\n rowValidationSchema\n ?.validate(state, { abortEarly: false })\n .then(() => {\n setError({});\n })\n .catch((e: ValidationError) => {\n const newErrors: Record<string, string> = {};\n e.inner.forEach((validationError) => {\n if (validationError.path !== undefined) {\n const path = validationError.path;\n if (newErrors?.[path] === undefined) {\n newErrors[path] = validationError.message;\n }\n }\n });\n setError(newErrors);\n });\n }\n }, [isDirty, rowValidationSchema, state]);\n\n /**\n * Updates new data object with supplied key/value pair\n * @param property data property\n * @param value new value\n */\n const valueChangedHandler = (property: keyof T, value: unknown): void => {\n setIsDirty(true);\n setState((prevState) => {\n return { ...prevState, [property]: value };\n });\n };\n\n /**\n * Emits data with new position if required props are set, else just emits the data\n * @param data T\n */\n const onAddItemHandler = async (): Promise<void> => {\n // TODO: Display a warning if no data was entered?\n if (rowValidationSchema && !(await rowValidationSchema?.isValid(state))) {\n setIsDirty(true);\n // eslint-disable-next-line no-console\n return console.warn('Data not valid');\n }\n\n let transformedState: T = state;\n for (const { onAddTransformer, propertyName } of columns) {\n if (onAddTransformer) {\n transformedState = {\n ...transformedState,\n [propertyName]: onAddTransformer(\n transformedState[propertyName],\n state,\n ),\n };\n }\n }\n\n if (\n allowReordering &&\n positionKey !== undefined &&\n newDataPosition !== undefined\n ) {\n onActionClicked({ ...transformedState, [positionKey]: newDataPosition });\n } else {\n onActionClicked(transformedState);\n }\n\n // Reset the state back to an empty object\n setIsDirty(false);\n setState((defaultValuesForNewData as T) ?? ({} as T));\n };\n\n return (\n <div\n className={clsx(\n classes.container,\n 'dynamic-list-data-entry-container',\n className,\n )}\n style={customStyles}\n data-test-id=\"dynamic-list-data-entry\"\n >\n {allowReordering === true &&\n // only show position column if allowReordering is true and the positionKey exists\n positionKey !== undefined && (\n <div className={clsx(classes.position)}>\n {allowDragging && (\n <div className={classes.draggable}>\n <Icons\n icon={IconName.Drag}\n className={clsx(classes.dragIcon)}\n />\n </div>\n )}\n\n <div className={clsx(classes.input)}>\n <input\n disabled={true}\n type=\"text\"\n value={newDataPosition}\n style={{ height: rowHeight, width: rowHeight }}\n />\n </div>\n </div>\n )}\n {columns.map((column) => (\n <div\n key={column.propertyName as string}\n className={clsx(classes.column)}\n data-test-id={`dynamic-list-data-entry-property:${\n column.propertyName as string\n }`}\n >\n {renderField<T>(\n column,\n state[column.propertyName],\n error[column.propertyName as string],\n (value) => valueChangedHandler(column.propertyName, value),\n disabled,\n )}\n </div>\n ))}\n {allowAdd && (\n <div className={clsx(classes.actionButtonContainer)}>\n {(customAddButton && customAddButton(onAddItemHandler)) || (\n <Button\n type=\"button\"\n className={clsx(classes.actionButton)}\n icon={IconName.Plus}\n buttonContext={\n actionButtonContext === undefined\n ? isDirty\n ? ButtonContext.Active\n : ButtonContext.Icon\n : actionButtonContext\n }\n height={actionSize}\n width={actionSize}\n onButtonClicked={() => onAddItemHandler()}\n dataTestId=\"dynamic-list-add-button\"\n disabled={disabled}\n />\n )}\n </div>\n )}\n </div>\n );\n};\n\nconst renderField = function <T extends Data>(\n column: DynamicListColumn<T>,\n currentValue: unknown,\n error: string | undefined,\n onValueChanged: (value: unknown) => void,\n disabled = false,\n): React.ReactNode {\n if (column.dataEntryRender) {\n return column.dataEntryRender(\n currentValue,\n error,\n onValueChanged,\n disabled,\n );\n } else {\n return '';\n }\n};\n","import clsx from 'clsx';\nimport React, { PropsWithChildren } from 'react';\nimport { Data } from '../../../types/data';\nimport { DynamicListColumn } from '../DynamicDataList.model';\nimport classes from './DynamicListHeader.scss';\n\n// TODO: Remove this data type, generic should actually be column type\nexport interface DynamicListHeaderProps<T extends Data> {\n /** Column definitions */\n columns: DynamicListColumn<T>[];\n /** Sizes of each column */\n columnSizes: string;\n /** Spacing between columns */\n columnGap?: string;\n /** Header row height */\n rowHeight?: string;\n /** Horizontal alignment of text */\n horizontalTextAlign?: 'left' | 'right' | 'center';\n /** Vertical alignment of text */\n verticalTextAlign?: 'start' | 'center' | 'end';\n /** Property name that is used to determine data position (default: undefined) */\n positionKey?: keyof T;\n /** If sets, sets the label for the position column (default: 'Position') */\n positionLabel?: string;\n /** If set to true, creates an empty column at the start of the header to line up with rows (default: undefined) */\n allowReordering?: boolean;\n /** CSS Class name for additional styles */\n className?: string;\n /** Whether header should stick to the top (default: true) */\n sticky?: boolean;\n}\n\nexport const DynamicListHeader = <T extends Data>({\n columns,\n columnSizes,\n columnGap,\n rowHeight,\n horizontalTextAlign,\n verticalTextAlign,\n allowReordering,\n positionKey,\n positionLabel,\n className = '',\n sticky = true,\n}: PropsWithChildren<DynamicListHeaderProps<T>>): JSX.Element => {\n const customStyles = {\n gridAutoRows: rowHeight,\n gridTemplateColumns: columnSizes,\n gridColumnGap: columnGap,\n justifyItems: horizontalTextAlign,\n alignItems: verticalTextAlign,\n } as React.CSSProperties;\n\n if (sticky) {\n customStyles.position = 'sticky';\n customStyles.top = 0;\n }\n\n return (\n <div\n className={clsx(\n classes.container,\n 'dynamic-list-header-container',\n className,\n )}\n style={customStyles}\n data-test-id=\"dynamic-list-header\"\n >\n {allowReordering === true &&\n // only show position column if allowReordering is true and the positionKey exists\n positionKey !== undefined && (\n <div\n className={clsx(classes.column)}\n data-test-id=\"dynamic-list-header-cell\"\n >\n <p className={clsx(classes.position)}>\n {positionLabel ?? 'Position'}\n </p>\n </div>\n )}\n {columns.map((column) => (\n <div\n key={column.propertyName as string}\n className={clsx(classes.column)}\n data-test-id={`dynamic-list-header-property:${\n column.propertyName as string\n }`}\n >\n <p>{column.label}</p>\n </div>\n ))}\n </div>\n );\n};\n","export const getTooltipText = (value: unknown): string | undefined => {\n const textValue = String(value);\n\n if (\n textValue === '[object Object]' ||\n textValue === 'undefined' ||\n textValue === 'null' ||\n textValue === ''\n ) {\n return undefined;\n } else {\n return textValue;\n }\n};\n","import { Placement } from '@popperjs/core';\nimport clsx from 'clsx';\nimport React, { Ref, useState } from 'react';\nimport { usePopper } from 'react-popper';\nimport { useExpand } from '../../hooks/useExpand/useExpand';\nimport { Actions, ActionsProps } from '../Actions';\nimport { Button, ButtonContext } from '../Buttons';\nimport { IconName } from '../Icons';\nimport classes from './InlineMenu.scss';\n\nexport interface InlineMenuProps extends ActionsProps {\n /** Additional CSS class for the action container */\n className?: string;\n /** Additional CSS class for the button */\n buttonClassName?: string;\n /** Move along the reference element default(0) */\n offsetSkidding?: number;\n /** Distance to the reference element default(6) */\n offsetDistance?: number;\n /** Default placement can be changed with this optional property (default: 'top') */\n placement?: Placement;\n /** Applies white background with opacity 70% */\n addBackgroundOpacity?: boolean;\n /** */\n showArrow?: boolean;\n buttonIcon?: IconName;\n buttonContext?: ButtonContext;\n onButtonClicked?: (\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n ) => void;\n}\n\n/**\n * Renders an actions context menu.\n * @example\n * const [referenceElement, setReferenceElement] = useState<HTMLElement>();\n * <div ref={setReferenceElement as React.LegacyRef<HTMLDivElement>}>\n * <InlineMenu\n * referenceElement={referenceElement}\n * actions={[{ label: 'Action Label', onActionSelected={actionSelectedHandler} }]}\n * />\n * </div>\n */\nexport const InlineMenu: React.FC<InlineMenuProps> = ({\n showArrow = true,\n offsetSkidding = 0,\n offsetDistance = showArrow ? 6 : 0,\n placement = 'top',\n addBackgroundOpacity = false,\n className,\n buttonClassName,\n buttonIcon = IconName.MidlineEllipsis,\n buttonContext,\n onButtonClicked,\n onActionClick,\n ...rest\n}) => {\n const [popperElement, setPopperElement] = useState<HTMLDivElement>();\n const [arrowElement, setArrowElement] = useState<HTMLDivElement>();\n const [referenceElement, setReferenceElement] = useState<HTMLElement>();\n const { isExpanded, toggleExpanded, collapse } = useExpand(false);\n let onBlurTimeout: NodeJS.Timeout;\n\n const { styles, attributes } = usePopper(referenceElement, popperElement, {\n modifiers: [\n {\n name: 'arrow',\n options: { element: arrowElement },\n },\n {\n name: 'offset',\n options: {\n offset: [offsetSkidding, offsetDistance],\n },\n },\n ],\n placement,\n });\n\n return (\n <>\n <Button\n ref={setReferenceElement as Ref<HTMLButtonElement>}\n type=\"button\"\n icon={buttonIcon}\n onButtonClicked={(e) => {\n toggleExpanded();\n onButtonClicked?.(e);\n }}\n onBlur={() => {\n onBlurTimeout = global.setTimeout(() => collapse(), 250);\n }}\n buttonContext={buttonContext}\n className={clsx(\n { [classes.buttonDefault]: !buttonContext && !addBackgroundOpacity },\n {\n [classes.buttonDefaultOpacity]:\n !buttonContext && addBackgroundOpacity,\n },\n {\n [classes.buttonSelected]: !buttonContext && isExpanded,\n },\n buttonClassName,\n )}\n dataTestId=\"inline-menu-button\"\n />\n {isExpanded && (\n <div\n tabIndex={-1}\n className={clsx(classes.container, 'sub-menu-container', className)}\n ref={setPopperElement as React.LegacyRef<HTMLDivElement>}\n style={styles.popper}\n {...attributes.popper}\n onBlur={() => {\n onBlurTimeout = global.setTimeout(() => collapse(), 250);\n }}\n data-test-id=\"inline-menu\"\n >\n <Actions\n {...rest}\n onActionClick={(e, action) => {\n if (\n action.confirmationMode &&\n action.confirmationMode !== 'None'\n ) {\n clearTimeout(onBlurTimeout);\n } else {\n onBlurTimeout = global.setTimeout(() => collapse(), 250);\n }\n onActionClick?.(e, action);\n }}\n />\n <div\n ref={setArrowElement as React.LegacyRef<HTMLDivElement>}\n className={classes.arrow}\n // style={styles.arrow}\n style={{ ...styles.arrow, display: showArrow ? 'inherit' : 'none' }}\n />\n </div>\n )}\n </>\n );\n};\n","import clsx from 'clsx';\nimport React, { PropsWithChildren, useEffect, useState } from 'react';\nimport { noop } from '../../../helpers/utils';\nimport { Data } from '../../../types/data';\nimport { getTooltipText } from '../../../utils/ToolTipHelpers';\nimport { ActionData } from '../../Actions';\nimport { Button, ButtonContext } from '../../Buttons';\nimport { IconName, Icons } from '../../Icons';\nimport { InlineMenu } from '../../InlineMenu';\nimport {\n DynamicListColumn,\n DynamicListElevationOptions,\n} from '../DynamicDataList.model';\nimport classes from './DynamicListRow.scss';\n\n// TODO: Add sizing for DragIcon and Input container. Similar to ActionButton sizing\n\nexport interface DynamicListRowProps<T extends Data> {\n /** The column definition */\n columns: DynamicListColumn<T>[];\n /** List data */\n data: T;\n /** Spacing between columns */\n columnSizes: string;\n /** Header row height */\n columnGap?: string;\n /** List row height */\n rowHeight?: string;\n /** Size of action button and checkbox */\n actionSize?: string;\n /** Horizontal alignment of text */\n horizontalTextAlign?: 'left' | 'right' | 'center';\n /** Vertical alignment of text */\n verticalTextAlign?: 'start' | 'center' | 'end';\n /** If set to true, the remove action button will be rendered (default: undefined) */\n allowRemove?: boolean;\n /** If set to true, rows can be repositioned using the input field (default: undefined) */\n allowReordering?: boolean;\n /** Property name that is used to determine data position (default: undefined) */\n positionKey?: keyof T;\n /** If set to true, this component can be dragged (default: undefined) */\n allowDragging?: boolean;\n /** Determines if there is currently an on-going drag event (default: undefined) */\n dragging?: boolean;\n /** Emits when row dragging event starts. Event and current position are supplied as parameters */\n onDragStart?: (e: React.DragEvent<HTMLDivElement>, position: number) => void;\n /** Emits when the row has dropped. Event and new position target are supplied as parameters */\n onDrop?: (\n e: React.DragEvent<HTMLDivElement>,\n newPosition: number,\n elevation: DynamicListElevationOptions,\n ) => void;\n /** Emits when row dragging event ends. Event and data as supplied as parameters */\n onDragEnd?: (e: React.DragEvent<HTMLDivElement>) => void;\n /** Emits when the position input has changed. Row data and the new position is supplied */\n onPositionInputChanged?: (\n currenPosition: number,\n newPosition: number,\n ) => void;\n /** Emits when the action button is clicked. Data is supplied as a parameter */\n onActionClicked?: (data: T) => void;\n /** CSS Class name for additional styles */\n className?: string;\n /** CSS Class name provider for each row. Allows row style to be determined by data */\n rowClassNameProvider?: (data: T) => string;\n inlineMenuActions?: (data: T) => ActionData[];\n}\n\nexport const DynamicListRow = <T extends Data>({\n columns,\n data,\n columnSizes,\n columnGap,\n rowHeight,\n actionSize,\n horizontalTextAlign,\n verticalTextAlign,\n allowRemove,\n allowReordering,\n positionKey,\n allowDragging,\n dragging,\n onDragStart = noop,\n onDrop = noop,\n onDragEnd = noop,\n onPositionInputChanged = noop,\n onActionClicked = noop,\n className = '',\n rowClassNameProvider,\n inlineMenuActions,\n}: PropsWithChildren<DynamicListRowProps<T>>): JSX.Element => {\n const customStyles = {\n gridAutoRows: rowHeight,\n gridTemplateColumns: columnSizes,\n gridColumnGap: columnGap,\n justifyItems: horizontalTextAlign,\n alignItems: verticalTextAlign,\n } as React.CSSProperties;\n\n const inlineMenuData = inlineMenuActions?.(data);\n\n const [position, setPosition] = useState<number | string | undefined>(\n positionKey ? Number(data[positionKey]) : undefined,\n );\n\n useEffect(() => {\n setPosition(positionKey ? Number(data[positionKey]) : undefined);\n }, [data, positionKey]);\n\n /* Resources used\n https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API\n https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/dropEffect\n https://www.youtube.com/watch?v=jfYWwQrtzzY\n https://www.youtube.com/watch?v=-MfTv5VRM0A\n */\n const [draggedOver, setDraggedOver] = useState<DynamicListElevationOptions>();\n\n /** Emits current position and new position when user changes position via input */\n const onPositionInputChangedHandler = (value: number): void => {\n if (positionKey !== undefined && typeof value === 'number') {\n const currentPosition = Number(data[positionKey]);\n const newPosition = value;\n\n // position has not changed, exit\n if (currentPosition === newPosition) {\n return;\n }\n\n onPositionInputChanged(currentPosition, newPosition);\n }\n };\n\n // Dragging has started(only emits if this is the element being dragged)\n const onDragStartHandler = (e: React.DragEvent<HTMLDivElement>): void => {\n e.stopPropagation();\n e.dataTransfer.effectAllowed = 'move'; // enable moving effects(for visual feedback)\n onDragStart(e, Number(position));\n };\n\n // An element that is being dragged has entered the drop zone\n const onDragEnterHandler = (e: React.DragEvent<HTMLDivElement>): void => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n // Dragged element is currently over the drop zone\n const onDragOverHandler = (e: React.DragEvent<HTMLDivElement>): void => {\n e.preventDefault();\n e.stopPropagation();\n e.dataTransfer.dropEffect = 'move'; // change cursor\n\n const elevation = getElevation(\n e.clientY,\n e.currentTarget.getBoundingClientRect(),\n );\n\n setDraggedOver(elevation);\n };\n\n // Element has dropped(only emits if this was the element being dragged)\n const onDropHandler = (e: React.DragEvent<HTMLDivElement>): void => {\n e.preventDefault();\n e.stopPropagation();\n\n const elevation = getElevation(\n e.clientY,\n e.currentTarget.getBoundingClientRect(),\n );\n\n onDrop(e, Number(position), elevation);\n\n setDraggedOver(undefined); // remove dragged over styling\n };\n\n // An element that is being dragged has left the drop zone\n const onDragLeaveHandler = (e: React.DragEvent<HTMLDivElement>): void => {\n e.preventDefault();\n e.stopPropagation();\n setDraggedOver(undefined); // remove dragged over styling\n };\n\n // Dragging has ended(only emits if this was the element being dragged)\n const onDragEndhandler = (e: React.DragEvent<HTMLDivElement>): void => {\n e.preventDefault();\n e.stopPropagation();\n onDragEnd(e);\n };\n\n return (\n <div\n className={clsx(\n classes.container,\n {\n [classes.draggedAbove]: draggedOver === 'above',\n [classes.draggedBelow]: draggedOver === 'below',\n [classes.dragging]: dragging,\n },\n 'dynamic-list-row-container',\n className,\n rowClassNameProvider ? rowClassNameProvider(data) : '',\n )}\n style={customStyles}\n draggable={Boolean(allowDragging && allowReordering)}\n onDragStart={onDragStartHandler}\n onDragEnter={onDragEnterHandler}\n onDragOver={onDragOverHandler}\n onDrop={onDropHandler}\n onDragLeave={onDragLeaveHandler}\n onDragEnd={onDragEndhandler}\n data-test-id=\"dynamic-list-row\"\n >\n {allowReordering === true &&\n // only show position column if allowReordering is true and the positionKey exists\n positionKey !== undefined && (\n <div className={classes.position}>\n {allowDragging && (\n <div className={classes.draggable}>\n <Icons icon={IconName.Drag} className={classes.dragIcon} />\n </div>\n )}\n\n <div className={classes.input}>\n <input\n type=\"text\"\n style={{ height: rowHeight, width: rowHeight }}\n onChange={(event) => {\n // check for valid number\n if (Number.isNaN(Number(event.target.value))) {\n return;\n } else {\n setPosition(Number(event.target.value));\n }\n }}\n value={position}\n onKeyDown={(event) =>\n event.key === 'Enter' &&\n onPositionInputChangedHandler(\n Number(event.currentTarget.value),\n )\n }\n />\n </div>\n </div>\n )}\n {columns.map((column: DynamicListColumn<T>) => {\n const columnData: React.ReactNode = renderData<T>(\n column,\n data,\n column.propertyName,\n );\n\n return (\n <div\n key={column.propertyName as string}\n className={classes.column}\n title={\n column.tooltip !== false\n ? getTooltipText(data[column.propertyName])\n : undefined\n }\n data-test-id={`dynamic-list-property:${\n column.propertyName as string\n }`}\n >\n {columnData}\n </div>\n );\n })}\n {(inlineMenuData || allowRemove) && (\n <div className={classes.actionButtonContainer}>\n {inlineMenuData && !!inlineMenuData.length && (\n <InlineMenu\n actions={inlineMenuData}\n showArrow={false}\n placement=\"bottom-end\"\n />\n )}\n {allowRemove && !inlineMenuActions && (\n <Button\n type=\"button\"\n className={classes.actionButton}\n // TODO: Change IconName to IconName.Plus if an item can be added\n icon={IconName.X}\n buttonContext={ButtonContext.Icon}\n height={actionSize}\n width={actionSize}\n onButtonClicked={() => {\n onActionClicked(data);\n }}\n dataTestId=\"dynamic-list-remove-button\"\n />\n )}\n </div>\n )}\n </div>\n );\n};\n\nconst getElevation = (\n clientY: number,\n box: DOMRect,\n): DynamicListElevationOptions => {\n return clientY - box.top - box.height / 2 < 0 ? 'above' : 'below';\n};\n\nconst renderData = function <T extends Data>(\n column: DynamicListColumn<T>,\n data: T,\n propertyName: keyof T,\n): React.ReactNode {\n const value: unknown = data[propertyName];\n if (column.render) {\n return column.render(value, data);\n }\n\n if (value === null || value === undefined) {\n return '';\n }\n\n return String(value);\n};\n","import clsx from 'clsx';\nimport React, { PropsWithChildren, useEffect, useRef, useState } from 'react';\nimport { CSSTransition, TransitionGroup } from 'react-transition-group';\nimport { OptionalObjectSchema } from 'yup/lib/object';\nimport { noop } from '../../helpers/utils';\nimport { Data } from '../../types/data';\nimport { ActionData } from '../Actions';\nimport { ObjectSchemaDefinition } from '../FormStation';\nimport {\n DynamicListColumn,\n DynamicListElevationOptions,\n} from './DynamicDataList.model';\nimport classes from './DynamicDataList.scss';\nimport {\n DynamicListDataEntry,\n DynamicListDataEntryProps,\n} from './DynamicListDataEntry/DynamicListDataEntry';\nimport { DynamicListHeader } from './DynamicListHeader/DynamicListHeader';\nimport { DynamicListRow } from './DynamicListRow/DynamicListRow';\n\nexport interface DynamicDataListProps<T extends Data> {\n /**\n * Column definitions\n * The order of this array determines the order of columns\n */\n columns: DynamicListColumn<T>[];\n /** Whether or not the header row is shown (default: true) */\n showHeader?: boolean;\n /** List data */\n value: T[];\n /** Spacing between columns */\n columnGap?: string;\n /** Minimum width of this component */\n minimumWidth?: string;\n /** Header row height */\n headerRowHeight?: string;\n /** List row height */\n listRowHeight?: string;\n /** List row action button and checkbox size (default: '50px') */\n listRowActionSize?: string;\n /** Spacing between rows */\n rowGap?: string;\n /** Horizontal alignment of text */\n horizontalTextAlign?: 'left' | 'right' | 'center';\n /** Vertical alignment of text */\n verticalTextAlign?: 'start' | 'center' | 'end';\n /** If set, indicates the component has an error and will display this prop as the error message (not implemented yet) */\n error?: string | undefined;\n /** Property that contains the value used in reordering the list (default: undefined) */\n positionPropertyName?: keyof T;\n /** If sets, sets the label for the position column (default: 'Position') */\n positionLabel?: string;\n /** Whether or not rows can be repositioned (default: true) */\n allowReordering?: boolean;\n /** Determines if the Add and Delete action buttons are rendered (default: true) */\n allowAddAndRemove?: boolean;\n /** Determines if data rows can be dragged for repositioning (default: true) */\n allowRowDragging?: boolean;\n /** Whether or not new data can be added (default: false) */\n allowNewData?: boolean;\n /** Custom DynamicListDataEntry component which will be rendered instead of the default component */\n customDataEntry?: React.FC<DynamicListDataEntryProps<T>>;\n /** Optional Yup validation object for validating new data */\n rowValidationSchema?: OptionalObjectSchema<ObjectSchemaDefinition<T>>;\n /** Sets default values to be populated in the new row when new data is allowed. */\n defaultValuesForNewData?: Partial<T>;\n /** The maximum amount of items that can be added to the list.\n * If this prop is set and the amount is reached, data entry will be removed (default: undefined)\n */\n maxItemLimit?: number;\n /** CSS Class name for additional styles */\n className?: string;\n /** Whether the header and input field should stick to the top (default: false) */\n stickyHeader?: boolean;\n /** Whether add new item button should be disabled (default: false) */\n disabled?: boolean;\n /** Performs transformations to the new data object being added */\n onAddTransformData?: (data: Partial<T>) => T;\n /** CSS Class name provider for each row. Allows row style to be determined by data */\n rowClassNameProvider?: (data: T) => string;\n /** Raised when the list has changed */\n onChange?: (list: T[]) => void;\n inlineMenuActions?: (data: T) => ActionData[];\n}\n\n/**\n * Renders a list of data that whose rows can be added, deleted, and repositioned\n * @example\n * <DynamicDataList<DataInterface>\n * columns={[{propertyName: 'id', size: '1fr', label: 'Id'}]}\n * data={[{id: '1',desc: 'Description 1',title: 'Item 1'}]}\n * onChange={list => console.log(list)}\n * />\n */\nexport const DynamicDataList = <T extends Data>({\n columns = [],\n value = [],\n error,\n showHeader = true,\n minimumWidth = '500px',\n columnGap,\n rowGap,\n headerRowHeight,\n listRowHeight,\n listRowActionSize,\n horizontalTextAlign,\n verticalTextAlign,\n positionPropertyName,\n positionLabel,\n allowReordering = true,\n allowAddAndRemove = true,\n allowRowDragging = true,\n allowNewData = false,\n customDataEntry: CustomDataEntry,\n maxItemLimit,\n rowValidationSchema,\n defaultValuesForNewData,\n stickyHeader = true,\n disabled = false,\n className = '',\n onChange = noop,\n onAddTransformData = (data) => data as T,\n rowClassNameProvider,\n inlineMenuActions,\n}: PropsWithChildren<DynamicDataListProps<T>>): JSX.Element => {\n const positionKey = useRef<keyof T | undefined>(positionPropertyName);\n\n const { columnSizes } = useColumnDefs<T>(\n columns,\n allowReordering,\n allowAddAndRemove,\n allowRowDragging,\n positionKey.current,\n !!inlineMenuActions,\n );\n\n // TODO: Error handling\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const errorMsg: string | undefined = error;\n\n const [list, setList] = useState<T[]>(value);\n useEffect(() => {\n if (positionPropertyName) {\n value.sort(\n (a, b) =>\n Number(a[positionPropertyName]) - Number(b[positionPropertyName]),\n );\n }\n setList([...value]); // Set list to new value. Mainly used by 'undo' to reset the list\n }, [positionPropertyName, value]);\n\n const [isDragging, setIsDragging] = useState<boolean>(false);\n\n const [currentRowPosition, setCurrentRowPosition] = useState<number>(); // position of the row being dragged\n\n const [shouldAnimate, setShouldAnimate] = useState<boolean>(false);\n\n // Position for new data entry. defaults to 1 if list is empty\n const { newDataPosition } = usePositions<T>(\n list,\n allowNewData,\n positionKey.current,\n );\n\n const { canAddItems } = useCanAddItems(\n allowNewData,\n allowAddAndRemove,\n list.length,\n maxItemLimit,\n );\n\n const customStyles = {\n gridRowGap: rowGap,\n minWidth: minimumWidth,\n } as React.CSSProperties;\n\n /** Resources used for dragging:\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API\n * https://www.youtube.com/watch?v=jfYWwQrtzzY\n * https://www.youtube.com/watch?v=Q1PYQPK9TaM\n */\n\n const onDragStartHandler = (\n event: React.DragEvent<HTMLDivElement>,\n position: number,\n ): void => {\n setIsDragging(true);\n if (positionKey.current !== undefined) {\n setCurrentRowPosition(position);\n }\n };\n\n const onDropHandler = (\n event: React.DragEvent<HTMLDivElement>,\n newPosition: number,\n elevation: DynamicListElevationOptions,\n ): void => {\n // Exit if currentRowPosition is not set or if currentRowPosition is newPosition\n if (\n currentRowPosition !== undefined &&\n currentRowPosition !== newPosition\n ) {\n onRepositionHandler(currentRowPosition, newPosition, 'drag', elevation);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const onDragEndHandler = (event: React.DragEvent<HTMLDivElement>): void => {\n // clean up dragging flow\n setIsDragging(false);\n setCurrentRowPosition(undefined); // reset position\n };\n\n // TODO: rows should expand in height with data... discuss this with team lead\n\n const onRepositionHandler = (\n currentRowPosition: number,\n newPosition: number,\n eventType: 'drag' | 'input',\n elevation?: DynamicListElevationOptions,\n ): void => {\n if (positionKey.current === undefined) {\n return;\n }\n\n const posKey = positionKey.current;\n\n setList(() => {\n const newList = calculateNewList(\n list,\n posKey,\n currentRowPosition,\n newPosition,\n eventType,\n elevation,\n );\n\n onChange(newList);\n return newList;\n });\n };\n\n /**\n * Removes an item from the list array using the item's index\n * @param data Row Data\n * @param idx index in list array\n */\n const onDeleteItemHandler = (data: T, idx: number): void => {\n setList((prevState) => {\n // if positioning is active\n if (\n positionKey.current !== undefined &&\n (allowReordering || allowRowDragging)\n ) {\n const newList = removeItemFromList(prevState, positionKey.current, idx);\n\n onChange(newList);\n return newList;\n\n // if there is no positioning, just return the list with the item removed\n } else {\n const newList = prevState.filter(\n (item: T, index: number) => index !== idx,\n );\n\n onChange(newList);\n return newList;\n }\n });\n };\n\n /**\n * Adds an item to the list array. All new entries are placed at the end.\n * @param data Row Data\n */\n const onAddItemHandler = (data: T): void => {\n setShouldAnimate(true);\n setList((prevState) => {\n const newList = [...prevState, onAddTransformData(data)];\n\n onChange(newList);\n return newList;\n });\n };\n\n const DynamicListDataEntryProps: DynamicListDataEntryProps<T> = {\n columns,\n columnSizes,\n columnGap,\n positionKey: positionKey.current,\n rowHeight: listRowHeight,\n actionSize: listRowActionSize,\n horizontalTextAlign,\n verticalTextAlign,\n allowAdd: allowAddAndRemove,\n allowReordering,\n allowDragging: allowRowDragging,\n newDataPosition,\n rowValidationSchema,\n defaultValuesForNewData,\n sticky: stickyHeader,\n showHeader,\n disabled,\n onActionClicked: onAddItemHandler,\n };\n\n return (\n <div\n className={clsx(\n classes.container,\n { [classes.noHeader]: !showHeader },\n 'dynamic-data-list-container',\n className,\n )}\n style={customStyles}\n data-test-id=\"dynamic-data-list\"\n >\n {showHeader && (\n <DynamicListHeader\n columns={columns}\n columnSizes={columnSizes}\n columnGap={columnGap}\n rowHeight={headerRowHeight}\n horizontalTextAlign={horizontalTextAlign}\n verticalTextAlign={verticalTextAlign}\n allowReordering={Boolean(\n allowReordering && positionKey.current !== undefined,\n )}\n positionKey={positionKey.current}\n positionLabel={positionLabel}\n sticky={stickyHeader}\n />\n )}\n {canAddItems &&\n (CustomDataEntry ? (\n <CustomDataEntry {...DynamicListDataEntryProps} />\n ) : (\n <DynamicListDataEntry<T> {...DynamicListDataEntryProps} />\n ))}\n <TransitionGroup component={null}>\n {list.map((item: T, idx: number) => (\n <CSSTransition\n key={idx}\n timeout={{ enter: 1000, exit: 10 }}\n classNames={{\n enter: clsx(shouldAnimate && classes.rowEnter),\n enterActive: clsx(shouldAnimate && classes.rowEnterActive),\n exit: classes.rowExit,\n exitActive: classes.rowExitActive,\n }}\n onEnter={(node: HTMLElement, _isAppearing: boolean) => {\n shouldAnimate &&\n node.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }}\n onEntered={() => {\n setShouldAnimate(false);\n }}\n >\n <DynamicListRow<T>\n key={idx}\n columns={columns}\n data={item}\n columnSizes={columnSizes}\n columnGap={columnGap}\n rowHeight={listRowHeight}\n actionSize={listRowActionSize}\n horizontalTextAlign={horizontalTextAlign}\n verticalTextAlign={verticalTextAlign}\n allowRemove={allowAddAndRemove}\n allowReordering={allowReordering}\n positionKey={positionKey.current}\n allowDragging={allowRowDragging}\n dragging={isDragging}\n onDragStart={onDragStartHandler}\n onDrop={onDropHandler}\n onDragEnd={onDragEndHandler}\n onActionClicked={(data) => onDeleteItemHandler(data, idx)}\n onPositionInputChanged={(currentPosition, newPosition) =>\n onRepositionHandler(currentPosition, newPosition, 'input')\n }\n inlineMenuActions={inlineMenuActions}\n rowClassNameProvider={rowClassNameProvider}\n />\n </CSSTransition>\n ))}\n </TransitionGroup>\n </div>\n );\n};\n\n/**\n * Generates a combined string of all columns.columnSize values, to be used as CSS value\n * Also produces property key which is used for positioning\n * @param columns The list of columns that should be used\n * @returns a string that consists of defined column sizes and a position key that maps to a data property\n */\nconst useColumnDefs = function <T extends Data>(\n columns: DynamicListColumn<T>[],\n allowReordering: boolean,\n allowAddAndRemove: boolean,\n allowRowDragging: boolean,\n positionKey?: keyof T,\n showInlineMenu?: boolean,\n): {\n readonly columnSizes: string;\n} {\n let positionColumn = '';\n let actionColumn = '';\n const columnDefinition = columns\n .filter((columns) => columns.propertyName !== positionKey) // do not allow a column to be created for 'position'\n .reduce((prev, current) => `${prev} ${current.size ?? '1fr'}`, '')\n .trim();\n\n if (allowReordering) {\n if (allowRowDragging === true) {\n positionColumn = '100px ';\n } else {\n positionColumn = '60px ';\n }\n }\n\n if (allowAddAndRemove) {\n actionColumn = ' 50px';\n }\n\n if (showInlineMenu) {\n actionColumn = ' 50px';\n }\n\n const columnSizes = `${positionColumn}${columnDefinition}${actionColumn}`;\n\n return {\n columnSizes,\n } as const;\n};\n\n/**\n * Determines whether the the Data Entry row is shown\n * @param allowNewData is new data is allowed\n * @param allowAddAndRemove is the action button shown\n * @param currentItemAmt current amout of items in the list\n * @param maxItemAmtLimit maximum amount of items that be added\n */\nconst useCanAddItems = (\n allowNewData: boolean,\n allowAddAndRemove: boolean,\n currentItemAmt: number,\n maxItemAmtLimit?: number,\n): {\n readonly canAddItems: boolean;\n} => {\n const [canAddItems, setCanAddItems] = useState<boolean>(\n allowNewData === true &&\n allowAddAndRemove === true &&\n maxItemAmtLimit === undefined\n ? true\n : maxItemAmtLimit !== undefined && currentItemAmt < maxItemAmtLimit\n ? true\n : false,\n );\n\n useEffect(() => {\n if (\n allowNewData === true &&\n allowAddAndRemove === true &&\n maxItemAmtLimit === undefined\n ) {\n setCanAddItems(true);\n } else if (\n maxItemAmtLimit !== undefined &&\n currentItemAmt < maxItemAmtLimit\n ) {\n setCanAddItems(true);\n } else {\n setCanAddItems(false);\n }\n }, [allowNewData, allowAddAndRemove, currentItemAmt, maxItemAmtLimit]);\n\n return {\n canAddItems,\n } as const;\n};\n\n/**\n * Returns position info from the list array\n * @param list data array\n * @param allowNewData whether or not new data can be entered\n * @param positionKey key from data object that holds the position value\n */\nconst usePositions = function <T extends Data>(\n list: T[],\n allowNewData: boolean,\n positionKey: keyof T | undefined,\n): {\n readonly firstPosition: number;\n readonly lastPosition: number;\n readonly newDataPosition: number;\n} {\n const [firstPosition, setFirstPosition] = useState<number>(\n // find the first position in the list array or fall back to 1\n allowNewData && list.length > 0 && positionKey !== undefined\n ? list[0][positionKey]\n : 1,\n );\n const [lastPosition, setLastPostion] = useState<number>(\n // find the last position in the list array or fall back to 1\n allowNewData && list.length > 0 && positionKey !== undefined\n ? list.slice(-1)[0][positionKey]\n : 1,\n );\n\n const [newDataPosition, setNewDataPosition] = useState<number>(\n // set initial position to last item position + 1 or fall back to 1\n allowNewData && list.length > 0 && positionKey !== undefined\n ? list.slice(-1)[0][positionKey] + 1\n : 1,\n );\n\n useEffect(() => {\n if (allowNewData && positionKey !== undefined) {\n // if the list is empty, set all positions to 1\n if (list.length === 0) {\n setFirstPosition(1);\n setLastPostion(1);\n setNewDataPosition(1);\n\n // list is not empty, find and set positions\n } else {\n const firstDataRow: T = list[0];\n setFirstPosition(firstDataRow[positionKey]);\n\n const lastDataRow: T = list.slice(-1)[0];\n setLastPostion(lastDataRow[positionKey]);\n\n setNewDataPosition(lastDataRow[positionKey] + 1);\n }\n }\n }, [allowNewData, list, positionKey]);\n\n return {\n firstPosition,\n lastPosition,\n newDataPosition,\n } as const;\n};\n\nexport const calculateNewList = <T,>(\n list: T[],\n posKey: keyof T,\n currentRowPosition: number,\n newPosition: number,\n eventType: 'drag' | 'input',\n elevation?: DynamicListElevationOptions,\n): T[] => {\n let calculatedPos: number;\n const allPositions: number[] = list.map((data) => Number(data[posKey]));\n\n function findDragPosition(\n newPos: number,\n currentPos: number,\n elevation?: DynamicListElevationOptions,\n ): number {\n let moveDir: 'up' | 'down';\n\n if (newPos < currentPos) {\n moveDir = 'up';\n } else {\n moveDir = 'down';\n }\n const newPosIndex = allPositions.indexOf(newPos);\n const prevPos = allPositions[newPosIndex - 1];\n const nextPos = allPositions[newPosIndex + 1];\n\n if (moveDir === 'up') {\n // below the first row\n if (prevPos === undefined && elevation === 'below') {\n return allPositions[0] + 1;\n }\n\n // top of the list\n if (prevPos === undefined) {\n return 1;\n }\n\n // place it below the previous position\n if (elevation === 'above') {\n return prevPos + 1;\n }\n\n // place it below the new pos\n if (elevation === 'below') {\n // same position\n if (currentPos === nextPos) {\n return currentPos;\n } else {\n // move underneath new position\n return allPositions[newPosIndex] + 1;\n }\n }\n } else {\n // item placed in same position\n if (prevPos === currentPos && elevation === 'above') {\n return currentPos;\n }\n\n // place row in new position\n if (elevation === 'above') {\n return prevPos;\n }\n\n // place row in new position\n if (elevation === 'below') {\n return newPos;\n }\n }\n\n // Fallback to the bottom of the list. This fallback is never meant to be reached.\n return allPositions[allPositions.length - 1] ?? 1;\n }\n\n // item was moved via input\n if (eventType === 'input') {\n if (newPosition <= 0) {\n calculatedPos = 1;\n } else {\n calculatedPos = newPosition;\n }\n // item was moved via drag\n } else {\n calculatedPos = findDragPosition(\n newPosition,\n currentRowPosition,\n elevation,\n );\n }\n\n // exit if the calculatedPos is also the current position\n if (calculatedPos === currentRowPosition) {\n return list;\n }\n\n const tempItems: T[] = [];\n\n // item was moved up\n if (calculatedPos < currentRowPosition) {\n let isAfterNewPosGap = false;\n for (const item of list) {\n // all items before the new row position\n if (Number(item[posKey]) < calculatedPos) {\n tempItems.push(item);\n }\n\n // increment the existing row in the new row position\n else if (Number(item[posKey]) === calculatedPos) {\n tempItems.push({ ...item, [posKey]: Number(item[posKey]) + 1 });\n\n // all items between new position and current position\n } else if (\n Number(item[posKey]) > calculatedPos &&\n Number(item[posKey]) < currentRowPosition\n ) {\n // if the previous position is empty, don't increment anymore rows\n if (!allPositions.includes(Number(item[posKey]) - 1)) {\n isAfterNewPosGap = true;\n }\n if (!isAfterNewPosGap) {\n tempItems.push({ ...item, [posKey]: Number(item[posKey]) + 1 });\n } else {\n tempItems.push(item);\n }\n\n // update current row being moved\n } else if (Number(item[posKey]) === currentRowPosition) {\n tempItems.push({ ...item, [posKey]: calculatedPos });\n }\n\n // all items after currentRowPosition\n else {\n tempItems.push(item);\n }\n }\n\n // item was moved down\n } else {\n let isGapBeforeNewPos = false;\n const reverseList = list.slice().reverse();\n\n // loop through the reversed list\n for (const item of reverseList) {\n // push all items after new position without mutations\n if (Number(item[posKey]) > calculatedPos) {\n tempItems.push(item);\n }\n\n // all items between current position and new position\n else if (\n Number(item[posKey]) <= calculatedPos &&\n Number(item[posKey]) > currentRowPosition\n ) {\n // if no gap is dectected, decrement item\n if (!isGapBeforeNewPos) {\n tempItems.push({ ...item, [posKey]: Number(item[posKey]) - 1 });\n\n // if a gap was dectected, push the item without mutating\n } else {\n tempItems.push(item);\n }\n\n // check if the previous position is open\n if (!allPositions.includes(Number(item[posKey]) - 1)) {\n isGapBeforeNewPos = true;\n }\n }\n\n // update current row being moved\n else if (Number(item[posKey]) === currentRowPosition) {\n tempItems.push({ ...item, [posKey]: calculatedPos });\n }\n\n // push all items before current row without mutations\n else {\n tempItems.push(item);\n }\n }\n }\n\n // IMPORTANT always sort the array by position key. All other logic expects the list to be sorted by position key if reordering is allowed.\n return tempItems.sort((a, b) => Number(a[posKey]) - Number(b[posKey]));\n};\n\n/**\n * Responsible for removing an item from the list and updating all subsequent item's positions\n * @param list list array\n * @param posKey position\n * @param idx index of the item being removed\n */\nexport const removeItemFromList = <T,>(\n list: T[],\n posKey: keyof T,\n idx: number,\n): T[] => {\n const allPositions: number[] = list.map((data) => Number(data[posKey]));\n\n // position of the item removed\n const removedPos = Number(list[idx][posKey]);\n\n const listWithoutRemovedItem = list\n .filter((item: T, index: number) => index !== idx)\n .map((item) => item);\n\n const tempItems: T[] = [];\n\n let isGapReached = false;\n for (const item of listWithoutRemovedItem) {\n // push all items before the deleted row\n if (Number(item[posKey]) < removedPos) {\n tempItems.push(item);\n\n // items after the deleted row\n } else {\n // if the position before is empty, a gap was reached\n if (!allPositions.includes(Number(item[posKey]) - 1)) {\n isGapReached = true;\n }\n\n // only continue decrementing subsequent items as long as no gap was reached\n if (!isGapReached) {\n tempItems.push({ ...item, [posKey]: Number(item[posKey]) - 1 });\n // if a gap was reached, just push the rest of the items\n } else {\n tempItems.push(item);\n }\n }\n }\n\n // IMPORTANT always sort the array by position key. All other logic expects the list to be sorted by position key if reordering is allowed.\n return tempItems.sort((a, b) => Number(a[posKey]) - Number(b[posKey]));\n};\n","import clsx from 'clsx';\nimport React, { useState } from 'react';\nimport { usePopper } from 'react-popper';\nimport { CSSTransition } from 'react-transition-group';\nimport { IconName, Icons } from '../Icons';\nimport classes from './InfoTooltip.scss';\n\nexport interface InfoTooltipProps {\n className?: string;\n}\n\nexport const InfoTooltip: React.FC<InfoTooltipProps> = ({\n children,\n className = '',\n}) => {\n const [referenceElement, setReferenceElement] = useState<HTMLElement>();\n const [popperElement, setPopperElement] = useState<HTMLDivElement>();\n const [arrowElement, setArrowElement] = useState<HTMLDivElement>();\n const [showTooltip, setShowTooltip] = useState<boolean>(false);\n let hideTooltipTimeout: NodeJS.Timeout;\n const tooltipVisibleTime = 500;\n\n const { styles, attributes } = usePopper(referenceElement, popperElement, {\n modifiers: [\n {\n name: 'arrow',\n options: { element: arrowElement },\n },\n {\n name: 'offset',\n options: {\n offset: [0, 10],\n },\n },\n ],\n placement: 'right',\n });\n\n return (\n <div className={clsx(classes.root, className)}>\n <div\n ref={setReferenceElement as React.LegacyRef<HTMLDivElement>}\n onMouseEnter={() => {\n clearTimeout(hideTooltipTimeout);\n setShowTooltip(true);\n }}\n onMouseLeave={() =>\n (hideTooltipTimeout = global.setTimeout(() => {\n setShowTooltip(false);\n }, tooltipVisibleTime))\n }\n >\n <Icons icon={IconName.Info} className={clsx(classes.icon)} />\n </div>\n <CSSTransition\n in={showTooltip}\n timeout={200}\n classNames={{\n enter: classes['info-tooltip-enter'],\n enterActive: classes['info-tooltip-enter-active'],\n exit: classes['info-tooltip-exit'],\n exitActive: classes['info-tooltip-exit-active'],\n }}\n unmountOnExit\n >\n <div\n className={clsx(classes.container)}\n ref={setPopperElement as React.LegacyRef<HTMLDivElement>}\n style={styles.popper}\n {...attributes.popper}\n onClick={(e) => e.stopPropagation()}\n onMouseEnter={() => {\n clearTimeout(hideTooltipTimeout);\n }}\n onMouseLeave={() =>\n (hideTooltipTimeout = global.setTimeout(() => {\n setShowTooltip(false);\n }, tooltipVisibleTime))\n }\n >\n {children}\n <div\n ref={setArrowElement as React.LegacyRef<HTMLDivElement>}\n className={clsx(classes.arrow)}\n style={styles.arrow}\n />\n </div>\n </CSSTransition>\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React, { CSSProperties } from 'react';\nimport { InfoTooltip } from '../../InfoTooltip';\nimport { BaseFormElement } from '../Form.models';\nimport classes from './FormElementContainer.scss';\n\nexport type FormElementContainerProps = BaseFormElement & {\n /** Optional error message to display */\n error?: string | undefined;\n\n /** Minimum height of the element (default: 50px) */\n minHeight?: string;\n\n /** Identifier for E2E testing to identify the form element type */\n dataTestFieldType?: string;\n\n /** Stick to the top option */\n stickyLabel?: boolean;\n};\n\n/**\n * A Container Component which renders the label and content which is used as the base for all Form Elements.\n * @example <FormElementContainer label={label}>\n * {fieldContent}\n * </FormElementContainer>\n */\nexport const FormElementContainer: React.FC<FormElementContainerProps> = ({\n id,\n label = '',\n className = '',\n children,\n tooltipContent,\n error,\n minHeight = '50px',\n dataTestFieldType,\n inlineMode = false,\n stickyLabel = true,\n}) => {\n const heightStyles: CSSProperties = {};\n\n if (minHeight !== '') {\n heightStyles.height = 'auto';\n heightStyles.minHeight = minHeight;\n }\n\n return (\n <div\n className={clsx(classes.container, className)}\n id={id}\n data-test-id=\"form-field\"\n data-test-type={dataTestFieldType}\n >\n {!inlineMode && (\n <div\n className={clsx(\n classes.label,\n {\n [classes.sticky]: stickyLabel,\n },\n 'form-element-label',\n )}\n style={heightStyles}\n >\n <label data-test-id=\"form-field-label\">\n {label}\n {tooltipContent && (\n <InfoTooltip className={clsx(classes.tooltip)}>\n {tooltipContent}\n </InfoTooltip>\n )}\n </label>\n </div>\n )}\n <div\n className={clsx(classes.content, 'form-element-content')}\n data-test-id=\"form-field-content\"\n style={heightStyles}\n >\n {children}\n </div>\n {error && (\n <small\n className={clsx({ [classes.inlineMode]: inlineMode }, classes.error)}\n data-test-id=\"form-field-error\"\n >\n {error}\n </small>\n )}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { BaseFormElement } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './BooleanViewField.scss';\n\nexport interface BooleanViewFieldProps extends BaseFormElement {\n /** Value to be displayed */\n value?: boolean;\n /** text to be displayed when value is true */\n trueLabel?: string;\n /** text to be displayed when value is true */\n falseLabel?: string;\n}\n\nexport const BooleanViewField: React.FC<BooleanViewFieldProps> = ({\n value = false,\n trueLabel = 'True',\n falseLabel = 'False',\n className = '',\n ...rest\n}) => {\n return (\n <FormElementContainer\n {...rest}\n className={clsx(\n classes.container,\n 'boolean-view-field-container',\n className,\n )}\n dataTestFieldType=\"BooleanView\"\n >\n <div className={clsx(classes.value)}>\n <div className={clsx(value ? classes.green : classes.red)}></div>\n <div\n className={clsx(classes.text)}\n data-test-id=\"form-field-value\"\n data-test-value={value}\n >\n {value ? trueLabel : falseLabel}\n </div>\n </div>\n </FormElementContainer>\n );\n};\n","import clsx from 'clsx';\nimport React, { useRef, useState } from 'react';\nimport {\n ConfirmationConfig,\n ConfirmationMode,\n ConfirmDialog,\n} from '../../ConfirmDialog';\nimport { BaseFormControl, BaseInputEvents } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './Checkbox.scss';\n\nexport interface CheckboxProps\n extends BaseFormControl,\n Omit<BaseInputEvents, 'onChange'> {\n /** Current value the form control has */\n value?: boolean;\n /** Whether or not the control should start focused (default: false) */\n autoFocus?: boolean;\n /** If set to 'Advanced', action will require confirmation via a confirmation pop up. (default: 'None') */\n confirmationMode?: Extract<ConfirmationMode, 'None' | 'Advanced'>;\n /** Optional text overrides for the confirmation pop up. */\n confirmationConfig?: ConfirmationConfig;\n onChange?: (value: boolean) => void;\n}\n\nexport const Checkbox: React.FC<CheckboxProps> = ({\n name,\n id,\n value = false,\n disabled = false,\n error,\n autoFocus = false,\n confirmationMode = 'None',\n confirmationConfig = {},\n onChange,\n onBlur,\n onFocus,\n className = '',\n ...rest\n}) => {\n const errorMsg: string | undefined = error;\n\n const [confirmation, setConfirmation] = useState<boolean>(false);\n const [referenceElement, setReferenceElement] = useState<HTMLElement>();\n const ref = useRef<boolean>();\n\n const { title, body, cancelButtonText, confirmButtonText, onConfirmOpen } =\n confirmationConfig;\n\n const onCancelHandler = (): void => {\n ref.current = undefined;\n setConfirmation(false);\n };\n\n const onConfirmHandler = (): void => {\n onChange && onChange(ref.current as boolean);\n\n ref.current = undefined;\n setConfirmation(false);\n };\n\n return (\n <FormElementContainer\n {...rest}\n className={clsx(classes.container, 'checkbox-container', className)}\n error={errorMsg}\n dataTestFieldType=\"Checkbox\"\n >\n <input\n id={id}\n name={name}\n ref={setReferenceElement as React.LegacyRef<HTMLInputElement>}\n type=\"checkbox\"\n className={clsx({\n [classes.hasConfirm]: confirmation,\n [classes.hasError]: errorMsg !== undefined,\n })}\n checked={value}\n // Open issue https://github.com/facebook/react/issues/6321\n // \"checked\" does not update so we need another attribute:\n data-test-checked={value}\n disabled={disabled}\n autoFocus={autoFocus}\n onChange={(e) => {\n if (confirmationMode === 'Advanced') {\n ref.current = e.currentTarget.checked;\n setConfirmation(true);\n return;\n }\n\n onChange && onChange(e.currentTarget.checked);\n }}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n {confirmation && (\n <ConfirmDialog\n className={clsx(classes.confirmDialog)}\n referenceElement={referenceElement}\n title={title}\n cancelButtonText={cancelButtonText}\n confirmButtonText={confirmButtonText}\n onCancel={onCancelHandler}\n onConfirm={onConfirmHandler}\n onConfirmOpen={onConfirmOpen}\n >\n {body}\n </ConfirmDialog>\n )}\n </FormElementContainer>\n );\n};\n","import { getIn, useFormikContext } from 'formik';\n\ninterface ErrorsType {\n [property: string]: string | undefined;\n}\n\nexport const useFormikError = (name: string): string | undefined => {\n const { errors } = useFormikContext();\n return errors && getIn(errors as ErrorsType, name);\n};\n","import { useField } from 'formik';\nimport React from 'react';\nimport { useFormikError } from '../useFormikError';\nimport { Checkbox, CheckboxProps } from './Checkbox';\nexport const CheckboxField: React.FC<Omit<CheckboxProps, 'error'>> = (\n props,\n) => {\n const { name } = props;\n const error = useFormikError(props.name);\n const [field, , helpers] = useField(name);\n\n return (\n <Checkbox\n {...props}\n value={field.value}\n error={error}\n onChange={helpers.setValue}\n />\n );\n};\n","import { useEffect, useState } from 'react';\n\n// hook based off: https://typeofnan.dev/writing-a-custom-react-usedebounce-hook-with-typescript/\n\n/**\n * Updates a value using the debounce strategy.\n * Commonly used with the useEffect hook to check when the returned 'debouncedValue' has been updated\n * @param initialValue starting value\n * @param time setTimeout delay time\n * @example\n * const [debouncedValue, setVal, val] = useDebounce<string>('intialValue', 500);\n * const func = () => setVal('newValue');\n * useEffect(() => {\n * console.log(debouncedValue);\n * }, [debouncedValue]);\n */\nexport const useDebounce = <T,>(\n initialValue: T,\n time: number,\n): [T, React.Dispatch<T>, T] => {\n const [value, setValue] = useState<T>(initialValue);\n const [debouncedValue, setDebouncedValue] = useState<T>(initialValue);\n\n useEffect(() => {\n const debounce = setTimeout(() => {\n setDebouncedValue(value);\n }, time);\n // remove timeout when component is unmounted\n return () => {\n clearTimeout(debounce);\n };\n }, [value, time]);\n\n return [debouncedValue, setValue, value];\n};\n","import clsx from 'clsx';\nimport React, {\n ChangeEvent,\n FormEvent,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { CSSTransition, TransitionGroup } from 'react-transition-group';\nimport { noop } from '../../../helpers/utils';\nimport { useDebounce } from '../../../hooks/useDebounce/useDebounce';\nimport { Button, ButtonContext } from '../../Buttons';\nimport { IconName } from '../../Icons';\nimport { BaseFormControl, BaseInputEvents } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './CustomTags.scss';\n\ninterface SuggestionsHook {\n readonly suggestions: string[];\n readonly setVal: React.Dispatch<string>;\n readonly val: string;\n readonly cursorPos: number | undefined;\n readonly setCursorPos: React.Dispatch<\n React.SetStateAction<number | undefined>\n >;\n}\n\nexport interface CustomTagsProps extends BaseFormControl, BaseInputEvents {\n /** Input element type (default: 'text')*/\n type?: string;\n /** If set, sets the form control value */\n value?: string[];\n /** Input placeholder */\n placeholder?: string;\n /** Whether or not the control should start focused (default: false) */\n autoFocus?: boolean;\n /** Whether or not the values displays inline or as rows */\n displayAsRows?: boolean;\n /** Determines how often liveSuggestionsResolver will be called. Timer is in milliseconds (default: 200)*/\n liveSuggestionsDelay?: number;\n /** If set, enables live suggestions. Emits the currently typed input value and expects an array of suggestions to be displayed */\n liveSuggestionsResolver?: (value: string) => Promise<string[]> | string[];\n}\n\n/**\n * Form control that allows custom tags to be entered\n * @example\n * <CustomTags\n * name=\"customTags\"\n * value={['Tag1', 'Tag2']}\n * label={'Custom Tags'}\n * onChange={e => console.log(e)}\n * />\n */\nexport const CustomTags: React.FC<CustomTagsProps> = ({\n id,\n name,\n type = 'text',\n value = [],\n disabled = false,\n placeholder,\n error = undefined,\n autoFocus = false,\n onChange = noop,\n displayAsRows = false,\n onFocus,\n onBlur = noop,\n liveSuggestionsDelay = 200,\n liveSuggestionsResolver,\n className = '',\n ...rest\n}) => {\n const [currentTags, setCurrentTags] = useState<string[]>(value); // Current tags the user has selected\n const [shouldAnimate, setShouldAnimate] = useState<boolean>(false);\n const ref = useRef<FormEvent<HTMLInputElement>>();\n\n useEffect(() => {\n setCurrentTags((current) => (current === value ? current : value));\n }, [value]);\n\n const styles = {\n flexDirection: displayAsRows ? 'column' : 'row',\n } as React.CSSProperties;\n\n useEffect(() => {\n // Only emit if there is a current event\n if (ref.current) {\n // TODO: remove event object and emit only currentTags array\n onChange({\n ...ref.current,\n\n currentTarget: { value: currentTags as unknown as string },\n } as React.ChangeEvent<HTMLInputElement>);\n\n // Resets event data\n ref.current = undefined;\n }\n }, [currentTags, onChange]);\n\n // live suggestions\n const textInput = useRef<HTMLInputElement>(null);\n const { suggestions, setVal, val, cursorPos, setCursorPos } = useSuggestions(\n currentTags,\n liveSuggestionsDelay,\n liveSuggestionsResolver,\n );\n\n // errors\n const [errorMessage, setErrorMessage] = useState<string | undefined>(error);\n useEffect(() => {\n switch (true) {\n case error !== undefined:\n setErrorMessage(error);\n break;\n case currentTags.includes(val.trim()):\n setErrorMessage('Duplicate value');\n break;\n default:\n setErrorMessage(undefined);\n break;\n }\n }, [currentTags, error, val]);\n\n /**\n * Checks if a string contains only whitespaces\n * @param str value\n * @returns true if string is empty\n */\n const isStringEmpty = (str: string): boolean => {\n return !str || /^\\s*$/.test(str);\n };\n\n /**\n * Adds a tag to currently selected list\n * @param e Select FormEvent\n */\n function addTag(e: FormEvent<HTMLInputElement>): void {\n setShouldAnimate(true);\n\n const newTag = e.currentTarget.value.trim();\n // If the new tag is an empty string OR a duplicate, don't add the tag\n if (newTag === '' || currentTags.includes(newTag)) {\n return;\n }\n\n // Set event data\n ref.current = e;\n\n setCurrentTags((prevState) => [...prevState, newTag].sort());\n\n // Value was successfully added, reset input, highlighted suggestion, and any error message\n setVal('');\n setCursorPos(undefined);\n setErrorMessage(undefined);\n }\n\n /**\n * Removes tags from currently selected tags\n * @param idx index of tag to be filtered\n * @param e Event\n */\n function removeTag(idx: number, e: unknown): void {\n // Set event data\n ref.current = e as FormEvent<HTMLInputElement>;\n\n setCurrentTags((prevState) =>\n prevState.filter((_: string, i: number) => i !== idx),\n );\n }\n\n /**\n * Called when a suggestion is clicked\n * @param e click event\n * @param suggestion item that was clicked\n */\n const onSuggestionClickedHandler = (\n e: React.MouseEvent<HTMLLIElement, MouseEvent>,\n suggestion: string,\n ): void => {\n setVal(suggestion);\n\n e.persist();\n addTag({\n ...e,\n currentTarget: { value: suggestion },\n } as unknown as FormEvent<HTMLInputElement>);\n\n // focus back on the input after clicking new suggestion\n textInput.current?.focus();\n };\n\n /**\n * Called when a key is pressed in the input\n * @param e keyboard event\n */\n const onKeyPressHandler = (\n e: React.KeyboardEvent<HTMLInputElement>,\n ): void => {\n if (\n e.key === 'ArrowUp' &&\n suggestions.length > 0 &&\n liveSuggestionsResolver !== undefined\n ) {\n e.preventDefault(); // prevents cursor in input from moving\n // remove cursor position if pos is at the top\n if (cursorPos === undefined || cursorPos === 0) {\n setCursorPos(undefined);\n } else {\n // select previous item\n setCursorPos((prevState: number | undefined) => {\n if (prevState === undefined) {\n return undefined;\n } else {\n return prevState - 1;\n }\n });\n }\n }\n\n if (\n e.key === 'ArrowDown' &&\n suggestions.length > 0 &&\n liveSuggestionsResolver !== undefined\n ) {\n e.preventDefault(); // prevents cursor in input from moving\n // if no cursor pos, start from the top and select the first item\n if (cursorPos === undefined) {\n setCursorPos(0);\n\n // continue traversing down the list until the last item is reached\n } else if (cursorPos < suggestions.length - 1) {\n setCursorPos((prevState: number | undefined) => {\n if (prevState === undefined) {\n return 0;\n } else {\n return prevState + 1;\n }\n });\n }\n }\n\n if (e.key === 'Enter') {\n // if there is a highlighted item, emit that value instead of whats in the input\n if (cursorPos !== undefined) {\n e.persist();\n\n //@ts-expect-error we're not passing a full EventTarget object here\n addTag({ ...e, currentTarget: { value: suggestions[cursorPos] } });\n } else {\n e.persist();\n addTag(e);\n }\n }\n };\n\n /**\n * Called when the Add button is clicked\n * @param e MouseEvent\n */\n const onPlusClick = (\n e: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n ): void => {\n addTag({\n ...e,\n currentTarget: {\n value: textInput.current?.value ?? '',\n },\n } as unknown as FormEvent<HTMLInputElement>);\n };\n\n /**\n * Called when a user focuses out of the input\n * @param e Input form event\n */\n const onBlurHandler = (e: ChangeEvent<HTMLInputElement>): void => {\n onBlur(e);\n\n // reset input if value is only whitespaces\n if (isStringEmpty(e?.currentTarget?.value)) {\n setVal('');\n return;\n }\n\n addTag({\n ...e,\n currentTarget: {\n value: textInput.current?.value ?? '',\n },\n } as ChangeEvent<HTMLInputElement>);\n };\n\n return (\n <FormElementContainer\n {...rest}\n className={clsx(classes.container, 'custom-tags-container', className)}\n error={errorMessage}\n dataTestFieldType=\"CustomTags\"\n >\n <div className={clsx(classes.tagsWrapper)} style={styles}>\n <div className={clsx(classes.inputWrapper)}>\n <input\n className={clsx({\n [classes.hasError]: errorMessage !== undefined,\n })}\n id={id}\n name={name}\n ref={textInput}\n value={val}\n type={type}\n disabled={disabled}\n placeholder={placeholder}\n autoFocus={autoFocus}\n autoComplete={'off'}\n onChange={(e) => setVal(e.currentTarget.value)}\n onKeyDown={onKeyPressHandler}\n onBlur={onBlurHandler}\n onFocus={onFocus}\n />\n {val !== '' && suggestions.length > 0 && (\n <ul className={clsx(classes.autoComplete)}>\n {suggestions.map((suggestion, idx) => (\n <li\n key={suggestion}\n onMouseDown={(event) =>\n onSuggestionClickedHandler(event, suggestion)\n }\n className={clsx({ [classes.selected]: cursorPos === idx })}\n >\n {suggestion}\n </li>\n ))}\n </ul>\n )}\n <Button\n className={clsx({\n [classes.plusButton]: true,\n [classes.hasError]: !!errorMessage,\n })}\n type=\"button\"\n icon={IconName.Plus}\n onButtonClicked={onPlusClick}\n buttonContext={ButtonContext.None}\n disabled={disabled || !val}\n dataTestId=\"tags-add\"\n />\n </div>\n <TransitionGroup component={null}>\n {currentTags?.map((tag, idx) => (\n <CSSTransition\n key={tag}\n timeout={{ enter: 1000, exit: 10 }}\n classNames={{\n enter: clsx(shouldAnimate && classes.customTagEnter),\n enterActive: clsx(\n shouldAnimate && classes.customTagEnterActive,\n ),\n exit: classes.customTagExit,\n exitActive: classes.customTagExitActive,\n }}\n onEntered={() => {\n setShouldAnimate(false);\n }}\n >\n <span className={clsx(classes.selectedItem)} data-test-id=\"tag\">\n <span>{tag}</span>\n <Button\n type=\"button\"\n icon={IconName.X}\n onButtonClicked={(e) => {\n e.persist();\n removeTag(idx, e);\n }}\n disabled={disabled}\n buttonContext={ButtonContext.Icon}\n dataTestId=\"tags-delete\"\n ></Button>\n </span>\n </CSSTransition>\n ))}\n </TransitionGroup>\n </div>\n </FormElementContainer>\n );\n};\n\nconst useSuggestions = (\n currentTags: string[],\n liveSuggestionsDelay: number,\n liveSuggestionsResolver?: (value: string) => Promise<string[]> | string[],\n): SuggestionsHook => {\n async function fetchData(): Promise<void> {\n if (liveSuggestionsResolver !== undefined) {\n try {\n // isLoading = true;\n const tempSuggestions = await liveSuggestionsResolver(debouncedValue);\n // Only set suggestion if current value still matches the value we requested the suggestions for\n if (valRef.current === debouncedValue) {\n setSuggestions(\n tempSuggestions.filter((item) => !currentTags.includes(item)),\n );\n setCursorPos(undefined);\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log(error);\n } finally {\n // isLoading = false;\n }\n }\n }\n\n const [suggestions, setSuggestions] = useState<string[]>([]);\n const [debouncedValue, setVal, val] = useDebounce<string>(\n '',\n liveSuggestionsDelay,\n );\n // Storing the current val in a reference, so we can get the actual current value later\n const valRef = useRef<string>(val);\n valRef.current = val;\n\n const [cursorPos, setCursorPos] = useState<number | undefined>(undefined);\n\n useEffect(() => {\n // if liveSuggestionsResolver is not set, exit\n if (liveSuggestionsResolver === undefined) {\n return;\n }\n\n // if debouncedValue is empty, reset suggestions\n if (debouncedValue === '') {\n setSuggestions([]);\n setCursorPos(undefined);\n\n // only send request if debouncedValue is not an empty string\n } else {\n fetchData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [debouncedValue, liveSuggestionsResolver]); // do not allow tags to trigger\n\n return { suggestions, setVal, val, cursorPos, setCursorPos } as const;\n};\n","import { useField } from 'formik';\nimport React from 'react';\nimport { useFormikError } from '../useFormikError';\nimport { CustomTags, CustomTagsProps } from './CustomTags';\n\nexport const CustomTagsField: React.FC<\n Omit<CustomTagsProps, 'error' | 'onChange'>\n> = (props) => {\n const { name } = props;\n const error = useFormikError(props.name);\n const [field, , helpers] = useField(name);\n\n return (\n <CustomTags\n {...props}\n value={field.value}\n error={error}\n onChange={(e) => helpers.setValue(e.currentTarget.value)}\n />\n );\n};\n","// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n,\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n,\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n get ianaName() {\n return this.name;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get isUniversal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {SystemZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new SystemZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"system\";\n }\n\n /** @override **/\n get name() {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"system\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet dtfCache = {};\nfunction makeDTF(zone) {\n if (!dtfCache[zone]) {\n dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n era: \"short\",\n });\n }\n return dtfCache[zone];\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n era: 3,\n hour: 4,\n minute: 5,\n second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date);\n const filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i];\n const pos = typeToPos[type];\n\n if (type === \"era\") {\n filled[pos] = value;\n } else if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n if (!ianaZoneCache[name]) {\n ianaZoneCache[name] = new IANAZone(name);\n }\n return ianaZoneCache[name];\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache = {};\n dtfCache = {};\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @deprecated This method returns false for some valid IANA names. Use isValidZone instead.\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return this.isValidZone(s);\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n if (!zone) {\n return false;\n }\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /** @override **/\n get type() {\n return \"iana\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name);\n let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date);\n\n if (adOrBc === \"BC\") {\n year = -Math.abs(year) + 1;\n }\n\n // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n const adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0,\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /** @override **/\n get isValid() {\n return this.valid;\n }\n}\n","import { padStart, roundTo, hasRelative, formatOffset } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlLFCache[key];\n if (!dtf) {\n dtf = new Intl.ListFormat(locString, opts);\n intlLFCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlDTCache = {};\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlNumCache = {};\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache[key];\n if (!inf) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache[key] = inf;\n }\n return inf;\n}\n\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache[key];\n if (!inf) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache[key] = inf;\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else {\n sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n return sysLocaleCache;\n }\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n // private subtags and unicode subtags have ordering requirements,\n // and we're not properly parsing this, so just strip out the\n // private ones if they exist.\n const xIndex = localeStr.indexOf(\"-x-\");\n if (xIndex !== -1) {\n localeStr = localeStr.substring(0, xIndex);\n }\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n let selectedStr;\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n selectedStr = localeStr;\n } catch (e) {\n const smaller = localeStr.substring(0, uIndex);\n options = getCachedDTF(smaller).resolvedOptions();\n selectedStr = smaller;\n }\n\n const { numberingSystem, calendar } = options;\n return [selectedStr, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (outputCalendar || numberingSystem) {\n if (!localeStr.includes(\"-u-\")) {\n localeStr += \"-u\";\n }\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2016, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, defaultOK, englishFn, intlFn) {\n const mode = loc.listingMode(defaultOK);\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\"\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n const { padTo, floor, ...otherOpts } = opts;\n\n if (!forceSimple || Object.keys(otherOpts).length > 0) {\n const intlOpts = { useGrouping: false, ...opts };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.originalZone = undefined;\n\n let z = undefined;\n if (this.opts.timeZone) {\n // Don't apply any workarounds if a timeZone is explicitly provided in opts\n this.dt = dt;\n } else if (dt.zone.type === \"fixed\") {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n // we manually apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n } else if (dt.zone.type === \"system\") {\n this.dt = dt;\n } else if (dt.zone.type === \"iana\") {\n this.dt = dt;\n z = dt.zone.name;\n } else {\n // Custom zones can have any offset / offsetName so we just manually\n // apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n\n const intlOpts = { ...this.opts };\n intlOpts.timeZone = intlOpts.timeZone || z;\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n\n format() {\n if (this.originalZone) {\n // If we have to substitute in the actual zone name, we have to use\n // formatToParts so that the timezone can be replaced.\n return this.formatToParts()\n .map(({ value }) => value)\n .join(\"\");\n }\n return this.dtf.format(this.dt.toJSDate());\n }\n\n formatToParts() {\n const parts = this.dtf.formatToParts(this.dt.toJSDate());\n if (this.originalZone) {\n return parts.map((part) => {\n if (part.type === \"timeZoneName\") {\n const offsetName = this.originalZone.offsetName(this.dt.ts, {\n locale: this.dt.locale,\n format: this.opts.timeZoneName,\n });\n return {\n ...part,\n value: offsetName,\n };\n } else {\n return part;\n }\n });\n }\n return parts;\n }\n\n resolvedOptions() {\n return this.dtf.resolvedOptions();\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = { style: \"long\", ...opts };\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\n/**\n * @private\n */\n\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);\n }\n\n static create(locale, numberingSystem, outputCalendar, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale;\n // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache = {};\n intlNumCache = {};\n intlRelCache = {};\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar);\n }\n\n constructor(locale, numbering, outputCalendar, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode() {\n const isActuallyEn = this.isEnglish();\n const hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone({ ...alts, defaultToEN: true });\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone({ ...alts, defaultToEN: false });\n }\n\n months(length, format = false, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.months, () => {\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n this.monthsCache[formatStr][length] = mapMonths((dt) => this.extract(dt, intl, \"month\"));\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems(defaultOK = true) {\n return listStuff(\n this,\n undefined,\n defaultOK,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n (dt) => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find((m) => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n listFormatter(opts = {}) {\n return getCachedLF(this.intl, opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\")\n );\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"],\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hourCycle\",\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /** @override **/\n get type() {\n return \"fixed\";\n }\n\n /** @override **/\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n get ianaName() {\n if (this.fixed === 0) {\n return \"Etc/UTC\";\n } else {\n return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n }\n }\n\n /** @override **/\n offsetName() {\n return this.name;\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /** @override **/\n get isUniversal() {\n return true;\n }\n\n /** @override **/\n offset() {\n return this.fixed;\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"default\") return defaultZone;\n else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && input.offset && typeof input.offset === \"number\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const isNeg = input < 0;\n let padded;\n if (isNeg) {\n padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n } else {\n padded = (\"\" + input).padStart(n, \"0\");\n }\n return padded;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseFloating(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseFloat(string);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, towardZero = false) {\n const factor = 10 ** digits,\n rounder = towardZero ? Math.trunc : Math.round;\n return rounder(number * factor) / factor;\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// covert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n // the calculations done by Date.UTC are using year 2000 - which is incorrect\n d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n }\n return +d;\n}\n\nexport function weeksInWeekYear(weekYear) {\n const p1 =\n (weekYear +\n Math.floor(weekYear / 4) -\n Math.floor(weekYear / 100) +\n Math.floor(weekYear / 400)) %\n 7,\n last = weekYear - 1,\n p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7;\n return p1 === 4 || p2 === 3 ? 53 : 52;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find((m) => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nlet now = () => Date.now(),\n defaultZone = \"system\",\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n twoDigitCutoffYear = 60,\n throwOnInvalid;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * Use the value \"system\" to reset this value to the system's time zone.\n * @type {string}\n */\n static set defaultZone(zone) {\n defaultZone = zone;\n }\n\n /**\n * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n * The default value is the system's time zone (the one set on the machine that runs this code).\n * @type {Zone}\n */\n static get defaultZone() {\n return normalizeZone(defaultZone, SystemZone.instance);\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * Get the cutoff year after which a string encoding a year as two digits is interpreted to occur in the current century.\n * @type {number}\n */\n static get twoDigitCutoffYear() {\n return twoDigitCutoffYear;\n }\n\n /**\n * Set the cutoff year after which a string encoding a year as two digits is interpreted to occur in the current century.\n * @type {number}\n * @example Settings.twoDigitCutoffYear = 0 // cut-off year is 0, so all 'yy' are interpretted as current century\n * @example Settings.twoDigitCutoffYear = 50 // '49' -> 1949; '50' -> 2050\n * @example Settings.twoDigitCutoffYear = 1950 // interpretted as 50\n * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpretted as 50\n */\n static set twoDigitCutoffYear(cutoffYear) {\n twoDigitCutoffYear = cutoffYear % 100;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n // white-space is always considered a literal in user-provided formats\n // the \" \" token has a special meaning (see unitForToken)\n\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.format();\n }\n\n formatDateTime(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.format();\n }\n\n formatDateTimeParts(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.formatToParts();\n }\n\n formatInterval(interval, opts = {}) {\n const df = this.loc.dtFormatter(interval.start, { ...this.opts, ...opts });\n return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n }\n\n resolvedOptions(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.resolvedOptions();\n }\n\n num(n, p = 0) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = { ...this.opts };\n\n if (p > 0) {\n opts.padTo = p;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = (opts) => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = (token) => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = (length) =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = (token) => {\n // Where possible: http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // fractional seconds\n case \"uu\":\n return this.num(Math.floor(dt.millisecond / 10), 2);\n case \"uuu\":\n return this.num(Math.floor(dt.millisecond / 100));\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const tokenToField = (token) => {\n switch (token[0]) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"w\":\n return \"week\";\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n default:\n return null;\n }\n },\n tokenToString = (lildur) => (token) => {\n const mapped = tokenToField(token);\n if (mapped) {\n return this.num(lildur.get(mapped), token.length);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t));\n return stringifyTokens(tokens, tokenToString(collapsed));\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n isUndefined,\n parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return (m) =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1),\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3]),\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseFloating(yearStr)),\n months: maybeNegate(parseFloating(monthStr)),\n weeks: maybeNegate(parseFloating(weekStr)),\n days: maybeNegate(parseFloating(dayStr)),\n hours: maybeNegate(parseFloating(hourStr)),\n minutes: maybeNegate(parseFloating(minuteStr)),\n seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n },\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr),\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr,\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 =\n /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000,\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000,\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 },\n },\n casualMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000,\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000,\n },\n\n ...lowOrderMatrix,\n },\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n },\n ...lowOrderMatrix,\n };\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n matrix: alts.matrix || dur.matrix,\n };\n return new Duration(conf);\n}\n\nfunction antiTrunc(n) {\n return n < 0 ? Math.floor(n) : Math.ceil(n);\n}\n\n// NB: mutates parameters\nfunction convert(matrix, fromMap, fromUnit, toMap, toUnit) {\n const conv = matrix[toUnit][fromUnit],\n raw = fromMap[fromUnit] / conv,\n sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]),\n // ok, so this is wild, but see the matrix in the tests\n added =\n !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw);\n toMap[toUnit] += added;\n fromMap[fromUnit] -= added * conv;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n reverseUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n convert(matrix, vals, previous, vals, current);\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n const newVals = {};\n for (const [key, value] of Object.entries(vals)) {\n if (value !== 0) {\n newVals[key] = value;\n }\n }\n return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n let matrix = accurate ? accurateMatrix : casualMatrix;\n\n if (config.matrix) {\n matrix = config.matrix;\n }\n\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = matrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject({ milliseconds: count }, opts);\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {Object} [opts=[]] - options for creating this Duration\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the custom conversion system to use\n * @return {Duration}\n */\n static fromObject(obj, opts = {}) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit),\n loc: Locale.fromObject(opts),\n conversionAccuracy: opts.conversionAccuracy,\n matrix: opts.matrix,\n });\n }\n\n /**\n * Create a Duration from DurationLike.\n *\n * @param {Object | number | Duration} durationLike\n * One of:\n * - object with keys like 'years' and 'hours'.\n * - number representing milliseconds\n * - Duration instance\n * @return {Duration}\n */\n static fromDurationLike(durationLike) {\n if (isNumber(durationLike)) {\n return Duration.fromMillis(durationLike);\n } else if (Duration.isDuration(durationLike)) {\n return durationLike;\n } else if (typeof durationLike === \"object\") {\n return Duration.fromObject(durationLike);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n );\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the preset conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\",\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `w` for weeks\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * Tokens can be escaped by wrapping with single quotes.\n * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = {\n ...opts,\n floor: opts.round !== false && opts.floor !== false,\n };\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a string representation of a Duration with all units included.\n * To modify its behavior use the `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat\n * @param opts - On option object to override the formatting. Accepts the same keys as the options parameter of the native `Int.NumberFormat` constructor, as well as `listStyle`.\n * @example\n * ```js\n * var dur = Duration.fromObject({ days: 1, hours: 5, minutes: 6 })\n * dur.toHuman() //=> '1 day, 5 hours, 6 minutes'\n * dur.toHuman({ listStyle: \"long\" }) //=> '1 day, 5 hours, and 6 minutes'\n * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 day, 5 hr, 6 min'\n * ```\n */\n toHuman(opts = {}) {\n const l = orderedUnits\n .map((unit) => {\n const val = this.values[unit];\n if (isUndefined(val)) {\n return null;\n }\n return this.loc\n .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n .format(val);\n })\n .filter((n) => n);\n\n return this.loc\n .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n .format(l);\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject() {\n if (!this.isValid) return {};\n return { ...this.values };\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\",\n ...opts,\n };\n\n const value = this.shiftTo(\"hours\", \"minutes\", \"seconds\", \"milliseconds\");\n\n let fmt = opts.format === \"basic\" ? \"hhmm\" : \"hh:mm\";\n\n if (!opts.suppressSeconds || value.seconds !== 0 || value.milliseconds !== 0) {\n fmt += opts.format === \"basic\" ? \"ss\" : \":ss\";\n if (!opts.suppressMilliseconds || value.milliseconds !== 0) {\n fmt += \".SSS\";\n }\n }\n\n let str = value.toFormat(fmt);\n\n if (opts.includePrefix) {\n str = \"T\" + str;\n }\n\n return str;\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n return this.as(\"milliseconds\");\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem });\n const opts = { loc, matrix, conversionAccuracy };\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Rescale units to its largest representation\n * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n * @return {Duration}\n */\n rescale() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map((u) => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n // plus anything further down the chain that should be rolled up in to this\n for (const down in vals) {\n if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) {\n convert(this.matrix, vals, down, built, k);\n }\n }\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n return clone(this, { values: built }, true).normalize();\n }\n\n /**\n * Shift this Duration to all available units.\n * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n * @return {Duration}\n */\n shiftToAll() {\n if (!this.isValid) return this;\n return this.shiftTo(\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n );\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd,\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @return {number}\n */\n count(unit = \"milliseconds\") {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit),\n end = this.end.startOf(unit);\n return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...DateTime} dateTimes - the unit of time to count.\n * @return {Array}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter((d) => this.contains(d))\n .sort(),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {Array}\n */\n splitBy(duration) {\n const dur = Duration.fromDurationLike(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits((x) => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {Array}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Return whether this Interval engulfs the start and end of the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into a equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static merge(intervals) {\n const [found, final] = intervals\n .sort((a, b) => a.s - b.s)\n .reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map((i) => [\n { time: i.s, type: \"s\" },\n { time: i.e, type: \"e\" },\n ]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {Array}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map((i) => this.intersection(i))\n .filter((i) => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns a localized string representing this Interval. Accepts the same options as the\n * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n * is browser-specific, but in general it will return an appropriate representation of the\n * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n * specified.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n * Intl.DateTimeFormat constructor options.\n * @param {Object} opts - Options to override the configuration of the start DateTime.\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n : INVALID;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format\n * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n * formatting tool.\n * @param {string} dateFormat - The format string. This string formats the start and end time.\n * See {@link DateTime#toFormat} for details.\n * @param {Object} opts - Options.\n * @param {string} [opts.separator = ' – '] - A separator to place between the start and end\n * representations.\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone#isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {Array}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link Info#months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {Array}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {Array}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link Info#weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {Array}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {Array}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {Array}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `relative`: whether this environment supports relative time formatting\n * @example Info.features() //=> { relative: false }\n * @return {Object}\n */\n static features() {\n return { relative: hasRelative() };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n },\n ],\n [\"days\", dayDiff],\n ];\n\n const results = {};\n const earlier = cursor;\n let lowestOrder, highWater;\n\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n results[unit] = differ(cursor, later);\n highWater = earlier.plus(results);\n\n if (highWater > later) {\n results[unit]--;\n cursor = earlier.plus(results);\n } else {\n cursor = highWater;\n }\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(results, opts);\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n return new RegExp(`${numberingSystems[numberingSystem || \"latn\"]}${append}`);\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = (t) => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\", false), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\", false), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true, false), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true, false), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false, false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false, false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n case \"uu\":\n return simple(oneOrTwo);\n case \"uuu\":\n return intUnit(one);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false, false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false, false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true, false), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true, false), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n // in this case we accept any non-newline white-space\n case \" \":\n return simple(/[^\\S\\n\\r]/);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP,\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\",\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\",\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\",\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\",\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour: {\n numeric: \"h\",\n \"2-digit\": \"hh\",\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\",\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\",\n },\n timeZoneName: {\n long: \"ZZZZZ\",\n short: \"ZZZ\",\n },\n};\n\nfunction tokenForPart(part, formatOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n const isSpace = /^\\s+$/.test(value);\n return {\n literal: !isSpace,\n val: isSpace ? \" \" : value,\n };\n }\n\n const style = formatOpts[type];\n\n let val = partTypeStyleToTokenVal[type];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val,\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = (token) => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone = null;\n let specificOffset;\n if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n }\n\n if (!isUndefined(matches.Z)) {\n if (!zone) {\n zone = new FixedOffsetZone(matches.Z);\n }\n specificOffset = matches.Z;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n const tokens = formatOptsToTokens(formatOpts, locale);\n\n if (tokens == null || tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport function explainFromTokens(locale, input, format) {\n const tokens = expandMacroTokens(Formatter.parseFormat(format), locale),\n units = tokens.map((t) => unitForToken(t, locale)),\n disqualifyingUnit = units.find((t) => t.invalidReason);\n\n if (disqualifyingUnit) {\n return { input, tokens, invalidReason: disqualifyingUnit.invalidReason };\n } else {\n const [regexString, handlers] = buildRegex(units),\n regex = RegExp(regexString, \"i\"),\n [rawMatches, matches] = match(input, regex, handlers),\n [result, zone, specificOffset] = matches\n ? dateTimeFromMatches(matches)\n : [null, null, undefined];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return { input, tokens, regex, rawMatches, matches, result, zone, specificOffset };\n }\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n if (!formatOpts) {\n return null;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const parts = formatter.formatDateTimeParts(getDummyDateTime());\n return parts.map((p) => tokenForPart(p, formatOpts));\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nfunction dayOfWeek(year, month, day) {\n const d = new Date(Date.UTC(year, month - 1, day));\n\n if (year < 100 && year >= 0) {\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n\n const js = d.getUTCDay();\n\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex((i) => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = dayOfWeek(year, month, day);\n\n let weekNumber = Math.floor((ordinal - weekday + 10) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear);\n } else if (weekNumber > weeksInWeekYear(year)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = dayOfWeek(weekYear, 1, 4),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData;\n const ordinal = computeOrdinal(year, month, day);\n return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData;\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(ordinalData) };\n}\n\nexport function hasInvalidWeekData(obj) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.week);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS,\n padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n parseFromTokens,\n explainFromTokens,\n formatOptsToTokens,\n expandMacroTokens,\n} from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid,\n };\n return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds(),\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = {\n ...inst.c,\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7,\n },\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds,\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n const { setZone, zone } = opts;\n if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(parsed, {\n ...opts,\n zone: interpretationZone,\n specificOffset,\n });\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true,\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\nfunction toISODate(o, extended) {\n const longFormat = o.c.year > 9999 || o.c.year < 0;\n let c = \"\";\n if (longFormat && o.c.year >= 0) c += \"+\";\n c += padStart(o.c.year, longFormat ? 6 : 4);\n\n if (extended) {\n c += \"-\";\n c += padStart(o.c.month);\n c += \"-\";\n c += padStart(o.c.day);\n } else {\n c += padStart(o.c.month);\n c += padStart(o.c.day);\n }\n return c;\n}\n\nfunction toISOTime(\n o,\n extended,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone\n) {\n let c = padStart(o.c.hour);\n if (extended) {\n c += \":\";\n c += padStart(o.c.minute);\n if (o.c.second !== 0 || !suppressSeconds) {\n c += \":\";\n }\n } else {\n c += padStart(o.c.minute);\n }\n\n if (o.c.second !== 0 || !suppressSeconds) {\n c += padStart(o.c.second);\n\n if (o.c.millisecond !== 0 || !suppressMilliseconds) {\n c += \".\";\n c += padStart(o.c.millisecond, 3);\n }\n }\n\n if (includeOffset) {\n if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n c += \"Z\";\n } else if (o.o < 0) {\n c += \"-\";\n c += padStart(Math.trunc(-o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(-o.o % 60));\n } else {\n c += \"+\";\n c += padStart(Math.trunc(o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(o.o % 60));\n }\n }\n\n if (extendedZone) {\n c += \"[\" + o.zone.ianaName + \"]\";\n }\n return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\",\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\",\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n const zone = normalizeZone(opts.zone, Settings.defaultZone),\n loc = Locale.fromObject(opts),\n tsNow = Settings.now();\n\n let ts, o;\n\n // assume we have the higher-order units\n if (!isUndefined(obj.year)) {\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const offsetProvis = zone.offset(tsNow);\n [ts, o] = objToTS(obj, offsetProvis, zone);\n } else {\n ts = tsNow;\n }\n\n return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = (unit) => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n let opts = {},\n args;\n if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n opts = argList[argList.length - 1];\n args = Array.from(argList).slice(0, argList.length - 1);\n } else {\n args = Array.from(argList);\n }\n return [opts, args];\n}\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n const ot = zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local({ zone: \"America/New_York\" }) //~> now, in US east coast time\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12, { locale: \"fr\" }) //~> 2017-03-12T00:00:00, with a French locale\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" }) //~> 2017-03-12T05:00:00, in UTC\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @param {Object} options - configuration options for the DateTime\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" }) //~> 2017-03-12T05:45:00Z with a French locale\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n * @return {DateTime}\n */\n static utc() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n\n opts.zone = FixedOffsetZone.utcInstance;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options),\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {Object} opts - options for creating this DateTime\n * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @return {DateTime}\n */\n static fromObject(obj, opts = {}) {\n obj = obj || {};\n const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const tsNow = Settings.now(),\n offsetProvis = !isUndefined(opts.specificOffset)\n ? opts.specificOffset\n : zoneToUse.offset(tsNow),\n normalized = normalizeObject(obj, normalizeUnit),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber,\n loc = Locale.fromObject(opts);\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc,\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n }),\n [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {DateTime} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is an instance of DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n /**\n * Produce the format string for a set of options\n * @param formatOpts\n * @param localeOpts\n * @returns {string}\n */\n static parseFormatForOpts(formatOpts, localeOpts = {}) {\n const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n }\n\n /**\n * Produce the the fully expanded format token for the locale\n * Does NOT quote characters, so quoted tokens will not round trip correctly\n * @param fmt\n * @param localeOpts\n * @returns {string}\n */\n static expandFormat(fmt, localeOpts = {}) {\n const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n return expanded.map((t) => t.val).join(\"\");\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.isUniversal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1, day: 1 }).offset ||\n this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOptions(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link DateTime#setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnit),\n settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian({ ...gregorianToWeek(this.c), ...normalized });\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n } else {\n mixed = { ...this.toObject(), ...normalized };\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link DateTime#plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit) {\n if (!this.isValid) return this;\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n o.weekday = 1;\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @return {string}\n */\n toISO({\n format = \"extended\",\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset = true,\n extendedZone = false,\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n const ext = format === \"extended\";\n\n let c = toISODate(this, ext);\n c += \"T\";\n c += toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone);\n return c;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @return {string}\n */\n toISODate({ format = \"extended\" } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return toISODate(this, format === \"extended\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n extendedZone = false,\n format = \"extended\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n let c = includePrefix ? \"T\" : \"\";\n return (\n c +\n toISOTime(\n this,\n format === \"extended\",\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone\n )\n );\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string}\n */\n toSQLDate() {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n let fmt = \"HH:mm:ss.SSS\";\n\n if (includeZone || includeOffset) {\n if (includeOffsetSpace) {\n fmt += \" \";\n }\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += \"ZZ\";\n }\n }\n\n return toTechFormat(this, fmt, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns the epoch seconds (as a whole number) of this DateTime.\n * @return {number}\n */\n toUnixInteger() {\n return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = { ...this.c };\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\"created by diffing an invalid DateTime\");\n }\n\n const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link DateTime#diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return adjustedToZone.startOf(unit) <= inputMs && inputMs <= adjustedToZone.endOf(unit);\n }\n\n /**\n * Equality check\n * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(base, this.plus(padding), {\n ...options,\n numeric: \"always\",\n units,\n unit,\n });\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n ...options,\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true,\n });\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link DateTime#toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n","export default function mergeClassNames() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return args.reduce(function (classList, arg) {\n return typeof arg === 'string' || arg instanceof Array ? classList.concat(arg) : classList;\n }, []).filter(Boolean).join(' ');\n}","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\nfunction before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n}\n\n/**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\nfunction once(func) {\n return before(2, func);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = once;\n","import once from 'lodash.once';\n\nfunction filterDuplicates(arr) {\n return arr.filter(function (el, index, self) {\n return self.indexOf(el) === index;\n });\n}\n\nfunction fixLowercaseProperties(arr) {\n return arr.map(function (el) {\n if (!el || el.indexOf('-') === -1 || el.toLowerCase() !== el) {\n return el;\n }\n\n var splitEl = el.split('-');\n return \"\".concat(splitEl[0], \"-\").concat(splitEl[1].toUpperCase());\n });\n}\n\nfunction getUserLocalesInternal() {\n var languageList = [];\n\n if (typeof window !== 'undefined') {\n if (window.navigator.languages) {\n languageList = languageList.concat(window.navigator.languages);\n }\n\n if (window.navigator.language) {\n languageList.push(window.navigator.language);\n }\n\n if (window.navigator.userLanguage) {\n languageList.push(window.navigator.userLanguage);\n }\n\n if (window.navigator.browserLanguage) {\n languageList.push(window.navigator.browserLanguage);\n }\n\n if (window.navigator.systemLanguage) {\n languageList.push(window.navigator.systemLanguage);\n }\n }\n\n languageList.push('en-US'); // Fallback\n\n return fixLowercaseProperties(filterDuplicates(languageList));\n}\n\nexport var getUserLocales = once(getUserLocalesInternal);\n\nfunction getUserLocaleInternal() {\n return getUserLocales()[0];\n}\n\nexport var getUserLocale = once(getUserLocaleInternal);\nexport default getUserLocale;","/**\n * Utils\n */\nfunction makeGetEdgeOfNeighbor(getPeriod, getEdgeOfPeriod, defaultOffset) {\n return function makeGetEdgeOfNeighborInternal(date) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOffset;\n var previousPeriod = getPeriod(date) + offset;\n return getEdgeOfPeriod(previousPeriod);\n };\n}\n\nfunction makeGetEnd(getBeginOfNextPeriod) {\n return function makeGetEndInternal(date) {\n return new Date(getBeginOfNextPeriod(date).getTime() - 1);\n };\n}\n\nfunction makeGetRange(functions) {\n return function makeGetRangeInternal(date) {\n return functions.map(function (fn) {\n return fn(date);\n });\n };\n}\n/**\n * Simple getters - getting a property of a given point in time\n */\n\n/**\n * Gets year from date.\n *\n * @param {Date|number|string} date Date to get year from.\n */\n\n\nexport function getYear(date) {\n if (date instanceof Date) {\n return date.getFullYear();\n }\n\n if (typeof date === 'number') {\n return date;\n }\n\n var year = parseInt(date, 10);\n\n if (typeof date === 'string' && !isNaN(year)) {\n return year;\n }\n\n throw new Error(\"Failed to get year from date: \".concat(date, \".\"));\n}\n/**\n * Gets month from date.\n *\n * @param {Date} date Date to get month from.\n */\n\nexport function getMonth(date) {\n if (date instanceof Date) {\n return date.getMonth();\n }\n\n throw new Error(\"Failed to get month from date: \".concat(date, \".\"));\n}\n/**\n * Gets human-readable month from date.\n *\n * @param {Date} date Date to get human-readable month from.\n */\n\nexport function getMonthHuman(date) {\n if (date instanceof Date) {\n return date.getMonth() + 1;\n }\n\n throw new Error(\"Failed to get human-readable month from date: \".concat(date, \".\"));\n}\n/**\n * Gets human-readable day of the month from date.\n *\n * @param {Date} date Date to get day of the month from.\n */\n\nexport function getDate(date) {\n if (date instanceof Date) {\n return date.getDate();\n }\n\n throw new Error(\"Failed to get year from date: \".concat(date, \".\"));\n}\n/**\n * Gets hours from date.\n *\n * @param {Date|string} date Date to get hours from.\n */\n\nexport function getHours(date) {\n if (date instanceof Date) {\n return date.getHours();\n }\n\n if (typeof date === 'string') {\n var datePieces = date.split(':');\n\n if (datePieces.length >= 2) {\n var hoursString = datePieces[0];\n var hours = parseInt(hoursString, 10);\n\n if (!isNaN(hours)) {\n return hours;\n }\n }\n }\n\n throw new Error(\"Failed to get hours from date: \".concat(date, \".\"));\n}\n/**\n * Gets minutes from date.\n *\n * @param {Date|string} date Date to get minutes from.\n */\n\nexport function getMinutes(date) {\n if (date instanceof Date) {\n return date.getMinutes();\n }\n\n if (typeof date === 'string') {\n var datePieces = date.split(':');\n\n if (datePieces.length >= 2) {\n var minutesString = datePieces[1] || 0;\n var minutes = parseInt(minutesString, 10);\n\n if (!isNaN(minutes)) {\n return minutes;\n }\n }\n }\n\n throw new Error(\"Failed to get minutes from date: \".concat(date, \".\"));\n}\n/**\n * Gets seconds from date.\n *\n * @param {Date|string} date Date to get seconds from.\n */\n\nexport function getSeconds(date) {\n if (date instanceof Date) {\n return date.getSeconds();\n }\n\n if (typeof date === 'string') {\n var datePieces = date.split(':');\n\n if (datePieces.length >= 2) {\n var secondsString = datePieces[2] || 0;\n var seconds = parseInt(secondsString, 10);\n\n if (!isNaN(seconds)) {\n return seconds;\n }\n }\n }\n\n throw new Error(\"Failed to get seconds from date: \".concat(date, \".\"));\n}\n/**\n * Century\n */\n\nexport function getCenturyStart(date) {\n var year = getYear(date);\n var centuryStartYear = year + (-year + 1) % 100;\n var centuryStartDate = new Date();\n centuryStartDate.setFullYear(centuryStartYear, 0, 1);\n centuryStartDate.setHours(0, 0, 0, 0);\n return centuryStartDate;\n}\nexport var getPreviousCenturyStart = makeGetEdgeOfNeighbor(getYear, getCenturyStart, -100);\nexport var getNextCenturyStart = makeGetEdgeOfNeighbor(getYear, getCenturyStart, 100);\nexport var getCenturyEnd = makeGetEnd(getNextCenturyStart);\nexport var getPreviousCenturyEnd = makeGetEdgeOfNeighbor(getYear, getCenturyEnd, -100);\nexport var getNextCenturyEnd = makeGetEdgeOfNeighbor(getYear, getCenturyEnd, 100);\nexport var getCenturyRange = makeGetRange([getCenturyStart, getCenturyEnd]);\n/**\n * Decade\n */\n\nexport function getDecadeStart(date) {\n var year = getYear(date);\n var decadeStartYear = year + (-year + 1) % 10;\n var decadeStartDate = new Date();\n decadeStartDate.setFullYear(decadeStartYear, 0, 1);\n decadeStartDate.setHours(0, 0, 0, 0);\n return decadeStartDate;\n}\nexport var getPreviousDecadeStart = makeGetEdgeOfNeighbor(getYear, getDecadeStart, -10);\nexport var getNextDecadeStart = makeGetEdgeOfNeighbor(getYear, getDecadeStart, 10);\nexport var getDecadeEnd = makeGetEnd(getNextDecadeStart);\nexport var getPreviousDecadeEnd = makeGetEdgeOfNeighbor(getYear, getDecadeEnd, -10);\nexport var getNextDecadeEnd = makeGetEdgeOfNeighbor(getYear, getDecadeEnd, 10);\nexport var getDecadeRange = makeGetRange([getDecadeStart, getDecadeEnd]);\n/**\n * Year\n */\n\nexport function getYearStart(date) {\n var year = getYear(date);\n var yearStartDate = new Date();\n yearStartDate.setFullYear(year, 0, 1);\n yearStartDate.setHours(0, 0, 0, 0);\n return yearStartDate;\n}\nexport var getPreviousYearStart = makeGetEdgeOfNeighbor(getYear, getYearStart, -1);\nexport var getNextYearStart = makeGetEdgeOfNeighbor(getYear, getYearStart, 1);\nexport var getYearEnd = makeGetEnd(getNextYearStart);\nexport var getPreviousYearEnd = makeGetEdgeOfNeighbor(getYear, getYearEnd, -1);\nexport var getNextYearEnd = makeGetEdgeOfNeighbor(getYear, getYearEnd, 1);\nexport var getYearRange = makeGetRange([getYearStart, getYearEnd]);\n/**\n * Month\n */\n\nfunction makeGetEdgeOfNeighborMonth(getEdgeOfPeriod, defaultOffset) {\n return function makeGetEdgeOfNeighborMonthInternal(date) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOffset;\n var year = getYear(date);\n var month = getMonth(date) + offset;\n var previousPeriod = new Date();\n previousPeriod.setFullYear(year, month, 1);\n previousPeriod.setHours(0, 0, 0, 0);\n return getEdgeOfPeriod(previousPeriod);\n };\n}\n\nexport function getMonthStart(date) {\n var year = getYear(date);\n var month = getMonth(date);\n var monthStartDate = new Date();\n monthStartDate.setFullYear(year, month, 1);\n monthStartDate.setHours(0, 0, 0, 0);\n return monthStartDate;\n}\nexport var getPreviousMonthStart = makeGetEdgeOfNeighborMonth(getMonthStart, -1);\nexport var getNextMonthStart = makeGetEdgeOfNeighborMonth(getMonthStart, 1);\nexport var getMonthEnd = makeGetEnd(getNextMonthStart);\nexport var getPreviousMonthEnd = makeGetEdgeOfNeighborMonth(getMonthEnd, -1);\nexport var getNextMonthEnd = makeGetEdgeOfNeighborMonth(getMonthEnd, 1);\nexport var getMonthRange = makeGetRange([getMonthStart, getMonthEnd]);\n/**\n * Day\n */\n\nfunction makeGetEdgeOfNeighborDay(getEdgeOfPeriod, defaultOffset) {\n return function makeGetEdgeOfNeighborDayInternal(date) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOffset;\n var year = getYear(date);\n var month = getMonth(date);\n var day = getDate(date) + offset;\n var previousPeriod = new Date();\n previousPeriod.setFullYear(year, month, day);\n previousPeriod.setHours(0, 0, 0, 0);\n return getEdgeOfPeriod(previousPeriod);\n };\n}\n\nexport function getDayStart(date) {\n var year = getYear(date);\n var month = getMonth(date);\n var day = getDate(date);\n var dayStartDate = new Date();\n dayStartDate.setFullYear(year, month, day);\n dayStartDate.setHours(0, 0, 0, 0);\n return dayStartDate;\n}\nexport var getPreviousDayStart = makeGetEdgeOfNeighborDay(getDayStart, -1);\nexport var getNextDayStart = makeGetEdgeOfNeighborDay(getDayStart, 1);\nexport var getDayEnd = makeGetEnd(getNextDayStart);\nexport var getPreviousDayEnd = makeGetEdgeOfNeighborDay(getDayEnd, -1);\nexport var getNextDayEnd = makeGetEdgeOfNeighborDay(getDayEnd, 1);\nexport var getDayRange = makeGetRange([getDayStart, getDayEnd]);\n/**\n * Other\n */\n\n/**\n * Returns a number of days in a month of a given date.\n *\n * @param {Date} date Date.\n */\n\nexport function getDaysInMonth(date) {\n return getDate(getMonthEnd(date));\n}\n\nfunction padStart(num) {\n var val = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n var numStr = \"\".concat(num);\n\n if (numStr.length >= val) {\n return num;\n }\n\n return \"0000\".concat(numStr).slice(-val);\n}\n/**\n * Returns local hours and minutes (hh:mm).\n */\n\n\nexport function getHoursMinutes(date) {\n var hours = padStart(getHours(date));\n var minutes = padStart(getMinutes(date));\n return \"\".concat(hours, \":\").concat(minutes);\n}\n/**\n * Returns local hours, minutes and seconds (hh:mm:ss).\n */\n\nexport function getHoursMinutesSeconds(date) {\n var hours = padStart(getHours(date));\n var minutes = padStart(getMinutes(date));\n var seconds = padStart(getSeconds(date));\n return \"\".concat(hours, \":\").concat(minutes, \":\").concat(seconds);\n}\n/**\n * Returns local month in ISO-like format (YYYY-MM).\n */\n\nexport function getISOLocalMonth(date) {\n var year = padStart(getYear(date), 4);\n var month = padStart(getMonthHuman(date));\n return \"\".concat(year, \"-\").concat(month);\n}\n/**\n * Returns local date in ISO-like format (YYYY-MM-DD).\n */\n\nexport function getISOLocalDate(date) {\n var year = padStart(getYear(date), 4);\n var month = padStart(getMonthHuman(date));\n var day = padStart(getDate(date));\n return \"\".concat(year, \"-\").concat(month, \"-\").concat(day);\n}\n/**\n * Returns local date & time in ISO-like format (YYYY-MM-DDThh:mm:ss).\n */\n\nexport function getISOLocalDateTime(date) {\n return \"\".concat(getISOLocalDate(date), \"T\").concat(getHoursMinutesSeconds(date));\n}","var _CALENDAR_TYPE_LOCALE;\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nexport var CALENDAR_TYPES = {\n ARABIC: 'Arabic',\n HEBREW: 'Hebrew',\n ISO_8601: 'ISO 8601',\n US: 'US'\n};\nexport var CALENDAR_TYPE_LOCALES = (_CALENDAR_TYPE_LOCALE = {}, _defineProperty(_CALENDAR_TYPE_LOCALE, CALENDAR_TYPES.US, ['en-CA', 'en-US', 'es-AR', 'es-BO', 'es-CL', 'es-CO', 'es-CR', 'es-DO', 'es-EC', 'es-GT', 'es-HN', 'es-MX', 'es-NI', 'es-PA', 'es-PE', 'es-PR', 'es-SV', 'es-VE', 'pt-BR']), _defineProperty(_CALENDAR_TYPE_LOCALE, CALENDAR_TYPES.ARABIC, [// ar-LB, ar-MA intentionally missing\n'ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW', 'ar-LY', 'ar-OM', 'ar-QA', 'ar-SA', 'ar-SD', 'ar-SY', 'ar-YE', 'dv', 'dv-MV', 'ps', 'ps-AR']), _defineProperty(_CALENDAR_TYPE_LOCALE, CALENDAR_TYPES.HEBREW, ['he', 'he-IL']), _CALENDAR_TYPE_LOCALE);\nexport var WEEKDAYS = _toConsumableArray(Array(7)).map(function (el, index) {\n return index;\n});","import getUserLocale from 'get-user-locale';\n\nfunction getFormatter(options) {\n return function (locale, date) {\n return date.toLocaleString(locale || getUserLocale(), options);\n };\n}\n/**\n * Changes the hour in a Date to ensure right date formatting even if DST is messed up.\n * Workaround for bug in WebKit and Firefox with historical dates.\n * For more details, see:\n * https://bugs.chromium.org/p/chromium/issues/detail?id=750465\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1385643\n *\n * @param {Date} date Date.\n */\n\n\nfunction toSafeHour(date) {\n var safeDate = new Date(date);\n return new Date(safeDate.setHours(12));\n}\n\nfunction getSafeFormatter(options) {\n return function (locale, date) {\n return getFormatter(options)(locale, toSafeHour(date));\n };\n}\n\nvar formatDateOptions = {\n day: 'numeric',\n month: 'numeric',\n year: 'numeric'\n};\nvar formatLongDateOptions = {\n day: 'numeric',\n month: 'long',\n year: 'numeric'\n};\nvar formatMonthOptions = {\n month: 'long'\n};\nvar formatMonthYearOptions = {\n month: 'long',\n year: 'numeric'\n};\nvar formatYearOptions = {\n year: 'numeric'\n};\nvar formatShortWeekdayOptions = {\n weekday: 'short'\n};\nvar formatWeekdayOptions = {\n weekday: 'long'\n};\nexport var formatDate = getSafeFormatter(formatDateOptions);\nexport var formatLongDate = getSafeFormatter(formatLongDateOptions);\nexport var formatMonth = getSafeFormatter(formatMonthOptions);\nexport var formatMonthYear = getSafeFormatter(formatMonthYearOptions);\nexport var formatYear = getSafeFormatter(formatYearOptions);\nexport var formatShortWeekday = getSafeFormatter(formatShortWeekdayOptions);\nexport var formatWeekday = getSafeFormatter(formatWeekdayOptions);","import { getYear, getMonth as getMonthIndex, getCenturyStart, getPreviousCenturyStart, getNextCenturyStart, getCenturyEnd, getPreviousCenturyEnd, getCenturyRange, getDecadeStart, getPreviousDecadeStart, getNextDecadeStart, getDecadeEnd, getPreviousDecadeEnd, getDecadeRange, getYearStart, getPreviousYearStart, getNextYearStart, getYearEnd, getPreviousYearEnd, getYearRange, getMonthStart, getPreviousMonthStart, getNextMonthStart, getMonthEnd, getPreviousMonthEnd, getMonthRange, getDayStart, getDayEnd, getDayRange } from '@wojtekmaj/date-utils';\nimport { CALENDAR_TYPES, WEEKDAYS } from './const';\nimport { formatYear as defaultFormatYear } from './dateFormatter';\nvar SUNDAY = WEEKDAYS[0];\nvar FRIDAY = WEEKDAYS[5];\nvar SATURDAY = WEEKDAYS[6];\n/* Simple getters - getting a property of a given point in time */\n\nexport function getDayOfWeek(date) {\n var calendarType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : CALENDAR_TYPES.ISO_8601;\n var weekday = date.getDay();\n\n switch (calendarType) {\n case CALENDAR_TYPES.ISO_8601:\n // Shifts days of the week so that Monday is 0, Sunday is 6\n return (weekday + 6) % 7;\n\n case CALENDAR_TYPES.ARABIC:\n return (weekday + 1) % 7;\n\n case CALENDAR_TYPES.HEBREW:\n case CALENDAR_TYPES.US:\n return weekday;\n\n default:\n throw new Error('Unsupported calendar type.');\n }\n}\n/**\n * Century\n */\n\nexport function getBeginOfCenturyYear(date) {\n var beginOfCentury = getCenturyStart(date);\n return getYear(beginOfCentury);\n}\n/**\n * Decade\n */\n\nexport function getBeginOfDecadeYear(date) {\n var beginOfDecade = getDecadeStart(date);\n return getYear(beginOfDecade);\n}\n/**\n * Week\n */\n\n/**\n * Returns the beginning of a given week.\n *\n * @param {Date} date Date.\n * @param {String} calendarType Calendar type. Can be ISO 8601 or US.\n */\n\nexport function getBeginOfWeek(date) {\n var calendarType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : CALENDAR_TYPES.ISO_8601;\n var year = getYear(date);\n var monthIndex = getMonthIndex(date);\n var day = date.getDate() - getDayOfWeek(date, calendarType);\n return new Date(year, monthIndex, day);\n}\n/**\n * Gets week number according to ISO 8601 or US standard.\n * In ISO 8601, Arabic and Hebrew week 1 is the one with January 4.\n * In US calendar week 1 is the one with January 1.\n *\n * @param {Date} date Date.\n * @param {String} calendarType Calendar type. Can be ISO 8601 or US.\n */\n\nexport function getWeekNumber(date) {\n var calendarType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : CALENDAR_TYPES.ISO_8601;\n var calendarTypeForWeekNumber = calendarType === CALENDAR_TYPES.US ? CALENDAR_TYPES.US : CALENDAR_TYPES.ISO_8601;\n var beginOfWeek = getBeginOfWeek(date, calendarTypeForWeekNumber);\n var year = getYear(date) + 1;\n var dayInWeekOne;\n var beginOfFirstWeek; // Look for the first week one that does not come after a given date\n\n do {\n dayInWeekOne = new Date(year, 0, calendarTypeForWeekNumber === CALENDAR_TYPES.ISO_8601 ? 4 : 1);\n beginOfFirstWeek = getBeginOfWeek(dayInWeekOne, calendarTypeForWeekNumber);\n year -= 1;\n } while (date - beginOfFirstWeek < 0);\n\n return Math.round((beginOfWeek - beginOfFirstWeek) / (8.64e7 * 7)) + 1;\n}\n/**\n * Others\n */\n\n/**\n * Returns the beginning of a given range.\n *\n * @param {String} rangeType Range type (e.g. 'day')\n * @param {Date} date Date.\n */\n\nexport function getBegin(rangeType, date) {\n switch (rangeType) {\n case 'century':\n return getCenturyStart(date);\n\n case 'decade':\n return getDecadeStart(date);\n\n case 'year':\n return getYearStart(date);\n\n case 'month':\n return getMonthStart(date);\n\n case 'day':\n return getDayStart(date);\n\n default:\n throw new Error(\"Invalid rangeType: \".concat(rangeType));\n }\n}\nexport function getBeginPrevious(rangeType, date) {\n switch (rangeType) {\n case 'century':\n return getPreviousCenturyStart(date);\n\n case 'decade':\n return getPreviousDecadeStart(date);\n\n case 'year':\n return getPreviousYearStart(date);\n\n case 'month':\n return getPreviousMonthStart(date);\n\n default:\n throw new Error(\"Invalid rangeType: \".concat(rangeType));\n }\n}\nexport function getBeginNext(rangeType, date) {\n switch (rangeType) {\n case 'century':\n return getNextCenturyStart(date);\n\n case 'decade':\n return getNextDecadeStart(date);\n\n case 'year':\n return getNextYearStart(date);\n\n case 'month':\n return getNextMonthStart(date);\n\n default:\n throw new Error(\"Invalid rangeType: \".concat(rangeType));\n }\n}\nexport var getBeginPrevious2 = function getBeginPrevious2(rangeType, date) {\n switch (rangeType) {\n case 'decade':\n return getPreviousDecadeStart(date, -100);\n\n case 'year':\n return getPreviousYearStart(date, -10);\n\n case 'month':\n return getPreviousMonthStart(date, -12);\n\n default:\n throw new Error(\"Invalid rangeType: \".concat(rangeType));\n }\n};\nexport var getBeginNext2 = function getBeginNext2(rangeType, date) {\n switch (rangeType) {\n case 'decade':\n return getNextDecadeStart(date, 100);\n\n case 'year':\n return getNextYearStart(date, 10);\n\n case 'month':\n return getNextMonthStart(date, 12);\n\n default:\n throw new Error(\"Invalid rangeType: \".concat(rangeType));\n }\n};\n/**\n * Returns the end of a given range.\n *\n * @param {String} rangeType Range type (e.g. 'day')\n * @param {Date} date Date.\n */\n\nexport function getEnd(rangeType, date) {\n switch (rangeType) {\n case 'century':\n return getCenturyEnd(date);\n\n case 'decade':\n return getDecadeEnd(date);\n\n case 'year':\n return getYearEnd(date);\n\n case 'month':\n return getMonthEnd(date);\n\n case 'day':\n return getDayEnd(date);\n\n default:\n throw new Error(\"Invalid rangeType: \".concat(rangeType));\n }\n}\nexport function getEndPrevious(rangeType, date) {\n switch (rangeType) {\n case 'century':\n return getPreviousCenturyEnd(date);\n\n case 'decade':\n return getPreviousDecadeEnd(date);\n\n case 'year':\n return getPreviousYearEnd(date);\n\n case 'month':\n return getPreviousMonthEnd(date);\n\n default:\n throw new Error(\"Invalid rangeType: \".concat(rangeType));\n }\n}\nexport var getEndPrevious2 = function getEndPrevious2(rangeType, date) {\n switch (rangeType) {\n case 'decade':\n return getPreviousDecadeEnd(date, -100);\n\n case 'year':\n return getPreviousYearEnd(date, -10);\n\n case 'month':\n return getPreviousMonthEnd(date, -12);\n\n default:\n throw new Error(\"Invalid rangeType: \".concat(rangeType));\n }\n};\n/**\n * Returns an array with the beginning and the end of a given range.\n *\n * @param {String} rangeType Range type (e.g. 'day')\n * @param {Date} date Date.\n */\n\nexport function getRange(rangeType, date) {\n switch (rangeType) {\n case 'century':\n return getCenturyRange(date);\n\n case 'decade':\n return getDecadeRange(date);\n\n case 'year':\n return getYearRange(date);\n\n case 'month':\n return getMonthRange(date);\n\n case 'day':\n return getDayRange(date);\n\n default:\n throw new Error(\"Invalid rangeType: \".concat(rangeType));\n }\n}\n/**\n * Creates a range out of two values, ensuring they are in order and covering entire period ranges.\n *\n * @param {String} rangeType Range type (e.g. 'day')\n * @param {Date} date1 First date.\n * @param {Date} date2 Second date.\n */\n\nexport function getValueRange(rangeType, date1, date2) {\n var rawNextValue = [date1, date2].sort(function (a, b) {\n return a - b;\n });\n return [getBegin(rangeType, rawNextValue[0]), getEnd(rangeType, rawNextValue[1])];\n}\n\nfunction toYearLabel(locale) {\n var formatYear = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultFormatYear;\n var dates = arguments.length > 2 ? arguments[2] : undefined;\n return dates.map(function (date) {\n return formatYear(locale, date);\n }).join(' – ');\n}\n/**\n * Returns a string labelling a century of a given date.\n * For example, for 2017 it will return 2001-2100.\n *\n * @param {Date|String|Number} date Date or a year as a string or as a number.\n */\n\n\nexport function getCenturyLabel(locale, formatYear, date) {\n return toYearLabel(locale, formatYear, getCenturyRange(date));\n}\n/**\n * Returns a string labelling a century of a given date.\n * For example, for 2017 it will return 2011-2020.\n *\n * @param {Date|String|Number} date Date or a year as a string or as a number.\n */\n\nexport function getDecadeLabel(locale, formatYear, date) {\n return toYearLabel(locale, formatYear, getDecadeRange(date));\n}\n/**\n * Returns a boolean determining whether a given date is on Saturday or Sunday.\n *\n * @param {Date} date Date.\n */\n\nexport function isWeekend(date) {\n var calendarType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : CALENDAR_TYPES.ISO_8601;\n var weekday = date.getDay();\n\n switch (calendarType) {\n case CALENDAR_TYPES.ARABIC:\n case CALENDAR_TYPES.HEBREW:\n return weekday === FRIDAY || weekday === SATURDAY;\n\n case CALENDAR_TYPES.ISO_8601:\n case CALENDAR_TYPES.US:\n return weekday === SATURDAY || weekday === SUNDAY;\n\n default:\n throw new Error('Unsupported calendar type.');\n }\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nimport PropTypes from 'prop-types';\nimport { CALENDAR_TYPES } from './const';\nvar calendarTypes = Object.values(CALENDAR_TYPES);\nvar allViews = ['century', 'decade', 'year', 'month'];\nexport var isCalendarType = PropTypes.oneOf(calendarTypes);\nexport var isClassName = PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]);\nexport var isMinDate = function isMinDate(props, propName, componentName) {\n var minDate = props[propName];\n\n if (!minDate) {\n return null;\n }\n\n if (!(minDate instanceof Date)) {\n return new Error(\"Invalid prop `\".concat(propName, \"` of type `\").concat(_typeof(minDate), \"` supplied to `\").concat(componentName, \"`, expected instance of `Date`.\"));\n }\n\n var maxDate = props.maxDate;\n\n if (maxDate && minDate > maxDate) {\n return new Error(\"Invalid prop `\".concat(propName, \"` of type `\").concat(_typeof(minDate), \"` supplied to `\").concat(componentName, \"`, minDate cannot be larger than maxDate.\"));\n }\n\n return null;\n};\nexport var isMaxDate = function isMaxDate(props, propName, componentName) {\n var maxDate = props[propName];\n\n if (!maxDate) {\n return null;\n }\n\n if (!(maxDate instanceof Date)) {\n return new Error(\"Invalid prop `\".concat(propName, \"` of type `\").concat(_typeof(maxDate), \"` supplied to `\").concat(componentName, \"`, expected instance of `Date`.\"));\n }\n\n var minDate = props.minDate;\n\n if (minDate && maxDate < minDate) {\n return new Error(\"Invalid prop `\".concat(propName, \"` of type `\").concat(_typeof(maxDate), \"` supplied to `\").concat(componentName, \"`, maxDate cannot be smaller than minDate.\"));\n }\n\n return null;\n};\nexport var isRef = PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n // eslint-disable-next-line react/forbid-prop-types\n current: PropTypes.any\n})]);\nexport var isValue = PropTypes.oneOfType([PropTypes.instanceOf(Date), PropTypes.arrayOf(PropTypes.instanceOf(Date))]);\nexport var isViews = PropTypes.arrayOf(PropTypes.oneOf(allViews));\nexport var isView = function isView(props, propName, componentName) {\n var view = props[propName];\n var views = props.views;\n var allowedViews = views || allViews;\n\n if (view !== undefined && allowedViews.indexOf(view) === -1) {\n return new Error(\"Invalid prop `\".concat(propName, \"` of value `\").concat(view, \"` supplied to `\").concat(componentName, \"`, expected one of [\").concat(allowedViews.map(function (a) {\n return \"\\\"\".concat(a, \"\\\"\");\n }).join(', '), \"].\"));\n } // Everything is fine\n\n\n return null;\n};\n\nisView.isRequired = function (props, propName, componentName) {\n var view = props[propName];\n\n if (!view) {\n return new Error(\"The prop `\".concat(propName, \"` is marked as required in `\").concat(componentName, \"`, but its value is `\").concat(view, \"`.\"));\n }\n\n return isView(props, propName, componentName);\n};\n\nexport var tileGroupProps = {\n activeStartDate: PropTypes.instanceOf(Date).isRequired,\n hover: PropTypes.instanceOf(Date),\n locale: PropTypes.string,\n maxDate: isMaxDate,\n minDate: isMinDate,\n onClick: PropTypes.func,\n onMouseOver: PropTypes.func,\n tileClassName: PropTypes.oneOfType([PropTypes.func, isClassName]),\n tileContent: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n value: isValue,\n valueType: PropTypes.string\n};\nexport var tileProps = {\n activeStartDate: PropTypes.instanceOf(Date).isRequired,\n classes: PropTypes.arrayOf(PropTypes.string).isRequired,\n date: PropTypes.instanceOf(Date).isRequired,\n locale: PropTypes.string,\n maxDate: isMaxDate,\n minDate: isMinDate,\n onClick: PropTypes.func,\n onMouseOver: PropTypes.func,\n style: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])),\n tileClassName: PropTypes.oneOfType([PropTypes.func, isClassName]),\n tileContent: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n tileDisabled: PropTypes.func\n};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { getUserLocale } from 'get-user-locale';\nimport { getCenturyLabel, getDecadeLabel, getBeginNext, getBeginNext2, getBeginPrevious, getBeginPrevious2, getEndPrevious, getEndPrevious2 } from '../shared/dates';\nimport { formatMonthYear as defaultFormatMonthYear, formatYear as defaultFormatYear } from '../shared/dateFormatter';\nimport { isView, isViews } from '../shared/propTypes';\nvar className = 'react-calendar__navigation';\nexport default function Navigation(_ref) {\n var activeStartDate = _ref.activeStartDate,\n drillUp = _ref.drillUp,\n _ref$formatMonthYear = _ref.formatMonthYear,\n formatMonthYear = _ref$formatMonthYear === void 0 ? defaultFormatMonthYear : _ref$formatMonthYear,\n _ref$formatYear = _ref.formatYear,\n formatYear = _ref$formatYear === void 0 ? defaultFormatYear : _ref$formatYear,\n locale = _ref.locale,\n maxDate = _ref.maxDate,\n minDate = _ref.minDate,\n _ref$navigationAriaLa = _ref.navigationAriaLabel,\n navigationAriaLabel = _ref$navigationAriaLa === void 0 ? '' : _ref$navigationAriaLa,\n navigationLabel = _ref.navigationLabel,\n _ref$next2AriaLabel = _ref.next2AriaLabel,\n next2AriaLabel = _ref$next2AriaLabel === void 0 ? '' : _ref$next2AriaLabel,\n _ref$next2Label = _ref.next2Label,\n next2Label = _ref$next2Label === void 0 ? '»' : _ref$next2Label,\n _ref$nextAriaLabel = _ref.nextAriaLabel,\n nextAriaLabel = _ref$nextAriaLabel === void 0 ? '' : _ref$nextAriaLabel,\n _ref$nextLabel = _ref.nextLabel,\n nextLabel = _ref$nextLabel === void 0 ? '›' : _ref$nextLabel,\n _ref$prev2AriaLabel = _ref.prev2AriaLabel,\n prev2AriaLabel = _ref$prev2AriaLabel === void 0 ? '' : _ref$prev2AriaLabel,\n _ref$prev2Label = _ref.prev2Label,\n prev2Label = _ref$prev2Label === void 0 ? '«' : _ref$prev2Label,\n _ref$prevAriaLabel = _ref.prevAriaLabel,\n prevAriaLabel = _ref$prevAriaLabel === void 0 ? '' : _ref$prevAriaLabel,\n _ref$prevLabel = _ref.prevLabel,\n prevLabel = _ref$prevLabel === void 0 ? '‹' : _ref$prevLabel,\n setActiveStartDate = _ref.setActiveStartDate,\n showDoubleView = _ref.showDoubleView,\n view = _ref.view,\n views = _ref.views;\n var drillUpAvailable = views.indexOf(view) > 0;\n var shouldShowPrevNext2Buttons = view !== 'century';\n var previousActiveStartDate = getBeginPrevious(view, activeStartDate);\n var previousActiveStartDate2 = shouldShowPrevNext2Buttons && getBeginPrevious2(view, activeStartDate);\n var nextActiveStartDate = getBeginNext(view, activeStartDate);\n var nextActiveStartDate2 = shouldShowPrevNext2Buttons && getBeginNext2(view, activeStartDate);\n\n var prevButtonDisabled = function () {\n if (previousActiveStartDate.getFullYear() < 0) {\n return true;\n }\n\n var previousActiveEndDate = getEndPrevious(view, activeStartDate);\n return minDate && minDate >= previousActiveEndDate;\n }();\n\n var prev2ButtonDisabled = shouldShowPrevNext2Buttons && function () {\n if (previousActiveStartDate2.getFullYear() < 0) {\n return true;\n }\n\n var previousActiveEndDate = getEndPrevious2(view, activeStartDate);\n return minDate && minDate >= previousActiveEndDate;\n }();\n\n var nextButtonDisabled = maxDate && maxDate <= nextActiveStartDate;\n var next2ButtonDisabled = shouldShowPrevNext2Buttons && maxDate && maxDate <= nextActiveStartDate2;\n\n function onClickPrevious() {\n setActiveStartDate(previousActiveStartDate);\n }\n\n function onClickPrevious2() {\n setActiveStartDate(previousActiveStartDate2);\n }\n\n function onClickNext() {\n setActiveStartDate(nextActiveStartDate);\n }\n\n function onClickNext2() {\n setActiveStartDate(nextActiveStartDate2);\n }\n\n function renderLabel(date) {\n var label = function () {\n switch (view) {\n case 'century':\n return getCenturyLabel(locale, formatYear, date);\n\n case 'decade':\n return getDecadeLabel(locale, formatYear, date);\n\n case 'year':\n return formatYear(locale, date);\n\n case 'month':\n return formatMonthYear(locale, date);\n\n default:\n throw new Error(\"Invalid view: \".concat(view, \".\"));\n }\n }();\n\n return navigationLabel ? navigationLabel({\n date: date,\n label: label,\n locale: locale || getUserLocale(),\n view: view\n }) : label;\n }\n\n function renderButton() {\n var labelClassName = \"\".concat(className, \"__label\");\n return /*#__PURE__*/React.createElement(\"button\", {\n \"aria-label\": navigationAriaLabel,\n className: labelClassName,\n disabled: !drillUpAvailable,\n onClick: drillUp,\n style: {\n flexGrow: 1\n },\n type: \"button\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(labelClassName, \"__labelText \").concat(labelClassName, \"__labelText--from\")\n }, renderLabel(activeStartDate)), showDoubleView && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(labelClassName, \"__divider\")\n }, ' ', \"\\u2013\", ' '), /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(labelClassName, \"__labelText \").concat(labelClassName, \"__labelText--to\")\n }, renderLabel(nextActiveStartDate))));\n }\n\n return /*#__PURE__*/React.createElement(\"div\", {\n className: className,\n style: {\n display: 'flex'\n }\n }, prev2Label !== null && shouldShowPrevNext2Buttons && /*#__PURE__*/React.createElement(\"button\", {\n \"aria-label\": prev2AriaLabel,\n className: \"\".concat(className, \"__arrow \").concat(className, \"__prev2-button\"),\n disabled: prev2ButtonDisabled,\n onClick: onClickPrevious2,\n type: \"button\"\n }, prev2Label), prevLabel !== null && /*#__PURE__*/React.createElement(\"button\", {\n \"aria-label\": prevAriaLabel,\n className: \"\".concat(className, \"__arrow \").concat(className, \"__prev-button\"),\n disabled: prevButtonDisabled,\n onClick: onClickPrevious,\n type: \"button\"\n }, prevLabel), renderButton(), nextLabel !== null && /*#__PURE__*/React.createElement(\"button\", {\n \"aria-label\": nextAriaLabel,\n className: \"\".concat(className, \"__arrow \").concat(className, \"__next-button\"),\n disabled: nextButtonDisabled,\n onClick: onClickNext,\n type: \"button\"\n }, nextLabel), next2Label !== null && shouldShowPrevNext2Buttons && /*#__PURE__*/React.createElement(\"button\", {\n \"aria-label\": next2AriaLabel,\n className: \"\".concat(className, \"__arrow \").concat(className, \"__next2-button\"),\n disabled: next2ButtonDisabled,\n onClick: onClickNext2,\n type: \"button\"\n }, next2Label));\n}\nNavigation.propTypes = {\n activeStartDate: PropTypes.instanceOf(Date).isRequired,\n drillUp: PropTypes.func.isRequired,\n formatMonthYear: PropTypes.func,\n formatYear: PropTypes.func,\n locale: PropTypes.string,\n maxDate: PropTypes.instanceOf(Date),\n minDate: PropTypes.instanceOf(Date),\n navigationAriaLabel: PropTypes.string,\n navigationLabel: PropTypes.func,\n next2AriaLabel: PropTypes.string,\n next2Label: PropTypes.node,\n nextAriaLabel: PropTypes.string,\n nextLabel: PropTypes.node,\n prev2AriaLabel: PropTypes.string,\n prev2Label: PropTypes.node,\n prevAriaLabel: PropTypes.string,\n prevLabel: PropTypes.node,\n setActiveStartDate: PropTypes.func.isRequired,\n showDoubleView: PropTypes.bool,\n view: isView.isRequired,\n views: isViews.isRequired\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction toPercent(num) {\n return \"\".concat(num, \"%\");\n}\n\nexport default function Flex(_ref) {\n var children = _ref.children,\n className = _ref.className,\n direction = _ref.direction,\n count = _ref.count,\n offset = _ref.offset,\n style = _ref.style,\n wrap = _ref.wrap,\n otherProps = _objectWithoutProperties(_ref, [\"children\", \"className\", \"direction\", \"count\", \"offset\", \"style\", \"wrap\"]);\n\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: className,\n style: _objectSpread({\n display: 'flex',\n flexDirection: direction,\n flexWrap: wrap ? 'wrap' : 'no-wrap'\n }, style)\n }, otherProps), React.Children.map(children, function (child, index) {\n return /*#__PURE__*/React.cloneElement(child, _objectSpread(_objectSpread({}, child.props), {}, {\n style: {\n flexBasis: toPercent(100 / count),\n maxWidth: toPercent(100 / count),\n overflow: 'hidden',\n marginLeft: offset && index === 0 ? toPercent(100 * offset / count) : null\n }\n }));\n }));\n}\nFlex.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n count: PropTypes.number.isRequired,\n direction: PropTypes.string,\n offset: PropTypes.number,\n style: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])),\n wrap: PropTypes.bool\n};","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport { getRange } from './dates';\n/**\n * Returns a value no smaller than min and no larger than max.\n *\n * @param {*} value Value to return.\n * @param {*} min Minimum return value.\n * @param {*} max Maximum return value.\n */\n\nexport function between(value, min, max) {\n if (min && min > value) {\n return min;\n }\n\n if (max && max < value) {\n return max;\n }\n\n return value;\n}\nexport function isValueWithinRange(value, range) {\n return range[0] <= value && range[1] >= value;\n}\nexport function isRangeWithinRange(greaterRange, smallerRange) {\n return greaterRange[0] <= smallerRange[0] && greaterRange[1] >= smallerRange[1];\n}\nexport function doRangesOverlap(range1, range2) {\n return isValueWithinRange(range1[0], range2) || isValueWithinRange(range1[1], range2);\n}\n\nfunction getRangeClassNames(valueRange, dateRange, baseClassName) {\n var isRange = doRangesOverlap(dateRange, valueRange);\n var classes = [];\n\n if (isRange) {\n classes.push(baseClassName);\n var isRangeStart = isValueWithinRange(valueRange[0], dateRange);\n var isRangeEnd = isValueWithinRange(valueRange[1], dateRange);\n\n if (isRangeStart) {\n classes.push(\"\".concat(baseClassName, \"Start\"));\n }\n\n if (isRangeEnd) {\n classes.push(\"\".concat(baseClassName, \"End\"));\n }\n\n if (isRangeStart && isRangeEnd) {\n classes.push(\"\".concat(baseClassName, \"BothEnds\"));\n }\n }\n\n return classes;\n}\n\nexport function getTileClasses() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n value = _ref.value,\n valueType = _ref.valueType,\n date = _ref.date,\n dateType = _ref.dateType,\n hover = _ref.hover;\n\n var className = 'react-calendar__tile';\n var classes = [className];\n\n if (!date) {\n return classes;\n }\n\n if (!Array.isArray(date) && !dateType) {\n throw new Error('getTileClasses(): Unable to get tile activity classes because one or more required arguments were not passed.');\n }\n\n var now = new Date();\n var dateRange = Array.isArray(date) ? date : getRange(dateType, date);\n\n if (isValueWithinRange(now, dateRange)) {\n classes.push(\"\".concat(className, \"--now\"));\n }\n\n if (!value) {\n return classes;\n }\n\n if (!Array.isArray(value) && !valueType) {\n throw new Error('getTileClasses(): Unable to get tile activity classes because one or more required arguments were not passed.');\n }\n\n var valueRange = Array.isArray(value) ? value : getRange(valueType, value);\n\n if (isRangeWithinRange(valueRange, dateRange)) {\n classes.push(\"\".concat(className, \"--active\"));\n } else if (doRangesOverlap(valueRange, dateRange)) {\n classes.push(\"\".concat(className, \"--hasActive\"));\n }\n\n var valueRangeClassNames = getRangeClassNames(valueRange, dateRange, \"\".concat(className, \"--range\"));\n classes.push.apply(classes, _toConsumableArray(valueRangeClassNames));\n\n if (hover) {\n var hoverRange = hover > valueRange[1] ? [valueRange[1], hover] : [hover, valueRange[0]];\n var hoverRangeClassNames = getRangeClassNames(hoverRange, dateRange, \"\".concat(className, \"--hover\"));\n classes.push.apply(classes, _toConsumableArray(hoverRangeClassNames));\n }\n\n return classes;\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Flex from './Flex';\nimport { getTileClasses } from './shared/utils';\nimport { tileGroupProps } from './shared/propTypes';\nexport default function TileGroup(_ref) {\n var className = _ref.className,\n _ref$count = _ref.count,\n count = _ref$count === void 0 ? 3 : _ref$count,\n dateTransform = _ref.dateTransform,\n dateType = _ref.dateType,\n end = _ref.end,\n hover = _ref.hover,\n offset = _ref.offset,\n start = _ref.start,\n _ref$step = _ref.step,\n step = _ref$step === void 0 ? 1 : _ref$step,\n Tile = _ref.tile,\n value = _ref.value,\n valueType = _ref.valueType,\n tileProps = _objectWithoutProperties(_ref, [\"className\", \"count\", \"dateTransform\", \"dateType\", \"end\", \"hover\", \"offset\", \"start\", \"step\", \"tile\", \"value\", \"valueType\"]);\n\n var tiles = [];\n\n for (var point = start; point <= end; point += step) {\n var date = dateTransform(point);\n tiles.push( /*#__PURE__*/React.createElement(Tile, _extends({\n key: date.getTime(),\n classes: getTileClasses({\n value: value,\n valueType: valueType,\n date: date,\n dateType: dateType,\n hover: hover\n }),\n date: date,\n point: point\n }, tileProps)));\n }\n\n return /*#__PURE__*/React.createElement(Flex, {\n className: className,\n count: count,\n offset: offset,\n wrap: true\n }, tiles);\n}\nTileGroup.propTypes = _objectSpread(_objectSpread({}, tileGroupProps), {}, {\n activeStartDate: PropTypes.instanceOf(Date),\n count: PropTypes.number,\n dateTransform: PropTypes.func.isRequired,\n offset: PropTypes.number,\n step: PropTypes.number,\n tile: PropTypes.func.isRequired\n});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport mergeClassNames from 'merge-class-names';\nimport { tileProps } from './shared/propTypes';\n\nfunction getValue(nextProps, prop) {\n var activeStartDate = nextProps.activeStartDate,\n date = nextProps.date,\n view = nextProps.view;\n return typeof prop === 'function' ? prop({\n activeStartDate: activeStartDate,\n date: date,\n view: view\n }) : prop;\n}\n\nvar Tile = /*#__PURE__*/function (_Component) {\n _inherits(Tile, _Component);\n\n var _super = _createSuper(Tile);\n\n function Tile() {\n var _this;\n\n _classCallCheck(this, Tile);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {});\n\n return _this;\n }\n\n _createClass(Tile, [{\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n activeStartDate = _this$props.activeStartDate,\n children = _this$props.children,\n classes = _this$props.classes,\n date = _this$props.date,\n formatAbbr = _this$props.formatAbbr,\n locale = _this$props.locale,\n maxDate = _this$props.maxDate,\n maxDateTransform = _this$props.maxDateTransform,\n minDate = _this$props.minDate,\n minDateTransform = _this$props.minDateTransform,\n onClick = _this$props.onClick,\n onMouseOver = _this$props.onMouseOver,\n style = _this$props.style,\n tileDisabled = _this$props.tileDisabled,\n view = _this$props.view;\n var _this$state = this.state,\n tileClassName = _this$state.tileClassName,\n tileContent = _this$state.tileContent;\n return /*#__PURE__*/React.createElement(\"button\", {\n className: mergeClassNames(classes, tileClassName),\n disabled: minDate && minDateTransform(minDate) > date || maxDate && maxDateTransform(maxDate) < date || tileDisabled && tileDisabled({\n activeStartDate: activeStartDate,\n date: date,\n view: view\n }),\n onClick: onClick && function (event) {\n return onClick(date, event);\n },\n onFocus: onMouseOver && function () {\n return onMouseOver(date);\n },\n onMouseOver: onMouseOver && function () {\n return onMouseOver(date);\n },\n style: style,\n type: \"button\"\n }, formatAbbr ? /*#__PURE__*/React.createElement(\"abbr\", {\n \"aria-label\": formatAbbr(locale, date)\n }, children) : children, tileContent);\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(nextProps, prevState) {\n var tileClassName = nextProps.tileClassName,\n tileContent = nextProps.tileContent;\n var nextState = {};\n\n if (tileClassName !== prevState.tileClassNameProps) {\n nextState.tileClassName = getValue(nextProps, tileClassName);\n nextState.tileClassNameProps = tileClassName;\n }\n\n if (tileContent !== prevState.tileContentProps) {\n nextState.tileContent = getValue(nextProps, tileContent);\n nextState.tileContentProps = tileContent;\n }\n\n return nextState;\n }\n }]);\n\n return Tile;\n}(Component);\n\nexport { Tile as default };\nTile.propTypes = _objectSpread(_objectSpread({}, tileProps), {}, {\n children: PropTypes.node.isRequired,\n formatAbbr: PropTypes.func,\n maxDateTransform: PropTypes.func.isRequired,\n minDateTransform: PropTypes.func.isRequired\n});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { getDecadeStart, getDecadeEnd } from '@wojtekmaj/date-utils';\nimport Tile from '../Tile';\nimport { getDecadeLabel } from '../shared/dates';\nimport { formatYear as defaultFormatYear } from '../shared/dateFormatter';\nimport { tileProps } from '../shared/propTypes';\nvar className = 'react-calendar__century-view__decades__decade';\nexport default function Decade(_ref) {\n var classes = _ref.classes,\n _ref$formatYear = _ref.formatYear,\n formatYear = _ref$formatYear === void 0 ? defaultFormatYear : _ref$formatYear,\n otherProps = _objectWithoutProperties(_ref, [\"classes\", \"formatYear\"]);\n\n var date = otherProps.date,\n locale = otherProps.locale;\n return /*#__PURE__*/React.createElement(Tile, _extends({}, otherProps, {\n classes: [].concat(classes, className),\n maxDateTransform: getDecadeEnd,\n minDateTransform: getDecadeStart,\n view: \"century\"\n }), getDecadeLabel(locale, formatYear, date));\n}\nDecade.propTypes = _objectSpread(_objectSpread({}, tileProps), {}, {\n formatYear: PropTypes.func\n});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\nimport { getDecadeStart } from '@wojtekmaj/date-utils';\nimport TileGroup from '../TileGroup';\nimport Decade from './Decade';\nimport { getBeginOfCenturyYear } from '../shared/dates';\nimport { tileGroupProps } from '../shared/propTypes';\nexport default function Decades(props) {\n var activeStartDate = props.activeStartDate;\n var start = getBeginOfCenturyYear(activeStartDate);\n var end = start + 99;\n return /*#__PURE__*/React.createElement(TileGroup, _extends({}, props, {\n className: \"react-calendar__century-view__decades\",\n dateTransform: getDecadeStart,\n dateType: \"decade\",\n end: end,\n start: start,\n step: 10,\n tile: Decade\n }));\n}\nDecades.propTypes = _objectSpread({}, tileGroupProps);","import React from 'react';\nimport Decades from './CenturyView/Decades';\nexport default function CenturyView(props) {\n function renderDecades() {\n return /*#__PURE__*/React.createElement(Decades, props);\n }\n\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"react-calendar__century-view\"\n }, renderDecades());\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { getYearStart, getYearEnd } from '@wojtekmaj/date-utils';\nimport Tile from '../Tile';\nimport { formatYear as defaultFormatYear } from '../shared/dateFormatter';\nimport { tileProps } from '../shared/propTypes';\nvar className = 'react-calendar__decade-view__years__year';\nexport default function Year(_ref) {\n var classes = _ref.classes,\n _ref$formatYear = _ref.formatYear,\n formatYear = _ref$formatYear === void 0 ? defaultFormatYear : _ref$formatYear,\n otherProps = _objectWithoutProperties(_ref, [\"classes\", \"formatYear\"]);\n\n var date = otherProps.date,\n locale = otherProps.locale;\n return /*#__PURE__*/React.createElement(Tile, _extends({}, otherProps, {\n classes: [].concat(classes, className),\n maxDateTransform: getYearEnd,\n minDateTransform: getYearStart,\n view: \"decade\"\n }), formatYear(locale, date));\n}\nYear.propTypes = _objectSpread(_objectSpread({}, tileProps), {}, {\n formatYear: PropTypes.func\n});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\nimport TileGroup from '../TileGroup';\nimport Year from './Year';\nimport { getBeginOfDecadeYear } from '../shared/dates';\nimport { tileGroupProps } from '../shared/propTypes';\nexport default function Years(props) {\n var activeStartDate = props.activeStartDate;\n var start = getBeginOfDecadeYear(activeStartDate);\n var end = start + 9;\n return /*#__PURE__*/React.createElement(TileGroup, _extends({}, props, {\n className: \"react-calendar__decade-view__years\",\n dateTransform: function dateTransform(year) {\n var date = new Date();\n date.setFullYear(year, 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n },\n dateType: \"year\",\n end: end,\n start: start,\n tile: Year\n }));\n}\nYears.propTypes = _objectSpread({}, tileGroupProps);","import React from 'react';\nimport Years from './DecadeView/Years';\nexport default function DecadeView(props) {\n function renderYears() {\n return /*#__PURE__*/React.createElement(Years, props);\n }\n\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"react-calendar__decade-view\"\n }, renderYears());\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { getMonthStart, getMonthEnd } from '@wojtekmaj/date-utils';\nimport Tile from '../Tile';\nimport { formatMonth as defaultFormatMonth, formatMonthYear as defaultFormatMonthYear } from '../shared/dateFormatter';\nimport { tileProps } from '../shared/propTypes';\nvar className = 'react-calendar__year-view__months__month';\nexport default function Month(_ref) {\n var classes = _ref.classes,\n _ref$formatMonth = _ref.formatMonth,\n formatMonth = _ref$formatMonth === void 0 ? defaultFormatMonth : _ref$formatMonth,\n _ref$formatMonthYear = _ref.formatMonthYear,\n formatMonthYear = _ref$formatMonthYear === void 0 ? defaultFormatMonthYear : _ref$formatMonthYear,\n otherProps = _objectWithoutProperties(_ref, [\"classes\", \"formatMonth\", \"formatMonthYear\"]);\n\n var date = otherProps.date,\n locale = otherProps.locale;\n return /*#__PURE__*/React.createElement(Tile, _extends({}, otherProps, {\n classes: [].concat(classes, className),\n formatAbbr: formatMonthYear,\n maxDateTransform: getMonthEnd,\n minDateTransform: getMonthStart,\n view: \"year\"\n }), formatMonth(locale, date));\n}\nMonth.propTypes = _objectSpread(_objectSpread({}, tileProps), {}, {\n formatMonth: PropTypes.func,\n formatMonthYear: PropTypes.func\n});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { getYear } from '@wojtekmaj/date-utils';\nimport TileGroup from '../TileGroup';\nimport Month from './Month';\nimport { tileGroupProps } from '../shared/propTypes';\nexport default function Months(props) {\n var activeStartDate = props.activeStartDate;\n var start = 0;\n var end = 11;\n var year = getYear(activeStartDate);\n return /*#__PURE__*/React.createElement(TileGroup, _extends({}, props, {\n className: \"react-calendar__year-view__months\",\n dateTransform: function dateTransform(monthIndex) {\n var date = new Date();\n date.setFullYear(year, monthIndex, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n },\n dateType: \"month\",\n end: end,\n start: start,\n tile: Month\n }));\n}\nMonths.propTypes = _objectSpread(_objectSpread({}, tileGroupProps), {}, {\n locale: PropTypes.string\n});","import React from 'react';\nimport Months from './YearView/Months';\nexport default function YearView(props) {\n function renderMonths() {\n return /*#__PURE__*/React.createElement(Months, props);\n }\n\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"react-calendar__year-view\"\n }, renderMonths());\n}","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { getDate, getDayStart, getDayEnd } from '@wojtekmaj/date-utils';\nimport Tile from '../Tile';\nimport { isWeekend } from '../shared/dates';\nimport { formatLongDate as defaultFormatLongDate } from '../shared/dateFormatter';\nimport { tileProps } from '../shared/propTypes';\nvar className = 'react-calendar__month-view__days__day';\nexport default function Day(_ref) {\n var _ref$formatLongDate = _ref.formatLongDate,\n formatLongDate = _ref$formatLongDate === void 0 ? defaultFormatLongDate : _ref$formatLongDate,\n calendarType = _ref.calendarType,\n classes = _ref.classes,\n currentMonthIndex = _ref.currentMonthIndex,\n otherProps = _objectWithoutProperties(_ref, [\"formatLongDate\", \"calendarType\", \"classes\", \"currentMonthIndex\"]);\n\n var date = otherProps.date;\n return /*#__PURE__*/React.createElement(Tile, _extends({}, otherProps, {\n classes: [].concat(classes, className, isWeekend(date, calendarType) ? \"\".concat(className, \"--weekend\") : null, date.getMonth() !== currentMonthIndex ? \"\".concat(className, \"--neighboringMonth\") : null),\n formatAbbr: formatLongDate,\n maxDateTransform: getDayEnd,\n minDateTransform: getDayStart,\n view: \"month\"\n }), getDate(date));\n}\nDay.propTypes = _objectSpread(_objectSpread({}, tileProps), {}, {\n currentMonthIndex: PropTypes.number.isRequired,\n formatLongDate: PropTypes.func\n});","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { getYear, getMonth, getDaysInMonth } from '@wojtekmaj/date-utils';\nimport TileGroup from '../TileGroup';\nimport Day from './Day';\nimport { getDayOfWeek } from '../shared/dates';\nimport { isCalendarType, tileGroupProps } from '../shared/propTypes';\nexport default function Days(props) {\n var activeStartDate = props.activeStartDate,\n calendarType = props.calendarType;\n\n var showFixedNumberOfWeeks = props.showFixedNumberOfWeeks,\n showNeighboringMonth = props.showNeighboringMonth,\n otherProps = _objectWithoutProperties(props, [\"showFixedNumberOfWeeks\", \"showNeighboringMonth\"]);\n\n var year = getYear(activeStartDate);\n var monthIndex = getMonth(activeStartDate);\n var hasFixedNumberOfWeeks = showFixedNumberOfWeeks || showNeighboringMonth;\n var dayOfWeek = getDayOfWeek(activeStartDate, calendarType);\n var offset = hasFixedNumberOfWeeks ? 0 : dayOfWeek;\n /**\n * Defines on which day of the month the grid shall start. If we simply show current\n * month, we obviously start on day one, but if showNeighboringMonth is set to\n * true, we need to find the beginning of the week the first day of the month is in.\n */\n\n var start = (hasFixedNumberOfWeeks ? -dayOfWeek : 0) + 1;\n /**\n * Defines on which day of the month the grid shall end. If we simply show current\n * month, we need to stop on the last day of the month, but if showNeighboringMonth\n * is set to true, we need to find the end of the week the last day of the month is in.\n */\n\n var end = function () {\n if (showFixedNumberOfWeeks) {\n // Always show 6 weeks\n return start + 6 * 7 - 1;\n }\n\n var daysInMonth = getDaysInMonth(activeStartDate);\n\n if (showNeighboringMonth) {\n var activeEndDate = new Date();\n activeEndDate.setFullYear(year, monthIndex, daysInMonth);\n activeEndDate.setHours(0, 0, 0, 0);\n var daysUntilEndOfTheWeek = 7 - getDayOfWeek(activeEndDate, calendarType) - 1;\n return daysInMonth + daysUntilEndOfTheWeek;\n }\n\n return daysInMonth;\n }();\n\n return /*#__PURE__*/React.createElement(TileGroup, _extends({}, otherProps, {\n className: \"react-calendar__month-view__days\",\n count: 7,\n currentMonthIndex: monthIndex,\n dateTransform: function dateTransform(day) {\n var date = new Date();\n date.setFullYear(year, monthIndex, day);\n date.setHours(0, 0, 0, 0);\n return date;\n },\n dateType: \"day\",\n end: end,\n offset: offset,\n start: start,\n tile: Day\n }));\n}\nDays.propTypes = _objectSpread({\n calendarType: isCalendarType.isRequired,\n showFixedNumberOfWeeks: PropTypes.bool,\n showNeighboringMonth: PropTypes.bool\n}, tileGroupProps);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { getYear, getMonth, getMonthStart } from '@wojtekmaj/date-utils';\nimport Flex from '../Flex';\nimport { getDayOfWeek } from '../shared/dates';\nimport { formatWeekday, formatShortWeekday as defaultFormatShortWeekday } from '../shared/dateFormatter';\nimport { isCalendarType } from '../shared/propTypes';\nvar className = 'react-calendar__month-view__weekdays';\nexport default function Weekdays(props) {\n var calendarType = props.calendarType,\n _props$formatShortWee = props.formatShortWeekday,\n formatShortWeekday = _props$formatShortWee === void 0 ? defaultFormatShortWeekday : _props$formatShortWee,\n locale = props.locale,\n onMouseLeave = props.onMouseLeave;\n var anyDate = new Date();\n var beginOfMonth = getMonthStart(anyDate);\n var year = getYear(beginOfMonth);\n var monthIndex = getMonth(beginOfMonth);\n var weekdays = [];\n\n for (var weekday = 1; weekday <= 7; weekday += 1) {\n var weekdayDate = new Date(year, monthIndex, weekday - getDayOfWeek(beginOfMonth, calendarType));\n var abbr = formatWeekday(locale, weekdayDate);\n weekdays.push( /*#__PURE__*/React.createElement(\"div\", {\n key: weekday,\n className: \"\".concat(className, \"__weekday\")\n }, /*#__PURE__*/React.createElement(\"abbr\", {\n \"aria-label\": abbr,\n title: abbr\n }, formatShortWeekday(locale, weekdayDate).replace('.', ''))));\n }\n\n return /*#__PURE__*/React.createElement(Flex, {\n className: className,\n count: 7,\n onFocus: onMouseLeave,\n onMouseOver: onMouseLeave\n }, weekdays);\n}\nWeekdays.propTypes = {\n calendarType: isCalendarType.isRequired,\n formatShortWeekday: PropTypes.func,\n locale: PropTypes.string,\n onMouseLeave: PropTypes.func\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nexport default function WeekNumber(_ref) {\n var date = _ref.date,\n onClickWeekNumber = _ref.onClickWeekNumber,\n weekNumber = _ref.weekNumber;\n var props = {\n className: 'react-calendar__tile',\n style: {\n flexGrow: 1\n }\n };\n var children = /*#__PURE__*/React.createElement(\"span\", null, weekNumber);\n return onClickWeekNumber ? /*#__PURE__*/React.createElement(\"button\", _extends({}, props, {\n onClick: function onClick(event) {\n return onClickWeekNumber(weekNumber, date, event);\n },\n type: \"button\"\n }), children) : /*#__PURE__*/React.createElement(\"div\", props, children);\n}\nWeekNumber.propTypes = {\n date: PropTypes.instanceOf(Date).isRequired,\n onClickWeekNumber: PropTypes.func,\n weekNumber: PropTypes.node.isRequired\n};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { getYear, getMonth, getDate, getDaysInMonth } from '@wojtekmaj/date-utils';\nimport WeekNumber from './WeekNumber';\nimport Flex from '../Flex';\nimport { getBeginOfWeek, getDayOfWeek, getWeekNumber } from '../shared/dates';\nimport { isCalendarType } from '../shared/propTypes';\nexport default function WeekNumbers(props) {\n var activeStartDate = props.activeStartDate,\n calendarType = props.calendarType,\n onClickWeekNumber = props.onClickWeekNumber,\n onMouseLeave = props.onMouseLeave,\n showFixedNumberOfWeeks = props.showFixedNumberOfWeeks;\n\n var numberOfWeeks = function () {\n if (showFixedNumberOfWeeks) {\n return 6;\n }\n\n var numberOfDays = getDaysInMonth(activeStartDate);\n var startWeekday = getDayOfWeek(activeStartDate, calendarType);\n var days = numberOfDays - (7 - startWeekday);\n return 1 + Math.ceil(days / 7);\n }();\n\n var dates = function () {\n var year = getYear(activeStartDate);\n var monthIndex = getMonth(activeStartDate);\n var day = getDate(activeStartDate);\n var result = [];\n\n for (var index = 0; index < numberOfWeeks; index += 1) {\n result.push(getBeginOfWeek(new Date(year, monthIndex, day + index * 7), calendarType));\n }\n\n return result;\n }();\n\n var weekNumbers = dates.map(function (date) {\n return getWeekNumber(date, calendarType);\n });\n return /*#__PURE__*/React.createElement(Flex, {\n className: \"react-calendar__month-view__weekNumbers\",\n count: numberOfWeeks,\n direction: \"column\",\n onFocus: onMouseLeave,\n onMouseOver: onMouseLeave,\n style: {\n flexBasis: 'calc(100% * (1 / 8)',\n flexShrink: 0\n }\n }, weekNumbers.map(function (weekNumber, weekIndex) {\n return /*#__PURE__*/React.createElement(WeekNumber, {\n key: weekNumber,\n date: dates[weekIndex],\n onClickWeekNumber: onClickWeekNumber,\n weekNumber: weekNumber\n });\n }));\n}\nWeekNumbers.propTypes = {\n activeStartDate: PropTypes.instanceOf(Date).isRequired,\n calendarType: isCalendarType.isRequired,\n onClickWeekNumber: PropTypes.func,\n onMouseLeave: PropTypes.func,\n showFixedNumberOfWeeks: PropTypes.bool\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Days from './MonthView/Days';\nimport Weekdays from './MonthView/Weekdays';\nimport WeekNumbers from './MonthView/WeekNumbers';\nimport { CALENDAR_TYPES, CALENDAR_TYPE_LOCALES } from './shared/const';\nimport { isCalendarType } from './shared/propTypes';\n\nfunction getCalendarTypeFromLocale(locale) {\n return Object.keys(CALENDAR_TYPE_LOCALES).find(function (calendarType) {\n return CALENDAR_TYPE_LOCALES[calendarType].includes(locale);\n }) || CALENDAR_TYPES.ISO_8601;\n}\n\nexport default function MonthView(props) {\n var activeStartDate = props.activeStartDate,\n locale = props.locale,\n onMouseLeave = props.onMouseLeave,\n showFixedNumberOfWeeks = props.showFixedNumberOfWeeks;\n\n var _props$calendarType = props.calendarType,\n calendarType = _props$calendarType === void 0 ? getCalendarTypeFromLocale(locale) : _props$calendarType,\n formatShortWeekday = props.formatShortWeekday,\n onClickWeekNumber = props.onClickWeekNumber,\n showWeekNumbers = props.showWeekNumbers,\n childProps = _objectWithoutProperties(props, [\"calendarType\", \"formatShortWeekday\", \"onClickWeekNumber\", \"showWeekNumbers\"]);\n\n function renderWeekdays() {\n return /*#__PURE__*/React.createElement(Weekdays, {\n calendarType: calendarType,\n formatShortWeekday: formatShortWeekday,\n locale: locale,\n onMouseLeave: onMouseLeave\n });\n }\n\n function renderWeekNumbers() {\n if (!showWeekNumbers) {\n return null;\n }\n\n return /*#__PURE__*/React.createElement(WeekNumbers, {\n activeStartDate: activeStartDate,\n calendarType: calendarType,\n onClickWeekNumber: onClickWeekNumber,\n onMouseLeave: onMouseLeave,\n showFixedNumberOfWeeks: showFixedNumberOfWeeks\n });\n }\n\n function renderDays() {\n return /*#__PURE__*/React.createElement(Days, _extends({\n calendarType: calendarType\n }, childProps));\n }\n\n var className = 'react-calendar__month-view';\n return /*#__PURE__*/React.createElement(\"div\", {\n className: [className, showWeekNumbers ? \"\".concat(className, \"--weekNumbers\") : ''].join(' ')\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'flex',\n alignItems: 'flex-end'\n }\n }, renderWeekNumbers(), /*#__PURE__*/React.createElement(\"div\", {\n style: {\n flexGrow: 1,\n width: '100%'\n }\n }, renderWeekdays(), renderDays())));\n}\nMonthView.propTypes = {\n activeStartDate: PropTypes.instanceOf(Date).isRequired,\n calendarType: isCalendarType,\n formatShortWeekday: PropTypes.func,\n locale: PropTypes.string,\n onClickWeekNumber: PropTypes.func,\n onMouseLeave: PropTypes.func,\n showFixedNumberOfWeeks: PropTypes.bool,\n showWeekNumbers: PropTypes.bool\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport mergeClassNames from 'merge-class-names';\nimport Navigation from './Calendar/Navigation';\nimport CenturyView from './CenturyView';\nimport DecadeView from './DecadeView';\nimport YearView from './YearView';\nimport MonthView from './MonthView';\nimport { getBegin, getBeginNext, getEnd, getValueRange } from './shared/dates';\nimport { isCalendarType, isClassName, isMaxDate, isMinDate, isRef, isValue, isView } from './shared/propTypes';\nimport { between } from './shared/utils';\nvar defaultMinDate = new Date();\ndefaultMinDate.setFullYear(1, 0, 1);\ndefaultMinDate.setHours(0, 0, 0, 0);\nvar defaultMaxDate = new Date(8.64e15);\nvar baseClassName = 'react-calendar';\nvar allViews = ['century', 'decade', 'year', 'month'];\nvar allValueTypes = [].concat(_toConsumableArray(allViews.slice(1)), ['day']);\n\nfunction toDate(value) {\n if (value instanceof Date) {\n return value;\n }\n\n return new Date(value);\n}\n/**\n * Returns views array with disallowed values cut off.\n */\n\n\nfunction getLimitedViews(minDetail, maxDetail) {\n return allViews.slice(allViews.indexOf(minDetail), allViews.indexOf(maxDetail) + 1);\n}\n/**\n * Determines whether a given view is allowed with currently applied settings.\n */\n\n\nfunction isViewAllowed(view, minDetail, maxDetail) {\n var views = getLimitedViews(minDetail, maxDetail);\n return views.indexOf(view) !== -1;\n}\n/**\n * Gets either provided view if allowed by minDetail and maxDetail, or gets\n * the default view if not allowed.\n */\n\n\nfunction getView(view, minDetail, maxDetail) {\n if (isViewAllowed(view, minDetail, maxDetail)) {\n return view;\n }\n\n return maxDetail;\n}\n/**\n * Returns value type that can be returned with currently applied settings.\n */\n\n\nfunction getValueType(maxDetail) {\n return allValueTypes[allViews.indexOf(maxDetail)];\n}\n\nfunction getValue(value, index) {\n if (!value) {\n return null;\n }\n\n var rawValue = Array.isArray(value) && value.length === 2 ? value[index] : value;\n\n if (!rawValue) {\n return null;\n }\n\n var valueDate = toDate(rawValue);\n\n if (isNaN(valueDate.getTime())) {\n throw new Error(\"Invalid date: \".concat(value));\n }\n\n return valueDate;\n}\n\nfunction getDetailValue(_ref, index) {\n var value = _ref.value,\n minDate = _ref.minDate,\n maxDate = _ref.maxDate,\n maxDetail = _ref.maxDetail;\n var valuePiece = getValue(value, index);\n\n if (!valuePiece) {\n return null;\n }\n\n var valueType = getValueType(maxDetail);\n var detailValueFrom = [getBegin, getEnd][index](valueType, valuePiece);\n return between(detailValueFrom, minDate, maxDate);\n}\n\nvar getDetailValueFrom = function getDetailValueFrom(args) {\n return getDetailValue(args, 0);\n};\n\nvar getDetailValueTo = function getDetailValueTo(args) {\n return getDetailValue(args, 1);\n};\n\nvar getDetailValueArray = function getDetailValueArray(args) {\n var value = args.value;\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return [getDetailValueFrom, getDetailValueTo].map(function (fn) {\n return fn(args);\n });\n};\n\nfunction getActiveStartDate(props) {\n var maxDate = props.maxDate,\n maxDetail = props.maxDetail,\n minDate = props.minDate,\n minDetail = props.minDetail,\n value = props.value,\n view = props.view;\n var rangeType = getView(view, minDetail, maxDetail);\n var valueFrom = getDetailValueFrom({\n value: value,\n minDate: minDate,\n maxDate: maxDate,\n maxDetail: maxDetail\n }) || new Date();\n return getBegin(rangeType, valueFrom);\n}\n\nfunction getInitialActiveStartDate(props) {\n var activeStartDate = props.activeStartDate,\n defaultActiveStartDate = props.defaultActiveStartDate,\n defaultValue = props.defaultValue,\n defaultView = props.defaultView,\n maxDetail = props.maxDetail,\n minDetail = props.minDetail,\n value = props.value,\n view = props.view,\n otherProps = _objectWithoutProperties(props, [\"activeStartDate\", \"defaultActiveStartDate\", \"defaultValue\", \"defaultView\", \"maxDetail\", \"minDetail\", \"value\", \"view\"]);\n\n var rangeType = getView(view, minDetail, maxDetail);\n var valueFrom = activeStartDate || defaultActiveStartDate;\n\n if (valueFrom) {\n return getBegin(rangeType, valueFrom);\n }\n\n return getActiveStartDate(_objectSpread({\n maxDetail: maxDetail,\n minDetail: minDetail,\n value: value || defaultValue,\n view: view || defaultView\n }, otherProps));\n}\n\nvar getIsSingleValue = function getIsSingleValue(value) {\n return value && [].concat(value).length === 1;\n};\n\nvar Calendar = /*#__PURE__*/function (_Component) {\n _inherits(Calendar, _Component);\n\n var _super = _createSuper(Calendar);\n\n function Calendar() {\n var _this;\n\n _classCallCheck(this, Calendar);\n\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(_args));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n /* eslint-disable react/destructuring-assignment */\n activeStartDate: _this.props.defaultActiveStartDate,\n value: _this.props.defaultValue,\n view: _this.props.defaultView\n /* eslint-enable react/destructuring-assignment */\n\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setStateAndCallCallbacks\", function (nextState, event, callback) {\n var _assertThisInitialize = _assertThisInitialized(_this),\n previousActiveStartDate = _assertThisInitialize.activeStartDate,\n previousView = _assertThisInitialize.view;\n\n var _this$props = _this.props,\n allowPartialRange = _this$props.allowPartialRange,\n onActiveStartDateChange = _this$props.onActiveStartDateChange,\n onChange = _this$props.onChange,\n onViewChange = _this$props.onViewChange,\n selectRange = _this$props.selectRange;\n var prevArgs = {\n activeStartDate: previousActiveStartDate,\n view: previousView\n };\n\n _this.setState(nextState, function () {\n var args = {\n activeStartDate: nextState.activeStartDate || _this.activeStartDate,\n value: nextState.value || _this.value,\n view: nextState.view || _this.view\n };\n\n function shouldUpdate(key) {\n return (// Key must exist, and…\n key in nextState && ( // …key changed from undefined to defined or the other way around, or…\n _typeof(nextState[key]) !== _typeof(prevArgs[key]) // …value changed.\n || (nextState[key] instanceof Date ? nextState[key].getTime() !== prevArgs[key].getTime() : nextState[key] !== prevArgs[key]))\n );\n }\n\n if (shouldUpdate('activeStartDate')) {\n if (onActiveStartDateChange) onActiveStartDateChange(args);\n }\n\n if (shouldUpdate('view')) {\n if (onViewChange) onViewChange(args);\n }\n\n if (shouldUpdate('value')) {\n if (onChange) {\n if (selectRange) {\n var isSingleValue = getIsSingleValue(nextState.value);\n\n if (!isSingleValue) {\n onChange(nextState.value, event);\n } else if (allowPartialRange) {\n onChange([nextState.value], event);\n }\n } else {\n onChange(nextState.value, event);\n }\n }\n }\n\n if (callback) callback(args);\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setActiveStartDate\", function (activeStartDate) {\n _this.setStateAndCallCallbacks({\n activeStartDate: activeStartDate\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"drillDown\", function (nextActiveStartDate, event) {\n if (!_this.drillDownAvailable) {\n return;\n }\n\n _this.onClickTile(nextActiveStartDate, event);\n\n var _assertThisInitialize2 = _assertThisInitialized(_this),\n view = _assertThisInitialize2.view,\n views = _assertThisInitialize2.views;\n\n var onDrillDown = _this.props.onDrillDown;\n var nextView = views[views.indexOf(view) + 1];\n\n _this.setStateAndCallCallbacks({\n activeStartDate: nextActiveStartDate,\n view: nextView\n }, undefined, onDrillDown);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"drillUp\", function () {\n if (!_this.drillUpAvailable) {\n return;\n }\n\n var _assertThisInitialize3 = _assertThisInitialized(_this),\n activeStartDate = _assertThisInitialize3.activeStartDate,\n view = _assertThisInitialize3.view,\n views = _assertThisInitialize3.views;\n\n var onDrillUp = _this.props.onDrillUp;\n var nextView = views[views.indexOf(view) - 1];\n var nextActiveStartDate = getBegin(nextView, activeStartDate);\n\n _this.setStateAndCallCallbacks({\n activeStartDate: nextActiveStartDate,\n view: nextView\n }, undefined, onDrillUp);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onChange\", function (value, event) {\n var selectRange = _this.props.selectRange;\n\n _this.onClickTile(value, event);\n\n var nextValue;\n\n if (selectRange) {\n // Range selection turned on\n var _assertThisInitialize4 = _assertThisInitialized(_this),\n previousValue = _assertThisInitialize4.value,\n valueType = _assertThisInitialize4.valueType;\n\n if (!getIsSingleValue(previousValue)) {\n // Value has 0 or 2 elements - either way we're starting a new array\n // First value\n nextValue = getBegin(valueType, value);\n } else {\n // Second value\n nextValue = getValueRange(valueType, previousValue, value);\n }\n } else {\n // Range selection turned off\n nextValue = _this.getProcessedValue(value);\n }\n\n var nextActiveStartDate = getActiveStartDate(_objectSpread(_objectSpread({}, _this.props), {}, {\n value: nextValue\n }));\n event.persist();\n\n _this.setStateAndCallCallbacks({\n activeStartDate: nextActiveStartDate,\n value: nextValue\n }, event);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onClickTile\", function (value, event) {\n var _assertThisInitialize5 = _assertThisInitialized(_this),\n view = _assertThisInitialize5.view;\n\n var _this$props2 = _this.props,\n onClickDay = _this$props2.onClickDay,\n onClickDecade = _this$props2.onClickDecade,\n onClickMonth = _this$props2.onClickMonth,\n onClickYear = _this$props2.onClickYear;\n\n var callback = function () {\n switch (view) {\n case 'century':\n return onClickDecade;\n\n case 'decade':\n return onClickYear;\n\n case 'year':\n return onClickMonth;\n\n case 'month':\n return onClickDay;\n\n default:\n throw new Error(\"Invalid view: \".concat(view, \".\"));\n }\n }();\n\n if (callback) callback(value, event);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onMouseOver\", function (value) {\n _this.setState(function (prevState) {\n if (prevState.hover && prevState.hover.getTime() === value.getTime()) {\n return null;\n }\n\n return {\n hover: value\n };\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onMouseLeave\", function () {\n _this.setState({\n hover: null\n });\n });\n\n return _this;\n }\n\n _createClass(Calendar, [{\n key: \"getProcessedValue\",\n\n /**\n * Gets current value in a desired format.\n */\n value: function getProcessedValue(value) {\n var _this$props3 = this.props,\n minDate = _this$props3.minDate,\n maxDate = _this$props3.maxDate,\n maxDetail = _this$props3.maxDetail,\n returnValue = _this$props3.returnValue;\n\n var processFunction = function () {\n switch (returnValue) {\n case 'start':\n return getDetailValueFrom;\n\n case 'end':\n return getDetailValueTo;\n\n case 'range':\n return getDetailValueArray;\n\n default:\n throw new Error('Invalid returnValue.');\n }\n }();\n\n return processFunction({\n value: value,\n minDate: minDate,\n maxDate: maxDate,\n maxDetail: maxDetail\n });\n }\n }, {\n key: \"renderContent\",\n value: function renderContent(next) {\n var currentActiveStartDate = this.activeStartDate,\n onMouseOver = this.onMouseOver,\n valueType = this.valueType,\n value = this.value,\n view = this.view;\n var _this$props4 = this.props,\n calendarType = _this$props4.calendarType,\n locale = _this$props4.locale,\n maxDate = _this$props4.maxDate,\n minDate = _this$props4.minDate,\n selectRange = _this$props4.selectRange,\n tileClassName = _this$props4.tileClassName,\n tileContent = _this$props4.tileContent,\n tileDisabled = _this$props4.tileDisabled;\n var hover = this.hover;\n var activeStartDate = next ? getBeginNext(view, currentActiveStartDate) : getBegin(view, currentActiveStartDate);\n var onClick = this.drillDownAvailable ? this.drillDown : this.onChange;\n var commonProps = {\n activeStartDate: activeStartDate,\n hover: hover,\n locale: locale,\n maxDate: maxDate,\n minDate: minDate,\n onClick: onClick,\n onMouseOver: selectRange ? onMouseOver : null,\n tileClassName: tileClassName,\n tileContent: tileContent,\n tileDisabled: tileDisabled,\n value: value,\n valueType: valueType\n };\n\n switch (view) {\n case 'century':\n {\n var formatYear = this.props.formatYear;\n return /*#__PURE__*/React.createElement(CenturyView, _extends({\n formatYear: formatYear\n }, commonProps));\n }\n\n case 'decade':\n {\n var _formatYear = this.props.formatYear;\n return /*#__PURE__*/React.createElement(DecadeView, _extends({\n formatYear: _formatYear\n }, commonProps));\n }\n\n case 'year':\n {\n var _this$props5 = this.props,\n formatMonth = _this$props5.formatMonth,\n formatMonthYear = _this$props5.formatMonthYear;\n return /*#__PURE__*/React.createElement(YearView, _extends({\n formatMonth: formatMonth,\n formatMonthYear: formatMonthYear\n }, commonProps));\n }\n\n case 'month':\n {\n var _this$props6 = this.props,\n formatLongDate = _this$props6.formatLongDate,\n formatShortWeekday = _this$props6.formatShortWeekday,\n onClickWeekNumber = _this$props6.onClickWeekNumber,\n showDoubleView = _this$props6.showDoubleView,\n showFixedNumberOfWeeks = _this$props6.showFixedNumberOfWeeks,\n showNeighboringMonth = _this$props6.showNeighboringMonth,\n showWeekNumbers = _this$props6.showWeekNumbers;\n var onMouseLeave = this.onMouseLeave;\n return /*#__PURE__*/React.createElement(MonthView, _extends({\n calendarType: calendarType,\n formatLongDate: formatLongDate,\n formatShortWeekday: formatShortWeekday,\n onClickWeekNumber: onClickWeekNumber,\n onMouseLeave: selectRange ? onMouseLeave : null,\n showFixedNumberOfWeeks: showFixedNumberOfWeeks || showDoubleView,\n showNeighboringMonth: showNeighboringMonth,\n showWeekNumbers: showWeekNumbers\n }, commonProps));\n }\n\n default:\n throw new Error(\"Invalid view: \".concat(view, \".\"));\n }\n }\n }, {\n key: \"renderNavigation\",\n value: function renderNavigation() {\n var showNavigation = this.props.showNavigation;\n\n if (!showNavigation) {\n return null;\n }\n\n var activeStartDate = this.activeStartDate,\n view = this.view,\n views = this.views;\n var _this$props7 = this.props,\n formatMonthYear = _this$props7.formatMonthYear,\n formatYear = _this$props7.formatYear,\n locale = _this$props7.locale,\n maxDate = _this$props7.maxDate,\n minDate = _this$props7.minDate,\n navigationAriaLabel = _this$props7.navigationAriaLabel,\n navigationLabel = _this$props7.navigationLabel,\n next2AriaLabel = _this$props7.next2AriaLabel,\n next2Label = _this$props7.next2Label,\n nextAriaLabel = _this$props7.nextAriaLabel,\n nextLabel = _this$props7.nextLabel,\n prev2AriaLabel = _this$props7.prev2AriaLabel,\n prev2Label = _this$props7.prev2Label,\n prevAriaLabel = _this$props7.prevAriaLabel,\n prevLabel = _this$props7.prevLabel,\n showDoubleView = _this$props7.showDoubleView;\n return /*#__PURE__*/React.createElement(Navigation, {\n activeStartDate: activeStartDate,\n drillUp: this.drillUp,\n formatMonthYear: formatMonthYear,\n formatYear: formatYear,\n locale: locale,\n maxDate: maxDate,\n minDate: minDate,\n navigationAriaLabel: navigationAriaLabel,\n navigationLabel: navigationLabel,\n next2AriaLabel: next2AriaLabel,\n next2Label: next2Label,\n nextAriaLabel: nextAriaLabel,\n nextLabel: nextLabel,\n prev2AriaLabel: prev2AriaLabel,\n prev2Label: prev2Label,\n prevAriaLabel: prevAriaLabel,\n prevLabel: prevLabel,\n setActiveStartDate: this.setActiveStartDate,\n showDoubleView: showDoubleView,\n view: view,\n views: views\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props8 = this.props,\n className = _this$props8.className,\n inputRef = _this$props8.inputRef,\n selectRange = _this$props8.selectRange,\n showDoubleView = _this$props8.showDoubleView;\n var onMouseLeave = this.onMouseLeave,\n value = this.value;\n var valueArray = [].concat(value);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: mergeClassNames(baseClassName, selectRange && valueArray.length === 1 && \"\".concat(baseClassName, \"--selectRange\"), showDoubleView && \"\".concat(baseClassName, \"--doubleView\"), className),\n ref: inputRef\n }, this.renderNavigation(), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(baseClassName, \"__viewContainer\"),\n onBlur: selectRange ? onMouseLeave : null,\n onMouseLeave: selectRange ? onMouseLeave : null\n }, this.renderContent(), showDoubleView && this.renderContent(true)));\n }\n }, {\n key: \"activeStartDate\",\n get: function get() {\n var activeStartDateProps = this.props.activeStartDate;\n var activeStartDateState = this.state.activeStartDate;\n return activeStartDateProps || activeStartDateState || getInitialActiveStartDate(this.props);\n }\n }, {\n key: \"value\",\n get: function get() {\n var _this$props9 = this.props,\n selectRange = _this$props9.selectRange,\n valueProps = _this$props9.value;\n var valueState = this.state.value; // In the middle of range selection, use value from state\n\n if (selectRange && getIsSingleValue(valueState)) {\n return valueState;\n }\n\n return valueProps !== undefined ? valueProps : valueState;\n }\n }, {\n key: \"valueType\",\n get: function get() {\n var maxDetail = this.props.maxDetail;\n return getValueType(maxDetail);\n }\n }, {\n key: \"view\",\n get: function get() {\n var _this$props10 = this.props,\n minDetail = _this$props10.minDetail,\n maxDetail = _this$props10.maxDetail,\n viewProps = _this$props10.view;\n var viewState = this.state.view;\n return getView(viewProps || viewState, minDetail, maxDetail);\n }\n }, {\n key: \"views\",\n get: function get() {\n var _this$props11 = this.props,\n minDetail = _this$props11.minDetail,\n maxDetail = _this$props11.maxDetail;\n return getLimitedViews(minDetail, maxDetail);\n }\n }, {\n key: \"hover\",\n get: function get() {\n var selectRange = this.props.selectRange;\n var hover = this.state.hover;\n return selectRange ? hover : null;\n }\n }, {\n key: \"drillDownAvailable\",\n get: function get() {\n var view = this.view,\n views = this.views;\n return views.indexOf(view) < views.length - 1;\n }\n }, {\n key: \"drillUpAvailable\",\n get: function get() {\n var view = this.view,\n views = this.views;\n return views.indexOf(view) > 0;\n }\n }]);\n\n return Calendar;\n}(Component);\n\nexport { Calendar as default };\nCalendar.defaultProps = {\n maxDate: defaultMaxDate,\n maxDetail: 'month',\n minDate: defaultMinDate,\n minDetail: 'century',\n returnValue: 'start',\n showNavigation: true,\n showNeighboringMonth: true\n};\nvar isActiveStartDate = PropTypes.instanceOf(Date);\nvar isLooseValue = PropTypes.oneOfType([PropTypes.string, isValue]);\nCalendar.propTypes = {\n activeStartDate: isActiveStartDate,\n allowPartialRange: PropTypes.bool,\n calendarType: isCalendarType,\n className: isClassName,\n defaultActiveStartDate: isActiveStartDate,\n defaultValue: isLooseValue,\n defaultView: isView,\n formatLongDate: PropTypes.func,\n formatMonth: PropTypes.func,\n formatMonthYear: PropTypes.func,\n formatShortWeekday: PropTypes.func,\n formatYear: PropTypes.func,\n inputRef: isRef,\n locale: PropTypes.string,\n maxDate: isMaxDate,\n maxDetail: PropTypes.oneOf(allViews),\n minDate: isMinDate,\n minDetail: PropTypes.oneOf(allViews),\n navigationAriaLabel: PropTypes.string,\n navigationLabel: PropTypes.func,\n next2AriaLabel: PropTypes.string,\n next2Label: PropTypes.node,\n nextAriaLabel: PropTypes.string,\n nextLabel: PropTypes.node,\n onActiveStartDateChange: PropTypes.func,\n onChange: PropTypes.func,\n onClickDay: PropTypes.func,\n onClickDecade: PropTypes.func,\n onClickMonth: PropTypes.func,\n onClickWeekNumber: PropTypes.func,\n onClickYear: PropTypes.func,\n onDrillDown: PropTypes.func,\n onDrillUp: PropTypes.func,\n onViewChange: PropTypes.func,\n prev2AriaLabel: PropTypes.string,\n prev2Label: PropTypes.node,\n prevAriaLabel: PropTypes.string,\n prevLabel: PropTypes.node,\n returnValue: PropTypes.oneOf(['start', 'end', 'range']),\n selectRange: PropTypes.bool,\n showDoubleView: PropTypes.bool,\n showFixedNumberOfWeeks: PropTypes.bool,\n showNavigation: PropTypes.bool,\n showNeighboringMonth: PropTypes.bool,\n showWeekNumbers: PropTypes.bool,\n tileClassName: PropTypes.oneOfType([PropTypes.func, isClassName]),\n tileContent: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n tileDisabled: PropTypes.func,\n value: isLooseValue,\n view: isView\n};","import Calendar from './Calendar';\nimport CenturyView from './CenturyView';\nimport DecadeView from './DecadeView';\nimport YearView from './YearView';\nimport MonthView from './MonthView';\nexport default Calendar;\nexport { Calendar, CenturyView, DecadeView, YearView, MonthView };","import { DateTime } from 'luxon';\nimport React from 'react';\nimport Calendar from 'react-calendar';\nimport { noop } from '../../../helpers/utils';\nimport { IconName, Icons } from '../../Icons';\nimport './Calendar.scss';\nimport classes from './DatePicker.scss';\n\nexport interface DatePickerProps {\n /** Current Value */\n value: DateTime;\n\n /** Callback when a new value is selected */\n onSelected?: (value: DateTime) => void;\n}\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n value,\n onSelected = noop,\n}) => {\n return (\n <Calendar\n onChange={(value) => {\n onSelected(DateTime.fromJSDate(value as Date));\n }}\n value={value.toJSDate()}\n className={classes.calendar}\n locale={navigator.language}\n nextLabel={<Icons icon={IconName.ChevronRight} />}\n prevLabel={<Icons icon={IconName.ChevronLeft} />}\n formatShortWeekday={(locale, date) =>\n Intl.DateTimeFormat(locale, { weekday: 'short' })\n .format(date)\n .slice(0, 2)\n }\n />\n );\n};\n","import clsx from 'clsx';\nimport React, { PropsWithChildren } from 'react';\nimport { noop } from '../../../../helpers/utils';\nimport { IconName, Icons } from '../../../Icons';\nimport classes from './ScrollColumn.scss';\n\nexport interface ScrollColumnProps<T> {\n /** Array of options to select from */\n items: T[];\n\n /** Currently selected item */\n selectedItem: T;\n\n /** Custom render function for label */\n render?: (item: T) => string;\n\n /** Callback triggered when an item is selected */\n onSelected?: (item: T) => void;\n\n /** Height of individual item */\n itemHeight?: number;\n\n /** Number of items to display when expanded */\n displayItemCount?: number;\n\n /** Show or hide options */\n isActive?: boolean;\n\n /** Optional subtitle to display when options are hidden */\n inActiveTitle?: string;\n}\n\nexport const ScrollColumn = <T,>({\n items,\n selectedItem,\n onSelected = noop,\n itemHeight = 35,\n displayItemCount = 5,\n render,\n isActive = false,\n inActiveTitle,\n}: PropsWithChildren<ScrollColumnProps<T>>): JSX.Element => {\n const columnHeight = itemHeight * displayItemCount + displayItemCount - 1;\n const selectedIndex = items.indexOf(selectedItem);\n const scrollerTranslate =\n columnHeight / 2 - itemHeight / 2 - selectedIndex * (itemHeight + 1);\n\n const containerStyles: React.CSSProperties = {\n height: `${columnHeight}px`,\n };\n\n const scrollerStyles: React.CSSProperties = {\n transform: `translate(0, ${scrollerTranslate}px)`,\n };\n\n return (\n <div className={classes.container}>\n <button\n className={clsx(classes.button, !isActive && classes.hidden)}\n onClick={(e) => {\n e.preventDefault();\n onSelected(selectedIndex > 0 ? items[selectedIndex - 1] : items[0]);\n }}\n >\n <Icons icon={IconName.ChevronUp} className={classes.icon} />\n </button>\n <div className={classes['scroll-container']} style={containerStyles}>\n {isActive ? (\n <div className={classes.scroller} style={scrollerStyles}>\n {items.map((item, key) => {\n return (\n <button\n key={key}\n className={clsx(\n classes.item,\n selectedItem === item && classes.selected,\n isActive && classes.active,\n )}\n style={{ height: `${itemHeight}px` }}\n onClick={(e) => {\n e.preventDefault();\n onSelected(item);\n }}\n >\n {render ? render(item) : item}\n </button>\n );\n })}\n </div>\n ) : (\n <div\n style={{\n display: 'grid',\n gridGap: '1px',\n }}\n >\n <div\n style={{\n gridRowStart: 1,\n gridRowEnd: Math.floor(displayItemCount / 2) - 1,\n height: `${itemHeight}px`,\n }}\n ></div>\n <div\n className={classes['inactive-title']}\n style={{ height: `${itemHeight}px` }}\n >\n {inActiveTitle}\n </div>\n <div\n className={clsx(classes.item, classes.selected)}\n style={{ height: `${itemHeight}px` }}\n onClick={() => onSelected(selectedItem)}\n >\n {render ? render(selectedItem) : selectedItem}\n </div>\n </div>\n )}\n </div>\n <button\n className={clsx(classes.button, !isActive && classes.hidden)}\n onClick={(e) => {\n e.preventDefault();\n onSelected(\n selectedIndex < items.length - 1\n ? items[selectedIndex + 1]\n : items[items.length - 1],\n );\n }}\n >\n <Icons icon={IconName.ChevronDown} className={classes.icon} />\n </button>\n </div>\n );\n};\n","import { DateTime } from 'luxon';\nimport React, { useState } from 'react';\nimport { noop } from '../../../helpers/utils';\nimport { ScrollColumn } from './ScrollColumn/ScrollColumn';\nimport classes from './TimePicker.scss';\n\nexport interface TimePickerProps {\n /** Current value */\n value: DateTime;\n\n /** Whether seconds column should be shown. (Default: false) */\n showSeconds?: boolean;\n\n /** Whether the time picker should be showin in 12 hour format or 24 hour format. (Default: false) */\n hours12?: boolean;\n\n /** Callback triggered when a new value is selected */\n onSelected?: (value: DateTime) => void;\n}\n\nenum ActiveSelector {\n Hours = 'Hours',\n Minutes = 'Minutes',\n Seconds = 'Seconds',\n AMPM = 'AM / PM',\n}\n\nexport const TimePicker: React.FC<TimePickerProps> = ({\n value,\n showSeconds = false,\n hours12 = false,\n onSelected = noop,\n}) => {\n const [time, setTime] = useState<DateTime>(value);\n\n const [active, setActive] = useState<ActiveSelector>();\n const [ampm, setAmPm] = useState<'AM' | 'PM'>(time.hour > 12 ? 'PM' : 'AM');\n\n return (\n <div className={classes.container}>\n <div className={classes.title}>{active ?? 'Time'}</div>\n <ScrollColumn\n items={hours12 ? [...Array(12).keys()] : [...Array(24).keys()]}\n selectedItem={hours12 ? time.hour % 12 : time.hour}\n onSelected={(value) => {\n if (active !== ActiveSelector.Hours) {\n setActive(ActiveSelector.Hours);\n } else if (time.hour !== value) {\n const newTime = time.set({\n hour: hours12 && ampm === 'PM' ? value + 12 : value,\n });\n\n setTime(newTime);\n onSelected(newTime);\n } else {\n setActive(undefined);\n }\n }}\n isActive={active === ActiveSelector.Hours}\n inActiveTitle={ActiveSelector.Hours}\n />\n <ScrollColumn\n items={Array.from({ length: 12 }, (_, i) => i * 5)}\n selectedItem={time.minute}\n onSelected={(value) => {\n if (active !== ActiveSelector.Minutes) {\n setActive(ActiveSelector.Minutes);\n } else if (time.minute !== value) {\n const newTime = time.set({ minute: value });\n\n setTime(newTime);\n onSelected(newTime);\n } else {\n setActive(undefined);\n }\n }}\n isActive={active === ActiveSelector.Minutes}\n inActiveTitle={ActiveSelector.Minutes}\n />\n {showSeconds && (\n <ScrollColumn\n items={Array.from({ length: 12 }, (_, i) => i * 5)}\n selectedItem={time.second}\n onSelected={(value) => {\n if (active !== ActiveSelector.Seconds) {\n setActive(ActiveSelector.Seconds);\n } else if (time.second !== value) {\n const newTime = time.set({ second: value });\n\n setTime(newTime);\n onSelected(newTime);\n } else {\n setActive(undefined);\n }\n }}\n isActive={active === ActiveSelector.Seconds}\n inActiveTitle={ActiveSelector.Seconds}\n />\n )}\n {hours12 && (\n <ScrollColumn<'AM' | 'PM'>\n items={['AM', 'PM']}\n selectedItem={ampm}\n onSelected={(value) => {\n if (active !== ActiveSelector.AMPM) {\n setActive(ActiveSelector.AMPM);\n } else if (ampm !== value) {\n setAmPm(value);\n\n const newTime = time.set({\n hour: value === 'PM' ? time.hour + 12 : time.hour,\n });\n\n setTime(newTime);\n onSelected(newTime);\n } else {\n setActive(undefined);\n }\n }}\n isActive={active === ActiveSelector.AMPM}\n inActiveTitle={ActiveSelector.AMPM}\n />\n )}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport { DateTime } from 'luxon';\nimport React, { useState } from 'react';\nimport { noop } from '../../helpers/utils';\nimport { DatePicker } from './DatePicker/DatePicker';\nimport classes from './DateTimePicker.scss';\nimport { TimePicker } from './TimePicker/TimePicker';\n\nexport interface DateTimePickerProps {\n /** Current value */\n value?: Date;\n\n /** Callback triggered when a new value is selected */\n onSelected?: (value: Date) => void;\n\n /** CSS Class name for additional styles */\n className?: string;\n\n /** Optional Styles */\n style?: React.CSSProperties;\n\n /** Whether the time picker should be shown as well. (default: true) */\n showTimePicker?: boolean;\n\n /** Whether the time picker should allow selecting seconds. (default: false) */\n showSeconds?: boolean;\n\n /** Whether the time picker should be showing in 12 hour format or 24 hour format. (default: false) */\n hours12?: boolean;\n}\n\nexport const DateTimePicker: React.FC<DateTimePickerProps> = ({\n value,\n onSelected = noop,\n className,\n style = {},\n showTimePicker = true,\n showSeconds,\n hours12,\n}) => {\n const [selectedDate, setSelectedDate] = useState<DateTime>(() => {\n const defaultDate = DateTime.fromObject({ hour: 0, minute: 0, second: 0 });\n return value ? DateTime.fromJSDate(value) : defaultDate;\n });\n return (\n <div\n className={clsx(\n classes.container,\n { [classes['timepicker']]: showTimePicker },\n 'date-time-picker-container',\n className,\n )}\n style={style}\n >\n <DatePicker\n value={selectedDate}\n onSelected={(value) => {\n const { year, month, day } = value;\n const updatedDate = selectedDate.set({ year, month, day });\n\n setSelectedDate(updatedDate);\n onSelected(updatedDate.toJSDate());\n }}\n />\n {showTimePicker && (\n <TimePicker\n value={selectedDate}\n onSelected={(value) => {\n const { hour, minute, second } = value;\n const updatedDate = selectedDate.set({ hour, minute, second });\n\n setSelectedDate(updatedDate);\n onSelected(updatedDate.toJSDate());\n }}\n showSeconds={showSeconds}\n hours12={hours12}\n />\n )}\n </div>\n );\n};\n","interface Connection {\n nodes: unknown[];\n}\n\ntype SelectorFunction<T> = (value: T, index: number, array: T[]) => unknown;\n\n/**\n * Creates a renderer that will loop through each `node` on the value,\n * and adds the string representations into a comma separated string.\n *\n * @param selector A function that maps each `node` to a string representation.\n */\nexport function createConnectionRenderer<T extends Connection>(\n selector: SelectorFunction<T['nodes'][number]>,\n): (val: unknown) => string {\n return (val: unknown): string => {\n const value = val as T;\n\n return value.nodes.map(selector).join(', ');\n };\n}\n","import { FilterValue, FilterValues } from '../../Filters/Filters.model';\n\ninterface StringKeyedObject {\n [key: string]: unknown;\n}\n\nexport type FilterFunction = (\n value: FilterValue,\n) => Record<string, unknown> | boolean;\n\ntype FilterMap<K> = {\n [U in keyof K]: string | string[] | FilterFunction;\n};\n\n/**\n * Function to transform @axinom/mosaic-ui FilterValues to PostGraphile filters\n * @param filters FilterValues from @axinom/mosaic-ui\n * @param map Object containing paths of PostGraphile filters.\n * \n * @example\n * filterToPostGraphileFilter<MovieFilter>(filters, {\n title: 'includes', // Resolves to {title: {includes: ${value}}}\n tags: ['some', 'name', 'includes'] // Resolves to {tags: {some: {name: {includes: ${value}}}}}\n createdDate: value => {\n const values = String(value).split('|');\n return {\n greaterThan: values[0],\n lessThan: values[1],\n };\n }, // Resolves to {createdDate: {greaterThan: ${values[0]}, lessThan: ${values[1]}}}\n };\n */\nexport const filterToPostGraphileFilter = <T extends StringKeyedObject>(\n filters: FilterValues<unknown>,\n map: FilterMap<T>,\n): T | undefined => {\n const filterEntries: [string, FilterValue][] = Object.entries(filters);\n if (filterEntries.length === 0) {\n return undefined;\n } else {\n const filterWithQuery: StringKeyedObject = {};\n\n for (const [prop, value] of filterEntries) {\n const mapValues = map[prop];\n\n if (typeof mapValues === 'string') {\n setProperty(filterWithQuery, [prop, mapValues], value);\n } else if (typeof mapValues === 'function') {\n const customValue = mapValues(value);\n filterWithQuery[prop] = customValue;\n } else if (typeof mapValues === 'object') {\n mapValues.unshift(prop);\n setProperty(filterWithQuery, mapValues, value);\n }\n }\n\n return filterWithQuery as T;\n }\n};\n\nfunction setProperty(\n obj: StringKeyedObject,\n keys: string[],\n value: FilterValue,\n): void {\n if (keys.length > 1) {\n const propertyName = String(keys.shift());\n obj[propertyName] = {};\n setProperty(obj[propertyName] as StringKeyedObject, keys, value);\n } else {\n const propertyName = String(keys.shift());\n obj[propertyName] = value;\n }\n}\n","/**\n * Compares two arrays and returns an object holding an array for the added and another one for the removed items.\n *\n * @param current The array of values after the changes were performed\n * @param initial The array of values before the changes were performed\n */\nexport function getArrayDiff<T>(\n current: T[] | null | undefined,\n initial: T[] | null | undefined,\n): {\n /** The items that were added */\n added: T[];\n /** The items that were removed */\n removed: T[];\n};\n\n/**\n * Compares two arrays and returns an object holding an array for the added and another one for the removed items.\n *\n * @param current The array of values after the changes were performed\n * @param initial The array of values before the changes were performed\n * @param key The name of the property that will be used to identify objects to compare them for updates\n */\nexport function getArrayDiff<T>(\n current: T[] | null | undefined,\n initial: T[] | null | undefined,\n key?: keyof T,\n): {\n /** The items that were added */\n added: T[];\n /** The items that were removed */\n removed: T[];\n /** The items that were updated */\n updated: T[];\n};\n\nexport function getArrayDiff<T>(\n current: T[] | null | undefined,\n initial: T[] | null | undefined,\n key?: keyof T,\n): {\n /** The items that were added */\n added: T[];\n /** The items that were removed */\n removed: T[];\n /** The items that were updated */\n updated: T[];\n} {\n const currentArray: T[] = current ?? [];\n const originalArray: T[] = initial ?? [];\n\n const added = currentArray.filter(\n (x: T) =>\n !originalArray.find((e) => {\n if (key) {\n return e[key] === x[key];\n }\n return e === x;\n }),\n );\n\n const removed = originalArray.filter(\n (x: T) =>\n !currentArray.find((e) => {\n if (key && typeof key === 'string') {\n return e[key] === x[key];\n }\n return e === x;\n }),\n );\n\n const updated: T[] = [];\n\n if (key && typeof key === 'string') {\n updated.push(\n ...currentArray.filter((x: T) =>\n originalArray.find((e) => e[key] === x[key] && isUpdated(e, x)),\n ),\n );\n }\n\n return { added, removed, updated };\n}\n\nfunction isUpdated<U>(x: U, y: U): boolean {\n let value = false;\n\n if (isObject(x) && isObject(y)) {\n Object.keys(x).forEach((key) => {\n if (x[key] !== y[key]) {\n value = true;\n }\n });\n }\n\n return value;\n}\n\nconst isObject = (input: unknown): input is Record<string, unknown> => {\n return typeof input === 'object' && input !== null && !Array.isArray(input);\n};\n","import { getArrayDiff } from './getArrayDiff';\n\ninterface GenerateArrayMutationsParams<T> {\n current: T[] | null | undefined;\n original: T[] | null | undefined;\n generateCreateMutation: (item: T) => string;\n generateDeleteMutation: (item: T) => string;\n prefix?: string;\n}\n\ninterface GenerateArrayMutationsWithUpdates<T> {\n generateUpdateMutation: (item: T) => string;\n key: keyof T;\n}\n\n/**\n * This method will generate an array of mutation documents based on the changes between the `original` and the `current` values.\n * It will detect the added and removed items and will call the `generateCreateMutation` or `generateDeleteMutation` for each of the differences.\n * The methods are expected to return the GraphQL mutation call that needs to be executed to perform that adding or removing on the backend service.\n *\n * The method will return an array with all create and delete mutations that were created.\n * The result can be used to wrap it into a GraphQL `mutation` like that:\n * ```\n * const mutation = `mutation MyArrayUpdate {\n * ${generateArrayMutations({\n * current: [1,2,3],\n * original: [1,2],\n * generateCreateMutation: createFn,\n * generateDeleteMutation: deleteFn}).join('\\n')}}\n * }`\n * ```\n *\n * @param current The values after the changes\n * @param original The original values before the changes\n * @param generateCreateMutation This method will be called for each created item. It should return a string representing the create mutation (without the surrounding `mutation MyMutation {}` wrapper)\n * @param generateDeleteMutation This method will be called for each deleted item. It should return a string representing the create mutation (without the surrounding `mutation MyMutation {}` wrapper)\n * @param prefix Prefix for the create/delete mutation aliases.\n */\nexport function generateArrayMutations<T>(\n props: GenerateArrayMutationsParams<T>,\n): string[] {\n return generateArrayMutationsImplementation<T>(props);\n}\n\n/**\n * This method will generate an array of mutation documents based on the changes between the `original` and the `current` values.\n * It will detect the added and removed items using the `key` and will call the `generateCreateMutation`, `generateDeleteMutation`, `generateUpdateMutation` for each of the differences.\n * The methods are expected to return the GraphQL mutation call that needs to be executed to perform that adding or removing on the backend service.\n *\n * The method will return an array with all create and delete mutations that were created.\n * The result can be used to wrap it into a GraphQL `mutation` like that:\n * ```\n * const mutation = `mutation MyArrayUpdate {\n * ${generateArrayMutationsWithUpdates({\n * current: [{id: 1, value: 'ONE'},{id: 2, value: 'TWO'},{id: 3, value: 'THREE'}],\n * original: [{id: 1, value: 'ONE'},{id: 2, value: 'TWO'}],\n * generateCreateMutation: createFn,\n * generateDeleteMutation: deleteFn,\n * generateUpdateMutation: updateFn,\n * key: 'id'}).join('\\n')}}\n * }`\n * ```\n *\n * @param current The values after the changes\n * @param original The original values before the changes\n * @param generateCreateMutation This method will be called for each created item. It should return a string representing the create mutation (without the surrounding `mutation MyMutation {}` wrapper)\n * @param generateDeleteMutation This method will be called for each deleted item. It should return a string representing the create mutation (without the surrounding `mutation MyMutation {}` wrapper)\n * @param generateUpdateMutation This method will be called for each deleted item. It should return a string representing the create mutation (without the surrounding `mutation MyMutation {}` wrapper)\n * @param key Object Key which will be used for comparison\n * @param prefix Prefix for the create/delete mutation aliases.\n */\nexport function generateArrayMutationsWithUpdates<T>(\n props: GenerateArrayMutationsParams<T> & GenerateArrayMutationsWithUpdates<T>,\n): string[] {\n return generateArrayMutationsImplementation(props);\n}\n\nfunction generateArrayMutationsImplementation<T>({\n current,\n original,\n key,\n prefix = '',\n generateCreateMutation,\n generateDeleteMutation,\n generateUpdateMutation,\n}: GenerateArrayMutationsParams<T> &\n Partial<GenerateArrayMutationsWithUpdates<T>>): string[] {\n const { added, removed, updated } = getArrayDiff(current, original, key);\n\n const result = removed\n .map((a, idx) => `${prefix}delete${idx}:${generateDeleteMutation(a)}`)\n .concat(\n added.map(\n (a, idx) => `${prefix}create${idx}:${generateCreateMutation(a)}`,\n ),\n );\n\n if (generateUpdateMutation) {\n return result.concat(\n updated.map(\n (a, idx) => `${prefix}updated${idx}:${generateUpdateMutation(a)}`,\n ),\n );\n }\n\n return result;\n}\n","import { FormikValues } from 'formik';\n\n/**\n * Returns an object only containing the differences between the two FormikValues.\n *\n * This method can be used to create the patch document sent to the PostGraphile endpoint.\n *\n * Please make sure to remove fields that can not be updated, or need to be updated using a different mutation, either already on the parameters passed to that method or on the returned object, before sending it to the API.\n *\n * _Note_: this function will just compare the values of each property. It will not compare values of nested array or objects.\n *\n * @param current the current values of the form\n * @param initial the initial values of the form\n * @example getFormDiff({a: 2}, {a: 3})\n */\nexport function getFormDiff<T extends FormikValues>(\n current: T,\n initial?: T | null,\n): Partial<T> {\n const updateData = initial\n ? Object.keys(current).reduce<T>((result, value) => {\n if (current[value] !== initial[value]) {\n result[value as keyof T] = current[value];\n }\n return result;\n }, {} as T)\n : current;\n return updateData;\n}\n","import { FilterFunction } from './FilterTransformer';\n\n/**\n * Accepts an array of 2 elements containing from and to values\n * and returns on object of shape:\n * ```\n * {\n * greaterThan?: value[0],\n * lessThan?: value[1],\n * }\n * ```\n *\n * The transformer is designed to be used on a property that has two filters (a 'from' as well as a 'to' filter) attached to it.\n *\n * @param value An array of two string elements. Element 1 contains 'from' value, element 2 contains 'to' value.\n * @returns An object that can be used as filter for fields that accept `greaterThan` as well as `lessThan` options.\n */\nexport const transformRange: FilterFunction = (value) => {\n const [from, to] = value as [unknown, unknown];\n const range: Record<string, unknown> = {\n greaterThan: undefined,\n lessThan: undefined,\n };\n\n from && (range.greaterThan = from);\n to && (range.lessThan = to);\n\n return range;\n};\n","import { Data } from '../../../types/data';\nimport { SortData } from '../../List/List.model';\n\n/**\n * Converts the column property name and order from lower case to snake case (all caps) as required by a Postgraphile backend.\n * It will return `undefined` if the calculated value can not be found on the sortingEnum.\n * @param sort Sorting data coming from `<Explorer />`\n * @param sortingEnum Enumeration containing the values on your Postgraphile backend. Usually `{QueryName}OrderBy`.\n */\nexport const sortToPostGraphileOrderBy = <T extends Data, Y>(\n sort: SortData<Y> | undefined,\n sortingEnum: T,\n): T[keyof T][] | undefined => {\n if (sort) {\n if (\n sort.columnSortKey &&\n Object.values(sortingEnum).includes(sort.columnSortKey)\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return [sort.columnSortKey as any];\n }\n\n // TODO: support numbers?\n const convertedString = `${capitalizeFirstLetter(\n String(sort?.column),\n )}${capitalizeFirstLetter(sort?.direction)}`;\n\n const value = sortingEnum[convertedString as keyof T];\n\n return value !== undefined ? [value] : undefined;\n }\n};\n\nconst capitalizeFirstLetter = (s: string): string =>\n s.charAt(0).toUpperCase() + s.slice(1);\n","type UpdateGQLResult<T> = {\n [K in keyof T]?: (keyof T[K] | UpdateGQLResult<T[K]> | string)[] | keyof T[K];\n};\n\ntype UpdateGQLFragmentGenerator<T> = <U, Y = undefined>(\n mutation: keyof T,\n args: CustomArgs<U>,\n result?: (keyof Y | UpdateGQLResult<Y>)[],\n) => string;\n\nexport interface UpdateGQLFragmentEnumInput {\n type: 'enum';\n value: unknown;\n}\n\ntype CustomArgs<T> = {\n [P in keyof T]: T[P] extends (infer U)[]\n ? CustomArgs<U>[] // eslint-disable-next-line @typescript-eslint/ban-types\n : T[P] extends object\n ? CustomArgs<T[P]>\n : T[P] | UpdateGQLFragmentEnumInput;\n};\n\n/**\n * Factory for creating a `generateUpdateGQLFragment` function that can be used to\n * generate GraphQL fragments for the mutations present in `T`.\n * The generic `T` should usually be set to the `Mutation` type generated by the\n * GraphQL Code Generator.\n */\nexport function createUpdateGQLFragmentGenerator<\n T,\n>(): UpdateGQLFragmentGenerator<T> {\n return <U, Y = undefined>(\n mutation: keyof T,\n args: CustomArgs<U>,\n result?: (keyof Y | UpdateGQLResult<Y>)[],\n ): string => {\n const enumValues: string[] = [];\n\n let GqlFragment = `${String(mutation)} (${JSON.stringify(\n args,\n (_key, value) => {\n if (value && typeof value === 'object') {\n Object.keys(value).map((v) => {\n if (value[v] && isEnumType(value[v])) {\n enumValues.push(\n (value[v] as UpdateGQLFragmentEnumInput).value as string,\n );\n value[v] = (value[v] as UpdateGQLFragmentEnumInput).value;\n }\n });\n }\n return value;\n },\n )\n // Regex to remove the quotes from properties https://stackoverflow.com/questions/11233498/json-stringify-without-quotes-on-properties\n .replace(/\"([^\\\\\"]+)\":/g, '$1:')\n // Remove the curly braces from beginning and end\n .slice(1, -1)}) {${getResult(result)}}`;\n\n enumValues.forEach((value) => {\n GqlFragment = GqlFragment.replace(`\"${value}\"`, `${value}`);\n });\n\n return GqlFragment;\n };\n}\n\nfunction isEnumType(object: unknown): object is UpdateGQLFragmentEnumInput {\n return (object as UpdateGQLFragmentEnumInput).type === 'enum';\n}\n\n/**\n * Generates a string representing the desired result fields for a GraphQL query or mutation.\n * Supports both simple keys and nested UpdateGQLResult objects for recursive results.\n * @param result - An optional array of keys (strings) or an array of UpdateGQLResult objects.\n * If not provided, the function will default to returning 'clientMutationId'.\n * @returns A string representing the result fields for a GraphQL query or mutation.\n */\nconst getResult = <Y>(\n result?: (keyof Y | UpdateGQLResult<Y>)[] | Y,\n): string => {\n // If no result is provided, return the default 'clientMutationId'\n if (!result) {\n return 'clientMutationId';\n }\n // If the result is an array, process it\n else if (Array.isArray(result)) {\n const results: string[] = [];\n\n // Iterate through each item in the result array\n result.forEach((item) => {\n // If the item is a string, add it directly to the results array\n if (typeof item === 'string') {\n results.push(item);\n }\n // If the item is an object, recursively process its keys and values\n else {\n const keys = Object.keys(item) as (keyof Y)[];\n keys.forEach((key) => {\n const value = (item as Y)[key];\n // If the value is an object, process it recursively using getResult\n if (typeof value === 'object') {\n results.push(`${String(key)} {${getResult(value)}}`);\n }\n // If the value is not an object, add the key directly to the results array\n else {\n results.push(String(key));\n }\n });\n }\n });\n\n // Join the results array into a single string and return it\n return results.join(' ');\n }\n // If the result is an object, process it\n else {\n const keys = Object.keys(result) as (keyof Y)[];\n const results: string[] = [];\n\n // Iterate through each key in the object\n keys.forEach((key) => {\n const value = (result as Y)[key];\n // If the value is an object, process it recursively using getResult\n if (typeof value === 'object') {\n results.push(`${String(key)} {${getResult(value)}}`);\n }\n // If the value is not an object, add the key directly to the results array\n else {\n results.push(String(key));\n }\n });\n\n // Join the results array into a single string and return it\n return results.join(' ');\n }\n};\n","import { TransformerFunction } from './TransformerFunction';\n\n/**\n * Converts an existing Boolean value to a Human Readable format.\n * @param bool Boolean value to be converted\n */\nexport const formatBoolean: TransformerFunction<boolean, string> = (\n bool,\n): string => {\n const str = String(bool);\n\n if (str !== '') {\n return str[0].toUpperCase().concat(str.substr(1));\n }\n\n return '';\n};\n","import { DateTime, Settings } from 'luxon';\nimport { TransformerFunction } from './TransformerFunction';\n\nSettings.defaultLocale = navigator.language;\n\n/**\n * Converts an existing DateTime value to a Human Readable format.\n * @param dateString DateTime value to be converted\n *\n * @returns Localized time string. If the DateTime value cannot be converted, the original string is returned.\n */\nexport const formatDateTime: TransformerFunction<string, string> = (\n dateString,\n): string => {\n const parsedDate = DateTime.fromISO(String(dateString));\n\n return parsedDate.isValid\n ? DateTime.fromISO(String(dateString)).toLocaleString(\n DateTime.DATETIME_SHORT,\n )\n : dateString;\n};\n\n/**\n * Converts an existing Date value to a Human Readable format.\n * @param dateString Date value to be converted\n *\n * @returns Localized time string. If the Date value cannot be converted, the original string is returned.\n */\nexport const formatDate: TransformerFunction<string, string> = (\n dateString,\n): string => {\n const parsedDate = DateTime.fromISO(String(dateString));\n\n return parsedDate.isValid\n ? DateTime.fromISO(String(dateString)).toLocaleString(DateTime.DATE_SHORT)\n : dateString;\n};\n","import { TransformerFunction } from './TransformerFunction';\n\n/**\n * Converts a size in bytes to a human readable string\n * @param bytes size as bytes\n */\nexport const formatFileSize: TransformerFunction<number, string> = (\n bytes,\n): string => {\n if (bytes === null || bytes === undefined) {\n return 'Invalid Value';\n }\n\n if (bytes === 0 || bytes === null || bytes === undefined) {\n return '0 Bytes';\n }\n\n const k = 1024,\n units = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n let i = 0;\n\n while (bytes > k) {\n bytes = bytes / k;\n i++;\n }\n\n return Math.max(bytes).toFixed(2) + ' ' + units[i];\n};\n","import { TransformerFunction } from './TransformerFunction';\n\n/**\n * Performs sort on a Numeric or String array\n * @param arr Array to be sorted\n * @param ascending if true array will be sorted in ascending order, if false array will be sorted in descending order\n */\nexport const sortArray: TransformerFunction<\n string[] | number[],\n string[] | number[]\n> = (arr): string[] | number[] => {\n if (!arr || arr.length < 2) {\n return arr;\n }\n return arr.slice().sort((v1: number | string, v2: number | string) => {\n return v1 > v2 ? 1 : -1;\n });\n};\n","import { TransformerFunction } from './TransformerFunction';\n\nexport type Timestamp = `${string}:${string}:${string}.${string}`;\nexport const TIMESTAMP_DEFAULT = '00:00:00.000';\n\n/**\n * Renders numeric seconds value as a timestamp\n * @param timeInSeconds seconds as a numeric value, can contain a fractional part\n * @returns timestamp string\n * @returns defaults to '00:00:00.000' if value is undefined or null\n */\nexport const formatSecondsToTimestamp: TransformerFunction<\n number,\n Timestamp\n> = (timeInSeconds?: number | null): Timestamp => {\n if (\n timeInSeconds === null ||\n timeInSeconds === undefined ||\n typeof timeInSeconds !== 'number'\n ) {\n return TIMESTAMP_DEFAULT;\n }\n\n const pad = (num: number, size: number): string =>\n ('000' + num).slice(size * -1);\n const time = timeInSeconds.toFixed(3);\n const hours = Math.floor(Number(time) / 60 / 60);\n const minutes = Math.floor(Number(time) / 60) % 60;\n const seconds = Math.floor(Number(time) - minutes * 60);\n const milliseconds = time.slice(-3);\n\n return `${pad(hours, 2)}:${pad(minutes, 2)}:${pad(seconds, 2)}.${pad(\n Number(milliseconds),\n 3,\n )}`;\n};\n\n/**\n * Takes a timestamp and turns it into seconds\n * @param timestamp string in the format of a timestamp\n * @returns seconds\n */\nexport const timestampToSeconds: TransformerFunction<Timestamp, number> = (\n timestamp: Timestamp,\n): number => {\n const [hh, mm, ss] = timestamp.split(':');\n\n const totalSeconds = Number(hh) * 3600 + Number(mm) * 60 + Number(ss);\n\n return totalSeconds;\n};\n","import { TransformerFunction } from './TransformerFunction';\n\n/**\n * Converts a string to Title Case.\n * @param value String value to be converted\n */\nexport const formatTitleCase: TransformerFunction<string, string> = (value) => {\n if (value !== '') {\n return value.replace(/\\w\\S*/g, (txt) => {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n }\n\n return value;\n};\n","import clsx from 'clsx';\nimport { DateTime } from 'luxon';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Button, ButtonContext } from '../../Buttons';\nimport { DateTimePicker } from '../../DateTime/DateTimePicker';\nimport { IconName } from '../../Icons';\nimport { formatDate, formatDateTime } from '../../Utils';\nimport { BaseFormControl } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './DateTimeText.scss';\n\nexport interface DateTimeTextProps extends BaseFormControl {\n /** Current value the form control has */\n value?: string;\n /** Input placeholder */\n placeholder?: string;\n /** Whether or not the control should start focused (default: false) */\n autoFocus?: boolean;\n /** Whether or not the control supports auto complete */\n autoComplete?: 'on' | 'off';\n /** Whether the control modifies the time portion of the value */\n modifyTime?: boolean;\n /** Callback when the datepicker popup is closed or the date field value is changed */\n onChange?: (value: string | null, isValidDate: boolean) => void;\n}\n\n/**\n * This component should be used to render a TextBox with a DateTime picker inside a Formik form.\n *\n * @example\n * <Field name=\"title\" label=\"Title\" as={SingleLineTextField} />\n */\nexport const DateTimeText: React.FC<DateTimeTextProps> = ({\n name,\n id,\n value = '',\n disabled = false,\n placeholder,\n error = undefined,\n autoFocus = false,\n autoComplete,\n onChange,\n modifyTime = true,\n className = '',\n ...rest\n}) => {\n const container = useRef<HTMLDivElement>(null);\n const errorMsg: string | undefined = error;\n const [display, setDisplay] = useState<string>(() => {\n const locale = fromISODate(value, modifyTime);\n return locale ?? '';\n });\n\n const [showPicker, setShowPicker] = useState(false);\n\n useEffect(() => {\n const locale = fromISODate(value, modifyTime);\n setDisplay(locale ?? '');\n }, [modifyTime, value]);\n\n const onBlurHandler = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n const textValue = e.target.value;\n const parsedValue = modifyTime\n ? DateTime.fromFormat(textValue, 'f')\n : DateTime.fromFormat(textValue, 'D');\n\n if (parsedValue.isValid) {\n onChange && onChange(parsedValue.toISO(), parsedValue.isValid);\n } else if (textValue === '') {\n onChange && onChange(null, true);\n } else {\n // Fallback parser if the user types in an ISO date\n const isoParsedValue = DateTime.fromISO(textValue);\n\n if (isoParsedValue.isValid) {\n onChange && onChange(isoParsedValue.toISO(), isoParsedValue.isValid);\n } else {\n onChange && onChange(textValue, parsedValue.isValid);\n }\n }\n },\n [modifyTime, onChange],\n );\n\n return (\n <FormElementContainer\n {...rest}\n className={clsx(classes.container, 'datetime-container', className)}\n error={errorMsg}\n dataTestFieldType=\"DateTime\"\n >\n <div className={clsx(classes.inputbutton)} ref={container}>\n <input\n className={clsx({ [classes.hasError]: errorMsg })}\n id={id}\n name={name}\n type={'text'}\n value={display}\n disabled={disabled}\n placeholder={placeholder}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n onChange={(e) => setDisplay(e.target.value)}\n onBlur={onBlurHandler}\n />\n <Button\n type=\"button\"\n icon={IconName.Calendar}\n buttonContext={ButtonContext.Icon}\n disabled={disabled}\n className={clsx(classes.button)}\n onButtonClicked={(e) => {\n e.persist();\n e.preventDefault();\n setShowPicker(!showPicker);\n }}\n />\n </div>\n {showPicker && (\n <>\n <div\n className={clsx(classes.picker)}\n style={calculatePosition(container.current)}\n >\n <DateTimePicker\n value={getValue(value)}\n onSelected={(value) => {\n if (!modifyTime) {\n setShowPicker(false);\n }\n onChange && onChange(DateTime.fromJSDate(value).toISO(), true);\n }}\n showTimePicker={modifyTime}\n />\n </div>\n <div\n className={clsx(classes.backdrop)}\n onClick={() => {\n setShowPicker(false);\n }}\n ></div>\n </>\n )}\n </FormElementContainer>\n );\n};\n\nfunction getValue(DateString: string): Date | undefined {\n if (DateString === undefined) {\n return undefined;\n }\n\n const parsedValue = DateTime.fromISO(DateString);\n\n if (parsedValue.isValid) {\n return parsedValue.toJSDate();\n }\n\n return undefined;\n}\n\nfunction fromISODate(ISODateString: string, modifyTime: boolean): string {\n const parsedValue = DateTime.fromISO(ISODateString);\n if (parsedValue.isValid) {\n return modifyTime\n ? formatDateTime(ISODateString) ?? ''\n : formatDate(ISODateString) ?? '';\n } else {\n return ISODateString;\n }\n}\n\nconst calculatePosition = (\n container: HTMLDivElement | null,\n): React.CSSProperties => {\n if (!container) {\n return {};\n }\n\n const PICKER_HEIGHT = 280;\n\n const rect = container.getBoundingClientRect();\n const top = rect.bottom;\n\n if (top + PICKER_HEIGHT > window.innerHeight) {\n return { top: rect.top - PICKER_HEIGHT, left: container.offsetLeft };\n } else {\n return { top, left: container.offsetLeft };\n }\n};\n","import { useField } from 'formik';\nimport React from 'react';\nimport { useFormikError } from '../useFormikError';\nimport { DateTimeText, DateTimeTextProps } from './DateTimeText';\n/**\n * This component should be used to render a DateTimeTextField inside a Formik form.\n *\n * @example\n * <Field name=\"title\" label=\"Title\" as={DateTimeTextField} />\n */\nexport const DateTimeTextField: React.FC<Omit<DateTimeTextProps, 'error'>> = (\n props,\n) => {\n const error = useFormikError(props.name);\n const [, meta, helpers] = useField(props.name);\n\n const handleChange = (value: string | null, valid?: boolean): void => {\n if (!valid) {\n helpers.setError('Invalid Date');\n helpers.setValue(value, false);\n } else {\n helpers.setValue(value);\n }\n\n if (value === meta.initialValue) {\n helpers.setTouched(false);\n }\n };\n\n return <DateTimeText {...props} error={error} onChange={handleChange} />;\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport classes from './Divider.scss';\n\nexport interface DividerProps {\n className?: string;\n}\n\nexport const Divider: React.FC<DividerProps> = ({ className = '' }) => (\n <div className={clsx(classes.container, 'divider-container', className)}>\n <div className={clsx(classes.divider)}></div>\n </div>\n);\n","import clsx from 'clsx';\nimport React from 'react';\nimport { Data } from '../../../types/data';\nimport {\n DynamicDataList,\n DynamicDataListProps,\n} from '../../DynamicDataList/DynamicDataList';\nimport { BaseFormControl } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\n\nexport type DynamicDataListControlProps<T extends Data> = BaseFormControl &\n DynamicDataListProps<T>;\n\n/**\n * Renders a list of data that whose rows can be added, deleted, and repositioned\n * @example\n * <DynamicDataListControl<DataInterface>\n * label={'Control Label'}\n * columns={[{propertyName: 'id', size: '1fr', label: 'Id'}]}\n * data={[{id: '1',desc: 'Description 1',title: 'Item 1'}]}\n * onChange={e => console.log(e)}\n * />\n */\nexport const DynamicDataListControl = <T extends Data>({\n className = '',\n ...rest\n}: DynamicDataListControlProps<T>): JSX.Element => {\n return (\n <FormElementContainer\n {...rest}\n className={clsx('dynamic-data-list-control-container', className)}\n dataTestFieldType=\"DynamicDataListControl\"\n >\n <DynamicDataList {...rest} />\n </FormElementContainer>\n );\n};\n","import { useField } from 'formik';\nimport React, { PropsWithChildren } from 'react';\nimport { Data } from '../../../types/data';\nimport { useFormikError } from '../useFormikError';\nimport {\n DynamicDataListControl,\n DynamicDataListControlProps,\n} from './DynamicDataListControl';\n\n/**\n * Renders a list of data that whose rows can be added, deleted, and repositioned\n * This is a wrapper for the DynamicDataListControl and meant to be used only within a form station\n * @example\n * <Field\n * name=\"list\"\n * label=\"Control Label\"\n * columns={[{propertyName: 'id', size: '1fr', label: 'Id'}]}\n * data={[{id: '1',desc: 'Description 1',title: 'Item 1'}]}\n * as={DynamicDataListField}\n * />\n */\nexport const DynamicDataListField = <T extends Data>(\n props: PropsWithChildren<\n Omit<DynamicDataListControlProps<T>, 'error' | 'onChange'>\n >,\n): JSX.Element => {\n const { name } = props;\n const error = useFormikError(props.name);\n const [field, , helpers] = useField(name);\n\n return (\n <DynamicDataListControl\n {...props}\n value={field.value}\n error={error}\n onChange={helpers.setValue}\n />\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { FullProgressBar, ProgressBarProps } from './ProgressBar.model';\nimport classes from './ProgressBar.scss';\n\n/**\n * Component for showing a progress bar.\n *\n * @example\n * <ProgressBar kind='simple'\n */\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n progress,\n kind,\n status,\n indeterminate,\n className = '',\n ...props\n}) => {\n const kindClass = kind === 'full' ? classes.full : classes.simple;\n let statusClass = '';\n\n switch (status) {\n case 'Completed':\n statusClass = classes.completed;\n break;\n case 'Error':\n statusClass = classes.error;\n break;\n case 'Warning':\n statusClass = classes.warning;\n break;\n }\n\n return (\n <div\n className={clsx(\n classes.progressbar,\n kindClass,\n 'progress-bar-container',\n className,\n )}\n >\n <div\n className={clsx(\n classes.progress,\n statusClass,\n indeterminate && classes.infinite,\n )}\n style={{\n width: indeterminate\n ? '50%'\n : `${\n progress === null || progress === undefined\n ? 0\n : progress < 0\n ? 0\n : progress > 100\n ? 100\n : progress\n }%`,\n }}\n />\n <div className={classes.text}>{(props as FullProgressBar).text}</div>\n </div>\n );\n};\n","export type ProgressBarProps = SimpleProgressBar | FullProgressBar;\nexport enum ProgressBarStatus {\n Processing = 'Processing',\n Completed = 'Completed',\n Warning = 'Warning',\n Error = 'Error',\n}\n\ninterface ProgressBar {\n /**\n * Toggles two different visualizations/sizes.\n */\n kind: 'simple' | 'full';\n /**\n * The progress that should be displayed. (0-100)\n */\n progress?: number;\n /**\n * Use this to signal the status of the progress.\n *\n * @default ProgressBarStatus.Processing\n */\n status?: ProgressBarStatus;\n /**\n * When set to `true`, the progress bar will just show a progress animation\n * instead of a concrete progress.\n *\n * @default false\n */\n indeterminate?: boolean;\n /** CSS Class name for additional styles */\n className?: string;\n}\n\nexport interface SimpleProgressBar extends ProgressBar {\n kind: 'simple';\n}\n\nexport interface FullProgressBar extends ProgressBar {\n kind: 'full';\n\n /**\n * A text that should be written on top of the progress bar.\n * You can use `${progress}` to display the current `progress` in that place.\n */\n text?: string;\n}\n","import clsx from 'clsx';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { noop } from '../../../helpers/utils';\nimport { IconName, Icons } from '../../Icons';\nimport { ProgressBar } from '../../ProgressBar';\nimport { BaseFormControl } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './FileUploadControl.scss';\n\nexport interface FileUpload {\n file: File;\n uploadStarted: () => void;\n uploadProgress: (percentage: number) => void;\n uploadCompleted: () => void;\n}\n\nexport interface FileUploadProps extends BaseFormControl {\n /** Input placeholder */\n placeholder?: string;\n /** Current value of the file upload */\n value?: FileUpload;\n /** Input 'accept' attribute. MIME Types can be set here to limit which file types can be selected */\n accept?: string;\n /** Callback called when a file is dropped or selected\n * @param selectedFile File selected\n * @param uploadStarted Function to be called to show the upload progress bar\n * @param uploadProgress Function to be called to update the progress bar\n * @param uploadCompleted Function to be called to hide the upload progress bar\n */\n onFileSelected: (args: FileUpload) => void;\n}\n\nexport const FileUploadControl: React.FC<FileUploadProps> = ({\n onFileSelected,\n error,\n id = 'file',\n placeholder,\n value,\n accept,\n className = '',\n ...rest\n}) => {\n const [fileName, setFileName] = useState<string>(value?.file.name ?? '');\n const [progress, setProgress] = useState<number>(0);\n const [uploading, setUploading] = useState<boolean>(false);\n const [dragging, setDragging] = useState<boolean>(false);\n\n const handleDragIn = (e: DragEvent): void => {\n e.preventDefault();\n e.stopPropagation();\n if (!dragging && e.dataTransfer?.items && e.dataTransfer.items.length > 0) {\n setDragging(true);\n }\n };\n\n const handleDragOut = (e: MouseEvent): void => {\n e.preventDefault();\n e.stopPropagation();\n if (dragging) {\n setDragging(false);\n }\n };\n\n const handleDrop = (e: React.DragEvent<HTMLDivElement>): void => {\n e.preventDefault();\n e.stopPropagation();\n\n const file = e.dataTransfer?.files.item(0);\n\n // Checks MIME Types, if set. Exits if type is unsupported\n if (accept !== undefined && file?.type !== undefined) {\n if (!accept.includes(file.type)) {\n setDragging(false);\n return;\n }\n }\n\n file && fileSelected(file);\n\n setDragging(false);\n };\n\n useEffect(() => {\n document.addEventListener('dragover', handleDragIn);\n document.addEventListener('mouseover', handleDragOut);\n\n return () => {\n document.removeEventListener('dragover', handleDragIn);\n document.removeEventListener('mouseover', handleDragOut);\n };\n });\n\n const onUploadStarted = useCallback(() => {\n setUploading(true);\n }, []);\n\n const onUploadProgress = useCallback((progress: number) => {\n setUploading(true);\n setProgress(progress);\n }, []);\n\n const onUploadCompleted = useCallback(() => {\n setUploading(false);\n setProgress(0);\n }, []);\n\n const fileSelected = (file: File): void => {\n onFileSelected &&\n onFileSelected({\n file,\n uploadStarted: onUploadStarted,\n uploadProgress: onUploadProgress,\n uploadCompleted: onUploadCompleted,\n });\n };\n\n useEffect(() => {\n setFileName(value?.file.name ?? '');\n if (value) {\n value.uploadCompleted = onUploadCompleted;\n value.uploadProgress = onUploadProgress;\n value.uploadStarted = onUploadStarted;\n }\n }, [onUploadCompleted, onUploadProgress, onUploadStarted, value]);\n\n return (\n <FormElementContainer\n {...rest}\n className={clsx(\n classes.container,\n 'file-upload-control-container',\n className,\n )}\n error={error}\n dataTestFieldType=\"FileUpload\"\n >\n <div className={clsx(classes.content)}>\n {dragging ? (\n <div className={clsx(classes.dropTarget)} onDrop={handleDrop}>\n DROP YOUR FILE HERE!\n </div>\n ) : (\n <>\n <input\n className={clsx({\n [classes.hasError]: error !== undefined,\n [classes.filename]: true,\n })}\n value={fileName}\n onChange={noop}\n placeholder={placeholder}\n />\n <label className={clsx(classes.fileuploadbutton)} htmlFor={id}>\n <Icons icon={IconName.File} />\n </label>\n <input\n id={id}\n type=\"file\"\n accept={accept}\n onChange={(event) => {\n const file = event.target.files?.item(0);\n file && fileSelected(file);\n }}\n />\n </>\n )}\n <div\n className={clsx(classes.progressbar)}\n style={{ display: uploading ? 'block' : 'none' }}\n >\n <ProgressBar kind=\"simple\" progress={progress} />\n </div>\n </div>\n </FormElementContainer>\n );\n};\n","import { useField } from 'formik';\nimport React from 'react';\nimport { useFormikError } from '../useFormikError';\nimport { FileUploadControl, FileUploadProps } from './FileUploadControl';\n\nexport const FileUploadField: React.FC<\n Omit<FileUploadProps, 'onFileSelected' | 'error'>\n> = (props) => {\n const { name } = props;\n const error = useFormikError(props.name);\n const [field, , helpers] = useField(name);\n\n return (\n <FileUploadControl\n {...props}\n value={field.value}\n onFileSelected={helpers.setValue}\n error={error}\n />\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport classes from './FormGroupTitle.scss';\n\nexport interface FormGroupTitleProps {\n className?: string;\n /** Group title to display */\n title: string;\n}\n\nexport const FormGroupTitle: React.FC<FormGroupTitleProps> = ({\n className = '',\n title,\n}) => (\n <div\n className={clsx(classes.container, 'FormGroupTitle-container', className)}\n >\n {title}\n </div>\n);\n","import { useFormikContext } from 'formik';\nimport React from 'react';\nimport classes from './FormikDebug.scss';\n\nexport const FormikDebug = (): JSX.Element => {\n const ctx = useFormikContext();\n return (\n <div className={classes.container}>\n <label>Formik Context</label>\n <div className={classes.value}>\n <pre>{JSON.stringify(ctx, null, 2)}</pre>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { BaseFormControl } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport { useFormikError } from '../useFormikError';\n\nexport type GenericFieldProps = BaseFormControl & {\n /** Height of the label (default: 50px) */\n labelHeight?: string;\n stickyLabel?: boolean;\n};\n\n/**\n * A Generic Field component which can be used to create custom Field component using the styles from @axinom/mosaic-ui.\n * @example <GenericField label={label} name={name}>\n * {fieldContent}\n * </GenericField>\n */\nexport const GenericField: React.FC<GenericFieldProps> = ({\n name,\n labelHeight,\n ...rest\n}) => {\n const error = useFormikError(name);\n\n return (\n <FormElementContainer\n {...rest}\n error={error}\n minHeight={labelHeight}\n dataTestFieldType=\"GenericField\"\n />\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { BaseFormElement } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './LinkField.scss';\n\nexport interface LinkFieldProps extends BaseFormElement {\n /** Value to be displayed */\n value?: string | number;\n /** URL to navigate to */\n url?: string;\n /** Download file name. (default: unset) */\n download?: string;\n}\n/**\n * This component renders a read only field containing a link into a form.\n */\nexport const LinkField: React.FC<LinkFieldProps> = ({\n value = '',\n url,\n download,\n className = '',\n ...rest\n}) => {\n return (\n <FormElementContainer\n {...rest}\n className={clsx(classes.container, 'link-field-container', className)}\n minHeight=\"auto\"\n dataTestFieldType=\"Link\"\n >\n <a\n className={clsx(classes.value)}\n href={url}\n target=\"_blank\"\n rel=\"noreferrer\"\n download={download}\n >\n {value}\n </a>\n </FormElementContainer>\n );\n};\n","function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nexport { _objectWithoutPropertiesLoose as _ };\n","/**\n * Applies mask on element.\n * @constructor\n * @param {HTMLInputElement|HTMLTextAreaElement|MaskElement} el - Element to apply mask\n * @param {Object} opts - Custom mask options\n * @return {InputMask}\n */\nfunction IMask(el) {\n let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n","import IMask from './holder.js';\n\n/**\n Provides details of changing model value\n @param {Object} [details]\n @param {string} [details.inserted] - Inserted symbols\n @param {boolean} [details.skip] - Can skip chars\n @param {number} [details.removeCount] - Removed symbols count\n @param {number} [details.tailShift] - Additional offset if any changes occurred before tail\n*/\nclass ChangeDetails {\n /** Inserted symbols */\n\n /** Can skip chars */\n\n /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n constructor(details) {\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n skip: false,\n tailShift: 0\n }, details);\n }\n\n /**\n Aggregate changes\n @returns {ChangeDetails} `this`\n */\n aggregate(details) {\n this.rawInserted += details.rawInserted;\n this.skip = this.skip || details.skip;\n this.inserted += details.inserted;\n this.tailShift += details.tailShift;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n}\nIMask.ChangeDetails = ChangeDetails;\n\nexport { ChangeDetails as default };\n","import ChangeDetails from './change-details.js';\nimport './holder.js';\n\n/** Checks if value is string */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n\n/**\n Direction\n @prop {string} NONE\n @prop {string} LEFT\n @prop {string} FORCE_LEFT\n @prop {string} RIGHT\n @prop {string} FORCE_RIGHT\n*/\nconst DIRECTION = {\n NONE: 'NONE',\n LEFT: 'LEFT',\n FORCE_LEFT: 'FORCE_LEFT',\n RIGHT: 'RIGHT',\n FORCE_RIGHT: 'FORCE_RIGHT'\n};\n/**\n Direction\n @enum {string}\n*/\n\n/** Returns next char index in direction */\nfunction indexInDirection(pos, direction) {\n if (direction === DIRECTION.LEFT) --pos;\n return pos;\n}\n\n/** Returns next char position in direction */\nfunction posInDirection(pos, direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return --pos;\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return ++pos;\n default:\n return pos;\n }\n}\n\n/** */\nfunction forceDirection(direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n default:\n return direction;\n }\n}\n\n/** Escapes regular expression control chars */\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n}\nfunction normalizePrepare(prep) {\n return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n}\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nfunction objectIncludes(b, a) {\n if (a === b) return true;\n var arrA = Array.isArray(a),\n arrB = Array.isArray(b),\n i;\n if (arrA && arrB) {\n if (a.length != b.length) return false;\n for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false;\n return true;\n }\n if (arrA != arrB) return false;\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n var dateA = a instanceof Date,\n dateB = b instanceof Date;\n if (dateA && dateB) return a.getTime() == b.getTime();\n if (dateA != dateB) return false;\n var regexpA = a instanceof RegExp,\n regexpB = b instanceof RegExp;\n if (regexpA && regexpB) return a.toString() == b.toString();\n if (regexpA != regexpB) return false;\n var keys = Object.keys(a);\n // if (keys.length !== Object.keys(b).length) return false;\n\n for (i = 0; i < keys.length; i++)\n // $FlowFixMe ... ???\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString();\n }\n return false;\n}\n\n/** Selection range */\n\nexport { DIRECTION, escapeRegExp, forceDirection, indexInDirection, isString, normalizePrepare, objectIncludes, posInDirection };\n","import { DIRECTION } from './utils.js';\nimport './change-details.js';\nimport './holder.js';\n\n/** Provides details of changing input */\nclass ActionDetails {\n /** Current input value */\n\n /** Current cursor position */\n\n /** Old input value */\n\n /** Old selection */\n\n constructor(value, cursorPos, oldValue, oldSelection) {\n this.value = value;\n this.cursorPos = cursorPos;\n this.oldValue = oldValue;\n this.oldSelection = oldSelection;\n\n // double check if left part was changed (autofilling, other non-standard input triggers)\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n }\n\n /**\n Start changing position\n @readonly\n */\n get startChangePos() {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n\n /**\n Inserted symbols count\n @readonly\n */\n get insertedCount() {\n return this.cursorPos - this.startChangePos;\n }\n\n /**\n Inserted symbols\n @readonly\n */\n get inserted() {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n\n /**\n Removed symbols count\n @readonly\n */\n get removedCount() {\n // Math.max for opposite operation\n return Math.max(this.oldSelection.end - this.startChangePos ||\n // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n\n /**\n Removed symbols\n @readonly\n */\n get removed() {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n\n /**\n Unchanged head symbols\n @readonly\n */\n get head() {\n return this.value.substring(0, this.startChangePos);\n }\n\n /**\n Unchanged tail symbols\n @readonly\n */\n get tail() {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n\n /**\n Remove direction\n @readonly\n */\n get removeDirection() {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n // align right if delete at right\n return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&\n // if not range removed (event with backspace)\n this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n }\n}\n\nexport { ActionDetails as default };\n","/** Provides details of continuous extracted tail */\nclass ContinuousTailDetails {\n /** Tail value as string */\n\n /** Tail start position */\n\n /** Start position */\n\n constructor() {\n let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n let stop = arguments.length > 2 ? arguments[2] : undefined;\n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n toString() {\n return this.value;\n }\n extend(tail) {\n this.value += String(tail);\n }\n appendTo(masked) {\n return masked.append(this.toString(), {\n tail: true\n }).aggregate(masked._appendPlaceholder());\n }\n get state() {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop\n };\n }\n set state(state) {\n Object.assign(this, state);\n }\n unshift(beforePos) {\n if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n const shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n shift() {\n if (!this.value.length) return '';\n const shiftChar = this.value[this.value.length - 1];\n this.value = this.value.slice(0, -1);\n return shiftChar;\n }\n}\n\nexport { ContinuousTailDetails as default };\n","import ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { isString, normalizePrepare, DIRECTION, forceDirection } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n/** Supported mask type */\n\n/** Append flags */\n\n/** Extract flags */\n\n/** Provides common masking stuff */\nclass Masked {\n // $Shape<MaskedOptions>; TODO after fix https://github.com/facebook/flow/issues/4773\n\n /** @type {Mask} */\n\n /** */ // $FlowFixMe no ideas\n /** Transforms value before mask processing */\n /** Validates if value is acceptable */\n /** Does additional processing in the end of editing */\n /** Format typed value to string */\n /** Parse strgin to get typed value */\n /** Enable characters overwriting */\n /** */\n /** */\n /** */\n constructor(opts) {\n this._value = '';\n this._update(Object.assign({}, Masked.DEFAULTS, opts));\n this.isInitialized = true;\n }\n\n /** Sets and applies new options */\n updateOptions(opts) {\n if (!Object.keys(opts).length) return;\n // $FlowFixMe\n this.withValueRefresh(this._update.bind(this, opts));\n }\n\n /**\n Sets new options\n @protected\n */\n _update(opts) {\n Object.assign(this, opts);\n }\n\n /** Mask state */\n get state() {\n return {\n _value: this.value\n };\n }\n set state(state) {\n this._value = state._value;\n }\n\n /** Resets value */\n reset() {\n this._value = '';\n }\n\n /** */\n get value() {\n return this._value;\n }\n set value(value) {\n this.resolve(value);\n }\n\n /** Resolve new value */\n resolve(value) {\n this.reset();\n this.append(value, {\n input: true\n }, '');\n this.doCommit();\n return this.value;\n }\n\n /** */\n get unmaskedValue() {\n return this.value;\n }\n set unmaskedValue(value) {\n this.reset();\n this.append(value, {}, '');\n this.doCommit();\n }\n\n /** */\n get typedValue() {\n return this.doParse(this.value);\n }\n set typedValue(value) {\n this.value = this.doFormat(value);\n }\n\n /** Value that includes raw user input */\n get rawInputValue() {\n return this.extractInput(0, this.value.length, {\n raw: true\n });\n }\n set rawInputValue(value) {\n this.reset();\n this.append(value, {\n raw: true\n }, '');\n this.doCommit();\n }\n get displayValue() {\n return this.value;\n }\n\n /** */\n get isComplete() {\n return true;\n }\n\n /** */\n get isFilled() {\n return this.isComplete;\n }\n\n /** Finds nearest input position in direction */\n nearestInputPos(cursorPos, direction) {\n return cursorPos;\n }\n totalInputPositions() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return Math.min(this.value.length, toPos - fromPos);\n }\n\n /** Extracts value in range considering flags */\n extractInput() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return this.value.slice(fromPos, toPos);\n }\n\n /** Extracts tail in range */\n extractTail() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n\n /** Appends tail */\n // $FlowFixMe no ideas\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n\n /** Appends char */\n _appendCharRaw(ch) {\n if (!ch) return new ChangeDetails();\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch\n });\n }\n\n /** Appends char */\n _appendChar(ch) {\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let checkTail = arguments.length > 2 ? arguments[2] : undefined;\n const consistentState = this.state;\n let details;\n [ch, details] = normalizePrepare(this.doPrepare(ch, flags));\n details = details.aggregate(this._appendCharRaw(ch, flags));\n if (details.inserted) {\n let consistentTail;\n let appended = this.doValidate(flags) !== false;\n if (appended && checkTail != null) {\n // validation ok, check tail\n const beforeTailState = this.state;\n if (this.overwrite === true) {\n consistentTail = checkTail.state;\n checkTail.unshift(this.value.length - details.tailShift);\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted === checkTail.toString();\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n checkTail.shift();\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted === checkTail.toString();\n }\n\n // if ok, rollback state after tail\n if (appended && tailDetails.inserted) this.state = beforeTailState;\n }\n\n // revert all if something went wrong\n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n return details;\n }\n\n /** Appends optional placeholder at end */\n _appendPlaceholder() {\n return new ChangeDetails();\n }\n\n /** Appends optional eager placeholder at end */\n _appendEager() {\n return new ChangeDetails();\n }\n\n /** Appends symbols considering flags */\n // $FlowFixMe no ideas\n append(str, flags, tail) {\n if (!isString(str)) throw new Error('value should be string');\n const details = new ChangeDetails();\n const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags !== null && flags !== void 0 && flags.tail) flags._beforeTailState = this.state;\n for (let ci = 0; ci < str.length; ++ci) {\n const d = this._appendChar(str[ci], flags, checkTail);\n if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break;\n details.aggregate(d);\n }\n\n // append tail but aggregate only tailShift\n if (checkTail != null) {\n details.tailShift += this.appendTail(checkTail).tailShift;\n // TODO it's a good idea to clear state after appending ends\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n // this._resetBeforeTailState();\n }\n\n if ((this.eager === true || this.eager === 'append') && flags !== null && flags !== void 0 && flags.input && str) {\n details.aggregate(this._appendEager());\n }\n return details;\n }\n\n /** */\n remove() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n this._value = this.value.slice(0, fromPos) + this.value.slice(toPos);\n return new ChangeDetails();\n }\n\n /** Calls function and reapplies current value */\n withValueRefresh(fn) {\n if (this._refreshing || !this.isInitialized) return fn();\n this._refreshing = true;\n const rawInput = this.rawInputValue;\n const value = this.value;\n const ret = fn();\n this.rawInputValue = rawInput;\n // append lost trailing chars at end\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.value.length), {}, '');\n }\n delete this._refreshing;\n return ret;\n }\n\n /** */\n runIsolated(fn) {\n if (this._isolated || !this.isInitialized) return fn(this);\n this._isolated = true;\n const state = this.state;\n const ret = fn(this);\n this.state = state;\n delete this._isolated;\n return ret;\n }\n\n /** */\n doSkipInvalid(ch) {\n return this.skipInvalid;\n }\n\n /**\n Prepares string before mask processing\n @protected\n */\n doPrepare(str) {\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return this.prepare ? this.prepare(str, this, flags) : str;\n }\n\n /**\n Validates if value is acceptable\n @protected\n */\n doValidate(flags) {\n return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n }\n\n /**\n Does additional processing in the end of editing\n @protected\n */\n doCommit() {\n if (this.commit) this.commit(this.value, this);\n }\n\n /** */\n doFormat(value) {\n return this.format ? this.format(value, this) : value;\n }\n\n /** */\n doParse(str) {\n return this.parse ? this.parse(str, this) : str;\n }\n\n /** */\n splice(start, deleteCount, inserted, removeDirection) {\n let flags = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n input: true\n };\n const tailPos = start + deleteCount;\n const tail = this.extractTail(tailPos);\n const eagerRemove = this.eager === true || this.eager === 'remove';\n let oldRawValue;\n if (eagerRemove) {\n removeDirection = forceDirection(removeDirection);\n oldRawValue = this.extractInput(0, tailPos, {\n raw: true\n });\n }\n let startChangePos = start;\n const details = new ChangeDetails();\n\n // if it is just deletion without insertion\n if (removeDirection !== DIRECTION.NONE) {\n startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection);\n\n // adjust tailShift if start was aligned\n details.tailShift = startChangePos - start;\n }\n details.aggregate(this.remove(startChangePos));\n if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n if (removeDirection === DIRECTION.FORCE_LEFT) {\n let valLength;\n while (oldRawValue === this.rawInputValue && (valLength = this.value.length)) {\n details.aggregate(new ChangeDetails({\n tailShift: -1\n })).aggregate(this.remove(valLength - 1));\n }\n } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n tail.unshift();\n }\n }\n return details.aggregate(this.append(inserted, flags, tail));\n }\n maskEquals(mask) {\n return this.mask === mask;\n }\n typedValueEquals(value) {\n const tval = this.typedValue;\n return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || this.doFormat(value) === this.doFormat(this.typedValue);\n }\n}\nMasked.DEFAULTS = {\n format: String,\n parse: v => v,\n skipInvalid: true\n};\nMasked.EMPTY_VALUES = [undefined, null, ''];\nIMask.Masked = Masked;\n\nexport { Masked as default };\n","import { isString } from '../core/utils.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\n\n/** Get Masked class by mask type */\nfunction maskedClass(mask) {\n if (mask == null) {\n throw new Error('mask property should be defined');\n }\n\n // $FlowFixMe\n if (mask instanceof RegExp) return IMask.MaskedRegExp;\n // $FlowFixMe\n if (isString(mask)) return IMask.MaskedPattern;\n // $FlowFixMe\n if (mask instanceof Date || mask === Date) return IMask.MaskedDate;\n // $FlowFixMe\n if (mask instanceof Number || typeof mask === 'number' || mask === Number) return IMask.MaskedNumber;\n // $FlowFixMe\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n // $FlowFixMe\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n // $FlowFixMe\n if (mask instanceof IMask.Masked) return mask.constructor;\n // $FlowFixMe\n if (mask instanceof Function) return IMask.MaskedFunction;\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n // $FlowFixMe\n return IMask.Masked;\n}\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n // $FlowFixMe\n if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n opts = Object.assign({}, opts);\n const mask = opts.mask;\n\n // $FlowFixMe\n if (IMask.Masked && mask instanceof IMask.Masked) return mask;\n const MaskedClass = maskedClass(mask);\n if (!MaskedClass) throw new Error('Masked class is not found for provided mask, appropriate module needs to be import manually before creating mask.');\n return new MaskedClass(opts);\n}\nIMask.createMask = createMask;\n\nexport { createMask as default, maskedClass };\n","import { _ as _objectWithoutPropertiesLoose } from '../../_rollupPluginBabelHelpers-6b3bd404.js';\nimport createMask from '../factory.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION } from '../../core/utils.js';\nimport '../../core/holder.js';\n\nconst _excluded = [\"parent\", \"isOptional\", \"placeholderChar\", \"displayChar\", \"lazy\", \"eager\"];\n\n/** */\n\nconst DEFAULT_INPUT_DEFINITIONS = {\n '0': /\\d/,\n 'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // http://stackoverflow.com/a/22075070\n '*': /./\n};\n\n/** */\nclass PatternInputDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n const {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager\n } = opts,\n maskOpts = _objectWithoutPropertiesLoose(opts, _excluded);\n this.masked = createMask(maskOpts);\n Object.assign(this, {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager\n });\n }\n reset() {\n this.isFilled = false;\n this.masked.reset();\n }\n remove() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n if (fromPos === 0 && toPos >= 1) {\n this.isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n return new ChangeDetails();\n }\n get value() {\n return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n }\n get unmaskedValue() {\n return this.masked.unmaskedValue;\n }\n get displayValue() {\n return this.masked.value && this.displayChar || this.value;\n }\n get isComplete() {\n return Boolean(this.masked.value) || this.isOptional;\n }\n _appendChar(ch) {\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this.isFilled) return new ChangeDetails();\n const state = this.masked.state;\n // simulate input\n const details = this.masked._appendChar(ch, flags);\n if (details.inserted && this.doValidate(flags) === false) {\n details.inserted = details.rawInserted = '';\n this.masked.state = state;\n }\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n details.skip = !details.inserted && !this.isOptional;\n this.isFilled = Boolean(details.inserted);\n return details;\n }\n append() {\n // TODO probably should be done via _appendChar\n return this.masked.append(...arguments);\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled || this.isOptional) return details;\n this.isFilled = true;\n details.inserted = this.placeholderChar;\n return details;\n }\n _appendEager() {\n return new ChangeDetails();\n }\n extractTail() {\n return this.masked.extractTail(...arguments);\n }\n appendTail() {\n return this.masked.appendTail(...arguments);\n }\n extractInput() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n let flags = arguments.length > 2 ? arguments[2] : undefined;\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n nearestInputPos(cursorPos) {\n let direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n const minPos = 0;\n const maxPos = this.value.length;\n const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n case DIRECTION.NONE:\n default:\n return boundPos;\n }\n }\n totalInputPositions() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return this.value.slice(fromPos, toPos).length;\n }\n doValidate() {\n return this.masked.doValidate(...arguments) && (!this.parent || this.parent.doValidate(...arguments));\n }\n doCommit() {\n this.masked.doCommit();\n }\n get state() {\n return {\n masked: this.masked.state,\n isFilled: this.isFilled\n };\n }\n set state(state) {\n this.masked.state = state.masked;\n this.isFilled = state.isFilled;\n }\n}\n\nexport { DEFAULT_INPUT_DEFINITIONS, PatternInputDefinition as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport '../../core/holder.js';\n\n/** */\n\nclass PatternFixedDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n Object.assign(this, opts);\n this._value = '';\n this.isFixed = true;\n }\n get value() {\n return this._value;\n }\n get unmaskedValue() {\n return this.isUnmasking ? this.value : '';\n }\n get displayValue() {\n return this.value;\n }\n reset() {\n this._isRawInput = false;\n this._value = '';\n }\n remove() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._value.length;\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n if (!this._value) this._isRawInput = false;\n return new ChangeDetails();\n }\n nearestInputPos(cursorPos) {\n let direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n const minPos = 0;\n const maxPos = this._value.length;\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default:\n return maxPos;\n }\n }\n totalInputPositions() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._value.length;\n return this._isRawInput ? toPos - fromPos : 0;\n }\n extractInput() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._value.length;\n let flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return Boolean(this._value);\n }\n _appendChar(ch) {\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n const appendEager = this.eager === true || this.eager === 'append';\n const appended = this.char === ch;\n const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;\n if (isResolved) details.rawInserted = this.char;\n this._value = details.inserted = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n return details;\n }\n _appendEager() {\n return this._appendChar(this.char, {\n tail: true\n });\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n this._value = details.inserted = this.char;\n return details;\n }\n extractTail() {\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return new ContinuousTailDetails('');\n }\n\n // $FlowFixMe no ideas\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n append(str, flags, tail) {\n const details = this._appendChar(str[0], flags);\n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n return details;\n }\n doCommit() {}\n get state() {\n return {\n _value: this._value,\n _isRawInput: this._isRawInput\n };\n }\n set state(state) {\n Object.assign(this, state);\n }\n}\n\nexport { PatternFixedDefinition as default };\n","import { _ as _objectWithoutPropertiesLoose } from '../../_rollupPluginBabelHelpers-6b3bd404.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport IMask from '../../core/holder.js';\n\nconst _excluded = [\"chunks\"];\nclass ChunksTailDetails {\n /** */\n\n constructor() {\n let chunks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n this.chunks = chunks;\n this.from = from;\n }\n toString() {\n return this.chunks.map(String).join('');\n }\n\n // $FlowFixMe no ideas\n extend(tailChunk) {\n if (!String(tailChunk)) return;\n if (isString(tailChunk)) tailChunk = new ContinuousTailDetails(String(tailChunk));\n const lastChunk = this.chunks[this.chunks.length - 1];\n const extendLast = lastChunk && (\n // if stops are same or tail has no stop\n lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n // if tail chunk goes just after last chunk\n tailChunk.from === lastChunk.from + lastChunk.toString().length;\n if (tailChunk instanceof ContinuousTailDetails) {\n // check the ability to extend previous chunk\n if (extendLast) {\n // extend previous chunk\n lastChunk.extend(tailChunk.toString());\n } else {\n // append new chunk\n this.chunks.push(tailChunk);\n }\n } else if (tailChunk instanceof ChunksTailDetails) {\n if (tailChunk.stop == null) {\n // unwrap floating chunks to parent, keeping `from` pos\n let firstTailChunk;\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift();\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n }\n\n // if tail chunk still has value\n if (tailChunk.toString()) {\n // if chunks contains stops, then popup stop to container\n tailChunk.stop = tailChunk.blockIndex;\n this.chunks.push(tailChunk);\n }\n }\n }\n appendTo(masked) {\n // $FlowFixMe\n if (!(masked instanceof IMask.MaskedPattern)) {\n const tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n const details = new ChangeDetails();\n for (let ci = 0; ci < this.chunks.length && !details.skip; ++ci) {\n const chunk = this.chunks[ci];\n const lastBlockIter = masked._mapPosToBlock(masked.value.length);\n const stop = chunk.stop;\n let chunkBlock;\n if (stop != null && (\n // if block not found or stop is behind lastBlock\n !lastBlockIter || lastBlockIter.index <= stop)) {\n if (chunk instanceof ChunksTailDetails ||\n // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0) {\n const phDetails = masked._appendPlaceholder(stop);\n details.aggregate(phDetails);\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n tailDetails.skip = false; // always ignore skip, it will be set on last\n details.aggregate(tailDetails);\n masked._value += tailDetails.inserted;\n\n // get not inserted chars\n const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n if (remainChars) details.aggregate(masked.append(remainChars, {\n tail: true\n }));\n } else {\n details.aggregate(masked.append(chunk.toString(), {\n tail: true\n }));\n }\n }\n return details;\n }\n get state() {\n return {\n chunks: this.chunks.map(c => c.state),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex\n };\n }\n set state(state) {\n const {\n chunks\n } = state,\n props = _objectWithoutPropertiesLoose(state, _excluded);\n Object.assign(this, props);\n this.chunks = chunks.map(cstate => {\n const chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails();\n // $FlowFixMe already checked above\n chunk.state = cstate;\n return chunk;\n });\n }\n unshift(beforePos) {\n if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n let ci = 0;\n while (ci < this.chunks.length) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.unshift(chunkShiftPos);\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n ++ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n shift() {\n if (!this.chunks.length) return '';\n let ci = this.chunks.length - 1;\n while (0 <= ci) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.shift();\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n --ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n}\n\nexport { ChunksTailDetails as default };\n","import { DIRECTION } from '../../core/utils.js';\nimport '../../core/change-details.js';\nimport '../../core/holder.js';\n\nclass PatternCursor {\n constructor(masked, pos) {\n this.masked = masked;\n this._log = [];\n const {\n offset,\n index\n } = masked._mapPosToBlock(pos) || (pos < 0 ?\n // first\n {\n index: 0,\n offset: 0\n } :\n // last\n {\n index: this.masked._blocks.length,\n offset: 0\n });\n this.offset = offset;\n this.index = index;\n this.ok = false;\n }\n get block() {\n return this.masked._blocks[this.index];\n }\n get pos() {\n return this.masked._blockStartPos(this.index) + this.offset;\n }\n get state() {\n return {\n index: this.index,\n offset: this.offset,\n ok: this.ok\n };\n }\n set state(s) {\n Object.assign(this, s);\n }\n pushState() {\n this._log.push(this.state);\n }\n popState() {\n const s = this._log.pop();\n this.state = s;\n return s;\n }\n bindBlock() {\n if (this.block) return;\n if (this.index < 0) {\n this.index = 0;\n this.offset = 0;\n }\n if (this.index >= this.masked._blocks.length) {\n this.index = this.masked._blocks.length - 1;\n this.offset = this.block.value.length;\n }\n }\n _pushLeft(fn) {\n this.pushState();\n for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) === null || _this$block === void 0 ? void 0 : _this$block.value.length) || 0) {\n var _this$block;\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n _pushRight(fn) {\n this.pushState();\n for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n pushLeftBeforeFilled() {\n return this._pushLeft(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT);\n if (this.offset !== 0) return true;\n });\n }\n pushLeftBeforeInput() {\n // cases:\n // filled input: 00|\n // optional empty input: 00[]|\n // nested block: XX<[]>|\n return this._pushLeft(() => {\n if (this.block.isFixed) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushLeftBeforeRequired() {\n return this._pushLeft(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushRightBeforeFilled() {\n return this._pushRight(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT);\n if (this.offset !== this.block.value.length) return true;\n });\n }\n pushRightBeforeInput() {\n return this._pushRight(() => {\n if (this.block.isFixed) return;\n\n // const o = this.offset;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n // aa|X\n // aa<X|[]>X_ - this will not work\n // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n return true;\n });\n }\n pushRightBeforeRequired() {\n return this._pushRight(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n // TODO check |[*]XX_\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n return true;\n });\n }\n}\n\nexport { PatternCursor as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by RegExp */\nclass MaskedRegExp extends Masked {\n /**\n @override\n @param {Object} opts\n */\n _update(opts) {\n if (opts.mask) opts.validate = value => value.search(opts.mask) >= 0;\n super._update(opts);\n }\n}\nIMask.MaskedRegExp = MaskedRegExp;\n\nexport { MaskedRegExp as default };\n","import { _ as _objectWithoutPropertiesLoose } from '../_rollupPluginBabelHelpers-6b3bd404.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport PatternInputDefinition, { DEFAULT_INPUT_DEFINITIONS } from './pattern/input-definition.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport PatternCursor from './pattern/cursor.js';\nimport createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport './regexp.js';\nimport '../core/continuous-tail-details.js';\n\nconst _excluded = [\"_blocks\"];\n\n/**\n Pattern mask\n @param {Object} opts\n @param {Object} opts.blocks\n @param {Object} opts.definitions\n @param {string} opts.placeholderChar\n @param {string} opts.displayChar\n @param {boolean} opts.lazy\n*/\nclass MaskedPattern extends Masked {\n /** */\n\n /** */\n\n /** Single char for empty input */\n\n /** Single char for filled input */\n\n /** Show placeholder only when needed */\n\n constructor() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO type $Shape<MaskedPatternOptions>={} does not work\n opts.definitions = Object.assign({}, DEFAULT_INPUT_DEFINITIONS, opts.definitions);\n super(Object.assign({}, MaskedPattern.DEFAULTS, opts));\n }\n\n /**\n @override\n @param {Object} opts\n */\n _update() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n super._update(opts);\n this._rebuildMask();\n }\n\n /** */\n _rebuildMask() {\n const defs = this.definitions;\n this._blocks = [];\n this._stops = [];\n this._maskedBlocks = {};\n let pattern = this.mask;\n if (!pattern || !defs) return;\n let unmaskingBlock = false;\n let optionalBlock = false;\n for (let i = 0; i < pattern.length; ++i) {\n var _defs$char, _defs$char2;\n if (this.blocks) {\n const p = pattern.slice(i);\n const bNames = Object.keys(this.blocks).filter(bName => p.indexOf(bName) === 0);\n // order by key length\n bNames.sort((a, b) => b.length - a.length);\n // use block name with max length\n const bName = bNames[0];\n if (bName) {\n // $FlowFixMe no ideas\n const maskedBlock = createMask(Object.assign({\n parent: this,\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite\n }, this.blocks[bName]));\n if (maskedBlock) {\n this._blocks.push(maskedBlock);\n\n // store block index\n if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n this._maskedBlocks[bName].push(this._blocks.length - 1);\n }\n i += bName.length - 1;\n continue;\n }\n }\n let char = pattern[i];\n let isInput = (char in defs);\n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n continue;\n }\n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n isInput = false;\n }\n const maskOpts = (_defs$char = defs[char]) !== null && _defs$char !== void 0 && _defs$char.mask && !(((_defs$char2 = defs[char]) === null || _defs$char2 === void 0 ? void 0 : _defs$char2.mask.prototype) instanceof IMask.Masked) ? defs[char] : {\n mask: defs[char]\n };\n const def = isInput ? new PatternInputDefinition(Object.assign({\n parent: this,\n isOptional: optionalBlock,\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar\n }, maskOpts)) : new PatternFixedDefinition({\n char,\n eager: this.eager,\n isUnmasking: unmaskingBlock\n });\n this._blocks.push(def);\n }\n }\n\n /**\n @override\n */\n get state() {\n return Object.assign({}, super.state, {\n _blocks: this._blocks.map(b => b.state)\n });\n }\n set state(state) {\n const {\n _blocks\n } = state,\n maskedState = _objectWithoutPropertiesLoose(state, _excluded);\n this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n super.state = maskedState;\n }\n\n /**\n @override\n */\n reset() {\n super.reset();\n this._blocks.forEach(b => b.reset());\n }\n\n /**\n @override\n */\n get isComplete() {\n return this._blocks.every(b => b.isComplete);\n }\n\n /**\n @override\n */\n get isFilled() {\n return this._blocks.every(b => b.isFilled);\n }\n get isFixed() {\n return this._blocks.every(b => b.isFixed);\n }\n get isOptional() {\n return this._blocks.every(b => b.isOptional);\n }\n\n /**\n @override\n */\n doCommit() {\n this._blocks.forEach(b => b.doCommit());\n super.doCommit();\n }\n\n /**\n @override\n */\n get unmaskedValue() {\n return this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n }\n set unmaskedValue(unmaskedValue) {\n super.unmaskedValue = unmaskedValue;\n }\n\n /**\n @override\n */\n get value() {\n // TODO return _value when not in change?\n return this._blocks.reduce((str, b) => str += b.value, '');\n }\n set value(value) {\n super.value = value;\n }\n get displayValue() {\n return this._blocks.reduce((str, b) => str += b.displayValue, '');\n }\n\n /**\n @override\n */\n appendTail(tail) {\n return super.appendTail(tail).aggregate(this._appendPlaceholder());\n }\n\n /**\n @override\n */\n _appendEager() {\n var _this$_mapPosToBlock;\n const details = new ChangeDetails();\n let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.value.length)) === null || _this$_mapPosToBlock === void 0 ? void 0 : _this$_mapPosToBlock.index;\n if (startBlockIndex == null) return details;\n\n // TODO test if it works for nested pattern masks\n if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n const d = this._blocks[bi]._appendEager();\n if (!d.inserted) break;\n details.aggregate(d);\n }\n return details;\n }\n\n /**\n @override\n */\n _appendCharRaw(ch) {\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const blockIter = this._mapPosToBlock(this.value.length);\n const details = new ChangeDetails();\n if (!blockIter) return details;\n for (let bi = blockIter.index;; ++bi) {\n var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n const block = this._blocks[bi];\n if (!block) break;\n const blockDetails = block._appendChar(ch, Object.assign({}, flags, {\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) === null || _flags$_beforeTailSta === void 0 ? void 0 : (_flags$_beforeTailSta2 = _flags$_beforeTailSta._blocks) === null || _flags$_beforeTailSta2 === void 0 ? void 0 : _flags$_beforeTailSta2[bi]\n }));\n const skip = blockDetails.skip;\n details.aggregate(blockDetails);\n if (skip || blockDetails.rawInserted) break; // go next char\n }\n\n return details;\n }\n\n /**\n @override\n */\n extractTail() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n const chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n const blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = this._findStopBefore(bi);\n blockChunk.from = this._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n chunkTail.extend(blockChunk);\n });\n return chunkTail;\n }\n\n /**\n @override\n */\n extractInput() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n let flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (fromPos === toPos) return '';\n let input = '';\n this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n input += b.extractInput(fromPos, toPos, flags);\n });\n return input;\n }\n _findStopBefore(blockIndex) {\n let stopBefore;\n for (let si = 0; si < this._stops.length; ++si) {\n const stop = this._stops[si];\n if (stop <= blockIndex) stopBefore = stop;else break;\n }\n return stopBefore;\n }\n\n /** Appends placeholder depending on laziness */\n _appendPlaceholder(toBlockIndex) {\n const details = new ChangeDetails();\n if (this.lazy && toBlockIndex == null) return details;\n const startBlockIter = this._mapPosToBlock(this.value.length);\n if (!startBlockIter) return details;\n const startBlockIndex = startBlockIter.index;\n const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n this._blocks.slice(startBlockIndex, endBlockIndex).forEach(b => {\n if (!b.lazy || toBlockIndex != null) {\n // $FlowFixMe `_blocks` may not be present\n const args = b._blocks != null ? [b._blocks.length] : [];\n const bDetails = b._appendPlaceholder(...args);\n this._value += bDetails.inserted;\n details.aggregate(bDetails);\n }\n });\n return details;\n }\n\n /** Finds block in pos */\n _mapPosToBlock(pos) {\n let accVal = '';\n for (let bi = 0; bi < this._blocks.length; ++bi) {\n const block = this._blocks[bi];\n const blockStartPos = accVal.length;\n accVal += block.value;\n if (pos <= accVal.length) {\n return {\n index: bi,\n offset: pos - blockStartPos\n };\n }\n }\n }\n\n /** */\n _blockStartPos(blockIndex) {\n return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.value.length, 0);\n }\n\n /** */\n _forEachBlocksInRange(fromPos) {\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n let fn = arguments.length > 2 ? arguments[2] : undefined;\n const fromBlockIter = this._mapPosToBlock(fromPos);\n if (fromBlockIter) {\n const toBlockIter = this._mapPosToBlock(toPos);\n // process first block\n const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n const fromBlockStartPos = fromBlockIter.offset;\n const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].value.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n fn(this._blocks[bi], bi, 0, this._blocks[bi].value.length);\n }\n\n // process last block\n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n }\n }\n }\n\n /**\n @override\n */\n remove() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n const removeDetails = super.remove(fromPos, toPos);\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n return removeDetails;\n }\n\n /**\n @override\n */\n nearestInputPos(cursorPos) {\n let direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n if (!this._blocks.length) return 0;\n const cursor = new PatternCursor(this, cursorPos);\n if (direction === DIRECTION.NONE) {\n // -------------------------------------------------\n // NONE should only go out from fixed to the right!\n // -------------------------------------------------\n if (cursor.pushRightBeforeInput()) return cursor.pos;\n cursor.popState();\n if (cursor.pushLeftBeforeInput()) return cursor.pos;\n return this.value.length;\n }\n\n // FORCE is only about a|* otherwise is 0\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // try to break fast when *|a\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeFilled();\n if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n cursor.popState();\n }\n\n // forward flow\n cursor.pushLeftBeforeInput();\n cursor.pushLeftBeforeRequired();\n cursor.pushLeftBeforeFilled();\n\n // backward flow\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n }\n if (cursor.ok) return cursor.pos;\n if (direction === DIRECTION.FORCE_LEFT) return 0;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n\n // cursor.popState();\n // if (\n // cursor.pushRightBeforeInput() &&\n // // TODO HACK for lazy if has aligned left inside fixed and has came to the start - use start position\n // (!this.lazy || this.extractInput())\n // ) return cursor.pos;\n\n return 0;\n }\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // forward flow\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.pushRightBeforeFilled()) return cursor.pos;\n if (direction === DIRECTION.FORCE_RIGHT) return this.value.length;\n\n // backward flow\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n }\n return cursorPos;\n }\n\n /**\n @override\n */\n totalInputPositions() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n let total = 0;\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n total += b.totalInputPositions(bFromPos, bToPos);\n });\n return total;\n }\n\n /** Get block by name */\n maskedBlock(name) {\n return this.maskedBlocks(name)[0];\n }\n\n /** Get all blocks by name */\n maskedBlocks(name) {\n const indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(gi => this._blocks[gi]);\n }\n}\nMaskedPattern.DEFAULTS = {\n lazy: true,\n placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\nIMask.MaskedPattern = MaskedPattern;\n\nexport { MaskedPattern as default };\n","import MaskedPattern from './pattern.js';\nimport '../core/change-details.js';\nimport { normalizePrepare } from '../core/utils.js';\nimport IMask from '../core/holder.js';\nimport '../_rollupPluginBabelHelpers-6b3bd404.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/input-definition.js';\nimport './factory.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './regexp.js';\n\n/** Pattern which accepts ranges */\nclass MaskedRange extends MaskedPattern {\n /**\n Optionally sets max length of pattern.\n Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n */\n\n /** Min bound */\n\n /** Max bound */\n\n /** */\n\n get _matchFrom() {\n return this.maxLength - String(this.from).length;\n }\n\n /**\n @override\n */\n _update(opts) {\n // TODO type\n opts = Object.assign({\n to: this.to || 0,\n from: this.from || 0,\n maxLength: this.maxLength || 0\n }, opts);\n let maxLength = String(opts.to).length;\n if (opts.maxLength != null) maxLength = Math.max(maxLength, opts.maxLength);\n opts.maxLength = maxLength;\n const fromStr = String(opts.from).padStart(maxLength, '0');\n const toStr = String(opts.to).padStart(maxLength, '0');\n let sameCharsCount = 0;\n while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount;\n opts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(maxLength - sameCharsCount);\n super._update(opts);\n }\n\n /**\n @override\n */\n get isComplete() {\n return super.isComplete && Boolean(this.value);\n }\n boundaries(str) {\n let minstr = '';\n let maxstr = '';\n const [, placeholder, num] = str.match(/^(\\D*)(\\d*)(\\D*)/) || [];\n if (num) {\n minstr = '0'.repeat(placeholder.length) + num;\n maxstr = '9'.repeat(placeholder.length) + num;\n }\n minstr = minstr.padEnd(this.maxLength, '0');\n maxstr = maxstr.padEnd(this.maxLength, '9');\n return [minstr, maxstr];\n }\n\n // TODO str is a single char everytime\n /**\n @override\n */\n doPrepare(ch) {\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let details;\n [ch, details] = normalizePrepare(super.doPrepare(ch.replace(/\\D/g, ''), flags));\n if (!this.autofix || !ch) return ch;\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n let nextVal = this.value + ch;\n if (nextVal.length > this.maxLength) return '';\n const [minstr, maxstr] = this.boundaries(nextVal);\n if (Number(maxstr) < this.from) return fromStr[nextVal.length - 1];\n if (Number(minstr) > this.to) {\n if (this.autofix === 'pad' && nextVal.length < this.maxLength) {\n return ['', details.aggregate(this.append(fromStr[nextVal.length - 1] + ch, flags))];\n }\n return toStr[nextVal.length - 1];\n }\n return ch;\n }\n\n /**\n @override\n */\n doValidate() {\n const str = this.value;\n const firstNonZero = str.search(/[^0]/);\n if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n const [minstr, maxstr] = this.boundaries(str);\n return this.from <= Number(maxstr) && Number(minstr) <= this.to && super.doValidate(...arguments);\n }\n}\nIMask.MaskedRange = MaskedRange;\n\nexport { MaskedRange as default };\n","import MaskedPattern from './pattern.js';\nimport MaskedRange from './range.js';\nimport IMask from '../core/holder.js';\nimport '../_rollupPluginBabelHelpers-6b3bd404.js';\nimport '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/input-definition.js';\nimport './factory.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './regexp.js';\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** */\n\n /**\n @param {Object} opts\n */\n constructor(opts) {\n super(Object.assign({}, MaskedDate.DEFAULTS, opts));\n }\n\n /**\n @override\n */\n _update(opts) {\n if (opts.mask === Date) delete opts.mask;\n if (opts.pattern) opts.mask = opts.pattern;\n const blocks = opts.blocks;\n opts.blocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS());\n // adjust year block\n if (opts.min) opts.blocks.Y.from = opts.min.getFullYear();\n if (opts.max) opts.blocks.Y.to = opts.max.getFullYear();\n if (opts.min && opts.max && opts.blocks.Y.from === opts.blocks.Y.to) {\n opts.blocks.m.from = opts.min.getMonth() + 1;\n opts.blocks.m.to = opts.max.getMonth() + 1;\n if (opts.blocks.m.from === opts.blocks.m.to) {\n opts.blocks.d.from = opts.min.getDate();\n opts.blocks.d.to = opts.max.getDate();\n }\n }\n Object.assign(opts.blocks, this.blocks, blocks);\n\n // add autofix\n Object.keys(opts.blocks).forEach(bk => {\n const b = opts.blocks[bk];\n if (!('autofix' in b) && 'autofix' in opts) b.autofix = opts.autofix;\n });\n super._update(opts);\n }\n\n /**\n @override\n */\n doValidate() {\n const date = this.date;\n return super.doValidate(...arguments) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n }\n\n /** Checks if date is exists */\n isDateExist(str) {\n return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n }\n\n /** Parsed Date */\n get date() {\n return this.typedValue;\n }\n set date(date) {\n this.typedValue = date;\n }\n\n /**\n @override\n */\n get typedValue() {\n return this.isComplete ? super.typedValue : null;\n }\n set typedValue(value) {\n super.typedValue = value;\n }\n\n /**\n @override\n */\n maskEquals(mask) {\n return mask === Date || super.maskEquals(mask);\n }\n}\nMaskedDate.DEFAULTS = {\n pattern: 'd{.}`m{.}`Y',\n format: date => {\n if (!date) return '';\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n return [day, month, year].join('.');\n },\n parse: str => {\n const [day, month, year] = str.split('.');\n return new Date(year, month - 1, day);\n }\n};\nMaskedDate.GET_DEFAULT_BLOCKS = () => ({\n d: {\n mask: MaskedRange,\n from: 1,\n to: 31,\n maxLength: 2\n },\n m: {\n mask: MaskedRange,\n from: 1,\n to: 12,\n maxLength: 2\n },\n Y: {\n mask: MaskedRange,\n from: 1900,\n to: 9999\n }\n});\nIMask.MaskedDate = MaskedDate;\n\nexport { MaskedDate as default };\n","import IMask from '../core/holder.js';\n\n/**\n Generic element API to use with mask\n @interface\n*/\nclass MaskElement {\n /** */\n\n /** */\n\n /** */\n\n /** Safely returns selection start */\n get selectionStart() {\n let start;\n try {\n start = this._unsafeSelectionStart;\n } catch (e) {}\n return start != null ? start : this.value.length;\n }\n\n /** Safely returns selection end */\n get selectionEnd() {\n let end;\n try {\n end = this._unsafeSelectionEnd;\n } catch (e) {}\n return end != null ? end : this.value.length;\n }\n\n /** Safely sets element selection */\n select(start, end) {\n if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n try {\n this._unsafeSelect(start, end);\n } catch (e) {}\n }\n\n /** Should be overriden in subclasses */\n _unsafeSelect(start, end) {}\n /** Should be overriden in subclasses */\n get isActive() {\n return false;\n }\n /** Should be overriden in subclasses */\n bindEvents(handlers) {}\n /** Should be overriden in subclasses */\n unbindEvents() {}\n}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n","import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\n/** Bridge between HTMLElement and {@link Masked} */\nclass HTMLMaskElement extends MaskElement {\n /** Mapping between HTMLElement events and mask internal events */\n\n /** HTMLElement to use mask on */\n\n /**\n @param {HTMLInputElement|HTMLTextAreaElement} input\n */\n constructor(input) {\n super();\n this.input = input;\n this._handlers = {};\n }\n\n /** */\n // $FlowFixMe https://github.com/facebook/flow/issues/2839\n get rootElement() {\n var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) === null || _this$input$getRootNo2 === void 0 ? void 0 : _this$input$getRootNo2.call(_this$input)) !== null && _this$input$getRootNo !== void 0 ? _this$input$getRootNo : document;\n }\n\n /**\n Is element in focus\n @readonly\n */\n get isActive() {\n //$FlowFixMe\n return this.input === this.rootElement.activeElement;\n }\n\n /**\n Returns HTMLElement selection start\n @override\n */\n get _unsafeSelectionStart() {\n return this.input.selectionStart;\n }\n\n /**\n Returns HTMLElement selection end\n @override\n */\n get _unsafeSelectionEnd() {\n return this.input.selectionEnd;\n }\n\n /**\n Sets HTMLElement selection\n @override\n */\n _unsafeSelect(start, end) {\n this.input.setSelectionRange(start, end);\n }\n\n /**\n HTMLElement value\n @override\n */\n get value() {\n return this.input.value;\n }\n set value(value) {\n this.input.value = value;\n }\n\n /**\n Binds HTMLElement events to mask internal events\n @override\n */\n bindEvents(handlers) {\n Object.keys(handlers).forEach(event => this._toggleEventHandler(HTMLMaskElement.EVENTS_MAP[event], handlers[event]));\n }\n\n /**\n Unbinds HTMLElement events to mask internal events\n @override\n */\n unbindEvents() {\n Object.keys(this._handlers).forEach(event => this._toggleEventHandler(event));\n }\n\n /** */\n _toggleEventHandler(event, handler) {\n if (this._handlers[event]) {\n this.input.removeEventListener(event, this._handlers[event]);\n delete this._handlers[event];\n }\n if (handler) {\n this.input.addEventListener(event, handler);\n this._handlers[event] = handler;\n }\n }\n}\nHTMLMaskElement.EVENTS_MAP = {\n selectionChange: 'keydown',\n input: 'input',\n drop: 'drop',\n click: 'click',\n focus: 'focus',\n commit: 'blur'\n};\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n /**\n Returns HTMLElement selection start\n @override\n */\n get _unsafeSelectionStart() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /**\n Returns HTMLElement selection end\n @override\n */\n get _unsafeSelectionEnd() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /**\n Sets HTMLElement selection\n @override\n */\n _unsafeSelect(start, end) {\n if (!this.rootElement.createRange) return;\n const range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /**\n HTMLElement value\n @override\n */\n get value() {\n // $FlowFixMe\n return this.input.textContent;\n }\n set value(value) {\n this.input.textContent = value;\n }\n}\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nexport { HTMLContenteditableMaskElement as default };\n","import { _ as _objectWithoutPropertiesLoose } from '../_rollupPluginBabelHelpers-6b3bd404.js';\nimport { objectIncludes, DIRECTION } from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport '../masked/date.js';\nimport createMask, { maskedClass } from '../masked/factory.js';\nimport MaskElement from './mask-element.js';\nimport HTMLMaskElement from './html-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../masked/pattern.js';\nimport '../masked/base.js';\nimport '../core/continuous-tail-details.js';\nimport '../masked/pattern/input-definition.js';\nimport '../masked/pattern/fixed-definition.js';\nimport '../masked/pattern/chunk-tail-details.js';\nimport '../masked/pattern/cursor.js';\nimport '../masked/regexp.js';\nimport '../masked/range.js';\n\nconst _excluded = [\"mask\"];\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nclass InputMask {\n /**\n View element\n @readonly\n */\n\n /**\n Internal {@link Masked} model\n @readonly\n */\n\n /**\n @param {MaskElement|HTMLInputElement|HTMLTextAreaElement} el\n @param {Object} opts\n */\n constructor(el, opts) {\n this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLMaskElement(el);\n this.masked = createMask(opts);\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n this._bindEvents();\n\n // refresh\n this.updateValue();\n this._onChange();\n }\n\n /** Read or update mask */\n get mask() {\n return this.masked.mask;\n }\n maskEquals(mask) {\n var _this$masked;\n return mask == null || ((_this$masked = this.masked) === null || _this$masked === void 0 ? void 0 : _this$masked.maskEquals(mask));\n }\n set mask(mask) {\n if (this.maskEquals(mask)) return;\n\n // $FlowFixMe No ideas ... after update\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n this.masked.updateOptions({\n mask\n });\n return;\n }\n const masked = createMask({\n mask\n });\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n\n /** Raw value */\n get value() {\n return this._value;\n }\n set value(str) {\n if (this.value === str) return;\n this.masked.value = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Unmasked value */\n get unmaskedValue() {\n return this._unmaskedValue;\n }\n set unmaskedValue(str) {\n if (this.unmaskedValue === str) return;\n this.masked.unmaskedValue = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Typed unmasked value */\n get typedValue() {\n return this.masked.typedValue;\n }\n set typedValue(val) {\n if (this.masked.typedValueEquals(val)) return;\n this.masked.typedValue = val;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Display value */\n get displayValue() {\n return this.masked.displayValue;\n }\n\n /**\n Starts listening to element events\n @protected\n */\n _bindEvents() {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange\n });\n }\n\n /**\n Stops listening to element events\n @protected\n */\n _unbindEvents() {\n if (this.el) this.el.unbindEvents();\n }\n\n /**\n Fires custom event\n @protected\n */\n _fireEvent(ev) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n const listeners = this._listeners[ev];\n if (!listeners) return;\n listeners.forEach(l => l(...args));\n }\n\n /**\n Current selection start\n @readonly\n */\n get selectionStart() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n }\n\n /** Current cursor position */\n get cursorPos() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n }\n set cursorPos(pos) {\n if (!this.el || !this.el.isActive) return;\n this.el.select(pos, pos);\n this._saveSelection();\n }\n\n /**\n Stores current selection\n @protected\n */\n _saveSelection( /* ev */\n ) {\n if (this.displayValue !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n\n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n\n /** Syncronizes model value from view */\n updateValue() {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl() {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (isChanged) this._fireChangeEvents();\n }\n\n /** Updates options with deep equal check, recreates @{link Masked} model if mask type changes */\n updateOptions(opts) {\n const {\n mask\n } = opts,\n restOpts = _objectWithoutPropertiesLoose(opts, _excluded);\n const updateMask = !this.maskEquals(mask);\n const updateOpts = !objectIncludes(this.masked, restOpts);\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts);\n if (updateMask || updateOpts) this.updateControl();\n }\n\n /** Updates cursor */\n updateCursor(cursorPos) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos;\n\n // also queue change cursor for mobile browsers\n this._delayUpdateCursor(cursorPos);\n }\n\n /**\n Delays cursor update to support mobile browsers\n @private\n */\n _delayUpdateCursor(cursorPos) {\n this._abortUpdateCursor();\n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(() => {\n if (!this.el) return; // if was destroyed\n this.cursorPos = this._changingCursorPos;\n this._abortUpdateCursor();\n }, 10);\n }\n\n /**\n Fires custom events\n @protected\n */\n _fireChangeEvents() {\n this._fireEvent('accept', this._inputEvent);\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n\n /**\n Aborts delayed cursor update\n @private\n */\n _abortUpdateCursor() {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n\n /** Aligns cursor to nearest available position */\n alignCursor() {\n this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n }\n\n /** Aligns cursor only if selection is empty */\n alignCursorFriendly() {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n this.alignCursor();\n }\n\n /** Adds listener on custom event */\n on(ev, handler) {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n this._listeners[ev].push(handler);\n return this;\n }\n\n /** Removes custom event listener */\n off(ev, handler) {\n if (!this._listeners[ev]) return this;\n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n const hIndex = this._listeners[ev].indexOf(handler);\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n\n /** Handles view input event */\n _onInput(e) {\n this._inputEvent = e;\n this._abortUpdateCursor();\n\n // fix strange IE behavior\n if (!this._selection) return this.updateValue();\n const details = new ActionDetails(\n // new state\n this.el.value, this.cursorPos,\n // old state\n this.displayValue, this._selection);\n const oldRawValue = this.masked.rawInputValue;\n const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n input: true,\n raw: true\n }).offset;\n\n // force align in remove direction only if no input chars were removed\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n this.updateControl();\n this.updateCursor(cursorPos);\n delete this._inputEvent;\n }\n\n /** Handles view change event and commits model value */\n _onChange() {\n if (this.displayValue !== this.el.value) {\n this.updateValue();\n }\n this.masked.doCommit();\n this.updateControl();\n this._saveSelection();\n }\n\n /** Handles view drop event, prevents by default */\n _onDrop(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n /** Restore last selection on focus */\n _onFocus(ev) {\n this.alignCursorFriendly();\n }\n\n /** Restore last selection on focus */\n _onClick(ev) {\n this.alignCursorFriendly();\n }\n\n /** Unbind view events and removes element reference */\n destroy() {\n this._unbindEvents();\n // $FlowFixMe why not do so?\n this._listeners.length = 0;\n // $FlowFixMe\n delete this.el;\n }\n}\nIMask.InputMask = InputMask;\n\nexport { InputMask as default };\n","import MaskedPattern from './pattern.js';\nimport IMask from '../core/holder.js';\nimport '../_rollupPluginBabelHelpers-6b3bd404.js';\nimport '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/input-definition.js';\nimport './factory.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './regexp.js';\n\n/** Pattern which validates enum values */\nclass MaskedEnum extends MaskedPattern {\n /**\n @override\n @param {Object} opts\n */\n _update(opts) {\n // TODO type\n if (opts.enum) opts.mask = '*'.repeat(opts.enum[0].length);\n super._update(opts);\n }\n\n /**\n @override\n */\n doValidate() {\n return this.enum.some(e => e.indexOf(this.unmaskedValue) >= 0) && super.doValidate(...arguments);\n }\n}\nIMask.MaskedEnum = MaskedEnum;\n\nexport { MaskedEnum as default };\n","import { escapeRegExp, normalizePrepare, DIRECTION } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/**\n Number mask\n @param {Object} opts\n @param {string} opts.radix - Single char\n @param {string} opts.thousandsSeparator - Single char\n @param {Array<string>} opts.mapToRadix - Array of single chars\n @param {number} opts.min\n @param {number} opts.max\n @param {number} opts.scale - Digits after point\n @param {boolean} opts.signed - Allow negative\n @param {boolean} opts.normalizeZeros - Flag to remove leading and trailing zeros in the end of editing\n @param {boolean} opts.padFractionalZeros - Flag to pad trailing zeros after point in the end of editing\n*/\nclass MaskedNumber extends Masked {\n /** Single char */\n\n /** Single char */\n\n /** Array of single chars */\n\n /** */\n\n /** */\n\n /** Digits after point */\n\n /** */\n\n /** Flag to remove leading and trailing zeros in the end of editing */\n\n /** Flag to pad trailing zeros after point in the end of editing */\n\n constructor(opts) {\n super(Object.assign({}, MaskedNumber.DEFAULTS, opts));\n }\n\n /**\n @override\n */\n _update(opts) {\n super._update(opts);\n this._updateRegExps();\n }\n\n /** */\n _updateRegExps() {\n let start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n let mid = '\\\\d*';\n let end = (this.scale ? \"(\".concat(escapeRegExp(this.radix), \"\\\\d{0,\").concat(this.scale, \"})?\") : '') + '$';\n this._numberRegExp = new RegExp(start + mid + end);\n this._mapToRadixRegExp = new RegExp(\"[\".concat(this.mapToRadix.map(escapeRegExp).join(''), \"]\"), 'g');\n this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n }\n\n /** */\n _removeThousandsSeparators(value) {\n return value.replace(this._thousandsSeparatorRegExp, '');\n }\n\n /** */\n _insertThousandsSeparators(value) {\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n const parts = value.split(this.radix);\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n return parts.join(this.radix);\n }\n\n /**\n @override\n */\n doPrepare(ch) {\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n ch = this._removeThousandsSeparators(this.scale && this.mapToRadix.length && (\n /*\n radix should be mapped when\n 1) input is done from keyboard = flags.input && flags.raw\n 2) unmasked value is set = !flags.input && !flags.raw\n and should not be mapped when\n 1) value is set = flags.input && !flags.raw\n 2) raw value is set = !flags.input && flags.raw\n */\n flags.input && flags.raw || !flags.input && !flags.raw) ? ch.replace(this._mapToRadixRegExp, this.radix) : ch);\n const [prepCh, details] = normalizePrepare(super.doPrepare(ch, flags));\n if (ch && !prepCh) details.skip = true;\n return [prepCh, details];\n }\n\n /** */\n _separatorsCount(to) {\n let extendOnSeparators = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n let count = 0;\n for (let pos = 0; pos < to; ++pos) {\n if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n ++count;\n if (extendOnSeparators) to += this.thousandsSeparator.length;\n }\n }\n return count;\n }\n\n /** */\n _separatorsCountFromSlice() {\n let slice = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._value;\n return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n }\n\n /**\n @override\n */\n extractInput() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n let flags = arguments.length > 2 ? arguments[2] : undefined;\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags));\n }\n\n /**\n @override\n */\n _appendCharRaw(ch) {\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.thousandsSeparator) return super._appendCharRaw(ch, flags);\n const prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n this._value = this._removeThousandsSeparators(this.value);\n const appendDetails = super._appendCharRaw(ch, flags);\n this._value = this._insertThousandsSeparators(this._value);\n const beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n appendDetails.skip = !appendDetails.rawInserted && ch === this.thousandsSeparator;\n return appendDetails;\n }\n\n /** */\n _findSeparatorAround(pos) {\n if (this.thousandsSeparator) {\n const searchFrom = pos - this.thousandsSeparator.length + 1;\n const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n if (separatorPos <= pos) return separatorPos;\n }\n return -1;\n }\n _adjustRangeWithSeparators(from, to) {\n const separatorAroundFromPos = this._findSeparatorAround(from);\n if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n const separatorAroundToPos = this._findSeparatorAround(to);\n if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n return [from, to];\n }\n\n /**\n @override\n */\n remove() {\n let fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n let toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n const valueBeforePos = this.value.slice(0, fromPos);\n const valueAfterPos = this.value.slice(toPos);\n const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n return new ChangeDetails({\n tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n });\n }\n\n /**\n @override\n */\n nearestInputPos(cursorPos, direction) {\n if (!this.thousandsSeparator) return cursorPos;\n switch (direction) {\n case DIRECTION.NONE:\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n {\n const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n if (separatorAtLeftPos >= 0) {\n const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n return separatorAtLeftPos;\n }\n }\n break;\n }\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n {\n const separatorAtRightPos = this._findSeparatorAround(cursorPos);\n if (separatorAtRightPos >= 0) {\n return separatorAtRightPos + this.thousandsSeparator.length;\n }\n }\n }\n return cursorPos;\n }\n\n /**\n @override\n */\n doValidate(flags) {\n // validate as string\n let valid = Boolean(this._removeThousandsSeparators(this.value).match(this._numberRegExp));\n if (valid) {\n // validate as number\n const number = this.number;\n valid = valid && !isNaN(number) && (\n // check min bound for negative values\n this.min == null || this.min >= 0 || this.min <= this.number) && (\n // check max bound for positive values\n this.max == null || this.max <= 0 || this.number <= this.max);\n }\n return valid && super.doValidate(flags);\n }\n\n /**\n @override\n */\n doCommit() {\n if (this.value) {\n const number = this.number;\n let validnum = number;\n\n // check bounds\n if (this.min != null) validnum = Math.max(validnum, this.min);\n if (this.max != null) validnum = Math.min(validnum, this.max);\n if (validnum !== number) this.unmaskedValue = this.doFormat(validnum);\n let formatted = this.value;\n if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted);\n this._value = formatted;\n }\n super.doCommit();\n }\n\n /** */\n _normalizeZeros(value) {\n const parts = this._removeThousandsSeparators(value).split(this.radix);\n\n // remove leading zeros\n parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, (match, sign, zeros, num) => sign + num);\n // add leading zero\n if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n if (parts.length > 1) {\n parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n if (!parts[1].length) parts.length = 1; // remove fractional\n }\n\n return this._insertThousandsSeparators(parts.join(this.radix));\n }\n\n /** */\n _padFractionalZeros(value) {\n if (!value) return value;\n const parts = value.split(this.radix);\n if (parts.length < 2) parts.push('');\n parts[1] = parts[1].padEnd(this.scale, '0');\n return parts.join(this.radix);\n }\n\n /** */\n doSkipInvalid(ch) {\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let checkTail = arguments.length > 2 ? arguments[2] : undefined;\n const dropFractional = this.scale === 0 && ch !== this.thousandsSeparator && (ch === this.radix || ch === MaskedNumber.UNMASKED_RADIX || this.mapToRadix.includes(ch));\n return super.doSkipInvalid(ch, flags, checkTail) && !dropFractional;\n }\n\n /**\n @override\n */\n get unmaskedValue() {\n return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, MaskedNumber.UNMASKED_RADIX);\n }\n set unmaskedValue(unmaskedValue) {\n super.unmaskedValue = unmaskedValue;\n }\n\n /**\n @override\n */\n get typedValue() {\n return this.doParse(this.unmaskedValue);\n }\n set typedValue(n) {\n this.rawInputValue = this.doFormat(n).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n }\n\n /** Parsed Number */\n get number() {\n return this.typedValue;\n }\n set number(number) {\n this.typedValue = number;\n }\n\n /**\n Is negative allowed\n @readonly\n */\n get allowNegative() {\n return this.signed || this.min != null && this.min < 0 || this.max != null && this.max < 0;\n }\n\n /**\n @override\n */\n typedValueEquals(value) {\n // handle 0 -> '' case (typed = 0 even if value = '')\n // for details see https://github.com/uNmAnNeR/imaskjs/issues/134\n return (super.typedValueEquals(value) || MaskedNumber.EMPTY_VALUES.includes(value) && MaskedNumber.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === '');\n }\n}\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.DEFAULTS = {\n radix: ',',\n thousandsSeparator: '',\n mapToRadix: [MaskedNumber.UNMASKED_RADIX],\n scale: 2,\n signed: false,\n normalizeZeros: true,\n padFractionalZeros: false,\n parse: Number,\n format: n => n.toLocaleString('en-US', {\n useGrouping: false,\n maximumFractionDigits: 20\n })\n};\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nIMask.MaskedNumber = MaskedNumber;\n\nexport { MaskedNumber as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by custom Function */\nclass MaskedFunction extends Masked {\n /**\n @override\n @param {Object} opts\n */\n _update(opts) {\n if (opts.mask) opts.validate = opts.mask;\n super._update(opts);\n }\n}\nIMask.MaskedFunction = MaskedFunction;\n\nexport { MaskedFunction as default };\n","import { _ as _objectWithoutPropertiesLoose } from '../_rollupPluginBabelHelpers-6b3bd404.js';\nimport { DIRECTION, normalizePrepare, objectIncludes } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport createMask from './factory.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\nconst _excluded = [\"compiledMasks\", \"currentMaskRef\", \"currentMask\"],\n _excluded2 = [\"mask\"];\n/** Dynamic mask for choosing apropriate mask in run-time */\nclass MaskedDynamic extends Masked {\n /** Currently chosen mask */\n\n /** Compliled {@link Masked} options */\n\n /** Chooses {@link Masked} depending on input value */\n\n /**\n @param {Object} opts\n */\n constructor(opts) {\n super(Object.assign({}, MaskedDynamic.DEFAULTS, opts));\n this.currentMask = null;\n }\n\n /**\n @override\n */\n _update(opts) {\n super._update(opts);\n if ('mask' in opts) {\n // mask could be totally dynamic with only `dispatch` option\n this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map(m => createMask(m)) : [];\n\n // this.currentMask = this.doDispatch(''); // probably not needed but lets see\n }\n }\n\n /**\n @override\n */\n _appendCharRaw(ch) {\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const details = this._applyDispatch(ch, flags);\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags)));\n }\n return details;\n }\n _applyDispatch() {\n let appended = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let tail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value;\n const inputValue = this.rawInputValue;\n const insertValue = flags.tail && flags._beforeTailState != null ?\n // $FlowFixMe - tired to fight with type system\n flags._beforeTailState._rawInputValue : inputValue;\n const tailValue = inputValue.slice(insertValue.length);\n const prevMask = this.currentMask;\n const details = new ChangeDetails();\n const prevMaskState = prevMask === null || prevMask === void 0 ? void 0 : prevMask.state;\n\n // clone flags to prevent overwriting `_beforeTailState`\n this.currentMask = this.doDispatch(appended, Object.assign({}, flags), tail);\n\n // restore state after dispatch\n if (this.currentMask) {\n if (this.currentMask !== prevMask) {\n // if mask changed reapply input\n this.currentMask.reset();\n if (insertValue) {\n // $FlowFixMe - it's ok, we don't change current mask above\n const d = this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = d.inserted.length - prevValueBeforeTail.length;\n }\n if (tailValue) {\n // $FlowFixMe - it's ok, we don't change current mask above\n details.tailShift += this.currentMask.append(tailValue, {\n raw: true,\n tail: true\n }).tailShift;\n }\n } else {\n // Dispatch can do something bad with state, so\n // restore prev mask state\n this.currentMask.state = prevMaskState;\n }\n }\n return details;\n }\n _appendPlaceholder() {\n const details = this._applyDispatch(...arguments);\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendPlaceholder());\n }\n return details;\n }\n\n /**\n @override\n */\n _appendEager() {\n const details = this._applyDispatch(...arguments);\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendEager());\n }\n return details;\n }\n appendTail(tail) {\n const details = new ChangeDetails();\n if (tail) details.aggregate(this._applyDispatch('', {}, tail));\n return details.aggregate(this.currentMask ? this.currentMask.appendTail(tail) : super.appendTail(tail));\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n return Object.assign({}, flags, {\n _beforeTailState: ((_flags$_beforeTailSta = flags._beforeTailState) === null || _flags$_beforeTailSta === void 0 ? void 0 : _flags$_beforeTailSta.currentMaskRef) === this.currentMask && ((_flags$_beforeTailSta2 = flags._beforeTailState) === null || _flags$_beforeTailSta2 === void 0 ? void 0 : _flags$_beforeTailSta2.currentMask) || flags._beforeTailState\n });\n }\n\n /**\n @override\n */\n doDispatch(appended) {\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let tail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n return this.dispatch(appended, this, flags, tail);\n }\n\n /**\n @override\n */\n doValidate(flags) {\n return super.doValidate(flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags)));\n }\n\n /**\n @override\n */\n doPrepare(str) {\n let flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let [s, details] = normalizePrepare(super.doPrepare(str, flags));\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = normalizePrepare(super.doPrepare(s, this.currentMaskFlags(flags)));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n\n /**\n @override\n */\n reset() {\n var _this$currentMask;\n (_this$currentMask = this.currentMask) === null || _this$currentMask === void 0 ? void 0 : _this$currentMask.reset();\n this.compiledMasks.forEach(m => m.reset());\n }\n\n /**\n @override\n */\n get value() {\n return this.currentMask ? this.currentMask.value : '';\n }\n set value(value) {\n super.value = value;\n }\n\n /**\n @override\n */\n get unmaskedValue() {\n return this.currentMask ? this.currentMask.unmaskedValue : '';\n }\n set unmaskedValue(unmaskedValue) {\n super.unmaskedValue = unmaskedValue;\n }\n\n /**\n @override\n */\n get typedValue() {\n return this.currentMask ? this.currentMask.typedValue : '';\n }\n\n // probably typedValue should not be used with dynamic\n set typedValue(value) {\n let unmaskedValue = String(value);\n\n // double check it\n if (this.currentMask) {\n this.currentMask.typedValue = value;\n unmaskedValue = this.currentMask.unmaskedValue;\n }\n this.unmaskedValue = unmaskedValue;\n }\n get displayValue() {\n return this.currentMask ? this.currentMask.displayValue : '';\n }\n\n /**\n @override\n */\n get isComplete() {\n var _this$currentMask2;\n return Boolean((_this$currentMask2 = this.currentMask) === null || _this$currentMask2 === void 0 ? void 0 : _this$currentMask2.isComplete);\n }\n\n /**\n @override\n */\n get isFilled() {\n var _this$currentMask3;\n return Boolean((_this$currentMask3 = this.currentMask) === null || _this$currentMask3 === void 0 ? void 0 : _this$currentMask3.isFilled);\n }\n\n /**\n @override\n */\n remove() {\n const details = new ChangeDetails();\n if (this.currentMask) {\n details.aggregate(this.currentMask.remove(...arguments))\n // update with dispatch\n .aggregate(this._applyDispatch());\n }\n return details;\n }\n\n /**\n @override\n */\n get state() {\n var _this$currentMask4;\n return Object.assign({}, super.state, {\n _rawInputValue: this.rawInputValue,\n compiledMasks: this.compiledMasks.map(m => m.state),\n currentMaskRef: this.currentMask,\n currentMask: (_this$currentMask4 = this.currentMask) === null || _this$currentMask4 === void 0 ? void 0 : _this$currentMask4.state\n });\n }\n set state(state) {\n const {\n compiledMasks,\n currentMaskRef,\n currentMask\n } = state,\n maskedState = _objectWithoutPropertiesLoose(state, _excluded);\n this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]);\n if (currentMaskRef != null) {\n this.currentMask = currentMaskRef;\n this.currentMask.state = currentMask;\n }\n super.state = maskedState;\n }\n\n /**\n @override\n */\n extractInput() {\n return this.currentMask ? this.currentMask.extractInput(...arguments) : '';\n }\n\n /**\n @override\n */\n extractTail() {\n return this.currentMask ? this.currentMask.extractTail(...arguments) : super.extractTail(...arguments);\n }\n\n /**\n @override\n */\n doCommit() {\n if (this.currentMask) this.currentMask.doCommit();\n super.doCommit();\n }\n\n /**\n @override\n */\n nearestInputPos() {\n return this.currentMask ? this.currentMask.nearestInputPos(...arguments) : super.nearestInputPos(...arguments);\n }\n get overwrite() {\n return this.currentMask ? this.currentMask.overwrite : super.overwrite;\n }\n set overwrite(overwrite) {\n console.warn('\"overwrite\" option is not available in dynamic mask, use this option in siblings');\n }\n get eager() {\n return this.currentMask ? this.currentMask.eager : super.eager;\n }\n set eager(eager) {\n console.warn('\"eager\" option is not available in dynamic mask, use this option in siblings');\n }\n get skipInvalid() {\n return this.currentMask ? this.currentMask.skipInvalid : super.skipInvalid;\n }\n set skipInvalid(skipInvalid) {\n if (this.isInitialized || skipInvalid !== Masked.DEFAULTS.skipInvalid) {\n console.warn('\"skipInvalid\" option is not available in dynamic mask, use this option in siblings');\n }\n }\n\n /**\n @override\n */\n maskEquals(mask) {\n return Array.isArray(mask) && this.compiledMasks.every((m, mi) => {\n if (!mask[mi]) return;\n const _mask$mi = mask[mi],\n {\n mask: oldMask\n } = _mask$mi,\n restOpts = _objectWithoutPropertiesLoose(_mask$mi, _excluded2);\n return objectIncludes(m, restOpts) && m.maskEquals(oldMask);\n });\n }\n\n /**\n @override\n */\n typedValueEquals(value) {\n var _this$currentMask5;\n return Boolean((_this$currentMask5 = this.currentMask) === null || _this$currentMask5 === void 0 ? void 0 : _this$currentMask5.typedValueEquals(value));\n }\n}\nMaskedDynamic.DEFAULTS = {\n dispatch: (appended, masked, flags, tail) => {\n if (!masked.compiledMasks.length) return;\n const inputValue = masked.rawInputValue;\n\n // simulate input\n const inputs = masked.compiledMasks.map((m, index) => {\n const isCurrent = masked.currentMask === m;\n const startInputPos = isCurrent ? m.value.length : m.nearestInputPos(m.value.length, DIRECTION.FORCE_LEFT);\n if (m.rawInputValue !== inputValue) {\n m.reset();\n m.append(inputValue, {\n raw: true\n });\n } else if (!isCurrent) {\n m.remove(startInputPos);\n }\n m.append(appended, masked.currentMaskFlags(flags));\n m.appendTail(tail);\n return {\n index,\n weight: m.rawInputValue.length,\n totalInputPositions: m.totalInputPositions(0, Math.max(startInputPos, m.nearestInputPos(m.value.length, DIRECTION.FORCE_LEFT)))\n };\n });\n\n // pop masks with longer values first\n inputs.sort((i1, i2) => i2.weight - i1.weight || i2.totalInputPositions - i1.totalInputPositions);\n return masked.compiledMasks[inputs[0].index];\n }\n};\nIMask.MaskedDynamic = MaskedDynamic;\n\nexport { MaskedDynamic as default };\n","import createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\nimport '../core/change-details.js';\n\n/** Mask pipe source and destination types */\nconst PIPE_TYPE = {\n MASKED: 'value',\n UNMASKED: 'unmaskedValue',\n TYPED: 'typedValue'\n};\n\n/** Creates new pipe function depending on mask type, source and destination options */\nfunction createPipe(mask) {\n let from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : PIPE_TYPE.MASKED;\n let to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : PIPE_TYPE.MASKED;\n const masked = createMask(mask);\n return value => masked.runIsolated(m => {\n m[from] = value;\n return m[to];\n });\n}\n\n/** Pipes value through mask depending on mask type, source and destination options */\nfunction pipe(value) {\n for (var _len = arguments.length, pipeArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n pipeArgs[_key - 1] = arguments[_key];\n }\n return createPipe(...pipeArgs)(value);\n}\nIMask.PIPE_TYPE = PIPE_TYPE;\nIMask.createPipe = createPipe;\nIMask.pipe = pipe;\n\nexport { PIPE_TYPE, createPipe, pipe };\n","export { default as InputMask } from './controls/input.js';\nimport IMask from './core/holder.js';\nexport { default } from './core/holder.js';\nexport { default as Masked } from './masked/base.js';\nexport { default as MaskedPattern } from './masked/pattern.js';\nexport { default as MaskedEnum } from './masked/enum.js';\nexport { default as MaskedRange } from './masked/range.js';\nexport { default as MaskedNumber } from './masked/number.js';\nexport { default as MaskedDate } from './masked/date.js';\nexport { default as MaskedRegExp } from './masked/regexp.js';\nexport { default as MaskedFunction } from './masked/function.js';\nexport { default as MaskedDynamic } from './masked/dynamic.js';\nexport { default as createMask } from './masked/factory.js';\nexport { default as MaskElement } from './controls/mask-element.js';\nexport { default as HTMLMaskElement } from './controls/html-mask-element.js';\nexport { default as HTMLContenteditableMaskElement } from './controls/html-contenteditable-mask-element.js';\nexport { PIPE_TYPE, createPipe, pipe } from './masked/pipe.js';\nexport { default as ChangeDetails } from './core/change-details.js';\nimport './_rollupPluginBabelHelpers-6b3bd404.js';\nimport './core/utils.js';\nimport './core/action-details.js';\nimport './core/continuous-tail-details.js';\nimport './masked/pattern/input-definition.js';\nimport './masked/pattern/fixed-definition.js';\nimport './masked/pattern/chunk-tail-details.js';\nimport './masked/pattern/cursor.js';\n\ntry {\n globalThis.IMask = IMask;\n} catch (e) {}\n","function _objectDestructuringEmpty(obj) {\n if (obj == null) throw new TypeError(\"Cannot destructure \" + obj);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nexport { _objectWithoutPropertiesLoose as _, _objectDestructuringEmpty as a };\n","import { a as _objectDestructuringEmpty } from './_rollupPluginBabelHelpers-2cac7098.js';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport IMask from 'imask/esm/imask';\n\n// TODO should be imported from core\n\nconst MASK_PROPS = {\n // common\n mask: PropTypes.oneOfType([PropTypes.array, PropTypes.func, PropTypes.string, PropTypes.instanceOf(RegExp), PropTypes.oneOf([Date, Number, IMask.Masked]), PropTypes.instanceOf(IMask.Masked)]),\n value: PropTypes.any,\n unmask: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['typed'])]),\n prepare: PropTypes.func,\n validate: PropTypes.func,\n commit: PropTypes.func,\n overwrite: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['shift'])]),\n eager: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['append', 'remove'])]),\n skipInvalid: PropTypes.bool,\n // events\n onAccept: PropTypes.func,\n onComplete: PropTypes.func,\n // pattern\n placeholderChar: PropTypes.string,\n displayChar: PropTypes.string,\n lazy: PropTypes.bool,\n definitions: PropTypes.object,\n blocks: PropTypes.object,\n // date\n pattern: PropTypes.string,\n format: PropTypes.func,\n parse: PropTypes.func,\n autofix: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['pad'])]),\n // number\n radix: PropTypes.string,\n thousandsSeparator: PropTypes.string,\n mapToRadix: PropTypes.arrayOf(PropTypes.string),\n scale: PropTypes.number,\n signed: PropTypes.bool,\n normalizeZeros: PropTypes.bool,\n padFractionalZeros: PropTypes.bool,\n min: PropTypes.oneOfType([PropTypes.number, PropTypes.instanceOf(Date)]),\n max: PropTypes.oneOfType([PropTypes.number, PropTypes.instanceOf(Date)]),\n // dynamic\n dispatch: PropTypes.func,\n // ref\n inputRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n current: PropTypes.object\n })])\n};\nconst MASK_PROPS_NAMES = Object.keys(MASK_PROPS).filter(p => p !== 'value');\nconst NON_MASK_OPTIONS_PROPS_NAMES = ['value', 'unmask', 'onAccept', 'onComplete', 'inputRef'];\nconst MASK_OPTIONS_PROPS_NAMES = MASK_PROPS_NAMES.filter(pName => NON_MASK_OPTIONS_PROPS_NAMES.indexOf(pName) < 0);\n// TODO\n// 1. seems like it's wrong to have Opts as only mask options. Other component/input props should also be there. Where is \"unmask\" prop for instance?\n// 2. Unmask should be infered from Opts (see https://github.com/uNmAnNeR/imaskjs/issues/554#issuecomment-1114014010)\nfunction IMaskMixin(ComposedComponent) {\n const MaskedComponent = class extends React.Component {\n constructor(props) {\n super(props);\n this._inputRef = this._inputRef.bind(this);\n }\n componentDidMount() {\n if (!this.props.mask) return;\n this.initMask();\n }\n componentDidUpdate() {\n const props = this.props;\n const maskOptions = this._extractMaskOptionsFromProps(props);\n if (maskOptions.mask) {\n if (this.maskRef) {\n this.maskRef.updateOptions(maskOptions);\n if ('value' in props) this.maskValue = props.value;\n } else {\n this.initMask(maskOptions);\n }\n } else {\n this.destroyMask();\n if ('value' in props) this.element.value = props.value;\n }\n }\n componentWillUnmount() {\n this.destroyMask();\n }\n _inputRef(el) {\n this.element = el;\n if (this.props.inputRef) {\n if (Object.prototype.hasOwnProperty.call(this.props.inputRef, 'current')) this.props.inputRef.current = el;else this.props.inputRef(el);\n }\n }\n initMask() {\n let maskOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._extractMaskOptionsFromProps(this.props);\n this.maskRef = IMask(this.element, maskOptions).on('accept', this._onAccept.bind(this)).on('complete', this._onComplete.bind(this));\n if ('value' in this.props) this.maskValue = this.props.value;\n }\n destroyMask() {\n if (this.maskRef) {\n this.maskRef.destroy();\n delete this.maskRef;\n }\n }\n _extractMaskOptionsFromProps(props) {\n const cloneProps = Object.assign({}, (_objectDestructuringEmpty(props), props));\n\n // keep only mask options props\n Object.keys(cloneProps)\n // TODO why need cast to string?\n .filter(prop => MASK_OPTIONS_PROPS_NAMES.indexOf(prop) < 0).forEach(nonMaskProp => {\n delete cloneProps[nonMaskProp];\n });\n\n // TODO type actually should be IMask.DeduceMasked<Opts>\n return cloneProps;\n }\n _extractNonMaskProps(props) {\n const cloneProps = Object.assign({}, (_objectDestructuringEmpty(props), props));\n MASK_PROPS_NAMES.forEach(maskProp => {\n delete cloneProps[maskProp];\n });\n return cloneProps;\n }\n get maskValue() {\n if (this.props.unmask === 'typed') return this.maskRef.typedValue;\n if (this.props.unmask) return this.maskRef.unmaskedValue;\n return this.maskRef.value;\n }\n set maskValue(value) {\n value = value == null && this.props.unmask !== 'typed' ? '' : value;\n if (this.props.unmask === 'typed') this.maskRef.typedValue = value;else if (this.props.unmask) this.maskRef.unmaskedValue = value;else this.maskRef.value = value;\n }\n _onAccept(e) {\n if (this.props.onAccept && this.maskRef) this.props.onAccept(this.maskValue, this.maskRef, e);\n }\n _onComplete(e) {\n if (this.props.onComplete && this.maskRef) this.props.onComplete(this.maskValue, this.maskRef, e);\n }\n render() {\n return React.createElement(ComposedComponent, Object.assign({}, this._extractNonMaskProps(this.props), {\n inputRef: this._inputRef\n }));\n }\n };\n const nestedComponentName = ComposedComponent.displayName || ComposedComponent.name || 'Component';\n MaskedComponent.displayName = \"IMask(\".concat(nestedComponentName, \")\");\n MaskedComponent.propTypes = MASK_PROPS;\n return React.forwardRef((props, ref) => React.createElement(MaskedComponent, Object.assign({}, props, {\n ref\n })));\n}\n\nexport { IMaskMixin as default };\n","import { _ as _objectWithoutPropertiesLoose } from './_rollupPluginBabelHelpers-2cac7098.js';\nimport React from 'react';\nimport IMaskMixin from './mixin.js';\nimport 'prop-types';\nimport 'imask/esm/imask';\n\nconst _excluded = [\"inputRef\"];\nconst IMaskInputClass = IMaskMixin(_ref => {\n let {\n inputRef\n } = _ref,\n props = _objectWithoutPropertiesLoose(_ref, _excluded);\n return React.createElement('input', Object.assign({}, props, {\n ref: inputRef\n }));\n});\nconst IMaskInputFn = (props, ref) =>\n// TODO type\nReact.createElement(IMaskInputClass, Object.assign({}, props, {\n ref\n}));\nconst IMaskInput = React.forwardRef(IMaskInputFn);\n\nexport { IMaskInput as default };\n","import { _ as _objectWithoutPropertiesLoose } from './_rollupPluginBabelHelpers-2cac7098.js';\nimport IMask from 'imask/esm/imask';\nimport { useRef, useState, useCallback, useEffect } from 'react';\n\nconst _excluded = [\"value\"],\n _excluded2 = [\"unmaskedValue\"],\n _excluded3 = [\"typedValue\"];\nfunction useIMask(opts) {\n let {\n onAccept,\n onComplete\n } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const ref = useRef(null);\n const maskRef = useRef(null);\n const [initialized, setInitialized] = useState(false);\n const [lastAcceptState, setLastAcceptState] = useState({});\n const [value, setValue] = useState('');\n const [unmaskedValue, setUnmaskedValue] = useState('');\n const [typedValue, setTypedValue] = useState();\n const _destroyMask = useCallback(() => {\n var _maskRef$current;\n (_maskRef$current = maskRef.current) === null || _maskRef$current === void 0 ? void 0 : _maskRef$current.destroy();\n maskRef.current = null;\n }, []);\n const _onAccept = useCallback(event => {\n const m = maskRef.current;\n if (!m) return;\n setLastAcceptState({\n value: m.value,\n unmaskedValue: m.unmaskedValue,\n typedValue: m.typedValue\n });\n setTypedValue(m.typedValue);\n setUnmaskedValue(m.unmaskedValue);\n setValue(m.value);\n onAccept === null || onAccept === void 0 ? void 0 : onAccept(m.value, m, event);\n }, [onAccept]);\n const _onComplete = useCallback(() => maskRef.current && (onComplete === null || onComplete === void 0 ? void 0 : onComplete(maskRef.current.value, maskRef.current)), [onComplete]);\n useEffect(() => {\n const el = ref.current;\n if (!el || !(opts !== null && opts !== void 0 && opts.mask)) return _destroyMask();\n const mask = maskRef.current;\n if (!mask) {\n if (el && opts !== null && opts !== void 0 && opts.mask) {\n maskRef.current = IMask(el, opts);\n _onAccept();\n }\n } else {\n mask === null || mask === void 0 ? void 0 : mask.updateOptions(opts);\n }\n setInitialized(Boolean(mask));\n }, [opts, _destroyMask, _onAccept]);\n useEffect(() => {\n if (!maskRef.current) return;\n const mask = maskRef.current;\n mask.on('accept', _onAccept);\n mask.on('complete', _onComplete);\n return () => {\n mask.off('accept', _onAccept);\n mask.off('complete', _onComplete);\n };\n }, [_onAccept, _onComplete]);\n useEffect(() => {\n const {\n value: lastAcceptValue\n } = lastAcceptState,\n state = _objectWithoutPropertiesLoose(lastAcceptState, _excluded);\n const mask = maskRef.current;\n if (mask && initialized && lastAcceptValue !== value) mask.value = value;\n setLastAcceptState(state);\n }, [value]);\n useEffect(() => {\n const {\n unmaskedValue: lastAcceptUnmaskedValue\n } = lastAcceptState,\n state = _objectWithoutPropertiesLoose(lastAcceptState, _excluded2);\n const mask = maskRef.current;\n if (mask && initialized && lastAcceptUnmaskedValue !== unmaskedValue) mask.unmaskedValue = unmaskedValue;\n setLastAcceptState(state);\n }, [unmaskedValue]);\n useEffect(() => {\n const {\n typedValue: lastAcceptTypedValue\n } = lastAcceptState,\n state = _objectWithoutPropertiesLoose(lastAcceptState, _excluded3);\n const mask = maskRef.current;\n if (mask && initialized && lastAcceptTypedValue !== typedValue) mask.typedValue = typedValue;\n setLastAcceptState(state);\n }, [typedValue]);\n useEffect(() => _destroyMask, [_destroyMask]);\n return {\n ref,\n maskRef,\n value,\n setValue,\n unmaskedValue,\n setUnmaskedValue,\n typedValue,\n setTypedValue\n };\n}\n\nexport { useIMask as default };\n","import clsx from 'clsx';\nimport React, { ChangeEvent, InputHTMLAttributes, useEffect } from 'react';\nimport { executeIfRefAvailable } from '../../../helpers/utils';\nimport { BaseFormControl, BaseInputEvents } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './SingleLineText.scss';\n\nexport interface SingleLineTextProps extends BaseFormControl, BaseInputEvents {\n /** Input element type */\n type?: 'text' | 'password' | 'number';\n\n /**\n * This property is only used in combination with `type='password'`.\n *\n * Use this to signalize the textbox whether it should act like a value is already set, eventhough the actual `value` is empty.\n * This is useful if the backend just indicates that a password is set, but doesn't give out the actual value.\n */\n isSet?: boolean;\n /** Current value the form control has */\n value?: InputHTMLAttributes<HTMLInputElement>['value'];\n /** Default value for the form control */\n defaultValue?: InputHTMLAttributes<HTMLInputElement>['defaultValue'];\n /** Input placeholder */\n placeholder?: string;\n /** Whether or not the control should start focused (default: false) */\n autoFocus?: boolean;\n /** Whether or not the control supports auto complete */\n autoComplete?: 'on' | 'off';\n\n innerRef?: React.RefObject<HTMLInputElement>;\n}\n\n/**\n * This component can be used to display a text input inside a form.\n * If you run your form in a Formik context, consider using the `SingleLineTextField` component instead.\n */\nexport const SingleLineText: React.FC<SingleLineTextProps> = ({\n name,\n id,\n type,\n isSet,\n value,\n disabled = false,\n placeholder,\n error,\n autoFocus = false,\n autoComplete,\n innerRef = React.createRef(),\n defaultValue,\n onChange,\n onBlur,\n onFocus,\n className = '',\n ...rest\n}) => {\n const errorMsg: string | undefined = error;\n const DUMMY_PWD = '0000000000';\n const isPasswordField = type === 'password' ? true : false;\n\n useEffect(() => {\n if (isPasswordField && isSet) {\n executeIfRefAvailable(innerRef, (input) => {\n input.value = DUMMY_PWD;\n });\n }\n }, [innerRef, isPasswordField, isSet]);\n\n const onFocusWrapper = (e: ChangeEvent<HTMLInputElement>): void => {\n if (type === 'password' && isSet && !value) {\n executeIfRefAvailable(innerRef, (input) => {\n input.value = '';\n });\n }\n onFocus?.(e);\n };\n const onBlurWrapper = (e: ChangeEvent<HTMLInputElement>): void => {\n if (type === 'password' && isSet && !value) {\n executeIfRefAvailable(innerRef, (input) => {\n input.value = DUMMY_PWD;\n });\n }\n onBlur?.(e);\n };\n\n return (\n <FormElementContainer\n {...rest}\n className={clsx(\n classes.container,\n 'single-line-text-container',\n className,\n )}\n error={errorMsg}\n dataTestFieldType=\"SingleLineText\"\n >\n <input\n className={clsx({ [classes.hasError]: errorMsg !== undefined })}\n id={id}\n name={name}\n type={type}\n ref={innerRef}\n value={value}\n defaultValue={defaultValue}\n disabled={disabled}\n placeholder={placeholder}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n onChange={onChange}\n onBlur={onBlurWrapper}\n onFocus={onFocusWrapper}\n />\n </FormElementContainer>\n );\n};\n","import React, { useEffect } from 'react';\nimport { useIMask } from 'react-imask';\nimport {\n SingleLineText,\n SingleLineTextProps,\n} from '../SingleLineText/SingleLineText';\n\nexport interface MaskedSingleLineTextProps\n extends Omit<SingleLineTextProps, 'onChange' | 'type' | 'value' | 'isSet'> {\n /** Expression to be used as a validator.\n * Refer https://imask.js.org/guide.html#masked-pattern for examples\n */\n mask: string;\n\n /** Placeholder character for the mask */\n placeholderChar?: string;\n\n /** Current value the form control has */\n value?: string;\n\n /** Whether the mask should not be shown by default. (default: true) */\n lazy?: boolean;\n\n /** Whether new inputs should overwrite existing text. (default: false) */\n overwrite?: boolean;\n\n /** Raised when the value has changed */\n onChange: (value: string) => unknown;\n}\n\nexport const MaskedSingleLineText: React.FC<MaskedSingleLineTextProps> = ({\n onChange,\n mask,\n placeholderChar = '_',\n value: formikValue = '',\n lazy = true,\n overwrite = false,\n ...props\n}) => {\n const { ref, maskRef } = useIMask(\n { mask, placeholderChar, lazy, overwrite },\n {\n onAccept: (value, _ref, e) => {\n // OnChange shouldn't be used https://github.com/uNmAnNeR/imaskjs/issues/318\n // OnAccept fires during initial load making the form dirty. However, the synthetic event is not\n // present when this happens so we check for the event to see if it's actually a keyboard event\n // that triggered onAccept.\n if (e) {\n onChange(value);\n }\n },\n },\n );\n\n useEffect(() => {\n maskRef.current.value = formikValue as string;\n }, [formikValue, maskRef]);\n\n return <SingleLineText innerRef={ref} type=\"text\" {...props} />;\n};\n","import clsx from 'clsx';\nimport React, { useRef, useState } from 'react';\nimport {\n ConfirmationConfig,\n ConfirmationMode,\n ConfirmDialog,\n} from '../../ConfirmDialog';\nimport { BaseFormControl, BaseInputEvents } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './Radio.scss';\n\nexport interface RadioProps extends BaseFormControl, BaseInputEvents {\n /** Current value the form control has */\n value?: string | number;\n /** Array of options that can be selected from */\n options?: { value: string | number; label: string | number }[];\n /** Whether or not the control should start focused (default: false) */\n autoFocus?: boolean;\n /** If set to 'Advanced', action will require confirmation via a confirmation pop up. (default: 'None') */\n confirmationMode?: Extract<ConfirmationMode, 'None' | 'Advanced'>;\n /** Optional text overrides for the confirmation pop up. */\n confirmationConfig?: ConfirmationConfig;\n}\n\ninterface RadioButtonProps {\n /** Whether or not this input is checked */\n checked: boolean;\n /** Whether or not the component has an error */\n hasError: boolean;\n /** This input's value */\n inputValue?: string | number;\n /** The new value currently stored as the confirmation dialog is rendered */\n confirmValue?: string | number;\n\n disabled?: boolean;\n}\n\nexport const RadioButton: React.FC<RadioButtonProps> = ({\n checked,\n hasError,\n inputValue,\n confirmValue,\n disabled = false,\n}) => (\n <svg\n className={clsx(classes.buttonContainer, {\n [classes.checked]: checked,\n [classes.hasError]: hasError,\n [classes.hasConfirm]:\n confirmValue !== undefined &&\n String(inputValue) === String(confirmValue),\n [classes.unSelectable]:\n (confirmValue !== undefined &&\n String(inputValue) !== String(confirmValue)) ||\n disabled,\n })}\n preserveAspectRatio=\"xMidYMid meet\"\n viewBox=\"0 0 34 34\"\n >\n <circle className={classes.radioOutline} cx=\"17\" cy=\"17\" r=\"15\" />\n <circle className={classes.radioDot} cx=\"17\" cy=\"17\" r=\"10\" />\n </svg>\n);\n\n/**\n * Radio input form control\n * @example\n * <Radio\n * name=\"numbers\"\n * label=\"Numbers\"\n * options={[{ value: '1', label: 'One' }, { value: '2', label: 'Two' }]}\n * value={'1'}\n * onChange={e => console.log(e)}\n * />\n */\nexport const Radio: React.FC<RadioProps> = ({\n name,\n value = undefined,\n options = [],\n disabled = false,\n error,\n autoFocus = false,\n confirmationMode = 'None',\n confirmationConfig = {},\n onChange,\n onBlur,\n onFocus,\n className = '',\n ...rest\n}) => {\n const errorMsg: string | undefined = error;\n\n const [confirmation, setConfirmation] = useState<boolean>(false);\n const [referenceElement, setReferenceElement] = useState<HTMLElement>();\n const [confirmValue, setConfirmValue] = useState<string>(); // ref doesn't seem to retain the current target value so its set here\n const ref = useRef<React.ChangeEvent<HTMLInputElement>>();\n\n const { title, body, cancelButtonText, confirmButtonText, onConfirmOpen } =\n confirmationConfig;\n\n const onCancelHandler = (): void => {\n setConfirmation(false);\n ref.current = undefined;\n setConfirmValue(undefined);\n };\n\n const onConfirmHandler = (): void => {\n const confirmed = {\n ...ref.current,\n currentTarget: { value: confirmValue as unknown as string },\n } as React.ChangeEvent<HTMLInputElement>;\n\n onChange && onChange(confirmed as React.ChangeEvent<HTMLInputElement>);\n\n setConfirmation(false);\n ref.current = undefined;\n setConfirmValue(undefined);\n };\n\n return (\n <FormElementContainer\n {...rest}\n className={clsx(classes.container, 'radio-container', className)}\n error={errorMsg}\n dataTestFieldType=\"Radio\"\n >\n <div\n className={clsx(classes.options)}\n ref={setReferenceElement as React.LegacyRef<HTMLDivElement>}\n >\n {options.map(({ label: labe, value: val }) => {\n const radioId = `${name}-${val}`;\n const checked = String(val) === String(value);\n\n return (\n <div key={val} className={clsx(classes.option)}>\n <input\n type=\"radio\"\n id={radioId}\n name={name}\n value={val}\n checked={checked}\n // Open issue https://github.com/facebook/react/issues/6321\n // \"checked\" does not update so we need another attribute:\n data-test-checked={checked}\n disabled={disabled || confirmation}\n autoFocus={checked && autoFocus}\n onChange={(e) => {\n if (confirmationMode === 'Advanced') {\n ref.current = e;\n setConfirmValue(e.currentTarget.value);\n setConfirmation(true);\n return;\n }\n\n onChange && onChange(e);\n }}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n <label\n htmlFor={radioId}\n className={clsx({ [classes.disabled]: disabled })}\n >\n <RadioButton\n checked={checked}\n hasError={errorMsg !== undefined}\n inputValue={val}\n confirmValue={confirmValue}\n disabled={disabled}\n />\n {labe}\n </label>\n </div>\n );\n })}\n {confirmation && (\n <ConfirmDialog\n className={clsx(classes.confirmDialog)}\n referenceElement={referenceElement}\n title={title}\n cancelButtonText={cancelButtonText}\n confirmButtonText={confirmButtonText}\n onCancel={onCancelHandler}\n onConfirm={onConfirmHandler}\n onConfirmOpen={onConfirmOpen}\n >\n {body}\n </ConfirmDialog>\n )}\n </div>\n </FormElementContainer>\n );\n};\n","import { useField } from 'formik';\nimport React from 'react';\nimport { useFormikError } from '../useFormikError';\nimport { Radio, RadioProps } from './Radio';\n\nexport const RadioField: React.FC<\n Omit<RadioProps, 'error' | 'onChange'> & {\n /** Takes the input value and transforms it */\n transform?: (value: unknown) => unknown;\n }\n> = (props) => {\n const { name, transform = (value: unknown) => value } = props;\n const error = useFormikError(props.name);\n const [field, , helpers] = useField(name);\n\n return (\n <Radio\n {...props}\n value={field.value}\n error={error}\n onChange={(e) => helpers.setValue(transform(e.currentTarget.value))}\n />\n );\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport clsx from 'clsx';\nimport React, { PropsWithChildren } from 'react';\nimport { TransformerFunction } from '../../Utils';\nimport { BaseFormElement } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './ReadOnlyField.scss';\n\nexport interface ReadOnlyFieldProps<T = any> extends BaseFormElement {\n /** Value to be displayed */\n value?: any;\n\n /** Transform functions */\n transform?: TransformerFunction<T>;\n\n /** Sets whether the field should not be visible if the value is empty (default: false) */\n hideIfEmpty?: boolean;\n}\n/**\n * This component renders a read only field into a form.\n * @props **transform**: an array of transform functions which will be executed sequentially during render time passing the output from each function to the next.\n * The last transform function must return a single object or array of a type which can be rendered directly _( i.e. string | number | string[] | number[] )_.\n */\nexport const ReadOnlyField = <T,>({\n value = '',\n transform,\n className = '',\n hideIfEmpty = false,\n ...rest\n}: PropsWithChildren<ReadOnlyFieldProps<T>>): JSX.Element => {\n const transformedValue = transform ? transform(value) : value;\n const displayValue = Array.isArray(transformedValue)\n ? transformedValue.join(', ')\n : transformedValue;\n\n if (hideIfEmpty && displayValue === '') {\n return <></>;\n }\n\n return (\n <FormElementContainer\n {...rest}\n className={clsx(\n classes.container,\n 'read-only-field-container',\n className,\n )}\n minHeight={'20px'}\n dataTestFieldType=\"ReadOnly\"\n >\n <div className={clsx(classes.value)} data-test-id=\"form-field-value\">\n {displayValue}\n </div>\n </FormElementContainer>\n );\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport clsx from 'clsx';\nimport React, { PropsWithChildren } from 'react';\nimport { noop } from '../../../helpers/utils';\nimport { Button, ButtonContext } from '../../Buttons';\nimport { IconName } from '../../Icons';\nimport { TransformerFunction } from '../../Utils';\nimport { BaseFormElement } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './ReadOnlyTextField.scss';\n\nexport interface ReadOnlyTextFieldProps<T = any> extends BaseFormElement {\n /** Value to be displayed */\n value?: any;\n /** Hide copy to the clipboard button */\n hideCopyButton?: boolean;\n /** Transform functions */\n transform?: TransformerFunction<T>;\n}\n/**\n * This component renders a read only field into a form.\n * @props **transform**: an array of transform functions which will be executed sequentially during render time passing the output from each function to the next.\n * The last transform function must return a single object or array of a type which can be rendered directly _( i.e. string | number | string[] | number[] )_.\n */\nexport const ReadOnlyTextField = <T,>({\n value = '',\n transform,\n className = '',\n hideCopyButton = false,\n ...rest\n}: PropsWithChildren<ReadOnlyTextFieldProps<T>>): JSX.Element => {\n const nonNullableValue = value === null ? '' : value;\n const transformedValue = transform\n ? transform(nonNullableValue)\n : nonNullableValue;\n const displayValue = Array.isArray(transformedValue)\n ? transformedValue.join(', ')\n : transformedValue;\n\n return (\n <FormElementContainer\n {...rest}\n className={clsx('read-only-field-container', className)}\n dataTestFieldType=\"ReadOnlyText\"\n >\n <div className={clsx(classes.container)}>\n <input\n value={displayValue}\n onChange={noop}\n data-test-id=\"form-field-value\"\n />\n {!hideCopyButton && (\n <Button\n type=\"button\"\n icon={IconName.Copy}\n buttonContext={ButtonContext.Icon}\n className={clsx(classes.button)}\n onButtonClicked={() => {\n try {\n // copy display value to clipboard\n navigator.clipboard.writeText(displayValue ?? '');\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('Failed to copy to clipboard');\n }\n }}\n />\n )}\n </div>\n </FormElementContainer>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { BaseFormControl, BaseSelectEvents } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './Select.scss';\n\nexport interface SelectProps extends BaseFormControl, BaseSelectEvents {\n /** Current value the form control has */\n value?: string | number | string[] | undefined;\n /** Array of options that can be selected from */\n options?: { value: string | number; label: string | number }[];\n /** Whether or not the control should start focused (default: false) */\n autoFocus?: boolean;\n /** Defines whether an empty option should be added as the first option (default: false) */\n addEmptyOption?: boolean;\n}\n\nexport const Select: React.FC<SelectProps> = ({\n name,\n id,\n value = undefined,\n options = [],\n disabled = false,\n error,\n autoFocus = false,\n addEmptyOption = false,\n onChange,\n onBlur,\n onFocus,\n className = '',\n ...rest\n}) => {\n const errorMsg: string | undefined = error;\n\n return (\n <FormElementContainer\n {...rest}\n className={clsx(classes.container, 'select-container', className)}\n error={errorMsg}\n dataTestFieldType=\"Select\"\n >\n <select\n className={clsx({ [classes.hasError]: errorMsg !== undefined })}\n id={id}\n name={name}\n value={value}\n disabled={disabled}\n autoFocus={autoFocus}\n onChange={onChange}\n onBlur={onBlur}\n onFocus={onFocus}\n >\n {addEmptyOption && <option value=\"\"></option>}\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </FormElementContainer>\n );\n};\n","import React from 'react';\nimport { useFormikError } from '../useFormikError';\nimport { Select, SelectProps } from './Select';\nexport const SelectField: React.FC<Omit<SelectProps, 'error'>> = (props) => {\n const error = useFormikError(props.name);\n return <Select {...props} error={error} />;\n};\n","import React from 'react';\nimport { useFormikError } from '../useFormikError';\nimport { SingleLineText, SingleLineTextProps } from './SingleLineText';\n/**\n * This component should be used to render a TextBox inside a Formik form.\n *\n * @example\n * <Field name=\"title\" label=\"Title\" as={SingleLineTextField} />\n */\nexport const SingleLineTextField: React.FC<\n Omit<SingleLineTextProps, 'error'>\n> = (props) => {\n const error = useFormikError(props.name);\n return <SingleLineText {...props} error={error} />;\n};\n","import clsx from 'clsx';\nimport React, {\n FormEvent,\n PropsWithChildren,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { CSSTransition, TransitionGroup } from 'react-transition-group';\nimport { noop } from '../../../helpers/utils';\nimport { Button, ButtonContext } from '../../Buttons';\nimport { IconName } from '../../Icons';\nimport { BaseFormControl, BaseSelectEvents } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './Tags.scss';\n\nexport interface TagsProps<T = string>\n extends BaseFormControl,\n BaseSelectEvents {\n /** If set, sets the form control value */\n value?: string[];\n /** Array of options that can be selected from */\n tagsOptions?: T[];\n /** Optional Drop down label (default: '')*/\n dropDownLabel?: string;\n /** Whether or not the control should start focused (default: false) */\n autoFocus?: boolean;\n /** If the tags component uses objects as tagsOptions, this prop is used as the key to identify display value */\n displayKey?: keyof T;\n /** If the tags component uses objects as tagsOptions, this prop is used as the key to identify value */\n valueKey?: keyof T;\n}\n\nexport const Tags = <T,>({\n id,\n name,\n value = [],\n dropDownLabel = '',\n tagsOptions = [],\n disabled = false,\n error,\n autoFocus = false,\n onChange = noop,\n onBlur,\n onFocus,\n displayKey,\n valueKey,\n className = '',\n ...rest\n}: PropsWithChildren<TagsProps<T>>): JSX.Element => {\n const [currentTags, setCurrentTags] = useState<string[]>(value); // Current tags the user has selected\n\n const [shouldAnimate, setShouldAnimate] = useState<boolean>(false);\n\n const ref = useRef<FormEvent<HTMLSelectElement>>();\n\n useEffect(() => {\n setCurrentTags(value);\n }, [value]);\n\n const errorMsg: string | undefined = error;\n\n useEffect(() => {\n // Only emit if there is a current event\n if (ref.current) {\n onChange({\n ...ref.current,\n\n currentTarget: { value: currentTags as unknown as string },\n } as React.FormEvent<HTMLSelectElement>);\n\n // Resets event data\n ref.current = undefined;\n }\n }, [currentTags, onChange]);\n\n /**\n * Adds a tag to currently selected list\n * @param e Select FormEvent\n */\n function addTag(e: FormEvent<HTMLSelectElement>): void {\n setShouldAnimate(true);\n\n const newTag = e.currentTarget.value;\n\n // Set event data\n ref.current = e;\n\n setCurrentTags((prevState) => [...prevState, newTag]);\n }\n\n /**\n * Removes tags from currently selected tags\n * @param idx index of tag to be filtered\n * @param e Event\n */\n function removeTag(idx: number, e: unknown): void {\n // Set event data\n ref.current = e as FormEvent<HTMLSelectElement>;\n\n setCurrentTags((prevState) =>\n prevState.filter((_: string, i: number) => i !== idx),\n );\n }\n\n function getDisplayValue(tag: string): string {\n if (displayKey && valueKey) {\n const option = tagsOptions.find(\n (option) => String(option[valueKey]) === tag,\n );\n\n return option ? String(option[displayKey]) : tag;\n }\n\n return tag;\n }\n\n return (\n <FormElementContainer\n {...rest}\n className={clsx(classes.container, 'tags-container', className)}\n error={errorMsg}\n dataTestFieldType=\"Tags\"\n >\n <div className={clsx(classes.tagsWrapper)}>\n <select\n className={clsx({ [classes.hasError]: errorMsg !== undefined })}\n id={id}\n name={name}\n disabled={disabled}\n autoFocus={autoFocus}\n onBlur={onBlur}\n onFocus={onFocus}\n onChange={(e) => {\n e.persist();\n e.target?.blur();\n addTag(e);\n }}\n hidden={currentTags.length === tagsOptions.length}\n >\n {[\n <option key={'eae2713d-1a32-4bdb-8f87-c7e1f7e2a3b2'} value={''}>\n {dropDownLabel}\n </option>,\n ].concat(\n tagsOptions\n .filter((currentTag: T) => {\n if (typeof currentTag === 'string') {\n return !currentTags.includes(currentTag);\n } else if (valueKey) {\n return !currentTags.includes(String(currentTag[valueKey]));\n }\n })\n .map((option) => {\n if (typeof option === 'string') {\n return (\n <option key={option} value={option}>\n {option}\n </option>\n );\n } else if (valueKey && displayKey) {\n return (\n <option\n key={String(option[valueKey])}\n value={String(option[valueKey])}\n >\n {String(option[displayKey])}\n </option>\n );\n }\n return <></>;\n }),\n )}\n </select>\n <TransitionGroup component={null}>\n {currentTags.map((tag, idx) => (\n <CSSTransition\n key={tag}\n timeout={{ enter: 1000, exit: 10 }}\n classNames={{\n enter: clsx(shouldAnimate && classes.tagEnter),\n enterActive: clsx(shouldAnimate && classes.tagEnterActive),\n exit: classes.tagExit,\n exitActive: classes.tagExitActive,\n }}\n onEntered={() => {\n setShouldAnimate(false);\n }}\n >\n <span\n key={tag}\n className={clsx(classes.selectedItem)}\n data-test-id=\"tag\"\n >\n <span>{getDisplayValue(tag)}</span>\n <Button\n type=\"button\"\n icon={IconName.X}\n onButtonClicked={(e) => {\n e.persist();\n removeTag(idx, e);\n }}\n buttonContext={ButtonContext.Icon}\n dataTestId=\"tags-delete\"\n ></Button>\n </span>\n </CSSTransition>\n ))}\n </TransitionGroup>\n </div>\n </FormElementContainer>\n );\n};\n","import { useField } from 'formik';\nimport React, { PropsWithChildren } from 'react';\nimport { useFormikError } from '../useFormikError';\nimport { Tags, TagsProps } from './Tags';\nexport const TagsField = <T,>(\n props: PropsWithChildren<Omit<TagsProps<T>, 'error' | 'onChange'>>,\n): JSX.Element => {\n const { name } = props;\n const error = useFormikError(name);\n const [field, , helpers] = useField(name);\n\n return (\n <Tags\n {...props}\n value={field.value}\n error={error}\n onChange={(e) => helpers.setValue(e.currentTarget.value)}\n />\n );\n};\n","import clsx from 'clsx';\nimport React, { FormEvent } from 'react';\nimport { BaseFormControl } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './TextArea.scss';\n\nexport interface TextAreaProps extends BaseFormControl {\n /** Current value the form control has */\n value?: string | undefined;\n /** Input placeholder */\n placeholder?: string;\n /** Whether or not the control should start focused (default: false) */\n autoFocus?: boolean;\n /** Number of visible text lines (default: 5) */\n rows?: number;\n\n /** Raised when the value has changed */\n onChange?: (event: FormEvent<HTMLTextAreaElement>) => void;\n /** Raised when the element has been selected */\n onBlur?: (event: FormEvent<HTMLTextAreaElement>) => void;\n /** Raised when the element has been de-selected */\n onFocus?: (event: FormEvent<HTMLTextAreaElement>) => void;\n}\n\n/**\n * This component can be used to display a textarea input inside a form.\n * If you run your form in a Formik context, consider using the `TextAreaField` component instead.\n */\nexport const TextArea: React.FC<TextAreaProps> = ({\n name,\n id,\n value,\n disabled = false,\n placeholder,\n error,\n autoFocus = false,\n rows = 5,\n onChange,\n onBlur,\n onFocus,\n className = '',\n ...rest\n}) => {\n const errorMsg: string | undefined = error;\n\n return (\n <FormElementContainer\n {...rest}\n className={clsx(classes.container, 'text-area-container', className)}\n error={errorMsg}\n dataTestFieldType=\"TextArea\"\n >\n <textarea\n className={clsx({ [classes.hasError]: errorMsg !== undefined })}\n id={id}\n name={name}\n value={value ?? ''}\n disabled={disabled}\n placeholder={placeholder}\n rows={rows}\n autoFocus={autoFocus}\n onChange={onChange}\n onBlur={onBlur}\n onFocus={onFocus}\n />\n </FormElementContainer>\n );\n};\n","import React from 'react';\nimport { useFormikError } from '../useFormikError';\nimport { TextArea, TextAreaProps } from './TextArea';\n/**\n * This component should be used to render a TextArea inside a Formik form.\n *\n * @example\n * <Field name=\"title\" label=\"Title\" as={TextAreaField} />\n */\nexport const TextAreaField: React.FC<Omit<TextAreaProps, 'error'>> = (\n props,\n) => {\n const error = useFormikError(props.name);\n return <TextArea {...props} error={error} />;\n};\n","import clsx from 'clsx';\nimport React, { useEffect, useState } from 'react';\nimport { noop } from '../../../helpers/utils';\nimport { BaseButtonOptions } from '../../Buttons/Button.model';\nimport {\n ConfirmationConfig,\n ConfirmationMode,\n ConfirmDialog,\n} from '../../ConfirmDialog';\nimport { BaseFormControl } from '../Form.models';\nimport { FormElementContainer } from '../FormElementContainer';\nimport classes from './ToggleButton.scss';\n\nexport interface ToggleButtonProps\n extends Omit<BaseButtonOptions, 'buttonContext' | 'onButtonClicked'>,\n BaseFormControl {\n /** Current value. Can be used to control state (default: false) */\n value?: boolean;\n /** Whether the 'OFF'/'ON' text is shown (default: true) */\n showONOFFText?: boolean;\n /** Button's height (default: '50px') */\n height?: string | number;\n /** Button's width (default: '100px') */\n width?: string | number;\n /** If set to 'Advanced', action will require confirmation via a confirmation pop up. (default: 'None') */\n confirmationMode?: Extract<ConfirmationMode, 'None' | 'Advanced'>;\n /** Optional text overrides for the confirmation pop up. */\n confirmationConfig?: ConfirmationConfig;\n /** Event to raise when the button is clicked. Selected state is return as a second argument */\n onButtonClicked?: (\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n value: boolean,\n ) => void;\n}\n\n/**\n * A toggle that switches between true and false\n * @example\n * <ToggleButton type=\"button\" onButtonClicked={(e, v) => console.log(e, v)}/>\n */\nexport const ToggleButton: React.FC<ToggleButtonProps> = ({\n value = false,\n showONOFFText = true,\n type = 'button',\n height,\n width,\n disabled = false,\n className,\n confirmationMode = 'None',\n confirmationConfig = {},\n onButtonClicked = noop,\n ...rest\n}: ToggleButtonProps) => {\n const [selected, setSelected] = useState<boolean>(value);\n\n const [confirmation, setConfirmation] = useState<boolean>(false);\n const [referenceElement, setReferenceElement] = useState<HTMLElement>();\n\n useEffect(() => {\n setSelected(value);\n }, [value]);\n\n const customStyles = {\n height,\n width,\n gridTemplateRows: height,\n } as React.CSSProperties;\n\n const { title, body, cancelButtonText, confirmButtonText, onConfirmOpen } =\n confirmationConfig;\n\n const onClickHandler = (\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n ): void => {\n if (confirmationMode === 'None') {\n event.persist();\n setSelected((prevState) => {\n onButtonClicked(event, !prevState);\n return !prevState;\n });\n } else {\n setConfirmation(true);\n }\n };\n\n const onConfirmHandler = (\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n ): void => {\n setConfirmation(false);\n event.persist();\n setSelected((prevState) => {\n onButtonClicked(event, !prevState);\n return !prevState;\n });\n };\n\n return (\n <>\n <FormElementContainer\n {...rest}\n className={clsx(\n classes.container,\n 'toggle-button-container',\n className,\n )}\n dataTestFieldType=\"ToggleButton\"\n >\n <button\n className={clsx(classes.toggle, {\n [classes.hasConfirm]: confirmation,\n })}\n type={type}\n style={customStyles}\n disabled={disabled}\n ref={setReferenceElement as React.LegacyRef<HTMLButtonElement>}\n onClick={onClickHandler}\n data-test-checked={selected}\n >\n <div className={clsx(classes.off, { [classes.active]: !selected })}>\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n {showONOFFText && !selected && (\n <g className={classes.svgText}>\n <path\n d=\"M6.5,20.1c0-1,0.2-1.9,0.5-2.6c0.2-0.5,0.5-1,0.9-1.4c0.4-0.4,0.8-0.7,1.3-0.9c0.6-0.3,1.4-0.4,2.2-0.4\n\t\tc1.5,0,2.7,0.5,3.6,1.4c0.9,0.9,1.3,2.2,1.3,3.8c0,1.6-0.4,2.9-1.3,3.8c-0.9,0.9-2.1,1.4-3.6,1.4c-1.5,0-2.7-0.5-3.6-1.4\n\t\tS6.5,21.7,6.5,20.1z M8.6,20c0,1.1,0.3,2,0.8,2.6c0.5,0.6,1.2,0.9,2,0.9c0.8,0,1.5-0.3,2-0.9c0.5-0.6,0.8-1.5,0.8-2.6\n\t\tc0-1.1-0.3-2-0.8-2.6s-1.2-0.8-2-0.8c-0.8,0-1.5,0.3-2,0.9C8.8,18,8.6,18.8,8.6,20z\"\n ></path>\n <path d=\"M17.9,25V15h6.9v1.7H20v2.4h4.2v1.7H20V25H17.9z\"></path>\n <path d=\"M26.6,25V15h6.9v1.7h-4.9v2.4h4.2v1.7h-4.2V25H26.6z\"></path>\n </g>\n )}\n </svg>\n </div>\n <div className={clsx(classes.on, { [classes.active]: selected })}>\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 40 40\"\n >\n {showONOFFText && selected && (\n <g className={classes.svgText}>\n <path\n d=\"M10.4,20.1c0-1,0.2-1.9,0.5-2.6c0.2-0.5,0.5-1,0.9-1.4s0.8-0.7,1.3-0.9c0.6-0.3,1.3-0.4,2.2-0.4\n\t\tc1.5,0,2.7,0.5,3.5,1.4s1.3,2.2,1.3,3.8c0,1.6-0.4,2.9-1.3,3.8c-0.9,0.9-2.1,1.4-3.5,1.4c-1.5,0-2.7-0.5-3.6-1.4\n\t\tC10.8,22.9,10.4,21.7,10.4,20.1z M12.4,20c0,1.1,0.3,2,0.8,2.6c0.5,0.6,1.2,0.9,2,0.9s1.5-0.3,2-0.9C17.7,22,18,21.1,18,20\n\t\tc0-1.1-0.3-2-0.8-2.6s-1.2-0.8-2-0.8s-1.5,0.3-2,0.9C12.7,18,12.4,18.8,12.4,20z\"\n ></path>\n <path d=\"M21.7,25V15h2l4.1,6.7V15h1.9v10h-2l-4-6.5V25H21.7z\"></path>\n </g>\n )}\n </svg>\n </div>\n </button>\n {confirmation && (\n <ConfirmDialog\n className={classes.confirmDialog}\n referenceElement={referenceElement}\n title={title}\n cancelButtonText={cancelButtonText}\n confirmButtonText={confirmButtonText}\n onCancel={() => setConfirmation(false)}\n onConfirm={onConfirmHandler}\n onConfirmOpen={onConfirmOpen}\n >\n {body}\n </ConfirmDialog>\n )}\n </FormElementContainer>\n </>\n );\n};\n","import { useField } from 'formik';\nimport React from 'react';\nimport { useFormikError } from '../useFormikError';\nimport { ToggleButton, ToggleButtonProps } from './ToggleButton';\nexport const ToggleButtonField: React.FC<Omit<ToggleButtonProps, 'error'>> = (\n props,\n) => {\n const { name } = props;\n const error = useFormikError(name);\n const [field, , helpers] = useField(name);\n\n return (\n <ToggleButton\n {...props}\n value={field.value}\n error={error}\n onButtonClicked={(_e, v) => {\n helpers.setValue(v);\n if (props.onButtonClicked) {\n props.onButtonClicked(_e, v);\n }\n }}\n />\n );\n};\n","import React, { ChangeEvent } from 'react';\nimport { DynamicListDataEntryRenderer } from '../../../../DynamicDataList/DynamicDataList.model';\nimport { SingleLineText } from '../../../../FormElements';\nimport { CreateInputRendererConfig } from '../renderers.model';\nimport classes from './createInputRenderer.scss';\n\n/**\n * Creates a simple component that can be used as an input field\n * @param Object configuration object of type CreateInputRendererConfig\n * @example createInputRenderer({placeholder: 'Enter Id'})\n */\nexport const createInputRenderer = ({\n id,\n name = '',\n placeholder,\n type = 'text',\n transform = (value: string) => value,\n}: CreateInputRendererConfig = {}): DynamicListDataEntryRenderer => {\n const inputRenderer = (\n currentValue: unknown,\n error: string | undefined,\n onValueChange: (value: unknown) => void,\n disabled = false,\n ): React.ReactNode => {\n const onChangeHandler = (e: ChangeEvent<HTMLInputElement>): void => {\n onValueChange(transform(e.target.value)); // emit onChange with transformed value\n };\n\n return (\n <SingleLineText\n id={id}\n name={name}\n type={type}\n disabled={disabled}\n placeholder={placeholder}\n onChange={onChangeHandler}\n inlineMode={true}\n error={error}\n className={classes.container}\n value={(currentValue as string) ?? ''}\n />\n );\n };\n\n return inputRenderer;\n};\n","import clsx from 'clsx';\nimport React, { ChangeEvent } from 'react';\nimport { DynamicListDataEntryRenderer } from '../../../../DynamicDataList/DynamicDataList.model';\nimport { CreateSelectRendererConfig } from '../renderers.model';\nimport classes from './createSelectRenderer.scss';\n\n/**\n * Creates a simple component that can be used as an input field\n * @param Object configuration object of type CreateSelectRendererConfig\n * @example createSelectRenderer({\n options: [\n { value: 'title 1', label: 'Item 1' },\n { value: 'title 2', label: 'Item 2' }\n ],\n defaultValue: 'title 1',\n })\n */\nexport const createSelectRenderer = ({\n id,\n name,\n placeholder,\n options = [],\n defaultValue,\n transform = (value: string) => value,\n}: CreateSelectRendererConfig = {}): DynamicListDataEntryRenderer => {\n const selectRenderer = (\n currentValue: unknown,\n error: string | undefined,\n onValueChange: (value: unknown) => void,\n disabled = false,\n ): React.ReactNode => {\n if (defaultValue && currentValue === undefined) {\n onValueChange(defaultValue);\n }\n\n const onChangeHandler = (e: ChangeEvent<HTMLSelectElement>): void => {\n onValueChange(transform(e.target.value)); // emit onChange with transformed value\n };\n\n return (\n <div className={classes.container}>\n <select\n id={id}\n name={name}\n placeholder={placeholder}\n value={(currentValue as string) ?? ''}\n onChange={onChangeHandler}\n className={clsx({ [classes.hasError]: error !== undefined })}\n disabled={disabled}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n {error !== undefined && <small>{error}</small>}\n </div>\n );\n };\n\n return selectRenderer;\n};\n","import clsx from 'clsx';\nimport React, { useState } from 'react';\nimport { IconName, Icons } from '../Icons';\nimport { Message, MessageType } from '../Message';\nimport classes from './MessageBar.scss';\n\nexport interface MessageBarProps {\n /** Context to convey */\n title: string | React.ReactNode;\n /** Message type. default: ('error') */\n type?: Extract<MessageType, 'error' | 'info' | 'warning'>;\n /** If set, renders a close icon that will emit this callback. default: (undefined) */\n onClose?: () => void;\n /** If set, renders a retry icon that will emit this callback. default: (undefined) */\n onRetry?: () => void;\n}\n\n/**\n * Renders a contextual feedback message\n * Takes optional children which will be hidden by default. If the child is only a string, it will be wrapped in a `<p>` element.\n * @example\n * <MessageBar type=\"error\" title=\"An error has occurred\" onClose={onCloseHandler} />\n */\nexport const MessageBar: React.FC<MessageBarProps> = ({\n children,\n type = 'error',\n title,\n onClose,\n onRetry,\n}) => {\n const [isBodyOpen, setIsBodyOpen] = useState<boolean>(false);\n\n const interactive: JSX.Element = (\n <div className={classes.interactive}>\n {children && (\n <div\n className={clsx(classes.iconWrapper, classes.detailsIcon)}\n onClick={() => setIsBodyOpen(!isBodyOpen)}\n data-test-id=\"message-bar-details-button\"\n >\n <Icons\n icon={IconName.Details}\n className={clsx(classes.detIcon, {\n [classes.open]: isBodyOpen,\n })}\n />\n </div>\n )}\n {onRetry !== undefined && (\n <div\n className={clsx(classes.iconWrapper, classes.retryIcon)}\n onClick={onRetry}\n data-test-id=\"message-bar-retry-button\"\n >\n <Icons icon={IconName.Retry} className={classes.reIcon} />\n </div>\n )}\n {onClose !== undefined && (\n <div\n className={clsx(classes.iconWrapper, classes.closeIcon)}\n onClick={onClose}\n data-test-id=\"message-bar-close-button\"\n >\n <Icons icon={IconName.X} className={classes.xIcon} />\n </div>\n )}\n </div>\n );\n\n return (\n <Message\n title={title}\n type={type}\n header={interactive}\n isBodyOpen={isBodyOpen}\n dataTestId=\"message-bar\"\n >\n {children && isBodyOpen && (\n <div\n className={clsx(classes.body, {\n [classes.hasInfo]: type === 'info',\n [classes.hasWarning]: type === 'warning',\n [classes.hasError]: type === 'error',\n })}\n data-test-id=\"message-bar-details\"\n >\n {getChildren(children)}\n </div>\n )}\n </Message>\n );\n};\n\n/**\n * If children is just a 'string', will wrap it in 'p' tags, otherwise will just return children.\n * @param child component's children\n * @returns React.ReactNode\n */\nconst getChildren = (child: React.ReactNode): React.ReactNode => {\n return typeof child === 'string' ? (\n <div className={classes.textChild}>{child}</div>\n ) : (\n child\n );\n};\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","import clsx from 'clsx';\nimport React, { useEffect, useState } from 'react';\nimport { noop } from '../../../helpers/utils';\nimport {\n ConfirmationConfig,\n ConfirmationMode,\n ConfirmDialog,\n useConfirmationDelay,\n} from '../../ConfirmDialog';\nimport { IconName, Icons } from '../../Icons';\nimport { ErrorType } from '../../models';\nimport classes from './PageHeaderAction.scss';\n\nexport enum PageHeaderActionType {\n Active,\n Context,\n Navigation,\n}\n\nexport interface PageHeaderActionProps {\n /** The label of the action. */\n label: string;\n /**\n * Whether the action is an 'Active', 'Context', or 'Navigation' type.\n * Changes the background color to the corresponding action type. (default: 'Navigation')\n */\n actionType?: PageHeaderActionType;\n /** Optional built in icon. This prop also accepts an img src. */\n icon?: IconName | string;\n /** Optional image alt attribute. */\n imgAlt?: string;\n /** Whether the action is disabled. If set to true, disallows interactions. (default: undefined) */\n disabled?: boolean;\n /** Optional class */\n className?: string;\n /** If set to 'Simple', the action will require confirmation. If set to 'Advanced', action will require confirmation via a confirmation pop up. (default: 'None') */\n confirmationMode?: ConfirmationMode;\n /** Optional text overrides for the confirmation pop up. */\n confirmationConfig?: ConfirmationConfig;\n /**\n * Callback to emit when a user clicks on the component\n */\n onClick: () => Promise<ErrorType | void> | ErrorType | void;\n}\n\n/**\n * Simple Confirm message\n * @example\n * <SimpleConfirmDialog />\n */\nconst SimpleConfirmDialog: React.FC<{\n onConfirmOpen: ConfirmationConfig['onConfirmOpen'];\n data: { mode: ConfirmationMode };\n}> = ({ onConfirmOpen, data }) => {\n useEffect(() => {\n onConfirmOpen && onConfirmOpen(true, data);\n return () => {\n onConfirmOpen && onConfirmOpen(false, data);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return <span data-test-id=\"confirm\">Click again to confirm</span>;\n};\n\n/**\n * Used to create actions for the PageHeader component.\n * @example\n * <PageHeaderAction label={'Action Label'} onClick={clickHandler} />\n */\nexport const PageHeaderAction: React.FC<PageHeaderActionProps> = ({\n label,\n actionType = PageHeaderActionType.Navigation,\n icon,\n imgAlt,\n confirmationMode = 'None',\n confirmationConfig = {},\n disabled,\n className,\n onClick = noop,\n}) => {\n const [confirmation, setConfirmation] = useState<boolean>(false);\n const [referenceElement, setReferenceElement] = useState<HTMLElement>();\n const { isMouseOver, setIsMouseOver } = useConfirmationDelay({\n confirmationMode,\n confirmation,\n setConfirmation,\n });\n\n const { title, body, cancelButtonText, confirmButtonText, onConfirmOpen } =\n confirmationConfig;\n\n const onClickHandler = (\n event: React.MouseEvent<HTMLButtonElement, MouseEvent>,\n ): void => {\n event.preventDefault();\n\n switch (confirmationMode) {\n case 'Simple':\n !confirmation\n ? setConfirmation(true)\n : (onClick(), setConfirmation(false));\n break;\n case 'Advanced':\n setConfirmation(true);\n break;\n default:\n onClick();\n setConfirmation(false);\n break;\n }\n };\n\n const onConfirmOpenHandler = (\n isOpen: boolean,\n data: { mode: ConfirmationMode },\n ): void => {\n if (confirmationMode === 'Advanced' && onConfirmOpen !== undefined) {\n onConfirmOpen(isOpen, data);\n }\n };\n\n return (\n <>\n <button\n className={clsx(\n classes.container,\n {\n [classes.context]: actionType === PageHeaderActionType.Context,\n [classes.active]: actionType === PageHeaderActionType.Active,\n [classes.hasConfirm]: confirmation,\n },\n 'page-header-action-container',\n className,\n )} // Show different bg-color when confirmation is displayed\n ref={setReferenceElement as React.LegacyRef<HTMLButtonElement>}\n onClick={onClickHandler}\n onMouseEnter={() => setIsMouseOver(true)}\n onMouseLeave={() => setIsMouseOver(false)}\n onMouseOver={() => {\n // Needed in cases where the mouse enters the component after another confirmation dialog was dismissed\n if (!isMouseOver) {\n setIsMouseOver(true);\n }\n }}\n disabled={disabled}\n data-test-id=\"action\"\n >\n <div className={classes.icon}>\n {!confirmation && (\n <>\n {typeof icon === 'string' ? (\n <img src={icon} alt={imgAlt} />\n ) : (\n <Icons icon={icon} className={classes.pageHeaderActionsIcons} />\n )}\n </>\n )}\n </div>\n <div className={classes.label}>\n {confirmation && confirmationMode === 'Simple' ? (\n <SimpleConfirmDialog\n onConfirmOpen={onConfirmOpen}\n data={{ mode: 'Simple' }}\n />\n ) : (\n <span data-test-id=\"label\">{label}</span>\n )}\n </div>\n </button>\n {confirmation && confirmationMode === 'Advanced' && (\n <ConfirmDialog\n className={classes.confirmDialog}\n referenceElement={referenceElement}\n title={title}\n cancelButtonText={cancelButtonText}\n confirmButtonText={confirmButtonText}\n onCancel={() => setConfirmation(false)}\n onConfirm={() => {\n onClick();\n setConfirmation(false);\n }}\n onConfirmOpen={(isOpen) =>\n onConfirmOpenHandler(isOpen, { mode: 'Advanced' })\n }\n >\n {body}\n </ConfirmDialog>\n )}\n </>\n );\n};\n","import clsx from 'clsx';\nimport React, { useEffect, useState } from 'react';\nimport { noop } from '../../../helpers/utils';\nimport { useExpand } from '../../../hooks/useExpand/useExpand';\nimport { ConfirmationMode } from '../../ConfirmDialog';\nimport { IconName } from '../../Icons';\nimport { PageHeaderProps } from '../PageHeader';\nimport {\n PageHeaderAction,\n PageHeaderActionProps,\n PageHeaderActionType,\n} from '../PageHeaderAction/PageHeaderAction';\nimport classes from './PageHeaderBulkActions.scss';\n\nexport interface PageHeaderBulkActionsProps\n extends Pick<\n PageHeaderProps,\n 'openBulkActionsOnStart' | 'onBulkActionsToggled'\n > {\n /** Array of Actions to be rendered (default: []) */\n actions?: PageHeaderActionProps[];\n /** Number of available slots actions can use in the PageHeader */\n availableActionSpace: number;\n /** Whether or not bulk actions are disabled (default: false)*/\n bulkActionsDisabled?: boolean;\n /** CSS Class name for additional styles */\n className?: string;\n}\n\n/**\n * Used to perform bulk operations from the PageHeader component.\n * @example\n * <PageHeaderBulkActions>\n * <PageHeaderAction action={action} onBulkActionsToggled={onBulkActionsToggledHandler} />\n * </PageHeaderBulkActions>\n */\nexport const PageHeaderBulkActions: React.FC<PageHeaderBulkActionsProps> = ({\n actions = [],\n openBulkActionsOnStart = false,\n onBulkActionsToggled = noop,\n availableActionSpace = 0,\n bulkActionsDisabled = false,\n className = '',\n}) => {\n const { isExpanded, toggleExpanded, expand } = useExpand();\n const {\n isExpanded: isMoreExpanded,\n expand: moreExpanded,\n collapse: moreCollapse,\n toggleExpanded: toggleMoreExpanded,\n } = useExpand();\n\n useEffect(() => {\n if (openBulkActionsOnStart) {\n expand();\n }\n }, [expand, openBulkActionsOnStart]);\n\n const [isMouseOverMore, setIsMouseOverMore] = useState<boolean>(false);\n const [isConfirmOpen, setIsConfirmOpen] = useState<Record<string, boolean>>(\n {},\n );\n\n const onConfirmToggled = (\n isOpen: boolean,\n data: { id: string; mode: ConfirmationMode },\n ): void => {\n setIsConfirmOpen((prevState) => {\n return { ...prevState, [data.id]: isOpen };\n });\n };\n\n useEffect(() => {\n const hasConfirm: boolean = Object.values(isConfirmOpen).includes(true);\n\n // open drop down\n if (isMouseOverMore) {\n moreExpanded();\n // close drop down if no confirmation is active\n } else if (!isMouseOverMore && !hasConfirm) {\n moreCollapse();\n // keep the drop down open if confirmation is active\n } else if (!isMouseOverMore && hasConfirm) {\n return;\n }\n }, [isConfirmOpen, isMouseOverMore, moreCollapse, moreExpanded]);\n\n return (\n <div\n className={clsx(\n classes.container,\n 'page-header-bulk-action-container',\n className,\n )}\n >\n <PageHeaderAction\n label=\"Bulk Actions\"\n actionType={\n isExpanded\n ? PageHeaderActionType.Active\n : PageHeaderActionType.Context\n }\n icon={IconName.Bulk}\n onClick={() => {\n toggleExpanded();\n onBulkActionsToggled(!isExpanded);\n }}\n />\n {isExpanded &&\n actions.slice(0, availableActionSpace).map((action, idx) => (\n <PageHeaderAction\n key={idx}\n {...action}\n disabled={bulkActionsDisabled}\n confirmationConfig={{\n ...action.confirmationConfig,\n onConfirmOpen: (isOpen, args) => {\n onConfirmToggled(\n isOpen,\n args as { id: string; mode: ConfirmationMode },\n );\n action.confirmationConfig?.onConfirmOpen?.(isOpen, args);\n },\n }}\n />\n ))}\n {isExpanded && actions.length > availableActionSpace && (\n <div\n className={clsx(classes.hasMore)}\n onMouseEnter={() => setIsMouseOverMore(true)}\n onMouseLeave={() => setIsMouseOverMore(false)}\n >\n <PageHeaderAction\n label=\"More\"\n icon={IconName.Ellipsis}\n actionType={\n isMoreExpanded\n ? PageHeaderActionType.Active\n : PageHeaderActionType.Context\n }\n onClick={() => toggleMoreExpanded()}\n />\n {isMoreExpanded && (\n <div className={clsx(classes.dropDownList)}>\n {actions.slice(availableActionSpace).map((action, idx) => (\n <PageHeaderAction\n key={idx}\n {...action}\n icon={action.icon}\n disabled={bulkActionsDisabled}\n onClick={() => {\n action.onClick();\n moreCollapse();\n setIsMouseOverMore(false);\n }}\n className={clsx(classes.dropDown)}\n confirmationConfig={{\n ...action.confirmationConfig,\n onConfirmOpen: (isOpen, args) => {\n onConfirmToggled(\n isOpen,\n args as { id: string; mode: ConfirmationMode },\n );\n action.confirmationConfig?.onConfirmOpen?.(isOpen, args);\n },\n }}\n />\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React, { useEffect, useState } from 'react';\nimport { noop } from '../../helpers/utils';\nimport { useWindowSize } from '../../hooks/useWindowSize/useWindowSize';\nimport classes from './PageHeader.scss';\nimport {\n PageHeaderAction,\n PageHeaderActionProps,\n} from './PageHeaderAction/PageHeaderAction';\nimport { PageHeaderBulkActions } from './PageHeaderBulkActions/PageHeaderBulkActions';\n\nexport interface PageHeaderProps {\n /** Title shown in page header */\n title?: string;\n /** Subtitle shown in page header */\n subtitle?: string;\n /** Array of actions to be rendered. (default: []) */\n actions?: PageHeaderActionProps[];\n /** Array of Bulk Actions to be rendered. If populated, Bulk Actions will become available. (default: []) */\n bulkActions?: PageHeaderActionProps[];\n /** Whether or bulk actions are shown by default. (default: false) */\n openBulkActionsOnStart?: boolean;\n /** Whether or not bulk actions are disabled (default: false)*/\n bulkActionsDisabled?: boolean;\n /**\n * Callback to emit when Bulk Actions is toggled\n * The expanded state is supplied as an argument\n */\n onBulkActionsToggled?: (expanded: boolean) => void;\n /** CSS Class name for additional styles */\n className?: string;\n}\n\n/**\n * Primary header for stations. Accepts a title, subtitle, actions, and bulk actions.\n * @example\n * <PageHeader title=\"title\" subtitle=\"subtitle\" />\n */\nexport const PageHeader: React.FC<PageHeaderProps> = ({\n title = '',\n subtitle = '',\n actions = [],\n bulkActions = [],\n bulkActionsDisabled = false,\n openBulkActionsOnStart = false,\n onBulkActionsToggled = noop,\n className = '',\n}) => {\n const [containerScrollWidth, setContainerScrollWidth] = useState<number>(0);\n const [childrenScrollWidth, setChildrenScrollWidth] = useState<number>(0);\n const [availableActionSpace, setAvailableActionSpace] = useState<number>(0);\n const ActionsWidth = 120;\n const { width } = useWindowSize();\n\n // Order of this useEffect hook is important\n useEffect(() => {\n setContainerScrollWidth(width);\n }, [width]);\n\n const actionsRef = (node: HTMLDivElement): void => {\n if (node !== null) {\n setChildrenScrollWidth(node.scrollWidth);\n }\n };\n\n useEffect(() => {\n // only perform calculation if there are bulkActions\n if (bulkActions.length > 0) {\n const minimumTitleWidth = width >= 1920 ? 510 : 120;\n const availableWidth: number =\n containerScrollWidth - (minimumTitleWidth + childrenScrollWidth);\n\n const bulkActionSpace = 1;\n const moreActionSpace = 1;\n\n // calculates the number of bulk action spaces available\n let currentAvailableActionSpace: number = Math.floor(\n availableWidth / ActionsWidth - bulkActionSpace,\n );\n\n // determines if the 'more' action will take up an action slot\n if (bulkActions.length > currentAvailableActionSpace) {\n currentAvailableActionSpace -= moreActionSpace;\n }\n\n // prevents current available space from going negative\n if (currentAvailableActionSpace < 0) {\n currentAvailableActionSpace = 0;\n }\n\n // update available action space if the currentAvailableActionSpace has changed\n if (currentAvailableActionSpace !== availableActionSpace) {\n setAvailableActionSpace(currentAvailableActionSpace);\n }\n }\n }, [\n bulkActions,\n availableActionSpace,\n childrenScrollWidth,\n containerScrollWidth,\n width,\n ]);\n\n return (\n <div\n className={clsx(classes.container, 'page-header-container', className)}\n data-test-id=\"page-header\"\n >\n <div className={clsx(classes.titles)}>\n <div className={clsx(classes.title)} data-test-id=\"page-header-title\">\n {title}\n </div>\n <div\n title={subtitle}\n className={clsx(classes.subtitle)}\n data-test-id=\"page-header-subtitle\"\n >\n {subtitle}\n </div>\n </div>\n {bulkActions.length > 0 && (\n <PageHeaderBulkActions\n availableActionSpace={availableActionSpace}\n actions={bulkActions}\n openBulkActionsOnStart={openBulkActionsOnStart}\n onBulkActionsToggled={onBulkActionsToggled}\n bulkActionsDisabled={bulkActionsDisabled}\n />\n )}\n <div\n className={clsx(classes.actions)}\n style={{ marginLeft: actions.length > 0 ? '10px' : undefined }}\n ref={actionsRef}\n data-test-id=\"page-header-actions\"\n >\n {actions.map((action, index) => {\n return <PageHeaderAction key={index} {...action} />;\n })}\n </div>\n </div>\n );\n};\n","import debounce from 'lodash/debounce';\nimport { useLayoutEffect, useState } from 'react';\n\nexport const useWindowSize = (): {\n height: number;\n width: number;\n} => {\n const [size, setSize] = useState({ height: 0, width: 0 });\n\n useLayoutEffect(() => {\n // debounce is needed to avoid re-rendering everything on every resize event\n const updateSize = debounce(() => {\n setSize({ height: window.innerHeight, width: window.innerWidth });\n }, 50);\n\n // add window resize event listener on mount\n window.addEventListener('resize', updateSize);\n\n updateSize();\n\n // remove window resize event listener on unmount\n return () => {\n updateSize.cancel();\n window.removeEventListener('resize', updateSize);\n };\n }, []);\n\n return size;\n};\n\n// This hook is based off: https://stackoverflow.com/a/19014495\n","import clsx from 'clsx';\nimport React, { PropsWithChildren } from 'react';\nimport { MessageBar, MessageBarProps } from '../MessageBar';\nimport { StationError } from '../models';\nimport { PageHeader, PageHeaderProps } from '../PageHeader';\nimport classes from './EmptyStation.scss';\n\nexport type EmptyStationProps = PageHeaderProps & {\n /** If set, creates a MessageBar component with an 'error' type message */\n stationError?: Omit<MessageBarProps, 'type'> & StationError;\n /** If set to `true`, the station will not render the full `PageHeader` but only a small line on top */\n minimizedHeader?: boolean;\n};\n\n/**\n * Renders a blank station template\n * @example\n * <EmptyStation title=\"Title\" subtitle=\"My Asset Type\">\n * <div>\n * <h1>\n * Station content\n * </h1>\n * </div>\n * </EmptyStation>\n */\nexport const EmptyStation = ({\n children,\n stationError,\n minimizedHeader = false,\n className = '',\n ...rest\n}: PropsWithChildren<EmptyStationProps>): JSX.Element => {\n return (\n <div\n className={clsx(\n classes.container,\n {\n [classes.hasStationError]: stationError,\n },\n 'empty-station-container',\n className,\n )}\n >\n {minimizedHeader ? (\n <div className={classes.minimizedHeader} />\n ) : (\n <PageHeader {...rest} />\n )}\n {stationError && (\n <MessageBar\n type=\"error\"\n title={String(stationError.title)}\n onClose={stationError.onClose}\n onRetry={stationError.onRetry}\n >\n {stationError?.body}\n </MessageBar>\n )}\n <div className={classes.children}>{children}</div>\n </div>\n );\n};\n","import { ShowNotification } from './types/ui-config';\n\nexport let showNotification: ShowNotification | (() => void) =\n polyfill('showNotification');\n\n/**\n * Passes the PiralApi methods to the UI library.\n * @param app {UiConfig} object containing PiralApi methods for use in UI library.\n */\nexport function initializeUi(app: UiConfig): void {\n ({ showNotification } = app);\n}\n\nexport interface UiConfig {\n showNotification: ShowNotification;\n}\n\nfunction polyfill(methodName: string): () => void {\n return () => {\n // eslint-disable-next-line no-console\n console.warn(\n `Could not find ${methodName} method. Is the UI initialized in the pilet? To initialize UI library call 'initializeUi(app)' in your pilet.`,\n );\n };\n}\n","import React from 'react';\nimport { ErrorType, StationError } from '../components/models';\n\n/**\n * Converts an `ErrorType` object into a station error.\n * @param error The error that should be converted. This is optional, so an error can be created, even if there is no original ErrorType object.\n * @param defaultTitle The message that should be used as default title, in case the `ErrorType` object is no `StationError` that already defines a title.\n * @param defaultBody The body that should be used in case the function can not infer the body of the message.\n * @returns A station error object\n */\nexport const ErrorTypeToStationError = (\n error?: ErrorType,\n defaultTitle = 'An error occurred.',\n defaultBody?: string,\n): StationError => {\n let stationError: StationError;\n if (isStationError(error)) {\n // we already got a station error\n stationError = error;\n } else {\n // we got either a string or an object or no error at all\n let originalError: string | undefined;\n let message: string | undefined;\n\n if (typeof error === 'string') {\n message = error;\n } else if (\n typeof error === 'object' &&\n String(error) !== '[object Object]'\n ) {\n message = String(error);\n originalError = JSON.stringify(error, undefined, 2);\n } else if (typeof error === 'object') {\n originalError = JSON.stringify(error, undefined, 2);\n } else if (defaultBody) {\n originalError = defaultBody;\n }\n\n stationError = {\n title: defaultTitle,\n body: (originalError !== undefined || message !== undefined) && (\n <>\n {message && <p>{message}</p>}\n {originalError && (\n <>\n <i>Original Error:</i>\n <pre>{originalError}</pre>\n </>\n )}\n </>\n ),\n };\n }\n\n return stationError;\n};\n\nconst isStationError = (value: unknown): value is StationError => {\n function isStationErrorLike(\n given: unknown,\n ): given is Partial<Record<keyof StationError, unknown>> {\n return typeof given === 'object' && given !== null && 'title' in given;\n }\n\n return isStationErrorLike(value) && typeof value.title === 'string';\n};\n","import { Data } from '../../types/data';\n\nexport enum FilterTypes {\n FreeText,\n Numeric,\n Options,\n SearcheableOptions,\n Date,\n DateTime,\n Custom,\n}\n\nexport interface FilterConfig<T extends Data> {\n label: string;\n property: keyof T;\n type: FilterTypes;\n onValidate?: FilterValidatorFunction<T>;\n}\n\nexport interface Option {\n label: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nexport interface FreeTextFilter<T extends Data> extends FilterConfig<T> {\n type: FilterTypes.FreeText;\n}\n\nexport interface NumericTextFilter<T extends Data> extends FilterConfig<T> {\n type: FilterTypes.Numeric;\n}\n\nexport interface OptionsFilter<T extends Data> extends FilterConfig<T> {\n type: FilterTypes.Options;\n options: Option[];\n}\n\nexport interface SearcheableOptionsFilter<T extends Data>\n extends FilterConfig<T> {\n type: FilterTypes.SearcheableOptions;\n optionsProvider: (searchText: string) => Option[];\n searchInputPlaceholder?: string;\n maxItems?: number;\n}\n\nexport interface DateFilter<T extends Data> extends FilterConfig<T> {\n type: FilterTypes.Date;\n}\n\nexport interface DateTimeFilter<T extends Data> extends FilterConfig<T> {\n type: FilterTypes.DateTime;\n}\n\nexport interface CustomFilter<T extends Data> extends FilterConfig<T> {\n type: FilterTypes.Custom;\n component: React.FC<CustomFilterProps>;\n}\n\nexport interface CustomFilterProps {\n /** Current Value of the filter */\n value?: FilterValue;\n\n /** Wether or not the filter is active (default: false) */\n active?: boolean;\n\n /** Callback triggered when a new filter value is selected */\n onSelect: (\n value: FilterValue,\n /** if set, this value is used when displaying the filter value to the user */\n stringValue?: string,\n ) => void;\n\n /** Callback triggered when validation fails */\n onError?: () => void;\n\n /** Callback triggered for custom validations of the filter */\n onValidate?: (currentValue: FilterValue) => FilterValidationResult;\n}\n\nexport type FilterValue = unknown;\n\nexport type FilterType<T extends Data> =\n | FreeTextFilter<T>\n | NumericTextFilter<T>\n | OptionsFilter<T>\n | SearcheableOptionsFilter<T>\n | DateFilter<T>\n | DateTimeFilter<T>\n | CustomFilter<T>;\n\nexport type FilterValues<T> = {\n [K in keyof T]?: FilterValue;\n};\n\nexport type FilterValidationResult = string | null | undefined;\n\nexport type FilterValidatorFunction<T> = (\n value: FilterValue,\n allValues: FilterValues<T>,\n) => FilterValidationResult;\n","import clsx from 'clsx';\nimport { DateTime } from 'luxon';\nimport React, {\n KeyboardEventHandler,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { noop } from '../../../../helpers/utils';\nimport { Button, ButtonContext } from '../../../Buttons';\nimport { DateTimePicker } from '../../../DateTime/DateTimePicker';\nimport { IconName } from '../../../Icons';\nimport { formatDate, formatDateTime } from '../../../Utils/Transformers';\nimport { FilterValidationResult, FilterValue } from '../../Filters.model';\nimport classes from './DateTimeFilter.scss';\n\nexport interface DateTimeFilterProps {\n value?: string;\n\n /** Whether modifying time should be allowed */\n modifyTime: boolean;\n\n /** Callback triggered when a new filter value is selected */\n onSelect: (value: FilterValue) => void;\n\n /** Callback triggered when validation fails */\n onError?: () => void;\n\n /** Callback triggered for custom validations of the filter */\n onValidate?: (currentValue: FilterValue) => FilterValidationResult;\n\n /** CSS Class name for additional styles */\n className?: string;\n}\n\nexport const DateTimeFilter: React.FC<DateTimeFilterProps> = ({\n onSelect,\n modifyTime,\n value: initialValue,\n onError = noop,\n onValidate: customValidate,\n className = '',\n}) => {\n const container = useRef<HTMLDivElement>(null);\n const [showPicker, setShowPicker] = useState(false);\n const [value, setValue] = useState<string>('');\n const [errorMsg, setErrorMsg] = useState<string>();\n const ENTER_KEY = 'Enter';\n\n const validateAndSet = (parsedValue: string): void => {\n const validationMessage = customValidate && customValidate(parsedValue);\n\n if (validationMessage) {\n setErrorMsg(validationMessage);\n onError();\n } else {\n onSelect(parsedValue);\n }\n };\n useEffect(() => {\n if (initialValue) {\n setValue(\n modifyTime\n ? formatDateTime(initialValue) ?? ''\n : formatDate(initialValue) ?? '',\n );\n }\n }, [initialValue, modifyTime]);\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (e) => {\n if (e.key === ENTER_KEY) {\n if (e.currentTarget.value === '') {\n onSelect(undefined);\n return;\n }\n\n const parsedValue = modifyTime\n ? DateTime.fromFormat(value, 'f')\n : DateTime.fromFormat(value, 'D');\n if (parsedValue.isValid) {\n validateAndSet(parsedValue.toISO());\n } else {\n // Fallback parser if the user types in an ISO date\n const isoParsedValue = DateTime.fromISO(value);\n\n if (isoParsedValue.isValid) {\n validateAndSet(isoParsedValue.toISO());\n } else {\n setErrorMsg('Date format is not valid');\n onError();\n }\n }\n }\n };\n\n return (\n <>\n <div\n className={clsx(\n classes.container,\n 'datetime-filter-container',\n className,\n )}\n >\n <div\n className={clsx(\n classes.dateTimeInput,\n 'datetime-border-wrapper',\n errorMsg && classes.hasError,\n )}\n ref={container}\n >\n <input\n autoFocus\n className={clsx(classes.inputValue)}\n onKeyDown={handleKeyDown}\n onChange={(e) => setValue(e.target.value)}\n value={value}\n />\n <Button\n className={clsx(classes.button)}\n buttonContext={ButtonContext.None}\n icon={IconName.Calendar}\n onButtonClicked={(e) => {\n e.persist();\n e.preventDefault();\n setShowPicker(!showPicker);\n }}\n />\n </div>\n {errorMsg !== undefined && <small>{errorMsg}</small>}\n </div>\n {showPicker && (\n <>\n <div\n className={clsx(classes.picker)}\n style={calculatePosition(\n container.current?.offsetTop,\n container.current?.offsetHeight,\n )}\n >\n <DateTimePicker\n value={\n initialValue\n ? DateTime.fromISO(initialValue).toJSDate()\n : undefined\n }\n onSelected={(value) => {\n if (modifyTime) {\n setValue(formatDateTime(value.toISOString()) ?? '');\n } else {\n setShowPicker(false);\n const parsedValue = DateTime.fromJSDate(value);\n setValue(parsedValue.toLocaleString());\n validateAndSet(parsedValue.toISO());\n }\n }}\n showTimePicker={modifyTime}\n />\n </div>\n <div\n className={clsx(classes.backdrop)}\n onClick={() => {\n setShowPicker(false);\n\n if (modifyTime) {\n const parsedValue = DateTime.fromFormat(value, 'f');\n\n if (parsedValue.isValid) {\n validateAndSet(parsedValue.toISO());\n } else {\n setErrorMsg('Date format is not valid');\n onError();\n }\n }\n }}\n ></div>\n </>\n )}\n </>\n );\n};\n\nconst calculatePosition = (\n offsetTop?: number,\n offsetHeight?: number,\n): React.CSSProperties => {\n if (!offsetTop || !offsetHeight) {\n return {};\n }\n\n const PICKER_HEIGHT = 280;\n const top = offsetTop + offsetHeight;\n\n if (top + PICKER_HEIGHT > window.innerHeight) {\n return { top: offsetTop - PICKER_HEIGHT };\n } else {\n return { top };\n }\n};\n","import clsx from 'clsx';\nimport React, { KeyboardEventHandler, useState } from 'react';\nimport { noop } from '../../../../helpers/utils';\nimport { FilterValidationResult, FilterValue } from '../../Filters.model';\nimport classes from './FreeTextFilter.scss';\n\nexport interface FreeTextFilterProps {\n value?: FilterValue;\n /** Callback triggered when a new filter value is selected */\n onSelect: (value: FilterValue) => void;\n\n /** Callback triggered when validation fails */\n onError?: () => void;\n\n /** Callback triggered for custom validations of the filter */\n onValidate?: (currentValue: FilterValue) => FilterValidationResult;\n\n /** CSS Class name for additional styles */\n className?: string;\n}\n\nexport const FreeTextFilter: React.FC<FreeTextFilterProps> = ({\n value,\n onSelect,\n onError = noop,\n onValidate: customValidate,\n className = '',\n}) => {\n const [errorMsg, setErrorMsg] = useState<string>();\n const ENTER_KEY = 'Enter';\n\n const [valueLocal, setValue] = useState(value || '');\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (e) => {\n if (e.key === ENTER_KEY) {\n const value = e.currentTarget.value;\n\n const validationMessage = customValidate && customValidate(value);\n\n if (validationMessage) {\n setErrorMsg(validationMessage);\n onError();\n } else {\n onSelect(value ? value : undefined);\n }\n }\n };\n\n return (\n <div\n className={clsx(\n classes.container,\n 'free-text-filter-container',\n className,\n )}\n >\n <input\n autoFocus\n className={clsx(classes.inputValue, errorMsg && classes.hasError)}\n onKeyDown={handleKeyDown}\n value={valueLocal as string}\n onChange={(e) => setValue(e.target.value)}\n />\n {errorMsg !== undefined && <small>{errorMsg}</small>}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React, { KeyboardEventHandler, useState } from 'react';\nimport { noop } from '../../../../helpers/utils';\nimport { FilterValidationResult, FilterValue } from '../../Filters.model';\nimport classes from './NumericTextFilter.scss';\n\nexport interface NumericTextFilterProps {\n value?: string | number;\n\n /** Callback triggered when a new filter value is selected */\n onSelect: (value: FilterValue) => void;\n\n /** Callback triggered when validation fails */\n onError?: () => void;\n\n /** Callback triggered for custom validations of the filter */\n onValidate?: (currentValue: FilterValue) => FilterValidationResult;\n\n /** CSS Class name for additional styles */\n className?: string;\n}\n\nexport const NumericTextFilter: React.FC<NumericTextFilterProps> = ({\n value,\n onSelect,\n onError = noop,\n onValidate: customValidate,\n className = '',\n}) => {\n const [errorMsg, setErrorMsg] = useState<string>();\n const ENTER_KEY = 'Enter';\n\n const [valueLocal, setValue] = useState(value || '');\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (e): void => {\n if (e.key === ENTER_KEY) {\n if (e.currentTarget.value === '') {\n onSelect(undefined);\n return;\n }\n\n const value = Number(e.currentTarget.value);\n\n const validationMessage = customValidate && customValidate(value);\n\n if (validationMessage) {\n setErrorMsg(validationMessage);\n onError();\n } else if (isNaN(value)) {\n setErrorMsg('Enter a number');\n onError();\n } else {\n onSelect(value);\n }\n }\n };\n\n return (\n <div\n className={clsx(\n classes.container,\n 'numeric-text-filter-container',\n className,\n )}\n >\n <input\n autoFocus\n value={valueLocal}\n className={clsx(classes.inputValue, errorMsg && classes.hasError)}\n onKeyDown={handleKeyDown}\n type=\"number\"\n onChange={(e) => setValue(e.target.value)}\n />\n {errorMsg !== undefined && <small>{errorMsg}</small>}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { Option } from '../../Filters.model';\nimport classes from './OptionsFilter.scss';\n\nexport interface OptionFilterProps {\n value?: string;\n\n /** Array of Options to be displayed */\n options: Option[];\n\n /** Callback triggered when a new filter value is selected */\n onSelect: (text: string) => void;\n\n /** CSS Class name for additional styles */\n className?: string;\n}\n\nexport const OptionsFilter: React.FC<OptionFilterProps> = ({\n value,\n options,\n onSelect,\n className = '',\n}) => {\n return (\n <div\n className={clsx(classes.container, 'options-filter-container', className)}\n >\n {options?.map((option: Option) => (\n <div\n className={clsx(classes.option)}\n onClick={() => onSelect(option.value)}\n key={option.label}\n data-test-value={option.value as string}\n >\n <span\n className={clsx(value === option.value && classes.selected)}\n data-test-id=\"label\"\n >\n {option.label}\n </span>\n </div>\n ))}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport { debounce } from 'lodash';\nimport React, { ChangeEvent, useCallback, useEffect, useState } from 'react';\nimport { Option } from '../../Filters.model';\nimport {\n OptionFilterProps,\n OptionsFilter,\n} from '../OptionsFilter/OptionsFilter';\nimport classes from './SearcheableOptionsFilter.scss';\n\ninterface SearcheableOptionFilterProps\n extends Omit<OptionFilterProps, 'options'> {\n optionsProvider: (searchText: string) => Option[];\n searchInputPlaceholder?: string;\n maxItems?: number;\n onSelect: (value: string, stringValue?: string) => void;\n}\n\nexport const SearcheableOptionsFilter: React.FC<\n SearcheableOptionFilterProps\n> = ({\n optionsProvider,\n searchInputPlaceholder = '',\n maxItems = 10,\n onSelect,\n className,\n ...rest\n}) => {\n const [options, setOptions] = useState<Option[]>([]);\n\n const getOptions = useCallback(\n async (value: string) => {\n setOptions(await optionsProvider(value));\n },\n [optionsProvider],\n );\n\n useEffect(() => {\n getOptions('');\n }, [getOptions]);\n\n const onChangeHandler = async (\n e: ChangeEvent<HTMLInputElement>,\n ): Promise<void> => {\n const value = e.target.value;\n getOptions(value);\n };\n\n return (\n <>\n <div\n className={clsx(\n classes.container,\n 'free-text-filter-container',\n className,\n )}\n >\n <input\n autoFocus\n onChange={debounce(onChangeHandler, 500)}\n className={clsx(classes.inputValue, '' && classes.hasError)}\n placeholder={searchInputPlaceholder}\n />\n </div>\n <OptionsFilter\n options={options?.slice(0, maxItems)}\n {...rest}\n onSelect={(value) =>\n onSelect(\n value,\n options.find((option) => option.value === value)?.label,\n )\n }\n />\n {options?.length === 0 && (\n <div className={clsx(classes.noDataMessage)}>\n <p>No items found</p>\n </div>\n )}\n </>\n );\n};\n","import clsx from 'clsx';\nimport React, {\n PropsWithChildren,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { assertNever } from '../../../helpers/utils';\nimport { Data } from '../../../types/data';\nimport { Button, ButtonContext } from '../../Buttons';\nimport { IconName } from '../../Icons';\nimport { formatDate, formatDateTime } from '../../Utils/Transformers/DateTime';\nimport { FilterType, FilterTypes, FilterValue } from '../Filters.model';\nimport { DateTimeFilter } from '../SelectionTypes/DateTimeFilter/DateTimeFilter';\nimport { FreeTextFilter } from '../SelectionTypes/FreeTextFilter/FreeTextFilter';\nimport { NumericTextFilter } from '../SelectionTypes/NumericTextFilter/NumericTextFilter';\nimport { OptionsFilter } from '../SelectionTypes/OptionsFilter/OptionsFilter';\nimport { SearcheableOptionsFilter } from '../SelectionTypes/SearcheableOptionsFilter/SearcheableOptionsFilter';\nimport classes from './Filter.scss';\n\nexport interface FilterProps<T extends Data> {\n options: FilterType<T>;\n value?: FilterValue;\n index?: number;\n isActive: boolean;\n className?: string;\n onFilterChange: (prop: keyof T, value: FilterValue, index: number) => void;\n onValidate?: (currentValue: FilterValue) => string | null | undefined;\n onFilterClicked: () => void;\n}\n\nexport const Filter = <T extends Data>({\n options,\n value,\n index = -1,\n isActive,\n className = '',\n onFilterChange,\n onFilterClicked,\n onValidate,\n}: PropsWithChildren<FilterProps<T>>): JSX.Element => {\n const [isExpanded, setIsExpanded] = useState<boolean>(false);\n const [hasError, setHasError] = useState<boolean>(false);\n const [contentHeight, setContentHeight] = useState<number>(0);\n const [stringValue, setStringValue] = useState<string | undefined>();\n\n const contentRef = useRef<HTMLDivElement>(null);\n const valueRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setContentHeight(\n (contentRef.current?.scrollHeight ?? 0) +\n (valueRef.current?.scrollHeight ?? 0),\n );\n }, [isExpanded, hasError, value]);\n\n const onFilterValueChange = (\n prop: keyof T,\n value: FilterValue,\n stringValue?: string,\n ): void => {\n onFilterChange(prop, value, index);\n setIsExpanded(false);\n setHasError(false);\n setStringValue(stringValue);\n };\n\n const onError = (): void => {\n setHasError(true);\n };\n\n const renderValue = (value: unknown): ReactNode => {\n switch (options.type) {\n case FilterTypes.Date:\n return formatDate(String(value));\n case FilterTypes.DateTime:\n return formatDateTime(String(value));\n case FilterTypes.Options:\n return options.options.find((option) => option.value === value)?.label;\n case FilterTypes.SearcheableOptions:\n return stringValue;\n default:\n return stringValue ?? String(value);\n }\n };\n\n const renderFilterContent = (): JSX.Element => {\n switch (options.type) {\n case FilterTypes.FreeText:\n return (\n <FreeTextFilter\n value={value}\n onSelect={(value: FilterValue) =>\n onFilterValueChange(options.property, value)\n }\n onError={onError}\n onValidate={onValidate}\n />\n );\n\n case FilterTypes.Numeric:\n return (\n <NumericTextFilter\n value={value as number}\n onSelect={(value: FilterValue) =>\n onFilterValueChange(options.property, value)\n }\n onError={onError}\n onValidate={onValidate}\n />\n );\n\n case FilterTypes.Options:\n return (\n <OptionsFilter\n value={value as string}\n options={options.options}\n onSelect={(value: FilterValue) =>\n onFilterValueChange(options.property, value)\n }\n />\n );\n\n case FilterTypes.SearcheableOptions:\n return (\n <SearcheableOptionsFilter\n value={value as string}\n optionsProvider={options.optionsProvider}\n searchInputPlaceholder={options.searchInputPlaceholder}\n onSelect={(value: FilterValue, stringValue?: string) =>\n onFilterValueChange(options.property, value, stringValue)\n }\n maxItems={options.maxItems}\n />\n );\n\n case FilterTypes.Date:\n return (\n <DateTimeFilter\n value={value as string}\n onSelect={(value: FilterValue) =>\n onFilterValueChange(options.property, value)\n }\n modifyTime={false}\n onError={onError}\n onValidate={onValidate}\n />\n );\n\n case FilterTypes.DateTime:\n return (\n <DateTimeFilter\n value={value as string}\n onSelect={(value: FilterValue) =>\n onFilterValueChange(options.property, value)\n }\n modifyTime={true}\n onError={onError}\n onValidate={onValidate}\n />\n );\n\n case FilterTypes.Custom:\n return (\n <options.component\n value={value}\n active={isActive}\n onSelect={(value: FilterValue, stringValue?: string) => {\n onFilterValueChange(options.property, value, stringValue);\n }}\n onError={onError}\n onValidate={onValidate}\n />\n );\n\n default:\n //Exhaustiveness check\n throw assertNever(options);\n }\n };\n\n return (\n <div\n className={clsx(classes.container, 'filter-container', className)}\n data-test-id={`filter:${options.property as string}`}\n data-test-type={FilterTypes[options.type]}\n onClick={() => onFilterClicked()}\n >\n <div\n onClick={() => {\n setIsExpanded(!isExpanded);\n setHasError(false);\n }}\n className={clsx(\n classes.title,\n { [classes.expanded]: isExpanded && isActive },\n hasError && classes.hasError,\n !!value && classes.active,\n )}\n data-test-id=\"filter-button-toggle\"\n >\n <span data-test-id=\"filter-label\">{options.label}</span>\n <Button\n icon={IconName.ChevronDown}\n className={clsx(classes.button)}\n buttonContext={ButtonContext.None}\n />\n </div>\n <div\n className={clsx(classes.content)}\n style={{\n maxHeight: contentHeight,\n }}\n >\n {value !== undefined && !isExpanded && (\n <div\n className={clsx(classes.selectedValue)}\n ref={valueRef}\n onClick={() => {\n setIsExpanded(!isExpanded);\n }}\n >\n <span data-test-id=\"filter-value\">{renderValue(value)}</span>\n <Button\n icon={IconName.RemoveFilter}\n className={clsx(classes.button)}\n dataTestId=\"filter-button-clear\"\n buttonContext={ButtonContext.None}\n onButtonClicked={(e) => {\n e.stopPropagation();\n onFilterValueChange(options.property, undefined);\n }}\n />\n </div>\n )}\n {isExpanded && (\n <div\n ref={contentRef}\n data-test-id=\"filter-content\"\n className={clsx({ [classes.active]: isActive })}\n >\n {renderFilterContent()}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React, { PropsWithChildren, useEffect, useRef, useState } from 'react';\nimport { Data } from '../../types/data';\nimport { Filter } from './Filter/Filter';\nimport { FilterType, FilterValue, FilterValues } from './Filters.model';\nimport classes from './Filters.scss';\n\nexport interface FiltersProps<T extends Data> {\n options?: FilterType<T>[];\n defaultValues?: FilterValues<T>;\n onFiltersChange?: (filters: FilterValues<T>) => void;\n className?: string;\n}\n\ntype CompositeFilters<T extends Data> = {\n [K in keyof T]?: (FilterType<T> & { index: number })[];\n};\n\n/**\n * Renders filter components depending on the options specified in params\n * FreeTextFilter and OptionsFilter are inbuilt filter types and its possible to pass custom\n * filters with filter type of CustomFilter\n * @param array - filters: Array of FilterControl elements to define all the filters\n * @Param object - filters: Object of currently active filters\n * @param function - onFiltersChange: callBack function to invoke when the selected value for filter is changed\n * @example\n * <Filter filters={[freeTextFilter, optionsFilter, customFilter]} onFiltersChange={callBackFn} />\n */\nexport const Filters = <T extends Data>({\n defaultValues: defaultFilters = {},\n options,\n onFiltersChange,\n className = '',\n}: PropsWithChildren<FiltersProps<T>>): JSX.Element => {\n const activeFilters = useRef<FilterValues<T>>(defaultFilters);\n const [compositeFilters, setCompositeFilters] = useState<CompositeFilters<T>>(\n {},\n );\n const [activeFilterIndex, setActiveFilterIndex] = useState<number>(-1);\n\n useEffect(() => {\n const compositeFiltersUpdate: CompositeFilters<T> = {};\n\n options?.forEach((filter, index) => {\n const { property } = filter;\n if (\n options?.slice(index + 1).findIndex((v) => v.property === property) > -1\n ) {\n compositeFiltersUpdate[property] = [];\n\n options?.forEach((filter, index) => {\n if (filter.property === property) {\n compositeFiltersUpdate[property]?.push({ ...filter, index });\n }\n });\n }\n });\n\n setCompositeFilters(compositeFiltersUpdate);\n }, [options]);\n\n const filtersChangedHandler = (\n prop: keyof T,\n value: FilterValue,\n index: number,\n ): void => {\n let updateValue = value;\n if (Object.keys(compositeFilters).indexOf(String(prop)) > -1) {\n const existing = activeFilters.current[prop];\n\n if (!existing) {\n updateValue = compositeFilters[prop]?.map((filter) => {\n if (filter.index === index) {\n return value;\n }\n return undefined;\n });\n } else {\n updateValue = [...(existing as FilterValue[])];\n const updateIndex = compositeFilters[prop]?.findIndex(\n (filter) => filter.index === index,\n );\n\n if (updateIndex !== undefined) {\n (updateValue as FilterValue[])[updateIndex] = value;\n }\n }\n\n if ((updateValue as FilterValue[]).every((v) => v === undefined)) {\n updateValue = undefined;\n }\n }\n\n // Add the filter and remove any filters whose value is undefined\n activeFilters.current = Object.entries({\n ...activeFilters.current,\n [prop]: updateValue,\n })\n .filter(([, v]) => v !== undefined)\n .reduce<FilterValues<T>>((obj, [key, value]) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n obj[key] = value;\n return obj;\n }, {});\n\n // Emit new set of filters\n if (onFiltersChange) {\n onFiltersChange(activeFilters.current);\n }\n };\n\n const onFilterClickedHandler = (idx: number): void => {\n setActiveFilterIndex(idx);\n };\n\n const renderFilter = (filter: FilterType<T>, index: number): JSX.Element => {\n let value = activeFilters.current[filter.property];\n if (Object.keys(compositeFilters).indexOf(String(filter.property)) > -1) {\n const valueIndex = compositeFilters[filter.property]?.findIndex(\n (f) => f.index === index,\n );\n\n if (valueIndex !== undefined && activeFilters.current[filter.property]) {\n value = (activeFilters.current[filter.property] as [])[valueIndex];\n }\n }\n\n return (\n <Filter<T>\n options={filter}\n value={value}\n key={filter.label}\n index={index}\n isActive={index === activeFilterIndex}\n onFilterChange={filtersChangedHandler}\n onValidate={(currentValue) =>\n filter.onValidate &&\n filter.onValidate(currentValue, activeFilters.current)\n }\n onFilterClicked={() => onFilterClickedHandler(index)}\n />\n );\n };\n\n return (\n <div\n className={clsx(\n { [classes.container]: options },\n 'filter-container',\n className,\n )}\n data-test-id=\"filters\"\n >\n {options?.map((filter: FilterType<T>, index: number) =>\n renderFilter(filter, index),\n )}\n </div>\n );\n};\n","import { Data } from '../../types/data';\n\nexport enum ListSelectMode {\n None,\n Single,\n Multi,\n}\n\nexport type ColumnRenderer<T extends Data> =\n /**\n * @param value Column data\n * @param data Complete row data\n */\n (value: unknown, data: T) => React.ReactNode;\n\nexport interface ColumnSortKeys {\n ascending: string;\n descending: string;\n}\n\nexport interface Column<T extends Data> {\n /** The name of the property on the Data object that should be rendered in that column. */\n propertyName: keyof T;\n /** The width of the column as CSS size (default: 1fr) */\n size?: string;\n /** Column's header label */\n label?: string;\n /** If set to false, disables sorting for this column (default: true) */\n sortable?: boolean;\n /**\n * A custom render function that will be called for every row that should be rendered.\n * The List will already try to render the data in a meaningful way, but in some advanced use cases more control is required.\n * @memberof Column\n */\n render?: ColumnRenderer<T>;\n /**\n * If set to false, will not render a tooltip for the column data (default: undefined)\n * If a custom renderer is used that will not return a value cast-able to a string, you should consider setting this property to false and add a title attribute on the component returned by the custom renderer.\n */\n tooltip?: boolean;\n /** Additional data passed into the render function */\n extras?: unknown;\n\n /** Specify explicit enum keys to use for ascending and descending sorting */\n columnSortKeys?: ColumnSortKeys;\n\n /** Specify the horizontal text alignment of the column */\n horizontalColumnAlign?: 'left' | 'center' | 'right';\n}\n\nexport interface ColumnMap {\n [key: string]: string;\n}\n\nexport interface ListItem<T extends Data> {\n selected: boolean;\n data: T;\n}\n\nexport interface ItemSelectEventArgs<T extends Data> {\n mode: 'SINGLE_ITEMS' | 'SELECT_ALL';\n items?: T[];\n}\n\nexport interface SortData<T> {\n /** Name of the property to sort by */\n column: keyof T;\n /** Sorting direction */\n direction: 'asc' | 'desc';\n\n columnSortKey?: string;\n}\n","import clsx from 'clsx';\nimport React from 'react';\nimport { noop } from '../../../helpers/utils';\nimport { Button, ButtonContext } from '../../Buttons';\nimport { IconName } from '../../Icons';\nimport classes from './ListCheckBox.scss';\n\nexport interface ListCheckBoxProps {\n /** Checkbox's height (default: '50px') */\n height?: string;\n /** Checkbox's width (default: '50px') */\n width?: string;\n /** Whether or not the checkbox is currently checked (default: false) */\n isChecked?: boolean;\n /** Whether or not it needs to prevent the click event on the container element from propagating upwards (default: false)*/\n containerClickEvent?: boolean;\n /** Whether or not the checkbox needs to be disabled (default: false) */\n isDisabled?: boolean;\n /** Callback to emit when the checkbox is toggled */\n onCheckBoxToggled?: (checked: boolean) => void;\n /** CSS Class name for additional styles */\n className?: string;\n}\n\nexport const ListCheckBox: React.FC<ListCheckBoxProps> = ({\n height = '50px',\n width = '50px',\n isDisabled = false,\n isChecked = false,\n containerClickEvent = false,\n onCheckBoxToggled = noop,\n className = '',\n}) => {\n // Prevents the click event on the container element from propagating upwards.\n const containerHandler = (event: React.SyntheticEvent): void => {\n if (containerClickEvent) {\n return;\n } else {\n event.stopPropagation();\n }\n };\n\n return (\n <div\n className={clsx(classes.container, 'list-checkbox-container', className)}\n onClick={containerHandler}\n >\n <Button\n height={height}\n width={width}\n buttonContext={isChecked ? ButtonContext.Active : ButtonContext.Context}\n icon={isChecked ? IconName.Checkmark : undefined}\n disabled={isDisabled}\n onButtonClicked={() => {\n onCheckBoxToggled(!isChecked);\n }}\n className={clsx({\n [classes.disabled]: isDisabled,\n })}\n dataTestId=\"list-entry-checkbox\"\n />\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React, { PropsWithChildren } from 'react';\nimport { noop } from '../../../../helpers/utils';\nimport { ColumnSortKeys, SortData } from '../../List.model';\nimport classes from './ColumnLabel.scss';\n\nexport interface ColumnLabelProps<T> {\n /** Data object's property name associated with this column */\n propertyName: keyof T;\n /** Column label */\n label?: string;\n /** If set to false, disables sorting for this column (default: true) */\n sortable?: boolean;\n /** If set, allow to directly specify which sorting enum value to use */\n columnSortKeys?: ColumnSortKeys;\n /** Defines how the list data should be sorted. */\n sortData?: SortData<T>;\n /** Callback to emit when a user clicks on this component. The name of the property and the order of the direction are sent back. */\n onSortChanged?: (sort: SortData<T>) => void;\n}\n\nexport const ColumnLabel = <T,>({\n propertyName,\n label,\n sortable = true,\n columnSortKeys,\n sortData,\n onSortChanged = noop,\n}: PropsWithChildren<ColumnLabelProps<T>>): JSX.Element => {\n /** Creates sort data object to be emitted back on change event. */\n const getSortDir = (): SortData<T> => {\n if (sortData?.column === propertyName && sortData.direction === 'asc') {\n return {\n column: propertyName,\n direction: 'desc',\n columnSortKey: columnSortKeys?.descending,\n };\n } else {\n return {\n column: propertyName,\n direction: 'asc',\n columnSortKey: columnSortKeys?.ascending,\n };\n }\n };\n\n /** Determines if the current column is currently being used to sort and which direction. */\n const direction =\n sortData?.column === propertyName ? sortData.direction : undefined;\n\n if (!sortable) {\n return (\n <div\n className={classes.container}\n data-test-id={`list-label:${String(propertyName)}`}\n >\n <span className={classes.label}>{label ?? propertyName}</span>\n </div>\n );\n } else {\n return (\n <div className={classes.container}>\n <div\n className={clsx(classes.clickWrapper, classes.sortable)}\n onClick={() => onSortChanged(getSortDir())}\n data-test-id={`list-label:${String(propertyName)}`}\n data-test-sort-dir={direction ?? 'none'}\n >\n <span className={classes.label} title={label ?? String(propertyName)}>\n {label ?? propertyName}\n </span>\n <div className={classes.arrows}>\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 13 10\"\n >\n <path\n className={clsx({ [classes.sorted]: direction === 'asc' })}\n d=\"M1.5,7.3l4.8-5.7l5.2,5.7\"\n ></path>\n </svg>\n <svg\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 13 10\"\n >\n <path\n className={clsx({ [classes.sorted]: direction === 'desc' })}\n d=\"M11.5,2.8L6.7,8.5L1.5,2.8\"\n ></path>\n </svg>\n </div>\n </div>\n </div>\n );\n }\n};\n","import clsx from 'clsx';\nimport React, { PropsWithChildren } from 'react';\nimport { Data } from '../../../types/data';\nimport { Column, SortData } from '../List.model';\nimport { ListCheckBox } from '../ListCheckBox/ListCheckBox';\nimport { ColumnLabel } from './ColumnLabel/ColumnLabel';\nimport classes from './ListHeader.scss';\n\nexport interface ListHeaderProps<T extends Data> {\n /** Column definitions */\n columns: Column<T>[];\n /** Sizes of each column */\n columnSizes: string;\n /** Spacing between columns */\n columnGap: string;\n /** Header row height */\n rowHeight: string;\n /** Size of the checkbox */\n actionSize: string;\n /** Horizontal alignment of text */\n horizontalTextAlign: 'left' | 'right' | 'center';\n /** Vertical alignment of text */\n verticalTextAlign: 'start' | 'center' | 'end';\n /** Whether or not the item is selected (default: false) */\n itemSelected?: boolean;\n /** Defines how the list data should be sorted */\n sortData?: SortData<T>;\n /** Defines whether the create button will be rendered (default: true) */\n showCreateButton?: boolean;\n /** Defines whether a checkbox for each item should be rendered (default: true) */\n showItemCheckbox?: boolean;\n /** Whether or not the checkbox needs to be disabled (default: false) */\n isCheckboxDisabled?: boolean;\n /** Raised when the header checkbox has been changed. Checked state is sent back. */\n onCheckboxToggled?: (checked: boolean) => void;\n /** Callback to emit when a sort event occurs. Name of the property and order of the direction are sent back. */\n onSortChanged?: (sort: SortData<T>) => void;\n /** CSS Class name for additional styles */\n className?: string;\n}\n\n/**\n * Renders the headers for the list component\n * @example\n * <ListHeader\n * columns={[{propertyName: 'id', size: '1fr', label: 'Id'}]}\n * columnSizes={'1fr'}\n * columnGap={'5px'}\n * rowHeight={'44px'}\n * horizontalTextAlign={'left'}\n * verticalTextAlign={'center'}\n * />\n */\nexport const ListHeader = <T extends Data>({\n columns,\n columnSizes,\n columnGap,\n rowHeight,\n actionSize,\n horizontalTextAlign,\n verticalTextAlign,\n itemSelected = false,\n sortData,\n showItemCheckbox = true,\n isCheckboxDisabled = false,\n onCheckboxToggled,\n onSortChanged,\n className = '',\n}: PropsWithChildren<ListHeaderProps<T>>): JSX.Element => {\n const customStyles = {\n gridAutoRows: rowHeight,\n gridTemplateColumns: columnSizes,\n gridColumnGap: columnGap,\n justifyItems: horizontalTextAlign,\n alignItems: verticalTextAlign,\n } as React.CSSProperties;\n\n return (\n <div\n className={clsx(classes.container, 'list-header-container', className)}\n style={customStyles}\n data-test-id=\"list-header\"\n >\n {columns.map((column) => (\n <div\n key={column.propertyName as string}\n className={clsx(classes.columnLabel)}\n >\n <ColumnLabel<T>\n propertyName={column.propertyName}\n label={column.label ?? (column.propertyName as string)}\n sortable={column.sortable}\n columnSortKeys={column?.columnSortKeys}\n sortData={sortData}\n onSortChanged={onSortChanged}\n />\n </div>\n ))}\n {showItemCheckbox && (\n <ListCheckBox\n height={actionSize}\n width={actionSize}\n isChecked={itemSelected}\n isDisabled={isCheckboxDisabled}\n onCheckBoxToggled={onCheckboxToggled}\n />\n )}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport { LocationDescriptor } from 'history';\nimport React, { PropsWithChildren, useCallback, useRef } from 'react';\nimport { Link, useHistory } from 'react-router-dom';\nimport { noop } from '../../../helpers/utils';\nimport { Data } from '../../../types/data';\nimport { getTooltipText } from '../../../utils/ToolTipHelpers';\nimport { ActionData } from '../../Actions/Actions.models';\nimport { Button } from '../../Buttons';\nimport { IconName } from '../../Icons';\nimport { InlineMenu } from '../../InlineMenu/InlineMenu';\nimport { Column, ListSelectMode } from '../List.model';\nimport { ListCheckBox } from '../ListCheckBox/ListCheckBox';\nimport classes from './ListRow.scss';\n\nexport interface ListRowProps<T extends Data> {\n /** Spacing between columns */\n columnSizes: string;\n /** Header row height */\n columnGap: string;\n /** List row height */\n rowHeight: string;\n /** Size of action button and checkbox */\n actionSize: string;\n /** Horizontal alignment of text */\n horizontalTextAlign: 'left' | 'right' | 'center';\n /** Vertical alignment of text */\n verticalTextAlign: 'start' | 'center' | 'end';\n /** List data */\n data: T;\n /** The column definition */\n columns: Column<T>[];\n /** Whether or not the item is selected (default: false) */\n itemSelected?: boolean;\n /** Whether or not the item is a trigger for pagination (default: false) */\n isTrigger?: boolean;\n /** Determines which selection mode the list is in. (default: ListSelectMode.None) */\n selectionMode?: ListSelectMode;\n /** Defines whether an action button will be rendered (default: true) */\n showActionButton?: boolean;\n /** Defines whether a check mark action button will be rendered (default: true) */\n showCheckMark?: boolean;\n /** Defines whether a checkbox for each item should be rendered (default: false) */\n showItemCheckbox?: boolean;\n /** Defines whether a row is disabled (default: false) */\n isRowDisabled?: boolean;\n\n /** Used for when a row is clicked. This can be either a callback function that will be executed\n * or a URL where the user should be navigated to.\n * When the list should navigate the user to e.g. a details page of a entry it is recommended to\n * directly pass the URL here instead of a callback function that does the routing in JavaScript. */\n onItemClicked?: LocationDescriptor<unknown> | ((data: T) => void);\n /**\n * A function that is getting called, when the selection state of the row changes.\n */\n onItemSelected?: (checked: boolean) => void;\n /**\n * A function that is getting called, when the element acts as a trigger (`isTrigger = true`) and gets into view.\n */\n onTriggered?: () => void;\n /** Provide inline actions which are available through '...' context menu */\n inlineMenuActions?: (data: T) => ActionData[];\n}\n\nlet dateFormatter: Intl.DateTimeFormat;\n\nlet numberFormatter: Intl.NumberFormat;\n\nexport const setLocale = (locale: string): void => {\n dateFormatter = new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n });\n\n numberFormatter = new Intl.NumberFormat(navigator.language);\n};\n\nsetLocale(navigator.language);\n\nfunction renderData<T extends Data>(\n column: Column<T>,\n rowData: T,\n propertyName: keyof T,\n): React.ReactNode {\n const value: unknown = rowData[propertyName];\n if (column.render) {\n return column.render(value, rowData);\n }\n\n if (value === null || value === undefined) {\n return '';\n }\n\n if (typeof value === 'number') {\n return numberFormatter.format(value);\n }\n\n if (value instanceof Date) {\n return dateFormatter.format(value);\n }\n\n return String(value);\n}\n\n/**\n * Renders the rows for the list component\n * @example\n * <ListRow\n * key={index}\n * data={[{id: '1',desc: 'Description 1',title: 'Item 1'}]}\n * columnSizes={'1fr'}\n * columnGap={'5px'}\n * rowHeight={'50px'}\n * horizontalTextAlign={'left'}\n * verticalTextAlign={'center'}\n * />\n */\nexport const ListRow = <T extends Data>({\n columnSizes,\n columnGap,\n rowHeight,\n actionSize,\n horizontalTextAlign,\n verticalTextAlign,\n data,\n itemSelected = false,\n isTrigger = false,\n columns,\n selectionMode = ListSelectMode.None,\n showActionButton = true,\n showCheckMark = false,\n showItemCheckbox = false,\n onItemClicked = noop,\n onItemSelected = noop,\n onTriggered = noop,\n isRowDisabled = false,\n inlineMenuActions,\n}: PropsWithChildren<ListRowProps<T>>): JSX.Element => {\n const customStyles = {\n gridAutoRows: rowHeight,\n gridTemplateColumns: columnSizes,\n gridColumnGap: columnGap,\n justifyItems: horizontalTextAlign,\n alignItems: verticalTextAlign,\n } as React.CSSProperties;\n const history = useHistory();\n\n // Trigger based on: https://www.youtube.com/watch?v=NZKUirTtxcg\n const onTriggeredHandler = useCallback(() => {\n onTriggered && onTriggered();\n }, [onTriggered]);\n const observer = useRef<IntersectionObserver>();\n const elementRef = useCallback(\n (node: HTMLDivElement) => {\n if (isTrigger === false) {\n return;\n }\n if (observer.current) {\n observer.current.disconnect();\n }\n observer.current = new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting) {\n onTriggeredHandler();\n }\n });\n\n if (node) {\n observer.current.observe(node);\n }\n },\n [isTrigger, onTriggeredHandler],\n );\n\n const onItemClickedHandler = useCallback(\n (data: T) => {\n // Do nothing if row is disabled\n if (isRowDisabled) {\n return;\n }\n\n // Emit onItemSelected only if list is in Multi mode\n if (selectionMode === ListSelectMode.Multi) {\n onItemSelected(!itemSelected);\n // Emit onItemClicked for all other modes\n } else if (typeof onItemClicked === 'function') {\n onItemClicked(data);\n }\n },\n [isRowDisabled, itemSelected, onItemClicked, onItemSelected, selectionMode],\n );\n\n const isLinkable: boolean =\n selectionMode === ListSelectMode.None &&\n typeof onItemClicked !== 'function';\n const allColumns: string[] = columnSizes.split(' ');\n const columnsWithoutActions: string[] = allColumns.slice(0, -1);\n const cssStyles: React.CSSProperties = {\n ...customStyles,\n gridTemplateColumns: isLinkable\n ? `1fr ${allColumns.slice(-1)}`\n : columnSizes,\n };\n\n const generateCells: JSX.Element[] = columns.map((column: Column<T>) => {\n const columnData: React.ReactNode = renderData<T>(\n column,\n data,\n column.propertyName,\n );\n\n return (\n <div\n key={column.propertyName as string}\n className={classes.cell}\n title={\n column.tooltip !== false ? getTooltipText(columnData) : undefined\n }\n data-test-id={`list-entry-property:${column.propertyName as string}`}\n style={{ justifySelf: column.horizontalColumnAlign }}\n >\n {columnData}\n </div>\n );\n });\n\n const inlineActionMenuData = inlineMenuActions\n ? inlineMenuActions(data)\n : undefined;\n\n const Row = (\n <div\n className={clsx(classes.columnsRoot, {\n [classes.selected]: itemSelected && showItemCheckbox,\n [classes.disabled]: isRowDisabled,\n })}\n style={cssStyles}\n onClick={() => {\n onItemClickedHandler(data);\n }}\n ref={isTrigger ? elementRef : null}\n data-test-id=\"list-entry\"\n >\n {/* Items */}\n {isLinkable ? (\n <Link\n to={onItemClicked as string}\n className={classes.link}\n style={{\n gridTemplateColumns: columnsWithoutActions.join(' '),\n gridTemplateRows: rowHeight,\n }}\n >\n {generateCells}\n </Link>\n ) : (\n <>{generateCells}</>\n )}\n {(inlineMenuActions || showActionButton) &&\n selectionMode === ListSelectMode.None && (\n <div className={classes.actions}>\n {inlineActionMenuData && inlineActionMenuData.length > 0 && (\n <InlineMenu\n actions={inlineActionMenuData}\n showArrow={false}\n placement=\"bottom-end\"\n onButtonClicked={(e) => e.stopPropagation()}\n />\n )}\n\n {showActionButton && (\n <Button\n icon={IconName.ChevronRight}\n height={actionSize}\n width={actionSize}\n onButtonClicked={() => {\n if (typeof onItemClicked !== 'function') {\n history.push(onItemClicked);\n }\n }}\n dataTestId=\"list-entry-action\"\n />\n )}\n </div>\n )}\n\n {showCheckMark && (\n <Button\n icon={IconName.Checkmark}\n height={actionSize}\n width={actionSize}\n dataTestId=\"list-entry-select-button\"\n className={clsx(classes.selectionCheckMark)}\n />\n )}\n {showItemCheckbox && (\n <ListCheckBox\n height={actionSize}\n width={actionSize}\n onCheckBoxToggled={onItemSelected}\n isChecked={itemSelected}\n isDisabled={isRowDisabled}\n />\n )}\n </div>\n );\n\n return Row;\n};\n","import { createElement } from 'react';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\n\nvar uid = (function () {\r\n return Math.random()\r\n .toString(36)\r\n .substring(6);\r\n});\n\nvar SVG = function (_a) {\r\n var animate = _a.animate, backgroundColor = _a.backgroundColor, backgroundOpacity = _a.backgroundOpacity, baseUrl = _a.baseUrl, children = _a.children, foregroundColor = _a.foregroundColor, foregroundOpacity = _a.foregroundOpacity, gradientRatio = _a.gradientRatio, uniqueKey = _a.uniqueKey, interval = _a.interval, rtl = _a.rtl, speed = _a.speed, style = _a.style, title = _a.title, props = __rest(_a, [\"animate\", \"backgroundColor\", \"backgroundOpacity\", \"baseUrl\", \"children\", \"foregroundColor\", \"foregroundOpacity\", \"gradientRatio\", \"uniqueKey\", \"interval\", \"rtl\", \"speed\", \"style\", \"title\"]);\r\n var fixedId = uniqueKey || uid();\r\n var idClip = fixedId + \"-diff\";\r\n var idGradient = fixedId + \"-animated-diff\";\r\n var idAria = fixedId + \"-aria\";\r\n var rtlStyle = rtl ? { transform: 'scaleX(-1)' } : null;\r\n var keyTimes = \"0; \" + interval + \"; 1\";\r\n var dur = speed + \"s\";\r\n return (createElement(\"svg\", __assign({ \"aria-labelledby\": idAria, role: \"img\", style: __assign(__assign({}, style), rtlStyle) }, props),\r\n title ? createElement(\"title\", { id: idAria }, title) : null,\r\n createElement(\"rect\", { role: \"presentation\", x: \"0\", y: \"0\", width: \"100%\", height: \"100%\", clipPath: \"url(\" + baseUrl + \"#\" + idClip + \")\", style: { fill: \"url(\" + baseUrl + \"#\" + idGradient + \")\" } }),\r\n createElement(\"defs\", null,\r\n createElement(\"clipPath\", { id: idClip }, children),\r\n createElement(\"linearGradient\", { id: idGradient },\r\n createElement(\"stop\", { offset: \"0%\", stopColor: backgroundColor, stopOpacity: backgroundOpacity }, animate && (createElement(\"animate\", { attributeName: \"offset\", values: -gradientRatio + \"; \" + -gradientRatio + \"; 1\", keyTimes: keyTimes, dur: dur, repeatCount: \"indefinite\" }))),\r\n createElement(\"stop\", { offset: \"50%\", stopColor: foregroundColor, stopOpacity: foregroundOpacity }, animate && (createElement(\"animate\", { attributeName: \"offset\", values: -gradientRatio / 2 + \"; \" + -gradientRatio / 2 + \"; \" + (1 +\r\n gradientRatio / 2), keyTimes: keyTimes, dur: dur, repeatCount: \"indefinite\" }))),\r\n createElement(\"stop\", { offset: \"100%\", stopColor: backgroundColor, stopOpacity: backgroundOpacity }, animate && (createElement(\"animate\", { attributeName: \"offset\", values: \"0; 0; \" + (1 + gradientRatio), keyTimes: keyTimes, dur: dur, repeatCount: \"indefinite\" })))))));\r\n};\r\nSVG.defaultProps = {\r\n animate: true,\r\n backgroundColor: '#f5f6f7',\r\n backgroundOpacity: 1,\r\n baseUrl: '',\r\n foregroundColor: '#eee',\r\n foregroundOpacity: 1,\r\n gradientRatio: 2,\r\n id: null,\r\n interval: 0.25,\r\n rtl: false,\r\n speed: 1.2,\r\n style: {},\r\n title: 'Loading...',\r\n};\n\nvar ContentLoader = function (props) {\r\n return props.children ? createElement(SVG, __assign({}, props)) : createElement(ReactContentLoaderFacebook, __assign({}, props));\r\n};\n\nvar ReactContentLoaderFacebook = function (props) { return (createElement(ContentLoader, __assign({ viewBox: \"0 0 476 124\" }, props),\r\n createElement(\"rect\", { x: \"48\", y: \"8\", width: \"88\", height: \"6\", rx: \"3\" }),\r\n createElement(\"rect\", { x: \"48\", y: \"26\", width: \"52\", height: \"6\", rx: \"3\" }),\r\n createElement(\"rect\", { x: \"0\", y: \"56\", width: \"410\", height: \"6\", rx: \"3\" }),\r\n createElement(\"rect\", { x: \"0\", y: \"72\", width: \"380\", height: \"6\", rx: \"3\" }),\r\n createElement(\"rect\", { x: \"0\", y: \"88\", width: \"178\", height: \"6\", rx: \"3\" }),\r\n createElement(\"circle\", { cx: \"20\", cy: \"20\", r: \"20\" }))); };\n\nvar ReactContentLoaderInstagram = function (props) { return (createElement(ContentLoader, __assign({ viewBox: \"0 0 400 460\" }, props),\r\n createElement(\"circle\", { cx: \"31\", cy: \"31\", r: \"15\" }),\r\n createElement(\"rect\", { x: \"58\", y: \"18\", rx: \"2\", ry: \"2\", width: \"140\", height: \"10\" }),\r\n createElement(\"rect\", { x: \"58\", y: \"34\", rx: \"2\", ry: \"2\", width: \"140\", height: \"10\" }),\r\n createElement(\"rect\", { x: \"0\", y: \"60\", rx: \"2\", ry: \"2\", width: \"400\", height: \"400\" }))); };\n\nvar ReactContentLoaderCode = function (props) { return (createElement(ContentLoader, __assign({ viewBox: \"0 0 340 84\" }, props),\r\n createElement(\"rect\", { x: \"0\", y: \"0\", width: \"67\", height: \"11\", rx: \"3\" }),\r\n createElement(\"rect\", { x: \"76\", y: \"0\", width: \"140\", height: \"11\", rx: \"3\" }),\r\n createElement(\"rect\", { x: \"127\", y: \"48\", width: \"53\", height: \"11\", rx: \"3\" }),\r\n createElement(\"rect\", { x: \"187\", y: \"48\", width: \"72\", height: \"11\", rx: \"3\" }),\r\n createElement(\"rect\", { x: \"18\", y: \"48\", width: \"100\", height: \"11\", rx: \"3\" }),\r\n createElement(\"rect\", { x: \"0\", y: \"71\", width: \"37\", height: \"11\", rx: \"3\" }),\r\n createElement(\"rect\", { x: \"18\", y: \"23\", width: \"140\", height: \"11\", rx: \"3\" }),\r\n createElement(\"rect\", { x: \"166\", y: \"23\", width: \"173\", height: \"11\", rx: \"3\" }))); };\n\nvar ReactContentLoaderListStyle = function (props) { return (createElement(ContentLoader, __assign({ viewBox: \"0 0 400 110\" }, props),\r\n createElement(\"rect\", { x: \"0\", y: \"0\", rx: \"3\", ry: \"3\", width: \"250\", height: \"10\" }),\r\n createElement(\"rect\", { x: \"20\", y: \"20\", rx: \"3\", ry: \"3\", width: \"220\", height: \"10\" }),\r\n createElement(\"rect\", { x: \"20\", y: \"40\", rx: \"3\", ry: \"3\", width: \"170\", height: \"10\" }),\r\n createElement(\"rect\", { x: \"0\", y: \"60\", rx: \"3\", ry: \"3\", width: \"250\", height: \"10\" }),\r\n createElement(\"rect\", { x: \"20\", y: \"80\", rx: \"3\", ry: \"3\", width: \"200\", height: \"10\" }),\r\n createElement(\"rect\", { x: \"20\", y: \"100\", rx: \"3\", ry: \"3\", width: \"80\", height: \"10\" }))); };\n\nvar ReactContentLoaderBulletList = function (props) { return (createElement(ContentLoader, __assign({ viewBox: \"0 0 245 125\" }, props),\r\n createElement(\"circle\", { cx: \"10\", cy: \"20\", r: \"8\" }),\r\n createElement(\"rect\", { x: \"25\", y: \"15\", rx: \"5\", ry: \"5\", width: \"220\", height: \"10\" }),\r\n createElement(\"circle\", { cx: \"10\", cy: \"50\", r: \"8\" }),\r\n createElement(\"rect\", { x: \"25\", y: \"45\", rx: \"5\", ry: \"5\", width: \"220\", height: \"10\" }),\r\n createElement(\"circle\", { cx: \"10\", cy: \"80\", r: \"8\" }),\r\n createElement(\"rect\", { x: \"25\", y: \"75\", rx: \"5\", ry: \"5\", width: \"220\", height: \"10\" }),\r\n createElement(\"circle\", { cx: \"10\", cy: \"110\", r: \"8\" }),\r\n createElement(\"rect\", { x: \"25\", y: \"105\", rx: \"5\", ry: \"5\", width: \"220\", height: \"10\" }))); };\n\nexport default ContentLoader;\nexport { ReactContentLoaderBulletList as BulletList, ReactContentLoaderCode as Code, ReactContentLoaderFacebook as Facebook, ReactContentLoaderInstagram as Instagram, ReactContentLoaderListStyle as List };\n//# sourceMappingURL=react-content-loader.es.js.map\n","import React from 'react';\n\n// Used for loading labels\nexport const SingleLineSkeleton = (\n <rect x=\"0\" y=\"0\" rx=\"3\" ry=\"3\" width=\"100%\" height=\"100%\" />\n);\n\n// Used for loading images\nexport const SquareOutlineSkeleton = <rect width=\"100%\" height=\"100%\" />;\n","import React, { ReactNode } from 'react';\nimport ContentLoader from 'react-content-loader';\nimport { SingleLineSkeleton } from '../skeletons';\nimport classes from './Loader.scss';\n\nexport interface LoaderProps {\n /** Whether to show or hide the loader animation */\n showLoader: boolean;\n /** SVGRectElement used as the loading animation. If set, will replace the default SVGRectElement */\n loadingSkeleton?: ReactNode;\n /** Loader's height (default: 100) */\n height?: string | number;\n /** Loader's width (default: 5) */\n width?: string | number;\n /** Animation speed (default: 2) */\n speed?: number;\n /** Loader's primary color (default: '#CCCCCC') */\n backgroundColor?: string;\n /** Loader's secondary color (default: '#EEECEC') */\n foregroundColor?: string;\n /** SVG's viewbox (default: '0 0 100 5'), adjust this change the skeleton's rendering*/\n viewBox?: string;\n}\n\n/**\n * Render a loader animation if showLoader is true, else show children of <Loader>\n * @param boolean showLoader - whether to show or hide the loader animation\n * @param ReactNode [loadingSkeleton = SingleLineSkeleton] - loading animation svg\n * @param number [width = 100] - width of Loader\n * @param number [height = 5] - height of Loader\n * @example\n * <Loader showLoader={true}>{children}</Loader>\n * <Loader showLoader={true}></Loader>\n */\nexport const Loader: React.FC<LoaderProps> = ({\n children,\n showLoader,\n width = 100,\n height = 5,\n loadingSkeleton = SingleLineSkeleton,\n speed = 2,\n backgroundColor = '#CCCCCC',\n foregroundColor = '#EEECEC',\n viewBox = '0 0 100 5',\n}) => {\n const customStyles = {\n height: height,\n width: width,\n } as React.CSSProperties;\n\n if (showLoader) {\n return (\n <div\n style={customStyles}\n className={classes.container}\n data-test-id=\"loader\"\n >\n <ContentLoader\n speed={speed}\n backgroundColor={backgroundColor}\n foregroundColor={foregroundColor}\n viewBox={viewBox}\n >\n {loadingSkeleton}\n </ContentLoader>\n </div>\n );\n }\n return <>{children}</>;\n};\n","import React, { PropsWithChildren } from 'react';\nimport { Column } from '..';\nimport { Data } from '../../../types/data';\nimport { Loader } from '../../Loaders/Loader/Loader';\nimport classes from './ListRow.scss';\n\nexport interface ListRowLoaderProps<T extends Data> {\n /** Spacing between columns */\n columnSizes: string;\n /** Header row height */\n columnGap: string;\n /** List row height */\n rowHeight: string;\n /** The column definition */\n columns: Column<T>[];\n}\n\nexport const ListRowLoader = <T extends Data>({\n columnSizes,\n columnGap,\n rowHeight,\n columns,\n}: PropsWithChildren<ListRowLoaderProps<T>>): JSX.Element => {\n const textLoaderHeight = 10;\n const rows = 5;\n\n const customRowStyles = {\n gridAutoRows: rowHeight,\n gridTemplateColumns: columnSizes,\n gridColumnGap: columnGap,\n } as React.CSSProperties;\n\n const rowElements = Array.from({ length: rows }, (v, k) => k).map((i) => (\n <div\n key={i}\n className={classes.columnsRoot}\n style={{\n ...customRowStyles,\n opacity: (rows - i) / rows,\n }}\n >\n {columns.map((column) => {\n const loaderWidth = getSize(column.size);\n return (\n <div key={column.propertyName as string} className={classes.cell}>\n <Loader\n showLoader={true}\n height={textLoaderHeight}\n width={loaderWidth}\n viewBox={`0 0 ${\n loaderWidth !== undefined ? loaderWidth : 100\n } ${textLoaderHeight}`}\n />\n </div>\n );\n })}\n </div>\n ));\n\n return <>{rowElements}</>;\n};\n\n/**\n * Extracts the numerical value from a pixel value\n * @param size column size\n */\nconst getSize = (size?: string): number | undefined => {\n return size !== undefined && size.includes('px')\n ? parseInt(size, 10)\n : undefined;\n};\n","import clsx from 'clsx';\nimport { LocationDescriptor } from 'history';\nimport React, {\n PropsWithChildren,\n ReactElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { ActionData } from '..';\nimport { noop } from '../../helpers/utils';\nimport { Data } from '../../types/data';\nimport { ButtonContext } from '../Buttons/Button.model';\nimport { TextButton } from '../Buttons/TextButton/TextButton';\nimport {\n Column,\n ItemSelectEventArgs,\n ListItem,\n ListSelectMode,\n SortData,\n} from './List.model';\nimport classes from './List.scss';\nimport { ListHeader } from './ListHeader/ListHeader';\nimport { ListRow } from './ListRow/ListRow';\nimport { ListRowLoader } from './ListRow/ListRowLoader';\n\nexport interface ListProps<T extends Data> {\n /**\n * Column definitions\n * The order of this array determines the order of columns\n */\n columns: Column<T>[];\n /** The name of the property on the data object that should be used to identify objects (default: 'id') */\n keyProperty?: keyof T;\n /** List data */\n data: T[];\n /** Defines whether data is being loaded (default: false) */\n isLoading?: boolean;\n /** Defines whether there was an error with the data. If true a button will be shown that will trigger `onRetry` when hit. */\n isError?: boolean;\n /** Optional error message to display if an error occurs. (default: 'There was an error.) */\n errorMsg?: string;\n /** Determines whether the component should render the error message and the 'onRetry' button. Set this to false if error handling will be done outside this component. (default: true) */\n handleRetry?: boolean;\n /** Minimum width of this component */\n minimumWidth?: string;\n /** Spacing between columns */\n columnGap?: string;\n /** Header row height */\n headerRowHeight?: string;\n /** List row height */\n listRowHeight?: string;\n /** List row action button and checkbox size (default: '50px') */\n listRowActionSize?: string;\n /** Header checkbox size (default: '28px') */\n headerRowActionSize?: string;\n /** Spacing between rows */\n rowGap?: string;\n /** Horizontal alignment of text */\n horizontalTextAlign?: 'left' | 'right' | 'center';\n /** Vertical alignment of text */\n verticalTextAlign?: 'start' | 'center' | 'end';\n /**\n * Determines which select mode the list is in. (default: ListSelectMode.None)\n * If 'Single' is selected, a check mark will be rendered for each row of data\n * If 'Multi' is selected, a checkbox will be rendered for the header and each row of data\n */\n selectionMode?: ListSelectMode;\n /** In multiselect mode, whether the Select All button will be displayed. When Select All button is clicked the onItemClicked button will return a filter query instead of an array of items. (default: true) */\n enableSelectAll?: boolean;\n /**\n * Defines whether an action button will be rendered (default: true)\n * Will not render if selectMode is not 'None'\n */\n showActionButton?: boolean;\n /** Defines when the loading of the next page is triggered. The number represents the number of row left, before a load is triggered. (default: 10) */\n loadingTriggerOffset?: number;\n /** Defines how the list data should be sorted */\n defaultSortOrder?: SortData<T>;\n /**\n * When set, this function is used to generate the link that the user should be navigated to for each item.\n *\n * This property takes precedence over `onItemClicked`, which will not be executed in case `generateItemLink` is set!\n */\n generateItemLink?: (data: T) => LocationDescriptor<unknown>;\n /**\n * Raised when an data item is clicked.\n *\n * This is not being used, if generateItemLink is set!\n */\n onItemClicked?: (data: T) => void;\n /** Raised when item selection has changed */\n onItemSelected?: (itemSelectEvent: ItemSelectEventArgs<T>) => void;\n /** Raised when list has scrolled down to the item indicated by loadingTriggerOffset */\n onRequestMoreData?: () => void;\n /** Callback to emit when a sort event occurs. Name of the property and order of the direction are sent back. */\n onSortChanged?: (sort: SortData<T>) => void;\n /** Callback emitted if the user clicks on the retry button which is shown when `isError` is set to true */\n onRetry?: () => void;\n /** CSS Class name for additional styles */\n className?: string;\n /** Provide inline actions which are available through '...' context menu */\n inlineMenuActions?: (data: T) => ActionData[];\n}\n\n/**\n * Generates a combined string of all columns.columnSize values, to be used as CSS value\n * @param columns The list of columns that should be used\n * @returns a string of all column sizes of the array, combined\n */\nconst getColumnsSizeDefinition = function <T extends Data>(\n columns: Column<T>[],\n showActionButton: boolean,\n selectMode: ListSelectMode,\n showInlineMenu: boolean,\n): string {\n const columnSizeDefinition = columns.map((column) => column.size ?? '1fr');\n\n const hasActionsColumn =\n selectMode !== ListSelectMode.None || showActionButton || showInlineMenu;\n\n if (hasActionsColumn) {\n columnSizeDefinition.push(\n getActionsColumnSizePx(showInlineMenu, showActionButton),\n );\n }\n\n return columnSizeDefinition.join(' ');\n};\n\nconst getActionsColumnSizePx = (...enableActions: boolean[]): string => {\n const enabledActionsCount = enableActions.filter(\n (actionEnabled) => actionEnabled,\n ).length;\n\n const defaultActionSizePx = 50;\n const defaultActionsRawGapPx = 8;\n const calculateMultiActionsColumnSizePx = (actionsCount: number): number => {\n return (\n defaultActionSizePx * actionsCount +\n defaultActionsRawGapPx * (actionsCount - 1)\n );\n };\n\n const sizePx =\n enabledActionsCount > 1\n ? calculateMultiActionsColumnSizePx(enabledActionsCount)\n : defaultActionSizePx;\n\n return `${sizePx}px`;\n};\n\nconst noItemsMessage = (\n itemsCount: number,\n isLoading: boolean,\n isError: boolean,\n): ReactElement | undefined => {\n if (!isLoading && !isError && itemsCount === 0) {\n return (\n <div className={clsx(classes.NoData)} data-test-id=\"list-empty\">\n <p>No items found</p>\n </div>\n );\n }\n};\n\nconst isTrigger = function <T extends Data>(\n index: number,\n listItems: ListItem<T>[],\n loadingTriggerOffset: number,\n): boolean {\n return listItems.length - loadingTriggerOffset === index + 1 ? true : false;\n};\n\nconst useSort = <T,>(\n defaultSortOrder: SortData<T> | undefined,\n onSortChanged: (sort: SortData<T>) => void,\n): {\n readonly sort: SortData<T> | undefined;\n readonly sortChangedHandler: (sort: SortData<T>) => void;\n} => {\n const [sort, setSort] = useState<SortData<T> | undefined>(defaultSortOrder);\n\n const sortChangedHandler = (sort: SortData<T>): void => {\n setSort(sort);\n onSortChanged && onSortChanged(sort);\n };\n\n return { sort, sortChangedHandler } as const;\n};\n\n/**\n * Renders various sets of data in a tabular format\n * @example\n * <List<DataInterface>\n * columns={[{propertyName: 'id', size: '1fr', label: 'Id'}]}\n * data={[{id: '1',desc: 'Description 1',title: 'Item 1'}]}\n * itemClicked={(item)=> {console.log(item)}}\n * />\n */\nexport const List = <T extends Data>({\n columns,\n data,\n isLoading = false,\n isError = false,\n errorMsg = 'There was an error.',\n handleRetry = true,\n minimumWidth = '500px',\n columnGap = '5px',\n rowGap = '0px',\n headerRowHeight = '44px',\n listRowHeight = '50px',\n listRowActionSize = '50px',\n headerRowActionSize = '28px',\n horizontalTextAlign = 'left',\n verticalTextAlign = 'center',\n keyProperty = 'id' as keyof T,\n showActionButton = true,\n loadingTriggerOffset = 10,\n defaultSortOrder,\n selectionMode = ListSelectMode.None,\n enableSelectAll = true,\n onItemClicked = noop,\n onItemSelected = noop,\n onRequestMoreData = noop,\n onSortChanged = noop,\n onRetry = noop,\n generateItemLink,\n className = '',\n inlineMenuActions,\n}: PropsWithChildren<ListProps<T>>): JSX.Element => {\n const [listItems, setListItems] = useState<ListItem<T>[]>([]);\n const isAllItemsChecked = useRef<boolean>(false);\n\n useEffect(() => {\n setListItems((prevState: ListItem<T>[]) => {\n const newListItems: ListItem<T>[] = data.map((i, index) => ({\n selected: isAllItemsChecked.current || prevState[index]?.selected,\n data: i,\n }));\n return newListItems;\n });\n }, [data]);\n\n const columnSizes = getColumnsSizeDefinition(\n columns,\n showActionButton,\n selectionMode,\n !!inlineMenuActions,\n );\n\n const customStyles = { gridRowGap: rowGap, minWidth: minimumWidth };\n\n const itemSelectionHandler = useCallback(\n (items: ListItem<T>[]) => {\n const selectedData: T[] = items.map(({ data }) => data);\n onItemSelected &&\n onItemSelected({\n mode: 'SINGLE_ITEMS',\n items: selectedData,\n });\n },\n [onItemSelected],\n );\n\n const headerCheckboxHandler = useCallback(\n (checked: boolean): void => {\n const newListItems: ListItem<T>[] = data.map((i) => ({\n selected: checked,\n data: i,\n }));\n setListItems(newListItems);\n isAllItemsChecked.current = checked;\n\n if (checked) {\n onItemSelected({\n mode: 'SELECT_ALL',\n });\n } else {\n onItemSelected({\n mode: 'SINGLE_ITEMS',\n items: [],\n });\n }\n },\n [data, onItemSelected],\n );\n\n const itemSelectedHandler = (selected: boolean, index: number): void => {\n const items = [...listItems];\n items[index].selected = selected;\n setListItems(items);\n itemSelectionHandler(items.filter((item) => item.selected === true));\n };\n\n const onTriggeredHandler = (): void => {\n if (!isLoading && !isError) {\n onRequestMoreData();\n }\n };\n\n const { sort, sortChangedHandler } = useSort(defaultSortOrder, onSortChanged);\n\n return (\n <div\n className={clsx(classes.wrapper, 'list-wrapper', className)}\n style={customStyles}\n data-test-id=\"list\"\n >\n {/* Header */}\n <ListHeader\n columns={columns}\n itemSelected={isAllItemsChecked.current}\n sortData={sort}\n columnSizes={columnSizes}\n columnGap={columnGap}\n rowHeight={headerRowHeight}\n actionSize={headerRowActionSize}\n horizontalTextAlign={horizontalTextAlign}\n verticalTextAlign={verticalTextAlign}\n showItemCheckbox={\n enableSelectAll && selectionMode === ListSelectMode.Multi\n }\n isCheckboxDisabled={listItems.length === 0}\n onCheckboxToggled={headerCheckboxHandler}\n onSortChanged={sortChangedHandler}\n />\n {/* Rows */}\n {listItems.map((item: ListItem<T>, index) => (\n <ListRow<T>\n key={String(item.data[keyProperty] || index)}\n columns={columns}\n data={item.data}\n itemSelected={item.selected}\n isTrigger={isTrigger<T>(index, listItems, loadingTriggerOffset)}\n isRowDisabled={\n isAllItemsChecked.current && selectionMode === ListSelectMode.Multi\n }\n columnSizes={columnSizes}\n columnGap={columnGap}\n rowHeight={listRowHeight}\n actionSize={listRowActionSize}\n horizontalTextAlign={horizontalTextAlign}\n verticalTextAlign={verticalTextAlign}\n selectionMode={selectionMode}\n showActionButton={\n showActionButton && selectionMode === ListSelectMode.None\n }\n showCheckMark={selectionMode === ListSelectMode.Single}\n showItemCheckbox={selectionMode === ListSelectMode.Multi}\n onItemClicked={\n generateItemLink ? generateItemLink(item.data) : onItemClicked\n }\n onTriggered={onTriggeredHandler}\n onItemSelected={(checked) => {\n itemSelectedHandler(checked, index);\n }}\n inlineMenuActions={inlineMenuActions}\n />\n ))}\n {isLoading && (\n <ListRowLoader\n columnSizes={columnSizes}\n columnGap={columnGap}\n rowHeight={listRowHeight}\n columns={columns}\n />\n )}\n {noItemsMessage(listItems.length, isLoading, isError)}\n {isError && handleRetry && (\n <div className={clsx(classes.error)}>\n <p>{errorMsg}</p>\n <TextButton\n text={'Retry'}\n height={listRowActionSize}\n width={'100px'}\n buttonContext={ButtonContext.Context}\n onButtonClicked={() => onRetry()}\n />\n </div>\n )}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport classes from './BooleanDotRenderer.scss';\n\n/**\n * Renders a red or green color dot to represent a boolean value\n * To be used as `Column.render` value of the column containing the state.\n *\n * @example\n * <List\n * {...otherProps}\n * columns=[{\n * propertyName: 'enabled'\n * render: BooleanDotRenderer()\n * }]/>\n *\n */\nexport const BooleanDotRenderer = (val: unknown): JSX.Element => (\n <div className={clsx(val ? [classes.green] : [classes.red])}></div>\n);\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Data } from '../../../../../types/data';\nimport { formatDateTime } from '../../../../Utils/Transformers/DateTime';\n\n/**\n * Displays a value in Date format\n * @param val date\n * @param data row data\n */\nexport const DateRenderer = <T extends Data>(val: unknown, data: T): string => {\n if (val) {\n return String(formatDateTime(val as string));\n }\n\n return '';\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { Data } from '../../../../../types/data';\nimport { IconName, Icons } from '../../../../Icons';\nimport { ColumnRenderer } from '../../../List.model';\nimport classes from './ExternalLinkRenderer.scss';\n\nexport type ExternalLinkResolver<T extends Data> = (\n /** Row data */\n item: T,\n /** Whether or not the external icon is shown (default: true) */\n showNewTabIcon?: boolean,\n) => string | undefined;\n\n/**\n * Renders an external link for an item.\n * If the resolver does not return a URL for an item, no link will be rendered for that item.\n *\n * @param resolver Callback function. Row data is passed as an argument.\n * @param showNewTabIcon Optional boolean that determines whether or not the external icon is shown (default: true)\n * @returns A string that should be a valid url\n *\n * @example\n * <List\n * {...otherProps}\n * columns=[{\n * propertyName: 'title'\n * render: createExternalLinkRenderer(data => `https://www.example.com/${data.id}`)\n * }]/>\n */\nexport const createExternalLinkRenderer = <T extends Data>(\n resolver: ExternalLinkResolver<T>,\n showNewTabIcon = true,\n): ColumnRenderer<T> => {\n const ExternalLinkRenderer = (val: unknown, data: T): JSX.Element => {\n const url = resolver(data);\n const value = String(val);\n\n if (!url) {\n // if there is no url, we will just render the value\n return <p title={value}>{value}</p>;\n }\n\n const handleClick = (event: React.SyntheticEvent): void => {\n event.stopPropagation(); // prevent other events from propagating up\n };\n\n return (\n <a\n className={clsx(classes.container, {\n [classes.noIcon]: !showNewTabIcon,\n })}\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={handleClick}\n >\n {showNewTabIcon && (\n <Icons icon={IconName.External} className={classes.externalIcon} />\n )}\n <p title={value}>{value}</p>\n </a>\n );\n };\n return ExternalLinkRenderer;\n};\n","import React from 'react';\nimport { Data } from '../../../../../types/data';\nimport { ColumnMap, ColumnRenderer } from '../../../../List/List.model';\nimport classes from './StateRenderer.scss';\n\n/**\n * Renders a state icon for an item.\n *\n * To be used as `Column.render` value.\n *\n * @param map An object of key/value pairs mapping column values to CSS colors.\n * @param titleMapper A mapper function that returns a string value based on\n * original value to set the title. If not specified, value is converted to\n * string.\n * @example\n * <List\n * {...otherProps}\n * columns=[{\n * propertyName: 'state'\n * render: createStateRenderer({ changed: 'lightblue' })\n * }]/>\n */\nexport const createStateRenderer = <T extends Data>(\n map: ColumnMap = {},\n titleMapper?: (value: unknown) => string,\n): ColumnRenderer<T> => {\n const StateRenderer = (value: unknown): React.ReactNode => (\n <div\n className={classes.container}\n style={{ backgroundColor: map[value as string] }}\n title={titleMapper?.(value) ?? String(value)}\n ></div>\n );\n return StateRenderer;\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Data } from '../../../../../types/data';\nimport { formatSecondsToTimestamp } from '../../../../Utils/Transformers/Timestamp';\n\nexport const TimestampRenderer = <T extends Data>(\n val: unknown,\n _data: T,\n): string => {\n if (val) {\n return formatSecondsToTimestamp(val as number) as string;\n }\n\n return '';\n};\n","/** Current Global State */\nexport const state: { [key: string]: { [key: string]: unknown } } = {};\n\n/**\n * Stores an object globally\n * @param key Unique identifier\n * @param prop Name of the property to store\n * @param value Value to store\n */\nexport const storeState = <T>(key: string, prop: string, value: T): void => {\n state[key] = { ...(state[key] ?? {}), [prop]: value };\n};\n\n/**\n * @param key Identifier used to store the state\n * @param prop Name of the property to retrieve\n */\nexport const getState = <T>(key: string, prop: string): T => {\n return state[key]?.[prop] as T;\n};\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var copyObject = require('./_copyObject'),\n getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var baseIsMap = require('./_baseIsMap'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var getTag = require('./_getTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseIsSet = require('./_baseIsSet'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n baseAssignIn = require('./_baseAssignIn'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n copySymbolsIn = require('./_copySymbolsIn'),\n getAllKeys = require('./_getAllKeys'),\n getAllKeysIn = require('./_getAllKeysIn'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isMap = require('./isMap'),\n isObject = require('./isObject'),\n isSet = require('./isSet'),\n keys = require('./keys'),\n keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n","var baseClone = require('./_baseClone');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nmodule.exports = cloneDeep;\n","import { MutableRefObject, useEffect, useRef } from 'react';\n\n/**\n * Creates a ref, that will always update to the latest value you pass to it.\n *\n * @param value The value the ref should take\n * @returns A ref object to the value\n */\nexport function useUpdatingRef<T>(value: T): MutableRefObject<T> {\n const valueRef = useRef<T>(value);\n\n useEffect(() => {\n valueRef.current = value;\n }, [value]);\n\n return valueRef;\n}\n","import { cloneDeep } from 'lodash';\nimport {\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useUpdatingRef } from '../../hooks/useUpdatingRef/useUpdatingRef';\nimport { Data } from '../../types/data';\nimport { ErrorTypeToStationError } from '../../utils/ErrorTypeToStationError';\nimport { FilterValues } from '../Filters/Filters.model';\nimport { SortData } from '../List/List.model';\nimport { ErrorType } from '../models';\nimport {\n ExplorerDataProvider,\n ExplorerDataProviderConnection,\n} from './Explorer.model';\nimport { StationMessage } from './useStationMessage';\n\ninterface DataProviderReturnType<T> {\n readonly isLoading: boolean;\n readonly resultCount: ResultCounts;\n readonly onReloadData: () => void;\n readonly onSortChanged: (sort: SortData<T>) => void;\n readonly onFiltersChange: (filters: FilterValues<T>) => void;\n readonly onRequestMoreData: () => void;\n readonly data: T[];\n}\n\nexport interface ResultCounts {\n total: number;\n filtered?: number;\n}\n\ninterface DataProviderArgumentType<T extends Data> {\n dataProvider: ExplorerDataProvider<T>;\n explorerRef: React.ForwardedRef<ExplorerDataProviderConnection<T>>;\n setStationMessage: React.Dispatch<\n React.SetStateAction<StationMessage | undefined>\n >;\n defaultSortOrder?: SortData<T>;\n filters?: FilterValues<T>;\n keyProperty?: keyof T;\n}\n\nexport function useDataProvider<T extends Data>({\n dataProvider,\n explorerRef,\n setStationMessage,\n defaultSortOrder,\n filters,\n keyProperty,\n}: DataProviderArgumentType<T>): DataProviderReturnType<T> {\n const dataProviderRef = useUpdatingRef(dataProvider);\n\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [data, setData] = useState<T[]>([]);\n const [resultCount, setResultCount] = useState<ResultCounts>({\n total: 0,\n filtered: 0,\n });\n const hasMoreData = useRef<boolean>(true);\n const pagingInfo = useRef<unknown>();\n const lastAttemptedPagingInfo = useRef<unknown>();\n\n const sorting = useRef<SortData<T> | undefined>(defaultSortOrder);\n const filterValues = useRef<FilterValues<T>>(filters || {});\n\n const loadData = useCallback(\n async (\n isFirstPage = true,\n pagingInformation: unknown = undefined,\n ): Promise<void> => {\n if (isFirstPage === true) {\n // Reset pagingInfo.\n pagingInfo.current = undefined;\n hasMoreData.current = true;\n // Clean out data, because we're anyway loading the data new from scratch.\n // This way the error message will not appear way down on the list but in sight.\n setData(() => []);\n }\n\n // If there is no more data, exit.\n if (hasMoreData.current === false) {\n return;\n }\n\n setIsLoading(true);\n setStationMessage(undefined);\n\n // Remembering the attempted paging information to use on retry.\n lastAttemptedPagingInfo.current = pagingInformation;\n try {\n const result = await dataProviderRef.current.loadData({\n pagingInformation: cloneDeep(pagingInfo.current),\n sorting: cloneDeep(sorting.current),\n filters: cloneDeep(filterValues.current),\n });\n\n setResultCount({\n total: result.totalCount,\n filtered: result.filteredCount ?? 0,\n });\n\n // Set new paging info.\n if (!isFirstPage) {\n setData((data) => [...data, ...result.data]);\n } else {\n setData(() => [...result.data]);\n }\n pagingInfo.current = result.pagingInformation;\n hasMoreData.current = result.hasMoreData;\n } catch (error) {\n setStationMessage({\n ...ErrorTypeToStationError(\n error as ErrorType,\n 'An error occurred when trying to load data.',\n ),\n canClose: true,\n type: 'error',\n onRetry: () => loadData(false, lastAttemptedPagingInfo.current),\n });\n } finally {\n setIsLoading(false);\n }\n },\n [dataProviderRef, setStationMessage],\n );\n\n const onSortChanged = useCallback(\n (sort: SortData<T>): void => {\n // Re-enable more data requests\n hasMoreData.current = true;\n // Set new sorting order.\n sorting.current = sort;\n loadData();\n },\n [loadData],\n );\n\n const onFiltersChange = useCallback(\n (filters: FilterValues<T>): void => {\n // Re-enable more data requests\n hasMoreData.current = true;\n // Set new filters.\n filterValues.current = filters;\n loadData();\n },\n [loadData],\n );\n\n const onRequestMoreData = useCallback((): void => {\n loadData(false, pagingInfo.current);\n }, [loadData]);\n\n const onReloadData = useCallback((): void => {\n loadData();\n }, [loadData]);\n\n useEffect(() => {\n (async () => {\n await loadData();\n })();\n }, [loadData]);\n\n useConnection({\n dataProvider,\n data,\n setData,\n keyProperty,\n explorerRef,\n setStationMessage,\n onReloadData,\n setResultCount,\n });\n\n return {\n isLoading,\n resultCount,\n onReloadData,\n onSortChanged,\n onFiltersChange,\n onRequestMoreData,\n data,\n } as const;\n}\n\ninterface ConnectionArgumentType<T extends Data> {\n setData: React.Dispatch<React.SetStateAction<T[]>>;\n keyProperty?: keyof T;\n dataProvider: ExplorerDataProvider<T>;\n data: T[];\n explorerRef: React.ForwardedRef<ExplorerDataProviderConnection<T>>;\n setStationMessage: React.Dispatch<\n React.SetStateAction<StationMessage | undefined>\n >;\n setResultCount: React.Dispatch<React.SetStateAction<ResultCounts>>;\n onReloadData: () => void;\n}\n\nconst useConnection = <T extends Data>({\n dataProvider,\n explorerRef,\n setData,\n keyProperty,\n setStationMessage,\n setResultCount,\n onReloadData,\n data,\n}: ConnectionArgumentType<T>): ExplorerDataProviderConnection<T> => {\n const dataRef = useUpdatingRef(data);\n const dataProviderRef = useUpdatingRef(dataProvider);\n\n const connection = useMemo<ExplorerDataProviderConnection<T>>(\n () => ({\n change: (id, patch) => {\n setData((data) =>\n data.map((d) =>\n d[keyProperty ?? 'id'] === id ? { ...d, ...patch } : d,\n ),\n );\n },\n add: (_data) => {\n setStationMessage({\n canClose: false,\n title:\n 'The current data is not up to date. Please refresh the view to get the latest state.',\n type: 'warning',\n onRetry: onReloadData,\n });\n },\n remove: (id) => {\n if (dataRef.current.find((i) => i[keyProperty ?? 'id'] === id)) {\n // if we have loaded that item already, we will inform the user about the outdated values\n setStationMessage({\n canClose: false,\n title:\n 'The current data is not up to date. Please refresh the view to get the latest state.',\n type: 'warning',\n onRetry: onReloadData,\n });\n } else {\n // if the item is not yet loaded, we can ignore the event\n // we will reduce the total amount by one though\n setResultCount((c) => ({\n ...c,\n total: c.total - 1,\n }));\n }\n },\n }),\n [\n dataRef,\n keyProperty,\n onReloadData,\n setData,\n setStationMessage,\n setResultCount,\n ],\n );\n\n useImperativeHandle(explorerRef, () => connection, [connection]);\n\n useEffect(() => {\n const connectionDisposer = dataProviderRef.current.connect?.(connection);\n\n return () => {\n if (connectionDisposer) {\n connectionDisposer();\n }\n };\n }, [connection, dataProviderRef]);\n\n return connection;\n};\n","import clsx from 'clsx';\nimport { LocationDescriptor } from 'history';\nimport {\n default as React,\n ForwardedRef,\n useCallback,\n useEffect,\n useState,\n} from 'react';\nimport { ActionData } from '..';\nimport { noop } from '../../helpers/utils';\nimport { showNotification } from '../../initialize';\nimport { Data } from '../../types/data';\nimport { ErrorTypeToStationError } from '../../utils/ErrorTypeToStationError';\nimport { isContextAction } from '../Actions/Action/Action';\nimport { Filters } from '../Filters/Filters';\nimport { FilterType, FilterValues } from '../Filters/Filters.model';\nimport {\n Column,\n ItemSelectEventArgs,\n List,\n ListSelectMode,\n SortData,\n} from '../List';\nimport { ErrorType } from '../models';\nimport { PageHeader, PageHeaderActionProps } from '../PageHeader';\nimport { getState, storeState } from '../Utils/State/GlobalState';\nimport {\n ExplorerBulkAction,\n ExplorerDataProvider,\n ExplorerDataProviderConnection,\n ExplorerStateOptions,\n ItemSelection,\n} from './Explorer.model';\nimport classes from './Explorer.scss';\nimport { ResultCounts, useDataProvider } from './useDataProvider';\nimport { StationMessage, useStationMessage } from './useStationMessage';\n\nexport interface ExplorerProps<T extends Data> {\n /** Title shown in page header */\n title?: string;\n\n /**\n * Column definitions\n * The order of this array determines the order of columns\n */\n columns: Column<T>[];\n\n /** The filters that should be available on the Explorer */\n filterOptions?: FilterType<T>[];\n\n /** Default values for filters */\n defaultFilterValues?: FilterValues<T>;\n\n /** Options for disabling states that persist such as filters and sorting. All states persist by default */\n persistExplorerStates?: ExplorerStateOptions;\n\n /** The name of the property on the data object that should be used to identify objects (default: 'id') */\n keyProperty?: keyof T;\n\n /** Minimum width of this component */\n minimumWidth?: string;\n\n /** Spacing between columns */\n columnGap?: string;\n\n /** Header row height */\n headerRowHeight?: string;\n\n /** List row height */\n listRowHeight?: string;\n\n /** List row action button and checkbox size */\n listRowActionSize?: string;\n\n /** Header checkbox size */\n headerRowActionSize?: string;\n\n /** Spacing between rows */\n rowGap?: string;\n\n /** Horizontal alignment of text */\n horizontalTextAlign?: 'left' | 'right' | 'center';\n\n /** Vertical alignment of text */\n verticalTextAlign?: 'start' | 'center' | 'end';\n\n /** Defines when the loading of the next page is triggered. The number represents the number of row left, before a load is triggered. (default: 10) */\n loadingTriggerOffset?: number;\n\n /** Array of actions to be rendered. */\n actions?: PageHeaderActionProps[];\n\n /** Array of Bulk Actions to be rendered. If populated, Bulk Actions will become available. */\n bulkActions?: ExplorerBulkAction<T>[];\n\n /** Whether or not bulk actions are shown by default. (default: false) */\n openBulkActionsOnStart?: boolean;\n\n /** Unique identifier used to store states related to explorer */\n stationKey: string;\n\n /** Determines which select mode the list is in.\n * If 'None' is selected, a right chevron will be rendered for each row of data\n * If 'Single' is selected, a check mark will be rendered for each row of data\n * If 'Multi' is selected or Bulk Actions is open, a checkbox will be rendered for the header and each row of data\n */\n selectionMode?: ListSelectMode;\n\n /** In multiselect mode, whether the Select All button will be displayed. When Select All button is clicked the onItemClicked button will return a filter query instead of an array of items. (default: true) */\n enableSelectAll?: boolean;\n\n /** Callback used to request new or additional data */\n dataProvider: ExplorerDataProvider<T>;\n\n /** If true, the explorer will leave some margin for the modal backdrop. */\n modalMode?: boolean;\n\n /** CSS Class name for additional styles */\n className?: string;\n\n /** Sets the default sort order for the Explorer. (default: undefined) */\n defaultSortOrder?: SortData<T>;\n\n /**\n * When set, this function is used to generate the link that the user should be navigated to for each item.\n *\n * This property takes precedence over `onItemClicked`, which will not be executed in case `generateItemLink` is set!\n */\n generateItemLink?: (data: T) => LocationDescriptor<unknown>;\n\n /**\n * Raised when an data item is clicked\n * Row data is supplied as the first argument\n * List mode is supplied as the second argument. List mode may change depending on the bulk actions toggled state\n */\n onItemClicked?: (data: T, mode?: ListSelectMode) => void;\n\n /**\n * Callback to emit when Bulk Actions is toggled\n * The expanded state is supplied as an argument\n */\n onBulkActionsToggled?: (expanded: boolean) => void;\n /** Provide inline actions which are available through '...' context menu */\n inlineMenuActions?: (data: T) => ActionData[];\n}\n\n/**\n * Renders an Explorer that can show a list of assets and allows selection of single assets,\n * performing bulk operations on multiple assets, filtering, sorting as well as a button to create new assets.\n *\n * @example\n * <Explorer<DataInterface>\n * title=\"Title\"\n * columns={[{propertyName: 'id', size: '1fr', label: 'Id'}]}\n * stationKey=\"station-key\"\n * dataProvider={dataProvider}\n * bulkActions={[{ label: 'Action One'}]}\n * onItemClicked={itemClickedHandler}\n * />\n */\nexport const Explorer = React.forwardRef(function Explorer<T extends Data>(\n {\n title,\n\n minimumWidth,\n columnGap,\n rowGap,\n headerRowHeight,\n listRowHeight,\n listRowActionSize,\n headerRowActionSize,\n horizontalTextAlign,\n verticalTextAlign,\n\n columns,\n filterOptions,\n defaultFilterValues,\n keyProperty,\n stationKey,\n persistExplorerStates,\n\n actions,\n selectionMode = ListSelectMode.None,\n bulkActions,\n openBulkActionsOnStart,\n\n dataProvider,\n loadingTriggerOffset,\n\n enableSelectAll,\n modalMode = false,\n className = '',\n\n defaultSortOrder,\n\n onItemClicked,\n onBulkActionsToggled = noop,\n generateItemLink,\n inlineMenuActions,\n }: ExplorerProps<T>,\n explorerRef: ForwardedRef<ExplorerDataProviderConnection<T>>,\n): JSX.Element {\n const { stationMessage, setStationMessage, StationMessage } =\n useStationMessage();\n\n const globalStateOptions: ExplorerStateOptions = {\n filters: true,\n sort: true,\n ...persistExplorerStates,\n };\n\n const [activeFilters, setActiveFilters] = useState<FilterValues<T>>(\n getState<FilterValues<T>>(stationKey, 'filters') ??\n defaultFilterValues ??\n {},\n );\n\n const [sortOrder, setSortOrder] = useState<SortData<T>>(\n getState<SortData<T>>(stationKey, 'sort') ?? defaultSortOrder,\n );\n\n useEffect(() => {\n if (\n globalStateOptions.filters &&\n activeFilters !== defaultFilterValues &&\n Object.keys(activeFilters).length > 0\n ) {\n storeState(stationKey, 'filters', activeFilters);\n } else {\n storeState(stationKey, 'filters', undefined);\n }\n }, [activeFilters, defaultFilterValues, globalStateOptions.filters, stationKey]);\n\n useEffect(() => {\n if (globalStateOptions.sort && sortOrder !== defaultSortOrder) {\n storeState(stationKey, 'sort', sortOrder);\n } else {\n storeState(stationKey, 'sort', undefined);\n }\n }, [defaultSortOrder, globalStateOptions.sort, sortOrder, stationKey]);\n\n const {\n data,\n isLoading,\n resultCount,\n onReloadData,\n onRequestMoreData,\n onFiltersChange,\n onSortChanged,\n } = useDataProvider<T>({\n dataProvider,\n explorerRef,\n setStationMessage,\n defaultSortOrder: sortOrder,\n filters: activeFilters,\n keyProperty,\n });\n\n const { mode, setIsBulkOpen } = useListSelectionMode(\n selectionMode,\n openBulkActionsOnStart,\n );\n\n // TODO: Put into hook?------------------\n const [itemSelection, setItemSelection] = useState<ItemSelectEventArgs<T>>({\n mode: 'SINGLE_ITEMS',\n items: [],\n });\n\n const itemSelectedHandler = useCallback(\n (itemSelectEventArgs: ItemSelectEventArgs<T>): void => {\n setItemSelection(itemSelectEventArgs);\n },\n [],\n );\n\n const getBulkActionSelection = useCallback(() => {\n let payload: ItemSelection<T>;\n\n const selection = itemSelection ?? { mode: 'SELECT_ALL' };\n\n switch (selection.mode) {\n case 'SELECT_ALL':\n payload = {\n mode: selection.mode,\n filters: activeFilters,\n };\n break;\n case 'SINGLE_ITEMS':\n payload = {\n mode: selection.mode,\n items: selection.items,\n };\n break;\n default:\n // eslint-disable-next-line no-console\n throw console.error(`Switch was not exhaustive`);\n }\n return payload;\n }, [itemSelection, activeFilters]);\n //------------------\n\n // Emits selected row data and current ListSelectMode state\n const onItemClickedHandler = useCallback(\n (item: T): void => {\n if (onItemClicked !== undefined) {\n onItemClicked(item, mode);\n }\n },\n [mode, onItemClicked],\n );\n\n const { resultsTitle } = useSubtitle<T>(mode, itemSelection, resultCount);\n\n const errAction = 'An error occurred when trying to execute the operation.';\n const errBulk =\n 'An error occurred when trying to execute the bulk operation.';\n\n const inlineMenuActionsHandler = (data: T): ActionData[] => {\n return (inlineMenuActions?.(data) ?? []).map((action) => {\n return isContextAction(action)\n ? {\n ...action,\n onActionSelected: async () => {\n try {\n const result = await action.onActionSelected();\n if (result) {\n setStationMessage(errMsg(result));\n }\n } catch (error) {\n setStationMessage(errMsg(error, errAction));\n }\n },\n }\n : action;\n });\n };\n\n const pageHeaderActionsHandler = (): PageHeaderActionProps[] => {\n return (actions ?? []).map((action) => {\n return {\n ...action,\n onClick: async () => {\n try {\n const result = await action.onClick();\n if (result) {\n setStationMessage(errMsg(result));\n }\n } catch (error) {\n setStationMessage(errMsg(error, errAction));\n }\n },\n };\n });\n };\n\n const bulkActionsHandler = (): PageHeaderActionProps[] => {\n return (bulkActions ?? []).map((action) => {\n return {\n ...action,\n onClick: async () => {\n showNotification({\n title: `Bulk Action '${action.label}' Started`,\n });\n\n try {\n const result = await action.onClick(getBulkActionSelection());\n if (result) {\n const message = errMsg(result);\n showNotification({\n title:\n typeof message.title === 'string'\n ? message.title\n : 'An error occurred',\n body: message.body,\n options: {\n type: 'error',\n },\n });\n } else {\n if (action.reloadData) {\n onReloadData();\n }\n }\n } catch (error) {\n setStationMessage(errMsg(error, errBulk));\n }\n },\n };\n });\n };\n\n return (\n <div\n className={clsx(\n classes.container,\n {\n [classes.hasStationError]: stationMessage,\n [classes.modalMode]: modalMode,\n },\n 'explorer-container',\n className,\n )}\n >\n <PageHeader\n title={title}\n subtitle={resultsTitle}\n actions={actions && pageHeaderActionsHandler()}\n bulkActions={bulkActions && bulkActionsHandler()}\n openBulkActionsOnStart={openBulkActionsOnStart}\n bulkActionsDisabled={\n itemSelection.items?.length === 0 || resultCount?.filtered === 0\n }\n onBulkActionsToggled={(isOpen) => {\n setIsBulkOpen(isOpen);\n onBulkActionsToggled(isOpen);\n }}\n />\n {StationMessage}\n <Filters<T>\n options={filterOptions}\n defaultValues={activeFilters}\n onFiltersChange={(args) => {\n onFiltersChange(args);\n setActiveFilters(args);\n }}\n />\n <List<T>\n columns={columns}\n data={data}\n isLoading={isLoading}\n isError={Boolean(stationMessage?.type === 'error')}\n handleRetry={false}\n minimumWidth={minimumWidth}\n columnGap={columnGap}\n rowGap={rowGap}\n headerRowHeight={headerRowHeight}\n listRowHeight={listRowHeight}\n listRowActionSize={listRowActionSize}\n headerRowActionSize={headerRowActionSize}\n horizontalTextAlign={horizontalTextAlign}\n verticalTextAlign={verticalTextAlign}\n keyProperty={keyProperty}\n showActionButton={Boolean(generateItemLink) || Boolean(onItemClicked)} // or hard code to `true`?\n selectionMode={mode}\n enableSelectAll={enableSelectAll}\n loadingTriggerOffset={loadingTriggerOffset}\n defaultSortOrder={sortOrder}\n generateItemLink={generateItemLink}\n onItemClicked={onItemClickedHandler}\n onItemSelected={itemSelectedHandler}\n onRequestMoreData={onRequestMoreData}\n onSortChanged={(sortData: SortData<T>) => {\n onSortChanged(sortData);\n setSortOrder(sortData);\n }}\n inlineMenuActions={inlineMenuActions && inlineMenuActionsHandler}\n />\n </div>\n );\n});\n\n/**\n * Informs what state ListSelectMode is in\n * @param selectionMode ListSelectMode from prop\n * @param openBulkActionsOnStart boolean from prop\n */\nconst useListSelectionMode = (\n selectionMode: ListSelectMode,\n openBulkActionsOnStart?: boolean,\n): {\n readonly mode: ListSelectMode;\n readonly setIsBulkOpen: React.Dispatch<React.SetStateAction<boolean>>;\n} => {\n const [isBulkOpen, setIsBulkOpen] = useState<boolean>(\n openBulkActionsOnStart ?? false,\n );\n\n // If bulk actions is open, set ListSelectMode to Multi\n const mode = isBulkOpen ? ListSelectMode.Multi : selectionMode;\n\n return { mode, setIsBulkOpen } as const;\n};\n\n/**\n * Sets PageHeader subtitle\n * @param mode current ListSelectMode\n * @param itemSelection current item selection\n * @param results total results\n */\nfunction useSubtitle<T extends Data>(\n mode: ListSelectMode,\n itemSelection: ItemSelectEventArgs<T>,\n results?: ResultCounts,\n): {\n readonly resultsTitle: string;\n} {\n let resultsTitle = ''; // default to an empty string while results is being fetched\n\n if (results !== undefined) {\n switch (true) {\n case results.total === 1 && results.filtered === 1:\n resultsTitle = `Showing 1 Element`;\n break;\n case results.total === 1 && results.filtered === 0:\n resultsTitle = `Showing 0 of 1 Element`;\n break;\n case results.filtered === results.total:\n resultsTitle = `Showing all of ${results.total} Elements`;\n break;\n case results.filtered === undefined:\n resultsTitle = `Showing ${results.total} Elements`;\n break;\n default:\n resultsTitle = `Showing ${results.filtered} of ${results.total} Elements`;\n }\n\n // Append Selected items if list selection is in Multi mode\n if (mode === ListSelectMode.Multi) {\n if (itemSelection.mode === 'SINGLE_ITEMS') {\n resultsTitle = `${resultsTitle}, Selected: ${\n itemSelection.items?.length ?? 0\n }`;\n } else {\n // Show filtered results as selected results if 'SELECT_ALL' is active\n resultsTitle = `${resultsTitle}, Selected: ${results.filtered}`;\n }\n }\n }\n\n return { resultsTitle } as const;\n}\n\nconst errMsg = (err: unknown | ErrorType, msg?: string): StationMessage => {\n return {\n ...ErrorTypeToStationError(err as ErrorType, msg),\n canClose: true,\n type: 'error',\n };\n};\n","import React, { useState } from 'react';\nimport { MessageBar, MessageBarProps } from '../MessageBar/MessageBar';\n\nexport interface StationMessage {\n type: MessageBarProps['type'];\n title: MessageBarProps['title'];\n body?: React.ReactNode;\n canClose: boolean;\n onRetry?: MessageBarProps['onRetry'];\n}\n\nexport const useStationMessage = (): {\n stationMessage: StationMessage | undefined;\n setStationMessage: React.Dispatch<\n React.SetStateAction<StationMessage | undefined>\n >;\n StationMessage: JSX.Element;\n} => {\n const [stationMessage, setStationMessage] = useState<StationMessage>();\n\n const StationMessage = (\n <>\n {stationMessage && (\n <MessageBar\n type={stationMessage.type}\n title={String(stationMessage.title)}\n onClose={\n stationMessage.canClose\n ? () => setStationMessage(undefined)\n : undefined\n }\n onRetry={stationMessage.onRetry}\n >\n {stationMessage.body}\n </MessageBar>\n )}\n </>\n );\n\n return { stationMessage, setStationMessage, StationMessage } as const;\n};\n","import { Data } from '../../types/data';\nimport { FilterValue, FilterValues } from '../Filters';\nimport { SortData } from '../List';\nimport { ExplorerDataProvider } from './Explorer.model';\n\ntype FilterFunction<T extends Data> = (\n value: unknown,\n filter: FilterValue,\n item: T,\n) => boolean;\n\ninterface LocalDataProviderConfig<T extends Data> {\n caseSensitiveSort?: boolean;\n filterFunctions?: {\n [property: string]: FilterFunction<T>;\n };\n}\n\nexport function createInMemoryDataProvider<T extends Data>(\n data: T[],\n {\n caseSensitiveSort = false,\n filterFunctions = {},\n }: LocalDataProviderConfig<T> = {},\n): ExplorerDataProvider<T> {\n return {\n loadData: ({ sorting, filters }) => {\n let result: T[] = [...data];\n\n if (filters) {\n result = applyFilter<T>(result, filters, filterFunctions);\n }\n\n if (sorting) {\n result = applySort(result, sorting, caseSensitiveSort);\n }\n\n return Promise.resolve({\n totalCount: data.length,\n filteredCount: result.length,\n data: result,\n hasMoreData: false,\n });\n },\n };\n}\n\n/**\n * Checks if the the `String(value)` exactly matches `String(filter)`.\n */\nexport const findExact: FilterFunction<Data> = (value, filter) => {\n return String(value) === String(filter);\n};\n\n/**\n * Checks if the filter string can be found somewhere in the value string. (case sensitive)\n */\nexport const findAnywhereInString: FilterFunction<Data> = (value, filter) => {\n return String(value).indexOf(String(filter)) >= 0;\n};\n\n/**\n * Checks if the filter string can be found somewhere in the value string. (case insensitive)\n */\nexport const findAnywhereInStringCaseInsensitive: FilterFunction<Data> = (\n value,\n filter,\n) => {\n return String(value).toLowerCase().indexOf(String(filter).toLowerCase()) >= 0;\n};\n\nfunction applyFilter<T extends Data>(\n data: T[],\n filters: FilterValues<T>,\n filterFunctions: {\n [property: string]: FilterFunction<T>;\n },\n): T[] {\n return data.filter((i) => {\n return Object.keys(filters).reduce<boolean>((prev, property) => {\n if (!prev) {\n return false;\n }\n\n // Use any given filter function or `findExact` if as fallback.\n const filterFn = filterFunctions[property] ?? findExact;\n return filterFn(i[property], filters[property], i);\n }, true);\n });\n}\n\nfunction applySort<T extends Data>(\n data: T[],\n sorting: SortData<T>,\n caseSensitiveSort: boolean,\n): T[] {\n data = data.sort((a, b) => {\n let aValue = a[sorting.column];\n let bValue = b[sorting.column];\n if (!caseSensitiveSort && typeof aValue === 'string') {\n aValue = aValue.toLowerCase();\n bValue = bValue.toLowerCase();\n }\n if (aValue > bValue) {\n return 1;\n } else {\n return -1;\n }\n });\n if (sorting.direction === 'desc') {\n data = data.reverse();\n }\n\n return data;\n}\n","import React, { ForwardedRef } from 'react';\nimport { Data } from '../../../types/data';\nimport { IconName } from '../../Icons';\nimport { ListSelectMode } from '../../List';\nimport { Explorer, ExplorerProps } from '../Explorer';\nimport { ExplorerDataProviderConnection } from '../Explorer.model';\n\nexport interface NavigationExplorerProps<T extends Data>\n extends Omit<\n ExplorerProps<T>,\n 'selectionMode' | 'onBulkActionsToggled' | 'onItemClicked'\n > {\n /** Raised when the create action button is clicked */\n onCreateAction?: () => void;\n\n /** Url to navigate to when the row of data is clicked. Navigation will not occur if bulk actions is open. */\n calculateNavigateUrl?: (item: T) => string;\n}\n\n/**\n * Navigation Explorer\n * @example\n * <NavigationExplorer<DataInterface>\n * title=\"Title\"\n * columns={[{propertyName: 'id', size: '1fr', label: 'Id'}]}\n * stationKey=\"station-key\"\n * dataProvider={dataProvider}\n * bulkActions={[{ label: 'Action One'}]}\n * calculateNavigateUrl={(rowData => `/details/${rowData.id}`)}\n * />\n */\n\nexport const NavigationExplorer = React.forwardRef(function NavigationExplorer<\n T extends Data,\n>(\n props: NavigationExplorerProps<T>,\n ref: ForwardedRef<ExplorerDataProviderConnection<T>>,\n): JSX.Element {\n const { onCreateAction, calculateNavigateUrl, actions = [], ...rest } = props;\n\n return (\n <Explorer<T>\n ref={ref}\n {...rest}\n actions={[\n ...(onCreateAction\n ? [\n ...actions,\n {\n label: 'New',\n icon: IconName.Plus,\n onClick: onCreateAction,\n },\n ]\n : [...actions]),\n ]}\n selectionMode={ListSelectMode.None}\n generateItemLink={calculateNavigateUrl}\n />\n );\n});\n","import React, { ForwardedRef } from 'react';\nimport { noop } from '../../../helpers/utils';\nimport { Data } from '../../../types/data';\nimport { IconName } from '../../Icons';\nimport { ListSelectMode } from '../../List';\nimport { Explorer, ExplorerProps } from '../Explorer';\nimport {\n ExplorerBulkAction,\n ExplorerDataProviderConnection,\n ItemSelection,\n} from '../Explorer.model';\n\nexport interface SelectionExplorerProps<T extends Data>\n extends Omit<\n ExplorerProps<T>,\n 'selectionMode' | 'onItemClicked' | 'onBulkActionsToggled' | 'bulkActions'\n > {\n /** Whether or not the selection of multiple items is allowed (default: false) */\n allowBulkSelect?: boolean;\n\n /**\n * Callback called when the user finished the selection.\n * The selected item (or items) will be passed as argument to the callback.\n */\n onSelection?: (selection: ItemSelection<T>) => void;\n}\n\n/**\n * Selection Explorer\n * @example\n * <SelectionExplorer<DataInterface>\n * title=\"Title\"\n * columns={[{propertyName: 'id', size: '1fr', label: 'Id'}]}\n * stationKey=\"station-key\"\n * dataProvider={dataProvider}\n * />\n */\nexport const SelectionExplorer = React.forwardRef(function SelectionExplorer<\n T extends Data,\n>(\n props: SelectionExplorerProps<T>,\n ref: ForwardedRef<ExplorerDataProviderConnection<T>>,\n): JSX.Element {\n const {\n allowBulkSelect = false,\n onSelection = noop,\n modalMode = true,\n } = props;\n\n const onItemClickedHandler = (item: T, mode?: ListSelectMode): void => {\n // only if the list is not in Multi mode is this executed\n if (mode !== ListSelectMode.Multi) {\n onSelection({ mode: 'SINGLE_ITEMS', items: [item] });\n }\n };\n\n return (\n <Explorer<T>\n ref={ref}\n {...props}\n modalMode={modalMode}\n bulkActions={[\n ...(allowBulkSelect\n ? [\n {\n label: 'Apply Selection',\n icon: IconName.Checkmark,\n onClick: ((arg: ItemSelection<T>) => {\n onSelection(arg);\n }) as ExplorerBulkAction<T>['onClick'],\n },\n ]\n : []),\n ]}\n selectionMode={ListSelectMode.Single}\n onItemClicked={onItemClickedHandler}\n />\n );\n});\n","import { FilterValidatorFunction } from '../Filters.model';\n\ninterface DateRangeFilterValidatorOptions {\n fromDateIndex: number;\n toDateIndex: number;\n}\n\n/**\n * Generates two functions for validating Date Ranges. Inputs for this function expects the date filters to be defined under a single key in FilterValues.\n *\n * @param options Sets the options for the date range filter validators. Default { fromDateIndex: 0, toDateIndex: 1 }.\n * @example\n * const [createFromValidator, createToValidator] = createDateRangeValidators<T>();\n * const filters = FilterType<T>[] = {\n * {\n * label: 'Creation Period (From)',\n * property: 'createdAt',\n * type: FilterTypes.Date,\n * onValidate: createFromValidator('createdAt'),\n * },\n * {\n * label: 'Creation Period (To)',\n * property: 'createdAt',\n * type: FilterTypes.Date,\n * onValidate: createToValidator('createdAt'),\n * }\n * }\n */\nexport const createDateRangeFilterValidators = <T>(\n options: DateRangeFilterValidatorOptions = {\n fromDateIndex: 0,\n toDateIndex: 1,\n },\n): [\n (key: keyof T) => FilterValidatorFunction<T>,\n (key: keyof T) => FilterValidatorFunction<T>,\n] => {\n const createFromValidator =\n (key: keyof T): FilterValidatorFunction<T> =>\n (value, allValues) => {\n if (allValues && allValues[key]) {\n if (\n Date.parse(value as string) >\n Date.parse((allValues[key] as string[])[options.toDateIndex])\n ) {\n return \"'From' date cannot be after 'To' date\";\n }\n }\n };\n\n const createToValidator =\n (key: keyof T): FilterValidatorFunction<T> =>\n (value, allValues) => {\n if (allValues && allValues[key]) {\n if (\n Date.parse(value as string) <\n Date.parse((allValues[key] as string[])[options.fromDateIndex])\n ) {\n return \"'To' date cannot be before 'From' date\";\n }\n }\n };\n\n return [createFromValidator, createToValidator];\n};\n","import { FilterValidatorFunction } from '../Filters.model';\n\ninterface NumberRangeFilterValidatorOptions {\n fromIndex: number;\n toIndex: number;\n}\n\n/**\n * Generates two functions for validating Number Ranges. Inputs for this function expects the number filters to be defined under a single key in FilterValues.\n *\n * @param options Sets the options for the number range filter validators. Default { fromNumberIndex: 0, toNumberIndex: 1 }.\n * @example\n * const [createFromValidator, createToValidator] = createNumberRangeValidators<T>();\n * const filters = FilterType<T>[] = {\n * {\n * label: 'Duration (From)',\n * property: 'duration',\n * type: FilterTypes.Numeric,\n * onValidate: createFromValidator('duration'),\n * },\n * {\n * label: 'Duration (To)',\n * property: 'duration',\n * type: FilterTypes.Numeric,\n * onValidate: createToValidator('duration'),\n * }\n * }\n */\nexport const createNumberRangeFilterValidators = <T>(\n options: NumberRangeFilterValidatorOptions = {\n fromIndex: 0,\n toIndex: 1,\n },\n): [\n (key: keyof T) => FilterValidatorFunction<T>,\n (key: keyof T) => FilterValidatorFunction<T>,\n] => {\n const createFromValidator =\n (key: keyof T): FilterValidatorFunction<T> =>\n (value, allValues) => {\n if (allValues && allValues[key]) {\n if (\n Number(value as string) >\n Number((allValues[key] as string[])[options.toIndex])\n ) {\n return \"'From' value cannot be greater than 'To' value\";\n }\n }\n };\n\n const createToValidator =\n (key: keyof T): FilterValidatorFunction<T> =>\n (value, allValues) => {\n if (allValues && allValues[key]) {\n if (\n Number(value as string) <\n Number((allValues[key] as string[])[options.fromIndex])\n ) {\n return \"'To' value cannot be less than 'From' value\";\n }\n }\n };\n\n return [createFromValidator, createToValidator];\n};\n","/**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\nfunction isNull(value) {\n return value === null;\n}\n\nmodule.exports = isNull;\n","/**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nmodule.exports = isUndefined;\n","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nmodule.exports = memoizeCapped;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nmodule.exports = arrayMap;\n","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n","var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n","/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nmodule.exports = baseHasIn;\n","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nmodule.exports = hasIn;\n","var basePickBy = require('./_basePickBy'),\n hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nmodule.exports = basePick;\n","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var basePick = require('./_basePick'),\n flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n","import isFunction from 'lodash/isFunction';\nimport isObjectLike from 'lodash/isObjectLike';\nimport pick from 'lodash/pick';\n\n/**\n * Helper to determine if object is a thenable; ie: a promise\n *\n * @param {*} obj\n * @returns {boolean}\n */\nconst isPromise = (obj: unknown): boolean =>\n isObjectLike(obj) && isFunction((obj as Record<string, unknown>).then);\n\nconst isSameFunction = (fn1: unknown, fn2: unknown): boolean =>\n isFunction(fn1) &&\n isFunction(fn2) &&\n (fn1 === fn2 || fn1.name === fn2.name) &&\n // All Jest mocks have same name; treat them as 'different mock-functions'\n fn1.name !== 'mockConstructor';\n\n/**\n * Helper to create a fingerprint string for easy comparisons.\n * Note that 'hash' is not fingerprinted; handled by this.beforeRouteChange().\n *\n * @param {Object} location \tThe router.history.location object\n * @returns {string} Unique identifier for this location\n */\nconst fingerprint = (location: Record<string, unknown>): string =>\n JSON.stringify(pick(location, ['pathname', 'search', 'state']));\n\nexport { isPromise, isSameFunction, fingerprint };\n","import cloneDeep from 'lodash/cloneDeep';\nimport isFunction from 'lodash/isFunction';\nimport isNull from 'lodash/isNull';\nimport isUndefined from 'lodash/isUndefined';\nimport { useEffect, useRef } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { NavigationAPI } from '../models';\nimport { isPromise } from './utils';\n\ntype HistoryAction = 'POP' | 'PUSH' | 'REPLACE';\n\nexport interface HistoryLocation {\n pathname: string;\n search: string;\n hash: string;\n key?: string;\n}\n\ntype ReactRouterPause = (\n props: {\n [key: string]: any;\n },\n when: boolean,\n) => void;\n\n/**\n * Used to pause navigation while performing CRUD operations\n * @param props Object that contains the handler\n * @param when Indicates when beforeunload logic should be triggered\n */\nexport const useReactRouterPause: ReactRouterPause = (props, when) => {\n const history = useHistory();\n\n // Logic in this useEffect hook is only responsible for a user refreshing, closing the page, or clicking on an external link.\n useEffect(() => {\n const handleBeforeUnload = (e: any) => {\n if (when) {\n e.preventDefault();\n e.returnValue = 'stop';\n }\n };\n window.addEventListener('beforeunload', handleBeforeUnload);\n return () => {\n window.removeEventListener('beforeunload', handleBeforeUnload);\n };\n }, [when]);\n\n // Temporary flag so can skip blocking 'the next' navigation event\n const ignoreNextNavigationEvent = useRef<boolean>(false);\n\n // Cache the location data for navigation event that was delayed.\n const cachedNavigation = useRef<{\n location: HistoryLocation;\n action: HistoryAction;\n } | null>(null);\n\n // Cache for unblock function returned by history.block\n const historyUnblock = useRef<any>(null);\n\n // Cache the active handler function so can compare between renders\n const handler = useRef<any>(null);\n\n // Flag to prevent useEffect-unblock from running EXCEPT on unMount\n const runUnmountEffect = false;\n\n function unblock(): void {\n const fn = historyUnblock.current;\n historyUnblock.current = null;\n handler.current = null;\n if (fn) {\n fn();\n }\n }\n\n function block(): void {\n // Unbind current blocker, if set\n unblock();\n\n handler.current = props.handler;\n\n // Call history.block with listener to fire BEFORE a route-change.\n // The return value is method for unbinding the block listener.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n historyUnblock.current = history.block(beforeRouteChange);\n }\n\n // onUnmount handler to ensure history.block callback gets removed\n useEffect(() => unblock, [runUnmountEffect]);\n\n /**\n * Check props to see if need to change any blocking configuration.\n * NOTE: This method must be efficient as called after every key-stroke!\n */\n function updateBlocking(): void {\n // Abort early if possible\n if (when === false) {\n unblock();\n return;\n }\n const prev = handler.current;\n let next: any = props.handler;\n\n // Ensure param is a function\n if (next && !isFunction(next)) {\n next = null;\n }\n\n // Allow blocking handler to be changed on each render\n // MAY TRIGGER ON EVERY RENDER if 'handler' callback is recreated each\n // time!\n if (!prev && !next) {\n // Nothing to do\n } else if (prev && !next) {\n unblock();\n } else if (next && !prev) {\n block();\n } else if (next !== prev) {\n block();\n }\n }\n\n // Update handler and blocking status on every render\n updateBlocking();\n\n /**\n * Was a handler method passed in to the component?\n * @returns {boolean}\n */\n function isBlocking(): boolean {\n return !!historyUnblock.current;\n }\n\n /**\n * Set or clear flag used for skipping the next navigation event.\n * @param {boolean} enable\n */\n function allowNextEvent(enable: boolean): void {\n ignoreNextNavigationEvent.current = !!enable;\n }\n\n /**\n * Is there currently a location cached that we can 'resume'?\n * @returns {(Object|null)}\n */\n function pausedLocation(): HistoryLocation | null {\n const route = cachedNavigation.current;\n /** @namespace route.location **/\n return route ? cloneDeep(route.location) : null;\n }\n\n /**\n * Clear the cached location\n */\n function clearCache(): void {\n cachedNavigation.current = null;\n }\n\n /**\n * Is there currently a location cached that we can 'resume'?\n * @returns {boolean}\n */\n function isPaused(): boolean {\n return !!cachedNavigation.current;\n }\n\n /**\n * Resume previously cachedNavigation blocked by handler callback.\n */\n function resume(): void {\n if (!isPaused()) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { location, action } = cachedNavigation.current!;\n clearCache();\n\n // Avoid blocking the next event\n allowNextEvent(true);\n\n // NOTE: Impossible to handle multi-page-back programmatically\n // There is not history.pop() method, only history.go(-n), but it is\n //\tnot possible to lookup passed \"location.key\" uid in history stack!\n if (action === 'POP') {\n // Most of the time a POP is only a single page back, so do that.\n // This handles confirmation. User can THEN go-back more pages.\n history.goBack();\n } else {\n switch (action) {\n case 'PUSH':\n history.push(location);\n break;\n case 'REPLACE':\n history.replace(location);\n break;\n }\n }\n }\n\n /**\n * Clear cached navigation/location data so cannot be used\n */\n function cancel(): void {\n clearCache();\n }\n\n /**\n * @param {(string|Object)} pathOrLocation\n * @param {Object} [state]\n */\n function push(\n pathOrLocation: string,\n state: {\n [key: string]: unknown;\n },\n ): void {\n clearCache();\n allowNextEvent(true); // Avoid blocking this event\n history.push(pathOrLocation, state);\n }\n\n /**\n * @param {(string|Object)} pathOrLocation\n * @param {Object} [state]\n */\n function replace(\n pathOrLocation: string,\n state: {\n [key: string]: unknown;\n },\n ): void {\n clearCache();\n allowNextEvent(true); // Avoid blocking this event\n history.replace(pathOrLocation, state);\n }\n\n /**\n * @param {object} location\n * @param {string} action\n * @returns {boolean}\n */\n function askHandler(\n location: HistoryLocation,\n action: HistoryAction,\n ): boolean {\n let resp: any = true;\n let pauseCalled = false;\n\n // Cache route info so can resume route later\n cachedNavigation.current = { location, action };\n\n const navigationAPI: NavigationAPI = {\n isPaused, // Returns true or false\n pausedLocation, // Returns location-object or null\n pause: () => (pauseCalled = true), // SYNCHRONOUS 'pause' method to be set via an API call instead of returning null\n resume,\n cancel,\n push,\n replace,\n };\n\n // Prevent a component-level error from breaking router navigation\n try {\n resp = handler.current(navigationAPI, location, action);\n } catch (err) {} // eslint-disable-line\n\n // If pausedLocation is empty, an api method must have been called\n if (!isPaused()) {\n return false;\n }\n\n // If navigation.pause() was called, THIS TAKES PRECEDENT\n if (pauseCalled) {\n resp = null;\n }\n\n // A Null response means pause/delay navigation\n if (isNull(resp)) {\n return false;\n }\n\n // A Promise response means pause/delay navigation\n // Promise will resume navigation if resolved; cancel if rejected\n if (isPromise(resp)) {\n // noinspection JSUnresolvedFunction,JSObjectNullOrUndefined\n resp\n .then((val: boolean) => {\n if (val === false) {\n cancel();\n } else {\n resume();\n }\n })\n .catch(cancel);\n\n return false;\n }\n\n // NOT PAUSED, so clear the cached location\n clearCache();\n\n if (resp === false) {\n return false;\n }\n if (resp === true || isUndefined(resp)) {\n return true;\n }\n\n // Log warning if an invalid response received, including undefined\n console.error(\n `Invalid response from ReactRouterPause.handler: \\`${resp}\\`. ` +\n '\\nResponse should be one of: true, false, null, undefined, Promise',\n );\n\n return true;\n }\n\n /**\n * Listener for history.block - fires BEFORE a route-change.\n *\n * @param {Object} location Object with location, hash, etc.\n * @param {string} action One of [PUSH|REPLACE|POP]\n */\n function beforeRouteChange(\n location: HistoryLocation,\n action: HistoryAction,\n ): string | false | void {\n if (ignoreNextNavigationEvent.current) {\n allowNextEvent(false); // Reset one-time flag\n return;\n } else if (isBlocking()) {\n // The askHandler method handles the pause/resume functionality.\n // Call the handler to see if we should allow route change (true).\n // Coerce response to a boolean because that's what RR expects.\n const resp = !!askHandler(location, action);\n\n // There are only 3 responses that block navigation\n if (resp === false || isNull(resp) || isPromise(resp)) {\n return false;\n }\n }\n\n // Allow anything not handled above\n }\n};\n","import { useEffect, useState } from 'react';\nimport { ValueOrOnDemand } from '../models';\n\n/**\n * Returns the value and a loading indicator\n * @param input the text or function to retrieve the text\n * @param onError a callback that will be called when the input could not be retrieved. It should return a fallback value that will be used instead.\n */\nexport const useValueOrOnDemand = (\n input: ValueOrOnDemand = '',\n onError?: (err: any) => string,\n): readonly [string, boolean] => {\n const [value, setValue] = useState('');\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n let didCancel = false;\n\n (async (): Promise<void> => {\n let value;\n\n try {\n value =\n typeof input === 'function' ? String(await input()) : String(input);\n } catch (err) {\n value = onError ? onError(err) : '';\n }\n\n if (!didCancel) {\n setValue(value);\n setIsLoading(false);\n }\n })();\n\n return (): void => {\n didCancel = true;\n };\n }, [input, onError]);\n\n return [value, isLoading] as const;\n};\n","import { useFormikContext } from 'formik';\nimport React, { useState } from 'react';\nimport { NavigationAPI, useReactRouterPause } from '../../../hooks';\nimport { handleNavigationAttempt } from './handleNavigationAttempt';\n\ninterface SaveOnNavigateProps {\n /** If set to true, will prevent form submission when navigating away. (default: false) */\n isSubmitting?: boolean;\n}\n\n/**\n * Performs logic to keep user on the page if form is not valid, as well as saving valid forms on navigation.\n */\nexport const SaveOnNavigate: React.FC<SaveOnNavigateProps> = ({\n isSubmitting = false,\n}) => {\n const { dirty, isValid, submitForm } = useFormikContext();\n const [canSubmit, setCanSubmit] = useState<boolean>(true);\n\n useReactRouterPause(\n {\n handler: (navigation: NavigationAPI) =>\n handleNavigationAttempt(\n navigation,\n dirty,\n isValid,\n submitForm,\n isSubmitting,\n canSubmit,\n setCanSubmit,\n ),\n },\n dirty,\n );\n\n return null;\n};\n","import React from 'react';\nimport { NavigationAPI } from '../../../hooks';\n\nexport const handleNavigationAttempt = async (\n navigation: NavigationAPI,\n dirty: boolean,\n isValid: boolean,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n submitForm: (() => Promise<void>) & (() => Promise<any>),\n isSubmitting: boolean,\n canSubmit: boolean,\n setCanSubmit: React.Dispatch<React.SetStateAction<boolean>>,\n): Promise<void> => {\n if (!dirty) {\n // Form values didn't change, just navigate away\n navigation.resume();\n return;\n }\n if (!isValid) {\n // Form is invalid, cancel navigation\n // TODO: Add a message here (probably connected to \"Error handling\")\n navigation.cancel();\n return;\n }\n // Form values have changed and form is valid, attempt save\n navigation.pause();\n try {\n // only attempt to submit the form if there is no current submission in progress\n if (!isSubmitting && canSubmit) {\n // Block additional submit requests before continuing navigation or double clicking can cause the form to be submitted again.\n setCanSubmit(false);\n // Wait for success response\n await submitForm();\n // Successfully saved, continue navigation\n navigation.resume();\n }\n } catch (error) {\n // TODO: Proper Error handling\n // An error occurred while attempting to save, cancel navigation\n navigation.cancel();\n // Allow submits again if error\n setCanSubmit(true);\n }\n};\n","import clsx from 'clsx';\nimport {\n Form,\n Formik,\n FormikHelpers,\n FormikValues,\n useFormikContext,\n} from 'formik';\nimport React, {\n PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { OptionalObjectSchema } from 'yup/lib/object';\nimport { Data } from '../../types/data';\nimport { ErrorTypeToStationError } from '../../utils/ErrorTypeToStationError';\nimport { Actions, ActionsProps } from '../Actions';\nimport { isNavigationAction } from '../Actions/Action/Action';\nimport { IconName } from '../Icons';\nimport { MessageBar } from '../MessageBar';\nimport { ErrorType, StationError, StationMessage } from '../models';\nimport {\n PageHeader,\n PageHeaderActionType,\n PageHeaderProps,\n} from '../PageHeader';\nimport { FormActionData, InitialFormData } from './FormStation.models';\nimport classes from './FormStation.scss';\nimport { SaveOnNavigate } from './SaveOnNavigate/SaveOnNavigate';\n\nexport type ObjectSchemaDefinition<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n T extends Data | null = any,\n> = {\n // TODO: Adding 'any' here since there are a couple of open issues regarding generics in the latest version of yup.\n // https://github.com/jquense/yup/issues/1159\n // https://github.com/jquense/yup/issues/1247\n // Consider revisiting once 'yup' has addressed these issues.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [field in keyof T]: any;\n};\n\nexport interface FormStationProps<\n TValues extends Data = FormikValues,\n TSubmitResponse = unknown,\n> {\n /** name of the property on the form that holds the title */\n titleProperty?: keyof TValues;\n /** fallback title if no value can be determined */\n defaultTitle?: string;\n /** Subtitle shown in page header */\n subtitle?: string;\n /** If set to true, the actions panel is shown, even if no actions are defined. */\n alwaysShowActionsPanel?: boolean;\n // /** An array of the actions that should be executable on the page */\n actions?: FormActionData<TValues, TSubmitResponse>[];\n /** The width of the Actions container (as CSS width) */\n actionsWidth?: string;\n /**\n * An object containing the initial data of the form.\n */\n initialData: InitialFormData<TValues>;\n /** The Yup validation object (or any other Formik compatible validation schema) */\n validationSchema?: OptionalObjectSchema<ObjectSchemaDefinition<TValues>>;\n /** URL to navigate to when the form is reset (usually on a create station) */\n cancelNavigationUrl?: string;\n /** Component which contains additional information */\n infoPanel?: JSX.Element;\n /** Optional flag for removing the padding around child components. */\n edgeToEdgeContent?: boolean;\n /**\n * This will make sure that the submission is attempted even if the form is not dirty.\n * This is mainly useful for Create stations.\n */\n alwaysSubmitBeforeAction?: boolean;\n /**\n * If set, will display a message bar on the form station\n * @example stationMessage={{type: 'info', message: 'Informative message.'}}\n */\n stationMessage?: StationMessage;\n /**\n * Called whenever the form needs to be saved.\n * This method needs to throw an exception in case the saving did not succeed.\n */\n saveData: (\n /** The current values of the form */\n values: TValues,\n /** The initial values of the form */\n initialData: InitialFormData<TValues>,\n /** The Formik state helpers */\n formikHelpers: FormikHelpers<TValues>,\n ) => Promise<TSubmitResponse> | void;\n /** CSS Class name for additional styles */\n className?: string;\n}\n\ninterface FormActionProps<T, Y> extends Omit<ActionsProps, 'actions'> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n validationSchema?: OptionalObjectSchema<ObjectSchemaDefinition<any>>;\n actions?: FormActionData<T, Y>[];\n setStationError: (error: StationError) => void;\n submitResponse?: React.MutableRefObject<Y | undefined>;\n alwaysSubmitBeforeAction?: boolean;\n className?: string;\n isFormSubmitting?: boolean;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const FormStation = <TValues extends Data, TSubmitResponse = unknown>({\n titleProperty,\n defaultTitle,\n subtitle,\n children,\n alwaysShowActionsPanel = false,\n actions,\n actionsWidth,\n cancelNavigationUrl,\n initialData,\n saveData,\n validationSchema,\n infoPanel,\n edgeToEdgeContent,\n alwaysSubmitBeforeAction = false,\n stationMessage,\n className = '',\n}: PropsWithChildren<\n FormStationProps<TValues, TSubmitResponse>\n>): JSX.Element => {\n const [stationError, setStationError] = useState<StationError>();\n const [isLoadingError, setIsLoadingError] = useState(false);\n\n const submitResponse = useRef<TSubmitResponse>();\n const [isFormSubmitting, setIsFormSubmitting] = useState<boolean>(false);\n\n const onSubmit = useCallback(\n async (\n values: TValues,\n formikHelpers: FormikHelpers<TValues>,\n ): Promise<void> => {\n if (isFormSubmitting) {\n return;\n }\n try {\n setIsFormSubmitting(true);\n setStationError(undefined);\n if (!initialData.loading && saveData) {\n const response = await saveData(values, initialData, formikHelpers);\n if (response) {\n submitResponse.current = response;\n }\n }\n } catch (error) {\n setStationError(\n ErrorTypeToStationError(\n error as ErrorType,\n 'An error occurred when trying to save data.',\n ),\n );\n\n // We still throw the error, to make sure that navigation or action execution\n // will not continue after a failed save.\n throw error;\n } finally {\n formikHelpers.setSubmitting(false);\n setIsFormSubmitting(false);\n }\n },\n [isFormSubmitting, initialData, saveData, setStationError],\n );\n\n useEffect(() => {\n if (\n initialData.error ||\n (initialData.data === null && !initialData.loading) ||\n initialData.entityNotFound\n ) {\n const stationError = ErrorTypeToStationError(\n initialData.error,\n 'An error occurred when trying to load data.',\n 'Entity not found',\n );\n\n setStationError(stationError);\n setIsLoadingError(true);\n } else {\n if (isLoadingError === true) {\n // Only clear the error if it is a loading error, which now seems to be cleared.\n setStationError(undefined);\n setIsLoadingError(false);\n }\n }\n }, [\n initialData.loading,\n initialData.error,\n initialData.entityNotFound,\n initialData.data,\n isLoadingError,\n ]);\n\n const getContent = (): JSX.Element | undefined => {\n if (initialData.loading) {\n // TODO: Loading skeleton of the page\n return;\n }\n\n if (\n initialData.error ||\n initialData.data === null ||\n initialData.entityNotFound\n ) {\n // Error on loading - we can't show the form\n return <div className={classes.loadingError}></div>;\n }\n\n // Loading successful\n return (\n <>\n <SaveOnNavigate isSubmitting={isFormSubmitting} />\n <div className={classes.main}>\n <div\n className={clsx(classes.formWrapper, {\n [classes.hasMessage]: stationMessage,\n })}\n >\n {stationMessage && (\n <MessageBar {...stationMessage}>{stationMessage.body}</MessageBar>\n )}\n <div\n className={clsx({\n [classes.formContainer]: !edgeToEdgeContent,\n })}\n >\n <Form>\n <>\n {children}\n {/* Adding a invisible text input here to prevent the browser from submitting on \"Enter\" when there is only a single text input field in the form\n See: https://www.w3.org/MarkUp/html-spec/html-spec_8.html#SEC8.2 */}\n <input type=\"text\" style={{ display: 'none' }} />\n </>\n </Form>\n </div>\n </div>\n {infoPanel}\n </div>\n </>\n );\n };\n\n return (\n <div\n className={clsx(\n classes.container,\n {\n [classes.hasError]: stationError,\n },\n 'form-station-container',\n className,\n )}\n >\n <Formik\n initialValues={initialData.data ?? ({} as TValues)}\n validationSchema={validationSchema}\n onSubmit={onSubmit}\n enableReinitialize={true}\n >\n <>\n <FormStationHeader\n titleProperty={titleProperty as string}\n defaultTitle={defaultTitle}\n subtitle={subtitle}\n cancelNavigationUrl={cancelNavigationUrl}\n />\n {stationError && (\n <div className={classes.errorMessage}>\n <MessageBar\n type=\"error\"\n title={String(stationError.title)}\n onClose={() => setStationError(undefined)}\n >\n {stationError?.body}\n </MessageBar>\n </div>\n )}\n <div className={classes.children}>{getContent()}</div>\n {alwaysShowActionsPanel || (actions?.length ?? 0) > 0 ? (\n <FormStationAction<TValues, TSubmitResponse>\n actions={actions}\n width={actionsWidth}\n validationSchema={validationSchema}\n setStationError={setStationError}\n submitResponse={submitResponse}\n alwaysSubmitBeforeAction={alwaysSubmitBeforeAction}\n className={classes.actionsPanel}\n />\n ) : null}\n </>\n </Formik>\n </div>\n );\n};\n\n/**\n * Saves the form before the action is performed.\n */\nconst FormStationAction = <T, Y>(\n props: PropsWithChildren<FormActionProps<T, Y>>,\n): JSX.Element => {\n const {\n actions,\n validationSchema,\n setStationError,\n submitResponse,\n alwaysSubmitBeforeAction,\n className = '',\n } = props;\n const {\n submitForm,\n resetForm,\n values,\n validateForm,\n isValid,\n dirty,\n isSubmitting,\n } = useFormikContext<T>();\n\n const updatedActions = useMemo(() => {\n return actions?.map((action) => {\n const { onActionSelected } = action;\n\n return isNavigationAction(action)\n ? action\n : {\n ...action,\n isDisabled: action.isDisabled || isSubmitting,\n onActionSelected: () => {\n (async () => {\n //TODO: Busy indicator (disable form?)\n if (dirty || alwaysSubmitBeforeAction) {\n // We can't rely on 'isValid' alone, since that will only evaluate if the form is touched or 'submitForm' is called.\n // On a create station though the from might not be touched but still being invalid.\n // Also the validation on submitForm in here will not help, since the value of isValid is already bound to that method and will not change\n // anymore while this method executes - even if it changes on the context!\n if (\n !isValid ||\n (await validationSchema?.isValid(values)) === false\n ) {\n // eslint-disable-next-line no-console\n console.log('form invalid, action not performed');\n // Making sure that the fields will actually show the validation messages (they won't if the from was not touched yet - e.g. on a create station)\n validateForm();\n return;\n }\n\n try {\n await submitForm();\n\n // Committing the changed values to the form to get the current version as the new \"reset\" state.\n resetForm({ values });\n } catch (error) {\n // we will abort the action if saving is not successful\n // a station error is already set by the \"onSubmit\"\n return;\n }\n }\n\n try {\n const result =\n onActionSelected &&\n (await onActionSelected({\n values,\n submitResponse: submitResponse?.current,\n }));\n if (result !== undefined) {\n setStationError(\n ErrorTypeToStationError(\n result,\n 'An error occurred when trying to execute the action.',\n ),\n );\n }\n } catch (error) {\n const stationError = ErrorTypeToStationError(\n error as ErrorType,\n 'An error occurred when trying to execute the action.',\n );\n setStationError(stationError);\n }\n })();\n },\n };\n });\n }, [\n actions,\n alwaysSubmitBeforeAction,\n dirty,\n isSubmitting,\n isValid,\n resetForm,\n setStationError,\n submitForm,\n submitResponse,\n validateForm,\n validationSchema,\n values,\n ]);\n\n return (\n <div className={className}>\n <Actions actions={updatedActions} />\n </div>\n );\n};\n\n/**\n * Handles showRefresh and cancel buttons based on form states\n */\nconst FormStationHeader: React.FC<\n Omit<PageHeaderProps, 'title'> & {\n titleProperty?: string;\n defaultTitle?: string;\n cancelNavigationUrl?: string;\n }\n> = ({ titleProperty, defaultTitle, subtitle, cancelNavigationUrl }) => {\n const { dirty, resetForm, values } = useFormikContext<FormikValues>();\n\n const history = useHistory();\n\n const title =\n titleProperty && values[titleProperty] !== ''\n ? values[titleProperty]\n : defaultTitle ?? '';\n\n return (\n <PageHeader\n title={title}\n subtitle={subtitle}\n actions={[\n ...(dirty === true // add undo action if form as been altered\n ? [\n {\n label: 'Undo Changes',\n icon: IconName.Undo,\n actionType: PageHeaderActionType.Context,\n onClick: () => {\n resetForm();\n },\n },\n ]\n : []),\n ...(cancelNavigationUrl // add cancel action if applicable\n ? [\n {\n label: 'Cancel',\n icon: IconName.X,\n onClick: () => {\n resetForm();\n // If the form has errors, Navigation needs to be wrapped in a promise or timeout.\n Promise.resolve().then(() =>\n history.push(cancelNavigationUrl),\n );\n },\n },\n ]\n : []),\n ]}\n />\n );\n};\n","import React, { PropsWithChildren } from 'react';\nimport { Data } from '../../../types/data';\nimport { FormStation, FormStationProps } from '../FormStation';\nimport { ActionHandler } from '../FormStation.models';\n\nexport type CreateProps<TValues extends Data, TSubmitResponse = unknown> = Omit<\n FormStationProps<TValues, TSubmitResponse>,\n | 'actions'\n | 'onActionSelected'\n | 'alwaysShowActionsPanel'\n | 'defaultTitle'\n | 'titleProperty'\n | 'alwaysSubmitBeforeAction'\n> & {\n /** The title of the station */\n title: string;\n\n /**\n * Called after the entity was saved.\n * The expected behavior is, to navigate the user to the details page of the created entity.\n * The function will receive the form data as well as the values returned by the `saveData` function.\n */\n onProceed: ActionHandler<TValues, TSubmitResponse>;\n\n /**\n * This prop allows defining a custom label for the proceed action. If it's not provided, the station will use\n * the label 'Proceed'.\n */\n proceedLabel?: string;\n\n /**\n * Disables the 'Proceed' button and prevents `saveData` from being called. It\n * is advised to define station message in case this is true.\n */\n denyProceeding?: boolean;\n};\n\n/**\n * This component is the basic building block for 'create' stations in the CMS.\n *\n * You can specify the form you want to show in the children prop. The form will run inside a Formik context.\n *\n * To create the form, it's usually the easiest to use Formik's `<Field/>` component and using one of the\n * `*Field` components coming from this library in the `as` prop like this:\n *\n * `<Field name=\"title\" label=\"Title\" as={TextField} />`\n */\nexport const Create = <TValues extends Data, TSubmitResponse = unknown>(\n props: PropsWithChildren<CreateProps<TValues, TSubmitResponse>>,\n): JSX.Element => {\n const { onProceed, denyProceeding } = props;\n\n if (props.initialData.data === null) {\n // Otherwise it would show a \"entity not found\", which is not meaningful on a create station\n props.initialData.data = undefined;\n }\n\n return (\n <FormStation\n {...props}\n saveData={(values, initialData, formikHelpers) => {\n if (denyProceeding) {\n throw {\n title:\n 'Unable to navigate away with pending changes still on the form.',\n };\n }\n return props.saveData(values, initialData, formikHelpers);\n }}\n defaultTitle={props.title}\n actions={[\n {\n label: props.proceedLabel ?? 'Proceed',\n onActionSelected: onProceed,\n isDisabled: denyProceeding,\n },\n ]}\n alwaysSubmitBeforeAction={true}\n ></FormStation>\n );\n};\n","import React, { PropsWithChildren } from 'react';\nimport { Data } from '../../../types/data';\nimport { FormStation, FormStationProps } from '../FormStation';\n\nexport type DetailsProps<\n TValues extends Data,\n TSubmitResponse = unknown,\n> = Omit<\n FormStationProps<TValues, TSubmitResponse>,\n 'cancelNavigationUrl' | 'alwaysSubmitBeforeAction'\n>;\n\n/**\n * This component is the basic building block for 'details' stations in the CMS.\n *\n * You can specify the form you want to show in the children prop. The form will run inside a Formik context.\n *\n * To create the form, it's usually the easiest to use Formik's `<Field/>` component and using one of the\n * `*Field` components coming from this library in the `as` prop like this:\n *\n * `<Field name=\"title\" label=\"Title\" as={TextField} />`\n *\n * In addition, it allows the definition of `actions`, which will be presented to the user in the appropriate panel.\n * The component uses the `onActionSelected` callback to notify the application when an action needs to be executed by the application.\n */\nexport const Details = <TValues extends Data, TSubmitResponse = unknown>(\n props: PropsWithChildren<DetailsProps<TValues, TSubmitResponse>>,\n): JSX.Element => (\n <FormStation\n {...props}\n cancelNavigationUrl={undefined}\n alwaysSubmitBeforeAction={false}\n />\n);\n","import clsx from 'clsx';\nimport React from 'react';\nimport { Link } from 'react-router-dom';\nimport { TileProps } from './Tile.model';\nimport classes from './Tile.scss';\n\n// TODO: Support for background colors and hover effect\n// TODO: Refactor all tile type components.\n\n/**\n * Renders a tile used in Hub component\n * @example\n * <TileSmall\n * path={'/liveevents'}\n * label={'Live Events'}\n * icon={'/images/default_image.svg'}\n * />\n */\nexport const Tile: React.FC<TileProps> = ({\n path,\n label,\n subLabel,\n icon,\n disabled,\n}) => {\n return (\n <Link\n className={clsx(classes.tile, disabled && classes.disabled)}\n to={{\n pathname: disabled ? undefined : path,\n }}\n >\n <div className={classes.icon}>\n {React.isValidElement(icon)\n ? icon\n : typeof icon === 'string' && (\n <img src={icon} alt={`${label} icon`} />\n )}\n </div>\n <div className={classes.label}>\n <span data-test-id=\"tile-label\">{label}</span>\n <span>{subLabel}</span>\n </div>\n </Link>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { HubItem } from './Hub.model';\nimport classes from './Hub.scss';\nimport { Tile } from './Tile';\n\nexport interface HubProps {\n /** Data for all tiles */\n items: HubItem[];\n /** Spacing between tiles */\n gridGap?: string;\n /** The minimum width the grid can shrink down to */\n minWidth?: string;\n /** The maximum width the grid can expand to */\n maxWidth?: string;\n /** CSS Class name for additional styles */\n className?: string;\n}\n\ntype GroupName = string;\n\nexport const Hub: React.FC<HubProps> = ({\n children,\n items = [],\n gridGap,\n minWidth,\n maxWidth,\n className = '',\n}) => {\n const customStyles = {\n gridGap: gridGap,\n minWidth: minWidth,\n maxWidth: maxWidth,\n } as React.CSSProperties;\n\n const groups: Record<GroupName, HubItem[]> = {};\n\n items.forEach((item) => {\n groups[item.groupName] = [...(groups[item.groupName] || []), item];\n });\n\n return (\n <div className={clsx('hub-group-container', className)} data-test-id=\"hub\">\n {Object.keys(groups).map((group, groupIndex) => (\n <div\n key={groupIndex}\n className={clsx(classes.group)}\n data-test-id=\"hub-group\"\n >\n <span className={clsx(classes.title)} data-test-id=\"hub-group-label\">\n {group}\n </span>\n <div className={clsx(classes.container)} style={customStyles}>\n {groups[group].map((item, itemIndex) => (\n <Tile\n key={itemIndex}\n path={item.path}\n label={item.label}\n subLabel={item.subLabel}\n icon={item.icon}\n disabled={item.disabled}\n />\n ))}\n </div>\n </div>\n ))}\n {children}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React, { ReactNode, useCallback, useEffect, useState } from 'react';\nimport ContentLoader from 'react-content-loader';\nimport { noop } from '../../../helpers/utils';\nimport { SquareOutlineSkeleton } from '../skeletons';\nimport classes from './ImageLoader.scss';\n\nexport interface ImageLoaderProps {\n /** Image's url */\n imgSrc: string;\n /** Image's alt attribute */\n alt?: string;\n /** Image loader height (default: 50) */\n height?: number;\n /** Image loader width (default: 50) */\n width?: number;\n /** Image height (default: undefined) */\n imgHeight?: string | number;\n /** Image width (default: undefined) */\n imgWidth?: string | number;\n /** SVGRectElement used as the loading animation. If set, will replace the default SVGRectElement */\n loadingSkeleton?: ReactNode;\n /** Animation speed (default: 2) */\n speed?: number;\n /** Loader's background color (default: '#CCCCCC') */\n backgroundColor?: string;\n /** Loader's foreground color (default: '#EEECEC') */\n foregroundColor?: string;\n /** SVG's viewbox (defaults to a view box matching the given height and width), adjust this change the skeleton's rendering*/\n viewBox?: string;\n /** Fallback image url to load in case of load failure. If not set, a fallback background color will be used */\n fallbackSrc?: string;\n /** Specify the amount of time the component should wait for the image source to arrive before rendering the fallback, in milliseconds (default: 2000). If the image manages to load at a later time, the image will be rendered */\n imageTimeout?: number;\n /** Callback emitted after the image has successfully loaded. Img src is sent back */\n onLoad?: (src: string) => void;\n /** Callback emitted after the image has failed to load. Img src is sent back */\n onError?: (src: string) => void;\n /** Callback emitted when the image element is clicked */\n onImageClick?: (\n event: React.MouseEvent<HTMLImageElement, MouseEvent>,\n ) => void;\n}\n\n/**\n * Renders a loading animation while an image is being fetched\n * @example\n * <ImageLoader imgSrc=\"/location/thumb.png\" />\n */\nexport const ImageLoader: React.FC<ImageLoaderProps> = ({\n imgSrc,\n alt,\n height = 50,\n width = 50,\n imgHeight,\n imgWidth,\n loadingSkeleton = SquareOutlineSkeleton,\n speed = 2,\n backgroundColor = '#CCCCCC',\n foregroundColor = '#EEECEC',\n viewBox,\n fallbackSrc,\n imageTimeout = 2000,\n onLoad = noop,\n onError = noop,\n onImageClick = noop,\n children,\n}) => {\n const actualViewBox = viewBox || `0 0 ${width} ${height}`;\n\n const [srcTimedOut, setSrcTimedOut] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [fallBack, setFallBack] = useState<boolean>(false);\n\n // check if url has loaded after set time (milliseconds)\n useEffect(\n () => {\n const timer = setTimeout(() => {\n if (imgSrc === undefined) {\n setSrcTimedOut(true);\n }\n }, imageTimeout);\n return () => {\n clearTimeout(timer);\n };\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const customStyles = {\n height: `${height}px`,\n width: `${width}px`,\n } as React.CSSProperties;\n\n const onLoadHandler = useCallback(() => {\n setIsLoading(false);\n onLoad(imgSrc);\n setFallBack(false);\n }, [imgSrc, onLoad]);\n\n const onErrorHandler = useCallback(() => {\n setIsLoading(false);\n setFallBack(true);\n onError(imgSrc);\n }, [imgSrc, onError]);\n\n return (\n <>\n {isLoading && (\n <div className={classes.container} style={customStyles}>\n <ContentLoader\n speed={speed}\n backgroundColor={backgroundColor}\n foregroundColor={foregroundColor}\n viewBox={actualViewBox}\n >\n {loadingSkeleton}\n </ContentLoader>\n </div>\n )}\n {(imgSrc !== undefined || srcTimedOut) && (\n <div className={classes.imageContainer}>\n <img\n src={String(imgSrc)}\n height={imgHeight}\n width={imgWidth}\n style={{\n display: isLoading ? 'none' : fallBack ? 'none' : 'block',\n objectFit: 'contain',\n maxWidth: '100%',\n }}\n alt={alt}\n onLoad={onLoadHandler}\n onError={onErrorHandler}\n onClick={onImageClick}\n data-test-id=\"image-loader-img\"\n />\n {fallBack &&\n (!fallbackSrc ? (\n <div\n className={clsx(classes.container, classes.fallback)}\n style={customStyles}\n ></div>\n ) : (\n <img\n className={classes.fallBackImage}\n src={String(fallbackSrc)}\n height={imgHeight}\n width={imgWidth}\n />\n ))}\n {!isLoading && !fallBack && children}\n </div>\n )}\n </>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { ActionData } from '../../Actions';\nimport { InlineMenu } from '../../InlineMenu/InlineMenu';\nimport { ImageLoader } from '../../Loaders';\nimport classes from './InfoImage.scss';\n\nexport interface InfoImageProps {\n /** Image url */\n imgSrc: string;\n /** Optional class */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n /** Fallback image url to load in case of load failure. If not set, a fallback background color will be used */\n fallbackSrc?: string;\n /** Actions that should be available on the image's `InlineMenu` */\n inlineMenuActions?: ActionData[];\n}\n\nexport const InfoImage: React.FC<InfoImageProps> = ({\n className,\n imgSrc,\n style,\n fallbackSrc,\n inlineMenuActions,\n}) => {\n return (\n <div\n className={clsx(\n classes.container,\n 'info-panel-image-container',\n className,\n )}\n style={style}\n data-test-id=\"info-image\"\n >\n <ImageLoader\n imgSrc={imgSrc}\n height={420}\n width={419} /*1px border*/\n fallbackSrc={fallbackSrc}\n >\n {inlineMenuActions && (\n <InlineMenu\n buttonClassName={classes.inlineMenu}\n actions={inlineMenuActions}\n showArrow={false}\n placement=\"bottom-end\"\n addBackgroundOpacity={true}\n />\n )}\n </ImageLoader>\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport classes from './InfoPanel.scss';\n\nexport interface InfoPanelProps {\n /** Width of the container */\n width?: string;\n\n /** Optional class */\n className?: string;\n}\n\nexport const InfoPanel: React.FC<InfoPanelProps> = ({\n children,\n className,\n width = '480px',\n}) => {\n return (\n <div\n className={clsx(className, 'info-panel-container', classes.container)}\n style={{ width }}\n data-test-id=\"info-panel\"\n >\n <div className={classes.content}>{children}</div>\n <div className={classes.filler} />\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport classes from './Paragraph.scss';\n\nexport interface ParagraphProps {\n /** Paragraph Title */\n title?: string;\n\n /** Optional class */\n className?: string;\n\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\nexport const Paragraph: React.FC<ParagraphProps> = ({\n className,\n title,\n style,\n children,\n}) => {\n if (children === null || children === undefined) {\n return null;\n }\n return (\n <div\n className={clsx(\n classes.container,\n { [classes.hasTitle]: title },\n 'info-panel-paragraph-container',\n className,\n )}\n style={style}\n data-test-id=\"paragraph\"\n >\n {title && (\n <div className={classes.title} data-test-id=\"paragraph-title\">\n {title}\n </div>\n )}\n <div className={classes.content} data-test-id=\"paragraph-content\">\n {children}\n </div>\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { Paragraph } from '../Paragraph/Paragraph';\nimport classes from './Section.scss';\n\nexport interface SectionProps {\n /** Section Title */\n title?: string;\n\n /** Optional class */\n className?: string;\n\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\nexport const Section: React.FC<SectionProps> = ({\n className,\n title,\n style,\n children,\n}) => {\n const validChildren: React.ReactNode[] = [];\n\n // Special case for removing paragraph components if they are empty\n React.Children.forEach(children, (child) => {\n if (\n !React.isValidElement(child) ||\n child.type !== Paragraph ||\n (child.props.children !== null && child.props.children !== undefined)\n ) {\n validChildren.push(child);\n }\n });\n\n // Do not render the section if there are no children\n if (validChildren.length === 0) {\n return <></>;\n }\n\n return (\n <div\n className={clsx(\n classes.container,\n { [classes.hasTitle]: title },\n 'info-panel-section-container',\n className,\n )}\n style={style}\n data-test-id=\"section\"\n >\n {title && (\n <div className={classes.title} data-test-id=\"section-title\">\n {title}\n </div>\n )}\n <div className={classes.main} data-test-id=\"section-content\">\n {validChildren}\n </div>\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport classes from './LandingPageHeader.scss';\n\nexport interface LandingPageHeaderProps {\n title: string;\n subtitle: string;\n className?: string;\n}\n\nexport const LandingPageHeader: React.FC<LandingPageHeaderProps> = ({\n title,\n subtitle,\n className = '',\n}) => {\n return (\n <div\n className={clsx(\n classes.container,\n 'landing-page-header-container',\n className,\n )}\n data-test-id=\"landing-page-header\"\n >\n <div className={clsx(classes.title)} data-test-id=\"landing-page-title\">\n {title}\n </div>\n <div\n className={clsx(classes.subtitle)}\n data-test-id=\"landing-page-subtitle\"\n >\n {subtitle}\n </div>\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { Link } from 'react-router-dom';\nimport { useValueOrOnDemand } from '../../../hooks/useValueOrOnDemand/useValueOrOnDemand';\nimport { Loader } from '../../Loaders/Loader/Loader';\nimport { LandingPageItem } from '../LandingPageTiles.model';\nimport classes from './TileLarge.scss';\n\n// TODO: Support for background colors and hover effect\n\nexport interface TileLargeProps extends LandingPageItem {\n /** Column span */\n largeTileColumnSpan?: number;\n /** Row span */\n largeTileRowSpan?: number;\n}\n\n/**\n * Renders a large tile used in LandingPageTiles component\n * @example\n * <TileLarge\n * path={'/movies'}\n * label={'Movies'}\n * icon={'/images/default_image.svg'}\n * type={'large'}\n * subtitle={256}\n * largeTileColumnSpan={4}\n * largeTileRowSpan={2}\n * />\n */\nexport const TileLarge: React.FC<TileLargeProps> = ({\n path,\n label,\n icon,\n disabled,\n subtitle,\n largeTileColumnSpan,\n largeTileRowSpan,\n}) => {\n const customStyles = {\n gridColumn: largeTileColumnSpan ? `span ${largeTileColumnSpan}` : undefined,\n gridRow: largeTileRowSpan ? `span ${largeTileRowSpan}` : undefined,\n } as React.CSSProperties;\n\n const [subtitleValue, isSubtitleLoading] = useValueOrOnDemand(subtitle);\n\n return (\n <Link\n className={clsx(classes.container, disabled && classes.disabled)}\n to={{\n pathname: disabled ? undefined : path,\n }}\n style={customStyles}\n >\n <div className={classes.icon} data-test-id=\"tile-icon-large\">\n {React.isValidElement(icon)\n ? icon\n : typeof icon === 'string' && (\n <img src={icon} alt={`${label} icon`} />\n )}\n </div>\n <div className={classes.titlesSection}>\n <span className={classes.label} data-test-id=\"tile-label\">\n {label}\n </span>\n <span className={classes.subtitle}>\n <Loader showLoader={isSubtitleLoading}>{subtitleValue}</Loader>\n </span>\n </div>\n </Link>\n );\n};\n","import clsx from 'clsx';\nimport React from 'react';\nimport { Link } from 'react-router-dom';\nimport { LandingPageItem } from '../LandingPageTiles.model';\nimport classes from './TileSmall.scss';\n\n// TODO: Support for background colors and hover effect\n\nexport interface TileSmallProps extends LandingPageItem {\n /** Column span */\n smallTileColumnSpan?: number;\n /** Row span */\n smallTileRowSpan?: number;\n}\n\n/**\n * Renders a small tile used in LandingPageTiles component\n * @example\n * <TileSmall\n * path={'/liveevents'}\n * label={'Live Events'}\n * icon={'/images/default_image.svg'}\n * type={'small'}\n * smallTileColumnSpan={3}\n * smallTileRowSpan={1}\n * />\n */\nexport const TileSmall: React.FC<TileSmallProps> = ({\n path,\n label,\n icon,\n disabled,\n smallTileColumnSpan,\n smallTileRowSpan,\n}) => {\n const customStyles = {\n gridColumn: smallTileColumnSpan ? `span ${smallTileColumnSpan}` : undefined,\n gridRow: smallTileRowSpan ? `span ${smallTileRowSpan}` : undefined,\n } as React.CSSProperties;\n\n return (\n <Link\n className={clsx(classes.container, disabled && classes.disabled)}\n to={{\n pathname: disabled ? undefined : path,\n }}\n style={customStyles}\n >\n <div className={classes.icon} data-test-id=\"tile-icon-small\">\n {React.isValidElement(icon)\n ? icon\n : typeof icon === 'string' && (\n <img src={icon} alt={`${label} icon`} />\n )}\n </div>\n\n <span className={classes.label} data-test-id=\"tile-label\">\n {label}\n </span>\n </Link>\n );\n};\n","import clsx from 'clsx';\nimport React, { useMemo } from 'react';\nimport { LandingPageItem } from './LandingPageTiles.model';\nimport classes from './LandingPageTiles.scss';\nimport { TileLarge } from './TileLarge';\nimport { TileSmall } from './TileSmall';\n\nexport interface LandingPageTilesProps {\n /** Data for all tiles */\n items: LandingPageItem[];\n /** Number of columns */\n gridTemplateColumns?: number;\n /** Height of Rows. Rows are automatically created. */\n gridRowHeight?: string;\n /** Spacing between tiles */\n gridGap?: string;\n /** The minimum width the grid can shrink down to */\n minWidth?: string;\n /** The maximum width the grid can expand to */\n maxWidth?: string;\n /** Alignment of the whole grid in the view */\n alignment?: 'left' | 'center' | 'right';\n /** Column span for the large tile */\n largeTileColumnSpan?: number;\n /** Row span for the large tile */\n largeTileRowSpan?: number;\n /** Column span for the small tile */\n smallTileColumnSpan?: number;\n /** Row span for the small tile */\n smallTileRowSpan?: number;\n /** CSS Class name for additional styles */\n className?: string;\n}\n\n// TODO: Determine if we really need to keep have two seperate tile components(large/small)\n// or can they be combined into the same component since they share a lot of the same props/logic\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\nfunction assertUnreachable(i: never): void {}\n\nconst useTiles = (\n items: LandingPageItem[],\n): [LandingPageItem[], LandingPageItem[]] => {\n return useMemo<[LandingPageItem[], LandingPageItem[]]>(() => {\n const small: LandingPageItem[] = [];\n const large: LandingPageItem[] = [];\n\n items.forEach((i) => {\n switch (i.type) {\n case 'large':\n large.push(i);\n break;\n case 'small':\n small.push(i);\n break;\n default:\n // Adding this assert to get a compile error when new types are added and this switch is not adjusted\n assertUnreachable(i.type);\n }\n });\n\n return [large, small];\n }, [items]);\n};\n\n/**\n * Grid system for the home station\n * @example\n * <LandingPageTiles\n * items={[{}]}\n * gridTemplateColumns={12}\n * gridRowHeight={'150px'}\n * gridGap={'5px'}\n * minWidth={'600px'}\n * maxWidth={'900px'}\n * alignment={'center'}\n * largeTileColumnSpan={4}\n * largeTileRowSpan={2}\n * smallTileColumnSpan={3}\n * smallTileRowSpan={1}\n * />\n */\nexport const LandingPageTiles: React.FC<LandingPageTilesProps> = ({\n children,\n items = [],\n gridTemplateColumns,\n gridGap,\n gridRowHeight,\n minWidth,\n maxWidth,\n alignment,\n largeTileColumnSpan = 4,\n smallTileColumnSpan = 3,\n largeTileRowSpan = 2,\n smallTileRowSpan = 1,\n className = '',\n}) => {\n const [largeTiles, smallTiles] = useTiles(items);\n\n const customStyles = {\n gridTemplateColumns: gridTemplateColumns\n ? `repeat(${gridTemplateColumns}, 1fr)`\n : undefined,\n gridAutoRows: gridRowHeight,\n gridGap: gridGap,\n minWidth: minWidth,\n maxWidth: maxWidth,\n justifySelf: alignment,\n } as React.CSSProperties; // todo pass in things like width height\n\n return (\n <div\n className={clsx(\n classes.container,\n 'landing-page-tiles-container',\n className,\n )}\n style={customStyles}\n data-test-id=\"landing-page-tiles\"\n >\n {largeTiles.map((nav, index) => (\n <TileLarge\n key={index}\n path={nav.path}\n label={nav.label}\n icon={nav.icon}\n type={nav.type}\n subtitle={nav.subtitle}\n disabled={nav.disabled}\n largeTileColumnSpan={largeTileColumnSpan}\n largeTileRowSpan={largeTileRowSpan}\n />\n ))}\n {smallTiles.map((nav, index) => (\n <TileSmall\n key={index}\n path={nav.path}\n label={nav.label}\n icon={nav.icon}\n type={nav.type}\n disabled={nav.disabled}\n smallTileColumnSpan={smallTileColumnSpan}\n smallTileRowSpan={smallTileRowSpan}\n />\n ))}\n {children}\n </div>\n );\n};\n","import clsx from 'clsx';\nimport React, { useState } from 'react';\nimport { CSSTransition, TransitionGroup } from 'react-transition-group';\nimport { noop } from '../../helpers/utils';\nimport classes from './Modal.scss';\n\nexport interface ModalProps {\n /** Whether the Modal is shown or not */\n isShown: boolean;\n /** Top padding (default: '70px') */\n paddingTop?: string;\n /** Right padding (default: '20px') */\n paddingRight?: string;\n /** Bottom padding (default: '20px') */\n paddingBottom?: string;\n /** Left padding (default: '20px') */\n paddingLeft?: string;\n /** Modal width (default: undefined) */\n width?: string;\n /** z-index value (default: '9999') */\n zIndex?: string;\n /** Callback to emit when the modal is mounted */\n onOpen?: () => void;\n /** Callback to emit when the when the modal is unmounted */\n onClose?: () => void;\n /** Callback to emit when the back-drop has been clicked */\n onBackDropClicked?: () => void;\n /** CSS Class name for additional styles */\n className?: string;\n}\n\n/**\n * Renders an overlay and it's children\n * @example\n * <Modal isShown={true} onBackDropClicked={() => console.log('back-drop clicked')}>\n * <div>Component(s) to render</div>\n * </Modal>\n */\nexport const Modal: React.FC<ModalProps> = ({\n isShown,\n children,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n width,\n zIndex,\n onOpen = noop,\n onClose = noop,\n onBackDropClicked = noop,\n className = '',\n}) => {\n const [applyHideStyles, setApplyHideStyles] = useState<boolean>(false);\n const [isFullyOpen, setIsFullyOpen] = useState<boolean>(false);\n\n const customStyles = {\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n zIndex,\n } as React.CSSProperties;\n\n const childCustomStyles = {\n width,\n } as React.CSSProperties;\n\n return (\n <div\n className={clsx(\n classes.container,\n isShown && classes.show,\n applyHideStyles && classes.hide,\n 'modal-container',\n className,\n )}\n onClick={() => isShown && onBackDropClicked()}\n style={customStyles}\n >\n <TransitionGroup>\n {isShown && (\n <CSSTransition\n key=\"modal\"\n timeout={200}\n classNames={{\n enter: classes.enter,\n enterDone: classes.enterDone,\n exit: classes.exit,\n exitActive: classes.exitActive,\n }}\n onEnter={() => setApplyHideStyles(false)}\n onEntered={() => {\n setIsFullyOpen(true);\n onOpen();\n }}\n onExit={() => {\n setIsFullyOpen(false);\n setApplyHideStyles(true);\n }}\n onExited={onClose}\n >\n <div\n className={classes.child}\n onClick={(event) => event.stopPropagation()}\n style={childCustomStyles}\n data-test-id=\"modal\"\n data-test-state={isFullyOpen ? 'open' : 'closed'}\n >\n {children}\n </div>\n </CSSTransition>\n )}\n </TransitionGroup>\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Modal } from './Modal';\n\nexport interface ModalComponentProps {\n /**\n * Callback to close the modal.\n */\n closeModal: () => void;\n}\n\nexport interface UseModalResult {\n /**\n * The component for the modal. (Make sure to add this to the DOM)\n */\n ModalWrapper: React.FC;\n /**\n * Method to close the modal.\n */\n closeModal: () => void;\n /**\n * Method to open the modal.\n */\n openModal: () => void;\n /**\n * Indicates whether the modal is shown or not.\n */\n isShown: boolean;\n}\n\n/**\n * Wraps the given component in a `Modal` and returns methods to control the visibility of the modal.\n * @param Component The component that should be shown as modal.\n */\nexport const useModal = (\n Component: React.ComponentType<ModalComponentProps>,\n): UseModalResult => {\n const [isShown, setIsShown] = useState<boolean>(false);\n\n const closeModal = (): void => setIsShown(false);\n const openModal = (): void => setIsShown(true);\n\n const ModalWrapper: React.FC = () => {\n // This State + Effect is used to force a re render which the animation library listens to.\n const [innerShown, setInnerShown] = useState<boolean>(false);\n\n useEffect(() => {\n setInnerShown(isShown);\n }, []);\n\n return (\n <Modal isShown={innerShown} onBackDropClicked={closeModal}>\n <Component closeModal={closeModal} />\n </Modal>\n );\n };\n\n return {\n ModalWrapper,\n closeModal,\n openModal,\n isShown,\n };\n};\n","import React, { useCallback } from 'react';\nimport { NavigationAPI } from '../../hooks/models';\nimport { useReactRouterPause } from '../../hooks/useReactRouterPause/useReactRouterPause';\n\nexport interface NavigationAwareStationProps {\n /**\n * When set to `true`, each navigation attempt to an external URL will\n * result in a warning by the browser and every in-app navigation will trigger a\n * call to `onNavigate()`.\n */\n restrictNavigation?: boolean;\n /**\n * A callback that can be used to perform some work before navigating. It should\n * return `true` if navigation can continue afterwards or `false` if the navigation\n * attempt should be canceled.\n *\n * __Note:__ the function should be wrapped by a `useCallback` ot avoid unnecessary rendering cycles.\n */\n onNavigate?: () => Promise<boolean> | boolean;\n}\n\n/**\n * The `NavigationAwareStation` component can be used by any station that needs to restrict\n * navigation. It allows defining a callback that will be executed which eventually decides\n * whether the navigation should be allowed or not.\n *\n * __Note__: This component will not add any visual effects e.g. loading states or notifications\n * in case a navigation is cancelled. It's the responsibility of the station to perform\n * meaningful visualization of what's going on.\n */\nexport const NavigationAwareStation: React.FC<NavigationAwareStationProps> = ({\n restrictNavigation = false,\n onNavigate = () => true,\n children,\n}) => {\n const handler = useCallback(\n async (navigation: NavigationAPI, _location: Location) => {\n if (!restrictNavigation) {\n return;\n }\n\n // Pause navigation\n navigation.pause();\n try {\n // call `onNavigate`\n const result = await onNavigate(); //TODO: Loading animation?\n if (result) {\n // resume if `onNavigate` returned true\n navigation.resume();\n } else {\n // otherwise cancel navigation\n navigation.cancel();\n }\n } catch (error) {\n // TODO: Proper Error handling\n // An error occurred while attempting to save, cancel navigation\n navigation.cancel();\n }\n },\n [onNavigate, restrictNavigation],\n );\n\n useReactRouterPause(\n {\n handler,\n },\n restrictNavigation,\n );\n\n return <>{children}</>;\n};\n","/**\n * Checks if the value follows the Timestamp format: 00:00:00.000\n * @param value - string to check\n * @returns boolean\n * @example timestampValidator('00:00:00.000')\n */\nexport const timestampValidator = (value: string): boolean => {\n return /^(?:2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]\\.[0-9][0-9][0-9]$/.test(\n value,\n );\n};\n"],"names":["toVal","mix","k","y","str","Array","isArray","length","clsx","tmp","x","i","arguments","useExpand","initialValue","isExpanded","setIsExpanded","useState","expand","useCallback","collapse","toggleExpanded","previous","ButtonContext","__rest","s","e","t","p","Object","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","apply","noop","executeIfRefAvailable","ref","fn","args","current","IconName","styleInject","css","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","ArchiveIcon","className","React","classes","version","xmlns","viewBox","vectorEffect","fill","strokeWidth","d","BackwardOne","stroke","BackwardTen","BlockIcon","BulkIcon","CalendarIcon","CheckmarkIcon","ChevronDownIcon","transform","ChevronLeftIcon","ChevronRightIcon","ChevronUpIcon","CopyIcon","DeleteIcon","DetailsIcon","DragIcon","EllipsisIcon","ErrorIcon","ExternalIcon","FileIcon","ForwardOne","ForwardTen","InfoIcon","MidlineEllipsisIcon","MinusIcon","MuteIcon","NavigateRightIcon","PauseIcon","PlayIcon","PlusIcon","PublishIcon","RemoveFilterIcon","ReplaceIcon","RetryIcon","SnapshotIcon","StopIcon","SuccessIcon","UnarchiveIcon","UndoIcon","UnmuteIcon","UnpublishIcon","UploadIcon","WarningIcon","XIcon","Icons","icon","icons","[object Object]","Archive","Block","Bulk","Calendar","Checkmark","ChevronDown","ChevronLeft","ChevronRight","ChevronUp","Copy","Delete","Details","Drag","Ellipsis","Error","External","File","Info","MidlineEllipsis","Minus","Mute","NavigateRight","Pause","Play","Plus","Publish","RemoveFilter","Replace","Retry","Snapshot","Stop","Success","Unarchive","Undo","Unmute","Unpublish","Upload","Warning","X","undefined","Button","forwardRef","height","width","buttonContext","Navigation","disabled","dataTestId","onButtonClicked","onBlur","customStyles","Context","Icon","Active","onClick","data-test-id","CompositeButton","text","iconPosition","direction","TextButton","AccordionItem","header","children","allowLeftSpacing","sticky","scrollHeight","setScrollHeight","elementRef","useRef","useEffect","None","maxHeight","gridTemplateColumns","Accordion","expandedByDefault","stickyRows","alignAccordionItem","expandAll","expanded","setExpanded","updatedState","assign","Children","map","child","isValidElement","keyString","String","_a","key","keys","includes","useLayoutEffect","forEach","cloneElement","_b","props","_c","fromEntries","entries","reduce","acc","_ref","useIsomorphicLayoutEffect","window","top","bottom","right","left","basePlacements","variationPlacements","placement","concat","placements","modifierPhases","getNodeName","element","nodeName","toLowerCase","getWindow","node","toString","ownerDocument","defaultView","isElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","applyStyles$1","name","enabled","phase","state","elements","styles","attributes","removeAttribute","setAttribute","effect","_ref2","initialStyles","popper","position","options","strategy","margin","arrow","reference","property","attribute","requires","getBasePlacement","split","round","Math","getBoundingClientRect","includeScale","rect","scaleX","scaleY","offsetHeight","offsetWidth","getLayoutRect","clientRect","abs","offsetLeft","offsetTop","contains","parent","rootNode","getRootNode","isSameNode","parentNode","host","getComputedStyle","isTableElement","getDocumentElement","documentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","navigator","userAgent","currentNode","perspective","contain","willChange","filter","getContainingBlock","getMainAxisFromPlacement","max","min","within","mathMax","mathMin","mergePaddingObject","paddingObject","expandToHashMap","hashMap","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","_ref3","dpr","devicePixelRatio","roundOffsetsByDPR","_ref3$x","_ref3$y","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","passive","hash","getOppositePlacement","replace","matched","start","end","getOppositeVariationPlacement","getWindowScroll","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","test","listScrollParents","list","_element$ownerDocumen","scrollParent","getScrollParent","body","isBody","target","visualViewport","updatedList","rectToClientRect","getClientRectFromMixedType","clippingParent","html","clientWidth","clientHeight","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","basePlacement","commonX","commonY","mainAxis","len","detectOverflow","_options","_options$placement","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","padding","altContext","rects","clippingClientRect","contextElement","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","modifiersData","offset","multiply","axis","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","process","env","NODE_ENV","console","error","join","overflows","sort","a","b","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","getCompositeRect","elementOrVirtualElement","isFixed","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","scroll","order","modifiers","Map","visited","Set","modifier","set","has","add","requiresIfExists","dep","depModifier","get","push","format","_len","_key","c","INVALID_MODIFIER_ERROR","VALID_PROPERTIES","INVALID_ELEMENT_ERROR","DEFAULT_OPTIONS","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","arr","identifiers","orderModifiers","merged","existing","data","mergeByName","m","index","self","requirement","find","mod","validateModifiers","item","identifier","marginTop","marginRight","marginBottom","marginLeft","parseFloat","warn","_ref3$options","cleanupFn","update","forceUpdate","_state$elements","reset","__debug_loops__","_state$orderedModifie","_state$orderedModifie2","destroy","onFirstUpdate","createPopper","_options$scroll","_options$resize","resize","addEventListener","removeEventListener","_ref4","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","transitionProperty","data-popper-placement","applyStyles","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","slice","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_mainSide","_altSide","_offset","_min","_max","_preventedOffset","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","_options$element","querySelector","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","data-popper-reference-hidden","data-popper-escaped","hasElementType","hasMap","hasSet","hasArrayBuffer","ArrayBuffer","isView","reactFastCompare","equal","constructor","it","size","RegExp","source","flags","valueOf","$$typeof","message","match","EMPTY_MODIFIERS","usePopper","referenceElement","popperElement","prevOptions","optionsWithDefaults","_React$useState","setState","updateStateModifier","useMemo","popperOptions","newOptions","isEqual","popperInstanceRef","popperInstance","defaultCreatePopper","Message","title","isBodyOpen","isBodyPositionAbsolute","info","success","warning","container","data-test-type","titleWrapper","typeIcon","absolute","ConfirmDialog","cancelButtonText","confirmButtonText","offsetSkidding","offsetDistance","onCancel","onConfirm","onConfirmOpen","setPopperElement","setArrowElement","stopPropagation","getChildren","useConfirmationDelay","confirmationMode","confirmation","setConfirmation","isMouseOver","setIsMouseOver","timer","global","setTimeout","clearTimeout","SimpleConfirmDialog","Action","action","onActionClick","isNavigationAction","NavigationAction","ContextAction","label","confirmationConfig","onActionSelected","isDisabled","setReferenceElement","onMouseEnter","onMouseLeave","onMouseOver","path","Link","to","Actions","actions","ActionType","_extends","bind","this","_objectWithoutPropertiesLoose","excluded","sourceKeys","_setPrototypeOf","o","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","create","Symbol","for","f","g","h","l","n","q","r","v","w","z","u","A","hasSymbol","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_ASYNC_MODE_TYPE","REACT_CONCURRENT_MODE_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_BLOCK_TYPE","REACT_FUNDAMENTAL_TYPE","REACT_RESPONDER_TYPE","REACT_SCOPE_TYPE","typeOf","object","$$typeofType","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","ForwardRef","Fragment","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","hasWarnedAboutDeprecatedIsAsyncMode","isConcurrentMode","exports","isAsyncMode","isContextConsumer","isContextProvider","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","module","require$$0","require$$1","propIsEnumerable","toObject","val","TypeError","objectAssign","test1","getOwnPropertyNames","test2","fromCharCode","test3","letter","err","shouldUseNative","from","symbols","Function","printWarning","ReactPropTypesSecret","loggedTypeFailures","checkPropTypes","typeSpecs","values","location","componentName","getStack","typeSpecName","ex","stack","resetWarningCache","emptyFunctionThatReturnsNull","emptyFunction","emptyFunctionWithReset","throwOnDirectAccess","ITERATOR_SYMBOL","iterator","ReactPropTypes","array","createPrimitiveTypeChecker","bigint","bool","func","number","string","symbol","any","createChainableTypeChecker","arrayOf","typeChecker","propName","propFullName","PropTypeError","propValue","getPropType","elementType","ReactIs","instanceOf","expectedClass","expectedClassName","getClassName","isNode","objectOf","propType","oneOf","expectedValues","validate","is","valuesString","JSON","stringify","getPreciseType","oneOfType","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","expectedTypes","checkerResult","expectedType","shape","shapeTypes","invalidValidatorError","exact","allKeys","manualPropTypeCallCache","manualPropTypeWarningCount","checkType","isRequired","secret","cacheKey","chainedCheckType","iteratorFn","maybeIterable","getIteratorFn","entry","isSymbol","Date","PropTypes","shim","getShim","require$$2","replaceClassName","origClass","classToRemove","config","timeoutsShape","enter","exit","appear","classNamesShape","active","enterDone","enterActive","exitDone","exitActive","TransitionGroupContext","createContext","Transition","_React$Component","context","_this","initialStatus","isMounting","appearStatus","in","unmountOnExit","mountOnEnter","status","nextCallback","getDerivedStateFromProps","prevState","_proto","componentDidMount","updateStatus","componentDidUpdate","prevProps","nextStatus","componentWillUnmount","cancelNextCallback","getTimeouts","timeout","mounting","performEnter","performExit","_this2","appearing","nodeRef","ReactDOM","findDOMNode","maybeNode","maybeAppearing","timeouts","enterTimeout","safeSetState","onEntered","onEnter","onEntering","onTransitionEnd","_this3","onExit","onExiting","onExited","cancel","nextState","callback","setNextCallback","_this4","event","handler","doesNotHaveTimeoutOrListener","addEndListener","maybeNextCallback","render","_this$props","childProps","Provider","only","Component","contextType","propTypes","pt","defaultProps","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","Transition$1","_addClass","classList","baseVal","hasClass","addOneClass","removeClass","remove","removeOneClass","CSSTransition","appliedClasses","_this$resolveArgument","resolveArguments","removeClasses","addClass","_this$resolveArgument2","_this$resolveArgument3","getClassNames","classNames","isStringClassNames","baseClassName","activeClassName","doneClassName","_this$appliedClasses$","base","CSSTransition$1","getChildMapping","mapFn","mapper","getProp","prop","getNextChildMapping","nextProps","prevChildMapping","nextChildMapping","prev","getValueForKey","nextKeysPending","pendingKeys","prevKey","childMapping","nextKey","pendingNextKey","mergeChildMappings","hasPrev","hasNext","prevChild","isLeaving","obj","TransitionGroup","handleExited","ReferenceError","_assertThisInitialized","contextValue","firstRender","mounted","currentChildMapping","component","childFactory","TransitionGroup$1","DynamicListDataEntry","columns","columnSizes","columnGap","rowHeight","actionSize","horizontalTextAlign","verticalTextAlign","positionKey","allowAdd","allowReordering","allowDragging","newDataPosition","rowValidationSchema","defaultValuesForNewData","actionButtonContext","showHeader","onActionClicked","customAddButton","gridAutoRows","gridColumnGap","justifyItems","alignItems","isDirty","setIsDirty","setError","abortEarly","catch","newErrors","inner","validationError","onAddItemHandler","isValid","transformedState","onAddTransformer","propertyName","column","renderField","valueChangedHandler","currentValue","onValueChanged","dataEntryRender","DynamicListHeader","positionLabel","getTooltipText","textValue","InlineMenu","showArrow","addBackgroundOpacity","buttonClassName","buttonIcon","rest","onBlurTimeout","tabIndex","display","DynamicListRow","allowRemove","dragging","onDragStart","onDrop","onDragEnd","onPositionInputChanged","rowClassNameProvider","inlineMenuActions","inlineMenuData","setPosition","Number","draggedOver","setDraggedOver","draggable","Boolean","dataTransfer","effectAllowed","onDragEnter","preventDefault","onDragOver","dropEffect","elevation","getElevation","clientY","currentTarget","onDragLeave","onChange","isNaN","onKeyDown","currentPosition","onPositionInputChangedHandler","columnData","renderData","tooltip","box","DynamicDataList","minimumWidth","rowGap","headerRowHeight","listRowHeight","listRowActionSize","positionPropertyName","allowAddAndRemove","allowRowDragging","allowNewData","customDataEntry","CustomDataEntry","maxItemLimit","stickyHeader","onAddTransformData","useColumnDefs","setList","isDragging","setIsDragging","currentRowPosition","setCurrentRowPosition","shouldAnimate","setShouldAnimate","usePositions","canAddItems","useCanAddItems","gridRowGap","minWidth","onDragStartHandler","onDropHandler","newPosition","onRepositionHandler","onDragEndHandler","eventType","posKey","newList","calculateNewList","DynamicListDataEntryProps","idx","_isAppearing","scrollIntoView","behavior","block","removeItemFromList","onDeleteItemHandler","showInlineMenu","positionColumn","actionColumn","trim","currentItemAmt","maxItemAmtLimit","setCanAddItems","firstPosition","setFirstPosition","lastPosition","setLastPostion","setNewDataPosition","firstDataRow","lastDataRow","calculatedPos","allPositions","newPos","currentPos","moveDir","newPosIndex","prevPos","nextPos","findDragPosition","tempItems","isAfterNewPosGap","isGapBeforeNewPos","reverseList","reverse","removedPos","listWithoutRemovedItem","isGapReached","InfoTooltip","showTooltip","setShowTooltip","hideTooltipTimeout","FormElementContainer","id","tooltipContent","minHeight","dataTestFieldType","inlineMode","stickyLabel","heightStyles","BooleanViewField","trueLabel","falseLabel","green","red","data-test-value","Checkbox","autoFocus","onFocus","errorMsg","checked","useFormikError","errors","useFormikContext","getIn","CheckboxField","field","helpers","useField","setValue","useDebounce","time","debouncedValue","setDebouncedValue","debounce","CustomTags","placeholder","displayAsRows","liveSuggestionsDelay","liveSuggestionsResolver","currentTags","setCurrentTags","flexDirection","textInput","suggestions","setVal","cursorPos","setCursorPos","useSuggestions","errorMessage","setErrorMessage","addTag","newTag","autoComplete","persist","suggestion","onMouseDown","focus","onSuggestionClickedHandler","tag","_","removeTag","setSuggestions","valRef","tempSuggestions","log","fetchData","CustomTagsField","LuxonError","InvalidDateTimeError","reason","super","toMessage","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","unit","InvalidArgumentError","ZoneIsAbstractError","DATE_SHORT","year","month","day","DATE_MED","DATE_MED_WITH_WEEKDAY","weekday","DATE_FULL","DATE_HUGE","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","second","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","Zone","ianaName","isUniversal","ts","opts","otherZone","singleton","SystemZone","Intl","DateTimeFormat","resolvedOptions","timeZone","locale","parseZoneInfo","formatOffset","getTimezoneOffset","dtfCache","typeToPos","era","ianaZoneCache","IANAZone","isValidZone","zone","zoneName","valid","date","NaN","dtf","hour12","adOrBc","formatToParts","formatted","filled","pos","isUndefined","parseInt","partsOffset","parsed","exec","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","hackyOffset","asTS","over","objToLocalTS","millisecond","intlLFCache","intlDTCache","getCachedDTF","locString","intlNumCache","intlRelCache","sysLocaleCache","listStuff","loc","defaultOK","englishFn","intlFn","mode","listingMode","PolyNumberFormatter","intl","forceSimple","padTo","floor","otherOpts","intlOpts","useGrouping","minimumIntegerDigits","inf","NumberFormat","getCachedINF","fixed","padStart","roundTo","PolyDateFormatter","dt","originalZone","gmtOffset","offsetZ","setZone","plus","minutes","toJSDate","parts","part","offsetName","PolyRelFormatter","isEnglish","hasRelative","rtf","cacheKeyOpts","RelativeTimeFormat","getCachedRTF","count","numeric","narrow","units","years","quarters","months","weeks","days","hours","seconds","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","English.formatRelativeTime","Locale","numberingSystem","outputCalendar","defaultToEN","specifiedLocale","Settings","defaultLocale","localeR","numberingSystemR","defaultNumberingSystem","outputCalendarR","defaultOutputCalendar","numbering","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","localeStr","xIndex","substring","uIndex","selectedStr","smaller","calendar","parseLocaleString","intlConfigString","weekdaysCache","standalone","monthsCache","meridiemCache","eraCache","fastNumbersCached","fastNumbers","startsWith","isActuallyEn","hasNoWeirdness","alts","clone","English.months","formatStr","ms","DateTime","utc","mapMonths","extract","English.weekdays","mapWeekdays","English.meridiems","English.eras","matching","dtFormatter","ListFormat","getCachedLF","other","FixedOffsetZone","utcInstance","signedOffset","InvalidZone","normalizeZone","input","defaultZone","lowered","parseSpecifier","isNumber","throwOnInvalid","now","twoDigitCutoffYear","cutoffYear","resetCache","isInteger","bestBy","by","compare","best","pair","integerBetween","thing","padded","parseInteger","parseFloating","parseMillis","fraction","digits","towardZero","factor","trunc","isLeapYear","daysInYear","daysInMonth","modMonth","floorMod","UTC","setUTCFullYear","weeksInWeekYear","weekYear","p1","last","p2","untruncateYear","offsetFormat","modified","offHourStr","offMinuteStr","offHour","offMin","asNumber","numericValue","normalizeObject","normalizer","normalized","sign","RangeError","timeObject","pick","monthsLong","monthsShort","monthsNarrow","weekdaysLong","weekdaysShort","weekdaysNarrow","weekdays","meridiems","erasLong","erasShort","erasNarrow","eras","stringifyTokens","splits","tokenToString","token","literal","macroTokenToFormatOpts","D","Formats.DATE_SHORT","DD","Formats.DATE_MED","DDD","Formats.DATE_FULL","DDDD","Formats.DATE_HUGE","Formats.TIME_SIMPLE","tt","Formats.TIME_WITH_SECONDS","ttt","Formats.TIME_WITH_SHORT_OFFSET","tttt","Formats.TIME_WITH_LONG_OFFSET","T","Formats.TIME_24_SIMPLE","TT","Formats.TIME_24_WITH_SECONDS","TTT","Formats.TIME_24_WITH_SHORT_OFFSET","TTTT","Formats.TIME_24_WITH_LONG_OFFSET","Formats.DATETIME_SHORT","ff","Formats.DATETIME_MED","fff","Formats.DATETIME_FULL","ffff","Formats.DATETIME_HUGE","F","Formats.DATETIME_SHORT_WITH_SECONDS","FF","Formats.DATETIME_MED_WITH_SECONDS","FFF","Formats.DATETIME_FULL_WITH_SECONDS","FFFF","Formats.DATETIME_HUGE_WITH_SECONDS","Formatter","fmt","currentFull","bracketed","charAt","formatOpts","systemLoc","redefaultToSystem","interval","formatRange","numberFormatter","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","meridiem","English.meridiemForDateTime","English.monthForDateTime","English.weekdayForDateTime","maybeMacro","formatWithSystemDefault","English.eraForDateTime","parseFormat","num","weekNumber","ordinal","quarter","dur","tokenToField","tokens","realTokens","found","lildur","mapped","shiftTo","Invalid","explanation","ianaRegex","combineRegexes","regexes","full","combineExtractors","extractors","mergedVals","mergedZone","cursor","parse","patterns","regex","extractor","simpleParse","ret","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOTime","milliseconds","extractISOOffset","local","fullOffset","extractIANAZone","isoTimeOnly","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","force","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","English.monthsShort","English.weekdaysLong","English.weekdaysShort","rfc2822","extractRFC2822","obsOffset","milOffset","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","extractISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","lowOrderMatrix","casualMatrix","accurateMatrix","daysInYearAccurate","daysInMonthAccurate","orderedUnits","reverseUnits","clear","conf","conversionAccuracy","matrix","Duration","convert","fromMap","fromUnit","toMap","toUnit","conv","raw","added","ceil","antiTrunc","accurate","invalid","isLuxonDuration","fromObject","normalizeUnit","durationLike","fromMillis","isDuration","parseISODuration","parseISOTimeOnly","week","fmtOpts","formatDurationFromString","unitDisplay","listFormatter","listStyle","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","toFormat","toISO","as","duration","fromDurationLike","negate","vals","normalizeValues","newVals","removeZeroes","normalize","shiftToAll","built","accumulated","lastUnit","own","ak","down","negated","invalidReason","invalidExplanation","equals","v1","v2","INVALID","Interval","isLuxonInterval","builtStart","friendlyDateTime","builtEnd","validateError","validateStartEnd","fromDateTimes","minus","startIsValid","endIsValid","fromISO","after","before","toDuration","startOf","diff","isEmpty","hasSame","dateTime","dateTimes","sorted","results","mapUnits","numberOfParts","splitBy","intervals","final","sofar","overlaps","abutsStart","union","currentCount","ends","merge","xor","intersection","formatInterval","toISODate","toISOTime","dateFormat","separator","proto","locObj","relative","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","highWater","lowestOrder","differs","differ","highOrderDiffs","remainingMillis","lowerOrderUnits","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","digitRegex","append","intUnit","post","deser","code","charCodeAt","search","parseDigits","spaceOrNBSP","spaceOrNBSPRegExp","fixListRegex","stripInsensitivities","strings","startIndex","findIndex","groups","simple","partTypeStyleToTokenVal","2-digit","short","long","dayperiod","dayPeriod","dummyDateTimeCache","expandMacroTokens","formatOptsToTokens","maybeExpandMacroToken","explainFromTokens","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","unitate","unitForToken","disqualifyingUnit","regexString","handlers","buildRegex","rawMatches","matches","all","matchIndex","specificOffset","Z","M","G","S","toField","dateTimeFromMatches","formatDateTimeParts","isSpace","tokenForPart","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","getUTCFullYear","js","getUTCDay","computeOrdinal","uncomputeOrdinal","table","month0","gregorianToWeek","gregObj","weekToGregorian","weekData","weekdayOfJan4","yearInDays","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","hasInvalidGregorianData","validYear","validMonth","validDay","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","unsupportedZone","possiblyCachedWeekData","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","formatDateTimeFromString","extended","longFormat","includeOffset","extendedZone","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","quickDT","tsNow","offsetProvis","diffRelative","calendary","relFormatter","lastOpts","argList","ot","_zone","isLuxonDateTime","zoneToUse","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","validWeek","validWeekday","hasInvalidWeekData","validOrdinal","hasInvalidOrdinalData","gregorian","tsFinal","offsetFinal","parseISODate","preprocessRFC2822","parseRFC2822Date","parseHTTPDate","localeToUse","fromOpts","parseFromTokens","fromFormat","parseSQL","localeOpts","tokenList","monthShort","monthLong","weekdayShort","weekdayLong","offsetNameShort","offsetNameLong","isInDST","isInLeapYear","keepCalendarTime","newTS","offsetGuess","asObj","reconfigure","settingWeekStuff","mixed","normalizedUnit","redefaultToEN","formatDateTime","ext","includeZone","includeOffsetSpace","toSQLDate","toSQLTime","includeConfig","otherDateTime","durOpts","otherIsLater","diffed","inputMs","adjustedToZone","endOf","isDateTime","fromFormatExplain","Formats.DATE_MED_WITH_WEEKDAY","Formats.DATETIME_MED_WITH_WEEKDAY","dateTimeish","fromJSDate","mergeClassNames","arg","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","objectToString","isObjectLike","isObject","isBinary","toNumber","toFinite","remainder","toInteger","lodash_once","getUserLocales","once","languageList","languages","language","userLanguage","browserLanguage","systemLanguage","el","splitEl","toUpperCase","fixLowercaseProperties","getUserLocale","makeGetEdgeOfNeighbor","getPeriod","getEdgeOfPeriod","defaultOffset","previousPeriod","makeGetEnd","getBeginOfNextPeriod","getTime","makeGetRange","functions","getYear","getFullYear","getMonth","getDate","getCenturyStart","centuryStartYear","centuryStartDate","setFullYear","setHours","getPreviousCenturyStart","getNextCenturyStart","getCenturyEnd","getPreviousCenturyEnd","getCenturyRange","getDecadeStart","decadeStartYear","decadeStartDate","getPreviousDecadeStart","getNextDecadeStart","getDecadeEnd","getPreviousDecadeEnd","getDecadeRange","getYearStart","yearStartDate","getPreviousYearStart","getNextYearStart","getYearEnd","getPreviousYearEnd","getYearRange","makeGetEdgeOfNeighborMonth","getMonthStart","monthStartDate","getPreviousMonthStart","getNextMonthStart","getMonthEnd","getPreviousMonthEnd","getMonthRange","getDayStart","dayStartDate","_CALENDAR_TYPE_LOCALE","getDayEnd","getDayRange","getDaysInMonth","_arrayLikeToArray","arr2","_defineProperty","defineProperty","enumerable","configurable","writable","CALENDAR_TYPES","ARABIC","HEBREW","ISO_8601","US","CALENDAR_TYPE_LOCALES","WEEKDAYS","_arrayWithoutHoles","iter","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","getSafeFormatter","toLocaleString","getFormatter","safeDate","toSafeHour","formatLongDate","formatMonth","formatMonthYear","formatYear","formatShortWeekday","formatWeekday","SUNDAY","FRIDAY","SATURDAY","getDayOfWeek","calendarType","getDay","getBeginOfWeek","monthIndex","getMonthIndex","getBegin","rangeType","getBeginNext","getEnd","getRange","getValueRange","date1","date2","rawNextValue","toYearLabel","defaultFormatYear","dates","getDecadeLabel","isWeekend","_typeof","calendarTypes","allViews","isCalendarType","isClassName","isMinDate","minDate","maxDate","isMaxDate","isRef","isValue","isViews","view","allowedViews","views","tileGroupProps","activeStartDate","hover","tileClassName","tileContent","valueType","tileProps","tileDisabled","labelClassName","drillUp","_ref$formatMonthYear","defaultFormatMonthYear","_ref$formatYear","_ref$navigationAriaLa","navigationAriaLabel","navigationLabel","_ref$next2AriaLabel","next2AriaLabel","_ref$next2Label","next2Label","_ref$nextAriaLabel","nextAriaLabel","_ref$nextLabel","nextLabel","_ref$prev2AriaLabel","prev2AriaLabel","_ref$prev2Label","prev2Label","_ref$prevAriaLabel","prevAriaLabel","_ref$prevLabel","prevLabel","setActiveStartDate","showDoubleView","drillUpAvailable","shouldShowPrevNext2Buttons","previousActiveStartDate","getBeginPrevious","previousActiveStartDate2","getBeginPrevious2","nextActiveStartDate","nextActiveStartDate2","getBeginNext2","prevButtonDisabled","previousActiveEndDate","getEndPrevious","prev2ButtonDisabled","getEndPrevious2","nextButtonDisabled","next2ButtonDisabled","renderLabel","getCenturyLabel","aria-label","flexGrow","ownKeys","enumerableOnly","sym","getOwnPropertyDescriptor","_objectSpread","getOwnPropertyDescriptors","defineProperties","_objectWithoutProperties","sourceSymbolKeys","toPercent","Flex","wrap","otherProps","flexWrap","flexBasis","maxWidth","_toConsumableArray","isValueWithinRange","range","isRangeWithinRange","greaterRange","smallerRange","doRangesOverlap","range1","range2","getRangeClassNames","valueRange","dateRange","isRangeStart","isRangeEnd","getTileClasses","dateType","valueRangeClassNames","hoverRange","hoverRangeClassNames","TileGroup","_ref$count","dateTransform","_ref$step","Tile","tile","tiles","point","_classCallCheck","Constructor","_defineProperties","descriptor","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_possibleConstructorReturn","getPrototypeOf","getValue","_Component","_inherits","protoProps","staticProps","_super","tileClassNameProps","tileContentProps","formatAbbr","maxDateTransform","minDateTransform","_this$state","Decade","Decades","CenturyView","Year","Years","DecadeView","Month","_ref$formatMonth","defaultFormatMonth","Months","YearView","Day","_ref$formatLongDate","defaultFormatLongDate","currentMonthIndex","Days","showFixedNumberOfWeeks","showNeighboringMonth","hasFixedNumberOfWeeks","activeEndDate","Weekdays","_props$formatShortWee","defaultFormatShortWeekday","beginOfMonth","weekdayDate","abbr","WeekNumber","onClickWeekNumber","WeekNumbers","numberOfWeeks","weekNumbers","beginOfFirstWeek","calendarTypeForWeekNumber","beginOfWeek","getWeekNumber","flexShrink","weekIndex","MonthView","_props$calendarType","getCalendarTypeFromLocale","showWeekNumbers","defaultMinDate","defaultMaxDate","allValueTypes","getLimitedViews","minDetail","maxDetail","getView","isViewAllowed","getValueType","rawValue","valueDate","toDate","getDetailValue","valuePiece","between","getDetailValueFrom","getDetailValueTo","getDetailValueArray","getActiveStartDate","getIsSingleValue","_args","defaultActiveStartDate","defaultValue","_assertThisInitialize","previousView","allowPartialRange","onActiveStartDateChange","onViewChange","selectRange","prevArgs","shouldUpdate","setStateAndCallCallbacks","drillDownAvailable","onClickTile","_assertThisInitialize2","onDrillDown","nextView","_assertThisInitialize3","onDrillUp","nextValue","_assertThisInitialize4","previousValue","getProcessedValue","_this$props2","onClickDay","onClickDecade","onClickMonth","onClickYear","_this$props3","returnValue","processFunction","currentActiveStartDate","_this$props4","commonProps","drillDown","_formatYear","_this$props5","_this$props6","showNavigation","_this$props7","_this$props8","inputRef","valueArray","renderNavigation","renderContent","valueFrom","activeStartDateProps","activeStartDateState","_this$props9","valueProps","valueState","_this$props10","viewProps","viewState","_this$props11","isActiveStartDate","isLooseValue","DatePicker","onSelected","ScrollColumn","items","selectedItem","itemHeight","displayItemCount","isActive","inActiveTitle","columnHeight","selectedIndex","containerStyles","scrollerStyles","gridGap","gridRowStart","gridRowEnd","ActiveSelector","TimePicker","showSeconds","hours12","setTime","setActive","ampm","setAmPm","Hours","newTime","Minutes","Seconds","AMPM","DateTimePicker","showTimePicker","selectedDate","setSelectedDate","defaultDate","updatedDate","createConnectionRenderer","selector","nodes","filterToPostGraphileFilter","filters","filterEntries","filterWithQuery","mapValues","setProperty","customValue","unshift","shift","getArrayDiff","initial","currentArray","originalArray","removed","updated","isUpdated","generateArrayMutations","generateArrayMutationsImplementation","generateArrayMutationsWithUpdates","original","prefix","generateCreateMutation","generateDeleteMutation","generateUpdateMutation","getFormDiff","transformRange","greaterThan","lessThan","sortToPostGraphileOrderBy","sortingEnum","columnSortKey","capitalizeFirstLetter","createUpdateGQLFragmentGenerator","mutation","enumValues","GqlFragment","getResult","formatBoolean","substr","dateString","formatDate","formatFileSize","bytes","toFixed","sortArray","TIMESTAMP_DEFAULT","formatSecondsToTimestamp","timeInSeconds","pad","timestampToSeconds","timestamp","hh","mm","ss","formatTitleCase","txt","DateTimeText","modifyTime","setDisplay","fromISODate","showPicker","setShowPicker","onBlurHandler","parsedValue","isoParsedValue","calculatePosition","DateString","ISODateString","innerHeight","DateTimeTextField","meta","setTouched","Divider","DynamicDataListControl","DynamicDataListField","ProgressBar","progress","kind","indeterminate","kindClass","statusClass","ProgressBarStatus","FileUploadControl","onFileSelected","accept","fileName","setFileName","file","setProgress","uploading","setUploading","setDragging","handleDragIn","handleDragOut","onUploadStarted","onUploadProgress","onUploadCompleted","fileSelected","uploadStarted","uploadProgress","uploadCompleted","files","htmlFor","FileUploadField","FormGroupTitle","FormikDebug","ctx","GenericField","labelHeight","LinkField","url","download","href","rel","IMask","InputMask","ChangeDetails","details","inserted","rawInserted","skip","tailShift","isString","DIRECTION","escapeRegExp","normalizePrepare","prep","objectIncludes","arrA","arrB","dateA","dateB","regexpA","regexpB","ActionDetails","oldValue","oldSelection","startChangePos","insertedCount","removedCount","tail","removeDirection","ContinuousTailDetails","stop","masked","aggregate","_appendPlaceholder","beforePos","shiftChar","Masked","_value","_update","DEFAULTS","isInitialized","withValueRefresh","doCommit","unmaskedValue","typedValue","doParse","doFormat","rawInputValue","extractInput","displayValue","isComplete","isFilled","fromPos","toPos","appendTo","ch","checkTail","consistentState","doPrepare","_appendCharRaw","consistentTail","appended","doValidate","beforeTailState","overwrite","tailDetails","appendTail","_beforeTailState","ci","_appendChar","doSkipInvalid","eager","_appendEager","_refreshing","rawInput","_isolated","skipInvalid","prepare","commit","deleteCount","tailPos","extractTail","eagerRemove","oldRawValue","forceDirection","nearestInputPos","valLength","mask","tval","EMPTY_VALUES","maskedClass","MaskedRegExp","MaskedPattern","MaskedDate","MaskedNumber","MaskedDynamic","MaskedFunction","createMask","MaskedClass","_excluded","DEFAULT_INPUT_DEFINITIONS","0","*","PatternInputDefinition","isOptional","placeholderChar","displayChar","lazy","maskOpts","maxPos","boundPos","PatternFixedDefinition","isUnmasking","_isRawInput","appendEager","isResolved","char","ChunksTailDetails","chunks","tailChunk","lastChunk","extendLast","extend","firstTailChunk","blockIndex","chunk","lastBlockIter","_mapPosToBlock","chunkBlock","_stops","phDetails","_blocks","remainChars","cstate","chunkShiftPos","splice","PatternCursor","_log","ok","_blockStartPos","pop","pushState","bindBlock","_this$block","_pushLeft","_pushRight","definitions","_rebuildMask","defs","_maskedBlocks","pattern","unmaskingBlock","optionalBlock","_defs$char","_defs$char2","blocks","bNames","bName","maskedBlock","isInput","STOP_CHAR","ESCAPE_CHAR","def","maskedState","bi","_this$_mapPosToBlock","startBlockIndex","blockIter","_flags$_beforeTailSta","_flags$_beforeTailSta2","blockDetails","chunkTail","_forEachBlocksInRange","bFromPos","bToPos","blockChunk","_findStopBefore","stopBefore","si","toBlockIndex","startBlockIter","endBlockIndex","bDetails","accVal","blockStartPos","fromBlockIter","toBlockIter","isSameBlock","fromBlockStartPos","fromBlockEndPos","removeDetails","pushRightBeforeInput","popState","pushLeftBeforeInput","pushRightBeforeFilled","pushLeftBeforeRequired","pushLeftBeforeFilled","pushRightBeforeRequired","total","totalInputPositions","maskedBlocks","indices","gi","InputDefinition","FixedDefinition","MaskedRange","_matchFrom","maxLength","fromStr","toStr","sameCharsCount","repeat","minstr","maxstr","padEnd","autofix","nextVal","boundaries","GET_DEFAULT_BLOCKS","Y","bk","isDateExist","maskEquals","MaskElement","selectionStart","_unsafeSelectionStart","selectionEnd","_unsafeSelectionEnd","_unsafeSelect","HTMLMaskElement","_handlers","rootElement","_this$input$getRootNo","_this$input$getRootNo2","_this$input","activeElement","setSelectionRange","_toggleEventHandler","EVENTS_MAP","selectionChange","drop","click","HTMLContenteditableMaskElement","root","selection","getSelection","anchorOffset","focusOffset","createRange","setStart","setEnd","lastChild","removeAllRanges","addRange","textContent","isContentEditable","tagName","_listeners","_unmaskedValue","_saveSelection","_onInput","_onChange","_onDrop","_onFocus","_onClick","alignCursor","alignCursorFriendly","_bindEvents","updateValue","_this$masked","updateOptions","updateControl","typedValueEquals","bindEvents","unbindEvents","ev","listeners","_cursorChanging","_changingCursorPos","select","_selection","newUnmaskedValue","newValue","newDisplayValue","isChanged","_fireChangeEvents","restOpts","updateMask","updateOpts","_delayUpdateCursor","_abortUpdateCursor","_fireEvent","_inputEvent","hIndex","updateCursor","_unbindEvents","MaskedEnum","enum","_updateRegExps","allowNegative","scale","radix","_numberRegExp","_mapToRadixRegExp","mapToRadix","_thousandsSeparatorRegExp","thousandsSeparator","_removeThousandsSeparators","prepCh","extendOnSeparators","_separatorsCount","_adjustRangeWithSeparators","prevBeforeTailValue","prevBeforeTailSeparatorsCount","_separatorsCountFromSlice","appendDetails","_insertThousandsSeparators","beforeTailValue","beforeTailSeparatorsCount","searchFrom","separatorPos","separatorAroundFromPos","_findSeparatorAround","separatorAroundToPos","valueBeforePos","valueAfterPos","separatorAtLeftPos","separatorAtLeftEndPos","separatorAtRightPos","validnum","normalizeZeros","_normalizeZeros","padFractionalZeros","_padFractionalZeros","zeros","dropFractional","UNMASKED_RADIX","signed","maximumFractionDigits","_excluded2","currentMask","compiledMasks","_applyDispatch","currentMaskFlags","prevValueBeforeTail","inputValue","insertValue","_rawInputValue","tailValue","prevMask","prevMaskState","doDispatch","currentMaskRef","dispatch","currentDetails","_this$currentMask","_this$currentMask2","_this$currentMask3","_this$currentMask4","mi","_mask$mi","oldMask","_this$currentMask5","inputs","isCurrent","startInputPos","weight","i1","i2","PIPE_TYPE","MASKED","UNMASKED","TYPED","createPipe","runIsolated","pipe","pipeArgs","globalThis","_objectDestructuringEmpty","MASK_PROPS","unmask","onAccept","onComplete","MASK_PROPS_NAMES","NON_MASK_OPTIONS_PROPS_NAMES","MASK_OPTIONS_PROPS_NAMES","pName","IMaskInputClass","ComposedComponent","MaskedComponent","_inputRef","initMask","maskOptions","_extractMaskOptionsFromProps","maskRef","maskValue","destroyMask","on","_onAccept","_onComplete","cloneProps","nonMaskProp","maskProp","_extractNonMaskProps","nestedComponentName","displayName","IMaskMixin","_excluded3","SingleLineText","isSet","innerRef","createRef","isPasswordField","MaskedSingleLineText","formikValue","initialized","setInitialized","lastAcceptState","setLastAcceptState","setUnmaskedValue","setTypedValue","_destroyMask","_maskRef$current","off","lastAcceptValue","lastAcceptUnmaskedValue","lastAcceptTypedValue","useIMask","RadioButton","hasError","confirmValue","preserveAspectRatio","cx","cy","Radio","setConfirmValue","labe","radioId","data-test-checked","confirmed","RadioField","ReadOnlyField","hideIfEmpty","transformedValue","ReadOnlyTextField","hideCopyButton","nonNullableValue","clipboard","writeText","Select","addEmptyOption","option","SelectField","SingleLineTextField","Tags","dropDownLabel","tagsOptions","displayKey","valueKey","blur","hidden","currentTag","getDisplayValue","TagsField","TextArea","rows","TextAreaField","ToggleButton","showONOFFText","selected","setSelected","gridTemplateRows","ToggleButtonField","_e","createInputRenderer","onValueChange","createSelectRenderer","MessageBar","onClose","onRetry","setIsBodyOpen","interactive","isObject_1","_freeGlobal","freeSelf","_root","freeGlobal","now_1","reWhitespace","_trimmedEndIndex","reTrimStart","_baseTrim","trimmedEndIndex","_Symbol","objectProto","nativeObjectToString","symToStringTag","toStringTag","_getRawTag","isOwn","unmasked","_objectToString","_baseGetTag","getRawTag","isObjectLike_1","isSymbol_1","baseGetTag","toNumber_1","baseTrim","nativeMax","nativeMin","debounce_1","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","flush","PageHeaderActionType","PageHeaderAction","actionType","imgAlt","hasConfirm","src","alt","pageHeaderActionsIcons","confirmDialog","isOpen","onConfirmOpenHandler","PageHeaderBulkActions","openBulkActionsOnStart","onBulkActionsToggled","availableActionSpace","bulkActionsDisabled","isMoreExpanded","moreExpanded","moreCollapse","toggleMoreExpanded","isMouseOverMore","setIsMouseOverMore","isConfirmOpen","setIsConfirmOpen","onConfirmToggled","PageHeader","subtitle","bulkActions","containerScrollWidth","setContainerScrollWidth","childrenScrollWidth","setChildrenScrollWidth","setAvailableActionSpace","setSize","updateSize","innerWidth","useWindowSize","availableWidth","bulkActionSpace","moreActionSpace","currentAvailableActionSpace","EmptyStation","stationError","minimizedHeader","showNotification","methodName","initializeUi","app","ErrorTypeToStationError","defaultTitle","defaultBody","isStationError","originalError","given","FilterTypes","DateTimeFilter","onSelect","onError","onValidate","customValidate","setErrorMsg","validateAndSet","validationMessage","toISOString","FreeTextFilter","valueLocal","NumericTextFilter","OptionsFilter","SearcheableOptionsFilter","optionsProvider","searchInputPlaceholder","maxItems","getOptions","Filter","onFilterChange","onFilterClicked","setHasError","contentHeight","setContentHeight","stringValue","setStringValue","contentRef","valueRef","_d","onFilterValueChange","Options","SearcheableOptions","renderValue","FreeText","Numeric","Custom","renderFilterContent","Filters","defaultFilters","onFiltersChange","activeFilters","compositeFilters","setCompositeFilters","activeFilterIndex","setActiveFilterIndex","compositeFiltersUpdate","filtersChangedHandler","updateIndex","renderFilter","valueIndex","ListSelectMode","ListCheckBox","isChecked","containerClickEvent","onCheckBoxToggled","ColumnLabel","sortable","columnSortKeys","sortData","onSortChanged","descending","ascending","ListHeader","itemSelected","showItemCheckbox","isCheckboxDisabled","onCheckboxToggled","dateFormatter","ListRow","isTrigger","selectionMode","showActionButton","showCheckMark","onItemClicked","onItemSelected","onTriggered","isRowDisabled","history","useHistory","onTriggeredHandler","observer","disconnect","IntersectionObserver","isIntersecting","observe","onItemClickedHandler","Multi","isLinkable","allColumns","columnsWithoutActions","cssStyles","generateCells","rowData","justifySelf","horizontalColumnAlign","inlineActionMenuData","__assign","SVG","animate","backgroundColor","backgroundOpacity","baseUrl","foregroundColor","foregroundOpacity","gradientRatio","uniqueKey","rtl","speed","fixedId","random","idClip","idGradient","idAria","rtlStyle","keyTimes","aria-labelledby","role","clipPath","stopColor","stopOpacity","attributeName","repeatCount","ContentLoader","ReactContentLoaderFacebook","rx","ContentLoader$1","SingleLineSkeleton","ry","SquareOutlineSkeleton","Loader","showLoader","loadingSkeleton","ListRowLoader","customRowStyles","rowElements","opacity","loaderWidth","getSize","getActionsColumnSizePx","enableActions","enabledActionsCount","actionEnabled","actionsCount","listItems","loadingTriggerOffset","List","isLoading","isError","handleRetry","headerRowActionSize","keyProperty","defaultSortOrder","enableSelectAll","onRequestMoreData","generateItemLink","setListItems","isAllItemsChecked","selectMode","columnSizeDefinition","getColumnsSizeDefinition","itemSelectionHandler","selectedData","headerCheckboxHandler","newListItems","sortChangedHandler","setSort","useSort","Single","itemSelectedHandler","itemsCount","noItemsMessage","BooleanDotRenderer","DateRenderer","createExternalLinkRenderer","resolver","showNewTabIcon","createStateRenderer","titleMapper","TimestampRenderer","_data","storeState","getState","_listCacheClear","__data__","eq_1","_assocIndexOf","eq","_listCacheDelete","assocIndexOf","_listCacheGet","_listCacheHas","_listCacheSet","ListCache","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","_ListCache","_stackClear","_stackDelete","_stackGet","_stackHas","isFunction_1","_coreJsData","maskSrcKey","uid","coreJsData","IE_PROTO","_isMasked","funcToString","_toSource","reIsHostCtor","funcProto","reIsNative","_baseIsNative","isMasked","isFunction","toSource","_getValue","_getNative","baseIsNative","_Map","getNative","_nativeCreate","_hashClear","nativeCreate","_hashDelete","_hashGet","_hashHas","_hashSet","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","_Hash","_mapCacheClear","_isKeyable","_getMapData","isKeyable","_mapCacheDelete","getMapData","_mapCacheGet","_mapCacheHas","_mapCacheSet","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","_MapCache","_stackSet","pairs","LARGE_ARRAY_SIZE","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","_Stack","_arrayEach","iteratee","_baseAssignValue","_assignValue","objValue","baseAssignValue","_copyObject","customizer","isNew","assignValue","_baseTimes","_baseIsArguments","isArguments_1","baseIsArguments","isArray_1","stubFalse_1","freeExports","nodeType","freeModule","Buffer","isBuffer","stubFalse","reIsUint","_isIndex","isLength_1","typedArrayTags","_baseIsTypedArray","isLength","_baseUnary","freeProcess","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","isTypedArray_1","baseUnary","baseIsTypedArray","_arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","baseTimes","isIndex","_isPrototype","Ctor","_overArg","_nativeKeys","overArg","_baseKeys","isPrototype","nativeKeys","isArrayLike_1","keys_1","isArrayLike","arrayLikeKeys","baseKeys","_baseAssign","copyObject","_nativeKeysIn","_baseKeysIn","nativeKeysIn","isProto","keysIn_1","baseKeysIn","_baseAssignIn","keysIn","allocUnsafe","buffer","isDeep","copy","_copyArray","_arrayFilter","predicate","resIndex","stubArray_1","nativeGetSymbols","_getSymbols","arrayFilter","stubArray","_copySymbols","getSymbols","_arrayPush","_getPrototype","_getSymbolsIn","arrayPush","getPrototype","_copySymbolsIn","getSymbolsIn","_baseGetAllKeys","keysFunc","symbolsFunc","_getAllKeys","baseGetAllKeys","_getAllKeysIn","_DataView","_Promise","_Set","_WeakMap","dataViewCtorString","DataView","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","WeakMap","getTag","ctorString","_getTag","_initCloneArray","_Uint8Array","Uint8Array","_cloneArrayBuffer","arrayBuffer","byteLength","_cloneDataView","dataView","cloneArrayBuffer","byteOffset","reFlags","_cloneRegExp","regexp","lastIndex","symbolProto","symbolValueOf","_cloneSymbol","_cloneTypedArray","typedArray","_initCloneByTag","cloneDataView","cloneTypedArray","cloneRegExp","cloneSymbol","objectCreate","_baseCreate","_initCloneObject","baseCreate","_baseIsMap","nodeIsMap","isMap","isMap_1","baseIsMap","_baseIsSet","nodeIsSet","isSet_1","baseIsSet","cloneableTags","_baseClone","baseClone","bitmask","isFlat","isFull","initCloneArray","copyArray","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","baseAssignIn","copySymbols","baseAssign","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","arrayEach","cloneDeep_1","CLONE_DEEP_FLAG","useUpdatingRef","useConnection","dataProvider","explorerRef","setData","setStationMessage","setResultCount","onReloadData","dataRef","dataProviderRef","connection","change","patch","canClose","useImperativeHandle","connectionDisposer","connect","Explorer","filterOptions","defaultFilterValues","stationKey","persistExplorerStates","modalMode","stationMessage","StationMessage","useStationMessage","globalStateOptions","setActiveFilters","sortOrder","setSortOrder","resultCount","setIsLoading","filtered","hasMoreData","pagingInfo","lastAttemptedPagingInfo","sorting","filterValues","loadData","isFirstPage","pagingInformation","cloneDeep","totalCount","filteredCount","useDataProvider","setIsBulkOpen","useListSelectionMode","itemSelection","setItemSelection","itemSelectEventArgs","getBulkActionSelection","payload","resultsTitle","useSubtitle","errAction","errMsg","pageHeaderActionsHandler","reloadData","bulkActionsHandler","isContextAction","isBulkOpen","msg","createInMemoryDataProvider","caseSensitiveSort","filterFunctions","findExact","applyFilter","aValue","bValue","applySort","findAnywhereInString","findAnywhereInStringCaseInsensitive","NavigationExplorer","onCreateAction","calculateNavigateUrl","SelectionExplorer","allowBulkSelect","onSelection","createDateRangeFilterValidators","fromDateIndex","toDateIndex","allValues","createNumberRangeFilterValidators","fromIndex","toIndex","isNull_1","isUndefined_1","reIsDeepProp","reIsPlainProp","_isKey","memoize","memoized","cache","Cache","memoize_1","rePropName","reEscapeChar","_stringToPath","memoizeCapped","quote","subString","_arrayMap","symbolToString","_baseToString","baseToString","arrayMap","toString_1","_castPath","isKey","stringToPath","_toKey","_baseGet","castPath","toKey","_baseSet","nested","_basePickBy","paths","baseGet","baseSet","_baseHasIn","_hasPath","hasFunc","hasIn_1","hasPath","baseHasIn","_basePick","basePickBy","hasIn","spreadableSymbol","isConcatSpreadable","_isFlattenable","_baseFlatten","baseFlatten","depth","isStrict","isFlattenable","flatten_1","_apply","_overRest","otherArgs","constant_1","_baseSetToString","constant","nativeNow","_setToString","lastCalled","stamp","remaining","shortOut","baseSetToString","setToString","overRest","flatten","flatRest","basePick","isPromise","useReactRouterPause","when","handleBeforeUnload","ignoreNextNavigationEvent","cachedNavigation","historyUnblock","unblock","beforeRouteChange","allowNextEvent","enable","pausedLocation","route","clearCache","isPaused","resume","goBack","pathOrLocation","resp","pauseCalled","navigationAPI","pause","isNull","askHandler","updateBlocking","useValueOrOnDemand","didCancel","SaveOnNavigate","isSubmitting","dirty","submitForm","canSubmit","setCanSubmit","navigation","handleNavigationAttempt","FormStation","titleProperty","alwaysShowActionsPanel","actionsWidth","cancelNavigationUrl","initialData","saveData","validationSchema","infoPanel","edgeToEdgeContent","alwaysSubmitBeforeAction","setStationError","isLoadingError","setIsLoadingError","submitResponse","isFormSubmitting","setIsFormSubmitting","onSubmit","formikHelpers","loading","response","setSubmitting","entityNotFound","Formik","initialValues","enableReinitialize","FormStationHeader","Form","getContent","FormStationAction","resetForm","validateForm","updatedActions","Create","onProceed","denyProceeding","proceedLabel","subLabel","pathname","Hub","groupName","group","groupIndex","itemIndex","ImageLoader","imgSrc","imgHeight","imgWidth","fallbackSrc","imageTimeout","onLoad","onImageClick","actualViewBox","srcTimedOut","setSrcTimedOut","fallBack","setFallBack","onLoadHandler","onErrorHandler","objectFit","InfoImage","InfoPanel","Paragraph","Section","validChildren","LandingPageHeader","TileLarge","largeTileColumnSpan","largeTileRowSpan","gridColumn","gridRow","subtitleValue","isSubtitleLoading","TileSmall","smallTileColumnSpan","smallTileRowSpan","LandingPageTiles","gridRowHeight","alignment","largeTiles","smallTiles","small","large","useTiles","nav","Modal","isShown","paddingTop","paddingRight","paddingBottom","paddingLeft","zIndex","onOpen","onBackDropClicked","applyHideStyles","setApplyHideStyles","isFullyOpen","setIsFullyOpen","childCustomStyles","data-test-state","useModal","setIsShown","closeModal","ModalWrapper","innerShown","setInnerShown","openModal","NavigationAwareStation","restrictNavigation","onNavigate","_location","timestampValidator"],"mappings":"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"}
|