@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/index65.js CHANGED
@@ -1,7 +1,7 @@
1
- import { unsafeCSS, css, LitElement } from "lit";
2
- import { property, query, customElement } from "lit/decorators.js";
3
- import { checkboxCardTemplate } from "./index314.js";
4
- import checkboxCardCss from "./index315.js";
1
+ import { unsafeCSS, css, LitElement, html } from "lit";
2
+ import { property, state, customElement } from "lit/decorators.js";
3
+ import { tabsTemplate } from "./index229.js";
4
+ import tabsCss from "./index230.js";
5
5
  import sharedTokens from "./index196.js";
6
6
  var __defProp = Object.defineProperty;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -13,107 +13,205 @@ var __decorateClass = (decorators, target, key, kind) => {
13
13
  if (kind && result) __defProp(target, key, result);
14
14
  return result;
15
15
  };
16
- let LibCheckboxCard = class extends LitElement {
16
+ let LibTabs = class extends LitElement {
17
17
  constructor() {
18
18
  super(...arguments);
19
- this.checked = false;
20
- this.inputType = "checkbox";
21
- this.name = "";
22
- this.value = "";
23
- this.color = "kaki";
24
- this.layout = "vertical";
25
- this.cardTitle = "";
26
- this.desc = "";
27
- this.checkShape = "square";
19
+ this.variant = "underline";
20
+ this.color = "";
21
+ this.size = "";
28
22
  this.dark = false;
29
- this.disabled = false;
30
- this.error = false;
31
- this.image = 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;
32
33
  }
33
- /* ── Ripple en click ── */
34
- _handleClick(e) {
35
- if (this.disabled) return;
36
- this._spawnRipple(e);
34
+ /* ── Lifecycle ── */
35
+ firstUpdated() {
36
+ this._setupResizeObserver();
37
+ requestAnimationFrame(() => this._positionInk());
38
+ }
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
+ }
45
+ }
46
+ disconnectedCallback() {
47
+ var _a;
48
+ super.disconnectedCallback();
49
+ (_a = this._ro) == null ? void 0 : _a.disconnect();
50
+ this._ro = null;
37
51
  }
38
- _spawnRipple(e) {
39
- const ripple = this._rippleEl;
40
- if (!ripple) return;
41
- const rect = ripple.getBoundingClientRect();
42
- const dot = document.createElement("span");
43
- dot.className = "cc-ripple-dot";
44
- dot.style.left = `${e.clientX - rect.left - 2}px`;
45
- dot.style.top = `${e.clientY - rect.top - 2}px`;
46
- ripple.appendChild(dot);
47
- dot.addEventListener("animationend", () => dot.remove(), { once: true });
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;
48
69
  }
49
- /* ── Cambio de estado ── */
50
- _handleChange(e) {
51
- const input = e.target;
52
- this.checked = input.checked;
53
- this.dispatchEvent(new CustomEvent("ui-lib-checkbox-card-change", {
54
- detail: { checked: this.checked, value: this.value },
55
- bubbles: true,
56
- composed: true
57
- }));
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);
76
+ }
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();
58
115
  }
59
- /* Helper para detectar slots con contenido */
60
- _hasSlot(name) {
61
- return !!this.querySelector(`[slot="${name}"]`);
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
+ }
62
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 ── */
63
153
  render() {
64
- return checkboxCardTemplate(this);
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);
65
162
  }
66
163
  };
