@7pmlabs/design-system 2.0.8 → 2.1.0

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 (377) hide show
  1. package/README.md +4 -4
  2. package/dist/design-system.css +1 -1
  3. package/dist/design-system.js +65 -59
  4. package/dist/design-system100.js +1 -1
  5. package/dist/design-system100.js.map +1 -1
  6. package/dist/design-system101.js +87 -53
  7. package/dist/design-system101.js.map +1 -1
  8. package/dist/design-system103.js +5 -13
  9. package/dist/design-system103.js.map +1 -1
  10. package/dist/design-system104.js +53 -108
  11. package/dist/design-system104.js.map +1 -1
  12. package/dist/{design-system102.js → design-system105.js} +1 -1
  13. package/dist/{design-system102.js.map → design-system105.js.map} +1 -1
  14. package/dist/design-system106.js +13 -6
  15. package/dist/design-system106.js.map +1 -1
  16. package/dist/design-system107.js +93 -190
  17. package/dist/design-system107.js.map +1 -1
  18. package/dist/design-system109.js +2 -2
  19. package/dist/design-system109.js.map +1 -1
  20. package/dist/design-system110.js +183 -484
  21. package/dist/design-system110.js.map +1 -1
  22. package/dist/design-system112.js +5 -4
  23. package/dist/design-system112.js.map +1 -1
  24. package/dist/design-system113.js +507 -7
  25. package/dist/design-system113.js.map +1 -1
  26. package/dist/design-system115.js +8 -0
  27. package/dist/design-system115.js.map +1 -0
  28. package/dist/design-system116.js +7 -6
  29. package/dist/design-system116.js.map +1 -1
  30. package/dist/design-system117.js +154 -169
  31. package/dist/design-system117.js.map +1 -1
  32. package/dist/design-system119.js +2 -2
  33. package/dist/design-system119.js.map +1 -1
  34. package/dist/design-system120.js +210 -149
  35. package/dist/design-system120.js.map +1 -1
  36. package/dist/design-system122.js +5 -4
  37. package/dist/design-system122.js.map +1 -1
  38. package/dist/design-system123.js +160 -9
  39. package/dist/design-system123.js.map +1 -1
  40. package/dist/design-system125.js +8 -0
  41. package/dist/design-system125.js.map +1 -0
  42. package/dist/design-system126.js +176 -6
  43. package/dist/design-system126.js.map +1 -1
  44. package/dist/design-system128.js +8 -0
  45. package/dist/design-system128.js.map +1 -0
  46. package/dist/design-system129.js +213 -5
  47. package/dist/design-system129.js.map +1 -1
  48. package/dist/design-system131.js +5 -90
  49. package/dist/design-system131.js.map +1 -1
  50. package/dist/design-system132.js +166 -0
  51. package/dist/design-system132.js.map +1 -0
  52. package/dist/design-system134.js +5 -42
  53. package/dist/design-system134.js.map +1 -1
  54. package/dist/design-system135.js +12 -0
  55. package/dist/design-system135.js.map +1 -0
  56. package/dist/design-system136.js +274 -5
  57. package/dist/design-system136.js.map +1 -1
  58. package/dist/design-system138.js +9 -0
  59. package/dist/{design-system124.js.map → design-system138.js.map} +1 -1
  60. package/dist/design-system139.js +16 -5
  61. package/dist/design-system139.js.map +1 -1
  62. package/dist/design-system141.js +8 -0
  63. package/dist/{design-system127.js.map → design-system141.js.map} +1 -1
  64. package/dist/design-system142.js +12 -5
  65. package/dist/design-system142.js.map +1 -1
  66. package/dist/design-system143.js +78 -83
  67. package/dist/design-system143.js.map +1 -1
  68. package/dist/design-system145.js +1 -1
  69. package/dist/design-system145.js.map +1 -1
  70. package/dist/design-system146.js +42 -9
  71. package/dist/design-system146.js.map +1 -1
  72. package/dist/design-system148.js +3 -2
  73. package/dist/design-system148.js.map +1 -1
  74. package/dist/design-system149.js +230 -18
  75. package/dist/design-system149.js.map +1 -1
  76. package/dist/design-system151.js +5 -158
  77. package/dist/design-system151.js.map +1 -1
  78. package/dist/{design-system140.js → design-system152.js} +6 -6
  79. package/dist/{design-system140.js.map → design-system152.js.map} +1 -1
  80. package/dist/design-system154.js +5 -307
  81. package/dist/design-system154.js.map +1 -1
  82. package/dist/design-system155.js +98 -0
  83. package/dist/design-system155.js.map +1 -0
  84. package/dist/design-system157.js +5 -240
  85. package/dist/design-system157.js.map +1 -1
  86. package/dist/design-system158.js +12 -0
  87. package/dist/design-system158.js.map +1 -0
  88. package/dist/design-system159.js +37 -5
  89. package/dist/design-system159.js.map +1 -1
  90. package/dist/design-system160.js +4 -189
  91. package/dist/design-system160.js.map +1 -1
  92. package/dist/design-system161.js +24 -0
  93. package/dist/{design-system150.js.map → design-system161.js.map} +1 -1
  94. package/dist/design-system162.js +2 -3
  95. package/dist/design-system162.js.map +1 -1
  96. package/dist/design-system163.js +158 -3
  97. package/dist/design-system163.js.map +1 -1
  98. package/dist/{design-system153.js → design-system165.js} +2 -2
  99. package/dist/{design-system153.js.map → design-system165.js.map} +1 -1
  100. package/dist/design-system166.js +307 -6
  101. package/dist/design-system166.js.map +1 -1
  102. package/dist/{design-system156.js → design-system168.js} +2 -2
  103. package/dist/{design-system156.js.map → design-system168.js.map} +1 -1
  104. package/dist/design-system169.js +167 -6
  105. package/dist/design-system169.js.map +1 -1
  106. package/dist/design-system171.js +8 -0
  107. package/dist/design-system171.js.map +1 -0
  108. package/dist/design-system172.js +240 -6
  109. package/dist/design-system172.js.map +1 -1
  110. package/dist/design-system174.js +8 -0
  111. package/dist/design-system174.js.map +1 -0
  112. package/dist/design-system175.js +189 -6
  113. package/dist/design-system175.js.map +1 -1
  114. package/dist/design-system177.js +8 -0
  115. package/dist/design-system177.js.map +1 -0
  116. package/dist/design-system178.js +3 -5
  117. package/dist/design-system178.js.map +1 -1
  118. package/dist/design-system179.js +58 -11
  119. package/dist/design-system179.js.map +1 -1
  120. package/dist/design-system181.js +9 -0
  121. package/dist/design-system181.js.map +1 -0
  122. package/dist/design-system182.js +56 -6
  123. package/dist/design-system182.js.map +1 -1
  124. package/dist/design-system184.js +9 -0
  125. package/dist/{design-system167.js.map → design-system184.js.map} +1 -1
  126. package/dist/design-system185.js +69 -5
  127. package/dist/design-system185.js.map +1 -1
  128. package/dist/design-system187.js +9 -0
  129. package/dist/{design-system170.js.map → design-system187.js.map} +1 -1
  130. package/dist/design-system188.js +182 -5
  131. package/dist/design-system188.js.map +1 -1
  132. package/dist/design-system190.js +9 -0
  133. package/dist/design-system190.js.map +1 -0
  134. package/dist/design-system191.js +115 -5
  135. package/dist/design-system191.js.map +1 -1
  136. package/dist/design-system193.js +8 -0
  137. package/dist/{design-system176.js.map → design-system193.js.map} +1 -1
  138. package/dist/design-system194.js +11 -5
  139. package/dist/design-system194.js.map +1 -1
  140. package/dist/design-system195.js +453 -24
  141. package/dist/design-system195.js.map +1 -1
  142. package/dist/design-system197.js +5 -4
  143. package/dist/design-system197.js.map +1 -1
  144. package/dist/design-system198.js +20 -16
  145. package/dist/design-system198.js.map +1 -1
  146. package/dist/design-system200.js +1 -1
  147. package/dist/design-system200.js.map +1 -1
  148. package/dist/design-system201.js +70 -314
  149. package/dist/design-system201.js.map +1 -1
  150. package/dist/design-system203.js +1 -1
  151. package/dist/design-system203.js.map +1 -1
  152. package/dist/design-system204.js +24 -89
  153. package/dist/design-system204.js.map +1 -1
  154. package/dist/design-system206.js +1 -1
  155. package/dist/design-system206.js.map +1 -1
  156. package/dist/design-system207.js +26 -17
  157. package/dist/design-system207.js.map +1 -1
  158. package/dist/design-system209.js +5 -3
  159. package/dist/design-system209.js.map +1 -1
  160. package/dist/design-system210.js +22 -408
  161. package/dist/design-system210.js.map +1 -1
  162. package/dist/design-system212.js +1 -1
  163. package/dist/design-system212.js.map +1 -1
  164. package/dist/design-system213.js +24 -52
  165. package/dist/design-system213.js.map +1 -1
  166. package/dist/design-system215.js +1 -1
  167. package/dist/design-system215.js.map +1 -1
  168. package/dist/design-system216.js +329 -85
  169. package/dist/design-system216.js.map +1 -1
  170. package/dist/design-system218.js +5 -108
  171. package/dist/design-system218.js.map +1 -1
  172. package/dist/design-system219.js +103 -0
  173. package/dist/design-system219.js.map +1 -0
  174. package/dist/design-system221.js +5 -106
  175. package/dist/design-system221.js.map +1 -1
  176. package/dist/design-system222.js +22 -0
  177. package/dist/{design-system208.js.map → design-system222.js.map} +1 -1
  178. package/dist/design-system223.js +4 -6
  179. package/dist/design-system223.js.map +1 -1
  180. package/dist/design-system224.js +3 -737
  181. package/dist/design-system224.js.map +1 -1
  182. package/dist/design-system225.js +422 -0
  183. package/dist/design-system225.js.map +1 -0
  184. package/dist/design-system227.js +5 -11
  185. package/dist/design-system227.js.map +1 -1
  186. package/dist/design-system228.js +51 -517
  187. package/dist/design-system228.js.map +1 -1
  188. package/dist/design-system230.js +1 -1
  189. package/dist/design-system230.js.map +1 -1
  190. package/dist/design-system231.js +88 -3
  191. package/dist/design-system231.js.map +1 -1
  192. package/dist/design-system232.js +4 -46
  193. package/dist/design-system232.js.map +1 -1
  194. package/dist/design-system233.js +108 -4
  195. package/dist/design-system233.js.map +1 -1
  196. package/dist/{design-system220.js → design-system235.js} +2 -2
  197. package/dist/{design-system220.js.map → design-system235.js.map} +1 -1
  198. package/dist/design-system236.js +106 -5
  199. package/dist/design-system236.js.map +1 -1
  200. package/dist/design-system238.js +9 -0
  201. package/dist/design-system238.js.map +1 -0
  202. package/dist/design-system239.js +737 -5
  203. package/dist/design-system239.js.map +1 -1
  204. package/dist/{design-system226.js → design-system241.js} +2 -2
  205. package/dist/{design-system226.js.map → design-system241.js.map} +1 -1
  206. package/dist/design-system242.js +3 -5
  207. package/dist/design-system242.js.map +1 -1
  208. package/dist/design-system243.js +42 -50
  209. package/dist/design-system243.js.map +1 -1
  210. package/dist/design-system244.js +1 -1
  211. package/dist/design-system244.js.map +1 -1
  212. package/dist/design-system245.js +254 -141
  213. package/dist/design-system245.js.map +1 -1
  214. package/dist/design-system247.js +1 -1
  215. package/dist/design-system247.js.map +1 -1
  216. package/dist/design-system248.js +119 -7
  217. package/dist/design-system248.js.map +1 -1
  218. package/dist/design-system250.js +8 -0
  219. package/dist/design-system250.js.map +1 -0
  220. package/dist/design-system251.js +172 -5
  221. package/dist/design-system251.js.map +1 -1
  222. package/dist/design-system253.js +8 -0
  223. package/dist/design-system253.js.map +1 -0
  224. package/dist/design-system254.js +11 -6
  225. package/dist/design-system254.js.map +1 -1
  226. package/dist/design-system255.js +525 -9
  227. package/dist/design-system255.js.map +1 -1
  228. package/dist/design-system257.js +8 -0
  229. package/dist/design-system257.js.map +1 -0
  230. package/dist/design-system258.js +112 -6
  231. package/dist/design-system258.js.map +1 -1
  232. package/dist/design-system260.js +5 -374
  233. package/dist/design-system260.js.map +1 -1
  234. package/dist/design-system261.js +57 -0
  235. package/dist/design-system261.js.map +1 -0
  236. package/dist/design-system262.js +4 -6
  237. package/dist/design-system262.js.map +1 -1
  238. package/dist/design-system263.js +173 -0
  239. package/dist/design-system263.js.map +1 -0
  240. package/dist/design-system265.js +8 -0
  241. package/dist/design-system265.js.map +1 -0
  242. package/dist/design-system266.js +10 -0
  243. package/dist/design-system266.js.map +1 -0
  244. package/dist/{design-system249.js → design-system267.js} +2 -2
  245. package/dist/{design-system249.js.map → design-system267.js.map} +1 -1
  246. package/dist/design-system269.js +8 -0
  247. package/dist/design-system269.js.map +1 -0
  248. package/dist/{design-system252.js → design-system270.js} +1 -1
  249. package/dist/{design-system252.js.map → design-system270.js.map} +1 -1
  250. package/dist/design-system272.js +9 -0
  251. package/dist/design-system272.js.map +1 -0
  252. package/dist/design-system273.js +12 -0
  253. package/dist/design-system273.js.map +1 -0
  254. package/dist/{design-system256.js → design-system274.js} +2 -2
  255. package/dist/{design-system256.js.map → design-system274.js.map} +1 -1
  256. package/dist/design-system276.js +9 -0
  257. package/dist/design-system276.js.map +1 -0
  258. package/dist/{design-system259.js → design-system277.js} +1 -1
  259. package/dist/{design-system259.js.map → design-system277.js.map} +1 -1
  260. package/dist/design-system278.js +377 -0
  261. package/dist/design-system278.js.map +1 -0
  262. package/dist/design-system280.js +9 -0
  263. package/dist/design-system280.js.map +1 -0
  264. package/dist/design-system69.js +182 -13
  265. package/dist/design-system69.js.map +1 -1
  266. package/dist/design-system71.js +8 -0
  267. package/dist/design-system71.js.map +1 -0
  268. package/dist/design-system72.js +13 -5
  269. package/dist/design-system72.js.map +1 -1
  270. package/dist/design-system73.js +677 -139
  271. package/dist/design-system73.js.map +1 -1
  272. package/dist/design-system75.js +1 -1
  273. package/dist/design-system75.js.map +1 -1
  274. package/dist/design-system76.js +152 -23
  275. package/dist/design-system76.js.map +1 -1
  276. package/dist/design-system78.js +5 -49
  277. package/dist/design-system78.js.map +1 -1
  278. package/dist/design-system79.js +32 -0
  279. package/dist/design-system79.js.map +1 -0
  280. package/dist/design-system80.js +2 -3
  281. package/dist/design-system80.js.map +1 -1
  282. package/dist/design-system81.js +38 -188
  283. package/dist/design-system81.js.map +1 -1
  284. package/dist/design-system83.js +1 -1
  285. package/dist/design-system83.js.map +1 -1
  286. package/dist/design-system84.js +199 -7
  287. package/dist/design-system84.js.map +1 -1
  288. package/dist/design-system86.js +8 -0
  289. package/dist/design-system86.js.map +1 -0
  290. package/dist/design-system87.js +7 -5
  291. package/dist/design-system87.js.map +1 -1
  292. package/dist/design-system88.js +264 -48
  293. package/dist/design-system88.js.map +1 -1
  294. package/dist/design-system90.js +1 -1
  295. package/dist/design-system90.js.map +1 -1
  296. package/dist/design-system91.js +57 -11
  297. package/dist/design-system91.js.map +1 -1
  298. package/dist/design-system93.js +8 -0
  299. package/dist/design-system93.js.map +1 -0
  300. package/dist/design-system94.js +11 -5
  301. package/dist/design-system94.js.map +1 -1
  302. package/dist/design-system95.js +92 -59
  303. package/dist/design-system95.js.map +1 -1
  304. package/dist/design-system97.js +1 -1
  305. package/dist/design-system97.js.map +1 -1
  306. package/dist/design-system98.js +56 -78
  307. package/dist/design-system98.js.map +1 -1
  308. package/dist/types/components/BContextMenu/BContextMenu.spec.d.ts +1 -0
  309. package/dist/types/components/BContextMenu/BContextMenu.vue.d.ts +42 -0
  310. package/dist/types/components/BContextMenu/index.d.ts +2 -0
  311. package/dist/types/components/BContextMenu/types.d.ts +23 -0
  312. package/dist/types/components/BInputTags/BInputTags.spec.d.ts +1 -0
  313. package/dist/types/components/BInputTags/BInputTags.vue.d.ts +54 -0
  314. package/dist/types/components/BInputTags/index.d.ts +1 -0
  315. package/dist/types/components/BLink/BLink.spec.d.ts +1 -0
  316. package/dist/types/components/BLink/BLink.vue.d.ts +100 -0
  317. package/dist/types/components/BLink/index.d.ts +1 -0
  318. package/dist/types/components/BListbox/BListbox.spec.d.ts +1 -0
  319. package/dist/types/components/BListbox/BListbox.vue.d.ts +52 -0
  320. package/dist/types/components/BListbox/index.d.ts +1 -0
  321. package/dist/types/components/BModal/BModal.spec.d.ts +1 -0
  322. package/dist/types/components/BPinInput/BPinInput.spec.d.ts +1 -0
  323. package/dist/types/components/BPinInput/BPinInput.vue.d.ts +43 -0
  324. package/dist/types/components/BPinInput/index.d.ts +1 -0
  325. package/dist/types/components/BProgress/BProgress.vue.d.ts +47 -2
  326. package/dist/types/components/BTextarea/BTextarea.spec.d.ts +1 -0
  327. package/dist/types/components/BTextarea/BTextarea.vue.d.ts +77 -0
  328. package/dist/types/components/BTextarea/index.d.ts +1 -0
  329. package/dist/types/components/index.d.ts +7 -1
  330. package/package.json +1 -1
  331. package/dist/design-system114.js +0 -212
  332. package/dist/design-system114.js.map +0 -1
  333. package/dist/design-system124.js +0 -277
  334. package/dist/design-system127.js +0 -19
  335. package/dist/design-system130.js +0 -15
  336. package/dist/design-system130.js.map +0 -1
  337. package/dist/design-system133.js +0 -8
  338. package/dist/design-system133.js.map +0 -1
  339. package/dist/design-system137.js +0 -236
  340. package/dist/design-system137.js.map +0 -1
  341. package/dist/design-system147.js +0 -40
  342. package/dist/design-system147.js.map +0 -1
  343. package/dist/design-system150.js +0 -7
  344. package/dist/design-system164.js +0 -61
  345. package/dist/design-system164.js.map +0 -1
  346. package/dist/design-system167.js +0 -59
  347. package/dist/design-system170.js +0 -72
  348. package/dist/design-system173.js +0 -185
  349. package/dist/design-system173.js.map +0 -1
  350. package/dist/design-system176.js +0 -118
  351. package/dist/design-system180.js +0 -465
  352. package/dist/design-system180.js.map +0 -1
  353. package/dist/design-system183.js +0 -38
  354. package/dist/design-system183.js.map +0 -1
  355. package/dist/design-system186.js +0 -91
  356. package/dist/design-system186.js.map +0 -1
  357. package/dist/design-system189.js +0 -38
  358. package/dist/design-system189.js.map +0 -1
  359. package/dist/design-system192.js +0 -31
  360. package/dist/design-system192.js.map +0 -1
  361. package/dist/design-system208.js +0 -7
  362. package/dist/design-system217.js +0 -7
  363. package/dist/design-system217.js.map +0 -1
  364. package/dist/design-system234.js +0 -286
  365. package/dist/design-system234.js.map +0 -1
  366. package/dist/design-system237.js +0 -122
  367. package/dist/design-system237.js.map +0 -1
  368. package/dist/design-system240.js +0 -115
  369. package/dist/design-system240.js.map +0 -1
  370. package/dist/design-system70.js +0 -699
  371. package/dist/design-system70.js.map +0 -1
  372. package/dist/design-system77.js +0 -7
  373. package/dist/design-system77.js.map +0 -1
  374. package/dist/design-system85.js +0 -276
  375. package/dist/design-system85.js.map +0 -1
  376. package/dist/design-system92.js +0 -102
  377. package/dist/design-system92.js.map +0 -1
