@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":"index216.js","sources":["../src/components/atoms/step/lib-step.html.ts"],"sourcesContent":["import { html, nothing, svg, TemplateResult } from 'lit';\nimport type { LibStepStatus, LibStepOrientation } from './lib-step.types';\n\nexport type { LibStepStatus, LibStepOrientation } from './lib-step.types';\nexport type { LibStepVariant, LibStepSize } from './lib-step.types';\n\nexport interface StepTemplateProps {\n index: number;\n status: LibStepStatus;\n label: string;\n sub: string;\n last: boolean;\n orientation: LibStepOrientation;\n}\n\n/* ── SVG icons ─────────────────────────────────────────────── */\nconst iconCheck = svg`\n <svg class=\"step-icon\" viewBox=\"0 0 12 12\" aria-hidden=\"true\">\n <polyline points=\"2,6 5,9 10,3\"/>\n </svg>\n`;\n\nconst iconError = svg`\n <svg class=\"step-icon\" viewBox=\"0 0 14 14\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n aria-hidden=\"true\">\n <line x1=\"7\" y1=\"3\" x2=\"7\" y2=\"7.5\"/>\n <circle cx=\"7\" cy=\"10\" r=\"0.75\" fill=\"currentColor\" stroke=\"none\"/>\n </svg>\n`;\n\nfunction nodeContent(props: StepTemplateProps): TemplateResult {\n if (props.status === 'completed') return iconCheck;\n if (props.status === 'error') return iconError;\n return html`${props.index}`;\n}\n\n/**\n * Template para lib-step.\n *\n * Estructura (orientación horizontal):\n * .step-node — círculo/cuadrado con número o icono\n * .step-connector— línea que conecta con el siguiente paso (oculta en [last])\n * .step-text — label + sub\n *\n * Estructura (orientación vertical):\n * .step-node\n * .step-connector (vertical)\n * .step-body\n * .step-title\n * .step-content ← <slot> para contenido descriptivo\n */\nexport function stepTemplate(props: StepTemplateProps): TemplateResult {\n const isVertical = props.orientation === 'vertical';\n\n return html`\n <div\n class=\"step-inner\"\n role=\"listitem\"\n aria-current=${props.status === 'active' ? 'step' : nothing}\n >\n <div class=\"step-node\" aria-hidden=\"true\">\n ${nodeContent(props)}\n </div>\n\n ${!props.last ? html`<div class=\"step-connector\" aria-hidden=\"true\"></div>` : nothing}\n\n ${isVertical\n ? html`\n <div class=\"step-body\">\n <p class=\"step-title\">${props.label}</p>\n ${props.sub ? html`<p class=\"step-sub\">${props.sub}</p>` : nothing}\n <div class=\"step-content\"><slot></slot></div>\n </div>\n `\n : html`\n <div class=\"step-text\">\n <span class=\"step-label\">${props.label}</span>\n ${props.sub ? html`<span class=\"step-sub\">${props.sub}</span>` : nothing}\n </div>\n `\n }\n </div>\n `;\n}"],"names":[],"mappings":";AAgBA,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAMlB,MAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASlB,SAAS,YAAY,OAA0C;AAC7D,MAAI,MAAM,WAAW,YAAa,QAAO;AACzC,MAAI,MAAM,WAAW,QAAa,QAAO;AACzC,SAAO,OAAO,MAAM,KAAK;AAC3B;AAiBO,SAAS,aAAa,OAA0C;AACrE,QAAM,aAAa,MAAM,gBAAgB;AAEzC,SAAO;AAAA;AAAA;AAAA;AAAA,qBAIY,MAAM,WAAW,WAAW,SAAS,OAAO;AAAA;AAAA;AAAA,UAGvD,YAAY,KAAK,CAAC;AAAA;AAAA;AAAA,QAGpB,CAAC,MAAM,OAAO,8DAA8D,OAAO;AAAA;AAAA,QAEnF,aACE;AAAA;AAAA,oCAE0B,MAAM,KAAK;AAAA,cACjC,MAAM,MAAM,2BAA2B,MAAM,GAAG,SAAS,OAAO;AAAA;AAAA;AAAA,YAIpE;AAAA;AAAA,uCAE6B,MAAM,KAAK;AAAA,cACpC,MAAM,MAAM,8BAA8B,MAAM,GAAG,YAAY,OAAO;AAAA;AAAA,SAG9E;AAAA;AAAA;AAGN;"}
1
+ {"version":3,"file":"index216.js","sources":["../src/components/molecules/input/lib-input.html.ts"],"sourcesContent":["import { html, nothing, TemplateResult } from 'lit';\n\nexport interface InputTemplateProps {\n uuid: string;\n type: 'text' | 'email' | 'password';\n label: string;\n placeholder: string;\n required: boolean;\n disabled: boolean;\n error: boolean;\n errorMessage: string;\n value: string;\n showPassword: boolean;\n handleInput: (e: InputEvent) => void;\n handleTogglePassword: () => void;\n}\n\n/**\n * Plantilla base para el componente lib-input.\n * Renderiza un campo de texto con label, slots prefix/suffix y estado de error.\n */\nexport function inputTemplate(props: InputTemplateProps): TemplateResult {\n const inputType = props.type === 'password' && props.showPassword ? 'text' : props.type;\n\n return html`\n <div class=\"input-group ${props.error ? 'has-error' : ''} ${props.disabled ? 'is-disabled' : ''}\">\n\n ${props.label ? html`\n <label\n class=\"input-label\"\n for=\"${props.uuid}\"\n >\n ${props.label}\n ${props.required ? html`<span class=\"input-required\" aria-hidden=\"true\">*</span>` : nothing}\n </label>\n ` : nothing}\n\n <div class=\"input-wrapper\">\n <slot name=\"prefix\"></slot>\n\n <input\n id=\"${props.uuid}\"\n type=\"${inputType}\"\n placeholder=\"${props.placeholder}\"\n ?required=\"${props.required}\"\n ?disabled=\"${props.disabled}\"\n aria-invalid=\"${props.error}\"\n aria-describedby=\"${props.error && props.errorMessage ? `${props.uuid}-error` : nothing}\"\n .value=\"${props.value}\"\n @input=\"${props.handleInput}\"\n />\n\n ${props.type === 'password' ? html`\n <button\n class=\"input-password-toggle\"\n type=\"button\"\n @click=\"${props.handleTogglePassword}\"\n aria-label=\"${props.showPassword ? 'Ocultar contraseña' : 'Mostrar contraseña'}\"\n >\n ${props.showPassword ? html`\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94\"/>\n <path d=\"M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19\"/>\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"/>\n </svg>\n ` : html`\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"/>\n <circle cx=\"12\" cy=\"12\" r=\"3\"/>\n </svg>\n `}\n </button>\n ` : nothing}\n\n <slot name=\"suffix\"></slot>\n </div>\n\n ${props.error && props.errorMessage ? html`\n <span class=\"input-error-message\" id=\"${props.uuid}-error\" role=\"alert\">\n ${props.errorMessage}\n </span>\n ` : nothing}\n\n </div>\n `;\n}"],"names":[],"mappings":";AAqBO,SAAS,cAAc,OAA2C;AACvE,QAAM,YAAY,MAAM,SAAS,cAAc,MAAM,eAAe,SAAS,MAAM;AAEnF,SAAO;AAAA,8BACqB,MAAM,QAAQ,cAAc,EAAE,IAAI,MAAM,WAAW,gBAAgB,EAAE;AAAA;AAAA,QAE3F,MAAM,QAAQ;AAAA;AAAA;AAAA,iBAGL,MAAM,IAAI;AAAA;AAAA,YAEf,MAAM,KAAK;AAAA,YACX,MAAM,WAAW,iEAAiE,OAAO;AAAA;AAAA,UAE3F,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMD,MAAM,IAAI;AAAA,kBACR,SAAS;AAAA,yBACF,MAAM,WAAW;AAAA,uBACnB,MAAM,QAAQ;AAAA,uBACd,MAAM,QAAQ;AAAA,0BACX,MAAM,KAAK;AAAA,8BACP,MAAM,SAAS,MAAM,eAAe,GAAG,MAAM,IAAI,WAAW,OAAO;AAAA,oBAC7E,MAAM,KAAK;AAAA,oBACX,MAAM,WAAW;AAAA;AAAA;AAAA,UAG3B,MAAM,SAAS,aAAa;AAAA;AAAA;AAAA;AAAA,sBAIhB,MAAM,oBAAoB;AAAA,0BACtB,MAAM,eAAe,uBAAuB,oBAAoB;AAAA;AAAA,cAE5E,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAMnB;AAAA;AAAA;AAAA;AAAA;AAAA,aAKH;AAAA;AAAA,YAED,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,QAKX,MAAM,SAAS,MAAM,eAAe;AAAA,gDACI,MAAM,IAAI;AAAA,YAC9C,MAAM,YAAY;AAAA;AAAA,UAEpB,OAAO;AAAA;AAAA;AAAA;AAIjB;"}
package/dist/index217.js CHANGED
@@ -1,5 +1,35 @@
1
- const stepCss = '@layer tokens,reset,components;@layer reset{:host{display:block;position:relative;flex:1;flex-shrink:0}*,*:before,*:after{box-sizing:border-box}}@layer components{.step-inner{display:flex;flex-direction:column;align-items:center;position:relative}.step-node{width:32px;height:32px;border-radius:var(--radius-full);border:1px solid var(--border-default);background:var(--bg-elevated);color:var(--text-muted);display:flex;align-items:center;justify-content:center;font-family:var(--lib-font-mono);font-size:var(--text-xs);position:relative;z-index:1;flex-shrink:0;transition:background var(--duration-slow) var(--ease-out),border-color var(--duration-slow) var(--ease-out),color var(--duration-slow) var(--ease-out),box-shadow var(--duration-slow) var(--ease-out)}.step-icon{width:12px;height:12px;stroke:currentcolor;stroke-width:2.5;fill:none;stroke-linecap:round;stroke-linejoin:round;display:block}.step-text{margin-top:var(--lib-space-sm);display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--lib-space-xs)}.step-label{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);color:var(--text-muted);text-transform:uppercase;transition:color var(--duration-base) var(--ease-default)}.step-sub{font-family:var(--lib-font-body);font-size:var(--text-xs);color:var(--text-muted);line-height:var(--leading-snug)}.step-connector{position:absolute;top:15px;left:calc(50% + 16px);width:calc(100% - 32px);height:1px;background:var(--border-default);transition:background var(--duration-slow) var(--ease-out);pointer-events:none}:host([status="active"]) .step-node{background:var(--color-washi-900);border-color:var(--color-washi-900);color:var(--color-washi-50);box-shadow:0 0 0 4px var(--color-washi-100)}:host([status="active"]) .step-label{color:var(--text-primary)}:host([status="completed"]) .step-node{background:var(--color-washi-700);border-color:var(--color-washi-700);color:var(--color-washi-50)}:host([status="completed"]) .step-label{color:var(--text-secondary)}:host([status="completed"]) .step-connector{background:var(--color-washi-700)}:host([status="error"]) .step-node{background:var(--color-error-subtle);border-color:var(--color-error);color:var(--color-error)}:host([status="error"]) .step-label{color:var(--color-error)}:host([size="sm"]) .step-node{width:24px;height:24px;font-size:9px}:host([size="sm"]) .step-connector{top:11px;left:calc(50% + 12px);width:calc(100% - 24px)}:host([size="sm"]) .step-label{font-size:9px}:host([size="lg"]) .step-node{width:40px;height:40px;font-size:var(--text-sm)}:host([size="lg"]) .step-connector{top:19px;left:calc(50% + 20px);width:calc(100% - 40px)}:host([variant="minimal"]) .step-node{width:24px;height:24px;border-radius:var(--radius-none);background:transparent;font-size:9px}:host([variant="minimal"]) .step-connector{top:11px;left:calc(50% + 12px);width:calc(100% - 24px)}:host([variant="minimal"][status="active"]) .step-node{background:var(--color-kaki-500);border-color:var(--color-kaki-500);color:var(--color-white);box-shadow:none}:host([variant="minimal"][status="active"]) .step-label{color:var(--color-kaki-500)}:host([variant="minimal"][status="completed"]) .step-node{background:transparent;border-color:var(--color-washi-700);color:var(--color-washi-700)}:host([variant="kintsugi"][status="completed"]) .step-node{background:var(--color-washi-900);border:none;color:var(--color-washi-200)}:host([variant="kintsugi"][status="completed"]) .step-node:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;padding:1px;background:var(--lib-kintsugi-border);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}:host([variant="kintsugi"][status="active"]) .step-node{background:var(--color-washi-950);border:none;color:var(--color-washi-200);box-shadow:0 0 0 4px #6d4d3e1a}:host([variant="kintsugi"][status="active"]) .step-node:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;padding:1.5px;background:var(--lib-kintsugi-border);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask-composite:xor;-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none;animation:kintsugi-pulse 2.5s ease-in-out infinite}@keyframes kintsugi-pulse{0%,to{opacity:.7}50%{opacity:1}}:host([variant="kintsugi"][status="completed"]) .step-connector{background:linear-gradient(90deg,#66503f80,#866c534d)}:host([variant="kintsugi"]) .step-label{color:var(--color-washi-700)}:host([variant="kintsugi"][status="active"]) .step-label{color:var(--color-washi-100)}:host([variant="kintsugi"][status="completed"]) .step-label{color:var(--color-washi-500)}:host([variant="kintsugi"]) .step-node{background:var(--color-washi-950);border-color:var(--color-washi-800);color:var(--color-washi-700)}:host([variant="kintsugi"]) .step-connector{background:var(--color-washi-800)}:host([orientation="vertical"]){flex:none}:host([orientation="vertical"]) .step-inner{flex-direction:row;align-items:flex-start;gap:var(--lib-space-lg)}:host([orientation="vertical"]) .step-connector{position:absolute;left:15px;top:32px;bottom:0;width:1px;height:auto}:host([orientation="vertical"][size="sm"]) .step-connector{left:11px;top:24px}:host([orientation="vertical"][size="lg"]) .step-connector{left:19px;top:40px}.step-body{padding-bottom:var(--lib-space-xl);flex:1}.step-title{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--text-muted);line-height:32px;transition:color var(--duration-base) var(--ease-default)}:host([orientation="vertical"][status="active"]) .step-title{color:var(--text-primary)}:host([orientation="vertical"][status="completed"]) .step-title{color:var(--text-secondary)}:host([orientation="vertical"][status="error"]) .step-title{color:var(--color-error)}.step-content{margin-top:var(--lib-space-sm);font-size:var(--text-sm);color:var(--text-secondary);line-height:var(--leading-relaxed);max-width:420px}:host([variant="brutal"]) .step-node{border-radius:0;background:var(--color-washi-50);border:2px solid var(--color-ink-100);color:var(--color-ink-100);box-shadow:var(--lib-shadow-brutal)}:host([variant="brutal"][status="active"]) .step-node{background:var(--color-ink-100);border-color:var(--color-ink-100);color:var(--color-washi-50);box-shadow:var(--lib-shadow-brutal)}:host([variant="brutal"][status="completed"]) .step-node{background:var(--color-ink-100);border-color:var(--color-ink-100);color:var(--color-washi-50);box-shadow:2px 2px 0 0 var(--lib-shibui-ink)}:host([variant="brutal"][status="error"]) .step-node{background:var(--color-washi-50);border-color:var(--color-error);color:var(--color-error);box-shadow:4px 4px 0 0 var(--color-error)}:host([variant="brutal"]) .step-connector{background:var(--color-ink-100);height:2px}:host([variant="brutal"][status="completed"]) .step-connector{background:var(--color-ink-100)}:host([variant="brutal"]) .step-label{color:var(--color-ink-100);letter-spacing:var(--tracking-widest)}:host([variant="brutal"][status="active"]) .step-label{color:var(--color-ink-100);font-weight:var(--weight-semibold)}:host([variant="brutal"][status="completed"]) .step-label{color:var(--text-secondary)}:host([variant="brutal"][status="error"]) .step-label{color:var(--color-error)}@media(prefers-reduced-motion:reduce){.step-node,.step-connector,.step-label{transition:none}:host([variant="kintsugi"][status="active"]) .step-node:after{animation:none}}}';
1
+ import { nothing, html } from "lit";
2
+ const DEFAULT_HEADING = {
3
+ default: "Default",
4
+ info: "Info",
5
+ warning: "Warning",
6
+ error: "Error",
7
+ success: "Success"
8
+ };
9
+ function alertTemplate(props) {
10
+ const displayHeading = props.heading || DEFAULT_HEADING[props.type];
11
+ return html`
12
+ <div class="alert" role="alert" aria-live="polite">
13
+
14
+ <div class="alert-content">
15
+ <p class="alert-title">${displayHeading}</p>
16
+ <div class="alert-body">
17
+ <slot></slot>
18
+ </div>
19
+ </div>
20
+
21
+ ${props.closable ? html`
22
+ <button
23
+ class="alert-close"
24
+ type="button"
25
+ aria-label="Cerrar alerta"
26
+ @click="${props.handleClose}"
27
+ >×</button>` : nothing}
28
+
29
+ </div>
30
+ `;
31
+ }
2
32
  export {
3
- stepCss as default
33
+ alertTemplate
4
34
  };
