@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/index74.js CHANGED
@@ -1,9 +1,8 @@
1
- import { unsafeCSS, css, LitElement, html } from "lit";
2
- import { state, customElement } from "lit/decorators.js";
3
- import { repeat as c } from "./index332.js";
4
- import toastManagerCss from "./index333.js";
1
+ import { unsafeCSS, css, LitElement } from "lit";
2
+ import { property, customElement } from "lit/decorators.js";
3
+ import { drawerTemplate } from "./index245.js";
4
+ import drawerCss from "./index246.js";
5
5
  import sharedTokens from "./index196.js";
6
- import "./index50.js";
7
6
  var __defProp = Object.defineProperty;
8
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
8
  var __decorateClass = (decorators, target, key, kind) => {
@@ -14,79 +13,143 @@ var __decorateClass = (decorators, target, key, kind) => {
14
13
  if (kind && result) __defProp(target, key, result);
15
14
  return result;
16
15
  };
17
- let LibToastManager = class extends LitElement {
16
+ let LibDrawer = class extends LitElement {
18
17
  constructor() {
18
+ var _a;
19
19
  super(...arguments);
20
- this._toasts = [];
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;
36
+ }
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
+ }
48
+ } else {
49
+ if (active === last) {
50
+ e.preventDefault();
51
+ first == null ? void 0 : first.focus();
52
+ }
53
+ }
54
+ }
55
+ };
21
56
  }
22
- /* ──────────────────────────────────────────────────────────
23
- API PÚBLICA
24
- ─────────────────────────────────────────────────────────── */
25
- add(config) {
26
- const id = crypto.randomUUID();
27
- this._toasts = [...this._toasts, { ...config, id }];
28
- if (config.duration !== 0) {
29
- setTimeout(() => this._dismissWithAnimation(id), config.duration ?? 5e3);
30
- }
31
- }
32
- dismiss(id) {
33
- this._dismissWithAnimation(id);
57
+ /* ════════════════════════════════════════
58
+ Ciclo de vida
59
+ ════════════════════════════════════════ */
60
+ connectedCallback() {
61
+ super.connectedCallback();
62
+ this.addEventListener("keydown", this._onKeyDown);
34
63
  }
35
- dismissAll() {
36
- this._toasts.forEach((t) => this._dismissWithAnimation(t.id));
64
+ disconnectedCallback() {
65
+ super.disconnectedCallback();
66
+ this.removeEventListener("keydown", this._onKeyDown);
67
+ document.body.style.overflow = "";
37
68
  }
38
- /* ──────────────────────────────────────────────────────────
39
- ANIMACIÓN DE SALIDA
40
- Aplica .is-leaving → espera la transición → elimina del array
41
- ─────────────────────────────────────────────────────────── */
42
- _dismissWithAnimation(id) {
43
- const el = this.renderRoot.querySelector(`[data-toast-id="${id}"]`);
44
- if (el) {
45
- el.classList.add("is-leaving");
46
- el.addEventListener("animationend", () => {
47
- this._removeToast(id);
48
- }, { once: true });
69
+ 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
+ });
49
78
  } else {
50
- this._removeToast(id);
79
+ document.body.style.overflow = "";
80
+ }
81
+ if (!this.drawerLabel) {
82
+ this.drawerLabel = this.label || "Panel";
51
83
  }
52
84
  }
53
- _removeToast(id) {
54
- this._toasts = this._toasts.filter((t) => t.id !== id);
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
+ }));
55
96
  }
56
- /* ──────────────────────────────────────────────────────────
57
- RENDER
58
- ─────────────────────────────────────────────────────────── */
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
+ );
113
+ }
114
+ /* ════════════════════════════════════════
115
+ Render
116
+ ════════════════════════════════════════ */
59
117
  render() {
60
- return html`
61
- ${c(
62
- this._toasts,
63
- (toast) => toast.id,
64
- (toast) => html`
65
- <lib-alert
66
- data-toast-id="${toast.id}"
67
- type="${toast.type}"
68
- heading="${toast.heading ?? ""}"
69
- closable
70
- @ui-lib-alert-close="${(_e) => this.dismiss(toast.id)}"
71
- >
72
- ${toast.message}
73
- </lib-alert>
74
- `
75
- )}
76
- `;
118
+ return drawerTemplate(this);
77
119
  }
