@dropi/ui 0.1.17 → 0.1.19

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 (253) hide show
  1. package/dist/cjs/dropi-accordion.cjs.entry.js +1 -1
  2. package/dist/cjs/dropi-alert.cjs.entry.js +58 -0
  3. package/dist/cjs/dropi-avatars.cjs.entry.js +31 -0
  4. package/dist/cjs/dropi-badge.cjs.entry.js +1 -1
  5. package/dist/cjs/dropi-button.cjs.entry.js +2 -2
  6. package/dist/cjs/dropi-card-section.cjs.entry.js +38 -0
  7. package/dist/cjs/dropi-checkbox-selection-list.cjs.entry.js +71 -0
  8. package/dist/cjs/dropi-checkbox.cjs.entry.js +2 -2
  9. package/dist/cjs/dropi-chips.cjs.entry.js +30 -0
  10. package/dist/cjs/dropi-dropdown.cjs.entry.js +58 -0
  11. package/dist/cjs/dropi-empty-state.cjs.entry.js +1 -1
  12. package/dist/cjs/dropi-favorite-button.cjs.entry.js +27 -0
  13. package/dist/cjs/dropi-icon.cjs.entry.js +1 -1
  14. package/dist/cjs/dropi-image-miniature.cjs.entry.js +44 -0
  15. package/dist/cjs/dropi-image-overlay.cjs.entry.js +62 -0
  16. package/dist/cjs/dropi-input.cjs.entry.js +5 -5
  17. package/dist/cjs/dropi-logo.cjs.entry.js +27 -0
  18. package/dist/cjs/dropi-lottie-loader.cjs.entry.js +27 -0
  19. package/dist/cjs/dropi-otp-send-code.cjs.entry.js +92 -0
  20. package/dist/cjs/dropi-paginator.cjs.entry.js +5 -3
  21. package/dist/cjs/dropi-radio-button.cjs.entry.js +1 -1
  22. package/dist/cjs/dropi-radio-selection-list.cjs.entry.js +56 -0
  23. package/dist/cjs/dropi-read-more.cjs.entry.js +36 -0
  24. package/dist/cjs/dropi-search.cjs.entry.js +110 -0
  25. package/dist/cjs/dropi-select.cjs.entry.js +1 -1
  26. package/dist/cjs/dropi-simple-stepper.cjs.entry.js +51 -0
  27. package/dist/cjs/dropi-steps.cjs.entry.js +50 -0
  28. package/dist/cjs/dropi-switch.cjs.entry.js +1 -1
  29. package/dist/cjs/dropi-tabs.cjs.entry.js +1 -1
  30. package/dist/cjs/dropi-tag.cjs.entry.js +1 -1
  31. package/dist/cjs/dropi-text-area.cjs.entry.js +3 -3
  32. package/dist/cjs/dropi-time-line.cjs.entry.js +34 -0
  33. package/dist/cjs/dropi-toast.cjs.entry.js +1 -1
  34. package/dist/cjs/dropi-tooltip.cjs.entry.js +1 -1
  35. package/dist/cjs/dropi-ui.cjs.js +1 -1
  36. package/dist/cjs/dropi-vertical-steps.cjs.entry.js +55 -0
  37. package/dist/cjs/loader.cjs.js +1 -1
  38. package/dist/collection/collection-manifest.json +19 -0
  39. package/dist/collection/components/dropi-accordion/dropi-accordion.js +1 -1
  40. package/dist/collection/components/dropi-alert/dropi-alert.css +123 -0
  41. package/dist/collection/components/dropi-alert/dropi-alert.js +305 -0
  42. package/dist/collection/components/dropi-avatars/dropi-avatars.css +55 -0
  43. package/dist/collection/components/dropi-avatars/dropi-avatars.js +126 -0
  44. package/dist/collection/components/dropi-badge/dropi-badge.js +1 -1
  45. package/dist/collection/components/dropi-button/dropi-button.js +2 -2
  46. package/dist/collection/components/dropi-card-section/dropi-card-section.css +42 -0
  47. package/dist/collection/components/dropi-card-section/dropi-card-section.js +178 -0
  48. package/dist/collection/components/dropi-checkbox/dropi-checkbox.js +2 -2
  49. package/dist/collection/components/dropi-checkbox-selection-list/dropi-checkbox-selection-list.css +44 -0
  50. package/dist/collection/components/dropi-checkbox-selection-list/dropi-checkbox-selection-list.js +245 -0
  51. package/dist/collection/components/dropi-chips/dropi-chips.css +66 -0
  52. package/dist/collection/components/dropi-chips/dropi-chips.js +169 -0
  53. package/dist/collection/components/dropi-dropdown/dropi-dropdown.css +51 -0
  54. package/dist/collection/components/dropi-dropdown/dropi-dropdown.js +184 -0
  55. package/dist/collection/components/dropi-empty-state/dropi-empty-state.js +1 -1
  56. package/dist/collection/components/dropi-favorite-button/dropi-favorite-button.css +24 -0
  57. package/dist/collection/components/dropi-favorite-button/dropi-favorite-button.js +78 -0
  58. package/dist/collection/components/dropi-icon/dropi-icon.js +1 -1
  59. package/dist/collection/components/dropi-image-miniature/dropi-image-miniature.css +45 -0
  60. package/dist/collection/components/dropi-image-miniature/dropi-image-miniature.js +150 -0
  61. package/dist/collection/components/dropi-image-overlay/dropi-image-overlay.css +82 -0
  62. package/dist/collection/components/dropi-image-overlay/dropi-image-overlay.js +155 -0
  63. package/dist/collection/components/dropi-input/dropi-input.css +11 -0
  64. package/dist/collection/components/dropi-input/dropi-input.js +4 -4
  65. package/dist/collection/components/dropi-logo/dropi-logo.css +26 -0
  66. package/dist/collection/components/dropi-logo/dropi-logo.js +96 -0
  67. package/dist/collection/components/dropi-lottie-loader/dropi-lottie-loader.css +50 -0
  68. package/dist/collection/components/dropi-lottie-loader/dropi-lottie-loader.js +116 -0
  69. package/dist/collection/components/dropi-otp-send-code/dropi-otp-send-code.css +60 -0
  70. package/dist/collection/components/dropi-otp-send-code/dropi-otp-send-code.js +221 -0
  71. package/dist/collection/components/dropi-paginator/dropi-paginator.css +15 -12
  72. package/dist/collection/components/dropi-paginator/dropi-paginator.js +24 -2
  73. package/dist/collection/components/dropi-radio-button/dropi-radio-button.js +1 -1
  74. package/dist/collection/components/dropi-radio-selection-list/dropi-radio-selection-list.css +64 -0
  75. package/dist/collection/components/dropi-radio-selection-list/dropi-radio-selection-list.js +209 -0
  76. package/dist/collection/components/dropi-read-more/dropi-read-more.css +28 -0
  77. package/dist/collection/components/dropi-read-more/dropi-read-more.js +110 -0
  78. package/dist/collection/components/dropi-search/dropi-search.css +112 -0
  79. package/dist/collection/components/dropi-search/dropi-search.js +392 -0
  80. package/dist/collection/components/dropi-select/dropi-select.js +1 -1
  81. package/dist/collection/components/dropi-simple-stepper/dropi-simple-stepper.css +94 -0
  82. package/dist/collection/components/dropi-simple-stepper/dropi-simple-stepper.js +172 -0
  83. package/dist/collection/components/dropi-steps/dropi-steps.css +95 -0
  84. package/dist/collection/components/dropi-steps/dropi-steps.js +145 -0
  85. package/dist/collection/components/dropi-switch/dropi-switch.js +1 -1
  86. package/dist/collection/components/dropi-tabs/dropi-tabs.js +1 -1
  87. package/dist/collection/components/dropi-tag/dropi-tag.js +1 -1
  88. package/dist/collection/components/dropi-text-area/dropi-text-area.css +0 -1
  89. package/dist/collection/components/dropi-text-area/dropi-text-area.js +2 -2
  90. package/dist/collection/components/dropi-time-line/dropi-time-line.css +108 -0
  91. package/dist/collection/components/dropi-time-line/dropi-time-line.js +69 -0
  92. package/dist/collection/components/dropi-toast/dropi-toast.js +1 -1
  93. package/dist/collection/components/dropi-tooltip/dropi-tooltip.js +1 -1
  94. package/dist/collection/components/dropi-vertical-steps/dropi-vertical-steps.css +95 -0
  95. package/dist/collection/components/dropi-vertical-steps/dropi-vertical-steps.js +167 -0
  96. package/dist/components/dropi-accordion.js +1 -1
  97. package/dist/components/dropi-alert.d.ts +11 -0
  98. package/dist/components/dropi-alert.js +1 -0
  99. package/dist/components/dropi-avatars.d.ts +11 -0
  100. package/dist/components/dropi-avatars.js +1 -0
  101. package/dist/components/dropi-badge.js +1 -1
  102. package/dist/components/dropi-button.js +1 -1
  103. package/dist/components/dropi-card-section.d.ts +11 -0
  104. package/dist/components/dropi-card-section.js +1 -0
  105. package/dist/components/dropi-checkbox-selection-list.d.ts +11 -0
  106. package/dist/components/dropi-checkbox-selection-list.js +1 -0
  107. package/dist/components/dropi-checkbox.js +1 -1
  108. package/dist/components/dropi-chips.d.ts +11 -0
  109. package/dist/components/dropi-chips.js +1 -0
  110. package/dist/components/dropi-dropdown.d.ts +11 -0
  111. package/dist/components/dropi-dropdown.js +1 -0
  112. package/dist/components/dropi-empty-state.js +1 -1
  113. package/dist/components/dropi-favorite-button.d.ts +11 -0
  114. package/dist/components/dropi-favorite-button.js +1 -0
  115. package/dist/components/dropi-icon.js +1 -1
  116. package/dist/components/dropi-image-miniature.d.ts +11 -0
  117. package/dist/components/dropi-image-miniature.js +1 -0
  118. package/dist/components/dropi-image-overlay.d.ts +11 -0
  119. package/dist/components/dropi-image-overlay.js +1 -0
  120. package/dist/components/dropi-input.js +1 -1
  121. package/dist/components/dropi-logo.d.ts +11 -0
  122. package/dist/components/dropi-logo.js +1 -0
  123. package/dist/components/dropi-lottie-loader.d.ts +11 -0
  124. package/dist/components/dropi-lottie-loader.js +1 -0
  125. package/dist/components/dropi-modal.js +1 -1
  126. package/dist/components/dropi-otp-send-code.d.ts +11 -0
  127. package/dist/components/dropi-otp-send-code.js +1 -0
  128. package/dist/components/dropi-paginator.js +1 -1
  129. package/dist/components/dropi-radio-button.js +1 -1
  130. package/dist/components/dropi-radio-selection-list.d.ts +11 -0
  131. package/dist/components/dropi-radio-selection-list.js +1 -0
  132. package/dist/components/dropi-read-more.d.ts +11 -0
  133. package/dist/components/dropi-read-more.js +1 -0
  134. package/dist/components/dropi-search.d.ts +11 -0
  135. package/dist/components/dropi-search.js +1 -0
  136. package/dist/components/dropi-select.js +1 -1
  137. package/dist/components/dropi-simple-stepper.d.ts +11 -0
  138. package/dist/components/dropi-simple-stepper.js +1 -0
  139. package/dist/components/dropi-steps.d.ts +11 -0
  140. package/dist/components/dropi-steps.js +1 -0
  141. package/dist/components/dropi-switch.js +1 -1
  142. package/dist/components/dropi-tabs.js +1 -1
  143. package/dist/components/dropi-tag.js +1 -1
  144. package/dist/components/dropi-text-area.js +1 -1
  145. package/dist/components/dropi-time-line.d.ts +11 -0
  146. package/dist/components/dropi-time-line.js +1 -0
  147. package/dist/components/dropi-toast.js +1 -1
  148. package/dist/components/dropi-tooltip.js +1 -1
  149. package/dist/components/dropi-vertical-steps.d.ts +11 -0
  150. package/dist/components/dropi-vertical-steps.js +1 -0
  151. package/dist/components/{p-ChOXWKmI.js → p-CPs3fHRc.js} +1 -1
  152. package/dist/components/p-DKXrREI4.js +1 -0
  153. package/dist/components/p-Ds74ZOlC.js +1 -0
  154. package/dist/components/{p-NCyvfOs2.js → p-WZTFyFH2.js} +1 -1
  155. package/dist/dropi-ui/dropi-ui.esm.js +1 -1
  156. package/dist/dropi-ui/p-061e1ad4.entry.js +1 -0
  157. package/dist/dropi-ui/{p-ecda6e19.entry.js → p-0c13dded.entry.js} +1 -1
  158. package/dist/dropi-ui/{p-79466fec.entry.js → p-121c8a09.entry.js} +1 -1
  159. package/dist/dropi-ui/p-291a1416.entry.js +1 -0
  160. package/dist/dropi-ui/p-2cee44f9.entry.js +1 -0
  161. package/dist/dropi-ui/{p-6031ac9d.entry.js → p-30fdd316.entry.js} +1 -1
  162. package/dist/dropi-ui/p-3537ee5a.entry.js +1 -0
  163. package/dist/dropi-ui/{p-26dbae0d.entry.js → p-3d859657.entry.js} +1 -1
  164. package/dist/dropi-ui/p-433d161d.entry.js +1 -0
  165. package/dist/dropi-ui/p-4bdfad16.entry.js +1 -0
  166. package/dist/dropi-ui/p-4ea7d3a7.entry.js +1 -0
  167. package/dist/dropi-ui/{p-09c38a49.entry.js → p-51c8ef68.entry.js} +1 -1
  168. package/dist/dropi-ui/{p-6d15d32f.entry.js → p-54780c90.entry.js} +1 -1
  169. package/dist/dropi-ui/{p-63e969da.entry.js → p-66deb85e.entry.js} +1 -1
  170. package/dist/dropi-ui/p-68f81080.entry.js +1 -0
  171. package/dist/dropi-ui/p-724a2aea.entry.js +1 -0
  172. package/dist/dropi-ui/p-74c37688.entry.js +1 -0
  173. package/dist/dropi-ui/p-7cec1cea.entry.js +1 -0
  174. package/dist/dropi-ui/{p-f0e1e0f6.entry.js → p-7daa2677.entry.js} +1 -1
  175. package/dist/dropi-ui/p-8906a68d.entry.js +1 -0
  176. package/dist/dropi-ui/{p-1739d20c.entry.js → p-a4204ece.entry.js} +1 -1
  177. package/dist/dropi-ui/p-a9116dbe.entry.js +1 -0
  178. package/dist/dropi-ui/p-b36b819f.entry.js +1 -0
  179. package/dist/dropi-ui/p-c10cbb8d.entry.js +1 -0
  180. package/dist/dropi-ui/{p-42179ae4.entry.js → p-c2316d4d.entry.js} +1 -1
  181. package/dist/dropi-ui/{p-e44242e2.entry.js → p-cb5fd7a9.entry.js} +1 -1
  182. package/dist/dropi-ui/p-d1e1b716.entry.js +1 -0
  183. package/dist/dropi-ui/p-d5ecc394.entry.js +1 -0
  184. package/dist/dropi-ui/p-db6c9828.entry.js +1 -0
  185. package/dist/dropi-ui/{p-4d582d58.entry.js → p-e721127d.entry.js} +1 -1
  186. package/dist/dropi-ui/p-e8557da0.entry.js +1 -0
  187. package/dist/dropi-ui/p-ebfd4665.entry.js +1 -0
  188. package/dist/dropi-ui/p-f3cef35a.entry.js +1 -0
  189. package/dist/dropi-ui/p-f6a69c4e.entry.js +1 -0
  190. package/dist/dropi-ui/{p-65fa8558.entry.js → p-ff45e7c8.entry.js} +1 -1
  191. package/dist/esm/dropi-accordion.entry.js +1 -1
  192. package/dist/esm/dropi-alert.entry.js +56 -0
  193. package/dist/esm/dropi-avatars.entry.js +29 -0
  194. package/dist/esm/dropi-badge.entry.js +1 -1
  195. package/dist/esm/dropi-button.entry.js +2 -2
  196. package/dist/esm/dropi-card-section.entry.js +36 -0
  197. package/dist/esm/dropi-checkbox-selection-list.entry.js +69 -0
  198. package/dist/esm/dropi-checkbox.entry.js +2 -2
  199. package/dist/esm/dropi-chips.entry.js +28 -0
  200. package/dist/esm/dropi-dropdown.entry.js +56 -0
  201. package/dist/esm/dropi-empty-state.entry.js +1 -1
  202. package/dist/esm/dropi-favorite-button.entry.js +25 -0
  203. package/dist/esm/dropi-icon.entry.js +1 -1
  204. package/dist/esm/dropi-image-miniature.entry.js +42 -0
  205. package/dist/esm/dropi-image-overlay.entry.js +60 -0
  206. package/dist/esm/dropi-input.entry.js +5 -5
  207. package/dist/esm/dropi-logo.entry.js +25 -0
  208. package/dist/esm/dropi-lottie-loader.entry.js +25 -0
  209. package/dist/esm/dropi-otp-send-code.entry.js +90 -0
  210. package/dist/esm/dropi-paginator.entry.js +5 -3
  211. package/dist/esm/dropi-radio-button.entry.js +1 -1
  212. package/dist/esm/dropi-radio-selection-list.entry.js +54 -0
  213. package/dist/esm/dropi-read-more.entry.js +34 -0
  214. package/dist/esm/dropi-search.entry.js +108 -0
  215. package/dist/esm/dropi-select.entry.js +1 -1
  216. package/dist/esm/dropi-simple-stepper.entry.js +49 -0
  217. package/dist/esm/dropi-steps.entry.js +48 -0
  218. package/dist/esm/dropi-switch.entry.js +1 -1
  219. package/dist/esm/dropi-tabs.entry.js +1 -1
  220. package/dist/esm/dropi-tag.entry.js +1 -1
  221. package/dist/esm/dropi-text-area.entry.js +3 -3
  222. package/dist/esm/dropi-time-line.entry.js +32 -0
  223. package/dist/esm/dropi-toast.entry.js +1 -1
  224. package/dist/esm/dropi-tooltip.entry.js +1 -1
  225. package/dist/esm/dropi-ui.js +1 -1
  226. package/dist/esm/dropi-vertical-steps.entry.js +53 -0
  227. package/dist/esm/loader.js +1 -1
  228. package/dist/types/components/dropi-alert/dropi-alert.d.ts +35 -0
  229. package/dist/types/components/dropi-avatars/dropi-avatars.d.ts +17 -0
  230. package/dist/types/components/dropi-card-section/dropi-card-section.d.ts +22 -0
  231. package/dist/types/components/dropi-checkbox-selection-list/dropi-checkbox-selection-list.d.ts +37 -0
  232. package/dist/types/components/dropi-chips/dropi-chips.d.ts +23 -0
  233. package/dist/types/components/dropi-dropdown/dropi-dropdown.d.ts +28 -0
  234. package/dist/types/components/dropi-favorite-button/dropi-favorite-button.d.ts +14 -0
  235. package/dist/types/components/dropi-image-miniature/dropi-image-miniature.d.ts +23 -0
  236. package/dist/types/components/dropi-image-overlay/dropi-image-overlay.d.ts +26 -0
  237. package/dist/types/components/dropi-logo/dropi-logo.d.ts +14 -0
  238. package/dist/types/components/dropi-lottie-loader/dropi-lottie-loader.d.ts +15 -0
  239. package/dist/types/components/dropi-otp-send-code/dropi-otp-send-code.d.ts +33 -0
  240. package/dist/types/components/dropi-paginator/dropi-paginator.d.ts +2 -0
  241. package/dist/types/components/dropi-radio-selection-list/dropi-radio-selection-list.d.ts +34 -0
  242. package/dist/types/components/dropi-read-more/dropi-read-more.d.ts +17 -0
  243. package/dist/types/components/dropi-search/dropi-search.d.ts +51 -0
  244. package/dist/types/components/dropi-simple-stepper/dropi-simple-stepper.d.ts +20 -0
  245. package/dist/types/components/dropi-steps/dropi-steps.d.ts +21 -0
  246. package/dist/types/components/dropi-time-line/dropi-time-line.d.ts +18 -0
  247. package/dist/types/components/dropi-vertical-steps/dropi-vertical-steps.d.ts +24 -0
  248. package/dist/types/components.d.ts +1830 -3
  249. package/package.json +1 -1
  250. package/readme.md +189 -2
  251. package/dist/dropi-ui/p-082b7039.entry.js +0 -1
  252. package/dist/dropi-ui/p-eb7f9a57.entry.js +0 -1
  253. package/dist/dropi-ui/p-f283f41d.entry.js +0 -1
