@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"design-system225.js","names":[],"sources":["../src/components/BTabs/BTabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Component, VNode } from 'vue';\nimport { computed, defineComponent, h, nextTick, onMounted, provide, ref, useId, watch } from 'vue';\n\nimport type {\n BTabItem,\n BTabPaneRegistration,\n BTabsContext,\n BTabsPlacement,\n BTabsSize,\n BTabsType,\n} from './types';\nimport { BTabsContextKey } from './types';\n\n// ─────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────\nconst {\n activeKey,\n defaultActiveKey,\n items = [],\n type = 'line',\n placement = 'top',\n size = 'middle',\n centered = false,\n animated = true,\n hideAdd = false,\n destroyOnHidden = false,\n keepAlive = false,\n tabBarGutter,\n} = defineProps<{\n /** Current active tab key (controlled via v-model:activeKey). */\n activeKey?: string;\n /** Initial active tab key for uncontrolled mode. @default first non-disabled tab */\n defaultActiveKey?: string;\n /** Tab items configuration. When provided and non-empty, BTabPane children are ignored. */\n items?: BTabItem[];\n /** Visual style of the tabs. @default 'line' */\n type?: BTabsType;\n /** Position of the tab bar. @default 'top' */\n placement?: BTabsPlacement;\n /** Size preset for the tab bar. @default 'middle' */\n size?: BTabsSize;\n /** Whether to center the tab items. @default false */\n centered?: boolean;\n /** Whether content switching is animated. @default true */\n animated?: boolean;\n /** Whether to hide the add button in editable-card mode. @default false */\n hideAdd?: boolean;\n /** Whether to destroy inactive tab content globally. @default false */\n destroyOnHidden?: boolean;\n /** Whether to keep component state alive when switching tabs globally. @default false */\n keepAlive?: boolean;\n /** Gap between tabs in pixels. */\n tabBarGutter?: number;\n}>();\n\n// ─────────────────────────────────────────────\n// Emits\n// ─────────────────────────────────────────────\nconst emit = defineEmits<{\n /** Fires when the active tab changes. */\n (e: 'update:activeKey', key: string): void;\n /** Fires when the active tab changes (alias for update:activeKey). */\n (e: 'change', key: string): void;\n /** Fires when a tab is clicked. */\n (e: 'tabClick', key: string, event: MouseEvent): void;\n /** Fires when a tab is added or removed (editable-card only). */\n (e: 'edit', key: string | null, action: 'add' | 'remove'): void;\n}>();\n\n// ─────────────────────────────────────────────\n// Slots\n// ─────────────────────────────────────────────\ndefineSlots<{\n /** Items mode: receives { item } scoped prop. Pane mode: contains BTabPane children (no props). */\n default?: (props: { item?: BTabItem }) => unknown;\n /** Custom label renderer for each tab (items mode). */\n label?: (props: { item: BTabItem; active: boolean }) => unknown;\n /** Extra content on the left side of the tab bar. */\n leftExtra?: () => unknown;\n /** Extra content on the right side of the tab bar. */\n rightExtra?: () => unknown;\n /** Custom add button (editable-card type). */\n addIcon?: () => unknown;\n /** Custom remove/close icon (editable-card type). */\n removeIcon?: (props: { item: BTabItem }) => unknown;\n}>();\n\n// ─────────────────────────────────────────────\n// Instance-scoped ID prefix (prevents duplicate IDs when multiple BTabs on page)\n// ─────────────────────────────────────────────\nconst uid = useId();\nconst tabId = (key: string) => `${uid}-tab-${key}`;\nconst panelId = (key: string) => `${uid}-tabpanel-${key}`;\n\n// ─────────────────────────────────────────────\n// Pane registry (for BTabPane child component API)\n// ─────────────────────────────────────────────\nconst paneRegistry = ref(new Map<string, BTabPaneRegistration>());\nconst paneOrder = ref<string[]>([]);\n\nfunction registerPane(pane: BTabPaneRegistration) {\n paneRegistry.value.set(pane.key, pane);\n if (!paneOrder.value.includes(pane.key)) {\n paneOrder.value = [...paneOrder.value, pane.key];\n }\n}\n\nfunction unregisterPane(key: string) {\n paneRegistry.value.delete(key);\n paneOrder.value = paneOrder.value.filter((k) => k !== key);\n}\n\nfunction updatePane(key: string, pane: BTabPaneRegistration) {\n paneRegistry.value.set(key, pane);\n}\n\n// ─────────────────────────────────────────────\n// Mode detection + effective items\n// ─────────────────────────────────────────────\nconst isItemsMode = computed(() => items && items.length > 0);\n\nconst effectiveItems = computed<BTabItem[]>(() => {\n if (isItemsMode.value) return items;\n return paneOrder.value\n .map((key) => paneRegistry.value.get(key))\n .filter((p): p is BTabPaneRegistration => p !== undefined)\n .map((pane) => ({\n key: pane.key,\n label: pane.label,\n disabled: pane.disabled,\n closable: pane.closable,\n destroyOnHidden: pane.destroyOnHidden,\n forceRender: pane.forceRender,\n keepAlive: pane.keepAlive,\n }));\n});\n\n// ─────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────\nconst isControlled = computed(() => activeKey !== undefined);\n\nconst firstEnabledKey = computed(\n () => effectiveItems.value.find((i) => !i.disabled)?.key ?? effectiveItems.value[0]?.key ?? '',\n);\n\nconst internalKey = ref<string>(activeKey ?? defaultActiveKey ?? firstEnabledKey.value);\n\nwatch(\n () => activeKey,\n (val) => {\n if (val !== undefined) internalKey.value = val;\n },\n);\n\nwatch(effectiveItems, () => {\n if (\n internalKey.value === undefined ||\n !effectiveItems.value.find((i) => i.key === internalKey.value)\n ) {\n internalKey.value = firstEnabledKey.value;\n }\n});\n\nconst currentKey = computed(() => (isControlled.value ? activeKey! : internalKey.value));\n\n// ─────────────────────────────────────────────\n// Provide context to BTabPane children\n// ─────────────────────────────────────────────\nconst context: BTabsContext = {\n activeKey: currentKey,\n type: computed(() => type),\n size: computed(() => size),\n placement: computed(() => placement),\n keepAlive: computed(() => keepAlive),\n destroyOnHidden: computed(() => destroyOnHidden),\n register: registerPane,\n unregister: unregisterPane,\n update: updatePane,\n};\n\nprovide(BTabsContextKey, context);\n\n// ─────────────────────────────────────────────\n// Tab activation\n// ─────────────────────────────────────────────\nfunction activateTab(key: string, event?: MouseEvent) {\n const item = effectiveItems.value.find((i) => i.key === key);\n if (!item || item.disabled) return;\n\n if (event) {\n emit('tabClick', key, event);\n }\n\n if (key === currentKey.value) return;\n\n if (!isControlled.value) {\n internalKey.value = key;\n }\n emit('update:activeKey', key);\n emit('change', key);\n}\n\n// ─────────────────────────────────────────────\n// Editable-card actions\n// ─────────────────────────────────────────────\nfunction onAdd() {\n emit('edit', null, 'add');\n}\n\nfunction onRemove(key: string, event: MouseEvent) {\n event.stopPropagation();\n emit('edit', key, 'remove');\n}\n\n// ─────────────────────────────────────────────\n// Ink bar positioning\n// ─────────────────────────────────────────────\nconst tabListRef = ref<HTMLElement | null>(null);\nconst inkBarStyle = ref<Record<string, string>>({});\n\nfunction updateInkBar() {\n if (!tabListRef.value || type !== 'line') return;\n const activeEl = tabListRef.value.querySelector<HTMLElement>('.b-tabs__tab--active');\n if (!activeEl) return;\n\n const isVertical = placement === 'left' || placement === 'right';\n\n if (isVertical) {\n inkBarStyle.value = {\n top: `${activeEl.offsetTop}px`,\n height: `${activeEl.offsetHeight}px`,\n };\n } else {\n inkBarStyle.value = {\n left: `${activeEl.offsetLeft}px`,\n width: `${activeEl.offsetWidth}px`,\n };\n }\n}\n\nwatch(currentKey, async () => {\n await nextTick();\n updateInkBar();\n});\n\nonMounted(() => {\n updateInkBar();\n});\n\n// ─────────────────────────────────────────────\n// Keyboard navigation (roving tabindex)\n// ─────────────────────────────────────────────\nfunction onKeydown(event: KeyboardEvent) {\n const isVertical = placement === 'left' || placement === 'right';\n const nextKeys = isVertical ? ['ArrowDown'] : ['ArrowRight'];\n const prevKeys = isVertical ? ['ArrowUp'] : ['ArrowLeft'];\n\n // Delete key closes the active tab in editable-card mode\n if (event.key === 'Delete' && type === 'editable-card') {\n const item = effectiveItems.value.find((i) => i.key === currentKey.value);\n if (item && item.closable !== false) {\n event.preventDefault();\n emit('edit', currentKey.value, 'remove');\n }\n return;\n }\n\n if ([...nextKeys, ...prevKeys, 'Home', 'End'].includes(event.key)) {\n event.preventDefault();\n const enabledItems = effectiveItems.value.filter((i) => !i.disabled);\n if (enabledItems.length === 0) return;\n\n const currentIdx = enabledItems.findIndex((i) => i.key === currentKey.value);\n\n let targetIdx: number;\n if (nextKeys.includes(event.key)) {\n targetIdx = (currentIdx + 1) % enabledItems.length;\n } else if (prevKeys.includes(event.key)) {\n targetIdx = (currentIdx - 1 + enabledItems.length) % enabledItems.length;\n } else if (event.key === 'Home') {\n targetIdx = 0;\n } else {\n targetIdx = enabledItems.length - 1;\n }\n\n const targetKey = enabledItems[targetIdx].key;\n activateTab(targetKey);\n\n nextTick(() => {\n if (!tabListRef.value) return;\n const targetEl = tabListRef.value.querySelector<HTMLElement>(`[data-tab-key=\"${targetKey}\"]`);\n targetEl?.focus();\n });\n }\n}\n\n// ─────────────────────────────────────────────\n// KeepAlive + content visibility\n// ─────────────────────────────────────────────\nconst renderedKeys = ref<Set<string>>(new Set([currentKey.value]));\n\nwatch(currentKey, (key) => {\n renderedKeys.value.add(key);\n});\n\nfunction shouldUseKeepAlive(item: BTabItem): boolean {\n if (item.destroyOnHidden) return false;\n if (item.keepAlive !== undefined) return item.keepAlive;\n if (destroyOnHidden) return false;\n return keepAlive;\n}\n\nfunction shouldRender(item: BTabItem): boolean {\n if (item.forceRender) return true;\n if (shouldUseKeepAlive(item)) return true;\n const itemDestroy = item.destroyOnHidden ?? destroyOnHidden;\n if (itemDestroy) return item.key === currentKey.value;\n return renderedKeys.value.has(item.key);\n}\n\n// ─────────────────────────────────────────────\n// KeepAlive panel wrapper components\n// ─────────────────────────────────────────────\nconst panelWrappers = computed<Record<string, Component>>(() => {\n const wrappers: Record<string, Component> = {};\n for (const item of effectiveItems.value) {\n if (!shouldUseKeepAlive(item)) continue;\n wrappers[item.key] = defineComponent({\n name: `BTabPanel_${item.key}`,\n setup() {\n return () => {\n const pane = paneRegistry.value.get(item.key);\n if (pane) {\n return pane.renderContent();\n }\n return null;\n };\n },\n });\n }\n return wrappers;\n});\n\nfunction getPaneContent(key: string): VNode[] {\n const pane = paneRegistry.value.get(key);\n return pane?.renderContent() ?? [];\n}\n\nfunction getPaneLabel(key: string): VNode[] | undefined {\n const pane = paneRegistry.value.get(key);\n return pane?.renderLabel?.();\n}\n\n// ─────────────────────────────────────────────\n// Computed classes\n// ─────────────────────────────────────────────\nconst rootClasses = computed(() => [\n 'b-tabs',\n `b-tabs--${type}`,\n `b-tabs--${placement}`,\n `b-tabs--${size}`,\n { 'b-tabs--centered': centered },\n]);\n\nconst tabBarGutterStyle = computed(() =>\n tabBarGutter !== undefined ? { gap: `${tabBarGutter}px` } : undefined,\n);\n</script>\n\n<template>\n <div :class=\"rootClasses\">\n <!-- Tab bar -->\n <div class=\"b-tabs__header\">\n <div v-if=\"$slots.leftExtra\" class=\"b-tabs__extra b-tabs__extra--left\">\n <slot name=\"leftExtra\" />\n </div>\n\n <div\n ref=\"tabListRef\"\n class=\"b-tabs__list\"\n role=\"tablist\"\n :aria-orientation=\"\n placement === 'left' || placement === 'right' ? 'vertical' : 'horizontal'\n \"\n :style=\"tabBarGutterStyle\"\n >\n <div\n v-for=\"item in effectiveItems\"\n :key=\"item.key\"\n :data-tab-key=\"item.key\"\n class=\"b-tabs__tab\"\n :class=\"{\n 'b-tabs__tab--active': item.key === currentKey,\n 'b-tabs__tab--disabled': item.disabled,\n }\"\n role=\"tab\"\n :aria-selected=\"item.key === currentKey\"\n :aria-disabled=\"item.disabled || undefined\"\n :aria-controls=\"panelId(item.key)\"\n :id=\"tabId(item.key)\"\n :tabindex=\"item.key === currentKey ? 0 : -1\"\n @click=\"!item.disabled && activateTab(item.key, $event)\"\n @keydown=\"onKeydown\"\n >\n <span class=\"b-tabs__tab-label\">\n <!-- Items mode: use label slot or item.label -->\n <template v-if=\"isItemsMode\">\n <slot name=\"label\" :item=\"item\" :active=\"item.key === currentKey\">\n {{ item.label }}\n </slot>\n </template>\n <!-- Pane mode: use pane's renderLabel or label string -->\n <template v-else>\n <component\n v-if=\"getPaneLabel(item.key)\"\n :is=\"() => h('span', getPaneLabel(item.key)!)\"\n />\n <template v-else>{{ item.label }}</template>\n </template>\n </span>\n <span\n v-if=\"type === 'editable-card' && item.closable !== false\"\n class=\"b-tabs__tab-remove\"\n aria-hidden=\"true\"\n @click.stop=\"onRemove(item.key, $event)\"\n >\n <slot name=\"removeIcon\" :item=\"item\">\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" class=\"b-tabs__close-icon\">\n <path\n d=\"M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z\"\n />\n </svg>\n </slot>\n </span>\n </div>\n\n <!-- Ink bar (line type only) -->\n <div\n v-if=\"type === 'line'\"\n class=\"b-tabs__ink-bar\"\n aria-hidden=\"true\"\n :style=\"inkBarStyle\"\n />\n </div>\n\n <!-- Add button (outside tablist to avoid aria-required-children violation) -->\n <button\n v-if=\"type === 'editable-card' && !hideAdd\"\n class=\"b-tabs__add\"\n aria-label=\"Add tab\"\n @click=\"onAdd\"\n >\n <slot name=\"addIcon\">\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" class=\"b-tabs__add-icon\">\n <path\n d=\"M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z\"\n />\n </svg>\n </slot>\n </button>\n\n <div v-if=\"$slots.rightExtra\" class=\"b-tabs__extra b-tabs__extra--right\">\n <slot name=\"rightExtra\" />\n </div>\n </div>\n\n <!-- Hidden slot area for BTabPane registration (pane mode only) -->\n <div v-if=\"!isItemsMode\" v-show=\"false\" aria-hidden=\"true\" style=\"display: none\">\n <slot />\n </div>\n\n <!-- Tab panels -->\n <div class=\"b-tabs__content\">\n <template v-for=\"item in effectiveItems\" :key=\"item.key\">\n <!-- KeepAlive panels -->\n <div\n v-if=\"shouldUseKeepAlive(item)\"\n :id=\"panelId(item.key)\"\n class=\"b-tabs__panel\"\n :class=\"{\n 'b-tabs__panel--active': item.key === currentKey,\n 'b-tabs__panel--animated': animated,\n }\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId(item.key)\"\n :tabindex=\"item.key === currentKey ? 0 : -1\"\n :aria-hidden=\"item.key !== currentKey\"\n v-show=\"item.key === currentKey\"\n >\n <!-- Pane mode: KeepAlive caches wrapper component instances -->\n <KeepAlive v-if=\"!isItemsMode\">\n <component\n v-if=\"item.key === currentKey\"\n :is=\"panelWrappers[item.key] ?? (() => null)\"\n :key=\"item.key\"\n />\n </KeepAlive>\n <!-- Items mode: always render slot content; v-show on parent preserves state -->\n <template v-if=\"isItemsMode\">\n <slot :item=\"item\" />\n </template>\n </div>\n\n <!-- Standard panels (no KeepAlive) -->\n <div\n v-else-if=\"shouldRender(item)\"\n v-show=\"item.key === currentKey\"\n :id=\"panelId(item.key)\"\n class=\"b-tabs__panel\"\n :class=\"{\n 'b-tabs__panel--active': item.key === currentKey,\n 'b-tabs__panel--animated': animated,\n }\"\n role=\"tabpanel\"\n :aria-labelledby=\"tabId(item.key)\"\n :tabindex=\"item.key === currentKey ? 0 : -1\"\n :aria-hidden=\"item.key !== currentKey\"\n >\n <!-- Items mode: scoped slot -->\n <template v-if=\"isItemsMode\">\n <slot :item=\"item\" />\n </template>\n <!-- Pane mode: render registered content -->\n <component v-else :is=\"() => getPaneContent(item.key)\" />\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<style>\n/* ─────────────────────────────────────────────\n BTabs - Design tokens (scoped to .b-tabs)\n ───────────────────────────────────────────── */\n.b-tabs {\n --b-tabs-ink-bar-color: oklch(54.6% 0.245 262.881);\n --b-tabs-item-active-color: oklch(35% 0.2 260);\n --b-tabs-item-color: oklch(30% 0.02 260 / 88%);\n --b-tabs-item-hover-color: oklch(54.6% 0.245 262.881);\n --b-tabs-item-selected-color: oklch(54.6% 0.245 262.881);\n --b-tabs-item-disabled-color: oklch(30% 0.02 260 / 25%);\n --b-tabs-title-font-size: 14px;\n --b-tabs-title-font-size-lg: 16px;\n --b-tabs-title-font-size-sm: 14px;\n --b-tabs-card-bg: oklch(97% 0.003 260 / 50%);\n --b-tabs-card-height: 40px;\n --b-tabs-card-height-lg: 48px;\n --b-tabs-card-height-sm: 32px;\n --b-tabs-card-padding: 8px 16px;\n --b-tabs-card-padding-lg: 11px 16px;\n --b-tabs-card-padding-sm: 4px 8px;\n --b-tabs-card-gutter: 2px;\n --b-tabs-card-border-radius: 8px 8px 0 0;\n --b-tabs-horizontal-item-gutter: 32px;\n --b-tabs-horizontal-item-padding: 12px 0;\n --b-tabs-horizontal-item-padding-lg: 16px 0;\n --b-tabs-horizontal-item-padding-sm: 8px 0;\n --b-tabs-horizontal-margin: 0 0 16px 0;\n --b-tabs-vertical-item-margin: 16px 0 0 0;\n --b-tabs-vertical-item-padding: 8px 24px;\n --b-tabs-border-color: oklch(80% 0.005 260);\n --b-tabs-content-min-height: 0;\n --b-tabs-focus-ring: 0 0 0 2px oklch(54.6% 0.245 262.881 / 20%);\n --b-tabs-transition-duration: 200ms;\n\n display: flex;\n flex-direction: column;\n font-size: var(--b-tabs-title-font-size);\n line-height: 1.5;\n}\n\n/* ── Placement layouts ── */\n.b-tabs--left {\n flex-direction: row;\n}\n\n.b-tabs--right {\n flex-direction: row-reverse;\n}\n\n.b-tabs--bottom {\n flex-direction: column-reverse;\n}\n\n/* ── Size variants ── */\n.b-tabs--large {\n --b-tabs-title-font-size: var(--b-tabs-title-font-size-lg);\n}\n\n.b-tabs--small {\n --b-tabs-title-font-size: var(--b-tabs-title-font-size-sm);\n}\n\n/* ─────────────────────────────────────────────\n Header\n ───────────────────────────────────────────── */\n.b-tabs__header {\n display: flex;\n align-items: center;\n position: relative;\n flex-shrink: 0;\n}\n\n.b-tabs--top .b-tabs__header,\n.b-tabs--bottom .b-tabs__header {\n border-bottom: 1px solid var(--b-tabs-border-color);\n margin: var(--b-tabs-horizontal-margin);\n}\n\n.b-tabs--bottom .b-tabs__header {\n border-bottom: none;\n border-top: 1px solid var(--b-tabs-border-color);\n margin: 0;\n}\n\n.b-tabs--left .b-tabs__header,\n.b-tabs--right .b-tabs__header {\n flex-direction: column;\n align-items: stretch;\n border-right: 1px solid var(--b-tabs-border-color);\n margin: 0;\n}\n\n.b-tabs--right .b-tabs__header {\n border-right: none;\n border-left: 1px solid var(--b-tabs-border-color);\n}\n\n/* Card type removes border from header */\n.b-tabs--card .b-tabs__header,\n.b-tabs--editable-card .b-tabs__header {\n border-bottom: 1px solid var(--b-tabs-border-color);\n}\n\n/* ─────────────────────────────────────────────\n Tab list (roving tabindex container)\n ───────────────────────────────────────────── */\n.b-tabs__list {\n display: flex;\n position: relative;\n flex: 1;\n gap: var(--b-tabs-horizontal-item-gutter);\n}\n\n.b-tabs--centered .b-tabs__list {\n justify-content: center;\n}\n\n.b-tabs--left .b-tabs__list,\n.b-tabs--right .b-tabs__list {\n flex-direction: column;\n gap: 0;\n}\n\n/* ─────────────────────────────────────────────\n Individual tab\n ───────────────────────────────────────────── */\n.b-tabs__tab {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n position: relative;\n padding: var(--b-tabs-horizontal-item-padding);\n border: none;\n background: none;\n color: var(--b-tabs-item-color);\n font-size: inherit;\n font-family: inherit;\n cursor: pointer;\n white-space: nowrap;\n outline: none;\n transition: color var(--b-tabs-transition-duration);\n line-height: 1.5;\n}\n\n.b-tabs__tab:hover:not(.b-tabs__tab--disabled) {\n color: var(--b-tabs-item-hover-color);\n}\n\n.b-tabs__tab--active {\n color: var(--b-tabs-item-selected-color);\n font-weight: 500;\n}\n\n.b-tabs__tab--active:hover {\n color: var(--b-tabs-item-active-color);\n}\n\n.b-tabs__tab--disabled {\n color: var(--b-tabs-item-disabled-color);\n cursor: not-allowed;\n}\n\n.b-tabs__tab:focus-visible {\n box-shadow: var(--b-tabs-focus-ring);\n border-radius: 4px;\n}\n\n/* Large size - tab padding */\n.b-tabs--large .b-tabs__tab {\n padding: var(--b-tabs-horizontal-item-padding-lg);\n}\n\n/* Small size - tab padding */\n.b-tabs--small .b-tabs__tab {\n padding: var(--b-tabs-horizontal-item-padding-sm);\n}\n\n/* Vertical tabs */\n.b-tabs--left .b-tabs__tab,\n.b-tabs--right .b-tabs__tab {\n padding: var(--b-tabs-vertical-item-padding);\n justify-content: flex-start;\n}\n\n.b-tabs--left .b-tabs__tab:not(:first-child),\n.b-tabs--right .b-tabs__tab:not(:first-child) {\n margin: var(--b-tabs-vertical-item-margin);\n}\n\n/* ─────────────────────────────────────────────\n Card-type tab\n ───────────────────────────────────────────── */\n.b-tabs--card .b-tabs__list,\n.b-tabs--editable-card .b-tabs__list {\n gap: var(--b-tabs-card-gutter);\n}\n\n.b-tabs--card .b-tabs__tab,\n.b-tabs--editable-card .b-tabs__tab {\n padding: var(--b-tabs-card-padding);\n background: var(--b-tabs-card-bg);\n border: 1px solid var(--b-tabs-border-color);\n border-bottom: none;\n border-radius: var(--b-tabs-card-border-radius);\n height: var(--b-tabs-card-height);\n margin-bottom: -1px;\n}\n\n.b-tabs--card .b-tabs__tab--active,\n.b-tabs--editable-card .b-tabs__tab--active {\n background: white;\n border-bottom-color: white;\n}\n\n.b-tabs--large.b-tabs--card .b-tabs__tab,\n.b-tabs--large.b-tabs--editable-card .b-tabs__tab {\n padding: var(--b-tabs-card-padding-lg);\n height: var(--b-tabs-card-height-lg);\n}\n\n.b-tabs--small.b-tabs--card .b-tabs__tab,\n.b-tabs--small.b-tabs--editable-card .b-tabs__tab {\n padding: var(--b-tabs-card-padding-sm);\n height: var(--b-tabs-card-height-sm);\n}\n\n/* ─────────────────────────────────────────────\n Ink bar (line type indicator)\n ───────────────────────────────────────────── */\n.b-tabs__ink-bar {\n position: absolute;\n background: var(--b-tabs-ink-bar-color);\n transition:\n left var(--b-tabs-transition-duration) cubic-bezier(0.645, 0.045, 0.355, 1),\n width var(--b-tabs-transition-duration) cubic-bezier(0.645, 0.045, 0.355, 1),\n top var(--b-tabs-transition-duration) cubic-bezier(0.645, 0.045, 0.355, 1),\n height var(--b-tabs-transition-duration) cubic-bezier(0.645, 0.045, 0.355, 1);\n pointer-events: none;\n}\n\n.b-tabs--top .b-tabs__ink-bar,\n.b-tabs--bottom .b-tabs__ink-bar {\n bottom: 0;\n height: 2px;\n}\n\n.b-tabs--bottom .b-tabs__ink-bar {\n bottom: auto;\n top: 0;\n}\n\n.b-tabs--left .b-tabs__ink-bar {\n right: 0;\n width: 2px;\n}\n\n.b-tabs--right .b-tabs__ink-bar {\n left: 0;\n width: 2px;\n}\n\n/* ─────────────────────────────────────────────\n Close / Remove button\n ───────────────────────────────────────────── */\n.b-tabs__tab-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n cursor: pointer;\n opacity: 0.6;\n transition:\n opacity var(--b-tabs-transition-duration),\n background var(--b-tabs-transition-duration);\n}\n\n.b-tabs__tab-remove:hover {\n opacity: 1;\n background: oklch(0% 0 0 / 8%);\n}\n\n.b-tabs__close-icon {\n width: 12px;\n height: 12px;\n}\n\n/* ─────────────────────────────────────────────\n Add button\n ───────────────────────────────────────────── */\n.b-tabs__add {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--b-tabs-card-padding);\n background: var(--b-tabs-card-bg);\n border: 1px solid var(--b-tabs-border-color);\n border-bottom: none;\n border-radius: var(--b-tabs-card-border-radius);\n height: var(--b-tabs-card-height);\n margin-bottom: -1px;\n cursor: pointer;\n color: var(--b-tabs-item-color);\n transition: color var(--b-tabs-transition-duration);\n}\n\n.b-tabs__add:hover {\n color: var(--b-tabs-item-hover-color);\n}\n\n.b-tabs__add:focus-visible {\n box-shadow: var(--b-tabs-focus-ring);\n}\n\n.b-tabs__add-icon {\n width: 16px;\n height: 16px;\n}\n\n/* ─────────────────────────────────────────────\n Extra content slots\n ───────────────────────────────────────────── */\n.b-tabs__extra {\n display: flex;\n align-items: center;\n padding: 0 8px;\n flex-shrink: 0;\n}\n\n/* ─────────────────────────────────────────────\n Content area\n ───────────────────────────────────────────── */\n.b-tabs__content {\n flex: 1;\n min-height: var(--b-tabs-content-min-height);\n}\n\n.b-tabs__panel {\n outline: none;\n}\n\n.b-tabs__panel--animated {\n animation: b-tabs-fade-in var(--b-tabs-transition-duration) ease-in-out;\n}\n\n@keyframes b-tabs-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* ─────────────────────────────────────────────\n Dark mode\n ───────────────────────────────────────────── */\n[data-prefers-color='dark'] .b-tabs {\n --b-tabs-ink-bar-color: oklch(70% 0.18 262.881);\n --b-tabs-item-active-color: oklch(80% 0.14 262.881);\n --b-tabs-item-color: oklch(85% 0.01 260 / 88%);\n --b-tabs-item-hover-color: oklch(70% 0.18 262.881);\n --b-tabs-item-selected-color: oklch(70% 0.18 262.881);\n --b-tabs-item-disabled-color: oklch(85% 0.01 260 / 25%);\n --b-tabs-card-bg: oklch(25% 0.015 260 / 50%);\n --b-tabs-border-color: oklch(35% 0.01 260);\n}\n\n[data-prefers-color='dark'] .b-tabs--card .b-tabs__tab--active,\n[data-prefers-color='dark'] .b-tabs--editable-card .b-tabs__tab--active {\n background: oklch(20% 0.015 260);\n border-bottom-color: oklch(20% 0.015 260);\n}\n\n@media (prefers-color-scheme: dark) {\n [data-prefers-color='system'] .b-tabs {\n --b-tabs-ink-bar-color: oklch(70% 0.18 262.881);\n --b-tabs-item-active-color: oklch(80% 0.14 262.881);\n --b-tabs-item-color: oklch(85% 0.01 260 / 88%);\n --b-tabs-item-hover-color: oklch(70% 0.18 262.881);\n --b-tabs-item-selected-color: oklch(70% 0.18 262.881);\n --b-tabs-item-disabled-color: oklch(85% 0.01 260 / 25%);\n --b-tabs-card-bg: oklch(25% 0.015 260 / 50%);\n --b-tabs-border-color: oklch(35% 0.01 260);\n }\n [data-prefers-color='system'] .b-tabs--editable-card .b-tabs__tab--active {\n background: oklch(20% 0.015 260);\n border-bottom-color: oklch(20% 0.015 260);\n }\n}\n\n/* ─────────────────────────────────────────────\n Reduced motion\n ───────────────────────────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n .b-tabs {\n --b-tabs-transition-duration: 0ms;\n }\n\n .b-tabs__panel--animated {\n animation: none;\n }\n}\n</style>\n"],"mappings":""}
|
package/dist/design-system229.js
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { Fragment as e, computed as t, createCommentVNode as n, createElementBlock as r, createElementVNode as i, defineComponent as a, normalizeClass as o, normalizeStyle as s, openBlock as c, provide as l, renderList as u, renderSlot as d, toDisplayString as f } from "vue";
|
|
2
|
-
//#region src/components/BTimeline/BTimeline.vue?vue&type=script&setup=true&lang.ts
|
|
3
|
-
var p = { class: "b-timeline-item__label" }, m = {
|
|
4
|
-
class: "b-timeline-item__dot-wrapper",
|
|
5
|
-
"aria-hidden": "true"
|
|
6
|
-
}, h = ["data-icon"], g = {
|
|
7
|
-
key: 1,
|
|
8
|
-
class: "b-timeline-item__dot--pending-spinner"
|
|
9
|
-
}, _ = {
|
|
10
|
-
key: 2,
|
|
11
|
-
class: "b-timeline-item__dot"
|
|
12
|
-
}, v = { class: "b-timeline-item__content" }, y = {
|
|
13
|
-
class: "b-timeline-item__dot-wrapper",
|
|
14
|
-
"aria-hidden": "true"
|
|
15
|
-
}, b = ["data-icon"], x = {
|
|
16
|
-
key: 1,
|
|
17
|
-
class: "b-timeline-item__dot--pending-spinner",
|
|
18
|
-
"aria-hidden": "true"
|
|
19
|
-
}, S = { class: "b-timeline-item__content" }, C = /* @__PURE__ */ a({
|
|
20
|
-
__name: "BTimeline",
|
|
21
|
-
props: {
|
|
22
|
-
mode: { default: "start" },
|
|
23
|
-
variant: { default: "filled" },
|
|
24
|
-
orientation: { default: "vertical" },
|
|
25
|
-
pending: {
|
|
26
|
-
type: [Boolean, String],
|
|
27
|
-
default: !1
|
|
28
|
-
},
|
|
29
|
-
pendingDot: {},
|
|
30
|
-
reverse: {
|
|
31
|
-
type: Boolean,
|
|
32
|
-
default: !1
|
|
33
|
-
},
|
|
34
|
-
items: {}
|
|
35
|
-
},
|
|
36
|
-
setup(a) {
|
|
37
|
-
l("b-timeline-mode", a.mode), l("b-timeline-variant", a.variant);
|
|
38
|
-
let C = t(() => !!a.pending), w = t(() => a.pending !== !0 && a.pending ? a.pending : ""), T = t(() => a.items ? a.reverse ? [...a.items].reverse() : a.items : []), E = [
|
|
39
|
-
"blue",
|
|
40
|
-
"red",
|
|
41
|
-
"green",
|
|
42
|
-
"gray"
|
|
43
|
-
];
|
|
44
|
-
function D(e) {
|
|
45
|
-
return !e || E.includes(e);
|
|
46
|
-
}
|
|
47
|
-
function O(e) {
|
|
48
|
-
if (!(!e || D(e))) return { "--b-timeline-item-dot-color": e };
|
|
49
|
-
}
|
|
50
|
-
function k(e) {
|
|
51
|
-
let t = e ?? "blue";
|
|
52
|
-
return D(t) ? `b-timeline-item--${t}` : "b-timeline-item--custom";
|
|
53
|
-
}
|
|
54
|
-
let A = t(() => [
|
|
55
|
-
"b-timeline",
|
|
56
|
-
`b-timeline--${a.mode}`,
|
|
57
|
-
`b-timeline--${a.variant}`,
|
|
58
|
-
`b-timeline--${a.orientation}`,
|
|
59
|
-
{
|
|
60
|
-
"b-timeline--pending": C.value,
|
|
61
|
-
"b-timeline--reverse": a.reverse
|
|
62
|
-
}
|
|
63
|
-
]);
|
|
64
|
-
function j(e, t) {
|
|
65
|
-
return t ? t === "end" ? "b-timeline-item--right" : "b-timeline-item--left" : a.mode === "alternate" ? e % 2 == 0 ? "b-timeline-item--left" : "b-timeline-item--right" : a.mode === "end" ? "b-timeline-item--right" : "b-timeline-item--left";
|
|
66
|
-
}
|
|
67
|
-
return (t, l) => (c(), r("ol", {
|
|
68
|
-
class: o(A.value),
|
|
69
|
-
"aria-label": "Timeline"
|
|
70
|
-
}, [a.items && a.items.length ? (c(!0), r(e, { key: 0 }, u(T.value, (e, t) => (c(), r("li", {
|
|
71
|
-
key: t,
|
|
72
|
-
class: o(["b-timeline-item", [
|
|
73
|
-
k(e.color),
|
|
74
|
-
j(t, e.placement),
|
|
75
|
-
{ "b-timeline-item--pending": e.loading },
|
|
76
|
-
e.className
|
|
77
|
-
]]),
|
|
78
|
-
style: s([O(e.color), (e.style, e.style)])
|
|
79
|
-
}, [
|
|
80
|
-
i("span", p, f(e.title ?? ""), 1),
|
|
81
|
-
l[0] ||= i("div", {
|
|
82
|
-
class: "b-timeline-item__tail",
|
|
83
|
-
"aria-hidden": "true"
|
|
84
|
-
}, null, -1),
|
|
85
|
-
i("div", m, [e.icon ? (c(), r("span", {
|
|
86
|
-
key: 0,
|
|
87
|
-
class: "b-timeline-item__dot--custom",
|
|
88
|
-
"data-icon": e.icon,
|
|
89
|
-
"aria-hidden": "true"
|
|
90
|
-
}, null, 8, h)) : e.loading ? (c(), r("span", g)) : (c(), r("span", _))]),
|
|
91
|
-
i("div", v, f(e.content), 1)
|
|
92
|
-
], 6))), 128)) : d(t.$slots, "default", { key: 1 }), C.value ? (c(), r("li", {
|
|
93
|
-
key: 2,
|
|
94
|
-
class: o(["b-timeline-item b-timeline-item--pending", [j(a.items ? T.value.length : 0)]]),
|
|
95
|
-
"aria-label": "Pending"
|
|
96
|
-
}, [
|
|
97
|
-
l[1] ||= i("span", { class: "b-timeline-item__label" }, null, -1),
|
|
98
|
-
l[2] ||= i("div", {
|
|
99
|
-
class: "b-timeline-item__tail",
|
|
100
|
-
"aria-hidden": "true"
|
|
101
|
-
}, null, -1),
|
|
102
|
-
i("div", y, [d(t.$slots, "pendingDot", {}, () => [a.pendingDot ? (c(), r("span", {
|
|
103
|
-
key: 0,
|
|
104
|
-
class: "b-timeline-item__dot--custom",
|
|
105
|
-
"data-icon": a.pendingDot,
|
|
106
|
-
"aria-hidden": "true"
|
|
107
|
-
}, null, 8, b)) : (c(), r("span", x))])]),
|
|
108
|
-
i("div", S, f(w.value), 1)
|
|
109
|
-
], 2)) : n("", !0)], 2));
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
//#endregion
|
|
113
|
-
export { C as default };
|
|
114
|
-
|
|
115
|
-
//# sourceMappingURL=design-system229.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"design-system229.js","names":[],"sources":["../src/components/BTimeline/BTimeline.vue?vue&type=script&setup=true&lang.ts"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, renderSlot as _renderSlot } from \"vue\"\n\nconst _hoisted_1 = { class: \"b-timeline-item__label\" }\nconst _hoisted_2 = {\n class: \"b-timeline-item__dot-wrapper\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_3 = [\"data-icon\"]\nconst _hoisted_4 = {\n key: 1,\n class: \"b-timeline-item__dot--pending-spinner\"\n}\nconst _hoisted_5 = {\n key: 2,\n class: \"b-timeline-item__dot\"\n}\nconst _hoisted_6 = { class: \"b-timeline-item__content\" }\nconst _hoisted_7 = {\n class: \"b-timeline-item__dot-wrapper\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_8 = [\"data-icon\"]\nconst _hoisted_9 = {\n key: 1,\n class: \"b-timeline-item__dot--pending-spinner\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_10 = { class: \"b-timeline-item__content\" }\n\nimport { computed, provide } from 'vue';\n\nimport type {\n BTimelineItem,\n BTimelineItemColor,\n BTimelineItemPlacement,\n BTimelineMode,\n BTimelineOrientation,\n BTimelineVariant,\n} from './types';\n\n// ─────────────────────────────────────────────\n// Props\n// ─────────────────────────────────────────────\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'BTimeline',\n props: {\n mode: { default: 'start' },\n variant: { default: 'filled' },\n orientation: { default: 'vertical' },\n pending: { type: [Boolean, String], default: false },\n pendingDot: {},\n reverse: { type: Boolean, default: false },\n items: {}\n },\n setup(__props: any) {\n\n\n\n// ─────────────────────────────────────────────\n// Slots\n// ─────────────────────────────────────────────\n\n\n// Provide mode to slot-based BTimelineItem children\nprovide('b-timeline-mode', __props.mode);\nprovide('b-timeline-variant', __props.variant);\n\n// ─────────────────────────────────────────────\n// Pending item helpers\n// ─────────────────────────────────────────────\nconst hasPending = computed(() => !!__props.pending);\nconst pendingContent = computed(() => (__props.pending !== true && __props.pending ? __props.pending : ''));\n\n// ─────────────────────────────────────────────\n// Reversed items (data-driven)\n// ─────────────────────────────────────────────\nconst orderedItems = computed<BTimelineItem[]>(() => {\n if (!__props.items) return [];\n return __props.reverse ? [...__props.items].reverse() : __props.items;\n});\n\n// ─────────────────────────────────────────────\n// CSS-var dot color helper\n// ─────────────────────────────────────────────\nconst PRESET_COLORS: BTimelineItemColor[] = ['blue', 'red', 'green', 'gray'];\n\nfunction isPresetColor(color?: BTimelineItemColor): boolean {\n return !color || PRESET_COLORS.includes(color as string);\n}\n\nfunction dotColorStyle(color?: BTimelineItemColor): Record<string, string> | undefined {\n if (!color || isPresetColor(color)) return undefined;\n return { '--b-timeline-item-dot-color': color };\n}\n\nfunction dotColorClass(color?: BTimelineItemColor): string {\n const c = color ?? 'blue';\n return isPresetColor(c) ? `b-timeline-item--${c}` : 'b-timeline-item--custom';\n}\n\n// ─────────────────────────────────────────────\n// Root classes\n// ─────────────────────────────────────────────\nconst rootClasses = computed(() => [\n 'b-timeline',\n `b-timeline--${__props.mode}`,\n `b-timeline--${__props.variant}`,\n `b-timeline--${__props.orientation}`,\n {\n 'b-timeline--pending': hasPending.value,\n 'b-timeline--reverse': __props.reverse,\n },\n]);\n\n// ─────────────────────────────────────────────\n// Item position helper\n// ─────────────────────────────────────────────\nfunction itemPositionClass(index: number, placement?: BTimelineItemPlacement): string {\n // Per-item placement overrides the global mode\n if (placement) {\n return placement === 'end' ? 'b-timeline-item--right' : 'b-timeline-item--left';\n }\n if (__props.mode === 'alternate') {\n return index % 2 === 0 ? 'b-timeline-item--left' : 'b-timeline-item--right';\n }\n return __props.mode === 'end' ? 'b-timeline-item--right' : 'b-timeline-item--left';\n}\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"ol\", {\n class: _normalizeClass(rootClasses.value),\n \"aria-label\": \"Timeline\"\n }, [\n (__props.items && __props.items.length)\n ? (_openBlock(true), _createElementBlock(_Fragment, { key: 0 }, _renderList(orderedItems.value, (item, i) => {\n return (_openBlock(), _createElementBlock(\"li\", {\n key: i,\n class: _normalizeClass([\"b-timeline-item\", [\n dotColorClass(item.color),\n itemPositionClass(i, item.placement),\n { 'b-timeline-item--pending': item.loading },\n item.className,\n ]]),\n style: _normalizeStyle([\n dotColorStyle(item.color),\n typeof item.style === 'string' ? item.style : item.style,\n ])\n }, [\n _createElementVNode(\"span\", _hoisted_1, _toDisplayString(item.title ?? ''), 1),\n _cache[0] || (_cache[0] = _createElementVNode(\"div\", {\n class: \"b-timeline-item__tail\",\n \"aria-hidden\": \"true\"\n }, null, -1)),\n _createElementVNode(\"div\", _hoisted_2, [\n (item.icon)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: \"b-timeline-item__dot--custom\",\n \"data-icon\": item.icon,\n \"aria-hidden\": \"true\"\n }, null, 8, _hoisted_3))\n : (item.loading)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_5))\n ]),\n _createElementVNode(\"div\", _hoisted_6, _toDisplayString(item.content), 1)\n ], 6))\n }), 128))\n : _renderSlot(_ctx.$slots, \"default\", { key: 1 }),\n (hasPending.value)\n ? (_openBlock(), _createElementBlock(\"li\", {\n key: 2,\n class: _normalizeClass([\"b-timeline-item b-timeline-item--pending\", [itemPositionClass(__props.items ? orderedItems.value.length : 0)]]),\n \"aria-label\": \"Pending\"\n }, [\n _cache[1] || (_cache[1] = _createElementVNode(\"span\", { class: \"b-timeline-item__label\" }, null, -1)),\n _cache[2] || (_cache[2] = _createElementVNode(\"div\", {\n class: \"b-timeline-item__tail\",\n \"aria-hidden\": \"true\"\n }, null, -1)),\n _createElementVNode(\"div\", _hoisted_7, [\n _renderSlot(_ctx.$slots, \"pendingDot\", {}, () => [\n (__props.pendingDot)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 0,\n class: \"b-timeline-item__dot--custom\",\n \"data-icon\": __props.pendingDot,\n \"aria-hidden\": \"true\"\n }, null, 8, _hoisted_8))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_9))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_10, _toDisplayString(pendingContent.value), 1)\n ], 2))\n : _createCommentVNode(\"\", true)\n ], 2))\n}\n}\n\n})"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"design-system238.js","names":[],"sources":["../src/components/BTour/BTour.vue?vue&type=script&setup=true&lang.ts"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, normalizeClass as _normalizeClass, renderSlot as _renderSlot, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, mergeProps as _mergeProps, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-label\"]\nconst _hoisted_2 = [\"viewBox\"]\nconst _hoisted_3 = [\"x\", \"y\", \"width\", \"height\", \"rx\"]\nconst _hoisted_4 = [\"fill\", \"mask\"]\nconst _hoisted_5 = {\n key: 1,\n class: \"b-tour__cover\"\n}\nconst _hoisted_6 = [\"src\"]\nconst _hoisted_7 = { class: \"b-tour__header\" }\nconst _hoisted_8 = { class: \"b-tour__title\" }\nconst _hoisted_9 = {\n key: 0,\n class: \"b-tour__close-icon\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-hidden\": \"true\",\n focusable: \"false\"\n}\nconst _hoisted_10 = { key: 1 }\nconst _hoisted_11 = {\n key: 2,\n class: \"b-tour__description\"\n}\nconst _hoisted_12 = { class: \"b-tour__footer\" }\nconst _hoisted_13 = {\n class: \"b-tour__indicators\",\n \"aria-label\": \"Step progress\"\n}\nconst _hoisted_14 = [\"aria-current\"]\nconst _hoisted_15 = { class: \"b-tour__actions\" }\n\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport {\n BTourPlacement,\n BTourType,\n type BTourArrowOptions,\n type BTourButtonProps,\n type BTourGapOptions,\n type BTourResolvedStep,\n type BTourScrollIntoViewOptions,\n type BTourStep,\n} from './types.ts';\n\n// ─────────────────────────────────────────────\n// Props & emits\n// ─────────────────────────────────────────────\ninterface HighlightRect {\n top: number;\n left: number;\n width: number;\n height: number;\n radius: number;\n}\n\nconst focusableSelector =\n 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'BTour',\n props: {\n steps: { default: () => ([]) },\n open: { type: Boolean, default: () => (undefined) },\n current: { default: () => (undefined) },\n defaultCurrent: { default: 0 },\n arrow: { type: [Boolean, Object], default: true },\n placement: { default: () => (BTourPlacement.Bottom) },\n type: { default: () => (BTourType.Default) },\n mask: { type: [Boolean, Object], default: true },\n gap: { default: () => ({ offset: 6, radius: 2 }) },\n zIndex: { default: 1070 },\n keyboard: { type: Boolean, default: true },\n scrollIntoViewOptions: { type: [Boolean, Object], default: true },\n getPopupContainer: { type: Function, default: undefined },\n closeIcon: { type: [Boolean, String], default: true },\n disabledInteraction: { type: Boolean, default: false }\n },\n emits: [\"change\", \"close\", \"update:open\", \"update:current\", \"finish\"],\n setup(__props: any, { emit: __emit }) {\n\n\n\nconst emit = __emit;\n\n\n\n// ─────────────────────────────────────────────\n// Internal state\n// ─────────────────────────────────────────────\nconst internalOpen = ref(false);\nconst internalCurrent = ref(__props.defaultCurrent);\n\nconst isControlledOpen = computed(() => __props.open !== undefined);\nconst isControlledCurrent = computed(() => __props.current !== undefined);\n\nconst isOpen = computed(() => (isControlledOpen.value ? __props.open! : internalOpen.value));\nconst currentStep = computed(() => (isControlledCurrent.value ? __props.current! : internalCurrent.value));\n\n// ─────────────────────────────────────────────\n// Derived step data\n// ─────────────────────────────────────────────\nconst totalSteps = computed(() => __props.steps.length);\n\nconst resolvedSteps = computed<BTourResolvedStep[]>(() =>\n __props.steps.map((step, index) => {\n let resolvedTarget: HTMLElement | null = null;\n if (step.target) {\n if (typeof step.target === 'string') {\n resolvedTarget = document.querySelector<HTMLElement>(step.target);\n } else if (typeof step.target === 'function') {\n resolvedTarget = step.target();\n } else {\n resolvedTarget = step.target;\n }\n }\n return { ...step, resolvedTarget, index };\n }),\n);\n\nconst activeStep = computed<BTourResolvedStep | undefined>(\n () => resolvedSteps.value[currentStep.value],\n);\n\n/** Effective placement for the current step (step overrides tour-level). */\nconst effectivePlacement = computed(() => activeStep.value?.placement ?? __props.placement);\n\n/** Effective arrow config for the current step. */\nconst effectiveArrow = computed(() => activeStep.value?.arrow ?? __props.arrow);\n\nconst showArrow = computed(() => effectiveArrow.value !== false);\n\nconst arrowPointAtCenter = computed(\n () => typeof effectiveArrow.value === 'object' && effectiveArrow.value.pointAtCenter,\n);\n\n/** Effective type for the current step. */\nconst effectiveType = computed(() => activeStep.value?.type ?? __props.type);\n\n/** Effective mask for the current step. */\nconst effectiveMask = computed(() => activeStep.value?.mask ?? __props.mask);\n\nconst showMask = computed(() => effectiveMask.value !== false);\n\nconst maskColor = computed(() => {\n if (typeof effectiveMask.value === 'object' && effectiveMask.value.color) {\n return effectiveMask.value.color;\n }\n return undefined;\n});\n\n/** Whether to show the close button. */\nconst showCloseIcon = computed(() => {\n const stepClose = activeStep.value?.closeIcon;\n const val = stepClose !== undefined ? stepClose : __props.closeIcon;\n return val !== false;\n});\n\n// ─────────────────────────────────────────────\n// Highlight box (target element spotlight)\n// ─────────────────────────────────────────────\nconst highlightRect = ref<HighlightRect | null>(null);\nconst popupStyle = ref<Record<string, string>>({});\n\nconst gapOffset = computed(() => {\n const o = __props.gap?.offset ?? 6;\n return Array.isArray(o) ? o : [o, o];\n});\nconst gapRadius = computed(() => __props.gap?.radius ?? 2);\n\nfunction updateHighlight() {\n const step = activeStep.value;\n if (!step || !isOpen.value) {\n highlightRect.value = null;\n popupStyle.value = {};\n return;\n }\n\n const target = step.resolvedTarget;\n if (!target) {\n // Center the popup when no target\n highlightRect.value = null;\n popupStyle.value = {\n position: 'fixed',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n };\n return;\n }\n\n const rect = target.getBoundingClientRect();\n const [offsetV, offsetH] = gapOffset.value;\n highlightRect.value = {\n top: rect.top - offsetV,\n left: rect.left - offsetH,\n width: rect.width + offsetH * 2,\n height: rect.height + offsetV * 2,\n radius: gapRadius.value,\n };\n\n // Position the popup relative to the highlight\n computePopupStyle(rect);\n}\n\nfunction computePopupStyle(rect: DOMRect) {\n const GAP = 12;\n const eff = effectivePlacement.value;\n const style: Record<string, string> = { position: 'fixed' };\n const [offsetV, offsetH] = gapOffset.value;\n\n const top = rect.top - offsetV;\n const bottom = rect.bottom + offsetV;\n const left = rect.left - offsetH;\n const right = rect.right + offsetH;\n const midX = rect.left + rect.width / 2;\n const midY = rect.top + rect.height / 2;\n\n switch (eff) {\n case BTourPlacement.Top:\n style.bottom = `${window.innerHeight - top + GAP}px`;\n style.left = `${midX}px`;\n style.transform = 'translateX(-50%)';\n break;\n case BTourPlacement.TopLeft:\n style.bottom = `${window.innerHeight - top + GAP}px`;\n style.left = `${left}px`;\n break;\n case BTourPlacement.TopRight:\n style.bottom = `${window.innerHeight - top + GAP}px`;\n style.right = `${window.innerWidth - right}px`;\n break;\n case BTourPlacement.Bottom:\n style.top = `${bottom + GAP}px`;\n style.left = `${midX}px`;\n style.transform = 'translateX(-50%)';\n break;\n case BTourPlacement.BottomLeft:\n style.top = `${bottom + GAP}px`;\n style.left = `${left}px`;\n break;\n case BTourPlacement.BottomRight:\n style.top = `${bottom + GAP}px`;\n style.right = `${window.innerWidth - right}px`;\n break;\n case BTourPlacement.Left:\n style.top = `${midY}px`;\n style.right = `${window.innerWidth - left + GAP}px`;\n style.transform = 'translateY(-50%)';\n break;\n case BTourPlacement.LeftTop:\n style.top = `${top}px`;\n style.right = `${window.innerWidth - left + GAP}px`;\n break;\n case BTourPlacement.LeftBottom:\n style.bottom = `${window.innerHeight - bottom}px`;\n style.right = `${window.innerWidth - left + GAP}px`;\n break;\n case BTourPlacement.Right:\n style.top = `${midY}px`;\n style.left = `${right + GAP}px`;\n style.transform = 'translateY(-50%)';\n break;\n case BTourPlacement.RightTop:\n style.top = `${top}px`;\n style.left = `${right + GAP}px`;\n break;\n case BTourPlacement.RightBottom:\n style.bottom = `${window.innerHeight - bottom}px`;\n style.left = `${right + GAP}px`;\n break;\n case BTourPlacement.Center:\n style.top = '50%';\n style.left = '50%';\n style.transform = 'translate(-50%, -50%)';\n break;\n default:\n style.top = `${bottom + GAP}px`;\n style.left = `${midX}px`;\n style.transform = 'translateX(-50%)';\n }\n\n popupStyle.value = style;\n}\n\n// ─────────────────────────────────────────────\n// Arrow positioning class\n// ─────────────────────────────────────────────\nconst arrowClass = computed(() => {\n if (!showArrow.value) return '';\n const eff = effectivePlacement.value;\n\n if (\n [BTourPlacement.Bottom, BTourPlacement.BottomLeft, BTourPlacement.BottomRight].includes(\n eff as BTourPlacement,\n )\n ) {\n return 'b-tour__arrow--top';\n }\n if (\n [BTourPlacement.Top, BTourPlacement.TopLeft, BTourPlacement.TopRight].includes(\n eff as BTourPlacement,\n )\n ) {\n return 'b-tour__arrow--bottom';\n }\n if (\n [BTourPlacement.Right, BTourPlacement.RightTop, BTourPlacement.RightBottom].includes(\n eff as BTourPlacement,\n )\n ) {\n return 'b-tour__arrow--left';\n }\n if (\n [BTourPlacement.Left, BTourPlacement.LeftTop, BTourPlacement.LeftBottom].includes(\n eff as BTourPlacement,\n )\n ) {\n return 'b-tour__arrow--right';\n }\n return '';\n});\n\n// ─────────────────────────────────────────────\n// Open / close helpers\n// ─────────────────────────────────────────────\nfunction doClose() {\n emit('close', currentStep.value);\n if (isControlledOpen.value) {\n emit('update:open', false);\n } else {\n internalOpen.value = false;\n }\n}\n\nfunction setCurrentStep(step: number) {\n emit('change', step);\n if (isControlledCurrent.value) {\n emit('update:current', step);\n } else {\n internalCurrent.value = step;\n }\n}\n\nfunction goNext() {\n if (currentStep.value >= totalSteps.value - 1) {\n emit('finish');\n doClose();\n return;\n }\n setCurrentStep(currentStep.value + 1);\n}\n\nfunction goPrev() {\n if (currentStep.value <= 0) return;\n setCurrentStep(currentStep.value - 1);\n}\n\n// ─────────────────────────────────────────────\n// Scroll target into view\n// ─────────────────────────────────────────────\nfunction scrollIntoView(el: HTMLElement) {\n const opt = activeStep.value?.scrollIntoViewOptions ?? __props.scrollIntoViewOptions;\n if (opt === false) return;\n const options: ScrollIntoViewOptions =\n typeof opt === 'object'\n ? (opt as ScrollIntoViewOptions)\n : { behavior: 'smooth', block: 'center', inline: 'nearest' };\n el.scrollIntoView(options);\n}\n\n// ─────────────────────────────────────────────\n// Focus management\n// ─────────────────────────────────────────────\nlet previouslyFocused: HTMLElement | null = null;\nconst popupRef = ref<HTMLDivElement | null>(null);\n\nfunction focusFirst() {\n nextTick(() => {\n if (!popupRef.value) return;\n const first = popupRef.value.querySelector<HTMLElement>(focusableSelector);\n if (first) {\n first.focus();\n } else {\n popupRef.value.focus();\n }\n });\n}\n\nfunction trapFocus(e: KeyboardEvent) {\n if (e.key !== 'Tab' || !popupRef.value) return;\n const focusable = Array.from(popupRef.value.querySelectorAll<HTMLElement>(focusableSelector));\n if (focusable.length === 0) {\n e.preventDefault();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n}\n\n// ─────────────────────────────────────────────\n// Keyboard navigation\n// ─────────────────────────────────────────────\nfunction onKeydown(e: KeyboardEvent) {\n if (!__props.keyboard) return;\n if (e.key === 'Escape') {\n e.preventDefault();\n doClose();\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n goNext();\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n goPrev();\n }\n trapFocus(e);\n}\n\n// ─────────────────────────────────────────────\n// Resize / scroll → update highlight\n// ─────────────────────────────────────────────\nlet resizeObserver: ResizeObserver | null = null;\nlet targetObserver: ResizeObserver | null = null;\n\nfunction observeTarget(el: HTMLElement | null) {\n targetObserver?.disconnect();\n if (!el) return;\n targetObserver = new ResizeObserver(updateHighlight);\n targetObserver.observe(el);\n}\n\nfunction onScrollOrResize() {\n if (isOpen.value) updateHighlight();\n}\n\nonMounted(() => {\n resizeObserver = new ResizeObserver(onScrollOrResize);\n resizeObserver.observe(document.documentElement);\n window.addEventListener('scroll', onScrollOrResize, { passive: true });\n});\n\nonBeforeUnmount(() => {\n resizeObserver?.disconnect();\n targetObserver?.disconnect();\n window.removeEventListener('scroll', onScrollOrResize);\n});\n\n// ─────────────────────────────────────────────\n// Watchers\n// ─────────────────────────────────────────────\nwatch(\n [isOpen, currentStep],\n ([open]) => {\n if (!open) {\n highlightRect.value = null;\n popupStyle.value = {};\n targetObserver?.disconnect();\n nextTick(() => previouslyFocused?.focus());\n return;\n }\n const step = resolvedSteps.value[currentStep.value];\n if (step?.resolvedTarget) {\n scrollIntoView(step.resolvedTarget);\n observeTarget(step.resolvedTarget);\n }\n nextTick(() => {\n updateHighlight();\n if (open) {\n previouslyFocused = document.activeElement as HTMLElement | null;\n focusFirst();\n }\n });\n },\n { immediate: true, flush: 'post' },\n);\n\n// ─────────────────────────────────────────────\n// SVG mask clip-path (spotlight cutout)\n// ─────────────────────────────────────────────\nconst maskId = `b-tour-mask-${Math.random().toString(36).slice(2, 9)}`;\n\nconst svgViewBox = computed(() => {\n const vw = typeof window !== 'undefined' ? window.innerWidth : 1440;\n const vh = typeof window !== 'undefined' ? window.innerHeight : 900;\n return `0 0 ${vw} ${vh}`;\n});\n\nconst maskStyle = computed<Record<string, string>>(() => {\n if (typeof effectiveMask.value === 'object' && effectiveMask.value.style) {\n return effectiveMask.value.style;\n }\n return {};\n});\n\n// ─────────────────────────────────────────────\n// Cover image helpers\n// ─────────────────────────────────────────────\nconst hasCover = computed(() => Boolean(activeStep.value?.cover));\n\nfunction stripBtnProps(props: BTourButtonProps | undefined) {\n if (!props) return {};\n const { onClick: _onClick, children: _children, ...rest } = props;\n return rest;\n}\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n _createVNode(_Transition, { name: \"b-tour-fade\" }, {\n default: _withCtx(() => [\n (isOpen.value && totalSteps.value > 0)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"b-tour\", [`b-tour--${effectiveType.value}`]]),\n style: _normalizeStyle({ '--b-tour-z-index': String(__props.zIndex) }),\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-label\": activeStep.value?.title\n }, [\n (showMask.value)\n ? (_openBlock(), _createElementBlock(\"svg\", {\n key: 0,\n class: \"b-tour__mask\",\n style: _normalizeStyle([{ zIndex: __props.zIndex - 1 }, maskStyle.value]),\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: svgViewBox.value,\n \"aria-hidden\": \"true\",\n focusable: \"false\"\n }, [\n _createElementVNode(\"defs\", null, [\n _createElementVNode(\"mask\", { id: maskId }, [\n _cache[2] || (_cache[2] = _createElementVNode(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\",\n fill: \"white\"\n }, null, -1)),\n (highlightRect.value)\n ? (_openBlock(), _createElementBlock(\"rect\", {\n key: 0,\n x: highlightRect.value.left,\n y: highlightRect.value.top,\n width: highlightRect.value.width,\n height: highlightRect.value.height,\n rx: highlightRect.value.radius,\n fill: \"black\"\n }, null, 8, _hoisted_3))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"rect\", {\n x: \"0\",\n y: \"0\",\n width: \"100%\",\n height: \"100%\",\n fill: maskColor.value ?? 'var(--b-tour-mask-bg)',\n mask: `url(#${maskId})`,\n style: _normalizeStyle({ pointerEvents: __props.disabledInteraction ? 'all' : 'none' })\n }, null, 12, _hoisted_4)\n ], 12, _hoisted_2))\n : _createCommentVNode(\"\", true),\n (highlightRect.value)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 1,\n class: \"b-tour__spotlight\",\n style: _normalizeStyle({\n top: `${highlightRect.value.top}px`,\n left: `${highlightRect.value.left}px`,\n width: `${highlightRect.value.width}px`,\n height: `${highlightRect.value.height}px`,\n borderRadius: `${highlightRect.value.radius}px`,\n zIndex: __props.zIndex - 1,\n pointerEvents: __props.disabledInteraction ? 'none' : 'auto',\n }),\n \"aria-hidden\": \"true\"\n }, null, 4))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", {\n ref_key: \"popupRef\",\n ref: popupRef,\n class: _normalizeClass([\"b-tour__popup\", [\n `b-tour__popup--${effectivePlacement.value}`,\n { 'b-tour__popup--no-arrow': !showArrow.value || !highlightRect.value },\n ]]),\n style: _normalizeStyle([{ zIndex: __props.zIndex }, popupStyle.value]),\n tabindex: \"-1\",\n onKeydown: onKeydown\n }, [\n (showArrow.value && highlightRect.value && arrowClass.value)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"b-tour__arrow\", [arrowClass.value, { 'b-tour__arrow--center': arrowPointAtCenter.value }]]),\n \"aria-hidden\": \"true\"\n }, null, 2))\n : _createCommentVNode(\"\", true),\n (hasCover.value)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n (typeof activeStep.value?.cover === 'string')\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: activeStep.value.cover,\n class: \"b-tour__cover-img\",\n alt: \"\",\n \"aria-hidden\": \"true\"\n }, null, 8, _hoisted_6))\n : _renderSlot(_ctx.$slots, \"cover\", { key: 1 })\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"h4\", _hoisted_8, _toDisplayString(activeStep.value?.title), 1),\n (showCloseIcon.value)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n type: \"button\",\n class: \"b-tour__close\",\n \"aria-label\": \"Close tour\",\n onClick: doClose\n }, [\n (\n __props.closeIcon === true ||\n activeStep.value?.closeIcon === true ||\n activeStep.value?.closeIcon === undefined\n )\n ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_9, [...(_cache[3] || (_cache[3] = [\n _createElementVNode(\"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\" }, null, -1)\n ]))]))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_10, _toDisplayString(typeof __props.closeIcon === 'string' ? __props.closeIcon : '✕'), 1))\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n (activeStep.value?.description)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, _toDisplayString(activeStep.value.description), 1))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"div\", _hoisted_13, [\n _renderSlot(_ctx.$slots, \"indicatorsRender\", {\n current: currentStep.value,\n total: totalSteps.value\n }, () => [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(__props.steps, (_, i) => {\n return (_openBlock(), _createElementBlock(\"span\", {\n key: i,\n class: _normalizeClass([\"b-tour__indicator\", { 'b-tour__indicator--active': i === currentStep.value }]),\n role: \"presentation\",\n \"aria-current\": i === currentStep.value ? 'step' : undefined\n }, null, 10, _hoisted_14))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n (currentStep.value > 0)\n ? (_openBlock(), _createElementBlock(\"button\", _mergeProps({\n key: 0,\n type: \"button\",\n class: \"b-tour__btn b-tour__btn--prev\"\n }, stripBtnProps(activeStep.value?.prevButtonProps), {\n onClick: _cache[0] || (_cache[0] = \n () => {\n activeStep.value?.prevButtonProps?.onClick?.();\n goPrev();\n }\n )\n }), _toDisplayString(activeStep.value?.prevButtonProps?.children ?? 'Previous'), 17))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"button\", _mergeProps({\n type: \"button\",\n class: \"b-tour__btn b-tour__btn--next\"\n }, stripBtnProps(activeStep.value?.nextButtonProps), {\n onClick: _cache[1] || (_cache[1] = \n () => {\n activeStep.value?.nextButtonProps?.onClick?.();\n goNext();\n }\n )\n }), _toDisplayString(activeStep.value?.nextButtonProps?.children ??\n (currentStep.value >= totalSteps.value - 1 ? 'Finish' : 'Next')), 17)\n ])\n ])\n ], 38)\n ], 14, _hoisted_1))\n : _createCommentVNode(\"\", true)\n ]),\n _: 3\n })\n ]))\n}\n}\n\n})"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"design-system241.js","names":[],"sources":["../src/components/BTree/BTree.vue?vue&type=script&setup=true&lang.ts"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, withModifiers as _withModifiers, normalizeClass as _normalizeClass, withKeys as _withKeys, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, normalizeStyle as _normalizeStyle, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = [\"aria-multiselectable\"]\nconst _hoisted_2 = [\"data-node-key\", \"aria-expanded\", \"aria-selected\", \"aria-checked\", \"aria-disabled\", \"aria-level\", \"tabindex\", \"draggable\", \"onClick\", \"onDblclick\", \"onContextmenu\", \"onDragstart\", \"onDragenter\", \"onDragover\", \"onDragleave\", \"onDragend\", \"onDrop\"]\nconst _hoisted_3 = {\n key: 0,\n class: \"b-tree__drag-handle\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_4 = [\"onClick\"]\nconst _hoisted_5 = {\n key: 1,\n class: \"b-tree__switcher-icon b-tree__switcher-icon--spin\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_6 = {\n key: 2,\n class: \"b-tree__switcher b-tree__switcher--leaf\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_7 = [\"aria-label\", \"aria-checked\", \"aria-disabled\", \"onClick\", \"onKeydown\"]\nconst _hoisted_8 = {\n key: 4,\n class: \"b-tree__icon\",\n \"aria-hidden\": \"true\"\n}\nconst _hoisted_9 = { key: 0 }\n\nimport { computed, nextTick, ref, watch } from 'vue';\nimport type {\n BTreeCheckedKeys,\n BTreeCheckInfo,\n BTreeDragInfo,\n BTreeDropInfo,\n BTreeExpandInfo,\n BTreeFieldNames,\n BTreeFlatNode,\n BTreeNodeData,\n BTreeNodeKey,\n BTreeScrollToOptions,\n BTreeSelectInfo,\n} from './types';\n\n// ─── Props ────────────────────────────────────────────────────────────────────\n\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'BTree',\n props: {\n treeData: { default: () => ([]) },\n fieldNames: { default: () => ({}) },\n checkable: { type: Boolean, default: false },\n checkStrictly: { type: Boolean, default: false },\n checkedKeys: { default: () => (undefined) },\n defaultCheckedKeys: { default: () => ([]) },\n selectedKeys: { default: () => (undefined) },\n defaultSelectedKeys: { default: () => ([]) },\n expandedKeys: { default: () => (undefined) },\n defaultExpandedKeys: { default: () => ([]) },\n defaultExpandAll: { type: Boolean, default: false },\n defaultExpandParent: { type: Boolean, default: true },\n autoExpandParent: { type: Boolean, default: false },\n multiple: { type: Boolean, default: false },\n selectable: { type: Boolean, default: true },\n disabled: { type: Boolean, default: false },\n showIcon: { type: Boolean, default: false },\n showLine: { type: Boolean, default: false },\n blockNode: { type: Boolean, default: false },\n draggable: { type: Boolean, default: false },\n loadData: { type: Function, default: undefined },\n loadedKeys: { default: () => (undefined) },\n filterTreeNode: { type: Function, default: undefined },\n height: { default: () => (undefined) },\n virtual: { type: Boolean, default: false },\n directory: { type: Boolean, default: false },\n expandAction: { type: [String, Boolean], default: 'click' }\n },\n emits: [\"check\", \"expand\", \"select\", \"load\", \"rightClick\", \"dragStart\", \"dragEnter\", \"dragOver\", \"dragLeave\", \"dragEnd\", \"drop\", \"dblclick\", \"update:checkedKeys\", \"update:selectedKeys\", \"update:expandedKeys\", \"update:loadedKeys\"],\n setup(__props: any, { expose: __expose, emit: __emit }) {\n\n\n\n// ─── Emits ────────────────────────────────────────────────────────────────────\n\nconst emit = __emit;\n\n// ─── Slots ────────────────────────────────────────────────────────────────────\n\n\n\n// ─── Resolved field names ─────────────────────────────────────────────────────\n\nconst fKey = computed(() => __props.fieldNames.key ?? 'key');\nconst fTitle = computed(() => __props.fieldNames.title ?? 'title');\nconst fChildren = computed(() => __props.fieldNames.children ?? 'children');\n\nfunction nodeKey(n: BTreeNodeData): BTreeNodeKey {\n return n[fKey.value] as BTreeNodeKey;\n}\nfunction nodeTitle(n: BTreeNodeData): string {\n return (n[fTitle.value] as string) ?? '';\n}\nfunction nodeChildren(n: BTreeNodeData): BTreeNodeData[] | undefined {\n return n[fChildren.value] as BTreeNodeData[] | undefined;\n}\n\n// ─── Internal state ───────────────────────────────────────────────────────────\n\nconst internalExpanded = ref<Set<BTreeNodeKey>>(new Set());\nconst internalSelected = ref<Set<BTreeNodeKey>>(new Set());\nconst internalChecked = ref<Set<BTreeNodeKey>>(new Set());\nconst internalHalfChecked = ref<Set<BTreeNodeKey>>(new Set());\nconst internalLoaded = ref<Set<BTreeNodeKey>>(new Set());\nconst loadingKeys = ref<Set<BTreeNodeKey>>(new Set());\nconst dragNodeKey = ref<BTreeNodeKey | null>(null);\n\n// Controlled getters\nconst isControlledExpanded = computed(() => __props.expandedKeys !== undefined);\nconst isControlledSelected = computed(() => __props.selectedKeys !== undefined);\nconst isControlledChecked = computed(() => __props.checkedKeys !== undefined);\nconst isControlledLoaded = computed(() => __props.loadedKeys !== undefined);\n\nconst activeExpanded = computed<Set<BTreeNodeKey>>(() => {\n if (isControlledExpanded.value) return new Set(__props.expandedKeys);\n return internalExpanded.value;\n});\n\nconst activeSelected = computed<Set<BTreeNodeKey>>(() => {\n if (isControlledSelected.value) return new Set(__props.selectedKeys);\n return internalSelected.value;\n});\n\nconst activeChecked = computed<Set<BTreeNodeKey>>(() => {\n if (isControlledChecked.value) {\n const raw = __props.checkedKeys as\n | BTreeNodeKey[]\n | { checked: BTreeNodeKey[]; halfChecked: BTreeNodeKey[] };\n if (Array.isArray(raw)) return new Set(raw);\n return new Set(raw.checked);\n }\n return internalChecked.value;\n});\n\nconst activeHalfChecked = computed<Set<BTreeNodeKey>>(() => {\n if (isControlledChecked.value) {\n const raw = __props.checkedKeys as\n | BTreeNodeKey[]\n | { checked: BTreeNodeKey[]; halfChecked: BTreeNodeKey[] };\n if (!Array.isArray(raw) && 'halfChecked' in raw) return new Set(raw.halfChecked);\n }\n return internalHalfChecked.value;\n});\n\nconst activeLoaded = computed<Set<BTreeNodeKey>>(() => {\n if (isControlledLoaded.value) return new Set(__props.loadedKeys);\n return internalLoaded.value;\n});\n\n// ─── Flatten tree ─────────────────────────────────────────────────────────────\n\nfunction flattenTree(nodes: BTreeNodeData[], depth = 0, parentVisible = true): BTreeFlatNode[] {\n const result: BTreeFlatNode[] = [];\n for (const node of nodes) {\n const key = nodeKey(node);\n const isExpanded = activeExpanded.value.has(key);\n const visible = parentVisible;\n result.push({ key, data: node, depth, visible });\n const children = nodeChildren(node);\n if (children?.length) {\n result.push(...flattenTree(children, depth + 1, visible && isExpanded));\n }\n }\n return result;\n}\n\nconst flatNodes = computed(() => flattenTree(__props.treeData));\nconst visibleNodes = computed(() => flatNodes.value.filter((n) => n.visible));\n\n// ─── Mount: apply defaults ────────────────────────────────────────────────────\n\nfunction collectAllKeys(nodes: BTreeNodeData[]): BTreeNodeKey[] {\n const keys: BTreeNodeKey[] = [];\n for (const n of nodes) {\n keys.push(nodeKey(n));\n const children = nodeChildren(n);\n if (children?.length) keys.push(...collectAllKeys(children));\n }\n return keys;\n}\n\nfunction collectParentKeys(nodes: BTreeNodeData[], targetKeys: Set<BTreeNodeKey>): BTreeNodeKey[] {\n const parents: BTreeNodeKey[] = [];\n function walk(nodes: BTreeNodeData[]) {\n for (const n of nodes) {\n const children = nodeChildren(n);\n if (children?.length) {\n const hasDescendant = children.some(\n (c) => targetKeys.has(nodeKey(c)) || walk([c]) !== undefined,\n );\n if (hasDescendant) parents.push(nodeKey(n));\n walk(children);\n }\n }\n }\n walk(nodes);\n return parents;\n}\n\n// Initialise uncontrolled state once\nif (!isControlledExpanded.value) {\n if (__props.defaultExpandAll) {\n internalExpanded.value = new Set(\n collectAllKeys(__props.treeData).filter((k) => {\n const flat = flatNodes.value.find((n) => n.key === k);\n return flat ? !!nodeChildren(flat.data)?.length : false;\n }),\n );\n } else if (__props.defaultExpandedKeys.length) {\n const init = new Set<BTreeNodeKey>(__props.defaultExpandedKeys);\n if (__props.defaultExpandParent) {\n collectParentKeys(__props.treeData, init).forEach((k) => init.add(k));\n }\n internalExpanded.value = init;\n }\n}\nif (!isControlledSelected.value && __props.defaultSelectedKeys.length) {\n internalSelected.value = new Set(__props.defaultSelectedKeys);\n}\nif (!isControlledChecked.value && __props.defaultCheckedKeys.length) {\n internalChecked.value = new Set(__props.defaultCheckedKeys);\n if (!__props.checkStrictly) propagateChecks(internalChecked.value);\n}\n\n// Auto-expand parents when controlled expandedKeys change\nwatch(\n () => __props.expandedKeys,\n (keys) => {\n if (!__props.autoExpandParent || !keys) return;\n const set = new Set(keys);\n collectParentKeys(__props.treeData, set).forEach((k) => set.add(k));\n emit('update:expandedKeys', [...set]);\n },\n);\n\n// ─── Checkbox propagation ─────────────────────────────────────────────────────\n\nfunction propagateChecks(checked: Set<BTreeNodeKey>) {\n // Bottom-up: compute half-checked from actual checked leaves\n const half = new Set<BTreeNodeKey>();\n function walk(nodes: BTreeNodeData[]): { all: boolean; some: boolean } {\n let allChecked = true;\n let someChecked = false;\n for (const n of nodes) {\n const key = nodeKey(n);\n const children = nodeChildren(n);\n if (children?.length) {\n const sub = walk(children);\n if (sub.all) {\n checked.add(key);\n someChecked = true;\n } else if (sub.some) {\n checked.delete(key);\n half.add(key);\n allChecked = false;\n someChecked = true;\n } else {\n if (!checked.has(key)) allChecked = false;\n else someChecked = true;\n }\n } else {\n if (!checked.has(key)) allChecked = false;\n else someChecked = true;\n }\n }\n return { all: allChecked, some: someChecked };\n }\n walk(__props.treeData);\n internalHalfChecked.value = half;\n}\n\n// ─── Node helpers ─────────────────────────────────────────────────────────────\n\nfunction hasChildren(node: BTreeNodeData): boolean {\n const ch = nodeChildren(node);\n return !!ch?.length || (!!__props.loadData && !node.isLeaf);\n}\n\nfunction isExpanded(key: BTreeNodeKey): boolean {\n return activeExpanded.value.has(key);\n}\nfunction isSelected(key: BTreeNodeKey): boolean {\n return activeSelected.value.has(key);\n}\nfunction isChecked(key: BTreeNodeKey): boolean {\n return activeChecked.value.has(key);\n}\nfunction isHalfChecked(key: BTreeNodeKey): boolean {\n return activeHalfChecked.value.has(key);\n}\nfunction isLoading(key: BTreeNodeKey): boolean {\n return loadingKeys.value.has(key);\n}\nfunction isLoaded(key: BTreeNodeKey): boolean {\n return activeLoaded.value.has(key);\n}\nfunction isFiltered(node: BTreeNodeData): boolean {\n return __props.filterTreeNode ? __props.filterTreeNode(node) : false;\n}\n\n// ─── Expand / collapse ────────────────────────────────────────────────────────\n\nasync function toggleExpand(node: BTreeNodeData, event?: MouseEvent | KeyboardEvent) {\n const key = nodeKey(node);\n if (node.disabled || __props.disabled) return;\n\n const expanding = !isExpanded(key);\n\n // Async load\n if (expanding && __props.loadData && !isLoaded(key) && !isLoading(key)) {\n loadingKeys.value.add(key);\n try {\n await __props.loadData(node);\n if (!isControlledLoaded.value) internalLoaded.value.add(key);\n emit('update:loadedKeys', [...activeLoaded.value, key]);\n } finally {\n loadingKeys.value.delete(key);\n }\n }\n\n let nextSet: Set<BTreeNodeKey>;\n if (isControlledExpanded.value) {\n nextSet = new Set(__props.expandedKeys);\n } else {\n nextSet = new Set(internalExpanded.value);\n }\n\n if (expanding) nextSet.add(key);\n else nextSet.delete(key);\n\n if (!isControlledExpanded.value) internalExpanded.value = nextSet;\n emit('update:expandedKeys', [...nextSet]);\n\n const info: BTreeExpandInfo = { expanded: expanding, node, event };\n emit('expand', [...nextSet], info);\n}\n\n// ─── Select ───────────────────────────────────────────────────────────────────\n\nfunction handleSelect(node: BTreeNodeData, event: MouseEvent | KeyboardEvent) {\n if (!__props.selectable || node.selectable === false || node.disabled || __props.disabled) return;\n const key = nodeKey(node);\n\n let nextSet: Set<BTreeNodeKey>;\n if (isControlledSelected.value) {\n nextSet = new Set(__props.selectedKeys);\n } else {\n nextSet = new Set(internalSelected.value);\n }\n\n if (nextSet.has(key)) {\n nextSet.delete(key);\n } else {\n if (!__props.multiple) nextSet.clear();\n nextSet.add(key);\n }\n\n if (!isControlledSelected.value) internalSelected.value = nextSet;\n emit('update:selectedKeys', [...nextSet]);\n\n const info: BTreeSelectInfo = {\n event,\n selected: nextSet.has(key),\n node,\n selectedNodes: flatNodes.value.filter((n) => nextSet.has(n.key)).map((n) => n.data),\n nativeEvent: event,\n };\n emit('select', [...nextSet], info);\n}\n\n// ─── Check ────────────────────────────────────────────────────────────────────\n\nfunction handleCheck(node: BTreeNodeData, event: MouseEvent | KeyboardEvent) {\n if (!__props.checkable || node.disableCheckbox || node.disabled || __props.disabled) return;\n const key = nodeKey(node);\n\n let nextChecked: Set<BTreeNodeKey>;\n if (isControlledChecked.value) {\n const raw = __props.checkedKeys as\n | BTreeNodeKey[]\n | { checked: BTreeNodeKey[]; halfChecked: BTreeNodeKey[] };\n nextChecked = new Set(Array.isArray(raw) ? raw : raw.checked);\n } else {\n nextChecked = new Set(internalChecked.value);\n }\n\n if (nextChecked.has(key)) {\n nextChecked.delete(key);\n // Uncheck all descendants\n if (!__props.checkStrictly) {\n function uncheckDesc(nodes: BTreeNodeData[]) {\n for (const n of nodes) {\n nextChecked.delete(nodeKey(n));\n const ch = nodeChildren(n);\n if (ch?.length) uncheckDesc(ch);\n }\n }\n const children = nodeChildren(node);\n if (children?.length) uncheckDesc(children);\n }\n } else {\n nextChecked.add(key);\n // Check all descendants\n if (!__props.checkStrictly) {\n function checkDesc(nodes: BTreeNodeData[]) {\n for (const n of nodes) {\n if (!n.disableCheckbox && !n.disabled) nextChecked.add(nodeKey(n));\n const ch = nodeChildren(n);\n if (ch?.length) checkDesc(ch);\n }\n }\n const children = nodeChildren(node);\n if (children?.length) checkDesc(children);\n }\n }\n\n if (!__props.checkStrictly && !isControlledChecked.value) {\n propagateChecks(nextChecked);\n }\n\n const checkedNodes = flatNodes.value.filter((n) => nextChecked.has(n.key)).map((n) => n.data);\n\n const info: BTreeCheckInfo = {\n event,\n node,\n checked: nextChecked.has(key),\n checkedNodes,\n checkedNodesPositions: checkedNodes.map((n) => ({ node: n, pos: '0' })),\n halfCheckedKeys: [...activeHalfChecked.value],\n nativeEvent: event,\n };\n\n if (!isControlledChecked.value) internalChecked.value = nextChecked;\n\n const emitValue: BTreeNodeKey[] | BTreeCheckedKeys = __props.checkStrictly\n ? { checked: [...nextChecked], halfChecked: [...activeHalfChecked.value] }\n : [...nextChecked];\n\n emit('update:checkedKeys', emitValue);\n emit('check', emitValue, info);\n}\n\n// ─── Drag & Drop ──────────────────────────────────────────────────────────────\n\nfunction handleDragStart(event: DragEvent, node: BTreeNodeData) {\n if (!__props.draggable) return;\n dragNodeKey.value = nodeKey(node);\n event.dataTransfer?.setData('text/plain', String(nodeKey(node)));\n emit('dragStart', { event, node });\n}\n\nfunction handleDragEnter(event: DragEvent, node: BTreeNodeData) {\n if (!__props.draggable) return;\n event.preventDefault();\n emit('dragEnter', { event, node, expandedKeys: [...activeExpanded.value] });\n}\n\nfunction handleDragOver(event: DragEvent, node: BTreeNodeData) {\n if (!__props.draggable) return;\n event.preventDefault();\n emit('dragOver', { event, node });\n}\n\nfunction handleDragLeave(event: DragEvent, node: BTreeNodeData) {\n if (!__props.draggable) return;\n emit('dragLeave', { event, node });\n}\n\nfunction handleDragEnd(event: DragEvent, node: BTreeNodeData) {\n if (!__props.draggable) return;\n dragNodeKey.value = null;\n emit('dragEnd', { event, node });\n}\n\nfunction handleDrop(event: DragEvent, node: BTreeNodeData) {\n if (!__props.draggable) return;\n event.preventDefault();\n const dragFlat = flatNodes.value.find((n) => n.key === dragNodeKey.value);\n if (!dragFlat) return;\n\n emit('drop', {\n event,\n node,\n dragNode: dragFlat.data,\n dragNodesKeys: [dragFlat.key],\n dropPosition: 0,\n dropToGap: false,\n });\n dragNodeKey.value = null;\n}\n\n// ─── Keyboard navigation ──────────────────────────────────────────────────────\n\nconst treeRef = ref<HTMLElement | null>(null);\n\nconst focusedNodeKey = ref<BTreeNodeKey | null>(visibleNodes.value[0]?.key ?? null);\n\nfunction handleTreeKeydown(event: KeyboardEvent) {\n const visible = visibleNodes.value;\n if (!visible.length) return;\n\n const currentIdx = visible.findIndex((n) => n.key === focusedNodeKey.value);\n const current = visible[currentIdx];\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n const next = visible[currentIdx + 1];\n if (next) {\n focusedNodeKey.value = next.key;\n nextTick(() => focusNode(next.key));\n }\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n const prev = visible[currentIdx - 1];\n if (prev) {\n focusedNodeKey.value = prev.key;\n nextTick(() => focusNode(prev.key));\n }\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n if (!current) break;\n if (hasChildren(current.data) && !isExpanded(current.key)) {\n toggleExpand(current.data, event);\n } else if (isExpanded(current.key)) {\n const firstChild = visible[currentIdx + 1];\n if (firstChild?.depth > current.depth) {\n focusedNodeKey.value = firstChild.key;\n nextTick(() => focusNode(firstChild.key));\n }\n }\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n if (!current) break;\n if (isExpanded(current.key)) {\n toggleExpand(current.data, event);\n } else if (current.depth > 0) {\n // Move to parent\n for (let i = currentIdx - 1; i >= 0; i--) {\n if (visible[i].depth < current.depth) {\n focusedNodeKey.value = visible[i].key;\n nextTick(() => focusNode(visible[i].key));\n break;\n }\n }\n }\n break;\n }\n case 'Enter':\n case ' ': {\n event.preventDefault();\n if (!current) break;\n if (__props.checkable) {\n handleCheck(current.data, event);\n } else if (__props.selectable) {\n handleSelect(current.data, event);\n }\n break;\n }\n case 'Home': {\n event.preventDefault();\n if (visible[0]) {\n focusedNodeKey.value = visible[0].key;\n nextTick(() => focusNode(visible[0].key));\n }\n break;\n }\n case 'End': {\n event.preventDefault();\n const last = visible[visible.length - 1];\n if (last) {\n focusedNodeKey.value = last.key;\n nextTick(() => focusNode(last.key));\n }\n break;\n }\n }\n}\n\nfunction focusNode(key: BTreeNodeKey) {\n const el = treeRef.value?.querySelector<HTMLElement>(\n `[data-node-key=\"${String(key).replace(/[\"\\\\]/g, '\\\\$&')}\"]`,\n );\n el?.focus();\n}\n\n// ─── Directory-mode: click/dblclick expand ────────────────────────────────────\n\nfunction handleNodeClick(node: BTreeNodeData, event: MouseEvent) {\n if (__props.directory && __props.expandAction === 'click' && hasChildren(node)) {\n toggleExpand(node, event);\n }\n handleSelect(node, event);\n}\n\nfunction handleNodeDblClick(node: BTreeNodeData, event: MouseEvent) {\n if (__props.directory && __props.expandAction === 'doubleClick' && hasChildren(node)) {\n toggleExpand(node, event);\n }\n emit('dblclick', event, node);\n}\n\n// ─── Scroll to ────────────────────────────────────────────────────────────────\n\nfunction scrollTo(opts: BTreeScrollToOptions) {\n nextTick(() => {\n const el = treeRef.value?.querySelector<HTMLElement>(\n `[data-node-key=\"${String(opts.key).replace(/[\"\\\\]/g, '\\\\$&')}\"]`,\n );\n const alignMap = { top: 'start', bottom: 'end', auto: 'nearest' } as const;\n el?.scrollIntoView?.({ block: alignMap[opts.align ?? 'auto'] });\n });\n}\n\n__expose({ scrollTo });\n\n// ─── Right click ─────────────────────────────────────────────────────────────\n\nfunction handleRightClick(event: MouseEvent, node: BTreeNodeData) {\n event.preventDefault();\n emit('rightClick', { event, node });\n}\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n ref_key: \"treeRef\",\n ref: treeRef,\n class: _normalizeClass([\"b-tree\", {\n 'b-tree--checkable': __props.checkable,\n 'b-tree--show-line': __props.showLine,\n 'b-tree--block-node': __props.blockNode,\n 'b-tree--directory': __props.directory,\n 'b-tree--disabled': __props.disabled,\n }]),\n role: \"tree\",\n \"aria-multiselectable\": __props.multiple || undefined,\n style: _normalizeStyle(__props.height ? { height: `${__props.height}px`, overflowY: 'auto' } : undefined),\n onKeydown: handleTreeKeydown\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(visibleNodes.value, (flatNode) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: flatNode.key,\n \"data-node-key\": String(flatNode.key),\n class: _normalizeClass([\"b-tree__node\", {\n 'b-tree__node--selected': isSelected(flatNode.key),\n 'b-tree__node--checked': isChecked(flatNode.key),\n 'b-tree__node--half-checked': isHalfChecked(flatNode.key),\n 'b-tree__node--expanded': isExpanded(flatNode.key),\n 'b-tree__node--disabled': flatNode.data.disabled || __props.disabled,\n 'b-tree__node--leaf': !hasChildren(flatNode.data),\n 'b-tree__node--loading': isLoading(flatNode.key),\n 'b-tree__node--dragging': __props.draggable && dragNodeKey.value === flatNode.key,\n 'b-tree__node--filtered': isFiltered(flatNode.data),\n 'b-tree__node--block': __props.blockNode,\n }]),\n role: \"treeitem\",\n \"aria-expanded\": hasChildren(flatNode.data) ? isExpanded(flatNode.key) : undefined,\n \"aria-selected\": __props.selectable ? isSelected(flatNode.key) : undefined,\n \"aria-checked\": __props.checkable ? isChecked(flatNode.key) : undefined,\n \"aria-disabled\": flatNode.data.disabled || __props.disabled || undefined,\n \"aria-level\": flatNode.depth + 1,\n tabindex: flatNode.key === focusedNodeKey.value ? 0 : -1,\n style: _normalizeStyle({ '--b-tree-node-indent': `${flatNode.depth * 24}px` }),\n draggable: __props.draggable ? 'true' : undefined,\n onClick: _withModifiers(($event: any) => (handleNodeClick(flatNode.data, $event)), [\"stop\"]),\n onDblclick: _withModifiers(($event: any) => (handleNodeDblClick(flatNode.data, $event)), [\"stop\"]),\n onContextmenu: _withModifiers(($event: any) => (handleRightClick($event, flatNode.data)), [\"stop\"]),\n onDragstart: ($event: any) => (handleDragStart($event, flatNode.data)),\n onDragenter: ($event: any) => (handleDragEnter($event, flatNode.data)),\n onDragover: ($event: any) => (handleDragOver($event, flatNode.data)),\n onDragleave: ($event: any) => (handleDragLeave($event, flatNode.data)),\n onDragend: ($event: any) => (handleDragEnd($event, flatNode.data)),\n onDrop: ($event: any) => (handleDrop($event, flatNode.data))\n }, [\n (__props.draggable)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, [...(_cache[0] || (_cache[0] = [\n _createStaticVNode(\"<svg viewBox=\\\"0 0 16 16\\\" fill=\\\"currentColor\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" data-v-08bb45f2><circle cx=\\\"5\\\" cy=\\\"3.5\\\" r=\\\"1.25\\\" data-v-08bb45f2></circle><circle cx=\\\"5\\\" cy=\\\"8\\\" r=\\\"1.25\\\" data-v-08bb45f2></circle><circle cx=\\\"5\\\" cy=\\\"12.5\\\" r=\\\"1.25\\\" data-v-08bb45f2></circle><circle cx=\\\"11\\\" cy=\\\"3.5\\\" r=\\\"1.25\\\" data-v-08bb45f2></circle><circle cx=\\\"11\\\" cy=\\\"8\\\" r=\\\"1.25\\\" data-v-08bb45f2></circle><circle cx=\\\"11\\\" cy=\\\"12.5\\\" r=\\\"1.25\\\" data-v-08bb45f2></circle></svg>\", 1)\n ]))]))\n : _createCommentVNode(\"\", true),\n _cache[4] || (_cache[4] = _createElementVNode(\"span\", {\n class: \"b-tree__indent\",\n \"aria-hidden\": \"true\"\n }, null, -1)),\n (hasChildren(flatNode.data))\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 1,\n class: _normalizeClass([\"b-tree__switcher\", {\n 'b-tree__switcher--expanded': isExpanded(flatNode.key),\n 'b-tree__switcher--loading': isLoading(flatNode.key),\n }]),\n \"aria-hidden\": \"true\",\n onClick: _withModifiers(($event: any) => (toggleExpand(flatNode.data, $event)), [\"stop\"])\n }, [\n (!isLoading(flatNode.key))\n ? _renderSlot(_ctx.$slots, \"switcherIcon\", {\n key: 0,\n node: flatNode.data,\n expanded: isExpanded(flatNode.key)\n }, () => [\n _cache[1] || (_cache[1] = _createElementVNode(\"svg\", {\n class: \"b-tree__switcher-icon\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"aria-hidden\": \"true\"\n }, [\n _createElementVNode(\"path\", {\n d: \"M9 18L15 12L9 6\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n })\n ], -1))\n ], true)\n : _createCommentVNode(\"\", true),\n (isLoading(flatNode.key))\n ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_5, [...(_cache[2] || (_cache[2] = [\n _createElementVNode(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"9\",\n stroke: \"currentColor\",\n \"stroke-width\": \"2\",\n \"stroke-dasharray\": \"42\",\n \"stroke-dashoffset\": \"14\",\n \"stroke-linecap\": \"round\"\n }, null, -1)\n ]))]))\n : _createCommentVNode(\"\", true)\n ], 10, _hoisted_4))\n : (__props.showLine)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6))\n : _createCommentVNode(\"\", true),\n (__props.checkable && flatNode.data.checkable !== false)\n ? (_openBlock(), _createElementBlock(\"span\", {\n key: 3,\n class: _normalizeClass([\"b-tree__checkbox\", {\n 'b-tree__checkbox--checked': isChecked(flatNode.key),\n 'b-tree__checkbox--indeterminate': isHalfChecked(flatNode.key),\n 'b-tree__checkbox--disabled':\n flatNode.data.disableCheckbox || flatNode.data.disabled || __props.disabled,\n }]),\n role: \"checkbox\",\n \"aria-label\": nodeTitle(flatNode.data),\n \"aria-checked\": isHalfChecked(flatNode.key) ? 'mixed' : isChecked(flatNode.key),\n \"aria-disabled\": \n flatNode.data.disableCheckbox || flatNode.data.disabled || __props.disabled || undefined\n ,\n tabindex: \"-1\",\n onClick: _withModifiers(($event: any) => (handleCheck(flatNode.data, $event)), [\"stop\"]),\n onKeydown: [\n _withKeys(_withModifiers(($event: any) => (handleCheck(flatNode.data, $event)), [\"prevent\"]), [\"enter\"]),\n _withKeys(_withModifiers(($event: any) => (handleCheck(flatNode.data, $event)), [\"prevent\"]), [\"space\"])\n ]\n }, [...(_cache[3] || (_cache[3] = [\n _createElementVNode(\"span\", {\n class: \"b-tree__checkbox-inner\",\n \"aria-hidden\": \"true\"\n }, null, -1)\n ]))], 42, _hoisted_7))\n : _createCommentVNode(\"\", true),\n (__props.showIcon || flatNode.data.icon || _ctx.$slots.icon)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_8, [\n _renderSlot(_ctx.$slots, \"icon\", {\n node: flatNode.data\n }, () => [\n (flatNode.data.icon)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_9, _toDisplayString(flatNode.data.icon), 1))\n : _createCommentVNode(\"\", true)\n ], true)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"b-tree__title\", { 'b-tree__title--filtered': isFiltered(flatNode.data) }])\n }, [\n _renderSlot(_ctx.$slots, \"title\", {\n node: flatNode.data\n }, () => [\n _createTextVNode(_toDisplayString(nodeTitle(flatNode.data)), 1)\n ], true)\n ], 2)\n ], 46, _hoisted_2))\n }), 128))\n ], 46, _hoisted_1))\n}\n}\n\n})"],"mappings":";;AAGA,IAAM,KAAa,CAAC,uBAAuB,EACrC,KAAa;CAAC;CAAiB;CAAiB;CAAiB;CAAgB;CAAiB;CAAc;CAAY;CAAa;CAAW;CAAc;CAAiB;CAAe;CAAe;CAAc;CAAe;CAAa;CAAS,EACpQ,KAAa;CACjB,KAAK;CACL,OAAO;CACP,eAAe;CAChB,EACK,KAAa,CAAC,UAAU,EACxB,KAAa;CACjB,KAAK;CACL,OAAO;CACP,SAAS;CACT,MAAM;CACN,OAAO;CACP,eAAe;CAChB,EACK,KAAa;CACjB,KAAK;CACL,OAAO;CACP,eAAe;CAChB,EACK,KAAa;CAAC;CAAc;CAAgB;CAAiB;CAAW;CAAY,EACpF,KAAa;CACjB,KAAK;CACL,OAAO;CACP,eAAe;CAChB,EACK,KAAa,EAAE,KAAK,GAAG,EAoB7B,IAA4B,kBAAiB;CAC3C,QAAQ;CACR,OAAO;EACL,UAAU,EAAE,eAAgB,EAAE,EAAG;EACjC,YAAY,EAAE,gBAAgB,EAAE,GAAG;EACnC,WAAW;GAAE,MAAM;GAAS,SAAS;GAAO;EAC5C,eAAe;GAAE,MAAM;GAAS,SAAS;GAAO;EAChD,aAAa,EAAE,eAAgB,KAAA,GAAY;EAC3C,oBAAoB,EAAE,eAAgB,EAAE,EAAG;EAC3C,cAAc,EAAE,eAAgB,KAAA,GAAY;EAC5C,qBAAqB,EAAE,eAAgB,EAAE,EAAG;EAC5C,cAAc,EAAE,eAAgB,KAAA,GAAY;EAC5C,qBAAqB,EAAE,eAAgB,EAAE,EAAG;EAC5C,kBAAkB;GAAE,MAAM;GAAS,SAAS;GAAO;EACnD,qBAAqB;GAAE,MAAM;GAAS,SAAS;GAAM;EACrD,kBAAkB;GAAE,MAAM;GAAS,SAAS;GAAO;EACnD,UAAU;GAAE,MAAM;GAAS,SAAS;GAAO;EAC3C,YAAY;GAAE,MAAM;GAAS,SAAS;GAAM;EAC5C,UAAU;GAAE,MAAM;GAAS,SAAS;GAAO;EAC3C,UAAU;GAAE,MAAM;GAAS,SAAS;GAAO;EAC3C,UAAU;GAAE,MAAM;GAAS,SAAS;GAAO;EAC3C,WAAW;GAAE,MAAM;GAAS,SAAS;GAAO;EAC5C,WAAW;GAAE,MAAM;GAAS,SAAS;GAAO;EAC5C,UAAU;GAAE,MAAM;GAAU,SAAS,KAAA;GAAW;EAChD,YAAY,EAAE,eAAgB,KAAA,GAAY;EAC1C,gBAAgB;GAAE,MAAM;GAAU,SAAS,KAAA;GAAW;EACtD,QAAQ,EAAE,eAAgB,KAAA,GAAY;EACtC,SAAS;GAAE,MAAM;GAAS,SAAS;GAAO;EAC1C,WAAW;GAAE,MAAM;GAAS,SAAS;GAAO;EAC5C,cAAc;GAAE,MAAM,CAAC,QAAQ,QAAQ;GAAE,SAAS;GAAS;EAC5D;CACD,OAAO;EAAC;EAAS;EAAU;EAAU;EAAQ;EAAc;EAAa;EAAa;EAAY;EAAa;EAAW;EAAQ;EAAY;EAAsB;EAAuB;EAAuB;EAAoB;CACrO,MAAM,GAAc,EAAE,QAAQ,GAAU,MAAM,MAAU;EAM1D,IAAM,IAAO,IAQP,KAAO,QAAe,EAAQ,WAAW,OAAO,MAAM,EACtD,KAAS,QAAe,EAAQ,WAAW,SAAS,QAAQ,EAC5D,KAAY,QAAe,EAAQ,WAAW,YAAY,WAAW;EAE3E,SAAS,EAAQ,GAAgC;AAC/C,UAAO,EAAE,GAAK;;EAEhB,SAAS,EAAU,GAA0B;AAC3C,UAAQ,EAAE,GAAO,UAAqB;;EAExC,SAAS,EAAa,GAA+C;AACnE,UAAO,EAAE,GAAU;;EAKrB,IAAM,IAAmB,kBAAuB,IAAI,KAAK,CAAC,EACpD,IAAmB,kBAAuB,IAAI,KAAK,CAAC,EACpD,IAAkB,kBAAuB,IAAI,KAAK,CAAC,EACnD,IAAsB,kBAAuB,IAAI,KAAK,CAAC,EACvD,IAAiB,kBAAuB,IAAI,KAAK,CAAC,EAClD,IAAc,kBAAuB,IAAI,KAAK,CAAC,EAC/C,IAAc,EAAyB,KAAK,EAG5C,IAAuB,QAAe,EAAQ,iBAAiB,KAAA,EAAU,EACzE,IAAuB,QAAe,EAAQ,iBAAiB,KAAA,EAAU,EACzE,IAAsB,QAAe,EAAQ,gBAAgB,KAAA,EAAU,EACvE,IAAqB,QAAe,EAAQ,eAAe,KAAA,EAAU,EAErE,IAAiB,QACjB,EAAqB,QAAc,IAAI,IAAI,EAAQ,aAAa,GAC7D,EAAiB,MACxB,EAEI,KAAiB,QACjB,EAAqB,QAAc,IAAI,IAAI,EAAQ,aAAa,GAC7D,EAAiB,MACxB,EAEI,KAAgB,QAAkC;AACtD,OAAI,EAAoB,OAAO;IAC7B,IAAM,IAAM,EAAQ;AAIpB,WADI,MAAM,QAAQ,EAAI,GAAS,IAAI,IAAI,EAAI,GACpC,IAAI,IAAI,EAAI,QAAQ;;AAE7B,UAAO,EAAgB;IACvB,EAEI,IAAoB,QAAkC;AAC1D,OAAI,EAAoB,OAAO;IAC7B,IAAM,IAAM,EAAQ;AAGpB,QAAI,CAAC,MAAM,QAAQ,EAAI,IAAI,iBAAiB,EAAK,QAAO,IAAI,IAAI,EAAI,YAAY;;AAElF,UAAO,EAAoB;IAC3B,EAEI,IAAe,QACf,EAAmB,QAAc,IAAI,IAAI,EAAQ,WAAW,GACzD,EAAe,MACtB;EAIF,SAAS,EAAY,GAAwB,IAAQ,GAAG,IAAgB,IAAuB;GAC7F,IAAM,IAA0B,EAAE;AAClC,QAAK,IAAM,KAAQ,GAAO;IACxB,IAAM,IAAM,EAAQ,EAAK,EACnB,IAAa,EAAe,MAAM,IAAI,EAAI,EAC1C,IAAU;AAChB,MAAO,KAAK;KAAE;KAAK,MAAM;KAAM;KAAO;KAAS,CAAC;IAChD,IAAM,IAAW,EAAa,EAAK;AACnC,IAAI,GAAU,UACZ,EAAO,KAAK,GAAG,EAAY,GAAU,IAAQ,GAAG,KAAW,EAAW,CAAC;;AAG3E,UAAO;;EAGT,IAAM,IAAY,QAAe,EAAY,EAAQ,SAAS,CAAC,EACzD,IAAe,QAAe,EAAU,MAAM,QAAQ,MAAM,EAAE,QAAQ,CAAC;EAI7E,SAAS,EAAe,GAAwC;GAC9D,IAAM,IAAuB,EAAE;AAC/B,QAAK,IAAM,KAAK,GAAO;AACrB,MAAK,KAAK,EAAQ,EAAE,CAAC;IACrB,IAAM,IAAW,EAAa,EAAE;AAChC,IAAI,GAAU,UAAQ,EAAK,KAAK,GAAG,EAAe,EAAS,CAAC;;AAE9D,UAAO;;EAGT,SAAS,EAAkB,GAAwB,GAA+C;GAChG,IAAM,IAA0B,EAAE;GAClC,SAAS,EAAK,GAAwB;AACpC,SAAK,IAAM,KAAK,GAAO;KACrB,IAAM,IAAW,EAAa,EAAE;AAChC,KAAI,GAAU,WACU,EAAS,MAC5B,MAAM,EAAW,IAAI,EAAQ,EAAE,CAAC,IAAI,EAAK,CAAC,EAAE,CAAC,KAAK,KAAA,EACpD,IACkB,EAAQ,KAAK,EAAQ,EAAE,CAAC,EAC3C,EAAK,EAAS;;;AAKpB,UADA,EAAK,EAAM,EACJ;;AAIT,MAAI,CAAC,EAAqB;OACpB,EAAQ,iBACV,GAAiB,QAAQ,IAAI,IAC3B,EAAe,EAAQ,SAAS,CAAC,QAAQ,MAAM;IAC7C,IAAM,IAAO,EAAU,MAAM,MAAM,MAAM,EAAE,QAAQ,EAAE;AACrD,WAAO,IAAO,CAAC,CAAC,EAAa,EAAK,KAAK,EAAE,SAAS;KAClD,CACH;YACQ,EAAQ,oBAAoB,QAAQ;IAC7C,IAAM,IAAO,IAAI,IAAkB,EAAQ,oBAAoB;AAI/D,IAHI,EAAQ,uBACV,EAAkB,EAAQ,UAAU,EAAK,CAAC,SAAS,MAAM,EAAK,IAAI,EAAE,CAAC,EAEvE,EAAiB,QAAQ;;;AAY7B,EATI,CAAC,EAAqB,SAAS,EAAQ,oBAAoB,WAC7D,EAAiB,QAAQ,IAAI,IAAI,EAAQ,oBAAoB,GAE3D,CAAC,EAAoB,SAAS,EAAQ,mBAAmB,WAC3D,EAAgB,QAAQ,IAAI,IAAI,EAAQ,mBAAmB,EACtD,EAAQ,iBAAe,EAAgB,EAAgB,MAAM,GAIpE,SACQ,EAAQ,eACb,MAAS;AACR,OAAI,CAAC,EAAQ,oBAAoB,CAAC,EAAM;GACxC,IAAM,IAAM,IAAI,IAAI,EAAK;AAEzB,GADA,EAAkB,EAAQ,UAAU,EAAI,CAAC,SAAS,MAAM,EAAI,IAAI,EAAE,CAAC,EACnE,EAAK,uBAAuB,CAAC,GAAG,EAAI,CAAC;IAExC;EAID,SAAS,EAAgB,GAA4B;GAEnD,IAAM,oBAAO,IAAI,KAAmB;GACpC,SAAS,EAAK,GAAyD;IACrE,IAAI,IAAa,IACb,IAAc;AAClB,SAAK,IAAM,KAAK,GAAO;KACrB,IAAM,IAAM,EAAQ,EAAE,EAChB,IAAW,EAAa,EAAE;AAChC,SAAI,GAAU,QAAQ;MACpB,IAAM,IAAM,EAAK,EAAS;AAC1B,MAAI,EAAI,OACN,EAAQ,IAAI,EAAI,EAChB,IAAc,MACL,EAAI,QACb,EAAQ,OAAO,EAAI,EACnB,EAAK,IAAI,EAAI,EACb,IAAa,IACb,IAAc,MAET,EAAQ,IAAI,EAAI,GAChB,IAAc,KADI,IAAa;YAIjC,EAAQ,IAAI,EAAI,GAChB,IAAc,KADI,IAAa;;AAIxC,WAAO;KAAE,KAAK;KAAY,MAAM;KAAa;;AAG/C,GADA,EAAK,EAAQ,SAAS,EACtB,EAAoB,QAAQ;;EAK9B,SAAS,EAAY,GAA8B;AAEjD,UAAO,CAAC,CADG,EAAa,EAAK,EAChB,UAAW,CAAC,CAAC,EAAQ,YAAY,CAAC,EAAK;;EAGtD,SAAS,EAAW,GAA4B;AAC9C,UAAO,EAAe,MAAM,IAAI,EAAI;;EAEtC,SAAS,EAAW,GAA4B;AAC9C,UAAO,GAAe,MAAM,IAAI,EAAI;;EAEtC,SAAS,EAAU,GAA4B;AAC7C,UAAO,GAAc,MAAM,IAAI,EAAI;;EAErC,SAAS,EAAc,GAA4B;AACjD,UAAO,EAAkB,MAAM,IAAI,EAAI;;EAEzC,SAAS,EAAU,GAA4B;AAC7C,UAAO,EAAY,MAAM,IAAI,EAAI;;EAEnC,SAAS,GAAS,GAA4B;AAC5C,UAAO,EAAa,MAAM,IAAI,EAAI;;EAEpC,SAAS,EAAW,GAA8B;AAChD,UAAO,EAAQ,iBAAiB,EAAQ,eAAe,EAAK,GAAG;;EAKjE,eAAe,EAAa,GAAqB,GAAoC;GACnF,IAAM,IAAM,EAAQ,EAAK;AACzB,OAAI,EAAK,YAAY,EAAQ,SAAU;GAEvC,IAAM,IAAY,CAAC,EAAW,EAAI;AAGlC,OAAI,KAAa,EAAQ,YAAY,CAAC,GAAS,EAAI,IAAI,CAAC,EAAU,EAAI,EAAE;AACtE,MAAY,MAAM,IAAI,EAAI;AAC1B,QAAI;AAGF,KAFA,MAAM,EAAQ,SAAS,EAAK,EACvB,EAAmB,SAAO,EAAe,MAAM,IAAI,EAAI,EAC5D,EAAK,qBAAqB,CAAC,GAAG,EAAa,OAAO,EAAI,CAAC;cAC/C;AACR,OAAY,MAAM,OAAO,EAAI;;;GAIjC,IAAI;AAWJ,GAVA,AAGE,IAHE,EAAqB,QACb,IAAI,IAAI,EAAQ,aAAa,GAE7B,IAAI,IAAI,EAAiB,MAAM,EAGvC,IAAW,EAAQ,IAAI,EAAI,GAC1B,EAAQ,OAAO,EAAI,EAEnB,EAAqB,UAAO,EAAiB,QAAQ,IAC1D,EAAK,uBAAuB,CAAC,GAAG,EAAQ,CAAC;GAEzC,IAAM,IAAwB;IAAE,UAAU;IAAW;IAAM;IAAO;AAClE,KAAK,UAAU,CAAC,GAAG,EAAQ,EAAE,EAAK;;EAKpC,SAAS,EAAa,GAAqB,GAAmC;AAC5E,OAAI,CAAC,EAAQ,cAAc,EAAK,eAAe,MAAS,EAAK,YAAY,EAAQ,SAAU;GAC3F,IAAM,IAAM,EAAQ,EAAK,EAErB;AAeJ,GAdA,AAGE,IAHE,EAAqB,QACb,IAAI,IAAI,EAAQ,aAAa,GAE7B,IAAI,IAAI,EAAiB,MAAM,EAGvC,EAAQ,IAAI,EAAI,GAClB,EAAQ,OAAO,EAAI,IAEd,EAAQ,YAAU,EAAQ,OAAO,EACtC,EAAQ,IAAI,EAAI,GAGb,EAAqB,UAAO,EAAiB,QAAQ,IAC1D,EAAK,uBAAuB,CAAC,GAAG,EAAQ,CAAC;GAEzC,IAAM,IAAwB;IAC5B;IACA,UAAU,EAAQ,IAAI,EAAI;IAC1B;IACA,eAAe,EAAU,MAAM,QAAQ,MAAM,EAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK;IACnF,aAAa;IACd;AACD,KAAK,UAAU,CAAC,GAAG,EAAQ,EAAE,EAAK;;EAKpC,SAAS,EAAY,GAAqB,GAAmC;AAC3E,OAAI,CAAC,EAAQ,aAAa,EAAK,mBAAmB,EAAK,YAAY,EAAQ,SAAU;GACrF,IAAM,IAAM,EAAQ,EAAK,EAErB;AACJ,OAAI,EAAoB,OAAO;IAC7B,IAAM,IAAM,EAAQ;AAGpB,QAAc,IAAI,IAAI,MAAM,QAAQ,EAAI,GAAG,IAAM,EAAI,QAAQ;SAE7D,KAAc,IAAI,IAAI,EAAgB,MAAM;AAG9C,OAAI,EAAY,IAAI,EAAI,EAGtB;QAFA,EAAY,OAAO,EAAI,EAEnB,CAAC,EAAQ,eAAe;KAC1B,SAAS,EAAY,GAAwB;AAC3C,WAAK,IAAM,KAAK,GAAO;AACrB,SAAY,OAAO,EAAQ,EAAE,CAAC;OAC9B,IAAM,IAAK,EAAa,EAAE;AAC1B,OAAI,GAAI,UAAQ,EAAY,EAAG;;;KAGnC,IAAM,IAAW,EAAa,EAAK;AACnC,KAAI,GAAU,UAAQ,EAAY,EAAS;;cAG7C,EAAY,IAAI,EAAI,EAEhB,CAAC,EAAQ,eAAe;IAC1B,SAAS,EAAU,GAAwB;AACzC,UAAK,IAAM,KAAK,GAAO;AACrB,MAAI,CAAC,EAAE,mBAAmB,CAAC,EAAE,YAAU,EAAY,IAAI,EAAQ,EAAE,CAAC;MAClE,IAAM,IAAK,EAAa,EAAE;AAC1B,MAAI,GAAI,UAAQ,EAAU,EAAG;;;IAGjC,IAAM,IAAW,EAAa,EAAK;AACnC,IAAI,GAAU,UAAQ,EAAU,EAAS;;AAI7C,GAAI,CAAC,EAAQ,iBAAiB,CAAC,EAAoB,SACjD,EAAgB,EAAY;GAG9B,IAAM,IAAe,EAAU,MAAM,QAAQ,MAAM,EAAY,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,EAEvF,IAAuB;IAC3B;IACA;IACA,SAAS,EAAY,IAAI,EAAI;IAC7B;IACA,uBAAuB,EAAa,KAAK,OAAO;KAAE,MAAM;KAAG,KAAK;KAAK,EAAE;IACvE,iBAAiB,CAAC,GAAG,EAAkB,MAAM;IAC7C,aAAa;IACd;AAED,GAAK,EAAoB,UAAO,EAAgB,QAAQ;GAExD,IAAM,IAA+C,EAAQ,gBACzD;IAAE,SAAS,CAAC,GAAG,EAAY;IAAE,aAAa,CAAC,GAAG,EAAkB,MAAM;IAAE,GACxE,CAAC,GAAG,EAAY;AAGpB,GADA,EAAK,sBAAsB,EAAU,EACrC,EAAK,SAAS,GAAW,EAAK;;EAKhC,SAAS,GAAgB,GAAkB,GAAqB;AACzD,KAAQ,cACb,EAAY,QAAQ,EAAQ,EAAK,EACjC,EAAM,cAAc,QAAQ,cAAc,OAAO,EAAQ,EAAK,CAAC,CAAC,EAChE,EAAK,aAAa;IAAE;IAAO;IAAM,CAAC;;EAGpC,SAAS,GAAgB,GAAkB,GAAqB;AACzD,KAAQ,cACb,EAAM,gBAAgB,EACtB,EAAK,aAAa;IAAE;IAAO;IAAM,cAAc,CAAC,GAAG,EAAe,MAAM;IAAE,CAAC;;EAG7E,SAAS,GAAe,GAAkB,GAAqB;AACxD,KAAQ,cACb,EAAM,gBAAgB,EACtB,EAAK,YAAY;IAAE;IAAO;IAAM,CAAC;;EAGnC,SAAS,GAAgB,GAAkB,GAAqB;AACzD,KAAQ,aACb,EAAK,aAAa;IAAE;IAAO;IAAM,CAAC;;EAGpC,SAAS,GAAc,GAAkB,GAAqB;AACvD,KAAQ,cACb,EAAY,QAAQ,MACpB,EAAK,WAAW;IAAE;IAAO;IAAM,CAAC;;EAGlC,SAAS,GAAW,GAAkB,GAAqB;AACzD,OAAI,CAAC,EAAQ,UAAW;AACxB,KAAM,gBAAgB;GACtB,IAAM,IAAW,EAAU,MAAM,MAAM,MAAM,EAAE,QAAQ,EAAY,MAAM;AACpE,SAEL,EAAK,QAAQ;IACX;IACA;IACA,UAAU,EAAS;IACnB,eAAe,CAAC,EAAS,IAAI;IAC7B,cAAc;IACd,WAAW;IACZ,CAAC,EACF,EAAY,QAAQ;;EAKtB,IAAM,IAAU,EAAwB,KAAK,EAEvC,IAAiB,EAAyB,EAAa,MAAM,IAAI,OAAO,KAAK;EAEnF,SAAS,GAAkB,GAAsB;GAC/C,IAAM,IAAU,EAAa;AAC7B,OAAI,CAAC,EAAQ,OAAQ;GAErB,IAAM,IAAa,EAAQ,WAAW,MAAM,EAAE,QAAQ,EAAe,MAAM,EACrE,IAAU,EAAQ;AAExB,WAAQ,EAAM,KAAd;IACE,KAAK,aAAa;AAChB,OAAM,gBAAgB;KACtB,IAAM,IAAO,EAAQ,IAAa;AAClC,KAAI,MACF,EAAe,QAAQ,EAAK,KAC5B,QAAe,EAAU,EAAK,IAAI,CAAC;AAErC;;IAEF,KAAK,WAAW;AACd,OAAM,gBAAgB;KACtB,IAAM,IAAO,EAAQ,IAAa;AAClC,KAAI,MACF,EAAe,QAAQ,EAAK,KAC5B,QAAe,EAAU,EAAK,IAAI,CAAC;AAErC;;IAEF,KAAK;AAEH,SADA,EAAM,gBAAgB,EAClB,CAAC,EAAS;AACd,SAAI,EAAY,EAAQ,KAAK,IAAI,CAAC,EAAW,EAAQ,IAAI,CACvD,GAAa,EAAQ,MAAM,EAAM;cACxB,EAAW,EAAQ,IAAI,EAAE;MAClC,IAAM,IAAa,EAAQ,IAAa;AACxC,MAAI,GAAY,QAAQ,EAAQ,UAC9B,EAAe,QAAQ,EAAW,KAClC,QAAe,EAAU,EAAW,IAAI,CAAC;;AAG7C;IAEF,KAAK;AAEH,SADA,EAAM,gBAAgB,EAClB,CAAC,EAAS;AACd,SAAI,EAAW,EAAQ,IAAI,CACzB,GAAa,EAAQ,MAAM,EAAM;cACxB,EAAQ,QAAQ;WAEpB,IAAI,IAAI,IAAa,GAAG,KAAK,GAAG,IACnC,KAAI,EAAQ,GAAG,QAAQ,EAAQ,OAAO;AAEpC,OADA,EAAe,QAAQ,EAAQ,GAAG,KAClC,QAAe,EAAU,EAAQ,GAAG,IAAI,CAAC;AACzC;;;AAIN;IAEF,KAAK;IACL,KAAK;AAEH,SADA,EAAM,gBAAgB,EAClB,CAAC,EAAS;AACd,KAAI,EAAQ,YACV,EAAY,EAAQ,MAAM,EAAM,GACvB,EAAQ,cACjB,EAAa,EAAQ,MAAM,EAAM;AAEnC;IAEF,KAAK;AAEH,KADA,EAAM,gBAAgB,EAClB,EAAQ,OACV,EAAe,QAAQ,EAAQ,GAAG,KAClC,QAAe,EAAU,EAAQ,GAAG,IAAI,CAAC;AAE3C;IAEF,KAAK,OAAO;AACV,OAAM,gBAAgB;KACtB,IAAM,IAAO,EAAQ,EAAQ,SAAS;AACtC,KAAI,MACF,EAAe,QAAQ,EAAK,KAC5B,QAAe,EAAU,EAAK,IAAI,CAAC;AAErC;;;;EAKN,SAAS,EAAU,GAAmB;AAIpC,IAHW,EAAQ,OAAO,cACxB,mBAAmB,OAAO,EAAI,CAAC,QAAQ,UAAU,OAAO,CAAC,IAC1D,GACG,OAAO;;EAKb,SAAS,GAAgB,GAAqB,GAAmB;AAI/D,GAHI,EAAQ,aAAa,EAAQ,iBAAiB,WAAW,EAAY,EAAK,IAC5E,EAAa,GAAM,EAAM,EAE3B,EAAa,GAAM,EAAM;;EAG3B,SAAS,GAAmB,GAAqB,GAAmB;AAIlE,GAHI,EAAQ,aAAa,EAAQ,iBAAiB,iBAAiB,EAAY,EAAK,IAClF,EAAa,GAAM,EAAM,EAE3B,EAAK,YAAY,GAAO,EAAK;;EAK/B,SAAS,GAAS,GAA4B;AAC5C,WAAe;AAKb,KAJW,EAAQ,OAAO,cACxB,mBAAmB,OAAO,EAAK,IAAI,CAAC,QAAQ,UAAU,OAAO,CAAC,IAC/D,GAEG,iBAAiB,EAAE,OADN;KAAE,KAAK;KAAS,QAAQ;KAAO,MAAM;KAAW,CAC1B,EAAK,SAAS,SAAS,CAAC;KAC/D;;AAGJ,IAAS,EAAE,cAAU,CAAC;EAItB,SAAS,GAAiB,GAAmB,GAAqB;AAEhE,GADA,EAAM,gBAAgB,EACtB,EAAK,cAAc;IAAE;IAAO;IAAM,CAAC;;AAGrC,UAAQ,GAAU,OACR,GAAY,EAAE,EAAoB,OAAO;GAC/C,SAAS;GACT,KAAK;GACL,OAAO,EAAgB,CAAC,UAAU;IAChC,qBAAqB,EAAQ;IAC7B,qBAAqB,EAAQ;IAC7B,sBAAsB,EAAQ;IAC9B,qBAAqB,EAAQ;IAC7B,oBAAoB,EAAQ;IAC7B,CAAC,CAAC;GACH,MAAM;GACN,wBAAwB,EAAQ,YAAY,KAAA;GAC5C,OAAO,EAAgB,EAAQ,SAAS;IAAE,QAAQ,GAAG,EAAQ,OAAO;IAAK,WAAW;IAAQ,GAAG,KAAA,EAAU;GACzG,WAAW;GACZ,EAAE,EACA,EAAW,GAAK,EAAE,EAAoB,GAAW,MAAM,GAAY,EAAa,QAAQ,OAC/E,GAAY,EAAE,EAAoB,OAAO;GAC/C,KAAK,EAAS;GACd,iBAAiB,OAAO,EAAS,IAAI;GACrC,OAAO,EAAgB,CAAC,gBAAgB;IACtC,0BAA0B,EAAW,EAAS,IAAI;IAClD,yBAAyB,EAAU,EAAS,IAAI;IAChD,8BAA8B,EAAc,EAAS,IAAI;IACzD,0BAA0B,EAAW,EAAS,IAAI;IAClD,0BAA0B,EAAS,KAAK,YAAY,EAAQ;IAC5D,sBAAsB,CAAC,EAAY,EAAS,KAAK;IACjD,yBAAyB,EAAU,EAAS,IAAI;IAChD,0BAA0B,EAAQ,aAAa,EAAY,UAAU,EAAS;IAC9E,0BAA0B,EAAW,EAAS,KAAK;IACnD,uBAAuB,EAAQ;IAChC,CAAC,CAAC;GACH,MAAM;GACN,iBAAiB,EAAY,EAAS,KAAK,GAAG,EAAW,EAAS,IAAI,GAAG,KAAA;GACzE,iBAAiB,EAAQ,aAAa,EAAW,EAAS,IAAI,GAAG,KAAA;GACjE,gBAAgB,EAAQ,YAAY,EAAU,EAAS,IAAI,GAAG,KAAA;GAC9D,iBAAiB,EAAS,KAAK,YAAY,EAAQ,YAAY,KAAA;GAC/D,cAAc,EAAS,QAAQ;GAC/B,UAAU,EAAS,QAAQ,EAAe,QAAQ,IAAI;GACtD,OAAO,EAAgB,EAAE,wBAAwB,GAAG,EAAS,QAAQ,GAAG,KAAK,CAAC;GAC9E,WAAW,EAAQ,YAAY,SAAS,KAAA;GACxC,SAAS,GAAgB,MAAiB,GAAgB,EAAS,MAAM,EAAO,EAAG,CAAC,OAAO,CAAC;GAC5F,YAAY,GAAgB,MAAiB,GAAmB,EAAS,MAAM,EAAO,EAAG,CAAC,OAAO,CAAC;GAClG,eAAe,GAAgB,MAAiB,GAAiB,GAAQ,EAAS,KAAK,EAAG,CAAC,OAAO,CAAC;GACnG,cAAc,MAAiB,GAAgB,GAAQ,EAAS,KAAK;GACrE,cAAc,MAAiB,GAAgB,GAAQ,EAAS,KAAK;GACrE,aAAa,MAAiB,GAAe,GAAQ,EAAS,KAAK;GACnE,cAAc,MAAiB,GAAgB,GAAQ,EAAS,KAAK;GACrE,YAAY,MAAiB,GAAc,GAAQ,EAAS,KAAK;GACjE,SAAS,MAAiB,GAAW,GAAQ,EAAS,KAAK;GAC5D,EAAE;GACA,EAAQ,aACJ,GAAY,EAAE,EAAoB,QAAQ,IAAY,CAAC,GAAI,AAAc,EAAO,OAAK,CACpF,EAAmB,ifAAif,EAAE,CACvgB,CAAG,CAAC,IACL,EAAoB,IAAI,GAAK;GACjC,AAAc,EAAO,OAAK,EAAoB,QAAQ;IACpD,OAAO;IACP,eAAe;IAChB,EAAE,MAAM,GAAG;GACX,EAAY,EAAS,KAAK,IACtB,GAAY,EAAE,EAAoB,QAAQ;IACzC,KAAK;IACL,OAAO,EAAgB,CAAC,oBAAoB;KAC9C,8BAA8B,EAAW,EAAS,IAAI;KACtD,6BAA6B,EAAU,EAAS,IAAI;KACrD,CAAC,CAAC;IACC,eAAe;IACf,SAAS,GAAgB,MAAiB,EAAa,EAAS,MAAM,EAAO,EAAG,CAAC,OAAO,CAAC;IAC1F,EAAE,CACC,EAAU,EAAS,IAAI,GAsBrB,EAAoB,IAAI,GAAK,GArB7B,EAAY,EAAK,QAAQ,gBAAgB;IACvC,KAAK;IACL,MAAM,EAAS;IACf,UAAU,EAAW,EAAS,IAAI;IACnC,QAAQ,CACP,AAAc,EAAO,OAAK,EAAoB,OAAO;IACnD,OAAO;IACP,SAAS;IACT,MAAM;IACN,OAAO;IACP,eAAe;IAChB,EAAE,CACD,EAAoB,QAAQ;IAC1B,GAAG;IACH,QAAQ;IACR,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACpB,CAAC,CACH,EAAE,GAAG,CACP,EAAE,GAAK,EAEX,EAAU,EAAS,IAAI,IACnB,GAAY,EAAE,EAAoB,OAAO,IAAY,CAAC,GAAI,AAAc,EAAO,OAAK,CACnF,EAAoB,UAAU;IAC5B,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,QAAQ;IACR,gBAAgB;IAChB,oBAAoB;IACpB,qBAAqB;IACrB,kBAAkB;IACnB,EAAE,MAAM,GAAG,CACb,CAAG,CAAC,IACL,EAAoB,IAAI,GAAK,CAClC,EAAE,IAAI,GAAW,IACjB,EAAQ,YACN,GAAY,EAAE,EAAoB,QAAQ,GAAW,IACtD,EAAoB,IAAI,GAAK;GAClC,EAAQ,aAAa,EAAS,KAAK,cAAc,MAC7C,GAAY,EAAE,EAAoB,QAAQ;IACzC,KAAK;IACL,OAAO,EAAgB,CAAC,oBAAoB;KAC9C,6BAA6B,EAAU,EAAS,IAAI;KACpD,mCAAmC,EAAc,EAAS,IAAI;KAC9D,8BACE,EAAS,KAAK,mBAAmB,EAAS,KAAK,YAAY,EAAQ;KACtE,CAAC,CAAC;IACC,MAAM;IACN,cAAc,EAAU,EAAS,KAAK;IACtC,gBAAgB,EAAc,EAAS,IAAI,GAAG,UAAU,EAAU,EAAS,IAAI;IAC/E,iBACF,EAAS,KAAK,mBAAmB,EAAS,KAAK,YAAY,EAAQ,YAAY,KAAA;IAE7E,UAAU;IACV,SAAS,GAAgB,MAAiB,EAAY,EAAS,MAAM,EAAO,EAAG,CAAC,OAAO,CAAC;IACxF,WAAW,CACT,GAAU,GAAgB,MAAiB,EAAY,EAAS,MAAM,EAAO,EAAG,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,EACxG,GAAU,GAAgB,MAAiB,EAAY,EAAS,MAAM,EAAO,EAAG,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,CACzG;IACF,EAAE,CAAC,GAAI,AAAc,EAAO,OAAK,CAChC,EAAoB,QAAQ;IAC1B,OAAO;IACP,eAAe;IAChB,EAAE,MAAM,GAAG,CACb,CAAG,EAAE,IAAI,GAAW,IACrB,EAAoB,IAAI,GAAK;GAChC,EAAQ,YAAY,EAAS,KAAK,QAAQ,EAAK,OAAO,QAClD,GAAY,EAAE,EAAoB,QAAQ,IAAY,CACrD,EAAY,EAAK,QAAQ,QAAQ,EAC/B,MAAM,EAAS,MAChB,QAAQ,CACN,EAAS,KAAK,QACV,GAAY,EAAE,EAAoB,QAAQ,IAAY,EAAiB,EAAS,KAAK,KAAK,EAAE,EAAE,IAC/F,EAAoB,IAAI,GAAK,CAClC,EAAE,GAAK,CACT,CAAC,IACF,EAAoB,IAAI,GAAK;GACjC,EAAoB,QAAQ,EAC1B,OAAO,EAAgB,CAAC,iBAAiB,EAAE,2BAA2B,EAAW,EAAS,KAAK,EAAE,CAAC,CAAC,EACpG,EAAE,CACD,EAAY,EAAK,QAAQ,SAAS,EAChC,MAAM,EAAS,MAChB,QAAQ,CACP,EAAiB,EAAiB,EAAU,EAAS,KAAK,CAAC,EAAE,EAAE,CAChE,EAAE,GAAK,CACT,EAAE,EAAE;GACN,EAAE,IAAI,GAAW,EAClB,EAAE,IAAI,EACT,EAAE,IAAI,GAAW;;CAInB,CAAA"}
|