@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,166 +1,227 @@
1
- import { Fragment as e, computed as t, createElementBlock as n, defineComponent as r, normalizeClass as i, normalizeStyle as a, onBeforeUnmount as o, onMounted as s, openBlock as c, ref as l, renderList as u, renderSlot as d, watch as f } from "vue";
2
- //#region src/components/BMasonry/BMasonry.vue?vue&type=script&setup=true&lang.ts
3
- var p = ["data-masonry-key"], m = /* @__PURE__ */ r({
4
- __name: "BMasonry",
5
- props: {
6
- columns: { default: 3 },
7
- gutter: { default: 0 },
8
- items: { default: () => [] },
9
- fresh: {
1
+ import { BCommonSize as e } from "./design-system3.js";
2
+ import { useComponentId as t } from "./design-system10.js";
3
+ import { BInputStatus as n, BInputVariant as r } from "./design-system116.js";
4
+ import { computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, defineComponent as c, mergeModels as l, normalizeClass as u, openBlock as d, ref as f, renderSlot as p, unref as m, useModel as h, useSlots as g, watch as _, withModifiers as v } from "vue";
5
+ //#region src/components/BInputNumber/BInputNumber.vue?vue&type=script&setup=true&lang.ts
6
+ var y = { class: "b-input-number__wrapper" }, b = {
7
+ key: 0,
8
+ class: "b-input-number__prefix",
9
+ "aria-hidden": "true"
10
+ }, x = [
11
+ "id",
12
+ "value",
13
+ "aria-valuenow",
14
+ "aria-valuemin",
15
+ "aria-valuemax",
16
+ "aria-invalid",
17
+ "placeholder",
18
+ "disabled",
19
+ "readonly"
20
+ ], S = {
21
+ key: 1,
22
+ class: "b-input-number__suffix",
23
+ "aria-hidden": "true"
24
+ }, C = {
25
+ key: 2,
26
+ class: "b-input-number__handler-wrap",
27
+ "aria-hidden": "true"
28
+ }, w = ["aria-disabled"], T = ["aria-disabled"], E = /* @__PURE__ */ c({
29
+ inheritAttrs: !1,
30
+ __name: "BInputNumber",
31
+ props: /* @__PURE__ */ l({
32
+ size: { default: () => e.Medium },
33
+ variant: { default: () => r.Outlined },
34
+ status: {},
35
+ min: { default: () => -(2 ** 53 - 1) },
36
+ max: { default: () => 2 ** 53 - 1 },
37
+ step: { default: 1 },
38
+ disabled: {
10
39
  type: Boolean,
11
40
  default: !1
12
41
  },
13
- classNames: { type: [Object, Function] },
14
- styles: { type: [Object, Function] }
15
- },
16
- emits: ["layoutChange"],
17
- setup(r, { emit: m }) {
18
- let h = m, g = {
19
- xs: 0,
20
- sm: 576,
21
- md: 768,
22
- lg: 992,
23
- xl: 1200,
24
- xxl: 1600
25
- };
26
- function _(e, t) {
27
- if (typeof e == "number") return Math.max(1, e);
28
- let n = Object.keys(g).sort((e, t) => g[t] - g[e]);
29
- for (let r of n) if (t >= g[r] && e[r] !== void 0) return Math.max(1, e[r]);
30
- let r = Object.keys(e).sort((e, t) => g[e] - g[t])[0];
31
- return r ? Math.max(1, e[r]) : 1;
42
+ readOnly: {
43
+ type: Boolean,
44
+ default: !1
45
+ },
46
+ controls: {
47
+ type: Boolean,
48
+ default: !0
49
+ },
50
+ keyboard: {
51
+ type: Boolean,
52
+ default: !0
53
+ },
54
+ changeOnBlur: {
55
+ type: Boolean,
56
+ default: !0
57
+ },
58
+ changeOnWheel: {
59
+ type: Boolean,
60
+ default: !1
61
+ },
62
+ placeholder: {},
63
+ id: {},
64
+ precision: {},
65
+ formatter: { type: Function },
66
+ parser: { type: Function },
67
+ decimalSeparator: {},
68
+ stringMode: {
69
+ type: Boolean,
70
+ default: !1
32
71
  }
33
- let v = l(null), y = l(0), b = null;
34
- function x() {
35
- v.value && (y.value = v.value.offsetWidth);
72
+ }, {
73
+ modelValue: { default: null },
74
+ modelModifiers: {}
75
+ }),
76
+ emits: /* @__PURE__ */ l([
77
+ "change",
78
+ "pressEnter",
79
+ "step",
80
+ "focus",
81
+ "blur"
82
+ ], ["update:modelValue"]),
83
+ setup(e, { expose: r, emit: c }) {
84
+ let l = g(), E = c, D = h(e, "modelValue"), { componentUID: O } = t(), k = i(() => e.id ?? `b-input-number-${O.value}`), A = f(null), j = f(!1), M = f(""), N = i(() => !!l.prefix), P = i(() => !!l.suffix), F = i(() => e.disabled || e.readOnly ? !0 : D.value === null ? !1 : D.value >= e.max), I = i(() => e.disabled || e.readOnly ? !0 : D.value === null ? !1 : D.value <= e.min);
85
+ function L(t) {
86
+ if (e.precision !== void 0) return parseFloat(t.toFixed(e.precision));
87
+ let n = String(e.step), r = n.includes(".") ? n.split(".")[1].length : 0;
88
+ return r > 0 ? parseFloat(t.toFixed(r)) : t;
36
89
  }
37
- let S = l({}), C = null, w = l(/* @__PURE__ */ new Map());
38
- function T(e, t) {
39
- if (t) w.value.set(e, t), r.fresh && C && C.observe(t);
40
- else {
41
- let t = w.value.get(e);
42
- t && C && C.unobserve(t), w.value.delete(e);
43
- let n = { ...S.value };
44
- delete n[e], S.value = n;
45
- }
90
+ function R(t) {
91
+ return Math.min(e.max, Math.max(e.min, t));
46
92
  }
47
- function E() {
48
- !r.fresh || typeof ResizeObserver > "u" || (C = new ResizeObserver((e) => {
49
- for (let t of e) {
50
- let e = t.target.dataset.masonryKey;
51
- if (e !== void 0) {
52
- let n = t.contentRect.height;
53
- S.value[e] !== n && (S.value = {
54
- ...S.value,
55
- [e]: n
56
- });
57
- }
58
- }
59
- }), w.value.forEach((e) => C.observe(e)));
93
+ function z(t) {
94
+ if (t === null) return "";
95
+ let n;
96
+ return n = e.precision === void 0 ? String(t) : t.toFixed(e.precision), e.decimalSeparator && (n = n.replace(".", e.decimalSeparator)), e.formatter ? e.formatter(e.stringMode ? n : t) : n;
60
97
  }
61
- let D = t(() => _(r.columns, y.value)), O = t(() => {
62
- let e = r.gutter;
63
- if (Array.isArray(e)) return [_(e[0], y.value), _(e[1], y.value)];
64
- let t = _(e, y.value);
65
- return [t, t];
66
- }), k = t(() => {
67
- let e = D.value, t = Array.from({ length: e }, () => []), n = Array(e).fill(0), [, i] = O.value;
68
- for (let a = 0; a < r.items.length; a++) {
69
- let o = r.items[a], s;
70
- s = o.column === void 0 ? n.indexOf(Math.min(...n)) : Math.max(0, Math.min(e - 1, o.column - 1)), t[s].push({
71
- item: o,
72
- originalIndex: a
73
- });
74
- let c = S.value[o.key] ?? o.height ?? 0;
75
- n[s] += c + (t[s].length > 1 ? i : 0);
76
- }
77
- return t;
78
- });
79
- f(t(() => {
80
- let e = D.value, t = {};
81
- for (let e = 0; e < r.items.length; e++) {
82
- let n = r.items[e], i = k.value.findIndex((e) => e.some((e) => e.item.key === n.key));
83
- i >= 0 && (t[n.key] = i);
84
- }
85
- return {
86
- columns: e,
87
- columnMap: t
88
- };
89
- }), (e) => {
90
- h("layoutChange", e);
91
- }, { immediate: !0 });
92
- function A(e, t) {
93
- let n = ["b-masonry__item"];
94
- if (!r.classNames) return n;
95
- if (typeof r.classNames == "function") {
96
- let i = r.classNames(e, t);
97
- i && n.push(...Array.isArray(i) ? i : [i]);
98
- } else if (typeof r.classNames.item == "function") {
99
- let i = r.classNames.item(e, t);
100
- i && n.push(...Array.isArray(i) ? i : [i]);
101
- } else typeof r.classNames.item == "string" && n.push(r.classNames.item);
102
- return n;
98
+ function B(t) {
99
+ if (!t.trim()) return null;
100
+ let n = t;
101
+ e.parser ? n = e.parser(t) : e.decimalSeparator && (n = n.replace(e.decimalSeparator, "."));
102
+ let r = Number(n);
103
+ return isNaN(r) ? D.value : r;
104
+ }
105
+ function V() {
106
+ M.value = z(D.value);
103
107
  }
104
- function j(e, t) {
105
- return r.styles ? typeof r.styles == "function" ? r.styles(e, t) ?? {} : typeof r.styles.item == "function" ? r.styles.item(e, t) ?? {} : r.styles.item && typeof r.styles.item == "object" ? r.styles.item : {} : {};
108
+ function H(e, t = !0) {
109
+ e !== null && (e = L(R(e)));
110
+ let n = e !== D.value;
111
+ D.value = e, V(), n && t && E("change", e);
106
112
  }
107
- function M(e) {
108
- let t = ["b-masonry__column"];
109
- return !r.classNames || typeof r.classNames == "function" || r.classNames.column && t.push(r.classNames.column), t;
113
+ function U(t) {
114
+ if (e.disabled || e.readOnly) return;
115
+ let n = R(L((D.value ?? 0) + (t === "up" ? e.step : -e.step)));
116
+ H(n), E("step", n, {
117
+ offset: e.step,
118
+ type: t
119
+ });
110
120
  }
111
- function N(e) {
112
- return !r.styles || typeof r.styles == "function" ? {} : r.styles.column ?? {};
121
+ let W = (e) => {
122
+ M.value = e.target.value;
123
+ }, G = (t) => {
124
+ t.key === "Enter" && (Y(), E("pressEnter", t)), e.keyboard && (t.key === "ArrowUp" ? (t.preventDefault(), U("up")) : t.key === "ArrowDown" && (t.preventDefault(), U("down")));
125
+ }, K = (e) => {
126
+ j.value = !0, E("focus", e);
127
+ }, q = (t) => {
128
+ j.value = !1, e.changeOnBlur && Y(), E("blur", t);
129
+ }, J = (t) => {
130
+ !e.changeOnWheel || e.disabled || e.readOnly || !j.value || (t.preventDefault(), t.deltaY < 0 ? U("up") : t.deltaY > 0 && U("down"));
131
+ };
132
+ function Y() {
133
+ let e = B(M.value);
134
+ H(e === null ? null : e);
113
135
  }
114
- let P = t(() => {
115
- let e = ["b-masonry"];
116
- return !r.classNames || typeof r.classNames == "function" || r.classNames.root && e.push(r.classNames.root), e;
117
- }), F = t(() => {
118
- let e = {
119
- "--b-masonry-columns": String(D.value),
120
- "--b-masonry-col-gap": `${O.value[0]}px`,
121
- "--b-masonry-row-gap": `${O.value[1]}px`
122
- };
123
- if (r.styles && typeof r.styles == "object" && "root" in r.styles) {
124
- let t = r.styles;
125
- t.root && Object.assign(e, t.root);
136
+ return _(() => D.value, () => {
137
+ j.value || V();
138
+ }, { immediate: !0 }), r({
139
+ focus: (e) => {
140
+ if (A.value?.focus({ preventScroll: e?.preventScroll }), e?.cursor && A.value) {
141
+ let t = A.value.value.length;
142
+ switch (e.cursor) {
143
+ case "start":
144
+ A.value.setSelectionRange(0, 0);
145
+ break;
146
+ case "end":
147
+ A.value.setSelectionRange(t, t);
148
+ break;
149
+ case "all":
150
+ A.value.setSelectionRange(0, t);
151
+ break;
152
+ }
153
+ }
154
+ },
155
+ blur: () => {
156
+ A.value?.blur();
157
+ }
158
+ }), (t, r) => (d(), o("span", { class: u(["b-input-number", [
159
+ `b-input-number--${e.size}`,
160
+ `b-input-number--${e.variant}`,
161
+ {
162
+ "b-input-number--focused": j.value,
163
+ "b-input-number--disabled": e.disabled,
164
+ "b-input-number--readonly": e.readOnly,
165
+ "b-input-number--error": e.status === m(n).Error,
166
+ "b-input-number--warning": e.status === m(n).Warning,
167
+ "b-input-number--has-controls": e.controls
126
168
  }
127
- return e;
128
- });
129
- return s(() => {
130
- x(), typeof ResizeObserver < "u" ? (b = new ResizeObserver(() => x()), v.value && b.observe(v.value)) : window.addEventListener("resize", x), r.fresh && E();
131
- }), f(() => r.fresh, (e) => {
132
- e ? E() : (C?.disconnect(), C = null, S.value = {});
133
- }), o(() => {
134
- b?.disconnect(), C?.disconnect(), window.removeEventListener("resize", x);
135
- }), (t, r) => (c(), n("div", {
136
- ref_key: "rootEl",
137
- ref: v,
138
- class: i(P.value),
139
- style: a(F.value),
140
- role: "list",
141
- "aria-label": "Masonry layout"
142
- }, [(c(!0), n(e, null, u(k.value, (r, o) => (c(), n("div", {
143
- key: o,
144
- class: i(M(o)),
145
- style: a(N(o)),
146
- role: "presentation"
147
- }, [(c(!0), n(e, null, u(r, ({ item: e, originalIndex: r }) => (c(), n("div", {
148
- key: e.key,
149
- ref_for: !0,
150
- ref: (t) => T(e.key, t),
151
- "data-masonry-key": e.key,
152
- class: i(A(e, o)),
153
- style: a(j(e, o)),
154
- role: "listitem"
155
- }, [t.$slots.item ? d(t.$slots, "item", {
156
- key: 0,
157
- item: e,
158
- index: r,
159
- column: o
160
- }) : d(t.$slots, "default", { key: 1 })], 14, p))), 128))], 6))), 128))], 6));
169
+ ]]) }, [s("span", y, [
170
+ N.value ? (d(), o("span", b, [p(t.$slots, "prefix", {}, void 0, !0)])) : a("", !0),
171
+ s("input", {
172
+ id: k.value,
173
+ ref_key: "inputRef",
174
+ ref: A,
175
+ value: M.value,
176
+ type: "text",
177
+ inputmode: "decimal",
178
+ role: "spinbutton",
179
+ "aria-valuenow": D.value ?? void 0,
180
+ "aria-valuemin": e.min === -(2 ** 53 - 1) ? void 0 : e.min,
181
+ "aria-valuemax": e.max === 2 ** 53 - 1 ? void 0 : e.max,
182
+ "aria-invalid": e.status === m(n).Error ? !0 : void 0,
183
+ placeholder: e.placeholder,
184
+ disabled: e.disabled,
185
+ readonly: e.readOnly,
186
+ class: "b-input-number__input",
187
+ onInput: W,
188
+ onKeydown: G,
189
+ onFocus: K,
190
+ onBlur: q,
191
+ onWheel: J
192
+ }, null, 40, x),
193
+ P.value ? (d(), o("span", S, [p(t.$slots, "suffix", {}, void 0, !0)])) : a("", !0),
194
+ e.controls ? (d(), o("span", C, [s("span", {
195
+ class: u(["b-input-number__handler b-input-number__handler--up", { "b-input-number__handler--disabled": F.value }]),
196
+ role: "button",
197
+ tabindex: "-1",
198
+ "aria-label": "Increase value",
199
+ "aria-disabled": F.value,
200
+ onMousedown: r[0] ||= v((e) => !F.value && U("up"), ["prevent"])
201
+ }, [...r[2] ||= [s("svg", {
202
+ viewBox: "0 0 1024 1024",
203
+ width: "1em",
204
+ height: "1em",
205
+ fill: "currentColor",
206
+ "aria-hidden": "true"
207
+ }, [s("path", { d: "M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h286c2.1 0 4.2-.8 5.7-2.3l70.3-70.3 70.3 70.3c1.5 1.5 3.5 2.3 5.7 2.3h286c6.5 0 10.3-7.4 6.5-12.7z" })], -1)]], 42, w), s("span", {
208
+ class: u(["b-input-number__handler b-input-number__handler--down", { "b-input-number__handler--disabled": I.value }]),
209
+ role: "button",
210
+ tabindex: "-1",
211
+ "aria-label": "Decrease value",
212
+ "aria-disabled": I.value,
213
+ onMousedown: r[1] ||= v((e) => !I.value && U("down"), ["prevent"])
214
+ }, [...r[3] ||= [s("svg", {
215
+ viewBox: "0 0 1024 1024",
216
+ width: "1em",
217
+ height: "1em",
218
+ fill: "currentColor",
219
+ "aria-hidden": "true"
220
+ }, [s("path", { d: "M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z" })], -1)]], 42, T)])) : a("", !0)
221
+ ])], 2));
161
222
  }
162
223
  });
163
224
  //#endregion
164
- export { m as default };
225
+ export { E as default };
165
226
 
166
227
  //# sourceMappingURL=design-system120.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"design-system120.js","names":["$slots"],"sources":["../src/components/BMasonry/BMasonry.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport type {\n BMasonryBreakpoint,\n BMasonryClassNames,\n BMasonryItem,\n BMasonryLayoutChangePayload,\n BMasonryResponsive,\n BMasonryStyles,\n} from './types';\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nconst {\n columns = 3,\n // eslint-disable-next-line vue/require-valid-default-prop\n gutter = 0,\n items = [],\n fresh = false,\n classNames,\n styles,\n} = defineProps<{\n /**\n * Number of columns. Accepts a fixed number or a breakpoint map.\n * @example 3\n * @example { xs: 1, sm: 2, md: 3, lg: 4 }\n * @default 3\n */\n columns?: BMasonryResponsive;\n\n /**\n * Gap between items in pixels. Accepts a fixed value, a [colGap, rowGap] tuple,\n * or a breakpoint map for responsive gaps.\n * @example 16\n * @example [16, 8]\n * @example { xs: 8, md: 16 }\n * @default 0\n */\n gutter?: BMasonryResponsive | [BMasonryResponsive, BMasonryResponsive];\n\n /**\n * Array of masonry items to render.\n * @default []\n */\n items?: BMasonryItem[];\n\n /**\n * When true, observe every item's size so the layout re-flows when children resize.\n * Requires ResizeObserver support; degrades gracefully when unavailable.\n * @default false\n */\n fresh?: boolean;\n\n /**\n * Customize CSS classes on semantic DOM elements (`root`, `column`, `item`).\n * Can be a plain object or a per-item function `(item, columnIndex) => classes`.\n */\n classNames?: BMasonryClassNames;\n\n /**\n * Customize inline styles on semantic DOM elements (`root`, `column`, `item`).\n * Can be a plain object or a per-item function `(item, columnIndex) => styles`.\n */\n styles?: BMasonryStyles;\n}>();\n\n// ─── Emits ────────────────────────────────────────────────────────────────────\n\nconst emit = defineEmits<{\n /**\n * Fires after each layout recalculation with the resolved column count and\n * the column assignment map (item key → 0-based column index).\n */\n layoutChange: [payload: BMasonryLayoutChangePayload];\n}>();\n\n// ─── Slots ────────────────────────────────────────────────────────────────────\n\ndefineSlots<{\n /**\n * Custom rendering for each item. Receives `{ item: BMasonryItem, index: number, column: number }`.\n */\n item?: (props: { item: BMasonryItem; index: number; column: number }) => unknown;\n\n /**\n * Default slot used when no `items` prop is provided — raw child nodes are\n * distributed across columns automatically.\n */\n default?: (props: Record<string, never>) => unknown;\n}>();\n\n// ─── Responsive helpers ───────────────────────────────────────────────────────\n\nconst BREAKPOINTS: Record<BMasonryBreakpoint, number> = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600,\n};\n\nfunction resolveResponsive(value: BMasonryResponsive, width: number): number {\n if (typeof value === 'number') return Math.max(1, value);\n\n // Breakpoint map — pick the largest breakpoint that still fits\n const keys = (Object.keys(BREAKPOINTS) as BMasonryBreakpoint[]).sort(\n (a, b) => BREAKPOINTS[b] - BREAKPOINTS[a],\n );\n\n for (const bp of keys) {\n if (width >= BREAKPOINTS[bp] && value[bp] !== undefined) {\n return Math.max(1, value[bp]!);\n }\n }\n // Fallback to smallest defined value\n const smallest = (Object.keys(value) as BMasonryBreakpoint[]).sort(\n (a, b) => BREAKPOINTS[a] - BREAKPOINTS[b],\n )[0];\n return smallest ? Math.max(1, value[smallest]!) : 1;\n}\n\n// ─── Container width tracking ─────────────────────────────────────────────────\n\nconst rootEl = ref<HTMLElement | null>(null);\nconst containerWidth = ref(0);\n\nlet containerObserver: ResizeObserver | null = null;\n\nfunction updateWidth() {\n if (rootEl.value) {\n containerWidth.value = rootEl.value.offsetWidth;\n }\n}\n\n// ─── Item height tracking (fresh mode) ────────────────────────────────────────\n\nconst itemHeights = ref<Record<string | number, number>>({});\nlet itemObserver: ResizeObserver | null = null;\nconst itemEls = ref<Map<string | number, Element>>(new Map());\n\nfunction registerItemEl(key: string | number, el: Element | null) {\n if (el) {\n itemEls.value.set(key, el);\n if (fresh && itemObserver) {\n itemObserver.observe(el);\n }\n } else {\n const old = itemEls.value.get(key);\n if (old && itemObserver) itemObserver.unobserve(old);\n itemEls.value.delete(key);\n const next = { ...itemHeights.value };\n delete next[key];\n itemHeights.value = next;\n }\n}\n\nfunction setupItemObserver() {\n if (!fresh || typeof ResizeObserver === 'undefined') return;\n itemObserver = new ResizeObserver((entries) => {\n let changed = false;\n for (const entry of entries) {\n const el = entry.target as HTMLElement;\n const key = el.dataset.masonryKey;\n if (key !== undefined) {\n const h = entry.contentRect.height;\n if (itemHeights.value[key] !== h) {\n itemHeights.value = { ...itemHeights.value, [key]: h };\n changed = true;\n }\n }\n }\n if (changed) {\n // trigger layout recompute (handled reactively via computed)\n }\n });\n // Observe any already-mounted elements\n itemEls.value.forEach((el) => itemObserver!.observe(el));\n}\n\n// ─── Core layout algorithm ────────────────────────────────────────────────────\n\nconst resolvedColumns = computed(() => resolveResponsive(columns, containerWidth.value));\n\nconst resolvedGutter = computed<[number, number]>(() => {\n const g = gutter;\n if (Array.isArray(g)) {\n const colGap = resolveResponsive(g[0] as BMasonryResponsive, containerWidth.value);\n const rowGap = resolveResponsive(g[1] as BMasonryResponsive, containerWidth.value);\n return [colGap, rowGap];\n }\n const v = resolveResponsive(g as BMasonryResponsive, containerWidth.value);\n return [v, v];\n});\n\n/** Distribute items across columns using the \"shortest column first\" strategy. */\nconst columnBuckets = computed<{ item: BMasonryItem; originalIndex: number }[][]>(() => {\n const cols = resolvedColumns.value;\n const buckets: { item: BMasonryItem; originalIndex: number }[][] = Array.from(\n { length: cols },\n () => [],\n );\n const heights = Array<number>(cols).fill(0);\n const [, rowGap] = resolvedGutter.value;\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n let targetCol: number;\n\n if (item.column !== undefined) {\n // Pinned column (1-based → 0-based, clamped)\n targetCol = Math.max(0, Math.min(cols - 1, item.column - 1));\n } else {\n // Shortest column\n targetCol = heights.indexOf(Math.min(...heights));\n }\n\n buckets[targetCol].push({ item, originalIndex: i });\n const h = itemHeights.value[item.key] ?? item.height ?? 0;\n heights[targetCol] += h + (buckets[targetCol].length > 1 ? rowGap : 0);\n }\n\n return buckets;\n});\n\nconst layoutColumnMap = computed(() => {\n const cols = resolvedColumns.value;\n const map: Record<string | number, number> = {};\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const bucket = columnBuckets.value.findIndex((b) =>\n b.some((entry) => entry.item.key === item.key),\n );\n if (bucket >= 0) map[item.key] = bucket;\n }\n return { columns: cols, columnMap: map };\n});\n\nwatch(layoutColumnMap, (val) => {\n emit('layoutChange', val);\n}, { immediate: true });\n\n// ─── CSS class/style helpers ──────────────────────────────────────────────────\n\nfunction getItemClasses(item: BMasonryItem, columnIndex: number) {\n const base = ['b-masonry__item'];\n if (!classNames) return base;\n\n if (typeof classNames === 'function') {\n const extra = classNames(item, columnIndex);\n if (extra) base.push(...(Array.isArray(extra) ? extra : [extra as string]));\n } else if (typeof classNames.item === 'function') {\n const extra = classNames.item(item, columnIndex);\n if (extra) base.push(...(Array.isArray(extra) ? extra : [extra as string]));\n } else if (typeof classNames.item === 'string') {\n base.push(classNames.item);\n }\n return base;\n}\n\nfunction getItemStyles(item: BMasonryItem, columnIndex: number): Record<string, string> {\n if (!styles) return {};\n if (typeof styles === 'function') return styles(item, columnIndex) ?? {};\n if (typeof styles.item === 'function') return styles.item(item, columnIndex) ?? {};\n if (styles.item && typeof styles.item === 'object') return styles.item as Record<string, string>;\n return {};\n}\n\nfunction getColumnClasses(_colIndex: number): string[] {\n const base = ['b-masonry__column'];\n if (!classNames || typeof classNames === 'function') return base;\n if (classNames.column) base.push(classNames.column);\n return base;\n}\n\nfunction getColumnStyles(_colIndex: number): Record<string, string> {\n if (!styles || typeof styles === 'function') return {};\n return (styles.column as Record<string, string>) ?? {};\n}\n\nconst rootClasses = computed(() => {\n const base = ['b-masonry'];\n if (!classNames || typeof classNames === 'function') return base;\n if (classNames.root) base.push(classNames.root);\n return base;\n});\n\nconst rootStyles = computed(() => {\n const base: Record<string, string> = {\n '--b-masonry-columns': String(resolvedColumns.value),\n '--b-masonry-col-gap': `${resolvedGutter.value[0]}px`,\n '--b-masonry-row-gap': `${resolvedGutter.value[1]}px`,\n };\n if (styles && typeof styles === 'object' && !('root' in styles) === false) {\n const s = styles as { root?: Record<string, string> };\n if (s.root) Object.assign(base, s.root);\n }\n return base;\n});\n\n// ─── Lifecycle ────────────────────────────────────────────────────────────────\n\nonMounted(() => {\n updateWidth();\n\n if (typeof ResizeObserver !== 'undefined') {\n containerObserver = new ResizeObserver(() => updateWidth());\n if (rootEl.value) containerObserver.observe(rootEl.value);\n } else {\n // SSR / no ResizeObserver: listen to window resize\n window.addEventListener('resize', updateWidth);\n }\n\n if (fresh) setupItemObserver();\n});\n\nwatch(\n () => fresh,\n (enabled) => {\n if (enabled) {\n setupItemObserver();\n } else {\n itemObserver?.disconnect();\n itemObserver = null;\n itemHeights.value = {};\n }\n },\n);\n\nonBeforeUnmount(() => {\n containerObserver?.disconnect();\n itemObserver?.disconnect();\n window.removeEventListener('resize', updateWidth);\n});\n</script>\n\n<template>\n <!-- role=\"list\" lets screen readers announce item count -->\n <div\n ref=\"rootEl\"\n :class=\"rootClasses\"\n :style=\"rootStyles\"\n role=\"list\"\n aria-label=\"Masonry layout\"\n >\n <!-- Column-based layout: each column is a flex column -->\n <div\n v-for=\"(bucket, colIdx) in columnBuckets\"\n :key=\"colIdx\"\n :class=\"getColumnClasses(colIdx)\"\n :style=\"getColumnStyles(colIdx)\"\n role=\"presentation\"\n >\n <div\n v-for=\"{ item, originalIndex } in bucket\"\n :key=\"item.key\"\n :ref=\"(el) => registerItemEl(item.key, el as Element | null)\"\n :data-masonry-key=\"item.key\"\n :class=\"getItemClasses(item, colIdx)\"\n :style=\"getItemStyles(item, colIdx)\"\n role=\"listitem\"\n >\n <!-- Named item slot (prop-driven items) -->\n <slot v-if=\"$slots.item\" name=\"item\" :item=\"item\" :index=\"originalIndex\" :column=\"colIdx\" />\n <!-- Default slot fallback when using raw children (no items prop) -->\n <template v-else>\n <slot />\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<style>\n/* ─────────────────────────────────────────────────────────────────────────────\n BMasonry — CSS custom properties (scoped to component root)\n ───────────────────────────────────────────────────────────────────────────── */\n.b-masonry {\n /* Layout tokens */\n --b-masonry-columns: 3;\n --b-masonry-col-gap: 0px;\n --b-masonry-row-gap: 0px;\n\n /* Item tokens */\n --b-masonry-item-transition-duration: 200ms;\n --b-masonry-item-transition-timing: ease;\n --b-masonry-item-border-radius: 0px;\n --b-masonry-item-bg: transparent;\n\n /* ── Layout ── */\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: var(--b-masonry-col-gap);\n width: 100%;\n box-sizing: border-box;\n}\n\n/* ── Column ── */\n.b-masonry__column {\n display: flex;\n flex: 1 1 0;\n min-width: 0;\n flex-direction: column;\n gap: var(--b-masonry-row-gap);\n}\n\n/* ── Item ── */\n.b-masonry__item {\n width: 100%;\n box-sizing: border-box;\n background: var(--b-masonry-item-bg);\n border-radius: var(--b-masonry-item-border-radius);\n transition:\n transform var(--b-masonry-item-transition-duration) var(--b-masonry-item-transition-timing),\n opacity var(--b-masonry-item-transition-duration) var(--b-masonry-item-transition-timing);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-masonry {\n /* Tokens that shift in dark mode — override as needed by the consumer */\n --b-masonry-item-bg: transparent;\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-masonry {\n /* Tokens that shift in dark mode — override as needed by the consumer */\n --b-masonry-item-bg: transparent;\n }\n}\n\n/* ── Reduced motion ── */\n@media (prefers-reduced-motion: reduce) {\n .b-masonry {\n --b-masonry-item-transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"design-system120.js","names":[],"sources":["../src/components/BInputNumber/BInputNumber.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { BInputStatus, BInputVariant } from '@/components/BInput/types.ts';\nimport { useComponentId } from '@/composables/useComponentId.ts';\nimport { BCommonSize } from '@/types.ts';\nimport { computed, ref, useSlots, watch } from 'vue';\nimport type { BInputNumberFocusOptions, BInputNumberStepInfo } from './types.ts';\n\ndefineOptions({ inheritAttrs: false });\n\nconst slots = useSlots();\n\nconst {\n size = BCommonSize.Medium,\n variant = BInputVariant.Outlined,\n min = Number.MIN_SAFE_INTEGER,\n max = Number.MAX_SAFE_INTEGER,\n step = 1,\n disabled = false,\n readOnly = false,\n controls = true,\n keyboard = true,\n changeOnBlur = true,\n changeOnWheel = false,\n placeholder,\n id,\n precision,\n formatter,\n parser,\n decimalSeparator,\n stringMode = false,\n status,\n} = defineProps<{\n /** The size of the input number. */\n size?: `${BCommonSize}`;\n /** Visual variant of the input number. */\n variant?: `${BInputVariant}`;\n /** Validation status. */\n status?: `${BInputStatus}`;\n /** Minimum value allowed. */\n min?: number;\n /** Maximum value allowed. */\n max?: number;\n /** Increment/decrement step amount. */\n step?: number;\n /** Whether the input number is disabled. */\n disabled?: boolean;\n /** Whether the input number is read-only. */\n readOnly?: boolean;\n /** Whether to show +/- controls. */\n controls?: boolean;\n /** Whether keyboard up/down changes value. */\n keyboard?: boolean;\n /** Whether to trigger change on blur (e.g. reset out-of-range). */\n changeOnBlur?: boolean;\n /** Whether mouse wheel changes value. */\n changeOnWheel?: boolean;\n /** Placeholder text. */\n placeholder?: string;\n /** HTML id attribute. */\n id?: string;\n /** Decimal precision for display. */\n precision?: number;\n /** Format the displayed value. */\n formatter?: (value: string | number) => string;\n /** Parse the formatted value back to a number. */\n parser?: (displayValue: string) => string;\n /** Custom decimal separator character. */\n decimalSeparator?: string;\n /** Use string mode for high-precision decimals. */\n stringMode?: boolean;\n}>();\n\nconst emit = defineEmits<{\n /** Fired when value changes. */\n change: [value: number | null];\n /** Fired when Enter key is pressed. */\n pressEnter: [event: KeyboardEvent];\n /** Fired on step (button, keyboard, or wheel). */\n step: [value: number | null, info: BInputNumberStepInfo];\n /** Fired on input focus. */\n focus: [event: FocusEvent];\n /** Fired on input blur. */\n blur: [event: FocusEvent];\n}>();\n\nconst model = defineModel<number | null>({ default: null });\n\nconst { componentUID } = useComponentId();\nconst inputId = computed(() => id ?? `b-input-number-${componentUID.value}`);\n\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst isFocused = ref(false);\nconst displayValue = ref('');\n\nconst hasPrefix = computed(() => !!slots.prefix);\nconst hasSuffix = computed(() => !!slots.suffix);\n\nconst isUpDisabled = computed(() => {\n if (disabled || readOnly) return true;\n if (model.value === null) return false;\n return model.value >= max;\n});\n\nconst isDownDisabled = computed(() => {\n if (disabled || readOnly) return true;\n if (model.value === null) return false;\n return model.value <= min;\n});\n\nfunction toFixedPrecision(val: number): number {\n if (precision !== undefined) {\n return parseFloat(val.toFixed(precision));\n }\n const stepStr = String(step);\n const stepDecimals = stepStr.includes('.') ? stepStr.split('.')[1].length : 0;\n if (stepDecimals > 0) {\n return parseFloat(val.toFixed(stepDecimals));\n }\n return val;\n}\n\nfunction clamp(val: number): number {\n return Math.min(max, Math.max(min, val));\n}\n\nfunction formatValue(val: number | null): string {\n if (val === null) return '';\n let str: string;\n if (precision !== undefined) {\n str = val.toFixed(precision);\n } else {\n str = String(val);\n }\n if (decimalSeparator) {\n str = str.replace('.', decimalSeparator);\n }\n if (formatter) {\n return formatter(stringMode ? str : val);\n }\n return str;\n}\n\nfunction parseInput(input: string): number | null {\n if (!input.trim()) return null;\n let parsed = input;\n if (parser) {\n parsed = parser(input);\n } else if (decimalSeparator) {\n parsed = parsed.replace(decimalSeparator, '.');\n }\n const num = Number(parsed);\n if (isNaN(num)) return model.value;\n return num;\n}\n\nfunction syncDisplay() {\n displayValue.value = formatValue(model.value);\n}\n\nfunction updateValue(newVal: number | null, triggerChange = true) {\n if (newVal !== null) {\n newVal = toFixedPrecision(clamp(newVal));\n }\n const changed = newVal !== model.value;\n model.value = newVal;\n syncDisplay();\n if (changed && triggerChange) {\n emit('change', newVal);\n }\n}\n\nfunction stepValue(direction: 'up' | 'down') {\n if (disabled || readOnly) return;\n const current = model.value ?? 0;\n const offset = direction === 'up' ? step : -step;\n const next = toFixedPrecision(current + offset);\n const clamped = clamp(next);\n updateValue(clamped);\n emit('step', clamped, { offset: step, type: direction });\n}\n\nconst handleInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n displayValue.value = target.value;\n};\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n commitValue();\n emit('pressEnter', e);\n }\n if (!keyboard) return;\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n stepValue('up');\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n stepValue('down');\n }\n};\n\nconst handleFocus = (e: FocusEvent) => {\n isFocused.value = true;\n emit('focus', e);\n};\n\nconst handleBlur = (e: FocusEvent) => {\n isFocused.value = false;\n if (changeOnBlur) {\n commitValue();\n }\n emit('blur', e);\n};\n\nconst handleWheel = (e: WheelEvent) => {\n if (!changeOnWheel || disabled || readOnly || !isFocused.value) return;\n e.preventDefault();\n if (e.deltaY < 0) {\n stepValue('up');\n } else if (e.deltaY > 0) {\n stepValue('down');\n }\n};\n\nfunction commitValue() {\n const parsed = parseInput(displayValue.value);\n if (parsed === null) {\n updateValue(null);\n } else {\n updateValue(parsed);\n }\n}\n\nconst focus = (options?: BInputNumberFocusOptions) => {\n inputRef.value?.focus({ preventScroll: options?.preventScroll });\n if (options?.cursor && inputRef.value) {\n const len = inputRef.value.value.length;\n switch (options.cursor) {\n case 'start':\n inputRef.value.setSelectionRange(0, 0);\n break;\n case 'end':\n inputRef.value.setSelectionRange(len, len);\n break;\n case 'all':\n inputRef.value.setSelectionRange(0, len);\n break;\n }\n }\n};\n\nconst blur = () => {\n inputRef.value?.blur();\n};\n\nwatch(\n () => model.value,\n () => {\n if (!isFocused.value) {\n syncDisplay();\n }\n },\n { immediate: true },\n);\n\ndefineExpose({ focus, blur });\n</script>\n\n<template>\n <span\n class=\"b-input-number\"\n :class=\"[\n `b-input-number--${size}`,\n `b-input-number--${variant}`,\n {\n 'b-input-number--focused': isFocused,\n 'b-input-number--disabled': disabled,\n 'b-input-number--readonly': readOnly,\n 'b-input-number--error': status === BInputStatus.Error,\n 'b-input-number--warning': status === BInputStatus.Warning,\n 'b-input-number--has-controls': controls,\n },\n ]\"\n >\n <span class=\"b-input-number__wrapper\">\n <span v-if=\"hasPrefix\" class=\"b-input-number__prefix\" aria-hidden=\"true\">\n <slot name=\"prefix\" />\n </span>\n\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n :value=\"displayValue\"\n type=\"text\"\n inputmode=\"decimal\"\n role=\"spinbutton\"\n :aria-valuenow=\"model ?? undefined\"\n :aria-valuemin=\"min !== Number.MIN_SAFE_INTEGER ? min : undefined\"\n :aria-valuemax=\"max !== Number.MAX_SAFE_INTEGER ? max : undefined\"\n :aria-invalid=\"status === BInputStatus.Error ? true : undefined\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readOnly\"\n class=\"b-input-number__input\"\n @input=\"handleInput\"\n @keydown=\"handleKeyDown\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @wheel=\"handleWheel\"\n />\n\n <span v-if=\"hasSuffix\" class=\"b-input-number__suffix\" aria-hidden=\"true\">\n <slot name=\"suffix\" />\n </span>\n\n <span v-if=\"controls\" class=\"b-input-number__handler-wrap\" aria-hidden=\"true\">\n <span\n class=\"b-input-number__handler b-input-number__handler--up\"\n :class=\"{ 'b-input-number__handler--disabled': isUpDisabled }\"\n role=\"button\"\n tabindex=\"-1\"\n aria-label=\"Increase value\"\n :aria-disabled=\"isUpDisabled\"\n @mousedown.prevent=\"!isUpDisabled && stepValue('up')\"\n >\n <svg\n viewBox=\"0 0 1024 1024\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h286c2.1 0 4.2-.8 5.7-2.3l70.3-70.3 70.3 70.3c1.5 1.5 3.5 2.3 5.7 2.3h286c6.5 0 10.3-7.4 6.5-12.7z\"\n />\n </svg>\n </span>\n <span\n class=\"b-input-number__handler b-input-number__handler--down\"\n :class=\"{ 'b-input-number__handler--disabled': isDownDisabled }\"\n role=\"button\"\n tabindex=\"-1\"\n aria-label=\"Decrease value\"\n :aria-disabled=\"isDownDisabled\"\n @mousedown.prevent=\"!isDownDisabled && stepValue('down')\"\n >\n <svg\n viewBox=\"0 0 1024 1024\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\"\n />\n </svg>\n </span>\n </span>\n </span>\n </span>\n</template>\n\n<style scoped>\n.b-input-number {\n --b-input-number-active-bg: #ffffff;\n --b-input-number-active-border-color: #1677ff;\n --b-input-number-active-shadow: 0 0 0 2px rgba(5, 145, 255, 0.1);\n --b-input-number-addon-bg: rgba(0, 0, 0, 0.02);\n --b-input-number-control-width: 90px;\n --b-input-number-error-active-shadow: 0 0 0 2px rgba(255, 38, 5, 0.06);\n --b-input-number-filled-handle-bg: #f0f0f0;\n --b-input-number-handle-active-bg: rgba(0, 0, 0, 0.02);\n --b-input-number-handle-bg: #ffffff;\n --b-input-number-handle-border-color: #d9d9d9;\n --b-input-number-handle-font-size: 7px;\n --b-input-number-handle-hover-color: #1677ff;\n --b-input-number-handle-width: 22px;\n --b-input-number-hover-bg: #ffffff;\n --b-input-number-hover-border-color: #4096ff;\n --b-input-number-font-size: 14px;\n --b-input-number-font-size-lg: 16px;\n --b-input-number-font-size-sm: 14px;\n --b-input-number-padding-block: 4px;\n --b-input-number-padding-block-lg: 7px;\n --b-input-number-padding-block-sm: 0px;\n --b-input-number-padding-inline: 11px;\n --b-input-number-padding-inline-lg: 11px;\n --b-input-number-padding-inline-sm: 7px;\n --b-input-number-warning-active-shadow: 0 0 0 2px rgba(255, 215, 5, 0.1);\n --b-input-number-border-color: #d9d9d9;\n --b-input-number-bg: #ffffff;\n --b-input-number-color: rgba(0, 0, 0, 0.88);\n --b-input-number-placeholder-color: rgba(0, 0, 0, 0.25);\n --b-input-number-border-radius: 6px;\n --b-input-number-disabled-bg: rgba(0, 0, 0, 0.04);\n --b-input-number-disabled-color: rgba(0, 0, 0, 0.25);\n --b-input-number-error-border-color: #ff4d4f;\n --b-input-number-error-hover-border-color: #ff7875;\n --b-input-number-warning-border-color: #faad14;\n --b-input-number-warning-hover-border-color: #ffc53d;\n --b-input-number-filled-bg: rgba(0, 0, 0, 0.04);\n --b-input-number-filled-hover-bg: rgba(0, 0, 0, 0.04);\n\n display: inline-flex;\n align-items: stretch;\n width: var(--b-input-number-control-width);\n font-size: var(--b-input-number-font-size);\n color: var(--b-input-number-color);\n line-height: 1.5714;\n}\n\n.b-input-number--lg {\n font-size: var(--b-input-number-font-size-lg);\n}\n\n.b-input-number--sm {\n font-size: var(--b-input-number-font-size-sm);\n}\n\n.b-input-number__wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n position: relative;\n transition: all 0.2s;\n}\n\n/* Outlined */\n.b-input-number--outlined .b-input-number__wrapper {\n background: var(--b-input-number-bg);\n border: 1px solid var(--b-input-number-border-color);\n border-radius: var(--b-input-number-border-radius);\n}\n\n.b-input-number--outlined:not(.b-input-number--disabled):hover .b-input-number__wrapper {\n border-color: var(--b-input-number-hover-border-color);\n background: var(--b-input-number-hover-bg);\n}\n\n.b-input-number--outlined.b-input-number--focused .b-input-number__wrapper {\n border-color: var(--b-input-number-active-border-color);\n background: var(--b-input-number-active-bg);\n box-shadow: var(--b-input-number-active-shadow);\n}\n\n/* Filled */\n.b-input-number--filled .b-input-number__wrapper {\n background: var(--b-input-number-filled-bg);\n border: 1px solid transparent;\n border-radius: var(--b-input-number-border-radius);\n}\n\n.b-input-number--filled:not(.b-input-number--disabled):hover .b-input-number__wrapper {\n background: var(--b-input-number-filled-hover-bg);\n}\n\n.b-input-number--filled.b-input-number--focused .b-input-number__wrapper {\n background: var(--b-input-number-active-bg);\n border-color: var(--b-input-number-active-border-color);\n box-shadow: var(--b-input-number-active-shadow);\n}\n\n/* Borderless */\n.b-input-number--borderless .b-input-number__wrapper {\n background: transparent;\n border: 1px solid transparent;\n border-radius: var(--b-input-number-border-radius);\n}\n\n/* Underlined */\n.b-input-number--underlined .b-input-number__wrapper {\n background: transparent;\n border: none;\n border-bottom: 1px solid var(--b-input-number-border-color);\n border-radius: 0;\n}\n\n.b-input-number--underlined:not(.b-input-number--disabled):hover .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-hover-border-color);\n}\n\n.b-input-number--underlined.b-input-number--focused .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-active-border-color);\n box-shadow: 0 1px 0 0 var(--b-input-number-active-border-color);\n}\n\n/* Error */\n.b-input-number--error.b-input-number--outlined .b-input-number__wrapper {\n border-color: var(--b-input-number-error-border-color);\n}\n\n.b-input-number--error.b-input-number--outlined:not(.b-input-number--disabled):hover\n .b-input-number__wrapper {\n border-color: var(--b-input-number-error-hover-border-color);\n}\n\n.b-input-number--error.b-input-number--outlined.b-input-number--focused .b-input-number__wrapper,\n.b-input-number--error.b-input-number--filled.b-input-number--focused .b-input-number__wrapper {\n border-color: var(--b-input-number-error-border-color);\n box-shadow: var(--b-input-number-error-active-shadow);\n}\n\n.b-input-number--error.b-input-number--underlined .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-error-border-color);\n}\n\n.b-input-number--error.b-input-number--underlined.b-input-number--focused .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-error-border-color);\n box-shadow: 0 1px 0 0 var(--b-input-number-error-border-color);\n}\n\n/* Warning */\n.b-input-number--warning.b-input-number--outlined .b-input-number__wrapper {\n border-color: var(--b-input-number-warning-border-color);\n}\n\n.b-input-number--warning.b-input-number--outlined:not(.b-input-number--disabled):hover\n .b-input-number__wrapper {\n border-color: var(--b-input-number-warning-hover-border-color);\n}\n\n.b-input-number--warning.b-input-number--outlined.b-input-number--focused .b-input-number__wrapper,\n.b-input-number--warning.b-input-number--filled.b-input-number--focused .b-input-number__wrapper {\n border-color: var(--b-input-number-warning-border-color);\n box-shadow: var(--b-input-number-warning-active-shadow);\n}\n\n.b-input-number--warning.b-input-number--underlined .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-warning-border-color);\n}\n\n.b-input-number--warning.b-input-number--underlined.b-input-number--focused\n .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-warning-border-color);\n box-shadow: 0 1px 0 0 var(--b-input-number-warning-border-color);\n}\n\n/* Disabled */\n.b-input-number--disabled .b-input-number__wrapper {\n background: var(--b-input-number-disabled-bg);\n cursor: not-allowed;\n}\n\n.b-input-number--disabled .b-input-number__input {\n color: var(--b-input-number-disabled-color);\n cursor: not-allowed;\n}\n\n/* Input element */\n.b-input-number__input {\n flex: 1;\n min-width: 0;\n width: 100%;\n border: none;\n outline: none;\n background: transparent;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n text-align: left;\n}\n\n.b-input-number--md .b-input-number__input {\n padding: var(--b-input-number-padding-block) var(--b-input-number-padding-inline);\n}\n\n.b-input-number--lg .b-input-number__input {\n padding: var(--b-input-number-padding-block-lg) var(--b-input-number-padding-inline-lg);\n}\n\n.b-input-number--sm .b-input-number__input {\n padding: var(--b-input-number-padding-block-sm) var(--b-input-number-padding-inline-sm);\n}\n\n.b-input-number--has-controls .b-input-number__input {\n padding-right: calc(var(--b-input-number-handle-width) + 2px);\n}\n\n.b-input-number__input::placeholder {\n color: var(--b-input-number-placeholder-color);\n}\n\n/* Prefix & Suffix */\n.b-input-number__prefix,\n.b-input-number__suffix {\n display: inline-flex;\n align-items: center;\n color: var(--b-input-number-color);\n flex-shrink: 0;\n}\n\n.b-input-number__prefix {\n margin-left: var(--b-input-number-padding-inline);\n}\n\n.b-input-number__suffix {\n margin-right: var(--b-input-number-padding-inline);\n}\n\n.b-input-number__prefix ~ .b-input-number__input {\n padding-left: 4px;\n}\n\n/* Handler (step buttons) */\n.b-input-number__handler-wrap {\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n height: 100%;\n width: var(--b-input-number-handle-width);\n border-left: 1px solid var(--b-input-number-handle-border-color);\n border-radius: 0 var(--b-input-number-border-radius) var(--b-input-number-border-radius) 0;\n overflow: hidden;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.b-input-number:hover .b-input-number__handler-wrap,\n.b-input-number--focused .b-input-number__handler-wrap {\n opacity: 1;\n}\n\n.b-input-number__handler {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n cursor: pointer;\n background: var(--b-input-number-handle-bg);\n font-size: var(--b-input-number-handle-font-size);\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n transition:\n color 0.2s,\n background 0.2s;\n}\n\n.b-input-number__handler:hover {\n color: var(--b-input-number-handle-hover-color);\n background: var(--b-input-number-handle-active-bg);\n}\n\n.b-input-number__handler--up {\n border-bottom: 1px solid var(--b-input-number-handle-border-color);\n}\n\n.b-input-number__handler--disabled {\n cursor: not-allowed;\n opacity: 0.4;\n pointer-events: none;\n}\n\n.b-input-number__handler svg {\n width: 0.5em;\n height: 0.5em;\n}\n\n/* Filled variant handler */\n.b-input-number--filled .b-input-number__handler {\n background: var(--b-input-number-filled-handle-bg);\n}\n\n/* Borderless / underlined: hide handler border */\n.b-input-number--borderless .b-input-number__handler-wrap,\n.b-input-number--underlined .b-input-number__handler-wrap {\n border-left-color: transparent;\n}\n\n/* Dark mode */\n[data-prefers-color='dark'] .b-input-number {\n --b-input-number-active-bg: #141414;\n --b-input-number-active-border-color: #1668dc;\n --b-input-number-active-shadow: 0 0 0 2px rgba(22, 104, 220, 0.15);\n --b-input-number-addon-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-error-active-shadow: 0 0 0 2px rgba(220, 56, 56, 0.1);\n --b-input-number-filled-handle-bg: rgba(255, 255, 255, 0.12);\n --b-input-number-handle-active-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-handle-bg: #1f1f1f;\n --b-input-number-handle-border-color: #424242;\n --b-input-number-handle-hover-color: #3c89e8;\n --b-input-number-hover-bg: #141414;\n --b-input-number-hover-border-color: #3c89e8;\n --b-input-number-warning-active-shadow: 0 0 0 2px rgba(209, 163, 0, 0.1);\n --b-input-number-border-color: #424242;\n --b-input-number-bg: #141414;\n --b-input-number-color: rgba(255, 255, 255, 0.88);\n --b-input-number-placeholder-color: rgba(255, 255, 255, 0.25);\n --b-input-number-disabled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-disabled-color: rgba(255, 255, 255, 0.25);\n --b-input-number-error-border-color: #dc3838;\n --b-input-number-error-hover-border-color: #e86e6e;\n --b-input-number-warning-border-color: #d1a300;\n --b-input-number-warning-hover-border-color: #e8c631;\n --b-input-number-filled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-filled-hover-bg: rgba(255, 255, 255, 0.12);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-input-number {\n --b-input-number-active-bg: #141414;\n --b-input-number-active-border-color: #1668dc;\n --b-input-number-active-shadow: 0 0 0 2px rgba(22, 104, 220, 0.15);\n --b-input-number-addon-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-error-active-shadow: 0 0 0 2px rgba(220, 56, 56, 0.1);\n --b-input-number-filled-handle-bg: rgba(255, 255, 255, 0.12);\n --b-input-number-handle-active-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-handle-bg: #1f1f1f;\n --b-input-number-handle-border-color: #424242;\n --b-input-number-handle-hover-color: #3c89e8;\n --b-input-number-hover-bg: #141414;\n --b-input-number-hover-border-color: #3c89e8;\n --b-input-number-warning-active-shadow: 0 0 0 2px rgba(209, 163, 0, 0.1);\n --b-input-number-border-color: #424242;\n --b-input-number-bg: #141414;\n --b-input-number-color: rgba(255, 255, 255, 0.88);\n --b-input-number-placeholder-color: rgba(255, 255, 255, 0.25);\n --b-input-number-disabled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-disabled-color: rgba(255, 255, 255, 0.25);\n --b-input-number-error-border-color: #dc3838;\n --b-input-number-error-hover-border-color: #e86e6e;\n --b-input-number-warning-border-color: #d1a300;\n --b-input-number-warning-hover-border-color: #e8c631;\n --b-input-number-filled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-filled-hover-bg: rgba(255, 255, 255, 0.12);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .b-input-number__wrapper,\n .b-input-number__handler-wrap,\n .b-input-number__handler {\n transition: none;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import e from "./design-system120.js";
1
+ import e from "./design-system14.js";
2
+ import t from "./design-system120.js";
2
3
  /* empty css */
3
- //#region src/components/BMasonry/BMasonry.vue
4
- var t = e;
4
+ //#region src/components/BInputNumber/BInputNumber.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-64ad79ae"]]);
5
6
  //#endregion
6
- export { t as default };
7
+ export { n as default };
7
8
 
8
9
  //# sourceMappingURL=design-system122.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"design-system122.js","names":[],"sources":["../src/components/BMasonry/BMasonry.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport type {\n BMasonryBreakpoint,\n BMasonryClassNames,\n BMasonryItem,\n BMasonryLayoutChangePayload,\n BMasonryResponsive,\n BMasonryStyles,\n} from './types';\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\nconst {\n columns = 3,\n // eslint-disable-next-line vue/require-valid-default-prop\n gutter = 0,\n items = [],\n fresh = false,\n classNames,\n styles,\n} = defineProps<{\n /**\n * Number of columns. Accepts a fixed number or a breakpoint map.\n * @example 3\n * @example { xs: 1, sm: 2, md: 3, lg: 4 }\n * @default 3\n */\n columns?: BMasonryResponsive;\n\n /**\n * Gap between items in pixels. Accepts a fixed value, a [colGap, rowGap] tuple,\n * or a breakpoint map for responsive gaps.\n * @example 16\n * @example [16, 8]\n * @example { xs: 8, md: 16 }\n * @default 0\n */\n gutter?: BMasonryResponsive | [BMasonryResponsive, BMasonryResponsive];\n\n /**\n * Array of masonry items to render.\n * @default []\n */\n items?: BMasonryItem[];\n\n /**\n * When true, observe every item's size so the layout re-flows when children resize.\n * Requires ResizeObserver support; degrades gracefully when unavailable.\n * @default false\n */\n fresh?: boolean;\n\n /**\n * Customize CSS classes on semantic DOM elements (`root`, `column`, `item`).\n * Can be a plain object or a per-item function `(item, columnIndex) => classes`.\n */\n classNames?: BMasonryClassNames;\n\n /**\n * Customize inline styles on semantic DOM elements (`root`, `column`, `item`).\n * Can be a plain object or a per-item function `(item, columnIndex) => styles`.\n */\n styles?: BMasonryStyles;\n}>();\n\n// ─── Emits ────────────────────────────────────────────────────────────────────\n\nconst emit = defineEmits<{\n /**\n * Fires after each layout recalculation with the resolved column count and\n * the column assignment map (item key → 0-based column index).\n */\n layoutChange: [payload: BMasonryLayoutChangePayload];\n}>();\n\n// ─── Slots ────────────────────────────────────────────────────────────────────\n\ndefineSlots<{\n /**\n * Custom rendering for each item. Receives `{ item: BMasonryItem, index: number, column: number }`.\n */\n item?: (props: { item: BMasonryItem; index: number; column: number }) => unknown;\n\n /**\n * Default slot used when no `items` prop is provided — raw child nodes are\n * distributed across columns automatically.\n */\n default?: (props: Record<string, never>) => unknown;\n}>();\n\n// ─── Responsive helpers ───────────────────────────────────────────────────────\n\nconst BREAKPOINTS: Record<BMasonryBreakpoint, number> = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600,\n};\n\nfunction resolveResponsive(value: BMasonryResponsive, width: number): number {\n if (typeof value === 'number') return Math.max(1, value);\n\n // Breakpoint map — pick the largest breakpoint that still fits\n const keys = (Object.keys(BREAKPOINTS) as BMasonryBreakpoint[]).sort(\n (a, b) => BREAKPOINTS[b] - BREAKPOINTS[a],\n );\n\n for (const bp of keys) {\n if (width >= BREAKPOINTS[bp] && value[bp] !== undefined) {\n return Math.max(1, value[bp]!);\n }\n }\n // Fallback to smallest defined value\n const smallest = (Object.keys(value) as BMasonryBreakpoint[]).sort(\n (a, b) => BREAKPOINTS[a] - BREAKPOINTS[b],\n )[0];\n return smallest ? Math.max(1, value[smallest]!) : 1;\n}\n\n// ─── Container width tracking ─────────────────────────────────────────────────\n\nconst rootEl = ref<HTMLElement | null>(null);\nconst containerWidth = ref(0);\n\nlet containerObserver: ResizeObserver | null = null;\n\nfunction updateWidth() {\n if (rootEl.value) {\n containerWidth.value = rootEl.value.offsetWidth;\n }\n}\n\n// ─── Item height tracking (fresh mode) ────────────────────────────────────────\n\nconst itemHeights = ref<Record<string | number, number>>({});\nlet itemObserver: ResizeObserver | null = null;\nconst itemEls = ref<Map<string | number, Element>>(new Map());\n\nfunction registerItemEl(key: string | number, el: Element | null) {\n if (el) {\n itemEls.value.set(key, el);\n if (fresh && itemObserver) {\n itemObserver.observe(el);\n }\n } else {\n const old = itemEls.value.get(key);\n if (old && itemObserver) itemObserver.unobserve(old);\n itemEls.value.delete(key);\n const next = { ...itemHeights.value };\n delete next[key];\n itemHeights.value = next;\n }\n}\n\nfunction setupItemObserver() {\n if (!fresh || typeof ResizeObserver === 'undefined') return;\n itemObserver = new ResizeObserver((entries) => {\n let changed = false;\n for (const entry of entries) {\n const el = entry.target as HTMLElement;\n const key = el.dataset.masonryKey;\n if (key !== undefined) {\n const h = entry.contentRect.height;\n if (itemHeights.value[key] !== h) {\n itemHeights.value = { ...itemHeights.value, [key]: h };\n changed = true;\n }\n }\n }\n if (changed) {\n // trigger layout recompute (handled reactively via computed)\n }\n });\n // Observe any already-mounted elements\n itemEls.value.forEach((el) => itemObserver!.observe(el));\n}\n\n// ─── Core layout algorithm ────────────────────────────────────────────────────\n\nconst resolvedColumns = computed(() => resolveResponsive(columns, containerWidth.value));\n\nconst resolvedGutter = computed<[number, number]>(() => {\n const g = gutter;\n if (Array.isArray(g)) {\n const colGap = resolveResponsive(g[0] as BMasonryResponsive, containerWidth.value);\n const rowGap = resolveResponsive(g[1] as BMasonryResponsive, containerWidth.value);\n return [colGap, rowGap];\n }\n const v = resolveResponsive(g as BMasonryResponsive, containerWidth.value);\n return [v, v];\n});\n\n/** Distribute items across columns using the \"shortest column first\" strategy. */\nconst columnBuckets = computed<{ item: BMasonryItem; originalIndex: number }[][]>(() => {\n const cols = resolvedColumns.value;\n const buckets: { item: BMasonryItem; originalIndex: number }[][] = Array.from(\n { length: cols },\n () => [],\n );\n const heights = Array<number>(cols).fill(0);\n const [, rowGap] = resolvedGutter.value;\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n let targetCol: number;\n\n if (item.column !== undefined) {\n // Pinned column (1-based → 0-based, clamped)\n targetCol = Math.max(0, Math.min(cols - 1, item.column - 1));\n } else {\n // Shortest column\n targetCol = heights.indexOf(Math.min(...heights));\n }\n\n buckets[targetCol].push({ item, originalIndex: i });\n const h = itemHeights.value[item.key] ?? item.height ?? 0;\n heights[targetCol] += h + (buckets[targetCol].length > 1 ? rowGap : 0);\n }\n\n return buckets;\n});\n\nconst layoutColumnMap = computed(() => {\n const cols = resolvedColumns.value;\n const map: Record<string | number, number> = {};\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const bucket = columnBuckets.value.findIndex((b) =>\n b.some((entry) => entry.item.key === item.key),\n );\n if (bucket >= 0) map[item.key] = bucket;\n }\n return { columns: cols, columnMap: map };\n});\n\nwatch(layoutColumnMap, (val) => {\n emit('layoutChange', val);\n}, { immediate: true });\n\n// ─── CSS class/style helpers ──────────────────────────────────────────────────\n\nfunction getItemClasses(item: BMasonryItem, columnIndex: number) {\n const base = ['b-masonry__item'];\n if (!classNames) return base;\n\n if (typeof classNames === 'function') {\n const extra = classNames(item, columnIndex);\n if (extra) base.push(...(Array.isArray(extra) ? extra : [extra as string]));\n } else if (typeof classNames.item === 'function') {\n const extra = classNames.item(item, columnIndex);\n if (extra) base.push(...(Array.isArray(extra) ? extra : [extra as string]));\n } else if (typeof classNames.item === 'string') {\n base.push(classNames.item);\n }\n return base;\n}\n\nfunction getItemStyles(item: BMasonryItem, columnIndex: number): Record<string, string> {\n if (!styles) return {};\n if (typeof styles === 'function') return styles(item, columnIndex) ?? {};\n if (typeof styles.item === 'function') return styles.item(item, columnIndex) ?? {};\n if (styles.item && typeof styles.item === 'object') return styles.item as Record<string, string>;\n return {};\n}\n\nfunction getColumnClasses(_colIndex: number): string[] {\n const base = ['b-masonry__column'];\n if (!classNames || typeof classNames === 'function') return base;\n if (classNames.column) base.push(classNames.column);\n return base;\n}\n\nfunction getColumnStyles(_colIndex: number): Record<string, string> {\n if (!styles || typeof styles === 'function') return {};\n return (styles.column as Record<string, string>) ?? {};\n}\n\nconst rootClasses = computed(() => {\n const base = ['b-masonry'];\n if (!classNames || typeof classNames === 'function') return base;\n if (classNames.root) base.push(classNames.root);\n return base;\n});\n\nconst rootStyles = computed(() => {\n const base: Record<string, string> = {\n '--b-masonry-columns': String(resolvedColumns.value),\n '--b-masonry-col-gap': `${resolvedGutter.value[0]}px`,\n '--b-masonry-row-gap': `${resolvedGutter.value[1]}px`,\n };\n if (styles && typeof styles === 'object' && !('root' in styles) === false) {\n const s = styles as { root?: Record<string, string> };\n if (s.root) Object.assign(base, s.root);\n }\n return base;\n});\n\n// ─── Lifecycle ────────────────────────────────────────────────────────────────\n\nonMounted(() => {\n updateWidth();\n\n if (typeof ResizeObserver !== 'undefined') {\n containerObserver = new ResizeObserver(() => updateWidth());\n if (rootEl.value) containerObserver.observe(rootEl.value);\n } else {\n // SSR / no ResizeObserver: listen to window resize\n window.addEventListener('resize', updateWidth);\n }\n\n if (fresh) setupItemObserver();\n});\n\nwatch(\n () => fresh,\n (enabled) => {\n if (enabled) {\n setupItemObserver();\n } else {\n itemObserver?.disconnect();\n itemObserver = null;\n itemHeights.value = {};\n }\n },\n);\n\nonBeforeUnmount(() => {\n containerObserver?.disconnect();\n itemObserver?.disconnect();\n window.removeEventListener('resize', updateWidth);\n});\n</script>\n\n<template>\n <!-- role=\"list\" lets screen readers announce item count -->\n <div\n ref=\"rootEl\"\n :class=\"rootClasses\"\n :style=\"rootStyles\"\n role=\"list\"\n aria-label=\"Masonry layout\"\n >\n <!-- Column-based layout: each column is a flex column -->\n <div\n v-for=\"(bucket, colIdx) in columnBuckets\"\n :key=\"colIdx\"\n :class=\"getColumnClasses(colIdx)\"\n :style=\"getColumnStyles(colIdx)\"\n role=\"presentation\"\n >\n <div\n v-for=\"{ item, originalIndex } in bucket\"\n :key=\"item.key\"\n :ref=\"(el) => registerItemEl(item.key, el as Element | null)\"\n :data-masonry-key=\"item.key\"\n :class=\"getItemClasses(item, colIdx)\"\n :style=\"getItemStyles(item, colIdx)\"\n role=\"listitem\"\n >\n <!-- Named item slot (prop-driven items) -->\n <slot v-if=\"$slots.item\" name=\"item\" :item=\"item\" :index=\"originalIndex\" :column=\"colIdx\" />\n <!-- Default slot fallback when using raw children (no items prop) -->\n <template v-else>\n <slot />\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<style>\n/* ─────────────────────────────────────────────────────────────────────────────\n BMasonry — CSS custom properties (scoped to component root)\n ───────────────────────────────────────────────────────────────────────────── */\n.b-masonry {\n /* Layout tokens */\n --b-masonry-columns: 3;\n --b-masonry-col-gap: 0px;\n --b-masonry-row-gap: 0px;\n\n /* Item tokens */\n --b-masonry-item-transition-duration: 200ms;\n --b-masonry-item-transition-timing: ease;\n --b-masonry-item-border-radius: 0px;\n --b-masonry-item-bg: transparent;\n\n /* ── Layout ── */\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: var(--b-masonry-col-gap);\n width: 100%;\n box-sizing: border-box;\n}\n\n/* ── Column ── */\n.b-masonry__column {\n display: flex;\n flex: 1 1 0;\n min-width: 0;\n flex-direction: column;\n gap: var(--b-masonry-row-gap);\n}\n\n/* ── Item ── */\n.b-masonry__item {\n width: 100%;\n box-sizing: border-box;\n background: var(--b-masonry-item-bg);\n border-radius: var(--b-masonry-item-border-radius);\n transition:\n transform var(--b-masonry-item-transition-duration) var(--b-masonry-item-transition-timing),\n opacity var(--b-masonry-item-transition-duration) var(--b-masonry-item-transition-timing);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-masonry {\n /* Tokens that shift in dark mode — override as needed by the consumer */\n --b-masonry-item-bg: transparent;\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-masonry {\n /* Tokens that shift in dark mode — override as needed by the consumer */\n --b-masonry-item-bg: transparent;\n }\n}\n\n/* ── Reduced motion ── */\n@media (prefers-reduced-motion: reduce) {\n .b-masonry {\n --b-masonry-item-transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"design-system122.js","names":[],"sources":["../src/components/BInputNumber/BInputNumber.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { BInputStatus, BInputVariant } from '@/components/BInput/types.ts';\nimport { useComponentId } from '@/composables/useComponentId.ts';\nimport { BCommonSize } from '@/types.ts';\nimport { computed, ref, useSlots, watch } from 'vue';\nimport type { BInputNumberFocusOptions, BInputNumberStepInfo } from './types.ts';\n\ndefineOptions({ inheritAttrs: false });\n\nconst slots = useSlots();\n\nconst {\n size = BCommonSize.Medium,\n variant = BInputVariant.Outlined,\n min = Number.MIN_SAFE_INTEGER,\n max = Number.MAX_SAFE_INTEGER,\n step = 1,\n disabled = false,\n readOnly = false,\n controls = true,\n keyboard = true,\n changeOnBlur = true,\n changeOnWheel = false,\n placeholder,\n id,\n precision,\n formatter,\n parser,\n decimalSeparator,\n stringMode = false,\n status,\n} = defineProps<{\n /** The size of the input number. */\n size?: `${BCommonSize}`;\n /** Visual variant of the input number. */\n variant?: `${BInputVariant}`;\n /** Validation status. */\n status?: `${BInputStatus}`;\n /** Minimum value allowed. */\n min?: number;\n /** Maximum value allowed. */\n max?: number;\n /** Increment/decrement step amount. */\n step?: number;\n /** Whether the input number is disabled. */\n disabled?: boolean;\n /** Whether the input number is read-only. */\n readOnly?: boolean;\n /** Whether to show +/- controls. */\n controls?: boolean;\n /** Whether keyboard up/down changes value. */\n keyboard?: boolean;\n /** Whether to trigger change on blur (e.g. reset out-of-range). */\n changeOnBlur?: boolean;\n /** Whether mouse wheel changes value. */\n changeOnWheel?: boolean;\n /** Placeholder text. */\n placeholder?: string;\n /** HTML id attribute. */\n id?: string;\n /** Decimal precision for display. */\n precision?: number;\n /** Format the displayed value. */\n formatter?: (value: string | number) => string;\n /** Parse the formatted value back to a number. */\n parser?: (displayValue: string) => string;\n /** Custom decimal separator character. */\n decimalSeparator?: string;\n /** Use string mode for high-precision decimals. */\n stringMode?: boolean;\n}>();\n\nconst emit = defineEmits<{\n /** Fired when value changes. */\n change: [value: number | null];\n /** Fired when Enter key is pressed. */\n pressEnter: [event: KeyboardEvent];\n /** Fired on step (button, keyboard, or wheel). */\n step: [value: number | null, info: BInputNumberStepInfo];\n /** Fired on input focus. */\n focus: [event: FocusEvent];\n /** Fired on input blur. */\n blur: [event: FocusEvent];\n}>();\n\nconst model = defineModel<number | null>({ default: null });\n\nconst { componentUID } = useComponentId();\nconst inputId = computed(() => id ?? `b-input-number-${componentUID.value}`);\n\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst isFocused = ref(false);\nconst displayValue = ref('');\n\nconst hasPrefix = computed(() => !!slots.prefix);\nconst hasSuffix = computed(() => !!slots.suffix);\n\nconst isUpDisabled = computed(() => {\n if (disabled || readOnly) return true;\n if (model.value === null) return false;\n return model.value >= max;\n});\n\nconst isDownDisabled = computed(() => {\n if (disabled || readOnly) return true;\n if (model.value === null) return false;\n return model.value <= min;\n});\n\nfunction toFixedPrecision(val: number): number {\n if (precision !== undefined) {\n return parseFloat(val.toFixed(precision));\n }\n const stepStr = String(step);\n const stepDecimals = stepStr.includes('.') ? stepStr.split('.')[1].length : 0;\n if (stepDecimals > 0) {\n return parseFloat(val.toFixed(stepDecimals));\n }\n return val;\n}\n\nfunction clamp(val: number): number {\n return Math.min(max, Math.max(min, val));\n}\n\nfunction formatValue(val: number | null): string {\n if (val === null) return '';\n let str: string;\n if (precision !== undefined) {\n str = val.toFixed(precision);\n } else {\n str = String(val);\n }\n if (decimalSeparator) {\n str = str.replace('.', decimalSeparator);\n }\n if (formatter) {\n return formatter(stringMode ? str : val);\n }\n return str;\n}\n\nfunction parseInput(input: string): number | null {\n if (!input.trim()) return null;\n let parsed = input;\n if (parser) {\n parsed = parser(input);\n } else if (decimalSeparator) {\n parsed = parsed.replace(decimalSeparator, '.');\n }\n const num = Number(parsed);\n if (isNaN(num)) return model.value;\n return num;\n}\n\nfunction syncDisplay() {\n displayValue.value = formatValue(model.value);\n}\n\nfunction updateValue(newVal: number | null, triggerChange = true) {\n if (newVal !== null) {\n newVal = toFixedPrecision(clamp(newVal));\n }\n const changed = newVal !== model.value;\n model.value = newVal;\n syncDisplay();\n if (changed && triggerChange) {\n emit('change', newVal);\n }\n}\n\nfunction stepValue(direction: 'up' | 'down') {\n if (disabled || readOnly) return;\n const current = model.value ?? 0;\n const offset = direction === 'up' ? step : -step;\n const next = toFixedPrecision(current + offset);\n const clamped = clamp(next);\n updateValue(clamped);\n emit('step', clamped, { offset: step, type: direction });\n}\n\nconst handleInput = (e: Event) => {\n const target = e.target as HTMLInputElement;\n displayValue.value = target.value;\n};\n\nconst handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n commitValue();\n emit('pressEnter', e);\n }\n if (!keyboard) return;\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n stepValue('up');\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n stepValue('down');\n }\n};\n\nconst handleFocus = (e: FocusEvent) => {\n isFocused.value = true;\n emit('focus', e);\n};\n\nconst handleBlur = (e: FocusEvent) => {\n isFocused.value = false;\n if (changeOnBlur) {\n commitValue();\n }\n emit('blur', e);\n};\n\nconst handleWheel = (e: WheelEvent) => {\n if (!changeOnWheel || disabled || readOnly || !isFocused.value) return;\n e.preventDefault();\n if (e.deltaY < 0) {\n stepValue('up');\n } else if (e.deltaY > 0) {\n stepValue('down');\n }\n};\n\nfunction commitValue() {\n const parsed = parseInput(displayValue.value);\n if (parsed === null) {\n updateValue(null);\n } else {\n updateValue(parsed);\n }\n}\n\nconst focus = (options?: BInputNumberFocusOptions) => {\n inputRef.value?.focus({ preventScroll: options?.preventScroll });\n if (options?.cursor && inputRef.value) {\n const len = inputRef.value.value.length;\n switch (options.cursor) {\n case 'start':\n inputRef.value.setSelectionRange(0, 0);\n break;\n case 'end':\n inputRef.value.setSelectionRange(len, len);\n break;\n case 'all':\n inputRef.value.setSelectionRange(0, len);\n break;\n }\n }\n};\n\nconst blur = () => {\n inputRef.value?.blur();\n};\n\nwatch(\n () => model.value,\n () => {\n if (!isFocused.value) {\n syncDisplay();\n }\n },\n { immediate: true },\n);\n\ndefineExpose({ focus, blur });\n</script>\n\n<template>\n <span\n class=\"b-input-number\"\n :class=\"[\n `b-input-number--${size}`,\n `b-input-number--${variant}`,\n {\n 'b-input-number--focused': isFocused,\n 'b-input-number--disabled': disabled,\n 'b-input-number--readonly': readOnly,\n 'b-input-number--error': status === BInputStatus.Error,\n 'b-input-number--warning': status === BInputStatus.Warning,\n 'b-input-number--has-controls': controls,\n },\n ]\"\n >\n <span class=\"b-input-number__wrapper\">\n <span v-if=\"hasPrefix\" class=\"b-input-number__prefix\" aria-hidden=\"true\">\n <slot name=\"prefix\" />\n </span>\n\n <input\n :id=\"inputId\"\n ref=\"inputRef\"\n :value=\"displayValue\"\n type=\"text\"\n inputmode=\"decimal\"\n role=\"spinbutton\"\n :aria-valuenow=\"model ?? undefined\"\n :aria-valuemin=\"min !== Number.MIN_SAFE_INTEGER ? min : undefined\"\n :aria-valuemax=\"max !== Number.MAX_SAFE_INTEGER ? max : undefined\"\n :aria-invalid=\"status === BInputStatus.Error ? true : undefined\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :readonly=\"readOnly\"\n class=\"b-input-number__input\"\n @input=\"handleInput\"\n @keydown=\"handleKeyDown\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @wheel=\"handleWheel\"\n />\n\n <span v-if=\"hasSuffix\" class=\"b-input-number__suffix\" aria-hidden=\"true\">\n <slot name=\"suffix\" />\n </span>\n\n <span v-if=\"controls\" class=\"b-input-number__handler-wrap\" aria-hidden=\"true\">\n <span\n class=\"b-input-number__handler b-input-number__handler--up\"\n :class=\"{ 'b-input-number__handler--disabled': isUpDisabled }\"\n role=\"button\"\n tabindex=\"-1\"\n aria-label=\"Increase value\"\n :aria-disabled=\"isUpDisabled\"\n @mousedown.prevent=\"!isUpDisabled && stepValue('up')\"\n >\n <svg\n viewBox=\"0 0 1024 1024\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h286c2.1 0 4.2-.8 5.7-2.3l70.3-70.3 70.3 70.3c1.5 1.5 3.5 2.3 5.7 2.3h286c6.5 0 10.3-7.4 6.5-12.7z\"\n />\n </svg>\n </span>\n <span\n class=\"b-input-number__handler b-input-number__handler--down\"\n :class=\"{ 'b-input-number__handler--disabled': isDownDisabled }\"\n role=\"button\"\n tabindex=\"-1\"\n aria-label=\"Decrease value\"\n :aria-disabled=\"isDownDisabled\"\n @mousedown.prevent=\"!isDownDisabled && stepValue('down')\"\n >\n <svg\n viewBox=\"0 0 1024 1024\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z\"\n />\n </svg>\n </span>\n </span>\n </span>\n </span>\n</template>\n\n<style scoped>\n.b-input-number {\n --b-input-number-active-bg: #ffffff;\n --b-input-number-active-border-color: #1677ff;\n --b-input-number-active-shadow: 0 0 0 2px rgba(5, 145, 255, 0.1);\n --b-input-number-addon-bg: rgba(0, 0, 0, 0.02);\n --b-input-number-control-width: 90px;\n --b-input-number-error-active-shadow: 0 0 0 2px rgba(255, 38, 5, 0.06);\n --b-input-number-filled-handle-bg: #f0f0f0;\n --b-input-number-handle-active-bg: rgba(0, 0, 0, 0.02);\n --b-input-number-handle-bg: #ffffff;\n --b-input-number-handle-border-color: #d9d9d9;\n --b-input-number-handle-font-size: 7px;\n --b-input-number-handle-hover-color: #1677ff;\n --b-input-number-handle-width: 22px;\n --b-input-number-hover-bg: #ffffff;\n --b-input-number-hover-border-color: #4096ff;\n --b-input-number-font-size: 14px;\n --b-input-number-font-size-lg: 16px;\n --b-input-number-font-size-sm: 14px;\n --b-input-number-padding-block: 4px;\n --b-input-number-padding-block-lg: 7px;\n --b-input-number-padding-block-sm: 0px;\n --b-input-number-padding-inline: 11px;\n --b-input-number-padding-inline-lg: 11px;\n --b-input-number-padding-inline-sm: 7px;\n --b-input-number-warning-active-shadow: 0 0 0 2px rgba(255, 215, 5, 0.1);\n --b-input-number-border-color: #d9d9d9;\n --b-input-number-bg: #ffffff;\n --b-input-number-color: rgba(0, 0, 0, 0.88);\n --b-input-number-placeholder-color: rgba(0, 0, 0, 0.25);\n --b-input-number-border-radius: 6px;\n --b-input-number-disabled-bg: rgba(0, 0, 0, 0.04);\n --b-input-number-disabled-color: rgba(0, 0, 0, 0.25);\n --b-input-number-error-border-color: #ff4d4f;\n --b-input-number-error-hover-border-color: #ff7875;\n --b-input-number-warning-border-color: #faad14;\n --b-input-number-warning-hover-border-color: #ffc53d;\n --b-input-number-filled-bg: rgba(0, 0, 0, 0.04);\n --b-input-number-filled-hover-bg: rgba(0, 0, 0, 0.04);\n\n display: inline-flex;\n align-items: stretch;\n width: var(--b-input-number-control-width);\n font-size: var(--b-input-number-font-size);\n color: var(--b-input-number-color);\n line-height: 1.5714;\n}\n\n.b-input-number--lg {\n font-size: var(--b-input-number-font-size-lg);\n}\n\n.b-input-number--sm {\n font-size: var(--b-input-number-font-size-sm);\n}\n\n.b-input-number__wrapper {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n position: relative;\n transition: all 0.2s;\n}\n\n/* Outlined */\n.b-input-number--outlined .b-input-number__wrapper {\n background: var(--b-input-number-bg);\n border: 1px solid var(--b-input-number-border-color);\n border-radius: var(--b-input-number-border-radius);\n}\n\n.b-input-number--outlined:not(.b-input-number--disabled):hover .b-input-number__wrapper {\n border-color: var(--b-input-number-hover-border-color);\n background: var(--b-input-number-hover-bg);\n}\n\n.b-input-number--outlined.b-input-number--focused .b-input-number__wrapper {\n border-color: var(--b-input-number-active-border-color);\n background: var(--b-input-number-active-bg);\n box-shadow: var(--b-input-number-active-shadow);\n}\n\n/* Filled */\n.b-input-number--filled .b-input-number__wrapper {\n background: var(--b-input-number-filled-bg);\n border: 1px solid transparent;\n border-radius: var(--b-input-number-border-radius);\n}\n\n.b-input-number--filled:not(.b-input-number--disabled):hover .b-input-number__wrapper {\n background: var(--b-input-number-filled-hover-bg);\n}\n\n.b-input-number--filled.b-input-number--focused .b-input-number__wrapper {\n background: var(--b-input-number-active-bg);\n border-color: var(--b-input-number-active-border-color);\n box-shadow: var(--b-input-number-active-shadow);\n}\n\n/* Borderless */\n.b-input-number--borderless .b-input-number__wrapper {\n background: transparent;\n border: 1px solid transparent;\n border-radius: var(--b-input-number-border-radius);\n}\n\n/* Underlined */\n.b-input-number--underlined .b-input-number__wrapper {\n background: transparent;\n border: none;\n border-bottom: 1px solid var(--b-input-number-border-color);\n border-radius: 0;\n}\n\n.b-input-number--underlined:not(.b-input-number--disabled):hover .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-hover-border-color);\n}\n\n.b-input-number--underlined.b-input-number--focused .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-active-border-color);\n box-shadow: 0 1px 0 0 var(--b-input-number-active-border-color);\n}\n\n/* Error */\n.b-input-number--error.b-input-number--outlined .b-input-number__wrapper {\n border-color: var(--b-input-number-error-border-color);\n}\n\n.b-input-number--error.b-input-number--outlined:not(.b-input-number--disabled):hover\n .b-input-number__wrapper {\n border-color: var(--b-input-number-error-hover-border-color);\n}\n\n.b-input-number--error.b-input-number--outlined.b-input-number--focused .b-input-number__wrapper,\n.b-input-number--error.b-input-number--filled.b-input-number--focused .b-input-number__wrapper {\n border-color: var(--b-input-number-error-border-color);\n box-shadow: var(--b-input-number-error-active-shadow);\n}\n\n.b-input-number--error.b-input-number--underlined .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-error-border-color);\n}\n\n.b-input-number--error.b-input-number--underlined.b-input-number--focused .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-error-border-color);\n box-shadow: 0 1px 0 0 var(--b-input-number-error-border-color);\n}\n\n/* Warning */\n.b-input-number--warning.b-input-number--outlined .b-input-number__wrapper {\n border-color: var(--b-input-number-warning-border-color);\n}\n\n.b-input-number--warning.b-input-number--outlined:not(.b-input-number--disabled):hover\n .b-input-number__wrapper {\n border-color: var(--b-input-number-warning-hover-border-color);\n}\n\n.b-input-number--warning.b-input-number--outlined.b-input-number--focused .b-input-number__wrapper,\n.b-input-number--warning.b-input-number--filled.b-input-number--focused .b-input-number__wrapper {\n border-color: var(--b-input-number-warning-border-color);\n box-shadow: var(--b-input-number-warning-active-shadow);\n}\n\n.b-input-number--warning.b-input-number--underlined .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-warning-border-color);\n}\n\n.b-input-number--warning.b-input-number--underlined.b-input-number--focused\n .b-input-number__wrapper {\n border-bottom-color: var(--b-input-number-warning-border-color);\n box-shadow: 0 1px 0 0 var(--b-input-number-warning-border-color);\n}\n\n/* Disabled */\n.b-input-number--disabled .b-input-number__wrapper {\n background: var(--b-input-number-disabled-bg);\n cursor: not-allowed;\n}\n\n.b-input-number--disabled .b-input-number__input {\n color: var(--b-input-number-disabled-color);\n cursor: not-allowed;\n}\n\n/* Input element */\n.b-input-number__input {\n flex: 1;\n min-width: 0;\n width: 100%;\n border: none;\n outline: none;\n background: transparent;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n text-align: left;\n}\n\n.b-input-number--md .b-input-number__input {\n padding: var(--b-input-number-padding-block) var(--b-input-number-padding-inline);\n}\n\n.b-input-number--lg .b-input-number__input {\n padding: var(--b-input-number-padding-block-lg) var(--b-input-number-padding-inline-lg);\n}\n\n.b-input-number--sm .b-input-number__input {\n padding: var(--b-input-number-padding-block-sm) var(--b-input-number-padding-inline-sm);\n}\n\n.b-input-number--has-controls .b-input-number__input {\n padding-right: calc(var(--b-input-number-handle-width) + 2px);\n}\n\n.b-input-number__input::placeholder {\n color: var(--b-input-number-placeholder-color);\n}\n\n/* Prefix & Suffix */\n.b-input-number__prefix,\n.b-input-number__suffix {\n display: inline-flex;\n align-items: center;\n color: var(--b-input-number-color);\n flex-shrink: 0;\n}\n\n.b-input-number__prefix {\n margin-left: var(--b-input-number-padding-inline);\n}\n\n.b-input-number__suffix {\n margin-right: var(--b-input-number-padding-inline);\n}\n\n.b-input-number__prefix ~ .b-input-number__input {\n padding-left: 4px;\n}\n\n/* Handler (step buttons) */\n.b-input-number__handler-wrap {\n position: absolute;\n top: 0;\n right: 0;\n display: flex;\n flex-direction: column;\n height: 100%;\n width: var(--b-input-number-handle-width);\n border-left: 1px solid var(--b-input-number-handle-border-color);\n border-radius: 0 var(--b-input-number-border-radius) var(--b-input-number-border-radius) 0;\n overflow: hidden;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.b-input-number:hover .b-input-number__handler-wrap,\n.b-input-number--focused .b-input-number__handler-wrap {\n opacity: 1;\n}\n\n.b-input-number__handler {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n cursor: pointer;\n background: var(--b-input-number-handle-bg);\n font-size: var(--b-input-number-handle-font-size);\n color: rgba(0, 0, 0, 0.45);\n user-select: none;\n transition:\n color 0.2s,\n background 0.2s;\n}\n\n.b-input-number__handler:hover {\n color: var(--b-input-number-handle-hover-color);\n background: var(--b-input-number-handle-active-bg);\n}\n\n.b-input-number__handler--up {\n border-bottom: 1px solid var(--b-input-number-handle-border-color);\n}\n\n.b-input-number__handler--disabled {\n cursor: not-allowed;\n opacity: 0.4;\n pointer-events: none;\n}\n\n.b-input-number__handler svg {\n width: 0.5em;\n height: 0.5em;\n}\n\n/* Filled variant handler */\n.b-input-number--filled .b-input-number__handler {\n background: var(--b-input-number-filled-handle-bg);\n}\n\n/* Borderless / underlined: hide handler border */\n.b-input-number--borderless .b-input-number__handler-wrap,\n.b-input-number--underlined .b-input-number__handler-wrap {\n border-left-color: transparent;\n}\n\n/* Dark mode */\n[data-prefers-color='dark'] .b-input-number {\n --b-input-number-active-bg: #141414;\n --b-input-number-active-border-color: #1668dc;\n --b-input-number-active-shadow: 0 0 0 2px rgba(22, 104, 220, 0.15);\n --b-input-number-addon-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-error-active-shadow: 0 0 0 2px rgba(220, 56, 56, 0.1);\n --b-input-number-filled-handle-bg: rgba(255, 255, 255, 0.12);\n --b-input-number-handle-active-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-handle-bg: #1f1f1f;\n --b-input-number-handle-border-color: #424242;\n --b-input-number-handle-hover-color: #3c89e8;\n --b-input-number-hover-bg: #141414;\n --b-input-number-hover-border-color: #3c89e8;\n --b-input-number-warning-active-shadow: 0 0 0 2px rgba(209, 163, 0, 0.1);\n --b-input-number-border-color: #424242;\n --b-input-number-bg: #141414;\n --b-input-number-color: rgba(255, 255, 255, 0.88);\n --b-input-number-placeholder-color: rgba(255, 255, 255, 0.25);\n --b-input-number-disabled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-disabled-color: rgba(255, 255, 255, 0.25);\n --b-input-number-error-border-color: #dc3838;\n --b-input-number-error-hover-border-color: #e86e6e;\n --b-input-number-warning-border-color: #d1a300;\n --b-input-number-warning-hover-border-color: #e8c631;\n --b-input-number-filled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-filled-hover-bg: rgba(255, 255, 255, 0.12);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-input-number {\n --b-input-number-active-bg: #141414;\n --b-input-number-active-border-color: #1668dc;\n --b-input-number-active-shadow: 0 0 0 2px rgba(22, 104, 220, 0.15);\n --b-input-number-addon-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-error-active-shadow: 0 0 0 2px rgba(220, 56, 56, 0.1);\n --b-input-number-filled-handle-bg: rgba(255, 255, 255, 0.12);\n --b-input-number-handle-active-bg: rgba(255, 255, 255, 0.04);\n --b-input-number-handle-bg: #1f1f1f;\n --b-input-number-handle-border-color: #424242;\n --b-input-number-handle-hover-color: #3c89e8;\n --b-input-number-hover-bg: #141414;\n --b-input-number-hover-border-color: #3c89e8;\n --b-input-number-warning-active-shadow: 0 0 0 2px rgba(209, 163, 0, 0.1);\n --b-input-number-border-color: #424242;\n --b-input-number-bg: #141414;\n --b-input-number-color: rgba(255, 255, 255, 0.88);\n --b-input-number-placeholder-color: rgba(255, 255, 255, 0.25);\n --b-input-number-disabled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-disabled-color: rgba(255, 255, 255, 0.25);\n --b-input-number-error-border-color: #dc3838;\n --b-input-number-error-hover-border-color: #e86e6e;\n --b-input-number-warning-border-color: #d1a300;\n --b-input-number-warning-hover-border-color: #e8c631;\n --b-input-number-filled-bg: rgba(255, 255, 255, 0.08);\n --b-input-number-filled-hover-bg: rgba(255, 255, 255, 0.12);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .b-input-number__wrapper,\n .b-input-number__handler-wrap,\n .b-input-number__handler {\n transition: none;\n }\n}\n</style>\n"],"mappings":""}