5
35
  //# sourceMappingURL=index217.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index217.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index217.js","sources":["../src/components/molecules/lib-alert/lib-alert.html.ts"],"sourcesContent":["import { html, nothing, TemplateResult } from 'lit';\nimport type { AlertTemplateProps, AlertType } from './lib-alert.types';\n\n/** Auto-generated heading per type if none is provided. */\nconst DEFAULT_HEADING: Record<AlertType, string> = {\n default: 'Default',\n info: 'Info',\n warning: 'Warning',\n error: 'Error',\n success: 'Success',\n};\n\n/**\n * Template para lib-alert.\n * Estructura: borde izquierdo · [heading DM Mono] · slot (cuerpo) · [botón cerrar]\n */\nexport function alertTemplate(props: AlertTemplateProps): TemplateResult {\n const displayHeading = props.heading || DEFAULT_HEADING[props.type];\n\n return html`\n <div class=\"alert\" role=\"alert\" aria-live=\"polite\">\n\n <div class=\"alert-content\">\n <p class=\"alert-title\">${displayHeading}</p>\n <div class=\"alert-body\">\n <slot></slot>\n </div>\n </div>\n\n ${props.closable\n ? html`\n <button\n class=\"alert-close\"\n type=\"button\"\n aria-label=\"Cerrar alerta\"\n @click=\"${props.handleClose}\"\n >×</button>`\n : nothing}\n\n </div>\n `;\n}"],"names":[],"mappings":";AAIA,MAAM,kBAA6C;AAAA,EACjD,SAAS;AAAA,EACT,MAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAS;AAAA,EACT,SAAS;AACX;AAMO,SAAS,cAAc,OAA2C;AACvE,QAAM,iBAAiB,MAAM,WAAW,gBAAgB,MAAM,IAAI;AAElE,SAAO;AAAA;AAAA;AAAA;AAAA,iCAIwB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMvC,MAAM,WACJ;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKc,MAAM,WAAW;AAAA,2BAE/B,OAAO;AAAA;AAAA;AAAA;AAIjB;"}
