@shibui-ui/ui 1.24.1 → 1.25.1

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 (460) hide show
  1. package/dist/components/atoms/index.d.ts +45 -16
  2. package/dist/components/atoms/index.d.ts.map +1 -1
  3. package/dist/components/molecules/index.d.ts +20 -1
  4. package/dist/components/molecules/index.d.ts.map +1 -1
  5. package/dist/components/organisms/index.d.ts +17 -1
  6. package/dist/components/organisms/index.d.ts.map +1 -1
  7. package/dist/index.d.ts +3 -82
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +79 -80
  10. package/dist/index.js.map +1 -1
  11. package/dist/index10.js +82 -18
  12. package/dist/index10.js.map +1 -1
  13. package/dist/index11.js +84 -69
  14. package/dist/index11.js.map +1 -1
  15. package/dist/index12.js +40 -26
  16. package/dist/index12.js.map +1 -1
  17. package/dist/index13.js +16 -39
  18. package/dist/index13.js.map +1 -1
  19. package/dist/index14.js +29 -44
  20. package/dist/index14.js.map +1 -1
  21. package/dist/index15.js +16 -117
  22. package/dist/index15.js.map +1 -1
  23. package/dist/index16.js +48 -40
  24. package/dist/index16.js.map +1 -1
  25. package/dist/index17.js +41 -25
  26. package/dist/index17.js.map +1 -1
  27. package/dist/index18.js +76 -49
  28. package/dist/index18.js.map +1 -1
  29. package/dist/index19.js +19 -39
  30. package/dist/index19.js.map +1 -1
  31. package/dist/index194.js +94 -24
  32. package/dist/index194.js.map +1 -1
  33. package/dist/index195.js +2 -2
  34. package/dist/index197.js +2 -24
  35. package/dist/index197.js.map +1 -1
  36. package/dist/index198.js +74 -2
  37. package/dist/index198.js.map +1 -1
  38. package/dist/index199.js +64 -35
  39. package/dist/index199.js.map +1 -1
  40. package/dist/index20.js +21 -41
  41. package/dist/index20.js.map +1 -1
  42. package/dist/index200.js +2 -2
  43. package/dist/index201.js +54 -13
  44. package/dist/index201.js.map +1 -1
  45. package/dist/index202.js +2 -2
  46. package/dist/index203.js +2 -2
  47. package/dist/index204.js +143 -157
  48. package/dist/index204.js.map +1 -1
  49. package/dist/index205.js +43 -24
  50. package/dist/index205.js.map +1 -1
  51. package/dist/index206.js +51 -2
  52. package/dist/index206.js.map +1 -1
  53. package/dist/index207.js +2 -11
  54. package/dist/index207.js.map +1 -1
  55. package/dist/index208.js +33 -2
  56. package/dist/index208.js.map +1 -1
  57. package/dist/index209.js +2 -91
  58. package/dist/index209.js.map +1 -1
  59. package/dist/index21.js +90 -26
  60. package/dist/index21.js.map +1 -1
  61. package/dist/index210.js +6 -2
  62. package/dist/index210.js.map +1 -1
  63. package/dist/index211.js +2 -41
  64. package/dist/index211.js.map +1 -1
  65. package/dist/index212.js +260 -2
  66. package/dist/index212.js.map +1 -1
  67. package/dist/index213.js +16 -5
  68. package/dist/index213.js.map +1 -1
  69. package/dist/index214.js +2 -2
  70. package/dist/index215.js +2 -35
  71. package/dist/index215.js.map +1 -1
  72. package/dist/index216.js +59 -42
  73. package/dist/index216.js.map +1 -1
  74. package/dist/index217.js +32 -2
  75. package/dist/index217.js.map +1 -1
  76. package/dist/index218.js +2 -85
  77. package/dist/index218.js.map +1 -1
  78. package/dist/index219.js +2 -2
  79. package/dist/index22.js +41 -48
  80. package/dist/index22.js.map +1 -1
  81. package/dist/index220.js +73 -65
  82. package/dist/index220.js.map +1 -1
  83. package/dist/index221.js +81 -2
  84. package/dist/index221.js.map +1 -1
  85. package/dist/index222.js +2 -10
  86. package/dist/index222.js.map +1 -1
  87. package/dist/index223.js +133 -2
  88. package/dist/index223.js.map +1 -1
  89. package/dist/index224.js +2 -26
  90. package/dist/index224.js.map +1 -1
  91. package/dist/index225.js +2 -2
  92. package/dist/index226.js +66 -12
  93. package/dist/index226.js.map +1 -1
  94. package/dist/index227.js +97 -2
  95. package/dist/index227.js.map +1 -1
  96. package/dist/index228.js +2 -2
  97. package/dist/index229.js +62 -24
  98. package/dist/index229.js.map +1 -1
  99. package/dist/index23.js +50 -94
  100. package/dist/index23.js.map +1 -1
  101. package/dist/index230.js +2 -2
  102. package/dist/index231.js +2 -2
  103. package/dist/index232.js +12 -2
  104. package/dist/index232.js.map +1 -1
  105. package/dist/index233.js +5 -16
  106. package/dist/index233.js.map +1 -1
  107. package/dist/index234.js +2 -2
  108. package/dist/index235.js +11 -9
  109. package/dist/index235.js.map +1 -1
  110. package/dist/index236.js +2 -2
  111. package/dist/index237.js +76 -34
  112. package/dist/index237.js.map +1 -1
  113. package/dist/index238.js +2 -2
  114. package/dist/index239.js +2 -27
  115. package/dist/index239.js.map +1 -1
  116. package/dist/index24.js +37 -34
  117. package/dist/index24.js.map +1 -1
  118. package/dist/index240.js +39 -2
  119. package/dist/index240.js.map +1 -1
  120. package/dist/index241.js +2 -34
  121. package/dist/index241.js.map +1 -1
  122. package/dist/index242.js +235 -12
  123. package/dist/index242.js.map +1 -1
  124. package/dist/index243.js +82 -2
  125. package/dist/index243.js.map +1 -1
  126. package/dist/index244.js +2 -9
  127. package/dist/index244.js.map +1 -1
  128. package/dist/index245.js +94 -2
  129. package/dist/index245.js.map +1 -1
  130. package/dist/index246.js +2 -5
  131. package/dist/index246.js.map +1 -1
  132. package/dist/index247.js +268 -2
  133. package/dist/index247.js.map +1 -1
  134. package/dist/index248.js +2 -36
  135. package/dist/index248.js.map +1 -1
  136. package/dist/index249.js +21 -2
  137. package/dist/index249.js.map +1 -1
  138. package/dist/index25.js +51 -32
  139. package/dist/index25.js.map +1 -1
  140. package/dist/index250.js +2 -31
  141. package/dist/index250.js.map +1 -1
  142. package/dist/index251.js +9 -2
  143. package/dist/index251.js.map +1 -1
  144. package/dist/index252.js +2 -19
  145. package/dist/index252.js.map +1 -1
  146. package/dist/index253.js +15 -2
  147. package/dist/index253.js.map +1 -1
  148. package/dist/index254.js +2 -2
  149. package/dist/index255.js +135 -69
  150. package/dist/index255.js.map +1 -1
  151. package/dist/index256.js +2 -11
  152. package/dist/index256.js.map +1 -1
  153. package/dist/index257.js +5 -2
  154. package/dist/index257.js.map +1 -1
  155. package/dist/index258.js +2 -78
  156. package/dist/index258.js.map +1 -1
  157. package/dist/index259.js +9 -2
  158. package/dist/index259.js.map +1 -1
  159. package/dist/index26.js +31 -236
  160. package/dist/index26.js.map +1 -1
  161. package/dist/index260.js +2 -32
  162. package/dist/index260.js.map +1 -1
  163. package/dist/index261.js +2 -2
  164. package/dist/index262.js +92 -9
  165. package/dist/index262.js.map +1 -1
  166. package/dist/index263.js +59 -2
  167. package/dist/index263.js.map +1 -1
  168. package/dist/index264.js +2 -16
  169. package/dist/index264.js.map +1 -1
  170. package/dist/index265.js +41 -2
  171. package/dist/index265.js.map +1 -1
  172. package/dist/index266.js +2 -16
  173. package/dist/index266.js.map +1 -1
  174. package/dist/index267.js +34 -9
  175. package/dist/index267.js.map +1 -1
  176. package/dist/index268.js +8 -54
  177. package/dist/index268.js.map +1 -1
  178. package/dist/index269.js +2 -2
  179. package/dist/index27.js +27 -58
  180. package/dist/index27.js.map +1 -1
  181. package/dist/index270.js +42 -7
  182. package/dist/index270.js.map +1 -1
  183. package/dist/index271.js +2 -2
  184. package/dist/index272.js +2 -34
  185. package/dist/index272.js.map +1 -1
  186. package/dist/index273.js +16 -2
  187. package/dist/index273.js.map +1 -1
  188. package/dist/index274.js +9 -2
  189. package/dist/index274.js.map +1 -1
  190. package/dist/index275.js +6 -13
  191. package/dist/index275.js.map +1 -1
  192. package/dist/index276.js +2 -2
  193. package/dist/index277.js +8 -15
  194. package/dist/index277.js.map +1 -1
  195. package/dist/index278.js +2 -2
  196. package/dist/index279.js +55 -2
  197. package/dist/index279.js.map +1 -1
  198. package/dist/index28.js +247 -24
  199. package/dist/index28.js.map +1 -1
  200. package/dist/index280.js +2 -42
  201. package/dist/index280.js.map +1 -1
  202. package/dist/index281.js +2 -100
  203. package/dist/index281.js.map +1 -1
  204. package/dist/index282.js +20 -2
  205. package/dist/index282.js.map +1 -1
  206. package/dist/index283.js +2 -97
  207. package/dist/index283.js.map +1 -1
  208. package/dist/index284.js +33 -2
  209. package/dist/index284.js.map +1 -1
  210. package/dist/index285.js +6 -27
  211. package/dist/index285.js.map +1 -1
  212. package/dist/index286.js +2 -2
  213. package/dist/index287.js +9 -44
  214. package/dist/index287.js.map +1 -1
  215. package/dist/index288.js +2 -2
  216. package/dist/index289.js +2 -33
  217. package/dist/index289.js.map +1 -1
  218. package/dist/index29.js +249 -39
  219. package/dist/index29.js.map +1 -1
  220. package/dist/index290.js +36 -2
  221. package/dist/index290.js.map +1 -1
  222. package/dist/index291.js +2 -57
  223. package/dist/index291.js.map +1 -1
  224. package/dist/index292.js +24 -2
  225. package/dist/index292.js.map +1 -1
  226. package/dist/index293.js +2 -2
  227. package/dist/index294.js +26 -247
  228. package/dist/index294.js.map +1 -1
  229. package/dist/index295.js +2 -2
  230. package/dist/index296.js +2 -72
  231. package/dist/index296.js.map +1 -1
  232. package/dist/index297.js +42 -2
  233. package/dist/index297.js.map +1 -1
  234. package/dist/index298.js +7 -56
  235. package/dist/index298.js.map +1 -1
  236. package/dist/index299.js +2 -133
  237. package/dist/index299.js.map +1 -1
  238. package/dist/index30.js +32 -19
  239. package/dist/index30.js.map +1 -1
  240. package/dist/index300.js +30 -2
  241. package/dist/index300.js.map +1 -1
  242. package/dist/index301.js +2 -12
  243. package/dist/index301.js.map +1 -1
  244. package/dist/index302.js +34 -2
  245. package/dist/index302.js.map +1 -1
  246. package/dist/index303.js +2 -162
  247. package/dist/index303.js.map +1 -1
  248. package/dist/index304.js +26 -42
  249. package/dist/index304.js.map +1 -1
  250. package/dist/index305.js +2 -81
  251. package/dist/index305.js.map +1 -1
  252. package/dist/index306.js +10 -2
  253. package/dist/index306.js.map +1 -1
  254. package/dist/index307.js +2 -71
  255. package/dist/index307.js.map +1 -1
  256. package/dist/index308.js +2 -2
  257. package/dist/index309.js +19 -2
  258. package/dist/index309.js.map +1 -1
  259. package/dist/index31.js +96 -11
  260. package/dist/index31.js.map +1 -1
  261. package/dist/index310.js +2 -81
  262. package/dist/index310.js.map +1 -1
  263. package/dist/index311.js +2 -2
  264. package/dist/index312.js +42 -2
  265. package/dist/index312.js.map +1 -1
  266. package/dist/index313.js +2 -74
  267. package/dist/index313.js.map +1 -1
  268. package/dist/index314.js +25 -67
  269. package/dist/index314.js.map +1 -1
  270. package/dist/index315.js +2 -2
  271. package/dist/index316.js +9 -17
  272. package/dist/index316.js.map +1 -1
  273. package/dist/index317.js +2 -2
  274. package/dist/index318.js +84 -32
  275. package/dist/index318.js.map +1 -1
  276. package/dist/index319.js +2 -2
  277. package/dist/index32.js +40 -48
  278. package/dist/index32.js.map +1 -1
  279. package/dist/index320.js +68 -77
  280. package/dist/index320.js.map +1 -1
  281. package/dist/index321.js +2 -2
  282. package/dist/index322.js +12 -148
  283. package/dist/index322.js.map +1 -1
  284. package/dist/index323.js +1 -1
  285. package/dist/index324.js +28 -6
  286. package/dist/index324.js.map +1 -1
  287. package/dist/index325.js +2 -2
  288. package/dist/index326.js +78 -87
  289. package/dist/index326.js.map +1 -1
  290. package/dist/index327.js +2 -2
  291. package/dist/index328.js +78 -2
  292. package/dist/index328.js.map +1 -1
  293. package/dist/index329.js +2 -237
  294. package/dist/index329.js.map +1 -1
  295. package/dist/index33.js +20 -56
  296. package/dist/index33.js.map +1 -1
  297. package/dist/index330.js +11 -6
  298. package/dist/index330.js.map +1 -1
  299. package/dist/index331.js +2 -2
  300. package/dist/index332.js +18 -59
  301. package/dist/index332.js.map +1 -1
  302. package/dist/index333.js +2 -2
  303. package/dist/index334.js +12 -5
  304. package/dist/index334.js.map +1 -1
  305. package/dist/index335.js +2 -2
  306. package/dist/index336.js +2 -15
  307. package/dist/index336.js.map +1 -1
  308. package/dist/index337.js +88 -2
  309. package/dist/index337.js.map +1 -1
  310. package/dist/index338.js +24 -2
  311. package/dist/index338.js.map +1 -1
  312. package/dist/index339.js +2 -92
  313. package/dist/index339.js.map +1 -1
  314. package/dist/index34.js +59 -35
  315. package/dist/index34.js.map +1 -1
  316. package/dist/index340.js +42 -14
  317. package/dist/index340.js.map +1 -1
  318. package/dist/index341.js +2 -2
  319. package/dist/index342.js +22 -80
  320. package/dist/index342.js.map +1 -1
  321. package/dist/index343.js +2 -2
  322. package/dist/index344.js +2 -18
  323. package/dist/index344.js.map +1 -1
  324. package/dist/index345.js +16 -2
  325. package/dist/index345.js.map +1 -1
  326. package/dist/index346.js +2 -268
  327. package/dist/index346.js.map +1 -1
  328. package/dist/index347.js +176 -2
  329. package/dist/index347.js.map +1 -1
  330. package/dist/index348.js +2 -2
  331. package/dist/index349.js +35 -39
  332. package/dist/index349.js.map +1 -1
  333. package/dist/index35.js +101 -28
  334. package/dist/index35.js.map +1 -1
  335. package/dist/index350.js +3 -3
  336. package/dist/index350.js.map +1 -1
  337. package/dist/index351.js +2 -2
  338. package/dist/index352.js +19 -26
  339. package/dist/index352.js.map +1 -1
  340. package/dist/index357.js +26 -19
  341. package/dist/index357.js.map +1 -1
  342. package/dist/index36.js +115 -33
  343. package/dist/index36.js.map +1 -1
  344. package/dist/index37.js +41 -115
  345. package/dist/index37.js.map +1 -1
  346. package/dist/index38.js +34 -246
  347. package/dist/index38.js.map +1 -1
  348. package/dist/index39.js +30 -137
  349. package/dist/index39.js.map +1 -1
  350. package/dist/index4.js +26 -84
  351. package/dist/index4.js.map +1 -1
  352. package/dist/index40.js +26 -400
  353. package/dist/index40.js.map +1 -1
  354. package/dist/index41.js +28 -77
  355. package/dist/index41.js.map +1 -1
  356. package/dist/index42.js +23 -26
  357. package/dist/index42.js.map +1 -1
  358. package/dist/index43.js +36 -33
  359. package/dist/index43.js.map +1 -1
  360. package/dist/index44.js +62 -16
  361. package/dist/index44.js.map +1 -1
  362. package/dist/index45.js +138 -21
  363. package/dist/index45.js.map +1 -1
  364. package/dist/index46.js +129 -22
  365. package/dist/index46.js.map +1 -1
  366. package/dist/index47.js +41 -19
  367. package/dist/index47.js.map +1 -1
  368. package/dist/index48.js +11 -82
  369. package/dist/index48.js.map +1 -1
  370. package/dist/index49.js +56 -279
  371. package/dist/index49.js.map +1 -1
  372. package/dist/index5.js +21 -34
  373. package/dist/index5.js.map +1 -1
  374. package/dist/index50.js +280 -33
  375. package/dist/index50.js.map +1 -1
  376. package/dist/index51.js +74 -94
  377. package/dist/index51.js.map +1 -1
  378. package/dist/index52.js +66 -41
  379. package/dist/index52.js.map +1 -1
  380. package/dist/index53.js +333 -62
  381. package/dist/index53.js.map +1 -1
  382. package/dist/index54.js +96 -256
  383. package/dist/index54.js.map +1 -1
  384. package/dist/index55.js +38 -130
  385. package/dist/index55.js.map +1 -1
  386. package/dist/index56.js +251 -50
  387. package/dist/index56.js.map +1 -1
  388. package/dist/index57.js +144 -115
  389. package/dist/index57.js.map +1 -1
  390. package/dist/index58.js +93 -183
  391. package/dist/index58.js.map +1 -1
  392. package/dist/index59.js +33 -339
  393. package/dist/index59.js.map +1 -1
  394. package/dist/index6.js +2 -2
  395. package/dist/index60.js +102 -66
  396. package/dist/index60.js.map +1 -1
  397. package/dist/index61.js +73 -179
  398. package/dist/index61.js.map +1 -1
  399. package/dist/index62.js +117 -97
  400. package/dist/index62.js.map +1 -1
  401. package/dist/index63.js +113 -263
  402. package/dist/index63.js.map +1 -1
  403. package/dist/index64.js +258 -251
  404. package/dist/index64.js.map +1 -1
  405. package/dist/index65.js +177 -79
  406. package/dist/index65.js.map +1 -1
  407. package/dist/index66.js +261 -140
  408. package/dist/index66.js.map +1 -1
  409. package/dist/index67.js +183 -100
  410. package/dist/index67.js.map +1 -1
  411. package/dist/index68.js +28 -89
  412. package/dist/index68.js.map +1 -1
  413. package/dist/index69.js +20 -161
  414. package/dist/index69.js.map +1 -1
  415. package/dist/index7.js +394 -32
  416. package/dist/index7.js.map +1 -1
  417. package/dist/index70.js +190 -53
  418. package/dist/index70.js.map +1 -1
  419. package/dist/index71.js +204 -112
  420. package/dist/index71.js.map +1 -1
  421. package/dist/index72.js +2 -2
  422. package/dist/index73.js +89 -28
  423. package/dist/index73.js.map +1 -1
  424. package/dist/index74.js +126 -63
  425. package/dist/index74.js.map +1 -1
  426. package/dist/index75.js +122 -111
  427. package/dist/index75.js.map +1 -1
  428. package/dist/index76.js +67 -64
  429. package/dist/index76.js.map +1 -1
  430. package/dist/index77.js +112 -88
  431. package/dist/index77.js.map +1 -1
  432. package/dist/index78.js +87 -16
  433. package/dist/index78.js.map +1 -1
  434. package/dist/index79.js +151 -79
  435. package/dist/index79.js.map +1 -1
  436. package/dist/index8.js +25 -127
  437. package/dist/index8.js.map +1 -1
  438. package/dist/index80.js +104 -186
  439. package/dist/index80.js.map +1 -1
  440. package/dist/index81.js +59 -20
  441. package/dist/index81.js.map +1 -1
  442. package/dist/index82.js +17 -129
  443. package/dist/index82.js.map +1 -1
  444. package/dist/index83.js +88 -217
  445. package/dist/index83.js.map +1 -1
  446. package/dist/index84.js +64 -112
  447. package/dist/index84.js.map +1 -1
  448. package/dist/index9.js +30 -45
  449. package/dist/index9.js.map +1 -1
  450. package/dist/src/components/atoms/index.d.ts +45 -16
  451. package/dist/src/components/atoms/index.d.ts.map +1 -1
  452. package/dist/src/components/molecules/index.d.ts +20 -1
  453. package/dist/src/components/molecules/index.d.ts.map +1 -1
  454. package/dist/src/components/organisms/index.d.ts +17 -1
  455. package/dist/src/components/organisms/index.d.ts.map +1 -1
  456. package/dist/src/index.d.ts +3 -82
  457. package/dist/src/index.d.ts.map +1 -1
  458. package/dist/tokens.css +353 -7
  459. package/dist/vite.config.d.ts.map +1 -1
  460. package/package.json +4 -4
