@7pmlabs/design-system 2.0.8 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/README.md +4 -4
  2. package/dist/design-system.css +1 -1
  3. package/dist/design-system.js +65 -59
  4. package/dist/design-system100.js +1 -1
  5. package/dist/design-system100.js.map +1 -1
  6. package/dist/design-system101.js +87 -53
  7. package/dist/design-system101.js.map +1 -1
  8. package/dist/design-system103.js +5 -13
  9. package/dist/design-system103.js.map +1 -1
  10. package/dist/design-system104.js +53 -108
  11. package/dist/design-system104.js.map +1 -1
  12. package/dist/{design-system102.js → design-system105.js} +1 -1
  13. package/dist/{design-system102.js.map → design-system105.js.map} +1 -1
  14. package/dist/design-system106.js +13 -6
  15. package/dist/design-system106.js.map +1 -1
  16. package/dist/design-system107.js +93 -190
  17. package/dist/design-system107.js.map +1 -1
  18. package/dist/design-system109.js +2 -2
  19. package/dist/design-system109.js.map +1 -1
  20. package/dist/design-system110.js +183 -484
  21. package/dist/design-system110.js.map +1 -1
  22. package/dist/design-system112.js +5 -4
  23. package/dist/design-system112.js.map +1 -1
  24. package/dist/design-system113.js +507 -7
  25. package/dist/design-system113.js.map +1 -1
  26. package/dist/design-system115.js +8 -0
  27. package/dist/design-system115.js.map +1 -0
  28. package/dist/design-system116.js +7 -6
  29. package/dist/design-system116.js.map +1 -1
  30. package/dist/design-system117.js +154 -169
  31. package/dist/design-system117.js.map +1 -1
  32. package/dist/design-system119.js +2 -2
  33. package/dist/design-system119.js.map +1 -1
  34. package/dist/design-system120.js +210 -149
  35. package/dist/design-system120.js.map +1 -1
  36. package/dist/design-system122.js +5 -4
  37. package/dist/design-system122.js.map +1 -1
  38. package/dist/design-system123.js +160 -9
  39. package/dist/design-system123.js.map +1 -1
  40. package/dist/design-system125.js +8 -0
  41. package/dist/design-system125.js.map +1 -0
  42. package/dist/design-system126.js +176 -6
  43. package/dist/design-system126.js.map +1 -1
  44. package/dist/design-system128.js +8 -0
  45. package/dist/design-system128.js.map +1 -0
  46. package/dist/design-system129.js +213 -5
  47. package/dist/design-system129.js.map +1 -1
  48. package/dist/design-system131.js +5 -90
  49. package/dist/design-system131.js.map +1 -1
  50. package/dist/design-system132.js +166 -0
  51. package/dist/design-system132.js.map +1 -0
  52. package/dist/design-system134.js +5 -42
  53. package/dist/design-system134.js.map +1 -1
  54. package/dist/design-system135.js +12 -0
  55. package/dist/design-system135.js.map +1 -0
  56. package/dist/design-system136.js +274 -5
  57. package/dist/design-system136.js.map +1 -1
  58. package/dist/design-system138.js +9 -0
  59. package/dist/{design-system124.js.map → design-system138.js.map} +1 -1
  60. package/dist/design-system139.js +16 -5
  61. package/dist/design-system139.js.map +1 -1
  62. package/dist/design-system141.js +8 -0
  63. package/dist/{design-system127.js.map → design-system141.js.map} +1 -1
  64. package/dist/design-system142.js +12 -5
  65. package/dist/design-system142.js.map +1 -1
  66. package/dist/design-system143.js +78 -83
  67. package/dist/design-system143.js.map +1 -1
  68. package/dist/design-system145.js +1 -1
  69. package/dist/design-system145.js.map +1 -1
  70. package/dist/design-system146.js +42 -9
  71. package/dist/design-system146.js.map +1 -1
  72. package/dist/design-system148.js +3 -2
  73. package/dist/design-system148.js.map +1 -1
  74. package/dist/design-system149.js +230 -18
  75. package/dist/design-system149.js.map +1 -1
  76. package/dist/design-system151.js +5 -158
  77. package/dist/design-system151.js.map +1 -1
  78. package/dist/{design-system140.js → design-system152.js} +6 -6
  79. package/dist/{design-system140.js.map → design-system152.js.map} +1 -1
  80. package/dist/design-system154.js +5 -307
  81. package/dist/design-system154.js.map +1 -1
  82. package/dist/design-system155.js +98 -0
  83. package/dist/design-system155.js.map +1 -0
  84. package/dist/design-system157.js +5 -240
  85. package/dist/design-system157.js.map +1 -1
  86. package/dist/design-system158.js +12 -0
  87. package/dist/design-system158.js.map +1 -0
  88. package/dist/design-system159.js +37 -5
  89. package/dist/design-system159.js.map +1 -1
  90. package/dist/design-system160.js +4 -189
  91. package/dist/design-system160.js.map +1 -1
  92. package/dist/design-system161.js +24 -0
  93. package/dist/{design-system150.js.map → design-system161.js.map} +1 -1
  94. package/dist/design-system162.js +2 -3
  95. package/dist/design-system162.js.map +1 -1
  96. package/dist/design-system163.js +158 -3
  97. package/dist/design-system163.js.map +1 -1
  98. package/dist/{design-system153.js → design-system165.js} +2 -2
  99. package/dist/{design-system153.js.map → design-system165.js.map} +1 -1
  100. package/dist/design-system166.js +307 -6
  101. package/dist/design-system166.js.map +1 -1
  102. package/dist/{design-system156.js → design-system168.js} +2 -2
  103. package/dist/{design-system156.js.map → design-system168.js.map} +1 -1
  104. package/dist/design-system169.js +167 -6
  105. package/dist/design-system169.js.map +1 -1
  106. package/dist/design-system171.js +8 -0
  107. package/dist/design-system171.js.map +1 -0
  108. package/dist/design-system172.js +240 -6
  109. package/dist/design-system172.js.map +1 -1
  110. package/dist/design-system174.js +8 -0
  111. package/dist/design-system174.js.map +1 -0
  112. package/dist/design-system175.js +189 -6
  113. package/dist/design-system175.js.map +1 -1
  114. package/dist/design-system177.js +8 -0
  115. package/dist/design-system177.js.map +1 -0
  116. package/dist/design-system178.js +3 -5
  117. package/dist/design-system178.js.map +1 -1
  118. package/dist/design-system179.js +58 -11
  119. package/dist/design-system179.js.map +1 -1
  120. package/dist/design-system181.js +9 -0
  121. package/dist/design-system181.js.map +1 -0
  122. package/dist/design-system182.js +56 -6
  123. package/dist/design-system182.js.map +1 -1
  124. package/dist/design-system184.js +9 -0
  125. package/dist/{design-system167.js.map → design-system184.js.map} +1 -1
  126. package/dist/design-system185.js +69 -5
  127. package/dist/design-system185.js.map +1 -1
  128. package/dist/design-system187.js +9 -0
  129. package/dist/{design-system170.js.map → design-system187.js.map} +1 -1
  130. package/dist/design-system188.js +182 -5
  131. package/dist/design-system188.js.map +1 -1
  132. package/dist/design-system190.js +9 -0
  133. package/dist/design-system190.js.map +1 -0
  134. package/dist/design-system191.js +115 -5
  135. package/dist/design-system191.js.map +1 -1
  136. package/dist/design-system193.js +8 -0
  137. package/dist/{design-system176.js.map → design-system193.js.map} +1 -1
  138. package/dist/design-system194.js +11 -5
  139. package/dist/design-system194.js.map +1 -1
  140. package/dist/design-system195.js +453 -24
  141. package/dist/design-system195.js.map +1 -1
  142. package/dist/design-system197.js +5 -4
  143. package/dist/design-system197.js.map +1 -1
  144. package/dist/design-system198.js +20 -16
  145. package/dist/design-system198.js.map +1 -1
  146. package/dist/design-system200.js +1 -1
  147. package/dist/design-system200.js.map +1 -1
  148. package/dist/design-system201.js +70 -314
  149. package/dist/design-system201.js.map +1 -1
  150. package/dist/design-system203.js +1 -1
  151. package/dist/design-system203.js.map +1 -1
  152. package/dist/design-system204.js +24 -89
  153. package/dist/design-system204.js.map +1 -1
  154. package/dist/design-system206.js +1 -1
  155. package/dist/design-system206.js.map +1 -1
  156. package/dist/design-system207.js +26 -17
  157. package/dist/design-system207.js.map +1 -1
  158. package/dist/design-system209.js +5 -3
  159. package/dist/design-system209.js.map +1 -1
  160. package/dist/design-system210.js +22 -408
  161. package/dist/design-system210.js.map +1 -1
  162. package/dist/design-system212.js +1 -1
  163. package/dist/design-system212.js.map +1 -1
  164. package/dist/design-system213.js +24 -52
  165. package/dist/design-system213.js.map +1 -1
  166. package/dist/design-system215.js +1 -1
  167. package/dist/design-system215.js.map +1 -1
  168. package/dist/design-system216.js +329 -85
  169. package/dist/design-system216.js.map +1 -1
  170. package/dist/design-system218.js +5 -108
  171. package/dist/design-system218.js.map +1 -1
  172. package/dist/design-system219.js +103 -0
  173. package/dist/design-system219.js.map +1 -0
  174. package/dist/design-system221.js +5 -106
  175. package/dist/design-system221.js.map +1 -1
  176. package/dist/design-system222.js +22 -0
  177. package/dist/{design-system208.js.map → design-system222.js.map} +1 -1
  178. package/dist/design-system223.js +4 -6
  179. package/dist/design-system223.js.map +1 -1
  180. package/dist/design-system224.js +3 -737
  181. package/dist/design-system224.js.map +1 -1
  182. package/dist/design-system225.js +422 -0
  183. package/dist/design-system225.js.map +1 -0
  184. package/dist/design-system227.js +5 -11
  185. package/dist/design-system227.js.map +1 -1
  186. package/dist/design-system228.js +51 -517
  187. package/dist/design-system228.js.map +1 -1
  188. package/dist/design-system230.js +1 -1
  189. package/dist/design-system230.js.map +1 -1
  190. package/dist/design-system231.js +88 -3
  191. package/dist/design-system231.js.map +1 -1
  192. package/dist/design-system232.js +4 -46
  193. package/dist/design-system232.js.map +1 -1
  194. package/dist/design-system233.js +108 -4
  195. package/dist/design-system233.js.map +1 -1
  196. package/dist/{design-system220.js → design-system235.js} +2 -2
  197. package/dist/{design-system220.js.map → design-system235.js.map} +1 -1
  198. package/dist/design-system236.js +106 -5
  199. package/dist/design-system236.js.map +1 -1
  200. package/dist/design-system238.js +9 -0
  201. package/dist/design-system238.js.map +1 -0
  202. package/dist/design-system239.js +737 -5
  203. package/dist/design-system239.js.map +1 -1
  204. package/dist/{design-system226.js → design-system241.js} +2 -2
  205. package/dist/{design-system226.js.map → design-system241.js.map} +1 -1
  206. package/dist/design-system242.js +3 -5
  207. package/dist/design-system242.js.map +1 -1
  208. package/dist/design-system243.js +42 -50
  209. package/dist/design-system243.js.map +1 -1
  210. package/dist/design-system244.js +1 -1
  211. package/dist/design-system244.js.map +1 -1
  212. package/dist/design-system245.js +254 -141
  213. package/dist/design-system245.js.map +1 -1
  214. package/dist/design-system247.js +1 -1
  215. package/dist/design-system247.js.map +1 -1
  216. package/dist/design-system248.js +119 -7
  217. package/dist/design-system248.js.map +1 -1
  218. package/dist/design-system250.js +8 -0
  219. package/dist/design-system250.js.map +1 -0
  220. package/dist/design-system251.js +172 -5
  221. package/dist/design-system251.js.map +1 -1
  222. package/dist/design-system253.js +8 -0
  223. package/dist/design-system253.js.map +1 -0
  224. package/dist/design-system254.js +11 -6
  225. package/dist/design-system254.js.map +1 -1
  226. package/dist/design-system255.js +525 -9
  227. package/dist/design-system255.js.map +1 -1
  228. package/dist/design-system257.js +8 -0
  229. package/dist/design-system257.js.map +1 -0
  230. package/dist/design-system258.js +112 -6
  231. package/dist/design-system258.js.map +1 -1
  232. package/dist/design-system260.js +5 -374
  233. package/dist/design-system260.js.map +1 -1
  234. package/dist/design-system261.js +57 -0
  235. package/dist/design-system261.js.map +1 -0
  236. package/dist/design-system262.js +4 -6
  237. package/dist/design-system262.js.map +1 -1
  238. package/dist/design-system263.js +173 -0
  239. package/dist/design-system263.js.map +1 -0
  240. package/dist/design-system265.js +8 -0
  241. package/dist/design-system265.js.map +1 -0
  242. package/dist/design-system266.js +10 -0
  243. package/dist/design-system266.js.map +1 -0
  244. package/dist/{design-system249.js → design-system267.js} +2 -2
  245. package/dist/{design-system249.js.map → design-system267.js.map} +1 -1
  246. package/dist/design-system269.js +8 -0
  247. package/dist/design-system269.js.map +1 -0
  248. package/dist/{design-system252.js → design-system270.js} +1 -1
  249. package/dist/{design-system252.js.map → design-system270.js.map} +1 -1
  250. package/dist/design-system272.js +9 -0
  251. package/dist/design-system272.js.map +1 -0
  252. package/dist/design-system273.js +12 -0
  253. package/dist/design-system273.js.map +1 -0
  254. package/dist/{design-system256.js → design-system274.js} +2 -2
  255. package/dist/{design-system256.js.map → design-system274.js.map} +1 -1
  256. package/dist/design-system276.js +9 -0
  257. package/dist/design-system276.js.map +1 -0
  258. package/dist/{design-system259.js → design-system277.js} +1 -1
  259. package/dist/{design-system259.js.map → design-system277.js.map} +1 -1
  260. package/dist/design-system278.js +377 -0
  261. package/dist/design-system278.js.map +1 -0
  262. package/dist/design-system280.js +9 -0
  263. package/dist/design-system280.js.map +1 -0
  264. package/dist/design-system69.js +182 -13
  265. package/dist/design-system69.js.map +1 -1
  266. package/dist/design-system71.js +8 -0
  267. package/dist/design-system71.js.map +1 -0
  268. package/dist/design-system72.js +13 -5
  269. package/dist/design-system72.js.map +1 -1
  270. package/dist/design-system73.js +677 -139
  271. package/dist/design-system73.js.map +1 -1
  272. package/dist/design-system75.js +1 -1
  273. package/dist/design-system75.js.map +1 -1
  274. package/dist/design-system76.js +152 -23
  275. package/dist/design-system76.js.map +1 -1
  276. package/dist/design-system78.js +5 -49
  277. package/dist/design-system78.js.map +1 -1
  278. package/dist/design-system79.js +32 -0
  279. package/dist/design-system79.js.map +1 -0
  280. package/dist/design-system80.js +2 -3
  281. package/dist/design-system80.js.map +1 -1
  282. package/dist/design-system81.js +38 -188
  283. package/dist/design-system81.js.map +1 -1
  284. package/dist/design-system83.js +1 -1
  285. package/dist/design-system83.js.map +1 -1
  286. package/dist/design-system84.js +199 -7
  287. package/dist/design-system84.js.map +1 -1
  288. package/dist/design-system86.js +8 -0
  289. package/dist/design-system86.js.map +1 -0
  290. package/dist/design-system87.js +7 -5
  291. package/dist/design-system87.js.map +1 -1
  292. package/dist/design-system88.js +264 -48
  293. package/dist/design-system88.js.map +1 -1
  294. package/dist/design-system90.js +1 -1
  295. package/dist/design-system90.js.map +1 -1
  296. package/dist/design-system91.js +57 -11
  297. package/dist/design-system91.js.map +1 -1
  298. package/dist/design-system93.js +8 -0
  299. package/dist/design-system93.js.map +1 -0
  300. package/dist/design-system94.js +11 -5
  301. package/dist/design-system94.js.map +1 -1
  302. package/dist/design-system95.js +92 -59
  303. package/dist/design-system95.js.map +1 -1
  304. package/dist/design-system97.js +1 -1
  305. package/dist/design-system97.js.map +1 -1
  306. package/dist/design-system98.js +56 -78
  307. package/dist/design-system98.js.map +1 -1
  308. package/dist/types/components/BContextMenu/BContextMenu.spec.d.ts +1 -0
  309. package/dist/types/components/BContextMenu/BContextMenu.vue.d.ts +42 -0
  310. package/dist/types/components/BContextMenu/index.d.ts +2 -0
  311. package/dist/types/components/BContextMenu/types.d.ts +23 -0
  312. package/dist/types/components/BInputTags/BInputTags.spec.d.ts +1 -0
  313. package/dist/types/components/BInputTags/BInputTags.vue.d.ts +54 -0
  314. package/dist/types/components/BInputTags/index.d.ts +1 -0
  315. package/dist/types/components/BLink/BLink.spec.d.ts +1 -0
  316. package/dist/types/components/BLink/BLink.vue.d.ts +100 -0
  317. package/dist/types/components/BLink/index.d.ts +1 -0
  318. package/dist/types/components/BListbox/BListbox.spec.d.ts +1 -0
  319. package/dist/types/components/BListbox/BListbox.vue.d.ts +52 -0
  320. package/dist/types/components/BListbox/index.d.ts +1 -0
  321. package/dist/types/components/BModal/BModal.spec.d.ts +1 -0
  322. package/dist/types/components/BPinInput/BPinInput.spec.d.ts +1 -0
  323. package/dist/types/components/BPinInput/BPinInput.vue.d.ts +43 -0
  324. package/dist/types/components/BPinInput/index.d.ts +1 -0
  325. package/dist/types/components/BProgress/BProgress.vue.d.ts +47 -2
  326. package/dist/types/components/BTextarea/BTextarea.spec.d.ts +1 -0
  327. package/dist/types/components/BTextarea/BTextarea.vue.d.ts +77 -0
  328. package/dist/types/components/BTextarea/index.d.ts +1 -0
  329. package/dist/types/components/index.d.ts +7 -1
  330. package/package.json +1 -1
  331. package/dist/design-system114.js +0 -212
  332. package/dist/design-system114.js.map +0 -1
  333. package/dist/design-system124.js +0 -277
  334. package/dist/design-system127.js +0 -19
  335. package/dist/design-system130.js +0 -15
  336. package/dist/design-system130.js.map +0 -1
  337. package/dist/design-system133.js +0 -8
  338. package/dist/design-system133.js.map +0 -1
  339. package/dist/design-system137.js +0 -236
  340. package/dist/design-system137.js.map +0 -1
  341. package/dist/design-system147.js +0 -40
  342. package/dist/design-system147.js.map +0 -1
  343. package/dist/design-system150.js +0 -7
  344. package/dist/design-system164.js +0 -61
  345. package/dist/design-system164.js.map +0 -1
  346. package/dist/design-system167.js +0 -59
  347. package/dist/design-system170.js +0 -72
  348. package/dist/design-system173.js +0 -185
  349. package/dist/design-system173.js.map +0 -1
  350. package/dist/design-system176.js +0 -118
  351. package/dist/design-system180.js +0 -465
  352. package/dist/design-system180.js.map +0 -1
  353. package/dist/design-system183.js +0 -38
  354. package/dist/design-system183.js.map +0 -1
  355. package/dist/design-system186.js +0 -91
  356. package/dist/design-system186.js.map +0 -1
  357. package/dist/design-system189.js +0 -38
  358. package/dist/design-system189.js.map +0 -1
  359. package/dist/design-system192.js +0 -31
  360. package/dist/design-system192.js.map +0 -1
  361. package/dist/design-system208.js +0 -7
  362. package/dist/design-system217.js +0 -7
  363. package/dist/design-system217.js.map +0 -1
  364. package/dist/design-system234.js +0 -286
  365. package/dist/design-system234.js.map +0 -1
  366. package/dist/design-system237.js +0 -122
  367. package/dist/design-system237.js.map +0 -1
  368. package/dist/design-system240.js +0 -115
  369. package/dist/design-system240.js.map +0 -1
  370. package/dist/design-system70.js +0 -699
  371. package/dist/design-system70.js.map +0 -1
  372. package/dist/design-system77.js +0 -7
  373. package/dist/design-system77.js.map +0 -1
  374. package/dist/design-system85.js +0 -276
  375. package/dist/design-system85.js.map +0 -1
  376. package/dist/design-system92.js +0 -102
  377. package/dist/design-system92.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"design-system70.js","names":[],"sources":["../src/components/BDatePicker/BDatePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useComponentId } from '@/composables/useComponentId.ts';\nimport { computed, ref, watch } from 'vue';\n\nimport {\n BDatePickerPlacement,\n BDatePickerSize,\n BDatePickerStatus,\n BDatePickerType,\n BDatePickerVariant,\n type BDatePickerDisabledDateInfo,\n type BDatePickerPreset,\n} from './types';\n\nconst {\n picker = BDatePickerType.Date,\n size = BDatePickerSize.Medium,\n variant = BDatePickerVariant.Outlined,\n placeholder,\n disabled = false,\n inputReadOnly = false,\n allowClear = true,\n showNow = true,\n showWeek = false,\n format,\n locale,\n placement: _placement = BDatePickerPlacement.BottomLeft,\n status,\n presets,\n disabledDate,\n minDate,\n maxDate,\n defaultOpen = false,\n defaultValue,\n defaultPickerValue,\n open,\n} = defineProps<{\n /** Picker type: date, week, month, quarter, year */\n picker?: `${BDatePickerType}`;\n /** Size of the input */\n size?: `${BDatePickerSize}`;\n /** Visual variant */\n variant?: `${BDatePickerVariant}`;\n /** Placeholder text */\n placeholder?: string;\n /** Disable the picker */\n disabled?: boolean;\n /** Make input read-only */\n inputReadOnly?: boolean;\n /** Show clear button */\n allowClear?: boolean;\n /** Show \"Today\" / \"Now\" button */\n showNow?: boolean;\n /** Show week number column (date picker) */\n showWeek?: boolean;\n /** Date format string (e.g. 'YYYY-MM-DD', 'DD/MM/YYYY', 'MM-DD-YYYY') */\n format?: string;\n /** BCP 47 locale tag for formatting and calendar labels (e.g. 'en-US', 'vi-VN', 'de-DE') */\n locale?: string;\n /** Popup placement */\n placement?: `${BDatePickerPlacement}`;\n /** Validation status */\n status?: `${BDatePickerStatus}`;\n /** Preset quick-select values */\n presets?: BDatePickerPreset[];\n /** Function to determine if a date is disabled */\n disabledDate?: (current: Date, info: BDatePickerDisabledDateInfo) => boolean;\n /** Minimum selectable date */\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Default open state */\n defaultOpen?: boolean;\n /** Default value (uncontrolled) */\n defaultValue?: Date;\n /** Default panel date */\n defaultPickerValue?: Date;\n /** Controlled open state */\n open?: boolean;\n}>();\n\nconst model = defineModel<Date | null>({ default: undefined });\n\nconst emit = defineEmits<{\n change: [date: Date | null, dateString: string];\n openChange: [open: boolean];\n panelChange: [date: Date, mode: string];\n ok: [];\n}>();\n\ndefineExpose({\n focus: () => inputEl.value?.focus(),\n blur: () => inputEl.value?.blur(),\n});\n\nconst { componentUID } = useComponentId();\nconst anchorName = computed(() => `--b-date-picker-${componentUID.value}`);\n\n// ─────────────────────────────────────────────\n// State\n// ─────────────────────────────────────────────\nconst inputEl = ref<HTMLInputElement | null>(null);\nconst panelEl = ref<HTMLElement | null>(null);\nconst isOpen = ref(defaultOpen);\nconst internalValue = ref<Date | null>(defaultValue ?? null);\nconst panelDate = ref<Date>(defaultPickerValue ?? defaultValue ?? new Date());\nconst panelMode = ref<string>(picker);\nconst hoveredDate = ref<Date | null>(null);\n\nconst selectedDate = computed({\n get: () => model.value ?? internalValue.value,\n set: (val) => {\n internalValue.value = val;\n model.value = val;\n },\n});\n\nconst isPanelOpen = ref(open !== undefined ? !!open : defaultOpen);\n\n// ─────────────────────────────────────────────\n// Formatting & Locale\n// ─────────────────────────────────────────────\nconst resolvedLocale = computed(() => {\n const tag = locale || navigator?.language || 'en-US';\n try {\n Intl.DateTimeFormat(tag);\n return tag;\n } catch {\n return 'en-US';\n }\n});\n\nconst defaultFormats: Record<string, string> = {\n date: 'YYYY-MM-DD',\n week: 'YYYY-[W]wo',\n month: 'YYYY-MM',\n quarter: 'YYYY-[Q]Q',\n year: 'YYYY',\n};\n\nconst activeFormat = computed(() => format ?? defaultFormats[picker] ?? 'YYYY-MM-DD');\n\nfunction pad(n: number, len = 2): string {\n return String(n).padStart(len, '0');\n}\n\nfunction getWeekNumber(d: Date): number {\n const copy = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));\n copy.setUTCDate(copy.getUTCDate() + 4 - (copy.getUTCDay() || 7));\n const yearStart = new Date(Date.UTC(copy.getUTCFullYear(), 0, 1));\n return Math.ceil(((copy.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n}\n\nfunction formatDate(date: Date | null): string {\n if (!date) return '';\n const y = date.getFullYear();\n const m = date.getMonth() + 1;\n const d = date.getDate();\n\n let fmt = activeFormat.value;\n\n // Escape sequences: text inside [] is literal\n const DELIM = '￰';\n const literals: string[] = [];\n fmt = fmt.replace(/\\[([^\\]]*)\\]/g, (_, text) => {\n literals.push(text);\n return `${DELIM}${literals.length - 1}${DELIM}`;\n });\n\n // Token replacement (longest tokens first to avoid partial matches)\n fmt = fmt.replace('YYYY', String(y));\n fmt = fmt.replace('YY', String(y).slice(-2));\n fmt = fmt.replace('MM', pad(m));\n fmt = fmt.replace('M', String(m));\n fmt = fmt.replace('DD', pad(d));\n fmt = fmt.replace('D', String(d));\n fmt = fmt.replace('wo', String(getWeekNumber(date)));\n fmt = fmt.replace('Q', String(Math.ceil(m / 3)));\n\n // Restore literals\n fmt = fmt.replace(new RegExp(`${DELIM}(\\\\d+)${DELIM}`, 'g'), (_, idx) => literals[Number(idx)]);\n\n return fmt;\n}\n\nfunction parseInput(value: string): Date | null {\n if (!value) return null;\n\n // Try parsing based on current format pattern\n const fmt = activeFormat.value;\n const parsed = parseByFormat(value, fmt);\n if (parsed) return parsed;\n\n // Fallback: ISO format\n const iso = value.match(/^(\\d{4})-(\\d{1,2})-(\\d{1,2})$/);\n if (iso) {\n const date = new Date(Number(iso[1]), Number(iso[2]) - 1, Number(iso[3]));\n if (!isNaN(date.getTime())) return date;\n }\n\n // Fallback: native Date parsing\n const date = new Date(value);\n return isNaN(date.getTime()) ? null : date;\n}\n\nfunction parseByFormat(value: string, fmt: string): Date | null {\n let regex = fmt.replace(/\\[([^\\]]*)\\]/g, (_, text) => escapeRegex(text));\n const groups: { token: string; pos: number }[] = [];\n\n const tokenMap: [string, string][] = [\n ['YYYY', '(\\\\d{4})'],\n ['YY', '(\\\\d{2})'],\n ['MM', '(\\\\d{2})'],\n ['M', '(\\\\d{1,2})'],\n ['DD', '(\\\\d{2})'],\n ['D', '(\\\\d{1,2})'],\n ];\n\n for (const [token, pattern] of tokenMap) {\n const idx = regex.indexOf(token);\n if (idx !== -1) {\n regex = regex.replace(token, pattern);\n groups.push({ token, pos: idx });\n }\n }\n\n groups.sort((a, b) => a.pos - b.pos);\n\n regex = regex.replace('wo', '\\\\d{1,2}');\n regex = regex.replace('Q', '\\\\d');\n\n try {\n const match = value.match(new RegExp(`^${regex}$`));\n if (!match) return null;\n\n let year = new Date().getFullYear();\n let month = 1;\n let day = 1;\n\n groups.forEach(({ token }, i) => {\n const val = Number(match[i + 1]);\n switch (token) {\n case 'YYYY':\n year = val;\n break;\n case 'YY':\n year = 2000 + val;\n break;\n case 'MM':\n case 'M':\n month = val;\n break;\n case 'DD':\n case 'D':\n day = val;\n break;\n }\n });\n\n const date = new Date(year, month - 1, day);\n if (isNaN(date.getTime())) return null;\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day)\n return null;\n return date;\n } catch {\n return null;\n }\n}\n\nfunction escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nconst displayValue = computed(() => formatDate(selectedDate.value));\n\n// ─────────────────────────────────────────────\n// Locale-aware calendar labels\n// ─────────────────────────────────────────────\nconst weekdayLabels = computed(() => {\n const loc = resolvedLocale.value;\n const labels: string[] = [];\n for (let i = 0; i < 7; i++) {\n // Jan 7, 2024 is a Sunday — offset by i to get Sun..Sat\n const day = new Date(2024, 0, 7 + i);\n labels.push(day.toLocaleDateString(loc, { weekday: 'short' }).slice(0, 2));\n }\n return labels;\n});\n\nconst monthLabels = computed(() => {\n const loc = resolvedLocale.value;\n return Array.from({ length: 12 }, (_, i) =>\n new Date(2024, i, 1).toLocaleDateString(loc, { month: 'short' }),\n );\n});\n\nconst todayLabel = computed(() => {\n const loc = resolvedLocale.value;\n // Use Intl to get localized \"Today\" - fallback to English\n try {\n const rtf = new Intl.RelativeTimeFormat(loc, { numeric: 'auto' });\n const parts = rtf.formatToParts(0, 'day');\n const value = parts.find((p) => p.type === 'literal')?.value;\n if (value && value.trim()) return value.trim().charAt(0).toUpperCase() + value.trim().slice(1);\n } catch {\n /* fallback */\n }\n return 'Today';\n});\n\n// ─────────────────────────────────────────────\n// Calendar data generation\n// ─────────────────────────────────────────────\nconst calendarDates = computed(() => {\n const year = panelDate.value.getFullYear();\n const month = panelDate.value.getMonth();\n const firstDay = new Date(year, month, 1);\n const startDay = firstDay.getDay();\n const dates: { date: Date; current: boolean }[] = [];\n\n for (let i = startDay - 1; i >= 0; i--) {\n dates.push({ date: new Date(year, month, -i), current: false });\n }\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n for (let i = 1; i <= daysInMonth; i++) {\n dates.push({ date: new Date(year, month, i), current: true });\n }\n const remaining = 42 - dates.length;\n for (let i = 1; i <= remaining; i++) {\n dates.push({ date: new Date(year, month + 1, i), current: false });\n }\n return dates;\n});\n\nconst calendarMonths = computed(() => {\n return monthLabels.value.map((label, idx) => ({\n label,\n month: idx,\n year: panelDate.value.getFullYear(),\n }));\n});\n\nconst calendarYears = computed(() => {\n const year = panelDate.value.getFullYear();\n const decadeStart = Math.floor(year / 10) * 10;\n const years: { year: number; current: boolean }[] = [];\n for (let i = decadeStart - 1; i <= decadeStart + 10; i++) {\n years.push({ year: i, current: i >= decadeStart && i < decadeStart + 10 });\n }\n return years;\n});\n\nconst calendarQuarters = computed(() => {\n const year = panelDate.value.getFullYear();\n return [1, 2, 3, 4].map((q) => ({ quarter: q, year, label: `Q${q}` }));\n});\n\nconst panelHeading = computed(() => {\n const y = panelDate.value.getFullYear();\n const m = panelDate.value.getMonth();\n if (panelMode.value === 'date' || panelMode.value === 'week') {\n return `${monthLabels.value[m]} ${y}`;\n }\n if (panelMode.value === 'month' || panelMode.value === 'quarter') {\n return `${y}`;\n }\n if (panelMode.value === 'year') {\n const decadeStart = Math.floor(y / 10) * 10;\n return `${decadeStart} - ${decadeStart + 9}`;\n }\n return `${y}`;\n});\n\n// ─────────────────────────────────────────────\n// Date checks\n// ─────────────────────────────────────────────\nfunction isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction isToday(d: Date): boolean {\n return isSameDay(d, new Date());\n}\n\nfunction isSelected(d: Date): boolean {\n return selectedDate.value ? isSameDay(d, selectedDate.value) : false;\n}\n\nfunction isDateDisabled(d: Date): boolean {\n if (minDate && d < new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate()))\n return true;\n if (maxDate && d > new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate()))\n return true;\n if (disabledDate) return disabledDate(d, { type: picker as `${BDatePickerType}` });\n return false;\n}\n\n// ─────────────────────────────────────────────\n// Panel open/close\n// ─────────────────────────────────────────────\nfunction openPanel() {\n if (disabled) return;\n isOpen.value = true;\n isPanelOpen.value = true;\n emit('openChange', true);\n panelEl.value?.showPopover?.();\n inputEl.value?.focus();\n}\n\nfunction closePanel() {\n isOpen.value = false;\n isPanelOpen.value = false;\n emit('openChange', false);\n panelEl.value?.hidePopover?.();\n inputEl.value?.focus();\n}\n\nfunction togglePanel() {\n if (isPanelOpen.value) {\n closePanel();\n } else {\n openPanel();\n }\n}\n\nfunction handlePopoverToggle(e: Event) {\n const toggleEvent = e as ToggleEvent;\n const nowOpen = toggleEvent.newState === 'open';\n isOpen.value = nowOpen;\n isPanelOpen.value = nowOpen;\n if (!nowOpen) {\n emit('openChange', false);\n }\n}\n\n// ─────────────────────────────────────────────\n// Selection handlers\n// ─────────────────────────────────────────────\nfunction selectDate(d: Date) {\n if (isDateDisabled(d)) return;\n selectedDate.value = d;\n panelDate.value = new Date(d);\n emit('change', d, formatDate(d));\n closePanel();\n}\n\nfunction selectMonth(month: number) {\n if (picker === BDatePickerType.Month) {\n const d = new Date(panelDate.value.getFullYear(), month, 1);\n selectedDate.value = d;\n emit('change', d, formatDate(d));\n closePanel();\n } else {\n panelDate.value = new Date(panelDate.value.getFullYear(), month, 1);\n panelMode.value = 'date';\n emit('panelChange', panelDate.value, 'date');\n }\n}\n\nfunction selectYear(year: number) {\n if (picker === BDatePickerType.Year) {\n const d = new Date(year, 0, 1);\n selectedDate.value = d;\n emit('change', d, formatDate(d));\n closePanel();\n } else {\n panelDate.value = new Date(year, panelDate.value.getMonth(), 1);\n panelMode.value = picker === BDatePickerType.Month ? 'month' : 'date';\n emit('panelChange', panelDate.value, panelMode.value);\n }\n}\n\nfunction selectQuarter(quarter: number) {\n const d = new Date(panelDate.value.getFullYear(), (quarter - 1) * 3, 1);\n selectedDate.value = d;\n emit('change', d, formatDate(d));\n closePanel();\n}\n\nfunction selectToday() {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n selectDate(today);\n}\n\nfunction selectPreset(preset: BDatePickerPreset) {\n const val = typeof preset.value === 'function' ? preset.value() : preset.value;\n selectDate(val);\n}\n\nfunction clearValue(e: Event) {\n e.stopPropagation();\n selectedDate.value = null;\n emit('change', null, '');\n}\n\n// ─────────────────────────────────────────────\n// Navigation\n// ─────────────────────────────────────────────\nfunction prevMonth() {\n panelDate.value = new Date(panelDate.value.getFullYear(), panelDate.value.getMonth() - 1, 1);\n}\n\nfunction nextMonth() {\n panelDate.value = new Date(panelDate.value.getFullYear(), panelDate.value.getMonth() + 1, 1);\n}\n\nfunction prevYear() {\n panelDate.value = new Date(panelDate.value.getFullYear() - 1, panelDate.value.getMonth(), 1);\n}\n\nfunction nextYear() {\n panelDate.value = new Date(panelDate.value.getFullYear() + 1, panelDate.value.getMonth(), 1);\n}\n\nfunction prevDecade() {\n panelDate.value = new Date(panelDate.value.getFullYear() - 10, panelDate.value.getMonth(), 1);\n}\n\nfunction nextDecade() {\n panelDate.value = new Date(panelDate.value.getFullYear() + 10, panelDate.value.getMonth(), 1);\n}\n\nfunction switchPanelMode(mode: string) {\n panelMode.value = mode;\n emit('panelChange', panelDate.value, mode);\n}\n\n// ─────────────────────────────────────────────\n// Input handling\n// ─────────────────────────────────────────────\nconst inputText = ref('');\n\nfunction handleInputChange(e: Event) {\n const value = (e.target as HTMLInputElement).value;\n inputText.value = value;\n}\n\nfunction handleInputBlur() {\n if (inputText.value) {\n const parsed = parseInput(inputText.value);\n if (parsed && !isDateDisabled(parsed)) {\n selectedDate.value = parsed;\n panelDate.value = new Date(parsed);\n emit('change', parsed, formatDate(parsed));\n }\n }\n inputText.value = '';\n}\n\nfunction handleInputKeydown(e: KeyboardEvent) {\n if (e.key === 'Enter') {\n if (!isPanelOpen.value) {\n openPanel();\n } else {\n handleInputBlur();\n closePanel();\n }\n } else if (e.key === 'Escape') {\n closePanel();\n } else if (e.key === 'ArrowDown' && !isPanelOpen.value) {\n openPanel();\n }\n}\n\n// ─────────────────────────────────────────────\n// Keyboard navigation in panel\n// ─────────────────────────────────────────────\nfunction handlePanelKeydown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n closePanel();\n return;\n }\n\n if (panelMode.value === 'date' || panelMode.value === 'week') {\n handleDateKeydown(e);\n } else if (panelMode.value === 'month') {\n handleMonthKeydown(e);\n } else if (panelMode.value === 'year') {\n handleYearKeydown(e);\n }\n}\n\nfunction handleDateKeydown(e: KeyboardEvent) {\n const pd = new Date(panelDate.value);\n let moved = false;\n\n switch (e.key) {\n case 'ArrowLeft':\n pd.setDate(pd.getDate() - 1);\n moved = true;\n break;\n case 'ArrowRight':\n pd.setDate(pd.getDate() + 1);\n moved = true;\n break;\n case 'ArrowUp':\n pd.setDate(pd.getDate() - 7);\n moved = true;\n break;\n case 'ArrowDown':\n pd.setDate(pd.getDate() + 7);\n moved = true;\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n selectDate(panelDate.value);\n return;\n case 'PageUp':\n if (e.shiftKey) {\n prevYear();\n } else {\n prevMonth();\n }\n e.preventDefault();\n return;\n case 'PageDown':\n if (e.shiftKey) {\n nextYear();\n } else {\n nextMonth();\n }\n e.preventDefault();\n return;\n }\n\n if (moved) {\n e.preventDefault();\n panelDate.value = pd;\n }\n}\n\nfunction handleMonthKeydown(e: KeyboardEvent) {\n const currentMonth = panelDate.value.getMonth();\n let newMonth = currentMonth;\n\n switch (e.key) {\n case 'ArrowLeft':\n newMonth = currentMonth - 1;\n break;\n case 'ArrowRight':\n newMonth = currentMonth + 1;\n break;\n case 'ArrowUp':\n newMonth = currentMonth - 3;\n break;\n case 'ArrowDown':\n newMonth = currentMonth + 3;\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n selectMonth(currentMonth);\n return;\n default:\n return;\n }\n\n e.preventDefault();\n if (newMonth < 0) {\n panelDate.value = new Date(panelDate.value.getFullYear() - 1, 12 + newMonth, 1);\n } else if (newMonth > 11) {\n panelDate.value = new Date(panelDate.value.getFullYear() + 1, newMonth - 12, 1);\n } else {\n panelDate.value = new Date(panelDate.value.getFullYear(), newMonth, 1);\n }\n}\n\nfunction handleYearKeydown(e: KeyboardEvent) {\n const currentYear = panelDate.value.getFullYear();\n let newYear = currentYear;\n\n switch (e.key) {\n case 'ArrowLeft':\n newYear = currentYear - 1;\n break;\n case 'ArrowRight':\n newYear = currentYear + 1;\n break;\n case 'ArrowUp':\n newYear = currentYear - 3;\n break;\n case 'ArrowDown':\n newYear = currentYear + 3;\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n selectYear(currentYear);\n return;\n default:\n return;\n }\n\n e.preventDefault();\n panelDate.value = new Date(newYear, panelDate.value.getMonth(), 1);\n}\n\n// ─────────────────────────────────────────────\n// Computed panel mode checks\n// ─────────────────────────────────────────────\nconst showDateGrid = computed(() => panelMode.value === 'date' || panelMode.value === 'week');\nconst showMonthGrid = computed(() => panelMode.value === 'month');\nconst showYearGrid = computed(() => panelMode.value === 'year');\nconst showQuarterGrid = computed(() => panelMode.value === 'quarter');\n\n// ─────────────────────────────────────────────\n// Placeholder\n// ─────────────────────────────────────────────\nconst effectivePlaceholder = computed(() => {\n if (placeholder) return placeholder;\n const map: Record<string, string> = {\n date: 'Select date',\n week: 'Select week',\n month: 'Select month',\n quarter: 'Select quarter',\n year: 'Select year',\n };\n return map[picker] ?? 'Select date';\n});\n\n// ─────────────────────────────────────────────\n// Watch for controlled open\n// ─────────────────────────────────────────────\nwatch(\n () => open,\n (val) => {\n if (val !== undefined) {\n isPanelOpen.value = val;\n isOpen.value = val;\n if (val) {\n panelEl.value?.showPopover?.();\n } else {\n panelEl.value?.hidePopover?.();\n }\n }\n },\n);\n\nwatch(isPanelOpen, (val) => {\n if (val) {\n panelMode.value = picker;\n if (selectedDate.value) {\n panelDate.value = new Date(selectedDate.value);\n }\n }\n});\n</script>\n\n<template>\n <div\n class=\"b-date-picker\"\n :class=\"[\n `b-date-picker--${size}`,\n `b-date-picker--${variant}`,\n {\n 'b-date-picker--disabled': disabled,\n 'b-date-picker--focused': isPanelOpen,\n 'b-date-picker--clearable': allowClear && !!selectedDate && !disabled,\n 'b-date-picker--error': status === BDatePickerStatus.Error,\n 'b-date-picker--warning': status === BDatePickerStatus.Warning,\n },\n ]\"\n >\n <!-- Input trigger -->\n <div class=\"b-date-picker__input-wrap\" @click=\"togglePanel\">\n <input\n ref=\"inputEl\"\n class=\"b-date-picker__input\"\n type=\"text\"\n :value=\"inputText || displayValue\"\n :placeholder=\"effectivePlaceholder\"\n :disabled=\"disabled\"\n :readonly=\"inputReadOnly\"\n :aria-expanded=\"isPanelOpen\"\n aria-haspopup=\"dialog\"\n :aria-controls=\"isPanelOpen ? `b-date-picker-panel-${componentUID}` : undefined\"\n role=\"combobox\"\n autocomplete=\"off\"\n @input=\"handleInputChange\"\n @blur=\"handleInputBlur\"\n @keydown=\"handleInputKeydown\"\n />\n\n <!-- Clear button -->\n <button\n v-if=\"allowClear && selectedDate && !disabled\"\n class=\"b-date-picker__clear\"\n type=\"button\"\n aria-label=\"Clear date\"\n tabindex=\"-1\"\n @click=\"clearValue\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M8 1a7 7 0 110 14A7 7 0 018 1zm2.828 4.172a.5.5 0 00-.707 0L8 7.293 5.879 5.172a.5.5 0 10-.707.707L7.293 8l-2.121 2.121a.5.5 0 10.707.707L8 8.707l2.121 2.121a.5.5 0 10.707-.707L8.707 8l2.121-2.121a.5.5 0 000-.707z\"\n />\n </svg>\n </button>\n\n <!-- Suffix icon -->\n <span class=\"b-date-picker__suffix\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path\n d=\"M4.5 1a.5.5 0 01.5.5V2h6v-.5a.5.5 0 011 0V2h1.5A1.5 1.5 0 0115 3.5v10a1.5 1.5 0 01-1.5 1.5h-11A1.5 1.5 0 011 13.5v-10A1.5 1.5 0 012.5 2H4v-.5a.5.5 0 01.5-.5zM14 6H2v7.5a.5.5 0 00.5.5h11a.5.5 0 00.5-.5V6zm-1.5-3H12v.5a.5.5 0 01-1 0V3H5v.5a.5.5 0 01-1 0V3H2.5a.5.5 0 00-.5.5V5h12V3.5a.5.5 0 00-.5-.5z\"\n />\n </svg>\n </span>\n </div>\n\n <!-- Panel (Popover API) -->\n <div\n :id=\"`b-date-picker-panel-${componentUID}`\"\n ref=\"panelEl\"\n class=\"b-date-picker__panel\"\n popover\n role=\"dialog\"\n :aria-label=\"`${picker} picker`\"\n :aria-modal=\"true\"\n @toggle=\"handlePopoverToggle\"\n @keydown=\"handlePanelKeydown\"\n >\n <div class=\"b-date-picker__panel-inner\">\n <!-- Presets sidebar -->\n <div v-if=\"presets && presets.length\" class=\"b-date-picker__presets\">\n <button\n v-for=\"preset in presets\"\n :key=\"preset.label\"\n class=\"b-date-picker__preset-btn\"\n type=\"button\"\n @click=\"selectPreset(preset)\"\n >\n {{ preset.label }}\n </button>\n </div>\n\n <div class=\"b-date-picker__panel-main\">\n <!-- Header -->\n <div class=\"b-date-picker__header\">\n <button\n v-if=\"showDateGrid\"\n class=\"b-date-picker__nav-btn\"\n type=\"button\"\n aria-label=\"Previous year\"\n @click=\"prevYear\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M9.354 3.354a.5.5 0 00-.708-.708l-5 5a.5.5 0 000 .708l5 5a.5.5 0 00.708-.708L4.707 8l4.647-4.646z\"\n />\n <path\n d=\"M12.354 3.354a.5.5 0 00-.708-.708l-5 5a.5.5 0 000 .708l5 5a.5.5 0 00.708-.708L7.707 8l4.647-4.646z\"\n />\n </svg>\n </button>\n <button\n v-if=\"showYearGrid\"\n class=\"b-date-picker__nav-btn\"\n type=\"button\"\n aria-label=\"Previous decade\"\n @click=\"prevDecade\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M9.354 3.354a.5.5 0 00-.708-.708l-5 5a.5.5 0 000 .708l5 5a.5.5 0 00.708-.708L4.707 8l4.647-4.646z\"\n />\n <path\n d=\"M12.354 3.354a.5.5 0 00-.708-.708l-5 5a.5.5 0 000 .708l5 5a.5.5 0 00.708-.708L7.707 8l4.647-4.646z\"\n />\n </svg>\n </button>\n <button\n v-if=\"showDateGrid\"\n class=\"b-date-picker__nav-btn\"\n type=\"button\"\n aria-label=\"Previous month\"\n @click=\"prevMonth\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M10.354 3.354a.5.5 0 00-.708-.708l-5 5a.5.5 0 000 .708l5 5a.5.5 0 00.708-.708L5.707 8l4.647-4.646z\"\n />\n </svg>\n </button>\n <button\n v-if=\"showMonthGrid || showQuarterGrid\"\n class=\"b-date-picker__nav-btn\"\n type=\"button\"\n aria-label=\"Previous year\"\n @click=\"prevYear\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M10.354 3.354a.5.5 0 00-.708-.708l-5 5a.5.5 0 000 .708l5 5a.5.5 0 00.708-.708L5.707 8l4.647-4.646z\"\n />\n </svg>\n </button>\n\n <!-- Heading -->\n <button\n class=\"b-date-picker__heading\"\n type=\"button\"\n :aria-label=\"`Current view: ${panelHeading}`\"\n @click=\"\n switchPanelMode(\n panelMode === 'date' || panelMode === 'week'\n ? 'month'\n : panelMode === 'month' || panelMode === 'quarter'\n ? 'year'\n : 'year',\n )\n \"\n >\n {{ panelHeading }}\n </button>\n\n <button\n v-if=\"showDateGrid\"\n class=\"b-date-picker__nav-btn\"\n type=\"button\"\n aria-label=\"Next month\"\n @click=\"nextMonth\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M5.646 3.354a.5.5 0 01.708-.708l5 5a.5.5 0 010 .708l-5 5a.5.5 0 01-.708-.708L10.293 8 5.646 3.354z\"\n />\n </svg>\n </button>\n <button\n v-if=\"showMonthGrid || showQuarterGrid\"\n class=\"b-date-picker__nav-btn\"\n type=\"button\"\n aria-label=\"Next year\"\n @click=\"nextYear\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M5.646 3.354a.5.5 0 01.708-.708l5 5a.5.5 0 010 .708l-5 5a.5.5 0 01-.708-.708L10.293 8 5.646 3.354z\"\n />\n </svg>\n </button>\n <button\n v-if=\"showDateGrid\"\n class=\"b-date-picker__nav-btn\"\n type=\"button\"\n aria-label=\"Next year\"\n @click=\"nextYear\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M5.646 3.354a.5.5 0 01.708-.708l5 5a.5.5 0 010 .708l-5 5a.5.5 0 01-.708-.708L10.293 8 5.646 3.354z\"\n />\n <path\n d=\"M2.646 3.354a.5.5 0 01.708-.708l5 5a.5.5 0 010 .708l-5 5a.5.5 0 01-.708-.708L7.293 8 2.646 3.354z\"\n />\n </svg>\n </button>\n <button\n v-if=\"showYearGrid\"\n class=\"b-date-picker__nav-btn\"\n type=\"button\"\n aria-label=\"Next decade\"\n @click=\"nextDecade\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M5.646 3.354a.5.5 0 01.708-.708l5 5a.5.5 0 010 .708l-5 5a.5.5 0 01-.708-.708L10.293 8 5.646 3.354z\"\n />\n <path\n d=\"M2.646 3.354a.5.5 0 01.708-.708l5 5a.5.5 0 010 .708l-5 5a.5.5 0 01-.708-.708L7.293 8 2.646 3.354z\"\n />\n </svg>\n </button>\n </div>\n\n <!-- Date grid -->\n <div v-if=\"showDateGrid\" class=\"b-date-picker__body\" role=\"grid\" aria-label=\"Calendar\">\n <div class=\"b-date-picker__weekdays\" role=\"row\">\n <div\n v-if=\"showWeek\"\n class=\"b-date-picker__weekday b-date-picker__week-number-header\"\n role=\"columnheader\"\n aria-label=\"Week\"\n >\n #\n </div>\n <div\n v-for=\"day in weekdayLabels\"\n :key=\"day\"\n class=\"b-date-picker__weekday\"\n role=\"columnheader\"\n :aria-label=\"day\"\n >\n {{ day }}\n </div>\n </div>\n\n <div v-for=\"(row, rowIdx) in 6\" :key=\"rowIdx\" class=\"b-date-picker__row\" role=\"row\">\n <div v-if=\"showWeek\" class=\"b-date-picker__cell b-date-picker__week-number\">\n {{ getWeekNumber(calendarDates[rowIdx * 7].date) }}\n </div>\n <button\n v-for=\"(cell, colIdx) in calendarDates.slice(rowIdx * 7, rowIdx * 7 + 7)\"\n :key=\"colIdx\"\n class=\"b-date-picker__cell\"\n :class=\"{\n 'b-date-picker__cell--other': !cell.current,\n 'b-date-picker__cell--today': isToday(cell.date),\n 'b-date-picker__cell--selected': isSelected(cell.date),\n 'b-date-picker__cell--disabled': isDateDisabled(cell.date),\n 'b-date-picker__cell--hovered': hoveredDate && isSameDay(cell.date, hoveredDate),\n }\"\n type=\"button\"\n :aria-label=\"`${cell.date.getFullYear()}-${String(cell.date.getMonth() + 1).padStart(2, '0')}-${String(cell.date.getDate()).padStart(2, '0')}`\"\n :aria-selected=\"isSelected(cell.date)\"\n :aria-disabled=\"isDateDisabled(cell.date)\"\n :disabled=\"isDateDisabled(cell.date)\"\n :tabindex=\"isSameDay(cell.date, panelDate) ? 0 : -1\"\n @click=\"selectDate(cell.date)\"\n @mouseenter=\"hoveredDate = cell.date\"\n @mouseleave=\"hoveredDate = null\"\n >\n {{ cell.date.getDate() }}\n </button>\n </div>\n </div>\n\n <!-- Month grid -->\n <div\n v-if=\"showMonthGrid\"\n class=\"b-date-picker__body b-date-picker__grid-3x4\"\n role=\"grid\"\n aria-label=\"Month selection\"\n >\n <button\n v-for=\"item in calendarMonths\"\n :key=\"item.month\"\n class=\"b-date-picker__cell b-date-picker__cell--large\"\n :class=\"{\n 'b-date-picker__cell--selected':\n selectedDate &&\n selectedDate.getFullYear() === item.year &&\n selectedDate.getMonth() === item.month,\n 'b-date-picker__cell--current':\n new Date().getMonth() === item.month && new Date().getFullYear() === item.year,\n }\"\n type=\"button\"\n :aria-label=\"item.label\"\n :aria-selected=\"\n selectedDate?.getMonth() === item.month && selectedDate?.getFullYear() === item.year\n \"\n @click=\"selectMonth(item.month)\"\n >\n {{ item.label }}\n </button>\n </div>\n\n <!-- Year grid -->\n <div\n v-if=\"showYearGrid\"\n class=\"b-date-picker__body b-date-picker__grid-3x4\"\n role=\"grid\"\n aria-label=\"Year selection\"\n >\n <button\n v-for=\"item in calendarYears\"\n :key=\"item.year\"\n class=\"b-date-picker__cell b-date-picker__cell--large\"\n :class=\"{\n 'b-date-picker__cell--other': !item.current,\n 'b-date-picker__cell--selected':\n selectedDate && selectedDate.getFullYear() === item.year,\n 'b-date-picker__cell--current': new Date().getFullYear() === item.year,\n }\"\n type=\"button\"\n :aria-label=\"String(item.year)\"\n :aria-selected=\"selectedDate?.getFullYear() === item.year\"\n @click=\"selectYear(item.year)\"\n >\n {{ item.year }}\n </button>\n </div>\n\n <!-- Quarter grid -->\n <div\n v-if=\"showQuarterGrid\"\n class=\"b-date-picker__body b-date-picker__grid-2x2\"\n role=\"grid\"\n aria-label=\"Quarter selection\"\n >\n <button\n v-for=\"item in calendarQuarters\"\n :key=\"item.quarter\"\n class=\"b-date-picker__cell b-date-picker__cell--large\"\n :class=\"{\n 'b-date-picker__cell--selected':\n selectedDate &&\n Math.ceil((selectedDate.getMonth() + 1) / 3) === item.quarter &&\n selectedDate.getFullYear() === item.year,\n }\"\n type=\"button\"\n :aria-label=\"`Quarter ${item.quarter}`\"\n @click=\"selectQuarter(item.quarter)\"\n >\n {{ item.label }}\n </button>\n </div>\n\n <!-- Footer -->\n <div\n v-if=\"showNow && (panelMode === 'date' || panelMode === 'week')\"\n class=\"b-date-picker__footer\"\n >\n <button class=\"b-date-picker__today-btn\" type=\"button\" @click=\"selectToday\">\n {{ todayLabel }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style>\n.b-date-picker {\n --b-date-picker-active-bg: #ffffff;\n --b-date-picker-active-border-color: #1677ff;\n --b-date-picker-active-shadow: 0 0 0 2px rgba(5, 145, 255, 0.1);\n --b-date-picker-hover-bg: #ffffff;\n --b-date-picker-hover-border-color: #4096ff;\n --b-date-picker-cell-active-with-range-bg: #e6f4ff;\n --b-date-picker-cell-bg-disabled: rgba(0, 0, 0, 0.04);\n --b-date-picker-cell-height: 24px;\n --b-date-picker-cell-width: 36px;\n --b-date-picker-cell-hover-bg: rgba(0, 0, 0, 0.04);\n --b-date-picker-cell-hover-with-range-bg: #c8dfff;\n --b-date-picker-cell-range-border-color: #82b4f9;\n --b-date-picker-error-active-shadow: 0 0 0 2px rgba(255, 38, 5, 0.06);\n --b-date-picker-warning-active-shadow: 0 0 0 2px rgba(255, 215, 5, 0.1);\n --b-date-picker-input-font-size: 14px;\n --b-date-picker-input-font-size-lg: 16px;\n --b-date-picker-input-font-size-sm: 12px;\n --b-date-picker-padding-block: 4px;\n --b-date-picker-padding-block-lg: 7px;\n --b-date-picker-padding-block-sm: 0px;\n --b-date-picker-padding-inline: 11px;\n --b-date-picker-padding-inline-lg: 11px;\n --b-date-picker-padding-inline-sm: 7px;\n --b-date-picker-presets-width: 120px;\n --b-date-picker-presets-max-width: 200px;\n --b-date-picker-text-height: 40px;\n --b-date-picker-without-time-cell-height: 66px;\n --b-date-picker-z-index-popup: 1050;\n --b-date-picker-bg: #ffffff;\n --b-date-picker-border-color: #d9d9d9;\n --b-date-picker-border-radius: 6px;\n --b-date-picker-text-color: rgba(0, 0, 0, 0.88);\n --b-date-picker-text-color-secondary: rgba(0, 0, 0, 0.45);\n --b-date-picker-text-color-disabled: rgba(0, 0, 0, 0.25);\n --b-date-picker-panel-bg: #ffffff;\n --b-date-picker-panel-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-date-picker-selected-bg: #1677ff;\n --b-date-picker-selected-color: #ffffff;\n --b-date-picker-today-border-color: #1677ff;\n --b-date-picker-transition-duration: 200ms;\n\n position: relative;\n display: inline-flex;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-size: var(--b-date-picker-input-font-size);\n color: var(--b-date-picker-text-color);\n}\n\n.b-date-picker--sm .b-date-picker__input-wrap {\n height: 24px;\n padding: var(--b-date-picker-padding-block-sm) var(--b-date-picker-padding-inline-sm);\n font-size: var(--b-date-picker-input-font-size-sm);\n}\n.b-date-picker--md .b-date-picker__input-wrap {\n height: 32px;\n padding: var(--b-date-picker-padding-block) var(--b-date-picker-padding-inline);\n font-size: var(--b-date-picker-input-font-size);\n}\n.b-date-picker--lg .b-date-picker__input-wrap {\n height: 40px;\n padding: var(--b-date-picker-padding-block-lg) var(--b-date-picker-padding-inline-lg);\n font-size: var(--b-date-picker-input-font-size-lg);\n}\n\n.b-date-picker__input-wrap {\n display: flex;\n align-items: center;\n gap: 4px;\n width: 100%;\n min-width: 120px;\n background: var(--b-date-picker-bg);\n border: 1px solid var(--b-date-picker-border-color);\n border-radius: var(--b-date-picker-border-radius);\n cursor: pointer;\n transition:\n border-color var(--b-date-picker-transition-duration),\n box-shadow var(--b-date-picker-transition-duration);\n anchor-name: v-bind('anchorName');\n}\n\n.b-date-picker__input-wrap:hover:not(.b-date-picker--disabled .b-date-picker__input-wrap) {\n border-color: var(--b-date-picker-hover-border-color);\n background: var(--b-date-picker-hover-bg);\n}\n\n.b-date-picker--focused .b-date-picker__input-wrap {\n border-color: var(--b-date-picker-active-border-color);\n box-shadow: var(--b-date-picker-active-shadow);\n background: var(--b-date-picker-active-bg);\n}\n\n.b-date-picker--filled .b-date-picker__input-wrap {\n background: rgba(0, 0, 0, 0.04);\n border-color: transparent;\n}\n.b-date-picker--filled.b-date-picker--focused .b-date-picker__input-wrap {\n background: var(--b-date-picker-active-bg);\n border-color: var(--b-date-picker-active-border-color);\n}\n\n.b-date-picker--borderless .b-date-picker__input-wrap {\n border-color: transparent;\n box-shadow: none;\n}\n.b-date-picker--borderless.b-date-picker--focused .b-date-picker__input-wrap {\n box-shadow: none;\n}\n\n.b-date-picker--underlined .b-date-picker__input-wrap {\n border-radius: 0;\n border: none;\n border-bottom: 1px solid var(--b-date-picker-border-color);\n}\n.b-date-picker--underlined.b-date-picker--focused .b-date-picker__input-wrap {\n border-bottom-color: var(--b-date-picker-active-border-color);\n box-shadow: none;\n}\n\n.b-date-picker--error .b-date-picker__input-wrap {\n border-color: #ff4d4f;\n}\n.b-date-picker--error.b-date-picker--focused .b-date-picker__input-wrap {\n box-shadow: var(--b-date-picker-error-active-shadow);\n}\n.b-date-picker--warning .b-date-picker__input-wrap {\n border-color: #faad14;\n}\n.b-date-picker--warning.b-date-picker--focused .b-date-picker__input-wrap {\n box-shadow: var(--b-date-picker-warning-active-shadow);\n}\n\n.b-date-picker--disabled .b-date-picker__input-wrap {\n background: rgba(0, 0, 0, 0.04);\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.b-date-picker__input {\n flex: 1;\n border: none;\n outline: none;\n background: transparent;\n font: inherit;\n color: inherit;\n cursor: inherit;\n min-width: 0;\n}\n.b-date-picker__input::placeholder {\n color: var(--b-date-picker-text-color-secondary);\n}\n\n.b-date-picker__suffix {\n display: flex;\n align-items: center;\n color: var(--b-date-picker-text-color-secondary);\n flex-shrink: 0;\n}\n.b-date-picker__suffix svg {\n width: 14px;\n height: 14px;\n}\n\n.b-date-picker__clear {\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n color: var(--b-date-picker-text-color-secondary);\n cursor: pointer;\n padding: 0;\n opacity: 0;\n transition: opacity var(--b-date-picker-transition-duration);\n}\n.b-date-picker__clear svg {\n width: 14px;\n height: 14px;\n}\n.b-date-picker--clearable:hover .b-date-picker__clear {\n opacity: 1;\n}\n.b-date-picker--clearable:hover .b-date-picker__suffix {\n opacity: 0;\n}\n.b-date-picker--clearable:not(:hover) .b-date-picker__suffix {\n opacity: 1;\n}\n\n.b-date-picker__panel {\n position: absolute;\n margin: 0;\n border: none;\n padding: 0;\n background: transparent;\n overflow: visible;\n z-index: var(--b-date-picker-z-index-popup);\n\n position-anchor: v-bind('anchorName');\n inset: auto;\n top: anchor(bottom);\n left: anchor(left);\n margin-top: 4px;\n\n opacity: 0;\n transform: translateY(-4px);\n transition:\n opacity var(--b-date-picker-transition-duration),\n transform var(--b-date-picker-transition-duration),\n display var(--b-date-picker-transition-duration);\n transition-behavior: allow-discrete;\n}\n\n.b-date-picker__panel:popover-open {\n opacity: 1;\n transform: translateY(0);\n\n @starting-style {\n opacity: 0;\n transform: translateY(-4px);\n }\n}\n\n.b-date-picker__panel-inner {\n display: flex;\n background: var(--b-date-picker-panel-bg);\n border-radius: var(--b-date-picker-border-radius);\n box-shadow: var(--b-date-picker-panel-shadow);\n}\n\n.b-date-picker__presets {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 8px;\n border-right: 1px solid rgba(0, 0, 0, 0.06);\n min-width: var(--b-date-picker-presets-width);\n max-width: var(--b-date-picker-presets-max-width);\n}\n.b-date-picker__preset-btn {\n padding: 4px 8px;\n border: none;\n border-radius: 4px;\n background: transparent;\n text-align: left;\n cursor: pointer;\n font-size: 14px;\n color: var(--b-date-picker-text-color);\n white-space: nowrap;\n transition: background var(--b-date-picker-transition-duration);\n}\n.b-date-picker__preset-btn:hover {\n background: var(--b-date-picker-cell-hover-bg);\n}\n\n.b-date-picker__panel-main {\n padding: 8px;\n min-width: 280px;\n}\n\n.b-date-picker__header {\n display: flex;\n align-items: center;\n padding: 0 4px 8px;\n}\n.b-date-picker__nav-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n cursor: pointer;\n color: var(--b-date-picker-text-color-secondary);\n transition:\n color var(--b-date-picker-transition-duration),\n background var(--b-date-picker-transition-duration);\n}\n.b-date-picker__nav-btn:hover {\n color: var(--b-date-picker-text-color);\n background: var(--b-date-picker-cell-hover-bg);\n}\n.b-date-picker__nav-btn svg {\n width: 12px;\n height: 12px;\n}\n.b-date-picker__heading {\n flex: 1;\n text-align: center;\n border: none;\n background: transparent;\n font-weight: 600;\n font-size: 14px;\n cursor: pointer;\n color: var(--b-date-picker-text-color);\n padding: 4px 8px;\n border-radius: 4px;\n transition: background var(--b-date-picker-transition-duration);\n}\n.b-date-picker__heading:hover {\n background: var(--b-date-picker-cell-hover-bg);\n}\n\n.b-date-picker__body {\n border-top: 1px solid rgba(0, 0, 0, 0.06);\n padding-top: 4px;\n}\n\n.b-date-picker__weekdays {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n text-align: center;\n}\n.b-date-picker__weekdays:has(.b-date-picker__week-number-header) {\n grid-template-columns: 32px repeat(7, 1fr);\n}\n.b-date-picker__weekday {\n padding: 4px 0;\n font-size: 12px;\n font-weight: 500;\n color: var(--b-date-picker-text-color-secondary);\n}\n.b-date-picker__week-number-header {\n color: var(--b-date-picker-text-color-disabled);\n}\n\n.b-date-picker__row {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n}\n.b-date-picker__row:has(.b-date-picker__week-number) {\n grid-template-columns: 32px repeat(7, 1fr);\n}\n.b-date-picker__week-number {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--b-date-picker-text-color-disabled);\n}\n\n.b-date-picker__cell {\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--b-date-picker-cell-width);\n height: var(--b-date-picker-cell-height);\n margin: 2px auto;\n border: none;\n border-radius: 4px;\n background: transparent;\n font-size: 14px;\n cursor: pointer;\n color: var(--b-date-picker-text-color);\n transition:\n background var(--b-date-picker-transition-duration),\n color var(--b-date-picker-transition-duration);\n}\n.b-date-picker__cell:hover:not(:disabled) {\n background: var(--b-date-picker-cell-hover-bg);\n}\n.b-date-picker__cell--other {\n color: var(--b-date-picker-text-color-disabled);\n}\n.b-date-picker__cell--today {\n border: 1px solid var(--b-date-picker-today-border-color);\n}\n.b-date-picker__cell--selected {\n background: var(--b-date-picker-selected-bg) !important;\n color: var(--b-date-picker-selected-color) !important;\n}\n.b-date-picker__cell--disabled {\n color: var(--b-date-picker-text-color-disabled);\n background: var(--b-date-picker-cell-bg-disabled);\n cursor: not-allowed;\n}\n.b-date-picker__cell--current {\n border: 1px solid var(--b-date-picker-today-border-color);\n}\n.b-date-picker__cell--large {\n width: auto;\n height: var(--b-date-picker-without-time-cell-height);\n padding: 8px 12px;\n}\n\n.b-date-picker__grid-3x4 {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 4px;\n}\n.b-date-picker__grid-2x2 {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 8px;\n}\n\n.b-date-picker__footer {\n display: flex;\n justify-content: center;\n padding-top: 8px;\n border-top: 1px solid rgba(0, 0, 0, 0.06);\n margin-top: 4px;\n}\n.b-date-picker__today-btn {\n border: none;\n background: transparent;\n color: var(--b-date-picker-active-border-color);\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: background var(--b-date-picker-transition-duration);\n}\n.b-date-picker__today-btn:hover {\n background: var(--b-date-picker-cell-hover-bg);\n}\n\n[data-prefers-color='dark'] .b-date-picker {\n --b-date-picker-bg: #141414;\n --b-date-picker-panel-bg: #1f1f1f;\n --b-date-picker-border-color: #424242;\n --b-date-picker-text-color: rgba(255, 255, 255, 0.88);\n --b-date-picker-text-color-secondary: rgba(255, 255, 255, 0.45);\n --b-date-picker-text-color-disabled: rgba(255, 255, 255, 0.25);\n --b-date-picker-hover-border-color: #3c89e8;\n --b-date-picker-active-border-color: #1668dc;\n --b-date-picker-active-shadow: 0 0 0 2px rgba(22, 104, 220, 0.15);\n --b-date-picker-cell-hover-bg: rgba(255, 255, 255, 0.08);\n --b-date-picker-cell-bg-disabled: rgba(255, 255, 255, 0.08);\n --b-date-picker-selected-bg: #1668dc;\n --b-date-picker-today-border-color: #1668dc;\n --b-date-picker-panel-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.32), 0 3px 6px -4px rgba(0, 0, 0, 0.48),\n 0 9px 28px 8px rgba(0, 0, 0, 0.2);\n --b-date-picker-hover-bg: #141414;\n --b-date-picker-active-bg: #141414;\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-date-picker {\n --b-date-picker-bg: #141414;\n --b-date-picker-panel-bg: #1f1f1f;\n --b-date-picker-border-color: #424242;\n --b-date-picker-text-color: rgba(255, 255, 255, 0.88);\n --b-date-picker-text-color-secondary: rgba(255, 255, 255, 0.45);\n --b-date-picker-text-color-disabled: rgba(255, 255, 255, 0.25);\n --b-date-picker-hover-border-color: #3c89e8;\n --b-date-picker-active-border-color: #1668dc;\n --b-date-picker-active-shadow: 0 0 0 2px rgba(22, 104, 220, 0.15);\n --b-date-picker-cell-hover-bg: rgba(255, 255, 255, 0.08);\n --b-date-picker-cell-bg-disabled: rgba(255, 255, 255, 0.08);\n --b-date-picker-selected-bg: #1668dc;\n --b-date-picker-today-border-color: #1668dc;\n --b-date-picker-panel-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.32), 0 3px 6px -4px rgba(0, 0, 0, 0.48),\n 0 9px 28px 8px rgba(0, 0, 0, 0.2);\n --b-date-picker-hover-bg: #141414;\n --b-date-picker-active-bg: #141414;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .b-date-picker,\n .b-date-picker__panel,\n .b-date-picker__cell,\n .b-date-picker__input-wrap,\n .b-date-picker__clear,\n .b-date-picker__nav-btn,\n .b-date-picker__heading,\n .b-date-picker__preset-btn,\n .b-date-picker__today-btn {\n transition-duration: 0ms !important;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import e from "./design-system76.js";
2
- //#region src/components/BDescriptions/BDescriptionsItem.vue
3
- var t = e;
4
- //#endregion
5
- export { t as default };
6
-
7
- //# sourceMappingURL=design-system77.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"design-system77.js","names":[],"sources":["../src/components/BDescriptions/BDescriptionsItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { CSSProperties } from 'vue';\nimport { useSlots } from 'vue';\n\n// ─────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────\nconst {\n label,\n span = 1,\n labelStyle,\n contentStyle,\n} = defineProps<{\n /** Label text displayed for this item. Can be overridden by the `label` slot. */\n label?: string;\n /** Number of columns this item spans. @default 1 */\n span?: number;\n /** Inline style applied to the label cell. */\n labelStyle?: CSSProperties;\n /** Inline style applied to the content cell. */\n contentStyle?: CSSProperties;\n}>();\n\n// ─────────────────────────────────────────────\n// Slots\n// ─────────────────────────────────────────────\ndefineSlots<{\n /** Main content of the description item */\n default?: (props: Record<string, never>) => unknown;\n /** Custom label content. Overrides the `label` prop */\n label?: (props: Record<string, never>) => unknown;\n}>();\n\nconst slots = useSlots();\n\n// Expose props for parent to read\ndefineExpose({ label, span, labelStyle, contentStyle, slots });\n</script>\n\n<template>\n <!--\n BDescriptionsItem is a data-only component.\n It does not render its own markup; BDescriptions reads its props/slots\n and renders them in a table/list structure.\n This template is used as a fallback if the item is rendered standalone.\n -->\n <div class=\"b-descriptions-item\">\n <span v-if=\"label || $slots.label\" class=\"b-descriptions-item__label\" :style=\"labelStyle\">\n <slot name=\"label\">{{ label }}</slot>\n </span>\n <span class=\"b-descriptions-item__content\" :style=\"contentStyle\">\n <slot />\n </span>\n </div>\n</template>\n"],"mappings":""}
@@ -1,276 +0,0 @@
1
- import { useComponentId as e } from "./design-system10.js";
2
- import { BDropdownPlacement as t, BDropdownTrigger as n } from "./design-system84.js";
3
- import { Fragment as r, computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, defineComponent as c, nextTick as l, normalizeClass as u, normalizeStyle as d, onBeforeUnmount as ee, onMounted as te, openBlock as f, ref as p, renderList as m, renderSlot as h, toDisplayString as g, unref as ne, useId as re, watch as _ } from "vue";
4
- //#region src/components/BDropdown/BDropdown.vue?vue&type=script&setup=true&lang.ts
5
- var ie = {
6
- key: 0,
7
- class: "b-dropdown__indicator",
8
- "aria-hidden": "true"
9
- }, ae = ["aria-labelledby"], v = {
10
- key: 0,
11
- class: "b-dropdown__content"
12
- }, y = {
13
- key: 0,
14
- class: "b-dropdown__divider",
15
- role: "separator"
16
- }, oe = ["aria-label"], se = { class: "b-dropdown__group-title" }, ce = [
17
- "tabindex",
18
- "aria-disabled",
19
- "onClick"
20
- ], le = {
21
- key: 0,
22
- class: "b-dropdown__item-icon",
23
- "aria-hidden": "true"
24
- }, ue = { class: "b-dropdown__item-label" }, de = [
25
- "tabindex",
26
- "aria-disabled",
27
- "onClick"
28
- ], fe = {
29
- key: 0,
30
- class: "b-dropdown__item-icon",
31
- "aria-hidden": "true"
32
- }, b = { class: "b-dropdown__item-label" }, x = "[role=\"menuitem\"]:not([aria-disabled=\"true\"])", S = /* @__PURE__ */ c({
33
- __name: "BDropdown",
34
- props: {
35
- trigger: { default: () => n.Hover },
36
- placement: { default: () => t.BottomLeft },
37
- arrow: {
38
- type: Boolean,
39
- default: !1
40
- },
41
- disabled: {
42
- type: Boolean,
43
- default: !1
44
- },
45
- destroyOnHidden: {
46
- type: Boolean,
47
- default: !1
48
- },
49
- mouseEnterDelay: { default: 100 },
50
- mouseLeaveDelay: { default: 100 },
51
- menu: {},
52
- modelValue: {
53
- type: Boolean,
54
- default: () => void 0
55
- }
56
- },
57
- emits: [
58
- "openChange",
59
- "update:modelValue",
60
- "menuClick"
61
- ],
62
- setup(c, { expose: S, emit: pe }) {
63
- let C = pe, { componentUID: me } = e(), w = re(), he = `${w}-menu`, T = p(!1), E = i(() => c.modelValue === void 0 ? T.value : c.modelValue), ge = i(() => c.destroyOnHidden ? E.value : !0), D = null, O = null;
64
- function k() {
65
- D &&= (clearTimeout(D), null), O &&= (clearTimeout(O), null);
66
- }
67
- function A(e = 0) {
68
- c.disabled || (k(), !E.value && (e > 0 ? D = setTimeout(() => M(), e) : M()));
69
- }
70
- function j(e = 0) {
71
- k(), E.value && (e > 0 ? O = setTimeout(() => N(), e) : N());
72
- }
73
- function M() {
74
- I.value?.showPopover();
75
- }
76
- function N() {
77
- I.value?.hidePopover();
78
- }
79
- function P(e) {
80
- c.modelValue === void 0 ? T.value = e : C("update:modelValue", e), C("openChange", e);
81
- }
82
- let F = ({ newState: e }) => {
83
- P(e === "open");
84
- }, I = p(null), L = p(null), R = null, z = p(-1);
85
- function B() {
86
- return I.value ? Array.from(I.value.querySelectorAll(x)) : [];
87
- }
88
- function V(e) {
89
- let t = B();
90
- if (t.length === 0) return;
91
- let n = Math.max(0, Math.min(e, t.length - 1));
92
- z.value = n, t[n]?.focus();
93
- }
94
- function H() {
95
- l(() => V(0));
96
- }
97
- function U() {
98
- l(() => {
99
- V(B().length - 1);
100
- });
101
- }
102
- _(E, (e) => {
103
- e ? (R = document.activeElement, H()) : (z.value = -1, R && l(() => R?.focus()));
104
- });
105
- function W(e) {
106
- e.disabled || (C("menuClick", {
107
- key: e.key,
108
- item: e
109
- }), j());
110
- }
111
- function G() {
112
- c.disabled || (E.value ? j() : A());
113
- }
114
- function K(e) {
115
- c.disabled || (e.preventDefault(), E.value ? j() : A());
116
- }
117
- function q() {
118
- c.disabled || A(c.mouseEnterDelay);
119
- }
120
- function J() {
121
- j(c.mouseLeaveDelay);
122
- }
123
- function Y(e) {
124
- if (!c.disabled) switch (e.key) {
125
- case "Enter":
126
- case " ":
127
- case "ArrowDown":
128
- e.preventDefault(), E.value ? H() : (A(), l(() => H()));
129
- break;
130
- case "ArrowUp":
131
- e.preventDefault(), E.value ? U() : (A(), l(() => U()));
132
- break;
133
- case "Escape":
134
- E.value && (e.preventDefault(), j());
135
- break;
136
- }
137
- }
138
- function _e(e) {
139
- let t = B(), n = t.indexOf(document.activeElement);
140
- switch (e.key) {
141
- case "ArrowDown":
142
- e.preventDefault(), V(n < t.length - 1 ? n + 1 : 0);
143
- break;
144
- case "ArrowUp":
145
- e.preventDefault(), V(n > 0 ? n - 1 : t.length - 1);
146
- break;
147
- case "Home":
148
- e.preventDefault(), V(0);
149
- break;
150
- case "End":
151
- e.preventDefault(), V(t.length - 1);
152
- break;
153
- case "Enter":
154
- case " ":
155
- e.preventDefault(), document.activeElement && document.activeElement.click();
156
- break;
157
- case "Escape":
158
- e.preventDefault(), j();
159
- break;
160
- case "Tab":
161
- j();
162
- break;
163
- }
164
- }
165
- function ve() {
166
- c.trigger === n.Hover && k();
167
- }
168
- function ye() {
169
- c.trigger === n.Hover && j(c.mouseLeaveDelay);
170
- }
171
- function X(e) {
172
- if (!E.value) return;
173
- let t = e.target;
174
- L.value?.contains(t) || I.value?.contains(t) || j();
175
- }
176
- function Z() {
177
- let e = L.value;
178
- if (e) switch (e.addEventListener("keydown", Y), c.trigger) {
179
- case n.Click:
180
- e.addEventListener("click", G);
181
- break;
182
- case n.ContextMenu:
183
- e.addEventListener("contextmenu", K);
184
- break;
185
- case n.Hover:
186
- default:
187
- e.addEventListener("mouseenter", q), e.addEventListener("mouseleave", J);
188
- break;
189
- }
190
- }
191
- function Q() {
192
- let e = L.value;
193
- e && (e.removeEventListener("keydown", Y), e.removeEventListener("click", G), e.removeEventListener("contextmenu", K), e.removeEventListener("mouseenter", q), e.removeEventListener("mouseleave", J));
194
- }
195
- te(() => {
196
- Z();
197
- }), ee(() => {
198
- Q(), document.removeEventListener("click", X, !0), k();
199
- }), _(E, (e) => {
200
- e ? document.addEventListener("click", X, !0) : document.removeEventListener("click", X, !0);
201
- }), _(() => c.trigger, () => {
202
- Q(), Z();
203
- }), _(() => c.modelValue, (e) => {
204
- e !== void 0 && (e ? I.value?.showPopover() : I.value?.hidePopover());
205
- });
206
- let $ = i(() => `--b-dropdown-anchor-${me.value}`), be = i(() => ({
207
- [t.Bottom]: "bottom-center",
208
- [t.BottomLeft]: "bottom-left",
209
- [t.BottomRight]: "bottom-right",
210
- [t.Top]: "top-center",
211
- [t.TopLeft]: "top-left",
212
- [t.TopRight]: "top-right"
213
- })[c.placement] ?? "bottom-left"), xe = i(() => c.menu?.items ?? []), Se = i(() => ({
214
- id: w,
215
- "aria-haspopup": "menu",
216
- "aria-expanded": E.value,
217
- "aria-disabled": c.disabled || void 0
218
- }));
219
- return S({
220
- open: M,
221
- close: N
222
- }), (e, t) => (f(), o(r, null, [s("div", {
223
- ref_key: "toggleRef",
224
- ref: L,
225
- class: u(["b-dropdown__toggle", { "b-dropdown__toggle--open": E.value }]),
226
- style: d({ anchorName: $.value })
227
- }, [h(e.$slots, "default", { triggerProps: Se.value }), c.arrow ? (f(), o("span", ie)) : a("", !0)], 6), s("div", {
228
- ref_key: "popoverRef",
229
- ref: I,
230
- popover: "manual",
231
- class: u(["b-dropdown", be.value]),
232
- style: d({ positionAnchor: $.value }),
233
- id: he,
234
- role: "menu",
235
- "aria-labelledby": ne(w),
236
- tabindex: "-1",
237
- onToggle: F,
238
- onKeydown: _e,
239
- onMouseenter: ve,
240
- onMouseleave: ye
241
- }, [ge.value ? (f(), o("div", v, [h(e.$slots, "overlay", {}, () => [(f(!0), o(r, null, m(xe.value, (e) => (f(), o(r, { key: e.key }, [e.type === "divider" ? (f(), o("div", y)) : e.type === "group" ? (f(), o("div", {
242
- key: 1,
243
- class: "b-dropdown__group",
244
- role: "group",
245
- "aria-label": e.title
246
- }, [s("div", se, g(e.title), 1), (f(!0), o(r, null, m(e.children, (e) => (f(), o("div", {
247
- key: e.key,
248
- class: u([
249
- "b-dropdown__item",
250
- { "b-dropdown__item--disabled": e.disabled },
251
- { "b-dropdown__item--danger": e.danger },
252
- { "b-dropdown__item--selected": c.menu?.selectedKeys?.includes(e.key) }
253
- ]),
254
- role: "menuitem",
255
- tabindex: e.disabled ? -1 : 0,
256
- "aria-disabled": e.disabled || void 0,
257
- onClick: (t) => W(e)
258
- }, [e.icon ? (f(), o("span", le, g(e.icon), 1)) : a("", !0), s("span", ue, g(e.label), 1)], 10, ce))), 128))], 8, oe)) : (f(), o("div", {
259
- key: 2,
260
- class: u([
261
- "b-dropdown__item",
262
- { "b-dropdown__item--disabled": e.disabled },
263
- { "b-dropdown__item--danger": e.danger },
264
- { "b-dropdown__item--selected": c.menu?.selectedKeys?.includes(e.key) }
265
- ]),
266
- role: "menuitem",
267
- tabindex: e.disabled ? -1 : 0,
268
- "aria-disabled": e.disabled || void 0,
269
- onClick: (t) => W(e)
270
- }, [e.icon ? (f(), o("span", fe, g(e.icon), 1)) : a("", !0), s("span", b, g(e.label), 1)], 10, de))], 64))), 128))])])) : a("", !0)], 46, ae)], 64));
271
- }
272
- });
273
- //#endregion
274
- export { S as default };
275
-
276
- //# sourceMappingURL=design-system85.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"design-system85.js","names":[],"sources":["../src/components/BDropdown/BDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useComponentId } from '@/composables/useComponentId.ts';\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useId, watch } from 'vue';\n\nimport type { BDropdownMenuItem, BDropdownMenuProps } from './types.ts';\nimport { BDropdownPlacement, BDropdownTrigger } from './types.ts';\n\nconst {\n trigger = BDropdownTrigger.Hover,\n placement = BDropdownPlacement.BottomLeft,\n arrow = false,\n disabled = false,\n destroyOnHidden = false,\n mouseEnterDelay = 100,\n mouseLeaveDelay = 100,\n menu,\n modelValue = undefined,\n} = defineProps<{\n /** The trigger mode which executes the dropdown action. */\n trigger?: `${BDropdownTrigger}`;\n /** Placement of popup menu. */\n placement?: `${BDropdownPlacement}`;\n /** Whether to show the dropdown chevron indicator next to the trigger. */\n arrow?: boolean;\n /** Whether the dropdown menu is disabled. */\n disabled?: boolean;\n /** Whether to destroy popup on hide. */\n destroyOnHidden?: boolean;\n /** Delay in ms before showing on mouseenter (hover trigger only). */\n mouseEnterDelay?: number;\n /** Delay in ms before hiding on mouseleave (hover trigger only). */\n mouseLeaveDelay?: number;\n /** Menu configuration: items, selectable, multiple, selectedKeys. */\n menu?: BDropdownMenuProps;\n /** Controlled open state - bind with `v-model:open`. */\n modelValue?: boolean;\n}>();\n\nconst emit = defineEmits<{\n /** Emitted when the dropdown visibility changes. */\n (e: 'openChange', open: boolean): void;\n /** v-model:open support. */\n (e: 'update:modelValue', value: boolean): void;\n /** Emitted when a menu item is clicked. */\n (e: 'menuClick', info: { key: string | number; item: BDropdownMenuItem }): void;\n}>();\n\ndefineSlots<{\n /** The trigger element. Receives `triggerProps` to bind ARIA attributes. */\n default?(props: { triggerProps: Record<string, unknown> }): unknown;\n /** Custom overlay content (replaces default menu rendering). */\n overlay?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────\nconst { componentUID } = useComponentId();\nconst dropdownId = useId();\nconst menuId = `${dropdownId}-menu`;\n\nconst internalOpen = ref(false);\nconst isOpen = computed(() => (modelValue !== undefined ? modelValue : internalOpen.value));\n\nconst shouldRender = computed(() => {\n if (destroyOnHidden) return isOpen.value;\n return 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 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;\nconst focusedIndex = ref(-1);\n\nconst focusableSelector = '[role=\"menuitem\"]:not([aria-disabled=\"true\"])';\n\nfunction getFocusableItems(): HTMLElement[] {\n if (!popoverRef.value) return [];\n return Array.from(popoverRef.value.querySelectorAll<HTMLElement>(focusableSelector));\n}\n\nfunction focusItem(index: number) {\n const items = getFocusableItems();\n if (items.length === 0) return;\n const clamped = Math.max(0, Math.min(index, items.length - 1));\n focusedIndex.value = clamped;\n items[clamped]?.focus();\n}\n\nfunction focusFirst() {\n nextTick(() => focusItem(0));\n}\n\nfunction focusLast() {\n nextTick(() => {\n const items = getFocusableItems();\n focusItem(items.length - 1);\n });\n}\n\nwatch(isOpen, (val) => {\n if (val) {\n previouslyFocusedElement = document.activeElement as HTMLElement | null;\n focusFirst();\n } else {\n focusedIndex.value = -1;\n if (previouslyFocusedElement) {\n nextTick(() => previouslyFocusedElement?.focus());\n }\n }\n});\n\n// ─────────────────────────────────────────────\n// Menu item click\n// ─────────────────────────────────────────────\nfunction onItemClick(item: BDropdownMenuItem) {\n if (item.disabled) return;\n emit('menuClick', { key: item.key, item });\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 onContextMenu(event: MouseEvent) {\n if (disabled) return;\n event.preventDefault();\n if (isOpen.value) {\n requestClose();\n } else {\n requestOpen();\n }\n}\n\nfunction onMouseEnter() {\n if (disabled) return;\n requestOpen(mouseEnterDelay);\n}\n\nfunction onMouseLeave() {\n requestClose(mouseLeaveDelay);\n}\n\nfunction onTriggerKeydown(event: KeyboardEvent) {\n if (disabled) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault();\n if (!isOpen.value) {\n requestOpen();\n nextTick(() => focusFirst());\n } else {\n focusFirst();\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (!isOpen.value) {\n requestOpen();\n nextTick(() => focusLast());\n } else {\n focusLast();\n }\n break;\n case 'Escape':\n if (isOpen.value) {\n event.preventDefault();\n requestClose();\n }\n break;\n }\n}\n\nfunction onMenuKeydown(event: KeyboardEvent) {\n const items = getFocusableItems();\n const currentIndex = items.indexOf(document.activeElement as HTMLElement);\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n focusItem(currentIndex < items.length - 1 ? currentIndex + 1 : 0);\n break;\n case 'ArrowUp':\n event.preventDefault();\n focusItem(currentIndex > 0 ? currentIndex - 1 : items.length - 1);\n break;\n case 'Home':\n event.preventDefault();\n focusItem(0);\n break;\n case 'End':\n event.preventDefault();\n focusItem(items.length - 1);\n break;\n case 'Enter':\n case ' ':\n event.preventDefault();\n if (document.activeElement) {\n (document.activeElement as HTMLElement).click();\n }\n break;\n case 'Escape':\n event.preventDefault();\n requestClose();\n break;\n case 'Tab':\n requestClose();\n break;\n }\n}\n\n// ─────────────────────────────────────────────\n// Popover hover (keep open when hovering content)\n// ─────────────────────────────────────────────\nfunction onPopoverMouseEnter() {\n if (trigger === BDropdownTrigger.Hover) {\n clearTimers();\n }\n}\n\nfunction onPopoverMouseLeave() {\n if (trigger === BDropdownTrigger.Hover) {\n requestClose(mouseLeaveDelay);\n }\n}\n\n// ─────────────────────────────────────────────\n// Click outside handler\n// ─────────────────────────────────────────────\nfunction onDocumentClick(event: MouseEvent) {\n if (!isOpen.value) return;\n const target = event.target as Node;\n if (toggleRef.value?.contains(target)) return;\n if (popoverRef.value?.contains(target)) return;\n requestClose();\n}\n\n// ─────────────────────────────────────────────\n// Event listener management\n// ─────────────────────────────────────────────\nfunction attachListeners() {\n const el = toggleRef.value;\n if (!el) return;\n\n el.addEventListener('keydown', onTriggerKeydown);\n\n switch (trigger) {\n case BDropdownTrigger.Click:\n el.addEventListener('click', onClick);\n break;\n case BDropdownTrigger.ContextMenu:\n el.addEventListener('contextmenu', onContextMenu);\n break;\n case BDropdownTrigger.Hover:\n default:\n el.addEventListener('mouseenter', onMouseEnter);\n el.addEventListener('mouseleave', onMouseLeave);\n break;\n }\n}\n\nfunction detachListeners() {\n const el = toggleRef.value;\n if (!el) return;\n\n el.removeEventListener('keydown', onTriggerKeydown);\n el.removeEventListener('click', onClick);\n el.removeEventListener('contextmenu', onContextMenu);\n el.removeEventListener('mouseenter', onMouseEnter);\n el.removeEventListener('mouseleave', onMouseLeave);\n}\n\nonMounted(() => {\n attachListeners();\n});\n\nonBeforeUnmount(() => {\n detachListeners();\n document.removeEventListener('click', onDocumentClick, true);\n clearTimers();\n});\n\nwatch(isOpen, (val) => {\n if (val) {\n document.addEventListener('click', onDocumentClick, true);\n } else {\n document.removeEventListener('click', onDocumentClick, true);\n }\n});\n\nwatch(\n () => trigger,\n () => {\n detachListeners();\n attachListeners();\n },\n);\n\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-dropdown-anchor-${componentUID.value}`);\n\nconst placementClass = computed(() => {\n const map: Record<string, string> = {\n [BDropdownPlacement.Bottom]: 'bottom-center',\n [BDropdownPlacement.BottomLeft]: 'bottom-left',\n [BDropdownPlacement.BottomRight]: 'bottom-right',\n [BDropdownPlacement.Top]: 'top-center',\n [BDropdownPlacement.TopLeft]: 'top-left',\n [BDropdownPlacement.TopRight]: 'top-right',\n };\n return map[placement] ?? 'bottom-left';\n});\n\nconst menuItems = computed(() => menu?.items ?? []);\n\nconst triggerProps = computed(() => ({\n id: dropdownId,\n 'aria-haspopup': 'menu' as const,\n 'aria-expanded': isOpen.value,\n 'aria-disabled': disabled || undefined,\n}));\n\n// ─────────────────────────────────────────────\n// Public API\n// ─────────────────────────────────────────────\ndefineExpose({ open: doOpen, close: doClose });\n</script>\n\n<template>\n <div\n ref=\"toggleRef\"\n :class=\"['b-dropdown__toggle', { 'b-dropdown__toggle--open': isOpen }]\"\n :style=\"{ anchorName: anchorName }\"\n >\n <slot :trigger-props=\"triggerProps\" />\n <span v-if=\"arrow\" class=\"b-dropdown__indicator\" aria-hidden=\"true\" />\n </div>\n\n <div\n ref=\"popoverRef\"\n popover=\"manual\"\n :class=\"['b-dropdown', placementClass]\"\n :style=\"{ positionAnchor: anchorName }\"\n :id=\"menuId\"\n role=\"menu\"\n :aria-labelledby=\"dropdownId\"\n tabindex=\"-1\"\n @toggle=\"onPopoverToggle\"\n @keydown=\"onMenuKeydown\"\n @mouseenter=\"onPopoverMouseEnter\"\n @mouseleave=\"onPopoverMouseLeave\"\n >\n <template v-if=\"shouldRender\">\n <div class=\"b-dropdown__content\">\n <slot name=\"overlay\">\n <template v-for=\"item in menuItems\" :key=\"item.key\">\n <div v-if=\"item.type === 'divider'\" class=\"b-dropdown__divider\" role=\"separator\" />\n <div\n v-else-if=\"item.type === 'group'\"\n class=\"b-dropdown__group\"\n role=\"group\"\n :aria-label=\"item.title\"\n >\n <div class=\"b-dropdown__group-title\">{{ item.title }}</div>\n <div\n v-for=\"child in item.children\"\n :key=\"child.key\"\n :class=\"[\n 'b-dropdown__item',\n { 'b-dropdown__item--disabled': child.disabled },\n { 'b-dropdown__item--danger': child.danger },\n { 'b-dropdown__item--selected': menu?.selectedKeys?.includes(child.key) },\n ]\"\n role=\"menuitem\"\n :tabindex=\"child.disabled ? -1 : 0\"\n :aria-disabled=\"child.disabled || undefined\"\n @click=\"onItemClick(child)\"\n >\n <span v-if=\"child.icon\" class=\"b-dropdown__item-icon\" aria-hidden=\"true\">{{\n child.icon\n }}</span>\n <span class=\"b-dropdown__item-label\">{{ child.label }}</span>\n </div>\n </div>\n <div\n v-else\n :class=\"[\n 'b-dropdown__item',\n { 'b-dropdown__item--disabled': item.disabled },\n { 'b-dropdown__item--danger': item.danger },\n { 'b-dropdown__item--selected': menu?.selectedKeys?.includes(item.key) },\n ]\"\n role=\"menuitem\"\n :tabindex=\"item.disabled ? -1 : 0\"\n :aria-disabled=\"item.disabled || undefined\"\n @click=\"onItemClick(item)\"\n >\n <span v-if=\"item.icon\" class=\"b-dropdown__item-icon\" aria-hidden=\"true\">{{\n item.icon\n }}</span>\n <span class=\"b-dropdown__item-label\">{{ item.label }}</span>\n </div>\n </template>\n </slot>\n </div>\n </template>\n </div>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (tokens)\n ──────────────────────────────────────────── */\n.b-dropdown {\n --b-dropdown-z-index: 1050;\n --b-dropdown-bg: #fff;\n --b-dropdown-color: rgba(0, 0, 0, 0.88);\n --b-dropdown-border-radius: 8px;\n --b-dropdown-padding-block: 4px;\n --b-dropdown-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-dropdown-font-size: 14px;\n --b-dropdown-line-height: 1.5714;\n --b-dropdown-min-width: 120px;\n --b-dropdown-max-width: 320px;\n --b-dropdown-gap: 4px;\n --b-dropdown-transition-duration: 200ms;\n\n --b-dropdown-item-padding-x: 12px;\n --b-dropdown-item-padding-y: 5px;\n --b-dropdown-item-border-radius: 4px;\n --b-dropdown-item-color: rgba(0, 0, 0, 0.88);\n --b-dropdown-item-hover-bg: rgba(0, 0, 0, 0.04);\n --b-dropdown-item-active-bg: rgba(0, 0, 0, 0.06);\n --b-dropdown-item-disabled-color: rgba(0, 0, 0, 0.25);\n --b-dropdown-item-danger-color: #ff4d4f;\n --b-dropdown-item-danger-hover-bg: #fff2f0;\n --b-dropdown-item-selected-bg: #e6f4ff;\n --b-dropdown-item-selected-color: #1677ff;\n --b-dropdown-item-icon-margin-right: 8px;\n --b-dropdown-item-icon-size: 14px;\n\n --b-dropdown-divider-color: rgba(5, 5, 5, 0.06);\n --b-dropdown-divider-margin: 4px 0;\n\n --b-dropdown-group-title-color: rgba(0, 0, 0, 0.45);\n --b-dropdown-group-title-font-size: 12px;\n --b-dropdown-group-title-padding: 5px 12px;\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-dropdown {\n --b-dropdown-bg: #1f1f1f;\n --b-dropdown-color: rgba(255, 255, 255, 0.85);\n --b-dropdown-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-dropdown-item-color: rgba(255, 255, 255, 0.85);\n --b-dropdown-item-hover-bg: rgba(255, 255, 255, 0.08);\n --b-dropdown-item-active-bg: rgba(255, 255, 255, 0.12);\n --b-dropdown-item-disabled-color: rgba(255, 255, 255, 0.25);\n --b-dropdown-item-danger-color: #ff7875;\n --b-dropdown-item-danger-hover-bg: rgba(255, 77, 79, 0.12);\n --b-dropdown-item-selected-bg: rgba(22, 119, 255, 0.15);\n --b-dropdown-item-selected-color: #4096ff;\n --b-dropdown-divider-color: rgba(253, 253, 253, 0.12);\n --b-dropdown-group-title-color: rgba(255, 255, 255, 0.45);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-dropdown {\n --b-dropdown-bg: #1f1f1f;\n --b-dropdown-color: rgba(255, 255, 255, 0.85);\n --b-dropdown-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-dropdown-item-color: rgba(255, 255, 255, 0.85);\n --b-dropdown-item-hover-bg: rgba(255, 255, 255, 0.08);\n --b-dropdown-item-active-bg: rgba(255, 255, 255, 0.12);\n --b-dropdown-item-disabled-color: rgba(255, 255, 255, 0.25);\n --b-dropdown-item-danger-color: #ff7875;\n --b-dropdown-item-danger-hover-bg: rgba(255, 77, 79, 0.12);\n --b-dropdown-item-selected-bg: rgba(22, 119, 255, 0.15);\n --b-dropdown-item-selected-color: #4096ff;\n --b-dropdown-divider-color: rgba(253, 253, 253, 0.12);\n --b-dropdown-group-title-color: rgba(255, 255, 255, 0.45);\n }\n}\n\n/* ─────────────────────────────────────────────\n Toggle wrapper\n ───────────────────────────────────────────── */\n.b-dropdown__toggle {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n\n &[aria-disabled='true'] {\n cursor: not-allowed;\n opacity: 0.5;\n }\n}\n\n/* ─────────────────────────────────────────────\n Chevron indicator (CSS-only)\n ───────────────────────────────────────────── */\n.b-dropdown__indicator {\n display: inline-block;\n width: 0.625em;\n height: 0.625em;\n border-right: 1.5px solid currentColor;\n border-bottom: 1.5px solid currentColor;\n transform: rotate(45deg) translateY(-2px);\n transition: transform 200ms;\n opacity: 0.65;\n flex-shrink: 0;\n}\n\n.b-dropdown__toggle--open .b-dropdown__indicator {\n transform: rotate(-135deg) translateY(-1px);\n}\n\n/* ─────────────────────────────────────────────\n Dropdown popover\n ───────────────────────────────────────────── */\n.b-dropdown {\n position: absolute;\n border: none;\n padding: 0;\n margin: 0;\n background: transparent;\n overflow: visible;\n z-index: var(--b-dropdown-z-index);\n min-width: var(--b-dropdown-min-width);\n max-width: var(--b-dropdown-max-width);\n box-sizing: border-box;\n pointer-events: auto;\n\n transition:\n display var(--b-dropdown-transition-duration),\n opacity var(--b-dropdown-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: Bottom ── */\n &.bottom-left {\n inset: auto;\n top: anchor(bottom);\n left: anchor(left);\n margin-top: var(--b-dropdown-gap);\n }\n &.bottom-center {\n inset: auto;\n top: anchor(bottom);\n justify-self: anchor-center;\n margin-top: var(--b-dropdown-gap);\n }\n &.bottom-right {\n inset: auto;\n top: anchor(bottom);\n right: anchor(right);\n margin-top: var(--b-dropdown-gap);\n }\n\n /* ── Placement: Top ── */\n &.top-left {\n inset: auto;\n bottom: anchor(top);\n left: anchor(left);\n margin-bottom: var(--b-dropdown-gap);\n }\n &.top-center {\n inset: auto;\n bottom: anchor(top);\n justify-self: anchor-center;\n margin-bottom: var(--b-dropdown-gap);\n }\n &.top-right {\n inset: auto;\n bottom: anchor(top);\n right: anchor(right);\n margin-bottom: var(--b-dropdown-gap);\n }\n}\n\n/* ─────────────────────────────────────────────\n Content wrapper\n ───────────────────────────────────────────── */\n.b-dropdown__content {\n background: var(--b-dropdown-bg);\n color: var(--b-dropdown-color);\n font-size: var(--b-dropdown-font-size);\n line-height: var(--b-dropdown-line-height);\n padding: var(--b-dropdown-padding-block) 0;\n border-radius: var(--b-dropdown-border-radius);\n box-shadow: var(--b-dropdown-shadow);\n overflow: hidden auto;\n max-height: 60vh;\n}\n\n/* ─────────────────────────────────────────────\n Menu items\n ───────────────────────────────────────────── */\n.b-dropdown__item {\n display: flex;\n align-items: center;\n padding: var(--b-dropdown-item-padding-y) var(--b-dropdown-item-padding-x);\n margin: 0 4px;\n border-radius: var(--b-dropdown-item-border-radius);\n color: var(--b-dropdown-item-color);\n cursor: pointer;\n user-select: none;\n outline: none;\n transition: background-color 150ms;\n\n &:hover,\n &:focus-visible {\n background: var(--b-dropdown-item-hover-bg);\n }\n\n &:active {\n background: var(--b-dropdown-item-active-bg);\n }\n\n &--disabled {\n color: var(--b-dropdown-item-disabled-color);\n cursor: not-allowed;\n pointer-events: none;\n }\n\n &--danger {\n color: var(--b-dropdown-item-danger-color);\n\n &:hover,\n &:focus-visible {\n background: var(--b-dropdown-item-danger-hover-bg);\n }\n }\n\n &--selected {\n background: var(--b-dropdown-item-selected-bg);\n color: var(--b-dropdown-item-selected-color);\n }\n}\n\n.b-dropdown__item-icon {\n margin-right: var(--b-dropdown-item-icon-margin-right);\n font-size: var(--b-dropdown-item-icon-size);\n display: inline-flex;\n align-items: center;\n}\n\n.b-dropdown__item-label {\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* ─────────────────────────────────────────────\n Divider\n ───────────────────────────────────────────── */\n.b-dropdown__divider {\n height: 1px;\n margin: var(--b-dropdown-divider-margin);\n background: var(--b-dropdown-divider-color);\n}\n\n/* ─────────────────────────────────────────────\n Group\n ───────────────────────────────────────────── */\n.b-dropdown__group-title {\n padding: var(--b-dropdown-group-title-padding);\n color: var(--b-dropdown-group-title-color);\n font-size: var(--b-dropdown-group-title-font-size);\n font-weight: 500;\n}\n\n/* ─────────────────────────────────────────────\n Position fallbacks\n ───────────────────────────────────────────── */\n@position-try --b-dropdown-bottom {\n inset: auto;\n top: anchor(bottom);\n left: anchor(left);\n margin-top: var(--b-dropdown-gap);\n}\n\n@position-try --b-dropdown-top {\n inset: auto;\n bottom: anchor(top);\n left: anchor(left);\n margin-bottom: var(--b-dropdown-gap);\n}\n\n/* ── Reduced motion ── */\n@media (prefers-reduced-motion: reduce) {\n .b-dropdown {\n transition-duration: 0ms;\n }\n\n .b-dropdown__item {\n transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CA+IM,IAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAzG1B,IAAM,IAAO,IAmBP,EAAE,qBAAiB,GAAgB,EACnC,IAAa,IAAO,EACpB,KAAS,GAAG,EAAW,QAEvB,IAAe,EAAI,GAAM,EACzB,IAAS,QAAgB,EAAA,eAAe,KAAA,IAAyB,EAAa,QAA1B,EAAA,WAAiC,EAErF,KAAe,QACf,EAAA,kBAAwB,EAAO,QAC5B,GACP,EAKE,IAAkD,MAClD,IAAkD;EAEtD,SAAS,IAAc;AAKrB,GAJA,AAEE,OADA,aAAa,EAAU,EACX,OAEd,AAEE,OADA,aAAa,EAAU,EACX;;EAIhB,SAAS,EAAY,IAAQ,GAAG;AAC1B,KAAA,aACJ,GAAa,EACT,GAAO,UACP,IAAQ,IACV,IAAY,iBAAiB,GAAQ,EAAE,EAAM,GAE7C,GAAQ;;EAIZ,SAAS,EAAa,IAAQ,GAAG;AAC/B,MAAa,EACR,EAAO,UACR,IAAQ,IACV,IAAY,iBAAiB,GAAS,EAAE,EAAM,GAE9C,GAAS;;EAIb,SAAS,IAAS;AAChB,KAAW,OAAO,aAAa;;EAGjC,SAAS,IAAU;AACjB,KAAW,OAAO,aAAa;;EAGjC,SAAS,EAAQ,GAAc;AAM7B,GALI,EAAA,eAAe,KAAA,IAGjB,EAAa,QAAQ,IAFrB,EAAK,qBAAqB,EAAI,EAIhC,EAAK,cAAc,EAAI;;EAMzB,IAAM,KAAmB,EAAE,kBAA4B;AACrD,KAAQ,MAAa,OAAO;KAMxB,IAAa,EAA2B,KAAK,EAC7C,IAAY,EAA2B,KAAK,EAK9C,IAA+C,MAC7C,IAAe,EAAI,GAAG;EAI5B,SAAS,IAAmC;AAE1C,UADK,EAAW,QACT,MAAM,KAAK,EAAW,MAAM,iBAA8B,EAAkB,CAAC,GADtD,EAAE;;EAIlC,SAAS,EAAU,GAAe;GAChC,IAAM,IAAQ,GAAmB;AACjC,OAAI,EAAM,WAAW,EAAG;GACxB,IAAM,IAAU,KAAK,IAAI,GAAG,KAAK,IAAI,GAAO,EAAM,SAAS,EAAE,CAAC;AAE9D,GADA,EAAa,QAAQ,GACrB,EAAM,IAAU,OAAO;;EAGzB,SAAS,IAAa;AACpB,WAAe,EAAU,EAAE,CAAC;;EAG9B,SAAS,IAAY;AACnB,WAAe;AAEb,MADc,GAAmB,CACjB,SAAS,EAAE;KAC3B;;AAGJ,IAAM,IAAS,MAAQ;AACrB,GAAI,KACF,IAA2B,SAAS,eACpC,GAAY,KAEZ,EAAa,QAAQ,IACjB,KACF,QAAe,GAA0B,OAAO,CAAC;IAGrD;EAKF,SAAS,EAAY,GAAyB;AACxC,KAAK,aACT,EAAK,aAAa;IAAE,KAAK,EAAK;IAAK;IAAM,CAAC,EAC1C,GAAc;;EAMhB,SAAS,IAAU;AACb,KAAA,aACA,EAAO,QACT,GAAc,GAEd,GAAa;;EAIjB,SAAS,EAAc,GAAmB;AACpC,KAAA,aACJ,EAAM,gBAAgB,EAClB,EAAO,QACT,GAAc,GAEd,GAAa;;EAIjB,SAAS,IAAe;AAClB,KAAA,YACJ,EAAY,EAAA,gBAAgB;;EAG9B,SAAS,IAAe;AACtB,KAAa,EAAA,gBAAgB;;EAG/B,SAAS,EAAiB,GAAsB;AAC1C,UAAA,SAEJ,SAAQ,EAAM,KAAd;IACE,KAAK;IACL,KAAK;IACL,KAAK;AAEH,KADA,EAAM,gBAAgB,EACjB,EAAO,QAIV,GAAY,IAHZ,GAAa,EACb,QAAe,GAAY,CAAC;AAI9B;IACF,KAAK;AAEH,KADA,EAAM,gBAAgB,EACjB,EAAO,QAIV,GAAW,IAHX,GAAa,EACb,QAAe,GAAW,CAAC;AAI7B;IACF,KAAK;AACH,KAAI,EAAO,UACT,EAAM,gBAAgB,EACtB,GAAc;AAEhB;;;EAIN,SAAS,GAAc,GAAsB;GAC3C,IAAM,IAAQ,GAAmB,EAC3B,IAAe,EAAM,QAAQ,SAAS,cAA6B;AAEzE,WAAQ,EAAM,KAAd;IACE,KAAK;AAEH,KADA,EAAM,gBAAgB,EACtB,EAAU,IAAe,EAAM,SAAS,IAAI,IAAe,IAAI,EAAE;AACjE;IACF,KAAK;AAEH,KADA,EAAM,gBAAgB,EACtB,EAAU,IAAe,IAAI,IAAe,IAAI,EAAM,SAAS,EAAE;AACjE;IACF,KAAK;AAEH,KADA,EAAM,gBAAgB,EACtB,EAAU,EAAE;AACZ;IACF,KAAK;AAEH,KADA,EAAM,gBAAgB,EACtB,EAAU,EAAM,SAAS,EAAE;AAC3B;IACF,KAAK;IACL,KAAK;AAEH,KADA,EAAM,gBAAgB,EAClB,SAAS,iBACV,SAAS,cAA8B,OAAO;AAEjD;IACF,KAAK;AAEH,KADA,EAAM,gBAAgB,EACtB,GAAc;AACd;IACF,KAAK;AACH,QAAc;AACd;;;EAON,SAAS,KAAsB;AAC7B,GAAI,EAAA,YAAY,EAAiB,SAC/B,GAAa;;EAIjB,SAAS,KAAsB;AAC7B,GAAI,EAAA,YAAY,EAAiB,SAC/B,EAAa,EAAA,gBAAgB;;EAOjC,SAAS,EAAgB,GAAmB;AAC1C,OAAI,CAAC,EAAO,MAAO;GACnB,IAAM,IAAS,EAAM;AACjB,KAAU,OAAO,SAAS,EAAO,IACjC,EAAW,OAAO,SAAS,EAAO,IACtC,GAAc;;EAMhB,SAAS,IAAkB;GACzB,IAAM,IAAK,EAAU;AAChB,SAIL,SAFA,EAAG,iBAAiB,WAAW,EAAiB,EAExC,EAAA,SAAR;IACE,KAAK,EAAiB;AACpB,OAAG,iBAAiB,SAAS,EAAQ;AACrC;IACF,KAAK,EAAiB;AACpB,OAAG,iBAAiB,eAAe,EAAc;AACjD;IACF,KAAK,EAAiB;IACtB;AAEE,KADA,EAAG,iBAAiB,cAAc,EAAa,EAC/C,EAAG,iBAAiB,cAAc,EAAa;AAC/C;;;EAIN,SAAS,IAAkB;GACzB,IAAM,IAAK,EAAU;AAChB,SAEL,EAAG,oBAAoB,WAAW,EAAiB,EACnD,EAAG,oBAAoB,SAAS,EAAQ,EACxC,EAAG,oBAAoB,eAAe,EAAc,EACpD,EAAG,oBAAoB,cAAc,EAAa,EAClD,EAAG,oBAAoB,cAAc,EAAa;;AA6BpD,EA1BA,SAAgB;AACd,MAAiB;IACjB,EAEF,SAAsB;AAGpB,GAFA,GAAiB,EACjB,SAAS,oBAAoB,SAAS,GAAiB,GAAK,EAC5D,GAAa;IACb,EAEF,EAAM,IAAS,MAAQ;AACrB,GAAI,IACF,SAAS,iBAAiB,SAAS,GAAiB,GAAK,GAEzD,SAAS,oBAAoB,SAAS,GAAiB,GAAK;IAE9D,EAEF,QACQ,EAAA,eACA;AAEJ,GADA,GAAiB,EACjB,GAAiB;IAEpB,EAED,QACQ,EAAA,aACL,MAAQ;AACH,SAAQ,KAAA,MACR,IACF,EAAW,OAAO,aAAa,GAE/B,EAAW,OAAO,aAAa;IAGpC;EAKD,IAAM,IAAa,QAAe,uBAAuB,GAAa,QAAQ,EAExE,KAAiB,SACe;IACjC,EAAmB,SAAS;IAC5B,EAAmB,aAAa;IAChC,EAAmB,cAAc;IACjC,EAAmB,MAAM;IACzB,EAAmB,UAAU;IAC7B,EAAmB,WAAW;GAChC,EACU,EAAA,cAAc,cACzB,EAEI,KAAY,QAAe,EAAA,MAAM,SAAS,EAAE,CAAC,EAE7C,KAAe,SAAgB;GACnC,IAAI;GACJ,iBAAiB;GACjB,iBAAiB,EAAO;GACxB,iBAAiB,EAAA,YAAY,KAAA;GAC9B,EAAE;SAKH,EAAa;GAAE,MAAM;GAAQ,OAAO;GAAS,CAAC,8BAI5C,EAOM,OAAA;YANA;GAAJ,KAAI;GACH,OAAK,EAAA,CAAA,sBAAA,EAAA,4BAAuD,EAAA,OAAM,CAAA,CAAA;GAClE,OAAK,EAAA,EAAA,YAAgB,EAAA,OAAU,CAAA;MAEhC,EAAsC,EAAA,QAAA,WAAA,EAA/B,cAAe,GAAA,OAAY,CAAA,EACtB,EAAA,SAAA,GAAA,EAAZ,EAAsE,QAAtE,GAAsE,IAAA,EAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAGxE,EAoEM,OAAA;YAnEA;GAAJ,KAAI;GACJ,SAAQ;GACP,OAAK,EAAA,CAAA,cAAiB,GAAA,MAAc,CAAA;GACpC,OAAK,EAAA,EAAA,gBAAoB,EAAA,OAAU,CAAA;GACnC,IAAI;GACL,MAAK;GACJ,mBAAiB,GAAA,EAAU;GAC5B,UAAS;GACR,UAAQ;GACR,WAAS;GACT,cAAY;GACZ,cAAY;MAEG,GAAA,SAAA,GAAA,EACd,EAmDM,OAnDN,GAmDM,CAlDJ,EAiDO,EAAA,QAAA,WAAA,EAAA,QAAA,EAAA,EAAA,GAAA,EAhDL,EA+CW,GAAA,MAAA,EA/Cc,GAAA,QAAR,wBAAyB,EAAK,KAAA,EAAA,CAClC,EAAK,SAAI,aAAA,GAAA,EAApB,EAAmF,OAAnF,EAAmF,IAEtE,EAAK,SAAI,WAAA,GAAA,EADtB,EA0BM,OAAA;;GAxBJ,OAAM;GACN,MAAK;GACJ,cAAY,EAAK;MAElB,EAA2D,OAA3D,IAA2D,EAAnB,EAAK,MAAK,EAAA,EAAA,GAAA,EAAA,GAAA,EAClD,EAkBM,GAAA,MAAA,EAjBY,EAAK,WAAd,YADT,EAkBM,OAAA;GAhBH,KAAK,EAAM;GACX,OAAK,EAAA;;oCAA4F,EAAM,UAAQ;kCAAoD,EAAM,QAAM;oCAAsD,EAAA,MAAM,cAAc,SAAS,EAAM,IAAG,EAAA;;GAM5Q,MAAK;GACJ,UAAU,EAAM,WAAQ,KAAA;GACxB,iBAAe,EAAM,YAAY,KAAA;GACjC,UAAK,MAAE,EAAY,EAAK;MAEb,EAAM,QAAA,GAAA,EAAlB,EAES,QAFT,IAES,EADP,EAAM,KAAI,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA,EAEZ,EAA6D,QAA7D,IAA6D,EAArB,EAAM,MAAK,EAAA,EAAA,CAAA,EAAA,IAAA,GAAA,4BAGvD,EAiBM,OAAA;;GAfH,OAAK,EAAA;;oCAAwF,EAAK,UAAQ;kCAAkD,EAAK,QAAM;oCAAoD,EAAA,MAAM,cAAc,SAAS,EAAK,IAAG,EAAA;;GAMjQ,MAAK;GACJ,UAAU,EAAK,WAAQ,KAAA;GACvB,iBAAe,EAAK,YAAY,KAAA;GAChC,UAAK,MAAE,EAAY,EAAI;MAEZ,EAAK,QAAA,GAAA,EAAjB,EAES,QAFT,IAES,EADP,EAAK,KAAI,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA,EAEX,EAA4D,QAA5D,GAA4D,EAApB,EAAK,MAAK,EAAA,EAAA,CAAA,EAAA,IAAA,GAAA,EAAA,EAAA,GAAA"}
@@ -1,102 +0,0 @@
1
- import e from "./design-system27.js";
2
- import { BFloatButtonShape as t, BFloatButtonType as n } from "./design-system91.js";
3
- import { Fragment as r, computed as i, createBlock as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, createTextVNode as l, defineComponent as u, normalizeClass as d, normalizeStyle as f, openBlock as p, renderSlot as m, resolveDynamicComponent as h, toDisplayString as g, withCtx as _ } from "vue";
4
- //#region src/components/BFloatButton/BFloatButton.vue?vue&type=script&setup=true&lang.ts
5
- var v = { class: "b-float-button__body" }, y = {
6
- class: "b-float-button__icon",
7
- "aria-hidden": "true"
8
- }, b = {
9
- key: 1,
10
- width: "1em",
11
- height: "1em",
12
- viewBox: "0 0 24 24",
13
- fill: "currentColor",
14
- "aria-hidden": "true"
15
- }, x = {
16
- key: 0,
17
- class: "b-float-button__description"
18
- }, S = {
19
- key: 1,
20
- class: "b-float-button__tooltip",
21
- role: "tooltip"
22
- }, C = /* @__PURE__ */ u({
23
- __name: "BFloatButton",
24
- props: {
25
- icon: {},
26
- description: {},
27
- tooltip: {},
28
- type: { default: () => n.Default },
29
- shape: { default: () => t.Circle },
30
- href: {},
31
- target: { default: "_blank" },
32
- htmlType: { default: "button" },
33
- badge: {},
34
- disabled: {
35
- type: Boolean,
36
- default: !1
37
- },
38
- ariaLabel: {}
39
- },
40
- emits: ["click"],
41
- setup(t, { emit: n }) {
42
- let u = n, C = (e) => t.type === e, w = (e) => t.shape === e, T = i(() => {
43
- if (t.badge && !t.badge.dot) return t.badge.count;
44
- }), E = i(() => t.badge?.dot ?? !1), D = i(() => t.badge?.overflowCount ?? 99), O = i(() => {
45
- let e = T.value;
46
- if (e !== void 0 && !(e === 0 && !t.badge?.showZero)) return e > D.value ? `${D.value}+` : String(e);
47
- }), k = i(() => E.value || O.value !== void 0);
48
- function A(e) {
49
- t.disabled || u("click", e);
50
- }
51
- let j = i(() => t.href ? "a" : "button");
52
- return (n, i) => (p(), a(h(j.value), {
53
- href: t.href,
54
- target: t.href ? t.target : void 0,
55
- type: t.href ? void 0 : t.htmlType,
56
- disabled: !t.href && t.disabled ? !0 : void 0,
57
- "aria-disabled": t.href && t.disabled ? "true" : void 0,
58
- "aria-label": t.ariaLabel ?? t.tooltip,
59
- title: t.tooltip,
60
- class: d(["b-float-button", {
61
- "b-float-button--circle": w("circle"),
62
- "b-float-button--square": w("square"),
63
- "b-float-button--default": C("default"),
64
- "b-float-button--primary": C("primary"),
65
- "b-float-button--disabled": t.disabled
66
- }]),
67
- onClick: A
68
- }, {
69
- default: _(() => [
70
- k.value ? (p(), s("span", {
71
- key: 0,
72
- class: d(["b-float-button__badge", {
73
- "b-float-button__badge--dot": E.value,
74
- "b-float-button__badge--count": !E.value
75
- }]),
76
- style: f(t.badge?.color ? { backgroundColor: t.badge.color } : void 0),
77
- "aria-hidden": "true"
78
- }, [E.value ? o("", !0) : (p(), s(r, { key: 0 }, [l(g(O.value), 1)], 64))], 6)) : o("", !0),
79
- c("span", v, [c("span", y, [m(n.$slots, "icon", {}, () => [t.icon ? (p(), a(e, {
80
- key: 0,
81
- icon: t.icon,
82
- size: "md"
83
- }, null, 8, ["icon"])) : (p(), s("svg", b, [...i[0] ||= [c("path", { d: "M19 13H13v6h-2v-6H5v-2h6V5h2v6h6v2z" }, null, -1)]]))])]), (n.$slots.description || t.description) && w("square") ? (p(), s("span", x, [m(n.$slots, "description", {}, () => [l(g(t.description), 1)])])) : o("", !0)]),
84
- n.$slots.tooltip || t.tooltip && !t.ariaLabel ? (p(), s("span", S, [m(n.$slots, "tooltip", {}, () => [l(g(t.tooltip), 1)])])) : o("", !0)
85
- ]),
86
- _: 3
87
- }, 8, [
88
- "href",
89
- "target",
90
- "type",
91
- "disabled",
92
- "aria-disabled",
93
- "aria-label",
94
- "title",
95
- "class"
96
- ]));
97
- }
98
- });
99
- //#endregion
100
- export { C as default };
101
-
102
- //# sourceMappingURL=design-system92.js.map