package/dist/index218.js CHANGED
@@ -1,88 +1,5 @@
1
- import { html, nothing } from "lit";
2
- const ICONS = {
3
- star: {
4
- regular: html`<svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true">
5
- <path d="M239.2,97.4A16.4,16.4,0,0,0,224.6,86l-59.4-4.1-22-55.5A16.4,16.4,0,0,0,128,16h0a16.4,16.4,0,0,0-15.2,10.4L90.8,82,31.4,86A16.5,16.5,0,0,0,16.8,97.4,16.8,16.8,0,0,0,22,115.5l45.4,38.4L52.5,212a16.4,16.4,0,0,0,6.4,17.3,16.7,16.7,0,0,0,18.2.5L128,198.8l51,31.1a16.1,16.1,0,0,0,8.5,2.4,16.5,16.5,0,0,0,9.7-3.1A16.4,16.4,0,0,0,203.5,212l-14.9-58.1L234,115.5A16.8,16.8,0,0,0,239.2,97.4Zm-15.4,5.9-45.4,38.4a8,8,0,0,0-2.6,8.2l14.9,58.1a.6.6,0,0,1-.3.7c-.1.1-.3.2-.5.1l-51-31.2a8,8,0,0,0-8.4,0l-51,31.1-.4-.1a.6.6,0,0,1-.3-.7l14.9-58.1a8,8,0,0,0-2.6-8.2L31.2,103.3l-.1-.4c.1-.3.2-.5.5-.6l59.3-4.1a8,8,0,0,0,6.8-5.1L119.7,38a.8.8,0,0,1,.6-.5h.2a.8.8,0,0,1,.6.5l21.9,55.2a8,8,0,0,0,6.8,5.1l59.3,4.1c.3.1.4.3.5.6A.7.7,0,0,1,223.8,103.3Z"/>
6
- </svg>`,
7
- fill: html`<svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true">
8
- <path d="M234.5,114.38l-45.1,39.36,13.51,58.6a16,16,0,0,1-23.84,17.34l-51.11-31-51,31a16,16,0,0,1-23.84-17.34l13.49-58.54L21.5,114.38a16,16,0,0,1,9.11-28.06l59.46-5.15,23.21-55.36a15.95,15.95,0,0,1,29.44,0h0L166,81.17l59.44,5.15a16,16,0,0,1,9.11,28.06Z"/>
9
- </svg>`
10
- },
11
- heart: {
12
- regular: html`<svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true">
13
- <path d="M178,32c-20.65,0-38.73,8.88-50,23.89C116.73,40.88,98.65,32,78,32A62.07,62.07,0,0,0,16,94c0,70,103.79,126.66,108.21,129a8,8,0,0,0,7.58,0C136.21,220.66,240,164,240,94A62.07,62.07,0,0,0,178,32ZM128,206.8C109.74,196.16,32,147.69,32,94A46.06,46.06,0,0,1,78,48c19.45,0,35.78,10.36,42.6,27a8,8,0,0,0,14.8,0c6.82-16.67,23.15-27,42.6-27a46.06,46.06,0,0,1,46,46C224,147.61,146.24,196.15,128,206.8Z"/>
14
- </svg>`,
15
- fill: html`<svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true">
16
- <path d="M240,94c0,70-103.79,126.66-108.21,129a8,8,0,0,1-7.58,0C119.79,220.66,16,164,16,94A62.07,62.07,0,0,1,78,32c20.65,0,38.73,8.88,50,23.89C139.27,40.88,157.35,32,178,32A62.07,62.07,0,0,1,240,94Z"/>
17
- </svg>`
18
- },
19
- diamond: {
20
- regular: html`<svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true">
21
- <path d="M235.32,104,211.31,56a16,16,0,0,0-14.31-8.05H59A16,16,0,0,0,44.69,56L20.68,104a16,16,0,0,0,2.62,18.51l96,96a16,16,0,0,0,17.4,3.37,15.93,15.93,0,0,0,5.26-3.38l96-96A16,16,0,0,0,235.32,104ZM59,64H197l21.33,42.67L128,213.32,37.67,106.67Z"/>
22
- </svg>`,
23
- fill: html`<svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true">
24
- <path d="M238,106.38,214,58.34A16.09,16.09,0,0,0,199.69,50H56.31A16.09,16.09,0,0,0,42,58.34L18,106.38a16,16,0,0,0,2.69,18.76l96,96a16,16,0,0,0,22.62,0l96-96A16,16,0,0,0,238,106.38Z"/>
25
- </svg>`
26
- }
27
- };
28
- function getIcon(name) {
29
- return ICONS[name] ?? ICONS["star"];
30
- }
31
- function ratingTemplate(ctx) {
32
- const { value, max, icon, readonly, showCount, count } = ctx;
33
- const icons = getIcon(icon);
34
- const display = ctx._hoverValue || value;
35
- const items = Array.from({ length: max }, (_, i) => {
36
- const pos = i + 1;
37
- const isHalf = readonly && !Number.isInteger(value) && pos === Math.ceil(value);
38
- const isFilled = pos <= Math.floor(display);
39
- const isPreview = !readonly && pos > Math.floor(display) && pos <= ctx._hoverValue;
40
- if (isHalf) {
41
- return html`
42
- <span
43
- class="rt-item rt-item-half"
44
- part="item item-half"
45
- aria-hidden="true"
46
- >
47
- ${icons == null ? void 0 : icons.regular}
48
- <span class="rt-half-fill">${icons == null ? void 0 : icons.fill}</span>
49
- </span>
50
- `;
51
- }
52
- return html`
53
- <span
54
- class="rt-item ${isFilled ? "is-filled" : ""} ${isPreview ? "is-preview" : ""}"
55
- part="item${isFilled ? " item-filled" : ""}"
56
- role="${readonly ? nothing : "button"}"
57
- aria-label="${readonly ? nothing : `Valorar ${pos} de ${max}`}"
58
- tabindex="${readonly ? nothing : "0"}"
59
- @mouseenter="${() => ctx._onEnter(pos)}"
60
- @click="${() => ctx._onClick(pos)}"
61
- @keydown="${(e) => ctx._onKeyItem(e, pos)}"
62
- >
63
- ${isFilled || isPreview ? icons == null ? void 0 : icons.fill : icons == null ? void 0 : icons.regular}
64
- </span>
65
- `;
66
- });
67
- const numDisplay = showCount ? html`
68
- <span class="rt-num" part="num">
69
- <strong>${value > 0 ? value.toFixed(1) : "—"}</strong>
70
- ${count != null ? html`<span style="margin-left:2px;">(${count})</span>` : nothing}
71
- </span>` : nothing;
72
- return html`
73
- <div
74
- class="rt"
75
- part="root"
76
- role="${readonly ? "img" : "group"}"
77
- aria-label="${readonly ? `Valoración: ${value} de ${max}` : `Valorar de 1 a ${max}`}"
78
- @mouseleave="${() => ctx._onLeave()}"
79
- >
80
- ${items}
81
- </div>
82
- ${numDisplay}
83
- `;
84
- }
1
+ const alertCss = '@layer tokens,reset,components;@layer reset{:host{display:block;width:100%}*,*:before,*:after{box-sizing:border-box}}@layer components{.alert{padding:var(--lib-space-md) var(--lib-space-lg);border-left:2px solid;display:flex;gap:var(--lib-space-md);align-items:flex-start;width:100%;transition:opacity var(--duration-base) var(--ease-default),transform var(--duration-base) var(--ease-default)}.alert-content{flex:1;min-width:0}.alert-title{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wider);text-transform:uppercase;margin-bottom:var(--lib-space-xs);line-height:var(--leading-snug)}.alert-body{font-family:var(--lib-font-body);font-size:var(--text-sm);line-height:var(--leading-relaxed)}.alert-close{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:transparent;border:none;cursor:pointer;padding:0;opacity:.5;color:inherit;transition:opacity var(--duration-fast) var(--ease-default);font-size:16px;line-height:1;font-family:var(--lib-font-mono)}.alert-close:hover{opacity:1}:host([type="default"]) .alert,.alert{background:var(--bg-surface);border-color:var(--border-strong)}:host([type="default"]) .alert-title{color:var(--text-secondary)}:host([type="default"]) .alert-body{color:var(--text-secondary)}:host([type="info"]) .alert{background:var(--color-celadon-50);border-color:var(--color-celadon-400)}:host([type="info"]) .alert-title{color:var(--color-celadon-600)}:host([type="info"]) .alert-body{color:var(--color-celadon-500)}:host([type="warning"]) .alert{background:#fffbf0;border-color:var(--color-warning)}:host([type="warning"]) .alert-title{color:var(--color-warning)}:host([type="warning"]) .alert-body{color:#6b5010}:host([type="error"]) .alert{background:#fff8f7;border-color:var(--color-error)}:host([type="error"]) .alert-title{color:var(--color-error)}:host([type="error"]) .alert-body{color:#6b2015}:host([type="success"]) .alert{background:#f5faf6;border-color:var(--color-success)}:host([type="success"]) .alert-title{color:var(--color-success)}:host([type="success"]) .alert-body{color:#1e4a2a}:host([glass]) .alert{background:var(--lib-glass-bg);-webkit-backdrop-filter:var(--lib-glass-filter);backdrop-filter:var(--lib-glass-filter);border:var(--lib-glass-border);border-left-width:2px;box-shadow:var(--lib-glass-shadow);position:relative;overflow:hidden}:host([glass]) .alert:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--lib-glass-shine);pointer-events:none}:host([glass]) .alert-title,:host([glass]) .alert-body{color:var(--lib-glass-text);text-shadow:var(--lib-glass-text-shadow);position:relative;z-index:1}:host([glass]) .alert-close{color:var(--lib-glass-text);position:relative;z-index:1}}';
85
2
  export {
86
- ratingTemplate
3
+ alertCss as default
87
4
  };