@@ -1,7 +1,111 @@
1
- import e from "./design-system232.js";
2
- //#region src/components/BTabs/BTabPane.vue
3
- var t = e;
1
+ import { BCommonSize as e, BIconSize as t, BStepsDirection as n, BStepsLabelPlacement as r, BStepsStatus as i, BStepsType as a } from "./design-system3.js";
2
+ import o from "./design-system27.js";
3
+ import { Fragment as s, computed as c, createBlock as l, createCommentVNode as u, createElementBlock as d, createElementVNode as f, defineComponent as p, mergeModels as m, normalizeClass as h, normalizeStyle as g, openBlock as _, renderList as v, toDisplayString as y, toRefs as b, unref as x, useModel as S } from "vue";
4
+ //#region src/components/BSteps/BSteps.vue?vue&type=script&setup=true&lang.ts
5
+ var C = ["data-status"], w = [
6
+ "role",
7
+ "tabindex",
8
+ "aria-disabled",
9
+ "aria-current",
10
+ "onClick",
11
+ "onKeydown"
12
+ ], T = { class: "b:flex b:items-center b:gap-x-2" }, E = {
13
+ key: 0,
14
+ "aria-hidden": "true",
15
+ class: "b-steps__tail"
16
+ }, D = /* @__PURE__ */ p({
17
+ __name: "BSteps",
18
+ props: /* @__PURE__ */ m({
19
+ items: { default: () => [] },
20
+ status: { default: i.Process },
21
+ direction: { default: n.Horizontal },
22
+ size: { default: e.Medium },
23
+ labelPlacement: { default: r.Horizontal },
24
+ type: { default: a.Default }
25
+ }, {
26
+ modelValue: { default: 0 },
27
+ modelModifiers: {}
28
+ }),
29
+ emits: /* @__PURE__ */ m(["change"], ["update:modelValue"]),
30
+ setup(p, { emit: m }) {
31
+ let { items: D, status: O, direction: k, size: A, labelPlacement: j, type: M } = b(p), N = S(p, "modelValue"), P = m, F = c(() => A.value === e.Small ? e.Small : e.Medium), I = c(() => F.value === e.Small ? t.Small : t.Medium), L = c(() => ({
32
+ "--b-steps-icon-size": F.value === e.Small ? "1.5rem" : "2rem",
33
+ "--b-steps-gap": F.value === e.Small ? "0.5rem" : "0.75rem"
34
+ })), R = c(() => F.value === e.Small ? "b:text-sm" : "b:text-base"), z = c(() => F.value === e.Small ? "b:text-xs" : "b:text-sm"), B = c(() => M.value === a.Navigation), V = (e, t) => e.status ? e.status : t === N.value ? O.value || i.Process : t < N.value ? i.Finish : i.Wait, H = (e) => {
35
+ switch (e) {
36
+ case i.Finish:
37
+ case i.Process: return "var(--b-color-primary)";
38
+ case i.Error: return "var(--b-color-failure)";
39
+ case i.Wait:
40
+ default: return "var(--b-color-zinc-200)";
41
+ }
42
+ }, U = (e, t) => {
43
+ !B.value || e.disabled || (N.value = t, P("change", t));
44
+ }, W = (e, t, n) => {
45
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), U(t, n));
46
+ }, G = (e) => ({
47
+ "b:border-secondary b:bg-white b:text-secondary": e === i.Wait,
48
+ "b:border-primary b:bg-primary b:text-white": e === i.Process,
49
+ "b:border-primary b:bg-white b:text-primary": e === i.Finish,
50
+ "b:border-failure b:bg-white b:text-failure": e === i.Error
51
+ }), K = (e) => ({
52
+ "b:text-black-base": e === i.Process || e === i.Finish,
53
+ "b:text-failure": e === i.Error,
54
+ "b:text-black/65": e === i.Wait
55
+ }), q = (e) => ({
56
+ "b:text-black/65": e !== i.Error,
57
+ "b:text-failure": e === i.Error
58
+ });
59
+ return (t, c) => (_(), d("ol", {
60
+ class: h(["b-steps", [{
61
+ "b-steps--horizontal": x(k) === x(n).Horizontal,
62
+ "b-steps--vertical": x(k) === x(n).Vertical,
63
+ "b-steps--label-vertical": x(k) === x(n).Horizontal && x(j) === x(r).Vertical,
64
+ "b-steps--navigation": x(M) === x(a).Navigation,
65
+ "b-steps--inline": x(M) === x(a).Inline
66
+ }]]),
67
+ style: g(L.value)
68
+ }, [(_(!0), d(s, null, v(x(D), (t, a) => (_(), d("li", {
69
+ key: `${t.title}-${a}`,
70
+ class: h(["b-steps__item", [{ "b:opacity-50": t.disabled }, { "b-steps__item--clickable": B.value && !t.disabled }]]),
71
+ "data-status": V(t, a),
72
+ style: g({ "--b-steps-tail-color": H(V(t, a)) })
73
+ }, [f("div", {
74
+ class: "b-steps__item-inner",
75
+ role: B.value && !t.disabled ? "button" : void 0,
76
+ tabindex: B.value && !t.disabled ? 0 : void 0,
77
+ "aria-disabled": t.disabled ? "true" : void 0,
78
+ "aria-current": a === N.value ? "step" : void 0,
79
+ onClick: (e) => U(t, a),
80
+ onKeydown: (e) => W(e, t, a)
81
+ }, [f("div", { class: h(["b-steps__icon b:flex b:items-center b:justify-center b:rounded-full b:border", [G(V(t, a)), {
82
+ "b:h-6 b:w-6": F.value === x(e).Small,
83
+ "b:h-8 b:w-8": F.value === x(e).Medium
84
+ }]]) }, [t.icon ? (_(), l(o, {
85
+ key: 0,
86
+ icon: t.icon,
87
+ size: I.value
88
+ }, null, 8, ["icon", "size"])) : V(t, a) === x(i).Finish ? (_(), l(o, {
89
+ key: 1,
90
+ icon: "check",
91
+ size: I.value
92
+ }, null, 8, ["size"])) : V(t, a) === x(i).Error ? (_(), l(o, {
93
+ key: 2,
94
+ icon: "xmark",
95
+ size: I.value
96
+ }, null, 8, ["size"])) : (_(), d("span", {
97
+ key: 3,
98
+ class: h(R.value)
99
+ }, y(a + 1), 3))], 2), f("div", { class: h(["b-steps__content b:flex b:flex-col b:gap-y-1", [{ "b:items-center b:text-center": x(k) === x(n).Horizontal && x(j) === x(r).Vertical }]]) }, [f("div", T, [f("span", { class: h(["b:font-medium", [R.value, K(V(t, a))]]) }, y(t.title), 3), t.subTitle ? (_(), d("span", {
100
+ key: 0,
101
+ class: h(["b:text-xs b:text-black/65", K(V(t, a))])
102
+ }, y(t.subTitle), 3)) : u("", !0)]), t.description ? (_(), d("p", {
103
+ key: 0,
104
+ class: h(["b:leading-snug", [z.value, q(V(t, a))]])
105
+ }, y(t.description), 3)) : u("", !0)], 2)], 40, w), x(k) === x(n).Horizontal && a < x(D).length - 1 ? (_(), d("span", E)) : u("", !0)], 14, C))), 128))], 6));
106
+ }
107
+ });
4
108
  //#endregion
5
- export { t as default };
109
+ export { D as default };
6
110
 
