@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/index60.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { unsafeCSS, css, LitElement } from "lit";
2
2
  import { property, customElement } from "lit/decorators.js";
3
- import { paginationTemplate } from "./index305.js";
4
- import paginationCss from "./index306.js";
5
3
  import sharedTokens from "./index196.js";
4
+ import modalCss from "./index219.js";
5
+ import { modalTemplate } from "./index220.js";
6
6
  var __defProp = Object.defineProperty;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
8
  var __decorateClass = (decorators, target, key, kind) => {
@@ -13,99 +13,135 @@ var __decorateClass = (decorators, target, key, kind) => {
13
13
  if (kind && result) __defProp(target, key, result);
14
14
  return result;
15
15
  };
16
- let LibPagination = class extends LitElement {
16
+ let LibModal = class extends LitElement {
17
17
  constructor() {
18
18
  super(...arguments);
19
- this.totalItems = 0;
20
- this.itemsPerPage = 10;
21
- this.currentPage = 1;
22
- this.siblings = 1;
19
+ this.open = false;
23
20
  this.size = "md";
24
21
  this.variant = "default";
22
+ this._animate = "scale";
25
23
  this.dark = false;
26
- this.showInfo = false;
27
- this.ariaLabel = "Paginación";
28
- this._onKeyDown = (e) => {
29
- if (e.key === "ArrowLeft") {
30
- e.preventDefault();
31
- this._changePage(this.currentPage - 1);
32
- }
33
- if (e.key === "ArrowRight") {
34
- e.preventDefault();
35
- this._changePage(this.currentPage + 1);
36
- }
37
- if (e.key === "Home") {
38
- e.preventDefault();
39
- this._changePage(1);
40
- }
41
- if (e.key === "End") {
42
- e.preventDefault();
43
- this._changePage(this.totalPages);
24
+ this.heading = "";
25
+ this.subtitle = "";
26
+ this.iconTone = null;
27
+ this.footerInfo = "";
28
+ this.noBackdropClose = false;
29
+ this._prevFocus = null;
30
+ this._onKeydown = (e) => {
31
+ if (e.key === "Escape" && this.open) {
32
+ e.stopPropagation();
33
+ this._close("escape");
44
34
  }
45
35
  };
46
36
  }
47
- /* ── Computed ── */
48
- get totalPages() {
49
- return Math.max(1, Math.ceil(this.totalItems / this.itemsPerPage));
50
- }
51
- /* ── Cambio de página ── */
52
- _changePage(page) {
53
- if (page < 1 || page > this.totalPages || page === this.currentPage) return;
54
- const prev = this.currentPage;
55
- this.currentPage = page;
56
- this.dispatchEvent(new CustomEvent("ui-lib-page-change", {
57
- detail: { page: this.currentPage, prev },
58
- bubbles: true,
59
- composed: true
60
- }));
61
- }
37
+ /* ── Lifecycle ──────────────────────────────────────────── */
62
38
  connectedCallback() {
63
39
  super.connectedCallback();
64
- this.addEventListener("keydown", this._onKeyDown);
40
+ document.addEventListener("keydown", this._onKeydown, true);
65
41
  }
66
42
  disconnectedCallback() {
67
43
  super.disconnectedCallback();
68
- this.removeEventListener("keydown", this._onKeyDown);
44
+ document.removeEventListener("keydown", this._onKeydown, true);
45
+ if (this.open) document.body.style.overflow = "";
46
+ }
47
+ updated(changed) {
48
+ if (!changed.has("open")) return;
49
+ if (this.open) {
50
+ this._prevFocus = document.activeElement;
51
+ document.body.style.overflow = "hidden";
52
+ requestAnimationFrame(() => this._focusFirst());
53
+ } else {
54
+ document.body.style.overflow = "";
55
+ if (this._prevFocus instanceof HTMLElement) {
56
+ this._prevFocus.focus();
57
+ }
58
+ this._prevFocus = null;
59
+ }
60
+ }
61
+ /* ── API pública ────────────────────────────────────────── */
62
+ /** Cierra el modal programáticamente. */
63
+ close() {
64
+ this._close("button");
65
+ }
66
+ /* ── Helpers privados ───────────────────────────────────── */
67
+ _close(reason) {
68
+ this.open = false;
69
+ this.dispatchEvent(
70
+ new CustomEvent("ui-lib-modal-close", {
71
+ detail: { reason },
72
+ bubbles: true,
73
+ composed: true
74
+ })
75
+ );
69
76
  }
77
+ _onBackdropClick(e) {
78
+ if (!this.noBackdropClose && e.target === e.currentTarget) {
79
+ this._close("backdrop");
80
+ }
81
+ }
82
+ _focusFirst() {
83
+ const panel = this.renderRoot.querySelector(".mo-panel");
84
+ if (!panel) return;
85
+ const focusable = panel.querySelector(
86
+ 'button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'
87
+ );
88
+ focusable == null ? void 0 : focusable.focus();
89
+ }
90
+ /* ── Render ─────────────────────────────────────────────── */
70
91
  render() {
71
- return paginationTemplate(this);
92
+ return modalTemplate({
93
+ open: this.open,
94
+ size: this.size,
95
+ variant: this.variant,
96
+ _animate: this._animate,
97
+ dark: this.dark,
98
+ heading: this.heading,
99
+ subtitle: this.subtitle,
100
+ iconTone: this.iconTone,
101
+ footerInfo: this.footerInfo,
102
+ onClose: () => this._close("button"),
103
+ onBackdropClick: (e) => this._onBackdropClick(e)
104
+ });
72
105
  }
73
106
  };
74
- LibPagination.styles = [
107
+ LibModal.styles = [
75
108
  css`${unsafeCSS(sharedTokens)}`,
76
- css`${unsafeCSS(paginationCss)}`
109
+ css`${unsafeCSS(modalCss)}`
77
110
  ];
78
111
  __decorateClass([
79
- property({ type: Number, attribute: "total-items" })
80
- ], LibPagination.prototype, "totalItems", 2);
81
- __decorateClass([
82
- property({ type: Number, attribute: "items-per-page" })
83
- ], LibPagination.prototype, "itemsPerPage", 2);
84
- __decorateClass([
85
- property({ type: Number, attribute: "current-page", reflect: true })
86
- ], LibPagination.prototype, "currentPage", 2);
112
+ property({ type: Boolean, reflect: true })
113
+ ], LibModal.prototype, "open", 2);
87
114
  __decorateClass([
88
- property({ type: Number })
89
- ], LibPagination.prototype, "siblings", 2);
115
+ property({ type: String, reflect: true })
116
+ ], LibModal.prototype, "size", 2);
90
117
  __decorateClass([
91
118
  property({ type: String, reflect: true })
92
- ], LibPagination.prototype, "size", 2);
119
+ ], LibModal.prototype, "variant", 2);
93
120
  __decorateClass([
94
121
  property({ type: String, reflect: true })
95
- ], LibPagination.prototype, "variant", 2);
122
+ ], LibModal.prototype, "_animate", 2);
96
123
  __decorateClass([
97
124
  property({ type: Boolean, reflect: true })
98
- ], LibPagination.prototype, "dark", 2);
125
+ ], LibModal.prototype, "dark", 2);
126
+ __decorateClass([
127
+ property({ type: String })
128
+ ], LibModal.prototype, "heading", 2);
129
+ __decorateClass([
130
+ property({ type: String })
131
+ ], LibModal.prototype, "subtitle", 2);
132
+ __decorateClass([
133
+ property({ type: String, attribute: "icon-tone" })
134
+ ], LibModal.prototype, "iconTone", 2);
99
135
  __decorateClass([
100
- property({ type: Boolean, attribute: "show-info" })
101
- ], LibPagination.prototype, "showInfo", 2);
136
+ property({ type: String, attribute: "footer-info" })
137
+ ], LibModal.prototype, "footerInfo", 2);
102
138
  __decorateClass([
103
- property({ type: String, attribute: "aria-label" })
104
- ], LibPagination.prototype, "ariaLabel", 2);
105
- LibPagination = __decorateClass([
106
- customElement("lib-pagination")
107
- ], LibPagination);
139
+ property({ type: Boolean, attribute: "no-backdrop-close" })
140
+ ], LibModal.prototype, "noBackdropClose", 2);
141
+ LibModal = __decorateClass([
142
+ customElement("lib-modal")
143
+ ], LibModal);
108
144
  export {
109
- LibPagination
145
+ LibModal
110
146
  };
