@7pmlabs/design-system 1.0.9 → 1.0.11
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.
- package/README.md +57 -6
- package/dist/design-system.css +1 -1
- package/dist/design-system.js +74 -60
- package/dist/design-system100.js +4 -5
- package/dist/design-system100.js.map +1 -1
- package/dist/design-system101.js +53 -506
- package/dist/design-system101.js.map +1 -1
- package/dist/{design-system93.js → design-system102.js} +1 -1
- package/dist/design-system102.js.map +1 -0
- package/dist/design-system103.js +13 -5
- package/dist/design-system103.js.map +1 -1
- package/dist/design-system104.js +109 -7
- package/dist/design-system104.js.map +1 -1
- package/dist/design-system106.js +9 -0
- package/dist/design-system106.js.map +1 -0
- package/dist/design-system107.js +206 -6
- package/dist/design-system107.js.map +1 -1
- package/dist/design-system109.js +9 -0
- package/dist/design-system109.js.map +1 -0
- package/dist/design-system110.js +507 -6
- package/dist/design-system110.js.map +1 -1
- package/dist/design-system112.js +8 -0
- package/dist/design-system112.js.map +1 -0
- package/dist/design-system113.js +7 -5
- package/dist/design-system113.js.map +1 -1
- package/dist/design-system114.js +209 -9
- package/dist/design-system114.js.map +1 -1
- package/dist/design-system116.js +9 -0
- package/dist/design-system116.js.map +1 -0
- package/dist/design-system117.js +224 -6
- package/dist/design-system117.js.map +1 -1
- package/dist/design-system119.js +9 -0
- package/dist/design-system119.js.map +1 -0
- package/dist/design-system12.js.map +1 -1
- package/dist/design-system120.js +163 -5
- package/dist/design-system120.js.map +1 -1
- package/dist/design-system122.js +5 -90
- package/dist/design-system122.js.map +1 -1
- package/dist/design-system123.js +12 -0
- package/dist/design-system123.js.map +1 -0
- package/dist/design-system124.js +274 -5
- package/dist/design-system124.js.map +1 -1
- package/dist/design-system126.js +9 -0
- package/dist/design-system126.js.map +1 -0
- package/dist/design-system127.js +16 -5
- package/dist/design-system127.js.map +1 -1
- package/dist/design-system129.js +8 -0
- package/dist/design-system129.js.map +1 -0
- package/dist/design-system130.js +12 -5
- package/dist/design-system130.js.map +1 -1
- package/dist/design-system131.js +76 -137
- package/dist/design-system131.js.map +1 -1
- package/dist/design-system133.js +1 -1
- package/dist/design-system133.js.map +1 -1
- package/dist/design-system134.js +37 -90
- package/dist/design-system134.js.map +1 -1
- package/dist/design-system136.js +1 -1
- package/dist/design-system136.js.map +1 -1
- package/dist/design-system137.js +226 -20
- package/dist/design-system137.js.map +1 -1
- package/dist/design-system139.js +4 -5
- package/dist/design-system139.js.map +1 -1
- package/dist/design-system140.js +151 -9
- package/dist/design-system140.js.map +1 -1
- package/dist/design-system142.js +3 -2
- package/dist/design-system142.js.map +1 -1
- package/dist/design-system143.js +93 -19
- package/dist/design-system143.js.map +1 -1
- package/dist/design-system145.js +5 -158
- package/dist/design-system145.js.map +1 -1
- package/dist/design-system146.js +12 -0
- package/dist/design-system146.js.map +1 -0
- package/dist/design-system147.js +37 -5
- package/dist/design-system147.js.map +1 -1
- package/dist/design-system148.js +4 -307
- package/dist/design-system148.js.map +1 -1
- package/dist/design-system149.js +24 -0
- package/dist/{design-system144.js.map → design-system149.js.map} +1 -1
- package/dist/design-system150.js +2 -3
- package/dist/design-system150.js.map +1 -1
- package/dist/design-system151.js +131 -213
- package/dist/design-system151.js.map +1 -1
- package/dist/design-system153.js +1 -1
- package/dist/design-system153.js.map +1 -1
- package/dist/design-system154.js +278 -160
- package/dist/design-system154.js.map +1 -1
- package/dist/design-system156.js +1 -1
- package/dist/design-system156.js.map +1 -1
- package/dist/design-system157.js +240 -3
- package/dist/design-system157.js.map +1 -1
- package/dist/design-system159.js +8 -0
- package/dist/design-system159.js.map +1 -0
- package/dist/design-system16.js.map +1 -1
- package/dist/design-system160.js +189 -6
- package/dist/design-system160.js.map +1 -1
- package/dist/design-system162.js +8 -0
- package/dist/design-system162.js.map +1 -0
- package/dist/design-system163.js +3 -6
- package/dist/design-system163.js.map +1 -1
- package/dist/design-system164.js +46 -57
- package/dist/design-system164.js.map +1 -1
- package/dist/design-system166.js +2 -2
- package/dist/design-system166.js.map +1 -1
- package/dist/design-system167.js +44 -170
- package/dist/design-system167.js.map +1 -1
- package/dist/design-system169.js +2 -2
- package/dist/design-system169.js.map +1 -1
- package/dist/design-system170.js +55 -101
- package/dist/design-system170.js.map +1 -1
- package/dist/design-system172.js +5 -4
- package/dist/design-system172.js.map +1 -1
- package/dist/design-system173.js +182 -11
- package/dist/design-system173.js.map +1 -1
- package/dist/design-system175.js +9 -0
- package/dist/design-system175.js.map +1 -0
- package/dist/design-system176.js +115 -6
- package/dist/design-system176.js.map +1 -1
- package/dist/design-system178.js +8 -0
- package/dist/design-system178.js.map +1 -0
- package/dist/design-system179.js +11 -5
- package/dist/design-system179.js.map +1 -1
- package/dist/design-system180.js +452 -90
- package/dist/design-system180.js.map +1 -1
- package/dist/design-system182.js +5 -4
- package/dist/design-system182.js.map +1 -1
- package/dist/design-system183.js +33 -106
- package/dist/design-system183.js.map +1 -1
- package/dist/design-system185.js +4 -5
- package/dist/design-system185.js.map +1 -1
- package/dist/design-system186.js +71 -89
- package/dist/design-system186.js.map +1 -1
- package/dist/design-system188.js +4 -5
- package/dist/design-system188.js.map +1 -1
- package/dist/design-system189.js +25 -727
- package/dist/design-system189.js.map +1 -1
- package/dist/design-system19.js.map +1 -1
- package/dist/design-system191.js +1 -1
- package/dist/design-system191.js.map +1 -1
- package/dist/design-system192.js +28 -11
- package/dist/design-system192.js.map +1 -1
- package/dist/design-system194.js +8 -0
- package/dist/design-system194.js.map +1 -0
- package/dist/design-system195.js +33 -5
- package/dist/design-system195.js.map +1 -1
- package/dist/design-system197.js +5 -46
- package/dist/design-system197.js.map +1 -1
- package/dist/design-system198.js +31 -4
- package/dist/design-system198.js.map +1 -1
- package/dist/design-system200.js +8 -0
- package/dist/design-system200.js.map +1 -0
- package/dist/design-system201.js +332 -5
- package/dist/design-system201.js.map +1 -1
- package/dist/design-system203.js +8 -0
- package/dist/design-system203.js.map +1 -0
- package/dist/design-system204.js +100 -5
- package/dist/design-system204.js.map +1 -1
- package/dist/design-system206.js +8 -0
- package/dist/design-system206.js.map +1 -0
- package/dist/design-system207.js +19 -5
- package/dist/design-system207.js.map +1 -1
- package/dist/design-system208.js +4 -54
- package/dist/design-system208.js.map +1 -1
- package/dist/design-system209.js +3 -4
- package/dist/design-system209.js.map +1 -1
- package/dist/design-system210.js +386 -137
- package/dist/design-system210.js.map +1 -1
- package/dist/design-system212.js +1 -1
- package/dist/design-system212.js.map +1 -1
- package/dist/design-system213.js +59 -7
- package/dist/design-system213.js.map +1 -1
- package/dist/design-system215.js +8 -0
- package/dist/design-system215.js.map +1 -0
- package/dist/design-system216.js +88 -5
- package/dist/design-system216.js.map +1 -1
- package/dist/design-system217.js +4 -580
- package/dist/design-system217.js.map +1 -1
- package/dist/design-system218.js +111 -0
- package/dist/design-system218.js.map +1 -0
- package/dist/design-system22.js.map +1 -1
- package/dist/design-system220.js +6 -7
- package/dist/design-system220.js.map +1 -1
- package/dist/design-system221.js +85 -353
- package/dist/design-system221.js.map +1 -1
- package/dist/design-system223.js +2 -2
- package/dist/design-system223.js.map +1 -1
- package/dist/design-system224.js +740 -0
- package/dist/design-system224.js.map +1 -0
- package/dist/design-system226.js +8 -0
- package/dist/design-system226.js.map +1 -0
- package/dist/{design-system60.js → design-system227.js} +6 -8
- package/dist/design-system227.js.map +1 -0
- package/dist/{design-system193.js → design-system228.js} +2 -2
- package/dist/design-system228.js.map +1 -0
- package/dist/design-system230.js +8 -0
- package/dist/design-system230.js.map +1 -0
- package/dist/{design-system196.js → design-system231.js} +1 -1
- package/dist/{design-system196.js.map → design-system231.js.map} +1 -1
- package/dist/design-system232.js +49 -0
- package/dist/design-system232.js.map +1 -0
- package/dist/design-system233.js +7 -0
- package/dist/design-system233.js.map +1 -0
- package/dist/{design-system199.js → design-system234.js} +2 -2
- package/dist/design-system234.js.map +1 -0
- package/dist/design-system236.js +8 -0
- package/dist/design-system236.js.map +1 -0
- package/dist/{design-system202.js → design-system237.js} +1 -1
- package/dist/design-system237.js.map +1 -0
- package/dist/design-system239.js +8 -0
- package/dist/design-system239.js.map +1 -0
- package/dist/{design-system205.js → design-system240.js} +1 -1
- package/dist/design-system240.js.map +1 -0
- package/dist/design-system242.js +8 -0
- package/dist/design-system242.js.map +1 -0
- package/dist/design-system243.js +57 -0
- package/dist/design-system243.js.map +1 -0
- package/dist/design-system244.js +7 -0
- package/dist/design-system244.js.map +1 -0
- package/dist/design-system245.js +173 -0
- package/dist/design-system245.js.map +1 -0
- package/dist/design-system247.js +8 -0
- package/dist/design-system247.js.map +1 -0
- package/dist/design-system248.js +10 -0
- package/dist/design-system248.js.map +1 -0
- package/dist/{design-system214.js → design-system249.js} +2 -2
- package/dist/design-system249.js.map +1 -0
- package/dist/design-system25.js.map +1 -1
- package/dist/design-system251.js +8 -0
- package/dist/design-system251.js.map +1 -0
- package/dist/design-system252.js +583 -0
- package/dist/design-system252.js.map +1 -0
- package/dist/{design-system219.js → design-system254.js} +2 -2
- package/dist/{design-system219.js.map → design-system254.js.map} +1 -1
- package/dist/design-system255.js +12 -0
- package/dist/design-system255.js.map +1 -0
- package/dist/design-system256.js +769 -0
- package/dist/design-system256.js.map +1 -0
- package/dist/design-system258.js +9 -0
- package/dist/design-system258.js.map +1 -0
- package/dist/design-system259.js +10 -0
- package/dist/design-system259.js.map +1 -0
- package/dist/design-system260.js +377 -0
- package/dist/design-system260.js.map +1 -0
- package/dist/design-system262.js +9 -0
- package/dist/design-system262.js.map +1 -0
- package/dist/design-system28.js.map +1 -1
- package/dist/design-system3.js.map +1 -1
- package/dist/design-system30.js +21 -138
- package/dist/design-system30.js.map +1 -1
- package/dist/design-system32.js +5 -4
- package/dist/design-system32.js.map +1 -1
- package/dist/design-system33.js +488 -14
- package/dist/design-system33.js.map +1 -1
- package/dist/design-system35.js +1 -1
- package/dist/design-system35.js.map +1 -1
- package/dist/design-system36.js +135 -17
- package/dist/design-system36.js.map +1 -1
- package/dist/design-system38.js +1 -1
- package/dist/design-system38.js.map +1 -1
- package/dist/design-system39.js +16 -11
- package/dist/design-system39.js.map +1 -1
- package/dist/design-system4.js.map +1 -1
- package/dist/design-system41.js +8 -0
- package/dist/design-system41.js.map +1 -0
- package/dist/design-system42.js +26 -5
- package/dist/design-system42.js.map +1 -1
- package/dist/design-system44.js +5 -71
- package/dist/design-system44.js.map +1 -1
- package/dist/design-system45.js +353 -0
- package/dist/design-system45.js.map +1 -0
- package/dist/design-system47.js +5 -50
- package/dist/design-system47.js.map +1 -1
- package/dist/design-system48.js +11 -4
- package/dist/design-system48.js.map +1 -1
- package/dist/design-system49.js +476 -3
- package/dist/design-system49.js.map +1 -1
- package/dist/design-system51.js +8 -0
- package/dist/design-system51.js.map +1 -0
- package/dist/design-system52.js +3 -5
- package/dist/design-system52.js.map +1 -1
- package/dist/design-system53.js +56 -83
- package/dist/design-system53.js.map +1 -1
- package/dist/design-system55.js +5 -4
- package/dist/design-system55.js.map +1 -1
- package/dist/design-system56.js +50 -11
- package/dist/design-system56.js.map +1 -1
- package/dist/design-system57.js +4 -591
- package/dist/design-system57.js.map +1 -1
- package/dist/design-system58.js +6 -0
- package/dist/design-system58.js.map +1 -0
- package/dist/design-system59.js +64 -5
- package/dist/design-system59.js.map +1 -1
- package/dist/design-system61.js +5 -696
- package/dist/design-system61.js.map +1 -1
- package/dist/design-system62.js +101 -0
- package/dist/design-system62.js.map +1 -0
- package/dist/design-system64.js +5 -158
- package/dist/design-system64.js.map +1 -1
- package/dist/design-system65.js +14 -0
- package/dist/design-system65.js.map +1 -0
- package/dist/design-system66.js +591 -5
- package/dist/design-system66.js.map +1 -1
- package/dist/design-system68.js +3 -2
- package/dist/design-system68.js.map +1 -1
- package/dist/design-system69.js +13 -49
- package/dist/design-system69.js.map +1 -1
- package/dist/design-system7.js.map +1 -1
- package/dist/design-system70.js +699 -0
- package/dist/{design-system63.js.map → design-system70.js.map} +1 -1
- package/dist/design-system72.js +5 -199
- package/dist/design-system72.js.map +1 -1
- package/dist/design-system73.js +161 -0
- package/dist/design-system73.js.map +1 -0
- package/dist/design-system75.js +5 -7
- package/dist/design-system75.js.map +1 -1
- package/dist/design-system76.js +25 -269
- package/dist/design-system76.js.map +1 -1
- package/dist/design-system77.js +7 -0
- package/dist/design-system77.js.map +1 -0
- package/dist/design-system78.js +49 -5
- package/dist/design-system78.js.map +1 -1
- package/dist/{design-system71.js → design-system80.js} +2 -2
- package/dist/{design-system71.js.map → design-system80.js.map} +1 -1
- package/dist/design-system81.js +199 -5
- package/dist/design-system81.js.map +1 -1
- package/dist/design-system83.js +5 -99
- package/dist/design-system83.js.map +1 -1
- package/dist/design-system84.js +10 -0
- package/dist/design-system84.js.map +1 -0
- package/dist/design-system85.js +273 -5
- package/dist/design-system85.js.map +1 -1
- package/dist/design-system87.js +8 -0
- package/dist/design-system87.js.map +1 -0
- package/dist/design-system88.js +57 -5
- package/dist/design-system88.js.map +1 -1
- package/dist/design-system90.js +8 -0
- package/dist/design-system90.js.map +1 -0
- package/dist/design-system91.js +11 -5
- package/dist/design-system91.js.map +1 -1
- package/dist/design-system92.js +98 -53
- package/dist/design-system92.js.map +1 -1
- package/dist/design-system94.js +5 -13
- package/dist/design-system94.js.map +1 -1
- package/dist/design-system95.js +61 -104
- package/dist/design-system95.js.map +1 -1
- package/dist/design-system97.js +4 -5
- package/dist/design-system97.js.map +1 -1
- package/dist/design-system98.js +80 -198
- package/dist/design-system98.js.map +1 -1
- package/dist/types/components/BCalendar/BCalendar.spec.d.ts +1 -0
- package/dist/types/components/BCalendar/BCalendar.vue.d.ts +114 -0
- package/dist/types/components/BCalendar/index.d.ts +2 -0
- package/dist/types/components/BCalendar/types.d.ts +54 -0
- package/dist/types/components/BCarousel/BCarousel.spec.d.ts +1 -0
- package/dist/types/components/BCarousel/BCarousel.vue.d.ts +133 -0
- package/dist/types/components/BCarousel/index.d.ts +2 -0
- package/dist/types/components/BCarousel/types.d.ts +15 -0
- package/dist/types/components/BPagination/BPagination.vue.d.ts +1 -1
- package/dist/types/components/BSkeleton/BSkeleton.spec.d.ts +1 -0
- package/dist/types/components/BSkeleton/BSkeleton.vue.d.ts +46 -0
- package/dist/types/components/BSkeleton/BSkeletonAvatar.vue.d.ts +12 -0
- package/dist/types/components/BSkeleton/BSkeletonButton.vue.d.ts +14 -0
- package/dist/types/components/BSkeleton/BSkeletonImage.vue.d.ts +7 -0
- package/dist/types/components/BSkeleton/BSkeletonInput.vue.d.ts +12 -0
- package/dist/types/components/BSkeleton/BSkeletonNode.vue.d.ts +19 -0
- package/dist/types/components/BSkeleton/index.d.ts +7 -0
- package/dist/types/components/BSkeleton/types.d.ts +20 -0
- package/dist/types/components/BSplitter/BSplitter.spec.d.ts +1 -0
- package/dist/types/components/BSplitter/BSplitter.vue.d.ts +45 -0
- package/dist/types/components/BSplitter/BSplitterPanel.vue.d.ts +40 -0
- package/dist/types/components/BSplitter/index.d.ts +3 -0
- package/dist/types/components/BSplitter/types.d.ts +42 -0
- package/dist/types/components/BStatistic/BStatistic.spec.d.ts +1 -0
- package/dist/types/components/BStatistic/BStatistic.vue.d.ts +44 -0
- package/dist/types/components/BStatistic/BStatisticTimer.vue.d.ts +50 -0
- package/dist/types/components/BStatistic/index.d.ts +3 -0
- package/dist/types/components/BStatistic/types.d.ts +6 -0
- package/dist/types/components/BTreeSelect/BTreeSelect.spec.d.ts +1 -0
- package/dist/types/components/BTreeSelect/BTreeSelect.vue.d.ts +143 -0
- package/dist/types/components/BTreeSelect/index.d.ts +2 -0
- package/dist/types/components/BTreeSelect/types.d.ts +77 -0
- package/dist/types/components/index.d.ts +6 -0
- package/dist/types/types.d.ts +3 -0
- package/package.json +6 -3
- package/dist/design-system105.js +0 -212
- package/dist/design-system105.js.map +0 -1
- package/dist/design-system108.js +0 -227
- package/dist/design-system108.js.map +0 -1
- package/dist/design-system111.js +0 -166
- package/dist/design-system111.js.map +0 -1
- package/dist/design-system115.js +0 -277
- package/dist/design-system115.js.map +0 -1
- package/dist/design-system118.js +0 -19
- package/dist/design-system118.js.map +0 -1
- package/dist/design-system121.js +0 -15
- package/dist/design-system121.js.map +0 -1
- package/dist/design-system125.js +0 -45
- package/dist/design-system125.js.map +0 -1
- package/dist/design-system128.js +0 -236
- package/dist/design-system128.js.map +0 -1
- package/dist/design-system141.js +0 -40
- package/dist/design-system141.js.map +0 -1
- package/dist/design-system144.js +0 -7
- package/dist/design-system158.js +0 -61
- package/dist/design-system158.js.map +0 -1
- package/dist/design-system161.js +0 -59
- package/dist/design-system161.js.map +0 -1
- package/dist/design-system174.js +0 -465
- package/dist/design-system174.js.map +0 -1
- package/dist/design-system177.js +0 -335
- package/dist/design-system177.js.map +0 -1
- package/dist/design-system193.js.map +0 -1
- package/dist/design-system199.js.map +0 -1
- package/dist/design-system202.js.map +0 -1
- package/dist/design-system205.js.map +0 -1
- package/dist/design-system214.js.map +0 -1
- package/dist/design-system40.js +0 -479
- package/dist/design-system40.js.map +0 -1
- package/dist/design-system43.js +0 -6
- package/dist/design-system43.js.map +0 -1
- package/dist/design-system46.js +0 -9
- package/dist/design-system46.js.map +0 -1
- package/dist/design-system50.js +0 -67
- package/dist/design-system50.js.map +0 -1
- package/dist/design-system60.js.map +0 -1
- package/dist/design-system63.js +0 -8
- package/dist/design-system67.js +0 -32
- package/dist/design-system67.js.map +0 -1
- package/dist/design-system74.js +0 -8
- package/dist/design-system74.js.map +0 -1
- package/dist/design-system79.js +0 -60
- package/dist/design-system79.js.map +0 -1
- package/dist/design-system82.js +0 -14
- package/dist/design-system82.js.map +0 -1
- package/dist/design-system86.js +0 -69
- package/dist/design-system86.js.map +0 -1
- package/dist/design-system89.js +0 -91
- package/dist/design-system89.js.map +0 -1
- package/dist/design-system93.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-system90.js","names":[],"sources":["../src/components/BEmpty/BEmpty.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { BEmptyImage } from '@/types.ts';\nimport { computed } from 'vue';\n\n// ─────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────\nconst props = withDefaults(\n defineProps<{\n /**\n * Customize description text. Pass empty string to show no text,\n * or set hideDescription to true to hide the description entirely.\n */\n description?: string;\n /**\n * Set to true to hide the description area completely.\n * @default false\n */\n hideDescription?: boolean;\n /**\n * Image type or custom image URL string.\n * Use BEmptyImage.Default for the detailed illustration or\n * BEmptyImage.Simple for the minimal version.\n * @default BEmptyImage.Default\n */\n image?: `${BEmptyImage}` | string;\n /**\n * Inline styles applied to the image element.\n */\n imageStyle?: Record<string, string>;\n }>(),\n {\n description: 'No data',\n hideDescription: false,\n image: BEmptyImage.Default,\n },\n);\n\n// ─────────────────────────────────────────────\n// Slots\n// ─────────────────────────────────────────────\nconst slots = defineSlots<{\n /** Default slot: action content below description (e.g. button). */\n default?(): unknown;\n /** Custom description content, overrides the description prop. */\n description?(): unknown;\n /** Custom image content, overrides the image prop entirely. */\n image?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Derived state\n// ─────────────────────────────────────────────\nconst isSimple = computed(() => props.image === BEmptyImage.Simple);\n\nconst isBuiltInImage = computed(\n () => props.image === BEmptyImage.Default || props.image === BEmptyImage.Simple,\n);\n\nconst isCustomUrl = computed(\n () => !isBuiltInImage.value && typeof props.image === 'string' && props.image.length > 0,\n);\n\nconst showDescription = computed(() => {\n if (slots.description) return true;\n return !props.hideDescription;\n});\n\nconst descriptionText = computed(() => {\n return props.description;\n});\n</script>\n\n<template>\n <div\n class=\"b-empty\"\n :class=\"{ 'b-empty--simple': isSimple }\"\n role=\"status\"\n :aria-label=\"props.description || 'No data'\"\n >\n <!-- Image -->\n <div class=\"b-empty__image\" :style=\"props.imageStyle\">\n <slot name=\"image\">\n <!-- Default built-in illustration -->\n <svg\n v-if=\"props.image === BEmptyImage.Default\"\n class=\"b-empty__svg b-empty__svg--default\"\n viewBox=\"0 0 184 152\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(24 31.67)\">\n <ellipse class=\"b-empty__ellipse\" cx=\"67.797\" cy=\"106.89\" rx=\"67.797\" ry=\"12.668\" />\n <path\n class=\"b-empty__path-bg\"\n d=\"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z\"\n />\n <path\n class=\"b-empty__path-main\"\n d=\"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z\"\n transform=\"translate(13.56)\"\n />\n <path\n class=\"b-empty__path-front\"\n d=\"M33.83 0h67.933a4 4 0 014 4v93.344H29.83V4a4 4 0 014-4z\"\n />\n <path\n class=\"b-empty__path-panel\"\n d=\"M42.678 9.953h50.237a2 2 0 012 2V36.91h-54.237V11.953a2 2 0 012-2zM42.94 49.767h49.713a2.262 2.262 0 110 4.524H42.94a2.262 2.262 0 110-4.524zM42.94 61.53h49.713a2.262 2.262 0 110 4.525H42.94a2.262 2.262 0 010-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 01-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393 0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z\"\n />\n </g>\n <path\n class=\"b-empty__path-dot\"\n d=\"M149.121 33.292l-6.83 2.65a1 1 0 01-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z\"\n />\n <g class=\"b-empty__path-dots-group\" transform=\"translate(149.65 15.383)\">\n <ellipse cx=\"20.654\" cy=\"3.167\" rx=\"2.849\" ry=\"2.815\" />\n <path d=\"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z\" />\n </g>\n </g>\n </svg>\n\n <!-- Simple built-in illustration -->\n <svg\n v-else-if=\"props.image === BEmptyImage.Simple\"\n class=\"b-empty__svg b-empty__svg--simple\"\n viewBox=\"0 0 64 41\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <g transform=\"translate(0 1)\" fill=\"none\" fill-rule=\"evenodd\">\n <ellipse class=\"b-empty__simple-ellipse\" cx=\"32\" cy=\"33\" rx=\"32\" ry=\"7\" />\n <g class=\"b-empty__simple-group\" fill-rule=\"nonzero\">\n <path\n d=\"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46V12.76z\"\n />\n <path\n class=\"b-empty__simple-inner\"\n d=\"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z\"\n />\n </g>\n </g>\n </svg>\n\n <!-- Custom URL image -->\n <img\n v-else-if=\"isCustomUrl\"\n :src=\"props.image\"\n alt=\"\"\n class=\"b-empty__custom-image\"\n aria-hidden=\"true\"\n />\n </slot>\n </div>\n\n <!-- Description -->\n <div v-if=\"showDescription\" class=\"b-empty__description\">\n <slot name=\"description\">\n {{ descriptionText }}\n </slot>\n </div>\n\n <!-- Footer / actions -->\n <div v-if=\"slots.default\" class=\"b-empty__footer\">\n <slot />\n </div>\n </div>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (tokens)\n ──────────────────────────────────────────── */\n.b-empty {\n /* Layout */\n --b-empty-padding: 32px 0;\n --b-empty-text-align: center;\n\n /* Image */\n --b-empty-image-height: 152px;\n --b-empty-image-height-simple: 35px;\n --b-empty-image-margin-bottom: 8px;\n --b-empty-image-opacity: 1;\n\n /* Default SVG colors */\n --b-empty-ellipse-fill: oklch(93% 0.005 260);\n --b-empty-path-bg-fill: oklch(95% 0.003 260);\n --b-empty-path-main-fill: oklch(97% 0.002 260);\n --b-empty-path-front-stroke: oklch(83% 0.01 260);\n --b-empty-path-front-fill: oklch(97% 0.002 260);\n --b-empty-path-panel-fill: oklch(93% 0.005 260);\n --b-empty-path-dot-fill: oklch(83% 0.01 260);\n --b-empty-path-dots-group-fill: oklch(100% 0 0);\n\n /* Simple SVG colors */\n --b-empty-simple-ellipse-fill: oklch(93% 0.005 260);\n --b-empty-simple-group-stroke: oklch(83% 0.01 260);\n --b-empty-simple-group-fill: oklch(97% 0.002 260);\n --b-empty-simple-inner-fill: oklch(93% 0.005 260);\n\n /* Description */\n --b-empty-description-color: oklch(55% 0.01 260);\n --b-empty-description-font-size: 14px;\n --b-empty-description-line-height: 1.572;\n --b-empty-description-margin-top: 8px;\n\n /* Footer */\n --b-empty-footer-margin-top: 16px;\n\n /* Animation */\n --b-empty-transition-duration: 200ms;\n}\n\n/* ── Dark mode ───────────────────────────────── */\n[data-prefers-color='dark'] .b-empty {\n --b-empty-ellipse-fill: oklch(25% 0.005 260);\n --b-empty-path-bg-fill: oklch(22% 0.005 260);\n --b-empty-path-main-fill: oklch(18% 0.003 260);\n --b-empty-path-front-stroke: oklch(40% 0.01 260);\n --b-empty-path-front-fill: oklch(20% 0.005 260);\n --b-empty-path-panel-fill: oklch(28% 0.005 260);\n --b-empty-path-dot-fill: oklch(40% 0.01 260);\n --b-empty-path-dots-group-fill: oklch(18% 0 0);\n\n --b-empty-simple-ellipse-fill: oklch(25% 0.005 260);\n --b-empty-simple-group-stroke: oklch(40% 0.01 260);\n --b-empty-simple-group-fill: oklch(20% 0.005 260);\n --b-empty-simple-inner-fill: oklch(28% 0.005 260);\n\n --b-empty-description-color: oklch(70% 0.01 260);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-empty {\n --b-empty-ellipse-fill: oklch(25% 0.005 260);\n --b-empty-path-bg-fill: oklch(22% 0.005 260);\n --b-empty-path-main-fill: oklch(18% 0.003 260);\n --b-empty-path-front-stroke: oklch(40% 0.01 260);\n --b-empty-path-front-fill: oklch(20% 0.005 260);\n --b-empty-path-panel-fill: oklch(28% 0.005 260);\n --b-empty-path-dot-fill: oklch(40% 0.01 260);\n --b-empty-path-dots-group-fill: oklch(18% 0 0);\n \n --b-empty-simple-ellipse-fill: oklch(25% 0.005 260);\n --b-empty-simple-group-stroke: oklch(40% 0.01 260);\n --b-empty-simple-group-fill: oklch(20% 0.005 260);\n --b-empty-simple-inner-fill: oklch(28% 0.005 260);\n \n --b-empty-description-color: oklch(70% 0.01 260);\n }\n}\n\n/* ─────────────────────────────────────────────\n Base layout\n ───────────────────────────────────────────── */\n.b-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: var(--b-empty-padding);\n text-align: var(--b-empty-text-align);\n box-sizing: border-box;\n}\n\n/* ─────────────────────────────────────────────\n Image area\n ───────────────────────────────────────────── */\n.b-empty__image {\n display: flex;\n align-items: center;\n justify-content: center;\n height: var(--b-empty-image-height);\n margin-bottom: var(--b-empty-image-margin-bottom);\n opacity: var(--b-empty-image-opacity);\n}\n\n.b-empty--simple .b-empty__image {\n height: var(--b-empty-image-height-simple);\n}\n\n.b-empty__svg {\n width: auto;\n height: 100%;\n}\n\n.b-empty__custom-image {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n}\n\n/* ─────────────────────────────────────────────\n Default SVG illustration colors\n ───────────────────────────────────────────── */\n.b-empty__ellipse {\n fill: var(--b-empty-ellipse-fill);\n}\n\n.b-empty__path-bg {\n fill: var(--b-empty-path-bg-fill);\n}\n\n.b-empty__path-main {\n fill: var(--b-empty-path-main-fill);\n}\n\n.b-empty__path-front {\n stroke: var(--b-empty-path-front-stroke);\n fill: var(--b-empty-path-front-fill);\n}\n\n.b-empty__path-panel {\n fill: var(--b-empty-path-panel-fill);\n}\n\n.b-empty__path-dot {\n fill: var(--b-empty-path-dot-fill);\n}\n\n.b-empty__path-dots-group {\n fill: var(--b-empty-path-dots-group-fill);\n}\n\n/* ─────────────────────────────────────────────\n Simple SVG illustration colors\n ───────────────────────────────────────────── */\n.b-empty__simple-ellipse {\n fill: var(--b-empty-simple-ellipse-fill);\n}\n\n.b-empty__simple-group {\n stroke: var(--b-empty-simple-group-stroke);\n fill: var(--b-empty-simple-group-fill);\n}\n\n.b-empty__simple-inner {\n fill: var(--b-empty-simple-inner-fill);\n}\n\n/* ─────────────────────────────────────────────\n Description\n ───────────────────────────────────────────── */\n.b-empty__description {\n color: var(--b-empty-description-color);\n font-size: var(--b-empty-description-font-size);\n line-height: var(--b-empty-description-line-height);\n margin-top: var(--b-empty-description-margin-top);\n}\n\n/* ─────────────────────────────────────────────\n Footer (actions area)\n ───────────────────────────────────────────── */\n.b-empty__footer {\n margin-top: var(--b-empty-footer-margin-top);\n}\n\n/* ─────────────────────────────────────────────\n Reduced motion\n ───────────────────────────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n .b-empty {\n --b-empty-transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":""}
|
package/dist/design-system91.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
/*
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
//#region src/components/BFloatButton/types.ts
|
|
2
|
+
var e = /* @__PURE__ */ function(e) {
|
|
3
|
+
return e.Circle = "circle", e.Square = "square", e;
|
|
4
|
+
}({}), t = /* @__PURE__ */ function(e) {
|
|
5
|
+
return e.Default = "default", e.Primary = "primary", e;
|
|
6
|
+
}({}), n = /* @__PURE__ */ function(e) {
|
|
7
|
+
return e.Click = "click", e.Hover = "hover", e;
|
|
8
|
+
}({}), r = /* @__PURE__ */ function(e) {
|
|
9
|
+
return e.Top = "top", e.Right = "right", e.Bottom = "bottom", e.Left = "left", e;
|
|
10
|
+
}({});
|
|
5
11
|
//#endregion
|
|
6
|
-
export { t as
|
|
12
|
+
export { r as BFloatButtonGroupPlacement, e as BFloatButtonShape, n as BFloatButtonTrigger, t as BFloatButtonType };
|
|
7
13
|
|
|
8
14
|
//# sourceMappingURL=design-system91.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-system91.js","names":[],"sources":["../src/components/BFloatButton/
|
|
1
|
+
{"version":3,"file":"design-system91.js","names":[],"sources":["../src/components/BFloatButton/types.ts"],"sourcesContent":["export enum BFloatButtonShape {\n Circle = 'circle',\n Square = 'square',\n}\n\nexport enum BFloatButtonType {\n Default = 'default',\n Primary = 'primary',\n}\n\nexport enum BFloatButtonTrigger {\n Click = 'click',\n Hover = 'hover',\n}\n\nexport enum BFloatButtonGroupPlacement {\n Top = 'top',\n Right = 'right',\n Bottom = 'bottom',\n Left = 'left',\n}\n\nexport interface BFloatButtonBadgeProps {\n /** Badge count number */\n count?: number;\n /** Whether to show badge even when count is 0 */\n showZero?: boolean;\n /** Max count to display before showing overflow text */\n overflowCount?: number;\n /** Show a red dot instead of a count */\n dot?: boolean;\n /** Custom badge text color */\n color?: string;\n}\n"],"mappings":";AAAA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,SAAA,UACA,EAAA,SAAA;KACD,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,UAAA,WACA,EAAA,UAAA;KACD,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,QAAA,SACA,EAAA,QAAA;KACD,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,MAAA,OACA,EAAA,QAAA,SACA,EAAA,SAAA,UACA,EAAA,OAAA;KACD"}
|
package/dist/design-system92.js
CHANGED
|
@@ -1,57 +1,102 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
1
|
+
import e from "./design-system27.js";
|
|
2
|
+
import { BFloatButtonShape as t, BFloatButtonType as n } from "./design-system91.js";
|
|
3
|
+
import { Fragment as r, computed as i, createBlock as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, createTextVNode as l, defineComponent as u, normalizeClass as d, normalizeStyle as f, openBlock as p, renderSlot as m, resolveDynamicComponent as h, toDisplayString as g, withCtx as _ } from "vue";
|
|
4
|
+
//#region src/components/BFloatButton/BFloatButton.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
+
var v = { class: "b-float-button__body" }, y = {
|
|
6
|
+
class: "b-float-button__icon",
|
|
7
|
+
"aria-hidden": "true"
|
|
8
|
+
}, b = {
|
|
9
|
+
key: 1,
|
|
10
|
+
width: "1em",
|
|
11
|
+
height: "1em",
|
|
12
|
+
viewBox: "0 0 24 24",
|
|
13
|
+
fill: "currentColor",
|
|
14
|
+
"aria-hidden": "true"
|
|
15
|
+
}, x = {
|
|
16
|
+
key: 0,
|
|
17
|
+
class: "b-float-button__description"
|
|
18
|
+
}, S = {
|
|
19
|
+
key: 1,
|
|
20
|
+
class: "b-float-button__tooltip",
|
|
21
|
+
role: "tooltip"
|
|
22
|
+
}, C = /* @__PURE__ */ u({
|
|
23
|
+
__name: "BFloatButton",
|
|
24
|
+
props: {
|
|
25
|
+
icon: {},
|
|
26
|
+
description: {},
|
|
27
|
+
tooltip: {},
|
|
28
|
+
type: { default: () => n.Default },
|
|
29
|
+
shape: { default: () => t.Circle },
|
|
30
|
+
href: {},
|
|
31
|
+
target: { default: "_blank" },
|
|
32
|
+
htmlType: { default: "button" },
|
|
33
|
+
badge: {},
|
|
34
|
+
disabled: {
|
|
35
|
+
type: Boolean,
|
|
36
|
+
default: !1
|
|
37
|
+
},
|
|
38
|
+
ariaLabel: {}
|
|
39
|
+
},
|
|
40
|
+
emits: ["click"],
|
|
41
|
+
setup(t, { emit: n }) {
|
|
42
|
+
let u = n, C = (e) => t.type === e, w = (e) => t.shape === e, T = i(() => {
|
|
43
|
+
if (t.badge && !t.badge.dot) return t.badge.count;
|
|
44
|
+
}), E = i(() => t.badge?.dot ?? !1), D = i(() => t.badge?.overflowCount ?? 99), O = i(() => {
|
|
45
|
+
let e = T.value;
|
|
46
|
+
if (e !== void 0 && !(e === 0 && !t.badge?.showZero)) return e > D.value ? `${D.value}+` : String(e);
|
|
47
|
+
}), k = i(() => E.value || O.value !== void 0);
|
|
48
|
+
function A(e) {
|
|
49
|
+
t.disabled || u("click", e);
|
|
50
|
+
}
|
|
51
|
+
let j = i(() => t.href ? "a" : "button");
|
|
52
|
+
return (n, i) => (p(), a(h(j.value), {
|
|
53
|
+
href: t.href,
|
|
54
|
+
target: t.href ? t.target : void 0,
|
|
55
|
+
type: t.href ? void 0 : t.htmlType,
|
|
56
|
+
disabled: !t.href && t.disabled ? !0 : void 0,
|
|
57
|
+
"aria-disabled": t.href && t.disabled ? "true" : void 0,
|
|
58
|
+
"aria-label": t.ariaLabel ?? t.tooltip,
|
|
59
|
+
title: t.tooltip,
|
|
60
|
+
class: d(["b-float-button", {
|
|
61
|
+
"b-float-button--circle": w("circle"),
|
|
62
|
+
"b-float-button--square": w("square"),
|
|
63
|
+
"b-float-button--default": C("default"),
|
|
64
|
+
"b-float-button--primary": C("primary"),
|
|
65
|
+
"b-float-button--disabled": t.disabled
|
|
66
|
+
}]),
|
|
67
|
+
onClick: A
|
|
68
|
+
}, {
|
|
69
|
+
default: _(() => [
|
|
70
|
+
k.value ? (p(), s("span", {
|
|
71
|
+
key: 0,
|
|
72
|
+
class: d(["b-float-button__badge", {
|
|
73
|
+
"b-float-button__badge--dot": E.value,
|
|
74
|
+
"b-float-button__badge--count": !E.value
|
|
75
|
+
}]),
|
|
76
|
+
style: f(t.badge?.color ? { backgroundColor: t.badge.color } : void 0),
|
|
77
|
+
"aria-hidden": "true"
|
|
78
|
+
}, [E.value ? o("", !0) : (p(), s(r, { key: 0 }, [l(g(O.value), 1)], 64))], 6)) : o("", !0),
|
|
79
|
+
c("span", v, [c("span", y, [m(n.$slots, "icon", {}, () => [t.icon ? (p(), a(e, {
|
|
80
|
+
key: 0,
|
|
81
|
+
icon: t.icon,
|
|
82
|
+
size: "md"
|
|
83
|
+
}, null, 8, ["icon"])) : (p(), s("svg", b, [...i[0] ||= [c("path", { d: "M19 13H13v6h-2v-6H5v-2h6V5h2v6h6v2z" }, null, -1)]]))])]), (n.$slots.description || t.description) && w("square") ? (p(), s("span", x, [m(n.$slots, "description", {}, () => [l(g(t.description), 1)])])) : o("", !0)]),
|
|
84
|
+
n.$slots.tooltip || t.tooltip && !t.ariaLabel ? (p(), s("span", S, [m(n.$slots, "tooltip", {}, () => [l(g(t.tooltip), 1)])])) : o("", !0)
|
|
85
|
+
]),
|
|
86
|
+
_: 3
|
|
87
|
+
}, 8, [
|
|
88
|
+
"href",
|
|
89
|
+
"target",
|
|
90
|
+
"type",
|
|
91
|
+
"disabled",
|
|
92
|
+
"aria-disabled",
|
|
93
|
+
"aria-label",
|
|
94
|
+
"title",
|
|
95
|
+
"class"
|
|
96
|
+
]));
|
|
34
97
|
}
|
|
35
|
-
|
|
36
|
-
u.value.errors = [], u.value.isValid = !0, u.value.dirty = !1, u.value.touched = !1;
|
|
37
|
-
}
|
|
38
|
-
function p() {
|
|
39
|
-
u.value.touched = !0;
|
|
40
|
-
}
|
|
41
|
-
let m = t(o.FormValidation, void 0);
|
|
42
|
-
return m && (m[r] = u), n(() => {
|
|
43
|
-
m && delete m[r];
|
|
44
|
-
}), {
|
|
45
|
-
errors: e(() => u.value.errors),
|
|
46
|
-
isValid: e(() => u.value.isValid),
|
|
47
|
-
dirty: e(() => u.value.dirty),
|
|
48
|
-
touched: e(() => u.value.touched),
|
|
49
|
-
validate: d,
|
|
50
|
-
reset: f,
|
|
51
|
-
markTouched: p
|
|
52
|
-
};
|
|
53
|
-
}
|
|
98
|
+
});
|
|
54
99
|
//#endregion
|
|
55
|
-
export {
|
|
100
|
+
export { C as default };
|
|
56
101
|
|
|
57
102
|
//# sourceMappingURL=design-system92.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-system92.js","names":[],"sources":["../src/composables/useValidation.ts"],"sourcesContent":["import {\n computed,\n inject,\n onBeforeUnmount,\n provide,\n ref,\n watch,\n type ComputedRef,\n type InjectionKey,\n type Ref,\n} from 'vue';\nimport type { ZodType } from 'zod';\n\n/**\n * Types\n */\nexport interface ValidationFieldState<T = unknown> {\n fieldValue: Ref<T>;\n errors: string[];\n isValid: boolean;\n dirty: boolean;\n touched: boolean;\n validate: () => boolean;\n reset: () => void;\n markTouched: () => void;\n}\n\nexport const PIKey = {\n FormValidation: Symbol() as InjectionKey<Record<string, Ref<ValidationFieldState>>>,\n};\n\n/**\n * Form-level validation composable.\n * Creates or injects a shared validation registry, providing\n * methods to validate/reset all registered fields.\n */\nexport function useValidationForm() {\n let fields = inject(PIKey.FormValidation, undefined);\n if (!fields) {\n fields = {};\n provide(PIKey.FormValidation, fields);\n }\n\n const validateAll = (): boolean => {\n if (!fields) return false;\n return Object.values(fields)\n .map((field) => field.value.validate())\n .every((valid) => valid);\n };\n\n const resetAll = () => {\n if (!fields) return;\n Object.values(fields).forEach((field) => field.value.reset());\n };\n\n const isValid = computed(() => {\n if (!fields) return true;\n return Object.values(fields).every((field) => field.value.isValid);\n });\n\n return {\n fields,\n validateAll,\n resetAll,\n isValid,\n };\n}\n\n/**\n * Field-level validation composable.\n * Registers the field into the form's validation registry,\n * validates using the provided Zod schema, and tracks dirty/touched state.\n */\nexport function useValidationField<T>(key: string, fieldValue: Ref<T>, schema: ZodType<T>) {\n const initialValue = structuredClone(fieldValue.value);\n\n const fieldState = ref<ValidationFieldState<T>>({\n fieldValue,\n errors: [],\n isValid: true,\n dirty: false,\n touched: false,\n validate,\n reset,\n markTouched,\n });\n\n watch(\n fieldValue,\n (newVal) => {\n fieldState.value.dirty = !Object.is(newVal, initialValue);\n },\n { deep: true },\n );\n\n function validate(): boolean {\n const result = schema.safeParse(fieldValue.value);\n\n if (result.success) {\n fieldState.value.errors = [];\n fieldState.value.isValid = true;\n } else {\n fieldState.value.errors = result.error.issues.map((issue) => issue.message);\n fieldState.value.isValid = false;\n }\n\n return fieldState.value.isValid;\n }\n\n function reset() {\n fieldState.value.errors = [];\n fieldState.value.isValid = true;\n fieldState.value.dirty = false;\n fieldState.value.touched = false;\n }\n\n function markTouched() {\n fieldState.value.touched = true;\n }\n\n // Register into form\n const formFields = inject(PIKey.FormValidation, undefined);\n if (formFields) {\n formFields[key] = fieldState as Ref<ValidationFieldState>;\n }\n\n onBeforeUnmount(() => {\n if (formFields) {\n delete formFields[key];\n }\n });\n\n const errors = computed(() => fieldState.value.errors);\n const isValid = computed(() => fieldState.value.isValid);\n const dirty = computed(() => fieldState.value.dirty);\n const touched = computed(() => fieldState.value.touched);\n\n return {\n errors,\n isValid,\n dirty,\n touched,\n validate,\n reset,\n markTouched,\n } as {\n errors: ComputedRef<string[]>;\n isValid: ComputedRef<boolean>;\n dirty: ComputedRef<boolean>;\n touched: ComputedRef<boolean>;\n validate: () => boolean;\n reset: () => void;\n markTouched: () => void;\n };\n}\n"],"mappings":";;AA2BA,IAAa,IAAQ,EACnB,gBAAgB,QAAQ,EACzB;AAOD,SAAgB,IAAoB;CAClC,IAAI,IAAS,EAAO,EAAM,gBAAgB,KAAA,EAAU;AACpD,CAAK,MACH,IAAS,EAAE,EACX,EAAQ,EAAM,gBAAgB,EAAO;CAGvC,IAAM,UACC,IACE,OAAO,OAAO,EAAO,CACzB,KAAK,MAAU,EAAM,MAAM,UAAU,CAAC,CACtC,OAAO,MAAU,EAAM,GAHN,IAMhB,UAAiB;AAChB,OACL,OAAO,OAAO,EAAO,CAAC,SAAS,MAAU,EAAM,MAAM,OAAO,CAAC;IAGzD,IAAU,QACT,IACE,OAAO,OAAO,EAAO,CAAC,OAAO,MAAU,EAAM,MAAM,QAAQ,GAD9C,GAEpB;AAEF,QAAO;EACL;EACA;EACA;EACA;EACD;;AAQH,SAAgB,EAAsB,GAAa,GAAoB,GAAoB;CACzF,IAAM,IAAe,gBAAgB,EAAW,MAAM,EAEhD,IAAa,EAA6B;EAC9C;EACA,QAAQ,EAAE;EACV,SAAS;EACT,OAAO;EACP,SAAS;EACT;EACA;EACA;EACD,CAAC;AAEF,GACE,IACC,MAAW;AACV,IAAW,MAAM,QAAQ,CAAC,OAAO,GAAG,GAAQ,EAAa;IAE3D,EAAE,MAAM,IAAM,CACf;CAED,SAAS,IAAoB;EAC3B,IAAM,IAAS,EAAO,UAAU,EAAW,MAAM;AAUjD,SARI,EAAO,WACT,EAAW,MAAM,SAAS,EAAE,EAC5B,EAAW,MAAM,UAAU,OAE3B,EAAW,MAAM,SAAS,EAAO,MAAM,OAAO,KAAK,MAAU,EAAM,QAAQ,EAC3E,EAAW,MAAM,UAAU,KAGtB,EAAW,MAAM;;CAG1B,SAAS,IAAQ;AAIf,EAHA,EAAW,MAAM,SAAS,EAAE,EAC5B,EAAW,MAAM,UAAU,IAC3B,EAAW,MAAM,QAAQ,IACzB,EAAW,MAAM,UAAU;;CAG7B,SAAS,IAAc;AACrB,IAAW,MAAM,UAAU;;CAI7B,IAAM,IAAa,EAAO,EAAM,gBAAgB,KAAA,EAAU;AAgB1D,QAfI,MACF,EAAW,KAAO,IAGpB,QAAsB;AACpB,EAAI,KACF,OAAO,EAAW;GAEpB,EAOK;EACL,QANa,QAAe,EAAW,MAAM,OAAO;EAOpD,SANc,QAAe,EAAW,MAAM,QAAQ;EAOtD,OANY,QAAe,EAAW,MAAM,MAAM;EAOlD,SANc,QAAe,EAAW,MAAM,QAAQ;EAOtD;EACA;EACA;EACD"}
|
|
1
|
+
{"version":3,"file":"design-system92.js","names":["$slots"],"sources":["../src/components/BFloatButton/BFloatButton.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport BIcon from '@/components/BIcon/BIcon.vue';\nimport { type BIconName } from '@/components/BIcon/BIconEnum.ts';\nimport { computed } from 'vue';\nimport type { BFloatButtonBadgeProps } from './types.ts';\nimport { BFloatButtonShape, BFloatButtonType } from './types.ts';\n\n// ─────────────────────────────────────────────\n// Props & emits\n// ─────────────────────────────────────────────\nconst {\n icon,\n description,\n tooltip,\n type = BFloatButtonType.Default,\n shape = BFloatButtonShape.Circle,\n href,\n target = '_blank',\n htmlType = 'button',\n badge,\n disabled = false,\n ariaLabel,\n} = defineProps<{\n /**\n * Icon name for the float button.\n * @example 'arrow-up', 'plus', 'question'\n */\n icon?: `${BIconName}`;\n /**\n * Description text shown below the icon (square shape only).\n */\n description?: string;\n /**\n * Tooltip text shown on hover.\n */\n tooltip?: string;\n /**\n * Visual type of the button.\n * @default 'default'\n */\n type?: `${BFloatButtonType}`;\n /**\n * Shape of the button.\n * @default 'circle'\n */\n shape?: `${BFloatButtonShape}`;\n /**\n * When set, renders as an anchor element with this href.\n */\n href?: string;\n /**\n * Link target attribute (only used with href).\n * @default '_blank'\n */\n target?: string;\n /**\n * HTML button type attribute (only used when not href).\n * @default 'button'\n */\n htmlType?: 'button' | 'submit' | 'reset';\n /**\n * Badge configuration to display on the button.\n */\n badge?: BFloatButtonBadgeProps;\n /**\n * Whether the button is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Accessible label for the button (important when no visible text).\n */\n ariaLabel?: string;\n}>();\n\nconst emit = defineEmits<{\n /** Emitted when the button is clicked. */\n (e: 'click', event: MouseEvent): void;\n}>();\n\ndefineSlots<{\n /** Custom icon content. */\n icon?(): unknown;\n /** Description content (square shape only). */\n description?(): unknown;\n /** Tooltip content. */\n tooltip?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Computed helpers\n// ─────────────────────────────────────────────\nconst isType = (value: `${BFloatButtonType}`) => type === value;\nconst isShape = (value: `${BFloatButtonShape}`) => shape === value;\n\nconst badgeCount = computed(() => {\n if (!badge) return undefined;\n if (badge.dot) return undefined;\n return badge.count;\n});\n\nconst showBadgeDot = computed(() => badge?.dot ?? false);\n\nconst badgeOverflow = computed(() => badge?.overflowCount ?? 99);\n\nconst badgeDisplayCount = computed(() => {\n const count = badgeCount.value;\n if (count === undefined) return undefined;\n if (count === 0 && !badge?.showZero) return undefined;\n return count > badgeOverflow.value ? `${badgeOverflow.value}+` : String(count);\n});\n\nconst showBadge = computed(() => {\n return showBadgeDot.value || badgeDisplayCount.value !== undefined;\n});\n\nfunction handleClick(event: MouseEvent) {\n if (disabled) return;\n emit('click', event);\n}\n\nconst rootTag = computed(() => (href ? 'a' : 'button'));\n</script>\n\n<template>\n <component\n :is=\"rootTag\"\n :href=\"href\"\n :target=\"href ? target : undefined\"\n :type=\"!href ? htmlType : undefined\"\n :disabled=\"!href && disabled ? true : undefined\"\n :aria-disabled=\"href && disabled ? 'true' : undefined\"\n :aria-label=\"ariaLabel ?? tooltip\"\n :title=\"tooltip\"\n :class=\"[\n 'b-float-button',\n {\n 'b-float-button--circle': isShape('circle'),\n 'b-float-button--square': isShape('square'),\n 'b-float-button--default': isType('default'),\n 'b-float-button--primary': isType('primary'),\n 'b-float-button--disabled': disabled,\n },\n ]\"\n @click=\"handleClick\"\n >\n <!-- Badge -->\n <span\n v-if=\"showBadge\"\n class=\"b-float-button__badge\"\n :class=\"{\n 'b-float-button__badge--dot': showBadgeDot,\n 'b-float-button__badge--count': !showBadgeDot,\n }\"\n :style=\"badge?.color ? { backgroundColor: badge.color } : undefined\"\n aria-hidden=\"true\"\n >\n <template v-if=\"!showBadgeDot\">{{ badgeDisplayCount }}</template>\n </span>\n\n <!-- Body -->\n <span class=\"b-float-button__body\">\n <!-- Icon -->\n <span class=\"b-float-button__icon\" aria-hidden=\"true\">\n <slot name=\"icon\">\n <BIcon v-if=\"icon\" :icon=\"icon\" size=\"md\" />\n <!-- Default plus icon when no icon prop or slot is provided -->\n <svg\n v-else\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M19 13H13v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n </svg>\n </slot>\n </span>\n\n <!-- Description (square shape only) -->\n <span\n v-if=\"($slots.description || description) && isShape('square')\"\n class=\"b-float-button__description\"\n >\n <slot name=\"description\">{{ description }}</slot>\n </span>\n </span>\n\n <!-- Tooltip overlay -->\n <span\n v-if=\"$slots.tooltip || (tooltip && !ariaLabel)\"\n class=\"b-float-button__tooltip\"\n role=\"tooltip\"\n >\n <slot name=\"tooltip\">{{ tooltip }}</slot>\n </span>\n </component>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (tokens)\n scoped to .b-float-button — never on :root\n ──────────────────────────────────────────── */\n.b-float-button {\n /* Size tokens — AntD: floatButtonSize (40px) */\n --b-float-button-size: 40px;\n /* Icon size — AntD: floatButtonIconSize (21px) */\n --b-float-button-icon-size: 1.3125rem;\n /* Background — AntD: colorBgContainer */\n --b-float-button-bg: #fff;\n /* Primary background */\n --b-float-button-primary-bg: oklch(55% 0.2 264);\n /* Primary hover background */\n --b-float-button-primary-bg-hover: oklch(62% 0.2 264);\n /* Default hover background */\n --b-float-button-bg-hover: oklch(96% 0 0);\n /* Text / icon color — AntD: colorText */\n --b-float-button-color: oklch(20% 0 0);\n /* Primary text color */\n --b-float-button-primary-color: #fff;\n /* Border radius (circle: 50%, square: 8px) */\n --b-float-button-border-radius-circle: 50%;\n --b-float-button-border-radius-square: 0.5rem;\n /* Shadow — AntD: boxShadowSecondary */\n --b-float-button-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n /* Bottom inset — AntD: floatButtonInsetBlockEnd (48px) */\n --b-float-button-inset-block-end: 3rem;\n /* Inline inset — AntD: floatButtonInsetInlineEnd (24px) */\n --b-float-button-inset-inline-end: 1.5rem;\n /* z-index — AntD: zIndexPopupBase (1000) */\n --b-float-button-z-index: 1000;\n /* Transition */\n --b-float-button-transition-duration: 200ms;\n /* Description font size (sm) */\n --b-float-button-description-font-size: 0.75rem;\n /* Badge */\n --b-float-button-badge-bg: oklch(57% 0.22 25);\n --b-float-button-badge-color: #fff;\n --b-float-button-badge-font-size: 0.6875rem;\n /* Tooltip */\n --b-float-button-tooltip-bg: oklch(20% 0.02 260);\n --b-float-button-tooltip-color: oklch(96% 0 0);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-float-button,\n[data-prefers-color='dark'].b-float-button {\n --b-float-button-bg: oklch(20% 0.02 260);\n --b-float-button-bg-hover: oklch(28% 0.02 260);\n --b-float-button-color: oklch(88% 0.01 260);\n --b-float-button-primary-bg: oklch(50% 0.2 264);\n --b-float-button-primary-bg-hover: oklch(57% 0.2 264);\n --b-float-button-shadow:\n 0 6px 16px 0 oklch(0% 0 0 / 30%), 0 3px 6px -4px oklch(0% 0 0 / 40%),\n 0 9px 28px 8px oklch(0% 0 0 / 25%);\n --b-float-button-tooltip-bg: oklch(30% 0.02 260);\n --b-float-button-tooltip-color: oklch(88% 0.01 260);\n --b-float-button-badge-bg: oklch(55% 0.22 25);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'].b-float-button {\n --b-float-button-bg: oklch(20% 0.02 260);\n --b-float-button-bg-hover: oklch(28% 0.02 260);\n --b-float-button-color: oklch(88% 0.01 260);\n --b-float-button-primary-bg: oklch(50% 0.2 264);\n --b-float-button-primary-bg-hover: oklch(57% 0.2 264);\n --b-float-button-shadow:\n 0 6px 16px 0 oklch(0% 0 0 / 30%), 0 3px 6px -4px oklch(0% 0 0 / 40%),\n 0 9px 28px 8px oklch(0% 0 0 / 25%);\n --b-float-button-tooltip-bg: oklch(30% 0.02 260);\n --b-float-button-tooltip-color: oklch(88% 0.01 260);\n --b-float-button-badge-bg: oklch(55% 0.22 25);\n }\n}\n\n/* ─────────────────────────────────────────────\n Base button\n ───────────────────────────────────────────── */\n.b-float-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: var(--b-float-button-size);\n height: var(--b-float-button-size);\n min-height: var(--b-float-button-size);\n background-color: var(--b-float-button-bg);\n color: var(--b-float-button-color);\n border: none;\n padding: 0;\n cursor: pointer;\n box-shadow: var(--b-float-button-shadow);\n text-decoration: none;\n transition:\n background-color var(--b-float-button-transition-duration) ease,\n color var(--b-float-button-transition-duration) ease,\n box-shadow var(--b-float-button-transition-duration) ease,\n transform var(--b-float-button-transition-duration) ease;\n outline-offset: 2px;\n\n /* Tooltip hidden by default */\n &:hover .b-float-button__tooltip {\n opacity: 1;\n pointer-events: auto;\n transform: translateX(-50%) scale(1);\n }\n}\n\n/* ── Shape: circle ── */\n.b-float-button--circle {\n border-radius: var(--b-float-button-border-radius-circle);\n}\n\n/* ── Shape: square ── */\n.b-float-button--square {\n border-radius: var(--b-float-button-border-radius-square);\n height: auto;\n min-height: var(--b-float-button-size);\n padding: 0.5rem;\n}\n\n/* ── Type: default ── */\n.b-float-button--default {\n background-color: var(--b-float-button-bg);\n color: var(--b-float-button-color);\n\n &:not(.b-float-button--disabled):hover {\n background-color: var(--b-float-button-bg-hover);\n }\n}\n\n/* ── Type: primary ── */\n.b-float-button--primary {\n background-color: var(--b-float-button-primary-bg);\n color: var(--b-float-button-primary-color);\n\n &:not(.b-float-button--disabled):hover {\n background-color: var(--b-float-button-primary-bg-hover);\n }\n}\n\n/* ── Disabled state ── */\n.b-float-button--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* ── Focus visible ring ── */\n.b-float-button:focus-visible {\n outline: 2px solid var(--b-float-button-primary-bg);\n}\n\n/* ─────────────────────────────────────────────\n Body (icon + description wrapper)\n ───────────────────────────────────────────── */\n.b-float-button__body {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.125rem;\n}\n\n/* ─────────────────────────────────────────────\n Icon\n ───────────────────────────────────────────── */\n.b-float-button__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--b-float-button-icon-size);\n line-height: 1;\n}\n\n/* ─────────────────────────────────────────────\n Description\n ───────────────────────────────────────────── */\n.b-float-button__description {\n font-size: var(--b-float-button-description-font-size);\n line-height: 1.2;\n text-align: center;\n white-space: nowrap;\n}\n\n/* ─────────────────────────────────────────────\n Tooltip overlay\n ───────────────────────────────────────────── */\n.b-float-button__tooltip {\n position: absolute;\n right: calc(100% + 0.75rem);\n top: 50%;\n transform: translateX(-50%) scale(0.95);\n white-space: nowrap;\n background: var(--b-float-button-tooltip-bg);\n color: var(--b-float-button-tooltip-color);\n font-size: 0.875rem;\n padding: 0.25rem 0.5rem;\n border-radius: 0.375rem;\n pointer-events: none;\n opacity: 0;\n transition:\n opacity var(--b-float-button-transition-duration) ease,\n transform var(--b-float-button-transition-duration) ease;\n\n /* Arrow */\n &::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 100%;\n transform: translateY(-50%);\n border: 5px solid transparent;\n border-left-color: var(--b-float-button-tooltip-bg);\n }\n}\n\n/* ─────────────────────────────────────────────\n Badge\n ───────────────────────────────────────────── */\n.b-float-button__badge {\n position: absolute;\n top: -4px;\n right: -4px;\n z-index: 1;\n background: var(--b-float-button-badge-bg);\n color: var(--b-float-button-badge-color);\n font-size: var(--b-float-button-badge-font-size);\n line-height: 1;\n border-radius: 10px;\n padding: 2px 5px;\n min-width: 1.25rem;\n text-align: center;\n box-shadow: 0 0 0 2px var(--b-float-button-bg);\n}\n\n.b-float-button__badge--dot {\n width: 8px;\n height: 8px;\n min-width: 0;\n padding: 0;\n border-radius: 50%;\n}\n\n/* ─────────────────────────────────────────────\n Reduced motion\n ───────────────────────────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n .b-float-button,\n .b-float-button__tooltip {\n transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2EA,IAAM,IAAO,GAiBP,KAAU,MAAiC,EAAA,SAAS,GACpD,KAAW,MAAkC,EAAA,UAAU,GAEvD,IAAa,QAAe;AAC3B,SAAA,SACD,GAAA,MAAM,IACV,QAAO,EAAA,MAAM;IACb,EAEI,IAAe,QAAe,EAAA,OAAO,OAAO,GAAM,EAElD,IAAgB,QAAe,EAAA,OAAO,iBAAiB,GAAG,EAE1D,IAAoB,QAAe;GACvC,IAAM,IAAQ,EAAW;AACrB,aAAU,KAAA,KACV,QAAU,KAAK,CAAC,EAAA,OAAO,UAC3B,QAAO,IAAQ,EAAc,QAAQ,GAAG,EAAc,MAAM,KAAK,OAAO,EAAM;IAC9E,EAEI,IAAY,QACT,EAAa,SAAS,EAAkB,UAAU,KAAA,EACzD;EAEF,SAAS,EAAY,GAAmB;AAClC,KAAA,YACJ,EAAK,SAAS,EAAM;;EAGtB,IAAM,IAAU,QAAgB,EAAA,OAAO,MAAM,SAAU;yBAIrD,EAwEY,EAvEL,EAAA,MAAO,EAAA;GACX,MAAM,EAAA;GACN,QAAQ,EAAA,OAAO,EAAA,SAAS,KAAA;GACxB,MAAO,EAAA,OAAkB,KAAA,IAAX,EAAA;GACd,UAAQ,CAAG,EAAA,QAAQ,EAAA,WAAQ,KAAU,KAAA;GACrC,iBAAe,EAAA,QAAQ,EAAA,WAAQ,SAAY,KAAA;GAC3C,cAAY,EAAA,aAAa,EAAA;GACzB,OAAO,EAAA;GACP,OAAK,EAAA,CAAA,kBAAA;8BAAsE,EAAO,SAAA;8BAA8C,EAAO,SAAA;+BAA+C,EAAM,UAAA;+BAAgD,EAAM,UAAA;gCAAiD,EAAA;;GAUnS,SAAO;;oBAcD;IAVC,EAAA,SAAA,GAAA,EADR,EAWO,QAAA;;KATL,OAAK,EAAA,CAAC,yBAAuB;oCACmB,EAAA;uCAAuD,EAAA;;KAItG,OAAK,EAAE,EAAA,OAAO,QAAK,EAAA,iBAAsB,EAAA,MAAM,OAAK,GAAK,KAAA,EAAS;KACnE,eAAY;QAEK,EAAA,QAAkC,EAAA,IAAA,GAAA,IAAlC,GAAA,EAAjB,EAAiE,GAAA,EAAA,KAAA,GAAA,EAAA,CAAA,EAAA,EAA/B,EAAA,MAAiB,EAAA,EAAA,CAAA,EAAA,GAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA;IAIrD,EA0BO,QA1BP,GA0BO,CAxBL,EAeO,QAfP,GAeO,CAdL,EAaO,EAAA,QAAA,QAAA,EAAA,QAAA,CAZQ,EAAA,QAAA,GAAA,EAAb,EAA4C,GAAA;;KAAxB,MAAM,EAAA;KAAM,MAAK;mCAErC,EASM,OATN,GASM,CAAA,GAAA,AAAA,EAAA,OAAA,CADJ,EAAgD,QAAA,EAA1C,GAAE,uCAAqC,EAAA,MAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,GAO1CA,EAAAA,OAAO,eAAe,EAAA,gBAAgB,EAAO,SAAA,IAAA,GAAA,EADtD,EAKO,QALP,GAKO,CADL,EAAiD,EAAA,QAAA,eAAA,EAAA,QAAA,CAAA,EAAA,EAArB,EAAA,YAAW,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,IAAA,GAAA,CAAA,CAAA;IAMnCA,EAAAA,OAAO,WAAY,EAAA,WAAO,CAAK,EAAA,aAAA,GAAA,EADvC,EAMO,QANP,GAMO,CADL,EAAyC,EAAA,QAAA,WAAA,EAAA,QAAA,CAAA,EAAA,EAAjB,EAAA,QAAO,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,IAAA,GAAA"}
|
package/dist/design-system94.js
CHANGED
|
@@ -1,16 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
return e.Left = "left", e.Right = "right", e;
|
|
6
|
-
}({}), n = /* @__PURE__ */ function(e) {
|
|
7
|
-
return e.Success = "success", e.Warning = "warning", e.Error = "error", e.Validating = "validating", e;
|
|
8
|
-
}({}), r = /* @__PURE__ */ function(e) {
|
|
9
|
-
return e.Required = "required", e.Optional = "optional", e;
|
|
10
|
-
}({}), i = /* @__PURE__ */ function(e) {
|
|
11
|
-
return e.Change = "change", e.Blur = "blur", e.Submit = "submit", e;
|
|
12
|
-
}({});
|
|
1
|
+
import e from "./design-system92.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
//#region src/components/BFloatButton/BFloatButton.vue
|
|
4
|
+
var t = e;
|
|
13
5
|
//#endregion
|
|
14
|
-
export { t as
|
|
6
|
+
export { t as default };
|
|
15
7
|
|
|
16
8
|
//# sourceMappingURL=design-system94.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-system94.js","names":[],"sources":["../src/components/BForm/types.ts"],"sourcesContent":["export enum BFormLayout {\n Horizontal = 'horizontal',\n Vertical = 'vertical',\n Inline = 'inline',\n}\n\nexport enum BFormLabelAlign {\n Left = 'left',\n Right = 'right',\n}\n\nexport enum BFormValidateStatus {\n Success = 'success',\n Warning = 'warning',\n Error = 'error',\n Validating = 'validating',\n}\n\nexport enum BFormRequiredMark {\n Required = 'required',\n Optional = 'optional',\n}\n\nexport enum BFormValidateTrigger {\n Change = 'change',\n Blur = 'blur',\n Submit = 'submit',\n}\n\nexport interface BFormFieldError {\n name: string;\n errors: string[];\n}\n\nexport interface BFormValidateResult {\n values: Record<string, unknown>;\n errorFields: BFormFieldError[];\n}\n\nexport interface BFormItemContext {\n layout: `${BFormLayout}`;\n labelAlign: `${BFormLabelAlign}`;\n labelWidth: string | undefined;\n colon: boolean;\n disabled: boolean;\n requiredMark: boolean | `${BFormRequiredMark}`;\n validateTrigger: `${BFormValidateTrigger}` | `${BFormValidateTrigger}`[];\n model: Record<string, unknown> | undefined;\n}\n\nexport interface BFormInstance {\n validate: () => boolean;\n resetFields: (names?: string[]) => void;\n scrollToField: (name: string, options?: ScrollIntoViewOptions) => void;\n isValid: boolean;\n}\n"],"mappings":";AAAA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,aAAA,cACA,EAAA,WAAA,YACA,EAAA,SAAA;KACD,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,OAAA,QACA,EAAA,QAAA;KACD,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,UAAA,WACA,EAAA,UAAA,WACA,EAAA,QAAA,SACA,EAAA,aAAA;KACD,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,WAAA,YACA,EAAA,WAAA;KACD,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,SAAA,UACA,EAAA,OAAA,QACA,EAAA,SAAA;KACD"}
|
|
1
|
+
{"version":3,"file":"design-system94.js","names":[],"sources":["../src/components/BFloatButton/BFloatButton.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport BIcon from '@/components/BIcon/BIcon.vue';\nimport { type BIconName } from '@/components/BIcon/BIconEnum.ts';\nimport { computed } from 'vue';\nimport type { BFloatButtonBadgeProps } from './types.ts';\nimport { BFloatButtonShape, BFloatButtonType } from './types.ts';\n\n// ─────────────────────────────────────────────\n// Props & emits\n// ─────────────────────────────────────────────\nconst {\n icon,\n description,\n tooltip,\n type = BFloatButtonType.Default,\n shape = BFloatButtonShape.Circle,\n href,\n target = '_blank',\n htmlType = 'button',\n badge,\n disabled = false,\n ariaLabel,\n} = defineProps<{\n /**\n * Icon name for the float button.\n * @example 'arrow-up', 'plus', 'question'\n */\n icon?: `${BIconName}`;\n /**\n * Description text shown below the icon (square shape only).\n */\n description?: string;\n /**\n * Tooltip text shown on hover.\n */\n tooltip?: string;\n /**\n * Visual type of the button.\n * @default 'default'\n */\n type?: `${BFloatButtonType}`;\n /**\n * Shape of the button.\n * @default 'circle'\n */\n shape?: `${BFloatButtonShape}`;\n /**\n * When set, renders as an anchor element with this href.\n */\n href?: string;\n /**\n * Link target attribute (only used with href).\n * @default '_blank'\n */\n target?: string;\n /**\n * HTML button type attribute (only used when not href).\n * @default 'button'\n */\n htmlType?: 'button' | 'submit' | 'reset';\n /**\n * Badge configuration to display on the button.\n */\n badge?: BFloatButtonBadgeProps;\n /**\n * Whether the button is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Accessible label for the button (important when no visible text).\n */\n ariaLabel?: string;\n}>();\n\nconst emit = defineEmits<{\n /** Emitted when the button is clicked. */\n (e: 'click', event: MouseEvent): void;\n}>();\n\ndefineSlots<{\n /** Custom icon content. */\n icon?(): unknown;\n /** Description content (square shape only). */\n description?(): unknown;\n /** Tooltip content. */\n tooltip?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Computed helpers\n// ─────────────────────────────────────────────\nconst isType = (value: `${BFloatButtonType}`) => type === value;\nconst isShape = (value: `${BFloatButtonShape}`) => shape === value;\n\nconst badgeCount = computed(() => {\n if (!badge) return undefined;\n if (badge.dot) return undefined;\n return badge.count;\n});\n\nconst showBadgeDot = computed(() => badge?.dot ?? false);\n\nconst badgeOverflow = computed(() => badge?.overflowCount ?? 99);\n\nconst badgeDisplayCount = computed(() => {\n const count = badgeCount.value;\n if (count === undefined) return undefined;\n if (count === 0 && !badge?.showZero) return undefined;\n return count > badgeOverflow.value ? `${badgeOverflow.value}+` : String(count);\n});\n\nconst showBadge = computed(() => {\n return showBadgeDot.value || badgeDisplayCount.value !== undefined;\n});\n\nfunction handleClick(event: MouseEvent) {\n if (disabled) return;\n emit('click', event);\n}\n\nconst rootTag = computed(() => (href ? 'a' : 'button'));\n</script>\n\n<template>\n <component\n :is=\"rootTag\"\n :href=\"href\"\n :target=\"href ? target : undefined\"\n :type=\"!href ? htmlType : undefined\"\n :disabled=\"!href && disabled ? true : undefined\"\n :aria-disabled=\"href && disabled ? 'true' : undefined\"\n :aria-label=\"ariaLabel ?? tooltip\"\n :title=\"tooltip\"\n :class=\"[\n 'b-float-button',\n {\n 'b-float-button--circle': isShape('circle'),\n 'b-float-button--square': isShape('square'),\n 'b-float-button--default': isType('default'),\n 'b-float-button--primary': isType('primary'),\n 'b-float-button--disabled': disabled,\n },\n ]\"\n @click=\"handleClick\"\n >\n <!-- Badge -->\n <span\n v-if=\"showBadge\"\n class=\"b-float-button__badge\"\n :class=\"{\n 'b-float-button__badge--dot': showBadgeDot,\n 'b-float-button__badge--count': !showBadgeDot,\n }\"\n :style=\"badge?.color ? { backgroundColor: badge.color } : undefined\"\n aria-hidden=\"true\"\n >\n <template v-if=\"!showBadgeDot\">{{ badgeDisplayCount }}</template>\n </span>\n\n <!-- Body -->\n <span class=\"b-float-button__body\">\n <!-- Icon -->\n <span class=\"b-float-button__icon\" aria-hidden=\"true\">\n <slot name=\"icon\">\n <BIcon v-if=\"icon\" :icon=\"icon\" size=\"md\" />\n <!-- Default plus icon when no icon prop or slot is provided -->\n <svg\n v-else\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M19 13H13v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n </svg>\n </slot>\n </span>\n\n <!-- Description (square shape only) -->\n <span\n v-if=\"($slots.description || description) && isShape('square')\"\n class=\"b-float-button__description\"\n >\n <slot name=\"description\">{{ description }}</slot>\n </span>\n </span>\n\n <!-- Tooltip overlay -->\n <span\n v-if=\"$slots.tooltip || (tooltip && !ariaLabel)\"\n class=\"b-float-button__tooltip\"\n role=\"tooltip\"\n >\n <slot name=\"tooltip\">{{ tooltip }}</slot>\n </span>\n </component>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (tokens)\n scoped to .b-float-button — never on :root\n ──────────────────────────────────────────── */\n.b-float-button {\n /* Size tokens — AntD: floatButtonSize (40px) */\n --b-float-button-size: 40px;\n /* Icon size — AntD: floatButtonIconSize (21px) */\n --b-float-button-icon-size: 1.3125rem;\n /* Background — AntD: colorBgContainer */\n --b-float-button-bg: #fff;\n /* Primary background */\n --b-float-button-primary-bg: oklch(55% 0.2 264);\n /* Primary hover background */\n --b-float-button-primary-bg-hover: oklch(62% 0.2 264);\n /* Default hover background */\n --b-float-button-bg-hover: oklch(96% 0 0);\n /* Text / icon color — AntD: colorText */\n --b-float-button-color: oklch(20% 0 0);\n /* Primary text color */\n --b-float-button-primary-color: #fff;\n /* Border radius (circle: 50%, square: 8px) */\n --b-float-button-border-radius-circle: 50%;\n --b-float-button-border-radius-square: 0.5rem;\n /* Shadow — AntD: boxShadowSecondary */\n --b-float-button-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n /* Bottom inset — AntD: floatButtonInsetBlockEnd (48px) */\n --b-float-button-inset-block-end: 3rem;\n /* Inline inset — AntD: floatButtonInsetInlineEnd (24px) */\n --b-float-button-inset-inline-end: 1.5rem;\n /* z-index — AntD: zIndexPopupBase (1000) */\n --b-float-button-z-index: 1000;\n /* Transition */\n --b-float-button-transition-duration: 200ms;\n /* Description font size (sm) */\n --b-float-button-description-font-size: 0.75rem;\n /* Badge */\n --b-float-button-badge-bg: oklch(57% 0.22 25);\n --b-float-button-badge-color: #fff;\n --b-float-button-badge-font-size: 0.6875rem;\n /* Tooltip */\n --b-float-button-tooltip-bg: oklch(20% 0.02 260);\n --b-float-button-tooltip-color: oklch(96% 0 0);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-float-button,\n[data-prefers-color='dark'].b-float-button {\n --b-float-button-bg: oklch(20% 0.02 260);\n --b-float-button-bg-hover: oklch(28% 0.02 260);\n --b-float-button-color: oklch(88% 0.01 260);\n --b-float-button-primary-bg: oklch(50% 0.2 264);\n --b-float-button-primary-bg-hover: oklch(57% 0.2 264);\n --b-float-button-shadow:\n 0 6px 16px 0 oklch(0% 0 0 / 30%), 0 3px 6px -4px oklch(0% 0 0 / 40%),\n 0 9px 28px 8px oklch(0% 0 0 / 25%);\n --b-float-button-tooltip-bg: oklch(30% 0.02 260);\n --b-float-button-tooltip-color: oklch(88% 0.01 260);\n --b-float-button-badge-bg: oklch(55% 0.22 25);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'].b-float-button {\n --b-float-button-bg: oklch(20% 0.02 260);\n --b-float-button-bg-hover: oklch(28% 0.02 260);\n --b-float-button-color: oklch(88% 0.01 260);\n --b-float-button-primary-bg: oklch(50% 0.2 264);\n --b-float-button-primary-bg-hover: oklch(57% 0.2 264);\n --b-float-button-shadow:\n 0 6px 16px 0 oklch(0% 0 0 / 30%), 0 3px 6px -4px oklch(0% 0 0 / 40%),\n 0 9px 28px 8px oklch(0% 0 0 / 25%);\n --b-float-button-tooltip-bg: oklch(30% 0.02 260);\n --b-float-button-tooltip-color: oklch(88% 0.01 260);\n --b-float-button-badge-bg: oklch(55% 0.22 25);\n }\n}\n\n/* ─────────────────────────────────────────────\n Base button\n ───────────────────────────────────────────── */\n.b-float-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: var(--b-float-button-size);\n height: var(--b-float-button-size);\n min-height: var(--b-float-button-size);\n background-color: var(--b-float-button-bg);\n color: var(--b-float-button-color);\n border: none;\n padding: 0;\n cursor: pointer;\n box-shadow: var(--b-float-button-shadow);\n text-decoration: none;\n transition:\n background-color var(--b-float-button-transition-duration) ease,\n color var(--b-float-button-transition-duration) ease,\n box-shadow var(--b-float-button-transition-duration) ease,\n transform var(--b-float-button-transition-duration) ease;\n outline-offset: 2px;\n\n /* Tooltip hidden by default */\n &:hover .b-float-button__tooltip {\n opacity: 1;\n pointer-events: auto;\n transform: translateX(-50%) scale(1);\n }\n}\n\n/* ── Shape: circle ── */\n.b-float-button--circle {\n border-radius: var(--b-float-button-border-radius-circle);\n}\n\n/* ── Shape: square ── */\n.b-float-button--square {\n border-radius: var(--b-float-button-border-radius-square);\n height: auto;\n min-height: var(--b-float-button-size);\n padding: 0.5rem;\n}\n\n/* ── Type: default ── */\n.b-float-button--default {\n background-color: var(--b-float-button-bg);\n color: var(--b-float-button-color);\n\n &:not(.b-float-button--disabled):hover {\n background-color: var(--b-float-button-bg-hover);\n }\n}\n\n/* ── Type: primary ── */\n.b-float-button--primary {\n background-color: var(--b-float-button-primary-bg);\n color: var(--b-float-button-primary-color);\n\n &:not(.b-float-button--disabled):hover {\n background-color: var(--b-float-button-primary-bg-hover);\n }\n}\n\n/* ── Disabled state ── */\n.b-float-button--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* ── Focus visible ring ── */\n.b-float-button:focus-visible {\n outline: 2px solid var(--b-float-button-primary-bg);\n}\n\n/* ─────────────────────────────────────────────\n Body (icon + description wrapper)\n ───────────────────────────────────────────── */\n.b-float-button__body {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.125rem;\n}\n\n/* ─────────────────────────────────────────────\n Icon\n ───────────────────────────────────────────── */\n.b-float-button__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--b-float-button-icon-size);\n line-height: 1;\n}\n\n/* ─────────────────────────────────────────────\n Description\n ───────────────────────────────────────────── */\n.b-float-button__description {\n font-size: var(--b-float-button-description-font-size);\n line-height: 1.2;\n text-align: center;\n white-space: nowrap;\n}\n\n/* ─────────────────────────────────────────────\n Tooltip overlay\n ───────────────────────────────────────────── */\n.b-float-button__tooltip {\n position: absolute;\n right: calc(100% + 0.75rem);\n top: 50%;\n transform: translateX(-50%) scale(0.95);\n white-space: nowrap;\n background: var(--b-float-button-tooltip-bg);\n color: var(--b-float-button-tooltip-color);\n font-size: 0.875rem;\n padding: 0.25rem 0.5rem;\n border-radius: 0.375rem;\n pointer-events: none;\n opacity: 0;\n transition:\n opacity var(--b-float-button-transition-duration) ease,\n transform var(--b-float-button-transition-duration) ease;\n\n /* Arrow */\n &::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 100%;\n transform: translateY(-50%);\n border: 5px solid transparent;\n border-left-color: var(--b-float-button-tooltip-bg);\n }\n}\n\n/* ─────────────────────────────────────────────\n Badge\n ───────────────────────────────────────────── */\n.b-float-button__badge {\n position: absolute;\n top: -4px;\n right: -4px;\n z-index: 1;\n background: var(--b-float-button-badge-bg);\n color: var(--b-float-button-badge-color);\n font-size: var(--b-float-button-badge-font-size);\n line-height: 1;\n border-radius: 10px;\n padding: 2px 5px;\n min-width: 1.25rem;\n text-align: center;\n box-shadow: 0 0 0 2px var(--b-float-button-bg);\n}\n\n.b-float-button__badge--dot {\n width: 8px;\n height: 8px;\n min-width: 0;\n padding: 0;\n border-radius: 50%;\n}\n\n/* ─────────────────────────────────────────────\n Reduced motion\n ───────────────────────────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n .b-float-button,\n .b-float-button__tooltip {\n transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":""}
|
package/dist/design-system95.js
CHANGED
|
@@ -1,112 +1,69 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
"name",
|
|
8
|
-
"novalidate",
|
|
9
|
-
"aria-label"
|
|
10
|
-
], m = /* @__PURE__ */ s({
|
|
11
|
-
__name: "BForm",
|
|
1
|
+
import { BFloatButtonShape as e, BFloatButtonType as t } from "./design-system91.js";
|
|
2
|
+
import n from "./design-system94.js";
|
|
3
|
+
import { Transition as r, createBlock as i, createCommentVNode as a, createElementVNode as o, defineComponent as s, onBeforeUnmount as c, onMounted as l, openBlock as u, ref as d, renderSlot as f, unref as p, withCtx as m } from "vue";
|
|
4
|
+
//#region src/components/BFloatButton/BFloatButtonBackTop.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
+
var h = /* @__PURE__ */ s({
|
|
6
|
+
__name: "BFloatButtonBackTop",
|
|
12
7
|
props: {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
default: !0
|
|
19
|
-
},
|
|
20
|
-
disabled: {
|
|
21
|
-
type: Boolean,
|
|
22
|
-
default: !1
|
|
23
|
-
},
|
|
24
|
-
requiredMark: {
|
|
25
|
-
type: Boolean,
|
|
26
|
-
default: !0
|
|
27
|
-
},
|
|
28
|
-
name: {},
|
|
29
|
-
model: {},
|
|
30
|
-
scrollToFirstError: {
|
|
31
|
-
type: Boolean,
|
|
32
|
-
default: !1
|
|
33
|
-
},
|
|
34
|
-
validateTrigger: { default: () => i.Change },
|
|
35
|
-
noHtml5Validate: {
|
|
36
|
-
type: Boolean,
|
|
37
|
-
default: !1
|
|
38
|
-
}
|
|
8
|
+
duration: { default: 450 },
|
|
9
|
+
target: { type: Function },
|
|
10
|
+
visibilityHeight: { default: 400 },
|
|
11
|
+
shape: { default: () => e.Circle },
|
|
12
|
+
type: { default: () => t.Default }
|
|
39
13
|
},
|
|
40
|
-
emits: ["
|
|
41
|
-
setup(
|
|
42
|
-
let s =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
errors: i.value.errors
|
|
58
|
-
});
|
|
59
|
-
return {
|
|
60
|
-
values: t,
|
|
61
|
-
errorFields: e
|
|
62
|
-
};
|
|
63
|
-
}, x = (e) => {
|
|
64
|
-
if (!e) {
|
|
65
|
-
_();
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
for (let t of e) h[t] && h[t].value.reset();
|
|
69
|
-
}, S = (e, t) => {
|
|
70
|
-
let n = m.value?.querySelector(`[data-form-field="${e}"]`);
|
|
71
|
-
n && n.scrollIntoView(t ?? {
|
|
72
|
-
behavior: "smooth",
|
|
73
|
-
block: "center"
|
|
74
|
-
});
|
|
75
|
-
}, C = (e) => {
|
|
76
|
-
e.preventDefault();
|
|
77
|
-
let t = y(), r = b();
|
|
78
|
-
if (t) s("finish", r.values);
|
|
79
|
-
else if (s("finishFailed", r), n.scrollToFirstError && r.errorFields.length > 0) {
|
|
80
|
-
let e = typeof n.scrollToFirstError == "object" ? n.scrollToFirstError : {
|
|
81
|
-
behavior: "smooth",
|
|
82
|
-
block: "center"
|
|
83
|
-
};
|
|
84
|
-
S(r.errorFields[0].name, e);
|
|
14
|
+
emits: ["click"],
|
|
15
|
+
setup(e, { emit: t }) {
|
|
16
|
+
let s = t, h = d(!1), g = window;
|
|
17
|
+
function _() {
|
|
18
|
+
return g === window ? window.scrollY : g.scrollTop;
|
|
19
|
+
}
|
|
20
|
+
function v() {
|
|
21
|
+
h.value = _() > e.visibilityHeight;
|
|
22
|
+
}
|
|
23
|
+
function y(e) {
|
|
24
|
+
return e < .5 ? 4 * e * e * e : 1 - (-2 * e + 2) ** 3 / 2;
|
|
25
|
+
}
|
|
26
|
+
function b() {
|
|
27
|
+
let t = performance.now(), n = _();
|
|
28
|
+
function r(i) {
|
|
29
|
+
let a = i - t, o = Math.min(a / e.duration, 1), s = n * (1 - y(o));
|
|
30
|
+
g === window ? window.scrollTo(0, s) : g.scrollTop = s, o < 1 && requestAnimationFrame(r);
|
|
85
31
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
32
|
+
requestAnimationFrame(r);
|
|
33
|
+
}
|
|
34
|
+
function x(e) {
|
|
35
|
+
b(), s("click", e);
|
|
36
|
+
}
|
|
37
|
+
l(() => {
|
|
38
|
+
g = e.target?.() ?? window, g.addEventListener("scroll", v, { passive: !0 }), v();
|
|
39
|
+
}), c(() => {
|
|
40
|
+
g.removeEventListener("scroll", v);
|
|
41
|
+
});
|
|
42
|
+
let S = h;
|
|
43
|
+
return (t, s) => (u(), i(r, { name: "b-float-button-backtop" }, {
|
|
44
|
+
default: m(() => [p(S) ? (u(), i(n, {
|
|
45
|
+
key: 0,
|
|
46
|
+
shape: e.shape,
|
|
47
|
+
type: e.type,
|
|
48
|
+
"aria-label": "Back to top",
|
|
49
|
+
class: "b-float-button-backtop",
|
|
50
|
+
onClick: x
|
|
51
|
+
}, {
|
|
52
|
+
icon: m(() => [f(t.$slots, "default", {}, () => [s[0] ||= o("svg", {
|
|
53
|
+
width: "1em",
|
|
54
|
+
height: "1em",
|
|
55
|
+
viewBox: "0 0 24 24",
|
|
56
|
+
fill: "currentColor",
|
|
57
|
+
"aria-hidden": "true",
|
|
58
|
+
focusable: "false"
|
|
59
|
+
}, [o("path", { d: "M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z" })], -1)])]),
|
|
60
|
+
_: 3
|
|
61
|
+
}, 8, ["shape", "type"])) : a("", !0)]),
|
|
62
|
+
_: 3
|
|
63
|
+
}));
|
|
107
64
|
}
|
|
108
65
|
});
|
|
109
66
|
//#endregion
|
|
110
|
-
export {
|
|
67
|
+
export { h as default };
|
|
111
68
|
|
|
112
69
|
//# sourceMappingURL=design-system95.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-system95.js","names":[],"sources":["../src/components/
|
|
1
|
+
{"version":3,"file":"design-system95.js","names":[],"sources":["../src/components/BFloatButton/BFloatButtonBackTop.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from 'vue';\nimport BFloatButton from './BFloatButton.vue';\nimport { BFloatButtonShape, BFloatButtonType } from './types.ts';\n\n// ─────────────────────────────────────────────\n// Props & emits\n// ─────────────────────────────────────────────\nconst {\n duration = 450,\n target,\n visibilityHeight = 400,\n shape = BFloatButtonShape.Circle,\n type = BFloatButtonType.Default,\n} = defineProps<{\n /**\n * Scroll animation duration in milliseconds.\n * @default 450\n */\n duration?: number;\n /**\n * A function that returns the scrollable container.\n * Defaults to `window`. May return `null` (e.g. if the element hasn't mounted yet).\n */\n target?: () => HTMLElement | Window | null;\n /**\n * The button becomes visible when the scroll position exceeds this value (px).\n * @default 400\n */\n visibilityHeight?: number;\n /**\n * Shape of the back-top button.\n * @default 'circle'\n */\n shape?: `${BFloatButtonShape}`;\n /**\n * Type of the back-top button.\n * @default 'default'\n */\n type?: `${BFloatButtonType}`;\n}>();\n\nconst emit = defineEmits<{\n /** Emitted when the back-top button is clicked. */\n (e: 'click', event: MouseEvent): void;\n}>();\n\ndefineSlots<{\n /** Custom content for the button. If omitted, renders an up-arrow icon. */\n default?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Scroll logic\n// ─────────────────────────────────────────────\nconst visible = ref(false);\nlet scrollContainer: HTMLElement | Window = window;\n\nfunction getScrollTop(): number {\n if (scrollContainer === window) return window.scrollY;\n return (scrollContainer as HTMLElement).scrollTop;\n}\n\nfunction onScroll() {\n visible.value = getScrollTop() > visibilityHeight;\n}\n\nfunction easeInOutCubic(t: number): number {\n return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;\n}\n\nfunction scrollToTop() {\n const startTime = performance.now();\n const startTop = getScrollTop();\n\n function step(now: number) {\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = easeInOutCubic(progress);\n const newTop = startTop * (1 - eased);\n\n if (scrollContainer === window) {\n window.scrollTo(0, newTop);\n } else {\n (scrollContainer as HTMLElement).scrollTop = newTop;\n }\n\n if (progress < 1) {\n requestAnimationFrame(step);\n }\n }\n\n requestAnimationFrame(step);\n}\n\nfunction handleClick(event: MouseEvent) {\n scrollToTop();\n emit('click', event);\n}\n\nonMounted(() => {\n scrollContainer = target?.() ?? window;\n scrollContainer.addEventListener('scroll', onScroll, { passive: true });\n onScroll();\n});\n\nonBeforeUnmount(() => {\n scrollContainer.removeEventListener('scroll', onScroll);\n});\n\nconst isVisible = visible;\n</script>\n\n<template>\n <Transition name=\"b-float-button-backtop\">\n <BFloatButton\n v-if=\"isVisible\"\n :shape=\"shape\"\n :type=\"type\"\n aria-label=\"Back to top\"\n class=\"b-float-button-backtop\"\n @click=\"handleClick\"\n >\n <template #icon>\n <slot>\n <!-- Default: up arrow -->\n <svg\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\" />\n </svg>\n </slot>\n </template>\n </BFloatButton>\n </Transition>\n</template>\n\n<style>\n/* ─────────────────────────────────────────────\n BackTop enter/leave transitions\n ───────────────────────────────────────────── */\n.b-float-button-backtop-enter-active,\n.b-float-button-backtop-leave-active {\n transition:\n opacity 300ms ease,\n transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.b-float-button-backtop-enter-from,\n.b-float-button-backtop-leave-to {\n opacity: 0;\n transform: scale(0.8);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .b-float-button-backtop-enter-active,\n .b-float-button-backtop-leave-active {\n transition-duration: 0ms;\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;EA0CA,IAAM,IAAO,GAaP,IAAU,EAAI,GAAM,EACtB,IAAwC;EAE5C,SAAS,IAAuB;AAE9B,UADI,MAAoB,SAAe,OAAO,UACtC,EAAgC;;EAG1C,SAAS,IAAW;AAClB,KAAQ,QAAQ,GAAc,GAAG,EAAA;;EAGnC,SAAS,EAAe,GAAmB;AACzC,UAAO,IAAI,KAAM,IAAI,IAAI,IAAI,IAAI,KAAa,KAAK,IAAI,MAAG,IAAK;;EAGjE,SAAS,IAAc;GACrB,IAAM,IAAY,YAAY,KAAK,EAC7B,IAAW,GAAc;GAE/B,SAAS,EAAK,GAAa;IACzB,IAAM,IAAU,IAAM,GAChB,IAAW,KAAK,IAAI,IAAU,EAAA,UAAU,EAAE,EAE1C,IAAS,KAAY,IADb,EAAe,EAAS;AAStC,IANI,MAAoB,SACtB,OAAO,SAAS,GAAG,EAAO,GAEzB,EAAgC,YAAY,GAG3C,IAAW,KACb,sBAAsB,EAAK;;AAI/B,yBAAsB,EAAK;;EAG7B,SAAS,EAAY,GAAmB;AAEtC,GADA,GAAa,EACb,EAAK,SAAS,EAAM;;AAStB,EANA,QAAgB;AAGd,GAFA,IAAkB,EAAA,UAAU,IAAI,QAChC,EAAgB,iBAAiB,UAAU,GAAU,EAAE,SAAS,IAAM,CAAC,EACvE,GAAU;IACV,EAEF,QAAsB;AACpB,KAAgB,oBAAoB,UAAU,EAAS;IACvD;EAEF,IAAM,IAAY;yBAIhB,EAyBa,GAAA,EAzBD,MAAK,0BAAwB,EAAA;oBAwBxB,CAtBP,EAAA,EAAS,IAAA,GAAA,EADjB,EAuBe,GAAA;;IArBZ,OAAO,EAAA;IACP,MAAM,EAAA;IACP,cAAW;IACX,OAAM;IACL,SAAO;;IAEG,MAAI,QAaN,CAZP,EAYO,EAAA,QAAA,WAAA,EAAA,QAAA,CAAA,AAAA,EAAA,OAVL,EASM,OAAA;KARJ,OAAM;KACN,QAAO;KACP,SAAQ;KACR,MAAK;KACL,eAAY;KACZ,WAAU;QAEV,EAAwE,QAAA,EAAlE,GAAE,+DAA6D,CAAA,CAAA,EAAA,GAAA,CAAA,CAAA,CAAA,CAAA"}
|