eco-vue-js 0.26.19 → 0.26.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/components/Input/WInputAsync.vue.d.ts.map +1 -1
  2. package/dist/components/Input/WInputAsync.vue_vue_type_script_setup_true_lang.js +2 -1
  3. package/dist/components/Nav/WNavItem.vue_vue_type_script_setup_true_lang.js +1 -1
  4. package/dist/components/Select/WSelect.vue.d.ts +3 -3
  5. package/dist/components/Select/WSelect.vue.d.ts.map +1 -1
  6. package/dist/components/Select/WSelect.vue_vue_type_script_setup_true_lang.js +84 -362
  7. package/dist/components/Select/WSelectAsync.vue.d.ts +3 -3
  8. package/dist/components/Select/WSelectAsync.vue.d.ts.map +1 -1
  9. package/dist/components/Select/WSelectAsync.vue_vue_type_script_setup_true_lang.js +96 -237
  10. package/dist/components/Select/WSelectAsyncSingle.vue.d.ts.map +1 -1
  11. package/dist/components/Select/WSelectAsyncSingle.vue_vue_type_script_setup_true_lang.js +106 -10
  12. package/dist/components/Select/WSelectSingle.vue.d.ts.map +1 -1
  13. package/dist/components/Select/WSelectSingle.vue_vue_type_script_setup_true_lang.js +61 -8
  14. package/dist/components/Select/WSelectStringified.vue_vue_type_script_setup_true_lang.js +2 -0
  15. package/dist/components/Select/components/SelectAsyncBase.vue.d.ts +54 -0
  16. package/dist/components/Select/components/SelectAsyncBase.vue.d.ts.map +1 -0
  17. package/dist/components/Select/components/SelectAsyncBase.vue.js +5 -0
  18. package/dist/components/Select/components/SelectAsyncBase.vue_vue_type_script_setup_true_lang.js +406 -0
  19. package/dist/components/Select/components/SelectBase.vue.d.ts +52 -0
  20. package/dist/components/Select/components/SelectBase.vue.d.ts.map +1 -0
  21. package/dist/components/Select/components/SelectBase.vue.js +5 -0
  22. package/dist/components/Select/components/SelectBase.vue_vue_type_script_setup_true_lang.js +495 -0
  23. package/dist/components/Select/components/SelectDeferred.vue.d.ts +29 -0
  24. package/dist/components/Select/components/SelectDeferred.vue.d.ts.map +1 -0
  25. package/dist/components/Select/components/SelectDeferred.vue.js +5 -0
  26. package/dist/components/Select/components/SelectDeferred.vue_vue_type_script_setup_true_lang.js +166 -0
  27. package/dist/components/Select/models/useDeferred.d.ts +22 -0
  28. package/dist/components/Select/models/useDeferred.d.ts.map +1 -0
  29. package/dist/components/Select/models/useDeferred.js +69 -0
  30. package/dist/components/Select/types.d.ts +21 -3
  31. package/dist/components/Select/types.d.ts.map +1 -1
  32. package/dist/utils/useRouteTitle.d.ts +2 -2
  33. package/dist/utils/useRouteTitle.d.ts.map +1 -1
  34. package/dist/utils/useRouteTitle.js +3 -3
  35. package/docs/components/select.md +67 -5
  36. package/docs/llms.txt +1 -1
  37. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"WInputAsync.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/Input/WInputAsync.vue"],"names":[],"mappings":"AAsDA;AA4HA,OAAO,KAAK,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,SAAS,CAAA;AAQ7D,QAAA,MAAM,YAAY,GAAK,IAAI,SAAS,SAAS,GAAG,MAAM,EAAE,UAAU,SAAS,eAAe,GAAG,EAAE,EAC9F,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,gBAAgB,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAClE;WAsLO,OAAO,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAAC;;KAAmC,CAAC,GAAG,CAAC,OAAO,UAAU,SAAS;QAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC5J,CAAC,OAAO,EAAE,EAAE,KAAK,IAAI;WACtB,GAAG;;QA9JT,iCAAiC;gBACzB,MAAM,IAAI;QAClB,+CAA+C;mBACpC,MAAM,IAAI;QACrB,yCAAyC;gBACjC,MAAM,IAAI;QAClB,0FAA0F;iBACjF,CAAC,KAAK,EAAE;YAAC,UAAU,EAAE,qDAAa,SAAS,CAAA;SAAC,KAAK,IAAI;QAC9D,mEAAmE;iBAC1D,CAAC,KAAK,EAAE;YAAC,UAAU,EAAE,qDAAa,SAAS,CAAC;YAAC,OAAO,EAAE,OAAO,CAAA;SAAC,KAAK,IAAI;;cAd5E,oBAAoB,sGAAoB,IAAI;EAuK9C,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;CAAI,CAAC;wBACpE,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,CAAC,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"WInputAsync.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/Input/WInputAsync.vue"],"names":[],"mappings":"AAsDA;AA6HA,OAAO,KAAK,EAAC,eAAe,EAAE,eAAe,EAAC,MAAM,SAAS,CAAA;AAS7D,QAAA,MAAM,YAAY,GAAK,IAAI,SAAS,SAAS,GAAG,MAAM,EAAE,UAAU,SAAS,eAAe,GAAG,EAAE,EAC9F,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,gBAAgB,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAClE;WAuLO,OAAO,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAAC;;KAAmC,CAAC,GAAG,CAAC,OAAO,UAAU,SAAS;QAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC5J,CAAC,OAAO,EAAE,EAAE,KAAK,IAAI;WACtB,GAAG;;QA/JT,iCAAiC;gBACzB,MAAM,IAAI;QAClB,+CAA+C;mBACpC,MAAM,IAAI;QACrB,yCAAyC;gBACjC,MAAM,IAAI;QAClB,0FAA0F;iBACjF,CAAC,KAAK,EAAE;YAAC,UAAU,EAAE,qDAAa,SAAS,CAAA;SAAC,KAAK,IAAI;QAC9D,mEAAmE;iBAC1D,CAAC,KAAK,EAAE;YAAC,UAAU,EAAE,qDAAa,SAAS,CAAC;YAAC,OAAO,EAAE,OAAO,CAAA;SAAC,KAAK,IAAI;;cAd5E,oBAAoB,sGAAoB,IAAI;EAwK9C,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;CAAI,CAAC;wBACpE,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,CAAC,GAAG,EAAE,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { useClearValue } from "../../utils/useClearValue.js";