package/dist/index54.js CHANGED
@@ -1,9 +1,8 @@
1
1
  import { unsafeCSS, css, LitElement } from "lit";
2
- import { property, state, customElement } from "lit/decorators.js";
3
- import { generateUniqueId } from "./index213.js";
4
- import uploaderCss from "./index293.js";
2
+ import { property, customElement } from "lit/decorators.js";
3
+ import { dropdownTemplate } from "./index206.js";
4
+ import dropdownCss from "./index207.js";
5
5
  import sharedTokens from "./index196.js";
6
- import { fileUploaderTemplate } from "./index294.js";
7
6
  var __defProp = Object.defineProperty;
8
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
8
  var __decorateClass = (decorators, target, key, kind) => {
@@ -14,286 +13,127 @@ var __decorateClass = (decorators, target, key, kind) => {
14
13
  if (kind && result) __defProp(target, key, result);
15
14
  return result;
16
15
  };
17
- let LibFileUploader = class extends LitElement {
16
+ let LibDropdown = class extends LitElement {
18
17
  constructor() {
19
18
  super(...arguments);
20
- this.zone = "default";
21
- this.title = "Arrastra archivos aquí";
22
- this.subtitle = "o busca en tu equipo";
23
- this.hint = "PDF, DOCX, PNG, JPG · máx. 20 MB por archivo";
24
- this.multiple = false;
25
- this.accept = "*";
26
- this.disabled = false;
27
- this.simulate = false;
28
- this.simulateMs = 2e3;
29
- this._isDragover = false;
30
- this._entries = [];
31
- this._imagePreviewUrl = null;
32
- }
33
- /* ── Drag & Drop ── */
34
- _onDragover(e) {
35
- e.preventDefault();
36
- this._isDragover = true;
37
- }
38
- _onDragleave() {
39
- this._isDragover = false;
40
- }
41
- _onDrop(e) {
42
- var _a;
43
- e.preventDefault();
44
- this._isDragover = false;
45
- const files = Array.from(((_a = e.dataTransfer) == null ? void 0 : _a.files) ?? []);
46
- if (files.length) this._processFiles(files);
47
- }
48
- /* ── Input change ── */
49
- _onInputChange(e) {
50
- const input = e.target;
51
- const files = Array.from(input.files ?? []);
52
- if (files.length) this._processFiles(files);
53
- input.value = "";
54
- }
55
- /* ── Procesar archivos ── */
56
- _processFiles(files) {
57
- if (this.zone === "image") {
58
- const file = files[0];
59
- if (!file) return;
60
- if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);
61
- const entry = {
62
- id: generateUniqueId("fu-"),
63
- file,
64
- progress: 0,
65
- status: "idle",
66
- previewUrl: URL.createObjectURL(file)
67
- };
68
- this._imagePreviewUrl = entry.previewUrl ?? null;
69
- this._entries = [entry];
70
- this._emitFilesChange([file]);
71
- if (this.simulate) this._simulateUpload(entry);
72
- return;
73
- }
74
- const newEntries = files.map((file) => {
75
- const isImg = file.type.startsWith("image/");
76
- return {
77
- id: generateUniqueId("fu-"),
78
- file,
79
- progress: 0,
80
- status: "idle",
81
- ...isImg ? { previewUrl: URL.createObjectURL(file) } : {}
82
- };
83
- });
84
- this._entries = this.multiple ? [...this._entries, ...newEntries] : newEntries;
85
- this._emitFilesChange(files);
86
- if (this.simulate) {
87
- newEntries.forEach((entry) => this._simulateUpload(entry));
88
- }
89
- }
90
- /* ── Simulación de upload ── */
91
- _simulateUpload(entry) {
92
- const steps = 20;
93
- const interval = this.simulateMs / steps;
94
- const step = 100 / steps;
95
- const willFail = Math.random() < 0.2;
96
- const failAt = willFail ? Math.floor(Math.random() * 8 + 3) * step : Infinity;
97
- entry.status = "uploading";
98
- this.requestUpdate();
99
- this.dispatchEvent(
100
- new CustomEvent("ui-lib-upload-start", {
101
- detail: { id: entry.id, file: entry.file },
102
- bubbles: true,
103
- composed: true
104
- })
105
- );
106
- const tick = setInterval(() => {
107
- const idx = this._entries.findIndex((e) => e.id === entry.id);
108
- if (idx === -1) {
109
- clearInterval(tick);
110
- return;
111
- }
112
- const current = this._entries[idx];
113
- if (!current) {
114
- clearInterval(tick);
115
- return;
19
+ this.label = "Opciones";
20
+ this.variant = "default";
21
+ this.align = "left";
22
+ this.open = false;
23
+ this.dark = false;
24
+ this.minWidth = "";
25
+ this.ariaLabel = "";
26
+ this._onOutsideClick = (e) => {
27
+ if (this.open && !e.composedPath().includes(this)) {
28
+ this.open = false;
116
29
  }
117
- const next = Math.min(current.progress + step, 100);
118
- if (next >= failAt) {
119
- clearInterval(tick);
120
- this._entries = this._entries.map(
121
- (e) => e.id === entry.id ? { ...e, progress: next, status: "error", errorMessage: "Error de conexión" } : e
122
- );
123
- this.requestUpdate();
124
- this.dispatchEvent(
125
- new CustomEvent("ui-lib-upload-error", {
126
- detail: { id: entry.id, file: entry.file, message: "Error de conexión" },
127
- bubbles: true,
128
- composed: true
129
- })
130
- );
131
- return;
30
+ };
31
+ this._onWindowKey = (e) => {
32
+ var _a;
33
+ if (this.open && e.key === "Escape") {
34
+ this.open = false;
35
+ const trigger = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector(".dd-trigger");
36
+ trigger == null ? void 0 : trigger.focus();
132
37
  }
133
- if (next >= 100) {
134
- clearInterval(tick);
135
- this._entries = this._entries.map(
136
- (e) => e.id === entry.id ? { ...e, progress: 100, status: "done" } : e
137
- );
138
- this.requestUpdate();
139
- this.dispatchEvent(
140
- new CustomEvent("ui-lib-upload-done", {
141
- detail: { id: entry.id, file: entry.file },
142
- bubbles: true,
143
- composed: true
144
- })
145
- );
146
- return;
147
- }
148
- this._entries = this._entries.map(
149
- (e) => e.id === entry.id ? { ...e, progress: next } : e
150
- );
151
- this.requestUpdate();
152
- }, interval);
38
+ };
153
39
  }
154
- /* ── Eliminar archivo ── */
155
- _onRemove(id) {
156
- const entry = this._entries.find((e) => e.id === id);
157
- if (!entry) return;
158
- if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);
159
- this._entries = this._entries.filter((e) => e.id !== id);
160
- this.dispatchEvent(
161
- new CustomEvent("ui-lib-file-remove", {
162
- detail: { id, file: entry.file },
163
- bubbles: true,
164
- composed: true
165
- })
166
- );
40
+ /* ── Lifecycle ── */
41
+ connectedCallback() {
42
+ super.connectedCallback();
43
+ window.addEventListener("click", this._onOutsideClick);
44
+ window.addEventListener("keydown", this._onWindowKey);
167
45
  }
168
- /* ── Upload all (delega a host si simulate=false) ── */
169
- _onUploadAll() {
170
- if (this.simulate) {
171
- const idleEntries = this._entries.filter((e) => e.status === "idle" || e.status === "error");
172
- idleEntries.forEach((e) => this._simulateUpload(e));
46
+ disconnectedCallback() {
47
+ super.disconnectedCallback();
48
+ window.removeEventListener("click", this._onOutsideClick);
49
+ window.removeEventListener("keydown", this._onWindowKey);
50
+ }
51
+ /* ── Toggle ── */
52
+ _toggle() {
53
+ this.open = !this.open;
54
+ this.dispatchEvent(new CustomEvent("ui-lib-dropdown-toggle", {
55
+ detail: { open: this.open },
56
+ bubbles: true,
57
+ composed: true
58
+ }));
59
+ if (this.open) {
60
+ requestAnimationFrame(() => {
61
+ const first = this._getItems()[0];
62
+ first == null ? void 0 : first.focus();
63
+ });
173
64
  }
174
65
  }
175
- /* ── Limpiar lista ── */
176
- _onClearAll() {
177
- this._entries.forEach((e) => {
178
- if (e.previewUrl) URL.revokeObjectURL(e.previewUrl);
179
- });
180
- this._entries = [];
181
- }
182
- /* ── Reset imagen ── */
183
- _onResetImage() {
184
- if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);
185
- this._imagePreviewUrl = null;
186
- this._entries = [];
187
- }
188
- /* ── API pública ── */
189
- /** Marca un archivo como completado desde el exterior */
190
- markDone(id) {
191
- this._entries = this._entries.map(
192
- (e) => e.id === id ? { ...e, progress: 100, status: "done" } : e
193
- );
194
- }
195
- /** Marca un archivo como error desde el exterior */
196
- markError(id, message = "Error al subir") {
197
- this._entries = this._entries.map(
198
- (e) => e.id === id ? { ...e, status: "error", errorMessage: message } : e
199
- );
200
- }
201
- /** Actualiza el progreso de un archivo desde el exterior */
202
- setProgress(id, progress) {
203
- this._entries = this._entries.map(
204
- (e) => e.id === id ? { ...e, progress: Math.min(100, Math.max(0, progress)), status: "uploading" } : e
205
- );
66
+ /* ── Trigger keydown (Arrow Down abre el menú) ── */
67
+ _handleTriggerKey(e) {
68
+ if (e.key === "ArrowDown" || e.key === "Enter" || e.key === " ") {
69
+ e.preventDefault();
70
+ if (!this.open) this._toggle();
71
+ }
206
72
  }
207
- /** Archivos actuales en la lista */
208
- get files() {
209
- return [...this._entries];
73
+ /* ── Menu keydown (Arrow Up/Down navega entre items) ── */
74
+ _handleMenuKey(e) {
75
+ const items = this._getItems();
76
+ if (!items.length) return;
77
+ const current = document.activeElement;
78
+ const idx = items.indexOf(current);
79
+ if (e.key === "ArrowDown") {
80
+ e.preventDefault();
81
+ const next = items[(idx + 1) % items.length];
82
+ next == null ? void 0 : next.focus();
83
+ } else if (e.key === "ArrowUp") {
84
+ e.preventDefault();
85
+ const prev = items[(idx - 1 + items.length) % items.length];
86
+ prev == null ? void 0 : prev.focus();
87
+ } else if (e.key === "Tab") {
88
+ this.open = false;
89
+ }
210
90
  }
211
- /* ── Helpers ── */
212
- _emitFilesChange(files) {
213
- this.dispatchEvent(
214
- new CustomEvent("ui-lib-files-change", {
215
- detail: { files },
216
- bubbles: true,
217
- composed: true
218
- })
91
+ /* ── Obtiene los items focusables del slot default ── */
92
+ _getItems() {
93
+ var _a;
94
+ const slot = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector("slot:not([name])");
95
+ if (!slot) return [];
96
+ return slot.assignedElements({ flatten: true }).filter(
97
+ (el) => el.classList.contains("dd-item") && !el.classList.contains("is-disabled")
219
98
  );
220
99
  }
221
- /* ── Lifecycle ── */
222
- disconnectedCallback() {
223
- super.disconnectedCallback();
224
- this._entries.forEach((e) => {
225
- if (e.previewUrl) URL.revokeObjectURL(e.previewUrl);
226
- });
227
- if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);
100
+ /* ── Detecta si un slot con nombre tiene contenido ── */
101
+ _hasSlot(name) {
102
+ return !!this.querySelector(`[slot="${name}"]`);
228
103
  }
229
- /* ── Render ── */
230
104
  render() {
231
- return fileUploaderTemplate({
232
- zone: this.zone,
233
- title: this.title,
234
- subtitle: this.subtitle,
235
- hint: this.hint,
236
- multiple: this.multiple,
237
- accept: this.accept,
238
- disabled: this.disabled,
239
- isDragover: this._isDragover,
240
- entries: this._entries,
241
- imagePreviewUrl: this._imagePreviewUrl,
242
- onDragover: (e) => this._onDragover(e),
243
- onDragleave: () => this._onDragleave(),
244
- onDrop: (e) => this._onDrop(e),
245
- onInputChange: (e) => this._onInputChange(e),
246
- onRemove: (id) => this._onRemove(id),
247
- onUploadAll: () => this._onUploadAll(),
248
- onClearAll: () => this._onClearAll(),
249
- onResetImage: () => this._onResetImage()
250
- });
105
+ return dropdownTemplate(this);
251
106
  }
252
107
  };
253
- LibFileUploader.styles = [
108
+ LibDropdown.styles = [
254
109
  css`${unsafeCSS(sharedTokens)}`,
255
- css`${unsafeCSS(uploaderCss)}`
110
+ css`${unsafeCSS(dropdownCss)}`
256
111
  ];
257
- __decorateClass([
258
- property({ type: String, reflect: true })
259
- ], LibFileUploader.prototype, "zone", 2);
260
112
  __decorateClass([
261
113
  property({ type: String })
262
- ], LibFileUploader.prototype, "title", 2);
114
+ ], LibDropdown.prototype, "label", 2);
263
115
  __decorateClass([
264
- property({ type: String })
265
- ], LibFileUploader.prototype, "subtitle", 2);
266
- __decorateClass([
267
- property({ type: String })
268
- ], LibFileUploader.prototype, "hint", 2);
269
- __decorateClass([
270
- property({ type: Boolean, reflect: true })
271
- ], LibFileUploader.prototype, "multiple", 2);
116
+ property({ type: String, reflect: true })
117
+ ], LibDropdown.prototype, "variant", 2);
272
118
  __decorateClass([
273
- property({ type: String })
274
- ], LibFileUploader.prototype, "accept", 2);
119
+ property({ type: String, reflect: true })
120
+ ], LibDropdown.prototype, "align", 2);
275
121
  __decorateClass([
276
122
  property({ type: Boolean, reflect: true })
277
- ], LibFileUploader.prototype, "disabled", 2);
123
+ ], LibDropdown.prototype, "open", 2);
278
124
  __decorateClass([
279
125
  property({ type: Boolean, reflect: true })
280
- ], LibFileUploader.prototype, "simulate", 2);
281
- __decorateClass([
282
- property({ type: Number, attribute: "simulate-ms" })
283
- ], LibFileUploader.prototype, "simulateMs", 2);
284
- __decorateClass([
285
- state()
286
- ], LibFileUploader.prototype, "_isDragover", 2);
126
+ ], LibDropdown.prototype, "dark", 2);
287
127
  __decorateClass([
288
- state()
289
- ], LibFileUploader.prototype, "_entries", 2);
128
+ property({ type: String, attribute: "min-width" })
129
+ ], LibDropdown.prototype, "minWidth", 2);
290
130
  __decorateClass([
291
- state()
292
- ], LibFileUploader.prototype, "_imagePreviewUrl", 2);
293
- LibFileUploader = __decorateClass([
294
- customElement("lib-file-uploader")
295
- ], LibFileUploader);
131
+ property({ type: String, attribute: "aria-label" })
132
+ ], LibDropdown.prototype, "ariaLabel", 2);
133
+ LibDropdown = __decorateClass([
134
+ customElement("lib-dropdown")
135
+ ], LibDropdown);
296
136
  export {
297
- LibFileUploader
137
+ LibDropdown
298
138
  };
