@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,202 +1,52 @@
1
- import { Teleport as e, Transition as t, computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createTextVNode as s, createVNode as c, defineComponent as l, nextTick as u, normalizeClass as d, normalizeStyle as f, onBeforeUnmount as p, openBlock as m, ref as h, renderSlot as g, toDisplayString as _, unref as v, useId as y, useSlots as ee, watch as b, withCtx as x } from "vue";
2
- //#region src/components/BDrawer/BDrawer.vue?vue&type=script&setup=true&lang.ts
3
- var S = ["aria-label", "aria-labelledby"], C = {
4
- key: 0,
5
- class: "b-drawer__header"
6
- }, w = { class: "b-drawer__header-title-wrapper" }, T = ["id"], E = {
7
- key: 0,
8
- class: "b-drawer__extra"
9
- }, D = {
10
- key: 1,
11
- class: "b-drawer__body"
12
- }, O = {
13
- key: 0,
14
- class: "b-drawer__loading",
15
- "aria-live": "polite"
16
- }, k = {
17
- key: 2,
18
- class: "b-drawer__footer"
19
- }, A = /* @__PURE__ */ l({
20
- __name: "BDrawer",
1
+ import { computed as e, createElementBlock as t, createElementVNode as n, defineComponent as r, normalizeClass as i, openBlock as a, renderSlot as o, useSlots as s } from "vue";
2
+ //#region src/components/BDivider/BDivider.vue?vue&type=script&setup=true&lang.ts
3
+ var c = { class: "b-divider__content" }, l = /* @__PURE__ */ r({
4
+ __name: "BDivider",
21
5
  props: {
22
- placement: { default: "right" },
23
- size: { default: "default" },
24
- title: { default: "" },
25
- closable: {
26
- type: Boolean,
27
- default: !0
28
- },
29
- mask: {
30
- type: Boolean,
31
- default: !0
32
- },
33
- maskClosable: {
34
- type: Boolean,
35
- default: !0
36
- },
37
- keyboard: {
38
- type: Boolean,
39
- default: !0
40
- },
41
- destroyOnClose: {
6
+ orientation: { default: "horizontal" },
7
+ variant: { default: "solid" },
8
+ dashed: {
42
9
  type: Boolean,
43
10
  default: !1
44
11
  },
45
- width: {},
46
- height: {},
47
- zIndex: { default: 1e3 },
48
- getContainer: {},
49
- autoFocus: {
12
+ plain: {
50
13
  type: Boolean,
51
14
  default: !0
52
15
  },
53
- modelValue: {
54
- type: Boolean,
55
- default: () => void 0
56
- },
57
- forceRender: {
58
- type: Boolean,
59
- default: !1
60
- },
61
- extra: { default: "" },
62
- footer: { default: "" },
63
- loading: {
64
- type: Boolean,
65
- default: !1
66
- },
67
- ariaLabel: {}
16
+ size: { default: "large" },
17
+ titlePlacement: { default: "center" }
68
18
  },
69
- emits: [
70
- "close",
71
- "afterOpenChange",
72
- "update:modelValue"
73
- ],
74
- setup(l, { expose: A, emit: j }) {
75
- let M = j, N = ee(), P = y(), F = h(!1), I = n(() => l.modelValue === void 0 ? F.value : l.modelValue), L = h(!1), R = n(() => l.forceRender ? !0 : l.destroyOnClose ? I.value : L.value || I.value);
76
- b(I, (e) => {
77
- e && (L.value = !0);
78
- });
79
- let z = n(() => l.placement === "left" || l.placement === "right"), B = {
80
- default: 378,
81
- large: 736
82
- }, V = n(() => l.width === void 0 ? z.value ? `${B[l.size]}px` : "100%" : typeof l.width == "number" ? `${l.width}px` : l.width), H = n(() => l.height === void 0 ? z.value ? "100%" : `${B[l.size]}px` : typeof l.height == "number" ? `${l.height}px` : l.height), U = n(() => !!(l.title || N.title)), W = n(() => !!(l.extra || N.extra)), G = n(() => !!(l.footer || N.footer)), K = n(() => U.value || l.closable || W.value), q = n(() => l.getContainer ? l.getContainer : "body"), J = n(() => ({
83
- width: V.value,
84
- height: H.value,
85
- zIndex: l.zIndex
86
- })), Y = h(null), X = null;
87
- function Z(e) {
88
- if (e.key !== "Tab" || !Y.value) return;
89
- let t = Array.from(Y.value.querySelectorAll("a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])"));
90
- if (t.length === 0) {
91
- e.preventDefault();
92
- return;
19
+ setup(r) {
20
+ let l = s(), u = e(() => r.orientation === "vertical"), d = e(() => r.orientation === "horizontal"), f = e(() => !!l.default), p = e(() => r.dashed && r.variant === "solid" ? "dashed" : r.variant), m = e(() => [
21
+ "b-divider",
22
+ `b-divider--${r.orientation}`,
23
+ `b-divider--${p.value}`,
24
+ `b-divider--size-${r.size}`,
25
+ {
26
+ "b-divider--with-text": f.value && d.value,
27
+ [`b-divider--text-${r.titlePlacement}`]: f.value && d.value,
28
+ "b-divider--plain": r.plain
93
29
  }
94
- let n = t[0], r = t[t.length - 1];
95
- e.shiftKey ? document.activeElement === n && (e.preventDefault(), r.focus()) : document.activeElement === r && (e.preventDefault(), n.focus());
96
- }
97
- function Q() {
98
- !l.autoFocus || !Y.value || u(() => {
99
- if (!Y.value) return;
100
- let e = Y.value.querySelector("a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])");
101
- e ? e.focus() : Y.value.focus();
102
- });
103
- }
104
- b(I, (e) => {
105
- e ? (X = document.activeElement, u(() => Q()), document.body.style.overflow = "hidden") : document.body.style.overflow = "";
106
- }), p(() => {
107
- document.body.style.overflow = "";
108
- });
109
- function $(e) {
110
- M("close", e), l.modelValue === void 0 ? F.value = !1 : M("update:modelValue", !1);
111
- }
112
- function te(e) {
113
- l.maskClosable && $(e);
114
- }
115
- function ne(e) {
116
- e.key === "Escape" && l.keyboard && (e.stopPropagation(), $(e)), Z(e);
117
- }
118
- function re() {
119
- M("afterOpenChange", !0);
120
- }
121
- function ie() {
122
- M("afterOpenChange", !1), X && typeof X.focus == "function" && (X.focus(), X = null);
123
- }
124
- function ae() {
125
- l.modelValue === void 0 ? F.value = !0 : M("update:modelValue", !0);
126
- }
127
- return A({ open: ae }), (n, u) => (m(), r(e, { to: q.value }, [c(t, {
128
- name: "b-drawer",
129
- onAfterEnter: re,
130
- onAfterLeave: ie
131
- }, {
132
- default: x(() => [I.value ? (m(), a("div", {
133
- key: 0,
134
- class: d(["b-drawer-root", `b-drawer-root--${l.placement}`]),
135
- style: f({ zIndex: l.zIndex })
136
- }, [l.mask ? (m(), a("div", {
137
- key: 0,
138
- class: "b-drawer__mask",
139
- "aria-hidden": "true",
140
- onClick: te
141
- })) : i("", !0), o("div", {
142
- ref_key: "drawerRef",
143
- ref: Y,
144
- class: d(["b-drawer", [
145
- `b-drawer--${l.placement}`,
146
- `b-drawer--${l.size}`,
147
- {
148
- "b-drawer--has-header": K.value,
149
- "b-drawer--has-footer": G.value
150
- }
151
- ]]),
152
- role: "dialog",
153
- "aria-modal": "true",
154
- "aria-label": U.value ? void 0 : l.ariaLabel,
155
- "aria-labelledby": U.value ? v(P) : void 0,
156
- style: f(J.value),
157
- tabindex: "-1",
158
- onKeydown: ne
159
- }, [
160
- K.value ? (m(), a("div", C, [o("div", w, [l.closable ? (m(), a("button", {
161
- key: 0,
162
- type: "button",
163
- class: "b-drawer__close",
164
- "aria-label": "Close drawer",
165
- onClick: $
166
- }, [g(n.$slots, "closeIcon", {}, () => [u[0] ||= o("svg", {
167
- class: "b-drawer__close-icon",
168
- viewBox: "0 0 24 24",
169
- xmlns: "http://www.w3.org/2000/svg",
170
- "aria-hidden": "true",
171
- focusable: "false"
172
- }, [o("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" })], -1)])])) : i("", !0), U.value ? (m(), a("div", {
173
- key: 1,
174
- id: v(P),
175
- class: "b-drawer__title"
176
- }, [g(n.$slots, "title", {}, () => [s(_(l.title), 1)])], 8, T)) : i("", !0)]), W.value ? (m(), a("div", E, [g(n.$slots, "extra", {}, () => [s(_(l.extra), 1)])])) : i("", !0)])) : i("", !0),
177
- R.value ? (m(), a("div", D, [l.loading ? (m(), a("div", O, [...u[1] ||= [o("svg", {
178
- class: "b-drawer__spinner",
179
- viewBox: "0 0 24 24",
180
- xmlns: "http://www.w3.org/2000/svg",
181
- "aria-hidden": "true",
182
- focusable: "false"
183
- }, [o("circle", {
184
- cx: "12",
185
- cy: "12",
186
- r: "10",
187
- fill: "none",
188
- stroke: "currentColor",
189
- "stroke-width": "3",
190
- "stroke-dasharray": "31.4 31.4",
191
- "stroke-linecap": "round"
192
- })], -1), o("span", { class: "b-drawer__loading-text" }, "Loading…", -1)]])) : g(n.$slots, "default", { key: 1 })])) : i("", !0),
193
- G.value ? (m(), a("div", k, [g(n.$slots, "footer", {}, () => [s(_(l.footer), 1)])])) : i("", !0)
194
- ], 46, S)], 6)) : i("", !0)]),
195
- _: 3
196
- })], 8, ["to"]));
30
+ ]);
31
+ return (e, r) => u.value ? (a(), t("span", {
32
+ key: 0,
33
+ class: i(m.value),
34
+ role: "separator",
35
+ "aria-orientation": "vertical"
36
+ }, null, 2)) : d.value && !f.value ? (a(), t("div", {
37
+ key: 1,
38
+ class: i(m.value),
39
+ role: "separator",
40
+ "aria-orientation": "horizontal"
41
+ }, null, 2)) : (a(), t("div", {
42
+ key: 2,
43
+ class: i(m.value),
44
+ role: "separator",
45
+ "aria-orientation": "horizontal"
46
+ }, [n("span", c, [o(e.$slots, "default")])], 2));
197
47
  }
198
48
  });
199
49
  //#endregion
200
- export { A as default };
50
+ export { l as default };
201
51
 
202
52
  //# sourceMappingURL=design-system81.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"design-system81.js","names":[],"sources":["../src/components/BDrawer/BDrawer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { BDrawerPlacement, BDrawerSize } from '@/types';\nimport { computed, nextTick, onBeforeUnmount, ref, useId, watch } from 'vue';\n\n// ─────────────────────────────────────────────\n// Props & emits\n// ─────────────────────────────────────────────\nconst {\n placement = 'right',\n size = 'default',\n title = '',\n closable = true,\n mask = true,\n maskClosable = true,\n keyboard = true,\n destroyOnClose = false,\n width,\n height,\n zIndex = 1000,\n getContainer,\n autoFocus = true,\n modelValue = undefined,\n forceRender = false,\n extra = '',\n footer = '',\n loading = false,\n ariaLabel,\n} = defineProps<{\n /** Direction from which the drawer slides in. */\n placement?: BDrawerPlacement;\n /** Preset width/height: 'default' (378px) or 'large' (736px). */\n size?: BDrawerSize;\n /** Drawer title. Also accepts the `title` slot. */\n title?: string;\n /** Whether to show the close button. */\n closable?: boolean;\n /** Whether to show the mask overlay. */\n mask?: boolean;\n /** Clicking the mask closes the drawer. */\n maskClosable?: boolean;\n /** Pressing Escape closes the drawer. */\n keyboard?: boolean;\n /** Destroy child components when closing. */\n destroyOnClose?: boolean;\n /** Custom width (overrides size) for left/right placement. */\n width?: string | number;\n /** Custom height (overrides size) for top/bottom placement. */\n height?: string | number;\n /** z-index of the drawer. */\n zIndex?: number;\n /**\n * CSS selector or element to teleport the drawer into.\n * Defaults to `body`.\n */\n getContainer?: string | HTMLElement;\n /** Whether to auto-focus the first focusable element when opened. */\n autoFocus?: boolean;\n /**\n * Controlled visibility - bind with `v-model`.\n * When not provided the drawer manages its own state.\n */\n modelValue?: boolean;\n /** Force render the drawer content even when hidden. */\n forceRender?: boolean;\n /** Extra content in the header right area (also accepts the `extra` slot). */\n extra?: string;\n /** Footer content (also accepts the `footer` slot). */\n footer?: string;\n /** Show loading spinner in body area. */\n loading?: boolean;\n /**\n * Accessible label for the dialog when no visible title is present.\n * Required when `closable=false` and no `title` prop or `#title` slot is used.\n */\n ariaLabel?: string;\n}>();\n\nconst emit = defineEmits<{\n /** Fired when the user requests to close the drawer. */\n (e: 'close', event: MouseEvent | KeyboardEvent): void;\n /** Fired after the close transition completes. */\n (e: 'afterOpenChange', open: boolean): void;\n /** v-model support */\n (e: 'update:modelValue', value: boolean): void;\n}>();\n\nconst slots = defineSlots<{\n /** Main content of the drawer. */\n default?(): unknown;\n /** Overrides the `title` prop. */\n title?(): unknown;\n /** Overrides the `extra` prop (right side of header). */\n extra?(): unknown;\n /** Overrides the `footer` prop. */\n footer?(): unknown;\n /** Custom close icon. */\n closeIcon?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────\nconst titleId = useId();\n\n/** Uncontrolled visibility. */\nconst internalOpen = ref(false);\n\n/** Effective visibility. */\nconst isOpen = computed(() => (modelValue !== undefined ? modelValue : internalOpen.value));\n\n/** Whether the drawer has ever been opened (for lazy rendering). */\nconst hasBeenOpened = ref(false);\n\n/** Whether the content should render. */\nconst shouldRender = computed(() => {\n if (forceRender) return true;\n if (destroyOnClose) return isOpen.value;\n return hasBeenOpened.value || isOpen.value;\n});\n\n// Track when drawer opens at least once\nwatch(isOpen, (val) => {\n if (val) hasBeenOpened.value = true;\n});\n\n// ─────────────────────────────────────────────\n// Derived state\n// ─────────────────────────────────────────────\nconst isHorizontal = computed(() => placement === 'left' || placement === 'right');\n\nconst sizeMap: Record<BDrawerSize, number> = {\n default: 378,\n large: 736,\n};\n\nconst resolvedWidth = computed(() => {\n if (width !== undefined) return typeof width === 'number' ? `${width}px` : width;\n return isHorizontal.value ? `${sizeMap[size]}px` : '100%';\n});\n\nconst resolvedHeight = computed(() => {\n if (height !== undefined) return typeof height === 'number' ? `${height}px` : height;\n return !isHorizontal.value ? `${sizeMap[size]}px` : '100%';\n});\n\nconst hasTitle = computed(() => Boolean(title || slots.title));\nconst hasExtra = computed(() => Boolean(extra || slots.extra));\nconst hasFooter = computed(() => Boolean(footer || slots.footer));\nconst hasHeader = computed(() => hasTitle.value || closable || hasExtra.value);\n\nconst teleportTarget = computed(() => {\n if (getContainer) return getContainer;\n return 'body';\n});\n\nconst panelStyle = computed(() => ({\n width: resolvedWidth.value,\n height: resolvedHeight.value,\n zIndex,\n}));\n\n// ─────────────────────────────────────────────\n// Focus management\n// ─────────────────────────────────────────────\nconst drawerRef = ref<HTMLElement | null>(null);\nlet previouslyFocusedElement: HTMLElement | null = null;\n\nfunction trapFocus(event: KeyboardEvent) {\n if (event.key !== 'Tab' || !drawerRef.value) return;\n\n const focusableSelectors =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n const focusable = Array.from(drawerRef.value.querySelectorAll<HTMLElement>(focusableSelectors));\n\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (event.shiftKey) {\n if (document.activeElement === first) {\n event.preventDefault();\n last.focus();\n }\n } else {\n if (document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n }\n}\n\nfunction focusFirst() {\n if (!autoFocus || !drawerRef.value) return;\n\n nextTick(() => {\n if (!drawerRef.value) return;\n const focusableSelectors =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n const first = drawerRef.value.querySelector<HTMLElement>(focusableSelectors);\n if (first) {\n first.focus();\n } else {\n // Focus the panel itself as a fallback\n drawerRef.value.focus();\n }\n });\n}\n\nwatch(isOpen, (val) => {\n if (val) {\n previouslyFocusedElement = document.activeElement as HTMLElement | null;\n nextTick(() => focusFirst());\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n});\n\nonBeforeUnmount(() => {\n document.body.style.overflow = '';\n});\n\n// ─────────────────────────────────────────────\n// Behaviour\n// ─────────────────────────────────────────────\nfunction requestClose(event: MouseEvent | KeyboardEvent) {\n emit('close', event);\n if (modelValue !== undefined) {\n emit('update:modelValue', false);\n } else {\n internalOpen.value = false;\n }\n}\n\nfunction onMaskClick(event: MouseEvent) {\n if (maskClosable) {\n requestClose(event);\n }\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' && keyboard) {\n event.stopPropagation();\n requestClose(event);\n }\n trapFocus(event);\n}\n\nfunction onAfterEnter() {\n emit('afterOpenChange', true);\n}\n\nfunction onAfterLeave() {\n emit('afterOpenChange', false);\n // Restore focus to the previously focused element\n if (previouslyFocusedElement && typeof previouslyFocusedElement.focus === 'function') {\n previouslyFocusedElement.focus();\n previouslyFocusedElement = null;\n }\n}\n\n// ─────────────────────────────────────────────\n// Public API\n// ─────────────────────────────────────────────\nfunction open() {\n if (modelValue !== undefined) {\n emit('update:modelValue', true);\n } else {\n internalOpen.value = true;\n }\n}\n\ndefineExpose({ open });\n</script>\n\n<template>\n <Teleport :to=\"teleportTarget\">\n <Transition name=\"b-drawer\" @after-enter=\"onAfterEnter\" @after-leave=\"onAfterLeave\">\n <div\n v-if=\"isOpen\"\n class=\"b-drawer-root\"\n :class=\"`b-drawer-root--${placement}`\"\n :style=\"{ zIndex }\"\n >\n <!-- Mask -->\n <div v-if=\"mask\" class=\"b-drawer__mask\" aria-hidden=\"true\" @click=\"onMaskClick\" />\n\n <!-- Panel -->\n <div\n ref=\"drawerRef\"\n class=\"b-drawer\"\n :class=\"[\n `b-drawer--${placement}`,\n `b-drawer--${size}`,\n {\n 'b-drawer--has-header': hasHeader,\n 'b-drawer--has-footer': hasFooter,\n },\n ]\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-label=\"!hasTitle ? ariaLabel : undefined\"\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\n :style=\"panelStyle\"\n tabindex=\"-1\"\n @keydown=\"onKeydown\"\n >\n <!-- Header -->\n <div v-if=\"hasHeader\" class=\"b-drawer__header\">\n <div class=\"b-drawer__header-title-wrapper\">\n <!-- Close button -->\n <button\n v-if=\"closable\"\n type=\"button\"\n class=\"b-drawer__close\"\n aria-label=\"Close drawer\"\n @click=\"requestClose\"\n >\n <slot name=\"closeIcon\">\n <svg\n class=\"b-drawer__close-icon\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n />\n </svg>\n </slot>\n </button>\n\n <!-- Title -->\n <div v-if=\"hasTitle\" :id=\"titleId\" class=\"b-drawer__title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n </div>\n\n <!-- Extra -->\n <div v-if=\"hasExtra\" class=\"b-drawer__extra\">\n <slot name=\"extra\">{{ extra }}</slot>\n </div>\n </div>\n\n <!-- Body -->\n <div v-if=\"shouldRender\" class=\"b-drawer__body\">\n <div v-if=\"loading\" class=\"b-drawer__loading\" aria-live=\"polite\">\n <svg\n class=\"b-drawer__spinner\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-dasharray=\"31.4 31.4\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span class=\"b-drawer__loading-text\">Loading…</span>\n </div>\n <slot v-else />\n </div>\n\n <!-- Footer -->\n <div v-if=\"hasFooter\" class=\"b-drawer__footer\">\n <slot name=\"footer\">{{ footer }}</slot>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (tokens)\n ──────────────────────────────────────────── */\n.b-drawer-root {\n --b-drawer-bg: #fff;\n --b-drawer-color: oklch(25% 0 0);\n --b-drawer-mask-bg: rgba(0, 0, 0, 0.45);\n --b-drawer-border-color: oklch(90% 0 0);\n --b-drawer-header-padding: 1rem 1.5rem;\n --b-drawer-body-padding: 1.5rem;\n --b-drawer-footer-padding: 0.5rem 1rem;\n --b-drawer-close-color: oklch(40% 0 0);\n --b-drawer-close-hover-color: oklch(20% 0 0);\n --b-drawer-title-font-size: 1rem;\n --b-drawer-title-font-weight: 600;\n --b-drawer-title-line-height: 1.5;\n --b-drawer-transition-duration: 300ms;\n --b-drawer-shadow:\n -6px 0 16px 0 rgba(0, 0, 0, 0.08), -3px 0 6px -4px rgba(0, 0, 0, 0.12),\n -9px 0 28px 8px rgba(0, 0, 0, 0.05);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-drawer-root {\n --b-drawer-bg: oklch(20% 0 0);\n --b-drawer-color: oklch(90% 0 0);\n --b-drawer-mask-bg: rgba(0, 0, 0, 0.65);\n --b-drawer-border-color: oklch(30% 0 0);\n --b-drawer-close-color: oklch(65% 0 0);\n --b-drawer-close-hover-color: oklch(90% 0 0);\n --b-drawer-shadow:\n -6px 0 16px 0 rgba(0, 0, 0, 0.24), -3px 0 6px -4px rgba(0, 0, 0, 0.36),\n -9px 0 28px 8px rgba(0, 0, 0, 0.2);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-drawer-root {\n --b-drawer-bg: oklch(20% 0 0);\n --b-drawer-color: oklch(90% 0 0);\n --b-drawer-mask-bg: rgba(0, 0, 0, 0.65);\n --b-drawer-border-color: oklch(30% 0 0);\n --b-drawer-close-color: oklch(65% 0 0);\n --b-drawer-close-hover-color: oklch(90% 0 0);\n --b-drawer-shadow:\n -6px 0 16px 0 rgba(0, 0, 0, 0.24), -3px 0 6px -4px rgba(0, 0, 0, 0.36),\n -9px 0 28px 8px rgba(0, 0, 0, 0.2);\n }\n}\n\n/* ─────────────────────────────────────────────\n Root wrapper (mask + panel)\n ───────────────────────────────────────────── */\n.b-drawer-root {\n position: fixed;\n inset: 0;\n}\n\n/* ── Mask ── */\n.b-drawer__mask {\n position: absolute;\n inset: 0;\n background: var(--b-drawer-mask-bg);\n}\n\n/* ── Panel base ── */\n.b-drawer {\n position: absolute;\n display: flex;\n flex-direction: column;\n background: var(--b-drawer-bg);\n color: var(--b-drawer-color);\n box-shadow: var(--b-drawer-shadow);\n outline: none;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n/* Placement positioning */\n.b-drawer--right {\n top: 0;\n right: 0;\n bottom: 0;\n}\n\n.b-drawer--left {\n top: 0;\n left: 0;\n bottom: 0;\n}\n\n.b-drawer--top {\n top: 0;\n left: 0;\n right: 0;\n}\n\n.b-drawer--bottom {\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n/* ── Header ── */\n.b-drawer__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--b-drawer-header-padding);\n border-bottom: 1px solid var(--b-drawer-border-color);\n flex-shrink: 0;\n}\n\n.b-drawer__header-title-wrapper {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n min-width: 0;\n flex: 1;\n}\n\n.b-drawer__title {\n font-size: var(--b-drawer-title-font-size);\n font-weight: var(--b-drawer-title-font-weight);\n line-height: var(--b-drawer-title-line-height);\n color: var(--b-drawer-color);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.b-drawer__extra {\n flex-shrink: 0;\n}\n\n/* ── Close button ── */\n.b-drawer__close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n border-radius: 0.25rem;\n background: transparent;\n color: var(--b-drawer-close-color);\n cursor: pointer;\n width: 1.375rem;\n height: 1.375rem;\n font-size: 1rem;\n line-height: 1;\n transition: color var(--b-drawer-transition-duration) ease;\n}\n\n.b-drawer__close:hover {\n color: var(--b-drawer-close-hover-color);\n}\n\n.b-drawer__close:focus-visible {\n outline: 2px solid oklch(62.3% 0.214 259.815);\n outline-offset: 2px;\n}\n\n.b-drawer__close-icon {\n width: 1em;\n height: 1em;\n fill: currentColor;\n display: block;\n}\n\n/* ── Body ── */\n.b-drawer__body {\n flex: 1;\n padding: var(--b-drawer-body-padding);\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n/* ── Footer ── */\n.b-drawer__footer {\n flex-shrink: 0;\n padding: var(--b-drawer-footer-padding);\n border-top: 1px solid var(--b-drawer-border-color);\n}\n\n/* ── Loading spinner ── */\n.b-drawer__loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.75rem;\n padding: 2rem;\n color: var(--b-drawer-close-color);\n}\n\n.b-drawer__spinner {\n width: 2rem;\n height: 2rem;\n animation: b-drawer-spin 1s linear infinite;\n}\n\n.b-drawer__loading-text {\n font-size: 0.875rem;\n}\n\n@keyframes b-drawer-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* ─────────────────────────────────────────────\n Slide transitions\n ─────────────────────────────────────────────\n Vue's <Transition> adds .b-drawer-{enter|leave}-* classes\n to the root element (.b-drawer-root). We target the\n children (.b-drawer and .b-drawer__mask) from there.\n ───────────────────────────────────────────── */\n\n/*\n * Vue's <Transition> listens for `transitionend` on the root element\n * (.b-drawer-root) to know when the leave animation finishes.\n * We must put a real transition on the root itself so that event fires.\n * We use `visibility` which is invisible to the user but gives Vue\n * the transitionend signal it needs.\n */\n.b-drawer-enter-active,\n.b-drawer-leave-active {\n transition: visibility var(--b-drawer-transition-duration) linear;\n}\n\n.b-drawer-leave-to {\n visibility: hidden;\n}\n\n/* - Active phase: set transition on children - */\n.b-drawer-enter-active > .b-drawer,\n.b-drawer-leave-active > .b-drawer {\n transition: transform var(--b-drawer-transition-duration) cubic-bezier(0.7, 0.3, 0.1, 1);\n}\n\n.b-drawer-enter-active > .b-drawer__mask,\n.b-drawer-leave-active > .b-drawer__mask {\n transition: opacity var(--b-drawer-transition-duration) ease;\n}\n\n/* - From / To: mask fades - */\n.b-drawer-enter-from > .b-drawer__mask,\n.b-drawer-leave-to > .b-drawer__mask {\n opacity: 0;\n}\n\n/* - From / To: panel slides (right) - */\n.b-drawer-enter-from > .b-drawer--right,\n.b-drawer-leave-to > .b-drawer--right {\n transform: translateX(100%);\n}\n\n/* - From / To: panel slides (left) - */\n.b-drawer-enter-from > .b-drawer--left,\n.b-drawer-leave-to > .b-drawer--left {\n transform: translateX(-100%);\n}\n\n/* - From / To: panel slides (top) - */\n.b-drawer-enter-from > .b-drawer--top,\n.b-drawer-leave-to > .b-drawer--top {\n transform: translateY(-100%);\n}\n\n/* - From / To: panel slides (bottom) - */\n.b-drawer-enter-from > .b-drawer--bottom,\n.b-drawer-leave-to > .b-drawer--bottom {\n transform: translateY(100%);\n}\n\n/* ── Reduced motion ── */\n@media (prefers-reduced-motion: reduce) {\n .b-drawer-enter-active,\n .b-drawer-leave-active,\n .b-drawer-enter-active > .b-drawer,\n .b-drawer-leave-active > .b-drawer,\n .b-drawer-enter-active > .b-drawer__mask,\n .b-drawer-leave-active > .b-drawer__mask {\n transition-duration: 0ms;\n }\n\n .b-drawer__spinner {\n animation: none;\n }\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"design-system81.js","names":[],"sources":["../src/components/BDivider/BDivider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type {\n BDividerOrientation,\n BDividerSize,\n BDividerTitlePlacement,\n BDividerVariant,\n} from './types.ts';\n\n// ─────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────\nconst {\n orientation = 'horizontal',\n variant = 'solid',\n dashed = false,\n plain = true,\n size = 'large',\n titlePlacement = 'center',\n} = defineProps<{\n /**\n * Line direction.\n * - `'horizontal'` - a full-width horizontal rule (default)\n * - `'vertical'` - an inline vertical separator\n * @default 'horizontal'\n */\n orientation?: BDividerOrientation;\n /**\n * Line style.\n * - `'solid'` - continuous line (default)\n * - `'dashed'` - dashed line\n * - `'dotted'` - dotted line\n * @default 'solid'\n */\n variant?: BDividerVariant;\n /**\n * Shorthand for `variant=\"dashed\"`. Overridden when `variant` is also set.\n * Kept for AntD API compatibility.\n * @default false\n * @deprecated Prefer `variant` prop\n */\n dashed?: boolean;\n /**\n * Render the text in plain (normal weight) style rather than bold.\n * Only meaningful for horizontal dividers with content.\n * @default true\n */\n plain?: boolean;\n /**\n * Vertical spacing around horizontal dividers (ignored for vertical orientation).\n * - `'small'` - tighter margin\n * - `'medium'` - medium margin\n * - `'large'` - standard Ant Design margin (default)\n * @default 'large'\n */\n size?: BDividerSize;\n /**\n * Horizontal position of the title text inside a horizontal divider.\n * - `'start'` - align text to the leading edge\n * - `'center'` - centre the text (default)\n * - `'end'` - align text to the trailing edge\n * @default 'center'\n */\n titlePlacement?: BDividerTitlePlacement;\n}>();\n\nconst slots = defineSlots<{\n /** Optional title or content placed inside the divider line. */\n default?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Computed\n// ─────────────────────────────────────────────\nconst isVertical = computed(() => orientation === 'vertical');\nconst isHorizontal = computed(() => orientation === 'horizontal');\n\n/** Whether there is slot content to render. */\nconst hasContent = computed(() => Boolean(slots.default));\n\n/**\n * Resolve the effective line style.\n * `dashed` prop is a legacy alias for `variant=\"dashed\"`.\n */\nconst effectiveVariant = computed<BDividerVariant>(() => {\n if (dashed && variant === 'solid') return 'dashed';\n return variant;\n});\n\nconst rootClass = computed(() => [\n 'b-divider',\n `b-divider--${orientation}`,\n `b-divider--${effectiveVariant.value}`,\n `b-divider--size-${size}`,\n {\n 'b-divider--with-text': hasContent.value && isHorizontal.value,\n [`b-divider--text-${titlePlacement}`]: hasContent.value && isHorizontal.value,\n 'b-divider--plain': plain,\n },\n]);\n</script>\n\n<template>\n <!--\n Vertical divider: a presentational inline separator.\n role=\"separator\" with aria-orientation covers both horizontal and vertical.\n -->\n <span v-if=\"isVertical\" :class=\"rootClass\" role=\"separator\" aria-orientation=\"vertical\" />\n\n <!--\n Horizontal divider WITHOUT content.\n <div role=\"separator\"> is used instead of <hr> because axe-core evaluates\n <hr> (which carries implicit role=\"separator\") for text-colour contrast by\n reading its CSS `color` property. A <div role=\"separator\"> with no text\n content is exempt from that check (WCAG SC 1.4.3 applies only to text).\n -->\n <div\n v-else-if=\"isHorizontal && !hasContent\"\n :class=\"rootClass\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />\n\n <!--\n Horizontal divider WITH content: <div role=\"separator\"> wrapping the text.\n <hr> cannot contain children, so we fall back to a div.\n -->\n <div v-else :class=\"rootClass\" role=\"separator\" aria-orientation=\"horizontal\">\n <span class=\"b-divider__content\">\n <slot />\n </span>\n </div>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (design tokens)\n Scoped to .b-divider — never on :root\n ──────────────────────────────────────────── */\n.b-divider {\n /* AntD token: textPaddingInline → horizontal padding around inner text */\n --b-divider-text-padding-inline: 1em;\n\n /* AntD token: orientationMargin → fraction of width from the near edge for start/end text */\n --b-divider-orientation-margin: 0.05;\n\n /* AntD token: verticalMarginInline → horizontal margin on vertical dividers */\n --b-divider-vertical-margin-inline: 8px;\n\n /* Colour */\n --b-divider-color: oklch(88% 0.01 264); /* neutral border */\n --b-divider-text-color: oklch(32% 0.02 264);\n\n /* Typography */\n --b-divider-font-size: 1rem;\n --b-divider-font-weight-text: 500; /* \"with-text\" non-plain heading weight */\n\n /* Size (margin-block for horizontal) */\n --b-divider-margin-block-large: 1.5rem; /* size=large (AntD default) */\n --b-divider-margin-block-medium: 0.75rem; /* size=medium */\n --b-divider-margin-block-small: 0.25rem; /* size=small */\n\n /* Line geometry */\n --b-divider-line-width: 1px;\n}\n\n/* ── Dark mode ───────────────────────────────────────────────────────────\n Use only the attribute selector, consistent with every other component\n in this system (BAlert, BCard, etc.). The @media (prefers-color-scheme)\n query is deliberately omitted: Storybook controls the theme by toggling\n [data-prefers-color='dark'] on <html>. A media-query override would fire\n based on the OS/test-runner's colour scheme regardless of the canvas\n setting, producing light text (#c7cedb) on a white canvas — failing\n WCAG 1.4.3 contrast in automated a11y checks.\n ──────────────────────────────────────────────────────────────────────── */\n[data-prefers-color='dark'] .b-divider {\n --b-divider-color: oklch(35% 0.02 264);\n --b-divider-text-color: oklch(85% 0.02 264);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-divider {\n --b-divider-color: oklch(35% 0.02 264);\n --b-divider-text-color: oklch(85% 0.02 264);\n }\n}\n\n/* ─────────────────────────────────────────────\n Horizontal — <div role=separator> (no text) or <div role=separator> (with text)\n ───────────────────────────────────────────── */\n.b-divider--horizontal {\n display: block;\n clear: both;\n width: 100%;\n margin-block: var(--b-divider-margin-block-large);\n border: none;\n border-block-start: var(--b-divider-line-width) var(--b-divider-color);\n /* default style is overridden by variant classes below */\n border-block-start-style: solid;\n box-sizing: border-box;\n}\n\n/* Size variants (horizontal only) */\n.b-divider--horizontal.b-divider--size-small {\n margin-block: var(--b-divider-margin-block-small);\n}\n.b-divider--horizontal.b-divider--size-medium {\n margin-block: var(--b-divider-margin-block-medium);\n}\n.b-divider--horizontal.b-divider--size-large {\n margin-block: var(--b-divider-margin-block-large);\n}\n\n/* ─────────────────────────────────────────────\n Horizontal WITH text\n ───────────────────────────────────────────── */\n.b-divider--with-text {\n display: flex;\n align-items: center;\n border-block-start-style: none; /* lines rendered via ::before / ::after */\n white-space: nowrap;\n font-size: var(--b-divider-font-size);\n color: var(--b-divider-text-color);\n font-weight: var(--b-divider-font-weight-text);\n}\n\n/* Plain text: normal weight */\n.b-divider--with-text.b-divider--plain {\n font-weight: normal;\n}\n\n/* Lines flanking the text */\n.b-divider--with-text::before,\n.b-divider--with-text::after {\n content: '';\n flex: 1;\n border-block-start: var(--b-divider-line-width) solid var(--b-divider-color);\n}\n\n/* variant overrides for ::before / ::after */\n.b-divider--dashed.b-divider--with-text::before,\n.b-divider--dashed.b-divider--with-text::after {\n border-block-start-style: dashed;\n}\n.b-divider--dotted.b-divider--with-text::before,\n.b-divider--dotted.b-divider--with-text::after {\n border-block-start-style: dotted;\n}\n\n/* Text placement — start: push text to left edge */\n.b-divider--text-start::before {\n /* orientationMargin is a unitless fraction (0.05 = 5% of width) */\n flex: calc(var(--b-divider-orientation-margin) * 1);\n min-width: 0;\n}\n.b-divider--text-start::after {\n flex: 1;\n}\n\n/* Text placement — end: push text to right edge */\n.b-divider--text-end::after {\n flex: calc(var(--b-divider-orientation-margin) * 1);\n min-width: 0;\n}\n.b-divider--text-end::before {\n flex: 1;\n}\n\n/* Text placement — center (default): equal halves */\n.b-divider--text-center::before,\n.b-divider--text-center::after {\n flex: 1;\n}\n\n.b-divider__content {\n padding-inline: var(--b-divider-text-padding-inline);\n /* prevent the text itself from shrinking below its natural width */\n flex-shrink: 0;\n}\n\n/* ─────────────────────────────────────────────\n Line-style variants (horizontal no-text)\n ───────────────────────────────────────────── */\n.b-divider--horizontal:not(.b-divider--with-text).b-divider--dashed {\n border-block-start-style: dashed;\n}\n.b-divider--horizontal:not(.b-divider--with-text).b-divider--dotted {\n border-block-start-style: dotted;\n}\n\n/* ─────────────────────────────────────────────\n Vertical divider\n ───────────────────────────────────────────── */\n.b-divider--vertical {\n display: inline-block;\n /* explicit height is not set — inherits from line-height of surrounding text */\n height: 0.9em;\n border-inline-start: var(--b-divider-line-width) solid var(--b-divider-color);\n border-block-start: none;\n vertical-align: middle;\n margin-inline: var(--b-divider-vertical-margin-inline);\n}\n\n.b-divider--vertical.b-divider--dashed {\n border-inline-start-style: dashed;\n}\n.b-divider--vertical.b-divider--dotted {\n border-inline-start-style: dotted;\n}\n\n/* ─────────────────────────────────────────────\n Reduced motion\n (dividers have no animations, but guard is here for completeness)\n ───────────────────────────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n .b-divider {\n transition: none;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAkEA,IAAM,IAAQ,GAGV,EAKE,IAAa,QAAe,EAAA,gBAAgB,WAAW,EACvD,IAAe,QAAe,EAAA,gBAAgB,aAAa,EAG3D,IAAa,QAAe,EAAQ,EAAM,QAAS,EAMnD,IAAmB,QACnB,EAAA,UAAU,EAAA,YAAY,UAAgB,WACnC,EAAA,QACP,EAEI,IAAY,QAAe;GAC/B;GACA,cAAc,EAAA;GACd,cAAc,EAAiB;GAC/B,mBAAmB,EAAA;GACnB;IACE,wBAAwB,EAAW,SAAS,EAAa;KACxD,mBAAmB,EAAA,mBAAmB,EAAW,SAAS,EAAa;IACxE,oBAAoB,EAAA;IACrB;GACF,CAAC;mBAQY,EAAA,SAAA,GAAA,EAAZ,EAA0F,QAAA;;GAAjE,OAAK,EAAE,EAAA,MAAS;GAAE,MAAK;GAAY,oBAAiB;iBAUhE,EAAA,SAAY,CAAK,EAAA,SAAA,GAAA,EAD9B,EAKE,OAAA;;GAHC,OAAK,EAAE,EAAA,MAAS;GACjB,MAAK;GACL,oBAAiB;uBAOnB,EAIM,OAAA;;GAJO,OAAK,EAAE,EAAA,MAAS;GAAE,MAAK;GAAY,oBAAiB;MAC/D,EAEO,QAFP,GAEO,CADL,EAAQ,EAAA,QAAA,UAAA,CAAA,CAAA,CAAA,EAAA,EAAA"}
@@ -1,6 +1,6 @@
1
1
  import e from "./design-system81.js";
2
2
  /* empty css */
3
- //#region src/components/BDrawer/BDrawer.vue
3
+ //#region src/components/BDivider/BDivider.vue
4
4
  var t = e;
5
5
  //#endregion
6
6
  export { t as default };
@@ -1 +1 @@
1
- {"version":3,"file":"design-system83.js","names":[],"sources":["../src/components/BDrawer/BDrawer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { BDrawerPlacement, BDrawerSize } from '@/types';\nimport { computed, nextTick, onBeforeUnmount, ref, useId, watch } from 'vue';\n\n// ─────────────────────────────────────────────\n// Props & emits\n// ─────────────────────────────────────────────\nconst {\n placement = 'right',\n size = 'default',\n title = '',\n closable = true,\n mask = true,\n maskClosable = true,\n keyboard = true,\n destroyOnClose = false,\n width,\n height,\n zIndex = 1000,\n getContainer,\n autoFocus = true,\n modelValue = undefined,\n forceRender = false,\n extra = '',\n footer = '',\n loading = false,\n ariaLabel,\n} = defineProps<{\n /** Direction from which the drawer slides in. */\n placement?: BDrawerPlacement;\n /** Preset width/height: 'default' (378px) or 'large' (736px). */\n size?: BDrawerSize;\n /** Drawer title. Also accepts the `title` slot. */\n title?: string;\n /** Whether to show the close button. */\n closable?: boolean;\n /** Whether to show the mask overlay. */\n mask?: boolean;\n /** Clicking the mask closes the drawer. */\n maskClosable?: boolean;\n /** Pressing Escape closes the drawer. */\n keyboard?: boolean;\n /** Destroy child components when closing. */\n destroyOnClose?: boolean;\n /** Custom width (overrides size) for left/right placement. */\n width?: string | number;\n /** Custom height (overrides size) for top/bottom placement. */\n height?: string | number;\n /** z-index of the drawer. */\n zIndex?: number;\n /**\n * CSS selector or element to teleport the drawer into.\n * Defaults to `body`.\n */\n getContainer?: string | HTMLElement;\n /** Whether to auto-focus the first focusable element when opened. */\n autoFocus?: boolean;\n /**\n * Controlled visibility - bind with `v-model`.\n * When not provided the drawer manages its own state.\n */\n modelValue?: boolean;\n /** Force render the drawer content even when hidden. */\n forceRender?: boolean;\n /** Extra content in the header right area (also accepts the `extra` slot). */\n extra?: string;\n /** Footer content (also accepts the `footer` slot). */\n footer?: string;\n /** Show loading spinner in body area. */\n loading?: boolean;\n /**\n * Accessible label for the dialog when no visible title is present.\n * Required when `closable=false` and no `title` prop or `#title` slot is used.\n */\n ariaLabel?: string;\n}>();\n\nconst emit = defineEmits<{\n /** Fired when the user requests to close the drawer. */\n (e: 'close', event: MouseEvent | KeyboardEvent): void;\n /** Fired after the close transition completes. */\n (e: 'afterOpenChange', open: boolean): void;\n /** v-model support */\n (e: 'update:modelValue', value: boolean): void;\n}>();\n\nconst slots = defineSlots<{\n /** Main content of the drawer. */\n default?(): unknown;\n /** Overrides the `title` prop. */\n title?(): unknown;\n /** Overrides the `extra` prop (right side of header). */\n extra?(): unknown;\n /** Overrides the `footer` prop. */\n footer?(): unknown;\n /** Custom close icon. */\n closeIcon?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────\nconst titleId = useId();\n\n/** Uncontrolled visibility. */\nconst internalOpen = ref(false);\n\n/** Effective visibility. */\nconst isOpen = computed(() => (modelValue !== undefined ? modelValue : internalOpen.value));\n\n/** Whether the drawer has ever been opened (for lazy rendering). */\nconst hasBeenOpened = ref(false);\n\n/** Whether the content should render. */\nconst shouldRender = computed(() => {\n if (forceRender) return true;\n if (destroyOnClose) return isOpen.value;\n return hasBeenOpened.value || isOpen.value;\n});\n\n// Track when drawer opens at least once\nwatch(isOpen, (val) => {\n if (val) hasBeenOpened.value = true;\n});\n\n// ─────────────────────────────────────────────\n// Derived state\n// ─────────────────────────────────────────────\nconst isHorizontal = computed(() => placement === 'left' || placement === 'right');\n\nconst sizeMap: Record<BDrawerSize, number> = {\n default: 378,\n large: 736,\n};\n\nconst resolvedWidth = computed(() => {\n if (width !== undefined) return typeof width === 'number' ? `${width}px` : width;\n return isHorizontal.value ? `${sizeMap[size]}px` : '100%';\n});\n\nconst resolvedHeight = computed(() => {\n if (height !== undefined) return typeof height === 'number' ? `${height}px` : height;\n return !isHorizontal.value ? `${sizeMap[size]}px` : '100%';\n});\n\nconst hasTitle = computed(() => Boolean(title || slots.title));\nconst hasExtra = computed(() => Boolean(extra || slots.extra));\nconst hasFooter = computed(() => Boolean(footer || slots.footer));\nconst hasHeader = computed(() => hasTitle.value || closable || hasExtra.value);\n\nconst teleportTarget = computed(() => {\n if (getContainer) return getContainer;\n return 'body';\n});\n\nconst panelStyle = computed(() => ({\n width: resolvedWidth.value,\n height: resolvedHeight.value,\n zIndex,\n}));\n\n// ─────────────────────────────────────────────\n// Focus management\n// ─────────────────────────────────────────────\nconst drawerRef = ref<HTMLElement | null>(null);\nlet previouslyFocusedElement: HTMLElement | null = null;\n\nfunction trapFocus(event: KeyboardEvent) {\n if (event.key !== 'Tab' || !drawerRef.value) return;\n\n const focusableSelectors =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n const focusable = Array.from(drawerRef.value.querySelectorAll<HTMLElement>(focusableSelectors));\n\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (event.shiftKey) {\n if (document.activeElement === first) {\n event.preventDefault();\n last.focus();\n }\n } else {\n if (document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n }\n}\n\nfunction focusFirst() {\n if (!autoFocus || !drawerRef.value) return;\n\n nextTick(() => {\n if (!drawerRef.value) return;\n const focusableSelectors =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n const first = drawerRef.value.querySelector<HTMLElement>(focusableSelectors);\n if (first) {\n first.focus();\n } else {\n // Focus the panel itself as a fallback\n drawerRef.value.focus();\n }\n });\n}\n\nwatch(isOpen, (val) => {\n if (val) {\n previouslyFocusedElement = document.activeElement as HTMLElement | null;\n nextTick(() => focusFirst());\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n});\n\nonBeforeUnmount(() => {\n document.body.style.overflow = '';\n});\n\n// ─────────────────────────────────────────────\n// Behaviour\n// ─────────────────────────────────────────────\nfunction requestClose(event: MouseEvent | KeyboardEvent) {\n emit('close', event);\n if (modelValue !== undefined) {\n emit('update:modelValue', false);\n } else {\n internalOpen.value = false;\n }\n}\n\nfunction onMaskClick(event: MouseEvent) {\n if (maskClosable) {\n requestClose(event);\n }\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' && keyboard) {\n event.stopPropagation();\n requestClose(event);\n }\n trapFocus(event);\n}\n\nfunction onAfterEnter() {\n emit('afterOpenChange', true);\n}\n\nfunction onAfterLeave() {\n emit('afterOpenChange', false);\n // Restore focus to the previously focused element\n if (previouslyFocusedElement && typeof previouslyFocusedElement.focus === 'function') {\n previouslyFocusedElement.focus();\n previouslyFocusedElement = null;\n }\n}\n\n// ─────────────────────────────────────────────\n// Public API\n// ─────────────────────────────────────────────\nfunction open() {\n if (modelValue !== undefined) {\n emit('update:modelValue', true);\n } else {\n internalOpen.value = true;\n }\n}\n\ndefineExpose({ open });\n</script>\n\n<template>\n <Teleport :to=\"teleportTarget\">\n <Transition name=\"b-drawer\" @after-enter=\"onAfterEnter\" @after-leave=\"onAfterLeave\">\n <div\n v-if=\"isOpen\"\n class=\"b-drawer-root\"\n :class=\"`b-drawer-root--${placement}`\"\n :style=\"{ zIndex }\"\n >\n <!-- Mask -->\n <div v-if=\"mask\" class=\"b-drawer__mask\" aria-hidden=\"true\" @click=\"onMaskClick\" />\n\n <!-- Panel -->\n <div\n ref=\"drawerRef\"\n class=\"b-drawer\"\n :class=\"[\n `b-drawer--${placement}`,\n `b-drawer--${size}`,\n {\n 'b-drawer--has-header': hasHeader,\n 'b-drawer--has-footer': hasFooter,\n },\n ]\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-label=\"!hasTitle ? ariaLabel : undefined\"\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\n :style=\"panelStyle\"\n tabindex=\"-1\"\n @keydown=\"onKeydown\"\n >\n <!-- Header -->\n <div v-if=\"hasHeader\" class=\"b-drawer__header\">\n <div class=\"b-drawer__header-title-wrapper\">\n <!-- Close button -->\n <button\n v-if=\"closable\"\n type=\"button\"\n class=\"b-drawer__close\"\n aria-label=\"Close drawer\"\n @click=\"requestClose\"\n >\n <slot name=\"closeIcon\">\n <svg\n class=\"b-drawer__close-icon\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n />\n </svg>\n </slot>\n </button>\n\n <!-- Title -->\n <div v-if=\"hasTitle\" :id=\"titleId\" class=\"b-drawer__title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n </div>\n\n <!-- Extra -->\n <div v-if=\"hasExtra\" class=\"b-drawer__extra\">\n <slot name=\"extra\">{{ extra }}</slot>\n </div>\n </div>\n\n <!-- Body -->\n <div v-if=\"shouldRender\" class=\"b-drawer__body\">\n <div v-if=\"loading\" class=\"b-drawer__loading\" aria-live=\"polite\">\n <svg\n class=\"b-drawer__spinner\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-dasharray=\"31.4 31.4\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span class=\"b-drawer__loading-text\">Loading…</span>\n </div>\n <slot v-else />\n </div>\n\n <!-- Footer -->\n <div v-if=\"hasFooter\" class=\"b-drawer__footer\">\n <slot name=\"footer\">{{ footer }}</slot>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (tokens)\n ──────────────────────────────────────────── */\n.b-drawer-root {\n --b-drawer-bg: #fff;\n --b-drawer-color: oklch(25% 0 0);\n --b-drawer-mask-bg: rgba(0, 0, 0, 0.45);\n --b-drawer-border-color: oklch(90% 0 0);\n --b-drawer-header-padding: 1rem 1.5rem;\n --b-drawer-body-padding: 1.5rem;\n --b-drawer-footer-padding: 0.5rem 1rem;\n --b-drawer-close-color: oklch(40% 0 0);\n --b-drawer-close-hover-color: oklch(20% 0 0);\n --b-drawer-title-font-size: 1rem;\n --b-drawer-title-font-weight: 600;\n --b-drawer-title-line-height: 1.5;\n --b-drawer-transition-duration: 300ms;\n --b-drawer-shadow:\n -6px 0 16px 0 rgba(0, 0, 0, 0.08), -3px 0 6px -4px rgba(0, 0, 0, 0.12),\n -9px 0 28px 8px rgba(0, 0, 0, 0.05);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-drawer-root {\n --b-drawer-bg: oklch(20% 0 0);\n --b-drawer-color: oklch(90% 0 0);\n --b-drawer-mask-bg: rgba(0, 0, 0, 0.65);\n --b-drawer-border-color: oklch(30% 0 0);\n --b-drawer-close-color: oklch(65% 0 0);\n --b-drawer-close-hover-color: oklch(90% 0 0);\n --b-drawer-shadow:\n -6px 0 16px 0 rgba(0, 0, 0, 0.24), -3px 0 6px -4px rgba(0, 0, 0, 0.36),\n -9px 0 28px 8px rgba(0, 0, 0, 0.2);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-drawer-root {\n --b-drawer-bg: oklch(20% 0 0);\n --b-drawer-color: oklch(90% 0 0);\n --b-drawer-mask-bg: rgba(0, 0, 0, 0.65);\n --b-drawer-border-color: oklch(30% 0 0);\n --b-drawer-close-color: oklch(65% 0 0);\n --b-drawer-close-hover-color: oklch(90% 0 0);\n --b-drawer-shadow:\n -6px 0 16px 0 rgba(0, 0, 0, 0.24), -3px 0 6px -4px rgba(0, 0, 0, 0.36),\n -9px 0 28px 8px rgba(0, 0, 0, 0.2);\n }\n}\n\n/* ─────────────────────────────────────────────\n Root wrapper (mask + panel)\n ───────────────────────────────────────────── */\n.b-drawer-root {\n position: fixed;\n inset: 0;\n}\n\n/* ── Mask ── */\n.b-drawer__mask {\n position: absolute;\n inset: 0;\n background: var(--b-drawer-mask-bg);\n}\n\n/* ── Panel base ── */\n.b-drawer {\n position: absolute;\n display: flex;\n flex-direction: column;\n background: var(--b-drawer-bg);\n color: var(--b-drawer-color);\n box-shadow: var(--b-drawer-shadow);\n outline: none;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n/* Placement positioning */\n.b-drawer--right {\n top: 0;\n right: 0;\n bottom: 0;\n}\n\n.b-drawer--left {\n top: 0;\n left: 0;\n bottom: 0;\n}\n\n.b-drawer--top {\n top: 0;\n left: 0;\n right: 0;\n}\n\n.b-drawer--bottom {\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n/* ── Header ── */\n.b-drawer__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--b-drawer-header-padding);\n border-bottom: 1px solid var(--b-drawer-border-color);\n flex-shrink: 0;\n}\n\n.b-drawer__header-title-wrapper {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n min-width: 0;\n flex: 1;\n}\n\n.b-drawer__title {\n font-size: var(--b-drawer-title-font-size);\n font-weight: var(--b-drawer-title-font-weight);\n line-height: var(--b-drawer-title-line-height);\n color: var(--b-drawer-color);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.b-drawer__extra {\n flex-shrink: 0;\n}\n\n/* ── Close button ── */\n.b-drawer__close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n border-radius: 0.25rem;\n background: transparent;\n color: var(--b-drawer-close-color);\n cursor: pointer;\n width: 1.375rem;\n height: 1.375rem;\n font-size: 1rem;\n line-height: 1;\n transition: color var(--b-drawer-transition-duration) ease;\n}\n\n.b-drawer__close:hover {\n color: var(--b-drawer-close-hover-color);\n}\n\n.b-drawer__close:focus-visible {\n outline: 2px solid oklch(62.3% 0.214 259.815);\n outline-offset: 2px;\n}\n\n.b-drawer__close-icon {\n width: 1em;\n height: 1em;\n fill: currentColor;\n display: block;\n}\n\n/* ── Body ── */\n.b-drawer__body {\n flex: 1;\n padding: var(--b-drawer-body-padding);\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n/* ── Footer ── */\n.b-drawer__footer {\n flex-shrink: 0;\n padding: var(--b-drawer-footer-padding);\n border-top: 1px solid var(--b-drawer-border-color);\n}\n\n/* ── Loading spinner ── */\n.b-drawer__loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.75rem;\n padding: 2rem;\n color: var(--b-drawer-close-color);\n}\n\n.b-drawer__spinner {\n width: 2rem;\n height: 2rem;\n animation: b-drawer-spin 1s linear infinite;\n}\n\n.b-drawer__loading-text {\n font-size: 0.875rem;\n}\n\n@keyframes b-drawer-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* ─────────────────────────────────────────────\n Slide transitions\n ─────────────────────────────────────────────\n Vue's <Transition> adds .b-drawer-{enter|leave}-* classes\n to the root element (.b-drawer-root). We target the\n children (.b-drawer and .b-drawer__mask) from there.\n ───────────────────────────────────────────── */\n\n/*\n * Vue's <Transition> listens for `transitionend` on the root element\n * (.b-drawer-root) to know when the leave animation finishes.\n * We must put a real transition on the root itself so that event fires.\n * We use `visibility` which is invisible to the user but gives Vue\n * the transitionend signal it needs.\n */\n.b-drawer-enter-active,\n.b-drawer-leave-active {\n transition: visibility var(--b-drawer-transition-duration) linear;\n}\n\n.b-drawer-leave-to {\n visibility: hidden;\n}\n\n/* - Active phase: set transition on children - */\n.b-drawer-enter-active > .b-drawer,\n.b-drawer-leave-active > .b-drawer {\n transition: transform var(--b-drawer-transition-duration) cubic-bezier(0.7, 0.3, 0.1, 1);\n}\n\n.b-drawer-enter-active > .b-drawer__mask,\n.b-drawer-leave-active > .b-drawer__mask {\n transition: opacity var(--b-drawer-transition-duration) ease;\n}\n\n/* - From / To: mask fades - */\n.b-drawer-enter-from > .b-drawer__mask,\n.b-drawer-leave-to > .b-drawer__mask {\n opacity: 0;\n}\n\n/* - From / To: panel slides (right) - */\n.b-drawer-enter-from > .b-drawer--right,\n.b-drawer-leave-to > .b-drawer--right {\n transform: translateX(100%);\n}\n\n/* - From / To: panel slides (left) - */\n.b-drawer-enter-from > .b-drawer--left,\n.b-drawer-leave-to > .b-drawer--left {\n transform: translateX(-100%);\n}\n\n/* - From / To: panel slides (top) - */\n.b-drawer-enter-from > .b-drawer--top,\n.b-drawer-leave-to > .b-drawer--top {\n transform: translateY(-100%);\n}\n\n/* - From / To: panel slides (bottom) - */\n.b-drawer-enter-from > .b-drawer--bottom,\n.b-drawer-leave-to > .b-drawer--bottom {\n transform: translateY(100%);\n}\n\n/* ── Reduced motion ── */\n@media (prefers-reduced-motion: reduce) {\n .b-drawer-enter-active,\n .b-drawer-leave-active,\n .b-drawer-enter-active > .b-drawer,\n .b-drawer-leave-active > .b-drawer,\n .b-drawer-enter-active > .b-drawer__mask,\n .b-drawer-leave-active > .b-drawer__mask {\n transition-duration: 0ms;\n }\n\n .b-drawer__spinner {\n animation: none;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"design-system83.js","names":[],"sources":["../src/components/BDivider/BDivider.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type {\n BDividerOrientation,\n BDividerSize,\n BDividerTitlePlacement,\n BDividerVariant,\n} from './types.ts';\n\n// ─────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────\nconst {\n orientation = 'horizontal',\n variant = 'solid',\n dashed = false,\n plain = true,\n size = 'large',\n titlePlacement = 'center',\n} = defineProps<{\n /**\n * Line direction.\n * - `'horizontal'` - a full-width horizontal rule (default)\n * - `'vertical'` - an inline vertical separator\n * @default 'horizontal'\n */\n orientation?: BDividerOrientation;\n /**\n * Line style.\n * - `'solid'` - continuous line (default)\n * - `'dashed'` - dashed line\n * - `'dotted'` - dotted line\n * @default 'solid'\n */\n variant?: BDividerVariant;\n /**\n * Shorthand for `variant=\"dashed\"`. Overridden when `variant` is also set.\n * Kept for AntD API compatibility.\n * @default false\n * @deprecated Prefer `variant` prop\n */\n dashed?: boolean;\n /**\n * Render the text in plain (normal weight) style rather than bold.\n * Only meaningful for horizontal dividers with content.\n * @default true\n */\n plain?: boolean;\n /**\n * Vertical spacing around horizontal dividers (ignored for vertical orientation).\n * - `'small'` - tighter margin\n * - `'medium'` - medium margin\n * - `'large'` - standard Ant Design margin (default)\n * @default 'large'\n */\n size?: BDividerSize;\n /**\n * Horizontal position of the title text inside a horizontal divider.\n * - `'start'` - align text to the leading edge\n * - `'center'` - centre the text (default)\n * - `'end'` - align text to the trailing edge\n * @default 'center'\n */\n titlePlacement?: BDividerTitlePlacement;\n}>();\n\nconst slots = defineSlots<{\n /** Optional title or content placed inside the divider line. */\n default?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Computed\n// ─────────────────────────────────────────────\nconst isVertical = computed(() => orientation === 'vertical');\nconst isHorizontal = computed(() => orientation === 'horizontal');\n\n/** Whether there is slot content to render. */\nconst hasContent = computed(() => Boolean(slots.default));\n\n/**\n * Resolve the effective line style.\n * `dashed` prop is a legacy alias for `variant=\"dashed\"`.\n */\nconst effectiveVariant = computed<BDividerVariant>(() => {\n if (dashed && variant === 'solid') return 'dashed';\n return variant;\n});\n\nconst rootClass = computed(() => [\n 'b-divider',\n `b-divider--${orientation}`,\n `b-divider--${effectiveVariant.value}`,\n `b-divider--size-${size}`,\n {\n 'b-divider--with-text': hasContent.value && isHorizontal.value,\n [`b-divider--text-${titlePlacement}`]: hasContent.value && isHorizontal.value,\n 'b-divider--plain': plain,\n },\n]);\n</script>\n\n<template>\n <!--\n Vertical divider: a presentational inline separator.\n role=\"separator\" with aria-orientation covers both horizontal and vertical.\n -->\n <span v-if=\"isVertical\" :class=\"rootClass\" role=\"separator\" aria-orientation=\"vertical\" />\n\n <!--\n Horizontal divider WITHOUT content.\n <div role=\"separator\"> is used instead of <hr> because axe-core evaluates\n <hr> (which carries implicit role=\"separator\") for text-colour contrast by\n reading its CSS `color` property. A <div role=\"separator\"> with no text\n content is exempt from that check (WCAG SC 1.4.3 applies only to text).\n -->\n <div\n v-else-if=\"isHorizontal && !hasContent\"\n :class=\"rootClass\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />\n\n <!--\n Horizontal divider WITH content: <div role=\"separator\"> wrapping the text.\n <hr> cannot contain children, so we fall back to a div.\n -->\n <div v-else :class=\"rootClass\" role=\"separator\" aria-orientation=\"horizontal\">\n <span class=\"b-divider__content\">\n <slot />\n </span>\n </div>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (design tokens)\n Scoped to .b-divider — never on :root\n ──────────────────────────────────────────── */\n.b-divider {\n /* AntD token: textPaddingInline → horizontal padding around inner text */\n --b-divider-text-padding-inline: 1em;\n\n /* AntD token: orientationMargin → fraction of width from the near edge for start/end text */\n --b-divider-orientation-margin: 0.05;\n\n /* AntD token: verticalMarginInline → horizontal margin on vertical dividers */\n --b-divider-vertical-margin-inline: 8px;\n\n /* Colour */\n --b-divider-color: oklch(88% 0.01 264); /* neutral border */\n --b-divider-text-color: oklch(32% 0.02 264);\n\n /* Typography */\n --b-divider-font-size: 1rem;\n --b-divider-font-weight-text: 500; /* \"with-text\" non-plain heading weight */\n\n /* Size (margin-block for horizontal) */\n --b-divider-margin-block-large: 1.5rem; /* size=large (AntD default) */\n --b-divider-margin-block-medium: 0.75rem; /* size=medium */\n --b-divider-margin-block-small: 0.25rem; /* size=small */\n\n /* Line geometry */\n --b-divider-line-width: 1px;\n}\n\n/* ── Dark mode ───────────────────────────────────────────────────────────\n Use only the attribute selector, consistent with every other component\n in this system (BAlert, BCard, etc.). The @media (prefers-color-scheme)\n query is deliberately omitted: Storybook controls the theme by toggling\n [data-prefers-color='dark'] on <html>. A media-query override would fire\n based on the OS/test-runner's colour scheme regardless of the canvas\n setting, producing light text (#c7cedb) on a white canvas — failing\n WCAG 1.4.3 contrast in automated a11y checks.\n ──────────────────────────────────────────────────────────────────────── */\n[data-prefers-color='dark'] .b-divider {\n --b-divider-color: oklch(35% 0.02 264);\n --b-divider-text-color: oklch(85% 0.02 264);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-divider {\n --b-divider-color: oklch(35% 0.02 264);\n --b-divider-text-color: oklch(85% 0.02 264);\n }\n}\n\n/* ─────────────────────────────────────────────\n Horizontal — <div role=separator> (no text) or <div role=separator> (with text)\n ───────────────────────────────────────────── */\n.b-divider--horizontal {\n display: block;\n clear: both;\n width: 100%;\n margin-block: var(--b-divider-margin-block-large);\n border: none;\n border-block-start: var(--b-divider-line-width) var(--b-divider-color);\n /* default style is overridden by variant classes below */\n border-block-start-style: solid;\n box-sizing: border-box;\n}\n\n/* Size variants (horizontal only) */\n.b-divider--horizontal.b-divider--size-small {\n margin-block: var(--b-divider-margin-block-small);\n}\n.b-divider--horizontal.b-divider--size-medium {\n margin-block: var(--b-divider-margin-block-medium);\n}\n.b-divider--horizontal.b-divider--size-large {\n margin-block: var(--b-divider-margin-block-large);\n}\n\n/* ─────────────────────────────────────────────\n Horizontal WITH text\n ───────────────────────────────────────────── */\n.b-divider--with-text {\n display: flex;\n align-items: center;\n border-block-start-style: none; /* lines rendered via ::before / ::after */\n white-space: nowrap;\n font-size: var(--b-divider-font-size);\n color: var(--b-divider-text-color);\n font-weight: var(--b-divider-font-weight-text);\n}\n\n/* Plain text: normal weight */\n.b-divider--with-text.b-divider--plain {\n font-weight: normal;\n}\n\n/* Lines flanking the text */\n.b-divider--with-text::before,\n.b-divider--with-text::after {\n content: '';\n flex: 1;\n border-block-start: var(--b-divider-line-width) solid var(--b-divider-color);\n}\n\n/* variant overrides for ::before / ::after */\n.b-divider--dashed.b-divider--with-text::before,\n.b-divider--dashed.b-divider--with-text::after {\n border-block-start-style: dashed;\n}\n.b-divider--dotted.b-divider--with-text::before,\n.b-divider--dotted.b-divider--with-text::after {\n border-block-start-style: dotted;\n}\n\n/* Text placement — start: push text to left edge */\n.b-divider--text-start::before {\n /* orientationMargin is a unitless fraction (0.05 = 5% of width) */\n flex: calc(var(--b-divider-orientation-margin) * 1);\n min-width: 0;\n}\n.b-divider--text-start::after {\n flex: 1;\n}\n\n/* Text placement — end: push text to right edge */\n.b-divider--text-end::after {\n flex: calc(var(--b-divider-orientation-margin) * 1);\n min-width: 0;\n}\n.b-divider--text-end::before {\n flex: 1;\n}\n\n/* Text placement — center (default): equal halves */\n.b-divider--text-center::before,\n.b-divider--text-center::after {\n flex: 1;\n}\n\n.b-divider__content {\n padding-inline: var(--b-divider-text-padding-inline);\n /* prevent the text itself from shrinking below its natural width */\n flex-shrink: 0;\n}\n\n/* ─────────────────────────────────────────────\n Line-style variants (horizontal no-text)\n ───────────────────────────────────────────── */\n.b-divider--horizontal:not(.b-divider--with-text).b-divider--dashed {\n border-block-start-style: dashed;\n}\n.b-divider--horizontal:not(.b-divider--with-text).b-divider--dotted {\n border-block-start-style: dotted;\n}\n\n/* ─────────────────────────────────────────────\n Vertical divider\n ───────────────────────────────────────────── */\n.b-divider--vertical {\n display: inline-block;\n /* explicit height is not set — inherits from line-height of surrounding text */\n height: 0.9em;\n border-inline-start: var(--b-divider-line-width) solid var(--b-divider-color);\n border-block-start: none;\n vertical-align: middle;\n margin-inline: var(--b-divider-vertical-margin-inline);\n}\n\n.b-divider--vertical.b-divider--dashed {\n border-inline-start-style: dashed;\n}\n.b-divider--vertical.b-divider--dotted {\n border-inline-start-style: dotted;\n}\n\n/* ─────────────────────────────────────────────\n Reduced motion\n (dividers have no animations, but guard is here for completeness)\n ───────────────────────────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n .b-divider {\n transition: none;\n }\n}\n</style>\n"],"mappings":""}
@@ -1,10 +1,202 @@
1
- //#region src/components/BDropdown/types.ts
2
- var e = /* @__PURE__ */ function(e) {
3
- return e.Hover = "hover", e.Click = "click", e.ContextMenu = "contextMenu", e;
4
- }({}), t = /* @__PURE__ */ function(e) {
5
- return e.Bottom = "bottom", e.BottomLeft = "bottomLeft", e.BottomRight = "bottomRight", e.Top = "top", e.TopLeft = "topLeft", e.TopRight = "topRight", e;
6
- }({});
1
+ import { Teleport as e, Transition as t, computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createTextVNode as s, createVNode as c, defineComponent as l, nextTick as u, normalizeClass as d, normalizeStyle as f, onBeforeUnmount as p, openBlock as m, ref as h, renderSlot as g, toDisplayString as _, unref as v, useId as y, useSlots as ee, watch as b, withCtx as x } from "vue";
2
+ //#region src/components/BDrawer/BDrawer.vue?vue&type=script&setup=true&lang.ts
3
+ var S = ["aria-label", "aria-labelledby"], C = {
4
+ key: 0,
5
+ class: "b-drawer__header"
6
+ }, w = { class: "b-drawer__header-title-wrapper" }, T = ["id"], E = {
7
+ key: 0,
8
+ class: "b-drawer__extra"
9
+ }, D = {
10
+ key: 1,
11
+ class: "b-drawer__body"
12
+ }, O = {
13
+ key: 0,
14
+ class: "b-drawer__loading",
15
+ "aria-live": "polite"
16
+ }, k = {
17
+ key: 2,
18
+ class: "b-drawer__footer"
19
+ }, A = /* @__PURE__ */ l({
20
+ __name: "BDrawer",
21
+ props: {
22
+ placement: { default: "right" },
23
+ size: { default: "default" },
24
+ title: { default: "" },
25
+ closable: {
26
+ type: Boolean,
27
+ default: !0
28
+ },
29
+ mask: {
30
+ type: Boolean,
31
+ default: !0
32
+ },
33
+ maskClosable: {
34
+ type: Boolean,
35
+ default: !0
36
+ },
37
+ keyboard: {
38
+ type: Boolean,
39
+ default: !0
40
+ },
41
+ destroyOnClose: {
42
+ type: Boolean,
43
+ default: !1
44
+ },
45
+ width: {},
46
+ height: {},
47
+ zIndex: { default: 1e3 },
48
+ getContainer: {},
49
+ autoFocus: {
50
+ type: Boolean,
51
+ default: !0
52
+ },
53
+ modelValue: {
54
+ type: Boolean,
55
+ default: () => void 0
56
+ },
57
+ forceRender: {
58
+ type: Boolean,
59
+ default: !1
60
+ },
61
+ extra: { default: "" },
62
+ footer: { default: "" },
63
+ loading: {
64
+ type: Boolean,
65
+ default: !1
66
+ },
67
+ ariaLabel: {}
68
+ },
69
+ emits: [
70
+ "close",
71
+ "afterOpenChange",
72
+ "update:modelValue"
73
+ ],
74
+ setup(l, { expose: A, emit: j }) {
75
+ let M = j, N = ee(), P = y(), F = h(!1), I = n(() => l.modelValue === void 0 ? F.value : l.modelValue), L = h(!1), R = n(() => l.forceRender ? !0 : l.destroyOnClose ? I.value : L.value || I.value);
76
+ b(I, (e) => {
77
+ e && (L.value = !0);
78
+ });
79
+ let z = n(() => l.placement === "left" || l.placement === "right"), B = {
80
+ default: 378,
81
+ large: 736
82
+ }, V = n(() => l.width === void 0 ? z.value ? `${B[l.size]}px` : "100%" : typeof l.width == "number" ? `${l.width}px` : l.width), H = n(() => l.height === void 0 ? z.value ? "100%" : `${B[l.size]}px` : typeof l.height == "number" ? `${l.height}px` : l.height), U = n(() => !!(l.title || N.title)), W = n(() => !!(l.extra || N.extra)), G = n(() => !!(l.footer || N.footer)), K = n(() => U.value || l.closable || W.value), q = n(() => l.getContainer ? l.getContainer : "body"), J = n(() => ({
83
+ width: V.value,
84
+ height: H.value,
85
+ zIndex: l.zIndex
86
+ })), Y = h(null), X = null;
87
+ function Z(e) {
88
+ if (e.key !== "Tab" || !Y.value) return;
89
+ let t = Array.from(Y.value.querySelectorAll("a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])"));
90
+ if (t.length === 0) {
91
+ e.preventDefault();
92
+ return;
93
+ }
94
+ let n = t[0], r = t[t.length - 1];
95
+ e.shiftKey ? document.activeElement === n && (e.preventDefault(), r.focus()) : document.activeElement === r && (e.preventDefault(), n.focus());
96
+ }
97
+ function Q() {
98
+ !l.autoFocus || !Y.value || u(() => {
99
+ if (!Y.value) return;
100
+ let e = Y.value.querySelector("a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])");
101
+ e ? e.focus() : Y.value.focus();
102
+ });
103
+ }
104
+ b(I, (e) => {
105
+ e ? (X = document.activeElement, u(() => Q()), document.body.style.overflow = "hidden") : document.body.style.overflow = "";
106
+ }), p(() => {
107
+ document.body.style.overflow = "";
108
+ });
109
+ function $(e) {
110
+ M("close", e), l.modelValue === void 0 ? F.value = !1 : M("update:modelValue", !1);
111
+ }
112
+ function te(e) {
113
+ l.maskClosable && $(e);
114
+ }
115
+ function ne(e) {
116
+ e.key === "Escape" && l.keyboard && (e.stopPropagation(), $(e)), Z(e);
117
+ }
118
+ function re() {
119
+ M("afterOpenChange", !0);
120
+ }
121
+ function ie() {
122
+ M("afterOpenChange", !1), X && typeof X.focus == "function" && (X.focus(), X = null);
123
+ }
124
+ function ae() {
125
+ l.modelValue === void 0 ? F.value = !0 : M("update:modelValue", !0);
126
+ }
127
+ return A({ open: ae }), (n, u) => (m(), r(e, { to: q.value }, [c(t, {
128
+ name: "b-drawer",
129
+ onAfterEnter: re,
130
+ onAfterLeave: ie
131
+ }, {
132
+ default: x(() => [I.value ? (m(), a("div", {
133
+ key: 0,
134
+ class: d(["b-drawer-root", `b-drawer-root--${l.placement}`]),
135
+ style: f({ zIndex: l.zIndex })
136
+ }, [l.mask ? (m(), a("div", {
137
+ key: 0,
138
+ class: "b-drawer__mask",
139
+ "aria-hidden": "true",
140
+ onClick: te
141
+ })) : i("", !0), o("div", {
142
+ ref_key: "drawerRef",
143
+ ref: Y,
144
+ class: d(["b-drawer", [
145
+ `b-drawer--${l.placement}`,
146
+ `b-drawer--${l.size}`,
147
+ {
148
+ "b-drawer--has-header": K.value,
149
+ "b-drawer--has-footer": G.value
150
+ }
151
+ ]]),
152
+ role: "dialog",
153
+ "aria-modal": "true",
154
+ "aria-label": U.value ? void 0 : l.ariaLabel,
155
+ "aria-labelledby": U.value ? v(P) : void 0,
156
+ style: f(J.value),
157
+ tabindex: "-1",
158
+ onKeydown: ne
159
+ }, [
160
+ K.value ? (m(), a("div", C, [o("div", w, [l.closable ? (m(), a("button", {
161
+ key: 0,
162
+ type: "button",
163
+ class: "b-drawer__close",
164
+ "aria-label": "Close drawer",
165
+ onClick: $
166
+ }, [g(n.$slots, "closeIcon", {}, () => [u[0] ||= o("svg", {
167
+ class: "b-drawer__close-icon",
168
+ viewBox: "0 0 24 24",
169
+ xmlns: "http://www.w3.org/2000/svg",
170
+ "aria-hidden": "true",
171
+ focusable: "false"
172
+ }, [o("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" })], -1)])])) : i("", !0), U.value ? (m(), a("div", {
173
+ key: 1,
174
+ id: v(P),
175
+ class: "b-drawer__title"
176
+ }, [g(n.$slots, "title", {}, () => [s(_(l.title), 1)])], 8, T)) : i("", !0)]), W.value ? (m(), a("div", E, [g(n.$slots, "extra", {}, () => [s(_(l.extra), 1)])])) : i("", !0)])) : i("", !0),
177
+ R.value ? (m(), a("div", D, [l.loading ? (m(), a("div", O, [...u[1] ||= [o("svg", {
178
+ class: "b-drawer__spinner",
179
+ viewBox: "0 0 24 24",
180
+ xmlns: "http://www.w3.org/2000/svg",
181
+ "aria-hidden": "true",
182
+ focusable: "false"
183
+ }, [o("circle", {
184
+ cx: "12",
185
+ cy: "12",
186
+ r: "10",
187
+ fill: "none",
188
+ stroke: "currentColor",
189
+ "stroke-width": "3",
190
+ "stroke-dasharray": "31.4 31.4",
191
+ "stroke-linecap": "round"
192
+ })], -1), o("span", { class: "b-drawer__loading-text" }, "Loading…", -1)]])) : g(n.$slots, "default", { key: 1 })])) : i("", !0),
193
+ G.value ? (m(), a("div", k, [g(n.$slots, "footer", {}, () => [s(_(l.footer), 1)])])) : i("", !0)
194
+ ], 46, S)], 6)) : i("", !0)]),
195
+ _: 3
196
+ })], 8, ["to"]));
197
+ }
198
+ });
7
199
  //#endregion
8
- export { t as BDropdownPlacement, e as BDropdownTrigger };
200
+ export { A as default };
9
201
 
10
202
  //# sourceMappingURL=design-system84.js.map