bitboss-ui 2.0.37 → 2.0.38

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 (141) hide show
  1. package/dist/index104.js +1 -1
  2. package/dist/index106.js +5 -5
  3. package/dist/index114.js +1 -1
  4. package/dist/index116.js +5 -5
  5. package/dist/index118.js +1 -1
  6. package/dist/index122.js +1 -1
  7. package/dist/index123.js +1 -1
  8. package/dist/index124.js +1 -1
  9. package/dist/index126.js +1 -1
  10. package/dist/index128.js +2 -2
  11. package/dist/index129.js +1 -1
  12. package/dist/index13.js +1 -1
  13. package/dist/index15.js +3 -3
  14. package/dist/index17.js +2 -2
  15. package/dist/index19.js +14 -14
  16. package/dist/index198.js +116 -2
  17. package/dist/index199.js +2 -116
  18. package/dist/index200.js +3 -126
  19. package/dist/index201.js +35 -5
  20. package/dist/index202.js +6 -123
  21. package/dist/index203.js +7 -19
  22. package/dist/index204.js +8 -16
  23. package/dist/index205.js +156 -14
  24. package/dist/index206.js +84 -2
  25. package/dist/index208.js +2 -35
  26. package/dist/index209.js +4 -174
  27. package/dist/index21.js +15 -15
  28. package/dist/index210.js +2 -6
  29. package/dist/index211.js +3 -43
  30. package/dist/index212.js +128 -0
  31. package/dist/index213.js +5 -13
  32. package/dist/index214.js +123 -5
  33. package/dist/index215.js +17 -367
  34. package/dist/index216.js +16 -2
  35. package/dist/index217.js +16 -4
  36. package/dist/index218.js +2 -8
  37. package/dist/index219.js +2 -158
  38. package/dist/index220.js +174 -84
  39. package/dist/index221.js +45 -0
  40. package/dist/index223.js +13 -27
  41. package/dist/index224.js +5 -3
  42. package/dist/index225.js +366 -246
  43. package/dist/index226.js +2 -52
  44. package/dist/index227.js +16 -42
  45. package/dist/index228.js +105 -4
  46. package/dist/index23.js +5 -5
  47. package/dist/index230.js +100 -3
  48. package/dist/index232.js +2 -3
  49. package/dist/index233.js +3 -2
  50. package/dist/index234.js +19 -2
  51. package/dist/index235.js +27 -18
  52. package/dist/index236.js +244 -101
  53. package/dist/index237.js +54 -0
  54. package/dist/index238.js +40 -96
  55. package/dist/index239.js +7 -0
  56. package/dist/index240.js +49 -2
  57. package/dist/index243.js +431 -3
  58. package/dist/index244.js +88 -8
  59. package/dist/index245.js +4 -23
  60. package/dist/index246.js +200 -9
  61. package/dist/index247.js +3 -6
  62. package/dist/index248.js +12 -16
  63. package/dist/index249.js +9 -4
  64. package/dist/index25.js +1 -1
  65. package/dist/index250.js +9 -281
  66. package/dist/index251.js +17 -6
  67. package/dist/index252.js +3 -2
  68. package/dist/index253.js +9 -2
  69. package/dist/index254.js +23 -2
  70. package/dist/index255.js +6 -2
  71. package/dist/index256.js +16 -2
  72. package/dist/index257.js +7 -124
  73. package/dist/index258.js +219 -426
  74. package/dist/index259.js +281 -3
  75. package/dist/index260.js +8 -0
  76. package/dist/index261.js +2 -7
  77. package/dist/index262.js +2 -22
  78. package/dist/index263.js +4 -0
  79. package/dist/index264.js +2 -3
  80. package/dist/index265.js +2 -12
  81. package/dist/index266.js +124 -7
  82. package/dist/index267.js +3 -9
  83. package/dist/index269.js +6 -435
  84. package/dist/index27.js +3 -3
  85. package/dist/index270.js +21 -126
  86. package/dist/index272.js +436 -2
  87. package/dist/index273.js +127 -2
  88. package/dist/index274.js +3 -2
  89. package/dist/index275.js +3 -2
  90. package/dist/index276.js +211 -2
  91. package/dist/index277.js +28 -2
  92. package/dist/index278.js +2 -28
  93. package/dist/index279.js +2 -22
  94. package/dist/index280.js +4 -0
  95. package/dist/index281.js +2 -89
  96. package/dist/index282.js +2 -224
  97. package/dist/index283.js +2 -3
  98. package/dist/index284.js +22 -3
  99. package/dist/index286.js +2 -79
  100. package/dist/index287.js +68 -0
  101. package/dist/index288.js +5 -66
  102. package/dist/index289.js +15 -5
  103. package/dist/index29.js +2 -2
  104. package/dist/index290.js +79 -2
  105. package/dist/index292.js +4 -4
  106. package/dist/index293.js +4 -59
  107. package/dist/index294.js +58 -14
  108. package/dist/index295.js +10 -34
  109. package/dist/index296.js +34 -46
  110. package/dist/index297.js +46 -6
  111. package/dist/index300.js +6 -10
  112. package/dist/index301.js +1 -1
  113. package/dist/index302.js +1 -1
  114. package/dist/index31.js +2 -2
  115. package/dist/index33.js +3 -3
  116. package/dist/index35.js +13 -13
  117. package/dist/index37.js +4 -4
  118. package/dist/index39.js +2 -2
  119. package/dist/index41.js +2 -2
  120. package/dist/index43.js +6 -6
  121. package/dist/index45.js +2 -2
  122. package/dist/index47.js +2 -2
  123. package/dist/index53.js +1 -1
  124. package/dist/index55.js +1 -1
  125. package/dist/index71.js +3 -3
  126. package/dist/index75.js +2 -2
  127. package/dist/index77.js +1 -1
  128. package/dist/index80.js +2 -2
  129. package/dist/index82.js +1 -1
  130. package/dist/index84.js +3 -3
  131. package/dist/index86.js +1 -1
  132. package/dist/style.css +1 -1
  133. package/package.json +1 -1
  134. package/dist/index207.js +0 -4
  135. package/dist/index222.js +0 -21
  136. package/dist/index229.js +0 -51
  137. package/dist/index231.js +0 -9
  138. package/dist/index268.js +0 -19
  139. package/dist/index271.js +0 -202
  140. package/dist/index285.js +0 -213
  141. package/dist/index291.js +0 -6
