@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
@@ -1 +1 @@
1
- {"version":3,"file":"index18.js","sources":["../src/components/atoms/switch/lib-switch.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { generateUniqueId } from '../../../core/a11y';\nimport type { LibSwitchVariant, LibSwitchSize } from './lib-switch.html';\nimport { switchTemplate } from './lib-switch.html';\nimport switchCss from './lib-switch.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\nexport type { LibSwitchVariant, LibSwitchSize };\n\n/**\n * @element lib-switch\n *\n * Toggle switch con variante kintsugi de acabado premium.\n *\n * @fires ui-lib-change Emitido al cambiar estado con `{ checked: boolean }`\n *\n * @example — default\n * <lib-switch label=\"Notificaciones\"></lib-switch>\n *\n * @example — con subtítulo\n * <lib-switch label=\"Acceso premium\" sub=\"Funciones exclusivas\" checked></lib-switch>\n *\n * @example — kintsugi (superficie oscura)\n * <lib-switch variant=\"kintsugi\" label=\"Modo ceremonial\" sub=\"Activa el tema kintsugi\"></lib-switch>\n *\n * @example — tamaños\n * <lib-switch size=\"sm\"></lib-switch>\n * <lib-switch size=\"lg\" label=\"Sincronización\"></lib-switch>\n */\n@customElement('lib-switch')\nexport class LibSwitch extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(switchCss)}`,\n ];\n\n private _switchId: string;\n\n constructor() {\n super();\n this._switchId = generateUniqueId('lib-switch-');\n }\n\n /** Estado activo del switch. */\n @property({ type: Boolean, reflect: true })\n checked = false;\n\n /** Deshabilita la interacción. */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * Variante visual.\n * - default : track washi, thumb blanco\n * - kintsugi : cerámica oscura, venas doradas, thumb de oro al activar\n */\n @property({ type: String, reflect: true })\n variant: LibSwitchVariant = 'default';\n\n /**\n * Tamaño del switch.\n * - sm : 30×18px · md : 40×24px (default) · lg : 52×30px\n */\n @property({ type: String, reflect: true })\n size: LibSwitchSize = 'md';\n\n /** Texto principal de la etiqueta. */\n @property({ type: String })\n label = '';\n\n /** Texto secundario debajo del label. */\n @property({ type: String })\n sub = '';\n\n override render(): TemplateResult {\n return switchTemplate({\n switchId: this._switchId,\n checked: this.checked,\n disabled: this.disabled,\n label: this.label,\n sub: this.sub,\n handleChange: this._handleChange.bind(this),\n });\n }\n\n private _handleChange(e: Event): void {\n const input = e.target as HTMLInputElement;\n this.checked = input.checked;\n\n this.dispatchEvent(\n new CustomEvent<{ checked: boolean }>('ui-lib-change', {\n detail: { checked: this.checked },\n bubbles: true,\n composed: true,\n })\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-switch': LibSwitch;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA+BO,IAAM,YAAN,cAAwB,WAAW;AAAA,EAQxC,cAAc;AACZ,UAAA;AAMF,SAAA,UAAU;AAIV,SAAA,WAAW;AAQX,SAAA,UAA4B;AAO5B,SAAA,OAAsB;AAItB,SAAA,QAAQ;AAIR,SAAA,MAAM;AAhCJ,SAAK,YAAY,iBAAiB,aAAa;AAAA,EACjD;AAAA,EAiCS,SAAyB;AAChC,WAAO,eAAe;AAAA,MACpB,UAAc,KAAK;AAAA,MACnB,SAAc,KAAK;AAAA,MACnB,UAAc,KAAK;AAAA,MACnB,OAAc,KAAK;AAAA,MACnB,KAAc,KAAK;AAAA,MACnB,cAAc,KAAK,cAAc,KAAK,IAAI;AAAA,IAAA,CAC3C;AAAA,EACH;AAAA,EAEQ,cAAc,GAAgB;AACpC,UAAM,QAAQ,EAAE;AAChB,SAAK,UAAU,MAAM;AAErB,SAAK;AAAA,MACH,IAAI,YAAkC,iBAAiB;AAAA,QACrD,QAAU,EAAE,SAAS,KAAK,QAAA;AAAA,QAC1B,SAAU;AAAA,QACV,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AACF;AAnEa,UACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,SAAS,CAAC;AAC5B;AAWA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAd/B,UAeX,WAAA,WAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAlB/B,UAmBX,WAAA,YAAA,CAAA;AAQA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GA1B9B,UA2BX,WAAA,WAAA,CAAA;AAOA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAjC9B,UAkCX,WAAA,QAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GArCf,UAsCX,WAAA,SAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAzCf,UA0CX,WAAA,OAAA,CAAA;AA1CW,YAAN,gBAAA;AAAA,EADN,cAAc,YAAY;AAAA,GACd,SAAA;"}
1
+ {"version":3,"file":"index18.js","sources":["../src/components/atoms/code-block/lib-code-block.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport type { LibCodeBlockLanguage } from './lib-code-block.html';\nimport { codeBlockTemplate } from './lib-code-block.html';\nimport codeBlockCss from './lib-code-block.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\nexport type LibCodeBlockVariant = 'default' | 'ghost';\n\n/**\n * @element lib-code-block\n *\n * Bloque de código con sintaxis destacada, etiqueta de lenguaje y botón de copia.\n *\n * @slot - Código a mostrar. Si se usa este slot, tiene prioridad sobre el atributo `code`.\n *\n * @example\n * <lib-code-block language=\"bash\" code=\"npm install @shibui-ui/ui lit\"></lib-code-block>\n *\n * @example\n * <lib-code-block language=\"ts\" filename=\"main.ts\">\n * import '@shibui-ui/ui';\n * </lib-code-block>\n */\n@customElement('lib-code-block')\nexport class LibCodeBlock extends LitElement {\n static override styles = [\n css`\n ${unsafeCSS(sharedTokens)}\n `,\n css`\n ${unsafeCSS(codeBlockCss)}\n `,\n ];\n\n /** Código a mostrar como texto plano */\n @property({ type: String })\n code = '';\n\n /** Etiqueta de lenguaje mostrada en el header (decorativa) */\n @property({ type: String, reflect: true })\n language: LibCodeBlockLanguage = 'bash';\n\n /** Nombre de fichero opcional mostrado en el header */\n @property({ type: String })\n filename = '';\n\n /** Muestra u oculta el botón de copiar */\n @property({ type: Boolean, reflect: true })\n copyable = true;\n\n /** Variante visual: default (oscuro) | ghost (claro) */\n @property({ type: String, reflect: true })\n variant: LibCodeBlockVariant = 'default';\n\n /** Estado interno: feedback tras copiar */\n @state()\n private _copied = false;\n\n private _copyTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private _handleCopy(): void {\n const content = this.code || this._getSlotText();\n if (!content) return;\n\n navigator.clipboard.writeText(content).then(() => {\n this._copied = true;\n if (this._copyTimeout) clearTimeout(this._copyTimeout);\n this._copyTimeout = setTimeout(() => {\n this._copied = false;\n }, 2000);\n }).catch(() => {\n // Fallback para entornos sin clipboard API\n const ta = document.createElement('textarea');\n ta.value = content;\n ta.style.position = 'fixed';\n ta.style.opacity = '0';\n document.body.appendChild(ta);\n ta.select();\n document.execCommand('copy');\n document.body.removeChild(ta);\n this._copied = true;\n if (this._copyTimeout) clearTimeout(this._copyTimeout);\n this._copyTimeout = setTimeout(() => {\n this._copied = false;\n }, 2000);\n });\n }\n\n private _getSlotText(): string {\n const slot = this.shadowRoot?.querySelector('slot');\n if (!slot) return '';\n return slot.assignedNodes({ flatten: true })\n .map(node => node.textContent ?? '')\n .join('');\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n if (this._copyTimeout) clearTimeout(this._copyTimeout);\n }\n\n override render(): TemplateResult {\n return codeBlockTemplate({\n code: this.code,\n language: this.language,\n filename: this.filename,\n copyable: this.copyable,\n copied: this._copied,\n onCopy: () => this._handleCopy(),\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-code-block': LibCodeBlock;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AAyBO,IAAM,eAAN,cAA2B,WAAW;AAAA,EAAtC,cAAA;AAAA,UAAA,GAAA,SAAA;AAYL,SAAA,OAAO;AAIP,SAAA,WAAiC;AAIjC,SAAA,WAAW;AAIX,SAAA,WAAW;AAIX,SAAA,UAA+B;AAI/B,SAAQ,UAAU;AAElB,SAAQ,eAAqD;AAAA,EAAA;AAAA,EAErD,cAAoB;AAC1B,UAAM,UAAU,KAAK,QAAQ,KAAK,aAAA;AAClC,QAAI,CAAC,QAAS;AAEd,cAAU,UAAU,UAAU,OAAO,EAAE,KAAK,MAAM;AAChD,WAAK,UAAU;AACf,UAAI,KAAK,aAAc,cAAa,KAAK,YAAY;AACrD,WAAK,eAAe,WAAW,MAAM;AACnC,aAAK,UAAU;AAAA,MACjB,GAAG,GAAI;AAAA,IACT,CAAC,EAAE,MAAM,MAAM;AAEb,YAAM,KAAK,SAAS,cAAc,UAAU;AAC5C,SAAG,QAAQ;AACX,SAAG,MAAM,WAAW;AACpB,SAAG,MAAM,UAAU;AACnB,eAAS,KAAK,YAAY,EAAE;AAC5B,SAAG,OAAA;AACH,eAAS,YAAY,MAAM;AAC3B,eAAS,KAAK,YAAY,EAAE;AAC5B,WAAK,UAAU;AACf,UAAI,KAAK,aAAc,cAAa,KAAK,YAAY;AACrD,WAAK,eAAe,WAAW,MAAM;AACnC,aAAK,UAAU;AAAA,MACjB,GAAG,GAAI;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEQ,eAAuB;;AAC7B,UAAM,QAAO,UAAK,eAAL,mBAAiB,cAAc;AAC5C,QAAI,CAAC,KAAM,QAAO;AAClB,WAAO,KAAK,cAAc,EAAE,SAAS,MAAM,EACxC,IAAI,CAAA,SAAQ,KAAK,eAAe,EAAE,EAClC,KAAK,EAAE;AAAA,EACZ;AAAA,EAES,uBAA6B;AACpC,UAAM,qBAAA;AACN,QAAI,KAAK,aAAc,cAAa,KAAK,YAAY;AAAA,EACvD;AAAA,EAES,SAAyB;AAChC,WAAO,kBAAkB;AAAA,MACvB,MAAM,KAAK;AAAA,MACX,UAAU,KAAK;AAAA,MACf,UAAU,KAAK;AAAA,MACf,UAAU,KAAK;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,QAAQ,MAAM,KAAK,YAAA;AAAA,IAAY,CAChC;AAAA,EACH;AACF;AAvFa,aACK,SAAS;AAAA,EACvB;AAAA,QACI,UAAU,YAAY,CAAC;AAAA;AAAA,EAE3B;AAAA,QACI,UAAU,YAAY,CAAC;AAAA;AAE7B;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAXf,aAYX,WAAA,QAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAf9B,aAgBX,WAAA,YAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAnBf,aAoBX,WAAA,YAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAvB/B,aAwBX,WAAA,YAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GA3B9B,aA4BX,WAAA,WAAA,CAAA;AAIQ,gBAAA;AAAA,EADP,MAAA;AAAM,GA/BI,aAgCH,WAAA,WAAA,CAAA;AAhCG,eAAN,gBAAA;AAAA,EADN,cAAc,gBAAgB;AAAA,GAClB,YAAA;"}
package/dist/index19.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 { selectOptionTemplate } from "./index226.js";
4
- import optionCss from "./index227.js";
5
3
  import sharedTokens from "./index196.js";
4
+ import colorScaleStyles from "./index296.js";
5
+ import { colorScaleTemplate } from "./index297.js";
6
6
  var __defProp = Object.defineProperty;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
8
  var __decorateClass = (decorators, target, key, kind) => {
@@ -13,54 +13,34 @@ var __decorateClass = (decorators, target, key, kind) => {
13
13
  if (kind && result) __defProp(target, key, result);
14
14
  return result;
15
15
  };
16
- let LibSelectOption = class extends LitElement {
16
+ let LibColorScale = class extends LitElement {
17
17
  constructor() {
18
18
  super(...arguments);
19
- this.value = "";
20
- this.selected = false;
21
- this.disabled = false;
19
+ this.name = "scale";
20
+ this.steps = [];
21
+ this.showLabels = true;
22
22
  }
23
23
  render() {
24
- return selectOptionTemplate({
25
- value: this.value,
26
- selected: this.selected,
27
- disabled: this.disabled,
28
- handleClick: this._handleClick.bind(this)
29
- });
30
- }
31
- _handleClick(e) {
32
- var _a;
33
- e.stopPropagation();
34
- if (this.disabled) return;
35
- this.dispatchEvent(
36
- new CustomEvent("option-selected", {
37
- detail: {
38
- value: this.value,
39
- label: ((_a = this.textContent) == null ? void 0 : _a.trim()) ?? ""
40
- },
41
- bubbles: true,
42
- composed: true
43
- })
44
- );
24
+ return colorScaleTemplate(this);
45
25
  }
46
26
  };
47
- LibSelectOption.styles = [
27
+ LibColorScale.styles = [
48
28
  css`${unsafeCSS(sharedTokens)}`,
49
- css`${unsafeCSS(optionCss)}`
29
+ css`${unsafeCSS(colorScaleStyles)}`
50
30
  ];
51
31
  __decorateClass([
52
- property({ type: String, reflect: true })
53
- ], LibSelectOption.prototype, "value", 2);
32
+ property({ type: String })
33
+ ], LibColorScale.prototype, "name", 2);
54
34
  __decorateClass([
55
- property({ type: Boolean, reflect: true })
56
- ], LibSelectOption.prototype, "selected", 2);
35
+ property({ type: Array })
36
+ ], LibColorScale.prototype, "steps", 2);
57
37
  __decorateClass([
58
- property({ type: Boolean, reflect: true })
59
- ], LibSelectOption.prototype, "disabled", 2);
60
- LibSelectOption = __decorateClass([
61
- customElement("lib-select-option")
62
- ], LibSelectOption);
38
+ property({ type: Boolean, attribute: "show-labels" })
39
+ ], LibColorScale.prototype, "showLabels", 2);
40
+ LibColorScale = __decorateClass([
41
+ customElement("lib-color-scale")
42
+ ], LibColorScale);
63
43
  export {
64
- LibSelectOption
44
+ LibColorScale
65
45
  };