111
147
  //# sourceMappingURL=index60.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index60.js","sources":["../src/components/molecules/pagination/lib-pagination.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { paginationTemplate } from './lib-pagination.html';\nimport paginationCss from './lib-pagination.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport type { PaginationSize, PaginationVariant } from './lib-pagination.types';\n\n/**\n * lib-pagination — Paginación Shibui\n *\n * @prop total-items — Total de registros\n * @prop items-per-page — Registros por página (default 10)\n * @prop current-page — Página activa (1-indexed, default 1)\n * @prop siblings — Páginas visibles a cada lado de la actual (default 1)\n * @prop size — 'sm' | 'md' | 'lg' (default 'md')\n * @prop variant — 'default' | 'outline' | 'ghost'\n * @prop dark — Tema oscuro\n * @prop show-info — Muestra \"X–Y de Z resultados\"\n * @prop aria-label — Etiqueta accesible del nav (default 'Paginación')\n *\n * @fires ui-lib-page-change — { detail: { page: number, prev: number } }\n *\n * @readonly totalPages — Número total de páginas calculado\n */\n@customElement('lib-pagination')\nexport class LibPagination extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(paginationCss)}`,\n ];\n\n @property({ type: Number, attribute: 'total-items' })\n totalItems = 0;\n\n @property({ type: Number, attribute: 'items-per-page' })\n itemsPerPage = 10;\n\n @property({ type: Number, attribute: 'current-page', reflect: true })\n currentPage = 1;\n\n /** Páginas visibles a cada lado de la página actual antes de los ellipsis */\n @property({ type: Number })\n siblings = 1;\n\n @property({ type: String, reflect: true })\n size: PaginationSize = 'md';\n\n @property({ type: String, reflect: true })\n variant: PaginationVariant = 'default';\n\n @property({ type: Boolean, reflect: true })\n dark = false;\n\n @property({ type: Boolean, attribute: 'show-info' })\n showInfo = false;\n\n @property({ type: String, attribute: 'aria-label' })\n override ariaLabel = 'Paginación';\n\n /* ── Computed ── */\n get totalPages(): number {\n return Math.max(1, Math.ceil(this.totalItems / this.itemsPerPage));\n }\n\n /* ── Cambio de página ── */\n _changePage(page: number): void {\n if (page < 1 || page > this.totalPages || page === this.currentPage) return;\n const prev = this.currentPage;\n this.currentPage = page;\n this.dispatchEvent(new CustomEvent('ui-lib-page-change', {\n detail: { page: this.currentPage, prev },\n bubbles: true,\n composed: true,\n }));\n }\n\n /* ── Teclado en el nav ── */\n private _onKeyDown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowLeft') { e.preventDefault(); this._changePage(this.currentPage - 1); }\n if (e.key === 'ArrowRight') { e.preventDefault(); this._changePage(this.currentPage + 1); }\n if (e.key === 'Home') { e.preventDefault(); this._changePage(1); }\n if (e.key === 'End') { e.preventDefault(); this._changePage(this.totalPages); }\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 }\n\n protected override render(): TemplateResult {\n return paginationTemplate(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-pagination': LibPagination;\n }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index60.js","sources":["../src/components/molecules/modal/lib-modal.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport modalCss from './lib-modal.css?inline';\nimport { modalTemplate } from './lib-modal.html';\nimport { ModalAnimate, ModalCloseEventDetail, ModalIconTone, ModalSize, ModalVariant } from './lib-modal.types';\n\n\n/**\n * @element lib-modal\n *\n * Diálogo bloqueante con backdrop difuminado. Seis tamaños, tres variantes\n * de panel, tres animaciones de entrada y soporte de surface oscura.\n *\n * ## Uso básico\n * ```html\n * <lib-modal heading=\"Editar componente\" open>\n * <p>Contenido del cuerpo.</p>\n * <div slot=\"footer\">\n * <button class=\"mo-btn mo-btn-ghost\">Cancelar</button>\n * <button class=\"mo-btn mo-btn-primary\">Guardar</button>\n * </div>\n * </lib-modal>\n * ```\n *\n * ## Con ícono y subtítulo\n * ```html\n * <lib-modal heading=\"Nuevo componente\" subtitle=\"Shibui DS · añadir\" icon-tone=\"kaki\">\n * <ph-plus slot=\"icon\" weight=\"bold\"></ph-plus>\n * ...\n * </lib-modal>\n * ```\n *\n * ## Control de apertura\n * ```ts\n * modal.open = true;\n * modal.addEventListener('ui-lib-modal-close', e => {\n * console.log(e.detail.reason); // 'button' | 'backdrop' | 'escape'\n * modal.open = false;\n * });\n * ```\n *\n * @prop {boolean} open — Abre el modal. Reflected.\n * @prop {ModalSize} size — xs · sm · md · lg · xl · full (default md).\n * @prop {ModalVariant} variant — default · editorial · danger.\n * @prop {ModalAnimate} _animate — scale · slide-up · slide-down.\n * @prop {boolean} dark — Surface oscura.\n * @prop {string} heading — Título del modal (requerido para a11y).\n * @prop {string} subtitle — Subtítulo mono debajo del título.\n * @prop {ModalIconTone|null} icon-tone — Tono del ícono. Si es null no se renderiza el wrapper.\n * @prop {string} footer-info — Texto secundario izquierda en el footer.\n * @prop {boolean} no-backdrop-close — Desactiva el cierre al hacer click en el backdrop.\n *\n * @slot — Cuerpo del modal (secciones, formularios, contenido libre).\n * @slot icon — Contenido del ícono del header (visible solo si icon-tone no es null).\n * @slot footer — Acciones del footer (botones).\n *\n * @csspart backdrop — Capa de fondo difuminada.\n * @csspart panel-wrap — Contenedor animado (tamaño + animación).\n * @csspart panel — El panel blanco real.\n * @csspart header — Zona del header.\n * @csspart icon — Wrapper del ícono.\n * @csspart close-btn — Botón ×.\n * @csspart body — Zona scrollable del cuerpo.\n * @csspart footer — Zona del footer.\n *\n * @fires ui-lib-modal-close — Emitido cuando el modal se cierra. Detail: { reason }.\n */\n@customElement('lib-modal')\nexport class LibModal extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(modalCss)}`,\n ];\n\n /* ── Props ─────────────────────────────────────────────── */\n\n @property({ type: Boolean, reflect: true })\n open: boolean = false;\n\n @property({ type: String, reflect: true })\n size: ModalSize = 'md';\n\n @property({ type: String, reflect: true })\n variant: ModalVariant = 'default';\n\n @property({ type: String, reflect: true })\n _animate: ModalAnimate = 'scale';\n\n @property({ type: Boolean, reflect: true })\n dark: boolean = false;\n\n /** Título del modal — requerido para accesibilidad (aria-labelledby). */\n @property({ type: String })\n heading: string = '';\n\n @property({ type: String })\n subtitle: string = '';\n\n /**\n * Tono del ícono del header.\n * Acepta: 'default' | 'kaki' | 'celadon' | 'error' | 'info' | null.\n * Cuando es null no se renderiza el wrapper del ícono.\n */\n @property({ type: String, attribute: 'icon-tone' })\n iconTone: ModalIconTone | null = null;\n\n @property({ type: String, attribute: 'footer-info' })\n footerInfo: string = '';\n\n /** Desactiva el cierre al hacer click fuera del panel. */\n @property({ type: Boolean, attribute: 'no-backdrop-close' })\n noBackdropClose: boolean = false;\n\n /* ── Estado interno ─────────────────────────────────────── */\n\n /** Elemento con foco antes de abrir — se restaura al cerrar. */\n private _prevFocus: Element | null = null;\n\n /** Handler de Escape vinculado para poder desregistrarlo. */\n private readonly _onKeydown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this.open) {\n e.stopPropagation();\n this._close('escape');\n }\n };\n\n /* ── Lifecycle ──────────────────────────────────────────── */\n\n override connectedCallback(): void {\n super.connectedCallback();\n document.addEventListener('keydown', this._onKeydown, true);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n document.removeEventListener('keydown', this._onKeydown, true);\n // Restaurar scroll si el componente se desmonta mientras está abierto\n if (this.open) document.body.style.overflow = '';\n }\n\n override updated(changed: Map<string, unknown>): void {\n if (!changed.has('open')) return;\n\n if (this.open) {\n this._prevFocus = document.activeElement;\n document.body.style.overflow = 'hidden';\n // Foco al primer elemento interactivo tras el render\n requestAnimationFrame(() => this._focusFirst());\n } else {\n document.body.style.overflow = '';\n // Restaurar foco al trigger original\n if (this._prevFocus instanceof HTMLElement) {\n this._prevFocus.focus();\n }\n this._prevFocus = null;\n }\n }\n\n /* ── API pública ────────────────────────────────────────── */\n\n /** Cierra el modal programáticamente. */\n close(): void {\n this._close('button');\n }\n\n /* ── Helpers privados ───────────────────────────────────── */\n\n private _close(reason: ModalCloseEventDetail['reason']): void {\n this.open = false;\n this.dispatchEvent(\n new CustomEvent<ModalCloseEventDetail>('ui-lib-modal-close', {\n detail: { reason },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _onBackdropClick(e: MouseEvent): void {\n // Solo cierra si el click es directamente sobre el backdrop\n if (!this.noBackdropClose && e.target === e.currentTarget) {\n this._close('backdrop');\n }\n }\n\n private _focusFirst(): void {\n const panel = this.renderRoot.querySelector('.mo-panel');\n if (!panel) return;\n const focusable = panel.querySelector<HTMLElement>(\n 'button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n );\n focusable?.focus();\n }\n\n /* ── Render ─────────────────────────────────────────────── */\n\n override render(): TemplateResult {\n return modalTemplate({\n open: this.open,\n size: this.size,\n variant: this.variant,\n _animate: this._animate,\n dark: this.dark,\n heading: this.heading,\n subtitle: this.subtitle,\n iconTone: this.iconTone,\n footerInfo: this.footerInfo,\n onClose: () => this._close('button'),\n onBackdropClick: (e) => this._onBackdropClick(e),\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-modal': LibModal;\n }\n}\n\n"],"names":[],"mappings":"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"}
