@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/index318.js CHANGED
@@ -1,42 +1,94 @@
1
1
  import { nothing, html } from "lit";
2
- function codeBlockTemplate(props) {
2
+ const SEGMENT_TONE_CLASS = {
3
+ default: "seg-default",
4
+ kaki: "seg-kaki",
5
+ celadon: "seg-celadon",
6
+ error: "seg-error",
7
+ muted: "seg-muted"
8
+ };
9
+ const SEGMENT_TONE_VAR = {
10
+ default: "var(--color-washi-900)",
11
+ kaki: "var(--color-kaki-500)",
12
+ celadon: "var(--color-celadon-500)",
13
+ error: "var(--color-error)",
14
+ muted: "var(--color-washi-300)"
15
+ };
16
+ function segmentColor(seg) {
17
+ if (seg.color) return seg.color;
18
+ const tone = seg.tone ?? "default";
19
+ return SEGMENT_TONE_VAR[tone];
20
+ }
21
+ function segmentClass(seg) {
22
+ if (seg.color) return "";
23
+ return SEGMENT_TONE_CLASS[seg.tone ?? "default"];
24
+ }
25
+ function multiBarTpl(props) {
26
+ const hasLegend = props.segments.some((s) => s.label);
3
27
  return html`
4
- <div class="code-block">
5
- <div class="code-block__header">
6
- <div class="code-block__meta">
7
- ${props.filename ? html`<span class="code-block__filename">${props.filename}</span>` : nothing}
8
- <span class="code-block__lang">${props.language}</span>
9
- </div>
10
-
11
- ${props.copyable ? html`
12
- <button
13
- class="code-block__copy ${props.copied ? "code-block__copy--copied" : ""}"
14
- aria-label="${props.copied ? "Copiado" : "Copiar código"}"
15
- @click=${props.onCopy}
16
- >
17
- ${props.copied ? html`
18
- <svg width="14" height="14" viewBox="0 0 16 16" fill="none" aria-hidden="true">
19
- <path d="M2 8l4 4 8-8" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
20
- </svg>
21
- <span>Copiado</span>
22
- ` : html`
23
- <svg width="14" height="14" viewBox="0 0 16 16" fill="none" aria-hidden="true">
24
- <rect x="5" y="5" width="9" height="9" rx="1" stroke="currentColor" stroke-width="1.5"/>
25
- <path d="M3 11H2a1 1 0 01-1-1V2a1 1 0 011-1h8a1 1 0 011 1v1" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
26
- </svg>
27
- <span>Copiar</span>
28
- `}
29
- </button>
30
- ` : nothing}
31
- </div>
28
+ <div class="pb-multi">
29
+ ${props.segments.map((seg) => html`
30
+ <div
31
+ class="pb-segment ${segmentClass(seg)}"
32
+ style="
33
+ width: ${seg.percent}%;
34
+ ${seg.color ? `background: ${seg.color};` : ""}
35
+ "
36
+ ></div>
37
+ `)}
38
+ </div>
32
39
 
33
- <div class="code-block__body">
34
- <pre class="code-block__pre"><code class="code-block__code">${props.code}</code></pre>
40
+ ${hasLegend ? html`
41
+ <div class="pb-legend">
42
+ ${props.segments.filter((s) => s.label).map((seg) => html`
43
+ <div class="pb-legend-item">
44
+ <div
45
+ class="pb-legend-dot"
46
+ style="background: ${segmentColor(seg)};"
47
+ ></div>
48
+ <span class="pb-legend-text">${seg.label}</span>
49
+ </div>
50
+ `)}
51
+ </div>` : nothing}
52
+ `;
53
+ }
54
+ function singleBarTpl(props) {
55
+ const showInnerValue = props.size === "xl" && props.showValue && !props.indeterminate;
56
+ return html`
57
+ <div
58
+ class="pb"
59
+ role="progressbar"
60
+ aria-valuemin="0"
61
+ aria-valuemax="${props.max}"
62
+ aria-valuenow="${props.indeterminate ? nothing : props.rawValue}"
63
+ aria-label="${props.ariaLabel || nothing}"
64
+ >
65
+ <div class="pb-fill" style="width: ${props.indeterminate ? 100 : props.percent}%">
66
+ ${showInnerValue ? html`<span class="pb-inner-value">${Math.round(props.percent)}%</span>` : nothing}
35
67
  </div>
36
68
  </div>
37
69
  `;
38
70
  }
71
+ function progressTemplate(props) {
72
+ const isMulti = props.segments.length > 0;
73
+ const hasMeta = !!(props.label || props.valueLabel);
74
+ const showPercent = !isMulti && props.showValue && !props.indeterminate && props.size !== "xl";
75
+ const displayValue = props.valueLabel ? props.valueLabel : showPercent ? `${Math.round(props.percent)}%` : nothing;
76
+ const barTpl = isMulti ? multiBarTpl(props) : singleBarTpl(props);
77
+ if (hasMeta) {
78
+ return html`
79
+ <div class="pb-wrap">
80
+ <div class="pb-header">
81
+ <span class="pb-label">${props.label}</span>
82
+ ${displayValue !== nothing ? html`<span class="pb-value">${displayValue}</span>` : nothing}
83
+ </div>
84
+ ${barTpl}
85
+ ${props.sub ? html`<span class="pb-sub">${props.sub}</span>` : nothing}
86
+ </div>
87
+ `;
88
+ }
89
+ return html`${barTpl}`;
90
+ }
39
91
  export {
40
- codeBlockTemplate
92
+ progressTemplate
41
93
  };
42
94
  //# sourceMappingURL=index318.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index318.js","sources":["../src/components/atoms/code-block/lib-code-block.html.ts"],"sourcesContent":["import { html, nothing, TemplateResult } from 'lit';\n\nexport type LibCodeBlockLanguage =\n | 'bash'\n | 'ts'\n | 'js'\n | 'html'\n | 'css'\n | 'json'\n | 'text';\n\nexport interface CodeBlockTemplateProps {\n code: string;\n language: LibCodeBlockLanguage;\n copyable: boolean;\n copied: boolean;\n filename: string;\n onCopy: () => void;\n}\n\nexport function codeBlockTemplate(props: CodeBlockTemplateProps): TemplateResult {\n return html`\n <div class=\"code-block\">\n <div class=\"code-block__header\">\n <div class=\"code-block__meta\">\n ${props.filename\n ? html`<span class=\"code-block__filename\">${props.filename}</span>`\n : nothing}\n <span class=\"code-block__lang\">${props.language}</span>\n </div>\n\n ${props.copyable\n ? html`\n <button\n class=\"code-block__copy ${props.copied ? 'code-block__copy--copied' : ''}\"\n aria-label=\"${props.copied ? 'Copiado' : 'Copiar código'}\"\n @click=${props.onCopy}\n >\n ${props.copied\n ? html`\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 8l4 4 8-8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span>Copiado</span>\n `\n : html`\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"5\" y=\"5\" width=\"9\" height=\"9\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M3 11H2a1 1 0 01-1-1V2a1 1 0 011-1h8a1 1 0 011 1v1\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n <span>Copiar</span>\n `}\n </button>\n `\n : nothing}\n </div>\n\n <div class=\"code-block__body\">\n <pre class=\"code-block__pre\"><code class=\"code-block__code\">${props.code}</code></pre>\n </div>\n </div>\n `;\n}"],"names":[],"mappings":";AAoBO,SAAS,kBAAkB,OAA+C;AAC/E,SAAO;AAAA;AAAA;AAAA;AAAA,YAIG,MAAM,WACJ,0CAA0C,MAAM,QAAQ,YACxD,OAAO;AAAA,2CACsB,MAAM,QAAQ;AAAA;AAAA;AAAA,UAG/C,MAAM,WACJ;AAAA;AAAA,0CAE8B,MAAM,SAAS,6BAA6B,EAAE;AAAA,8BAC1D,MAAM,SAAS,YAAY,eAAe;AAAA,yBAC/C,MAAM,MAAM;AAAA;AAAA,kBAEnB,MAAM,SACJ;AAAA;AAAA;AAAA;AAAA;AAAA,wBAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAMC;AAAA;AAAA,gBAGT,OAAO;AAAA;AAAA;AAAA;AAAA,sEAImD,MAAM,IAAI;AAAA;AAAA;AAAA;AAIhF;"}
1
+ {"version":3,"file":"index318.js","sources":["../src/components/atoms/progress/lib-progress.html.ts"],"sourcesContent":["import { html, nothing, TemplateResult } from 'lit';\nimport type { ProgressTemplateProps, ProgressSegment, ProgressSegmentTone } from './lib-progress.types';\n\n/* ── Tone → CSS class for segments ── */\nconst SEGMENT_TONE_CLASS: Record<ProgressSegmentTone, string> = {\n default: 'seg-default',\n kaki: 'seg-kaki',\n celadon: 'seg-celadon',\n error: 'seg-error',\n muted: 'seg-muted',\n};\n\n/* ── Tone → CSS variable for legend dot ── */\nconst SEGMENT_TONE_VAR: Record<ProgressSegmentTone, string> = {\n default: 'var(--color-washi-900)',\n kaki: 'var(--color-kaki-500)',\n celadon: 'var(--color-celadon-500)',\n error: 'var(--color-error)',\n muted: 'var(--color-washi-300)',\n};\n\nfunction segmentColor(seg: ProgressSegment): string {\n if (seg.color) return seg.color;\n const tone = seg.tone ?? 'default';\n return SEGMENT_TONE_VAR[tone];\n}\n\nfunction segmentClass(seg: ProgressSegment): string {\n if (seg.color) return '';\n return SEGMENT_TONE_CLASS[seg.tone ?? 'default'];\n}\n\n/* ── Multi-segment bar ── */\nfunction multiBarTpl(props: ProgressTemplateProps): TemplateResult {\n const hasLegend = props.segments.some(s => s.label);\n\n return html`\n <div class=\"pb-multi\">\n ${props.segments.map(seg => html`\n <div\n class=\"pb-segment ${segmentClass(seg)}\"\n style=\"\n width: ${seg.percent}%;\n ${seg.color ? `background: ${seg.color};` : ''}\n \"\n ></div>\n `)}\n </div>\n\n ${hasLegend ? html`\n <div class=\"pb-legend\">\n ${props.segments.filter(s => s.label).map(seg => html`\n <div class=\"pb-legend-item\">\n <div\n class=\"pb-legend-dot\"\n style=\"background: ${segmentColor(seg)};\"\n ></div>\n <span class=\"pb-legend-text\">${seg.label}</span>\n </div>\n `)}\n </div>` : nothing}\n `;\n}\n\n/* ── Single bar ── */\nfunction singleBarTpl(props: ProgressTemplateProps): TemplateResult {\n const showInnerValue = props.size === 'xl' && props.showValue && !props.indeterminate;\n\n return html`\n <div\n class=\"pb\"\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"${props.max}\"\n aria-valuenow=\"${props.indeterminate ? nothing : props.rawValue}\"\n aria-label=\"${props.ariaLabel || nothing}\"\n >\n <div class=\"pb-fill\" style=\"width: ${props.indeterminate ? 100 : props.percent}%\">\n ${showInnerValue\n ? html`<span class=\"pb-inner-value\">${Math.round(props.percent)}%</span>`\n : nothing}\n </div>\n </div>\n `;\n}\n\n/**\n * Template para lib-progress.\n * Renderiza la barra con o sin meta (label/value/sub).\n * Si segments.length > 0 → modo multi-segmento.\n */\nexport function progressTemplate(props: ProgressTemplateProps): TemplateResult {\n const isMulti = props.segments.length > 0;\n const hasMeta = !!(props.label || props.valueLabel);\n const showPercent = !isMulti && props.showValue && !props.indeterminate && props.size !== 'xl';\n\n const displayValue = props.valueLabel\n ? props.valueLabel\n : showPercent\n ? `${Math.round(props.percent)}%`\n : nothing;\n\n const barTpl = isMulti ? multiBarTpl(props) : singleBarTpl(props);\n\n /* With meta wrapper */\n if (hasMeta) {\n return html`\n <div class=\"pb-wrap\">\n <div class=\"pb-header\">\n <span class=\"pb-label\">${props.label}</span>\n ${displayValue !== nothing\n ? html`<span class=\"pb-value\">${displayValue}</span>`\n : nothing}\n </div>\n ${barTpl}\n ${props.sub ? html`<span class=\"pb-sub\">${props.sub}</span>` : nothing}\n </div>\n `;\n }\n\n /* Plain bar */\n return html`${barTpl}`;\n}"],"names":[],"mappings":";AAIA,MAAM,qBAA0D;AAAA,EAC9D,SAAS;AAAA,EACT,MAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAS;AAAA,EACT,OAAS;AACX;AAGA,MAAM,mBAAwD;AAAA,EAC5D,SAAS;AAAA,EACT,MAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAS;AAAA,EACT,OAAS;AACX;AAEA,SAAS,aAAa,KAA8B;AAClD,MAAI,IAAI,MAAO,QAAO,IAAI;AAC1B,QAAM,OAAO,IAAI,QAAQ;AACzB,SAAO,iBAAiB,IAAI;AAC9B;AAEA,SAAS,aAAa,KAA8B;AAClD,MAAI,IAAI,MAAO,QAAO;AACtB,SAAO,mBAAmB,IAAI,QAAQ,SAAS;AACjD;AAGA,SAAS,YAAY,OAA8C;AACjE,QAAM,YAAY,MAAM,SAAS,KAAK,CAAA,MAAK,EAAE,KAAK;AAElD,SAAO;AAAA;AAAA,QAED,MAAM,SAAS,IAAI,CAAA,QAAO;AAAA;AAAA,8BAEJ,aAAa,GAAG,CAAC;AAAA;AAAA,qBAE1B,IAAI,OAAO;AAAA,cAClB,IAAI,QAAQ,eAAe,IAAI,KAAK,MAAM,EAAE;AAAA;AAAA;AAAA,OAGnD,CAAC;AAAA;AAAA;AAAA,MAGF,YAAY;AAAA;AAAA,UAER,MAAM,SAAS,OAAO,CAAA,MAAK,EAAE,KAAK,EAAE,IAAI,CAAA,QAAO;AAAA;AAAA;AAAA;AAAA,mCAItB,aAAa,GAAG,CAAC;AAAA;AAAA,2CAET,IAAI,KAAK;AAAA;AAAA,SAE3C,CAAC;AAAA,gBACM,OAAO;AAAA;AAEvB;AAGA,SAAS,aAAa,OAA8C;AAClE,QAAM,iBAAiB,MAAM,SAAS,QAAQ,MAAM,aAAa,CAAC,MAAM;AAExE,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,uBAKc,MAAM,GAAG;AAAA,uBACT,MAAM,gBAAgB,UAAU,MAAM,QAAQ;AAAA,oBACjD,MAAM,aAAa,OAAO;AAAA;AAAA,2CAEH,MAAM,gBAAgB,MAAM,MAAM,OAAO;AAAA,UAC1E,iBACE,oCAAoC,KAAK,MAAM,MAAM,OAAO,CAAC,aAC7D,OAAO;AAAA;AAAA;AAAA;AAInB;AAOO,SAAS,iBAAiB,OAA8C;AAC7E,QAAM,UAAc,MAAM,SAAS,SAAS;AAC5C,QAAM,UAAc,CAAC,EAAE,MAAM,SAAS,MAAM;AAC5C,QAAM,cAAc,CAAC,WAAW,MAAM,aAAa,CAAC,MAAM,iBAAiB,MAAM,SAAS;AAE1F,QAAM,eAAe,MAAM,aACvB,MAAM,aACN,cACE,GAAG,KAAK,MAAM,MAAM,OAAO,CAAC,MAC5B;AAEN,QAAM,SAAS,UAAU,YAAY,KAAK,IAAI,aAAa,KAAK;AAGhE,MAAI,SAAS;AACX,WAAO;AAAA;AAAA;AAAA,mCAGwB,MAAM,KAAK;AAAA,YAClC,iBAAiB,UACf,8BAA8B,YAAY,YAC1C,OAAO;AAAA;AAAA,UAEX,MAAM;AAAA,UACN,MAAM,MAAM,4BAA4B,MAAM,GAAG,YAAY,OAAO;AAAA;AAAA;AAAA,EAG5E;AAGA,SAAO,OAAO,MAAM;AACtB;"}
package/dist/index319.js CHANGED
@@ -1,5 +1,5 @@
1
- const codeBlockCss = '@layer tokens,reset,components;@layer reset{:host{display:block}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}}@layer components{.code-block{display:flex;flex-direction:column;border:var(--lib-border-width) solid var(--color-ink-100);border-radius:var(--lib-radius-md);background:var(--color-washi-950);box-shadow:var(--lib-shadow-brutal);overflow:hidden;width:100%}.code-block__header{display:flex;align-items:center;justify-content:space-between;padding:var(--lib-space-xs) var(--lib-space-md);background:var(--color-washi-900);border-bottom:var(--lib-border-width) solid var(--color-ink-40);min-height:36px;gap:var(--lib-space-md)}.code-block__meta{display:flex;align-items:center;gap:var(--lib-space-sm)}.code-block__filename{font-family:var(--lib-font-mono);font-size:var(--text-sm);color:var(--color-washi-200);letter-spacing:var(--tracking-normal)}.code-block__lang{font-family:var(--lib-font-mono);font-size:10px;font-weight:var(--weight-medium);letter-spacing:var(--tracking-wider);text-transform:uppercase;color:var(--color-washi-500);background:var(--color-washi-800);border:var(--lib-border-width) solid var(--color-washi-700);border-radius:var(--lib-radius-xs);padding:1px var(--lib-space-xs)}.code-block__copy{display:inline-flex;align-items:center;gap:var(--lib-space-xs);font-family:var(--lib-font-mono);font-size:11px;font-weight:var(--weight-medium);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--color-washi-400);background:transparent;border:var(--lib-border-width) solid var(--color-washi-700);border-radius:var(--lib-radius-xs);padding:3px var(--lib-space-sm);cursor:pointer;transition:color var(--duration-fast) var(--ease-out),border-color var(--duration-fast) var(--ease-out),background var(--duration-fast) var(--ease-out);white-space:nowrap;flex-shrink:0}.code-block__copy:hover{color:var(--color-washi-100);border-color:var(--color-washi-400);background:var(--color-washi-800)}.code-block__copy:active{transform:scale(.97)}.code-block__copy--copied{color:var(--color-celadon-300);border-color:var(--color-celadon-600)}.code-block__copy--copied:hover{color:var(--color-celadon-300);border-color:var(--color-celadon-500);background:transparent}.code-block__body{overflow-x:auto;padding:var(--lib-space-md) var(--lib-space-lg)}.code-block__pre{font-family:var(--lib-font-mono);font-size:var(--text-sm);line-height:var(--leading-relaxed);color:var(--color-washi-100);white-space:pre;-moz-tab-size:2;tab-size:2}.code-block__code{font-family:inherit;font-size:inherit;color:inherit}:host([variant="ghost"]) .code-block{background:var(--color-washi-100);box-shadow:none}:host([variant="ghost"]) .code-block__header{background:var(--color-washi-200);border-bottom-color:var(--color-washi-300)}:host([variant="ghost"]) .code-block__lang{background:var(--color-washi-100);border-color:var(--color-washi-300);color:var(--color-washi-600)}:host([variant="ghost"]) .code-block__copy{color:var(--color-washi-600);border-color:var(--color-washi-300)}:host([variant="ghost"]) .code-block__copy:hover{color:var(--color-washi-800);border-color:var(--color-washi-500);background:var(--color-washi-200)}:host([variant="ghost"]) .code-block__pre{color:var(--color-washi-800)}}';
1
+ const progressCss = '@layer tokens,reset,components;@layer reset{:host{display:block;width:100%}*,*:before,*:after{box-sizing:border-box}}@layer components{.pb-wrap{display:flex;flex-direction:column;gap:var(--lib-space-xs);width:100%}.pb-header{display:flex;align-items:baseline;justify-content:space-between;gap:var(--lib-space-sm)}.pb-label{font-family:var(--lib-font-body);font-size:var(--text-sm);color:var(--text-primary);line-height:var(--leading-snug)}.pb-value{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);color:var(--text-muted);flex-shrink:0}.pb-sub{font-family:var(--lib-font-mono);font-size:10px;letter-spacing:var(--tracking-wider);color:var(--text-muted);text-transform:uppercase}:host([tone="error"]) .pb-label{color:var(--color-error)}:host([tone="error"]) .pb-value{color:var(--color-error)}:host([tone="error"]) .pb-sub{color:var(--color-error)}:host([tone="celadon"]) .pb-value{color:var(--color-celadon-600)}.pb{width:100%;background:var(--color-washi-200);border-radius:var(--radius-full);overflow:hidden;position:relative}:host([size="xs"]) .pb{height:2px}:host([size="sm"]) .pb{height:4px}:host([size="md"]) .pb,.pb{height:8px}:host([size="lg"]) .pb{height:12px}:host([size="xl"]) .pb{height:20px}:host([tone="kaki"]) .pb{background:var(--color-kaki-100)}:host([tone="celadon"]) .pb{background:var(--color-celadon-100)}:host([tone="error"]) .pb{background:var(--color-error-light, #F5DDD9)}:host([square]) .pb,:host([square]) .pb-fill{border-radius:var(--radius-sm)}.pb-fill{height:100%;border-radius:var(--radius-full);background:var(--color-washi-900);transition:width .6s var(--ease-default);position:relative;overflow:hidden}:host([square]) .pb-fill{border-radius:var(--radius-sm)}:host([tone="kaki"]) .pb-fill{background:var(--color-kaki-500)}:host([tone="celadon"]) .pb-fill{background:var(--color-celadon-500)}:host([tone="error"]) .pb-fill{background:var(--color-error)}:host([striped]) .pb-fill{background-image:repeating-linear-gradient(-45deg,transparent,transparent 6px,rgb(255,255,255,.18) 6px,rgb(255,255,255,.18) 12px)}.pb-inner-value{display:flex;align-items:center;height:100%;padding-left:var(--lib-space-sm);font-family:var(--lib-font-mono);font-size:9px;letter-spacing:var(--tracking-wider);color:#ffffffb3;white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none}@keyframes pb-slide{0%{left:-40%;width:40%}50%{left:30%;width:60%}to{left:110%;width:40%}}:host([indeterminate]) .pb-fill{width:100%!important;background:transparent}:host([indeterminate]) .pb-fill:after{content:"";position:absolute;top:0;bottom:0;width:40%;background:var(--color-washi-900);border-radius:var(--radius-full);animation:pb-slide 1.6s cubic-bezier(.4,0,.6,1) infinite}:host([indeterminate][tone="kaki"]) .pb-fill:after{background:var(--color-kaki-500)}:host([indeterminate][tone="celadon"]) .pb-fill:after{background:var(--color-celadon-500)}:host([indeterminate][tone="error"]) .pb-fill:after{background:var(--color-error)}:host([indeterminate][square]) .pb-fill:after{border-radius:var(--radius-sm)}.pb-multi{display:flex;width:100%;border-radius:var(--radius-full);overflow:hidden;gap:2px;background:transparent}:host([size="xs"]) .pb-multi{height:2px}:host([size="sm"]) .pb-multi{height:4px}:host([size="md"]) .pb-multi,.pb-multi{height:8px}:host([size="lg"]) .pb-multi{height:12px}:host([size="xl"]) .pb-multi{height:20px}:host([square]) .pb-multi{border-radius:var(--radius-sm)}.pb-segment{height:100%;transition:width .6s var(--ease-default);flex-shrink:0}.pb-segment:first-child{border-radius:var(--radius-full) 0 0 var(--radius-full)}.pb-segment:last-child{border-radius:0 var(--radius-full) var(--radius-full) 0}.pb-segment:only-child{border-radius:var(--radius-full)}:host([square]) .pb-segment:first-child{border-radius:var(--radius-sm) 0 0 var(--radius-sm)}:host([square]) .pb-segment:last-child{border-radius:0 var(--radius-sm) var(--radius-sm) 0}:host([square]) .pb-segment:only-child{border-radius:var(--radius-sm)}.seg-default{background:var(--color-washi-900)}.seg-kaki{background:var(--color-kaki-500)}.seg-celadon{background:var(--color-celadon-500)}.seg-error{background:var(--color-error)}.seg-muted{background:var(--color-washi-300);flex:1}.pb-legend{display:flex;gap:var(--lib-space-md);flex-wrap:wrap;margin-top:var(--lib-space-sm)}.pb-legend-item{display:flex;align-items:center;gap:var(--lib-space-xs)}.pb-legend-dot{width:8px;height:8px;border-radius:var(--radius-full);flex-shrink:0}.pb-legend-text{font-family:var(--lib-font-mono);font-size:10px;letter-spacing:var(--tracking-wide);color:var(--text-muted)}@media(prefers-reduced-motion:reduce){.pb-fill,.pb-segment{transition:none}:host([indeterminate]) .pb-fill:after{animation:none}}}';
2
2
  export {
3
- codeBlockCss as default
3
+ progressCss as default
4
4
  };
5
5
  //# sourceMappingURL=index319.js.map
package/dist/index32.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { unsafeCSS, css, LitElement } from "lit";
2
2
  import { property, customElement } from "lit/decorators.js";
3
- import { checkboxTemplate } from "./index248.js";
4
- import checkboxCss from "./index249.js";
3
+ import { progressCircleTemplate } from "./index320.js";
4
+ import progressCss from "./index321.js";
5
5
  import sharedTokens from "./index196.js";
6
6
  var __defProp = Object.defineProperty;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -13,76 +13,68 @@ var __decorateClass = (decorators, target, key, kind) => {
13
13
  if (kind && result) __defProp(target, key, result);
14
14
  return result;
15
15
  };
16
- let LibCheckbox = class extends LitElement {
16
+ let LibProgressCircle = class extends LitElement {
17
17
  constructor() {
18
18
  super(...arguments);
19
- this.checked = false;
20
- this.disabled = false;
21
- this.indeterminate = false;
22
- this.label = "";
23
- this.sublabel = "";
24
- this.value = "";
19
+ this.value = 0;
20
+ this.max = 100;
25
21
  this.size = "md";
22
+ this.strokeWidth = null;
26
23
  this.variant = "default";
27
- }
28
- _handleChange(e) {
29
- const input = e.target;
30
- this.checked = input.checked;
31
24
  this.indeterminate = false;
32
- this.dispatchEvent(
33
- new CustomEvent("change", {
34
- detail: { checked: this.checked, value: this.value },
35
- bubbles: true,
36
- composed: true
37
- })
38
- );
25
+ this.bare = false;
26
+ this.sub = "";
27
+ this.icon = null;
39
28
  }
40
29
  render() {
41
- return checkboxTemplate({
42
- checked: this.checked,
43
- disabled: this.disabled,
44
- indeterminate: this.indeterminate,
45
- label: this.label,
46
- sublabel: this.sublabel,
30
+ return progressCircleTemplate({
47
31
  value: this.value,
32
+ max: this.max,
48
33
  size: this.size,
34
+ strokeWidth: this.strokeWidth,
49
35
  variant: this.variant,
50
- onChange: this._handleChange.bind(this)
36
+ indeterminate: this.indeterminate,
37
+ bare: this.bare,
38
+ sub: this.sub,
39
+ icon: this.icon
51
40
  });
52
41
  }
53
42
  };
54
- LibCheckbox.styles = [
43
+ LibProgressCircle.styles = [
55
44
  css`${unsafeCSS(sharedTokens)}`,
56
- css`${unsafeCSS(checkboxCss)}`
45
+ css`${unsafeCSS(progressCss)}`
57
46
  ];
58
47
  __decorateClass([
59
- property({ type: Boolean, reflect: true })
60
- ], LibCheckbox.prototype, "checked", 2);
48
+ property({ type: Number })
49
+ ], LibProgressCircle.prototype, "value", 2);
61
50
  __decorateClass([
62
- property({ type: Boolean, reflect: true })
63
- ], LibCheckbox.prototype, "disabled", 2);
51
+ property({ type: Number })
52
+ ], LibProgressCircle.prototype, "max", 2);
53
+ __decorateClass([
54
+ property({ type: String, reflect: true })
55
+ ], LibProgressCircle.prototype, "size", 2);
56
+ __decorateClass([
57
+ property({ type: Number, attribute: "stroke-width" })
58
+ ], LibProgressCircle.prototype, "strokeWidth", 2);
59
+ __decorateClass([
60
+ property({ type: String, reflect: true })
61
+ ], LibProgressCircle.prototype, "variant", 2);
64
62
  __decorateClass([
65
63
  property({ type: Boolean, reflect: true })
66
- ], LibCheckbox.prototype, "indeterminate", 2);
64
+ ], LibProgressCircle.prototype, "indeterminate", 2);
67
65
  __decorateClass([
68
- property({ type: String })
69
- ], LibCheckbox.prototype, "label", 2);
66
+ property({ type: Boolean, reflect: true })
67
+ ], LibProgressCircle.prototype, "bare", 2);
70
68
  __decorateClass([
71
69
  property({ type: String })
72
- ], LibCheckbox.prototype, "sublabel", 2);
70
+ ], LibProgressCircle.prototype, "sub", 2);
73
71
  __decorateClass([
74
72
  property({ type: String })
75
- ], LibCheckbox.prototype, "value", 2);
76
- __decorateClass([
77
- property({ type: String, reflect: true })
78
- ], LibCheckbox.prototype, "size", 2);
79
- __decorateClass([
80
- property({ type: String, reflect: true })
81
- ], LibCheckbox.prototype, "variant", 2);
82
- LibCheckbox = __decorateClass([
83
- customElement("lib-checkbox")
84
- ], LibCheckbox);
73
+ ], LibProgressCircle.prototype, "icon", 2);
74
+ LibProgressCircle = __decorateClass([
75
+ customElement("lib-progress-circle")
76
+ ], LibProgressCircle);
85
77
  export {
86
- LibCheckbox
78
+ LibProgressCircle
87
79
  };