66
46
  //# sourceMappingURL=index19.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index19.js","sources":["../src/components/atoms/select-option/lib-select-option.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { selectOptionTemplate } from './lib-select-option.html';\nimport optionCss from './lib-select-option.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\n/**\n * @element lib-select-option\n *\n * Opción individual para usar dentro de lib-select.\n * Emite `option-selected` con { value, label } al hacer clic,\n * que lib-select captura desde el light DOM.\n *\n * @fires option-selected { value: string, label: string }\n * @slotTexto visible de la opción\n */\n@customElement('lib-select-option')\nexport class LibSelectOption extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(optionCss)}`,\n ];\n\n /** Valor interno que se comunica al select padre. */\n @property({ type: String, reflect: true }) value = '';\n\n /** Estado de selección — controlado por lib-select. */\n @property({ type: Boolean, reflect: true }) selected = false;\n\n /** Deshabilita la opción. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n override render(): TemplateResult {\n return selectOptionTemplate({\n value: this.value,\n selected: this.selected,\n disabled: this.disabled,\n handleClick: this._handleClick.bind(this),\n });\n }\n\n private _handleClick(e: Event): void {\n e.stopPropagation();\n if (this.disabled) return;\n\n this.dispatchEvent(\n new CustomEvent<{ value: string; label: string }>('option-selected', {\n detail: {\n value: this.value,\n label: this.textContent?.trim() ?? '',\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-select-option': LibSelectOption;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AAiBO,IAAM,kBAAN,cAA8B,WAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AAOsC,SAAA,QAAQ;AAGP,SAAA,WAAW;AAGX,SAAA,WAAW;AAAA,EAAA;AAAA,EAE9C,SAAyB;AAChC,WAAO,qBAAqB;AAAA,MAC1B,OAAa,KAAK;AAAA,MAClB,UAAa,KAAK;AAAA,MAClB,UAAa,KAAK;AAAA,MAClB,aAAa,KAAK,aAAa,KAAK,IAAI;AAAA,IAAA,CACzC;AAAA,EACH;AAAA,EAEQ,aAAa,GAAgB;;AACnC,MAAE,gBAAA;AACF,QAAI,KAAK,SAAU;AAEnB,SAAK;AAAA,MACH,IAAI,YAA8C,mBAAmB;AAAA,QACnE,QAAQ;AAAA,UACN,OAAO,KAAK;AAAA,UACZ,SAAO,UAAK,gBAAL,mBAAkB,WAAU;AAAA,QAAA;AAAA,QAErC,SAAU;AAAA,QACV,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AACF;AAvCa,gBACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,SAAS,CAAC;AAC5B;AAG2C,gBAAA;AAAA,EAA1C,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAP9B,gBAOgC,WAAA,SAAA,CAAA;AAGC,gBAAA;AAAA,EAA3C,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAV/B,gBAUiC,WAAA,YAAA,CAAA;AAGA,gBAAA;AAAA,EAA3C,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAb/B,gBAaiC,WAAA,YAAA,CAAA;AAbjC,kBAAN,gBAAA;AAAA,EADN,cAAc,mBAAmB;AAAA,GACrB,eAAA;"}