299
139
  //# sourceMappingURL=index54.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index54.js","sources":["../src/components/molecules/file-uploader/lib-file-uploader.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { generateUniqueId } from '../../../core/a11y';\nimport uploaderCss from './lib-file-uploader.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport { fileUploaderTemplate } from './lib-file-uploader.html';\nimport type {\n UploaderZone,\n FileEntry,\n FilesChangeDetail,\n UploadStartDetail,\n UploadDoneDetail,\n UploadErrorDetail,\n FileRemoveDetail,\n} from './lib-file-uploader.types';\n\n/**\n * @element lib-file-uploader\n *\n * Tres variantes de zona de drop:\n * - `zone=\"default\"` — zona grande con icono, título y lista de archivos\n * - `zone=\"compact\"` — zona horizontal para formularios, con lista adjunta\n * - `zone=\"image\"` — zona con aspect-ratio 16/7 y preview inline de imagen\n *\n * La lista de archivos muestra progreso por ítem, thumbnail para imágenes\n * y estados idle · uploading · done · error.\n *\n * El upload real se delega al exterior vía eventos. Si `simulate` es true,\n * el componente simula el upload internamente (útil en Storybook).\n *\n * @prop {UploaderZone} zone — Variante de zona (default: 'default')\n * @prop {string} title — Título de la zona\n * @prop {string} subtitle — Subtítulo (solo zone='default')\n * @prop {string} hint — Texto de restricciones (formatos, tamaño)\n * @prop {boolean} multiple — Permite múltiples archivos\n * @prop {string} accept — Tipos aceptados (e.g. '.pdf,image/*')\n * @prop {boolean} disabled — Deshabilita la zona\n * @prop {boolean} simulate — Simula upload internamente (Storybook)\n * @prop {number} simulateMs — Duración simulada en ms (default: 2000)\n *\n * @fires ui-lib-files-change — Al seleccionar/soltar archivos\n * Detail: { files: File[] }\n * @fires ui-lib-upload-start — Inicio de upload de un archivo\n * Detail: { id: string, file: File }\n * @fires ui-lib-upload-done — Upload completado\n * Detail: { id: string, file: File }\n * @fires ui-lib-upload-error — Upload fallido\n * Detail: { id: string, file: File, message: string }\n * @fires ui-lib-file-remove — Archivo eliminado de la lista\n * Detail: { id: string, file: File }\n */\n@customElement('lib-file-uploader')\nexport class LibFileUploader extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(uploaderCss)}`,\n ];\n\n /* ── Props ── */\n\n @property({ type: String, reflect: true })\n zone: UploaderZone = 'default';\n\n @property({ type: String })\n override title = 'Arrastra archivos aquí';\n\n @property({ type: String })\n subtitle = 'o busca en tu equipo';\n\n @property({ type: String })\n hint = 'PDF, DOCX, PNG, JPG · máx. 20 MB por archivo';\n\n @property({ type: Boolean, reflect: true })\n multiple = false;\n\n @property({ type: String })\n accept = '*';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /** Simula el upload internamente (ideal para Storybook) */\n @property({ type: Boolean, reflect: true })\n simulate = false;\n\n /** Duración de la simulación por archivo en ms */\n @property({ type: Number, attribute: 'simulate-ms' })\n simulateMs = 2000;\n\n /* ── State ── */\n\n @state() private _isDragover = false;\n @state() private _entries: FileEntry[] = [];\n @state() private _imagePreviewUrl: string | null = null;\n\n /* ── Drag & Drop ── */\n\n private _onDragover(e: DragEvent): void {\n e.preventDefault();\n this._isDragover = true;\n }\n\n private _onDragleave(): void {\n this._isDragover = false;\n }\n\n private _onDrop(e: DragEvent): void {\n e.preventDefault();\n this._isDragover = false;\n const files = Array.from(e.dataTransfer?.files ?? []);\n if (files.length) this._processFiles(files);\n }\n\n /* ── Input change ── */\n\n private _onInputChange(e: Event): void {\n const input = e.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n if (files.length) this._processFiles(files);\n /* Limpiar el input para permitir seleccionar el mismo archivo otra vez */\n input.value = '';\n }\n\n /* ── Procesar archivos ── */\n\n private _processFiles(files: File[]): void {\n /* zone=image — solo un archivo, genera preview */\n if (this.zone === 'image') {\n const file = files[0];\n if (!file) return;\n\n /* Revocar URL anterior si existe */\n if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);\n\n const entry: FileEntry = {\n id: generateUniqueId('fu-'),\n file,\n progress: 0,\n status: 'idle',\n previewUrl: URL.createObjectURL(file),\n };\n\n this._imagePreviewUrl = entry.previewUrl ?? null;\n this._entries = [entry];\n this._emitFilesChange([file]);\n\n if (this.simulate) this._simulateUpload(entry);\n return;\n }\n\n /* zone=default | compact — múltiples archivos */\n const newEntries: FileEntry[] = files.map((file): FileEntry => {\n const isImg = file.type.startsWith('image/');\n return {\n id: generateUniqueId('fu-'),\n file,\n progress: 0,\n status: 'idle',\n ...(isImg ? { previewUrl: URL.createObjectURL(file) } : {}),\n };\n });\n\n this._entries = this.multiple\n ? [...this._entries, ...newEntries]\n : newEntries;\n\n this._emitFilesChange(files);\n\n if (this.simulate) {\n newEntries.forEach(entry => this._simulateUpload(entry));\n }\n }\n\n /* ── Simulación de upload ── */\n\n private _simulateUpload(entry: FileEntry): void {\n const steps = 20;\n const interval = this.simulateMs / steps;\n const step = 100 / steps;\n\n /* Lanzar error aleatorio en ~20% de los archivos */\n const willFail = Math.random() < 0.2;\n const failAt = willFail ? Math.floor(Math.random() * 8 + 3) * step : Infinity;\n\n entry.status = 'uploading';\n this.requestUpdate();\n\n this.dispatchEvent(\n new CustomEvent<UploadStartDetail>('ui-lib-upload-start', {\n detail: { id: entry.id, file: entry.file },\n bubbles: true, composed: true,\n })\n );\n\n const tick = setInterval((): void => {\n const idx = this._entries.findIndex(e => e.id === entry.id);\n if (idx === -1) { clearInterval(tick); return; }\n\n const current = this._entries[idx];\n if (!current) { clearInterval(tick); return; }\n\n const next = Math.min(current.progress + step, 100);\n\n if (next >= failAt) {\n clearInterval(tick);\n this._entries = this._entries.map(e =>\n e.id === entry.id\n ? { ...e, progress: next, status: 'error', errorMessage: 'Error de conexión' }\n : e\n );\n this.requestUpdate();\n this.dispatchEvent(\n new CustomEvent<UploadErrorDetail>('ui-lib-upload-error', {\n detail: { id: entry.id, file: entry.file, message: 'Error de conexión' },\n bubbles: true, composed: true,\n })\n );\n return;\n }\n\n if (next >= 100) {\n clearInterval(tick);\n this._entries = this._entries.map(e =>\n e.id === entry.id ? { ...e, progress: 100, status: 'done' } : e\n );\n this.requestUpdate();\n this.dispatchEvent(\n new CustomEvent<UploadDoneDetail>('ui-lib-upload-done', {\n detail: { id: entry.id, file: entry.file },\n bubbles: true, composed: true,\n })\n );\n return;\n }\n\n this._entries = this._entries.map(e =>\n e.id === entry.id ? { ...e, progress: next } : e\n );\n this.requestUpdate();\n }, interval);\n }\n\n /* ── Eliminar archivo ── */\n\n private _onRemove(id: string): void {\n const entry = this._entries.find(e => e.id === id);\n if (!entry) return;\n\n /* Revocar object URL si existe */\n if (entry.previewUrl) URL.revokeObjectURL(entry.previewUrl);\n\n this._entries = this._entries.filter(e => e.id !== id);\n\n this.dispatchEvent(\n new CustomEvent<FileRemoveDetail>('ui-lib-file-remove', {\n detail: { id, file: entry.file },\n bubbles: true, composed: true,\n })\n );\n }\n\n /* ── Upload all (delega a host si simulate=false) ── */\n\n private _onUploadAll(): void {\n if (this.simulate) {\n const idleEntries = this._entries.filter(e => e.status === 'idle' || e.status === 'error');\n idleEntries.forEach(e => this._simulateUpload(e));\n }\n /* Si simulate=false, el host escucha ui-lib-files-change y maneja el upload */\n }\n\n /* ── Limpiar lista ── */\n\n private _onClearAll(): void {\n this._entries.forEach(e => { if (e.previewUrl) URL.revokeObjectURL(e.previewUrl); });\n this._entries = [];\n }\n\n /* ── Reset imagen ── */\n\n private _onResetImage(): void {\n if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);\n this._imagePreviewUrl = null;\n this._entries = [];\n }\n\n /* ── API pública ── */\n\n /** Marca un archivo como completado desde el exterior */\n public markDone(id: string): void {\n this._entries = this._entries.map(e =>\n e.id === id ? { ...e, progress: 100, status: 'done' } : e\n );\n }\n\n /** Marca un archivo como error desde el exterior */\n public markError(id: string, message = 'Error al subir'): void {\n this._entries = this._entries.map(e =>\n e.id === id ? { ...e, status: 'error', errorMessage: message } : e\n );\n }\n\n /** Actualiza el progreso de un archivo desde el exterior */\n public setProgress(id: string, progress: number): void {\n this._entries = this._entries.map(e =>\n e.id === id ? { ...e, progress: Math.min(100, Math.max(0, progress)), status: 'uploading' } : e\n );\n }\n\n /** Archivos actuales en la lista */\n public get files(): FileEntry[] {\n return [...this._entries];\n }\n\n /* ── Helpers ── */\n\n private _emitFilesChange(files: File[]): void {\n this.dispatchEvent(\n new CustomEvent<FilesChangeDetail>('ui-lib-files-change', {\n detail: { files },\n bubbles: true, composed: true,\n })\n );\n }\n\n /* ── Lifecycle ── */\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n /* Revocar todas las object URLs al desmontar */\n this._entries.forEach(e => { if (e.previewUrl) URL.revokeObjectURL(e.previewUrl); });\n if (this._imagePreviewUrl) URL.revokeObjectURL(this._imagePreviewUrl);\n }\n\n /* ── Render ── */\n\n protected override render(): TemplateResult {\n return fileUploaderTemplate({\n zone: this.zone,\n title: this.title,\n subtitle: this.subtitle,\n hint: this.hint,\n multiple: this.multiple,\n accept: this.accept,\n disabled: this.disabled,\n isDragover: this._isDragover,\n entries: this._entries,\n imagePreviewUrl: this._imagePreviewUrl,\n onDragover: (e): void => this._onDragover(e),\n onDragleave: (): void => this._onDragleave(),\n onDrop: (e): void => this._onDrop(e),\n onInputChange: (e): void => this._onInputChange(e),\n onRemove: (id): void => this._onRemove(id),\n onUploadAll: (): void => this._onUploadAll(),\n onClearAll: (): void => this._onClearAll(),\n onResetImage: (): void => this._onResetImage(),\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-file-uploader': LibFileUploader;\n }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index54.js","sources":["../src/components/molecules/dropdown/lib-dropdown.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { dropdownTemplate } from './lib-dropdown.html';\nimport dropdownCss from './lib-dropdown.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport type { DropdownTriggerVariant, DropdownAlign } from './lib-dropdown.types';\n\n/**\n * lib-dropdown — Menú contextual flotante Shibui (SG-25)\n *\n * @prop label — Texto del trigger (si no hay slot \"trigger\")\n * @prop variant — 'default' | 'ghost' | 'filled' | 'kaki'\n * @prop align — 'left' (default) | 'right'\n * @prop open — Estado abierto (refleja en atributo)\n * @prop dark — Menú con tema oscuro\n * @prop min-width — Ancho mínimo del panel (e.g. '240px')\n * @prop aria-label — aria-label del trigger (fallback: label)\n *\n * @fires ui-lib-dropdown-toggle — { detail: { open: boolean } }\n * @fires ui-lib-dropdown-item — { detail: { target: HTMLElement } } al activar un item\n *\n * @slot trigger — Contenido personalizado del botón (reemplaza `label`)\n * @slot header — Cabecera del panel (búsqueda, título)\n * @slot — Items del menú (.dd-item, .dd-sep, .dd-group-label)\n * @slot footer — Pie del panel (acciones de confirmación)\n *\n * ─── Clases de item (light DOM, sin shadow) ─────────────────\n * .dd-item — fila de acción (button o a)\n * .dd-item.is-active — seleccionado\n * .dd-item.is-danger — acción destructiva\n * .dd-item.is-disabled — no interactivo\n * .dd-sep — separador horizontal (div o hr)\n * .dd-group-label — etiqueta de sección (div o span)\n *\n * ─── Clases internas de item (requieren CSS global) ─────────\n * .dd-item-icon — icono a la izquierda\n * .dd-item-body — wrapper para label + desc de dos líneas\n * .dd-item-label — primera línea del body\n * .dd-item-desc — segunda línea (mono, muted)\n * .dd-item-hint — shortcut a la derecha (margin-left:auto)\n * .dd-item-check — check de selección (opacity:0 por defecto)\n */\n@customElement('lib-dropdown')\nexport class LibDropdown extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(dropdownCss)}`,\n ];\n\n @property({ type: String })\n label = 'Opciones';\n\n @property({ type: String, reflect: true })\n variant: DropdownTriggerVariant = 'default';\n\n @property({ type: String, reflect: true })\n align: DropdownAlign = 'left';\n\n @property({ type: Boolean, reflect: true })\n open = false;\n\n @property({ type: Boolean, reflect: true })\n dark = false;\n\n @property({ type: String, attribute: 'min-width' })\n minWidth = '';\n\n @property({ type: String, attribute: 'aria-label' })\n override ariaLabel = '';\n\n /* ── Lifecycle ── */\n override connectedCallback(): void {\n super.connectedCallback();\n window.addEventListener('click', this._onOutsideClick);\n window.addEventListener('keydown', this._onWindowKey);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n window.removeEventListener('click', this._onOutsideClick);\n window.removeEventListener('keydown', this._onWindowKey);\n }\n\n /* ── Toggle ── */\n _toggle(): void {\n this.open = !this.open;\n this.dispatchEvent(new CustomEvent('ui-lib-dropdown-toggle', {\n detail: { open: this.open },\n bubbles: true,\n composed: true,\n }));\n if (this.open) {\n // Foco al primer item al abrir con teclado\n requestAnimationFrame((): void => {\n const first = this._getItems()[0];\n first?.focus();\n });\n }\n }\n\n /* ── Outside click ── */\n private _onOutsideClick = (e: Event): void => {\n if (this.open && !e.composedPath().includes(this)) {\n this.open = false;\n }\n };\n\n /* ── Global Escape ── */\n private _onWindowKey = (e: KeyboardEvent): void => {\n if (this.open && e.key === 'Escape') {\n this.open = false;\n // Devolver foco al trigger\n const trigger = this.shadowRoot?.querySelector<HTMLButtonElement>('.dd-trigger');\n trigger?.focus();\n }\n };\n\n /* ── Trigger keydown (Arrow Down abre el menú) ── */\n _handleTriggerKey(e: KeyboardEvent): void {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!this.open) this._toggle();\n }\n }\n\n /* ── Menu keydown (Arrow Up/Down navega entre items) ── */\n _handleMenuKey(e: KeyboardEvent): void {\n const items = this._getItems();\n if (!items.length) return;\n\n const current = document.activeElement as HTMLElement;\n const idx = items.indexOf(current);\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n const next = items[(idx + 1) % items.length];\n next?.focus();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n const prev = items[(idx - 1 + items.length) % items.length];\n prev?.focus();\n } else if (e.key === 'Tab') {\n this.open = false;\n }\n }\n\n /* ── Obtiene los items focusables del slot default ── */\n private _getItems(): HTMLElement[] {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n if (!slot) return [];\n return slot.assignedElements({ flatten: true })\n .filter(el =>\n el.classList.contains('dd-item') &&\n !el.classList.contains('is-disabled')\n ) as HTMLElement[];\n }\n\n /* ── Detecta si un slot con nombre tiene contenido ── */\n _hasSlot(name: string): boolean {\n return !!this.querySelector(`[slot=\"${name}\"]`);\n }\n\n protected override render(): TemplateResult {\n return dropdownTemplate(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-dropdown': LibDropdown;\n }\n}"],"names":[],"mappings":"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"}
