@7pmlabs/design-system 2.0.9 → 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,8 +1,40 @@
1
- import e from "./design-system157.js";
2
- /* empty css */
3
- //#region src/components/BPopconfirm/BPopconfirm.vue
4
- var t = e;
1
+ import e from "./design-system29.js";
2
+ import { createBlock as t, createCommentVNode as n, createElementBlock as r, createElementVNode as i, createTextVNode as a, defineComponent as o, openBlock as s, renderSlot as c, toDisplayString as l, unref as u, withCtx as d } from "vue";
3
+ //#region src/components/BModal/BModalFooter.vue?vue&type=script&setup=true&lang.ts
4
+ var f = { class: "b:mt-2 b:flex b:items-center b:bg-white" }, p = { class: "b:flex b:flex-initial b:gap-x-2" }, m = /* @__PURE__ */ o({
5
+ __name: "BModalFooter",
6
+ props: {
7
+ cancelText: { default: "Cancel" },
8
+ hideCancel: { type: Boolean },
9
+ cancelDisabled: { type: Boolean },
10
+ okText: { default: "OK" },
11
+ hideOk: { type: Boolean },
12
+ okDisabled: { type: Boolean }
13
+ },
14
+ emits: ["cancel", "ok"],
15
+ setup(o, { emit: m }) {
16
+ let h = m;
17
+ return (m, g) => (s(), r("div", f, [c(m.$slots, "left", {}, () => [g[2] ||= i("div", { class: "b:flex-auto" }, null, -1)]), c(m.$slots, "right", {}, () => [i("div", p, [o.hideCancel ? n("", !0) : (s(), t(u(e), {
18
+ key: 0,
19
+ variant: "outlined",
20
+ color: "secondary",
21
+ autofocus: "",
22
+ disabled: o.cancelDisabled,
23
+ onClick: g[0] ||= (e) => h("cancel")
24
+ }, {
25
+ default: d(() => [a(l(o.cancelText), 1)]),
26
+ _: 1
27
+ }, 8, ["disabled"])), o.hideOk ? n("", !0) : (s(), t(u(e), {
28
+ key: 1,
29
+ disabled: o.okDisabled,
30
+ onClick: g[1] ||= (e) => h("ok")
31
+ }, {
32
+ default: d(() => [a(l(o.okText), 1)]),
33
+ _: 1
34
+ }, 8, ["disabled"]))])])]));
35
+ }
36
+ });
5
37
  //#endregion
6
- export { t as default };
38
+ export { m as default };
7
39
 