2
2
  import WInput_default from "./WInput.vue.js";
3
+ import { getDefinedProps } from "../Select/models/useDeferred.js";
3
4
  import { createBlock, createSlots, defineComponent, guardReactiveProps, mergeProps, normalizeProps, openBlock, ref, renderSlot, unref, watch, withCtx } from "vue";
4
5
  //#region src/components/Input/WInputAsync.vue?vue&type=script&setup=true&lang.ts
5
6
  var WInputAsync_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
@@ -99,7 +100,7 @@ var WInputAsync_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
99
100
  };
100
101
  return (_ctx, _cache) => {
101
102
  return openBlock(), createBlock(WInput_default, mergeProps({ ref: "input" }, {
102
- ...props,
103
+ ...unref(getDefinedProps)(props),
103
104
  clearValue: unref(getClearValue)(),
104
105
  async: true,
105
106
  errorMessage: errorMessageValue.value ?? __props.errorMessage
@@ -50,7 +50,7 @@ var WNavItem_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
50
50
  if (routeTo.value?.name !== route?.name) return false;
51
51
  return isEqualObj(route.query, routeTo.value.query ?? {}, EXCLUDE_QUERY_FIELDS, props.queryFields);
52
52
  });
53
- const routeTitle = computed(() => getRouteTitle(routeTo.value?.matched.at(-1)));
53
+ const routeTitle = computed(() => getRouteTitle(routeTo.value?.matched ?? []));
54
54
  const iconLocal = computed(() => props.icon ?? routeTo.value?.meta?.icon);
55
55
  const titleLocal = computed(() => props.title ?? (routeTitle.value ? getRouteTitleShort(routeTitle.value) : void 0) ?? (typeof routeTo.value?.meta?.titleShort === "string" ? routeTo.value.meta.titleShort : typeof routeTo.value?.meta?.title === "string" ? routeTo.value.meta.title : ""));
56
56
  const isTextColor = computed(() => props.hasActive ? !props.indent : isActive.value);
@@ -12,9 +12,9 @@ declare const __VLS_export: <Model extends number | string, Data extends Default
12
12
  } ? P : {});
13
13
  expose: (exposed: import('vue').ShallowUnwrapRef<{
14
14
  focus: () => void;
15
- blur: () => void;
16
- close: () => void;
17
- setSearch: (value: string) => void;
15
+ blur: () => void | undefined;
16
+ close: () => void | undefined;
17
+ setSearch: (value: string) => void | undefined;
18
18
  }>) => void;
19
19
  attrs: any;