package/dist/index61.js CHANGED
@@ -1,7 +1,7 @@
1
- import { unsafeCSS, css, LitElement, html } from "lit";
2
- import { property, state, customElement } from "lit/decorators.js";
3
- import { tabsTemplate } from "./index307.js";
4
- import tabsCss from "./index308.js";
1
+ import { unsafeCSS, css, LitElement } from "lit";
2
+ import { property, customElement } from "lit/decorators.js";
3
+ import { paginationTemplate } from "./index221.js";
4
+ import paginationCss from "./index222.js";
5
5
  import sharedTokens from "./index196.js";
6
6
  var __defProp = Object.defineProperty;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -13,205 +13,99 @@ var __decorateClass = (decorators, target, key, kind) => {
13
13
  if (kind && result) __defProp(target, key, result);
14
14
  return result;
15
15
  };
16
- let LibTabs = class extends LitElement {
16
+ let LibPagination = class extends LitElement {
17
17
  constructor() {
18
18
  super(...arguments);
19
- this.variant = "underline";
20
- this.color = "";
21
- this.size = "";
19
+ this.totalItems = 0;
20
+ this.itemsPerPage = 10;
21
+ this.currentPage = 1;
22
+ this.siblings = 1;
23
+ this.size = "md";
24
+ this.variant = "default";
22
25
  this.dark = false;
23
- this.kintsugi = false;
24
- this.glitch = false;
25
- this.scrollable = false;
26
- this.full = false;
27
- this.active = "";
28
- this.ariaLabel = "";
29
- this.items = [];
30
- this._inkLeft = 0;
31
- this._inkWidth = 0;
32
- this._ro = null;
26
+ this.showInfo = false;
27
+ this.ariaLabel = "Paginación";
28
+ this._onKeyDown = (e) => {
29
+ if (e.key === "ArrowLeft") {
30
+ e.preventDefault();
31
+ this._changePage(this.currentPage - 1);
32
+ }
33
+ if (e.key === "ArrowRight") {
34
+ e.preventDefault();
35
+ this._changePage(this.currentPage + 1);
36
+ }
37
+ if (e.key === "Home") {
38
+ e.preventDefault();
39
+ this._changePage(1);
40
+ }
41
+ if (e.key === "End") {
42
+ e.preventDefault();
43
+ this._changePage(this.totalPages);
44
+ }
45
+ };
33
46
  }
34
- /* ── Lifecycle ── */
35
- firstUpdated() {
36
- this._setupResizeObserver();
37
- requestAnimationFrame(() => this._positionInk());
47
+ /* ── Computed ── */
48
+ get totalPages() {
49
+ return Math.max(1, Math.ceil(this.totalItems / this.itemsPerPage));
38
50
  }
39
- updated(changed) {
40
- var _a;
41
- (_a = super.updated) == null ? void 0 : _a.call(this, changed);
42
- if (changed.has("active") || changed.has("items") || changed.has("variant")) {
43
- requestAnimationFrame(() => this._positionInk());
44
- }
51
+ /* ── Cambio de página ── */
52
+ _changePage(page) {
53
+ if (page < 1 || page > this.totalPages || page === this.currentPage) return;
54
+ const prev = this.currentPage;
55
+ this.currentPage = page;
56
+ this.dispatchEvent(new CustomEvent("ui-lib-page-change", {
57
+ detail: { page: this.currentPage, prev },
58
+ bubbles: true,
59
+ composed: true
60
+ }));
61
+ }
62
+ connectedCallback() {
63
+ super.connectedCallback();
64
+ this.addEventListener("keydown", this._onKeyDown);
45
65
  }
46
66
  disconnectedCallback() {
47
- var _a;
48
67
  super.disconnectedCallback();
49
- (_a = this._ro) == null ? void 0 : _a.disconnect();
50
- this._ro = null;
51
- }
52
- /* ── Ink bar ── */
53
- _positionInk() {
54
- var _a, _b;
55
- const noInkVariants = [
56
- "pill",
57
- "card",
58
- "outline",
59
- "vertical"
60
- ];
61
- if (noInkVariants.includes(this.variant)) return;
62
- const list = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector(".tb-list");
63
- const activeTab = (_b = this.shadowRoot) == null ? void 0 : _b.querySelector(".tb-tab.is-active");
64
- if (!list || !activeTab) return;
65
- const listRect = list.getBoundingClientRect();
66
- const tabRect = activeTab.getBoundingClientRect();
67
- this._inkLeft = tabRect.left - listRect.left;
68
- this._inkWidth = tabRect.width;
69
- }
70
- _setupResizeObserver() {
71
- var _a;
72
- const list = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector(".tb-list");
73
- if (!list) return;
74
- this._ro = new ResizeObserver(() => this._positionInk());
75
- this._ro.observe(list);
68
+ this.removeEventListener("keydown", this._onKeyDown);
76
69
  }
77
- /* ── Tab activation ── */
78
- _activateTab(id) {
79
- var _a;
80
- if (id === this.active) return;
81
- const prev = this.active;
82
- this.active = id;
83
- if (this.scrollable) {
84
- const tab = (_a = this.shadowRoot) == null ? void 0 : _a.querySelector(
85
- `[data-id="${id}"]`
86
- );
87
- tab == null ? void 0 : tab.scrollIntoView({
88
- inline: "nearest",
89
- block: "nearest",
90
- behavior: "smooth"
91
- });
92
- }
93
- this.dispatchEvent(
94
- new CustomEvent("ui-lib-tab-change", {
95
- detail: { id, prev },
96
- bubbles: true,
97
- composed: true
98
- })
99
- );
100
- }
101
- _handleClick(e) {
102
- var _a;
103
- const targetId = e.target.id;
104
- console.log("target:", e.target.id);
105
- const tabs = Array.from(
106
- ((_a = this.shadowRoot) == null ? void 0 : _a.querySelectorAll(
107
- ".tb-tab:not(.is-disabled)"
108
- )) ?? []
109
- );
110
- const selectedTab = tabs.find((tab) => tab.id === targetId);
111
- console.log(selectedTab);
112
- if (!selectedTab) return;
113
- this._activateTab((selectedTab == null ? void 0 : selectedTab.dataset["id"]) ?? "");
114
- selectedTab.focus();
115
- }
116
- /* ── Keyboard navigation ── */
117
- _handleKey(e) {
118
- var _a;
119
- const isVertical = this.variant === "vertical";
120
- const tabs = Array.from(
121
- ((_a = this.shadowRoot) == null ? void 0 : _a.querySelectorAll(
122
- ".tb-tab:not(.is-disabled)"
123
- )) ?? []
124
- );
125
- const current = tabs.findIndex((t) => t.dataset["id"] === this.active);
126
- let next = -1;
127
- if (e.key === "ArrowRight" && !isVertical || e.key === "ArrowDown" && isVertical) {
128
- e.preventDefault();
129
- next = (current + 1) % tabs.length;
130
- } else if (e.key === "ArrowLeft" && !isVertical || e.key === "ArrowUp" && isVertical) {
131
- e.preventDefault();
132
- next = (current - 1 + tabs.length) % tabs.length;
133
- } else if (e.key === "Home") {
134
- e.preventDefault();
135
- next = 0;
136
- } else if (e.key === "End") {
137
- e.preventDefault();
138
- next = tabs.length - 1;
139
- }
140
- if (next >= 0) {
141
- const target = tabs[next];
142
- if (target == null ? void 0 : target.dataset["id"]) {
143
- this._activateTab(target.dataset["id"]);
144
- target.focus();
145
- }
146
- }
147
- }
148
- /* ── renderItem (LibListModel) — fallback para modo loading ── */
149
- renderItem(item) {
150
- return html`<button class="tb-tab">${item.label}</button>`;
151
- }
152
- /* ── Render principal ── */
153
70
  render() {
154
- var _a;
155
- console.log(
156
- "lib-tabs render, items:",
157
- (_a = this.items) == null ? void 0 : _a.length,
158
- "active:",
159
- this.active
160
- );
161
- return tabsTemplate(this);
71
+ return paginationTemplate(this);
162
72
  }
163
73
  };
164
- LibTabs.styles = [
165
- css`
166
- ${unsafeCSS(sharedTokens)}
167
- `,
168
- css`
169
- ${unsafeCSS(tabsCss)}
170
- `
74
+ LibPagination.styles = [
75
+ css`${unsafeCSS(sharedTokens)}`,
76
+ css`${unsafeCSS(paginationCss)}`
171
77
  ];
172
78
  __decorateClass([
173
- property({ type: String, reflect: true })
174
- ], LibTabs.prototype, "variant", 2);
79
+ property({ type: Number, attribute: "total-items" })
80
+ ], LibPagination.prototype, "totalItems", 2);
175
81
  __decorateClass([
176
- property({ type: String, reflect: true })
177
- ], LibTabs.prototype, "color", 2);
178
- __decorateClass([
179
- property({ type: String, reflect: true })
180
- ], LibTabs.prototype, "size", 2);
82
+ property({ type: Number, attribute: "items-per-page" })
83
+ ], LibPagination.prototype, "itemsPerPage", 2);
181
84
  __decorateClass([
182
- property({ type: Boolean, reflect: true })
183
- ], LibTabs.prototype, "dark", 2);
85
+ property({ type: Number, attribute: "current-page", reflect: true })
86
+ ], LibPagination.prototype, "currentPage", 2);
184
87
  __decorateClass([
185
- property({ type: Boolean, reflect: true })
186
- ], LibTabs.prototype, "kintsugi", 2);
88
+ property({ type: Number })
89
+ ], LibPagination.prototype, "siblings", 2);
187
90
  __decorateClass([
188
- property({ type: Boolean, reflect: true })
189
- ], LibTabs.prototype, "glitch", 2);
91
+ property({ type: String, reflect: true })
92
+ ], LibPagination.prototype, "size", 2);
190
93
  __decorateClass([
191
- property({ type: Boolean, reflect: true, attribute: "scroll" })
192
- ], LibTabs.prototype, "scrollable", 2);
94
+ property({ type: String, reflect: true })
95
+ ], LibPagination.prototype, "variant", 2);
193
96
  __decorateClass([
194
97
  property({ type: Boolean, reflect: true })
195
- ], LibTabs.prototype, "full", 2);
98
+ ], LibPagination.prototype, "dark", 2);
196
99
  __decorateClass([
197
- property({ type: String, reflect: true })
198
- ], LibTabs.prototype, "active", 2);
100
+ property({ type: Boolean, attribute: "show-info" })
101
+ ], LibPagination.prototype, "showInfo", 2);
199
102
  __decorateClass([
200
103
  property({ type: String, attribute: "aria-label" })
201
- ], LibTabs.prototype, "ariaLabel", 2);
202
- __decorateClass([
203
- property({ type: Array, hasChanged: () => true })
204
- ], LibTabs.prototype, "items", 2);
205
- __decorateClass([
206
- state()
207
- ], LibTabs.prototype, "_inkLeft", 2);
208
- __decorateClass([
209
- state()
210
- ], LibTabs.prototype, "_inkWidth", 2);
211
- LibTabs = __decorateClass([
212
- customElement("lib-tabs")
213
- ], LibTabs);
104
+ ], LibPagination.prototype, "ariaLabel", 2);
105
+ LibPagination = __decorateClass([
106
+ customElement("lib-pagination")
107
+ ], LibPagination);
214
108
  export {
215
- LibTabs
109
+ LibPagination
216
110
  };