8
40
  //# sourceMappingURL=design-system159.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"design-system159.js","names":[],"sources":["../src/components/BPopconfirm/BPopconfirm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useComponentId } from '@/composables/useComponentId.ts';\nimport { BPopconfirmPlacement, BPopconfirmTrigger } from '@/types.ts';\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useId, watch } from 'vue';\n\n// ─────────────────────────────────────────────\n// Props & emits\n// ─────────────────────────────────────────────\nconst {\n title,\n description,\n okText = 'Yes',\n cancelText = 'No',\n okType = 'primary',\n disabled = false,\n icon: _icon,\n showCancel = true,\n trigger = BPopconfirmTrigger.Click,\n placement = BPopconfirmPlacement.TopCenter,\n arrow = true,\n mouseEnterDelay = 100,\n mouseLeaveDelay = 100,\n destroyTooltipOnHide = false,\n zIndex = 1060,\n modelValue = undefined,\n} = defineProps<{\n /** The confirmation question or text shown in the popconfirm. Also accepts the `title` slot. */\n title?: string;\n /** Additional description below the title. Also accepts the `description` slot. */\n description?: string;\n /** Text of the confirm button. */\n okText?: string;\n /** Text of the cancel button. */\n cancelText?: string;\n /** Button type of the confirm button: 'primary' | 'default' | 'dashed' | 'text' | 'link'. */\n okType?: 'primary' | 'default' | 'dashed' | 'text' | 'link';\n /** Whether the popconfirm is disabled (clicking trigger does nothing). */\n disabled?: boolean;\n /** Custom icon slot name override. When not provided, a default warning icon is used. */\n icon?: string;\n /** Whether to show the cancel button. */\n showCancel?: boolean;\n /** The event that triggers the popconfirm to open. */\n trigger?: `${BPopconfirmTrigger}`;\n /** Placement of the popconfirm relative to the target element. */\n placement?: `${BPopconfirmPlacement}`;\n /** Whether the popconfirm has an arrow pointing to the target. */\n arrow?: boolean;\n /** Delay in ms before showing on mouseenter. */\n mouseEnterDelay?: number;\n /** Delay in ms before hiding on mouseleave. */\n mouseLeaveDelay?: number;\n /** Whether to destroy the popconfirm DOM when hidden. */\n destroyTooltipOnHide?: boolean;\n /** z-index of the popconfirm. */\n zIndex?: number;\n /** Controlled visibility - bind with `v-model`. */\n modelValue?: boolean;\n}>();\n\nconst emit = defineEmits<{\n /** Emitted when the confirm button is clicked. Receives a callback to close programmatically. */\n (e: 'confirm', event: MouseEvent): void;\n /** Emitted when the cancel button is clicked. Receives a callback to close programmatically. */\n (e: 'cancel', event: MouseEvent): void;\n /** Emitted when the popconfirm visibility changes. */\n (e: 'openChange', open: boolean): void;\n /** v-model support. */\n (e: 'update:modelValue', value: boolean): void;\n}>();\n\ndefineSlots<{\n /** The target element that triggers the popconfirm. */\n default?(): unknown;\n /** Overrides the `title` prop with custom content. */\n title?(): unknown;\n /** Overrides the `description` prop with custom content. */\n description?(): unknown;\n /** Overrides the default warning icon. */\n icon?(): unknown;\n /** Overrides the confirm button. */\n okButton?(): unknown;\n /** Overrides the cancel button. */\n cancelButton?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────\nconst { componentUID } = useComponentId();\nconst popconfirmId = useId();\nconst titleId = `${popconfirmId}-title`;\nconst descId = `${popconfirmId}-desc`;\n\nconst internalOpen = ref(false);\nconst isOpen = computed(() => (modelValue !== undefined ? modelValue : internalOpen.value));\n\nconst hasBeenOpened = ref(false);\nconst shouldRender = computed(() => {\n if (destroyTooltipOnHide) return isOpen.value;\n return hasBeenOpened.value || isOpen.value;\n});\n\nwatch(isOpen, (val) => {\n if (val) hasBeenOpened.value = true;\n});\n\n// ─────────────────────────────────────────────\n// Visibility control\n// ─────────────────────────────────────────────\nlet showTimer: ReturnType<typeof setTimeout> | null = null;\nlet hideTimer: ReturnType<typeof setTimeout> | null = null;\n\nfunction clearTimers() {\n if (showTimer) {\n clearTimeout(showTimer);\n showTimer = null;\n }\n if (hideTimer) {\n clearTimeout(hideTimer);\n hideTimer = null;\n }\n}\n\nfunction requestOpen(delay = 0) {\n if (disabled) return;\n clearTimers();\n if (isOpen.value) return;\n if (delay > 0) {\n showTimer = setTimeout(() => doOpen(), delay);\n } else {\n doOpen();\n }\n}\n\nfunction requestClose(delay = 0) {\n clearTimers();\n if (!isOpen.value) return;\n if (delay > 0) {\n hideTimer = setTimeout(() => doClose(), delay);\n } else {\n doClose();\n }\n}\n\nfunction doOpen() {\n popconfirmRef.value?.showPopover();\n}\n\nfunction doClose() {\n popconfirmRef.value?.hidePopover();\n}\n\nfunction setOpen(val: boolean) {\n if (modelValue !== undefined) {\n emit('update:modelValue', val);\n } else {\n internalOpen.value = val;\n }\n emit('openChange', val);\n}\n\n// ─────────────────────────────────────────────\n// Popover toggle event\n// ─────────────────────────────────────────────\nconst onPopoverToggle = ({ newState }: ToggleEvent) => {\n setOpen(newState === 'open');\n};\n\n// ─────────────────────────────────────────────\n// Refs\n// ─────────────────────────────────────────────\nconst popconfirmRef = ref<HTMLDivElement | null>(null);\nconst toggleRef = ref<HTMLDivElement | null>(null);\n\n// ─────────────────────────────────────────────\n// Focus management\n// ─────────────────────────────────────────────\nlet previouslyFocusedElement: HTMLElement | null = null;\n\nconst focusableSelector =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nfunction focusFirstButton() {\n nextTick(() => {\n if (!popconfirmRef.value) return;\n const first = popconfirmRef.value.querySelector<HTMLElement>(focusableSelector);\n if (first) {\n first.focus();\n } else {\n popconfirmRef.value.focus();\n }\n });\n}\n\nfunction trapFocus(event: KeyboardEvent) {\n if (event.key !== 'Tab' || !popconfirmRef.value) return;\n\n const focusable = Array.from(\n popconfirmRef.value.querySelectorAll<HTMLElement>(focusableSelector),\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\nwatch(isOpen, (val) => {\n if (val) {\n previouslyFocusedElement = document.activeElement as HTMLElement | null;\n focusFirstButton();\n } else {\n if (previouslyFocusedElement) {\n nextTick(() => previouslyFocusedElement?.focus());\n }\n }\n});\n\n// ─────────────────────────────────────────────\n// Button handlers\n// ─────────────────────────────────────────────\nfunction onConfirm(event: MouseEvent) {\n emit('confirm', event);\n requestClose();\n}\n\nfunction onCancel(event: MouseEvent) {\n emit('cancel', event);\n requestClose();\n}\n\n// ─────────────────────────────────────────────\n// Event handlers\n// ─────────────────────────────────────────────\nfunction onClick() {\n if (disabled) return;\n if (isOpen.value) {\n requestClose();\n } else {\n requestOpen();\n }\n}\n\nfunction onMouseEnter() {\n requestOpen(mouseEnterDelay);\n}\n\nfunction onMouseLeave() {\n requestClose(mouseLeaveDelay);\n}\n\nfunction onFocusIn() {\n requestOpen();\n}\n\nfunction onFocusOut() {\n requestClose();\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' && isOpen.value) {\n event.preventDefault();\n requestClose();\n }\n}\n\nfunction onPopconfirmKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n requestClose();\n }\n trapFocus(event);\n}\n\n// ─────────────────────────────────────────────\n// Popconfirm hover (keep open when hovering content)\n// ─────────────────────────────────────────────\nfunction onPopconfirmMouseEnter() {\n if (trigger === BPopconfirmTrigger.Hover) {\n clearTimers();\n }\n}\n\nfunction onPopconfirmMouseLeave() {\n if (trigger === BPopconfirmTrigger.Hover) {\n requestClose(mouseLeaveDelay);\n }\n}\n\n// ─────────────────────────────────────────────\n// Event listener management\n// ─────────────────────────────────────────────\nfunction attachListeners() {\n const el = toggleRef.value;\n if (!el) return;\n\n el.addEventListener('keydown', onKeydown);\n\n switch (trigger) {\n case BPopconfirmTrigger.Click:\n el.addEventListener('click', onClick);\n break;\n case BPopconfirmTrigger.Focus:\n el.addEventListener('focusin', onFocusIn);\n el.addEventListener('focusout', onFocusOut);\n break;\n case BPopconfirmTrigger.Hover:\n default:\n el.addEventListener('mouseenter', onMouseEnter);\n el.addEventListener('mouseleave', onMouseLeave);\n el.addEventListener('focusin', onFocusIn);\n el.addEventListener('focusout', onFocusOut);\n break;\n }\n}\n\nfunction detachListeners() {\n const el = toggleRef.value;\n if (!el) return;\n\n el.removeEventListener('keydown', onKeydown);\n el.removeEventListener('click', onClick);\n el.removeEventListener('focusin', onFocusIn);\n el.removeEventListener('focusout', onFocusOut);\n el.removeEventListener('mouseenter', onMouseEnter);\n el.removeEventListener('mouseleave', onMouseLeave);\n}\n\nonMounted(() => {\n attachListeners();\n});\n\nonBeforeUnmount(() => {\n detachListeners();\n clearTimers();\n});\n\nwatch(\n () => trigger,\n () => {\n detachListeners();\n attachListeners();\n },\n);\n\n// Sync controlled v-model → popover state\nwatch(\n () => modelValue,\n (val) => {\n if (val === undefined) return;\n if (val) {\n popconfirmRef.value?.showPopover();\n } else {\n popconfirmRef.value?.hidePopover();\n }\n },\n);\n\n// ─────────────────────────────────────────────\n// Computed styles\n// ─────────────────────────────────────────────\nconst anchorName = computed(() => `--b-popconfirm-anchor-${componentUID.value}`);\n\nconst placementClass = computed(() => {\n const map: Record<string, string> = {\n [BPopconfirmPlacement.TopLeft]: 'top-left',\n [BPopconfirmPlacement.TopCenter]: 'top-center',\n [BPopconfirmPlacement.TopRight]: 'top-right',\n [BPopconfirmPlacement.RightTop]: 'right-top',\n [BPopconfirmPlacement.RightCenter]: 'right-center',\n [BPopconfirmPlacement.RightBottom]: 'right-bottom',\n [BPopconfirmPlacement.BottomRight]: 'bottom-right',\n [BPopconfirmPlacement.BottomCenter]: 'bottom-center',\n [BPopconfirmPlacement.BottomLeft]: 'bottom-left',\n [BPopconfirmPlacement.LeftBottom]: 'left-bottom',\n [BPopconfirmPlacement.LeftCenter]: 'left-center',\n [BPopconfirmPlacement.LeftTop]: 'left-top',\n };\n return map[placement] ?? 'top-center';\n});\n\nconst okButtonClass = computed(() => {\n const map: Record<string, string> = {\n primary: 'b-popconfirm__btn--primary',\n default: 'b-popconfirm__btn--default',\n dashed: 'b-popconfirm__btn--dashed',\n text: 'b-popconfirm__btn--text',\n link: 'b-popconfirm__btn--link',\n };\n return map[okType] ?? 'b-popconfirm__btn--primary';\n});\n\n// ─────────────────────────────────────────────\n// Public API\n// ─────────────────────────────────────────────\ndefineExpose({ open: doOpen, close: doClose });\n</script>\n\n<template>\n <div ref=\"toggleRef\" class=\"b-popconfirm__toggle\" :style=\"{ anchorName: anchorName }\">\n <slot />\n </div>\n\n <div\n ref=\"popconfirmRef\"\n popover=\"manual\"\n :class=\"[\n 'b-popconfirm__content',\n placementClass,\n { 'b-popconfirm__content--no-arrow': !arrow },\n ]\"\n :style=\"{ zIndex, positionAnchor: anchorName }\"\n role=\"dialog\"\n aria-modal=\"false\"\n :aria-labelledby=\"titleId\"\n :aria-describedby=\"description ? descId : undefined\"\n :id=\"popconfirmId\"\n tabindex=\"-1\"\n @toggle=\"onPopoverToggle\"\n @keydown=\"onPopconfirmKeydown\"\n @mouseenter=\"onPopconfirmMouseEnter\"\n @mouseleave=\"onPopconfirmMouseLeave\"\n >\n <template v-if=\"shouldRender || !destroyTooltipOnHide\">\n <div v-if=\"arrow\" class=\"b-popconfirm__arrow\" aria-hidden=\"true\" />\n <div class=\"b-popconfirm__inner\">\n <div class=\"b-popconfirm__message\">\n <span class=\"b-popconfirm__icon\" aria-hidden=\"true\">\n <slot name=\"icon\">\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n width=\"16\"\n height=\"16\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\"\n />\n </svg>\n </slot>\n </span>\n <div class=\"b-popconfirm__text\">\n <div :id=\"titleId\" class=\"b-popconfirm__title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <div\n v-if=\"description || $slots.description\"\n :id=\"descId\"\n class=\"b-popconfirm__description\"\n >\n <slot name=\"description\">{{ description }}</slot>\n </div>\n </div>\n </div>\n <div class=\"b-popconfirm__buttons\" role=\"group\">\n <slot name=\"cancelButton\">\n <button\n v-if=\"showCancel\"\n type=\"button\"\n class=\"b-popconfirm__btn b-popconfirm__btn--default\"\n @click=\"onCancel\"\n >\n {{ cancelText }}\n </button>\n </slot>\n <slot name=\"okButton\">\n <button type=\"button\" :class=\"['b-popconfirm__btn', okButtonClass]\" @click=\"onConfirm\">\n {{ okText }}\n </button>\n </slot>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (tokens)\n ──────────────────────────────────────────── */\n:root {\n --b-popconfirm-bg: #fff;\n --b-popconfirm-color: oklch(25% 0 0);\n --b-popconfirm-font-size: 0.875rem;\n --b-popconfirm-line-height: 1.5;\n --b-popconfirm-padding-x: 0.75rem;\n --b-popconfirm-padding-y: 0.75rem;\n --b-popconfirm-border-radius: 0.5rem;\n --b-popconfirm-max-width: 320px;\n --b-popconfirm-arrow-size: 8px;\n --b-popconfirm-arrow-color: #fff;\n --b-popconfirm-gap: 8px;\n --b-popconfirm-transition-duration: 200ms;\n --b-popconfirm-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n --b-popconfirm-icon-color: oklch(75% 0.15 85);\n --b-popconfirm-title-font-weight: 600;\n --b-popconfirm-description-color: oklch(45% 0 0);\n --b-popconfirm-btn-font-size: 0.8125rem;\n --b-popconfirm-btn-padding-x: 0.5rem;\n --b-popconfirm-btn-padding-y: 0.125rem;\n --b-popconfirm-btn-border-radius: 0.25rem;\n --b-popconfirm-btn-primary-bg: oklch(55% 0.2 260);\n --b-popconfirm-btn-primary-color: #fff;\n --b-popconfirm-btn-default-bg: transparent;\n --b-popconfirm-btn-default-color: oklch(25% 0 0);\n --b-popconfirm-btn-default-border: oklch(80% 0 0);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] {\n --b-popconfirm-bg: oklch(22% 0 0);\n --b-popconfirm-color: oklch(90% 0 0);\n --b-popconfirm-arrow-color: oklch(22% 0 0);\n --b-popconfirm-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.24), 0 3px 6px -4px rgba(0, 0, 0, 0.36),\n 0 9px 28px 8px rgba(0, 0, 0, 0.2);\n --b-popconfirm-icon-color: oklch(80% 0.15 85);\n --b-popconfirm-description-color: oklch(65% 0 0);\n --b-popconfirm-btn-primary-bg: oklch(55% 0.2 260);\n --b-popconfirm-btn-default-color: oklch(90% 0 0);\n --b-popconfirm-btn-default-border: oklch(40% 0 0);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] {\n --b-popconfirm-bg: oklch(22% 0 0);\n --b-popconfirm-color: oklch(90% 0 0);\n --b-popconfirm-arrow-color: oklch(22% 0 0);\n --b-popconfirm-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.24), 0 3px 6px -4px rgba(0, 0, 0, 0.36),\n 0 9px 28px 8px rgba(0, 0, 0, 0.2);\n --b-popconfirm-icon-color: oklch(80% 0.15 85);\n --b-popconfirm-description-color: oklch(65% 0 0);\n --b-popconfirm-btn-primary-bg: oklch(55% 0.2 260);\n --b-popconfirm-btn-default-color: oklch(90% 0 0);\n --b-popconfirm-btn-default-border: oklch(40% 0 0);\n }\n}\n\n/* ─────────────────────────────────────────────\n Toggle wrapper\n ───────────────────────────────────────────── */\n.b-popconfirm__toggle {\n display: inline-block;\n}\n\n/* ─────────────────────────────────────────────\n Popconfirm content (popover)\n ───────────────────────────────────────────── */\n.b-popconfirm__content {\n /* Reset popover defaults */\n position: absolute;\n border: none;\n padding: 0;\n margin: 0;\n background: transparent;\n overflow: visible;\n max-width: var(--b-popconfirm-max-width);\n box-sizing: border-box;\n pointer-events: auto;\n\n /* Animation and visibility */\n transition:\n display var(--b-popconfirm-transition-duration),\n opacity var(--b-popconfirm-transition-duration);\n transition-behavior: allow-discrete;\n opacity: 0;\n\n &:popover-open {\n opacity: 1;\n\n @starting-style {\n opacity: 0;\n }\n }\n\n /* ── Placement: Top ── */\n &.top-left {\n inset: auto;\n bottom: anchor(top);\n left: anchor(left);\n margin-bottom: var(--b-popconfirm-gap);\n }\n &.top-center {\n inset: auto;\n bottom: anchor(top);\n justify-self: anchor-center;\n margin-bottom: var(--b-popconfirm-gap);\n }\n &.top-right {\n inset: auto;\n bottom: anchor(top);\n right: anchor(right);\n margin-bottom: var(--b-popconfirm-gap);\n }\n\n /* ── Placement: Right ── */\n &.right-top {\n inset: auto;\n top: anchor(top);\n left: anchor(right);\n margin-left: var(--b-popconfirm-gap);\n }\n &.right-center {\n inset: auto;\n align-self: anchor-center;\n left: anchor(right);\n margin-left: var(--b-popconfirm-gap);\n }\n &.right-bottom {\n inset: auto;\n bottom: anchor(bottom);\n left: anchor(right);\n margin-left: var(--b-popconfirm-gap);\n }\n\n /* ── Placement: Bottom ── */\n &.bottom-right {\n inset: auto;\n top: anchor(bottom);\n right: anchor(right);\n margin-top: var(--b-popconfirm-gap);\n }\n &.bottom-center {\n inset: auto;\n top: anchor(bottom);\n justify-self: anchor-center;\n margin-top: var(--b-popconfirm-gap);\n }\n &.bottom-left {\n inset: auto;\n top: anchor(bottom);\n left: anchor(left);\n margin-top: var(--b-popconfirm-gap);\n }\n\n /* ── Placement: Left ── */\n &.left-bottom {\n inset: auto;\n bottom: anchor(bottom);\n right: anchor(left);\n margin-right: var(--b-popconfirm-gap);\n }\n &.left-center {\n inset: auto;\n align-self: anchor-center;\n right: anchor(left);\n margin-right: var(--b-popconfirm-gap);\n }\n &.left-top {\n inset: auto;\n top: anchor(top);\n right: anchor(left);\n margin-right: var(--b-popconfirm-gap);\n }\n}\n\n/* ─────────────────────────────────────────────\n Inner content\n ───────────────────────────────────────────── */\n.b-popconfirm__inner {\n background: var(--b-popconfirm-bg);\n color: var(--b-popconfirm-color);\n font-size: var(--b-popconfirm-font-size);\n line-height: var(--b-popconfirm-line-height);\n padding: var(--b-popconfirm-padding-y) var(--b-popconfirm-padding-x);\n border-radius: var(--b-popconfirm-border-radius);\n box-shadow: var(--b-popconfirm-shadow);\n word-wrap: break-word;\n}\n\n/* ─────────────────────────────────────────────\n Message row (icon + text)\n ───────────────────────────────────────────── */\n.b-popconfirm__message {\n display: flex;\n align-items: flex-start;\n gap: 0.5rem;\n margin-bottom: 0.5rem;\n}\n\n.b-popconfirm__icon {\n flex-shrink: 0;\n color: var(--b-popconfirm-icon-color);\n line-height: 1;\n margin-top: 0.125rem;\n}\n\n.b-popconfirm__text {\n flex: 1;\n min-width: 0;\n}\n\n.b-popconfirm__title {\n font-weight: var(--b-popconfirm-title-font-weight);\n}\n\n.b-popconfirm__description {\n color: var(--b-popconfirm-description-color);\n margin-top: 0.25rem;\n font-size: 0.8125rem;\n}\n\n/* ─────────────────────────────────────────────\n Buttons\n ───────────────────────────────────────────── */\n.b-popconfirm__buttons {\n display: flex;\n justify-content: flex-end;\n gap: 0.5rem;\n}\n\n.b-popconfirm__btn {\n cursor: pointer;\n font-size: var(--b-popconfirm-btn-font-size);\n line-height: 1.5;\n padding: var(--b-popconfirm-btn-padding-y) var(--b-popconfirm-btn-padding-x);\n border-radius: var(--b-popconfirm-btn-border-radius);\n border: 1px solid transparent;\n font-family: inherit;\n transition: opacity 150ms;\n\n &:hover {\n opacity: 0.85;\n }\n\n &:focus-visible {\n outline: 2px solid oklch(55% 0.2 260);\n outline-offset: 1px;\n }\n}\n\n.b-popconfirm__btn--primary {\n background: var(--b-popconfirm-btn-primary-bg);\n color: var(--b-popconfirm-btn-primary-color);\n}\n\n.b-popconfirm__btn--default {\n background: var(--b-popconfirm-btn-default-bg);\n color: var(--b-popconfirm-btn-default-color);\n border-color: var(--b-popconfirm-btn-default-border);\n}\n\n.b-popconfirm__btn--dashed {\n background: var(--b-popconfirm-btn-default-bg);\n color: var(--b-popconfirm-btn-default-color);\n border-color: var(--b-popconfirm-btn-default-border);\n border-style: dashed;\n}\n\n.b-popconfirm__btn--text {\n background: transparent;\n color: var(--b-popconfirm-btn-default-color);\n border: none;\n}\n\n.b-popconfirm__btn--link {\n background: transparent;\n color: var(--b-popconfirm-btn-primary-bg);\n border: none;\n text-decoration: underline;\n}\n\n/* ─────────────────────────────────────────────\n Arrow\n ───────────────────────────────────────────── */\n.b-popconfirm__arrow {\n position: absolute;\n width: var(--b-popconfirm-arrow-size);\n height: var(--b-popconfirm-arrow-size);\n background: var(--b-popconfirm-arrow-color);\n transform: rotate(45deg);\n pointer-events: none;\n}\n\n/* Arrow positioning for top placements */\n.b-popconfirm__content.top-left .b-popconfirm__arrow,\n.b-popconfirm__content.top-center .b-popconfirm__arrow,\n.b-popconfirm__content.top-right .b-popconfirm__arrow {\n bottom: calc(var(--b-popconfirm-arrow-size) / -2);\n left: 50%;\n margin-left: calc(var(--b-popconfirm-arrow-size) / -2);\n}\n\n/* Arrow positioning for bottom placements */\n.b-popconfirm__content.bottom-left .b-popconfirm__arrow,\n.b-popconfirm__content.bottom-center .b-popconfirm__arrow,\n.b-popconfirm__content.bottom-right .b-popconfirm__arrow {\n top: calc(var(--b-popconfirm-arrow-size) / -2);\n left: 50%;\n margin-left: calc(var(--b-popconfirm-arrow-size) / -2);\n}\n\n/* Arrow positioning for right placements */\n.b-popconfirm__content.right-top .b-popconfirm__arrow,\n.b-popconfirm__content.right-center .b-popconfirm__arrow,\n.b-popconfirm__content.right-bottom .b-popconfirm__arrow {\n left: calc(var(--b-popconfirm-arrow-size) / -2);\n top: 50%;\n margin-top: calc(var(--b-popconfirm-arrow-size) / -2);\n}\n\n/* Arrow positioning for left placements */\n.b-popconfirm__content.left-top .b-popconfirm__arrow,\n.b-popconfirm__content.left-center .b-popconfirm__arrow,\n.b-popconfirm__content.left-bottom .b-popconfirm__arrow {\n right: calc(var(--b-popconfirm-arrow-size) / -2);\n top: 50%;\n margin-top: calc(var(--b-popconfirm-arrow-size) / -2);\n}\n\n/* ─────────────────────────────────────────────\n Position fallbacks (auto-adjust overflow)\n ───────────────────────────────────────────── */\n@position-try --b-popconfirm-top-center {\n inset: auto;\n bottom: anchor(top);\n justify-self: anchor-center;\n margin-bottom: var(--b-popconfirm-gap);\n}\n\n@position-try --b-popconfirm-bottom-center {\n inset: auto;\n top: anchor(bottom);\n justify-self: anchor-center;\n margin-top: var(--b-popconfirm-gap);\n}\n\n@position-try --b-popconfirm-right-center {\n inset: auto;\n align-self: anchor-center;\n left: anchor(right);\n margin-left: var(--b-popconfirm-gap);\n}\n\n@position-try --b-popconfirm-left-center {\n inset: auto;\n align-self: anchor-center;\n right: anchor(left);\n margin-right: var(--b-popconfirm-gap);\n}\n\n/* ── Reduced motion ── */\n@media (prefers-reduced-motion: reduce) {\n .b-popconfirm__content {\n transition-duration: 0ms;\n }\n\n .b-popconfirm__btn {\n transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"design-system159.js","names":[],"sources":["../src/components/BModal/BModalFooter.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { BButton } from '@/components';\n\nconst { cancelText = 'Cancel', okText = 'OK' } = defineProps<{\n /**\n * Text to display on the cancel button.\n */\n cancelText?: string;\n /**\n * If true, the cancel button will not be displayed.\n */\n hideCancel?: boolean;\n /**\n * If true, the cancel button will be disabled.\n */\n cancelDisabled?: boolean;\n /**\n * Text to display on the OK button.\n */\n okText?: string;\n /**\n * If true, the OK button will not be displayed.\n */\n hideOk?: boolean;\n /**\n * If true, the OK button will be disabled.\n */\n okDisabled?: boolean;\n}>();\n\nconst emit = defineEmits<{\n /**\n * Emitted when the cancel button is clicked.\n */\n cancel: [];\n /**\n * Emitted when the OK button is clicked.\n */\n ok: [];\n}>();\n</script>\n\n<template>\n <div class=\"b:mt-2 b:flex b:items-center b:bg-white\">\n <slot name=\"left\">\n <div class=\"b:flex-auto\"></div>\n </slot>\n\n <slot name=\"right\">\n <div class=\"b:flex b:flex-initial b:gap-x-2\">\n <BButton\n v-if=\"!hideCancel\"\n variant=\"outlined\"\n color=\"secondary\"\n autofocus\n :disabled=\"cancelDisabled\"\n @click=\"emit('cancel')\"\n >\n {{ cancelText }}\n </BButton>\n <BButton v-if=\"!hideOk\" :disabled=\"okDisabled\" @click=\"emit('ok')\">\n {{ okText }}\n </BButton>\n </div>\n </slot>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;EA8BA,IAAM,IAAO;yBAaX,EAsBM,OAtBN,GAsBM,CArBJ,EAEO,EAAA,QAAA,QAAA,EAAA,QAAA,CAAA,AAAA,EAAA,OADL,EAA+B,OAAA,EAA1B,OAAM,eAAa,EAAA,MAAA,GAAA,CAAA,CAAA,EAG1B,EAgBO,EAAA,QAAA,SAAA,EAAA,QAAA,CAfL,EAcM,OAdN,GAcM,CAZK,EAAA,0BAAA,GAAA,EADT,EASU,EAAA,EAAA,EAAA;;GAPR,SAAQ;GACR,OAAM;GACN,WAAA;GACC,UAAU,EAAA;GACV,SAAK,AAAA,EAAA,QAAA,MAAE,EAAI,SAAA;;oBAEI,CAAA,EAAA,EAAb,EAAA,WAAU,EAAA,EAAA,CAAA,CAAA;;wBAEC,EAAA,sBAAA,GAAA,EAAhB,EAEU,EAAA,EAAA,EAAA;;GAFe,UAAU,EAAA;GAAa,SAAK,AAAA,EAAA,QAAA,MAAE,EAAI,KAAA;;oBAC7C,CAAA,EAAA,EAAT,EAAA,OAAM,EAAA,EAAA,CAAA,CAAA"}