88
5
  //# sourceMappingURL=index218.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index218.js","sources":["../src/components/atoms/rating/lib-rating.html.ts"],"sourcesContent":["import { html, nothing, TemplateResult } from 'lit';\nimport type { LibRating } from './lib-rating.component';\n\n/* ══════════════════════════════════════════════════════════\n SVGs Phosphor-style — regular (outline) y fill\n ══════════════════════════════════════════════════════════ */\n\nconst ICONS: Record<string, { regular: TemplateResult; fill: TemplateResult }> = {\n star: {\n regular: html`<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M239.2,97.4A16.4,16.4,0,0,0,224.6,86l-59.4-4.1-22-55.5A16.4,16.4,0,0,0,128,16h0a16.4,16.4,0,0,0-15.2,10.4L90.8,82,31.4,86A16.5,16.5,0,0,0,16.8,97.4,16.8,16.8,0,0,0,22,115.5l45.4,38.4L52.5,212a16.4,16.4,0,0,0,6.4,17.3,16.7,16.7,0,0,0,18.2.5L128,198.8l51,31.1a16.1,16.1,0,0,0,8.5,2.4,16.5,16.5,0,0,0,9.7-3.1A16.4,16.4,0,0,0,203.5,212l-14.9-58.1L234,115.5A16.8,16.8,0,0,0,239.2,97.4Zm-15.4,5.9-45.4,38.4a8,8,0,0,0-2.6,8.2l14.9,58.1a.6.6,0,0,1-.3.7c-.1.1-.3.2-.5.1l-51-31.2a8,8,0,0,0-8.4,0l-51,31.1-.4-.1a.6.6,0,0,1-.3-.7l14.9-58.1a8,8,0,0,0-2.6-8.2L31.2,103.3l-.1-.4c.1-.3.2-.5.5-.6l59.3-4.1a8,8,0,0,0,6.8-5.1L119.7,38a.8.8,0,0,1,.6-.5h.2a.8.8,0,0,1,.6.5l21.9,55.2a8,8,0,0,0,6.8,5.1l59.3,4.1c.3.1.4.3.5.6A.7.7,0,0,1,223.8,103.3Z\"/>\n </svg>`,\n fill: html`<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M234.5,114.38l-45.1,39.36,13.51,58.6a16,16,0,0,1-23.84,17.34l-51.11-31-51,31a16,16,0,0,1-23.84-17.34l13.49-58.54L21.5,114.38a16,16,0,0,1,9.11-28.06l59.46-5.15,23.21-55.36a15.95,15.95,0,0,1,29.44,0h0L166,81.17l59.44,5.15a16,16,0,0,1,9.11,28.06Z\"/>\n </svg>`,\n },\n heart: {\n regular: html`<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M178,32c-20.65,0-38.73,8.88-50,23.89C116.73,40.88,98.65,32,78,32A62.07,62.07,0,0,0,16,94c0,70,103.79,126.66,108.21,129a8,8,0,0,0,7.58,0C136.21,220.66,240,164,240,94A62.07,62.07,0,0,0,178,32ZM128,206.8C109.74,196.16,32,147.69,32,94A46.06,46.06,0,0,1,78,48c19.45,0,35.78,10.36,42.6,27a8,8,0,0,0,14.8,0c6.82-16.67,23.15-27,42.6-27a46.06,46.06,0,0,1,46,46C224,147.61,146.24,196.15,128,206.8Z\"/>\n </svg>`,\n fill: html`<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M240,94c0,70-103.79,126.66-108.21,129a8,8,0,0,1-7.58,0C119.79,220.66,16,164,16,94A62.07,62.07,0,0,1,78,32c20.65,0,38.73,8.88,50,23.89C139.27,40.88,157.35,32,178,32A62.07,62.07,0,0,1,240,94Z\"/>\n </svg>`,\n },\n diamond: {\n regular: html`<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M235.32,104,211.31,56a16,16,0,0,0-14.31-8.05H59A16,16,0,0,0,44.69,56L20.68,104a16,16,0,0,0,2.62,18.51l96,96a16,16,0,0,0,17.4,3.37,15.93,15.93,0,0,0,5.26-3.38l96-96A16,16,0,0,0,235.32,104ZM59,64H197l21.33,42.67L128,213.32,37.67,106.67Z\"/>\n </svg>`,\n fill: html`<svg viewBox=\"0 0 256 256\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M238,106.38,214,58.34A16.09,16.09,0,0,0,199.69,50H56.31A16.09,16.09,0,0,0,42,58.34L18,106.38a16,16,0,0,0,2.69,18.76l96,96a16,16,0,0,0,22.62,0l96-96A16,16,0,0,0,238,106.38Z\"/>\n </svg>`,\n },\n};\n\n/* ── Fallback al icono estrella si el icon prop no coincide ── */\nfunction getIcon(name: string): { regular: TemplateResult; fill: TemplateResult } | undefined {\n return ICONS[name] ?? ICONS['star'];\n}\n\n/* ══════════════════════════════════════════════════════════\n Template principal\n ══════════════════════════════════════════════════════════ */\nexport function ratingTemplate(ctx: LibRating): TemplateResult {\n const { value, max, icon, readonly, showCount, count } = ctx;\n const icons = getIcon(icon);\n const display = ctx._hoverValue || value;\n\n /* Secuencia de items */\n const items = Array.from({ length: max }, (_, i) => {\n const pos = i + 1; // 1-indexed\n\n /* Half-star: solo read-only, cuando value tiene .5 */\n const isHalf = readonly && !Number.isInteger(value) && pos === Math.ceil(value);\n const isFilled = pos <= Math.floor(display);\n const isPreview = !readonly && pos > Math.floor(display) && pos <= ctx._hoverValue;\n\n if (isHalf) {\n return html`\n <span\n class=\"rt-item rt-item-half\"\n part=\"item item-half\"\n aria-hidden=\"true\"\n >\n ${icons?.regular}\n <span class=\"rt-half-fill\">${icons?.fill}</span>\n </span>\n `;\n }\n\n return html`\n <span\n class=\"rt-item ${isFilled ? 'is-filled' : ''} ${isPreview ? 'is-preview' : ''}\"\n part=\"item${isFilled ? ' item-filled' : ''}\"\n role=\"${readonly ? nothing : 'button'}\"\n aria-label=\"${readonly ? nothing : `Valorar ${pos} de ${max}`}\"\n tabindex=\"${readonly ? nothing : '0'}\"\n @mouseenter=\"${(): void => ctx._onEnter(pos)}\"\n @click=\"${(): void => ctx._onClick(pos)}\"\n @keydown=\"${(e: KeyboardEvent): void => ctx._onKeyItem(e, pos)}\"\n >\n ${isFilled || isPreview ? icons?.fill : icons?.regular}\n </span>\n `;\n });\n\n /* Numeric display */\n const numDisplay = showCount\n ? html`\n <span class=\"rt-num\" part=\"num\">\n <strong>${value > 0 ? value.toFixed(1) : '—'}</strong>\n ${count != null ? html`<span style=\"margin-left:2px;\">(${count})</span>` : nothing}\n </span>`\n : nothing;\n\n return html`\n <div\n class=\"rt\"\n part=\"root\"\n role=\"${readonly ? 'img' : 'group'}\"\n aria-label=\"${readonly\n ? `Valoración: ${value} de ${max}`\n : `Valorar de 1 a ${max}`}\"\n @mouseleave=\"${(): void => ctx._onLeave()}\"\n >\n ${items}\n </div>\n ${numDisplay}\n `;\n}"],"names":[],"mappings":";AAOA,MAAM,QAA2E;AAAA,EAC/E,MAAM;AAAA,IACJ,SAAS;AAAA;AAAA;AAAA,IAGT,MAAM;AAAA;AAAA;AAAA,EAAA;AAAA,EAIR,OAAO;AAAA,IACL,SAAS;AAAA;AAAA;AAAA,IAGT,MAAM;AAAA;AAAA;AAAA,EAAA;AAAA,EAIR,SAAS;AAAA,IACP,SAAS;AAAA;AAAA;AAAA,IAGT,MAAM;AAAA;AAAA;AAAA,EAAA;AAIV;AAGA,SAAS,QAAQ,MAA6E;AAC5F,SAAO,MAAM,IAAI,KAAK,MAAM,MAAM;AACpC;AAKO,SAAS,eAAe,KAAgC;AAC7D,QAAM,EAAE,OAAO,KAAK,MAAM,UAAU,WAAW,UAAU;AACzD,QAAM,QAAQ,QAAQ,IAAI;AAC1B,QAAM,UAAU,IAAI,eAAe;AAGnC,QAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,IAAA,GAAO,CAAC,GAAG,MAAM;AAClD,UAAM,MAAM,IAAI;AAGhB,UAAM,SAAS,YAAY,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK;AAC9E,UAAM,WAAW,OAAO,KAAK,MAAM,OAAO;AAC1C,UAAM,YAAY,CAAC,YAAY,MAAM,KAAK,MAAM,OAAO,KAAK,OAAO,IAAI;AAEvE,QAAI,QAAQ;AACV,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMD,+BAAO,OAAO;AAAA,uCACa,+BAAO,IAAI;AAAA;AAAA;AAAA,IAG9C;AAEA,WAAO;AAAA;AAAA,yBAEc,WAAW,cAAc,EAAE,IAAI,YAAY,eAAe,EAAE;AAAA,oBACjE,WAAW,iBAAiB,EAAE;AAAA,gBAClC,WAAW,UAAU,QAAQ;AAAA,sBACvB,WAAW,UAAU,WAAW,GAAG,OAAO,GAAG,EAAE;AAAA,oBACjD,WAAW,UAAU,GAAG;AAAA,uBACrB,MAAY,IAAI,SAAS,GAAG,CAAC;AAAA,kBAClC,MAAY,IAAI,SAAS,GAAG,CAAC;AAAA,oBAC3B,CAAC,MAA2B,IAAI,WAAW,GAAG,GAAG,CAAC;AAAA;AAAA,UAE5D,YAAY,YAAY,+BAAO,OAAO,+BAAO,OAAO;AAAA;AAAA;AAAA,EAG5D,CAAC;AAGD,QAAM,aAAa,YACf;AAAA;AAAA,oBAEc,QAAQ,IAAI,MAAM,QAAQ,CAAC,IAAI,GAAG;AAAA,YAC1C,SAAS,OAAO,uCAAuC,KAAK,aAAa,OAAO;AAAA,mBAEtF;AAEJ,SAAO;AAAA;AAAA;AAAA;AAAA,cAIK,WAAW,QAAQ,OAAO;AAAA,oBACpB,WACV,eAAe,KAAK,OAAO,GAAG,KAC9B,kBAAkB,GAAG,EAAE;AAAA,qBACZ,MAAY,IAAI,UAAU;AAAA;AAAA,QAEvC,KAAK;AAAA;AAAA,MAEP,UAAU;AAAA;AAEhB;"}