1
+ {"version":3,"file":"index19.js","sources":["../src/components/atoms/color-scale/lib-color-scale.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 colorScaleStyles from './lib-color-scale.css?inline';\nimport { colorScaleTemplate } from './lib-color-scale.html';\nimport type { ColorStep } from './lib-color-scale.types';\n\n/**\n * lib-color-scale — Shibui UI\n *\n * Escala de color horizontal con 11 pasos (50 → 950).\n * Cada swatch expande en hover y revela el número del paso.\n * Los extremos muestran el nombre y el valor hex.\n *\n * @prop {string} name Nombre de la paleta (ej: \"washi\", \"kaki\").\n * @prop {ColorStep[]} steps — Array de pasos de la escala. Orden de izquierda a derecha.\n * @prop {boolean} show-labels Muestra las etiquetas de los extremos (activo por defecto).\n *\n * @csspart track — El contenedor de los swatches.\n * @cssprop --lib-color-scale-height — Altura de la pista (default: 56px).\n */\n@customElement('lib-color-scale')\nexport class LibColorScale extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(colorScaleStyles)}`,\n ];\n\n @property({ type: String })\n name = 'scale';\n\n @property({ type: Array })\n steps: ColorStep[] = [];\n\n @property({ type: Boolean, attribute: 'show-labels' })\n showLabels = true;\n\n protected override render(): TemplateResult {\n return colorScaleTemplate(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-color-scale': LibColorScale;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AAsBO,IAAM,gBAAN,cAA4B,WAAW;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AAOL,SAAA,OAAO;AAGP,SAAA,QAAqB,CAAA;AAGrB,SAAA,aAAa;AAAA,EAAA;AAAA,EAEM,SAAyB;AAC1C,WAAO,mBAAmB,IAAI;AAAA,EAChC;AACF;AAlBa,cACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,gBAAgB,CAAC;AACnC;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GANf,cAOX,WAAA,QAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,MAAA,CAAO;AAAA,GATd,cAUX,WAAA,SAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,WAAW,eAAe;AAAA,GAZ1C,cAaX,WAAA,cAAA,CAAA;AAbW,gBAAN,gBAAA;AAAA,EADN,cAAc,iBAAiB;AAAA,GACnB,aAAA;"}
package/dist/index194.js CHANGED
@@ -1,33 +1,103 @@
1
- import { nothing, html } from "lit";
2
- function copyButtonTemplate(props) {
3
- const btn = html`
4
- <button
5
- type="button"
6
- class="copy-btn"
7
- aria-label="${props.iconOnly ? "Copiar al portapapeles" : nothing}"
8
- ?disabled="${props.disabled}"
9
- @click="${props.onClick}"
10
- >
11
- <span class="copy-btn__idle">
12
- <lib-icon name="copy" size="${props.size === "lg" ? "sm" : "xs"}"></lib-icon>
13
- ${!props.iconOnly && props.label ? html`<span class="copy-btn__text">${props.label}</span>` : nothing}
1
+ import { html, nothing } from "lit";
2
+ import { classMap as e } from "./index357.js";
3
+ function renderSep(separator) {
4
+ if (separator === "chevron") {
5
+ return html`
6
+ <span class="bc-sep" aria-hidden="true">
7
+ <lib-icon name="caret-right" size="xs"></lib-icon>
14
8
  </span>
15
-
16
- <span class="copy-btn__copied">
17
- <lib-icon name="check" size="${props.size === "lg" ? "sm" : "xs"}"></lib-icon>
18
- ${!props.iconOnly && props.successLabel ? html`<span class="copy-btn__text">${props.successLabel}</span>` : nothing}
9
+ `;
10
+ }
11
+ return html`<span class="bc-sep" aria-hidden="true"></span>`;
12
+ }
13
+ function renderIcon(icon) {
14
+ if (!icon) return nothing;
15
+ return html`<span class="bc-icon"><lib-icon name="${icon}" size="xs"></lib-icon></span>`;
16
+ }
17
+ function renderLink(item, index, separator, onNavigate) {
18
+ return html`
19
+ <li class="bc-item">
20
+ <a
21
+ class="bc-link"
22
+ href="${item.href ?? "#"}"
23
+ @click="${(e2) => {
24
+ e2.preventDefault();
25
+ onNavigate(item, index);
26
+ }}"
27
+ >
28
+ ${renderIcon(item.icon)}
29
+ ${item.label ? html`${item.label}` : nothing}
30
+ </a>
31
+ ${renderSep(separator)}
32
+ </li>
33
+ `;
34
+ }
35
+ function renderCurrent(item) {
36
+ return html`
37
+ <li class="bc-item">
38
+ <span class="bc-current" aria-current="page">
39
+ ${renderIcon(item.icon)}
40
+ ${item.label ? html`${item.label}` : nothing}
19
41
  </span>
20
- </button>
42
+ </li>
21
43
  `;
22
- if (!props.tooltip) return btn;
44
+ }
45
+ function renderEllipsis(separator, onExpand) {
46
+ return html`
47
+ <li class="bc-item">
48
+ <button
49
+ class="bc-ellipsis"
50
+ aria-label="Mostrar ruta completa"
51
+ @click="${onExpand}"
52
+ >…</button>
53
+ ${renderSep(separator)}
54
+ </li>
55
+ `;
56
+ }
57
+ function renderItems(p) {
58
+ const { items, separator, maxVisible, expanded, onExpand, onNavigate } = p;
59
+ const shouldCollapse = maxVisible > 0 && items.length > maxVisible && !expanded;
60
+ if (shouldCollapse) {
61
+ const first = items[0];
62
+ const last = items[items.length - 1];
63
+ if (!first || !last) return [];
64
+ return [
65
+ renderLink(first, 0, separator, onNavigate),
66
+ renderEllipsis(separator, onExpand),
67
+ last.href ? renderLink(last, items.length - 1, separator, onNavigate) : renderCurrent(last)
68
+ ];
69
+ }
70
+ return items.map((item, i) => {
71
+ const isLast = i === items.length - 1;
72
+ if (isLast || !item.href) return renderCurrent(item);
73
+ return renderLink(item, i, separator, onNavigate);
74
+ });
75
+ }
76
+ function breadcrumbTemplate(p) {
77
+ const bcClasses = {
78
+ "bc": true,
79
+ "bc-slash": p.separator === "slash",
80
+ "bc-chevron": p.separator === "chevron",
81
+ "bc-dot": p.separator === "dot",
82
+ "bc-line": p.separator === "line",
83
+ "bc-sm": p.size === "sm",
84
+ "bc-lg": p.size === "lg",
85
+ "bc-filled": p.surface === "filled",
86
+ "bc-pill": p.surface === "pill",
87
+ "bc-kaki": p.accent === "kaki",
88
+ "bc-celadon": p.accent === "celadon",
89
+ "bc-bold": p.accent === "bold",
90
+ "bc-dark": p.dark
91
+ };
23
92
  return html`