@@ -1,192 +1,7 @@
1
- import { BPopoverPlacement as e, BPopoverTrigger as t } from "./design-system3.js";
2
- import { useComponentId as n } from "./design-system10.js";
3
- import { Fragment as r, computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createTextVNode as c, defineComponent as l, nextTick as u, normalizeClass as d, normalizeStyle as f, onBeforeUnmount as p, onMounted as m, openBlock as h, ref as g, renderSlot as _, toDisplayString as v, unref as ee, useId as te, watch as y } from "vue";
4
- //#region src/components/BPopover/BPopover.vue?vue&type=script&setup=true&lang.ts
5
- var b = ["id"], x = {
6
- key: 0,
7
- class: "b-popover__arrow",
8
- "aria-hidden": "true"
9
- }, ne = { class: "b-popover__inner" }, S = { class: "b-popover__body" }, C = "a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])", w = /* @__PURE__ */ l({
10
- __name: "BPopover",
11
- props: {
12
- title: {},
13
- content: {},
14
- trigger: { default: () => t.Hover },
15
- placement: { default: () => e.TopCenter },
16
- arrow: {
17
- type: Boolean,
18
- default: !0
19
- },
20
- mouseEnterDelay: { default: 100 },
21
- mouseLeaveDelay: { default: 100 },
22
- destroyTooltipOnHide: {
23
- type: Boolean,
24
- default: !1
25
- },
26
- zIndex: { default: 1030 },
27
- fresh: {
28
- type: Boolean,
29
- default: !1
30
- },
31
- modelValue: {
32
- type: Boolean,
33
- default: () => void 0
34
- }
35
- },
36
- emits: ["openChange", "update:modelValue"],
37
- setup(l, { expose: w, emit: T }) {
38
- let E = T, { componentUID: D } = n(), O = te(), k = `${O}-title`, A = g(!1), j = i(() => l.modelValue === void 0 ? A.value : l.modelValue), M = g(!1), re = i(() => l.fresh || l.destroyTooltipOnHide ? j.value : M.value || j.value);
39
- y(j, (e) => {
40
- e && (M.value = !0);
41
- });
42
- let N = null, P = null;
43
- function F() {
44
- N &&= (clearTimeout(N), null), P &&= (clearTimeout(P), null);
45
- }
46
- function I(e = 0) {
47
- F(), !j.value && (e > 0 ? N = setTimeout(() => R(), e) : R());
48
- }
49
- function L(e = 0) {
50
- F(), j.value && (e > 0 ? P = setTimeout(() => z(), e) : z());
51
- }
52
- function R() {
53
- B.value?.showPopover();
54
- }
55
- function z() {
56
- B.value?.hidePopover();
57
- }
58
- function ie(e) {
59
- l.modelValue === void 0 ? A.value = e : E("update:modelValue", e), E("openChange", e);
60
- }
61
- let ae = ({ newState: e }) => {
62
- ie(e === "open");
63
- }, B = g(null), V = g(null), H = null;
64
- function U() {
65
- u(() => {
66
- if (!B.value) return;
67
- let e = B.value.querySelector(C);
68
- e ? e.focus() : B.value.focus();
69
- });
70
- }
71
- function W(e) {
72
- if (e.key !== "Tab" || !B.value) return;
73
- let t = Array.from(B.value.querySelectorAll(C));
74
- if (t.length === 0) {
75
- e.preventDefault();
76
- return;
77
- }
78
- let n = t[0], r = t[t.length - 1];
79
- e.shiftKey ? document.activeElement === n && (e.preventDefault(), r.focus()) : document.activeElement === r && (e.preventDefault(), n.focus());
80
- }
81
- y(j, (e) => {
82
- e ? (H = document.activeElement, U()) : H && u(() => H?.focus());
83
- });
84
- function G() {
85
- j.value ? L() : I();
86
- }
87
- function K() {
88
- I(l.mouseEnterDelay);
89
- }
90
- function q() {
91
- L(l.mouseLeaveDelay);
92
- }
93
- function J() {
94
- I();
95
- }
96
- function Y() {
97
- L();
98
- }
99
- function X(e) {
100
- e.key === "Escape" && j.value && (e.preventDefault(), L());
101
- }
102
- function oe(e) {
103
- e.key === "Escape" && (e.preventDefault(), L()), W(e);
104
- }
105
- function se() {
106
- l.trigger === t.Hover && F();
107
- }
108
- function ce() {
109
- l.trigger === t.Hover && L(l.mouseLeaveDelay);
110
- }
111
- function Z() {
112
- let e = V.value;
113
- if (e) switch (e.addEventListener("keydown", X), l.trigger) {
114
- case t.Click:
115
- e.addEventListener("click", G);
116
- break;
117
- case t.Focus:
118
- e.addEventListener("focusin", J), e.addEventListener("focusout", Y);
119
- break;
120
- case t.Hover:
121
- default:
122
- e.addEventListener("mouseenter", K), e.addEventListener("mouseleave", q), e.addEventListener("focusin", J), e.addEventListener("focusout", Y);
123
- break;
124
- }
125
- }
126
- function Q() {
127
- let e = V.value;
128
- e && (e.removeEventListener("keydown", X), e.removeEventListener("click", G), e.removeEventListener("focusin", J), e.removeEventListener("focusout", Y), e.removeEventListener("mouseenter", K), e.removeEventListener("mouseleave", q));
129
- }
130
- m(() => {
131
- Z();
132
- }), p(() => {
133
- Q(), F();
134
- }), y(() => l.trigger, () => {
135
- Q(), Z();
136
- }), y(() => l.modelValue, (e) => {
137
- e !== void 0 && (e ? B.value?.showPopover() : B.value?.hidePopover());
138
- });
139
- let $ = i(() => `--b-popover-anchor-${D.value}`), le = i(() => ({
140
- [e.TopLeft]: "top-left",
141
- [e.TopCenter]: "top-center",
142
- [e.TopRight]: "top-right",
143
- [e.RightTop]: "right-top",
144
- [e.RightCenter]: "right-center",
145
- [e.RightBottom]: "right-bottom",
146
- [e.BottomRight]: "bottom-right",
147
- [e.BottomCenter]: "bottom-center",
148
- [e.BottomLeft]: "bottom-left",
149
- [e.LeftBottom]: "left-bottom",
150
- [e.LeftCenter]: "left-center",
151
- [e.LeftTop]: "left-top"
152
- })[l.placement] ?? "top-center");
153
- return w({
154
- open: R,
155
- close: z
156
- }), (e, t) => (h(), o(r, null, [s("div", {
157
- ref_key: "toggleRef",
158
- ref: V,
159
- class: "b-popover__toggle",
160
- style: f({ anchorName: $.value })
161
- }, [_(e.$slots, "default")], 4), s("div", {
162
- ref_key: "popoverRef",
163
- ref: B,
164
- popover: "manual",
165
- class: d([
166
- "b-popover__content",
167
- le.value,
168
- { "b-popover__content--no-arrow": !l.arrow }
169
- ]),
170
- style: f({
171
- zIndex: l.zIndex,
172
- positionAnchor: $.value
173
- }),
174
- role: "tooltip",
175
- "aria-labelledby": k,
176
- id: ee(O),
177
- tabindex: "-1",
178
- onToggle: ae,
179
- onKeydown: oe,
180
- onMouseenter: se,
181
- onMouseleave: ce
182
- }, [re.value || !l.destroyTooltipOnHide ? (h(), o(r, { key: 0 }, [l.arrow ? (h(), o("div", x)) : a("", !0), s("div", ne, [l.title || e.$slots.title ? (h(), o("div", {
183
- key: 0,
184
- id: k,
185
- class: "b-popover__title"
186
- }, [_(e.$slots, "title", {}, () => [c(v(l.title), 1)])])) : a("", !0), s("div", S, [_(e.$slots, "content", {}, () => [c(v(l.content), 1)])])])], 64)) : a("", !0)], 46, b)], 64));
187
- }
188
- });
1
+ import e from "./design-system159.js";
2
+ //#region src/components/BModal/BModalFooter.vue
3
+ var t = e;
189
4
  //#endregion