package/dist/index226.js CHANGED
@@ -1,54 +1,4 @@
1
- import { defineComponent as p, ref as b, watch as _, computed as m, openBlock as d, createElementBlock as c, normalizeClass as u, createElementVNode as t, createVNode as h, withCtx as f, toDisplayString as o } from "vue";
2
- import k from "./index228.js";
3
- const y = { class: "bb-base-date-picker__year-container" }, v = {
4
- "aria-live": "polite",
5
- class: "bb-base-date-picker__selected-day-label"
6
- }, B = { class: "bb-base-date-picker__weekday" }, D = { class: "bb-base-date-picker__monthday" }, M = { class: "bb-base-date-picker__month-button" }, C = /* @__PURE__ */ p({
7
- __name: "BaseDatePickerHeader",
8
- props: {
9
- cursor: {},
10
- disabled: { type: Boolean },
11
- hidden: { type: Boolean }
12
- },
13
- emits: ["mode:year", "mode:month"],
14
- setup(n) {
15
- const s = n, r = b("top"), l = (e, a) => {
16
- e && a && (r.value = e.isBefore(a) ? "top" : "bottom");
17
- };
18
- _(
19
- () => s.cursor,
20
- (e, a) => {
21
- l(e, a);
22
- }
23
- );
24
- const i = m(() => s.cursor.format("YYYY"));
25
- return (e, a) => (d(), c("div", {
26
- class: u(["bb-base-date-picker__header", { "bb-base-date-picker__header--hidden": e.hidden }])
27
- }, [
28
- t("div", y, [
29
- h(k, {
30
- direction: r.value,
31
- duration: 500,
32
- gap: 30
33
- }, {
34
- default: f(() => [
35
- (d(), c("span", {
36
- key: i.value,
37
- "aria-live": "polite",
38
- class: "bb-base-date-picker__year-button"
39
- }, o(i.value), 1))
40
- ]),
41
- _: 1
42
- }, 8, ["direction"])
43
- ]),
44
- t("div", v, [
45
- t("span", B, o(e.cursor.format("ddd")) + ", ", 1),
46
- t("span", D, o(e.cursor.format("DD")), 1),
47
- t("span", M, o(e.cursor.format("MMMM")), 1)
48
- ])
49
- ], 2));
50
- }
51
- });
1
+ import f from "./index276.js";
52
2
  export {
53
- C as default
3
+ f as default
54
4
  };