78
120
  };
79
- LibToastManager.styles = [
121
+ LibDrawer.styles = [
80
122
  css`${unsafeCSS(sharedTokens)}`,
81
- css`${unsafeCSS(toastManagerCss)}`
123
+ css`${unsafeCSS(drawerCss)}`
82
124
  ];
83
125
  __decorateClass([
84
- state()
85
- ], LibToastManager.prototype, "_toasts", 2);
86
- LibToastManager = __decorateClass([
87
- customElement("lib-toast-manager")
88
- ], LibToastManager);
126
+ property({ type: Boolean, reflect: true })
127
+ ], LibDrawer.prototype, "open", 2);
128
+ __decorateClass([
129
+ property({ type: String, reflect: true })
130
+ ], LibDrawer.prototype, "placement", 2);
131
+ __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);
140
+ __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);
89
152
  export {
90
- LibToastManager
153
+ LibDrawer
91
154
  };
92
155
  //# sourceMappingURL=index74.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index74.js","sources":["../src/components/organisms/toast-manager/lib-toast-manager.component.ts"],"sourcesContent":["import { LitElement, TemplateResult, html, css, unsafeCSS } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport toastManagerCss from './lib-toast-manager.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport '../../molecules/lib-alert/lib-alert.component';\nimport type { AlertCloseDetail, AlertType } from './../../molecules/lib-alert/lib-alert.types';\n\n/* AlertType importado desde types, no desde el componente */\n\n/* ── Interfaz pública de cada toast ── */\nexport interface Toast {\n id: string;\n message: string;\n type: AlertType;\n heading?: string; /* Override del título si no se pasa usa el tipo */\n duration?: number; /* ms. 0 = persistente. Default: 5000 */\n}\n\n/**\n * @element lib-toast-manager\n *\n * Contenedor fijo de notificaciones efímeras.\n * Usa `lib-alert` internamente con `closable` siempre activo.\n *\n * @method add(config) Añade un toast. Acepta Omit<Toast, 'id'>.\n * @method dismiss(id)Elimina un toast por id (con animación de salida).\n * @method dismissAll() Elimina todos los toasts activos.\n */\n@customElement('lib-toast-manager')\nexport class LibToastManager extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(toastManagerCss)}`,\n ];\n\n @state() private _toasts: Toast[] = [];\n\n /* ──────────────────────────────────────────────────────────\n API PÚBLICA\n ─────────────────────────────────────────────────────────── */\n\n public add(config: Omit<Toast, 'id'>): void {\n const id: string = crypto.randomUUID();\n this._toasts = [...this._toasts, { ...config, id }];\n\n if (config.duration !== 0) {\n setTimeout((): void => this._dismissWithAnimation(id), config.duration ?? 5000);\n }\n }\n\n public dismiss(id: string): void {\n this._dismissWithAnimation(id);\n }\n\n public dismissAll(): void {\n this._toasts.forEach(t => this._dismissWithAnimation(t.id));\n }\n\n /* ──────────────────────────────────────────────────────────\n ANIMACIÓN DE SALIDA\n Aplica .is-leaving espera la transición elimina del array\n ─────────────────────────────────────────────────────────── */\n private _dismissWithAnimation(id: string): void {\n const el = this.renderRoot.querySelector<HTMLElement>(`[data-toast-id=\"${id}\"]`);\n\n if (el) {\n el.classList.add('is-leaving');\n /* duration-base = 200ms + pequeño margen */\n el.addEventListener('animationend', (): void => {\n this._removeToast(id);\n }, { once: true });\n } else {\n /* Si el elemento ya no está en el DOM, borramos directamente */\n this._removeToast(id);\n }\n }\n\n private _removeToast(id: string): void {\n this._toasts = this._toasts.filter((t: Toast): boolean => t.id !== id);\n }\n\n /* ──────────────────────────────────────────────────────────\n RENDER\n ─────────────────────────────────────────────────────────── */\n protected override render(): TemplateResult {\n return html`\n ${repeat(\n this._toasts,\n (toast: Toast): string => toast.id,\n (toast: Toast): TemplateResult => html`\n <lib-alert\n data-toast-id=\"${toast.id}\"\n type=\"${toast.type}\"\n heading=\"${toast.heading ?? ''}\"\n closable\n @ui-lib-alert-close=\"${(_e: CustomEvent<AlertCloseDetail>): void => this.dismiss(toast.id)}\"\n >\n ${toast.message}\n </lib-alert>\n `\n )}\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-toast-manager': LibToastManager;\n }\n}"],"names":["repeat"],"mappings":";;;;;;;;;;;;;;;;AA8BO,IAAM,kBAAN,cAA8B,WAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AAMI,SAAQ,UAAmB,CAAA;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA,EAM9B,IAAI,QAAiC;AAC1C,UAAM,KAAa,OAAO,WAAA;AAC1B,SAAK,UAAU,CAAC,GAAG,KAAK,SAAS,EAAE,GAAG,QAAQ,IAAI;AAElD,QAAI,OAAO,aAAa,GAAG;AACzB,iBAAW,MAAY,KAAK,sBAAsB,EAAE,GAAG,OAAO,YAAY,GAAI;AAAA,IAChF;AAAA,EACF;AAAA,EAEO,QAAQ,IAAkB;AAC/B,SAAK,sBAAsB,EAAE;AAAA,EAC/B;AAAA,EAEO,aAAmB;AACxB,SAAK,QAAQ,QAAQ,CAAA,MAAK,KAAK,sBAAsB,EAAE,EAAE,CAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,sBAAsB,IAAkB;AAC9C,UAAM,KAAK,KAAK,WAAW,cAA2B,mBAAmB,EAAE,IAAI;AAE/E,QAAI,IAAI;AACN,SAAG,UAAU,IAAI,YAAY;AAE7B,SAAG,iBAAiB,gBAAgB,MAAY;AAC9C,aAAK,aAAa,EAAE;AAAA,MACtB,GAAG,EAAE,MAAM,MAAM;AAAA,IACnB,OAAO;AAEL,WAAK,aAAa,EAAE;AAAA,IACtB;AAAA,EACF;AAAA,EAEQ,aAAa,IAAkB;AACrC,SAAK,UAAU,KAAK,QAAQ,OAAO,CAAC,MAAsB,EAAE,OAAO,EAAE;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAKmB,SAAyB;AAC1C,WAAO;AAAA,QACHA;AAAAA,MACA,KAAK;AAAA,MACL,CAAC,UAAyB,MAAM;AAAA,MAChC,CAAC,UAAiC;AAAA;AAAA,6BAEb,MAAM,EAAE;AAAA,oBACjB,MAAM,IAAI;AAAA,uBACP,MAAM,WAAW,EAAE;AAAA;AAAA,mCAEP,CAAC,OAA4C,KAAK,QAAQ,MAAM,EAAE,CAAC;AAAA;AAAA,cAExF,MAAM,OAAO;AAAA;AAAA;AAAA,IAAA,CAGpB;AAAA;AAAA,EAEL;AACF;AA1Ea,gBACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,eAAe,CAAC;AAClC;AAEiB,gBAAA;AAAA,EAAhB,MAAA;AAAM,GANI,gBAMM,WAAA,WAAA,CAAA;AANN,kBAAN,gBAAA;AAAA,EADN,cAAc,mBAAmB;AAAA,GACrB,eAAA;"}
