@dynamic-framework/ui-react 2.9.0 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/css/dynamic-ui.css +1 -1
- package/dist/css/dynamic-ui.min.css +1 -1
- package/dist/esm/components/DAlert/DAlert.js +16 -0
- package/dist/esm/components/DAlert/DAlert.js.map +1 -0
- package/dist/esm/components/DAlert/index.js +6 -0
- package/dist/esm/components/DAlert/index.js.map +1 -0
- package/dist/esm/components/DAvatar/DAvatar.js +23 -0
- package/dist/esm/components/DAvatar/DAvatar.js.map +1 -0
- package/dist/esm/components/DAvatar/index.js +6 -0
- package/dist/esm/components/DAvatar/index.js.map +1 -0
- package/dist/esm/components/DBadge/DBadge.js +31 -0
- package/dist/esm/components/DBadge/DBadge.js.map +1 -0
- package/dist/esm/components/DBadge/index.js +6 -0
- package/dist/esm/components/DBadge/index.js.map +1 -0
- package/dist/esm/components/DBox/DBox.js +9 -0
- package/dist/esm/components/DBox/DBox.js.map +1 -0
- package/dist/esm/components/DBox/index.js +6 -0
- package/dist/esm/components/DBox/index.js.map +1 -0
- package/dist/esm/components/DBoxFile/DBoxFile.js +26 -0
- package/dist/esm/components/DBoxFile/DBoxFile.js.map +1 -0
- package/dist/esm/components/DBoxFile/index.js +6 -0
- package/dist/esm/components/DBoxFile/index.js.map +1 -0
- package/dist/esm/components/DBoxFile/useDBoxFile.js +236 -0
- package/dist/esm/components/DBoxFile/useDBoxFile.js.map +1 -0
- package/dist/esm/components/DBoxFile/utils.js +127 -0
- package/dist/esm/components/DBoxFile/utils.js.map +1 -0
- package/dist/esm/components/DButton/DButton.js +84 -0
- package/dist/esm/components/DButton/DButton.js.map +1 -0
- package/dist/esm/components/DButton/index.js +6 -0
- package/dist/esm/components/DButton/index.js.map +1 -0
- package/dist/esm/components/DButtonIcon/DButtonIcon.js +52 -0
- package/dist/esm/components/DButtonIcon/DButtonIcon.js.map +1 -0
- package/dist/esm/components/DButtonIcon/index.js +6 -0
- package/dist/esm/components/DButtonIcon/index.js.map +1 -0
- package/dist/esm/components/DButtonIcon/warnMissingAccessibleName.js +40 -0
- package/dist/esm/components/DButtonIcon/warnMissingAccessibleName.js.map +1 -0
- package/dist/esm/components/DCard/DCard.js +17 -0
- package/dist/esm/components/DCard/DCard.js.map +1 -0
- package/dist/esm/components/DCard/components/DCardBody.js +9 -0
- package/dist/esm/components/DCard/components/DCardBody.js.map +1 -0
- package/dist/esm/components/DCard/components/DCardFooter.js +9 -0
- package/dist/esm/components/DCard/components/DCardFooter.js.map +1 -0
- package/dist/esm/components/DCard/components/DCardHeader.js +9 -0
- package/dist/esm/components/DCard/components/DCardHeader.js.map +1 -0
- package/dist/esm/components/DCard/index.js +9 -0
- package/dist/esm/components/DCard/index.js.map +1 -0
- package/dist/esm/components/DCarousel/DCarousel.js +39 -0
- package/dist/esm/components/DCarousel/DCarousel.js.map +1 -0
- package/dist/esm/components/DCarousel/components/DCarouselSlide.js +12 -0
- package/dist/esm/components/DCarousel/components/DCarouselSlide.js.map +1 -0
- package/dist/esm/components/DCarousel/index.js +7 -0
- package/dist/esm/components/DCarousel/index.js.map +1 -0
- package/dist/esm/components/DChip/DChip.js +18 -0
- package/dist/esm/components/DChip/DChip.js.map +1 -0
- package/dist/esm/components/DChip/index.js +6 -0
- package/dist/esm/components/DChip/index.js.map +1 -0
- package/dist/esm/components/DCollapse/DCollapse.js +30 -0
- package/dist/esm/components/DCollapse/DCollapse.js.map +1 -0
- package/dist/esm/components/DCollapse/index.js +6 -0
- package/dist/esm/components/DCollapse/index.js.map +1 -0
- package/dist/esm/components/DConfirmModal/DConfirmModalContainer.js +59 -0
- package/dist/esm/components/DConfirmModal/DConfirmModalContainer.js.map +1 -0
- package/dist/esm/components/DConfirmModal/DConfirmModalUI.js +39 -0
- package/dist/esm/components/DConfirmModal/DConfirmModalUI.js.map +1 -0
- package/dist/esm/components/DConfirmModal/confirmModalStore.js +38 -0
- package/dist/esm/components/DConfirmModal/confirmModalStore.js.map +1 -0
- package/dist/esm/components/DCreditCard/DCreditCard.js +15 -0
- package/dist/esm/components/DCreditCard/DCreditCard.js.map +1 -0
- package/dist/esm/components/DCreditCard/index.js +6 -0
- package/dist/esm/components/DCreditCard/index.js.map +1 -0
- package/dist/esm/components/DCurrencyText/DCurrencyText.js +10 -0
- package/dist/esm/components/DCurrencyText/DCurrencyText.js.map +1 -0
- package/dist/esm/components/DCurrencyText/index.js +6 -0
- package/dist/esm/components/DCurrencyText/index.js.map +1 -0
- package/dist/esm/components/DDataStateWrapper/DDataStateWrapper.js +35 -0
- package/dist/esm/components/DDataStateWrapper/DDataStateWrapper.js.map +1 -0
- package/dist/esm/components/DDataStateWrapper/components/EmptyState.js +10 -0
- package/dist/esm/components/DDataStateWrapper/components/EmptyState.js.map +1 -0
- package/dist/esm/components/DDataStateWrapper/components/ErrorState.js +10 -0
- package/dist/esm/components/DDataStateWrapper/components/ErrorState.js.map +1 -0
- package/dist/esm/components/DDataStateWrapper/components/LoadingState.js +8 -0
- package/dist/esm/components/DDataStateWrapper/components/LoadingState.js.map +1 -0
- package/dist/esm/components/DDataStateWrapper/index.js +9 -0
- package/dist/esm/components/DDataStateWrapper/index.js.map +1 -0
- package/dist/esm/components/DDatePicker/DDatePicker.js +54 -0
- package/dist/esm/components/DDatePicker/DDatePicker.js.map +1 -0
- package/dist/esm/components/DDatePicker/components/DDatePickerHeaderSelector.js +50 -0
- package/dist/esm/components/DDatePicker/components/DDatePickerHeaderSelector.js.map +1 -0
- package/dist/esm/components/DDatePicker/components/DDatePickerInput.js +16 -0
- package/dist/esm/components/DDatePicker/components/DDatePickerInput.js.map +1 -0
- package/dist/esm/components/DDatePicker/components/DDatePickerTime.js +11 -0
- package/dist/esm/components/DDatePicker/components/DDatePickerTime.js.map +1 -0
- package/dist/esm/components/DDatePicker/index.js +6 -0
- package/dist/esm/components/DDatePicker/index.js.map +1 -0
- package/dist/esm/components/DDropdown/DDropdown.js +315 -0
- package/dist/esm/components/DDropdown/DDropdown.js.map +1 -0
- package/dist/esm/components/DDropdown/index.js +6 -0
- package/dist/esm/components/DDropdown/index.js.map +1 -0
- package/dist/esm/components/DErrorBoundary/DErrorBoundary.js +22 -0
- package/dist/esm/components/DErrorBoundary/DErrorBoundary.js.map +1 -0
- package/dist/esm/components/DErrorBoundary/components/DefaultErrorBoundary.js +10 -0
- package/dist/esm/components/DErrorBoundary/components/DefaultErrorBoundary.js.map +1 -0
- package/dist/esm/components/DErrorBoundary/index.js +7 -0
- package/dist/esm/components/DErrorBoundary/index.js.map +1 -0
- package/dist/esm/components/DIcon/DIcon.js +21 -0
- package/dist/esm/components/DIcon/DIcon.js.map +1 -0
- package/dist/esm/components/DIcon/index.js +6 -0
- package/dist/esm/components/DIcon/index.js.map +1 -0
- package/dist/esm/components/DIconBase/DIconBase.js +146 -0
- package/dist/esm/components/DIconBase/DIconBase.js.map +1 -0
- package/dist/esm/components/DIconBase/index.js +6 -0
- package/dist/esm/components/DIconBase/index.js.map +1 -0
- package/dist/esm/components/DIconBase/resolveIconFromRegistry.js +20 -0
- package/dist/esm/components/DIconBase/resolveIconFromRegistry.js.map +1 -0
- package/dist/esm/components/DIconBase/warnUnknownIcon.js +59 -0
- package/dist/esm/components/DIconBase/warnUnknownIcon.js.map +1 -0
- package/dist/esm/components/DInput/DInput.js +83 -0
- package/dist/esm/components/DInput/DInput.js.map +1 -0
- package/dist/esm/components/DInput/index.js +6 -0
- package/dist/esm/components/DInput/index.js.map +1 -0
- package/dist/esm/components/DInputCheck/DInputCheck.js +57 -0
- package/dist/esm/components/DInputCheck/DInputCheck.js.map +1 -0
- package/dist/esm/components/DInputCheck/index.js +6 -0
- package/dist/esm/components/DInputCheck/index.js.map +1 -0
- package/dist/esm/components/DInputCounter/DInputCounter.js +49 -0
- package/dist/esm/components/DInputCounter/DInputCounter.js.map +1 -0
- package/dist/esm/components/DInputCounter/index.js +6 -0
- package/dist/esm/components/DInputCounter/index.js.map +1 -0
- package/dist/esm/components/DInputCurrency/DInputCurrency.js +20 -0
- package/dist/esm/components/DInputCurrency/DInputCurrency.js.map +1 -0
- package/dist/esm/components/DInputCurrency/index.js +6 -0
- package/dist/esm/components/DInputCurrency/index.js.map +1 -0
- package/dist/esm/components/DInputMask/DInputMask.js +13 -0
- package/dist/esm/components/DInputMask/DInputMask.js.map +1 -0
- package/dist/esm/components/DInputMask/index.js +6 -0
- package/dist/esm/components/DInputMask/index.js.map +1 -0
- package/dist/esm/components/DInputPassword/DInputPassword.js +24 -0
- package/dist/esm/components/DInputPassword/DInputPassword.js.map +1 -0
- package/dist/esm/components/DInputPassword/index.js +6 -0
- package/dist/esm/components/DInputPassword/index.js.map +1 -0
- package/dist/esm/components/DInputPhone/DInputPhone.js +96 -0
- package/dist/esm/components/DInputPhone/DInputPhone.js.map +1 -0
- package/dist/esm/components/DInputPhone/index.js +6 -0
- package/dist/esm/components/DInputPhone/index.js.map +1 -0
- package/dist/esm/components/DInputPin/DInputPin.js +86 -0
- package/dist/esm/components/DInputPin/DInputPin.js.map +1 -0
- package/dist/esm/components/DInputPin/index.js +6 -0
- package/dist/esm/components/DInputPin/index.js.map +1 -0
- package/dist/esm/components/DInputRange/DInputRange.js +46 -0
- package/dist/esm/components/DInputRange/DInputRange.js.map +1 -0
- package/dist/esm/components/DInputRange/index.js +6 -0
- package/dist/esm/components/DInputRange/index.js.map +1 -0
- package/dist/esm/components/DInputSearch/DInputSearch.js +57 -0
- package/dist/esm/components/DInputSearch/DInputSearch.js.map +1 -0
- package/dist/esm/components/DInputSearch/index.js +6 -0
- package/dist/esm/components/DInputSearch/index.js.map +1 -0
- package/dist/esm/components/DInputSelect/DInputSelect.js +90 -0
- package/dist/esm/components/DInputSelect/DInputSelect.js.map +1 -0
- package/dist/esm/components/DInputSelect/index.js +6 -0
- package/dist/esm/components/DInputSelect/index.js.map +1 -0
- package/dist/esm/components/DInputSwitch/DInputSwitch.js +32 -0
- package/dist/esm/components/DInputSwitch/DInputSwitch.js.map +1 -0
- package/dist/esm/components/DInputSwitch/index.js +6 -0
- package/dist/esm/components/DInputSwitch/index.js.map +1 -0
- package/dist/esm/components/DLayout/DLayout.js +22 -0
- package/dist/esm/components/DLayout/DLayout.js.map +1 -0
- package/dist/esm/components/DLayout/components/DLayoutPane.js +16 -0
- package/dist/esm/components/DLayout/components/DLayoutPane.js.map +1 -0
- package/dist/esm/components/DLayout/index.js +7 -0
- package/dist/esm/components/DLayout/index.js.map +1 -0
- package/dist/esm/components/DListGroup/DListGroup.js +31 -0
- package/dist/esm/components/DListGroup/DListGroup.js.map +1 -0
- package/dist/esm/components/DListGroup/components/DListGroupItem.js +41 -0
- package/dist/esm/components/DListGroup/components/DListGroupItem.js.map +1 -0
- package/dist/esm/components/DListGroup/index.js +7 -0
- package/dist/esm/components/DListGroup/index.js.map +1 -0
- package/dist/esm/components/DModal/DModal.js +37 -0
- package/dist/esm/components/DModal/DModal.js.map +1 -0
- package/dist/esm/components/DModal/components/DModalBody.js +9 -0
- package/dist/esm/components/DModal/components/DModalBody.js.map +1 -0
- package/dist/esm/components/DModal/components/DModalFooter.js +14 -0
- package/dist/esm/components/DModal/components/DModalFooter.js.map +1 -0
- package/dist/esm/components/DModal/components/DModalHeader.js +15 -0
- package/dist/esm/components/DModal/components/DModalHeader.js.map +1 -0
- package/dist/esm/components/DModal/index.js +9 -0
- package/dist/esm/components/DModal/index.js.map +1 -0
- package/dist/esm/components/DOffcanvas/DOffcanvas.js +82 -0
- package/dist/esm/components/DOffcanvas/DOffcanvas.js.map +1 -0
- package/dist/esm/components/DOffcanvas/components/DOffcanvasBody.js +9 -0
- package/dist/esm/components/DOffcanvas/components/DOffcanvasBody.js.map +1 -0
- package/dist/esm/components/DOffcanvas/components/DOffcanvasFooter.js +14 -0
- package/dist/esm/components/DOffcanvas/components/DOffcanvasFooter.js.map +1 -0
- package/dist/esm/components/DOffcanvas/components/DOffcanvasHeader.js +15 -0
- package/dist/esm/components/DOffcanvas/components/DOffcanvasHeader.js.map +1 -0
- package/dist/esm/components/DOffcanvas/index.js +9 -0
- package/dist/esm/components/DOffcanvas/index.js.map +1 -0
- package/dist/esm/components/DOtp/DOtp.js +26 -0
- package/dist/esm/components/DOtp/DOtp.js.map +1 -0
- package/dist/esm/components/DOtp/components/OtpCountdown.js +12 -0
- package/dist/esm/components/DOtp/components/OtpCountdown.js.map +1 -0
- package/dist/esm/components/DOtp/index.js +6 -0
- package/dist/esm/components/DOtp/index.js.map +1 -0
- package/dist/esm/components/DPaginator/DPaginator.js +12 -0
- package/dist/esm/components/DPaginator/DPaginator.js.map +1 -0
- package/dist/esm/components/DPaginator/index.js +6 -0
- package/dist/esm/components/DPaginator/index.js.map +1 -0
- package/dist/esm/components/DPasswordStrengthMeter/DPasswordStrengthMeter.js +27 -0
- package/dist/esm/components/DPasswordStrengthMeter/DPasswordStrengthMeter.js.map +1 -0
- package/dist/esm/components/DPasswordStrengthMeter/PasswordCheckItem.js +10 -0
- package/dist/esm/components/DPasswordStrengthMeter/PasswordCheckItem.js.map +1 -0
- package/dist/esm/components/DPasswordStrengthMeter/PasswordCheckList.js +41 -0
- package/dist/esm/components/DPasswordStrengthMeter/PasswordCheckList.js.map +1 -0
- package/dist/esm/components/DPasswordStrengthMeter/PasswordStrength.js +23 -0
- package/dist/esm/components/DPasswordStrengthMeter/PasswordStrength.js.map +1 -0
- package/dist/esm/components/DPasswordStrengthMeter/index.js +6 -0
- package/dist/esm/components/DPasswordStrengthMeter/index.js.map +1 -0
- package/dist/esm/components/DPopover/DPopover.js +49 -0
- package/dist/esm/components/DPopover/DPopover.js.map +1 -0
- package/dist/esm/components/DPopover/index.js +6 -0
- package/dist/esm/components/DPopover/index.js.map +1 -0
- package/dist/esm/components/DProgress/DProgress.js +16 -0
- package/dist/esm/components/DProgress/DProgress.js.map +1 -0
- package/dist/esm/components/DProgress/index.js +6 -0
- package/dist/esm/components/DProgress/index.js.map +1 -0
- package/dist/esm/components/DSelect/DSelect.js +60 -0
- package/dist/esm/components/DSelect/DSelect.js.map +1 -0
- package/dist/esm/components/DSelect/components/DSelectClearIndicator.js +12 -0
- package/dist/esm/components/DSelect/components/DSelectClearIndicator.js.map +1 -0
- package/dist/esm/components/DSelect/components/DSelectDropdownIndicator.js +12 -0
- package/dist/esm/components/DSelect/components/DSelectDropdownIndicator.js.map +1 -0
- package/dist/esm/components/DSelect/components/DSelectLoadingIndicator.js +12 -0
- package/dist/esm/components/DSelect/components/DSelectLoadingIndicator.js.map +1 -0
- package/dist/esm/components/DSelect/components/DSelectMultiValueRemove.js +12 -0
- package/dist/esm/components/DSelect/components/DSelectMultiValueRemove.js.map +1 -0
- package/dist/esm/components/DSelect/components/DSelectOptionCheck.js +14 -0
- package/dist/esm/components/DSelect/components/DSelectOptionCheck.js.map +1 -0
- package/dist/esm/components/DSelect/components/DSelectOptionEmoji.js +14 -0
- package/dist/esm/components/DSelect/components/DSelectOptionEmoji.js.map +1 -0
- package/dist/esm/components/DSelect/components/DSelectOptionIcon.js +15 -0
- package/dist/esm/components/DSelect/components/DSelectOptionIcon.js.map +1 -0
- package/dist/esm/components/DSelect/components/DSelectPlaceholder.js +14 -0
- package/dist/esm/components/DSelect/components/DSelectPlaceholder.js.map +1 -0
- package/dist/esm/components/DSelect/components/DSelectSingleValueEmoji.js +15 -0
- package/dist/esm/components/DSelect/components/DSelectSingleValueEmoji.js.map +1 -0
- package/dist/esm/components/DSelect/components/DSelectSingleValueEmojiText.js +15 -0
- package/dist/esm/components/DSelect/components/DSelectSingleValueEmojiText.js.map +1 -0
- package/dist/esm/components/DSelect/components/DSelectSingleValueIconText.js +16 -0
- package/dist/esm/components/DSelect/components/DSelectSingleValueIconText.js.map +1 -0
- package/dist/esm/components/DSelect/index.js +6 -0
- package/dist/esm/components/DSelect/index.js.map +1 -0
- package/dist/esm/components/DStepper/DStepper.js +13 -0
- package/dist/esm/components/DStepper/DStepper.js.map +1 -0
- package/dist/esm/components/DStepper/index.js +6 -0
- package/dist/esm/components/DStepper/index.js.map +1 -0
- package/dist/esm/components/DStepperDesktop/DStepperDesktop.js +27 -0
- package/dist/esm/components/DStepperDesktop/DStepperDesktop.js.map +1 -0
- package/dist/esm/components/DStepperDesktop/index.js +6 -0
- package/dist/esm/components/DStepperDesktop/index.js.map +1 -0
- package/dist/esm/components/DStepperMobile/DStepperMobile.js +37 -0
- package/dist/esm/components/DStepperMobile/DStepperMobile.js.map +1 -0
- package/dist/esm/components/DStepperMobile/index.js +6 -0
- package/dist/esm/components/DStepperMobile/index.js.map +1 -0
- package/dist/esm/components/DTabs/DTabs.js +117 -0
- package/dist/esm/components/DTabs/DTabs.js.map +1 -0
- package/dist/esm/components/DTabs/TabContext.js +13 -0
- package/dist/esm/components/DTabs/TabContext.js.map +1 -0
- package/dist/esm/components/DTabs/components/DTabContent.js +14 -0
- package/dist/esm/components/DTabs/components/DTabContent.js.map +1 -0
- package/dist/esm/components/DTabs/index.js +8 -0
- package/dist/esm/components/DTabs/index.js.map +1 -0
- package/dist/esm/components/DTimeline/DTimeline.js +12 -0
- package/dist/esm/components/DTimeline/DTimeline.js.map +1 -0
- package/dist/esm/components/DTimeline/index.js +6 -0
- package/dist/esm/components/DTimeline/index.js.map +1 -0
- package/dist/esm/components/DToast/DToast.js +15 -0
- package/dist/esm/components/DToast/DToast.js.map +1 -0
- package/dist/esm/components/DToast/components/DToastBody.js +9 -0
- package/dist/esm/components/DToast/components/DToastBody.js.map +1 -0
- package/dist/esm/components/DToast/components/DToastHeader.js +9 -0
- package/dist/esm/components/DToast/components/DToastHeader.js.map +1 -0
- package/dist/esm/components/DToast/index.js +8 -0
- package/dist/esm/components/DToast/index.js.map +1 -0
- package/dist/esm/components/DToastContainer/DToastContainer.js +9 -0
- package/dist/esm/components/DToastContainer/DToastContainer.js.map +1 -0
- package/dist/esm/components/DToastContainer/index.js +7 -0
- package/dist/esm/components/DToastContainer/index.js.map +1 -0
- package/dist/esm/components/DToastContainer/useDToast.js +58 -0
- package/dist/esm/components/DToastContainer/useDToast.js.map +1 -0
- package/dist/esm/components/DTooltip/DTooltip.js +51 -0
- package/dist/esm/components/DTooltip/DTooltip.js.map +1 -0
- package/dist/esm/components/DTooltip/index.js +6 -0
- package/dist/esm/components/DTooltip/index.js.map +1 -0
- package/dist/esm/components/DVoucher/DVoucher.js +55 -0
- package/dist/esm/components/DVoucher/DVoucher.js.map +1 -0
- package/dist/esm/components/DVoucher/hooks/useScreenshot.js +30 -0
- package/dist/esm/components/DVoucher/hooks/useScreenshot.js.map +1 -0
- package/dist/esm/components/DVoucher/hooks/useScreenshotDownload.js +30 -0
- package/dist/esm/components/DVoucher/hooks/useScreenshotDownload.js.map +1 -0
- package/dist/esm/components/DVoucher/hooks/useScreenshotWebShare.js +27 -0
- package/dist/esm/components/DVoucher/hooks/useScreenshotWebShare.js.map +1 -0
- package/dist/esm/components/DVoucher/index.js +9 -0
- package/dist/esm/components/DVoucher/index.js.map +1 -0
- package/dist/esm/components/config.js +14 -0
- package/dist/esm/components/config.js.map +1 -0
- package/dist/esm/contexts/DContext.js +124 -0
- package/dist/esm/contexts/DContext.js.map +1 -0
- package/dist/esm/contexts/DPortalContext.js +128 -0
- package/dist/esm/contexts/DPortalContext.js.map +1 -0
- package/dist/esm/hooks/useConfirmModal.js +63 -0
- package/dist/esm/hooks/useConfirmModal.js.map +1 -0
- package/dist/esm/hooks/useCountdown.js +45 -0
- package/dist/esm/hooks/useCountdown.js.map +1 -0
- package/dist/esm/hooks/useDisableBodyScrollEffect.js +52 -0
- package/dist/esm/hooks/useDisableBodyScrollEffect.js.map +1 -0
- package/dist/esm/hooks/useDisableInputWheel.js +17 -0
- package/dist/esm/hooks/useDisableInputWheel.js.map +1 -0
- package/dist/esm/hooks/useFormatCurrency.js +16 -0
- package/dist/esm/hooks/useFormatCurrency.js.map +1 -0
- package/dist/esm/hooks/useInputCurrency.js +76 -0
- package/dist/esm/hooks/useInputCurrency.js.map +1 -0
- package/dist/esm/hooks/useItemSelection.js +35 -0
- package/dist/esm/hooks/useItemSelection.js.map +1 -0
- package/dist/esm/hooks/useMediaBreakpointUp.js +30 -0
- package/dist/esm/hooks/useMediaBreakpointUp.js.map +1 -0
- package/dist/esm/hooks/useMediaQuery.js +11 -0
- package/dist/esm/hooks/useMediaQuery.js.map +1 -0
- package/dist/esm/hooks/useOtp.js +107 -0
- package/dist/esm/hooks/useOtp.js.map +1 -0
- package/dist/esm/hooks/usePortal.js +26 -0
- package/dist/esm/hooks/usePortal.js.map +1 -0
- package/dist/esm/hooks/useProvidedRefOrCreate.js +24 -0
- package/dist/esm/hooks/useProvidedRefOrCreate.js.map +1 -0
- package/dist/esm/hooks/useResponsiveProp.js +50 -0
- package/dist/esm/hooks/useResponsiveProp.js.map +1 -0
- package/dist/esm/hooks/useStackState.js +40 -0
- package/dist/esm/hooks/useStackState.js.map +1 -0
- package/dist/esm/icons/coreIcons.js +55 -0
- package/dist/esm/icons/coreIcons.js.map +1 -0
- package/dist/esm/index.js +98 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/utils/attr-accept.js +38 -0
- package/dist/esm/utils/attr-accept.js.map +1 -0
- package/dist/esm/utils/buildUrl.js +57 -0
- package/dist/esm/utils/buildUrl.js.map +1 -0
- package/dist/esm/utils/changeQueryString.js +19 -0
- package/dist/esm/utils/changeQueryString.js.map +1 -0
- package/dist/esm/utils/configureI18n.js +20 -0
- package/dist/esm/utils/configureI18n.js.map +1 -0
- package/dist/esm/utils/formatCurrency.js +8 -0
- package/dist/esm/utils/formatCurrency.js.map +1 -0
- package/dist/esm/utils/getCssVariable.js +7 -0
- package/dist/esm/utils/getCssVariable.js.map +1 -0
- package/dist/esm/utils/getKeyboardFocusableElements.js +11 -0
- package/dist/esm/utils/getKeyboardFocusableElements.js.map +1 -0
- package/dist/esm/utils/getQueryString.js +8 -0
- package/dist/esm/utils/getQueryString.js.map +1 -0
- package/dist/esm/utils/mediaQuery.js +13 -0
- package/dist/esm/utils/mediaQuery.js.map +1 -0
- package/dist/esm/utils/sanitizeHref.js +67 -0
- package/dist/esm/utils/sanitizeHref.js.map +1 -0
- package/dist/esm/utils/validatePhoneNumber.js +14 -0
- package/dist/esm/utils/validatePhoneNumber.js.map +1 -0
- package/dist/icons-core.json +33 -0
- package/dist/index.esm.js +287 -22
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +287 -21
- package/dist/index.js.map +1 -1
- package/dist/types/components/DButtonIcon/warnMissingAccessibleName.d.ts +18 -0
- package/dist/types/components/DIcon/DIcon.d.ts +8 -0
- package/dist/types/components/DIconBase/DIconBase.d.ts +43 -1
- package/dist/types/components/DIconBase/resolveIconFromRegistry.d.ts +14 -0
- package/dist/types/components/DIconBase/warnUnknownIcon.d.ts +13 -0
- package/dist/types/components/DInputRange/DInputRange.d.ts +1 -1
- package/dist/types/components/config.d.ts +10 -0
- package/dist/types/icons/coreIcons.d.ts +24 -0
- package/dist/types/icons/index.d.ts +2 -0
- package/dist/types/index.d.ts +1 -0
- package/package.json +4 -4
- package/dist/types/components/DVoucher/hooks/useScreenshotDownload.spec.d.ts +0 -1
- package/dist/types/components/DVoucher/hooks/useScreenshotWebShare.spec.d.ts +0 -1
- package/dist/types/hooks/tests/useCountdown.spec.d.ts +0 -1
- package/dist/types/hooks/tests/useDisableBodyScrollEffect.spec.d.ts +0 -1
- package/dist/types/hooks/tests/useDisableInputWheel.spec.d.ts +0 -1
- package/dist/types/hooks/tests/useFormatCurrency.spec.d.ts +0 -1
- package/dist/types/hooks/tests/useInputCurrency.spec.d.ts +0 -1
- package/dist/types/hooks/tests/useItemSelection.spec.d.ts +0 -1
- package/dist/types/hooks/tests/useMediaBreakpointUp.spec.d.ts +0 -1
- package/dist/types/hooks/tests/useMediaQuery.spec.d.ts +0 -1
- package/dist/types/hooks/tests/usePortal.spec.d.ts +0 -1
- package/dist/types/hooks/tests/useProvidedRefOrCreate.spec.d.ts +0 -1
- package/dist/types/hooks/tests/useStackState.spec.d.ts +0 -1
- package/dist/types/utils/tests/attr-accept.spec.d.ts +0 -1
- package/dist/types/utils/tests/buildUrl.spec.d.ts +0 -1
- package/dist/types/utils/tests/changeQueryString.spec.d.ts +0 -1
- package/dist/types/utils/tests/configureI18n.spec.d.ts +0 -1
- package/dist/types/utils/tests/formatCurrency.spec.d.ts +0 -1
- package/dist/types/utils/tests/getCssVariable.spec.d.ts +0 -1
- package/dist/types/utils/tests/getKeyboardFocusableElements.spec.d.ts +0 -1
- package/dist/types/utils/tests/getQueryString.spec.d.ts +0 -1
- package/dist/types/utils/tests/mediaQuery.spec.d.ts +0 -1
- package/dist/types/utils/tests/sanitizeHref.spec.d.ts +0 -1
- package/dist/types/utils/tests/validatePhoneNumber.spec.d.ts +0 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { createContext, useCallback, useMemo, useEffect, useContext } from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
import { AnimatePresence, motion } from 'framer-motion';
|
|
5
|
+
import useDisableBodyScrollEffect from '../hooks/useDisableBodyScrollEffect.js';
|
|
6
|
+
import usePortal from '../hooks/usePortal.js';
|
|
7
|
+
import useStackState from '../hooks/useStackState.js';
|
|
8
|
+
import getKeyboardFocusableElements from '../utils/getKeyboardFocusableElements.js';
|
|
9
|
+
|
|
10
|
+
const DPortalContext = createContext(undefined);
|
|
11
|
+
function DPortalContextProvider({ portalName, children, availablePortals, }) {
|
|
12
|
+
const { created } = usePortal(portalName);
|
|
13
|
+
const [stack, { push, pop }] = useStackState([]);
|
|
14
|
+
useDisableBodyScrollEffect(Boolean(stack.length));
|
|
15
|
+
const openPortal = useCallback(
|
|
16
|
+
// eslint-disable-next-line prefer-arrow-callback
|
|
17
|
+
function openPortalImpl(name, payload) {
|
|
18
|
+
var _a;
|
|
19
|
+
if (!availablePortals) {
|
|
20
|
+
throw new Error('openPortal was called but DContextProvider has no availablePortals configured. '
|
|
21
|
+
+ 'Pass an availablePortals map to DContextProvider.');
|
|
22
|
+
}
|
|
23
|
+
const Component = availablePortals[name];
|
|
24
|
+
if (!Component) {
|
|
25
|
+
throw new Error(`No component registered for portal "${String(name)}". `
|
|
26
|
+
+ `Ensure "${String(name)}" has an entry in the availablePortals map on DContextProvider.`);
|
|
27
|
+
}
|
|
28
|
+
// K is a specific member of keyof T & string so the object satisfies
|
|
29
|
+
// InternalStackItem<T>, but TS can't verify generic-over-union assignability.
|
|
30
|
+
push({ name, Component, payload });
|
|
31
|
+
(_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.blur();
|
|
32
|
+
}, [availablePortals, push]);
|
|
33
|
+
const closePortal = useCallback(() => {
|
|
34
|
+
// pop() is safe on empty stacks, so close remains idempotent.
|
|
35
|
+
pop();
|
|
36
|
+
}, [pop]);
|
|
37
|
+
const publicStack = useMemo(() => stack.map(({ name, payload }) => ({ name, payload })), [stack]);
|
|
38
|
+
const value = useMemo(() => ({
|
|
39
|
+
stack: publicStack,
|
|
40
|
+
openPortal,
|
|
41
|
+
closePortal,
|
|
42
|
+
}), [publicStack, openPortal, closePortal]);
|
|
43
|
+
const handleClose = useCallback((target) => {
|
|
44
|
+
if (!(target instanceof HTMLDivElement)) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (target.classList.contains('portal') && !('bsBackdrop' in target.dataset)) {
|
|
48
|
+
closePortal();
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (target.classList.contains('backdrop')) {
|
|
52
|
+
const lastPortal = target.nextElementSibling;
|
|
53
|
+
if (lastPortal && lastPortal.classList.contains('portal') && !('bsBackdrop' in lastPortal.dataset)) {
|
|
54
|
+
closePortal();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}, [closePortal]);
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
const keyEvent = (event) => {
|
|
60
|
+
const lastPortal = document.querySelector(`#${portalName} > div > div:last-child`);
|
|
61
|
+
if (event.key === 'Escape') {
|
|
62
|
+
if (lastPortal) {
|
|
63
|
+
handleClose(lastPortal);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (event.key === 'Tab') {
|
|
68
|
+
const focusableElements = getKeyboardFocusableElements(lastPortal);
|
|
69
|
+
if (focusableElements.length === 0)
|
|
70
|
+
return;
|
|
71
|
+
const firstElement = focusableElements[0];
|
|
72
|
+
const lastElement = focusableElements[focusableElements.length - 1];
|
|
73
|
+
if (event.shiftKey && document.activeElement === firstElement) {
|
|
74
|
+
event.preventDefault();
|
|
75
|
+
lastElement.focus();
|
|
76
|
+
}
|
|
77
|
+
else if (!event.shiftKey && document.activeElement === lastElement) {
|
|
78
|
+
event.preventDefault();
|
|
79
|
+
firstElement.focus();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
if (stack.length !== 0) {
|
|
84
|
+
window.addEventListener('keydown', keyEvent);
|
|
85
|
+
}
|
|
86
|
+
return () => {
|
|
87
|
+
window.removeEventListener('keydown', keyEvent);
|
|
88
|
+
};
|
|
89
|
+
}, [handleClose, portalName, stack.length]);
|
|
90
|
+
return (jsxs(DPortalContext.Provider, { value: value, children: [children, created && createPortal(
|
|
91
|
+
// eslint-disable-next-line max-len
|
|
92
|
+
// eslint-disable-next-line jsx-a11y/no-static-element-interactions
|
|
93
|
+
jsx("div", { onClick: ({ target }) => handleClose(target), onKeyDown: () => { }, children: jsx(AnimatePresence, { children: stack.flatMap(({ Component, name, payload, }) => [
|
|
94
|
+
jsx(motion.div, { className: "backdrop", initial: { opacity: 0 }, animate: { opacity: 0.5 }, exit: { opacity: 0, transition: { delay: 0.3 } }, transition: { duration: 0.15, ease: 'linear' } }, `${name}-backdrop`),
|
|
95
|
+
jsx(Component, { name: name, payload: payload }, name),
|
|
96
|
+
]) }) }), document.getElementById(portalName))] }));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Hook to open/close registered portals (modals, offcanvas, etc.).
|
|
100
|
+
*
|
|
101
|
+
* **Prerequisite**: must be called inside a `DContextProvider` configured with
|
|
102
|
+
* `portalName` and `availablePortals`. `DContextProvider` mounts
|
|
103
|
+
* `DPortalContextProvider` internally — consumers never use
|
|
104
|
+
* `DPortalContextProvider` directly.
|
|
105
|
+
*
|
|
106
|
+
* @template T - Map of portal name → payload shape (e.g. `ModalPayloads`).
|
|
107
|
+
* Typing this generic gives you autocomplete on `openPortal` arguments.
|
|
108
|
+
* @returns `{ openPortal, closePortal, stack }` from the nearest portal context.
|
|
109
|
+
* @throws If called outside of `DContextProvider` / `DPortalContextProvider`.
|
|
110
|
+
*
|
|
111
|
+
* @requires DContextProvider
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```tsx
|
|
115
|
+
* const { openPortal, closePortal } = useDPortalContext<ModalPayloads>();
|
|
116
|
+
* openPortal('confirm', { message: 'Are you sure?' });
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
function useDPortalContext() {
|
|
120
|
+
const context = useContext(DPortalContext);
|
|
121
|
+
if (context === undefined) {
|
|
122
|
+
throw new Error('useDPortalContext was used outside of DPortalContextProvider');
|
|
123
|
+
}
|
|
124
|
+
return context;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export { DPortalContext, DPortalContextProvider, useDPortalContext };
|
|
128
|
+
//# sourceMappingURL=DPortalContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DPortalContext.js","sources":["../../../dist-transpiled/contexts/DPortalContext.js"],"sourcesContent":["import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createContext, useCallback, useContext, useEffect, useMemo, } from 'react';\nimport { createPortal } from 'react-dom';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport useDisableBodyScrollEffect from '../hooks/useDisableBodyScrollEffect';\nimport usePortal from '../hooks/usePortal';\nimport useStackState from '../hooks/useStackState';\nimport getKeyboardFocusableElements from '../utils/getKeyboardFocusableElements';\nexport const DPortalContext = createContext(undefined);\nexport function DPortalContextProvider({ portalName, children, availablePortals, }) {\n const { created } = usePortal(portalName);\n const [stack, { push, pop }] = useStackState([]);\n useDisableBodyScrollEffect(Boolean(stack.length));\n const openPortal = useCallback(\n // eslint-disable-next-line prefer-arrow-callback\n function openPortalImpl(name, payload) {\n var _a;\n if (!availablePortals) {\n throw new Error('openPortal was called but DContextProvider has no availablePortals configured. '\n + 'Pass an availablePortals map to DContextProvider.');\n }\n const Component = availablePortals[name];\n if (!Component) {\n throw new Error(`No component registered for portal \"${String(name)}\". `\n + `Ensure \"${String(name)}\" has an entry in the availablePortals map on DContextProvider.`);\n }\n // K is a specific member of keyof T & string so the object satisfies\n // InternalStackItem<T>, but TS can't verify generic-over-union assignability.\n push({ name, Component, payload });\n (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.blur();\n }, [availablePortals, push]);\n const closePortal = useCallback(() => {\n // pop() is safe on empty stacks, so close remains idempotent.\n pop();\n }, [pop]);\n const publicStack = useMemo(() => stack.map(({ name, payload }) => ({ name, payload })), [stack]);\n const value = useMemo(() => ({\n stack: publicStack,\n openPortal,\n closePortal,\n }), [publicStack, openPortal, closePortal]);\n const handleClose = useCallback((target) => {\n if (!(target instanceof HTMLDivElement)) {\n return;\n }\n if (target.classList.contains('portal') && !('bsBackdrop' in target.dataset)) {\n closePortal();\n return;\n }\n if (target.classList.contains('backdrop')) {\n const lastPortal = target.nextElementSibling;\n if (lastPortal && lastPortal.classList.contains('portal') && !('bsBackdrop' in lastPortal.dataset)) {\n closePortal();\n }\n }\n }, [closePortal]);\n useEffect(() => {\n const keyEvent = (event) => {\n const lastPortal = document.querySelector(`#${portalName} > div > div:last-child`);\n if (event.key === 'Escape') {\n if (lastPortal) {\n handleClose(lastPortal);\n return;\n }\n }\n if (event.key === 'Tab') {\n const focusableElements = getKeyboardFocusableElements(lastPortal);\n if (focusableElements.length === 0)\n return;\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n if (event.shiftKey && document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n else if (!event.shiftKey && document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n };\n if (stack.length !== 0) {\n window.addEventListener('keydown', keyEvent);\n }\n return () => {\n window.removeEventListener('keydown', keyEvent);\n };\n }, [handleClose, portalName, stack.length]);\n return (_jsxs(DPortalContext.Provider, { value: value, children: [children, created && createPortal(\n // eslint-disable-next-line max-len\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n _jsx(\"div\", { onClick: ({ target }) => handleClose(target), onKeyDown: () => { }, children: _jsx(AnimatePresence, { children: stack.flatMap(({ Component, name, payload, }) => [\n _jsx(motion.div, { className: \"backdrop\", initial: { opacity: 0 }, animate: { opacity: 0.5 }, exit: { opacity: 0, transition: { delay: 0.3 } }, transition: { duration: 0.15, ease: 'linear' } }, `${name}-backdrop`),\n _jsx(Component, { name: name, payload: payload }, name),\n ]) }) }), document.getElementById(portalName))] }));\n}\n/**\n * Hook to open/close registered portals (modals, offcanvas, etc.).\n *\n * **Prerequisite**: must be called inside a `DContextProvider` configured with\n * `portalName` and `availablePortals`. `DContextProvider` mounts\n * `DPortalContextProvider` internally — consumers never use\n * `DPortalContextProvider` directly.\n *\n * @template T - Map of portal name → payload shape (e.g. `ModalPayloads`).\n * Typing this generic gives you autocomplete on `openPortal` arguments.\n * @returns `{ openPortal, closePortal, stack }` from the nearest portal context.\n * @throws If called outside of `DContextProvider` / `DPortalContextProvider`.\n *\n * @requires DContextProvider\n *\n * @example\n * ```tsx\n * const { openPortal, closePortal } = useDPortalContext<ModalPayloads>();\n * openPortal('confirm', { message: 'Are you sure?' });\n * ```\n */\nexport function useDPortalContext() {\n const context = useContext(DPortalContext);\n if (context === undefined) {\n throw new Error('useDPortalContext was used outside of DPortalContextProvider');\n }\n return context;\n}\n//# sourceMappingURL=DPortalContext.js.map"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { useRef, useCallback } from 'react';
|
|
2
|
+
import { useConfirmModalStore } from '../components/DConfirmModal/confirmModalStore.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Hook to display a confirmation modal.
|
|
6
|
+
*
|
|
7
|
+
* Renders into the portal node specified by `DConfirmModalContainer` (typically `#d-portal`).
|
|
8
|
+
* The confirm modal floats above the portal stack and handles its own Escape key,
|
|
9
|
+
* preventing interference with underlying modals.
|
|
10
|
+
*
|
|
11
|
+
* Requires both `DContextProvider` wrapping your application AND an explicit
|
|
12
|
+
* `<DConfirmModalContainer nodeId="d-portal" />` mounted in your app.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* function App() {
|
|
16
|
+
* return (
|
|
17
|
+
* <DContextProvider>
|
|
18
|
+
* <YourContent />
|
|
19
|
+
* <DConfirmModalContainer nodeId="d-portal" />
|
|
20
|
+
* </DContextProvider>
|
|
21
|
+
* );
|
|
22
|
+
* }
|
|
23
|
+
*
|
|
24
|
+
* function MyComponent() {
|
|
25
|
+
* const confirm = useConfirmModal({
|
|
26
|
+
* title: 'Delete Account',
|
|
27
|
+
* message: 'This action cannot be undone.',
|
|
28
|
+
* critical: { code: 'DELETE ACCOUNT' },
|
|
29
|
+
* onConfirm: async () => { await deleteAccount(); },
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* return <DButton onClick={confirm.open} text="Delete" color="danger" />;
|
|
33
|
+
* }
|
|
34
|
+
*/
|
|
35
|
+
function useConfirmModal(config) {
|
|
36
|
+
const store = useConfirmModalStore();
|
|
37
|
+
const idRef = useRef(`confirm-modal-${Math.random().toString(36).slice(2)}`);
|
|
38
|
+
const close = useCallback(() => {
|
|
39
|
+
store.remove(idRef.current);
|
|
40
|
+
queueMicrotask(() => {
|
|
41
|
+
var _a;
|
|
42
|
+
(_a = config.onClose) === null || _a === void 0 ? void 0 : _a.call(config);
|
|
43
|
+
});
|
|
44
|
+
}, [store, config]);
|
|
45
|
+
const open = useCallback(() => {
|
|
46
|
+
const handleConfirmAction = async () => {
|
|
47
|
+
try {
|
|
48
|
+
await config.onConfirm();
|
|
49
|
+
store.remove(idRef.current);
|
|
50
|
+
}
|
|
51
|
+
catch (_a) {
|
|
52
|
+
// Keep modal open on error
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
// Remove any existing entry with this id to prevent duplicates on re-entrancy
|
|
56
|
+
store.remove(idRef.current);
|
|
57
|
+
store.push(Object.assign(Object.assign({}, config), { id: idRef.current, onConfirmAction: handleConfirmAction, onCloseAction: close }));
|
|
58
|
+
}, [store, config, close]);
|
|
59
|
+
return { open };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export { useConfirmModal as default };
|
|
63
|
+
//# sourceMappingURL=useConfirmModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConfirmModal.js","sources":["../../../dist-transpiled/hooks/useConfirmModal.js"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport { useConfirmModalStore } from '../components/DConfirmModal/confirmModalStore';\n/**\n * Hook to display a confirmation modal.\n *\n * Renders into the portal node specified by `DConfirmModalContainer` (typically `#d-portal`).\n * The confirm modal floats above the portal stack and handles its own Escape key,\n * preventing interference with underlying modals.\n *\n * Requires both `DContextProvider` wrapping your application AND an explicit\n * `<DConfirmModalContainer nodeId=\"d-portal\" />` mounted in your app.\n *\n * @example\n * function App() {\n * return (\n * <DContextProvider>\n * <YourContent />\n * <DConfirmModalContainer nodeId=\"d-portal\" />\n * </DContextProvider>\n * );\n * }\n *\n * function MyComponent() {\n * const confirm = useConfirmModal({\n * title: 'Delete Account',\n * message: 'This action cannot be undone.',\n * critical: { code: 'DELETE ACCOUNT' },\n * onConfirm: async () => { await deleteAccount(); },\n * });\n *\n * return <DButton onClick={confirm.open} text=\"Delete\" color=\"danger\" />;\n * }\n */\nexport default function useConfirmModal(config) {\n const store = useConfirmModalStore();\n const idRef = useRef(`confirm-modal-${Math.random().toString(36).slice(2)}`);\n const close = useCallback(() => {\n store.remove(idRef.current);\n queueMicrotask(() => {\n var _a;\n (_a = config.onClose) === null || _a === void 0 ? void 0 : _a.call(config);\n });\n }, [store, config]);\n const open = useCallback(() => {\n const handleConfirmAction = async () => {\n try {\n await config.onConfirm();\n store.remove(idRef.current);\n }\n catch (_a) {\n // Keep modal open on error\n }\n };\n // Remove any existing entry with this id to prevent duplicates on re-entrancy\n store.remove(idRef.current);\n store.push(Object.assign(Object.assign({}, config), { id: idRef.current, onConfirmAction: handleConfirmAction, onCloseAction: close }));\n }, [store, config, close]);\n return { open };\n}\n//# sourceMappingURL=useConfirmModal.js.map"],"names":[],"mappings":";;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,eAAe,CAAC,MAAM,EAAE;AAChD,IAAI,MAAM,KAAK,GAAG,oBAAoB,EAAE;AACxC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,IAAI,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM;AACpC,QAAQ,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;AACnC,QAAQ,cAAc,CAAC,MAAM;AAC7B,YAAY,IAAI,EAAE;AAClB,YAAY,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;AACtF,QAAQ,CAAC,CAAC;AACV,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACvB,IAAI,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM;AACnC,QAAQ,MAAM,mBAAmB,GAAG,YAAY;AAChD,YAAY,IAAI;AAChB,gBAAgB,MAAM,MAAM,CAAC,SAAS,EAAE;AACxC,gBAAgB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3C,YAAY;AACZ,YAAY,OAAO,EAAE,EAAE;AACvB;AACA,YAAY;AACZ,QAAQ,CAAC;AACT;AACA,QAAQ,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;AACnC,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/I,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC9B,IAAI,OAAO,EAAE,IAAI,EAAE;AACnB;;;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Generic seconds-based countdown hook.
|
|
5
|
+
*
|
|
6
|
+
* Starts counting down from `seconds` to `0` and exposes `restartCountdown`
|
|
7
|
+
* to reset and restart the timer (e.g. for "resend code in Xs" patterns,
|
|
8
|
+
* session-expiry banners, or any other cooldown/throttle UI).
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const { secondsLeft, restartCountdown } = useCountdown(30);
|
|
12
|
+
*/
|
|
13
|
+
function useCountdown(seconds) {
|
|
14
|
+
const [secondsLeft, setSecondsLeft] = useState(seconds);
|
|
15
|
+
const [isActive, setIsActive] = useState(true);
|
|
16
|
+
const resetCountdown = useCallback((newSeconds = seconds) => {
|
|
17
|
+
setIsActive(false);
|
|
18
|
+
setSecondsLeft(newSeconds);
|
|
19
|
+
}, [seconds]);
|
|
20
|
+
const restartCountdown = useCallback(() => {
|
|
21
|
+
resetCountdown(seconds);
|
|
22
|
+
setIsActive(true);
|
|
23
|
+
}, [resetCountdown, seconds]);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (!isActive) {
|
|
26
|
+
return () => { };
|
|
27
|
+
}
|
|
28
|
+
const interval = setInterval(() => {
|
|
29
|
+
setSecondsLeft((prevSeconds) => {
|
|
30
|
+
const newSeconds = prevSeconds - 1;
|
|
31
|
+
if (newSeconds <= 0) {
|
|
32
|
+
clearInterval(interval);
|
|
33
|
+
setIsActive(false);
|
|
34
|
+
return 0;
|
|
35
|
+
}
|
|
36
|
+
return newSeconds;
|
|
37
|
+
});
|
|
38
|
+
}, 1000);
|
|
39
|
+
return () => clearInterval(interval);
|
|
40
|
+
}, [isActive]);
|
|
41
|
+
return { secondsLeft, restartCountdown };
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { useCountdown as default };
|
|
45
|
+
//# sourceMappingURL=useCountdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCountdown.js","sources":["../../../dist-transpiled/hooks/useCountdown.js"],"sourcesContent":["import { useState, useEffect, useCallback, } from 'react';\n/**\n * Generic seconds-based countdown hook.\n *\n * Starts counting down from `seconds` to `0` and exposes `restartCountdown`\n * to reset and restart the timer (e.g. for \"resend code in Xs\" patterns,\n * session-expiry banners, or any other cooldown/throttle UI).\n *\n * @example\n * const { secondsLeft, restartCountdown } = useCountdown(30);\n */\nexport default function useCountdown(seconds) {\n const [secondsLeft, setSecondsLeft] = useState(seconds);\n const [isActive, setIsActive] = useState(true);\n const resetCountdown = useCallback((newSeconds = seconds) => {\n setIsActive(false);\n setSecondsLeft(newSeconds);\n }, [seconds]);\n const restartCountdown = useCallback(() => {\n resetCountdown(seconds);\n setIsActive(true);\n }, [resetCountdown, seconds]);\n useEffect(() => {\n if (!isActive) {\n return () => { };\n }\n const interval = setInterval(() => {\n setSecondsLeft((prevSeconds) => {\n const newSeconds = prevSeconds - 1;\n if (newSeconds <= 0) {\n clearInterval(interval);\n setIsActive(false);\n return 0;\n }\n return newSeconds;\n });\n }, 1000);\n return () => clearInterval(interval);\n }, [isActive]);\n return { secondsLeft, restartCountdown };\n}\n//# sourceMappingURL=useCountdown.js.map"],"names":[],"mappings":";;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,YAAY,CAAC,OAAO,EAAE;AAC9C,IAAI,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;AAC3D,IAAI,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;AAClD,IAAI,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,UAAU,GAAG,OAAO,KAAK;AACjE,QAAQ,WAAW,CAAC,KAAK,CAAC;AAC1B,QAAQ,cAAc,CAAC,UAAU,CAAC;AAClC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACjB,IAAI,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM;AAC/C,QAAQ,cAAc,CAAC,OAAO,CAAC;AAC/B,QAAQ,WAAW,CAAC,IAAI,CAAC;AACzB,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AACjC,IAAI,SAAS,CAAC,MAAM;AACpB,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAY,OAAO,MAAM,EAAE,CAAC;AAC5B,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM;AAC3C,YAAY,cAAc,CAAC,CAAC,WAAW,KAAK;AAC5C,gBAAgB,MAAM,UAAU,GAAG,WAAW,GAAG,CAAC;AAClD,gBAAgB,IAAI,UAAU,IAAI,CAAC,EAAE;AACrC,oBAAoB,aAAa,CAAC,QAAQ,CAAC;AAC3C,oBAAoB,WAAW,CAAC,KAAK,CAAC;AACtC,oBAAoB,OAAO,CAAC;AAC5B,gBAAgB;AAChB,gBAAgB,OAAO,UAAU;AACjC,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,EAAE,IAAI,CAAC;AAChB,QAAQ,OAAO,MAAM,aAAa,CAAC,QAAQ,CAAC;AAC5C,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAClB,IAAI,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE;AAC5C;;;;"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
/* eslint-disable no-lonely-if */
|
|
4
|
+
function useDisableBodyScrollEffect(disable) {
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
let observer;
|
|
7
|
+
let timer;
|
|
8
|
+
const lock = () => {
|
|
9
|
+
const { clientWidth } = document.documentElement;
|
|
10
|
+
const { innerWidth } = window;
|
|
11
|
+
const scrollbarWidth = clientWidth ? innerWidth - clientWidth : 0;
|
|
12
|
+
document.body.style.overflow = 'hidden';
|
|
13
|
+
document.body.style.paddingRight = `${Math.max(0, scrollbarWidth)}px`;
|
|
14
|
+
};
|
|
15
|
+
const unlock = () => {
|
|
16
|
+
document.body.style.overflow = 'unset';
|
|
17
|
+
document.body.style.paddingRight = '0px';
|
|
18
|
+
};
|
|
19
|
+
if (disable) {
|
|
20
|
+
lock();
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// Wait until all portal elements are removed (exit animations done)
|
|
24
|
+
if (document.querySelector('.portal')) {
|
|
25
|
+
observer = new MutationObserver(() => {
|
|
26
|
+
if (!document.querySelector('.portal')) {
|
|
27
|
+
unlock();
|
|
28
|
+
observer === null || observer === void 0 ? void 0 : observer.disconnect();
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
32
|
+
// Fallback in case observer misses changes
|
|
33
|
+
timer = window.setTimeout(() => {
|
|
34
|
+
unlock();
|
|
35
|
+
observer === null || observer === void 0 ? void 0 : observer.disconnect();
|
|
36
|
+
}, 300);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
unlock();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return () => {
|
|
43
|
+
if (observer)
|
|
44
|
+
observer.disconnect();
|
|
45
|
+
if (timer)
|
|
46
|
+
window.clearTimeout(timer);
|
|
47
|
+
};
|
|
48
|
+
}, [disable]);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export { useDisableBodyScrollEffect as default };
|
|
52
|
+
//# sourceMappingURL=useDisableBodyScrollEffect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDisableBodyScrollEffect.js","sources":["../../../dist-transpiled/hooks/useDisableBodyScrollEffect.js"],"sourcesContent":["/* eslint-disable no-lonely-if */\nimport { useEffect } from 'react';\nexport default function useDisableBodyScrollEffect(disable) {\n useEffect(() => {\n let observer;\n let timer;\n const lock = () => {\n const { clientWidth } = document.documentElement;\n const { innerWidth } = window;\n const scrollbarWidth = clientWidth ? innerWidth - clientWidth : 0;\n document.body.style.overflow = 'hidden';\n document.body.style.paddingRight = `${Math.max(0, scrollbarWidth)}px`;\n };\n const unlock = () => {\n document.body.style.overflow = 'unset';\n document.body.style.paddingRight = '0px';\n };\n if (disable) {\n lock();\n }\n else {\n // Wait until all portal elements are removed (exit animations done)\n if (document.querySelector('.portal')) {\n observer = new MutationObserver(() => {\n if (!document.querySelector('.portal')) {\n unlock();\n observer === null || observer === void 0 ? void 0 : observer.disconnect();\n }\n });\n observer.observe(document.body, { childList: true, subtree: true });\n // Fallback in case observer misses changes\n timer = window.setTimeout(() => {\n unlock();\n observer === null || observer === void 0 ? void 0 : observer.disconnect();\n }, 300);\n }\n else {\n unlock();\n }\n }\n return () => {\n if (observer)\n observer.disconnect();\n if (timer)\n window.clearTimeout(timer);\n };\n }, [disable]);\n}\n//# sourceMappingURL=useDisableBodyScrollEffect.js.map"],"names":[],"mappings":";;AAAA;AAEe,SAAS,0BAA0B,CAAC,OAAO,EAAE;AAC5D,IAAI,SAAS,CAAC,MAAM;AACpB,QAAQ,IAAI,QAAQ;AACpB,QAAQ,IAAI,KAAK;AACjB,QAAQ,MAAM,IAAI,GAAG,MAAM;AAC3B,YAAY,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,eAAe;AAC5D,YAAY,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;AACzC,YAAY,MAAM,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC;AAC7E,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;AACnD,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;AACjF,QAAQ,CAAC;AACT,QAAQ,MAAM,MAAM,GAAG,MAAM;AAC7B,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;AAClD,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK;AACpD,QAAQ,CAAC;AACT,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,IAAI,EAAE;AAClB,QAAQ;AACR,aAAa;AACb;AACA,YAAY,IAAI,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;AACnD,gBAAgB,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAM;AACtD,oBAAoB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;AAC5D,wBAAwB,MAAM,EAAE;AAChC,wBAAwB,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE;AACjG,oBAAoB;AACpB,gBAAgB,CAAC,CAAC;AAClB,gBAAgB,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnF;AACA,gBAAgB,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;AAChD,oBAAoB,MAAM,EAAE;AAC5B,oBAAoB,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE;AAC7F,gBAAgB,CAAC,EAAE,GAAG,CAAC;AACvB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,EAAE;AACxB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,MAAM;AACrB,YAAY,IAAI,QAAQ;AACxB,gBAAgB,QAAQ,CAAC,UAAU,EAAE;AACrC,YAAY,IAAI,KAAK;AACrB,gBAAgB,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;AAC1C,QAAQ,CAAC;AACT,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACjB;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import useProvidedRefOrCreate from './useProvidedRefOrCreate.js';
|
|
3
|
+
|
|
4
|
+
function useDisableInputWheel(ref) {
|
|
5
|
+
const inputRef = useProvidedRefOrCreate(ref);
|
|
6
|
+
const handleOnWheel = useCallback((event) => {
|
|
7
|
+
var _a;
|
|
8
|
+
event.stopPropagation();
|
|
9
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.blur();
|
|
10
|
+
}, [inputRef]);
|
|
11
|
+
return {
|
|
12
|
+
handleOnWheel,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { useDisableInputWheel as default };
|
|
17
|
+
//# sourceMappingURL=useDisableInputWheel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDisableInputWheel.js","sources":["../../../dist-transpiled/hooks/useDisableInputWheel.js"],"sourcesContent":["import { useCallback } from 'react';\nimport useProvidedRefOrCreate from './useProvidedRefOrCreate';\nexport default function useDisableInputWheel(ref) {\n const inputRef = useProvidedRefOrCreate(ref);\n const handleOnWheel = useCallback((event) => {\n var _a;\n event.stopPropagation();\n (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.blur();\n }, [inputRef]);\n return {\n handleOnWheel,\n };\n}\n//# sourceMappingURL=useDisableInputWheel.js.map"],"names":[],"mappings":";;;AAEe,SAAS,oBAAoB,CAAC,GAAG,EAAE;AAClD,IAAI,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC;AAChD,IAAI,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,KAAK,KAAK;AACjD,QAAQ,IAAI,EAAE;AACd,QAAQ,KAAK,CAAC,eAAe,EAAE;AAC/B,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE;AAC9E,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAClB,IAAI,OAAO;AACX,QAAQ,aAAa;AACrB,KAAK;AACL;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import formatCurrency from '../utils/formatCurrency.js';
|
|
3
|
+
import { useDContext } from '../contexts/DContext.js';
|
|
4
|
+
|
|
5
|
+
function useFormatCurrency(...args) {
|
|
6
|
+
const { currency } = useDContext();
|
|
7
|
+
const format = useCallback((value, currencyOptions) => formatCurrency(value, currencyOptions || currency), [currency]);
|
|
8
|
+
const values = (args || []).map((value) => (formatCurrency(value !== null && value !== void 0 ? value : 0, currency)));
|
|
9
|
+
return {
|
|
10
|
+
format,
|
|
11
|
+
values,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { useFormatCurrency as default };
|
|
16
|
+
//# sourceMappingURL=useFormatCurrency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFormatCurrency.js","sources":["../../../dist-transpiled/hooks/useFormatCurrency.js"],"sourcesContent":["import { useCallback } from 'react';\nimport { useDContext } from '../contexts';\nimport formatCurrency from '../utils/formatCurrency';\nexport default function useFormatCurrency(...args) {\n const { currency } = useDContext();\n const format = useCallback((value, currencyOptions) => formatCurrency(value, currencyOptions || currency), [currency]);\n const values = (args || []).map((value) => (formatCurrency(value !== null && value !== void 0 ? value : 0, currency)));\n return {\n format,\n values,\n };\n}\n//# sourceMappingURL=useFormatCurrency.js.map"],"names":[],"mappings":";;;;AAGe,SAAS,iBAAiB,CAAC,GAAG,IAAI,EAAE;AACnD,IAAI,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE;AACtC,IAAI,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,cAAc,CAAC,KAAK,EAAE,eAAe,IAAI,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC1H,IAAI,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM,cAAc,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1H,IAAI,OAAO;AACX,QAAQ,MAAM;AACd,QAAQ,MAAM;AACd,KAAK;AACL;;;;"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { useCallback, useState, useRef, useEffect, useMemo } from 'react';
|
|
2
|
+
import currency from 'currency.js';
|
|
3
|
+
import useProvidedRefOrCreate from './useProvidedRefOrCreate.js';
|
|
4
|
+
|
|
5
|
+
function formatValue(value, currencyOptions) {
|
|
6
|
+
if (value === undefined) {
|
|
7
|
+
return '';
|
|
8
|
+
}
|
|
9
|
+
return currency(value, Object.assign(Object.assign({}, currencyOptions), { symbol: '' })).format();
|
|
10
|
+
}
|
|
11
|
+
function useInputCurrency(currencyOptions, value, onFocus, onChange, onBlur, ref, minValue, maxValue) {
|
|
12
|
+
const inputRef = useProvidedRefOrCreate(ref);
|
|
13
|
+
const clampValue = useCallback((newValue) => {
|
|
14
|
+
if (newValue === undefined) {
|
|
15
|
+
return newValue;
|
|
16
|
+
}
|
|
17
|
+
let clampedValue = newValue;
|
|
18
|
+
if (minValue !== undefined) {
|
|
19
|
+
clampedValue = Math.max(clampedValue, minValue);
|
|
20
|
+
}
|
|
21
|
+
if (maxValue !== undefined) {
|
|
22
|
+
clampedValue = Math.min(clampedValue, maxValue);
|
|
23
|
+
}
|
|
24
|
+
return clampedValue;
|
|
25
|
+
}, [minValue, maxValue]);
|
|
26
|
+
const [innerType, setInnerType] = useState('text');
|
|
27
|
+
const [innerNumber, setInnerNumber] = useState(clampValue(value));
|
|
28
|
+
const [innerString, setInnerString] = useState(formatValue(clampValue(value), currencyOptions));
|
|
29
|
+
const handleOnFocus = useCallback((event) => {
|
|
30
|
+
event.stopPropagation();
|
|
31
|
+
setInnerType('number');
|
|
32
|
+
onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
|
|
33
|
+
}, [onFocus]);
|
|
34
|
+
const handleOnBlur = useCallback((event) => {
|
|
35
|
+
event.stopPropagation();
|
|
36
|
+
setInnerType('text');
|
|
37
|
+
const clampedNumber = clampValue(innerNumber);
|
|
38
|
+
if (clampedNumber !== innerNumber) {
|
|
39
|
+
setInnerNumber(clampedNumber);
|
|
40
|
+
setInnerString(formatValue(clampedNumber, currencyOptions));
|
|
41
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(clampedNumber);
|
|
42
|
+
}
|
|
43
|
+
onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
|
|
44
|
+
}, [onBlur, innerNumber, clampValue, currencyOptions, onChange]);
|
|
45
|
+
const handleOnChange = useCallback((newValue) => {
|
|
46
|
+
const newNumber = (newValue === undefined || newValue === '') ? undefined : Number(newValue);
|
|
47
|
+
if (newNumber !== innerNumber) {
|
|
48
|
+
setInnerNumber(newNumber);
|
|
49
|
+
setInnerString(formatValue(newNumber, currencyOptions));
|
|
50
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(newNumber);
|
|
51
|
+
}
|
|
52
|
+
}, [currencyOptions, onChange, innerNumber]);
|
|
53
|
+
const isMountedRef = useRef(false);
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (!isMountedRef.current) {
|
|
56
|
+
isMountedRef.current = true;
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (value !== innerNumber) {
|
|
60
|
+
setInnerNumber(value);
|
|
61
|
+
setInnerString(formatValue(value, currencyOptions));
|
|
62
|
+
}
|
|
63
|
+
}, [value, currencyOptions, innerNumber]);
|
|
64
|
+
const innerValue = useMemo(() => { var _a; return (innerType === 'number' ? (_a = innerNumber === null || innerNumber === void 0 ? void 0 : innerNumber.toString()) !== null && _a !== void 0 ? _a : '' : innerString !== null && innerString !== void 0 ? innerString : ''); }, [innerType, innerNumber, innerString]);
|
|
65
|
+
return {
|
|
66
|
+
inputRef,
|
|
67
|
+
innerValue,
|
|
68
|
+
innerType,
|
|
69
|
+
handleOnFocus,
|
|
70
|
+
handleOnChange,
|
|
71
|
+
handleOnBlur,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export { useInputCurrency as default };
|
|
76
|
+
//# sourceMappingURL=useInputCurrency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInputCurrency.js","sources":["../../../dist-transpiled/hooks/useInputCurrency.js"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, } from 'react';\nimport currency from 'currency.js';\nimport useProvidedRefOrCreate from './useProvidedRefOrCreate';\nfunction formatValue(value, currencyOptions) {\n if (value === undefined) {\n return '';\n }\n return currency(value, Object.assign(Object.assign({}, currencyOptions), { symbol: '' })).format();\n}\nexport default function useInputCurrency(currencyOptions, value, onFocus, onChange, onBlur, ref, minValue, maxValue) {\n const inputRef = useProvidedRefOrCreate(ref);\n const clampValue = useCallback((newValue) => {\n if (newValue === undefined) {\n return newValue;\n }\n let clampedValue = newValue;\n if (minValue !== undefined) {\n clampedValue = Math.max(clampedValue, minValue);\n }\n if (maxValue !== undefined) {\n clampedValue = Math.min(clampedValue, maxValue);\n }\n return clampedValue;\n }, [minValue, maxValue]);\n const [innerType, setInnerType] = useState('text');\n const [innerNumber, setInnerNumber] = useState(clampValue(value));\n const [innerString, setInnerString] = useState(formatValue(clampValue(value), currencyOptions));\n const handleOnFocus = useCallback((event) => {\n event.stopPropagation();\n setInnerType('number');\n onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);\n }, [onFocus]);\n const handleOnBlur = useCallback((event) => {\n event.stopPropagation();\n setInnerType('text');\n const clampedNumber = clampValue(innerNumber);\n if (clampedNumber !== innerNumber) {\n setInnerNumber(clampedNumber);\n setInnerString(formatValue(clampedNumber, currencyOptions));\n onChange === null || onChange === void 0 ? void 0 : onChange(clampedNumber);\n }\n onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);\n }, [onBlur, innerNumber, clampValue, currencyOptions, onChange]);\n const handleOnChange = useCallback((newValue) => {\n const newNumber = (newValue === undefined || newValue === '') ? undefined : Number(newValue);\n if (newNumber !== innerNumber) {\n setInnerNumber(newNumber);\n setInnerString(formatValue(newNumber, currencyOptions));\n onChange === null || onChange === void 0 ? void 0 : onChange(newNumber);\n }\n }, [currencyOptions, onChange, innerNumber]);\n const isMountedRef = useRef(false);\n useEffect(() => {\n if (!isMountedRef.current) {\n isMountedRef.current = true;\n return;\n }\n if (value !== innerNumber) {\n setInnerNumber(value);\n setInnerString(formatValue(value, currencyOptions));\n }\n }, [value, currencyOptions, innerNumber]);\n const innerValue = useMemo(() => { var _a; return (innerType === 'number' ? (_a = innerNumber === null || innerNumber === void 0 ? void 0 : innerNumber.toString()) !== null && _a !== void 0 ? _a : '' : innerString !== null && innerString !== void 0 ? innerString : ''); }, [innerType, innerNumber, innerString]);\n return {\n inputRef,\n innerValue,\n innerType,\n handleOnFocus,\n handleOnChange,\n handleOnBlur,\n };\n}\n//# sourceMappingURL=useInputCurrency.js.map"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useCallback, useState, useMemo } from 'react';
|
|
2
|
+
|
|
3
|
+
function useItemSelection({ getItemIdentifier: getItemIdentifierProp, previousSelected = [], } = {}) {
|
|
4
|
+
const getItemIdentifier = useCallback((item) => (String(getItemIdentifierProp ? getItemIdentifierProp(item) : item.id)), [getItemIdentifierProp]);
|
|
5
|
+
const [selectionMap, setSelectionMap] = useState(() => new Map(previousSelected.map((item) => [getItemIdentifier(item), item])));
|
|
6
|
+
const selectedItems = useMemo(() => Array.from(selectionMap.values()), [selectionMap]);
|
|
7
|
+
const setSelectedItems = useCallback((items) => {
|
|
8
|
+
setSelectionMap(new Map(items.map((item) => [getItemIdentifier(item), item])));
|
|
9
|
+
}, [getItemIdentifier]);
|
|
10
|
+
const isSelectedItem = useCallback((item) => selectionMap.has(getItemIdentifier(item)), [getItemIdentifier, selectionMap]);
|
|
11
|
+
const toggleSelectedItem = useCallback((item) => {
|
|
12
|
+
const identifier = getItemIdentifier(item);
|
|
13
|
+
setSelectionMap((prev) => {
|
|
14
|
+
const newMap = new Map(prev);
|
|
15
|
+
if (newMap.has(identifier)) {
|
|
16
|
+
newMap.delete(identifier);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
newMap.set(identifier, item);
|
|
20
|
+
}
|
|
21
|
+
return newMap;
|
|
22
|
+
});
|
|
23
|
+
}, [getItemIdentifier]);
|
|
24
|
+
const resetSelectedItems = useCallback(() => setSelectionMap(new Map()), []);
|
|
25
|
+
return {
|
|
26
|
+
selectedItems,
|
|
27
|
+
isSelectedItem,
|
|
28
|
+
toggleSelectedItem,
|
|
29
|
+
resetSelectedItems,
|
|
30
|
+
setSelectedItems,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { useItemSelection as default };
|
|
35
|
+
//# sourceMappingURL=useItemSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useItemSelection.js","sources":["../../../dist-transpiled/hooks/useItemSelection.js"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nexport default function useItemSelection({ getItemIdentifier: getItemIdentifierProp, previousSelected = [], } = {}) {\n const getItemIdentifier = useCallback((item) => (String(getItemIdentifierProp ? getItemIdentifierProp(item) : item.id)), [getItemIdentifierProp]);\n const [selectionMap, setSelectionMap] = useState(() => new Map(previousSelected.map((item) => [getItemIdentifier(item), item])));\n const selectedItems = useMemo(() => Array.from(selectionMap.values()), [selectionMap]);\n const setSelectedItems = useCallback((items) => {\n setSelectionMap(new Map(items.map((item) => [getItemIdentifier(item), item])));\n }, [getItemIdentifier]);\n const isSelectedItem = useCallback((item) => selectionMap.has(getItemIdentifier(item)), [getItemIdentifier, selectionMap]);\n const toggleSelectedItem = useCallback((item) => {\n const identifier = getItemIdentifier(item);\n setSelectionMap((prev) => {\n const newMap = new Map(prev);\n if (newMap.has(identifier)) {\n newMap.delete(identifier);\n }\n else {\n newMap.set(identifier, item);\n }\n return newMap;\n });\n }, [getItemIdentifier]);\n const resetSelectedItems = useCallback(() => setSelectionMap(new Map()), []);\n return {\n selectedItems,\n isSelectedItem,\n toggleSelectedItem,\n resetSelectedItems,\n setSelectedItems,\n };\n}\n//# sourceMappingURL=useItemSelection.js.map"],"names":[],"mappings":";;AACe,SAAS,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE;AACpH,IAAI,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,IAAI,MAAM,MAAM,CAAC,qBAAqB,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC;AACrJ,IAAI,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACpI,IAAI,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;AAC1F,IAAI,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,KAAK,KAAK;AACpD,QAAQ,eAAe,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACtF,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;AAC3B,IAAI,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;AAC9H,IAAI,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,IAAI,KAAK;AACrD,QAAQ,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC;AAClD,QAAQ,eAAe,CAAC,CAAC,IAAI,KAAK;AAClC,YAAY,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;AACxC,YAAY,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACxC,gBAAgB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;AACzC,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;AAC5C,YAAY;AACZ,YAAY,OAAO,MAAM;AACzB,QAAQ,CAAC,CAAC;AACV,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;AAC3B,IAAI,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,eAAe,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAChF,IAAI,OAAO;AACX,QAAQ,aAAa;AACrB,QAAQ,cAAc;AACtB,QAAQ,kBAAkB;AAC1B,QAAQ,kBAAkB;AAC1B,QAAQ,gBAAgB;AACxB,KAAK;AACL;;;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { useDContext } from '../contexts/DContext.js';
|
|
3
|
+
import useMediaQuery from './useMediaQuery.js';
|
|
4
|
+
|
|
5
|
+
function useMediaBreakpointUp(breakpoint, useListener = false) {
|
|
6
|
+
const { breakpoints } = useDContext();
|
|
7
|
+
const mediaQuery = useMemo(() => (`(min-width: ${breakpoints[breakpoint]})`), [breakpoint, breakpoints]);
|
|
8
|
+
return useMediaQuery(mediaQuery, useListener);
|
|
9
|
+
}
|
|
10
|
+
function useMediaBreakpointUpXs(useListener = false) {
|
|
11
|
+
return useMediaBreakpointUp('xs', useListener);
|
|
12
|
+
}
|
|
13
|
+
function useMediaBreakpointUpSm(useListener = false) {
|
|
14
|
+
return useMediaBreakpointUp('sm', useListener);
|
|
15
|
+
}
|
|
16
|
+
function useMediaBreakpointUpMd(useListener = false) {
|
|
17
|
+
return useMediaBreakpointUp('md', useListener);
|
|
18
|
+
}
|
|
19
|
+
function useMediaBreakpointUpLg(useListener = false) {
|
|
20
|
+
return useMediaBreakpointUp('lg', useListener);
|
|
21
|
+
}
|
|
22
|
+
function useMediaBreakpointUpXl(useListener = false) {
|
|
23
|
+
return useMediaBreakpointUp('xl', useListener);
|
|
24
|
+
}
|
|
25
|
+
function useMediaBreakpointUpXxl(useListener = false) {
|
|
26
|
+
return useMediaBreakpointUp('xxl', useListener);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { useMediaBreakpointUpLg, useMediaBreakpointUpMd, useMediaBreakpointUpSm, useMediaBreakpointUpXl, useMediaBreakpointUpXs, useMediaBreakpointUpXxl };
|
|
30
|
+
//# sourceMappingURL=useMediaBreakpointUp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMediaBreakpointUp.js","sources":["../../../dist-transpiled/hooks/useMediaBreakpointUp.js"],"sourcesContent":["import { useMemo } from 'react';\nimport { useDContext } from '../contexts/DContext';\nimport useMediaQuery from './useMediaQuery';\nfunction useMediaBreakpointUp(breakpoint, useListener = false) {\n const { breakpoints } = useDContext();\n const mediaQuery = useMemo(() => (`(min-width: ${breakpoints[breakpoint]})`), [breakpoint, breakpoints]);\n return useMediaQuery(mediaQuery, useListener);\n}\nexport function useMediaBreakpointUpXs(useListener = false) {\n return useMediaBreakpointUp('xs', useListener);\n}\nexport function useMediaBreakpointUpSm(useListener = false) {\n return useMediaBreakpointUp('sm', useListener);\n}\nexport function useMediaBreakpointUpMd(useListener = false) {\n return useMediaBreakpointUp('md', useListener);\n}\nexport function useMediaBreakpointUpLg(useListener = false) {\n return useMediaBreakpointUp('lg', useListener);\n}\nexport function useMediaBreakpointUpXl(useListener = false) {\n return useMediaBreakpointUp('xl', useListener);\n}\nexport function useMediaBreakpointUpXxl(useListener = false) {\n return useMediaBreakpointUp('xxl', useListener);\n}\n//# sourceMappingURL=useMediaBreakpointUp.js.map"],"names":[],"mappings":";;;;AAGA,SAAS,oBAAoB,CAAC,UAAU,EAAE,WAAW,GAAG,KAAK,EAAE;AAC/D,IAAI,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;AACzC,IAAI,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAC5G,IAAI,OAAO,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC;AACjD;AACO,SAAS,sBAAsB,CAAC,WAAW,GAAG,KAAK,EAAE;AAC5D,IAAI,OAAO,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC;AAClD;AACO,SAAS,sBAAsB,CAAC,WAAW,GAAG,KAAK,EAAE;AAC5D,IAAI,OAAO,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC;AAClD;AACO,SAAS,sBAAsB,CAAC,WAAW,GAAG,KAAK,EAAE;AAC5D,IAAI,OAAO,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC;AAClD;AACO,SAAS,sBAAsB,CAAC,WAAW,GAAG,KAAK,EAAE;AAC5D,IAAI,OAAO,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC;AAClD;AACO,SAAS,sBAAsB,CAAC,WAAW,GAAG,KAAK,EAAE;AAC5D,IAAI,OAAO,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC;AAClD;AACO,SAAS,uBAAuB,CAAC,WAAW,GAAG,KAAK,EAAE;AAC7D,IAAI,OAAO,oBAAoB,CAAC,KAAK,EAAE,WAAW,CAAC;AACnD;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useSyncExternalStore } from 'react';
|
|
2
|
+
import { subscribeToMediaQuery, checkMediaQuery } from '../utils/mediaQuery.js';
|
|
3
|
+
|
|
4
|
+
function useMediaQuery(mediaQuery, useListener = false) {
|
|
5
|
+
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
|
|
6
|
+
const noop = (_) => () => { };
|
|
7
|
+
return useSyncExternalStore(useListener ? (cb) => subscribeToMediaQuery(mediaQuery, cb) : noop, () => (mediaQuery ? checkMediaQuery(mediaQuery) : true), () => false);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { useMediaQuery as default };
|
|
11
|
+
//# sourceMappingURL=useMediaQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMediaQuery.js","sources":["../../../dist-transpiled/hooks/useMediaQuery.js"],"sourcesContent":["import { useSyncExternalStore } from 'react';\nimport { subscribeToMediaQuery, checkMediaQuery } from '../utils/mediaQuery';\nexport default function useMediaQuery(mediaQuery, useListener = false) {\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n const noop = (_) => () => { };\n return useSyncExternalStore(useListener ? (cb) => subscribeToMediaQuery(mediaQuery, cb) : noop, () => (mediaQuery ? checkMediaQuery(mediaQuery) : true), () => false);\n}\n//# sourceMappingURL=useMediaQuery.js.map"],"names":[],"mappings":";;;AAEe,SAAS,aAAa,CAAC,UAAU,EAAE,WAAW,GAAG,KAAK,EAAE;AACvE;AACA,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;AACjC,IAAI,OAAO,oBAAoB,CAAC,WAAW,GAAG,CAAC,EAAE,KAAK,qBAAqB,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,EAAE,MAAM,KAAK,CAAC;AACzK;;;;"}
|