package/dist/index227.js CHANGED
@@ -1,46 +1,20 @@
1
- import { defineComponent as _, computed as a, openBlock as o, createElementBlock as c, createElementVNode as p, Fragment as b, renderList as h, createBlock as k, normalizeClass as f, withCtx as y, createTextVNode as x, toDisplayString as B } from "vue";
2
- import C from "./index13.js";
3
- /* empty css */
4
- const M = { class: "bb-base-date-picker__button-menu bb-base-date-picker__month-selector" }, v = { class: "content" }, E = /* @__PURE__ */ _({
5
- __name: "BaseDatePickerMonthSelector",
6
- props: {
7
- cursor: {},
8
- disabled: { type: Boolean }
9
- },
10
- emits: ["update:month"],
11
- setup(l, { emit: d }) {
12
- const s = l, m = d, i = a(() => s.cursor.month()), u = a(
13
- () => new Array(12).fill(0).map((r, t) => {
14
- const n = s.cursor.clone().startOf("year").add(t, "month");
15
- return {
16
- text: n.format("MMMM"),
17
- key: n.unix(),
18
- selected: n.month() === i.value,
19
- handler: () => m("update:month", t)
20
- };
21
- })
1
+ import { isNil as c } from "./index125.js";
2
+ const a = (t, r) => {
3
+ if (!Object.prototype.hasOwnProperty.call(t, r))
4
+ throw new Error(
5
+ `Object ${JSON.stringify(t, null, 2)} has no property named "${r.toString()}"`
22
6
  );
23
- return (r, t) => (o(), c("div", M, [
24
- p("div", v, [
25
- (o(!0), c(b, null, h(u.value, (e) => (o(), k(C, {
26
- key: e.key,
27
- class: f({
28
- content__btn: !0,
29
- "content__btn--selected": e.selected
30
- }),
31
- disabled: r.disabled,
32
- type: "button",
33
- onClick: e.handler
34
- }, {
35
- default: y(() => [
36
- x(B(e.text), 1)
37
- ]),
38
- _: 2
39
- }, 1032, ["class", "disabled", "onClick"]))), 128))
40
- ])
41
- ]));
7
+ }, l = (t) => typeof t == "string" ? t.toLocaleLowerCase() : JSON.stringify(t).toLowerCase(), y = (t, r, s) => {
8
+ const i = s.toLocaleLowerCase();
9
+ for (let e = 0; e < r.length; e++) {
10
+ const n = r[e];
11
+ a(t, n);
12
+ const o = t[n];
13
+ if (c(o)) continue;
14
+ if (l(o).includes(i)) return !0;
42
15
  }
43
- });
16
+ return !1;
17
+ };
44
18
  export {
45
- E as default
19
+ y as matchAnyKey
46
20
  };
package/dist/index228.js CHANGED
@@ -1,7 +1,108 @@
1
- import o from "./index279.js";
1
+ import { defineComponent as y, ref as F, computed as H, watch as N, openBlock as p, createElementBlock as L, Fragment as S, renderList as V, createBlock as A, normalizeClass as O, withModifiers as P, withCtx as $, createTextVNode as z, toDisplayString as D } from "vue";
2
+ import { hash as d } from "./index233.js";
3
+ import { isNil as l } from "./index125.js";
4
+ import E from "./index120.js";
2
5
  /* empty css */
3
- import t from "./index261.js";
4
- const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-8c6b13bd"]]);
6
+ const K = /* @__PURE__ */ y({
7
+ __name: "ChipsBox",
8
+ props: {
9
+ options: {}
10
+ },
11
+ emits: ["option:unselected"],
12
+ setup(f, { expose: v, emit: h }) {
13
+ const t = f, u = h, n = F(null), i = H(() => t.options.some((e) => !e.disabled)), a = (e = 1) => {
14
+ const s = l(n.value) ? -1 : n.value;
15
+ let o = (s + e) % t.options.length;
16
+ for (; t.options[o].disabled && o !== s; )
17
+ o = a(e + 1);
18
+ return o;
19
+ }, x = () => {
20
+ if (!i.value) return;
21
+ const e = a();
22
+ n.value = e;
23
+ }, c = (e = 1) => {
24
+ const s = l(n.value) ? 0 : n.value;
25
+ let o = (s - e + t.options.length) % t.options.length;
26
+ for (; t.options[o].disabled && o !== s; )
27
+ o = c(e + 1);
28
+ return o;
29
+ }, m = async () => {
30
+ if (!i.value) return;
31
+ const e = c();
32
+ n.value = e;
33
+ }, w = () => {
34
+ if (!i.value) return;
35
+ let e = 0;
36
+ for (; t.options[e].disabled; )
37
+ e++;
38
+ n.value = e;
39
+ }, b = () => {
40
+ if (!i.value) return;
41
+ let e = t.options.length - 1;
42
+ for (; t.options[e].disabled && e !== 0; )
43
+ e--;
44
+ n.value = e;
45
+ }, I = () => {
46
+ if (!i.value) return;
47
+ let e = 0;
48
+ for (; !t.options[e].selected && t.options.length !== e; )
49
+ e++;
50
+ n.value = e;
51
+ }, g = () => {
52
+ if (!i.value) return;
53
+ let e = t.options.length - 1;
54
+ for (; t.options[e].selected && e !== 0; )
55
+ e--;
56
+ n.value = e;
57
+ }, _ = (e) => {
58
+ if (!i.value) return;
59
+ const s = t.options.findIndex(
60
+ (o) => o.valueHash === e
61
+ );
62
+ s >= 0 && (n.value = s);
63
+ }, r = () => {
64
+ n.value = null;
65
+ }, k = () => {
66
+ if (l(n.value)) return;
67
+ const e = t.options[n.value];
68
+ e.selected && u("option:unselected", e);
69
+ }, C = () => l(n.value) ? void 0 : t.options[n.value];
70
+ return N(
71
+ () => t.options,
72
+ (e, s) => {
73
+ d(e) !== d(s) && r();
74
+ },
75
+ {
76
+ flush: "post"
77
+ }
78
+ ), v({
79
+ focusNext: x,
80
+ focusPrevious: m,
81
+ focusFirst: w,
82
+ focusFirstSelected: I,
83
+ focusLast: b,
84
+ focusLastSelected: g,
85
+ blur: r,
86
+ confirmOption: k,
87
+ focusByHash: _,
88
+ getHighlighted: C
89
+ }), (e, s) => (p(!0), L(S, null, V(e.options, (o, B) => (p(), A(E, {
90
+ key: o.valueHash,
91
+ class: O({
92
+ "bb-chipsbox-item": !0,
93
+ "bb-chipsbox-item--focused": B === n.value
94
+ }),
95
+ clearable: !0,
96
+ text: o.text,
97
+ "onClick:clear": P((M) => u("option:unselected", o), ["stop"])
98
+ }, {
99
+ default: $(() => [
100
+ z(D(o.text), 1)
101
+ ]),
102
+ _: 2
103
+ }, 1032, ["class", "text", "onClick:clear"]))), 128));
104
+ }
105
+ });
5
106
  export {
6
- m as default
107
+ K as default
7
108
  };
package/dist/index23.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { defineComponent as ae, ref as o, getCurrentInstance as se, computed as m, nextTick as N, useAttrs as ne, onMounted as ie, onBeforeUnmount as F, watch as re, openBlock as _, createBlock as ue, Teleport as de, createElementVNode as a, mergeProps as G, createElementBlock as T, renderSlot as u, createTextVNode as ce, toDisplayString as P, createCommentVNode as z } from "vue";
2
- import { throttle as ve } from "./index230.js";
3
- import { useFocusTrap as fe } from "./index208.js";
2
+ import { throttle as ve } from "./index200.js";
3
+ import { useFocusTrap as fe } from "./index201.js";
4
4
  import { useId as K } from "./index8.js";
5
5
  import { wait as H } from "./index127.js";
6
- import { waitFor as be } from "./index210.js";
7
- import { useModalsState as k } from "./index231.js";
8
- import { useLogger as pe } from "./index218.js";
6
+ import { waitFor as be } from "./index202.js";
7
+ import { useModalsState as k } from "./index203.js";
8
+ import { useLogger as pe } from "./index204.js";
9
9
  const me = { class: "bb-base-dialog-close" }, ge = ["aria-label"], ye = /* @__PURE__ */ a("span", { class: "bb-base-dialog-close__icon" }, [
10
10
  /* @__PURE__ */ a("svg", {
11
11
  "aria-hidden": "true",
package/dist/index230.js CHANGED
@@ -1,5 +1,102 @@
1
- import t from "./index281.js";
2
- const r = t;
1
+ import { defineComponent as F, ref as H, computed as L, watch as N, openBlock as d, createElementBlock as v, Fragment as S, renderList as A, normalizeClass as O, withModifiers as P, toDisplayString as V } from "vue";
2
+ import { hash as f } from "./index233.js";
3
+ import { isNil as i } from "./index125.js";
4
+ const z = ["text", "onClick:clear"], j = /* @__PURE__ */ F({
5
+ __name: "CommaBox",
6
+ props: {
7
+ options: {}
8
+ },
9
+ emits: ["option:unselected"],
10
+ setup(m, { expose: h, emit: x }) {
11
+ const t = m, a = x, n = H(null), l = L(() => t.options.some((e) => !e.disabled)), u = (e = 1) => {
12
+ const s = i(n.value) ? -1 : n.value;
13
+ let o = (s + e) % t.options.length;
14
+ for (; t.options[o].disabled && o !== s; )
15
+ o = u(e + 1);
16
+ return o;
17
+ }, b = () => {
18
+ if (!l.value) return;
19
+ const e = u();
20
+ n.value = e;
21
+ }, c = (e = 1) => {
22
+ const s = i(n.value) ? 0 : n.value;
23
+ let o = (s - e + t.options.length) % t.options.length;
24
+ for (; t.options[o].disabled && o !== s; )
25
+ o = c(e + 1);
26
+ return o;
27
+ }, w = async () => {
28
+ if (!l.value) return;
29
+ const e = c();
30
+ n.value = e;
31
+ }, I = () => {
32
+ if (!l.value) return;
33
+ let e = 0;
34
+ for (; t.options[e].disabled; )
35
+ e++;
36
+ n.value = e;
37
+ }, g = () => {
38
+ if (!l.value) return;
39
+ let e = t.options.length - 1;
40
+ for (; t.options[e].disabled && e !== 0; )
41
+ e--;
42
+ n.value = e;
43
+ }, k = () => {
44
+ if (!l.value) return;
45
+ let e = 0;
46
+ for (; !t.options[e].selected && t.options.length !== e; )
47
+ e++;
48
+ n.value = e;
49
+ }, _ = () => {
50
+ if (!l.value) return;
51
+ let e = t.options.length - 1;
52
+ for (; t.options[e].selected && e !== 0; )
53
+ e--;
54
+ n.value = e;
55
+ }, C = (e) => {
56
+ if (!l.value) return;
57
+ const s = t.options.findIndex(
58
+ (o) => o.valueHash === e
59
+ );
60
+ s >= 0 && (n.value = s);
61
+ }, r = () => {
62
+ n.value = null;
63
+ }, y = () => {
64
+ if (!n.value) return;
65
+ const e = t.options[n.value];
66
+ e.selected && a("option:unselected", e);
67
+ }, B = () => i(n.value) ? void 0 : t.options[n.value];
68
+ return N(
69
+ () => t.options,
70
+ (e, s) => {
71
+ f(e) !== f(s) && r();
72
+ },
73
+ {
74
+ flush: "post"
75
+ }
76
+ ), h({
77
+ focusNext: b,
78
+ focusPrevious: w,
79
+ focusFirst: I,
80
+ focusFirstSelected: k,
81
+ focusLast: g,
82
+ focusLastSelected: _,
83
+ blur: r,
84
+ confirmOption: y,
85
+ focusByHash: C,
86
+ getHighlighted: B
87
+ }), (e, s) => (d(!0), v(S, null, A(e.options, (o, p) => (d(), v("span", {
88
+ key: o.valueHash,
89
+ class: O({
90
+ "bb-commabox-item": !0,
91
+ "bb-commabox-item--focused": p === n.value,
92
+ "bb-commabox-item--has-comma": p !== e.options.length - 1
93
+ }),
94
+ clearable: !0,
95
+ text: o.text,
96
+ "onClick:clear": P((D) => a("option:unselected", o), ["stop"])
97
+ }, V(o.text), 43, z))), 128));
98
+ }
99
+ });
3
100
  export {
4
- r as throttle
101
+ j as default
5
102
  };
package/dist/index232.js CHANGED
@@ -1,5 +1,4 @@
1
- import r from "./index282.js";
2
- const t = r;
1
+ const o = (e) => e[0];
3
2
  export {
4
- t as deburr
3
+ o as head
5
4
  };
package/dist/index233.js CHANGED
@@ -1,4 +1,5 @@
1
- const o = (e) => typeof e == "boolean" ? e : e === "true";
1
+ import { hash as o } from "./index277.js";
2
+ const t = (r, h = "bb") => `${h}${o(r)}`;
2
3
  export {
3
- o as booleanishToBoolean
4
+ t as hash
4
5
  };
package/dist/index234.js CHANGED
@@ -1,4 +1,21 @@
1
- import f from "./index285.js";
1
+ import { getDefaultExportFromCjs as p, commonjsGlobal as s } from "./index260.js";
2
+ import { __module as n } from "./index278.js";
3
+ (function(u, l) {
4
+ (function(c, e) {
5
+ u.exports = e();
6
+ })(s, function() {
7
+ return function(c, e, r) {
8
+ r.updateLocale = function(f, o) {
9
+ var t = r.Ls[f];
10
+ if (t) return (o ? Object.keys(o) : []).forEach(function(a) {
11
+ t[a] = o[a];
12
+ }), t;
13
+ };
14
+ };
15
+ });
16
+ })(n);
17
+ var i = n.exports;
18
+ const x = /* @__PURE__ */ p(i);
2
19
  export {
3
- f as default
20
+ x as default
4
21
  };
package/dist/index235.js CHANGED
@@ -1,20 +1,29 @@
1
- import { isNil as c } from "./index125.js";
2
- const a = (t, r) => {
3
- if (!Object.prototype.hasOwnProperty.call(t, r))
4
- throw new Error(
5
- `Object ${JSON.stringify(t, null, 2)} has no property named "${r.toString()}"`
6
- );
7
- }, l = (t) => typeof t == "string" ? t.toLocaleLowerCase() : JSON.stringify(t).toLowerCase(), y = (t, r, s) => {
8
- const i = s.toLocaleLowerCase();
9
- for (let e = 0; e < r.length; e++) {
10
- const n = r[e];
11
- a(t, n);
12
- const o = t[n];
13
- if (c(o)) continue;
14
- if (l(o).includes(i)) return !0;
15
- }
16
- return !1;
17
- };
1
+ import { getDefaultExportFromCjs as c, commonjsGlobal as k } from "./index260.js";
2
+ import { __module as n } from "./index279.js";
3
+ (function(f, p) {
4
+ (function(r, e) {
5
+ f.exports = e();
6
+ })(k, function() {
7
+ var r = "week", e = "year";
8
+ return function(w, u, a) {
9
+ var o = u.prototype;
10
+ o.week = function(t) {
11
+ if (t === void 0 && (t = null), t !== null) return this.add(7 * (t - this.week()), "day");
12
+ var s = this.$locale().yearStart || 1;
13
+ if (this.month() === 11 && this.date() > 25) {
14
+ var l = a(this).startOf(e).add(1, e).date(s), d = a(this).endOf(r);
15
+ if (l.isBefore(d)) return 1;
16
+ }
17
+ var h = a(this).startOf(e).date(s).startOf(r).subtract(1, "millisecond"), i = this.diff(h, r, !0);
18
+ return i < 0 ? a(this).startOf("week").week() : Math.ceil(i);
19
+ }, o.weeks = function(t) {
20
+ return t === void 0 && (t = null), this.week(t);
21
+ };
22
+ };
23
+ });
24
+ })(n);
25
+ var m = n.exports;
26
+ const x = /* @__PURE__ */ c(m);
18
27
  export {
19
- y as matchAnyKey
28
+ x as default
20
29
  };