bitboss-ui 2.0.7 → 2.0.9
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/dist/index.js +139 -138
- package/dist/index.js.map +1 -1
- package/dist/index10.js +7 -78
- package/dist/index10.js.map +1 -1
- package/dist/{index100.js → index101.js} +3 -3
- package/dist/{index100.js.map → index101.js.map} +1 -1
- package/dist/{index102.js → index103.js} +3 -3
- package/dist/{index102.js.map → index103.js.map} +1 -1
- package/dist/{index104.js → index105.js} +8 -8
- package/dist/{index104.js.map → index105.js.map} +1 -1
- package/dist/{index106.js → index107.js} +9 -9
- package/dist/{index106.js.map → index107.js.map} +1 -1
- package/dist/{index108.js → index109.js} +3 -3
- package/dist/{index108.js.map → index109.js.map} +1 -1
- package/dist/index11.js +74 -35
- package/dist/index11.js.map +1 -1
- package/dist/{index110.js → index111.js} +3 -3
- package/dist/{index110.js.map → index111.js.map} +1 -1
- package/dist/{index112.js → index113.js} +3 -3
- package/dist/{index112.js.map → index113.js.map} +1 -1
- package/dist/{index114.js → index115.js} +3 -3
- package/dist/{index114.js.map → index115.js.map} +1 -1
- package/dist/{index116.js → index117.js} +8 -8
- package/dist/{index116.js.map → index117.js.map} +1 -1
- package/dist/{index118.js → index119.js} +2 -2
- package/dist/{index118.js.map → index119.js.map} +1 -1
- package/dist/index12.js +36 -189
- package/dist/index12.js.map +1 -1
- package/dist/index121.js +34 -38
- package/dist/index121.js.map +1 -1
- package/dist/index122.js +38 -38
- package/dist/index122.js.map +1 -1
- package/dist/index123.js +39 -42
- package/dist/index123.js.map +1 -1
- package/dist/index124.js +43 -31
- package/dist/index124.js.map +1 -1
- package/dist/index125.js +35 -2
- package/dist/index125.js.map +1 -1
- package/dist/index126.js +2 -21
- package/dist/index126.js.map +1 -1
- package/dist/index127.js +21 -2
- package/dist/index127.js.map +1 -1
- package/dist/index128.js +2 -312
- package/dist/index128.js.map +1 -1
- package/dist/index129.js +309 -21
- package/dist/index129.js.map +1 -1
- package/dist/index13.js +189 -78
- package/dist/index13.js.map +1 -1
- package/dist/index130.js +24 -2
- package/dist/index130.js.map +1 -1
- package/dist/index131.js +2 -5
- package/dist/index131.js.map +1 -1
- package/dist/index132.js +5 -9
- package/dist/index132.js.map +1 -1
- package/dist/index133.js +8 -5
- package/dist/index133.js.map +1 -1
- package/dist/index134.js +6 -3
- package/dist/index134.js.map +1 -1
- package/dist/index135.js +1 -1
- package/dist/index136.js +1 -1
- package/dist/index137.js +1 -1
- package/dist/index138.js +1 -1
- package/dist/index139.js +1 -1
- package/dist/index14.js +85 -0
- package/dist/index14.js.map +1 -0
- package/dist/index140.js +1 -1
- package/dist/index141.js +1 -1
- package/dist/index142.js +1 -1
- package/dist/index143.js +1 -1
- package/dist/index144.js +1 -1
- package/dist/index145.js +1 -1
- package/dist/index146.js +1 -1
- package/dist/index147.js +1 -1
- package/dist/index148.js +1 -1
- package/dist/index149.js +1 -1
- package/dist/index150.js +1 -1
- package/dist/index151.js +1 -1
- package/dist/index152.js +1 -1
- package/dist/index153.js +1 -1
- package/dist/index154.js +1 -1
- package/dist/index155.js +1 -1
- package/dist/index156.js +1 -1
- package/dist/index157.js +1 -1
- package/dist/index158.js +1 -1
- package/dist/index159.js +1 -1
- package/dist/{index15.js → index16.js} +4 -4
- package/dist/{index15.js.map → index16.js.map} +1 -1
- package/dist/index160.js +2 -2
- package/dist/{index162.js → index161.js} +1 -1
- package/dist/index161.js.map +1 -0
- package/dist/index163.js +6 -0
- package/dist/index163.js.map +1 -0
- package/dist/index165.js +1 -1
- package/dist/index166.js +1 -1
- package/dist/index167.js +1 -1
- package/dist/index168.js +1 -1
- package/dist/index169.js +1 -1
- package/dist/index170.js +2 -2
- package/dist/index171.js +6 -0
- package/dist/index171.js.map +1 -0
- package/dist/index173.js +2 -3
- package/dist/index173.js.map +1 -1
- package/dist/index174.js +1 -1
- package/dist/index175.js +1 -1
- package/dist/index176.js +1 -1
- package/dist/index177.js +1 -1
- package/dist/index178.js +1 -1
- package/dist/index179.js +1 -1
- package/dist/{index17.js → index18.js} +4 -4
- package/dist/{index17.js.map → index18.js.map} +1 -1
- package/dist/index180.js +1 -1
- package/dist/index181.js +1 -1
- package/dist/index182.js +1 -1
- package/dist/index183.js +1 -1
- package/dist/index184.js +1 -1
- package/dist/{index186.js → index185.js} +1 -1
- package/dist/index185.js.map +1 -0
- package/dist/index187.js +6 -0
- package/dist/index187.js.map +1 -0
- package/dist/index189.js +1 -1
- package/dist/index190.js +1 -1
- package/dist/index191.js +1 -1
- package/dist/index192.js +1 -1
- package/dist/index193.js +1 -1
- package/dist/index194.js +1 -1
- package/dist/index195.js +1 -1
- package/dist/index196.js +1 -1
- package/dist/index197.js +1 -1
- package/dist/index198.js +3 -81
- package/dist/index198.js.map +1 -1
- package/dist/{index19.js → index20.js} +19 -18
- package/dist/{index19.js.map → index20.js.map} +1 -1
- package/dist/index200.js +126 -2
- package/dist/index200.js.map +1 -1
- package/dist/index201.js +5 -4
- package/dist/index201.js.map +1 -1
- package/dist/index202.js +123 -2
- package/dist/index202.js.map +1 -1
- package/dist/index203.js +19 -8
- package/dist/index203.js.map +1 -1
- package/dist/index204.js +14 -124
- package/dist/index204.js.map +1 -1
- package/dist/index205.js +16 -5
- package/dist/index205.js.map +1 -1
- package/dist/index206.js +2 -123
- package/dist/index206.js.map +1 -1
- package/dist/index207.js +2 -19
- package/dist/index207.js.map +1 -1
- package/dist/index208.js +35 -16
- package/dist/index208.js.map +1 -1
- package/dist/index209.js +172 -14
- package/dist/index209.js.map +1 -1
- package/dist/index210.js +6 -2
- package/dist/index210.js.map +1 -1
- package/dist/index211.js +44 -2
- package/dist/index211.js.map +1 -1
- package/dist/index213.js +12 -173
- package/dist/index213.js.map +1 -1
- package/dist/index214.js +5 -6
- package/dist/index214.js.map +1 -1
- package/dist/index215.js +369 -43
- package/dist/index215.js.map +1 -1
- package/dist/index216.js +161 -0
- package/dist/index216.js.map +1 -0
- package/dist/index217.js +84 -13
- package/dist/index217.js.map +1 -1
- package/dist/index219.js +67 -355
- package/dist/index219.js.map +1 -1
- package/dist/{index21.js → index22.js} +21 -21
- package/dist/{index21.js.map → index22.js.map} +1 -1
- package/dist/index220.js +8 -19
- package/dist/index220.js.map +1 -1
- package/dist/index221.js +3 -27
- package/dist/index221.js.map +1 -1
- package/dist/index222.js +2 -3
- package/dist/index222.js.map +1 -1
- package/dist/index223.js +4 -249
- package/dist/index223.js.map +1 -1
- package/dist/index224.js +2 -52
- package/dist/index224.js.map +1 -1
- package/dist/index225.js +3 -44
- package/dist/index225.js.map +1 -1
- package/dist/index226.js +7 -5
- package/dist/index226.js.map +1 -1
- package/dist/index227.js +19 -49
- package/dist/index227.js.map +1 -1
- package/dist/index228.js +27 -3
- package/dist/index228.js.map +1 -1
- package/dist/index229.js +3 -3
- package/dist/index229.js.map +1 -1
- package/dist/index230.js +249 -7
- package/dist/index230.js.map +1 -1
- package/dist/index231.js +50 -156
- package/dist/index231.js.map +1 -1
- package/dist/index232.js +38 -78
- package/dist/index232.js.map +1 -1
- package/dist/index233.js +8 -0
- package/dist/index233.js.map +1 -0
- package/dist/index234.js +49 -2
- package/dist/index234.js.map +1 -1
- package/dist/index235.js +2 -18
- package/dist/index235.js.map +1 -1
- package/dist/index236.js +2 -106
- package/dist/index236.js.map +1 -1
- package/dist/index237.js +21 -0
- package/dist/index237.js.map +1 -0
- package/dist/index238.js +53 -47
- package/dist/index238.js.map +1 -1
- package/dist/{index23.js → index24.js} +8 -8
- package/dist/{index23.js.map → index24.js.map} +1 -1
- package/dist/index240.js +100 -2
- package/dist/index240.js.map +1 -1
- package/dist/index242.js +9 -2
- package/dist/index242.js.map +1 -1
- package/dist/index243.js +2 -3
- package/dist/index243.js.map +1 -1
- package/dist/index244.js +3 -6
- package/dist/index244.js.map +1 -1
- package/dist/index245.js +12 -16
- package/dist/index245.js.map +1 -1
- package/dist/index246.js +8 -8
- package/dist/index246.js.map +1 -1
- package/dist/index247.js +9 -23
- package/dist/index247.js.map +1 -1
- package/dist/index248.js +17 -9
- package/dist/index248.js.map +1 -1
- package/dist/index257.js +1 -1
- package/dist/index258.js +1 -1
- package/dist/{index25.js → index26.js} +6 -6
- package/dist/{index25.js.map → index26.js.map} +1 -1
- package/dist/index263.js +224 -2
- package/dist/index263.js.map +1 -1
- package/dist/index264.js +4 -2
- package/dist/index264.js.map +1 -1
- package/dist/index265.js +9 -2
- package/dist/index265.js.map +1 -1
- package/dist/index266.js +5 -1
- package/dist/index266.js.map +1 -1
- package/dist/index267.js +16 -2
- package/dist/index267.js.map +1 -1
- package/dist/index268.js +9 -2
- package/dist/index268.js.map +1 -1
- package/dist/index269.js +23 -28
- package/dist/index269.js.map +1 -1
- package/dist/index270.js +199 -21
- package/dist/index270.js.map +1 -1
- package/dist/index271.js +439 -0
- package/dist/index271.js.map +1 -0
- package/dist/index272.js +121 -218
- package/dist/index272.js.map +1 -1
- package/dist/index274.js +5 -200
- package/dist/index274.js.map +1 -1
- package/dist/index275.js +2 -436
- package/dist/index275.js.map +1 -1
- package/dist/index276.js +2 -127
- package/dist/index276.js.map +1 -1
- package/dist/index277.js +2 -5
- package/dist/index277.js.map +1 -1
- package/dist/index278.js +2 -2
- package/dist/index278.js.map +1 -1
- package/dist/index279.js +2 -9
- package/dist/index279.js.map +1 -1
- package/dist/{index27.js → index28.js} +3 -3
- package/dist/{index27.js.map → index28.js.map} +1 -1
- package/dist/index280.js +2 -69
- package/dist/index280.js.map +1 -1
- package/dist/index281.js +28 -3
- package/dist/index281.js.map +1 -1
- package/dist/index282.js +22 -12
- package/dist/index282.js.map +1 -1
- package/dist/index284.js +2 -17
- package/dist/index284.js.map +1 -1
- package/dist/index285.js +68 -2
- package/dist/index285.js.map +1 -1
- package/dist/index287.js +3 -211
- package/dist/index287.js.map +1 -1
- package/dist/index288.js +211 -15
- package/dist/index288.js.map +1 -1
- package/dist/index289.js +15 -4
- package/dist/index289.js.map +1 -1
- package/dist/index290.js +11 -4
- package/dist/index290.js.map +1 -1
- package/dist/index291.js +34 -58
- package/dist/index291.js.map +1 -1
- package/dist/index292.js +4 -35
- package/dist/index292.js.map +1 -1
- package/dist/index293.js +4 -7
- package/dist/index293.js.map +1 -1
- package/dist/index294.js +57 -17
- package/dist/index294.js.map +1 -1
- package/dist/index295.js +2 -7
- package/dist/index295.js.map +1 -1
- package/dist/index296.js +7 -2
- package/dist/index296.js.map +1 -1
- package/dist/index297.js +6 -10
- package/dist/index297.js.map +1 -1
- package/dist/index298.js +17 -45
- package/dist/index298.js.map +1 -1
- package/dist/index299.js +50 -0
- package/dist/index299.js.map +1 -0
- package/dist/{index29.js → index30.js} +3 -3
- package/dist/{index29.js.map → index30.js.map} +1 -1
- package/dist/index301.js +416 -42
- package/dist/index301.js.map +1 -1
- package/dist/index302.js +50 -0
- package/dist/index302.js.map +1 -0
- package/dist/{index31.js → index32.js} +4 -4
- package/dist/{index31.js.map → index32.js.map} +1 -1
- package/dist/{index33.js → index34.js} +5 -5
- package/dist/{index33.js.map → index34.js.map} +1 -1
- package/dist/{index35.js → index36.js} +23 -22
- package/dist/{index35.js.map → index36.js.map} +1 -1
- package/dist/{index37.js → index38.js} +7 -7
- package/dist/{index37.js.map → index38.js.map} +1 -1
- package/dist/{index39.js → index40.js} +3 -3
- package/dist/{index39.js.map → index40.js.map} +1 -1
- package/dist/{index41.js → index42.js} +4 -4
- package/dist/{index41.js.map → index42.js.map} +1 -1
- package/dist/{index43.js → index44.js} +12 -11
- package/dist/{index43.js.map → index44.js.map} +1 -1
- package/dist/{index45.js → index46.js} +4 -4
- package/dist/{index45.js.map → index46.js.map} +1 -1
- package/dist/{index47.js → index48.js} +3 -3
- package/dist/{index47.js.map → index48.js.map} +1 -1
- package/dist/index5.js +14 -40
- package/dist/index5.js.map +1 -1
- package/dist/{index49.js → index50.js} +4 -4
- package/dist/{index49.js.map → index50.js.map} +1 -1
- package/dist/{index51.js → index52.js} +3 -3
- package/dist/{index51.js.map → index52.js.map} +1 -1
- package/dist/{index53.js → index54.js} +3 -3
- package/dist/{index53.js.map → index54.js.map} +1 -1
- package/dist/{index55.js → index56.js} +3 -3
- package/dist/{index55.js.map → index56.js.map} +1 -1
- package/dist/{index57.js → index58.js} +2 -2
- package/dist/{index57.js.map → index58.js.map} +1 -1
- package/dist/index6.js +38 -76
- package/dist/index6.js.map +1 -1
- package/dist/{index59.js → index60.js} +14 -13
- package/dist/{index59.js.map → index60.js.map} +1 -1
- package/dist/{index61.js → index62.js} +3 -3
- package/dist/{index61.js.map → index62.js.map} +1 -1
- package/dist/{index63.js → index64.js} +3 -3
- package/dist/{index63.js.map → index64.js.map} +1 -1
- package/dist/{index65.js → index66.js} +5 -5
- package/dist/{index65.js.map → index66.js.map} +1 -1
- package/dist/{index67.js → index68.js} +3 -3
- package/dist/{index67.js.map → index68.js.map} +1 -1
- package/dist/index7.js +78 -62
- package/dist/index7.js.map +1 -1
- package/dist/{index69.js → index70.js} +2 -2
- package/dist/{index69.js.map → index70.js.map} +1 -1
- package/dist/{index71.js → index72.js} +9 -9
- package/dist/{index71.js.map → index72.js.map} +1 -1
- package/dist/{index73.js → index74.js} +3 -3
- package/dist/{index73.js.map → index74.js.map} +1 -1
- package/dist/{index75.js → index76.js} +5 -5
- package/dist/{index75.js.map → index76.js.map} +1 -1
- package/dist/index78.js +37 -120
- package/dist/index78.js.map +1 -1
- package/dist/index79.js +130 -0
- package/dist/index79.js.map +1 -0
- package/dist/index8.js +60 -18
- package/dist/index8.js.map +1 -1
- package/dist/{index80.js → index81.js} +5 -5
- package/dist/{index80.js.map → index81.js.map} +1 -1
- package/dist/{index82.js → index83.js} +25 -24
- package/dist/{index82.js.map → index83.js.map} +1 -1
- package/dist/{index84.js → index85.js} +7 -7
- package/dist/{index84.js.map → index85.js.map} +1 -1
- package/dist/{index86.js → index87.js} +2 -2
- package/dist/{index86.js.map → index87.js.map} +1 -1
- package/dist/{index88.js → index89.js} +3 -3
- package/dist/{index88.js.map → index89.js.map} +1 -1
- package/dist/index9.js +19 -7
- package/dist/index9.js.map +1 -1
- package/dist/{index90.js → index91.js} +3 -3
- package/dist/{index90.js.map → index91.js.map} +1 -1
- package/dist/{index92.js → index93.js} +3 -3
- package/dist/{index92.js.map → index93.js.map} +1 -1
- package/dist/{index94.js → index95.js} +1 -1
- package/dist/index95.js.map +1 -0
- package/dist/{index96.js → index97.js} +3 -3
- package/dist/{index96.js.map → index97.js.map} +1 -1
- package/dist/{index98.js → index99.js} +3 -3
- package/dist/{index98.js.map → index99.js.map} +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/index120.js +0 -43
- package/dist/index120.js.map +0 -1
- package/dist/index162.js.map +0 -1
- package/dist/index164.js +0 -6
- package/dist/index164.js.map +0 -1
- package/dist/index172.js +0 -5
- package/dist/index172.js.map +0 -1
- package/dist/index186.js.map +0 -1
- package/dist/index188.js +0 -6
- package/dist/index188.js.map +0 -1
- package/dist/index212.js +0 -38
- package/dist/index212.js.map +0 -1
- package/dist/index218.js +0 -8
- package/dist/index218.js.map +0 -1
- package/dist/index241.js +0 -13
- package/dist/index241.js.map +0 -1
- package/dist/index283.js +0 -12
- package/dist/index283.js.map +0 -1
- package/dist/index300.js +0 -424
- package/dist/index300.js.map +0 -1
- package/dist/index4.js +0 -17
- package/dist/index4.js.map +0 -1
- package/dist/index77.js +0 -47
- package/dist/index77.js.map +0 -1
- package/dist/index94.js.map +0 -1
package/dist/index287.js
CHANGED
|
@@ -1,214 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import { useVirtualizer as Z } from "./index298.js";
|
|
4
|
-
import { isNotNil as ee } from "./index130.js";
|
|
5
|
-
import { hash as H } from "./index222.js";
|
|
6
|
-
const te = { class: "bb-listbox__outer-container scrollbar-border" }, oe = {
|
|
7
|
-
key: 0,
|
|
8
|
-
class: "bb-listbox__loading"
|
|
9
|
-
}, ne = {
|
|
10
|
-
key: 1,
|
|
11
|
-
class: "bb-listbox__no-data"
|
|
12
|
-
}, le = ["aria-selected", "data-index"], ie = { class: "autocomplete-option__content" }, se = { class: "autocomplete-option__label" }, pe = /* @__PURE__ */ K({
|
|
13
|
-
__name: "ListBox",
|
|
14
|
-
props: {
|
|
15
|
-
options: {},
|
|
16
|
-
open: { type: Boolean },
|
|
17
|
-
loading: { type: Boolean },
|
|
18
|
-
transitionDuration: { default: 250 },
|
|
19
|
-
loadingText: { default: "Caricamento..." },
|
|
20
|
-
noDataText: { default: "Nessun elemento da visualizzare" }
|
|
21
|
-
},
|
|
22
|
-
emits: ["option:selected", "option:unselected"],
|
|
23
|
-
setup(T, { expose: V, emit: B }) {
|
|
24
|
-
const o = T, _ = B, s = b(null), C = (e) => "option_" + JSON.stringify(e).replace(/\W/g, "_"), i = m(
|
|
25
|
-
() => o.options.map((e) => ({ ...e, id: C(e.value) }))
|
|
26
|
-
), p = Z({
|
|
27
|
-
get count() {
|
|
28
|
-
return o.options.length;
|
|
29
|
-
},
|
|
30
|
-
getScrollElement: () => s.value,
|
|
31
|
-
estimateSize: () => 42,
|
|
32
|
-
overscan: 5
|
|
33
|
-
}), L = (e) => {
|
|
34
|
-
e && p.value.measureElement(e);
|
|
35
|
-
}, O = m(() => p.value.getVirtualItems()), F = m(() => p.value.getTotalSize()), n = b(null), a = m(
|
|
36
|
-
() => o.open && o.options.some((e) => !e.disabled)
|
|
37
|
-
), y = (e = 1) => {
|
|
38
|
-
const l = f(n.value) ? -1 : n.value;
|
|
39
|
-
let t = (l + e) % o.options.length;
|
|
40
|
-
for (; o.options[t].disabled && t !== l; )
|
|
41
|
-
t = y(e + 1);
|
|
42
|
-
return t;
|
|
43
|
-
}, M = () => {
|
|
44
|
-
if (!a.value) return;
|
|
45
|
-
const e = y();
|
|
46
|
-
n.value = e, u();
|
|
47
|
-
}, I = (e = 1) => {
|
|
48
|
-
const l = f(n.value) ? 0 : n.value;
|
|
49
|
-
let t = (l - e + o.options.length) % o.options.length;
|
|
50
|
-
for (; o.options[t].disabled && t !== l; )
|
|
51
|
-
t = I(e + 1);
|
|
52
|
-
return t;
|
|
53
|
-
}, A = async () => {
|
|
54
|
-
if (!a.value) return;
|
|
55
|
-
const e = I();
|
|
56
|
-
n.value = e, u();
|
|
57
|
-
}, P = () => {
|
|
58
|
-
if (!a.value) return;
|
|
59
|
-
let e = 0;
|
|
60
|
-
for (; o.options[e].disabled; )
|
|
61
|
-
e++;
|
|
62
|
-
n.value = e, u();
|
|
63
|
-
}, R = () => {
|
|
64
|
-
if (!a.value) return;
|
|
65
|
-
let e = o.options.length - 1;
|
|
66
|
-
for (; o.options[e].disabled && e !== 0; )
|
|
67
|
-
e--;
|
|
68
|
-
n.value = e, u();
|
|
69
|
-
}, q = () => {
|
|
70
|
-
if (!a.value) return;
|
|
71
|
-
let e = 0;
|
|
72
|
-
for (; o.options[e] && !o.options[e].selected && o.options.length !== e; )
|
|
73
|
-
e++;
|
|
74
|
-
n.value = e % o.options.length, u();
|
|
75
|
-
}, J = () => {
|
|
76
|
-
if (!a.value) return;
|
|
77
|
-
let e = o.options.length - 1;
|
|
78
|
-
for (; o.options[e].selected && e > 0; )
|
|
79
|
-
e--;
|
|
80
|
-
n.value = e === -1 ? o.options.length - 1 : e, u();
|
|
81
|
-
}, W = (e) => {
|
|
82
|
-
if (!a.value) return;
|
|
83
|
-
const l = o.options.findIndex(
|
|
84
|
-
(t) => t.valueHash === e
|
|
85
|
-
);
|
|
86
|
-
l >= 0 && (n.value = l), u();
|
|
87
|
-
}, S = () => {
|
|
88
|
-
n.value = null;
|
|
89
|
-
}, u = () => {
|
|
90
|
-
s.value && ee(n.value) && p.value.scrollToIndex(n.value, {
|
|
91
|
-
align: "center",
|
|
92
|
-
behavior: "smooth"
|
|
93
|
-
});
|
|
94
|
-
}, k = () => {
|
|
95
|
-
if (f(n.value) || !o.open) return;
|
|
96
|
-
const e = o.options[n.value];
|
|
97
|
-
e.selected ? _("option:unselected", e) : _("option:selected", e);
|
|
98
|
-
}, w = b(0), z = () => {
|
|
99
|
-
s.value && (w.value = s.value.scrollHeight);
|
|
100
|
-
}, Y = (e) => !e.disabled, j = (e) => {
|
|
101
|
-
if (e.preventDefault(), s.value && e.target && e.target instanceof HTMLElement) {
|
|
102
|
-
if (!s.value.querySelector('[role="listbox"]'))
|
|
103
|
-
throw new Error("Could not find listbox in DOM tree.");
|
|
104
|
-
let t = e.target, d = t.dataset.index;
|
|
105
|
-
for (; f(d) && t.parentElement; )
|
|
106
|
-
t = t.parentElement, d = t.dataset.index;
|
|
107
|
-
if (d) {
|
|
108
|
-
const E = o.options[+d];
|
|
109
|
-
E && Y(E) && (n.value = +d, k());
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}, G = () => f(n.value) ? void 0 : o.options[n.value];
|
|
113
|
-
return N(
|
|
114
|
-
() => o.open,
|
|
115
|
-
() => {
|
|
116
|
-
z();
|
|
117
|
-
},
|
|
118
|
-
{ flush: "post" }
|
|
119
|
-
), N(
|
|
120
|
-
() => o.options,
|
|
121
|
-
(e, l) => {
|
|
122
|
-
H(e.map((t) => t.valueHash)) !== H(l.map((t) => t.valueHash)) && (p.value.calculateRange(), z(), S());
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
flush: "post"
|
|
126
|
-
}
|
|
127
|
-
), V({
|
|
128
|
-
focusNext: M,
|
|
129
|
-
focusPrevious: A,
|
|
130
|
-
focusFirst: P,
|
|
131
|
-
focusFirstSelected: q,
|
|
132
|
-
focusLast: R,
|
|
133
|
-
focusLastSelected: J,
|
|
134
|
-
blur: S,
|
|
135
|
-
confirmOption: k,
|
|
136
|
-
focusByHash: W,
|
|
137
|
-
getHighlighted: G
|
|
138
|
-
}), (e, l) => (r(), c("div", {
|
|
139
|
-
class: $(["bb-listbox", {
|
|
140
|
-
"bb-listbox--open": e.open,
|
|
141
|
-
"bb-listbox--loading": e.loading,
|
|
142
|
-
"bb-listbox--no-data": !i.value.length
|
|
143
|
-
}]),
|
|
144
|
-
style: h({
|
|
145
|
-
"--transition-duration": `${e.transitionDuration}ms`,
|
|
146
|
-
"--overlay-min-height": `${w.value}px`
|
|
147
|
-
}),
|
|
148
|
-
onClick: Q(j, ["stop"])
|
|
149
|
-
}, [
|
|
150
|
-
x("div", te, [
|
|
151
|
-
x("div", {
|
|
152
|
-
ref_key: "inner",
|
|
153
|
-
ref: s,
|
|
154
|
-
class: "bb-listbox__inner-container"
|
|
155
|
-
}, [
|
|
156
|
-
v(e.$slots, "options:prepend"),
|
|
157
|
-
e.loading && !e.options.length ? (r(), c("div", oe, [
|
|
158
|
-
v(e.$slots, "loading", {}, () => [
|
|
159
|
-
D(g(e.loadingText), 1)
|
|
160
|
-
])
|
|
161
|
-
])) : e.options.length ? (r(), c("div", {
|
|
162
|
-
key: 2,
|
|
163
|
-
role: "listbox",
|
|
164
|
-
style: h({
|
|
165
|
-
height: `${F.value}px`
|
|
166
|
-
}),
|
|
167
|
-
tabindex: "-1"
|
|
168
|
-
}, [
|
|
169
|
-
(r(!0), c(U, null, X(O.value, (t, d) => (r(), c("div", {
|
|
170
|
-
key: i.value[t.index].value,
|
|
171
|
-
ref_for: !0,
|
|
172
|
-
ref: L,
|
|
173
|
-
"aria-selected": n.value === d ? !0 : void 0,
|
|
174
|
-
class: $({
|
|
175
|
-
"bb-listbox__option autocomplete-option": !0,
|
|
176
|
-
"autocomplete-option--focused": n.value === t.index,
|
|
177
|
-
"autocomplete-option--selected": i.value[t.index].selected,
|
|
178
|
-
"autocomplete-option--disabled": i.value[t.index].disabled
|
|
179
|
-
}),
|
|
180
|
-
"data-index": t.index,
|
|
181
|
-
role: "option",
|
|
182
|
-
style: h({
|
|
183
|
-
transform: `translateY(${t.start}px)`
|
|
184
|
-
})
|
|
185
|
-
}, [
|
|
186
|
-
x("span", ie, [
|
|
187
|
-
v(e.$slots, "option", {
|
|
188
|
-
disabled: !!i.value[t.index].disabled,
|
|
189
|
-
focused: n.value === t.index,
|
|
190
|
-
index: t.index,
|
|
191
|
-
item: i.value[t.index].item,
|
|
192
|
-
selected: !!i.value[t.index].selected,
|
|
193
|
-
text: i.value[t.index].text,
|
|
194
|
-
value: i.value[t.index].value
|
|
195
|
-
}, () => [
|
|
196
|
-
x("span", se, g(i.value[t.index].text), 1)
|
|
197
|
-
])
|
|
198
|
-
])
|
|
199
|
-
], 14, le))), 128))
|
|
200
|
-
], 4)) : (r(), c("div", ne, [
|
|
201
|
-
v(e.$slots, "no-data", {}, () => [
|
|
202
|
-
D(g(e.noDataText), 1)
|
|
203
|
-
])
|
|
204
|
-
])),
|
|
205
|
-
v(e.$slots, "options:append")
|
|
206
|
-
], 512)
|
|
207
|
-
])
|
|
208
|
-
], 6));
|
|
209
|
-
}
|
|
210
|
-
});
|
|
1
|
+
import o from "./index240.js";
|
|
2
|
+
/* empty css */
|
|
211
3
|
export {
|
|
212
|
-
|
|
4
|
+
o as default
|
|
213
5
|
};
|
|
214
6
|
//# sourceMappingURL=index287.js.map
|
package/dist/index287.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index287.js","sources":["../src/components/ListBox.vue"],"sourcesContent":["<template>\n\t<div\n\t\tclass=\"bb-listbox\"\n\t\t:class=\"{\n\t\t\t'bb-listbox--open': open,\n\t\t\t'bb-listbox--loading': loading,\n\t\t\t'bb-listbox--no-data': !mappedOptions.length,\n\t\t}\"\n\t\t:style=\"{\n\t\t\t'--transition-duration': `${transitionDuration}ms`,\n\t\t\t'--overlay-min-height': `${height}px`,\n\t\t}\"\n\t\t@click.stop=\"handleClick\"\n\t>\n\t\t<div class=\"bb-listbox__outer-container scrollbar-border\">\n\t\t\t<div ref=\"inner\" class=\"bb-listbox__inner-container\">\n\t\t\t\t<slot name=\"options:prepend\"></slot>\n\t\t\t\t<div v-if=\"loading && !options.length\" class=\"bb-listbox__loading\">\n\t\t\t\t\t<slot :name=\"'loading'\">{{ loadingText }}</slot>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"!options.length\" class=\"bb-listbox__no-data\">\n\t\t\t\t\t<slot :name=\"'no-data'\">{{ noDataText }}</slot>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tv-else\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\t:style=\"{\n\t\t\t\t\t\theight: `${totalSize}px`,\n\t\t\t\t\t}\"\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-for=\"(row, index) in virtualRows\"\n\t\t\t\t\t\t:key=\"mappedOptions[row.index].value\"\n\t\t\t\t\t\t:ref=\"measureElement\"\n\t\t\t\t\t\t:aria-selected=\"focusedIndex === index ? true : undefined\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t'bb-listbox__option autocomplete-option': true,\n\t\t\t\t\t\t\t'autocomplete-option--focused': focusedIndex === row.index,\n\t\t\t\t\t\t\t'autocomplete-option--selected':\n\t\t\t\t\t\t\t\tmappedOptions[row.index].selected,\n\t\t\t\t\t\t\t'autocomplete-option--disabled':\n\t\t\t\t\t\t\t\tmappedOptions[row.index].disabled,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:data-index=\"row.index\"\n\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t:style=\"{\n\t\t\t\t\t\t\ttransform: `translateY(${row.start}px)`,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"autocomplete-option__content\">\n\t\t\t\t\t\t\t<slot\n\t\t\t\t\t\t\t\t:disabled=\"!!mappedOptions[row.index].disabled\"\n\t\t\t\t\t\t\t\t:focused=\"focusedIndex === row.index\"\n\t\t\t\t\t\t\t\t:index=\"row.index\"\n\t\t\t\t\t\t\t\t:item=\"mappedOptions[row.index].item\"\n\t\t\t\t\t\t\t\tname=\"option\"\n\t\t\t\t\t\t\t\t:selected=\"!!mappedOptions[row.index].selected\"\n\t\t\t\t\t\t\t\t:text=\"mappedOptions[row.index].text\"\n\t\t\t\t\t\t\t\t:value=\"mappedOptions[row.index].value\"\n\t\t\t\t\t\t\t\t><span class=\"autocomplete-option__label\">{{\n\t\t\t\t\t\t\t\t\tmappedOptions[row.index].text\n\t\t\t\t\t\t\t\t}}</span></slot\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<slot name=\"options:append\"></slot>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { isNil } from '@/utilities/functions/isNil';\nimport { computed, ref, watch } from 'vue';\nimport { useVirtualizer } from '@tanstack/vue-virtual';\nimport { isNotNil } from '@/utilities/functions/isNotNil';\nimport type { Option } from '@/types/Option';\nimport { hash } from '@/utilities/functions/hash';\n\ntype Props = {\n\toptions: Option[];\n\topen?: boolean;\n\tloading?: boolean;\n\ttransitionDuration?: number;\n\tloadingText?: string;\n\tnoDataText?: string;\n};\n\nconst props = withDefaults(defineProps<Props>(), {\n\ttransitionDuration: 250,\n\tloadingText: 'Caricamento...',\n\tnoDataText: 'Nessun elemento da visualizzare',\n});\n\nconst emit = defineEmits<{\n\t(e: 'option:selected', option: Option): void;\n\t(e: 'option:unselected', option: Option): void;\n}>();\n\nconst inner = ref<HTMLElement | null>(null);\n\nconst makeStringID = (arg: any) =>\n\t'option_' + JSON.stringify(arg).replace(/\\W/g, '_');\n\nconst mappedOptions = computed(() =>\n\tprops.options.map((o) => {\n\t\treturn { ...o, id: makeStringID(o.value) };\n\t})\n);\n\nconst rowVirtualizer = useVirtualizer({\n\tget count() {\n\t\treturn props.options.length;\n\t},\n\tgetScrollElement: () => inner.value,\n\testimateSize: () => 42,\n\toverscan: 5,\n});\n\nconst measureElement = (el: HTMLElement) => {\n\tif (!el) {\n\t\treturn;\n\t}\n\trowVirtualizer.value.measureElement(el);\n\treturn undefined;\n};\n\nconst virtualRows = computed(() => rowVirtualizer.value.getVirtualItems());\nconst totalSize = computed(() => rowVirtualizer.value.getTotalSize());\n\n/**\n * START FOCUS HANDLING\n */\n\nconst focusedIndex = ref<null | number>(null);\n\nconst canFocus = computed(\n\t() => props.open && props.options.some((o) => !o.disabled)\n);\n\nconst findNextAvailableIndex = (offset = 1) => {\n\tconst initialValue = isNil(focusedIndex.value) ? -1 : focusedIndex.value!;\n\tlet newIndex = (initialValue + offset) % props.options.length;\n\twhile (props.options[newIndex].disabled && newIndex !== initialValue) {\n\t\tnewIndex = findNextAvailableIndex(offset + 1);\n\t}\n\treturn newIndex;\n};\n\nconst focusNext = () => {\n\tif (!canFocus.value) return;\n\tconst newIndex = findNextAvailableIndex();\n\tfocusedIndex.value = newIndex;\n\tscrollSelectedIntoView();\n};\nconst findPreviousAvailableIndex = (offset = 1) => {\n\tconst initialValue = isNil(focusedIndex.value) ? 0 : focusedIndex.value!;\n\tlet newIndex =\n\t\t(initialValue - offset + props.options.length) % props.options.length;\n\twhile (props.options[newIndex].disabled && newIndex !== initialValue) {\n\t\tnewIndex = findPreviousAvailableIndex(offset + 1);\n\t}\n\treturn newIndex;\n};\nconst focusPrevious = async () => {\n\tif (!canFocus.value) return;\n\tconst newIndex = findPreviousAvailableIndex();\n\tfocusedIndex.value = newIndex;\n\tscrollSelectedIntoView();\n};\n\nconst focusFirst = () => {\n\tif (!canFocus.value) return;\n\tlet newIndex = 0;\n\twhile (props.options[newIndex].disabled) {\n\t\tnewIndex++;\n\t}\n\tfocusedIndex.value = newIndex;\n\tscrollSelectedIntoView();\n};\n\nconst focusLast = () => {\n\tif (!canFocus.value) return;\n\tlet newIndex = props.options.length - 1;\n\twhile (props.options[newIndex].disabled && newIndex !== 0) {\n\t\tnewIndex--;\n\t}\n\tfocusedIndex.value = newIndex;\n\tscrollSelectedIntoView();\n};\nconst focusFirstSelected = () => {\n\tif (!canFocus.value) return;\n\tlet newIndex = 0;\n\twhile (\n\t\tprops.options[newIndex] &&\n\t\t!props.options[newIndex].selected &&\n\t\tprops.options.length !== newIndex\n\t) {\n\t\tnewIndex++;\n\t}\n\tfocusedIndex.value = newIndex % props.options.length;\n\tscrollSelectedIntoView();\n};\nconst focusLastSelected = () => {\n\tif (!canFocus.value) return;\n\tlet newIndex = props.options.length - 1;\n\twhile (props.options[newIndex].selected && newIndex > 0) {\n\t\tnewIndex--;\n\t}\n\tfocusedIndex.value = newIndex === -1 ? props.options.length - 1 : newIndex;\n\tscrollSelectedIntoView();\n};\n\nconst focusByHash = (hash: Option['valueHash']) => {\n\tif (!canFocus.value) return;\n\tconst linkedOptionIndex = props.options.findIndex(\n\t\t(o) => o.valueHash === hash\n\t);\n\tif (linkedOptionIndex >= 0) {\n\t\tfocusedIndex.value = linkedOptionIndex;\n\t}\n\tscrollSelectedIntoView();\n};\n\nconst blur = () => {\n\tfocusedIndex.value = null;\n};\n\nconst scrollSelectedIntoView = () => {\n\tif (inner.value && isNotNil(focusedIndex.value)) {\n\t\trowVirtualizer.value.scrollToIndex(focusedIndex.value, {\n\t\t\talign: 'center',\n\t\t\tbehavior: 'smooth',\n\t\t});\n\t}\n};\n\n/**\n * END FOCUS HANDLING\n */\n\nconst confirmOption = () => {\n\tif (isNil(focusedIndex.value) || !props.open) return;\n\tconst option = props.options[focusedIndex.value!];\n\tif (option.selected) {\n\t\temit('option:unselected', option);\n\t} else {\n\t\temit('option:selected', option);\n\t}\n};\n\nconst height = ref(0);\nconst getScrollHeight = () => {\n\tif (inner.value) {\n\t\theight.value = inner.value.scrollHeight;\n\t}\n};\n\nconst canBeSelected = (option: Option) => {\n\treturn !option.disabled;\n};\n\nconst handleClick = (event: MouseEvent) => {\n\tevent.preventDefault();\n\tif (inner.value && event.target && event.target instanceof HTMLElement) {\n\t\tconst listbox = inner.value.querySelector<HTMLElement>('[role=\"listbox\"]');\n\t\tif (!listbox) {\n\t\t\tthrow new Error('Could not find listbox in DOM tree.');\n\t\t}\n\t\tlet node: HTMLElement = event.target;\n\t\tlet index = node.dataset['index'];\n\t\twhile (isNil(index) && node.parentElement) {\n\t\t\tnode = node.parentElement;\n\t\t\tindex = node.dataset['index'];\n\t\t}\n\t\tif (index) {\n\t\t\tconst option = props.options[+index];\n\t\t\tif (option && canBeSelected(option)) {\n\t\t\t\tfocusedIndex.value = +index;\n\t\t\t\tconfirmOption();\n\t\t\t}\n\t\t}\n\t}\n};\n\nconst getHighlighted = () => {\n\tif (isNil(focusedIndex.value)) return;\n\tconst option = props.options[focusedIndex.value!];\n\treturn option;\n};\n\nwatch(\n\t() => props.open,\n\t() => {\n\t\tgetScrollHeight();\n\t},\n\t{ flush: 'post' }\n);\n\nwatch(\n\t() => props.options,\n\t(value, previous) => {\n\t\tif (\n\t\t\thash(value.map((o) => o.valueHash)) !==\n\t\t\thash(previous.map((o) => o.valueHash))\n\t\t) {\n\t\t\trowVirtualizer.value.calculateRange();\n\t\t\tgetScrollHeight();\n\t\t\tblur();\n\t\t}\n\t},\n\t{\n\t\tflush: 'post',\n\t}\n);\n\ndefineExpose({\n\tfocusNext,\n\tfocusPrevious,\n\tfocusFirst,\n\tfocusFirstSelected,\n\tfocusLast,\n\tfocusLastSelected,\n\tblur,\n\tconfirmOption,\n\tfocusByHash,\n\tgetHighlighted,\n});\n</script>\n\n<style lang=\"postcss\"></style>\n"],"names":["props","__props","emit","__emit","inner","ref","makeStringID","arg","mappedOptions","computed","o","rowVirtualizer","useVirtualizer","measureElement","el","virtualRows","totalSize","focusedIndex","canFocus","findNextAvailableIndex","offset","initialValue","isNil","newIndex","focusNext","scrollSelectedIntoView","findPreviousAvailableIndex","focusPrevious","focusFirst","focusLast","focusFirstSelected","focusLastSelected","focusByHash","hash","linkedOptionIndex","blur","isNotNil","confirmOption","option","height","getScrollHeight","canBeSelected","handleClick","event","node","index","getHighlighted","watch","value","previous","__expose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index287.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
package/dist/index288.js
CHANGED
|
@@ -1,18 +1,214 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
1
|
+
import { defineComponent as K, ref as b, computed as m, watch as N, openBlock as r, createElementBlock as c, normalizeClass as $, normalizeStyle as h, withModifiers as Q, createElementVNode as x, renderSlot as v, createTextVNode as D, toDisplayString as g, Fragment as U, renderList as X } from "vue";
|
|
2
|
+
import { isNil as f } from "./index126.js";
|
|
3
|
+
import { useVirtualizer as Z } from "./index299.js";
|
|
4
|
+
import { isNotNil as ee } from "./index131.js";
|
|
5
|
+
import { hash as H } from "./index229.js";
|
|
6
|
+
const te = { class: "bb-listbox__outer-container scrollbar-border" }, oe = {
|
|
7
|
+
key: 0,
|
|
8
|
+
class: "bb-listbox__loading"
|
|
9
|
+
}, ne = {
|
|
10
|
+
key: 1,
|
|
11
|
+
class: "bb-listbox__no-data"
|
|
12
|
+
}, le = ["aria-selected", "data-index"], ie = { class: "autocomplete-option__content" }, se = { class: "autocomplete-option__label" }, pe = /* @__PURE__ */ K({
|
|
13
|
+
__name: "ListBox",
|
|
14
|
+
props: {
|
|
15
|
+
options: {},
|
|
16
|
+
open: { type: Boolean },
|
|
17
|
+
loading: { type: Boolean },
|
|
18
|
+
transitionDuration: { default: 250 },
|
|
19
|
+
loadingText: { default: "Caricamento..." },
|
|
20
|
+
noDataText: { default: "Nessun elemento da visualizzare" }
|
|
21
|
+
},
|
|
22
|
+
emits: ["option:selected", "option:unselected"],
|
|
23
|
+
setup(T, { expose: V, emit: B }) {
|
|
24
|
+
const o = T, _ = B, s = b(null), C = (e) => "option_" + JSON.stringify(e).replace(/\W/g, "_"), i = m(
|
|
25
|
+
() => o.options.map((e) => ({ ...e, id: C(e.value) }))
|
|
26
|
+
), p = Z({
|
|
27
|
+
get count() {
|
|
28
|
+
return o.options.length;
|
|
29
|
+
},
|
|
30
|
+
getScrollElement: () => s.value,
|
|
31
|
+
estimateSize: () => 42,
|
|
32
|
+
overscan: 5
|
|
33
|
+
}), L = (e) => {
|
|
34
|
+
e && p.value.measureElement(e);
|
|
35
|
+
}, O = m(() => p.value.getVirtualItems()), F = m(() => p.value.getTotalSize()), n = b(null), a = m(
|
|
36
|
+
() => o.open && o.options.some((e) => !e.disabled)
|
|
37
|
+
), y = (e = 1) => {
|
|
38
|
+
const l = f(n.value) ? -1 : n.value;
|
|
39
|
+
let t = (l + e) % o.options.length;
|
|
40
|
+
for (; o.options[t].disabled && t !== l; )
|
|
41
|
+
t = y(e + 1);
|
|
42
|
+
return t;
|
|
43
|
+
}, M = () => {
|
|
44
|
+
if (!a.value) return;
|
|
45
|
+
const e = y();
|
|
46
|
+
n.value = e, u();
|
|
47
|
+
}, I = (e = 1) => {
|
|
48
|
+
const l = f(n.value) ? 0 : n.value;
|
|
49
|
+
let t = (l - e + o.options.length) % o.options.length;
|
|
50
|
+
for (; o.options[t].disabled && t !== l; )
|
|
51
|
+
t = I(e + 1);
|
|
52
|
+
return t;
|
|
53
|
+
}, A = async () => {
|
|
54
|
+
if (!a.value) return;
|
|
55
|
+
const e = I();
|
|
56
|
+
n.value = e, u();
|
|
57
|
+
}, P = () => {
|
|
58
|
+
if (!a.value) return;
|
|
59
|
+
let e = 0;
|
|
60
|
+
for (; o.options[e].disabled; )
|
|
61
|
+
e++;
|
|
62
|
+
n.value = e, u();
|
|
63
|
+
}, R = () => {
|
|
64
|
+
if (!a.value) return;
|
|
65
|
+
let e = o.options.length - 1;
|
|
66
|
+
for (; o.options[e].disabled && e !== 0; )
|
|
67
|
+
e--;
|
|
68
|
+
n.value = e, u();
|
|
69
|
+
}, q = () => {
|
|
70
|
+
if (!a.value) return;
|
|
71
|
+
let e = 0;
|
|
72
|
+
for (; o.options[e] && !o.options[e].selected && o.options.length !== e; )
|
|
73
|
+
e++;
|
|
74
|
+
n.value = e % o.options.length, u();
|
|
75
|
+
}, J = () => {
|
|
76
|
+
if (!a.value) return;
|
|
77
|
+
let e = o.options.length - 1;
|
|
78
|
+
for (; o.options[e].selected && e > 0; )
|
|
79
|
+
e--;
|
|
80
|
+
n.value = e === -1 ? o.options.length - 1 : e, u();
|
|
81
|
+
}, W = (e) => {
|
|
82
|
+
if (!a.value) return;
|
|
83
|
+
const l = o.options.findIndex(
|
|
84
|
+
(t) => t.valueHash === e
|
|
85
|
+
);
|
|
86
|
+
l >= 0 && (n.value = l), u();
|
|
87
|
+
}, S = () => {
|
|
88
|
+
n.value = null;
|
|
89
|
+
}, u = () => {
|
|
90
|
+
s.value && ee(n.value) && p.value.scrollToIndex(n.value, {
|
|
91
|
+
align: "center",
|
|
92
|
+
behavior: "smooth"
|
|
93
|
+
});
|
|
94
|
+
}, k = () => {
|
|
95
|
+
if (f(n.value) || !o.open) return;
|
|
96
|
+
const e = o.options[n.value];
|
|
97
|
+
e.selected ? _("option:unselected", e) : _("option:selected", e);
|
|
98
|
+
}, w = b(0), z = () => {
|
|
99
|
+
s.value && (w.value = s.value.scrollHeight);
|
|
100
|
+
}, Y = (e) => !e.disabled, j = (e) => {
|
|
101
|
+
if (e.preventDefault(), s.value && e.target && e.target instanceof HTMLElement) {
|
|
102
|
+
if (!s.value.querySelector('[role="listbox"]'))
|
|
103
|
+
throw new Error("Could not find listbox in DOM tree.");
|
|
104
|
+
let t = e.target, d = t.dataset.index;
|
|
105
|
+
for (; f(d) && t.parentElement; )
|
|
106
|
+
t = t.parentElement, d = t.dataset.index;
|
|
107
|
+
if (d) {
|
|
108
|
+
const E = o.options[+d];
|
|
109
|
+
E && Y(E) && (n.value = +d, k());
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}, G = () => f(n.value) ? void 0 : o.options[n.value];
|
|
113
|
+
return N(
|
|
114
|
+
() => o.open,
|
|
115
|
+
() => {
|
|
116
|
+
z();
|
|
117
|
+
},
|
|
118
|
+
{ flush: "post" }
|
|
119
|
+
), N(
|
|
120
|
+
() => o.options,
|
|
121
|
+
(e, l) => {
|
|
122
|
+
H(e.map((t) => t.valueHash)) !== H(l.map((t) => t.valueHash)) && (p.value.calculateRange(), z(), S());
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
flush: "post"
|
|
126
|
+
}
|
|
127
|
+
), V({
|
|
128
|
+
focusNext: M,
|
|
129
|
+
focusPrevious: A,
|
|
130
|
+
focusFirst: P,
|
|
131
|
+
focusFirstSelected: q,
|
|
132
|
+
focusLast: R,
|
|
133
|
+
focusLastSelected: J,
|
|
134
|
+
blur: S,
|
|
135
|
+
confirmOption: k,
|
|
136
|
+
focusByHash: W,
|
|
137
|
+
getHighlighted: G
|
|
138
|
+
}), (e, l) => (r(), c("div", {
|
|
139
|
+
class: $(["bb-listbox", {
|
|
140
|
+
"bb-listbox--open": e.open,
|
|
141
|
+
"bb-listbox--loading": e.loading,
|
|
142
|
+
"bb-listbox--no-data": !i.value.length
|
|
143
|
+
}]),
|
|
144
|
+
style: h({
|
|
145
|
+
"--transition-duration": `${e.transitionDuration}ms`,
|
|
146
|
+
"--overlay-min-height": `${w.value}px`
|
|
147
|
+
}),
|
|
148
|
+
onClick: Q(j, ["stop"])
|
|
149
|
+
}, [
|
|
150
|
+
x("div", te, [
|
|
151
|
+
x("div", {
|
|
152
|
+
ref_key: "inner",
|
|
153
|
+
ref: s,
|
|
154
|
+
class: "bb-listbox__inner-container"
|
|
155
|
+
}, [
|
|
156
|
+
v(e.$slots, "options:prepend"),
|
|
157
|
+
e.loading && !e.options.length ? (r(), c("div", oe, [
|
|
158
|
+
v(e.$slots, "loading", {}, () => [
|
|
159
|
+
D(g(e.loadingText), 1)
|
|
160
|
+
])
|
|
161
|
+
])) : e.options.length ? (r(), c("div", {
|
|
162
|
+
key: 2,
|
|
163
|
+
role: "listbox",
|
|
164
|
+
style: h({
|
|
165
|
+
height: `${F.value}px`
|
|
166
|
+
}),
|
|
167
|
+
tabindex: "-1"
|
|
168
|
+
}, [
|
|
169
|
+
(r(!0), c(U, null, X(O.value, (t, d) => (r(), c("div", {
|
|
170
|
+
key: i.value[t.index].value,
|
|
171
|
+
ref_for: !0,
|
|
172
|
+
ref: L,
|
|
173
|
+
"aria-selected": n.value === d ? !0 : void 0,
|
|
174
|
+
class: $({
|
|
175
|
+
"bb-listbox__option autocomplete-option": !0,
|
|
176
|
+
"autocomplete-option--focused": n.value === t.index,
|
|
177
|
+
"autocomplete-option--selected": i.value[t.index].selected,
|
|
178
|
+
"autocomplete-option--disabled": i.value[t.index].disabled
|
|
179
|
+
}),
|
|
180
|
+
"data-index": t.index,
|
|
181
|
+
role: "option",
|
|
182
|
+
style: h({
|
|
183
|
+
transform: `translateY(${t.start}px)`
|
|
184
|
+
})
|
|
185
|
+
}, [
|
|
186
|
+
x("span", ie, [
|
|
187
|
+
v(e.$slots, "option", {
|
|
188
|
+
disabled: !!i.value[t.index].disabled,
|
|
189
|
+
focused: n.value === t.index,
|
|
190
|
+
index: t.index,
|
|
191
|
+
item: i.value[t.index].item,
|
|
192
|
+
selected: !!i.value[t.index].selected,
|
|
193
|
+
text: i.value[t.index].text,
|
|
194
|
+
value: i.value[t.index].value
|
|
195
|
+
}, () => [
|
|
196
|
+
x("span", se, g(i.value[t.index].text), 1)
|
|
197
|
+
])
|
|
198
|
+
])
|
|
199
|
+
], 14, le))), 128))
|
|
200
|
+
], 4)) : (r(), c("div", ne, [
|
|
201
|
+
v(e.$slots, "no-data", {}, () => [
|
|
202
|
+
D(g(e.noDataText), 1)
|
|
203
|
+
])
|
|
204
|
+
])),
|
|
205
|
+
v(e.$slots, "options:append")
|
|
206
|
+
], 512)
|
|
207
|
+
])
|
|
208
|
+
], 6));
|
|
209
|
+
}
|
|
210
|
+
});
|
|
13
211
|
export {
|
|
14
|
-
|
|
15
|
-
o as isArray,
|
|
16
|
-
c as isPlainObject
|
|
212
|
+
pe as default
|
|
17
213
|
};
|
|
18
214
|
//# sourceMappingURL=index288.js.map
|
package/dist/index288.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index288.js","sources":["../node_modules/is-what/dist/index.js"],"sourcesContent":["function getType(payload) {\n return Object.prototype.toString.call(payload).slice(8, -1);\n}\n\nfunction isAnyObject(payload) {\n return getType(payload) === \"Object\";\n}\n\nfunction isArray(payload) {\n return getType(payload) === \"Array\";\n}\n\nfunction isBlob(payload) {\n return getType(payload) === \"Blob\";\n}\n\nfunction isBoolean(payload) {\n return getType(payload) === \"Boolean\";\n}\n\nfunction isDate(payload) {\n return getType(payload) === \"Date\" && !isNaN(payload);\n}\n\nfunction isEmptyArray(payload) {\n return isArray(payload) && payload.length === 0;\n}\n\nfunction isPlainObject(payload) {\n if (getType(payload) !== \"Object\")\n return false;\n const prototype = Object.getPrototypeOf(payload);\n return !!prototype && prototype.constructor === Object && prototype === Object.prototype;\n}\n\nfunction isEmptyObject(payload) {\n return isPlainObject(payload) && Object.keys(payload).length === 0;\n}\n\nfunction isEmptyString(payload) {\n return payload === \"\";\n}\n\nfunction isError(payload) {\n return getType(payload) === \"Error\" || payload instanceof Error;\n}\n\nfunction isFile(payload) {\n return getType(payload) === \"File\";\n}\n\nfunction isFullArray(payload) {\n return isArray(payload) && payload.length > 0;\n}\n\nfunction isFullObject(payload) {\n return isPlainObject(payload) && Object.keys(payload).length > 0;\n}\n\nfunction isString(payload) {\n return getType(payload) === \"String\";\n}\n\nfunction isFullString(payload) {\n return isString(payload) && payload !== \"\";\n}\n\nfunction isFunction(payload) {\n return typeof payload === \"function\";\n}\n\nfunction isType(payload, type) {\n if (!(type instanceof Function)) {\n throw new TypeError(\"Type must be a function\");\n }\n if (!Object.prototype.hasOwnProperty.call(type, \"prototype\")) {\n throw new TypeError(\"Type is not a class\");\n }\n const name = type.name;\n return getType(payload) === name || Boolean(payload && payload.constructor === type);\n}\n\nfunction isInstanceOf(value, classOrClassName) {\n if (typeof classOrClassName === \"function\") {\n for (let p = value; p; p = Object.getPrototypeOf(p)) {\n if (isType(p, classOrClassName)) {\n return true;\n }\n }\n return false;\n } else {\n for (let p = value; p; p = Object.getPrototypeOf(p)) {\n if (getType(p) === classOrClassName) {\n return true;\n }\n }\n return false;\n }\n}\n\nfunction isMap(payload) {\n return getType(payload) === \"Map\";\n}\n\nfunction isNaNValue(payload) {\n return getType(payload) === \"Number\" && isNaN(payload);\n}\n\nfunction isNumber(payload) {\n return getType(payload) === \"Number\" && !isNaN(payload);\n}\n\nfunction isNegativeNumber(payload) {\n return isNumber(payload) && payload < 0;\n}\n\nfunction isNull(payload) {\n return getType(payload) === \"Null\";\n}\n\nfunction isOneOf(a, b, c, d, e) {\n return (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value);\n}\n\nfunction isUndefined(payload) {\n return getType(payload) === \"Undefined\";\n}\n\nconst isNullOrUndefined = isOneOf(isNull, isUndefined);\n\nfunction isObject(payload) {\n return isPlainObject(payload);\n}\n\nfunction isObjectLike(payload) {\n return isAnyObject(payload);\n}\n\nfunction isPositiveNumber(payload) {\n return isNumber(payload) && payload > 0;\n}\n\nfunction isSymbol(payload) {\n return getType(payload) === \"Symbol\";\n}\n\nfunction isPrimitive(payload) {\n return isBoolean(payload) || isNull(payload) || isUndefined(payload) || isNumber(payload) || isString(payload) || isSymbol(payload);\n}\n\nfunction isPromise(payload) {\n return getType(payload) === \"Promise\";\n}\n\nfunction isRegExp(payload) {\n return getType(payload) === \"RegExp\";\n}\n\nfunction isSet(payload) {\n return getType(payload) === \"Set\";\n}\n\nfunction isWeakMap(payload) {\n return getType(payload) === \"WeakMap\";\n}\n\nfunction isWeakSet(payload) {\n return getType(payload) === \"WeakSet\";\n}\n\nexport { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFullArray, isFullObject, isFullString, isFunction, isInstanceOf, isMap, isNaNValue, isNegativeNumber, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isOneOf, isPlainObject, isPositiveNumber, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };\n"],"names":["getType","payload","isArray","isPlainObject","prototype"],"mappings":"AAAA,SAASA,EAAQC,GAAS;AACxB,SAAO,OAAO,UAAU,SAAS,KAAKA,CAAO,EAAE,MAAM,GAAG,EAAE;AAC5D;AAMA,SAASC,EAAQD,GAAS;AACxB,SAAOD,EAAQC,CAAO,MAAM;AAC9B;AAkBA,SAASE,EAAcF,GAAS;AAC9B,MAAID,EAAQC,CAAO,MAAM;AACvB,WAAO;AACT,QAAMG,IAAY,OAAO,eAAeH,CAAO;AAC/C,SAAO,CAAC,CAACG,KAAaA,EAAU,gBAAgB,UAAUA,MAAc,OAAO;AACjF;","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index288.js","sources":["../src/components/ListBox.vue"],"sourcesContent":["<template>\n\t<div\n\t\tclass=\"bb-listbox\"\n\t\t:class=\"{\n\t\t\t'bb-listbox--open': open,\n\t\t\t'bb-listbox--loading': loading,\n\t\t\t'bb-listbox--no-data': !mappedOptions.length,\n\t\t}\"\n\t\t:style=\"{\n\t\t\t'--transition-duration': `${transitionDuration}ms`,\n\t\t\t'--overlay-min-height': `${height}px`,\n\t\t}\"\n\t\t@click.stop=\"handleClick\"\n\t>\n\t\t<div class=\"bb-listbox__outer-container scrollbar-border\">\n\t\t\t<div ref=\"inner\" class=\"bb-listbox__inner-container\">\n\t\t\t\t<slot name=\"options:prepend\"></slot>\n\t\t\t\t<div v-if=\"loading && !options.length\" class=\"bb-listbox__loading\">\n\t\t\t\t\t<slot :name=\"'loading'\">{{ loadingText }}</slot>\n\t\t\t\t</div>\n\t\t\t\t<div v-else-if=\"!options.length\" class=\"bb-listbox__no-data\">\n\t\t\t\t\t<slot :name=\"'no-data'\">{{ noDataText }}</slot>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tv-else\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\t:style=\"{\n\t\t\t\t\t\theight: `${totalSize}px`,\n\t\t\t\t\t}\"\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-for=\"(row, index) in virtualRows\"\n\t\t\t\t\t\t:key=\"mappedOptions[row.index].value\"\n\t\t\t\t\t\t:ref=\"measureElement\"\n\t\t\t\t\t\t:aria-selected=\"focusedIndex === index ? true : undefined\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t'bb-listbox__option autocomplete-option': true,\n\t\t\t\t\t\t\t'autocomplete-option--focused': focusedIndex === row.index,\n\t\t\t\t\t\t\t'autocomplete-option--selected':\n\t\t\t\t\t\t\t\tmappedOptions[row.index].selected,\n\t\t\t\t\t\t\t'autocomplete-option--disabled':\n\t\t\t\t\t\t\t\tmappedOptions[row.index].disabled,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:data-index=\"row.index\"\n\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t:style=\"{\n\t\t\t\t\t\t\ttransform: `translateY(${row.start}px)`,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"autocomplete-option__content\">\n\t\t\t\t\t\t\t<slot\n\t\t\t\t\t\t\t\t:disabled=\"!!mappedOptions[row.index].disabled\"\n\t\t\t\t\t\t\t\t:focused=\"focusedIndex === row.index\"\n\t\t\t\t\t\t\t\t:index=\"row.index\"\n\t\t\t\t\t\t\t\t:item=\"mappedOptions[row.index].item\"\n\t\t\t\t\t\t\t\tname=\"option\"\n\t\t\t\t\t\t\t\t:selected=\"!!mappedOptions[row.index].selected\"\n\t\t\t\t\t\t\t\t:text=\"mappedOptions[row.index].text\"\n\t\t\t\t\t\t\t\t:value=\"mappedOptions[row.index].value\"\n\t\t\t\t\t\t\t\t><span class=\"autocomplete-option__label\">{{\n\t\t\t\t\t\t\t\t\tmappedOptions[row.index].text\n\t\t\t\t\t\t\t\t}}</span></slot\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<slot name=\"options:append\"></slot>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { isNil } from '@/utilities/functions/isNil';\nimport { computed, ref, watch } from 'vue';\nimport { useVirtualizer } from '@tanstack/vue-virtual';\nimport { isNotNil } from '@/utilities/functions/isNotNil';\nimport type { Option } from '@/types/Option';\nimport { hash } from '@/utilities/functions/hash';\n\ntype Props = {\n\toptions: Option[];\n\topen?: boolean;\n\tloading?: boolean;\n\ttransitionDuration?: number;\n\tloadingText?: string;\n\tnoDataText?: string;\n};\n\nconst props = withDefaults(defineProps<Props>(), {\n\ttransitionDuration: 250,\n\tloadingText: 'Caricamento...',\n\tnoDataText: 'Nessun elemento da visualizzare',\n});\n\nconst emit = defineEmits<{\n\t(e: 'option:selected', option: Option): void;\n\t(e: 'option:unselected', option: Option): void;\n}>();\n\nconst inner = ref<HTMLElement | null>(null);\n\nconst makeStringID = (arg: any) =>\n\t'option_' + JSON.stringify(arg).replace(/\\W/g, '_');\n\nconst mappedOptions = computed(() =>\n\tprops.options.map((o) => {\n\t\treturn { ...o, id: makeStringID(o.value) };\n\t})\n);\n\nconst rowVirtualizer = useVirtualizer({\n\tget count() {\n\t\treturn props.options.length;\n\t},\n\tgetScrollElement: () => inner.value,\n\testimateSize: () => 42,\n\toverscan: 5,\n});\n\nconst measureElement = (el: HTMLElement) => {\n\tif (!el) {\n\t\treturn;\n\t}\n\trowVirtualizer.value.measureElement(el);\n\treturn undefined;\n};\n\nconst virtualRows = computed(() => rowVirtualizer.value.getVirtualItems());\nconst totalSize = computed(() => rowVirtualizer.value.getTotalSize());\n\n/**\n * START FOCUS HANDLING\n */\n\nconst focusedIndex = ref<null | number>(null);\n\nconst canFocus = computed(\n\t() => props.open && props.options.some((o) => !o.disabled)\n);\n\nconst findNextAvailableIndex = (offset = 1) => {\n\tconst initialValue = isNil(focusedIndex.value) ? -1 : focusedIndex.value!;\n\tlet newIndex = (initialValue + offset) % props.options.length;\n\twhile (props.options[newIndex].disabled && newIndex !== initialValue) {\n\t\tnewIndex = findNextAvailableIndex(offset + 1);\n\t}\n\treturn newIndex;\n};\n\nconst focusNext = () => {\n\tif (!canFocus.value) return;\n\tconst newIndex = findNextAvailableIndex();\n\tfocusedIndex.value = newIndex;\n\tscrollSelectedIntoView();\n};\nconst findPreviousAvailableIndex = (offset = 1) => {\n\tconst initialValue = isNil(focusedIndex.value) ? 0 : focusedIndex.value!;\n\tlet newIndex =\n\t\t(initialValue - offset + props.options.length) % props.options.length;\n\twhile (props.options[newIndex].disabled && newIndex !== initialValue) {\n\t\tnewIndex = findPreviousAvailableIndex(offset + 1);\n\t}\n\treturn newIndex;\n};\nconst focusPrevious = async () => {\n\tif (!canFocus.value) return;\n\tconst newIndex = findPreviousAvailableIndex();\n\tfocusedIndex.value = newIndex;\n\tscrollSelectedIntoView();\n};\n\nconst focusFirst = () => {\n\tif (!canFocus.value) return;\n\tlet newIndex = 0;\n\twhile (props.options[newIndex].disabled) {\n\t\tnewIndex++;\n\t}\n\tfocusedIndex.value = newIndex;\n\tscrollSelectedIntoView();\n};\n\nconst focusLast = () => {\n\tif (!canFocus.value) return;\n\tlet newIndex = props.options.length - 1;\n\twhile (props.options[newIndex].disabled && newIndex !== 0) {\n\t\tnewIndex--;\n\t}\n\tfocusedIndex.value = newIndex;\n\tscrollSelectedIntoView();\n};\nconst focusFirstSelected = () => {\n\tif (!canFocus.value) return;\n\tlet newIndex = 0;\n\twhile (\n\t\tprops.options[newIndex] &&\n\t\t!props.options[newIndex].selected &&\n\t\tprops.options.length !== newIndex\n\t) {\n\t\tnewIndex++;\n\t}\n\tfocusedIndex.value = newIndex % props.options.length;\n\tscrollSelectedIntoView();\n};\nconst focusLastSelected = () => {\n\tif (!canFocus.value) return;\n\tlet newIndex = props.options.length - 1;\n\twhile (props.options[newIndex].selected && newIndex > 0) {\n\t\tnewIndex--;\n\t}\n\tfocusedIndex.value = newIndex === -1 ? props.options.length - 1 : newIndex;\n\tscrollSelectedIntoView();\n};\n\nconst focusByHash = (hash: Option['valueHash']) => {\n\tif (!canFocus.value) return;\n\tconst linkedOptionIndex = props.options.findIndex(\n\t\t(o) => o.valueHash === hash\n\t);\n\tif (linkedOptionIndex >= 0) {\n\t\tfocusedIndex.value = linkedOptionIndex;\n\t}\n\tscrollSelectedIntoView();\n};\n\nconst blur = () => {\n\tfocusedIndex.value = null;\n};\n\nconst scrollSelectedIntoView = () => {\n\tif (inner.value && isNotNil(focusedIndex.value)) {\n\t\trowVirtualizer.value.scrollToIndex(focusedIndex.value, {\n\t\t\talign: 'center',\n\t\t\tbehavior: 'smooth',\n\t\t});\n\t}\n};\n\n/**\n * END FOCUS HANDLING\n */\n\nconst confirmOption = () => {\n\tif (isNil(focusedIndex.value) || !props.open) return;\n\tconst option = props.options[focusedIndex.value!];\n\tif (option.selected) {\n\t\temit('option:unselected', option);\n\t} else {\n\t\temit('option:selected', option);\n\t}\n};\n\nconst height = ref(0);\nconst getScrollHeight = () => {\n\tif (inner.value) {\n\t\theight.value = inner.value.scrollHeight;\n\t}\n};\n\nconst canBeSelected = (option: Option) => {\n\treturn !option.disabled;\n};\n\nconst handleClick = (event: MouseEvent) => {\n\tevent.preventDefault();\n\tif (inner.value && event.target && event.target instanceof HTMLElement) {\n\t\tconst listbox = inner.value.querySelector<HTMLElement>('[role=\"listbox\"]');\n\t\tif (!listbox) {\n\t\t\tthrow new Error('Could not find listbox in DOM tree.');\n\t\t}\n\t\tlet node: HTMLElement = event.target;\n\t\tlet index = node.dataset['index'];\n\t\twhile (isNil(index) && node.parentElement) {\n\t\t\tnode = node.parentElement;\n\t\t\tindex = node.dataset['index'];\n\t\t}\n\t\tif (index) {\n\t\t\tconst option = props.options[+index];\n\t\t\tif (option && canBeSelected(option)) {\n\t\t\t\tfocusedIndex.value = +index;\n\t\t\t\tconfirmOption();\n\t\t\t}\n\t\t}\n\t}\n};\n\nconst getHighlighted = () => {\n\tif (isNil(focusedIndex.value)) return;\n\tconst option = props.options[focusedIndex.value!];\n\treturn option;\n};\n\nwatch(\n\t() => props.open,\n\t() => {\n\t\tgetScrollHeight();\n\t},\n\t{ flush: 'post' }\n);\n\nwatch(\n\t() => props.options,\n\t(value, previous) => {\n\t\tif (\n\t\t\thash(value.map((o) => o.valueHash)) !==\n\t\t\thash(previous.map((o) => o.valueHash))\n\t\t) {\n\t\t\trowVirtualizer.value.calculateRange();\n\t\t\tgetScrollHeight();\n\t\t\tblur();\n\t\t}\n\t},\n\t{\n\t\tflush: 'post',\n\t}\n);\n\ndefineExpose({\n\tfocusNext,\n\tfocusPrevious,\n\tfocusFirst,\n\tfocusFirstSelected,\n\tfocusLast,\n\tfocusLastSelected,\n\tblur,\n\tconfirmOption,\n\tfocusByHash,\n\tgetHighlighted,\n});\n</script>\n\n<style lang=\"postcss\"></style>\n"],"names":["props","__props","emit","__emit","inner","ref","makeStringID","arg","mappedOptions","computed","o","rowVirtualizer","useVirtualizer","measureElement","el","virtualRows","totalSize","focusedIndex","canFocus","findNextAvailableIndex","offset","initialValue","isNil","newIndex","focusNext","scrollSelectedIntoView","findPreviousAvailableIndex","focusPrevious","focusFirst","focusLast","focusFirstSelected","focusLastSelected","focusByHash","hash","linkedOptionIndex","blur","isNotNil","confirmOption","option","height","getScrollHeight","canBeSelected","handleClick","event","node","index","getHighlighted","watch","value","previous","__expose"],"mappings":"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"}
|