<template> - <highcharts v-if="!loadingData" :options="sunburstOptions" /> + <div class="highcharts-wrapper"> + <highcharts v-if="!loadingData" :options="sunburstOptions" /> + </div> </template> <script> @@ -101,6 +103,7 @@Source: components/Ontologies/OntologySunburst.vue
import Highcharts from "highcharts"; import Sunburst from "highcharts/modules/sunburst"; import Exporting from "highcharts/modules/exporting"; +import { defineAsyncComponent } from "vue"; //Implement Sunburst module for Highcharts //Implement Sunburst module for Highcharts // check if Sunburst is a function, if not try .default @@ -118,6 +121,14 @@Source: components/Ontologies/OntologySunburst.vue
export default { name: "OntologySunburst", + components: { + // Register highcharts asynchronously so it bypasses Server-Side Compilation checks safely + highcharts: defineAsyncComponent(() => + import("highcharts-vue").then( + (module) => module.Chart || module.default.Chart || module, + ), + ), + }, props: { itemClicked: { default: null, type: Object }, }, @@ -444,7 +455,7 @@Search results
diff --git a/documentation/html/components_Records_Record_Collections.vue.html b/documentation/html/components_Records_Record_Collections.vue.html index 7e320996de..f38c7425a7 100644 --- a/documentation/html/components_Records_Record_Collections.vue.html +++ b/documentation/html/components_Records_Record_Collections.vue.html @@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Record_GeneralInfo_SavedSearches.vue.html b/documentation/html/components_Records_Record_GeneralInfo_SavedSearches.vue.html index 1822e52933..e64f90b144 100644 --- a/documentation/html/components_Records_Record_GeneralInfo_SavedSearches.vue.html +++ b/documentation/html/components_Records_Record_GeneralInfo_SavedSearches.vue.html @@ -40,7 +40,7 @@Source: components/Records/Record/GeneralInfo/SavedSearch
import RecordStatus from "@/components/Records/Shared/RecordStatus.vue";
import RestClient from "@/lib/Client/RESTClient.js";
-import saveSearch from "@/store";
const restClient = new RestClient();
export default {
@@ -255,7 +254,7 @@ Source: components/Records/Record/GeneralInfo/SavedSearch
);
//Commit the updated result to store
- saveSearch.commit(
+ this.$store.commit(
"saveSearch/setSaveSearchResult",
updatedSearchResult,
);
@@ -320,7 +319,7 @@ Search results
diff --git a/documentation/html/components_Records_Record_RelatedContent.vue.html b/documentation/html/components_Records_Record_RelatedContent.vue.html
index 21e1008670..14644d6783 100644
--- a/documentation/html/components_Records_Record_RelatedContent.vue.html
+++ b/documentation/html/components_Records_Record_RelatedContent.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Record_RelatedContent.vue.html b/documentation/html/components_Records_Record_RelatedContent.vue.html index 21e1008670..14644d6783 100644 --- a/documentation/html/components_Records_Record_RelatedContent.vue.html +++ b/documentation/html/components_Records_Record_RelatedContent.vue.html @@ -40,7 +40,7 @@Search results
diff --git a/documentation/html/components_Records_Search_Header_FilterChips.vue.html b/documentation/html/components_Records_Search_Header_FilterChips.vue.html index 00eb61b9ff..56116b3546 100644 --- a/documentation/html/components_Records_Search_Header_FilterChips.vue.html +++ b/documentation/html/components_Records_Search_Header_FilterChips.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Header/FilterChips.vue<
</template>
<script>
-import { throttle } from "lodash";
+import { throttle } from "lodash-es";
import extraFilterChips from "@/data/extraFilterChips.json";
import filterMapping from "@/data/FiltersLabelMapping.json";
@@ -189,7 +189,8 @@ Source: components/Records/Search/Header/FilterChips.vue<
Object.keys(_module.$route.query).forEach(function (queryParam) {
if (queryParam !== paramName) {
query[queryParam] = _module.$route.query[queryParam];
- } else {
+ }
+ else {
if (_module.$route.query[queryParam].includes(",")) {
let currentValues = _module.$route.query[queryParam].split(",");
if (currentValues.includes(paramVal)) {
@@ -250,7 +251,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Header_Pagination.vue.html b/documentation/html/components_Records_Search_Header_Pagination.vue.html
index 146a032145..6fc2163a71 100644
--- a/documentation/html/components_Records_Search_Header_Pagination.vue.html
+++ b/documentation/html/components_Records_Search_Header_Pagination.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Header_Pagination.vue.html b/documentation/html/components_Records_Search_Header_Pagination.vue.html index 146a032145..6fc2163a71 100644 --- a/documentation/html/components_Records_Search_Header_Pagination.vue.html +++ b/documentation/html/components_Records_Search_Header_Pagination.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Header/Pagination.vue
<v-pagination
v-model="page"
:length="totalPages"
+ :total-visible="$vuetify.display.mdAndUp ? 7 : 3"
active-color="primary"
variant="elevated"
- :total-visible="$vuetify.display.mdAndUp ? 7 : 3"
/>
</template>
<script>
-import { throttle } from "lodash";
+import { throttle } from "lodash-es";
/** Component to handle the advanced search filters for the searchFairsharingRecords query.
* @vue-prop {Number} [totalPages = 0] - the total number of pages to display
@@ -138,7 +138,8 @@ Source: components/Records/Search/Header/Pagination.vue
if (!Object.prototype.hasOwnProperty.call(newVal, "page")) {
_module.currentPageLocal = 1;
_module.page = _module.currentPageLocal;
- } else {
+ }
+ else {
_module.currentPageLocal = Number(newVal.page);
_module.page = _module.currentPageLocal;
}
@@ -154,7 +155,8 @@ Source: components/Records/Search/Header/Pagination.vue
if (!Object.prototype.hasOwnProperty.call(_module.$route.query, "page")) {
_module.currentPageLocal = 1;
_module.page = _module.currentPageLocal;
- } else {
+ }
+ else {
_module.currentPageLocal = Number(_module.$route.query.page);
_module.page = _module.currentPageLocal;
}
@@ -197,7 +199,8 @@ Source: components/Records/Search/Header/Pagination.vue
if (!disable) {
this.allowPaginate = false;
this.PaginatePermission();
- } else {
+ }
+ else {
this.allowPaginate = true;
}
},
@@ -259,7 +262,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Header_Sorting.vue.html b/documentation/html/components_Records_Search_Header_Sorting.vue.html
index c26267d266..374493baa0 100644
--- a/documentation/html/components_Records_Search_Header_Sorting.vue.html
+++ b/documentation/html/components_Records_Search_Header_Sorting.vue.html
@@ -40,7 +40,7 @@
Source: components/Records/Search/Header/Pagination.vue
if (!Object.prototype.hasOwnProperty.call(_module.$route.query, "page")) {
_module.currentPageLocal = 1;
_module.page = _module.currentPageLocal;
- } else {
+ }
+ else {
_module.currentPageLocal = Number(_module.$route.query.page);
_module.page = _module.currentPageLocal;
}
@@ -197,7 +199,8 @@ Source: components/Records/Search/Header/Pagination.vue
if (!disable) {
this.allowPaginate = false;
this.PaginatePermission();
- } else {
+ }
+ else {
this.allowPaginate = true;
}
},
@@ -259,7 +262,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Header_Sorting.vue.html b/documentation/html/components_Records_Search_Header_Sorting.vue.html
index c26267d266..374493baa0 100644
--- a/documentation/html/components_Records_Search_Header_Sorting.vue.html
+++ b/documentation/html/components_Records_Search_Header_Sorting.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Header_Sorting.vue.html b/documentation/html/components_Records_Search_Header_Sorting.vue.html index c26267d266..374493baa0 100644 --- a/documentation/html/components_Records_Search_Header_Sorting.vue.html +++ b/documentation/html/components_Records_Search_Header_Sorting.vue.html @@ -40,7 +40,7 @@Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_AdvancedSearchDialogBox.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_AdvancedSearchDialogBox.vue.html index 0c0f7687c3..183dcf4425 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_AdvancedSearchDialogBox.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_AdvancedSearchDialogBox.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/AdvancedSearch/Ad
</template>
<script>
-import { isBoolean, isObject } from "lodash";
+import { isBoolean, isObject } from "lodash-es";
import { mapActions, mapGetters } from "vuex";
import TooltipComponent from "@/components/Records/Search/Input/AdvancedSearch/QueryBuilderComponents/UtilComponents/TooltipComponent.vue";
import QueryBuilderView from "@/components/Records/Search/Input/AdvancedSearch/QueryBuilderView.vue";
-import advancedSearch from "@/store";
import { uniqueValues } from "@/utils/advancedSearchUtils";
export default {
@@ -305,21 +304,15 @@ Source: components/Records/Search/Input/AdvancedSearch/Ad
//When the user is redirected to advancedsearch url directly
//it will open the dialog box
if (this.$route.fullPath.toLowerCase() === "/advancedsearch") {
- advancedSearch.commit(
- "advancedSearch/setAdvancedSearchDialogStatus",
- true,
- );
+ this.$store.commit("advancedSearch/setAdvancedSearchDialogStatus", true);
}
},
methods: {
...mapActions("advancedSearch", ["fetchAdvancedSearchResults"]),
closeDialog() {
- advancedSearch.commit("advancedSearch/setEditDialogStatus", false);
- advancedSearch.commit(
- "advancedSearch/setAdvancedSearchDialogStatus",
- false,
- );
+ this.$store.commit("advancedSearch/setEditDialogStatus", false);
+ this.$store.commit("advancedSearch/setAdvancedSearchDialogStatus", false);
// Redirecting to home page after closing
if (this.$route.fullPath.toLowerCase() === "/advancedsearch") {
this.$router.push("/");
@@ -351,7 +344,8 @@ Source: components/Records/Search/Input/AdvancedSearch/Ad
goToAdvancedSearch() {
if (this.updatedAdvancedSearchText) {
this.fetchAdvancedSearchResults(this.updatedAdvancedSearchText);
- } else {
+ }
+ else {
this.fetchAdvancedSearchResults(this.advancedSearchTerm);
}
@@ -386,13 +380,15 @@ Source: components/Records/Search/Input/AdvancedSearch/Ad
params["value"].forEach((item) => {
if (isObject(item)) {
valuesArr.push(item.value);
- } else {
+ }
+ else {
valuesArr.push(item);
}
});
this.queryString += valuesArr.join("+");
- } else if (params["value"]) {
+ }
+ else if (params["value"]) {
this.queryString += params["value"];
}
});
@@ -413,7 +409,8 @@ Source: components/Records/Search/Input/AdvancedSearch/Ad
name: "AdvancedSearchResult",
query: this.isAdvancedSearchTerm(queryString),
});
- } else {
+ }
+ else {
this.$router.push({
name: "AdvancedSearchResult",
query: this.noAdvancedSearchTerm(queryString),
@@ -426,7 +423,8 @@ Source: components/Records/Search/Input/AdvancedSearch/Ad
this.$router.push({
query: this.isAdvancedSearchTerm(queryString),
});
- } else {
+ }
+ else {
this.$router.push({
query: this.noAdvancedSearchTerm(queryString),
});
@@ -489,7 +487,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html
index 9e6c36df85..2a74023c62 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html
@@ -40,7 +40,7 @@
Source: components/Records/Search/Input/AdvancedSearch/Ad
goToAdvancedSearch() {
if (this.updatedAdvancedSearchText) {
this.fetchAdvancedSearchResults(this.updatedAdvancedSearchText);
- } else {
+ }
+ else {
this.fetchAdvancedSearchResults(this.advancedSearchTerm);
}
@@ -386,13 +380,15 @@ Source: components/Records/Search/Input/AdvancedSearch/Ad
params["value"].forEach((item) => {
if (isObject(item)) {
valuesArr.push(item.value);
- } else {
+ }
+ else {
valuesArr.push(item);
}
});
this.queryString += valuesArr.join("+");
- } else if (params["value"]) {
+ }
+ else if (params["value"]) {
this.queryString += params["value"];
}
});
@@ -413,7 +409,8 @@ Source: components/Records/Search/Input/AdvancedSearch/Ad
name: "AdvancedSearchResult",
query: this.isAdvancedSearchTerm(queryString),
});
- } else {
+ }
+ else {
this.$router.push({
name: "AdvancedSearchResult",
query: this.noAdvancedSearchTerm(queryString),
@@ -426,7 +423,8 @@ Source: components/Records/Search/Input/AdvancedSearch/Ad
this.$router.push({
query: this.isAdvancedSearchTerm(queryString),
});
- } else {
+ }
+ else {
this.$router.push({
query: this.noAdvancedSearchTerm(queryString),
});
@@ -489,7 +487,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html
index 9e6c36df85..2a74023c62 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html
@@ -40,7 +40,7 @@
Source: components/Records/Search/Input/AdvancedSearch/Ad
name: "AdvancedSearchResult",
query: this.isAdvancedSearchTerm(queryString),
});
- } else {
+ }
+ else {
this.$router.push({
name: "AdvancedSearchResult",
query: this.noAdvancedSearchTerm(queryString),
@@ -426,7 +423,8 @@ Source: components/Records/Search/Input/AdvancedSearch/Ad
this.$router.push({
query: this.isAdvancedSearchTerm(queryString),
});
- } else {
+ }
+ else {
this.$router.push({
query: this.noAdvancedSearchTerm(queryString),
});
@@ -489,7 +487,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html
index 9e6c36df85..2a74023c62 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html index 9e6c36df85..2a74023c62 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Countries.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/AdvancedSearch/Qu
<script>
import { mapActions, mapGetters } from "vuex";
-import countriesSearch from "@/store";
-
import AutoCompleteComponent from "../UtilComponents/AutoCompleteComponent.vue";
export default {
@@ -156,7 +154,7 @@ Source: components/Records/Search/Input/AdvancedSearch/Qu
handler(open) {
if (open) {
if (this.value && this.value.length) {
- countriesSearch.commit(
+ this.$store.commit(
"countriesSearch/setSearchCountries",
this.value,
);
@@ -227,7 +225,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Domains.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Domains.vue.html
index 382891b675..d4cb7174b7 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Domains.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Domains.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Domains.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Domains.vue.html index 382891b675..d4cb7174b7 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Domains.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Domains.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/AdvancedSearch/Qu
</template>
<script>
import { mapActions, mapGetters } from "vuex";
-
-import domainsSearch from "@/store";
-
import AutoCompleteComponent from "../UtilComponents/AutoCompleteComponent.vue";
export default {
@@ -153,7 +150,7 @@ Source: components/Records/Search/Input/AdvancedSearch/Qu
handler(open) {
if (open) {
if (this.value && this.value.length) {
- domainsSearch.commit("domainsSearch/setSearchDomains", this.value);
+ this.$store.commit("domainsSearch/setSearchDomains", this.value);
}
}
},
@@ -221,7 +218,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Licences.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Licences.vue.html
index 9aa65b9b3e..d462ded6c6 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Licences.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Licences.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Licences.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Licences.vue.html index 9aa65b9b3e..d462ded6c6 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Licences.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Licences.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/AdvancedSearch/Qu
</template>
<script>
import { mapActions, mapGetters } from "vuex";
-
-import licencesSearch from "@/store";
-
import AutoCompleteComponent from "../UtilComponents/AutoCompleteComponent.vue";
export default {
@@ -153,10 +150,7 @@ Source: components/Records/Search/Input/AdvancedSearch/Qu
handler(open) {
if (open) {
if (this.value && this.value.length) {
- licencesSearch.commit(
- "licencesSearch/setSearchLicences",
- this.value,
- );
+ this.$store.commit("licencesSearch/setSearchLicences", this.value);
}
}
},
@@ -224,7 +218,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_ObjectTypes.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_ObjectTypes.vue.html
index b7030e4bcd..dbc1cac550 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_ObjectTypes.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_ObjectTypes.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_ObjectTypes.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_ObjectTypes.vue.html index b7030e4bcd..dbc1cac550 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_ObjectTypes.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_ObjectTypes.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/AdvancedSearch/Qu
/>
</template>
<script>
-import { mapActions, mapGetters } from "vuex";
-
-import objectTypes from "@/store";
+import {mapActions, mapGetters} from "vuex";
+// import objectTypes from "@/store";
import AutoCompleteComponent from "../UtilComponents/AutoCompleteComponent.vue";
export default {
@@ -153,7 +152,7 @@ Source: components/Records/Search/Input/AdvancedSearch/Qu
handler(open) {
if (open) {
if (this.value && this.value.length) {
- objectTypes.commit("objectTypes/setObjectTypes", this.value);
+ this.$store.commit("objectTypes/setObjectTypes", this.value);
}
}
},
@@ -221,7 +220,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Organisations.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Organisations.vue.html
index aab662c81e..825d71f4f0 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Organisations.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Organisations.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Organisations.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Organisations.vue.html index aab662c81e..825d71f4f0 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Organisations.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Organisations.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/AdvancedSearch/Qu
<script>
import { mapActions, mapGetters } from "vuex";
-import organisationSearch from "@/store";
-
import AutoCompleteComponent from "../UtilComponents/AutoCompleteComponent.vue";
export default {
@@ -158,7 +156,7 @@ Source: components/Records/Search/Input/AdvancedSearch/Qu
handler(open) {
if (open) {
if (this.value && this.value.length) {
- organisationSearch.commit(
+ this.$store.commit(
"organisationSearch/setSearchOrganisations",
this.value,
);
@@ -231,7 +229,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Subject.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Subject.vue.html
index 9b6827f1aa..8e2bc3fb12 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Subject.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Subject.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Subject.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Subject.vue.html index 9b6827f1aa..8e2bc3fb12 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Subject.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Subject.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/AdvancedSearch/Qu
<script>
import { mapActions, mapGetters } from "vuex";
-import subjectSearch from "@/store";
-
import AutoCompleteComponent from "../UtilComponents/AutoCompleteComponent.vue";
export default {
@@ -152,7 +150,7 @@ Source: components/Records/Search/Input/AdvancedSearch/Qu
handler(open) {
if (open) {
if (this.value && this.value.length) {
- subjectSearch.commit("subjectSearch/setSearchSubjects", this.value);
+ this.$store.commit("subjectSearch/setSearchSubjects", this.value);
}
}
},
@@ -220,7 +218,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Taxonomies.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Taxonomies.vue.html
index baae0bd33b..f30b45e15b 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Taxonomies.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Taxonomies.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Taxonomies.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Taxonomies.vue.html index baae0bd33b..f30b45e15b 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Taxonomies.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_Taxonomies.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/AdvancedSearch/Qu
</template>
<script>
import { mapActions, mapGetters } from "vuex";
-
-import taxonomiesSearch from "@/store";
-
import AutoCompleteComponent from "../UtilComponents/AutoCompleteComponent.vue";
export default {
@@ -156,7 +153,7 @@ Source: components/Records/Search/Input/AdvancedSearch/Qu
handler(open) {
if (open) {
if (this.value && this.value.length) {
- taxonomiesSearch.commit(
+ this.$store.commit(
"taxonomiesSearch/setSearchTaxonomies",
this.value,
);
@@ -227,7 +224,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_UserDefinedTag.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_UserDefinedTag.vue.html
index 050daa1b2c..6144630274 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_UserDefinedTag.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_UserDefinedTag.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_UserDefinedTag.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_UserDefinedTag.vue.html index 050daa1b2c..6144630274 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_UserDefinedTag.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GeneralComponents_UserDefinedTag.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/AdvancedSearch/Qu
</template>
<script>
import { mapActions, mapGetters } from "vuex";
-
-import userDefinedTagsSearch from "@/store";
-
import AutoCompleteComponent from "../UtilComponents/AutoCompleteComponent.vue";
export default {
@@ -156,7 +153,7 @@ Source: components/Records/Search/Input/AdvancedSearch/Qu
handler(open) {
if (open) {
if (this.value && this.value.length) {
- userDefinedTagsSearch.commit(
+ this.$store.commit(
"userDefinedTagsSearch/setSearchUserDefinedTags",
this.value,
);
@@ -227,7 +224,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_DatabaseRule.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_DatabaseRule.vue.html
index 22eb5c856d..8ee7fba06f 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_DatabaseRule.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_DatabaseRule.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_DatabaseRule.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_DatabaseRule.vue.html index 22eb5c856d..8ee7fba06f 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_DatabaseRule.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_DatabaseRule.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/AdvancedSearch/Qu
</template>
<script>
-import { sortBy } from "lodash";
+import { sortBy } from "lodash-es";
import {
AccessMethods,
@@ -315,7 +315,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_FairassistRule.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_FairassistRule.vue.html
index 47533f8072..9a78f897d9 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_FairassistRule.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_FairassistRule.vue.html
@@ -40,7 +40,7 @@
Source: components/Records/Search/Input/AdvancedSearch/Qu
</template>
<script>
-import { sortBy } from "lodash";
+import { sortBy } from "lodash-es";
import {
AssociatedTests,
@@ -252,7 +252,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_GeneralRule.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_GeneralRule.vue.html
index 280901e2db..c66c4eefa3 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_GeneralRule.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_GeneralRule.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_GroupCtrlSlot.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_GroupCtrlSlot.vue.html index 8f71d33962..a61937dd7d 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_GroupCtrlSlot.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_GroupCtrlSlot.vue.html @@ -40,7 +40,7 @@Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_PolicyRule.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_PolicyRule.vue.html index 75a7a0de3c..cbc82c4299 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_PolicyRule.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_PolicyRule.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/AdvancedSearch/Qu
</template>
<script>
-import { sortBy } from "lodash";
+import { sortBy } from "lodash-es";
import {
DataAvailabilityStatement,
@@ -328,7 +328,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_StandardRule.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_StandardRule.vue.html
index 407e6c9625..53258deca9 100644
--- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_StandardRule.vue.html
+++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderComponents_GroupCtrlSlot_StandardRule.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderView.vue.html b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderView.vue.html index b67cf133ea..32736d9561 100644 --- a/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderView.vue.html +++ b/documentation/html/components_Records_Search_Input_AdvancedSearch_QueryBuilderView.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/AdvancedSearch/Qu
<script>
import QueryBuilder from "query-builder-vue-3";
import { mapGetters } from "vuex";
-
-import advancedSearch from "@/store";
import { uniqueValues } from "@/utils/advancedSearchUtils";
import {
@@ -579,12 +577,12 @@ Source: components/Records/Search/Input/AdvancedSearch/Qu
watch: {
query(newValue) {
newValue = JSON.parse(JSON.stringify(newValue));
- advancedSearch.commit("advancedSearch/setAdvancedSearch", newValue);
+ this.$store.commit("advancedSearch/setAdvancedSearch", newValue);
//Updating edit advanced search only if newValue has some data
if (newValue["children"] && newValue["children"].length) {
newValue["children"].forEach((item) => {
if (item["children"] && item["children"].length) {
- advancedSearch.commit(
+ this.$store.commit(
"advancedSearch/setEditAdvancedSearch",
newValue,
);
@@ -678,7 +676,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_FilterAutocomplete.vue.html b/documentation/html/components_Records_Search_Input_FilterAutocomplete.vue.html
index 889e9c7648..b490919bf7 100644
--- a/documentation/html/components_Records_Search_Input_FilterAutocomplete.vue.html
+++ b/documentation/html/components_Records_Search_Input_FilterAutocomplete.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_FilterAutocomplete.vue.html b/documentation/html/components_Records_Search_Input_FilterAutocomplete.vue.html index 889e9c7648..b490919bf7 100644 --- a/documentation/html/components_Records_Search_Input_FilterAutocomplete.vue.html +++ b/documentation/html/components_Records_Search_Input_FilterAutocomplete.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/FilterAutocomplet
import { mapGetters, mapState } from "vuex";
import clearString from "@/utils/stringUtils";
-import { capitalize } from "lodash";
+import { capitalize } from "lodash-es";
export default {
name: "FilterAutocomplete",
@@ -221,7 +221,8 @@ Source: components/Records/Search/Input/FilterAutocomplet
currentParams[filterName] = encodeURIComponent(
_module.selectedValues.join(","),
);
- } else {
+ }
+ else {
let newParam = [];
_module.selectedValues.forEach(function (val) {
newParam.push(encodeURIComponent(val));
@@ -234,7 +235,8 @@ Source: components/Records/Search/Input/FilterAutocomplet
query: currentParams,
});
}
- } else {
+ }
+ else {
if (
_module.selectedValues === null ||
_module.selectedValues.length === 0
@@ -245,7 +247,8 @@ Source: components/Records/Search/Input/FilterAutocomplet
name: _module.$route.name,
query: currentParams,
});
- } else {
+ }
+ else {
let newParams = [];
let existingValues =
currentParams[_module.filter.filterName].split(",");
@@ -373,7 +376,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_FilterButton.vue.html b/documentation/html/components_Records_Search_Input_FilterButton.vue.html
index b809eb644c..d325973120 100644
--- a/documentation/html/components_Records_Search_Input_FilterButton.vue.html
+++ b/documentation/html/components_Records_Search_Input_FilterButton.vue.html
@@ -40,7 +40,7 @@
Source: components/Records/Search/Input/FilterAutocomplet
query: currentParams,
});
}
- } else {
+ }
+ else {
if (
_module.selectedValues === null ||
_module.selectedValues.length === 0
@@ -245,7 +247,8 @@ Source: components/Records/Search/Input/FilterAutocomplet
name: _module.$route.name,
query: currentParams,
});
- } else {
+ }
+ else {
let newParams = [];
let existingValues =
currentParams[_module.filter.filterName].split(",");
@@ -373,7 +376,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_FilterButton.vue.html b/documentation/html/components_Records_Search_Input_FilterButton.vue.html
index b809eb644c..d325973120 100644
--- a/documentation/html/components_Records_Search_Input_FilterButton.vue.html
+++ b/documentation/html/components_Records_Search_Input_FilterButton.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_Input_FilterButton.vue.html b/documentation/html/components_Records_Search_Input_FilterButton.vue.html index b809eb644c..d325973120 100644 --- a/documentation/html/components_Records_Search_Input_FilterButton.vue.html +++ b/documentation/html/components_Records_Search_Input_FilterButton.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/Input/FilterButton.vue<
</template>
<script>
-import { isEqual } from "lodash";
+import { isEqual } from "lodash-es";
import { mapActions } from "vuex";
import customIcons from "@/plugins/icons";
@@ -175,10 +175,12 @@ Source: components/Records/Search/Input/FilterButton.vue<
if (fieldValue === null) {
this.itemModified.active =
title === "all" || title === "match all terms";
- } else {
+ }
+ else {
if (currentValue === undefined) {
this.itemModified.active = false;
- } else {
+ }
+ else {
this.itemModified.active = currentValue.toString() === fieldValue;
}
}
@@ -197,8 +199,8 @@ Source: components/Records/Search/Input/FilterButton.vue<
});
Object.prototype.hasOwnProperty.call(selectedItem, "value")
? (currentQuery[selectedItem.filterName] = encodeURIComponent(
- selectedItem.value,
- ))
+ selectedItem.value,
+ ))
: delete currentQuery[selectedItem.filterName];
if (!isEqual(currentQuery, oldQuery)) {
currentQuery["page"] = 1;
@@ -285,7 +287,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_SearchInput.vue.html b/documentation/html/components_Records_Search_Input_SearchInput.vue.html
index d1039ae845..01902b9382 100644
--- a/documentation/html/components_Records_Search_Input_SearchInput.vue.html
+++ b/documentation/html/components_Records_Search_Input_SearchInput.vue.html
@@ -40,7 +40,7 @@
Source: components/Records/Search/Input/FilterButton.vue<
});
Object.prototype.hasOwnProperty.call(selectedItem, "value")
? (currentQuery[selectedItem.filterName] = encodeURIComponent(
- selectedItem.value,
- ))
+ selectedItem.value,
+ ))
: delete currentQuery[selectedItem.filterName];
if (!isEqual(currentQuery, oldQuery)) {
currentQuery["page"] = 1;
@@ -285,7 +287,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_Input_SearchInput.vue.html b/documentation/html/components_Records_Search_Input_SearchInput.vue.html
index d1039ae845..01902b9382 100644
--- a/documentation/html/components_Records_Search_Input_SearchInput.vue.html
+++ b/documentation/html/components_Records_Search_Input_SearchInput.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_SaveSearchButton.vue.html b/documentation/html/components_Records_Search_SaveSearch_SaveSearchButton.vue.html index 539bdbb8c3..a4cf08bc6b 100644 --- a/documentation/html/components_Records_Search_SaveSearch_SaveSearchButton.vue.html +++ b/documentation/html/components_Records_Search_SaveSearch_SaveSearchButton.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/SaveSearch/SaveSearchBu
<script>
import { mapState } from "vuex";
-import saveSearch from "@/store";
+// import saveSearch from "@/store";
export default {
name: "SaveSearchButton",
@@ -119,7 +119,7 @@ Source: components/Records/Search/SaveSearch/SaveSearchBu
* Save the advancedSearch Results
*/
async saveSearchResults() {
- saveSearch.commit("saveSearch/setSaveSearchStepperDialog", true);
+ this.$store.commit("saveSearch/setSaveSearchStepperDialog", true);
},
/**
* Goto To login page if user is not loggedIn
@@ -182,7 +182,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_SaveSearchStepper.vue.html b/documentation/html/components_Records_Search_SaveSearch_SaveSearchStepper.vue.html
index 2d287fe700..20ffd575fd 100644
--- a/documentation/html/components_Records_Search_SaveSearch_SaveSearchStepper.vue.html
+++ b/documentation/html/components_Records_Search_SaveSearch_SaveSearchStepper.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_SaveSearchStepper.vue.html b/documentation/html/components_Records_Search_SaveSearch_SaveSearchStepper.vue.html index 2d287fe700..20ffd575fd 100644 --- a/documentation/html/components_Records_Search_SaveSearch_SaveSearchStepper.vue.html +++ b/documentation/html/components_Records_Search_SaveSearch_SaveSearchStepper.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/SaveSearch/SaveSearchSt
import { mapActions, mapGetters, mapState } from "vuex";
import RESTClient from "@/lib/Client/RESTClient";
-import saveSearch from "@/store";
+// import saveSearch from "@/store";
import { isRequired } from "@/utils/rules.js";
import {
@@ -379,13 +379,13 @@ Source: components/Records/Search/SaveSearch/SaveSearchSt
);
//Hide stepper and show result section
- saveSearch.commit("saveSearch/setShowStepper", false);
+ this.$store.commit("saveSearch/setShowStepper", false);
//Check the success or error response
if (searchResult?.error) {
- saveSearch.commit("saveSearch/setSaveSearchStatus", false);
+ this.$store.commit("saveSearch/setSaveSearchStatus", false);
} else {
- saveSearch.commit("saveSearch/setSaveSearchStatus", true);
+ this.$store.commit("saveSearch/setSaveSearchStatus", true);
}
this.saveSearchProfile(searchResult);
@@ -396,7 +396,7 @@ Source: components/Records/Search/SaveSearch/SaveSearchSt
* Save the search result for the user profile
*/
saveSearchProfile(data) {
- saveSearch.commit("saveSearch/setSaveSearchResult", data);
+ this.$store.commit("saveSearch/setSaveSearchResult", data);
//Reset the textfields
this.searchName = "";
this.searchComment = "";
@@ -406,7 +406,7 @@ Source: components/Records/Search/SaveSearch/SaveSearchSt
* Close Stepper Dialog Box method
*/
closeStepperDialog() {
- saveSearch.commit("saveSearch/setSaveSearchStepperDialog", false);
+ this.$store.commit("saveSearch/setSaveSearchStepperDialog", false);
},
/**
@@ -464,7 +464,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_OrganisationStepper.vue.html b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_OrganisationStepper.vue.html
index afae28eb6c..377f034e21 100644
--- a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_OrganisationStepper.vue.html
+++ b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_OrganisationStepper.vue.html
@@ -40,7 +40,7 @@
Source: components/Records/Search/SaveSearch/SaveSearchSt
* Save the search result for the user profile
*/
saveSearchProfile(data) {
- saveSearch.commit("saveSearch/setSaveSearchResult", data);
+ this.$store.commit("saveSearch/setSaveSearchResult", data);
//Reset the textfields
this.searchName = "";
this.searchComment = "";
@@ -406,7 +406,7 @@ Source: components/Records/Search/SaveSearch/SaveSearchSt
* Close Stepper Dialog Box method
*/
closeStepperDialog() {
- saveSearch.commit("saveSearch/setSaveSearchStepperDialog", false);
+ this.$store.commit("saveSearch/setSaveSearchStepperDialog", false);
},
/**
@@ -464,7 +464,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_OrganisationStepper.vue.html b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_OrganisationStepper.vue.html
index afae28eb6c..377f034e21 100644
--- a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_OrganisationStepper.vue.html
+++ b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_OrganisationStepper.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_OrganisationStepper.vue.html b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_OrganisationStepper.vue.html index afae28eb6c..377f034e21 100644 --- a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_OrganisationStepper.vue.html +++ b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_OrganisationStepper.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/SaveSearch/StepperCompo
<script>
import { mapActions, mapGetters, mapState } from "vuex";
-import saveSearch from "@/store";
+// import saveSearch from "@/store";
import { removeItem } from "@/utils/advancedSearchUtils";
export default {
@@ -174,7 +174,7 @@ Source: components/Records/Search/SaveSearch/StepperCompo
this.fetchSearchOrganisations(val);
},
organisationSelected(val) {
- saveSearch.commit("saveSearch/setOrganisationSelected", val);
+ this.$store.commit("saveSearch/setOrganisationSelected", val);
},
},
@@ -259,7 +259,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_PolicyStepper.vue.html b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_PolicyStepper.vue.html
index 0ecbdf60df..65a125bfb6 100644
--- a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_PolicyStepper.vue.html
+++ b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_PolicyStepper.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_PolicyStepper.vue.html b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_PolicyStepper.vue.html index 0ecbdf60df..65a125bfb6 100644 --- a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_PolicyStepper.vue.html +++ b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_PolicyStepper.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/SaveSearch/StepperCompo
<script>
import { mapActions, mapGetters, mapState } from "vuex";
-import saveSearch from "@/store";
+// import saveSearch from "@/store";
import { removeItem } from "@/utils/advancedSearchUtils";
export default {
@@ -171,7 +171,7 @@ Source: components/Records/Search/SaveSearch/StepperCompo
},
policySelected(val) {
- saveSearch.commit("saveSearch/setPolicySelected", val);
+ this.$store.commit("saveSearch/setPolicySelected", val);
},
},
async mounted() {
@@ -259,7 +259,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_ResultCard.vue.html b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_ResultCard.vue.html
index 5fa157823c..af0d46bf40 100644
--- a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_ResultCard.vue.html
+++ b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_ResultCard.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_ResultCard.vue.html b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_ResultCard.vue.html index 5fa157823c..af0d46bf40 100644 --- a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_ResultCard.vue.html +++ b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_ResultCard.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/SaveSearch/StepperCompo
<script>
import { mapActions, mapGetters } from "vuex";
-import saveSearch from "@/store";
+// import saveSearch from "@/store";
export default {
name: "ResultCard",
@@ -196,8 +196,8 @@ Source: components/Records/Search/SaveSearch/StepperCompo
restartStepper() {
this.resetSaveSearchDialog();
this.$emit("restartStepper", 1);
- saveSearch.commit("saveSearch/setShowStepper", true);
- saveSearch.commit("saveSearch/setSaveSearchStepperDialog", true);
+ this.$store.commit("saveSearch/setShowStepper", true);
+ this.$store.commit("saveSearch/setSaveSearchStepperDialog", true);
},
/**
@@ -207,7 +207,7 @@ Source: components/Records/Search/SaveSearch/StepperCompo
if (this.getSaveSearchStatus) {
this.resetSaveSearchDialog();
}
- saveSearch.commit("saveSearch/setSaveSearchStepperDialog", false);
+ this.$store.commit("saveSearch/setSaveSearchStepperDialog", false);
this.resetSaveSearchDialog();
this.$emit("restartStepper", 0);
},
@@ -259,7 +259,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_StepperDialogHeader.vue.html b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_StepperDialogHeader.vue.html
index 82dd0cbe5d..9513368d3b 100644
--- a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_StepperDialogHeader.vue.html
+++ b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_StepperDialogHeader.vue.html
@@ -40,7 +40,7 @@
Source: components/Records/Search/SaveSearch/StepperCompo
if (this.getSaveSearchStatus) {
this.resetSaveSearchDialog();
}
- saveSearch.commit("saveSearch/setSaveSearchStepperDialog", false);
+ this.$store.commit("saveSearch/setSaveSearchStepperDialog", false);
this.resetSaveSearchDialog();
this.$emit("restartStepper", 0);
},
@@ -259,7 +259,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_StepperDialogHeader.vue.html b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_StepperDialogHeader.vue.html
index 82dd0cbe5d..9513368d3b 100644
--- a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_StepperDialogHeader.vue.html
+++ b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_StepperDialogHeader.vue.html
@@ -40,7 +40,7 @@
Source: components/Records/Search/SaveSearch/StepperCompo
<script>
import { mapActions, mapGetters } from "vuex";
-import saveSearch from "@/store";
+// import saveSearch from "@/store";
export default {
name: "StepperDialogHeader",
@@ -132,7 +132,7 @@ Source: components/Records/Search/SaveSearch/StepperCompo
this.resetSaveSearchDialog();
this.$emit("restartStepper", 0);
}
- saveSearch.commit("saveSearch/setSaveSearchStepperDialog", false);
+ this.$store.commit("saveSearch/setSaveSearchStepperDialog", false);
},
},
};
@@ -182,7 +182,7 @@ Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_UserStepper.vue.html b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_UserStepper.vue.html
index 50c8164c87..2cf82e1bfc 100644
--- a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_UserStepper.vue.html
+++ b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_UserStepper.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_UserStepper.vue.html b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_UserStepper.vue.html index 50c8164c87..2cf82e1bfc 100644 --- a/documentation/html/components_Records_Search_SaveSearch_StepperComponents_UserStepper.vue.html +++ b/documentation/html/components_Records_Search_SaveSearch_StepperComponents_UserStepper.vue.html @@ -40,7 +40,7 @@Source: components/Records/Search/SaveSearch/StepperCompo
</template>
<script>
-import { mapActions, mapState } from "vuex";
+import {mapActions, mapState} from "vuex";
-import saveSearch from "@/store";
-import { removeItem } from "@/utils/advancedSearchUtils";
+// import saveSearch from "@/store";
+import {removeItem} from "@/utils/advancedSearchUtils";
export default {
name: "UserStepper",
@@ -148,7 +148,7 @@ Source: components/Records/Search/SaveSearch/StepperCompo
},
userSelected(val) {
- saveSearch.commit("saveSearch/setUserSelected", val);
+ this.$store.commit("saveSearch/setUserSelected", val);
},
},
@@ -211,7 +211,7 @@ Search results
diff --git a/documentation/html/components_Users_Profiles_Private_ViewSavedSearchesTable.vue.html b/documentation/html/components_Users_Profiles_Private_ViewSavedSearchesTable.vue.html
index 0d43802ab0..6e2abaebd4 100644
--- a/documentation/html/components_Users_Profiles_Private_ViewSavedSearchesTable.vue.html
+++ b/documentation/html/components_Users_Profiles_Private_ViewSavedSearchesTable.vue.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/components_Users_Profiles_Private_ViewSavedSearchesTable.vue.html b/documentation/html/components_Users_Profiles_Private_ViewSavedSearchesTable.vue.html index 0d43802ab0..6e2abaebd4 100644 --- a/documentation/html/components_Users_Profiles_Private_ViewSavedSearchesTable.vue.html +++ b/documentation/html/components_Users_Profiles_Private_ViewSavedSearchesTable.vue.html @@ -40,7 +40,7 @@Source: components/Users/Profiles/Private/ViewSavedSearch
import { mapActions, mapGetters, mapState } from "vuex";
import RESTClient from "@/lib/Client/RESTClient";
-import advancedSearch from "@/store";
-import saveSearch from "@/store";
+// import advancedSearch from "@/store";
+// import saveSearch from "@/store";
const restClient = new RESTClient();
@@ -315,13 +315,15 @@ Source: components/Users/Profiles/Private/ViewSavedSearch
await this.getUser();
createdSearches = this.getUserRecords.user["createdSearches"];
savedSearches = this.getUserRecords.user["savedSearches"];
- } else if (searchUnlinked) {
+ }
+ else if (searchUnlinked) {
let userId = this.$route.params.id;
let userR = await this.getPublicUser(userId);
await this.getUser();
createdSearches = userR.user["createdSearches"];
savedSearches = userR.user["savedSearches"];
- } else {
+ }
+ else {
createdSearches = this.createdSearches;
savedSearches = this.savedSearches;
}
@@ -406,7 +408,7 @@ Source: components/Users/Profiles/Private/ViewSavedSearch
);
//Commit the updated result to store
- saveSearch.commit("saveSearch/setSaveSearchResult", updatedSearchResult);
+ this.$store.commit("saveSearch/setSaveSearchResult", updatedSearchResult);
await this.combinedSearches(false, true);
@@ -425,10 +427,7 @@ Source: components/Users/Profiles/Private/ViewSavedSearch
* Open advancedSearch Dialog Box
*/
openAdvancedSearch() {
- advancedSearch.commit(
- "advancedSearch/setAdvancedSearchDialogStatus",
- true,
- );
+ this.$store.commit("advancedSearch/setAdvancedSearchDialogStatus", true);
},
/**
* Filter creator from additional users list
@@ -510,7 +509,7 @@ Search results
diff --git a/documentation/html/global.html b/documentation/html/global.html
index 5c43d0a26c..089523ee27 100644
--- a/documentation/html/global.html
+++ b/documentation/html/global.html
@@ -40,7 +40,7 @@
Source: components/Users/Profiles/Private/ViewSavedSearch
);
//Commit the updated result to store
- saveSearch.commit("saveSearch/setSaveSearchResult", updatedSearchResult);
+ this.$store.commit("saveSearch/setSaveSearchResult", updatedSearchResult);
await this.combinedSearches(false, true);
@@ -425,10 +427,7 @@ Source: components/Users/Profiles/Private/ViewSavedSearch
* Open advancedSearch Dialog Box
*/
openAdvancedSearch() {
- advancedSearch.commit(
- "advancedSearch/setAdvancedSearchDialogStatus",
- true,
- );
+ this.$store.commit("advancedSearch/setAdvancedSearchDialogStatus", true);
},
/**
* Filter creator from additional users list
@@ -510,7 +509,7 @@ Search results
diff --git a/documentation/html/global.html b/documentation/html/global.html
index 5c43d0a26c..089523ee27 100644
--- a/documentation/html/global.html
+++ b/documentation/html/global.html
@@ -40,7 +40,7 @@
Search results
diff --git a/documentation/html/global.html b/documentation/html/global.html index 5c43d0a26c..089523ee27 100644 --- a/documentation/html/global.html +++ b/documentation/html/global.html @@ -40,7 +40,7 @@Type:
@@ -518,7 +518,7 @@<constant> para
@@ -905,7 +905,7 @@ Properties:
@@ -2314,6 +2314,111 @@ Returns:
+
+
+
+
+
+
+ ownKeys()
+
+
+
+
+
+
+
+ !
+Sortable 1.14.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - License:
+ -
+
+ - MIT
+
+
+
+
+
+
+
+
+
+ - Source:
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2449,7 +2554,7 @@ Parameters:
@@ -2859,7 +2964,7 @@ Search results
diff --git a/documentation/html/index.html b/documentation/html/index.html
index 5dc44762a6..77835bb895 100644
--- a/documentation/html/index.html
+++ b/documentation/html/index.html
@@ -40,7 +40,7 @@
ownKeys()
+ + +! +Sortable 1.14.0
+-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- License: +
-
+
-
+
- MIT +
+
+
+
+
+
+
+
+ - Source: +
- + + + + + + + + + +
Search results
diff --git a/documentation/html/lib_Client_ExternalClients.js.html b/documentation/html/lib_Client_ExternalClients.js.html index 17dc9e3482..e93596859a 100644 --- a/documentation/html/lib_Client_ExternalClients.js.html +++ b/documentation/html/lib_Client_ExternalClients.js.html @@ -40,7 +40,7 @@Search results
diff --git a/documentation/html/lib_Client_RESTClient.js.html b/documentation/html/lib_Client_RESTClient.js.html index adb0fb581c..81048f2d5d 100644 --- a/documentation/html/lib_Client_RESTClient.js.html +++ b/documentation/html/lib_Client_RESTClient.js.html @@ -40,7 +40,7 @@Search results
diff --git a/documentation/html/lib_GraphClient_GraphClient.js.html b/documentation/html/lib_GraphClient_GraphClient.js.html index 996633027b..a8d1ba6c98 100644 --- a/documentation/html/lib_GraphClient_GraphClient.js.html +++ b/documentation/html/lib_GraphClient_GraphClient.js.html @@ -40,7 +40,7 @@Search results
diff --git a/documentation/html/module-Home.html b/documentation/html/module-Home.html index a9114a8bc7..7e1e93e1d1 100644 --- a/documentation/html/module-Home.html +++ b/documentation/html/module-Home.html @@ -40,7 +40,7 @@Module: Home
@@ -220,7 +220,7 @@Search results
diff --git a/documentation/html/module-Home_backup.html b/documentation/html/module-Home_backup.html new file mode 100644 index 0000000000..6ba8c50e9d --- /dev/null +++ b/documentation/html/module-Home_backup.html @@ -0,0 +1,314 @@ + + + + + + +Module: Home_backup
+Component to handle the front page (landing page)
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- Source: +
-
+
-
+
- + views/Home/Home_backup.vue, + line 16 + +
+
+
+
+
+
+
+
+
Search results
diff --git a/documentation/html/module-NewRecord.html b/documentation/html/module-NewRecord.html index 7e44d05e9a..403e46da29 100644 --- a/documentation/html/module-NewRecord.html +++ b/documentation/html/module-NewRecord.html @@ -40,7 +40,7 @@Search results
diff --git a/documentation/html/module-Pagination.html b/documentation/html/module-Pagination.html index 3c81727121..448c81e1e7 100644 --- a/documentation/html/module-Pagination.html +++ b/documentation/html/module-Pagination.html @@ -40,7 +40,7 @@Parameters:
@@ -444,7 +444,7 @@Parameters:
@@ -527,7 +527,7 @@Search results
diff --git a/documentation/html/module-Signup.html b/documentation/html/module-Signup.html index 3c1e7064c0..3a5a3fa3d4 100644 --- a/documentation/html/module-Signup.html +++ b/documentation/html/module-Signup.html @@ -40,7 +40,7 @@Search results
diff --git a/documentation/html/module-User.html b/documentation/html/module-User.html index 5972c8f87b..aeaa384b7e 100644 --- a/documentation/html/module-User.html +++ b/documentation/html/module-User.html @@ -40,7 +40,7 @@Search results
diff --git a/documentation/html/modules.list.html b/documentation/html/modules.list.html index c5eaeb7945..1cdaacfb7a 100644 --- a/documentation/html/modules.list.html +++ b/documentation/html/modules.list.html @@ -40,7 +40,7 @@Type:
@@ -538,7 +538,7 @@<constant> para
@@ -925,7 +925,7 @@ Properties:
@@ -2334,6 +2334,111 @@ Returns:
+
+
+
+
+
+
+ ownKeys()
+
+
+
+
+
+
+
+ !
+Sortable 1.14.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - License:
+ -
+
+ - MIT
+
+
+
+
+
+
+
+
+
+ - Source:
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2469,7 +2574,7 @@ Parameters:
@@ -2879,7 +2984,7 @@ Search results
diff --git a/documentation/html/namespaces.list.html b/documentation/html/namespaces.list.html
index 6edeb150ab..b529a7e96d 100644
--- a/documentation/html/namespaces.list.html
+++ b/documentation/html/namespaces.list.html
@@ -40,7 +40,7 @@
ownKeys()
+ + +! +Sortable 1.14.0
+-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- License: +
-
+
-
+
- MIT +
+
+
+
+
+
+
+
+ - Source: +
- + + + + + + + + + +
Type:
@@ -538,7 +538,7 @@<constant> para
@@ -925,7 +925,7 @@ Properties:
@@ -2334,6 +2334,111 @@ Returns:
+
+
+
+
+
+
+ ownKeys()
+
+
+
+
+
+
+
+ !
+Sortable 1.14.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - License:
+ -
+
+ - MIT
+
+
+
+
+
+
+
+
+
+ - Source:
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2469,7 +2574,7 @@ Parameters:
@@ -2879,7 +2984,7 @@ Search results
diff --git a/documentation/html/pages_all_+data.js.html b/documentation/html/pages_all_+data.js.html
new file mode 100644
index 0000000000..b24070876d
--- /dev/null
+++ b/documentation/html/pages_all_+data.js.html
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+ FAIRsharing.org Source: pages/all/+data.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Source: pages/all/+data.js
+
+
+
+ import Client from "@/lib/GraphClient/GraphClient.js";
+import recordQuery from "@/lib/GraphClient/queries/getRecordSEO.json";
+
+export async function data(pageContext) {
+ const paramURL = pageContext.routeParams["*"];
+
+ if (!paramURL || paramURL.trim() === "" || paramURL === "index") {
+ return { record: null };
+ }
+
+ // Check for record page in id or DOI format
+ const FAIRsharingDOIregex = /FAIRsharing\.[a-zA-Z0-9]+/;
+ if (!isNaN(paramURL) || FAIRsharingDOIregex.test(paramURL)) {
+ return recordPage(paramURL);
+ }
+}
+
+/**
+ * Record Page data
+ * @param paramURL
+ * @return {Promise<{record}|{record: null}>}
+ */
+async function recordPage(paramURL) {
+ // Mirror the core execution logic from the recorddata.js action
+ const client = new Client();
+ const individualizedQuery = { ...recordQuery };
+ individualizedQuery.queryParam = {
+ id: paramURL,
+ };
+
+ try {
+ const responseData = await client.executeQuery(individualizedQuery);
+ //Extract the clean data object out to Vike's pageContext
+ return {
+ record: responseData?.fairsharingRecord || null,
+ };
+ }
+ catch (error) {
+ console.error(
+ "Failed to execute server-side SEO query for ID:",
+ paramURL,
+ error,
+ );
+ return { record: null };
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/documentation/html/quicksearch.html b/documentation/html/quicksearch.html
index 1db968366e..f6b3534b11 100644
--- a/documentation/html/quicksearch.html
+++ b/documentation/html/quicksearch.html
@@ -7,7 +7,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Source: utils/query-builder-vue-3/dist/query-builder-vue-3.js
+
+
+
+ var __defProp = Object.defineProperty;
+var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+var __publicField = (obj, key, value) => {
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
+ return value;
+};
+import { resolveComponent, TransitionGroup, defineComponent, h, nextTick, computed, openBlock, createElementBlock, unref, createCommentVNode, renderSlot, normalizeProps, mergeProps, Fragment, createElementVNode, toDisplayString, createBlock, resolveDynamicComponent, isRef, createSlots, renderList, withCtx, guardReactiveProps, withModifiers, pushScopeId, popScopeId, inject, watch, onMounted, ref, withDirectives, vModelSelect, createVNode, provide } from "vue";
+function isRule(param) {
+ if (typeof param !== "object" || param === null) {
+ return false;
+ }
+ if (typeof param.identifier !== "string") {
+ return false;
+ }
+ const { hasOwnProperty } = Object.prototype;
+ return hasOwnProperty.call(param, "value");
+}
+function isRuleSet(param) {
+ if (typeof param !== "object" || param === null) {
+ return false;
+ }
+ if (typeof param.operatorIdentifier !== "string") {
+ return false;
+ }
+ return Array.isArray(param.children) && param.children.every((child) => isRule(child) || isRuleSet(child));
+}
+function isOperatorDefinition(param) {
+ if (typeof param !== "object" || param === null) {
+ return false;
+ }
+ if (typeof param.identifier !== "string") {
+ return false;
+ }
+ return typeof param.name === "string";
+}
+function isRuleDefinition(param) {
+ if (typeof param !== "object" || param === null) {
+ return false;
+ }
+ if (typeof param.identifier !== "string") {
+ return false;
+ }
+ if (typeof param.name !== "string") {
+ return false;
+ }
+ return ["function", "object", "string"].includes(typeof param.component);
+}
+function isQueryBuilderConfig(param) {
+ if (typeof param !== "object" || param === null) {
+ return false;
+ }
+ return Array.isArray(param.operators) && param.operators.every((operator) => isOperatorDefinition(operator)) && Array.isArray(param.rules) && param.rules.every((rule) => isRuleDefinition(rule)) && (!param.colors || Array.isArray(param.colors) && param.colors.every((color) => typeof color === "string")) && (typeof param.maxDepth === "undefined" || typeof param.maxDepth === "number" && param.maxDepth >= 0);
+}
+function mitt(n) {
+ return { all: n = n || /* @__PURE__ */ new Map(), on: function(t, e) {
+ var i = n.get(t);
+ i ? i.push(e) : n.set(t, [e]);
+ }, off: function(t, e) {
+ var i = n.get(t);
+ i && (e ? i.splice(i.indexOf(e) >>> 0, 1) : n.set(t, []));
+ }, emit: function(t, e) {
+ var i = n.get(t);
+ i && i.slice().map(function(n2) {
+ n2(e);
+ }), (i = n.get("*")) && i.slice().map(function(n2) {
+ n2(t, e);
+ });
+ } };
+}
+const QueryBuilderGroupSym = Symbol("QueryBuilderGroup");
+function getNextGroup(group) {
+ if (group.depth < 1) {
+ return group;
+ }
+ let vm = group;
+ do {
+ vm = vm.$parent;
+ } while (vm.type !== QueryBuilderGroupSym);
+ return vm;
+}
+function getCommonAncestor(nodeA, nodeB) {
+ let a = nodeA;
+ let b = nodeB;
+ if (a.depth !== b.depth) {
+ let lower = a.depth > b.depth ? a : b;
+ const higher = a.depth < b.depth ? a : b;
+ while (lower.depth !== higher.depth) {
+ lower = getNextGroup(lower);
+ }
+ a = lower;
+ b = higher;
+ }
+ while (a !== b) {
+ a = getNextGroup(a);
+ b = getNextGroup(b);
+ }
+ return a;
+}
+function triggerUpdate(adder, remover) {
+ const commonAncestor = getCommonAncestor(adder.component, remover.component);
+ if (![adder.component, remover.component].includes(commonAncestor)) {
+ mergeViaParent(commonAncestor, adder, remover);
+ return;
+ }
+ mergeViaNode(commonAncestor, adder, remover);
+}
+function mergeViaParent(commonAncestor, adder, remover) {
+ let children = null;
+ commonAncestor.trap = (position, newChild) => {
+ if (children === null) {
+ children = [...commonAncestor.children];
+ children.splice(position, 1, newChild);
+ return;
+ }
+ commonAncestor.trap = null;
+ children.splice(position, 1, newChild);
+ commonAncestor.$emit(
+ "query-update",
+ {
+ operatorIdentifier: commonAncestor.selectedOperator,
+ children
+ }
+ );
+ };
+ adder.component.$emit("query-update", adder.ev);
+ remover.component.$emit("query-update", remover.ev);
+}
+function mergeViaNode(parentEmitter, adder, remover) {
+ const childEmitter = parentEmitter === adder.component ? remover : adder;
+ const children = [...parentEmitter.children];
+ parentEmitter.trap = (position, newChild) => {
+ parentEmitter.trap = null;
+ children.splice(position, 1, newChild);
+ if (parentEmitter === adder.component) {
+ children.splice(adder.affectedIdx, 0, adder.ev.children[adder.affectedIdx]);
+ } else {
+ children.splice(remover.affectedIdx, 1);
+ }
+ parentEmitter.$emit(
+ "query-update",
+ {
+ operatorIdentifier: parentEmitter.selectedOperator,
+ children
+ }
+ );
+ };
+ childEmitter.component.$emit("query-update", childEmitter.ev);
+}
+class MergeTrap {
+ constructor() {
+ __publicField(this, "eventBus");
+ this.eventBus = mitt();
+ Promise.all([
+ new Promise((res) => this.eventBus.on("adder-registered", res)),
+ new Promise((res) => this.eventBus.on("remover-registered", res))
+ ]).then((args) => triggerUpdate(args[0], args[1])).then(() => this.eventBus.all.clear());
+ }
+ registerSortUpdate(update) {
+ if (update.adding) {
+ return this.registerAdder(update);
+ }
+ return this.registerRemover(update);
+ }
+ registerAdder(ev) {
+ this.eventBus.emit("adder-registered", ev);
+ }
+ registerRemover(ev) {
+ this.eventBus.emit("remover-registered", ev);
+ }
+}
+const _imports_0 = "data:image/svg+xml;base64,PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhcyIgZGF0YS1pY29uPSJncmlwLXZlcnRpY2FsIiBjbGFzcz0ic3ZnLWlubGluZS0tZmEgZmEtZ3JpcC12ZXJ0aWNhbCBmYS13LTEwIiByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDMyMCA1MTIiPjxwYXRoIGZpbGw9IiNCQkIiIGQ9Ik05NiAzMkgzMkMxNC4zMyAzMiAwIDQ2LjMzIDAgNjR2NjRjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg2NGMxNy42NyAwIDMyLTE0LjMzIDMyLTMyVjY0YzAtMTcuNjctMTQuMzMtMzItMzItMzJ6bTAgMTYwSDMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjY0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNjRjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtNjRjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnptMCAxNjBIMzJjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2NjRjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg2NGMxNy42NyAwIDMyLTE0LjMzIDMyLTMydi02NGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyek0yODggMzJoLTY0Yy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjY0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNjRjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMlY2NGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyem0wIDE2MGgtNjRjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2NjRjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg2NGMxNy42NyAwIDMyLTE0LjMzIDMyLTMydi02NGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyem0wIDE2MGgtNjRjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2NjRjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg2NGMxNy42NyAwIDMyLTE0LjMzIDMyLTMydi02NGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyeiI+PC9wYXRoPjwvc3ZnPgo=";
+/**!
+ * Sortable 1.14.0
+ * @author RubaXa <trash@rubaxa.org>
+ * @author owenm <owen23355@gmail.com>
+ * @license MIT
+ */
+function ownKeys(object, enumerableOnly) {
+ var keys = Object.keys(object);
+ if (Object.getOwnPropertySymbols) {
+ var symbols = Object.getOwnPropertySymbols(object);
+ if (enumerableOnly) {
+ symbols = symbols.filter(function(sym) {
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
+ });
+ }
+ keys.push.apply(keys, symbols);
+ }
+ return keys;
+}
+function _objectSpread2(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i] != null ? arguments[i] : {};
+ if (i % 2) {
+ ownKeys(Object(source), true).forEach(function(key) {
+ _defineProperty(target, key, source[key]);
+ });
+ } else if (Object.getOwnPropertyDescriptors) {
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
+ } else {
+ ownKeys(Object(source)).forEach(function(key) {
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
+ });
+ }
+ }
+ return target;
+}
+function _typeof(obj) {
+ "@babel/helpers - typeof";
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof = function(obj2) {
+ return typeof obj2;
+ };
+ } else {
+ _typeof = function(obj2) {
+ return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
+ };
+ }
+ return _typeof(obj);
+}
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+function _extends() {
+ _extends = Object.assign || function(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+ return target;
+ };
+ return _extends.apply(this, arguments);
+}
+function _objectWithoutPropertiesLoose(source, excluded) {
+ if (source == null)
+ return {};
+ var target = {};
+ var sourceKeys = Object.keys(source);
+ var key, i;
+ for (i = 0; i < sourceKeys.length; i++) {
+ key = sourceKeys[i];
+ if (excluded.indexOf(key) >= 0)
+ continue;
+ target[key] = source[key];
+ }
+ return target;
+}
+function _objectWithoutProperties(source, excluded) {
+ if (source == null)
+ return {};
+ var target = _objectWithoutPropertiesLoose(source, excluded);
+ var key, i;
+ if (Object.getOwnPropertySymbols) {
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
+ key = sourceSymbolKeys[i];
+ if (excluded.indexOf(key) >= 0)
+ continue;
+ if (!Object.prototype.propertyIsEnumerable.call(source, key))
+ continue;
+ target[key] = source[key];
+ }
+ }
+ return target;
+}
+var version = "1.14.0";
+function userAgent(pattern) {
+ if (typeof window !== "undefined" && window.navigator) {
+ return !!/* @__PURE__ */ navigator.userAgent.match(pattern);
+ }
+}
+var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i);
+var Edge = userAgent(/Edge/i);
+var FireFox = userAgent(/firefox/i);
+var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);
+var IOS = userAgent(/iP(ad|od|hone)/i);
+var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);
+var captureMode = {
+ capture: false,
+ passive: false
+};
+function on(el, event, fn) {
+ el.addEventListener(event, fn, !IE11OrLess && captureMode);
+}
+function off(el, event, fn) {
+ el.removeEventListener(event, fn, !IE11OrLess && captureMode);
+}
+function matches(el, selector) {
+ if (!selector)
+ return;
+ selector[0] === ">" && (selector = selector.substring(1));
+ if (el) {
+ try {
+ if (el.matches) {
+ return el.matches(selector);
+ } else if (el.msMatchesSelector) {
+ return el.msMatchesSelector(selector);
+ } else if (el.webkitMatchesSelector) {
+ return el.webkitMatchesSelector(selector);
+ }
+ } catch (_) {
+ return false;
+ }
+ }
+ return false;
+}
+function getParentOrHost(el) {
+ return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;
+}
+function closest(el, selector, ctx, includeCTX) {
+ if (el) {
+ ctx = ctx || document;
+ do {
+ if (selector != null && (selector[0] === ">" ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {
+ return el;
+ }
+ if (el === ctx)
+ break;
+ } while (el = getParentOrHost(el));
+ }
+ return null;
+}
+var R_SPACE = /\s+/g;
+function toggleClass(el, name, state) {
+ if (el && name) {
+ if (el.classList) {
+ el.classList[state ? "add" : "remove"](name);
+ } else {
+ var className = (" " + el.className + " ").replace(R_SPACE, " ").replace(" " + name + " ", " ");
+ el.className = (className + (state ? " " + name : "")).replace(R_SPACE, " ");
+ }
+ }
+}
+function css(el, prop, val) {
+ var style = el && el.style;
+ if (style) {
+ if (val === void 0) {
+ if (document.defaultView && document.defaultView.getComputedStyle) {
+ val = document.defaultView.getComputedStyle(el, "");
+ } else if (el.currentStyle) {
+ val = el.currentStyle;
+ }
+ return prop === void 0 ? val : val[prop];
+ } else {
+ if (!(prop in style) && prop.indexOf("webkit") === -1) {
+ prop = "-webkit-" + prop;
+ }
+ style[prop] = val + (typeof val === "string" ? "" : "px");
+ }
+ }
+}
+function matrix(el, selfOnly) {
+ var appliedTransforms = "";
+ if (typeof el === "string") {
+ appliedTransforms = el;
+ } else {
+ do {
+ var transform = css(el, "transform");
+ if (transform && transform !== "none") {
+ appliedTransforms = transform + " " + appliedTransforms;
+ }
+ } while (!selfOnly && (el = el.parentNode));
+ }
+ var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;
+ return matrixFn && new matrixFn(appliedTransforms);
+}
+function find(ctx, tagName, iterator) {
+ if (ctx) {
+ var list = ctx.getElementsByTagName(tagName), i = 0, n = list.length;
+ if (iterator) {
+ for (; i < n; i++) {
+ iterator(list[i], i);
+ }
+ }
+ return list;
+ }
+ return [];
+}
+function getWindowScrollingElement() {
+ var scrollingElement = document.scrollingElement;
+ if (scrollingElement) {
+ return scrollingElement;
+ } else {
+ return document.documentElement;
+ }
+}
+function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {
+ if (!el.getBoundingClientRect && el !== window)
+ return;
+ var elRect, top, left, bottom, right, height, width;
+ if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {
+ elRect = el.getBoundingClientRect();
+ top = elRect.top;
+ left = elRect.left;
+ bottom = elRect.bottom;
+ right = elRect.right;
+ height = elRect.height;
+ width = elRect.width;
+ } else {
+ top = 0;
+ left = 0;
+ bottom = window.innerHeight;
+ right = window.innerWidth;
+ height = window.innerHeight;
+ width = window.innerWidth;
+ }
+ if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {
+ container = container || el.parentNode;
+ if (!IE11OrLess) {
+ do {
+ if (container && container.getBoundingClientRect && (css(container, "transform") !== "none" || relativeToNonStaticParent && css(container, "position") !== "static")) {
+ var containerRect = container.getBoundingClientRect();
+ top -= containerRect.top + parseInt(css(container, "border-top-width"));
+ left -= containerRect.left + parseInt(css(container, "border-left-width"));
+ bottom = top + elRect.height;
+ right = left + elRect.width;
+ break;
+ }
+ } while (container = container.parentNode);
+ }
+ }
+ if (undoScale && el !== window) {
+ var elMatrix = matrix(container || el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d;
+ if (elMatrix) {
+ top /= scaleY;
+ left /= scaleX;
+ width /= scaleX;
+ height /= scaleY;
+ bottom = top + height;
+ right = left + width;
+ }
+ }
+ return {
+ top,
+ left,
+ bottom,
+ right,
+ width,
+ height
+ };
+}
+function isScrolledPast(el, elSide, parentSide) {
+ var parent = getParentAutoScrollElement(el, true), elSideVal = getRect(el)[elSide];
+ while (parent) {
+ var parentSideVal = getRect(parent)[parentSide], visible = void 0;
+ if (parentSide === "top" || parentSide === "left") {
+ visible = elSideVal >= parentSideVal;
+ } else {
+ visible = elSideVal <= parentSideVal;
+ }
+ if (!visible)
+ return parent;
+ if (parent === getWindowScrollingElement())
+ break;
+ parent = getParentAutoScrollElement(parent, false);
+ }
+ return false;
+}
+function getChild(el, childNum, options, includeDragEl) {
+ var currentChild = 0, i = 0, children = el.children;
+ while (i < children.length) {
+ if (children[i].style.display !== "none" && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {
+ if (currentChild === childNum) {
+ return children[i];
+ }
+ currentChild++;
+ }
+ i++;
+ }
+ return null;
+}
+function lastChild(el, selector) {
+ var last = el.lastElementChild;
+ while (last && (last === Sortable.ghost || css(last, "display") === "none" || selector && !matches(last, selector))) {
+ last = last.previousElementSibling;
+ }
+ return last || null;
+}
+function index(el, selector) {
+ var index2 = 0;
+ if (!el || !el.parentNode) {
+ return -1;
+ }
+ while (el = el.previousElementSibling) {
+ if (el.nodeName.toUpperCase() !== "TEMPLATE" && el !== Sortable.clone && (!selector || matches(el, selector))) {
+ index2++;
+ }
+ }
+ return index2;
+}
+function getRelativeScrollOffset(el) {
+ var offsetLeft = 0, offsetTop = 0, winScroller = getWindowScrollingElement();
+ if (el) {
+ do {
+ var elMatrix = matrix(el), scaleX = elMatrix.a, scaleY = elMatrix.d;
+ offsetLeft += el.scrollLeft * scaleX;
+ offsetTop += el.scrollTop * scaleY;
+ } while (el !== winScroller && (el = el.parentNode));
+ }
+ return [offsetLeft, offsetTop];
+}
+function indexOfObject(arr, obj) {
+ for (var i in arr) {
+ if (!arr.hasOwnProperty(i))
+ continue;
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key) && obj[key] === arr[i][key])
+ return Number(i);
+ }
+ }
+ return -1;
+}
+function getParentAutoScrollElement(el, includeSelf) {
+ if (!el || !el.getBoundingClientRect)
+ return getWindowScrollingElement();
+ var elem = el;
+ var gotSelf = false;
+ do {
+ if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {
+ var elemCSS = css(elem);
+ if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == "auto" || elemCSS.overflowX == "scroll") || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == "auto" || elemCSS.overflowY == "scroll")) {
+ if (!elem.getBoundingClientRect || elem === document.body)
+ return getWindowScrollingElement();
+ if (gotSelf || includeSelf)
+ return elem;
+ gotSelf = true;
+ }
+ }
+ } while (elem = elem.parentNode);
+ return getWindowScrollingElement();
+}
+function extend(dst, src) {
+ if (dst && src) {
+ for (var key in src) {
+ if (src.hasOwnProperty(key)) {
+ dst[key] = src[key];
+ }
+ }
+ }
+ return dst;
+}
+function isRectEqual(rect1, rect2) {
+ return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);
+}
+var _throttleTimeout;
+function throttle(callback, ms) {
+ return function() {
+ if (!_throttleTimeout) {
+ var args = arguments, _this = this;
+ if (args.length === 1) {
+ callback.call(_this, args[0]);
+ } else {
+ callback.apply(_this, args);
+ }
+ _throttleTimeout = setTimeout(function() {
+ _throttleTimeout = void 0;
+ }, ms);
+ }
+ };
+}
+function cancelThrottle() {
+ clearTimeout(_throttleTimeout);
+ _throttleTimeout = void 0;
+}
+function scrollBy(el, x, y) {
+ el.scrollLeft += x;
+ el.scrollTop += y;
+}
+function clone(el) {
+ var Polymer = window.Polymer;
+ var $ = window.jQuery || window.Zepto;
+ if (Polymer && Polymer.dom) {
+ return Polymer.dom(el).cloneNode(true);
+ } else if ($) {
+ return $(el).clone(true)[0];
+ } else {
+ return el.cloneNode(true);
+ }
+}
+var expando = "Sortable" + new Date().getTime();
+function AnimationStateManager() {
+ var animationStates = [], animationCallbackId;
+ return {
+ captureAnimationState: function captureAnimationState() {
+ animationStates = [];
+ if (!this.options.animation)
+ return;
+ var children = [].slice.call(this.el.children);
+ children.forEach(function(child) {
+ if (css(child, "display") === "none" || child === Sortable.ghost)
+ return;
+ animationStates.push({
+ target: child,
+ rect: getRect(child)
+ });
+ var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);
+ if (child.thisAnimationDuration) {
+ var childMatrix = matrix(child, true);
+ if (childMatrix) {
+ fromRect.top -= childMatrix.f;
+ fromRect.left -= childMatrix.e;
+ }
+ }
+ child.fromRect = fromRect;
+ });
+ },
+ addAnimationState: function addAnimationState(state) {
+ animationStates.push(state);
+ },
+ removeAnimationState: function removeAnimationState(target) {
+ animationStates.splice(indexOfObject(animationStates, {
+ target
+ }), 1);
+ },
+ animateAll: function animateAll(callback) {
+ var _this = this;
+ if (!this.options.animation) {
+ clearTimeout(animationCallbackId);
+ if (typeof callback === "function")
+ callback();
+ return;
+ }
+ var animating = false, animationTime = 0;
+ animationStates.forEach(function(state) {
+ var time = 0, target = state.target, fromRect = target.fromRect, toRect = getRect(target), prevFromRect = target.prevFromRect, prevToRect = target.prevToRect, animatingRect = state.rect, targetMatrix = matrix(target, true);
+ if (targetMatrix) {
+ toRect.top -= targetMatrix.f;
+ toRect.left -= targetMatrix.e;
+ }
+ target.toRect = toRect;
+ if (target.thisAnimationDuration) {
+ if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {
+ time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);
+ }
+ }
+ if (!isRectEqual(toRect, fromRect)) {
+ target.prevFromRect = fromRect;
+ target.prevToRect = toRect;
+ if (!time) {
+ time = _this.options.animation;
+ }
+ _this.animate(target, animatingRect, toRect, time);
+ }
+ if (time) {
+ animating = true;
+ animationTime = Math.max(animationTime, time);
+ clearTimeout(target.animationResetTimer);
+ target.animationResetTimer = setTimeout(function() {
+ target.animationTime = 0;
+ target.prevFromRect = null;
+ target.fromRect = null;
+ target.prevToRect = null;
+ target.thisAnimationDuration = null;
+ }, time);
+ target.thisAnimationDuration = time;
+ }
+ });
+ clearTimeout(animationCallbackId);
+ if (!animating) {
+ if (typeof callback === "function")
+ callback();
+ } else {
+ animationCallbackId = setTimeout(function() {
+ if (typeof callback === "function")
+ callback();
+ }, animationTime);
+ }
+ animationStates = [];
+ },
+ animate: function animate(target, currentRect, toRect, duration) {
+ if (duration) {
+ css(target, "transition", "");
+ css(target, "transform", "");
+ var elMatrix = matrix(this.el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d, translateX = (currentRect.left - toRect.left) / (scaleX || 1), translateY = (currentRect.top - toRect.top) / (scaleY || 1);
+ target.animatingX = !!translateX;
+ target.animatingY = !!translateY;
+ css(target, "transform", "translate3d(" + translateX + "px," + translateY + "px,0)");
+ this.forRepaintDummy = repaint(target);
+ css(target, "transition", "transform " + duration + "ms" + (this.options.easing ? " " + this.options.easing : ""));
+ css(target, "transform", "translate3d(0,0,0)");
+ typeof target.animated === "number" && clearTimeout(target.animated);
+ target.animated = setTimeout(function() {
+ css(target, "transition", "");
+ css(target, "transform", "");
+ target.animated = false;
+ target.animatingX = false;
+ target.animatingY = false;
+ }, duration);
+ }
+ }
+ };
+}
+function repaint(target) {
+ return target.offsetWidth;
+}
+function calculateRealTime(animatingRect, fromRect, toRect, options) {
+ return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;
+}
+var plugins = [];
+var defaults = {
+ initializeByDefault: true
+};
+var PluginManager = {
+ mount: function mount(plugin) {
+ for (var option2 in defaults) {
+ if (defaults.hasOwnProperty(option2) && !(option2 in plugin)) {
+ plugin[option2] = defaults[option2];
+ }
+ }
+ plugins.forEach(function(p) {
+ if (p.pluginName === plugin.pluginName) {
+ throw "Sortable: Cannot mount plugin ".concat(plugin.pluginName, " more than once");
+ }
+ });
+ plugins.push(plugin);
+ },
+ pluginEvent: function pluginEvent(eventName, sortable, evt) {
+ var _this = this;
+ this.eventCanceled = false;
+ evt.cancel = function() {
+ _this.eventCanceled = true;
+ };
+ var eventNameGlobal = eventName + "Global";
+ plugins.forEach(function(plugin) {
+ if (!sortable[plugin.pluginName])
+ return;
+ if (sortable[plugin.pluginName][eventNameGlobal]) {
+ sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({
+ sortable
+ }, evt));
+ }
+ if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {
+ sortable[plugin.pluginName][eventName](_objectSpread2({
+ sortable
+ }, evt));
+ }
+ });
+ },
+ initializePlugins: function initializePlugins(sortable, el, defaults2, options) {
+ plugins.forEach(function(plugin) {
+ var pluginName = plugin.pluginName;
+ if (!sortable.options[pluginName] && !plugin.initializeByDefault)
+ return;
+ var initialized = new plugin(sortable, el, sortable.options);
+ initialized.sortable = sortable;
+ initialized.options = sortable.options;
+ sortable[pluginName] = initialized;
+ _extends(defaults2, initialized.defaults);
+ });
+ for (var option2 in sortable.options) {
+ if (!sortable.options.hasOwnProperty(option2))
+ continue;
+ var modified = this.modifyOption(sortable, option2, sortable.options[option2]);
+ if (typeof modified !== "undefined") {
+ sortable.options[option2] = modified;
+ }
+ }
+ },
+ getEventProperties: function getEventProperties(name, sortable) {
+ var eventProperties = {};
+ plugins.forEach(function(plugin) {
+ if (typeof plugin.eventProperties !== "function")
+ return;
+ _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));
+ });
+ return eventProperties;
+ },
+ modifyOption: function modifyOption(sortable, name, value) {
+ var modifiedValue;
+ plugins.forEach(function(plugin) {
+ if (!sortable[plugin.pluginName])
+ return;
+ if (plugin.optionListeners && typeof plugin.optionListeners[name] === "function") {
+ modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);
+ }
+ });
+ return modifiedValue;
+ }
+};
+function dispatchEvent(_ref) {
+ var sortable = _ref.sortable, rootEl2 = _ref.rootEl, name = _ref.name, targetEl = _ref.targetEl, cloneEl2 = _ref.cloneEl, toEl = _ref.toEl, fromEl = _ref.fromEl, oldIndex2 = _ref.oldIndex, newIndex2 = _ref.newIndex, oldDraggableIndex2 = _ref.oldDraggableIndex, newDraggableIndex2 = _ref.newDraggableIndex, originalEvent = _ref.originalEvent, putSortable2 = _ref.putSortable, extraEventProperties = _ref.extraEventProperties;
+ sortable = sortable || rootEl2 && rootEl2[expando];
+ if (!sortable)
+ return;
+ var evt, options = sortable.options, onName = "on" + name.charAt(0).toUpperCase() + name.substr(1);
+ if (window.CustomEvent && !IE11OrLess && !Edge) {
+ evt = new CustomEvent(name, {
+ bubbles: true,
+ cancelable: true
+ });
+ } else {
+ evt = document.createEvent("Event");
+ evt.initEvent(name, true, true);
+ }
+ evt.to = toEl || rootEl2;
+ evt.from = fromEl || rootEl2;
+ evt.item = targetEl || rootEl2;
+ evt.clone = cloneEl2;
+ evt.oldIndex = oldIndex2;
+ evt.newIndex = newIndex2;
+ evt.oldDraggableIndex = oldDraggableIndex2;
+ evt.newDraggableIndex = newDraggableIndex2;
+ evt.originalEvent = originalEvent;
+ evt.pullMode = putSortable2 ? putSortable2.lastPutMode : void 0;
+ var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));
+ for (var option2 in allEventProperties) {
+ evt[option2] = allEventProperties[option2];
+ }
+ if (rootEl2) {
+ rootEl2.dispatchEvent(evt);
+ }
+ if (options[onName]) {
+ options[onName].call(sortable, evt);
+ }
+}
+var _excluded = ["evt"];
+var pluginEvent2 = function pluginEvent3(eventName, sortable) {
+ var _ref = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, originalEvent = _ref.evt, data = _objectWithoutProperties(_ref, _excluded);
+ PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({
+ dragEl,
+ parentEl,
+ ghostEl,
+ rootEl,
+ nextEl,
+ lastDownEl,
+ cloneEl,
+ cloneHidden,
+ dragStarted: moved,
+ putSortable,
+ activeSortable: Sortable.active,
+ originalEvent,
+ oldIndex,
+ oldDraggableIndex,
+ newIndex,
+ newDraggableIndex,
+ hideGhostForTarget: _hideGhostForTarget,
+ unhideGhostForTarget: _unhideGhostForTarget,
+ cloneNowHidden: function cloneNowHidden() {
+ cloneHidden = true;
+ },
+ cloneNowShown: function cloneNowShown() {
+ cloneHidden = false;
+ },
+ dispatchSortableEvent: function dispatchSortableEvent(name) {
+ _dispatchEvent({
+ sortable,
+ name,
+ originalEvent
+ });
+ }
+ }, data));
+};
+function _dispatchEvent(info) {
+ dispatchEvent(_objectSpread2({
+ putSortable,
+ cloneEl,
+ targetEl: dragEl,
+ rootEl,
+ oldIndex,
+ oldDraggableIndex,
+ newIndex,
+ newDraggableIndex
+ }, info));
+}
+var dragEl, parentEl, ghostEl, rootEl, nextEl, lastDownEl, cloneEl, cloneHidden, oldIndex, newIndex, oldDraggableIndex, newDraggableIndex, activeGroup, putSortable, awaitingDragStarted = false, ignoreNextClick = false, sortables = [], tapEvt, touchEvt, lastDx, lastDy, tapDistanceLeft, tapDistanceTop, moved, lastTarget, lastDirection, pastFirstInvertThresh = false, isCircumstantialInvert = false, targetMoveDistance, ghostRelativeParent, ghostRelativeParentInitialScroll = [], _silent = false, savedInputChecked = [];
+var documentExists = typeof document !== "undefined", PositionGhostAbsolutely = IOS, CSSFloatProperty = Edge || IE11OrLess ? "cssFloat" : "float", supportDraggable = documentExists && !ChromeForAndroid && !IOS && "draggable" in document.createElement("div"), supportCssPointerEvents = function() {
+ if (!documentExists)
+ return;
+ if (IE11OrLess) {
+ return false;
+ }
+ var el = document.createElement("x");
+ el.style.cssText = "pointer-events:auto";
+ return el.style.pointerEvents === "auto";
+}(), _detectDirection = function _detectDirection2(el, options) {
+ var elCSS = css(el), elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth), child1 = getChild(el, 0, options), child2 = getChild(el, 1, options), firstChildCSS = child1 && css(child1), secondChildCSS = child2 && css(child2), firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width, secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;
+ if (elCSS.display === "flex") {
+ return elCSS.flexDirection === "column" || elCSS.flexDirection === "column-reverse" ? "vertical" : "horizontal";
+ }
+ if (elCSS.display === "grid") {
+ return elCSS.gridTemplateColumns.split(" ").length <= 1 ? "vertical" : "horizontal";
+ }
+ if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== "none") {
+ var touchingSideChild2 = firstChildCSS["float"] === "left" ? "left" : "right";
+ return child2 && (secondChildCSS.clear === "both" || secondChildCSS.clear === touchingSideChild2) ? "vertical" : "horizontal";
+ }
+ return child1 && (firstChildCSS.display === "block" || firstChildCSS.display === "flex" || firstChildCSS.display === "table" || firstChildCSS.display === "grid" || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === "none" || child2 && elCSS[CSSFloatProperty] === "none" && firstChildWidth + secondChildWidth > elWidth) ? "vertical" : "horizontal";
+}, _dragElInRowColumn = function _dragElInRowColumn2(dragRect, targetRect, vertical) {
+ var dragElS1Opp = vertical ? dragRect.left : dragRect.top, dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, dragElOppLength = vertical ? dragRect.width : dragRect.height, targetS1Opp = vertical ? targetRect.left : targetRect.top, targetS2Opp = vertical ? targetRect.right : targetRect.bottom, targetOppLength = vertical ? targetRect.width : targetRect.height;
+ return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;
+}, _detectNearestEmptySortable = function _detectNearestEmptySortable2(x, y) {
+ var ret;
+ sortables.some(function(sortable) {
+ var threshold = sortable[expando].options.emptyInsertThreshold;
+ if (!threshold || lastChild(sortable))
+ return;
+ var rect = getRect(sortable), insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;
+ if (insideHorizontally && insideVertically) {
+ return ret = sortable;
+ }
+ });
+ return ret;
+}, _prepareGroup = function _prepareGroup2(options) {
+ function toFn(value, pull) {
+ return function(to, from, dragEl2, evt) {
+ var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;
+ if (value == null && (pull || sameGroup)) {
+ return true;
+ } else if (value == null || value === false) {
+ return false;
+ } else if (pull && value === "clone") {
+ return value;
+ } else if (typeof value === "function") {
+ return toFn(value(to, from, dragEl2, evt), pull)(to, from, dragEl2, evt);
+ } else {
+ var otherGroup = (pull ? to : from).options.group.name;
+ return value === true || typeof value === "string" && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;
+ }
+ };
+ }
+ var group = {};
+ var originalGroup = options.group;
+ if (!originalGroup || _typeof(originalGroup) != "object") {
+ originalGroup = {
+ name: originalGroup
+ };
+ }
+ group.name = originalGroup.name;
+ group.checkPull = toFn(originalGroup.pull, true);
+ group.checkPut = toFn(originalGroup.put);
+ group.revertClone = originalGroup.revertClone;
+ options.group = group;
+}, _hideGhostForTarget = function _hideGhostForTarget2() {
+ if (!supportCssPointerEvents && ghostEl) {
+ css(ghostEl, "display", "none");
+ }
+}, _unhideGhostForTarget = function _unhideGhostForTarget2() {
+ if (!supportCssPointerEvents && ghostEl) {
+ css(ghostEl, "display", "");
+ }
+};
+if (documentExists) {
+ document.addEventListener("click", function(evt) {
+ if (ignoreNextClick) {
+ evt.preventDefault();
+ evt.stopPropagation && evt.stopPropagation();
+ evt.stopImmediatePropagation && evt.stopImmediatePropagation();
+ ignoreNextClick = false;
+ return false;
+ }
+ }, true);
+}
+var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent2(evt) {
+ if (dragEl) {
+ evt = evt.touches ? evt.touches[0] : evt;
+ var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);
+ if (nearest) {
+ var event = {};
+ for (var i in evt) {
+ if (evt.hasOwnProperty(i)) {
+ event[i] = evt[i];
+ }
+ }
+ event.target = event.rootEl = nearest;
+ event.preventDefault = void 0;
+ event.stopPropagation = void 0;
+ nearest[expando]._onDragOver(event);
+ }
+ }
+};
+var _checkOutsideTargetEl = function _checkOutsideTargetEl2(evt) {
+ if (dragEl) {
+ dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
+ }
+};
+function Sortable(el, options) {
+ if (!(el && el.nodeType && el.nodeType === 1)) {
+ throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el));
+ }
+ this.el = el;
+ this.options = options = _extends({}, options);
+ el[expando] = this;
+ var defaults2 = {
+ group: null,
+ sort: true,
+ disabled: false,
+ store: null,
+ handle: null,
+ draggable: /^[uo]l$/i.test(el.nodeName) ? ">li" : ">*",
+ swapThreshold: 1,
+ invertSwap: false,
+ invertedSwapThreshold: null,
+ removeCloneOnHide: true,
+ direction: function direction() {
+ return _detectDirection(el, this.options);
+ },
+ ghostClass: "sortable-ghost",
+ chosenClass: "sortable-chosen",
+ dragClass: "sortable-drag",
+ ignore: "a, img",
+ filter: null,
+ preventOnFilter: true,
+ animation: 0,
+ easing: null,
+ setData: function setData(dataTransfer, dragEl2) {
+ dataTransfer.setData("Text", dragEl2.textContent);
+ },
+ dropBubble: false,
+ dragoverBubble: false,
+ dataIdAttr: "data-id",
+ delay: 0,
+ delayOnTouchOnly: false,
+ touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,
+ forceFallback: false,
+ fallbackClass: "sortable-fallback",
+ fallbackOnBody: false,
+ fallbackTolerance: 0,
+ fallbackOffset: {
+ x: 0,
+ y: 0
+ },
+ supportPointer: Sortable.supportPointer !== false && "PointerEvent" in window && !Safari,
+ emptyInsertThreshold: 5
+ };
+ PluginManager.initializePlugins(this, el, defaults2);
+ for (var name in defaults2) {
+ !(name in options) && (options[name] = defaults2[name]);
+ }
+ _prepareGroup(options);
+ for (var fn in this) {
+ if (fn.charAt(0) === "_" && typeof this[fn] === "function") {
+ this[fn] = this[fn].bind(this);
+ }
+ }
+ this.nativeDraggable = options.forceFallback ? false : supportDraggable;
+ if (this.nativeDraggable) {
+ this.options.touchStartThreshold = 1;
+ }
+ if (options.supportPointer) {
+ on(el, "pointerdown", this._onTapStart);
+ } else {
+ on(el, "mousedown", this._onTapStart);
+ on(el, "touchstart", this._onTapStart);
+ }
+ if (this.nativeDraggable) {
+ on(el, "dragover", this);
+ on(el, "dragenter", this);
+ }
+ sortables.push(this.el);
+ options.store && options.store.get && this.sort(options.store.get(this) || []);
+ _extends(this, AnimationStateManager());
+}
+Sortable.prototype = {
+ constructor: Sortable,
+ _isOutsideThisEl: function _isOutsideThisEl(target) {
+ if (!this.el.contains(target) && target !== this.el) {
+ lastTarget = null;
+ }
+ },
+ _getDirection: function _getDirection(evt, target) {
+ return typeof this.options.direction === "function" ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;
+ },
+ _onTapStart: function _onTapStart(evt) {
+ if (!evt.cancelable)
+ return;
+ var _this = this, el = this.el, options = this.options, preventOnFilter = options.preventOnFilter, type = evt.type, touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === "touch" && evt, target = (touch || evt).target, originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target, filter = options.filter;
+ _saveInputCheckedState(el);
+ if (dragEl) {
+ return;
+ }
+ if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {
+ return;
+ }
+ if (originalTarget.isContentEditable) {
+ return;
+ }
+ if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === "SELECT") {
+ return;
+ }
+ target = closest(target, options.draggable, el, false);
+ if (target && target.animated) {
+ return;
+ }
+ if (lastDownEl === target) {
+ return;
+ }
+ oldIndex = index(target);
+ oldDraggableIndex = index(target, options.draggable);
+ if (typeof filter === "function") {
+ if (filter.call(this, evt, target, this)) {
+ _dispatchEvent({
+ sortable: _this,
+ rootEl: originalTarget,
+ name: "filter",
+ targetEl: target,
+ toEl: el,
+ fromEl: el
+ });
+ pluginEvent2("filter", _this, {
+ evt
+ });
+ preventOnFilter && evt.cancelable && evt.preventDefault();
+ return;
+ }
+ } else if (filter) {
+ filter = filter.split(",").some(function(criteria) {
+ criteria = closest(originalTarget, criteria.trim(), el, false);
+ if (criteria) {
+ _dispatchEvent({
+ sortable: _this,
+ rootEl: criteria,
+ name: "filter",
+ targetEl: target,
+ fromEl: el,
+ toEl: el
+ });
+ pluginEvent2("filter", _this, {
+ evt
+ });
+ return true;
+ }
+ });
+ if (filter) {
+ preventOnFilter && evt.cancelable && evt.preventDefault();
+ return;
+ }
+ }
+ if (options.handle && !closest(originalTarget, options.handle, el, false)) {
+ return;
+ }
+ this._prepareDragStart(evt, touch, target);
+ },
+ _prepareDragStart: function _prepareDragStart(evt, touch, target) {
+ var _this = this, el = _this.el, options = _this.options, ownerDocument = el.ownerDocument, dragStartFn;
+ if (target && !dragEl && target.parentNode === el) {
+ var dragRect = getRect(target);
+ rootEl = el;
+ dragEl = target;
+ parentEl = dragEl.parentNode;
+ nextEl = dragEl.nextSibling;
+ lastDownEl = target;
+ activeGroup = options.group;
+ Sortable.dragged = dragEl;
+ tapEvt = {
+ target: dragEl,
+ clientX: (touch || evt).clientX,
+ clientY: (touch || evt).clientY
+ };
+ tapDistanceLeft = tapEvt.clientX - dragRect.left;
+ tapDistanceTop = tapEvt.clientY - dragRect.top;
+ this._lastX = (touch || evt).clientX;
+ this._lastY = (touch || evt).clientY;
+ dragEl.style["will-change"] = "all";
+ dragStartFn = function dragStartFn2() {
+ pluginEvent2("delayEnded", _this, {
+ evt
+ });
+ if (Sortable.eventCanceled) {
+ _this._onDrop();
+ return;
+ }
+ _this._disableDelayedDragEvents();
+ if (!FireFox && _this.nativeDraggable) {
+ dragEl.draggable = true;
+ }
+ _this._triggerDragStart(evt, touch);
+ _dispatchEvent({
+ sortable: _this,
+ name: "choose",
+ originalEvent: evt
+ });
+ toggleClass(dragEl, options.chosenClass, true);
+ };
+ options.ignore.split(",").forEach(function(criteria) {
+ find(dragEl, criteria.trim(), _disableDraggable);
+ });
+ on(ownerDocument, "dragover", nearestEmptyInsertDetectEvent);
+ on(ownerDocument, "mousemove", nearestEmptyInsertDetectEvent);
+ on(ownerDocument, "touchmove", nearestEmptyInsertDetectEvent);
+ on(ownerDocument, "mouseup", _this._onDrop);
+ on(ownerDocument, "touchend", _this._onDrop);
+ on(ownerDocument, "touchcancel", _this._onDrop);
+ if (FireFox && this.nativeDraggable) {
+ this.options.touchStartThreshold = 4;
+ dragEl.draggable = true;
+ }
+ pluginEvent2("delayStart", this, {
+ evt
+ });
+ if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {
+ if (Sortable.eventCanceled) {
+ this._onDrop();
+ return;
+ }
+ on(ownerDocument, "mouseup", _this._disableDelayedDrag);
+ on(ownerDocument, "touchend", _this._disableDelayedDrag);
+ on(ownerDocument, "touchcancel", _this._disableDelayedDrag);
+ on(ownerDocument, "mousemove", _this._delayedDragTouchMoveHandler);
+ on(ownerDocument, "touchmove", _this._delayedDragTouchMoveHandler);
+ options.supportPointer && on(ownerDocument, "pointermove", _this._delayedDragTouchMoveHandler);
+ _this._dragStartTimer = setTimeout(dragStartFn, options.delay);
+ } else {
+ dragStartFn();
+ }
+ }
+ },
+ _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(e) {
+ var touch = e.touches ? e.touches[0] : e;
+ if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {
+ this._disableDelayedDrag();
+ }
+ },
+ _disableDelayedDrag: function _disableDelayedDrag() {
+ dragEl && _disableDraggable(dragEl);
+ clearTimeout(this._dragStartTimer);
+ this._disableDelayedDragEvents();
+ },
+ _disableDelayedDragEvents: function _disableDelayedDragEvents() {
+ var ownerDocument = this.el.ownerDocument;
+ off(ownerDocument, "mouseup", this._disableDelayedDrag);
+ off(ownerDocument, "touchend", this._disableDelayedDrag);
+ off(ownerDocument, "touchcancel", this._disableDelayedDrag);
+ off(ownerDocument, "mousemove", this._delayedDragTouchMoveHandler);
+ off(ownerDocument, "touchmove", this._delayedDragTouchMoveHandler);
+ off(ownerDocument, "pointermove", this._delayedDragTouchMoveHandler);
+ },
+ _triggerDragStart: function _triggerDragStart(evt, touch) {
+ touch = touch || evt.pointerType == "touch" && evt;
+ if (!this.nativeDraggable || touch) {
+ if (this.options.supportPointer) {
+ on(document, "pointermove", this._onTouchMove);
+ } else if (touch) {
+ on(document, "touchmove", this._onTouchMove);
+ } else {
+ on(document, "mousemove", this._onTouchMove);
+ }
+ } else {
+ on(dragEl, "dragend", this);
+ on(rootEl, "dragstart", this._onDragStart);
+ }
+ try {
+ if (document.selection) {
+ _nextTick(function() {
+ document.selection.empty();
+ });
+ } else {
+ window.getSelection().removeAllRanges();
+ }
+ } catch (err) {
+ }
+ },
+ _dragStarted: function _dragStarted(fallback, evt) {
+ awaitingDragStarted = false;
+ if (rootEl && dragEl) {
+ pluginEvent2("dragStarted", this, {
+ evt
+ });
+ if (this.nativeDraggable) {
+ on(document, "dragover", _checkOutsideTargetEl);
+ }
+ var options = this.options;
+ !fallback && toggleClass(dragEl, options.dragClass, false);
+ toggleClass(dragEl, options.ghostClass, true);
+ Sortable.active = this;
+ fallback && this._appendGhost();
+ _dispatchEvent({
+ sortable: this,
+ name: "start",
+ originalEvent: evt
+ });
+ } else {
+ this._nulling();
+ }
+ },
+ _emulateDragOver: function _emulateDragOver() {
+ if (touchEvt) {
+ this._lastX = touchEvt.clientX;
+ this._lastY = touchEvt.clientY;
+ _hideGhostForTarget();
+ var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
+ var parent = target;
+ while (target && target.shadowRoot) {
+ target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
+ if (target === parent)
+ break;
+ parent = target;
+ }
+ dragEl.parentNode[expando]._isOutsideThisEl(target);
+ if (parent) {
+ do {
+ if (parent[expando]) {
+ var inserted = void 0;
+ inserted = parent[expando]._onDragOver({
+ clientX: touchEvt.clientX,
+ clientY: touchEvt.clientY,
+ target,
+ rootEl: parent
+ });
+ if (inserted && !this.options.dragoverBubble) {
+ break;
+ }
+ }
+ target = parent;
+ } while (parent = parent.parentNode);
+ }
+ _unhideGhostForTarget();
+ }
+ },
+ _onTouchMove: function _onTouchMove(evt) {
+ if (tapEvt) {
+ var options = this.options, fallbackTolerance = options.fallbackTolerance, fallbackOffset = options.fallbackOffset, touch = evt.touches ? evt.touches[0] : evt, ghostMatrix = ghostEl && matrix(ghostEl, true), scaleX = ghostEl && ghostMatrix && ghostMatrix.a, scaleY = ghostEl && ghostMatrix && ghostMatrix.d, relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent), dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1), dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);
+ if (!Sortable.active && !awaitingDragStarted) {
+ if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {
+ return;
+ }
+ this._onDragStart(evt, true);
+ }
+ if (ghostEl) {
+ if (ghostMatrix) {
+ ghostMatrix.e += dx - (lastDx || 0);
+ ghostMatrix.f += dy - (lastDy || 0);
+ } else {
+ ghostMatrix = {
+ a: 1,
+ b: 0,
+ c: 0,
+ d: 1,
+ e: dx,
+ f: dy
+ };
+ }
+ var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")");
+ css(ghostEl, "webkitTransform", cssMatrix);
+ css(ghostEl, "mozTransform", cssMatrix);
+ css(ghostEl, "msTransform", cssMatrix);
+ css(ghostEl, "transform", cssMatrix);
+ lastDx = dx;
+ lastDy = dy;
+ touchEvt = touch;
+ }
+ evt.cancelable && evt.preventDefault();
+ }
+ },
+ _appendGhost: function _appendGhost() {
+ if (!ghostEl) {
+ var container = this.options.fallbackOnBody ? document.body : rootEl, rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), options = this.options;
+ if (PositionGhostAbsolutely) {
+ ghostRelativeParent = container;
+ while (css(ghostRelativeParent, "position") === "static" && css(ghostRelativeParent, "transform") === "none" && ghostRelativeParent !== document) {
+ ghostRelativeParent = ghostRelativeParent.parentNode;
+ }
+ if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {
+ if (ghostRelativeParent === document)
+ ghostRelativeParent = getWindowScrollingElement();
+ rect.top += ghostRelativeParent.scrollTop;
+ rect.left += ghostRelativeParent.scrollLeft;
+ } else {
+ ghostRelativeParent = getWindowScrollingElement();
+ }
+ ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);
+ }
+ ghostEl = dragEl.cloneNode(true);
+ toggleClass(ghostEl, options.ghostClass, false);
+ toggleClass(ghostEl, options.fallbackClass, true);
+ toggleClass(ghostEl, options.dragClass, true);
+ css(ghostEl, "transition", "");
+ css(ghostEl, "transform", "");
+ css(ghostEl, "box-sizing", "border-box");
+ css(ghostEl, "margin", 0);
+ css(ghostEl, "top", rect.top);
+ css(ghostEl, "left", rect.left);
+ css(ghostEl, "width", rect.width);
+ css(ghostEl, "height", rect.height);
+ css(ghostEl, "opacity", "0.8");
+ css(ghostEl, "position", PositionGhostAbsolutely ? "absolute" : "fixed");
+ css(ghostEl, "zIndex", "100000");
+ css(ghostEl, "pointerEvents", "none");
+ Sortable.ghost = ghostEl;
+ container.appendChild(ghostEl);
+ css(ghostEl, "transform-origin", tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + "% " + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + "%");
+ }
+ },
+ _onDragStart: function _onDragStart(evt, fallback) {
+ var _this = this;
+ var dataTransfer = evt.dataTransfer;
+ var options = _this.options;
+ pluginEvent2("dragStart", this, {
+ evt
+ });
+ if (Sortable.eventCanceled) {
+ this._onDrop();
+ return;
+ }
+ pluginEvent2("setupClone", this);
+ if (!Sortable.eventCanceled) {
+ cloneEl = clone(dragEl);
+ cloneEl.draggable = false;
+ cloneEl.style["will-change"] = "";
+ this._hideClone();
+ toggleClass(cloneEl, this.options.chosenClass, false);
+ Sortable.clone = cloneEl;
+ }
+ _this.cloneId = _nextTick(function() {
+ pluginEvent2("clone", _this);
+ if (Sortable.eventCanceled)
+ return;
+ if (!_this.options.removeCloneOnHide) {
+ rootEl.insertBefore(cloneEl, dragEl);
+ }
+ _this._hideClone();
+ _dispatchEvent({
+ sortable: _this,
+ name: "clone"
+ });
+ });
+ !fallback && toggleClass(dragEl, options.dragClass, true);
+ if (fallback) {
+ ignoreNextClick = true;
+ _this._loopId = setInterval(_this._emulateDragOver, 50);
+ } else {
+ off(document, "mouseup", _this._onDrop);
+ off(document, "touchend", _this._onDrop);
+ off(document, "touchcancel", _this._onDrop);
+ if (dataTransfer) {
+ dataTransfer.effectAllowed = "move";
+ options.setData && options.setData.call(_this, dataTransfer, dragEl);
+ }
+ on(document, "drop", _this);
+ css(dragEl, "transform", "translateZ(0)");
+ }
+ awaitingDragStarted = true;
+ _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));
+ on(document, "selectstart", _this);
+ moved = true;
+ if (Safari) {
+ css(document.body, "user-select", "none");
+ }
+ },
+ _onDragOver: function _onDragOver(evt) {
+ var el = this.el, target = evt.target, dragRect, targetRect, revert, options = this.options, group = options.group, activeSortable = Sortable.active, isOwner = activeGroup === group, canSort = options.sort, fromSortable = putSortable || activeSortable, vertical, _this = this, completedFired = false;
+ if (_silent)
+ return;
+ function dragOverEvent(name, extra) {
+ pluginEvent2(name, _this, _objectSpread2({
+ evt,
+ isOwner,
+ axis: vertical ? "vertical" : "horizontal",
+ revert,
+ dragRect,
+ targetRect,
+ canSort,
+ fromSortable,
+ target,
+ completed,
+ onMove: function onMove(target2, after2) {
+ return _onMove(rootEl, el, dragEl, dragRect, target2, getRect(target2), evt, after2);
+ },
+ changed
+ }, extra));
+ }
+ function capture() {
+ dragOverEvent("dragOverAnimationCapture");
+ _this.captureAnimationState();
+ if (_this !== fromSortable) {
+ fromSortable.captureAnimationState();
+ }
+ }
+ function completed(insertion) {
+ dragOverEvent("dragOverCompleted", {
+ insertion
+ });
+ if (insertion) {
+ if (isOwner) {
+ activeSortable._hideClone();
+ } else {
+ activeSortable._showClone(_this);
+ }
+ if (_this !== fromSortable) {
+ toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);
+ toggleClass(dragEl, options.ghostClass, true);
+ }
+ if (putSortable !== _this && _this !== Sortable.active) {
+ putSortable = _this;
+ } else if (_this === Sortable.active && putSortable) {
+ putSortable = null;
+ }
+ if (fromSortable === _this) {
+ _this._ignoreWhileAnimating = target;
+ }
+ _this.animateAll(function() {
+ dragOverEvent("dragOverAnimationComplete");
+ _this._ignoreWhileAnimating = null;
+ });
+ if (_this !== fromSortable) {
+ fromSortable.animateAll();
+ fromSortable._ignoreWhileAnimating = null;
+ }
+ }
+ if (target === dragEl && !dragEl.animated || target === el && !target.animated) {
+ lastTarget = null;
+ }
+ if (!options.dragoverBubble && !evt.rootEl && target !== document) {
+ dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
+ !insertion && nearestEmptyInsertDetectEvent(evt);
+ }
+ !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();
+ return completedFired = true;
+ }
+ function changed() {
+ newIndex = index(dragEl);
+ newDraggableIndex = index(dragEl, options.draggable);
+ _dispatchEvent({
+ sortable: _this,
+ name: "change",
+ toEl: el,
+ newIndex,
+ newDraggableIndex,
+ originalEvent: evt
+ });
+ }
+ if (evt.preventDefault !== void 0) {
+ evt.cancelable && evt.preventDefault();
+ }
+ target = closest(target, options.draggable, el, true);
+ dragOverEvent("dragOver");
+ if (Sortable.eventCanceled)
+ return completedFired;
+ if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {
+ return completed(false);
+ }
+ ignoreNextClick = false;
+ if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {
+ vertical = this._getDirection(evt, target) === "vertical";
+ dragRect = getRect(dragEl);
+ dragOverEvent("dragOverValid");
+ if (Sortable.eventCanceled)
+ return completedFired;
+ if (revert) {
+ parentEl = rootEl;
+ capture();
+ this._hideClone();
+ dragOverEvent("revert");
+ if (!Sortable.eventCanceled) {
+ if (nextEl) {
+ rootEl.insertBefore(dragEl, nextEl);
+ } else {
+ rootEl.appendChild(dragEl);
+ }
+ }
+ return completed(true);
+ }
+ var elLastChild = lastChild(el, options.draggable);
+ if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {
+ if (elLastChild === dragEl) {
+ return completed(false);
+ }
+ if (elLastChild && el === evt.target) {
+ target = elLastChild;
+ }
+ if (target) {
+ targetRect = getRect(target);
+ }
+ if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {
+ capture();
+ el.appendChild(dragEl);
+ parentEl = el;
+ changed();
+ return completed(true);
+ }
+ } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {
+ var firstChild = getChild(el, 0, options, true);
+ if (firstChild === dragEl) {
+ return completed(false);
+ }
+ target = firstChild;
+ targetRect = getRect(target);
+ if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {
+ capture();
+ el.insertBefore(dragEl, firstChild);
+ parentEl = el;
+ changed();
+ return completed(true);
+ }
+ } else if (target.parentNode === el) {
+ targetRect = getRect(target);
+ var direction = 0, targetBeforeFirstSwap, differentLevel = dragEl.parentNode !== el, differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), side1 = vertical ? "top" : "left", scrolledPastTop = isScrolledPast(target, "top", "top") || isScrolledPast(dragEl, "top", "top"), scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;
+ if (lastTarget !== target) {
+ targetBeforeFirstSwap = targetRect[side1];
+ pastFirstInvertThresh = false;
+ isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;
+ }
+ direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);
+ var sibling;
+ if (direction !== 0) {
+ var dragIndex = index(dragEl);
+ do {
+ dragIndex -= direction;
+ sibling = parentEl.children[dragIndex];
+ } while (sibling && (css(sibling, "display") === "none" || sibling === ghostEl));
+ }
+ if (direction === 0 || sibling === target) {
+ return completed(false);
+ }
+ lastTarget = target;
+ lastDirection = direction;
+ var nextSibling = target.nextElementSibling, after = false;
+ after = direction === 1;
+ var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);
+ if (moveVector !== false) {
+ if (moveVector === 1 || moveVector === -1) {
+ after = moveVector === 1;
+ }
+ _silent = true;
+ setTimeout(_unsilent, 30);
+ capture();
+ if (after && !nextSibling) {
+ el.appendChild(dragEl);
+ } else {
+ target.parentNode.insertBefore(dragEl, after ? nextSibling : target);
+ }
+ if (scrolledPastTop) {
+ scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);
+ }
+ parentEl = dragEl.parentNode;
+ if (targetBeforeFirstSwap !== void 0 && !isCircumstantialInvert) {
+ targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);
+ }
+ changed();
+ return completed(true);
+ }
+ }
+ if (el.contains(dragEl)) {
+ return completed(false);
+ }
+ }
+ return false;
+ },
+ _ignoreWhileAnimating: null,
+ _offMoveEvents: function _offMoveEvents() {
+ off(document, "mousemove", this._onTouchMove);
+ off(document, "touchmove", this._onTouchMove);
+ off(document, "pointermove", this._onTouchMove);
+ off(document, "dragover", nearestEmptyInsertDetectEvent);
+ off(document, "mousemove", nearestEmptyInsertDetectEvent);
+ off(document, "touchmove", nearestEmptyInsertDetectEvent);
+ },
+ _offUpEvents: function _offUpEvents() {
+ var ownerDocument = this.el.ownerDocument;
+ off(ownerDocument, "mouseup", this._onDrop);
+ off(ownerDocument, "touchend", this._onDrop);
+ off(ownerDocument, "pointerup", this._onDrop);
+ off(ownerDocument, "touchcancel", this._onDrop);
+ off(document, "selectstart", this);
+ },
+ _onDrop: function _onDrop(evt) {
+ var el = this.el, options = this.options;
+ newIndex = index(dragEl);
+ newDraggableIndex = index(dragEl, options.draggable);
+ pluginEvent2("drop", this, {
+ evt
+ });
+ parentEl = dragEl && dragEl.parentNode;
+ newIndex = index(dragEl);
+ newDraggableIndex = index(dragEl, options.draggable);
+ if (Sortable.eventCanceled) {
+ this._nulling();
+ return;
+ }
+ awaitingDragStarted = false;
+ isCircumstantialInvert = false;
+ pastFirstInvertThresh = false;
+ clearInterval(this._loopId);
+ clearTimeout(this._dragStartTimer);
+ _cancelNextTick(this.cloneId);
+ _cancelNextTick(this._dragStartId);
+ if (this.nativeDraggable) {
+ off(document, "drop", this);
+ off(el, "dragstart", this._onDragStart);
+ }
+ this._offMoveEvents();
+ this._offUpEvents();
+ if (Safari) {
+ css(document.body, "user-select", "");
+ }
+ css(dragEl, "transform", "");
+ if (evt) {
+ if (moved) {
+ evt.cancelable && evt.preventDefault();
+ !options.dropBubble && evt.stopPropagation();
+ }
+ ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);
+ if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== "clone") {
+ cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);
+ }
+ if (dragEl) {
+ if (this.nativeDraggable) {
+ off(dragEl, "dragend", this);
+ }
+ _disableDraggable(dragEl);
+ dragEl.style["will-change"] = "";
+ if (moved && !awaitingDragStarted) {
+ toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);
+ }
+ toggleClass(dragEl, this.options.chosenClass, false);
+ _dispatchEvent({
+ sortable: this,
+ name: "unchoose",
+ toEl: parentEl,
+ newIndex: null,
+ newDraggableIndex: null,
+ originalEvent: evt
+ });
+ if (rootEl !== parentEl) {
+ if (newIndex >= 0) {
+ _dispatchEvent({
+ rootEl: parentEl,
+ name: "add",
+ toEl: parentEl,
+ fromEl: rootEl,
+ originalEvent: evt
+ });
+ _dispatchEvent({
+ sortable: this,
+ name: "remove",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ _dispatchEvent({
+ rootEl: parentEl,
+ name: "sort",
+ toEl: parentEl,
+ fromEl: rootEl,
+ originalEvent: evt
+ });
+ _dispatchEvent({
+ sortable: this,
+ name: "sort",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ }
+ putSortable && putSortable.save();
+ } else {
+ if (newIndex !== oldIndex) {
+ if (newIndex >= 0) {
+ _dispatchEvent({
+ sortable: this,
+ name: "update",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ _dispatchEvent({
+ sortable: this,
+ name: "sort",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ }
+ }
+ }
+ if (Sortable.active) {
+ if (newIndex == null || newIndex === -1) {
+ newIndex = oldIndex;
+ newDraggableIndex = oldDraggableIndex;
+ }
+ _dispatchEvent({
+ sortable: this,
+ name: "end",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ this.save();
+ }
+ }
+ }
+ this._nulling();
+ },
+ _nulling: function _nulling() {
+ pluginEvent2("nulling", this);
+ rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;
+ savedInputChecked.forEach(function(el) {
+ el.checked = true;
+ });
+ savedInputChecked.length = lastDx = lastDy = 0;
+ },
+ handleEvent: function handleEvent(evt) {
+ switch (evt.type) {
+ case "drop":
+ case "dragend":
+ this._onDrop(evt);
+ break;
+ case "dragenter":
+ case "dragover":
+ if (dragEl) {
+ this._onDragOver(evt);
+ _globalDragOver(evt);
+ }
+ break;
+ case "selectstart":
+ evt.preventDefault();
+ break;
+ }
+ },
+ toArray: function toArray() {
+ var order = [], el, children = this.el.children, i = 0, n = children.length, options = this.options;
+ for (; i < n; i++) {
+ el = children[i];
+ if (closest(el, options.draggable, this.el, false)) {
+ order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));
+ }
+ }
+ return order;
+ },
+ sort: function sort(order, useAnimation) {
+ var items = {}, rootEl2 = this.el;
+ this.toArray().forEach(function(id, i) {
+ var el = rootEl2.children[i];
+ if (closest(el, this.options.draggable, rootEl2, false)) {
+ items[id] = el;
+ }
+ }, this);
+ useAnimation && this.captureAnimationState();
+ order.forEach(function(id) {
+ if (items[id]) {
+ rootEl2.removeChild(items[id]);
+ rootEl2.appendChild(items[id]);
+ }
+ });
+ useAnimation && this.animateAll();
+ },
+ save: function save() {
+ var store = this.options.store;
+ store && store.set && store.set(this);
+ },
+ closest: function closest$1(el, selector) {
+ return closest(el, selector || this.options.draggable, this.el, false);
+ },
+ option: function option(name, value) {
+ var options = this.options;
+ if (value === void 0) {
+ return options[name];
+ } else {
+ var modifiedValue = PluginManager.modifyOption(this, name, value);
+ if (typeof modifiedValue !== "undefined") {
+ options[name] = modifiedValue;
+ } else {
+ options[name] = value;
+ }
+ if (name === "group") {
+ _prepareGroup(options);
+ }
+ }
+ },
+ destroy: function destroy() {
+ pluginEvent2("destroy", this);
+ var el = this.el;
+ el[expando] = null;
+ off(el, "mousedown", this._onTapStart);
+ off(el, "touchstart", this._onTapStart);
+ off(el, "pointerdown", this._onTapStart);
+ if (this.nativeDraggable) {
+ off(el, "dragover", this);
+ off(el, "dragenter", this);
+ }
+ Array.prototype.forEach.call(el.querySelectorAll("[draggable]"), function(el2) {
+ el2.removeAttribute("draggable");
+ });
+ this._onDrop();
+ this._disableDelayedDragEvents();
+ sortables.splice(sortables.indexOf(this.el), 1);
+ this.el = el = null;
+ },
+ _hideClone: function _hideClone() {
+ if (!cloneHidden) {
+ pluginEvent2("hideClone", this);
+ if (Sortable.eventCanceled)
+ return;
+ css(cloneEl, "display", "none");
+ if (this.options.removeCloneOnHide && cloneEl.parentNode) {
+ cloneEl.parentNode.removeChild(cloneEl);
+ }
+ cloneHidden = true;
+ }
+ },
+ _showClone: function _showClone(putSortable2) {
+ if (putSortable2.lastPutMode !== "clone") {
+ this._hideClone();
+ return;
+ }
+ if (cloneHidden) {
+ pluginEvent2("showClone", this);
+ if (Sortable.eventCanceled)
+ return;
+ if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {
+ rootEl.insertBefore(cloneEl, dragEl);
+ } else if (nextEl) {
+ rootEl.insertBefore(cloneEl, nextEl);
+ } else {
+ rootEl.appendChild(cloneEl);
+ }
+ if (this.options.group.revertClone) {
+ this.animate(dragEl, cloneEl);
+ }
+ css(cloneEl, "display", "");
+ cloneHidden = false;
+ }
+ }
+};
+function _globalDragOver(evt) {
+ if (evt.dataTransfer) {
+ evt.dataTransfer.dropEffect = "move";
+ }
+ evt.cancelable && evt.preventDefault();
+}
+function _onMove(fromEl, toEl, dragEl2, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {
+ var evt, sortable = fromEl[expando], onMoveFn = sortable.options.onMove, retVal;
+ if (window.CustomEvent && !IE11OrLess && !Edge) {
+ evt = new CustomEvent("move", {
+ bubbles: true,
+ cancelable: true
+ });
+ } else {
+ evt = document.createEvent("Event");
+ evt.initEvent("move", true, true);
+ }
+ evt.to = toEl;
+ evt.from = fromEl;
+ evt.dragged = dragEl2;
+ evt.draggedRect = dragRect;
+ evt.related = targetEl || toEl;
+ evt.relatedRect = targetRect || getRect(toEl);
+ evt.willInsertAfter = willInsertAfter;
+ evt.originalEvent = originalEvent;
+ fromEl.dispatchEvent(evt);
+ if (onMoveFn) {
+ retVal = onMoveFn.call(sortable, evt, originalEvent);
+ }
+ return retVal;
+}
+function _disableDraggable(el) {
+ el.draggable = false;
+}
+function _unsilent() {
+ _silent = false;
+}
+function _ghostIsFirst(evt, vertical, sortable) {
+ var rect = getRect(getChild(sortable.el, 0, sortable.options, true));
+ var spacer = 10;
+ return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;
+}
+function _ghostIsLast(evt, vertical, sortable) {
+ var rect = getRect(lastChild(sortable.el, sortable.options.draggable));
+ var spacer = 10;
+ return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;
+}
+function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {
+ var mouseOnAxis = vertical ? evt.clientY : evt.clientX, targetLength = vertical ? targetRect.height : targetRect.width, targetS1 = vertical ? targetRect.top : targetRect.left, targetS2 = vertical ? targetRect.bottom : targetRect.right, invert = false;
+ if (!invertSwap) {
+ if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {
+ if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {
+ pastFirstInvertThresh = true;
+ }
+ if (!pastFirstInvertThresh) {
+ if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance : mouseOnAxis > targetS2 - targetMoveDistance) {
+ return -lastDirection;
+ }
+ } else {
+ invert = true;
+ }
+ } else {
+ if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {
+ return _getInsertDirection(target);
+ }
+ }
+ }
+ invert = invert || invertSwap;
+ if (invert) {
+ if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {
+ return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;
+ }
+ }
+ return 0;
+}
+function _getInsertDirection(target) {
+ if (index(dragEl) < index(target)) {
+ return 1;
+ } else {
+ return -1;
+ }
+}
+function _generateId(el) {
+ var str = el.tagName + el.className + el.src + el.href + el.textContent, i = str.length, sum = 0;
+ while (i--) {
+ sum += str.charCodeAt(i);
+ }
+ return sum.toString(36);
+}
+function _saveInputCheckedState(root) {
+ savedInputChecked.length = 0;
+ var inputs = root.getElementsByTagName("input");
+ var idx = inputs.length;
+ while (idx--) {
+ var el = inputs[idx];
+ el.checked && savedInputChecked.push(el);
+ }
+}
+function _nextTick(fn) {
+ return setTimeout(fn, 0);
+}
+function _cancelNextTick(id) {
+ return clearTimeout(id);
+}
+if (documentExists) {
+ on(document, "touchmove", function(evt) {
+ if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {
+ evt.preventDefault();
+ }
+ });
+}
+Sortable.utils = {
+ on,
+ off,
+ css,
+ find,
+ is: function is(el, selector) {
+ return !!closest(el, selector, el, false);
+ },
+ extend,
+ throttle,
+ closest,
+ toggleClass,
+ clone,
+ index,
+ nextTick: _nextTick,
+ cancelNextTick: _cancelNextTick,
+ detectDirection: _detectDirection,
+ getChild
+};
+Sortable.get = function(element) {
+ return element[expando];
+};
+Sortable.mount = function() {
+ for (var _len = arguments.length, plugins2 = new Array(_len), _key = 0; _key < _len; _key++) {
+ plugins2[_key] = arguments[_key];
+ }
+ if (plugins2[0].constructor === Array)
+ plugins2 = plugins2[0];
+ plugins2.forEach(function(plugin) {
+ if (!plugin.prototype || !plugin.prototype.constructor) {
+ throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin));
+ }
+ if (plugin.utils)
+ Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);
+ PluginManager.mount(plugin);
+ });
+};
+Sortable.create = function(el, options) {
+ return new Sortable(el, options);
+};
+Sortable.version = version;
+var autoScrolls = [], scrollEl, scrollRootEl, scrolling = false, lastAutoScrollX, lastAutoScrollY, touchEvt$1, pointerElemChangedInterval;
+function AutoScrollPlugin() {
+ function AutoScroll() {
+ this.defaults = {
+ scroll: true,
+ forceAutoScrollFallback: false,
+ scrollSensitivity: 30,
+ scrollSpeed: 10,
+ bubbleScroll: true
+ };
+ for (var fn in this) {
+ if (fn.charAt(0) === "_" && typeof this[fn] === "function") {
+ this[fn] = this[fn].bind(this);
+ }
+ }
+ }
+ AutoScroll.prototype = {
+ dragStarted: function dragStarted(_ref) {
+ var originalEvent = _ref.originalEvent;
+ if (this.sortable.nativeDraggable) {
+ on(document, "dragover", this._handleAutoScroll);
+ } else {
+ if (this.options.supportPointer) {
+ on(document, "pointermove", this._handleFallbackAutoScroll);
+ } else if (originalEvent.touches) {
+ on(document, "touchmove", this._handleFallbackAutoScroll);
+ } else {
+ on(document, "mousemove", this._handleFallbackAutoScroll);
+ }
+ }
+ },
+ dragOverCompleted: function dragOverCompleted(_ref2) {
+ var originalEvent = _ref2.originalEvent;
+ if (!this.options.dragOverBubble && !originalEvent.rootEl) {
+ this._handleAutoScroll(originalEvent);
+ }
+ },
+ drop: function drop3() {
+ if (this.sortable.nativeDraggable) {
+ off(document, "dragover", this._handleAutoScroll);
+ } else {
+ off(document, "pointermove", this._handleFallbackAutoScroll);
+ off(document, "touchmove", this._handleFallbackAutoScroll);
+ off(document, "mousemove", this._handleFallbackAutoScroll);
+ }
+ clearPointerElemChangedInterval();
+ clearAutoScrolls();
+ cancelThrottle();
+ },
+ nulling: function nulling() {
+ touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;
+ autoScrolls.length = 0;
+ },
+ _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {
+ this._handleAutoScroll(evt, true);
+ },
+ _handleAutoScroll: function _handleAutoScroll(evt, fallback) {
+ var _this = this;
+ var x = (evt.touches ? evt.touches[0] : evt).clientX, y = (evt.touches ? evt.touches[0] : evt).clientY, elem = document.elementFromPoint(x, y);
+ touchEvt$1 = evt;
+ if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {
+ autoScroll(evt, this.options, elem, fallback);
+ var ogElemScroller = getParentAutoScrollElement(elem, true);
+ if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {
+ pointerElemChangedInterval && clearPointerElemChangedInterval();
+ pointerElemChangedInterval = setInterval(function() {
+ var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);
+ if (newElem !== ogElemScroller) {
+ ogElemScroller = newElem;
+ clearAutoScrolls();
+ }
+ autoScroll(evt, _this.options, newElem, fallback);
+ }, 10);
+ lastAutoScrollX = x;
+ lastAutoScrollY = y;
+ }
+ } else {
+ if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {
+ clearAutoScrolls();
+ return;
+ }
+ autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);
+ }
+ }
+ };
+ return _extends(AutoScroll, {
+ pluginName: "scroll",
+ initializeByDefault: true
+ });
+}
+function clearAutoScrolls() {
+ autoScrolls.forEach(function(autoScroll2) {
+ clearInterval(autoScroll2.pid);
+ });
+ autoScrolls = [];
+}
+function clearPointerElemChangedInterval() {
+ clearInterval(pointerElemChangedInterval);
+}
+var autoScroll = throttle(function(evt, options, rootEl2, isFallback) {
+ if (!options.scroll)
+ return;
+ var x = (evt.touches ? evt.touches[0] : evt).clientX, y = (evt.touches ? evt.touches[0] : evt).clientY, sens = options.scrollSensitivity, speed = options.scrollSpeed, winScroller = getWindowScrollingElement();
+ var scrollThisInstance = false, scrollCustomFn;
+ if (scrollRootEl !== rootEl2) {
+ scrollRootEl = rootEl2;
+ clearAutoScrolls();
+ scrollEl = options.scroll;
+ scrollCustomFn = options.scrollFn;
+ if (scrollEl === true) {
+ scrollEl = getParentAutoScrollElement(rootEl2, true);
+ }
+ }
+ var layersOut = 0;
+ var currentParent = scrollEl;
+ do {
+ var el = currentParent, rect = getRect(el), top = rect.top, bottom = rect.bottom, left = rect.left, right = rect.right, width = rect.width, height = rect.height, canScrollX = void 0, canScrollY = void 0, scrollWidth = el.scrollWidth, scrollHeight = el.scrollHeight, elCSS = css(el), scrollPosX = el.scrollLeft, scrollPosY = el.scrollTop;
+ if (el === winScroller) {
+ canScrollX = width < scrollWidth && (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll" || elCSS.overflowX === "visible");
+ canScrollY = height < scrollHeight && (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll" || elCSS.overflowY === "visible");
+ } else {
+ canScrollX = width < scrollWidth && (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll");
+ canScrollY = height < scrollHeight && (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll");
+ }
+ var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);
+ var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);
+ if (!autoScrolls[layersOut]) {
+ for (var i = 0; i <= layersOut; i++) {
+ if (!autoScrolls[i]) {
+ autoScrolls[i] = {};
+ }
+ }
+ }
+ if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {
+ autoScrolls[layersOut].el = el;
+ autoScrolls[layersOut].vx = vx;
+ autoScrolls[layersOut].vy = vy;
+ clearInterval(autoScrolls[layersOut].pid);
+ if (vx != 0 || vy != 0) {
+ scrollThisInstance = true;
+ autoScrolls[layersOut].pid = setInterval(function() {
+ if (isFallback && this.layer === 0) {
+ Sortable.active._onTouchMove(touchEvt$1);
+ }
+ var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;
+ var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;
+ if (typeof scrollCustomFn === "function") {
+ if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== "continue") {
+ return;
+ }
+ }
+ scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);
+ }.bind({
+ layer: layersOut
+ }), 24);
+ }
+ }
+ layersOut++;
+ } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));
+ scrolling = scrollThisInstance;
+}, 30);
+var drop = function drop2(_ref) {
+ var originalEvent = _ref.originalEvent, putSortable2 = _ref.putSortable, dragEl2 = _ref.dragEl, activeSortable = _ref.activeSortable, dispatchSortableEvent = _ref.dispatchSortableEvent, hideGhostForTarget = _ref.hideGhostForTarget, unhideGhostForTarget = _ref.unhideGhostForTarget;
+ if (!originalEvent)
+ return;
+ var toSortable = putSortable2 || activeSortable;
+ hideGhostForTarget();
+ var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;
+ var target = document.elementFromPoint(touch.clientX, touch.clientY);
+ unhideGhostForTarget();
+ if (toSortable && !toSortable.el.contains(target)) {
+ dispatchSortableEvent("spill");
+ this.onSpill({
+ dragEl: dragEl2,
+ putSortable: putSortable2
+ });
+ }
+};
+function Revert() {
+}
+Revert.prototype = {
+ startIndex: null,
+ dragStart: function dragStart(_ref2) {
+ var oldDraggableIndex2 = _ref2.oldDraggableIndex;
+ this.startIndex = oldDraggableIndex2;
+ },
+ onSpill: function onSpill(_ref3) {
+ var dragEl2 = _ref3.dragEl, putSortable2 = _ref3.putSortable;
+ this.sortable.captureAnimationState();
+ if (putSortable2) {
+ putSortable2.captureAnimationState();
+ }
+ var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);
+ if (nextSibling) {
+ this.sortable.el.insertBefore(dragEl2, nextSibling);
+ } else {
+ this.sortable.el.appendChild(dragEl2);
+ }
+ this.sortable.animateAll();
+ if (putSortable2) {
+ putSortable2.animateAll();
+ }
+ },
+ drop
+};
+_extends(Revert, {
+ pluginName: "revertOnSpill"
+});
+function Remove() {
+}
+Remove.prototype = {
+ onSpill: function onSpill2(_ref4) {
+ var dragEl2 = _ref4.dragEl, putSortable2 = _ref4.putSortable;
+ var parentSortable = putSortable2 || this.sortable;
+ parentSortable.captureAnimationState();
+ dragEl2.parentNode && dragEl2.parentNode.removeChild(dragEl2);
+ parentSortable.animateAll();
+ },
+ drop
+};
+_extends(Remove, {
+ pluginName: "removeOnSpill"
+});
+Sortable.mount(new AutoScrollPlugin());
+Sortable.mount(Remove, Revert);
+function removeNode(node) {
+ if (node.parentElement !== null) {
+ node.parentElement.removeChild(node);
+ }
+}
+function insertNodeAt(fatherNode, node, position) {
+ const refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;
+ fatherNode.insertBefore(node, refNode);
+}
+function getConsole() {
+ if (typeof window !== "undefined") {
+ return window.console;
+ }
+ return global.console;
+}
+const console = getConsole();
+function cached(fn) {
+ const cache = /* @__PURE__ */ Object.create(null);
+ return function cachedFn(str) {
+ const hit = cache[str];
+ return hit || (cache[str] = fn(str));
+ };
+}
+const regex = /-(\w)/g;
+const camelize = cached((str) => str.replace(regex, (_, c) => c.toUpperCase()));
+const manageAndEmit$1 = ["Start", "Add", "Remove", "Update", "End"];
+const emit$1 = ["Choose", "Unchoose", "Sort", "Filter", "Clone"];
+const manage$1 = ["Move"];
+const eventHandlerNames = [manage$1, manageAndEmit$1, emit$1].flatMap((events2) => events2).map((evt) => `on${evt}`);
+const events = {
+ manage: manage$1,
+ manageAndEmit: manageAndEmit$1,
+ emit: emit$1
+};
+function isReadOnly(eventName) {
+ return eventHandlerNames.indexOf(eventName) !== -1;
+}
+const tags = [
+ "a",
+ "abbr",
+ "address",
+ "area",
+ "article",
+ "aside",
+ "audio",
+ "b",
+ "base",
+ "bdi",
+ "bdo",
+ "blockquote",
+ "body",
+ "br",
+ "button",
+ "canvas",
+ "caption",
+ "cite",
+ "code",
+ "col",
+ "colgroup",
+ "data",
+ "datalist",
+ "dd",
+ "del",
+ "details",
+ "dfn",
+ "dialog",
+ "div",
+ "dl",
+ "dt",
+ "em",
+ "embed",
+ "fieldset",
+ "figcaption",
+ "figure",
+ "footer",
+ "form",
+ "h1",
+ "h2",
+ "h3",
+ "h4",
+ "h5",
+ "h6",
+ "head",
+ "header",
+ "hgroup",
+ "hr",
+ "html",
+ "i",
+ "iframe",
+ "img",
+ "input",
+ "ins",
+ "kbd",
+ "label",
+ "legend",
+ "li",
+ "link",
+ "main",
+ "map",
+ "mark",
+ "math",
+ "menu",
+ "menuitem",
+ "meta",
+ "meter",
+ "nav",
+ "noscript",
+ "object",
+ "ol",
+ "optgroup",
+ "option",
+ "output",
+ "p",
+ "param",
+ "picture",
+ "pre",
+ "progress",
+ "q",
+ "rb",
+ "rp",
+ "rt",
+ "rtc",
+ "ruby",
+ "s",
+ "samp",
+ "script",
+ "section",
+ "select",
+ "slot",
+ "small",
+ "source",
+ "span",
+ "strong",
+ "style",
+ "sub",
+ "summary",
+ "sup",
+ "svg",
+ "table",
+ "tbody",
+ "td",
+ "template",
+ "textarea",
+ "tfoot",
+ "th",
+ "thead",
+ "time",
+ "title",
+ "tr",
+ "track",
+ "u",
+ "ul",
+ "var",
+ "video",
+ "wbr"
+];
+function isHtmlTag(name) {
+ return tags.includes(name);
+}
+function isTransition(name) {
+ return ["transition-group", "TransitionGroup"].includes(name);
+}
+function isHtmlAttribute(value) {
+ return ["id", "class", "role", "style"].includes(value) || value.startsWith("data-") || value.startsWith("aria-") || value.startsWith("on");
+}
+function project(entries) {
+ return entries.reduce((res, [key, value]) => {
+ res[key] = value;
+ return res;
+ }, {});
+}
+function getComponentAttributes({ $attrs, componentData = {} }) {
+ const attributes = project(
+ Object.entries($attrs).filter(([key, _]) => isHtmlAttribute(key))
+ );
+ return {
+ ...attributes,
+ ...componentData
+ };
+}
+function createSortableOption({ $attrs, callBackBuilder }) {
+ const options = project(getValidSortableEntries($attrs));
+ Object.entries(callBackBuilder).forEach(([eventType, eventBuilder]) => {
+ events[eventType].forEach((event) => {
+ options[`on${event}`] = eventBuilder(event);
+ });
+ });
+ const draggable = `[data-draggable]${options.draggable || ""}`;
+ return {
+ ...options,
+ draggable
+ };
+}
+function getValidSortableEntries(value) {
+ return Object.entries(value).filter(([key, _]) => !isHtmlAttribute(key)).map(([key, value2]) => [camelize(key), value2]).filter(([key, _]) => !isReadOnly(key));
+}
+const getHtmlElementFromNode = ({ el }) => el;
+const addContext = (domElement, context) => domElement.__draggable_context = context;
+const getContext = (domElement) => domElement.__draggable_context;
+class ComponentStructure {
+ constructor({
+ nodes: { header, default: defaultNodes, footer },
+ root,
+ realList
+ }) {
+ this.defaultNodes = defaultNodes;
+ this.children = [...header, ...defaultNodes, ...footer];
+ this.externalComponent = root.externalComponent;
+ this.rootTransition = root.transition;
+ this.tag = root.tag;
+ this.realList = realList;
+ }
+ get _isRootComponent() {
+ return this.externalComponent || this.rootTransition;
+ }
+ render(h2, attributes) {
+ const { tag, children, _isRootComponent } = this;
+ const option2 = !_isRootComponent ? children : { default: () => children };
+ return h2(tag, attributes, option2);
+ }
+ updated() {
+ const { defaultNodes, realList } = this;
+ defaultNodes.forEach((node, index2) => {
+ addContext(getHtmlElementFromNode(node), {
+ element: realList[index2],
+ index: index2
+ });
+ });
+ }
+ getUnderlyingVm(domElement) {
+ return getContext(domElement);
+ }
+ getVmIndexFromDomIndex(domIndex, element) {
+ const { defaultNodes } = this;
+ const { length } = defaultNodes;
+ const domChildren = element.children;
+ const domElement = domChildren.item(domIndex);
+ if (domElement === null) {
+ return length;
+ }
+ const context = getContext(domElement);
+ if (context) {
+ return context.index;
+ }
+ if (length === 0) {
+ return 0;
+ }
+ const firstDomListElement = getHtmlElementFromNode(defaultNodes[0]);
+ const indexFirstDomListElement = [...domChildren].findIndex(
+ (element2) => element2 === firstDomListElement
+ );
+ return domIndex < indexFirstDomListElement ? 0 : length;
+ }
+}
+function getSlot(slots, key) {
+ const slotValue = slots[key];
+ return slotValue ? slotValue() : [];
+}
+function computeNodes({ $slots, realList, getKey }) {
+ const normalizedList = realList || [];
+ const [header, footer] = ["header", "footer"].map(
+ (name) => getSlot($slots, name)
+ );
+ const { item } = $slots;
+ if (!item) {
+ throw new Error("draggable element must have an item slot");
+ }
+ const defaultNodes = normalizedList.flatMap(
+ (element, index2) => item({ element, index: index2 }).map((node) => {
+ node.key = getKey(element);
+ node.props = { ...node.props || {}, "data-draggable": true };
+ return node;
+ })
+ );
+ if (defaultNodes.length !== normalizedList.length) {
+ throw new Error("Item slot must have only one child");
+ }
+ return {
+ header,
+ footer,
+ default: defaultNodes
+ };
+}
+function getRootInformation(tag) {
+ const transition = isTransition(tag);
+ const externalComponent = !isHtmlTag(tag) && !transition;
+ return {
+ transition,
+ externalComponent,
+ tag: externalComponent ? resolveComponent(tag) : transition ? TransitionGroup : tag
+ };
+}
+function computeComponentStructure({ $slots, tag, realList, getKey }) {
+ const nodes = computeNodes({ $slots, realList, getKey });
+ const root = getRootInformation(tag);
+ return new ComponentStructure({ nodes, root, realList });
+}
+function emit(evtName, evtData) {
+ nextTick(() => this.$emit(evtName.toLowerCase(), evtData));
+}
+function manage(evtName) {
+ return (evtData, originalElement) => {
+ if (this.realList !== null) {
+ return this[`onDrag${evtName}`](evtData, originalElement);
+ }
+ };
+}
+function manageAndEmit(evtName) {
+ const delegateCallBack = manage.call(this, evtName);
+ return (evtData, originalElement) => {
+ delegateCallBack.call(this, evtData, originalElement);
+ emit.call(this, evtName, evtData);
+ };
+}
+let draggingElement = null;
+const props = {
+ list: {
+ type: Array,
+ required: false,
+ default: null
+ },
+ modelValue: {
+ type: Array,
+ required: false,
+ default: null
+ },
+ itemKey: {
+ type: [String, Function],
+ required: true
+ },
+ clone: {
+ type: Function,
+ default: (original) => {
+ return original;
+ }
+ },
+ tag: {
+ type: String,
+ default: "div"
+ },
+ move: {
+ type: Function,
+ default: null
+ },
+ componentData: {
+ type: Object,
+ required: false,
+ default: null
+ }
+};
+const emits = [
+ "update:modelValue",
+ "change",
+ ...[...events.manageAndEmit, ...events.emit].map((evt) => evt.toLowerCase())
+];
+const draggableComponent = defineComponent({
+ name: "draggable",
+ inheritAttrs: false,
+ props,
+ emits,
+ data() {
+ return {
+ error: false
+ };
+ },
+ render() {
+ try {
+ this.error = false;
+ const { $slots, $attrs, tag, componentData, realList, getKey } = this;
+ const componentStructure = computeComponentStructure({
+ $slots,
+ tag,
+ realList,
+ getKey
+ });
+ this.componentStructure = componentStructure;
+ const attributes = getComponentAttributes({ $attrs, componentData });
+ return componentStructure.render(h, attributes);
+ } catch (err) {
+ this.error = true;
+ return h("pre", { style: { color: "red" } }, err.stack);
+ }
+ },
+ created() {
+ if (this.list !== null && this.modelValue !== null) {
+ console.error(
+ "modelValue and list props are mutually exclusive! Please set one or another."
+ );
+ }
+ },
+ mounted() {
+ if (this.error) {
+ return;
+ }
+ const { $attrs, $el, componentStructure } = this;
+ componentStructure.updated();
+ const sortableOptions = createSortableOption({
+ $attrs,
+ callBackBuilder: {
+ manageAndEmit: (event) => manageAndEmit.call(this, event),
+ emit: (event) => emit.bind(this, event),
+ manage: (event) => manage.call(this, event)
+ }
+ });
+ const targetDomElement = $el.nodeType === 1 ? $el : $el.parentElement;
+ this._sortable = new Sortable(targetDomElement, sortableOptions);
+ this.targetDomElement = targetDomElement;
+ targetDomElement.__draggable_component__ = this;
+ },
+ updated() {
+ this.componentStructure.updated();
+ },
+ beforeUnmount() {
+ if (this._sortable !== void 0)
+ this._sortable.destroy();
+ },
+ computed: {
+ realList() {
+ const { list } = this;
+ return list ? list : this.modelValue;
+ },
+ getKey() {
+ const { itemKey } = this;
+ if (typeof itemKey === "function") {
+ return itemKey;
+ }
+ return (element) => element[itemKey];
+ }
+ },
+ watch: {
+ $attrs: {
+ handler(newOptionValue) {
+ const { _sortable } = this;
+ if (!_sortable)
+ return;
+ getValidSortableEntries(newOptionValue).forEach(([key, value]) => {
+ _sortable.option(key, value);
+ });
+ },
+ deep: true
+ }
+ },
+ methods: {
+ getUnderlyingVm(domElement) {
+ return this.componentStructure.getUnderlyingVm(domElement) || null;
+ },
+ getUnderlyingPotencialDraggableComponent(htmElement) {
+ return htmElement.__draggable_component__;
+ },
+ emitChanges(evt) {
+ nextTick(() => this.$emit("change", evt));
+ },
+ alterList(onList) {
+ if (this.list) {
+ onList(this.list);
+ return;
+ }
+ const newList = [...this.modelValue];
+ onList(newList);
+ this.$emit("update:modelValue", newList);
+ },
+ spliceList() {
+ const spliceList = (list) => list.splice(...arguments);
+ this.alterList(spliceList);
+ },
+ updatePosition(oldIndex2, newIndex2) {
+ const updatePosition = (list) => list.splice(newIndex2, 0, list.splice(oldIndex2, 1)[0]);
+ this.alterList(updatePosition);
+ },
+ getRelatedContextFromMoveEvent({ to, related }) {
+ const component = this.getUnderlyingPotencialDraggableComponent(to);
+ if (!component) {
+ return { component };
+ }
+ const list = component.realList;
+ const context = { list, component };
+ if (to !== related && list) {
+ const destination = component.getUnderlyingVm(related) || {};
+ return { ...destination, ...context };
+ }
+ return context;
+ },
+ getVmIndexFromDomIndex(domIndex) {
+ return this.componentStructure.getVmIndexFromDomIndex(
+ domIndex,
+ this.targetDomElement
+ );
+ },
+ onDragStart(evt) {
+ this.context = this.getUnderlyingVm(evt.item);
+ evt.item._underlying_vm_ = this.clone(this.context.element);
+ draggingElement = evt.item;
+ },
+ onDragAdd(evt) {
+ const element = evt.item._underlying_vm_;
+ if (element === void 0) {
+ return;
+ }
+ removeNode(evt.item);
+ const newIndex2 = this.getVmIndexFromDomIndex(evt.newIndex);
+ this.spliceList(newIndex2, 0, element);
+ const added = { element, newIndex: newIndex2 };
+ this.emitChanges({ added });
+ },
+ onDragRemove(evt) {
+ insertNodeAt(this.$el, evt.item, evt.oldIndex);
+ if (evt.pullMode === "clone") {
+ removeNode(evt.clone);
+ return;
+ }
+ const { index: oldIndex2, element } = this.context;
+ this.spliceList(oldIndex2, 1);
+ const removed = { element, oldIndex: oldIndex2 };
+ this.emitChanges({ removed });
+ },
+ onDragUpdate(evt) {
+ removeNode(evt.item);
+ insertNodeAt(evt.from, evt.item, evt.oldIndex);
+ const oldIndex2 = this.context.index;
+ const newIndex2 = this.getVmIndexFromDomIndex(evt.newIndex);
+ this.updatePosition(oldIndex2, newIndex2);
+ const moved2 = { element: this.context.element, oldIndex: oldIndex2, newIndex: newIndex2 };
+ this.emitChanges({ moved: moved2 });
+ },
+ computeFutureIndex(relatedContext, evt) {
+ if (!relatedContext.element) {
+ return 0;
+ }
+ const domChildren = [...evt.to.children].filter(
+ (el) => el.style["display"] !== "none"
+ );
+ const currentDomIndex = domChildren.indexOf(evt.related);
+ const currentIndex = relatedContext.component.getVmIndexFromDomIndex(
+ currentDomIndex
+ );
+ const draggedInList = domChildren.indexOf(draggingElement) !== -1;
+ return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;
+ },
+ onDragMove(evt, originalEvent) {
+ const { move, realList } = this;
+ if (!move || !realList) {
+ return true;
+ }
+ const relatedContext = this.getRelatedContextFromMoveEvent(evt);
+ const futureIndex = this.computeFutureIndex(relatedContext, evt);
+ const draggedContext = {
+ ...this.context,
+ futureIndex
+ };
+ const sendEvent = {
+ ...evt,
+ relatedContext,
+ draggedContext
+ };
+ return move(sendEvent, originalEvent);
+ },
+ onDragEnd() {
+ draggingElement = null;
+ }
+ }
+});
+const _hoisted_1$2 = { class: "query-builder-rule" };
+const _hoisted_2$2 = {
+ key: 0,
+ class: "query-builder__draggable-handle",
+ src: _imports_0,
+ alt: "Drag element to target"
+};
+const _hoisted_3$2 = ["textContent"];
+const _hoisted_4$1 = { class: "query-builder-rule__component-container" };
+const _sfc_main$3 = /* @__PURE__ */ defineComponent({
+ __name: "QueryBuilderRule",
+ props: {
+ config: {
+ type: Object,
+ required: true,
+ validator: (param) => isQueryBuilderConfig(param)
+ },
+ query: {
+ type: Object
+ }
+ },
+ emits: ["query-update"],
+ setup(__props, { emit: emit2 }) {
+ const props2 = __props;
+ const definition = computed(() => {
+ const ruleDefinition = props2.config.rules.find((rule) => rule.identifier === props2.query.identifier);
+ if (ruleDefinition) {
+ return ruleDefinition;
+ }
+ throw new Error(`Invalid identifier "${props2.query.identifier}": no rule definition available.`);
+ });
+ const component = computed(() => definition.value.component);
+ const ruleData = computed({
+ get: () => props2.query.value,
+ set: (update) => {
+ ruleUpdate(update);
+ }
+ });
+ const ruleSlotProps = computed(() => ({
+ ruleComponent: component.value,
+ ruleData: props2.query.value,
+ ruleIdentifier: props2.query.identifier,
+ updateRuleData: (ruleDataParam) => ruleUpdate(ruleDataParam)
+ }));
+ function ruleUpdate(update) {
+ emit2(
+ "query-update",
+ {
+ identifier: props2.query.identifier,
+ value: update
+ }
+ );
+ }
+ const showDragHandle = computed(() => {
+ if (props2.config.dragging) {
+ return !props2.config.dragging.disabled;
+ }
+ return false;
+ });
+ return (_ctx, _cache) => {
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
+ unref(showDragHandle) ? (openBlock(), createElementBlock("img", _hoisted_2$2)) : createCommentVNode("", true),
+ _ctx.$slots.rule ? renderSlot(_ctx.$slots, "rule", normalizeProps(mergeProps({ key: 1 }, unref(ruleSlotProps))), void 0, true) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
+ createElementVNode("span", {
+ class: "query-builder-rule__name",
+ textContent: toDisplayString(unref(definition).name)
+ }, null, 8, _hoisted_3$2),
+ createElementVNode("div", _hoisted_4$1, [
+ (openBlock(), createBlock(resolveDynamicComponent(unref(component)), {
+ modelValue: unref(ruleData),
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(ruleData) ? ruleData.value = $event : null)
+ }, null, 8, ["modelValue"]))
+ ])
+ ], 64))
+ ]);
+ };
+ }
+});
+const QueryBuilderRule_vue_vue_type_style_index_0_scoped_f61f07d1_lang = "";
+const _export_sfc = (sfc, props2) => {
+ const target = sfc.__vccOpts || sfc;
+ for (const [key, val] of props2) {
+ target[key] = val;
+ }
+ return target;
+};
+const QueryBuilderRule = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-f61f07d1"]]);
+const _withScopeId$1 = (n) => (pushScopeId("data-v-530acb3b"), n = n(), popScopeId(), n);
+const _hoisted_1$1 = { class: "query-builder-child" };
+const _hoisted_2$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createElementVNode("span", { "aria-hidden": "true" }, "\xD7", -1));
+const _hoisted_3$1 = [
+ _hoisted_2$1
+];
+const _sfc_main$2 = /* @__PURE__ */ defineComponent({
+ __name: "QueryBuilderChild",
+ props: {
+ query: {
+ type: Object,
+ required: true,
+ validator: (query) => isRule(query) || isRuleSet(query)
+ },
+ config: {
+ type: Object,
+ required: true,
+ validator: (param) => isQueryBuilderConfig(param)
+ },
+ depth: Number
+ },
+ emits: ["query-update", "delete-child"],
+ setup(__props) {
+ const props2 = __props;
+ const isRule$1 = computed(() => isRule(props2.query));
+ const isRuleSet$1 = computed(() => isRuleSet(props2.query));
+ const ruleDefinition = computed(() => {
+ if (!isRule$1.value) {
+ return null;
+ }
+ const ruleDefinitionResult = props2.config.rules.find((definition2) => definition2.identifier === props2.query.identifier);
+ return ruleDefinitionResult || null;
+ });
+ const component = computed(() => {
+ if (isRule$1.value && ruleDefinition.value) {
+ return QueryBuilderRule;
+ }
+ if (isRuleSet$1.value) {
+ return QueryBuilderGroup;
+ }
+ throw new Error("No component definition available.");
+ });
+ computed(() => {
+ if (isRule$1.value && ruleDefinition.value) {
+ return ruleDefinition.value;
+ }
+ if (isRuleSet$1.value) {
+ return null;
+ }
+ throw new Error("No component definition available.");
+ });
+ return (_ctx, _cache) => {
+ return openBlock(), createElementBlock("div", _hoisted_1$1, [
+ (openBlock(), createBlock(resolveDynamicComponent(unref(component)), {
+ config: __props.config,
+ query: __props.query,
+ depth: __props.depth,
+ onQueryUpdate: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("query-update", $event)),
+ class: "query-builder-child__component"
+ }, createSlots({ _: 2 }, [
+ renderList(_ctx.$slots, (_, slotName) => {
+ return {
+ name: slotName,
+ fn: withCtx((props22) => [
+ renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(props22)), void 0, true)
+ ])
+ };
+ })
+ ]), 1064, ["config", "query", "depth"])),
+ createElementVNode("button", {
+ "aria-label": "Close",
+ class: "query-builder-child__delete-child",
+ onClick: _cache[1] || (_cache[1] = withModifiers(($event) => _ctx.$emit("delete-child"), ["stop", "prevent"]))
+ }, _hoisted_3$1)
+ ]);
+ };
+ }
+});
+const QueryBuilderChild_vue_vue_type_style_index_0_scoped_530acb3b_lang = "";
+const QueryBuilderChild = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-530acb3b"]]);
+const _withScopeId = (n) => (pushScopeId("data-v-78d4affb"), n = n(), popScopeId(), n);
+const _hoisted_1 = { class: "query-builder-group" };
+const _hoisted_2 = { class: "query-builder-group__control" };
+const _hoisted_3 = {
+ key: 0,
+ class: "query-builder-group__group-selection-slot"
+};
+const _hoisted_4 = {
+ key: 0,
+ class: "query-builder__draggable-handle",
+ src: _imports_0,
+ alt: "Drag element to target"
+};
+const _hoisted_5 = {
+ key: 1,
+ class: "query-builder-group__group-selection"
+};
+const _hoisted_6 = {
+ key: 0,
+ class: "query-builder__draggable-handle",
+ src: _imports_0,
+ alt: "Drag element to target"
+};
+const _hoisted_7 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createElementVNode("span", { class: "query-builder-group__group-operator" }, "Operator", -1));
+const _hoisted_8 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createElementVNode("option", {
+ disabled: "",
+ value: ""
+}, "Select an operator", -1));
+const _hoisted_9 = ["value", "textContent"];
+const _hoisted_10 = {
+ key: 3,
+ class: "query-builder-group__group-control"
+};
+const _hoisted_11 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createElementVNode("option", {
+ disabled: "",
+ value: ""
+}, "Select a rule", -1));
+const _hoisted_12 = ["value", "textContent"];
+const _hoisted_13 = ["disabled"];
+const _hoisted_14 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createElementVNode("div", { class: "query-builder-group__spacer" }, null, -1));
+const _sfc_main$1 = /* @__PURE__ */ defineComponent({
+ __name: "QueryBuilderGroup",
+ props: {
+ config: {
+ type: Object,
+ required: true,
+ validator: (param) => isQueryBuilderConfig(param)
+ },
+ query: {
+ type: Object
+ },
+ depth: {
+ type: Number
+ }
+ },
+ emits: ["query-update"],
+ setup(__props, { expose, emit: emit2 }) {
+ const props2 = __props;
+ const getMergeTrap = inject("getMergeTrap");
+ watch(() => props2.query, (n) => pruneChildren());
+ watch(() => props2.config.maxDepth, (n) => pruneChildren());
+ onMounted(() => pruneChildren());
+ function pruneChildren() {
+ if (children.value.length === props2.query.children.length) {
+ return;
+ }
+ const childrenUpdate = [...children.value];
+ emit2(
+ "query-update",
+ {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ }
+ );
+ }
+ const selectedOperator = computed({
+ get: () => props2.query.operatorIdentifier,
+ set: (operatorIdentifier) => {
+ emit2(
+ "query-update",
+ {
+ ...props2.query,
+ operatorIdentifier
+ }
+ );
+ }
+ });
+ const trap = ref(null);
+ const selectedRule = ref("");
+ const type = QueryBuilderGroupSym;
+ const children = computed(() => {
+ if (maxDepthExeeded.value) {
+ return [...props2.query.children].filter(isRule);
+ }
+ return [...props2.query.children];
+ });
+ const childProxies = computed(() => children.value.map((item, index2) => ({
+ __item: item,
+ __id: index2
+ })));
+ function updateSort(ev) {
+ if (ev.moved) {
+ moveSortedChild(ev.moved);
+ return;
+ }
+ if (ev.added) {
+ addSortedChild(ev.added);
+ return;
+ }
+ if (ev.removed) {
+ removeSortedChild(ev.removed);
+ }
+ }
+ function moveSortedChild(move) {
+ const childrenUpdate = [...children.value];
+ childrenUpdate.splice(move.newIndex, 0, childrenUpdate.splice(move.oldIndex, 1)[0]);
+ emit2(
+ "query-update",
+ {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ }
+ );
+ }
+ const draggableComponent$1 = ref(null);
+ function addSortedChild(added) {
+ var _a;
+ const childrenUpdate = [...children.value];
+ childrenUpdate.splice(added.newIndex, 0, added.element.__item);
+ getMergeTrap().registerSortUpdate({
+ component: (_a = draggableComponent$1.value) == null ? void 0 : _a.$parent,
+ ev: {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ },
+ adding: true,
+ affectedIdx: added.newIndex
+ });
+ }
+ function removeSortedChild(removed) {
+ var _a;
+ const childrenUpdate = [...children.value];
+ childrenUpdate.splice(removed.oldIndex, 1);
+ getMergeTrap().registerSortUpdate({
+ component: (_a = draggableComponent$1.value) == null ? void 0 : _a.$parent,
+ ev: {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ },
+ adding: false,
+ affectedIdx: removed.oldIndex
+ });
+ }
+ const operators = computed(() => props2.config.operators);
+ const rules = computed(() => props2.config.rules);
+ const childDepth = computed(() => props2.depth + 1);
+ const childDepthClass = computed(() => `query-builder-group__group-children--depth-${childDepth.value}`);
+ const hasMaxDepth = computed(() => typeof props2.config.maxDepth === "number");
+ const maxDepthExeeded = computed(() => {
+ if (!hasMaxDepth.value) {
+ return false;
+ }
+ return props2.depth >= props2.config.maxDepth;
+ });
+ const borderColor = computed(() => {
+ if (props2.config.colors && props2.config.colors.length > 0) {
+ return props2.config.colors[props2.depth % props2.config.colors.length];
+ }
+ return "";
+ });
+ const getBorderStyle = computed(() => {
+ if (borderColor.value) {
+ return `border-color: ${borderColor.value}`;
+ }
+ return "border-left: 0";
+ });
+ const groupOperatorSlotProps = computed(() => ({
+ currentOperator: selectedOperator.value,
+ operators: operators.value,
+ updateCurrentOperator: (newOperator) => {
+ emit2(
+ "query-update",
+ {
+ ...props2.query,
+ operatorIdentifier: newOperator
+ }
+ );
+ }
+ }));
+ const groupControlSlotProps = computed(() => ({
+ maxDepthExeeded: maxDepthExeeded.value,
+ rules: rules.value,
+ addRule: (newRule) => {
+ const currentRule = selectedRule.value;
+ selectedRule.value = newRule;
+ addRule();
+ selectedRule.value = currentRule;
+ },
+ newGroup: () => newGroup()
+ }));
+ const dragOptions = computed(() => {
+ if (!props2.config.dragging) {
+ return {
+ disabled: true
+ };
+ }
+ if (!hasMaxDepth.value) {
+ return props2.config.dragging;
+ }
+ return {
+ ...props2.config.dragging,
+ group: {
+ name: props2.config.dragging.group,
+ put: (to, from, dragEl2) => {
+ const dragged = dragEl2 == null ? void 0 : dragEl2.__vue__;
+ const childDepthCurrent = calculateMaxDepth({ ...dragged.query }, 0);
+ return props2.depth + childDepthCurrent <= props2.config.maxDepth;
+ }
+ }
+ };
+ });
+ function calculateMaxDepth(query, depthCnt) {
+ if (isRule(query)) {
+ return depthCnt;
+ }
+ return query.children.reduce((cntPerChild, c) => Math.max(
+ cntPerChild,
+ calculateMaxDepth({ ...c }, depthCnt + 1)
+ ), depthCnt);
+ }
+ const showDragHandle = computed(() => !(dragOptions.value.disabled || props2.depth === 0));
+ function addRule() {
+ const childrenUpdate = [...children.value];
+ const selectedRuleFound = props2.config.rules.find((rule) => rule.identifier === selectedRule.value);
+ if (!selectedRuleFound) {
+ throw new Error(`Rule identifier "${selectedRule.value}" is invalid.`);
+ }
+ if (typeof selectedRuleFound.initialValue === "object" && selectedRuleFound.initialValue !== null) {
+ throw new Error(`"initialValue" of "${selectedRuleFound.identifier}" must not be an object - use a factory function!`);
+ }
+ let value = null;
+ if (typeof selectedRuleFound.initialValue !== "undefined") {
+ value = selectedRuleFound.initialValue;
+ }
+ if (typeof value === "function") {
+ value = value();
+ }
+ childrenUpdate.push({
+ identifier: selectedRuleFound.identifier,
+ value
+ });
+ emit2(
+ "query-update",
+ {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ }
+ );
+ selectedRule.value = "";
+ }
+ function newGroup() {
+ if (maxDepthExeeded.value) {
+ return;
+ }
+ const childrenUpdate = [...children.value];
+ childrenUpdate.push({
+ operatorIdentifier: props2.config.operators[0].identifier,
+ children: []
+ });
+ emit2(
+ "query-update",
+ {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ }
+ );
+ }
+ function updateChild(position, newChild) {
+ if (trap.value) {
+ trap.value(position, newChild);
+ return;
+ }
+ const childrenUpdate = [...children.value];
+ childrenUpdate.splice(position, 1, newChild);
+ emit2(
+ "query-update",
+ {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ }
+ );
+ }
+ function deleteChild(idx) {
+ const childrenUpdate = [...children.value];
+ childrenUpdate.splice(idx, 1);
+ emit2(
+ "query-update",
+ {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ }
+ );
+ }
+ expose({
+ type,
+ children,
+ depth: computed(() => props2.depth),
+ selectedOperator,
+ trap
+ });
+ return (_ctx, _cache) => {
+ return openBlock(), createElementBlock("div", _hoisted_1, [
+ createElementVNode("div", _hoisted_2, [
+ _ctx.$slots.groupOperator ? (openBlock(), createElementBlock("div", _hoisted_3, [
+ unref(showDragHandle) ? (openBlock(), createElementBlock("img", _hoisted_4)) : createCommentVNode("", true),
+ renderSlot(_ctx.$slots, "groupOperator", normalizeProps(guardReactiveProps(unref(groupOperatorSlotProps))), void 0, true)
+ ])) : (openBlock(), createElementBlock("div", _hoisted_5, [
+ unref(showDragHandle) ? (openBlock(), createElementBlock("img", _hoisted_6)) : createCommentVNode("", true),
+ _hoisted_7,
+ withDirectives(createElementVNode("select", {
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(selectedOperator) ? selectedOperator.value = $event : null)
+ }, [
+ _hoisted_8,
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(operators), (operator) => {
+ return openBlock(), createElementBlock("option", {
+ key: operator.identifier,
+ value: operator.identifier,
+ textContent: toDisplayString(operator.name)
+ }, null, 8, _hoisted_9);
+ }), 128))
+ ], 512), [
+ [vModelSelect, unref(selectedOperator)]
+ ])
+ ])),
+ _ctx.$slots.groupControl ? renderSlot(_ctx.$slots, "groupControl", normalizeProps(mergeProps({ key: 2 }, unref(groupControlSlotProps))), void 0, true) : (openBlock(), createElementBlock("div", _hoisted_10, [
+ withDirectives(createElementVNode("select", {
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => selectedRule.value = $event)
+ }, [
+ _hoisted_11,
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(rules), (rule) => {
+ return openBlock(), createElementBlock("option", {
+ key: rule.identifier,
+ value: rule.identifier,
+ textContent: toDisplayString(rule.name)
+ }, null, 8, _hoisted_12);
+ }), 128))
+ ], 512), [
+ [vModelSelect, selectedRule.value]
+ ]),
+ createElementVNode("button", {
+ disabled: selectedRule.value === "",
+ onClick: addRule,
+ class: "query-builder-group__rule-adding-button"
+ }, " Add Rule ", 8, _hoisted_13),
+ !unref(maxDepthExeeded) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
+ _hoisted_14,
+ createElementVNode("button", {
+ onClick: newGroup,
+ class: "query-builder-group__group-adding-button"
+ }, " Add Group ")
+ ], 64)) : createCommentVNode("", true)
+ ]))
+ ]),
+ createVNode(unref(draggableComponent), mergeProps({
+ class: ["query-builder-group__group-children", unref(childDepthClass)],
+ style: unref(getBorderStyle),
+ modelValue: unref(childProxies),
+ onChange: updateSort,
+ "item-key": "__id",
+ tag: "div"
+ }, unref(dragOptions), {
+ ref_key: "draggableComponent",
+ ref: draggableComponent$1
+ }), {
+ item: withCtx(({ element: child, index: idx }) => [
+ (openBlock(), createBlock(QueryBuilderChild, {
+ key: idx,
+ config: __props.config,
+ query: child.__item,
+ depth: unref(childDepth),
+ onQueryUpdate: ($event) => updateChild(idx, $event),
+ onDeleteChild: ($event) => deleteChild(idx),
+ class: "query-builder-group__child"
+ }, createSlots({ _: 2 }, [
+ renderList(_ctx.$slots, (_, slotName) => {
+ return {
+ name: slotName,
+ fn: withCtx((props22) => [
+ renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(props22)), void 0, true)
+ ])
+ };
+ })
+ ]), 1032, ["config", "query", "depth", "onQueryUpdate", "onDeleteChild"]))
+ ]),
+ _: 3
+ }, 16, ["class", "style", "modelValue"])
+ ]);
+ };
+ }
+});
+const QueryBuilderGroup_vue_vue_type_style_index_0_scoped_78d4affb_lang = "";
+const QueryBuilderGroup = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-78d4affb"]]);
+const _sfc_main = /* @__PURE__ */ defineComponent({
+ __name: "QueryBuilder",
+ props: {
+ modelValue: {
+ type: Object,
+ required: false,
+ default: null,
+ validator: (query) => query === null || isRuleSet(query)
+ },
+ config: {
+ type: Object,
+ required: true,
+ validator: (param) => isQueryBuilderConfig(param)
+ }
+ },
+ emits: ["update:modelValue"],
+ setup(__props, { emit: emit2 }) {
+ const props2 = __props;
+ provide("getMergeTrap", provideMergeTrap);
+ let trap = null;
+ watch(() => props2.modelValue, () => {
+ trap = null;
+ });
+ const ruleSet = computed(() => {
+ if (props2.modelValue) {
+ return props2.modelValue;
+ }
+ if (props2.config.operators.length === 0) {
+ return {
+ operatorIdentifier: "",
+ children: []
+ };
+ }
+ return {
+ operatorIdentifier: props2.config.operators[0].identifier,
+ children: []
+ };
+ });
+ const queryBuiderConfig = computed(() => {
+ if (!props2.config.dragging) {
+ return props2.config;
+ }
+ return {
+ ...props2.config,
+ dragging: {
+ handle: ".query-builder__draggable-handle",
+ ...props2.config.dragging,
+ group: `${new Date().getTime() * Math.random()}`
+ }
+ };
+ });
+ function updateQuery(newQuery) {
+ trap = null;
+ emit2("update:modelValue", { ...newQuery });
+ }
+ function provideMergeTrap() {
+ if (trap) {
+ return trap;
+ }
+ trap = new MergeTrap();
+ return trap;
+ }
+ return (_ctx, _cache) => {
+ return openBlock(), createBlock(QueryBuilderGroup, {
+ config: unref(queryBuiderConfig),
+ query: unref(ruleSet),
+ depth: 0,
+ class: "query-builder__root",
+ onQueryUpdate: updateQuery
+ }, createSlots({ _: 2 }, [
+ renderList(_ctx.$slots, (_, slotName) => {
+ return {
+ name: slotName,
+ fn: withCtx((props22) => [
+ renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(props22)), void 0, true)
+ ])
+ };
+ })
+ ]), 1032, ["config", "query"]);
+ };
+ }
+});
+const QueryBuilder_vue_vue_type_style_index_0_scoped_1676f0cb_lang = "";
+const ReExportQueryBuilder = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1676f0cb"]]);
+export {
+ ReExportQueryBuilder as default
+};
+//# sourceMappingURL=query-builder-vue-3.js.map
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
ownKeys()
+ + +! +Sortable 1.14.0
+-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- License: +
-
+
-
+
- MIT +
+
+
+
+
+
+
+
+ - Source: +
- + + + + + + + + + +
Source: pages/all/+data.js
+ +import Client from "@/lib/GraphClient/GraphClient.js";
+import recordQuery from "@/lib/GraphClient/queries/getRecordSEO.json";
+
+export async function data(pageContext) {
+ const paramURL = pageContext.routeParams["*"];
+
+ if (!paramURL || paramURL.trim() === "" || paramURL === "index") {
+ return { record: null };
+ }
+
+ // Check for record page in id or DOI format
+ const FAIRsharingDOIregex = /FAIRsharing\.[a-zA-Z0-9]+/;
+ if (!isNaN(paramURL) || FAIRsharingDOIregex.test(paramURL)) {
+ return recordPage(paramURL);
+ }
+}
+
+/**
+ * Record Page data
+ * @param paramURL
+ * @return {Promise<{record}|{record: null}>}
+ */
+async function recordPage(paramURL) {
+ // Mirror the core execution logic from the recorddata.js action
+ const client = new Client();
+ const individualizedQuery = { ...recordQuery };
+ individualizedQuery.queryParam = {
+ id: paramURL,
+ };
+
+ try {
+ const responseData = await client.executeQuery(individualizedQuery);
+ //Extract the clean data object out to Vike's pageContext
+ return {
+ record: responseData?.fairsharingRecord || null,
+ };
+ }
+ catch (error) {
+ console.error(
+ "Failed to execute server-side SEO query for ID:",
+ paramURL,
+ error,
+ );
+ return { record: null };
+ }
+}
+
+ Source: utils/query-builder-vue-3/dist/query-builder-vue-3.js
+ +var __defProp = Object.defineProperty;
+var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
+var __publicField = (obj, key, value) => {
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
+ return value;
+};
+import { resolveComponent, TransitionGroup, defineComponent, h, nextTick, computed, openBlock, createElementBlock, unref, createCommentVNode, renderSlot, normalizeProps, mergeProps, Fragment, createElementVNode, toDisplayString, createBlock, resolveDynamicComponent, isRef, createSlots, renderList, withCtx, guardReactiveProps, withModifiers, pushScopeId, popScopeId, inject, watch, onMounted, ref, withDirectives, vModelSelect, createVNode, provide } from "vue";
+function isRule(param) {
+ if (typeof param !== "object" || param === null) {
+ return false;
+ }
+ if (typeof param.identifier !== "string") {
+ return false;
+ }
+ const { hasOwnProperty } = Object.prototype;
+ return hasOwnProperty.call(param, "value");
+}
+function isRuleSet(param) {
+ if (typeof param !== "object" || param === null) {
+ return false;
+ }
+ if (typeof param.operatorIdentifier !== "string") {
+ return false;
+ }
+ return Array.isArray(param.children) && param.children.every((child) => isRule(child) || isRuleSet(child));
+}
+function isOperatorDefinition(param) {
+ if (typeof param !== "object" || param === null) {
+ return false;
+ }
+ if (typeof param.identifier !== "string") {
+ return false;
+ }
+ return typeof param.name === "string";
+}
+function isRuleDefinition(param) {
+ if (typeof param !== "object" || param === null) {
+ return false;
+ }
+ if (typeof param.identifier !== "string") {
+ return false;
+ }
+ if (typeof param.name !== "string") {
+ return false;
+ }
+ return ["function", "object", "string"].includes(typeof param.component);
+}
+function isQueryBuilderConfig(param) {
+ if (typeof param !== "object" || param === null) {
+ return false;
+ }
+ return Array.isArray(param.operators) && param.operators.every((operator) => isOperatorDefinition(operator)) && Array.isArray(param.rules) && param.rules.every((rule) => isRuleDefinition(rule)) && (!param.colors || Array.isArray(param.colors) && param.colors.every((color) => typeof color === "string")) && (typeof param.maxDepth === "undefined" || typeof param.maxDepth === "number" && param.maxDepth >= 0);
+}
+function mitt(n) {
+ return { all: n = n || /* @__PURE__ */ new Map(), on: function(t, e) {
+ var i = n.get(t);
+ i ? i.push(e) : n.set(t, [e]);
+ }, off: function(t, e) {
+ var i = n.get(t);
+ i && (e ? i.splice(i.indexOf(e) >>> 0, 1) : n.set(t, []));
+ }, emit: function(t, e) {
+ var i = n.get(t);
+ i && i.slice().map(function(n2) {
+ n2(e);
+ }), (i = n.get("*")) && i.slice().map(function(n2) {
+ n2(t, e);
+ });
+ } };
+}
+const QueryBuilderGroupSym = Symbol("QueryBuilderGroup");
+function getNextGroup(group) {
+ if (group.depth < 1) {
+ return group;
+ }
+ let vm = group;
+ do {
+ vm = vm.$parent;
+ } while (vm.type !== QueryBuilderGroupSym);
+ return vm;
+}
+function getCommonAncestor(nodeA, nodeB) {
+ let a = nodeA;
+ let b = nodeB;
+ if (a.depth !== b.depth) {
+ let lower = a.depth > b.depth ? a : b;
+ const higher = a.depth < b.depth ? a : b;
+ while (lower.depth !== higher.depth) {
+ lower = getNextGroup(lower);
+ }
+ a = lower;
+ b = higher;
+ }
+ while (a !== b) {
+ a = getNextGroup(a);
+ b = getNextGroup(b);
+ }
+ return a;
+}
+function triggerUpdate(adder, remover) {
+ const commonAncestor = getCommonAncestor(adder.component, remover.component);
+ if (![adder.component, remover.component].includes(commonAncestor)) {
+ mergeViaParent(commonAncestor, adder, remover);
+ return;
+ }
+ mergeViaNode(commonAncestor, adder, remover);
+}
+function mergeViaParent(commonAncestor, adder, remover) {
+ let children = null;
+ commonAncestor.trap = (position, newChild) => {
+ if (children === null) {
+ children = [...commonAncestor.children];
+ children.splice(position, 1, newChild);
+ return;
+ }
+ commonAncestor.trap = null;
+ children.splice(position, 1, newChild);
+ commonAncestor.$emit(
+ "query-update",
+ {
+ operatorIdentifier: commonAncestor.selectedOperator,
+ children
+ }
+ );
+ };
+ adder.component.$emit("query-update", adder.ev);
+ remover.component.$emit("query-update", remover.ev);
+}
+function mergeViaNode(parentEmitter, adder, remover) {
+ const childEmitter = parentEmitter === adder.component ? remover : adder;
+ const children = [...parentEmitter.children];
+ parentEmitter.trap = (position, newChild) => {
+ parentEmitter.trap = null;
+ children.splice(position, 1, newChild);
+ if (parentEmitter === adder.component) {
+ children.splice(adder.affectedIdx, 0, adder.ev.children[adder.affectedIdx]);
+ } else {
+ children.splice(remover.affectedIdx, 1);
+ }
+ parentEmitter.$emit(
+ "query-update",
+ {
+ operatorIdentifier: parentEmitter.selectedOperator,
+ children
+ }
+ );
+ };
+ childEmitter.component.$emit("query-update", childEmitter.ev);
+}
+class MergeTrap {
+ constructor() {
+ __publicField(this, "eventBus");
+ this.eventBus = mitt();
+ Promise.all([
+ new Promise((res) => this.eventBus.on("adder-registered", res)),
+ new Promise((res) => this.eventBus.on("remover-registered", res))
+ ]).then((args) => triggerUpdate(args[0], args[1])).then(() => this.eventBus.all.clear());
+ }
+ registerSortUpdate(update) {
+ if (update.adding) {
+ return this.registerAdder(update);
+ }
+ return this.registerRemover(update);
+ }
+ registerAdder(ev) {
+ this.eventBus.emit("adder-registered", ev);
+ }
+ registerRemover(ev) {
+ this.eventBus.emit("remover-registered", ev);
+ }
+}
+const _imports_0 = "data:image/svg+xml;base64,PHN2ZyBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9jdXNhYmxlPSJmYWxzZSIgZGF0YS1wcmVmaXg9ImZhcyIgZGF0YS1pY29uPSJncmlwLXZlcnRpY2FsIiBjbGFzcz0ic3ZnLWlubGluZS0tZmEgZmEtZ3JpcC12ZXJ0aWNhbCBmYS13LTEwIiByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDMyMCA1MTIiPjxwYXRoIGZpbGw9IiNCQkIiIGQ9Ik05NiAzMkgzMkMxNC4zMyAzMiAwIDQ2LjMzIDAgNjR2NjRjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg2NGMxNy42NyAwIDMyLTE0LjMzIDMyLTMyVjY0YzAtMTcuNjctMTQuMzMtMzItMzItMzJ6bTAgMTYwSDMyYy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjY0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNjRjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMnYtNjRjMC0xNy42Ny0xNC4zMy0zMi0zMi0zMnptMCAxNjBIMzJjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2NjRjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg2NGMxNy42NyAwIDMyLTE0LjMzIDMyLTMydi02NGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyek0yODggMzJoLTY0Yy0xNy42NyAwLTMyIDE0LjMzLTMyIDMydjY0YzAgMTcuNjcgMTQuMzMgMzIgMzIgMzJoNjRjMTcuNjcgMCAzMi0xNC4zMyAzMi0zMlY2NGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyem0wIDE2MGgtNjRjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2NjRjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg2NGMxNy42NyAwIDMyLTE0LjMzIDMyLTMydi02NGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyem0wIDE2MGgtNjRjLTE3LjY3IDAtMzIgMTQuMzMtMzIgMzJ2NjRjMCAxNy42NyAxNC4zMyAzMiAzMiAzMmg2NGMxNy42NyAwIDMyLTE0LjMzIDMyLTMydi02NGMwLTE3LjY3LTE0LjMzLTMyLTMyLTMyeiI+PC9wYXRoPjwvc3ZnPgo=";
+/**!
+ * Sortable 1.14.0
+ * @author RubaXa <trash@rubaxa.org>
+ * @author owenm <owen23355@gmail.com>
+ * @license MIT
+ */
+function ownKeys(object, enumerableOnly) {
+ var keys = Object.keys(object);
+ if (Object.getOwnPropertySymbols) {
+ var symbols = Object.getOwnPropertySymbols(object);
+ if (enumerableOnly) {
+ symbols = symbols.filter(function(sym) {
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
+ });
+ }
+ keys.push.apply(keys, symbols);
+ }
+ return keys;
+}
+function _objectSpread2(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i] != null ? arguments[i] : {};
+ if (i % 2) {
+ ownKeys(Object(source), true).forEach(function(key) {
+ _defineProperty(target, key, source[key]);
+ });
+ } else if (Object.getOwnPropertyDescriptors) {
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
+ } else {
+ ownKeys(Object(source)).forEach(function(key) {
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
+ });
+ }
+ }
+ return target;
+}
+function _typeof(obj) {
+ "@babel/helpers - typeof";
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof = function(obj2) {
+ return typeof obj2;
+ };
+ } else {
+ _typeof = function(obj2) {
+ return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
+ };
+ }
+ return _typeof(obj);
+}
+function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+ return obj;
+}
+function _extends() {
+ _extends = Object.assign || function(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+ return target;
+ };
+ return _extends.apply(this, arguments);
+}
+function _objectWithoutPropertiesLoose(source, excluded) {
+ if (source == null)
+ return {};
+ var target = {};
+ var sourceKeys = Object.keys(source);
+ var key, i;
+ for (i = 0; i < sourceKeys.length; i++) {
+ key = sourceKeys[i];
+ if (excluded.indexOf(key) >= 0)
+ continue;
+ target[key] = source[key];
+ }
+ return target;
+}
+function _objectWithoutProperties(source, excluded) {
+ if (source == null)
+ return {};
+ var target = _objectWithoutPropertiesLoose(source, excluded);
+ var key, i;
+ if (Object.getOwnPropertySymbols) {
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
+ key = sourceSymbolKeys[i];
+ if (excluded.indexOf(key) >= 0)
+ continue;
+ if (!Object.prototype.propertyIsEnumerable.call(source, key))
+ continue;
+ target[key] = source[key];
+ }
+ }
+ return target;
+}
+var version = "1.14.0";
+function userAgent(pattern) {
+ if (typeof window !== "undefined" && window.navigator) {
+ return !!/* @__PURE__ */ navigator.userAgent.match(pattern);
+ }
+}
+var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i);
+var Edge = userAgent(/Edge/i);
+var FireFox = userAgent(/firefox/i);
+var Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);
+var IOS = userAgent(/iP(ad|od|hone)/i);
+var ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);
+var captureMode = {
+ capture: false,
+ passive: false
+};
+function on(el, event, fn) {
+ el.addEventListener(event, fn, !IE11OrLess && captureMode);
+}
+function off(el, event, fn) {
+ el.removeEventListener(event, fn, !IE11OrLess && captureMode);
+}
+function matches(el, selector) {
+ if (!selector)
+ return;
+ selector[0] === ">" && (selector = selector.substring(1));
+ if (el) {
+ try {
+ if (el.matches) {
+ return el.matches(selector);
+ } else if (el.msMatchesSelector) {
+ return el.msMatchesSelector(selector);
+ } else if (el.webkitMatchesSelector) {
+ return el.webkitMatchesSelector(selector);
+ }
+ } catch (_) {
+ return false;
+ }
+ }
+ return false;
+}
+function getParentOrHost(el) {
+ return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;
+}
+function closest(el, selector, ctx, includeCTX) {
+ if (el) {
+ ctx = ctx || document;
+ do {
+ if (selector != null && (selector[0] === ">" ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {
+ return el;
+ }
+ if (el === ctx)
+ break;
+ } while (el = getParentOrHost(el));
+ }
+ return null;
+}
+var R_SPACE = /\s+/g;
+function toggleClass(el, name, state) {
+ if (el && name) {
+ if (el.classList) {
+ el.classList[state ? "add" : "remove"](name);
+ } else {
+ var className = (" " + el.className + " ").replace(R_SPACE, " ").replace(" " + name + " ", " ");
+ el.className = (className + (state ? " " + name : "")).replace(R_SPACE, " ");
+ }
+ }
+}
+function css(el, prop, val) {
+ var style = el && el.style;
+ if (style) {
+ if (val === void 0) {
+ if (document.defaultView && document.defaultView.getComputedStyle) {
+ val = document.defaultView.getComputedStyle(el, "");
+ } else if (el.currentStyle) {
+ val = el.currentStyle;
+ }
+ return prop === void 0 ? val : val[prop];
+ } else {
+ if (!(prop in style) && prop.indexOf("webkit") === -1) {
+ prop = "-webkit-" + prop;
+ }
+ style[prop] = val + (typeof val === "string" ? "" : "px");
+ }
+ }
+}
+function matrix(el, selfOnly) {
+ var appliedTransforms = "";
+ if (typeof el === "string") {
+ appliedTransforms = el;
+ } else {
+ do {
+ var transform = css(el, "transform");
+ if (transform && transform !== "none") {
+ appliedTransforms = transform + " " + appliedTransforms;
+ }
+ } while (!selfOnly && (el = el.parentNode));
+ }
+ var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;
+ return matrixFn && new matrixFn(appliedTransforms);
+}
+function find(ctx, tagName, iterator) {
+ if (ctx) {
+ var list = ctx.getElementsByTagName(tagName), i = 0, n = list.length;
+ if (iterator) {
+ for (; i < n; i++) {
+ iterator(list[i], i);
+ }
+ }
+ return list;
+ }
+ return [];
+}
+function getWindowScrollingElement() {
+ var scrollingElement = document.scrollingElement;
+ if (scrollingElement) {
+ return scrollingElement;
+ } else {
+ return document.documentElement;
+ }
+}
+function getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {
+ if (!el.getBoundingClientRect && el !== window)
+ return;
+ var elRect, top, left, bottom, right, height, width;
+ if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {
+ elRect = el.getBoundingClientRect();
+ top = elRect.top;
+ left = elRect.left;
+ bottom = elRect.bottom;
+ right = elRect.right;
+ height = elRect.height;
+ width = elRect.width;
+ } else {
+ top = 0;
+ left = 0;
+ bottom = window.innerHeight;
+ right = window.innerWidth;
+ height = window.innerHeight;
+ width = window.innerWidth;
+ }
+ if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {
+ container = container || el.parentNode;
+ if (!IE11OrLess) {
+ do {
+ if (container && container.getBoundingClientRect && (css(container, "transform") !== "none" || relativeToNonStaticParent && css(container, "position") !== "static")) {
+ var containerRect = container.getBoundingClientRect();
+ top -= containerRect.top + parseInt(css(container, "border-top-width"));
+ left -= containerRect.left + parseInt(css(container, "border-left-width"));
+ bottom = top + elRect.height;
+ right = left + elRect.width;
+ break;
+ }
+ } while (container = container.parentNode);
+ }
+ }
+ if (undoScale && el !== window) {
+ var elMatrix = matrix(container || el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d;
+ if (elMatrix) {
+ top /= scaleY;
+ left /= scaleX;
+ width /= scaleX;
+ height /= scaleY;
+ bottom = top + height;
+ right = left + width;
+ }
+ }
+ return {
+ top,
+ left,
+ bottom,
+ right,
+ width,
+ height
+ };
+}
+function isScrolledPast(el, elSide, parentSide) {
+ var parent = getParentAutoScrollElement(el, true), elSideVal = getRect(el)[elSide];
+ while (parent) {
+ var parentSideVal = getRect(parent)[parentSide], visible = void 0;
+ if (parentSide === "top" || parentSide === "left") {
+ visible = elSideVal >= parentSideVal;
+ } else {
+ visible = elSideVal <= parentSideVal;
+ }
+ if (!visible)
+ return parent;
+ if (parent === getWindowScrollingElement())
+ break;
+ parent = getParentAutoScrollElement(parent, false);
+ }
+ return false;
+}
+function getChild(el, childNum, options, includeDragEl) {
+ var currentChild = 0, i = 0, children = el.children;
+ while (i < children.length) {
+ if (children[i].style.display !== "none" && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {
+ if (currentChild === childNum) {
+ return children[i];
+ }
+ currentChild++;
+ }
+ i++;
+ }
+ return null;
+}
+function lastChild(el, selector) {
+ var last = el.lastElementChild;
+ while (last && (last === Sortable.ghost || css(last, "display") === "none" || selector && !matches(last, selector))) {
+ last = last.previousElementSibling;
+ }
+ return last || null;
+}
+function index(el, selector) {
+ var index2 = 0;
+ if (!el || !el.parentNode) {
+ return -1;
+ }
+ while (el = el.previousElementSibling) {
+ if (el.nodeName.toUpperCase() !== "TEMPLATE" && el !== Sortable.clone && (!selector || matches(el, selector))) {
+ index2++;
+ }
+ }
+ return index2;
+}
+function getRelativeScrollOffset(el) {
+ var offsetLeft = 0, offsetTop = 0, winScroller = getWindowScrollingElement();
+ if (el) {
+ do {
+ var elMatrix = matrix(el), scaleX = elMatrix.a, scaleY = elMatrix.d;
+ offsetLeft += el.scrollLeft * scaleX;
+ offsetTop += el.scrollTop * scaleY;
+ } while (el !== winScroller && (el = el.parentNode));
+ }
+ return [offsetLeft, offsetTop];
+}
+function indexOfObject(arr, obj) {
+ for (var i in arr) {
+ if (!arr.hasOwnProperty(i))
+ continue;
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key) && obj[key] === arr[i][key])
+ return Number(i);
+ }
+ }
+ return -1;
+}
+function getParentAutoScrollElement(el, includeSelf) {
+ if (!el || !el.getBoundingClientRect)
+ return getWindowScrollingElement();
+ var elem = el;
+ var gotSelf = false;
+ do {
+ if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {
+ var elemCSS = css(elem);
+ if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == "auto" || elemCSS.overflowX == "scroll") || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == "auto" || elemCSS.overflowY == "scroll")) {
+ if (!elem.getBoundingClientRect || elem === document.body)
+ return getWindowScrollingElement();
+ if (gotSelf || includeSelf)
+ return elem;
+ gotSelf = true;
+ }
+ }
+ } while (elem = elem.parentNode);
+ return getWindowScrollingElement();
+}
+function extend(dst, src) {
+ if (dst && src) {
+ for (var key in src) {
+ if (src.hasOwnProperty(key)) {
+ dst[key] = src[key];
+ }
+ }
+ }
+ return dst;
+}
+function isRectEqual(rect1, rect2) {
+ return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);
+}
+var _throttleTimeout;
+function throttle(callback, ms) {
+ return function() {
+ if (!_throttleTimeout) {
+ var args = arguments, _this = this;
+ if (args.length === 1) {
+ callback.call(_this, args[0]);
+ } else {
+ callback.apply(_this, args);
+ }
+ _throttleTimeout = setTimeout(function() {
+ _throttleTimeout = void 0;
+ }, ms);
+ }
+ };
+}
+function cancelThrottle() {
+ clearTimeout(_throttleTimeout);
+ _throttleTimeout = void 0;
+}
+function scrollBy(el, x, y) {
+ el.scrollLeft += x;
+ el.scrollTop += y;
+}
+function clone(el) {
+ var Polymer = window.Polymer;
+ var $ = window.jQuery || window.Zepto;
+ if (Polymer && Polymer.dom) {
+ return Polymer.dom(el).cloneNode(true);
+ } else if ($) {
+ return $(el).clone(true)[0];
+ } else {
+ return el.cloneNode(true);
+ }
+}
+var expando = "Sortable" + new Date().getTime();
+function AnimationStateManager() {
+ var animationStates = [], animationCallbackId;
+ return {
+ captureAnimationState: function captureAnimationState() {
+ animationStates = [];
+ if (!this.options.animation)
+ return;
+ var children = [].slice.call(this.el.children);
+ children.forEach(function(child) {
+ if (css(child, "display") === "none" || child === Sortable.ghost)
+ return;
+ animationStates.push({
+ target: child,
+ rect: getRect(child)
+ });
+ var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);
+ if (child.thisAnimationDuration) {
+ var childMatrix = matrix(child, true);
+ if (childMatrix) {
+ fromRect.top -= childMatrix.f;
+ fromRect.left -= childMatrix.e;
+ }
+ }
+ child.fromRect = fromRect;
+ });
+ },
+ addAnimationState: function addAnimationState(state) {
+ animationStates.push(state);
+ },
+ removeAnimationState: function removeAnimationState(target) {
+ animationStates.splice(indexOfObject(animationStates, {
+ target
+ }), 1);
+ },
+ animateAll: function animateAll(callback) {
+ var _this = this;
+ if (!this.options.animation) {
+ clearTimeout(animationCallbackId);
+ if (typeof callback === "function")
+ callback();
+ return;
+ }
+ var animating = false, animationTime = 0;
+ animationStates.forEach(function(state) {
+ var time = 0, target = state.target, fromRect = target.fromRect, toRect = getRect(target), prevFromRect = target.prevFromRect, prevToRect = target.prevToRect, animatingRect = state.rect, targetMatrix = matrix(target, true);
+ if (targetMatrix) {
+ toRect.top -= targetMatrix.f;
+ toRect.left -= targetMatrix.e;
+ }
+ target.toRect = toRect;
+ if (target.thisAnimationDuration) {
+ if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) && (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {
+ time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);
+ }
+ }
+ if (!isRectEqual(toRect, fromRect)) {
+ target.prevFromRect = fromRect;
+ target.prevToRect = toRect;
+ if (!time) {
+ time = _this.options.animation;
+ }
+ _this.animate(target, animatingRect, toRect, time);
+ }
+ if (time) {
+ animating = true;
+ animationTime = Math.max(animationTime, time);
+ clearTimeout(target.animationResetTimer);
+ target.animationResetTimer = setTimeout(function() {
+ target.animationTime = 0;
+ target.prevFromRect = null;
+ target.fromRect = null;
+ target.prevToRect = null;
+ target.thisAnimationDuration = null;
+ }, time);
+ target.thisAnimationDuration = time;
+ }
+ });
+ clearTimeout(animationCallbackId);
+ if (!animating) {
+ if (typeof callback === "function")
+ callback();
+ } else {
+ animationCallbackId = setTimeout(function() {
+ if (typeof callback === "function")
+ callback();
+ }, animationTime);
+ }
+ animationStates = [];
+ },
+ animate: function animate(target, currentRect, toRect, duration) {
+ if (duration) {
+ css(target, "transition", "");
+ css(target, "transform", "");
+ var elMatrix = matrix(this.el), scaleX = elMatrix && elMatrix.a, scaleY = elMatrix && elMatrix.d, translateX = (currentRect.left - toRect.left) / (scaleX || 1), translateY = (currentRect.top - toRect.top) / (scaleY || 1);
+ target.animatingX = !!translateX;
+ target.animatingY = !!translateY;
+ css(target, "transform", "translate3d(" + translateX + "px," + translateY + "px,0)");
+ this.forRepaintDummy = repaint(target);
+ css(target, "transition", "transform " + duration + "ms" + (this.options.easing ? " " + this.options.easing : ""));
+ css(target, "transform", "translate3d(0,0,0)");
+ typeof target.animated === "number" && clearTimeout(target.animated);
+ target.animated = setTimeout(function() {
+ css(target, "transition", "");
+ css(target, "transform", "");
+ target.animated = false;
+ target.animatingX = false;
+ target.animatingY = false;
+ }, duration);
+ }
+ }
+ };
+}
+function repaint(target) {
+ return target.offsetWidth;
+}
+function calculateRealTime(animatingRect, fromRect, toRect, options) {
+ return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;
+}
+var plugins = [];
+var defaults = {
+ initializeByDefault: true
+};
+var PluginManager = {
+ mount: function mount(plugin) {
+ for (var option2 in defaults) {
+ if (defaults.hasOwnProperty(option2) && !(option2 in plugin)) {
+ plugin[option2] = defaults[option2];
+ }
+ }
+ plugins.forEach(function(p) {
+ if (p.pluginName === plugin.pluginName) {
+ throw "Sortable: Cannot mount plugin ".concat(plugin.pluginName, " more than once");
+ }
+ });
+ plugins.push(plugin);
+ },
+ pluginEvent: function pluginEvent(eventName, sortable, evt) {
+ var _this = this;
+ this.eventCanceled = false;
+ evt.cancel = function() {
+ _this.eventCanceled = true;
+ };
+ var eventNameGlobal = eventName + "Global";
+ plugins.forEach(function(plugin) {
+ if (!sortable[plugin.pluginName])
+ return;
+ if (sortable[plugin.pluginName][eventNameGlobal]) {
+ sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({
+ sortable
+ }, evt));
+ }
+ if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {
+ sortable[plugin.pluginName][eventName](_objectSpread2({
+ sortable
+ }, evt));
+ }
+ });
+ },
+ initializePlugins: function initializePlugins(sortable, el, defaults2, options) {
+ plugins.forEach(function(plugin) {
+ var pluginName = plugin.pluginName;
+ if (!sortable.options[pluginName] && !plugin.initializeByDefault)
+ return;
+ var initialized = new plugin(sortable, el, sortable.options);
+ initialized.sortable = sortable;
+ initialized.options = sortable.options;
+ sortable[pluginName] = initialized;
+ _extends(defaults2, initialized.defaults);
+ });
+ for (var option2 in sortable.options) {
+ if (!sortable.options.hasOwnProperty(option2))
+ continue;
+ var modified = this.modifyOption(sortable, option2, sortable.options[option2]);
+ if (typeof modified !== "undefined") {
+ sortable.options[option2] = modified;
+ }
+ }
+ },
+ getEventProperties: function getEventProperties(name, sortable) {
+ var eventProperties = {};
+ plugins.forEach(function(plugin) {
+ if (typeof plugin.eventProperties !== "function")
+ return;
+ _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));
+ });
+ return eventProperties;
+ },
+ modifyOption: function modifyOption(sortable, name, value) {
+ var modifiedValue;
+ plugins.forEach(function(plugin) {
+ if (!sortable[plugin.pluginName])
+ return;
+ if (plugin.optionListeners && typeof plugin.optionListeners[name] === "function") {
+ modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);
+ }
+ });
+ return modifiedValue;
+ }
+};
+function dispatchEvent(_ref) {
+ var sortable = _ref.sortable, rootEl2 = _ref.rootEl, name = _ref.name, targetEl = _ref.targetEl, cloneEl2 = _ref.cloneEl, toEl = _ref.toEl, fromEl = _ref.fromEl, oldIndex2 = _ref.oldIndex, newIndex2 = _ref.newIndex, oldDraggableIndex2 = _ref.oldDraggableIndex, newDraggableIndex2 = _ref.newDraggableIndex, originalEvent = _ref.originalEvent, putSortable2 = _ref.putSortable, extraEventProperties = _ref.extraEventProperties;
+ sortable = sortable || rootEl2 && rootEl2[expando];
+ if (!sortable)
+ return;
+ var evt, options = sortable.options, onName = "on" + name.charAt(0).toUpperCase() + name.substr(1);
+ if (window.CustomEvent && !IE11OrLess && !Edge) {
+ evt = new CustomEvent(name, {
+ bubbles: true,
+ cancelable: true
+ });
+ } else {
+ evt = document.createEvent("Event");
+ evt.initEvent(name, true, true);
+ }
+ evt.to = toEl || rootEl2;
+ evt.from = fromEl || rootEl2;
+ evt.item = targetEl || rootEl2;
+ evt.clone = cloneEl2;
+ evt.oldIndex = oldIndex2;
+ evt.newIndex = newIndex2;
+ evt.oldDraggableIndex = oldDraggableIndex2;
+ evt.newDraggableIndex = newDraggableIndex2;
+ evt.originalEvent = originalEvent;
+ evt.pullMode = putSortable2 ? putSortable2.lastPutMode : void 0;
+ var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));
+ for (var option2 in allEventProperties) {
+ evt[option2] = allEventProperties[option2];
+ }
+ if (rootEl2) {
+ rootEl2.dispatchEvent(evt);
+ }
+ if (options[onName]) {
+ options[onName].call(sortable, evt);
+ }
+}
+var _excluded = ["evt"];
+var pluginEvent2 = function pluginEvent3(eventName, sortable) {
+ var _ref = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, originalEvent = _ref.evt, data = _objectWithoutProperties(_ref, _excluded);
+ PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({
+ dragEl,
+ parentEl,
+ ghostEl,
+ rootEl,
+ nextEl,
+ lastDownEl,
+ cloneEl,
+ cloneHidden,
+ dragStarted: moved,
+ putSortable,
+ activeSortable: Sortable.active,
+ originalEvent,
+ oldIndex,
+ oldDraggableIndex,
+ newIndex,
+ newDraggableIndex,
+ hideGhostForTarget: _hideGhostForTarget,
+ unhideGhostForTarget: _unhideGhostForTarget,
+ cloneNowHidden: function cloneNowHidden() {
+ cloneHidden = true;
+ },
+ cloneNowShown: function cloneNowShown() {
+ cloneHidden = false;
+ },
+ dispatchSortableEvent: function dispatchSortableEvent(name) {
+ _dispatchEvent({
+ sortable,
+ name,
+ originalEvent
+ });
+ }
+ }, data));
+};
+function _dispatchEvent(info) {
+ dispatchEvent(_objectSpread2({
+ putSortable,
+ cloneEl,
+ targetEl: dragEl,
+ rootEl,
+ oldIndex,
+ oldDraggableIndex,
+ newIndex,
+ newDraggableIndex
+ }, info));
+}
+var dragEl, parentEl, ghostEl, rootEl, nextEl, lastDownEl, cloneEl, cloneHidden, oldIndex, newIndex, oldDraggableIndex, newDraggableIndex, activeGroup, putSortable, awaitingDragStarted = false, ignoreNextClick = false, sortables = [], tapEvt, touchEvt, lastDx, lastDy, tapDistanceLeft, tapDistanceTop, moved, lastTarget, lastDirection, pastFirstInvertThresh = false, isCircumstantialInvert = false, targetMoveDistance, ghostRelativeParent, ghostRelativeParentInitialScroll = [], _silent = false, savedInputChecked = [];
+var documentExists = typeof document !== "undefined", PositionGhostAbsolutely = IOS, CSSFloatProperty = Edge || IE11OrLess ? "cssFloat" : "float", supportDraggable = documentExists && !ChromeForAndroid && !IOS && "draggable" in document.createElement("div"), supportCssPointerEvents = function() {
+ if (!documentExists)
+ return;
+ if (IE11OrLess) {
+ return false;
+ }
+ var el = document.createElement("x");
+ el.style.cssText = "pointer-events:auto";
+ return el.style.pointerEvents === "auto";
+}(), _detectDirection = function _detectDirection2(el, options) {
+ var elCSS = css(el), elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth), child1 = getChild(el, 0, options), child2 = getChild(el, 1, options), firstChildCSS = child1 && css(child1), secondChildCSS = child2 && css(child2), firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width, secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;
+ if (elCSS.display === "flex") {
+ return elCSS.flexDirection === "column" || elCSS.flexDirection === "column-reverse" ? "vertical" : "horizontal";
+ }
+ if (elCSS.display === "grid") {
+ return elCSS.gridTemplateColumns.split(" ").length <= 1 ? "vertical" : "horizontal";
+ }
+ if (child1 && firstChildCSS["float"] && firstChildCSS["float"] !== "none") {
+ var touchingSideChild2 = firstChildCSS["float"] === "left" ? "left" : "right";
+ return child2 && (secondChildCSS.clear === "both" || secondChildCSS.clear === touchingSideChild2) ? "vertical" : "horizontal";
+ }
+ return child1 && (firstChildCSS.display === "block" || firstChildCSS.display === "flex" || firstChildCSS.display === "table" || firstChildCSS.display === "grid" || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === "none" || child2 && elCSS[CSSFloatProperty] === "none" && firstChildWidth + secondChildWidth > elWidth) ? "vertical" : "horizontal";
+}, _dragElInRowColumn = function _dragElInRowColumn2(dragRect, targetRect, vertical) {
+ var dragElS1Opp = vertical ? dragRect.left : dragRect.top, dragElS2Opp = vertical ? dragRect.right : dragRect.bottom, dragElOppLength = vertical ? dragRect.width : dragRect.height, targetS1Opp = vertical ? targetRect.left : targetRect.top, targetS2Opp = vertical ? targetRect.right : targetRect.bottom, targetOppLength = vertical ? targetRect.width : targetRect.height;
+ return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;
+}, _detectNearestEmptySortable = function _detectNearestEmptySortable2(x, y) {
+ var ret;
+ sortables.some(function(sortable) {
+ var threshold = sortable[expando].options.emptyInsertThreshold;
+ if (!threshold || lastChild(sortable))
+ return;
+ var rect = getRect(sortable), insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold, insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;
+ if (insideHorizontally && insideVertically) {
+ return ret = sortable;
+ }
+ });
+ return ret;
+}, _prepareGroup = function _prepareGroup2(options) {
+ function toFn(value, pull) {
+ return function(to, from, dragEl2, evt) {
+ var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;
+ if (value == null && (pull || sameGroup)) {
+ return true;
+ } else if (value == null || value === false) {
+ return false;
+ } else if (pull && value === "clone") {
+ return value;
+ } else if (typeof value === "function") {
+ return toFn(value(to, from, dragEl2, evt), pull)(to, from, dragEl2, evt);
+ } else {
+ var otherGroup = (pull ? to : from).options.group.name;
+ return value === true || typeof value === "string" && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;
+ }
+ };
+ }
+ var group = {};
+ var originalGroup = options.group;
+ if (!originalGroup || _typeof(originalGroup) != "object") {
+ originalGroup = {
+ name: originalGroup
+ };
+ }
+ group.name = originalGroup.name;
+ group.checkPull = toFn(originalGroup.pull, true);
+ group.checkPut = toFn(originalGroup.put);
+ group.revertClone = originalGroup.revertClone;
+ options.group = group;
+}, _hideGhostForTarget = function _hideGhostForTarget2() {
+ if (!supportCssPointerEvents && ghostEl) {
+ css(ghostEl, "display", "none");
+ }
+}, _unhideGhostForTarget = function _unhideGhostForTarget2() {
+ if (!supportCssPointerEvents && ghostEl) {
+ css(ghostEl, "display", "");
+ }
+};
+if (documentExists) {
+ document.addEventListener("click", function(evt) {
+ if (ignoreNextClick) {
+ evt.preventDefault();
+ evt.stopPropagation && evt.stopPropagation();
+ evt.stopImmediatePropagation && evt.stopImmediatePropagation();
+ ignoreNextClick = false;
+ return false;
+ }
+ }, true);
+}
+var nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent2(evt) {
+ if (dragEl) {
+ evt = evt.touches ? evt.touches[0] : evt;
+ var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);
+ if (nearest) {
+ var event = {};
+ for (var i in evt) {
+ if (evt.hasOwnProperty(i)) {
+ event[i] = evt[i];
+ }
+ }
+ event.target = event.rootEl = nearest;
+ event.preventDefault = void 0;
+ event.stopPropagation = void 0;
+ nearest[expando]._onDragOver(event);
+ }
+ }
+};
+var _checkOutsideTargetEl = function _checkOutsideTargetEl2(evt) {
+ if (dragEl) {
+ dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
+ }
+};
+function Sortable(el, options) {
+ if (!(el && el.nodeType && el.nodeType === 1)) {
+ throw "Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(el));
+ }
+ this.el = el;
+ this.options = options = _extends({}, options);
+ el[expando] = this;
+ var defaults2 = {
+ group: null,
+ sort: true,
+ disabled: false,
+ store: null,
+ handle: null,
+ draggable: /^[uo]l$/i.test(el.nodeName) ? ">li" : ">*",
+ swapThreshold: 1,
+ invertSwap: false,
+ invertedSwapThreshold: null,
+ removeCloneOnHide: true,
+ direction: function direction() {
+ return _detectDirection(el, this.options);
+ },
+ ghostClass: "sortable-ghost",
+ chosenClass: "sortable-chosen",
+ dragClass: "sortable-drag",
+ ignore: "a, img",
+ filter: null,
+ preventOnFilter: true,
+ animation: 0,
+ easing: null,
+ setData: function setData(dataTransfer, dragEl2) {
+ dataTransfer.setData("Text", dragEl2.textContent);
+ },
+ dropBubble: false,
+ dragoverBubble: false,
+ dataIdAttr: "data-id",
+ delay: 0,
+ delayOnTouchOnly: false,
+ touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,
+ forceFallback: false,
+ fallbackClass: "sortable-fallback",
+ fallbackOnBody: false,
+ fallbackTolerance: 0,
+ fallbackOffset: {
+ x: 0,
+ y: 0
+ },
+ supportPointer: Sortable.supportPointer !== false && "PointerEvent" in window && !Safari,
+ emptyInsertThreshold: 5
+ };
+ PluginManager.initializePlugins(this, el, defaults2);
+ for (var name in defaults2) {
+ !(name in options) && (options[name] = defaults2[name]);
+ }
+ _prepareGroup(options);
+ for (var fn in this) {
+ if (fn.charAt(0) === "_" && typeof this[fn] === "function") {
+ this[fn] = this[fn].bind(this);
+ }
+ }
+ this.nativeDraggable = options.forceFallback ? false : supportDraggable;
+ if (this.nativeDraggable) {
+ this.options.touchStartThreshold = 1;
+ }
+ if (options.supportPointer) {
+ on(el, "pointerdown", this._onTapStart);
+ } else {
+ on(el, "mousedown", this._onTapStart);
+ on(el, "touchstart", this._onTapStart);
+ }
+ if (this.nativeDraggable) {
+ on(el, "dragover", this);
+ on(el, "dragenter", this);
+ }
+ sortables.push(this.el);
+ options.store && options.store.get && this.sort(options.store.get(this) || []);
+ _extends(this, AnimationStateManager());
+}
+Sortable.prototype = {
+ constructor: Sortable,
+ _isOutsideThisEl: function _isOutsideThisEl(target) {
+ if (!this.el.contains(target) && target !== this.el) {
+ lastTarget = null;
+ }
+ },
+ _getDirection: function _getDirection(evt, target) {
+ return typeof this.options.direction === "function" ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;
+ },
+ _onTapStart: function _onTapStart(evt) {
+ if (!evt.cancelable)
+ return;
+ var _this = this, el = this.el, options = this.options, preventOnFilter = options.preventOnFilter, type = evt.type, touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === "touch" && evt, target = (touch || evt).target, originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target, filter = options.filter;
+ _saveInputCheckedState(el);
+ if (dragEl) {
+ return;
+ }
+ if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {
+ return;
+ }
+ if (originalTarget.isContentEditable) {
+ return;
+ }
+ if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === "SELECT") {
+ return;
+ }
+ target = closest(target, options.draggable, el, false);
+ if (target && target.animated) {
+ return;
+ }
+ if (lastDownEl === target) {
+ return;
+ }
+ oldIndex = index(target);
+ oldDraggableIndex = index(target, options.draggable);
+ if (typeof filter === "function") {
+ if (filter.call(this, evt, target, this)) {
+ _dispatchEvent({
+ sortable: _this,
+ rootEl: originalTarget,
+ name: "filter",
+ targetEl: target,
+ toEl: el,
+ fromEl: el
+ });
+ pluginEvent2("filter", _this, {
+ evt
+ });
+ preventOnFilter && evt.cancelable && evt.preventDefault();
+ return;
+ }
+ } else if (filter) {
+ filter = filter.split(",").some(function(criteria) {
+ criteria = closest(originalTarget, criteria.trim(), el, false);
+ if (criteria) {
+ _dispatchEvent({
+ sortable: _this,
+ rootEl: criteria,
+ name: "filter",
+ targetEl: target,
+ fromEl: el,
+ toEl: el
+ });
+ pluginEvent2("filter", _this, {
+ evt
+ });
+ return true;
+ }
+ });
+ if (filter) {
+ preventOnFilter && evt.cancelable && evt.preventDefault();
+ return;
+ }
+ }
+ if (options.handle && !closest(originalTarget, options.handle, el, false)) {
+ return;
+ }
+ this._prepareDragStart(evt, touch, target);
+ },
+ _prepareDragStart: function _prepareDragStart(evt, touch, target) {
+ var _this = this, el = _this.el, options = _this.options, ownerDocument = el.ownerDocument, dragStartFn;
+ if (target && !dragEl && target.parentNode === el) {
+ var dragRect = getRect(target);
+ rootEl = el;
+ dragEl = target;
+ parentEl = dragEl.parentNode;
+ nextEl = dragEl.nextSibling;
+ lastDownEl = target;
+ activeGroup = options.group;
+ Sortable.dragged = dragEl;
+ tapEvt = {
+ target: dragEl,
+ clientX: (touch || evt).clientX,
+ clientY: (touch || evt).clientY
+ };
+ tapDistanceLeft = tapEvt.clientX - dragRect.left;
+ tapDistanceTop = tapEvt.clientY - dragRect.top;
+ this._lastX = (touch || evt).clientX;
+ this._lastY = (touch || evt).clientY;
+ dragEl.style["will-change"] = "all";
+ dragStartFn = function dragStartFn2() {
+ pluginEvent2("delayEnded", _this, {
+ evt
+ });
+ if (Sortable.eventCanceled) {
+ _this._onDrop();
+ return;
+ }
+ _this._disableDelayedDragEvents();
+ if (!FireFox && _this.nativeDraggable) {
+ dragEl.draggable = true;
+ }
+ _this._triggerDragStart(evt, touch);
+ _dispatchEvent({
+ sortable: _this,
+ name: "choose",
+ originalEvent: evt
+ });
+ toggleClass(dragEl, options.chosenClass, true);
+ };
+ options.ignore.split(",").forEach(function(criteria) {
+ find(dragEl, criteria.trim(), _disableDraggable);
+ });
+ on(ownerDocument, "dragover", nearestEmptyInsertDetectEvent);
+ on(ownerDocument, "mousemove", nearestEmptyInsertDetectEvent);
+ on(ownerDocument, "touchmove", nearestEmptyInsertDetectEvent);
+ on(ownerDocument, "mouseup", _this._onDrop);
+ on(ownerDocument, "touchend", _this._onDrop);
+ on(ownerDocument, "touchcancel", _this._onDrop);
+ if (FireFox && this.nativeDraggable) {
+ this.options.touchStartThreshold = 4;
+ dragEl.draggable = true;
+ }
+ pluginEvent2("delayStart", this, {
+ evt
+ });
+ if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {
+ if (Sortable.eventCanceled) {
+ this._onDrop();
+ return;
+ }
+ on(ownerDocument, "mouseup", _this._disableDelayedDrag);
+ on(ownerDocument, "touchend", _this._disableDelayedDrag);
+ on(ownerDocument, "touchcancel", _this._disableDelayedDrag);
+ on(ownerDocument, "mousemove", _this._delayedDragTouchMoveHandler);
+ on(ownerDocument, "touchmove", _this._delayedDragTouchMoveHandler);
+ options.supportPointer && on(ownerDocument, "pointermove", _this._delayedDragTouchMoveHandler);
+ _this._dragStartTimer = setTimeout(dragStartFn, options.delay);
+ } else {
+ dragStartFn();
+ }
+ }
+ },
+ _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler(e) {
+ var touch = e.touches ? e.touches[0] : e;
+ if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {
+ this._disableDelayedDrag();
+ }
+ },
+ _disableDelayedDrag: function _disableDelayedDrag() {
+ dragEl && _disableDraggable(dragEl);
+ clearTimeout(this._dragStartTimer);
+ this._disableDelayedDragEvents();
+ },
+ _disableDelayedDragEvents: function _disableDelayedDragEvents() {
+ var ownerDocument = this.el.ownerDocument;
+ off(ownerDocument, "mouseup", this._disableDelayedDrag);
+ off(ownerDocument, "touchend", this._disableDelayedDrag);
+ off(ownerDocument, "touchcancel", this._disableDelayedDrag);
+ off(ownerDocument, "mousemove", this._delayedDragTouchMoveHandler);
+ off(ownerDocument, "touchmove", this._delayedDragTouchMoveHandler);
+ off(ownerDocument, "pointermove", this._delayedDragTouchMoveHandler);
+ },
+ _triggerDragStart: function _triggerDragStart(evt, touch) {
+ touch = touch || evt.pointerType == "touch" && evt;
+ if (!this.nativeDraggable || touch) {
+ if (this.options.supportPointer) {
+ on(document, "pointermove", this._onTouchMove);
+ } else if (touch) {
+ on(document, "touchmove", this._onTouchMove);
+ } else {
+ on(document, "mousemove", this._onTouchMove);
+ }
+ } else {
+ on(dragEl, "dragend", this);
+ on(rootEl, "dragstart", this._onDragStart);
+ }
+ try {
+ if (document.selection) {
+ _nextTick(function() {
+ document.selection.empty();
+ });
+ } else {
+ window.getSelection().removeAllRanges();
+ }
+ } catch (err) {
+ }
+ },
+ _dragStarted: function _dragStarted(fallback, evt) {
+ awaitingDragStarted = false;
+ if (rootEl && dragEl) {
+ pluginEvent2("dragStarted", this, {
+ evt
+ });
+ if (this.nativeDraggable) {
+ on(document, "dragover", _checkOutsideTargetEl);
+ }
+ var options = this.options;
+ !fallback && toggleClass(dragEl, options.dragClass, false);
+ toggleClass(dragEl, options.ghostClass, true);
+ Sortable.active = this;
+ fallback && this._appendGhost();
+ _dispatchEvent({
+ sortable: this,
+ name: "start",
+ originalEvent: evt
+ });
+ } else {
+ this._nulling();
+ }
+ },
+ _emulateDragOver: function _emulateDragOver() {
+ if (touchEvt) {
+ this._lastX = touchEvt.clientX;
+ this._lastY = touchEvt.clientY;
+ _hideGhostForTarget();
+ var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
+ var parent = target;
+ while (target && target.shadowRoot) {
+ target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);
+ if (target === parent)
+ break;
+ parent = target;
+ }
+ dragEl.parentNode[expando]._isOutsideThisEl(target);
+ if (parent) {
+ do {
+ if (parent[expando]) {
+ var inserted = void 0;
+ inserted = parent[expando]._onDragOver({
+ clientX: touchEvt.clientX,
+ clientY: touchEvt.clientY,
+ target,
+ rootEl: parent
+ });
+ if (inserted && !this.options.dragoverBubble) {
+ break;
+ }
+ }
+ target = parent;
+ } while (parent = parent.parentNode);
+ }
+ _unhideGhostForTarget();
+ }
+ },
+ _onTouchMove: function _onTouchMove(evt) {
+ if (tapEvt) {
+ var options = this.options, fallbackTolerance = options.fallbackTolerance, fallbackOffset = options.fallbackOffset, touch = evt.touches ? evt.touches[0] : evt, ghostMatrix = ghostEl && matrix(ghostEl, true), scaleX = ghostEl && ghostMatrix && ghostMatrix.a, scaleY = ghostEl && ghostMatrix && ghostMatrix.d, relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent), dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1), dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);
+ if (!Sortable.active && !awaitingDragStarted) {
+ if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {
+ return;
+ }
+ this._onDragStart(evt, true);
+ }
+ if (ghostEl) {
+ if (ghostMatrix) {
+ ghostMatrix.e += dx - (lastDx || 0);
+ ghostMatrix.f += dy - (lastDy || 0);
+ } else {
+ ghostMatrix = {
+ a: 1,
+ b: 0,
+ c: 0,
+ d: 1,
+ e: dx,
+ f: dy
+ };
+ }
+ var cssMatrix = "matrix(".concat(ghostMatrix.a, ",").concat(ghostMatrix.b, ",").concat(ghostMatrix.c, ",").concat(ghostMatrix.d, ",").concat(ghostMatrix.e, ",").concat(ghostMatrix.f, ")");
+ css(ghostEl, "webkitTransform", cssMatrix);
+ css(ghostEl, "mozTransform", cssMatrix);
+ css(ghostEl, "msTransform", cssMatrix);
+ css(ghostEl, "transform", cssMatrix);
+ lastDx = dx;
+ lastDy = dy;
+ touchEvt = touch;
+ }
+ evt.cancelable && evt.preventDefault();
+ }
+ },
+ _appendGhost: function _appendGhost() {
+ if (!ghostEl) {
+ var container = this.options.fallbackOnBody ? document.body : rootEl, rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container), options = this.options;
+ if (PositionGhostAbsolutely) {
+ ghostRelativeParent = container;
+ while (css(ghostRelativeParent, "position") === "static" && css(ghostRelativeParent, "transform") === "none" && ghostRelativeParent !== document) {
+ ghostRelativeParent = ghostRelativeParent.parentNode;
+ }
+ if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {
+ if (ghostRelativeParent === document)
+ ghostRelativeParent = getWindowScrollingElement();
+ rect.top += ghostRelativeParent.scrollTop;
+ rect.left += ghostRelativeParent.scrollLeft;
+ } else {
+ ghostRelativeParent = getWindowScrollingElement();
+ }
+ ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);
+ }
+ ghostEl = dragEl.cloneNode(true);
+ toggleClass(ghostEl, options.ghostClass, false);
+ toggleClass(ghostEl, options.fallbackClass, true);
+ toggleClass(ghostEl, options.dragClass, true);
+ css(ghostEl, "transition", "");
+ css(ghostEl, "transform", "");
+ css(ghostEl, "box-sizing", "border-box");
+ css(ghostEl, "margin", 0);
+ css(ghostEl, "top", rect.top);
+ css(ghostEl, "left", rect.left);
+ css(ghostEl, "width", rect.width);
+ css(ghostEl, "height", rect.height);
+ css(ghostEl, "opacity", "0.8");
+ css(ghostEl, "position", PositionGhostAbsolutely ? "absolute" : "fixed");
+ css(ghostEl, "zIndex", "100000");
+ css(ghostEl, "pointerEvents", "none");
+ Sortable.ghost = ghostEl;
+ container.appendChild(ghostEl);
+ css(ghostEl, "transform-origin", tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + "% " + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + "%");
+ }
+ },
+ _onDragStart: function _onDragStart(evt, fallback) {
+ var _this = this;
+ var dataTransfer = evt.dataTransfer;
+ var options = _this.options;
+ pluginEvent2("dragStart", this, {
+ evt
+ });
+ if (Sortable.eventCanceled) {
+ this._onDrop();
+ return;
+ }
+ pluginEvent2("setupClone", this);
+ if (!Sortable.eventCanceled) {
+ cloneEl = clone(dragEl);
+ cloneEl.draggable = false;
+ cloneEl.style["will-change"] = "";
+ this._hideClone();
+ toggleClass(cloneEl, this.options.chosenClass, false);
+ Sortable.clone = cloneEl;
+ }
+ _this.cloneId = _nextTick(function() {
+ pluginEvent2("clone", _this);
+ if (Sortable.eventCanceled)
+ return;
+ if (!_this.options.removeCloneOnHide) {
+ rootEl.insertBefore(cloneEl, dragEl);
+ }
+ _this._hideClone();
+ _dispatchEvent({
+ sortable: _this,
+ name: "clone"
+ });
+ });
+ !fallback && toggleClass(dragEl, options.dragClass, true);
+ if (fallback) {
+ ignoreNextClick = true;
+ _this._loopId = setInterval(_this._emulateDragOver, 50);
+ } else {
+ off(document, "mouseup", _this._onDrop);
+ off(document, "touchend", _this._onDrop);
+ off(document, "touchcancel", _this._onDrop);
+ if (dataTransfer) {
+ dataTransfer.effectAllowed = "move";
+ options.setData && options.setData.call(_this, dataTransfer, dragEl);
+ }
+ on(document, "drop", _this);
+ css(dragEl, "transform", "translateZ(0)");
+ }
+ awaitingDragStarted = true;
+ _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));
+ on(document, "selectstart", _this);
+ moved = true;
+ if (Safari) {
+ css(document.body, "user-select", "none");
+ }
+ },
+ _onDragOver: function _onDragOver(evt) {
+ var el = this.el, target = evt.target, dragRect, targetRect, revert, options = this.options, group = options.group, activeSortable = Sortable.active, isOwner = activeGroup === group, canSort = options.sort, fromSortable = putSortable || activeSortable, vertical, _this = this, completedFired = false;
+ if (_silent)
+ return;
+ function dragOverEvent(name, extra) {
+ pluginEvent2(name, _this, _objectSpread2({
+ evt,
+ isOwner,
+ axis: vertical ? "vertical" : "horizontal",
+ revert,
+ dragRect,
+ targetRect,
+ canSort,
+ fromSortable,
+ target,
+ completed,
+ onMove: function onMove(target2, after2) {
+ return _onMove(rootEl, el, dragEl, dragRect, target2, getRect(target2), evt, after2);
+ },
+ changed
+ }, extra));
+ }
+ function capture() {
+ dragOverEvent("dragOverAnimationCapture");
+ _this.captureAnimationState();
+ if (_this !== fromSortable) {
+ fromSortable.captureAnimationState();
+ }
+ }
+ function completed(insertion) {
+ dragOverEvent("dragOverCompleted", {
+ insertion
+ });
+ if (insertion) {
+ if (isOwner) {
+ activeSortable._hideClone();
+ } else {
+ activeSortable._showClone(_this);
+ }
+ if (_this !== fromSortable) {
+ toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);
+ toggleClass(dragEl, options.ghostClass, true);
+ }
+ if (putSortable !== _this && _this !== Sortable.active) {
+ putSortable = _this;
+ } else if (_this === Sortable.active && putSortable) {
+ putSortable = null;
+ }
+ if (fromSortable === _this) {
+ _this._ignoreWhileAnimating = target;
+ }
+ _this.animateAll(function() {
+ dragOverEvent("dragOverAnimationComplete");
+ _this._ignoreWhileAnimating = null;
+ });
+ if (_this !== fromSortable) {
+ fromSortable.animateAll();
+ fromSortable._ignoreWhileAnimating = null;
+ }
+ }
+ if (target === dragEl && !dragEl.animated || target === el && !target.animated) {
+ lastTarget = null;
+ }
+ if (!options.dragoverBubble && !evt.rootEl && target !== document) {
+ dragEl.parentNode[expando]._isOutsideThisEl(evt.target);
+ !insertion && nearestEmptyInsertDetectEvent(evt);
+ }
+ !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();
+ return completedFired = true;
+ }
+ function changed() {
+ newIndex = index(dragEl);
+ newDraggableIndex = index(dragEl, options.draggable);
+ _dispatchEvent({
+ sortable: _this,
+ name: "change",
+ toEl: el,
+ newIndex,
+ newDraggableIndex,
+ originalEvent: evt
+ });
+ }
+ if (evt.preventDefault !== void 0) {
+ evt.cancelable && evt.preventDefault();
+ }
+ target = closest(target, options.draggable, el, true);
+ dragOverEvent("dragOver");
+ if (Sortable.eventCanceled)
+ return completedFired;
+ if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {
+ return completed(false);
+ }
+ ignoreNextClick = false;
+ if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {
+ vertical = this._getDirection(evt, target) === "vertical";
+ dragRect = getRect(dragEl);
+ dragOverEvent("dragOverValid");
+ if (Sortable.eventCanceled)
+ return completedFired;
+ if (revert) {
+ parentEl = rootEl;
+ capture();
+ this._hideClone();
+ dragOverEvent("revert");
+ if (!Sortable.eventCanceled) {
+ if (nextEl) {
+ rootEl.insertBefore(dragEl, nextEl);
+ } else {
+ rootEl.appendChild(dragEl);
+ }
+ }
+ return completed(true);
+ }
+ var elLastChild = lastChild(el, options.draggable);
+ if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {
+ if (elLastChild === dragEl) {
+ return completed(false);
+ }
+ if (elLastChild && el === evt.target) {
+ target = elLastChild;
+ }
+ if (target) {
+ targetRect = getRect(target);
+ }
+ if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {
+ capture();
+ el.appendChild(dragEl);
+ parentEl = el;
+ changed();
+ return completed(true);
+ }
+ } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {
+ var firstChild = getChild(el, 0, options, true);
+ if (firstChild === dragEl) {
+ return completed(false);
+ }
+ target = firstChild;
+ targetRect = getRect(target);
+ if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {
+ capture();
+ el.insertBefore(dragEl, firstChild);
+ parentEl = el;
+ changed();
+ return completed(true);
+ }
+ } else if (target.parentNode === el) {
+ targetRect = getRect(target);
+ var direction = 0, targetBeforeFirstSwap, differentLevel = dragEl.parentNode !== el, differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical), side1 = vertical ? "top" : "left", scrolledPastTop = isScrolledPast(target, "top", "top") || isScrolledPast(dragEl, "top", "top"), scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;
+ if (lastTarget !== target) {
+ targetBeforeFirstSwap = targetRect[side1];
+ pastFirstInvertThresh = false;
+ isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;
+ }
+ direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);
+ var sibling;
+ if (direction !== 0) {
+ var dragIndex = index(dragEl);
+ do {
+ dragIndex -= direction;
+ sibling = parentEl.children[dragIndex];
+ } while (sibling && (css(sibling, "display") === "none" || sibling === ghostEl));
+ }
+ if (direction === 0 || sibling === target) {
+ return completed(false);
+ }
+ lastTarget = target;
+ lastDirection = direction;
+ var nextSibling = target.nextElementSibling, after = false;
+ after = direction === 1;
+ var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);
+ if (moveVector !== false) {
+ if (moveVector === 1 || moveVector === -1) {
+ after = moveVector === 1;
+ }
+ _silent = true;
+ setTimeout(_unsilent, 30);
+ capture();
+ if (after && !nextSibling) {
+ el.appendChild(dragEl);
+ } else {
+ target.parentNode.insertBefore(dragEl, after ? nextSibling : target);
+ }
+ if (scrolledPastTop) {
+ scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);
+ }
+ parentEl = dragEl.parentNode;
+ if (targetBeforeFirstSwap !== void 0 && !isCircumstantialInvert) {
+ targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);
+ }
+ changed();
+ return completed(true);
+ }
+ }
+ if (el.contains(dragEl)) {
+ return completed(false);
+ }
+ }
+ return false;
+ },
+ _ignoreWhileAnimating: null,
+ _offMoveEvents: function _offMoveEvents() {
+ off(document, "mousemove", this._onTouchMove);
+ off(document, "touchmove", this._onTouchMove);
+ off(document, "pointermove", this._onTouchMove);
+ off(document, "dragover", nearestEmptyInsertDetectEvent);
+ off(document, "mousemove", nearestEmptyInsertDetectEvent);
+ off(document, "touchmove", nearestEmptyInsertDetectEvent);
+ },
+ _offUpEvents: function _offUpEvents() {
+ var ownerDocument = this.el.ownerDocument;
+ off(ownerDocument, "mouseup", this._onDrop);
+ off(ownerDocument, "touchend", this._onDrop);
+ off(ownerDocument, "pointerup", this._onDrop);
+ off(ownerDocument, "touchcancel", this._onDrop);
+ off(document, "selectstart", this);
+ },
+ _onDrop: function _onDrop(evt) {
+ var el = this.el, options = this.options;
+ newIndex = index(dragEl);
+ newDraggableIndex = index(dragEl, options.draggable);
+ pluginEvent2("drop", this, {
+ evt
+ });
+ parentEl = dragEl && dragEl.parentNode;
+ newIndex = index(dragEl);
+ newDraggableIndex = index(dragEl, options.draggable);
+ if (Sortable.eventCanceled) {
+ this._nulling();
+ return;
+ }
+ awaitingDragStarted = false;
+ isCircumstantialInvert = false;
+ pastFirstInvertThresh = false;
+ clearInterval(this._loopId);
+ clearTimeout(this._dragStartTimer);
+ _cancelNextTick(this.cloneId);
+ _cancelNextTick(this._dragStartId);
+ if (this.nativeDraggable) {
+ off(document, "drop", this);
+ off(el, "dragstart", this._onDragStart);
+ }
+ this._offMoveEvents();
+ this._offUpEvents();
+ if (Safari) {
+ css(document.body, "user-select", "");
+ }
+ css(dragEl, "transform", "");
+ if (evt) {
+ if (moved) {
+ evt.cancelable && evt.preventDefault();
+ !options.dropBubble && evt.stopPropagation();
+ }
+ ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);
+ if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== "clone") {
+ cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);
+ }
+ if (dragEl) {
+ if (this.nativeDraggable) {
+ off(dragEl, "dragend", this);
+ }
+ _disableDraggable(dragEl);
+ dragEl.style["will-change"] = "";
+ if (moved && !awaitingDragStarted) {
+ toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);
+ }
+ toggleClass(dragEl, this.options.chosenClass, false);
+ _dispatchEvent({
+ sortable: this,
+ name: "unchoose",
+ toEl: parentEl,
+ newIndex: null,
+ newDraggableIndex: null,
+ originalEvent: evt
+ });
+ if (rootEl !== parentEl) {
+ if (newIndex >= 0) {
+ _dispatchEvent({
+ rootEl: parentEl,
+ name: "add",
+ toEl: parentEl,
+ fromEl: rootEl,
+ originalEvent: evt
+ });
+ _dispatchEvent({
+ sortable: this,
+ name: "remove",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ _dispatchEvent({
+ rootEl: parentEl,
+ name: "sort",
+ toEl: parentEl,
+ fromEl: rootEl,
+ originalEvent: evt
+ });
+ _dispatchEvent({
+ sortable: this,
+ name: "sort",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ }
+ putSortable && putSortable.save();
+ } else {
+ if (newIndex !== oldIndex) {
+ if (newIndex >= 0) {
+ _dispatchEvent({
+ sortable: this,
+ name: "update",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ _dispatchEvent({
+ sortable: this,
+ name: "sort",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ }
+ }
+ }
+ if (Sortable.active) {
+ if (newIndex == null || newIndex === -1) {
+ newIndex = oldIndex;
+ newDraggableIndex = oldDraggableIndex;
+ }
+ _dispatchEvent({
+ sortable: this,
+ name: "end",
+ toEl: parentEl,
+ originalEvent: evt
+ });
+ this.save();
+ }
+ }
+ }
+ this._nulling();
+ },
+ _nulling: function _nulling() {
+ pluginEvent2("nulling", this);
+ rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;
+ savedInputChecked.forEach(function(el) {
+ el.checked = true;
+ });
+ savedInputChecked.length = lastDx = lastDy = 0;
+ },
+ handleEvent: function handleEvent(evt) {
+ switch (evt.type) {
+ case "drop":
+ case "dragend":
+ this._onDrop(evt);
+ break;
+ case "dragenter":
+ case "dragover":
+ if (dragEl) {
+ this._onDragOver(evt);
+ _globalDragOver(evt);
+ }
+ break;
+ case "selectstart":
+ evt.preventDefault();
+ break;
+ }
+ },
+ toArray: function toArray() {
+ var order = [], el, children = this.el.children, i = 0, n = children.length, options = this.options;
+ for (; i < n; i++) {
+ el = children[i];
+ if (closest(el, options.draggable, this.el, false)) {
+ order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));
+ }
+ }
+ return order;
+ },
+ sort: function sort(order, useAnimation) {
+ var items = {}, rootEl2 = this.el;
+ this.toArray().forEach(function(id, i) {
+ var el = rootEl2.children[i];
+ if (closest(el, this.options.draggable, rootEl2, false)) {
+ items[id] = el;
+ }
+ }, this);
+ useAnimation && this.captureAnimationState();
+ order.forEach(function(id) {
+ if (items[id]) {
+ rootEl2.removeChild(items[id]);
+ rootEl2.appendChild(items[id]);
+ }
+ });
+ useAnimation && this.animateAll();
+ },
+ save: function save() {
+ var store = this.options.store;
+ store && store.set && store.set(this);
+ },
+ closest: function closest$1(el, selector) {
+ return closest(el, selector || this.options.draggable, this.el, false);
+ },
+ option: function option(name, value) {
+ var options = this.options;
+ if (value === void 0) {
+ return options[name];
+ } else {
+ var modifiedValue = PluginManager.modifyOption(this, name, value);
+ if (typeof modifiedValue !== "undefined") {
+ options[name] = modifiedValue;
+ } else {
+ options[name] = value;
+ }
+ if (name === "group") {
+ _prepareGroup(options);
+ }
+ }
+ },
+ destroy: function destroy() {
+ pluginEvent2("destroy", this);
+ var el = this.el;
+ el[expando] = null;
+ off(el, "mousedown", this._onTapStart);
+ off(el, "touchstart", this._onTapStart);
+ off(el, "pointerdown", this._onTapStart);
+ if (this.nativeDraggable) {
+ off(el, "dragover", this);
+ off(el, "dragenter", this);
+ }
+ Array.prototype.forEach.call(el.querySelectorAll("[draggable]"), function(el2) {
+ el2.removeAttribute("draggable");
+ });
+ this._onDrop();
+ this._disableDelayedDragEvents();
+ sortables.splice(sortables.indexOf(this.el), 1);
+ this.el = el = null;
+ },
+ _hideClone: function _hideClone() {
+ if (!cloneHidden) {
+ pluginEvent2("hideClone", this);
+ if (Sortable.eventCanceled)
+ return;
+ css(cloneEl, "display", "none");
+ if (this.options.removeCloneOnHide && cloneEl.parentNode) {
+ cloneEl.parentNode.removeChild(cloneEl);
+ }
+ cloneHidden = true;
+ }
+ },
+ _showClone: function _showClone(putSortable2) {
+ if (putSortable2.lastPutMode !== "clone") {
+ this._hideClone();
+ return;
+ }
+ if (cloneHidden) {
+ pluginEvent2("showClone", this);
+ if (Sortable.eventCanceled)
+ return;
+ if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {
+ rootEl.insertBefore(cloneEl, dragEl);
+ } else if (nextEl) {
+ rootEl.insertBefore(cloneEl, nextEl);
+ } else {
+ rootEl.appendChild(cloneEl);
+ }
+ if (this.options.group.revertClone) {
+ this.animate(dragEl, cloneEl);
+ }
+ css(cloneEl, "display", "");
+ cloneHidden = false;
+ }
+ }
+};
+function _globalDragOver(evt) {
+ if (evt.dataTransfer) {
+ evt.dataTransfer.dropEffect = "move";
+ }
+ evt.cancelable && evt.preventDefault();
+}
+function _onMove(fromEl, toEl, dragEl2, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {
+ var evt, sortable = fromEl[expando], onMoveFn = sortable.options.onMove, retVal;
+ if (window.CustomEvent && !IE11OrLess && !Edge) {
+ evt = new CustomEvent("move", {
+ bubbles: true,
+ cancelable: true
+ });
+ } else {
+ evt = document.createEvent("Event");
+ evt.initEvent("move", true, true);
+ }
+ evt.to = toEl;
+ evt.from = fromEl;
+ evt.dragged = dragEl2;
+ evt.draggedRect = dragRect;
+ evt.related = targetEl || toEl;
+ evt.relatedRect = targetRect || getRect(toEl);
+ evt.willInsertAfter = willInsertAfter;
+ evt.originalEvent = originalEvent;
+ fromEl.dispatchEvent(evt);
+ if (onMoveFn) {
+ retVal = onMoveFn.call(sortable, evt, originalEvent);
+ }
+ return retVal;
+}
+function _disableDraggable(el) {
+ el.draggable = false;
+}
+function _unsilent() {
+ _silent = false;
+}
+function _ghostIsFirst(evt, vertical, sortable) {
+ var rect = getRect(getChild(sortable.el, 0, sortable.options, true));
+ var spacer = 10;
+ return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;
+}
+function _ghostIsLast(evt, vertical, sortable) {
+ var rect = getRect(lastChild(sortable.el, sortable.options.draggable));
+ var spacer = 10;
+ return vertical ? evt.clientX > rect.right + spacer || evt.clientX <= rect.right && evt.clientY > rect.bottom && evt.clientX >= rect.left : evt.clientX > rect.right && evt.clientY > rect.top || evt.clientX <= rect.right && evt.clientY > rect.bottom + spacer;
+}
+function _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {
+ var mouseOnAxis = vertical ? evt.clientY : evt.clientX, targetLength = vertical ? targetRect.height : targetRect.width, targetS1 = vertical ? targetRect.top : targetRect.left, targetS2 = vertical ? targetRect.bottom : targetRect.right, invert = false;
+ if (!invertSwap) {
+ if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {
+ if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {
+ pastFirstInvertThresh = true;
+ }
+ if (!pastFirstInvertThresh) {
+ if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance : mouseOnAxis > targetS2 - targetMoveDistance) {
+ return -lastDirection;
+ }
+ } else {
+ invert = true;
+ }
+ } else {
+ if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {
+ return _getInsertDirection(target);
+ }
+ }
+ }
+ invert = invert || invertSwap;
+ if (invert) {
+ if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {
+ return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;
+ }
+ }
+ return 0;
+}
+function _getInsertDirection(target) {
+ if (index(dragEl) < index(target)) {
+ return 1;
+ } else {
+ return -1;
+ }
+}
+function _generateId(el) {
+ var str = el.tagName + el.className + el.src + el.href + el.textContent, i = str.length, sum = 0;
+ while (i--) {
+ sum += str.charCodeAt(i);
+ }
+ return sum.toString(36);
+}
+function _saveInputCheckedState(root) {
+ savedInputChecked.length = 0;
+ var inputs = root.getElementsByTagName("input");
+ var idx = inputs.length;
+ while (idx--) {
+ var el = inputs[idx];
+ el.checked && savedInputChecked.push(el);
+ }
+}
+function _nextTick(fn) {
+ return setTimeout(fn, 0);
+}
+function _cancelNextTick(id) {
+ return clearTimeout(id);
+}
+if (documentExists) {
+ on(document, "touchmove", function(evt) {
+ if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {
+ evt.preventDefault();
+ }
+ });
+}
+Sortable.utils = {
+ on,
+ off,
+ css,
+ find,
+ is: function is(el, selector) {
+ return !!closest(el, selector, el, false);
+ },
+ extend,
+ throttle,
+ closest,
+ toggleClass,
+ clone,
+ index,
+ nextTick: _nextTick,
+ cancelNextTick: _cancelNextTick,
+ detectDirection: _detectDirection,
+ getChild
+};
+Sortable.get = function(element) {
+ return element[expando];
+};
+Sortable.mount = function() {
+ for (var _len = arguments.length, plugins2 = new Array(_len), _key = 0; _key < _len; _key++) {
+ plugins2[_key] = arguments[_key];
+ }
+ if (plugins2[0].constructor === Array)
+ plugins2 = plugins2[0];
+ plugins2.forEach(function(plugin) {
+ if (!plugin.prototype || !plugin.prototype.constructor) {
+ throw "Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(plugin));
+ }
+ if (plugin.utils)
+ Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);
+ PluginManager.mount(plugin);
+ });
+};
+Sortable.create = function(el, options) {
+ return new Sortable(el, options);
+};
+Sortable.version = version;
+var autoScrolls = [], scrollEl, scrollRootEl, scrolling = false, lastAutoScrollX, lastAutoScrollY, touchEvt$1, pointerElemChangedInterval;
+function AutoScrollPlugin() {
+ function AutoScroll() {
+ this.defaults = {
+ scroll: true,
+ forceAutoScrollFallback: false,
+ scrollSensitivity: 30,
+ scrollSpeed: 10,
+ bubbleScroll: true
+ };
+ for (var fn in this) {
+ if (fn.charAt(0) === "_" && typeof this[fn] === "function") {
+ this[fn] = this[fn].bind(this);
+ }
+ }
+ }
+ AutoScroll.prototype = {
+ dragStarted: function dragStarted(_ref) {
+ var originalEvent = _ref.originalEvent;
+ if (this.sortable.nativeDraggable) {
+ on(document, "dragover", this._handleAutoScroll);
+ } else {
+ if (this.options.supportPointer) {
+ on(document, "pointermove", this._handleFallbackAutoScroll);
+ } else if (originalEvent.touches) {
+ on(document, "touchmove", this._handleFallbackAutoScroll);
+ } else {
+ on(document, "mousemove", this._handleFallbackAutoScroll);
+ }
+ }
+ },
+ dragOverCompleted: function dragOverCompleted(_ref2) {
+ var originalEvent = _ref2.originalEvent;
+ if (!this.options.dragOverBubble && !originalEvent.rootEl) {
+ this._handleAutoScroll(originalEvent);
+ }
+ },
+ drop: function drop3() {
+ if (this.sortable.nativeDraggable) {
+ off(document, "dragover", this._handleAutoScroll);
+ } else {
+ off(document, "pointermove", this._handleFallbackAutoScroll);
+ off(document, "touchmove", this._handleFallbackAutoScroll);
+ off(document, "mousemove", this._handleFallbackAutoScroll);
+ }
+ clearPointerElemChangedInterval();
+ clearAutoScrolls();
+ cancelThrottle();
+ },
+ nulling: function nulling() {
+ touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;
+ autoScrolls.length = 0;
+ },
+ _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {
+ this._handleAutoScroll(evt, true);
+ },
+ _handleAutoScroll: function _handleAutoScroll(evt, fallback) {
+ var _this = this;
+ var x = (evt.touches ? evt.touches[0] : evt).clientX, y = (evt.touches ? evt.touches[0] : evt).clientY, elem = document.elementFromPoint(x, y);
+ touchEvt$1 = evt;
+ if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {
+ autoScroll(evt, this.options, elem, fallback);
+ var ogElemScroller = getParentAutoScrollElement(elem, true);
+ if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {
+ pointerElemChangedInterval && clearPointerElemChangedInterval();
+ pointerElemChangedInterval = setInterval(function() {
+ var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);
+ if (newElem !== ogElemScroller) {
+ ogElemScroller = newElem;
+ clearAutoScrolls();
+ }
+ autoScroll(evt, _this.options, newElem, fallback);
+ }, 10);
+ lastAutoScrollX = x;
+ lastAutoScrollY = y;
+ }
+ } else {
+ if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {
+ clearAutoScrolls();
+ return;
+ }
+ autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);
+ }
+ }
+ };
+ return _extends(AutoScroll, {
+ pluginName: "scroll",
+ initializeByDefault: true
+ });
+}
+function clearAutoScrolls() {
+ autoScrolls.forEach(function(autoScroll2) {
+ clearInterval(autoScroll2.pid);
+ });
+ autoScrolls = [];
+}
+function clearPointerElemChangedInterval() {
+ clearInterval(pointerElemChangedInterval);
+}
+var autoScroll = throttle(function(evt, options, rootEl2, isFallback) {
+ if (!options.scroll)
+ return;
+ var x = (evt.touches ? evt.touches[0] : evt).clientX, y = (evt.touches ? evt.touches[0] : evt).clientY, sens = options.scrollSensitivity, speed = options.scrollSpeed, winScroller = getWindowScrollingElement();
+ var scrollThisInstance = false, scrollCustomFn;
+ if (scrollRootEl !== rootEl2) {
+ scrollRootEl = rootEl2;
+ clearAutoScrolls();
+ scrollEl = options.scroll;
+ scrollCustomFn = options.scrollFn;
+ if (scrollEl === true) {
+ scrollEl = getParentAutoScrollElement(rootEl2, true);
+ }
+ }
+ var layersOut = 0;
+ var currentParent = scrollEl;
+ do {
+ var el = currentParent, rect = getRect(el), top = rect.top, bottom = rect.bottom, left = rect.left, right = rect.right, width = rect.width, height = rect.height, canScrollX = void 0, canScrollY = void 0, scrollWidth = el.scrollWidth, scrollHeight = el.scrollHeight, elCSS = css(el), scrollPosX = el.scrollLeft, scrollPosY = el.scrollTop;
+ if (el === winScroller) {
+ canScrollX = width < scrollWidth && (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll" || elCSS.overflowX === "visible");
+ canScrollY = height < scrollHeight && (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll" || elCSS.overflowY === "visible");
+ } else {
+ canScrollX = width < scrollWidth && (elCSS.overflowX === "auto" || elCSS.overflowX === "scroll");
+ canScrollY = height < scrollHeight && (elCSS.overflowY === "auto" || elCSS.overflowY === "scroll");
+ }
+ var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);
+ var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);
+ if (!autoScrolls[layersOut]) {
+ for (var i = 0; i <= layersOut; i++) {
+ if (!autoScrolls[i]) {
+ autoScrolls[i] = {};
+ }
+ }
+ }
+ if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {
+ autoScrolls[layersOut].el = el;
+ autoScrolls[layersOut].vx = vx;
+ autoScrolls[layersOut].vy = vy;
+ clearInterval(autoScrolls[layersOut].pid);
+ if (vx != 0 || vy != 0) {
+ scrollThisInstance = true;
+ autoScrolls[layersOut].pid = setInterval(function() {
+ if (isFallback && this.layer === 0) {
+ Sortable.active._onTouchMove(touchEvt$1);
+ }
+ var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;
+ var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;
+ if (typeof scrollCustomFn === "function") {
+ if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== "continue") {
+ return;
+ }
+ }
+ scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);
+ }.bind({
+ layer: layersOut
+ }), 24);
+ }
+ }
+ layersOut++;
+ } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));
+ scrolling = scrollThisInstance;
+}, 30);
+var drop = function drop2(_ref) {
+ var originalEvent = _ref.originalEvent, putSortable2 = _ref.putSortable, dragEl2 = _ref.dragEl, activeSortable = _ref.activeSortable, dispatchSortableEvent = _ref.dispatchSortableEvent, hideGhostForTarget = _ref.hideGhostForTarget, unhideGhostForTarget = _ref.unhideGhostForTarget;
+ if (!originalEvent)
+ return;
+ var toSortable = putSortable2 || activeSortable;
+ hideGhostForTarget();
+ var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;
+ var target = document.elementFromPoint(touch.clientX, touch.clientY);
+ unhideGhostForTarget();
+ if (toSortable && !toSortable.el.contains(target)) {
+ dispatchSortableEvent("spill");
+ this.onSpill({
+ dragEl: dragEl2,
+ putSortable: putSortable2
+ });
+ }
+};
+function Revert() {
+}
+Revert.prototype = {
+ startIndex: null,
+ dragStart: function dragStart(_ref2) {
+ var oldDraggableIndex2 = _ref2.oldDraggableIndex;
+ this.startIndex = oldDraggableIndex2;
+ },
+ onSpill: function onSpill(_ref3) {
+ var dragEl2 = _ref3.dragEl, putSortable2 = _ref3.putSortable;
+ this.sortable.captureAnimationState();
+ if (putSortable2) {
+ putSortable2.captureAnimationState();
+ }
+ var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);
+ if (nextSibling) {
+ this.sortable.el.insertBefore(dragEl2, nextSibling);
+ } else {
+ this.sortable.el.appendChild(dragEl2);
+ }
+ this.sortable.animateAll();
+ if (putSortable2) {
+ putSortable2.animateAll();
+ }
+ },
+ drop
+};
+_extends(Revert, {
+ pluginName: "revertOnSpill"
+});
+function Remove() {
+}
+Remove.prototype = {
+ onSpill: function onSpill2(_ref4) {
+ var dragEl2 = _ref4.dragEl, putSortable2 = _ref4.putSortable;
+ var parentSortable = putSortable2 || this.sortable;
+ parentSortable.captureAnimationState();
+ dragEl2.parentNode && dragEl2.parentNode.removeChild(dragEl2);
+ parentSortable.animateAll();
+ },
+ drop
+};
+_extends(Remove, {
+ pluginName: "removeOnSpill"
+});
+Sortable.mount(new AutoScrollPlugin());
+Sortable.mount(Remove, Revert);
+function removeNode(node) {
+ if (node.parentElement !== null) {
+ node.parentElement.removeChild(node);
+ }
+}
+function insertNodeAt(fatherNode, node, position) {
+ const refNode = position === 0 ? fatherNode.children[0] : fatherNode.children[position - 1].nextSibling;
+ fatherNode.insertBefore(node, refNode);
+}
+function getConsole() {
+ if (typeof window !== "undefined") {
+ return window.console;
+ }
+ return global.console;
+}
+const console = getConsole();
+function cached(fn) {
+ const cache = /* @__PURE__ */ Object.create(null);
+ return function cachedFn(str) {
+ const hit = cache[str];
+ return hit || (cache[str] = fn(str));
+ };
+}
+const regex = /-(\w)/g;
+const camelize = cached((str) => str.replace(regex, (_, c) => c.toUpperCase()));
+const manageAndEmit$1 = ["Start", "Add", "Remove", "Update", "End"];
+const emit$1 = ["Choose", "Unchoose", "Sort", "Filter", "Clone"];
+const manage$1 = ["Move"];
+const eventHandlerNames = [manage$1, manageAndEmit$1, emit$1].flatMap((events2) => events2).map((evt) => `on${evt}`);
+const events = {
+ manage: manage$1,
+ manageAndEmit: manageAndEmit$1,
+ emit: emit$1
+};
+function isReadOnly(eventName) {
+ return eventHandlerNames.indexOf(eventName) !== -1;
+}
+const tags = [
+ "a",
+ "abbr",
+ "address",
+ "area",
+ "article",
+ "aside",
+ "audio",
+ "b",
+ "base",
+ "bdi",
+ "bdo",
+ "blockquote",
+ "body",
+ "br",
+ "button",
+ "canvas",
+ "caption",
+ "cite",
+ "code",
+ "col",
+ "colgroup",
+ "data",
+ "datalist",
+ "dd",
+ "del",
+ "details",
+ "dfn",
+ "dialog",
+ "div",
+ "dl",
+ "dt",
+ "em",
+ "embed",
+ "fieldset",
+ "figcaption",
+ "figure",
+ "footer",
+ "form",
+ "h1",
+ "h2",
+ "h3",
+ "h4",
+ "h5",
+ "h6",
+ "head",
+ "header",
+ "hgroup",
+ "hr",
+ "html",
+ "i",
+ "iframe",
+ "img",
+ "input",
+ "ins",
+ "kbd",
+ "label",
+ "legend",
+ "li",
+ "link",
+ "main",
+ "map",
+ "mark",
+ "math",
+ "menu",
+ "menuitem",
+ "meta",
+ "meter",
+ "nav",
+ "noscript",
+ "object",
+ "ol",
+ "optgroup",
+ "option",
+ "output",
+ "p",
+ "param",
+ "picture",
+ "pre",
+ "progress",
+ "q",
+ "rb",
+ "rp",
+ "rt",
+ "rtc",
+ "ruby",
+ "s",
+ "samp",
+ "script",
+ "section",
+ "select",
+ "slot",
+ "small",
+ "source",
+ "span",
+ "strong",
+ "style",
+ "sub",
+ "summary",
+ "sup",
+ "svg",
+ "table",
+ "tbody",
+ "td",
+ "template",
+ "textarea",
+ "tfoot",
+ "th",
+ "thead",
+ "time",
+ "title",
+ "tr",
+ "track",
+ "u",
+ "ul",
+ "var",
+ "video",
+ "wbr"
+];
+function isHtmlTag(name) {
+ return tags.includes(name);
+}
+function isTransition(name) {
+ return ["transition-group", "TransitionGroup"].includes(name);
+}
+function isHtmlAttribute(value) {
+ return ["id", "class", "role", "style"].includes(value) || value.startsWith("data-") || value.startsWith("aria-") || value.startsWith("on");
+}
+function project(entries) {
+ return entries.reduce((res, [key, value]) => {
+ res[key] = value;
+ return res;
+ }, {});
+}
+function getComponentAttributes({ $attrs, componentData = {} }) {
+ const attributes = project(
+ Object.entries($attrs).filter(([key, _]) => isHtmlAttribute(key))
+ );
+ return {
+ ...attributes,
+ ...componentData
+ };
+}
+function createSortableOption({ $attrs, callBackBuilder }) {
+ const options = project(getValidSortableEntries($attrs));
+ Object.entries(callBackBuilder).forEach(([eventType, eventBuilder]) => {
+ events[eventType].forEach((event) => {
+ options[`on${event}`] = eventBuilder(event);
+ });
+ });
+ const draggable = `[data-draggable]${options.draggable || ""}`;
+ return {
+ ...options,
+ draggable
+ };
+}
+function getValidSortableEntries(value) {
+ return Object.entries(value).filter(([key, _]) => !isHtmlAttribute(key)).map(([key, value2]) => [camelize(key), value2]).filter(([key, _]) => !isReadOnly(key));
+}
+const getHtmlElementFromNode = ({ el }) => el;
+const addContext = (domElement, context) => domElement.__draggable_context = context;
+const getContext = (domElement) => domElement.__draggable_context;
+class ComponentStructure {
+ constructor({
+ nodes: { header, default: defaultNodes, footer },
+ root,
+ realList
+ }) {
+ this.defaultNodes = defaultNodes;
+ this.children = [...header, ...defaultNodes, ...footer];
+ this.externalComponent = root.externalComponent;
+ this.rootTransition = root.transition;
+ this.tag = root.tag;
+ this.realList = realList;
+ }
+ get _isRootComponent() {
+ return this.externalComponent || this.rootTransition;
+ }
+ render(h2, attributes) {
+ const { tag, children, _isRootComponent } = this;
+ const option2 = !_isRootComponent ? children : { default: () => children };
+ return h2(tag, attributes, option2);
+ }
+ updated() {
+ const { defaultNodes, realList } = this;
+ defaultNodes.forEach((node, index2) => {
+ addContext(getHtmlElementFromNode(node), {
+ element: realList[index2],
+ index: index2
+ });
+ });
+ }
+ getUnderlyingVm(domElement) {
+ return getContext(domElement);
+ }
+ getVmIndexFromDomIndex(domIndex, element) {
+ const { defaultNodes } = this;
+ const { length } = defaultNodes;
+ const domChildren = element.children;
+ const domElement = domChildren.item(domIndex);
+ if (domElement === null) {
+ return length;
+ }
+ const context = getContext(domElement);
+ if (context) {
+ return context.index;
+ }
+ if (length === 0) {
+ return 0;
+ }
+ const firstDomListElement = getHtmlElementFromNode(defaultNodes[0]);
+ const indexFirstDomListElement = [...domChildren].findIndex(
+ (element2) => element2 === firstDomListElement
+ );
+ return domIndex < indexFirstDomListElement ? 0 : length;
+ }
+}
+function getSlot(slots, key) {
+ const slotValue = slots[key];
+ return slotValue ? slotValue() : [];
+}
+function computeNodes({ $slots, realList, getKey }) {
+ const normalizedList = realList || [];
+ const [header, footer] = ["header", "footer"].map(
+ (name) => getSlot($slots, name)
+ );
+ const { item } = $slots;
+ if (!item) {
+ throw new Error("draggable element must have an item slot");
+ }
+ const defaultNodes = normalizedList.flatMap(
+ (element, index2) => item({ element, index: index2 }).map((node) => {
+ node.key = getKey(element);
+ node.props = { ...node.props || {}, "data-draggable": true };
+ return node;
+ })
+ );
+ if (defaultNodes.length !== normalizedList.length) {
+ throw new Error("Item slot must have only one child");
+ }
+ return {
+ header,
+ footer,
+ default: defaultNodes
+ };
+}
+function getRootInformation(tag) {
+ const transition = isTransition(tag);
+ const externalComponent = !isHtmlTag(tag) && !transition;
+ return {
+ transition,
+ externalComponent,
+ tag: externalComponent ? resolveComponent(tag) : transition ? TransitionGroup : tag
+ };
+}
+function computeComponentStructure({ $slots, tag, realList, getKey }) {
+ const nodes = computeNodes({ $slots, realList, getKey });
+ const root = getRootInformation(tag);
+ return new ComponentStructure({ nodes, root, realList });
+}
+function emit(evtName, evtData) {
+ nextTick(() => this.$emit(evtName.toLowerCase(), evtData));
+}
+function manage(evtName) {
+ return (evtData, originalElement) => {
+ if (this.realList !== null) {
+ return this[`onDrag${evtName}`](evtData, originalElement);
+ }
+ };
+}
+function manageAndEmit(evtName) {
+ const delegateCallBack = manage.call(this, evtName);
+ return (evtData, originalElement) => {
+ delegateCallBack.call(this, evtData, originalElement);
+ emit.call(this, evtName, evtData);
+ };
+}
+let draggingElement = null;
+const props = {
+ list: {
+ type: Array,
+ required: false,
+ default: null
+ },
+ modelValue: {
+ type: Array,
+ required: false,
+ default: null
+ },
+ itemKey: {
+ type: [String, Function],
+ required: true
+ },
+ clone: {
+ type: Function,
+ default: (original) => {
+ return original;
+ }
+ },
+ tag: {
+ type: String,
+ default: "div"
+ },
+ move: {
+ type: Function,
+ default: null
+ },
+ componentData: {
+ type: Object,
+ required: false,
+ default: null
+ }
+};
+const emits = [
+ "update:modelValue",
+ "change",
+ ...[...events.manageAndEmit, ...events.emit].map((evt) => evt.toLowerCase())
+];
+const draggableComponent = defineComponent({
+ name: "draggable",
+ inheritAttrs: false,
+ props,
+ emits,
+ data() {
+ return {
+ error: false
+ };
+ },
+ render() {
+ try {
+ this.error = false;
+ const { $slots, $attrs, tag, componentData, realList, getKey } = this;
+ const componentStructure = computeComponentStructure({
+ $slots,
+ tag,
+ realList,
+ getKey
+ });
+ this.componentStructure = componentStructure;
+ const attributes = getComponentAttributes({ $attrs, componentData });
+ return componentStructure.render(h, attributes);
+ } catch (err) {
+ this.error = true;
+ return h("pre", { style: { color: "red" } }, err.stack);
+ }
+ },
+ created() {
+ if (this.list !== null && this.modelValue !== null) {
+ console.error(
+ "modelValue and list props are mutually exclusive! Please set one or another."
+ );
+ }
+ },
+ mounted() {
+ if (this.error) {
+ return;
+ }
+ const { $attrs, $el, componentStructure } = this;
+ componentStructure.updated();
+ const sortableOptions = createSortableOption({
+ $attrs,
+ callBackBuilder: {
+ manageAndEmit: (event) => manageAndEmit.call(this, event),
+ emit: (event) => emit.bind(this, event),
+ manage: (event) => manage.call(this, event)
+ }
+ });
+ const targetDomElement = $el.nodeType === 1 ? $el : $el.parentElement;
+ this._sortable = new Sortable(targetDomElement, sortableOptions);
+ this.targetDomElement = targetDomElement;
+ targetDomElement.__draggable_component__ = this;
+ },
+ updated() {
+ this.componentStructure.updated();
+ },
+ beforeUnmount() {
+ if (this._sortable !== void 0)
+ this._sortable.destroy();
+ },
+ computed: {
+ realList() {
+ const { list } = this;
+ return list ? list : this.modelValue;
+ },
+ getKey() {
+ const { itemKey } = this;
+ if (typeof itemKey === "function") {
+ return itemKey;
+ }
+ return (element) => element[itemKey];
+ }
+ },
+ watch: {
+ $attrs: {
+ handler(newOptionValue) {
+ const { _sortable } = this;
+ if (!_sortable)
+ return;
+ getValidSortableEntries(newOptionValue).forEach(([key, value]) => {
+ _sortable.option(key, value);
+ });
+ },
+ deep: true
+ }
+ },
+ methods: {
+ getUnderlyingVm(domElement) {
+ return this.componentStructure.getUnderlyingVm(domElement) || null;
+ },
+ getUnderlyingPotencialDraggableComponent(htmElement) {
+ return htmElement.__draggable_component__;
+ },
+ emitChanges(evt) {
+ nextTick(() => this.$emit("change", evt));
+ },
+ alterList(onList) {
+ if (this.list) {
+ onList(this.list);
+ return;
+ }
+ const newList = [...this.modelValue];
+ onList(newList);
+ this.$emit("update:modelValue", newList);
+ },
+ spliceList() {
+ const spliceList = (list) => list.splice(...arguments);
+ this.alterList(spliceList);
+ },
+ updatePosition(oldIndex2, newIndex2) {
+ const updatePosition = (list) => list.splice(newIndex2, 0, list.splice(oldIndex2, 1)[0]);
+ this.alterList(updatePosition);
+ },
+ getRelatedContextFromMoveEvent({ to, related }) {
+ const component = this.getUnderlyingPotencialDraggableComponent(to);
+ if (!component) {
+ return { component };
+ }
+ const list = component.realList;
+ const context = { list, component };
+ if (to !== related && list) {
+ const destination = component.getUnderlyingVm(related) || {};
+ return { ...destination, ...context };
+ }
+ return context;
+ },
+ getVmIndexFromDomIndex(domIndex) {
+ return this.componentStructure.getVmIndexFromDomIndex(
+ domIndex,
+ this.targetDomElement
+ );
+ },
+ onDragStart(evt) {
+ this.context = this.getUnderlyingVm(evt.item);
+ evt.item._underlying_vm_ = this.clone(this.context.element);
+ draggingElement = evt.item;
+ },
+ onDragAdd(evt) {
+ const element = evt.item._underlying_vm_;
+ if (element === void 0) {
+ return;
+ }
+ removeNode(evt.item);
+ const newIndex2 = this.getVmIndexFromDomIndex(evt.newIndex);
+ this.spliceList(newIndex2, 0, element);
+ const added = { element, newIndex: newIndex2 };
+ this.emitChanges({ added });
+ },
+ onDragRemove(evt) {
+ insertNodeAt(this.$el, evt.item, evt.oldIndex);
+ if (evt.pullMode === "clone") {
+ removeNode(evt.clone);
+ return;
+ }
+ const { index: oldIndex2, element } = this.context;
+ this.spliceList(oldIndex2, 1);
+ const removed = { element, oldIndex: oldIndex2 };
+ this.emitChanges({ removed });
+ },
+ onDragUpdate(evt) {
+ removeNode(evt.item);
+ insertNodeAt(evt.from, evt.item, evt.oldIndex);
+ const oldIndex2 = this.context.index;
+ const newIndex2 = this.getVmIndexFromDomIndex(evt.newIndex);
+ this.updatePosition(oldIndex2, newIndex2);
+ const moved2 = { element: this.context.element, oldIndex: oldIndex2, newIndex: newIndex2 };
+ this.emitChanges({ moved: moved2 });
+ },
+ computeFutureIndex(relatedContext, evt) {
+ if (!relatedContext.element) {
+ return 0;
+ }
+ const domChildren = [...evt.to.children].filter(
+ (el) => el.style["display"] !== "none"
+ );
+ const currentDomIndex = domChildren.indexOf(evt.related);
+ const currentIndex = relatedContext.component.getVmIndexFromDomIndex(
+ currentDomIndex
+ );
+ const draggedInList = domChildren.indexOf(draggingElement) !== -1;
+ return draggedInList || !evt.willInsertAfter ? currentIndex : currentIndex + 1;
+ },
+ onDragMove(evt, originalEvent) {
+ const { move, realList } = this;
+ if (!move || !realList) {
+ return true;
+ }
+ const relatedContext = this.getRelatedContextFromMoveEvent(evt);
+ const futureIndex = this.computeFutureIndex(relatedContext, evt);
+ const draggedContext = {
+ ...this.context,
+ futureIndex
+ };
+ const sendEvent = {
+ ...evt,
+ relatedContext,
+ draggedContext
+ };
+ return move(sendEvent, originalEvent);
+ },
+ onDragEnd() {
+ draggingElement = null;
+ }
+ }
+});
+const _hoisted_1$2 = { class: "query-builder-rule" };
+const _hoisted_2$2 = {
+ key: 0,
+ class: "query-builder__draggable-handle",
+ src: _imports_0,
+ alt: "Drag element to target"
+};
+const _hoisted_3$2 = ["textContent"];
+const _hoisted_4$1 = { class: "query-builder-rule__component-container" };
+const _sfc_main$3 = /* @__PURE__ */ defineComponent({
+ __name: "QueryBuilderRule",
+ props: {
+ config: {
+ type: Object,
+ required: true,
+ validator: (param) => isQueryBuilderConfig(param)
+ },
+ query: {
+ type: Object
+ }
+ },
+ emits: ["query-update"],
+ setup(__props, { emit: emit2 }) {
+ const props2 = __props;
+ const definition = computed(() => {
+ const ruleDefinition = props2.config.rules.find((rule) => rule.identifier === props2.query.identifier);
+ if (ruleDefinition) {
+ return ruleDefinition;
+ }
+ throw new Error(`Invalid identifier "${props2.query.identifier}": no rule definition available.`);
+ });
+ const component = computed(() => definition.value.component);
+ const ruleData = computed({
+ get: () => props2.query.value,
+ set: (update) => {
+ ruleUpdate(update);
+ }
+ });
+ const ruleSlotProps = computed(() => ({
+ ruleComponent: component.value,
+ ruleData: props2.query.value,
+ ruleIdentifier: props2.query.identifier,
+ updateRuleData: (ruleDataParam) => ruleUpdate(ruleDataParam)
+ }));
+ function ruleUpdate(update) {
+ emit2(
+ "query-update",
+ {
+ identifier: props2.query.identifier,
+ value: update
+ }
+ );
+ }
+ const showDragHandle = computed(() => {
+ if (props2.config.dragging) {
+ return !props2.config.dragging.disabled;
+ }
+ return false;
+ });
+ return (_ctx, _cache) => {
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
+ unref(showDragHandle) ? (openBlock(), createElementBlock("img", _hoisted_2$2)) : createCommentVNode("", true),
+ _ctx.$slots.rule ? renderSlot(_ctx.$slots, "rule", normalizeProps(mergeProps({ key: 1 }, unref(ruleSlotProps))), void 0, true) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
+ createElementVNode("span", {
+ class: "query-builder-rule__name",
+ textContent: toDisplayString(unref(definition).name)
+ }, null, 8, _hoisted_3$2),
+ createElementVNode("div", _hoisted_4$1, [
+ (openBlock(), createBlock(resolveDynamicComponent(unref(component)), {
+ modelValue: unref(ruleData),
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(ruleData) ? ruleData.value = $event : null)
+ }, null, 8, ["modelValue"]))
+ ])
+ ], 64))
+ ]);
+ };
+ }
+});
+const QueryBuilderRule_vue_vue_type_style_index_0_scoped_f61f07d1_lang = "";
+const _export_sfc = (sfc, props2) => {
+ const target = sfc.__vccOpts || sfc;
+ for (const [key, val] of props2) {
+ target[key] = val;
+ }
+ return target;
+};
+const QueryBuilderRule = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-f61f07d1"]]);
+const _withScopeId$1 = (n) => (pushScopeId("data-v-530acb3b"), n = n(), popScopeId(), n);
+const _hoisted_1$1 = { class: "query-builder-child" };
+const _hoisted_2$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ createElementVNode("span", { "aria-hidden": "true" }, "\xD7", -1));
+const _hoisted_3$1 = [
+ _hoisted_2$1
+];
+const _sfc_main$2 = /* @__PURE__ */ defineComponent({
+ __name: "QueryBuilderChild",
+ props: {
+ query: {
+ type: Object,
+ required: true,
+ validator: (query) => isRule(query) || isRuleSet(query)
+ },
+ config: {
+ type: Object,
+ required: true,
+ validator: (param) => isQueryBuilderConfig(param)
+ },
+ depth: Number
+ },
+ emits: ["query-update", "delete-child"],
+ setup(__props) {
+ const props2 = __props;
+ const isRule$1 = computed(() => isRule(props2.query));
+ const isRuleSet$1 = computed(() => isRuleSet(props2.query));
+ const ruleDefinition = computed(() => {
+ if (!isRule$1.value) {
+ return null;
+ }
+ const ruleDefinitionResult = props2.config.rules.find((definition2) => definition2.identifier === props2.query.identifier);
+ return ruleDefinitionResult || null;
+ });
+ const component = computed(() => {
+ if (isRule$1.value && ruleDefinition.value) {
+ return QueryBuilderRule;
+ }
+ if (isRuleSet$1.value) {
+ return QueryBuilderGroup;
+ }
+ throw new Error("No component definition available.");
+ });
+ computed(() => {
+ if (isRule$1.value && ruleDefinition.value) {
+ return ruleDefinition.value;
+ }
+ if (isRuleSet$1.value) {
+ return null;
+ }
+ throw new Error("No component definition available.");
+ });
+ return (_ctx, _cache) => {
+ return openBlock(), createElementBlock("div", _hoisted_1$1, [
+ (openBlock(), createBlock(resolveDynamicComponent(unref(component)), {
+ config: __props.config,
+ query: __props.query,
+ depth: __props.depth,
+ onQueryUpdate: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("query-update", $event)),
+ class: "query-builder-child__component"
+ }, createSlots({ _: 2 }, [
+ renderList(_ctx.$slots, (_, slotName) => {
+ return {
+ name: slotName,
+ fn: withCtx((props22) => [
+ renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(props22)), void 0, true)
+ ])
+ };
+ })
+ ]), 1064, ["config", "query", "depth"])),
+ createElementVNode("button", {
+ "aria-label": "Close",
+ class: "query-builder-child__delete-child",
+ onClick: _cache[1] || (_cache[1] = withModifiers(($event) => _ctx.$emit("delete-child"), ["stop", "prevent"]))
+ }, _hoisted_3$1)
+ ]);
+ };
+ }
+});
+const QueryBuilderChild_vue_vue_type_style_index_0_scoped_530acb3b_lang = "";
+const QueryBuilderChild = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-530acb3b"]]);
+const _withScopeId = (n) => (pushScopeId("data-v-78d4affb"), n = n(), popScopeId(), n);
+const _hoisted_1 = { class: "query-builder-group" };
+const _hoisted_2 = { class: "query-builder-group__control" };
+const _hoisted_3 = {
+ key: 0,
+ class: "query-builder-group__group-selection-slot"
+};
+const _hoisted_4 = {
+ key: 0,
+ class: "query-builder__draggable-handle",
+ src: _imports_0,
+ alt: "Drag element to target"
+};
+const _hoisted_5 = {
+ key: 1,
+ class: "query-builder-group__group-selection"
+};
+const _hoisted_6 = {
+ key: 0,
+ class: "query-builder__draggable-handle",
+ src: _imports_0,
+ alt: "Drag element to target"
+};
+const _hoisted_7 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createElementVNode("span", { class: "query-builder-group__group-operator" }, "Operator", -1));
+const _hoisted_8 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createElementVNode("option", {
+ disabled: "",
+ value: ""
+}, "Select an operator", -1));
+const _hoisted_9 = ["value", "textContent"];
+const _hoisted_10 = {
+ key: 3,
+ class: "query-builder-group__group-control"
+};
+const _hoisted_11 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createElementVNode("option", {
+ disabled: "",
+ value: ""
+}, "Select a rule", -1));
+const _hoisted_12 = ["value", "textContent"];
+const _hoisted_13 = ["disabled"];
+const _hoisted_14 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ createElementVNode("div", { class: "query-builder-group__spacer" }, null, -1));
+const _sfc_main$1 = /* @__PURE__ */ defineComponent({
+ __name: "QueryBuilderGroup",
+ props: {
+ config: {
+ type: Object,
+ required: true,
+ validator: (param) => isQueryBuilderConfig(param)
+ },
+ query: {
+ type: Object
+ },
+ depth: {
+ type: Number
+ }
+ },
+ emits: ["query-update"],
+ setup(__props, { expose, emit: emit2 }) {
+ const props2 = __props;
+ const getMergeTrap = inject("getMergeTrap");
+ watch(() => props2.query, (n) => pruneChildren());
+ watch(() => props2.config.maxDepth, (n) => pruneChildren());
+ onMounted(() => pruneChildren());
+ function pruneChildren() {
+ if (children.value.length === props2.query.children.length) {
+ return;
+ }
+ const childrenUpdate = [...children.value];
+ emit2(
+ "query-update",
+ {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ }
+ );
+ }
+ const selectedOperator = computed({
+ get: () => props2.query.operatorIdentifier,
+ set: (operatorIdentifier) => {
+ emit2(
+ "query-update",
+ {
+ ...props2.query,
+ operatorIdentifier
+ }
+ );
+ }
+ });
+ const trap = ref(null);
+ const selectedRule = ref("");
+ const type = QueryBuilderGroupSym;
+ const children = computed(() => {
+ if (maxDepthExeeded.value) {
+ return [...props2.query.children].filter(isRule);
+ }
+ return [...props2.query.children];
+ });
+ const childProxies = computed(() => children.value.map((item, index2) => ({
+ __item: item,
+ __id: index2
+ })));
+ function updateSort(ev) {
+ if (ev.moved) {
+ moveSortedChild(ev.moved);
+ return;
+ }
+ if (ev.added) {
+ addSortedChild(ev.added);
+ return;
+ }
+ if (ev.removed) {
+ removeSortedChild(ev.removed);
+ }
+ }
+ function moveSortedChild(move) {
+ const childrenUpdate = [...children.value];
+ childrenUpdate.splice(move.newIndex, 0, childrenUpdate.splice(move.oldIndex, 1)[0]);
+ emit2(
+ "query-update",
+ {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ }
+ );
+ }
+ const draggableComponent$1 = ref(null);
+ function addSortedChild(added) {
+ var _a;
+ const childrenUpdate = [...children.value];
+ childrenUpdate.splice(added.newIndex, 0, added.element.__item);
+ getMergeTrap().registerSortUpdate({
+ component: (_a = draggableComponent$1.value) == null ? void 0 : _a.$parent,
+ ev: {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ },
+ adding: true,
+ affectedIdx: added.newIndex
+ });
+ }
+ function removeSortedChild(removed) {
+ var _a;
+ const childrenUpdate = [...children.value];
+ childrenUpdate.splice(removed.oldIndex, 1);
+ getMergeTrap().registerSortUpdate({
+ component: (_a = draggableComponent$1.value) == null ? void 0 : _a.$parent,
+ ev: {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ },
+ adding: false,
+ affectedIdx: removed.oldIndex
+ });
+ }
+ const operators = computed(() => props2.config.operators);
+ const rules = computed(() => props2.config.rules);
+ const childDepth = computed(() => props2.depth + 1);
+ const childDepthClass = computed(() => `query-builder-group__group-children--depth-${childDepth.value}`);
+ const hasMaxDepth = computed(() => typeof props2.config.maxDepth === "number");
+ const maxDepthExeeded = computed(() => {
+ if (!hasMaxDepth.value) {
+ return false;
+ }
+ return props2.depth >= props2.config.maxDepth;
+ });
+ const borderColor = computed(() => {
+ if (props2.config.colors && props2.config.colors.length > 0) {
+ return props2.config.colors[props2.depth % props2.config.colors.length];
+ }
+ return "";
+ });
+ const getBorderStyle = computed(() => {
+ if (borderColor.value) {
+ return `border-color: ${borderColor.value}`;
+ }
+ return "border-left: 0";
+ });
+ const groupOperatorSlotProps = computed(() => ({
+ currentOperator: selectedOperator.value,
+ operators: operators.value,
+ updateCurrentOperator: (newOperator) => {
+ emit2(
+ "query-update",
+ {
+ ...props2.query,
+ operatorIdentifier: newOperator
+ }
+ );
+ }
+ }));
+ const groupControlSlotProps = computed(() => ({
+ maxDepthExeeded: maxDepthExeeded.value,
+ rules: rules.value,
+ addRule: (newRule) => {
+ const currentRule = selectedRule.value;
+ selectedRule.value = newRule;
+ addRule();
+ selectedRule.value = currentRule;
+ },
+ newGroup: () => newGroup()
+ }));
+ const dragOptions = computed(() => {
+ if (!props2.config.dragging) {
+ return {
+ disabled: true
+ };
+ }
+ if (!hasMaxDepth.value) {
+ return props2.config.dragging;
+ }
+ return {
+ ...props2.config.dragging,
+ group: {
+ name: props2.config.dragging.group,
+ put: (to, from, dragEl2) => {
+ const dragged = dragEl2 == null ? void 0 : dragEl2.__vue__;
+ const childDepthCurrent = calculateMaxDepth({ ...dragged.query }, 0);
+ return props2.depth + childDepthCurrent <= props2.config.maxDepth;
+ }
+ }
+ };
+ });
+ function calculateMaxDepth(query, depthCnt) {
+ if (isRule(query)) {
+ return depthCnt;
+ }
+ return query.children.reduce((cntPerChild, c) => Math.max(
+ cntPerChild,
+ calculateMaxDepth({ ...c }, depthCnt + 1)
+ ), depthCnt);
+ }
+ const showDragHandle = computed(() => !(dragOptions.value.disabled || props2.depth === 0));
+ function addRule() {
+ const childrenUpdate = [...children.value];
+ const selectedRuleFound = props2.config.rules.find((rule) => rule.identifier === selectedRule.value);
+ if (!selectedRuleFound) {
+ throw new Error(`Rule identifier "${selectedRule.value}" is invalid.`);
+ }
+ if (typeof selectedRuleFound.initialValue === "object" && selectedRuleFound.initialValue !== null) {
+ throw new Error(`"initialValue" of "${selectedRuleFound.identifier}" must not be an object - use a factory function!`);
+ }
+ let value = null;
+ if (typeof selectedRuleFound.initialValue !== "undefined") {
+ value = selectedRuleFound.initialValue;
+ }
+ if (typeof value === "function") {
+ value = value();
+ }
+ childrenUpdate.push({
+ identifier: selectedRuleFound.identifier,
+ value
+ });
+ emit2(
+ "query-update",
+ {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ }
+ );
+ selectedRule.value = "";
+ }
+ function newGroup() {
+ if (maxDepthExeeded.value) {
+ return;
+ }
+ const childrenUpdate = [...children.value];
+ childrenUpdate.push({
+ operatorIdentifier: props2.config.operators[0].identifier,
+ children: []
+ });
+ emit2(
+ "query-update",
+ {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ }
+ );
+ }
+ function updateChild(position, newChild) {
+ if (trap.value) {
+ trap.value(position, newChild);
+ return;
+ }
+ const childrenUpdate = [...children.value];
+ childrenUpdate.splice(position, 1, newChild);
+ emit2(
+ "query-update",
+ {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ }
+ );
+ }
+ function deleteChild(idx) {
+ const childrenUpdate = [...children.value];
+ childrenUpdate.splice(idx, 1);
+ emit2(
+ "query-update",
+ {
+ operatorIdentifier: selectedOperator.value,
+ children: childrenUpdate
+ }
+ );
+ }
+ expose({
+ type,
+ children,
+ depth: computed(() => props2.depth),
+ selectedOperator,
+ trap
+ });
+ return (_ctx, _cache) => {
+ return openBlock(), createElementBlock("div", _hoisted_1, [
+ createElementVNode("div", _hoisted_2, [
+ _ctx.$slots.groupOperator ? (openBlock(), createElementBlock("div", _hoisted_3, [
+ unref(showDragHandle) ? (openBlock(), createElementBlock("img", _hoisted_4)) : createCommentVNode("", true),
+ renderSlot(_ctx.$slots, "groupOperator", normalizeProps(guardReactiveProps(unref(groupOperatorSlotProps))), void 0, true)
+ ])) : (openBlock(), createElementBlock("div", _hoisted_5, [
+ unref(showDragHandle) ? (openBlock(), createElementBlock("img", _hoisted_6)) : createCommentVNode("", true),
+ _hoisted_7,
+ withDirectives(createElementVNode("select", {
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => isRef(selectedOperator) ? selectedOperator.value = $event : null)
+ }, [
+ _hoisted_8,
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(operators), (operator) => {
+ return openBlock(), createElementBlock("option", {
+ key: operator.identifier,
+ value: operator.identifier,
+ textContent: toDisplayString(operator.name)
+ }, null, 8, _hoisted_9);
+ }), 128))
+ ], 512), [
+ [vModelSelect, unref(selectedOperator)]
+ ])
+ ])),
+ _ctx.$slots.groupControl ? renderSlot(_ctx.$slots, "groupControl", normalizeProps(mergeProps({ key: 2 }, unref(groupControlSlotProps))), void 0, true) : (openBlock(), createElementBlock("div", _hoisted_10, [
+ withDirectives(createElementVNode("select", {
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => selectedRule.value = $event)
+ }, [
+ _hoisted_11,
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(rules), (rule) => {
+ return openBlock(), createElementBlock("option", {
+ key: rule.identifier,
+ value: rule.identifier,
+ textContent: toDisplayString(rule.name)
+ }, null, 8, _hoisted_12);
+ }), 128))
+ ], 512), [
+ [vModelSelect, selectedRule.value]
+ ]),
+ createElementVNode("button", {
+ disabled: selectedRule.value === "",
+ onClick: addRule,
+ class: "query-builder-group__rule-adding-button"
+ }, " Add Rule ", 8, _hoisted_13),
+ !unref(maxDepthExeeded) ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
+ _hoisted_14,
+ createElementVNode("button", {
+ onClick: newGroup,
+ class: "query-builder-group__group-adding-button"
+ }, " Add Group ")
+ ], 64)) : createCommentVNode("", true)
+ ]))
+ ]),
+ createVNode(unref(draggableComponent), mergeProps({
+ class: ["query-builder-group__group-children", unref(childDepthClass)],
+ style: unref(getBorderStyle),
+ modelValue: unref(childProxies),
+ onChange: updateSort,
+ "item-key": "__id",
+ tag: "div"
+ }, unref(dragOptions), {
+ ref_key: "draggableComponent",
+ ref: draggableComponent$1
+ }), {
+ item: withCtx(({ element: child, index: idx }) => [
+ (openBlock(), createBlock(QueryBuilderChild, {
+ key: idx,
+ config: __props.config,
+ query: child.__item,
+ depth: unref(childDepth),
+ onQueryUpdate: ($event) => updateChild(idx, $event),
+ onDeleteChild: ($event) => deleteChild(idx),
+ class: "query-builder-group__child"
+ }, createSlots({ _: 2 }, [
+ renderList(_ctx.$slots, (_, slotName) => {
+ return {
+ name: slotName,
+ fn: withCtx((props22) => [
+ renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(props22)), void 0, true)
+ ])
+ };
+ })
+ ]), 1032, ["config", "query", "depth", "onQueryUpdate", "onDeleteChild"]))
+ ]),
+ _: 3
+ }, 16, ["class", "style", "modelValue"])
+ ]);
+ };
+ }
+});
+const QueryBuilderGroup_vue_vue_type_style_index_0_scoped_78d4affb_lang = "";
+const QueryBuilderGroup = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-78d4affb"]]);
+const _sfc_main = /* @__PURE__ */ defineComponent({
+ __name: "QueryBuilder",
+ props: {
+ modelValue: {
+ type: Object,
+ required: false,
+ default: null,
+ validator: (query) => query === null || isRuleSet(query)
+ },
+ config: {
+ type: Object,
+ required: true,
+ validator: (param) => isQueryBuilderConfig(param)
+ }
+ },
+ emits: ["update:modelValue"],
+ setup(__props, { emit: emit2 }) {
+ const props2 = __props;
+ provide("getMergeTrap", provideMergeTrap);
+ let trap = null;
+ watch(() => props2.modelValue, () => {
+ trap = null;
+ });
+ const ruleSet = computed(() => {
+ if (props2.modelValue) {
+ return props2.modelValue;
+ }
+ if (props2.config.operators.length === 0) {
+ return {
+ operatorIdentifier: "",
+ children: []
+ };
+ }
+ return {
+ operatorIdentifier: props2.config.operators[0].identifier,
+ children: []
+ };
+ });
+ const queryBuiderConfig = computed(() => {
+ if (!props2.config.dragging) {
+ return props2.config;
+ }
+ return {
+ ...props2.config,
+ dragging: {
+ handle: ".query-builder__draggable-handle",
+ ...props2.config.dragging,
+ group: `${new Date().getTime() * Math.random()}`
+ }
+ };
+ });
+ function updateQuery(newQuery) {
+ trap = null;
+ emit2("update:modelValue", { ...newQuery });
+ }
+ function provideMergeTrap() {
+ if (trap) {
+ return trap;
+ }
+ trap = new MergeTrap();
+ return trap;
+ }
+ return (_ctx, _cache) => {
+ return openBlock(), createBlock(QueryBuilderGroup, {
+ config: unref(queryBuiderConfig),
+ query: unref(ruleSet),
+ depth: 0,
+ class: "query-builder__root",
+ onQueryUpdate: updateQuery
+ }, createSlots({ _: 2 }, [
+ renderList(_ctx.$slots, (_, slotName) => {
+ return {
+ name: slotName,
+ fn: withCtx((props22) => [
+ renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(props22)), void 0, true)
+ ])
+ };
+ })
+ ]), 1032, ["config", "query"]);
+ };
+ }
+});
+const QueryBuilder_vue_vue_type_style_index_0_scoped_1676f0cb_lang = "";
+const ReExportQueryBuilder = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1676f0cb"]]);
+export {
+ ReExportQueryBuilder as default
+};
+//# sourceMappingURL=query-builder-vue-3.js.map
+
+