88
80
  //# sourceMappingURL=index32.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index32.js","sources":["../src/components/atoms/checkbox/lib-checkbox.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport type { LibCheckboxSize, LibCheckboxVariant } from './lib-checkbox.html';\nimport { checkboxTemplate } from './lib-checkbox.html';\nimport checkboxCss from './lib-checkbox.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\nexport interface CheckboxChangeDetail {\n checked: boolean;\n value: string;\n}\n\n/**\n * @element lib-checkbox\n *\n * Control de seleccion multiple con soporte para indeterminate.\n *\n * @slot - Contenido de label alternativo (cuando no se usa prop label)\n *\n * @fires change - Emitido al cambiar el estado.\n * detail: { checked: boolean, value: string }\n *\n * @example\n * <lib-checkbox label=\"Aceptar terminos\" value=\"terms\"></lib-checkbox>\n * <lib-checkbox label=\"Seleccion parcial\" indeterminate></lib-checkbox>\n * <lib-checkbox label=\"Acento kaki\" variant=\"kaki\" checked></lib-checkbox>\n */\n@customElement('lib-checkbox')\nexport class LibCheckbox extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(checkboxCss)}`,\n ];\n\n /** Estado marcado */\n @property({ type: Boolean, reflect: true })\n checked = false;\n\n /** Estado deshabilitado */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * Estado indeterminate seleccion parcial de grupo.\n * Muestra un dash en lugar del check.\n */\n @property({ type: Boolean, reflect: true })\n indeterminate = false;\n\n /** Texto principal del label */\n @property({ type: String })\n label = '';\n\n /** Texto secundario bajo el label */\n @property({ type: String })\n sublabel = '';\n\n /** Valor enviado en el evento change */\n @property({ type: String })\n value = '';\n\n /** Tamano del checkbox */\n @property({ type: String, reflect: true })\n size: LibCheckboxSize = 'md';\n\n /** Variante de color */\n @property({ type: String, reflect: true })\n variant: LibCheckboxVariant = 'default';\n\n private _handleChange(e: Event): void {\n const input = e.target as HTMLInputElement;\n this.checked = input.checked;\n this.indeterminate = false; // el click resuelve el estado indeterminate\n\n this.dispatchEvent(\n new CustomEvent<CheckboxChangeDetail>('change', {\n detail: { checked: this.checked, value: this.value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n override render(): TemplateResult {\n return checkboxTemplate({\n checked: this.checked,\n disabled: this.disabled,\n indeterminate: this.indeterminate,\n label: this.label,\n sublabel: this.sublabel,\n value: this.value,\n size: this.size,\n variant: this.variant,\n onChange: this._handleChange.bind(this),\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-checkbox': LibCheckbox;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AA4BO,IAAM,cAAN,cAA0B,WAAW;AAAA,EAArC,cAAA;AAAA,UAAA,GAAA,SAAA;AAQL,SAAA,UAAU;AAIV,SAAA,WAAW;AAOX,SAAA,gBAAgB;AAIhB,SAAA,QAAQ;AAIR,SAAA,WAAW;AAIX,SAAA,QAAQ;AAIR,SAAA,OAAwB;AAIxB,SAAA,UAA8B;AAAA,EAAA;AAAA,EAEtB,cAAc,GAAgB;AACpC,UAAM,QAAQ,EAAE;AAChB,SAAK,UAAU,MAAM;AACrB,SAAK,gBAAgB;AAErB,SAAK;AAAA,MACH,IAAI,YAAkC,UAAU;AAAA,QAC9C,QAAQ,EAAE,SAAS,KAAK,SAAS,OAAO,KAAK,MAAA;AAAA,QAC7C,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AAAA,EAES,SAAyB;AAChC,WAAO,iBAAiB;AAAA,MACtB,SAAS,KAAK;AAAA,MACd,UAAU,KAAK;AAAA,MACf,eAAe,KAAK;AAAA,MACpB,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,UAAU,KAAK,cAAc,KAAK,IAAI;AAAA,IAAA,CACvC;AAAA,EACH;AACF;AApEa,YACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,WAAW,CAAC;AAC9B;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAP/B,YAQX,WAAA,WAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAX/B,YAYX,WAAA,YAAA,CAAA;AAOA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAlB/B,YAmBX,WAAA,iBAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAtBf,YAuBX,WAAA,SAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GA1Bf,YA2BX,WAAA,YAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GA9Bf,YA+BX,WAAA,SAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAlC9B,YAmCX,WAAA,QAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAtC9B,YAuCX,WAAA,WAAA,CAAA;AAvCW,cAAN,gBAAA;AAAA,EADN,cAAc,cAAc;AAAA,GAChB,WAAA;"}