20
20
  slots: {
@@ -1 +1 @@
1
- {"version":3,"file":"WSelect.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/Select/WSelect.vue"],"names":[],"mappings":"AA4LA;AAohBA,OAAO,KAAK,EAAC,qBAAqB,EAA8B,iBAAiB,EAAE,WAAW,EAAC,MAAM,SAAS,CAAA;AAe9G,QAAA,MAAM,YAAY,GAAK,KAAK,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,SAAS,WAAW,EAAE,kBAAkB,EAAE,eAAe,SAAS,qBAAqB,CAAC,IAAI,CAAC,EACtJ,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,gBAAgB,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAClE;WAu0BO,OAAO,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAAC;;;;;;;KAAmC,CAAC,GAAG,CAAC,OAAO,UAAU,SAAS;QAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC5J,CAAC,OAAO,EAAE,OAAO,KAAK,EAAE,gBAAgB;;;;2BArlBvB,MAAM,KAAG,IAAI;MAqlBgC,KAAK,IAAI;WACxE,GAAG;;QA9gBT,iCAAiC;gBACzB,MAAM,IAAI;QAClB,+CAA+C;mBACpC,MAAM,IAAI;QACrB,0HAA0H;iBACjH,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI;QAC7D,yCAAyC;gBACjC,MAAM,IAAI;QAClB,mCAAmC;iBAC1B,MAAM,IAAI;QACnB,yDAAyD;kBAC/C,MAAM,IAAI;;;YAvThB,QAAQ,QAAQ,KAAK,QAAQ,IAAI,GAAG,IAAI;YAExC,UAAU,QAAQ,KAAK,QAAQ,IAAI,GAAG,SAAS,GAAG,IAAI;YAEtD,OAAO,SAAS,UAAU,GAAG,SAAS,GAAG,IAAI;YAE7C,MAAM,SAAS,UAAU,GAAG,IAAI;YAEhC,4BAA4B,SAAS,MAAM,GAAG,SAAS,GAAG,IAAI;YAE9D,YAAY,GAAG,IAAI;;EAozBrB,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;CAAI,CAAC;wBACpE,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,CAAC,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"WSelect.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/Select/WSelect.vue"],"names":[],"mappings":"AA8FA;AAmKA,OAAO,KAAK,EAAC,qBAAqB,EAAE,iBAAiB,EAAE,WAAW,EAAC,MAAM,SAAS,CAAA;AAQlF,QAAA,MAAM,YAAY,GAAK,KAAK,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,SAAS,WAAW,EAAE,kBAAkB,EAAE,eAAe,SAAS,qBAAqB,CAAC,IAAI,CAAC,EACtJ,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,gBAAgB,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAClE;WA8SO,OAAO,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAAC;;;;;;;KAAmC,CAAC,GAAG,CAAC,OAAO,UAAU,SAAS;QAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC5J,CAAC,OAAO,EAAE,OAAO,KAAK,EAAE,gBAAgB;;;;2BArQ5B,MAAM;MAqQ4C,KAAK,IAAI;WACxE,GAAG;;QAjQT,iCAAiC;gBACzB,MAAM,IAAI;QAClB,+CAA+C;mBACpC,MAAM,IAAI;QACrB,0HAA0H;iBACjH,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI;QAC7D,yCAAyC;gBACjC,MAAM,IAAI;QAClB,mCAAmC;iBAC1B,MAAM,IAAI;QACnB,yDAAyD;kBAC/C,MAAM,IAAI;;;YA3ChB,QAAQ,QAAQ,KAAK,QAAQ,IAAI,GAAG,IAAI;YAExC,UAAU,QAAQ,KAAK,QAAQ,IAAI,GAAG,SAAS,GAAG,IAAI;YAEtD,OAAO,SAAS,UAAU,GAAG,SAAS,GAAG,IAAI;YAE7C,MAAM,SAAS,UAAU,GAAG,IAAI;YAEhC,4BAA4B,SAAS,MAAM,GAAG,SAAS,GAAG,IAAI;YAE9D,YAAY,GAAG,IAAI;;EA2RrB,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;CAAI,CAAC;wBACpE,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,CAAC,GAAG,EAAE,CAAC"}
@@ -1,23 +1,8 @@
1
- import { debounce } from "../../utils/utils.js";
2
- import { useIsMobile } from "../../utils/mobile.js";
3
- import { useComponentStates } from "../../utils/useComponentStates.js";
4
- import { ApiError } from "../../utils/api.js";
5
- import WInputSuggest_default from "../Input/WInputSuggest.vue.js";
6
- import SelectOption_default from "./components/SelectOption.vue.js";
7
- import { useScrollSelected } from "./models/useScrollSelected.js";
8
- import SelectOptionPrefix_default from "./components/SelectOptionPrefix.vue.js";
9
- import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, defineComponent, mergeProps, nextTick, normalizeClass, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, toRef, unref, useTemplateRef, watch, withCtx, withModifiers } from "vue";
1
+ import { getDefinedProps, useDeferred } from "./models/useDeferred.js";
2
+ import SelectBase_default from "./components/SelectBase.vue.js";
3
+ import SelectDeferred_default from "./components/SelectDeferred.vue.js";
4
+ import { createBlock, createSlots, defineComponent, guardReactiveProps, mergeProps, normalizeClass, normalizeProps, openBlock, renderSlot, unref, useTemplateRef, withCtx } from "vue";
10
5
  //#region src/components/Select/WSelect.vue?vue&type=script&setup=true&lang.ts
11
- var _hoisted_1 = { role: "listbox" };
12
- var _hoisted_2 = {
13
- key: 1,
14
- class: "text-description w-option w-option-padding-y flex items-center"
15
- };
16
- var _hoisted_3 = {
17
- key: 1,
18
- class: "w-select-option first:pt---w-select-option-padding last:pb---w-select-option-padding text-description"
19
- };
20
- var _hoisted_4 = { class: "w-option flex cursor-default select-none items-center" };
21
6
  var WSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
22
7
  inheritAttrs: false,
23
8
  __name: "WSelect",
@@ -38,6 +23,8 @@ var WSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
38
23
  lazy: { type: Boolean },
39
24
  placeholderEmpty: {},
40
25
  cursorSelected: { type: Boolean },
26
+ previewData: {},
27
+ deferred: { type: Boolean },
41
28
  mobileTitle: {},
42
29
  persist: { type: Boolean },
43
30
  closeOnClear: { type: Boolean },
@@ -119,356 +106,76 @@ var WSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
119
106
  "update:query-options-error",
120
107
  "init-model"
121
108
  ],