7
111
  //# sourceMappingURL=design-system233.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"design-system233.js","names":[],"sources":["../src/components/BTabs/BTabPane.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { VNode } from 'vue';\nimport { inject, onBeforeUnmount, onMounted, useSlots, watch } from 'vue';\n\nimport { BTabsContextKey } from './types';\n\n// ─────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────\nconst props = defineProps<{\n /** Unique key identifying this tab pane. */\n tabKey: string;\n /** Tab header label text. Use the `tab` slot for rich labels. */\n tab?: string;\n /** Whether this tab is disabled. @default false */\n disabled?: boolean;\n /** Show close button in editable-card mode. @default true */\n closable?: boolean;\n /** Destroy content when tab is hidden. @default false */\n destroyOnHidden?: boolean;\n /** Force render content even when inactive. @default false */\n forceRender?: boolean;\n /** Keep component state alive when switching away. Overrides global setting. */\n keepAlive?: boolean;\n}>();\n\n// ─────────────────────────────────────────────\n// Slots\n// ─────────────────────────────────────────────\ndefineSlots<{\n /** Tab pane content. */\n default?: () => unknown;\n /** Custom tab label content. */\n tab?: () => unknown;\n}>();\n\nconst slots = useSlots();\n\n// ─────────────────────────────────────────────\n// Inject parent context\n// ─────────────────────────────────────────────\nconst tabsContext = inject(BTabsContextKey, null);\n\n// ─────────────────────────────────────────────\n// Registration helpers\n// ─────────────────────────────────────────────\nfunction buildRegistration() {\n return {\n key: props.tabKey,\n label: props.tab,\n disabled: props.disabled,\n closable: props.closable,\n destroyOnHidden: props.destroyOnHidden,\n forceRender: props.forceRender,\n keepAlive: props.keepAlive,\n renderContent: () => (slots.default?.() ?? []) as VNode[],\n renderLabel: slots.tab ? () => slots.tab!() as VNode[] : undefined,\n };\n}\n\nonMounted(() => {\n tabsContext?.register(buildRegistration());\n});\n\nonBeforeUnmount(() => {\n tabsContext?.unregister(props.tabKey);\n});\n\nwatch(\n () => [\n props.tab,\n props.disabled,\n props.closable,\n props.destroyOnHidden,\n props.forceRender,\n props.keepAlive,\n ],\n () => {\n tabsContext?.update(props.tabKey, buildRegistration());\n },\n);\n</script>\n\n<template>\n <!-- BTabPane is a registration-only component. All rendering is handled by BTabs. -->\n <slot v-if=\"false\" />\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"design-system233.js","names":[],"sources":["../src/components/BSteps/BSteps.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport BIcon from '@/components/BIcon/BIcon.vue';\nimport {\n BCommonSize,\n BIconSize,\n BStepsDirection,\n BStepsLabelPlacement,\n BStepsStatus,\n BStepsType,\n type BStepItem,\n} from '@/types.ts';\nimport { computed, toRefs } from 'vue';\n\nexport interface BStepsProps {\n /**\n * The step items to render.\n */\n items?: BStepItem[];\n /**\n * Status applied to the current step if not overridden by the item.\n */\n status?: `${BStepsStatus}`;\n /**\n * Layout direction.\n */\n direction?: `${BStepsDirection}`;\n /**\n * Size of the step icons and text.\n */\n size?: `${BCommonSize}`;\n /**\n * Placement of labels for horizontal steps.\n */\n labelPlacement?: `${BStepsLabelPlacement}`;\n /**\n * Step type styling.\n */\n type?: `${BStepsType}`;\n}\n\nconst props = withDefaults(defineProps<BStepsProps>(), {\n items: () => [],\n status: BStepsStatus.Process,\n direction: BStepsDirection.Horizontal,\n size: BCommonSize.Medium,\n labelPlacement: BStepsLabelPlacement.Horizontal,\n type: BStepsType.Default,\n});\nconst { items, status, direction, size, labelPlacement, type } = toRefs(props);\nconst model = defineModel<number>({ default: 0 });\n\nconst emit = defineEmits<{\n /**\n * Emitted when the current step changes via user interaction.\n */\n change: [value: number];\n}>();\n\nconst normalizedSize = computed(() =>\n size.value === BCommonSize.Small ? BCommonSize.Small : BCommonSize.Medium,\n);\nconst iconSize = computed(() =>\n normalizedSize.value === BCommonSize.Small ? BIconSize.Small : BIconSize.Medium,\n);\n\nconst rootStyle = computed(() => ({\n '--b-steps-icon-size': normalizedSize.value === BCommonSize.Small ? '1.5rem' : '2rem',\n '--b-steps-gap': normalizedSize.value === BCommonSize.Small ? '0.5rem' : '0.75rem',\n}));\n\nconst titleSizeClass = computed(() =>\n normalizedSize.value === BCommonSize.Small ? 'b:text-sm' : 'b:text-base',\n);\nconst descriptionSizeClass = computed(() =>\n normalizedSize.value === BCommonSize.Small ? 'b:text-xs' : 'b:text-sm',\n);\n\nconst isClickable = computed(() => type.value === BStepsType.Navigation);\n\nconst getStepStatus = (item: BStepItem, index: number) => {\n if (item.status) {\n return item.status;\n }\n if (index === model.value) {\n return status.value || BStepsStatus.Process;\n }\n if (index < model.value) {\n return BStepsStatus.Finish;\n }\n return BStepsStatus.Wait;\n};\n\nconst getTailColor = (status: `${BStepsStatus}`) => {\n switch (status) {\n case BStepsStatus.Finish:\n case BStepsStatus.Process:\n return 'var(--b-color-primary)';\n case BStepsStatus.Error:\n return 'var(--b-color-failure)';\n case BStepsStatus.Wait:\n default:\n return 'var(--b-color-zinc-200)';\n }\n};\n\nconst onStepClick = (item: BStepItem, index: number) => {\n if (!isClickable.value || item.disabled) {\n return;\n }\n model.value = index;\n emit('change', index);\n};\n\nconst onStepKeydown = (event: KeyboardEvent, item: BStepItem, index: number) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onStepClick(item, index);\n }\n};\n\nconst iconClass = (status: `${BStepsStatus}`) => ({\n 'b:border-secondary b:bg-white b:text-secondary': status === BStepsStatus.Wait,\n 'b:border-primary b:bg-primary b:text-white': status === BStepsStatus.Process,\n 'b:border-primary b:bg-white b:text-primary': status === BStepsStatus.Finish,\n 'b:border-failure b:bg-white b:text-failure': status === BStepsStatus.Error,\n});\nconst titleClass = (status: `${BStepsStatus}`) => ({\n 'b:text-black-base': status === BStepsStatus.Process || status === BStepsStatus.Finish,\n 'b:text-failure': status === BStepsStatus.Error,\n 'b:text-black/65': status === BStepsStatus.Wait,\n});\nconst descriptionClass = (status: `${BStepsStatus}`) => ({\n 'b:text-black/65': status !== BStepsStatus.Error,\n 'b:text-failure': status === BStepsStatus.Error,\n});\n</script>\n\n<template>\n <ol\n class=\"b-steps\"\n :class=\"[\n {\n 'b-steps--horizontal': direction === BStepsDirection.Horizontal,\n 'b-steps--vertical': direction === BStepsDirection.Vertical,\n 'b-steps--label-vertical':\n direction === BStepsDirection.Horizontal &&\n labelPlacement === BStepsLabelPlacement.Vertical,\n 'b-steps--navigation': type === BStepsType.Navigation,\n 'b-steps--inline': type === BStepsType.Inline,\n },\n ]\"\n :style=\"rootStyle\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"`${item.title}-${index}`\"\n class=\"b-steps__item\"\n :class=\"[\n { 'b:opacity-50': item.disabled },\n { 'b-steps__item--clickable': isClickable && !item.disabled },\n ]\"\n :data-status=\"getStepStatus(item, index)\"\n :style=\"{ '--b-steps-tail-color': getTailColor(getStepStatus(item, index)) }\"\n >\n <div\n class=\"b-steps__item-inner\"\n :role=\"isClickable && !item.disabled ? 'button' : undefined\"\n :tabindex=\"isClickable && !item.disabled ? 0 : undefined\"\n :aria-disabled=\"item.disabled ? 'true' : undefined\"\n :aria-current=\"index === model ? 'step' : undefined\"\n @click=\"onStepClick(item, index)\"\n @keydown=\"onStepKeydown($event, item, index)\"\n >\n <div\n class=\"b-steps__icon b:flex b:items-center b:justify-center b:rounded-full b:border\"\n :class=\"[\n iconClass(getStepStatus(item, index)),\n {\n 'b:h-6 b:w-6': normalizedSize === BCommonSize.Small,\n 'b:h-8 b:w-8': normalizedSize === BCommonSize.Medium,\n },\n ]\"\n >\n <template v-if=\"item.icon\">\n <BIcon :icon=\"item.icon\" :size=\"iconSize\" />\n </template>\n <template v-else-if=\"getStepStatus(item, index) === BStepsStatus.Finish\">\n <BIcon icon=\"check\" :size=\"iconSize\" />\n </template>\n <template v-else-if=\"getStepStatus(item, index) === BStepsStatus.Error\">\n <BIcon icon=\"xmark\" :size=\"iconSize\" />\n </template>\n <template v-else>\n <span :class=\"titleSizeClass\">{{ index + 1 }}</span>\n </template>\n </div>\n\n <div\n class=\"b-steps__content b:flex b:flex-col b:gap-y-1\"\n :class=\"[\n {\n 'b:items-center b:text-center':\n direction === BStepsDirection.Horizontal &&\n labelPlacement === BStepsLabelPlacement.Vertical,\n },\n ]\"\n >\n <div class=\"b:flex b:items-center b:gap-x-2\">\n <span\n class=\"b:font-medium\"\n :class=\"[titleSizeClass, titleClass(getStepStatus(item, index))]\"\n >\n {{ item.title }}\n </span>\n <span\n v-if=\"item.subTitle\"\n class=\"b:text-xs b:text-black/65\"\n :class=\"titleClass(getStepStatus(item, index))\"\n >\n {{ item.subTitle }}\n </span>\n </div>\n <p\n v-if=\"item.description\"\n class=\"b:leading-snug\"\n :class=\"[descriptionSizeClass, descriptionClass(getStepStatus(item, index))]\"\n >\n {{ item.description }}\n </p>\n </div>\n </div>\n <span\n v-if=\"direction === BStepsDirection.Horizontal && index < items.length - 1\"\n aria-hidden=\"true\"\n class=\"b-steps__tail\"\n />\n </li>\n </ol>\n</template>\n\n<style scoped>\n.b-steps {\n display: flex;\n gap: var(--b-steps-gap);\n}\n\n.b-steps--vertical {\n flex-direction: column;\n}\n\n.b-steps__item {\n position: relative;\n flex: 1;\n min-width: 0;\n}\n\n.b-steps__item-inner {\n display: flex;\n align-items: flex-start;\n gap: var(--b-steps-gap);\n flex: 0 1 auto;\n min-width: 0;\n}\n\n.b-steps__icon {\n flex-shrink: 0;\n}\n\n.b-steps__content {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.b-steps--label-vertical .b-steps__item-inner {\n flex-direction: column;\n align-items: center;\n}\n\n.b-steps--inline .b-steps__item-inner {\n align-items: center;\n}\n\n.b-steps--inline .b-steps__content {\n flex-direction: row;\n align-items: center;\n gap: var(--b-steps-gap);\n}\n\n.b-steps--inline .b-steps__content p {\n display: none;\n}\n\n.b-steps__item--clickable .b-steps__item-inner {\n cursor: pointer;\n}\n\n.b-steps--horizontal .b-steps__item {\n display: flex;\n align-items: flex-start;\n gap: var(--b-steps-gap);\n}\n\n.b-steps--vertical .b-steps__item {\n padding-bottom: var(--b-steps-gap);\n}\n\n.b-steps--vertical .b-steps__item::after {\n content: '';\n position: absolute;\n top: calc(var(--b-steps-icon-size) + var(--b-steps-gap));\n left: calc(var(--b-steps-icon-size) / 2);\n bottom: 0;\n width: 1px;\n background-color: var(--b-steps-tail-color);\n}\n\n.b-steps--vertical .b-steps__item:last-child::after {\n display: none;\n}\n\n.b-steps__tail {\n flex: 1 1 0;\n min-width: 1.5rem;\n height: 1px;\n margin-top: calc(var(--b-steps-icon-size) / 2);\n background-color: var(--b-steps-tail-color);\n}\n\n.b-steps--navigation .b-steps__item--clickable .b-steps__content {\n transition: color 0.2s ease;\n}\n\n.b-steps--navigation .b-steps__item--clickable:hover .b-steps__content {\n color: var(--b-color-primary);\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgDA,IAAM,EAAE,UAAO,WAAQ,cAAW,SAAM,mBAAgB,YAAS,EARnD,EAQgE,EACxE,IAAQ,EAAmB,GAAA,aAAgB,EAE3C,IAAO,GAOP,IAAiB,QACrB,EAAK,UAAU,EAAY,QAAQ,EAAY,QAAQ,EAAY,OACpE,EACK,IAAW,QACf,EAAe,UAAU,EAAY,QAAQ,EAAU,QAAQ,EAAU,OAC1E,EAEK,IAAY,SAAgB;GAChC,uBAAuB,EAAe,UAAU,EAAY,QAAQ,WAAW;GAC/E,iBAAiB,EAAe,UAAU,EAAY,QAAQ,WAAW;GAC1E,EAAE,EAEG,IAAiB,QACrB,EAAe,UAAU,EAAY,QAAQ,cAAc,cAC5D,EACK,IAAuB,QAC3B,EAAe,UAAU,EAAY,QAAQ,cAAc,YAC5D,EAEK,IAAc,QAAe,EAAK,UAAU,EAAW,WAAW,EAElE,KAAiB,GAAiB,MAClC,EAAK,SACA,EAAK,SAEV,MAAU,EAAM,QACX,EAAO,SAAS,EAAa,UAElC,IAAQ,EAAM,QACT,EAAa,SAEf,EAAa,MAGhB,KAAgB,MAA8B;AAClD,WAAQ,GAAR;IACE,KAAK,EAAa;IAClB,KAAK,EAAa,QAChB,QAAO;IACT,KAAK,EAAa,MAChB,QAAO;IACT,KAAK,EAAa;IAClB,QACE,QAAO;;KAIP,KAAe,GAAiB,MAAkB;AAClD,IAAC,EAAY,SAAS,EAAK,aAG/B,EAAM,QAAQ,GACd,EAAK,UAAU,EAAM;KAGjB,KAAiB,GAAsB,GAAiB,MAAkB;AAC9E,IAAI,EAAM,QAAQ,WAAW,EAAM,QAAQ,SACzC,EAAM,gBAAgB,EACtB,EAAY,GAAM,EAAM;KAItB,KAAa,OAA+B;GAChD,kDAAkD,MAAW,EAAa;GAC1E,8CAA8C,MAAW,EAAa;GACtE,8CAA8C,MAAW,EAAa;GACtE,8CAA8C,MAAW,EAAa;GACvE,GACK,KAAc,OAA+B;GACjD,qBAAqB,MAAW,EAAa,WAAW,MAAW,EAAa;GAChF,kBAAkB,MAAW,EAAa;GAC1C,mBAAmB,MAAW,EAAa;GAC5C,GACK,KAAoB,OAA+B;GACvD,mBAAmB,MAAW,EAAa;GAC3C,kBAAkB,MAAW,EAAa;GAC3C;yBAIC,EAmGK,MAAA;GAlGH,OAAK,EAAA,CAAC,WAAS,CAAA;2BACkC,EAAA,EAAS,KAAK,EAAA,EAAe,CAAC;yBAAyC,EAAA,EAAS,KAAK,EAAA,EAAe,CAAC;+BAAuD,EAAA,EAAS,KAAK,EAAA,EAAe,CAAC,cAAwB,EAAA,EAAc,KAAK,EAAA,EAAoB,CAAC;2BAAyC,EAAA,EAAI,KAAK,EAAA,EAAU,CAAC;uBAAuC,EAAA,EAAI,KAAK,EAAA,EAAU,CAAC;;GAWla,OAAK,EAAE,EAAA,MAAS;cAEjB,EAmFK,GAAA,MAAA,EAlFqB,EAAA,EAAK,GAArB,GAAM,YADhB,EAmFK,MAAA;GAjFF,KAAG,GAAK,EAAK,MAAK,GAAI;GACvB,OAAK,EAAA,CAAC,iBAAe,CAAA,EAAA,gBACe,EAAK,UAAQ,EAAA,EAAA,4BAA0C,EAAA,SAAW,CAAK,EAAK,UAAQ,CAAA,CAAA,CAAA;GAIvH,eAAa,EAAc,GAAM,EAAK;GACtC,OAAK,EAAA,EAAA,wBAA4B,EAAa,EAAc,GAAM,EAAK,CAAA,EAAA,CAAA;MAExE,EAkEM,OAAA;GAjEJ,OAAM;GACL,MAAM,EAAA,SAAW,CAAK,EAAK,WAAQ,WAAc,KAAA;GACjD,UAAU,EAAA,SAAW,CAAK,EAAK,WAAQ,IAAO,KAAA;GAC9C,iBAAe,EAAK,WAAQ,SAAY,KAAA;GACxC,gBAAc,MAAU,EAAA,QAAK,SAAY,KAAA;GACzC,UAAK,MAAE,EAAY,GAAM,EAAK;GAC9B,YAAO,MAAE,EAAc,GAAQ,GAAM,EAAK;MAE3C,EAsBM,OAAA,EArBJ,OAAK,EAAA,CAAC,gFAA8E,CAC9D,EAAU,EAAc,GAAM,EAAK,CAAA,EAAA;kBAA+C,EAAA,UAAmB,EAAA,EAAW,CAAC;kBAAoC,EAAA,UAAmB,EAAA,EAAW,CAAC;WAQ1L,EAAK,QAAA,GAAA,EACnB,EAA4C,GAAA;;GAApC,MAAM,EAAK;GAAO,MAAM,EAAA;mCAEb,EAAc,GAAM,EAAK,KAAM,EAAA,EAAY,CAAC,UAAA,GAAA,EAC/D,EAAuC,GAAA;;GAAhC,MAAK;GAAS,MAAM,EAAA;2BAER,EAAc,GAAM,EAAK,KAAM,EAAA,EAAY,CAAC,SAAA,GAAA,EAC/D,EAAuC,GAAA;;GAAhC,MAAK;GAAS,MAAM,EAAA;iCAG3B,EAAoD,QAAA;;GAA7C,OAAK,EAAE,EAAA,MAAc;OAAK,IAAK,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAI1C,EAgCM,OAAA,EA/BJ,OAAK,EAAA,CAAC,gDAA8C,CAAA,EAAA,gCACkC,EAAA,EAAS,KAAK,EAAA,EAAe,CAAC,cAA8B,EAAA,EAAc,KAAK,EAAA,EAAoB,CAAC,UAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAQ1L,EAcM,OAdN,GAcM,CAbJ,EAKO,QAAA,EAJL,OAAK,EAAA,CAAC,iBAAe,CACZ,EAAA,OAAgB,EAAW,EAAc,GAAM,EAAK,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,EAE1D,EAAK,MAAK,EAAA,EAAA,EAGP,EAAK,YAAA,GAAA,EADb,EAMO,QAAA;;GAJL,OAAK,EAAA,CAAC,6BACE,EAAW,EAAc,GAAM,EAAK,CAAA,CAAA,CAAA;OAEzC,EAAK,SAAQ,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA,CAAA,CAAA,EAIZ,EAAK,eAAA,GAAA,EADb,EAMI,KAAA;;GAJF,OAAK,EAAA,CAAC,kBAAgB,CACb,EAAA,OAAsB,EAAiB,EAAc,GAAM,EAAK,CAAA,CAAA,CAAA,CAAA;OAEtE,EAAK,YAAW,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA,CAAA,EAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAKjB,EAAA,EAAS,KAAK,EAAA,EAAe,CAAC,cAAc,IAAQ,EAAA,EAAK,CAAC,SAAM,KAAA,GAAA,EADxE,EAIE,QAJF,EAIE,IAAA,EAAA,IAAA,GAAA,CAAA,EAAA,IAAA,EAAA"}