67
- LibCheckboxCard.styles = [
68
- css`${unsafeCSS(sharedTokens)}`,
69
- css`${unsafeCSS(checkboxCardCss)}`
164
+ LibTabs.styles = [
165
+ css`
166
+ ${unsafeCSS(sharedTokens)}
167
+ `,
168
+ css`
169
+ ${unsafeCSS(tabsCss)}
170
+ `
70
171
  ];
71
- __decorateClass([
72
- property({ type: Boolean, reflect: true })
73
- ], LibCheckboxCard.prototype, "checked", 2);
74
- __decorateClass([
75
- property({ type: String, reflect: true, attribute: "input-type" })
76
- ], LibCheckboxCard.prototype, "inputType", 2);
77
- __decorateClass([
78
- property({ type: String })
79
- ], LibCheckboxCard.prototype, "name", 2);
80
- __decorateClass([
81
- property({ type: String })
82
- ], LibCheckboxCard.prototype, "value", 2);
83
172
  __decorateClass([
84
173
  property({ type: String, reflect: true })
85
- ], LibCheckboxCard.prototype, "color", 2);
174
+ ], LibTabs.prototype, "variant", 2);
86
175
  __decorateClass([
87
176
  property({ type: String, reflect: true })
88
- ], LibCheckboxCard.prototype, "layout", 2);
89
- __decorateClass([
90
- property({ type: String, attribute: "card-title" })
91
- ], LibCheckboxCard.prototype, "cardTitle", 2);
92
- __decorateClass([
93
- property({ type: String })
94
- ], LibCheckboxCard.prototype, "desc", 2);
177
+ ], LibTabs.prototype, "color", 2);
95
178
  __decorateClass([
96
- property({ type: String, attribute: "check-shape" })
97
- ], LibCheckboxCard.prototype, "checkShape", 2);
179
+ property({ type: String, reflect: true })
180
+ ], LibTabs.prototype, "size", 2);
98
181
  __decorateClass([
99
182
  property({ type: Boolean, reflect: true })
100
- ], LibCheckboxCard.prototype, "dark", 2);
183
+ ], LibTabs.prototype, "dark", 2);
101
184
  __decorateClass([
102
185
  property({ type: Boolean, reflect: true })
103
- ], LibCheckboxCard.prototype, "disabled", 2);
186
+ ], LibTabs.prototype, "kintsugi", 2);
104
187
  __decorateClass([
105
188
  property({ type: Boolean, reflect: true })
106
- ], LibCheckboxCard.prototype, "error", 2);
189
+ ], LibTabs.prototype, "glitch", 2);
190
+ __decorateClass([
191
+ property({ type: Boolean, reflect: true, attribute: "scroll" })
192
+ ], LibTabs.prototype, "scrollable", 2);
107
193
  __decorateClass([
108
194
  property({ type: Boolean, reflect: true })
109
- ], LibCheckboxCard.prototype, "image", 2);
195
+ ], LibTabs.prototype, "full", 2);
196
+ __decorateClass([
197
+ property({ type: String, reflect: true })
198
+ ], LibTabs.prototype, "active", 2);
199
+ __decorateClass([
200
+ 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);
110
208
  __decorateClass([
111
- query(".cc-ripple")
112
- ], LibCheckboxCard.prototype, "_rippleEl", 2);
113
- LibCheckboxCard = __decorateClass([
114
- customElement("lib-checkbox-card")
115
- ], LibCheckboxCard);
209
+ state()
210
+ ], LibTabs.prototype, "_inkWidth", 2);
211
+ LibTabs = __decorateClass([
212
+ customElement("lib-tabs")
213
+ ], LibTabs);
116
214
  export {
117
- LibCheckboxCard
215
+ LibTabs
118
216
  };
