@7pmlabs/design-system 1.0.10 → 1.0.11

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 (427) hide show
  1. package/README.md +57 -6
  2. package/dist/design-system.css +1 -1
  3. package/dist/design-system.js +66 -60
  4. package/dist/design-system100.js +4 -5
  5. package/dist/design-system100.js.map +1 -1
  6. package/dist/design-system101.js +53 -506
  7. package/dist/design-system101.js.map +1 -1
  8. package/dist/{design-system93.js → design-system102.js} +1 -1
  9. package/dist/design-system102.js.map +1 -0
  10. package/dist/design-system103.js +13 -5
  11. package/dist/design-system103.js.map +1 -1
  12. package/dist/design-system104.js +109 -7
  13. package/dist/design-system104.js.map +1 -1
  14. package/dist/design-system106.js +9 -0
  15. package/dist/design-system106.js.map +1 -0
  16. package/dist/design-system107.js +206 -6
  17. package/dist/design-system107.js.map +1 -1
  18. package/dist/design-system109.js +9 -0
  19. package/dist/design-system109.js.map +1 -0
  20. package/dist/design-system110.js +507 -6
  21. package/dist/design-system110.js.map +1 -1
  22. package/dist/design-system112.js +8 -0
  23. package/dist/design-system112.js.map +1 -0
  24. package/dist/design-system113.js +7 -5
  25. package/dist/design-system113.js.map +1 -1
  26. package/dist/design-system114.js +209 -9
  27. package/dist/design-system114.js.map +1 -1
  28. package/dist/design-system116.js +9 -0
  29. package/dist/design-system116.js.map +1 -0
  30. package/dist/design-system117.js +224 -6
  31. package/dist/design-system117.js.map +1 -1
  32. package/dist/design-system119.js +9 -0
  33. package/dist/design-system119.js.map +1 -0
  34. package/dist/design-system12.js.map +1 -1
  35. package/dist/design-system120.js +163 -5
  36. package/dist/design-system120.js.map +1 -1
  37. package/dist/design-system122.js +5 -90
  38. package/dist/design-system122.js.map +1 -1
  39. package/dist/design-system123.js +12 -0
  40. package/dist/design-system123.js.map +1 -0
  41. package/dist/design-system124.js +274 -5
  42. package/dist/design-system124.js.map +1 -1
  43. package/dist/design-system126.js +9 -0
  44. package/dist/design-system126.js.map +1 -0
  45. package/dist/design-system127.js +16 -5
  46. package/dist/design-system127.js.map +1 -1
  47. package/dist/design-system129.js +8 -0
  48. package/dist/design-system129.js.map +1 -0
  49. package/dist/design-system130.js +12 -5
  50. package/dist/design-system130.js.map +1 -1
  51. package/dist/design-system131.js +76 -137
  52. package/dist/design-system131.js.map +1 -1
  53. package/dist/design-system133.js +1 -1
  54. package/dist/design-system133.js.map +1 -1
  55. package/dist/design-system134.js +37 -90
  56. package/dist/design-system134.js.map +1 -1
  57. package/dist/design-system136.js +1 -1
  58. package/dist/design-system136.js.map +1 -1
  59. package/dist/design-system137.js +226 -20
  60. package/dist/design-system137.js.map +1 -1
  61. package/dist/design-system139.js +4 -5
  62. package/dist/design-system139.js.map +1 -1
  63. package/dist/design-system140.js +151 -9
  64. package/dist/design-system140.js.map +1 -1
  65. package/dist/design-system142.js +3 -2
  66. package/dist/design-system142.js.map +1 -1
  67. package/dist/design-system143.js +93 -19
  68. package/dist/design-system143.js.map +1 -1
  69. package/dist/design-system145.js +5 -158
  70. package/dist/design-system145.js.map +1 -1
  71. package/dist/design-system146.js +12 -0
  72. package/dist/design-system146.js.map +1 -0
  73. package/dist/design-system147.js +37 -5
  74. package/dist/design-system147.js.map +1 -1
  75. package/dist/design-system148.js +4 -307
  76. package/dist/design-system148.js.map +1 -1
  77. package/dist/design-system149.js +24 -0
  78. package/dist/{design-system144.js.map → design-system149.js.map} +1 -1
  79. package/dist/design-system150.js +2 -3
  80. package/dist/design-system150.js.map +1 -1
  81. package/dist/design-system151.js +131 -213
  82. package/dist/design-system151.js.map +1 -1
  83. package/dist/design-system153.js +1 -1
  84. package/dist/design-system153.js.map +1 -1
  85. package/dist/design-system154.js +278 -160
  86. package/dist/design-system154.js.map +1 -1
  87. package/dist/design-system156.js +1 -1
  88. package/dist/design-system156.js.map +1 -1
  89. package/dist/design-system157.js +240 -3
  90. package/dist/design-system157.js.map +1 -1
  91. package/dist/design-system159.js +8 -0
  92. package/dist/design-system159.js.map +1 -0
  93. package/dist/design-system16.js.map +1 -1
  94. package/dist/design-system160.js +189 -6
  95. package/dist/design-system160.js.map +1 -1
  96. package/dist/design-system162.js +8 -0
  97. package/dist/design-system162.js.map +1 -0
  98. package/dist/design-system163.js +3 -6
  99. package/dist/design-system163.js.map +1 -1
  100. package/dist/design-system164.js +46 -57
  101. package/dist/design-system164.js.map +1 -1
  102. package/dist/design-system166.js +2 -2
  103. package/dist/design-system166.js.map +1 -1
  104. package/dist/design-system167.js +44 -170
  105. package/dist/design-system167.js.map +1 -1
  106. package/dist/design-system169.js +2 -2
  107. package/dist/design-system169.js.map +1 -1
  108. package/dist/design-system170.js +55 -101
  109. package/dist/design-system170.js.map +1 -1
  110. package/dist/design-system172.js +5 -4
  111. package/dist/design-system172.js.map +1 -1
  112. package/dist/design-system173.js +182 -11
  113. package/dist/design-system173.js.map +1 -1
  114. package/dist/design-system175.js +9 -0
  115. package/dist/design-system175.js.map +1 -0
  116. package/dist/design-system176.js +115 -6
  117. package/dist/design-system176.js.map +1 -1
  118. package/dist/design-system178.js +8 -0
  119. package/dist/design-system178.js.map +1 -0
  120. package/dist/design-system179.js +11 -5
  121. package/dist/design-system179.js.map +1 -1
  122. package/dist/design-system180.js +444 -70
  123. package/dist/design-system180.js.map +1 -1
  124. package/dist/design-system182.js +5 -4
  125. package/dist/design-system182.js.map +1 -1
  126. package/dist/design-system183.js +21 -21
  127. package/dist/design-system183.js.map +1 -1
  128. package/dist/design-system185.js +1 -1
  129. package/dist/design-system185.js.map +1 -1
  130. package/dist/design-system186.js +85 -25
  131. package/dist/design-system186.js.map +1 -1
  132. package/dist/design-system188.js +1 -1
  133. package/dist/design-system188.js.map +1 -1
  134. package/dist/design-system189.js +7 -5
  135. package/dist/design-system189.js.map +1 -1
  136. package/dist/design-system19.js.map +1 -1
  137. package/dist/design-system191.js +1 -1
  138. package/dist/design-system191.js.map +1 -1
  139. package/dist/design-system192.js +20 -23
  140. package/dist/design-system192.js.map +1 -1
  141. package/dist/design-system194.js +1 -1
  142. package/dist/design-system194.js.map +1 -1
  143. package/dist/design-system195.js +24 -323
  144. package/dist/design-system195.js.map +1 -1
  145. package/dist/design-system197.js +1 -1
  146. package/dist/design-system197.js.map +1 -1
  147. package/dist/design-system198.js +19 -88
  148. package/dist/design-system198.js.map +1 -1
  149. package/dist/design-system200.js +1 -1
  150. package/dist/design-system200.js.map +1 -1
  151. package/dist/design-system201.js +330 -17
  152. package/dist/design-system201.js.map +1 -1
  153. package/dist/design-system203.js +5 -3
  154. package/dist/design-system203.js.map +1 -1
  155. package/dist/design-system204.js +88 -407
  156. package/dist/design-system204.js.map +1 -1
  157. package/dist/design-system206.js +1 -1
  158. package/dist/design-system206.js.map +1 -1
  159. package/dist/design-system207.js +17 -106
  160. package/dist/design-system207.js.map +1 -1
  161. package/dist/{design-system202.js → design-system208.js} +2 -2
  162. package/dist/{design-system202.js.map → design-system208.js.map} +1 -1
  163. package/dist/design-system209.js +3 -6
  164. package/dist/design-system209.js.map +1 -1
  165. package/dist/design-system210.js +403 -90
  166. package/dist/design-system210.js.map +1 -1
  167. package/dist/design-system212.js +4 -5
  168. package/dist/design-system212.js.map +1 -1
  169. package/dist/design-system213.js +45 -723
  170. package/dist/design-system213.js.map +1 -1
  171. package/dist/design-system215.js +1 -1
  172. package/dist/design-system215.js.map +1 -1
  173. package/dist/design-system216.js +88 -11
  174. package/dist/design-system216.js.map +1 -1
  175. package/dist/design-system217.js +4 -525
  176. package/dist/design-system217.js.map +1 -1
  177. package/dist/design-system218.js +111 -0
  178. package/dist/design-system218.js.map +1 -0
  179. package/dist/design-system22.js.map +1 -1
  180. package/dist/design-system220.js +6 -3
  181. package/dist/design-system220.js.map +1 -1
  182. package/dist/design-system221.js +103 -43
  183. package/dist/design-system221.js.map +1 -1
  184. package/dist/design-system223.js +6 -283
  185. package/dist/design-system223.js.map +1 -1
  186. package/dist/design-system224.js +740 -0
  187. package/dist/design-system224.js.map +1 -0
  188. package/dist/design-system226.js +5 -119
  189. package/dist/design-system226.js.map +1 -1
  190. package/dist/{design-system60.js → design-system227.js} +6 -8
  191. package/dist/design-system227.js.map +1 -0
  192. package/dist/design-system228.js +525 -5
  193. package/dist/design-system228.js.map +1 -1
  194. package/dist/{design-system219.js → design-system230.js} +2 -2
  195. package/dist/{design-system219.js.map → design-system230.js.map} +1 -1
  196. package/dist/design-system231.js +3 -5
  197. package/dist/design-system231.js.map +1 -1
  198. package/dist/design-system232.js +42 -50
  199. package/dist/design-system232.js.map +1 -1
  200. package/dist/design-system233.js +1 -1
  201. package/dist/design-system233.js.map +1 -1
  202. package/dist/design-system234.js +254 -141
  203. package/dist/design-system234.js.map +1 -1
  204. package/dist/design-system236.js +1 -1
  205. package/dist/design-system236.js.map +1 -1
  206. package/dist/design-system237.js +119 -7
  207. package/dist/design-system237.js.map +1 -1
  208. package/dist/design-system239.js +8 -0
  209. package/dist/design-system239.js.map +1 -0
  210. package/dist/design-system240.js +112 -5
  211. package/dist/design-system240.js.map +1 -1
  212. package/dist/design-system242.js +8 -0
  213. package/dist/design-system242.js.map +1 -0
  214. package/dist/design-system243.js +54 -6
  215. package/dist/design-system243.js.map +1 -1
  216. package/dist/design-system244.js +4 -7
  217. package/dist/design-system244.js.map +1 -1
  218. package/dist/design-system245.js +139 -343
  219. package/dist/design-system245.js.map +1 -1
  220. package/dist/design-system247.js +4 -5
  221. package/dist/design-system247.js.map +1 -1
  222. package/dist/design-system248.js +10 -0
  223. package/dist/design-system248.js.map +1 -0
  224. package/dist/{design-system238.js → design-system249.js} +2 -2
  225. package/dist/design-system249.js.map +1 -0
  226. package/dist/design-system25.js.map +1 -1
  227. package/dist/design-system251.js +8 -0
  228. package/dist/design-system251.js.map +1 -0
  229. package/dist/{design-system241.js → design-system252.js} +1 -1
  230. package/dist/design-system252.js.map +1 -0
  231. package/dist/design-system254.js +9 -0
  232. package/dist/design-system254.js.map +1 -0
  233. package/dist/design-system255.js +12 -0
  234. package/dist/design-system255.js.map +1 -0
  235. package/dist/design-system256.js +769 -0
  236. package/dist/design-system256.js.map +1 -0
  237. package/dist/design-system258.js +9 -0
  238. package/dist/design-system258.js.map +1 -0
  239. package/dist/design-system259.js +10 -0
  240. package/dist/design-system259.js.map +1 -0
  241. package/dist/design-system260.js +377 -0
  242. package/dist/design-system260.js.map +1 -0
  243. package/dist/design-system262.js +9 -0
  244. package/dist/design-system262.js.map +1 -0
  245. package/dist/design-system28.js.map +1 -1
  246. package/dist/design-system3.js.map +1 -1
  247. package/dist/design-system30.js +21 -138
  248. package/dist/design-system30.js.map +1 -1
  249. package/dist/design-system32.js +5 -4
  250. package/dist/design-system32.js.map +1 -1
  251. package/dist/design-system33.js +488 -14
  252. package/dist/design-system33.js.map +1 -1
  253. package/dist/design-system35.js +1 -1
  254. package/dist/design-system35.js.map +1 -1
  255. package/dist/design-system36.js +135 -17
  256. package/dist/design-system36.js.map +1 -1
  257. package/dist/design-system38.js +1 -1
  258. package/dist/design-system38.js.map +1 -1
  259. package/dist/design-system39.js +16 -11
  260. package/dist/design-system39.js.map +1 -1
  261. package/dist/design-system4.js.map +1 -1
  262. package/dist/design-system41.js +8 -0
  263. package/dist/design-system41.js.map +1 -0
  264. package/dist/design-system42.js +26 -5
  265. package/dist/design-system42.js.map +1 -1
  266. package/dist/design-system44.js +5 -71
  267. package/dist/design-system44.js.map +1 -1
  268. package/dist/design-system45.js +353 -0
  269. package/dist/design-system45.js.map +1 -0
  270. package/dist/design-system47.js +5 -50
  271. package/dist/design-system47.js.map +1 -1
  272. package/dist/design-system48.js +11 -4
  273. package/dist/design-system48.js.map +1 -1
  274. package/dist/design-system49.js +476 -3
  275. package/dist/design-system49.js.map +1 -1
  276. package/dist/design-system51.js +8 -0
  277. package/dist/design-system51.js.map +1 -0
  278. package/dist/design-system52.js +3 -5
  279. package/dist/design-system52.js.map +1 -1
  280. package/dist/design-system53.js +56 -83
  281. package/dist/design-system53.js.map +1 -1
  282. package/dist/design-system55.js +5 -4
  283. package/dist/design-system55.js.map +1 -1
  284. package/dist/design-system56.js +50 -11
  285. package/dist/design-system56.js.map +1 -1
  286. package/dist/design-system57.js +4 -591
  287. package/dist/design-system57.js.map +1 -1
  288. package/dist/design-system58.js +6 -0
  289. package/dist/design-system58.js.map +1 -0
  290. package/dist/design-system59.js +64 -5
  291. package/dist/design-system59.js.map +1 -1
  292. package/dist/design-system61.js +5 -696
  293. package/dist/design-system61.js.map +1 -1
  294. package/dist/design-system62.js +101 -0
  295. package/dist/design-system62.js.map +1 -0
  296. package/dist/design-system64.js +5 -158
  297. package/dist/design-system64.js.map +1 -1
  298. package/dist/design-system65.js +14 -0
  299. package/dist/design-system65.js.map +1 -0
  300. package/dist/design-system66.js +591 -5
  301. package/dist/design-system66.js.map +1 -1
  302. package/dist/design-system68.js +3 -2
  303. package/dist/design-system68.js.map +1 -1
  304. package/dist/design-system69.js +13 -49
  305. package/dist/design-system69.js.map +1 -1
  306. package/dist/design-system7.js.map +1 -1
  307. package/dist/design-system70.js +699 -0
  308. package/dist/{design-system63.js.map → design-system70.js.map} +1 -1
  309. package/dist/design-system72.js +5 -199
  310. package/dist/design-system72.js.map +1 -1
  311. package/dist/design-system73.js +161 -0
  312. package/dist/design-system73.js.map +1 -0
  313. package/dist/design-system75.js +5 -7
  314. package/dist/design-system75.js.map +1 -1
  315. package/dist/design-system76.js +25 -269
  316. package/dist/design-system76.js.map +1 -1
  317. package/dist/design-system77.js +7 -0
  318. package/dist/design-system77.js.map +1 -0
  319. package/dist/design-system78.js +49 -5
  320. package/dist/design-system78.js.map +1 -1
  321. package/dist/{design-system71.js → design-system80.js} +2 -2
  322. package/dist/{design-system71.js.map → design-system80.js.map} +1 -1
  323. package/dist/design-system81.js +199 -5
  324. package/dist/design-system81.js.map +1 -1
  325. package/dist/design-system83.js +5 -99
  326. package/dist/design-system83.js.map +1 -1
  327. package/dist/design-system84.js +10 -0
  328. package/dist/design-system84.js.map +1 -0
  329. package/dist/design-system85.js +273 -5
  330. package/dist/design-system85.js.map +1 -1
  331. package/dist/design-system87.js +8 -0
  332. package/dist/design-system87.js.map +1 -0
  333. package/dist/design-system88.js +57 -5
  334. package/dist/design-system88.js.map +1 -1
  335. package/dist/design-system90.js +8 -0
  336. package/dist/design-system90.js.map +1 -0
  337. package/dist/design-system91.js +11 -5
  338. package/dist/design-system91.js.map +1 -1
  339. package/dist/design-system92.js +98 -53
  340. package/dist/design-system92.js.map +1 -1
  341. package/dist/design-system94.js +5 -13
  342. package/dist/design-system94.js.map +1 -1
  343. package/dist/design-system95.js +61 -104
  344. package/dist/design-system95.js.map +1 -1
  345. package/dist/design-system97.js +4 -5
  346. package/dist/design-system97.js.map +1 -1
  347. package/dist/design-system98.js +80 -198
  348. package/dist/design-system98.js.map +1 -1
  349. package/dist/types/components/BCalendar/BCalendar.spec.d.ts +1 -0
  350. package/dist/types/components/BCalendar/BCalendar.vue.d.ts +114 -0
  351. package/dist/types/components/BCalendar/index.d.ts +2 -0
  352. package/dist/types/components/BCalendar/types.d.ts +54 -0
  353. package/dist/types/components/BCarousel/BCarousel.spec.d.ts +1 -0
  354. package/dist/types/components/BCarousel/BCarousel.vue.d.ts +133 -0
  355. package/dist/types/components/BCarousel/index.d.ts +2 -0
  356. package/dist/types/components/BCarousel/types.d.ts +15 -0
  357. package/dist/types/components/BPagination/BPagination.vue.d.ts +1 -1
  358. package/dist/types/components/BStatistic/BStatistic.spec.d.ts +1 -0
  359. package/dist/types/components/BStatistic/BStatistic.vue.d.ts +44 -0
  360. package/dist/types/components/BStatistic/BStatisticTimer.vue.d.ts +50 -0
  361. package/dist/types/components/BStatistic/index.d.ts +3 -0
  362. package/dist/types/components/BStatistic/types.d.ts +6 -0
  363. package/dist/types/components/BTreeSelect/BTreeSelect.spec.d.ts +1 -0
  364. package/dist/types/components/BTreeSelect/BTreeSelect.vue.d.ts +143 -0
  365. package/dist/types/components/BTreeSelect/index.d.ts +2 -0
  366. package/dist/types/components/BTreeSelect/types.d.ts +77 -0
  367. package/dist/types/components/index.d.ts +4 -0
  368. package/dist/types/types.d.ts +3 -0
  369. package/package.json +6 -3
  370. package/dist/design-system105.js +0 -212
  371. package/dist/design-system105.js.map +0 -1
  372. package/dist/design-system108.js +0 -227
  373. package/dist/design-system108.js.map +0 -1
  374. package/dist/design-system111.js +0 -166
  375. package/dist/design-system111.js.map +0 -1
  376. package/dist/design-system115.js +0 -277
  377. package/dist/design-system115.js.map +0 -1
  378. package/dist/design-system118.js +0 -19
  379. package/dist/design-system118.js.map +0 -1
  380. package/dist/design-system121.js +0 -15
  381. package/dist/design-system121.js.map +0 -1
  382. package/dist/design-system125.js +0 -45
  383. package/dist/design-system125.js.map +0 -1
  384. package/dist/design-system128.js +0 -236
  385. package/dist/design-system128.js.map +0 -1
  386. package/dist/design-system141.js +0 -40
  387. package/dist/design-system141.js.map +0 -1
  388. package/dist/design-system144.js +0 -7
  389. package/dist/design-system158.js +0 -61
  390. package/dist/design-system158.js.map +0 -1
  391. package/dist/design-system161.js +0 -59
  392. package/dist/design-system161.js.map +0 -1
  393. package/dist/design-system174.js +0 -465
  394. package/dist/design-system174.js.map +0 -1
  395. package/dist/design-system177.js +0 -38
  396. package/dist/design-system177.js.map +0 -1
  397. package/dist/design-system222.js +0 -7
  398. package/dist/design-system222.js.map +0 -1
  399. package/dist/design-system225.js +0 -8
  400. package/dist/design-system225.js.map +0 -1
  401. package/dist/design-system229.js +0 -115
  402. package/dist/design-system229.js.map +0 -1
  403. package/dist/design-system238.js.map +0 -1
  404. package/dist/design-system241.js.map +0 -1
  405. package/dist/design-system40.js +0 -479
  406. package/dist/design-system40.js.map +0 -1
  407. package/dist/design-system43.js +0 -6
  408. package/dist/design-system43.js.map +0 -1
  409. package/dist/design-system46.js +0 -9
  410. package/dist/design-system46.js.map +0 -1
  411. package/dist/design-system50.js +0 -67
  412. package/dist/design-system50.js.map +0 -1
  413. package/dist/design-system60.js.map +0 -1
  414. package/dist/design-system63.js +0 -8
  415. package/dist/design-system67.js +0 -32
  416. package/dist/design-system67.js.map +0 -1
  417. package/dist/design-system74.js +0 -8
  418. package/dist/design-system74.js.map +0 -1
  419. package/dist/design-system79.js +0 -60
  420. package/dist/design-system79.js.map +0 -1
  421. package/dist/design-system82.js +0 -14
  422. package/dist/design-system82.js.map +0 -1
  423. package/dist/design-system86.js +0 -69
  424. package/dist/design-system86.js.map +0 -1
  425. package/dist/design-system89.js +0 -91
  426. package/dist/design-system89.js.map +0 -1
  427. package/dist/design-system93.js.map +0 -1