@@ -1,9 +1,9 @@
1
1
  import e from "./design-system14.js";
2
- import t from "./design-system218.js";
2
+ import t from "./design-system233.js";
3
3
  /* empty css */
4
4
  //#region src/components/BSteps/BSteps.vue
5
5
  var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-75d0dd09"]]);
6
6
  //#endregion
7
7
  export { n as default };
8
8
 
9
- //# sourceMappingURL=design-system220.js.map
9
+ //# sourceMappingURL=design-system235.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"design-system220.js","names":[],"sources":["../src/components/BSteps/BSteps.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport BIcon from '@/components/BIcon/BIcon.vue';\nimport {\n BCommonSize,\n BIconSize,\n BStepsDirection,\n BStepsLabelPlacement,\n BStepsStatus,\n BStepsType,\n type BStepItem,\n} from '@/types.ts';\nimport { computed, toRefs } from 'vue';\n\nexport interface BStepsProps {\n /**\n * The step items to render.\n */\n items?: BStepItem[];\n /**\n * Status applied to the current step if not overridden by the item.\n */\n status?: `${BStepsStatus}`;\n /**\n * Layout direction.\n */\n direction?: `${BStepsDirection}`;\n /**\n * Size of the step icons and text.\n */\n size?: `${BCommonSize}`;\n /**\n * Placement of labels for horizontal steps.\n */\n labelPlacement?: `${BStepsLabelPlacement}`;\n /**\n * Step type styling.\n */\n type?: `${BStepsType}`;\n}\n\nconst props = withDefaults(defineProps<BStepsProps>(), {\n items: () => [],\n status: BStepsStatus.Process,\n direction: BStepsDirection.Horizontal,\n size: BCommonSize.Medium,\n labelPlacement: BStepsLabelPlacement.Horizontal,\n type: BStepsType.Default,\n});\nconst { items, status, direction, size, labelPlacement, type } = toRefs(props);\nconst model = defineModel<number>({ default: 0 });\n\nconst emit = defineEmits<{\n /**\n * Emitted when the current step changes via user interaction.\n */\n change: [value: number];\n}>();\n\nconst normalizedSize = computed(() =>\n size.value === BCommonSize.Small ? BCommonSize.Small : BCommonSize.Medium,\n);\nconst iconSize = computed(() =>\n normalizedSize.value === BCommonSize.Small ? BIconSize.Small : BIconSize.Medium,\n);\n\nconst rootStyle = computed(() => ({\n '--b-steps-icon-size': normalizedSize.value === BCommonSize.Small ? '1.5rem' : '2rem',\n '--b-steps-gap': normalizedSize.value === BCommonSize.Small ? '0.5rem' : '0.75rem',\n}));\n\nconst titleSizeClass = computed(() =>\n normalizedSize.value === BCommonSize.Small ? 'b:text-sm' : 'b:text-base',\n);\nconst descriptionSizeClass = computed(() =>\n normalizedSize.value === BCommonSize.Small ? 'b:text-xs' : 'b:text-sm',\n);\n\nconst isClickable = computed(() => type.value === BStepsType.Navigation);\n\nconst getStepStatus = (item: BStepItem, index: number) => {\n if (item.status) {\n return item.status;\n }\n if (index === model.value) {\n return status.value || BStepsStatus.Process;\n }\n if (index < model.value) {\n return BStepsStatus.Finish;\n }\n return BStepsStatus.Wait;\n};\n\nconst getTailColor = (status: `${BStepsStatus}`) => {\n switch (status) {\n case BStepsStatus.Finish:\n case BStepsStatus.Process:\n return 'var(--b-color-primary)';\n case BStepsStatus.Error:\n return 'var(--b-color-failure)';\n case BStepsStatus.Wait:\n default:\n return 'var(--b-color-zinc-200)';\n }\n};\n\nconst onStepClick = (item: BStepItem, index: number) => {\n if (!isClickable.value || item.disabled) {\n return;\n }\n model.value = index;\n emit('change', index);\n};\n\nconst onStepKeydown = (event: KeyboardEvent, item: BStepItem, index: number) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onStepClick(item, index);\n }\n};\n\nconst iconClass = (status: `${BStepsStatus}`) => ({\n 'b:border-secondary b:bg-white b:text-secondary': status === BStepsStatus.Wait,\n 'b:border-primary b:bg-primary b:text-white': status === BStepsStatus.Process,\n 'b:border-primary b:bg-white b:text-primary': status === BStepsStatus.Finish,\n 'b:border-failure b:bg-white b:text-failure': status === BStepsStatus.Error,\n});\nconst titleClass = (status: `${BStepsStatus}`) => ({\n 'b:text-black-base': status === BStepsStatus.Process || status === BStepsStatus.Finish,\n 'b:text-failure': status === BStepsStatus.Error,\n 'b:text-black/65': status === BStepsStatus.Wait,\n});\nconst descriptionClass = (status: `${BStepsStatus}`) => ({\n 'b:text-black/65': status !== BStepsStatus.Error,\n 'b:text-failure': status === BStepsStatus.Error,\n});\n</script>\n\n<template>\n <ol\n class=\"b-steps\"\n :class=\"[\n {\n 'b-steps--horizontal': direction === BStepsDirection.Horizontal,\n 'b-steps--vertical': direction === BStepsDirection.Vertical,\n 'b-steps--label-vertical':\n direction === BStepsDirection.Horizontal &&\n labelPlacement === BStepsLabelPlacement.Vertical,\n 'b-steps--navigation': type === BStepsType.Navigation,\n 'b-steps--inline': type === BStepsType.Inline,\n },\n ]\"\n :style=\"rootStyle\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"`${item.title}-${index}`\"\n class=\"b-steps__item\"\n :class=\"[\n { 'b:opacity-50': item.disabled },\n { 'b-steps__item--clickable': isClickable && !item.disabled },\n ]\"\n :data-status=\"getStepStatus(item, index)\"\n :style=\"{ '--b-steps-tail-color': getTailColor(getStepStatus(item, index)) }\"\n >\n <div\n class=\"b-steps__item-inner\"\n :role=\"isClickable && !item.disabled ? 'button' : undefined\"\n :tabindex=\"isClickable && !item.disabled ? 0 : undefined\"\n :aria-disabled=\"item.disabled ? 'true' : undefined\"\n :aria-current=\"index === model ? 'step' : undefined\"\n @click=\"onStepClick(item, index)\"\n @keydown=\"onStepKeydown($event, item, index)\"\n >\n <div\n class=\"b-steps__icon b:flex b:items-center b:justify-center b:rounded-full b:border\"\n :class=\"[\n iconClass(getStepStatus(item, index)),\n {\n 'b:h-6 b:w-6': normalizedSize === BCommonSize.Small,\n 'b:h-8 b:w-8': normalizedSize === BCommonSize.Medium,\n },\n ]\"\n >\n <template v-if=\"item.icon\">\n <BIcon :icon=\"item.icon\" :size=\"iconSize\" />\n </template>\n <template v-else-if=\"getStepStatus(item, index) === BStepsStatus.Finish\">\n <BIcon icon=\"check\" :size=\"iconSize\" />\n </template>\n <template v-else-if=\"getStepStatus(item, index) === BStepsStatus.Error\">\n <BIcon icon=\"xmark\" :size=\"iconSize\" />\n </template>\n <template v-else>\n <span :class=\"titleSizeClass\">{{ index + 1 }}</span>\n </template>\n </div>\n\n <div\n class=\"b-steps__content b:flex b:flex-col b:gap-y-1\"\n :class=\"[\n {\n 'b:items-center b:text-center':\n direction === BStepsDirection.Horizontal &&\n labelPlacement === BStepsLabelPlacement.Vertical,\n },\n ]\"\n >\n <div class=\"b:flex b:items-center b:gap-x-2\">\n <span\n class=\"b:font-medium\"\n :class=\"[titleSizeClass, titleClass(getStepStatus(item, index))]\"\n >\n {{ item.title }}\n </span>\n <span\n v-if=\"item.subTitle\"\n class=\"b:text-xs b:text-black/65\"\n :class=\"titleClass(getStepStatus(item, index))\"\n >\n {{ item.subTitle }}\n </span>\n </div>\n <p\n v-if=\"item.description\"\n class=\"b:leading-snug\"\n :class=\"[descriptionSizeClass, descriptionClass(getStepStatus(item, index))]\"\n >\n {{ item.description }}\n </p>\n </div>\n </div>\n <span\n v-if=\"direction === BStepsDirection.Horizontal && index < items.length - 1\"\n aria-hidden=\"true\"\n class=\"b-steps__tail\"\n />\n </li>\n </ol>\n</template>\n\n<style scoped>\n.b-steps {\n display: flex;\n gap: var(--b-steps-gap);\n}\n\n.b-steps--vertical {\n flex-direction: column;\n}\n\n.b-steps__item {\n position: relative;\n flex: 1;\n min-width: 0;\n}\n\n.b-steps__item-inner {\n display: flex;\n align-items: flex-start;\n gap: var(--b-steps-gap);\n flex: 0 1 auto;\n min-width: 0;\n}\n\n.b-steps__icon {\n flex-shrink: 0;\n}\n\n.b-steps__content {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.b-steps--label-vertical .b-steps__item-inner {\n flex-direction: column;\n align-items: center;\n}\n\n.b-steps--inline .b-steps__item-inner {\n align-items: center;\n}\n\n.b-steps--inline .b-steps__content {\n flex-direction: row;\n align-items: center;\n gap: var(--b-steps-gap);\n}\n\n.b-steps--inline .b-steps__content p {\n display: none;\n}\n\n.b-steps__item--clickable .b-steps__item-inner {\n cursor: pointer;\n}\n\n.b-steps--horizontal .b-steps__item {\n display: flex;\n align-items: flex-start;\n gap: var(--b-steps-gap);\n}\n\n.b-steps--vertical .b-steps__item {\n padding-bottom: var(--b-steps-gap);\n}\n\n.b-steps--vertical .b-steps__item::after {\n content: '';\n position: absolute;\n top: calc(var(--b-steps-icon-size) + var(--b-steps-gap));\n left: calc(var(--b-steps-icon-size) / 2);\n bottom: 0;\n width: 1px;\n background-color: var(--b-steps-tail-color);\n}\n\n.b-steps--vertical .b-steps__item:last-child::after {\n display: none;\n}\n\n.b-steps__tail {\n flex: 1 1 0;\n min-width: 1.5rem;\n height: 1px;\n margin-top: calc(var(--b-steps-icon-size) / 2);\n background-color: var(--b-steps-tail-color);\n}\n\n.b-steps--navigation .b-steps__item--clickable .b-steps__content {\n transition: color 0.2s ease;\n}\n\n.b-steps--navigation .b-steps__item--clickable:hover .b-steps__content {\n color: var(--b-color-primary);\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"design-system235.js","names":[],"sources":["../src/components/BSteps/BSteps.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport BIcon from '@/components/BIcon/BIcon.vue';\nimport {\n BCommonSize,\n BIconSize,\n BStepsDirection,\n BStepsLabelPlacement,\n BStepsStatus,\n BStepsType,\n type BStepItem,\n} from '@/types.ts';\nimport { computed, toRefs } from 'vue';\n\nexport interface BStepsProps {\n /**\n * The step items to render.\n */\n items?: BStepItem[];\n /**\n * Status applied to the current step if not overridden by the item.\n */\n status?: `${BStepsStatus}`;\n /**\n * Layout direction.\n */\n direction?: `${BStepsDirection}`;\n /**\n * Size of the step icons and text.\n */\n size?: `${BCommonSize}`;\n /**\n * Placement of labels for horizontal steps.\n */\n labelPlacement?: `${BStepsLabelPlacement}`;\n /**\n * Step type styling.\n */\n type?: `${BStepsType}`;\n}\n\nconst props = withDefaults(defineProps<BStepsProps>(), {\n items: () => [],\n status: BStepsStatus.Process,\n direction: BStepsDirection.Horizontal,\n size: BCommonSize.Medium,\n labelPlacement: BStepsLabelPlacement.Horizontal,\n type: BStepsType.Default,\n});\nconst { items, status, direction, size, labelPlacement, type } = toRefs(props);\nconst model = defineModel<number>({ default: 0 });\n\nconst emit = defineEmits<{\n /**\n * Emitted when the current step changes via user interaction.\n */\n change: [value: number];\n}>();\n\nconst normalizedSize = computed(() =>\n size.value === BCommonSize.Small ? BCommonSize.Small : BCommonSize.Medium,\n);\nconst iconSize = computed(() =>\n normalizedSize.value === BCommonSize.Small ? BIconSize.Small : BIconSize.Medium,\n);\n\nconst rootStyle = computed(() => ({\n '--b-steps-icon-size': normalizedSize.value === BCommonSize.Small ? '1.5rem' : '2rem',\n '--b-steps-gap': normalizedSize.value === BCommonSize.Small ? '0.5rem' : '0.75rem',\n}));\n\nconst titleSizeClass = computed(() =>\n normalizedSize.value === BCommonSize.Small ? 'b:text-sm' : 'b:text-base',\n);\nconst descriptionSizeClass = computed(() =>\n normalizedSize.value === BCommonSize.Small ? 'b:text-xs' : 'b:text-sm',\n);\n\nconst isClickable = computed(() => type.value === BStepsType.Navigation);\n\nconst getStepStatus = (item: BStepItem, index: number) => {\n if (item.status) {\n return item.status;\n }\n if (index === model.value) {\n return status.value || BStepsStatus.Process;\n }\n if (index < model.value) {\n return BStepsStatus.Finish;\n }\n return BStepsStatus.Wait;\n};\n\nconst getTailColor = (status: `${BStepsStatus}`) => {\n switch (status) {\n case BStepsStatus.Finish:\n case BStepsStatus.Process:\n return 'var(--b-color-primary)';\n case BStepsStatus.Error:\n return 'var(--b-color-failure)';\n case BStepsStatus.Wait:\n default:\n return 'var(--b-color-zinc-200)';\n }\n};\n\nconst onStepClick = (item: BStepItem, index: number) => {\n if (!isClickable.value || item.disabled) {\n return;\n }\n model.value = index;\n emit('change', index);\n};\n\nconst onStepKeydown = (event: KeyboardEvent, item: BStepItem, index: number) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onStepClick(item, index);\n }\n};\n\nconst iconClass = (status: `${BStepsStatus}`) => ({\n 'b:border-secondary b:bg-white b:text-secondary': status === BStepsStatus.Wait,\n 'b:border-primary b:bg-primary b:text-white': status === BStepsStatus.Process,\n 'b:border-primary b:bg-white b:text-primary': status === BStepsStatus.Finish,\n 'b:border-failure b:bg-white b:text-failure': status === BStepsStatus.Error,\n});\nconst titleClass = (status: `${BStepsStatus}`) => ({\n 'b:text-black-base': status === BStepsStatus.Process || status === BStepsStatus.Finish,\n 'b:text-failure': status === BStepsStatus.Error,\n 'b:text-black/65': status === BStepsStatus.Wait,\n});\nconst descriptionClass = (status: `${BStepsStatus}`) => ({\n 'b:text-black/65': status !== BStepsStatus.Error,\n 'b:text-failure': status === BStepsStatus.Error,\n});\n</script>\n\n<template>\n <ol\n class=\"b-steps\"\n :class=\"[\n {\n 'b-steps--horizontal': direction === BStepsDirection.Horizontal,\n 'b-steps--vertical': direction === BStepsDirection.Vertical,\n 'b-steps--label-vertical':\n direction === BStepsDirection.Horizontal &&\n labelPlacement === BStepsLabelPlacement.Vertical,\n 'b-steps--navigation': type === BStepsType.Navigation,\n 'b-steps--inline': type === BStepsType.Inline,\n },\n ]\"\n :style=\"rootStyle\"\n >\n <li\n v-for=\"(item, index) in items\"\n :key=\"`${item.title}-${index}`\"\n class=\"b-steps__item\"\n :class=\"[\n { 'b:opacity-50': item.disabled },\n { 'b-steps__item--clickable': isClickable && !item.disabled },\n ]\"\n :data-status=\"getStepStatus(item, index)\"\n :style=\"{ '--b-steps-tail-color': getTailColor(getStepStatus(item, index)) }\"\n >\n <div\n class=\"b-steps__item-inner\"\n :role=\"isClickable && !item.disabled ? 'button' : undefined\"\n :tabindex=\"isClickable && !item.disabled ? 0 : undefined\"\n :aria-disabled=\"item.disabled ? 'true' : undefined\"\n :aria-current=\"index === model ? 'step' : undefined\"\n @click=\"onStepClick(item, index)\"\n @keydown=\"onStepKeydown($event, item, index)\"\n >\n <div\n class=\"b-steps__icon b:flex b:items-center b:justify-center b:rounded-full b:border\"\n :class=\"[\n iconClass(getStepStatus(item, index)),\n {\n 'b:h-6 b:w-6': normalizedSize === BCommonSize.Small,\n 'b:h-8 b:w-8': normalizedSize === BCommonSize.Medium,\n },\n ]\"\n >\n <template v-if=\"item.icon\">\n <BIcon :icon=\"item.icon\" :size=\"iconSize\" />\n </template>\n <template v-else-if=\"getStepStatus(item, index) === BStepsStatus.Finish\">\n <BIcon icon=\"check\" :size=\"iconSize\" />\n </template>\n <template v-else-if=\"getStepStatus(item, index) === BStepsStatus.Error\">\n <BIcon icon=\"xmark\" :size=\"iconSize\" />\n </template>\n <template v-else>\n <span :class=\"titleSizeClass\">{{ index + 1 }}</span>\n </template>\n </div>\n\n <div\n class=\"b-steps__content b:flex b:flex-col b:gap-y-1\"\n :class=\"[\n {\n 'b:items-center b:text-center':\n direction === BStepsDirection.Horizontal &&\n labelPlacement === BStepsLabelPlacement.Vertical,\n },\n ]\"\n >\n <div class=\"b:flex b:items-center b:gap-x-2\">\n <span\n class=\"b:font-medium\"\n :class=\"[titleSizeClass, titleClass(getStepStatus(item, index))]\"\n >\n {{ item.title }}\n </span>\n <span\n v-if=\"item.subTitle\"\n class=\"b:text-xs b:text-black/65\"\n :class=\"titleClass(getStepStatus(item, index))\"\n >\n {{ item.subTitle }}\n </span>\n </div>\n <p\n v-if=\"item.description\"\n class=\"b:leading-snug\"\n :class=\"[descriptionSizeClass, descriptionClass(getStepStatus(item, index))]\"\n >\n {{ item.description }}\n </p>\n </div>\n </div>\n <span\n v-if=\"direction === BStepsDirection.Horizontal && index < items.length - 1\"\n aria-hidden=\"true\"\n class=\"b-steps__tail\"\n />\n </li>\n </ol>\n</template>\n\n<style scoped>\n.b-steps {\n display: flex;\n gap: var(--b-steps-gap);\n}\n\n.b-steps--vertical {\n flex-direction: column;\n}\n\n.b-steps__item {\n position: relative;\n flex: 1;\n min-width: 0;\n}\n\n.b-steps__item-inner {\n display: flex;\n align-items: flex-start;\n gap: var(--b-steps-gap);\n flex: 0 1 auto;\n min-width: 0;\n}\n\n.b-steps__icon {\n flex-shrink: 0;\n}\n\n.b-steps__content {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.b-steps--label-vertical .b-steps__item-inner {\n flex-direction: column;\n align-items: center;\n}\n\n.b-steps--inline .b-steps__item-inner {\n align-items: center;\n}\n\n.b-steps--inline .b-steps__content {\n flex-direction: row;\n align-items: center;\n gap: var(--b-steps-gap);\n}\n\n.b-steps--inline .b-steps__content p {\n display: none;\n}\n\n.b-steps__item--clickable .b-steps__item-inner {\n cursor: pointer;\n}\n\n.b-steps--horizontal .b-steps__item {\n display: flex;\n align-items: flex-start;\n gap: var(--b-steps-gap);\n}\n\n.b-steps--vertical .b-steps__item {\n padding-bottom: var(--b-steps-gap);\n}\n\n.b-steps--vertical .b-steps__item::after {\n content: '';\n position: absolute;\n top: calc(var(--b-steps-icon-size) + var(--b-steps-gap));\n left: calc(var(--b-steps-icon-size) / 2);\n bottom: 0;\n width: 1px;\n background-color: var(--b-steps-tail-color);\n}\n\n.b-steps--vertical .b-steps__item:last-child::after {\n display: none;\n}\n\n.b-steps__tail {\n flex: 1 1 0;\n min-width: 1.5rem;\n height: 1px;\n margin-top: calc(var(--b-steps-icon-size) / 2);\n background-color: var(--b-steps-tail-color);\n}\n\n.b-steps--navigation .b-steps__item--clickable .b-steps__content {\n transition: color 0.2s ease;\n}\n\n.b-steps--navigation .b-steps__item--clickable:hover .b-steps__content {\n color: var(--b-color-primary);\n}\n</style>\n"],"mappings":""}
@@ -1,8 +1,109 @@
1
- import e from "./design-system234.js";
2
- /* empty css */
3
- //#region src/components/BTabs/BTabs.vue
4
- var t = e;
1
+ import { computed as e, createCommentVNode as t, createElementBlock as n, createElementVNode as r, defineComponent as i, mergeModels as a, normalizeClass as o, onMounted as s, openBlock as c, ref as l, renderSlot as u, useModel as d, watch as f } from "vue";
2
+ //#region src/components/BSwitch/BSwitch.vue?vue&type=script&setup=true&lang.ts
3
+ var p = [
4
+ "aria-checked",
5
+ "aria-disabled",
6
+ "disabled",
7
+ "tabindex"
8
+ ], m = {
9
+ class: "b-switch__handle",
10
+ "aria-hidden": "true"
11
+ }, h = {
12
+ key: 0,
13
+ class: "b-switch__loading-icon",
14
+ viewBox: "0 0 16 16",
15
+ fill: "none",
16
+ "aria-hidden": "true"
17
+ }, g = {
18
+ class: "b-switch__inner",
19
+ "aria-hidden": "true"
20
+ }, _ = {
21
+ key: 0,
22
+ class: "b-switch__inner-checked"
23
+ }, v = {
24
+ key: 1,
25
+ class: "b-switch__inner-unchecked"
26
+ }, y = /* @__PURE__ */ i({
27
+ __name: "BSwitch",
28
+ props: /* @__PURE__ */ a({
29
+ defaultChecked: {
30
+ type: Boolean,
31
+ default: !1
32
+ },
33
+ disabled: {
34
+ type: Boolean,
35
+ default: !1
36
+ },
37
+ loading: {
38
+ type: Boolean,
39
+ default: !1
40
+ },
41
+ size: { default: "default" }
42
+ }, {
43
+ modelValue: {
44
+ type: Boolean,
45
+ default: void 0
46
+ },
47
+ modelModifiers: {}
48
+ }),
49
+ emits: /* @__PURE__ */ a(["change", "click"], ["update:modelValue"]),
50
+ setup(i, { expose: a, emit: y }) {
51
+ let b = d(i, "modelValue"), x = y, S = l(i.defaultChecked), C = e(() => b.value === void 0 ? S.value : b.value);
52
+ s(() => {
53
+ b.value === void 0 && (S.value = i.defaultChecked);
54
+ }), f(() => b.value, (e) => {
55
+ e !== void 0 && (S.value = e);
56
+ });
57
+ function w(e) {
58
+ if (i.disabled || i.loading) return;
59
+ let t = !C.value;
60
+ S.value = t, b.value = t, x("change", t, e), e instanceof MouseEvent && x("click", t, e);
61
+ }
62
+ function T(e) {
63
+ w(e);
64
+ }
65
+ function E(e) {
66
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), w(e));
67
+ }
68
+ let D = l(null);
69
+ function O() {
70
+ D.value?.focus();
71
+ }
72
+ function k() {
73
+ D.value?.blur();
74
+ }
75
+ return a({
76
+ focus: O,
77
+ blur: k
78
+ }), (e, a) => (c(), n("button", {
79
+ ref_key: "rootRef",
80
+ ref: D,
81
+ type: "button",
82
+ role: "switch",
83
+ class: o(["b-switch", [`b-switch--${i.size}`, {
84
+ "b-switch--checked": C.value,
85
+ "b-switch--disabled": i.disabled,
86
+ "b-switch--loading": i.loading
87
+ }]]),
88
+ "aria-checked": C.value,
89
+ "aria-disabled": i.disabled || i.loading || void 0,
90
+ disabled: i.disabled,
91
+ tabindex: i.disabled ? -1 : 0,
92
+ onClick: T,
93
+ onKeydown: E
94
+ }, [r("span", m, [i.loading ? (c(), n("svg", h, [...a[0] ||= [r("circle", {
95
+ cx: "8",
96
+ cy: "8",
97
+ r: "6",
98
+ stroke: "currentColor",
99
+ "stroke-width": "2",
100
+ "stroke-linecap": "round",
101
+ "stroke-dasharray": "28",
102
+ "stroke-dashoffset": "8"
103
+ }, null, -1)]])) : t("", !0)]), r("span", g, [C.value ? (c(), n("span", _, [u(e.$slots, "checked", {}, void 0, !0)])) : (c(), n("span", v, [u(e.$slots, "unchecked", {}, void 0, !0)]))])], 42, p));
104
+ }
105
+ });
5
106
  //#endregion