package/dist/index55.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { unsafeCSS, css, LitElement } from "lit";
2
- import { property, state, queryAll, customElement } from "lit/decorators.js";
3
- import segmentedCss from "./index295.js";
2
+ import { property, customElement } from "lit/decorators.js";
3
+ import { emptyStateTemplate } from "./index208.js";
4
+ import emptyStateCss from "./index209.js";
4
5
  import sharedTokens from "./index196.js";
5
- import { segmentedTemplate } from "./index296.js";
6
6
  var __defProp = Object.defineProperty;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
8
  var __decorateClass = (decorators, target, key, kind) => {
@@ -13,155 +13,63 @@ var __decorateClass = (decorators, target, key, kind) => {
13
13
  if (kind && result) __defProp(target, key, result);
14
14
  return result;
15
15
  };
16
- let LibSegmentedControl = class extends LitElement {
16
+ let LibEmptyState = class extends LitElement {
17
17
  constructor() {
18
18
  super(...arguments);
19
- this.options = [];
20
- this.value = "";
21
- this.variant = "outline";
19
+ this.heading = "";
20
+ this.description = "";
21
+ this.kanji = "";
22
+ this.tone = "neutral";
23
+ this.layout = "default";
22
24
  this.size = "md";
23
- this.full = false;
24
- this.iconOnly = false;
25
- this.disabled = false;
26
- this.glitch = false;
27
- this._thumbStyle = "";
25
+ this.bordered = false;
26
+ this.ghost = false;
28
27
  }
29
- /* ── Ciclo de vida ── */
30
- firstUpdated() {
31
- this._updateThumb();
32
- }
33
- updated(changed) {
34
- if (changed.has("value") || changed.has("variant") || changed.has("options")) {
35
- Promise.resolve().then(() => this._updateThumb());
36
- }
37
- }
38
- /* ── Thumb engine ── */
39
- _updateThumb() {
40
- const idx = this.options.findIndex((o) => o.value === this.value);
41
- if (idx === -1) return;
42
- const el = this._optionEls[idx];
43
- if (!el) return;
44
- const isUnderline = this.variant === "underline" || this.variant === "dark-underline";
45
- const w = el.offsetWidth;
46
- const x = isUnderline ? el.offsetLeft : el.offsetLeft - this._getTrackPadding();
47
- this._thumbStyle = `width:${w}px;transform:translateX(${x}px)`;
48
- }
49
- _getTrackPadding() {
50
- const track = this.renderRoot.querySelector(".seg");
51
- if (!track) return 3;
52
- return parseInt(getComputedStyle(track).paddingLeft, 10) || 3;
53
- }
54
- /* ── Selección ── */
55
- _handleSelect(option, evt) {
56
- if (this.disabled || option.disabled) return;
57
- const previousValue = this.value;
58
- if (option.value === previousValue) return;
59
- this.value = option.value;
60
- if (this.glitch) {
61
- const idx = this.options.findIndex((o) => o.value === this.value);
62
- const node = this._optionEls[idx];
63
- if (node) {
64
- node.classList.add("glitch-on");
65
- setTimeout(() => node.classList.remove("glitch-on"), 340);
66
- }
67
- }
68
- this._triggerRipple(evt);
69
- this.dispatchEvent(
70
- new CustomEvent("ui-lib-change", {
71
- detail: { value: this.value, previousValue },
72
- bubbles: true,
73
- composed: true
74
- })
75
- );
76
- }
77
- _triggerRipple(evt) {
78
- const target = evt.currentTarget;
79
- if (!target) return;
80
- let wrap = target.querySelector(".seg-ripple");
81
- if (!wrap) {
82
- wrap = document.createElement("div");
83
- wrap.className = "seg-ripple";
84
- target.appendChild(wrap);
85
- }
86
- const dot = document.createElement("div");
87
- dot.className = "seg-ripple-dot";
88
- dot.style.left = "50%";
89
- dot.style.top = "50%";
90
- dot.style.marginLeft = "-2px";
91
- dot.style.marginTop = "-2px";
92
- wrap.appendChild(dot);
93
- setTimeout(() => dot.remove(), 400);
94
- }
95
- /* ── API pública ── */
96
- /** Selecciona un valor programáticamente */
97
- select(value) {
98
- const opt = this.options.find((o) => o.value === value);
99
- if (opt && !opt.disabled) {
100
- const prev = this.value;
101
- this.value = value;
102
- this.dispatchEvent(
103
- new CustomEvent("ui-lib-change", {
104
- detail: { value, previousValue: prev },
105
- bubbles: true,
106
- composed: true
107
- })
108
- );
109
- }
110
- }
111
- /* ── Render ── */
112
28
  render() {
113
- return segmentedTemplate({
114
- options: this.options,
115
- value: this.value,
116
- variant: this.variant,
29
+ return emptyStateTemplate({
30
+ heading: this.heading,
31
+ description: this.description,
32
+ kanji: this.kanji,
33
+ tone: this.tone,
34
+ layout: this.layout,
117
35
  size: this.size,
118
- full: this.full,
119
- iconOnly: this.iconOnly,
120
- disabled: this.disabled,
121
- glitch: this.glitch,
122
- thumbStyle: this._thumbStyle,
123
- onSelect: (opt, evt) => this._handleSelect(opt, evt)
36
+ bordered: this.bordered,
37
+ ghost: this.ghost
124
38
  });
125
39
  }
126
40
  };
127
- LibSegmentedControl.styles = [
41
+ LibEmptyState.styles = [
128
42
  css`${unsafeCSS(sharedTokens)}`,
129
- css`${unsafeCSS(segmentedCss)}`
43
+ css`${unsafeCSS(emptyStateCss)}`
130
44
  ];
131
45
  __decorateClass([
132
- property({ type: Array })
133
- ], LibSegmentedControl.prototype, "options", 2);
46
+ property({ type: String })
47
+ ], LibEmptyState.prototype, "heading", 2);
134
48
  __decorateClass([
135
- property({ type: String, reflect: true })
136
- ], LibSegmentedControl.prototype, "value", 2);
49
+ property({ type: String })
50
+ ], LibEmptyState.prototype, "description", 2);
137
51
  __decorateClass([
138
- property({ type: String, reflect: true })
139
- ], LibSegmentedControl.prototype, "variant", 2);
52
+ property({ type: String })
53
+ ], LibEmptyState.prototype, "kanji", 2);
140
54
  __decorateClass([
141
55
  property({ type: String, reflect: true })
142
- ], LibSegmentedControl.prototype, "size", 2);
56
+ ], LibEmptyState.prototype, "tone", 2);
143
57
  __decorateClass([
144
- property({ type: Boolean, reflect: true })
145
- ], LibSegmentedControl.prototype, "full", 2);
58
+ property({ type: String, reflect: true })
59
+ ], LibEmptyState.prototype, "layout", 2);
146
60
  __decorateClass([
147
- property({ type: Boolean, reflect: true, attribute: "icon-only" })
148
- ], LibSegmentedControl.prototype, "iconOnly", 2);
61
+ property({ type: String, reflect: true })
62
+ ], LibEmptyState.prototype, "size", 2);
149
63
  __decorateClass([
150
64
  property({ type: Boolean, reflect: true })
151
- ], LibSegmentedControl.prototype, "disabled", 2);
65
+ ], LibEmptyState.prototype, "bordered", 2);
152
66
  __decorateClass([
153
67
  property({ type: Boolean, reflect: true })
154
- ], LibSegmentedControl.prototype, "glitch", 2);
155
- __decorateClass([
156
- state()
157
- ], LibSegmentedControl.prototype, "_thumbStyle", 2);
158
- __decorateClass([
159
- queryAll(".seg-option")
160
- ], LibSegmentedControl.prototype, "_optionEls", 2);
161
- LibSegmentedControl = __decorateClass([
162
- customElement("lib-segmented-control")
163
- ], LibSegmentedControl);
68
+ ], LibEmptyState.prototype, "ghost", 2);
69
+ LibEmptyState = __decorateClass([
70
+ customElement("lib-empty-state")
71
+ ], LibEmptyState);
164
72
  export {
165
- LibSegmentedControl
73
+ LibEmptyState
166
74
  };
167
75
  //# sourceMappingURL=index55.js.map