@@ -0,0 +1,377 @@
1
+ import { useComponentId as e } from "./design-system10.js";
2
+ import { BUploadFileStatus as t, BUploadListType as n } from "./design-system259.js";
3
+ import { Fragment as r, computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createStaticVNode as c, defineComponent as l, mergeModels as u, normalizeClass as d, normalizeStyle as f, onMounted as p, openBlock as m, ref as h, renderList as g, renderSlot as _, toDisplayString as v, unref as y, useAttrs as b, useModel as x, watch as ee, withModifiers as S } from "vue";
4
+ //#region src/components/BUpload/BUpload.vue?vue&type=script&setup=true&lang.ts
5
+ var C = [
6
+ "tabindex",
7
+ "aria-disabled",
8
+ "aria-label"
9
+ ], w = {
10
+ key: 0,
11
+ class: "b-upload__card-trigger"
12
+ }, T = {
13
+ key: 1,
14
+ class: "b-upload__default-text"
15
+ }, E = [
16
+ "accept",
17
+ "multiple",
18
+ "disabled",
19
+ "webkitdirectory"
20
+ ], te = {
21
+ key: 0,
22
+ class: "b-upload__item-thumbnail",
23
+ "aria-hidden": "true"
24
+ }, ne = ["src", "alt"], re = {
25
+ key: 1,
26
+ class: "b-upload__item-file-icon"
27
+ }, D = { class: "b-upload__item-info" }, O = ["title"], k = { class: "b-upload__item-actions" }, A = ["onClick"], j = ["onClick"], M = ["disabled", "onClick"], N = ["aria-valuenow", "aria-label"], P = {
28
+ key: 2,
29
+ class: "b-upload__hint"
30
+ }, F = /* @__PURE__ */ l({
31
+ inheritAttrs: !1,
32
+ __name: "BUpload",
33
+ props: /* @__PURE__ */ u({
34
+ accept: { default: "" },
35
+ action: {
36
+ type: [String, Function],
37
+ default: ""
38
+ },
39
+ multiple: {
40
+ type: Boolean,
41
+ default: !1
42
+ },
43
+ disabled: {
44
+ type: Boolean,
45
+ default: !1
46
+ },
47
+ directory: {
48
+ type: Boolean,
49
+ default: !1
50
+ },
51
+ maxCount: {},
52
+ listType: { default: () => n.Text },
53
+ method: { default: "POST" },
54
+ name: { default: "file" },
55
+ headers: {},
56
+ data: { type: [Object, Function] },
57
+ withCredentials: {
58
+ type: Boolean,
59
+ default: !1
60
+ },
61
+ openFileDialogOnClick: {
62
+ type: Boolean,
63
+ default: !0
64
+ },
65
+ showUploadList: {
66
+ type: [Boolean, Object],
67
+ default: !0
68
+ },
69
+ defaultFileList: { default: () => [] },
70
+ beforeUpload: { type: Function },
71
+ customRequest: { type: Function }
72
+ }, {
73
+ fileList: { default: void 0 },
74
+ fileListModifiers: {}
75
+ }),
76
+ emits: /* @__PURE__ */ u([
77
+ "change",
78
+ "remove",
79
+ "preview",
80
+ "download",
81
+ "drop"
82
+ ], ["update:fileList"]),
83
+ setup(l, { expose: u, emit: F }) {
84
+ let I = b(), L = x(l, "fileList"), R = F, { componentUID: z } = e(), B = h(null), V = h(!1), H = h(Array.isArray(l.defaultFileList) ? [...l.defaultFileList] : []), U = i({
85
+ get: () => L.value === void 0 ? H.value : L.value,
86
+ set: (e) => {
87
+ H.value = e, L.value !== void 0 && (L.value = e);
88
+ }
89
+ });
90
+ p(() => {
91
+ L.value === void 0 && l.defaultFileList.length > 0 && (H.value = [...l.defaultFileList]);
92
+ }), ee(() => L.value, (e) => {
93
+ e !== void 0 && (H.value = e);
94
+ });
95
+ let W = i(() => l.listType === n.PictureCard || l.listType === n.PictureCircle), G = i(() => l.showUploadList === !1 ? !1 : l.showUploadList === !0 ? {
96
+ showPreviewIcon: !0,
97
+ showRemoveIcon: !0,
98
+ showDownloadIcon: !1
99
+ } : l.showUploadList), K = i(() => l.maxCount !== void 0 && l.maxCount !== 1 && U.value.length >= l.maxCount), q = 0;
100
+ function J() {
101
+ return q += 1, `b-upload-${z.value}-${q}-${Date.now()}`;
102
+ }
103
+ function Y(e) {
104
+ return {
105
+ uid: J(),
106
+ name: e.name,
107
+ size: e.size,
108
+ type: e.type,
109
+ status: t.Uploading,
110
+ percent: 0,
111
+ originFileObj: e
112
+ };
113
+ }
114
+ function X(e, t, n) {
115
+ U.value = t, R("change", {
116
+ file: e,
117
+ fileList: t,
118
+ event: n
119
+ });
120
+ }
121
+ function ie(e) {
122
+ let t = new XMLHttpRequest();
123
+ t.upload.addEventListener("progress", (t) => {
124
+ t.lengthComputable && e.onProgress && e.onProgress({ percent: Math.round(t.loaded / t.total * 100) });
125
+ }), t.addEventListener("load", () => {
126
+ t.status >= 200 && t.status < 300 ? e.onSuccess?.(t.response) : e.onError?.(/* @__PURE__ */ Error(`Upload failed with status ${t.status}`));
127
+ }), t.addEventListener("error", () => {
128
+ e.onError?.(/* @__PURE__ */ Error("Upload network error"));
129
+ }), t.open(e.method || "POST", e.action, !0), e.withCredentials && (t.withCredentials = !0), e.headers && Object.entries(e.headers).forEach(([e, n]) => {
130
+ t.setRequestHeader(e, n);
131
+ });
132
+ let n = new FormData();
133
+ e.data && Object.entries(e.data).forEach(([e, t]) => {
134
+ n.append(e, t);
135
+ }), n.append(e.filename, e.file), t.send(n);
136
+ }
137
+ async function ae(e, t) {
138
+ if (l.beforeUpload) try {
139
+ let n = await l.beforeUpload(e, t);
140
+ if (n === !1) return;
141
+ if (n instanceof Blob) {
142
+ Z(n instanceof File ? n : new File([n], e.name, { type: n.type }));
143
+ return;
144
+ }
145
+ } catch {
146
+ return;
147
+ }
148
+ Z(e);
149
+ }
150
+ function Z(e) {
151
+ let n = Y(e), r;
152
+ r = l.maxCount === 1 ? [n] : l.maxCount === void 0 ? [...U.value, n] : [...U.value, n].slice(-l.maxCount), X(n, r), (typeof l.action == "function" ? l.action(e) : Promise.resolve(l.action)).then((r) => {
153
+ let i = l.customRequest || ie, a = typeof l.data == "function" ? l.data(n) : l.data || {};
154
+ i({
155
+ action: r,
156
+ file: e,
157
+ filename: l.name,
158
+ headers: l.headers,
159
+ data: a,
160
+ withCredentials: l.withCredentials,
161
+ method: l.method,
162
+ onProgress: (e) => {
163
+ let t = {
164
+ ...n,
165
+ percent: e.percent
166
+ };
167
+ X(t, U.value.map((e) => e.uid === n.uid ? t : e));
168
+ },
169
+ onSuccess: (e) => {
170
+ let r = {
171
+ ...n,
172
+ status: t.Done,
173
+ percent: 100,
174
+ response: e
175
+ };
176
+ X(r, U.value.map((e) => e.uid === n.uid ? r : e));
177
+ },
178
+ onError: (e) => {
179
+ let r = {
180
+ ...n,
181
+ status: t.Error,
182
+ error: e
183
+ };
184
+ X(r, U.value.map((e) => e.uid === n.uid ? r : e));
185
+ }
186
+ });
187
+ });
188
+ }
189
+ function Q(e) {
190
+ if (!e || e.length === 0) return;
191
+ let t = Array.from(e), n;
192
+ if (l.maxCount === 1) n = t.slice(0, 1);
193
+ else if (l.maxCount !== void 0) {
194
+ let e = l.maxCount - U.value.length;
195
+ n = e > 0 ? t.slice(0, e) : [];
196
+ } else n = t;
197
+ n.forEach((e) => ae(e, t));
198
+ }
199
+ function oe() {
200
+ l.disabled || !l.openFileDialogOnClick || K.value || B.value?.click();
201
+ }
202
+ function $(e) {
203
+ l.disabled || K.value || (e.key === "Enter" || e.key === " ") && (e.preventDefault(), B.value?.click());
204
+ }
205
+ function se(e) {
206
+ let t = e.target;
207
+ Q(t.files), t.value = "";
208
+ }
209
+ function ce(e) {
210
+ e.preventDefault(), !l.disabled && (V.value = !0);
211
+ }
212
+ function le(e) {
213
+ e.preventDefault(), V.value = !1;
214
+ }
215
+ function ue(e) {
216
+ e.preventDefault(), V.value = !1, !l.disabled && (R("drop", e), Q(e.dataTransfer?.files ?? null));
217
+ }
218
+ function de(e) {
219
+ R("remove", e);
220
+ let n = U.value.filter((t) => t.uid !== e.uid);
221
+ X({
222
+ ...e,
223
+ status: t.Removed
224
+ }, n);
225
+ }
226
+ function fe(e) {
227
+ R("preview", e);
228
+ }
229
+ function pe(e) {
230
+ R("download", e);
231
+ }
232
+ return u({ openFileDialog: () => B.value?.click() }), (e, i) => (m(), o("div", { class: d(["b-upload", {
233
+ "b-upload--disabled": l.disabled,
234
+ "b-upload--drag-over": V.value,
235
+ [`b-upload--${l.listType}`]: !0
236
+ }]) }, [
237
+ !W.value || !K.value ? (m(), o("div", {
238
+ key: 0,
239
+ class: "b-upload__trigger",
240
+ role: "button",
241
+ tabindex: l.disabled ? -1 : 0,
242
+ "aria-disabled": l.disabled || void 0,
243
+ "aria-label": y(I)["aria-label"] || "Upload file",
244
+ onClick: oe,
245
+ onKeydown: $,
246
+ onDragover: ce,
247
+ onDragleave: le,
248
+ onDrop: ue
249
+ }, [_(e.$slots, "default", {}, () => [W.value ? (m(), o("div", w, [...i[0] ||= [c("<span class=\"b-upload__plus-icon\" aria-hidden=\"true\" data-v-36315fd9><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" data-v-36315fd9><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" data-v-36315fd9></line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" data-v-36315fd9></line></svg></span><span class=\"b-upload__card-text\" data-v-36315fd9>Upload</span>", 2)]])) : (m(), o("span", T, "Click to Upload"))], !0)], 40, C)) : a("", !0),
250
+ s("input", {
251
+ ref_key: "inputRef",
252
+ ref: B,
253
+ class: "b-upload__input",
254
+ type: "file",
255
+ accept: l.accept || void 0,
256
+ multiple: l.multiple,
257
+ disabled: l.disabled,
258
+ webkitdirectory: l.directory || void 0,
259
+ "aria-hidden": "true",
260
+ tabindex: "-1",
261
+ onChange: se
262
+ }, null, 40, E),
263
+ G.value !== !1 && U.value.length > 0 ? (m(), o("div", {
264
+ key: 1,
265
+ class: d(["b-upload__list", `b-upload__list--${l.listType}`]),
266
+ role: "list",
267
+ "aria-label": "Uploaded files"
268
+ }, [(m(!0), o(r, null, g(U.value, (e) => (m(), o("div", {
269
+ key: e.uid,
270
+ class: d(["b-upload__item", {
271
+ "b-upload__item--error": e.status === y(t).Error,
272
+ "b-upload__item--done": e.status === y(t).Done,
273
+ "b-upload__item--uploading": e.status === y(t).Uploading
274
+ }]),
275
+ role: "listitem"
276
+ }, [
277
+ l.listType === y(n).Text ? a("", !0) : (m(), o("span", te, [e.thumbUrl || e.url ? (m(), o("img", {
278
+ key: 0,
279
+ src: e.thumbUrl || e.url,
280
+ alt: e.name,
281
+ class: "b-upload__item-image"
282
+ }, null, 8, ne)) : (m(), o("span", re, [...i[1] ||= [s("svg", {
283
+ viewBox: "0 0 24 24",
284
+ fill: "none",
285
+ stroke: "currentColor",
286
+ "stroke-width": "1.5"
287
+ }, [s("path", { d: "M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z" }), s("polyline", { points: "14,2 14,8 20,8" })], -1)]]))])),
288
+ s("span", D, [s("span", {
289
+ class: "b-upload__item-name",
290
+ title: e.name
291
+ }, v(e.name), 9, O)]),
292
+ s("span", k, [
293
+ G.value && G.value.showPreviewIcon && (e.url || e.thumbUrl) ? (m(), o("button", {
294
+ key: 0,
295
+ class: "b-upload__action-btn",
296
+ type: "button",
297
+ "aria-label": "Preview file",
298
+ onClick: S((t) => fe(e), ["stop"])
299
+ }, [...i[2] ||= [s("svg", {
300
+ viewBox: "0 0 24 24",
301
+ fill: "none",
302
+ stroke: "currentColor",
303
+ "stroke-width": "2",
304
+ "aria-hidden": "true"
305
+ }, [s("path", { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" }), s("circle", {
306
+ cx: "12",
307
+ cy: "12",
308
+ r: "3"
309
+ })], -1)]], 8, A)) : a("", !0),
310
+ G.value && G.value.showDownloadIcon && e.status === y(t).Done ? (m(), o("button", {
311
+ key: 1,
312
+ class: "b-upload__action-btn",
313
+ type: "button",
314
+ "aria-label": "Download file",
315
+ onClick: S((t) => pe(e), ["stop"])
316
+ }, [...i[3] ||= [s("svg", {
317
+ viewBox: "0 0 24 24",
318
+ fill: "none",
319
+ stroke: "currentColor",
320
+ "stroke-width": "2",
321
+ "aria-hidden": "true"
322
+ }, [
323
+ s("path", { d: "M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4" }),
324
+ s("polyline", { points: "7,10 12,15 17,10" }),
325
+ s("line", {
326
+ x1: "12",
327
+ y1: "15",
328
+ x2: "12",
329
+ y2: "3"
330
+ })
331
+ ], -1)]], 8, j)) : a("", !0),
332
+ G.value && G.value.showRemoveIcon ? (m(), o("button", {
333
+ key: 2,
334
+ class: "b-upload__action-btn b-upload__action-btn--remove",
335
+ type: "button",
336
+ "aria-label": "Remove file",
337
+ disabled: l.disabled,
338
+ onClick: S((t) => de(e), ["stop"])
339
+ }, [...i[4] ||= [s("svg", {
340
+ viewBox: "0 0 24 24",
341
+ fill: "none",
342
+ stroke: "currentColor",
343
+ "stroke-width": "2",
344
+ "aria-hidden": "true"
345
+ }, [s("line", {
346
+ x1: "18",
347
+ y1: "6",
348
+ x2: "6",
349
+ y2: "18"
350
+ }), s("line", {
351
+ x1: "6",
352
+ y1: "6",
353
+ x2: "18",
354
+ y2: "18"
355
+ })], -1)]], 8, M)) : a("", !0)
356
+ ]),
357
+ e.status === y(t).Uploading ? (m(), o("div", {
358
+ key: 1,
359
+ class: "b-upload__progress",
360
+ role: "progressbar",
361
+ "aria-valuenow": e.percent ?? 0,
362
+ "aria-valuemin": "0",
363
+ "aria-valuemax": "100",
364
+ "aria-label": `Uploading ${e.name}`
365
+ }, [s("div", {
366
+ class: "b-upload__progress-bar",
367
+ style: f({ width: `${e.percent ?? 0}%` })
368
+ }, null, 4)], 8, N)) : a("", !0)
369
+ ], 2))), 128))], 2)) : a("", !0),
370
+ e.$slots.hint ? (m(), o("div", P, [_(e.$slots, "hint", {}, void 0, !0)])) : a("", !0)
371
+ ], 2));
372
+ }
373
+ });
374
+ //#endregion
375
+ export { F as default };
376
+
377
+ //# sourceMappingURL=design-system260.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-system260.js","names":["$slots"],"sources":["../src/components/BUpload/BUpload.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, computed, watch, onMounted, useAttrs } from 'vue';\nimport { useComponentId } from '@/composables/useComponentId';\nimport {\n BUploadListType,\n BUploadFileStatus,\n type BUploadFile,\n type BUploadChangeInfo,\n type BUploadRequestOption,\n type BUploadShowUploadList,\n} from './types';\n\ndefineOptions({ inheritAttrs: false });\n\nconst attrs = useAttrs();\n\n//#region Props\nconst {\n accept = '',\n action = '',\n multiple = false,\n disabled = false,\n directory = false,\n maxCount,\n listType = BUploadListType.Text,\n method = 'POST',\n name: fieldName = 'file',\n headers,\n data,\n withCredentials = false,\n openFileDialogOnClick = true,\n showUploadList = true,\n defaultFileList = [],\n beforeUpload,\n customRequest,\n} = defineProps<{\n /** File types that can be accepted (MIME types or extensions). */\n accept?: string;\n /** Uploading URL. */\n action?: string | ((file: File) => Promise<string>);\n /** Whether to support multiple file selection. */\n multiple?: boolean;\n /** Whether to disable the upload button. */\n disabled?: boolean;\n /** Support uploading directories. */\n directory?: boolean;\n /** Limit the number of uploaded files. */\n maxCount?: number;\n /** Built-in style of the upload list. */\n listType?: BUploadListType | `${BUploadListType}`;\n /** HTTP method for upload request. */\n method?: string;\n /** The name of the file field in the upload request. */\n name?: string;\n /** Custom request headers for upload. */\n headers?: Record<string, string>;\n /** Extra data to include with the upload request. */\n data?: Record<string, unknown> | ((file: BUploadFile) => Record<string, unknown>);\n /** Whether to send cookies with the request. */\n withCredentials?: boolean;\n /** Whether clicking the component opens the file dialog. */\n openFileDialogOnClick?: boolean;\n /** Whether to show the upload list. */\n showUploadList?: boolean | BUploadShowUploadList;\n /** Initial file list for uncontrolled usage. */\n defaultFileList?: BUploadFile[];\n /** Hook before uploading. Return false or a rejected Promise to stop. */\n beforeUpload?: (file: File, fileList: File[]) => boolean | Promise<File | Blob | boolean | void>;\n /** Override the default upload behavior. */\n customRequest?: (options: BUploadRequestOption) => void;\n}>();\n//#endregion\n\n//#region Model & Events\nconst model = defineModel<BUploadFile[]>('fileList', { default: undefined });\n\nconst emit = defineEmits<{\n change: [info: BUploadChangeInfo];\n remove: [file: BUploadFile];\n preview: [file: BUploadFile];\n download: [file: BUploadFile];\n drop: [event: DragEvent];\n}>();\n//#endregion\n\n//#region Internal State\nconst { componentUID } = useComponentId();\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst dragOver = ref(false);\nconst internalFileList = ref<BUploadFile[]>(Array.isArray(defaultFileList) ? [...defaultFileList] : []);\n\nconst fileList = computed<BUploadFile[]>({\n get: () => (model.value !== undefined ? model.value : internalFileList.value),\n set: (val) => {\n internalFileList.value = val;\n if (model.value !== undefined) {\n model.value = val;\n }\n },\n});\n\nonMounted(() => {\n if (model.value === undefined && defaultFileList.length > 0) {\n internalFileList.value = [...defaultFileList];\n }\n});\n\nwatch(\n () => model.value,\n (val) => {\n if (val !== undefined) {\n internalFileList.value = val;\n }\n },\n);\n\nconst isPictureCard = computed(\n () =>\n listType === BUploadListType.PictureCard ||\n listType === BUploadListType.PictureCircle,\n);\n\nconst showListConfig = computed<BUploadShowUploadList | false>(() => {\n if (showUploadList === false) return false;\n if (showUploadList === true) {\n return { showPreviewIcon: true, showRemoveIcon: true, showDownloadIcon: false };\n }\n return showUploadList;\n});\n\nconst atMaxCount = computed(() => maxCount !== undefined && maxCount !== 1 && fileList.value.length >= maxCount);\n//#endregion\n\n//#region Upload Logic\nlet fileUidCounter = 0;\n\nfunction genUid(): string {\n fileUidCounter += 1;\n return `b-upload-${componentUID.value}-${fileUidCounter}-${Date.now()}`;\n}\n\nfunction fileToUploadFile(file: File): BUploadFile {\n return {\n uid: genUid(),\n name: file.name,\n size: file.size,\n type: file.type,\n status: BUploadFileStatus.Uploading,\n percent: 0,\n originFileObj: file,\n };\n}\n\nfunction triggerChange(file: BUploadFile, newFileList: BUploadFile[], event?: ProgressEvent) {\n fileList.value = newFileList;\n emit('change', { file, fileList: newFileList, event });\n}\n\nfunction defaultUpload(options: BUploadRequestOption) {\n const xhr = new XMLHttpRequest();\n\n xhr.upload.addEventListener('progress', (e) => {\n if (e.lengthComputable && options.onProgress) {\n options.onProgress({ percent: Math.round((e.loaded / e.total) * 100) });\n }\n });\n\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n options.onSuccess?.(xhr.response);\n } else {\n options.onError?.(new Error(`Upload failed with status ${xhr.status}`));\n }\n });\n\n xhr.addEventListener('error', () => {\n options.onError?.(new Error('Upload network error'));\n });\n\n xhr.open(options.method || 'POST', options.action, true);\n\n if (options.withCredentials) {\n xhr.withCredentials = true;\n }\n\n if (options.headers) {\n Object.entries(options.headers).forEach(([key, val]) => {\n xhr.setRequestHeader(key, val);\n });\n }\n\n const formData = new FormData();\n if (options.data) {\n Object.entries(options.data).forEach(([key, val]) => {\n formData.append(key, val as string);\n });\n }\n formData.append(options.filename, options.file);\n\n xhr.send(formData);\n}\n\nasync function uploadFile(file: File, rawFiles: File[]) {\n if (beforeUpload) {\n try {\n const result = await beforeUpload(file, rawFiles);\n if (result === false) return;\n if (result instanceof Blob) {\n const transformed = result instanceof File ? result : new File([result], file.name, { type: result.type });\n processUpload(transformed);\n return;\n }\n } catch {\n return;\n }\n }\n processUpload(file);\n}\n\nfunction processUpload(file: File) {\n const uploadFile = fileToUploadFile(file);\n let newList: BUploadFile[];\n\n if (maxCount === 1) {\n newList = [uploadFile];\n } else if (maxCount !== undefined) {\n newList = [...fileList.value, uploadFile].slice(-maxCount);\n } else {\n newList = [...fileList.value, uploadFile];\n }\n\n triggerChange(uploadFile, newList);\n\n const resolvedAction = typeof action === 'function' ? action(file) : Promise.resolve(action);\n\n resolvedAction.then((url: string) => {\n const requestFn = customRequest || defaultUpload;\n const extraData = typeof data === 'function' ? data(uploadFile) : (data || {});\n\n requestFn({\n action: url,\n file,\n filename: fieldName,\n headers,\n data: extraData,\n withCredentials,\n method,\n onProgress: (e) => {\n const updatedFile = { ...uploadFile, percent: e.percent };\n const updatedList = fileList.value.map((f) =>\n f.uid === uploadFile.uid ? updatedFile : f,\n );\n triggerChange(updatedFile, updatedList);\n },\n onSuccess: (response) => {\n const updatedFile = {\n ...uploadFile,\n status: BUploadFileStatus.Done,\n percent: 100,\n response,\n };\n const updatedList = fileList.value.map((f) =>\n f.uid === uploadFile.uid ? updatedFile : f,\n );\n triggerChange(updatedFile, updatedList);\n },\n onError: (error) => {\n const updatedFile = {\n ...uploadFile,\n status: BUploadFileStatus.Error,\n error,\n };\n const updatedList = fileList.value.map((f) =>\n f.uid === uploadFile.uid ? updatedFile : f,\n );\n triggerChange(updatedFile, updatedList);\n },\n });\n });\n}\n\nfunction handleFiles(files: FileList | null) {\n if (!files || files.length === 0) return;\n\n const rawFiles = Array.from(files);\n let filesToUpload: File[];\n\n if (maxCount === 1) {\n filesToUpload = rawFiles.slice(0, 1);\n } else if (maxCount !== undefined) {\n const remaining = maxCount - fileList.value.length;\n filesToUpload = remaining > 0 ? rawFiles.slice(0, remaining) : [];\n } else {\n filesToUpload = rawFiles;\n }\n\n filesToUpload.forEach((file) => uploadFile(file, rawFiles));\n}\n//#endregion\n\n//#region Event Handlers\nfunction handleClick() {\n if (disabled || !openFileDialogOnClick || atMaxCount.value) return;\n inputRef.value?.click();\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (disabled || atMaxCount.value) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n inputRef.value?.click();\n }\n}\n\nfunction handleInputChange(event: Event) {\n const input = event.target as HTMLInputElement;\n handleFiles(input.files);\n input.value = '';\n}\n\nfunction handleDragOver(event: DragEvent) {\n event.preventDefault();\n if (disabled) return;\n dragOver.value = true;\n}\n\nfunction handleDragLeave(event: DragEvent) {\n event.preventDefault();\n dragOver.value = false;\n}\n\nfunction handleDrop(event: DragEvent) {\n event.preventDefault();\n dragOver.value = false;\n if (disabled) return;\n emit('drop', event);\n handleFiles(event.dataTransfer?.files ?? null);\n}\n\nfunction handleRemove(file: BUploadFile) {\n emit('remove', file);\n const newList = fileList.value.filter((f) => f.uid !== file.uid);\n triggerChange({ ...file, status: BUploadFileStatus.Removed }, newList);\n}\n\nfunction handlePreview(file: BUploadFile) {\n emit('preview', file);\n}\n\nfunction handleDownload(file: BUploadFile) {\n emit('download', file);\n}\n//#endregion\n\n//#region Expose\ndefineExpose({\n /** Open the native file dialog programmatically. */\n openFileDialog: () => inputRef.value?.click(),\n});\n//#endregion\n</script>\n\n<template>\n <div\n class=\"b-upload\"\n :class=\"{\n 'b-upload--disabled': disabled,\n 'b-upload--drag-over': dragOver,\n [`b-upload--${listType}`]: true,\n }\"\n >\n <!-- Upload trigger area -->\n <div\n v-if=\"!isPictureCard || !atMaxCount\"\n class=\"b-upload__trigger\"\n role=\"button\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-disabled=\"disabled || undefined\"\n :aria-label=\"(attrs['aria-label'] as string) || 'Upload file'\"\n @click=\"handleClick\"\n @keydown=\"handleKeyDown\"\n @dragover=\"handleDragOver\"\n @dragleave=\"handleDragLeave\"\n @drop=\"handleDrop\"\n >\n <slot>\n <div v-if=\"isPictureCard\" class=\"b-upload__card-trigger\">\n <span class=\"b-upload__plus-icon\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </span>\n <span class=\"b-upload__card-text\">Upload</span>\n </div>\n <span v-else class=\"b-upload__default-text\">Click to Upload</span>\n </slot>\n </div>\n\n <!-- Hidden file input -->\n <input\n ref=\"inputRef\"\n class=\"b-upload__input\"\n type=\"file\"\n :accept=\"accept || undefined\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n :webkitdirectory=\"directory || undefined\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n @change=\"handleInputChange\"\n />\n\n <!-- File list -->\n <div\n v-if=\"showListConfig !== false && fileList.length > 0\"\n class=\"b-upload__list\"\n :class=\"`b-upload__list--${listType}`\"\n role=\"list\"\n aria-label=\"Uploaded files\"\n >\n <div\n v-for=\"file in fileList\"\n :key=\"file.uid\"\n class=\"b-upload__item\"\n :class=\"{\n 'b-upload__item--error': file.status === BUploadFileStatus.Error,\n 'b-upload__item--done': file.status === BUploadFileStatus.Done,\n 'b-upload__item--uploading': file.status === BUploadFileStatus.Uploading,\n }\"\n role=\"listitem\"\n >\n <!-- Thumbnail for picture types -->\n <span\n v-if=\"listType !== BUploadListType.Text\"\n class=\"b-upload__item-thumbnail\"\n aria-hidden=\"true\"\n >\n <img\n v-if=\"file.thumbUrl || file.url\"\n :src=\"file.thumbUrl || file.url\"\n :alt=\"file.name\"\n class=\"b-upload__item-image\"\n />\n <span v-else class=\"b-upload__item-file-icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z\" />\n <polyline points=\"14,2 14,8 20,8\" />\n </svg>\n </span>\n </span>\n\n <!-- File info -->\n <span class=\"b-upload__item-info\">\n <span class=\"b-upload__item-name\" :title=\"file.name\">\n {{ file.name }}\n </span>\n </span>\n\n <!-- Actions -->\n <span class=\"b-upload__item-actions\">\n <button\n v-if=\"showListConfig && showListConfig.showPreviewIcon && (file.url || file.thumbUrl)\"\n class=\"b-upload__action-btn\"\n type=\"button\"\n aria-label=\"Preview file\"\n @click.stop=\"handlePreview(file)\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\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 </button>\n <button\n v-if=\"showListConfig && showListConfig.showDownloadIcon && file.status === BUploadFileStatus.Done\"\n class=\"b-upload__action-btn\"\n type=\"button\"\n aria-label=\"Download file\"\n @click.stop=\"handleDownload(file)\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4\" />\n <polyline points=\"7,10 12,15 17,10\" />\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n </svg>\n </button>\n <button\n v-if=\"showListConfig && showListConfig.showRemoveIcon\"\n class=\"b-upload__action-btn b-upload__action-btn--remove\"\n type=\"button\"\n aria-label=\"Remove file\"\n :disabled=\"disabled\"\n @click.stop=\"handleRemove(file)\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </span>\n\n <!-- Progress bar -->\n <div\n v-if=\"file.status === BUploadFileStatus.Uploading\"\n class=\"b-upload__progress\"\n role=\"progressbar\"\n :aria-valuenow=\"file.percent ?? 0\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n :aria-label=\"`Uploading ${file.name}`\"\n >\n <div\n class=\"b-upload__progress-bar\"\n :style=\"{ width: `${file.percent ?? 0}%` }\"\n />\n </div>\n </div>\n </div>\n\n <!-- Hint slot -->\n <div v-if=\"$slots.hint\" class=\"b-upload__hint\">\n <slot name=\"hint\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.b-upload {\n --b-upload-actions-color: rgba(0, 0, 0, 0.45);\n --b-upload-card-size: 102px;\n --b-upload-color-primary: #1677ff;\n --b-upload-color-error: #d32f2f;\n --b-upload-color-success: #52c41a;\n --b-upload-color-border: #d9d9d9;\n --b-upload-color-bg: #fafafa;\n --b-upload-color-bg-hover: #f0f0f0;\n --b-upload-color-text: rgba(0, 0, 0, 0.88);\n --b-upload-color-text-secondary: rgba(0, 0, 0, 0.6);\n --b-upload-border-radius: 8px;\n --b-upload-line-height: 1.5715;\n --b-upload-font-size: 14px;\n --b-upload-progress-stroke-width: 2px;\n\n position: relative;\n font-size: var(--b-upload-font-size);\n line-height: var(--b-upload-line-height);\n color: var(--b-upload-color-text);\n}\n\n/* Picture-card/circle layout: root becomes flex container */\n.b-upload--picture-card,\n.b-upload--picture-circle {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n align-items: flex-start;\n}\n\n/* Hidden file input */\n.b-upload__input {\n position: absolute;\n width: 0;\n height: 0;\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n/* Trigger */\n.b-upload__trigger {\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n outline: none;\n border-radius: var(--b-upload-border-radius);\n}\n\n.b-upload__trigger:focus-visible {\n outline: 2px solid var(--b-upload-color-primary);\n outline-offset: 2px;\n}\n\n.b-upload--disabled .b-upload__trigger {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Default text trigger */\n.b-upload__default-text {\n padding: 4px 15px;\n border: 1px solid var(--b-upload-color-border);\n border-radius: var(--b-upload-border-radius);\n background: #fff;\n color: var(--b-upload-color-text);\n transition: border-color 0.2s, color 0.2s;\n}\n\n.b-upload__trigger:hover .b-upload__default-text {\n color: var(--b-upload-color-primary);\n border-color: var(--b-upload-color-primary);\n}\n\n/* Picture card trigger */\n.b-upload--picture-card .b-upload__trigger,\n.b-upload--picture-circle .b-upload__trigger {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: var(--b-upload-card-size);\n height: var(--b-upload-card-size);\n border: 1px dashed var(--b-upload-color-border);\n border-radius: var(--b-upload-border-radius);\n background: var(--b-upload-color-bg);\n transition: border-color 0.2s;\n}\n\n.b-upload--picture-circle .b-upload__trigger {\n border-radius: 50%;\n}\n\n.b-upload--picture-card .b-upload__trigger:hover,\n.b-upload--picture-circle .b-upload__trigger:hover {\n border-color: var(--b-upload-color-primary);\n}\n\n.b-upload__card-trigger {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n color: var(--b-upload-color-text-secondary);\n}\n\n.b-upload__plus-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.b-upload__plus-icon svg {\n width: 20px;\n height: 20px;\n}\n\n.b-upload__card-text {\n font-size: var(--b-upload-font-size);\n}\n\n/* Drag states */\n.b-upload--drag-over .b-upload__trigger {\n border-color: var(--b-upload-color-primary);\n background: color-mix(in srgb, var(--b-upload-color-primary) 5%, transparent);\n}\n\n/* File list - text type */\n.b-upload__list {\n margin-top: 8px;\n}\n\n.b-upload__list--text .b-upload__item,\n.b-upload__list--picture .b-upload__item {\n display: flex;\n align-items: center;\n padding: 4px 8px;\n border-radius: var(--b-upload-border-radius);\n transition: background-color 0.2s;\n position: relative;\n}\n\n.b-upload__list--text .b-upload__item:hover,\n.b-upload__list--picture .b-upload__item:hover {\n background: var(--b-upload-color-bg);\n}\n\n/* File list - picture-card type */\n.b-upload__list--picture-card,\n.b-upload__list--picture-circle {\n display: contents;\n}\n\n.b-upload__list--picture-card .b-upload__item,\n.b-upload__list--picture-circle .b-upload__item {\n position: relative;\n width: var(--b-upload-card-size);\n height: var(--b-upload-card-size);\n border: 1px solid var(--b-upload-color-border);\n border-radius: var(--b-upload-border-radius);\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.b-upload__list--picture-circle .b-upload__item {\n border-radius: 50%;\n}\n\n/* Thumbnails */\n.b-upload__item-thumbnail {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 48px;\n height: 48px;\n margin-right: 8px;\n}\n\n.b-upload__list--picture-card .b-upload__item-thumbnail,\n.b-upload__list--picture-circle .b-upload__item-thumbnail {\n width: 100%;\n height: 100%;\n margin-right: 0;\n}\n\n.b-upload__item-image {\n max-width: 100%;\n max-height: 100%;\n object-fit: cover;\n}\n\n.b-upload__item-file-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--b-upload-color-text-secondary);\n}\n\n.b-upload__item-file-icon svg {\n width: 24px;\n height: 24px;\n}\n\n/* File info */\n.b-upload__item-info {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.b-upload__item-name {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--b-upload-color-text);\n transition: color 0.2s;\n}\n\n.b-upload__item--error .b-upload__item-name {\n color: var(--b-upload-color-error);\n}\n\n/* For card mode, hide file info text */\n.b-upload__list--picture-card .b-upload__item-info,\n.b-upload__list--picture-circle .b-upload__item-info {\n display: none;\n}\n\n/* Actions */\n.b-upload__item-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n}\n\n.b-upload__list--picture-card .b-upload__item-actions,\n.b-upload__list--picture-circle .b-upload__item-actions {\n position: absolute;\n inset: 0;\n margin-left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.b-upload__list--picture-card .b-upload__item:hover .b-upload__item-actions,\n.b-upload__list--picture-circle .b-upload__item:hover .b-upload__item-actions {\n opacity: 1;\n}\n\n.b-upload__action-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n color: var(--b-upload-actions-color);\n transition: color 0.2s;\n}\n\n.b-upload__action-btn:hover {\n color: var(--b-upload-color-primary);\n}\n\n.b-upload__action-btn--remove:hover {\n color: var(--b-upload-color-error);\n}\n\n.b-upload__action-btn:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.b-upload__action-btn svg {\n width: 16px;\n height: 16px;\n}\n\n.b-upload__list--picture-card .b-upload__action-btn,\n.b-upload__list--picture-circle .b-upload__action-btn {\n color: rgba(255, 255, 255, 0.85);\n}\n\n.b-upload__list--picture-card .b-upload__action-btn svg,\n.b-upload__list--picture-circle .b-upload__action-btn svg {\n width: 24px;\n height: 24px;\n}\n\n.b-upload__list--picture-card .b-upload__action-btn:hover,\n.b-upload__list--picture-circle .b-upload__action-btn:hover {\n color: #fff;\n}\n\n/* Progress bar */\n.b-upload__progress {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: var(--b-upload-progress-stroke-width);\n background: var(--b-upload-color-bg-hover);\n overflow: hidden;\n}\n\n.b-upload__progress-bar {\n height: 100%;\n background: var(--b-upload-color-primary);\n transition: width 0.2s;\n}\n\n/* Hint */\n.b-upload__hint {\n margin-top: 8px;\n color: var(--b-upload-color-text-secondary);\n font-size: 12px;\n}\n\n/* Dark mode - explicit */\n[data-prefers-color='dark'] .b-upload {\n --b-upload-actions-color: rgba(255, 255, 255, 0.45);\n --b-upload-color-border: #424242;\n --b-upload-color-bg: #1f1f1f;\n --b-upload-color-bg-hover: #2f2f2f;\n --b-upload-color-text: rgba(255, 255, 255, 0.85);\n --b-upload-color-text-secondary: rgba(255, 255, 255, 0.6);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-upload {\n --b-upload-actions-color: rgba(255, 255, 255, 0.45);\n --b-upload-color-border: #424242;\n --b-upload-color-bg: #1f1f1f;\n --b-upload-color-bg-hover: #2f2f2f;\n --b-upload-color-text: rgba(255, 255, 255, 0.85);\n --b-upload-color-text-secondary: rgba(255, 255, 255, 0.6);\n }\n}\n\n/* Dark mode - follow system (only when no explicit preference is set) */\n@media (prefers-color-scheme: dark) {\n :root:not([data-prefers-color]) .b-upload {\n --b-upload-actions-color: rgba(255, 255, 255, 0.45);\n --b-upload-color-border: #424242;\n --b-upload-color-bg: #1f1f1f;\n --b-upload-color-bg-hover: #2f2f2f;\n --b-upload-color-text: rgba(255, 255, 255, 0.85);\n --b-upload-color-text-secondary: rgba(255, 255, 255, 0.6);\n }\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n .b-upload__trigger,\n .b-upload__default-text,\n .b-upload__item-name,\n .b-upload__action-btn,\n .b-upload__progress-bar,\n .b-upload__item-actions,\n .b-upload__list--text .b-upload__item,\n .b-upload__list--picture .b-upload__item {\n transition: none;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import e from "./design-system14.js";
2
+ import t from "./design-system260.js";
3
+ /* empty css */
4
+ //#region src/components/BUpload/BUpload.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-36315fd9"]]);
6
+ //#endregion
7
+ export { n as default };
8
+
9
+ //# sourceMappingURL=design-system262.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-system262.js","names":[],"sources":["../src/components/BUpload/BUpload.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, computed, watch, onMounted, useAttrs } from 'vue';\nimport { useComponentId } from '@/composables/useComponentId';\nimport {\n BUploadListType,\n BUploadFileStatus,\n type BUploadFile,\n type BUploadChangeInfo,\n type BUploadRequestOption,\n type BUploadShowUploadList,\n} from './types';\n\ndefineOptions({ inheritAttrs: false });\n\nconst attrs = useAttrs();\n\n//#region Props\nconst {\n accept = '',\n action = '',\n multiple = false,\n disabled = false,\n directory = false,\n maxCount,\n listType = BUploadListType.Text,\n method = 'POST',\n name: fieldName = 'file',\n headers,\n data,\n withCredentials = false,\n openFileDialogOnClick = true,\n showUploadList = true,\n defaultFileList = [],\n beforeUpload,\n customRequest,\n} = defineProps<{\n /** File types that can be accepted (MIME types or extensions). */\n accept?: string;\n /** Uploading URL. */\n action?: string | ((file: File) => Promise<string>);\n /** Whether to support multiple file selection. */\n multiple?: boolean;\n /** Whether to disable the upload button. */\n disabled?: boolean;\n /** Support uploading directories. */\n directory?: boolean;\n /** Limit the number of uploaded files. */\n maxCount?: number;\n /** Built-in style of the upload list. */\n listType?: BUploadListType | `${BUploadListType}`;\n /** HTTP method for upload request. */\n method?: string;\n /** The name of the file field in the upload request. */\n name?: string;\n /** Custom request headers for upload. */\n headers?: Record<string, string>;\n /** Extra data to include with the upload request. */\n data?: Record<string, unknown> | ((file: BUploadFile) => Record<string, unknown>);\n /** Whether to send cookies with the request. */\n withCredentials?: boolean;\n /** Whether clicking the component opens the file dialog. */\n openFileDialogOnClick?: boolean;\n /** Whether to show the upload list. */\n showUploadList?: boolean | BUploadShowUploadList;\n /** Initial file list for uncontrolled usage. */\n defaultFileList?: BUploadFile[];\n /** Hook before uploading. Return false or a rejected Promise to stop. */\n beforeUpload?: (file: File, fileList: File[]) => boolean | Promise<File | Blob | boolean | void>;\n /** Override the default upload behavior. */\n customRequest?: (options: BUploadRequestOption) => void;\n}>();\n//#endregion\n\n//#region Model & Events\nconst model = defineModel<BUploadFile[]>('fileList', { default: undefined });\n\nconst emit = defineEmits<{\n change: [info: BUploadChangeInfo];\n remove: [file: BUploadFile];\n preview: [file: BUploadFile];\n download: [file: BUploadFile];\n drop: [event: DragEvent];\n}>();\n//#endregion\n\n//#region Internal State\nconst { componentUID } = useComponentId();\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst dragOver = ref(false);\nconst internalFileList = ref<BUploadFile[]>(Array.isArray(defaultFileList) ? [...defaultFileList] : []);\n\nconst fileList = computed<BUploadFile[]>({\n get: () => (model.value !== undefined ? model.value : internalFileList.value),\n set: (val) => {\n internalFileList.value = val;\n if (model.value !== undefined) {\n model.value = val;\n }\n },\n});\n\nonMounted(() => {\n if (model.value === undefined && defaultFileList.length > 0) {\n internalFileList.value = [...defaultFileList];\n }\n});\n\nwatch(\n () => model.value,\n (val) => {\n if (val !== undefined) {\n internalFileList.value = val;\n }\n },\n);\n\nconst isPictureCard = computed(\n () =>\n listType === BUploadListType.PictureCard ||\n listType === BUploadListType.PictureCircle,\n);\n\nconst showListConfig = computed<BUploadShowUploadList | false>(() => {\n if (showUploadList === false) return false;\n if (showUploadList === true) {\n return { showPreviewIcon: true, showRemoveIcon: true, showDownloadIcon: false };\n }\n return showUploadList;\n});\n\nconst atMaxCount = computed(() => maxCount !== undefined && maxCount !== 1 && fileList.value.length >= maxCount);\n//#endregion\n\n//#region Upload Logic\nlet fileUidCounter = 0;\n\nfunction genUid(): string {\n fileUidCounter += 1;\n return `b-upload-${componentUID.value}-${fileUidCounter}-${Date.now()}`;\n}\n\nfunction fileToUploadFile(file: File): BUploadFile {\n return {\n uid: genUid(),\n name: file.name,\n size: file.size,\n type: file.type,\n status: BUploadFileStatus.Uploading,\n percent: 0,\n originFileObj: file,\n };\n}\n\nfunction triggerChange(file: BUploadFile, newFileList: BUploadFile[], event?: ProgressEvent) {\n fileList.value = newFileList;\n emit('change', { file, fileList: newFileList, event });\n}\n\nfunction defaultUpload(options: BUploadRequestOption) {\n const xhr = new XMLHttpRequest();\n\n xhr.upload.addEventListener('progress', (e) => {\n if (e.lengthComputable && options.onProgress) {\n options.onProgress({ percent: Math.round((e.loaded / e.total) * 100) });\n }\n });\n\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n options.onSuccess?.(xhr.response);\n } else {\n options.onError?.(new Error(`Upload failed with status ${xhr.status}`));\n }\n });\n\n xhr.addEventListener('error', () => {\n options.onError?.(new Error('Upload network error'));\n });\n\n xhr.open(options.method || 'POST', options.action, true);\n\n if (options.withCredentials) {\n xhr.withCredentials = true;\n }\n\n if (options.headers) {\n Object.entries(options.headers).forEach(([key, val]) => {\n xhr.setRequestHeader(key, val);\n });\n }\n\n const formData = new FormData();\n if (options.data) {\n Object.entries(options.data).forEach(([key, val]) => {\n formData.append(key, val as string);\n });\n }\n formData.append(options.filename, options.file);\n\n xhr.send(formData);\n}\n\nasync function uploadFile(file: File, rawFiles: File[]) {\n if (beforeUpload) {\n try {\n const result = await beforeUpload(file, rawFiles);\n if (result === false) return;\n if (result instanceof Blob) {\n const transformed = result instanceof File ? result : new File([result], file.name, { type: result.type });\n processUpload(transformed);\n return;\n }\n } catch {\n return;\n }\n }\n processUpload(file);\n}\n\nfunction processUpload(file: File) {\n const uploadFile = fileToUploadFile(file);\n let newList: BUploadFile[];\n\n if (maxCount === 1) {\n newList = [uploadFile];\n } else if (maxCount !== undefined) {\n newList = [...fileList.value, uploadFile].slice(-maxCount);\n } else {\n newList = [...fileList.value, uploadFile];\n }\n\n triggerChange(uploadFile, newList);\n\n const resolvedAction = typeof action === 'function' ? action(file) : Promise.resolve(action);\n\n resolvedAction.then((url: string) => {\n const requestFn = customRequest || defaultUpload;\n const extraData = typeof data === 'function' ? data(uploadFile) : (data || {});\n\n requestFn({\n action: url,\n file,\n filename: fieldName,\n headers,\n data: extraData,\n withCredentials,\n method,\n onProgress: (e) => {\n const updatedFile = { ...uploadFile, percent: e.percent };\n const updatedList = fileList.value.map((f) =>\n f.uid === uploadFile.uid ? updatedFile : f,\n );\n triggerChange(updatedFile, updatedList);\n },\n onSuccess: (response) => {\n const updatedFile = {\n ...uploadFile,\n status: BUploadFileStatus.Done,\n percent: 100,\n response,\n };\n const updatedList = fileList.value.map((f) =>\n f.uid === uploadFile.uid ? updatedFile : f,\n );\n triggerChange(updatedFile, updatedList);\n },\n onError: (error) => {\n const updatedFile = {\n ...uploadFile,\n status: BUploadFileStatus.Error,\n error,\n };\n const updatedList = fileList.value.map((f) =>\n f.uid === uploadFile.uid ? updatedFile : f,\n );\n triggerChange(updatedFile, updatedList);\n },\n });\n });\n}\n\nfunction handleFiles(files: FileList | null) {\n if (!files || files.length === 0) return;\n\n const rawFiles = Array.from(files);\n let filesToUpload: File[];\n\n if (maxCount === 1) {\n filesToUpload = rawFiles.slice(0, 1);\n } else if (maxCount !== undefined) {\n const remaining = maxCount - fileList.value.length;\n filesToUpload = remaining > 0 ? rawFiles.slice(0, remaining) : [];\n } else {\n filesToUpload = rawFiles;\n }\n\n filesToUpload.forEach((file) => uploadFile(file, rawFiles));\n}\n//#endregion\n\n//#region Event Handlers\nfunction handleClick() {\n if (disabled || !openFileDialogOnClick || atMaxCount.value) return;\n inputRef.value?.click();\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (disabled || atMaxCount.value) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n inputRef.value?.click();\n }\n}\n\nfunction handleInputChange(event: Event) {\n const input = event.target as HTMLInputElement;\n handleFiles(input.files);\n input.value = '';\n}\n\nfunction handleDragOver(event: DragEvent) {\n event.preventDefault();\n if (disabled) return;\n dragOver.value = true;\n}\n\nfunction handleDragLeave(event: DragEvent) {\n event.preventDefault();\n dragOver.value = false;\n}\n\nfunction handleDrop(event: DragEvent) {\n event.preventDefault();\n dragOver.value = false;\n if (disabled) return;\n emit('drop', event);\n handleFiles(event.dataTransfer?.files ?? null);\n}\n\nfunction handleRemove(file: BUploadFile) {\n emit('remove', file);\n const newList = fileList.value.filter((f) => f.uid !== file.uid);\n triggerChange({ ...file, status: BUploadFileStatus.Removed }, newList);\n}\n\nfunction handlePreview(file: BUploadFile) {\n emit('preview', file);\n}\n\nfunction handleDownload(file: BUploadFile) {\n emit('download', file);\n}\n//#endregion\n\n//#region Expose\ndefineExpose({\n /** Open the native file dialog programmatically. */\n openFileDialog: () => inputRef.value?.click(),\n});\n//#endregion\n</script>\n\n<template>\n <div\n class=\"b-upload\"\n :class=\"{\n 'b-upload--disabled': disabled,\n 'b-upload--drag-over': dragOver,\n [`b-upload--${listType}`]: true,\n }\"\n >\n <!-- Upload trigger area -->\n <div\n v-if=\"!isPictureCard || !atMaxCount\"\n class=\"b-upload__trigger\"\n role=\"button\"\n :tabindex=\"disabled ? -1 : 0\"\n :aria-disabled=\"disabled || undefined\"\n :aria-label=\"(attrs['aria-label'] as string) || 'Upload file'\"\n @click=\"handleClick\"\n @keydown=\"handleKeyDown\"\n @dragover=\"handleDragOver\"\n @dragleave=\"handleDragLeave\"\n @drop=\"handleDrop\"\n >\n <slot>\n <div v-if=\"isPictureCard\" class=\"b-upload__card-trigger\">\n <span class=\"b-upload__plus-icon\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n </span>\n <span class=\"b-upload__card-text\">Upload</span>\n </div>\n <span v-else class=\"b-upload__default-text\">Click to Upload</span>\n </slot>\n </div>\n\n <!-- Hidden file input -->\n <input\n ref=\"inputRef\"\n class=\"b-upload__input\"\n type=\"file\"\n :accept=\"accept || undefined\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n :webkitdirectory=\"directory || undefined\"\n aria-hidden=\"true\"\n tabindex=\"-1\"\n @change=\"handleInputChange\"\n />\n\n <!-- File list -->\n <div\n v-if=\"showListConfig !== false && fileList.length > 0\"\n class=\"b-upload__list\"\n :class=\"`b-upload__list--${listType}`\"\n role=\"list\"\n aria-label=\"Uploaded files\"\n >\n <div\n v-for=\"file in fileList\"\n :key=\"file.uid\"\n class=\"b-upload__item\"\n :class=\"{\n 'b-upload__item--error': file.status === BUploadFileStatus.Error,\n 'b-upload__item--done': file.status === BUploadFileStatus.Done,\n 'b-upload__item--uploading': file.status === BUploadFileStatus.Uploading,\n }\"\n role=\"listitem\"\n >\n <!-- Thumbnail for picture types -->\n <span\n v-if=\"listType !== BUploadListType.Text\"\n class=\"b-upload__item-thumbnail\"\n aria-hidden=\"true\"\n >\n <img\n v-if=\"file.thumbUrl || file.url\"\n :src=\"file.thumbUrl || file.url\"\n :alt=\"file.name\"\n class=\"b-upload__item-image\"\n />\n <span v-else class=\"b-upload__item-file-icon\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8l-6-6z\" />\n <polyline points=\"14,2 14,8 20,8\" />\n </svg>\n </span>\n </span>\n\n <!-- File info -->\n <span class=\"b-upload__item-info\">\n <span class=\"b-upload__item-name\" :title=\"file.name\">\n {{ file.name }}\n </span>\n </span>\n\n <!-- Actions -->\n <span class=\"b-upload__item-actions\">\n <button\n v-if=\"showListConfig && showListConfig.showPreviewIcon && (file.url || file.thumbUrl)\"\n class=\"b-upload__action-btn\"\n type=\"button\"\n aria-label=\"Preview file\"\n @click.stop=\"handlePreview(file)\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\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 </button>\n <button\n v-if=\"showListConfig && showListConfig.showDownloadIcon && file.status === BUploadFileStatus.Done\"\n class=\"b-upload__action-btn\"\n type=\"button\"\n aria-label=\"Download file\"\n @click.stop=\"handleDownload(file)\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4\" />\n <polyline points=\"7,10 12,15 17,10\" />\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n </svg>\n </button>\n <button\n v-if=\"showListConfig && showListConfig.showRemoveIcon\"\n class=\"b-upload__action-btn b-upload__action-btn--remove\"\n type=\"button\"\n aria-label=\"Remove file\"\n :disabled=\"disabled\"\n @click.stop=\"handleRemove(file)\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </span>\n\n <!-- Progress bar -->\n <div\n v-if=\"file.status === BUploadFileStatus.Uploading\"\n class=\"b-upload__progress\"\n role=\"progressbar\"\n :aria-valuenow=\"file.percent ?? 0\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n :aria-label=\"`Uploading ${file.name}`\"\n >\n <div\n class=\"b-upload__progress-bar\"\n :style=\"{ width: `${file.percent ?? 0}%` }\"\n />\n </div>\n </div>\n </div>\n\n <!-- Hint slot -->\n <div v-if=\"$slots.hint\" class=\"b-upload__hint\">\n <slot name=\"hint\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.b-upload {\n --b-upload-actions-color: rgba(0, 0, 0, 0.45);\n --b-upload-card-size: 102px;\n --b-upload-color-primary: #1677ff;\n --b-upload-color-error: #d32f2f;\n --b-upload-color-success: #52c41a;\n --b-upload-color-border: #d9d9d9;\n --b-upload-color-bg: #fafafa;\n --b-upload-color-bg-hover: #f0f0f0;\n --b-upload-color-text: rgba(0, 0, 0, 0.88);\n --b-upload-color-text-secondary: rgba(0, 0, 0, 0.6);\n --b-upload-border-radius: 8px;\n --b-upload-line-height: 1.5715;\n --b-upload-font-size: 14px;\n --b-upload-progress-stroke-width: 2px;\n\n position: relative;\n font-size: var(--b-upload-font-size);\n line-height: var(--b-upload-line-height);\n color: var(--b-upload-color-text);\n}\n\n/* Picture-card/circle layout: root becomes flex container */\n.b-upload--picture-card,\n.b-upload--picture-circle {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n align-items: flex-start;\n}\n\n/* Hidden file input */\n.b-upload__input {\n position: absolute;\n width: 0;\n height: 0;\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n/* Trigger */\n.b-upload__trigger {\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n outline: none;\n border-radius: var(--b-upload-border-radius);\n}\n\n.b-upload__trigger:focus-visible {\n outline: 2px solid var(--b-upload-color-primary);\n outline-offset: 2px;\n}\n\n.b-upload--disabled .b-upload__trigger {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Default text trigger */\n.b-upload__default-text {\n padding: 4px 15px;\n border: 1px solid var(--b-upload-color-border);\n border-radius: var(--b-upload-border-radius);\n background: #fff;\n color: var(--b-upload-color-text);\n transition: border-color 0.2s, color 0.2s;\n}\n\n.b-upload__trigger:hover .b-upload__default-text {\n color: var(--b-upload-color-primary);\n border-color: var(--b-upload-color-primary);\n}\n\n/* Picture card trigger */\n.b-upload--picture-card .b-upload__trigger,\n.b-upload--picture-circle .b-upload__trigger {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: var(--b-upload-card-size);\n height: var(--b-upload-card-size);\n border: 1px dashed var(--b-upload-color-border);\n border-radius: var(--b-upload-border-radius);\n background: var(--b-upload-color-bg);\n transition: border-color 0.2s;\n}\n\n.b-upload--picture-circle .b-upload__trigger {\n border-radius: 50%;\n}\n\n.b-upload--picture-card .b-upload__trigger:hover,\n.b-upload--picture-circle .b-upload__trigger:hover {\n border-color: var(--b-upload-color-primary);\n}\n\n.b-upload__card-trigger {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n color: var(--b-upload-color-text-secondary);\n}\n\n.b-upload__plus-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.b-upload__plus-icon svg {\n width: 20px;\n height: 20px;\n}\n\n.b-upload__card-text {\n font-size: var(--b-upload-font-size);\n}\n\n/* Drag states */\n.b-upload--drag-over .b-upload__trigger {\n border-color: var(--b-upload-color-primary);\n background: color-mix(in srgb, var(--b-upload-color-primary) 5%, transparent);\n}\n\n/* File list - text type */\n.b-upload__list {\n margin-top: 8px;\n}\n\n.b-upload__list--text .b-upload__item,\n.b-upload__list--picture .b-upload__item {\n display: flex;\n align-items: center;\n padding: 4px 8px;\n border-radius: var(--b-upload-border-radius);\n transition: background-color 0.2s;\n position: relative;\n}\n\n.b-upload__list--text .b-upload__item:hover,\n.b-upload__list--picture .b-upload__item:hover {\n background: var(--b-upload-color-bg);\n}\n\n/* File list - picture-card type */\n.b-upload__list--picture-card,\n.b-upload__list--picture-circle {\n display: contents;\n}\n\n.b-upload__list--picture-card .b-upload__item,\n.b-upload__list--picture-circle .b-upload__item {\n position: relative;\n width: var(--b-upload-card-size);\n height: var(--b-upload-card-size);\n border: 1px solid var(--b-upload-color-border);\n border-radius: var(--b-upload-border-radius);\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.b-upload__list--picture-circle .b-upload__item {\n border-radius: 50%;\n}\n\n/* Thumbnails */\n.b-upload__item-thumbnail {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 48px;\n height: 48px;\n margin-right: 8px;\n}\n\n.b-upload__list--picture-card .b-upload__item-thumbnail,\n.b-upload__list--picture-circle .b-upload__item-thumbnail {\n width: 100%;\n height: 100%;\n margin-right: 0;\n}\n\n.b-upload__item-image {\n max-width: 100%;\n max-height: 100%;\n object-fit: cover;\n}\n\n.b-upload__item-file-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--b-upload-color-text-secondary);\n}\n\n.b-upload__item-file-icon svg {\n width: 24px;\n height: 24px;\n}\n\n/* File info */\n.b-upload__item-info {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.b-upload__item-name {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--b-upload-color-text);\n transition: color 0.2s;\n}\n\n.b-upload__item--error .b-upload__item-name {\n color: var(--b-upload-color-error);\n}\n\n/* For card mode, hide file info text */\n.b-upload__list--picture-card .b-upload__item-info,\n.b-upload__list--picture-circle .b-upload__item-info {\n display: none;\n}\n\n/* Actions */\n.b-upload__item-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n}\n\n.b-upload__list--picture-card .b-upload__item-actions,\n.b-upload__list--picture-circle .b-upload__item-actions {\n position: absolute;\n inset: 0;\n margin-left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.b-upload__list--picture-card .b-upload__item:hover .b-upload__item-actions,\n.b-upload__list--picture-circle .b-upload__item:hover .b-upload__item-actions {\n opacity: 1;\n}\n\n.b-upload__action-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n color: var(--b-upload-actions-color);\n transition: color 0.2s;\n}\n\n.b-upload__action-btn:hover {\n color: var(--b-upload-color-primary);\n}\n\n.b-upload__action-btn--remove:hover {\n color: var(--b-upload-color-error);\n}\n\n.b-upload__action-btn:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.b-upload__action-btn svg {\n width: 16px;\n height: 16px;\n}\n\n.b-upload__list--picture-card .b-upload__action-btn,\n.b-upload__list--picture-circle .b-upload__action-btn {\n color: rgba(255, 255, 255, 0.85);\n}\n\n.b-upload__list--picture-card .b-upload__action-btn svg,\n.b-upload__list--picture-circle .b-upload__action-btn svg {\n width: 24px;\n height: 24px;\n}\n\n.b-upload__list--picture-card .b-upload__action-btn:hover,\n.b-upload__list--picture-circle .b-upload__action-btn:hover {\n color: #fff;\n}\n\n/* Progress bar */\n.b-upload__progress {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: var(--b-upload-progress-stroke-width);\n background: var(--b-upload-color-bg-hover);\n overflow: hidden;\n}\n\n.b-upload__progress-bar {\n height: 100%;\n background: var(--b-upload-color-primary);\n transition: width 0.2s;\n}\n\n/* Hint */\n.b-upload__hint {\n margin-top: 8px;\n color: var(--b-upload-color-text-secondary);\n font-size: 12px;\n}\n\n/* Dark mode - explicit */\n[data-prefers-color='dark'] .b-upload {\n --b-upload-actions-color: rgba(255, 255, 255, 0.45);\n --b-upload-color-border: #424242;\n --b-upload-color-bg: #1f1f1f;\n --b-upload-color-bg-hover: #2f2f2f;\n --b-upload-color-text: rgba(255, 255, 255, 0.85);\n --b-upload-color-text-secondary: rgba(255, 255, 255, 0.6);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-upload {\n --b-upload-actions-color: rgba(255, 255, 255, 0.45);\n --b-upload-color-border: #424242;\n --b-upload-color-bg: #1f1f1f;\n --b-upload-color-bg-hover: #2f2f2f;\n --b-upload-color-text: rgba(255, 255, 255, 0.85);\n --b-upload-color-text-secondary: rgba(255, 255, 255, 0.6);\n }\n}\n\n/* Dark mode - follow system (only when no explicit preference is set) */\n@media (prefers-color-scheme: dark) {\n :root:not([data-prefers-color]) .b-upload {\n --b-upload-actions-color: rgba(255, 255, 255, 0.45);\n --b-upload-color-border: #424242;\n --b-upload-color-bg: #1f1f1f;\n --b-upload-color-bg-hover: #2f2f2f;\n --b-upload-color-text: rgba(255, 255, 255, 0.85);\n --b-upload-color-text-secondary: rgba(255, 255, 255, 0.6);\n }\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n .b-upload__trigger,\n .b-upload__default-text,\n .b-upload__item-name,\n .b-upload__action-btn,\n .b-upload__progress-bar,\n .b-upload__item-actions,\n .b-upload__list--text .b-upload__item,\n .b-upload__list--picture .b-upload__item {\n transition: none;\n }\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"design-system28.js","names":[],"sources":["../src/components/BButton/BButton.vue?vue&type=script&setup=true&lang.ts"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"disabled\"]\n\nimport BIcon from '@/components/BIcon/BIcon.vue';\nimport { BIconBrandName, type BIconName } from '@/components/BIcon/BIconEnum.ts';\nimport { BButtonVariant, BCommonColor, BCommonSize, BIconSize } from '@/types.ts';\nimport { useSlots } from 'vue';\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'BButton',\n props: {\n color: { default: () => (BCommonColor.Primary) },\n size: { default: () => (BCommonSize.Medium) },\n variant: { default: () => (BButtonVariant.Solid) },\n disabled: { type: Boolean, default: false },\n prependIcon: {},\n prependIconColor: {},\n prependIconSize: { default: () => (BIconSize.Small) },\n appendIcon: {},\n appendIconColor: {},\n appendIconSize: { default: () => (BIconSize.Small) }\n },\n setup(__props: any) {\n\n\n\nconst isColor = (value: `${BCommonColor}`) => {\n return __props.color === value;\n};\nconst isVariant = (value: `${BButtonVariant}`) => {\n return __props.variant === value;\n};\nconst isSize = (value: `${BCommonSize}`) => {\n return __props.size === value;\n};\n\nconst slots = useSlots();\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"button\", {\n type: \"button\",\n class: _normalizeClass([\"b:inline-flex b:items-center b:justify-center b:rounded-lg b:transition-all b:duration-200 b:not-disabled:cursor-pointer b:disabled:opacity-50\", [\n isVariant('solid') && {\n 'b:text-white': !isColor('secondary'),\n 'b:text-black': isColor('secondary'),\n 'b:bg-primary b:hover:not-disabled:bg-primary-hover': isColor('primary'),\n 'b:bg-secondary b:hover:not-disabled:bg-secondary-hover': isColor('secondary'),\n 'b:bg-success b:hover:not-disabled:bg-success-hover': isColor('success'),\n 'b:bg-failure b:hover:not-disabled:bg-failure-hover': isColor('failure'),\n 'b:bg-warning b:hover:not-disabled:bg-warning-hover': isColor('warning'),\n 'b:bg-info b:hover:not-disabled:bg-info-hover': isColor('info'),\n },\n (isVariant('outlined') || isVariant('dashed')) && {\n 'b:outline-solid': isVariant('outlined'),\n 'b:outline-dashed': isVariant('dashed'),\n 'b:text-primary b:outline-primary b:hover:not-disabled:text-primary-hover b:hover:not-disabled:outline-primary-hover':\n isColor('primary'),\n 'b:text-black-base b:outline-secondary b:hover:not-disabled:text-secondary-hover b:hover:not-disabled:outline-secondary-hover':\n isColor('secondary'),\n 'b:text-success b:outline-success b:hover:not-disabled:text-success-hover b:hover:not-disabled:outline-success-hover':\n isColor('success'),\n 'b:text-failure b:outline-failure b:hover:not-disabled:text-failure-hover b:hover:not-disabled:outline-failure-hover':\n isColor('failure'),\n 'b:text-warning b:outline-warning b:hover:not-disabled:text-warning-hover b:hover:not-disabled:outline-warning-hover':\n isColor('warning'),\n 'b:text-info b:outline-info b:hover:not-disabled:text-info-hover b:hover:not-disabled:outline-info-hover':\n isColor('info'),\n },\n isVariant('text') && {\n 'b:text-primary b:hover:not-disabled:bg-primary-hover-light b:hover:not-disabled:text-primary-hover':\n isColor('primary'),\n 'b:text-black-base b:hover:not-disabled:bg-secondary-hover-light b:hover:not-disabled:text-secondary-hover':\n isColor('secondary'),\n 'b:text-success b:hover:not-disabled:bg-success-hover-light b:hover:not-disabled:text-success-hover':\n isColor('success'),\n 'b:text-failure b:hover:not-disabled:bg-failure-hover-light b:hover:not-disabled:text-failure-hover':\n isColor('failure'),\n 'b:text-warning b:hover:not-disabled:bg-warning-hover-light b:hover:not-disabled:text-warning-hover':\n isColor('warning'),\n 'b:text-info b:hover:not-disabled:bg-info-hover-light b:hover:not-disabled:text-info-hover':\n isColor('info'),\n },\n isVariant('link') && {\n 'b:text-primary b:hover:not-disabled:text-primary-hover': isColor('primary'),\n 'b:text-black-base b:hover:not-disabled:text-secondary-hover': isColor('secondary'),\n 'b:text-success b:hover:not-disabled:text-success-hover': isColor('success'),\n 'b:text-failure b:hover:not-disabled:text-failure-hover': isColor('failure'),\n 'b:text-warning b:hover:not-disabled:text-warning-hover': isColor('warning'),\n 'b:text-info b:hover:not-disabled:text-info-hover': isColor('info'),\n },\n {\n 'b:focus-visible:outline-1 b:focus-visible:outline-offset-1 b:focus-visible:outline-primary':\n isColor('primary'),\n 'b:focus-visible:outline-1 b:focus-visible:outline-offset-1 b:focus-visible:outline-secondary':\n isColor('secondary'),\n 'b:focus-visible:outline-1 b:focus-visible:outline-offset-1 b:focus-visible:outline-success':\n isColor('success'),\n 'b:focus-visible:outline-1 b:focus-visible:outline-offset-1 b:focus-visible:outline-failure':\n isColor('failure'),\n 'b:focus-visible:outline-1 b:focus-visible:outline-offset-1 b:focus-visible:outline-warning':\n isColor('warning'),\n 'b:focus-visible:outline-1 b:focus-visible:outline-offset-1 b:focus-visible:outline-info':\n isColor('info'),\n },\n {\n 'b:h-6 b:text-sm': isSize('sm'),\n 'b:h-8 b:text-sm': isSize('md'),\n 'b:h-10 b:text-base': isSize('lg'),\n },\n {\n 'b:w-6': isSize('sm') && !_unref(slots).default,\n 'b:w-8': isSize('md') && !_unref(slots).default,\n 'b:w-10': isSize('lg') && !_unref(slots).default,\n },\n {\n 'b:px-2': isSize('sm') && _unref(slots).default,\n 'b:px-4': (isSize('md') || isSize('lg')) && _unref(slots).default,\n },\n {\n 'b:gap-x-2': _unref(slots).default,\n },\n ]]),\n disabled: __props.disabled\n }, [\n (__props.prependIcon)\n ? (_openBlock(), _createBlock(BIcon, {\n key: 0,\n icon: __props.prependIcon,\n color: __props.prependIconColor,\n size: __props.prependIconSize\n }, null, 8, [\"icon\", \"color\", \"size\"]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", null, [\n _renderSlot(_ctx.$slots, \"default\")\n ]),\n (__props.appendIcon)\n ? (_openBlock(), _createBlock(BIcon, {\n key: 1,\n icon: __props.appendIcon,\n color: __props.appendIconColor,\n size: __props.appendIconSize\n }, null, 8, [\"icon\", \"color\", \"size\"]))\n : _createCommentVNode(\"\", true)\n ], 10, _hoisted_1))\n}\n}\n\n})"],"mappings":"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"}
1
+ {"version":3,"file":"design-system28.js","names":[],"sources":["../src/components/BButton/BButton.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport BIcon from '@/components/BIcon/BIcon.vue';\nimport { BIconBrandName, type BIconName } from '@/components/BIcon/BIconEnum.ts';\nimport { BButtonVariant, BCommonColor, BCommonSize, BIconSize } from '@/types.ts';\nimport { useSlots } from 'vue';\n\nconst {\n color = BCommonColor.Primary,\n size = BCommonSize.Medium,\n variant = BButtonVariant.Solid,\n disabled = false,\n prependIcon,\n prependIconColor,\n prependIconSize = BIconSize.Small,\n appendIcon,\n appendIconColor,\n appendIconSize = BIconSize.Small,\n} = defineProps<{\n /**\n * The color of the button.\n */\n color?: `${BCommonColor}`;\n /**\n * The size of the button.\n */\n size?: `${BCommonSize}`;\n /**\n * The variant of the button.\n */\n variant?: `${BButtonVariant}`;\n /**\n * Whether the button is disabled.\n */\n disabled?: boolean;\n /**\n * Prepend icon name, should match the file name in the assets/icons folder.\n * @example 'check', 'cross', 'arrow-right'\n */\n prependIcon?: `${BIconName}` | `${BIconBrandName}`;\n /**\n * Custom color for the prepend icon, can be a CSS color value or a theme color\n * @example 'currentColor', 'primary', 'secondary', '#808080', 'rgb(128, 128, 128)', 'hsl(0, 0%, 50%)'\n */\n prependIconColor?: string | 'currentColor' | `${BCommonColor}`;\n /**\n * Prepend icon size, should match the BIconSize enum.\n * @example 'xs', 'sm', 'md', 'lg'\n * @default 'sm'\n */\n prependIconSize?: `${BIconSize}`;\n /**\n * Append icon name, should match the file name in the assets/icons folder.\n * @example 'check', 'cross', 'arrow-right'\n */\n appendIcon?: `${BIconName}` | `${BIconBrandName}`;\n /**\n * Custom color for the append icon, can be a CSS color value or a theme color\n * @example 'currentColor', 'primary', 'secondary', '#808080', 'rgb(128, 128, 128)', 'hsl(0, 0%, 50%)'\n */\n appendIconColor?: string | 'currentColor' | `${BCommonColor}`;\n /**\n * Append icon size, should match the BIconSize enum.\n * @example 'xs', 'sm', 'md', 'lg'\n * @default 'sm'\n */\n appendIconSize?: `${BIconSize}`;\n}>();\n\nconst isColor = (value: `${BCommonColor}`) => {\n return color === value;\n};\nconst isVariant = (value: `${BButtonVariant}`) => {\n return variant === value;\n};\nconst isSize = (value: `${BCommonSize}`) => {\n return size === value;\n};\n\nconst slots = useSlots();\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"b:inline-flex b:items-center b:justify-center b:rounded-lg b:transition-all b:duration-200 b:not-disabled:cursor-pointer b:disabled:opacity-50\"\n :class=\"[\n isVariant('solid') && {\n 'b:text-white': !isColor('secondary'),\n 'b:text-black': isColor('secondary'),\n 'b:bg-primary b:hover:not-disabled:bg-primary-hover': isColor('primary'),\n 'b:bg-secondary b:hover:not-disabled:bg-secondary-hover': isColor('secondary'),\n 'b:bg-success b:hover:not-disabled:bg-success-hover': isColor('success'),\n 'b:bg-failure b:hover:not-disabled:bg-failure-hover': isColor('failure'),\n 'b:bg-warning b:hover:not-disabled:bg-warning-hover': isColor('warning'),\n 'b:bg-info b:hover:not-disabled:bg-info-hover': isColor('info'),\n },\n (isVariant('outlined') || isVariant('dashed')) && {\n 'b:outline-solid': isVariant('outlined'),\n 'b:outline-dashed': isVariant('dashed'),\n 'b:text-primary b:outline-primary b:hover:not-disabled:text-primary-hover b:hover:not-disabled:outline-primary-hover':\n isColor('primary'),\n 'b:text-black-base b:outline-secondary b:hover:not-disabled:text-secondary-hover b:hover:not-disabled:outline-secondary-hover':\n isColor('secondary'),\n 'b:text-success b:outline-success b:hover:not-disabled:text-success-hover b:hover:not-disabled:outline-success-hover':\n isColor('success'),\n 'b:text-failure b:outline-failure b:hover:not-disabled:text-failure-hover b:hover:not-disabled:outline-failure-hover':\n isColor('failure'),\n 'b:text-warning b:outline-warning b:hover:not-disabled:text-warning-hover b:hover:not-disabled:outline-warning-hover':\n isColor('warning'),\n 'b:text-info b:outline-info b:hover:not-disabled:text-info-hover b:hover:not-disabled:outline-info-hover':\n isColor('info'),\n },\n isVariant('text') && {\n 'b:text-primary b:hover:not-disabled:bg-primary-hover-light b:hover:not-disabled:text-primary-hover':\n isColor('primary'),\n 'b:text-black-base b:hover:not-disabled:bg-secondary-hover-light b:hover:not-disabled:text-secondary-hover':\n isColor('secondary'),\n 'b:text-success b:hover:not-disabled:bg-success-hover-light b:hover:not-disabled:text-success-hover':\n isColor('success'),\n 'b:text-failure b:hover:not-disabled:bg-failure-hover-light b:hover:not-disabled:text-failure-hover':\n isColor('failure'),\n 'b:text-warning b:hover:not-disabled:bg-warning-hover-light b:hover:not-disabled:text-warning-hover':\n isColor('warning'),\n 'b:text-info b:hover:not-disabled:bg-info-hover-light b:hover:not-disabled:text-info-hover':\n isColor('info'),\n },\n isVariant('link') && {\n 'b:text-primary b:hover:not-disabled:text-primary-hover': isColor('primary'),\n 'b:text-black-base b:hover:not-disabled:text-secondary-hover': isColor('secondary'),\n 'b:text-success b:hover:not-disabled:text-success-hover': isColor('success'),\n 'b:text-failure b:hover:not-disabled:text-failure-hover': isColor('failure'),\n 'b:text-warning b:hover:not-disabled:text-warning-hover': isColor('warning'),\n 'b:text-info b:hover:not-disabled:text-info-hover': isColor('info'),\n },\n {\n 'b:focus-visible:outline-1 b:focus-visible:outline-offset-1 b:focus-visible:outline-primary':\n isColor('primary'),\n 'b:focus-visible:outline-1 b:focus-visible:outline-offset-1 b:focus-visible:outline-secondary':\n isColor('secondary'),\n 'b:focus-visible:outline-1 b:focus-visible:outline-offset-1 b:focus-visible:outline-success':\n isColor('success'),\n 'b:focus-visible:outline-1 b:focus-visible:outline-offset-1 b:focus-visible:outline-failure':\n isColor('failure'),\n 'b:focus-visible:outline-1 b:focus-visible:outline-offset-1 b:focus-visible:outline-warning':\n isColor('warning'),\n 'b:focus-visible:outline-1 b:focus-visible:outline-offset-1 b:focus-visible:outline-info':\n isColor('info'),\n },\n {\n 'b:h-6 b:text-sm': isSize('sm'),\n 'b:h-8 b:text-sm': isSize('md'),\n 'b:h-10 b:text-base': isSize('lg'),\n },\n {\n 'b:w-6': isSize('sm') && !slots.default,\n 'b:w-8': isSize('md') && !slots.default,\n 'b:w-10': isSize('lg') && !slots.default,\n },\n {\n 'b:px-2': isSize('sm') && slots.default,\n 'b:px-4': (isSize('md') || isSize('lg')) && slots.default,\n },\n {\n 'b:gap-x-2': slots.default,\n },\n ]\"\n :disabled=\"disabled\"\n >\n <BIcon\n v-if=\"prependIcon\"\n :icon=\"prependIcon\"\n :color=\"prependIconColor\"\n :size=\"prependIconSize\"\n />\n\n <span>\n <slot />\n </span>\n\n <BIcon v-if=\"appendIcon\" :icon=\"appendIcon\" :color=\"appendIconColor\" :size=\"appendIconSize\" />\n </button>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAoEA,IAAM,KAAW,MACR,EAAA,UAAU,GAEb,KAAa,MACV,EAAA,YAAY,GAEf,KAAU,MACP,EAAA,SAAS,GAGZ,IAAQ,GAAU;yBAItB,EAkGS,UAAA;GAjGP,MAAK;GACL,OAAK,EAAA,CAAC,kJAAgJ;IACtI,EAAS,QAAA,IAAA;sBAAwC,EAAO,YAAA;qBAAuC,EAAO,YAAA;2DAA6E,EAAO,UAAA;+DAA+E,EAAO,YAAA;2DAA6E,EAAO,UAAA;2DAA2E,EAAO,UAAA;2DAA2E,EAAO,UAAA;qDAAqE,EAAO,OAAA;;KAA0B,EAAS,WAAA,IAAgB,EAAS,SAAA,KAAA;wBAA4C,EAAS,WAAA;yBAA0C,EAAS,SAAA;4HAAqJ,EAAO,UAAA;qIAA+J,EAAO,YAAA;4HAAwJ,EAAO,UAAA;4HAAsJ,EAAO,UAAA;4HAAsJ,EAAO,UAAA;gHAA0I,EAAO,OAAA;;IAAyB,EAAS,OAAA,IAAA;2GAAsI,EAAO,UAAA;kHAA4I,EAAO,YAAA;2GAAuI,EAAO,UAAA;2GAAqI,EAAO,UAAA;2GAAqI,EAAO,UAAA;kGAA4H,EAAO,OAAA;;IAAyB,EAAS,OAAA,IAAA;+DAAgF,EAAO,UAAA;oEAAoF,EAAO,YAAA;+DAAiF,EAAO,UAAA;+DAA+E,EAAO,UAAA;+DAA+E,EAAO,UAAA;yDAAyE,EAAO,OAAA;;;mGAA2I,EAAO,UAAA;qGAA+H,EAAO,YAAA;mGAA+H,EAAO,UAAA;mGAA6H,EAAO,UAAA;mGAA6H,EAAO,UAAA;gGAA0H,EAAO,OAAA;;;wBAAsD,EAAM,KAAA;wBAAmC,EAAM,KAAA;2BAAsC,EAAM,KAAA;;;cAA0C,EAAM,KAAA,IAAA,CAAW,EAAA,EAAK,CAAC;cAA0B,EAAM,KAAA,IAAA,CAAW,EAAA,EAAK,CAAC;eAA2B,EAAM,KAAA,IAAA,CAAW,EAAA,EAAK,CAAC;;;eAA4C,EAAM,KAAA,IAAU,EAAA,EAAK,CAAC;gBAA4B,EAAM,KAAA,IAAU,EAAM,KAAA,KAAW,EAAA,EAAK,CAAC;;mBAA+C,EAAA,EAAK,CAAC,SAAA;;GAiF51I,UAAU,EAAA;;GAGH,EAAA,eAAA,GAAA,EADR,EAKE,GAAA;;IAHC,MAAM,EAAA;IACN,OAAO,EAAA;IACP,MAAM,EAAA;;;;;;GAGT,EAEO,QAAA,MAAA,CADL,EAAQ,EAAA,QAAA,UAAA,CAAA,CAAA;GAGG,EAAA,cAAA,GAAA,EAAb,EAA8F,GAAA;;IAApE,MAAM,EAAA;IAAa,OAAO,EAAA;IAAkB,MAAM,EAAA"}