@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.
Files changed (533) hide show
  1. package/dist/cjs/dropi-accordion-item.cjs.entry.js +54 -0
  2. package/dist/cjs/dropi-accordion.cjs.entry.js +5 -39
  3. package/dist/cjs/dropi-alert-legacy.cjs.entry.js +39 -0
  4. package/dist/cjs/dropi-alert-modal.cjs.entry.js +80 -24
  5. package/dist/cjs/dropi-alert.cjs.entry.js +20 -14
  6. package/dist/cjs/dropi-avatars.cjs.entry.js +3 -3
  7. package/dist/cjs/dropi-badge-legacy.cjs.entry.js +30 -0
  8. package/dist/cjs/dropi-badge.cjs.entry.js +4 -4
  9. package/dist/cjs/dropi-banner-external.cjs.entry.js +25 -9
  10. package/dist/cjs/dropi-breadcrumb.cjs.entry.js +2 -2
  11. package/dist/cjs/dropi-button.cjs.entry.js +11 -7
  12. package/dist/cjs/dropi-card-checkbox.cjs.entry.js +17 -14
  13. package/dist/cjs/dropi-card-product.cjs.entry.js +42 -23
  14. package/dist/cjs/dropi-card-section.cjs.entry.js +17 -17
  15. package/dist/cjs/dropi-carousel.cjs.entry.js +112 -42
  16. package/dist/cjs/dropi-checkbox-selection-list.cjs.entry.js +17 -15
  17. package/dist/cjs/dropi-checkbox.cjs.entry.js +6 -6
  18. package/dist/cjs/dropi-chips.cjs.entry.js +8 -8
  19. package/dist/cjs/dropi-city-selector.cjs.entry.js +28 -9
  20. package/dist/cjs/dropi-color-picker.cjs.entry.js +300 -50
  21. package/dist/cjs/dropi-country-flags.cjs.entry.js +4 -4
  22. package/dist/cjs/dropi-country-selector.cjs.entry.js +50 -17
  23. package/dist/cjs/dropi-date-picker-range.cjs.entry.js +8 -8
  24. package/dist/cjs/dropi-date-picker.cjs.entry.js +53 -35
  25. package/dist/cjs/dropi-drawer.cjs.entry.js +38 -9
  26. package/dist/cjs/dropi-dropdown.cjs.entry.js +23 -16
  27. package/dist/cjs/dropi-empty-state.cjs.entry.js +15 -18
  28. package/dist/cjs/dropi-favorite-button.cjs.entry.js +5 -5
  29. package/dist/cjs/dropi-file-upload-progress-bar.cjs.entry.js +57 -32
  30. package/dist/cjs/dropi-file-upload.cjs.entry.js +210 -57
  31. package/dist/cjs/dropi-icon.cjs.entry.js +21 -4
  32. package/dist/cjs/dropi-ilustration-icon.cjs.entry.js +3 -3
  33. package/dist/cjs/dropi-image-miniature.cjs.entry.js +2 -2
  34. package/dist/cjs/dropi-image-overlay.cjs.entry.js +4 -3
  35. package/dist/cjs/dropi-input_3.cjs.entry.js +392 -0
  36. package/dist/cjs/dropi-languages-selector.cjs.entry.js +10 -6
  37. package/dist/cjs/dropi-logo.cjs.entry.js +12 -2
  38. package/dist/cjs/dropi-lottie-loader.cjs.entry.js +5 -5
  39. package/dist/cjs/dropi-media-player.cjs.entry.js +131 -41
  40. package/dist/cjs/dropi-modal.cjs.entry.js +46 -20
  41. package/dist/cjs/dropi-navbar.cjs.entry.js +14 -12
  42. package/dist/cjs/dropi-otp-send-code.cjs.entry.js +13 -13
  43. package/dist/cjs/dropi-phone-input.cjs.entry.js +163 -50
  44. package/dist/cjs/dropi-radio-button.cjs.entry.js +7 -7
  45. package/dist/cjs/dropi-radio-selection-list.cjs.entry.js +17 -13
  46. package/dist/cjs/dropi-read-more.cjs.entry.js +8 -4
  47. package/dist/cjs/dropi-search.cjs.entry.js +52 -38
  48. package/dist/cjs/dropi-select.cjs.entry.js +102 -55
  49. package/dist/cjs/dropi-sidebar.cjs.entry.js +61 -50
  50. package/dist/cjs/dropi-simple-stepper.cjs.entry.js +8 -6
  51. package/dist/cjs/dropi-skeleton.cjs.entry.js +16 -6
  52. package/dist/cjs/dropi-steps.cjs.entry.js +6 -4
  53. package/dist/cjs/dropi-switch.cjs.entry.js +5 -5
  54. package/dist/cjs/dropi-table.cjs.entry.js +212 -37
  55. package/dist/cjs/dropi-tabs.cjs.entry.js +13 -11
  56. package/dist/cjs/dropi-tag-type-product.cjs.entry.js +3 -3
  57. package/dist/cjs/dropi-text-area.cjs.entry.js +45 -14
  58. package/dist/cjs/dropi-time-line.cjs.entry.js +3 -3
  59. package/dist/cjs/dropi-toast.cjs.entry.js +7 -6
  60. package/dist/cjs/dropi-tooltip-v2.cjs.entry.js +131 -0
  61. package/dist/cjs/dropi-tooltip.cjs.entry.js +5 -26
  62. package/dist/cjs/dropi-ui.cjs.js +2 -2
  63. package/dist/cjs/dropi-vertical-steps.cjs.entry.js +6 -6
  64. package/dist/cjs/dropi-youtube-lazy-video.cjs.entry.js +3 -3
  65. package/dist/cjs/{index-DcOH2ZjX.js → index-C8kwDvpf.js} +1044 -14
  66. package/dist/cjs/loader.cjs.js +2 -2
  67. package/dist/collection/collection-manifest.json +7 -3
  68. package/dist/collection/components/dropi-accordion/dropi-accordion-item.css +45 -0
  69. package/dist/collection/components/dropi-accordion/dropi-accordion-item.js +172 -0
  70. package/dist/collection/components/dropi-accordion/dropi-accordion.css +3 -3
  71. package/dist/collection/components/dropi-accordion/dropi-accordion.js +7 -129
  72. package/dist/collection/components/dropi-alert/dropi-alert.css +5 -11
  73. package/dist/collection/components/dropi-alert/dropi-alert.js +86 -20
  74. package/dist/collection/components/dropi-alert-legacy/dropi-alert-legacy.css +31 -0
  75. package/dist/collection/components/dropi-alert-legacy/dropi-alert-legacy.js +128 -0
  76. package/dist/collection/components/dropi-alert-modal/dropi-alert-modal.css +55 -23
  77. package/dist/collection/components/dropi-alert-modal/dropi-alert-modal.js +180 -50
  78. package/dist/collection/components/dropi-avatars/dropi-avatars.js +3 -3
  79. package/dist/collection/components/dropi-badge/dropi-badge.css +1 -1
  80. package/dist/collection/components/dropi-badge/dropi-badge.js +3 -4
  81. package/dist/collection/components/dropi-badge-legacy/dropi-badge-legacy.css +17 -0
  82. package/dist/collection/components/dropi-badge-legacy/dropi-badge-legacy.js +119 -0
  83. package/dist/collection/components/dropi-banner-external/dropi-banner-external.js +88 -13
  84. package/dist/collection/components/dropi-breadcrumb/dropi-breadcrumb.js +1 -1
  85. package/dist/collection/components/dropi-button/dropi-button.css +17 -17
  86. package/dist/collection/components/dropi-button/dropi-button.js +31 -7
  87. package/dist/collection/components/dropi-card-checkbox/dropi-card-checkbox.css +3 -1
  88. package/dist/collection/components/dropi-card-checkbox/dropi-card-checkbox.js +30 -27
  89. package/dist/collection/components/dropi-card-product/dropi-card-product.css +179 -102
  90. package/dist/collection/components/dropi-card-product/dropi-card-product.js +112 -79
  91. package/dist/collection/components/dropi-card-section/dropi-card-section.css +2 -2
  92. package/dist/collection/components/dropi-card-section/dropi-card-section.js +25 -25
  93. package/dist/collection/components/dropi-carousel/dropi-carousel.css +114 -69
  94. package/dist/collection/components/dropi-carousel/dropi-carousel.js +202 -100
  95. package/dist/collection/components/dropi-checkbox/dropi-checkbox.js +6 -6
  96. package/dist/collection/components/dropi-checkbox-selection-list/dropi-checkbox-selection-list.js +42 -20
  97. package/dist/collection/components/dropi-chips/dropi-chips.js +15 -15
  98. package/dist/collection/components/dropi-city-selector/dropi-city-selector.css +112 -50
  99. package/dist/collection/components/dropi-city-selector/dropi-city-selector.js +38 -9
  100. package/dist/collection/components/dropi-color-picker/dropi-color-picker.css +169 -142
  101. package/dist/collection/components/dropi-color-picker/dropi-color-picker.js +317 -159
  102. package/dist/collection/components/dropi-country-flags/dropi-country-flags.js +5 -5
  103. package/dist/collection/components/dropi-country-selector/dropi-country-selector.css +72 -25
  104. package/dist/collection/components/dropi-country-selector/dropi-country-selector.js +124 -22
  105. package/dist/collection/components/dropi-date-picker/dropi-date-picker.css +104 -39
  106. package/dist/collection/components/dropi-date-picker/dropi-date-picker.js +131 -49
  107. package/dist/collection/components/dropi-date-picker-range/dropi-date-picker-range.css +8 -8
  108. package/dist/collection/components/dropi-date-picker-range/dropi-date-picker-range.js +8 -8
  109. package/dist/collection/components/dropi-drawer/dropi-drawer.css +38 -16
  110. package/dist/collection/components/dropi-drawer/dropi-drawer.js +107 -18
  111. package/dist/collection/components/dropi-dropdown/dropi-dropdown.css +1 -1
  112. package/dist/collection/components/dropi-dropdown/dropi-dropdown.js +52 -27
  113. package/dist/collection/components/dropi-empty-state/dropi-empty-state.js +37 -54
  114. package/dist/collection/components/dropi-favorite-button/dropi-favorite-button.js +5 -5
  115. package/dist/collection/components/dropi-file-upload/dropi-file-upload.css +431 -33
  116. package/dist/collection/components/dropi-file-upload/dropi-file-upload.js +364 -104
  117. package/dist/collection/components/dropi-file-upload-progress-bar/dropi-file-upload-progress-bar.css +82 -78
  118. package/dist/collection/components/dropi-file-upload-progress-bar/dropi-file-upload-progress-bar.js +129 -69
  119. package/dist/collection/components/dropi-icon/dropi-icon.css +5 -0
  120. package/dist/collection/components/dropi-icon/dropi-icon.js +19 -2
  121. package/dist/collection/components/dropi-ilustration-icon/dropi-ilustration-icon.css +3 -3
  122. package/dist/collection/components/dropi-ilustration-icon/dropi-ilustration-icon.js +1 -1
  123. package/dist/collection/components/dropi-image-miniature/dropi-image-miniature.js +1 -1
  124. package/dist/collection/components/dropi-image-overlay/dropi-image-overlay.css +6 -2
  125. package/dist/collection/components/dropi-image-overlay/dropi-image-overlay.js +5 -4
  126. package/dist/collection/components/dropi-input/dropi-input.css +1 -1
  127. package/dist/collection/components/dropi-input/dropi-input.js +155 -82
  128. package/dist/collection/components/dropi-languages-selector/dropi-languages-selector.css +1 -1
  129. package/dist/collection/components/dropi-languages-selector/dropi-languages-selector.js +9 -5
  130. package/dist/collection/components/dropi-logo/dropi-logo.js +12 -1
  131. package/dist/collection/components/dropi-lottie-loader/dropi-lottie-loader.css +8 -2
  132. package/dist/collection/components/dropi-lottie-loader/dropi-lottie-loader.js +6 -6
  133. package/dist/collection/components/dropi-media-player/dropi-media-player.css +263 -70
  134. package/dist/collection/components/dropi-media-player/dropi-media-player.js +161 -61
  135. package/dist/collection/components/dropi-modal/dropi-modal.css +14 -4
  136. package/dist/collection/components/dropi-modal/dropi-modal.js +312 -26
  137. package/dist/collection/components/dropi-navbar/dropi-navbar.css +7 -7
  138. package/dist/collection/components/dropi-navbar/dropi-navbar.js +42 -26
  139. package/dist/collection/components/dropi-otp-send-code/dropi-otp-send-code.css +2 -2
  140. package/dist/collection/components/dropi-otp-send-code/dropi-otp-send-code.js +13 -13
  141. package/dist/collection/components/dropi-paginator/dropi-paginator.css +2 -2
  142. package/dist/collection/components/dropi-paginator/dropi-paginator.js +51 -99
  143. package/dist/collection/components/dropi-phone-input/dropi-phone-input.css +158 -101
  144. package/dist/collection/components/dropi-phone-input/dropi-phone-input.js +256 -86
  145. package/dist/collection/components/dropi-radio-button/dropi-radio-button.js +13 -20
  146. package/dist/collection/components/dropi-radio-selection-list/dropi-radio-selection-list.css +3 -3
  147. package/dist/collection/components/dropi-radio-selection-list/dropi-radio-selection-list.js +69 -19
  148. package/dist/collection/components/dropi-read-more/dropi-read-more.css +5 -8
  149. package/dist/collection/components/dropi-read-more/dropi-read-more.js +46 -2
  150. package/dist/collection/components/dropi-search/dropi-search.css +2 -2
  151. package/dist/collection/components/dropi-search/dropi-search.js +194 -60
  152. package/dist/collection/components/dropi-select/dropi-select.css +7 -7
  153. package/dist/collection/components/dropi-select/dropi-select.js +170 -84
  154. package/dist/collection/components/dropi-sidebar/dropi-sidebar.css +51 -92
  155. package/dist/collection/components/dropi-sidebar/dropi-sidebar.js +86 -176
  156. package/dist/collection/components/dropi-simple-stepper/dropi-simple-stepper.css +2 -2
  157. package/dist/collection/components/dropi-simple-stepper/dropi-simple-stepper.js +29 -7
  158. package/dist/collection/components/dropi-skeleton/dropi-skeleton.js +40 -10
  159. package/dist/collection/components/dropi-steps/dropi-steps.css +3 -3
  160. package/dist/collection/components/dropi-steps/dropi-steps.js +31 -3
  161. package/dist/collection/components/dropi-switch/dropi-switch.js +5 -5
  162. package/dist/collection/components/dropi-table/dropi-table.css +505 -45
  163. package/dist/collection/components/dropi-table/dropi-table.js +690 -50
  164. package/dist/collection/components/dropi-tabs/dropi-tabs.css +10 -5
  165. package/dist/collection/components/dropi-tabs/dropi-tabs.js +35 -13
  166. package/dist/collection/components/dropi-tag/dropi-tag.js +5 -5
  167. package/dist/collection/components/dropi-tag-type-product/dropi-tag-type-product.css +4 -4
  168. package/dist/collection/components/dropi-tag-type-product/dropi-tag-type-product.js +1 -1
  169. package/dist/collection/components/dropi-text-area/dropi-text-area.css +4 -1
  170. package/dist/collection/components/dropi-text-area/dropi-text-area.js +87 -32
  171. package/dist/collection/components/dropi-time-line/dropi-time-line.css +2 -2
  172. package/dist/collection/components/dropi-time-line/dropi-time-line.js +1 -1
  173. package/dist/collection/components/dropi-toast/dropi-toast.css +2 -2
  174. package/dist/collection/components/dropi-toast/dropi-toast.js +6 -5
  175. package/dist/collection/components/dropi-tooltip/dropi-tooltip.css +28 -63
  176. package/dist/collection/components/dropi-tooltip/dropi-tooltip.js +11 -88
  177. package/dist/collection/components/dropi-tooltip-v2/dropi-tooltip.css +67 -0
  178. package/dist/collection/components/dropi-tooltip-v2/dropi-tooltip.js +468 -0
  179. package/dist/collection/components/dropi-vertical-steps/dropi-vertical-steps.css +3 -3
  180. package/dist/collection/components/dropi-vertical-steps/dropi-vertical-steps.js +5 -5
  181. package/dist/collection/components/dropi-youtube-lazy-video/dropi-youtube-lazy-video.css +1 -1
  182. package/dist/collection/components/dropi-youtube-lazy-video/dropi-youtube-lazy-video.js +1 -1
  183. package/dist/components/dropi-accordion-item.d.ts +11 -0
  184. package/dist/components/dropi-accordion-item.js +1 -0
  185. package/dist/components/dropi-accordion.js +1 -1
  186. package/dist/components/dropi-alert-legacy.d.ts +11 -0
  187. package/dist/components/dropi-alert-legacy.js +1 -0
  188. package/dist/components/dropi-alert-modal.js +1 -1
  189. package/dist/components/dropi-alert.js +1 -1
  190. package/dist/components/dropi-avatars.js +1 -1
  191. package/dist/components/dropi-badge-legacy.d.ts +11 -0
  192. package/dist/components/dropi-badge-legacy.js +1 -0
  193. package/dist/components/dropi-badge.js +1 -1
  194. package/dist/components/dropi-banner-external.js +1 -1
  195. package/dist/components/dropi-breadcrumb.js +1 -1
  196. package/dist/components/dropi-button.js +1 -1
  197. package/dist/components/dropi-card-checkbox.js +1 -1
  198. package/dist/components/dropi-card-product.js +1 -1
  199. package/dist/components/dropi-card-section.js +1 -1
  200. package/dist/components/dropi-carousel.js +1 -1
  201. package/dist/components/dropi-checkbox-selection-list.js +1 -1
  202. package/dist/components/dropi-checkbox.js +1 -1
  203. package/dist/components/dropi-chips.js +1 -1
  204. package/dist/components/dropi-city-selector.js +1 -1
  205. package/dist/components/dropi-color-picker.js +1 -1
  206. package/dist/components/dropi-country-flags.js +1 -1
  207. package/dist/components/dropi-country-selector.js +1 -1
  208. package/dist/components/dropi-date-picker-range.js +1 -1
  209. package/dist/components/dropi-date-picker.js +1 -1
  210. package/dist/components/dropi-drawer.js +1 -1
  211. package/dist/components/dropi-dropdown.js +1 -1
  212. package/dist/components/dropi-empty-state.js +1 -1
  213. package/dist/components/dropi-favorite-button.js +1 -1
  214. package/dist/components/dropi-file-upload-progress-bar.js +1 -1
  215. package/dist/components/dropi-file-upload.js +1 -1
  216. package/dist/components/dropi-icon.js +1 -1
  217. package/dist/components/dropi-ilustration-icon.js +1 -1
  218. package/dist/components/dropi-image-miniature.js +1 -1
  219. package/dist/components/dropi-image-overlay.js +1 -1
  220. package/dist/components/dropi-input.js +1 -1
  221. package/dist/components/dropi-languages-selector.js +1 -1
  222. package/dist/components/dropi-logo.js +1 -1
  223. package/dist/components/dropi-lottie-loader.js +1 -1
  224. package/dist/components/dropi-media-player.js +1 -1
  225. package/dist/components/dropi-modal.js +1 -1
  226. package/dist/components/dropi-navbar.js +1 -1
  227. package/dist/components/dropi-otp-send-code.js +1 -1
  228. package/dist/components/dropi-paginator.js +1 -1
  229. package/dist/components/dropi-phone-input.js +1 -1
  230. package/dist/components/dropi-radio-button.js +1 -1
  231. package/dist/components/dropi-radio-selection-list.js +1 -1
  232. package/dist/components/dropi-read-more.js +1 -1
  233. package/dist/components/dropi-search.js +1 -1
  234. package/dist/components/dropi-select.js +1 -1
  235. package/dist/components/dropi-sidebar.js +1 -1
  236. package/dist/components/dropi-simple-stepper.js +1 -1
  237. package/dist/components/dropi-skeleton.js +1 -1
  238. package/dist/components/dropi-steps.js +1 -1
  239. package/dist/components/dropi-switch.js +1 -1
  240. package/dist/components/dropi-table.js +1 -1
  241. package/dist/components/dropi-tabs.js +1 -1
  242. package/dist/components/dropi-tag-type-product.js +1 -1
  243. package/dist/components/dropi-tag.js +1 -1
  244. package/dist/components/dropi-text-area.js +1 -1
  245. package/dist/components/dropi-time-line.js +1 -1
  246. package/dist/components/dropi-toast.js +1 -1
  247. package/dist/components/dropi-tooltip-v2.d.ts +11 -0
  248. package/dist/components/dropi-tooltip-v2.js +1 -0
  249. package/dist/components/dropi-tooltip.js +1 -1
  250. package/dist/components/dropi-vertical-steps.js +1 -1
  251. package/dist/components/dropi-youtube-lazy-video.js +1 -1
  252. package/dist/components/index.js +1 -1
  253. package/dist/components/p-B9R8Apw7.js +1 -0
  254. package/dist/components/p-B_Ace02i.js +1 -0
  255. package/dist/components/p-BrjO_JXp.js +1 -0
  256. package/dist/components/p-BwhxWL4p.js +1 -0
  257. package/dist/components/p-Bz2jXX3R.js +1 -0
  258. package/dist/components/p-CV4X3Gm4.js +1 -0
  259. package/dist/components/p-CV_oz45O.js +1 -0
  260. package/dist/components/p-D-vQQQNz.js +1 -0
  261. package/dist/components/p-D13d88W3.js +1 -0
  262. package/dist/components/p-DGUfr98Z.js +1 -0
  263. package/dist/components/p-a-hGQrJd.js +1 -0
  264. package/dist/components/p-o5gyrbbD.js +1 -0
  265. package/dist/dropi-ui/dropi-ui.css +1 -1
  266. package/dist/dropi-ui/dropi-ui.esm.js +1 -1
  267. package/dist/dropi-ui/p-00e5a2de.entry.js +1 -0
  268. package/dist/dropi-ui/p-0188e07a.entry.js +1 -0
  269. package/dist/dropi-ui/p-02710049.entry.js +1 -0
  270. package/dist/dropi-ui/p-17c56074.entry.js +1 -0
  271. package/dist/dropi-ui/p-18adf694.entry.js +1 -0
  272. package/dist/dropi-ui/p-1a3619c3.entry.js +1 -0
  273. package/dist/dropi-ui/p-1d3d6a32.entry.js +1 -0
  274. package/dist/dropi-ui/p-25640777.entry.js +1 -0
  275. package/dist/dropi-ui/p-2674d901.entry.js +1 -0
  276. package/dist/dropi-ui/p-2af538b9.entry.js +1 -0
  277. package/dist/dropi-ui/p-3013f3b8.entry.js +1 -0
  278. package/dist/dropi-ui/p-3321ca70.entry.js +1 -0
  279. package/dist/dropi-ui/p-33d242ec.entry.js +1 -0
  280. package/dist/dropi-ui/p-39af6478.entry.js +1 -0
  281. package/dist/dropi-ui/p-3e36c8b8.entry.js +1 -0
  282. package/dist/dropi-ui/p-3ebc9b7b.entry.js +1 -0
  283. package/dist/dropi-ui/p-446a481d.entry.js +1 -0
  284. package/dist/dropi-ui/p-50a5e548.entry.js +1 -0
  285. package/dist/dropi-ui/p-50e0d44f.entry.js +1 -0
  286. package/dist/dropi-ui/p-53a7a37d.entry.js +1 -0
  287. package/dist/dropi-ui/p-5c0bd7c2.entry.js +1 -0
  288. package/dist/dropi-ui/p-5cee6721.entry.js +1 -0
  289. package/dist/dropi-ui/p-5fb33ae4.entry.js +1 -0
  290. package/dist/dropi-ui/p-665ef7ba.entry.js +1 -0
  291. package/dist/dropi-ui/p-66b80371.entry.js +1 -0
  292. package/dist/dropi-ui/p-7bfc1c27.entry.js +1 -0
  293. package/dist/dropi-ui/p-7c0d2edf.entry.js +1 -0
  294. package/dist/dropi-ui/p-7eb27836.entry.js +1 -0
  295. package/dist/dropi-ui/p-85444414.entry.js +1 -0
  296. package/dist/dropi-ui/p-86283e99.entry.js +1 -0
  297. package/dist/dropi-ui/p-8bf5d8ee.entry.js +1 -0
  298. package/dist/dropi-ui/p-9032ba00.entry.js +1 -0
  299. package/dist/dropi-ui/p-9212f544.entry.js +1 -0
  300. package/dist/dropi-ui/p-92291873.entry.js +1 -0
  301. package/dist/dropi-ui/p-955e52f8.entry.js +1 -0
  302. package/dist/dropi-ui/p-976a15e3.entry.js +1 -0
  303. package/dist/dropi-ui/p-9b037086.entry.js +1 -0
  304. package/dist/dropi-ui/p-9e0129cc.entry.js +1 -0
  305. package/dist/dropi-ui/{p-c9ebd31b.entry.js → p-9ffec3f7.entry.js} +1 -1
  306. package/dist/dropi-ui/p-D5SAM1O2.js +2 -0
  307. package/dist/dropi-ui/p-a1c93e55.entry.js +1 -0
  308. package/dist/dropi-ui/p-a232c6a7.entry.js +1 -0
  309. package/dist/dropi-ui/p-a3c4d677.entry.js +1 -0
  310. package/dist/dropi-ui/p-a457e8ca.entry.js +1 -0
  311. package/dist/dropi-ui/p-a4e1df5e.entry.js +1 -0
  312. package/dist/dropi-ui/p-a822a23e.entry.js +1 -0
  313. package/dist/dropi-ui/p-a8f24270.entry.js +1 -0
  314. package/dist/dropi-ui/p-ae35d538.entry.js +1 -0
  315. package/dist/dropi-ui/p-af8e2157.entry.js +1 -0
  316. package/dist/dropi-ui/p-b2623a5c.entry.js +1 -0
  317. package/dist/dropi-ui/p-b3d3c72e.entry.js +1 -0
  318. package/dist/dropi-ui/p-c3614c4a.entry.js +1 -0
  319. package/dist/dropi-ui/p-cbf5367e.entry.js +1 -0
  320. package/dist/dropi-ui/p-cc527d91.entry.js +1 -0
  321. package/dist/dropi-ui/p-cdde481b.entry.js +1 -0
  322. package/dist/dropi-ui/p-d42d4ef7.entry.js +1 -0
  323. package/dist/dropi-ui/{p-b41c8a6c.entry.js → p-db38bf16.entry.js} +1 -1
  324. package/dist/dropi-ui/p-dd5d8b1b.entry.js +1 -0
  325. package/dist/dropi-ui/p-e3ad21f8.entry.js +1 -0
  326. package/dist/dropi-ui/p-e6e766ed.entry.js +1 -0
  327. package/dist/dropi-ui/p-ec263862.entry.js +1 -0
  328. package/dist/dropi-ui/p-efc2fc35.entry.js +1 -0
  329. package/dist/dropi-ui/p-f41cd9b5.entry.js +1 -0
  330. package/dist/dropi-ui/p-fa3d0267.entry.js +1 -0
  331. package/dist/esm/dropi-accordion-item.entry.js +52 -0
  332. package/dist/esm/dropi-accordion.entry.js +5 -39
  333. package/dist/esm/dropi-alert-legacy.entry.js +37 -0
  334. package/dist/esm/dropi-alert-modal.entry.js +80 -24
  335. package/dist/esm/dropi-alert.entry.js +20 -14
  336. package/dist/esm/dropi-avatars.entry.js +3 -3
  337. package/dist/esm/dropi-badge-legacy.entry.js +28 -0
  338. package/dist/esm/dropi-badge.entry.js +4 -4
  339. package/dist/esm/dropi-banner-external.entry.js +25 -9
  340. package/dist/esm/dropi-breadcrumb.entry.js +2 -2
  341. package/dist/esm/dropi-button.entry.js +11 -7
  342. package/dist/esm/dropi-card-checkbox.entry.js +17 -14
  343. package/dist/esm/dropi-card-product.entry.js +42 -23
  344. package/dist/esm/dropi-card-section.entry.js +17 -17
  345. package/dist/esm/dropi-carousel.entry.js +112 -42
  346. package/dist/esm/dropi-checkbox-selection-list.entry.js +17 -15
  347. package/dist/esm/dropi-checkbox.entry.js +6 -6
  348. package/dist/esm/dropi-chips.entry.js +8 -8
  349. package/dist/esm/dropi-city-selector.entry.js +28 -9
  350. package/dist/esm/dropi-color-picker.entry.js +300 -50
  351. package/dist/esm/dropi-country-flags.entry.js +4 -4
  352. package/dist/esm/dropi-country-selector.entry.js +50 -17
  353. package/dist/esm/dropi-date-picker-range.entry.js +8 -8
  354. package/dist/esm/dropi-date-picker.entry.js +53 -35
  355. package/dist/esm/dropi-drawer.entry.js +38 -9
  356. package/dist/esm/dropi-dropdown.entry.js +23 -16
  357. package/dist/esm/dropi-empty-state.entry.js +15 -18
  358. package/dist/esm/dropi-favorite-button.entry.js +5 -5
  359. package/dist/esm/dropi-file-upload-progress-bar.entry.js +57 -32
  360. package/dist/esm/dropi-file-upload.entry.js +210 -57
  361. package/dist/esm/dropi-icon.entry.js +21 -4
  362. package/dist/esm/dropi-ilustration-icon.entry.js +3 -3
  363. package/dist/esm/dropi-image-miniature.entry.js +2 -2
  364. package/dist/esm/dropi-image-overlay.entry.js +4 -3
  365. package/dist/esm/dropi-input_3.entry.js +388 -0
  366. package/dist/esm/dropi-languages-selector.entry.js +10 -6
  367. package/dist/esm/dropi-logo.entry.js +12 -2
  368. package/dist/esm/dropi-lottie-loader.entry.js +5 -5
  369. package/dist/esm/dropi-media-player.entry.js +131 -41
  370. package/dist/esm/dropi-modal.entry.js +46 -20
  371. package/dist/esm/dropi-navbar.entry.js +14 -12
  372. package/dist/esm/dropi-otp-send-code.entry.js +13 -13
  373. package/dist/esm/dropi-phone-input.entry.js +163 -50
  374. package/dist/esm/dropi-radio-button.entry.js +7 -7
  375. package/dist/esm/dropi-radio-selection-list.entry.js +17 -13
  376. package/dist/esm/dropi-read-more.entry.js +8 -4
  377. package/dist/esm/dropi-search.entry.js +52 -38
  378. package/dist/esm/dropi-select.entry.js +102 -55
  379. package/dist/esm/dropi-sidebar.entry.js +61 -50
  380. package/dist/esm/dropi-simple-stepper.entry.js +8 -6
  381. package/dist/esm/dropi-skeleton.entry.js +16 -6
  382. package/dist/esm/dropi-steps.entry.js +6 -4
  383. package/dist/esm/dropi-switch.entry.js +5 -5
  384. package/dist/esm/dropi-table.entry.js +212 -37
  385. package/dist/esm/dropi-tabs.entry.js +13 -11
  386. package/dist/esm/dropi-tag-type-product.entry.js +3 -3
  387. package/dist/esm/dropi-text-area.entry.js +45 -14
  388. package/dist/esm/dropi-time-line.entry.js +3 -3
  389. package/dist/esm/dropi-toast.entry.js +7 -6
  390. package/dist/esm/dropi-tooltip-v2.entry.js +129 -0
  391. package/dist/esm/dropi-tooltip.entry.js +5 -26
  392. package/dist/esm/dropi-ui.js +3 -3
  393. package/dist/esm/dropi-vertical-steps.entry.js +6 -6
  394. package/dist/esm/dropi-youtube-lazy-video.entry.js +3 -3
  395. package/dist/esm/{index-Tbza12Gt.js → index-D5SAM1O2.js} +1044 -15
  396. package/dist/esm/loader.js +3 -3
  397. package/dist/types/components/dropi-accordion/dropi-accordion-item.d.ts +24 -0
  398. package/dist/types/components/dropi-accordion/dropi-accordion.d.ts +3 -23
  399. package/dist/types/components/dropi-alert/dropi-alert.d.ts +9 -3
  400. package/dist/types/components/dropi-alert-legacy/dropi-alert-legacy.d.ts +18 -0
  401. package/dist/types/components/dropi-alert-modal/dropi-alert-modal.d.ts +26 -8
  402. package/dist/types/components/dropi-badge-legacy/dropi-badge-legacy.d.ts +15 -0
  403. package/dist/types/components/dropi-banner-external/dropi-banner-external.d.ts +11 -3
  404. package/dist/types/components/dropi-button/dropi-button.d.ts +4 -2
  405. package/dist/types/components/dropi-card-checkbox/dropi-card-checkbox.d.ts +8 -7
  406. package/dist/types/components/dropi-card-product/dropi-card-product.d.ts +19 -15
  407. package/dist/types/components/dropi-card-section/dropi-card-section.d.ts +5 -5
  408. package/dist/types/components/dropi-carousel/dropi-carousel.d.ts +31 -27
  409. package/dist/types/components/dropi-checkbox/dropi-checkbox.d.ts +1 -1
  410. package/dist/types/components/dropi-checkbox-selection-list/dropi-checkbox-selection-list.d.ts +7 -5
  411. package/dist/types/components/dropi-chips/dropi-chips.d.ts +4 -4
  412. package/dist/types/components/dropi-city-selector/dropi-city-selector.d.ts +3 -1
  413. package/dist/types/components/dropi-color-picker/dropi-color-picker.d.ts +51 -26
  414. package/dist/types/components/dropi-country-flags/dropi-country-flags.d.ts +1 -1
  415. package/dist/types/components/dropi-country-selector/dropi-country-selector.d.ts +16 -5
  416. package/dist/types/components/dropi-date-picker/dropi-date-picker.d.ts +16 -8
  417. package/dist/types/components/dropi-date-picker-range/dropi-date-picker-range.d.ts +2 -2
  418. package/dist/types/components/dropi-drawer/dropi-drawer.d.ts +12 -6
  419. package/dist/types/components/dropi-dropdown/dropi-dropdown.d.ts +12 -6
  420. package/dist/types/components/dropi-empty-state/dropi-empty-state.d.ts +12 -14
  421. package/dist/types/components/dropi-favorite-button/dropi-favorite-button.d.ts +1 -1
  422. package/dist/types/components/dropi-file-upload/dropi-file-upload.d.ts +65 -26
  423. package/dist/types/components/dropi-file-upload-progress-bar/dropi-file-upload-progress-bar.d.ts +24 -16
  424. package/dist/types/components/dropi-icon/dropi-icon.d.ts +3 -1
  425. package/dist/types/components/dropi-image-overlay/dropi-image-overlay.d.ts +1 -1
  426. package/dist/types/components/dropi-input/dropi-input.d.ts +27 -17
  427. package/dist/types/components/dropi-languages-selector/dropi-languages-selector.d.ts +1 -1
  428. package/dist/types/components/dropi-logo/dropi-logo.d.ts +2 -0
  429. package/dist/types/components/dropi-lottie-loader/dropi-lottie-loader.d.ts +1 -1
  430. package/dist/types/components/dropi-media-player/dropi-media-player.d.ts +26 -19
  431. package/dist/types/components/dropi-modal/dropi-modal.d.ts +24 -5
  432. package/dist/types/components/dropi-navbar/dropi-navbar.d.ts +7 -5
  433. package/dist/types/components/dropi-otp-send-code/dropi-otp-send-code.d.ts +1 -1
  434. package/dist/types/components/dropi-paginator/dropi-paginator.d.ts +10 -20
  435. package/dist/types/components/dropi-phone-input/dropi-phone-input.d.ts +35 -20
  436. package/dist/types/components/dropi-radio-button/dropi-radio-button.d.ts +2 -2
  437. package/dist/types/components/dropi-radio-selection-list/dropi-radio-selection-list.d.ts +11 -4
  438. package/dist/types/components/dropi-read-more/dropi-read-more.d.ts +4 -0
  439. package/dist/types/components/dropi-search/dropi-search.d.ts +24 -12
  440. package/dist/types/components/dropi-select/dropi-select.d.ts +26 -15
  441. package/dist/types/components/dropi-sidebar/dropi-sidebar.d.ts +32 -26
  442. package/dist/types/components/dropi-simple-stepper/dropi-simple-stepper.d.ts +2 -0
  443. package/dist/types/components/dropi-skeleton/dropi-skeleton.d.ts +4 -1
  444. package/dist/types/components/dropi-steps/dropi-steps.d.ts +3 -0
  445. package/dist/types/components/dropi-switch/dropi-switch.d.ts +1 -1
  446. package/dist/types/components/dropi-table/dropi-table.d.ts +90 -14
  447. package/dist/types/components/dropi-tabs/dropi-tabs.d.ts +5 -3
  448. package/dist/types/components/dropi-text-area/dropi-text-area.d.ts +27 -6
  449. package/dist/types/components/dropi-tooltip/dropi-tooltip.d.ts +3 -17
  450. package/dist/types/components/dropi-tooltip-v2/dropi-tooltip.d.ts +59 -0
  451. package/dist/types/components/dropi-vertical-steps/dropi-vertical-steps.d.ts +1 -1
  452. package/dist/types/components.d.ts +2182 -1180
  453. package/dist/types/index.d.ts +1 -0
  454. package/hydrate/index.d.ts +287 -0
  455. package/hydrate/index.js +30455 -0
  456. package/hydrate/index.mjs +30445 -0
  457. package/hydrate/package.json +12 -0
  458. package/package.json +33 -5
  459. package/readme.md +97 -18
  460. package/scripts/setup.js +310 -29
  461. package/skills/install-dropi-ui/skill.md +15 -10
  462. package/dist/cjs/dropi-input.cjs.entry.js +0 -210
  463. package/dist/cjs/dropi-paginator.cjs.entry.js +0 -91
  464. package/dist/cjs/dropi-tag.cjs.entry.js +0 -68
  465. package/dist/components/p-BY_J-4Sm.js +0 -1
  466. package/dist/components/p-CYCV-5qV.js +0 -1
  467. package/dist/components/p-D0ZJcRZn.js +0 -1
  468. package/dist/components/p-DUPOnSiL.js +0 -1
  469. package/dist/components/p-DUX_WvqW.js +0 -1
  470. package/dist/components/p-wO1yy0Zr.js +0 -1
  471. package/dist/dropi-ui/p-053ebb91.entry.js +0 -1
  472. package/dist/dropi-ui/p-0acd32e6.entry.js +0 -1
  473. package/dist/dropi-ui/p-0e88a543.entry.js +0 -1
  474. package/dist/dropi-ui/p-0f2f5f75.entry.js +0 -1
  475. package/dist/dropi-ui/p-131d87ac.entry.js +0 -1
  476. package/dist/dropi-ui/p-1af4719d.entry.js +0 -1
  477. package/dist/dropi-ui/p-1e8f6d4a.entry.js +0 -1
  478. package/dist/dropi-ui/p-22132b1a.entry.js +0 -1
  479. package/dist/dropi-ui/p-2c1aaf6f.entry.js +0 -1
  480. package/dist/dropi-ui/p-2e9b87a9.entry.js +0 -1
  481. package/dist/dropi-ui/p-3414a414.entry.js +0 -1
  482. package/dist/dropi-ui/p-34ad54a1.entry.js +0 -1
  483. package/dist/dropi-ui/p-3531378b.entry.js +0 -1
  484. package/dist/dropi-ui/p-3983a7aa.entry.js +0 -1
  485. package/dist/dropi-ui/p-40e91337.entry.js +0 -1
  486. package/dist/dropi-ui/p-4a8646e5.entry.js +0 -1
  487. package/dist/dropi-ui/p-4be64bf0.entry.js +0 -1
  488. package/dist/dropi-ui/p-4ec17510.entry.js +0 -1
  489. package/dist/dropi-ui/p-5023eef0.entry.js +0 -1
  490. package/dist/dropi-ui/p-51a97b1a.entry.js +0 -1
  491. package/dist/dropi-ui/p-52796d84.entry.js +0 -1
  492. package/dist/dropi-ui/p-53a5bd7b.entry.js +0 -1
  493. package/dist/dropi-ui/p-5425f941.entry.js +0 -1
  494. package/dist/dropi-ui/p-58d0bf7a.entry.js +0 -1
  495. package/dist/dropi-ui/p-59d3bd9b.entry.js +0 -1
  496. package/dist/dropi-ui/p-5e957631.entry.js +0 -1
  497. package/dist/dropi-ui/p-64cbf4ea.entry.js +0 -1
  498. package/dist/dropi-ui/p-68080534.entry.js +0 -1
  499. package/dist/dropi-ui/p-6da6b97e.entry.js +0 -1
  500. package/dist/dropi-ui/p-6df57f25.entry.js +0 -1
  501. package/dist/dropi-ui/p-7c916570.entry.js +0 -1
  502. package/dist/dropi-ui/p-7e95462a.entry.js +0 -1
  503. package/dist/dropi-ui/p-80089042.entry.js +0 -1
  504. package/dist/dropi-ui/p-8768bb11.entry.js +0 -1
  505. package/dist/dropi-ui/p-896f2900.entry.js +0 -1
  506. package/dist/dropi-ui/p-89ac1ff2.entry.js +0 -1
  507. package/dist/dropi-ui/p-8ce79c69.entry.js +0 -1
  508. package/dist/dropi-ui/p-8e809670.entry.js +0 -1
  509. package/dist/dropi-ui/p-93b207b7.entry.js +0 -1
  510. package/dist/dropi-ui/p-983f72ad.entry.js +0 -1
  511. package/dist/dropi-ui/p-98babb78.entry.js +0 -1
  512. package/dist/dropi-ui/p-9fc53d50.entry.js +0 -1
  513. package/dist/dropi-ui/p-Tbza12Gt.js +0 -2
  514. package/dist/dropi-ui/p-a20705fe.entry.js +0 -1
  515. package/dist/dropi-ui/p-a72da98f.entry.js +0 -1
  516. package/dist/dropi-ui/p-a876d57c.entry.js +0 -1
  517. package/dist/dropi-ui/p-b1b0f938.entry.js +0 -1
  518. package/dist/dropi-ui/p-b2e176b1.entry.js +0 -1
  519. package/dist/dropi-ui/p-b890fd5b.entry.js +0 -1
  520. package/dist/dropi-ui/p-bf5a53ef.entry.js +0 -1
  521. package/dist/dropi-ui/p-c0677661.entry.js +0 -1
  522. package/dist/dropi-ui/p-c2562a1c.entry.js +0 -1
  523. package/dist/dropi-ui/p-c2b5d0fb.entry.js +0 -1
  524. package/dist/dropi-ui/p-c4d4396b.entry.js +0 -1
  525. package/dist/dropi-ui/p-cecfb68e.entry.js +0 -1
  526. package/dist/dropi-ui/p-d0b47e2e.entry.js +0 -1
  527. package/dist/dropi-ui/p-dcefef51.entry.js +0 -1
  528. package/dist/dropi-ui/p-e4b7e15f.entry.js +0 -1
  529. package/dist/dropi-ui/p-e7f4ed25.entry.js +0 -1
  530. package/dist/dropi-ui/p-f1d69b15.entry.js +0 -1
  531. package/dist/esm/dropi-input.entry.js +0 -208
  532. package/dist/esm/dropi-paginator.entry.js +0 -89
  533. package/dist/esm/dropi-tag.entry.js +0 -66
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "@dropi/ui/hydrate",
3
+ "description": "DropiUi component hydration app.",
4
+ "main": "index.js",
5
+ "types": "index.d.ts",
6
+ "exports": {
7
+ ".": {
8
+ "require": "./index.js",
9
+ "import": "./index.mjs"
10
+ }
11
+ }
12
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dropi/ui",
3
- "version": "0.1.20",
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/dropi-ui.css": "./dist/dropi-ui/dropi-ui.css"
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 && cd ../dropi-ui-react && npm run 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.4.2",
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
- La forma más rápida y segura de integrar la librería es usando nuestro configurador automático.
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 setup
16
+ npx @dropi/create-dropi-ui
23
17
  ```
24
- *Este comando detectará tu framework (Angular, React o Vue), instalará las dependencias necesarias y configurará estilos, iconos, animaciones Lottie y scripts automáticamente.*
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
- | Angular / Vue / Vanilla | `npm install @dropi/ui` |
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
- - **Loader**: Llamar a `defineCustomElements()` de `@dropi/ui/loader`.
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
- ## Cómo pasar props regla fundamental
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
- Cada prop se pasa **directamente en el JSX**, una por una. No existe un prop contenedor tipo `selectProperties` u `options` agrupadas.
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
- // Incorrecto selectProperties no existe como prop
51
- <DropiSelect selectProperties={{ label: 'País', placeholder: 'Seleccionar' }} />
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
- // Correctocada prop va suelta en el tag
79
+ ### Forma 1Props 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
- Esto aplica para todos los componentes. Las props disponibles están listadas en cada sección de este readme.
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(`Proyecto React detectado → Instalando @dropi/ui-react...`);
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
- // 4. Loader (defineCustomElements) si no es React wrapper
101
- if (!isReact || !content.includes('defineCustomElements')) {
102
- if (!content.includes('defineCustomElements')) {
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 (optimizeDeps)
174
- const viteFiles = ['vite.config.ts', 'vite.config.js'];
175
- const viteFile = viteFiles.find(f => fs.existsSync(path.join(projectRoot, f)));
176
- if (viteFile) {
177
- let content = fs.readFileSync(path.join(projectRoot, viteFile), 'utf8');
178
- if (!content.includes('optimizeDeps')) {
179
- const patch = `\n optimizeDeps: {\n exclude: ['@dropi/ui/loader', '@dropi/ui'],\n },`;
180
- content = content.replace(/defineConfig\(\{/, `defineConfig({${patch}`);
181
- fs.writeFileSync(path.join(projectRoot, viteFile), content);
182
- log('Vite: optimizeDeps.exclude configurado.', 'ok');
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