24
- <span class="copy-btn__wrap">
25
- ${btn}
26
- <span class="copy-btn__tooltip">Copiado</span>
27
- </span>
93
+ <nav class="${e(bcClasses)}" aria-label="breadcrumb">
94
+ <ol class="bc-list">
95
+ ${renderItems(p)}
96
+ </ol>
97
+ </nav>
28
98
  `;
29
99
  }
30
100
  export {
31
- copyButtonTemplate
101
+ breadcrumbTemplate
32
102
  };
33
103
  //# sourceMappingURL=index194.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index194.js","sources":["../src/components/atoms/copy-button/lib-copy-button.html.ts"],"sourcesContent":["import { html, nothing, TemplateResult } from 'lit';\n\nexport type LibCopyVariant = 'ghost' | 'outlined' | 'filled' | 'subtle' | 'on-dark';\nexport type LibCopySize = 'sm' | 'md' | 'lg';\n\nexport interface CopyButtonTemplateProps {\n value: string;\n variant: LibCopyVariant;\n size: LibCopySize;\n iconOnly: boolean;\n label: string;\n successLabel: string;\n tooltip: boolean;\n copied: boolean;\n disabled: boolean;\n onClick: () => void;\n}\n\n/**\n * Plantilla para lib-copy-button.\n *\n * Dos capas internas con crossfade CSS:\n * .copy-btn__idle → icono copy (+ label opcional) visible en reposo\n * .copy-btn__copied icono check (+ label opcional) visible al copiar\n *\n * El atributo [copied] en :host activa el swap via CSS.\n * El tooltip es opcional y se posiciona en un wrapper.\n */\nexport function copyButtonTemplate(props: CopyButtonTemplateProps): TemplateResult {\n const btn = html`\n <button\n type=\"button\"\n class=\"copy-btn\"\n aria-label=\"${props.iconOnly ? 'Copiar al portapapeles' : nothing}\"\n ?disabled=\"${props.disabled}\"\n @click=\"${props.onClick}\"\n >\n <span class=\"copy-btn__idle\">\n <lib-icon name=\"copy\" size=\"${props.size === 'lg' ? 'sm' : 'xs'}\"></lib-icon>\n ${!props.iconOnly && props.label\n ? html`<span class=\"copy-btn__text\">${props.label}</span>`\n : nothing}\n </span>\n\n <span class=\"copy-btn__copied\">\n <lib-icon name=\"check\" size=\"${props.size === 'lg' ? 'sm' : 'xs'}\"></lib-icon>\n ${!props.iconOnly && props.successLabel\n ? html`<span class=\"copy-btn__text\">${props.successLabel}</span>`\n : nothing}\n </span>\n </button>\n `;\n\n if (!props.tooltip) return btn;\n\n return html`\n <span class=\"copy-btn__wrap\">\n ${btn}\n <span class=\"copy-btn__tooltip\">Copiado</span>\n </span>\n `;\n}"],"names":[],"mappings":";AA4BO,SAAS,mBAAmB,OAAgD;AACjF,QAAM,MAAM;AAAA;AAAA;AAAA;AAAA,oBAIM,MAAM,WAAW,2BAA2B,OAAO;AAAA,mBACpD,MAAM,QAAQ;AAAA,gBACjB,MAAM,OAAO;AAAA;AAAA;AAAA,sCAGS,MAAM,SAAS,OAAO,OAAO,IAAI;AAAA,UAC7D,CAAC,MAAM,YAAY,MAAM,QACvB,oCAAoC,MAAM,KAAK,YAC/C,OAAO;AAAA;AAAA;AAAA;AAAA,uCAIoB,MAAM,SAAS,OAAO,OAAO,IAAI;AAAA,UAC9D,CAAC,MAAM,YAAY,MAAM,eACvB,oCAAoC,MAAM,YAAY,YACtD,OAAO;AAAA;AAAA;AAAA;AAKjB,MAAI,CAAC,MAAM,QAAS,QAAO;AAE3B,SAAO;AAAA;AAAA,QAED,GAAG;AAAA;AAAA;AAAA;AAIX;"}