119
217
  //# sourceMappingURL=index65.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index65.js","sources":["../src/components/molecules/checkbox-card/lib-checkbox-card.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { checkboxCardTemplate } from './lib-checkbox-card.html';\nimport checkboxCardCss from './lib-checkbox-card.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport type {\n CheckboxCardColor,\n CheckboxCardLayout,\n CheckboxCardInputType,\n} from './lib-checkbox-card.types';\n\n/**\n * lib-checkbox-card — Tarjeta seleccionable Shibui (SG-57)\n *\n * La mecánica de checked se gestiona con CSS puro vía\n * `input:checked ~ .cc-body`. El componente solo gestiona\n * el estado, el ripple y los eventos.\n *\n * @prop checked — Estado checked (refleja en atributo)\n * @prop input-type — 'checkbox' | 'radio'\n * @prop name — Nombre del grupo (requerido en radio)\n * @prop value — Valor del input\n * @prop color — 'kaki' | 'celadon'\n * @prop layout — 'vertical' | 'horizontal' | 'compact'\n * @prop card-title — Título (alternativa a slot)\n * @prop desc — Descripción (alternativa a slot)\n * @prop check-shape — 'square' | 'pill'\n * @prop dark — Surface oscura\n * @prop disabled — Estado deshabilitado\n * @prop error — Estado de error\n * @prop image — Modo imagen (sin padding en .cc-body)\n *\n * @fires ui-lib-checkbox-card-change — { detail: { checked: boolean, value: string } }\n *\n * @slot icon — Icono SVG o imagen\n * @slot badge — Badge/etiqueta\n * @slot title — Título (sobreescribe card-title prop)\n * @slot desc — Descripción (sobreescribe desc prop)\n * @slot price — Bloque de precio\n * @slot divider — Línea divisoria\n * @slot features — Lista de características\n * @slot image — Imagen con aspect-ratio 16/9\n * @slot — Contenido libre\n */\n@customElement('lib-checkbox-card')\nexport class LibCheckboxCard extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(checkboxCardCss)}`,\n ];\n\n @property({ type: Boolean, reflect: true })\n checked = false;\n\n @property({ type: String, reflect: true, attribute: 'input-type' })\n inputType: CheckboxCardInputType = 'checkbox';\n\n @property({ type: String })\n name = '';\n\n @property({ type: String })\n value = '';\n\n @property({ type: String, reflect: true })\n color: CheckboxCardColor = 'kaki';\n\n @property({ type: String, reflect: true })\n layout: CheckboxCardLayout = 'vertical';\n\n @property({ type: String, attribute: 'card-title' })\n cardTitle = '';\n\n @property({ type: String })\n desc = '';\n\n @property({ type: String, attribute: 'check-shape' })\n checkShape: 'square' | 'pill' = 'square';\n\n @property({ type: Boolean, reflect: true })\n dark = false;\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ type: Boolean, reflect: true })\n error = false;\n\n @property({ type: Boolean, reflect: true })\n image = false;\n\n @query('.cc-ripple')\n declare private _rippleEl: HTMLElement | null;\n\n /* ── Ripple en click ── */\n _handleClick(e: MouseEvent): void {\n if (this.disabled) return;\n this._spawnRipple(e);\n }\n\n private _spawnRipple(e: MouseEvent): void {\n const ripple = this._rippleEl;\n if (!ripple) return;\n\n const rect = ripple.getBoundingClientRect();\n const dot = document.createElement('span');\n dot.className = 'cc-ripple-dot';\n dot.style.left = `${e.clientX - rect.left - 2}px`;\n dot.style.top = `${e.clientY - rect.top - 2}px`;\n ripple.appendChild(dot);\n dot.addEventListener('animationend', (): void => dot.remove(), { once: true });\n }\n\n /* ── Cambio de estado ── */\n _handleChange(e: Event): void {\n const input = e.target as HTMLInputElement;\n this.checked = input.checked;\n this.dispatchEvent(new CustomEvent('ui-lib-checkbox-card-change', {\n detail: { checked: this.checked, value: this.value },\n bubbles: true,\n composed: true,\n }));\n }\n\n /* Helper para detectar slots con contenido */\n _hasSlot(name: string): boolean {\n return !!this.querySelector(`[slot=\"${name}\"]`);\n }\n\n protected override render(): TemplateResult {\n return checkboxCardTemplate(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-checkbox-card': LibCheckboxCard;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AA6CO,IAAM,kBAAN,cAA8B,WAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AAOL,SAAA,UAAU;AAGV,SAAA,YAAmC;AAGnC,SAAA,OAAO;AAGP,SAAA,QAAQ;AAGR,SAAA,QAA2B;AAG3B,SAAA,SAA6B;AAG7B,SAAA,YAAY;AAGZ,SAAA,OAAO;AAGP,SAAA,aAAgC;AAGhC,SAAA,OAAO;AAGP,SAAA,WAAW;AAGX,SAAA,QAAQ;AAGR,SAAA,QAAQ;AAAA,EAAA;AAAA;AAAA,EAMR,aAAa,GAAqB;AAChC,QAAI,KAAK,SAAU;AACnB,SAAK,aAAa,CAAC;AAAA,EACrB;AAAA,EAEQ,aAAa,GAAqB;AACxC,UAAM,SAAS,KAAK;AACpB,QAAI,CAAC,OAAQ;AAEb,UAAM,OAAO,OAAO,sBAAA;AACpB,UAAM,MAAM,SAAS,cAAc,MAAM;AACzC,QAAI,YAAY;AAChB,QAAI,MAAM,OAAO,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC;AAC7C,QAAI,MAAM,MAAO,GAAG,EAAE,UAAU,KAAK,MAAO,CAAC;AAC7C,WAAO,YAAY,GAAG;AACtB,QAAI,iBAAiB,gBAAgB,MAAY,IAAI,UAAU,EAAE,MAAM,MAAM;AAAA,EAC/E;AAAA;AAAA,EAGA,cAAc,GAAgB;AAC5B,UAAM,QAAQ,EAAE;AAChB,SAAK,UAAU,MAAM;AACrB,SAAK,cAAc,IAAI,YAAY,+BAA+B;AAAA,MAChE,QAAQ,EAAE,SAAS,KAAK,SAAS,OAAO,KAAK,MAAA;AAAA,MAC7C,SAAS;AAAA,MACT,UAAU;AAAA,IAAA,CACX,CAAC;AAAA,EACJ;AAAA;AAAA,EAGA,SAAS,MAAuB;AAC9B,WAAO,CAAC,CAAC,KAAK,cAAc,UAAU,IAAI,IAAI;AAAA,EAChD;AAAA,EAEmB,SAAyB;AAC1C,WAAO,qBAAqB,IAAI;AAAA,EAClC;AACF;AAtFa,gBACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,eAAe,CAAC;AAClC;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAN/B,gBAOX,WAAA,WAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM,WAAW,cAAc;AAAA,GATvD,gBAUX,WAAA,aAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAZf,gBAaX,WAAA,QAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAff,gBAgBX,WAAA,SAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAlB9B,gBAmBX,WAAA,SAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GArB9B,gBAsBX,WAAA,UAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,cAAc;AAAA,GAxBxC,gBAyBX,WAAA,aAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GA3Bf,gBA4BX,WAAA,QAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,eAAe;AAAA,GA9BzC,gBA+BX,WAAA,cAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAjC/B,gBAkCX,WAAA,QAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GApC/B,gBAqCX,WAAA,YAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAvC/B,gBAwCX,WAAA,SAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GA1C/B,gBA2CX,WAAA,SAAA,CAAA;AAGgB,gBAAA;AAAA,EADf,MAAM,YAAY;AAAA,GA7CR,gBA8CK,WAAA,aAAA,CAAA;AA9CL,kBAAN,gBAAA;AAAA,EADN,cAAc,mBAAmB;AAAA,GACrB,eAAA;"}
1
+ {"version":3,"file":"index65.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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"}