@7pmlabs/design-system 2.0.9 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/README.md +4 -4
  2. package/dist/design-system.css +1 -1
  3. package/dist/design-system.js +65 -59
  4. package/dist/design-system100.js +1 -1
  5. package/dist/design-system100.js.map +1 -1
  6. package/dist/design-system101.js +87 -53
  7. package/dist/design-system101.js.map +1 -1
  8. package/dist/design-system103.js +5 -13
  9. package/dist/design-system103.js.map +1 -1
  10. package/dist/design-system104.js +53 -108
  11. package/dist/design-system104.js.map +1 -1
  12. package/dist/{design-system102.js → design-system105.js} +1 -1
  13. package/dist/{design-system102.js.map → design-system105.js.map} +1 -1
  14. package/dist/design-system106.js +13 -6
  15. package/dist/design-system106.js.map +1 -1
  16. package/dist/design-system107.js +93 -190
  17. package/dist/design-system107.js.map +1 -1
  18. package/dist/design-system109.js +2 -2
  19. package/dist/design-system109.js.map +1 -1
  20. package/dist/design-system110.js +183 -484
  21. package/dist/design-system110.js.map +1 -1
  22. package/dist/design-system112.js +5 -4
  23. package/dist/design-system112.js.map +1 -1
  24. package/dist/design-system113.js +507 -7
  25. package/dist/design-system113.js.map +1 -1
  26. package/dist/design-system115.js +8 -0
  27. package/dist/design-system115.js.map +1 -0
  28. package/dist/design-system116.js +7 -6
  29. package/dist/design-system116.js.map +1 -1
  30. package/dist/design-system117.js +154 -169
  31. package/dist/design-system117.js.map +1 -1
  32. package/dist/design-system119.js +2 -2
  33. package/dist/design-system119.js.map +1 -1
  34. package/dist/design-system120.js +210 -149
  35. package/dist/design-system120.js.map +1 -1
  36. package/dist/design-system122.js +5 -4
  37. package/dist/design-system122.js.map +1 -1
  38. package/dist/design-system123.js +160 -9
  39. package/dist/design-system123.js.map +1 -1
  40. package/dist/design-system125.js +8 -0
  41. package/dist/design-system125.js.map +1 -0
  42. package/dist/design-system126.js +176 -6
  43. package/dist/design-system126.js.map +1 -1
  44. package/dist/design-system128.js +8 -0
  45. package/dist/design-system128.js.map +1 -0
  46. package/dist/design-system129.js +213 -5
  47. package/dist/design-system129.js.map +1 -1
  48. package/dist/design-system131.js +5 -90
  49. package/dist/design-system131.js.map +1 -1
  50. package/dist/design-system132.js +166 -0
  51. package/dist/design-system132.js.map +1 -0
  52. package/dist/design-system134.js +5 -42
  53. package/dist/design-system134.js.map +1 -1
  54. package/dist/design-system135.js +12 -0
  55. package/dist/design-system135.js.map +1 -0
  56. package/dist/design-system136.js +274 -5
  57. package/dist/design-system136.js.map +1 -1
  58. package/dist/design-system138.js +9 -0
  59. package/dist/{design-system124.js.map → design-system138.js.map} +1 -1
  60. package/dist/design-system139.js +16 -5
  61. package/dist/design-system139.js.map +1 -1
  62. package/dist/design-system141.js +8 -0
  63. package/dist/{design-system127.js.map → design-system141.js.map} +1 -1
  64. package/dist/design-system142.js +12 -5
  65. package/dist/design-system142.js.map +1 -1
  66. package/dist/design-system143.js +78 -83
  67. package/dist/design-system143.js.map +1 -1
  68. package/dist/design-system145.js +1 -1
  69. package/dist/design-system145.js.map +1 -1
  70. package/dist/design-system146.js +42 -9
  71. package/dist/design-system146.js.map +1 -1
  72. package/dist/design-system148.js +3 -2
  73. package/dist/design-system148.js.map +1 -1
  74. package/dist/design-system149.js +230 -18
  75. package/dist/design-system149.js.map +1 -1
  76. package/dist/design-system151.js +5 -158
  77. package/dist/design-system151.js.map +1 -1
  78. package/dist/{design-system140.js → design-system152.js} +6 -6
  79. package/dist/{design-system140.js.map → design-system152.js.map} +1 -1
  80. package/dist/design-system154.js +5 -307
  81. package/dist/design-system154.js.map +1 -1
  82. package/dist/design-system155.js +98 -0
  83. package/dist/design-system155.js.map +1 -0
  84. package/dist/design-system157.js +5 -240
  85. package/dist/design-system157.js.map +1 -1
  86. package/dist/design-system158.js +12 -0
  87. package/dist/design-system158.js.map +1 -0
  88. package/dist/design-system159.js +37 -5
  89. package/dist/design-system159.js.map +1 -1
  90. package/dist/design-system160.js +4 -189
  91. package/dist/design-system160.js.map +1 -1
  92. package/dist/design-system161.js +24 -0
  93. package/dist/{design-system150.js.map → design-system161.js.map} +1 -1
  94. package/dist/design-system162.js +2 -3
  95. package/dist/design-system162.js.map +1 -1
  96. package/dist/design-system163.js +158 -3
  97. package/dist/design-system163.js.map +1 -1
  98. package/dist/{design-system153.js → design-system165.js} +2 -2
  99. package/dist/{design-system153.js.map → design-system165.js.map} +1 -1
  100. package/dist/design-system166.js +307 -6
  101. package/dist/design-system166.js.map +1 -1
  102. package/dist/{design-system156.js → design-system168.js} +2 -2
  103. package/dist/{design-system156.js.map → design-system168.js.map} +1 -1
  104. package/dist/design-system169.js +167 -6
  105. package/dist/design-system169.js.map +1 -1
  106. package/dist/design-system171.js +8 -0
  107. package/dist/design-system171.js.map +1 -0
  108. package/dist/design-system172.js +240 -6
  109. package/dist/design-system172.js.map +1 -1
  110. package/dist/design-system174.js +8 -0
  111. package/dist/design-system174.js.map +1 -0
  112. package/dist/design-system175.js +189 -6
  113. package/dist/design-system175.js.map +1 -1
  114. package/dist/design-system177.js +8 -0
  115. package/dist/design-system177.js.map +1 -0
  116. package/dist/design-system178.js +3 -5
  117. package/dist/design-system178.js.map +1 -1
  118. package/dist/design-system179.js +58 -11
  119. package/dist/design-system179.js.map +1 -1
  120. package/dist/design-system181.js +9 -0
  121. package/dist/design-system181.js.map +1 -0
  122. package/dist/design-system182.js +56 -6
  123. package/dist/design-system182.js.map +1 -1
  124. package/dist/design-system184.js +9 -0
  125. package/dist/{design-system167.js.map → design-system184.js.map} +1 -1
  126. package/dist/design-system185.js +69 -5
  127. package/dist/design-system185.js.map +1 -1
  128. package/dist/design-system187.js +9 -0
  129. package/dist/{design-system170.js.map → design-system187.js.map} +1 -1
  130. package/dist/design-system188.js +182 -5
  131. package/dist/design-system188.js.map +1 -1
  132. package/dist/design-system190.js +9 -0
  133. package/dist/design-system190.js.map +1 -0
  134. package/dist/design-system191.js +115 -5
  135. package/dist/design-system191.js.map +1 -1
  136. package/dist/design-system193.js +8 -0
  137. package/dist/{design-system176.js.map → design-system193.js.map} +1 -1
  138. package/dist/design-system194.js +11 -5
  139. package/dist/design-system194.js.map +1 -1
  140. package/dist/design-system195.js +453 -24
  141. package/dist/design-system195.js.map +1 -1
  142. package/dist/design-system197.js +5 -4
  143. package/dist/design-system197.js.map +1 -1
  144. package/dist/design-system198.js +20 -16
  145. package/dist/design-system198.js.map +1 -1
  146. package/dist/design-system200.js +1 -1
  147. package/dist/design-system200.js.map +1 -1
  148. package/dist/design-system201.js +70 -314
  149. package/dist/design-system201.js.map +1 -1
  150. package/dist/design-system203.js +1 -1
  151. package/dist/design-system203.js.map +1 -1
  152. package/dist/design-system204.js +24 -89
  153. package/dist/design-system204.js.map +1 -1
  154. package/dist/design-system206.js +1 -1
  155. package/dist/design-system206.js.map +1 -1
  156. package/dist/design-system207.js +26 -17
  157. package/dist/design-system207.js.map +1 -1
  158. package/dist/design-system209.js +5 -3
  159. package/dist/design-system209.js.map +1 -1
  160. package/dist/design-system210.js +22 -408
  161. package/dist/design-system210.js.map +1 -1
  162. package/dist/design-system212.js +1 -1
  163. package/dist/design-system212.js.map +1 -1
  164. package/dist/design-system213.js +24 -52
  165. package/dist/design-system213.js.map +1 -1
  166. package/dist/design-system215.js +1 -1
  167. package/dist/design-system215.js.map +1 -1
  168. package/dist/design-system216.js +329 -85
  169. package/dist/design-system216.js.map +1 -1
  170. package/dist/design-system218.js +5 -108
  171. package/dist/design-system218.js.map +1 -1
  172. package/dist/design-system219.js +103 -0
  173. package/dist/design-system219.js.map +1 -0
  174. package/dist/design-system221.js +5 -106
  175. package/dist/design-system221.js.map +1 -1
  176. package/dist/design-system222.js +22 -0
  177. package/dist/{design-system208.js.map → design-system222.js.map} +1 -1
  178. package/dist/design-system223.js +4 -6
  179. package/dist/design-system223.js.map +1 -1
  180. package/dist/design-system224.js +3 -737
  181. package/dist/design-system224.js.map +1 -1
  182. package/dist/design-system225.js +422 -0
  183. package/dist/design-system225.js.map +1 -0
  184. package/dist/design-system227.js +5 -11
  185. package/dist/design-system227.js.map +1 -1
  186. package/dist/design-system228.js +51 -517
  187. package/dist/design-system228.js.map +1 -1
  188. package/dist/design-system230.js +1 -1
  189. package/dist/design-system230.js.map +1 -1
  190. package/dist/design-system231.js +88 -3
  191. package/dist/design-system231.js.map +1 -1
  192. package/dist/design-system232.js +4 -46
  193. package/dist/design-system232.js.map +1 -1
  194. package/dist/design-system233.js +108 -4
  195. package/dist/design-system233.js.map +1 -1
  196. package/dist/{design-system220.js → design-system235.js} +2 -2
  197. package/dist/{design-system220.js.map → design-system235.js.map} +1 -1
  198. package/dist/design-system236.js +106 -5
  199. package/dist/design-system236.js.map +1 -1
  200. package/dist/design-system238.js +9 -0
  201. package/dist/design-system238.js.map +1 -0
  202. package/dist/design-system239.js +737 -5
  203. package/dist/design-system239.js.map +1 -1
  204. package/dist/{design-system226.js → design-system241.js} +2 -2
  205. package/dist/{design-system226.js.map → design-system241.js.map} +1 -1
  206. package/dist/design-system242.js +3 -5
  207. package/dist/design-system242.js.map +1 -1
  208. package/dist/design-system243.js +42 -50
  209. package/dist/design-system243.js.map +1 -1
  210. package/dist/design-system244.js +1 -1
  211. package/dist/design-system244.js.map +1 -1
  212. package/dist/design-system245.js +254 -141
  213. package/dist/design-system245.js.map +1 -1
  214. package/dist/design-system247.js +1 -1
  215. package/dist/design-system247.js.map +1 -1
  216. package/dist/design-system248.js +119 -7
  217. package/dist/design-system248.js.map +1 -1
  218. package/dist/design-system250.js +8 -0
  219. package/dist/design-system250.js.map +1 -0
  220. package/dist/design-system251.js +172 -5
  221. package/dist/design-system251.js.map +1 -1
  222. package/dist/design-system253.js +8 -0
  223. package/dist/design-system253.js.map +1 -0
  224. package/dist/design-system254.js +11 -6
  225. package/dist/design-system254.js.map +1 -1
  226. package/dist/design-system255.js +525 -9
  227. package/dist/design-system255.js.map +1 -1
  228. package/dist/design-system257.js +8 -0
  229. package/dist/design-system257.js.map +1 -0
  230. package/dist/design-system258.js +112 -6
  231. package/dist/design-system258.js.map +1 -1
  232. package/dist/design-system260.js +5 -374
  233. package/dist/design-system260.js.map +1 -1
  234. package/dist/design-system261.js +57 -0
  235. package/dist/design-system261.js.map +1 -0
  236. package/dist/design-system262.js +4 -6
  237. package/dist/design-system262.js.map +1 -1
  238. package/dist/design-system263.js +173 -0
  239. package/dist/design-system263.js.map +1 -0
  240. package/dist/design-system265.js +8 -0
  241. package/dist/design-system265.js.map +1 -0
  242. package/dist/design-system266.js +10 -0
  243. package/dist/design-system266.js.map +1 -0
  244. package/dist/{design-system249.js → design-system267.js} +2 -2
  245. package/dist/{design-system249.js.map → design-system267.js.map} +1 -1
  246. package/dist/design-system269.js +8 -0
  247. package/dist/design-system269.js.map +1 -0
  248. package/dist/{design-system252.js → design-system270.js} +1 -1
  249. package/dist/{design-system252.js.map → design-system270.js.map} +1 -1
  250. package/dist/design-system272.js +9 -0
  251. package/dist/design-system272.js.map +1 -0
  252. package/dist/design-system273.js +12 -0
  253. package/dist/design-system273.js.map +1 -0
  254. package/dist/{design-system256.js → design-system274.js} +2 -2
  255. package/dist/{design-system256.js.map → design-system274.js.map} +1 -1
  256. package/dist/design-system276.js +9 -0
  257. package/dist/design-system276.js.map +1 -0
  258. package/dist/{design-system259.js → design-system277.js} +1 -1
  259. package/dist/{design-system259.js.map → design-system277.js.map} +1 -1
  260. package/dist/design-system278.js +377 -0
  261. package/dist/design-system278.js.map +1 -0
  262. package/dist/design-system280.js +9 -0
  263. package/dist/design-system280.js.map +1 -0
  264. package/dist/design-system69.js +182 -13
  265. package/dist/design-system69.js.map +1 -1
  266. package/dist/design-system71.js +8 -0
  267. package/dist/design-system71.js.map +1 -0
  268. package/dist/design-system72.js +13 -5
  269. package/dist/design-system72.js.map +1 -1
  270. package/dist/design-system73.js +677 -139
  271. package/dist/design-system73.js.map +1 -1
  272. package/dist/design-system75.js +1 -1
  273. package/dist/design-system75.js.map +1 -1
  274. package/dist/design-system76.js +152 -23
  275. package/dist/design-system76.js.map +1 -1
  276. package/dist/design-system78.js +5 -49
  277. package/dist/design-system78.js.map +1 -1
  278. package/dist/design-system79.js +32 -0
  279. package/dist/design-system79.js.map +1 -0
  280. package/dist/design-system80.js +2 -3
  281. package/dist/design-system80.js.map +1 -1
  282. package/dist/design-system81.js +38 -188
  283. package/dist/design-system81.js.map +1 -1
  284. package/dist/design-system83.js +1 -1
  285. package/dist/design-system83.js.map +1 -1
  286. package/dist/design-system84.js +199 -7
  287. package/dist/design-system84.js.map +1 -1
  288. package/dist/design-system86.js +8 -0
  289. package/dist/design-system86.js.map +1 -0
  290. package/dist/design-system87.js +7 -5
  291. package/dist/design-system87.js.map +1 -1
  292. package/dist/design-system88.js +264 -48
  293. package/dist/design-system88.js.map +1 -1
  294. package/dist/design-system90.js +1 -1
  295. package/dist/design-system90.js.map +1 -1
  296. package/dist/design-system91.js +57 -11
  297. package/dist/design-system91.js.map +1 -1
  298. package/dist/design-system93.js +8 -0
  299. package/dist/design-system93.js.map +1 -0
  300. package/dist/design-system94.js +11 -5
  301. package/dist/design-system94.js.map +1 -1
  302. package/dist/design-system95.js +92 -59
  303. package/dist/design-system95.js.map +1 -1
  304. package/dist/design-system97.js +1 -1
  305. package/dist/design-system97.js.map +1 -1
  306. package/dist/design-system98.js +56 -78
  307. package/dist/design-system98.js.map +1 -1
  308. package/dist/types/components/BContextMenu/BContextMenu.spec.d.ts +1 -0
  309. package/dist/types/components/BContextMenu/BContextMenu.vue.d.ts +42 -0
  310. package/dist/types/components/BContextMenu/index.d.ts +2 -0
  311. package/dist/types/components/BContextMenu/types.d.ts +23 -0
  312. package/dist/types/components/BInputTags/BInputTags.spec.d.ts +1 -0
  313. package/dist/types/components/BInputTags/BInputTags.vue.d.ts +54 -0
  314. package/dist/types/components/BInputTags/index.d.ts +1 -0
  315. package/dist/types/components/BLink/BLink.spec.d.ts +1 -0
  316. package/dist/types/components/BLink/BLink.vue.d.ts +100 -0
  317. package/dist/types/components/BLink/index.d.ts +1 -0
  318. package/dist/types/components/BListbox/BListbox.spec.d.ts +1 -0
  319. package/dist/types/components/BListbox/BListbox.vue.d.ts +52 -0
  320. package/dist/types/components/BListbox/index.d.ts +1 -0
  321. package/dist/types/components/BModal/BModal.spec.d.ts +1 -0
  322. package/dist/types/components/BPinInput/BPinInput.spec.d.ts +1 -0
  323. package/dist/types/components/BPinInput/BPinInput.vue.d.ts +43 -0
  324. package/dist/types/components/BPinInput/index.d.ts +1 -0
  325. package/dist/types/components/BProgress/BProgress.vue.d.ts +47 -2
  326. package/dist/types/components/BTextarea/BTextarea.spec.d.ts +1 -0
  327. package/dist/types/components/BTextarea/BTextarea.vue.d.ts +77 -0
  328. package/dist/types/components/BTextarea/index.d.ts +1 -0
  329. package/dist/types/components/index.d.ts +7 -1
  330. package/package.json +1 -1
  331. package/dist/design-system114.js +0 -212
  332. package/dist/design-system114.js.map +0 -1
  333. package/dist/design-system124.js +0 -277
  334. package/dist/design-system127.js +0 -19
  335. package/dist/design-system130.js +0 -15
  336. package/dist/design-system130.js.map +0 -1
  337. package/dist/design-system133.js +0 -8
  338. package/dist/design-system133.js.map +0 -1
  339. package/dist/design-system137.js +0 -236
  340. package/dist/design-system137.js.map +0 -1
  341. package/dist/design-system147.js +0 -40
  342. package/dist/design-system147.js.map +0 -1
  343. package/dist/design-system150.js +0 -7
  344. package/dist/design-system164.js +0 -61
  345. package/dist/design-system164.js.map +0 -1
  346. package/dist/design-system167.js +0 -59
  347. package/dist/design-system170.js +0 -72
  348. package/dist/design-system173.js +0 -185
  349. package/dist/design-system173.js.map +0 -1
  350. package/dist/design-system176.js +0 -118
  351. package/dist/design-system180.js +0 -465
  352. package/dist/design-system180.js.map +0 -1
  353. package/dist/design-system183.js +0 -38
  354. package/dist/design-system183.js.map +0 -1
  355. package/dist/design-system186.js +0 -91
  356. package/dist/design-system186.js.map +0 -1
  357. package/dist/design-system189.js +0 -38
  358. package/dist/design-system189.js.map +0 -1
  359. package/dist/design-system192.js +0 -31
  360. package/dist/design-system192.js.map +0 -1
  361. package/dist/design-system208.js +0 -7
  362. package/dist/design-system217.js +0 -7
  363. package/dist/design-system217.js.map +0 -1
  364. package/dist/design-system234.js +0 -286
  365. package/dist/design-system234.js.map +0 -1
  366. package/dist/design-system237.js +0 -122
  367. package/dist/design-system237.js.map +0 -1
  368. package/dist/design-system240.js +0 -115
  369. package/dist/design-system240.js.map +0 -1
  370. package/dist/design-system70.js +0 -699
  371. package/dist/design-system70.js.map +0 -1
  372. package/dist/design-system77.js +0 -7
  373. package/dist/design-system77.js.map +0 -1
  374. package/dist/design-system85.js +0 -276
  375. package/dist/design-system85.js.map +0 -1
  376. package/dist/design-system92.js +0 -102
  377. package/dist/design-system92.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"design-system107.js","names":["$slots"],"sources":["../src/components/BForm/BFormItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useComponentId } from '@/composables/useComponentId.ts';\nimport { useValidationField } from '@/composables/useValidation.ts';\nimport { computed, inject, ref, watch } from 'vue';\nimport type { ZodType } from 'zod';\nimport { BFormContextKey } from './context.ts';\nimport {\n BFormLayout,\n BFormRequiredMark,\n BFormValidateStatus,\n BFormValidateTrigger,\n} from './types.ts';\n\nconst {\n label,\n name,\n schema,\n required = false,\n validateStatus,\n help,\n extra,\n colon = null,\n labelAlign,\n labelWidth,\n hidden = false,\n noStyle = false,\n hasFeedback = false,\n tooltip,\n layout,\n validateTrigger,\n} = defineProps<{\n /** Label text for the form item. */\n label?: string;\n /** Field name (used for validation and form data collection). */\n name?: string;\n /** Zod schema for field validation. */\n schema?: ZodType;\n /** Whether to display a required mark (visual only, does not add validation). */\n required?: boolean;\n /** Manual validation status override. */\n validateStatus?: `${BFormValidateStatus}`;\n /** Custom help/error message (overrides auto-generated). */\n help?: string;\n /** Extra hint text below the control. */\n extra?: string;\n /** Override parent form colon setting. Pass true/false to override, omit to inherit. */\n colon?: boolean | null;\n /** Override parent form label alignment. */\n labelAlign?: 'left' | 'right';\n /** Override parent form label width. */\n labelWidth?: string;\n /** Hide the form item visually but still validate. */\n hidden?: boolean;\n /** Render control only, no wrapper/label/margin. */\n noStyle?: boolean;\n /** Show validation feedback icon. */\n hasFeedback?: boolean;\n /** Override validation trigger. */\n validateTrigger?: `${BFormValidateTrigger}` | `${BFormValidateTrigger}`[];\n /** Tooltip text for the label. */\n tooltip?: string;\n /** Per-item layout override. */\n layout?: 'horizontal' | 'vertical';\n}>();\n\nconst formContext = inject(BFormContextKey, undefined);\n\nconst { componentUID } = useComponentId();\nconst fieldId = computed(() => `b-form-item-${name ? name + '-' : ''}${componentUID.value}`);\n\nconst fieldValueRef = computed(() => {\n if (name && formContext?.model) {\n return formContext.model[name];\n }\n return undefined;\n});\n\nconst fieldValueAsRef = ref(fieldValueRef.value);\nwatch(fieldValueRef, (val) => {\n fieldValueAsRef.value = val;\n});\n\nconst hasValidation = !!(name && schema);\n\nconst validation = hasValidation\n ? useValidationField(name!, fieldValueAsRef, schema!)\n : undefined;\n\nconst resolvedTrigger = computed(() => {\n if (validateTrigger) return Array.isArray(validateTrigger) ? validateTrigger : [validateTrigger];\n const parentTrigger = formContext?.validateTrigger ?? BFormValidateTrigger.Change;\n return Array.isArray(parentTrigger) ? parentTrigger : [parentTrigger];\n});\n\nconst handleBlur = () => {\n if (validation && resolvedTrigger.value.includes(BFormValidateTrigger.Blur)) {\n validation.markTouched();\n validation.validate();\n }\n};\n\nconst handleChange = () => {\n if (validation && resolvedTrigger.value.includes(BFormValidateTrigger.Change)) {\n validation.validate();\n }\n};\n\nwatch(fieldValueRef, () => {\n handleChange();\n});\n\nconst computedStatus = computed<`${BFormValidateStatus}` | undefined>(() => {\n if (validateStatus) return validateStatus;\n if (!validation) return undefined;\n if (validation.errors.value.length > 0) return BFormValidateStatus.Error;\n if (validation.touched.value && validation.isValid.value) return BFormValidateStatus.Success;\n return undefined;\n});\n\nconst resolvedLayout = computed(() => {\n if (layout !== undefined) return layout;\n if (formContext?.layout !== undefined) return formContext.layout;\n return BFormLayout.Horizontal;\n});\nconst resolvedLabelAlign = computed(() => {\n if (labelAlign !== undefined) return labelAlign;\n if (formContext?.labelAlign !== undefined) return formContext.labelAlign;\n return 'right';\n});\nconst resolvedColon = computed(() => {\n if (colon !== null) return colon;\n if (formContext?.colon !== undefined) return formContext.colon;\n return true;\n});\nconst resolvedLabelWidth = computed(() => labelWidth ?? formContext?.labelWidth);\nconst isDisabled = computed(() => formContext?.disabled ?? false);\n\nconst isRequired = computed(() => {\n if (required) return true;\n if (schema) {\n const result = schema.safeParse(undefined);\n if (!result.success) return true;\n const emptyResult = schema.safeParse('');\n if (!emptyResult.success) return true;\n }\n return false;\n});\n\nconst showColon = computed(() => resolvedColon.value && resolvedLayout.value === 'horizontal');\n\nconst showRequiredMark = computed(() => {\n const mark = formContext?.requiredMark ?? true;\n if (mark === false) return false;\n if (mark === BFormRequiredMark.Optional) return false;\n return isRequired.value;\n});\n\nconst showOptionalMark = computed(() => {\n const mark = formContext?.requiredMark ?? true;\n return mark === BFormRequiredMark.Optional && !isRequired.value;\n});\n\nconst helpMessage = computed(() => {\n if (help !== undefined) return help;\n if (validation && validation.errors.value.length > 0) return validation.errors.value[0];\n return undefined;\n});\n\nconst itemClasses = computed(() => [\n 'b-form-item',\n `b-form-item--${resolvedLayout.value}`,\n {\n 'b-form-item--has-error': computedStatus.value === BFormValidateStatus.Error,\n 'b-form-item--has-warning': computedStatus.value === BFormValidateStatus.Warning,\n 'b-form-item--has-success': computedStatus.value === BFormValidateStatus.Success,\n 'b-form-item--validating': computedStatus.value === BFormValidateStatus.Validating,\n 'b-form-item--has-feedback': hasFeedback,\n 'b-form-item--hidden': hidden,\n 'b-form-item--no-style': noStyle,\n 'b-form-item--required': showRequiredMark.value,\n },\n]);\n\nconst labelStyle = computed(() => {\n const styles: Record<string, string> = {};\n if (resolvedLabelWidth.value) {\n styles.width = resolvedLabelWidth.value;\n styles.flexShrink = '0';\n }\n return styles;\n});\n\ndefineExpose({\n validate: validation?.validate ?? (() => true),\n reset: validation?.reset ?? (() => {}),\n errors: validation?.errors ?? computed(() => []),\n isValid: validation?.isValid ?? computed(() => true),\n dirty: validation?.dirty ?? computed(() => false),\n touched: validation?.touched ?? computed(() => false),\n handleBlur,\n});\n</script>\n\n<template>\n <div\n v-if=\"!noStyle\"\n :class=\"itemClasses\"\n :data-form-field=\"name\"\n role=\"group\"\n :aria-labelledby=\"label ? `${fieldId}-label` : undefined\"\n >\n <div\n v-if=\"label || $slots.label\"\n class=\"b-form-item__label\"\n :class=\"[`b-form-item__label--${resolvedLabelAlign}`]\"\n :style=\"labelStyle\"\n >\n <label :id=\"`${fieldId}-label`\" :for=\"fieldId\">\n <span v-if=\"showRequiredMark\" class=\"b-form-item__required-mark\" aria-hidden=\"true\">*</span>\n <slot name=\"label\">{{ label }}</slot>\n <span v-if=\"showOptionalMark\" class=\"b-form-item__optional-mark\">(optional)</span>\n <span\n v-if=\"showColon\"\n class=\"b-form-item__colon\"\n aria-hidden=\"true\"\n >:</span>\n </label>\n <span v-if=\"tooltip\" class=\"b-form-item__tooltip\" :title=\"tooltip\" role=\"img\" aria-label=\"Help\">\n <svg viewBox=\"64 64 896 896\" width=\"14\" height=\"14\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\"\n />\n <path\n d=\"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.4-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7c0-19.7 12.4-37.7 30.9-44.8 59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3z\"\n />\n <path d=\"M512 732a40 40 0 100-80 40 40 0 000 80z\" />\n </svg>\n </span>\n </div>\n\n <div class=\"b-form-item__control\">\n <div class=\"b-form-item__control-input\">\n <slot :id=\"fieldId\" :status=\"computedStatus\" :disabled=\"isDisabled\" :on-blur=\"handleBlur\" />\n <span v-if=\"hasFeedback && computedStatus\" class=\"b-form-item__feedback-icon\">\n <svg\n v-if=\"computedStatus === 'success'\"\n viewBox=\"64 64 896 896\"\n width=\"14\"\n height=\"14\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z\"\n />\n </svg>\n <svg\n v-else-if=\"computedStatus === 'error'\"\n viewBox=\"64 64 896 896\"\n width=\"14\"\n height=\"14\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L512 449.8 295.9 191.7c-3-3.6-7.5-5.7-12.3-5.7H204c-6.8 0-10.5 7.9-6.1 13.1L460.2 512 197.8 824.9A7.95 7.95 0 00204 838h79.8c4.7 0 9.2-2.1 12.3-5.7L512 574.1l216.2 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z\"\n />\n </svg>\n <svg\n v-else-if=\"computedStatus === 'warning'\"\n viewBox=\"64 64 896 896\"\n width=\"14\"\n height=\"14\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M464 720a48 48 0 1096 0 48 48 0 10-96 0zm16-304v184c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V416c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8z\"\n />\n <path\n d=\"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48z\"\n />\n </svg>\n <span v-else-if=\"computedStatus === 'validating'\" class=\"b-form-item__loading-icon\">\n <svg viewBox=\"0 0 1024 1024\" width=\"14\" height=\"14\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.3 199.3 0 19.9-16.1 36-36 36z\"\n />\n </svg>\n </span>\n </span>\n </div>\n\n <div\n v-if=\"helpMessage || $slots.help\"\n class=\"b-form-item__help\"\n :class=\"{\n 'b-form-item__help--error': computedStatus === 'error',\n 'b-form-item__help--warning': computedStatus === 'warning',\n }\"\n :id=\"`${fieldId}-help`\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n <slot name=\"help\">{{ helpMessage }}</slot>\n </div>\n\n <div v-if=\"extra || $slots.extra\" class=\"b-form-item__extra\">\n <slot name=\"extra\">{{ extra }}</slot>\n </div>\n </div>\n </div>\n\n <template v-else>\n <slot :id=\"fieldId\" :status=\"computedStatus\" :disabled=\"isDisabled\" :on-blur=\"handleBlur\" />\n </template>\n</template>\n\n<style scoped>\n.b-form-item {\n margin-bottom: var(--b-form-item-margin-bottom, 24px);\n}\n\n.b-form-item--horizontal {\n display: flex;\n align-items: flex-start;\n}\n\n.b-form-item--vertical {\n display: flex;\n flex-direction: column;\n}\n\n.b-form-item--hidden {\n display: none;\n}\n\n:deep(.b-form--inline) .b-form-item {\n margin-bottom: var(--b-form-inline-item-margin-bottom, 0);\n}\n\n/* Label */\n.b-form-item__label {\n display: inline-flex;\n align-items: center;\n height: var(--b-form-label-height, 32px);\n color: var(--b-form-label-color, rgba(0, 0, 0, 0.88));\n font-size: var(--b-form-label-font-size, 14px);\n line-height: 1.5714;\n white-space: nowrap;\n}\n\n.b-form-item--horizontal .b-form-item__label {\n margin-right: 8px;\n flex-shrink: 0;\n}\n\n.b-form-item--vertical .b-form-item__label {\n margin: var(--b-form-vertical-label-margin, 0);\n padding: var(--b-form-vertical-label-padding, 0 0 8px);\n height: auto;\n}\n\n.b-form-item__label--left {\n text-align: left;\n justify-content: flex-start;\n}\n\n.b-form-item__label--right {\n text-align: right;\n justify-content: flex-end;\n}\n\n.b-form-item__label label {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n cursor: default;\n}\n\n.b-form-item__required-mark {\n color: var(--b-form-label-required-mark-color, #ff4d4f);\n margin-right: 4px;\n font-family: SimSun, sans-serif;\n line-height: 1;\n}\n\n.b-form-item__optional-mark {\n color: var(--b-form-help-color, rgba(0, 0, 0, 0.65));\n margin-left: 4px;\n font-size: 12px;\n font-style: italic;\n}\n\n.b-form-item__colon {\n margin-inline-start: var(--b-form-label-colon-margin-inline-start, 2px);\n margin-inline-end: var(--b-form-label-colon-margin-inline-end, 8px);\n}\n\n.b-form-item__tooltip {\n display: inline-flex;\n align-items: center;\n margin-left: 4px;\n color: var(--b-form-help-color, rgba(0, 0, 0, 0.65));\n cursor: help;\n}\n\n/* Control */\n.b-form-item__control {\n flex: 1;\n min-width: 0;\n}\n\n.b-form-item__control-input {\n display: flex;\n align-items: center;\n position: relative;\n}\n\n/* Feedback icon */\n.b-form-item__feedback-icon {\n display: inline-flex;\n align-items: center;\n margin-left: 8px;\n flex-shrink: 0;\n}\n\n.b-form-item--has-success .b-form-item__feedback-icon {\n color: var(--b-form-success-color, #52c41a);\n}\n\n.b-form-item--has-error .b-form-item__feedback-icon {\n color: var(--b-form-error-color, #ff4d4f);\n}\n\n.b-form-item--has-warning .b-form-item__feedback-icon {\n color: var(--b-form-warning-color, #faad14);\n}\n\n.b-form-item__loading-icon {\n display: inline-flex;\n animation: b-form-spin 1s linear infinite;\n}\n\n@keyframes b-form-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Help & Extra */\n.b-form-item__help {\n min-height: 22px;\n padding-top: 2px;\n font-size: 14px;\n line-height: 1.5714;\n color: var(--b-form-help-color, rgba(0, 0, 0, 0.65));\n transition: color 0.3s cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n\n.b-form-item__help--error {\n color: var(--b-form-error-color, #ff4d4f);\n}\n\n.b-form-item__help--warning {\n color: var(--b-form-warning-color, #faad14);\n}\n\n.b-form-item__extra {\n padding-top: 2px;\n font-size: 14px;\n line-height: 1.5714;\n color: var(--b-form-help-color, rgba(0, 0, 0, 0.65));\n}\n\n@media (prefers-reduced-motion: reduce) {\n .b-form-item__help {\n transition: none;\n }\n\n .b-form-item__loading-icon {\n animation: none;\n }\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"design-system107.js","names":[],"sources":["../src/components/BForm/BForm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useValidationForm } from '@/composables/useValidation.ts';\nimport { computed, provide, ref } from 'vue';\nimport { BFormContextKey } from './context.ts';\nimport {\n BFormLayout,\n BFormLabelAlign,\n BFormRequiredMark,\n BFormValidateTrigger,\n type BFormFieldError,\n type BFormItemContext,\n type BFormValidateResult,\n} from './types.ts';\n\nconst {\n layout = BFormLayout.Horizontal,\n labelAlign = BFormLabelAlign.Left,\n labelWidth,\n colon = true,\n disabled = false,\n requiredMark = true,\n name,\n model,\n scrollToFirstError = false,\n validateTrigger = BFormValidateTrigger.Change,\n noHtml5Validate = false,\n} = defineProps<{\n /** Form layout mode. */\n layout?: `${BFormLayout}`;\n /** Label text alignment. */\n labelAlign?: `${BFormLabelAlign}`;\n /** Fixed width for all labels. */\n labelWidth?: string;\n /** Display colon after label (horizontal layout only). */\n colon?: boolean;\n /** Whether all form controls are disabled. */\n disabled?: boolean;\n /** How required/optional marks are displayed. */\n requiredMark?: boolean | `${BFormRequiredMark}`;\n /** Form name, used as field id prefix. */\n name?: string;\n /** Form data model object. Fields read their value from model[fieldName]. */\n model?: Record<string, unknown>;\n /** Auto-scroll to first validation error on submit failure. */\n scrollToFirstError?: boolean | ScrollIntoViewOptions;\n /** Default field validation trigger. */\n validateTrigger?: `${BFormValidateTrigger}` | `${BFormValidateTrigger}`[];\n /** Disable native HTML5 validation. */\n noHtml5Validate?: boolean;\n}>();\n\nconst emit = defineEmits<{\n /** Called after successful validation on submit. */\n finish: [values: Record<string, unknown>];\n /** Called when validation fails on submit. */\n finishFailed: [result: BFormValidateResult];\n}>();\n\nconst formEl = ref<HTMLFormElement | null>(null);\n\nconst { fields, validateAll, resetAll, isValid } = useValidationForm();\n\nconst formContext = computed<BFormItemContext>(() => ({\n layout,\n labelAlign,\n labelWidth,\n colon,\n disabled,\n requiredMark,\n validateTrigger,\n model,\n}));\n\nprovide(BFormContextKey, formContext.value);\n\nconst validate = (): boolean => {\n return validateAll();\n};\n\nconst buildResult = (): BFormValidateResult => {\n const errorFields: BFormFieldError[] = [];\n const values: Record<string, unknown> = {};\n\n for (const [key, fieldState] of Object.entries(fields)) {\n values[key] = model?.[key];\n if (!fieldState.value.isValid) {\n errorFields.push({ name: key, errors: fieldState.value.errors });\n }\n }\n\n return { values, errorFields };\n};\n\nconst resetFields = (names?: string[]) => {\n if (!names) {\n resetAll();\n return;\n }\n for (const fieldName of names) {\n if (fields[fieldName]) {\n fields[fieldName].value.reset();\n }\n }\n};\n\nconst scrollToField = (fieldName: string, options?: ScrollIntoViewOptions) => {\n const el = formEl.value?.querySelector(`[data-form-field=\"${fieldName}\"]`);\n if (el) {\n el.scrollIntoView(options ?? { behavior: 'smooth', block: 'center' });\n }\n};\n\nconst handleSubmit = (e: Event) => {\n e.preventDefault();\n const allValid = validate();\n const result = buildResult();\n\n if (allValid) {\n emit('finish', result.values);\n } else {\n emit('finishFailed', result);\n if (scrollToFirstError && result.errorFields.length > 0) {\n const opts =\n typeof scrollToFirstError === 'object' ? scrollToFirstError : { behavior: 'smooth' as const, block: 'center' as const };\n scrollToField(result.errorFields[0].name, opts);\n }\n }\n};\n\nconst formClasses = computed(() => [\n 'b-form',\n `b-form--${layout}`,\n `b-form--label-${labelAlign}`,\n {\n 'b-form--disabled': disabled,\n },\n]);\n\ndefineExpose({\n validate,\n resetFields,\n scrollToField,\n isValid,\n});\n</script>\n\n<template>\n <form\n ref=\"formEl\"\n :class=\"formClasses\"\n :name=\"name\"\n :novalidate=\"noHtml5Validate\"\n role=\"form\"\n :aria-label=\"name\"\n @submit=\"handleSubmit\"\n >\n <slot />\n </form>\n</template>\n\n<style scoped>\n.b-form {\n --b-form-item-margin-bottom: 24px;\n --b-form-inline-item-margin-bottom: 0;\n --b-form-label-color: rgba(0, 0, 0, 0.88);\n --b-form-label-font-size: 14px;\n --b-form-label-height: 32px;\n --b-form-label-colon-margin-inline-start: 2px;\n --b-form-label-colon-margin-inline-end: 8px;\n --b-form-label-required-mark-color: #cf1322;\n --b-form-vertical-label-margin: 0;\n --b-form-vertical-label-padding: 0 0 8px;\n --b-form-help-color: rgba(0, 0, 0, 0.65);\n --b-form-error-color: #cf1322;\n --b-form-warning-color: #874d00;\n --b-form-success-color: #52c41a;\n\n margin: 0;\n padding: 0;\n font-size: var(--b-form-label-font-size);\n color: var(--b-form-label-color);\n}\n\n.b-form--inline {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n align-items: flex-end;\n}\n\n[data-prefers-color='dark'] .b-form {\n --b-form-label-color: rgba(255, 255, 255, 0.88);\n --b-form-label-required-mark-color: #dc3838;\n --b-form-help-color: rgba(255, 255, 255, 0.65);\n --b-form-error-color: #dc3838;\n --b-form-warning-color: #d1a300;\n --b-form-success-color: #49aa19;\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-form {\n --b-form-label-color: rgba(255, 255, 255, 0.88);\n --b-form-label-required-mark-color: #dc3838;\n --b-form-help-color: rgba(255, 255, 255, 0.65);\n --b-form-error-color: #dc3838;\n --b-form-warning-color: #d1a300;\n --b-form-success-color: #49aa19;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .b-form :deep(.b-form-item__help) {\n transition: none;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmDA,IAAM,IAAO,GAOP,IAAS,EAA4B,KAAK,EAE1C,EAAE,WAAQ,gBAAa,aAAU,eAAY,GAAmB;AAatE,IAAQ,GAXY,SAAkC;GACpD,QAAK,EAAA;GACL,YAAS,EAAA;GACT,YAAS,EAAA;GACT,OAAI,EAAA;GACJ,UAAO,EAAA;GACP,cAAW,EAAA;GACX,iBAAc,EAAA;GACd,OAAI,EAAA;GACL,EAAE,CAEkC,MAAM;EAE3C,IAAM,UACG,GAAa,EAGhB,UAAyC;GAC7C,IAAM,IAAiC,EAAE,EACnC,IAAkC,EAAE;AAE1C,QAAK,IAAM,CAAC,GAAK,MAAe,OAAO,QAAQ,EAAO,CAEpD,CADA,EAAO,KAAO,EAAA,QAAQ,IACjB,EAAW,MAAM,WACpB,EAAY,KAAK;IAAE,MAAM;IAAK,QAAQ,EAAW,MAAM;IAAQ,CAAC;AAIpE,UAAO;IAAE;IAAQ;IAAa;KAG1B,KAAe,MAAqB;AACxC,OAAI,CAAC,GAAO;AACV,OAAU;AACV;;AAEF,QAAK,IAAM,KAAa,EACtB,CAAI,EAAO,MACT,EAAO,GAAW,MAAM,OAAO;KAK/B,KAAiB,GAAmB,MAAoC;GAC5E,IAAM,IAAK,EAAO,OAAO,cAAc,qBAAqB,EAAU,IAAI;AAC1E,GAAI,KACF,EAAG,eAAe,KAAW;IAAE,UAAU;IAAU,OAAO;IAAU,CAAC;KAInE,KAAgB,MAAa;AACjC,KAAE,gBAAgB;GAClB,IAAM,IAAW,GAAU,EACrB,IAAS,GAAa;AAE5B,OAAI,EACF,GAAK,UAAU,EAAO,OAAO;YAE7B,EAAK,gBAAgB,EAAO,EACxB,EAAA,sBAAsB,EAAO,YAAY,SAAS,GAAG;IACvD,IAAM,IACJ,OAAO,EAAA,sBAAuB,WAAW,EAAA,qBAAqB;KAAE,UAAU;KAAmB,OAAO;KAAmB;AACzH,MAAc,EAAO,YAAY,GAAG,MAAM,EAAK;;KAK/C,IAAc,QAAe;GACjC;GACA,WAAW,EAAA;GACX,iBAAiB,EAAA;GACjB,EACE,oBAAoB,EAAA,UACrB;GACF,CAAC;SAEF,EAAa;GACX;GACA;GACA;GACA;GACD,CAAC,kBAIA,EAUO,QAAA;YATD;GAAJ,KAAI;GACH,OAAK,EAAE,EAAA,MAAW;GAClB,MAAM,EAAA;GACN,YAAY,EAAA;GACb,MAAK;GACJ,cAAY,EAAA;GACZ,UAAQ;MAET,EAAQ,EAAA,QAAA,WAAA,EAAA,EAAA,KAAA,GAAA,GAAA,CAAA,EAAA,IAAA,EAAA"}