1
+ {"version":3,"file":"index32.js","sources":["../src/components/atoms/progress-circle/lib-progress-circle.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport type { LibProgressCircleSize, LibProgressCircleVariant } from './lib-progress-circle.component.html';\nimport { progressCircleTemplate } from './lib-progress-circle.component.html';\nimport progressCss from './lib-progress-circle.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\n/**\n * @element lib-progress-circle\n *\n * Indicador de progreso circular basado en SVG stroke-dashoffset.\n * Cinco tamaños semánticos, cuatro colores, variante indeterminate.\n *\n * @example uso básico\n * <lib-progress-circle value=\"72\"></lib-progress-circle>\n *\n * @example kaki con subtítulo\n * <lib-progress-circle value=\"61\" variant=\"kaki\" sub=\"61 GB\"></lib-progress-circle>\n *\n * @example — celadon completado con icono\n * <lib-progress-circle value=\"100\" variant=\"celadon\" icon=\"check\" size=\"lg\"></lib-progress-circle>\n *\n * @example — indeterminate\n * <lib-progress-circle indeterminate variant=\"kaki\"></lib-progress-circle>\n *\n * @example — sin label (bare)\n * <lib-progress-circle value=\"38\" size=\"xs\" bare></lib-progress-circle>\n */\n@customElement('lib-progress-circle')\nexport class LibProgressCircle extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(progressCss)}`,\n ];\n\n /** Valor actual */\n @property({ type: Number })\n value = 0;\n\n /** Valor máximo */\n @property({ type: Number })\n max = 100;\n\n /**\n * Tamaño semántico del círculo.\n * Mapea a dimensiones fijas con strokeWidth proporcional:\n * - xs : 40px · stroke 3 (sin label)\n * - sm : 64px · stroke 4\n * - md : 96px · stroke 6 (default)\n * - lg : 128px · stroke 7\n * - xl : 176px · stroke 6\n */\n @property({ type: String, reflect: true })\n size: LibProgressCircleSize = 'md';\n\n /**\n * Sobreescribe el strokeWidth por defecto del tamaño.\n * null → usa el valor canónico del tamaño seleccionado.\n */\n @property({ type: Number, attribute: 'stroke-width' })\n strokeWidth: number | null = null;\n\n /**\n * Paleta de color del arco.\n * El track toma automáticamente el tono -100 de cada variante.\n * - default : washi-900 (tinta)\n * - kaki : persimmon orgánico\n * - celadon : jade sereno\n * - error : estado crítico\n */\n @property({ type: String, reflect: true })\n variant: LibProgressCircleVariant = 'default';\n\n /**\n * Modo de carga de duración desconocida.\n * El arco es un segmento corto que rota continuamente.\n * Ignora `value`, `bare`, `sub` e `icon`.\n */\n @property({ type: Boolean, reflect: true })\n indeterminate = false;\n\n /** Oculta el label central (solo muestra el arco) */\n @property({ type: Boolean, reflect: true })\n bare = false;\n\n /** Subtítulo bajo el valor numérico. Oculto en xs. */\n @property({ type: String })\n sub = '';\n\n /**\n * Icono SVG en el centro en lugar del texto numérico.\n * - 'check' : polyline checkmark en color de la variante\n * - null : muestra el valor (default)\n */\n @property({ type: String })\n icon: 'check' | null = null;\n\n override render(): TemplateResult {\n return progressCircleTemplate({\n value: this.value,\n max: this.max,\n size: this.size,\n strokeWidth: this.strokeWidth,\n variant: this.variant,\n indeterminate: this.indeterminate,\n bare: this.bare,\n sub: this.sub,\n icon: this.icon,\n });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-progress-circle': LibProgressCircle;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AA6BO,IAAM,oBAAN,cAAgC,WAAW;AAAA,EAA3C,cAAA;AAAA,UAAA,GAAA,SAAA;AAQL,SAAA,QAAQ;AAIR,SAAA,MAAM;AAYN,SAAA,OAA8B;AAO9B,SAAA,cAA6B;AAW7B,SAAA,UAAoC;AAQpC,SAAA,gBAAgB;AAIhB,SAAA,OAAO;AAIP,SAAA,MAAM;AAQN,SAAA,OAAuB;AAAA,EAAA;AAAA,EAEd,SAAyB;AAChC,WAAO,uBAAuB;AAAA,MAC5B,OAAe,KAAK;AAAA,MACpB,KAAe,KAAK;AAAA,MACpB,MAAe,KAAK;AAAA,MACpB,aAAe,KAAK;AAAA,MACpB,SAAe,KAAK;AAAA,MACpB,eAAe,KAAK;AAAA,MACpB,MAAe,KAAK;AAAA,MACpB,KAAe,KAAK;AAAA,MACpB,MAAe,KAAK;AAAA,IAAA,CACrB;AAAA,EACH;AACF;AAjFa,kBACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,WAAW,CAAC;AAC9B;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAPf,kBAQX,WAAA,SAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAXf,kBAYX,WAAA,OAAA,CAAA;AAYA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAvB9B,kBAwBX,WAAA,QAAA,CAAA;AAOA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,gBAAgB;AAAA,GA9B1C,kBA+BX,WAAA,eAAA,CAAA;AAWA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAzC9B,kBA0CX,WAAA,WAAA,CAAA;AAQA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAjD/B,kBAkDX,WAAA,iBAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GArD/B,kBAsDX,WAAA,QAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAzDf,kBA0DX,WAAA,OAAA,CAAA;AAQA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAjEf,kBAkEX,WAAA,QAAA,CAAA;AAlEW,oBAAN,gBAAA;AAAA,EADN,cAAc,qBAAqB;AAAA,GACvB,iBAAA;"}
package/dist/index320.js CHANGED
@@ -1,85 +1,76 @@
1
- import { html } from "lit";
2
- const closeSvg = html`
3
- <svg width="12" height="12" viewBox="0 0 12 12" fill="none"
4
- stroke="currentColor" stroke-width="1.5" stroke-linecap="round">
5
- <path d="M1 1l10 10M11 1L1 11"/>
6
- </svg>
7
- `;
8
- const dangerSvg = html`
9
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none"
10
- stroke="var(--color-error)" stroke-width="1.5"
11
- stroke-linecap="round" stroke-linejoin="round">
12
- <path d="M8 2L14.5 13H1.5L8 2z"/>
13
- <path d="M8 6v3M8 11v.5"/>
14
- </svg>
15
- `;
16
- const warningSvg = html`
17
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none"
18
- stroke="var(--color-warning)" stroke-width="1.5"
19
- stroke-linecap="round" stroke-linejoin="round">
20
- <circle cx="8" cy="8" r="6"/>
21
- <path d="M8 5v3M8 10v.5"/>
22
- </svg>
23
- `;
24
- function dialogTemplate(props) {
25
- const {
26
- eyebrow,
27
- dlgTitle,
28
- variant,
29
- size,
30
- layout,
31
- footerMeta,
32
- onClose
33
- } = props;
34
- const layoutCls = layout === "drawer-right" ? "dlg-drawer-right" : layout === "drawer-bottom" ? "dlg-drawer-bottom" : "";
35
- const alertCls = layout === "alert" ? "dlg-alert" : "";
36
- const sizeCls = `dlg-${size}`;
37
- const dlgCls = `dlg ${sizeCls} ${layoutCls} ${alertCls}`.trim();
38
- const hasIcon = variant === "danger" || variant === "warning";
39
- const headerIcon = hasIcon ? html`<div class="dlg-header-icon">
40
- ${variant === "danger" ? dangerSvg : warningSvg}
41
- </div>` : null;
1
+ import { nothing, svg, html } from "lit";
2
+ const SIZE_MAP = {
3
+ xs: { px: 40, stroke: 3 },
4
+ sm: { px: 64, stroke: 4 },
5
+ md: { px: 96, stroke: 6 },
6
+ lg: { px: 128, stroke: 7 },
7
+ xl: { px: 176, stroke: 6 }
8
+ };
9
+ function progressCircleTemplate(props) {
10
+ const { px, stroke: defaultStroke } = SIZE_MAP[props.size];
11
+ const sw = props.strokeWidth ?? defaultStroke;
12
+ const r = (px - sw) / 2;
13
+ const circ = 2 * Math.PI * r;
14
+ const offset = props.indeterminate ? 0 : circ * (1 - Math.min(props.value, props.max) / props.max);
15
+ const pct = Math.round(props.value / props.max * 100);
42
16
  return html`
43
- <dialog
44
- class="${dlgCls}"
45
- @cancel="${(e) => {
46
- e.preventDefault();
47
- onClose();
48
- }}"
49
- @click="${(e) => {
50
- if (e.target.tagName === "DIALOG") onClose();
51
- }}"
17
+ <div
18
+ class="pc"
19
+ style="width:${px}px; height:${px}px;"
20
+ role="progressbar"
21
+ aria-valuenow=${props.indeterminate ? nothing : props.value}
22
+ aria-valuemin="0"
23
+ aria-valuemax=${props.max}
24
+ aria-label=${props.indeterminate ? "Cargando…" : `${pct}%`}
52
25
  >
53
- <!-- HEADER -->
54
- <div class="dlg-header">
55
- ${headerIcon}
56
- <div class="dlg-header-text" style="${hasIcon ? "margin-left: var(--lib-space-md)" : ""}">
57
- ${eyebrow ? html`<p class="dlg-eyebrow">${eyebrow}</p>` : null}
58
- <slot name="header">
59
- <h2 class="dlg-title">${dlgTitle}</h2>
60
- </slot>
61
- </div>
62
- <button
63
- class="dlg-close"
64
- aria-label="Cerrar"
65
- @click="${() => onClose()}"
66
- >${closeSvg}</button>
67
- </div>
26
+ ${svg`
27
+ <svg
28
+ width="${px}"
29
+ height="${px}"
30
+ viewBox="0 0 ${px} ${px}"
31
+ class="pc__svg ${props.indeterminate ? "pc__svg--spin" : ""}"
32
+ >
33
+ <circle
34
+ class="pc__track"
35
+ cx="${px / 2}"
36
+ cy="${px / 2}"
37
+ r="${r}"
38
+ stroke-width="${sw}"
39
+ />
40
+ <circle
41
+ class="pc__arc ${props.indeterminate ? "pc__arc--indet" : ""}"
42
+ cx="${px / 2}"
43
+ cy="${px / 2}"
44
+ r="${r}"
45
+ stroke-width="${sw}"
46
+ stroke-dasharray="${props.indeterminate ? `${circ * 0.3} ${circ}` : circ}"
47
+ stroke-dashoffset="${props.indeterminate ? 0 : offset}"
48
+ stroke-linecap="round"
49
+ />
50
+ </svg>
51
+ `}
68
52
 
69
- <!-- BODY -->
70
- <div class="dlg-body">
71
- <slot></slot>
72
- </div>
73
-
74
- <!-- FOOTER -->
75
- <div class="dlg-footer">
76
- ${footerMeta ? html`<span class="dlg-footer-meta">${footerMeta}</span>` : null}
77
- <slot name="footer"></slot>
78
- </div>
79
- </dialog>
53
+ ${!props.bare && !props.indeterminate ? html`
54
+ <div class="pc__label">
55
+ ${props.icon === "check" ? html`
56
+ <svg class="pc__check" width="28" height="28" viewBox="0 0 28 28" fill="none" aria-hidden="true">
57
+ <polyline
58
+ points="6,14 11,20 22,9"
59
+ stroke-width="2"
60
+ stroke-linecap="round"
61
+ stroke-linejoin="round"
62
+ />
63
+ </svg>
64
+ ` : html`
65
+ <span class="pc__value">${pct}%</span>
66
+ ${props.sub ? html`<span class="pc__sub">${props.sub}</span>` : nothing}
67
+ `}
68
+ </div>
69
+ ` : nothing}
70
+ </div>
80
71
  `;
81
72
  }
82
73
  export {
83
- dialogTemplate
74
+ progressCircleTemplate
84
75
  };
85
76
  //# sourceMappingURL=index320.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index320.js","sources":["../src/components/organisms/dialog/lib-dialog.html.ts"],"sourcesContent":["import { html, TemplateResult } from 'lit';\nimport type { DialogTemplateProps } from './lib-dialog.types';\n\n/* SVG del botón de cierre reutilizable */\nconst closeSvg = html`\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\">\n <path d=\"M1 1l10 10M11 1L1 11\"/>\n </svg>\n`;\n\n/* Icono para variante danger */\nconst dangerSvg = html`\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n stroke=\"var(--color-error)\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M8 2L14.5 13H1.5L8 2z\"/>\n <path d=\"M8 6v3M8 11v.5\"/>\n </svg>\n`;\n\n/* Icono para variante warning */\nconst warningSvg = html`\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n stroke=\"var(--color-warning)\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"8\" cy=\"8\" r=\"6\"/>\n <path d=\"M8 5v3M8 10v.5\"/>\n </svg>\n`;\n\nexport function dialogTemplate(props: DialogTemplateProps): TemplateResult {\n const {\n eyebrow, dlgTitle, variant, size,\n layout, footerMeta, onClose,\n } = props;\n\n /* ── Clases del <dialog> ── */\n const layoutCls =\n layout === 'drawer-right' ? 'dlg-drawer-right' :\n layout === 'drawer-bottom' ? 'dlg-drawer-bottom' :\n '';\n const alertCls = layout === 'alert' ? 'dlg-alert' : '';\n const sizeCls = `dlg-${size}`;\n const dlgCls = `dlg ${sizeCls} ${layoutCls} ${alertCls}`.trim();\n\n /* ── Icono de header (solo danger / warning) ── */\n const hasIcon = variant === 'danger' || variant === 'warning';\n const headerIcon = hasIcon\n ? html`<div class=\"dlg-header-icon\">\n ${ variant === 'danger' ? dangerSvg : warningSvg }\n </div>`\n : null;\n\n return html`\n <dialog\n class=\"${dlgCls}\"\n @cancel=\"${(e: Event): void => { e.preventDefault(); onClose(); }}\"\n @click=\"${(e: MouseEvent): void => {\n /* Cierre al click sobre el backdrop (target === dialog) */\n if ((e.target as HTMLElement).tagName === 'DIALOG') onClose();\n }}\"\n >\n <!-- HEADER -->\n <div class=\"dlg-header\">\n ${headerIcon}\n <div class=\"dlg-header-text\" style=\"${hasIcon ? 'margin-left: var(--lib-space-md)' : ''}\">\n ${eyebrow ? html`<p class=\"dlg-eyebrow\">${eyebrow}</p>` : null}\n <slot name=\"header\">\n <h2 class=\"dlg-title\">${dlgTitle}</h2>\n </slot>\n </div>\n <button\n class=\"dlg-close\"\n aria-label=\"Cerrar\"\n @click=\"${(): void => onClose()}\"\n >${closeSvg}</button>\n </div>\n\n <!-- BODY -->\n <div class=\"dlg-body\">\n <slot></slot>\n </div>\n\n <!-- FOOTER -->\n <div class=\"dlg-footer\">\n ${footerMeta ? html`<span class=\"dlg-footer-meta\">${footerMeta}</span>` : null}\n <slot name=\"footer\"></slot>\n </div>\n </dialog>\n `;\n}"],"names":[],"mappings":";AAIA,MAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAQjB,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUlB,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASZ,SAAS,eAAe,OAA4C;AACzE,QAAM;AAAA,IACJ;AAAA,IAAS;AAAA,IAAU;AAAA,IAAS;AAAA,IAC5B;AAAA,IAAQ;AAAA,IAAY;AAAA,EAAA,IAClB;AAGJ,QAAM,YACJ,WAAW,iBAAkB,qBAC7B,WAAW,kBAAkB,sBAC7B;AACF,QAAM,WAAW,WAAW,UAAU,cAAc;AACpD,QAAM,UAAW,OAAO,IAAI;AAC5B,QAAM,SAAW,OAAO,OAAO,IAAI,SAAS,IAAI,QAAQ,GAAG,KAAA;AAG3D,QAAM,UAAU,YAAY,YAAY,YAAY;AACpD,QAAM,aAAa,UACf;AAAA,UACK,YAAY,WAAW,YAAY,UAAW;AAAA,gBAEnD;AAEJ,SAAO;AAAA;AAAA,eAEM,MAAM;AAAA,iBACJ,CAAC,MAAmB;AAAE,MAAE,eAAA;AAAkB,YAAA;AAAA,EAAW,CAAC;AAAA,gBACvD,CAAC,MAAwB;AAEjC,QAAK,EAAE,OAAuB,YAAY,SAAU,SAAA;AAAA,EACtD,CAAC;AAAA;AAAA;AAAA;AAAA,UAIG,UAAU;AAAA,8CAC0B,UAAU,qCAAqC,EAAE;AAAA,YACnF,UAAU,8BAA8B,OAAO,SAAS,IAAI;AAAA;AAAA,oCAEpC,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAMxB,MAAY,SAAS;AAAA,WAC9B,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAUT,aAAa,qCAAqC,UAAU,YAAY,IAAI;AAAA;AAAA;AAAA;AAAA;AAKtF;"}
1
+ {"version":3,"file":"index320.js","sources":["../src/components/atoms/progress-circle/lib-progress-circle.component.html.ts"],"sourcesContent":["import { html, svg, nothing, TemplateResult } from 'lit';\n\nexport type LibProgressCircleSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type LibProgressCircleVariant = 'default' | 'kaki' | 'celadon' | 'error';\n\n/** Dimensiones canónicas por tamaño */\nconst SIZE_MAP: Record<LibProgressCircleSize, { px: number; stroke: number }> = {\n xs: { px: 40, stroke: 3 },\n sm: { px: 64, stroke: 4 },\n md: { px: 96, stroke: 6 },\n lg: { px: 128, stroke: 7 },\n xl: { px: 176, stroke: 6 },\n};\n\nexport interface ProgressCircleTemplateProps {\n value: number;\n max: number;\n size: LibProgressCircleSize;\n /** Sobreescribe el strokeWidth por defecto del tamaño */\n strokeWidth: number | null;\n variant: LibProgressCircleVariant;\n indeterminate: boolean;\n /** Oculta el label central */\n bare: boolean;\n /** Subtítulo bajo el valor numérico */\n sub: string;\n /** Icono SVG en el centro en lugar del texto */\n icon: 'check' | null;\n}\n\n/**\n * Renderiza el SVG circular y el label central.\n *\n * Fórmula del arco:\n * r = (size - strokeWidth) / 2\n * circumference = 2π × r\n * offset = circumference × (1 − value/max)\n *\n * El SVG se rota -90° en CSS para que el arco empiece arriba.\n */\nexport function progressCircleTemplate(props: ProgressCircleTemplateProps): TemplateResult {\n const { px, stroke: defaultStroke } = SIZE_MAP[props.size];\n const sw = props.strokeWidth ?? defaultStroke;\n\n const r = (px - sw) / 2;\n const circ = 2 * Math.PI * r;\n\n // Indeterminate: arco corto fijo; determinado: offset calculado\n const offset = props.indeterminate\n ? 0 // stroke-dasharray en CSS controla la longitud del segmento\n : circ * (1 - Math.min(props.value, props.max) / props.max);\n\n const pct = Math.round((props.value / props.max) * 100);\n\n return html`\n <div\n class=\"pc\"\n style=\"width:${px}px; height:${px}px;\"\n role=\"progressbar\"\n aria-valuenow=${props.indeterminate ? nothing : props.value}\n aria-valuemin=\"0\"\n aria-valuemax=${props.max}\n aria-label=${props.indeterminate ? 'Cargando…' : `${pct}%`}\n >\n ${svg`\n <svg\n width=\"${px}\"\n height=\"${px}\"\n viewBox=\"0 0 ${px} ${px}\"\n class=\"pc__svg ${props.indeterminate ? 'pc__svg--spin' : ''}\"\n >\n <circle\n class=\"pc__track\"\n cx=\"${px / 2}\"\n cy=\"${px / 2}\"\n r=\"${r}\"\n stroke-width=\"${sw}\"\n />\n <circle\n class=\"pc__arc ${props.indeterminate ? 'pc__arc--indet' : ''}\"\n cx=\"${px / 2}\"\n cy=\"${px / 2}\"\n r=\"${r}\"\n stroke-width=\"${sw}\"\n stroke-dasharray=\"${props.indeterminate ? `${circ * 0.3} ${circ}` : circ}\"\n stroke-dashoffset=\"${props.indeterminate ? 0 : offset}\"\n stroke-linecap=\"round\"\n />\n </svg>\n `}\n\n ${!props.bare && !props.indeterminate ? html`\n <div class=\"pc__label\">\n ${props.icon === 'check' ? html`\n <svg class=\"pc__check\" width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" aria-hidden=\"true\">\n <polyline\n points=\"6,14 11,20 22,9\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n ` : html`\n <span class=\"pc__value\">${pct}%</span>\n ${props.sub ? html`<span class=\"pc__sub\">${props.sub}</span>` : nothing}\n `}\n </div>\n ` : nothing}\n </div>\n `;\n}"],"names":[],"mappings":";AAMA,MAAM,WAA0E;AAAA,EAC9E,IAAI,EAAE,IAAI,IAAK,QAAQ,EAAA;AAAA,EACvB,IAAI,EAAE,IAAI,IAAK,QAAQ,EAAA;AAAA,EACvB,IAAI,EAAE,IAAI,IAAK,QAAQ,EAAA;AAAA,EACvB,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAA;AAAA,EACvB,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAA;AACzB;AA4BO,SAAS,uBAAuB,OAAoD;AACzF,QAAM,EAAE,IAAI,QAAQ,kBAAkB,SAAS,MAAM,IAAI;AACzD,QAAM,KAAK,MAAM,eAAe;AAEhC,QAAM,KAAQ,KAAK,MAAM;AACzB,QAAM,OAAO,IAAI,KAAK,KAAK;AAG3B,QAAM,SAAS,MAAM,gBACjB,IACA,QAAQ,IAAI,KAAK,IAAI,MAAM,OAAO,MAAM,GAAG,IAAI,MAAM;AAEzD,QAAM,MAAM,KAAK,MAAO,MAAM,QAAQ,MAAM,MAAO,GAAG;AAEtD,SAAO;AAAA;AAAA;AAAA,qBAGY,EAAE,cAAc,EAAE;AAAA;AAAA,sBAEjB,MAAM,gBAAgB,UAAU,MAAM,KAAK;AAAA;AAAA,sBAE3C,MAAM,GAAG;AAAA,mBACZ,MAAM,gBAAgB,cAAc,GAAG,GAAG,GAAG;AAAA;AAAA,QAExD;AAAA;AAAA,mBAEW,EAAE;AAAA,oBACD,EAAE;AAAA,yBACG,EAAE,IAAI,EAAE;AAAA,2BACN,MAAM,gBAAgB,kBAAkB,EAAE;AAAA;AAAA;AAAA;AAAA,kBAInD,KAAK,CAAC;AAAA,kBACN,KAAK,CAAC;AAAA,iBACP,CAAC;AAAA,4BACU,EAAE;AAAA;AAAA;AAAA,6BAGD,MAAM,gBAAgB,mBAAmB,EAAE;AAAA,kBACtD,KAAK,CAAC;AAAA,kBACN,KAAK,CAAC;AAAA,iBACP,CAAC;AAAA,4BACU,EAAE;AAAA,gCACE,MAAM,gBAAgB,GAAG,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI;AAAA,iCACnD,MAAM,gBAAgB,IAAI,MAAM;AAAA;AAAA;AAAA;AAAA,OAI1D;AAAA;AAAA,QAEC,CAAC,MAAM,QAAQ,CAAC,MAAM,gBAAgB;AAAA;AAAA,YAElC,MAAM,SAAS,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cASvB;AAAA,sCACwB,GAAG;AAAA,cAC3B,MAAM,MAAM,6BAA6B,MAAM,GAAG,YAAY,OAAO;AAAA,WACxE;AAAA;AAAA,UAED,OAAO;AAAA;AAAA;AAGjB;"}
package/dist/index321.js CHANGED
@@ -1,5 +1,5 @@
1
- const dialogCss = '@layer tokens,reset,components;@layer reset{:host{display:contents}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}}@layer components{dialog::backdrop{background:#120e0a00;-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0);transition:background .3s,backdrop-filter .3s}dialog.is-open::backdrop{background:#120e0a8c;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}dialog.dlg{position:fixed;top:0;right:0;bottom:0;left:0;margin:auto;padding:0;border:1px solid var(--border-default);background:var(--bg-elevated);box-shadow:var(--shadow-xl);max-height:calc(100vh - var(--lib-space-xl));display:flex;flex-direction:column;overflow:hidden;opacity:0;transform:translateY(12px) scale(.97);transition:opacity var(--duration-slow) var(--ease-out),transform var(--duration-slow) var(--ease-bounce)}dialog.dlg[open]{opacity:1;transform:translateY(0) scale(1)}dialog.dlg.is-closing{opacity:0;transform:translateY(6px) scale(.98);transition:opacity var(--duration-base) var(--ease-out),transform var(--duration-base) var(--ease-out)}.dlg-sm{width:min(400px,calc(100vw - var(--lib-space-md)))}.dlg-md{width:min(540px,calc(100vw - var(--lib-space-md)))}.dlg-lg{width:min(720px,calc(100vw - var(--lib-space-md)))}.dlg-xl{width:min(960px,calc(100vw - var(--lib-space-md)))}.dlg-full{width:100vw;height:100vh;max-height:100vh;margin:0}.dlg-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--lib-space-md);padding:var(--lib-space-xl) var(--lib-space-xl) var(--lib-space-lg);border-bottom:1px solid var(--border-subtle);flex-shrink:0}.dlg-header-text{flex:1}.dlg-header-icon{width:36px;height:36px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border-subtle);flex-shrink:0;margin-top:2px}.dlg-eyebrow{font-family:var(--lib-font-mono);font-size:10px;letter-spacing:var(--tracking-widest);text-transform:uppercase;color:var(--text-muted);margin-bottom:var(--lib-space-xs)}.dlg-title{font-family:var(--lib-font-display);font-size:var(--text-xl);font-weight:var(--weight-light);letter-spacing:var(--tracking-tight);line-height:1.2;color:var(--text-primary)}.dlg-title em{font-style:italic;color:var(--text-accent)}.dlg-close{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border:1px solid var(--border-subtle);background:transparent;cursor:pointer;color:var(--text-muted);flex-shrink:0;transition:border-color var(--duration-fast),color var(--duration-fast),background var(--duration-fast)}.dlg-close:hover{border-color:var(--border-default);color:var(--text-primary);background:var(--bg-surface)}.dlg-close svg{display:block;pointer-events:none}.dlg-body{padding:var(--lib-space-xl);overflow-y:auto;flex:1;scrollbar-width:thin;scrollbar-color:var(--color-washi-300) transparent;font-size:var(--text-sm);color:var(--text-secondary);line-height:var(--leading-relaxed)}.dlg-footer{padding:var(--lib-space-lg) var(--lib-space-xl);border-top:1px solid var(--border-subtle);display:flex;align-items:center;justify-content:flex-end;gap:var(--lib-space-sm);flex-shrink:0;background:var(--bg-surface)}.dlg-footer-meta{margin-right:auto;font-family:var(--lib-font-mono);font-size:10px;letter-spacing:var(--tracking-wide);color:var(--text-muted)}.dlg-divider{border:none;border-top:1px solid var(--border-subtle);margin:var(--lib-space-lg) 0}:host([variant="danger"]) .dlg-header{border-bottom-color:var(--color-error-border, #E8B4AE);background:var(--color-error-bg, #FDF0EE)}:host([variant="danger"]) .dlg-title{color:var(--color-error)}:host([variant="danger"]) .dlg-eyebrow{color:var(--color-error);opacity:.6}:host([variant="danger"]) .dlg-header-icon{border-color:var(--color-error-border, #E8B4AE)}:host([variant="danger"]) .dlg-close{border-color:var(--color-error-border, #E8B4AE)}:host([variant="warning"]) .dlg-header{border-bottom-color:var(--color-warning-border, #E8D0AE);background:var(--color-warning-bg, #FDF5EC)}:host([variant="warning"]) .dlg-title{color:var(--color-warning)}:host([variant="warning"]) .dlg-eyebrow{color:var(--color-warning);opacity:.6}:host([variant="warning"]) .dlg-header-icon{border-color:var(--color-warning-border, #E8D0AE)}:host([variant="warning"]) .dlg-close{border-color:var(--color-warning-border, #E8D0AE)}:host([variant="dark"]) dialog.dlg{background:var(--color-washi-950);border-color:#190f0a}:host([variant="dark"]) .dlg-header{border-bottom-color:#150a06}:host([variant="dark"]) .dlg-title{color:#faf7f4d9}:host([variant="dark"]) .dlg-eyebrow{color:#3c302a}:host([variant="dark"]) .dlg-close{border-color:#1e130e;color:#433831}:host([variant="dark"]) .dlg-close:hover{border-color:#372b26;color:#faf7f499;background:#100704}:host([variant="dark"]) .dlg-body{color:#6d6059}:host([variant="dark"]) .dlg-footer{background:#070201;border-top-color:#150a06}:host([variant="dark"]) .dlg-footer-meta{color:#312620}:host([variant="dark"]) .dlg-divider{border-top-color:#150a06}:host([layout="drawer-right"]) dialog.dlg{inset:0 0 0 auto;margin:0;height:100vh;max-height:100vh;border-top:none;border-bottom:none;border-right:none;opacity:0;transform:translate(40px);transition:opacity var(--duration-slow) var(--ease-out),transform var(--duration-slow) var(--ease-out)}:host([layout="drawer-right"]) dialog.dlg[open]{opacity:1;transform:translate(0)}:host([layout="drawer-right"]) dialog.dlg.is-closing{opacity:0;transform:translate(40px)}:host([layout="drawer-bottom"]) dialog.dlg{inset:auto 0 0;margin:0;width:100%;max-width:100%;border-left:none;border-right:none;border-bottom:none;opacity:0;transform:translateY(40px);transition:opacity var(--duration-slow) var(--ease-out),transform var(--duration-slow) var(--ease-out)}:host([layout="drawer-bottom"]) dialog.dlg[open]{opacity:1;transform:translateY(0)}:host([layout="drawer-bottom"]) dialog.dlg.is-closing{opacity:0;transform:translateY(40px)}:host([layout="alert"]) .dlg-header{padding:var(--lib-space-lg) var(--lib-space-lg) var(--lib-space-md)}:host([layout="alert"]) .dlg-body{padding:0 var(--lib-space-lg) var(--lib-space-lg)}:host([layout="alert"]) .dlg-footer{padding:var(--lib-space-md) var(--lib-space-lg)}:host([layout="alert"]) .dlg-title{font-family:var(--lib-font-body);font-size:var(--text-md)}@media(max-width:768px){.dlg-sm,.dlg-md,.dlg-lg,.dlg-xl{width:calc(100vw - var(--lib-space-md));margin:auto}}}';
1
+ const progressCss = '@layer tokens,reset,components;@layer reset{:host{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;flex-shrink:0}*,*:before,*:after{box-sizing:border-box}}@layer components{.pc{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.pc__svg{display:block;transform:rotate(-90deg);transform-origin:center;overflow:visible}.pc__track,.pc__arc{fill:none;stroke-linecap:round}.pc__track{stroke:var(--color-washi-200)}.pc__arc{stroke:var(--color-washi-900);transition:stroke-dashoffset .7s cubic-bezier(0,0,.2,1),stroke .3s}:host([variant="kaki"]) .pc__arc{stroke:var(--color-kaki-500)}:host([variant="kaki"]) .pc__track{stroke:var(--color-kaki-100)}:host([variant="celadon"]) .pc__arc{stroke:var(--color-celadon-500)}:host([variant="celadon"]) .pc__track{stroke:var(--color-celadon-100)}:host([variant="error"]) .pc__arc{stroke:var(--color-error)}:host([variant="error"]) .pc__track{stroke:#f5ddd9}.pc__label{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;pointer-events:none}.pc__value{font-family:var(--lib-font-mono);font-weight:var(--weight-regular);letter-spacing:var(--tracking-wide);color:var(--text-primary);line-height:1}.pc__sub{font-family:var(--lib-font-mono);letter-spacing:var(--tracking-widest);text-transform:uppercase;color:var(--text-muted);line-height:1}:host([size="xs"]) .pc__label{display:none}:host([size="sm"]) .pc__value{font-size:var(--text-xs)}:host([size="sm"]) .pc__sub{font-size:8px}:host([size="md"]) .pc__value{font-size:var(--text-md)}:host([size="md"]) .pc__sub{font-size:9px}:host([size="lg"]) .pc__value{font-size:var(--text-xl)}:host([size="lg"]) .pc__sub{font-size:var(--text-xs)}:host([size="xl"]) .pc__value{font-size:2rem}:host([size="xl"]) .pc__sub{font-size:var(--text-xs)}:host([variant="kaki"]) .pc__value{color:var(--color-kaki-600)}:host([variant="celadon"]) .pc__value{color:var(--color-celadon-600)}:host([variant="error"]) .pc__value{color:var(--color-error)}.pc__check polyline{stroke:var(--color-celadon-500)}:host([variant="kaki"]) .pc__check polyline{stroke:var(--color-kaki-500)}@keyframes pc-spin{to{transform:rotate(270deg)}}.pc__svg--spin{animation:pc-spin 1.2s linear infinite;transform-origin:center}.pc__arc--indet{transition:none}@media(prefers-reduced-motion:reduce){.pc__arc{transition:none}.pc__svg--spin{animation:none}}}';
2
2
  export {
3
- dialogCss as default
3
+ progressCss as default
4
4
  };
5
5
  //# sourceMappingURL=index321.js.map