6
- export { t as default };
107
+ export { y as default };
7
108
 
8
109
  //# sourceMappingURL=design-system236.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"design-system236.js","names":[],"sources":["../src/components/BTabs/BTabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Component, VNode } from 'vue';\nimport { computed, defineComponent, h, nextTick, onMounted, provide, ref, useId, watch } from 'vue';\n\nimport type {\n BTabItem,\n BTabPaneRegistration,\n BTabsContext,\n BTabsPlacement,\n BTabsSize,\n BTabsType,\n} from './types';\nimport { BTabsContextKey } from './types';\n\n// ─────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────\nconst {\n activeKey,\n defaultActiveKey,\n items = [],\n type = 'line',\n placement = 'top',\n size = 'middle',\n centered = false,\n animated = true,\n hideAdd = false,\n destroyOnHidden = false,\n keepAlive = false,\n tabBarGutter,\n} = defineProps<{\n /** Current active tab key (controlled via v-model:activeKey). */\n activeKey?: string;\n /** Initial active tab key for uncontrolled mode. @default first non-disabled tab */\n defaultActiveKey?: string;\n /** Tab items configuration. When provided and non-empty, BTabPane children are ignored. */\n items?: BTabItem[];\n /** Visual style of the tabs. @default 'line' */\n type?: BTabsType;\n /** Position of the tab bar. @default 'top' */\n placement?: BTabsPlacement;\n /** Size preset for the tab bar. @default 'middle' */\n size?: BTabsSize;\n /** Whether to center the tab items. @default false */\n centered?: boolean;\n /** Whether content switching is animated. @default true */\n animated?: boolean;\n /** Whether to hide the add button in editable-card mode. @default false */\n hideAdd?: boolean;\n /** Whether to destroy inactive tab content globally. @default false */\n destroyOnHidden?: boolean;\n /** Whether to keep component state alive when switching tabs globally. @default false */\n keepAlive?: boolean;\n /** Gap between tabs in pixels. */\n tabBarGutter?: number;\n}>();\n\n// ─────────────────────────────────────────────\n// Emits\n// ─────────────────────────────────────────────\nconst emit = defineEmits<{\n /** Fires when the active tab changes. */\n (e: 'update:activeKey', key: string): void;\n /** Fires when the active tab changes (alias for update:activeKey). */\n (e: 'change', key: string): void;\n /** Fires when a tab is clicked. */\n (e: 'tabClick', key: string, event: MouseEvent): void;\n /** Fires when a tab is added or removed (editable-card only). */\n (e: 'edit', key: string | null, action: 'add' | 'remove'): void;\n}>();\n\n// ─────────────────────────────────────────────\n// Slots\n// ─────────────────────────────────────────────\ndefineSlots<{\n /** Items mode: receives { item } scoped prop. Pane mode: contains BTabPane children (no props). */\n default?: (props: { item?: BTabItem }) => unknown;\n /** Custom label renderer for each tab (items mode). */\n label?: (props: { item: BTabItem; active: boolean }) => unknown;\n /** Extra content on the left side of the tab bar. */\n leftExtra?: () => unknown;\n /** Extra content on the right side of the tab bar. */\n rightExtra?: () => unknown;\n /** Custom add button (editable-card type). */\n addIcon?: () => unknown;\n /** Custom remove/close icon (editable-card type). */\n removeIcon?: (props: { item: BTabItem }) => unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Instance-scoped ID prefix (prevents duplicate IDs when multiple BTabs on page)\n// ─────────────────────────────────────────────\nconst uid = useId();\nconst tabId = (key: string) => `${uid}-tab-${key}`;\nconst panelId = (key: string) => `${uid}-tabpanel-${key}`;\n\n// ─────────────────────────────────────────────\n// Pane registry (for BTabPane child component API)\n// ─────────────────────────────────────────────\nconst paneRegistry = ref(new Map<string, BTabPaneRegistration>());\nconst paneOrder = ref<string[]>([]);\n\nfunction registerPane(pane: BTabPaneRegistration) {\n paneRegistry.value.set(pane.key, pane);\n if (!paneOrder.value.includes(pane.key)) {\n paneOrder.value = [...paneOrder.value, pane.key];\n }\n}\n\nfunction unregisterPane(key: string) {\n paneRegistry.value.delete(key);\n paneOrder.value = paneOrder.value.filter((k) => k !== key);\n}\n\nfunction updatePane(key: string, pane: BTabPaneRegistration) {\n paneRegistry.value.set(key, pane);\n}\n\n// ─────────────────────────────────────────────\n// Mode detection + effective items\n// ─────────────────────────────────────────────\nconst isItemsMode = computed(() => items && items.length > 0);\n\nconst effectiveItems = computed<BTabItem[]>(() => {\n if (isItemsMode.value) return items;\n return paneOrder.value\n .map((key) => paneRegistry.value.get(key))\n .filter((p): p is BTabPaneRegistration => p !== undefined)\n .map((pane) => ({\n key: pane.key,\n label: pane.label,\n disabled: pane.disabled,\n closable: pane.closable,\n destroyOnHidden: pane.destroyOnHidden,\n forceRender: pane.forceRender,\n keepAlive: pane.keepAlive,\n }));\n});\n\n// ─────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────\nconst isControlled = computed(() => activeKey !== undefined);\n\nconst firstEnabledKey = computed(\n () => effectiveItems.value.find((i) => !i.disabled)?.key ?? effectiveItems.value[0]?.key ?? '',\n);\n\nconst internalKey = ref<string>(activeKey ?? defaultActiveKey ?? firstEnabledKey.value);\n\nwatch(\n () => activeKey,\n (val) => {\n if (val !== undefined) internalKey.value = val;\n },\n);\n\nwatch(effectiveItems, () => {\n if (\n internalKey.value === undefined ||\n !effectiveItems.value.find((i) => i.key === internalKey.value)\n ) {\n internalKey.value = firstEnabledKey.value;\n }\n});\n\nconst currentKey = computed(() => (isControlled.value ? activeKey! : internalKey.value));\n\n// ─────────────────────────────────────────────\n// Provide context to BTabPane children\n// ─────────────────────────────────────────────\nconst context: BTabsContext = {\n activeKey: currentKey,\n type: computed(() => type),\n size: computed(() => size),\n placement: computed(() => placement),\n keepAlive: computed(() => keepAlive),\n destroyOnHidden: computed(() => destroyOnHidden),\n register: registerPane,\n unregister: unregisterPane,\n update: updatePane,\n};\n\nprovide(BTabsContextKey, context);\n\n// ─────────────────────────────────────────────\n// Tab activation\n// ─────────────────────────────────────────────\nfunction activateTab(key: string, event?: MouseEvent) {\n const item = effectiveItems.value.find((i) => i.key === key);\n if (!item || item.disabled) return;\n\n if (event) {\n emit('tabClick', key, event);\n }\n\n if (key === currentKey.value) return;\n\n if (!isControlled.value) {\n internalKey.value = key;\n }\n emit('update:activeKey', key);\n emit('change', key);\n}\n\n// ─────────────────────────────────────────────\n// Editable-card actions\n// ─────────────────────────────────────────────\nfunction onAdd() {\n emit('edit', null, 'add');\n}\n\nfunction onRemove(key: string, event: MouseEvent) {\n event.stopPropagation();\n emit('edit', key, 'remove');\n}\n\n// ─────────────────────────────────────────────\n// Ink bar positioning\n// ─────────────────────────────────────────────\nconst tabListRef = ref<HTMLElement | null>(null);\nconst inkBarStyle = ref<Record<string, string>>({});\n\nfunction updateInkBar() {\n if (!tabListRef.value || type !== 'line') return;\n const activeEl = tabListRef.value.querySelector<HTMLElement>('.b-tabs__tab--active');\n if (!activeEl) return;\n\n const isVertical = placement === 'left' || placement === 'right';\n\n if (isVertical) {\n inkBarStyle.value = {\n top: `${activeEl.offsetTop}px`,\n height: `${activeEl.offsetHeight}px`,\n };\n } else {\n inkBarStyle.value = {\n left: `${activeEl.offsetLeft}px`,\n width: `${activeEl.offsetWidth}px`,\n };\n }\n}\n\nwatch(currentKey, async () => {\n await nextTick();\n updateInkBar();\n});\n\nonMounted(() => {\n updateInkBar();\n});\n\n// ─────────────────────────────────────────────\n// Keyboard navigation (roving tabindex)\n// ─────────────────────────────────────────────\nfunction onKeydown(event: KeyboardEvent) {\n const isVertical = placement === 'left' || placement === 'right';\n const nextKeys = isVertical ? ['ArrowDown'] : ['ArrowRight'];\n const prevKeys = isVertical ? ['ArrowUp'] : ['ArrowLeft'];\n\n // Delete key closes the active tab in editable-card mode\n if (event.key === 'Delete' && type === 'editable-card') {\n const item = effectiveItems.value.find((i) => i.key === currentKey.value);\n if (item && item.closable !== false) {\n event.preventDefault();\n emit('edit', currentKey.value, 'remove');\n }\n return;\n }\n\n if ([...nextKeys, ...prevKeys, 'Home', 'End'].includes(event.key)) {\n event.preventDefault();\n const enabledItems = effectiveItems.value.filter((i) => !i.disabled);\n if (enabledItems.length === 0) return;\n\n const currentIdx = enabledItems.findIndex((i) => i.key === currentKey.value);\n\n let targetIdx: number;\n if (nextKeys.includes(event.key)) {\n targetIdx = (currentIdx + 1) % enabledItems.length;\n } else if (prevKeys.includes(event.key)) {\n targetIdx = (currentIdx - 1 + enabledItems.length) % enabledItems.length;\n } else if (event.key === 'Home') {\n targetIdx = 0;\n } else {\n targetIdx = enabledItems.length - 1;\n }\n\n const targetKey = enabledItems[targetIdx].key;\n activateTab(targetKey);\n\n nextTick(() => {\n if (!tabListRef.value) return;\n const targetEl = tabListRef.value.querySelector<HTMLElement>(`[data-tab-key=\"${targetKey}\"]`);\n targetEl?.focus();\n });\n }\n}\n\n// ─────────────────────────────────────────────\n// KeepAlive + content visibility\n// ─────────────────────────────────────────────\nconst renderedKeys = ref<Set<string>>(new Set([currentKey.value]));\n\nwatch(currentKey, (key) => {\n renderedKeys.value.add(key);\n});\n\nfunction shouldUseKeepAlive(item: BTabItem): boolean {\n if (item.destroyOnHidden) return false;\n if (item.keepAlive !== undefined) return item.keepAlive;\n if (destroyOnHidden) return false;\n return keepAlive;\n}\n\nfunction shouldRender(item: BTabItem): boolean {\n if (item.forceRender) return true;\n if (shouldUseKeepAlive(item)) return true;\n const itemDestroy = item.destroyOnHidden ?? destroyOnHidden;\n if (itemDestroy) return item.key === currentKey.value;\n return renderedKeys.value.has(item.key);\n}\n\n// ─────────────────────────────────────────────\n// KeepAlive panel wrapper components\n// ─────────────────────────────────────────────\nconst panelWrappers = computed<Record<string, Component>>(() => {\n const wrappers: Record<string, Component> = {};\n for (const item of effectiveItems.value) {\n if (!shouldUseKeepAlive(item)) continue;\n wrappers[item.key] = defineComponent({\n name: `BTabPanel_${item.key}`,\n setup() {\n return () => {\n const pane = paneRegistry.value.get(item.key);\n if (pane) {\n return pane.renderContent();\n }\n return null;\n };\n },\n });\n }\n return wrappers;\n});\n\nfunction getPaneContent(key: string): VNode[] {\n const pane = paneRegistry.value.get(key);\n return pane?.renderContent() ?? [];\n}\n\nfunction getPaneLabel(key: string): VNode[] | undefined {\n const pane = paneRegistry.value.get(key);\n return pane?.renderLabel?.();\n}\n\n// ─────────────────────────────────────────────\n// Computed classes\n// ─────────────────────────────────────────────\nconst rootClasses = computed(() => [\n 'b-tabs',\n `b-tabs--${type}`,\n `b-tabs--${placement}`,\n `b-tabs--${size}`,\n { 'b-tabs--centered': centered },\n]);\n\nconst tabBarGutterStyle = computed(() =>\n tabBarGutter !== undefined ? { gap: `${tabBarGutter}px` } : undefined,\n);\n</script>\n\n<template>\n <div :class=\"rootClasses\">\n <!-- Tab bar -->\n <div class=\"b-tabs__header\">\n <div v-if=\"$slots.leftExtra\" class=\"b-tabs__extra b-tabs__extra--left\">\n <slot name=\"leftExtra\" />\n </div>\n\n <div\n ref=\"tabListRef\"\n class=\"b-tabs__list\"\n role=\"tablist\"\n :aria-orientation=\"\n placement === 'left' || placement === 'right' ? 'vertical' : 'horizontal'\n \"\n :style=\"tabBarGutterStyle\"\n >\n <div\n v-for=\"item in effectiveItems\"\n :key=\"item.key\"\n :data-tab-key=\"item.key\"\n class=\"b-tabs__tab\"\n :class=\"{\n 'b-tabs__tab--active': item.key === currentKey,\n 'b-tabs__tab--disabled': item.disabled,\n }\"\n role=\"tab\"\n :aria-selected=\"item.key === currentKey\"\n :aria-disabled=\"item.disabled || undefined\"\n :aria-controls=\"panelId(item.key)\"\n :id=\"tabId(item.key)\"\n :tabindex=\"item.key === currentKey ? 0 : -1\"\n @click=\"!item.disabled && activateTab(item.key, $event)\"\n @keydown=\"onKeydown\"\n >\n <span class=\"b-tabs__tab-label\">\n <!-- Items mode: use label slot or item.label -->\n <template v-if=\"isItemsMode\">\n <slot name=\"label\" :item=\"item\" :active=\"item.key === currentKey\">\n {{ item.label }}\n </slot>\n </template>\n <!-- Pane mode: use pane's renderLabel or label string -->\n <template v-else>\n <component\n v-if=\"getPaneLabel(item.key)\"\n :is=\"() => h('span', getPaneLabel(item.key)!)\"\n />\n <template v-else>{{ item.label }}</template>\n </template>\n </span>\n <span\n v-if=\"type === 'editable-card' && item.closable !== false\"\n class=\"b-tabs__tab-remove\"\n aria-hidden=\"true\"\n @click.stop=\"onRemove(item.key, $event)\"\n >\n <slot name=\"removeIcon\" :item=\"item\">\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" class=\"b-tabs__close-icon\">\n <path\n d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z\"\n />\n </svg>\n </slot>\n </span>\n </div>\n\n <!-- Ink bar (line type only) -->\n <div\n v-if=\"type === 'line'\"\n class=\"b-tabs__ink-bar\"\n aria-hidden=\"true\"\n :style=\"inkBarStyle\"\n />\n </div>\n\n <!-- Add button (outside tablist to avoid aria-required-children violation) -->\n <button\n v-if=\"type === 'editable-card' && !hideAdd\"\n class=\"b-tabs__add\"\n aria-label=\"Add tab\"\n @click=\"onAdd\"\n >\n <slot name=\"addIcon\">\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" class=\"b-tabs__add-icon\">\n <path\n d=\"M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z\"\n />\n </svg>\n </slot>\n </button>\n\n <div v-if=\"$slots.rightExtra\" class=\"b-tabs__extra b-tabs__extra--right\">\n <slot name=\"rightExtra\" />\n </div>\n </div>\n\n <!-- Hidden slot area for BTabPane registration (pane mode only) -->\n <div v-if=\"!isItemsMode\" v-show=\"false\" aria-hidden=\"true\" style=\"display: none\">\n <slot />\n </div>\n\n <!-- Tab panels -->\n <div class=\"b-tabs__content\">\n <template v-for=\"item in effectiveItems\" :key=\"item.key\">\n <!-- KeepAlive panels -->\n <div\n v-if=\"shouldUseKeepAlive(item)\"\n :id=\"panelId(item.key)\"\n class=\"b-tabs__panel\"\n :class=\"{\n 'b-tabs__panel--active': item.key === currentKey,\n 'b-tabs__panel--animated': animated,\n }\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId(item.key)\"\n :tabindex=\"item.key === currentKey ? 0 : -1\"\n :aria-hidden=\"item.key !== currentKey\"\n v-show=\"item.key === currentKey\"\n >\n <!-- Pane mode: KeepAlive caches wrapper component instances -->\n <KeepAlive v-if=\"!isItemsMode\">\n <component\n v-if=\"item.key === currentKey\"\n :is=\"panelWrappers[item.key] ?? (() => null)\"\n :key=\"item.key\"\n />\n </KeepAlive>\n <!-- Items mode: always render slot content; v-show on parent preserves state -->\n <template v-if=\"isItemsMode\">\n <slot :item=\"item\" />\n </template>\n </div>\n\n <!-- Standard panels (no KeepAlive) -->\n <div\n v-else-if=\"shouldRender(item)\"\n v-show=\"item.key === currentKey\"\n :id=\"panelId(item.key)\"\n class=\"b-tabs__panel\"\n :class=\"{\n 'b-tabs__panel--active': item.key === currentKey,\n 'b-tabs__panel--animated': animated,\n }\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId(item.key)\"\n :tabindex=\"item.key === currentKey ? 0 : -1\"\n :aria-hidden=\"item.key !== currentKey\"\n >\n <!-- Items mode: scoped slot -->\n <template v-if=\"isItemsMode\">\n <slot :item=\"item\" />\n </template>\n <!-- Pane mode: render registered content -->\n <component v-else :is=\"() => getPaneContent(item.key)\" />\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<style>\n/* ─────────────────────────────────────────────\n BTabs - Design tokens (scoped to .b-tabs)\n ───────────────────────────────────────────── */\n.b-tabs {\n --b-tabs-ink-bar-color: oklch(54.6% 0.245 262.881);\n --b-tabs-item-active-color: oklch(35% 0.2 260);\n --b-tabs-item-color: oklch(30% 0.02 260 / 88%);\n --b-tabs-item-hover-color: oklch(54.6% 0.245 262.881);\n --b-tabs-item-selected-color: oklch(54.6% 0.245 262.881);\n --b-tabs-item-disabled-color: oklch(30% 0.02 260 / 25%);\n --b-tabs-title-font-size: 14px;\n --b-tabs-title-font-size-lg: 16px;\n --b-tabs-title-font-size-sm: 14px;\n --b-tabs-card-bg: oklch(97% 0.003 260 / 50%);\n --b-tabs-card-height: 40px;\n --b-tabs-card-height-lg: 48px;\n --b-tabs-card-height-sm: 32px;\n --b-tabs-card-padding: 8px 16px;\n --b-tabs-card-padding-lg: 11px 16px;\n --b-tabs-card-padding-sm: 4px 8px;\n --b-tabs-card-gutter: 2px;\n --b-tabs-card-border-radius: 8px 8px 0 0;\n --b-tabs-horizontal-item-gutter: 32px;\n --b-tabs-horizontal-item-padding: 12px 0;\n --b-tabs-horizontal-item-padding-lg: 16px 0;\n --b-tabs-horizontal-item-padding-sm: 8px 0;\n --b-tabs-horizontal-margin: 0 0 16px 0;\n --b-tabs-vertical-item-margin: 16px 0 0 0;\n --b-tabs-vertical-item-padding: 8px 24px;\n --b-tabs-border-color: oklch(80% 0.005 260);\n --b-tabs-content-min-height: 0;\n --b-tabs-focus-ring: 0 0 0 2px oklch(54.6% 0.245 262.881 / 20%);\n --b-tabs-transition-duration: 200ms;\n\n display: flex;\n flex-direction: column;\n font-size: var(--b-tabs-title-font-size);\n line-height: 1.5;\n}\n\n/* ── Placement layouts ── */\n.b-tabs--left {\n flex-direction: row;\n}\n\n.b-tabs--right {\n flex-direction: row-reverse;\n}\n\n.b-tabs--bottom {\n flex-direction: column-reverse;\n}\n\n/* ── Size variants ── */\n.b-tabs--large {\n --b-tabs-title-font-size: var(--b-tabs-title-font-size-lg);\n}\n\n.b-tabs--small {\n --b-tabs-title-font-size: var(--b-tabs-title-font-size-sm);\n}\n\n/* ─────────────────────────────────────────────\n Header\n ───────────────────────────────────────────── */\n.b-tabs__header {\n display: flex;\n align-items: center;\n position: relative;\n flex-shrink: 0;\n}\n\n.b-tabs--top .b-tabs__header,\n.b-tabs--bottom .b-tabs__header {\n border-bottom: 1px solid var(--b-tabs-border-color);\n margin: var(--b-tabs-horizontal-margin);\n}\n\n.b-tabs--bottom .b-tabs__header {\n border-bottom: none;\n border-top: 1px solid var(--b-tabs-border-color);\n margin: 0;\n}\n\n.b-tabs--left .b-tabs__header,\n.b-tabs--right .b-tabs__header {\n flex-direction: column;\n align-items: stretch;\n border-right: 1px solid var(--b-tabs-border-color);\n margin: 0;\n}\n\n.b-tabs--right .b-tabs__header {\n border-right: none;\n border-left: 1px solid var(--b-tabs-border-color);\n}\n\n/* Card type removes border from header */\n.b-tabs--card .b-tabs__header,\n.b-tabs--editable-card .b-tabs__header {\n border-bottom: 1px solid var(--b-tabs-border-color);\n}\n\n/* ─────────────────────────────────────────────\n Tab list (roving tabindex container)\n ───────────────────────────────────────────── */\n.b-tabs__list {\n display: flex;\n position: relative;\n flex: 1;\n gap: var(--b-tabs-horizontal-item-gutter);\n}\n\n.b-tabs--centered .b-tabs__list {\n justify-content: center;\n}\n\n.b-tabs--left .b-tabs__list,\n.b-tabs--right .b-tabs__list {\n flex-direction: column;\n gap: 0;\n}\n\n/* ─────────────────────────────────────────────\n Individual tab\n ───────────────────────────────────────────── */\n.b-tabs__tab {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n position: relative;\n padding: var(--b-tabs-horizontal-item-padding);\n border: none;\n background: none;\n color: var(--b-tabs-item-color);\n font-size: inherit;\n font-family: inherit;\n cursor: pointer;\n white-space: nowrap;\n outline: none;\n transition: color var(--b-tabs-transition-duration);\n line-height: 1.5;\n}\n\n.b-tabs__tab:hover:not(.b-tabs__tab--disabled) {\n color: var(--b-tabs-item-hover-color);\n}\n\n.b-tabs__tab--active {\n color: var(--b-tabs-item-selected-color);\n font-weight: 500;\n}\n\n.b-tabs__tab--active:hover {\n color: var(--b-tabs-item-active-color);\n}\n\n.b-tabs__tab--disabled {\n color: var(--b-tabs-item-disabled-color);\n cursor: not-allowed;\n}\n\n.b-tabs__tab:focus-visible {\n box-shadow: var(--b-tabs-focus-ring);\n border-radius: 4px;\n}\n\n/* Large size - tab padding */\n.b-tabs--large .b-tabs__tab {\n padding: var(--b-tabs-horizontal-item-padding-lg);\n}\n\n/* Small size - tab padding */\n.b-tabs--small .b-tabs__tab {\n padding: var(--b-tabs-horizontal-item-padding-sm);\n}\n\n/* Vertical tabs */\n.b-tabs--left .b-tabs__tab,\n.b-tabs--right .b-tabs__tab {\n padding: var(--b-tabs-vertical-item-padding);\n justify-content: flex-start;\n}\n\n.b-tabs--left .b-tabs__tab:not(:first-child),\n.b-tabs--right .b-tabs__tab:not(:first-child) {\n margin: var(--b-tabs-vertical-item-margin);\n}\n\n/* ─────────────────────────────────────────────\n Card-type tab\n ───────────────────────────────────────────── */\n.b-tabs--card .b-tabs__list,\n.b-tabs--editable-card .b-tabs__list {\n gap: var(--b-tabs-card-gutter);\n}\n\n.b-tabs--card .b-tabs__tab,\n.b-tabs--editable-card .b-tabs__tab {\n padding: var(--b-tabs-card-padding);\n background: var(--b-tabs-card-bg);\n border: 1px solid var(--b-tabs-border-color);\n border-bottom: none;\n border-radius: var(--b-tabs-card-border-radius);\n height: var(--b-tabs-card-height);\n margin-bottom: -1px;\n}\n\n.b-tabs--card .b-tabs__tab--active,\n.b-tabs--editable-card .b-tabs__tab--active {\n background: white;\n border-bottom-color: white;\n}\n\n.b-tabs--large.b-tabs--card .b-tabs__tab,\n.b-tabs--large.b-tabs--editable-card .b-tabs__tab {\n padding: var(--b-tabs-card-padding-lg);\n height: var(--b-tabs-card-height-lg);\n}\n\n.b-tabs--small.b-tabs--card .b-tabs__tab,\n.b-tabs--small.b-tabs--editable-card .b-tabs__tab {\n padding: var(--b-tabs-card-padding-sm);\n height: var(--b-tabs-card-height-sm);\n}\n\n/* ─────────────────────────────────────────────\n Ink bar (line type indicator)\n ───────────────────────────────────────────── */\n.b-tabs__ink-bar {\n position: absolute;\n background: var(--b-tabs-ink-bar-color);\n transition:\n left var(--b-tabs-transition-duration) cubic-bezier(0.645, 0.045, 0.355, 1),\n width var(--b-tabs-transition-duration) cubic-bezier(0.645, 0.045, 0.355, 1),\n top var(--b-tabs-transition-duration) cubic-bezier(0.645, 0.045, 0.355, 1),\n height var(--b-tabs-transition-duration) cubic-bezier(0.645, 0.045, 0.355, 1);\n pointer-events: none;\n}\n\n.b-tabs--top .b-tabs__ink-bar,\n.b-tabs--bottom .b-tabs__ink-bar {\n bottom: 0;\n height: 2px;\n}\n\n.b-tabs--bottom .b-tabs__ink-bar {\n bottom: auto;\n top: 0;\n}\n\n.b-tabs--left .b-tabs__ink-bar {\n right: 0;\n width: 2px;\n}\n\n.b-tabs--right .b-tabs__ink-bar {\n left: 0;\n width: 2px;\n}\n\n/* ─────────────────────────────────────────────\n Close / Remove button\n ───────────────────────────────────────────── */\n.b-tabs__tab-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n cursor: pointer;\n opacity: 0.6;\n transition:\n opacity var(--b-tabs-transition-duration),\n background var(--b-tabs-transition-duration);\n}\n\n.b-tabs__tab-remove:hover {\n opacity: 1;\n background: oklch(0% 0 0 / 8%);\n}\n\n.b-tabs__close-icon {\n width: 12px;\n height: 12px;\n}\n\n/* ─────────────────────────────────────────────\n Add button\n ───────────────────────────────────────────── */\n.b-tabs__add {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--b-tabs-card-padding);\n background: var(--b-tabs-card-bg);\n border: 1px solid var(--b-tabs-border-color);\n border-bottom: none;\n border-radius: var(--b-tabs-card-border-radius);\n height: var(--b-tabs-card-height);\n margin-bottom: -1px;\n cursor: pointer;\n color: var(--b-tabs-item-color);\n transition: color var(--b-tabs-transition-duration);\n}\n\n.b-tabs__add:hover {\n color: var(--b-tabs-item-hover-color);\n}\n\n.b-tabs__add:focus-visible {\n box-shadow: var(--b-tabs-focus-ring);\n}\n\n.b-tabs__add-icon {\n width: 16px;\n height: 16px;\n}\n\n/* ─────────────────────────────────────────────\n Extra content slots\n ───────────────────────────────────────────── */\n.b-tabs__extra {\n display: flex;\n align-items: center;\n padding: 0 8px;\n flex-shrink: 0;\n}\n\n/* ─────────────────────────────────────────────\n Content area\n ───────────────────────────────────────────── */\n.b-tabs__content {\n flex: 1;\n min-height: var(--b-tabs-content-min-height);\n}\n\n.b-tabs__panel {\n outline: none;\n}\n\n.b-tabs__panel--animated {\n animation: b-tabs-fade-in var(--b-tabs-transition-duration) ease-in-out;\n}\n\n@keyframes b-tabs-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* ─────────────────────────────────────────────\n Dark mode\n ───────────────────────────────────────────── */\n[data-prefers-color='dark'] .b-tabs {\n --b-tabs-ink-bar-color: oklch(70% 0.18 262.881);\n --b-tabs-item-active-color: oklch(80% 0.14 262.881);\n --b-tabs-item-color: oklch(85% 0.01 260 / 88%);\n --b-tabs-item-hover-color: oklch(70% 0.18 262.881);\n --b-tabs-item-selected-color: oklch(70% 0.18 262.881);\n --b-tabs-item-disabled-color: oklch(85% 0.01 260 / 25%);\n --b-tabs-card-bg: oklch(25% 0.015 260 / 50%);\n --b-tabs-border-color: oklch(35% 0.01 260);\n}\n\n[data-prefers-color='dark'] .b-tabs--card .b-tabs__tab--active,\n[data-prefers-color='dark'] .b-tabs--editable-card .b-tabs__tab--active {\n background: oklch(20% 0.015 260);\n border-bottom-color: oklch(20% 0.015 260);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-tabs {\n --b-tabs-ink-bar-color: oklch(70% 0.18 262.881);\n --b-tabs-item-active-color: oklch(80% 0.14 262.881);\n --b-tabs-item-color: oklch(85% 0.01 260 / 88%);\n --b-tabs-item-hover-color: oklch(70% 0.18 262.881);\n --b-tabs-item-selected-color: oklch(70% 0.18 262.881);\n --b-tabs-item-disabled-color: oklch(85% 0.01 260 / 25%);\n --b-tabs-card-bg: oklch(25% 0.015 260 / 50%);\n --b-tabs-border-color: oklch(35% 0.01 260);\n }\n [data-prefers-color='system'] .b-tabs--editable-card .b-tabs__tab--active {\n background: oklch(20% 0.015 260);\n border-bottom-color: oklch(20% 0.015 260);\n }\n}\n\n/* ─────────────────────────────────────────────\n Reduced motion\n ───────────────────────────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n .b-tabs {\n --b-tabs-transition-duration: 0ms;\n }\n\n .b-tabs__panel--animated {\n animation: none;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"design-system236.js","names":[],"sources":["../src/components/BSwitch/BSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, computed, watch, onMounted } from 'vue';\n\n//#region Props\nconst {\n defaultChecked = false,\n disabled = false,\n loading = false,\n size = 'default',\n} = defineProps<{\n /** Initial checked state for uncontrolled usage. */\n defaultChecked?: boolean;\n /** Whether the switch is disabled. */\n disabled?: boolean;\n /** Whether to show a loading spinner on the handle. */\n loading?: boolean;\n /** Size of the switch. */\n size?: 'default' | 'small';\n}>();\n\n/**\n * The checked state of the switch.\n * Supports v-model for controlled usage.\n */\nconst model = defineModel<boolean>({ default: undefined });\n\nconst emit = defineEmits<{\n change: [checked: boolean, event: Event];\n click: [checked: boolean, event: MouseEvent];\n}>();\n//#endregion\n\n//#region Internal state\nconst internalChecked = ref(defaultChecked);\n\nconst isChecked = computed(() =>\n model.value !== undefined ? model.value : internalChecked.value,\n);\n\nonMounted(() => {\n if (model.value === undefined) {\n internalChecked.value = defaultChecked;\n }\n});\n\nwatch(\n () => model.value,\n (val) => {\n if (val !== undefined) {\n internalChecked.value = val;\n }\n },\n);\n//#endregion\n\n//#region Handlers\nfunction toggle(event: MouseEvent | KeyboardEvent) {\n if (disabled || loading) return;\n\n const newChecked = !isChecked.value;\n internalChecked.value = newChecked;\n model.value = newChecked;\n emit('change', newChecked, event);\n\n if (event instanceof MouseEvent) {\n emit('click', newChecked, event);\n }\n}\n\nfunction handleClick(event: MouseEvent) {\n toggle(event);\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggle(event);\n }\n}\n//#endregion\n\n//#region Expose\nconst rootRef = ref<HTMLButtonElement | null>(null);\n\nfunction focus() {\n rootRef.value?.focus();\n}\n\nfunction blur() {\n rootRef.value?.blur();\n}\n\ndefineExpose({ focus, blur });\n//#endregion\n</script>\n\n<template>\n <button\n ref=\"rootRef\"\n type=\"button\"\n role=\"switch\"\n class=\"b-switch\"\n :class=\"[\n `b-switch--${size}`,\n {\n 'b-switch--checked': isChecked,\n 'b-switch--disabled': disabled,\n 'b-switch--loading': loading,\n },\n ]\"\n :aria-checked=\"isChecked\"\n :aria-disabled=\"disabled || loading || undefined\"\n :disabled=\"disabled\"\n :tabindex=\"disabled ? -1 : 0\"\n @click=\"handleClick\"\n @keydown=\"handleKeyDown\"\n >\n <span class=\"b-switch__handle\" aria-hidden=\"true\">\n <svg\n v-if=\"loading\"\n class=\"b-switch__loading-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"28\"\n stroke-dashoffset=\"8\"\n />\n </svg>\n </span>\n <span class=\"b-switch__inner\" aria-hidden=\"true\">\n <span v-if=\"isChecked\" class=\"b-switch__inner-checked\">\n <slot name=\"checked\" />\n </span>\n <span v-else class=\"b-switch__inner-unchecked\">\n <slot name=\"unchecked\" />\n </span>\n </span>\n </button>\n</template>\n\n<style scoped>\n.b-switch {\n --b-switch-handle-bg: #fff;\n --b-switch-handle-shadow: 0 2px 4px 0 rgba(0, 35, 11, 0.2);\n --b-switch-handle-size: 18px;\n --b-switch-track-height: 22px;\n --b-switch-track-min-width: 44px;\n --b-switch-track-padding: 2px;\n --b-switch-inner-max-margin: 24px;\n --b-switch-inner-min-margin: 9px;\n --b-switch-track-bg: rgba(0, 0, 0, 0.25);\n --b-switch-track-bg-checked: #1565d8;\n --b-switch-track-bg-disabled: rgba(0, 0, 0, 0.04);\n --b-switch-loading-color: #1565d8;\n\n position: relative;\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n min-width: var(--b-switch-track-min-width);\n height: var(--b-switch-track-height);\n padding: 0;\n border: 0;\n border-radius: calc(var(--b-switch-track-height) / 2);\n background-color: var(--b-switch-track-bg);\n cursor: pointer;\n outline: none;\n transition:\n background-color 0.2s,\n opacity 0.2s;\n vertical-align: middle;\n user-select: none;\n line-height: 1;\n}\n\n.b-switch:focus-visible {\n outline: 2px solid var(--b-switch-track-bg-checked);\n outline-offset: 2px;\n}\n\n/* Checked state */\n.b-switch--checked {\n background-color: var(--b-switch-track-bg-checked);\n}\n\n/* Disabled state */\n.b-switch--disabled {\n cursor: not-allowed;\n opacity: 0.65;\n}\n\n/* Loading state */\n.b-switch--loading {\n cursor: default;\n opacity: 0.85;\n}\n\n/* Handle */\n.b-switch__handle {\n position: absolute;\n top: var(--b-switch-track-padding);\n inset-inline-start: var(--b-switch-track-padding);\n width: var(--b-switch-handle-size);\n height: var(--b-switch-handle-size);\n border-radius: 50%;\n background-color: var(--b-switch-handle-bg);\n box-shadow: var(--b-switch-handle-shadow);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: inset-inline-start 0.2s ease-in-out;\n}\n\n.b-switch--checked .b-switch__handle {\n inset-inline-start: calc(\n 100% - var(--b-switch-handle-size) - var(--b-switch-track-padding)\n );\n}\n\n/* Loading icon */\n.b-switch__loading-icon {\n width: calc(var(--b-switch-handle-size) * 0.6);\n height: calc(var(--b-switch-handle-size) * 0.6);\n color: var(--b-switch-loading-color);\n animation: b-switch-spin 1s linear infinite;\n}\n\n.b-switch--checked .b-switch__loading-icon {\n color: var(--b-switch-track-bg-checked);\n}\n\n@keyframes b-switch-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Inner content */\n.b-switch__inner {\n display: flex;\n align-items: center;\n height: 100%;\n font-size: 12px;\n color: #fff;\n overflow: hidden;\n padding: 0;\n}\n\n.b-switch__inner-checked,\n.b-switch__inner-unchecked {\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n}\n\n.b-switch__inner-checked {\n margin-inline-start: calc(\n var(--b-switch-track-padding) + var(--b-switch-inner-min-margin)\n );\n margin-inline-end: calc(\n var(--b-switch-handle-size) + var(--b-switch-track-padding) +\n var(--b-switch-inner-min-margin) - var(--b-switch-inner-max-margin) +\n var(--b-switch-inner-max-margin)\n );\n}\n\n.b-switch__inner-unchecked {\n margin-inline-start: calc(\n var(--b-switch-handle-size) + var(--b-switch-track-padding) +\n var(--b-switch-inner-min-margin)\n );\n margin-inline-end: calc(\n var(--b-switch-track-padding) + var(--b-switch-inner-min-margin)\n );\n}\n\n/* Small size */\n.b-switch--small {\n --b-switch-handle-size: 12px;\n --b-switch-track-height: 16px;\n --b-switch-track-min-width: 28px;\n --b-switch-inner-max-margin: 18px;\n --b-switch-inner-min-margin: 6px;\n}\n\n/* Dark mode */\n[data-prefers-color='dark'] .b-switch {\n --b-switch-track-bg: rgba(255, 255, 255, 0.25);\n --b-switch-track-bg-disabled: rgba(255, 255, 255, 0.08);\n --b-switch-handle-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.4);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-switch {\n --b-switch-track-bg: rgba(255, 255, 255, 0.25);\n --b-switch-track-bg-disabled: rgba(255, 255, 255, 0.08);\n --b-switch-handle-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.4);\n }\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n .b-switch__handle {\n transition: none;\n }\n\n .b-switch {\n transition: none;\n }\n\n .b-switch__loading-icon {\n animation: none;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBA,IAAM,IAAQ,EAAoB,GAAA,aAAwB,EAEpD,IAAO,GAOP,IAAkB,EAAI,EAAA,eAAe,EAErC,IAAY,QAChB,EAAM,UAAU,KAAA,IAA0B,EAAgB,QAA9B,EAAM,MACnC;AAQD,EANA,QAAgB;AACd,GAAI,EAAM,UAAU,KAAA,MAClB,EAAgB,QAAQ,EAAA;IAE1B,EAEF,QACQ,EAAM,QACX,MAAQ;AACP,GAAI,MAAQ,KAAA,MACV,EAAgB,QAAQ;IAG7B;EAID,SAAS,EAAO,GAAmC;AACjD,OAAI,EAAA,YAAY,EAAA,QAAS;GAEzB,IAAM,IAAa,CAAC,EAAU;AAK9B,GAJA,EAAgB,QAAQ,GACxB,EAAM,QAAQ,GACd,EAAK,UAAU,GAAY,EAAM,EAE7B,aAAiB,cACnB,EAAK,SAAS,GAAY,EAAM;;EAIpC,SAAS,EAAY,GAAmB;AACtC,KAAO,EAAM;;EAGf,SAAS,EAAc,GAAsB;AAC3C,IAAI,EAAM,QAAQ,WAAW,EAAM,QAAQ,SACzC,EAAM,gBAAgB,EACtB,EAAO,EAAM;;EAMjB,IAAM,IAAU,EAA8B,KAAK;EAEnD,SAAS,IAAQ;AACf,KAAQ,OAAO,OAAO;;EAGxB,SAAS,IAAO;AACd,KAAQ,OAAO,MAAM;;SAGvB,EAAa;GAAE;GAAO;GAAM,CAAC,kBAK3B,EAgDS,UAAA;YA/CH;GAAJ,KAAI;GACJ,MAAK;GACL,MAAK;GACL,OAAK,EAAA,CAAC,YAAU,CAAA,aACa,EAAA,QAAA;yBAA6C,EAAA;0BAAyC,EAAA;yBAAuC,EAAA;;GAQzJ,gBAAc,EAAA;GACd,iBAAe,EAAA,YAAY,EAAA,WAAW,KAAA;GACtC,UAAU,EAAA;GACV,UAAU,EAAA,WAAQ,KAAA;GAClB,SAAO;GACP,WAAS;MAEV,EAmBO,QAnBP,GAmBO,CAjBG,EAAA,WAAA,GAAA,EADR,EAiBM,OAjBN,GAiBM,CAAA,GAAA,AAAA,EAAA,OAAA,CAVJ,EASE,UAAA;GARA,IAAG;GACH,IAAG;GACH,GAAE;GACF,QAAO;GACP,gBAAa;GACb,kBAAe;GACf,oBAAiB;GACjB,qBAAkB;kCAIxB,EAOO,QAPP,GAOO,CANO,EAAA,SAAA,GAAA,EAAZ,EAEO,QAFP,GAEO,CADL,EAAuB,EAAA,QAAA,WAAA,EAAA,EAAA,KAAA,GAAA,GAAA,CAAA,CAAA,KAAA,GAAA,EAEzB,EAEO,QAFP,GAEO,CADL,EAAyB,EAAA,QAAA,aAAA,EAAA,EAAA,KAAA,GAAA,GAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,IAAA,EAAA"}
