@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.esm.js
CHANGED
|
@@ -25,6 +25,16 @@ import i18n from 'i18next';
|
|
|
25
25
|
import { initReactI18next } from 'react-i18next';
|
|
26
26
|
|
|
27
27
|
const PREFIX_BS = 'bs-';
|
|
28
|
+
/**
|
|
29
|
+
* Default icon-font family configured by `DContextProvider`.
|
|
30
|
+
*
|
|
31
|
+
* `DIconBase` compares the family it receives against these values to tell an
|
|
32
|
+
* unconfigured consumer apart from one that deliberately opted into an icon
|
|
33
|
+
* font (Material Symbols, Bootstrap Icons). Only the former gets the
|
|
34
|
+
* development warning for an unresolved icon name.
|
|
35
|
+
*/
|
|
36
|
+
const DEFAULT_ICON_FAMILY_CLASS = 'bi';
|
|
37
|
+
const DEFAULT_ICON_FAMILY_PREFIX = 'bi-';
|
|
28
38
|
|
|
29
39
|
/* eslint-disable no-lonely-if */
|
|
30
40
|
function useDisableBodyScrollEffect(disable) {
|
|
@@ -306,8 +316,8 @@ const DEFAULT_STATE = {
|
|
|
306
316
|
decimal: '.',
|
|
307
317
|
},
|
|
308
318
|
icon: {
|
|
309
|
-
familyClass:
|
|
310
|
-
familyPrefix:
|
|
319
|
+
familyClass: DEFAULT_ICON_FAMILY_CLASS,
|
|
320
|
+
familyPrefix: DEFAULT_ICON_FAMILY_PREFIX,
|
|
311
321
|
materialStyle: false,
|
|
312
322
|
},
|
|
313
323
|
iconRegistry: undefined,
|
|
@@ -412,6 +422,79 @@ function useDContext() {
|
|
|
412
422
|
return useContext(DContext);
|
|
413
423
|
}
|
|
414
424
|
|
|
425
|
+
/**
|
|
426
|
+
* Resolves a string icon name against the registry supplied through
|
|
427
|
+
* `DContextProvider`'s `iconRegistry` prop.
|
|
428
|
+
*
|
|
429
|
+
* This is the single implementation shared by `DIcon` and `DIconBase`, so both
|
|
430
|
+
* public entry points — and every Dynamic UI component that renders an icon
|
|
431
|
+
* through them — resolve names identically.
|
|
432
|
+
*
|
|
433
|
+
* A non-string `icon` is returned untouched: a component passed directly needs
|
|
434
|
+
* no lookup. A name missing from the registry is also returned untouched, so
|
|
435
|
+
* the caller can fall through to lucide-react and then to the icon-font family.
|
|
436
|
+
*/
|
|
437
|
+
function resolveIconFromRegistry(icon, iconRegistry) {
|
|
438
|
+
if (typeof icon !== 'string')
|
|
439
|
+
return icon;
|
|
440
|
+
return (iconRegistry === null || iconRegistry === void 0 ? void 0 : iconRegistry[icon]) || icon;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Names already reported, so a name repeated across renders or across many
|
|
445
|
+
* instances only warns once per page load.
|
|
446
|
+
*/
|
|
447
|
+
const warnedIconNames = new Set();
|
|
448
|
+
/**
|
|
449
|
+
* True when the icon-font family is the one `DContextProvider` defaults to.
|
|
450
|
+
*
|
|
451
|
+
* The warning is limited to that case so a consumer who configured a different
|
|
452
|
+
* font — Material Symbols, for instance — is not told about names that font
|
|
453
|
+
* resolves perfectly well.
|
|
454
|
+
*
|
|
455
|
+
* It cannot tell "never configured a font" apart from "configured exactly the
|
|
456
|
+
* defaults", and those defaults are also the standard Bootstrap Icons setup, so
|
|
457
|
+
* a consumer who deliberately uses Bootstrap Icons is warned too. The message
|
|
458
|
+
* says so; silencing that case would need a new context flag, which is beyond
|
|
459
|
+
* what this helper should decide.
|
|
460
|
+
*/
|
|
461
|
+
function isDefaultIconFamily(familyClass, familyPrefix) {
|
|
462
|
+
return familyClass === DEFAULT_ICON_FAMILY_CLASS
|
|
463
|
+
&& familyPrefix === DEFAULT_ICON_FAMILY_PREFIX;
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Warns, once per name and only outside production builds, that an icon name
|
|
467
|
+
* resolved to neither the registry nor lucide-react and is falling back to the
|
|
468
|
+
* default icon font, which this package no longer ships.
|
|
469
|
+
*
|
|
470
|
+
* Whether that fallback renders depends on the host app: if it loads the font
|
|
471
|
+
* itself the `<i>` shows the glyph, and if it does not, nothing appears. The
|
|
472
|
+
* message states both possibilities instead of assuming the second.
|
|
473
|
+
*
|
|
474
|
+
* The `process.env.NODE_ENV` guard is what bundlers constant-fold, so the whole
|
|
475
|
+
* call — and this module — drops out of a consumer's production bundle.
|
|
476
|
+
*/
|
|
477
|
+
function warnUnknownIcon(name, familyClass, familyPrefix) {
|
|
478
|
+
if (!isDefaultIconFamily(familyClass, familyPrefix))
|
|
479
|
+
return;
|
|
480
|
+
if (warnedIconNames.has(name))
|
|
481
|
+
return;
|
|
482
|
+
warnedIconNames.add(name);
|
|
483
|
+
const fallbackClass = `${DEFAULT_ICON_FAMILY_CLASS} ${DEFAULT_ICON_FAMILY_PREFIX}${name}`;
|
|
484
|
+
// eslint-disable-next-line no-console
|
|
485
|
+
console.warn(`[Dynamic UI] Icon "${name}" is not in the icon registry and is not a `
|
|
486
|
+
+ 'lucide-react export, so it falls back to the default icon font: '
|
|
487
|
+
+ `<i class="${fallbackClass}">. That renders only if your app loads that `
|
|
488
|
+
+ 'font, which this package stopped shipping in v2.0.0. '
|
|
489
|
+
+ 'If the icon is missing, pass a PascalCase lucide-react name such as '
|
|
490
|
+
+ '"Home", or register the component with '
|
|
491
|
+
+ '<DContextProvider iconRegistry={{ MyIcon }}>. '
|
|
492
|
+
+ `If you use the "${DEFAULT_ICON_FAMILY_CLASS}" font on purpose, this is a `
|
|
493
|
+
+ 'false positive: the warning fires whenever the configured family equals '
|
|
494
|
+
+ 'the package default, which is also the standard Bootstrap Icons setup. '
|
|
495
|
+
+ 'It never appears in production builds.');
|
|
496
|
+
}
|
|
497
|
+
|
|
415
498
|
function subscribeToMediaQuery(query, callback) {
|
|
416
499
|
const mediaQueryList = window.matchMedia(query);
|
|
417
500
|
mediaQueryList.addEventListener('change', callback);
|
|
@@ -501,7 +584,31 @@ function useResponsiveProp(useListener = false) {
|
|
|
501
584
|
function isIconComponent(value) {
|
|
502
585
|
return typeof value !== 'string' && isValidElementType(value);
|
|
503
586
|
}
|
|
504
|
-
|
|
587
|
+
/**
|
|
588
|
+
* Renders an icon, resolving the `icon` prop in this order:
|
|
589
|
+
*
|
|
590
|
+
* 1. **Icon registry** — a string name found in `DContextProvider`'s
|
|
591
|
+
* `iconRegistry` renders the component registered under it. A component
|
|
592
|
+
* passed directly skips this step and renders as-is.
|
|
593
|
+
* 2. **lucide-react** — a PascalCase name exported by lucide-react renders that
|
|
594
|
+
* icon. When `materialStyle` is on, this step is skipped and the name is
|
|
595
|
+
* emitted as the text content of the icon-font element instead.
|
|
596
|
+
* 3. **Icon-font family** — anything left over renders as
|
|
597
|
+
* `<i class="{familyClass} {familyPrefix}{name}">`, the legacy path for
|
|
598
|
+
* Material Symbols and Bootstrap Icons. Outside production builds, a name
|
|
599
|
+
* that reaches this step while the family is still the package default logs
|
|
600
|
+
* a one-time warning.
|
|
601
|
+
*
|
|
602
|
+
* A name that resolves nowhere and has no family configured renders `?`.
|
|
603
|
+
*
|
|
604
|
+
* Every path is hidden from the accessibility tree by default (`aria-hidden`),
|
|
605
|
+
* since icons are overwhelmingly decorative. See `ariaHidden` / `ariaLabel` to
|
|
606
|
+
* override that for an icon that carries meaning on its own.
|
|
607
|
+
*/
|
|
608
|
+
function DIconBase({ icon: iconProp, color, style, className, size, useListenerSize = false, hasCircle = false, materialStyle = false, familyClass, familyPrefix, strokeWidth = 2, ariaHidden, ariaLabel, dataAttributes, }) {
|
|
609
|
+
const { iconRegistry } = useDContext();
|
|
610
|
+
// The registry wins over every other source, including Material icons.
|
|
611
|
+
const icon = resolveIconFromRegistry(iconProp, iconRegistry);
|
|
505
612
|
// If materialStyle is true, use Material Design icons (legacy)
|
|
506
613
|
const isStringIcon = typeof icon === 'string';
|
|
507
614
|
const useMaterialIcons = materialStyle && isStringIcon;
|
|
@@ -523,6 +630,61 @@ function DIconBase({ icon, color, style, className, size, useListenerSize = fals
|
|
|
523
630
|
}, [responsivePropValue, size]);
|
|
524
631
|
const generateStyleVariables = 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]);
|
|
525
632
|
const generateClasses = 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]);
|
|
633
|
+
/**
|
|
634
|
+
* Decorative by default. `ariaHidden` and `ariaLabel` are not symmetric:
|
|
635
|
+
* hiding is absolute, so `ariaHidden` wins over a name, but `ariaHidden={false}`
|
|
636
|
+
* and `ariaLabel` agree — both expose the icon — and the name is honoured.
|
|
637
|
+
*/
|
|
638
|
+
const accessibilityProps = useMemo(() => {
|
|
639
|
+
// Hiding is absolute: it wins over a name.
|
|
640
|
+
if (ariaHidden === true)
|
|
641
|
+
return { 'aria-hidden': true };
|
|
642
|
+
// A name exposes the icon, which is also what `ariaHidden={false}` asks for.
|
|
643
|
+
if (ariaLabel)
|
|
644
|
+
return { role: 'img', 'aria-label': ariaLabel };
|
|
645
|
+
// Exposed with no name: an explicit opt-out of the default, warned about below.
|
|
646
|
+
if (ariaHidden === false)
|
|
647
|
+
return {};
|
|
648
|
+
return { 'aria-hidden': true };
|
|
649
|
+
}, [ariaHidden, ariaLabel]);
|
|
650
|
+
/**
|
|
651
|
+
* `dataAttributes` is typed to `data-*`, but casting through it was the only
|
|
652
|
+
* way to reach the DOM before `ariaHidden` existed, so it still wins over the
|
|
653
|
+
* computed values — and therefore decides the effective state below.
|
|
654
|
+
*/
|
|
655
|
+
const domAttributes = useMemo(() => (Object.assign(Object.assign({}, accessibilityProps), dataAttributes)), [accessibilityProps, dataAttributes]);
|
|
656
|
+
/**
|
|
657
|
+
* lucide-react hides its own `<svg>` unless it receives an a11y prop, and a
|
|
658
|
+
* registry component may do the same, which would keep the graphic out of the
|
|
659
|
+
* tree even when this wrapper is not hidden. Only matters when the icon is
|
|
660
|
+
* exposed without a name: under `role="img"` the wrapper is a leaf, so a
|
|
661
|
+
* hidden child changes nothing.
|
|
662
|
+
*
|
|
663
|
+
* A registry component that hardcodes `aria-hidden` on its own `<svg>` instead
|
|
664
|
+
* of spreading props still wins — nothing here can reach inside it.
|
|
665
|
+
*/
|
|
666
|
+
const isExposedWithoutName = useMemo(() => {
|
|
667
|
+
const attributes = domAttributes;
|
|
668
|
+
const hidden = attributes['aria-hidden'];
|
|
669
|
+
return hidden !== true && hidden !== 'true' && !attributes.role;
|
|
670
|
+
}, [domAttributes]);
|
|
671
|
+
/**
|
|
672
|
+
* Diagnostics read the effective state, so a `dataAttributes` override that
|
|
673
|
+
* hides the icon after all is not reported as exposing it. Memoised like the
|
|
674
|
+
* values above, so re-rendering with the same props does not repeat them.
|
|
675
|
+
*/
|
|
676
|
+
useMemo(() => {
|
|
677
|
+
if (process.env.NODE_ENV === 'production')
|
|
678
|
+
return;
|
|
679
|
+
if (ariaHidden === true && ariaLabel) {
|
|
680
|
+
// eslint-disable-next-line no-console
|
|
681
|
+
console.warn(`DIcon: ariaLabel "${ariaLabel}" is ignored because ariaHidden is true. Drop ariaHidden to expose the name.`);
|
|
682
|
+
}
|
|
683
|
+
if (ariaHidden === false && isExposedWithoutName) {
|
|
684
|
+
// eslint-disable-next-line no-console
|
|
685
|
+
console.warn('DIcon: ariaHidden={false} without an ariaLabel exposes an unnamed graphic to assistive technology. Pass ariaLabel to name it.');
|
|
686
|
+
}
|
|
687
|
+
}, [ariaHidden, ariaLabel, isExposedWithoutName]);
|
|
526
688
|
const iconSize = useMemo(() => {
|
|
527
689
|
if (resolvedSize) {
|
|
528
690
|
const numSize = parseInt(resolvedSize, 10);
|
|
@@ -532,43 +694,46 @@ function DIconBase({ icon, color, style, className, size, useListenerSize = fals
|
|
|
532
694
|
}, [resolvedSize]);
|
|
533
695
|
// Render Material Design icon (legacy support)
|
|
534
696
|
if (useMaterialIcons) {
|
|
535
|
-
return (jsx("i", Object.assign({ className: classNames(generateClasses, familyClass), style: generateStyleVariables },
|
|
697
|
+
return (jsx("i", Object.assign({ className: classNames(generateClasses, familyClass), style: generateStyleVariables }, domAttributes, { children: isStringIcon ? icon : null })));
|
|
536
698
|
}
|
|
537
699
|
if (isIconComponent(icon)) {
|
|
538
|
-
return (jsx("span", Object.assign({ className: classNames(generateClasses), style: generateStyleVariables },
|
|
539
|
-
width: resolvedSize || 24,
|
|
540
|
-
height: resolvedSize || 24,
|
|
541
|
-
strokeWidth,
|
|
542
|
-
}) })));
|
|
700
|
+
return (jsx("span", Object.assign({ className: classNames(generateClasses), style: generateStyleVariables }, domAttributes, { children: createElement(icon, Object.assign({ width: resolvedSize || 24, height: resolvedSize || 24, strokeWidth }, isExposedWithoutName && { 'aria-hidden': false })) })));
|
|
543
701
|
}
|
|
544
702
|
// Render Lucide icon
|
|
545
703
|
if (!LucideIcon) {
|
|
546
|
-
if (
|
|
547
|
-
|
|
704
|
+
if (typeof icon === 'string' && familyClass && familyPrefix) {
|
|
705
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
706
|
+
warnUnknownIcon(icon, familyClass, familyPrefix);
|
|
707
|
+
}
|
|
708
|
+
return (jsx("i", Object.assign({ className: classNames(generateClasses, familyClass, `${familyPrefix}${icon}`), style: generateStyleVariables }, domAttributes)));
|
|
548
709
|
}
|
|
549
710
|
// eslint-disable-next-line no-console
|
|
550
711
|
console.warn(`Icon "${String(icon)}" not found in Lucide. Make sure to use PascalCase names (e.g., "Home", "User", "Settings")`);
|
|
551
|
-
return (jsx("span", Object.assign({ className: classNames(generateClasses), style: generateStyleVariables },
|
|
712
|
+
return (jsx("span", Object.assign({ className: classNames(generateClasses), style: generateStyleVariables }, domAttributes, { children: "?" })));
|
|
552
713
|
}
|
|
553
|
-
return (jsx("span", Object.assign({ className: classNames(generateClasses), style: generateStyleVariables },
|
|
714
|
+
return (jsx("span", Object.assign({ className: classNames(generateClasses), style: generateStyleVariables }, domAttributes, { children: jsx(LucideIcon, Object.assign({ size: iconSize || 24, strokeWidth: strokeWidth }, isExposedWithoutName && { 'aria-hidden': false })) })));
|
|
554
715
|
}
|
|
555
716
|
|
|
717
|
+
/**
|
|
718
|
+
* Thin wrapper over `DIconBase` that fills the icon-font configuration
|
|
719
|
+
* (`familyClass`, `familyPrefix`, `materialStyle`) from `DContextProvider`
|
|
720
|
+
* whenever the caller does not pass it explicitly.
|
|
721
|
+
*
|
|
722
|
+
* Name resolution itself — registry, then lucide-react, then the icon-font
|
|
723
|
+
* family — lives in `DIconBase`, so both components behave identically.
|
|
724
|
+
*/
|
|
556
725
|
function DIcon(_a) {
|
|
557
726
|
var { icon, familyClass: propFamilyClass, familyPrefix: propFamilyPrefix, materialStyle: propMaterialStyle } = _a, props = __rest(_a, ["icon", "familyClass", "familyPrefix", "materialStyle"]);
|
|
558
|
-
const { icon: { familyClass, familyPrefix, materialStyle, },
|
|
559
|
-
|
|
560
|
-
? iconRegistry === null || iconRegistry === void 0 ? void 0 : iconRegistry[icon]
|
|
561
|
-
: undefined;
|
|
562
|
-
const resolvedIcon = registryIcon || icon;
|
|
563
|
-
return (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)));
|
|
727
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
728
|
+
return (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)));
|
|
564
729
|
}
|
|
565
730
|
|
|
566
|
-
function DAlert({ color = 'success', icon: iconProp, iconFamilyClass, iconFamilyPrefix, iconMaterialStyle
|
|
567
|
-
const { iconMap: { alert, xLg, }, } = useDContext();
|
|
731
|
+
function DAlert({ color = 'success', icon: iconProp, iconFamilyClass, iconFamilyPrefix, iconMaterialStyle, iconClose: iconCloseProp, iconCloseFamilyClass, iconCloseFamilyPrefix, iconCloseMaterialStyle, showClose, onClose, children, id, className, style, dataAttributes, }) {
|
|
732
|
+
const { icon: { materialStyle, familyClass, familyPrefix, }, iconMap: { alert, xLg, }, } = useDContext();
|
|
568
733
|
const icon = useMemo(() => iconProp || alert[color], [alert, iconProp, color]);
|
|
569
734
|
const iconClose = useMemo(() => (iconCloseProp || xLg), [iconCloseProp, xLg]);
|
|
570
735
|
const generateClasses = useMemo(() => (Object.assign({ alert: true, [`alert-${color}`]: true, 'fade show': !!showClose }, className && { [className]: true })), [color, showClose, className]);
|
|
571
|
-
return (jsxs("div", Object.assign({ className: classNames(generateClasses), style: style, role: "alert", id: id }, dataAttributes, { children: [icon && (jsx(DIcon, { className: "alert-icon", icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle })), jsx("div", { className: "alert-text", children: children }), showClose && (jsx("button", { type: "button", className: "d-close", "aria-label": "Close", onClick: onClose, children: jsx(DIcon, { icon: iconClose, familyClass: iconCloseFamilyClass, familyPrefix: iconCloseFamilyPrefix, materialStyle: iconCloseMaterialStyle }) }))] })));
|
|
736
|
+
return (jsxs("div", Object.assign({ className: classNames(generateClasses), style: style, role: "alert", id: id }, dataAttributes, { children: [icon && (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 })), jsx("div", { className: "alert-text", children: children }), showClose && (jsx("button", { type: "button", className: "d-close", "aria-label": "Close", onClick: onClose, children: 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 }) }))] })));
|
|
572
737
|
}
|
|
573
738
|
|
|
574
739
|
function DAvatar({ id, size, image, name: nameProp, useNameAsInitials = false, className, style, dataAttributes, }) {
|
|
@@ -590,6 +755,7 @@ function DAvatar({ id, size, image, name: nameProp, useNameAsInitials = false, c
|
|
|
590
755
|
|
|
591
756
|
function DBadge(props) {
|
|
592
757
|
const { text, soft = false, color = 'primary', id, rounded, className, size, style, iconStart, iconEnd, iconMaterialStyle, iconFamilyClass, iconFamilyPrefix, dataAttributes, } = props;
|
|
758
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
593
759
|
// Responsive size resolution using useResponsiveProp
|
|
594
760
|
const { responsivePropValue } = useResponsiveProp(true);
|
|
595
761
|
const resolvedSize = useMemo(() => {
|
|
@@ -606,7 +772,7 @@ function DBadge(props) {
|
|
|
606
772
|
'rounded-pill': !!rounded,
|
|
607
773
|
[`badge-${resolvedSize}`]: !!resolvedSize,
|
|
608
774
|
}), [rounded, soft, color, resolvedSize]);
|
|
609
|
-
return (jsxs("span", Object.assign({ className: classNames(generateClasses, className), style: style }, id && { id }, dataAttributes, { children: [iconStart && (jsx(DIcon, { icon: iconStart, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle })), jsx("span", { children: text }), iconEnd && (jsx(DIcon, { icon: iconEnd, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle }))] })));
|
|
775
|
+
return (jsxs("span", Object.assign({ className: classNames(generateClasses, className), style: style }, id && { id }, dataAttributes, { children: [iconStart && (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 })), jsx("span", { children: text }), iconEnd && (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 }))] })));
|
|
610
776
|
}
|
|
611
777
|
|
|
612
778
|
function DBox({ className, style, children, dataAttributes, }) {
|
|
@@ -638,6 +804,7 @@ function DInput(_a, ref) {
|
|
|
638
804
|
const inputRef = useProvidedRefOrCreate(ref);
|
|
639
805
|
const innerId = useId();
|
|
640
806
|
const id = useMemo(() => idProp || innerId, [idProp, innerId]);
|
|
807
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
641
808
|
const handleOnChange = useCallback((event) => {
|
|
642
809
|
onChange === null || onChange === void 0 ? void 0 : onChange(event.currentTarget.value);
|
|
643
810
|
}, [onChange]);
|
|
@@ -700,7 +867,7 @@ function DInput(_a, ref) {
|
|
|
700
867
|
[`input-group-${size}`]: !!size,
|
|
701
868
|
'input-group': true,
|
|
702
869
|
'has-validation': invalid || valid,
|
|
703
|
-
}), children: [!!inputStart && (jsx("div", { className: "input-group-text", id: `${id}InputStart`, children: inputStart })), iconStart && (onIconStartClick ? (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: jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass, familyPrefix: iconStartFamilyPrefix, materialStyle: iconStartMaterialStyle }) })) : (jsx("div", { className: "input-group-text", id: `${id}Start`,
|
|
870
|
+
}), children: [!!inputStart && (jsx("div", { className: "input-group-text", id: `${id}InputStart`, children: inputStart })), iconStart && (onIconStartClick ? (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: 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 }) })) : (jsx("div", { className: "input-group-text", id: `${id}Start`, tabIndex: -1, children: 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 ? (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: 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 }) })) : (jsx("div", { className: "input-group-text", id: `${id}End`, tabIndex: -1, children: 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 && (jsx("div", { className: "input-group-text", id: `${id}Loading`, children: jsx("span", { className: "spinner-border spinner-border-sm", role: "status", "aria-hidden": "true", "data-testid": "loading-spinner", children: jsx("span", { className: "visually-hidden", children: "Loading..." }) }) })), !!inputEnd && (jsx("div", { className: "input-group-text", id: `${id}InputEnd`, children: inputEnd }))] }), hint && (jsx("div", { className: "form-text", id: `${id}Hint`, children: hint }))] })));
|
|
704
871
|
}
|
|
705
872
|
const ForwardedDInput = forwardRef(DInput);
|
|
706
873
|
ForwardedDInput.displayName = 'DInput';
|
|
@@ -1096,7 +1263,7 @@ function useDBoxFile(props) {
|
|
|
1096
1263
|
|
|
1097
1264
|
function DBoxFile(_a) {
|
|
1098
1265
|
var { icon: iconProp, iconFamilyClass, iconFamilyPrefix, iconMaterialStyle, children, className, style, dataAttributes } = _a, props = __rest(_a, ["icon", "iconFamilyClass", "iconFamilyPrefix", "iconMaterialStyle", "children", "className", "style", "dataAttributes"]);
|
|
1099
|
-
const { iconMap: { upload } } = useDContext();
|
|
1266
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, iconMap: { upload }, } = useDContext();
|
|
1100
1267
|
const icon = useMemo(() => iconProp || upload, [iconProp, upload]);
|
|
1101
1268
|
const { inputRef, rootRef, isDragValid, isDragInvalid, acceptAttr, files, handleFileSelect, handleDrop, handleDragEnter, handleDragLeave, handleClick, handleKeyDown, handleRemoveFile, openFileDialog, } = useDBoxFile(props);
|
|
1102
1269
|
return (jsxs(Fragment, { children: [jsx("section", Object.assign({ className: classNames('d-box-file', {
|
|
@@ -1104,13 +1271,14 @@ function DBoxFile(_a) {
|
|
|
1104
1271
|
'd-box-file-disabled': props.disabled,
|
|
1105
1272
|
'd-box-file-valid': isDragValid,
|
|
1106
1273
|
'd-box-file-invalid': isDragInvalid,
|
|
1107
|
-
}, className), style: style }, dataAttributes, { children: 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: [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 && (jsx(DIcon, { icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle })), jsx("div", { className: "d-box-content", children: typeof children === 'function'
|
|
1274
|
+
}, className), style: style }, dataAttributes, { children: 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: [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 && (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 })), jsx("div", { className: "d-box-content", children: typeof children === 'function'
|
|
1108
1275
|
? children(openFileDialog)
|
|
1109
1276
|
: children || (jsx("p", { className: "d-box-file-empty-text", children: "Drag and drop some files here, or click to select files" })) })] })) })), !!files.length && (jsx("ul", { className: "d-box-files", children: files.map((file, index) => (jsx(ForwardedDInput, { value: file.name, iconStart: "Paperclip", iconEnd: "Trash", readOnly: true, onIconEndClick: () => handleRemoveFile(index) }, `${file.name} ${index}`))) }))] }));
|
|
1110
1277
|
}
|
|
1111
1278
|
|
|
1112
1279
|
const DButton = forwardRef((props, ref) => {
|
|
1113
1280
|
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 = __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']);
|
|
1281
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
1114
1282
|
// Responsive size resolution using useResponsiveProp
|
|
1115
1283
|
const { responsivePropValue } = useResponsiveProp(true);
|
|
1116
1284
|
const resolvedSize = useMemo(() => {
|
|
@@ -1164,7 +1332,7 @@ const DButton = forwardRef((props, ref) => {
|
|
|
1164
1332
|
ref.current = node;
|
|
1165
1333
|
}, className: classNames(classes, className), style: Object.assign(Object.assign({}, style), (loading && buttonWidth
|
|
1166
1334
|
? { minWidth: `${buttonWidth}px` }
|
|
1167
|
-
: undefined)), "aria-label": ariaLabel, "aria-busy": loading, "aria-disabled": isDisabled, onClick: handleClick }, dataAttributes, { children: [loading && (jsxs("span", { className: "btn-loading", children: [jsx("span", { className: "spinner-border spinner-border-sm", "aria-hidden": "true" }), loadingText && jsx("span", { role: "status", children: loadingText })] })), !loading && (jsxs(Fragment, { children: [iconStart && (jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass, familyPrefix: iconStartFamilyPrefix, materialStyle: iconStartMaterialStyle })), content, iconEnd && (jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass, familyPrefix: iconEndFamilyPrefix, materialStyle: iconEndMaterialStyle }))] }))] })));
|
|
1335
|
+
: undefined)), "aria-label": ariaLabel, "aria-busy": loading, "aria-disabled": isDisabled, onClick: handleClick }, dataAttributes, { children: [loading && (jsxs("span", { className: "btn-loading", children: [jsx("span", { className: "spinner-border spinner-border-sm", "aria-hidden": "true" }), loadingText && jsx("span", { role: "status", children: loadingText })] })), !loading && (jsxs(Fragment, { children: [iconStart && (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 && (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 }))] }))] })));
|
|
1168
1336
|
}
|
|
1169
1337
|
return (jsxs("button", Object.assign({ ref: (node) => {
|
|
1170
1338
|
buttonRef.current = node;
|
|
@@ -1178,12 +1346,51 @@ const DButton = forwardRef((props, ref) => {
|
|
|
1178
1346
|
// eslint-disable-next-line react/button-has-type
|
|
1179
1347
|
type: type, className: classNames(classes, className), style: Object.assign(Object.assign({}, style), (loading && buttonWidth
|
|
1180
1348
|
? { minWidth: `${buttonWidth}px` }
|
|
1181
|
-
: undefined)), disabled: isDisabled, "aria-label": ariaLabel, "aria-busy": loading, "aria-disabled": isDisabled, onClick: handleClick }, dataAttributes, rest, { children: [loading && (jsxs("span", { className: "btn-loading", children: [jsx("span", { className: "spinner-border spinner-border-sm", "aria-hidden": "true" }), loadingText && jsx("span", { role: "status", children: loadingText })] })), !loading && (jsxs(Fragment, { children: [iconStart && (jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass, familyPrefix: iconStartFamilyPrefix, materialStyle: iconStartMaterialStyle })), content, iconEnd && (jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass, familyPrefix: iconEndFamilyPrefix, materialStyle: iconEndMaterialStyle }))] }))] })));
|
|
1349
|
+
: undefined)), disabled: isDisabled, "aria-label": ariaLabel, "aria-busy": loading, "aria-disabled": isDisabled, onClick: handleClick }, dataAttributes, rest, { children: [loading && (jsxs("span", { className: "btn-loading", children: [jsx("span", { className: "spinner-border spinner-border-sm", "aria-hidden": "true" }), loadingText && jsx("span", { role: "status", children: loadingText })] })), !loading && (jsxs(Fragment, { children: [iconStart && (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 && (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 }))] }))] })));
|
|
1182
1350
|
});
|
|
1183
1351
|
DButton.displayName = 'DButton';
|
|
1184
1352
|
|
|
1353
|
+
/**
|
|
1354
|
+
* Controls already reported, keyed by kind and icon, so the same unlabelled one
|
|
1355
|
+
* only warns once per page load however often it re-renders or however many
|
|
1356
|
+
* instances exist.
|
|
1357
|
+
*/
|
|
1358
|
+
const warnedControls = new Set();
|
|
1359
|
+
/**
|
|
1360
|
+
* Warns, once per icon and only outside production builds, that an icon-only
|
|
1361
|
+
* button has no accessible name.
|
|
1362
|
+
*
|
|
1363
|
+
* The control has no text to fall back on and its icon is hidden from the
|
|
1364
|
+
* accessibility tree, so the name has to be given explicitly. `aria-label` is
|
|
1365
|
+
* the direct way; on a button `aria-labelledby` and `title` count too, since
|
|
1366
|
+
* `rest` reaches the DOM there, while an anchor drops them — hence `kind`, so
|
|
1367
|
+
* the advice matches what the element can actually receive.
|
|
1368
|
+
*
|
|
1369
|
+
* A legacy icon-font icon used to leak its ligature as the name by accident —
|
|
1370
|
+
* never a good one, being unlocalised and often meaningless ("more_vert") — and
|
|
1371
|
+
* no longer does, so the omission is now visible instead of silent.
|
|
1372
|
+
*
|
|
1373
|
+
* The `process.env.NODE_ENV` guard is what bundlers constant-fold, so the whole
|
|
1374
|
+
* call — and this module — drops out of a consumer's production bundle.
|
|
1375
|
+
*/
|
|
1376
|
+
function warnMissingAccessibleName(icon, kind) {
|
|
1377
|
+
const key = `${kind}:${icon}`;
|
|
1378
|
+
if (warnedControls.has(key))
|
|
1379
|
+
return;
|
|
1380
|
+
warnedControls.add(key);
|
|
1381
|
+
const alternatives = kind === 'button'
|
|
1382
|
+
? 'On a button, aria-labelledby or title work too. '
|
|
1383
|
+
: 'A link renders from the href branch, which does not forward aria-labelledby or title, so aria-label is the only option. ';
|
|
1384
|
+
// eslint-disable-next-line no-console
|
|
1385
|
+
console.warn(`[Dynamic UI] DButtonIcon: the "${icon}" ${kind} has no accessible name. `
|
|
1386
|
+
+ 'Pass aria-label, since an icon-only control has no text to fall back on '
|
|
1387
|
+
+ `and its icon is hidden from the accessibility tree. ${alternatives}`
|
|
1388
|
+
+ 'It never appears in production builds.');
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1185
1391
|
function DButtonIcon(_a) {
|
|
1186
1392
|
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 = __rest(_a, ["id", "icon", "size", "className", "variant", "state", "loadingAriaLabel", "iconMaterialStyle", "disabled", "color", "loading", "href", "target", "rel", "stopPropagationEnabled", "style", "iconFamilyClass", "iconFamilyPrefix", "dataAttributes", "onClick", 'aria-label']);
|
|
1393
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
1187
1394
|
const generateClasses = useMemo(() => {
|
|
1188
1395
|
const variantClass = !variant || variant === 'solid'
|
|
1189
1396
|
? `btn-${color}`
|
|
@@ -1204,14 +1411,23 @@ function DButtonIcon(_a) {
|
|
|
1204
1411
|
const ariaLabel = useMemo(() => (loading
|
|
1205
1412
|
? loadingAriaLabel || ariaLabelProp
|
|
1206
1413
|
: ariaLabelProp), [loading, loadingAriaLabel, ariaLabelProp]);
|
|
1414
|
+
/**
|
|
1415
|
+
* `aria-labelledby` and `title` also name a control, but they travel in `rest`,
|
|
1416
|
+
* which only the button branch spreads — an anchor drops them, so there the
|
|
1417
|
+
* button really is unnamed and the warning still applies.
|
|
1418
|
+
*/
|
|
1419
|
+
const hasAccessibleName = useMemo(() => !!ariaLabel || (!href && (!!rest['aria-labelledby'] || !!rest.title)), [ariaLabel, href, rest]);
|
|
1420
|
+
if (process.env.NODE_ENV !== 'production' && !hasAccessibleName) {
|
|
1421
|
+
warnMissingAccessibleName(icon, href ? 'link' : 'button');
|
|
1422
|
+
}
|
|
1207
1423
|
if (href) {
|
|
1208
1424
|
return (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
|
|
1209
1425
|
? (jsx("span", { className: "spinner-border spinner-border-sm", role: "status", "aria-hidden": "true", children: jsx("span", { className: "visually-hidden", children: "Loading..." }) }))
|
|
1210
|
-
: (jsx(DIcon, { icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle })) })));
|
|
1426
|
+
: (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 })) })));
|
|
1211
1427
|
}
|
|
1212
1428
|
return (jsx("button", Object.assign({ className: classNames(generateClasses, className), style: style, disabled: state === 'disabled' || loading, onClick: clickHandler, "aria-label": ariaLabel }, dataAttributes, rest, { children: loading
|
|
1213
1429
|
? (jsx("span", { className: "spinner-border spinner-border-sm", role: "status", "aria-hidden": "true", children: jsx("span", { className: "visually-hidden", children: "Loading..." }) }))
|
|
1214
|
-
: (jsx(DIcon, { icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle })) })));
|
|
1430
|
+
: (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 })) })));
|
|
1215
1431
|
}
|
|
1216
1432
|
|
|
1217
1433
|
function DCardHeader({ className, style, children, }) {
|
|
@@ -1274,12 +1490,12 @@ function DChip({ color = 'primary', text, icon, iconFamilyClass, iconFamilyPrefi
|
|
|
1274
1490
|
'd-chip': true,
|
|
1275
1491
|
[`d-chip-${color}`]: !!color,
|
|
1276
1492
|
}), [color]);
|
|
1277
|
-
const { iconMap: { xLg, }, } = useDContext();
|
|
1493
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, iconMap: { xLg, }, } = useDContext();
|
|
1278
1494
|
const iconClose = useMemo(() => iconCloseProp || xLg, [iconCloseProp, xLg]);
|
|
1279
|
-
return (jsxs("span", Object.assign({ className: classNames(generateClasses, className), style: style }, dataAttributes, { children: [icon && (jsx("div", { className: "d-chip-icon-container", children: jsx(DIcon, { icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle }) })), jsx("span", { children: text }), showClose && (jsx("button", { type: "button", className: "d-chip-icon-container", onClick: onClose, "aria-label": closeAriaLabel, children: jsx(DIcon, { icon: iconClose, familyClass: iconCloseFamilyClass, familyPrefix: iconCloseFamilyPrefix, materialStyle: iconCloseMaterialStyle }) }))] })));
|
|
1495
|
+
return (jsxs("span", Object.assign({ className: classNames(generateClasses, className), style: style }, dataAttributes, { children: [icon && (jsx("div", { className: "d-chip-icon-container", children: 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 }) })), jsx("span", { children: text }), showClose && (jsx("button", { type: "button", className: "d-chip-icon-container", onClick: onClose, "aria-label": closeAriaLabel, children: 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 }) }))] })));
|
|
1280
1496
|
}
|
|
1281
1497
|
|
|
1282
|
-
function DCollapse({ id, className, style, Component, defaultCollapsed = true, onChange, children, iconOpen: iconOpenProp, iconClose: iconCloseProp, iconFamilyClass, iconFamilyPrefix, iconMaterialStyle
|
|
1498
|
+
function DCollapse({ id, className, style, Component, defaultCollapsed = true, onChange, children, iconOpen: iconOpenProp, iconClose: iconCloseProp, iconFamilyClass, iconFamilyPrefix, iconMaterialStyle, dataAttributes, }) {
|
|
1283
1499
|
const [collapsed, setCollapsed] = useState(defaultCollapsed);
|
|
1284
1500
|
const onChangeCollapse = () => {
|
|
1285
1501
|
setCollapsed((prev) => {
|
|
@@ -1293,10 +1509,10 @@ function DCollapse({ id, className, style, Component, defaultCollapsed = true, o
|
|
|
1293
1509
|
useEffect(() => {
|
|
1294
1510
|
setCollapsed(defaultCollapsed);
|
|
1295
1511
|
}, [defaultCollapsed]);
|
|
1296
|
-
const { iconMap: { chevronDown, chevronUp, }, } = useDContext();
|
|
1512
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, iconMap: { chevronDown, chevronUp, }, } = useDContext();
|
|
1297
1513
|
const iconOpen = useMemo(() => iconOpenProp || chevronDown, [chevronDown, iconOpenProp]);
|
|
1298
1514
|
const iconClose = useMemo(() => iconCloseProp || chevronUp, [chevronUp, iconCloseProp]);
|
|
1299
|
-
return (jsxs("div", Object.assign({ id: id, className: classNames('collapse-container', className), style: style }, dataAttributes, { children: [jsxs("button", { className: "collapse-button", type: "button", onClick: onChangeCollapse, children: [jsx("div", { className: "flex-grow-1", children: Component }), jsx(DIcon, { color: "primary", size: "1.25rem", icon: collapsed ? iconOpen : iconClose, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: iconMaterialStyle })] }), jsx("div", { className: classNames('collapse-body-wrapper', {
|
|
1515
|
+
return (jsxs("div", Object.assign({ id: id, className: classNames('collapse-container', className), style: style }, dataAttributes, { children: [jsxs("button", { className: "collapse-button", type: "button", onClick: onChangeCollapse, children: [jsx("div", { className: "flex-grow-1", children: Component }), 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 })] }), jsx("div", { className: classNames('collapse-body-wrapper', {
|
|
1300
1516
|
show: !collapsed,
|
|
1301
1517
|
}), children: jsx("div", { className: "collapse-body", children: children }) })] })));
|
|
1302
1518
|
}
|
|
@@ -2087,9 +2303,9 @@ function DInputCheck(_a) {
|
|
|
2087
2303
|
]);
|
|
2088
2304
|
useEffect(() => {
|
|
2089
2305
|
if (innerRef.current) {
|
|
2090
|
-
innerRef.current.indeterminate = Boolean(indeterminate);
|
|
2306
|
+
innerRef.current.indeterminate = type === 'checkbox' && Boolean(indeterminate);
|
|
2091
2307
|
}
|
|
2092
|
-
}, [indeterminate]);
|
|
2308
|
+
}, [indeterminate, type]);
|
|
2093
2309
|
useEffect(() => {
|
|
2094
2310
|
if (innerRef.current) {
|
|
2095
2311
|
innerRef.current.checked = checked;
|
|
@@ -2282,10 +2498,18 @@ function DInputSelect({ id: idProp, name, label = '', className, style, options
|
|
|
2282
2498
|
}), children: [iconStart && (jsx("button", { type: "button", className: "input-group-text", id: `${id}Start`, onClick: iconStartClickHandler, disabled: disabled || loading, "aria-label": iconStartAriaLabel, children: iconStart && (jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass, familyPrefix: iconStartFamilyPrefix })) })), dynamicComponent, iconEnd && !loading && (jsx("button", { type: "button", className: "input-group-text", id: `${id}End`, onClick: iconEndClickHandler, disabled: disabled || loading, "aria-label": iconEndAriaLabel, children: iconEnd && (jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass, familyPrefix: iconEndFamilyPrefix })) })), loading && (jsx("div", { className: "input-group-text form-control-icon loading", children: jsx("span", { className: "spinner-border spinner-border-sm", role: "status", "aria-hidden": "true", children: jsx("span", { className: "visually-hidden", children: "Loading..." }) }) }))] }), hint && (jsx("div", { className: "form-text", id: `${id}Hint`, children: hint }))] })));
|
|
2283
2499
|
}
|
|
2284
2500
|
|
|
2285
|
-
function DInputSwitch({ id: idProp, label, ariaLabel, name, checked, disabled, invalid = false, valid = false, readonly, className, style, dataAttributes, inputClassName, onChange, }) {
|
|
2501
|
+
function DInputSwitch({ id: idProp, label, ariaLabel, name, checked, disabled, invalid = false, valid = false, hint, readonly, className, style, dataAttributes, inputClassName, onChange, }) {
|
|
2286
2502
|
const innerId = useId();
|
|
2287
2503
|
const id = useMemo(() => idProp || innerId, [idProp, innerId]);
|
|
2288
2504
|
const [internalIsChecked, setInternalIsChecked] = useState(checked);
|
|
2505
|
+
const ariaDescribedby = useMemo(() => ([
|
|
2506
|
+
!!hint && `${id}Hint`,
|
|
2507
|
+
]
|
|
2508
|
+
.filter(Boolean)
|
|
2509
|
+
.join(' ')), [
|
|
2510
|
+
id,
|
|
2511
|
+
hint,
|
|
2512
|
+
]);
|
|
2289
2513
|
useEffect(() => {
|
|
2290
2514
|
setInternalIsChecked(checked);
|
|
2291
2515
|
}, [checked]);
|
|
@@ -2294,10 +2518,10 @@ function DInputSwitch({ id: idProp, label, ariaLabel, name, checked, disabled, i
|
|
|
2294
2518
|
setInternalIsChecked(value);
|
|
2295
2519
|
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
|
2296
2520
|
}, [onChange]);
|
|
2297
|
-
return (jsxs("div", Object.assign({ className: classNames('form-check form-switch', className) }, dataAttributes, { children: [jsx("input", { id: id, name: name, onChange: readonly ? () => false : changeHandler, className: classNames('form-check-input', {
|
|
2521
|
+
return (jsxs("div", Object.assign({ className: classNames('form-check form-switch', className) }, dataAttributes, { children: [jsx("input", Object.assign({ id: id, name: name, onChange: readonly ? () => false : changeHandler, className: classNames('form-check-input', {
|
|
2298
2522
|
'is-invalid': invalid,
|
|
2299
2523
|
'is-valid': valid,
|
|
2300
|
-
}, inputClassName), style: style, type: "checkbox", role: "switch", checked: internalIsChecked, disabled: disabled, "aria-label": ariaLabel }), label && (jsx("label", { className: "form-check-label", htmlFor: id, children: label }))] })));
|
|
2524
|
+
}, inputClassName), style: style, type: "checkbox", role: "switch", checked: internalIsChecked, disabled: disabled, "aria-label": ariaLabel }, ariaDescribedby && { 'aria-describedby': ariaDescribedby })), label && (jsx("label", { className: "form-check-label", htmlFor: id, children: label })), hint && (jsx("div", { className: "form-text", id: `${id}Hint`, children: hint }))] })));
|
|
2301
2525
|
}
|
|
2302
2526
|
|
|
2303
2527
|
function DInputRange(_a, ref) {
|
|
@@ -2338,6 +2562,7 @@ const ForwardedDInputRange = forwardRef(DInputRange);
|
|
|
2338
2562
|
ForwardedDInputRange.displayName = 'DInputRange';
|
|
2339
2563
|
|
|
2340
2564
|
function DListGroupItem({ as = 'li', action: actionProp, active, disabled, href, onClick, color, iconStart, iconStartFamilyClass, iconStartFamilyPrefix, iconStartMaterialStyle, iconEnd, iconEndFamilyClass, iconEndFamilyPrefix, iconEndMaterialStyle, children, className, style, dataAttributes, }) {
|
|
2565
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
2341
2566
|
const Tag = useMemo(() => {
|
|
2342
2567
|
if (href) {
|
|
2343
2568
|
return 'a';
|
|
@@ -2366,7 +2591,7 @@ function DListGroupItem({ as = 'li', action: actionProp, active, disabled, href,
|
|
|
2366
2591
|
}
|
|
2367
2592
|
return Object.assign(Object.assign({}, active && { 'aria-current': true }), disabled && { 'aria-disabled': true });
|
|
2368
2593
|
}, [Tag, active, disabled]);
|
|
2369
|
-
return (jsxs(Tag, Object.assign({ className: classNames(generateClasses, className), style: style }, Tag === 'a' && href && { href }, onClick && { onClick }, ariaAttributes, dataAttributes, Tag === 'button' && { type: 'button' }, { children: [iconStart && (jsx(DIcon, { icon: iconStart, familyClass: iconStartFamilyClass, familyPrefix: iconStartFamilyPrefix, materialStyle: iconStartMaterialStyle })), children, iconEnd && (jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass, familyPrefix: iconEndFamilyPrefix, materialStyle: iconEndMaterialStyle, className: "ms-auto" }))] })));
|
|
2594
|
+
return (jsxs(Tag, Object.assign({ className: classNames(generateClasses, className), style: style }, Tag === 'a' && href && { href }, onClick && { onClick }, ariaAttributes, dataAttributes, Tag === 'button' && { type: 'button' }, { children: [iconStart && (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 && (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" }))] })));
|
|
2370
2595
|
}
|
|
2371
2596
|
|
|
2372
2597
|
function DListGroup({ as = 'ul', numbered, flush, horizontal, children, className, style, dataAttributes, }) {
|
|
@@ -2393,10 +2618,11 @@ var DListGroup$1 = Object.assign(DListGroup, {
|
|
|
2393
2618
|
Item: DListGroupItem,
|
|
2394
2619
|
});
|
|
2395
2620
|
|
|
2396
|
-
function DModalHeader({ showCloseButton, onClose, children, className, style, iconFamilyClass, iconFamilyPrefix, icon: iconProp, materialStyle
|
|
2397
|
-
|
|
2621
|
+
function DModalHeader({ showCloseButton, onClose, children, className, style, iconFamilyClass, iconFamilyPrefix, icon: iconProp, iconMaterialStyle, materialStyle: materialStyleProp, }) {
|
|
2622
|
+
var _a;
|
|
2623
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, iconMap: { xLg, }, } = useDContext();
|
|
2398
2624
|
const icon = useMemo(() => iconProp || xLg, [iconProp, xLg]);
|
|
2399
|
-
return (jsxs(Fragment, { children: [jsxs("div", { className: classNames('modal-header', className), style: style, children: [jsx("div", { children: children }), showCloseButton && (jsx("button", { type: "button", className: "d-close", "aria-label": "Close", onClick: onClose, children: jsx(DIcon, { icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: materialStyle }) }))] }), jsx("div", { className: "d-modal-separator" })] }));
|
|
2625
|
+
return (jsxs(Fragment, { children: [jsxs("div", { className: classNames('modal-header', className), style: style, children: [jsx("div", { children: children }), showCloseButton && (jsx("button", { type: "button", className: "d-close", "aria-label": "Close", onClick: onClose, children: 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 }) }))] }), jsx("div", { className: "d-modal-separator" })] }));
|
|
2400
2626
|
}
|
|
2401
2627
|
|
|
2402
2628
|
function DModalBody({ children, className, style, }) {
|
|
@@ -2437,10 +2663,11 @@ var DModal$1 = Object.assign(DModal, {
|
|
|
2437
2663
|
Footer: DModalFooter,
|
|
2438
2664
|
});
|
|
2439
2665
|
|
|
2440
|
-
function DOffcanvasHeader({ showCloseButton, onClose, children, className, style, iconFamilyClass, iconFamilyPrefix, icon: iconProp, materialStyle
|
|
2441
|
-
|
|
2666
|
+
function DOffcanvasHeader({ showCloseButton, onClose, children, className, style, iconFamilyClass, iconFamilyPrefix, icon: iconProp, iconMaterialStyle, materialStyle: materialStyleProp, }) {
|
|
2667
|
+
var _a;
|
|
2668
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, iconMap: { xLg, }, } = useDContext();
|
|
2442
2669
|
const icon = useMemo(() => iconProp || xLg, [iconProp, xLg]);
|
|
2443
|
-
return (jsxs(Fragment, { children: [jsxs("div", { className: classNames('offcanvas-header', className), style: style, children: [jsx("div", { children: children }), showCloseButton && (jsx("button", { type: "button", className: "d-close", "aria-label": "Close", onClick: onClose, children: jsx(DIcon, { icon: icon, familyClass: iconFamilyClass, familyPrefix: iconFamilyPrefix, materialStyle: materialStyle }) }))] }), jsx("div", { className: "d-offcanvas-separator" })] }));
|
|
2670
|
+
return (jsxs(Fragment, { children: [jsxs("div", { className: classNames('offcanvas-header', className), style: style, children: [jsx("div", { children: children }), showCloseButton && (jsx("button", { type: "button", className: "d-close", "aria-label": "Close", onClick: onClose, children: 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 }) }))] }), jsx("div", { className: "d-offcanvas-separator" })] }));
|
|
2444
2671
|
}
|
|
2445
2672
|
|
|
2446
2673
|
function DOffcanvasBody({ children, className, style, }) {
|
|
@@ -2581,8 +2808,8 @@ function DProgress({ className, style, currentValue, minValue = 0, maxValue = 10
|
|
|
2581
2808
|
return (jsx("div", Object.assign({ className: classNames('progress', className), style: Object.assign({ height }, style) }, dataAttributes, { children: 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 }) })));
|
|
2582
2809
|
}
|
|
2583
2810
|
|
|
2584
|
-
function DStepper$2({ options, currentStep, iconSuccess: iconSuccessProp, iconSuccessFamilyClass, iconSuccessFamilyPrefix, iconSuccessMaterialStyle
|
|
2585
|
-
const { iconMap: { check, }, } = useDContext();
|
|
2811
|
+
function DStepper$2({ options, currentStep, iconSuccess: iconSuccessProp, iconSuccessFamilyClass, iconSuccessFamilyPrefix, iconSuccessMaterialStyle, vertical = false, completed, alignStart = false, className, style, }) {
|
|
2812
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, iconMap: { check, }, } = useDContext();
|
|
2586
2813
|
const icon = useMemo(() => iconSuccessProp || check, [check, iconSuccessProp]);
|
|
2587
2814
|
if (currentStep < 1 || currentStep > options.length) {
|
|
2588
2815
|
throw new Error('Current step should be in the range from 1 to options length');
|
|
@@ -2597,7 +2824,7 @@ function DStepper$2({ options, currentStep, iconSuccess: iconSuccessProp, iconSu
|
|
|
2597
2824
|
}), children: [jsx("div", { className: "d-step-value", children: jsxs("div", { className: classNames({
|
|
2598
2825
|
'd-step-icon-container': true,
|
|
2599
2826
|
'd-step-check': value < currentStep || completed,
|
|
2600
|
-
}), children: [((value < currentStep) || completed) && (jsx(DIcon, { icon: icon, familyClass: iconSuccessFamilyClass, familyPrefix: iconSuccessFamilyPrefix, materialStyle: iconSuccessMaterialStyle, className: "d-step-icon" })), value] }) }), jsxs("div", { className: "d-step-text-container", children: [jsx("div", { className: "d-step-label", children: label }), description && (jsx("div", { className: "d-step-description", children: description }))] })] }, value))) }));
|
|
2827
|
+
}), children: [((value < currentStep) || completed) && (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] }) }), jsxs("div", { className: "d-step-text-container", children: [jsx("div", { className: "d-step-label", children: label }), description && (jsx("div", { className: "d-step-description", children: description }))] })] }, value))) }));
|
|
2601
2828
|
}
|
|
2602
2829
|
|
|
2603
2830
|
function DStepper$1({ options, currentStep, className, style, }) {
|
|
@@ -2630,13 +2857,20 @@ function DStepper$1({ options, currentStep, className, style, }) {
|
|
|
2630
2857
|
return (jsxs("div", { className: classNames('d-stepper', className), style: style, children: [jsx("div", { className: "d-step-bar", style: { background: progressStyle }, children: jsx("p", { className: "d-step-number", children: `${currentStep}/${options.length}` }) }), jsx("div", { className: "d-step-info", children: Object.keys(currentOption).length > 0 && (jsxs(Fragment, { children: [jsx("div", { className: "d-step-label", children: currentOption.label }), jsx("div", { className: "d-step-description", children: currentOption.description || '' })] })) })] }));
|
|
2631
2858
|
}
|
|
2632
2859
|
|
|
2633
|
-
function DStepper({ options, currentStep, iconSuccess, iconSuccessFamilyClass, iconSuccessFamilyPrefix, iconSuccessMaterialStyle
|
|
2634
|
-
|
|
2860
|
+
function DStepper({ options, currentStep, iconSuccess, iconSuccessFamilyClass, iconSuccessFamilyPrefix, iconSuccessMaterialStyle, vertical = false, breakpoint = 'lg', className, completed = false, style, dataAttributes, }) {
|
|
2861
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
2862
|
+
return (jsxs("div", Object.assign({ className: className, style: style }, dataAttributes, { children: [jsx("div", { className: classNames('d-stepper-mobile', `d-block d-${breakpoint}-none`), children: jsx(DStepper$1, { options: options, currentStep: currentStep }) }), jsx("div", { className: classNames('d-stepper-desktop', `d-none d-${breakpoint}-block`), children: 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 }) })] })));
|
|
2635
2863
|
}
|
|
2636
2864
|
|
|
2637
2865
|
const ARROW_WIDTH = 8;
|
|
2638
2866
|
const ARROW_HEIGHT = 4;
|
|
2639
2867
|
const GAP$1 = 2;
|
|
2868
|
+
/**
|
|
2869
|
+
* Tooltip is an abstraction component that wraps any element (`Component`) and displays
|
|
2870
|
+
* floating contextual content (`children`) positioned relative to it using Floating UI.
|
|
2871
|
+
* Use it to add short, non-critical hints or descriptions triggered by hover, focus, or
|
|
2872
|
+
* click, without altering the surrounding layout.
|
|
2873
|
+
*/
|
|
2640
2874
|
function DTooltip({ className, childrenClassName, style, offSet = ARROW_HEIGHT + GAP$1, padding, withFocus = false, withClick = false, withHover = true, open = false, placement = 'top', size, Component, children, }) {
|
|
2641
2875
|
const [isOpen, setIsOpen] = useState(open);
|
|
2642
2876
|
const arrowRef = useRef(null);
|
|
@@ -2675,7 +2909,7 @@ function DTooltip({ className, childrenClassName, style, offSet = ARROW_HEIGHT +
|
|
|
2675
2909
|
function DTimeline({ className, style, dataAttributes, items, }) {
|
|
2676
2910
|
return (jsx("div", Object.assign({ style: style, className: classNames('d-timeline', className) }, dataAttributes, { children: items.map((item, index) => (jsxs("div", { className: classNames('d-timeline-item', {
|
|
2677
2911
|
[`d-timeline-item-${item.status}`]: item.status,
|
|
2678
|
-
}), children: [jsx("div", { className: "d-timeline-item-connector" }), jsx("div", { className: "d-timeline-item-icon", children: jsx(DIcon, { icon: item.icon || '
|
|
2912
|
+
}), children: [jsx("div", { className: "d-timeline-item-connector" }), jsx("div", { className: "d-timeline-item-icon", children: jsx(DIcon, { icon: item.icon || 'Check', size: "1rem" }) }), jsxs("div", { className: "d-timeline-item-content", children: [jsx("div", { className: "d-timeline-item-title", children: item.title }), item.description && jsx("div", { className: "d-timeline-item-description", children: item.description }), item.time && jsx("div", { className: "d-timeline-item-time", children: item.time }), item.children] })] }, index))) })));
|
|
2679
2913
|
}
|
|
2680
2914
|
|
|
2681
2915
|
const TabContext = createContext(undefined);
|
|
@@ -2919,11 +3153,132 @@ function validatePhoneNumber(phone) {
|
|
|
2919
3153
|
}
|
|
2920
3154
|
}
|
|
2921
3155
|
|
|
3156
|
+
const SAFE_SCHEMES = new Set(['http:', 'https:', 'mailto:', 'tel:']);
|
|
3157
|
+
/**
|
|
3158
|
+
* Characters the URL parser drops before resolving a URL, so they cannot be used to hide a
|
|
3159
|
+
* scheme-relative prefix or a dangerous scheme (e.g. `/<TAB>/evil.com`, `java<TAB>script:`).
|
|
3160
|
+
*/
|
|
3161
|
+
const IGNORED_CHARS$1 = /[\t\n\r]/g;
|
|
3162
|
+
/**
|
|
3163
|
+
* Two leading separators in any combination. Browsers treat a leading `\` exactly like a
|
|
3164
|
+
* leading `/`, so `//`, `/\`, `\/` and `\\` all resolve to a scheme-relative URL.
|
|
3165
|
+
*/
|
|
3166
|
+
const SCHEME_RELATIVE = /^[/\\]{2}/;
|
|
3167
|
+
const LEADING_SEPARATOR = /^[/\\]/;
|
|
3168
|
+
/**
|
|
3169
|
+
* Validates a `href` value and returns it only if it is safe to render as a link,
|
|
3170
|
+
* preventing XSS through unsafe URL schemes and scheme-relative URLs.
|
|
3171
|
+
*
|
|
3172
|
+
* Before validating, the value is trimmed and every tab, line feed and carriage return is
|
|
3173
|
+
* removed, because the URL parser ignores those characters too and they would otherwise
|
|
3174
|
+
* hide an unsafe value from the checks below.
|
|
3175
|
+
*
|
|
3176
|
+
* A `href` is considered safe when it is either:
|
|
3177
|
+
* - An absolute path starting with a single separator (e.g. `/accounts/42`). A leading `\`
|
|
3178
|
+
* is normalized to `/` in the returned value, since that is how the browser resolves it.
|
|
3179
|
+
* - A URL using one of the allowed schemes: `http:`, `https:`, `mailto:`, `tel:`.
|
|
3180
|
+
*
|
|
3181
|
+
* A `href` is rejected (returns `undefined`) when it is:
|
|
3182
|
+
* - Empty or made only of whitespace/ignored characters (`''`, `' '`).
|
|
3183
|
+
* - Scheme-relative (starts with two separators, e.g. `//evil.com`, `/\evil.com`,
|
|
3184
|
+
* `/<TAB>/evil.com`), since the browser would resolve it using the current protocol and it
|
|
3185
|
+
* can be used to redirect to an attacker-controlled host.
|
|
3186
|
+
* - Using a disallowed/dangerous scheme, such as `javascript:` or `data:`
|
|
3187
|
+
* (e.g. `javascript:alert(1)`, `data:text/html,<script>...</script>`).
|
|
3188
|
+
* - Not parseable as an absolute URL and not an absolute path, such as bare fragments
|
|
3189
|
+
* (`#anchor`) or scheme-less relative paths (`relative/path`). These cannot be validated
|
|
3190
|
+
* against `SAFE_SCHEMES`, so they are rejected rather than assumed safe.
|
|
3191
|
+
*
|
|
3192
|
+
* @param href - The raw URL or path to validate, typically coming from user input,
|
|
3193
|
+
* a CMS, or an external API.
|
|
3194
|
+
* @returns The sanitized `href` when safe, `undefined` otherwise.
|
|
3195
|
+
*
|
|
3196
|
+
* @example
|
|
3197
|
+
* sanitizeHref('/accounts/42'); // '/accounts/42'
|
|
3198
|
+
* sanitizeHref('https://example.com'); // 'https://example.com'
|
|
3199
|
+
* sanitizeHref('mailto:test@example.com'); // 'mailto:test@example.com'
|
|
3200
|
+
* sanitizeHref('//evil.com'); // undefined
|
|
3201
|
+
* sanitizeHref('/\\evil.com'); // undefined
|
|
3202
|
+
* sanitizeHref('javascript:alert(1)'); // undefined
|
|
3203
|
+
*/
|
|
3204
|
+
function sanitizeHref(href) {
|
|
3205
|
+
const normalized = href.trim().replace(IGNORED_CHARS$1, '');
|
|
3206
|
+
if (!normalized)
|
|
3207
|
+
return undefined;
|
|
3208
|
+
if (SCHEME_RELATIVE.test(normalized))
|
|
3209
|
+
return undefined;
|
|
3210
|
+
if (LEADING_SEPARATOR.test(normalized))
|
|
3211
|
+
return `/${normalized.slice(1)}`;
|
|
3212
|
+
try {
|
|
3213
|
+
const { protocol } = new URL(normalized);
|
|
3214
|
+
return SAFE_SCHEMES.has(protocol) ? normalized : undefined;
|
|
3215
|
+
}
|
|
3216
|
+
catch (_a) {
|
|
3217
|
+
return undefined;
|
|
3218
|
+
}
|
|
3219
|
+
}
|
|
3220
|
+
|
|
3221
|
+
/**
|
|
3222
|
+
* Characters the URL parser drops before resolving a URL, so they cannot be used to hide a
|
|
3223
|
+
* scheme-relative prefix (e.g. `/<TAB>/evil.com`).
|
|
3224
|
+
*/
|
|
3225
|
+
const IGNORED_CHARS = /[\t\n\r]/g;
|
|
3226
|
+
/**
|
|
3227
|
+
* Leading separators. Browsers treat a leading `\` exactly like a leading `/`, so both have
|
|
3228
|
+
* to be stripped to prevent scheme-relative URLs (`//evil.com`, `/\evil.com`, `\\evil.com`).
|
|
3229
|
+
*/
|
|
3230
|
+
const LEADING_SEPARATORS = /^[/\\]+/;
|
|
3231
|
+
/**
|
|
3232
|
+
* Builds an internal URL from a `path` and a set of query `params`, normalizing leading
|
|
3233
|
+
* separators to prevent scheme-relative URLs (e.g. `//accounts` and `/\accounts` both become
|
|
3234
|
+
* `/accounts`).
|
|
3235
|
+
*
|
|
3236
|
+
* The `path` is trimmed and every tab, line feed and carriage return is removed before
|
|
3237
|
+
* building the result, because the URL parser ignores those characters too and they would
|
|
3238
|
+
* otherwise hide a scheme-relative prefix (`/<TAB>/evil.com` resolves to `//evil.com`).
|
|
3239
|
+
*
|
|
3240
|
+
* Handles the special case where `path` is the literal string `'#'`, which happens when
|
|
3241
|
+
* a Liquid template variable used as a link target is left unconfigured; in that case the
|
|
3242
|
+
* params are ignored and `'#'` is returned as-is instead of building a broken URL.
|
|
3243
|
+
*
|
|
3244
|
+
* @param path - The path to build the URL from. Leading separators are stripped before
|
|
3245
|
+
* building the result (`/accounts`, `//accounts` and `\accounts` are all treated as `accounts`).
|
|
3246
|
+
* @param params - Key/value pairs serialized as the query string.
|
|
3247
|
+
* @returns The resulting URL:
|
|
3248
|
+
* - `'#'` when `path` normalizes to `'#'` (`'#'`, `'/#'`), ignoring the params.
|
|
3249
|
+
* - `'/'` when `path` is empty and there are no params.
|
|
3250
|
+
* - `'/?<query>'` when `path` is empty and there are params.
|
|
3251
|
+
* - `'<path>'` or `'<path>?<query>'` when `path` starts with `#`, since a fragment must not be
|
|
3252
|
+
* prefixed with `/` (it would navigate away from the current document).
|
|
3253
|
+
* - `'/<path>'` or `'/<path>?<query>'` otherwise.
|
|
3254
|
+
*
|
|
3255
|
+
* @example
|
|
3256
|
+
* buildUrl('accounts', { account_id: '42' }); // '/accounts?account_id=42'
|
|
3257
|
+
* buildUrl('//accounts', {}); // '/accounts'
|
|
3258
|
+
* buildUrl('#', { account_id: '42' }); // '#'
|
|
3259
|
+
* buildUrl('#accounts', { account_id: '42' }); // '#accounts?account_id=42'
|
|
3260
|
+
* buildUrl('', { tab: 'movimientos' }); // '/?tab=movimientos'
|
|
3261
|
+
*/
|
|
3262
|
+
function buildUrl(path, params) {
|
|
3263
|
+
const normalizedPath = path
|
|
3264
|
+
.trim()
|
|
3265
|
+
.replace(IGNORED_CHARS, '')
|
|
3266
|
+
.replace(LEADING_SEPARATORS, '');
|
|
3267
|
+
if (normalizedPath === '#')
|
|
3268
|
+
return '#';
|
|
3269
|
+
const query = new URLSearchParams(Object.entries(params).map(([key, value]) => [key, String(value)])).toString();
|
|
3270
|
+
if (normalizedPath === '')
|
|
3271
|
+
return query ? `/?${query}` : '/';
|
|
3272
|
+
const prefix = normalizedPath.startsWith('#') ? '' : '/';
|
|
3273
|
+
return `${prefix}${normalizedPath}${query ? `?${query}` : ''}`;
|
|
3274
|
+
}
|
|
3275
|
+
|
|
2922
3276
|
function DInputPhone(_a, ref) {
|
|
2923
3277
|
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 = __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"]);
|
|
2924
3278
|
const innerRef = useProvidedRefOrCreate(ref);
|
|
2925
3279
|
const innerId = useId();
|
|
2926
3280
|
const id = useMemo(() => idProp || innerId, [idProp, innerId]);
|
|
3281
|
+
const { icon: { familyClass, familyPrefix, materialStyle, }, } = useDContext();
|
|
2927
3282
|
const handleOnIconEndClick = useCallback(() => {
|
|
2928
3283
|
onIconEndClick === null || onIconEndClick === void 0 ? void 0 : onIconEndClick(value);
|
|
2929
3284
|
}, [onIconEndClick, value]);
|
|
@@ -2997,7 +3352,7 @@ function DInputPhone(_a, ref) {
|
|
|
2997
3352
|
[`input-group-${size}`]: !!size,
|
|
2998
3353
|
'input-group': true,
|
|
2999
3354
|
'has-validation': invalid || valid,
|
|
3000
|
-
}), children: [jsx(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) && (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: jsx(DIcon, { icon: iconEnd, familyClass: iconEndFamilyClass, familyPrefix: iconEndFamilyPrefix, materialStyle: iconEndMaterialStyle }) })), loading && (jsx("div", { className: "input-group-text", id: `${id}Loading`, children: jsx("span", { className: "spinner-border spinner-border-sm", role: "status", "aria-hidden": "true", children: jsx("span", { className: "visually-hidden", children: "Loading..." }) }) })), !!inputEnd && (jsx("div", { className: "input-group-text", id: `${id}InputEnd`, children: inputEnd }))] }), hint && (jsx("div", { className: "form-text", id: `${id}Hint`, children: hint }))] })));
|
|
3355
|
+
}), children: [jsx(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) && (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: 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 && (jsx("div", { className: "input-group-text", id: `${id}Loading`, children: jsx("span", { className: "spinner-border spinner-border-sm", role: "status", "aria-hidden": "true", children: jsx("span", { className: "visually-hidden", children: "Loading..." }) }) })), !!inputEnd && (jsx("div", { className: "input-group-text", id: `${id}InputEnd`, children: inputEnd }))] }), hint && (jsx("div", { className: "form-text", id: `${id}Hint`, children: hint }))] })));
|
|
3001
3356
|
}
|
|
3002
3357
|
const ForwardedDInputPhone = forwardRef(DInputPhone);
|
|
3003
3358
|
ForwardedDInputPhone.displayName = 'DInputPhone';
|
|
@@ -3599,5 +3954,58 @@ function DConfirmModalContainer({ nodeId }) {
|
|
|
3599
3954
|
return createPortal(jsx(AnimatePresence, { children: entries.map((entry) => (jsxs(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0, transition: { delay: 0.3 } }, transition: { duration: 0.15, ease: 'linear' }, children: [jsx("div", { className: "backdrop backdrop-confirm-modal", onClick: entry.onCloseAction, role: "presentation" }), jsx(DConfirmModalUI, { entry: entry })] }, entry.id))) }), portalNode);
|
|
3600
3955
|
}
|
|
3601
3956
|
|
|
3602
|
-
|
|
3957
|
+
/**
|
|
3958
|
+
* The lucide-react icons Dynamic UI renders on its own, without the consumer
|
|
3959
|
+
* asking for them by name.
|
|
3960
|
+
*
|
|
3961
|
+
* Two sources feed this list:
|
|
3962
|
+
*
|
|
3963
|
+
* - The `iconMap` defaults of `DContextProvider` (`src/contexts/DContext.tsx`),
|
|
3964
|
+
* used by close buttons, chevrons, alert states, input adornments and the
|
|
3965
|
+
* stepper checkmark.
|
|
3966
|
+
* - Names hard-coded in component JSX or in a prop default, such as
|
|
3967
|
+
* `DDropdown`'s toggle or `DVoucher`'s action buttons.
|
|
3968
|
+
*
|
|
3969
|
+
* Any bundler-level optimisation that narrows lucide-react down to the icons a
|
|
3970
|
+
* widget actually uses must keep this set, or Dynamic UI components break for
|
|
3971
|
+
* reasons the widget author cannot see in their own source. That is why the
|
|
3972
|
+
* list ships in the package as `dist/icons-core.json` and is exported here.
|
|
3973
|
+
*
|
|
3974
|
+
* `src/icons/coreIcons.spec.ts` scans `src/components/**` and fails when an
|
|
3975
|
+
* internally used icon name is missing from this list or absent from
|
|
3976
|
+
* lucide-react, so the two cannot drift apart.
|
|
3977
|
+
*/
|
|
3978
|
+
const CORE_LUCIDE_ICONS = [
|
|
3979
|
+
// iconMap defaults — src/contexts/DContext.tsx
|
|
3980
|
+
'AlertCircle',
|
|
3981
|
+
'AlertTriangle',
|
|
3982
|
+
'Calendar',
|
|
3983
|
+
'Check',
|
|
3984
|
+
'CheckCircle',
|
|
3985
|
+
'ChevronDown',
|
|
3986
|
+
'ChevronLeft',
|
|
3987
|
+
'ChevronRight',
|
|
3988
|
+
'ChevronUp',
|
|
3989
|
+
'Eye',
|
|
3990
|
+
'EyeOff',
|
|
3991
|
+
'Info',
|
|
3992
|
+
'Minus',
|
|
3993
|
+
'Plus',
|
|
3994
|
+
'Search',
|
|
3995
|
+
'Upload',
|
|
3996
|
+
'X',
|
|
3997
|
+
// Hard-coded in component JSX or in a prop default
|
|
3998
|
+
'Circle',
|
|
3999
|
+
'CircleCheck',
|
|
4000
|
+
'CircleCheckBig',
|
|
4001
|
+
'Download',
|
|
4002
|
+
'FileText',
|
|
4003
|
+
'MoreVertical',
|
|
4004
|
+
'Paperclip',
|
|
4005
|
+
'RefreshCw',
|
|
4006
|
+
'Share2',
|
|
4007
|
+
'Trash',
|
|
4008
|
+
];
|
|
4009
|
+
|
|
4010
|
+
export { CORE_LUCIDE_ICONS, DAlert, DAvatar, DBadge, DBox, DBoxFile, DButton, DButtonIcon, DCard$1 as DCard, DCardBody, DCardFooter, DCardHeader, DCarousel$1 as DCarousel, DCarouselSlide, DChip, DCollapse, DConfirmModalContainer, DContext, DContextProvider, DCreditCard, DCurrencyText, DDataStateWrapper, DDatePicker, DDropdown, DErrorBoundary, DIcon, DIconBase, ForwardedDInput as DInput, DInputCheck, ForwardedDInputCounter as DInputCounter, ForwardedDInputCurrency as DInputCurrency, ForwardedDInputMask as DInputMask, ForwardedDInputPassword as DInputPassword, ForwardedDInputPhone as DInputPhone, DInputPin, ForwardedDInputRange as DInputRange, ForwardedDInputSearch as DInputSearch, DInputSelect, DInputSwitch, DLayout$1 as DLayout, DLayoutPane, DListGroup$1 as DListGroup, DListGroupItem, DModal$1 as DModal, DModalBody, DModalFooter, DModalHeader, DOffcanvas$1 as DOffcanvas, DOffcanvasBody, DOffcanvasFooter, DOffcanvasHeader, DOtp, DPaginator, DPasswordStrengthMeter, DPopover, DProgress, DSelect$1 as DSelect, DStepper, DStepper$2 as DStepperDesktop, DStepper$1 as DStepperMobile, DTabContent, DTabs$1 as DTabs, DTimeline, DToast$1 as DToast, DToastContainer, DTooltip, DVoucher, EmptyState, ErrorState, LoadingState, buildUrl, changeQueryString, checkMediaQuery, configureI8n as configureI18n, formatCurrency, getCssVariable, getQueryString, sanitizeHref, subscribeToMediaQuery, useConfirmModal, useCountdown, useDContext, useDPortalContext, useDToast, useDisableBodyScrollEffect, useDisableInputWheel, useFormatCurrency, useInputCurrency, useItemSelection, useMediaBreakpointUpLg, useMediaBreakpointUpMd, useMediaBreakpointUpSm, useMediaBreakpointUpXl, useMediaBreakpointUpXs, useMediaBreakpointUpXxl, useMediaQuery, useOtp, useProvidedRefOrCreate, useScreenshot, useScreenshotDownload, useScreenshotWebShare, useStackState, useTabContext, validatePhoneNumber };
|
|
3603
4011
|
//# sourceMappingURL=index.esm.js.map
|