1
+ {"version":3,"file":"index218.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
package/dist/index219.js CHANGED
@@ -1,5 +1,5 @@
1
- const ratingCss = '@layer tokens,reset,components;@layer reset{:host{display:inline-flex;align-items:center;gap:var(--lib-space-sm);-webkit-user-select:none;user-select:none;--_gold: #C4922A;--_gold-light: #F0D080;--_gold-pale: #FAF0D0}*,*:before,*:after{box-sizing:border-box}}@layer components{@keyframes rt-pop{0%{transform:scale(1)}40%{transform:scale(1.35)}to{transform:scale(1)}}.rt{display:inline-flex;align-items:center;gap:3px;position:relative}.rt-item{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;position:relative;color:var(--color-washi-300);transition:color var(--duration-fast) var(--ease-default),transform var(--duration-base) var(--ease-bounce);line-height:1;flex-shrink:0}.rt-item svg{display:block;width:1em;height:1em}.rt-item:hover{transform:scale(1.15)}.rt-item.is-filled{color:var(--_gold)}.rt-item.is-preview{color:var(--_gold-light)}.rt-item.is-pop{animation:rt-pop .3s var(--ease-bounce) forwards}:host([readonly]) .rt-item,:host([readonly]) .rt-item:hover{cursor:default;pointer-events:none;transform:none}:host([disabled]) .rt{opacity:.4;pointer-events:none}:host([size="xs"]) .rt{gap:1px;font-size:12px}:host([size="sm"]) .rt{gap:2px;font-size:16px}:host([size="md"]) .rt,:host(:not([size])) .rt{gap:3px;font-size:22px}:host([size="lg"]) .rt{gap:4px;font-size:30px}:host([size="xl"]) .rt{gap:5px;font-size:40px}:host([color="kaki"]) .rt-item.is-filled{color:var(--color-kaki-500)}:host([color="kaki"]) .rt-item.is-preview{color:var(--color-kaki-400);opacity:.6}:host([color="washi"]) .rt-item.is-filled{color:var(--color-washi-900)}:host([color="washi"]) .rt-item.is-preview{color:var(--color-washi-600);opacity:.5}:host([color="celadon"]) .rt-item.is-filled{color:var(--color-celadon-500)}:host([color="celadon"]) .rt-item.is-preview{color:var(--color-celadon-400);opacity:.45}.rt-item-half{position:relative}.rt-half-fill{position:absolute;left:0;top:0;width:50%;overflow:hidden;color:var(--_gold);display:flex;align-items:center;pointer-events:none}.rt-half-fill svg{width:1em;height:1em;flex-shrink:0}:host([color="kaki"]) .rt-half-fill{color:var(--color-kaki-500)}:host([color="washi"]) .rt-half-fill{color:var(--color-washi-900)}:host([color="celadon"]) .rt-half-fill{color:var(--color-celadon-500)}.rt-num{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);color:var(--text-muted);white-space:nowrap;line-height:1}.rt-num strong{font-family:var(--lib-font-display);font-weight:300;letter-spacing:var(--tracking-tight);color:var(--text-primary)}@media(prefers-reduced-motion:reduce){.rt-item{transition:none}.rt-item.is-pop{animation:none}}}';
1
+ const modalCss = "@layer tokens,reset,components;@layer reset{*,*:before,*:after{box-sizing:border-box}}@layer components{:host{display:contents}.mo-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-modal, 500);background:#120e0aa6;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:var(--lib-space-lg);overflow-y:auto;opacity:0;pointer-events:none;transition:opacity var(--duration-slow) var(--ease-out)}:host([open]) .mo-backdrop{opacity:1;pointer-events:auto}.mo-panel-wrap{position:relative;width:100%;max-width:560px;max-height:calc(100vh - var(--lib-space-lg) * 2);display:flex;flex-direction:column;transform:scale(.95) translateY(8px);transition:transform var(--duration-slow) var(--ease-out)}:host([open]) .mo-panel-wrap{transform:scale(1) translateY(0)}.mo-panel-wrap.mo-slide-up{transform:translateY(40px)}:host([open]) .mo-panel-wrap.mo-slide-up{transform:translateY(0)}.mo-panel-wrap.mo-slide-down{transform:translateY(-40px)}:host([open]) .mo-panel-wrap.mo-slide-down{transform:translateY(0)}.mo-panel-wrap.mo-xs{max-width:280px}.mo-panel-wrap.mo-sm{max-width:420px}.mo-panel-wrap.mo-lg{max-width:720px}.mo-panel-wrap.mo-xl{max-width:920px}.mo-panel-wrap.mo-full{max-width:100vw;max-height:100vh;height:100vh;margin:0}.mo-panel-wrap.mo-full .mo-panel{max-height:100vh;height:100vh;border:none}.mo-panel{background:var(--bg-elevated);border:1px solid var(--border-default);box-shadow:0 20px 60px #1a140e2e,0 4px 16px #1a140e1a;display:flex;flex-direction:column;max-height:calc(100vh - var(--lib-space-lg) * 2);overflow:hidden}.mo-panel.is-editorial .mo-header{border-bottom:none;padding-bottom:0}.mo-panel.is-editorial .mo-title{font-size:2.5rem;letter-spacing:var(--tracking-tight)}.mo-panel.is-editorial .mo-body{padding-top:var(--lib-space-sm)}.mo-panel.is-danger .mo-header{border-bottom-color:#f5ddd9;background:#f5ddd9}.mo-panel.is-danger .mo-title{color:var(--color-error)}.mo-panel.is-danger .mo-footer{border-top-color:#f5ddd9;background:#fef5f3}.mo-header{display:flex;align-items:flex-start;gap:var(--lib-space-md);padding:var(--lib-space-lg) var(--lib-space-lg) var(--lib-space-md);border-bottom:1px solid var(--border-subtle);flex-shrink:0;background:var(--bg-elevated)}.mo-header-icon{width:40px;height:40px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:20px;background:var(--bg-surface);border:1px solid var(--border-subtle);color:var(--text-muted)}.mo-header-icon.is-kaki{background:var(--color-kaki-50);border-color:var(--color-kaki-100);color:var(--color-kaki-500)}.mo-header-icon.is-celadon{background:var(--color-celadon-50);border-color:var(--color-celadon-100);color:var(--color-celadon-500)}.mo-header-icon.is-error{background:#f5ddd9;border-color:#f5ddd9;color:var(--color-error)}.mo-header-icon.is-info{background:#d6e8f5;border-color:#d6e8f5;color:#1a4a6e}.mo-header-text{flex:1;min-width:0}.mo-title{font-family:var(--lib-font-display);font-size:var(--text-2xl);font-weight:var(--weight-light);letter-spacing:var(--tracking-tight);line-height:var(--leading-tight);color:var(--text-primary)}.mo-subtitle{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wider);text-transform:uppercase;color:var(--text-muted);margin-top:var(--lib-space-xs)}.mo-close{width:32px;height:32px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--text-muted);background:transparent;border:none;cursor:pointer;line-height:1;transition:background var(--duration-fast) var(--ease-default),color var(--duration-fast) var(--ease-default);margin-top:-2px;margin-right:-4px}.mo-close:hover{background:var(--bg-surface);color:var(--text-primary)}.mo-body{flex:1;overflow-y:auto;padding:var(--lib-space-lg);scrollbar-width:thin;scrollbar-color:var(--color-washi-300) transparent}.mo-body::-webkit-scrollbar{width:4px}.mo-body::-webkit-scrollbar-track{background:transparent}.mo-body::-webkit-scrollbar-thumb{background:var(--color-washi-300)}.mo-footer{display:flex;align-items:center;gap:var(--lib-space-md);padding:var(--lib-space-md) var(--lib-space-lg);border-top:1px solid var(--border-subtle);flex-shrink:0;background:var(--bg-surface)}.mo-footer-info{font-family:var(--lib-font-mono);font-size:10px;letter-spacing:var(--tracking-wide);color:var(--text-muted);margin-right:auto}.mo-panel-wrap.mo-dark .mo-panel{background:#0c0604;border-color:#1e130e;box-shadow:0 20px 60px #0000008c,0 4px 16px #0000004d}.mo-panel-wrap.mo-dark .mo-header{background:#0c0604;border-color:#190f0a}.mo-panel-wrap.mo-dark .mo-title{color:#c8bbb2}.mo-panel-wrap.mo-dark .mo-subtitle{color:#312620}.mo-panel-wrap.mo-dark .mo-close{color:#362b25}.mo-panel-wrap.mo-dark .mo-close:hover{background:#190f0a;color:#998c84}.mo-panel-wrap.mo-dark .mo-footer{background:#060201;border-color:#190f0a}.mo-panel-wrap.mo-dark .mo-footer-info{color:#312620}.mo-panel-wrap.mo-dark .mo-header-icon{background:#190f0a;border-color:#231813;color:#433831}@media(max-width:768px){.mo-backdrop{padding:var(--lib-space-md)}.mo-panel-wrap{max-height:calc(100vh - var(--lib-space-md) * 2)}}}";
2
2
  export {
3
- ratingCss as default
3
+ modalCss as default
4
4
  };
5
5
  //# sourceMappingURL=index219.js.map
package/dist/index22.js CHANGED
@@ -1,8 +1,8 @@
1
- import { unsafeCSS, css, LitElement, html } from "lit";
2
- import { property, state, customElement } from "lit/decorators.js";
3
- import { getIcon } from "./index3.js";
1
+ import { unsafeCSS, css, LitElement } from "lit";
2
+ import { property, customElement } from "lit/decorators.js";
3
+ import { renderDisplayHeading } from "./index302.js";
4
+ import componentCss from "./index303.js";
4
5
  import sharedTokens from "./index196.js";
5
- import iconStyles from "./index231.js";
6
6
  var __defProp = Object.defineProperty;
7
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
8
  var __decorateClass = (decorators, target, key, kind) => {
@@ -13,65 +13,58 @@ var __decorateClass = (decorators, target, key, kind) => {
13
13
  if (kind && result) __defProp(target, key, result);
14
14
  return result;
15
15
  };
16
- let LibIcon = class extends LitElement {
16
+ let LibDisplayHeading = class extends LitElement {
17
17
  constructor() {
18
18
  super(...arguments);
19
- this.name = "";
19
+ this.line1 = "";
20
+ this.line2Prefix = "";
21
+ this.accent = "";
22
+ this.description = "";
23
+ this.surface = "light";
20
24
  this.size = "md";
21
- this.variant = "default";
22
- this._svgContent = "";
23
- }
24
- willUpdate(changedProperties) {
25
- if (changedProperties.has("name")) {
26
- this._loadIcon();
27
- }
28
- }
29
- // 4. Buscamos el SVG en tu registro y lo guardamos en el estado
30
- //TODO: Implementar nominale vs. generico
31
- _loadIcon() {
32
- const iconNominale = getIcon(this.name);
33
- console.log(iconNominale);
34
- if (iconNominale) {
35
- this._svgContent = iconNominale ?? "";
36
- this.requestUpdate();
37
- } else {
38
- this._svgContent = "";
39
- }
25
+ this.tag = "h2";
26
+ this.centered = false;
27
+ this._animate = false;
40
28
  }
41
29
  render() {
42
- const sizeVar = `var(--lib-font-size-${this.size})`;
43
- const variantClass = this.variant !== "default" ? `variant-${this.variant}` : "";
44
- return html`
45
- <div
46
- class="icon-wrapper ${variantClass}"
47
- style="--lib-icon-size: ${sizeVar}"
48
- aria-hidden="true"
49
- .innerHTML="${this._svgContent}"
50
- >
51
- </div>
52
- `;
30
+ return renderDisplayHeading(this);
53
31
  }
54
32
  };
55
- LibIcon.styles = [
33
+ LibDisplayHeading.styles = [
56
34
  css`${unsafeCSS(sharedTokens)}`,
57
- css`${unsafeCSS(iconStyles)}`
35
+ css`${unsafeCSS(componentCss)}`
58
36
  ];
59
37
  __decorateClass([
60
- property({ type: String, reflect: true })
61
- ], LibIcon.prototype, "name", 2);
38
+ property({ type: String })
39
+ ], LibDisplayHeading.prototype, "line1", 2);
40
+ __decorateClass([
41
+ property({ type: String, attribute: "line2-prefix" })
42
+ ], LibDisplayHeading.prototype, "line2Prefix", 2);
62
43
  __decorateClass([
63
44
  property({ type: String })
64
- ], LibIcon.prototype, "size", 2);
45
+ ], LibDisplayHeading.prototype, "accent", 2);
65
46
  __decorateClass([
66
47
  property({ type: String })
67
- ], LibIcon.prototype, "variant", 2);
48
+ ], LibDisplayHeading.prototype, "description", 2);
49
+ __decorateClass([
50
+ property({ type: String, reflect: true })
51
+ ], LibDisplayHeading.prototype, "surface", 2);
52
+ __decorateClass([
53
+ property({ type: String, reflect: true })
54
+ ], LibDisplayHeading.prototype, "size", 2);
55
+ __decorateClass([
56
+ property({ type: String, reflect: true })
57
+ ], LibDisplayHeading.prototype, "tag", 2);
58
+ __decorateClass([
59
+ property({ type: Boolean, reflect: true })
60
+ ], LibDisplayHeading.prototype, "centered", 2);
68
61
  __decorateClass([
69
- state()
70
- ], LibIcon.prototype, "_svgContent", 2);
71
- LibIcon = __decorateClass([
72
- customElement("lib-icon")
73
- ], LibIcon);
62
+ property({ type: Boolean, reflect: true })
63
+ ], LibDisplayHeading.prototype, "_animate", 2);
64
+ LibDisplayHeading = __decorateClass([
65
+ customElement("lib-display-heading")
66
+ ], LibDisplayHeading);
74
67
  export {
75
- LibIcon
68
+ LibDisplayHeading
76
69
  };