190
- export { w as default };
5
+ export { t as default };
191
6
 
192
7
  //# sourceMappingURL=design-system160.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"design-system160.js","names":["$slots"],"sources":["../src/components/BPopover/BPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useComponentId } from '@/composables/useComponentId.ts';\nimport { BPopoverPlacement, BPopoverTrigger } from '@/types.ts';\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useId, watch } from 'vue';\n\n// ─────────────────────────────────────────────\n// Props & emits\n// ─────────────────────────────────────────────\nconst {\n title,\n content,\n trigger = BPopoverTrigger.Hover,\n placement = BPopoverPlacement.TopCenter,\n arrow = true,\n mouseEnterDelay = 100,\n mouseLeaveDelay = 100,\n destroyTooltipOnHide = false,\n zIndex = 1030,\n fresh = false,\n modelValue = undefined,\n} = defineProps<{\n /** The title shown at the top of the popover. Also accepts the `title` slot. */\n title?: string;\n /** The main content of the popover. Also accepts the `content` slot. */\n content?: string;\n /** The event that triggers the popover to open. */\n trigger?: `${BPopoverTrigger}`;\n /** Placement of the popover relative to the target element. */\n placement?: `${BPopoverPlacement}`;\n /** Whether the popover has an arrow pointing to the target. */\n arrow?: boolean;\n /** Delay in ms before showing on mouseenter. */\n mouseEnterDelay?: number;\n /** Delay in ms before hiding on mouseleave. */\n mouseLeaveDelay?: number;\n /** Whether to destroy the popover DOM when hidden. */\n destroyTooltipOnHide?: boolean;\n /** z-index of the popover. */\n zIndex?: number;\n /** Force re-render when popover is shown. */\n fresh?: boolean;\n /** Controlled visibility - bind with `v-model`. */\n modelValue?: boolean;\n}>();\n\nconst emit = defineEmits<{\n /** Emitted when the popover visibility changes. */\n (e: 'openChange', open: boolean): void;\n /** v-model support. */\n (e: 'update:modelValue', value: boolean): void;\n}>();\n\ndefineSlots<{\n /** The target element that triggers the popover. */\n default?(): unknown;\n /** Overrides the `title` prop with custom content. */\n title?(): unknown;\n /** Overrides the `content` prop with custom content. */\n content?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────\nconst { componentUID } = useComponentId();\nconst popoverId = useId();\nconst titleId = `${popoverId}-title`;\n\nconst internalOpen = ref(false);\nconst isOpen = computed(() => (modelValue !== undefined ? modelValue : internalOpen.value));\n\nconst hasBeenOpened = ref(false);\nconst shouldRender = computed(() => {\n if (fresh) return isOpen.value;\n if (destroyTooltipOnHide) return isOpen.value;\n return hasBeenOpened.value || isOpen.value;\n});\n\nwatch(isOpen, (val) => {\n if (val) hasBeenOpened.value = true;\n});\n\n// ─────────────────────────────────────────────\n// Visibility control\n// ─────────────────────────────────────────────\nlet showTimer: ReturnType<typeof setTimeout> | null = null;\nlet hideTimer: ReturnType<typeof setTimeout> | null = null;\n\nfunction clearTimers() {\n if (showTimer) {\n clearTimeout(showTimer);\n showTimer = null;\n }\n if (hideTimer) {\n clearTimeout(hideTimer);\n hideTimer = null;\n }\n}\n\nfunction requestOpen(delay = 0) {\n clearTimers();\n if (isOpen.value) return;\n if (delay > 0) {\n showTimer = setTimeout(() => doOpen(), delay);\n } else {\n doOpen();\n }\n}\n\nfunction requestClose(delay = 0) {\n clearTimers();\n if (!isOpen.value) return;\n if (delay > 0) {\n hideTimer = setTimeout(() => doClose(), delay);\n } else {\n doClose();\n }\n}\n\nfunction doOpen() {\n popoverRef.value?.showPopover();\n}\n\nfunction doClose() {\n popoverRef.value?.hidePopover();\n}\n\nfunction setOpen(val: boolean) {\n if (modelValue !== undefined) {\n emit('update:modelValue', val);\n } else {\n internalOpen.value = val;\n }\n emit('openChange', val);\n}\n\n// ─────────────────────────────────────────────\n// Popover toggle event\n// ─────────────────────────────────────────────\nconst onPopoverToggle = ({ newState }: ToggleEvent) => {\n setOpen(newState === 'open');\n};\n\n// ─────────────────────────────────────────────\n// Refs\n// ─────────────────────────────────────────────\nconst popoverRef = ref<HTMLDivElement | null>(null);\nconst toggleRef = ref<HTMLDivElement | null>(null);\n\n// ─────────────────────────────────────────────\n// Focus management\n// ─────────────────────────────────────────────\nlet previouslyFocusedElement: HTMLElement | null = null;\n\nconst focusableSelector =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nfunction focusPopoverContent() {\n nextTick(() => {\n if (!popoverRef.value) return;\n const first = popoverRef.value.querySelector<HTMLElement>(focusableSelector);\n if (first) {\n first.focus();\n } else {\n popoverRef.value.focus();\n }\n });\n}\n\nfunction trapFocus(event: KeyboardEvent) {\n if (event.key !== 'Tab' || !popoverRef.value) return;\n\n const focusable = Array.from(popoverRef.value.querySelectorAll<HTMLElement>(focusableSelector));\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\nwatch(isOpen, (val) => {\n if (val) {\n previouslyFocusedElement = document.activeElement as HTMLElement | null;\n focusPopoverContent();\n } else {\n if (previouslyFocusedElement) {\n nextTick(() => previouslyFocusedElement?.focus());\n }\n }\n});\n\n// ─────────────────────────────────────────────\n// Event handlers\n// ─────────────────────────────────────────────\nfunction onClick() {\n if (isOpen.value) {\n requestClose();\n } else {\n requestOpen();\n }\n}\n\nfunction onMouseEnter() {\n requestOpen(mouseEnterDelay);\n}\n\nfunction onMouseLeave() {\n requestClose(mouseLeaveDelay);\n}\n\nfunction onFocusIn() {\n requestOpen();\n}\n\nfunction onFocusOut() {\n requestClose();\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' && isOpen.value) {\n event.preventDefault();\n requestClose();\n }\n}\n\nfunction onPopoverKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n requestClose();\n }\n trapFocus(event);\n}\n\n// ─────────────────────────────────────────────\n// Popover hover (keep open when hovering content)\n// ─────────────────────────────────────────────\nfunction onPopoverMouseEnter() {\n if (trigger === BPopoverTrigger.Hover) {\n clearTimers();\n }\n}\n\nfunction onPopoverMouseLeave() {\n if (trigger === BPopoverTrigger.Hover) {\n requestClose(mouseLeaveDelay);\n }\n}\n\n// ─────────────────────────────────────────────\n// Event listener management\n// ─────────────────────────────────────────────\nfunction attachListeners() {\n const el = toggleRef.value;\n if (!el) return;\n\n el.addEventListener('keydown', onKeydown);\n\n switch (trigger) {\n case BPopoverTrigger.Click:\n el.addEventListener('click', onClick);\n break;\n case BPopoverTrigger.Focus:\n el.addEventListener('focusin', onFocusIn);\n el.addEventListener('focusout', onFocusOut);\n break;\n case BPopoverTrigger.Hover:\n default:\n el.addEventListener('mouseenter', onMouseEnter);\n el.addEventListener('mouseleave', onMouseLeave);\n el.addEventListener('focusin', onFocusIn);\n el.addEventListener('focusout', onFocusOut);\n break;\n }\n}\n\nfunction detachListeners() {\n const el = toggleRef.value;\n if (!el) return;\n\n el.removeEventListener('keydown', onKeydown);\n el.removeEventListener('click', onClick);\n el.removeEventListener('focusin', onFocusIn);\n el.removeEventListener('focusout', onFocusOut);\n el.removeEventListener('mouseenter', onMouseEnter);\n el.removeEventListener('mouseleave', onMouseLeave);\n}\n\nonMounted(() => {\n attachListeners();\n});\n\nonBeforeUnmount(() => {\n detachListeners();\n clearTimers();\n});\n\nwatch(\n () => trigger,\n () => {\n detachListeners();\n attachListeners();\n },\n);\n\n// Sync controlled v-model → popover state\nwatch(\n () => modelValue,\n (val) => {\n if (val === undefined) return;\n if (val) {\n popoverRef.value?.showPopover();\n } else {\n popoverRef.value?.hidePopover();\n }\n },\n);\n\n// ─────────────────────────────────────────────\n// Computed styles\n// ─────────────────────────────────────────────\nconst anchorName = computed(() => `--b-popover-anchor-${componentUID.value}`);\n\nconst placementClass = computed(() => {\n const map: Record<string, string> = {\n [BPopoverPlacement.TopLeft]: 'top-left',\n [BPopoverPlacement.TopCenter]: 'top-center',\n [BPopoverPlacement.TopRight]: 'top-right',\n [BPopoverPlacement.RightTop]: 'right-top',\n [BPopoverPlacement.RightCenter]: 'right-center',\n [BPopoverPlacement.RightBottom]: 'right-bottom',\n [BPopoverPlacement.BottomRight]: 'bottom-right',\n [BPopoverPlacement.BottomCenter]: 'bottom-center',\n [BPopoverPlacement.BottomLeft]: 'bottom-left',\n [BPopoverPlacement.LeftBottom]: 'left-bottom',\n [BPopoverPlacement.LeftCenter]: 'left-center',\n [BPopoverPlacement.LeftTop]: 'left-top',\n };\n return map[placement] ?? 'top-center';\n});\n\n// ─────────────────────────────────────────────\n// Public API\n// ─────────────────────────────────────────────\ndefineExpose({ open: doOpen, close: doClose });\n</script>\n\n<template>\n <div ref=\"toggleRef\" class=\"b-popover__toggle\" :style=\"{ anchorName: anchorName }\">\n <slot />\n </div>\n\n <div\n ref=\"popoverRef\"\n popover=\"manual\"\n :class=\"['b-popover__content', placementClass, { 'b-popover__content--no-arrow': !arrow }]\"\n :style=\"{ zIndex, positionAnchor: anchorName }\"\n role=\"tooltip\"\n :aria-labelledby=\"titleId\"\n :id=\"popoverId\"\n tabindex=\"-1\"\n @toggle=\"onPopoverToggle\"\n @keydown=\"onPopoverKeydown\"\n @mouseenter=\"onPopoverMouseEnter\"\n @mouseleave=\"onPopoverMouseLeave\"\n >\n <template v-if=\"shouldRender || !destroyTooltipOnHide\">\n <div v-if=\"arrow\" class=\"b-popover__arrow\" aria-hidden=\"true\" />\n <div class=\"b-popover__inner\">\n <div v-if=\"title || $slots.title\" :id=\"titleId\" class=\"b-popover__title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <div class=\"b-popover__body\">\n <slot name=\"content\">{{ content }}</slot>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (tokens)\n ──────────────────────────────────────────── */\n.b-popover__content {\n --b-popover-bg: #fff;\n --b-popover-color: oklch(25% 0 0);\n --b-popover-font-size: 0.875rem;\n --b-popover-line-height: 1.5;\n --b-popover-padding-x: 0.75rem;\n --b-popover-padding-y: 0.75rem;\n --b-popover-border-radius: 0.5rem;\n --b-popover-max-width: 320px;\n --b-popover-min-width: 177px;\n --b-popover-arrow-size: 8px;\n --b-popover-arrow-color: #fff;\n --b-popover-gap: 8px;\n --b-popover-transition-duration: 200ms;\n --b-popover-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n --b-popover-title-font-weight: 600;\n --b-popover-title-font-size: 0.875rem;\n --b-popover-title-color: oklch(15% 0 0);\n --b-popover-title-padding-bottom: 0.5rem;\n --b-popover-title-border-bottom: 1px solid oklch(90% 0 0);\n --b-popover-title-margin-bottom: 0.5rem;\n --b-popover-body-color: oklch(35% 0 0);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-popover__content {\n --b-popover-bg: oklch(22% 0 0);\n --b-popover-color: oklch(90% 0 0);\n --b-popover-arrow-color: oklch(22% 0 0);\n --b-popover-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.24), 0 3px 6px -4px rgba(0, 0, 0, 0.36),\n 0 9px 28px 8px rgba(0, 0, 0, 0.2);\n --b-popover-title-color: oklch(95% 0 0);\n --b-popover-title-border-bottom: 1px solid oklch(30% 0 0);\n --b-popover-body-color: oklch(75% 0 0);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-popover__content {\n --b-popover-bg: oklch(22% 0 0);\n --b-popover-color: oklch(90% 0 0);\n --b-popover-arrow-color: oklch(22% 0 0);\n --b-popover-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.24), 0 3px 6px -4px rgba(0, 0, 0, 0.36),\n 0 9px 28px 8px rgba(0, 0, 0, 0.2);\n --b-popover-title-color: oklch(95% 0 0);\n --b-popover-title-border-bottom: 1px solid oklch(30% 0 0);\n --b-popover-body-color: oklch(75% 0 0);\n }\n}\n\n/* ─────────────────────────────────────────────\n Toggle wrapper\n ───────────────────────────────────────────── */\n.b-popover__toggle {\n display: inline-block;\n}\n\n/* ─────────────────────────────────────────────\n Popover content (popover)\n ───────────────────────────────────────────── */\n.b-popover__content {\n /* Reset popover defaults */\n position: absolute;\n border: none;\n padding: 0;\n margin: 0;\n background: transparent;\n overflow: visible;\n max-width: var(--b-popover-max-width);\n min-width: var(--b-popover-min-width);\n box-sizing: border-box;\n pointer-events: auto;\n\n /* Animation and visibility */\n transition:\n display var(--b-popover-transition-duration),\n opacity var(--b-popover-transition-duration);\n transition-behavior: allow-discrete;\n opacity: 0;\n\n &:popover-open {\n opacity: 1;\n\n @starting-style {\n opacity: 0;\n }\n }\n\n /* ── Placement: Top ── */\n &.top-left {\n inset: auto;\n bottom: anchor(top);\n left: anchor(left);\n margin-bottom: var(--b-popover-gap);\n }\n &.top-center {\n inset: auto;\n bottom: anchor(top);\n justify-self: anchor-center;\n margin-bottom: var(--b-popover-gap);\n }\n &.top-right {\n inset: auto;\n bottom: anchor(top);\n right: anchor(right);\n margin-bottom: var(--b-popover-gap);\n }\n\n /* ── Placement: Right ── */\n &.right-top {\n inset: auto;\n top: anchor(top);\n left: anchor(right);\n margin-left: var(--b-popover-gap);\n }\n &.right-center {\n inset: auto;\n align-self: anchor-center;\n left: anchor(right);\n margin-left: var(--b-popover-gap);\n }\n &.right-bottom {\n inset: auto;\n bottom: anchor(bottom);\n left: anchor(right);\n margin-left: var(--b-popover-gap);\n }\n\n /* ── Placement: Bottom ── */\n &.bottom-right {\n inset: auto;\n top: anchor(bottom);\n right: anchor(right);\n margin-top: var(--b-popover-gap);\n }\n &.bottom-center {\n inset: auto;\n top: anchor(bottom);\n justify-self: anchor-center;\n margin-top: var(--b-popover-gap);\n }\n &.bottom-left {\n inset: auto;\n top: anchor(bottom);\n left: anchor(left);\n margin-top: var(--b-popover-gap);\n }\n\n /* ── Placement: Left ── */\n &.left-bottom {\n inset: auto;\n bottom: anchor(bottom);\n right: anchor(left);\n margin-right: var(--b-popover-gap);\n }\n &.left-center {\n inset: auto;\n align-self: anchor-center;\n right: anchor(left);\n margin-right: var(--b-popover-gap);\n }\n &.left-top {\n inset: auto;\n top: anchor(top);\n right: anchor(left);\n margin-right: var(--b-popover-gap);\n }\n}\n\n/* ─────────────────────────────────────────────\n Inner content\n ───────────────────────────────────────────── */\n.b-popover__inner {\n background: var(--b-popover-bg);\n color: var(--b-popover-color);\n font-size: var(--b-popover-font-size);\n line-height: var(--b-popover-line-height);\n padding: var(--b-popover-padding-y) var(--b-popover-padding-x);\n border-radius: var(--b-popover-border-radius);\n box-shadow: var(--b-popover-shadow);\n word-wrap: break-word;\n}\n\n/* ─────────────────────────────────────────────\n Title\n ───────────────────────────────────────────── */\n.b-popover__title {\n font-weight: var(--b-popover-title-font-weight);\n font-size: var(--b-popover-title-font-size);\n color: var(--b-popover-title-color);\n padding-bottom: var(--b-popover-title-padding-bottom);\n border-bottom: var(--b-popover-title-border-bottom);\n margin-bottom: var(--b-popover-title-margin-bottom);\n}\n\n/* ─────────────────────────────────────────────\n Body\n ───────────────────────────────────────────── */\n.b-popover__body {\n color: var(--b-popover-body-color);\n}\n\n/* ─────────────────────────────────────────────\n Arrow\n ───────────────────────────────────────────── */\n.b-popover__arrow {\n position: absolute;\n width: var(--b-popover-arrow-size);\n height: var(--b-popover-arrow-size);\n background: var(--b-popover-arrow-color);\n transform: rotate(45deg);\n pointer-events: none;\n}\n\n/* Arrow positioning for top placements */\n.b-popover__content.top-left .b-popover__arrow,\n.b-popover__content.top-center .b-popover__arrow,\n.b-popover__content.top-right .b-popover__arrow {\n bottom: calc(var(--b-popover-arrow-size) / -2);\n left: 50%;\n margin-left: calc(var(--b-popover-arrow-size) / -2);\n}\n\n/* Arrow positioning for bottom placements */\n.b-popover__content.bottom-left .b-popover__arrow,\n.b-popover__content.bottom-center .b-popover__arrow,\n.b-popover__content.bottom-right .b-popover__arrow {\n top: calc(var(--b-popover-arrow-size) / -2);\n left: 50%;\n margin-left: calc(var(--b-popover-arrow-size) / -2);\n}\n\n/* Arrow positioning for right placements */\n.b-popover__content.right-top .b-popover__arrow,\n.b-popover__content.right-center .b-popover__arrow,\n.b-popover__content.right-bottom .b-popover__arrow {\n left: calc(var(--b-popover-arrow-size) / -2);\n top: 50%;\n margin-top: calc(var(--b-popover-arrow-size) / -2);\n}\n\n/* Arrow positioning for left placements */\n.b-popover__content.left-top .b-popover__arrow,\n.b-popover__content.left-center .b-popover__arrow,\n.b-popover__content.left-bottom .b-popover__arrow {\n right: calc(var(--b-popover-arrow-size) / -2);\n top: 50%;\n margin-top: calc(var(--b-popover-arrow-size) / -2);\n}\n\n/* ─────────────────────────────────────────────\n Position fallbacks (auto-adjust overflow)\n ───────────────────────────────────────────── */\n@position-try --b-popover-top-center {\n inset: auto;\n bottom: anchor(top);\n justify-self: anchor-center;\n margin-bottom: var(--b-popover-gap);\n}\n\n@position-try --b-popover-bottom-center {\n inset: auto;\n top: anchor(bottom);\n justify-self: anchor-center;\n margin-top: var(--b-popover-gap);\n}\n\n@position-try --b-popover-right-center {\n inset: auto;\n align-self: anchor-center;\n left: anchor(right);\n margin-left: var(--b-popover-gap);\n}\n\n@position-try --b-popover-left-center {\n inset: auto;\n align-self: anchor-center;\n right: anchor(left);\n margin-right: var(--b-popover-gap);\n}\n\n/* ── Reduced motion ── */\n@media (prefers-reduced-motion: reduce) {\n .b-popover__content {\n transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"design-system160.js","names":[],"sources":["../src/components/BModal/BModalFooter.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { BButton } from '@/components';\n\nconst { cancelText = 'Cancel', okText = 'OK' } = defineProps<{\n /**\n * Text to display on the cancel button.\n */\n cancelText?: string;\n /**\n * If true, the cancel button will not be displayed.\n */\n hideCancel?: boolean;\n /**\n * If true, the cancel button will be disabled.\n */\n cancelDisabled?: boolean;\n /**\n * Text to display on the OK button.\n */\n okText?: string;\n /**\n * If true, the OK button will not be displayed.\n */\n hideOk?: boolean;\n /**\n * If true, the OK button will be disabled.\n */\n okDisabled?: boolean;\n}>();\n\nconst emit = defineEmits<{\n /**\n * Emitted when the cancel button is clicked.\n */\n cancel: [];\n /**\n * Emitted when the OK button is clicked.\n */\n ok: [];\n}>();\n</script>\n\n<template>\n <div class=\"b:mt-2 b:flex b:items-center b:bg-white\">\n <slot name=\"left\">\n <div class=\"b:flex-auto\"></div>\n </slot>\n\n <slot name=\"right\">\n <div class=\"b:flex b:flex-initial b:gap-x-2\">\n <BButton\n v-if=\"!hideCancel\"\n variant=\"outlined\"\n color=\"secondary\"\n autofocus\n :disabled=\"cancelDisabled\"\n @click=\"emit('cancel')\"\n >\n {{ cancelText }}\n </BButton>\n <BButton v-if=\"!hideOk\" :disabled=\"okDisabled\" @click=\"emit('ok')\">\n {{ okText }}\n </BButton>\n </div>\n </slot>\n </div>\n</template>\n"],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import e from "./design-system29.js";
