@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/index71.js CHANGED
@@ -1,8 +1,8 @@
1
- import { unsafeCSS, css, LitElement } from "lit";
1
+ import { unsafeCSS, css, LitElement, html } from "lit";
2
2
  import { property, customElement } from "lit/decorators.js";
3
- import { drawerTemplate } from "./index326.js";
4
- import drawerCss from "./index327.js";
3
+ import cursorCss from "./index239.js";
5
4
  import sharedTokens from "./index196.js";
5
+ import { CURSOR_MODES } from "./index240.js";
6
6
  var __defProp = Object.defineProperty;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
8
  var __decorateClass = (decorators, target, key, kind) => {
@@ -13,143 +13,235 @@ var __decorateClass = (decorators, target, key, kind) => {
13
13
  if (kind && result) __defProp(target, key, result);
14
14
  return result;
15
15
  };
16
- let LibDrawer = class extends LitElement {
16
+ let LibCursorFollower = class extends LitElement {
17
17
  constructor() {
18
- var _a;
19
18
  super(...arguments);
20
- this._uid = (((_a = globalThis.crypto) == null ? void 0 : _a.getRandomValues(new Uint32Array(1))[0]) ?? Math.random()).toString(36).slice(0, 5);
21
- this.open = false;
22
- this.placement = "right";
23
- this.size = "md";
24
- this.variant = "default";
25
- this.label = "";
26
- this.eyebrow = "";
27
- this.subtitle = "";
28
- this.drawerLabel = "";
29
- this._onKeyDown = (e) => {
30
- var _a2;
31
- if (!this.open) return;
32
- if (e.key === "Escape") {
33
- e.preventDefault();
34
- this._close();
35
- return;
19
+ this.mode = "ink";
20
+ this.lerp = 0;
21
+ this.trail = false;
22
+ this._mouse = { x: -200, y: -200 };
23
+ this._lerped = { x: -200, y: -200 };
24
+ this._curstate = "hidden";
25
+ this._lastTrail = { x: 0, y: 0, t: 0 };
26
+ this._rafId = 0;
27
+ this._onMove = (e) => {
28
+ this._mouse.x = e.clientX;
29
+ this._mouse.y = e.clientY;
30
+ const dot = this._dot;
31
+ if (dot) {
32
+ dot.style.left = `${e.clientX}px`;
33
+ dot.style.top = `${e.clientY}px`;
36
34
  }
37
- if (e.key === "Tab") {
38
- const focusable = this._getFocusable();
39
- if (!focusable.length) return;
40
- const first = focusable[0];
41
- const last = focusable[focusable.length - 1];
42
- const active = (_a2 = this.shadowRoot) == null ? void 0 : _a2.activeElement;
43
- if (e.shiftKey) {
44
- if (active === first) {
45
- e.preventDefault();
46
- last == null ? void 0 : last.focus();
47
- }
35
+ const label = this._label;
36
+ if (label == null ? void 0 : label.classList.contains("is-visible")) {
37
+ label.style.left = `${e.clientX}px`;
38
+ label.style.top = `${e.clientY}px`;
39
+ }
40
+ if (this.trail) this._maybeSpawnTrail(e.clientX, e.clientY);
41
+ if (this._curstate === "hidden") this._setState("default");
42
+ };
43
+ this._onLeave = () => {
44
+ this._setState("hidden");
45
+ };
46
+ this._onEnter = () => {
47
+ this._setState("default");
48
+ };
49
+ this._onDown = () => {
50
+ this._setState("press");
51
+ };
52
+ this._onUp = () => {
53
+ const el = document.elementFromPoint(this._mouse.x, this._mouse.y);
54
+ this._setState(this._detectState(el));
55
+ };
56
+ this._onOver = (e) => {
57
+ if (this._curstate === "press") return;
58
+ const el = e.target;
59
+ const state = this._detectState(el);
60
+ this._setState(state);
61
+ const isDark = !!(el == null ? void 0 : el.closest('[data-cursor-zone="dark"]'));
62
+ this.toggleAttribute("dark-zone", isDark);
63
+ const labelAnchor = el == null ? void 0 : el.closest("[data-cursor-label]");
64
+ const label = this._label;
65
+ if (label) {
66
+ if (labelAnchor == null ? void 0 : labelAnchor.dataset["cursorLabel"]) {
67
+ label.textContent = labelAnchor.dataset["cursorLabel"];
68
+ label.classList.add("is-visible");
69
+ label.style.left = `${this._mouse.x}px`;
70
+ label.style.top = `${this._mouse.y}px`;
48
71
  } else {
49
- if (active === last) {
50
- e.preventDefault();
51
- first == null ? void 0 : first.focus();
52
- }
72
+ label.classList.remove("is-visible");
53
73
  }
54
74
  }
55
75
  };
76
+ this._loop = () => {
77
+ const factor = this.lerp > 0 ? this.lerp : CURSOR_MODES[this.mode].lerpFactor;
78
+ this._lerped.x += (this._mouse.x - this._lerped.x) * factor;
79
+ this._lerped.y += (this._mouse.y - this._lerped.y) * factor;
80
+ const ring = this._ring;
81
+ if (ring) {
82
+ ring.style.left = `${this._lerped.x}px`;
83
+ ring.style.top = `${this._lerped.y}px`;
84
+ }
85
+ this._rafId = requestAnimationFrame(this._loop);
86
+ };
56
87
  }
57
- /* ════════════════════════════════════════
58
- Ciclo de vida
59
- ════════════════════════════════════════ */
88
+ /* ── Refs a los elementos del shadow ── */
89
+ get _dot() {
90
+ return this.shadowRoot.querySelector(".cur-dot");
91
+ }
92
+ get _ring() {
93
+ return this.shadowRoot.querySelector(".cur-ring");
94
+ }
95
+ get _label() {
96
+ return this.shadowRoot.querySelector(".cur-label");
97
+ }
98
+ /* ── Lifecycle ── */
60
99
  connectedCallback() {
61
100
  super.connectedCallback();
62
- this.addEventListener("keydown", this._onKeyDown);
101
+ document.documentElement.style.cursor = "none";
102
+ window.addEventListener("mousemove", this._onMove, { passive: true });
103
+ window.addEventListener("mouseleave", this._onLeave, { passive: true });
104
+ window.addEventListener("mouseenter", this._onEnter, { passive: true });
105
+ window.addEventListener("mousedown", this._onDown, { passive: true });
106
+ window.addEventListener("mouseup", this._onUp, { passive: true });
107
+ window.addEventListener("mouseover", this._onOver, { passive: true });
108
+ this._rafId = requestAnimationFrame(this._loop);
63
109
  }
64
110
  disconnectedCallback() {
65
111
  super.disconnectedCallback();
66
- this.removeEventListener("keydown", this._onKeyDown);
67
- document.body.style.overflow = "";
112
+ document.documentElement.style.cursor = "";
113
+ window.removeEventListener("mousemove", this._onMove);
114
+ window.removeEventListener("mouseleave", this._onLeave);
115
+ window.removeEventListener("mouseenter", this._onEnter);
116
+ window.removeEventListener("mousedown", this._onDown);
117
+ window.removeEventListener("mouseup", this._onUp);
118
+ window.removeEventListener("mouseover", this._onOver);
119
+ cancelAnimationFrame(this._rafId);
68
120
  }
121
+ /** Aplica el modo visual al dot y ring */
69
122
  updated(changed) {
70
- if (!changed.has("open")) return;
71
- if (this.open) {
72
- document.body.style.overflow = "hidden";
73
- requestAnimationFrame(() => {
74
- var _a;
75
- const panel = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector(".dr");
76
- panel == null ? void 0 : panel.focus();
77
- });
78
- } else {
79
- document.body.style.overflow = "";
80
- }
81
- if (!this.drawerLabel) {
82
- this.drawerLabel = this.label || "Panel";
123
+ if (changed.has("mode")) {
124
+ this._applyMode();
83
125
  }
84
126
  }
85
- /* ════════════════════════════════════════
86
- API pública
87
- ════════════════════════════════════════ */
88
- /** Cierra el drawer y emite el evento */
89
- _close() {
90
- if (!this.open) return;
91
- this.open = false;
92
- this.dispatchEvent(new CustomEvent("ui-lib-drawer-close", {
93
- bubbles: true,
94
- composed: true
95
- }));
127
+ /* ── API pública ── */
128
+ /** Cambia el modo en tiempo de ejecución */
129
+ setMode(mode) {
130
+ this.mode = mode;
96
131
  }
97
- /* ════════════════════════════════════════
98
- Focus trap
99
- ════════════════════════════════════════ */
100
- _getFocusable() {
101
- var _a;
102
- const selector = [
103
- "a[href]",
104
- "button:not([disabled])",
105
- "input:not([disabled])",
106
- "select:not([disabled])",
107
- "textarea:not([disabled])",
108
- '[tabindex]:not([tabindex="-1"])'
109
- ].join(",");
110
- return Array.from(
111
- ((_a = this.shadowRoot) == null ? void 0 : _a.querySelectorAll(selector)) ?? []
112
- );
132
+ /** Activa o desactiva el trail de tinta */
133
+ toggleTrail() {
134
+ this.trail = !this.trail;
135
+ this._lastTrail = { x: this._mouse.x, y: this._mouse.y, t: performance.now() };
113
136
  }
114
- /* ════════════════════════════════════════
115
- Render
116
- ════════════════════════════════════════ */
137
+ /* ── Render ── */
117
138
  render() {
118
- return drawerTemplate(this);
139
+ return html`
140
+ <div class="cur-dot" part="dot"></div>
141
+ <div class="cur-ring" part="ring"></div>
142
+ <div class="cur-label" part="label"></div>
143
+ `;
144
+ }
145
+ /* ── Helpers ── */
146
+ _detectState(el) {
147
+ if (!el) return "default";
148
+ const textZone = el.closest('[data-cursor-zone="text"]');
149
+ if (textZone && el.matches("p, h1, h2, h3, h4, h5, h6, em, strong, span:not(.cursor-zone-label)")) {
150
+ return "text";
151
+ }
152
+ if (el.matches('a, button, input, select, textarea, [role="button"], [data-interactive], .interactive')) {
153
+ return "hover";
154
+ }
155
+ if (el.closest('a, button, [role="button"]')) {
156
+ return "hover";
157
+ }
158
+ return "default";
159
+ }
160
+ _setState(state) {
161
+ if (this._curstate === state) return;
162
+ this._curstate = state;
163
+ this.setAttribute("curstate", state);
164
+ }
165
+ /** Aplica los estilos base del modo al dot y ring */
166
+ _applyMode() {
167
+ const m = CURSOR_MODES[this.mode];
168
+ if (!m) return;
169
+ const dot = this._dot;
170
+ const ring = this._ring;
171
+ if (!dot || !ring) return;
172
+ dot.style.background = m.dotBg;
173
+ dot.style.width = m.dotSize;
174
+ dot.style.height = m.dotSize;
175
+ ring.style.border = m.ringBorder;
176
+ ring.style.background = m.ringBg;
177
+ ring.style.width = m.ringSize;
178
+ ring.style.height = m.ringSize;
179
+ ring.style.mixBlendMode = m.ringMix;
180
+ }
181
+ /** Genera partículas de tinta proporcionales a la velocidad */
182
+ _maybeSpawnTrail(x, y) {
183
+ const now = performance.now();
184
+ const dx = x - this._lastTrail.x;
185
+ const dy = y - this._lastTrail.y;
186
+ const dist = Math.sqrt(dx * dx + dy * dy);
187
+ const dt = Math.max(1, now - this._lastTrail.t);
188
+ const speed = dist / dt;
189
+ if (dist > 4) {
190
+ this._spawnTrailParticle(x, y, speed);
191
+ this._lastTrail = { x, y, t: now };
192
+ }
193
+ }
194
+ _spawnTrailParticle(x, y, speed) {
195
+ const size = Math.max(2, Math.min(8, speed * 1.5));
196
+ const isLight = this.mode === "ghost";
197
+ const color = isLight ? "rgba(250,247,244,0.4)" : "var(--color-kaki-500)";
198
+ const el = document.createElement("div");
199
+ el.style.cssText = `
200
+ position: fixed;
201
+ border-radius: 50%;
202
+ pointer-events: none;
203
+ z-index: 9997;
204
+ left: ${x}px;
205
+ top: ${y}px;
206
+ width: ${size}px;
207
+ height: ${size}px;
208
+ background: ${color};
209
+ transform: translate(-50%, -50%) scale(1);
210
+ opacity: 0.4;
211
+ animation: lib-ink-fade ${600 + speed * 50}ms cubic-bezier(0.2, 0, 0.8, 1) forwards;
212
+ `;
213
+ document.body.appendChild(el);
214
+ setTimeout(() => el.remove(), 900);
119
215
  }
120
216
  };
121
- LibDrawer.styles = [
217
+ LibCursorFollower.styles = [
122
218
  css`${unsafeCSS(sharedTokens)}`,
123
- css`${unsafeCSS(drawerCss)}`
219
+ css`${unsafeCSS(cursorCss)}`
124
220
  ];
125
- __decorateClass([
126
- property({ type: Boolean, reflect: true })
127
- ], LibDrawer.prototype, "open", 2);
128
221
  __decorateClass([
129
222
  property({ type: String, reflect: true })
130
- ], LibDrawer.prototype, "placement", 2);
223
+ ], LibCursorFollower.prototype, "mode", 2);
131
224
  __decorateClass([
132
- property({ type: String, reflect: true })
133
- ], LibDrawer.prototype, "size", 2);
134
- __decorateClass([
135
- property({ type: String, reflect: true })
136
- ], LibDrawer.prototype, "variant", 2);
137
- __decorateClass([
138
- property({ type: String })
139
- ], LibDrawer.prototype, "label", 2);
225
+ property({ type: Number })
226
+ ], LibCursorFollower.prototype, "lerp", 2);
140
227
  __decorateClass([
141
- property({ type: String })
142
- ], LibDrawer.prototype, "eyebrow", 2);
143
- __decorateClass([
144
- property({ type: String })
145
- ], LibDrawer.prototype, "subtitle", 2);
146
- __decorateClass([
147
- property({ type: String, attribute: "drawer-label" })
148
- ], LibDrawer.prototype, "drawerLabel", 2);
149
- LibDrawer = __decorateClass([
150
- customElement("lib-drawer")
151
- ], LibDrawer);
228
+ property({ type: Boolean })
229
+ ], LibCursorFollower.prototype, "trail", 2);
230
+ LibCursorFollower = __decorateClass([
231
+ customElement("lib-cursor-follower")
232
+ ], LibCursorFollower);
233
+ if (!document.head.querySelector("#lib-cursor-keyframes")) {
234
+ const s = document.createElement("style");
235
+ s.id = "lib-cursor-keyframes";
236
+ s.textContent = `
237
+ @keyframes lib-ink-fade {
238
+ 0% { opacity: 0.4; transform: translate(-50%,-50%) scale(1); }
239
+ 100% { opacity: 0; transform: translate(-50%,-50%) scale(0.2); }
240
+ }
241
+ `;
242
+ document.head.appendChild(s);
243
+ }
152
244
  export {
153
- LibDrawer
245
+ LibCursorFollower
154
246
  };
155
247
  //# sourceMappingURL=index71.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index71.js","sources":["../src/components/organisms/drawer/lib-drawer.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { drawerTemplate } from './lib-drawer.html';\nimport drawerCss from './lib-drawer.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport type { DrawerPlacement, DrawerSize, DrawerVariant } from './lib-drawer.types';\n\n/**\n * lib-drawer — Shibui UI · SG-59\n *\n * @prop open — Abre / cierra el drawer\n * @prop placement — 'right'(default) | 'left' | 'top' | 'bottom'\n * @prop size — 'sm' | 'md'(default) | 'lg' | 'xl' | 'full'\n * @prop variant — 'default' | 'dark' | 'kintsugi' | 'kintsugi-dark' | 'glitch' | 'glitch-dark'\n * @prop label — Texto del título (también rellenable via slot[name=\"title\"])\n * @prop eyebrow — Texto del eyebrow (también via slot[name=\"eyebrow\"])\n * @prop subtitle — Texto del subtítulo (también via slot[name=\"subtitle\"])\n * @prop drawer-label — Aria-label del dialog (default = label)\n *\n * @slot — Contenido del body\n * @slot title — Reemplaza el título\n * @slot eyebrow — Reemplaza el eyebrow\n * @slot subtitle — Reemplaza el subtítulo\n * @slot footer — Botones de pie (oculto si vacío)\n *\n * @fires ui-lib-drawer-close — Cuando el drawer se cierra (backdrop, Escape, botón X)\n */\n@customElement('lib-drawer')\nexport class LibDrawer extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(drawerCss)}`,\n ];\n\n /* ── Identificador único para aria ── */\n readonly _uid: string = (globalThis.crypto?.getRandomValues(new Uint32Array(1))[0] ?? Math.random())\n .toString(36)\n .slice(0, 5);\n\n @property({ type: Boolean, reflect: true })\n open = false;\n\n @property({ type: String, reflect: true })\n placement: DrawerPlacement = 'right';\n\n @property({ type: String, reflect: true })\n size: DrawerSize = 'md';\n\n @property({ type: String, reflect: true })\n variant: DrawerVariant = 'default';\n\n @property({ type: String })\n label = '';\n\n @property({ type: String })\n eyebrow = '';\n\n @property({ type: String })\n subtitle = '';\n\n @property({ type: String, attribute: 'drawer-label' })\n drawerLabel = '';\n\n /* ════════════════════════════════════════\n Ciclo de vida\n ════════════════════════════════════════ */\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('keydown', this._onKeyDown);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this._onKeyDown);\n // Restaurar scroll por si se destruye mientras está abierto\n document.body.style.overflow = '';\n }\n\n override updated(changed: Map<PropertyKey, unknown>): void {\n if (!changed.has('open')) return;\n\n if (this.open) {\n document.body.style.overflow = 'hidden';\n // Dar foco al panel para que los eventos de teclado funcionen\n requestAnimationFrame(() => {\n const panel = this.shadowRoot?.querySelector<HTMLElement>('.dr');\n panel?.focus();\n });\n } else {\n document.body.style.overflow = '';\n }\n\n // Sync aria-label si no se pasó drawer-label explícito\n if (!this.drawerLabel) {\n this.drawerLabel = this.label || 'Panel';\n }\n }\n\n /* ════════════════════════════════════════\n API pública\n ════════════════════════════════════════ */\n\n /** Cierra el drawer y emite el evento */\n _close(): void {\n if (!this.open) return;\n this.open = false;\n this.dispatchEvent(new CustomEvent('ui-lib-drawer-close', {\n bubbles: true,\n composed: true,\n }));\n }\n\n /* ════════════════════════════════════════\n Focus trap\n ════════════════════════════════════════ */\n\n private _getFocusable(): HTMLElement[] {\n const selector = [\n 'a[href]', 'button:not([disabled])', 'input:not([disabled])',\n 'select:not([disabled])', 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(',');\n\n return Array.from(\n this.shadowRoot?.querySelectorAll<HTMLElement>(selector) ?? []\n );\n }\n\n private _onKeyDown = (e: KeyboardEvent): void => {\n if (!this.open) return;\n\n if (e.key === 'Escape') {\n e.preventDefault();\n this._close();\n return;\n }\n\n if (e.key === 'Tab') {\n const focusable = this._getFocusable();\n if (!focusable.length) return;\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = this.shadowRoot?.activeElement as HTMLElement;\n\n if (e.shiftKey) {\n if (active === first) { e.preventDefault(); last?.focus(); }\n } else {\n if (active === last) { e.preventDefault(); first?.focus(); }\n }\n }\n };\n\n /* ════════════════════════════════════════\n Render\n ════════════════════════════════════════ */\n protected override render(): TemplateResult {\n return drawerTemplate(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-drawer': LibDrawer;\n }\n}"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"index71.js","sources":["../src/components/organisms/cursor-follower/lib-cursor-follower.component.ts"],"sourcesContent":["import { LitElement, html, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport cursorCss from './lib-cursor-follower.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport { CURSOR_MODES } from './lib-cursor-follower.types';\nimport type { CursorMode, CursorState } from './lib-cursor-follower.types';\n\n/**\n * @element lib-cursor-follower\n *\n * Cursor personalizado con tres capas: dot exacto, ring con lerp e inercia,\n * y label contextual. Detecta automáticamente el tipo de elemento bajo el cursor.\n *\n * Coloca el componente una sola vez al inicio del <body>. Se encarga de ocultar\n * el cursor nativo del documento.\n *\n * @prop {CursorMode} mode — ink · minimal · kaki · ghost (default: 'ink')\n * @prop {number} lerp — Factor de interpolación del ring 0–1 (override del modo)\n * @prop {boolean} trail — Activa la cola de tinta al mover rápido\n *\n * @method setMode(mode) — Cambia el modo en tiempo de ejecución\n * @method toggleTrail() — Activa/desactiva el trail\n *\n * @csspart dot — El punto exacto\n * @csspart ring — El anillo con lag\n * @csspart label — La etiqueta contextual\n */\n@customElement('lib-cursor-follower')\nexport class LibCursorFollower extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(cursorCss)}`,\n ];\n\n /* ── Props ── */\n\n @property({ type: String, reflect: true })\n mode: CursorMode = 'ink';\n\n @property({ type: Number })\n lerp = 0; // 0 = usar el del modo\n\n @property({ type: Boolean })\n trail = false;\n\n /* ── Estado interno del cursor (no reactivo — actualizado en rAF) ── */\n\n /** Posición exacta del ratón */\n private _mouse = { x: -200, y: -200 };\n /** Posición interpolada del ring */\n private _lerped = { x: -200, y: -200 };\n\n /** Estado contextual actual */\n private _curstate: CursorState = 'hidden';\n\n /** Anclajes para el trail */\n private _lastTrail = { x: 0, y: 0, t: 0 };\n private _rafId = 0;\n\n /* ── Refs a los elementos del shadow ── */\n\n private get _dot(): HTMLElement { return this.shadowRoot!.querySelector('.cur-dot') as HTMLElement; }\n private get _ring(): HTMLElement { return this.shadowRoot!.querySelector('.cur-ring') as HTMLElement; }\n private get _label(): HTMLElement { return this.shadowRoot!.querySelector('.cur-label') as HTMLElement; }\n\n /* ── Lifecycle ── */\n\n override connectedCallback(): void {\n super.connectedCallback();\n // Ocultar cursor nativo\n document.documentElement.style.cursor = 'none';\n\n window.addEventListener('mousemove', this._onMove, { passive: true });\n window.addEventListener('mouseleave', this._onLeave, { passive: true });\n window.addEventListener('mouseenter', this._onEnter, { passive: true });\n window.addEventListener('mousedown', this._onDown, { passive: true });\n window.addEventListener('mouseup', this._onUp, { passive: true });\n window.addEventListener('mouseover', this._onOver, { passive: true });\n\n this._rafId = requestAnimationFrame(this._loop);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.documentElement.style.cursor = '';\n\n window.removeEventListener('mousemove', this._onMove);\n window.removeEventListener('mouseleave', this._onLeave);\n window.removeEventListener('mouseenter', this._onEnter);\n window.removeEventListener('mousedown', this._onDown);\n window.removeEventListener('mouseup', this._onUp);\n window.removeEventListener('mouseover', this._onOver);\n\n cancelAnimationFrame(this._rafId);\n }\n\n /** Aplica el modo visual al dot y ring */\n override updated(changed: Map<string, unknown>): void {\n if (changed.has('mode')) {\n this._applyMode();\n }\n }\n\n /* ── API pública ── */\n\n /** Cambia el modo en tiempo de ejecución */\n public setMode(mode: CursorMode): void {\n this.mode = mode;\n }\n\n /** Activa o desactiva el trail de tinta */\n public toggleTrail(): void {\n this.trail = !this.trail;\n this._lastTrail = { x: this._mouse.x, y: this._mouse.y, t: performance.now() };\n }\n\n /* ── Render ── */\n\n protected override render(): TemplateResult {\n return html`\n <div class=\"cur-dot\" part=\"dot\"></div>\n <div class=\"cur-ring\" part=\"ring\"></div>\n <div class=\"cur-label\" part=\"label\"></div>\n `;\n }\n\n /* ── Event handlers ── */\n\n private _onMove = (e: MouseEvent): void => {\n this._mouse.x = e.clientX;\n this._mouse.y = e.clientY;\n\n // Dot sigue instantáneamente\n const dot = this._dot;\n if (dot) {\n dot.style.left = `${e.clientX}px`;\n dot.style.top = `${e.clientY}px`;\n }\n\n // Label sigue al dot\n const label = this._label;\n if (label?.classList.contains('is-visible')) {\n label.style.left = `${e.clientX}px`;\n label.style.top = `${e.clientY}px`;\n }\n\n // Trail\n if (this.trail) this._maybeSpawnTrail(e.clientX, e.clientY);\n\n // Si estaba oculto, restaurar\n if (this._curstate === 'hidden') this._setState('default');\n };\n\n private _onLeave = (): void => { this._setState('hidden'); };\n private _onEnter = (): void => { this._setState('default'); };\n private _onDown = (): void => { this._setState('press'); };\n private _onUp = (): void => {\n // Volver al estado previo al press\n const el = document.elementFromPoint(this._mouse.x, this._mouse.y);\n this._setState(this._detectState(el));\n };\n\n private _onOver = (e: MouseEvent): void => {\n if (this._curstate === 'press') return; // no interrumpir press\n\n const el = e.target as Element | null;\n const state = this._detectState(el);\n this._setState(state);\n\n // Zona oscura — el ring adapta el color\n const isDark = !!el?.closest('[data-cursor-zone=\"dark\"]');\n this.toggleAttribute('dark-zone', isDark);\n\n // Label contextual\n const labelAnchor = el?.closest('[data-cursor-label]') as HTMLElement | null;\n const label = this._label;\n if (label) {\n if (labelAnchor?.dataset['cursorLabel']) {\n label.textContent = labelAnchor.dataset['cursorLabel'];\n label.classList.add('is-visible');\n label.style.left = `${this._mouse.x}px`;\n label.style.top = `${this._mouse.y}px`;\n } else {\n label.classList.remove('is-visible');\n }\n }\n };\n\n /* ── Loop de animación del ring ── */\n\n private _loop = (): void => {\n const factor = this.lerp > 0\n ? this.lerp\n : CURSOR_MODES[this.mode].lerpFactor;\n\n this._lerped.x += (this._mouse.x - this._lerped.x) * factor;\n this._lerped.y += (this._mouse.y - this._lerped.y) * factor;\n\n const ring = this._ring;\n if (ring) {\n ring.style.left = `${this._lerped.x}px`;\n ring.style.top = `${this._lerped.y}px`;\n }\n\n this._rafId = requestAnimationFrame(this._loop);\n };\n\n /* ── Helpers ── */\n\n private _detectState(el: Element | null): CursorState {\n if (!el) return 'default';\n\n // Texto editable / seleccionable\n const textZone = el.closest('[data-cursor-zone=\"text\"]');\n if (textZone && el.matches('p, h1, h2, h3, h4, h5, h6, em, strong, span:not(.cursor-zone-label)')) {\n return 'text';\n }\n\n // Elemento interactivo\n if (el.matches('a, button, input, select, textarea, [role=\"button\"], [data-interactive], .interactive')) {\n return 'hover';\n }\n if (el.closest('a, button, [role=\"button\"]')) {\n return 'hover';\n }\n\n return 'default';\n }\n\n private _setState(state: CursorState): void {\n if (this._curstate === state) return;\n this._curstate = state;\n this.setAttribute('curstate', state);\n }\n\n /** Aplica los estilos base del modo al dot y ring */\n private _applyMode(): void {\n const m = CURSOR_MODES[this.mode];\n if (!m) return;\n\n const dot = this._dot;\n const ring = this._ring;\n if (!dot || !ring) return;\n\n dot.style.background = m.dotBg;\n dot.style.width = m.dotSize;\n dot.style.height = m.dotSize;\n\n ring.style.border = m.ringBorder;\n ring.style.background = m.ringBg;\n ring.style.width = m.ringSize;\n ring.style.height = m.ringSize;\n ring.style.mixBlendMode = m.ringMix;\n }\n\n /** Genera partículas de tinta proporcionales a la velocidad */\n private _maybeSpawnTrail(x: number, y: number): void {\n const now = performance.now();\n const dx = x - this._lastTrail.x;\n const dy = y - this._lastTrail.y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n const dt = Math.max(1, now - this._lastTrail.t);\n const speed = dist / dt;\n\n if (dist > 4) {\n this._spawnTrailParticle(x, y, speed);\n this._lastTrail = { x, y, t: now };\n }\n }\n\n private _spawnTrailParticle(x: number, y: number, speed: number): void {\n const size = Math.max(2, Math.min(8, speed * 1.5));\n const isLight = this.mode === 'ghost';\n const color = isLight\n ? 'rgba(250,247,244,0.4)'\n : 'var(--color-kaki-500)';\n\n const el = document.createElement('div');\n el.style.cssText = `\n position: fixed;\n border-radius: 50%;\n pointer-events: none;\n z-index: 9997;\n left: ${x}px;\n top: ${y}px;\n width: ${size}px;\n height: ${size}px;\n background: ${color};\n transform: translate(-50%, -50%) scale(1);\n opacity: 0.4;\n animation: lib-ink-fade ${600 + speed * 50}ms cubic-bezier(0.2, 0, 0.8, 1) forwards;\n `;\n document.body.appendChild(el);\n setTimeout(() => el.remove(), 900);\n }\n}\n\n/* Keyframe global para las partículas de trail */\nif (!document.head.querySelector('#lib-cursor-keyframes')) {\n const s = document.createElement('style');\n s.id = 'lib-cursor-keyframes';\n s.textContent = `\n @keyframes lib-ink-fade {\n 0% { opacity: 0.4; transform: translate(-50%,-50%) scale(1); }\n 100% { opacity: 0; transform: translate(-50%,-50%) scale(0.2); }\n }\n `;\n document.head.appendChild(s);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-cursor-follower': LibCursorFollower;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AA4BO,IAAM,oBAAN,cAAgC,WAAW;AAAA,EAA3C,cAAA;AAAA,UAAA,GAAA,SAAA;AASL,SAAA,OAAmB;AAGnB,SAAA,OAAO;AAGP,SAAA,QAAQ;AAKR,SAAQ,SAAU,EAAE,GAAG,MAAM,GAAG,KAAA;AAEhC,SAAQ,UAAU,EAAE,GAAG,MAAM,GAAG,KAAA;AAGhC,SAAQ,YAAyB;AAGjC,SAAQ,aAAc,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAA;AACvC,SAAQ,SAAc;AAuEtB,SAAQ,UAAU,CAAC,MAAwB;AACzC,WAAK,OAAO,IAAI,EAAE;AAClB,WAAK,OAAO,IAAI,EAAE;AAGlB,YAAM,MAAM,KAAK;AACjB,UAAI,KAAK;AACP,YAAI,MAAM,OAAO,GAAG,EAAE,OAAO;AAC7B,YAAI,MAAM,MAAO,GAAG,EAAE,OAAO;AAAA,MAC/B;AAGA,YAAM,QAAQ,KAAK;AACnB,UAAI,+BAAO,UAAU,SAAS,eAAe;AAC3C,cAAM,MAAM,OAAO,GAAG,EAAE,OAAO;AAC/B,cAAM,MAAM,MAAO,GAAG,EAAE,OAAO;AAAA,MACjC;AAGA,UAAI,KAAK,MAAO,MAAK,iBAAiB,EAAE,SAAS,EAAE,OAAO;AAG1D,UAAI,KAAK,cAAc,SAAU,MAAK,UAAU,SAAS;AAAA,IAC3D;AAEA,SAAQ,WAAY,MAAY;AAAE,WAAK,UAAU,QAAQ;AAAA,IAAG;AAC5D,SAAQ,WAAY,MAAY;AAAE,WAAK,UAAU,SAAS;AAAA,IAAG;AAC7D,SAAQ,UAAY,MAAY;AAAE,WAAK,UAAU,OAAO;AAAA,IAAG;AAC3D,SAAQ,QAAY,MAAY;AAE9B,YAAM,KAAK,SAAS,iBAAiB,KAAK,OAAO,GAAG,KAAK,OAAO,CAAC;AACjE,WAAK,UAAU,KAAK,aAAa,EAAE,CAAC;AAAA,IACtC;AAEA,SAAQ,UAAU,CAAC,MAAwB;AACzC,UAAI,KAAK,cAAc,QAAS;AAEhC,YAAM,KAAK,EAAE;AACb,YAAM,QAAQ,KAAK,aAAa,EAAE;AAClC,WAAK,UAAU,KAAK;AAGpB,YAAM,SAAS,CAAC,EAAC,yBAAI,QAAQ;AAC7B,WAAK,gBAAgB,aAAa,MAAM;AAGxC,YAAM,cAAc,yBAAI,QAAQ;AAChC,YAAM,QAAQ,KAAK;AACnB,UAAI,OAAO;AACT,YAAI,2CAAa,QAAQ,gBAAgB;AACvC,gBAAM,cAAc,YAAY,QAAQ,aAAa;AACrD,gBAAM,UAAU,IAAI,YAAY;AAChC,gBAAM,MAAM,OAAO,GAAG,KAAK,OAAO,CAAC;AACnC,gBAAM,MAAM,MAAO,GAAG,KAAK,OAAO,CAAC;AAAA,QACrC,OAAO;AACL,gBAAM,UAAU,OAAO,YAAY;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAIA,SAAQ,QAAQ,MAAY;AAC1B,YAAM,SAAS,KAAK,OAAO,IACvB,KAAK,OACL,aAAa,KAAK,IAAI,EAAE;AAE5B,WAAK,QAAQ,MAAM,KAAK,OAAO,IAAI,KAAK,QAAQ,KAAK;AACrD,WAAK,QAAQ,MAAM,KAAK,OAAO,IAAI,KAAK,QAAQ,KAAK;AAErD,YAAM,OAAO,KAAK;AAClB,UAAI,MAAM;AACR,aAAK,MAAM,OAAO,GAAG,KAAK,QAAQ,CAAC;AACnC,aAAK,MAAM,MAAO,GAAG,KAAK,QAAQ,CAAC;AAAA,MACrC;AAEA,WAAK,SAAS,sBAAsB,KAAK,KAAK;AAAA,IAChD;AAAA,EAAA;AAAA;AAAA,EAhJA,IAAY,OAAsB;AAAE,WAAO,KAAK,WAAY,cAAc,UAAU;AAAA,EAAoB;AAAA,EACxG,IAAY,QAAsB;AAAE,WAAO,KAAK,WAAY,cAAc,WAAW;AAAA,EAAmB;AAAA,EACxG,IAAY,SAAsB;AAAE,WAAO,KAAK,WAAY,cAAc,YAAY;AAAA,EAAkB;AAAA;AAAA,EAI/F,oBAA0B;AACjC,UAAM,kBAAA;AAEN,aAAS,gBAAgB,MAAM,SAAS;AAExC,WAAO,iBAAiB,aAAc,KAAK,SAAW,EAAE,SAAS,MAAM;AACvE,WAAO,iBAAiB,cAAc,KAAK,UAAW,EAAE,SAAS,MAAM;AACvE,WAAO,iBAAiB,cAAc,KAAK,UAAW,EAAE,SAAS,MAAM;AACvE,WAAO,iBAAiB,aAAc,KAAK,SAAW,EAAE,SAAS,MAAM;AACvE,WAAO,iBAAiB,WAAc,KAAK,OAAW,EAAE,SAAS,MAAM;AACvE,WAAO,iBAAiB,aAAc,KAAK,SAAW,EAAE,SAAS,MAAM;AAEvE,SAAK,SAAS,sBAAsB,KAAK,KAAK;AAAA,EAChD;AAAA,EAES,uBAA6B;AACpC,UAAM,qBAAA;AACN,aAAS,gBAAgB,MAAM,SAAS;AAExC,WAAO,oBAAoB,aAAc,KAAK,OAAO;AACrD,WAAO,oBAAoB,cAAc,KAAK,QAAQ;AACtD,WAAO,oBAAoB,cAAc,KAAK,QAAQ;AACtD,WAAO,oBAAoB,aAAc,KAAK,OAAO;AACrD,WAAO,oBAAoB,WAAc,KAAK,KAAK;AACnD,WAAO,oBAAoB,aAAc,KAAK,OAAO;AAErD,yBAAqB,KAAK,MAAM;AAAA,EAClC;AAAA;AAAA,EAGS,QAAQ,SAAqC;AACpD,QAAI,QAAQ,IAAI,MAAM,GAAG;AACvB,WAAK,WAAA;AAAA,IACP;AAAA,EACF;AAAA;AAAA;AAAA,EAKO,QAAQ,MAAwB;AACrC,SAAK,OAAO;AAAA,EACd;AAAA;AAAA,EAGO,cAAoB;AACzB,SAAK,QAAQ,CAAC,KAAK;AACnB,SAAK,aAAa,EAAE,GAAG,KAAK,OAAO,GAAG,GAAG,KAAK,OAAO,GAAG,GAAG,YAAY,MAAI;AAAA,EAC7E;AAAA;AAAA,EAImB,SAAyB;AAC1C,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKT;AAAA;AAAA,EAqFQ,aAAa,IAAiC;AACpD,QAAI,CAAC,GAAI,QAAO;AAGhB,UAAM,WAAW,GAAG,QAAQ,2BAA2B;AACvD,QAAI,YAAY,GAAG,QAAQ,qEAAqE,GAAG;AACjG,aAAO;AAAA,IACT;AAGA,QAAI,GAAG,QAAQ,uFAAuF,GAAG;AACvG,aAAO;AAAA,IACT;AACA,QAAI,GAAG,QAAQ,4BAA4B,GAAG;AAC5C,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,UAAU,OAA0B;AAC1C,QAAI,KAAK,cAAc,MAAO;AAC9B,SAAK,YAAY;AACjB,SAAK,aAAa,YAAY,KAAK;AAAA,EACrC;AAAA;AAAA,EAGQ,aAAmB;AACzB,UAAM,IAAI,aAAa,KAAK,IAAI;AAChC,QAAI,CAAC,EAAG;AAER,UAAM,MAAO,KAAK;AAClB,UAAM,OAAO,KAAK;AAClB,QAAI,CAAC,OAAO,CAAC,KAAM;AAEnB,QAAI,MAAM,aAAa,EAAE;AACzB,QAAI,MAAM,QAAa,EAAE;AACzB,QAAI,MAAM,SAAa,EAAE;AAEzB,SAAK,MAAM,SAAa,EAAE;AAC1B,SAAK,MAAM,aAAa,EAAE;AAC1B,SAAK,MAAM,QAAa,EAAE;AAC1B,SAAK,MAAM,SAAa,EAAE;AAC1B,SAAK,MAAM,eAAe,EAAE;AAAA,EAC9B;AAAA;AAAA,EAGQ,iBAAiB,GAAW,GAAiB;AACnD,UAAM,MAAO,YAAY,IAAA;AACzB,UAAM,KAAO,IAAI,KAAK,WAAW;AACjC,UAAM,KAAO,IAAI,KAAK,WAAW;AACjC,UAAM,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AACxC,UAAM,KAAO,KAAK,IAAI,GAAG,MAAM,KAAK,WAAW,CAAC;AAChD,UAAM,QAAQ,OAAO;AAErB,QAAI,OAAO,GAAG;AACZ,WAAK,oBAAoB,GAAG,GAAG,KAAK;AACpC,WAAK,aAAa,EAAE,GAAG,GAAG,GAAG,IAAA;AAAA,IAC/B;AAAA,EACF;AAAA,EAEQ,oBAAoB,GAAW,GAAW,OAAqB;AACrE,UAAM,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,QAAQ,GAAG,CAAC;AACjD,UAAM,UAAU,KAAK,SAAS;AAC9B,UAAM,QAAQ,UACV,0BACA;AAEJ,UAAM,KAAK,SAAS,cAAc,KAAK;AACvC,OAAG,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,cAKT,CAAC;AAAA,aACF,CAAC;AAAA,eACC,IAAI;AAAA,gBACH,IAAI;AAAA,oBACA,KAAK;AAAA;AAAA;AAAA,gCAGO,MAAM,QAAQ,EAAE;AAAA;AAE5C,aAAS,KAAK,YAAY,EAAE;AAC5B,eAAW,MAAM,GAAG,OAAA,GAAU,GAAG;AAAA,EACnC;AACF;AA3Qa,kBACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,SAAS,CAAC;AAC5B;AAKA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAR9B,kBASX,WAAA,QAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAXf,kBAYX,WAAA,QAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAA,CAAS;AAAA,GAdhB,kBAeX,WAAA,SAAA,CAAA;AAfW,oBAAN,gBAAA;AAAA,EADN,cAAc,qBAAqB;AAAA,GACvB,iBAAA;AA8Qb,IAAI,CAAC,SAAS,KAAK,cAAc,uBAAuB,GAAG;AACzD,QAAM,IAAI,SAAS,cAAc,OAAO;AACxC,IAAE,KAAK;AACP,IAAE,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAMhB,WAAS,KAAK,YAAY,CAAC;AAC7B;"}
package/dist/index72.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { unsafeCSS, css, LitElement } from "lit";
2
2
  import { property, state, customElement } from "lit/decorators.js";
3
- import tableCss from "./index328.js";
3
+ import tableCss from "./index241.js";
4
4
  import sharedTokens from "./index196.js";
5
- import { dataTableTemplate } from "./index329.js";
5
+ import { dataTableTemplate } from "./index242.js";
6
6
  var __defProp = Object.defineProperty;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
8
  var __decorateClass = (decorators, target, key, kind) => {
package/dist/index73.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { unsafeCSS, css, LitElement } from "lit";
2
- import { property, customElement } from "lit/decorators.js";
3
- import { accordionTemplate } from "./index330.js";
4
- import accordionCss from "./index331.js";
2
+ import { property, query, customElement } from "lit/decorators.js";
3
+ import { dialogTemplate } from "./index243.js";
4
+ import dialogCss from "./index244.js";
5
5
  import sharedTokens from "./index196.js";
6
6
  var __defProp = Object.defineProperty;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -13,45 +13,106 @@ var __decorateClass = (decorators, target, key, kind) => {
13
13
  if (kind && result) __defProp(target, key, result);
14
14
  return result;
15
15
  };
16
- let LibAccordion = class extends LitElement {
16
+ let LibDialog = class extends LitElement {
17
17
  constructor() {
18
18
  super(...arguments);
19
+ this.eyebrow = "";
20
+ this.dlgTitle = "";
19
21
  this.variant = "default";
20
- this.exclusive = false;
22
+ this.size = "md";
23
+ this.layout = "dialog";
24
+ this.open = false;
25
+ this.footerMeta = "";
21
26
  }
22
- _handleToggle(e) {
23
- if (!this.exclusive) return;
24
- const target = e.target;
25
- if (!target.open) return;
26
- const items = Array.from(
27
- this.querySelectorAll("lib-accordion-item")
28
- );
29
- items.forEach((item) => {
30
- if (item !== target) {
31
- item.open = false;
32
- }
33
- });
27
+ /* ── Lifecycle ── */
28
+ /**
29
+ * Cuando `open` cambia: abrir con showModal + reflow + .is-open
30
+ * o cerrar con animación de salida + transitionend.
31
+ */
32
+ updated(changed) {
33
+ if (!changed.has("open")) return;
34
+ if (this.open) {
35
+ this._dlg.showModal();
36
+ this._dlg.getBoundingClientRect();
37
+ this._dlg.classList.add("is-open");
38
+ } else {
39
+ this._animateClose();
40
+ }
41
+ }
42
+ /* ── API pública ── */
43
+ /** Abre el dialog */
44
+ show() {
45
+ this.open = true;
46
+ }
47
+ /** Cierra el dialog con animación */
48
+ close() {
49
+ this.open = false;
34
50
  }
51
+ /* ── Render ── */
35
52
  render() {
36
- return accordionTemplate({
37
- onToggle: this._handleToggle.bind(this)
53
+ return dialogTemplate({
54
+ eyebrow: this.eyebrow,
55
+ dlgTitle: this.dlgTitle,
56
+ variant: this.variant,
57
+ size: this.size,
58
+ layout: this.layout,
59
+ footerMeta: this.footerMeta,
60
+ open: this.open,
61
+ onClose: () => {
62
+ this.close();
63
+ }
38
64
  });
39
65
  }
66
+ /* ── Private ── */
67
+ _animateClose() {
68
+ var _a;
69
+ if (!((_a = this._dlg) == null ? void 0 : _a.open)) return;
70
+ this._dlg.classList.add("is-closing");
71
+ this._dlg.classList.remove("is-open");
72
+ this._dlg.addEventListener("transitionend", () => {
73
+ this._dlg.close();
74
+ this._dlg.classList.remove("is-closing");
75
+ this.dispatchEvent(
76
+ new CustomEvent("ui-lib-dialog-close", {
77
+ bubbles: true,
78
+ composed: true
79
+ })
80
+ );
81
+ }, { once: true });
82
+ }
40
83
  };
41
- LibAccordion.styles = [
84
+ LibDialog.styles = [
42
85
  css`${unsafeCSS(sharedTokens)}`,
43
- css`${unsafeCSS(accordionCss)}`
86
+ css`${unsafeCSS(dialogCss)}`
44
87
  ];
88
+ __decorateClass([
89
+ property({ type: String })
90
+ ], LibDialog.prototype, "eyebrow", 2);
91
+ __decorateClass([
92
+ property({ type: String, attribute: "dlg-title" })
93
+ ], LibDialog.prototype, "dlgTitle", 2);
94
+ __decorateClass([
95
+ property({ type: String, reflect: true })
96
+ ], LibDialog.prototype, "variant", 2);
45
97
  __decorateClass([
46
98
  property({ type: String, reflect: true })
47
- ], LibAccordion.prototype, "variant", 2);
99
+ ], LibDialog.prototype, "size", 2);
100
+ __decorateClass([
101
+ property({ type: String, reflect: true })
102
+ ], LibDialog.prototype, "layout", 2);
103
+ __decorateClass([
104
+ property({ type: Boolean, reflect: true })
105
+ ], LibDialog.prototype, "open", 2);
106
+ __decorateClass([
107
+ property({ type: String, attribute: "footer-meta" })
108
+ ], LibDialog.prototype, "footerMeta", 2);
48
109
  __decorateClass([
49
- property({ type: Boolean })
50
- ], LibAccordion.prototype, "exclusive", 2);
51
- LibAccordion = __decorateClass([
52
- customElement("lib-accordion")
53
- ], LibAccordion);
110
+ query("dialog")
111
+ ], LibDialog.prototype, "_dlg", 2);
112
+ LibDialog = __decorateClass([
113
+ customElement("lib-dialog")
114
+ ], LibDialog);
54
115
  export {
55
- LibAccordion
116
+ LibDialog
56
117
  };
57
118
  //# sourceMappingURL=index73.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index73.js","sources":["../src/components/organisms/accordion/lib-accordion.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { accordionTemplate } from './lib-accordion.component.html';\nimport type { LibAccordionItem } from '../../atoms/accordion-item/lib-accordion-item.component';\nimport accordionCss from './lib-accordion.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\nexport type LibAccordionVariant = 'default' | 'flush' | 'separated' | 'accent';\n\n/**\n * @element lib-accordion\n *\n * Organismo que orquesta uno o varios lib-accordion-item.\n * Gestiona el modo exclusive y aplica variantes visuales\n * sobre los items via la API de CSS custom properties.\n *\n * @slot - lib-accordion-item elements\n *\n * @example\n * <lib-accordion variant=\"accent\" exclusive>\n * <lib-accordion-item label=\"Pregunta 1\">Respuesta 1</lib-accordion-item>\n * <lib-accordion-item label=\"Pregunta 2\" open>Respuesta 2</lib-accordion-item>\n * </lib-accordion>\n */\n@customElement('lib-accordion')\nexport class LibAccordion extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(accordionCss)}`,\n ];\n\n /** Variante visual del accordion */\n @property({ type: String, reflect: true })\n variant: LibAccordionVariant = 'default';\n\n /**\n * Si true, solo un item puede estar abierto a la vez.\n * Al abrir uno, los demas se cierran automaticamente.\n */\n @property({ type: Boolean })\n exclusive = false;\n\n private _handleToggle(e: Event): void {\n if (!this.exclusive) return;\n\n const target = e.target as LibAccordionItem;\n\n // Solo actuamos si el item se acaba de abrir\n if (!target.open) return;\n\n const items = Array.from(\n this.querySelectorAll<LibAccordionItem>('lib-accordion-item')\n );\n\n items.forEach(item => {\n if (item !== target) {\n item.open = false;\n }\n });\n }\n\n override render(): TemplateResult {\n return accordionTemplate({\n onToggle: this._handleToggle.bind(this),\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-accordion': LibAccordion;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AAyBO,IAAM,eAAN,cAA2B,WAAW;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA;AAQL,SAAA,UAA+B;AAO/B,SAAA,YAAY;AAAA,EAAA;AAAA,EAEJ,cAAc,GAAgB;AACpC,QAAI,CAAC,KAAK,UAAW;AAErB,UAAM,SAAS,EAAE;AAGjB,QAAI,CAAC,OAAO,KAAM;AAElB,UAAM,QAAQ,MAAM;AAAA,MAClB,KAAK,iBAAmC,oBAAoB;AAAA,IAAA;AAG9D,UAAM,QAAQ,CAAA,SAAQ;AACpB,UAAI,SAAS,QAAQ;AACnB,aAAK,OAAO;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAES,SAAyB;AAChC,WAAO,kBAAkB;AAAA,MACvB,UAAU,KAAK,cAAc,KAAK,IAAI;AAAA,IAAA,CACvC;AAAA,EACH;AACF;AAzCa,aACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,YAAY,CAAC;AAC/B;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAP9B,aAQX,WAAA,WAAA,CAAA;AAOA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAA,CAAS;AAAA,GAdhB,aAeX,WAAA,aAAA,CAAA;AAfW,eAAN,gBAAA;AAAA,EADN,cAAc,eAAe;AAAA,GACjB,YAAA;"}
1
+ {"version":3,"file":"index73.js","sources":["../src/components/organisms/dialog/lib-dialog.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult, PropertyValues } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { dialogTemplate } from './lib-dialog.html';\nimport dialogCss from './lib-dialog.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport type { DialogVariant, DialogSize, DialogLayout } from './lib-dialog.types';\n\n/**\n * @element lib-dialog\n *\n * Ventana de diálogo sobre `<dialog>` nativo con animación de entrada/salida.\n *\n * @prop {string} eyebrow — Texto pequeño encima del título\n * @prop {string} dlg-title — Título principal del header\n * @prop {DialogVariant} variant — default · danger · warning · dark\n * @prop {DialogSize} size — sm · md · lg · xl · full (default: md)\n * @prop {DialogLayout} layout — dialog · drawer-right · drawer-bottom · alert (default: dialog)\n * @prop {boolean} open — Estado controlado del panel\n * @prop {string} footer-meta — Texto auxiliar izquierdo en el footer\n *\n * @slot — Cuerpo del dialog (dlg-body)\n * @slot header — Override completo del título (dentro de dlg-header-text)\n * @slot footer — Botones del footer (a la derecha del footer-meta)\n *\n * @fires ui-lib-dialog-close Emitido tras la animación de cierre (bubbles, composed)\n *\n * @method show() — Abre el dialog con animación de entrada\n * @method close() — Cierra el dialog con animación de salida\n */\n@customElement('lib-dialog')\nexport class LibDialog extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(dialogCss)}`,\n ];\n\n /* ── Props ── */\n\n @property({ type: String })\n eyebrow = '';\n\n /**\n * `title` está reservado en HTMLElement — usamos `dlgTitle` + attribute `dlg-title`.\n */\n @property({ type: String, attribute: 'dlg-title' })\n dlgTitle = '';\n\n @property({ type: String, reflect: true })\n variant: DialogVariant = 'default';\n\n @property({ type: String, reflect: true })\n size: DialogSize = 'md';\n\n @property({ type: String, reflect: true })\n layout: DialogLayout = 'dialog';\n\n @property({ type: Boolean, reflect: true })\n open = false;\n\n @property({ type: String, attribute: 'footer-meta' })\n footerMeta = '';\n\n /* ── Refs ── */\n\n @query('dialog') declare private _dlg: HTMLDialogElement;\n\n /* ── Lifecycle ── */\n\n /**\n * Cuando `open` cambia: abrir con showModal + reflow + .is-open\n * o cerrar con animación de salida + transitionend.\n */\n protected override updated(changed: PropertyValues<this>): void {\n if (!changed.has('open')) return;\n\n if (this.open) {\n this._dlg.showModal();\n this._dlg.getBoundingClientRect(); // force reflow antes de la transición\n this._dlg.classList.add('is-open');\n } else {\n this._animateClose();\n }\n }\n\n /* ── API pública ── */\n\n /** Abre el dialog */\n public show(): void {\n this.open = true;\n }\n\n /** Cierra el dialog con animación */\n public close(): void {\n this.open = false;\n }\n\n /* ── Render ── */\n\n protected override render(): TemplateResult {\n return dialogTemplate({\n eyebrow: this.eyebrow,\n dlgTitle: this.dlgTitle,\n variant: this.variant,\n size: this.size,\n layout: this.layout,\n footerMeta: this.footerMeta,\n open: this.open,\n onClose: (): void => { this.close(); },\n });\n }\n\n /* ── Private ── */\n\n private _animateClose(): void {\n if (!this._dlg?.open) return;\n\n this._dlg.classList.add('is-closing');\n this._dlg.classList.remove('is-open');\n\n this._dlg.addEventListener('transitionend', () => {\n this._dlg.close();\n this._dlg.classList.remove('is-closing');\n\n this.dispatchEvent(\n new CustomEvent('ui-lib-dialog-close', {\n bubbles: true,\n composed: true,\n })\n );\n }, { once: true });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-dialog': LibDialog;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AA8BO,IAAM,YAAN,cAAwB,WAAW;AAAA,EAAnC,cAAA;AAAA,UAAA,GAAA,SAAA;AASL,SAAA,UAAU;AAMV,SAAA,WAAW;AAGX,SAAA,UAAyB;AAGzB,SAAA,OAAmB;AAGnB,SAAA,SAAuB;AAGvB,SAAA,OAAO;AAGP,SAAA,aAAa;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYM,QAAQ,SAAqC;AAC9D,QAAI,CAAC,QAAQ,IAAI,MAAM,EAAG;AAE1B,QAAI,KAAK,MAAM;AACb,WAAK,KAAK,UAAA;AACV,WAAK,KAAK,sBAAA;AACV,WAAK,KAAK,UAAU,IAAI,SAAS;AAAA,IACnC,OAAO;AACL,WAAK,cAAA;AAAA,IACP;AAAA,EACF;AAAA;AAAA;AAAA,EAKO,OAAa;AAClB,SAAK,OAAO;AAAA,EACd;AAAA;AAAA,EAGO,QAAc;AACnB,SAAK,OAAO;AAAA,EACd;AAAA;AAAA,EAImB,SAAyB;AAC1C,WAAO,eAAe;AAAA,MACpB,SAAY,KAAK;AAAA,MACjB,UAAY,KAAK;AAAA,MACjB,SAAY,KAAK;AAAA,MACjB,MAAY,KAAK;AAAA,MACjB,QAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,MACjB,MAAY,KAAK;AAAA,MACjB,SAAY,MAAY;AAAE,aAAK,MAAA;AAAA,MAAS;AAAA,IAAA,CACzC;AAAA,EACH;AAAA;AAAA,EAIQ,gBAAsB;;AAC5B,QAAI,GAAC,UAAK,SAAL,mBAAW,MAAM;AAEtB,SAAK,KAAK,UAAU,IAAI,YAAY;AACpC,SAAK,KAAK,UAAU,OAAO,SAAS;AAEpC,SAAK,KAAK,iBAAiB,iBAAiB,MAAM;AAChD,WAAK,KAAK,MAAA;AACV,WAAK,KAAK,UAAU,OAAO,YAAY;AAEvC,WAAK;AAAA,QACH,IAAI,YAAY,uBAAuB;AAAA,UACrC,SAAS;AAAA,UACT,UAAU;AAAA,QAAA,CACX;AAAA,MAAA;AAAA,IAEL,GAAG,EAAE,MAAM,MAAM;AAAA,EACnB;AACF;AArGa,UACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,SAAS,CAAC;AAC5B;AAKA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GARf,UASX,WAAA,WAAA,CAAA;AAMA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,aAAa;AAAA,GAdvC,UAeX,WAAA,YAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAjB9B,UAkBX,WAAA,WAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GApB9B,UAqBX,WAAA,QAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAvB9B,UAwBX,WAAA,UAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GA1B/B,UA2BX,WAAA,QAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,eAAe;AAAA,GA7BzC,UA8BX,WAAA,cAAA,CAAA;AAIiC,gBAAA;AAAA,EAAhC,MAAM,QAAQ;AAAA,GAlCJ,UAkCsB,WAAA,QAAA,CAAA;AAlCtB,YAAN,gBAAA;AAAA,EADN,cAAc,YAAY;AAAA,GACd,SAAA;"}