77
70
  //# sourceMappingURL=index22.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index22.js","sources":["../src/components/atoms/icon/lib-icon.component.ts"],"sourcesContent":["import { LitElement, html, css, unsafeCSS, TemplateResult } from 'lit';\n// 1. Añadimos 'state' a las importaciones de lit/decorators\nimport { customElement, property, state } from 'lit/decorators.js'; \n//import { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { getIcon/*, ICON_REGISTRY*/ } from '../../../shared/icons/icon-registry';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\nimport iconStyles from './lib-icon.css?inline';\n\n@customElement('lib-icon')\nexport class LibIcon extends LitElement {\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(iconStyles)}`,\n ];\n\n @property({ type: String, reflect: true }) name: string = '';\n @property({ type: String }) size: string = 'md';\n @property({ type: String }) variant: string = 'default';\n\n // 2. DECLARAMOS EL ESTADO INTERNO (Esta es la pieza que faltaba)\n @state() private _svgContent: string = '';\n\n override willUpdate(changedProperties: Map<string, unknown>): void {\n if (changedProperties.has('name')) {\n this._loadIcon();\n }\n }\n\n // 4. Buscamos el SVG en tu registro y lo guardamos en el estado\n //TODO: Implementar nominale vs. generico\n private _loadIcon(): void {\n //const icon = ICON_REGISTRY[this.name];\n const iconNominale = getIcon(this.name);\n console.log(iconNominale);\n if (iconNominale) {\n this._svgContent = iconNominale ?? '';\n this.requestUpdate();\n } else {\n this._svgContent = ''; // Si no existe, limpiamos\n //console.warn(`Icono \"${this.name}\" no encontrado.`);\n }\n }\n\n protected override render(): TemplateResult {\n const sizeVar: string = `var(--lib-font-size-${this.size})`;\n const variantClass: string = this.variant !== 'default' ? `variant-${this.variant}` : '';\n \n\n return html`\n <div\n class=\"icon-wrapper ${variantClass}\"\n style=\"--lib-icon-size: ${sizeVar}\"\n aria-hidden=\"true\"\n .innerHTML=\"${this._svgContent}\"\n >\n </div>\n `;\n }\n}\n\n// ${this._svgContent ? unsafeSVG(this._svgContent) : html`<span></span>`}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AASO,IAAM,UAAN,cAAsB,WAAW;AAAA,EAAjC,cAAA;AAAA,UAAA,GAAA,SAAA;AAMsC,SAAA,OAAe;AAC9B,SAAA,OAAe;AACf,SAAA,UAAkB;AAGrC,SAAQ,cAAsB;AAAA,EAAA;AAAA,EAE9B,WAAW,mBAA+C;AACjE,QAAI,kBAAkB,IAAI,MAAM,GAAG;AACjC,WAAK,UAAA;AAAA,IACP;AAAA,EACF;AAAA;AAAA;AAAA,EAIQ,YAAkB;AAExB,UAAM,eAAe,QAAQ,KAAK,IAAI;AACtC,YAAQ,IAAI,YAAY;AACxB,QAAI,cAAc;AAChB,WAAK,cAAc,gBAAgB;AACnC,WAAK,cAAA;AAAA,IACP,OAAO;AACL,WAAK,cAAc;AAAA,IAErB;AAAA,EACF;AAAA,EAEmB,SAAyB;AAC1C,UAAM,UAAkB,uBAAuB,KAAK,IAAI;AACxD,UAAM,eAAuB,KAAK,YAAY,YAAY,WAAW,KAAK,OAAO,KAAK;AAGtF,WAAO;AAAA;AAAA,8BAEmB,YAAY;AAAA,kCACR,OAAO;AAAA;AAAA,sBAEnB,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA,EAIpC;AACF;AAjDa,QACK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,UAAU,CAAC;AAC7B;AAE2C,gBAAA;AAAA,EAA1C,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAN9B,QAMgC,WAAA,QAAA,CAAA;AACf,gBAAA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAPf,QAOiB,WAAA,QAAA,CAAA;AACA,gBAAA;AAAA,EAA3B,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GARf,QAQiB,WAAA,WAAA,CAAA;AAGX,gBAAA;AAAA,EAAhB,MAAA;AAAM,GAXI,QAWM,WAAA,eAAA,CAAA;AAXN,UAAN,gBAAA;AAAA,EADN,cAAc,UAAU;AAAA,GACZ,OAAA;"}
