@dynamic-framework/ui-react 2.8.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 +5 -22
- package/dist/css/dynamic-ui.min.css +2 -2
- 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 +463 -55
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +465 -54
- 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/DInputCheck/DInputCheck.d.ts +1 -0
- package/dist/types/components/DInputRange/DInputRange.d.ts +1 -1
- package/dist/types/components/DInputSwitch/DInputSwitch.d.ts +2 -1
- package/dist/types/components/DModal/components/DModalHeader.d.ts +5 -1
- package/dist/types/components/DOffcanvas/components/DOffcanvasHeader.d.ts +5 -1
- package/dist/types/components/DTooltip/DTooltip.d.ts +38 -3
- 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/dist/types/utils/buildUrl.d.ts +32 -0
- package/dist/types/utils/index.d.ts +2 -0
- package/dist/types/utils/sanitizeHref.d.ts +37 -0
- package/package.json +12 -9
- package/src/style/_shame.scss +1 -5
- package/src/style/abstracts/variables/_+import.scss +1 -0
- package/src/style/abstracts/variables/_box.scss +7 -0
- package/src/style/abstracts/variables/_forms.scss +1 -3
- package/src/style/abstracts/variables/_shadow.scss +12 -1
- package/src/style/base/_+import.scss +0 -1
- package/src/style/base/_form-check.scss +4 -2
- package/src/style/components/_d-box.scss +5 -5
- 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/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/validatePhoneNumber.spec.d.ts +0 -1
- package/src/style/base/_form-text.scss +0 -12
package/dist/index.js
CHANGED
|
@@ -45,6 +45,16 @@ function _interopNamespaceDefault(e) {
|
|
|
45
45
|
var LucideIcons__namespace = /*#__PURE__*/_interopNamespaceDefault(LucideIcons);
|
|
46
46
|
|
|
47
47
|
const PREFIX_BS = 'bs-';
|
|
48
|
+
/**
|
|
49
|
+
* Default icon-font family configured by `DContextProvider`.
|
|
50
|
+
*
|
|
51
|
+
* `DIconBase` compares the family it receives against these values to tell an
|
|
52
|
+
* unconfigured consumer apart from one that deliberately opted into an icon
|
|
53
|
+
* font (Material Symbols, Bootstrap Icons). Only the former gets the
|
|
54
|
+
* development warning for an unresolved icon name.
|
|
55
|
+
*/
|
|
56
|
+
const DEFAULT_ICON_FAMILY_CLASS = 'bi';
|
|
57
|
+
const DEFAULT_ICON_FAMILY_PREFIX = 'bi-';
|
|
48
58
|
|
|
49
59
|
/* eslint-disable no-lonely-if */
|
|
50
60
|
function useDisableBodyScrollEffect(disable) {
|
|
@@ -326,8 +336,8 @@ const DEFAULT_STATE = {
|
|
|
326
336
|
decimal: '.',
|
|
327
337
|
},
|
|
328
338
|
icon: {
|
|
329
|
-
familyClass:
|
|
330
|
-
familyPrefix:
|
|
339
|
+
familyClass: DEFAULT_ICON_FAMILY_CLASS,
|
|
340
|
+
familyPrefix: DEFAULT_ICON_FAMILY_PREFIX,
|
|
331
341
|
materialStyle: false,
|
|
332
342
|
},
|
|
333
343
|
iconRegistry: undefined,
|
|
@@ -432,6 +442,79 @@ function useDContext() {
|
|
|
432
442
|
return React.useContext(DContext);
|
|
433
443
|
}
|
|
434
444
|
|
|
445
|
+
/**
|
|
446
|
+
* Resolves a string icon name against the registry supplied through
|
|
447
|
+
* `DContextProvider`'s `iconRegistry` prop.
|
|
448
|
+
*
|
|
449
|
+
* This is the single implementation shared by `DIcon` and `DIconBase`, so both
|
|
450
|
+
* public entry points — and every Dynamic UI component that renders an icon
|
|
451
|
+
* through them — resolve names identically.
|
|
452
|
+
*
|
|
453
|
+
* A non-string `icon` is returned untouched: a component passed directly needs
|
|
454
|
+
* no lookup. A name missing from the registry is also returned untouched, so
|
|
455
|
+
* the caller can fall through to lucide-react and then to the icon-font family.
|
|
456
|
+
*/
|
|
457
|
+
function resolveIconFromRegistry(icon, iconRegistry) {
|
|
458
|
+
if (typeof icon !== 'string')
|
|
459
|
+
return icon;
|
|
460
|
+
return (iconRegistry === null || iconRegistry === void 0 ? void 0 : iconRegistry[icon]) || icon;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
/**
|
|
464
|
+
* Names already reported, so a name repeated across renders or across many
|
|
465
|
+
* instances only warns once per page load.
|
|
466
|
+
*/
|
|
467
|
+
const warnedIconNames = new Set();
|
|
468
|
+
/**
|
|
469
|
+
* True when the icon-font family is the one `DContextProvider` defaults to.
|
|
470
|
+
*
|
|
471
|
+
* The warning is limited to that case so a consumer who configured a different
|
|
472
|
+
* font — Material Symbols, for instance — is not told about names that font
|
|
473
|
+
* resolves perfectly well.
|
|
474
|
+
*
|
|
475
|
+
* It cannot tell "never configured a font" apart from "configured exactly the
|
|
476
|
+
* defaults", and those defaults are also the standard Bootstrap Icons setup, so
|
|
477
|
+
* a consumer who deliberately uses Bootstrap Icons is warned too. The message
|
|
478
|
+
* says so; silencing that case would need a new context flag, which is beyond
|
|
479
|
+
* what this helper should decide.
|
|
480
|
+
*/
|
|
481
|
+
function isDefaultIconFamily(familyClass, familyPrefix) {
|
|
482
|
+
return familyClass === DEFAULT_ICON_FAMILY_CLASS
|
|
483
|
+
&& familyPrefix === DEFAULT_ICON_FAMILY_PREFIX;
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Warns, once per name and only outside production builds, that an icon name
|
|
487
|
+
* resolved to neither the registry nor lucide-react and is falling back to the
|
|
488
|
+
* default icon font, which this package no longer ships.
|
|
489
|
+
*
|
|
490
|
+
* Whether that fallback renders depends on the host app: if it loads the font
|
|
491
|
+
* itself the `<i>` shows the glyph, and if it does not, nothing appears. The
|
|
492
|
+
* message states both possibilities instead of assuming the second.
|
|
493
|
+
*
|
|
494
|
+
* The `process.env.NODE_ENV` guard is what bundlers constant-fold, so the whole
|
|
495
|
+
* call — and this module — drops out of a consumer's production bundle.
|
|
496
|
+
*/
|
|
497
|
+
function warnUnknownIcon(name, familyClass, familyPrefix) {
|
|
498
|
+
if (!isDefaultIconFamily(familyClass, familyPrefix))
|
|
499
|
+
return;
|
|
500
|
+
if (warnedIconNames.has(name))
|
|
501
|
+
return;
|
|
502
|
+
warnedIconNames.add(name);
|
|
503
|
+
const fallbackClass = `${DEFAULT_ICON_FAMILY_CLASS} ${DEFAULT_ICON_FAMILY_PREFIX}${name}`;
|
|
504
|
+
// eslint-disable-next-line no-console
|
|
505
|
+
console.warn(`[Dynamic UI] Icon "${name}" is not in the icon registry and is not a `
|
|
506
|
+
+ 'lucide-react export, so it falls back to the default icon font: '
|
|
507
|
+
+ `<i class="${fallbackClass}">. That renders only if your app loads that `
|
|
508
|
+
+ 'font, which this package stopped shipping in v2.0.0. '
|
|
509
|
+
+ 'If the icon is missing, pass a PascalCase lucide-react name such as '
|
|
510
|
+
+ '"Home", or register the component with '
|
|
511
|
+
+ '<DContextProvider iconRegistry={{ MyIcon }}>. '
|
|
512
|
+
+ `If you use the "${DEFAULT_ICON_FAMILY_CLASS}" font on purpose, this is a `
|
|
513
|
+
+ 'false positive: the warning fires whenever the configured family equals '
|
|
514
|
+
+ 'the package default, which is also the standard Bootstrap Icons setup. '
|
|
515
|
+
+ 'It never appears in production builds.');
|
|
516
|
+
}
|
|
517
|
+
|
|
435
518
|
function subscribeToMediaQuery(query, callback) {
|
|
436
519
|
const mediaQueryList = window.matchMedia(query);
|
|
437
520
|
mediaQueryList.addEventListener('change', callback);
|
|
@@ -521,7 +604,31 @@ function useResponsiveProp(useListener = false) {
|
|
|
521
604
|
function isIconComponent(value) {
|
|
522
605
|
return typeof value !== 'string' && reactIs.isValidElementType(value);
|
|
523
606
|
}
|
|
524
|
-
|
|
607
|
+
/**
|
|
608
|
+
* Renders an icon, resolving the `icon` prop in this order:
|
|
609
|
+
*
|
|
610
|
+
* 1. **Icon registry** — a string name found in `DContextProvider`'s
|
|
611
|
+
* `iconRegistry` renders the component registered under it. A component
|
|
612
|
+
* passed directly skips this step and renders as-is.
|
|
613
|
+
* 2. **lucide-react** — a PascalCase name exported by lucide-react renders that
|
|
614
|
+
* icon. When `materialStyle` is on, this step is skipped and the name is
|
|
615
|
+
* emitted as the text content of the icon-font element instead.
|
|
616
|
+
* 3. **Icon-font family** — anything left over renders as
|
|
617
|
+
* `<i class="{familyClass} {familyPrefix}{name}">`, the legacy path for
|
|
618
|
+
* Material Symbols and Bootstrap Icons. Outside production builds, a name
|
|
619
|
+
* that reaches this step while the family is still the package default logs
|
|
620
|
+
* a one-time warning.
|
|
621
|
+
*
|
|
622
|
+
* A name that resolves nowhere and has no family configured renders `?`.
|
|
623
|
+
*
|
|
624
|
+
* Every path is hidden from the accessibility tree by default (`aria-hidden`),
|
|
625
|
+
* since icons are overwhelmingly decorative. See `ariaHidden` / `ariaLabel` to
|
|
626
|
+
* override that for an icon that carries meaning on its own.
|
|
627
|
+
*/
|
|
628
|
+
function DIconBase({ icon: iconProp, color, style, className, size, useListenerSize = false, hasCircle = false, materialStyle = false, familyClass, familyPrefix, strokeWidth = 2, ariaHidden, ariaLabel, dataAttributes, }) {
|
|
629
|
+
const { iconRegistry } = useDContext();
|
|
630
|
+
// The registry wins over every other source, including Material icons.
|
|
631
|
+
const icon = resolveIconFromRegistry(iconProp, iconRegistry);
|
|
525
632
|
// If materialStyle is true, use Material Design icons (legacy)
|
|
526
633
|
const isStringIcon = typeof icon === 'string';
|
|
527
634
|
const useMaterialIcons = materialStyle && isStringIcon;
|
|
@@ -543,6 +650,61 @@ function DIconBase({ icon, color, style, className, size, useListenerSize = fals
|
|
|
543
650
|
}, [responsivePropValue, size]);
|
|
544
651
|
const generateStyleVariables = React.useMemo(() => (Object.assign(Object.assign(Object.assign({}, resolvedSize && { [`--${PREFIX_BS}icon-component-size`]: resolvedSize }), hasCircle && { [`--${PREFIX_BS}icon-component-padding`]: `calc(var(--${PREFIX_BS}icon-component-size, 24px) * 0.4)` }), style)), [resolvedSize, hasCircle, style]);
|
|
545
652
|
const generateClasses = React.useMemo(() => (Object.assign(Object.assign(Object.assign({ 'd-icon': true }, className && { [className]: true }), { 'd-icon-has-circle': hasCircle }), color && { [`d-icon-color-${color}`]: true })), [className, hasCircle, color]);
|
|
653
|
+
/**
|
|
654
|
+
* Decorative by default. `ariaHidden` and `ariaLabel` are not symmetric:
|
|
655
|
+
* hiding is absolute, so `ariaHidden` wins over a name, but `ariaHidden={false}`
|
|
656
|
+
* and `ariaLabel` agree — both expose the icon — and the name is honoured.
|
|
657
|
+
*/
|
|
658
|
+
const accessibilityProps = React.useMemo(() => {
|
|
659
|
+
// Hiding is absolute: it wins over a name.
|
|
660
|
+
if (ariaHidden === true)
|
|
661
|
+
return { 'aria-hidden': true };
|
|
662
|
+
// A name exposes the icon, which is also what `ariaHidden={false}` asks for.
|
|
663
|
+
if (ariaLabel)
|
|
664
|
+
return { role: 'img', 'aria-label': ariaLabel };
|
|
665
|
+
// Exposed with no name: an explicit opt-out of the default, warned about below.
|
|
666
|
+
if (ariaHidden === false)
|
|
667
|
+
return {};
|
|
668
|
+
return { 'aria-hidden': true };
|
|
669
|
+
}, [ariaHidden, ariaLabel]);
|
|
670
|
+
/**
|
|
671
|
+
* `dataAttributes` is typed to `data-*`, but casting through it was the only
|
|
672
|
+
* way to reach the DOM before `ariaHidden` existed, so it still wins over the
|
|
673
|
+
* computed values — and therefore decides the effective state below.
|
|
674
|
+
*/
|
|
675
|
+
const domAttributes = React.useMemo(() => (Object.assign(Object.assign({}, accessibilityProps), dataAttributes)), [accessibilityProps, dataAttributes]);
|
|
676
|
+
/**
|
|
677
|
+
* lucide-react hides its own `<svg>` unless it receives an a11y prop, and a
|
|
678
|
+
* registry component may do the same, which would keep the graphic out of the
|
|
679
|
+
* tree even when this wrapper is not hidden. Only matters when the icon is
|
|
680
|
+
* exposed without a name: under `role="img"` the wrapper is a leaf, so a
|
|
681
|
+
* hidden child changes nothing.
|
|
682
|
+
*
|
|
683
|
+
* A registry component that hardcodes `aria-hidden` on its own `<svg>` instead
|
|
684
|
+
* of spreading props still wins — nothing here can reach inside it.
|
|
685
|
+
*/
|
|
686
|
+
const isExposedWithoutName = React.useMemo(() => {
|
|
687
|
+
const attributes = domAttributes;
|
|
688
|
+
const hidden = attributes['aria-hidden'];
|
|
689
|
+
return hidden !== true && hidden !== 'true' && !attributes.role;
|
|
690
|
+
}, [domAttributes]);
|
|
691
|
+
/**
|
|
692
|
+
* Diagnostics read the effective state, so a `dataAttributes` override that
|
|
693
|
+
* hides the icon after all is not reported as exposing it. Memoised like the
|
|
694
|
+
* values above, so re-rendering with the same props does not repeat them.
|
|
695
|
+
*/
|
|
696
|
+
React.useMemo(() => {
|
|
697
|
+
if (process.env.NODE_ENV === 'production')
|
|
698
|
+
return;
|
|
699
|
+
if (ariaHidden === true && ariaLabel) {
|
|
700
|
+
// eslint-disable-next-line no-console
|
|
701
|
+
console.warn(`DIcon: ariaLabel "${ariaLabel}" is ignored because ariaHidden is true. Drop ariaHidden to expose the name.`);
|
|
702
|
+
}
|
|
703
|
+
if (ariaHidden === false && isExposedWithoutName) {
|
|
704
|
+
// eslint-disable-next-line no-console
|
|
705
|
+
console.warn('DIcon: ariaHidden={false} without an ariaLabel exposes an unnamed graphic to assistive technology. Pass ariaLabel to name it.');
|
|
706
|
+
}
|
|
707
|
+
}, [ariaHidden, ariaLabel, isExposedWithoutName]);
|
|
546
708
|
const iconSize = React.useMemo(() => {
|
|
547
709
|
if (resolvedSize) {
|
|
548
710
|
const numSize = parseInt(resolvedSize, 10);
|
|
@@ -552,43 +714,46 @@ function DIconBase({ icon, color, style, className, size, useListenerSize = fals
|
|
|
552
714
|
}, [resolvedSize]);
|
|
553
715
|
// Render Material Design icon (legacy support)
|
|
554
716
|
if (useMaterialIcons) {
|
|
555
|
-
return (jsxRuntime.jsx("i", Object.assign({ className: classNames(generateClasses, familyClass), style: generateStyleVariables },
|
|
717
|
+
return (jsxRuntime.jsx("i", Object.assign({ className: classNames(generateClasses, familyClass), style: generateStyleVariables }, domAttributes, { children: isStringIcon ? icon : null })));
|
|
556
718
|
}
|
|
557
719
|
if (isIconComponent(icon)) {
|
|
558
|
-
return (jsxRuntime.jsx("span", Object.assign({ className: classNames(generateClasses), style: generateStyleVariables },
|
|
559
|
-
width: resolvedSize || 24,
|
|
560
|
-
height: resolvedSize || 24,
|
|
561
|
-
strokeWidth,
|
|
562
|
-
}) })));
|
|
720
|
+
return (jsxRuntime.jsx("span", Object.assign({ className: classNames(generateClasses), style: generateStyleVariables }, domAttributes, { children: React.createElement(icon, Object.assign({ width: resolvedSize || 24, height: resolvedSize || 24, strokeWidth }, isExposedWithoutName && { 'aria-hidden': false })) })));
|
|
563
721
|
}
|
|
564
722
|
// Render Lucide icon
|
|
565
723
|
if (!LucideIcon) {
|
|
566
|
-
if (
|
|
567
|
-
|
|
724
|
+
if (typeof icon === 'string' && familyClass && familyPrefix) {
|
|
725
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
726
|
+
warnUnknownIcon(icon, familyClass, familyPrefix);
|
|
727
|
+
}
|
|
728
|
+
return (jsxRuntime.jsx("i", Object.assign({ className: classNames(generateClasses, familyClass, `${familyPrefix}${icon}`), style: generateStyleVariables }, domAttributes)));
|
|
568
729
|
}
|
|
569
730
|
// eslint-disable-next-line no-console
|
|
570
731
|
console.warn(`Icon "${String(icon)}" not found in Lucide. Make sure to use PascalCase names (e.g., "Home", "User", "Settings")`);
|
|
571
|
-
return (jsxRuntime.jsx("span", Object.assign({ className: classNames(generateClasses), style: generateStyleVariables },
|
|
732
|
+
return (jsxRuntime.jsx("span", Object.assign({ className: classNames(generateClasses), style: generateStyleVariables }, domAttributes, { children: "?" })));
|
|
572
733
|
}
|
|
573
|
-
return (jsxRuntime.jsx("span", Object.assign({ className: classNames(generateClasses), style: generateStyleVariables },
|
|
734
|
+
return (jsxRuntime.jsx("span", Object.assign({ className: classNames(generateClasses), style: generateStyleVariables }, domAttributes, { children: jsxRuntime.jsx(LucideIcon, Object.assign({ size: iconSize || 24, strokeWidth: strokeWidth }, isExposedWithoutName && { 'aria-hidden': false })) })));
|
|
574
735
|
}
|
|
575
736
|
|
|
737
|
+
/**
|
|
738
|
+
* Thin wrapper over `DIconBase` that fills the icon-font configuration
|
|
739
|
+
* (`familyClass`, `familyPrefix`, `materialStyle`) from `DContextProvider`
|
|
740
|
+
* whenever the caller does not pass it explicitly.
|
|
741
|
+
*
|
|
742
|
+
* Name resolution itself — registry, then lucide-react, then the icon-font
|
|
743
|
+
* family — lives in `DIconBase`, so both components behave identically.
|
|
744
|
+
*/
|
|
576
745
|
function DIcon(_a) {
|
|
577
746
|
var { icon, familyClass: propFamilyClass, familyPrefix: propFamilyPrefix, materialStyle: propMaterialStyle } = _a, props = tslib.__rest(_a, ["icon", "familyClass", "familyPrefix", "materialStyle"]);
|
|
578
|
-
const { icon: { familyClass, familyPrefix, materialStyle, },
|
|
579
|
-
|
|
580
|
-
? iconRegistry === null || iconRegistry === void 0 ? void 0 : iconRegistry[icon]
|
|
581
|
-
: undefined;
|
|
582
|
-
const resolvedIcon = registryIcon || icon;
|
|
583
|
-
return (jsxRuntime.jsx(DIconBase, Object.assign({ icon: resolvedIcon, familyClass: propFamilyClass !== null && propFamilyClass !== void 0 ? propFamilyClass : familyClass, familyPrefix: propFamilyPrefix !== null && propFamilyPrefix !== void 0 ? propFamilyPrefix : familyPrefix, materialStyle: propMaterialStyle !== null && propMaterialStyle !== void 0 ? propMaterialStyle : materialStyle }, props)));
|
|
747
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
748
|
+
return (jsxRuntime.jsx(DIconBase, Object.assign({ icon: icon, familyClass: propFamilyClass !== null && propFamilyClass !== void 0 ? propFamilyClass : familyClass, familyPrefix: propFamilyPrefix !== null && propFamilyPrefix !== void 0 ? propFamilyPrefix : familyPrefix, materialStyle: propMaterialStyle !== null && propMaterialStyle !== void 0 ? propMaterialStyle : materialStyle }, props)));
|
|
584
749
|
}
|
|
585
750
|
|
|
586
|
-
function DAlert({ color = 'success', icon: iconProp, iconFamilyClass, iconFamilyPrefix, iconMaterialStyle
|
|
587
|
-
const { iconMap: { alert, xLg, }, } = useDContext();
|
|
751
|
+
function DAlert({ color = 'success', icon: iconProp, iconFamilyClass, iconFamilyPrefix, iconMaterialStyle, iconClose: iconCloseProp, iconCloseFamilyClass, iconCloseFamilyPrefix, iconCloseMaterialStyle, showClose, onClose, children, id, className, style, dataAttributes, }) {
|
|
752
|
+
const { icon: { materialStyle, familyClass, familyPrefix, }, iconMap: { alert, xLg, }, } = useDContext();
|
|
588
753
|
const icon = React.useMemo(() => iconProp || alert[color], [alert, iconProp, color]);
|
|
589
754
|
const iconClose = React.useMemo(() => (iconCloseProp || xLg), [iconCloseProp, xLg]);
|
|
590
755
|
const generateClasses = React.useMemo(() => (Object.assign({ alert: true, [`alert-${color}`]: true, 'fade show': !!showClose }, className && { [className]: true })), [color, showClose, className]);
|
|
591
|
-
return (jsxRuntime.jsxs("div", Object.assign({ className: classNames(generateClasses), style: style, role: "alert", id: id }, dataAttributes, { children: [icon && (jsxRuntime.jsx(DIcon, { className: "alert-icon", icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle })), jsxRuntime.jsx("div", { className: "alert-text", children: children }), showClose && (jsxRuntime.jsx("button", { type: "button", className: "d-close", "aria-label": "Close", onClick: onClose, children: jsxRuntime.jsx(DIcon, { icon: iconClose, familyClass: iconCloseFamilyClass, familyPrefix: iconCloseFamilyPrefix, materialStyle: iconCloseMaterialStyle }) }))] })));
|
|
756
|
+
return (jsxRuntime.jsxs("div", Object.assign({ className: classNames(generateClasses), style: style, role: "alert", id: id }, dataAttributes, { children: [icon && (jsxRuntime.jsx(DIcon, { className: "alert-icon", icon: icon, familyClass: iconFamilyClass !== null && iconFamilyClass !== void 0 ? iconFamilyClass : familyClass, familyPrefix: iconFamilyPrefix !== null && iconFamilyPrefix !== void 0 ? iconFamilyPrefix : familyPrefix, materialStyle: iconMaterialStyle !== null && iconMaterialStyle !== void 0 ? iconMaterialStyle : materialStyle })), jsxRuntime.jsx("div", { className: "alert-text", children: children }), showClose && (jsxRuntime.jsx("button", { type: "button", className: "d-close", "aria-label": "Close", onClick: onClose, children: jsxRuntime.jsx(DIcon, { icon: iconClose, familyClass: iconCloseFamilyClass !== null && iconCloseFamilyClass !== void 0 ? iconCloseFamilyClass : familyClass, familyPrefix: iconCloseFamilyPrefix !== null && iconCloseFamilyPrefix !== void 0 ? iconCloseFamilyPrefix : familyPrefix, materialStyle: iconCloseMaterialStyle !== null && iconCloseMaterialStyle !== void 0 ? iconCloseMaterialStyle : materialStyle }) }))] })));
|
|
592
757
|
}
|
|
593
758
|
|
|
594
759
|
function DAvatar({ id, size, image, name: nameProp, useNameAsInitials = false, className, style, dataAttributes, }) {
|
|
@@ -610,6 +775,7 @@ function DAvatar({ id, size, image, name: nameProp, useNameAsInitials = false, c
|
|
|
610
775
|
|
|
611
776
|
function DBadge(props) {
|
|
612
777
|
const { text, soft = false, color = 'primary', id, rounded, className, size, style, iconStart, iconEnd, iconMaterialStyle, iconFamilyClass, iconFamilyPrefix, dataAttributes, } = props;
|
|
778
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
613
779
|
// Responsive size resolution using useResponsiveProp
|
|
614
780
|
const { responsivePropValue } = useResponsiveProp(true);
|
|
615
781
|
const resolvedSize = React.useMemo(() => {
|
|
@@ -626,7 +792,7 @@ function DBadge(props) {
|
|
|
626
792
|
'rounded-pill': !!rounded,
|
|
627
793
|
[`badge-${resolvedSize}`]: !!resolvedSize,
|
|
628
794
|
}), [rounded, soft, color, resolvedSize]);
|
|
629
|
-
return (jsxRuntime.jsxs("span", Object.assign({ className: classNames(generateClasses, className), style: style }, id && { id }, dataAttributes, { children: [iconStart && (jsxRuntime.jsx(DIcon, { icon: iconStart, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle })), jsxRuntime.jsx("span", { children: text }), iconEnd && (jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle }))] })));
|
|
795
|
+
return (jsxRuntime.jsxs("span", Object.assign({ className: classNames(generateClasses, className), style: style }, id && { id }, dataAttributes, { children: [iconStart && (jsxRuntime.jsx(DIcon, { icon: iconStart, familyClass: iconFamilyClass !== null && iconFamilyClass !== void 0 ? iconFamilyClass : familyClass, familyPrefix: iconFamilyPrefix !== null && iconFamilyPrefix !== void 0 ? iconFamilyPrefix : familyPrefix, materialStyle: iconMaterialStyle !== null && iconMaterialStyle !== void 0 ? iconMaterialStyle : materialStyle })), jsxRuntime.jsx("span", { children: text }), iconEnd && (jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconFamilyClass !== null && iconFamilyClass !== void 0 ? iconFamilyClass : familyClass, familyPrefix: iconFamilyPrefix !== null && iconFamilyPrefix !== void 0 ? iconFamilyPrefix : familyPrefix, materialStyle: iconMaterialStyle !== null && iconMaterialStyle !== void 0 ? iconMaterialStyle : materialStyle }))] })));
|
|
630
796
|
}
|
|
631
797
|
|
|
632
798
|
function DBox({ className, style, children, dataAttributes, }) {
|
|
@@ -658,6 +824,7 @@ function DInput(_a, ref) {
|
|
|
658
824
|
const inputRef = useProvidedRefOrCreate(ref);
|
|
659
825
|
const innerId = React.useId();
|
|
660
826
|
const id = React.useMemo(() => idProp || innerId, [idProp, innerId]);
|
|
827
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
661
828
|
const handleOnChange = React.useCallback((event) => {
|
|
662
829
|
onChange === null || onChange === void 0 ? void 0 : onChange(event.currentTarget.value);
|
|
663
830
|
}, [onChange]);
|
|
@@ -720,7 +887,7 @@ function DInput(_a, ref) {
|
|
|
720
887
|
[`input-group-${size}`]: !!size,
|
|
721
888
|
'input-group': true,
|
|
722
889
|
'has-validation': invalid || valid,
|
|
723
|
-
}), children: [!!inputStart && (jsxRuntime.jsx("div", { className: "input-group-text", id: `${id}InputStart`, children: inputStart })), iconStart && (onIconStartClick ? (jsxRuntime.jsx("button", { type: "button", className: "input-group-text", id: `${id}Start`, onClick: handleOnIconStartClick, disabled: disabled || loading || iconStartDisabled, "aria-label": iconStartAriaLabel || (typeof iconStart === 'string' ? iconStart : 'start icon'), tabIndex: iconStartTabIndex, children: jsxRuntime.jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass, familyPrefix: iconStartFamilyPrefix, materialStyle: iconStartMaterialStyle }) })) : (jsxRuntime.jsx("div", { className: "input-group-text", id: `${id}Start`,
|
|
890
|
+
}), children: [!!inputStart && (jsxRuntime.jsx("div", { className: "input-group-text", id: `${id}InputStart`, children: inputStart })), iconStart && (onIconStartClick ? (jsxRuntime.jsx("button", { type: "button", className: "input-group-text", id: `${id}Start`, onClick: handleOnIconStartClick, disabled: disabled || loading || iconStartDisabled, "aria-label": iconStartAriaLabel || (typeof iconStart === 'string' ? iconStart : 'start icon'), tabIndex: iconStartTabIndex, children: jsxRuntime.jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass !== null && iconStartFamilyClass !== void 0 ? iconStartFamilyClass : familyClass, familyPrefix: iconStartFamilyPrefix !== null && iconStartFamilyPrefix !== void 0 ? iconStartFamilyPrefix : familyPrefix, materialStyle: iconStartMaterialStyle !== null && iconStartMaterialStyle !== void 0 ? iconStartMaterialStyle : materialStyle }) })) : (jsxRuntime.jsx("div", { className: "input-group-text", id: `${id}Start`, tabIndex: -1, children: jsxRuntime.jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass !== null && iconStartFamilyClass !== void 0 ? iconStartFamilyClass : familyClass, familyPrefix: iconStartFamilyPrefix !== null && iconStartFamilyPrefix !== void 0 ? iconStartFamilyPrefix : familyPrefix, materialStyle: iconStartMaterialStyle !== null && iconStartMaterialStyle !== void 0 ? iconStartMaterialStyle : materialStyle }) }))), dynamicComponent, (iconEnd && !loading) && (onIconEndClick ? (jsxRuntime.jsx("button", { type: "button", className: "input-group-text", id: `${id}End`, onClick: handleOnIconEndClick, disabled: disabled || loading || iconEndDisabled, "aria-label": iconEndAriaLabel || (typeof iconEnd === 'string' ? iconEnd : 'end icon'), tabIndex: iconEndTabIndex, children: jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass !== null && iconEndFamilyClass !== void 0 ? iconEndFamilyClass : familyClass, familyPrefix: iconEndFamilyPrefix !== null && iconEndFamilyPrefix !== void 0 ? iconEndFamilyPrefix : familyPrefix, materialStyle: iconEndMaterialStyle !== null && iconEndMaterialStyle !== void 0 ? iconEndMaterialStyle : materialStyle }) })) : (jsxRuntime.jsx("div", { className: "input-group-text", id: `${id}End`, tabIndex: -1, children: jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass !== null && iconEndFamilyClass !== void 0 ? iconEndFamilyClass : familyClass, familyPrefix: iconEndFamilyPrefix !== null && iconEndFamilyPrefix !== void 0 ? iconEndFamilyPrefix : familyPrefix, materialStyle: iconEndMaterialStyle !== null && iconEndMaterialStyle !== void 0 ? iconEndMaterialStyle : materialStyle }) }))), loading && (jsxRuntime.jsx("div", { className: "input-group-text", id: `${id}Loading`, children: jsxRuntime.jsx("span", { className: "spinner-border spinner-border-sm", role: "status", "aria-hidden": "true", "data-testid": "loading-spinner", children: jsxRuntime.jsx("span", { className: "visually-hidden", children: "Loading..." }) }) })), !!inputEnd && (jsxRuntime.jsx("div", { className: "input-group-text", id: `${id}InputEnd`, children: inputEnd }))] }), hint && (jsxRuntime.jsx("div", { className: "form-text", id: `${id}Hint`, children: hint }))] })));
|
|
724
891
|
}
|
|
725
892
|
const ForwardedDInput = React.forwardRef(DInput);
|
|
726
893
|
ForwardedDInput.displayName = 'DInput';
|
|
@@ -1116,7 +1283,7 @@ function useDBoxFile(props) {
|
|
|
1116
1283
|
|
|
1117
1284
|
function DBoxFile(_a) {
|
|
1118
1285
|
var { icon: iconProp, iconFamilyClass, iconFamilyPrefix, iconMaterialStyle, children, className, style, dataAttributes } = _a, props = tslib.__rest(_a, ["icon", "iconFamilyClass", "iconFamilyPrefix", "iconMaterialStyle", "children", "className", "style", "dataAttributes"]);
|
|
1119
|
-
const { iconMap: { upload } } = useDContext();
|
|
1286
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, iconMap: { upload }, } = useDContext();
|
|
1120
1287
|
const icon = React.useMemo(() => iconProp || upload, [iconProp, upload]);
|
|
1121
1288
|
const { inputRef, rootRef, isDragValid, isDragInvalid, acceptAttr, files, handleFileSelect, handleDrop, handleDragEnter, handleDragLeave, handleClick, handleKeyDown, handleRemoveFile, openFileDialog, } = useDBoxFile(props);
|
|
1122
1289
|
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("section", Object.assign({ className: classNames('d-box-file', {
|
|
@@ -1124,13 +1291,14 @@ function DBoxFile(_a) {
|
|
|
1124
1291
|
'd-box-file-disabled': props.disabled,
|
|
1125
1292
|
'd-box-file-valid': isDragValid,
|
|
1126
1293
|
'd-box-file-invalid': isDragInvalid,
|
|
1127
|
-
}, className), style: style }, dataAttributes, { children: jsxRuntime.jsxs("div", Object.assign({ className: "d-box-file-dropzone", ref: rootRef, onDragEnter: handleDragEnter, onDragOver: (e) => e.preventDefault(), onDragLeave: handleDragLeave, onDrop: handleDrop, onClick: handleClick, onKeyDown: handleKeyDown }, (!props.disabled && !props.noKeyboard ? { tabIndex: 0 } : {}), { role: "presentation", children: [jsxRuntime.jsx("input", { type: "file", multiple: props.multiple, style: { display: 'none' }, ref: inputRef, disabled: props.disabled, onChange: handleFileSelect, onClick: (e) => e.stopPropagation(), tabIndex: -1, accept: acceptAttr }), icon && iconProp !== false && (jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle })), jsxRuntime.jsx("div", { className: "d-box-content", children: typeof children === 'function'
|
|
1294
|
+
}, className), style: style }, dataAttributes, { children: jsxRuntime.jsxs("div", Object.assign({ className: "d-box-file-dropzone", ref: rootRef, onDragEnter: handleDragEnter, onDragOver: (e) => e.preventDefault(), onDragLeave: handleDragLeave, onDrop: handleDrop, onClick: handleClick, onKeyDown: handleKeyDown }, (!props.disabled && !props.noKeyboard ? { tabIndex: 0 } : {}), { role: "presentation", children: [jsxRuntime.jsx("input", { type: "file", multiple: props.multiple, style: { display: 'none' }, ref: inputRef, disabled: props.disabled, onChange: handleFileSelect, onClick: (e) => e.stopPropagation(), tabIndex: -1, accept: acceptAttr }), icon && iconProp !== false && (jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconFamilyClass !== null && iconFamilyClass !== void 0 ? iconFamilyClass : familyClass, familyPrefix: iconFamilyPrefix !== null && iconFamilyPrefix !== void 0 ? iconFamilyPrefix : familyPrefix, materialStyle: iconMaterialStyle !== null && iconMaterialStyle !== void 0 ? iconMaterialStyle : materialStyle })), jsxRuntime.jsx("div", { className: "d-box-content", children: typeof children === 'function'
|
|
1128
1295
|
? children(openFileDialog)
|
|
1129
1296
|
: children || (jsxRuntime.jsx("p", { className: "d-box-file-empty-text", children: "Drag and drop some files here, or click to select files" })) })] })) })), !!files.length && (jsxRuntime.jsx("ul", { className: "d-box-files", children: files.map((file, index) => (jsxRuntime.jsx(ForwardedDInput, { value: file.name, iconStart: "Paperclip", iconEnd: "Trash", readOnly: true, onIconEndClick: () => handleRemoveFile(index) }, `${file.name} ${index}`))) }))] }));
|
|
1130
1297
|
}
|
|
1131
1298
|
|
|
1132
1299
|
const DButton = React.forwardRef((props, ref) => {
|
|
1133
1300
|
const { color = 'primary', size, variant = 'solid', text, children, iconStart, iconStartFamilyClass, iconStartFamilyPrefix, iconStartMaterialStyle, iconEnd, iconEndFamilyClass, iconEndFamilyPrefix, iconEndMaterialStyle, loading = false, loadingText, loadingAriaLabel, disabled = false, className, style, dataAttributes, onClick, type = 'button', target, rel, href, 'aria-label': ariaLabelProp } = props, rest = tslib.__rest(props, ["color", "size", "variant", "text", "children", "iconStart", "iconStartFamilyClass", "iconStartFamilyPrefix", "iconStartMaterialStyle", "iconEnd", "iconEndFamilyClass", "iconEndFamilyPrefix", "iconEndMaterialStyle", "loading", "loadingText", "loadingAriaLabel", "disabled", "className", "style", "dataAttributes", "onClick", "type", "target", "rel", "href", 'aria-label']);
|
|
1301
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
1134
1302
|
// Responsive size resolution using useResponsiveProp
|
|
1135
1303
|
const { responsivePropValue } = useResponsiveProp(true);
|
|
1136
1304
|
const resolvedSize = React.useMemo(() => {
|
|
@@ -1184,7 +1352,7 @@ const DButton = React.forwardRef((props, ref) => {
|
|
|
1184
1352
|
ref.current = node;
|
|
1185
1353
|
}, className: classNames(classes, className), style: Object.assign(Object.assign({}, style), (loading && buttonWidth
|
|
1186
1354
|
? { minWidth: `${buttonWidth}px` }
|
|
1187
|
-
: undefined)), "aria-label": ariaLabel, "aria-busy": loading, "aria-disabled": isDisabled, onClick: handleClick }, dataAttributes, { children: [loading && (jsxRuntime.jsxs("span", { className: "btn-loading", children: [jsxRuntime.jsx("span", { className: "spinner-border spinner-border-sm", "aria-hidden": "true" }), loadingText && jsxRuntime.jsx("span", { role: "status", children: loadingText })] })), !loading && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [iconStart && (jsxRuntime.jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass, familyPrefix: iconStartFamilyPrefix, materialStyle: iconStartMaterialStyle })), content, iconEnd && (jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass, familyPrefix: iconEndFamilyPrefix, materialStyle: iconEndMaterialStyle }))] }))] })));
|
|
1355
|
+
: undefined)), "aria-label": ariaLabel, "aria-busy": loading, "aria-disabled": isDisabled, onClick: handleClick }, dataAttributes, { children: [loading && (jsxRuntime.jsxs("span", { className: "btn-loading", children: [jsxRuntime.jsx("span", { className: "spinner-border spinner-border-sm", "aria-hidden": "true" }), loadingText && jsxRuntime.jsx("span", { role: "status", children: loadingText })] })), !loading && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [iconStart && (jsxRuntime.jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass !== null && iconStartFamilyClass !== void 0 ? iconStartFamilyClass : familyClass, familyPrefix: iconStartFamilyPrefix !== null && iconStartFamilyPrefix !== void 0 ? iconStartFamilyPrefix : familyPrefix, materialStyle: iconStartMaterialStyle !== null && iconStartMaterialStyle !== void 0 ? iconStartMaterialStyle : materialStyle })), content, iconEnd && (jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass !== null && iconEndFamilyClass !== void 0 ? iconEndFamilyClass : familyClass, familyPrefix: iconEndFamilyPrefix !== null && iconEndFamilyPrefix !== void 0 ? iconEndFamilyPrefix : familyPrefix, materialStyle: iconEndMaterialStyle !== null && iconEndMaterialStyle !== void 0 ? iconEndMaterialStyle : materialStyle }))] }))] })));
|
|
1188
1356
|
}
|
|
1189
1357
|
return (jsxRuntime.jsxs("button", Object.assign({ ref: (node) => {
|
|
1190
1358
|
buttonRef.current = node;
|
|
@@ -1198,12 +1366,51 @@ const DButton = React.forwardRef((props, ref) => {
|
|
|
1198
1366
|
// eslint-disable-next-line react/button-has-type
|
|
1199
1367
|
type: type, className: classNames(classes, className), style: Object.assign(Object.assign({}, style), (loading && buttonWidth
|
|
1200
1368
|
? { minWidth: `${buttonWidth}px` }
|
|
1201
|
-
: undefined)), disabled: isDisabled, "aria-label": ariaLabel, "aria-busy": loading, "aria-disabled": isDisabled, onClick: handleClick }, dataAttributes, rest, { children: [loading && (jsxRuntime.jsxs("span", { className: "btn-loading", children: [jsxRuntime.jsx("span", { className: "spinner-border spinner-border-sm", "aria-hidden": "true" }), loadingText && jsxRuntime.jsx("span", { role: "status", children: loadingText })] })), !loading && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [iconStart && (jsxRuntime.jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass, familyPrefix: iconStartFamilyPrefix, materialStyle: iconStartMaterialStyle })), content, iconEnd && (jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass, familyPrefix: iconEndFamilyPrefix, materialStyle: iconEndMaterialStyle }))] }))] })));
|
|
1369
|
+
: undefined)), disabled: isDisabled, "aria-label": ariaLabel, "aria-busy": loading, "aria-disabled": isDisabled, onClick: handleClick }, dataAttributes, rest, { children: [loading && (jsxRuntime.jsxs("span", { className: "btn-loading", children: [jsxRuntime.jsx("span", { className: "spinner-border spinner-border-sm", "aria-hidden": "true" }), loadingText && jsxRuntime.jsx("span", { role: "status", children: loadingText })] })), !loading && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [iconStart && (jsxRuntime.jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass !== null && iconStartFamilyClass !== void 0 ? iconStartFamilyClass : familyClass, familyPrefix: iconStartFamilyPrefix !== null && iconStartFamilyPrefix !== void 0 ? iconStartFamilyPrefix : familyPrefix, materialStyle: iconStartMaterialStyle !== null && iconStartMaterialStyle !== void 0 ? iconStartMaterialStyle : materialStyle })), content, iconEnd && (jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass !== null && iconEndFamilyClass !== void 0 ? iconEndFamilyClass : familyClass, familyPrefix: iconEndFamilyPrefix !== null && iconEndFamilyPrefix !== void 0 ? iconEndFamilyPrefix : familyPrefix, materialStyle: iconEndMaterialStyle !== null && iconEndMaterialStyle !== void 0 ? iconEndMaterialStyle : materialStyle }))] }))] })));
|
|
1202
1370
|
});
|
|
1203
1371
|
DButton.displayName = 'DButton';
|
|
1204
1372
|
|
|
1373
|
+
/**
|
|
1374
|
+
* Controls already reported, keyed by kind and icon, so the same unlabelled one
|
|
1375
|
+
* only warns once per page load however often it re-renders or however many
|
|
1376
|
+
* instances exist.
|
|
1377
|
+
*/
|
|
1378
|
+
const warnedControls = new Set();
|
|
1379
|
+
/**
|
|
1380
|
+
* Warns, once per icon and only outside production builds, that an icon-only
|
|
1381
|
+
* button has no accessible name.
|
|
1382
|
+
*
|
|
1383
|
+
* The control has no text to fall back on and its icon is hidden from the
|
|
1384
|
+
* accessibility tree, so the name has to be given explicitly. `aria-label` is
|
|
1385
|
+
* the direct way; on a button `aria-labelledby` and `title` count too, since
|
|
1386
|
+
* `rest` reaches the DOM there, while an anchor drops them — hence `kind`, so
|
|
1387
|
+
* the advice matches what the element can actually receive.
|
|
1388
|
+
*
|
|
1389
|
+
* A legacy icon-font icon used to leak its ligature as the name by accident —
|
|
1390
|
+
* never a good one, being unlocalised and often meaningless ("more_vert") — and
|
|
1391
|
+
* no longer does, so the omission is now visible instead of silent.
|
|
1392
|
+
*
|
|
1393
|
+
* The `process.env.NODE_ENV` guard is what bundlers constant-fold, so the whole
|
|
1394
|
+
* call — and this module — drops out of a consumer's production bundle.
|
|
1395
|
+
*/
|
|
1396
|
+
function warnMissingAccessibleName(icon, kind) {
|
|
1397
|
+
const key = `${kind}:${icon}`;
|
|
1398
|
+
if (warnedControls.has(key))
|
|
1399
|
+
return;
|
|
1400
|
+
warnedControls.add(key);
|
|
1401
|
+
const alternatives = kind === 'button'
|
|
1402
|
+
? 'On a button, aria-labelledby or title work too. '
|
|
1403
|
+
: 'A link renders from the href branch, which does not forward aria-labelledby or title, so aria-label is the only option. ';
|
|
1404
|
+
// eslint-disable-next-line no-console
|
|
1405
|
+
console.warn(`[Dynamic UI] DButtonIcon: the "${icon}" ${kind} has no accessible name. `
|
|
1406
|
+
+ 'Pass aria-label, since an icon-only control has no text to fall back on '
|
|
1407
|
+
+ `and its icon is hidden from the accessibility tree. ${alternatives}`
|
|
1408
|
+
+ 'It never appears in production builds.');
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1205
1411
|
function DButtonIcon(_a) {
|
|
1206
1412
|
var { id, icon, size, className, variant, state, loadingAriaLabel, iconMaterialStyle, disabled = false, color = 'primary', loading = false, href, target, rel, stopPropagationEnabled = true, style, iconFamilyClass, iconFamilyPrefix, dataAttributes, onClick, 'aria-label': ariaLabelProp } = _a, rest = tslib.__rest(_a, ["id", "icon", "size", "className", "variant", "state", "loadingAriaLabel", "iconMaterialStyle", "disabled", "color", "loading", "href", "target", "rel", "stopPropagationEnabled", "style", "iconFamilyClass", "iconFamilyPrefix", "dataAttributes", "onClick", 'aria-label']);
|
|
1413
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
1207
1414
|
const generateClasses = React.useMemo(() => {
|
|
1208
1415
|
const variantClass = !variant || variant === 'solid'
|
|
1209
1416
|
? `btn-${color}`
|
|
@@ -1224,14 +1431,23 @@ function DButtonIcon(_a) {
|
|
|
1224
1431
|
const ariaLabel = React.useMemo(() => (loading
|
|
1225
1432
|
? loadingAriaLabel || ariaLabelProp
|
|
1226
1433
|
: ariaLabelProp), [loading, loadingAriaLabel, ariaLabelProp]);
|
|
1434
|
+
/**
|
|
1435
|
+
* `aria-labelledby` and `title` also name a control, but they travel in `rest`,
|
|
1436
|
+
* which only the button branch spreads — an anchor drops them, so there the
|
|
1437
|
+
* button really is unnamed and the warning still applies.
|
|
1438
|
+
*/
|
|
1439
|
+
const hasAccessibleName = React.useMemo(() => !!ariaLabel || (!href && (!!rest['aria-labelledby'] || !!rest.title)), [ariaLabel, href, rest]);
|
|
1440
|
+
if (process.env.NODE_ENV !== 'production' && !hasAccessibleName) {
|
|
1441
|
+
warnMissingAccessibleName(icon, href ? 'link' : 'button');
|
|
1442
|
+
}
|
|
1227
1443
|
if (href) {
|
|
1228
1444
|
return (jsxRuntime.jsx("a", Object.assign({ id: id, href: href, target: target, rel: rel, className: classNames(generateClasses, className), style: style, onClick: clickHandler, "aria-label": ariaLabel, "aria-disabled": isDisabled }, dataAttributes, { children: loading
|
|
1229
1445
|
? (jsxRuntime.jsx("span", { className: "spinner-border spinner-border-sm", role: "status", "aria-hidden": "true", children: jsxRuntime.jsx("span", { className: "visually-hidden", children: "Loading..." }) }))
|
|
1230
|
-
: (jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle })) })));
|
|
1446
|
+
: (jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconFamilyClass !== null && iconFamilyClass !== void 0 ? iconFamilyClass : familyClass, familyPrefix: iconFamilyPrefix !== null && iconFamilyPrefix !== void 0 ? iconFamilyPrefix : familyPrefix, materialStyle: iconMaterialStyle !== null && iconMaterialStyle !== void 0 ? iconMaterialStyle : materialStyle })) })));
|
|
1231
1447
|
}
|
|
1232
1448
|
return (jsxRuntime.jsx("button", Object.assign({ className: classNames(generateClasses, className), style: style, disabled: state === 'disabled' || loading, onClick: clickHandler, "aria-label": ariaLabel }, dataAttributes, rest, { children: loading
|
|
1233
1449
|
? (jsxRuntime.jsx("span", { className: "spinner-border spinner-border-sm", role: "status", "aria-hidden": "true", children: jsxRuntime.jsx("span", { className: "visually-hidden", children: "Loading..." }) }))
|
|
1234
|
-
: (jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle })) })));
|
|
1450
|
+
: (jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconFamilyClass !== null && iconFamilyClass !== void 0 ? iconFamilyClass : familyClass, familyPrefix: iconFamilyPrefix !== null && iconFamilyPrefix !== void 0 ? iconFamilyPrefix : familyPrefix, materialStyle: iconMaterialStyle !== null && iconMaterialStyle !== void 0 ? iconMaterialStyle : materialStyle })) })));
|
|
1235
1451
|
}
|
|
1236
1452
|
|
|
1237
1453
|
function DCardHeader({ className, style, children, }) {
|
|
@@ -1294,12 +1510,12 @@ function DChip({ color = 'primary', text, icon, iconFamilyClass, iconFamilyPrefi
|
|
|
1294
1510
|
'd-chip': true,
|
|
1295
1511
|
[`d-chip-${color}`]: !!color,
|
|
1296
1512
|
}), [color]);
|
|
1297
|
-
const { iconMap: { xLg, }, } = useDContext();
|
|
1513
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, iconMap: { xLg, }, } = useDContext();
|
|
1298
1514
|
const iconClose = React.useMemo(() => iconCloseProp || xLg, [iconCloseProp, xLg]);
|
|
1299
|
-
return (jsxRuntime.jsxs("span", Object.assign({ className: classNames(generateClasses, className), style: style }, dataAttributes, { children: [icon && (jsxRuntime.jsx("div", { className: "d-chip-icon-container", children: jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle }) })), jsxRuntime.jsx("span", { children: text }), showClose && (jsxRuntime.jsx("button", { type: "button", className: "d-chip-icon-container", onClick: onClose, "aria-label": closeAriaLabel, children: jsxRuntime.jsx(DIcon, { icon: iconClose, familyClass: iconCloseFamilyClass, familyPrefix: iconCloseFamilyPrefix, materialStyle: iconCloseMaterialStyle }) }))] })));
|
|
1515
|
+
return (jsxRuntime.jsxs("span", Object.assign({ className: classNames(generateClasses, className), style: style }, dataAttributes, { children: [icon && (jsxRuntime.jsx("div", { className: "d-chip-icon-container", children: jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconFamilyClass !== null && iconFamilyClass !== void 0 ? iconFamilyClass : familyClass, familyPrefix: iconFamilyPrefix !== null && iconFamilyPrefix !== void 0 ? iconFamilyPrefix : familyPrefix, materialStyle: iconMaterialStyle !== null && iconMaterialStyle !== void 0 ? iconMaterialStyle : materialStyle }) })), jsxRuntime.jsx("span", { children: text }), showClose && (jsxRuntime.jsx("button", { type: "button", className: "d-chip-icon-container", onClick: onClose, "aria-label": closeAriaLabel, children: jsxRuntime.jsx(DIcon, { icon: iconClose, familyClass: iconCloseFamilyClass !== null && iconCloseFamilyClass !== void 0 ? iconCloseFamilyClass : familyClass, familyPrefix: iconCloseFamilyPrefix !== null && iconCloseFamilyPrefix !== void 0 ? iconCloseFamilyPrefix : familyPrefix, materialStyle: iconCloseMaterialStyle !== null && iconCloseMaterialStyle !== void 0 ? iconCloseMaterialStyle : materialStyle }) }))] })));
|
|
1300
1516
|
}
|
|
1301
1517
|
|
|
1302
|
-
function DCollapse({ id, className, style, Component, defaultCollapsed = true, onChange, children, iconOpen: iconOpenProp, iconClose: iconCloseProp, iconFamilyClass, iconFamilyPrefix, iconMaterialStyle
|
|
1518
|
+
function DCollapse({ id, className, style, Component, defaultCollapsed = true, onChange, children, iconOpen: iconOpenProp, iconClose: iconCloseProp, iconFamilyClass, iconFamilyPrefix, iconMaterialStyle, dataAttributes, }) {
|
|
1303
1519
|
const [collapsed, setCollapsed] = React.useState(defaultCollapsed);
|
|
1304
1520
|
const onChangeCollapse = () => {
|
|
1305
1521
|
setCollapsed((prev) => {
|
|
@@ -1313,10 +1529,10 @@ function DCollapse({ id, className, style, Component, defaultCollapsed = true, o
|
|
|
1313
1529
|
React.useEffect(() => {
|
|
1314
1530
|
setCollapsed(defaultCollapsed);
|
|
1315
1531
|
}, [defaultCollapsed]);
|
|
1316
|
-
const { iconMap: { chevronDown, chevronUp, }, } = useDContext();
|
|
1532
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, iconMap: { chevronDown, chevronUp, }, } = useDContext();
|
|
1317
1533
|
const iconOpen = React.useMemo(() => iconOpenProp || chevronDown, [chevronDown, iconOpenProp]);
|
|
1318
1534
|
const iconClose = React.useMemo(() => iconCloseProp || chevronUp, [chevronUp, iconCloseProp]);
|
|
1319
|
-
return (jsxRuntime.jsxs("div", Object.assign({ id: id, className: classNames('collapse-container', className), style: style }, dataAttributes, { children: [jsxRuntime.jsxs("button", { className: "collapse-button", type: "button", onClick: onChangeCollapse, children: [jsxRuntime.jsx("div", { className: "flex-grow-1", children: Component }), jsxRuntime.jsx(DIcon, { color: "primary", size: "1.25rem", icon: collapsed ? iconOpen : iconClose, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle })] }), jsxRuntime.jsx("div", { className: classNames('collapse-body-wrapper', {
|
|
1535
|
+
return (jsxRuntime.jsxs("div", Object.assign({ id: id, className: classNames('collapse-container', className), style: style }, dataAttributes, { children: [jsxRuntime.jsxs("button", { className: "collapse-button", type: "button", onClick: onChangeCollapse, children: [jsxRuntime.jsx("div", { className: "flex-grow-1", children: Component }), jsxRuntime.jsx(DIcon, { className: "collapse-icon", color: "primary", size: "1.25rem", icon: collapsed ? iconOpen : iconClose, familyClass: iconFamilyClass !== null && iconFamilyClass !== void 0 ? iconFamilyClass : familyClass, familyPrefix: iconFamilyPrefix !== null && iconFamilyPrefix !== void 0 ? iconFamilyPrefix : familyPrefix, materialStyle: iconMaterialStyle !== null && iconMaterialStyle !== void 0 ? iconMaterialStyle : materialStyle })] }), jsxRuntime.jsx("div", { className: classNames('collapse-body-wrapper', {
|
|
1320
1536
|
show: !collapsed,
|
|
1321
1537
|
}), children: jsxRuntime.jsx("div", { className: "collapse-body", children: children }) })] })));
|
|
1322
1538
|
}
|
|
@@ -2107,9 +2323,9 @@ function DInputCheck(_a) {
|
|
|
2107
2323
|
]);
|
|
2108
2324
|
React.useEffect(() => {
|
|
2109
2325
|
if (innerRef.current) {
|
|
2110
|
-
innerRef.current.indeterminate = Boolean(indeterminate);
|
|
2326
|
+
innerRef.current.indeterminate = type === 'checkbox' && Boolean(indeterminate);
|
|
2111
2327
|
}
|
|
2112
|
-
}, [indeterminate]);
|
|
2328
|
+
}, [indeterminate, type]);
|
|
2113
2329
|
React.useEffect(() => {
|
|
2114
2330
|
if (innerRef.current) {
|
|
2115
2331
|
innerRef.current.checked = checked;
|
|
@@ -2302,10 +2518,18 @@ function DInputSelect({ id: idProp, name, label = '', className, style, options
|
|
|
2302
2518
|
}), children: [iconStart && (jsxRuntime.jsx("button", { type: "button", className: "input-group-text", id: `${id}Start`, onClick: iconStartClickHandler, disabled: disabled || loading, "aria-label": iconStartAriaLabel, children: iconStart && (jsxRuntime.jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass, familyPrefix: iconStartFamilyPrefix })) })), dynamicComponent, iconEnd && !loading && (jsxRuntime.jsx("button", { type: "button", className: "input-group-text", id: `${id}End`, onClick: iconEndClickHandler, disabled: disabled || loading, "aria-label": iconEndAriaLabel, children: iconEnd && (jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass, familyPrefix: iconEndFamilyPrefix })) })), loading && (jsxRuntime.jsx("div", { className: "input-group-text form-control-icon loading", children: jsxRuntime.jsx("span", { className: "spinner-border spinner-border-sm", role: "status", "aria-hidden": "true", children: jsxRuntime.jsx("span", { className: "visually-hidden", children: "Loading..." }) }) }))] }), hint && (jsxRuntime.jsx("div", { className: "form-text", id: `${id}Hint`, children: hint }))] })));
|
|
2303
2519
|
}
|
|
2304
2520
|
|
|
2305
|
-
function DInputSwitch({ id: idProp, label, ariaLabel, name, checked, disabled, invalid = false, valid = false, readonly, className, style, dataAttributes, inputClassName, onChange, }) {
|
|
2521
|
+
function DInputSwitch({ id: idProp, label, ariaLabel, name, checked, disabled, invalid = false, valid = false, hint, readonly, className, style, dataAttributes, inputClassName, onChange, }) {
|
|
2306
2522
|
const innerId = React.useId();
|
|
2307
2523
|
const id = React.useMemo(() => idProp || innerId, [idProp, innerId]);
|
|
2308
2524
|
const [internalIsChecked, setInternalIsChecked] = React.useState(checked);
|
|
2525
|
+
const ariaDescribedby = React.useMemo(() => ([
|
|
2526
|
+
!!hint && `${id}Hint`,
|
|
2527
|
+
]
|
|
2528
|
+
.filter(Boolean)
|
|
2529
|
+
.join(' ')), [
|
|
2530
|
+
id,
|
|
2531
|
+
hint,
|
|
2532
|
+
]);
|
|
2309
2533
|
React.useEffect(() => {
|
|
2310
2534
|
setInternalIsChecked(checked);
|
|
2311
2535
|
}, [checked]);
|
|
@@ -2314,10 +2538,10 @@ function DInputSwitch({ id: idProp, label, ariaLabel, name, checked, disabled, i
|
|
|
2314
2538
|
setInternalIsChecked(value);
|
|
2315
2539
|
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
|
2316
2540
|
}, [onChange]);
|
|
2317
|
-
return (jsxRuntime.jsxs("div", Object.assign({ className: classNames('form-check form-switch', className) }, dataAttributes, { children: [jsxRuntime.jsx("input", { id: id, name: name, onChange: readonly ? () => false : changeHandler, className: classNames('form-check-input', {
|
|
2541
|
+
return (jsxRuntime.jsxs("div", Object.assign({ className: classNames('form-check form-switch', className) }, dataAttributes, { children: [jsxRuntime.jsx("input", Object.assign({ id: id, name: name, onChange: readonly ? () => false : changeHandler, className: classNames('form-check-input', {
|
|
2318
2542
|
'is-invalid': invalid,
|
|
2319
2543
|
'is-valid': valid,
|
|
2320
|
-
}, inputClassName), style: style, type: "checkbox", role: "switch", checked: internalIsChecked, disabled: disabled, "aria-label": ariaLabel }), label && (jsxRuntime.jsx("label", { className: "form-check-label", htmlFor: id, children: label }))] })));
|
|
2544
|
+
}, inputClassName), style: style, type: "checkbox", role: "switch", checked: internalIsChecked, disabled: disabled, "aria-label": ariaLabel }, ariaDescribedby && { 'aria-describedby': ariaDescribedby })), label && (jsxRuntime.jsx("label", { className: "form-check-label", htmlFor: id, children: label })), hint && (jsxRuntime.jsx("div", { className: "form-text", id: `${id}Hint`, children: hint }))] })));
|
|
2321
2545
|
}
|
|
2322
2546
|
|
|
2323
2547
|
function DInputRange(_a, ref) {
|
|
@@ -2358,6 +2582,7 @@ const ForwardedDInputRange = React.forwardRef(DInputRange);
|
|
|
2358
2582
|
ForwardedDInputRange.displayName = 'DInputRange';
|
|
2359
2583
|
|
|
2360
2584
|
function DListGroupItem({ as = 'li', action: actionProp, active, disabled, href, onClick, color, iconStart, iconStartFamilyClass, iconStartFamilyPrefix, iconStartMaterialStyle, iconEnd, iconEndFamilyClass, iconEndFamilyPrefix, iconEndMaterialStyle, children, className, style, dataAttributes, }) {
|
|
2585
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
2361
2586
|
const Tag = React.useMemo(() => {
|
|
2362
2587
|
if (href) {
|
|
2363
2588
|
return 'a';
|
|
@@ -2386,7 +2611,7 @@ function DListGroupItem({ as = 'li', action: actionProp, active, disabled, href,
|
|
|
2386
2611
|
}
|
|
2387
2612
|
return Object.assign(Object.assign({}, active && { 'aria-current': true }), disabled && { 'aria-disabled': true });
|
|
2388
2613
|
}, [Tag, active, disabled]);
|
|
2389
|
-
return (jsxRuntime.jsxs(Tag, Object.assign({ className: classNames(generateClasses, className), style: style }, Tag === 'a' && href && { href }, onClick && { onClick }, ariaAttributes, dataAttributes, Tag === 'button' && { type: 'button' }, { children: [iconStart && (jsxRuntime.jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass, familyPrefix: iconStartFamilyPrefix, materialStyle: iconStartMaterialStyle })), children, iconEnd && (jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass, familyPrefix: iconEndFamilyPrefix, materialStyle: iconEndMaterialStyle, className: "ms-auto" }))] })));
|
|
2614
|
+
return (jsxRuntime.jsxs(Tag, Object.assign({ className: classNames(generateClasses, className), style: style }, Tag === 'a' && href && { href }, onClick && { onClick }, ariaAttributes, dataAttributes, Tag === 'button' && { type: 'button' }, { children: [iconStart && (jsxRuntime.jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass !== null && iconStartFamilyClass !== void 0 ? iconStartFamilyClass : familyClass, familyPrefix: iconStartFamilyPrefix !== null && iconStartFamilyPrefix !== void 0 ? iconStartFamilyPrefix : familyPrefix, materialStyle: iconStartMaterialStyle !== null && iconStartMaterialStyle !== void 0 ? iconStartMaterialStyle : materialStyle })), children, iconEnd && (jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass !== null && iconEndFamilyClass !== void 0 ? iconEndFamilyClass : familyClass, familyPrefix: iconEndFamilyPrefix !== null && iconEndFamilyPrefix !== void 0 ? iconEndFamilyPrefix : familyPrefix, materialStyle: iconEndMaterialStyle !== null && iconEndMaterialStyle !== void 0 ? iconEndMaterialStyle : materialStyle, className: "ms-auto" }))] })));
|
|
2390
2615
|
}
|
|
2391
2616
|
|
|
2392
2617
|
function DListGroup$1({ as = 'ul', numbered, flush, horizontal, children, className, style, dataAttributes, }) {
|
|
@@ -2413,10 +2638,11 @@ var DListGroup = Object.assign(DListGroup$1, {
|
|
|
2413
2638
|
Item: DListGroupItem,
|
|
2414
2639
|
});
|
|
2415
2640
|
|
|
2416
|
-
function DModalHeader({ showCloseButton, onClose, children, className, style, iconFamilyClass, iconFamilyPrefix, icon: iconProp, materialStyle
|
|
2417
|
-
|
|
2641
|
+
function DModalHeader({ showCloseButton, onClose, children, className, style, iconFamilyClass, iconFamilyPrefix, icon: iconProp, iconMaterialStyle, materialStyle: materialStyleProp, }) {
|
|
2642
|
+
var _a;
|
|
2643
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, iconMap: { xLg, }, } = useDContext();
|
|
2418
2644
|
const icon = React.useMemo(() => iconProp || xLg, [iconProp, xLg]);
|
|
2419
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: classNames('modal-header', className), style: style, children: [jsxRuntime.jsx("div", { children: children }), showCloseButton && (jsxRuntime.jsx("button", { type: "button", className: "d-close", "aria-label": "Close", onClick: onClose, children: jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: materialStyle }) }))] }), jsxRuntime.jsx("div", { className: "d-modal-separator" })] }));
|
|
2645
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: classNames('modal-header', className), style: style, children: [jsxRuntime.jsx("div", { children: children }), showCloseButton && (jsxRuntime.jsx("button", { type: "button", className: "d-close", "aria-label": "Close", onClick: onClose, children: jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconFamilyClass !== null && iconFamilyClass !== void 0 ? iconFamilyClass : familyClass, familyPrefix: iconFamilyPrefix !== null && iconFamilyPrefix !== void 0 ? iconFamilyPrefix : familyPrefix, materialStyle: (_a = iconMaterialStyle !== null && iconMaterialStyle !== void 0 ? iconMaterialStyle : materialStyleProp) !== null && _a !== void 0 ? _a : materialStyle }) }))] }), jsxRuntime.jsx("div", { className: "d-modal-separator" })] }));
|
|
2420
2646
|
}
|
|
2421
2647
|
|
|
2422
2648
|
function DModalBody({ children, className, style, }) {
|
|
@@ -2457,10 +2683,11 @@ var DModal = Object.assign(DModal$1, {
|
|
|
2457
2683
|
Footer: DModalFooter,
|
|
2458
2684
|
});
|
|
2459
2685
|
|
|
2460
|
-
function DOffcanvasHeader({ showCloseButton, onClose, children, className, style, iconFamilyClass, iconFamilyPrefix, icon: iconProp, materialStyle
|
|
2461
|
-
|
|
2686
|
+
function DOffcanvasHeader({ showCloseButton, onClose, children, className, style, iconFamilyClass, iconFamilyPrefix, icon: iconProp, iconMaterialStyle, materialStyle: materialStyleProp, }) {
|
|
2687
|
+
var _a;
|
|
2688
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, iconMap: { xLg, }, } = useDContext();
|
|
2462
2689
|
const icon = React.useMemo(() => iconProp || xLg, [iconProp, xLg]);
|
|
2463
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: classNames('offcanvas-header', className), style: style, children: [jsxRuntime.jsx("div", { children: children }), showCloseButton && (jsxRuntime.jsx("button", { type: "button", className: "d-close", "aria-label": "Close", onClick: onClose, children: jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: materialStyle }) }))] }), jsxRuntime.jsx("div", { className: "d-offcanvas-separator" })] }));
|
|
2690
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: classNames('offcanvas-header', className), style: style, children: [jsxRuntime.jsx("div", { children: children }), showCloseButton && (jsxRuntime.jsx("button", { type: "button", className: "d-close", "aria-label": "Close", onClick: onClose, children: jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconFamilyClass !== null && iconFamilyClass !== void 0 ? iconFamilyClass : familyClass, familyPrefix: iconFamilyPrefix !== null && iconFamilyPrefix !== void 0 ? iconFamilyPrefix : familyPrefix, materialStyle: (_a = iconMaterialStyle !== null && iconMaterialStyle !== void 0 ? iconMaterialStyle : materialStyleProp) !== null && _a !== void 0 ? _a : materialStyle }) }))] }), jsxRuntime.jsx("div", { className: "d-offcanvas-separator" })] }));
|
|
2464
2691
|
}
|
|
2465
2692
|
|
|
2466
2693
|
function DOffcanvasBody({ children, className, style, }) {
|
|
@@ -2601,8 +2828,8 @@ function DProgress({ className, style, currentValue, minValue = 0, maxValue = 10
|
|
|
2601
2828
|
return (jsxRuntime.jsx("div", Object.assign({ className: classNames('progress', className), style: Object.assign({ height }, style) }, dataAttributes, { children: jsxRuntime.jsx("div", { className: classNames(generateClasses), role: "progressbar", "aria-label": "Progress bar", style: { width: formatProgress }, "aria-valuenow": currentValue, "aria-valuemin": minValue, "aria-valuemax": maxValue, children: !hideCurrentValue && formatProgress }) })));
|
|
2602
2829
|
}
|
|
2603
2830
|
|
|
2604
|
-
function DStepper$2({ options, currentStep, iconSuccess: iconSuccessProp, iconSuccessFamilyClass, iconSuccessFamilyPrefix, iconSuccessMaterialStyle
|
|
2605
|
-
const { iconMap: { check, }, } = useDContext();
|
|
2831
|
+
function DStepper$2({ options, currentStep, iconSuccess: iconSuccessProp, iconSuccessFamilyClass, iconSuccessFamilyPrefix, iconSuccessMaterialStyle, vertical = false, completed, alignStart = false, className, style, }) {
|
|
2832
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, iconMap: { check, }, } = useDContext();
|
|
2606
2833
|
const icon = React.useMemo(() => iconSuccessProp || check, [check, iconSuccessProp]);
|
|
2607
2834
|
if (currentStep < 1 || currentStep > options.length) {
|
|
2608
2835
|
throw new Error('Current step should be in the range from 1 to options length');
|
|
@@ -2617,7 +2844,7 @@ function DStepper$2({ options, currentStep, iconSuccess: iconSuccessProp, iconSu
|
|
|
2617
2844
|
}), children: [jsxRuntime.jsx("div", { className: "d-step-value", children: jsxRuntime.jsxs("div", { className: classNames({
|
|
2618
2845
|
'd-step-icon-container': true,
|
|
2619
2846
|
'd-step-check': value < currentStep || completed,
|
|
2620
|
-
}), children: [((value < currentStep) || completed) && (jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconSuccessFamilyClass, familyPrefix: iconSuccessFamilyPrefix, materialStyle: iconSuccessMaterialStyle, className: "d-step-icon" })), value] }) }), jsxRuntime.jsxs("div", { className: "d-step-text-container", children: [jsxRuntime.jsx("div", { className: "d-step-label", children: label }), description && (jsxRuntime.jsx("div", { className: "d-step-description", children: description }))] })] }, value))) }));
|
|
2847
|
+
}), children: [((value < currentStep) || completed) && (jsxRuntime.jsx(DIcon, { icon: icon, familyClass: iconSuccessFamilyClass !== null && iconSuccessFamilyClass !== void 0 ? iconSuccessFamilyClass : familyClass, familyPrefix: iconSuccessFamilyPrefix !== null && iconSuccessFamilyPrefix !== void 0 ? iconSuccessFamilyPrefix : familyPrefix, materialStyle: iconSuccessMaterialStyle !== null && iconSuccessMaterialStyle !== void 0 ? iconSuccessMaterialStyle : materialStyle, className: "d-step-icon" })), value] }) }), jsxRuntime.jsxs("div", { className: "d-step-text-container", children: [jsxRuntime.jsx("div", { className: "d-step-label", children: label }), description && (jsxRuntime.jsx("div", { className: "d-step-description", children: description }))] })] }, value))) }));
|
|
2621
2848
|
}
|
|
2622
2849
|
|
|
2623
2850
|
function DStepper$1({ options, currentStep, className, style, }) {
|
|
@@ -2650,13 +2877,20 @@ function DStepper$1({ options, currentStep, className, style, }) {
|
|
|
2650
2877
|
return (jsxRuntime.jsxs("div", { className: classNames('d-stepper', className), style: style, children: [jsxRuntime.jsx("div", { className: "d-step-bar", style: { background: progressStyle }, children: jsxRuntime.jsx("p", { className: "d-step-number", children: `${currentStep}/${options.length}` }) }), jsxRuntime.jsx("div", { className: "d-step-info", children: Object.keys(currentOption).length > 0 && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: "d-step-label", children: currentOption.label }), jsxRuntime.jsx("div", { className: "d-step-description", children: currentOption.description || '' })] })) })] }));
|
|
2651
2878
|
}
|
|
2652
2879
|
|
|
2653
|
-
function DStepper({ options, currentStep, iconSuccess, iconSuccessFamilyClass, iconSuccessFamilyPrefix, iconSuccessMaterialStyle
|
|
2654
|
-
|
|
2880
|
+
function DStepper({ options, currentStep, iconSuccess, iconSuccessFamilyClass, iconSuccessFamilyPrefix, iconSuccessMaterialStyle, vertical = false, breakpoint = 'lg', className, completed = false, style, dataAttributes, }) {
|
|
2881
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
2882
|
+
return (jsxRuntime.jsxs("div", Object.assign({ className: className, style: style }, dataAttributes, { children: [jsxRuntime.jsx("div", { className: classNames('d-stepper-mobile', `d-block d-${breakpoint}-none`), children: jsxRuntime.jsx(DStepper$1, { options: options, currentStep: currentStep }) }), jsxRuntime.jsx("div", { className: classNames('d-stepper-desktop', `d-none d-${breakpoint}-block`), children: jsxRuntime.jsx(DStepper$2, { options: options, currentStep: currentStep, vertical: vertical, iconSuccess: iconSuccess, iconSuccessFamilyClass: iconSuccessFamilyClass !== null && iconSuccessFamilyClass !== void 0 ? iconSuccessFamilyClass : familyClass, iconSuccessFamilyPrefix: iconSuccessFamilyPrefix !== null && iconSuccessFamilyPrefix !== void 0 ? iconSuccessFamilyPrefix : familyPrefix, iconSuccessMaterialStyle: iconSuccessMaterialStyle !== null && iconSuccessMaterialStyle !== void 0 ? iconSuccessMaterialStyle : materialStyle, completed: completed }) })] })));
|
|
2655
2883
|
}
|
|
2656
2884
|
|
|
2657
2885
|
const ARROW_WIDTH = 8;
|
|
2658
2886
|
const ARROW_HEIGHT = 4;
|
|
2659
2887
|
const GAP$1 = 2;
|
|
2888
|
+
/**
|
|
2889
|
+
* Tooltip is an abstraction component that wraps any element (`Component`) and displays
|
|
2890
|
+
* floating contextual content (`children`) positioned relative to it using Floating UI.
|
|
2891
|
+
* Use it to add short, non-critical hints or descriptions triggered by hover, focus, or
|
|
2892
|
+
* click, without altering the surrounding layout.
|
|
2893
|
+
*/
|
|
2660
2894
|
function DTooltip({ className, childrenClassName, style, offSet = ARROW_HEIGHT + GAP$1, padding, withFocus = false, withClick = false, withHover = true, open = false, placement = 'top', size, Component, children, }) {
|
|
2661
2895
|
const [isOpen, setIsOpen] = React.useState(open);
|
|
2662
2896
|
const arrowRef = React.useRef(null);
|
|
@@ -2695,7 +2929,7 @@ function DTooltip({ className, childrenClassName, style, offSet = ARROW_HEIGHT +
|
|
|
2695
2929
|
function DTimeline({ className, style, dataAttributes, items, }) {
|
|
2696
2930
|
return (jsxRuntime.jsx("div", Object.assign({ style: style, className: classNames('d-timeline', className) }, dataAttributes, { children: items.map((item, index) => (jsxRuntime.jsxs("div", { className: classNames('d-timeline-item', {
|
|
2697
2931
|
[`d-timeline-item-${item.status}`]: item.status,
|
|
2698
|
-
}), children: [jsxRuntime.jsx("div", { className: "d-timeline-item-connector" }), jsxRuntime.jsx("div", { className: "d-timeline-item-icon", children: jsxRuntime.jsx(DIcon, { icon: item.icon || '
|
|
2932
|
+
}), children: [jsxRuntime.jsx("div", { className: "d-timeline-item-connector" }), jsxRuntime.jsx("div", { className: "d-timeline-item-icon", children: jsxRuntime.jsx(DIcon, { icon: item.icon || 'Check', size: "1rem" }) }), jsxRuntime.jsxs("div", { className: "d-timeline-item-content", children: [jsxRuntime.jsx("div", { className: "d-timeline-item-title", children: item.title }), item.description && jsxRuntime.jsx("div", { className: "d-timeline-item-description", children: item.description }), item.time && jsxRuntime.jsx("div", { className: "d-timeline-item-time", children: item.time }), item.children] })] }, index))) })));
|
|
2699
2933
|
}
|
|
2700
2934
|
|
|
2701
2935
|
const TabContext = React.createContext(undefined);
|
|
@@ -2939,11 +3173,132 @@ function validatePhoneNumber(phone) {
|
|
|
2939
3173
|
}
|
|
2940
3174
|
}
|
|
2941
3175
|
|
|
3176
|
+
const SAFE_SCHEMES = new Set(['http:', 'https:', 'mailto:', 'tel:']);
|
|
3177
|
+
/**
|
|
3178
|
+
* Characters the URL parser drops before resolving a URL, so they cannot be used to hide a
|
|
3179
|
+
* scheme-relative prefix or a dangerous scheme (e.g. `/<TAB>/evil.com`, `java<TAB>script:`).
|
|
3180
|
+
*/
|
|
3181
|
+
const IGNORED_CHARS$1 = /[\t\n\r]/g;
|
|
3182
|
+
/**
|
|
3183
|
+
* Two leading separators in any combination. Browsers treat a leading `\` exactly like a
|
|
3184
|
+
* leading `/`, so `//`, `/\`, `\/` and `\\` all resolve to a scheme-relative URL.
|
|
3185
|
+
*/
|
|
3186
|
+
const SCHEME_RELATIVE = /^[/\\]{2}/;
|
|
3187
|
+
const LEADING_SEPARATOR = /^[/\\]/;
|
|
3188
|
+
/**
|
|
3189
|
+
* Validates a `href` value and returns it only if it is safe to render as a link,
|
|
3190
|
+
* preventing XSS through unsafe URL schemes and scheme-relative URLs.
|
|
3191
|
+
*
|
|
3192
|
+
* Before validating, the value is trimmed and every tab, line feed and carriage return is
|
|
3193
|
+
* removed, because the URL parser ignores those characters too and they would otherwise
|
|
3194
|
+
* hide an unsafe value from the checks below.
|
|
3195
|
+
*
|
|
3196
|
+
* A `href` is considered safe when it is either:
|
|
3197
|
+
* - An absolute path starting with a single separator (e.g. `/accounts/42`). A leading `\`
|
|
3198
|
+
* is normalized to `/` in the returned value, since that is how the browser resolves it.
|
|
3199
|
+
* - A URL using one of the allowed schemes: `http:`, `https:`, `mailto:`, `tel:`.
|
|
3200
|
+
*
|
|
3201
|
+
* A `href` is rejected (returns `undefined`) when it is:
|
|
3202
|
+
* - Empty or made only of whitespace/ignored characters (`''`, `' '`).
|
|
3203
|
+
* - Scheme-relative (starts with two separators, e.g. `//evil.com`, `/\evil.com`,
|
|
3204
|
+
* `/<TAB>/evil.com`), since the browser would resolve it using the current protocol and it
|
|
3205
|
+
* can be used to redirect to an attacker-controlled host.
|
|
3206
|
+
* - Using a disallowed/dangerous scheme, such as `javascript:` or `data:`
|
|
3207
|
+
* (e.g. `javascript:alert(1)`, `data:text/html,<script>...</script>`).
|
|
3208
|
+
* - Not parseable as an absolute URL and not an absolute path, such as bare fragments
|
|
3209
|
+
* (`#anchor`) or scheme-less relative paths (`relative/path`). These cannot be validated
|
|
3210
|
+
* against `SAFE_SCHEMES`, so they are rejected rather than assumed safe.
|
|
3211
|
+
*
|
|
3212
|
+
* @param href - The raw URL or path to validate, typically coming from user input,
|
|
3213
|
+
* a CMS, or an external API.
|
|
3214
|
+
* @returns The sanitized `href` when safe, `undefined` otherwise.
|
|
3215
|
+
*
|
|
3216
|
+
* @example
|
|
3217
|
+
* sanitizeHref('/accounts/42'); // '/accounts/42'
|
|
3218
|
+
* sanitizeHref('https://example.com'); // 'https://example.com'
|
|
3219
|
+
* sanitizeHref('mailto:test@example.com'); // 'mailto:test@example.com'
|
|
3220
|
+
* sanitizeHref('//evil.com'); // undefined
|
|
3221
|
+
* sanitizeHref('/\\evil.com'); // undefined
|
|
3222
|
+
* sanitizeHref('javascript:alert(1)'); // undefined
|
|
3223
|
+
*/
|
|
3224
|
+
function sanitizeHref(href) {
|
|
3225
|
+
const normalized = href.trim().replace(IGNORED_CHARS$1, '');
|
|
3226
|
+
if (!normalized)
|
|
3227
|
+
return undefined;
|
|
3228
|
+
if (SCHEME_RELATIVE.test(normalized))
|
|
3229
|
+
return undefined;
|
|
3230
|
+
if (LEADING_SEPARATOR.test(normalized))
|
|
3231
|
+
return `/${normalized.slice(1)}`;
|
|
3232
|
+
try {
|
|
3233
|
+
const { protocol } = new URL(normalized);
|
|
3234
|
+
return SAFE_SCHEMES.has(protocol) ? normalized : undefined;
|
|
3235
|
+
}
|
|
3236
|
+
catch (_a) {
|
|
3237
|
+
return undefined;
|
|
3238
|
+
}
|
|
3239
|
+
}
|
|
3240
|
+
|
|
3241
|
+
/**
|
|
3242
|
+
* Characters the URL parser drops before resolving a URL, so they cannot be used to hide a
|
|
3243
|
+
* scheme-relative prefix (e.g. `/<TAB>/evil.com`).
|
|
3244
|
+
*/
|
|
3245
|
+
const IGNORED_CHARS = /[\t\n\r]/g;
|
|
3246
|
+
/**
|
|
3247
|
+
* Leading separators. Browsers treat a leading `\` exactly like a leading `/`, so both have
|
|
3248
|
+
* to be stripped to prevent scheme-relative URLs (`//evil.com`, `/\evil.com`, `\\evil.com`).
|
|
3249
|
+
*/
|
|
3250
|
+
const LEADING_SEPARATORS = /^[/\\]+/;
|
|
3251
|
+
/**
|
|
3252
|
+
* Builds an internal URL from a `path` and a set of query `params`, normalizing leading
|
|
3253
|
+
* separators to prevent scheme-relative URLs (e.g. `//accounts` and `/\accounts` both become
|
|
3254
|
+
* `/accounts`).
|
|
3255
|
+
*
|
|
3256
|
+
* The `path` is trimmed and every tab, line feed and carriage return is removed before
|
|
3257
|
+
* building the result, because the URL parser ignores those characters too and they would
|
|
3258
|
+
* otherwise hide a scheme-relative prefix (`/<TAB>/evil.com` resolves to `//evil.com`).
|
|
3259
|
+
*
|
|
3260
|
+
* Handles the special case where `path` is the literal string `'#'`, which happens when
|
|
3261
|
+
* a Liquid template variable used as a link target is left unconfigured; in that case the
|
|
3262
|
+
* params are ignored and `'#'` is returned as-is instead of building a broken URL.
|
|
3263
|
+
*
|
|
3264
|
+
* @param path - The path to build the URL from. Leading separators are stripped before
|
|
3265
|
+
* building the result (`/accounts`, `//accounts` and `\accounts` are all treated as `accounts`).
|
|
3266
|
+
* @param params - Key/value pairs serialized as the query string.
|
|
3267
|
+
* @returns The resulting URL:
|
|
3268
|
+
* - `'#'` when `path` normalizes to `'#'` (`'#'`, `'/#'`), ignoring the params.
|
|
3269
|
+
* - `'/'` when `path` is empty and there are no params.
|
|
3270
|
+
* - `'/?<query>'` when `path` is empty and there are params.
|
|
3271
|
+
* - `'<path>'` or `'<path>?<query>'` when `path` starts with `#`, since a fragment must not be
|
|
3272
|
+
* prefixed with `/` (it would navigate away from the current document).
|
|
3273
|
+
* - `'/<path>'` or `'/<path>?<query>'` otherwise.
|
|
3274
|
+
*
|
|
3275
|
+
* @example
|
|
3276
|
+
* buildUrl('accounts', { account_id: '42' }); // '/accounts?account_id=42'
|
|
3277
|
+
* buildUrl('//accounts', {}); // '/accounts'
|
|
3278
|
+
* buildUrl('#', { account_id: '42' }); // '#'
|
|
3279
|
+
* buildUrl('#accounts', { account_id: '42' }); // '#accounts?account_id=42'
|
|
3280
|
+
* buildUrl('', { tab: 'movimientos' }); // '/?tab=movimientos'
|
|
3281
|
+
*/
|
|
3282
|
+
function buildUrl(path, params) {
|
|
3283
|
+
const normalizedPath = path
|
|
3284
|
+
.trim()
|
|
3285
|
+
.replace(IGNORED_CHARS, '')
|
|
3286
|
+
.replace(LEADING_SEPARATORS, '');
|
|
3287
|
+
if (normalizedPath === '#')
|
|
3288
|
+
return '#';
|
|
3289
|
+
const query = new URLSearchParams(Object.entries(params).map(([key, value]) => [key, String(value)])).toString();
|
|
3290
|
+
if (normalizedPath === '')
|
|
3291
|
+
return query ? `/?${query}` : '/';
|
|
3292
|
+
const prefix = normalizedPath.startsWith('#') ? '' : '/';
|
|
3293
|
+
return `${prefix}${normalizedPath}${query ? `?${query}` : ''}`;
|
|
3294
|
+
}
|
|
3295
|
+
|
|
2942
3296
|
function DInputPhone(_a, ref) {
|
|
2943
3297
|
var { id: idProp, style, className, label = '', disabled = false, loading = false, iconFamilyClass, iconFamilyPrefix, iconMaterialStyle, iconEnd, iconEndDisabled, iconEndFamilyClass, iconEndFamilyPrefix, iconEndAriaLabel, iconEndTabIndex, iconEndMaterialStyle, hint, size, invalid = false, valid = false, floatingLabel = false, inputEnd, value, placeholder = '', dataAttributes, onChange, onIconEndClick, countrySelectorProps, filteredCountries, defaultCountry = 'cl' } = _a, inputProps = tslib.__rest(_a, ["id", "style", "className", "label", "disabled", "loading", "iconFamilyClass", "iconFamilyPrefix", "iconMaterialStyle", "iconEnd", "iconEndDisabled", "iconEndFamilyClass", "iconEndFamilyPrefix", "iconEndAriaLabel", "iconEndTabIndex", "iconEndMaterialStyle", "hint", "size", "invalid", "valid", "floatingLabel", "inputEnd", "value", "placeholder", "dataAttributes", "onChange", "onIconEndClick", "countrySelectorProps", "filteredCountries", "defaultCountry"]);
|
|
2944
3298
|
const innerRef = useProvidedRefOrCreate(ref);
|
|
2945
3299
|
const innerId = React.useId();
|
|
2946
3300
|
const id = React.useMemo(() => idProp || innerId, [idProp, innerId]);
|
|
3301
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
2947
3302
|
const handleOnIconEndClick = React.useCallback(() => {
|
|
2948
3303
|
onIconEndClick === null || onIconEndClick === void 0 ? void 0 : onIconEndClick(value);
|
|
2949
3304
|
}, [onIconEndClick, value]);
|
|
@@ -3017,7 +3372,7 @@ function DInputPhone(_a, ref) {
|
|
|
3017
3372
|
[`input-group-${size}`]: !!size,
|
|
3018
3373
|
'input-group': true,
|
|
3019
3374
|
'has-validation': invalid || valid,
|
|
3020
|
-
}), children: [jsxRuntime.jsx(reactInternationalPhone.CountrySelector, Object.assign({}, countrySelectorProps, { selectedCountry: country.iso2, onSelect: ({ iso2 }) => setCountry(iso2), countries: countries, disabled: disabled || loading, className: classNames('input-group-text', countrySelectorProps === null || countrySelectorProps === void 0 ? void 0 : countrySelectorProps.className) })), dynamicComponent, (iconEnd && !loading) && (jsxRuntime.jsx("button", { type: "button", className: "input-group-text", id: `${id}End`, onClick: handleOnIconEndClick, disabled: disabled || loading || iconEndDisabled, "aria-label": iconEndAriaLabel, tabIndex: onIconEndClick ? iconEndTabIndex : -1, children: jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass, familyPrefix: iconEndFamilyPrefix, materialStyle: iconEndMaterialStyle }) })), loading && (jsxRuntime.jsx("div", { className: "input-group-text", id: `${id}Loading`, children: jsxRuntime.jsx("span", { className: "spinner-border spinner-border-sm", role: "status", "aria-hidden": "true", children: jsxRuntime.jsx("span", { className: "visually-hidden", children: "Loading..." }) }) })), !!inputEnd && (jsxRuntime.jsx("div", { className: "input-group-text", id: `${id}InputEnd`, children: inputEnd }))] }), hint && (jsxRuntime.jsx("div", { className: "form-text", id: `${id}Hint`, children: hint }))] })));
|
|
3375
|
+
}), children: [jsxRuntime.jsx(reactInternationalPhone.CountrySelector, Object.assign({}, countrySelectorProps, { selectedCountry: country.iso2, onSelect: ({ iso2 }) => setCountry(iso2), countries: countries, disabled: disabled || loading, className: classNames('input-group-text', countrySelectorProps === null || countrySelectorProps === void 0 ? void 0 : countrySelectorProps.className) })), dynamicComponent, (iconEnd && !loading) && (jsxRuntime.jsx("button", { type: "button", className: "input-group-text", id: `${id}End`, onClick: handleOnIconEndClick, disabled: disabled || loading || iconEndDisabled, "aria-label": iconEndAriaLabel, tabIndex: onIconEndClick ? iconEndTabIndex : -1, children: jsxRuntime.jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass !== null && iconEndFamilyClass !== void 0 ? iconEndFamilyClass : familyClass, familyPrefix: iconEndFamilyPrefix !== null && iconEndFamilyPrefix !== void 0 ? iconEndFamilyPrefix : familyPrefix, materialStyle: iconEndMaterialStyle !== null && iconEndMaterialStyle !== void 0 ? iconEndMaterialStyle : materialStyle }) })), loading && (jsxRuntime.jsx("div", { className: "input-group-text", id: `${id}Loading`, children: jsxRuntime.jsx("span", { className: "spinner-border spinner-border-sm", role: "status", "aria-hidden": "true", children: jsxRuntime.jsx("span", { className: "visually-hidden", children: "Loading..." }) }) })), !!inputEnd && (jsxRuntime.jsx("div", { className: "input-group-text", id: `${id}InputEnd`, children: inputEnd }))] }), hint && (jsxRuntime.jsx("div", { className: "form-text", id: `${id}Hint`, children: hint }))] })));
|
|
3021
3376
|
}
|
|
3022
3377
|
const ForwardedDInputPhone = React.forwardRef(DInputPhone);
|
|
3023
3378
|
ForwardedDInputPhone.displayName = 'DInputPhone';
|
|
@@ -3619,6 +3974,59 @@ function DConfirmModalContainer({ nodeId }) {
|
|
|
3619
3974
|
return reactDom.createPortal(jsxRuntime.jsx(framerMotion.AnimatePresence, { children: entries.map((entry) => (jsxRuntime.jsxs(framerMotion.motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0, transition: { delay: 0.3 } }, transition: { duration: 0.15, ease: 'linear' }, children: [jsxRuntime.jsx("div", { className: "backdrop backdrop-confirm-modal", onClick: entry.onCloseAction, role: "presentation" }), jsxRuntime.jsx(DConfirmModalUI, { entry: entry })] }, entry.id))) }), portalNode);
|
|
3620
3975
|
}
|
|
3621
3976
|
|
|
3977
|
+
/**
|
|
3978
|
+
* The lucide-react icons Dynamic UI renders on its own, without the consumer
|
|
3979
|
+
* asking for them by name.
|
|
3980
|
+
*
|
|
3981
|
+
* Two sources feed this list:
|
|
3982
|
+
*
|
|
3983
|
+
* - The `iconMap` defaults of `DContextProvider` (`src/contexts/DContext.tsx`),
|
|
3984
|
+
* used by close buttons, chevrons, alert states, input adornments and the
|
|
3985
|
+
* stepper checkmark.
|
|
3986
|
+
* - Names hard-coded in component JSX or in a prop default, such as
|
|
3987
|
+
* `DDropdown`'s toggle or `DVoucher`'s action buttons.
|
|
3988
|
+
*
|
|
3989
|
+
* Any bundler-level optimisation that narrows lucide-react down to the icons a
|
|
3990
|
+
* widget actually uses must keep this set, or Dynamic UI components break for
|
|
3991
|
+
* reasons the widget author cannot see in their own source. That is why the
|
|
3992
|
+
* list ships in the package as `dist/icons-core.json` and is exported here.
|
|
3993
|
+
*
|
|
3994
|
+
* `src/icons/coreIcons.spec.ts` scans `src/components/**` and fails when an
|
|
3995
|
+
* internally used icon name is missing from this list or absent from
|
|
3996
|
+
* lucide-react, so the two cannot drift apart.
|
|
3997
|
+
*/
|
|
3998
|
+
const CORE_LUCIDE_ICONS = [
|
|
3999
|
+
// iconMap defaults — src/contexts/DContext.tsx
|
|
4000
|
+
'AlertCircle',
|
|
4001
|
+
'AlertTriangle',
|
|
4002
|
+
'Calendar',
|
|
4003
|
+
'Check',
|
|
4004
|
+
'CheckCircle',
|
|
4005
|
+
'ChevronDown',
|
|
4006
|
+
'ChevronLeft',
|
|
4007
|
+
'ChevronRight',
|
|
4008
|
+
'ChevronUp',
|
|
4009
|
+
'Eye',
|
|
4010
|
+
'EyeOff',
|
|
4011
|
+
'Info',
|
|
4012
|
+
'Minus',
|
|
4013
|
+
'Plus',
|
|
4014
|
+
'Search',
|
|
4015
|
+
'Upload',
|
|
4016
|
+
'X',
|
|
4017
|
+
// Hard-coded in component JSX or in a prop default
|
|
4018
|
+
'Circle',
|
|
4019
|
+
'CircleCheck',
|
|
4020
|
+
'CircleCheckBig',
|
|
4021
|
+
'Download',
|
|
4022
|
+
'FileText',
|
|
4023
|
+
'MoreVertical',
|
|
4024
|
+
'Paperclip',
|
|
4025
|
+
'RefreshCw',
|
|
4026
|
+
'Share2',
|
|
4027
|
+
'Trash',
|
|
4028
|
+
];
|
|
4029
|
+
|
|
3622
4030
|
Object.defineProperty(exports, "getErrorMessage", {
|
|
3623
4031
|
enumerable: true,
|
|
3624
4032
|
get: function () { return reactErrorBoundary.getErrorMessage; }
|
|
@@ -3627,6 +4035,7 @@ Object.defineProperty(exports, "useErrorBoundary", {
|
|
|
3627
4035
|
enumerable: true,
|
|
3628
4036
|
get: function () { return reactErrorBoundary.useErrorBoundary; }
|
|
3629
4037
|
});
|
|
4038
|
+
exports.CORE_LUCIDE_ICONS = CORE_LUCIDE_ICONS;
|
|
3630
4039
|
exports.DAlert = DAlert;
|
|
3631
4040
|
exports.DAvatar = DAvatar;
|
|
3632
4041
|
exports.DBadge = DBadge;
|
|
@@ -3696,12 +4105,14 @@ exports.DVoucher = DVoucher;
|
|
|
3696
4105
|
exports.EmptyState = EmptyState;
|
|
3697
4106
|
exports.ErrorState = ErrorState;
|
|
3698
4107
|
exports.LoadingState = LoadingState;
|
|
4108
|
+
exports.buildUrl = buildUrl;
|
|
3699
4109
|
exports.changeQueryString = changeQueryString;
|
|
3700
4110
|
exports.checkMediaQuery = checkMediaQuery;
|
|
3701
4111
|
exports.configureI18n = configureI8n;
|
|
3702
4112
|
exports.formatCurrency = formatCurrency;
|
|
3703
4113
|
exports.getCssVariable = getCssVariable;
|
|
3704
4114
|
exports.getQueryString = getQueryString;
|
|
4115
|
+
exports.sanitizeHref = sanitizeHref;
|
|
3705
4116
|
exports.subscribeToMediaQuery = subscribeToMediaQuery;
|
|
3706
4117
|
exports.useConfirmModal = useConfirmModal;
|
|
3707
4118
|
exports.useCountdown = useCountdown;
|