@dropi/ui 0.1.20 → 0.1.22
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/cjs/dropi-accordion-item.cjs.entry.js +54 -0
- package/dist/cjs/dropi-accordion.cjs.entry.js +5 -39
- package/dist/cjs/dropi-alert-legacy.cjs.entry.js +39 -0
- package/dist/cjs/dropi-alert-modal.cjs.entry.js +80 -24
- package/dist/cjs/dropi-alert.cjs.entry.js +20 -14
- package/dist/cjs/dropi-avatars.cjs.entry.js +3 -3
- package/dist/cjs/dropi-badge-legacy.cjs.entry.js +30 -0
- package/dist/cjs/dropi-badge.cjs.entry.js +4 -4
- package/dist/cjs/dropi-banner-external.cjs.entry.js +25 -9
- package/dist/cjs/dropi-breadcrumb.cjs.entry.js +2 -2
- package/dist/cjs/dropi-button.cjs.entry.js +11 -7
- package/dist/cjs/dropi-card-checkbox.cjs.entry.js +17 -14
- package/dist/cjs/dropi-card-product.cjs.entry.js +42 -23
- package/dist/cjs/dropi-card-section.cjs.entry.js +17 -17
- package/dist/cjs/dropi-carousel.cjs.entry.js +112 -42
- package/dist/cjs/dropi-checkbox-selection-list.cjs.entry.js +17 -15
- package/dist/cjs/dropi-checkbox.cjs.entry.js +6 -6
- package/dist/cjs/dropi-chips.cjs.entry.js +8 -8
- package/dist/cjs/dropi-city-selector.cjs.entry.js +28 -9
- package/dist/cjs/dropi-color-picker.cjs.entry.js +300 -50
- package/dist/cjs/dropi-country-flags.cjs.entry.js +4 -4
- package/dist/cjs/dropi-country-selector.cjs.entry.js +50 -17
- package/dist/cjs/dropi-date-picker-range.cjs.entry.js +8 -8
- package/dist/cjs/dropi-date-picker.cjs.entry.js +53 -35
- package/dist/cjs/dropi-drawer.cjs.entry.js +38 -9
- package/dist/cjs/dropi-dropdown.cjs.entry.js +23 -16
- package/dist/cjs/dropi-empty-state.cjs.entry.js +15 -18
- package/dist/cjs/dropi-favorite-button.cjs.entry.js +5 -5
- package/dist/cjs/dropi-file-upload-progress-bar.cjs.entry.js +57 -32
- package/dist/cjs/dropi-file-upload.cjs.entry.js +210 -57
- package/dist/cjs/dropi-icon.cjs.entry.js +21 -4
- package/dist/cjs/dropi-ilustration-icon.cjs.entry.js +3 -3
- package/dist/cjs/dropi-image-miniature.cjs.entry.js +2 -2
- package/dist/cjs/dropi-image-overlay.cjs.entry.js +4 -3
- package/dist/cjs/dropi-input_3.cjs.entry.js +392 -0
- package/dist/cjs/dropi-languages-selector.cjs.entry.js +10 -6
- package/dist/cjs/dropi-logo.cjs.entry.js +12 -2
- package/dist/cjs/dropi-lottie-loader.cjs.entry.js +5 -5
- package/dist/cjs/dropi-media-player.cjs.entry.js +131 -41
- package/dist/cjs/dropi-modal.cjs.entry.js +46 -20
- package/dist/cjs/dropi-navbar.cjs.entry.js +14 -12
- package/dist/cjs/dropi-otp-send-code.cjs.entry.js +13 -13
- package/dist/cjs/dropi-phone-input.cjs.entry.js +163 -50
- package/dist/cjs/dropi-radio-button.cjs.entry.js +7 -7
- package/dist/cjs/dropi-radio-selection-list.cjs.entry.js +17 -13
- package/dist/cjs/dropi-read-more.cjs.entry.js +8 -4
- package/dist/cjs/dropi-search.cjs.entry.js +52 -38
- package/dist/cjs/dropi-select.cjs.entry.js +102 -55
- package/dist/cjs/dropi-sidebar.cjs.entry.js +61 -50
- package/dist/cjs/dropi-simple-stepper.cjs.entry.js +8 -6
- package/dist/cjs/dropi-skeleton.cjs.entry.js +16 -6
- package/dist/cjs/dropi-steps.cjs.entry.js +6 -4
- package/dist/cjs/dropi-switch.cjs.entry.js +5 -5
- package/dist/cjs/dropi-table.cjs.entry.js +212 -37
- package/dist/cjs/dropi-tabs.cjs.entry.js +13 -11
- package/dist/cjs/dropi-tag-type-product.cjs.entry.js +3 -3
- package/dist/cjs/dropi-text-area.cjs.entry.js +45 -14
- package/dist/cjs/dropi-time-line.cjs.entry.js +3 -3
- package/dist/cjs/dropi-toast.cjs.entry.js +7 -6
- package/dist/cjs/dropi-tooltip-v2.cjs.entry.js +131 -0
- package/dist/cjs/dropi-tooltip.cjs.entry.js +5 -26
- package/dist/cjs/dropi-ui.cjs.js +2 -2
- package/dist/cjs/dropi-vertical-steps.cjs.entry.js +6 -6
- package/dist/cjs/dropi-youtube-lazy-video.cjs.entry.js +3 -3
- package/dist/cjs/{index-DcOH2ZjX.js → index-C8kwDvpf.js} +1044 -14
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +7 -3
- package/dist/collection/components/dropi-accordion/dropi-accordion-item.css +45 -0
- package/dist/collection/components/dropi-accordion/dropi-accordion-item.js +172 -0
- package/dist/collection/components/dropi-accordion/dropi-accordion.css +3 -3
- package/dist/collection/components/dropi-accordion/dropi-accordion.js +7 -129
- package/dist/collection/components/dropi-alert/dropi-alert.css +5 -11
- package/dist/collection/components/dropi-alert/dropi-alert.js +86 -20
- package/dist/collection/components/dropi-alert-legacy/dropi-alert-legacy.css +31 -0
- package/dist/collection/components/dropi-alert-legacy/dropi-alert-legacy.js +128 -0
- package/dist/collection/components/dropi-alert-modal/dropi-alert-modal.css +55 -23
- package/dist/collection/components/dropi-alert-modal/dropi-alert-modal.js +180 -50
- package/dist/collection/components/dropi-avatars/dropi-avatars.js +3 -3
- package/dist/collection/components/dropi-badge/dropi-badge.css +1 -1
- package/dist/collection/components/dropi-badge/dropi-badge.js +3 -4
- package/dist/collection/components/dropi-badge-legacy/dropi-badge-legacy.css +17 -0
- package/dist/collection/components/dropi-badge-legacy/dropi-badge-legacy.js +119 -0
- package/dist/collection/components/dropi-banner-external/dropi-banner-external.js +88 -13
- package/dist/collection/components/dropi-breadcrumb/dropi-breadcrumb.js +1 -1
- package/dist/collection/components/dropi-button/dropi-button.css +17 -17
- package/dist/collection/components/dropi-button/dropi-button.js +31 -7
- package/dist/collection/components/dropi-card-checkbox/dropi-card-checkbox.css +3 -1
- package/dist/collection/components/dropi-card-checkbox/dropi-card-checkbox.js +30 -27
- package/dist/collection/components/dropi-card-product/dropi-card-product.css +179 -102
- package/dist/collection/components/dropi-card-product/dropi-card-product.js +112 -79
- package/dist/collection/components/dropi-card-section/dropi-card-section.css +2 -2
- package/dist/collection/components/dropi-card-section/dropi-card-section.js +25 -25
- package/dist/collection/components/dropi-carousel/dropi-carousel.css +114 -69
- package/dist/collection/components/dropi-carousel/dropi-carousel.js +202 -100
- package/dist/collection/components/dropi-checkbox/dropi-checkbox.js +6 -6
- package/dist/collection/components/dropi-checkbox-selection-list/dropi-checkbox-selection-list.js +42 -20
- package/dist/collection/components/dropi-chips/dropi-chips.js +15 -15
- package/dist/collection/components/dropi-city-selector/dropi-city-selector.css +112 -50
- package/dist/collection/components/dropi-city-selector/dropi-city-selector.js +38 -9
- package/dist/collection/components/dropi-color-picker/dropi-color-picker.css +169 -142
- package/dist/collection/components/dropi-color-picker/dropi-color-picker.js +317 -159
- package/dist/collection/components/dropi-country-flags/dropi-country-flags.js +5 -5
- package/dist/collection/components/dropi-country-selector/dropi-country-selector.css +72 -25
- package/dist/collection/components/dropi-country-selector/dropi-country-selector.js +124 -22
- package/dist/collection/components/dropi-date-picker/dropi-date-picker.css +104 -39
- package/dist/collection/components/dropi-date-picker/dropi-date-picker.js +131 -49
- package/dist/collection/components/dropi-date-picker-range/dropi-date-picker-range.css +8 -8
- package/dist/collection/components/dropi-date-picker-range/dropi-date-picker-range.js +8 -8
- package/dist/collection/components/dropi-drawer/dropi-drawer.css +38 -16
- package/dist/collection/components/dropi-drawer/dropi-drawer.js +107 -18
- package/dist/collection/components/dropi-dropdown/dropi-dropdown.css +1 -1
- package/dist/collection/components/dropi-dropdown/dropi-dropdown.js +52 -27
- package/dist/collection/components/dropi-empty-state/dropi-empty-state.js +37 -54
- package/dist/collection/components/dropi-favorite-button/dropi-favorite-button.js +5 -5
- package/dist/collection/components/dropi-file-upload/dropi-file-upload.css +431 -33
- package/dist/collection/components/dropi-file-upload/dropi-file-upload.js +364 -104
- package/dist/collection/components/dropi-file-upload-progress-bar/dropi-file-upload-progress-bar.css +82 -78
- package/dist/collection/components/dropi-file-upload-progress-bar/dropi-file-upload-progress-bar.js +129 -69
- package/dist/collection/components/dropi-icon/dropi-icon.css +5 -0
- package/dist/collection/components/dropi-icon/dropi-icon.js +19 -2
- package/dist/collection/components/dropi-ilustration-icon/dropi-ilustration-icon.css +3 -3
- package/dist/collection/components/dropi-ilustration-icon/dropi-ilustration-icon.js +1 -1
- package/dist/collection/components/dropi-image-miniature/dropi-image-miniature.js +1 -1
- package/dist/collection/components/dropi-image-overlay/dropi-image-overlay.css +6 -2
- package/dist/collection/components/dropi-image-overlay/dropi-image-overlay.js +5 -4
- package/dist/collection/components/dropi-input/dropi-input.css +1 -1
- package/dist/collection/components/dropi-input/dropi-input.js +155 -82
- package/dist/collection/components/dropi-languages-selector/dropi-languages-selector.css +1 -1
- package/dist/collection/components/dropi-languages-selector/dropi-languages-selector.js +9 -5
- package/dist/collection/components/dropi-logo/dropi-logo.js +12 -1
- package/dist/collection/components/dropi-lottie-loader/dropi-lottie-loader.css +8 -2
- package/dist/collection/components/dropi-lottie-loader/dropi-lottie-loader.js +6 -6
- package/dist/collection/components/dropi-media-player/dropi-media-player.css +263 -70
- package/dist/collection/components/dropi-media-player/dropi-media-player.js +161 -61
- package/dist/collection/components/dropi-modal/dropi-modal.css +14 -4
- package/dist/collection/components/dropi-modal/dropi-modal.js +312 -26
- package/dist/collection/components/dropi-navbar/dropi-navbar.css +7 -7
- package/dist/collection/components/dropi-navbar/dropi-navbar.js +42 -26
- package/dist/collection/components/dropi-otp-send-code/dropi-otp-send-code.css +2 -2
- package/dist/collection/components/dropi-otp-send-code/dropi-otp-send-code.js +13 -13
- package/dist/collection/components/dropi-paginator/dropi-paginator.css +2 -2
- package/dist/collection/components/dropi-paginator/dropi-paginator.js +51 -99
- package/dist/collection/components/dropi-phone-input/dropi-phone-input.css +158 -101
- package/dist/collection/components/dropi-phone-input/dropi-phone-input.js +256 -86
- package/dist/collection/components/dropi-radio-button/dropi-radio-button.js +13 -20
- package/dist/collection/components/dropi-radio-selection-list/dropi-radio-selection-list.css +3 -3
- package/dist/collection/components/dropi-radio-selection-list/dropi-radio-selection-list.js +69 -19
- package/dist/collection/components/dropi-read-more/dropi-read-more.css +5 -8
- package/dist/collection/components/dropi-read-more/dropi-read-more.js +46 -2
- package/dist/collection/components/dropi-search/dropi-search.css +2 -2
- package/dist/collection/components/dropi-search/dropi-search.js +194 -60
- package/dist/collection/components/dropi-select/dropi-select.css +7 -7
- package/dist/collection/components/dropi-select/dropi-select.js +170 -84
- package/dist/collection/components/dropi-sidebar/dropi-sidebar.css +51 -92
- package/dist/collection/components/dropi-sidebar/dropi-sidebar.js +86 -176
- package/dist/collection/components/dropi-simple-stepper/dropi-simple-stepper.css +2 -2
- package/dist/collection/components/dropi-simple-stepper/dropi-simple-stepper.js +29 -7
- package/dist/collection/components/dropi-skeleton/dropi-skeleton.js +40 -10
- package/dist/collection/components/dropi-steps/dropi-steps.css +3 -3
- package/dist/collection/components/dropi-steps/dropi-steps.js +31 -3
- package/dist/collection/components/dropi-switch/dropi-switch.js +5 -5
- package/dist/collection/components/dropi-table/dropi-table.css +505 -45
- package/dist/collection/components/dropi-table/dropi-table.js +690 -50
- package/dist/collection/components/dropi-tabs/dropi-tabs.css +10 -5
- package/dist/collection/components/dropi-tabs/dropi-tabs.js +35 -13
- package/dist/collection/components/dropi-tag/dropi-tag.js +5 -5
- package/dist/collection/components/dropi-tag-type-product/dropi-tag-type-product.css +4 -4
- package/dist/collection/components/dropi-tag-type-product/dropi-tag-type-product.js +1 -1
- package/dist/collection/components/dropi-text-area/dropi-text-area.css +4 -1
- package/dist/collection/components/dropi-text-area/dropi-text-area.js +87 -32
- package/dist/collection/components/dropi-time-line/dropi-time-line.css +2 -2
- package/dist/collection/components/dropi-time-line/dropi-time-line.js +1 -1
- package/dist/collection/components/dropi-toast/dropi-toast.css +2 -2
- package/dist/collection/components/dropi-toast/dropi-toast.js +6 -5
- package/dist/collection/components/dropi-tooltip/dropi-tooltip.css +28 -63
- package/dist/collection/components/dropi-tooltip/dropi-tooltip.js +11 -88
- package/dist/collection/components/dropi-tooltip-v2/dropi-tooltip.css +67 -0
- package/dist/collection/components/dropi-tooltip-v2/dropi-tooltip.js +468 -0
- package/dist/collection/components/dropi-vertical-steps/dropi-vertical-steps.css +3 -3
- package/dist/collection/components/dropi-vertical-steps/dropi-vertical-steps.js +5 -5
- package/dist/collection/components/dropi-youtube-lazy-video/dropi-youtube-lazy-video.css +1 -1
- package/dist/collection/components/dropi-youtube-lazy-video/dropi-youtube-lazy-video.js +1 -1
- package/dist/components/dropi-accordion-item.d.ts +11 -0
- package/dist/components/dropi-accordion-item.js +1 -0
- package/dist/components/dropi-accordion.js +1 -1
- package/dist/components/dropi-alert-legacy.d.ts +11 -0
- package/dist/components/dropi-alert-legacy.js +1 -0
- package/dist/components/dropi-alert-modal.js +1 -1
- package/dist/components/dropi-alert.js +1 -1
- package/dist/components/dropi-avatars.js +1 -1
- package/dist/components/dropi-badge-legacy.d.ts +11 -0
- package/dist/components/dropi-badge-legacy.js +1 -0
- package/dist/components/dropi-badge.js +1 -1
- package/dist/components/dropi-banner-external.js +1 -1
- package/dist/components/dropi-breadcrumb.js +1 -1
- package/dist/components/dropi-button.js +1 -1
- package/dist/components/dropi-card-checkbox.js +1 -1
- package/dist/components/dropi-card-product.js +1 -1
- package/dist/components/dropi-card-section.js +1 -1
- package/dist/components/dropi-carousel.js +1 -1
- package/dist/components/dropi-checkbox-selection-list.js +1 -1
- package/dist/components/dropi-checkbox.js +1 -1
- package/dist/components/dropi-chips.js +1 -1
- package/dist/components/dropi-city-selector.js +1 -1
- package/dist/components/dropi-color-picker.js +1 -1
- package/dist/components/dropi-country-flags.js +1 -1
- package/dist/components/dropi-country-selector.js +1 -1
- package/dist/components/dropi-date-picker-range.js +1 -1
- package/dist/components/dropi-date-picker.js +1 -1
- package/dist/components/dropi-drawer.js +1 -1
- package/dist/components/dropi-dropdown.js +1 -1
- package/dist/components/dropi-empty-state.js +1 -1
- package/dist/components/dropi-favorite-button.js +1 -1
- package/dist/components/dropi-file-upload-progress-bar.js +1 -1
- package/dist/components/dropi-file-upload.js +1 -1
- package/dist/components/dropi-icon.js +1 -1
- package/dist/components/dropi-ilustration-icon.js +1 -1
- package/dist/components/dropi-image-miniature.js +1 -1
- package/dist/components/dropi-image-overlay.js +1 -1
- package/dist/components/dropi-input.js +1 -1
- package/dist/components/dropi-languages-selector.js +1 -1
- package/dist/components/dropi-logo.js +1 -1
- package/dist/components/dropi-lottie-loader.js +1 -1
- package/dist/components/dropi-media-player.js +1 -1
- package/dist/components/dropi-modal.js +1 -1
- package/dist/components/dropi-navbar.js +1 -1
- package/dist/components/dropi-otp-send-code.js +1 -1
- package/dist/components/dropi-paginator.js +1 -1
- package/dist/components/dropi-phone-input.js +1 -1
- package/dist/components/dropi-radio-button.js +1 -1
- package/dist/components/dropi-radio-selection-list.js +1 -1
- package/dist/components/dropi-read-more.js +1 -1
- package/dist/components/dropi-search.js +1 -1
- package/dist/components/dropi-select.js +1 -1
- package/dist/components/dropi-sidebar.js +1 -1
- package/dist/components/dropi-simple-stepper.js +1 -1
- package/dist/components/dropi-skeleton.js +1 -1
- package/dist/components/dropi-steps.js +1 -1
- package/dist/components/dropi-switch.js +1 -1
- package/dist/components/dropi-table.js +1 -1
- package/dist/components/dropi-tabs.js +1 -1
- package/dist/components/dropi-tag-type-product.js +1 -1
- package/dist/components/dropi-tag.js +1 -1
- package/dist/components/dropi-text-area.js +1 -1
- package/dist/components/dropi-time-line.js +1 -1
- package/dist/components/dropi-toast.js +1 -1
- package/dist/components/dropi-tooltip-v2.d.ts +11 -0
- package/dist/components/dropi-tooltip-v2.js +1 -0
- package/dist/components/dropi-tooltip.js +1 -1
- package/dist/components/dropi-vertical-steps.js +1 -1
- package/dist/components/dropi-youtube-lazy-video.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/p-B9R8Apw7.js +1 -0
- package/dist/components/p-B_Ace02i.js +1 -0
- package/dist/components/p-BrjO_JXp.js +1 -0
- package/dist/components/p-BwhxWL4p.js +1 -0
- package/dist/components/p-Bz2jXX3R.js +1 -0
- package/dist/components/p-CV4X3Gm4.js +1 -0
- package/dist/components/p-CV_oz45O.js +1 -0
- package/dist/components/p-D-vQQQNz.js +1 -0
- package/dist/components/p-D13d88W3.js +1 -0
- package/dist/components/p-DGUfr98Z.js +1 -0
- package/dist/components/p-a-hGQrJd.js +1 -0
- package/dist/components/p-o5gyrbbD.js +1 -0
- package/dist/dropi-ui/dropi-ui.css +1 -1
- package/dist/dropi-ui/dropi-ui.esm.js +1 -1
- package/dist/dropi-ui/p-00e5a2de.entry.js +1 -0
- package/dist/dropi-ui/p-0188e07a.entry.js +1 -0
- package/dist/dropi-ui/p-02710049.entry.js +1 -0
- package/dist/dropi-ui/p-17c56074.entry.js +1 -0
- package/dist/dropi-ui/p-18adf694.entry.js +1 -0
- package/dist/dropi-ui/p-1a3619c3.entry.js +1 -0
- package/dist/dropi-ui/p-1d3d6a32.entry.js +1 -0
- package/dist/dropi-ui/p-25640777.entry.js +1 -0
- package/dist/dropi-ui/p-2674d901.entry.js +1 -0
- package/dist/dropi-ui/p-2af538b9.entry.js +1 -0
- package/dist/dropi-ui/p-3013f3b8.entry.js +1 -0
- package/dist/dropi-ui/p-3321ca70.entry.js +1 -0
- package/dist/dropi-ui/p-33d242ec.entry.js +1 -0
- package/dist/dropi-ui/p-39af6478.entry.js +1 -0
- package/dist/dropi-ui/p-3e36c8b8.entry.js +1 -0
- package/dist/dropi-ui/p-3ebc9b7b.entry.js +1 -0
- package/dist/dropi-ui/p-446a481d.entry.js +1 -0
- package/dist/dropi-ui/p-50a5e548.entry.js +1 -0
- package/dist/dropi-ui/p-50e0d44f.entry.js +1 -0
- package/dist/dropi-ui/p-53a7a37d.entry.js +1 -0
- package/dist/dropi-ui/p-5c0bd7c2.entry.js +1 -0
- package/dist/dropi-ui/p-5cee6721.entry.js +1 -0
- package/dist/dropi-ui/p-5fb33ae4.entry.js +1 -0
- package/dist/dropi-ui/p-665ef7ba.entry.js +1 -0
- package/dist/dropi-ui/p-66b80371.entry.js +1 -0
- package/dist/dropi-ui/p-7bfc1c27.entry.js +1 -0
- package/dist/dropi-ui/p-7c0d2edf.entry.js +1 -0
- package/dist/dropi-ui/p-7eb27836.entry.js +1 -0
- package/dist/dropi-ui/p-85444414.entry.js +1 -0
- package/dist/dropi-ui/p-86283e99.entry.js +1 -0
- package/dist/dropi-ui/p-8bf5d8ee.entry.js +1 -0
- package/dist/dropi-ui/p-9032ba00.entry.js +1 -0
- package/dist/dropi-ui/p-9212f544.entry.js +1 -0
- package/dist/dropi-ui/p-92291873.entry.js +1 -0
- package/dist/dropi-ui/p-955e52f8.entry.js +1 -0
- package/dist/dropi-ui/p-976a15e3.entry.js +1 -0
- package/dist/dropi-ui/p-9b037086.entry.js +1 -0
- package/dist/dropi-ui/p-9e0129cc.entry.js +1 -0
- package/dist/dropi-ui/{p-c9ebd31b.entry.js → p-9ffec3f7.entry.js} +1 -1
- package/dist/dropi-ui/p-D5SAM1O2.js +2 -0
- package/dist/dropi-ui/p-a1c93e55.entry.js +1 -0
- package/dist/dropi-ui/p-a232c6a7.entry.js +1 -0
- package/dist/dropi-ui/p-a3c4d677.entry.js +1 -0
- package/dist/dropi-ui/p-a457e8ca.entry.js +1 -0
- package/dist/dropi-ui/p-a4e1df5e.entry.js +1 -0
- package/dist/dropi-ui/p-a822a23e.entry.js +1 -0
- package/dist/dropi-ui/p-a8f24270.entry.js +1 -0
- package/dist/dropi-ui/p-ae35d538.entry.js +1 -0
- package/dist/dropi-ui/p-af8e2157.entry.js +1 -0
- package/dist/dropi-ui/p-b2623a5c.entry.js +1 -0
- package/dist/dropi-ui/p-b3d3c72e.entry.js +1 -0
- package/dist/dropi-ui/p-c3614c4a.entry.js +1 -0
- package/dist/dropi-ui/p-cbf5367e.entry.js +1 -0
- package/dist/dropi-ui/p-cc527d91.entry.js +1 -0
- package/dist/dropi-ui/p-cdde481b.entry.js +1 -0
- package/dist/dropi-ui/p-d42d4ef7.entry.js +1 -0
- package/dist/dropi-ui/{p-b41c8a6c.entry.js → p-db38bf16.entry.js} +1 -1
- package/dist/dropi-ui/p-dd5d8b1b.entry.js +1 -0
- package/dist/dropi-ui/p-e3ad21f8.entry.js +1 -0
- package/dist/dropi-ui/p-e6e766ed.entry.js +1 -0
- package/dist/dropi-ui/p-ec263862.entry.js +1 -0
- package/dist/dropi-ui/p-efc2fc35.entry.js +1 -0
- package/dist/dropi-ui/p-f41cd9b5.entry.js +1 -0
- package/dist/dropi-ui/p-fa3d0267.entry.js +1 -0
- package/dist/esm/dropi-accordion-item.entry.js +52 -0
- package/dist/esm/dropi-accordion.entry.js +5 -39
- package/dist/esm/dropi-alert-legacy.entry.js +37 -0
- package/dist/esm/dropi-alert-modal.entry.js +80 -24
- package/dist/esm/dropi-alert.entry.js +20 -14
- package/dist/esm/dropi-avatars.entry.js +3 -3
- package/dist/esm/dropi-badge-legacy.entry.js +28 -0
- package/dist/esm/dropi-badge.entry.js +4 -4
- package/dist/esm/dropi-banner-external.entry.js +25 -9
- package/dist/esm/dropi-breadcrumb.entry.js +2 -2
- package/dist/esm/dropi-button.entry.js +11 -7
- package/dist/esm/dropi-card-checkbox.entry.js +17 -14
- package/dist/esm/dropi-card-product.entry.js +42 -23
- package/dist/esm/dropi-card-section.entry.js +17 -17
- package/dist/esm/dropi-carousel.entry.js +112 -42
- package/dist/esm/dropi-checkbox-selection-list.entry.js +17 -15
- package/dist/esm/dropi-checkbox.entry.js +6 -6
- package/dist/esm/dropi-chips.entry.js +8 -8
- package/dist/esm/dropi-city-selector.entry.js +28 -9
- package/dist/esm/dropi-color-picker.entry.js +300 -50
- package/dist/esm/dropi-country-flags.entry.js +4 -4
- package/dist/esm/dropi-country-selector.entry.js +50 -17
- package/dist/esm/dropi-date-picker-range.entry.js +8 -8
- package/dist/esm/dropi-date-picker.entry.js +53 -35
- package/dist/esm/dropi-drawer.entry.js +38 -9
- package/dist/esm/dropi-dropdown.entry.js +23 -16
- package/dist/esm/dropi-empty-state.entry.js +15 -18
- package/dist/esm/dropi-favorite-button.entry.js +5 -5
- package/dist/esm/dropi-file-upload-progress-bar.entry.js +57 -32
- package/dist/esm/dropi-file-upload.entry.js +210 -57
- package/dist/esm/dropi-icon.entry.js +21 -4
- package/dist/esm/dropi-ilustration-icon.entry.js +3 -3
- package/dist/esm/dropi-image-miniature.entry.js +2 -2
- package/dist/esm/dropi-image-overlay.entry.js +4 -3
- package/dist/esm/dropi-input_3.entry.js +388 -0
- package/dist/esm/dropi-languages-selector.entry.js +10 -6
- package/dist/esm/dropi-logo.entry.js +12 -2
- package/dist/esm/dropi-lottie-loader.entry.js +5 -5
- package/dist/esm/dropi-media-player.entry.js +131 -41
- package/dist/esm/dropi-modal.entry.js +46 -20
- package/dist/esm/dropi-navbar.entry.js +14 -12
- package/dist/esm/dropi-otp-send-code.entry.js +13 -13
- package/dist/esm/dropi-phone-input.entry.js +163 -50
- package/dist/esm/dropi-radio-button.entry.js +7 -7
- package/dist/esm/dropi-radio-selection-list.entry.js +17 -13
- package/dist/esm/dropi-read-more.entry.js +8 -4
- package/dist/esm/dropi-search.entry.js +52 -38
- package/dist/esm/dropi-select.entry.js +102 -55
- package/dist/esm/dropi-sidebar.entry.js +61 -50
- package/dist/esm/dropi-simple-stepper.entry.js +8 -6
- package/dist/esm/dropi-skeleton.entry.js +16 -6
- package/dist/esm/dropi-steps.entry.js +6 -4
- package/dist/esm/dropi-switch.entry.js +5 -5
- package/dist/esm/dropi-table.entry.js +212 -37
- package/dist/esm/dropi-tabs.entry.js +13 -11
- package/dist/esm/dropi-tag-type-product.entry.js +3 -3
- package/dist/esm/dropi-text-area.entry.js +45 -14
- package/dist/esm/dropi-time-line.entry.js +3 -3
- package/dist/esm/dropi-toast.entry.js +7 -6
- package/dist/esm/dropi-tooltip-v2.entry.js +129 -0
- package/dist/esm/dropi-tooltip.entry.js +5 -26
- package/dist/esm/dropi-ui.js +3 -3
- package/dist/esm/dropi-vertical-steps.entry.js +6 -6
- package/dist/esm/dropi-youtube-lazy-video.entry.js +3 -3
- package/dist/esm/{index-Tbza12Gt.js → index-D5SAM1O2.js} +1044 -15
- package/dist/esm/loader.js +3 -3
- package/dist/types/components/dropi-accordion/dropi-accordion-item.d.ts +24 -0
- package/dist/types/components/dropi-accordion/dropi-accordion.d.ts +3 -23
- package/dist/types/components/dropi-alert/dropi-alert.d.ts +9 -3
- package/dist/types/components/dropi-alert-legacy/dropi-alert-legacy.d.ts +18 -0
- package/dist/types/components/dropi-alert-modal/dropi-alert-modal.d.ts +26 -8
- package/dist/types/components/dropi-badge-legacy/dropi-badge-legacy.d.ts +15 -0
- package/dist/types/components/dropi-banner-external/dropi-banner-external.d.ts +11 -3
- package/dist/types/components/dropi-button/dropi-button.d.ts +4 -2
- package/dist/types/components/dropi-card-checkbox/dropi-card-checkbox.d.ts +8 -7
- package/dist/types/components/dropi-card-product/dropi-card-product.d.ts +19 -15
- package/dist/types/components/dropi-card-section/dropi-card-section.d.ts +5 -5
- package/dist/types/components/dropi-carousel/dropi-carousel.d.ts +31 -27
- package/dist/types/components/dropi-checkbox/dropi-checkbox.d.ts +1 -1
- package/dist/types/components/dropi-checkbox-selection-list/dropi-checkbox-selection-list.d.ts +7 -5
- package/dist/types/components/dropi-chips/dropi-chips.d.ts +4 -4
- package/dist/types/components/dropi-city-selector/dropi-city-selector.d.ts +3 -1
- package/dist/types/components/dropi-color-picker/dropi-color-picker.d.ts +51 -26
- package/dist/types/components/dropi-country-flags/dropi-country-flags.d.ts +1 -1
- package/dist/types/components/dropi-country-selector/dropi-country-selector.d.ts +16 -5
- package/dist/types/components/dropi-date-picker/dropi-date-picker.d.ts +16 -8
- package/dist/types/components/dropi-date-picker-range/dropi-date-picker-range.d.ts +2 -2
- package/dist/types/components/dropi-drawer/dropi-drawer.d.ts +12 -6
- package/dist/types/components/dropi-dropdown/dropi-dropdown.d.ts +12 -6
- package/dist/types/components/dropi-empty-state/dropi-empty-state.d.ts +12 -14
- package/dist/types/components/dropi-favorite-button/dropi-favorite-button.d.ts +1 -1
- package/dist/types/components/dropi-file-upload/dropi-file-upload.d.ts +65 -26
- package/dist/types/components/dropi-file-upload-progress-bar/dropi-file-upload-progress-bar.d.ts +24 -16
- package/dist/types/components/dropi-icon/dropi-icon.d.ts +3 -1
- package/dist/types/components/dropi-image-overlay/dropi-image-overlay.d.ts +1 -1
- package/dist/types/components/dropi-input/dropi-input.d.ts +27 -17
- package/dist/types/components/dropi-languages-selector/dropi-languages-selector.d.ts +1 -1
- package/dist/types/components/dropi-logo/dropi-logo.d.ts +2 -0
- package/dist/types/components/dropi-lottie-loader/dropi-lottie-loader.d.ts +1 -1
- package/dist/types/components/dropi-media-player/dropi-media-player.d.ts +26 -19
- package/dist/types/components/dropi-modal/dropi-modal.d.ts +24 -5
- package/dist/types/components/dropi-navbar/dropi-navbar.d.ts +7 -5
- package/dist/types/components/dropi-otp-send-code/dropi-otp-send-code.d.ts +1 -1
- package/dist/types/components/dropi-paginator/dropi-paginator.d.ts +10 -20
- package/dist/types/components/dropi-phone-input/dropi-phone-input.d.ts +35 -20
- package/dist/types/components/dropi-radio-button/dropi-radio-button.d.ts +2 -2
- package/dist/types/components/dropi-radio-selection-list/dropi-radio-selection-list.d.ts +11 -4
- package/dist/types/components/dropi-read-more/dropi-read-more.d.ts +4 -0
- package/dist/types/components/dropi-search/dropi-search.d.ts +24 -12
- package/dist/types/components/dropi-select/dropi-select.d.ts +26 -15
- package/dist/types/components/dropi-sidebar/dropi-sidebar.d.ts +32 -26
- package/dist/types/components/dropi-simple-stepper/dropi-simple-stepper.d.ts +2 -0
- package/dist/types/components/dropi-skeleton/dropi-skeleton.d.ts +4 -1
- package/dist/types/components/dropi-steps/dropi-steps.d.ts +3 -0
- package/dist/types/components/dropi-switch/dropi-switch.d.ts +1 -1
- package/dist/types/components/dropi-table/dropi-table.d.ts +90 -14
- package/dist/types/components/dropi-tabs/dropi-tabs.d.ts +5 -3
- package/dist/types/components/dropi-text-area/dropi-text-area.d.ts +27 -6
- package/dist/types/components/dropi-tooltip/dropi-tooltip.d.ts +3 -17
- package/dist/types/components/dropi-tooltip-v2/dropi-tooltip.d.ts +59 -0
- package/dist/types/components/dropi-vertical-steps/dropi-vertical-steps.d.ts +1 -1
- package/dist/types/components.d.ts +2182 -1180
- package/dist/types/index.d.ts +1 -0
- package/hydrate/index.d.ts +287 -0
- package/hydrate/index.js +30455 -0
- package/hydrate/index.mjs +30445 -0
- package/hydrate/package.json +12 -0
- package/package.json +33 -5
- package/readme.md +97 -18
- package/scripts/setup.js +310 -29
- package/skills/install-dropi-ui/skill.md +15 -10
- package/dist/cjs/dropi-input.cjs.entry.js +0 -210
- package/dist/cjs/dropi-paginator.cjs.entry.js +0 -91
- package/dist/cjs/dropi-tag.cjs.entry.js +0 -68
- package/dist/components/p-BY_J-4Sm.js +0 -1
- package/dist/components/p-CYCV-5qV.js +0 -1
- package/dist/components/p-D0ZJcRZn.js +0 -1
- package/dist/components/p-DUPOnSiL.js +0 -1
- package/dist/components/p-DUX_WvqW.js +0 -1
- package/dist/components/p-wO1yy0Zr.js +0 -1
- package/dist/dropi-ui/p-053ebb91.entry.js +0 -1
- package/dist/dropi-ui/p-0acd32e6.entry.js +0 -1
- package/dist/dropi-ui/p-0e88a543.entry.js +0 -1
- package/dist/dropi-ui/p-0f2f5f75.entry.js +0 -1
- package/dist/dropi-ui/p-131d87ac.entry.js +0 -1
- package/dist/dropi-ui/p-1af4719d.entry.js +0 -1
- package/dist/dropi-ui/p-1e8f6d4a.entry.js +0 -1
- package/dist/dropi-ui/p-22132b1a.entry.js +0 -1
- package/dist/dropi-ui/p-2c1aaf6f.entry.js +0 -1
- package/dist/dropi-ui/p-2e9b87a9.entry.js +0 -1
- package/dist/dropi-ui/p-3414a414.entry.js +0 -1
- package/dist/dropi-ui/p-34ad54a1.entry.js +0 -1
- package/dist/dropi-ui/p-3531378b.entry.js +0 -1
- package/dist/dropi-ui/p-3983a7aa.entry.js +0 -1
- package/dist/dropi-ui/p-40e91337.entry.js +0 -1
- package/dist/dropi-ui/p-4a8646e5.entry.js +0 -1
- package/dist/dropi-ui/p-4be64bf0.entry.js +0 -1
- package/dist/dropi-ui/p-4ec17510.entry.js +0 -1
- package/dist/dropi-ui/p-5023eef0.entry.js +0 -1
- package/dist/dropi-ui/p-51a97b1a.entry.js +0 -1
- package/dist/dropi-ui/p-52796d84.entry.js +0 -1
- package/dist/dropi-ui/p-53a5bd7b.entry.js +0 -1
- package/dist/dropi-ui/p-5425f941.entry.js +0 -1
- package/dist/dropi-ui/p-58d0bf7a.entry.js +0 -1
- package/dist/dropi-ui/p-59d3bd9b.entry.js +0 -1
- package/dist/dropi-ui/p-5e957631.entry.js +0 -1
- package/dist/dropi-ui/p-64cbf4ea.entry.js +0 -1
- package/dist/dropi-ui/p-68080534.entry.js +0 -1
- package/dist/dropi-ui/p-6da6b97e.entry.js +0 -1
- package/dist/dropi-ui/p-6df57f25.entry.js +0 -1
- package/dist/dropi-ui/p-7c916570.entry.js +0 -1
- package/dist/dropi-ui/p-7e95462a.entry.js +0 -1
- package/dist/dropi-ui/p-80089042.entry.js +0 -1
- package/dist/dropi-ui/p-8768bb11.entry.js +0 -1
- package/dist/dropi-ui/p-896f2900.entry.js +0 -1
- package/dist/dropi-ui/p-89ac1ff2.entry.js +0 -1
- package/dist/dropi-ui/p-8ce79c69.entry.js +0 -1
- package/dist/dropi-ui/p-8e809670.entry.js +0 -1
- package/dist/dropi-ui/p-93b207b7.entry.js +0 -1
- package/dist/dropi-ui/p-983f72ad.entry.js +0 -1
- package/dist/dropi-ui/p-98babb78.entry.js +0 -1
- package/dist/dropi-ui/p-9fc53d50.entry.js +0 -1
- package/dist/dropi-ui/p-Tbza12Gt.js +0 -2
- package/dist/dropi-ui/p-a20705fe.entry.js +0 -1
- package/dist/dropi-ui/p-a72da98f.entry.js +0 -1
- package/dist/dropi-ui/p-a876d57c.entry.js +0 -1
- package/dist/dropi-ui/p-b1b0f938.entry.js +0 -1
- package/dist/dropi-ui/p-b2e176b1.entry.js +0 -1
- package/dist/dropi-ui/p-b890fd5b.entry.js +0 -1
- package/dist/dropi-ui/p-bf5a53ef.entry.js +0 -1
- package/dist/dropi-ui/p-c0677661.entry.js +0 -1
- package/dist/dropi-ui/p-c2562a1c.entry.js +0 -1
- package/dist/dropi-ui/p-c2b5d0fb.entry.js +0 -1
- package/dist/dropi-ui/p-c4d4396b.entry.js +0 -1
- package/dist/dropi-ui/p-cecfb68e.entry.js +0 -1
- package/dist/dropi-ui/p-d0b47e2e.entry.js +0 -1
- package/dist/dropi-ui/p-dcefef51.entry.js +0 -1
- package/dist/dropi-ui/p-e4b7e15f.entry.js +0 -1
- package/dist/dropi-ui/p-e7f4ed25.entry.js +0 -1
- package/dist/dropi-ui/p-f1d69b15.entry.js +0 -1
- package/dist/esm/dropi-input.entry.js +0 -208
- package/dist/esm/dropi-paginator.entry.js +0 -89
- package/dist/esm/dropi-tag.entry.js +0 -66
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dropi/ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.22",
|
|
4
4
|
"description": "Dropi Design System — Web Components for Angular, React and Vue",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -20,13 +20,24 @@
|
|
|
20
20
|
"types": "./loader/index.d.ts"
|
|
21
21
|
},
|
|
22
22
|
"./dist/components/*.js": {
|
|
23
|
+
"types": "./dist/components/*.d.ts",
|
|
23
24
|
"import": "./dist/components/*.js",
|
|
24
25
|
"require": "./dist/components/*.js"
|
|
25
26
|
},
|
|
26
|
-
"./dist/dropi-ui
|
|
27
|
+
"./dist/dropi-ui/*.js": {
|
|
28
|
+
"import": "./dist/dropi-ui/*.js",
|
|
29
|
+
"require": "./dist/dropi-ui/*.js"
|
|
30
|
+
},
|
|
31
|
+
"./dist/dropi-ui/dropi-ui.css": "./dist/dropi-ui/dropi-ui.css",
|
|
32
|
+
"./hydrate": {
|
|
33
|
+
"import": "./hydrate/index.mjs",
|
|
34
|
+
"require": "./hydrate/index.js",
|
|
35
|
+
"types": "./hydrate/index.d.ts"
|
|
36
|
+
}
|
|
27
37
|
},
|
|
28
38
|
"files": [
|
|
29
39
|
"dist/",
|
|
40
|
+
"hydrate/",
|
|
30
41
|
"loader/",
|
|
31
42
|
"assets/",
|
|
32
43
|
"skills/",
|
|
@@ -35,22 +46,39 @@
|
|
|
35
46
|
"bin": {
|
|
36
47
|
"@dropi/ui": "scripts/setup.js"
|
|
37
48
|
},
|
|
49
|
+
"workspaces": [
|
|
50
|
+
"packages/*"
|
|
51
|
+
],
|
|
38
52
|
"scripts": {
|
|
39
|
-
"build": "stencil build &&
|
|
53
|
+
"build": "stencil build && npm run build --workspace=packages/react && npm run build --workspace=packages/angular",
|
|
54
|
+
"clear:cache": "node -e \"const fs=require('fs');['.stencil','node_modules/.cache'].forEach(p=>{try{fs.rmSync(p,{recursive:true,force:true})}catch(e){}})\"",
|
|
55
|
+
"publish:react": "npm run build && npm publish --workspace=packages/react",
|
|
56
|
+
"dev": "stencil build --dev --watch & npm run watch --workspace=packages/react",
|
|
40
57
|
"start": "stencil build --dev --watch --serve",
|
|
41
58
|
"test": "stencil-test",
|
|
42
59
|
"test:watch": "stencil-test --watch",
|
|
43
60
|
"generate": "stencil generate",
|
|
44
|
-
"postinstall": "node scripts/postinstall.js"
|
|
61
|
+
"postinstall": "node scripts/postinstall.js",
|
|
62
|
+
"storybook": "stencil build && storybook dev -p 6006",
|
|
63
|
+
"storybook:build": "stencil build && storybook build -o storybook-static",
|
|
64
|
+
"storybook:dev": "storybook dev -p 6006"
|
|
45
65
|
},
|
|
46
66
|
"devDependencies": {
|
|
47
67
|
"@stencil/angular-output-target": "^1.3.0",
|
|
48
68
|
"@stencil/core": "^4.27.1",
|
|
49
|
-
"@stencil/react-output-target": "^1.
|
|
69
|
+
"@stencil/react-output-target": "^1.5.0",
|
|
50
70
|
"@stencil/vitest": "^1.8.3",
|
|
51
71
|
"@stencil/vue-output-target": "^0.13.1",
|
|
72
|
+
"@storybook/addon-docs": "^8.6.18",
|
|
73
|
+
"@storybook/addon-essentials": "^8.6.18",
|
|
74
|
+
"@storybook/blocks": "^8.6.18",
|
|
75
|
+
"@storybook/web-components": "^8.6.18",
|
|
76
|
+
"@storybook/web-components-vite": "^8.6.18",
|
|
52
77
|
"@types/node": "^22.13.5",
|
|
53
78
|
"@vitest/browser-playwright": "^4.0.0",
|
|
79
|
+
"lit": "^3.3.2",
|
|
80
|
+
"lit-html": "^3.3.2",
|
|
81
|
+
"storybook": "^8.6.18",
|
|
54
82
|
"vitest": "^4.0.0"
|
|
55
83
|
},
|
|
56
84
|
"license": "MIT"
|
package/readme.md
CHANGED
|
@@ -10,18 +10,13 @@ Genera componentes reutilizables para Angular, React y Vue desde una única base
|
|
|
10
10
|
|
|
11
11
|
## ⚡ Quick Start (Recomendado)
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Ejecuta este comando en la raíz de tu proyecto:
|
|
14
14
|
|
|
15
|
-
### Con IA (Claude / Cursor / Windsurf)
|
|
16
|
-
Si usas un asistente de IA, simplemente dile:
|
|
17
|
-
> **`/install-dropi-ui`** o **"configura dropi-ui en este proyecto"**
|
|
18
|
-
|
|
19
|
-
### Manual (Terminal)
|
|
20
|
-
Ejecuta el siguiente comando en la raíz de tu proyecto:
|
|
21
15
|
```bash
|
|
22
|
-
npx @dropi/ui
|
|
16
|
+
npx @dropi/create-dropi-ui
|
|
23
17
|
```
|
|
24
|
-
|
|
18
|
+
|
|
19
|
+
Detecta tu framework (Angular, React, Next.js), instala las dependencias correctas e inyecta la configuración automáticamente.
|
|
25
20
|
|
|
26
21
|
---
|
|
27
22
|
|
|
@@ -32,25 +27,57 @@ Si prefieres realizar la configuración paso a paso, consulta la [Guía de Integ
|
|
|
32
27
|
### 1. Paquetes
|
|
33
28
|
| Framework | Paquete a instalar |
|
|
34
29
|
|---|---|
|
|
30
|
+
| Angular | `npm install @dropi/ui @dropi/ui-angular` |
|
|
35
31
|
| React | `npm install @dropi/ui @dropi/ui-react` |
|
|
36
|
-
|
|
|
32
|
+
| Next.js SSR | `npm install @dropi/ui @dropi/ui-react && npm install --save-dev @stencil/ssr` |
|
|
37
33
|
|
|
38
34
|
### 2. Estilos e Iconos
|
|
39
|
-
- **CSS**: Importar `@dropi/ui/dist/dropi-ui/dropi-ui.css` en tu entry point.
|
|
40
|
-
- **
|
|
35
|
+
- **CSS**: Importar `@dropi/ui/dist/dropi-ui/dropi-ui.css` en tu entry point global.
|
|
36
|
+
- **Registro de componentes**: No hace falta llamar `defineCustomElements()`. Cada wrapper de `@dropi/ui-react` y `@dropi/ui-angular` registra su custom element automáticamente.
|
|
37
|
+
- **SSR (Next.js)**: Configurar `next.config.ts` con `withStencil()` e importar desde `@dropi/ui-react/next` en Server Components.
|
|
41
38
|
- **Iconos**: El componente `<dropi-icon>` requiere que el sprite SVG esté en `/assets/icons/symbol/svg/sprite.css.svg`.
|
|
42
39
|
|
|
43
40
|
---
|
|
44
41
|
|
|
45
|
-
##
|
|
42
|
+
## 🚀 Soporte para Next.js (SSR)
|
|
43
|
+
|
|
44
|
+
Para habilitar el **Server Side Rendering (SSR)** y evitar parpadeos (flashes) de contenido, sigue estos pasos:
|
|
45
|
+
|
|
46
|
+
### 1. Configuración de Next.js
|
|
47
|
+
Envuelve tu configuración de Next.js en el plugin `withStencil`:
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
// next.config.ts
|
|
51
|
+
import withStencil from "@stencil/ssr/next";
|
|
52
|
+
|
|
53
|
+
const nextConfig = { ... };
|
|
46
54
|
|
|
47
|
-
|
|
55
|
+
export default withStencil({
|
|
56
|
+
from: "@dropi/ui-react",
|
|
57
|
+
module: import("@dropi/ui-react/next"),
|
|
58
|
+
hydrateModule: import("@dropi/ui/hydrate"),
|
|
59
|
+
})(nextConfig);
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 2. Uso en Componentes (Server Components)
|
|
63
|
+
Para que Next.js pre-renderice los componentes con **Declarative Shadow DOM**, usa el entry point `/next`:
|
|
48
64
|
|
|
49
65
|
```tsx
|
|
50
|
-
//
|
|
51
|
-
|
|
66
|
+
// ✅ Correcto: Se renderiza en el servidor
|
|
67
|
+
import { DropiButton } from "@dropi/ui-react/next";
|
|
68
|
+
|
|
69
|
+
// ❌ Incorrecto: Provoca parpadeo y requiere "use client"
|
|
70
|
+
import { DropiButton } from "@dropi/ui-react";
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Cómo pasar props
|
|
76
|
+
|
|
77
|
+
Hay **dos formas válidas**, ambas funcionan:
|
|
52
78
|
|
|
53
|
-
|
|
79
|
+
### Forma 1 — Props individuales (React / Vanilla)
|
|
80
|
+
```tsx
|
|
54
81
|
<DropiSelect
|
|
55
82
|
label="País"
|
|
56
83
|
placeholder="Seleccionar"
|
|
@@ -59,7 +86,21 @@ Cada prop se pasa **directamente en el JSX**, una por una. No existe un prop con
|
|
|
59
86
|
/>
|
|
60
87
|
```
|
|
61
88
|
|
|
62
|
-
|
|
89
|
+
### Forma 2 — Objeto de compatibilidad Angular (equivalente al core)
|
|
90
|
+
Los componentes principales aceptan un prop-objeto que replica la API del `@Input()` del core Angular:
|
|
91
|
+
|
|
92
|
+
| Componente | Prop objeto | Equivale al `@Input()` Angular |
|
|
93
|
+
|---|---|---|
|
|
94
|
+
| `dropi-select` | `[selectProperties]="selectProperties"` | `SelectProperties` |
|
|
95
|
+
| `dropi-input` | `[inputProperties]="inputProperties"` | `InputProperties` |
|
|
96
|
+
| `dropi-text-area` | `[textAreaProperties]="textAreaProperties"` | `TextAreaProperties` |
|
|
97
|
+
| `dropi-alert-modal` | `[params]="params"` | `ModalParams` |
|
|
98
|
+
|
|
99
|
+
```html
|
|
100
|
+
<!-- Angular — forma idéntica al core -->
|
|
101
|
+
<dropi-select [selectProperties]="selectProperties" (onChangeSelect)="onChange($event)" />
|
|
102
|
+
<dropi-alert-modal [visible]="visible" [params]="params" (primaryButtonEvent)="onPrimary($event)" />
|
|
103
|
+
```
|
|
63
104
|
|
|
64
105
|
> **Intellisense en VSCode:** si al hacer hover sobre un componente no aparecen las props, significa que `@dropi/ui-react` necesita ser compilado (`npm run build` en la carpeta `dropi-ui-react`). Después de cualquier cambio en la librería siempre hay que correr el build.
|
|
65
106
|
|
|
@@ -609,6 +650,44 @@ Burbuja de información al hover.
|
|
|
609
650
|
|
|
610
651
|
---
|
|
611
652
|
|
|
653
|
+
### `<dropi-table>`
|
|
654
|
+
|
|
655
|
+
Tabla de datos con paginación local/backend, ordenación, búsqueda y checkbox de selección.
|
|
656
|
+
|
|
657
|
+
> ⚠️ Las filas van en formato **TypedField** (no objetos planos): `{ name: { type: 'text', value: 'Ana' } }`
|
|
658
|
+
|
|
659
|
+
**Props principales**
|
|
660
|
+
|
|
661
|
+
| Prop | Tipo | Default | Descripción |
|
|
662
|
+
|---|---|---|---|
|
|
663
|
+
| `headers` | `DropiTableColumn[]` | `[]` | Columnas `{ key, label, sortable }` |
|
|
664
|
+
| `data` | `DropiTableRow[]` | `[]` | Filas en formato TypedField |
|
|
665
|
+
| `dropiTableConfiguration` | `DropiTableConfiguration` | `null` | Config: paginación, búsqueda, acciones |
|
|
666
|
+
| `loading` | `boolean` | `false` | Indicador de carga |
|
|
667
|
+
|
|
668
|
+
**Eventos**
|
|
669
|
+
|
|
670
|
+
| Evento | `e.detail` | Cuándo |
|
|
671
|
+
|---|---|---|
|
|
672
|
+
| `rowsSelected` | `DropiTableRow[]` | Checkbox cambia selección |
|
|
673
|
+
| `onSortChange` | `{ column, asc }` | Click en columna ordenable |
|
|
674
|
+
| `onPageChange` | `number` | Cambio de página (backend) |
|
|
675
|
+
| `actionClicked` | `{ row, action }` | Click en acción de fila |
|
|
676
|
+
|
|
677
|
+
**Ejemplo Angular**
|
|
678
|
+
```html
|
|
679
|
+
<dropi-table
|
|
680
|
+
[headers]="headers"
|
|
681
|
+
[data]="data"
|
|
682
|
+
[dropiTableConfiguration]="{ backendPagination: false, showPaginator: true, pageSizeConfiguration: [5, 10, 25] }"
|
|
683
|
+
[loading]="loading"
|
|
684
|
+
(onSortChange)="onSort($event)"
|
|
685
|
+
(rowsSelected)="onSelect($event)"
|
|
686
|
+
/>
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
---
|
|
690
|
+
|
|
612
691
|
### `<dropi-modal>`
|
|
613
692
|
|
|
614
693
|
Ventana de diálogo con overlays.
|
package/scripts/setup.js
CHANGED
|
@@ -52,19 +52,36 @@ async function run() {
|
|
|
52
52
|
|
|
53
53
|
// 1. Detección de Framework
|
|
54
54
|
const hasDep = (name) => !!(pkg.dependencies?.[name] || pkg.devDependencies?.[name]);
|
|
55
|
+
const isNextJs = hasDep('next');
|
|
55
56
|
const isAngular = hasDep('@angular/core');
|
|
56
|
-
const isReact = hasDep('react');
|
|
57
|
+
const isReact = hasDep('react') && !isNextJs; // React puro (Vite/CRA), no Next.js
|
|
57
58
|
const isVue = hasDep('vue');
|
|
58
|
-
const framework = isAngular ? 'Angular' : isReact ? 'React' : isVue ? 'Vue' : 'Desconocido';
|
|
59
|
+
const framework = isAngular ? 'Angular' : isNextJs ? 'Next.js' : isReact ? 'React' : isVue ? 'Vue' : 'Desconocido';
|
|
59
60
|
|
|
60
61
|
log(`Entorno detectado: ${framework}`);
|
|
61
62
|
|
|
63
|
+
// Next.js — detectar si usa SSR
|
|
64
|
+
let isNextJsSsr = false;
|
|
65
|
+
if (isNextJs) {
|
|
66
|
+
const nextConfigFiles = ['next.config.ts', 'next.config.js', 'next.config.mjs'];
|
|
67
|
+
const hasStaticExport = nextConfigFiles.some(f => {
|
|
68
|
+
const p = path.join(projectRoot, f);
|
|
69
|
+
if (!fs.existsSync(p)) return false;
|
|
70
|
+
const c = fs.readFileSync(p, 'utf8');
|
|
71
|
+
return c.includes('output') && c.includes('export');
|
|
72
|
+
});
|
|
73
|
+
const hasAppRouter = fs.existsSync(path.join(projectRoot, 'app')) || fs.existsSync(path.join(projectRoot, 'src', 'app'));
|
|
74
|
+
const hasPagesRouter = fs.existsSync(path.join(projectRoot, 'pages')) || fs.existsSync(path.join(projectRoot, 'src', 'pages'));
|
|
75
|
+
isNextJsSsr = (hasAppRouter || hasPagesRouter) && !hasStaticExport;
|
|
76
|
+
log(`Next.js SSR: ${isNextJsSsr ? 'activo' : 'static export (sin SSR)'}`);
|
|
77
|
+
}
|
|
78
|
+
|
|
62
79
|
// 2. Instalación de Dependencias
|
|
63
80
|
const pkgMgr = getPkgMgr();
|
|
64
81
|
const installCmd = pkgMgr === 'yarn' ? 'yarn add' : pkgMgr === 'pnpm' ? 'pnpm add' : 'npm install';
|
|
65
82
|
|
|
66
|
-
if (isReact && !hasDep('@dropi/ui-react')) {
|
|
67
|
-
log(`
|
|
83
|
+
if ((isReact || isNextJs) && !hasDep('@dropi/ui-react')) {
|
|
84
|
+
log(`Instalando @dropi/ui-react...`);
|
|
68
85
|
try {
|
|
69
86
|
execSync(`${installCmd} @dropi/ui-react`, { stdio: 'inherit', cwd: projectRoot });
|
|
70
87
|
log('@dropi/ui-react instalado.', 'ok');
|
|
@@ -73,10 +90,178 @@ async function run() {
|
|
|
73
90
|
}
|
|
74
91
|
}
|
|
75
92
|
|
|
93
|
+
if (isNextJsSsr && !hasDep('@stencil/ssr')) {
|
|
94
|
+
log('Next.js SSR → Instalando @stencil/ssr...');
|
|
95
|
+
try {
|
|
96
|
+
execSync(`${installCmd} --save-dev @stencil/ssr`, { stdio: 'inherit', cwd: projectRoot });
|
|
97
|
+
log('@stencil/ssr instalado.', 'ok');
|
|
98
|
+
} catch (e) {
|
|
99
|
+
log('Error instalando @stencil/ssr. Intenta instalarlo manualmente.', 'warn');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
76
103
|
// 3. Estilos Globales
|
|
77
104
|
const cssImport = "import '@dropi/ui/dist/dropi-ui/dropi-ui.css';";
|
|
78
105
|
let styleTarget = null;
|
|
79
106
|
|
|
107
|
+
// ── Next.js: next.config + globals.css ──────────────────────────────────────
|
|
108
|
+
if (isNextJs) {
|
|
109
|
+
// 3a. next.config — agregar withStencil + transpilePackages
|
|
110
|
+
const nextConfigFiles = ['next.config.ts', 'next.config.js', 'next.config.mjs'];
|
|
111
|
+
const nextConfigFile = nextConfigFiles.find(f => fs.existsSync(path.join(projectRoot, f)));
|
|
112
|
+
|
|
113
|
+
if (isNextJsSsr) {
|
|
114
|
+
if (nextConfigFile) {
|
|
115
|
+
const configPath = path.join(projectRoot, nextConfigFile);
|
|
116
|
+
let cfg = fs.readFileSync(configPath, 'utf8');
|
|
117
|
+
let cfgChanged = false;
|
|
118
|
+
|
|
119
|
+
if (!cfg.includes('withStencil')) {
|
|
120
|
+
// Agregar import de withStencil después del último import existente
|
|
121
|
+
const importLine = "import withStencil from '@stencil/ssr/next';\n";
|
|
122
|
+
const lastImport = [...cfg.matchAll(/^import .+;?\s*$/gm)].pop();
|
|
123
|
+
if (lastImport) {
|
|
124
|
+
const pos = lastImport.index + lastImport[0].length;
|
|
125
|
+
cfg = cfg.slice(0, pos) + '\n' + importLine + cfg.slice(pos);
|
|
126
|
+
} else {
|
|
127
|
+
cfg = importLine + cfg;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Envolver el export default con withStencil
|
|
131
|
+
cfg = cfg.replace(
|
|
132
|
+
/export default (nextConfig|defineNextConfig\([^)]*\));?/,
|
|
133
|
+
`export default withStencil({\n from: '@dropi/ui-react',\n module: import('@dropi/ui-react/next'),\n hydrateModule: import('@dropi/ui/hydrate'),\n})($1);`
|
|
134
|
+
);
|
|
135
|
+
cfgChanged = true;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Agregar transpilePackages si no está
|
|
139
|
+
if (!cfg.includes('transpilePackages')) {
|
|
140
|
+
cfg = cfg.replace(
|
|
141
|
+
/(const nextConfig[^=]*=\s*\{)/,
|
|
142
|
+
`$1\n transpilePackages: ['@dropi/ui-react', '@dropi/ui'],`
|
|
143
|
+
);
|
|
144
|
+
cfgChanged = true;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (cfgChanged) {
|
|
148
|
+
fs.writeFileSync(configPath, cfg);
|
|
149
|
+
log(`${nextConfigFile}: configuración SSR aplicada.`, 'ok');
|
|
150
|
+
} else {
|
|
151
|
+
log(`${nextConfigFile}: ya configurado, omitiendo.`, 'info');
|
|
152
|
+
}
|
|
153
|
+
} else {
|
|
154
|
+
// Crear next.config.ts desde cero
|
|
155
|
+
const newCfg = `import type { NextConfig } from 'next';
|
|
156
|
+
import withStencil from '@stencil/ssr/next';
|
|
157
|
+
|
|
158
|
+
const nextConfig: NextConfig = {
|
|
159
|
+
transpilePackages: ['@dropi/ui-react', '@dropi/ui'],
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
export default withStencil({
|
|
163
|
+
from: '@dropi/ui-react',
|
|
164
|
+
module: import('@dropi/ui-react/next'),
|
|
165
|
+
hydrateModule: import('@dropi/ui/hydrate'),
|
|
166
|
+
})(nextConfig);
|
|
167
|
+
`;
|
|
168
|
+
fs.writeFileSync(path.join(projectRoot, 'next.config.ts'), newCfg);
|
|
169
|
+
log('next.config.ts creado con configuración SSR.', 'ok');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// 3b. globals.css — agregar import + CSS resets SSR
|
|
174
|
+
const cssSsrResets = `
|
|
175
|
+
/* dropi-ui.css sets *{text-align:left} — reset shadow DOM hosts */
|
|
176
|
+
[class*="dropi-"], dropi-button, dropi-badge, dropi-icon, dropi-avatar,
|
|
177
|
+
dropi-input, dropi-select, dropi-modal, dropi-toast, dropi-table,
|
|
178
|
+
dropi-skeleton, dropi-chip, dropi-tag, dropi-checkbox, dropi-radio,
|
|
179
|
+
dropi-dropdown, dropi-card-product, dropi-alert, dropi-banner-external,
|
|
180
|
+
dropi-paginator, dropi-date-picker-range, dropi-file-upload,
|
|
181
|
+
dropi-otp-send-code, dropi-phone-input, dropi-media-player,
|
|
182
|
+
dropi-color-picker, dropi-city-selector, dropi-languages-selector,
|
|
183
|
+
dropi-ilustration-icon, dropi-empty-state, dropi-favorite-button,
|
|
184
|
+
dropi-logo, dropi-avatars {
|
|
185
|
+
text-align: initial;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/* Prevent invisible flash before hydration completes */
|
|
189
|
+
[class*="dropi-"]:not(.hydrated),
|
|
190
|
+
dropi-banner-external:not(.hydrated),
|
|
191
|
+
dropi-logo:not(.hydrated),
|
|
192
|
+
dropi-carousel:not(.hydrated) {
|
|
193
|
+
visibility: inherit !important;
|
|
194
|
+
opacity: 1 !important;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/* Reserve space for icons before hydration */
|
|
198
|
+
dropi-icon:not(.hydrated) {
|
|
199
|
+
width: 24px;
|
|
200
|
+
height: 24px;
|
|
201
|
+
display: inline-flex;
|
|
202
|
+
}
|
|
203
|
+
`;
|
|
204
|
+
const globalsCssCandidates = [
|
|
205
|
+
path.join(projectRoot, 'src', 'app', 'globals.css'),
|
|
206
|
+
path.join(projectRoot, 'app', 'globals.css'),
|
|
207
|
+
path.join(projectRoot, 'styles', 'globals.css'),
|
|
208
|
+
path.join(projectRoot, 'src', 'styles', 'globals.css'),
|
|
209
|
+
];
|
|
210
|
+
const globalsCssPath = globalsCssCandidates.find(f => fs.existsSync(f));
|
|
211
|
+
|
|
212
|
+
if (globalsCssPath) {
|
|
213
|
+
let css = fs.readFileSync(globalsCssPath, 'utf8');
|
|
214
|
+
let cssChanged = false;
|
|
215
|
+
if (!css.includes('dropi-ui.css')) {
|
|
216
|
+
css = `@import '@dropi/ui/dist/dropi-ui/dropi-ui.css';\n` + css;
|
|
217
|
+
cssChanged = true;
|
|
218
|
+
}
|
|
219
|
+
if (!css.includes('text-align: initial')) {
|
|
220
|
+
css += cssSsrResets;
|
|
221
|
+
cssChanged = true;
|
|
222
|
+
}
|
|
223
|
+
if (cssChanged) {
|
|
224
|
+
fs.writeFileSync(globalsCssPath, css);
|
|
225
|
+
log(`${path.relative(projectRoot, globalsCssPath)}: estilos y resets SSR aplicados.`, 'ok');
|
|
226
|
+
} else {
|
|
227
|
+
log(`${path.relative(projectRoot, globalsCssPath)}: ya configurado, omitiendo.`, 'info');
|
|
228
|
+
}
|
|
229
|
+
} else {
|
|
230
|
+
// Crear globals.css en src/app/ o app/
|
|
231
|
+
const appDir = fs.existsSync(path.join(projectRoot, 'src', 'app'))
|
|
232
|
+
? path.join(projectRoot, 'src', 'app')
|
|
233
|
+
: path.join(projectRoot, 'app');
|
|
234
|
+
if (fs.existsSync(appDir)) {
|
|
235
|
+
const newCss = `@import '@dropi/ui/dist/dropi-ui/dropi-ui.css';\n${cssSsrResets}`;
|
|
236
|
+
const newCssPath = path.join(appDir, 'globals.css');
|
|
237
|
+
fs.writeFileSync(newCssPath, newCss);
|
|
238
|
+
log('globals.css creado con estilos y resets SSR.', 'ok');
|
|
239
|
+
log('Recuerda importarlo en tu layout.tsx: import "./globals.css"', 'warn');
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// 3c. Lottie en layout.tsx (App Router) o _document.tsx (Pages Router)
|
|
244
|
+
const layoutCandidates = [
|
|
245
|
+
path.join(projectRoot, 'src', 'app', 'layout.tsx'),
|
|
246
|
+
path.join(projectRoot, 'app', 'layout.tsx'),
|
|
247
|
+
path.join(projectRoot, 'src', 'app', 'layout.jsx'),
|
|
248
|
+
path.join(projectRoot, 'app', 'layout.jsx'),
|
|
249
|
+
];
|
|
250
|
+
const layoutPath = layoutCandidates.find(f => fs.existsSync(f));
|
|
251
|
+
if (layoutPath) {
|
|
252
|
+
let layout = fs.readFileSync(layoutPath, 'utf8');
|
|
253
|
+
if (!layout.includes('lottie-player.js')) {
|
|
254
|
+
// Agregar script antes del cierre de </body>
|
|
255
|
+
layout = layout.replace(
|
|
256
|
+
/(<\/body>)/,
|
|
257
|
+
` {/* lottie-player: needed by DropiAlertModal animations */}\n <script src="https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js" async />\n $1`
|
|
258
|
+
);
|
|
259
|
+
fs.writeFileSync(layoutPath, layout);
|
|
260
|
+
log(`${path.relative(projectRoot, layoutPath)}: Lottie script agregado.`, 'ok');
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
80
265
|
if (isAngular) {
|
|
81
266
|
const scssPath = path.join(projectRoot, 'src', 'styles.scss');
|
|
82
267
|
if (fs.existsSync(scssPath)) {
|
|
@@ -94,21 +279,31 @@ async function run() {
|
|
|
94
279
|
|
|
95
280
|
if (styleTarget) {
|
|
96
281
|
let content = fs.readFileSync(path.join(projectRoot, styleTarget), 'utf8');
|
|
282
|
+
let changed = false;
|
|
283
|
+
|
|
284
|
+
// Migrar loader antiguo → nuevo bootstrap (si tiene defineCustomElements del loader)
|
|
285
|
+
if (content.includes("from '@dropi/ui/loader'") || content.includes('from "@dropi/ui/loader"')) {
|
|
286
|
+
content = content
|
|
287
|
+
.replace(/\/\/\s*@ts-ignore[^\n]*\n/g, '')
|
|
288
|
+
.replace(/import\s+\{[^}]*defineCustomElements[^}]*\}\s+from\s+['"]@dropi\/ui\/loader['"];?\n?/g, '')
|
|
289
|
+
.replace(/defineCustomElements\([^)]*\);?\n?/g, '');
|
|
290
|
+
log(`Loader antiguo eliminado de ${styleTarget}`, 'ok');
|
|
291
|
+
changed = true;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// Agregar bootstrap side-effect si no está
|
|
295
|
+
if (!content.includes('dropi-ui.esm.js')) {
|
|
296
|
+
content = `// @ts-ignore\nimport '@dropi/ui/dist/dropi-ui/dropi-ui.esm.js';\n` + content;
|
|
297
|
+
changed = true;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// Agregar CSS si no está
|
|
97
301
|
if (!content.includes('dropi-ui.css')) {
|
|
98
302
|
content = `${cssImport}\n` + content;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
content = `import { defineCustomElements } from '@dropi/ui/loader';\n` + content;
|
|
104
|
-
if (content.includes('createRoot')) {
|
|
105
|
-
content = content.replace('createRoot', 'defineCustomElements();\ncreateRoot');
|
|
106
|
-
} else {
|
|
107
|
-
content += `\ndefineCustomElements();\n`;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
303
|
+
changed = true;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if (changed) {
|
|
112
307
|
fs.writeFileSync(path.join(projectRoot, styleTarget), content);
|
|
113
308
|
log(`Configuración aplicada en ${styleTarget}`, 'ok');
|
|
114
309
|
}
|
|
@@ -151,10 +346,10 @@ async function run() {
|
|
|
151
346
|
// Archivos Lottie
|
|
152
347
|
setupAsset('assets/lottie-files', 'assets/lottie-files');
|
|
153
348
|
|
|
154
|
-
// 6. Lottie Player Script (index.html)
|
|
349
|
+
// 6. Lottie Player Script (index.html — solo React/Vue/Angular, Next.js lo maneja en layout.tsx arriba)
|
|
155
350
|
const lottieScript = '<script src="https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js"></script>';
|
|
156
351
|
const htmlFiles = ['index.html', 'src/index.html', 'public/index.html'];
|
|
157
|
-
const htmlFile = htmlFiles.find(f => fs.existsSync(path.join(projectRoot, f)));
|
|
352
|
+
const htmlFile = !isNextJs && htmlFiles.find(f => fs.existsSync(path.join(projectRoot, f)));
|
|
158
353
|
|
|
159
354
|
if (htmlFile) {
|
|
160
355
|
const htmlPath = path.join(projectRoot, htmlFile);
|
|
@@ -170,16 +365,102 @@ async function run() {
|
|
|
170
365
|
}
|
|
171
366
|
}
|
|
172
367
|
|
|
173
|
-
// 7. Vite Patch (
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
368
|
+
// 7. Vite Patch (React/Vue — no Next.js)
|
|
369
|
+
if ((isReact || isVue) && !isNextJs) {
|
|
370
|
+
const viteFiles = ['vite.config.ts', 'vite.config.js'];
|
|
371
|
+
const viteFile = viteFiles.find(f => fs.existsSync(path.join(projectRoot, f)));
|
|
372
|
+
if (viteFile) {
|
|
373
|
+
const isTs = viteFile.endsWith('.ts');
|
|
374
|
+
const existing = fs.readFileSync(path.join(projectRoot, viteFile), 'utf8');
|
|
375
|
+
const alreadyConfigured = existing.includes('dropi-components-stub') || existing.includes('dropiWatchPlugin');
|
|
376
|
+
|
|
377
|
+
if (!alreadyConfigured) {
|
|
378
|
+
// Detectar el import del framework (react o vue)
|
|
379
|
+
const frameworkImport = isReact
|
|
380
|
+
? "import react from \"@vitejs/plugin-react\";"
|
|
381
|
+
: "import vue from \"@vitejs/plugin-vue\";";
|
|
382
|
+
const frameworkPlugin = isReact ? 'react()' : 'vue()';
|
|
383
|
+
|
|
384
|
+
const dropiViteConfig = `import { defineConfig${isTs ? ', type Plugin' : ''} } from "vite";
|
|
385
|
+
${frameworkImport}
|
|
386
|
+
import path from "path";
|
|
387
|
+
import fs from "fs";
|
|
388
|
+
|
|
389
|
+
// Path real del symlink @dropi/ui → garantiza que se usa siempre el código local
|
|
390
|
+
const dropiUiRealPath = (() => {
|
|
391
|
+
try { return fs.realpathSync(path.join(process.cwd(), 'node_modules/@dropi/ui')); }
|
|
392
|
+
catch { return path.join(process.cwd(), 'node_modules/@dropi/ui'); }
|
|
393
|
+
})();
|
|
394
|
+
|
|
395
|
+
// Stub para dist/components/<component>.js cuando no existe (stencil --dev --watch no los genera).
|
|
396
|
+
// El lazy loader de dropi-ui.esm.js registra los componentes con el CSS actualizado.
|
|
397
|
+
const dropiComponentsStubPlugin${isTs ? ': Plugin' : ''} = {
|
|
398
|
+
name: 'dropi-components-stub',
|
|
399
|
+
apply: 'serve',
|
|
400
|
+
enforce: 'pre',
|
|
401
|
+
resolveId(id) {
|
|
402
|
+
let filePath = null;
|
|
403
|
+
if (id.match(/^@dropi\\/ui\\/dist\\/components\\/.+\\.js$/)) {
|
|
404
|
+
filePath = path.join(dropiUiRealPath, id.replace('@dropi/ui', ''));
|
|
405
|
+
} else if (id.endsWith('.js') && id.includes('/dist/components/') && id.includes('dropi')) {
|
|
406
|
+
filePath = id;
|
|
407
|
+
}
|
|
408
|
+
if (filePath && !fs.existsSync(filePath)) {
|
|
409
|
+
return '\\0dropi-stub:' + filePath;
|
|
410
|
+
}
|
|
411
|
+
},
|
|
412
|
+
load(id) {
|
|
413
|
+
if (id.startsWith('\\0dropi-stub:')) {
|
|
414
|
+
const fileName = id.split('/').pop()?.replace('.js', '') ?? 'DropiUnknown';
|
|
415
|
+
const className = fileName
|
|
416
|
+
.replace(/-([a-z])/g, (_, c) => c.toUpperCase())
|
|
417
|
+
.replace(/^[a-z]/, c => c.toUpperCase());
|
|
418
|
+
return \`export class \${className} extends HTMLElement {} export function defineCustomElement() {}\`;
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
};
|
|
422
|
+
|
|
423
|
+
// Detecta cambios en dist/ de la librería y fuerza full-reload en el browser.
|
|
424
|
+
const dropiWatchPlugin${isTs ? ': Plugin' : ''} = {
|
|
425
|
+
name: 'dropi-watch',
|
|
426
|
+
apply: 'serve',
|
|
427
|
+
configureServer(server) {
|
|
428
|
+
const distPath = path.join(dropiUiRealPath, 'dist');
|
|
429
|
+
if (fs.existsSync(distPath)) server.watcher.add(distPath);
|
|
430
|
+
},
|
|
431
|
+
handleHotUpdate({ file, server }) {
|
|
432
|
+
if (file.includes('dropi-ui') && file.includes('dist')) {
|
|
433
|
+
for (const [modPath, mods] of server.moduleGraph.fileToModulesMap) {
|
|
434
|
+
if (modPath.includes('dropi-ui') && modPath.includes('dist')) {
|
|
435
|
+
for (const mod of mods) server.moduleGraph.invalidateModule(mod);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
server.ws.send({ type: 'full-reload' });
|
|
439
|
+
return [];
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
// https://vite.dev/config/
|
|
445
|
+
export default defineConfig({
|
|
446
|
+
resolve: {
|
|
447
|
+
alias: { '@dropi/ui': dropiUiRealPath },
|
|
448
|
+
},
|
|
449
|
+
optimizeDeps: {
|
|
450
|
+
exclude: ['@dropi/ui', '@dropi/ui-react'],
|
|
451
|
+
},
|
|
452
|
+
server: {
|
|
453
|
+
headers: { 'Cache-Control': 'no-cache, no-store, must-revalidate' },
|
|
454
|
+
fs: { allow: [process.cwd(), dropiUiRealPath] },
|
|
455
|
+
},
|
|
456
|
+
plugins: [${frameworkPlugin}, dropiComponentsStubPlugin, dropiWatchPlugin],
|
|
457
|
+
});
|
|
458
|
+
`;
|
|
459
|
+
fs.writeFileSync(path.join(projectRoot, viteFile), dropiViteConfig);
|
|
460
|
+
log('Vite: configuración completa de @dropi/ui aplicada.', 'ok');
|
|
461
|
+
} else {
|
|
462
|
+
log('Vite: configuración de @dropi/ui ya presente, omitiendo.', 'info');
|
|
463
|
+
}
|
|
183
464
|
}
|
|
184
465
|
}
|
|
185
466
|
|