@ecan-bi/datav 1.5.90 → 1.5.91

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! @ecan-bi/datav@1.5.90 */
1
+ /*! @ecan-bi/datav@1.5.91 */
2
2
  import { watch, inject, computed, unref, watchEffect, defineComponent, shallowRef, toRefs, onMounted, onUnmounted, h, nextTick, createVNode, resolveComponent, openBlock, createElementBlock, createBlock, renderSlot, withCtx, ref, onBeforeUnmount, normalizeClass as normalizeClass$1, normalizeStyle as normalizeStyle$1, createElementVNode, createCommentVNode, Fragment, renderList, provide, withModifiers, toDisplayString, pushScopeId, popScopeId, Teleport, resolveDynamicComponent, mergeProps, normalizeProps, toHandlers, toRaw, reactive, createTextVNode, useCssVars, createSlots, resolveDirective, withDirectives, vShow, vModelText, getCurrentInstance, onActivated, onDeactivated, isRef, isVNode, Transition, onBeforeUpdate, Comment } from "vue";
3
3
  import { throttle as throttle$2, init, use, registerMap } from "echarts/core";
4
4
  import { addListener, removeListener } from "resize-detector";
@@ -1789,7 +1789,7 @@ let k = !1, D = !1;
1789
1789
  const M = [];
1790
1790
  let E = 0;
1791
1791
  const I = [];
1792
- let V = null, F = 0;
1792
+ let F = null, V = 0;
1793
1793
  const z$1 = Promise.resolve();