1
+ {"version":3,"file":"index194.js","sources":["../src/components/molecules/breadcrumb/lib-breadcrumb.html.ts"],"sourcesContent":["import { html, nothing, TemplateResult } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport type {\n BreadcrumbItem,\n BreadcrumbSeparator,\n BreadcrumbSize,\n BreadcrumbSurface,\n BreadcrumbAccent,\n} from './lib-breadcrumb.types';\n\nexport interface BreadcrumbTemplateProps {\n items: BreadcrumbItem[];\n separator: BreadcrumbSeparator;\n size: BreadcrumbSize;\n surface: BreadcrumbSurface;\n accent: BreadcrumbAccent;\n dark: boolean;\n /** Si > 0 y items.length > maxVisible, colapsa los crumbs intermedios. */\n maxVisible: number;\n /** Estado interno: ¿está expandido el truncado? */\n expanded: boolean;\n onExpand: () => void;\n onNavigate: (item: BreadcrumbItem, index: number) => void;\n}\n\n/* ── Separador ─────────────────────────────────────────── */\nfunction renderSep(separator: BreadcrumbSeparator): TemplateResult {\n if (separator === 'chevron') {\n return html`\n <span class=\"bc-sep\" aria-hidden=\"true\">\n <lib-icon name=\"caret-right\" size=\"xs\"></lib-icon>\n </span>\n `;\n }\n return html`<span class=\"bc-sep\" aria-hidden=\"true\"></span>`;\n}\n\n/* ── Icono opcional dentro de un crumb ─────────────────── */\nfunction renderIcon(icon?: string): TemplateResult | typeof nothing {\n if (!icon) return nothing;\n return html`<span class=\"bc-icon\"><lib-icon name=\"${icon}\" size=\"xs\"></lib-icon></span>`;\n}\n\n/* ── Crumb enlazable (ancestro) ─────────────────────────── */\nfunction renderLink(\n item: BreadcrumbItem,\n index: number,\n separator: BreadcrumbSeparator,\n onNavigate: BreadcrumbTemplateProps['onNavigate'],\n): TemplateResult {\n return html`\n <li class=\"bc-item\">\n <a\n class=\"bc-link\"\n href=\"${item.href ?? '#'}\"\n @click=\"${(e: Event):void => { e.preventDefault(); onNavigate(item, index); }}\"\n >\n ${renderIcon(item.icon)}\n ${item.label ? html`${item.label}` : nothing}\n </a>\n ${renderSep(separator)}\n </li>\n `;\n}\n\n/* ── Crumb activo (último) ──────────────────────────────── */\nfunction renderCurrent(item: BreadcrumbItem): TemplateResult {\n return html`\n <li class=\"bc-item\">\n <span class=\"bc-current\" aria-current=\"page\">\n ${renderIcon(item.icon)}\n ${item.label ? html`${item.label}` : nothing}\n </span>\n </li>\n `;\n}\n\n/* ── Botón de ellipsis (truncado) ──────────────────────── */\nfunction renderEllipsis(\n separator: BreadcrumbSeparator,\n onExpand: () => void,\n): TemplateResult {\n return html`\n <li class=\"bc-item\">\n <button\n class=\"bc-ellipsis\"\n aria-label=\"Mostrar ruta completa\"\n @click=\"${onExpand}\"\n >…</button>\n ${renderSep(separator)}\n </li>\n `;\n}\n\n/* ── Lista de ítems con lógica de collapse ─────────────── */\nfunction renderItems(p: BreadcrumbTemplateProps): TemplateResult[] {\n const { items, separator, maxVisible, expanded, onExpand, onNavigate } = p;\n\n const shouldCollapse =\n maxVisible > 0 &&\n items.length > maxVisible &&\n !expanded;\n\n if (shouldCollapse) {\n const first = items[0];\n const last = items[items.length - 1];\n\n if (!first || !last) return [];\n\n return [\n renderLink(first, 0, separator, onNavigate),\n renderEllipsis(separator, onExpand),\n last.href\n ? renderLink(last, items.length - 1, separator, onNavigate)\n : renderCurrent(last),\n ];\n }\n\n return items.map((item, i) => {\n const isLast = i === items.length - 1;\n if (isLast || !item.href) return renderCurrent(item);\n return renderLink(item, i, separator, onNavigate);\n });\n}\n\n/* ── Template principal ─────────────────────────────────── */\nexport function breadcrumbTemplate(p: BreadcrumbTemplateProps): TemplateResult {\n const bcClasses = {\n 'bc': true,\n 'bc-slash': p.separator === 'slash',\n 'bc-chevron': p.separator === 'chevron',\n 'bc-dot': p.separator === 'dot',\n 'bc-line': p.separator === 'line',\n 'bc-sm': p.size === 'sm',\n 'bc-lg': p.size === 'lg',\n 'bc-filled': p.surface === 'filled',\n 'bc-pill': p.surface === 'pill',\n 'bc-kaki': p.accent === 'kaki',\n 'bc-celadon': p.accent === 'celadon',\n 'bc-bold': p.accent === 'bold',\n 'bc-dark': p.dark,\n };\n\n return html`\n <nav class=\"${classMap(bcClasses)}\" aria-label=\"breadcrumb\">\n <ol class=\"bc-list\">\n ${renderItems(p)}\n </ol>\n </nav>\n `;\n}"],"names":["e","classMap"],"mappings":";;AA0BA,SAAS,UAAU,WAAgD;AACjE,MAAI,cAAc,WAAW;AAC3B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKT;AACA,SAAO;AACT;AAGA,SAAS,WAAW,MAAgD;AAClE,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,6CAA6C,IAAI;AAC1D;AAGA,SAAS,WACP,MACA,OACA,WACA,YACgB;AAChB,SAAO;AAAA;AAAA;AAAA;AAAA,gBAIO,KAAK,QAAQ,GAAG;AAAA,kBACd,CAACA,OAAkB;AAAE,IAAAA,GAAE,eAAA;AAAkB,eAAW,MAAM,KAAK;AAAA,EAAG,CAAC;AAAA;AAAA,UAE3E,WAAW,KAAK,IAAI,CAAC;AAAA,UACrB,KAAK,QAAQ,OAAO,KAAK,KAAK,KAAK,OAAO;AAAA;AAAA,QAE5C,UAAU,SAAS,CAAC;AAAA;AAAA;AAG5B;AAGA,SAAS,cAAc,MAAsC;AAC3D,SAAO;AAAA;AAAA;AAAA,UAGC,WAAW,KAAK,IAAI,CAAC;AAAA,UACrB,KAAK,QAAQ,OAAO,KAAK,KAAK,KAAK,OAAO;AAAA;AAAA;AAAA;AAIpD;AAGA,SAAS,eACP,WACA,UACgB;AAChB,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKS,QAAQ;AAAA;AAAA,QAElB,UAAU,SAAS,CAAC;AAAA;AAAA;AAG5B;AAGA,SAAS,YAAY,GAA8C;AACjE,QAAM,EAAE,OAAO,WAAW,YAAY,UAAU,UAAU,eAAe;AAEzE,QAAM,iBACJ,aAAa,KACb,MAAM,SAAS,cACf,CAAC;AAEH,MAAI,gBAAgB;AAClB,UAAM,QAAQ,MAAM,CAAC;AACrB,UAAM,OAAQ,MAAM,MAAM,SAAS,CAAC;AAEpC,QAAI,CAAC,SAAS,CAAC,aAAa,CAAA;AAE5B,WAAO;AAAA,MACL,WAAW,OAAO,GAAG,WAAW,UAAU;AAAA,MAC1C,eAAe,WAAW,QAAQ;AAAA,MAClC,KAAK,OACD,WAAW,MAAM,MAAM,SAAS,GAAG,WAAW,UAAU,IACxD,cAAc,IAAI;AAAA,IAAA;AAAA,EAE1B;AAEA,SAAO,MAAM,IAAI,CAAC,MAAM,MAAM;AAC5B,UAAM,SAAS,MAAM,MAAM,SAAS;AACpC,QAAI,UAAU,CAAC,KAAK,KAAM,QAAO,cAAc,IAAI;AACnD,WAAO,WAAW,MAAM,GAAG,WAAW,UAAU;AAAA,EAClD,CAAC;AACH;AAGO,SAAS,mBAAmB,GAA4C;AAC7E,QAAM,YAAY;AAAA,IAChB,MAAiB;AAAA,IACjB,YAAiB,EAAE,cAAc;AAAA,IACjC,cAAiB,EAAE,cAAc;AAAA,IACjC,UAAiB,EAAE,cAAc;AAAA,IACjC,WAAiB,EAAE,cAAc;AAAA,IACjC,SAAiB,EAAE,SAAS;AAAA,IAC5B,SAAiB,EAAE,SAAS;AAAA,IAC5B,aAAiB,EAAE,YAAY;AAAA,IAC/B,WAAiB,EAAE,YAAY;AAAA,IAC/B,WAAiB,EAAE,WAAW;AAAA,IAC9B,cAAiB,EAAE,WAAW;AAAA,IAC9B,WAAiB,EAAE,WAAW;AAAA,IAC9B,WAAiB,EAAE;AAAA,EAAA;AAGrB,SAAO;AAAA,kBACSC,EAAS,SAAS,CAAC;AAAA;AAAA,UAE3B,YAAY,CAAC,CAAC;AAAA;AAAA;AAAA;AAIxB;"}
package/dist/index195.js CHANGED
@@ -1,5 +1,5 @@
1
- const copyButtonCss = '@layer tokens,reset,components;@layer reset{:host{display:inline-flex;flex-shrink:0;vertical-align:middle}*,*:before,*:after{box-sizing:border-box}}@layer components{.copy-btn__wrap{position:relative;display:inline-flex}.copy-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:var(--lib-space-xs);position:relative;font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wider);text-transform:uppercase;white-space:nowrap;overflow:hidden;outline:none;transition:background var(--duration-base) var(--ease-default),border-color var(--duration-base) var(--ease-default),color var(--duration-base) var(--ease-default),transform var(--duration-fast) var(--ease-default)}.copy-btn:disabled{opacity:.4;pointer-events:none;cursor:not-allowed}.copy-btn:active:not(:disabled){transform:scale(.94)}.copy-btn:focus-visible{box-shadow:0 0 0 3px var(--color-ink-20)}:host([size="sm"]) .copy-btn{height:28px;padding:0 var(--lib-space-sm);font-size:10px}:host([size="md"]) .copy-btn{height:34px;padding:0 var(--lib-space-md);font-size:var(--text-xs)}:host([size="lg"]) .copy-btn{height:40px;padding:0 var(--lib-space-lg);font-size:var(--text-sm)}:host([icon-only][size="sm"]) .copy-btn{height:28px;width:28px;padding:0}:host([icon-only][size="md"]) .copy-btn{height:34px;width:34px;padding:0}:host([icon-only][size="lg"]) .copy-btn{height:40px;width:40px;padding:0}.copy-btn__idle,.copy-btn__copied{display:inline-flex;align-items:center;gap:var(--lib-space-xs);transition:opacity var(--duration-base) var(--ease-out),transform var(--duration-slow) var(--ease-bounce)}.copy-btn__idle{opacity:1;transform:translateY(0) scale(1)}.copy-btn__copied{opacity:0;transform:translateY(6px) scale(.8);position:absolute}:host([copied]) .copy-btn__idle{opacity:0;transform:translateY(-6px) scale(.8)}:host([copied]) .copy-btn__copied{opacity:1;transform:translateY(0) scale(1);position:relative}:host([copied]) .copy-btn{color:var(--color-celadon-600)!important;border-color:var(--color-celadon-500)!important}:host([variant="ghost"]) .copy-btn{background:transparent;color:var(--text-muted);border-radius:var(--radius-sm)}:host([variant="ghost"]) .copy-btn:hover{background:var(--color-washi-200);color:var(--text-primary)}:host([variant="outlined"]) .copy-btn{background:transparent;color:var(--text-secondary);border:1px solid var(--border-default);border-radius:var(--radius-sm)}:host([variant="outlined"]) .copy-btn:hover{background:var(--bg-surface);border-color:var(--border-strong);color:var(--text-primary)}:host([variant="filled"]) .copy-btn{background:var(--color-washi-900);color:var(--color-washi-50);border:1px solid transparent;border-radius:var(--radius-sm)}:host([variant="filled"]) .copy-btn:hover{background:var(--color-washi-800)}:host([variant="filled"][copied]) .copy-btn{background:var(--color-celadon-500)!important;border-color:transparent!important;color:#fff!important}:host([variant="subtle"]) .copy-btn{background:var(--color-washi-100);color:var(--text-secondary);border:1px solid transparent;border-radius:var(--radius-sm)}:host([variant="subtle"]) .copy-btn:hover{background:var(--color-washi-200);color:var(--text-primary)}:host([variant="subtle"][copied]) .copy-btn{background:var(--color-celadon-100)!important}:host([variant="on-dark"]) .copy-btn{background:#ffffff12;color:#ffffff73;border:1px solid oklch(100% 0 0deg / .1);border-radius:var(--radius-sm)}:host([variant="on-dark"]) .copy-btn:hover{background:#ffffff1f;color:#ffffffd9;border-color:#fff3}:host([variant="on-dark"][copied]) .copy-btn{color:#6daf92!important;border-color:#6daf92!important;background:#ffffff12!important}:host([variant="on-dark"]) .copy-btn:focus-visible{box-shadow:0 0 0 3px #fff3}.copy-btn__tooltip{position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%) translateY(4px);background:var(--color-washi-900);color:var(--color-washi-50);font-family:var(--lib-font-mono);font-size:10px;letter-spacing:var(--tracking-wider);white-space:nowrap;padding:3px var(--lib-space-sm);pointer-events:none;opacity:0;z-index:var(--z-tooltip);transition:opacity var(--duration-base) var(--ease-out),transform var(--duration-base) var(--ease-bounce)}:host([copied]) .copy-btn__tooltip{opacity:1;transform:translate(-50%) translateY(0)}@media(prefers-reduced-motion:reduce){.copy-btn,.copy-btn__idle,.copy-btn__copied,.copy-btn__tooltip{transition:none}}}';
1
+ const componentCss = '@layer tokens,reset,components;@layer reset{:host{display:block}*,*:before,*:after{box-sizing:border-box}}@layer components{.bc{display:flex;align-items:center}.bc-list{display:flex;align-items:center;flex-wrap:wrap;list-style:none;gap:0;padding:0;margin:0}.bc-item{display:flex;align-items:center;gap:0;position:relative}.bc-link{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);color:var(--text-muted);text-decoration:none;padding:var(--lib-space-xs) var(--lib-space-xs);transition:color var(--duration-fast);white-space:nowrap;display:flex;align-items:center;gap:var(--lib-space-xs)}.bc-link:hover{color:var(--text-primary)}.bc-current{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);color:var(--text-secondary);white-space:nowrap;padding:var(--lib-space-xs) var(--lib-space-xs);display:flex;align-items:center;gap:var(--lib-space-xs)}.bc-sep{display:flex;align-items:center;padding:0 var(--lib-space-sm);color:var(--color-washi-300);-webkit-user-select:none;user-select:none;flex-shrink:0}.bc-slash .bc-sep:before{content:"/";font-family:var(--lib-font-mono);font-size:10px;line-height:1}.bc-dot .bc-sep:before{content:"·";font-family:var(--lib-font-mono);font-size:13px;line-height:1}.bc-line .bc-sep:before{content:"—";font-family:var(--lib-font-mono);font-size:10px;line-height:1}.bc-chevron .bc-sep{padding:0 var(--lib-space-xs);font-size:12px}.bc-chevron .bc-sep:before{content:none}.bc-icon{font-size:13px;display:flex;align-items:center;opacity:.7}.bc-sm .bc-link,.bc-sm .bc-current{font-size:10px;letter-spacing:var(--tracking-wide)}.bc-sm .bc-sep{padding:0 var(--lib-space-xs)}.bc-sm .bc-icon{font-size:11px}.bc-lg .bc-link,.bc-lg .bc-current{font-family:var(--lib-font-body);font-size:var(--text-sm);letter-spacing:0}.bc-lg .bc-icon{font-size:15px}.bc-filled{background:var(--bg-surface);border:1px solid var(--border-subtle);padding:var(--lib-space-sm) var(--lib-space-md)}.bc-pill .bc-link{background:var(--bg-surface);border:1px solid var(--border-subtle);padding:var(--lib-space-xs) var(--lib-space-sm);transition:background var(--duration-fast),border-color var(--duration-fast),color var(--duration-fast)}.bc-pill .bc-link:hover{background:var(--color-washi-200);border-color:var(--border-default);color:var(--text-primary)}.bc-pill .bc-current{background:var(--color-washi-900);color:var(--color-washi-50);border:1px solid var(--color-washi-900);padding:var(--lib-space-xs) var(--lib-space-sm)}.bc-pill .bc-sep{padding:0 var(--lib-space-sm)}.bc-kaki .bc-current,.bc-kaki .bc-link:hover{color:var(--color-kaki-500)}.bc-celadon .bc-current,.bc-celadon .bc-link:hover{color:var(--color-celadon-500)}.bc-bold .bc-current{color:var(--text-primary);font-weight:600}.bc-ellipsis{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);color:var(--text-muted);background:var(--bg-surface);border:1px solid var(--border-subtle);padding:1px var(--lib-space-sm);cursor:pointer;transition:background var(--duration-fast),color var(--duration-fast),border-color var(--duration-fast);line-height:1.6;display:inline-flex;align-items:center}.bc-ellipsis:hover{background:var(--color-washi-200);border-color:var(--border-default);color:var(--text-primary)}.bc-dropdown-wrap{position:relative}.bc-dropdown-panel{position:absolute;top:calc(100% + 4px);left:0;z-index:var(--z-dropdown, 300);background:var(--bg-elevated);border:1px solid var(--border-default);box-shadow:var(--shadow-md);min-width:180px;opacity:0;transform:translateY(-4px) scaleY(.97);transform-origin:top left;pointer-events:none;transition:opacity .16s var(--ease-out),transform .18s var(--ease-out)}.bc-dropdown-panel.is-open{opacity:1;transform:translateY(0) scaleY(1);pointer-events:auto}.bc-dropdown-item{display:flex;align-items:center;gap:var(--lib-space-sm);padding:var(--lib-space-sm) var(--lib-space-md);font-family:var(--lib-font-mono);font-size:10px;letter-spacing:var(--tracking-wide);color:var(--text-secondary);text-decoration:none;cursor:pointer;transition:background var(--duration-fast),color var(--duration-fast)}.bc-dropdown-item:hover{background:var(--bg-surface);color:var(--text-primary)}.bc-dropdown-item-icon{font-size:14px;color:var(--text-muted);display:flex;flex-shrink:0}.bc-dark .bc-link{color:#3c302a}.bc-dark .bc-link:hover{color:#998c84}.bc-dark .bc-current{color:#7b6f67}.bc-dark .bc-sep{color:#231813}.bc-dark.bc-filled{background:#100704;border-color:#1e130e}.bc-dark .bc-ellipsis{background:#100704;border-color:#1e130e;color:#433831}.bc-dark .bc-ellipsis:hover{background:#190f0a;color:#998c84}.bc-dark.bc-pill .bc-link{background:#100704;border-color:#1e130e}.bc-dark.bc-pill .bc-link:hover{background:#1e130e}.bc-dark.bc-pill .bc-current{background:#8a7d75;color:var(--color-washi-950);border-color:#8a7d75}.bc-dark .bc-dropdown-panel{background:#150a06;border-color:#231813}.bc-dark .bc-dropdown-item{color:#574a43}.bc-dark .bc-dropdown-item:hover{background:#1e130e;color:#998c84}}';
2
2
  export {
3
- copyButtonCss as default
3
+ componentCss as default
4
4
  };