@@ -0,0 +1,150 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * @component dropi-image-miniature
4
+ * Grid of image thumbnails with zoom-on-hover overlay trigger.
5
+ */
6
+ export class DropiImageMiniature {
7
+ /** Optional label above the grid */
8
+ label = '';
9
+ /** Array of image URLs. Pass as JSON string or array */
10
+ images = [];
11
+ /** Thumbnail width (CSS value) */
12
+ width = '88px';
13
+ /** Thumbnail height (CSS value) */
14
+ height = '88px';
15
+ /** Emitted when a thumbnail is clicked. e.detail = { images, index } */
16
+ dropiImageClick;
17
+ get parsedImages() {
18
+ if (typeof this.images === 'string') {
19
+ try {
20
+ return JSON.parse(this.images);
21
+ }
22
+ catch {
23
+ return [];
24
+ }
25
+ }
26
+ return this.images || [];
27
+ }
28
+ handleError(e) {
29
+ e.target.src =
30
+ `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA4OCA4OCI+PHJlY3Qgd2lkdGg9Ijg4IiBoZWlnaHQ9Ijg4IiBmaWxsPSIjZjdmOGZhIi8+PHRleHQgeD0iNDQiIHk9IjQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjYzNjOWQ5IiBmb250LXNpemU9IjEyIj5TaW4gaW1hZ2VuPC90ZXh0Pjwvc3ZnPg==`;
31
+ }
32
+ render() {
33
+ const imgs = this.parsedImages;
34
+ return (h("div", { key: '5182a02b3f7da5b1440230c87c8661f5f33bb7be', class: "miniature" }, this.label && h("span", { key: 'bf649e5c27972799d600df583c0953938a1cacad', class: "miniature__label" }, this.label), h("div", { key: '7197ca2d4bbf5d65db4ca71addcf352045734d94', class: "miniature__grid" }, imgs.map((src, i) => (h("div", { class: "miniature__item", style: { width: this.width, height: this.height }, key: i, onClick: () => this.dropiImageClick.emit({ images: imgs, index: i }) }, h("img", { src: src, alt: `imagen ${i + 1}`, loading: "lazy", onError: (e) => this.handleError(e) }), h("div", { class: "miniature__zoom" }, h("dropi-icon", { name: "Search", width: "16px", height: "16px", color: "Neutral-White" }))))))));
35
+ }
36
+ static get is() { return "dropi-image-miniature"; }
37
+ static get encapsulation() { return "shadow"; }
38
+ static get originalStyleUrls() {
39
+ return {
40
+ "$": ["dropi-image-miniature.css"]
41
+ };
42
+ }
43
+ static get styleUrls() {
44
+ return {
45
+ "$": ["dropi-image-miniature.css"]
46
+ };
47
+ }
48
+ static get properties() {
49
+ return {
50
+ "label": {
51
+ "type": "string",
52
+ "mutable": false,
53
+ "complexType": {
54
+ "original": "string",
55
+ "resolved": "string",
56
+ "references": {}
57
+ },
58
+ "required": false,
59
+ "optional": false,
60
+ "docs": {
61
+ "tags": [],
62
+ "text": "Optional label above the grid"
63
+ },
64
+ "getter": false,
65
+ "setter": false,
66
+ "reflect": false,
67
+ "attribute": "label",
68
+ "defaultValue": "''"
69
+ },
70
+ "images": {
71
+ "type": "string",
72
+ "mutable": false,
73
+ "complexType": {
74
+ "original": "string[] | string",
75
+ "resolved": "string | string[]",
76
+ "references": {}
77
+ },
78
+ "required": false,
79
+ "optional": false,
80
+ "docs": {
81
+ "tags": [],
82
+ "text": "Array of image URLs. Pass as JSON string or array"
83
+ },
84
+ "getter": false,
85
+ "setter": false,
86
+ "reflect": false,
87
+ "attribute": "images",
88
+ "defaultValue": "[]"
89
+ },
90
+ "width": {
91
+ "type": "string",
92
+ "mutable": false,
93
+ "complexType": {
94
+ "original": "string",
95
+ "resolved": "string",
96
+ "references": {}
97
+ },
98
+ "required": false,
99
+ "optional": false,
100
+ "docs": {
101
+ "tags": [],
102
+ "text": "Thumbnail width (CSS value)"
103
+ },
104
+ "getter": false,
105
+ "setter": false,
106
+ "reflect": false,
107
+ "attribute": "width",
108
+ "defaultValue": "'88px'"
109
+ },
110
+ "height": {
111
+ "type": "string",
112
+ "mutable": false,
113
+ "complexType": {
114
+ "original": "string",
115
+ "resolved": "string",
116
+ "references": {}
117
+ },
118
+ "required": false,
119
+ "optional": false,
120
+ "docs": {
121
+ "tags": [],
122
+ "text": "Thumbnail height (CSS value)"
123
+ },
124
+ "getter": false,
125
+ "setter": false,
126
+ "reflect": false,
127
+ "attribute": "height",
128
+ "defaultValue": "'88px'"
129
+ }
130
+ };
131
+ }
132
+ static get events() {
133
+ return [{
134
+ "method": "dropiImageClick",
135
+ "name": "dropiImageClick",
136
+ "bubbles": true,
137
+ "cancelable": true,
138
+ "composed": true,
139
+ "docs": {
140
+ "tags": [],
141
+ "text": "Emitted when a thumbnail is clicked. e.detail = { images, index }"
142
+ },
143
+ "complexType": {
144
+ "original": "{ images: string[]; index: number }",
145
+ "resolved": "{ images: string[]; index: number; }",
146
+ "references": {}
147
+ }
148
+ }];
149
+ }
150
+ }
@@ -0,0 +1,82 @@
1
+ :host { display: block; }
2
+
3
+ .overlay {
4
+ position: fixed;
5
+ inset: 0;
6
+ background: rgba(0,0,0,0.92);
7
+ display: flex;
8
+ flex-direction: column;
9
+ align-items: center;
10
+ justify-content: center;
11
+ z-index: 9999;
12
+ gap: var(--Size-3, 12px);
13
+ }
14
+
15
+ .overlay__close {
16
+ position: absolute;
17
+ top: var(--Size-4, 16px);
18
+ right: var(--Size-4, 16px);
19
+ background: rgba(255,255,255,0.1);
20
+ border: none;
21
+ border-radius: 50%;
22
+ width: 40px;
23
+ height: 40px;
24
+ display: flex;
25
+ align-items: center;
26
+ justify-content: center;
27
+ cursor: pointer;
28
+ transition: background 0.15s;
29
+ }
30
+ .overlay__close:hover { background: rgba(255,255,255,0.2); }
31
+
32
+ .overlay__main {
33
+ position: relative;
34
+ display: flex;
35
+ align-items: center;
36
+ gap: var(--Size-3, 12px);
37
+ max-width: 90vw;
38
+ max-height: 75vh;
39
+ }
40
+
41
+ .overlay__image {
42
+ max-width: 80vw;
43
+ max-height: 72vh;
44
+ object-fit: contain;
45
+ border-radius: var(--Border-2, 8px);
46
+ }
47
+
48
+ .overlay__nav {
49
+ background: rgba(255,255,255,0.1);
50
+ border: none;
51
+ border-radius: 50%;
52
+ width: 44px;
53
+ height: 44px;
54
+ display: flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ cursor: pointer;
58
+ flex-shrink: 0;
59
+ transition: background 0.15s;
60
+ }
61
+ .overlay__nav:hover { background: rgba(255,255,255,0.2); }
62
+
63
+ .overlay__thumbs {
64
+ display: flex;
65
+ gap: var(--Size-2, 8px);
66
+ flex-wrap: wrap;
67
+ justify-content: center;
68
+ max-width: 90vw;
69
+ }
70
+
71
+ .overlay__thumb {
72
+ width: 56px;
73
+ height: 56px;
74
+ object-fit: cover;
75
+ border-radius: var(--Border-1, 4px);
76
+ cursor: pointer;
77
+ opacity: 0.5;
78
+ border: 2px solid transparent;
79
+ transition: opacity 0.15s, border-color 0.15s;
80
+ }
81
+ .overlay__thumb:hover { opacity: 0.8; }
82
+ .overlay__thumb--active { opacity: 1; border-color: var(--Primary-Primary-500, #f49a3d); }
@@ -0,0 +1,155 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * @component dropi-image-overlay
4
+ * Full-screen image lightbox with prev/next navigation and thumbnails.
5
+ */
6
+ export class DropiImageOverlay {
7
+ /** Whether the overlay is visible */
8
+ visible = false;
9
+ /** Images array or JSON string */
10
+ images = [];
11
+ /** Initially active image index */
12
+ activeIndex = 0;
13
+ current = 0;
14
+ parsedImages = [];
15
+ /** Emitted when overlay closes */
16
+ dropiClose;
17
+ imagesChanged(val) {
18
+ this.parsedImages = typeof val === 'string' ? JSON.parse(val) : (val || []);
19
+ }
20
+ indexChanged(val) { this.current = val; }
21
+ visibleChanged(val) {
22
+ if (val)
23
+ this.current = this.activeIndex;
24
+ }
25
+ componentWillLoad() {
26
+ this.imagesChanged(this.images);
27
+ this.current = this.activeIndex;
28
+ }
29
+ close() { this.visible = false; this.dropiClose.emit(); }
30
+ prev() { this.current = (this.current - 1 + this.parsedImages.length) % this.parsedImages.length; }
31
+ next() { this.current = (this.current + 1) % this.parsedImages.length; }
32
+ handleError(e) {
33
+ e.target.src =
34
+ `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMzAwIj48cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjMwMCIgZmlsbD0iIzFhMjAzMyIvPjx0ZXh0IHg9IjIwMCIgeT0iMTU1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmaWxsPSIjNDc1MDY2IiBmb250LXNpemU9IjE0Ij5TaW4gaW1hZ2VuPC90ZXh0Pjwvc3ZnPg==`;
35
+ }
36
+ render() {
37
+ if (!this.visible)
38
+ return null;
39
+ const imgs = this.parsedImages;
40
+ const multi = imgs.length > 1;
41
+ return (h("div", { class: "overlay", onClick: () => this.close() }, h("button", { class: "overlay__close", onClick: (e) => { e.stopPropagation(); this.close(); }, "aria-label": "Cerrar" }, h("dropi-icon", { name: "Close-small", width: "24px", height: "24px", color: "Neutral-White" })), h("div", { class: "overlay__main", onClick: (e) => e.stopPropagation() }, multi && (h("button", { class: "overlay__nav overlay__nav--prev", onClick: () => this.prev(), "aria-label": "Anterior" }, h("dropi-icon", { name: "Dropdown-left", width: "24px", height: "24px", color: "Neutral-White" }))), h("img", { class: "overlay__image", src: imgs[this.current], alt: `imagen ${this.current + 1}`, onError: (e) => this.handleError(e) }), multi && (h("button", { class: "overlay__nav overlay__nav--next", onClick: () => this.next(), "aria-label": "Siguiente" }, h("dropi-icon", { name: "Dropdown-Right", width: "24px", height: "24px", color: "Neutral-White" })))), multi && (h("div", { class: "overlay__thumbs", onClick: (e) => e.stopPropagation() }, imgs.map((src, i) => (h("img", { key: i, class: { 'overlay__thumb': true, 'overlay__thumb--active': i === this.current }, src: src, alt: `miniatura ${i + 1}`, onClick: () => this.current = i, onError: (e) => this.handleError(e) })))))));
42
+ }
43
+ static get is() { return "dropi-image-overlay"; }
44
+ static get encapsulation() { return "shadow"; }
45
+ static get originalStyleUrls() {
46
+ return {
47
+ "$": ["dropi-image-overlay.css"]
48
+ };
49
+ }
50
+ static get styleUrls() {
51
+ return {
52
+ "$": ["dropi-image-overlay.css"]
53
+ };
54
+ }
55
+ static get properties() {
56
+ return {
57
+ "visible": {
58
+ "type": "boolean",
59
+ "mutable": true,
60
+ "complexType": {
61
+ "original": "boolean",
62
+ "resolved": "boolean",
63
+ "references": {}
64
+ },
65
+ "required": false,
66
+ "optional": false,
67
+ "docs": {
68
+ "tags": [],
69
+ "text": "Whether the overlay is visible"
70
+ },
71
+ "getter": false,
72
+ "setter": false,
73
+ "reflect": false,
74
+ "attribute": "visible",
75
+ "defaultValue": "false"
76
+ },
77
+ "images": {
78
+ "type": "string",
79
+ "mutable": false,
80
+ "complexType": {
81
+ "original": "string[] | string",
82
+ "resolved": "string | string[]",
83
+ "references": {}
84
+ },
85
+ "required": false,
86
+ "optional": false,
87
+ "docs": {
88
+ "tags": [],
89
+ "text": "Images array or JSON string"
90
+ },
91
+ "getter": false,
92
+ "setter": false,
93
+ "reflect": false,
94
+ "attribute": "images",
95
+ "defaultValue": "[]"
96
+ },
97
+ "activeIndex": {
98
+ "type": "number",
99
+ "mutable": true,
100
+ "complexType": {
101
+ "original": "number",
102
+ "resolved": "number",
103
+ "references": {}
104
+ },
105
+ "required": false,
106
+ "optional": false,
107
+ "docs": {
108
+ "tags": [],
109
+ "text": "Initially active image index"
110
+ },
111
+ "getter": false,
112
+ "setter": false,
113
+ "reflect": false,
114
+ "attribute": "active-index",
115
+ "defaultValue": "0"
116
+ }
117
+ };
118
+ }
119
+ static get states() {
120
+ return {
121
+ "current": {},
122
+ "parsedImages": {}
123
+ };
124
+ }
125
+ static get events() {
126
+ return [{
127
+ "method": "dropiClose",
128
+ "name": "dropiClose",
129
+ "bubbles": true,
130
+ "cancelable": true,
131
+ "composed": true,
132
+ "docs": {
133
+ "tags": [],
134
+ "text": "Emitted when overlay closes"
135
+ },
136
+ "complexType": {
137
+ "original": "void",
138
+ "resolved": "void",
139
+ "references": {}
140
+ }
141
+ }];
142
+ }
143
+ static get watchers() {
144
+ return [{
145
+ "propName": "images",
146
+ "methodName": "imagesChanged"
147
+ }, {
148
+ "propName": "activeIndex",
149
+ "methodName": "indexChanged"
150
+ }, {
151
+ "propName": "visible",
152
+ "methodName": "visibleChanged"
153
+ }];
154
+ }
155
+ }
@@ -109,6 +109,17 @@
109
109
  padding-left: 28px;
110
110
  }
111
111
 
112
+ /* When icon is always visible, shift the floating label right to avoid overlap */
113
+ .input-container--has-icon label.label-bottom {
114
+ left: 28px;
115
+ }
116
+
117
+ /* When focused or has value, float up to left: 0 regardless */
118
+ .input-container--has-icon .form-control:focus + label.label-bottom,
119
+ .input-container--has-icon .form-control:not(:placeholder-shown) + label.label-bottom {
120
+ left: 0;
121
+ }
122
+
112
123
  /* Password: hide characters via CSS (no type=password needed for font trick) */
113
124
  .text-password {
114
125
  -webkit-text-security: disc;
@@ -101,7 +101,7 @@ export class DropiInput {
101
101
  this.dropiInput.emit(val);
102
102
  }
103
103
  handleKeyDown(e) {
104
- if (this.onlyNumbers && !this.isAllowedNumberKey(e)) {
104
+ if ((this.onlyNumbers || this.moneyFormat || this.thousandSeparator) && !this.isAllowedNumberKey(e)) {
105
105
  e.preventDefault();
106
106
  }
107
107
  if (this.onlyLetters && !this.isAllowedLetterKey(e)) {
@@ -178,15 +178,15 @@ export class DropiInput {
178
178
  // ── Render ───────────────────────────────────────────────────
179
179
  render() {
180
180
  const showAsterisk = this.required && this.showAsterisk && !this.disabled;
181
- const showIconInline = !!this.icon && !!this.value;
182
- return (h("div", { key: '4ea9c2118e6452345a2a92eedc807e6d94019784', class: { 'fixed-label-container': this.fixedLabel } }, this.fixedLabel && (h("div", { key: 'b8c1269e9d583becd9614f6f3c28f6a2b536f18f', class: "input-label Body-S-Regular" }, this.label, showAsterisk && h("span", { key: '945665772caab1a1c95f1a054dea1b8dd88287a3', class: "asterisk" }, " *"))), h("div", { key: 'f550584dde83c907429255d9a98b8a59ff322cbb', class: "form-group" }, h("div", { key: '6cc46f5822e62d59bb211e7d9eb7909ab2b833c9', class: "input-container" }, showIconInline && (h("dropi-icon", { key: 'c860e808ae7cd805aa9c430d52743f7eab0aaeba', class: "icon-input", name: this.icon, color: this.iconColor, width: "20px", height: "20px" })), this.passwordInput && (h("dropi-icon", { key: 'ba571d4d14ec2a911a8b0bd4cdc7a8481aebe746', class: "icon-input-password", name: this.showPassword ? 'Eye' : 'Eye-crossed', width: "20px", height: "20px", color: "Gray-Gray-500", onClick: () => this.togglePassword() })), h("input", { key: 'aad18a94d94c9600236bac7c23e38b1c1c41f06a', id: this.resolvedId, class: {
181
+ const showIconInline = !!this.icon;
182
+ return (h("div", { key: '444e873dc4175e75a5c85814499e28afb3f80b37', class: { 'fixed-label-container': this.fixedLabel } }, this.fixedLabel && (h("div", { key: 'a501500f872b87ad701f5c18e0e3b532005c3fcb', class: "input-label Body-S-Regular" }, this.label, showAsterisk && h("span", { key: '1ca3afb47b67cfb61cd8bceb8657c9f061462064', class: "asterisk" }, " *"))), h("div", { key: 'eb31110de652f6db7c5fdd747046280b0e81e2b6', class: "form-group" }, h("div", { key: 'b0bb2cac1e8d7f20d927437e4ba6327e333d1fdb', class: { 'input-container': true, 'input-container--has-icon': showIconInline } }, showIconInline && (h("dropi-icon", { key: '604a369b358b1c95a19cc23dd4bc4f9c77e4b050', class: "icon-input", name: this.icon, color: this.iconColor, width: "20px", height: "20px" })), this.passwordInput && (h("dropi-icon", { key: 'b1b3b979d172ada0c3fe616f795c7cd5b2bf45cb', class: "icon-input-password", name: this.showPassword ? 'Eye' : 'Eye-crossed', width: "20px", height: "20px", color: "Gray-Gray-500", onClick: () => this.togglePassword() })), h("input", { key: 'b5488711765a12b6e9fea7b0f8d5a23ae95de925', id: this.resolvedId, class: {
183
183
  'form-control': true,
184
184
  'form-control-valid': !this.isInvalid && this.touched && !!this.value,
185
185
  'form-control-invalid': this.isInvalid,
186
186
  'padding-icon': showIconInline,
187
187
  'text-password': this.passwordInput && !this.showPassword,
188
188
  'fixed-label-input': this.fixedLabel,
189
- }, type: this.inputType, value: this.value, placeholder: this.fixedLabel ? this.placeholder : ' ', disabled: this.disabled, required: this.required, maxLength: this.maxlength, inputMode: this.inputMode, "data-cy": undefined, onInput: (e) => this.handleInput(e), onKeyDown: (e) => this.handleKeyDown(e), onFocus: () => this.handleFocus(), onBlur: () => this.handleBlur() }), !this.fixedLabel && (h("label", { key: '8ba7ea50525aa8990662d45829ba732094c41f80', class: "Body-S-Regular label-bottom", htmlFor: this.resolvedId }, this.label, showAsterisk && h("span", { key: '3916d3de6392da62b8086920cd2fce3b96238416', class: "asterisk" }, " *"))), this.showHelper && (h("div", { key: '83e17f7d0cdb503b86fd035775e1cb45d9f41709', class: "form-control-helper" }, this.isInvalid && (h("dropi-icon", { key: '4e034348270853f8a3aafbbbb938a5974076aebd', name: "Warning-circle", width: "12px", height: "12px", color: "Error-Error-500" })), h("span", { key: '7832f200ccc6f6273d65012b9e642c313399a277', class: {
189
+ }, type: this.inputType, value: this.value, placeholder: this.fixedLabel ? this.placeholder : ' ', disabled: this.disabled, required: this.required, maxLength: this.maxlength, inputMode: this.inputMode, "data-cy": undefined, onInput: (e) => this.handleInput(e), onKeyDown: (e) => this.handleKeyDown(e), onFocus: () => this.handleFocus(), onBlur: () => this.handleBlur() }), !this.fixedLabel && (h("label", { key: 'f3008d901c41e6f362977e1232e7597733c4288e', class: "Body-S-Regular label-bottom", htmlFor: this.resolvedId }, this.label, showAsterisk && h("span", { key: '1b982a1630f88557380df2f22c0c27bcceebbdc6', class: "asterisk" }, " *"))), this.showHelper && (h("div", { key: '30382a8e7beb0a14bb06f8fd25dae3da5371efd3', class: "form-control-helper" }, this.isInvalid && (h("dropi-icon", { key: 'a1ef2b7a9a659301cc22c19d5e5f65bd7a595a2c', name: "Warning-circle", width: "12px", height: "12px", color: "Error-Error-500" })), h("span", { key: '289250769c59d1ddde821395a9e97368404ca1ab', class: {
190
190
  'disabled-helper': this.disabled,
191
191
  'invalid-color': this.isInvalid,
192
192
  } }, this.helperText)))))));
@@ -0,0 +1,26 @@
1
+ :host {
2
+ display: inline-block;
3
+ }
4
+
5
+ .dropi-logo {
6
+ margin: 0;
7
+ padding: 0;
8
+ display: flex;
9
+ align-items: center;
10
+ justify-content: center;
11
+ }
12
+
13
+ .dropi-logo img {
14
+ display: block;
15
+ object-fit: contain;
16
+ }
17
+
18
+ .dropi-logo--large img {
19
+ width: 256px;
20
+ height: 84px;
21
+ }
22
+
23
+ .dropi-logo--small img {
24
+ width: 86px;
25
+ height: 81px;
26
+ }
@@ -0,0 +1,96 @@
1
+ import { h } from "@stencil/core";
2
+ const FALLBACK_SVG = `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgNDAiPjx0ZXh0IHk9IjMwIiBmb250LXNpemU9IjI0IiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZmlsbD0iI2Y0OWEzZCI+ZHJvcGk8L3RleHQ+PC9zdmc+`;
3
+ /**
4
+ * @component dropi-logo
5
+ * Displays the Dropi brand logo with size variants.
6
+ */
7
+ export class DropiLogo {
8
+ /** Logo image URL */
9
+ urlLogo = '';
10
+ /** Size variant */
11
+ size = 'large';
12
+ /** Theme (reserved for future use) */
13
+ theme = 'light';
14
+ handleError(e) {
15
+ e.target.src = FALLBACK_SVG;
16
+ }
17
+ render() {
18
+ return (h("figure", { key: '6b3335e9c4e8d799106f3c2080822d35d74bb16d', class: { 'dropi-logo': true, [`dropi-logo--${this.size}`]: true } }, h("img", { key: 'e54ff2f0d1fb1f0f4eea4c46aae7a39f69268217', src: this.urlLogo || FALLBACK_SVG, alt: "Dropi logo", loading: "lazy", onError: (e) => this.handleError(e) })));
19
+ }
20
+ static get is() { return "dropi-logo"; }
21
+ static get encapsulation() { return "shadow"; }
22
+ static get originalStyleUrls() {
23
+ return {
24
+ "$": ["dropi-logo.css"]
25
+ };
26
+ }
27
+ static get styleUrls() {
28
+ return {
29
+ "$": ["dropi-logo.css"]
30
+ };
31
+ }
32
+ static get properties() {
33
+ return {
34
+ "urlLogo": {
35
+ "type": "string",
36
+ "mutable": false,
37
+ "complexType": {
38
+ "original": "string",
39
+ "resolved": "string",
40
+ "references": {}
41
+ },
42
+ "required": false,
43
+ "optional": false,
44
+ "docs": {
45
+ "tags": [],
46
+ "text": "Logo image URL"
47
+ },
48
+ "getter": false,
49
+ "setter": false,
50
+ "reflect": false,
51
+ "attribute": "url-logo",
52
+ "defaultValue": "''"
53
+ },
54
+ "size": {
55
+ "type": "string",
56
+ "mutable": false,
57
+ "complexType": {
58
+ "original": "'small' | 'large'",
59
+ "resolved": "\"large\" | \"small\"",
60
+ "references": {}
61
+ },
62
+ "required": false,
63
+ "optional": false,
64
+ "docs": {
65
+ "tags": [],
66
+ "text": "Size variant"
67
+ },
68
+ "getter": false,
69
+ "setter": false,
70
+ "reflect": false,
71
+ "attribute": "size",
72
+ "defaultValue": "'large'"
73
+ },
74
+ "theme": {
75
+ "type": "string",
76
+ "mutable": false,
77
+ "complexType": {
78
+ "original": "'dark' | 'light'",
79
+ "resolved": "\"dark\" | \"light\"",
80
+ "references": {}
81
+ },
82
+ "required": false,
83
+ "optional": false,
84
+ "docs": {
85
+ "tags": [],
86
+ "text": "Theme (reserved for future use)"
87
+ },
88
+ "getter": false,
89
+ "setter": false,
90
+ "reflect": false,
91
+ "attribute": "theme",
92
+ "defaultValue": "'light'"
93
+ }
94
+ };
95
+ }
96
+ }
@@ -0,0 +1,50 @@
1
+ :host {
2
+ display: block;
3
+ }
4
+
5
+ .loader-overlay {
6
+ position: fixed;
7
+ inset: 0;
8
+ display: flex;
9
+ align-items: center;
10
+ justify-content: center;
11
+ background: rgba(255, 255, 255, 0.85);
12
+ z-index: 9999;
13
+ }
14
+
15
+ .loader-container {
16
+ display: flex;
17
+ flex-direction: column;
18
+ align-items: center;
19
+ gap: var(--Size-4, 16px);
20
+ }
21
+
22
+ .lottie-animation {
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: center;
26
+ width: 200px;
27
+ height: 200px;
28
+ }
29
+
30
+ .loader-text {
31
+ display: flex;
32
+ flex-direction: column;
33
+ align-items: center;
34
+ gap: var(--Size-2, 8px);
35
+ text-align: center;
36
+ }
37
+
38
+ .loader-title {
39
+ margin: 0;
40
+ font-size: var(--font-size-m, 14px);
41
+ font-weight: var(--font-weight-bold, 700);
42
+ color: var(--Gray-Gray-700, #32394d);
43
+ }
44
+
45
+ .loader-message {
46
+ margin: 0;
47
+ font-size: var(--font-size-s, 12px);
48
+ font-weight: var(--font-weight-regular, 400);
49
+ color: var(--Gray-Gray-500, #69738c);
50
+ }