@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/index38.js CHANGED
@@ -1,9 +1,8 @@
1
1
  import { unsafeCSS, css, LitElement } from "lit";
2
- import { property, query, customElement } from "lit/decorators.js";
3
- import { buttonLiquidTemplate } from "./index260.js";
4
- import liquidCss from "./index261.js";
2
+ import { property, customElement } from "lit/decorators.js";
3
+ import { selectOptionTemplate } from "./index332.js";
4
+ import optionCss from "./index333.js";
5
5
  import sharedTokens from "./index196.js";
6
- import { LIQUID_PALETTES } from "./index262.js";
7
6
  var __defProp = Object.defineProperty;
8
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
8
  var __decorateClass = (decorators, target, key, kind) => {
@@ -14,265 +13,54 @@ var __decorateClass = (decorators, target, key, kind) => {
14
13
  if (kind && result) __defProp(target, key, result);
15
14
  return result;
16
15
  };
17
- class WaterPhysics {
18
- constructor(btn, canvas, water, ripple) {
19
- this.fill = 0;
20
- this.targetFill = 0;
21
- this.fillSpeed = 0.032;
22
- this.shimmerX = -1;
23
- this.t = 0;
24
- this.hovered = false;
25
- this.raf = 0;
26
- this.A = 3.5;
27
- this.f1 = 0.038;
28
- this.f2 = 0.063;
29
- this.s1 = 1.8;
30
- this.s2 = 1.2;
31
- this.W = 0;
32
- this.H = 0;
33
- this.ripples = [];
34
- this.btn = btn;
35
- this.canvas = canvas;
36
- this.ctx = canvas.getContext("2d");
37
- [this.wr, this.wg, this.wb] = water;
38
- [this.rr, this.rg, this.rb] = ripple;
39
- this.resize();
40
- this.loop();
41
- }
42
- /* ── Dimensiones con DPR ── */
43
- resize() {
44
- const r = this.btn.getBoundingClientRect();
45
- const dpr = window.devicePixelRatio || 1;
46
- this.W = r.width;
47
- this.H = r.height;
48
- this.canvas.width = this.W * dpr;
49
- this.canvas.height = this.H * dpr;
50
- this.canvas.style.width = `${this.W}px`;
51
- this.canvas.style.height = `${this.H}px`;
52
- this.ctx.scale(dpr, dpr);
53
- }
54
- /* ── Spawn de ripple ── */
55
- spawnRipple(x, y, { speed = 2.2, maxR, lineWidth = 1.2 } = {}) {
56
- const diag = Math.sqrt(this.W ** 2 + this.H ** 2);
57
- this.ripples.push({
58
- x,
59
- y,
60
- radius: 0,
61
- maxRadius: maxR ?? diag * 0.72,
62
- speed,
63
- lineWidth,
64
- opacity: 0
65
- });
66
- }
67
- /* ── Eventos públicos — llamados por el componente Lit ── */
68
- onMouseEnter(x, y) {
69
- this.hovered = true;
70
- this.targetFill = 1;
71
- this.fillSpeed = 0.028;
72
- this.shimmerX = -0.3;
73
- this.spawnRipple(x, y, { speed: 3.2, lineWidth: 1.8 });
74
- setTimeout(() => this.spawnRipple(x, y, { speed: 2, lineWidth: 1.1 }), 80);
75
- setTimeout(() => this.spawnRipple(x, y, { speed: 1.3, lineWidth: 0.7 }), 180);
76
- }
77
- onMouseLeave() {
78
- this.hovered = false;
79
- this.targetFill = 0;
80
- this.fillSpeed = 0.048;
81
- }
82
- onMouseDown(cx, cy) {
83
- for (let i = 0; i < 3; i++) {
84
- setTimeout(() => {
85
- this.spawnRipple(cx, cy, {
86
- speed: 4 - i * 0.8,
87
- maxR: this.W * 0.5,
88
- lineWidth: 2 - i * 0.4
89
- });
90
- }, i * 40);
91
- }
92
- }
93
- /* ── Dibujo ── */
94
- drawWave() {
95
- const { ctx, W, H, A, f1, f2, s1, s2, t, wr, wg, wb, fill } = this;
96
- if (fill <= 1e-3) return;
97
- const baseY = H * (1 - fill);
98
- ctx.beginPath();
99
- ctx.moveTo(0, H);
100
- ctx.lineTo(0, baseY);
101
- for (let x = 0; x <= W; x++) {
102
- const y = baseY + A * Math.sin(x * f1 + t * s1) + A * 0.45 * Math.sin(x * f2 - t * s2);
103
- ctx.lineTo(x, y);
104
- }
105
- ctx.lineTo(W, H);
106
- ctx.closePath();
107
- const grad = ctx.createLinearGradient(0, baseY - A * 2, 0, H);
108
- grad.addColorStop(0, `rgba(${wr},${wg},${wb},0.82)`);
109
- grad.addColorStop(0.4, `rgba(${wr},${wg},${wb},0.92)`);
110
- grad.addColorStop(1, `rgba(${wr},${wg},${wb},0.98)`);
111
- ctx.fillStyle = grad;
112
- ctx.fill();
113
- if (this.shimmerX > -0.5 && this.shimmerX < 1.5) {
114
- const sx = W * this.shimmerX;
115
- const sg = ctx.createLinearGradient(sx - 40, 0, sx + 40, 0);
116
- sg.addColorStop(0, "rgba(255,255,255,0)");
117
- sg.addColorStop(0.5, "rgba(255,255,255,0.12)");
118
- sg.addColorStop(1, "rgba(255,255,255,0)");
119
- ctx.fillStyle = sg;
120
- ctx.fillRect(0, Math.max(0, baseY - 4), W, H - Math.max(0, baseY - 4));
121
- }
122
- }
123
- drawRipples() {
124
- const { ctx, rr, rg, rb } = this;
125
- this.ripples = this.ripples.filter((r) => r.opacity > 0 || r.radius === 0);
126
- for (const r of this.ripples) {
127
- r.radius += r.speed;
128
- r.opacity = Math.max(0, 1 - r.radius / r.maxRadius);
129
- ctx.beginPath();
130
- ctx.arc(r.x, r.y, r.radius, 0, Math.PI * 2);
131
- ctx.strokeStyle = `rgba(${rr},${rg},${rb},${r.opacity * 0.9})`;
132
- ctx.lineWidth = r.lineWidth;
133
- ctx.stroke();
134
- if (r.radius > 6) {
135
- ctx.beginPath();
136
- ctx.arc(r.x, r.y, r.radius * 0.65, 0, Math.PI * 2);
137
- ctx.strokeStyle = `rgba(${rr},${rg},${rb},${r.opacity * 0.4})`;
138
- ctx.lineWidth = r.lineWidth * 0.5;
139
- ctx.stroke();
140
- }
141
- }
142
- this.ripples = this.ripples.filter((r) => r.opacity > 0);
143
- }
144
- /* ── Loop principal ── */
145
- loop() {
146
- const tick = () => {
147
- this.raf = requestAnimationFrame(tick);
148
- const { ctx, W, H } = this;
149
- this.t += 0.04;
150
- const diff = this.targetFill - this.fill;
151
- this.fill += diff * this.fillSpeed * 2.8;
152
- if (Math.abs(diff) < 5e-4) this.fill = this.targetFill;
153
- if (this.hovered && this.shimmerX < 1.6) {
154
- this.shimmerX += 0.012;
155
- }
156
- if (this.fill <= 1e-3 && this.ripples.length === 0) return;
157
- ctx.clearRect(0, 0, W, H);
158
- this.drawWave();
159
- this.drawRipples();
160
- };
161
- this.raf = requestAnimationFrame(tick);
162
- }
163
- /* ── Cleanup ── */
164
- destroy() {
165
- cancelAnimationFrame(this.raf);
166
- }
167
- }
168
- let LibButtonLiquid = class extends LitElement {
16
+ let LibSelectOption = class extends LitElement {
169
17
  constructor() {
170
18
  super(...arguments);
171
- this.variant = "ink";
172
- this.size = "md";
19
+ this.value = "";
20
+ this.selected = false;
173
21
  this.disabled = false;
174
- this.loading = false;
175
- this.dark = false;
176
- this.block = false;
177
- this._physics = null;
178
- this._canvas = null;
179
- this._ro = null;
180
- }
181
- /* ── Lifecycle ── */
182
- firstUpdated() {
183
- this._initCanvas();
184
- }
185
- updated(changed) {
186
- if (changed.has("variant")) {
187
- this._destroyCanvas();
188
- this._initCanvas();
189
- }
190
- }
191
- disconnectedCallback() {
192
- var _a;
193
- super.disconnectedCallback();
194
- this._destroyCanvas();
195
- (_a = this._ro) == null ? void 0 : _a.disconnect();
196
22
  }
197
- /* ── Canvas setup ── */
198
- _initCanvas() {
199
- if (!this._btn) return;
200
- const canvas = document.createElement("canvas");
201
- this._canvas = canvas;
202
- this._btn.insertBefore(canvas, this._btn.firstChild);
203
- const palette = LIQUID_PALETTES[this.variant];
204
- this._physics = new WaterPhysics(this._btn, canvas, palette.water, palette.ripple);
205
- this._ro = new ResizeObserver(() => {
206
- var _a;
207
- return (_a = this._physics) == null ? void 0 : _a.resize();
23
+ render() {
24
+ return selectOptionTemplate({
25
+ value: this.value,
26
+ selected: this.selected,
27
+ disabled: this.disabled,
28
+ handleClick: this._handleClick.bind(this)
208
29
  });
209
- this._ro.observe(this._btn);
210
- }
211
- _destroyCanvas() {
212
- var _a, _b, _c;
213
- (_a = this._physics) == null ? void 0 : _a.destroy();
214
- this._physics = null;
215
- (_b = this._canvas) == null ? void 0 : _b.remove();
216
- this._canvas = null;
217
- (_c = this._ro) == null ? void 0 : _c.disconnect();
218
- this._ro = null;
219
- }
220
- /* ── Eventos del canvas — llamados desde el template ── */
221
- _onMouseEnter(e) {
222
- var _a;
223
- if (this.disabled || this.loading) return;
224
- const rect = this._btn.getBoundingClientRect();
225
- (_a = this._physics) == null ? void 0 : _a.onMouseEnter(e.clientX - rect.left, e.clientY - rect.top);
226
30
  }
227
- _onMouseLeave() {
31
+ _handleClick(e) {
228
32
  var _a;
229
- (_a = this._physics) == null ? void 0 : _a.onMouseLeave();
230
- }
231
- _onMouseDown(e) {
232
- var _a;
233
- if (this.disabled || this.loading) return;
234
- const rect = this._btn.getBoundingClientRect();
235
- (_a = this._physics) == null ? void 0 : _a.onMouseDown(e.clientX - rect.left, e.clientY - rect.top);
236
- this.dispatchEvent(new CustomEvent("ui-lib-click", {
237
- detail: { originalEvent: e },
238
- bubbles: true,
239
- composed: true
240
- }));
241
- }
242
- /* ── Render ── */
243
- render() {
244
- return buttonLiquidTemplate(this);
33
+ e.stopPropagation();
34
+ if (this.disabled) return;
35
+ this.dispatchEvent(
36
+ new CustomEvent("option-selected", {
37
+ detail: {
38
+ value: this.value,
39
+ label: ((_a = this.textContent) == null ? void 0 : _a.trim()) ?? ""
40
+ },
41
+ bubbles: true,
42
+ composed: true
43
+ })
44
+ );
245
45
  }
246
46
  };
247
- LibButtonLiquid.styles = [
47
+ LibSelectOption.styles = [
248
48
  css`${unsafeCSS(sharedTokens)}`,
249
- css`${unsafeCSS(liquidCss)}`
49
+ css`${unsafeCSS(optionCss)}`
250
50
  ];
251
51
  __decorateClass([
252
52
  property({ type: String, reflect: true })
253
- ], LibButtonLiquid.prototype, "variant", 2);
254
- __decorateClass([
255
- property({ type: String, reflect: true })
256
- ], LibButtonLiquid.prototype, "size", 2);
257
- __decorateClass([
258
- property({ type: Boolean, reflect: true })
259
- ], LibButtonLiquid.prototype, "disabled", 2);
53
+ ], LibSelectOption.prototype, "value", 2);
260
54
  __decorateClass([
261
55
  property({ type: Boolean, reflect: true })
262
- ], LibButtonLiquid.prototype, "loading", 2);
56
+ ], LibSelectOption.prototype, "selected", 2);
263
57
  __decorateClass([
264
58
  property({ type: Boolean, reflect: true })
265
- ], LibButtonLiquid.prototype, "dark", 2);
266
- __decorateClass([
267
- property({ type: Boolean, reflect: true })
268
- ], LibButtonLiquid.prototype, "block", 2);
269
- __decorateClass([
270
- query(".btn")
271
- ], LibButtonLiquid.prototype, "_btn", 2);
272
- LibButtonLiquid = __decorateClass([
273
- customElement("lib-button-liquid")
274
- ], LibButtonLiquid);
59
+ ], LibSelectOption.prototype, "disabled", 2);
60
+ LibSelectOption = __decorateClass([
61
+ customElement("lib-select-option")
62
+ ], LibSelectOption);
275
63
  export {
276
- LibButtonLiquid
64
+ LibSelectOption
277
65
  };
278
66
  //# sourceMappingURL=index38.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index38.js","sources":["../src/components/atoms/liquid-button/lib-liquid-button.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { buttonLiquidTemplate } from './lib-liquid-button.html';\nimport liquidCss from './lib-liquid-button.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport { LIQUID_PALETTES } from './lib-liquid-button.types';\nimport type { LiquidVariant, LiquidSize } from './lib-liquid-button.types';\n\n/* ============================================================\n WaterPhysics — clase interna de física de canvas\n Portada desde el SG-41 (vanilla JS → TypeScript puro)\n ============================================================ */\nclass WaterPhysics {\n private btn: HTMLElement;\n private canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n\n /* Colores */\n private wr: number; private wg: number; private wb: number;\n private rr: number; private rg: number; private rb: number;\n\n /* Estado */\n private fill = 0;\n private targetFill = 0;\n private fillSpeed = 0.032;\n private shimmerX = -1;\n private t = 0;\n private hovered = false;\n private raf = 0;\n\n /* Física de onda */\n private readonly A = 3.5;\n private readonly f1 = 0.038;\n private readonly f2 = 0.063;\n private readonly s1 = 1.8;\n private readonly s2 = 1.2;\n\n private W = 0;\n private H = 0;\n\n private ripples: Array<{\n x: number; y: number;\n radius: number; maxRadius: number;\n speed: number; lineWidth: number;\n opacity: number;\n }> = [];\n\n constructor(\n btn: HTMLElement,\n canvas: HTMLCanvasElement,\n water: [number, number, number],\n ripple: [number, number, number],\n ) {\n this.btn = btn;\n this.canvas = canvas;\n this.ctx = canvas.getContext('2d')!;\n [this.wr, this.wg, this.wb] = water;\n [this.rr, this.rg, this.rb] = ripple;\n\n this.resize();\n this.loop();\n }\n\n /* ── Dimensiones con DPR ── */\n resize(): void {\n const r = this.btn.getBoundingClientRect();\n const dpr = window.devicePixelRatio || 1;\n this.W = r.width;\n this.H = r.height;\n this.canvas.width = this.W * dpr;\n this.canvas.height = this.H * dpr;\n this.canvas.style.width = `${this.W}px`;\n this.canvas.style.height = `${this.H}px`;\n this.ctx.scale(dpr, dpr);\n }\n\n /* ── Spawn de ripple ── */\n spawnRipple(\n x: number, y: number,\n { speed = 2.2, maxR, lineWidth = 1.2 }:\n { speed?: number; maxR?: number; lineWidth?: number } = {},\n ): void {\n const diag = Math.sqrt(this.W ** 2 + this.H ** 2);\n this.ripples.push({\n x, y,\n radius: 0,\n maxRadius: maxR ?? diag * 0.72,\n speed,\n lineWidth,\n opacity: 0,\n });\n }\n\n /* ── Eventos públicos — llamados por el componente Lit ── */\n onMouseEnter(x: number, y: number): void {\n this.hovered = true;\n this.targetFill = 1;\n this.fillSpeed = 0.028;\n this.shimmerX = -0.3;\n\n this.spawnRipple(x, y, { speed: 3.2, lineWidth: 1.8 });\n setTimeout((): void => this.spawnRipple(x, y, { speed: 2.0, lineWidth: 1.1 }), 80);\n setTimeout((): void => this.spawnRipple(x, y, { speed: 1.3, lineWidth: 0.7 }), 180);\n }\n\n onMouseLeave(): void {\n this.hovered = false;\n this.targetFill = 0;\n this.fillSpeed = 0.048;\n }\n\n onMouseDown(cx: number, cy: number): void {\n for (let i = 0; i < 3; i++) {\n setTimeout((): void => {\n this.spawnRipple(cx, cy, {\n speed: 4 - i * 0.8,\n maxR: this.W * 0.5,\n lineWidth: 2 - i * 0.4,\n });\n }, i * 40);\n }\n }\n\n /* ── Dibujo ── */\n private drawWave(): void {\n const { ctx, W, H, A, f1, f2, s1, s2, t, wr, wg, wb, fill } = this;\n if (fill <= 0.001) return;\n\n const baseY = H * (1 - fill);\n\n /* Cuerpo sinusoidal */\n ctx.beginPath();\n ctx.moveTo(0, H);\n ctx.lineTo(0, baseY);\n for (let x = 0; x <= W; x++) {\n const y = baseY\n + A * Math.sin(x * f1 + t * s1)\n + A * 0.45 * Math.sin(x * f2 - t * s2);\n ctx.lineTo(x, y);\n }\n ctx.lineTo(W, H);\n ctx.closePath();\n\n /* Gradiente vertical */\n const grad = ctx.createLinearGradient(0, baseY - A * 2, 0, H);\n grad.addColorStop(0, `rgba(${wr},${wg},${wb},0.82)`);\n grad.addColorStop(0.4, `rgba(${wr},${wg},${wb},0.92)`);\n grad.addColorStop(1, `rgba(${wr},${wg},${wb},0.98)`);\n ctx.fillStyle = grad;\n ctx.fill();\n\n /* Shimmer diagonal */\n if (this.shimmerX > -0.5 && this.shimmerX < 1.5) {\n const sx = W * this.shimmerX;\n const sg = ctx.createLinearGradient(sx - 40, 0, sx + 40, 0);\n sg.addColorStop(0, 'rgba(255,255,255,0)');\n sg.addColorStop(0.5, 'rgba(255,255,255,0.12)');\n sg.addColorStop(1, 'rgba(255,255,255,0)');\n ctx.fillStyle = sg;\n ctx.fillRect(0, Math.max(0, baseY - 4), W, H - Math.max(0, baseY - 4));\n }\n }\n\n private drawRipples(): void {\n const { ctx, rr, rg, rb } = this;\n this.ripples = this.ripples.filter(r => r.opacity > 0 || r.radius === 0);\n\n for (const r of this.ripples) {\n r.radius += r.speed;\n r.opacity = Math.max(0, 1 - r.radius / r.maxRadius);\n\n /* Anillo principal */\n ctx.beginPath();\n ctx.arc(r.x, r.y, r.radius, 0, Math.PI * 2);\n ctx.strokeStyle = `rgba(${rr},${rg},${rb},${r.opacity * 0.9})`;\n ctx.lineWidth = r.lineWidth;\n ctx.stroke();\n\n /* Segundo anillo interior más fino */\n if (r.radius > 6) {\n ctx.beginPath();\n ctx.arc(r.x, r.y, r.radius * 0.65, 0, Math.PI * 2);\n ctx.strokeStyle = `rgba(${rr},${rg},${rb},${r.opacity * 0.4})`;\n ctx.lineWidth = r.lineWidth * 0.5;\n ctx.stroke();\n }\n }\n\n /* Limpiar ripples agotados */\n this.ripples = this.ripples.filter(r => r.opacity > 0);\n }\n\n /* ── Loop principal ── */\n private loop(): void {\n const tick = (): void => {\n this.raf = requestAnimationFrame(tick);\n const { ctx, W, H } = this;\n this.t += 0.04;\n\n /* Lerp fill */\n const diff = this.targetFill - this.fill;\n this.fill += diff * this.fillSpeed * 2.8;\n if (Math.abs(diff) < 0.0005) this.fill = this.targetFill;\n\n /* Shimmer avanza */\n if (this.hovered && this.shimmerX < 1.6) {\n this.shimmerX += 0.012;\n }\n\n /* Skip si todo en reposo */\n if (this.fill <= 0.001 && this.ripples.length === 0) return;\n\n ctx.clearRect(0, 0, W, H);\n this.drawWave();\n this.drawRipples();\n };\n this.raf = requestAnimationFrame(tick);\n }\n\n /* ── Cleanup ── */\n destroy(): void {\n cancelAnimationFrame(this.raf);\n }\n}\n\n\n/* ============================================================\n LIB-BUTTON-LIQUID — Web Component\n ============================================================ */\n\n/**\n * Botón con física de agua en canvas.\n *\n * @prop variant — 'ink' | 'washi' | 'kaki' | 'celadon' | 'ghost' | 'danger'\n * @prop size — 'sm' | 'md' | 'lg'\n * @prop disabled — bloquea interacción y detiene el canvas\n * @prop loading — muestra spinner, bloquea interacción\n * @prop dark — ajusta colores en surface oscura\n * @prop block — ancho 100%\n *\n * Slots: default · prefix · suffix\n * @fires ui-lib-click — {detail: { originalEvent: MouseEvent }}\n */\n@customElement('lib-button-liquid')\nexport class LibButtonLiquid extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(liquidCss)}`,\n ];\n\n @property({ type: String, reflect: true })\n variant: LiquidVariant = 'ink';\n\n @property({ type: String, reflect: true })\n size: LiquidSize = 'md';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ type: Boolean, reflect: true })\n loading = false;\n\n @property({ type: Boolean, reflect: true })\n dark = false;\n\n @property({ type: Boolean, reflect: true })\n block = false;\n\n @query('.btn')\n declare private _btn: HTMLButtonElement;\n\n private _physics: WaterPhysics | null = null;\n private _canvas: HTMLCanvasElement | null = null;\n private _ro: ResizeObserver | null = null;\n\n /* ── Lifecycle ── */\n\n override firstUpdated(): void {\n this._initCanvas();\n }\n\n override updated(changed: Map<string, unknown>): void {\n /* Si cambia la variante, reconstruir physics con nueva paleta */\n if (changed.has('variant')) {\n this._destroyCanvas();\n this._initCanvas();\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._destroyCanvas();\n this._ro?.disconnect();\n }\n\n /* ── Canvas setup ── */\n\n private _initCanvas(): void {\n if (!this._btn) return;\n\n /* Crear canvas y añadirlo como primer hijo del botón (bajo .btn-inner) */\n const canvas = document.createElement('canvas');\n this._canvas = canvas;\n this._btn.insertBefore(canvas, this._btn.firstChild);\n\n const palette = LIQUID_PALETTES[this.variant];\n this._physics = new WaterPhysics(this._btn, canvas, palette.water, palette.ripple);\n\n /* ResizeObserver para adaptar canvas al tamaño real del botón */\n this._ro = new ResizeObserver((): void => this._physics?.resize());\n this._ro.observe(this._btn);\n }\n\n private _destroyCanvas(): void {\n this._physics?.destroy();\n this._physics = null;\n this._canvas?.remove();\n this._canvas = null;\n this._ro?.disconnect();\n this._ro = null;\n }\n\n /* ── Eventos del canvas — llamados desde el template ── */\n\n _onMouseEnter(e: MouseEvent): void {\n if (this.disabled || this.loading) return;\n const rect = this._btn.getBoundingClientRect();\n this._physics?.onMouseEnter(e.clientX - rect.left, e.clientY - rect.top);\n }\n\n _onMouseLeave(): void {\n this._physics?.onMouseLeave();\n }\n\n _onMouseDown(e: MouseEvent): void {\n if (this.disabled || this.loading) return;\n const rect = this._btn.getBoundingClientRect();\n this._physics?.onMouseDown(e.clientX - rect.left, e.clientY - rect.top);\n\n this.dispatchEvent(new CustomEvent('ui-lib-click', {\n detail: { originalEvent: e },\n bubbles: true,\n composed: true,\n }));\n }\n\n /* ── Render ── */\n protected override render(): TemplateResult {\n return buttonLiquidTemplate(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-button-liquid': LibButtonLiquid;\n }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index38.js","sources":["../src/components/atoms/select-option/lib-select-option.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { selectOptionTemplate } from './lib-select-option.html';\nimport optionCss from './lib-select-option.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\n/**\n * @element lib-select-option\n *\n * Opción individual para usar dentro de lib-select.\n * Emite `option-selected` con { value, label } al hacer clic,\n * que lib-select captura desde el light DOM.\n *\n * @fires option-selected — { value: string, label: string }\n * @slot — Texto visible de la opción\n */\n@customElement('lib-select-option')\nexport class LibSelectOption extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(optionCss)}`,\n ];\n\n /** Valor interno que se comunica al select padre. */\n @property({ type: String, reflect: true }) value = '';\n\n /** Estado de selección — controlado por lib-select. */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n /** Deshabilita la opción. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n override render(): TemplateResult {\n return selectOptionTemplate({\n value: this.value,\n selected: this.selected,\n disabled: this.disabled,\n handleClick: this._handleClick.bind(this),\n });\n }\n\n private _handleClick(e: Event): void {\n e.stopPropagation();\n if (this.disabled) return;\n\n this.dispatchEvent(\n new CustomEvent<{ value: string; label: string }>('option-selected', {\n detail: {\n value: this.value,\n label: this.textContent?.trim() ?? '',\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-select-option': LibSelectOption;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AAiBO,IAAM,kBAAN,cAA8B,WAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AAOsC,SAAA,QAAQ;AAGP,SAAA,WAAW;AAGX,SAAA,WAAW;AAAA,EAAA;AAAA,EAE9C,SAAyB;AAChC,WAAO,qBAAqB;AAAA,MAC1B,OAAa,KAAK;AAAA,MAClB,UAAa,KAAK;AAAA,MAClB,UAAa,KAAK;AAAA,MAClB,aAAa,KAAK,aAAa,KAAK,IAAI;AAAA,IAAA,CACzC;AAAA,EACH;AAAA,EAEQ,aAAa,GAAgB;;AACnC,MAAE,gBAAA;AACF,QAAI,KAAK,SAAU;AAEnB,SAAK;AAAA,MACH,IAAI,YAA8C,mBAAmB;AAAA,QACnE,QAAQ;AAAA,UACN,OAAO,KAAK;AAAA,UACZ,SAAO,UAAK,gBAAL,mBAAkB,WAAU;AAAA,QAAA;AAAA,QAErC,SAAU;AAAA,QACV,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AACF;AAvCa,gBACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,SAAS,CAAC;AAC5B;AAG2C,gBAAA;AAAA,EAA1C,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAP9B,gBAOgC,WAAA,SAAA,CAAA;AAGC,gBAAA;AAAA,EAA3C,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAV/B,gBAUiC,WAAA,YAAA,CAAA;AAGA,gBAAA;AAAA,EAA3C,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAb/B,gBAaiC,WAAA,YAAA,CAAA;AAbjC,kBAAN,gBAAA;AAAA,EADN,cAAc,mBAAmB;AAAA,GACrB,eAAA;"}
package/dist/index39.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { unsafeCSS, css, LitElement } from "lit";
2
2
  import { property, customElement } from "lit/decorators.js";
3
+ import { skeletonTemplate } from "./index334.js";
4
+ import skeletonCss from "./index335.js";
3
5
  import sharedTokens from "./index196.js";
4
- import glitchCss from "./index263.js";
5
- import { textGlitchTemplate } from "./index264.js";
6
6
  var __defProp = Object.defineProperty;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
8
  var __decorateClass = (decorators, target, key, kind) => {
@@ -13,155 +13,48 @@ var __decorateClass = (decorators, target, key, kind) => {
13
13
  if (kind && result) __defProp(target, key, result);
14
14
  return result;
15
15
  };
16
- const KANA = "ア エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ガ ギ グ ゲ ゴ " + "ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ 渋 液 美 乱 進 間 静 陰 影 黒 白 墨 和 侘".split(" ");
17
- let LibTextGlitch = class extends LitElement {
16
+ let LibSkeleton = class extends LitElement {
18
17
  constructor() {
19
18
  super(...arguments);
20
- this.text = "";
21
- this.variant = "slice";
22
- this.trigger = "hover";
23
- this.active = false;
24
- this._running = false;
25
- this._boundMouseEnter = () => {
26
- this._decodePlay();
27
- };
28
- }
29
- /* ── Lifecycle ──────────────────────────────────────────── */
30
- connectedCallback() {
31
- super.connectedCallback();
32
- this._setupDecode();
33
- }
34
- disconnectedCallback() {
35
- super.disconnectedCallback();
36
- this.removeEventListener("mouseenter", this._boundMouseEnter);
37
- clearTimeout(this._alwaysTimer);
38
- }
39
- updated(changed) {
40
- const reInit = changed.has("variant") || changed.has("trigger") || changed.has("text");
41
- if (reInit) {
42
- this.removeEventListener("mouseenter", this._boundMouseEnter);
43
- clearTimeout(this._alwaysTimer);
44
- this._running = false;
45
- this._setupDecode();
46
- }
19
+ this.shape = "rect";
20
+ this.animation = "shimmer";
21
+ this.surface = "light";
22
+ this.width = "100%";
23
+ this.height = "";
47
24
  }
48
25
  render() {
49
- return textGlitchTemplate({ text: this.text, variant: this.variant });
50
- }
51
- /* ── API pública ────────────────────────────────────────── */
52
- /**
53
- * Reproduce el efecto manualmente una vez.
54
- * - Para `decode`: lanza el scramble de kanji.
55
- * - Para `scan` / `redact`: activa [active] y lo retira al terminar.
56
- * - Para `slice` / `shift` / `noise`: activa [active] (CSS bucle).
57
- */
58
- play() {
59
- if (this.variant === "decode") {
60
- this._decodePlay();
61
- return;
62
- }
63
- this.active = true;
64
- if (this.variant === "scan" || this.variant === "redact") {
65
- const dur = this.variant === "scan" ? 620 : 720;
66
- setTimeout(() => {
67
- this.active = false;
68
- }, dur);
69
- }
70
- }
71
- /** Detiene el bucle `trigger="always"` y desactiva [active]. */
72
- stop() {
73
- clearTimeout(this._alwaysTimer);
74
- this._running = false;
75
- this.active = false;
76
- }
77
- /* ── Decode engine ──────────────────────────────────────── */
78
- _setupDecode() {
79
- if (this.variant !== "decode") return;
80
- if (this.trigger === "hover") {
81
- this.addEventListener("mouseenter", this._boundMouseEnter);
82
- } else {
83
- this.updateComplete.then(() => {
84
- this._scheduleAlwaysDecode();
85
- });
86
- }
87
- }
88
- _scheduleAlwaysDecode() {
89
- this._decodePlay();
90
- const pause = Math.max([...this.text].length * 55 * 1.5, 400) + 2e3;
91
- this._alwaysTimer = setTimeout(() => {
92
- this._scheduleAlwaysDecode();
93
- }, pause);
94
- }
95
- /**
96
- * Motor de decodificación kanji.
97
- *
98
- * Cada char span se sustituye por un katakana/kanji aleatorio
99
- * durante un número variable de frames, y luego se resuelve al
100
- * carácter original. El orden de resolución es estocástico.
101
- */
102
- _decodePlay() {
103
- if (this._running) return;
104
- this._running = true;
105
- const chars = Array.from(
106
- this.renderRoot.querySelectorAll(".char")
107
- );
108
- if (chars.length === 0) {
109
- this._running = false;
110
- return;
111
- }
112
- const SCRAMBLE_CYCLES = 6;
113
- const FRAME_MS = 55;
114
- const delays = chars.map(
115
- () => Math.floor(Math.random() * chars.length * SCRAMBLE_CYCLES * 0.6) + SCRAMBLE_CYCLES
116
- );
117
- let frame = 0;
118
- const total = Math.max(...delays) + 2;
119
- const tick = () => {
120
- chars.forEach((span, i) => {
121
- const orig = span.dataset["original"] ?? "";
122
- if (frame < (delays[i] ?? 0)) {
123
- if (orig.trim() === "" || orig === "·" || orig === "-") return;
124
- span.textContent = KANA[Math.floor(Math.random() * KANA.length)] ?? orig;
125
- span.classList.add("is-scrambling");
126
- } else {
127
- span.textContent = orig;
128
- span.classList.remove("is-scrambling");
129
- }
130
- });
131
- frame++;
132
- if (frame < total) {
133
- setTimeout(tick, FRAME_MS);
134
- } else {
135
- chars.forEach((span) => {
136
- span.textContent = span.dataset["original"] ?? "";
137
- span.classList.remove("is-scrambling");
138
- });
139
- this._running = false;
140
- }
141
- };
142
- tick();
26
+ return skeletonTemplate({
27
+ shape: this.shape,
28
+ animation: this.animation,
29
+ surface: this.surface,
30
+ width: this.width,
31
+ height: this.height
32
+ });
143
33
  }
144
34
  };
145
- LibTextGlitch.styles = [
35
+ LibSkeleton.styles = [
146
36
  css`${unsafeCSS(sharedTokens)}`,
147
- css`${unsafeCSS(glitchCss)}`
37
+ css`${unsafeCSS(skeletonCss)}`
148
38
  ];
149
39
  __decorateClass([
150
- property({ type: String })
151
- ], LibTextGlitch.prototype, "text", 2);
40
+ property({ type: String, reflect: true })
41
+ ], LibSkeleton.prototype, "shape", 2);
152
42
  __decorateClass([
153
43
  property({ type: String, reflect: true })
154
- ], LibTextGlitch.prototype, "variant", 2);
44
+ ], LibSkeleton.prototype, "animation", 2);
155
45
  __decorateClass([
156
46
  property({ type: String, reflect: true })
157
- ], LibTextGlitch.prototype, "trigger", 2);
47
+ ], LibSkeleton.prototype, "surface", 2);
158
48
  __decorateClass([
159
- property({ type: Boolean, reflect: true })
160
- ], LibTextGlitch.prototype, "active", 2);
161
- LibTextGlitch = __decorateClass([
162
- customElement("lib-text-glitch")
163
- ], LibTextGlitch);
49
+ property({ type: String })
50
+ ], LibSkeleton.prototype, "width", 2);
51
+ __decorateClass([
52
+ property({ type: String })
53
+ ], LibSkeleton.prototype, "height", 2);
54
+ LibSkeleton = __decorateClass([
55
+ customElement("lib-skeleton")
56
+ ], LibSkeleton);
164
57
  export {
165
- LibTextGlitch
58
+ LibSkeleton
166
59
  };