1794
1794
  function R(c) {
1795
1795
  M.length && M.includes(c, k && c.allowRecurse ? E + 1 : E) || (c.id == null ? M.push(c) : M.splice(function(u) {
@@ -1830,11 +1830,11 @@ function Y(c) {
1830
1830
  E = 0, M.length = 0, function(f) {
1831
1831
  if (I.length) {
1832
1832
  const d = [...new Set(I)];
1833
- if (I.length = 0, V)
1834
- return void V.push(...d);
1835
- for (V = d, process.env.NODE_ENV !== "production" && (f = f || /* @__PURE__ */ new Map()), V.sort((p, m) => P(p) - P(m)), F = 0; F < V.length; F++)
1836
- process.env.NODE_ENV !== "production" && W(f, V[F]) || V[F]();
1837
- V = null, F = 0;
1833
+ if (I.length = 0, F)
1834
+ return void F.push(...d);
1835
+ for (F = d, process.env.NODE_ENV !== "production" && (f = f || /* @__PURE__ */ new Map()), F.sort((p, m) => P(p) - P(m)), V = 0; V < F.length; V++)
1836
+ process.env.NODE_ENV !== "production" && W(f, F[V]) || F[V]();
1837
+ F = null, V = 0;
1838
1838
  }
1839
1839
  }(c), k = !1, (M.length || I.length) && Y(c);
1840
1840
  }
@@ -1871,7 +1871,7 @@ process.env.NODE_ENV !== "production" && (s().__VUE_HMR_RUNTIME__ = { createReco
1871
1871
  p = () => {
1872
1872
  for (const m of d)
1873
1873
  H.delete(K(m.type));
1874
- }, r(p) ? I.push(...p) : V && V.includes(p, p.allowRecurse ? F + 1 : F) || I.push(p), U();
1874
+ }, r(p) ? I.push(...p) : F && F.includes(p, p.allowRecurse ? V + 1 : V) || I.push(p), U();
1875
1875
  var p;
1876
1876
  }) });
1877
1877
  const B = /* @__PURE__ */ new Map();
@@ -2256,13 +2256,13 @@ function Ie(c) {
2256
2256
  return !(!Ae(c) || (u = c, Ce && Ce in u)) && (_e(c) ? Ee : Ne).test(Te(c));
2257
2257
  var u;
2258
2258
  }
2259
- function Ve(c, u) {
2259
+ function Fe(c, u) {
2260
2260
  var f = function(d, p) {
2261
2261
  return d == null ? void 0 : d[p];
2262
2262
  }(c, u);
2263
2263
  return Ie(f) ? f : void 0;
2264
2264
  }
2265
- var Fe = Ve(fe, "WeakMap"), ze = Object.create, Re = function() {
2265
+ var Ve = Fe(fe, "WeakMap"), ze = Object.create, Re = function() {
2266
2266
  function c() {
2267
2267
  }
2268
2268
  return function(u) {
@@ -2276,7 +2276,7 @@ var Fe = Ve(fe, "WeakMap"), ze = Object.create, Re = function() {
2276
2276
  };
2277
2277
  }(), Ue = function() {
2278
2278
  try {
2279
- var c = Ve(Object, "defineProperty");
2279
+ var c = Fe(Object, "defineProperty");
2280
2280
  return c({}, "", {}), c;
2281
2281
  } catch {
2282
2282
  }
@@ -2355,7 +2355,7 @@ function gt(c) {
2355
2355
  }(c);
2356
2356
  var u;
2357
2357
  }
2358
- var vt = Ve(Object, "create"), xt = Object.prototype.hasOwnProperty, wt = Object.prototype.hasOwnProperty;
2358
+ var vt = Fe(Object, "create"), xt = Object.prototype.hasOwnProperty, wt = Object.prototype.hasOwnProperty;
2359
2359
  function St(c) {
2360
2360
  var u = -1, f = c == null ? 0 : c.length;
2361
2361
  for (this.clear(); ++u < f; ) {
@@ -2410,7 +2410,7 @@ jt.prototype.clear = function() {
2410
2410
  var f = this.__data__, d = At(f, c);
2411
2411
  return d < 0 ? (++this.size, f.push([c, u])) : f[d][1] = u, this;
2412
2412
  };
2413
- var Ot = Ve(fe, "Map");
2413
+ var Ot = Fe(fe, "Map");
2414
2414
  function Ct(c, u) {
2415
2415
  var f, d, p = c.__data__;
2416
2416
  return ((d = typeof (f = u)) == "string" || d == "number" || d == "symbol" || d == "boolean" ? f !== "__proto__" : f === null) ? p[typeof u == "string" ? "string" : "hash"] : p.map;
@@ -2482,15 +2482,15 @@ function Mt(c) {
2482
2482
  }(p, d(u));
2483
2483
  }(c, gt, Dt);
2484
2484
  }
2485
- var Et = Ve(fe, "DataView"), It = Ve(fe, "Promise"), Vt = Ve(fe, "Set"), Ft = "[object Map]", zt = "[object Promise]", Rt = "[object Set]", Ut = "[object WeakMap]", Pt = "[object DataView]", Gt = Te(Et), Yt = Te(Ot), Wt = Te(It), Ht = Te(Vt), Bt = Te(Fe), Kt = xe;
2486
- (Et && Kt(new Et(new ArrayBuffer(1))) != Pt || Ot && Kt(new Ot()) != Ft || It && Kt(It.resolve()) != zt || Vt && Kt(new Vt()) != Rt || Fe && Kt(new Fe()) != Ut) && (Kt = function(c) {
2485
+ var Et = Fe(fe, "DataView"), It = Fe(fe, "Promise"), Ft = Fe(fe, "Set"), Vt = "[object Map]", zt = "[object Promise]", Rt = "[object Set]", Ut = "[object WeakMap]", Pt = "[object DataView]", Gt = Te(Et), Yt = Te(Ot), Wt = Te(It), Ht = Te(Ft), Bt = Te(Ve), Kt = xe;
2486
+ (Et && Kt(new Et(new ArrayBuffer(1))) != Pt || Ot && Kt(new Ot()) != Vt || It && Kt(It.resolve()) != zt || Ft && Kt(new Ft()) != Rt || Ve && Kt(new Ve()) != Ut) && (Kt = function(c) {
2487
2487
  var u = xe(c), f = u == "[object Object]" ? c.constructor : void 0, d = f ? Te(f) : "";
2488
2488
  if (d)
2489
2489
  switch (d) {
2490
2490
  case Gt:
2491
2491
  return Pt;
2492
2492
  case Yt:
2493
- return Ft;
2493
+ return Vt;
2494
2494
  case Wt:
2495
2495
  return zt;
2496
2496
  case Ht:
@@ -2923,7 +2923,7 @@ const Dn = (c) => {
2923
2923
  const Sr = ar.filter((yr) => yr.globalCondition), Ar = ar.filter((yr) => !yr.globalCondition);
2924
2924
  (Sr == null ? void 0 : Sr.length) > 1 && (ar = [{ join: "&&", conditions: Sr }, ...Ar]);
2925
2925
  }
2926
- ar != null && ar.length && (ar = On(ar, "1")), Bn == null && (Bn = yn(gn, ["table", "card"]) || yn(gn, ["list", "circulate"]) && (qn == null ? void 0 : qn.length) > 1 ? "1" : yn(gn, ["select", "checkbox", "radio"]) ? "3" : yn(gn, ["indexPanel"]) ? "4" : "2"), yn(gn, ["indexPanel"]) && (re = "3");
2926
+ ar != null && ar.length && (ar = On(ar, "1")), Bn == null && (Bn = yn(gn, ["table", "card"]) || yn(gn, ["list", "circulate"]) && (qn == null ? void 0 : qn.length) > 1 ? "1" : yn(gn, ["select", "checkbox", "radio", "treeSelect"]) ? "3" : yn(gn, ["indexPanel"]) ? "4" : "2"), yn(gn, ["indexPanel"]) && (re = "3");
2927
2927
  const lr = [];
2928
2928
  let ur, Qn = "";
2929
2929
  if (Array.isArray(qn) && qn.length > 0 && (!["ecanList", "ecanCirculate"].includes(gn) || (qn == null ? void 0 : qn.length) === 1)) {
@@ -3085,7 +3085,7 @@ const Dn = (c) => {
3085
3085
  return;
3086
3086
  Ar.parentItemCodes = yr.itemCodes;
3087
3087
  }
3088
- gn === "ecanDataSelect" && (Ar.indicatorList = cr.filter((yr) => yr.show)), Rn === "EDV_DATA_SET" && (Ar.edvDataSetId = or), Hn != null && Hn.sort && (Ar.sort = Hn.sort), wr = Object.assign({ url: "/diagram/formData", source: Rn, dataViewId: j, plugin: "4", layer: Bn, chartType: "normalSelect", rangeIndexTypeGuid: Qn, type: gn === "ecanDataSelect" ? "normalSelectData" : "normalSelect", labelField: Un.labelField, valueField: Un.valueField, sqlConditions: ar, idxLibMode: "WITH_DATE_DIM_TABLE", dataSourceId: Wn, keyName: c.keyName }, Ar);
3088
+ gn === "ecanDataSelect" && (Ar.indicatorList = cr.filter((yr) => yr.show)), Rn === "EDV_DATA_SET" && (Ar.edvDataSetId = or), Hn != null && Hn.sort && (Ar.sort = Hn.sort), wr = Object.assign({ url: "/diagram/formData", source: Rn, dataViewId: j, plugin: "4", layer: Bn, chartType: gn === "ecanTreeSelect" ? "treeSelect" : "normalSelect", rangeIndexTypeGuid: Qn, type: gn === "ecanDataSelect" ? "normalSelectData" : "normalSelect", labelField: Un.labelField, valueField: Un.valueField, parentField: Un.parentField, sqlConditions: ar, idxLibMode: "WITH_DATE_DIM_TABLE", dataSourceId: Wn, keyName: c.keyName }, Ar);
3089
3089
  }
3090
3090
  return wr;
3091
3091
  }, In = (c = [], u, f = !1) => {
@@ -3118,7 +3118,7 @@ const Dn = (c) => {
3118
3118
  for (const [gn, w] of g)
3119
3119
  x.push({ name: gn, data: w });
3120
3120
  return { dimensions: b, dataset: x };
3121
- }, Vn = (c, u) => {
3121
+ }, Fn = (c, u) => {
3122
3122
  let { name: f = "name", value: d = "value", type: p = "type" } = u || {};
3123
3123
  f = f == null ? void 0 : f.trim(), d = d == null ? void 0 : d.trim(), p = p == null ? void 0 : p.trim();
3124
3124
  const m = /* @__PURE__ */ new Map(), g = c.length;
@@ -3139,7 +3139,7 @@ const Dn = (c) => {
3139
3139
  else
3140
3140
  v.push(...x.map((gn) => gn.name));
3141
3141
  return { dimensions: v, dataset: y };
3142
- }, Fn = (c, u) => {
3142
+ }, Vn = (c, u) => {
3143
3143
  var f;
3144
3144
  if (c == null)
3145
3145
  return u;
@@ -9231,7 +9231,7 @@ const handleFormatter = (c) => c.replace(/\\n/g, `
9231
9231
  }, formatDecimals = (c, u = 2) => {
9232
9232
  const f = c + "", d = parseFloat(f);
9233
9233
  return isNaN(d) ? c : d.toFixed(u);
9234
- }, formatCustom = (c, u) => Fn(u, c), getFixedValueDatas = (c) => {
9234
+ }, formatCustom = (c, u) => Vn(u, c), getFixedValueDatas = (c) => {
9235
9235
  const {
9236
9236
  leftAxisList: u = [],
9237
9237
  rightAxisList: f = [],
@@ -10988,7 +10988,7 @@ const _sfc_main$y = defineComponent({
10988
10988
  const { marker: cr, seriesName: pr, name: mr, value: br, data: xr } = or[Qn] || {};
10989
10989
  if (Qn === 0) {
10990
10990
  let gr = mr;
10991
- typeof mr == "string" && mr[0] === "0" && !isNaN(+mr) && (gr = (+mr).toString()), ar += `${Fn(tr, gr)}<br/>`;
10991
+ typeof mr == "string" && mr[0] === "0" && !isNaN(+mr) && (gr = (+mr).toString()), ar += `${Vn(tr, gr)}<br/>`;
10992
10992
  }
10993
10993
  ar += hn(
10994
10994
  lr,
@@ -11044,7 +11044,7 @@ const _sfc_main$y = defineComponent({
11044
11044
  overflow: c.xAxisLabelOverflow,
11045
11045
  fontSize: c.xAxisLabelFontSize,
11046
11046
  formatter(or) {
11047
- return typeof or == "string" && or[0] === "0" && !isNaN(+or) && (or = (+or).toString()), Fn(tr, or);
11047
+ return typeof or == "string" && or[0] === "0" && !isNaN(+or) && (or = (+or).toString()), Vn(tr, or);
11048
11048
  }
11049
11049
  },
11050
11050
  axisLine: {
@@ -11082,7 +11082,7 @@ const _sfc_main$y = defineComponent({
11082
11082
  fontSize: c.yAxisLabelFontSize,
11083
11083
  color: c.yAxisLabelColor,
11084
11084
  formatter(or) {
11085
- return Fn(Zn, or);
11085
+ return Vn(Zn, or);
11086
11086
  }
11087
11087
  },
11088
11088
  axisLine: {
@@ -11154,7 +11154,7 @@ const _sfc_main$y = defineComponent({
11154
11154
  or = In(tr, Qn);
11155
11155
  } else if (c.dataFieldConfigType === "value") {
11156
11156
  const Qn = Zn ? c.valueTypeDataFieldNames : null;
11157
- or = Vn(tr, Qn);
11157
+ or = Fn(tr, Qn);
11158
11158
  }
11159
11159
  gn.value = or.dimensions, Hn.value = or.dataset;
11160
11160
  const fr = or.dataset, ar = [], lr = fr.length;
@@ -21000,11 +21000,11 @@ const _sfc_main$f = defineComponent({
21000
21000
  setGlobalModel: (Un, Jn) => {
21001
21001
  }
21002
21002
  }), Rn = (Un = [], Jn) => {
21003
- const { dataset: Gn } = Vn(Un, Jn);
21003
+ const { dataset: Gn } = Fn(Un, Jn);
21004
21004
  b.value = Gn, Gn != null && Gn.length ? f.value = !1 : f.value = !0, vn();
21005
21005
  }, j = (Un = [], Jn) => {
21006
21006
  var Wn;
21007
- const Gn = Vn(Un, Jn);
21007
+ const Gn = Fn(Un, Jn);
21008
21008
  b.value = Gn.dataset, (Wn = Gn.dataset) != null && Wn.length ? f.value = !1 : f.value = !0, vn();
21009
21009
  };
21010
21010
  watch(() => c.data, (Un) => {
@@ -21510,7 +21510,7 @@ const _sfc_main$e = defineComponent({
21510
21510
  const { marker: Tr, seriesName: wr, name: Sr, value: Ar, data: yr } = mr[kr] || {};
21511
21511
  if (kr === 0) {
21512
21512
  let Er = Sr;
21513
- typeof Sr == "string" && Sr[0] === "0" && !isNaN(+Sr) && (Er = (+Sr).toString()), xr += `${Fn(pr, Er)}<br/>`;
21513
+ typeof Sr == "string" && Sr[0] === "0" && !isNaN(+Sr) && (Er = (+Sr).toString()), xr += `${Vn(pr, Er)}<br/>`;
21514
21514
  }
21515
21515
  xr += hn(
21516
21516
  gr,
@@ -21599,7 +21599,7 @@ const _sfc_main$e = defineComponent({
21599
21599
  overflow: c.xAxisLabelOverflow,
21600
21600
  fontSize: c.xAxisLabelFontSize,
21601
21601
  formatter(mr) {
21602
- return typeof mr == "string" && mr[0] === "0" && !isNaN(+mr) && (mr = (+mr).toString()), Fn(pr, mr);
21602
+ return typeof mr == "string" && mr[0] === "0" && !isNaN(+mr) && (mr = (+mr).toString()), Vn(pr, mr);
21603
21603
  }
21604
21604
  },
21605
21605
  axisLine: {
@@ -21645,7 +21645,7 @@ const _sfc_main$e = defineComponent({
21645
21645
  width: c.yAxisLabelWidth,
21646
21646
  overflow: c.yAxisLabelOverflow,
21647
21647
  formatter(mr) {
21648
- return Fn(cr, mr);
21648
+ return Vn(cr, mr);
21649
21649
  }
21650
21650
  },
21651
21651
  axisLine: {
@@ -21674,7 +21674,7 @@ const _sfc_main$e = defineComponent({
21674
21674
  mr = In(cr, vr);
21675
21675
  } else if (c.dataFieldConfigType === "value") {
21676
21676
  const vr = pr ? c.valueTypeDataFieldNames : null;
21677
- mr = Vn(cr, vr);
21677
+ mr = Fn(cr, vr);
21678
21678
  }
21679
21679
  if (vn.value = mr.dataset, (br = unref(vn)) != null && br.length) {
21680
21680
  for (const vr of unref(vn))
@@ -22281,7 +22281,7 @@ const _sfc_main$d = defineComponent({
22281
22281
  width: c.xAxisLabelWidth,
22282
22282
  overflow: c.xAxisLabelOverflow,
22283
22283
  formatter(Qn) {
22284
- return typeof Qn == "string" && Qn[0] === "0" && !isNaN(+Qn) && (Qn = (+Qn).toString()), Fn(lr, Qn);
22284
+ return typeof Qn == "string" && Qn[0] === "0" && !isNaN(+Qn) && (Qn = (+Qn).toString()), Vn(lr, Qn);
22285
22285
  }
22286
22286
  },
22287
22287
  axisLine: {
@@ -22326,7 +22326,7 @@ const _sfc_main$d = defineComponent({
22326
22326
  fontSize: c.yAxisLabelFontSize,
22327
22327
  color: c.yAxisLabelColor,
22328
22328
  formatter(Qn) {
22329
- return Fn(ur, Qn);
22329
+ return Vn(ur, Qn);
22330
22330
  }
22331
22331
  },
22332
22332
  axisLine: {
@@ -22944,7 +22944,7 @@ const _sfc_main$b = defineComponent({
22944
22944
  const yr = wr[Ar], { tooltipFormatter: Er } = yr || {}, { marker: Pr, seriesName: Dr, name: Ir, value: Zr, data: zr } = gr[Ar] || {};
22945
22945
  if (Ar === 0) {
22946
22946
  let Ur = Ir;
22947
- typeof Ir == "string" && Ir[0] === "0" && !isNaN(+Ir) && (Ur = (+Ir).toString()), kr += `${Fn(c.xAxisLabelFormatter, Ur)}<br/>`;
22947
+ typeof Ir == "string" && Ir[0] === "0" && !isNaN(+Ir) && (Ur = (+Ir).toString()), kr += `${Vn(c.xAxisLabelFormatter, Ur)}<br/>`;
22948
22948
  }
22949
22949
  kr += hn(
22950
22950
  // 如果系列有提示框组件就使用自定义,没有就用默认的
@@ -23005,7 +23005,7 @@ const _sfc_main$b = defineComponent({
23005
23005
  overflow: c.xAxisLabelOverflow,
23006
23006
  fontSize: c.xAxisLabelFontSize,
23007
23007
  formatter(gr) {
23008
- return typeof gr == "string" && gr[0] === "0" && !isNaN(+gr) && (gr = (+gr).toString()), Fn(c.xAxisLabelFormatter, gr);
23008
+ return typeof gr == "string" && gr[0] === "0" && !isNaN(+gr) && (gr = (+gr).toString()), Vn(c.xAxisLabelFormatter, gr);
23009
23009
  }
23010
23010
  },
23011
23011
  axisLine: {
@@ -23046,7 +23046,7 @@ const _sfc_main$b = defineComponent({
23046
23046
  kr = In(gr, Sr, !0);
23047
23047
  } else if (c.dataFieldConfigType === "value") {
23048
23048
  const Sr = vr ? c.valueTypeDataFieldNames : null;
23049
- kr = Vn(gr, Sr);
23049
+ kr = Fn(gr, Sr);
23050
23050
  }
23051
23051
  j.value = kr.dimensions;
23052
23052
  const Tr = kr.dataset;
@@ -23246,7 +23246,7 @@ const _sfc_main$b = defineComponent({
23246
23246
  color: c.yAxisLabelColor,
23247
23247
  formatter(Sr) {
23248
23248
  let Ar = Sr;
23249
- return wr && (Ar = (+Sr / wr).toString()), Fn(vr.axisLabelFormatter, Ar);
23249
+ return wr && (Ar = (+Sr / wr).toString()), Vn(vr.axisLabelFormatter, Ar);
23250
23250
  }
23251
23251
  },
23252
23252
  axisLine: {
@@ -23824,7 +23824,7 @@ const _sfc_main$a = defineComponent({
23824
23824
  Wn = In(Jn, Zn);
23825
23825
  } else if (c.dataFieldConfigType === "value") {
23826
23826
  const Zn = Gn ? c.valueTypeDataFieldNames : null;
23827
- Wn = Vn(Jn, Zn);
23827
+ Wn = Fn(Jn, Zn);
23828
23828
  }
23829
23829
  b.value = Wn.dimensions, w.value = Wn.dataset, (tr = Wn.dataset) != null && tr.length ? f.value = !1 : f.value = !0;
23830
23830
  }, zn = (Jn = [], Gn, Wn = !1) => {
@@ -34979,7 +34979,7 @@ const _sfc_main$1 = defineComponent({
34979
34979
  const { marker: Qn, seriesName: cr, name: pr, value: mr, data: br } = Zn[ur] || {};
34980
34980
  if (ur === 0) {
34981
34981
  let xr = pr;
34982
- typeof pr == "string" && pr[0] === "0" && !isNaN(+pr) && (xr = (+pr).toString()), fr += `${Fn(Wn, xr)}<br/>`;
34982
+ typeof pr == "string" && pr[0] === "0" && !isNaN(+pr) && (xr = (+pr).toString()), fr += `${Vn(Wn, xr)}<br/>`;
34983
34983
  }
34984
34984
  fr += hn(
34985
34985
  ar,
@@ -35025,7 +35025,7 @@ const _sfc_main$1 = defineComponent({
35025
35025
  overflow: c.xAxisLabelOverflow,
35026
35026
  fontSize: c.xAxisLabelFontSize,
35027
35027
  formatter(Zn) {
35028
- return typeof Zn == "string" && Zn[0] === "0" && !isNaN(+Zn) && (Zn = (+Zn).toString()), Fn(Wn, Zn);
35028
+ return typeof Zn == "string" && Zn[0] === "0" && !isNaN(+Zn) && (Zn = (+Zn).toString()), Vn(Wn, Zn);
35029
35029
  }
35030
35030
  },
35031
35031
  axisLine: {
@@ -35063,7 +35063,7 @@ const _sfc_main$1 = defineComponent({
35063
35063
  fontSize: c.yAxisLabelFontSize,
35064
35064
  color: c.yAxisLabelColor,
35065
35065
  formatter(Zn) {
35066
- return Fn(tr, Zn);
35066
+ return Vn(tr, Zn);
35067
35067
  }
35068
35068
  },
35069
35069
  axisLine: {