@@ -0,0 +1,9 @@
1
+ import e from "./design-system14.js";
2
+ import t from "./design-system236.js";
3
+ /* empty css */
4
+ //#region src/components/BSwitch/BSwitch.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-a13562bf"]]);
6
+ //#endregion
7
+ export { n as default };
8
+
9
+ //# sourceMappingURL=design-system238.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-system238.js","names":[],"sources":["../src/components/BSwitch/BSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, computed, watch, onMounted } from 'vue';\n\n//#region Props\nconst {\n defaultChecked = false,\n disabled = false,\n loading = false,\n size = 'default',\n} = defineProps<{\n /** Initial checked state for uncontrolled usage. */\n defaultChecked?: boolean;\n /** Whether the switch is disabled. */\n disabled?: boolean;\n /** Whether to show a loading spinner on the handle. */\n loading?: boolean;\n /** Size of the switch. */\n size?: 'default' | 'small';\n}>();\n\n/**\n * The checked state of the switch.\n * Supports v-model for controlled usage.\n */\nconst model = defineModel<boolean>({ default: undefined });\n\nconst emit = defineEmits<{\n change: [checked: boolean, event: Event];\n click: [checked: boolean, event: MouseEvent];\n}>();\n//#endregion\n\n//#region Internal state\nconst internalChecked = ref(defaultChecked);\n\nconst isChecked = computed(() =>\n model.value !== undefined ? model.value : internalChecked.value,\n);\n\nonMounted(() => {\n if (model.value === undefined) {\n internalChecked.value = defaultChecked;\n }\n});\n\nwatch(\n () => model.value,\n (val) => {\n if (val !== undefined) {\n internalChecked.value = val;\n }\n },\n);\n//#endregion\n\n//#region Handlers\nfunction toggle(event: MouseEvent | KeyboardEvent) {\n if (disabled || loading) return;\n\n const newChecked = !isChecked.value;\n internalChecked.value = newChecked;\n model.value = newChecked;\n emit('change', newChecked, event);\n\n if (event instanceof MouseEvent) {\n emit('click', newChecked, event);\n }\n}\n\nfunction handleClick(event: MouseEvent) {\n toggle(event);\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n toggle(event);\n }\n}\n//#endregion\n\n//#region Expose\nconst rootRef = ref<HTMLButtonElement | null>(null);\n\nfunction focus() {\n rootRef.value?.focus();\n}\n\nfunction blur() {\n rootRef.value?.blur();\n}\n\ndefineExpose({ focus, blur });\n//#endregion\n</script>\n\n<template>\n <button\n ref=\"rootRef\"\n type=\"button\"\n role=\"switch\"\n class=\"b-switch\"\n :class=\"[\n `b-switch--${size}`,\n {\n 'b-switch--checked': isChecked,\n 'b-switch--disabled': disabled,\n 'b-switch--loading': loading,\n },\n ]\"\n :aria-checked=\"isChecked\"\n :aria-disabled=\"disabled || loading || undefined\"\n :disabled=\"disabled\"\n :tabindex=\"disabled ? -1 : 0\"\n @click=\"handleClick\"\n @keydown=\"handleKeyDown\"\n >\n <span class=\"b-switch__handle\" aria-hidden=\"true\">\n <svg\n v-if=\"loading\"\n class=\"b-switch__loading-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <circle\n cx=\"8\"\n cy=\"8\"\n r=\"6\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"28\"\n stroke-dashoffset=\"8\"\n />\n </svg>\n </span>\n <span class=\"b-switch__inner\" aria-hidden=\"true\">\n <span v-if=\"isChecked\" class=\"b-switch__inner-checked\">\n <slot name=\"checked\" />\n </span>\n <span v-else class=\"b-switch__inner-unchecked\">\n <slot name=\"unchecked\" />\n </span>\n </span>\n </button>\n</template>\n\n<style scoped>\n.b-switch {\n --b-switch-handle-bg: #fff;\n --b-switch-handle-shadow: 0 2px 4px 0 rgba(0, 35, 11, 0.2);\n --b-switch-handle-size: 18px;\n --b-switch-track-height: 22px;\n --b-switch-track-min-width: 44px;\n --b-switch-track-padding: 2px;\n --b-switch-inner-max-margin: 24px;\n --b-switch-inner-min-margin: 9px;\n --b-switch-track-bg: rgba(0, 0, 0, 0.25);\n --b-switch-track-bg-checked: #1565d8;\n --b-switch-track-bg-disabled: rgba(0, 0, 0, 0.04);\n --b-switch-loading-color: #1565d8;\n\n position: relative;\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n min-width: var(--b-switch-track-min-width);\n height: var(--b-switch-track-height);\n padding: 0;\n border: 0;\n border-radius: calc(var(--b-switch-track-height) / 2);\n background-color: var(--b-switch-track-bg);\n cursor: pointer;\n outline: none;\n transition:\n background-color 0.2s,\n opacity 0.2s;\n vertical-align: middle;\n user-select: none;\n line-height: 1;\n}\n\n.b-switch:focus-visible {\n outline: 2px solid var(--b-switch-track-bg-checked);\n outline-offset: 2px;\n}\n\n/* Checked state */\n.b-switch--checked {\n background-color: var(--b-switch-track-bg-checked);\n}\n\n/* Disabled state */\n.b-switch--disabled {\n cursor: not-allowed;\n opacity: 0.65;\n}\n\n/* Loading state */\n.b-switch--loading {\n cursor: default;\n opacity: 0.85;\n}\n\n/* Handle */\n.b-switch__handle {\n position: absolute;\n top: var(--b-switch-track-padding);\n inset-inline-start: var(--b-switch-track-padding);\n width: var(--b-switch-handle-size);\n height: var(--b-switch-handle-size);\n border-radius: 50%;\n background-color: var(--b-switch-handle-bg);\n box-shadow: var(--b-switch-handle-shadow);\n display: flex;\n align-items: center;\n justify-content: center;\n transition: inset-inline-start 0.2s ease-in-out;\n}\n\n.b-switch--checked .b-switch__handle {\n inset-inline-start: calc(\n 100% - var(--b-switch-handle-size) - var(--b-switch-track-padding)\n );\n}\n\n/* Loading icon */\n.b-switch__loading-icon {\n width: calc(var(--b-switch-handle-size) * 0.6);\n height: calc(var(--b-switch-handle-size) * 0.6);\n color: var(--b-switch-loading-color);\n animation: b-switch-spin 1s linear infinite;\n}\n\n.b-switch--checked .b-switch__loading-icon {\n color: var(--b-switch-track-bg-checked);\n}\n\n@keyframes b-switch-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Inner content */\n.b-switch__inner {\n display: flex;\n align-items: center;\n height: 100%;\n font-size: 12px;\n color: #fff;\n overflow: hidden;\n padding: 0;\n}\n\n.b-switch__inner-checked,\n.b-switch__inner-unchecked {\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n}\n\n.b-switch__inner-checked {\n margin-inline-start: calc(\n var(--b-switch-track-padding) + var(--b-switch-inner-min-margin)\n );\n margin-inline-end: calc(\n var(--b-switch-handle-size) + var(--b-switch-track-padding) +\n var(--b-switch-inner-min-margin) - var(--b-switch-inner-max-margin) +\n var(--b-switch-inner-max-margin)\n );\n}\n\n.b-switch__inner-unchecked {\n margin-inline-start: calc(\n var(--b-switch-handle-size) + var(--b-switch-track-padding) +\n var(--b-switch-inner-min-margin)\n );\n margin-inline-end: calc(\n var(--b-switch-track-padding) + var(--b-switch-inner-min-margin)\n );\n}\n\n/* Small size */\n.b-switch--small {\n --b-switch-handle-size: 12px;\n --b-switch-track-height: 16px;\n --b-switch-track-min-width: 28px;\n --b-switch-inner-max-margin: 18px;\n --b-switch-inner-min-margin: 6px;\n}\n\n/* Dark mode */\n[data-prefers-color='dark'] .b-switch {\n --b-switch-track-bg: rgba(255, 255, 255, 0.25);\n --b-switch-track-bg-disabled: rgba(255, 255, 255, 0.08);\n --b-switch-handle-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.4);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-switch {\n --b-switch-track-bg: rgba(255, 255, 255, 0.25);\n --b-switch-track-bg-disabled: rgba(255, 255, 255, 0.08);\n --b-switch-handle-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.4);\n }\n}\n\n/* Reduced motion */\n@media (prefers-reduced-motion: reduce) {\n .b-switch__handle {\n transition: none;\n }\n\n .b-switch {\n transition: none;\n }\n\n .b-switch__loading-icon {\n animation: none;\n }\n}\n</style>\n"],"mappings":""}