@@ -1,8 +1,8 @@
1
1
  import e from "./design-system14.js";
2
2
  import t from "./design-system107.js";
3
3
  /* empty css */
4
- //#region src/components/BForm/BFormItem.vue
5
- var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-6fe6001b"]]);
4
+ //#region src/components/BForm/BForm.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-cf5d3049"]]);
6
6
  //#endregion
7
7
  export { n as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"design-system109.js","names":[],"sources":["../src/components/BForm/BFormItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useComponentId } from '@/composables/useComponentId.ts';\nimport { useValidationField } from '@/composables/useValidation.ts';\nimport { computed, inject, ref, watch } from 'vue';\nimport type { ZodType } from 'zod';\nimport { BFormContextKey } from './context.ts';\nimport {\n BFormLayout,\n BFormRequiredMark,\n BFormValidateStatus,\n BFormValidateTrigger,\n} from './types.ts';\n\nconst {\n label,\n name,\n schema,\n required = false,\n validateStatus,\n help,\n extra,\n colon = null,\n labelAlign,\n labelWidth,\n hidden = false,\n noStyle = false,\n hasFeedback = false,\n tooltip,\n layout,\n validateTrigger,\n} = defineProps<{\n /** Label text for the form item. */\n label?: string;\n /** Field name (used for validation and form data collection). */\n name?: string;\n /** Zod schema for field validation. */\n schema?: ZodType;\n /** Whether to display a required mark (visual only, does not add validation). */\n required?: boolean;\n /** Manual validation status override. */\n validateStatus?: `${BFormValidateStatus}`;\n /** Custom help/error message (overrides auto-generated). */\n help?: string;\n /** Extra hint text below the control. */\n extra?: string;\n /** Override parent form colon setting. Pass true/false to override, omit to inherit. */\n colon?: boolean | null;\n /** Override parent form label alignment. */\n labelAlign?: 'left' | 'right';\n /** Override parent form label width. */\n labelWidth?: string;\n /** Hide the form item visually but still validate. */\n hidden?: boolean;\n /** Render control only, no wrapper/label/margin. */\n noStyle?: boolean;\n /** Show validation feedback icon. */\n hasFeedback?: boolean;\n /** Override validation trigger. */\n validateTrigger?: `${BFormValidateTrigger}` | `${BFormValidateTrigger}`[];\n /** Tooltip text for the label. */\n tooltip?: string;\n /** Per-item layout override. */\n layout?: 'horizontal' | 'vertical';\n}>();\n\nconst formContext = inject(BFormContextKey, undefined);\n\nconst { componentUID } = useComponentId();\nconst fieldId = computed(() => `b-form-item-${name ? name + '-' : ''}${componentUID.value}`);\n\nconst fieldValueRef = computed(() => {\n if (name && formContext?.model) {\n return formContext.model[name];\n }\n return undefined;\n});\n\nconst fieldValueAsRef = ref(fieldValueRef.value);\nwatch(fieldValueRef, (val) => {\n fieldValueAsRef.value = val;\n});\n\nconst hasValidation = !!(name && schema);\n\nconst validation = hasValidation\n ? useValidationField(name!, fieldValueAsRef, schema!)\n : undefined;\n\nconst resolvedTrigger = computed(() => {\n if (validateTrigger) return Array.isArray(validateTrigger) ? validateTrigger : [validateTrigger];\n const parentTrigger = formContext?.validateTrigger ?? BFormValidateTrigger.Change;\n return Array.isArray(parentTrigger) ? parentTrigger : [parentTrigger];\n});\n\nconst handleBlur = () => {\n if (validation && resolvedTrigger.value.includes(BFormValidateTrigger.Blur)) {\n validation.markTouched();\n validation.validate();\n }\n};\n\nconst handleChange = () => {\n if (validation && resolvedTrigger.value.includes(BFormValidateTrigger.Change)) {\n validation.validate();\n }\n};\n\nwatch(fieldValueRef, () => {\n handleChange();\n});\n\nconst computedStatus = computed<`${BFormValidateStatus}` | undefined>(() => {\n if (validateStatus) return validateStatus;\n if (!validation) return undefined;\n if (validation.errors.value.length > 0) return BFormValidateStatus.Error;\n if (validation.touched.value && validation.isValid.value) return BFormValidateStatus.Success;\n return undefined;\n});\n\nconst resolvedLayout = computed(() => {\n if (layout !== undefined) return layout;\n if (formContext?.layout !== undefined) return formContext.layout;\n return BFormLayout.Horizontal;\n});\nconst resolvedLabelAlign = computed(() => {\n if (labelAlign !== undefined) return labelAlign;\n if (formContext?.labelAlign !== undefined) return formContext.labelAlign;\n return 'right';\n});\nconst resolvedColon = computed(() => {\n if (colon !== null) return colon;\n if (formContext?.colon !== undefined) return formContext.colon;\n return true;\n});\nconst resolvedLabelWidth = computed(() => labelWidth ?? formContext?.labelWidth);\nconst isDisabled = computed(() => formContext?.disabled ?? false);\n\nconst isRequired = computed(() => {\n if (required) return true;\n if (schema) {\n const result = schema.safeParse(undefined);\n if (!result.success) return true;\n const emptyResult = schema.safeParse('');\n if (!emptyResult.success) return true;\n }\n return false;\n});\n\nconst showColon = computed(() => resolvedColon.value && resolvedLayout.value === 'horizontal');\n\nconst showRequiredMark = computed(() => {\n const mark = formContext?.requiredMark ?? true;\n if (mark === false) return false;\n if (mark === BFormRequiredMark.Optional) return false;\n return isRequired.value;\n});\n\nconst showOptionalMark = computed(() => {\n const mark = formContext?.requiredMark ?? true;\n return mark === BFormRequiredMark.Optional && !isRequired.value;\n});\n\nconst helpMessage = computed(() => {\n if (help !== undefined) return help;\n if (validation && validation.errors.value.length > 0) return validation.errors.value[0];\n return undefined;\n});\n\nconst itemClasses = computed(() => [\n 'b-form-item',\n `b-form-item--${resolvedLayout.value}`,\n {\n 'b-form-item--has-error': computedStatus.value === BFormValidateStatus.Error,\n 'b-form-item--has-warning': computedStatus.value === BFormValidateStatus.Warning,\n 'b-form-item--has-success': computedStatus.value === BFormValidateStatus.Success,\n 'b-form-item--validating': computedStatus.value === BFormValidateStatus.Validating,\n 'b-form-item--has-feedback': hasFeedback,\n 'b-form-item--hidden': hidden,\n 'b-form-item--no-style': noStyle,\n 'b-form-item--required': showRequiredMark.value,\n },\n]);\n\nconst labelStyle = computed(() => {\n const styles: Record<string, string> = {};\n if (resolvedLabelWidth.value) {\n styles.width = resolvedLabelWidth.value;\n styles.flexShrink = '0';\n }\n return styles;\n});\n\ndefineExpose({\n validate: validation?.validate ?? (() => true),\n reset: validation?.reset ?? (() => {}),\n errors: validation?.errors ?? computed(() => []),\n isValid: validation?.isValid ?? computed(() => true),\n dirty: validation?.dirty ?? computed(() => false),\n touched: validation?.touched ?? computed(() => false),\n handleBlur,\n});\n</script>\n\n<template>\n <div\n v-if=\"!noStyle\"\n :class=\"itemClasses\"\n :data-form-field=\"name\"\n role=\"group\"\n :aria-labelledby=\"label ? `${fieldId}-label` : undefined\"\n >\n <div\n v-if=\"label || $slots.label\"\n class=\"b-form-item__label\"\n :class=\"[`b-form-item__label--${resolvedLabelAlign}`]\"\n :style=\"labelStyle\"\n >\n <label :id=\"`${fieldId}-label`\" :for=\"fieldId\">\n <span v-if=\"showRequiredMark\" class=\"b-form-item__required-mark\" aria-hidden=\"true\">*</span>\n <slot name=\"label\">{{ label }}</slot>\n <span v-if=\"showOptionalMark\" class=\"b-form-item__optional-mark\">(optional)</span>\n <span\n v-if=\"showColon\"\n class=\"b-form-item__colon\"\n aria-hidden=\"true\"\n >:</span>\n </label>\n <span v-if=\"tooltip\" class=\"b-form-item__tooltip\" :title=\"tooltip\" role=\"img\" aria-label=\"Help\">\n <svg viewBox=\"64 64 896 896\" width=\"14\" height=\"14\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z\"\n />\n <path\n d=\"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.4-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7c0-19.7 12.4-37.7 30.9-44.8 59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3z\"\n />\n <path d=\"M512 732a40 40 0 100-80 40 40 0 000 80z\" />\n </svg>\n </span>\n </div>\n\n <div class=\"b-form-item__control\">\n <div class=\"b-form-item__control-input\">\n <slot :id=\"fieldId\" :status=\"computedStatus\" :disabled=\"isDisabled\" :on-blur=\"handleBlur\" />\n <span v-if=\"hasFeedback && computedStatus\" class=\"b-form-item__feedback-icon\">\n <svg\n v-if=\"computedStatus === 'success'\"\n viewBox=\"64 64 896 896\"\n width=\"14\"\n height=\"14\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z\"\n />\n </svg>\n <svg\n v-else-if=\"computedStatus === 'error'\"\n viewBox=\"64 64 896 896\"\n width=\"14\"\n height=\"14\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L512 449.8 295.9 191.7c-3-3.6-7.5-5.7-12.3-5.7H204c-6.8 0-10.5 7.9-6.1 13.1L460.2 512 197.8 824.9A7.95 7.95 0 00204 838h79.8c4.7 0 9.2-2.1 12.3-5.7L512 574.1l216.2 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z\"\n />\n </svg>\n <svg\n v-else-if=\"computedStatus === 'warning'\"\n viewBox=\"64 64 896 896\"\n width=\"14\"\n height=\"14\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M464 720a48 48 0 1096 0 48 48 0 10-96 0zm16-304v184c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V416c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8z\"\n />\n <path\n d=\"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48z\"\n />\n </svg>\n <span v-else-if=\"computedStatus === 'validating'\" class=\"b-form-item__loading-icon\">\n <svg viewBox=\"0 0 1024 1024\" width=\"14\" height=\"14\" fill=\"currentColor\" aria-hidden=\"true\">\n <path\n d=\"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.3 199.3 0 19.9-16.1 36-36 36z\"\n />\n </svg>\n </span>\n </span>\n </div>\n\n <div\n v-if=\"helpMessage || $slots.help\"\n class=\"b-form-item__help\"\n :class=\"{\n 'b-form-item__help--error': computedStatus === 'error',\n 'b-form-item__help--warning': computedStatus === 'warning',\n }\"\n :id=\"`${fieldId}-help`\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n <slot name=\"help\">{{ helpMessage }}</slot>\n </div>\n\n <div v-if=\"extra || $slots.extra\" class=\"b-form-item__extra\">\n <slot name=\"extra\">{{ extra }}</slot>\n </div>\n </div>\n </div>\n\n <template v-else>\n <slot :id=\"fieldId\" :status=\"computedStatus\" :disabled=\"isDisabled\" :on-blur=\"handleBlur\" />\n </template>\n</template>\n\n<style scoped>\n.b-form-item {\n margin-bottom: var(--b-form-item-margin-bottom, 24px);\n}\n\n.b-form-item--horizontal {\n display: flex;\n align-items: flex-start;\n}\n\n.b-form-item--vertical {\n display: flex;\n flex-direction: column;\n}\n\n.b-form-item--hidden {\n display: none;\n}\n\n:deep(.b-form--inline) .b-form-item {\n margin-bottom: var(--b-form-inline-item-margin-bottom, 0);\n}\n\n/* Label */\n.b-form-item__label {\n display: inline-flex;\n align-items: center;\n height: var(--b-form-label-height, 32px);\n color: var(--b-form-label-color, rgba(0, 0, 0, 0.88));\n font-size: var(--b-form-label-font-size, 14px);\n line-height: 1.5714;\n white-space: nowrap;\n}\n\n.b-form-item--horizontal .b-form-item__label {\n margin-right: 8px;\n flex-shrink: 0;\n}\n\n.b-form-item--vertical .b-form-item__label {\n margin: var(--b-form-vertical-label-margin, 0);\n padding: var(--b-form-vertical-label-padding, 0 0 8px);\n height: auto;\n}\n\n.b-form-item__label--left {\n text-align: left;\n justify-content: flex-start;\n}\n\n.b-form-item__label--right {\n text-align: right;\n justify-content: flex-end;\n}\n\n.b-form-item__label label {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n cursor: default;\n}\n\n.b-form-item__required-mark {\n color: var(--b-form-label-required-mark-color, #ff4d4f);\n margin-right: 4px;\n font-family: SimSun, sans-serif;\n line-height: 1;\n}\n\n.b-form-item__optional-mark {\n color: var(--b-form-help-color, rgba(0, 0, 0, 0.65));\n margin-left: 4px;\n font-size: 12px;\n font-style: italic;\n}\n\n.b-form-item__colon {\n margin-inline-start: var(--b-form-label-colon-margin-inline-start, 2px);\n margin-inline-end: var(--b-form-label-colon-margin-inline-end, 8px);\n}\n\n.b-form-item__tooltip {\n display: inline-flex;\n align-items: center;\n margin-left: 4px;\n color: var(--b-form-help-color, rgba(0, 0, 0, 0.65));\n cursor: help;\n}\n\n/* Control */\n.b-form-item__control {\n flex: 1;\n min-width: 0;\n}\n\n.b-form-item__control-input {\n display: flex;\n align-items: center;\n position: relative;\n}\n\n/* Feedback icon */\n.b-form-item__feedback-icon {\n display: inline-flex;\n align-items: center;\n margin-left: 8px;\n flex-shrink: 0;\n}\n\n.b-form-item--has-success .b-form-item__feedback-icon {\n color: var(--b-form-success-color, #52c41a);\n}\n\n.b-form-item--has-error .b-form-item__feedback-icon {\n color: var(--b-form-error-color, #ff4d4f);\n}\n\n.b-form-item--has-warning .b-form-item__feedback-icon {\n color: var(--b-form-warning-color, #faad14);\n}\n\n.b-form-item__loading-icon {\n display: inline-flex;\n animation: b-form-spin 1s linear infinite;\n}\n\n@keyframes b-form-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Help & Extra */\n.b-form-item__help {\n min-height: 22px;\n padding-top: 2px;\n font-size: 14px;\n line-height: 1.5714;\n color: var(--b-form-help-color, rgba(0, 0, 0, 0.65));\n transition: color 0.3s cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n\n.b-form-item__help--error {\n color: var(--b-form-error-color, #ff4d4f);\n}\n\n.b-form-item__help--warning {\n color: var(--b-form-warning-color, #faad14);\n}\n\n.b-form-item__extra {\n padding-top: 2px;\n font-size: 14px;\n line-height: 1.5714;\n color: var(--b-form-help-color, rgba(0, 0, 0, 0.65));\n}\n\n@media (prefers-reduced-motion: reduce) {\n .b-form-item__help {\n transition: none;\n }\n\n .b-form-item__loading-icon {\n animation: none;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"design-system109.js","names":[],"sources":["../src/components/BForm/BForm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useValidationForm } from '@/composables/useValidation.ts';\nimport { computed, provide, ref } from 'vue';\nimport { BFormContextKey } from './context.ts';\nimport {\n BFormLayout,\n BFormLabelAlign,\n BFormRequiredMark,\n BFormValidateTrigger,\n type BFormFieldError,\n type BFormItemContext,\n type BFormValidateResult,\n} from './types.ts';\n\nconst {\n layout = BFormLayout.Horizontal,\n labelAlign = BFormLabelAlign.Left,\n labelWidth,\n colon = true,\n disabled = false,\n requiredMark = true,\n name,\n model,\n scrollToFirstError = false,\n validateTrigger = BFormValidateTrigger.Change,\n noHtml5Validate = false,\n} = defineProps<{\n /** Form layout mode. */\n layout?: `${BFormLayout}`;\n /** Label text alignment. */\n labelAlign?: `${BFormLabelAlign}`;\n /** Fixed width for all labels. */\n labelWidth?: string;\n /** Display colon after label (horizontal layout only). */\n colon?: boolean;\n /** Whether all form controls are disabled. */\n disabled?: boolean;\n /** How required/optional marks are displayed. */\n requiredMark?: boolean | `${BFormRequiredMark}`;\n /** Form name, used as field id prefix. */\n name?: string;\n /** Form data model object. Fields read their value from model[fieldName]. */\n model?: Record<string, unknown>;\n /** Auto-scroll to first validation error on submit failure. */\n scrollToFirstError?: boolean | ScrollIntoViewOptions;\n /** Default field validation trigger. */\n validateTrigger?: `${BFormValidateTrigger}` | `${BFormValidateTrigger}`[];\n /** Disable native HTML5 validation. */\n noHtml5Validate?: boolean;\n}>();\n\nconst emit = defineEmits<{\n /** Called after successful validation on submit. */\n finish: [values: Record<string, unknown>];\n /** Called when validation fails on submit. */\n finishFailed: [result: BFormValidateResult];\n}>();\n\nconst formEl = ref<HTMLFormElement | null>(null);\n\nconst { fields, validateAll, resetAll, isValid } = useValidationForm();\n\nconst formContext = computed<BFormItemContext>(() => ({\n layout,\n labelAlign,\n labelWidth,\n colon,\n disabled,\n requiredMark,\n validateTrigger,\n model,\n}));\n\nprovide(BFormContextKey, formContext.value);\n\nconst validate = (): boolean => {\n return validateAll();\n};\n\nconst buildResult = (): BFormValidateResult => {\n const errorFields: BFormFieldError[] = [];\n const values: Record<string, unknown> = {};\n\n for (const [key, fieldState] of Object.entries(fields)) {\n values[key] = model?.[key];\n if (!fieldState.value.isValid) {\n errorFields.push({ name: key, errors: fieldState.value.errors });\n }\n }\n\n return { values, errorFields };\n};\n\nconst resetFields = (names?: string[]) => {\n if (!names) {\n resetAll();\n return;\n }\n for (const fieldName of names) {\n if (fields[fieldName]) {\n fields[fieldName].value.reset();\n }\n }\n};\n\nconst scrollToField = (fieldName: string, options?: ScrollIntoViewOptions) => {\n const el = formEl.value?.querySelector(`[data-form-field=\"${fieldName}\"]`);\n if (el) {\n el.scrollIntoView(options ?? { behavior: 'smooth', block: 'center' });\n }\n};\n\nconst handleSubmit = (e: Event) => {\n e.preventDefault();\n const allValid = validate();\n const result = buildResult();\n\n if (allValid) {\n emit('finish', result.values);\n } else {\n emit('finishFailed', result);\n if (scrollToFirstError && result.errorFields.length > 0) {\n const opts =\n typeof scrollToFirstError === 'object' ? scrollToFirstError : { behavior: 'smooth' as const, block: 'center' as const };\n scrollToField(result.errorFields[0].name, opts);\n }\n }\n};\n\nconst formClasses = computed(() => [\n 'b-form',\n `b-form--${layout}`,\n `b-form--label-${labelAlign}`,\n {\n 'b-form--disabled': disabled,\n },\n]);\n\ndefineExpose({\n validate,\n resetFields,\n scrollToField,\n isValid,\n});\n</script>\n\n<template>\n <form\n ref=\"formEl\"\n :class=\"formClasses\"\n :name=\"name\"\n :novalidate=\"noHtml5Validate\"\n role=\"form\"\n :aria-label=\"name\"\n @submit=\"handleSubmit\"\n >\n <slot />\n </form>\n</template>\n\n<style scoped>\n.b-form {\n --b-form-item-margin-bottom: 24px;\n --b-form-inline-item-margin-bottom: 0;\n --b-form-label-color: rgba(0, 0, 0, 0.88);\n --b-form-label-font-size: 14px;\n --b-form-label-height: 32px;\n --b-form-label-colon-margin-inline-start: 2px;\n --b-form-label-colon-margin-inline-end: 8px;\n --b-form-label-required-mark-color: #cf1322;\n --b-form-vertical-label-margin: 0;\n --b-form-vertical-label-padding: 0 0 8px;\n --b-form-help-color: rgba(0, 0, 0, 0.65);\n --b-form-error-color: #cf1322;\n --b-form-warning-color: #874d00;\n --b-form-success-color: #52c41a;\n\n margin: 0;\n padding: 0;\n font-size: var(--b-form-label-font-size);\n color: var(--b-form-label-color);\n}\n\n.b-form--inline {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n align-items: flex-end;\n}\n\n[data-prefers-color='dark'] .b-form {\n --b-form-label-color: rgba(255, 255, 255, 0.88);\n --b-form-label-required-mark-color: #dc3838;\n --b-form-help-color: rgba(255, 255, 255, 0.65);\n --b-form-error-color: #dc3838;\n --b-form-warning-color: #d1a300;\n --b-form-success-color: #49aa19;\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-form {\n --b-form-label-color: rgba(255, 255, 255, 0.88);\n --b-form-label-required-mark-color: #dc3838;\n --b-form-help-color: rgba(255, 255, 255, 0.65);\n --b-form-error-color: #dc3838;\n --b-form-warning-color: #d1a300;\n --b-form-success-color: #49aa19;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .b-form :deep(.b-form-item__help) {\n transition: none;\n }\n}\n</style>\n"],"mappings":""}