1
+ {"version":3,"file":"index22.js","sources":["../src/components/atoms/display-heading/lib-display-heading.component.ts"],"sourcesContent":["import { LitElement, css, unsafeCSS, type TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { renderDisplayHeading } from './lib-display-heading.html';\nimport type {\n DisplayHeadingSurface,\n DisplayHeadingSize,\n DisplayHeadingTag,\n} from './lib-display-heading.types';\nimport componentCss from './lib-display-heading.css?inline';\nimport sharedTokens from '../../../styles/shared/tokens.css?inline';\n\n/**\n * `<lib-display-heading>` — Titular de display editorial.\n *\n * Heading en Cormorant Garamond con peso 300 y acento itálico en kaki.\n * Patrón recurrente del sistema: primera línea normal + segunda línea con\n * texto itálico en `--color-kaki-400`. Acepta un `<lib-eyebrow>` por slot.\n *\n * @tag lib-display-heading\n *\n * @attr {string} line1 - Primera línea del titular.\n * @attr {string} line2-prefix - Texto antes del acento en la segunda línea.\n * @attr {string} accent - Texto en itálica kaki (acento).\n * @attr {string} description - Párrafo de descripción (alternativa al slot).\n * @attr {'dark'|'light'|'washi'} surface - Superficie sobre la que se muestra.\n * @attr {'sm'|'md'|'lg'} size - Tamaño tipográfico fluido.\n * @attr {'h1'|'h2'|'h3'|'h4'} tag - Tag semántico del heading.\n * @attr {boolean} centered - Centra el bloque.\n * @attr {boolean} animate - Activa la animación de entrada fade-up.\n *\n * @slot eyebrow - Acepta un `<lib-eyebrow>` como prefijo.\n * @slot description - Descripción como rich content (alternativa a `description`).\n *\n * @csspart wrapper - Div contenedor externo.\n * @csspart heading - El elemento h1–h4.\n * @csspart description - El párrafo de descripción.\n *\n * @example\n * <!-- Básico -->\n * <lib-display-heading\n * line1=\"Todo lo que\"\n * line2-prefix=\"necesitas,\"\n * accent=\"nada más\"\n * surface=\"dark\"\n * ></lib-display-heading>\n *\n * <!-- Con eyebrow y descripción -->\n * <lib-display-heading\n * line1=\"La belleza\"\n * line2-prefix=\"de lo\"\n * accent=\"austero\"\n * surface=\"dark\"\n * size=\"lg\"\n * description=\"66 componentes sin dependencias.\"\n * >\n * <lib-eyebrow slot=\"eyebrow\" effect=\"kintsugi\" size=\"lg\">\n * Design System · v0.1.0\n * </lib-eyebrow>\n * </lib-display-heading>\n */\n@customElement('lib-display-heading')\nexport class LibDisplayHeading extends LitElement {\n\n static override styles = [\n css`${unsafeCSS(sharedTokens)}`,\n css`${unsafeCSS(componentCss)}`,\n ];\n\n /** Primera línea del titular */\n @property({ type: String })\n line1 = '';\n\n /** Texto antes del acento en la segunda línea */\n @property({ type: String, attribute: 'line2-prefix' })\n line2Prefix = '';\n\n /** Texto en itálica kaki */\n @property({ type: String })\n accent = '';\n\n /** Párrafo de descripción inline */\n @property({ type: String })\n description = '';\n\n /** Superficie sobre la que aparece */\n @property({ type: String, reflect: true })\n surface: DisplayHeadingSurface = 'light';\n\n /** Tamaño tipográfico fluido */\n @property({ type: String, reflect: true })\n size: DisplayHeadingSize = 'md';\n\n /** Tag semántico del heading */\n @property({ type: String, reflect: true })\n tag: DisplayHeadingTag = 'h2';\n\n /** Centra el bloque */\n @property({ type: Boolean, reflect: true })\n centered = false;\n\n /** Activa animación de entrada */\n @property({ type: Boolean, reflect: true })\n _animate = false;\n\n protected override render(): TemplateResult {\n return renderDisplayHeading(this);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'lib-display-heading': LibDisplayHeading;\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;AA6DO,IAAM,oBAAN,cAAgC,WAAW;AAAA,EAA3C,cAAA;AAAA,UAAA,GAAA,SAAA;AASL,SAAA,QAAQ;AAIR,SAAA,cAAc;AAId,SAAA,SAAS;AAIT,SAAA,cAAc;AAId,SAAA,UAAiC;AAIjC,SAAA,OAA2B;AAI3B,SAAA,MAAyB;AAIzB,SAAA,WAAW;AAIX,SAAA,WAAW;AAAA,EAAA;AAAA,EAEQ,SAAyB;AAC1C,WAAO,qBAAqB,IAAI;AAAA,EAClC;AACF;AA9Ca,kBAEK,SAAS;AAAA,EACvB,MAAM,UAAU,YAAY,CAAC;AAAA,EAC7B,MAAM,UAAU,YAAY,CAAC;AAC/B;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GARf,kBASX,WAAA,SAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,gBAAgB;AAAA,GAZ1C,kBAaX,WAAA,eAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAhBf,kBAiBX,WAAA,UAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GApBf,kBAqBX,WAAA,eAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAxB9B,kBAyBX,WAAA,WAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GA5B9B,kBA6BX,WAAA,QAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,MAAM;AAAA,GAhC9B,kBAiCX,WAAA,OAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GApC/B,kBAqCX,WAAA,YAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM;AAAA,GAxC/B,kBAyCX,WAAA,YAAA,CAAA;AAzCW,oBAAN,gBAAA;AAAA,EADN,cAAc,qBAAqB;AAAA,GACvB,iBAAA;"}
package/dist/index220.js CHANGED
@@ -1,76 +1,84 @@
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);
1
+ import { nothing, html } from "lit";
2
+ function panelWrapClass(p) {
3
+ const classes = ["mo-panel-wrap"];
4
+ if (p.size !== "md") classes.push(`mo-${p.size}`);
5
+ if (p._animate === "slide-up") classes.push("mo-slide-up");
6
+ if (p._animate === "slide-down") classes.push("mo-slide-down");
7
+ if (p.dark) classes.push("mo-dark");
8
+ return classes.join(" ");
9
+ }
10
+ function panelClass(variant) {
11
+ const classes = ["mo-panel"];
12
+ if (variant === "editorial") classes.push("is-editorial");
13
+ if (variant === "danger") classes.push("is-danger");
14
+ return classes.join(" ");
15
+ }
16
+ function iconClass(tone) {
17
+ const classes = ["mo-header-icon"];
18
+ if (tone !== "default") classes.push(`is-${tone}`);
19
+ return classes.join(" ");
20
+ }
21
+ function modalTemplate(p) {
16
22
  return html`
17
23
  <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}%`}
