@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 @@
1
+ {"version":3,"file":"design-system45.js","names":[],"sources":["../src/components/BCarousel/BCarousel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n Comment,\n Fragment,\n Text,\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n onMounted,\n ref,\n useId,\n useSlots,\n watch,\n type PropType,\n type VNode,\n} from 'vue';\n\nimport type {\n BCarouselAutoplayConfig,\n BCarouselDotPlacement,\n BCarouselEffect,\n} from './types';\n\n// ─────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────\nconst {\n modelValue,\n defaultActiveIndex = 0,\n arrows = false,\n autoplay = false,\n autoplaySpeed = 3000,\n adaptiveHeight = false,\n dotPlacement = 'bottom',\n dots = true,\n dotsClassName,\n draggable = false,\n fade = false,\n effect,\n infinite = true,\n speed = 500,\n easing = 'linear',\n waitForAnimate = false,\n pauseOnHover = true,\n ariaLabel = 'Carousel',\n} = defineProps<{\n /**\n * Active slide index (controlled). Pair with `v-model` for two-way binding.\n * When omitted, the component manages its own state starting from\n * `defaultActiveIndex`.\n */\n modelValue?: number;\n /**\n * Initial active slide index (uncontrolled).\n * @default 0\n */\n defaultActiveIndex?: number;\n /**\n * Show prev/next navigation arrows.\n * @default false\n */\n arrows?: boolean;\n /**\n * Auto-advance to the next slide. Pass an object `{ dotDuration: true }` to\n * also display a filling progress bar inside the active dot.\n * @default false\n */\n autoplay?: boolean | BCarouselAutoplayConfig;\n /**\n * Milliseconds between automatic slide transitions (when autoplay is on).\n * @default 3000\n */\n autoplaySpeed?: number;\n /**\n * When true, the viewport height tracks the active slide's height.\n * @default false\n */\n adaptiveHeight?: boolean;\n /**\n * Position of the dots indicator relative to the viewport.\n * @default 'bottom'\n */\n dotPlacement?: BCarouselDotPlacement;\n /**\n * Whether to render the dot indicators.\n * @default true\n */\n dots?: boolean;\n /** Optional CSS class added to the dots list. */\n dotsClassName?: string;\n /**\n * Allow dragging slides with the pointer (mouse / touch).\n * @default false\n */\n draggable?: boolean;\n /**\n * Use the fade effect instead of horizontal scroll. Convenience for\n * `effect=\"fade\"`.\n * @default false\n */\n fade?: boolean;\n /**\n * Transition effect. Overrides the `fade` shorthand when specified.\n * @default 'scrollx'\n */\n effect?: BCarouselEffect;\n /**\n * When true (default), navigation wraps around at the edges.\n * @default true\n */\n infinite?: boolean;\n /**\n * Transition duration in milliseconds.\n * @default 500\n */\n speed?: number;\n /**\n * CSS easing function used for the slide transition.\n * @default 'linear'\n */\n easing?: string;\n /**\n * When true, navigation requests during an in-flight transition are ignored\n * until the previous transition completes.\n * @default false\n */\n waitForAnimate?: boolean;\n /**\n * Pause autoplay while the pointer hovers over the carousel.\n * @default true\n */\n pauseOnHover?: boolean;\n /**\n * Accessible label applied to the carousel root region.\n * @default 'Carousel'\n */\n ariaLabel?: string;\n}>();\n\n// ─────────────────────────────────────────────\n// Emits\n// ─────────────────────────────────────────────\nconst emit = defineEmits<{\n /** Two-way binding update for the active slide index. */\n (e: 'update:modelValue', index: number): void;\n /** Fires AFTER the transition to the new slide completes. */\n (e: 'change', index: number): void;\n /** AntD-aligned alias of `change`. */\n (e: 'afterChange', index: number): void;\n /** Fires BEFORE the transition begins. */\n (e: 'beforeChange', current: number, next: number): void;\n}>();\n\n// ─────────────────────────────────────────────\n// Slots\n// ─────────────────────────────────────────────\ndefineSlots<{\n /** Slides - each immediate child becomes one slide. */\n default?(): unknown;\n /** Custom previous-arrow content. */\n prevArrow?(): unknown;\n /** Custom next-arrow content. */\n nextArrow?(): unknown;\n /** Custom dot renderer. Receives `{ index, active }`. */\n dot?(props: { index: number; active: boolean }): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Slot → slide vnode flattening\n// ─────────────────────────────────────────────\nconst slots = useSlots();\n\nfunction flattenSlideVnodes(vnodes: readonly VNode[] = []): VNode[] {\n const out: VNode[] = [];\n for (const v of vnodes) {\n if (!v) continue;\n if (v.type === Comment) continue;\n if (\n v.type === Text &&\n typeof v.children === 'string' &&\n v.children.trim() === ''\n ) {\n continue;\n }\n if (v.type === Fragment) {\n out.push(...flattenSlideVnodes(v.children as VNode[]));\n } else {\n out.push(v);\n }\n }\n return out;\n}\n\n// slideCount is updated at render time by SlideTrack so that subsequent\n// reads (autoplay watcher, navigation) don't invoke the default slot outside\n// the render function. Initial value is derived once at setup so that dots\n// and arrows render synchronously on first mount.\nconst slideCount = ref(flattenSlideVnodes(slots.default?.() ?? []).length);\n\nconst SlideTrack = defineComponent({\n name: 'BCarouselTrack',\n inheritAttrs: false,\n props: {\n activeIndex: { type: Number, required: true },\n total: { type: Number, required: true },\n slideId: {\n type: Function as PropType<(i: number) => string>,\n required: true,\n },\n trackStyle: { type: Object, default: undefined },\n },\n setup(props, { slots: childSlots }) {\n return () => {\n const children = flattenSlideVnodes(childSlots.default?.());\n // sync count back to parent (post-render to avoid mid-render mutation)\n if (children.length !== slideCount.value) {\n Promise.resolve().then(() => {\n slideCount.value = children.length;\n });\n }\n return h(\n 'div',\n { class: 'b-carousel__track', style: props.trackStyle },\n children.map((vnode, i) =>\n h(\n 'div',\n {\n id: props.slideId(i),\n class: [\n 'b-carousel__slide',\n {\n 'b-carousel__slide--active': i === props.activeIndex,\n },\n ],\n role: 'group',\n 'aria-roledescription': 'slide',\n 'aria-label': `${i + 1} of ${children.length}`,\n 'aria-hidden': i !== props.activeIndex ? 'true' : undefined,\n inert: i !== props.activeIndex ? '' : undefined,\n },\n [vnode],\n ),\n ),\n );\n };\n },\n});\n\n// ─────────────────────────────────────────────\n// Effective effect (fade shorthand)\n// ─────────────────────────────────────────────\nconst effectiveEffect = computed<BCarouselEffect>(\n () => effect ?? (fade ? 'fade' : 'scrollx'),\n);\n\n// ─────────────────────────────────────────────\n// Active index state (controlled vs uncontrolled)\n// ─────────────────────────────────────────────\nconst isControlled = computed(() => modelValue !== undefined);\nconst internalIndex = ref<number>(\n Math.max(0, Math.min(defaultActiveIndex, Math.max(0, slideCount.value - 1))),\n);\n\nconst activeIndex = computed(() =>\n isControlled.value ? modelValue! : internalIndex.value,\n);\n\n// Clamp when slides change\nwatch(slideCount, (n) => {\n if (n === 0) return;\n if (internalIndex.value >= n) {\n internalIndex.value = n - 1;\n }\n});\n\nwatch(\n () => modelValue,\n (val) => {\n if (val !== undefined && val !== internalIndex.value) {\n internalIndex.value = val;\n }\n },\n);\n\n// ─────────────────────────────────────────────\n// IDs (a11y)\n// ─────────────────────────────────────────────\nconst uid = useId();\nconst slideId = (i: number) => `${uid}-slide-${i}`;\nconst dotId = (i: number) => `${uid}-dot-${i}`;\n\n// ─────────────────────────────────────────────\n// Animation state\n// ─────────────────────────────────────────────\nconst isAnimating = ref(false);\nlet animationTimer: ReturnType<typeof setTimeout> | null = null;\n\nfunction setAnimating() {\n isAnimating.value = true;\n if (animationTimer) clearTimeout(animationTimer);\n animationTimer = setTimeout(() => {\n isAnimating.value = false;\n animationTimer = null;\n }, speed);\n}\n\n// ─────────────────────────────────────────────\n// Navigation\n// ─────────────────────────────────────────────\nfunction setIndex(target: number, dontAnimate = false) {\n if (slideCount.value === 0) return;\n if (waitForAnimate && isAnimating.value) return;\n\n let next = target;\n if (infinite) {\n next = ((target % slideCount.value) + slideCount.value) % slideCount.value;\n } else {\n next = Math.max(0, Math.min(target, slideCount.value - 1));\n }\n\n const current = activeIndex.value;\n if (next === current) return;\n\n emit('beforeChange', current, next);\n\n if (!isControlled.value) {\n internalIndex.value = next;\n }\n emit('update:modelValue', next);\n\n if (!dontAnimate) {\n setAnimating();\n }\n\n // afterChange fires once the transition finishes (or immediately when not animating)\n const fire = () => {\n emit('change', next);\n emit('afterChange', next);\n };\n if (dontAnimate) {\n fire();\n } else {\n setTimeout(fire, speed);\n }\n}\n\nfunction goTo(idx: number, dontAnimate = false) {\n setIndex(idx, dontAnimate);\n}\n\nfunction next() {\n setIndex(activeIndex.value + 1);\n}\n\nfunction prev() {\n setIndex(activeIndex.value - 1);\n}\n\ndefineExpose({ goTo, next, prev });\n\n// ─────────────────────────────────────────────\n// Autoplay\n// ─────────────────────────────────────────────\nconst autoplayEnabled = computed(() =>\n typeof autoplay === 'object' ? true : !!autoplay,\n);\nconst showDotProgress = computed(\n () =>\n typeof autoplay === 'object' &&\n autoplay !== null &&\n autoplay.dotDuration === true,\n);\n\nlet autoplayTimer: ReturnType<typeof setTimeout> | null = null;\nconst isPaused = ref(false);\n\nfunction clearAutoplay() {\n if (autoplayTimer) {\n clearTimeout(autoplayTimer);\n autoplayTimer = null;\n }\n}\n\nfunction scheduleAutoplay() {\n clearAutoplay();\n if (!autoplayEnabled.value || isPaused.value || slideCount.value <= 1) return;\n if (!infinite && activeIndex.value >= slideCount.value - 1) return;\n autoplayTimer = setTimeout(() => {\n next();\n }, autoplaySpeed);\n}\n\nwatch(\n [autoplayEnabled, isPaused, activeIndex, slideCount],\n () => {\n if (typeof window === 'undefined') return;\n scheduleAutoplay();\n },\n { flush: 'post' },\n);\n\nonMounted(() => {\n scheduleAutoplay();\n});\n\nonBeforeUnmount(() => {\n clearAutoplay();\n if (animationTimer) clearTimeout(animationTimer);\n});\n\nfunction onMouseEnter() {\n if (pauseOnHover && autoplayEnabled.value) isPaused.value = true;\n}\nfunction onMouseLeave() {\n if (pauseOnHover && autoplayEnabled.value) isPaused.value = false;\n}\n\n// ─────────────────────────────────────────────\n// Drag-to-scroll\n// ─────────────────────────────────────────────\nconst dragState = ref<{\n active: boolean;\n startX: number;\n deltaX: number;\n width: number;\n pointerId: number | null;\n}>({ active: false, startX: 0, deltaX: 0, width: 0, pointerId: null });\n\nconst viewportRef = ref<HTMLElement | null>(null);\n\nfunction onPointerDown(e: PointerEvent) {\n if (!draggable || slideCount.value <= 1) return;\n // ignore non-primary buttons\n if (e.button !== 0 && e.pointerType === 'mouse') return;\n const target = viewportRef.value;\n if (!target) return;\n dragState.value = {\n active: true,\n startX: e.clientX,\n deltaX: 0,\n width: target.clientWidth || 1,\n pointerId: e.pointerId,\n };\n try {\n target.setPointerCapture(e.pointerId);\n } catch {\n // ignore (jsdom)\n }\n}\n\nfunction onPointerMove(e: PointerEvent) {\n if (!dragState.value.active) return;\n if (\n dragState.value.pointerId !== null &&\n e.pointerId !== dragState.value.pointerId\n )\n return;\n dragState.value.deltaX = e.clientX - dragState.value.startX;\n}\n\nfunction onPointerUp(e: PointerEvent) {\n if (!dragState.value.active) return;\n const { deltaX, width } = dragState.value;\n const threshold = Math.max(40, width * 0.15);\n if (deltaX <= -threshold) {\n next();\n } else if (deltaX >= threshold) {\n prev();\n }\n dragState.value = {\n active: false,\n startX: 0,\n deltaX: 0,\n width: 0,\n pointerId: null,\n };\n const target = viewportRef.value;\n if (target) {\n try {\n target.releasePointerCapture(e.pointerId);\n } catch {\n // ignore\n }\n }\n}\n\n// ─────────────────────────────────────────────\n// Keyboard navigation on the dots tablist\n// ─────────────────────────────────────────────\nfunction onDotsKeydown(e: KeyboardEvent) {\n if (slideCount.value === 0) return;\n switch (e.key) {\n case 'ArrowRight':\n e.preventDefault();\n next();\n break;\n case 'ArrowLeft':\n e.preventDefault();\n prev();\n break;\n case 'Home':\n e.preventDefault();\n goTo(0);\n break;\n case 'End':\n e.preventDefault();\n goTo(slideCount.value - 1);\n break;\n }\n}\n\n// ─────────────────────────────────────────────\n// Computed styles & classes\n// ─────────────────────────────────────────────\nconst isHorizontalEffect = computed(() => effectiveEffect.value === 'scrollx');\n\nconst trackStyle = computed(() => {\n if (!isHorizontalEffect.value) return undefined;\n const base = -(activeIndex.value * 100);\n const dragOffsetPct =\n dragState.value.active && dragState.value.width > 0\n ? (dragState.value.deltaX / dragState.value.width) * 100\n : 0;\n return {\n transform: `translate3d(${base + dragOffsetPct}%, 0, 0)`,\n transitionDuration: dragState.value.active\n ? '0ms'\n : `var(--b-carousel-speed)`,\n transitionTimingFunction: 'var(--b-carousel-easing)',\n };\n});\n\nconst rootStyle = computed<Record<string, string>>(() => ({\n '--b-carousel-speed': `${speed}ms`,\n '--b-carousel-easing': easing,\n '--b-carousel-autoplay-duration': `${autoplaySpeed}ms`,\n}));\n\nconst rootClasses = computed(() => [\n 'b-carousel',\n `b-carousel--effect-${effectiveEffect.value}`,\n `b-carousel--dots-${dotPlacement}`,\n {\n 'b-carousel--arrows': arrows,\n 'b-carousel--draggable': draggable,\n 'b-carousel--adaptive-height': adaptiveHeight,\n 'b-carousel--no-dots': !dots,\n 'b-carousel--dragging': dragState.value.active,\n },\n]);\n\nconst canPrev = computed(() => infinite || activeIndex.value > 0);\nconst canNext = computed(\n () => infinite || activeIndex.value < slideCount.value - 1,\n);\n</script>\n\n<template>\n <section\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n role=\"region\"\n :aria-label=\"ariaLabel\"\n aria-roledescription=\"carousel\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n >\n <!-- ── Viewport ── -->\n <div\n ref=\"viewportRef\"\n class=\"b-carousel__viewport\"\n @pointerdown=\"onPointerDown\"\n @pointermove=\"onPointerMove\"\n @pointerup=\"onPointerUp\"\n @pointercancel=\"onPointerUp\"\n >\n <SlideTrack\n :active-index=\"activeIndex\"\n :total=\"slideCount\"\n :slide-id=\"slideId\"\n :track-style=\"trackStyle\"\n >\n <slot />\n </SlideTrack>\n </div>\n\n <!-- ── Arrows ── -->\n <template v-if=\"arrows && slideCount > 1\">\n <button\n type=\"button\"\n class=\"b-carousel__arrow b-carousel__arrow--prev\"\n :disabled=\"!canPrev\"\n :aria-disabled=\"!canPrev || undefined\"\n aria-label=\"Previous slide\"\n @click=\"prev\"\n >\n <slot name=\"prevArrow\">\n <svg\n class=\"b-carousel__arrow-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M10.354 3.646a.5.5 0 0 1 0 .708L6.707 8l3.647 3.646a.5.5 0 1 1-.708.708l-4-4a.5.5 0 0 1 0-.708l4-4a.5.5 0 0 1 .708 0z\"\n />\n </svg>\n </slot>\n </button>\n <button\n type=\"button\"\n class=\"b-carousel__arrow b-carousel__arrow--next\"\n :disabled=\"!canNext\"\n :aria-disabled=\"!canNext || undefined\"\n aria-label=\"Next slide\"\n @click=\"next\"\n >\n <slot name=\"nextArrow\">\n <svg\n class=\"b-carousel__arrow-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M5.646 3.646a.5.5 0 0 1 .708 0l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L9.293 8 5.646 4.354a.5.5 0 0 1 0-.708z\"\n />\n </svg>\n </slot>\n </button>\n </template>\n\n <!-- ── Live region (announces active slide change) ── -->\n <div class=\"b-carousel__sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n Slide {{ activeIndex + 1 }} of {{ slideCount }}\n </div>\n\n <!-- ── Dots ── -->\n <div\n v-if=\"dots && slideCount > 1\"\n class=\"b-carousel__dots\"\n :class=\"dotsClassName\"\n role=\"tablist\"\n :aria-label=\"`${ariaLabel} pagination`\"\n @keydown=\"onDotsKeydown\"\n >\n <div\n v-for=\"i in slideCount\"\n :key=\"i - 1\"\n class=\"b-carousel__dot-wrapper\"\n >\n <button\n type=\"button\"\n :id=\"dotId(i - 1)\"\n class=\"b-carousel__dot\"\n :class=\"{\n 'b-carousel__dot--active': i - 1 === activeIndex,\n 'b-carousel__dot--progress':\n showDotProgress && i - 1 === activeIndex && !isPaused,\n }\"\n role=\"tab\"\n :aria-selected=\"i - 1 === activeIndex\"\n :aria-controls=\"slideId(i - 1)\"\n :aria-label=\"`Go to slide ${i}`\"\n :tabindex=\"i - 1 === activeIndex ? 0 : -1\"\n @click=\"goTo(i - 1)\"\n >\n <slot name=\"dot\" :index=\"i - 1\" :active=\"i - 1 === activeIndex\">\n <span class=\"b-carousel__dot-inner\" aria-hidden=\"true\" />\n </slot>\n </button>\n </div>\n </div>\n </section>\n</template>\n\n<style>\n/* ─────────────────────────────────────────────\n BCarousel - Design tokens (scoped to .b-carousel)\n ───────────────────────────────────────────── */\n.b-carousel {\n /* ── AntD design tokens ── */\n --b-carousel-arrow-offset: 8px;\n --b-carousel-arrow-size: 16px;\n --b-carousel-dot-active-width: 24px;\n --b-carousel-dot-gap: 4px;\n --b-carousel-dot-height: 3px;\n --b-carousel-dot-offset: 12px;\n --b-carousel-dot-width: 16px;\n\n /* ── Local extras ── */\n --b-carousel-arrow-color: oklch(100% 0 0);\n --b-carousel-arrow-bg: oklch(20% 0.005 260 / 45%);\n --b-carousel-arrow-bg-hover: oklch(20% 0.005 260 / 70%);\n --b-carousel-arrow-disabled-opacity: 0.3;\n --b-carousel-dot-color: oklch(100% 0 0 / 60%);\n --b-carousel-dot-active-color: oklch(100% 0 0);\n --b-carousel-bg: oklch(20% 0.005 260);\n --b-carousel-radius: 4px;\n --b-carousel-focus-ring: 0 0 0 2px oklch(54.6% 0.245 262.881 / 50%);\n\n /* ── Motion (set by inline style; defaults below) ── */\n --b-carousel-speed: 500ms;\n --b-carousel-easing: linear;\n --b-carousel-autoplay-duration: 3000ms;\n\n position: relative;\n display: block;\n box-sizing: border-box;\n width: 100%;\n user-select: none;\n}\n\n/* ─────────────────────────────────────────────\n Viewport\n ───────────────────────────────────────────── */\n.b-carousel__viewport {\n position: relative;\n overflow: hidden;\n border-radius: var(--b-carousel-radius);\n background: var(--b-carousel-bg);\n touch-action: pan-y;\n}\n\n.b-carousel--draggable .b-carousel__viewport {\n cursor: grab;\n}\n\n.b-carousel--dragging .b-carousel__viewport {\n cursor: grabbing;\n}\n\n/* ─────────────────────────────────────────────\n Track + slides (scrollx effect)\n ───────────────────────────────────────────── */\n.b-carousel--effect-scrollx .b-carousel__track {\n display: flex;\n flex-wrap: nowrap;\n width: 100%;\n transition: transform var(--b-carousel-speed) var(--b-carousel-easing);\n will-change: transform;\n}\n\n.b-carousel--effect-scrollx .b-carousel__slide {\n flex: 0 0 100%;\n min-width: 0;\n width: 100%;\n}\n\n/* ── Fade effect: stack slides, only active is visible ── */\n.b-carousel--effect-fade .b-carousel__track {\n position: relative;\n display: block;\n width: 100%;\n}\n\n.b-carousel--effect-fade .b-carousel__slide {\n position: absolute;\n inset: 0;\n width: 100%;\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--b-carousel-speed) var(--b-carousel-easing);\n}\n\n.b-carousel--effect-fade .b-carousel__slide:first-child {\n /* gives the track its intrinsic height (sized to the first slide) */\n position: relative;\n}\n\n.b-carousel--effect-fade .b-carousel__slide--active {\n opacity: 1;\n pointer-events: auto;\n z-index: 1;\n}\n\n/* ── Adaptive height ── */\n.b-carousel--adaptive-height .b-carousel__viewport,\n.b-carousel--adaptive-height .b-carousel__track {\n height: auto;\n}\n\n/* ─────────────────────────────────────────────\n Arrows\n ───────────────────────────────────────────── */\n.b-carousel__arrow {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: calc(var(--b-carousel-arrow-size) + 16px);\n height: calc(var(--b-carousel-arrow-size) + 16px);\n padding: 0;\n border: none;\n background: var(--b-carousel-arrow-bg);\n color: var(--b-carousel-arrow-color);\n border-radius: 50%;\n cursor: pointer;\n z-index: 2;\n transition: background 200ms;\n}\n\n.b-carousel__arrow:hover:not(:disabled) {\n background: var(--b-carousel-arrow-bg-hover);\n}\n\n.b-carousel__arrow:disabled {\n cursor: not-allowed;\n opacity: var(--b-carousel-arrow-disabled-opacity);\n}\n\n.b-carousel__arrow:focus-visible {\n outline: none;\n box-shadow: var(--b-carousel-focus-ring);\n}\n\n.b-carousel__arrow--prev {\n left: var(--b-carousel-arrow-offset);\n}\n\n.b-carousel__arrow--next {\n right: var(--b-carousel-arrow-offset);\n}\n\n.b-carousel__arrow-icon {\n width: var(--b-carousel-arrow-size);\n height: var(--b-carousel-arrow-size);\n display: block;\n}\n\n/* ─────────────────────────────────────────────\n Dots\n ───────────────────────────────────────────── */\n.b-carousel__dots {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--b-carousel-dot-gap);\n list-style: none;\n margin: 0;\n padding: 0;\n z-index: 2;\n}\n\n.b-carousel--dots-bottom .b-carousel__dots {\n bottom: var(--b-carousel-dot-offset);\n left: 50%;\n transform: translateX(-50%);\n flex-direction: row;\n}\n\n.b-carousel--dots-top .b-carousel__dots {\n top: var(--b-carousel-dot-offset);\n left: 50%;\n transform: translateX(-50%);\n flex-direction: row;\n}\n\n.b-carousel--dots-start .b-carousel__dots {\n left: var(--b-carousel-dot-offset);\n top: 50%;\n transform: translateY(-50%);\n flex-direction: column;\n}\n\n.b-carousel--dots-end .b-carousel__dots {\n right: var(--b-carousel-dot-offset);\n top: 50%;\n transform: translateY(-50%);\n flex-direction: column;\n}\n\n.b-carousel__dot-wrapper {\n display: flex;\n margin: 0;\n padding: 0;\n}\n\n.b-carousel__dot {\n display: block;\n width: var(--b-carousel-dot-width);\n height: var(--b-carousel-dot-height);\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n position: relative;\n transition: width 200ms;\n}\n\n.b-carousel__dot-inner {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: calc(var(--b-carousel-dot-height) / 2);\n background: var(--b-carousel-dot-color);\n transition:\n background 200ms,\n opacity 200ms;\n pointer-events: none;\n}\n\n.b-carousel__dot:hover .b-carousel__dot-inner {\n background: var(--b-carousel-dot-active-color);\n opacity: 0.7;\n}\n\n.b-carousel__dot:focus-visible {\n outline: none;\n box-shadow: var(--b-carousel-focus-ring);\n border-radius: calc(var(--b-carousel-dot-height) / 2);\n}\n\n.b-carousel__dot--active {\n width: var(--b-carousel-dot-active-width);\n}\n\n.b-carousel__dot--active .b-carousel__dot-inner {\n background: var(--b-carousel-dot-active-color);\n opacity: 1;\n}\n\n/* Vertical dot orientation (start / end placements) */\n.b-carousel--dots-start .b-carousel__dot,\n.b-carousel--dots-end .b-carousel__dot {\n width: var(--b-carousel-dot-height);\n height: var(--b-carousel-dot-width);\n}\n\n.b-carousel--dots-start .b-carousel__dot--active,\n.b-carousel--dots-end .b-carousel__dot--active {\n width: var(--b-carousel-dot-height);\n height: var(--b-carousel-dot-active-width);\n}\n\n/* ── Autoplay progress bar (CSS-only) ── */\n.b-carousel__dot--progress .b-carousel__dot-inner {\n background: linear-gradient(\n to right,\n var(--b-carousel-dot-active-color) 0%,\n var(--b-carousel-dot-active-color) 100%\n );\n background-size: 0% 100%;\n background-repeat: no-repeat;\n background-color: var(--b-carousel-dot-color);\n animation: b-carousel-dot-progress var(--b-carousel-autoplay-duration) linear\n forwards;\n}\n\n@keyframes b-carousel-dot-progress {\n from {\n background-size: 0% 100%;\n }\n to {\n background-size: 100% 100%;\n }\n}\n\n/* ─────────────────────────────────────────────\n Screen-reader live region (visually hidden)\n ───────────────────────────────────────────── */\n.b-carousel__sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n/* ─────────────────────────────────────────────\n Dark mode\n ───────────────────────────────────────────── */\n[data-prefers-color='dark'] .b-carousel {\n --b-carousel-bg: oklch(15% 0.005 260);\n --b-carousel-arrow-bg: oklch(95% 0 0 / 12%);\n --b-carousel-arrow-bg-hover: oklch(95% 0 0 / 25%);\n --b-carousel-arrow-color: oklch(95% 0 0);\n --b-carousel-dot-color: oklch(85% 0 0 / 40%);\n --b-carousel-dot-active-color: oklch(95% 0 0);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-carousel {\n --b-carousel-bg: oklch(15% 0.005 260);\n --b-carousel-arrow-bg: oklch(95% 0 0 / 12%);\n --b-carousel-arrow-bg-hover: oklch(95% 0 0 / 25%);\n --b-carousel-arrow-color: oklch(95% 0 0);\n --b-carousel-dot-color: oklch(85% 0 0 / 40%);\n --b-carousel-dot-active-color: oklch(95% 0 0);\n }\n}\n\n/* ─────────────────────────────────────────────\n Reduced motion\n ───────────────────────────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n .b-carousel {\n --b-carousel-speed: 0ms;\n }\n .b-carousel__dot--progress .b-carousel__dot-inner {\n animation: none;\n }\n .b-carousel__arrow {\n transition: none;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -1,53 +1,8 @@
1
- import { B_CHECKBOX_GROUP_KEY as e } from "./design-system43.js";
2
- import t from "./design-system46.js";
3
- import { Fragment as n, computed as r, createBlock as i, createElementBlock as a, createTextVNode as o, defineComponent as s, mergeModels as c, openBlock as l, provide as u, reactive as d, renderList as f, renderSlot as p, toDisplayString as m, toRefs as h, useModel as g, withCtx as _ } from "vue";
4
- //#region src/components/BCheckbox/BCheckboxGroup.vue?vue&type=script&setup=true&lang.ts
5
- var v = {
6
- class: "b-checkbox-group b:inline-flex b:flex-wrap b:gap-2",
7
- role: "group"
8
- }, y = /* @__PURE__ */ s({
9
- __name: "BCheckboxGroup",
10
- props: /* @__PURE__ */ c({
11
- disabled: {
12
- type: Boolean,
13
- default: !1
14
- },
15
- name: { default: "" },
16
- options: { default: () => void 0 }
17
- }, {
18
- modelValue: { default: () => [] },
19
- modelModifiers: {}
20
- }),
21
- emits: /* @__PURE__ */ c(["change"], ["update:modelValue"]),
22
- setup(s, { emit: c }) {
23
- let y = g(s, "modelValue"), b = c, x = r(() => s.options ? s.options.map((e) => typeof e == "string" || typeof e == "number" ? {
24
- label: String(e),
25
- value: e
26
- } : e) : []);
27
- function S(e) {
28
- let t = [...y.value], n = t.indexOf(e);
29
- n === -1 ? t.push(e) : t.splice(n, 1), y.value = t, b("change", t);
30
- }
31
- let { disabled: C, name: w } = h(d({
32
- disabled: s.disabled,
33
- name: s.name
34
- }));
35
- return u(e, {
36
- modelValue: r(() => y.value),
37
- disabled: C,
38
- name: w,
39
- toggleValue: S
40
- }), (e, r) => (l(), a("div", v, [x.value.length > 0 ? (l(!0), a(n, { key: 0 }, f(x.value, (e) => (l(), i(t, {
41
- key: e.value,
42
- value: e.value,
43
- disabled: e.disabled
44
- }, {
45
- default: _(() => [o(m(e.label), 1)]),
46
- _: 2
47
- }, 1032, ["value", "disabled"]))), 128)) : p(e.$slots, "default", { key: 1 })]));
48
- }
49
- });
1
+ import e from "./design-system45.js";
2
+ /* empty css */
3
+ //#region src/components/BCarousel/BCarousel.vue
4
+ var t = e;
50
5
  //#endregion
51
- export { y as default };
6
+ export { t as default };
52
7
 
53
8
  //# sourceMappingURL=design-system47.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"design-system47.js","names":[],"sources":["../src/components/BCheckbox/BCheckboxGroup.vue?vue&type=script&setup=true&lang.ts"],"sourcesContent":["import { useModel as _useModel, mergeModels as _mergeModels, defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot } from \"vue\"\n\nconst _hoisted_1 = {\n class: \"b-checkbox-group b:inline-flex b:flex-wrap b:gap-2\",\n role: \"group\"\n}\n\nimport { computed, provide, reactive, toRefs } from 'vue';\nimport BCheckbox from './BCheckbox.vue';\nimport { B_CHECKBOX_GROUP_KEY, type BCheckboxOption } from './types';\n\n//#region Props\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'BCheckboxGroup',\n props: /*@__PURE__*/_mergeModels({\n disabled: { type: Boolean, default: false },\n name: { default: '' },\n options: { default: () => (undefined) }\n }, {\n \"modelValue\": { default: () => [] },\n \"modelModifiers\": {},\n }),\n emits: /*@__PURE__*/_mergeModels([\"change\"], [\"update:modelValue\"]),\n setup(__props: any, { emit: __emit }) {\n\n\n\n/**\n * Array of currently selected values.\n */\nconst model = _useModel<Array<string | number>>(__props, \"modelValue\");\n\nconst emit = __emit;\n//#endregion\n\n//#region Normalize options\nconst normalizedOptions = computed<BCheckboxOption[]>(() => {\n if (!__props.options) return [];\n return __props.options.map((opt) => {\n if (typeof opt === 'string' || typeof opt === 'number') {\n return { label: String(opt), value: opt };\n }\n return opt;\n });\n});\n//#endregion\n\n//#region Group context\nfunction toggleValue(val: string | number) {\n const current = [...model.value];\n const index = current.indexOf(val);\n if (index === -1) {\n current.push(val);\n } else {\n current.splice(index, 1);\n }\n model.value = current;\n emit('change', current);\n}\n\nconst props = reactive({ disabled: __props.disabled, name: __props.name });\nconst { disabled: disabledRef, name: nameRef } = toRefs(props);\n\nprovide(B_CHECKBOX_GROUP_KEY, {\n modelValue: computed(() => model.value),\n disabled: disabledRef,\n name: nameRef,\n toggleValue,\n});\n//#endregion\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (normalizedOptions.value.length > 0)\n ? (_openBlock(true), _createElementBlock(_Fragment, { key: 0 }, _renderList(normalizedOptions.value, (opt) => {\n return (_openBlock(), _createBlock(BCheckbox, {\n key: opt.value,\n value: opt.value,\n disabled: opt.disabled\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(opt.label), 1)\n ]),\n _: 2\n }, 1032, [\"value\", \"disabled\"]))\n }), 128))\n : _renderSlot(_ctx.$slots, \"default\", { key: 1 })\n ]))\n}\n}\n\n})"],"mappings":";;;;AAGA,IAAM,IAAa;CACjB,OAAO;CACP,MAAM;CACP,EAQD,IAA4B,kBAAiB;CAC3C,QAAQ;CACR,OAAoB,kBAAa;EAC/B,UAAU;GAAE,MAAM;GAAS,SAAS;GAAO;EAC3C,MAAM,EAAE,SAAS,IAAI;EACrB,SAAS,EAAE,eAAgB,KAAA,GAAY;EACxC,EAAE;EACD,YAAc,EAAE,eAAe,EAAE,EAAE;EACnC,gBAAkB,EAAE;EACrB,CAAC;CACF,OAAoB,kBAAa,CAAC,SAAS,EAAE,CAAC,oBAAoB,CAAC;CACnE,MAAM,GAAc,EAAE,MAAM,KAAU;EAOxC,IAAM,IAAQ,EAAkC,GAAS,aAAa,EAEhE,IAAO,GAIP,IAAoB,QACnB,EAAQ,UACN,EAAQ,QAAQ,KAAK,MACtB,OAAO,KAAQ,YAAY,OAAO,KAAQ,WACrC;GAAE,OAAO,OAAO,EAAI;GAAE,OAAO;GAAK,GAEpC,EACP,GAN2B,EAAE,CAO/B;EAIF,SAAS,EAAY,GAAsB;GACzC,IAAM,IAAU,CAAC,GAAG,EAAM,MAAM,EAC1B,IAAQ,EAAQ,QAAQ,EAAI;AAOlC,GANI,MAAU,KACZ,EAAQ,KAAK,EAAI,GAEjB,EAAQ,OAAO,GAAO,EAAE,EAE1B,EAAM,QAAQ,GACd,EAAK,UAAU,EAAQ;;EAIzB,IAAM,EAAE,UAAU,GAAa,MAAM,MAAY,EADnC,EAAS;GAAE,UAAU,EAAQ;GAAU,MAAM,EAAQ;GAAM,CAAC,CACZ;AAU9D,SARA,EAAQ,GAAsB;GAC5B,YAAY,QAAe,EAAM,MAAM;GACvC,UAAU;GACV,MAAM;GACN;GACD,CAAC,GAGM,GAAU,OACR,GAAY,EAAE,EAAoB,OAAO,GAAY,CAC1D,EAAkB,MAAM,SAAS,KAC7B,EAAW,GAAK,EAAE,EAAoB,GAAW,EAAE,KAAK,GAAG,EAAE,EAAY,EAAkB,QAAQ,OAC1F,GAAY,EAAE,EAAa,GAAW;GAC5C,KAAK,EAAI;GACT,OAAO,EAAI;GACX,UAAU,EAAI;GACf,EAAE;GACD,SAAS,QAAe,CACtB,EAAiB,EAAiB,EAAI,MAAM,EAAE,EAAE,CACjD,CAAC;GACF,GAAG;GACJ,EAAE,MAAM,CAAC,SAAS,WAAW,CAAC,EAC/B,EAAE,IAAI,IACR,EAAY,EAAK,QAAQ,WAAW,EAAE,KAAK,GAAG,CAAC,CACpD,CAAC;;CAIH,CAAA"}
1
+ {"version":3,"file":"design-system47.js","names":[],"sources":["../src/components/BCarousel/BCarousel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n Comment,\n Fragment,\n Text,\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n onMounted,\n ref,\n useId,\n useSlots,\n watch,\n type PropType,\n type VNode,\n} from 'vue';\n\nimport type {\n BCarouselAutoplayConfig,\n BCarouselDotPlacement,\n BCarouselEffect,\n} from './types';\n\n// ─────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────\nconst {\n modelValue,\n defaultActiveIndex = 0,\n arrows = false,\n autoplay = false,\n autoplaySpeed = 3000,\n adaptiveHeight = false,\n dotPlacement = 'bottom',\n dots = true,\n dotsClassName,\n draggable = false,\n fade = false,\n effect,\n infinite = true,\n speed = 500,\n easing = 'linear',\n waitForAnimate = false,\n pauseOnHover = true,\n ariaLabel = 'Carousel',\n} = defineProps<{\n /**\n * Active slide index (controlled). Pair with `v-model` for two-way binding.\n * When omitted, the component manages its own state starting from\n * `defaultActiveIndex`.\n */\n modelValue?: number;\n /**\n * Initial active slide index (uncontrolled).\n * @default 0\n */\n defaultActiveIndex?: number;\n /**\n * Show prev/next navigation arrows.\n * @default false\n */\n arrows?: boolean;\n /**\n * Auto-advance to the next slide. Pass an object `{ dotDuration: true }` to\n * also display a filling progress bar inside the active dot.\n * @default false\n */\n autoplay?: boolean | BCarouselAutoplayConfig;\n /**\n * Milliseconds between automatic slide transitions (when autoplay is on).\n * @default 3000\n */\n autoplaySpeed?: number;\n /**\n * When true, the viewport height tracks the active slide's height.\n * @default false\n */\n adaptiveHeight?: boolean;\n /**\n * Position of the dots indicator relative to the viewport.\n * @default 'bottom'\n */\n dotPlacement?: BCarouselDotPlacement;\n /**\n * Whether to render the dot indicators.\n * @default true\n */\n dots?: boolean;\n /** Optional CSS class added to the dots list. */\n dotsClassName?: string;\n /**\n * Allow dragging slides with the pointer (mouse / touch).\n * @default false\n */\n draggable?: boolean;\n /**\n * Use the fade effect instead of horizontal scroll. Convenience for\n * `effect=\"fade\"`.\n * @default false\n */\n fade?: boolean;\n /**\n * Transition effect. Overrides the `fade` shorthand when specified.\n * @default 'scrollx'\n */\n effect?: BCarouselEffect;\n /**\n * When true (default), navigation wraps around at the edges.\n * @default true\n */\n infinite?: boolean;\n /**\n * Transition duration in milliseconds.\n * @default 500\n */\n speed?: number;\n /**\n * CSS easing function used for the slide transition.\n * @default 'linear'\n */\n easing?: string;\n /**\n * When true, navigation requests during an in-flight transition are ignored\n * until the previous transition completes.\n * @default false\n */\n waitForAnimate?: boolean;\n /**\n * Pause autoplay while the pointer hovers over the carousel.\n * @default true\n */\n pauseOnHover?: boolean;\n /**\n * Accessible label applied to the carousel root region.\n * @default 'Carousel'\n */\n ariaLabel?: string;\n}>();\n\n// ─────────────────────────────────────────────\n// Emits\n// ─────────────────────────────────────────────\nconst emit = defineEmits<{\n /** Two-way binding update for the active slide index. */\n (e: 'update:modelValue', index: number): void;\n /** Fires AFTER the transition to the new slide completes. */\n (e: 'change', index: number): void;\n /** AntD-aligned alias of `change`. */\n (e: 'afterChange', index: number): void;\n /** Fires BEFORE the transition begins. */\n (e: 'beforeChange', current: number, next: number): void;\n}>();\n\n// ─────────────────────────────────────────────\n// Slots\n// ─────────────────────────────────────────────\ndefineSlots<{\n /** Slides - each immediate child becomes one slide. */\n default?(): unknown;\n /** Custom previous-arrow content. */\n prevArrow?(): unknown;\n /** Custom next-arrow content. */\n nextArrow?(): unknown;\n /** Custom dot renderer. Receives `{ index, active }`. */\n dot?(props: { index: number; active: boolean }): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Slot → slide vnode flattening\n// ─────────────────────────────────────────────\nconst slots = useSlots();\n\nfunction flattenSlideVnodes(vnodes: readonly VNode[] = []): VNode[] {\n const out: VNode[] = [];\n for (const v of vnodes) {\n if (!v) continue;\n if (v.type === Comment) continue;\n if (\n v.type === Text &&\n typeof v.children === 'string' &&\n v.children.trim() === ''\n ) {\n continue;\n }\n if (v.type === Fragment) {\n out.push(...flattenSlideVnodes(v.children as VNode[]));\n } else {\n out.push(v);\n }\n }\n return out;\n}\n\n// slideCount is updated at render time by SlideTrack so that subsequent\n// reads (autoplay watcher, navigation) don't invoke the default slot outside\n// the render function. Initial value is derived once at setup so that dots\n// and arrows render synchronously on first mount.\nconst slideCount = ref(flattenSlideVnodes(slots.default?.() ?? []).length);\n\nconst SlideTrack = defineComponent({\n name: 'BCarouselTrack',\n inheritAttrs: false,\n props: {\n activeIndex: { type: Number, required: true },\n total: { type: Number, required: true },\n slideId: {\n type: Function as PropType<(i: number) => string>,\n required: true,\n },\n trackStyle: { type: Object, default: undefined },\n },\n setup(props, { slots: childSlots }) {\n return () => {\n const children = flattenSlideVnodes(childSlots.default?.());\n // sync count back to parent (post-render to avoid mid-render mutation)\n if (children.length !== slideCount.value) {\n Promise.resolve().then(() => {\n slideCount.value = children.length;\n });\n }\n return h(\n 'div',\n { class: 'b-carousel__track', style: props.trackStyle },\n children.map((vnode, i) =>\n h(\n 'div',\n {\n id: props.slideId(i),\n class: [\n 'b-carousel__slide',\n {\n 'b-carousel__slide--active': i === props.activeIndex,\n },\n ],\n role: 'group',\n 'aria-roledescription': 'slide',\n 'aria-label': `${i + 1} of ${children.length}`,\n 'aria-hidden': i !== props.activeIndex ? 'true' : undefined,\n inert: i !== props.activeIndex ? '' : undefined,\n },\n [vnode],\n ),\n ),\n );\n };\n },\n});\n\n// ─────────────────────────────────────────────\n// Effective effect (fade shorthand)\n// ─────────────────────────────────────────────\nconst effectiveEffect = computed<BCarouselEffect>(\n () => effect ?? (fade ? 'fade' : 'scrollx'),\n);\n\n// ─────────────────────────────────────────────\n// Active index state (controlled vs uncontrolled)\n// ─────────────────────────────────────────────\nconst isControlled = computed(() => modelValue !== undefined);\nconst internalIndex = ref<number>(\n Math.max(0, Math.min(defaultActiveIndex, Math.max(0, slideCount.value - 1))),\n);\n\nconst activeIndex = computed(() =>\n isControlled.value ? modelValue! : internalIndex.value,\n);\n\n// Clamp when slides change\nwatch(slideCount, (n) => {\n if (n === 0) return;\n if (internalIndex.value >= n) {\n internalIndex.value = n - 1;\n }\n});\n\nwatch(\n () => modelValue,\n (val) => {\n if (val !== undefined && val !== internalIndex.value) {\n internalIndex.value = val;\n }\n },\n);\n\n// ─────────────────────────────────────────────\n// IDs (a11y)\n// ─────────────────────────────────────────────\nconst uid = useId();\nconst slideId = (i: number) => `${uid}-slide-${i}`;\nconst dotId = (i: number) => `${uid}-dot-${i}`;\n\n// ─────────────────────────────────────────────\n// Animation state\n// ─────────────────────────────────────────────\nconst isAnimating = ref(false);\nlet animationTimer: ReturnType<typeof setTimeout> | null = null;\n\nfunction setAnimating() {\n isAnimating.value = true;\n if (animationTimer) clearTimeout(animationTimer);\n animationTimer = setTimeout(() => {\n isAnimating.value = false;\n animationTimer = null;\n }, speed);\n}\n\n// ─────────────────────────────────────────────\n// Navigation\n// ─────────────────────────────────────────────\nfunction setIndex(target: number, dontAnimate = false) {\n if (slideCount.value === 0) return;\n if (waitForAnimate && isAnimating.value) return;\n\n let next = target;\n if (infinite) {\n next = ((target % slideCount.value) + slideCount.value) % slideCount.value;\n } else {\n next = Math.max(0, Math.min(target, slideCount.value - 1));\n }\n\n const current = activeIndex.value;\n if (next === current) return;\n\n emit('beforeChange', current, next);\n\n if (!isControlled.value) {\n internalIndex.value = next;\n }\n emit('update:modelValue', next);\n\n if (!dontAnimate) {\n setAnimating();\n }\n\n // afterChange fires once the transition finishes (or immediately when not animating)\n const fire = () => {\n emit('change', next);\n emit('afterChange', next);\n };\n if (dontAnimate) {\n fire();\n } else {\n setTimeout(fire, speed);\n }\n}\n\nfunction goTo(idx: number, dontAnimate = false) {\n setIndex(idx, dontAnimate);\n}\n\nfunction next() {\n setIndex(activeIndex.value + 1);\n}\n\nfunction prev() {\n setIndex(activeIndex.value - 1);\n}\n\ndefineExpose({ goTo, next, prev });\n\n// ─────────────────────────────────────────────\n// Autoplay\n// ─────────────────────────────────────────────\nconst autoplayEnabled = computed(() =>\n typeof autoplay === 'object' ? true : !!autoplay,\n);\nconst showDotProgress = computed(\n () =>\n typeof autoplay === 'object' &&\n autoplay !== null &&\n autoplay.dotDuration === true,\n);\n\nlet autoplayTimer: ReturnType<typeof setTimeout> | null = null;\nconst isPaused = ref(false);\n\nfunction clearAutoplay() {\n if (autoplayTimer) {\n clearTimeout(autoplayTimer);\n autoplayTimer = null;\n }\n}\n\nfunction scheduleAutoplay() {\n clearAutoplay();\n if (!autoplayEnabled.value || isPaused.value || slideCount.value <= 1) return;\n if (!infinite && activeIndex.value >= slideCount.value - 1) return;\n autoplayTimer = setTimeout(() => {\n next();\n }, autoplaySpeed);\n}\n\nwatch(\n [autoplayEnabled, isPaused, activeIndex, slideCount],\n () => {\n if (typeof window === 'undefined') return;\n scheduleAutoplay();\n },\n { flush: 'post' },\n);\n\nonMounted(() => {\n scheduleAutoplay();\n});\n\nonBeforeUnmount(() => {\n clearAutoplay();\n if (animationTimer) clearTimeout(animationTimer);\n});\n\nfunction onMouseEnter() {\n if (pauseOnHover && autoplayEnabled.value) isPaused.value = true;\n}\nfunction onMouseLeave() {\n if (pauseOnHover && autoplayEnabled.value) isPaused.value = false;\n}\n\n// ─────────────────────────────────────────────\n// Drag-to-scroll\n// ─────────────────────────────────────────────\nconst dragState = ref<{\n active: boolean;\n startX: number;\n deltaX: number;\n width: number;\n pointerId: number | null;\n}>({ active: false, startX: 0, deltaX: 0, width: 0, pointerId: null });\n\nconst viewportRef = ref<HTMLElement | null>(null);\n\nfunction onPointerDown(e: PointerEvent) {\n if (!draggable || slideCount.value <= 1) return;\n // ignore non-primary buttons\n if (e.button !== 0 && e.pointerType === 'mouse') return;\n const target = viewportRef.value;\n if (!target) return;\n dragState.value = {\n active: true,\n startX: e.clientX,\n deltaX: 0,\n width: target.clientWidth || 1,\n pointerId: e.pointerId,\n };\n try {\n target.setPointerCapture(e.pointerId);\n } catch {\n // ignore (jsdom)\n }\n}\n\nfunction onPointerMove(e: PointerEvent) {\n if (!dragState.value.active) return;\n if (\n dragState.value.pointerId !== null &&\n e.pointerId !== dragState.value.pointerId\n )\n return;\n dragState.value.deltaX = e.clientX - dragState.value.startX;\n}\n\nfunction onPointerUp(e: PointerEvent) {\n if (!dragState.value.active) return;\n const { deltaX, width } = dragState.value;\n const threshold = Math.max(40, width * 0.15);\n if (deltaX <= -threshold) {\n next();\n } else if (deltaX >= threshold) {\n prev();\n }\n dragState.value = {\n active: false,\n startX: 0,\n deltaX: 0,\n width: 0,\n pointerId: null,\n };\n const target = viewportRef.value;\n if (target) {\n try {\n target.releasePointerCapture(e.pointerId);\n } catch {\n // ignore\n }\n }\n}\n\n// ─────────────────────────────────────────────\n// Keyboard navigation on the dots tablist\n// ─────────────────────────────────────────────\nfunction onDotsKeydown(e: KeyboardEvent) {\n if (slideCount.value === 0) return;\n switch (e.key) {\n case 'ArrowRight':\n e.preventDefault();\n next();\n break;\n case 'ArrowLeft':\n e.preventDefault();\n prev();\n break;\n case 'Home':\n e.preventDefault();\n goTo(0);\n break;\n case 'End':\n e.preventDefault();\n goTo(slideCount.value - 1);\n break;\n }\n}\n\n// ─────────────────────────────────────────────\n// Computed styles & classes\n// ─────────────────────────────────────────────\nconst isHorizontalEffect = computed(() => effectiveEffect.value === 'scrollx');\n\nconst trackStyle = computed(() => {\n if (!isHorizontalEffect.value) return undefined;\n const base = -(activeIndex.value * 100);\n const dragOffsetPct =\n dragState.value.active && dragState.value.width > 0\n ? (dragState.value.deltaX / dragState.value.width) * 100\n : 0;\n return {\n transform: `translate3d(${base + dragOffsetPct}%, 0, 0)`,\n transitionDuration: dragState.value.active\n ? '0ms'\n : `var(--b-carousel-speed)`,\n transitionTimingFunction: 'var(--b-carousel-easing)',\n };\n});\n\nconst rootStyle = computed<Record<string, string>>(() => ({\n '--b-carousel-speed': `${speed}ms`,\n '--b-carousel-easing': easing,\n '--b-carousel-autoplay-duration': `${autoplaySpeed}ms`,\n}));\n\nconst rootClasses = computed(() => [\n 'b-carousel',\n `b-carousel--effect-${effectiveEffect.value}`,\n `b-carousel--dots-${dotPlacement}`,\n {\n 'b-carousel--arrows': arrows,\n 'b-carousel--draggable': draggable,\n 'b-carousel--adaptive-height': adaptiveHeight,\n 'b-carousel--no-dots': !dots,\n 'b-carousel--dragging': dragState.value.active,\n },\n]);\n\nconst canPrev = computed(() => infinite || activeIndex.value > 0);\nconst canNext = computed(\n () => infinite || activeIndex.value < slideCount.value - 1,\n);\n</script>\n\n<template>\n <section\n :class=\"rootClasses\"\n :style=\"rootStyle\"\n role=\"region\"\n :aria-label=\"ariaLabel\"\n aria-roledescription=\"carousel\"\n @mouseenter=\"onMouseEnter\"\n @mouseleave=\"onMouseLeave\"\n >\n <!-- ── Viewport ── -->\n <div\n ref=\"viewportRef\"\n class=\"b-carousel__viewport\"\n @pointerdown=\"onPointerDown\"\n @pointermove=\"onPointerMove\"\n @pointerup=\"onPointerUp\"\n @pointercancel=\"onPointerUp\"\n >\n <SlideTrack\n :active-index=\"activeIndex\"\n :total=\"slideCount\"\n :slide-id=\"slideId\"\n :track-style=\"trackStyle\"\n >\n <slot />\n </SlideTrack>\n </div>\n\n <!-- ── Arrows ── -->\n <template v-if=\"arrows && slideCount > 1\">\n <button\n type=\"button\"\n class=\"b-carousel__arrow b-carousel__arrow--prev\"\n :disabled=\"!canPrev\"\n :aria-disabled=\"!canPrev || undefined\"\n aria-label=\"Previous slide\"\n @click=\"prev\"\n >\n <slot name=\"prevArrow\">\n <svg\n class=\"b-carousel__arrow-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M10.354 3.646a.5.5 0 0 1 0 .708L6.707 8l3.647 3.646a.5.5 0 1 1-.708.708l-4-4a.5.5 0 0 1 0-.708l4-4a.5.5 0 0 1 .708 0z\"\n />\n </svg>\n </slot>\n </button>\n <button\n type=\"button\"\n class=\"b-carousel__arrow b-carousel__arrow--next\"\n :disabled=\"!canNext\"\n :aria-disabled=\"!canNext || undefined\"\n aria-label=\"Next slide\"\n @click=\"next\"\n >\n <slot name=\"nextArrow\">\n <svg\n class=\"b-carousel__arrow-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M5.646 3.646a.5.5 0 0 1 .708 0l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L9.293 8 5.646 4.354a.5.5 0 0 1 0-.708z\"\n />\n </svg>\n </slot>\n </button>\n </template>\n\n <!-- ── Live region (announces active slide change) ── -->\n <div class=\"b-carousel__sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\n Slide {{ activeIndex + 1 }} of {{ slideCount }}\n </div>\n\n <!-- ── Dots ── -->\n <div\n v-if=\"dots && slideCount > 1\"\n class=\"b-carousel__dots\"\n :class=\"dotsClassName\"\n role=\"tablist\"\n :aria-label=\"`${ariaLabel} pagination`\"\n @keydown=\"onDotsKeydown\"\n >\n <div\n v-for=\"i in slideCount\"\n :key=\"i - 1\"\n class=\"b-carousel__dot-wrapper\"\n >\n <button\n type=\"button\"\n :id=\"dotId(i - 1)\"\n class=\"b-carousel__dot\"\n :class=\"{\n 'b-carousel__dot--active': i - 1 === activeIndex,\n 'b-carousel__dot--progress':\n showDotProgress && i - 1 === activeIndex && !isPaused,\n }\"\n role=\"tab\"\n :aria-selected=\"i - 1 === activeIndex\"\n :aria-controls=\"slideId(i - 1)\"\n :aria-label=\"`Go to slide ${i}`\"\n :tabindex=\"i - 1 === activeIndex ? 0 : -1\"\n @click=\"goTo(i - 1)\"\n >\n <slot name=\"dot\" :index=\"i - 1\" :active=\"i - 1 === activeIndex\">\n <span class=\"b-carousel__dot-inner\" aria-hidden=\"true\" />\n </slot>\n </button>\n </div>\n </div>\n </section>\n</template>\n\n<style>\n/* ─────────────────────────────────────────────\n BCarousel - Design tokens (scoped to .b-carousel)\n ───────────────────────────────────────────── */\n.b-carousel {\n /* ── AntD design tokens ── */\n --b-carousel-arrow-offset: 8px;\n --b-carousel-arrow-size: 16px;\n --b-carousel-dot-active-width: 24px;\n --b-carousel-dot-gap: 4px;\n --b-carousel-dot-height: 3px;\n --b-carousel-dot-offset: 12px;\n --b-carousel-dot-width: 16px;\n\n /* ── Local extras ── */\n --b-carousel-arrow-color: oklch(100% 0 0);\n --b-carousel-arrow-bg: oklch(20% 0.005 260 / 45%);\n --b-carousel-arrow-bg-hover: oklch(20% 0.005 260 / 70%);\n --b-carousel-arrow-disabled-opacity: 0.3;\n --b-carousel-dot-color: oklch(100% 0 0 / 60%);\n --b-carousel-dot-active-color: oklch(100% 0 0);\n --b-carousel-bg: oklch(20% 0.005 260);\n --b-carousel-radius: 4px;\n --b-carousel-focus-ring: 0 0 0 2px oklch(54.6% 0.245 262.881 / 50%);\n\n /* ── Motion (set by inline style; defaults below) ── */\n --b-carousel-speed: 500ms;\n --b-carousel-easing: linear;\n --b-carousel-autoplay-duration: 3000ms;\n\n position: relative;\n display: block;\n box-sizing: border-box;\n width: 100%;\n user-select: none;\n}\n\n/* ─────────────────────────────────────────────\n Viewport\n ───────────────────────────────────────────── */\n.b-carousel__viewport {\n position: relative;\n overflow: hidden;\n border-radius: var(--b-carousel-radius);\n background: var(--b-carousel-bg);\n touch-action: pan-y;\n}\n\n.b-carousel--draggable .b-carousel__viewport {\n cursor: grab;\n}\n\n.b-carousel--dragging .b-carousel__viewport {\n cursor: grabbing;\n}\n\n/* ─────────────────────────────────────────────\n Track + slides (scrollx effect)\n ───────────────────────────────────────────── */\n.b-carousel--effect-scrollx .b-carousel__track {\n display: flex;\n flex-wrap: nowrap;\n width: 100%;\n transition: transform var(--b-carousel-speed) var(--b-carousel-easing);\n will-change: transform;\n}\n\n.b-carousel--effect-scrollx .b-carousel__slide {\n flex: 0 0 100%;\n min-width: 0;\n width: 100%;\n}\n\n/* ── Fade effect: stack slides, only active is visible ── */\n.b-carousel--effect-fade .b-carousel__track {\n position: relative;\n display: block;\n width: 100%;\n}\n\n.b-carousel--effect-fade .b-carousel__slide {\n position: absolute;\n inset: 0;\n width: 100%;\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--b-carousel-speed) var(--b-carousel-easing);\n}\n\n.b-carousel--effect-fade .b-carousel__slide:first-child {\n /* gives the track its intrinsic height (sized to the first slide) */\n position: relative;\n}\n\n.b-carousel--effect-fade .b-carousel__slide--active {\n opacity: 1;\n pointer-events: auto;\n z-index: 1;\n}\n\n/* ── Adaptive height ── */\n.b-carousel--adaptive-height .b-carousel__viewport,\n.b-carousel--adaptive-height .b-carousel__track {\n height: auto;\n}\n\n/* ─────────────────────────────────────────────\n Arrows\n ───────────────────────────────────────────── */\n.b-carousel__arrow {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: calc(var(--b-carousel-arrow-size) + 16px);\n height: calc(var(--b-carousel-arrow-size) + 16px);\n padding: 0;\n border: none;\n background: var(--b-carousel-arrow-bg);\n color: var(--b-carousel-arrow-color);\n border-radius: 50%;\n cursor: pointer;\n z-index: 2;\n transition: background 200ms;\n}\n\n.b-carousel__arrow:hover:not(:disabled) {\n background: var(--b-carousel-arrow-bg-hover);\n}\n\n.b-carousel__arrow:disabled {\n cursor: not-allowed;\n opacity: var(--b-carousel-arrow-disabled-opacity);\n}\n\n.b-carousel__arrow:focus-visible {\n outline: none;\n box-shadow: var(--b-carousel-focus-ring);\n}\n\n.b-carousel__arrow--prev {\n left: var(--b-carousel-arrow-offset);\n}\n\n.b-carousel__arrow--next {\n right: var(--b-carousel-arrow-offset);\n}\n\n.b-carousel__arrow-icon {\n width: var(--b-carousel-arrow-size);\n height: var(--b-carousel-arrow-size);\n display: block;\n}\n\n/* ─────────────────────────────────────────────\n Dots\n ───────────────────────────────────────────── */\n.b-carousel__dots {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--b-carousel-dot-gap);\n list-style: none;\n margin: 0;\n padding: 0;\n z-index: 2;\n}\n\n.b-carousel--dots-bottom .b-carousel__dots {\n bottom: var(--b-carousel-dot-offset);\n left: 50%;\n transform: translateX(-50%);\n flex-direction: row;\n}\n\n.b-carousel--dots-top .b-carousel__dots {\n top: var(--b-carousel-dot-offset);\n left: 50%;\n transform: translateX(-50%);\n flex-direction: row;\n}\n\n.b-carousel--dots-start .b-carousel__dots {\n left: var(--b-carousel-dot-offset);\n top: 50%;\n transform: translateY(-50%);\n flex-direction: column;\n}\n\n.b-carousel--dots-end .b-carousel__dots {\n right: var(--b-carousel-dot-offset);\n top: 50%;\n transform: translateY(-50%);\n flex-direction: column;\n}\n\n.b-carousel__dot-wrapper {\n display: flex;\n margin: 0;\n padding: 0;\n}\n\n.b-carousel__dot {\n display: block;\n width: var(--b-carousel-dot-width);\n height: var(--b-carousel-dot-height);\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n position: relative;\n transition: width 200ms;\n}\n\n.b-carousel__dot-inner {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: calc(var(--b-carousel-dot-height) / 2);\n background: var(--b-carousel-dot-color);\n transition:\n background 200ms,\n opacity 200ms;\n pointer-events: none;\n}\n\n.b-carousel__dot:hover .b-carousel__dot-inner {\n background: var(--b-carousel-dot-active-color);\n opacity: 0.7;\n}\n\n.b-carousel__dot:focus-visible {\n outline: none;\n box-shadow: var(--b-carousel-focus-ring);\n border-radius: calc(var(--b-carousel-dot-height) / 2);\n}\n\n.b-carousel__dot--active {\n width: var(--b-carousel-dot-active-width);\n}\n\n.b-carousel__dot--active .b-carousel__dot-inner {\n background: var(--b-carousel-dot-active-color);\n opacity: 1;\n}\n\n/* Vertical dot orientation (start / end placements) */\n.b-carousel--dots-start .b-carousel__dot,\n.b-carousel--dots-end .b-carousel__dot {\n width: var(--b-carousel-dot-height);\n height: var(--b-carousel-dot-width);\n}\n\n.b-carousel--dots-start .b-carousel__dot--active,\n.b-carousel--dots-end .b-carousel__dot--active {\n width: var(--b-carousel-dot-height);\n height: var(--b-carousel-dot-active-width);\n}\n\n/* ── Autoplay progress bar (CSS-only) ── */\n.b-carousel__dot--progress .b-carousel__dot-inner {\n background: linear-gradient(\n to right,\n var(--b-carousel-dot-active-color) 0%,\n var(--b-carousel-dot-active-color) 100%\n );\n background-size: 0% 100%;\n background-repeat: no-repeat;\n background-color: var(--b-carousel-dot-color);\n animation: b-carousel-dot-progress var(--b-carousel-autoplay-duration) linear\n forwards;\n}\n\n@keyframes b-carousel-dot-progress {\n from {\n background-size: 0% 100%;\n }\n to {\n background-size: 100% 100%;\n }\n}\n\n/* ─────────────────────────────────────────────\n Screen-reader live region (visually hidden)\n ───────────────────────────────────────────── */\n.b-carousel__sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n/* ─────────────────────────────────────────────\n Dark mode\n ───────────────────────────────────────────── */\n[data-prefers-color='dark'] .b-carousel {\n --b-carousel-bg: oklch(15% 0.005 260);\n --b-carousel-arrow-bg: oklch(95% 0 0 / 12%);\n --b-carousel-arrow-bg-hover: oklch(95% 0 0 / 25%);\n --b-carousel-arrow-color: oklch(95% 0 0);\n --b-carousel-dot-color: oklch(85% 0 0 / 40%);\n --b-carousel-dot-active-color: oklch(95% 0 0);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-carousel {\n --b-carousel-bg: oklch(15% 0.005 260);\n --b-carousel-arrow-bg: oklch(95% 0 0 / 12%);\n --b-carousel-arrow-bg-hover: oklch(95% 0 0 / 25%);\n --b-carousel-arrow-color: oklch(95% 0 0);\n --b-carousel-dot-color: oklch(85% 0 0 / 40%);\n --b-carousel-dot-active-color: oklch(95% 0 0);\n }\n}\n\n/* ─────────────────────────────────────────────\n Reduced motion\n ───────────────────────────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n .b-carousel {\n --b-carousel-speed: 0ms;\n }\n .b-carousel__dot--progress .b-carousel__dot-inner {\n animation: none;\n }\n .b-carousel__arrow {\n transition: none;\n }\n}\n</style>\n"],"mappings":""}
@@ -1,7 +1,14 @@
1
- import e from "./design-system47.js";
2
- //#region src/components/BCheckbox/BCheckboxGroup.vue
3
- var t = e;
1
+ //#region src/components/BCascader/types.ts
2
+ var e = /* @__PURE__ */ function(e) {
3
+ return e.Click = "click", e.Hover = "hover", e;
4
+ }({}), t = /* @__PURE__ */ function(e) {
5
+ return e.BottomLeft = "bottomLeft", e.BottomRight = "bottomRight", e.TopLeft = "topLeft", e.TopRight = "topRight", e;
6
+ }({}), n = /* @__PURE__ */ function(e) {
7
+ return e.Small = "sm", e.Medium = "md", e.Large = "lg", e;
8
+ }({}), r = /* @__PURE__ */ function(e) {
9
+ return e.Error = "error", e.Warning = "warning", e;
10
+ }({});
4
11
  //#endregion
5
- export { t as default };
12
+ export { e as BCascaderExpandTrigger, t as BCascaderPlacement, n as BCascaderSize, r as BCascaderStatus };
6
13
 
7
14
  //# sourceMappingURL=design-system48.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"design-system48.js","names":[],"sources":["../src/components/BCheckbox/BCheckboxGroup.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, provide, reactive, toRefs } from 'vue';\nimport BCheckbox from './BCheckbox.vue';\nimport { B_CHECKBOX_GROUP_KEY, type BCheckboxOption } from './types';\n\n//#region Props\nconst {\n disabled = false,\n name = '',\n options = undefined,\n} = defineProps<{\n /** Disable all checkboxes in the group. */\n disabled?: boolean;\n /** The name property of all child input elements. */\n name?: string;\n /** Shorthand options to render checkboxes from an array. */\n options?: BCheckboxOption[] | string[] | number[];\n}>();\n\n/**\n * Array of currently selected values.\n */\nconst model = defineModel<Array<string | number>>({ default: () => [] });\n\nconst emit = defineEmits<{\n change: [checkedValues: Array<string | number>];\n}>();\n//#endregion\n\n//#region Normalize options\nconst normalizedOptions = computed<BCheckboxOption[]>(() => {\n if (!options) return [];\n return options.map((opt) => {\n if (typeof opt === 'string' || typeof opt === 'number') {\n return { label: String(opt), value: opt };\n }\n return opt;\n });\n});\n//#endregion\n\n//#region Group context\nfunction toggleValue(val: string | number) {\n const current = [...model.value];\n const index = current.indexOf(val);\n if (index === -1) {\n current.push(val);\n } else {\n current.splice(index, 1);\n }\n model.value = current;\n emit('change', current);\n}\n\nconst props = reactive({ disabled, name });\nconst { disabled: disabledRef, name: nameRef } = toRefs(props);\n\nprovide(B_CHECKBOX_GROUP_KEY, {\n modelValue: computed(() => model.value),\n disabled: disabledRef,\n name: nameRef,\n toggleValue,\n});\n//#endregion\n</script>\n\n<template>\n <div class=\"b-checkbox-group b:inline-flex b:flex-wrap b:gap-2\" role=\"group\">\n <template v-if=\"normalizedOptions.length > 0\">\n <BCheckbox\n v-for=\"opt in normalizedOptions\"\n :key=\"opt.value\"\n :value=\"opt.value\"\n :disabled=\"opt.disabled\"\n >\n {{ opt.label }}\n </BCheckbox>\n </template>\n <slot v-else />\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"design-system48.js","names":[],"sources":["../src/components/BCascader/types.ts"],"sourcesContent":["export enum BCascaderExpandTrigger {\n Click = 'click',\n Hover = 'hover',\n}\n\nexport enum BCascaderPlacement {\n BottomLeft = 'bottomLeft',\n BottomRight = 'bottomRight',\n TopLeft = 'topLeft',\n TopRight = 'topRight',\n}\n\nexport enum BCascaderSize {\n Small = 'sm',\n Medium = 'md',\n Large = 'lg',\n}\n\nexport enum BCascaderStatus {\n Error = 'error',\n Warning = 'warning',\n}\n\nexport interface BCascaderOption {\n /** The value used for identification. */\n value: string | number;\n /** The display label. */\n label: string;\n /** Whether this option is disabled. */\n disabled?: boolean;\n /** Child options for the next level. */\n children?: BCascaderOption[];\n /** Whether this is a leaf node (used with lazy loading). */\n isLeaf?: boolean;\n}\n\nexport interface BCascaderFieldNames {\n /** Custom field name for label. */\n label?: string;\n /** Custom field name for value. */\n value?: string;\n /** Custom field name for children. */\n children?: string;\n}\n\nexport type BCascaderValueType = (string | number)[];\n\nexport interface BCascaderShowSearchConfig {\n /** Custom filter function. */\n filter?: (inputValue: string, path: BCascaderOption[]) => boolean;\n /** Maximum number of search results. */\n limit?: number;\n /** Custom render function for search results. */\n render?: (inputValue: string, path: BCascaderOption[]) => string;\n}\n"],"mappings":";AAAA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,QAAA,SACA,EAAA,QAAA;KACD,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,aAAA,cACA,EAAA,cAAA,eACA,EAAA,UAAA,WACA,EAAA,WAAA;KACD,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,QAAA,MACA,EAAA,SAAA,MACA,EAAA,QAAA;KACD,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,QAAA,SACA,EAAA,UAAA;KACD"}