intelicoreact 2.0.18 → 2.0.20
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/es/Atomic/FormElements/ActionAlert/ActionAlert.js +44 -0
- package/dist/es/Atomic/FormElements/ActionAlert/ActionAlert.js.map +1 -0
- package/dist/es/Atomic/FormElements/ActionAlert/ActionAlert.styles.css +39 -0
- package/dist/es/Atomic/FormElements/ActionAlert/index.js +7 -0
- package/dist/es/Atomic/FormElements/ActionAlert/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/AdvancedStatus/AdvancedStatus.js +35 -0
- package/dist/es/Atomic/FormElements/AdvancedStatus/AdvancedStatus.js.map +1 -0
- package/dist/es/Atomic/FormElements/AdvancedStatus/AdvancedStatus.styles.css +84 -0
- package/dist/es/Atomic/FormElements/AdvancedStatus/index.js +7 -0
- package/dist/es/Atomic/FormElements/AdvancedStatus/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/Calendar/Calendar.js +154 -0
- package/dist/es/Atomic/FormElements/Calendar/Calendar.js.map +1 -0
- package/dist/es/Atomic/FormElements/Calendar/Calendar.styles.css +142 -0
- package/dist/es/Atomic/FormElements/CheckboxInput/CheckboxInput.js +45 -0
- package/dist/es/Atomic/FormElements/CheckboxInput/CheckboxInput.js.map +1 -0
- package/dist/es/Atomic/FormElements/CheckboxInput/CheckboxInput.styles.css +105 -0
- package/dist/es/Atomic/FormElements/CheckboxInput/index.js +7 -0
- package/dist/es/Atomic/FormElements/CheckboxInput/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/CheckboxesLine/CheckboxesLine.js +32 -0
- package/dist/es/Atomic/FormElements/CheckboxesLine/CheckboxesLine.js.map +1 -0
- package/dist/es/Atomic/FormElements/CheckboxesLine/CheckboxesLine.styles.css +26 -0
- package/dist/es/Atomic/FormElements/CheckboxesLine/index.js +7 -0
- package/dist/es/Atomic/FormElements/CheckboxesLine/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/Datepicker/Datepicker.js +307 -0
- package/dist/es/Atomic/FormElements/Datepicker/Datepicker.js.map +1 -0
- package/dist/es/Atomic/FormElements/Datepicker/Datepicker.styles.css +0 -0
- package/dist/es/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js +95 -0
- package/dist/es/Atomic/FormElements/Datepicker/components/DatepickerCalendar.js.map +1 -0
- package/dist/es/Atomic/FormElements/Dropdown/Dropdown.js +472 -0
- package/dist/es/Atomic/FormElements/Dropdown/Dropdown.js.map +1 -0
- package/dist/es/Atomic/FormElements/Dropdown/Dropdown.styles.css +529 -0
- package/dist/es/Atomic/FormElements/Dropdown/_utils.js +68 -0
- package/dist/es/Atomic/FormElements/Dropdown/_utils.js.map +1 -0
- package/dist/es/Atomic/FormElements/Dropdown/components/DropdownLoader.js +23 -0
- package/dist/es/Atomic/FormElements/Dropdown/components/DropdownLoader.js.map +1 -0
- package/dist/es/Atomic/FormElements/Dropdown/components/DropdownLoader.styles.css +61 -0
- package/dist/es/Atomic/FormElements/Dropdown/index.js +7 -0
- package/dist/es/Atomic/FormElements/Dropdown/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/Dropdown/useDropdown.js +118 -0
- package/dist/es/Atomic/FormElements/Dropdown/useDropdown.js.map +1 -0
- package/dist/es/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.js +373 -0
- package/dist/es/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.js.map +1 -0
- package/dist/es/Atomic/FormElements/DropdownLiveSearch/DropdownLiveSearch.styles.css +411 -0
- package/dist/es/Atomic/FormElements/FileLoader/FileLoader.js +55 -0
- package/dist/es/Atomic/FormElements/FileLoader/FileLoader.js.map +1 -0
- package/dist/es/Atomic/FormElements/FileLoader/FileLoader.styles.css +127 -0
- package/dist/es/Atomic/FormElements/FileLoader/partial/LoadZone.js +86 -0
- package/dist/es/Atomic/FormElements/FileLoader/partial/LoadZone.js.map +1 -0
- package/dist/es/Atomic/FormElements/FileLoader/partial/LoadedContent.js +52 -0
- package/dist/es/Atomic/FormElements/FileLoader/partial/LoadedContent.js.map +1 -0
- package/dist/es/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js +174 -0
- package/dist/es/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.js.map +1 -0
- package/dist/es/Atomic/FormElements/FileLoaderDescription/FileLoaderDescription.styles.css +88 -0
- package/dist/es/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js +137 -0
- package/dist/es/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.js.map +1 -0
- package/dist/es/Atomic/FormElements/FileLoaderLocal/FileLoaderLocal.styles.css +101 -0
- package/dist/es/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js +150 -0
- package/dist/es/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js.map +1 -0
- package/dist/es/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.styles.css +14 -0
- package/dist/es/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.js +75 -0
- package/dist/es/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.js.map +1 -0
- package/dist/es/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN.styles.css +54 -0
- package/dist/es/Atomic/FormElements/FormattedRawSSN/index.js +7 -0
- package/dist/es/Atomic/FormElements/FormattedRawSSN/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/Input/Input.js +119 -0
- package/dist/es/Atomic/FormElements/Input/Input.js.map +1 -0
- package/dist/es/Atomic/FormElements/Input/Input.styles.css +125 -0
- package/dist/es/Atomic/FormElements/Input/hooks/useErrorBlink.js +57 -0
- package/dist/es/Atomic/FormElements/Input/hooks/useErrorBlink.js.map +1 -0
- package/dist/es/Atomic/FormElements/Input/hooks/useInputFocus.js +34 -0
- package/dist/es/Atomic/FormElements/Input/hooks/useInputFocus.js.map +1 -0
- package/dist/es/Atomic/FormElements/Input/hooks/useInputHover.js +16 -0
- package/dist/es/Atomic/FormElements/Input/hooks/useInputHover.js.map +1 -0
- package/dist/es/Atomic/FormElements/Input/hooks/useInputValueProcessing.js +126 -0
- package/dist/es/Atomic/FormElements/Input/hooks/useInputValueProcessing.js.map +1 -0
- package/dist/es/Atomic/FormElements/Input/hooks/useKeyboardHandling.js +32 -0
- package/dist/es/Atomic/FormElements/Input/hooks/useKeyboardHandling.js.map +1 -0
- package/dist/es/Atomic/FormElements/Input/index.js +7 -0
- package/dist/es/Atomic/FormElements/Input/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputCalendar/InputCalendar.js +89 -0
- package/dist/es/Atomic/FormElements/InputCalendar/InputCalendar.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputCalendar/InputCalendar.styles.css +20 -0
- package/dist/es/Atomic/FormElements/InputColor/InputColor.js +52 -0
- package/dist/es/Atomic/FormElements/InputColor/InputColor.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputColor/InputColor.styles.css +17 -0
- package/dist/es/Atomic/FormElements/InputColor/index.js +7 -0
- package/dist/es/Atomic/FormElements/InputColor/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputCurrency/InputCurrency.js +133 -0
- package/dist/es/Atomic/FormElements/InputCurrency/InputCurrency.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputCurrency/InputCurrency.styles.css +13 -0
- package/dist/es/Atomic/FormElements/InputDateRange/InputDateRange.js +215 -0
- package/dist/es/Atomic/FormElements/InputDateRange/InputDateRange.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputDateRange/InputDateRange.styles.css +594 -0
- package/dist/es/Atomic/FormElements/InputDateRange/components/DateInput.js +45 -0
- package/dist/es/Atomic/FormElements/InputDateRange/components/DateInput.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputDateRange/components/Datepicker.js +422 -0
- package/dist/es/Atomic/FormElements/InputDateRange/components/Datepicker.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputDateRange/components/OpenedPart.js +171 -0
- package/dist/es/Atomic/FormElements/InputDateRange/components/OpenedPart.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputDateRange/components/SelectItem.js +22 -0
- package/dist/es/Atomic/FormElements/InputDateRange/components/SelectItem.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputDateRange/dependencies.js +166 -0
- package/dist/es/Atomic/FormElements/InputDateRange/dependencies.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputLink/InputLink.js +64 -0
- package/dist/es/Atomic/FormElements/InputLink/InputLink.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputLink/InputLink.styles.css +46 -0
- package/dist/es/Atomic/FormElements/InputLink/index.js +7 -0
- package/dist/es/Atomic/FormElements/InputLink/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputMask/InputMask.js +7 -0
- package/dist/es/Atomic/FormElements/InputMask/InputMask.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputMask3/InputMask3.js +486 -0
- package/dist/es/Atomic/FormElements/InputMask3/InputMask3.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputMask3/InputMask3.styles.css +133 -0
- package/dist/es/Atomic/FormElements/InputMask3/config.js +18 -0
- package/dist/es/Atomic/FormElements/InputMask3/config.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputMask3/functions.js +43 -0
- package/dist/es/Atomic/FormElements/InputMask3/functions.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputWithAction/InputWithAction.js +74 -0
- package/dist/es/Atomic/FormElements/InputWithAction/InputWithAction.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputWithAction/InputWithAction.styles.css +88 -0
- package/dist/es/Atomic/FormElements/InputWithAction/index.js +7 -0
- package/dist/es/Atomic/FormElements/InputWithAction/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputsRow/InputsRow.js +118 -0
- package/dist/es/Atomic/FormElements/InputsRow/InputsRow.js.map +1 -0
- package/dist/es/Atomic/FormElements/InputsRow/InputsRow.styles.css +32 -0
- package/dist/es/Atomic/FormElements/InputsRow/index.js +7 -0
- package/dist/es/Atomic/FormElements/InputsRow/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/Label/Label.js +73 -0
- package/dist/es/Atomic/FormElements/Label/Label.js.map +1 -0
- package/dist/es/Atomic/FormElements/Label/Label.styles.css +30 -0
- package/dist/es/Atomic/FormElements/Label/index.js +7 -0
- package/dist/es/Atomic/FormElements/Label/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/MobileCalendar/MobileCalendar.js +339 -0
- package/dist/es/Atomic/FormElements/MobileCalendar/MobileCalendar.js.map +1 -0
- package/dist/es/Atomic/FormElements/MobileCalendar/MobileCalendar.styles.css +74 -0
- package/dist/es/Atomic/FormElements/MultiSelect/MultiSelect.js +40 -0
- package/dist/es/Atomic/FormElements/MultiSelect/MultiSelect.js.map +1 -0
- package/dist/es/Atomic/FormElements/MultiSelect/MultiSelect.styles.css +14 -0
- package/dist/es/Atomic/FormElements/NumericInput/NumericInput.js +204 -0
- package/dist/es/Atomic/FormElements/NumericInput/NumericInput.js.map +1 -0
- package/dist/es/Atomic/FormElements/NumericInput/NumericInput.styles.css +129 -0
- package/dist/es/Atomic/FormElements/RadioGroup/RadioGroup.js +44 -0
- package/dist/es/Atomic/FormElements/RadioGroup/RadioGroup.js.map +1 -0
- package/dist/es/Atomic/FormElements/RadioGroup/RadioGroup.styles.css +20 -0
- package/dist/es/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js +57 -0
- package/dist/es/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js.map +1 -0
- package/dist/es/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.styles.css +23 -0
- package/dist/es/Atomic/FormElements/RadioInput/RadioInput.js +35 -0
- package/dist/es/Atomic/FormElements/RadioInput/RadioInput.js.map +1 -0
- package/dist/es/Atomic/FormElements/RadioInput/RadioInput.styles.css +70 -0
- package/dist/es/Atomic/FormElements/RadioInput/index.js +7 -0
- package/dist/es/Atomic/FormElements/RadioInput/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js +42 -0
- package/dist/es/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js.map +1 -0
- package/dist/es/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.styles.css +123 -0
- package/dist/es/Atomic/FormElements/RangeCalendar/RangeCalendar.js +98 -0
- package/dist/es/Atomic/FormElements/RangeCalendar/RangeCalendar.js.map +1 -0
- package/dist/es/Atomic/FormElements/RangeCalendar/RangeCalendar.styles.css +103 -0
- package/dist/es/Atomic/FormElements/RangeInputs/RangeInputs.js +128 -0
- package/dist/es/Atomic/FormElements/RangeInputs/RangeInputs.js.map +1 -0
- package/dist/es/Atomic/FormElements/RangeInputs/RangeInputs.styles.css +50 -0
- package/dist/es/Atomic/FormElements/RangeInputs/index.js +7 -0
- package/dist/es/Atomic/FormElements/RangeInputs/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/RangeList/RangeList.js +147 -0
- package/dist/es/Atomic/FormElements/RangeList/RangeList.js.map +1 -0
- package/dist/es/Atomic/FormElements/RangeList/RangeList.styles.css +143 -0
- package/dist/es/Atomic/FormElements/RangeList/index.js +7 -0
- package/dist/es/Atomic/FormElements/RangeList/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/RangeList/partial/RangeListRow.js +40 -0
- package/dist/es/Atomic/FormElements/RangeList/partial/RangeListRow.js.map +1 -0
- package/dist/es/Atomic/FormElements/RangeSlider/RangeSlider.js +342 -0
- package/dist/es/Atomic/FormElements/RangeSlider/RangeSlider.js.map +1 -0
- package/dist/es/Atomic/FormElements/RangeSlider/RangeSlider.styles.css +134 -0
- package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.interface.js +23 -0
- package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.interface.js.map +1 -0
- package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.js +590 -0
- package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.js.map +1 -0
- package/dist/es/Atomic/FormElements/RangeSlider2/RangeSlider2.styles.css +360 -0
- package/dist/es/Atomic/FormElements/SwitchableRow/SwitchableRow.js +29 -0
- package/dist/es/Atomic/FormElements/SwitchableRow/SwitchableRow.js.map +1 -0
- package/dist/es/Atomic/FormElements/SwitchableRow/SwitchableRow.styles.css +14 -0
- package/dist/es/Atomic/FormElements/Switcher/Switcher.js +36 -0
- package/dist/es/Atomic/FormElements/Switcher/Switcher.js.map +1 -0
- package/dist/es/Atomic/FormElements/Switcher/Switcher.styles.css +83 -0
- package/dist/es/Atomic/FormElements/Switcher/index.js +7 -0
- package/dist/es/Atomic/FormElements/Switcher/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js +36 -0
- package/dist/es/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js.map +1 -0
- package/dist/es/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.styles.css +21 -0
- package/dist/es/Atomic/FormElements/SwitcherHide/SwitcherHide.js +31 -0
- package/dist/es/Atomic/FormElements/SwitcherHide/SwitcherHide.js.map +1 -0
- package/dist/es/Atomic/FormElements/SwitcherHide/index.js +7 -0
- package/dist/es/Atomic/FormElements/SwitcherHide/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/SwitcherRadio/SwitcherRadio.js +43 -0
- package/dist/es/Atomic/FormElements/SwitcherRadio/SwitcherRadio.js.map +1 -0
- package/dist/es/Atomic/FormElements/SwitcherRadio/SwitcherRadio.styles.css +22 -0
- package/dist/es/Atomic/FormElements/SwitcherRadio/index.js +7 -0
- package/dist/es/Atomic/FormElements/SwitcherRadio/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/SwitcherRange/SwitcherRange.js +33 -0
- package/dist/es/Atomic/FormElements/SwitcherRange/SwitcherRange.js.map +1 -0
- package/dist/es/Atomic/FormElements/SwitcherRange/index.js +7 -0
- package/dist/es/Atomic/FormElements/SwitcherRange/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js +56 -0
- package/dist/es/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js.map +1 -0
- package/dist/es/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js +99 -0
- package/dist/es/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js.map +1 -0
- package/dist/es/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.styles.css +55 -0
- package/dist/es/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js +49 -0
- package/dist/es/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js.map +1 -0
- package/dist/es/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.styles.css +38 -0
- package/dist/es/Atomic/FormElements/TagListToDropdown/TagListToDropdown.js +82 -0
- package/dist/es/Atomic/FormElements/TagListToDropdown/TagListToDropdown.js.map +1 -0
- package/dist/es/Atomic/FormElements/TagsDropdown/TagsDropdown.js +800 -0
- package/dist/es/Atomic/FormElements/TagsDropdown/TagsDropdown.js.map +1 -0
- package/dist/es/Atomic/FormElements/TagsDropdown/TagsDropdown.styles.css +707 -0
- package/dist/es/Atomic/FormElements/Text/Text.js +67 -0
- package/dist/es/Atomic/FormElements/Text/Text.js.map +1 -0
- package/dist/es/Atomic/FormElements/Text/Text.styles.css +12 -0
- package/dist/es/Atomic/FormElements/Text/index.js +7 -0
- package/dist/es/Atomic/FormElements/Text/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/TextSwitcher/TextSwitcher.js +35 -0
- package/dist/es/Atomic/FormElements/TextSwitcher/TextSwitcher.js.map +1 -0
- package/dist/es/Atomic/FormElements/TextSwitcher/TextSwitcher.styles.css +84 -0
- package/dist/es/Atomic/FormElements/Textarea/Textarea.js +73 -0
- package/dist/es/Atomic/FormElements/Textarea/Textarea.js.map +1 -0
- package/dist/es/Atomic/FormElements/Textarea/Textarea.styles.css +102 -0
- package/dist/es/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +124 -0
- package/dist/es/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js.map +1 -0
- package/dist/es/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.styles.css +46 -0
- package/dist/es/Atomic/FormElements/TieredCheckboxes/index.js +7 -0
- package/dist/es/Atomic/FormElements/TieredCheckboxes/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js +36 -0
- package/dist/es/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js.map +1 -0
- package/dist/es/Atomic/FormElements/TimeRange/TimeRange.js +55 -0
- package/dist/es/Atomic/FormElements/TimeRange/TimeRange.js.map +1 -0
- package/dist/es/Atomic/FormElements/TimeRange/TimeRange.styles.css +18 -0
- package/dist/es/Atomic/FormElements/TimeRange/index.js +7 -0
- package/dist/es/Atomic/FormElements/TimeRange/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/UserContacts/UserContacts.js +115 -0
- package/dist/es/Atomic/FormElements/UserContacts/UserContacts.js.map +1 -0
- package/dist/es/Atomic/FormElements/UserContacts/UserContacts.styles.css +15 -0
- package/dist/es/Atomic/FormElements/UserContacts/index.js +7 -0
- package/dist/es/Atomic/FormElements/UserContacts/index.js.map +1 -0
- package/dist/es/Atomic/FormElements/VariantsListRadio/VariantsListRadio.js +52 -0
- package/dist/es/Atomic/FormElements/VariantsListRadio/VariantsListRadio.js.map +1 -0
- package/dist/es/Atomic/FormElements/VariantsListRadio/VariantsListRadio.styles.css +213 -0
- package/dist/es/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.js +61 -0
- package/dist/es/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.js.map +1 -0
- package/dist/es/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.js +62 -0
- package/dist/es/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.js.map +1 -0
- package/dist/es/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.styles.css +70 -0
- package/dist/es/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.js +82 -0
- package/dist/es/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.js.map +1 -0
- package/dist/es/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.styles.css +70 -0
- package/dist/es/Atomic/Layout/Header/Header.js +87 -0
- package/dist/es/Atomic/Layout/Header/Header.js.map +1 -0
- package/dist/es/Atomic/Layout/Header/Header.styles.css +82 -0
- package/dist/es/Atomic/Layout/MainMenu/MainMenu.js +134 -0
- package/dist/es/Atomic/Layout/MainMenu/MainMenu.js.map +1 -0
- package/dist/es/Atomic/Layout/MainMenu/MainMenu.styles.css +205 -0
- package/dist/es/Atomic/Layout/Spinner/Spinner.js +32 -0
- package/dist/es/Atomic/Layout/Spinner/Spinner.js.map +1 -0
- package/dist/es/Atomic/Layout/Spinner/Spinner.styles.css +82 -0
- package/dist/es/Atomic/Layout/Spinner/index.js +7 -0
- package/dist/es/Atomic/Layout/Spinner/index.js.map +1 -0
- package/dist/es/Atomic/UI/Accordion/Accordion.js +48 -0
- package/dist/es/Atomic/UI/Accordion/Accordion.js.map +1 -0
- package/dist/es/Atomic/UI/Accordion/Accordion.styles.css +133 -0
- package/dist/es/Atomic/UI/Accordion/AccordionItem.js +110 -0
- package/dist/es/Atomic/UI/Accordion/AccordionItem.js.map +1 -0
- package/dist/es/Atomic/UI/Accordion/index.js +7 -0
- package/dist/es/Atomic/UI/Accordion/index.js.map +1 -0
- package/dist/es/Atomic/UI/AccordionTable/AccordionTable.js +167 -0
- package/dist/es/Atomic/UI/AccordionTable/AccordionTable.js.map +1 -0
- package/dist/es/Atomic/UI/AccordionTable/AccordionTable.styles.css +228 -0
- package/dist/es/Atomic/UI/AccordionText/AccordionText.js +47 -0
- package/dist/es/Atomic/UI/AccordionText/AccordionText.js.map +1 -0
- package/dist/es/Atomic/UI/AccordionText/AccordionText.styles.css +48 -0
- package/dist/es/Atomic/UI/AdvancedTag/AdvTag.js +148 -0
- package/dist/es/Atomic/UI/AdvancedTag/AdvTag.js.map +1 -0
- package/dist/es/Atomic/UI/AdvancedTag/AdvancedTags.js +40 -0
- package/dist/es/Atomic/UI/AdvancedTag/AdvancedTags.js.map +1 -0
- package/dist/es/Atomic/UI/AdvancedTag/AdvancedTags.styles.css +106 -0
- package/dist/es/Atomic/UI/AdvancedTag/index.js +8 -0
- package/dist/es/Atomic/UI/AdvancedTag/index.js.map +1 -0
- package/dist/es/Atomic/UI/Alert/Alert.js +54 -0
- package/dist/es/Atomic/UI/Alert/Alert.js.map +1 -0
- package/dist/es/Atomic/UI/Alert/Alert.styles.css +65 -0
- package/dist/es/Atomic/UI/Alert/index.js +7 -0
- package/dist/es/Atomic/UI/Alert/index.js.map +1 -0
- package/dist/es/Atomic/UI/Arrow/Arrow.js +107 -0
- package/dist/es/Atomic/UI/Arrow/Arrow.js.map +1 -0
- package/dist/es/Atomic/UI/Arrow/Arrow.styles.css +14 -0
- package/dist/es/Atomic/UI/Box/Box.js +33 -0
- package/dist/es/Atomic/UI/Box/Box.js.map +1 -0
- package/dist/es/Atomic/UI/Box/Box.styles.css +62 -0
- package/dist/es/Atomic/UI/Button/Button.js +35 -0
- package/dist/es/Atomic/UI/Button/Button.js.map +1 -0
- package/dist/es/Atomic/UI/Button/Button.styles.css +124 -0
- package/dist/es/Atomic/UI/ButtonsBar/ButtonsBar.js +49 -0
- package/dist/es/Atomic/UI/ButtonsBar/ButtonsBar.js.map +1 -0
- package/dist/es/Atomic/UI/ButtonsBar/ButtonsBar.styles.css +7 -0
- package/dist/es/Atomic/UI/ButtonsBar/index.js +7 -0
- package/dist/es/Atomic/UI/ButtonsBar/index.js.map +1 -0
- package/dist/es/Atomic/UI/Chart/Chart.js +96 -0
- package/dist/es/Atomic/UI/Chart/Chart.js.map +1 -0
- package/dist/es/Atomic/UI/Chart/Chart.styles.css +45 -0
- package/dist/es/Atomic/UI/Chart/index.js +7 -0
- package/dist/es/Atomic/UI/Chart/index.js.map +1 -0
- package/dist/es/Atomic/UI/Chart/partial/Chart.constants.js +89 -0
- package/dist/es/Atomic/UI/Chart/partial/Chart.constants.js.map +1 -0
- package/dist/es/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js +80 -0
- package/dist/es/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js.map +1 -0
- package/dist/es/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.styles.css +16 -0
- package/dist/es/Atomic/UI/Chart/partial/datasetSetters.js +78 -0
- package/dist/es/Atomic/UI/Chart/partial/datasetSetters.js.map +1 -0
- package/dist/es/Atomic/UI/Chart/partial/optionsConstructor.js +259 -0
- package/dist/es/Atomic/UI/Chart/partial/optionsConstructor.js.map +1 -0
- package/dist/es/Atomic/UI/Chart/partial/optionsSetters.js +35 -0
- package/dist/es/Atomic/UI/Chart/partial/optionsSetters.js.map +1 -0
- package/dist/es/Atomic/UI/Chart/partial/utils.js +37 -0
- package/dist/es/Atomic/UI/Chart/partial/utils.js.map +1 -0
- package/dist/es/Atomic/UI/CircleProgressBar/CircleProgressBar.js +85 -0
- package/dist/es/Atomic/UI/CircleProgressBar/CircleProgressBar.js.map +1 -0
- package/dist/es/Atomic/UI/CircleProgressBar/CircleProgressBar.styles.css +31 -0
- package/dist/es/Atomic/UI/DateTime/DateTime.js +45 -0
- package/dist/es/Atomic/UI/DateTime/DateTime.js.map +1 -0
- package/dist/es/Atomic/UI/DateTime/DateTime.styles.css +33 -0
- package/dist/es/Atomic/UI/DebugContainer/DebugContainer.js +45 -0
- package/dist/es/Atomic/UI/DebugContainer/DebugContainer.js.map +1 -0
- package/dist/es/Atomic/UI/DebugContainer/DebugContainer.styles.css +32 -0
- package/dist/es/Atomic/UI/DebugContainer/useDebugContainer.js +16 -0
- package/dist/es/Atomic/UI/DebugContainer/useDebugContainer.js.map +1 -0
- package/dist/es/Atomic/UI/DoubleString/DoubleString.js +77 -0
- package/dist/es/Atomic/UI/DoubleString/DoubleString.js.map +1 -0
- package/dist/es/Atomic/UI/DoubleString/DoubleString.styles.css +42 -0
- package/dist/es/Atomic/UI/DoubleString/index.js +7 -0
- package/dist/es/Atomic/UI/DoubleString/index.js.map +1 -0
- package/dist/es/Atomic/UI/Hint/Hint.js +216 -0
- package/dist/es/Atomic/UI/Hint/Hint.js.map +1 -0
- package/dist/es/Atomic/UI/Hint/Hint.styles.css +107 -0
- package/dist/es/Atomic/UI/Hint/index.js +7 -0
- package/dist/es/Atomic/UI/Hint/index.js.map +1 -0
- package/dist/es/Atomic/UI/Hint/partials/_constants.js +11 -0
- package/dist/es/Atomic/UI/Hint/partials/_constants.js.map +1 -0
- package/dist/es/Atomic/UI/Hint/partials/_utils.js +35 -0
- package/dist/es/Atomic/UI/Hint/partials/_utils.js.map +1 -0
- package/dist/es/Atomic/UI/Modal/Modal.js +178 -0
- package/dist/es/Atomic/UI/Modal/Modal.js.map +1 -0
- package/dist/es/Atomic/UI/Modal/Modal.styles.css +337 -0
- package/dist/es/Atomic/UI/Modal/ModalHOC.js +64 -0
- package/dist/es/Atomic/UI/Modal/ModalHOC.js.map +1 -0
- package/dist/es/Atomic/UI/Modal/ModalMobile.styles.css +60 -0
- package/dist/es/Atomic/UI/Modal/index.js +13 -0
- package/dist/es/Atomic/UI/Modal/index.js.map +1 -0
- package/dist/es/Atomic/UI/Modal/partials/ModalFooter.js +19 -0
- package/dist/es/Atomic/UI/Modal/partials/ModalFooter.js.map +1 -0
- package/dist/es/Atomic/UI/Modal/partials/ModalTitle.js +43 -0
- package/dist/es/Atomic/UI/Modal/partials/ModalTitle.js.map +1 -0
- package/dist/es/Atomic/UI/Modal/partials/_constants.js +26 -0
- package/dist/es/Atomic/UI/Modal/partials/_constants.js.map +1 -0
- package/dist/es/Atomic/UI/Modal/partials/_utils.js +45 -0
- package/dist/es/Atomic/UI/Modal/partials/_utils.js.map +1 -0
- package/dist/es/Atomic/UI/Modal/partials/useMobileModal.js +146 -0
- package/dist/es/Atomic/UI/Modal/partials/useMobileModal.js.map +1 -0
- package/dist/es/Atomic/UI/MonoAccordion/MonoAccordion.js +59 -0
- package/dist/es/Atomic/UI/MonoAccordion/MonoAccordion.js.map +1 -0
- package/dist/es/Atomic/UI/MonoAccordion/MonoAccordion.styles.css +110 -0
- package/dist/es/Atomic/UI/MonoAccordion/index.js +7 -0
- package/dist/es/Atomic/UI/MonoAccordion/index.js.map +1 -0
- package/dist/es/Atomic/UI/NavLine/NavLine.js +209 -0
- package/dist/es/Atomic/UI/NavLine/NavLine.js.map +1 -0
- package/dist/es/Atomic/UI/NavLine/NavLine.styles.css +187 -0
- package/dist/es/Atomic/UI/NavLine/index.js +7 -0
- package/dist/es/Atomic/UI/NavLine/index.js.map +1 -0
- package/dist/es/Atomic/UI/PageTitle/PageTitle.js +49 -0
- package/dist/es/Atomic/UI/PageTitle/PageTitle.js.map +1 -0
- package/dist/es/Atomic/UI/PageTitle/PageTitle.styles.css +89 -0
- package/dist/es/Atomic/UI/PageTitle/index.js +7 -0
- package/dist/es/Atomic/UI/PageTitle/index.js.map +1 -0
- package/dist/es/Atomic/UI/PieChart/PieChart.js +41 -0
- package/dist/es/Atomic/UI/PieChart/PieChart.js.map +1 -0
- package/dist/es/Atomic/UI/PieChart/PieChart.styles.css +44 -0
- package/dist/es/Atomic/UI/Price/Price.js +20 -0
- package/dist/es/Atomic/UI/Price/Price.js.map +1 -0
- package/dist/es/Atomic/UI/Price/index.js +7 -0
- package/dist/es/Atomic/UI/Price/index.js.map +1 -0
- package/dist/es/Atomic/UI/PriceRange/PriceRange.js +33 -0
- package/dist/es/Atomic/UI/PriceRange/PriceRange.js.map +1 -0
- package/dist/es/Atomic/UI/PriceRange/index.js +7 -0
- package/dist/es/Atomic/UI/PriceRange/index.js.map +1 -0
- package/dist/es/Atomic/UI/ProgressLine/ProgressLine.js +74 -0
- package/dist/es/Atomic/UI/ProgressLine/ProgressLine.js.map +1 -0
- package/dist/es/Atomic/UI/ProgressLine/ProgressLine.styles.css +243 -0
- package/dist/es/Atomic/UI/ProgressLine/index.js +7 -0
- package/dist/es/Atomic/UI/ProgressLine/index.js.map +1 -0
- package/dist/es/Atomic/UI/Status/Status.js +48 -0
- package/dist/es/Atomic/UI/Status/Status.js.map +1 -0
- package/dist/es/Atomic/UI/Status/Status.styles.css +98 -0
- package/dist/es/Atomic/UI/Status/index.js +7 -0
- package/dist/es/Atomic/UI/Status/index.js.map +1 -0
- package/dist/es/Atomic/UI/Table/Partials/TdCell.js +67 -0
- package/dist/es/Atomic/UI/Table/Partials/TdCell.js.map +1 -0
- package/dist/es/Atomic/UI/Table/Partials/TdHeader.js +43 -0
- package/dist/es/Atomic/UI/Table/Partials/TdHeader.js.map +1 -0
- package/dist/es/Atomic/UI/Table/Partials/TdRow.js +56 -0
- package/dist/es/Atomic/UI/Table/Partials/TdRow.js.map +1 -0
- package/dist/es/Atomic/UI/Table/Table.js +36 -0
- package/dist/es/Atomic/UI/Table/Table.js.map +1 -0
- package/dist/es/Atomic/UI/Table/Table.styles.css +63 -0
- package/dist/es/Atomic/UI/Table/TdTypes/TdActions.js +56 -0
- package/dist/es/Atomic/UI/Table/TdTypes/TdActions.js.map +1 -0
- package/dist/es/Atomic/UI/Table/TdTypes/TdPriority.js +29 -0
- package/dist/es/Atomic/UI/Table/TdTypes/TdPriority.js.map +1 -0
- package/dist/es/Atomic/UI/Table/TdTypes/TdRange.js +14 -0
- package/dist/es/Atomic/UI/Table/TdTypes/TdRange.js.map +1 -0
- package/dist/es/Atomic/UI/Table/TdTypes/TdTypes.styles.css +29 -0
- package/dist/es/Atomic/UI/Table/TdTypes/TdWeight.js +43 -0
- package/dist/es/Atomic/UI/Table/TdTypes/TdWeight.js.map +1 -0
- package/dist/es/Atomic/UI/Tag/Tag.js +110 -0
- package/dist/es/Atomic/UI/Tag/Tag.js.map +1 -0
- package/dist/es/Atomic/UI/Tag/Tag.styles.css +148 -0
- package/dist/es/Atomic/UI/Tag/index.js +7 -0
- package/dist/es/Atomic/UI/Tag/index.js.map +1 -0
- package/dist/es/Atomic/UI/TagList/TagList.js +152 -0
- package/dist/es/Atomic/UI/TagList/TagList.js.map +1 -0
- package/dist/es/Atomic/UI/TagList/TagList.styles.css +59 -0
- package/dist/es/Atomic/UI/UserBox/UserBox.js +49 -0
- package/dist/es/Atomic/UI/UserBox/UserBox.js.map +1 -0
- package/dist/es/Atomic/UI/UserBox/UserBox.styles.css +64 -0
- package/dist/es/Atomic/UI/UserBox/index.js +7 -0
- package/dist/es/Atomic/UI/UserBox/index.js.map +1 -0
- package/dist/es/Atomic/UI/WizardStepper/constructor.js +12 -0
- package/dist/es/Atomic/UI/WizardStepper/constructor.js.map +1 -0
- package/dist/es/Atomic/UI/WizardStepper/index.js +7 -0
- package/dist/es/Atomic/UI/WizardStepper/index.js.map +1 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.js +52 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.js.map +1 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StateIcon/StateIcon.styles.css +23 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StateIcon/index.js +7 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StateIcon/index.js.map +1 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StepRow/StepRow.js +67 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StepRow/StepRow.js.map +1 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StepRow/StepRow.styles.css +60 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.js +43 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.js.map +1 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StepWrapper/StepWrapper.styles.css +64 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StepWrapper/index.js +7 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/StepWrapper/index.js.map +1 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/icons.js +124 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/icons.js.map +1 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/index.js +7 -0
- package/dist/es/Atomic/UI/WizardStepper/ui/index.js.map +1 -0
- package/dist/es/Classes/AbortableFetch.js +271 -0
- package/dist/es/Classes/AbortableFetch.js.map +1 -0
- package/dist/es/Classes/AnimatedHandler.js +27 -0
- package/dist/es/Classes/AnimatedHandler.js.map +1 -0
- package/dist/es/Classes/RESTAPI/index.js +112 -0
- package/dist/es/Classes/RESTAPI/index.js.map +1 -0
- package/dist/es/Classes/RESTAPI/partials/AbortableFetch.js +330 -0
- package/dist/es/Classes/RESTAPI/partials/AbortableFetch.js.map +1 -0
- package/dist/es/Classes/RESTAPI/partials/ApiBase.js +38 -0
- package/dist/es/Classes/RESTAPI/partials/ApiBase.js.map +1 -0
- package/dist/es/Classes/RESTAPI/partials/ApiRequestCreators.js +151 -0
- package/dist/es/Classes/RESTAPI/partials/ApiRequestCreators.js.map +1 -0
- package/dist/es/Classes/RESTAPI/partials/ApiUtils.js +142 -0
- package/dist/es/Classes/RESTAPI/partials/ApiUtils.js.map +1 -0
- package/dist/es/Classes/RESTAPI/partials/CredentialsProcessing.js +212 -0
- package/dist/es/Classes/RESTAPI/partials/CredentialsProcessing.js.map +1 -0
- package/dist/es/Classes/RESTAPI/partials/Utils.js +70 -0
- package/dist/es/Classes/RESTAPI/partials/Utils.js.map +1 -0
- package/dist/es/Classes/RESTAPI/partials/_utils.js +144 -0
- package/dist/es/Classes/RESTAPI/partials/_utils.js.map +1 -0
- package/dist/es/Classes/RESTAPI/partials/sse.js +127 -0
- package/dist/es/Classes/RESTAPI/partials/sse.js.map +1 -0
- package/dist/es/Constants/index.constants.js +78 -0
- package/dist/es/Constants/index.constants.js.map +1 -0
- package/dist/es/Functions/Portal.js +21 -0
- package/dist/es/Functions/Portal.js.map +1 -0
- package/dist/es/Functions/customEventListener.js +67 -0
- package/dist/es/Functions/customEventListener.js.map +1 -0
- package/dist/es/Functions/dateTime.js +113 -0
- package/dist/es/Functions/dateTime.js.map +1 -0
- package/dist/es/Functions/fieldValueFormatters.js +193 -0
- package/dist/es/Functions/fieldValueFormatters.js.map +1 -0
- package/dist/es/Functions/guards/assertions.js +265 -0
- package/dist/es/Functions/guards/assertions.js.map +1 -0
- package/dist/es/Functions/guards/safeValue.js +66 -0
- package/dist/es/Functions/guards/safeValue.js.map +1 -0
- package/dist/es/Functions/guards/typeGuards.js +397 -0
- package/dist/es/Functions/guards/typeGuards.js.map +1 -0
- package/dist/es/Functions/hooks/useFormFieldsChangesManager.js +84 -0
- package/dist/es/Functions/hooks/useFormFieldsChangesManager.js.map +1 -0
- package/dist/es/Functions/locale/createTranslator.js +23 -0
- package/dist/es/Functions/locale/createTranslator.js.map +1 -0
- package/dist/es/Functions/operations.js +88 -0
- package/dist/es/Functions/operations.js.map +1 -0
- package/dist/es/Functions/presets/inputMaskPresets.js +82 -0
- package/dist/es/Functions/presets/inputMaskPresets.js.map +1 -0
- package/dist/es/Functions/presets/inputPresets.js +50 -0
- package/dist/es/Functions/presets/inputPresets.js.map +1 -0
- package/dist/es/Functions/presets/mobileKeyboardTypesPresets.js +11 -0
- package/dist/es/Functions/presets/mobileKeyboardTypesPresets.js.map +1 -0
- package/dist/es/Functions/sdk/runtime-sdk/client.js +161 -0
- package/dist/es/Functions/sdk/runtime-sdk/client.js.map +1 -0
- package/dist/es/Functions/sdk/runtime-sdk/config.js +77 -0
- package/dist/es/Functions/sdk/runtime-sdk/config.js.map +1 -0
- package/dist/es/Functions/sdk/runtime-sdk/queue.js +131 -0
- package/dist/es/Functions/sdk/runtime-sdk/queue.js.map +1 -0
- package/dist/es/Functions/sdk/runtime-sdk/transport.js +114 -0
- package/dist/es/Functions/sdk/runtime-sdk/transport.js.map +1 -0
- package/dist/es/Functions/useBodyScrollLock.js +15 -0
- package/dist/es/Functions/useBodyScrollLock.js.map +1 -0
- package/dist/es/Functions/useClickOutside.js +17 -0
- package/dist/es/Functions/useClickOutside.js.map +1 -0
- package/dist/es/Functions/useDebounce.js +18 -0
- package/dist/es/Functions/useDebounce.js.map +1 -0
- package/dist/es/Functions/useFieldFocus.js +62 -0
- package/dist/es/Functions/useFieldFocus.js.map +1 -0
- package/dist/es/Functions/useFormTools/form-drivers/ArrayWithObjects.js +29 -0
- package/dist/es/Functions/useFormTools/form-drivers/ArrayWithObjects.js.map +1 -0
- package/dist/es/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +95 -0
- package/dist/es/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js.map +1 -0
- package/dist/es/Functions/useFormTools/form-drivers/ObjectWithNamedKeyObjects.js +49 -0
- package/dist/es/Functions/useFormTools/form-drivers/ObjectWithNamedKeyObjects.js.map +1 -0
- package/dist/es/Functions/useFormTools/functions/General.js +87 -0
- package/dist/es/Functions/useFormTools/functions/General.js.map +1 -0
- package/dist/es/Functions/useFormTools/functions/RenderFields.js +70 -0
- package/dist/es/Functions/useFormTools/functions/RenderFields.js.map +1 -0
- package/dist/es/Functions/useFormTools/index.js +464 -0
- package/dist/es/Functions/useFormTools/index.js.map +1 -0
- package/dist/es/Functions/useInputHighlightError.js +50 -0
- package/dist/es/Functions/useInputHighlightError.js.map +1 -0
- package/dist/es/Functions/useIsMobile/index.js +7 -0
- package/dist/es/Functions/useIsMobile/index.js.map +1 -0
- package/dist/es/Functions/useIsMobile/useIsMobile.js +32 -0
- package/dist/es/Functions/useIsMobile/useIsMobile.js.map +1 -0
- package/dist/es/Functions/useKeyPress/useHandleKeyPress.js +38 -0
- package/dist/es/Functions/useKeyPress/useHandleKeyPress.js.map +1 -0
- package/dist/es/Functions/useKeyPress/useKeyPress.js +54 -0
- package/dist/es/Functions/useKeyPress/useKeyPress.js.map +1 -0
- package/dist/es/Functions/useLocalStorage.js +28 -0
- package/dist/es/Functions/useLocalStorage.js.map +1 -0
- package/dist/es/Functions/useLocationParams.js +27 -0
- package/dist/es/Functions/useLocationParams.js.map +1 -0
- package/dist/es/Functions/useMediaQuery.js +14 -0
- package/dist/es/Functions/useMediaQuery.js.map +1 -0
- package/dist/es/Functions/useMetaInfo.js +33 -0
- package/dist/es/Functions/useMetaInfo.js.map +1 -0
- package/dist/es/Functions/useMouseUpOutside.js +17 -0
- package/dist/es/Functions/useMouseUpOutside.js.map +1 -0
- package/dist/es/Functions/useOnlineStatus.js +23 -0
- package/dist/es/Functions/useOnlineStatus.js.map +1 -0
- package/dist/es/Functions/usePasswordChecker.js +116 -0
- package/dist/es/Functions/usePasswordChecker.js.map +1 -0
- package/dist/es/Functions/usePrevious.js +13 -0
- package/dist/es/Functions/usePrevious.js.map +1 -0
- package/dist/es/Functions/useResize.js +24 -0
- package/dist/es/Functions/useResize.js.map +1 -0
- package/dist/es/Functions/useScrollTo.js +17 -0
- package/dist/es/Functions/useScrollTo.js.map +1 -0
- package/dist/es/Functions/useToggle.js +15 -0
- package/dist/es/Functions/useToggle.js.map +1 -0
- package/dist/es/Functions/utils/disableDefaultBehavior/disableDefaultBehavior.js +9 -0
- package/dist/es/Functions/utils/disableDefaultBehavior/disableDefaultBehavior.js.map +1 -0
- package/dist/es/Functions/utils/getLimitedMask/getLimitedMask.js +39 -0
- package/dist/es/Functions/utils/getLimitedMask/getLimitedMask.js.map +1 -0
- package/dist/es/Functions/utils.js +288 -0
- package/dist/es/Functions/utils.js.map +1 -0
- package/dist/es/Langs.js +166 -0
- package/dist/es/Langs.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/AffiliateNetworks.js +33 -0
- package/dist/es/Molecular/CustomIcons/components/AffiliateNetworks.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/AlertCircle.js +30 -0
- package/dist/es/Molecular/CustomIcons/components/AlertCircle.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/AppStore.js +34 -0
- package/dist/es/Molecular/CustomIcons/components/AppStore.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Arrow.js +43 -0
- package/dist/es/Molecular/CustomIcons/components/Arrow.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/ArrowDown.js +21 -0
- package/dist/es/Molecular/CustomIcons/components/ArrowDown.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/ArrowLeft.js +21 -0
- package/dist/es/Molecular/CustomIcons/components/ArrowLeft.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/ArrowRight.js +21 -0
- package/dist/es/Molecular/CustomIcons/components/ArrowRight.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/ArrowUp.js +21 -0
- package/dist/es/Molecular/CustomIcons/components/ArrowUp.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Bell.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/Bell.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Button.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/Button.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Campaigns.js +20 -0
- package/dist/es/Molecular/CustomIcons/components/Campaigns.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Check.js +15 -0
- package/dist/es/Molecular/CustomIcons/components/Check.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Check2.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/Check2.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/ChevronDown.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/ChevronDown.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/ChevronDownDisabled.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/ChevronDownDisabled.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/ChevronLeft.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/ChevronLeft.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/ChevronRight.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/ChevronRight.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/ChevronUp.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/ChevronUp.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/ChevronUpDown.js +33 -0
- package/dist/es/Molecular/CustomIcons/components/ChevronUpDown.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Close.js +20 -0
- package/dist/es/Molecular/CustomIcons/components/Close.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/ColumnsOrder.js +53 -0
- package/dist/es/Molecular/CustomIcons/components/ColumnsOrder.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Delete.js +20 -0
- package/dist/es/Molecular/CustomIcons/components/Delete.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Edit.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/Edit.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Email.js +36 -0
- package/dist/es/Molecular/CustomIcons/components/Email.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/FinturfLogo.js +33 -0
- package/dist/es/Molecular/CustomIcons/components/FinturfLogo.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/FinturfLogo2.js +41 -0
- package/dist/es/Molecular/CustomIcons/components/FinturfLogo2.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Flows.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/Flows.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Gift.js +21 -0
- package/dist/es/Molecular/CustomIcons/components/Gift.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/GoogleAuth.js +34 -0
- package/dist/es/Molecular/CustomIcons/components/GoogleAuth.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/GooglePlay.js +34 -0
- package/dist/es/Molecular/CustomIcons/components/GooglePlay.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/HelpCircle.js +22 -0
- package/dist/es/Molecular/CustomIcons/components/HelpCircle.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/HelpCircle2.js +23 -0
- package/dist/es/Molecular/CustomIcons/components/HelpCircle2.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/HelpCircleFilled.js +22 -0
- package/dist/es/Molecular/CustomIcons/components/HelpCircleFilled.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Home.js +22 -0
- package/dist/es/Molecular/CustomIcons/components/Home.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Home2.js +25 -0
- package/dist/es/Molecular/CustomIcons/components/Home2.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Key.js +24 -0
- package/dist/es/Molecular/CustomIcons/components/Key.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Landers.js +23 -0
- package/dist/es/Molecular/CustomIcons/components/Landers.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Lock.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/Lock.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Mail.js +28 -0
- package/dist/es/Molecular/CustomIcons/components/Mail.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Mastercard.js +81 -0
- package/dist/es/Molecular/CustomIcons/components/Mastercard.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Minus.js +34 -0
- package/dist/es/Molecular/CustomIcons/components/Minus.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Offers.js +20 -0
- package/dist/es/Molecular/CustomIcons/components/Offers.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Pause.js +34 -0
- package/dist/es/Molecular/CustomIcons/components/Pause.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/PayPal.js +54 -0
- package/dist/es/Molecular/CustomIcons/components/PayPal.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/PayPalLightLarge.js +39 -0
- package/dist/es/Molecular/CustomIcons/components/PayPalLightLarge.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Phone.js +33 -0
- package/dist/es/Molecular/CustomIcons/components/Phone.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Play.js +34 -0
- package/dist/es/Molecular/CustomIcons/components/Play.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Plus.js +34 -0
- package/dist/es/Molecular/CustomIcons/components/Plus.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Profile.js +24 -0
- package/dist/es/Molecular/CustomIcons/components/Profile.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/QRCode.js +35 -0
- package/dist/es/Molecular/CustomIcons/components/QRCode.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Rectangle.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/Rectangle.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Revert.js +22 -0
- package/dist/es/Molecular/CustomIcons/components/Revert.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Star.js +18 -0
- package/dist/es/Molecular/CustomIcons/components/Star.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Star2.js +20 -0
- package/dist/es/Molecular/CustomIcons/components/Star2.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/TrafficSources.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/TrafficSources.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Trash.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/Trash.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/TrashRed.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/TrashRed.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Triggers.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/Triggers.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/User.js +21 -0
- package/dist/es/Molecular/CustomIcons/components/User.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/Visa.js +41 -0
- package/dist/es/Molecular/CustomIcons/components/Visa.js.map +1 -0
- package/dist/es/Molecular/CustomIcons/components/X.js +19 -0
- package/dist/es/Molecular/CustomIcons/components/X.js.map +1 -0
- package/dist/es/Molecular/FormElement/FormElement.js +37 -0
- package/dist/es/Molecular/FormElement/FormElement.js.map +1 -0
- package/dist/es/Molecular/FormElement/FormElement.styles.css +21 -0
- package/dist/es/Molecular/FormWithDependOn/FormWithDependOn.js +111 -0
- package/dist/es/Molecular/FormWithDependOn/FormWithDependOn.js.map +1 -0
- package/dist/es/Molecular/FormWithDependOn/partials/_utils.js +33 -0
- package/dist/es/Molecular/FormWithDependOn/partials/_utils.js.map +1 -0
- package/dist/es/Molecular/InputAddress/InputAddress.js +352 -0
- package/dist/es/Molecular/InputAddress/InputAddress.js.map +1 -0
- package/dist/es/Molecular/InputAddress/InputAddress.styles.css +353 -0
- package/dist/es/Molecular/InputCustomFetch/InputCustomFetch.js +355 -0
- package/dist/es/Molecular/InputCustomFetch/InputCustomFetch.js.map +1 -0
- package/dist/es/Molecular/InputCustomFetch/InputCustomFetch.styles.css +358 -0
- package/dist/es/Molecular/InputCustomFetch/lib/hooks/useDebouncedCallback.js +27 -0
- package/dist/es/Molecular/InputCustomFetch/lib/hooks/useDebouncedCallback.js.map +1 -0
- package/dist/es/Molecular/InputCustomFetch/lib/hooks/useFetchWithAbort.js +50 -0
- package/dist/es/Molecular/InputCustomFetch/lib/hooks/useFetchWithAbort.js.map +1 -0
- package/dist/es/Molecular/InputCustomFetch/lib/utils.js +24 -0
- package/dist/es/Molecular/InputCustomFetch/lib/utils.js.map +1 -0
- package/dist/es/Molecular/InputPassword/InputPassword.js +47 -0
- package/dist/es/Molecular/InputPassword/InputPassword.js.map +1 -0
- package/dist/es/Molecular/InputPassword/InputPassword.styles.css +23 -0
- package/dist/es/_virtual/_rolldown/runtime.js +1 -15
- package/dist/es/charts.js +2 -3
- package/dist/es/classes.js +1 -1
- package/dist/es/form.js +68 -93
- package/dist/es/hooks.js +12 -17
- package/dist/es/icons.js +126 -6
- package/dist/es/index.js +145 -70
- package/dist/es/layout.js +3 -3
- package/dist/es/presets.js +6 -6
- package/dist/es/router-ui.js +5 -8
- package/dist/es/sdk.js +3 -1
- package/dist/es/types/index.js +0 -2
- package/dist/es/ui.js +30 -39
- package/dist/es/utils.js +5 -6
- package/package.json +2 -1
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { getIsOnlyAnObject } from "./_utils.js";
|
|
2
|
+
//#region src/Classes/RESTAPI/partials/Utils.ts
|
|
3
|
+
var Utils = class {
|
|
4
|
+
/**
|
|
5
|
+
* Нормализатор сложных query-параметров.
|
|
6
|
+
*
|
|
7
|
+
* Например: `&key1=&&&===&&&key2====&&&&&&&&key3=...`. Для корректной работы на вход нужно подавать
|
|
8
|
+
* НЕ кодированные значения. По умолчанию выходные значения query-параметров НЕ кодируются.
|
|
9
|
+
*
|
|
10
|
+
* @param queryParams - query в виде строки, массива или объекта.
|
|
11
|
+
* @param settings - формат вывода (`array` | `string` | `object`) и флаг кодирования.
|
|
12
|
+
* @returns Нормализованные query-параметры в выбранном формате.
|
|
13
|
+
*/
|
|
14
|
+
normalizeQueryParams(queryParams, settings) {
|
|
15
|
+
if (settings && !getIsOnlyAnObject(settings)) throw new Error("Bad settings [class Utils, normalizeQueryParams]");
|
|
16
|
+
const getInitialArr = (input) => {
|
|
17
|
+
const prepareParam = (key, value) => {
|
|
18
|
+
if (!value) return `${key}=`;
|
|
19
|
+
else if (typeof value === "string" || typeof value === "number") return `${key}=${value}`;
|
|
20
|
+
else if (Array.isArray(value)) return `${key}=${value.join("")}`;
|
|
21
|
+
else return `${key}=Bad-data-format`;
|
|
22
|
+
};
|
|
23
|
+
if (Array.isArray(input)) return input.map((item) => {
|
|
24
|
+
if (typeof item !== "string") return [];
|
|
25
|
+
const index = item.indexOf("=");
|
|
26
|
+
if (index === -1) return [item];
|
|
27
|
+
return [item.slice(0, index), item.slice(index + 1)];
|
|
28
|
+
}).filter(([key]) => Boolean(key)).map(([key, value]) => prepareParam(key, value));
|
|
29
|
+
else if (getIsOnlyAnObject(input)) return Object.keys(input).map((key) => prepareParam(key, input[key]));
|
|
30
|
+
else if (typeof input === "string") return (input[0] === "?" ? input.slice(1) : input).split("&");
|
|
31
|
+
else return [];
|
|
32
|
+
};
|
|
33
|
+
const { isEncode = false, outputAs = "array" } = settings || {};
|
|
34
|
+
const initialStructure = getInitialArr(queryParams);
|
|
35
|
+
const outputStructure = initialStructure.reduce((acc, str, idx) => {
|
|
36
|
+
const lastIndex = acc.result.length - 1;
|
|
37
|
+
const processToJoin = (val, recoverableSymbol = "&") => {
|
|
38
|
+
const encodedToJoin = `${encodeURIComponent(recoverableSymbol)}${encodeURIComponent(val)}`;
|
|
39
|
+
acc.result[lastIndex] = `${acc.result[lastIndex]}${encodedToJoin}`;
|
|
40
|
+
acc.toJoin = null;
|
|
41
|
+
};
|
|
42
|
+
if (typeof acc.toJoin === "string") processToJoin(acc.toJoin);
|
|
43
|
+
const index = str.indexOf("=");
|
|
44
|
+
if (index !== -1 && index !== 0) {
|
|
45
|
+
const key = str.slice(0, index);
|
|
46
|
+
acc.result.push(`${key}=${encodeURIComponent(str.slice(index + 1))}`);
|
|
47
|
+
} else acc.toJoin = str;
|
|
48
|
+
if (idx === initialStructure.length - 1 && typeof acc.toJoin === "string") processToJoin(acc.toJoin);
|
|
49
|
+
return acc;
|
|
50
|
+
}, {
|
|
51
|
+
result: [],
|
|
52
|
+
toJoin: null
|
|
53
|
+
}).result.map((item) => {
|
|
54
|
+
const [key, value] = item.split("=");
|
|
55
|
+
return [key, !isEncode ? decodeURIComponent(value ?? "") : value ?? ""];
|
|
56
|
+
});
|
|
57
|
+
switch (outputAs) {
|
|
58
|
+
case "string": return outputStructure.length ? `?${outputStructure.map(([key, value]) => `${key}=${value}`).join("&")}` : "";
|
|
59
|
+
case "object": return outputStructure.reduce((acc, [key, value]) => ({
|
|
60
|
+
...acc,
|
|
61
|
+
[key]: value
|
|
62
|
+
}), {});
|
|
63
|
+
default: return outputStructure.map(([key, value]) => `${key}=${value}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
//#endregion
|
|
68
|
+
export { Utils as default };
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=Utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Utils.js","names":[],"sources":["../../../../../src/Classes/RESTAPI/partials/Utils.ts"],"sourcesContent":["import type { UnknownRecord } from './types';\nimport { getIsOnlyAnObject } from './_utils';\n\n// ? Настройки нормализации query-параметров.\ninterface NormalizeQueryParamsSettings {\n isEncode?: boolean;\n outputAs?: 'string' | 'object' | 'array';\n}\n\n// ? Аккумулятор склейки «висячих» query-значений в reduce.\ninterface NormalizeAccumulator {\n result: string[];\n toJoin: string | null;\n}\n\n// ? В этом кклассе собраны полезные добавочные утилиты, которые могут быть использованы другими классами,\n// ? но не имеют прямого отношения к реализации прямой ф-ти RESTAPI\n// ? Так же утилиты могут быть использованы как библиотечные\nclass Utils {\n // ? Индекс-сигнатура: на экземпляр динамически добавляются пользовательские методы (addCustomMethods)\n // ? и реквест-крейтеры (createRequest_${type}). Объявленные методы сохраняют точные типы.\n [key: string]: unknown;\n\n // ! Могут содержаться НЕасинхронные методы!\n\n /**\n * Нормализатор сложных query-параметров.\n *\n * Например: `&key1=&&&===&&&key2====&&&&&&&&key3=...`. Для корректной работы на вход нужно подавать\n * НЕ кодированные значения. По умолчанию выходные значения query-параметров НЕ кодируются.\n *\n * @param queryParams - query в виде строки, массива или объекта.\n * @param settings - формат вывода (`array` | `string` | `object`) и флаг кодирования.\n * @returns Нормализованные query-параметры в выбранном формате.\n */\n // ? Ф-я normalizeQueryParams является нормализатором сложных квери\n // ? Например: &key1=&&&===&&&key2====&&&&&&&&key3=....\n // ? Для корректной работы на вход нужно подавать НЕ кодированные значения\n // ? По умолчанию выходные значения квери-параметров НЕ кодируются\n normalizeQueryParams(queryParams: unknown, settings?: NormalizeQueryParamsSettings): string | UnknownRecord | string[] {\n if (settings && !getIsOnlyAnObject(settings)) {\n throw new Error('Bad settings [class Utils, normalizeQueryParams]');\n }\n\n const getInitialArr = (input: unknown): string[] => {\n const prepareParam = (key: unknown, value: unknown): string => {\n if (!value) return `${key}=`;\n else if (typeof value === 'string' || typeof value === 'number') return `${key}=${value}`;\n else if (Array.isArray(value)) return `${key}=${value.join('')}`;\n else return `${key}=Bad-data-format`;\n };\n\n if (Array.isArray(input)) {\n return input\n .map((item): string[] => {\n if (typeof item !== 'string') return [];\n const index = item.indexOf('=');\n if (index === -1) return [item];\n return [item.slice(0, index), item.slice(index + 1)];\n })\n .filter(([key]) => Boolean(key))\n .map(([key, value]) => prepareParam(key, value));\n }\n else if (getIsOnlyAnObject(input)) {\n return Object.keys(input).map(key => prepareParam(key, input[key]));\n }\n else if (typeof input === 'string') {\n return (input[0] === '?' ? input.slice(1) : input).split('&');\n }\n else {\n return [];\n }\n };\n\n const { isEncode = false, outputAs = 'array' } = settings || {};\n const initialStructure = getInitialArr(queryParams);\n\n const normalizedStructure = initialStructure.reduce<NormalizeAccumulator>(\n (acc, str, idx) => {\n const lastIndex = acc.result.length - 1;\n const processToJoin = (val: string, recoverableSymbol = '&'): void => {\n const encodedToJoin = `${encodeURIComponent(recoverableSymbol)}${encodeURIComponent(val)}`;\n acc.result[lastIndex] = `${acc.result[lastIndex]}${encodedToJoin}`;\n acc.toJoin = null;\n };\n if (typeof acc.toJoin === 'string') processToJoin(acc.toJoin);\n const index = str.indexOf('=');\n if (index !== -1 && index !== 0) {\n const key = str.slice(0, index);\n acc.result.push(`${key}=${encodeURIComponent(str.slice(index + 1))}`);\n }\n else {\n acc.toJoin = str;\n }\n // ? Добивка для последней итерации\n if (idx === initialStructure.length - 1 && typeof acc.toJoin === 'string') processToJoin(acc.toJoin);\n return acc;\n },\n { result: [], toJoin: null },\n ).result;\n\n const outputStructure = normalizedStructure.map((item): [string, string] => {\n const [key, value] = item.split('=');\n return [key, !isEncode ? decodeURIComponent(value ?? '') : value ?? ''];\n });\n\n switch (outputAs) {\n case 'string':\n return outputStructure.length ? `?${outputStructure.map(([key, value]) => `${key}=${value}`).join('&')}` : '';\n case 'object':\n return outputStructure.reduce<UnknownRecord>((acc, [key, value]) => ({ ...acc, [key]: value }), {});\n default:\n return outputStructure.map(([key, value]) => `${key}=${value}`);\n }\n }\n}\n\nexport default Utils;\n"],"mappings":";;AAkBA,IAAM,QAAN,MAAY;;;;;;;;;;;CAqBV,qBAAqB,aAAsB,UAA4E;EACrH,IAAI,YAAY,CAAC,kBAAkB,QAAQ,GACzC,MAAM,IAAI,MAAM,kDAAkD;EAGpE,MAAM,iBAAiB,UAA6B;GAClD,MAAM,gBAAgB,KAAc,UAA2B;IAC7D,IAAI,CAAC,OAAO,OAAO,GAAG,IAAI;SACrB,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU,OAAO,GAAG,IAAI,GAAG;SAC7E,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,KAAK,EAAE;SACxD,OAAO,GAAG,IAAI;GACrB;GAEA,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MACJ,KAAK,SAAmB;IACvB,IAAI,OAAO,SAAS,UAAU,OAAO,CAAC;IACtC,MAAM,QAAQ,KAAK,QAAQ,GAAG;IAC9B,IAAI,UAAU,IAAI,OAAO,CAAC,IAAI;IAC9B,OAAO,CAAC,KAAK,MAAM,GAAG,KAAK,GAAG,KAAK,MAAM,QAAQ,CAAC,CAAC;GACrD,CAAC,CAAC,CACD,QAAQ,CAAC,SAAS,QAAQ,GAAG,CAAC,CAAC,CAC/B,KAAK,CAAC,KAAK,WAAW,aAAa,KAAK,KAAK,CAAC;QAE9C,IAAI,kBAAkB,KAAK,GAC9B,OAAO,OAAO,KAAK,KAAK,CAAC,CAAC,KAAI,QAAO,aAAa,KAAK,MAAM,IAAI,CAAC;QAE/D,IAAI,OAAO,UAAU,UACxB,QAAQ,MAAM,OAAO,MAAM,MAAM,MAAM,CAAC,IAAI,MAAA,CAAO,MAAM,GAAG;QAG5D,OAAO,CAAC;EAEZ;EAEA,MAAM,EAAE,WAAW,OAAO,WAAW,YAAY,YAAY,CAAC;EAC9D,MAAM,mBAAmB,cAAc,WAAW;EA0BlD,MAAM,kBAxBsB,iBAAiB,QAC1C,KAAK,KAAK,QAAQ;GACjB,MAAM,YAAY,IAAI,OAAO,SAAS;GACtC,MAAM,iBAAiB,KAAa,oBAAoB,QAAc;IACpE,MAAM,gBAAgB,GAAG,mBAAmB,iBAAiB,IAAI,mBAAmB,GAAG;IACvF,IAAI,OAAO,aAAa,GAAG,IAAI,OAAO,aAAa;IACnD,IAAI,SAAS;GACf;GACA,IAAI,OAAO,IAAI,WAAW,UAAU,cAAc,IAAI,MAAM;GAC5D,MAAM,QAAQ,IAAI,QAAQ,GAAG;GAC7B,IAAI,UAAU,MAAM,UAAU,GAAG;IAC/B,MAAM,MAAM,IAAI,MAAM,GAAG,KAAK;IAC9B,IAAI,OAAO,KAAK,GAAG,IAAI,GAAG,mBAAmB,IAAI,MAAM,QAAQ,CAAC,CAAC,GAAG;GACtE,OAEE,IAAI,SAAS;GAGf,IAAI,QAAQ,iBAAiB,SAAS,KAAK,OAAO,IAAI,WAAW,UAAU,cAAc,IAAI,MAAM;GACnG,OAAO;EACT,GACA;GAAE,QAAQ,CAAC;GAAG,QAAQ;EAAK,CAC7B,CAAC,CAAC,OAE0C,KAAK,SAA2B;GAC1E,MAAM,CAAC,KAAK,SAAS,KAAK,MAAM,GAAG;GACnC,OAAO,CAAC,KAAK,CAAC,WAAW,mBAAmB,SAAS,EAAE,IAAI,SAAS,EAAE;EACxE,CAAC;EAED,QAAQ,UAAR;GACE,KAAK,UACH,OAAO,gBAAgB,SAAS,IAAI,gBAAgB,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,KAAK,GAAG,MAAM;GAC7G,KAAK,UACH,OAAO,gBAAgB,QAAuB,KAAK,CAAC,KAAK,YAAY;IAAE,GAAG;KAAM,MAAM;GAAM,IAAI,CAAC,CAAC;GACpG,SACE,OAAO,gBAAgB,KAAK,CAAC,KAAK,WAAW,GAAG,IAAI,GAAG,OAAO;EAClE;CACF;AACF"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import AbortableFetch from "./AbortableFetch.js";
|
|
2
|
+
//#region src/Classes/RESTAPI/partials/_utils.ts
|
|
3
|
+
/**
|
|
4
|
+
* Type-guard: значение является «чистым» объектом-словарём.
|
|
5
|
+
* Отсекает примитивы, функции, null, массивы, Set и Map.
|
|
6
|
+
*
|
|
7
|
+
* @param input - проверяемое значение.
|
|
8
|
+
* @returns `true`, если значение — обычный объект (с сужением типа до {@link UnknownRecord}).
|
|
9
|
+
*/
|
|
10
|
+
function getIsOnlyAnObject(input) {
|
|
11
|
+
return typeof input === "object" && input instanceof Object && !Array.isArray(input) && !(input instanceof Set) && !(input instanceof Map);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Рекурсивно клонирует значение (примитивы возвращаются как есть, массивы и объекты — глубоко).
|
|
15
|
+
*
|
|
16
|
+
* @param input - клонируемое значение.
|
|
17
|
+
* @returns Глубокая копия значения.
|
|
18
|
+
*/
|
|
19
|
+
function clone(input) {
|
|
20
|
+
if (input === null || typeof input !== "object") return input;
|
|
21
|
+
if (Array.isArray(input)) return input.map((item) => clone(item));
|
|
22
|
+
const source = getIsOnlyAnObject(input) ? input : {};
|
|
23
|
+
const data = {};
|
|
24
|
+
Object.keys(source).forEach((key) => {
|
|
25
|
+
data[key] = clone(source[key]);
|
|
26
|
+
});
|
|
27
|
+
return data;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Возвращает копию объекта без указанных ключей.
|
|
31
|
+
* (принимает обьект и массив ключей обьекта, возвращает обьект с теми полями, которых нет в массиве ключей)
|
|
32
|
+
*
|
|
33
|
+
* @param obj - исходный объект.
|
|
34
|
+
* @param keys - ключи, которые нужно исключить.
|
|
35
|
+
* @returns Новый объект без перечисленных ключей.
|
|
36
|
+
*/
|
|
37
|
+
function omitKeys(obj, keys = []) {
|
|
38
|
+
const source = obj ?? {};
|
|
39
|
+
const keySet = new Set(keys);
|
|
40
|
+
const result = {};
|
|
41
|
+
Object.keys(source).forEach((key) => {
|
|
42
|
+
if (!keySet.has(key)) result[key] = source[key];
|
|
43
|
+
});
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Клонирует Response через нативный `clone()`, а прочие значения — глубоким {@link clone}.
|
|
48
|
+
*
|
|
49
|
+
* @param res - объект Response либо произвольное значение.
|
|
50
|
+
* @returns Промис с клоном значения.
|
|
51
|
+
*/
|
|
52
|
+
async function getResponseClone(res) {
|
|
53
|
+
if (res && typeof res === "object" && "clone" in res && typeof res.clone === "function") return res.clone();
|
|
54
|
+
return clone(res);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Добавляет на экземпляр (`this`) пользовательские методы из объекта `data` (опционально с префиксом).
|
|
58
|
+
* Копируются только значения-функции.
|
|
59
|
+
*
|
|
60
|
+
* @param this - целевой экземпляр (передаётся через `.call`).
|
|
61
|
+
* @param data - словарь методов для добавления.
|
|
62
|
+
* @param prefix - необязательный префикс имени метода.
|
|
63
|
+
*/
|
|
64
|
+
function addCustomMethods(data, prefix) {
|
|
65
|
+
const preparedPrefix = (prefix || "").toString();
|
|
66
|
+
Object.keys(data).forEach((key) => {
|
|
67
|
+
const preparedKey = `${preparedPrefix}${key}`;
|
|
68
|
+
if (typeof data[key] === "function" && getIsOnlyAnObject(this)) this[preparedKey] = data[key];
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Готовит и настраивает экземпляр {@link AbortableFetch} для текущего контекста API.
|
|
73
|
+
*
|
|
74
|
+
* Подмешивает токены авторизации (если включён credentialsProcessing), общие заголовки/опции
|
|
75
|
+
* из `addAsCommon`, а также навешивает everyPromiseCallback (обработка кодов ответа) и
|
|
76
|
+
* catchCallback (флоу рефреша токенов).
|
|
77
|
+
*
|
|
78
|
+
* @param this - контекст экземпляра API (см. {@link FetchSystemContext}).
|
|
79
|
+
* @param isGetBody - извлекать ли тело ответа в everyPromiseCallback.
|
|
80
|
+
* @returns Промис с экземпляром {@link AbortableFetch} либо `null`, если рефреш токена не удался.
|
|
81
|
+
*/
|
|
82
|
+
async function getInstanceOfFetchSystem(isGetBody) {
|
|
83
|
+
const API_CONTEXT = this;
|
|
84
|
+
const CREDENTIALS_CONTEXT = API_CONTEXT.credentialsProcessing;
|
|
85
|
+
let credentials = {};
|
|
86
|
+
if (CREDENTIALS_CONTEXT) {
|
|
87
|
+
const cred = await CREDENTIALS_CONTEXT.getCredentials();
|
|
88
|
+
credentials = CREDENTIALS_CONTEXT.isUseRefreshTokensPropcessing ? await CREDENTIALS_CONTEXT.waitRefresh(Boolean(cred.isNeedRefresh) && !CREDENTIALS_CONTEXT.getIsTokenStartRefresh()).then(async () => CREDENTIALS_CONTEXT.processCredentials(await CREDENTIALS_CONTEXT.getCredentials())) : cred;
|
|
89
|
+
}
|
|
90
|
+
if (credentials.isRefreshFailed) return null;
|
|
91
|
+
if (API_CONTEXT.addAsCommon && typeof API_CONTEXT.addAsCommon !== "function") throw new Error("addAsCommon must be function [getInstanceOfFetchSystem]");
|
|
92
|
+
const { headers: headersToAbortableFetchInstance, queryParameters: queryParamsToAbortableFetchInstance, options: optionsToAbortableFetchInstance } = await API_CONTEXT.addAsCommon?.() || {};
|
|
93
|
+
if (headersToAbortableFetchInstance && !getIsOnlyAnObject(headersToAbortableFetchInstance) || optionsToAbortableFetchInstance && !getIsOnlyAnObject(optionsToAbortableFetchInstance) || queryParamsToAbortableFetchInstance && !(typeof queryParamsToAbortableFetchInstance === "string" || getIsOnlyAnObject(queryParamsToAbortableFetchInstance) || Array.isArray(queryParamsToAbortableFetchInstance))) throw new Error("Bad output format from addAsCommon [getInstanceOfFetchSystem]");
|
|
94
|
+
return (CREDENTIALS_CONTEXT?.isUseRefreshTokensPropcessing ? CREDENTIALS_CONTEXT.waitRefresh() : Promise.resolve()).then(async () => new AbortableFetch({
|
|
95
|
+
method: "GET",
|
|
96
|
+
headers: {
|
|
97
|
+
...headersToAbortableFetchInstance,
|
|
98
|
+
...credentials.token ? CREDENTIALS_CONTEXT?.getHeadersForAuthorize?.(credentials.token) || {} : {}
|
|
99
|
+
},
|
|
100
|
+
queryParameters: await API_CONTEXT.processQueryParams(queryParamsToAbortableFetchInstance),
|
|
101
|
+
options: {
|
|
102
|
+
mode: "cors",
|
|
103
|
+
redirect: "follow",
|
|
104
|
+
...optionsToAbortableFetchInstance
|
|
105
|
+
},
|
|
106
|
+
everyPromiseCallback: async function everyPromiseCallback(response) {
|
|
107
|
+
const ABORTABLE_FETCH_INSTANCE = this;
|
|
108
|
+
if (!response.status) {
|
|
109
|
+
const reqInput = ABORTABLE_FETCH_INSTANCE.requestInput;
|
|
110
|
+
const responseRequest = getIsOnlyAnObject(response.request) ? response.request : {};
|
|
111
|
+
const request = Array.isArray(reqInput) ? reqInput.find((item) => getIsOnlyAnObject(item) && item.path === responseRequest.path) : void 0;
|
|
112
|
+
const mesageOptions = getIsOnlyAnObject(request) && getIsOnlyAnObject(request.mesageOptions) ? request.mesageOptions : void 0;
|
|
113
|
+
if (mesageOptions?.isUseErrorToast) API_CONTEXT.sendMessage?.(API_CONTEXT.NO_INET, mesageOptions, response);
|
|
114
|
+
}
|
|
115
|
+
return API_CONTEXT.REJECT_CODES.includes(Number(response.status)) || CREDENTIALS_CONTEXT?.isUseRefreshTokensPropcessing && Boolean(CREDENTIALS_CONTEXT?.CODES_USING_THE_REFRESH_ATTEMPT?.includes(Number(response.status))) ? Promise.reject(/* @__PURE__ */ new Error(`status:${Number(response.status)}`)) : Promise.resolve(!isGetBody ? response : await API_CONTEXT.getResponseBody(response));
|
|
116
|
+
},
|
|
117
|
+
catchCallback: async function catchCallback(res) {
|
|
118
|
+
const ABORTABLE_FETCH_INSTANCE = this;
|
|
119
|
+
if (!CREDENTIALS_CONTEXT) return Promise.reject(res);
|
|
120
|
+
const code = Number(res instanceof Error ? res.message.split(":")[1] : "");
|
|
121
|
+
if (CREDENTIALS_CONTEXT.CODES_USING_THE_REFRESH_ATTEMPT?.includes(code)) {
|
|
122
|
+
const isDoRefresh = !CREDENTIALS_CONTEXT.getIsTokenStartRefresh();
|
|
123
|
+
return CREDENTIALS_CONTEXT.waitRefresh(isDoRefresh).then(async () => {
|
|
124
|
+
const newCredentials = await CREDENTIALS_CONTEXT.processCredentials({
|
|
125
|
+
...await CREDENTIALS_CONTEXT.getCredentials(true),
|
|
126
|
+
isCatchCallbackProcess: isDoRefresh
|
|
127
|
+
});
|
|
128
|
+
const currentHeaders = ABORTABLE_FETCH_INSTANCE.getHeaders();
|
|
129
|
+
ABORTABLE_FETCH_INSTANCE.setHeaders({
|
|
130
|
+
...getIsOnlyAnObject(currentHeaders) ? currentHeaders : {},
|
|
131
|
+
...newCredentials.token ? { Authorization: `Bearer ${newCredentials.token}` } : {}
|
|
132
|
+
});
|
|
133
|
+
if (newCredentials.token) return ABORTABLE_FETCH_INSTANCE.repeatRequest();
|
|
134
|
+
return Promise.reject(res);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return Promise.reject(res);
|
|
138
|
+
}
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
//#endregion
|
|
142
|
+
export { addCustomMethods, clone, getInstanceOfFetchSystem, getIsOnlyAnObject, getResponseClone, omitKeys };
|
|
143
|
+
|
|
144
|
+
//# sourceMappingURL=_utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_utils.js","names":[],"sources":["../../../../../src/Classes/RESTAPI/partials/_utils.ts"],"sourcesContent":["import type { CredentialsState, FetchSystemContext, UnknownRecord } from './types';\nimport AbortableFetch from './AbortableFetch';\n\n/**\n * Type-guard: значение является «чистым» объектом-словарём.\n * Отсекает примитивы, функции, null, массивы, Set и Map.\n *\n * @param input - проверяемое значение.\n * @returns `true`, если значение — обычный объект (с сужением типа до {@link UnknownRecord}).\n */\nexport function getIsOnlyAnObject(input: unknown): input is UnknownRecord {\n return (\n typeof input === 'object' // \"отбивает\" примитивы и функции\n && input instanceof Object // \"отбивает\" null\n && !Array.isArray(input) // \"отбивает\" массивы\n && !(input instanceof Set) // \"отбивает\" сеты\n && !(input instanceof Map) // \"отбивает\" мапы\n );\n}\n\n/**\n * Рекурсивно клонирует значение (примитивы возвращаются как есть, массивы и объекты — глубоко).\n *\n * @param input - клонируемое значение.\n * @returns Глубокая копия значения.\n */\nexport function clone(input: unknown): unknown {\n if (input === null || typeof input !== 'object') return input;\n if (Array.isArray(input)) return input.map(item => clone(item));\n const source: UnknownRecord = getIsOnlyAnObject(input) ? input : {};\n const data: UnknownRecord = {};\n Object.keys(source).forEach((key) => {\n data[key] = clone(source[key]);\n });\n return data;\n}\n\n/**\n * Возвращает копию объекта без указанных ключей.\n * (принимает обьект и массив ключей обьекта, возвращает обьект с теми полями, которых нет в массиве ключей)\n *\n * @param obj - исходный объект.\n * @param keys - ключи, которые нужно исключить.\n * @returns Новый объект без перечисленных ключей.\n */\nexport function omitKeys(obj?: UnknownRecord, keys: string[] = []): UnknownRecord {\n const source: UnknownRecord = obj ?? {};\n const keySet = new Set(keys);\n const result: UnknownRecord = {};\n Object.keys(source).forEach((key) => {\n if (!keySet.has(key)) result[key] = source[key];\n });\n return result;\n}\n\n/**\n * Клонирует Response через нативный `clone()`, а прочие значения — глубоким {@link clone}.\n *\n * @param res - объект Response либо произвольное значение.\n * @returns Промис с клоном значения.\n */\nexport async function getResponseClone(res: unknown): Promise<unknown> {\n if (res && typeof res === 'object' && 'clone' in res && typeof res.clone === 'function') {\n return res.clone();\n }\n return clone(res);\n}\n\n/**\n * Добавляет на экземпляр (`this`) пользовательские методы из объекта `data` (опционально с префиксом).\n * Копируются только значения-функции.\n *\n * @param this - целевой экземпляр (передаётся через `.call`).\n * @param data - словарь методов для добавления.\n * @param prefix - необязательный префикс имени метода.\n */\nexport function addCustomMethods(this: UnknownRecord, data: UnknownRecord, prefix?: string): void {\n const preparedPrefix = (prefix || '').toString();\n\n Object.keys(data).forEach((key) => {\n const preparedKey = `${preparedPrefix}${key}`;\n if (typeof data[key] === 'function' && getIsOnlyAnObject(this)) this[preparedKey] = data[key];\n });\n}\n\n/**\n * Готовит и настраивает экземпляр {@link AbortableFetch} для текущего контекста API.\n *\n * Подмешивает токены авторизации (если включён credentialsProcessing), общие заголовки/опции\n * из `addAsCommon`, а также навешивает everyPromiseCallback (обработка кодов ответа) и\n * catchCallback (флоу рефреша токенов).\n *\n * @param this - контекст экземпляра API (см. {@link FetchSystemContext}).\n * @param isGetBody - извлекать ли тело ответа в everyPromiseCallback.\n * @returns Промис с экземпляром {@link AbortableFetch} либо `null`, если рефреш токена не удался.\n */\nexport async function getInstanceOfFetchSystem(this: FetchSystemContext, isGetBody?: boolean): Promise<AbortableFetch | null> {\n const API_CONTEXT = this;\n const CREDENTIALS_CONTEXT = API_CONTEXT.credentialsProcessing;\n\n let credentials: CredentialsState = {};\n // ? Наличие credentialsProcessing включает добавление токена в принципе (если авторизованы в системе)\n if (CREDENTIALS_CONTEXT) {\n // ? Метод getCredentials - классовый метод, обертка над getCredentials, переданным при создании экземпляра\n // ? В классовом getCredentials уже инкапсулирована логика использования importCredentials\n const cred = await CREDENTIALS_CONTEXT.getCredentials();\n\n credentials = CREDENTIALS_CONTEXT.isUseRefreshTokensPropcessing\n ? await CREDENTIALS_CONTEXT.waitRefresh(Boolean(cred.isNeedRefresh) && !CREDENTIALS_CONTEXT.getIsTokenStartRefresh()).then(async () =>\n CREDENTIALS_CONTEXT.processCredentials(await CREDENTIALS_CONTEXT.getCredentials()),\n )\n : cred;\n }\n\n // ? На уровне получения instance может уже сложиться ситуация, что сходили на рефреш и он неудачный.\n // ? Прерываем получение instance, даем возможность отработать callbackAfterRejectRefresh (смотри class CredentialsProcessing)\n if (credentials.isRefreshFailed) return null;\n\n if (API_CONTEXT.addAsCommon && typeof API_CONTEXT.addAsCommon !== 'function') {\n throw new Error('addAsCommon must be function [getInstanceOfFetchSystem]');\n }\n\n const {\n headers: headersToAbortableFetchInstance,\n queryParameters: queryParamsToAbortableFetchInstance,\n options: optionsToAbortableFetchInstance,\n } = (await API_CONTEXT.addAsCommon?.()) || {};\n\n if (\n (headersToAbortableFetchInstance && !getIsOnlyAnObject(headersToAbortableFetchInstance))\n || (optionsToAbortableFetchInstance && !getIsOnlyAnObject(optionsToAbortableFetchInstance))\n || (queryParamsToAbortableFetchInstance\n && !(\n typeof queryParamsToAbortableFetchInstance === 'string'\n || getIsOnlyAnObject(queryParamsToAbortableFetchInstance)\n || Array.isArray(queryParamsToAbortableFetchInstance)\n ))\n ) {\n throw new Error('Bad output format from addAsCommon [getInstanceOfFetchSystem]');\n }\n\n // ? По итогу возвращается экземпляр класса AbortableFetch (который мы конфигурируем большим объектом настроек)\n return (CREDENTIALS_CONTEXT?.isUseRefreshTokensPropcessing ? CREDENTIALS_CONTEXT.waitRefresh() : Promise.resolve()).then(\n async () =>\n new AbortableFetch({\n // ? Метод по умолчанию\n method: 'GET',\n // ? Заголовки по умолчанию\n headers: {\n ...headersToAbortableFetchInstance,\n // ? (*) Тут обрабатываются кейсы\n // ? - когда нет this.credentialsProcessing\n // ? (мы НЕ хотим добавлять токены в принципе, не зашли в верхнюю if-ку)\n // ? - когда есть this.credentialsProcessing, но нет credentials.token (не авторизованы)\n // ? (зашли в верхнюю if-ку, попробовали получить/обновить креды)\n ...(credentials.token ? CREDENTIALS_CONTEXT?.getHeadersForAuthorize?.(credentials.token) || {} : {}),\n },\n queryParameters: await API_CONTEXT.processQueryParams(queryParamsToAbortableFetchInstance),\n // ? Опции по умолчанию\n options: {\n mode: 'cors',\n redirect: 'follow',\n ...optionsToAbortableFetchInstance,\n },\n\n // ? Каждый запрос (каждый запрос мультизапроса), сделаный методом request этого экземпляра выполнит этот колбек\n everyPromiseCallback: async function everyPromiseCallback(this: AbortableFetch, response: UnknownRecord): Promise<unknown> {\n // ? this - это НЕ API_CONTEXT и НЕ CREDENTIALS_CONTEXT, a итоговый эекземпляр AbortableFetch\n const ABORTABLE_FETCH_INSTANCE = this;\n\n if (!response.status) {\n const reqInput = ABORTABLE_FETCH_INSTANCE.requestInput;\n const responseRequest: UnknownRecord = getIsOnlyAnObject(response.request) ? response.request : {};\n const request = Array.isArray(reqInput)\n ? reqInput.find(item => getIsOnlyAnObject(item) && item.path === responseRequest.path)\n : undefined;\n const mesageOptions: UnknownRecord | undefined\n = getIsOnlyAnObject(request) && getIsOnlyAnObject(request.mesageOptions) ? request.mesageOptions : undefined;\n const isUseErrorToast = mesageOptions?.isUseErrorToast;\n if (isUseErrorToast) {\n API_CONTEXT.sendMessage?.(API_CONTEXT.NO_INET, mesageOptions, response);\n }\n }\n\n return API_CONTEXT.REJECT_CODES.includes(Number(response.status))\n || (CREDENTIALS_CONTEXT?.isUseRefreshTokensPropcessing\n && Boolean(CREDENTIALS_CONTEXT?.CODES_USING_THE_REFRESH_ATTEMPT?.includes(Number(response.status))))\n ? Promise.reject(new Error(`status:${Number(response.status)}`))\n : Promise.resolve(!isGetBody ? response : await API_CONTEXT.getResponseBody(response));\n },\n\n // ? Если хоть один запрос из пачки будет зареджекчен, зареджектится вся пачка.\n // ? В этом случае будет выполнен этот колбэк\n catchCallback: async function catchCallback(this: AbortableFetch, res: unknown): Promise<unknown> {\n // ? this - это НЕ API_CONTEXT и НЕ CREDENTIALS_CONTEXT, a итоговый эекземпляр AbortableFetch\n const ABORTABLE_FETCH_INSTANCE = this;\n if (!CREDENTIALS_CONTEXT) return Promise.reject(res);\n\n const code = Number(res instanceof Error ? res.message.split(':')[1] : '');\n\n if (CREDENTIALS_CONTEXT.CODES_USING_THE_REFRESH_ATTEMPT?.includes(code)) {\n const isDoRefresh = !CREDENTIALS_CONTEXT.getIsTokenStartRefresh();\n\n return CREDENTIALS_CONTEXT.waitRefresh(isDoRefresh).then(async () => {\n // ? Пробуем зарефрешить\n const newCredentials = await CREDENTIALS_CONTEXT.processCredentials({\n ...(await CREDENTIALS_CONTEXT.getCredentials(true)),\n isCatchCallbackProcess: isDoRefresh,\n });\n\n const currentHeaders = ABORTABLE_FETCH_INSTANCE.getHeaders();\n ABORTABLE_FETCH_INSTANCE.setHeaders({\n ...(getIsOnlyAnObject(currentHeaders) ? currentHeaders : {}),\n ...(newCredentials.token ? { Authorization: `Bearer ${newCredentials.token}` } : {}),\n });\n\n if (newCredentials.token) return ABORTABLE_FETCH_INSTANCE.repeatRequest();\n return Promise.reject(res);\n });\n }\n\n return Promise.reject(res);\n },\n }),\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
//#region src/Classes/RESTAPI/partials/sse.ts
|
|
2
|
+
/**
|
|
3
|
+
* Парсит один блок SSE (текст между пустыми строками) в объект события.
|
|
4
|
+
*
|
|
5
|
+
* Возвращает `null`, если в блоке не оказалось ни одного значимого поля
|
|
6
|
+
* (например, блок состоял только из комментариев/heartbeat-а).
|
|
7
|
+
*
|
|
8
|
+
* @param block - сырой текстовый блок SSE (без завершающей пустой строки).
|
|
9
|
+
* @returns Разобранное событие {@link SSEEvent} либо `null`.
|
|
10
|
+
*/
|
|
11
|
+
function parseSSEEvent(block) {
|
|
12
|
+
if (typeof block !== "string") return null;
|
|
13
|
+
const event = {
|
|
14
|
+
event: "message",
|
|
15
|
+
data: "",
|
|
16
|
+
id: void 0,
|
|
17
|
+
retry: void 0
|
|
18
|
+
};
|
|
19
|
+
const dataLines = [];
|
|
20
|
+
let hasField = false;
|
|
21
|
+
block.split("\n").forEach((line) => {
|
|
22
|
+
if (line === "" || line[0] === ":") return;
|
|
23
|
+
const colonIdx = line.indexOf(":");
|
|
24
|
+
const field = colonIdx === -1 ? line : line.slice(0, colonIdx);
|
|
25
|
+
let value = colonIdx === -1 ? "" : line.slice(colonIdx + 1);
|
|
26
|
+
if (value[0] === " ") value = value.slice(1);
|
|
27
|
+
switch (field) {
|
|
28
|
+
case "event":
|
|
29
|
+
event.event = value;
|
|
30
|
+
hasField = true;
|
|
31
|
+
break;
|
|
32
|
+
case "data":
|
|
33
|
+
dataLines.push(value);
|
|
34
|
+
hasField = true;
|
|
35
|
+
break;
|
|
36
|
+
case "id":
|
|
37
|
+
event.id = value;
|
|
38
|
+
hasField = true;
|
|
39
|
+
break;
|
|
40
|
+
case "retry":
|
|
41
|
+
if (/^\d+$/.test(value)) {
|
|
42
|
+
event.retry = Number(value);
|
|
43
|
+
hasField = true;
|
|
44
|
+
}
|
|
45
|
+
break;
|
|
46
|
+
default: break;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
if (!hasField) return null;
|
|
50
|
+
event.data = dataLines.join("\n");
|
|
51
|
+
return event;
|
|
52
|
+
}
|
|
53
|
+
function safeCall(fn, ...args) {
|
|
54
|
+
if (typeof fn !== "function") return;
|
|
55
|
+
try {
|
|
56
|
+
fn(...args);
|
|
57
|
+
} catch {}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Читает тело Response как поток Server-Sent Events.
|
|
61
|
+
*
|
|
62
|
+
* Резолвится массивом всех полученных событий ПОСЛЕ закрытия потока.
|
|
63
|
+
* Прерывание потока через `AbortController` трактуется как штатное завершение
|
|
64
|
+
* (возвращается то, что успели собрать); любая иная ошибка чтения пробрасывается выше.
|
|
65
|
+
*
|
|
66
|
+
* @param response - объект Response (или duck-typed с `body.getReader()`).
|
|
67
|
+
* @param options - колбэки и опции обработки потока (см. {@link SSEReadOptions}).
|
|
68
|
+
* @param options.onEvent - вызывается на каждое распарсенное событие.
|
|
69
|
+
* @param options.onChunk - вызывается на полезную нагрузку (поле data) каждого события.
|
|
70
|
+
* @param options.handlers - карта `{ имяСобытия: cb }` для обработки по полю `event`.
|
|
71
|
+
* @param options.parseJson - если `true`, поле `data` прогоняется через `JSON.parse`.
|
|
72
|
+
* @returns Промис с массивом всех распарсенных событий {@link SSEEvent}.
|
|
73
|
+
*/
|
|
74
|
+
async function readSSE(response, { onEvent, onChunk, handlers, parseJson } = {}) {
|
|
75
|
+
const events = [];
|
|
76
|
+
const stream = response.body;
|
|
77
|
+
if (!stream) return events;
|
|
78
|
+
const reader = stream.getReader();
|
|
79
|
+
const decoder = new TextDecoder("utf-8");
|
|
80
|
+
let buffer = "";
|
|
81
|
+
let pendingCR = "";
|
|
82
|
+
const normalize = (chunk) => chunk.replace(/\r\n|\r/g, "\n");
|
|
83
|
+
const flush = (rawBlock) => {
|
|
84
|
+
const event = parseSSEEvent(rawBlock);
|
|
85
|
+
if (!event) return;
|
|
86
|
+
if (parseJson && typeof event.data === "string" && event.data !== "") try {
|
|
87
|
+
event.data = JSON.parse(event.data);
|
|
88
|
+
} catch {}
|
|
89
|
+
events.push(event);
|
|
90
|
+
safeCall(onEvent, event);
|
|
91
|
+
safeCall(onChunk, event.data, event);
|
|
92
|
+
if (handlers) safeCall(handlers[event.event], event.data, event);
|
|
93
|
+
};
|
|
94
|
+
try {
|
|
95
|
+
while (true) {
|
|
96
|
+
const { done, value } = await reader.read();
|
|
97
|
+
if (done) break;
|
|
98
|
+
let chunk = pendingCR + decoder.decode(value, { stream: true });
|
|
99
|
+
pendingCR = "";
|
|
100
|
+
if (chunk.endsWith("\r")) {
|
|
101
|
+
pendingCR = "\r";
|
|
102
|
+
chunk = chunk.slice(0, -1);
|
|
103
|
+
}
|
|
104
|
+
buffer += normalize(chunk);
|
|
105
|
+
let sepIdx;
|
|
106
|
+
while ((sepIdx = buffer.indexOf("\n\n")) !== -1) {
|
|
107
|
+
const rawBlock = buffer.slice(0, sepIdx);
|
|
108
|
+
buffer = buffer.slice(sepIdx + 2);
|
|
109
|
+
flush(rawBlock);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
buffer += normalize(pendingCR + decoder.decode());
|
|
113
|
+
buffer = buffer.replace(/\n+$/g, "");
|
|
114
|
+
if (buffer !== "") flush(buffer);
|
|
115
|
+
} catch (error) {
|
|
116
|
+
if ((error && typeof error === "object" && "name" in error ? error.name : void 0) !== "AbortError") throw error;
|
|
117
|
+
} finally {
|
|
118
|
+
try {
|
|
119
|
+
reader.releaseLock?.();
|
|
120
|
+
} catch {}
|
|
121
|
+
}
|
|
122
|
+
return events;
|
|
123
|
+
}
|
|
124
|
+
//#endregion
|
|
125
|
+
export { parseSSEEvent, readSSE };
|
|
126
|
+
|
|
127
|
+
//# sourceMappingURL=sse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.js","names":[],"sources":["../../../../../src/Classes/RESTAPI/partials/sse.ts"],"sourcesContent":["import type { SSEEvent, SSEReadOptions, StreamResponseLike } from './types';\n\n// ? Утилиты для обработки Server-Sent Events (text/event-stream).\n// ? Используются крейтером createRequest_sse (смотри класс ApiRequestCreators).\n// ? Реализация следует спецификации EventSource:\n// ? - события разделяются пустой строкой;\n// ? - строки вида \"field:value\" (один ведущий пробел в value отбрасывается);\n// ? - строка, начинающаяся с \":\", — комментарий (игнорируется);\n// ? - несколько полей data склеиваются через \"\\n\";\n// ? - поддерживаемые поля: event, data, id, retry.\n\n/**\n * Парсит один блок SSE (текст между пустыми строками) в объект события.\n *\n * Возвращает `null`, если в блоке не оказалось ни одного значимого поля\n * (например, блок состоял только из комментариев/heartbeat-а).\n *\n * @param block - сырой текстовый блок SSE (без завершающей пустой строки).\n * @returns Разобранное событие {@link SSEEvent} либо `null`.\n */\nexport function parseSSEEvent(block: string): SSEEvent | null {\n if (typeof block !== 'string') return null;\n\n const event: SSEEvent = { event: 'message', data: '', id: undefined, retry: undefined };\n const dataLines: string[] = [];\n let hasField = false;\n\n block.split('\\n').forEach((line) => {\n // ? Пустая строка внутри блока невозможна (по ней блок и режется), но на всякий случай пропускаем.\n // ? Строка-комментарий начинается с двоеточия.\n if (line === '' || line[0] === ':') return;\n\n const colonIdx = line.indexOf(':');\n const field = colonIdx === -1 ? line : line.slice(0, colonIdx);\n let value = colonIdx === -1 ? '' : line.slice(colonIdx + 1);\n // ? По спеке отбрасывается ровно один ведущий пробел значения.\n if (value[0] === ' ') value = value.slice(1);\n\n switch (field) {\n case 'event':\n event.event = value;\n hasField = true;\n break;\n case 'data':\n dataLines.push(value);\n hasField = true;\n break;\n case 'id':\n event.id = value;\n hasField = true;\n break;\n case 'retry':\n if (/^\\d+$/.test(value)) {\n event.retry = Number(value);\n hasField = true;\n }\n break;\n default:\n // ? Неизвестные поля по спеке игнорируются.\n break;\n }\n });\n\n if (!hasField) return null;\n event.data = dataLines.join('\\n');\n return event;\n}\n\n// ? Безопасный вызов пользовательского колбэка: его ошибка не должна рвать чтение потока.\nfunction safeCall(fn: unknown, ...args: unknown[]): void {\n if (typeof fn !== 'function') return;\n try {\n // ? fn сужен до функции type-guard-ом выше — вызываем без приведения типов.\n fn(...args);\n }\n catch {\n /* пользовательский колбэк не влияет на чтение потока */\n }\n}\n\n/**\n * Читает тело Response как поток Server-Sent Events.\n *\n * Резолвится массивом всех полученных событий ПОСЛЕ закрытия потока.\n * Прерывание потока через `AbortController` трактуется как штатное завершение\n * (возвращается то, что успели собрать); любая иная ошибка чтения пробрасывается выше.\n *\n * @param response - объект Response (или duck-typed с `body.getReader()`).\n * @param options - колбэки и опции обработки потока (см. {@link SSEReadOptions}).\n * @param options.onEvent - вызывается на каждое распарсенное событие.\n * @param options.onChunk - вызывается на полезную нагрузку (поле data) каждого события.\n * @param options.handlers - карта `{ имяСобытия: cb }` для обработки по полю `event`.\n * @param options.parseJson - если `true`, поле `data` прогоняется через `JSON.parse`.\n * @returns Промис с массивом всех распарсенных событий {@link SSEEvent}.\n */\nexport async function readSSE(response: StreamResponseLike, { onEvent, onChunk, handlers, parseJson }: SSEReadOptions = {}): Promise<SSEEvent[]> {\n const events: SSEEvent[] = [];\n // ? Нет тела — нечего читать (защита от null и для strictNullChecks).\n const stream = response.body;\n if (!stream) return events;\n\n const reader = stream.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n // ? Отложенный хвостовой \"\\r\": может оказаться первой половиной \"\\r\\n\", разорванного на границе чанков.\n // ? Без этого наивная нормализация превратила бы \"\\r\" + \"\\n\" в \"\\n\\n\" и создала ложный разделитель событий.\n let pendingCR = '';\n\n // ? Нормализует переводы строк в одном чанке (SSE допускает CR, LF и CRLF).\n const normalize = (chunk: string): string => chunk.replace(/\\r\\n|\\r/g, '\\n');\n\n // ? Диспетчер одного готового блока: парсит, аккумулирует и дёргает колбэки.\n const flush = (rawBlock: string): void => {\n const event = parseSSEEvent(rawBlock);\n if (!event) return;\n\n // ? Опциональный JSON-парсинг полезной нагрузки (под бэкенды, шлющие JSON в data).\n if (parseJson && typeof event.data === 'string' && event.data !== '') {\n try {\n event.data = JSON.parse(event.data);\n }\n catch {\n /* не валидный JSON — оставляем data строкой */\n }\n }\n\n events.push(event);\n safeCall(onEvent, event);\n safeCall(onChunk, event.data, event);\n // ? Типизированный обработчик по имени события (event: delta|status|done|...).\n if (handlers) safeCall(handlers[event.event], event.data, event);\n };\n\n try {\n // ? Читаем поток до закрытия, по мере прихода чанков нарезаем готовые события.\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n // ? Нормализуем только пришедший чанк (линейная сложность), переноса всего буфера не делаем.\n let chunk = pendingCR + decoder.decode(value, { stream: true });\n pendingCR = '';\n // ? Если чанк оканчивается на \"\\r\" — откладываем его: вдруг следующий чанк начнётся с \"\\n\" (CRLF на границе).\n if (chunk.endsWith('\\r')) {\n pendingCR = '\\r';\n chunk = chunk.slice(0, -1);\n }\n buffer += normalize(chunk);\n\n // ? Вырезаем все завершённые события (разделитель — пустая строка).\n let sepIdx;\n // eslint-disable-next-line no-cond-assign\n while ((sepIdx = buffer.indexOf('\\n\\n')) !== -1) {\n const rawBlock = buffer.slice(0, sepIdx);\n buffer = buffer.slice(sepIdx + 2);\n flush(rawBlock);\n }\n }\n\n // ? Добиваем декодер, отложенный \"\\r\" и хвост, если поток закрылся без финальной пустой строки.\n buffer += normalize(pendingCR + decoder.decode());\n buffer = buffer.replace(/\\n+$/g, '');\n if (buffer !== '') flush(buffer);\n }\n catch (error: unknown) {\n // ? Прерывание (abort) — это штатное завершение стрима: возвращаем то, что успели собрать.\n // ? Любую иную ошибку чтения пробрасываем выше (её обработает catchCallback/пользователь).\n // ? abort бросает DOMException с name === 'AbortError' (в Node он не instanceof Error) — проверяем поле через guard.\n const name = error && typeof error === 'object' && 'name' in error ? error.name : undefined;\n if (name !== 'AbortError') throw error;\n }\n finally {\n try {\n reader.releaseLock?.();\n }\n catch {\n /* releaseLock может бросить, если поток уже отпущен — игнорируем */\n }\n }\n\n return events;\n}\n"],"mappings":";;;;;;;;;;AAoBA,SAAgB,cAAc,OAAgC;CAC5D,IAAI,OAAO,UAAU,UAAU,OAAO;CAEtC,MAAM,QAAkB;EAAE,OAAO;EAAW,MAAM;EAAI,IAAI,KAAA;EAAW,OAAO,KAAA;CAAU;CACtF,MAAM,YAAsB,CAAC;CAC7B,IAAI,WAAW;CAEf,MAAM,MAAM,IAAI,CAAC,CAAC,SAAS,SAAS;EAGlC,IAAI,SAAS,MAAM,KAAK,OAAO,KAAK;EAEpC,MAAM,WAAW,KAAK,QAAQ,GAAG;EACjC,MAAM,QAAQ,aAAa,KAAK,OAAO,KAAK,MAAM,GAAG,QAAQ;EAC7D,IAAI,QAAQ,aAAa,KAAK,KAAK,KAAK,MAAM,WAAW,CAAC;EAE1D,IAAI,MAAM,OAAO,KAAK,QAAQ,MAAM,MAAM,CAAC;EAE3C,QAAQ,OAAR;GACE,KAAK;IACH,MAAM,QAAQ;IACd,WAAW;IACX;GACF,KAAK;IACH,UAAU,KAAK,KAAK;IACpB,WAAW;IACX;GACF,KAAK;IACH,MAAM,KAAK;IACX,WAAW;IACX;GACF,KAAK;IACH,IAAI,QAAQ,KAAK,KAAK,GAAG;KACvB,MAAM,QAAQ,OAAO,KAAK;KAC1B,WAAW;IACb;IACA;GACF,SAEE;EACJ;CACF,CAAC;CAED,IAAI,CAAC,UAAU,OAAO;CACtB,MAAM,OAAO,UAAU,KAAK,IAAI;CAChC,OAAO;AACT;AAGA,SAAS,SAAS,IAAa,GAAG,MAAuB;CACvD,IAAI,OAAO,OAAO,YAAY;CAC9B,IAAI;EAEF,GAAG,GAAG,IAAI;CACZ,QACM,CAEN;AACF;;;;;;;;;;;;;;;;AAiBA,eAAsB,QAAQ,UAA8B,EAAE,SAAS,SAAS,UAAU,cAA8B,CAAC,GAAwB;CAC/I,MAAM,SAAqB,CAAC;CAE5B,MAAM,SAAS,SAAS;CACxB,IAAI,CAAC,QAAQ,OAAO;CAEpB,MAAM,SAAS,OAAO,UAAU;CAChC,MAAM,UAAU,IAAI,YAAY,OAAO;CACvC,IAAI,SAAS;CAGb,IAAI,YAAY;CAGhB,MAAM,aAAa,UAA0B,MAAM,QAAQ,YAAY,IAAI;CAG3E,MAAM,SAAS,aAA2B;EACxC,MAAM,QAAQ,cAAc,QAAQ;EACpC,IAAI,CAAC,OAAO;EAGZ,IAAI,aAAa,OAAO,MAAM,SAAS,YAAY,MAAM,SAAS,IAChE,IAAI;GACF,MAAM,OAAO,KAAK,MAAM,MAAM,IAAI;EACpC,QACM,CAEN;EAGF,OAAO,KAAK,KAAK;EACjB,SAAS,SAAS,KAAK;EACvB,SAAS,SAAS,MAAM,MAAM,KAAK;EAEnC,IAAI,UAAU,SAAS,SAAS,MAAM,QAAQ,MAAM,MAAM,KAAK;CACjE;CAEA,IAAI;EAGF,OAAO,MAAM;GACX,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,KAAK;GAC1C,IAAI,MAAM;GAGV,IAAI,QAAQ,YAAY,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;GAC9D,YAAY;GAEZ,IAAI,MAAM,SAAS,IAAI,GAAG;IACxB,YAAY;IACZ,QAAQ,MAAM,MAAM,GAAG,EAAE;GAC3B;GACA,UAAU,UAAU,KAAK;GAGzB,IAAI;GAEJ,QAAQ,SAAS,OAAO,QAAQ,MAAM,OAAO,IAAI;IAC/C,MAAM,WAAW,OAAO,MAAM,GAAG,MAAM;IACvC,SAAS,OAAO,MAAM,SAAS,CAAC;IAChC,MAAM,QAAQ;GAChB;EACF;EAGA,UAAU,UAAU,YAAY,QAAQ,OAAO,CAAC;EAChD,SAAS,OAAO,QAAQ,SAAS,EAAE;EACnC,IAAI,WAAW,IAAI,MAAM,MAAM;CACjC,SACO,OAAgB;EAKrB,KADa,SAAS,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,OAAO,KAAA,OACrE,cAAc,MAAM;CACnC,UACQ;EACN,IAAI;GACF,OAAO,cAAc;EACvB,QACM,CAEN;CACF;CAEA,OAAO;AACT"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
//#region src/Constants/index.constants.js
|
|
2
|
+
var KEYBOARD_SERVICE_KEYS = [
|
|
3
|
+
"Escape",
|
|
4
|
+
"F1",
|
|
5
|
+
"F2",
|
|
6
|
+
"F3",
|
|
7
|
+
"F4",
|
|
8
|
+
"F5",
|
|
9
|
+
"F6",
|
|
10
|
+
"F7",
|
|
11
|
+
"F8",
|
|
12
|
+
"F9",
|
|
13
|
+
"F10",
|
|
14
|
+
"F11",
|
|
15
|
+
"F12",
|
|
16
|
+
"Tab",
|
|
17
|
+
"CapsLock",
|
|
18
|
+
"Shift",
|
|
19
|
+
"Control",
|
|
20
|
+
"Meta",
|
|
21
|
+
"Option",
|
|
22
|
+
"Alt",
|
|
23
|
+
"ContextMenu",
|
|
24
|
+
"ArrowLeft",
|
|
25
|
+
"ArrowRight",
|
|
26
|
+
"ArrowUp",
|
|
27
|
+
"ArrowDown",
|
|
28
|
+
"NumLock",
|
|
29
|
+
"Backspace",
|
|
30
|
+
"Delete",
|
|
31
|
+
"Enter",
|
|
32
|
+
"Return",
|
|
33
|
+
"Insert",
|
|
34
|
+
"Home",
|
|
35
|
+
"End",
|
|
36
|
+
"PageUp",
|
|
37
|
+
"PageDown",
|
|
38
|
+
"PrintScreen",
|
|
39
|
+
"ScrollLock",
|
|
40
|
+
"Pause"
|
|
41
|
+
];
|
|
42
|
+
var MAX_PHONE_LENGTH = 10;
|
|
43
|
+
var MAX_NAME_LENGTH = 128;
|
|
44
|
+
var DEFAULT_DATE_MASK_NO_VALUE_SYMBOL = "_";
|
|
45
|
+
var DEFAULT_COLORS = [
|
|
46
|
+
"#D9C1FF",
|
|
47
|
+
"#FFBAF0",
|
|
48
|
+
"#FFB8CE",
|
|
49
|
+
"#FFC3A2",
|
|
50
|
+
"#FFDB7C",
|
|
51
|
+
"#F9F871",
|
|
52
|
+
"#C3FCF1",
|
|
53
|
+
"#F6F2CB",
|
|
54
|
+
"#E0F8D1",
|
|
55
|
+
"#B1DFFB",
|
|
56
|
+
"#8DECFE",
|
|
57
|
+
"#76F7ED",
|
|
58
|
+
"#8AFEC8"
|
|
59
|
+
];
|
|
60
|
+
var KEYBOARD_KEY_CODES = {
|
|
61
|
+
Backspace: 8,
|
|
62
|
+
Delete: 46,
|
|
63
|
+
ARROW_LEFT: 37,
|
|
64
|
+
ARROW_RIGHT: 39
|
|
65
|
+
};
|
|
66
|
+
var OS = {
|
|
67
|
+
iOS: "iOS",
|
|
68
|
+
Android: "Android",
|
|
69
|
+
WP: "Windows Phone",
|
|
70
|
+
Linux: "Linux",
|
|
71
|
+
Windows: "Windows",
|
|
72
|
+
MacOS: "MacOS",
|
|
73
|
+
Unknown: "unknown"
|
|
74
|
+
};
|
|
75
|
+
//#endregion
|
|
76
|
+
export { DEFAULT_COLORS, DEFAULT_DATE_MASK_NO_VALUE_SYMBOL, KEYBOARD_KEY_CODES, KEYBOARD_SERVICE_KEYS, MAX_NAME_LENGTH, MAX_PHONE_LENGTH, OS };
|
|
77
|
+
|
|
78
|
+
//# sourceMappingURL=index.constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.constants.js","names":[],"sources":["../../../src/Constants/index.constants.js"],"sourcesContent":["export const KEYBOARD_SERVICE_KEYS = [\n \"Escape\",\n \"F1\",\n \"F2\",\n \"F3\",\n \"F4\",\n \"F5\",\n \"F6\",\n \"F7\",\n \"F8\",\n \"F9\",\n \"F10\",\n \"F11\",\n \"F12\",\n \"Tab\",\n \"CapsLock\",\n \"Shift\",\n \"Control\",\n \"Meta\",\n \"Option\",\n \"Alt\",\n \"ContextMenu\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"NumLock\",\n \"Backspace\",\n \"Delete\",\n \"Enter\",\n \"Return\",\n \"Insert\",\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\",\n \"PrintScreen\",\n \"ScrollLock\",\n \"Pause\",\n];\n\nexport const MAX_PHONE_LENGTH = 10;\nexport const MAX_NAME_LENGTH = 128;\n\nexport const DEFAULT_DATE_MASK_NO_VALUE_SYMBOL = \"_\";\n\nexport const DEFAULT_COLORS = [\n \"#D9C1FF\",\n \"#FFBAF0\",\n \"#FFB8CE\",\n \"#FFC3A2\",\n \"#FFDB7C\",\n \"#F9F871\",\n \"#C3FCF1\",\n \"#F6F2CB\",\n \"#E0F8D1\",\n \"#B1DFFB\",\n \"#8DECFE\",\n \"#76F7ED\",\n \"#8AFEC8\",\n];\n\nexport const KEYBOARD_KEY_CODES = {\n Backspace: 8,\n Delete: 46,\n ARROW_LEFT: 37,\n ARROW_RIGHT: 39,\n};\n\nexport const OS = {\n iOS: \"iOS\",\n Android: \"Android\",\n WP: \"Windows Phone\",\n Linux: \"Linux\",\n Windows: \"Windows\",\n MacOS: \"MacOS\",\n Unknown: \"unknown\",\n};\n"],"mappings":";AAAO,IAAM,wBAAwB;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEO,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AAExB,IAAM,oCAAoC;AAE1C,IAAM,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEO,IAAM,qBAAqB;CAChC,WAAW;CACX,QAAQ;CACR,YAAY;CACZ,aAAa;AACf;AAEO,IAAM,KAAK;CAChB,KAAK;CACL,SAAS;CACT,IAAI;CACJ,OAAO;CACP,SAAS;CACT,OAAO;CACP,SAAS;AACX"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React, { useEffect, useState } from "react";
|
|
2
|
+
import ReactDOM from "react-dom";
|
|
3
|
+
//#region src/Functions/Portal.js
|
|
4
|
+
var Portal = ({ children, parentSelector }) => {
|
|
5
|
+
const [container] = useState(() => document.createElement("div"));
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
let parent;
|
|
8
|
+
if (parentSelector) parent = document.querySelector(parentSelector);
|
|
9
|
+
else parent = document.body;
|
|
10
|
+
parent?.appendChild(container);
|
|
11
|
+
return () => {
|
|
12
|
+
parent?.removeChild(container);
|
|
13
|
+
};
|
|
14
|
+
}, []);
|
|
15
|
+
return ReactDOM.createPortal(children, container);
|
|
16
|
+
};
|
|
17
|
+
var Portal_default = React.memo(Portal);
|
|
18
|
+
//#endregion
|
|
19
|
+
export { Portal_default as default };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=Portal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Portal.js","names":[],"sources":["../../../src/Functions/Portal.js"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\n\nimport ReactDOM from \"react-dom\";\n\nconst Portal = ({ children, parentSelector }) => {\n const [container] = useState(() => document.createElement(\"div\"));\n useEffect(() => {\n let parent;\n\n if (parentSelector) parent = document.querySelector(parentSelector);\n else parent = document.body;\n parent?.appendChild(container);\n\n return () => {\n parent?.removeChild(container);\n };\n }, []);\n\n return ReactDOM.createPortal(children, container);\n};\n\nexport default React.memo(Portal);\n"],"mappings":";;;AAIA,IAAM,UAAU,EAAE,UAAU,qBAAqB;CAC/C,MAAM,CAAC,aAAa,eAAe,SAAS,cAAc,KAAK,CAAC;CAChE,gBAAgB;EACd,IAAI;EAEJ,IAAI,gBAAgB,SAAS,SAAS,cAAc,cAAc;OAC7D,SAAS,SAAS;EACvB,QAAQ,YAAY,SAAS;EAE7B,aAAa;GACX,QAAQ,YAAY,SAAS;EAC/B;CACF,GAAG,CAAC,CAAC;CAEL,OAAO,SAAS,aAAa,UAAU,SAAS;AAClD;AAEA,IAAA,iBAAe,MAAM,KAAK,MAAM"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
//#region src/Functions/customEventListener.js
|
|
2
|
+
(function() {
|
|
3
|
+
if (Element.prototype.__customEventListenerPatched) return;
|
|
4
|
+
Element.prototype.__customEventListenerPatched = true;
|
|
5
|
+
Element.prototype._addEventListener = Element.prototype.addEventListener;
|
|
6
|
+
Element.prototype.addEventListener = function(a, b, c) {
|
|
7
|
+
if (c == void 0) c = false;
|
|
8
|
+
this._addEventListener(a, b, c);
|
|
9
|
+
if (!this.eventListenerList) this.eventListenerList = {};
|
|
10
|
+
if (!this.eventListenerList[a]) this.eventListenerList[a] = [];
|
|
11
|
+
this.eventListenerList[a].push({
|
|
12
|
+
listener: b,
|
|
13
|
+
useCapture: c
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
Element.prototype.getEventListeners = function(a) {
|
|
17
|
+
if (!this.eventListenerList) this.eventListenerList = {};
|
|
18
|
+
if (a == void 0) return this.eventListenerList;
|
|
19
|
+
return this.eventListenerList[a];
|
|
20
|
+
};
|
|
21
|
+
Element.prototype.clearEventListeners = function(a) {
|
|
22
|
+
if (!this.eventListenerList) this.eventListenerList = {};
|
|
23
|
+
if (a == void 0) {
|
|
24
|
+
for (const x in this.getEventListeners()) this.clearEventListeners(x);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const el = this.getEventListeners(a);
|
|
28
|
+
if (el == void 0) return;
|
|
29
|
+
for (let i = el.length - 1; i >= 0; --i) {
|
|
30
|
+
const ev = el[i];
|
|
31
|
+
this.removeEventListener(a, ev.listener, ev.useCapture);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
Element.prototype._removeEventListener = Element.prototype.removeEventListener;
|
|
35
|
+
Element.prototype.removeEventListener = function(a, b, c) {
|
|
36
|
+
if (c == void 0) c = false;
|
|
37
|
+
this._removeEventListener(a, b, c);
|
|
38
|
+
if (!this.eventListenerList) this.eventListenerList = {};
|
|
39
|
+
if (!this.eventListenerList[a]) this.eventListenerList[a] = [];
|
|
40
|
+
for (let i = 0; i < this.eventListenerList[a].length; i++) if (this.eventListenerList[a][i].listener == b && this.eventListenerList[a][i].useCapture == c) {
|
|
41
|
+
this.eventListenerList[a].splice(i, 1);
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
if (this.eventListenerList[a].length == 0) delete this.eventListenerList[a];
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
function addEventListener(element, eventName, handler) {
|
|
48
|
+
if (element && element.addEventListener) element.addEventListener(eventName, handler);
|
|
49
|
+
}
|
|
50
|
+
function removeEventListener(element, eventName, handler) {
|
|
51
|
+
if (element && element.removeEventListener) element.removeEventListener(eventName, handler);
|
|
52
|
+
}
|
|
53
|
+
function dispatchCustomEvent(element, eventName, detail = {}) {
|
|
54
|
+
if (element) {
|
|
55
|
+
const event = new CustomEvent(eventName, { detail });
|
|
56
|
+
element.dispatchEvent(event);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
var customEventListener_default = {
|
|
60
|
+
addEventListener,
|
|
61
|
+
removeEventListener,
|
|
62
|
+
dispatchCustomEvent
|
|
63
|
+
};
|
|
64
|
+
//#endregion
|
|
65
|
+
export { addEventListener, customEventListener_default as default, dispatchCustomEvent, removeEventListener };
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=customEventListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customEventListener.js","names":[],"sources":["../../../src/Functions/customEventListener.js"],"sourcesContent":["(function () {\n if (Element.prototype.__customEventListenerPatched) return;\n Element.prototype.__customEventListenerPatched = true;\n\n Element.prototype._addEventListener = Element.prototype.addEventListener;\n Element.prototype.addEventListener = function (a, b, c) {\n if (c == undefined) c = false;\n this._addEventListener(a, b, c);\n if (!this.eventListenerList) this.eventListenerList = {};\n if (!this.eventListenerList[a]) this.eventListenerList[a] = [];\n //this.removeEventListener(a,b,c); // TODO - handle duplicates..\n this.eventListenerList[a].push({ listener: b, useCapture: c });\n };\n\n Element.prototype.getEventListeners = function (a) {\n if (!this.eventListenerList) this.eventListenerList = {};\n if (a == undefined) return this.eventListenerList;\n return this.eventListenerList[a];\n };\n Element.prototype.clearEventListeners = function (a) {\n if (!this.eventListenerList) this.eventListenerList = {};\n if (a == undefined) {\n for (const x in this.getEventListeners()) this.clearEventListeners(x);\n return;\n }\n const el = this.getEventListeners(a);\n if (el == undefined) return;\n for (let i = el.length - 1; i >= 0; --i) {\n const ev = el[i];\n this.removeEventListener(a, ev.listener, ev.useCapture);\n }\n };\n\n Element.prototype._removeEventListener =\n Element.prototype.removeEventListener;\n Element.prototype.removeEventListener = function (a, b, c) {\n if (c == undefined) c = false;\n this._removeEventListener(a, b, c);\n if (!this.eventListenerList) this.eventListenerList = {};\n if (!this.eventListenerList[a]) this.eventListenerList[a] = [];\n\n // Find the event in the list\n for (let i = 0; i < this.eventListenerList[a].length; i++) {\n if (\n this.eventListenerList[a][i].listener == b &&\n this.eventListenerList[a][i].useCapture == c\n ) {\n // Hmm..\n this.eventListenerList[a].splice(i, 1);\n break;\n }\n }\n if (this.eventListenerList[a].length == 0) delete this.eventListenerList[a];\n };\n})();\n\n/**\n * Добавляет обработчик события к элементу\n * @param {HTMLElement} element - DOM элемент\n * @param {string} eventName - Название события\n * @param {Function} handler - Функция-обработчик\n */\nexport function addEventListener(element, eventName, handler) {\n if (element && element.addEventListener) {\n element.addEventListener(eventName, handler);\n }\n}\n\n/**\n * Удаляет обработчик события с элемента\n * @param {HTMLElement} element - DOM элемент\n * @param {string} eventName - Название события\n * @param {Function} handler - Функция-обработчик\n */\nexport function removeEventListener(element, eventName, handler) {\n if (element && element.removeEventListener) {\n element.removeEventListener(eventName, handler);\n }\n}\n\n/**\n * Создает и отправляет кастомное событие\n * @param {HTMLElement} element - DOM элемент\n * @param {string} eventName - Название события\n * @param {Object} detail - Данные события\n */\nexport function dispatchCustomEvent(element, eventName, detail = {}) {\n if (element) {\n const event = new CustomEvent(eventName, { detail });\n element.dispatchEvent(event);\n }\n}\n\n// Экспортируем объект со всеми функциями для обратной совместимости\nexport default {\n addEventListener,\n removeEventListener,\n dispatchCustomEvent\n};\n"],"mappings":";CAAC,WAAY;CACX,IAAI,QAAQ,UAAU,8BAA8B;CACpD,QAAQ,UAAU,+BAA+B;CAEjD,QAAQ,UAAU,oBAAoB,QAAQ,UAAU;CACxD,QAAQ,UAAU,mBAAmB,SAAU,GAAG,GAAG,GAAG;EACtD,IAAI,KAAK,KAAA,GAAW,IAAI;EACxB,KAAK,kBAAkB,GAAG,GAAG,CAAC;EAC9B,IAAI,CAAC,KAAK,mBAAmB,KAAK,oBAAoB,CAAC;EACvD,IAAI,CAAC,KAAK,kBAAkB,IAAI,KAAK,kBAAkB,KAAK,CAAC;EAE7D,KAAK,kBAAkB,EAAC,CAAE,KAAK;GAAE,UAAU;GAAG,YAAY;EAAE,CAAC;CAC/D;CAEA,QAAQ,UAAU,oBAAoB,SAAU,GAAG;EACjD,IAAI,CAAC,KAAK,mBAAmB,KAAK,oBAAoB,CAAC;EACvD,IAAI,KAAK,KAAA,GAAW,OAAO,KAAK;EAChC,OAAO,KAAK,kBAAkB;CAChC;CACA,QAAQ,UAAU,sBAAsB,SAAU,GAAG;EACnD,IAAI,CAAC,KAAK,mBAAmB,KAAK,oBAAoB,CAAC;EACvD,IAAI,KAAK,KAAA,GAAW;GAClB,KAAA,MAAW,KAAK,KAAK,kBAAkB,GAAG,KAAK,oBAAoB,CAAC;GACpE;EACF;EACA,MAAM,KAAK,KAAK,kBAAkB,CAAC;EACnC,IAAI,MAAM,KAAA,GAAW;EACrB,KAAA,IAAS,IAAI,GAAG,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;GACvC,MAAM,KAAK,GAAG;GACd,KAAK,oBAAoB,GAAG,GAAG,UAAU,GAAG,UAAU;EACxD;CACF;CAEA,QAAQ,UAAU,uBAChB,QAAQ,UAAU;CACpB,QAAQ,UAAU,sBAAsB,SAAU,GAAG,GAAG,GAAG;EACzD,IAAI,KAAK,KAAA,GAAW,IAAI;EACxB,KAAK,qBAAqB,GAAG,GAAG,CAAC;EACjC,IAAI,CAAC,KAAK,mBAAmB,KAAK,oBAAoB,CAAC;EACvD,IAAI,CAAC,KAAK,kBAAkB,IAAI,KAAK,kBAAkB,KAAK,CAAC;EAG7D,KAAA,IAAS,IAAI,GAAG,IAAI,KAAK,kBAAkB,EAAC,CAAE,QAAQ,KACpD,IACE,KAAK,kBAAkB,EAAC,CAAE,EAAC,CAAE,YAAY,KACzC,KAAK,kBAAkB,EAAC,CAAE,EAAC,CAAE,cAAc,GAC3C;GAEA,KAAK,kBAAkB,EAAC,CAAE,OAAO,GAAG,CAAC;GACrC;EACF;EAEF,IAAI,KAAK,kBAAkB,EAAC,CAAE,UAAU,GAAG,OAAO,KAAK,kBAAkB;CAC3E;AACF,EAAA,CAAG;AAQI,SAAS,iBAAiB,SAAS,WAAW,SAAS;CAC5D,IAAI,WAAW,QAAQ,kBACrB,QAAQ,iBAAiB,WAAW,OAAO;AAE/C;AAQO,SAAS,oBAAoB,SAAS,WAAW,SAAS;CAC/D,IAAI,WAAW,QAAQ,qBACrB,QAAQ,oBAAoB,WAAW,OAAO;AAElD;AAQO,SAAS,oBAAoB,SAAS,WAAW,SAAS,CAAC,GAAG;CACnE,IAAI,SAAS;EACX,MAAM,QAAQ,IAAI,YAAY,WAAW,EAAE,OAAO,CAAC;EACnD,QAAQ,cAAc,KAAK;CAC7B;AACF;AAGA,IAAA,8BAAe;CACb;CACA;CACA;AACF"}
|