5
5
  //# sourceMappingURL=index195.js.map
package/dist/index197.js CHANGED
@@ -1,27 +1,5 @@
1
- import { nothing, html } from "lit";
2
- const LABEL_TEXT = {
3
- online: "Online",
4
- away: "Away",
5
- busy: "Busy",
6
- offline: "Offline"
7
- };
8
- function statusDotTemplate(props) {
9
- return html`
10
- <span class="sd-root">
11
- <span
12
- class="sd-wrap"
13
- role="img"
14
- aria-label=${LABEL_TEXT[props.status]}
15
- >
16
- <span class="sd ${props.bordered ? "sd--bordered" : ""}"></span>
17
- </span>
18
- ${props.label ? html`
19
- <span class="sd-label">${LABEL_TEXT[props.status]}</span>
20
- ` : nothing}
21
- </span>
22
- `;
23
- }
1
+ const groupCss = '@layer tokens,reset,components;@layer reset{:host{display:inline-flex;align-items:stretch;vertical-align:middle;position:relative}*,*:before,*:after{box-sizing:border-box}}@layer components{.bg-wrap{display:inline-flex;align-items:stretch;position:relative}:host([block]){display:flex;width:100%}:host([block]) .bg-wrap{display:flex;width:100%}:host([block]) ::slotted(lib-button){flex:1}:host([orientation="vertical"]) .bg-wrap{flex-direction:column;align-items:stretch}:host([orientation="vertical"][block]) .bg-wrap{width:100%}}:host(lib-button-sep){display:inline-flex;flex-shrink:0;align-self:stretch;width:1px;background:var(--border-default);position:relative;z-index:1}:host(lib-button-sep[dark]){background:#ffffff1a}@layer reset{:host(lib-button-split){display:inline-flex;align-items:stretch;position:relative;vertical-align:middle}}@layer components{.split-wrap{display:inline-flex;align-items:stretch;position:relative}.split-menu{position:absolute;top:calc(100% + 5px);left:0;min-width:190px;background:var(--bg-elevated);border:1px solid var(--border-subtle);box-shadow:0 8px 24px #1a140e1a;z-index:50;display:none;opacity:0;transform:translateY(-4px);transition:opacity var(--duration-base) var(--ease-out),transform var(--duration-base) var(--ease-out)}.split-menu.is-open{opacity:1;transform:none}.split-menu-item,.split-menu ::slotted(button){display:flex;width:100%;align-items:center;gap:var(--lib-space-sm);padding:var(--lib-space-sm) var(--lib-space-md);background:none;border:none;border-bottom:1px solid var(--color-washi-100);font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:.1em;text-transform:uppercase;color:var(--text-secondary);cursor:pointer;text-align:left;transition:background var(--duration-fast),color var(--duration-fast)}.split-menu-item:last-child,.split-menu ::slotted(button:last-child){border-bottom:none}.split-menu-item:hover,.split-menu ::slotted(button:hover){background:var(--bg-base);color:var(--text-primary)}.split-menu-item:disabled,.split-menu ::slotted(button:disabled){opacity:.38;cursor:not-allowed}:host([dark]) .split-menu{background:var(--color-washi-800);border-color:#ffffff14;box-shadow:0 8px 24px #0000004d}:host([dark]) .split-menu-item,:host([dark]) .split-menu ::slotted(button){border-bottom-color:#ffffff0d;color:#faf7f473}:host([dark]) .split-menu-item:hover,:host([dark]) .split-menu ::slotted(button:hover){background:#ffffff12;color:#faf7f4d9}}';
24
2
  export {
25
- statusDotTemplate
3
+ groupCss as default
26
4
  };