122
- setup(__props, { expose: __expose, emit: __emit }) {
109
+ setup(__props, { expose: __expose }) {
123
110
  const props = __props;
124
- const emit = __emit;
125
- const { isReadonly, isDisabled } = useComponentStates(props);
126
- const { isMobile } = useIsMobile();
127
- const isOpen = ref(false);
128
- const optionRef = useTemplateRef("option");
129
- const inputRef = useTemplateRef("input");
130
- const cursor = ref(0);
131
- const isCursorLocked = ref(false);
132
- const search = ref("");
133
- const { isScrollSelected, takeSelected } = useScrollSelected(() => isOpen.value, () => search.value);
134
- const isModelValueSearch = computed(() => !!search.value && props.modelValue?.includes(search.value));
135
- const searchPrepared = computed(() => isModelValueSearch.value ? "" : search.value.trim().toLocaleLowerCase());
136
- const queryEnabled = computed(() => props.lazy ? isOpen.value : true);
137
- const { data, isFetching, error: queryError } = props.useQueryFnOptions ? props.useQueryFnOptions(toRef(() => props.queryParamsOptions), { enabled: queryEnabled }) : {
138
- data: toRef(props, "options"),
139
- isFetching: ref(false),
140
- error: ref(void 0)
141
- };
142
- const createdOptions = ref([]);
143
- const optionsPrepared = computed(() => !data.value || isFetching.value ? [] : props.filterOptions ? data.value.filter((option) => props.filterOptions?.(option) ?? true) : data.value);
144
- const optionsWithCreated = computed(() => {
145
- if (!props.createdData) {
146
- if (!createdOptions.value.length) return optionsPrepared.value;
147
- else return [...optionsPrepared.value, ...createdOptions.value].filter((option, index, array) => array.findIndex((item) => props.valueGetter(item) === props.valueGetter(option)) === index);
148
- }
111
+ const selectComponentRef = useTemplateRef("selectComponent");
112
+ const { isDeferred, deferredField, activate, focus } = useDeferred(props, () => selectComponentRef.value?.focus());
113
+ const getOption = (value) => {
149
114
  return [
150
- ...optionsPrepared.value,
115
+ ...props.options ?? [],
151
116
  ...props.createdData ?? [],
152
- ...createdOptions.value
153
- ].filter((option, index, array) => array.findIndex((item) => props.valueGetter(item) === props.valueGetter(option)) === index);
154
- });
155
- const optionsFiltered = computed(() => searchPrepared.value === "" ? optionsWithCreated.value : optionsWithCreated.value.filter((option) => props.searchFn(option, searchPrepared.value)));
156
- const lastIndex = computed(() => props.createOption ? optionsFiltered.value.length : optionsFiltered.value.length - 1);
157
- const focused = ref(false);
158
- const loadingOptionIndex = ref(null);
159
- const loadingCreate = ref(false);
160
- const isDisabledComputed = computed(() => props.loading || isReadonly.value || isDisabled.value);
161
- const hasCreateOption = computed(() => props.createOption && !isFetching.value && (!optionsFiltered.value.some((option) => props.valueGetter(option) === search.value) || isModelValueSearch.value));
162
- const close = () => {
163
- if (props.searchModel && focused.value && !isModelValueSearch.value) {
164
- const optionExact = optionsFiltered.value.find((option) => props.valueGetter(option) === search.value);
165
- if (optionExact) select(props.valueGetter(optionExact), optionExact);
166
- else if (search.value && !loadingCreate.value) create(search.value);
167
- else if (props.modelValue?.length) {
168
- const last = props.modelValue[props.modelValue.length - 1];
169
- unselect(last, optionsWithCreated.value.find((option) => props.valueGetter(option) === last));
170
- }
171
- }
172
- isOpen.value = false;
173
- focused.value = false;
174
- search.value = "";
175
- };
176
- const setLoadingOptionIndex = (value) => {
177
- if (isDisabledComputed.value) return;
178
- loadingOptionIndex.value = value;
179
- };
180
- const unlockCursor = debounce(() => {
181
- isCursorLocked.value = false;
182
- }, 50);
183
- const lockCursor = () => {
184
- isCursorLocked.value = true;
185
- unlockCursor();
186
- };
187
- const setCursor = (value) => {
188
- if (isCursorLocked.value) return;
189
- cursor.value = value;
190
- };
191
- const cursorUp = () => {
192
- if (isDisabledComputed.value) return;
193
- lockCursor();
194
- cursor.value = !optionsFiltered.value.length ? 0 : cursor.value < 1 ? lastIndex.value : cursor.value - 1;
195
- };
196
- const cursorDown = () => {
197
- if (isDisabledComputed.value) return;
198
- lockCursor();
199
- cursor.value = !optionsFiltered.value.length ? 0 : cursor.value >= lastIndex.value ? 0 : cursor.value + 1;
200
- };
201
- const selectCursor = () => {
202
- if (isDisabledComputed.value) return;
203
- if (cursor.value === optionsFiltered.value.length) {
204
- if (search.value && props.createOption) create(search.value);
205
- return;
206
- }
207
- const option = cursor.value !== -1 ? optionsFiltered.value[cursor.value] : void 0;
208
- if (!(option ? props.valueGetter(option) : void 0)) return;
209
- setLoadingOptionIndex(cursor.value);
210
- optionRef.value?.forEach((item) => item?.toggleCursor());
211
- };
212
- const scrollToSelected = (index, scroll) => {
213
- if (takeSelected(scroll) && props.cursorSelected) cursor.value = index;
214
- };
215
- let deletePressTimeout = null;
216
- const captureDoubleDelete = () => {
217
- if (!props.modelValue?.length || search.value.length) return;
218
- if (deletePressTimeout) {
219
- const last = props.modelValue[props.modelValue.length - 1];
220
- unselect(last, optionsWithCreated.value.find((option) => props.valueGetter(option) === last));
221
- clearTimeout(deletePressTimeout);
222
- deletePressTimeout = null;
223
- } else deletePressTimeout = setTimeout(() => {
224
- deletePressTimeout = null;
225
- }, 500);
226
- };
227
- const select = (item, data) => {
228
- if (isDisabledComputed.value) return;
229
- isScrollSelected.value = false;
230
- emit("select", item, data);
231
- search.value = "";
232
- };
233
- const unselect = (item, data) => {
234
- if (isDisabledComputed.value) return;
235
- isScrollSelected.value = false;
236
- emit("unselect", item, data);
237
- search.value = "";
238
- const index = createdOptions.value.findIndex((option) => props.valueGetter(option) === item);
239
- if (index !== -1) createdOptions.value.splice(index, 1);
240
- };
241
- const create = async (value) => {
242
- if (isDisabledComputed.value) return;
243
- if (!props.createOption) return;
244
- loadingCreate.value = true;
245
- const option = await props.createOption(value);
246
- if (option) {
247
- createdOptions.value.push(option);
248
- setLoadingOptionIndex(optionsFiltered.value.length);
249
- select(props.valueGetter(option), option);
250
- search.value = "";
251
- }
252
- loadingCreate.value = false;
117
+ ...props.previewData ?? []
118
+ ].find((option) => props.valueGetter(option) === value);
253
119
  };
254
- const focus = () => {
255
- inputRef.value?.focus();
256
- };
257
- const blur = () => {
258
- focused.value = false;
259
- inputRef.value?.blur();
260
- };
261
- const closeMenu = () => {
262
- inputRef.value?.close();
263
- };
264
- const setSearch = (value) => {
265
- search.value = value;
266
- };
267
- watch(isModelValueSearch, async (value) => {
268
- if (!value) return;
269
- await nextTick();
270
- const index = optionsFiltered.value.findIndex((item) => props.valueGetter(item) === search.value);
271
- if (index !== -1) {
272
- cursor.value = index;
273
- optionRef.value?.find((item) => item?.index === index)?.scrollIntoView();
274
- }
275
- });
276
- if (props.useQueryFnDefault) {
277
- const { data: defaultData } = props.useQueryFnDefault(void 0, { enabled: computed(() => !props.disabled) });
278
- watch(defaultData, (value) => {
279
- if (value && props.modelValue?.length === 0) {
280
- select(props.valueGetter(value), value);
281
- emit("init-model");
282
- }
283
- }, { immediate: true });
284
- }
285
- if (props.useFirstDefault) watch(data, (value) => {
286
- if (value && props.modelValue?.length === 0 && value[0]) {
287
- select(props.valueGetter(value[0]), value[0]);
288
- emit("init-model");
289
- }
290
- }, { immediate: true });
291
- watch(() => props.modelValue, async (value, oldValue) => {
292
- await nextTick();
293
- if (props.seamless) inputRef.value?.scrollToInput();
294
- if (!createdOptions.value.length || !oldValue || !value) return;
295
- for (const valueItem of oldValue.filter((item) => !value.includes(item))) {
296
- const index = createdOptions.value.findIndex((option) => props.valueGetter(option) === valueItem);
297
- if (index !== -1) createdOptions.value.splice(index, 1);
298
- }
299
- });
300
- watch(queryError, (error) => {
301
- if (error instanceof ApiError && error.response?.data?.detail) emit("update:query-options-error", error.response.data.detail);
302
- else emit("update:query-options-error", void 0);
303
- }, { immediate: true });
304
- watch(() => optionsFiltered.value.length, (length) => {
305
- if (length < cursor.value) cursor.value = length;
306
- });
307
120
  __expose({
308
121
  focus,
309
- blur,
310
- close: closeMenu,
311
- setSearch
122
+ blur: () => selectComponentRef.value?.blur(),
123
+ close: () => selectComponentRef.value?.close(),
124
+ setSearch: (value) => selectComponentRef.value?.setSearch(value)
312
125
  });
313
126
  return (_ctx, _cache) => {
314
- return openBlock(), createBlock(WInputSuggest_default, mergeProps({ ref: "input" }, {
315
- ...props,
316
- modelValue: search.value,
317
- placeholder: !focused.value && !__props.modelValue?.length ? __props.placeholderEmpty ?? __props.placeholder : __props.placeholder,
318
- loading: __props.loading || unref(isFetching) || loadingCreate.value,
319
- hideInput: !__props.modelValue?.length ? __props.hideInput && !isOpen.value : unref(isMobile) ? !focused.value : !isOpen.value,
320
- filterValue: __props.filterValue === void 0 ? __props.modelValue : __props.filterValue
321
- }, {
127
+ return unref(isDeferred) ? (openBlock(), createBlock(SelectDeferred_default, {
128
+ key: 0,
129
+ "model-value": __props.modelValue ?? [],
130
+ "get-option": getOption,
131
+ field: unref(deferredField),
132
+ "option-component": __props.optionComponent,
133
+ "option-component-props": __props.optionComponentProps,
134
+ placeholder: __props.placeholder,
135
+ "placeholder-empty": __props.placeholderEmpty,
136
+ name: __props.name,
137
+ size: __props.size,
138
+ "no-wrap": __props.noWrap,
139
+ "border-class": __props.borderClass,
140
+ "hide-input": __props.hideInput,
141
+ loading: __props.loading,
142
+ class: normalizeClass(_ctx.$attrs.class),
143
+ onActivate: unref(activate)
144
+ }, createSlots({ _: 2 }, [_ctx.$slots.option ? {
145
+ name: "option",
146
+ fn: withCtx((scope) => [renderSlot(_ctx.$slots, "option", normalizeProps(guardReactiveProps(scope)))]),
147
+ key: "0"
148
+ } : void 0, _ctx.$slots.prefix ? {
149
+ name: "chips",
150
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "prefix")]),
151
+ key: "1"
152
+ } : void 0]), 1032, [
153
+ "model-value",
154
+ "field",
155
+ "option-component",
156
+ "option-component-props",
157
+ "placeholder",
158
+ "placeholder-empty",
159
+ "name",
160
+ "size",
161
+ "no-wrap",
162
+ "border-class",
163
+ "hide-input",
164
+ "loading",
165
+ "class",
166
+ "onActivate"
167
+ ])) : (openBlock(), createBlock(SelectBase_default, mergeProps({
168
+ key: 1,
169
+ ref: "selectComponent"
170
+ }, unref(getDefinedProps)(props), {
322
171
  class: _ctx.$attrs.class,
323
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => !__props.loading && !unref(isFetching) && (search.value = $event ?? "")),
324
- "onKeypress:enter": withModifiers(selectCursor, ["stop", "prevent"]),
325
- "onKeypress:up": withModifiers(cursorUp, ["prevent"]),
326
- "onKeypress:down": withModifiers(cursorDown, ["prevent"]),
327
- "onKeypress:delete": captureDoubleDelete,
328
- onOpen: _cache[3] || (_cache[3] = ($event) => isOpen.value = true),
329
- onClose: close,
330
- onFocus: _cache[4] || (_cache[4] = ($event) => {
331
- focused.value = true;
332
- _ctx.$emit("focus", $event);
333
- }),
334
- onBlur: _cache[5] || (_cache[5] = ($event) => {
335
- focused.value = false;
336
- _ctx.$emit("blur", $event);
337
- })
338
- }), createSlots({
339
- prefix: withCtx(({ unclickable }) => [(__props.hidePrefix ? unref(isMobile) ? unclickable || !focused.value : !isOpen.value : true) ? renderSlot(_ctx.$slots, "prefix", {}, () => [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.modelValue, (value, index) => {
340
- return openBlock(), createBlock(SelectOptionPrefix_default, {
341
- key: value,
342
- option: optionsWithCreated.value.find((item) => __props.valueGetter(item) === value),
343
- "option-component": __props.optionComponent,
344
- "option-component-props": __props.optionComponentProps,
345
- index,
346
- loading: __props.loading || unref(isFetching),
347
- disabled: unref(isDisabled),
348
- readonly: unref(isReadonly),
349
- "disable-clear": __props.disableClear || unref(isReadonly) || __props.seamless && !focused.value || __props.modelValue?.length === 0,
350
- search: value,
351
- class: normalizeClass({
352
- "cursor-pointer": !unref(isDisabled) && !unref(isReadonly),
353
- "cursor-not-allowed opacity-50": unref(isDisabled)
354
- }),
355
- onUnselect: ($event) => unselect(value, $event)
356
- }, createSlots({ _: 2 }, [_ctx.$slots.option ? {
357
- name: "option",
358
- fn: withCtx((optionScope) => [renderSlot(_ctx.$slots, "option", mergeProps({ ref_for: true }, optionScope, {
359
- selected: true,
360
- model: true,
361
- index,
362
- skeleton: __props.skeleton ?? false
363
- }))]),
364
- key: "0"
365
- } : void 0]), 1032, [
366
- "option",
367
- "option-component",
368
- "option-component-props",
369
- "index",
370
- "loading",
371
- "disabled",
372
- "readonly",
373
- "disable-clear",
374
- "search",
375
- "class",
376
- "onUnselect"
377
- ]);
378
- }), 128))], void 0, 0) : createCommentVNode("", true)]),
379
- content: withCtx(() => [createElementVNode("div", _hoisted_1, [
380
- renderSlot(_ctx.$slots, "content"),
381
- hasCreateOption.value ? (openBlock(), createBlock(SelectOption_default, {
382
- key: 0,
383
- index: optionsFiltered.value.length,
384
- "is-selected": false,
385
- "is-cursor": cursor.value === optionsFiltered.value.length,
386
- loading: (loadingCreate.value || loadingOptionIndex.value === optionsFiltered.value.length) && __props.loading,
387
- scroll: isCursorLocked.value,
388
- "hide-option-icon": __props.hideOptionIcon,
389
- disabled: !search.value || isModelValueSearch.value,
390
- class: "first:pt---w-select-option-padding last:pb---w-select-option-padding",
391
- onSelect: _cache[0] || (_cache[0] = ($event) => create(search.value)),
392
- onMouseenter: _cache[1] || (_cache[1] = ($event) => setCursor(optionsFiltered.value.length))
393
- }, {
394
- prefix: withCtx(() => [..._cache[6] || (_cache[6] = [createElementVNode("div", { class: "w-option w-option-padding-y flex items-center self-start pr-2" }, " New: ", -1)])]),
395
- default: withCtx(() => [search.value && !isModelValueSearch.value ? renderSlot(_ctx.$slots, "option", {
396
- option: void 0,
397
- search: search.value,
398
- selected: false,
399
- model: false,
400
- index: void 0,
401
- skeleton: false
402
- }, () => [(openBlock(), createBlock(resolveDynamicComponent(__props.optionComponent), mergeProps(__props.optionComponentProps, {
403
- option: null,
404
- search: search.value,
405
- selected: false,
406
- model: false
407
- }), null, 16, ["search"]))], void 0, 0) : (openBlock(), createElementBlock("div", _hoisted_2, " Start typing.. "))]),
408
- _: 3
409
- }, 8, [
410
- "index",
411
- "is-cursor",
412
- "loading",
413
- "scroll",
414
- "hide-option-icon",
415
- "disabled"
416
- ])) : createCommentVNode("", true),
417
- unref(isFetching) || !optionsFiltered.value.length && !isModelValueSearch.value && (!__props.createOption || optionsWithCreated.value.length) ? (openBlock(), createElementBlock("div", _hoisted_3, [createElementVNode("div", _hoisted_4, toDisplayString(unref(isFetching) ? "Loading.." : !search.value && __props.emptyStub ? __props.emptyStub : search.value ? "No match" : "Nothing to show"), 1)])) : createCommentVNode("", true),
418
- (openBlock(true), createElementBlock(Fragment, null, renderList(optionsFiltered.value, (option, index) => {
419
- return openBlock(), createBlock(SelectOption_default, {
420
- key: __props.valueGetter(option),
421
- ref_for: true,
422
- ref: "option",
423
- index,
424
- "is-selected": __props.modelValue?.includes(__props.valueGetter(option)) ?? false,
425
- "is-cursor": index === cursor.value,
426
- loading: loadingOptionIndex.value === index && __props.loading,
427
- scroll: isCursorLocked.value,
428
- "scroll-selected": unref(isScrollSelected),
429
- "hide-option-icon": __props.hideOptionIcon,
430
- class: "first:pt---w-select-option-padding last:pb---w-select-option-padding",
431
- onSelect: ($event) => {
432
- select(__props.valueGetter(option), option);
433
- setLoadingOptionIndex(index);
434
- },
435
- onUnselect: ($event) => {
436
- unselect(__props.valueGetter(option), option);
437
- setLoadingOptionIndex(index);
438
- },
439
- onMouseenter: ($event) => setCursor(index),
440
- "onScroll:selected": ($event) => scrollToSelected(index, $event)
441
- }, {
442
- default: withCtx(({ selected }) => [renderSlot(_ctx.$slots, "option", {
443
- option,
444
- selected,
445
- model: false,
446
- index,
447
- skeleton: false,
448
- search: search.value
449
- }, () => [(openBlock(), createBlock(resolveDynamicComponent(__props.optionComponent), mergeProps({ ref_for: true }, __props.optionComponentProps, {
450
- option,
451
- selected,
452
- model: false
453
- }), null, 16, ["option", "selected"]))])]),
454
- _: 2
455
- }, 1032, [
456
- "index",
457
- "is-selected",
458
- "is-cursor",
459
- "loading",
460
- "scroll",
461
- "scroll-selected",
462
- "hide-option-icon",
463
- "onSelect",
464
- "onUnselect",
465
- "onMouseenter",
466
- "onScroll:selected"
467
- ]);
468
- }), 128))
469
- ])]),
470
- _: 2
471
- }, [
172
+ onSelect: _cache[0] || (_cache[0] = (value, data) => _ctx.$emit("select", value, data)),
173
+ onUnselect: _cache[1] || (_cache[1] = (value, data) => _ctx.$emit("unselect", value, data)),
174
+ onFocus: _cache[2] || (_cache[2] = ($event) => _ctx.$emit("focus", $event)),
175
+ onBlur: _cache[3] || (_cache[3] = ($event) => _ctx.$emit("blur", $event)),
176
+ "onUpdate:queryOptionsError": _cache[4] || (_cache[4] = ($event) => _ctx.$emit("update:query-options-error", $event)),
177
+ onInitModel: _cache[5] || (_cache[5] = ($event) => _ctx.$emit("init-model"))
178
+ }), createSlots({ _: 2 }, [
472
179
  _ctx.$slots.title ? {
473
180
  name: "title",
474
181
  fn: withCtx(() => [renderSlot(_ctx.$slots, "title")]),
@@ -479,12 +186,27 @@ var WSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
479
186
  fn: withCtx(() => [renderSlot(_ctx.$slots, "subtitle")]),
480
187
  key: "1"
481
188
  } : void 0,
189
+ _ctx.$slots.option ? {
190
+ name: "option",
191
+ fn: withCtx((scope) => [renderSlot(_ctx.$slots, "option", normalizeProps(guardReactiveProps(scope)))]),
192
+ key: "2"
193
+ } : void 0,
482
194
  _ctx.$slots.right ? {
483
195
  name: "right",
484
196
  fn: withCtx(() => [renderSlot(_ctx.$slots, "right")]),
485
- key: "2"
197
+ key: "3"
198
+ } : void 0,
199
+ _ctx.$slots.prefix ? {
200
+ name: "prefix",
201
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "prefix")]),
202
+ key: "4"
203
+ } : void 0,
204
+ _ctx.$slots.content ? {
205
+ name: "content",
206
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "content")]),
207
+ key: "5"
486
208
  } : void 0