217
111
  //# sourceMappingURL=index61.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index61.js","sources":["../src/components/molecules/tabs/lib-tabs.component.ts"],"sourcesContent":["import { html, css, unsafeCSS, TemplateResult, LitElement } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { tabsTemplate } from \"./lib-tabs.html\";\nimport tabsCss from \"./lib-tabs.css?inline\";\nimport sharedTokens from \"../../../styles/shared/tokens.css?inline\";\nimport type {\n TabItem,\n TabsVariant,\n TabsColor,\n TabsSize,\n} from \"./lib-tabs.types\";\n\n/**\n * lib-tabs — Componente de pestañas Shibui (SG-60)\n *\n * @prop variant — 'underline' | 'pill' | 'card' | 'outline' | 'vertical'\n * @prop color — 'kaki' | 'celadon'\n * @prop size — 'sm' | 'md' | 'lg'\n * @prop dark — surface oscura\n * @prop kintsugi — ink bar animada dorada\n * @prop glitch — efecto RGB split en tab activo\n * @prop scroll — overflow-x scroll en la lista\n * @prop full — tabs en grid de columnas iguales\n * @prop active — id del tab activo\n * @prop items — array de TabItem\n *\n * Panels: cada TabItem con id=\"X\" se muestra via <slot name=\"X\">.\n * El usuario añade <div slot=\"X\">contenido</div> como hijo de lib-tabs.\n *\n * @fires ui-lib-tab-change — {detail: { id: string; prev: string }}\n */\n@customElement(\"lib-tabs\")\nexport class LibTabs extends LitElement {\n static override styles = [\n css`\n ${unsafeCSS(sharedTokens)}\n `,\n css`\n ${unsafeCSS(tabsCss)}\n `,\n ];\n\n @property({ type: String, reflect: true })\n variant: TabsVariant = \"underline\";\n\n @property({ type: String, reflect: true })\n color: TabsColor | \"\" = \"\";\n\n @property({ type: String, reflect: true })\n size: TabsSize | \"\" = \"\";\n\n @property({ type: Boolean, reflect: true })\n dark = false;\n\n @property({ type: Boolean, reflect: true })\n kintsugi = false;\n\n @property({ type: Boolean, reflect: true })\n glitch = false;\n\n @property({ type: Boolean, reflect: true, attribute: \"scroll\" })\n scrollable = false;\n\n @property({ type: Boolean, reflect: true })\n full = false;\n\n @property({ type: String, reflect: true })\n active = \"\";\n\n /** aria-label para el tablist */\n @property({ type: String, attribute: \"aria-label\" })\n override ariaLabel = \"\";\n\n @property({ type: Array, hasChanged: () => true })\n items: TabItem[] = [];\n\n /* ── Internal state para la ink bar ── */\n @state() _inkLeft = 0;\n @state() _inkWidth = 0;\n\n private _ro: ResizeObserver | null = null;\n\n /* ── Lifecycle ── */\n\n override firstUpdated(): void {\n this._setupResizeObserver();\n // Aseguramos que el primer tab activo tiene ink bar correcta\n requestAnimationFrame((): void => this._positionInk());\n }\n\n override updated(changed: Map<string, unknown>): void {\n super.updated?.(changed);\n if (\n changed.has(\"active\") ||\n changed.has(\"items\") ||\n changed.has(\"variant\")\n ) {\n requestAnimationFrame((): void => this._positionInk());\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this._ro?.disconnect();\n this._ro = null;\n }\n\n /* ── Ink bar ── */\n\n private _positionInk(): void {\n /* Solo aplica a variantes con ink bar */\n const noInkVariants: TabsVariant[] = [\n \"pill\",\n \"card\",\n \"outline\",\n \"vertical\",\n ];\n if (noInkVariants.includes(this.variant)) return;\n\n const list = this.shadowRoot?.querySelector<HTMLElement>(\".tb-list\");\n const activeTab =\n this.shadowRoot?.querySelector<HTMLElement>(\".tb-tab.is-active\");\n if (!list || !activeTab) return;\n\n const listRect = list.getBoundingClientRect();\n const tabRect = activeTab.getBoundingClientRect();\n this._inkLeft = tabRect.left - listRect.left;\n this._inkWidth = tabRect.width;\n }\n\n private _setupResizeObserver(): void {\n const list = this.shadowRoot?.querySelector<HTMLElement>(\".tb-list\");\n if (!list) return;\n this._ro = new ResizeObserver((): void => this._positionInk());\n this._ro.observe(list);\n }\n\n /* ── Tab activation ── */\n\n private _activateTab(id: string): void {\n if (id === this.active) return;\n const prev = this.active;\n this.active = id;\n\n /* Scroll tab into view si está en modo scrollable */\n if (this.scrollable) {\n const tab = this.shadowRoot?.querySelector<HTMLElement>(\n `[data-id=\"${id}\"]`,\n );\n tab?.scrollIntoView({\n inline: \"nearest\",\n block: \"nearest\",\n behavior: \"smooth\",\n });\n }\n\n this.dispatchEvent(\n new CustomEvent(\"ui-lib-tab-change\", {\n detail: { id, prev },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n _handleClick(e: CustomEvent): void {\n const targetId = (e.target as HTMLElement).id;\n console.log(\"target:\", (e.target as HTMLElement).id);\n\n const tabs = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLButtonElement>(\n \".tb-tab:not(.is-disabled)\",\n ) ?? [],\n );\n\n const selectedTab = tabs.find((tab) => tab.id === targetId);\n console.log(selectedTab);\n\n if (!selectedTab) return; // Si no lo encuentra, abortamos la función\n\n this._activateTab(selectedTab?.dataset[\"id\"] ?? \"\");\n selectedTab.focus();\n }\n\n /* ── Keyboard navigation ── */\n\n _handleKey(e: KeyboardEvent): void {\n const isVertical = this.variant === \"vertical\";\n const tabs = Array.from(\n this.shadowRoot?.querySelectorAll<HTMLButtonElement>(\n \".tb-tab:not(.is-disabled)\",\n ) ?? [],\n );\n const current = tabs.findIndex((t) => t.dataset[\"id\"] === this.active);\n\n let next = -1;\n\n if (\n (e.key === \"ArrowRight\" && !isVertical) ||\n (e.key === \"ArrowDown\" && isVertical)\n ) {\n e.preventDefault();\n next = (current + 1) % tabs.length;\n } else if (\n (e.key === \"ArrowLeft\" && !isVertical) ||\n (e.key === \"ArrowUp\" && isVertical)\n ) {\n e.preventDefault();\n next = (current - 1 + tabs.length) % tabs.length;\n } else if (e.key === \"Home\") {\n e.preventDefault();\n next = 0;\n } else if (e.key === \"End\") {\n e.preventDefault();\n next = tabs.length - 1;\n }\n\n if (next >= 0) {\n const target = tabs[next];\n if (target?.dataset[\"id\"]) {\n this._activateTab(target.dataset[\"id\"]);\n target.focus();\n }\n }\n }\n\n /* ── renderItem (LibListModel) — fallback para modo loading ── */\n protected renderItem(item: TabItem): TemplateResult {\n return html`<button class=\"tb-tab\">${item.label}</button>`;\n }\n\n /* ── Render principal ── */\n protected override render(): TemplateResult {\n console.log(\n \"lib-tabs render, items:\",\n this.items?.length,\n \"active:\",\n this.active,\n );\n\n return tabsTemplate(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"lib-tabs\": LibTabs;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index61.js","sources":["../src/components/molecules/pagination/lib-pagination.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { paginationTemplate } from './lib-pagination.html';\nimport paginationCss from './lib-pagination.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport type { PaginationSize, PaginationVariant } from './lib-pagination.types';\n\n/**\n * lib-pagination — Paginación Shibui\n *\n * @prop total-items — Total de registros\n * @prop items-per-page — Registros por página (default 10)\n * @prop current-page — Página activa (1-indexed, default 1)\n * @prop siblings — Páginas visibles a cada lado de la actual (default 1)\n * @prop size — 'sm' | 'md' | 'lg' (default 'md')\n * @prop variant — 'default' | 'outline' | 'ghost'\n * @prop dark — Tema oscuro\n * @prop show-info — Muestra \"X–Y de Z resultados\"\n * @prop aria-label — Etiqueta accesible del nav (default 'Paginación')\n *\n * @fires ui-lib-page-change — { detail: { page: number, prev: number } }\n *\n * @readonly totalPages — Número total de páginas calculado\n */\n@customElement('lib-pagination')\nexport class LibPagination extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(paginationCss)}`,\n ];\n\n @property({ type: Number, attribute: 'total-items' })\n totalItems = 0;\n\n @property({ type: Number, attribute: 'items-per-page' })\n itemsPerPage = 10;\n\n @property({ type: Number, attribute: 'current-page', reflect: true })\n currentPage = 1;\n\n /** Páginas visibles a cada lado de la página actual antes de los ellipsis */\n @property({ type: Number })\n siblings = 1;\n\n @property({ type: String, reflect: true })\n size: PaginationSize = 'md';\n\n @property({ type: String, reflect: true })\n variant: PaginationVariant = 'default';\n\n @property({ type: Boolean, reflect: true })\n dark = false;\n\n @property({ type: Boolean, attribute: 'show-info' })\n showInfo = false;\n\n @property({ type: String, attribute: 'aria-label' })\n override ariaLabel = 'Paginación';\n\n /* ── Computed ── */\n get totalPages(): number {\n return Math.max(1, Math.ceil(this.totalItems / this.itemsPerPage));\n }\n\n /* ── Cambio de página ── */\n _changePage(page: number): void {\n if (page < 1 || page > this.totalPages || page === this.currentPage) return;\n const prev = this.currentPage;\n this.currentPage = page;\n this.dispatchEvent(new CustomEvent('ui-lib-page-change', {\n detail: { page: this.currentPage, prev },\n bubbles: true,\n composed: true,\n }));\n }\n\n /* ── Teclado en el nav ── */\n private _onKeyDown = (e: KeyboardEvent): void => {\n if (e.key === 'ArrowLeft') { e.preventDefault(); this._changePage(this.currentPage - 1); }\n if (e.key === 'ArrowRight') { e.preventDefault(); this._changePage(this.currentPage + 1); }\n if (e.key === 'Home') { e.preventDefault(); this._changePage(1); }\n if (e.key === 'End') { e.preventDefault(); this._changePage(this.totalPages); }\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 }\n\n protected override render(): TemplateResult {\n return paginationTemplate(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-pagination': LibPagination;\n }\n}"],"names":[],"mappings":"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"}