2
+ import { createElementBlock as t, createElementVNode as n, createVNode as r, defineComponent as i, getCurrentInstance as a, openBlock as o, renderSlot as s, toDisplayString as c, unref as l } from "vue";
3
+ //#region src/components/BModal/BModalHeader.vue?vue&type=script&setup=true&lang.ts
4
+ var u = { class: "b:mb-2 b:flex b:items-center b:bg-white" }, d = { class: "b:flex-auto b:font-semibold" }, f = /* @__PURE__ */ i({
5
+ __name: "BModalHeader",
6
+ props: { title: {} },
7
+ setup(i) {
8
+ let f = a(), p = () => {
9
+ f?.parent?.emit("update:modelValue", !1);
10
+ };
11
+ return (a, f) => (o(), t("div", u, [s(a.$slots, "title", {}, () => [n("h2", d, c(i.title), 1)]), s(a.$slots, "icon", {}, () => [r(l(e), {
12
+ variant: "text",
13
+ color: "secondary",
14
+ "prepend-icon": "xmark",
15
+ "prepend-icon-size": "md",
16
+ autofocus: "",
17
+ onClick: p
18
+ })])]));
19
+ }
20
+ });
21
+ //#endregion
22
+ export { f as default };
23
+
24
+ //# sourceMappingURL=design-system161.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"design-system150.js","names":[],"sources":["../src/components/BModal/BModalHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { BButton } from '@/components';\nimport { getCurrentInstance } from 'vue';\n\nconst { title } = defineProps<{\n title?: string;\n}>();\n\nconst instance = getCurrentInstance();\n\nconst close = () => {\n instance?.parent?.emit('update:modelValue', false);\n};\n</script>\n\n<template>\n <div class=\"b:mb-2 b:flex b:items-center b:bg-white\">\n <slot name=\"title\">\n <h2 class=\"b:flex-auto b:font-semibold\">\n {{ title }}\n </h2>\n </slot>\n <slot name=\"icon\">\n <BButton\n variant=\"text\"\n color=\"secondary\"\n prepend-icon=\"xmark\"\n prepend-icon-size=\"md\"\n autofocus\n @click=\"close\"\n />\n </slot>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"design-system161.js","names":[],"sources":["../src/components/BModal/BModalHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { BButton } from '@/components';\nimport { getCurrentInstance } from 'vue';\n\nconst { title } = defineProps<{\n title?: string;\n}>();\n\nconst instance = getCurrentInstance();\n\nconst close = () => {\n instance?.parent?.emit('update:modelValue', false);\n};\n</script>\n\n<template>\n <div class=\"b:mb-2 b:flex b:items-center b:bg-white\">\n <slot name=\"title\">\n <h2 class=\"b:flex-auto b:font-semibold\">\n {{ title }}\n </h2>\n </slot>\n <slot name=\"icon\">\n <BButton\n variant=\"text\"\n color=\"secondary\"\n prepend-icon=\"xmark\"\n prepend-icon-size=\"md\"\n autofocus\n @click=\"close\"\n />\n </slot>\n </div>\n</template>\n"],"mappings":";;;;;;;EAQA,IAAM,IAAW,GAAoB,EAE/B,UAAc;AAClB,MAAU,QAAQ,KAAK,qBAAqB,GAAM;;yBAKlD,EAgBM,OAhBN,GAgBM,CAfJ,EAIO,EAAA,QAAA,SAAA,EAAA,QAAA,CAHL,EAEK,MAFL,GAEK,EADA,EAAA,MAAK,EAAA,EAAA,CAAA,CAAA,EAGZ,EASO,EAAA,QAAA,QAAA,EAAA,QAAA,CARL,EAOE,EAAA,EAAA,EAAA;GANA,SAAQ;GACR,OAAM;GACN,gBAAa;GACb,qBAAkB;GAClB,WAAA;GACC,SAAO"}
@@ -1,6 +1,5 @@
1
- import e from "./design-system160.js";
2
- /* empty css */
3
- //#region src/components/BPopover/BPopover.vue
1
+ import e from "./design-system161.js";
2
+ //#region src/components/BModal/BModalHeader.vue
4
3
  var t = e;