27
5
  //# sourceMappingURL=index197.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index197.js","sources":["../src/components/atoms/status-dot/lib-status-dot.html.ts"],"sourcesContent":["import { html, nothing, TemplateResult } from 'lit';\n\nexport type LibStatusDotStatus = 'online' | 'away' | 'busy' | 'offline';\nexport type LibStatusDotSize = 'sm' | 'md' | 'lg';\n\nconst LABEL_TEXT: Record<LibStatusDotStatus, string> = {\n online: 'Online',\n away: 'Away',\n busy: 'Busy',\n offline: 'Offline',\n};\n\nexport interface StatusDotTemplateProps {\n status: LibStatusDotStatus;\n size: LibStatusDotSize;\n bordered: boolean;\n label: boolean;\n}\n\n/**\n * Renderiza el wrapper con el punto central y, opcionalmente, el label inline.\n *\n * Estructura:\n * .sd-wrap — posiciona los anillos (::before / ::after) para online·mizu\n * .sd — el punto coloreado y animado\n * .sd-label — (opcional) texto inline con color del estado\n */\nexport function statusDotTemplate(props: StatusDotTemplateProps): TemplateResult {\n return html`\n <span class=\"sd-root\">\n <span\n class=\"sd-wrap\"\n role=\"img\"\n aria-label=${LABEL_TEXT[props.status]}\n >\n <span class=\"sd ${props.bordered ? 'sd--bordered' : ''}\"></span>\n </span>\n ${props.label ? html`\n <span class=\"sd-label\">${LABEL_TEXT[props.status]}</span>\n ` : nothing}\n </span>\n `;\n}"],"names":[],"mappings":";AAKA,MAAM,aAAiD;AAAA,EACrD,QAAS;AAAA,EACT,MAAS;AAAA,EACT,MAAS;AAAA,EACT,SAAS;AACX;AAiBO,SAAS,kBAAkB,OAA+C;AAC/E,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,qBAKY,WAAW,MAAM,MAAM,CAAC;AAAA;AAAA,0BAEnB,MAAM,WAAW,iBAAiB,EAAE;AAAA;AAAA,QAEtD,MAAM,QAAQ;AAAA,iCACW,WAAW,MAAM,MAAM,CAAC;AAAA,UAC/C,OAAO;AAAA;AAAA;AAGjB;"}