167
60
  //# sourceMappingURL=index39.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index39.js","sources":["../src/components/atoms/text-glitch/lib-text-glitch.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult, PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport glitchCss from './lib-text-glitch.css?inline';\nimport { textGlitchTemplate } from './lib-text-glitch.html';\n\n/* ── Tipos públicos ─────────────────────────────────────────── */\n\n/** Variante visual del efecto de glitch. */\nexport type TextGlitchVariant = 'slice' | 'scan' | 'shift' | 'decode' | 'redact' | 'noise';\n\n/**\n * Modo de activación del efecto.\n * - `hover` → se activa al pasar el cursor (default).\n * - `always` → se activa de forma continua al montar el componente.\n */\nexport type TextGlitchTrigger = 'hover' | 'always';\n\n/* ── Pool de caracteres para el decode ──────────────────────── */\n\nconst KANA =\n 'ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ' +\n 'ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ガ ギ グ ゲ ゴ ' +\n 'ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ 渋 液 美 乱 進 間 静 陰 影 黒 白 墨 和 侘'.split(' ');\n\n/**\n * @element lib-text-glitch\n *\n * @prop {string} text - Texto a renderizar y distorsionar.\n * @prop {TextGlitchVariant} variant - Efecto visual: slice | scan | shift | decode | redact | noise.\n * @prop {TextGlitchTrigger} trigger - Modo de activación: hover | always.\n * @prop {boolean} active - Activa el efecto programáticamente (reflectado en atributo).\n *\n * @method play() - Reproduce el efecto una vez (scan / redact / decode).\n * @method stop() - Detiene el bucle `trigger=\"always\"`.\n */\n@customElement('lib-text-glitch')\nexport class LibTextGlitch extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(glitchCss)}`,\n ];\n\n /* ── Props ──────────────────────────────────────────────── */\n\n @property({ type: String })\n text: string = '';\n\n @property({ type: String, reflect: true })\n variant: TextGlitchVariant = 'slice';\n\n @property({ type: String, reflect: true })\n trigger: TextGlitchTrigger = 'hover';\n\n /** Activa el efecto desde el exterior (CSS reacciona a [active]). */\n @property({ type: Boolean, reflect: true })\n active: boolean = false;\n\n /* ── Estado interno ─────────────────────────────────────── */\n\n private _running = false;\n private _alwaysTimer?: ReturnType<typeof setTimeout>;\n\n /* Bound handler reutilizable para poder hacer removeEventListener */\n private readonly _boundMouseEnter = (): void => { this._decodePlay(); };\n\n /* ── Lifecycle ──────────────────────────────────────────── */\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._setupDecode();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('mouseenter', this._boundMouseEnter);\n clearTimeout(this._alwaysTimer);\n }\n\n override updated(changed: PropertyValues): void {\n const reInit =\n changed.has('variant') ||\n changed.has('trigger') ||\n changed.has('text');\n\n if (reInit) {\n /* Limpieza del ciclo anterior */\n this.removeEventListener('mouseenter', this._boundMouseEnter);\n clearTimeout(this._alwaysTimer);\n this._running = false;\n this._setupDecode();\n }\n }\n\n override render(): TemplateResult {\n return textGlitchTemplate({ text: this.text, variant: this.variant });\n }\n\n /* ── API pública ────────────────────────────────────────── */\n\n /**\n * Reproduce el efecto manualmente una vez.\n * - Para `decode`: lanza el scramble de kanji.\n * - Para `scan` / `redact`: activa [active] y lo retira al terminar.\n * - Para `slice` / `shift` / `noise`: activa [active] (CSS bucle).\n */\n play(): void {\n if (this.variant === 'decode') {\n this._decodePlay();\n return;\n }\n this.active = true;\n if (this.variant === 'scan' || this.variant === 'redact') {\n const dur = this.variant === 'scan' ? 620 : 720;\n setTimeout(() => { this.active = false; }, dur);\n }\n }\n\n /** Detiene el bucle `trigger=\"always\"` y desactiva [active]. */\n stop(): void {\n clearTimeout(this._alwaysTimer);\n this._running = false;\n this.active = false;\n }\n\n /* ── Decode engine ──────────────────────────────────────── */\n\n private _setupDecode(): void {\n if (this.variant !== 'decode') return;\n\n if (this.trigger === 'hover') {\n this.addEventListener('mouseenter', this._boundMouseEnter);\n } else {\n /* always: esperamos el primer render completo para tener los .char */\n this.updateComplete.then(() => { this._scheduleAlwaysDecode(); });\n }\n }\n\n private _scheduleAlwaysDecode(): void {\n this._decodePlay();\n /* Pausa entre repeticiones: proporcional a la longitud del texto */\n const pause = Math.max([...this.text].length * 55 * 1.5, 400) + 2000;\n this._alwaysTimer = setTimeout(() => { this._scheduleAlwaysDecode(); }, pause);\n }\n\n /**\n * Motor de decodificación kanji.\n *\n * Cada char span se sustituye por un katakana/kanji aleatorio\n * durante un número variable de frames, y luego se resuelve al\n * carácter original. El orden de resolución es estocástico.\n */\n private _decodePlay(): void {\n if (this._running) return;\n this._running = true;\n\n const chars = Array.from(\n this.renderRoot.querySelectorAll<HTMLElement>('.char')\n );\n\n if (chars.length === 0) {\n this._running = false;\n return;\n }\n\n const SCRAMBLE_CYCLES = 6;\n const FRAME_MS = 55;\n\n /* Delay estocástico por carácter — no resuelven de izquierda a derecha */\n const delays = chars.map(() =>\n Math.floor(Math.random() * chars.length * SCRAMBLE_CYCLES * 0.6) + SCRAMBLE_CYCLES\n );\n\n let frame = 0;\n const total = Math.max(...delays) + 2;\n\n const tick = (): void => {\n chars.forEach((span, i) => {\n const orig = span.dataset['original'] ?? '';\n\n if (frame < (delays[i] ?? 0)) {\n /* Espacios y puntuación — no se scramblea */\n if (orig.trim() === '' || orig === '·' || orig === '-') return;\n span.textContent = KANA[Math.floor(Math.random() * KANA.length)] ?? orig;\n span.classList.add('is-scrambling');\n } else {\n span.textContent = orig;\n span.classList.remove('is-scrambling');\n }\n });\n\n frame++;\n\n if (frame < total) {\n setTimeout(tick, FRAME_MS);\n } else {\n /* Garantía final — todos al original */\n chars.forEach(span => {\n span.textContent = span.dataset['original'] ?? '';\n span.classList.remove('is-scrambling');\n });\n this._running = false;\n }\n };\n\n tick();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-text-glitch': LibTextGlitch;\n }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index39.js","sources":["../src/components/atoms/skeleton/lib-skeleton.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport type { LibSkeletonShape, LibSkeletonAnimation, LibSkeletonSurface } from './lib-skeleton.html';\nimport { skeletonTemplate } from './lib-skeleton.html';\nimport skeletonCss from './lib-skeleton.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\n/**\n * @element lib-skeleton\n *\n * Bloque de carga que replica la arquitectura del contenido real.\n * Tres animaciones, tres superficies, diez formas semánticas.\n *\n * @slot — (vacío) El componente es puramente visual, sin contenido.\n *\n * @example — línea de texto\n * <lib-skeleton shape=\"line\" width=\"80%\"></lib-skeleton>\n *\n * @example — avatar 40px\n * <lib-skeleton shape=\"avatar\" width=\"40px\" height=\"40px\"></lib-skeleton>\n *\n * @example — dark + wave\n * <lib-skeleton shape=\"title\" surface=\"dark\" animation=\"wave\" width=\"60%\"></lib-skeleton>\n *\n * @example — kaki + pulse\n * <lib-skeleton shape=\"img\" surface=\"kaki\" animation=\"pulse\"></lib-skeleton>\n */\n@customElement('lib-skeleton')\nexport class LibSkeleton extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(skeletonCss)}`,\n ];\n\n /**\n * Forma semántica del bloque.\n * Cada shape tiene una altura por defecto en CSS:\n * - line : 13px\n * - title : 22px\n * - h1 : 36px\n * - avatar : border-radius full (width/height obligatorio)\n * - icon : border-radius sm (width/height obligatorio)\n * - btn : 36px\n * - badge : 20px\n * - pill : 22px, border-radius full\n * - img : 160px\n * - rect : sin altura — usar `height` prop\n */\n @property({ type: String, reflect: true })\n shape: LibSkeletonShape = 'rect';\n\n /**\n * Tipo de animación.\n * - shimmer : barrido de luz lateral (default)\n * - wave : barrido más lento y orgánico\n * - pulse : opacidad, sin movimiento\n */\n @property({ type: String, reflect: true })\n animation: LibSkeletonAnimation = 'shimmer';\n\n /**\n * Superficie de color.\n * - light : washi-200 → washi-100 (default)\n * - dark : washi-800 → washi-700\n * - kaki : kaki-200 → kaki-100\n */\n @property({ type: String, reflect: true })\n surface: LibSkeletonSurface = 'light';\n\n /** Anchura del bloque. Default: 100% */\n @property({ type: String })\n width = '100%';\n\n /**\n * Altura del bloque.\n * Si no se especifica, el CSS usa la altura propia de cada `shape`.\n * Obligatorio para `avatar`, `icon` y `rect`.\n */\n @property({ type: String })\n height = '';\n\n override render(): TemplateResult {\n return skeletonTemplate({\n shape: this.shape,\n animation: this.animation,\n surface: this.surface,\n width: this.width,\n height: this.height,\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-skeleton': LibSkeleton;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AA4BO,IAAM,cAAN,cAA0B,WAAW;AAAA,EAArC,cAAA;AAAA,UAAA,GAAA,SAAA;AAqBL,SAAA,QAA0B;AAS1B,SAAA,YAAkC;AASlC,SAAA,UAA8B;AAI9B,SAAA,QAAQ;AAQR,SAAA,SAAS;AAAA,EAAA;AAAA,EAEA,SAAyB;AAChC,WAAO,iBAAiB;AAAA,MACtB,OAAW,KAAK;AAAA,MAChB,WAAW,KAAK;AAAA,MAChB,SAAW,KAAK;AAAA,MAChB,OAAW,KAAK;AAAA,MAChB,QAAW,KAAK;AAAA,IAAA,CACjB;AAAA,EACH;AACF;AA9Da,YACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,WAAW,CAAC;AAC9B;AAiBA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GApB9B,YAqBX,WAAA,SAAA,CAAA;AASA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GA7B9B,YA8BX,WAAA,aAAA,CAAA;AASA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAtC9B,YAuCX,WAAA,WAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GA1Cf,YA2CX,WAAA,SAAA,CAAA;AAQA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAlDf,YAmDX,WAAA,UAAA,CAAA;AAnDW,cAAN,gBAAA;AAAA,EADN,cAAc,cAAc;AAAA,GAChB,WAAA;"}