1
+ {"version":3,"file":"index74.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 subtitleReemplaza 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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"}
package/dist/index75.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { unsafeCSS, css, LitElement } from "lit";
2
2
  import { property, customElement } from "lit/decorators.js";
3
- import { parallaxTemplate } from "./index334.js";
4
- import parallaxCss from "./index335.js";
3
+ import { renderFooter } from "./index247.js";
4
+ import componentCss from "./index248.js";
5
5
  import sharedTokens from "./index196.js";
6
6
  var __defProp = Object.defineProperty;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -13,130 +13,141 @@ var __decorateClass = (decorators, target, key, kind) => {
13
13
  if (kind && result) __defProp(target, key, result);
14
14
  return result;
15
15
  };
16
- let LibParallaxContainer = class extends LitElement {
16
+ let LibFooter = class extends LitElement {
17
17
  constructor() {
18
18
  super(...arguments);
19
- this.speed = 0.2;
20
- this.axis = "y";
21
- this.clamp = 0;
22
- this._observer = null;
23
- this._isVisible = false;
24
- this._ticking = false;
25
- this._reducedMotion = false;
26
- this._onScroll = () => {
27
- if (!this._isVisible || this._reducedMotion) return;
28
- if (this._ticking) return;
29
- this._ticking = true;
30
- requestAnimationFrame(() => {
31
- this._applyParallax();
32
- this._ticking = false;
33
- });
34
- };
35
- }
36
- /* ── Lifecycle ── */
37
- connectedCallback() {
38
- super.connectedCallback();
39
- const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
40
- this._reducedMotion = mq.matches;
41
- mq.addEventListener("change", (e) => {
42
- this._reducedMotion = e.matches;
43
- if (this._reducedMotion) this._resetTransforms();
44
- });
45
- window.addEventListener("scroll", this._onScroll, { passive: true });
46
- this._setupObserver();
47
- }
48
- disconnectedCallback() {
49
- var _a;
50
- super.disconnectedCallback();
51
- window.removeEventListener("scroll", this._onScroll);
52
- (_a = this._observer) == null ? void 0 : _a.disconnect();
53
- this._observer = null;
54
- }
55
- /* ── IntersectionObserver — activa/desactiva will-change ── */
56
- _setupObserver() {
57
- this._observer = new IntersectionObserver(
58
- (entries) => {
59
- const entry = entries[0];
60
- if (!entry) return;
61
- this._isVisible = entry.isIntersecting;
62
- if (this._isVisible) {
63
- this.setAttribute("visible", "");
64
- requestAnimationFrame(() => this._applyParallax());
65
- } else {
66
- this.removeAttribute("visible");
67
- }
19
+ this.variant = "social";
20
+ this.brandName = "shibui";
21
+ this.brandKanji = "渋";
22
+ this.brandSub = "Design System · Zaragoza";
23
+ this.location = "Zaragoza";
24
+ this.version = "1.0.0";
25
+ this.nodeVersion = "v22.0.0";
26
+ this.githubHref = "#";
27
+ this.linkedinHref = "#";
28
+ this.rssHref = "#";
29
+ this.email = "";
30
+ this.columns = [
31
+ {
32
+ heading: "Librería",
33
+ links: [
34
+ { label: "Componentes", href: "#" },
35
+ { label: "Tokens", href: "#" },
36
+ { label: "Estilos", href: "#" }
37
+ ]
68
38
  },
69
- { threshold: 0.01 }
70
- );
71
- this._observer.observe(this);
39
+ {
40
+ heading: "Ecosistema",
41
+ links: [
42
+ { label: "GitHub", href: "#" },
43
+ { label: "NPM", href: "#" },
44
+ { label: "Storybook", href: "#" }
45
+ ]
46
+ },
47
+ {
48
+ heading: "Recursos",
49
+ links: [
50
+ { label: "Docs", href: "#" },
51
+ { label: "Changelog", href: "#" },
52
+ { label: "Roadmap", href: "#" }
53
+ ]
54
+ }
55
+ ];
56
+ this.navLinks = [
57
+ { label: "Componentes", href: "#" },
58
+ { label: "Tokens", href: "#" },
59
+ { label: "MIT License", href: "#" }
60
+ ];
61
+ this.legalLinks = [
62
+ { label: "privacy.md", href: "#" },
63
+ { label: "terms.md", href: "#" }
64
+ ];
65
+ this.runtimeLines = [
66
+ { key: "node", value: "v22.0.0" },
67
+ { key: "css", value: "pure · no-build" },
68
+ { key: "fonts", value: "google CDN" },
69
+ { key: "deps", value: "0" },
70
+ { key: "size", value: "~180kb total" }
71
+ ];
72
72
  }
73
+ /* ── Computed ── */
74
+ get year() {
75
+ return (/* @__PURE__ */ new Date()).getFullYear();
76
+ }
77
+ /* ── Behaviour ── */
73
78
  /**
74
- * Cálculo del desplazamiento parallax.
75
- *
76
- * Fórmula: centerOffset = distancia entre el centro del elemento
77
- * y el centro del viewport. Cuando el elemento está centrado en
78
- * pantalla → offset = 0, sin desplazamiento.
79
- * Cuando el elemento sube por encima → offset negativo → el elemento
80
- * se desplaza hacia arriba (más rápido o más lento que el scroll).
81
- *
82
- * Esto es más correcto que `(scrollY - offsetTop) * speed` porque:
83
- * 1. No depende del offsetParent (fiable en Shadow DOM)
84
- * 2. El punto neutro es el centro visual, no el top de la página
79
+ * Abre / cierra un ítem de acordeón.
80
+ * @internal
85
81
  */
86
- _applyParallax() {
87
- var _a;
88
- const slot = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector("slot");
89
- if (!slot) return;
90
- const rect = this.getBoundingClientRect();
91
- const centerOffset = rect.top + rect.height / 2 - window.innerHeight / 2;
92
- const elements = slot.assignedElements();
93
- elements.forEach((el) => {
94
- const factor = parseFloat(el.dataset["parallaxFactor"] ?? "1");
95
- const move = centerOffset * this.speed * factor;
96
- const clamped = this.clamp > 0 ? Math.min(Math.max(move, -this.clamp), this.clamp) : move;
97
- switch (this.axis) {
98
- case "x":
99
- el.style.transform = `translate3d(${clamped}px, 0, 0)`;
100
- break;
101
- case "xy":
102
- el.style.transform = `translate3d(${clamped}px, ${clamped}px, 0)`;
103
- break;
104
- case "y":
105
- default:
106
- el.style.transform = `translate3d(0, ${clamped}px, 0)`;
107
- }
108
- });
109
- }
110
- /** Limpia los transforms (p.ej. al activar prefers-reduced-motion en runtime) */
111
- _resetTransforms() {
112
- var _a;
113
- const slot = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector("slot");
114
- const elements = slot == null ? void 0 : slot.assignedElements();
115
- elements == null ? void 0 : elements.forEach((el) => {
116
- el.style.transform = "";
117
- });
82
+ _toggleAccordion(trigger) {
83
+ const body = trigger.nextElementSibling;
84
+ const arrow = trigger.querySelector(".ft-acc-arrow");
85
+ if (!body) return;
86
+ const isOpen = body.style.maxHeight !== "" && body.style.maxHeight !== "0px";
87
+ body.style.maxHeight = isOpen ? "0" : "300px";
88
+ trigger.setAttribute("aria-expanded", String(!isOpen));
89
+ if (arrow) {
90
+ arrow.style.transform = isOpen ? "rotate(0deg)" : "rotate(180deg)";
91
+ }
118
92
  }
93
+ /* ── Render ── */
119
94
  render() {
120
- return parallaxTemplate();
95
+ return renderFooter(this);
121
96
  }
122
97
  };
123
- LibParallaxContainer.styles = [
98
+ LibFooter.styles = [
124
99
  css`${unsafeCSS(sharedTokens)}`,
125
- css`${unsafeCSS(parallaxCss)}`
100
+ css`${unsafeCSS(componentCss)}`
126
101
  ];
127
102
  __decorateClass([
128
- property({ type: Number })
129
- ], LibParallaxContainer.prototype, "speed", 2);
103
+ property({ type: String })
104
+ ], LibFooter.prototype, "variant", 2);
105
+ __decorateClass([
106
+ property({ type: String, attribute: "brand-name" })
107
+ ], LibFooter.prototype, "brandName", 2);
108
+ __decorateClass([
109
+ property({ type: String, attribute: "brand-kanji" })
110
+ ], LibFooter.prototype, "brandKanji", 2);
111
+ __decorateClass([
112
+ property({ type: String, attribute: "brand-sub" })
113
+ ], LibFooter.prototype, "brandSub", 2);
114
+ __decorateClass([
115
+ property({ type: String })
116
+ ], LibFooter.prototype, "location", 2);
117
+ __decorateClass([
118
+ property({ type: String })
119
+ ], LibFooter.prototype, "version", 2);
120
+ __decorateClass([
121
+ property({ type: String, attribute: "node-version" })
122
+ ], LibFooter.prototype, "nodeVersion", 2);
123
+ __decorateClass([
124
+ property({ type: String, attribute: "github-href" })
125
+ ], LibFooter.prototype, "githubHref", 2);
126
+ __decorateClass([
127
+ property({ type: String, attribute: "linkedin-href" })
128
+ ], LibFooter.prototype, "linkedinHref", 2);
129
+ __decorateClass([
130
+ property({ type: String, attribute: "rss-href" })
131
+ ], LibFooter.prototype, "rssHref", 2);
132
+ __decorateClass([
133
+ property({ type: String })
134
+ ], LibFooter.prototype, "email", 2);
135
+ __decorateClass([
136
+ property({ type: Array })
137
+ ], LibFooter.prototype, "columns", 2);
138
+ __decorateClass([
139
+ property({ type: Array, attribute: "nav-links" })
140
+ ], LibFooter.prototype, "navLinks", 2);
130
141
  __decorateClass([
131
- property({ type: String, reflect: true })
132
- ], LibParallaxContainer.prototype, "axis", 2);
142
+ property({ type: Array, attribute: "legal-links" })
143
+ ], LibFooter.prototype, "legalLinks", 2);
133
144
  __decorateClass([
134
- property({ type: Number })
135
- ], LibParallaxContainer.prototype, "clamp", 2);
136
- LibParallaxContainer = __decorateClass([
137
- customElement("lib-parallax-container")
138
- ], LibParallaxContainer);
145
+ property({ type: Array, attribute: "runtime-lines" })
146
+ ], LibFooter.prototype, "runtimeLines", 2);
147
+ LibFooter = __decorateClass([
148
+ customElement("lib-footer")
149
+ ], LibFooter);
139
150
  export {
140
- LibParallaxContainer
151
+ LibFooter
141
152
  };
