@7pmlabs/design-system 1.0.10 → 2.0.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.
- package/README.md +57 -6
- package/dist/design-system.css +1 -1
- package/dist/design-system.js +66 -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 +444 -70
- 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 +21 -21
- package/dist/design-system183.js.map +1 -1
- package/dist/design-system185.js +1 -1
- package/dist/design-system185.js.map +1 -1
- package/dist/design-system186.js +85 -25
- package/dist/design-system186.js.map +1 -1
- package/dist/design-system188.js +1 -1
- package/dist/design-system188.js.map +1 -1
- package/dist/design-system189.js +7 -5
- 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 +20 -23
- package/dist/design-system192.js.map +1 -1
- package/dist/design-system194.js +1 -1
- package/dist/design-system194.js.map +1 -1
- package/dist/design-system195.js +24 -323
- package/dist/design-system195.js.map +1 -1
- package/dist/design-system197.js +1 -1
- package/dist/design-system197.js.map +1 -1
- package/dist/design-system198.js +19 -88
- package/dist/design-system198.js.map +1 -1
- package/dist/design-system200.js +1 -1
- package/dist/design-system200.js.map +1 -1
- package/dist/design-system201.js +330 -17
- package/dist/design-system201.js.map +1 -1
- package/dist/design-system203.js +5 -3
- package/dist/design-system203.js.map +1 -1
- package/dist/design-system204.js +88 -407
- package/dist/design-system204.js.map +1 -1
- package/dist/design-system206.js +1 -1
- package/dist/design-system206.js.map +1 -1
- package/dist/design-system207.js +17 -106
- package/dist/design-system207.js.map +1 -1
- package/dist/{design-system202.js → design-system208.js} +2 -2
- package/dist/{design-system202.js.map → design-system208.js.map} +1 -1
- package/dist/design-system209.js +3 -6
- package/dist/design-system209.js.map +1 -1
- package/dist/design-system210.js +403 -90
- package/dist/design-system210.js.map +1 -1
- package/dist/design-system212.js +4 -5
- package/dist/design-system212.js.map +1 -1
- package/dist/design-system213.js +45 -723
- package/dist/design-system213.js.map +1 -1
- package/dist/design-system215.js +1 -1
- package/dist/design-system215.js.map +1 -1
- package/dist/design-system216.js +88 -11
- package/dist/design-system216.js.map +1 -1
- package/dist/design-system217.js +4 -525
- 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 -3
- package/dist/design-system220.js.map +1 -1
- package/dist/design-system221.js +103 -43
- package/dist/design-system221.js.map +1 -1
- package/dist/design-system223.js +6 -283
- 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 +5 -119
- package/dist/design-system226.js.map +1 -1
- package/dist/{design-system60.js → design-system227.js} +6 -8
- package/dist/design-system227.js.map +1 -0
- package/dist/design-system228.js +525 -5
- package/dist/design-system228.js.map +1 -1
- package/dist/{design-system219.js → design-system230.js} +2 -2
- package/dist/{design-system219.js.map → design-system230.js.map} +1 -1
- package/dist/design-system231.js +3 -5
- package/dist/design-system231.js.map +1 -1
- package/dist/design-system232.js +42 -50
- package/dist/design-system232.js.map +1 -1
- package/dist/design-system233.js +1 -1
- package/dist/design-system233.js.map +1 -1
- package/dist/design-system234.js +254 -141
- package/dist/design-system234.js.map +1 -1
- package/dist/design-system236.js +1 -1
- package/dist/design-system236.js.map +1 -1
- package/dist/design-system237.js +119 -7
- package/dist/design-system237.js.map +1 -1
- package/dist/design-system239.js +8 -0
- package/dist/design-system239.js.map +1 -0
- package/dist/design-system240.js +112 -5
- package/dist/design-system240.js.map +1 -1
- package/dist/design-system242.js +8 -0
- package/dist/design-system242.js.map +1 -0
- package/dist/design-system243.js +54 -6
- package/dist/design-system243.js.map +1 -1
- package/dist/design-system244.js +4 -7
- package/dist/design-system244.js.map +1 -1
- package/dist/design-system245.js +139 -343
- package/dist/design-system245.js.map +1 -1
- package/dist/design-system247.js +4 -5
- package/dist/design-system247.js.map +1 -1
- package/dist/design-system248.js +10 -0
- package/dist/design-system248.js.map +1 -0
- package/dist/{design-system238.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-system241.js → design-system252.js} +1 -1
- package/dist/design-system252.js.map +1 -0
- package/dist/design-system254.js +9 -0
- package/dist/design-system254.js.map +1 -0
- 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/BDivider/types.d.ts +2 -2
- package/dist/types/components/BMasonry/types.d.ts +2 -2
- package/dist/types/components/BPagination/BPagination.vue.d.ts +1 -1
- 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 +4 -0
- package/dist/types/types.d.ts +3 -0
- package/package.json +18 -15
- 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 -38
- package/dist/design-system177.js.map +0 -1
- package/dist/design-system222.js +0 -7
- package/dist/design-system222.js.map +0 -1
- package/dist/design-system225.js +0 -8
- package/dist/design-system225.js.map +0 -1
- package/dist/design-system229.js +0 -115
- package/dist/design-system229.js.map +0 -1
- package/dist/design-system238.js.map +0 -1
- package/dist/design-system241.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
package/dist/design-system81.js
CHANGED
|
@@ -1,8 +1,202 @@
|
|
|
1
|
-
import e from "
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { Teleport as e, Transition as t, computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createTextVNode as s, createVNode as c, defineComponent as l, nextTick as u, normalizeClass as d, normalizeStyle as f, onBeforeUnmount as p, openBlock as m, ref as h, renderSlot as g, toDisplayString as _, unref as v, useId as y, useSlots as ee, watch as b, withCtx as x } from "vue";
|
|
2
|
+
//#region src/components/BDrawer/BDrawer.vue?vue&type=script&setup=true&lang.ts
|
|
3
|
+
var S = ["aria-label", "aria-labelledby"], C = {
|
|
4
|
+
key: 0,
|
|
5
|
+
class: "b-drawer__header"
|
|
6
|
+
}, w = { class: "b-drawer__header-title-wrapper" }, T = ["id"], E = {
|
|
7
|
+
key: 0,
|
|
8
|
+
class: "b-drawer__extra"
|
|
9
|
+
}, D = {
|
|
10
|
+
key: 1,
|
|
11
|
+
class: "b-drawer__body"
|
|
12
|
+
}, O = {
|
|
13
|
+
key: 0,
|
|
14
|
+
class: "b-drawer__loading",
|
|
15
|
+
"aria-live": "polite"
|
|
16
|
+
}, k = {
|
|
17
|
+
key: 2,
|
|
18
|
+
class: "b-drawer__footer"
|
|
19
|
+
}, A = /* @__PURE__ */ l({
|
|
20
|
+
__name: "BDrawer",
|
|
21
|
+
props: {
|
|
22
|
+
placement: { default: "right" },
|
|
23
|
+
size: { default: "default" },
|
|
24
|
+
title: { default: "" },
|
|
25
|
+
closable: {
|
|
26
|
+
type: Boolean,
|
|
27
|
+
default: !0
|
|
28
|
+
},
|
|
29
|
+
mask: {
|
|
30
|
+
type: Boolean,
|
|
31
|
+
default: !0
|
|
32
|
+
},
|
|
33
|
+
maskClosable: {
|
|
34
|
+
type: Boolean,
|
|
35
|
+
default: !0
|
|
36
|
+
},
|
|
37
|
+
keyboard: {
|
|
38
|
+
type: Boolean,
|
|
39
|
+
default: !0
|
|
40
|
+
},
|
|
41
|
+
destroyOnClose: {
|
|
42
|
+
type: Boolean,
|
|
43
|
+
default: !1
|
|
44
|
+
},
|
|
45
|
+
width: {},
|
|
46
|
+
height: {},
|
|
47
|
+
zIndex: { default: 1e3 },
|
|
48
|
+
getContainer: {},
|
|
49
|
+
autoFocus: {
|
|
50
|
+
type: Boolean,
|
|
51
|
+
default: !0
|
|
52
|
+
},
|
|
53
|
+
modelValue: {
|
|
54
|
+
type: Boolean,
|
|
55
|
+
default: () => void 0
|
|
56
|
+
},
|
|
57
|
+
forceRender: {
|
|
58
|
+
type: Boolean,
|
|
59
|
+
default: !1
|
|
60
|
+
},
|
|
61
|
+
extra: { default: "" },
|
|
62
|
+
footer: { default: "" },
|
|
63
|
+
loading: {
|
|
64
|
+
type: Boolean,
|
|
65
|
+
default: !1
|
|
66
|
+
},
|
|
67
|
+
ariaLabel: {}
|
|
68
|
+
},
|
|
69
|
+
emits: [
|
|
70
|
+
"close",
|
|
71
|
+
"afterOpenChange",
|
|
72
|
+
"update:modelValue"
|
|
73
|
+
],
|
|
74
|
+
setup(l, { expose: A, emit: j }) {
|
|
75
|
+
let M = j, N = ee(), P = y(), F = h(!1), I = n(() => l.modelValue === void 0 ? F.value : l.modelValue), L = h(!1), R = n(() => l.forceRender ? !0 : l.destroyOnClose ? I.value : L.value || I.value);
|
|
76
|
+
b(I, (e) => {
|
|
77
|
+
e && (L.value = !0);
|
|
78
|
+
});
|
|
79
|
+
let z = n(() => l.placement === "left" || l.placement === "right"), B = {
|
|
80
|
+
default: 378,
|
|
81
|
+
large: 736
|
|
82
|
+
}, V = n(() => l.width === void 0 ? z.value ? `${B[l.size]}px` : "100%" : typeof l.width == "number" ? `${l.width}px` : l.width), H = n(() => l.height === void 0 ? z.value ? "100%" : `${B[l.size]}px` : typeof l.height == "number" ? `${l.height}px` : l.height), U = n(() => !!(l.title || N.title)), W = n(() => !!(l.extra || N.extra)), G = n(() => !!(l.footer || N.footer)), K = n(() => U.value || l.closable || W.value), q = n(() => l.getContainer ? l.getContainer : "body"), J = n(() => ({
|
|
83
|
+
width: V.value,
|
|
84
|
+
height: H.value,
|
|
85
|
+
zIndex: l.zIndex
|
|
86
|
+
})), Y = h(null), X = null;
|
|
87
|
+
function Z(e) {
|
|
88
|
+
if (e.key !== "Tab" || !Y.value) return;
|
|
89
|
+
let t = Array.from(Y.value.querySelectorAll("a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])"));
|
|
90
|
+
if (t.length === 0) {
|
|
91
|
+
e.preventDefault();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
let n = t[0], r = t[t.length - 1];
|
|
95
|
+
e.shiftKey ? document.activeElement === n && (e.preventDefault(), r.focus()) : document.activeElement === r && (e.preventDefault(), n.focus());
|
|
96
|
+
}
|
|
97
|
+
function Q() {
|
|
98
|
+
!l.autoFocus || !Y.value || u(() => {
|
|
99
|
+
if (!Y.value) return;
|
|
100
|
+
let e = Y.value.querySelector("a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])");
|
|
101
|
+
e ? e.focus() : Y.value.focus();
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
b(I, (e) => {
|
|
105
|
+
e ? (X = document.activeElement, u(() => Q()), document.body.style.overflow = "hidden") : document.body.style.overflow = "";
|
|
106
|
+
}), p(() => {
|
|
107
|
+
document.body.style.overflow = "";
|
|
108
|
+
});
|
|
109
|
+
function $(e) {
|
|
110
|
+
M("close", e), l.modelValue === void 0 ? F.value = !1 : M("update:modelValue", !1);
|
|
111
|
+
}
|
|
112
|
+
function te(e) {
|
|
113
|
+
l.maskClosable && $(e);
|
|
114
|
+
}
|
|
115
|
+
function ne(e) {
|
|
116
|
+
e.key === "Escape" && l.keyboard && (e.stopPropagation(), $(e)), Z(e);
|
|
117
|
+
}
|
|
118
|
+
function re() {
|
|
119
|
+
M("afterOpenChange", !0);
|
|
120
|
+
}
|
|
121
|
+
function ie() {
|
|
122
|
+
M("afterOpenChange", !1), X && typeof X.focus == "function" && (X.focus(), X = null);
|
|
123
|
+
}
|
|
124
|
+
function ae() {
|
|
125
|
+
l.modelValue === void 0 ? F.value = !0 : M("update:modelValue", !0);
|
|
126
|
+
}
|
|
127
|
+
return A({ open: ae }), (n, u) => (m(), r(e, { to: q.value }, [c(t, {
|
|
128
|
+
name: "b-drawer",
|
|
129
|
+
onAfterEnter: re,
|
|
130
|
+
onAfterLeave: ie
|
|
131
|
+
}, {
|
|
132
|
+
default: x(() => [I.value ? (m(), a("div", {
|
|
133
|
+
key: 0,
|
|
134
|
+
class: d(["b-drawer-root", `b-drawer-root--${l.placement}`]),
|
|
135
|
+
style: f({ zIndex: l.zIndex })
|
|
136
|
+
}, [l.mask ? (m(), a("div", {
|
|
137
|
+
key: 0,
|
|
138
|
+
class: "b-drawer__mask",
|
|
139
|
+
"aria-hidden": "true",
|
|
140
|
+
onClick: te
|
|
141
|
+
})) : i("", !0), o("div", {
|
|
142
|
+
ref_key: "drawerRef",
|
|
143
|
+
ref: Y,
|
|
144
|
+
class: d(["b-drawer", [
|
|
145
|
+
`b-drawer--${l.placement}`,
|
|
146
|
+
`b-drawer--${l.size}`,
|
|
147
|
+
{
|
|
148
|
+
"b-drawer--has-header": K.value,
|
|
149
|
+
"b-drawer--has-footer": G.value
|
|
150
|
+
}
|
|
151
|
+
]]),
|
|
152
|
+
role: "dialog",
|
|
153
|
+
"aria-modal": "true",
|
|
154
|
+
"aria-label": U.value ? void 0 : l.ariaLabel,
|
|
155
|
+
"aria-labelledby": U.value ? v(P) : void 0,
|
|
156
|
+
style: f(J.value),
|
|
157
|
+
tabindex: "-1",
|
|
158
|
+
onKeydown: ne
|
|
159
|
+
}, [
|
|
160
|
+
K.value ? (m(), a("div", C, [o("div", w, [l.closable ? (m(), a("button", {
|
|
161
|
+
key: 0,
|
|
162
|
+
type: "button",
|
|
163
|
+
class: "b-drawer__close",
|
|
164
|
+
"aria-label": "Close drawer",
|
|
165
|
+
onClick: $
|
|
166
|
+
}, [g(n.$slots, "closeIcon", {}, () => [u[0] ||= o("svg", {
|
|
167
|
+
class: "b-drawer__close-icon",
|
|
168
|
+
viewBox: "0 0 24 24",
|
|
169
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
170
|
+
"aria-hidden": "true",
|
|
171
|
+
focusable: "false"
|
|
172
|
+
}, [o("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" })], -1)])])) : i("", !0), U.value ? (m(), a("div", {
|
|
173
|
+
key: 1,
|
|
174
|
+
id: v(P),
|
|
175
|
+
class: "b-drawer__title"
|
|
176
|
+
}, [g(n.$slots, "title", {}, () => [s(_(l.title), 1)])], 8, T)) : i("", !0)]), W.value ? (m(), a("div", E, [g(n.$slots, "extra", {}, () => [s(_(l.extra), 1)])])) : i("", !0)])) : i("", !0),
|
|
177
|
+
R.value ? (m(), a("div", D, [l.loading ? (m(), a("div", O, [...u[1] ||= [o("svg", {
|
|
178
|
+
class: "b-drawer__spinner",
|
|
179
|
+
viewBox: "0 0 24 24",
|
|
180
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
181
|
+
"aria-hidden": "true",
|
|
182
|
+
focusable: "false"
|
|
183
|
+
}, [o("circle", {
|
|
184
|
+
cx: "12",
|
|
185
|
+
cy: "12",
|
|
186
|
+
r: "10",
|
|
187
|
+
fill: "none",
|
|
188
|
+
stroke: "currentColor",
|
|
189
|
+
"stroke-width": "3",
|
|
190
|
+
"stroke-dasharray": "31.4 31.4",
|
|
191
|
+
"stroke-linecap": "round"
|
|
192
|
+
})], -1), o("span", { class: "b-drawer__loading-text" }, "Loading…", -1)]])) : g(n.$slots, "default", { key: 1 })])) : i("", !0),
|
|
193
|
+
G.value ? (m(), a("div", k, [g(n.$slots, "footer", {}, () => [s(_(l.footer), 1)])])) : i("", !0)
|
|
194
|
+
], 46, S)], 6)) : i("", !0)]),
|
|
195
|
+
_: 3
|
|
196
|
+
})], 8, ["to"]));
|
|
197
|
+
}
|
|
198
|
+
});
|
|
5
199
|
//#endregion
|
|
6
|
-
export {
|
|
200
|
+
export { A as default };
|
|
7
201
|
|
|
8
202
|
//# sourceMappingURL=design-system81.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-system81.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":""}
|
|
1
|
+
{"version":3,"file":"design-system81.js","names":[],"sources":["../src/components/BDrawer/BDrawer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { BDrawerPlacement, BDrawerSize } from '@/types';\nimport { computed, nextTick, onBeforeUnmount, ref, useId, watch } from 'vue';\n\n// ─────────────────────────────────────────────\n// Props & emits\n// ─────────────────────────────────────────────\nconst {\n placement = 'right',\n size = 'default',\n title = '',\n closable = true,\n mask = true,\n maskClosable = true,\n keyboard = true,\n destroyOnClose = false,\n width,\n height,\n zIndex = 1000,\n getContainer,\n autoFocus = true,\n modelValue = undefined,\n forceRender = false,\n extra = '',\n footer = '',\n loading = false,\n ariaLabel,\n} = defineProps<{\n /** Direction from which the drawer slides in. */\n placement?: BDrawerPlacement;\n /** Preset width/height: 'default' (378px) or 'large' (736px). */\n size?: BDrawerSize;\n /** Drawer title. Also accepts the `title` slot. */\n title?: string;\n /** Whether to show the close button. */\n closable?: boolean;\n /** Whether to show the mask overlay. */\n mask?: boolean;\n /** Clicking the mask closes the drawer. */\n maskClosable?: boolean;\n /** Pressing Escape closes the drawer. */\n keyboard?: boolean;\n /** Destroy child components when closing. */\n destroyOnClose?: boolean;\n /** Custom width (overrides size) for left/right placement. */\n width?: string | number;\n /** Custom height (overrides size) for top/bottom placement. */\n height?: string | number;\n /** z-index of the drawer. */\n zIndex?: number;\n /**\n * CSS selector or element to teleport the drawer into.\n * Defaults to `body`.\n */\n getContainer?: string | HTMLElement;\n /** Whether to auto-focus the first focusable element when opened. */\n autoFocus?: boolean;\n /**\n * Controlled visibility - bind with `v-model`.\n * When not provided the drawer manages its own state.\n */\n modelValue?: boolean;\n /** Force render the drawer content even when hidden. */\n forceRender?: boolean;\n /** Extra content in the header right area (also accepts the `extra` slot). */\n extra?: string;\n /** Footer content (also accepts the `footer` slot). */\n footer?: string;\n /** Show loading spinner in body area. */\n loading?: boolean;\n /**\n * Accessible label for the dialog when no visible title is present.\n * Required when `closable=false` and no `title` prop or `#title` slot is used.\n */\n ariaLabel?: string;\n}>();\n\nconst emit = defineEmits<{\n /** Fired when the user requests to close the drawer. */\n (e: 'close', event: MouseEvent | KeyboardEvent): void;\n /** Fired after the close transition completes. */\n (e: 'afterOpenChange', open: boolean): void;\n /** v-model support */\n (e: 'update:modelValue', value: boolean): void;\n}>();\n\nconst slots = defineSlots<{\n /** Main content of the drawer. */\n default?(): unknown;\n /** Overrides the `title` prop. */\n title?(): unknown;\n /** Overrides the `extra` prop (right side of header). */\n extra?(): unknown;\n /** Overrides the `footer` prop. */\n footer?(): unknown;\n /** Custom close icon. */\n closeIcon?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────\nconst titleId = useId();\n\n/** Uncontrolled visibility. */\nconst internalOpen = ref(false);\n\n/** Effective visibility. */\nconst isOpen = computed(() => (modelValue !== undefined ? modelValue : internalOpen.value));\n\n/** Whether the drawer has ever been opened (for lazy rendering). */\nconst hasBeenOpened = ref(false);\n\n/** Whether the content should render. */\nconst shouldRender = computed(() => {\n if (forceRender) return true;\n if (destroyOnClose) return isOpen.value;\n return hasBeenOpened.value || isOpen.value;\n});\n\n// Track when drawer opens at least once\nwatch(isOpen, (val) => {\n if (val) hasBeenOpened.value = true;\n});\n\n// ─────────────────────────────────────────────\n// Derived state\n// ─────────────────────────────────────────────\nconst isHorizontal = computed(() => placement === 'left' || placement === 'right');\n\nconst sizeMap: Record<BDrawerSize, number> = {\n default: 378,\n large: 736,\n};\n\nconst resolvedWidth = computed(() => {\n if (width !== undefined) return typeof width === 'number' ? `${width}px` : width;\n return isHorizontal.value ? `${sizeMap[size]}px` : '100%';\n});\n\nconst resolvedHeight = computed(() => {\n if (height !== undefined) return typeof height === 'number' ? `${height}px` : height;\n return !isHorizontal.value ? `${sizeMap[size]}px` : '100%';\n});\n\nconst hasTitle = computed(() => Boolean(title || slots.title));\nconst hasExtra = computed(() => Boolean(extra || slots.extra));\nconst hasFooter = computed(() => Boolean(footer || slots.footer));\nconst hasHeader = computed(() => hasTitle.value || closable || hasExtra.value);\n\nconst teleportTarget = computed(() => {\n if (getContainer) return getContainer;\n return 'body';\n});\n\nconst panelStyle = computed(() => ({\n width: resolvedWidth.value,\n height: resolvedHeight.value,\n zIndex,\n}));\n\n// ─────────────────────────────────────────────\n// Focus management\n// ─────────────────────────────────────────────\nconst drawerRef = ref<HTMLElement | null>(null);\nlet previouslyFocusedElement: HTMLElement | null = null;\n\nfunction trapFocus(event: KeyboardEvent) {\n if (event.key !== 'Tab' || !drawerRef.value) return;\n\n const focusableSelectors =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n const focusable = Array.from(drawerRef.value.querySelectorAll<HTMLElement>(focusableSelectors));\n\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (event.shiftKey) {\n if (document.activeElement === first) {\n event.preventDefault();\n last.focus();\n }\n } else {\n if (document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n }\n}\n\nfunction focusFirst() {\n if (!autoFocus || !drawerRef.value) return;\n\n nextTick(() => {\n if (!drawerRef.value) return;\n const focusableSelectors =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n const first = drawerRef.value.querySelector<HTMLElement>(focusableSelectors);\n if (first) {\n first.focus();\n } else {\n // Focus the panel itself as a fallback\n drawerRef.value.focus();\n }\n });\n}\n\nwatch(isOpen, (val) => {\n if (val) {\n previouslyFocusedElement = document.activeElement as HTMLElement | null;\n nextTick(() => focusFirst());\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n});\n\nonBeforeUnmount(() => {\n document.body.style.overflow = '';\n});\n\n// ─────────────────────────────────────────────\n// Behaviour\n// ─────────────────────────────────────────────\nfunction requestClose(event: MouseEvent | KeyboardEvent) {\n emit('close', event);\n if (modelValue !== undefined) {\n emit('update:modelValue', false);\n } else {\n internalOpen.value = false;\n }\n}\n\nfunction onMaskClick(event: MouseEvent) {\n if (maskClosable) {\n requestClose(event);\n }\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' && keyboard) {\n event.stopPropagation();\n requestClose(event);\n }\n trapFocus(event);\n}\n\nfunction onAfterEnter() {\n emit('afterOpenChange', true);\n}\n\nfunction onAfterLeave() {\n emit('afterOpenChange', false);\n // Restore focus to the previously focused element\n if (previouslyFocusedElement && typeof previouslyFocusedElement.focus === 'function') {\n previouslyFocusedElement.focus();\n previouslyFocusedElement = null;\n }\n}\n\n// ─────────────────────────────────────────────\n// Public API\n// ─────────────────────────────────────────────\nfunction open() {\n if (modelValue !== undefined) {\n emit('update:modelValue', true);\n } else {\n internalOpen.value = true;\n }\n}\n\ndefineExpose({ open });\n</script>\n\n<template>\n <Teleport :to=\"teleportTarget\">\n <Transition name=\"b-drawer\" @after-enter=\"onAfterEnter\" @after-leave=\"onAfterLeave\">\n <div\n v-if=\"isOpen\"\n class=\"b-drawer-root\"\n :class=\"`b-drawer-root--${placement}`\"\n :style=\"{ zIndex }\"\n >\n <!-- Mask -->\n <div v-if=\"mask\" class=\"b-drawer__mask\" aria-hidden=\"true\" @click=\"onMaskClick\" />\n\n <!-- Panel -->\n <div\n ref=\"drawerRef\"\n class=\"b-drawer\"\n :class=\"[\n `b-drawer--${placement}`,\n `b-drawer--${size}`,\n {\n 'b-drawer--has-header': hasHeader,\n 'b-drawer--has-footer': hasFooter,\n },\n ]\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-label=\"!hasTitle ? ariaLabel : undefined\"\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\n :style=\"panelStyle\"\n tabindex=\"-1\"\n @keydown=\"onKeydown\"\n >\n <!-- Header -->\n <div v-if=\"hasHeader\" class=\"b-drawer__header\">\n <div class=\"b-drawer__header-title-wrapper\">\n <!-- Close button -->\n <button\n v-if=\"closable\"\n type=\"button\"\n class=\"b-drawer__close\"\n aria-label=\"Close drawer\"\n @click=\"requestClose\"\n >\n <slot name=\"closeIcon\">\n <svg\n class=\"b-drawer__close-icon\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n />\n </svg>\n </slot>\n </button>\n\n <!-- Title -->\n <div v-if=\"hasTitle\" :id=\"titleId\" class=\"b-drawer__title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n </div>\n\n <!-- Extra -->\n <div v-if=\"hasExtra\" class=\"b-drawer__extra\">\n <slot name=\"extra\">{{ extra }}</slot>\n </div>\n </div>\n\n <!-- Body -->\n <div v-if=\"shouldRender\" class=\"b-drawer__body\">\n <div v-if=\"loading\" class=\"b-drawer__loading\" aria-live=\"polite\">\n <svg\n class=\"b-drawer__spinner\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-dasharray=\"31.4 31.4\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span class=\"b-drawer__loading-text\">Loading…</span>\n </div>\n <slot v-else />\n </div>\n\n <!-- Footer -->\n <div v-if=\"hasFooter\" class=\"b-drawer__footer\">\n <slot name=\"footer\">{{ footer }}</slot>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (tokens)\n ──────────────────────────────────────────── */\n.b-drawer-root {\n --b-drawer-bg: #fff;\n --b-drawer-color: oklch(25% 0 0);\n --b-drawer-mask-bg: rgba(0, 0, 0, 0.45);\n --b-drawer-border-color: oklch(90% 0 0);\n --b-drawer-header-padding: 1rem 1.5rem;\n --b-drawer-body-padding: 1.5rem;\n --b-drawer-footer-padding: 0.5rem 1rem;\n --b-drawer-close-color: oklch(40% 0 0);\n --b-drawer-close-hover-color: oklch(20% 0 0);\n --b-drawer-title-font-size: 1rem;\n --b-drawer-title-font-weight: 600;\n --b-drawer-title-line-height: 1.5;\n --b-drawer-transition-duration: 300ms;\n --b-drawer-shadow:\n -6px 0 16px 0 rgba(0, 0, 0, 0.08), -3px 0 6px -4px rgba(0, 0, 0, 0.12),\n -9px 0 28px 8px rgba(0, 0, 0, 0.05);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-drawer-root {\n --b-drawer-bg: oklch(20% 0 0);\n --b-drawer-color: oklch(90% 0 0);\n --b-drawer-mask-bg: rgba(0, 0, 0, 0.65);\n --b-drawer-border-color: oklch(30% 0 0);\n --b-drawer-close-color: oklch(65% 0 0);\n --b-drawer-close-hover-color: oklch(90% 0 0);\n --b-drawer-shadow:\n -6px 0 16px 0 rgba(0, 0, 0, 0.24), -3px 0 6px -4px rgba(0, 0, 0, 0.36),\n -9px 0 28px 8px rgba(0, 0, 0, 0.2);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-drawer-root {\n --b-drawer-bg: oklch(20% 0 0);\n --b-drawer-color: oklch(90% 0 0);\n --b-drawer-mask-bg: rgba(0, 0, 0, 0.65);\n --b-drawer-border-color: oklch(30% 0 0);\n --b-drawer-close-color: oklch(65% 0 0);\n --b-drawer-close-hover-color: oklch(90% 0 0);\n --b-drawer-shadow:\n -6px 0 16px 0 rgba(0, 0, 0, 0.24), -3px 0 6px -4px rgba(0, 0, 0, 0.36),\n -9px 0 28px 8px rgba(0, 0, 0, 0.2);\n }\n}\n\n/* ─────────────────────────────────────────────\n Root wrapper (mask + panel)\n ───────────────────────────────────────────── */\n.b-drawer-root {\n position: fixed;\n inset: 0;\n}\n\n/* ── Mask ── */\n.b-drawer__mask {\n position: absolute;\n inset: 0;\n background: var(--b-drawer-mask-bg);\n}\n\n/* ── Panel base ── */\n.b-drawer {\n position: absolute;\n display: flex;\n flex-direction: column;\n background: var(--b-drawer-bg);\n color: var(--b-drawer-color);\n box-shadow: var(--b-drawer-shadow);\n outline: none;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n/* Placement positioning */\n.b-drawer--right {\n top: 0;\n right: 0;\n bottom: 0;\n}\n\n.b-drawer--left {\n top: 0;\n left: 0;\n bottom: 0;\n}\n\n.b-drawer--top {\n top: 0;\n left: 0;\n right: 0;\n}\n\n.b-drawer--bottom {\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n/* ── Header ── */\n.b-drawer__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--b-drawer-header-padding);\n border-bottom: 1px solid var(--b-drawer-border-color);\n flex-shrink: 0;\n}\n\n.b-drawer__header-title-wrapper {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n min-width: 0;\n flex: 1;\n}\n\n.b-drawer__title {\n font-size: var(--b-drawer-title-font-size);\n font-weight: var(--b-drawer-title-font-weight);\n line-height: var(--b-drawer-title-line-height);\n color: var(--b-drawer-color);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.b-drawer__extra {\n flex-shrink: 0;\n}\n\n/* ── Close button ── */\n.b-drawer__close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n border-radius: 0.25rem;\n background: transparent;\n color: var(--b-drawer-close-color);\n cursor: pointer;\n width: 1.375rem;\n height: 1.375rem;\n font-size: 1rem;\n line-height: 1;\n transition: color var(--b-drawer-transition-duration) ease;\n}\n\n.b-drawer__close:hover {\n color: var(--b-drawer-close-hover-color);\n}\n\n.b-drawer__close:focus-visible {\n outline: 2px solid oklch(62.3% 0.214 259.815);\n outline-offset: 2px;\n}\n\n.b-drawer__close-icon {\n width: 1em;\n height: 1em;\n fill: currentColor;\n display: block;\n}\n\n/* ── Body ── */\n.b-drawer__body {\n flex: 1;\n padding: var(--b-drawer-body-padding);\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n/* ── Footer ── */\n.b-drawer__footer {\n flex-shrink: 0;\n padding: var(--b-drawer-footer-padding);\n border-top: 1px solid var(--b-drawer-border-color);\n}\n\n/* ── Loading spinner ── */\n.b-drawer__loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.75rem;\n padding: 2rem;\n color: var(--b-drawer-close-color);\n}\n\n.b-drawer__spinner {\n width: 2rem;\n height: 2rem;\n animation: b-drawer-spin 1s linear infinite;\n}\n\n.b-drawer__loading-text {\n font-size: 0.875rem;\n}\n\n@keyframes b-drawer-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* ─────────────────────────────────────────────\n Slide transitions\n ─────────────────────────────────────────────\n Vue's <Transition> adds .b-drawer-{enter|leave}-* classes\n to the root element (.b-drawer-root). We target the\n children (.b-drawer and .b-drawer__mask) from there.\n ───────────────────────────────────────────── */\n\n/*\n * Vue's <Transition> listens for `transitionend` on the root element\n * (.b-drawer-root) to know when the leave animation finishes.\n * We must put a real transition on the root itself so that event fires.\n * We use `visibility` which is invisible to the user but gives Vue\n * the transitionend signal it needs.\n */\n.b-drawer-enter-active,\n.b-drawer-leave-active {\n transition: visibility var(--b-drawer-transition-duration) linear;\n}\n\n.b-drawer-leave-to {\n visibility: hidden;\n}\n\n/* - Active phase: set transition on children - */\n.b-drawer-enter-active > .b-drawer,\n.b-drawer-leave-active > .b-drawer {\n transition: transform var(--b-drawer-transition-duration) cubic-bezier(0.7, 0.3, 0.1, 1);\n}\n\n.b-drawer-enter-active > .b-drawer__mask,\n.b-drawer-leave-active > .b-drawer__mask {\n transition: opacity var(--b-drawer-transition-duration) ease;\n}\n\n/* - From / To: mask fades - */\n.b-drawer-enter-from > .b-drawer__mask,\n.b-drawer-leave-to > .b-drawer__mask {\n opacity: 0;\n}\n\n/* - From / To: panel slides (right) - */\n.b-drawer-enter-from > .b-drawer--right,\n.b-drawer-leave-to > .b-drawer--right {\n transform: translateX(100%);\n}\n\n/* - From / To: panel slides (left) - */\n.b-drawer-enter-from > .b-drawer--left,\n.b-drawer-leave-to > .b-drawer--left {\n transform: translateX(-100%);\n}\n\n/* - From / To: panel slides (top) - */\n.b-drawer-enter-from > .b-drawer--top,\n.b-drawer-leave-to > .b-drawer--top {\n transform: translateY(-100%);\n}\n\n/* - From / To: panel slides (bottom) - */\n.b-drawer-enter-from > .b-drawer--bottom,\n.b-drawer-leave-to > .b-drawer--bottom {\n transform: translateY(100%);\n}\n\n/* ── Reduced motion ── */\n@media (prefers-reduced-motion: reduce) {\n .b-drawer-enter-active,\n .b-drawer-leave-active,\n .b-drawer-enter-active > .b-drawer,\n .b-drawer-leave-active > .b-drawer,\n .b-drawer-enter-active > .b-drawer__mask,\n .b-drawer-leave-active > .b-drawer__mask {\n transition-duration: 0ms;\n }\n\n .b-drawer__spinner {\n animation: none;\n }\n}\n</style>\n"],"mappings":"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"}
|
package/dist/design-system83.js
CHANGED
|
@@ -1,102 +1,8 @@
|
|
|
1
|
-
import e from "./design-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var v = { class: "b-float-button__body" }, y = {
|
|
6
|
-
class: "b-float-button__icon",
|
|
7
|
-
"aria-hidden": "true"
|
|
8
|
-
}, b = {
|
|
9
|
-
key: 1,
|
|
10
|
-
width: "1em",
|
|
11
|
-
height: "1em",
|
|
12
|
-
viewBox: "0 0 24 24",
|
|
13
|
-
fill: "currentColor",
|
|
14
|
-
"aria-hidden": "true"
|
|
15
|
-
}, x = {
|
|
16
|
-
key: 0,
|
|
17
|
-
class: "b-float-button__description"
|
|
18
|
-
}, S = {
|
|
19
|
-
key: 1,
|
|
20
|
-
class: "b-float-button__tooltip",
|
|
21
|
-
role: "tooltip"
|
|
22
|
-
}, C = /* @__PURE__ */ u({
|
|
23
|
-
__name: "BFloatButton",
|
|
24
|
-
props: {
|
|
25
|
-
icon: {},
|
|
26
|
-
description: {},
|
|
27
|
-
tooltip: {},
|
|
28
|
-
type: { default: () => n.Default },
|
|
29
|
-
shape: { default: () => t.Circle },
|
|
30
|
-
href: {},
|
|
31
|
-
target: { default: "_blank" },
|
|
32
|
-
htmlType: { default: "button" },
|
|
33
|
-
badge: {},
|
|
34
|
-
disabled: {
|
|
35
|
-
type: Boolean,
|
|
36
|
-
default: !1
|
|
37
|
-
},
|
|
38
|
-
ariaLabel: {}
|
|
39
|
-
},
|
|
40
|
-
emits: ["click"],
|
|
41
|
-
setup(t, { emit: n }) {
|
|
42
|
-
let u = n, C = (e) => t.type === e, w = (e) => t.shape === e, T = i(() => {
|
|
43
|
-
if (t.badge && !t.badge.dot) return t.badge.count;
|
|
44
|
-
}), E = i(() => t.badge?.dot ?? !1), D = i(() => t.badge?.overflowCount ?? 99), O = i(() => {
|
|
45
|
-
let e = T.value;
|
|
46
|
-
if (e !== void 0 && !(e === 0 && !t.badge?.showZero)) return e > D.value ? `${D.value}+` : String(e);
|
|
47
|
-
}), k = i(() => E.value || O.value !== void 0);
|
|
48
|
-
function A(e) {
|
|
49
|
-
t.disabled || u("click", e);
|
|
50
|
-
}
|
|
51
|
-
let j = i(() => t.href ? "a" : "button");
|
|
52
|
-
return (n, i) => (p(), a(h(j.value), {
|
|
53
|
-
href: t.href,
|
|
54
|
-
target: t.href ? t.target : void 0,
|
|
55
|
-
type: t.href ? void 0 : t.htmlType,
|
|
56
|
-
disabled: !t.href && t.disabled ? !0 : void 0,
|
|
57
|
-
"aria-disabled": t.href && t.disabled ? "true" : void 0,
|
|
58
|
-
"aria-label": t.ariaLabel ?? t.tooltip,
|
|
59
|
-
title: t.tooltip,
|
|
60
|
-
class: d(["b-float-button", {
|
|
61
|
-
"b-float-button--circle": w("circle"),
|
|
62
|
-
"b-float-button--square": w("square"),
|
|
63
|
-
"b-float-button--default": C("default"),
|
|
64
|
-
"b-float-button--primary": C("primary"),
|
|
65
|
-
"b-float-button--disabled": t.disabled
|
|
66
|
-
}]),
|
|
67
|
-
onClick: A
|
|
68
|
-
}, {
|
|
69
|
-
default: _(() => [
|
|
70
|
-
k.value ? (p(), s("span", {
|
|
71
|
-
key: 0,
|
|
72
|
-
class: d(["b-float-button__badge", {
|
|
73
|
-
"b-float-button__badge--dot": E.value,
|
|
74
|
-
"b-float-button__badge--count": !E.value
|
|
75
|
-
}]),
|
|
76
|
-
style: f(t.badge?.color ? { backgroundColor: t.badge.color } : void 0),
|
|
77
|
-
"aria-hidden": "true"
|
|
78
|
-
}, [E.value ? o("", !0) : (p(), s(r, { key: 0 }, [l(g(O.value), 1)], 64))], 6)) : o("", !0),
|
|
79
|
-
c("span", v, [c("span", y, [m(n.$slots, "icon", {}, () => [t.icon ? (p(), a(e, {
|
|
80
|
-
key: 0,
|
|
81
|
-
icon: t.icon,
|
|
82
|
-
size: "md"
|
|
83
|
-
}, null, 8, ["icon"])) : (p(), s("svg", b, [...i[0] ||= [c("path", { d: "M19 13H13v6h-2v-6H5v-2h6V5h2v6h6v2z" }, null, -1)]]))])]), (n.$slots.description || t.description) && w("square") ? (p(), s("span", x, [m(n.$slots, "description", {}, () => [l(g(t.description), 1)])])) : o("", !0)]),
|
|
84
|
-
n.$slots.tooltip || t.tooltip && !t.ariaLabel ? (p(), s("span", S, [m(n.$slots, "tooltip", {}, () => [l(g(t.tooltip), 1)])])) : o("", !0)
|
|
85
|
-
]),
|
|
86
|
-
_: 3
|
|
87
|
-
}, 8, [
|
|
88
|
-
"href",
|
|
89
|
-
"target",
|
|
90
|
-
"type",
|
|
91
|
-
"disabled",
|
|
92
|
-
"aria-disabled",
|
|
93
|
-
"aria-label",
|
|
94
|
-
"title",
|
|
95
|
-
"class"
|
|
96
|
-
]));
|
|
97
|
-
}
|
|
98
|
-
});
|
|
1
|
+
import e from "./design-system81.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
//#region src/components/BDrawer/BDrawer.vue
|
|
4
|
+
var t = e;
|
|
99
5
|
//#endregion
|
|
100
|
-
export {
|
|
6
|
+
export { t as default };
|
|
101
7
|
|
|
102
8
|
//# sourceMappingURL=design-system83.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-system83.js","names":[],"sources":["../src/components/BFloatButton/BFloatButton.vue?vue&type=script&setup=true&lang.ts"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, renderSlot as _renderSlot, createBlock as _createBlock, createElementVNode as _createElementVNode, resolveDynamicComponent as _resolveDynamicComponent, withCtx as _withCtx } from \"vue\"\n\nconst _hoisted_1 = { class: \"b-float-button__body\" }\nconst _hoisted_2 = {\n class: \"b-float-button__icon\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_3 = {\n key: 1,\n width: \"1em\",\n height: \"1em\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_4 = {\n key: 0,\n class: \"b-float-button__description\"\n}\nconst _hoisted_5 = {\n key: 1,\n class: \"b-float-button__tooltip\",\n role: \"tooltip\"\n}\n\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// ─────────────────────────────────────────────\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'BFloatButton',\n props: {\n icon: {},\n description: {},\n tooltip: {},\n type: { default: () => (BFloatButtonType.Default) },\n shape: { default: () => (BFloatButtonShape.Circle) },\n href: {},\n target: { default: '_blank' },\n htmlType: { default: 'button' },\n badge: {},\n disabled: { type: Boolean, default: false },\n ariaLabel: {}\n },\n emits: [\"click\"],\n setup(__props: any, { emit: __emit }) {\n\n\n\nconst emit = __emit;\n\n\n\n// ─────────────────────────────────────────────\n// Computed helpers\n// ─────────────────────────────────────────────\nconst isType = (value: `${BFloatButtonType}`) => __props.type === value;\nconst isShape = (value: `${BFloatButtonShape}`) => __props.shape === value;\n\nconst badgeCount = computed(() => {\n if (!__props.badge) return undefined;\n if (__props.badge.dot) return undefined;\n return __props.badge.count;\n});\n\nconst showBadgeDot = computed(() => __props.badge?.dot ?? false);\n\nconst badgeOverflow = computed(() => __props.badge?.overflowCount ?? 99);\n\nconst badgeDisplayCount = computed(() => {\n const count = badgeCount.value;\n if (count === undefined) return undefined;\n if (count === 0 && !__props.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 (__props.disabled) return;\n emit('click', event);\n}\n\nconst rootTag = computed(() => (__props.href ? 'a' : 'button'));\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(_resolveDynamicComponent(rootTag.value), {\n href: __props.href,\n target: __props.href ? __props.target : undefined,\n type: !__props.href ? __props.htmlType : undefined,\n disabled: !__props.href && __props.disabled ? true : undefined,\n \"aria-disabled\": __props.href && __props.disabled ? 'true' : undefined,\n \"aria-label\": __props.ariaLabel ?? __props.tooltip,\n title: __props.tooltip,\n class: _normalizeClass([\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': __props.disabled,\n },\n ]),\n onClick: handleClick\n }, {\n default: _withCtx(() => [\n (showBadge.value)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: _normalizeClass([\"b-float-button__badge\", {\n 'b-float-button__badge--dot': showBadgeDot.value,\n 'b-float-button__badge--count': !showBadgeDot.value,\n }]),\n style: _normalizeStyle(__props.badge?.color ? { backgroundColor: __props.badge.color } : undefined),\n \"aria-hidden\": \"true\"\n }, [\n (!showBadgeDot.value)\n ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n _createTextVNode(_toDisplayString(badgeDisplayCount.value), 1)\n ], 64))\n : _createCommentVNode(\"\", true)\n ], 6))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", _hoisted_1, [\n _createElementVNode(\"span\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"icon\", {}, () => [\n (__props.icon)\n ? (_openBlock(), _createBlock(BIcon, {\n key: 0,\n icon: __props.icon,\n size: \"md\"\n }, null, 8, [\"icon\"]))\n : (_openBlock(), _createElementBlock(\"svg\", _hoisted_3, [...(_cache[0] || (_cache[0] = [\n _createElementVNode(\"path\", { d: \"M19 13H13v6h-2v-6H5v-2h6V5h2v6h6v2z\" }, null, -1)\n ]))]))\n ])\n ]),\n ((_ctx.$slots.description || __props.description) && isShape('square'))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, [\n _renderSlot(_ctx.$slots, \"description\", {}, () => [\n _createTextVNode(_toDisplayString(__props.description), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (_ctx.$slots.tooltip || (__props.tooltip && !__props.ariaLabel))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_5, [\n _renderSlot(_ctx.$slots, \"tooltip\", {}, () => [\n _createTextVNode(_toDisplayString(__props.tooltip), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 3\n }, 8, [\"href\", \"target\", \"type\", \"disabled\", \"aria-disabled\", \"aria-label\", \"title\", \"class\"]))\n}\n}\n\n})"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"design-system83.js","names":[],"sources":["../src/components/BDrawer/BDrawer.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { BDrawerPlacement, BDrawerSize } from '@/types';\nimport { computed, nextTick, onBeforeUnmount, ref, useId, watch } from 'vue';\n\n// ─────────────────────────────────────────────\n// Props & emits\n// ─────────────────────────────────────────────\nconst {\n placement = 'right',\n size = 'default',\n title = '',\n closable = true,\n mask = true,\n maskClosable = true,\n keyboard = true,\n destroyOnClose = false,\n width,\n height,\n zIndex = 1000,\n getContainer,\n autoFocus = true,\n modelValue = undefined,\n forceRender = false,\n extra = '',\n footer = '',\n loading = false,\n ariaLabel,\n} = defineProps<{\n /** Direction from which the drawer slides in. */\n placement?: BDrawerPlacement;\n /** Preset width/height: 'default' (378px) or 'large' (736px). */\n size?: BDrawerSize;\n /** Drawer title. Also accepts the `title` slot. */\n title?: string;\n /** Whether to show the close button. */\n closable?: boolean;\n /** Whether to show the mask overlay. */\n mask?: boolean;\n /** Clicking the mask closes the drawer. */\n maskClosable?: boolean;\n /** Pressing Escape closes the drawer. */\n keyboard?: boolean;\n /** Destroy child components when closing. */\n destroyOnClose?: boolean;\n /** Custom width (overrides size) for left/right placement. */\n width?: string | number;\n /** Custom height (overrides size) for top/bottom placement. */\n height?: string | number;\n /** z-index of the drawer. */\n zIndex?: number;\n /**\n * CSS selector or element to teleport the drawer into.\n * Defaults to `body`.\n */\n getContainer?: string | HTMLElement;\n /** Whether to auto-focus the first focusable element when opened. */\n autoFocus?: boolean;\n /**\n * Controlled visibility - bind with `v-model`.\n * When not provided the drawer manages its own state.\n */\n modelValue?: boolean;\n /** Force render the drawer content even when hidden. */\n forceRender?: boolean;\n /** Extra content in the header right area (also accepts the `extra` slot). */\n extra?: string;\n /** Footer content (also accepts the `footer` slot). */\n footer?: string;\n /** Show loading spinner in body area. */\n loading?: boolean;\n /**\n * Accessible label for the dialog when no visible title is present.\n * Required when `closable=false` and no `title` prop or `#title` slot is used.\n */\n ariaLabel?: string;\n}>();\n\nconst emit = defineEmits<{\n /** Fired when the user requests to close the drawer. */\n (e: 'close', event: MouseEvent | KeyboardEvent): void;\n /** Fired after the close transition completes. */\n (e: 'afterOpenChange', open: boolean): void;\n /** v-model support */\n (e: 'update:modelValue', value: boolean): void;\n}>();\n\nconst slots = defineSlots<{\n /** Main content of the drawer. */\n default?(): unknown;\n /** Overrides the `title` prop. */\n title?(): unknown;\n /** Overrides the `extra` prop (right side of header). */\n extra?(): unknown;\n /** Overrides the `footer` prop. */\n footer?(): unknown;\n /** Custom close icon. */\n closeIcon?(): unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────\nconst titleId = useId();\n\n/** Uncontrolled visibility. */\nconst internalOpen = ref(false);\n\n/** Effective visibility. */\nconst isOpen = computed(() => (modelValue !== undefined ? modelValue : internalOpen.value));\n\n/** Whether the drawer has ever been opened (for lazy rendering). */\nconst hasBeenOpened = ref(false);\n\n/** Whether the content should render. */\nconst shouldRender = computed(() => {\n if (forceRender) return true;\n if (destroyOnClose) return isOpen.value;\n return hasBeenOpened.value || isOpen.value;\n});\n\n// Track when drawer opens at least once\nwatch(isOpen, (val) => {\n if (val) hasBeenOpened.value = true;\n});\n\n// ─────────────────────────────────────────────\n// Derived state\n// ─────────────────────────────────────────────\nconst isHorizontal = computed(() => placement === 'left' || placement === 'right');\n\nconst sizeMap: Record<BDrawerSize, number> = {\n default: 378,\n large: 736,\n};\n\nconst resolvedWidth = computed(() => {\n if (width !== undefined) return typeof width === 'number' ? `${width}px` : width;\n return isHorizontal.value ? `${sizeMap[size]}px` : '100%';\n});\n\nconst resolvedHeight = computed(() => {\n if (height !== undefined) return typeof height === 'number' ? `${height}px` : height;\n return !isHorizontal.value ? `${sizeMap[size]}px` : '100%';\n});\n\nconst hasTitle = computed(() => Boolean(title || slots.title));\nconst hasExtra = computed(() => Boolean(extra || slots.extra));\nconst hasFooter = computed(() => Boolean(footer || slots.footer));\nconst hasHeader = computed(() => hasTitle.value || closable || hasExtra.value);\n\nconst teleportTarget = computed(() => {\n if (getContainer) return getContainer;\n return 'body';\n});\n\nconst panelStyle = computed(() => ({\n width: resolvedWidth.value,\n height: resolvedHeight.value,\n zIndex,\n}));\n\n// ─────────────────────────────────────────────\n// Focus management\n// ─────────────────────────────────────────────\nconst drawerRef = ref<HTMLElement | null>(null);\nlet previouslyFocusedElement: HTMLElement | null = null;\n\nfunction trapFocus(event: KeyboardEvent) {\n if (event.key !== 'Tab' || !drawerRef.value) return;\n\n const focusableSelectors =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n const focusable = Array.from(drawerRef.value.querySelectorAll<HTMLElement>(focusableSelectors));\n\n if (focusable.length === 0) {\n event.preventDefault();\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n if (event.shiftKey) {\n if (document.activeElement === first) {\n event.preventDefault();\n last.focus();\n }\n } else {\n if (document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n }\n}\n\nfunction focusFirst() {\n if (!autoFocus || !drawerRef.value) return;\n\n nextTick(() => {\n if (!drawerRef.value) return;\n const focusableSelectors =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n const first = drawerRef.value.querySelector<HTMLElement>(focusableSelectors);\n if (first) {\n first.focus();\n } else {\n // Focus the panel itself as a fallback\n drawerRef.value.focus();\n }\n });\n}\n\nwatch(isOpen, (val) => {\n if (val) {\n previouslyFocusedElement = document.activeElement as HTMLElement | null;\n nextTick(() => focusFirst());\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n});\n\nonBeforeUnmount(() => {\n document.body.style.overflow = '';\n});\n\n// ─────────────────────────────────────────────\n// Behaviour\n// ─────────────────────────────────────────────\nfunction requestClose(event: MouseEvent | KeyboardEvent) {\n emit('close', event);\n if (modelValue !== undefined) {\n emit('update:modelValue', false);\n } else {\n internalOpen.value = false;\n }\n}\n\nfunction onMaskClick(event: MouseEvent) {\n if (maskClosable) {\n requestClose(event);\n }\n}\n\nfunction onKeydown(event: KeyboardEvent) {\n if (event.key === 'Escape' && keyboard) {\n event.stopPropagation();\n requestClose(event);\n }\n trapFocus(event);\n}\n\nfunction onAfterEnter() {\n emit('afterOpenChange', true);\n}\n\nfunction onAfterLeave() {\n emit('afterOpenChange', false);\n // Restore focus to the previously focused element\n if (previouslyFocusedElement && typeof previouslyFocusedElement.focus === 'function') {\n previouslyFocusedElement.focus();\n previouslyFocusedElement = null;\n }\n}\n\n// ─────────────────────────────────────────────\n// Public API\n// ─────────────────────────────────────────────\nfunction open() {\n if (modelValue !== undefined) {\n emit('update:modelValue', true);\n } else {\n internalOpen.value = true;\n }\n}\n\ndefineExpose({ open });\n</script>\n\n<template>\n <Teleport :to=\"teleportTarget\">\n <Transition name=\"b-drawer\" @after-enter=\"onAfterEnter\" @after-leave=\"onAfterLeave\">\n <div\n v-if=\"isOpen\"\n class=\"b-drawer-root\"\n :class=\"`b-drawer-root--${placement}`\"\n :style=\"{ zIndex }\"\n >\n <!-- Mask -->\n <div v-if=\"mask\" class=\"b-drawer__mask\" aria-hidden=\"true\" @click=\"onMaskClick\" />\n\n <!-- Panel -->\n <div\n ref=\"drawerRef\"\n class=\"b-drawer\"\n :class=\"[\n `b-drawer--${placement}`,\n `b-drawer--${size}`,\n {\n 'b-drawer--has-header': hasHeader,\n 'b-drawer--has-footer': hasFooter,\n },\n ]\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-label=\"!hasTitle ? ariaLabel : undefined\"\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\n :style=\"panelStyle\"\n tabindex=\"-1\"\n @keydown=\"onKeydown\"\n >\n <!-- Header -->\n <div v-if=\"hasHeader\" class=\"b-drawer__header\">\n <div class=\"b-drawer__header-title-wrapper\">\n <!-- Close button -->\n <button\n v-if=\"closable\"\n type=\"button\"\n class=\"b-drawer__close\"\n aria-label=\"Close drawer\"\n @click=\"requestClose\"\n >\n <slot name=\"closeIcon\">\n <svg\n class=\"b-drawer__close-icon\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"\n />\n </svg>\n </slot>\n </button>\n\n <!-- Title -->\n <div v-if=\"hasTitle\" :id=\"titleId\" class=\"b-drawer__title\">\n <slot name=\"title\">{{ title }}</slot>\n </div>\n </div>\n\n <!-- Extra -->\n <div v-if=\"hasExtra\" class=\"b-drawer__extra\">\n <slot name=\"extra\">{{ extra }}</slot>\n </div>\n </div>\n\n <!-- Body -->\n <div v-if=\"shouldRender\" class=\"b-drawer__body\">\n <div v-if=\"loading\" class=\"b-drawer__loading\" aria-live=\"polite\">\n <svg\n class=\"b-drawer__spinner\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-dasharray=\"31.4 31.4\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span class=\"b-drawer__loading-text\">Loading…</span>\n </div>\n <slot v-else />\n </div>\n\n <!-- Footer -->\n <div v-if=\"hasFooter\" class=\"b-drawer__footer\">\n <slot name=\"footer\">{{ footer }}</slot>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<style>\n/* ────────────────────────────────────────────\n CSS Custom Properties (tokens)\n ──────────────────────────────────────────── */\n.b-drawer-root {\n --b-drawer-bg: #fff;\n --b-drawer-color: oklch(25% 0 0);\n --b-drawer-mask-bg: rgba(0, 0, 0, 0.45);\n --b-drawer-border-color: oklch(90% 0 0);\n --b-drawer-header-padding: 1rem 1.5rem;\n --b-drawer-body-padding: 1.5rem;\n --b-drawer-footer-padding: 0.5rem 1rem;\n --b-drawer-close-color: oklch(40% 0 0);\n --b-drawer-close-hover-color: oklch(20% 0 0);\n --b-drawer-title-font-size: 1rem;\n --b-drawer-title-font-weight: 600;\n --b-drawer-title-line-height: 1.5;\n --b-drawer-transition-duration: 300ms;\n --b-drawer-shadow:\n -6px 0 16px 0 rgba(0, 0, 0, 0.08), -3px 0 6px -4px rgba(0, 0, 0, 0.12),\n -9px 0 28px 8px rgba(0, 0, 0, 0.05);\n}\n\n/* ── Dark mode ── */\n[data-prefers-color='dark'] .b-drawer-root {\n --b-drawer-bg: oklch(20% 0 0);\n --b-drawer-color: oklch(90% 0 0);\n --b-drawer-mask-bg: rgba(0, 0, 0, 0.65);\n --b-drawer-border-color: oklch(30% 0 0);\n --b-drawer-close-color: oklch(65% 0 0);\n --b-drawer-close-hover-color: oklch(90% 0 0);\n --b-drawer-shadow:\n -6px 0 16px 0 rgba(0, 0, 0, 0.24), -3px 0 6px -4px rgba(0, 0, 0, 0.36),\n -9px 0 28px 8px rgba(0, 0, 0, 0.2);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-drawer-root {\n --b-drawer-bg: oklch(20% 0 0);\n --b-drawer-color: oklch(90% 0 0);\n --b-drawer-mask-bg: rgba(0, 0, 0, 0.65);\n --b-drawer-border-color: oklch(30% 0 0);\n --b-drawer-close-color: oklch(65% 0 0);\n --b-drawer-close-hover-color: oklch(90% 0 0);\n --b-drawer-shadow:\n -6px 0 16px 0 rgba(0, 0, 0, 0.24), -3px 0 6px -4px rgba(0, 0, 0, 0.36),\n -9px 0 28px 8px rgba(0, 0, 0, 0.2);\n }\n}\n\n/* ─────────────────────────────────────────────\n Root wrapper (mask + panel)\n ───────────────────────────────────────────── */\n.b-drawer-root {\n position: fixed;\n inset: 0;\n}\n\n/* ── Mask ── */\n.b-drawer__mask {\n position: absolute;\n inset: 0;\n background: var(--b-drawer-mask-bg);\n}\n\n/* ── Panel base ── */\n.b-drawer {\n position: absolute;\n display: flex;\n flex-direction: column;\n background: var(--b-drawer-bg);\n color: var(--b-drawer-color);\n box-shadow: var(--b-drawer-shadow);\n outline: none;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n/* Placement positioning */\n.b-drawer--right {\n top: 0;\n right: 0;\n bottom: 0;\n}\n\n.b-drawer--left {\n top: 0;\n left: 0;\n bottom: 0;\n}\n\n.b-drawer--top {\n top: 0;\n left: 0;\n right: 0;\n}\n\n.b-drawer--bottom {\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n/* ── Header ── */\n.b-drawer__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--b-drawer-header-padding);\n border-bottom: 1px solid var(--b-drawer-border-color);\n flex-shrink: 0;\n}\n\n.b-drawer__header-title-wrapper {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n min-width: 0;\n flex: 1;\n}\n\n.b-drawer__title {\n font-size: var(--b-drawer-title-font-size);\n font-weight: var(--b-drawer-title-font-weight);\n line-height: var(--b-drawer-title-line-height);\n color: var(--b-drawer-color);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.b-drawer__extra {\n flex-shrink: 0;\n}\n\n/* ── Close button ── */\n.b-drawer__close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n border-radius: 0.25rem;\n background: transparent;\n color: var(--b-drawer-close-color);\n cursor: pointer;\n width: 1.375rem;\n height: 1.375rem;\n font-size: 1rem;\n line-height: 1;\n transition: color var(--b-drawer-transition-duration) ease;\n}\n\n.b-drawer__close:hover {\n color: var(--b-drawer-close-hover-color);\n}\n\n.b-drawer__close:focus-visible {\n outline: 2px solid oklch(62.3% 0.214 259.815);\n outline-offset: 2px;\n}\n\n.b-drawer__close-icon {\n width: 1em;\n height: 1em;\n fill: currentColor;\n display: block;\n}\n\n/* ── Body ── */\n.b-drawer__body {\n flex: 1;\n padding: var(--b-drawer-body-padding);\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n/* ── Footer ── */\n.b-drawer__footer {\n flex-shrink: 0;\n padding: var(--b-drawer-footer-padding);\n border-top: 1px solid var(--b-drawer-border-color);\n}\n\n/* ── Loading spinner ── */\n.b-drawer__loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.75rem;\n padding: 2rem;\n color: var(--b-drawer-close-color);\n}\n\n.b-drawer__spinner {\n width: 2rem;\n height: 2rem;\n animation: b-drawer-spin 1s linear infinite;\n}\n\n.b-drawer__loading-text {\n font-size: 0.875rem;\n}\n\n@keyframes b-drawer-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* ─────────────────────────────────────────────\n Slide transitions\n ─────────────────────────────────────────────\n Vue's <Transition> adds .b-drawer-{enter|leave}-* classes\n to the root element (.b-drawer-root). We target the\n children (.b-drawer and .b-drawer__mask) from there.\n ───────────────────────────────────────────── */\n\n/*\n * Vue's <Transition> listens for `transitionend` on the root element\n * (.b-drawer-root) to know when the leave animation finishes.\n * We must put a real transition on the root itself so that event fires.\n * We use `visibility` which is invisible to the user but gives Vue\n * the transitionend signal it needs.\n */\n.b-drawer-enter-active,\n.b-drawer-leave-active {\n transition: visibility var(--b-drawer-transition-duration) linear;\n}\n\n.b-drawer-leave-to {\n visibility: hidden;\n}\n\n/* - Active phase: set transition on children - */\n.b-drawer-enter-active > .b-drawer,\n.b-drawer-leave-active > .b-drawer {\n transition: transform var(--b-drawer-transition-duration) cubic-bezier(0.7, 0.3, 0.1, 1);\n}\n\n.b-drawer-enter-active > .b-drawer__mask,\n.b-drawer-leave-active > .b-drawer__mask {\n transition: opacity var(--b-drawer-transition-duration) ease;\n}\n\n/* - From / To: mask fades - */\n.b-drawer-enter-from > .b-drawer__mask,\n.b-drawer-leave-to > .b-drawer__mask {\n opacity: 0;\n}\n\n/* - From / To: panel slides (right) - */\n.b-drawer-enter-from > .b-drawer--right,\n.b-drawer-leave-to > .b-drawer--right {\n transform: translateX(100%);\n}\n\n/* - From / To: panel slides (left) - */\n.b-drawer-enter-from > .b-drawer--left,\n.b-drawer-leave-to > .b-drawer--left {\n transform: translateX(-100%);\n}\n\n/* - From / To: panel slides (top) - */\n.b-drawer-enter-from > .b-drawer--top,\n.b-drawer-leave-to > .b-drawer--top {\n transform: translateY(-100%);\n}\n\n/* - From / To: panel slides (bottom) - */\n.b-drawer-enter-from > .b-drawer--bottom,\n.b-drawer-leave-to > .b-drawer--bottom {\n transform: translateY(100%);\n}\n\n/* ── Reduced motion ── */\n@media (prefers-reduced-motion: reduce) {\n .b-drawer-enter-active,\n .b-drawer-leave-active,\n .b-drawer-enter-active > .b-drawer,\n .b-drawer-leave-active > .b-drawer,\n .b-drawer-enter-active > .b-drawer__mask,\n .b-drawer-leave-active > .b-drawer__mask {\n transition-duration: 0ms;\n }\n\n .b-drawer__spinner {\n animation: none;\n }\n}\n</style>\n"],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/components/BDropdown/types.ts
|
|
2
|
+
var e = /* @__PURE__ */ function(e) {
|
|
3
|
+
return e.Hover = "hover", e.Click = "click", e.ContextMenu = "contextMenu", e;
|
|
4
|
+
}({}), t = /* @__PURE__ */ function(e) {
|
|
5
|
+
return e.Bottom = "bottom", e.BottomLeft = "bottomLeft", e.BottomRight = "bottomRight", e.Top = "top", e.TopLeft = "topLeft", e.TopRight = "topRight", e;
|
|
6
|
+
}({});
|
|
7
|
+
//#endregion
|
|
8
|
+
export { t as BDropdownPlacement, e as BDropdownTrigger };
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=design-system84.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-system84.js","names":[],"sources":["../src/components/BDropdown/types.ts"],"sourcesContent":["export enum BDropdownTrigger {\n Hover = 'hover',\n Click = 'click',\n ContextMenu = 'contextMenu',\n}\n\nexport enum BDropdownPlacement {\n Bottom = 'bottom',\n BottomLeft = 'bottomLeft',\n BottomRight = 'bottomRight',\n Top = 'top',\n TopLeft = 'topLeft',\n TopRight = 'topRight',\n}\n\nexport interface BDropdownMenuItem {\n /** Unique key for the menu item. */\n key: string | number;\n /** Display label text. */\n label: string;\n /** Icon name to show before the label. */\n icon?: string;\n /** Whether this item is disabled. */\n disabled?: boolean;\n /** Whether this item is a danger/destructive action. */\n danger?: boolean;\n /** Nested children for sub-menus. */\n children?: BDropdownMenuItem[];\n /** If set to 'divider', renders a separator line. */\n type?: 'divider' | 'group';\n /** Group title when type is 'group'. */\n title?: string;\n}\n\nexport interface BDropdownMenuProps {\n /** Array of menu items to render. */\n items: BDropdownMenuItem[];\n /** Currently selected keys. */\n selectedKeys?: (string | number)[];\n /** Whether the menu is selectable. */\n selectable?: boolean;\n /** Allow multiple selection. */\n multiple?: boolean;\n}\n"],"mappings":";AAAA,IAAY,IAAL,yBAAA,GAAA;QACL,EAAA,QAAA,SACA,EAAA,QAAA,SACA,EAAA,cAAA;KACD,EAEW,IAAL,yBAAA,GAAA;QACL,EAAA,SAAA,UACA,EAAA,aAAA,cACA,EAAA,cAAA,eACA,EAAA,MAAA,OACA,EAAA,UAAA,WACA,EAAA,WAAA;KACD"}
|