487
- ]), 1040, ["class"]);
209
+ ]), 1040, ["class"]));
488
210
  };
489
211
  }
490
212
  });
@@ -12,9 +12,9 @@ declare const __VLS_export: <Model extends number | string, Data extends Default
12
12
  } ? P : {});
13
13
  expose: (exposed: import('vue').ShallowUnwrapRef<{
14
14
  focus: () => void;
15
- blur: () => void;
16
- close: () => void;
17
- setSearch: (value: string) => void;
15
+ blur: () => void | undefined;
16
+ close: () => void | undefined;
17
+ setSearch: (value: string) => void | undefined;
18
18
  }>) => void;
19
19
  attrs: any;
20
20
  slots: {
@@ -1 +1 @@
1
- {"version":3,"file":"WSelectAsync.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/Select/WSelectAsync.vue"],"names":[],"mappings":"AAiJA;AA2XA,OAAO,KAAK,EAAC,gBAAgB,EAAE,qBAAqB,EAA8B,iBAAiB,EAAC,MAAM,SAAS,CAAA;AAcnH,QAAA,MAAM,YAAY,GAAK,KAAK,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,SAAS,WAAW,EAAE,WAAW,EAAE,eAAe,SAAS,qBAAqB,CAAC,IAAI,CAAC,EAC/I,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,gBAAgB,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAClE;WAonBO,OAAO,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAAC;;;;;;;KAAmC,CAAC,GAAG,CAAC,OAAO,UAAU,SAAS;QAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC5J,CAAC,OAAO,EAAE,OAAO,KAAK,EAAE,gBAAgB;;;;2BArcvB,MAAM,KAAG,IAAI;MAqcgC,KAAK,IAAI;WACxE,GAAG;;QAxaT,iCAAiC;gBACzB,MAAM,IAAI;QAClB,+CAA+C;mBACpC,MAAM,IAAI;QACrB,yCAAyC;gBACjC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI;QAC9C,0HAA0H;iBACjH,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI;QAC7D,yDAAyD;kBAC/C,MAAM,IAAI;QACpB,mCAAmC;iBAC1B,CAAC,KAAK,EAAE;YAAC,UAAU,EAAE,KAAK,EAAE,CAAA;SAAC,KAAK,IAAI;;;YAtM3C,QAAQ,QAAQ,KAAK,QAAQ,IAAI,GAAG,IAAI;YAExC,UAAU,QAAQ,KAAK,QAAQ,IAAI,GAAG,SAAS,GAAG,IAAI;YAEtD,oBAAoB,SAAS,KAAK,EAAE,GAAG,IAAI;YAE3C,YAAY,GAAG,IAAI;YAEnB,OAAO,SAAS,UAAU,GAAG,SAAS,GAAG,IAAI;YAE7C,MAAM,SAAS,UAAU,GAAG,IAAI;;EA6lBlC,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;CAAI,CAAC;wBACpE,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,CAAC,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"WSelectAsync.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/Select/WSelectAsync.vue"],"names":[],"mappings":"AAwIA;AA2NA,OAAO,KAAK,EAAC,gBAAgB,EAAE,qBAAqB,EAA8B,iBAAiB,EAAC,MAAM,SAAS,CAAA;AASnH,QAAA,MAAM,YAAY,GAAK,KAAK,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,SAAS,WAAW,EAAE,WAAW,EAAE,eAAe,SAAS,qBAAqB,CAAC,IAAI,CAAC,EAC/I,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,gBAAgB,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAClE;WAiYO,OAAO,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAAC;;;;;;;KAAmC,CAAC,GAAG,CAAC,OAAO,UAAU,SAAS;QAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC5J,CAAC,OAAO,EAAE,OAAO,KAAK,EAAE,gBAAgB;;;;2BA3U5B,MAAM;MA2U4C,KAAK,IAAI;WACxE,GAAG;;QAvUT,iCAAiC;gBACzB,MAAM,IAAI;QAClB,+CAA+C;mBACpC,MAAM,IAAI;QACrB,yCAAyC;gBACjC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,IAAI;QAC9C,0HAA0H;iBACjH,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI;QAC7D,yDAAyD;kBAC/C,MAAM,IAAI;QACpB,mCAAmC;iBAC1B,CAAC,KAAK,EAAE;YAAC,UAAU,EAAE,KAAK,EAAE,CAAA;SAAC,KAAK,IAAI;;;YApD3C,QAAQ,QAAQ,KAAK,QAAQ,IAAI,GAAG,IAAI;YAExC,UAAU,QAAQ,KAAK,QAAQ,IAAI,GAAG,SAAS,GAAG,IAAI;YAEtD,oBAAoB,SAAS,KAAK,EAAE,GAAG,IAAI;YAE3C,YAAY,GAAG,IAAI;YAEnB,OAAO,SAAS,UAAU,GAAG,SAAS,GAAG,IAAI;YAE7C,MAAM,SAAS,UAAU,GAAG,IAAI;;EA0WlC,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;CAAI,CAAC;wBACpE,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,CAAC,GAAG,EAAE,CAAC"}