1
+ {"version":3,"file":"index197.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
package/dist/index198.js CHANGED
@@ -1,5 +1,77 @@
1
- const statusDotCss = '@layer tokens,reset,components;@layer reset{:host{display:inline-flex;align-items:center;vertical-align:middle;flex-shrink:0}*,*:before,*:after{box-sizing:border-box}}@layer components{.sd-root{display:inline-flex;align-items:center;gap:var(--lib-space-sm)}.sd-wrap{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.sd-wrap:before,.sd-wrap:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:var(--radius-full);opacity:0;pointer-events:none}.sd{width:10px;height:10px;border-radius:var(--radius-full);background:var(--color-washi-400);position:relative;z-index:1;flex-shrink:0}:host([size="sm"]) .sd{width:6px;height:6px}:host([size="md"]) .sd{width:10px;height:10px}:host([size="lg"]) .sd{width:14px;height:14px}.sd--bordered{box-shadow:0 0 0 2px var(--bg-elevated)}.sd-label{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wider);text-transform:uppercase;color:var(--text-secondary);line-height:1}@keyframes mizu-ring-a{0%{transform:scale(1);opacity:.5}to{transform:scale(2.8);opacity:0}}@keyframes mizu-ring-b{0%{transform:scale(1);opacity:.35}to{transform:scale(2.2);opacity:0}}@keyframes iki{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.18);opacity:.75}}@keyframes hayai{0%,to{opacity:1}40%{opacity:.3}60%{opacity:.3}}:host([status="online"]) .sd{background:var(--color-celadon-500)}:host([status="online"]) .sd-wrap:before{background:var(--color-celadon-400);animation:mizu-ring-a 2.6s cubic-bezier(0,.55,.45,1) infinite}:host([status="online"]) .sd-wrap:after{background:var(--color-celadon-400);animation:mizu-ring-b 2.6s cubic-bezier(0,.55,.45,1) .9s infinite}:host([status="online"]) .sd-label{color:var(--color-celadon-600)}:host([status="away"]) .sd{background:var(--color-kaki-500);animation:iki 3s ease-in-out infinite}:host([status="away"]) .sd-label{color:var(--color-kaki-500)}:host([status="busy"]) .sd{background:var(--color-error);animation:hayai 1.1s ease-in-out infinite}:host([status="busy"]) .sd-label{color:var(--color-error)}:host([status="offline"]) .sd{background:var(--color-washi-400)}:host([status="offline"]) .sd-label{color:var(--text-muted)}@media(prefers-reduced-motion:reduce){.sd-wrap:before,.sd-wrap:after{animation:none;opacity:0}.sd{animation:none}}}';
1
+ import { svg, html } from "lit";
2
+ const CARET = svg`
3
+ <svg width="9" height="9" viewBox="0 0 10 10" fill="none"
4
+ stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
5
+ <polyline points="2,3 5,7 8,3"/>
6
+ </svg>`;
7
+ function buttonGroupTemplate() {
8
+ return html`
9
+ <div class="bg-wrap" part="group">
10
+ <slot></slot>
11
+ </div>
12
+ `;
13
+ }
14
+ function buttonSplitTemplate(p) {
15
+ const { label, variant, size, dark, disabled, menuOpen, items } = p;
16
+ const arrowKintsugi = variant === "accent" || variant === "primary";
17
+ const menuItems = items.length > 0 ? html`${items.map((item) => html`
18
+ <button
19
+ class="split-menu-item"
20
+ ?disabled="${item.disabled ?? false}"
21
+ data-value="${item.value}"
22
+ >${item.label}</button>
23
+ `)}` : html`<slot name="menu"></slot>`;
24
+ return html`
25
+ <div class="split-wrap" part="split">
26
+
27
+ <!-- Acción principal: lib-button posición "first" -->
28
+ <lib-button
29
+ part="main"
30
+ variant="${variant}"
31
+ size="${size}"
32
+ ?dark="${dark}"
33
+ ?disabled="${disabled}"
34
+ group-pos="first"
35
+ group-shape="rounded"
36
+ @click="${p.onMainClick}"
37
+ >
38
+ <slot slot="prefix" name="prefix"></slot>
39
+ ${label}
40
+ <slot slot="suffix" name="suffix"></slot>
41
+ </lib-button>
42
+
43
+ <!-- Flecha: lib-button posición "last", icon-only -->
44
+ <lib-button
45
+ part="arrow"
46
+ variant="${variant}"
47
+ size="${size}"
48
+ ?dark="${dark}"
49
+ ?disabled="${disabled}"
50
+ group-pos="last"
51
+ group-shape="rounded"
52
+ icon-only
53
+ ?kintsugi="${arrowKintsugi}"
54
+ aria-label="Más opciones"
55
+ aria-haspopup="true"
56
+ aria-expanded="${menuOpen ? "true" : "false"}"
57
+ @click="${p.onArrowClick}"
58
+ >${CARET}</lib-button>
59
+
60
+ <!-- Menú desplegable -->
61
+ <div
62
+ class="split-menu ${menuOpen ? "is-open" : ""}"
63
+ part="menu"
64
+ style="${menuOpen ? "display:block" : "display:none"}"
65
+ role="menu"
66
+ >
67
+ ${menuItems}
68
+ </div>
69
+
70
+ </div>
71
+ `;
72
+ }
2
73
  export {
3
- statusDotCss as default
74
+ buttonGroupTemplate,
75
+ buttonSplitTemplate
4
76
  };
5
77
  //# sourceMappingURL=index198.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index198.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index198.js","sources":["../src/components/molecules/button-group/lib-button-group.html.ts"],"sourcesContent":["import { html, svg, TemplateResult } from 'lit';\nimport type { LibVariant, LibSize } from '../../../types';\nimport type { SplitMenuItem } from './lib-button-group.types';\n\n/* ── Caret SVG (va dentro del slot del lib-button flecha) ── */\nconst CARET = svg`\n <svg width=\"9\" height=\"9\" viewBox=\"0 0 10 10\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"2,3 5,7 8,3\"/>\n </svg>`;\n\n/* ────────────────────────────────────────────\n Group template\n ──────────────────────────────────────────── */\nexport function buttonGroupTemplate(): TemplateResult {\n return html`\n <div class=\"bg-wrap\" part=\"group\">\n <slot></slot>\n </div>\n `;\n}\n\n/* ────────────────────────────────────────────\n Split template — compone dos lib-button\n ──────────────────────────────────────────── */\nexport interface SplitTemplateProps {\n label: string;\n variant: LibVariant;\n size: LibSize;\n dark: boolean;\n disabled: boolean;\n menuOpen: boolean;\n items: SplitMenuItem[];\n onMainClick: (e: Event) => void;\n onArrowClick:(e: Event) => void;\n}\n\nexport function buttonSplitTemplate(p: SplitTemplateProps): TemplateResult {\n const { label, variant, size, dark, disabled, menuOpen, items } = p;\n\n /* Kintsugi en el arrow solo para variantes sólidas (accent/primary) */\n const arrowKintsugi = variant === 'accent' || variant === 'primary';\n\n const menuItems: TemplateResult = items.length > 0\n ? html`${items.map(item => html`\n <button\n class=\"split-menu-item\"\n ?disabled=\"${item.disabled ?? false}\"\n data-value=\"${item.value}\"\n >${item.label}</button>\n `)}`\n : html`<slot name=\"menu\"></slot>`;\n\n return html`\n <div class=\"split-wrap\" part=\"split\">\n\n <!-- Acción principal: lib-button posición \"first\" -->\n <lib-button\n part=\"main\"\n variant=\"${variant}\"\n size=\"${size}\"\n ?dark=\"${dark}\"\n ?disabled=\"${disabled}\"\n group-pos=\"first\"\n group-shape=\"rounded\"\n @click=\"${p.onMainClick}\"\n >\n <slot slot=\"prefix\" name=\"prefix\"></slot>\n ${label}\n <slot slot=\"suffix\" name=\"suffix\"></slot>\n </lib-button>\n\n <!-- Flecha: lib-button posición \"last\", icon-only -->\n <lib-button\n part=\"arrow\"\n variant=\"${variant}\"\n size=\"${size}\"\n ?dark=\"${dark}\"\n ?disabled=\"${disabled}\"\n group-pos=\"last\"\n group-shape=\"rounded\"\n icon-only\n ?kintsugi=\"${arrowKintsugi}\"\n aria-label=\"Más opciones\"\n aria-haspopup=\"true\"\n aria-expanded=\"${menuOpen ? 'true' : 'false'}\"\n @click=\"${p.onArrowClick}\"\n >${CARET}</lib-button>\n\n <!-- Menú desplegable -->\n <div\n class=\"split-menu ${menuOpen ? 'is-open' : ''}\"\n part=\"menu\"\n style=\"${menuOpen ? 'display:block' : 'display:none'}\"\n role=\"menu\"\n >\n ${menuItems}\n </div>\n\n </div>\n `;\n}"],"names":[],"mappings":";AAKA,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AASP,SAAS,sBAAsC;AACpD,SAAO;AAAA;AAAA;AAAA;AAAA;AAKT;AAiBO,SAAS,oBAAoB,GAAuC;AACzE,QAAM,EAAE,OAAO,SAAS,MAAM,MAAM,UAAU,UAAU,UAAU;AAGlE,QAAM,gBAAgB,YAAY,YAAY,YAAY;AAE1D,QAAM,YAA4B,MAAM,SAAS,IAC7C,OAAO,MAAM,IAAI,CAAA,SAAQ;AAAA;AAAA;AAAA,uBAGR,KAAK,YAAY,KAAK;AAAA,wBACrB,KAAK,KAAK;AAAA,WACvB,KAAK,KAAK;AAAA,OACd,CAAC,KACF;AAEJ,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAMU,OAAO;AAAA,gBACV,IAAI;AAAA,iBACH,IAAI;AAAA,qBACA,QAAQ;AAAA;AAAA;AAAA,kBAGX,EAAE,WAAW;AAAA;AAAA;AAAA,UAGrB,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAOI,OAAO;AAAA,gBACV,IAAI;AAAA,iBACH,IAAI;AAAA,qBACA,QAAQ;AAAA;AAAA;AAAA;AAAA,qBAIR,aAAa;AAAA;AAAA;AAAA,yBAGT,WAAW,SAAS,OAAO;AAAA,kBAClC,EAAE,YAAY;AAAA,SACvB,KAAK;AAAA;AAAA;AAAA;AAAA,4BAIc,WAAW,YAAY,EAAE;AAAA;AAAA,iBAEpC,WAAW,kBAAkB,cAAc;AAAA;AAAA;AAAA,UAGlD,SAAS;AAAA;AAAA;AAAA;AAAA;AAKnB;"}
package/dist/index199.js CHANGED
@@ -1,48 +1,77 @@
1
- import { html, nothing } from "lit";
2
- const defaultIconSvg = html`
3
- <svg
4
- class="avatar__icon"
5
- viewBox="0 0 24 24"
6
- fill="none"
7
- stroke="currentColor"
8
- stroke-width="1.5"
9
- stroke-linecap="round"
10
- stroke-linejoin="round"
11
- aria-hidden="true"
12
- >
13
- <circle cx="12" cy="8" r="4"/>
14
- <path d="M4 20c0-4 3.6-7 8-7s8 3 8 7"/>
15
- </svg>
16
- `;
17
- function avatarTemplate(props) {
1
+ import { html } from "lit";
2
+ const checkSvg = html`
3
+ <svg viewBox="0 0 12 12">
4
+ <polyline points="2,6 5,9 10,3"/>
5
+ </svg>`;
6
+ function checkboxCardTemplate(ctx) {
7
+ const checkClass = [
8
+ "cc-check",
9
+ ctx.inputType === "radio" || ctx.checkShape === "pill" ? "cc-check-pill" : ""
10
+ ].filter(Boolean).join(" ");
18
11
  return html`
19
- <div
20
- class="avatar__wrapper"
21
- role="img"
22
- aria-label="${props.name || "avatar"}"
12
+ <label
13
+ class="cc"
14
+ part="label"
15
+ @click="${(e) => ctx._handleClick(e)}"
23
16
  >
24
- <div class="avatar__face">
17
+ <!-- Input nativo — hermano directo de .cc-body para :checked ~ -->
18
+ <input
19
+ class="cc-input"
20
+ part="input"
21
+ .type="${ctx.inputType}"
22
+ .name="${ctx.name}"
23
+ .value="${ctx.value}"
24
+ .checked="${ctx.checked}"
25
+ ?disabled="${ctx.disabled}"
26
+ @change="${(e) => ctx._handleChange(e)}"
27
+ />
25
28
 
26
- ${props.showImage ? html`<img
27
- class="avatar__img"
28
- src="${props.src}"
29
- alt="${props.name}"
30
- @error=${props.onError}
31
- />` : nothing}
29
+ <div class="cc-body" part="body">
32
30
 
33
- ${!props.showImage && props.initials ? html`<span class="avatar__initials">${props.initials}</span>` : nothing}
31
+ <!-- Checkmark -->
32
+ <div class="${checkClass}" part="check">${checkSvg}</div>
34
33
 
35
- ${!props.showImage && !props.initials ? html`<slot>${defaultIconSvg}</slot>` : nothing}
34
+ <!-- Slot: icono -->
35
+ <slot name="icon">
36
+ ${ctx._hasSlot("icon") ? "" : ""}
37
+ </slot>
36
38
 
37
- </div>
39
+ <!-- Slot: badge -->
40
+ <slot name="badge"></slot>
41
+
42
+ <!-- Slot: título -->
43
+ <slot name="title">
44
+ ${ctx.cardTitle ? html`<div class="cc-title" part="title">${ctx.cardTitle}</div>` : ""}
45
+ </slot>
46
+
47
+ <!-- Slot: descripción -->
48
+ <slot name="desc">
49
+ ${ctx.desc ? html`<div class="cc-desc" part="desc">${ctx.desc}</div>` : ""}
50
+ </slot>
51
+
52
+ <!-- Slot: precio -->
53
+ <slot name="price"></slot>
54
+
55
+ <!-- Slot: divider -->
56
+ <slot name="divider"></slot>
57
+
58
+ <!-- Slot: features -->
59
+ <slot name="features"></slot>
60
+
61
+ <!-- Slot: imagen -->
62
+ <slot name="image"></slot>
63
+
64
+ <!-- Slot: contenido libre (default) -->
65
+ <slot></slot>
66
+
67
+ <!-- Ripple layer -->
68
+ <div class="cc-ripple" part="ripple"></div>
38
69
 
39
- <div class="avatar__status">
40
- <slot name="status"></slot>
41
70
  </div>
42
- </div>
71
+ </label>
43
72
  `;
44
73
  }
45
74
  export {
46
- avatarTemplate
75
+ checkboxCardTemplate
47
76
  };
48
77
  //# sourceMappingURL=index199.js.map