24
+ class="mo-backdrop"
25
+ part="backdrop"
26
+ @click="${p.onBackdropClick}"
25
27
  >
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
- `}
28
+ <div
29
+ class="${panelWrapClass(p)}"
30
+ part="panel-wrap"
31
+ role="dialog"
32
+ aria-modal="true"
33
+ aria-labelledby="mo-title"
34
+ @click="${(e) => e.stopPropagation()}"
35
+ >
36
+ <div class="${panelClass(p.variant)}" part="panel">
37
+
38
+ <!-- ── HEADER ── -->
39
+ <div class="mo-header" part="header">
40
+
41
+ <!-- Ícono opcional — tone prop activa el wrapper -->
42
+ ${p.iconTone !== null ? html`
43
+ <div class="${iconClass(p.iconTone)}" part="icon">
44
+ <slot name="icon"></slot>
45
+ </div>
46
+ ` : nothing}
47
+
48
+ <!-- Título y subtítulo -->
49
+ <div class="mo-header-text">
50
+ <h2 id="mo-title" class="mo-title">${p.heading}</h2>
51
+ ${p.subtitle ? html`<p class="mo-subtitle">${p.subtitle}</p>` : nothing}
52
+ </div>
53
+
54
+ <!-- Botón de cierre -->
55
+ <button
56
+ class="mo-close"
57
+ part="close-btn"
58
+ aria-label="Cerrar"
59
+ @click="${p.onClose}"
60
+ >×</button>
61
+ </div>
62
+
63
+ <!-- ── BODY — slot default ── -->
64
+ <div class="mo-body" part="body">
65
+ <slot></slot>
66
+ </div>
67
+
68
+ <!-- ── FOOTER ── -->
69
+ <div class="mo-footer" part="footer">
70
+ ${p.footerInfo ? html`
71
+ <span class="mo-footer-info">${p.footerInfo}</span>
72
+ ` : nothing}
73
+ <slot name="footer"></slot>
74
+ </div>
52
75
 
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
76
  </div>
69
- ` : nothing}
77
+ </div>
70
78
  </div>
71
79
  `;
72
80
  }
73
81
  export {
74
- progressCircleTemplate
82
+ modalTemplate
75
83
  };
76
84
  //# sourceMappingURL=index220.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index220.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 = × 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;"}
1
+ {"version":3,"file":"index220.js","sources":["../src/components/molecules/modal/lib-modal.html.ts"],"sourcesContent":["import { html, nothing, TemplateResult } from 'lit';\nimport { ModalAnimate, ModalIconTone, ModalSize, ModalVariant } from './lib-modal.types';\n\nexport interface ModalTemplateProps {\n /* Estado */\n open: boolean;\n /* Panel */\n size: ModalSize;\n variant: ModalVariant;\n _animate: ModalAnimate;\n dark: boolean;\n /* Header */\n heading: string;\n subtitle: string;\n iconTone: ModalIconTone | null;\n /* Footer */\n footerInfo: string;\n /* Handlers */\n onClose: () => void;\n onBackdropClick: (e: MouseEvent) => void;\n}\n\n/** Clases del contenedor del panel (.mo-panel-wrap). */\nfunction panelWrapClass(p: ModalTemplateProps): string {\n const classes = ['mo-panel-wrap'];\n if (p.size !== 'md') classes.push(`mo-${p.size}`);\n if (p._animate === 'slide-up') classes.push('mo-slide-up');\n if (p._animate === 'slide-down') classes.push('mo-slide-down');\n if (p.dark) classes.push('mo-dark');\n return classes.join(' ');\n}\n\n/** Clases del panel (.mo-panel). */\nfunction panelClass(variant: ModalVariant): string {\n const classes = ['mo-panel'];\n if (variant === 'editorial') classes.push('is-editorial');\n if (variant === 'danger') classes.push('is-danger');\n return classes.join(' ');\n}\n\n/** Clases del ícono de header. */\nfunction iconClass(tone: ModalIconTone): string {\n const classes = ['mo-header-icon'];\n if (tone !== 'default') classes.push(`is-${tone}`);\n return classes.join(' ');\n}\n\nexport function modalTemplate(p: ModalTemplateProps): TemplateResult {\n return html`\n <div\n class=\"mo-backdrop\"\n part=\"backdrop\"\n @click=\"${p.onBackdropClick}\"\n >\n <div\n class=\"${panelWrapClass(p)}\"\n part=\"panel-wrap\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"mo-title\"\n @click=\"${(e: MouseEvent):void => e.stopPropagation()}\"\n >\n <div class=\"${panelClass(p.variant)}\" part=\"panel\">\n\n <!-- ── HEADER ── -->\n <div class=\"mo-header\" part=\"header\">\n\n <!-- Ícono opcional tone prop activa el wrapper -->\n ${p.iconTone !== null ? html`\n <div class=\"${iconClass(p.iconTone)}\" part=\"icon\">\n <slot name=\"icon\"></slot>\n </div>\n ` : nothing}\n\n <!-- Título y subtítulo -->\n <div class=\"mo-header-text\">\n <h2 id=\"mo-title\" class=\"mo-title\">${p.heading}</h2>\n ${p.subtitle ? html`<p class=\"mo-subtitle\">${p.subtitle}</p>` : nothing}\n </div>\n\n <!-- Botón de cierre -->\n <button\n class=\"mo-close\"\n part=\"close-btn\"\n aria-label=\"Cerrar\"\n @click=\"${p.onClose}\"\n >×</button>\n </div>\n\n <!-- ── BODY — slot default ── -->\n <div class=\"mo-body\" part=\"body\">\n <slot></slot>\n </div>\n\n <!-- ── FOOTER ── -->\n <div class=\"mo-footer\" part=\"footer\">\n ${p.footerInfo ? html`\n <span class=\"mo-footer-info\">${p.footerInfo}</span>\n ` : nothing}\n <slot name=\"footer\"></slot>\n </div>\n\n </div>\n </div>\n </div>\n `;\n}"],"names":[],"mappings":";AAuBA,SAAS,eAAe,GAA+B;AACrD,QAAM,UAAU,CAAC,eAAe;AAChC,MAAI,EAAE,SAAS,KAAc,SAAQ,KAAK,MAAM,EAAE,IAAI,EAAE;AACxD,MAAI,EAAE,aAAa,WAAc,SAAQ,KAAK,aAAa;AAC3D,MAAI,EAAE,aAAa,aAAc,SAAQ,KAAK,eAAe;AAC7D,MAAI,EAAE,KAAuB,SAAQ,KAAK,SAAS;AACnD,SAAO,QAAQ,KAAK,GAAG;AACzB;AAGA,SAAS,WAAW,SAA+B;AACjD,QAAM,UAAU,CAAC,UAAU;AAC3B,MAAI,YAAY,YAAa,SAAQ,KAAK,cAAc;AACxD,MAAI,YAAY,SAAa,SAAQ,KAAK,WAAW;AACrD,SAAO,QAAQ,KAAK,GAAG;AACzB;AAGA,SAAS,UAAU,MAA6B;AAC9C,QAAM,UAAU,CAAC,gBAAgB;AACjC,MAAI,SAAS,UAAW,SAAQ,KAAK,MAAM,IAAI,EAAE;AACjD,SAAO,QAAQ,KAAK,GAAG;AACzB;AAEO,SAAS,cAAc,GAAuC;AACnE,SAAO;AAAA;AAAA;AAAA;AAAA,gBAIO,EAAE,eAAe;AAAA;AAAA;AAAA,iBAGhB,eAAe,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKhB,CAAC,MAAuB,EAAE,iBAAiB;AAAA;AAAA,sBAEvC,WAAW,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAM7B,EAAE,aAAa,OAAO;AAAA,4BACR,UAAU,EAAE,QAAQ,CAAC;AAAA;AAAA;AAAA,gBAGjC,OAAO;AAAA;AAAA;AAAA;AAAA,mDAI4B,EAAE,OAAO;AAAA,gBAC5C,EAAE,WAAW,8BAA8B,EAAE,QAAQ,SAAS,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQ7D,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAWnB,EAAE,aAAa;AAAA,6CACgB,EAAE,UAAU;AAAA,gBACzC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQvB;"}