142
153
  //# sourceMappingURL=index75.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index75.js","sources":["../src/components/organisms/parallax-container/lib-parallax.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { parallaxTemplate } from './lib-parallax.html';\nimport parallaxCss from './lib-parallax.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport type { ParallaxAxis } from './lib-parallax.types';\n\n/**\n * lib-parallax-container\n *\n * Aplica desplazamiento parallax a los hijos directos del slot\n * al hacer scroll. El efecto es 0 cuando el elemento está centrado\n * en el viewport, y se desplaza proporcionalmente al alejarse del centro.\n *\n * Cada hijo puede sobrescribir el multiplicador con `data-parallax-factor`.\n * Ejemplo: `<div data-parallax-factor=\"0.3\">fondo lento</div>`\n * `<div data-parallax-factor=\"2\">elemento rápido</div>`\n *\n * @prop speed — Multiplicador de desplazamiento base (default 0.2)\n * @prop axis Eje del efecto: 'y' | 'x' | 'xy' (default 'y')\n * @prop clamp Máximo desplazamiento en px (0 = sin límite, default 0)\n *\n * @cssvar --parallax-speed Alternativa CSS al prop speed (no reactivo)\n *\n * @slot Elementos a desplazar. Cada hijo acepta data-parallax-factor.\n */\n@customElement('lib-parallax-container')\nexport class LibParallaxContainer extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(parallaxCss)}`,\n ];\n\n /** Multiplicador de desplazamiento base */\n @property({ type: Number })\n speed = 0.2;\n\n /** Eje sobre el que opera el efecto */\n @property({ type: String, reflect: true })\n axis: ParallaxAxis = 'y';\n\n /** Máximo desplazamiento absoluto en px (0 = sin límite) */\n @property({ type: Number })\n clamp = 0;\n\n private _observer: IntersectionObserver | null = null;\n private _isVisible = false;\n private _ticking = false;\n private _reducedMotion = false;\n\n /* ── Lifecycle ── */\n override connectedCallback(): void {\n super.connectedCallback();\n // matchMedia para prefers-reduced-motion\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)');\n this._reducedMotion = mq.matches;\n mq.addEventListener('change', (e: MediaQueryListEvent): void => {\n this._reducedMotion = e.matches;\n if (this._reducedMotion) this._resetTransforms();\n });\n\n window.addEventListener('scroll', this._onScroll, { passive: true });\n this._setupObserver();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n window.removeEventListener('scroll', this._onScroll);\n this._observer?.disconnect();\n this._observer = null;\n }\n\n /* ── IntersectionObserver activa/desactiva will-change ── */\n private _setupObserver(): void {\n this._observer = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]): void => {\n const entry = entries[0];\n if (!entry) return;\n this._isVisible = entry.isIntersecting;\n // Sincroniza el atributo [visible] activa/desactiva will-change via CSS\n if (this._isVisible) {\n this.setAttribute('visible', '');\n // Calcular posición inicial al entrar en viewport\n requestAnimationFrame((): void => this._applyParallax());\n } else {\n this.removeAttribute('visible');\n }\n },\n { threshold: 0.01 },\n );\n this._observer.observe(this);\n }\n\n /* ── Scroll handler con rAF throttle ── */\n private _onScroll = (): void => {\n if (!this._isVisible || this._reducedMotion) return;\n if (this._ticking) return;\n this._ticking = true;\n requestAnimationFrame((): void => {\n this._applyParallax();\n this._ticking = false;\n });\n };\n\n /**\n * Cálculo del desplazamiento parallax.\n *\n * Fórmula: centerOffset = distancia entre el centro del elemento\n * y el centro del viewport. Cuando el elemento está centrado en\n * pantalla offset = 0, sin desplazamiento.\n * Cuando el elemento sube por encima offset negativo el elemento\n * se desplaza hacia arriba (más rápido o más lento que el scroll).\n *\n * Esto es más correcto que `(scrollY - offsetTop) * speed` porque:\n * 1. No depende del offsetParent (fiable en Shadow DOM)\n * 2. El punto neutro es el centro visual, no el top de la página\n */\n private _applyParallax(): void {\n const slot = this.shadowRoot?.querySelector('slot') as HTMLSlotElement | null;\n if (!slot) return;\n\n const rect = this.getBoundingClientRect();\n const centerOffset = (rect.top + rect.height / 2) - (window.innerHeight / 2);\n\n const elements = slot.assignedElements() as HTMLElement[];\n\n elements.forEach((el): void => {\n const factor = parseFloat(el.dataset['parallaxFactor'] ?? '1');\n const move = centerOffset * this.speed * factor;\n const clamped = this.clamp > 0\n ? Math.min(Math.max(move, -this.clamp), this.clamp)\n : move;\n\n switch (this.axis) {\n case 'x':\n el.style.transform = `translate3d(${clamped}px, 0, 0)`;\n break;\n case 'xy':\n el.style.transform = `translate3d(${clamped}px, ${clamped}px, 0)`;\n break;\n case 'y':\n default:\n el.style.transform = `translate3d(0, ${clamped}px, 0)`;\n }\n });\n }\n\n /** Limpia los transforms (p.ej. al activar prefers-reduced-motion en runtime) */\n private _resetTransforms(): void {\n const slot = this.shadowRoot?.querySelector('slot') as HTMLSlotElement | null;\n const elements = slot?.assignedElements() as HTMLElement[] | undefined;\n elements?.forEach((el): void => { el.style.transform = ''; });\n }\n\n protected override render(): TemplateResult {\n return parallaxTemplate(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-parallax-container': LibParallaxContainer;\n }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index75.js","sources":["../src/components/organisms/footer/lib-footer.component.ts"],"sourcesContent":["import { LitElement, TemplateResult, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { FooterColumn, FooterLink, FooterVariant } from './lib-footer.types';\nimport { renderFooter } from './lib-footer.html';\nimport componentCss from './lib-footer.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\n/**\n * `<lib-footer>` Footer polimórfico con 4 variantes de diseño.\n *\n * @tag lib-footer\n *\n * @attr {string} variant - Estilo del footer: 'social' | 'accordion' | 'kintsugi' | 'glitch'\n * @attr {string} brand-name - Nombre de marca (ej: \"shibui\")\n * @attr {string} brand-kanji - Caracter kanji decorativo (ej: \"渋\")\n * @attr {string} brand-sub - Subtítulo bajo el logo (ej: \"Design System · Zaragoza\")\n * @attr {string} location - Ciudad / país para el copyright\n * @attr {string} version - Versión del producto (ej: \"1.0.0\")\n * @attr {string} node-version - Versión de Node para la variante glitch (ej: \"v22.0.0\")\n * @attr {string} github-href - URL de GitHub\n * @attr {string} linkedin-href- URL de LinkedIn\n * @attr {string} rss-href - URL del feed RSS\n * @attr {string} email - Dirección de email de contacto\n *\n * @prop {FooterColumn[]} columns - Columnas de navegación (accordion / kintsugi)\n * @prop {FooterLink[]} nav-links - Links de navegación planos (social / glitch)\n * @prop {FooterLink[]} legal-links - Links de pie (privacidad, términos, etc.)\n * @prop {RuntimeLine[]} runtime-lines- Líneas de la tabla runtime (variante glitch)\n *\n * @fires ui-lib-footer-link-click - Cuando se pulsa un enlace del footer\n * @detail { label: string; href: string }\n */\n@customElement('lib-footer')\nexport class LibFooter extends LitElement {\n\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(componentCss)}`,\n ];\n\n /* ── Props principales ── */\n\n @property({ type: String })\n variant: FooterVariant = 'social';\n\n @property({ type: String, attribute: 'brand-name' })\n brandName = 'shibui';\n\n @property({ type: String, attribute: 'brand-kanji' })\n brandKanji = '';\n\n @property({ type: String, attribute: 'brand-sub' })\n brandSub = 'Design System · Zaragoza';\n\n @property({ type: String })\n location = 'Zaragoza';\n\n @property({ type: String })\n version = '1.0.0';\n\n @property({ type: String, attribute: 'node-version' })\n nodeVersion = 'v22.0.0';\n\n @property({ type: String, attribute: 'github-href' })\n githubHref = '#';\n\n @property({ type: String, attribute: 'linkedin-href' })\n linkedinHref = '#';\n\n @property({ type: String, attribute: 'rss-href' })\n rssHref = '#';\n\n @property({ type: String })\n email = '';\n\n /* ── Props de datos (pasadas como JSON o JS) ── */\n\n @property({ type: Array })\n columns: FooterColumn[] = [\n {\n heading: 'Librería',\n links: [\n { label: 'Componentes', href: '#' },\n { label: 'Tokens', href: '#' },\n { label: 'Estilos', href: '#' },\n ],\n },\n {\n heading: 'Ecosistema',\n links: [\n { label: 'GitHub', href: '#' },\n { label: 'NPM', href: '#' },\n { label: 'Storybook', href: '#' },\n ],\n },\n {\n heading: 'Recursos',\n links: [\n { label: 'Docs', href: '#' },\n { label: 'Changelog', href: '#' },\n { label: 'Roadmap', href: '#' },\n ],\n },\n ];\n\n @property({ type: Array, attribute: 'nav-links' })\n navLinks: FooterLink[] = [\n { label: 'Componentes', href: '#' },\n { label: 'Tokens', href: '#' },\n { label: 'MIT License', href: '#' },\n ];\n\n @property({ type: Array, attribute: 'legal-links' })\n legalLinks: FooterLink[] = [\n { label: 'privacy.md', href: '#' },\n { label: 'terms.md', href: '#' },\n ];\n\n @property({ type: Array, attribute: 'runtime-lines' })\n runtimeLines: { key: string; value: string }[] = [\n { key: 'node', value: 'v22.0.0' },\n { key: 'css', value: 'pure · no-build' },\n { key: 'fonts', value: 'google CDN' },\n { key: 'deps', value: '0' },\n { key: 'size', value: '~180kb total' },\n ];\n\n /* ── Computed ── */\n\n get year(): number {\n return new Date().getFullYear();\n }\n\n /* ── Behaviour ── */\n\n /**\n * Abre / cierra un ítem de acordeón.\n * @internal\n */\n _toggleAccordion(trigger: HTMLElement): void {\n const body = trigger.nextElementSibling as HTMLElement | null;\n const arrow = trigger.querySelector('.ft-acc-arrow') as HTMLElement | null;\n\n if (!body) return;\n\n const isOpen = body.style.maxHeight !== '' && body.style.maxHeight !== '0px';\n\n body.style.maxHeight = isOpen ? '0' : '300px';\n trigger.setAttribute('aria-expanded', String(!isOpen));\n\n if (arrow) {\n arrow.style.transform = isOpen ? 'rotate(0deg)' : 'rotate(180deg)';\n }\n }\n\n /* ── Render ── */\n\n protected override render(): TemplateResult {\n return renderFooter(this);\n }\n}\n"],"names":[],"mappings":"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"}