5
4
  //#endregion
6
5
  export { t as default };
@@ -1 +1 @@
1
- {"version":3,"file":"design-system162.js","names":[],"sources":["../src/components/BPopover/BPopover.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useComponentId } from '@/composables/useComponentId.ts';\nimport { BPopoverPlacement, BPopoverTrigger } from '@/types.ts';\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useId, watch } from 'vue';\n\n// ─────────────────────────────────────────────\n// Props & emits\n// ─────────────────────────────────────────────\nconst {\n title,\n content,\n trigger = BPopoverTrigger.Hover,\n placement = BPopoverPlacement.TopCenter,\n arrow = true,\n mouseEnterDelay = 100,\n mouseLeaveDelay = 100,\n destroyTooltipOnHide = false,\n zIndex = 1030,\n fresh = false,\n modelValue = undefined,\n} = defineProps<{\n /** The title shown at the top of the popover. Also accepts the `title` slot. */\n title?: string;\n /** The main content of the popover. Also accepts the `content` slot. */\n content?: string;\n /** The event that triggers the popover to open. */\n trigger?: `${BPopoverTrigger}`;\n /** Placement of the popover relative to the target element. */\n placement?: `${BPopoverPlacement}`;\n /** Whether the popover has an arrow pointing to the target. */\n arrow?: boolean;\n /** Delay in ms before showing on mouseenter. */\n mouseEnterDelay?: number;\n /** Delay in ms before hiding on mouseleave. */\n mouseLeaveDelay?: number;\n /** Whether to destroy the popover DOM when hidden. */\n destroyTooltipOnHide?: boolean;\n /** z-index of the popover. */\n zIndex?: number;\n /** Force re-render when popover is shown. */\n fresh?: boolean;\n /** Controlled visibility - bind with `v-model`. */\n modelValue?: boolean;\n}>();\n\nconst emit = defineEmits<{\n /** Emitted when the popover visibility changes. */\n (e: 'openChange', open: boolean): void;\n /** v-model support. */\n (e: 'update:modelValue', value: boolean): void;\n}>();\n\ndefineSlots<{\n /** The target element that triggers the popover. */\n default?(): unknown;\n /** Overrides the `title` prop with custom content. */\n title?(): unknown;\n /** Overrides the `content` prop with custom content. */\n content?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────\nconst { componentUID } = useComponentId();\nconst popoverId = useId();\nconst titleId = `${popoverId}-title`;\n\nconst internalOpen = ref(false);\nconst isOpen = computed(() => (modelValue !== undefined ? modelValue : internalOpen.value));\n\nconst hasBeenOpened = ref(false);\nconst shouldRender = computed(() => {\n if (fresh) return isOpen.value;\n if (destroyTooltipOnHide) return isOpen.value;\n return hasBeenOpened.value || isOpen.value;\n});\n\nwatch(isOpen, (val) => {\n if (val) hasBeenOpened.value = true;\n});\n\n// ─────────────────────────────────────────────\n// Visibility control\n// ─────────────────────────────────────────────\nlet showTimer: ReturnType<typeof setTimeout> | null = null;\nlet hideTimer: ReturnType<typeof setTimeout> | null = null;\n\nfunction clearTimers() {\n if (showTimer) {\n clearTimeout(showTimer);\n showTimer = null;\n }\n if (hideTimer) {\n clearTimeout(hideTimer);\n hideTimer = null;\n }\n}\n\nfunction requestOpen(delay = 0) {\n clearTimers();\n if (isOpen.value) return;\n if (delay > 0) {\n showTimer = setTimeout(() => doOpen(), delay);\n } else {\n doOpen();\n }\n}\n\nfunction requestClose(delay = 0) {\n clearTimers();\n if (!isOpen.value) return;\n if (delay > 0) {\n hideTimer = setTimeout(() => doClose(), delay);\n } else {\n doClose();\n }\n}\n\nfunction doOpen() {\n popoverRef.value?.showPopover();\n}\n\nfunction doClose() {\n popoverRef.value?.hidePopover();\n}\n\nfunction setOpen(val: boolean) {\n if (modelValue !== undefined) {\n emit('update:modelValue', val);\n } else {\n internalOpen.value = val;\n }\n emit('openChange', val);\n}\n\n// ─────────────────────────────────────────────\n// Popover toggle event\n// ─────────────────────────────────────────────\nconst onPopoverToggle = ({ newState }: ToggleEvent) => {\n setOpen(newState === 'open');\n};\n\n// ─────────────────────────────────────────────\n// Refs\n// ─────────────────────────────────────────────\nconst popoverRef = ref<HTMLDivElement | null>(null);\nconst toggleRef = ref<HTMLDivElement | null>(null);\n\n// ─────────────────────────────────────────────\n// Focus management\n// ─────────────────────────────────────────────\nlet previouslyFocusedElement: HTMLElement | null = null;\n\nconst focusableSelector =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nfunction focusPopoverContent() {\n nextTick(() => {\n if (!popoverRef.value) return;\n const first = popoverRef.value.querySelector<HTMLElement>(focusableSelector);\n if (first) {\n first.focus();\n } else {\n popoverRef.value.focus();\n }\n });\n}\n\nfunction trapFocus(event: KeyboardEvent) {\n if (event.key !== 'Tab' || !popoverRef.value) return;\n\n const focusable = Array.from(popoverRef.value.querySelectorAll<HTMLElement>(focusableSelector));\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\nwatch(isOpen, (val) => {\n if (val) {\n previouslyFocusedElement = document.activeElement as HTMLElement | null;\n focusPopoverContent();\n } else {\n if (previouslyFocusedElement) {\n nextTick(() => previouslyFocusedElement?.focus());\n }\n }\n});\n\n// ─────────────────────────────────────────────\n// Event handlers\n// ─────────────────────────────────────────────\nfunction onClick() {\n if (isOpen.value) {\n requestClose();\n } else {\n requestOpen();\n }\n}\n\nfunction onMouseEnter() {\n requestOpen(mouseEnterDelay);\n}\n\nfunction onMouseLeave() {\n requestClose(mouseLeaveDelay);\n}\n\nfunction onFocusIn() {\n requestOpen();\n}\n\nfunction onFocusOut() {\n requestClose();\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' && isOpen.value) {\n event.preventDefault();\n requestClose();\n }\n}\n\nfunction onPopoverKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n event.preventDefault();\n requestClose();\n }\n trapFocus(event);\n}\n\n// ─────────────────────────────────────────────\n// Popover hover (keep open when hovering content)\n// ─────────────────────────────────────────────\nfunction onPopoverMouseEnter() {\n if (trigger === BPopoverTrigger.Hover) {\n clearTimers();\n }\n}\n\nfunction onPopoverMouseLeave() {\n if (trigger === BPopoverTrigger.Hover) {\n requestClose(mouseLeaveDelay);\n }\n}\n\n// ─────────────────────────────────────────────\n// Event listener management\n// ─────────────────────────────────────────────\nfunction attachListeners() {\n const el = toggleRef.value;\n if (!el) return;\n\n el.addEventListener('keydown', onKeydown);\n\n switch (trigger) {\n case BPopoverTrigger.Click:\n el.addEventListener('click', onClick);\n break;\n case BPopoverTrigger.Focus:\n el.addEventListener('focusin', onFocusIn);\n el.addEventListener('focusout', onFocusOut);\n break;\n case BPopoverTrigger.Hover:\n default:\n el.addEventListener('mouseenter', onMouseEnter);\n el.addEventListener('mouseleave', onMouseLeave);\n el.addEventListener('focusin', onFocusIn);\n el.addEventListener('focusout', onFocusOut);\n break;\n }\n}\n\nfunction detachListeners() {\n const el = toggleRef.value;\n if (!el) return;\n\n el.removeEventListener('keydown', onKeydown);\n el.removeEventListener('click', onClick);\n el.removeEventListener('focusin', onFocusIn);\n el.removeEventListener('focusout', onFocusOut);\n el.removeEventListener('mouseenter', onMouseEnter);\n el.removeEventListener('mouseleave', onMouseLeave);\n}\n\nonMounted(() => {\n attachListeners();\n});\n\nonBeforeUnmount(() => {\n detachListeners();\n clearTimers();\n});\n\nwatch(\n () => trigger,\n () => {\n detachListeners();\n attachListeners();\n },\n);\n\n// Sync controlled v-model → popover state\nwatch(\n () => modelValue,\n (val) => {\n if (val === undefined) return;\n if (val) {\n popoverRef.value?.showPopover();\n } else {\n popoverRef.value?.hidePopover();\n }\n },\n);\n\n// ─────────────────────────────────────────────\n// Computed styles\n// ─────────────────────────────────────────────\nconst anchorName = computed(() => `--b-popover-anchor-${componentUID.value}`);\n\nconst placementClass = computed(() => {\n const map: Record<string, string> = {\n [BPopoverPlacement.TopLeft]: 'top-left',\n [BPopoverPlacement.TopCenter]: 'top-center',\n [BPopoverPlacement.TopRight]: 'top-right',\n [BPopoverPlacement.RightTop]: 'right-top',\n [BPopoverPlacement.RightCenter]: 'right-center',\n [BPopoverPlacement.RightBottom]: 'right-bottom',\n [BPopoverPlacement.BottomRight]: 'bottom-right',\n [BPopoverPlacement.BottomCenter]: 'bottom-center',\n [BPopoverPlacement.BottomLeft]: 'bottom-left',\n [BPopoverPlacement.LeftBottom]: 'left-bottom',\n [BPopoverPlacement.LeftCenter]: 'left-center',\n [BPopoverPlacement.LeftTop]: 'left-top',\n };\n return map[placement] ?? 'top-center';\n});\n\n// ─────────────────────────────────────────────\n// Public API\n// ─────────────────────────────────────────────\ndefineExpose({ open: doOpen, close: doClose });\n</script>\n\n<template>\n <div ref=\"toggleRef\" class=\"b-popover__toggle\" :style=\"{ anchorName: anchorName }\">\n <slot />\n </div>\n\n <div\n ref=\"popoverRef\"\n popover=\"manual\"\n :class=\"['b-popover__content', placementClass, { 'b-popover__content--no-arrow': !arrow }]\"\n :style=\"{ zIndex, positionAnchor: anchorName }\"\n role=\"tooltip\"\n :aria-labelledby=\"titleId\"\n :id=\"popoverId\"\n tabindex=\"-1\"\n @toggle=\"onPopoverToggle\"\n @keydown=\"onPopoverKeydown\"\n @mouseenter=\"onPopoverMouseEnter\"\n @mouseleave=\"onPopoverMouseLeave\"\n >\n <template v-if=\"shouldRender || !destroyTooltipOnHide\">\n <div v-if=\"arrow\" class=\"b-popover__arrow\" aria-hidden=\"true\" />\n <div class=\"b-popover__inner\">\n <div v-if=\"title || $slots.title\" :id=\"titleId\" class=\"b-popover__title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n <div class=\"b-popover__body\">\n <slot name=\"content\">{{ content }}</slot>\n </div>\n </div>\n </template>\n </div>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (tokens)\n ──────────────────────────────────────────── */\n.b-popover__content {\n --b-popover-bg: #fff;\n --b-popover-color: oklch(25% 0 0);\n --b-popover-font-size: 0.875rem;\n --b-popover-line-height: 1.5;\n --b-popover-padding-x: 0.75rem;\n --b-popover-padding-y: 0.75rem;\n --b-popover-border-radius: 0.5rem;\n --b-popover-max-width: 320px;\n --b-popover-min-width: 177px;\n --b-popover-arrow-size: 8px;\n --b-popover-arrow-color: #fff;\n --b-popover-gap: 8px;\n --b-popover-transition-duration: 200ms;\n --b-popover-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n --b-popover-title-font-weight: 600;\n --b-popover-title-font-size: 0.875rem;\n --b-popover-title-color: oklch(15% 0 0);\n --b-popover-title-padding-bottom: 0.5rem;\n --b-popover-title-border-bottom: 1px solid oklch(90% 0 0);\n --b-popover-title-margin-bottom: 0.5rem;\n --b-popover-body-color: oklch(35% 0 0);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-popover__content {\n --b-popover-bg: oklch(22% 0 0);\n --b-popover-color: oklch(90% 0 0);\n --b-popover-arrow-color: oklch(22% 0 0);\n --b-popover-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.24), 0 3px 6px -4px rgba(0, 0, 0, 0.36),\n 0 9px 28px 8px rgba(0, 0, 0, 0.2);\n --b-popover-title-color: oklch(95% 0 0);\n --b-popover-title-border-bottom: 1px solid oklch(30% 0 0);\n --b-popover-body-color: oklch(75% 0 0);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-popover__content {\n --b-popover-bg: oklch(22% 0 0);\n --b-popover-color: oklch(90% 0 0);\n --b-popover-arrow-color: oklch(22% 0 0);\n --b-popover-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.24), 0 3px 6px -4px rgba(0, 0, 0, 0.36),\n 0 9px 28px 8px rgba(0, 0, 0, 0.2);\n --b-popover-title-color: oklch(95% 0 0);\n --b-popover-title-border-bottom: 1px solid oklch(30% 0 0);\n --b-popover-body-color: oklch(75% 0 0);\n }\n}\n\n/* ─────────────────────────────────────────────\n Toggle wrapper\n ───────────────────────────────────────────── */\n.b-popover__toggle {\n display: inline-block;\n}\n\n/* ─────────────────────────────────────────────\n Popover content (popover)\n ───────────────────────────────────────────── */\n.b-popover__content {\n /* Reset popover defaults */\n position: absolute;\n border: none;\n padding: 0;\n margin: 0;\n background: transparent;\n overflow: visible;\n max-width: var(--b-popover-max-width);\n min-width: var(--b-popover-min-width);\n box-sizing: border-box;\n pointer-events: auto;\n\n /* Animation and visibility */\n transition:\n display var(--b-popover-transition-duration),\n opacity var(--b-popover-transition-duration);\n transition-behavior: allow-discrete;\n opacity: 0;\n\n &:popover-open {\n opacity: 1;\n\n @starting-style {\n opacity: 0;\n }\n }\n\n /* ── Placement: Top ── */\n &.top-left {\n inset: auto;\n bottom: anchor(top);\n left: anchor(left);\n margin-bottom: var(--b-popover-gap);\n }\n &.top-center {\n inset: auto;\n bottom: anchor(top);\n justify-self: anchor-center;\n margin-bottom: var(--b-popover-gap);\n }\n &.top-right {\n inset: auto;\n bottom: anchor(top);\n right: anchor(right);\n margin-bottom: var(--b-popover-gap);\n }\n\n /* ── Placement: Right ── */\n &.right-top {\n inset: auto;\n top: anchor(top);\n left: anchor(right);\n margin-left: var(--b-popover-gap);\n }\n &.right-center {\n inset: auto;\n align-self: anchor-center;\n left: anchor(right);\n margin-left: var(--b-popover-gap);\n }\n &.right-bottom {\n inset: auto;\n bottom: anchor(bottom);\n left: anchor(right);\n margin-left: var(--b-popover-gap);\n }\n\n /* ── Placement: Bottom ── */\n &.bottom-right {\n inset: auto;\n top: anchor(bottom);\n right: anchor(right);\n margin-top: var(--b-popover-gap);\n }\n &.bottom-center {\n inset: auto;\n top: anchor(bottom);\n justify-self: anchor-center;\n margin-top: var(--b-popover-gap);\n }\n &.bottom-left {\n inset: auto;\n top: anchor(bottom);\n left: anchor(left);\n margin-top: var(--b-popover-gap);\n }\n\n /* ── Placement: Left ── */\n &.left-bottom {\n inset: auto;\n bottom: anchor(bottom);\n right: anchor(left);\n margin-right: var(--b-popover-gap);\n }\n &.left-center {\n inset: auto;\n align-self: anchor-center;\n right: anchor(left);\n margin-right: var(--b-popover-gap);\n }\n &.left-top {\n inset: auto;\n top: anchor(top);\n right: anchor(left);\n margin-right: var(--b-popover-gap);\n }\n}\n\n/* ─────────────────────────────────────────────\n Inner content\n ───────────────────────────────────────────── */\n.b-popover__inner {\n background: var(--b-popover-bg);\n color: var(--b-popover-color);\n font-size: var(--b-popover-font-size);\n line-height: var(--b-popover-line-height);\n padding: var(--b-popover-padding-y) var(--b-popover-padding-x);\n border-radius: var(--b-popover-border-radius);\n box-shadow: var(--b-popover-shadow);\n word-wrap: break-word;\n}\n\n/* ─────────────────────────────────────────────\n Title\n ───────────────────────────────────────────── */\n.b-popover__title {\n font-weight: var(--b-popover-title-font-weight);\n font-size: var(--b-popover-title-font-size);\n color: var(--b-popover-title-color);\n padding-bottom: var(--b-popover-title-padding-bottom);\n border-bottom: var(--b-popover-title-border-bottom);\n margin-bottom: var(--b-popover-title-margin-bottom);\n}\n\n/* ─────────────────────────────────────────────\n Body\n ───────────────────────────────────────────── */\n.b-popover__body {\n color: var(--b-popover-body-color);\n}\n\n/* ─────────────────────────────────────────────\n Arrow\n ───────────────────────────────────────────── */\n.b-popover__arrow {\n position: absolute;\n width: var(--b-popover-arrow-size);\n height: var(--b-popover-arrow-size);\n background: var(--b-popover-arrow-color);\n transform: rotate(45deg);\n pointer-events: none;\n}\n\n/* Arrow positioning for top placements */\n.b-popover__content.top-left .b-popover__arrow,\n.b-popover__content.top-center .b-popover__arrow,\n.b-popover__content.top-right .b-popover__arrow {\n bottom: calc(var(--b-popover-arrow-size) / -2);\n left: 50%;\n margin-left: calc(var(--b-popover-arrow-size) / -2);\n}\n\n/* Arrow positioning for bottom placements */\n.b-popover__content.bottom-left .b-popover__arrow,\n.b-popover__content.bottom-center .b-popover__arrow,\n.b-popover__content.bottom-right .b-popover__arrow {\n top: calc(var(--b-popover-arrow-size) / -2);\n left: 50%;\n margin-left: calc(var(--b-popover-arrow-size) / -2);\n}\n\n/* Arrow positioning for right placements */\n.b-popover__content.right-top .b-popover__arrow,\n.b-popover__content.right-center .b-popover__arrow,\n.b-popover__content.right-bottom .b-popover__arrow {\n left: calc(var(--b-popover-arrow-size) / -2);\n top: 50%;\n margin-top: calc(var(--b-popover-arrow-size) / -2);\n}\n\n/* Arrow positioning for left placements */\n.b-popover__content.left-top .b-popover__arrow,\n.b-popover__content.left-center .b-popover__arrow,\n.b-popover__content.left-bottom .b-popover__arrow {\n right: calc(var(--b-popover-arrow-size) / -2);\n top: 50%;\n margin-top: calc(var(--b-popover-arrow-size) / -2);\n}\n\n/* ─────────────────────────────────────────────\n Position fallbacks (auto-adjust overflow)\n ───────────────────────────────────────────── */\n@position-try --b-popover-top-center {\n inset: auto;\n bottom: anchor(top);\n justify-self: anchor-center;\n margin-bottom: var(--b-popover-gap);\n}\n\n@position-try --b-popover-bottom-center {\n inset: auto;\n top: anchor(bottom);\n justify-self: anchor-center;\n margin-top: var(--b-popover-gap);\n}\n\n@position-try --b-popover-right-center {\n inset: auto;\n align-self: anchor-center;\n left: anchor(right);\n margin-left: var(--b-popover-gap);\n}\n\n@position-try --b-popover-left-center {\n inset: auto;\n align-self: anchor-center;\n right: anchor(left);\n margin-right: var(--b-popover-gap);\n}\n\n/* ── Reduced motion ── */\n@media (prefers-reduced-motion: reduce) {\n .b-popover__content {\n transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"design-system162.js","names":[],"sources":["../src/components/BModal/BModalHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { BButton } from '@/components';\nimport { getCurrentInstance } from 'vue';\n\nconst { title } = defineProps<{\n title?: string;\n}>();\n\nconst instance = getCurrentInstance();\n\nconst close = () => {\n instance?.parent?.emit('update:modelValue', false);\n};\n</script>\n\n<template>\n <div class=\"b:mb-2 b:flex b:items-center b:bg-white\">\n <slot name=\"title\">\n <h2 class=\"b:flex-auto b:font-semibold\">\n {{ title }}\n </h2>\n </slot>\n <slot name=\"icon\">\n <BButton\n variant=\"text\"\n color=\"secondary\"\n prepend-icon=\"xmark\"\n prepend-icon-size=\"md\"\n autofocus\n @click=\"close\"\n />\n </slot>\n </div>\n</template>\n"],"mappings":""}