@stonecrop/beam 0.2.34 → 0.2.36

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/beam.js CHANGED
@@ -1,194 +1,199 @@
1
- import { defineComponent as d, openBlock as i, createElementBlock as u, createElementVNode as c, renderSlot as _, resolveComponent as w, createBlock as p, withCtx as T, withDirectives as I, vShow as B, ref as g, computed as E, normalizeClass as F, toDisplayString as h, createCommentVNode as y, onMounted as P, onUnmounted as D, Fragment as N, renderList as V, resolveDynamicComponent as M, createVNode as A, createTextVNode as z } from "vue";
2
- const O = { class: "beam__actionfooter" }, U = { class: "footer-action-wrapper" }, j = /* @__PURE__ */ d({
1
+ import { defineComponent as d, openBlock as i, createElementBlock as u, createElementVNode as c, renderSlot as v, resolveComponent as k, createBlock as p, withCtx as w, withDirectives as T, vShow as I, useModel as P, vModelCheckbox as V, mergeModels as M, computed as E, normalizeClass as F, toDisplayString as h, createCommentVNode as y, ref as N, onMounted as D, onUnmounted as $, Fragment as x, renderList as A, resolveDynamicComponent as z, createVNode as O, createTextVNode as U } from "vue";
2
+ const j = { class: "beam__actionfooter" }, H = { class: "footer-action-wrapper" }, Q = /* @__PURE__ */ d({
3
3
  __name: "ActionFooter",
4
4
  emits: ["click"],
5
- setup(s, { emit: r }) {
6
- const o = r, e = () => {
7
- o("click");
5
+ setup(s, { emit: o }) {
6
+ const r = o, e = () => {
7
+ r("click");
8
8
  };
9
- return (t, a) => (i(), u("footer", O, [
10
- c("span", U, [
9
+ return (t, a) => (i(), u("footer", j, [
10
+ c("span", H, [
11
11
  c("button", {
12
12
  class: "footer-action btn",
13
13
  onClick: e
14
14
  }, [
15
- _(t.$slots, "default")
15
+ v(t.$slots, "default")
16
16
  ])
17
17
  ])
18
18
  ]));
19
19
  }
20
- }), x = { class: "beam__modal" }, H = /* @__PURE__ */ d({
20
+ }), q = { class: "beam__modal" }, R = /* @__PURE__ */ d({
21
21
  __name: "BeamModal",
22
22
  props: {
23
23
  showModal: { type: Boolean }
24
24
  },
25
25
  setup(s) {
26
- return (r, o) => {
27
- const e = w("portal");
26
+ return (o, r) => {
27
+ const e = k("portal");
28
28
  return i(), p(e, { to: "beam__modal_outlet" }, {
29
- default: T(() => [
30
- I(c("div", x, [
29
+ default: w(() => [
30
+ T(c("div", q, [
31
31
  c("button", {
32
32
  class: "btn",
33
- onClick: o[0] || (o[0] = (t) => r.$emit("closemodal"))
33
+ onClick: r[0] || (r[0] = (t) => o.$emit("closemodal"))
34
34
  }, "Close Modal"),
35
- _(r.$slots, "default", {
36
- onClosemodal: o[1] || (o[1] = (t) => r.$emit("closemodal")),
37
- onConfirmmodal: o[2] || (o[2] = (t) => r.$emit("confirmmodal"))
35
+ v(o.$slots, "default", {
36
+ onClosemodal: r[1] || (r[1] = (t) => o.$emit("closemodal")),
37
+ onConfirmmodal: r[2] || (r[2] = (t) => o.$emit("confirmmodal"))
38
38
  })
39
39
  ], 512), [
40
- [B, r.showModal]
40
+ [I, o.showModal]
41
41
  ])
42
42
  ]),
43
43
  _: 3
44
44
  });
45
45
  };
46
46
  }
47
- }), Q = /* @__PURE__ */ d({
47
+ }), G = /* @__PURE__ */ d({
48
48
  __name: "BeamModalOutlet",
49
+ emits: ["confirmmodal", "closemodal"],
49
50
  setup(s) {
50
- return (r, o) => {
51
- const e = w("portal-target");
51
+ return (o, r) => {
52
+ const e = k("portal-target");
52
53
  return i(), p(e, { name: "beam__modal_outlet" });
53
54
  };
54
55
  }
55
- }), $ = (s, r) => {
56
- const o = s.__vccOpts || s;
57
- for (const [e, t] of r)
58
- o[e] = t;
59
- return o;
60
- }, R = {}, q = { class: "beam__modal-confirm" };
61
- function G(s, r) {
62
- return i(), u("div", q, [
63
- r[2] || (r[2] = c("h2", null, "Would you like to continue?", -1)),
56
+ }), S = (s, o) => {
57
+ const r = s.__vccOpts || s;
58
+ for (const [e, t] of o)
59
+ r[e] = t;
60
+ return r;
61
+ }, W = {}, Y = { class: "beam__modal-confirm" };
62
+ function J(s, o) {
63
+ return i(), u("div", Y, [
64
+ o[2] || (o[2] = c("h2", null, "Would you like to continue?", -1)),
64
65
  c("button", {
65
66
  class: "btn",
66
- onClick: r[0] || (r[0] = (o) => s.$emit("confirmmodal"))
67
+ onClick: o[0] || (o[0] = (r) => s.$emit("confirmmodal"))
67
68
  }, "Yes"),
68
69
  c("button", {
69
70
  class: "btn",
70
- onClick: r[1] || (r[1] = (o) => s.$emit("closemodal"))
71
+ onClick: o[1] || (o[1] = (r) => s.$emit("closemodal"))
71
72
  }, "No")
72
73
  ]);
73
74
  }
74
- const W = /* @__PURE__ */ $(R, [["render", G]]), Y = { class: "container" }, J = ["checked"], X = /* @__PURE__ */ d({
75
+ const X = /* @__PURE__ */ S(W, [["render", J]]), Z = { class: "container" }, ee = /* @__PURE__ */ d({
75
76
  __name: "ItemCheck",
76
77
  props: {
77
- value: { type: Boolean }
78
+ modelValue: { type: Boolean, default: !1 },
79
+ modelModifiers: {}
78
80
  },
79
- emits: ["input"],
80
- setup(s, { emit: r }) {
81
- const o = r, e = g(s.value), t = () => {
82
- o("input", e.value);
83
- };
84
- return (a, n) => (i(), u("label", Y, [
85
- c("input", {
81
+ emits: ["update:modelValue"],
82
+ setup(s) {
83
+ const o = P(s, "modelValue");
84
+ return (r, e) => (i(), u("label", Z, [
85
+ T(c("input", {
86
86
  type: "checkbox",
87
- checked: a.value,
88
- onInput: t,
87
+ "onUpdate:modelValue": e[0] || (e[0] = (t) => o.value = t),
89
88
  tabindex: "-1"
90
- }, null, 40, J),
91
- n[0] || (n[0] = c("div", {
89
+ }, null, 512), [
90
+ [V, o.value]
91
+ ]),
92
+ e[1] || (e[1] = c("div", {
92
93
  class: "checkmark",
93
94
  tabindex: "0"
94
95
  }, null, -1))
95
96
  ]));
96
97
  }
97
- }), S = /* @__PURE__ */ $(X, [["__scopeId", "data-v-914c0391"]]), Z = { class: "beam__itemcount" }, ee = ["contenteditable"], te = { key: 0 }, K = /* @__PURE__ */ d({
98
+ }), K = /* @__PURE__ */ S(ee, [["__scopeId", "data-v-f44a510e"]]), te = { class: "beam__itemcount" }, ne = ["contenteditable"], ae = { key: 0 }, L = /* @__PURE__ */ d({
98
99
  __name: "ItemCount",
99
- props: {
100
- value: { default: 0 },
100
+ props: /* @__PURE__ */ M({
101
101
  denominator: {},
102
102
  uom: { default: "" },
103
103
  editable: { type: Boolean, default: !0 }
104
- },
105
- emits: ["input"],
106
- setup(s, { emit: r }) {
107
- const o = r, e = g(s.value), t = (n) => {
108
- n.preventDefault(), n.stopPropagation(), e.value = Number(n.target.innerHTML.replace(/[^0-9]/g, "")), o("input", e.value);
109
- }, a = E(() => e.value === s.denominator);
110
- return (n, l) => (i(), u("div", Z, [
104
+ }, {
105
+ modelValue: { required: !0 },
106
+ modelModifiers: {}
107
+ }),
108
+ emits: ["update:modelValue"],
109
+ setup(s) {
110
+ const o = P(s, "modelValue"), r = E(() => o.value === s.denominator), e = (t) => {
111
+ t.preventDefault(), t.stopPropagation();
112
+ const a = Number(t.target.innerHTML) || 0;
113
+ o.value = Math.min(a, s.denominator);
114
+ };
115
+ return (t, a) => (i(), u("div", te, [
111
116
  c("span", {
112
- contenteditable: n.editable,
113
- class: F({ alert: a.value === !1 }),
114
- onInput: t,
115
- onClick: t
116
- }, h(e.value), 43, ee),
117
- c("span", null, "/" + h(n.denominator), 1),
118
- n.uom ? (i(), u("span", te, "  " + h(n.uom), 1)) : y("", !0)
117
+ contenteditable: t.editable,
118
+ class: F({ alert: !r.value }),
119
+ onInput: e,
120
+ onClick: e
121
+ }, h(o.value), 43, ne),
122
+ c("span", null, "/" + h(t.denominator), 1),
123
+ t.uom ? (i(), u("span", ae, "  " + h(t.uom), 1)) : y("", !0)
119
124
  ]));
120
125
  }
121
- }), ne = ["href"], ae = /* @__PURE__ */ d({
126
+ }), oe = ["href"], se = /* @__PURE__ */ d({
122
127
  __name: "ListAnchor",
123
128
  props: {
124
129
  to: { default: "" }
125
130
  },
126
131
  setup(s) {
127
- return (r, o) => (i(), u("a", {
128
- href: r.to,
132
+ return (o, r) => (i(), u("a", {
133
+ href: o.to,
129
134
  class: "beam__listanchor"
130
135
  }, [
131
- _(r.$slots, "default")
132
- ], 8, ne));
136
+ v(o.$slots, "default")
137
+ ], 8, oe));
133
138
  }
134
- }), oe = {
139
+ }), re = {
135
140
  tabindex: "0",
136
141
  class: "beam__listitem"
137
- }, se = { class: "beam__listtext" }, C = /* @__PURE__ */ d({
142
+ }, ie = { class: "beam__listtext" }, C = /* @__PURE__ */ d({
138
143
  __name: "ListItem",
139
144
  props: {
140
145
  item: {}
141
146
  },
142
147
  setup(s) {
143
- const r = g(s.item);
144
- return (o, e) => (i(), u("li", oe, [
145
- c("div", se, [
146
- c("label", null, h(o.item.label), 1),
147
- c("p", null, h(o.item.description), 1)
148
+ const o = N(s.item);
149
+ return (r, e) => (i(), u("li", re, [
150
+ c("div", ie, [
151
+ c("label", null, h(o.value.label), 1),
152
+ c("p", null, h(o.value.description), 1)
148
153
  ]),
149
- o.item.count ? (i(), p(K, {
154
+ o.value.count ? (i(), p(L, {
150
155
  key: 0,
151
- modelValue: r.value.count.count,
152
- "onUpdate:modelValue": e[0] || (e[0] = (t) => r.value.count.count = t),
153
- denominator: o.item.count.of,
154
- uom: o.item.count.uom,
156
+ modelValue: o.value.count.count,
157
+ "onUpdate:modelValue": e[0] || (e[0] = (t) => o.value.count.count = t),
158
+ denominator: o.value.count.of,
159
+ uom: o.value.count.uom,
155
160
  editable: !0
156
161
  }, null, 8, ["modelValue", "denominator", "uom"])) : y("", !0),
157
- o.item.hasOwnProperty("checked") ? (i(), p(S, {
162
+ o.value.hasOwnProperty("checked") ? (i(), p(K, {
158
163
  key: 1,
159
- modelValue: r.value.checked,
160
- "onUpdate:modelValue": e[1] || (e[1] = (t) => r.value.checked = t)
164
+ modelValue: o.value.checked,
165
+ "onUpdate:modelValue": e[1] || (e[1] = (t) => o.value.checked = t)
161
166
  }, null, 8, ["modelValue"])) : y("", !0)
162
167
  ]));
163
168
  }
164
- }), re = { class: "beam__listview" }, ie = /* @__PURE__ */ d({
169
+ }), ce = { class: "beam__listview" }, le = /* @__PURE__ */ d({
165
170
  __name: "ListView",
166
171
  props: {
167
172
  items: {}
168
173
  },
169
174
  emits: ["scrollbottom"],
170
- setup(s, { emit: r }) {
171
- const o = r;
172
- P(() => {
175
+ setup(s, { emit: o }) {
176
+ const r = o;
177
+ D(() => {
173
178
  window.addEventListener("scroll", e);
174
- }), D(() => {
179
+ }), $(() => {
175
180
  window.removeEventListener("scroll", e);
176
181
  });
177
182
  const e = () => {
178
183
  const t = document.documentElement.scrollHeight - window.innerHeight, a = document.documentElement.scrollTop;
179
- t - a <= 2 && o("scrollbottom");
184
+ t - a <= 2 && r("scrollbottom");
180
185
  };
181
- return (t, a) => (i(), u("ul", re, [
182
- (i(!0), u(N, null, V(t.items, (n) => (i(), u("li", {
186
+ return (t, a) => (i(), u("ul", ce, [
187
+ (i(!0), u(x, null, A(t.items, (n) => (i(), u("li", {
183
188
  key: n.label
184
189
  }, [
185
- n.linkComponent ? (i(), p(M(n.linkComponent), {
190
+ n.linkComponent ? (i(), p(z(n.linkComponent), {
186
191
  key: 0,
187
192
  to: n.route,
188
193
  tabindex: "-1"
189
194
  }, {
190
- default: T(() => [
191
- A(C, { item: n }, null, 8, ["item"])
195
+ default: w(() => [
196
+ O(C, { item: n }, null, 8, ["item"])
192
197
  ]),
193
198
  _: 2
194
199
  }, 1032, ["to"])) : (i(), p(C, {
@@ -198,40 +203,40 @@ const W = /* @__PURE__ */ $(R, [["render", G]]), Y = { class: "container" }, J =
198
203
  ]))), 128))
199
204
  ]));
200
205
  }
201
- }), ce = { class: "beam__navbar" }, le = { class: "navbar-action-wrapper" }, ue = /* @__PURE__ */ d({
206
+ }), ue = { class: "beam__navbar" }, de = { class: "navbar-action-wrapper" }, me = /* @__PURE__ */ d({
202
207
  __name: "Navbar",
203
208
  emits: ["click"],
204
- setup(s, { emit: r }) {
205
- const o = r, e = () => {
206
- o("click");
209
+ setup(s, { emit: o }) {
210
+ const r = o, e = () => {
211
+ r("click");
207
212
  };
208
- return (t, a) => (i(), u("nav", ce, [
209
- _(t.$slots, "title", {}, () => [
213
+ return (t, a) => (i(), u("nav", ue, [
214
+ v(t.$slots, "title", {}, () => [
210
215
  a[0] || (a[0] = c("h1", { class: "nav-title" }, "TITLE", -1))
211
216
  ]),
212
- c("div", le, [
217
+ c("div", de, [
213
218
  c("button", {
214
219
  class: "navbar-action btn",
215
220
  onClick: e
216
221
  }, [
217
- _(t.$slots, "navbaraction", {}, () => [
218
- a[1] || (a[1] = z("Action"))
222
+ v(t.$slots, "navbaraction", {}, () => [
223
+ a[1] || (a[1] = U("Action"))
219
224
  ])
220
225
  ])
221
226
  ])
222
227
  ]));
223
228
  }
224
229
  });
225
- var de = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
226
- function me(s) {
230
+ var fe = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
231
+ function pe(s) {
227
232
  return s && s.__esModule && Object.prototype.hasOwnProperty.call(s, "default") ? s.default : s;
228
233
  }
229
- var L = { exports: {} };
230
- (function(s, r) {
231
- (function(o, e) {
234
+ var B = { exports: {} };
235
+ (function(s, o) {
236
+ (function(r, e) {
232
237
  s.exports = e();
233
- })(de, function() {
234
- var o = {
238
+ })(fe, function() {
239
+ var r = {
235
240
  /**
236
241
  *
237
242
  * @param DomElement oDomElement
@@ -258,7 +263,7 @@ var L = { exports: {} };
258
263
  },
259
264
  // Callback after receiving a value on paste, no matter if it is a valid code or not
260
265
  keyCodeMapper: function(n) {
261
- return o.decodeKeyEvent(n);
266
+ return r.decodeKeyEvent(n);
262
267
  },
263
268
  // Custom function to decode a keydown event into a character. Must return decoded character or NULL if the given event should not be processed.
264
269
  onScanButtonLongPress: function() {
@@ -445,20 +450,20 @@ var L = { exports: {} };
445
450
  * @return boolean
446
451
  */
447
452
  _validateScanCode: function(e, t) {
448
- var a = e.scannerDetectionData, n = a.options, l = a.options.singleScanQty, f = a.vars.firstCharTime, b = a.vars.lastCharTime, m = {}, v;
453
+ var a = e.scannerDetectionData, n = a.options, l = a.options.singleScanQty, f = a.vars.firstCharTime, g = a.vars.lastCharTime, m = {}, _;
449
454
  switch (!0) {
450
455
  case t.length < n.minLength:
451
456
  m = {
452
457
  message: "Receieved code is shorter then minimal length"
453
458
  };
454
459
  break;
455
- case b - f > t.length * n.avgTimeByChar:
460
+ case g - f > t.length * n.avgTimeByChar:
456
461
  m = {
457
462
  message: "Receieved code was not entered in time"
458
463
  };
459
464
  break;
460
465
  default:
461
- return n.onScan.call(e, t, l), v = new CustomEvent(
466
+ return n.onScan.call(e, t, l), _ = new CustomEvent(
462
467
  "scan",
463
468
  {
464
469
  detail: {
@@ -466,12 +471,12 @@ var L = { exports: {} };
466
471
  qty: l
467
472
  }
468
473
  }
469
- ), e.dispatchEvent(v), o._reinitialize(e), !0;
474
+ ), e.dispatchEvent(_), r._reinitialize(e), !0;
470
475
  }
471
- return m.scanCode = t, m.scanDuration = b - f, m.avgTimeByChar = n.avgTimeByChar, m.minLength = n.minLength, n.onScanError.call(e, m), v = new CustomEvent(
476
+ return m.scanCode = t, m.scanDuration = g - f, m.avgTimeByChar = n.avgTimeByChar, m.minLength = n.minLength, n.onScanError.call(e, m), _ = new CustomEvent(
472
477
  "scanError",
473
478
  { detail: m }
474
- ), e.dispatchEvent(v), o._reinitialize(e), !1;
479
+ ), e.dispatchEvent(_), r._reinitialize(e), !1;
475
480
  },
476
481
  /**
477
482
  * @private
@@ -502,8 +507,8 @@ var L = { exports: {} };
502
507
  * @return void
503
508
  */
504
509
  _handleKeyDown: function(e) {
505
- var t = o._getNormalizedKeyNum(e), a = this.scannerDetectionData.options, n = this.scannerDetectionData.vars, l = !1;
506
- if (a.onKeyDetect.call(this, t, e) !== !1 && !o._isFocusOnIgnoredElement(this)) {
510
+ var t = r._getNormalizedKeyNum(e), a = this.scannerDetectionData.options, n = this.scannerDetectionData.vars, l = !1;
511
+ if (a.onKeyDetect.call(this, t, e) !== !1 && !r._isFocusOnIgnoredElement(this)) {
507
512
  if (a.scanButtonKeyCode !== !1 && t == a.scanButtonKeyCode) {
508
513
  n.longPressed || (n.longPressTimer = setTimeout(a.onScanButtonLongPress, a.scanButtonLongPressTime, this), n.longPressed = !0);
509
514
  return;
@@ -522,7 +527,7 @@ var L = { exports: {} };
522
527
  n.accumulatedString += f, a.preventDefault && e.preventDefault(), a.stopPropagation && e.stopImmediatePropagation(), l = !1;
523
528
  break;
524
529
  }
525
- n.firstCharTime || (n.firstCharTime = Date.now()), n.lastCharTime = Date.now(), n.testTimer && clearTimeout(n.testTimer), l ? (o._validateScanCode(this, n.accumulatedString), n.testTimer = !1) : n.testTimer = setTimeout(o._validateScanCode, a.timeBeforeScanTest, this, n.accumulatedString), a.onKeyProcess.call(this, f, e);
530
+ n.firstCharTime || (n.firstCharTime = Date.now()), n.lastCharTime = Date.now(), n.testTimer && clearTimeout(n.testTimer), l ? (r._validateScanCode(this, n.accumulatedString), n.testTimer = !1) : n.testTimer = setTimeout(r._validateScanCode, a.timeBeforeScanTest, this, n.accumulatedString), a.onKeyProcess.call(this, f, e);
526
531
  }
527
532
  },
528
533
  /**
@@ -532,7 +537,7 @@ var L = { exports: {} };
532
537
  */
533
538
  _handlePaste: function(e) {
534
539
  var t = this.scannerDetectionData.options, a = this.scannerDetectionData.vars, n = (event.clipboardData || window.clipboardData).getData("text");
535
- o._isFocusOnIgnoredElement(this) || (e.preventDefault(), t.stopPropagation && e.stopImmediatePropagation(), t.onPaste.call(this, n, event), a.firstCharTime = 0, a.lastCharTime = 0, o._validateScanCode(this, n));
540
+ r._isFocusOnIgnoredElement(this) || (e.preventDefault(), t.stopPropagation && e.stopImmediatePropagation(), t.onPaste.call(this, n, event), a.firstCharTime = 0, a.lastCharTime = 0, r._validateScanCode(this, n));
536
541
  },
537
542
  /**
538
543
  * @private
@@ -540,8 +545,8 @@ var L = { exports: {} };
540
545
  * @return void
541
546
  */
542
547
  _handleKeyUp: function(e) {
543
- if (!o._isFocusOnIgnoredElement(this)) {
544
- var t = o._getNormalizedKeyNum(e);
548
+ if (!r._isFocusOnIgnoredElement(this)) {
549
+ var t = r._getNormalizedKeyNum(e);
545
550
  t == this.scannerDetectionData.options.scanButtonKeyCode && (clearTimeout(this.scannerDetectionData.vars.longPressTimer), this.scannerDetectionData.vars.longPressed = !1);
546
551
  }
547
552
  },
@@ -564,41 +569,41 @@ var L = { exports: {} };
564
569
  return e.scannerDetectionData !== void 0;
565
570
  }
566
571
  };
567
- return o;
572
+ return r;
568
573
  });
569
- })(L);
570
- var fe = L.exports;
571
- const k = /* @__PURE__ */ me(fe), pe = { id: "scan_input" }, he = /* @__PURE__ */ d({
574
+ })(B);
575
+ var he = B.exports;
576
+ const b = /* @__PURE__ */ pe(he), ve = { id: "scan_input" }, _e = /* @__PURE__ */ d({
572
577
  __name: "ScanInput",
573
578
  props: {
574
579
  scanHandler: { type: Function }
575
580
  },
576
581
  emits: ["scanInstance"],
577
- setup(s, { emit: r }) {
578
- const o = r, e = s;
579
- return P(() => {
580
- const t = k.attachTo(window, { onScan: e.scanHandler });
581
- o("scanInstance", t);
582
- }), D(() => {
583
- k.detachFrom(window);
584
- }), (t, a) => (i(), u("div", pe));
582
+ setup(s, { emit: o }) {
583
+ const r = o, e = s;
584
+ return D(() => {
585
+ const t = b.attachTo(window, { onScan: e.scanHandler });
586
+ r("scanInstance", t);
587
+ }), $(() => {
588
+ b.detachFrom(window);
589
+ }), (t, a) => (i(), u("div", ve));
585
590
  }
586
591
  });
587
- function ve(s) {
588
- s.component("ActionFooter", j), s.component("BeamModal", H), s.component("BeamModalOutlet", Q), s.component("Confirm", W), s.component("ItemCheck", S), s.component("ItemCount", K), s.component("ListAnchor", ae), s.component("ListItem", C), s.component("ListView", ie), s.component("Navbar", ue), s.component("ScanInput", he);
592
+ function Ce(s) {
593
+ s.component("ActionFooter", Q), s.component("BeamModal", R), s.component("BeamModalOutlet", G), s.component("Confirm", X), s.component("ItemCheck", K), s.component("ItemCount", L), s.component("ListAnchor", se), s.component("ListItem", C), s.component("ListView", le), s.component("Navbar", me), s.component("ScanInput", _e);
589
594
  }
590
595
  export {
591
- j as ActionFooter,
592
- H as BeamModal,
593
- Q as BeamModalOutlet,
594
- W as Confirm,
595
- S as ItemCheck,
596
- K as ItemCount,
597
- ae as ListAnchor,
596
+ Q as ActionFooter,
597
+ R as BeamModal,
598
+ G as BeamModalOutlet,
599
+ X as Confirm,
600
+ K as ItemCheck,
601
+ L as ItemCount,
602
+ se as ListAnchor,
598
603
  C as ListItem,
599
- ie as ListView,
600
- ue as Navbar,
601
- he as ScanInput,
602
- ve as install
604
+ le as ListView,
605
+ me as Navbar,
606
+ _e as ScanInput,
607
+ Ce as install
603
608
  };
604
609
  //# sourceMappingURL=beam.js.map
package/dist/beam.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"beam.js","sources":["../src/components/ActionFooter.vue","../src/components/Confirm.vue","../src/components/ItemCheck.vue","../src/components/ItemCount.vue","../src/components/ListItem.vue","../src/components/ListView.vue","../src/components/Navbar.vue","../../common/temp/node_modules/.pnpm/onscan.js@1.5.2/node_modules/onscan.js/onscan.js","../src/components/ScanInput.vue","../src/index.ts"],"sourcesContent":["<template>\n\t<footer class=\"beam__actionfooter\">\n\t\t<span class=\"footer-action-wrapper\">\n\t\t\t<button class=\"footer-action btn\" @click=\"handleFooterAction\">\n\t\t\t\t<slot />\n\t\t\t</button>\n\t\t</span>\n\t</footer>\n</template>\n\n<script setup lang=\"ts\">\nconst emit = defineEmits(['click'])\n\nconst handleFooterAction = () => {\n\temit('click')\n}\n</script>\n","<template>\n\t<div class=\"beam__modal-confirm\">\n\t\t<h2>Would you like to continue?</h2>\n\t\t<button class=\"btn\" @click=\"$emit('confirmmodal')\">Yes</button>\n\t\t<button class=\"btn\" @click=\"$emit('closemodal')\">No</button>\n\t</div>\n</template>\n","<template>\n\t<label class=\"container\">\n\t\t<input type=\"checkbox\" :checked=\"value\" @input=\"handleInput\" tabindex=\"-1\" />\n\t\t<div class=\"checkmark\" tabindex=\"0\"></div>\n\t</label>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nconst emit = defineEmits(['input'])\n// TODO: make this v-model sensitive from parent\nconst { value } = defineProps<{ value?: boolean }>()\n\nconst checked = ref(value)\n\nconst handleInput = () => {\n\temit('input', checked.value)\n}\n</script>\n\n<style scoped>\n.container {\n\tdisplay: block;\n\tposition: relative;\n\tpadding-left: 2.5ch;\n\tmargin: 0;\n\tmargin-top: 0.5rem;\n\tcursor: pointer;\n\tfont-size: 2rem;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n/* hide default checkbox */\n.container input {\n\tposition: absolute;\n\topacity: 0;\n\tcursor: pointer;\n\theight: 0;\n\twidth: 0;\n}\n\n.checkmark {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\theight: 2rem;\n\twidth: 2rem;\n\tbackground-color: #eee;\n\toutline: 2px solid transparent;\n\tborder: 1px solid var(--highlight);\n}\n\n.container:hover input ~ .checkmark {\n\tbackground-color: white;\n}\n\n.container input:checked ~ .checkmark {\n\tbackground-color: var(--brand-secondary);\n}\n\n.checkmark:after {\n\tcontent: '';\n\tposition: absolute;\n\tdisplay: none;\n}\n\n.container input:checked ~ .checkmark:after {\n\tdisplay: block;\n}\n\n.container .checkmark:after {\n\tleft: 25%;\n\ttop: 50%;\n\twidth: 0.5rem;\n\theight: 1rem;\n\tborder: solid var(--text-color);\n\tborder-width: 0 3px 3px 0;\n\t-webkit-transform: rotate(45deg);\n\t-ms-transform: rotate(45deg);\n\ttransform: rotate(45deg) translate(-50%, -50%);\n}\n</style>\n","<template>\n\t<div class=\"beam__itemcount\">\n\t\t<span\n\t\t\t:contenteditable=\"editable\"\n\t\t\t:class=\"{ alert: countColor === false }\"\n\t\t\t@input=\"handleInput\"\n\t\t\t@click=\"handleInput\">\n\t\t\t{{ count }}\n\t\t</span>\n\t\t<span>/{{ denominator }}</span>\n\t\t<span v-if=\"uom\">&nbsp; {{ uom }}</span>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\nconst emit = defineEmits(['input'])\nconst {\n\tvalue = 0,\n\tdenominator,\n\tuom = '',\n\teditable = true,\n} = defineProps<{\n\tvalue?: number\n\tdenominator: number\n\tuom?: string\n\teditable?: boolean\n}>()\n\nconst count = ref(value)\n\nconst handleInput = (event: InputEvent | MouseEvent) => {\n\tevent.preventDefault()\n\tevent.stopPropagation()\n\tcount.value = Number((event.target as HTMLElement).innerHTML.replace(/[^0-9]/g, ''))\n\temit('input', count.value)\n}\n\nconst countColor = computed(() => {\n\treturn count.value === denominator\n})\n</script>\n","<template>\n\t<li tabindex=\"0\" class=\"beam__listitem\">\n\t\t<div class=\"beam__listtext\">\n\t\t\t<label>{{ item.label }}</label>\n\t\t\t<p>{{ item.description }}</p>\n\t\t</div>\n\n\t\t<ItemCount\n\t\t\tv-if=\"item.count\"\n\t\t\tv-model=\"listItem.count.count\"\n\t\t\t:denominator=\"item.count.of\"\n\t\t\t:uom=\"item.count.uom\"\n\t\t\t:editable=\"true\" />\n\t\t<ItemCheck v-if=\"item.hasOwnProperty('checked')\" v-model=\"listItem.checked\" />\n\t</li>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport ItemCount from '@/components/ItemCount.vue'\nimport ItemCheck from '@/components/ItemCheck.vue'\n\nconst { item } = defineProps<{\n\titem: {\n\t\tlabel: string\n\t\tdescription: string\n\t\tcount?: {\n\t\t\tcount: number\n\t\t\tof: number\n\t\t\tuom: string\n\t\t}\n\t\tchecked?: boolean\n\t}\n}>()\n\nconst listItem = ref(item)\n</script>\n","<template>\n\t<ul class=\"beam__listview\">\n\t\t<li v-for=\"item in items\" :key=\"item.label\">\n\t\t\t<template v-if=\"item.linkComponent\">\n\t\t\t\t<component :is=\"item.linkComponent\" :to=\"item.route\" tabindex=\"-1\">\n\t\t\t\t\t<ListItem :item=\"item\"></ListItem>\n\t\t\t\t</component>\n\t\t\t</template>\n\t\t\t<template v-else>\n\t\t\t\t<ListItem :item=\"item\"></ListItem>\n\t\t\t</template>\n\t\t</li>\n\t</ul>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, onUnmounted } from 'vue'\n\nimport ListItem from '@/components/ListItem.vue'\n\ndefineProps<{\n\titems: {\n\t\tlabel: string\n\t\tdescription: string\n\t\tcount?: {\n\t\t\tcount: number\n\t\t\tof: number\n\t\t\tuom: string\n\t\t}\n\t\tchecked?: boolean\n\t\tlinkComponent?: string\n\t\troute?: string\n\t}[]\n}>()\n\nconst emit = defineEmits(['scrollbottom'])\n\nonMounted(() => {\n\twindow.addEventListener('scroll', handleScroll)\n})\n\nonUnmounted(() => {\n\twindow.removeEventListener('scroll', handleScroll)\n})\n\nconst handleScroll = () => {\n\tconst scrollHeightDifference = document.documentElement.scrollHeight - window.innerHeight\n\tconst scrollposition = document.documentElement.scrollTop\n\tif (scrollHeightDifference - scrollposition <= 2) {\n\t\temit('scrollbottom')\n\t}\n}\n</script>\n","<template>\n\t<nav class=\"beam__navbar\">\n\t\t<slot name=\"title\">\n\t\t\t<h1 class=\"nav-title\">TITLE</h1>\n\t\t</slot>\n\t\t<div class=\"navbar-action-wrapper\">\n\t\t\t<button class=\"navbar-action btn\" @click=\"handlePrimaryAction\">\n\t\t\t\t<slot name=\"navbaraction\">Action</slot>\n\t\t\t</button>\n\t\t</div>\n\t</nav>\n</template>\n\n<script setup lang=\"ts\">\nconst emit = defineEmits(['click'])\n\nconst handlePrimaryAction = () => {\n\temit('click')\n}\n</script>\n","/*\n * onScan.js - scan-events for hardware barcodes scanners in javascript\n */\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory()) :\n global.onScan = factory()\n}(this, (function () {\n\tvar onScan = {\t\n\t\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @param Object oOptions\n\t\t * @return self\n\t\t */\n\t\tattachTo: function(oDomElement, oOptions) {\n\t\n\t\t\tif(oDomElement.scannerDetectionData !== undefined){\n\t\t\t\tthrow new Error(\"onScan.js is already initialized for DOM element \" + oDomElement);\n\t\t\t}\n\t\n\t\t\tvar oDefaults = {\n\t\t\t\tonScan: function(sScanned, iQty){}, // Callback after detection of a successfull scanning: function(){sScancode, iCount)}()\n\t\t\t\tonScanError: function(oDebug){}, // Callback after detection of a unsuccessfull scanning (scanned string in parameter)\n\t\t\t\tonKeyProcess: function(sChar, oEvent){}, // Callback after receiving and processing a char (scanned char in parameter)\n\t\t\t\tonKeyDetect: function(iKeyCode, oEvent){}, // Callback after detecting a keyDown (key char in parameter) - in contrast to onKeyProcess, this fires for non-character keys like tab, arrows, etc. too!\n\t\t\t\tonPaste: function(sPasted, oEvent){}, // Callback after receiving a value on paste, no matter if it is a valid code or not\n\t\t\t\tkeyCodeMapper: function(oEvent) {return onScan.decodeKeyEvent(oEvent)}, // Custom function to decode a keydown event into a character. Must return decoded character or NULL if the given event should not be processed.\n\t\t\t\tonScanButtonLongPress: function(){}, // Callback after detection of a successfull scan while the scan button was pressed and held down\n\t\t\t\tscanButtonKeyCode:false, // Key code of the scanner hardware button (if the scanner button a acts as a key itself) \n\t\t\t\tscanButtonLongPressTime:500, // How long (ms) the hardware button should be pressed, until a callback gets executed\n\t\t\t\ttimeBeforeScanTest:100, // Wait duration (ms) after keypress event to check if scanning is finished\n\t\t\t\tavgTimeByChar:30, // Average time (ms) between 2 chars. Used to do difference between keyboard typing and scanning\n\t\t\t\tminLength:6, // Minimum length for a scanning\n\t\t\t\tsuffixKeyCodes:[9,13], // Chars to remove and means end of scanning\n\t\t\t\tprefixKeyCodes:[], // Chars to remove and means start of scanning\n\t\t\t\tignoreIfFocusOn:false, // do not handle scans if the currently focused element matches this selector or object\n\t\t\t\tstopPropagation:false, // Stop immediate propagation on keypress event\n\t\t\t\tpreventDefault:false, // Prevent default action on keypress event\n\t\t\t\tcaptureEvents:false, // Get the events before any listeners deeper in the DOM\n\t\t\t\treactToKeydown:true, // look for scan input in keyboard events\n\t\t\t\treactToPaste:false, // look for scan input in paste events\n\t\t\t\tsingleScanQty: 1, // Quantity of Items put out to onScan in a single scan\n\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\toOptions = this._mergeOptions(oDefaults, oOptions);\n\t\n\t\t\t// initializing options and variables on DomElement\n\t\t\toDomElement.scannerDetectionData = {\n\t\t\t\t\toptions: oOptions,\n\t\t\t\t\tvars:{\n\t\t\t\t\t\tfirstCharTime: 0,\n\t\t\t\t\t\tlastCharTime: 0,\n\t\t\t\t\t\taccumulatedString: '',\n\t\t\t\t\t\ttestTimer: false,\n\t\t\t\t\t\tlongPressTimeStart: 0,\n\t\t\t\t\t\tlongPressed: false\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t};\n\t\t\t\n\t\t\t// initializing handlers (based on settings)\n\t\t\tif (oOptions.reactToPaste === true){\n\t\t\t\toDomElement.addEventListener(\"paste\", this._handlePaste, oOptions.captureEvents);\n\t\t\t}\n\t\t\tif (oOptions.scanButtonKeyCode !== false){\n\t\t\t\toDomElement.addEventListener(\"keyup\", this._handleKeyUp, oOptions.captureEvents);\n\t\t\t}\n\t\t\tif (oOptions.reactToKeydown === true || oOptions.scanButtonKeyCode !== false){\t\n\t\t\t\toDomElement.addEventListener(\"keydown\", this._handleKeyDown, oOptions.captureEvents);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @return void\n\t\t */\n\t\tdetachFrom: function(oDomElement) {\n\t\t\t// detaching all used events\n\t\t\tif (oDomElement.scannerDetectionData.options.reactToPaste){\n\t\t\t\toDomElement.removeEventListener(\"paste\", this._handlePaste);\n\t\t\t}\n\t\t\tif (oDomElement.scannerDetectionData.options.scanButtonKeyCode !== false){\n\t\t\t\toDomElement.removeEventListener(\"keyup\", this._handleKeyUp);\n\t\t\t}\n\t\t\toDomElement.removeEventListener(\"keydown\", this._handleKeyDown);\n\t\t\t\n\t\t\t// clearing data off DomElement\n\t\t\toDomElement.scannerDetectionData = undefined; \n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @return Object\n\t\t */\n\t\tgetOptions: function(oDomElement){\n\t\t\treturn oDomElement.scannerDetectionData.options;\t\t\t\n\t\t},\n\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @param Object oOptions\n\t\t * @return self\n\t\t */\n\t\tsetOptions: function(oDomElement, oOptions){\n\t\t\t// check if some handlers need to be changed based on possible option changes\n\t\t\tswitch (oDomElement.scannerDetectionData.options.reactToPaste){\n\t\t\t\tcase true: \n\t\t\t\t\tif (oOptions.reactToPaste === false){\n\t\t\t\t\t\toDomElement.removeEventListener(\"paste\", this._handlePaste);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase false:\n\t\t\t\t\tif (oOptions.reactToPaste === true){\n\t\t\t\t\t\toDomElement.addEventListener(\"paste\", this._handlePaste);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tswitch (oDomElement.scannerDetectionData.options.scanButtonKeyCode){\n\t\t\t\tcase false:\n\t\t\t\t\tif (oOptions.scanButtonKeyCode !== false){\n\t\t\t\t\t\toDomElement.addEventListener(\"keyup\", this._handleKeyUp);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: \n\t\t\t\t\tif (oOptions.scanButtonKeyCode === false){\n\t\t\t\t\t\toDomElement.removeEventListener(\"keyup\", this._handleKeyUp);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\t// merge old and new options\n\t\t\toDomElement.scannerDetectionData.options = this._mergeOptions(oDomElement.scannerDetectionData.options, oOptions);\n\t\t\n\t\t\t// reinitiallize\n\t\t\tthis._reinitialize(oDomElement);\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Transforms key codes into characters.\n\t\t * \n\t\t * By default, only the follwing key codes are taken into account\n\t\t * - 48-90 (letters and regular numbers)\n\t\t * - 96-105 (numeric keypad numbers)\n\t\t * - 106-111 (numeric keypad operations)\n\t\t * \n\t\t * All other keys will yield empty strings!\n\t\t * \n\t\t * The above keycodes will be decoded using the KeyboardEvent.key property on modern\n\t\t * browsers. On older browsers the method will fall back to String.fromCharCode()\n\t\t * putting the result to upper/lower case depending on KeyboardEvent.shiftKey if\n\t\t * it is set.\n\t\t * \n\t\t * @param KeyboardEvent oEvent\n\t\t * @return string\n\t\t */\n\t\tdecodeKeyEvent : function (oEvent) {\n\t\t\tvar iCode = this._getNormalizedKeyNum(oEvent);\n\t\t\tswitch (true) {\n\t\t\t\tcase iCode >= 48 && iCode <= 90: // numbers and letters\n\t\t\t\tcase iCode >= 106 && iCode <= 111: // operations on numeric keypad (+, -, etc.)\n\t\t\t\t\tif (oEvent.key !== undefined && oEvent.key !== '') {\n\t\t\t\t\t\treturn oEvent.key;\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\tvar sDecoded = String.fromCharCode(iCode);\n\t\t\t\t\tswitch (oEvent.shiftKey) {\n\t\t\t\t\t\tcase false: sDecoded = sDecoded.toLowerCase(); break;\n\t\t\t\t\t\tcase true: sDecoded = sDecoded.toUpperCase(); break;\n\t\t\t\t\t}\n\t\t\t\t\treturn sDecoded;\n\t\t\t\tcase iCode >= 96 && iCode <= 105: // numbers on numeric keypad\n\t\t\t\t\treturn 0+(iCode-96);\n\t\t\t}\n\t\t\treturn '';\n\t\t},\n\t\t\n\t\t/**\n\t\t * Simulates a scan of the provided code.\n\t *\n\t\t * The scan code can be defined as\n\t\t * - a string - in this case no keyCode decoding is done and the code is merely validated\n\t\t * against constraints like minLenght, etc.\n\t\t * - an array of keyCodes (e.g. `[70,71,80]`) - will produce `keydown` events with corresponding\n\t\t * `keyCode` properties. NOTE: these events will have empty `key` properties, so decoding may\n\t\t * yield different results than with native events.\n\t\t * - an array of objects (e.g. `[{keyCode: 70, key: \"F\", shiftKey: true}, {keyCode: 71, key: \"g\"}]`) -\n\t\t * this way almost any event can be simulated, but it's a lot of work to do.\n\t\t *\n\t\t * @param DomElement oDomElement\n\t\t * @param string|array mStringOrArray\n\t\t * @return self\n\t\t */\n\t\tsimulate: function(oDomElement, mStringOrArray){\n\t\t\tthis._reinitialize(oDomElement);\n\t\t\tif (Array.isArray(mStringOrArray)){\n\t\t\t\tmStringOrArray.forEach(function(mKey){\n\t\t\t\t\tvar oEventProps = {};\n\t\t\t\t\tif( (typeof mKey === \"object\" || typeof mKey === 'function') && (mKey !== null) ) {\n\t\t\t\t\t\toEventProps = mKey;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toEventProps.keyCode = parseInt(mKey);\n\t\t\t\t\t}\n\t\t\t\t\tvar oEvent = new KeyboardEvent('keydown', oEventProps);\n\t\t\t\t\tdocument.dispatchEvent(oEvent);\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis._validateScanCode(oDomElement, mStringOrArray);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param DomElement oDomElement\n\t\t * @return void\n\t\t */\n\t\t_reinitialize: function(oDomElement){\n\t\t\tvar oVars = oDomElement.scannerDetectionData.vars;\n\t\t\toVars.firstCharTime = 0;\n\t\t\toVars.lastCharTime = 0;\n\t\t\toVars.accumulatedString = '';\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param DomElement oDomElement\n\t * @return boolean\n\t\t */\n\t\t_isFocusOnIgnoredElement: function(oDomElement){\n\t\t\t\n\t\t\tvar ignoreSelectors = oDomElement.scannerDetectionData.options.ignoreIfFocusOn;\n\t\n\t if(!ignoreSelectors){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\n\t\t\tvar oFocused = document.activeElement;\n\t\t\t\n\t\t\t// checks if ignored element is an array, and if so it checks if one of the elements of it is an active one\n\t\t\tif (Array.isArray(ignoreSelectors)){\n\t\t\t\tfor(var i=0; i<ignoreSelectors.length; i++){\n\t\t\t\t\tif(oFocused.matches(ignoreSelectors[i]) === true){\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t// if the option consists of an single element, it only checks this one\n\t\t\t} else if (oFocused.matches(ignoreSelectors)){\n\t\t\t\treturn true;\t\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t// if the active element is not listed in the ignoreIfFocusOn option, return false\n\t\t return false;\n\t },\n\t\t\n\t /**\n\t * Validates the scan code accumulated by the given DOM element and fires the respective events.\n\t * \n\t * @private\n\t * @param DomElement oDomElement\n\t * @return boolean\n\t */\n\t\t_validateScanCode: function(oDomElement, sScanCode){\n\t\t\tvar oScannerData = oDomElement.scannerDetectionData;\t\t\t\n\t\t\tvar oOptions = oScannerData.options;\n\t\t\tvar iSingleScanQty = oScannerData.options.singleScanQty;\n\t\t\tvar iFirstCharTime = oScannerData.vars.firstCharTime;\n\t\t\tvar iLastCharTime = oScannerData.vars.lastCharTime;\n\t\t\tvar oScanError = {};\n\t var oEvent;\n\t \n\t\t\tswitch(true){\n\t\t\t\t\n\t\t\t\t// detect codes that are too short\n\t\t\t\tcase (sScanCode.length < oOptions.minLength):\n\t\t\t\t\toScanError = {\n\t\t\t\t\t\tmessage: \"Receieved code is shorter then minimal length\"\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// detect codes that were entered too slow\t\n\t\t\t\tcase ((iLastCharTime - iFirstCharTime) > (sScanCode.length * oOptions.avgTimeByChar)):\n\t\t\t\t\toScanError = {\n\t\t\t\t\t\tmessage: \"Receieved code was not entered in time\"\n\t\t\t\t\t};\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// if a code was not filtered out earlier it is valid\t\n\t\t\t\tdefault:\n\t\t\t\t\toOptions.onScan.call(oDomElement, sScanCode, iSingleScanQty);\n\t\t\t\t\toEvent = new CustomEvent(\n\t\t\t\t\t\t'scan',\n\t\t\t\t\t\t{\t\n\t\t\t\t\t\t\tdetail: { \n\t\t\t\t\t\t\t\tscanCode: sScanCode,\n\t\t\t\t\t\t\t\tqty: iSingleScanQty\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\toDomElement.dispatchEvent(oEvent);\n\t\t\t\t\tonScan._reinitialize(oDomElement);\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\t\n\t\t\t// If an error occurred (otherwise the method would return earlier) create an object for errordetection\n\t\t\toScanError.scanCode = sScanCode;\n\t\t\toScanError.scanDuration = iLastCharTime - iFirstCharTime;\n\t\t\toScanError.avgTimeByChar = oOptions.avgTimeByChar;\n\t\t\toScanError.minLength = oOptions.minLength;\n\t\t\t\n\t\t\toOptions.onScanError.call(oDomElement, oScanError);\n\t\t\t\n\t\t\toEvent = new CustomEvent(\n\t\t\t\t'scanError', \n\t\t\t\t{detail: oScanError}\n\t\t\t);\n\t\t\toDomElement.dispatchEvent(oEvent);\n\t\t\t\n\t\t\tonScan._reinitialize(oDomElement);\n\t\t\treturn false;\n\t },\n\t\n\t /**\n\t * @private\n\t * @param Object oDefaults\n\t * @param Object oOptions\n\t * @return Object\n\t */\n\t\t_mergeOptions: function(oDefaults, oOptions){\n\t\t\tvar oExtended = {};\n\t\t\tvar prop;\n\t\t\tfor (prop in oDefaults){\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(oDefaults, prop)){\n\t\t\t\t\toExtended[prop] = oDefaults[prop];\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t\tfor (prop in oOptions){\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(oOptions, prop)){\n\t\t\t\t\toExtended[prop] = oOptions[prop];\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t\treturn oExtended;\n\t\t},\n\t\n\t\t/**\n\t\t * @private\n\t\t * @param KeyboardEvent e\n\t\t * @return int\n\t\t * @see https://www.w3schools.com/jsref/event_key_keycode.asp\n\t\t */\n\t\t_getNormalizedKeyNum: function(e){\n\t\t\treturn e.which || e.keyCode;\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * @private\n\t\t * @param KeyboardEvent e\n\t\t * @return void\n\t\t */\n\t\t_handleKeyDown: function(e){\n\t\t\tvar iKeyCode = onScan._getNormalizedKeyNum(e);\n\t\t\tvar oOptions = this.scannerDetectionData.options;\n\t\t\tvar oVars = this.scannerDetectionData.vars;\n\t\t\tvar bScanFinished = false;\n\t\t\t\n\t\t\tif (oOptions.onKeyDetect.call(this, iKeyCode, e) === false) {\n\t\t\t\treturn;\n\t\t\t}\t\t\n\t\t\t\n\t\t\tif (onScan._isFocusOnIgnoredElement(this)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\t\t\t\n\t // If it's just the button of the scanner, ignore it and wait for the real input\n\t\t if(oOptions.scanButtonKeyCode !== false && iKeyCode==oOptions.scanButtonKeyCode) {\n\t\t\t\t\n\t\t\t\t// if the button was first pressed, start a timeout for the callback, which gets interrupted if the scanbutton gets released\n\t\t\t\tif (!oVars.longPressed){\n\t\t\t\t\toVars.longPressTimer = setTimeout( oOptions.onScanButtonLongPress, oOptions.scanButtonLongPressTime, this);\n\t\t\t\t\toVars.longPressed = true;\n\t\t\t\t}\n\t\n\t\t\t\treturn;\n\t }\n\t\t\t\n\t\t\tswitch(true){\n\t\t\t\t// If it's not the first character and we encounter a terminating character, trigger scan process\n\t\t\t\tcase (oVars.firstCharTime && oOptions.suffixKeyCodes.indexOf(iKeyCode)!==-1):\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tbScanFinished=true;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// If it's the first character and we encountered one of the starting characters, don't process the scan\t\n\t\t\t\tcase (!oVars.firstCharTime && oOptions.prefixKeyCodes.indexOf(iKeyCode)!==-1):\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tbScanFinished=false;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// Otherwise, just add the character to the scan string we're building\t\n\t\t\t\tdefault:\n\t\t\t\t\tvar character = oOptions.keyCodeMapper.call(this, e);\n\t\t\t\t\tif (character === null){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\toVars.accumulatedString += character;\n\t\t\t\t\t\n\t\t\t\t\tif (oOptions.preventDefault) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tif (oOptions.stopPropagation) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tbScanFinished=false;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t \n\t\t\tif(!oVars.firstCharTime){\n\t\t\t\toVars.firstCharTime=Date.now();\n\t\t\t}\n\t\t\t\n\t\t\toVars.lastCharTime=Date.now();\n\t\n\t\t\tif(oVars.testTimer){ \n\t\t\t\tclearTimeout(oVars.testTimer);\n\t\t\t}\n\t\t\t\n\t\t\tif(bScanFinished){\n\t\t\t\tonScan._validateScanCode(this, oVars.accumulatedString);\n\t\t\t\toVars.testTimer=false;\n\t\t\t} else {\n\t\t\t\toVars.testTimer=setTimeout(onScan._validateScanCode, oOptions.timeBeforeScanTest, this, oVars.accumulatedString);\n\t\t\t}\n\t\n\t\t\toOptions.onKeyProcess.call(this, character, e);\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param Event e\n\t\t * @return void\n\t\t */\n\t\t_handlePaste: function(e){\n\t\n\t\t\tvar oOptions = this.scannerDetectionData.options;\n\t\t\tvar oVars = this.scannerDetectionData.vars;\n\t\t\tvar sPasteString = (event.clipboardData || window.clipboardData).getData('text');\n\t\t\t\n\t\t\t// if the focus is on an ignored element, abort\n\t\t\tif (onScan._isFocusOnIgnoredElement(this)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\te.preventDefault();\n\n\t\t\tif (oOptions.stopPropagation) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\t\t\t\t\t\t\n\t\t\toOptions.onPaste.call(this, sPasteString, event);\n\t\t\t\n\t\t\toVars.firstCharTime = 0;\n\t\t\toVars.lastCharTime = 0;\n\t\t\t\n\t\t\t// validate the string\n\t\t\tonScan._validateScanCode(this, sPasteString);\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param KeyboardEvent e\n\t\t * @return void\n\t\t */\n\t\t_handleKeyUp: function(e){\n\t\t\t// if the focus is on an ignored element, abort\n\t\t\tif (onScan._isFocusOnIgnoredElement(this)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tvar iKeyCode = onScan._getNormalizedKeyNum(e);\n\t\t\t\n\t\t\t// if hardware key is not being pressed anymore stop the timeout and reset\n\t\t\tif (iKeyCode == this.scannerDetectionData.options.scanButtonKeyCode){\n\t\t\t\tclearTimeout(this.scannerDetectionData.vars.longPressTimer);\n\t\t\t\tthis.scannerDetectionData.vars.longPressed = false;\n\t\t\t}\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Returns TRUE the scanner is currently in the middle of a scan sequence.\n\t\t * \n\t\t * @param DomElement\n\t\t * @return boolean\n\t\t */\n\t\tisScanInProgressFor: function(oDomElement) {\n\t\t\treturn oDomElement.scannerDetectionData.vars.firstCharTime > 0;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Returns TRUE if onScan is attached to the given DOM element and FALSE otherwise.\n\t\t * \n\t\t * @param DomElement\n\t\t * @return boolean\n\t\t */\n\t\tisAttachedTo: function(oDomElement) {\n\t\t\treturn (oDomElement.scannerDetectionData !== undefined);\n\t\t}\n\t};\n\t\n\treturn onScan;\n})));","<template>\n\t<div id=\"scan_input\"></div>\n</template>\n\n<script setup lang=\"ts\">\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport onScan from 'onscan.js'\nimport { onMounted, onUnmounted } from 'vue'\n\nconst emit = defineEmits<{\n\tscanInstance: [instance: onScan]\n}>()\n\nconst props = defineProps<{\n\tscanHandler: (barcode: string, qty: number) => void\n}>()\n\nonMounted(() => {\n\tconst instance = onScan.attachTo(window, { onScan: props.scanHandler })\n\temit('scanInstance', instance)\n})\n\nonUnmounted(() => {\n\tonScan.detachFrom(window)\n})\n</script>\n","import { App } from 'vue'\n\nimport ActionFooter from '@/components/ActionFooter.vue'\nimport BeamModal from '@/components/BeamModal.vue'\nimport BeamModalOutlet from '@/components/BeamModalOutlet.vue'\nimport Confirm from '@/components/Confirm.vue'\nimport ItemCheck from '@/components/ItemCheck.vue'\nimport ItemCount from '@/components/ItemCount.vue'\nimport ListAnchor from '@/components/ListAnchor.vue'\nimport ListItem from '@/components/ListItem.vue'\nimport ListView from '@/components/ListView.vue'\nimport Navbar from '@/components/Navbar.vue'\nimport ScanInput from '@/components/ScanInput.vue'\nimport 'themes/beam.css'\n\n/**\n * Install all Beam components\n * @param app - Vue app instance\n * @public\n */\nfunction install(app: App /* options */) {\n\tapp.component('ActionFooter', ActionFooter)\n\tapp.component('BeamModal', BeamModal)\n\tapp.component('BeamModalOutlet', BeamModalOutlet)\n\tapp.component('Confirm', Confirm)\n\tapp.component('ItemCheck', ItemCheck)\n\tapp.component('ItemCount', ItemCount)\n\tapp.component('ListAnchor', ListAnchor)\n\tapp.component('ListItem', ListItem)\n\tapp.component('ListView', ListView)\n\tapp.component('Navbar', Navbar)\n\tapp.component('ScanInput', ScanInput)\n}\n\nexport {\n\tActionFooter,\n\tBeamModal,\n\tBeamModalOutlet,\n\tConfirm,\n\tItemCheck,\n\tItemCount,\n\tListAnchor,\n\tListItem,\n\tListView,\n\tNavbar,\n\tScanInput,\n\tinstall,\n}\n"],"names":["emit","__emit","handleFooterAction","_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","$event","checked","ref","__props","handleInput","count","event","countColor","computed","listItem","onMounted","handleScroll","onUnmounted","scrollHeightDifference","scrollposition","handlePrimaryAction","global","factory","module","this","onScan","oDomElement","oOptions","oDefaults","sScanned","iQty","oDebug","sChar","oEvent","iKeyCode","sPasted","iCode","sDecoded","mStringOrArray","mKey","oEventProps","oVars","ignoreSelectors","oFocused","i","sScanCode","oScannerData","iSingleScanQty","iFirstCharTime","iLastCharTime","oScanError","oExtended","prop","bScanFinished","character","sPasteString","props","instance","install","app","ActionFooter","BeamModal","BeamModalOutlet","Confirm","ItemCheck","ItemCount","ListAnchor","ListItem","ListView","Navbar","ScanInput"],"mappings":";;;;;AAWA,UAAMA,IAAOC,GAEPC,IAAqB,MAAM;AAChC,MAAAF,EAAK,OAAO;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbZ,SAAAG,EAAAC,GAAAC,GAAA;AACC,SAAAC,EAAA,GAAAC,EAAA,UAA+B;AAAA,IAC/BF,EAA+D,CAAA,MAAAA,EAAA,CAAA,IAAAG,EAAA,MAAA,MAAA,+BAAA,EAAA;AAAA,IAAvDA,EAAW,UAAA;AAAA,MAAE,OAAK;AAAA,eAA4BH,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAI,MAAAL,EAAA,MAAA,cAAA;AAAA,IACM,GAAA,KAAA;AAAA,IAApDI,EAAW,UAAA;AAAA,MAAE,OAAK;AAAA,eAAyBH,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAI,MAAAL,EAAA,MAAA,YAAA;AAAA;;;;;;;;;;ACMrD,UAAMJ,IAAOC,GAIPS,IAAUC,EAAIC,OAAK,GAEnBC,IAAc,MAAM;AACpB,MAAAb,EAAA,SAASU,EAAQ,KAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;ACA5B,UAAMV,IAAOC,GAaPa,IAAQH,EAAIC,OAAK,GAEjBC,IAAc,CAACE,MAAmC;AACvD,MAAAA,EAAM,eAAe,GACrBA,EAAM,gBAAgB,GAChBD,EAAA,QAAQ,OAAQC,EAAM,OAAuB,UAAU,QAAQ,WAAW,EAAE,CAAC,GAC9Ef,EAAA,SAASc,EAAM,KAAK;AAAA,IAAA,GAGpBE,IAAaC,EAAS,MACpBH,EAAM,UAAUF,EAAW,WAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLK,UAAAM,IAAWP,EAAIC,EAAA,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDzB,UAAMZ,IAAOC;AAEb,IAAAkB,EAAU,MAAM;AACR,aAAA,iBAAiB,UAAUC,CAAY;AAAA,IAAA,CAC9C,GAEDC,EAAY,MAAM;AACV,aAAA,oBAAoB,UAAUD,CAAY;AAAA,IAAA,CACjD;AAED,UAAMA,IAAe,MAAM;AAC1B,YAAME,IAAyB,SAAS,gBAAgB,eAAe,OAAO,aACxEC,IAAiB,SAAS,gBAAgB;AAC5C,MAAAD,IAAyBC,KAAkB,KAC9CvB,EAAK,cAAc;AAAA,IACpB;;;;;;;;;;;;;;;;;;;;;;;;;ACpCD,UAAMA,IAAOC,GAEPuB,IAAsB,MAAM;AACjC,MAAAxB,EAAK,OAAO;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;ACdZ,GAAC,SAAUyB,GAAQC,GAAS;AACsC,IAAAC,EAAiB,UAAAD;EAGnF,GAACE,IAAO,WAAY;AACpB,QAAIC,IAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQZ,UAAU,SAASC,GAAaC,GAAU;AAEzC,YAAGD,EAAY,yBAAyB;AACvC,gBAAM,IAAI,MAAM,sDAAsDA,CAAW;AAGlF,YAAIE,IAAY;AAAA,UACf,QAAQ,SAASC,GAAUC,GAAK;AAAA,UAAE;AAAA;AAAA,UAClC,aAAa,SAASC,GAAO;AAAA,UAAE;AAAA;AAAA,UAC/B,cAAc,SAASC,GAAOC,GAAO;AAAA,UAAE;AAAA;AAAA,UACvC,aAAa,SAASC,GAAUD,GAAO;AAAA,UAAE;AAAA;AAAA,UACzC,SAAS,SAASE,GAASF,GAAO;AAAA,UAAE;AAAA;AAAA,UACpC,eAAe,SAASA,GAAQ;AAAC,mBAAOR,EAAO,eAAeQ,CAAM;AAAA,UAAC;AAAA;AAAA,UACrE,uBAAuB,WAAU;AAAA,UAAE;AAAA;AAAA,UACnC,mBAAkB;AAAA;AAAA,UAClB,yBAAwB;AAAA;AAAA,UACxB,oBAAmB;AAAA;AAAA,UACnB,eAAc;AAAA;AAAA,UACd,WAAU;AAAA;AAAA,UACV,gBAAe,CAAC,GAAE,EAAE;AAAA;AAAA,UACpB,gBAAe,CAAE;AAAA;AAAA,UACjB,iBAAgB;AAAA;AAAA,UAChB,iBAAgB;AAAA;AAAA,UAChB,gBAAe;AAAA;AAAA,UACf,eAAc;AAAA;AAAA,UACd,gBAAe;AAAA;AAAA,UACf,cAAa;AAAA;AAAA,UACb,eAAe;AAAA;AAAA,QACf;AAED,eAAAN,IAAW,KAAK,cAAcC,GAAWD,CAAQ,GAGjDD,EAAY,uBAAuB;AAAA,UACjC,SAASC;AAAA,UACT,MAAK;AAAA,YACJ,eAAe;AAAA,YACf,cAAc;AAAA,YACd,mBAAmB;AAAA,YACnB,WAAW;AAAA,YACX,oBAAoB;AAAA,YACpB,aAAa;AAAA,UACb;AAAA,QAEN,GAGOA,EAAS,iBAAiB,MAC7BD,EAAY,iBAAiB,SAAS,KAAK,cAAcC,EAAS,aAAa,GAE5EA,EAAS,sBAAsB,MAClCD,EAAY,iBAAiB,SAAS,KAAK,cAAcC,EAAS,aAAa,IAE5EA,EAAS,mBAAmB,MAAQA,EAAS,sBAAsB,OACtED,EAAY,iBAAiB,WAAW,KAAK,gBAAgBC,EAAS,aAAa,GAE7E;AAAA,MACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOD,YAAY,SAASD,GAAa;AAEjC,QAAIA,EAAY,qBAAqB,QAAQ,gBAC5CA,EAAY,oBAAoB,SAAS,KAAK,YAAY,GAEvDA,EAAY,qBAAqB,QAAQ,sBAAsB,MAClEA,EAAY,oBAAoB,SAAS,KAAK,YAAY,GAE3DA,EAAY,oBAAoB,WAAW,KAAK,cAAc,GAG9DA,EAAY,uBAAuB;AAAA,MAEnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOD,YAAY,SAASA,GAAY;AAChC,eAAOA,EAAY,qBAAqB;AAAA,MACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQD,YAAY,SAASA,GAAaC,GAAS;AAE1C,gBAAQD,EAAY,qBAAqB,QAAQ,cAAY;AAAA,UAC5D,KAAK;AACJ,YAAIC,EAAS,iBAAiB,MAC7BD,EAAY,oBAAoB,SAAS,KAAK,YAAY;AAE3D;AAAA,UACD,KAAK;AACJ,YAAIC,EAAS,iBAAiB,MAC7BD,EAAY,iBAAiB,SAAS,KAAK,YAAY;AAExD;AAAA,QACD;AAED,gBAAQA,EAAY,qBAAqB,QAAQ,mBAAiB;AAAA,UACjE,KAAK;AACJ,YAAIC,EAAS,sBAAsB,MAClCD,EAAY,iBAAiB,SAAS,KAAK,YAAY;AAExD;AAAA,UACD;AACC,YAAIC,EAAS,sBAAsB,MAClCD,EAAY,oBAAoB,SAAS,KAAK,YAAY;AAE3D;AAAA,QACD;AAGD,eAAAA,EAAY,qBAAqB,UAAU,KAAK,cAAcA,EAAY,qBAAqB,SAASC,CAAQ,GAGhH,KAAK,cAAcD,CAAW,GACvB;AAAA,MACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBD,gBAAiB,SAAUO,GAAQ;AAClC,YAAIG,IAAQ,KAAK,qBAAqBH,CAAM;AAC5C,gBAAQ,IAAI;AAAA,UACX,MAAKG,KAAS,MAAMA,KAAS;AAAA,UAC7B,MAAKA,KAAS,OAAOA,KAAS;AAC7B,gBAAIH,EAAO,QAAQ,UAAaA,EAAO,QAAQ;AAC9C,qBAAOA,EAAO;AAGf,gBAAII,IAAW,OAAO,aAAaD,CAAK;AACxC,oBAAQH,EAAO,UAAQ;AAAA,cACtB,KAAK;AAAO,gBAAAI,IAAWA,EAAS,YAAW;AAAI;AAAA,cAC/C,KAAK;AAAM,gBAAAA,IAAWA,EAAS,YAAW;AAAI;AAAA,YAC9C;AACD,mBAAOA;AAAA,UACR,MAAKD,KAAS,MAAMA,KAAS;AAC5B,mBAAO,KAAGA,IAAM;AAAA,QACjB;AACD,eAAO;AAAA,MACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBD,UAAU,SAASV,GAAaY,GAAe;AAC9C,oBAAK,cAAcZ,CAAW,GAC1B,MAAM,QAAQY,CAAc,IAC/BA,EAAe,QAAQ,SAASC,GAAK;AACpC,cAAIC,IAAc,CAAA;AAClB,WAAK,OAAOD,KAAS,YAAY,OAAOA,KAAS,eAAgBA,MAAS,OACzEC,IAAcD,IAEdC,EAAY,UAAU,SAASD,CAAI;AAEpC,cAAIN,IAAS,IAAI,cAAc,WAAWO,CAAW;AACrD,mBAAS,cAAcP,CAAM;AAAA,QAClC,CAAK,IAED,KAAK,kBAAkBP,GAAaY,CAAc,GAE5C;AAAA,MACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOD,eAAe,SAASZ,GAAY;AACnC,YAAIe,IAAQf,EAAY,qBAAqB;AAC7C,QAAAe,EAAM,gBAAgB,GACtBA,EAAM,eAAe,GACrBA,EAAM,oBAAoB;AAAA,MAE1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOD,0BAA0B,SAASf,GAAY;AAE9C,YAAIgB,IAAkBhB,EAAY,qBAAqB,QAAQ;AAEzD,YAAG,CAACgB;AACT,iBAAO;AAGR,YAAIC,IAAW,SAAS;AAGxB,YAAI,MAAM,QAAQD,CAAe;AAChC,mBAAQE,IAAE,GAAGA,IAAEF,EAAgB,QAAQE;AACtC,gBAAGD,EAAS,QAAQD,EAAgBE,CAAC,CAAC,MAAM;AAC3C,qBAAO;AAAA,mBAICD,EAAS,QAAQD,CAAe;AAC1C,iBAAO;AAIL,eAAO;AAAA,MACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASJ,mBAAmB,SAAShB,GAAamB,GAAU;AAClD,YAAIC,IAAepB,EAAY,sBAC3BC,IAAWmB,EAAa,SACxBC,IAAiBD,EAAa,QAAQ,eACtCE,IAAiBF,EAAa,KAAK,eACnCG,IAAgBH,EAAa,KAAK,cAClCI,IAAa,CAAA,GACPjB;AAEV,gBAAO,IAAI;AAAA,UAGV,KAAMY,EAAU,SAASlB,EAAS;AACjC,YAAAuB,IAAa;AAAA,cACZ,SAAS;AAAA,YACf;AACK;AAAA,UAGD,KAAOD,IAAgBD,IAAmBH,EAAU,SAASlB,EAAS;AACrE,YAAAuB,IAAa;AAAA,cACZ,SAAS;AAAA,YACf;AACK;AAAA,UAGD;AACC,mBAAAvB,EAAS,OAAO,KAAKD,GAAamB,GAAWE,CAAc,GAC3Dd,IAAS,IAAI;AAAA,cACZ;AAAA,cACA;AAAA,gBACC,QAAQ;AAAA,kBACP,UAAUY;AAAA,kBACV,KAAKE;AAAA,gBACL;AAAA,cACD;AAAA,YACP,GACKrB,EAAY,cAAcO,CAAM,GAChCR,EAAO,cAAcC,CAAW,GACzB;AAAA,QACR;AAGD,eAAAwB,EAAW,WAAWL,GACtBK,EAAW,eAAeD,IAAgBD,GAC1CE,EAAW,gBAAgBvB,EAAS,eACpCuB,EAAW,YAAYvB,EAAS,WAEhCA,EAAS,YAAY,KAAKD,GAAawB,CAAU,GAEjDjB,IAAS,IAAI;AAAA,UACZ;AAAA,UACA,EAAC,QAAQiB,EAAU;AAAA,QACvB,GACGxB,EAAY,cAAcO,CAAM,GAEhCR,EAAO,cAAcC,CAAW,GACzB;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQJ,eAAe,SAASE,GAAWD,GAAS;AAC3C,YAAIwB,IAAY,CAAA,GACZC;AACJ,aAAKA,KAAQxB;AACZ,UAAI,OAAO,UAAU,eAAe,KAAKA,GAAWwB,CAAI,MACvDD,EAAUC,CAAI,IAAIxB,EAAUwB,CAAI;AAGlC,aAAKA,KAAQzB;AACZ,UAAI,OAAO,UAAU,eAAe,KAAKA,GAAUyB,CAAI,MACtDD,EAAUC,CAAI,IAAIzB,EAASyB,CAAI;AAGjC,eAAOD;AAAA,MACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQD,sBAAsB,SAAS,GAAE;AAChC,eAAO,EAAE,SAAS,EAAE;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQD,gBAAgB,SAAS,GAAE;AAC1B,YAAIjB,IAAWT,EAAO,qBAAqB,CAAC,GACxCE,IAAW,KAAK,qBAAqB,SACrCc,IAAQ,KAAK,qBAAqB,MAClCY,IAAgB;AAEpB,YAAI1B,EAAS,YAAY,KAAK,MAAMO,GAAU,CAAC,MAAM,MAIjD,CAAAT,EAAO,yBAAyB,IAAI,GAKrC;AAAA,cAAGE,EAAS,sBAAsB,MAASO,KAAUP,EAAS,mBAAmB;AAGnF,YAAKc,EAAM,gBACVA,EAAM,iBAAiB,WAAYd,EAAS,uBAAuBA,EAAS,yBAAyB,IAAI,GACzGc,EAAM,cAAc;AAGrB;AAAA,UACM;AAEP,kBAAO,IAAI;AAAA,YAEV,MAAMA,EAAM,iBAAiBd,EAAS,eAAe,QAAQO,CAAQ,MAAI;AACxE,gBAAE,eAAc,GAChB,EAAE,yBAAwB,GAC1BmB,IAAc;AACd;AAAA,YAGD,MAAM,CAACZ,EAAM,iBAAiBd,EAAS,eAAe,QAAQO,CAAQ,MAAI;AACzE,gBAAE,eAAc,GAChB,EAAE,yBAAwB,GAC1BmB,IAAc;AACd;AAAA,YAGD;AACC,kBAAIC,IAAY3B,EAAS,cAAc,KAAK,MAAM,CAAC;AACnD,kBAAI2B,MAAc;AACjB;AAED,cAAAb,EAAM,qBAAqBa,GAEvB3B,EAAS,kBACZ,EAAE,eAAc,GAEbA,EAAS,mBACZ,EAAE,yBAAwB,GAG3B0B,IAAc;AACd;AAAA,UACD;AAED,UAAIZ,EAAM,kBACTA,EAAM,gBAAc,KAAK,QAG1BA,EAAM,eAAa,KAAK,OAErBA,EAAM,aACR,aAAaA,EAAM,SAAS,GAG1BY,KACF5B,EAAO,kBAAkB,MAAMgB,EAAM,iBAAiB,GACtDA,EAAM,YAAU,MAEhBA,EAAM,YAAU,WAAWhB,EAAO,mBAAmBE,EAAS,oBAAoB,MAAMc,EAAM,iBAAiB,GAGhHd,EAAS,aAAa,KAAK,MAAM2B,GAAW,CAAC;AAAA;AAAA,MAE7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOD,cAAc,SAAS,GAAE;AAExB,YAAI3B,IAAW,KAAK,qBAAqB,SACrCc,IAAQ,KAAK,qBAAqB,MAClCc,KAAgB,MAAM,iBAAiB,OAAO,eAAe,QAAQ,MAAM;AAG/E,QAAI9B,EAAO,yBAAyB,IAAI,MAIxC,EAAE,eAAc,GAEZE,EAAS,mBACZ,EAAE,yBAAwB,GAG3BA,EAAS,QAAQ,KAAK,MAAM4B,GAAc,KAAK,GAE/Cd,EAAM,gBAAgB,GACtBA,EAAM,eAAe,GAGrBhB,EAAO,kBAAkB,MAAM8B,CAAY;AAAA,MAE3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOD,cAAc,SAAS,GAAE;AAExB,YAAI,CAAA9B,EAAO,yBAAyB,IAAI,GAIxC;AAAA,cAAIS,IAAWT,EAAO,qBAAqB,CAAC;AAG5C,UAAIS,KAAY,KAAK,qBAAqB,QAAQ,sBACjD,aAAa,KAAK,qBAAqB,KAAK,cAAc,GAC1D,KAAK,qBAAqB,KAAK,cAAc;AAAA;AAAA,MAG9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQD,qBAAqB,SAASR,GAAa;AAC1C,eAAOA,EAAY,qBAAqB,KAAK,gBAAgB;AAAA,MAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQD,cAAc,SAASA,GAAa;AACnC,eAAQA,EAAY,yBAAyB;AAAA,MAC7C;AAAA,IACH;AAEC,WAAOD;AAAA,EACR;;;;;;;;;;AClgBA,UAAM7B,IAAOC,GAIP2D,IAAQhD;AAId,WAAAO,EAAU,MAAM;AACT,YAAA0C,IAAWhC,EAAO,SAAS,QAAQ,EAAE,QAAQ+B,EAAM,aAAa;AACtE,MAAA5D,EAAK,gBAAgB6D,CAAQ;AAAA,IAAA,CAC7B,GAEDxC,EAAY,MAAM;AACjB,MAAAQ,EAAO,WAAW,MAAM;AAAA,IAAA,CACxB;;;ACND,SAASiC,GAAQC,GAAwB;AACpC,EAAAA,EAAA,UAAU,gBAAgBC,CAAY,GACtCD,EAAA,UAAU,aAAaE,CAAS,GAChCF,EAAA,UAAU,mBAAmBG,CAAe,GAC5CH,EAAA,UAAU,WAAWI,CAAO,GAC5BJ,EAAA,UAAU,aAAaK,CAAS,GAChCL,EAAA,UAAU,aAAaM,CAAS,GAChCN,EAAA,UAAU,cAAcO,EAAU,GAClCP,EAAA,UAAU,YAAYQ,CAAQ,GAC9BR,EAAA,UAAU,YAAYS,EAAQ,GAC9BT,EAAA,UAAU,UAAUU,EAAM,GAC1BV,EAAA,UAAU,aAAaW,EAAS;AACrC;","x_google_ignoreList":[7]}
1
+ {"version":3,"file":"beam.js","sources":["../src/components/ActionFooter.vue","../src/components/Confirm.vue","../src/components/ItemCheck.vue","../src/components/ItemCount.vue","../src/components/ListItem.vue","../src/components/ListView.vue","../src/components/Navbar.vue","../../common/temp/node_modules/.pnpm/onscan.js@1.5.2/node_modules/onscan.js/onscan.js","../src/components/ScanInput.vue","../src/index.ts"],"sourcesContent":["<template>\n\t<footer class=\"beam__actionfooter\">\n\t\t<span class=\"footer-action-wrapper\">\n\t\t\t<button class=\"footer-action btn\" @click=\"handleFooterAction\">\n\t\t\t\t<slot />\n\t\t\t</button>\n\t\t</span>\n\t</footer>\n</template>\n\n<script setup lang=\"ts\">\nconst emit = defineEmits<{ click: [] }>()\n\nconst handleFooterAction = () => {\n\temit('click')\n}\n</script>\n","<template>\n\t<div class=\"beam__modal-confirm\">\n\t\t<h2>Would you like to continue?</h2>\n\t\t<button class=\"btn\" @click=\"$emit('confirmmodal')\">Yes</button>\n\t\t<button class=\"btn\" @click=\"$emit('closemodal')\">No</button>\n\t</div>\n</template>\n","<template>\n\t<label class=\"container\">\n\t\t<input type=\"checkbox\" v-model=\"value\" tabindex=\"-1\" />\n\t\t<div class=\"checkmark\" tabindex=\"0\"></div>\n\t</label>\n</template>\n\n<script setup lang=\"ts\">\nconst value = defineModel<boolean>({ default: false })\n</script>\n\n<style scoped>\n.container {\n\tdisplay: block;\n\tposition: relative;\n\tpadding-left: 2.5ch;\n\tmargin: 0;\n\tmargin-top: 0.5rem;\n\tcursor: pointer;\n\tfont-size: 2rem;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n/* hide default checkbox */\n.container input {\n\tposition: absolute;\n\topacity: 0;\n\tcursor: pointer;\n\theight: 0;\n\twidth: 0;\n}\n\n.checkmark {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\theight: 2rem;\n\twidth: 2rem;\n\tbackground-color: #eee;\n\toutline: 2px solid transparent;\n\tborder: 1px solid var(--highlight);\n}\n\n.container:hover input ~ .checkmark {\n\tbackground-color: white;\n}\n\n.container input:checked ~ .checkmark {\n\tbackground-color: var(--brand-secondary);\n}\n\n.checkmark:after {\n\tcontent: '';\n\tposition: absolute;\n\tdisplay: none;\n}\n\n.container input:checked ~ .checkmark:after {\n\tdisplay: block;\n}\n\n.container .checkmark:after {\n\tleft: 25%;\n\ttop: 50%;\n\twidth: 0.5rem;\n\theight: 1rem;\n\tborder: solid var(--text-color);\n\tborder-width: 0 3px 3px 0;\n\t-webkit-transform: rotate(45deg);\n\t-ms-transform: rotate(45deg);\n\ttransform: rotate(45deg) translate(-50%, -50%);\n}\n</style>\n","<template>\n\t<div class=\"beam__itemcount\">\n\t\t<span :contenteditable=\"editable\" :class=\"{ alert: !isCountComplete }\" @input=\"handleInput\" @click=\"handleInput\">\n\t\t\t{{ count }}\n\t\t</span>\n\t\t<span>/{{ denominator }}</span>\n\t\t<span v-if=\"uom\">&nbsp; {{ uom }}</span>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst count = defineModel<number>({ required: true })\nconst {\n\tdenominator,\n\tuom = '',\n\teditable = true,\n} = defineProps<{\n\tdenominator: number\n\tuom?: string\n\teditable?: boolean\n}>()\n\nconst isCountComplete = computed(() => count.value === denominator)\n\nconst handleInput = (event: InputEvent | MouseEvent) => {\n\tevent.preventDefault()\n\tevent.stopPropagation()\n\tconst newValue = Number((event.target as HTMLElement).innerHTML) || 0\n\tcount.value = Math.min(newValue, denominator)\n}\n</script>\n","<template>\n\t<li tabindex=\"0\" class=\"beam__listitem\">\n\t\t<div class=\"beam__listtext\">\n\t\t\t<label>{{ listItem.label }}</label>\n\t\t\t<p>{{ listItem.description }}</p>\n\t\t</div>\n\n\t\t<ItemCount\n\t\t\tv-if=\"listItem.count\"\n\t\t\tv-model=\"listItem.count.count\"\n\t\t\t:denominator=\"listItem.count.of\"\n\t\t\t:uom=\"listItem.count.uom\"\n\t\t\t:editable=\"true\" />\n\t\t<ItemCheck v-if=\"listItem.hasOwnProperty('checked')\" v-model=\"listItem.checked\" />\n\t</li>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport ItemCount from '@/components/ItemCount.vue'\nimport ItemCheck from '@/components/ItemCheck.vue'\n\nconst { item } = defineProps<{\n\titem: {\n\t\tlabel: string\n\t\tdescription: string\n\t\tcount?: {\n\t\t\tcount: number\n\t\t\tof: number\n\t\t\tuom: string\n\t\t}\n\t\tchecked?: boolean\n\t}\n}>()\n\nconst listItem = ref(item)\n</script>\n","<template>\n\t<ul class=\"beam__listview\">\n\t\t<li v-for=\"item in items\" :key=\"item.label\">\n\t\t\t<template v-if=\"item.linkComponent\">\n\t\t\t\t<component :is=\"item.linkComponent\" :to=\"item.route\" tabindex=\"-1\">\n\t\t\t\t\t<ListItem :item=\"item\"></ListItem>\n\t\t\t\t</component>\n\t\t\t</template>\n\t\t\t<template v-else>\n\t\t\t\t<ListItem :item=\"item\"></ListItem>\n\t\t\t</template>\n\t\t</li>\n\t</ul>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, onUnmounted } from 'vue'\n\nimport ListItem from '@/components/ListItem.vue'\n\ndefineProps<{\n\titems: {\n\t\tlabel: string\n\t\tdescription: string\n\t\tcount?: {\n\t\t\tcount: number\n\t\t\tof: number\n\t\t\tuom: string\n\t\t}\n\t\tchecked?: boolean\n\t\tlinkComponent?: string\n\t\troute?: string\n\t}[]\n}>()\n\nconst emit = defineEmits<{ scrollbottom: [] }>()\n\nonMounted(() => {\n\twindow.addEventListener('scroll', handleScroll)\n})\n\nonUnmounted(() => {\n\twindow.removeEventListener('scroll', handleScroll)\n})\n\nconst handleScroll = () => {\n\tconst scrollHeightDifference = document.documentElement.scrollHeight - window.innerHeight\n\tconst scrollposition = document.documentElement.scrollTop\n\tif (scrollHeightDifference - scrollposition <= 2) {\n\t\temit('scrollbottom')\n\t}\n}\n</script>\n","<template>\n\t<nav class=\"beam__navbar\">\n\t\t<slot name=\"title\">\n\t\t\t<h1 class=\"nav-title\">TITLE</h1>\n\t\t</slot>\n\t\t<div class=\"navbar-action-wrapper\">\n\t\t\t<button class=\"navbar-action btn\" @click=\"handlePrimaryAction\">\n\t\t\t\t<slot name=\"navbaraction\">Action</slot>\n\t\t\t</button>\n\t\t</div>\n\t</nav>\n</template>\n\n<script setup lang=\"ts\">\nconst emit = defineEmits<{ click: [] }>()\n\nconst handlePrimaryAction = () => {\n\temit('click')\n}\n</script>\n","/*\n * onScan.js - scan-events for hardware barcodes scanners in javascript\n */\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory()) :\n global.onScan = factory()\n}(this, (function () {\n\tvar onScan = {\t\n\t\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @param Object oOptions\n\t\t * @return self\n\t\t */\n\t\tattachTo: function(oDomElement, oOptions) {\n\t\n\t\t\tif(oDomElement.scannerDetectionData !== undefined){\n\t\t\t\tthrow new Error(\"onScan.js is already initialized for DOM element \" + oDomElement);\n\t\t\t}\n\t\n\t\t\tvar oDefaults = {\n\t\t\t\tonScan: function(sScanned, iQty){}, // Callback after detection of a successfull scanning: function(){sScancode, iCount)}()\n\t\t\t\tonScanError: function(oDebug){}, // Callback after detection of a unsuccessfull scanning (scanned string in parameter)\n\t\t\t\tonKeyProcess: function(sChar, oEvent){}, // Callback after receiving and processing a char (scanned char in parameter)\n\t\t\t\tonKeyDetect: function(iKeyCode, oEvent){}, // Callback after detecting a keyDown (key char in parameter) - in contrast to onKeyProcess, this fires for non-character keys like tab, arrows, etc. too!\n\t\t\t\tonPaste: function(sPasted, oEvent){}, // Callback after receiving a value on paste, no matter if it is a valid code or not\n\t\t\t\tkeyCodeMapper: function(oEvent) {return onScan.decodeKeyEvent(oEvent)}, // Custom function to decode a keydown event into a character. Must return decoded character or NULL if the given event should not be processed.\n\t\t\t\tonScanButtonLongPress: function(){}, // Callback after detection of a successfull scan while the scan button was pressed and held down\n\t\t\t\tscanButtonKeyCode:false, // Key code of the scanner hardware button (if the scanner button a acts as a key itself) \n\t\t\t\tscanButtonLongPressTime:500, // How long (ms) the hardware button should be pressed, until a callback gets executed\n\t\t\t\ttimeBeforeScanTest:100, // Wait duration (ms) after keypress event to check if scanning is finished\n\t\t\t\tavgTimeByChar:30, // Average time (ms) between 2 chars. Used to do difference between keyboard typing and scanning\n\t\t\t\tminLength:6, // Minimum length for a scanning\n\t\t\t\tsuffixKeyCodes:[9,13], // Chars to remove and means end of scanning\n\t\t\t\tprefixKeyCodes:[], // Chars to remove and means start of scanning\n\t\t\t\tignoreIfFocusOn:false, // do not handle scans if the currently focused element matches this selector or object\n\t\t\t\tstopPropagation:false, // Stop immediate propagation on keypress event\n\t\t\t\tpreventDefault:false, // Prevent default action on keypress event\n\t\t\t\tcaptureEvents:false, // Get the events before any listeners deeper in the DOM\n\t\t\t\treactToKeydown:true, // look for scan input in keyboard events\n\t\t\t\treactToPaste:false, // look for scan input in paste events\n\t\t\t\tsingleScanQty: 1, // Quantity of Items put out to onScan in a single scan\n\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\toOptions = this._mergeOptions(oDefaults, oOptions);\n\t\n\t\t\t// initializing options and variables on DomElement\n\t\t\toDomElement.scannerDetectionData = {\n\t\t\t\t\toptions: oOptions,\n\t\t\t\t\tvars:{\n\t\t\t\t\t\tfirstCharTime: 0,\n\t\t\t\t\t\tlastCharTime: 0,\n\t\t\t\t\t\taccumulatedString: '',\n\t\t\t\t\t\ttestTimer: false,\n\t\t\t\t\t\tlongPressTimeStart: 0,\n\t\t\t\t\t\tlongPressed: false\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t};\n\t\t\t\n\t\t\t// initializing handlers (based on settings)\n\t\t\tif (oOptions.reactToPaste === true){\n\t\t\t\toDomElement.addEventListener(\"paste\", this._handlePaste, oOptions.captureEvents);\n\t\t\t}\n\t\t\tif (oOptions.scanButtonKeyCode !== false){\n\t\t\t\toDomElement.addEventListener(\"keyup\", this._handleKeyUp, oOptions.captureEvents);\n\t\t\t}\n\t\t\tif (oOptions.reactToKeydown === true || oOptions.scanButtonKeyCode !== false){\t\n\t\t\t\toDomElement.addEventListener(\"keydown\", this._handleKeyDown, oOptions.captureEvents);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @return void\n\t\t */\n\t\tdetachFrom: function(oDomElement) {\n\t\t\t// detaching all used events\n\t\t\tif (oDomElement.scannerDetectionData.options.reactToPaste){\n\t\t\t\toDomElement.removeEventListener(\"paste\", this._handlePaste);\n\t\t\t}\n\t\t\tif (oDomElement.scannerDetectionData.options.scanButtonKeyCode !== false){\n\t\t\t\toDomElement.removeEventListener(\"keyup\", this._handleKeyUp);\n\t\t\t}\n\t\t\toDomElement.removeEventListener(\"keydown\", this._handleKeyDown);\n\t\t\t\n\t\t\t// clearing data off DomElement\n\t\t\toDomElement.scannerDetectionData = undefined; \n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @return Object\n\t\t */\n\t\tgetOptions: function(oDomElement){\n\t\t\treturn oDomElement.scannerDetectionData.options;\t\t\t\n\t\t},\n\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @param Object oOptions\n\t\t * @return self\n\t\t */\n\t\tsetOptions: function(oDomElement, oOptions){\n\t\t\t// check if some handlers need to be changed based on possible option changes\n\t\t\tswitch (oDomElement.scannerDetectionData.options.reactToPaste){\n\t\t\t\tcase true: \n\t\t\t\t\tif (oOptions.reactToPaste === false){\n\t\t\t\t\t\toDomElement.removeEventListener(\"paste\", this._handlePaste);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase false:\n\t\t\t\t\tif (oOptions.reactToPaste === true){\n\t\t\t\t\t\toDomElement.addEventListener(\"paste\", this._handlePaste);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tswitch (oDomElement.scannerDetectionData.options.scanButtonKeyCode){\n\t\t\t\tcase false:\n\t\t\t\t\tif (oOptions.scanButtonKeyCode !== false){\n\t\t\t\t\t\toDomElement.addEventListener(\"keyup\", this._handleKeyUp);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: \n\t\t\t\t\tif (oOptions.scanButtonKeyCode === false){\n\t\t\t\t\t\toDomElement.removeEventListener(\"keyup\", this._handleKeyUp);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\t// merge old and new options\n\t\t\toDomElement.scannerDetectionData.options = this._mergeOptions(oDomElement.scannerDetectionData.options, oOptions);\n\t\t\n\t\t\t// reinitiallize\n\t\t\tthis._reinitialize(oDomElement);\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Transforms key codes into characters.\n\t\t * \n\t\t * By default, only the follwing key codes are taken into account\n\t\t * - 48-90 (letters and regular numbers)\n\t\t * - 96-105 (numeric keypad numbers)\n\t\t * - 106-111 (numeric keypad operations)\n\t\t * \n\t\t * All other keys will yield empty strings!\n\t\t * \n\t\t * The above keycodes will be decoded using the KeyboardEvent.key property on modern\n\t\t * browsers. On older browsers the method will fall back to String.fromCharCode()\n\t\t * putting the result to upper/lower case depending on KeyboardEvent.shiftKey if\n\t\t * it is set.\n\t\t * \n\t\t * @param KeyboardEvent oEvent\n\t\t * @return string\n\t\t */\n\t\tdecodeKeyEvent : function (oEvent) {\n\t\t\tvar iCode = this._getNormalizedKeyNum(oEvent);\n\t\t\tswitch (true) {\n\t\t\t\tcase iCode >= 48 && iCode <= 90: // numbers and letters\n\t\t\t\tcase iCode >= 106 && iCode <= 111: // operations on numeric keypad (+, -, etc.)\n\t\t\t\t\tif (oEvent.key !== undefined && oEvent.key !== '') {\n\t\t\t\t\t\treturn oEvent.key;\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\tvar sDecoded = String.fromCharCode(iCode);\n\t\t\t\t\tswitch (oEvent.shiftKey) {\n\t\t\t\t\t\tcase false: sDecoded = sDecoded.toLowerCase(); break;\n\t\t\t\t\t\tcase true: sDecoded = sDecoded.toUpperCase(); break;\n\t\t\t\t\t}\n\t\t\t\t\treturn sDecoded;\n\t\t\t\tcase iCode >= 96 && iCode <= 105: // numbers on numeric keypad\n\t\t\t\t\treturn 0+(iCode-96);\n\t\t\t}\n\t\t\treturn '';\n\t\t},\n\t\t\n\t\t/**\n\t\t * Simulates a scan of the provided code.\n\t *\n\t\t * The scan code can be defined as\n\t\t * - a string - in this case no keyCode decoding is done and the code is merely validated\n\t\t * against constraints like minLenght, etc.\n\t\t * - an array of keyCodes (e.g. `[70,71,80]`) - will produce `keydown` events with corresponding\n\t\t * `keyCode` properties. NOTE: these events will have empty `key` properties, so decoding may\n\t\t * yield different results than with native events.\n\t\t * - an array of objects (e.g. `[{keyCode: 70, key: \"F\", shiftKey: true}, {keyCode: 71, key: \"g\"}]`) -\n\t\t * this way almost any event can be simulated, but it's a lot of work to do.\n\t\t *\n\t\t * @param DomElement oDomElement\n\t\t * @param string|array mStringOrArray\n\t\t * @return self\n\t\t */\n\t\tsimulate: function(oDomElement, mStringOrArray){\n\t\t\tthis._reinitialize(oDomElement);\n\t\t\tif (Array.isArray(mStringOrArray)){\n\t\t\t\tmStringOrArray.forEach(function(mKey){\n\t\t\t\t\tvar oEventProps = {};\n\t\t\t\t\tif( (typeof mKey === \"object\" || typeof mKey === 'function') && (mKey !== null) ) {\n\t\t\t\t\t\toEventProps = mKey;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toEventProps.keyCode = parseInt(mKey);\n\t\t\t\t\t}\n\t\t\t\t\tvar oEvent = new KeyboardEvent('keydown', oEventProps);\n\t\t\t\t\tdocument.dispatchEvent(oEvent);\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis._validateScanCode(oDomElement, mStringOrArray);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param DomElement oDomElement\n\t\t * @return void\n\t\t */\n\t\t_reinitialize: function(oDomElement){\n\t\t\tvar oVars = oDomElement.scannerDetectionData.vars;\n\t\t\toVars.firstCharTime = 0;\n\t\t\toVars.lastCharTime = 0;\n\t\t\toVars.accumulatedString = '';\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param DomElement oDomElement\n\t * @return boolean\n\t\t */\n\t\t_isFocusOnIgnoredElement: function(oDomElement){\n\t\t\t\n\t\t\tvar ignoreSelectors = oDomElement.scannerDetectionData.options.ignoreIfFocusOn;\n\t\n\t if(!ignoreSelectors){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\n\t\t\tvar oFocused = document.activeElement;\n\t\t\t\n\t\t\t// checks if ignored element is an array, and if so it checks if one of the elements of it is an active one\n\t\t\tif (Array.isArray(ignoreSelectors)){\n\t\t\t\tfor(var i=0; i<ignoreSelectors.length; i++){\n\t\t\t\t\tif(oFocused.matches(ignoreSelectors[i]) === true){\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t// if the option consists of an single element, it only checks this one\n\t\t\t} else if (oFocused.matches(ignoreSelectors)){\n\t\t\t\treturn true;\t\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t// if the active element is not listed in the ignoreIfFocusOn option, return false\n\t\t return false;\n\t },\n\t\t\n\t /**\n\t * Validates the scan code accumulated by the given DOM element and fires the respective events.\n\t * \n\t * @private\n\t * @param DomElement oDomElement\n\t * @return boolean\n\t */\n\t\t_validateScanCode: function(oDomElement, sScanCode){\n\t\t\tvar oScannerData = oDomElement.scannerDetectionData;\t\t\t\n\t\t\tvar oOptions = oScannerData.options;\n\t\t\tvar iSingleScanQty = oScannerData.options.singleScanQty;\n\t\t\tvar iFirstCharTime = oScannerData.vars.firstCharTime;\n\t\t\tvar iLastCharTime = oScannerData.vars.lastCharTime;\n\t\t\tvar oScanError = {};\n\t var oEvent;\n\t \n\t\t\tswitch(true){\n\t\t\t\t\n\t\t\t\t// detect codes that are too short\n\t\t\t\tcase (sScanCode.length < oOptions.minLength):\n\t\t\t\t\toScanError = {\n\t\t\t\t\t\tmessage: \"Receieved code is shorter then minimal length\"\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// detect codes that were entered too slow\t\n\t\t\t\tcase ((iLastCharTime - iFirstCharTime) > (sScanCode.length * oOptions.avgTimeByChar)):\n\t\t\t\t\toScanError = {\n\t\t\t\t\t\tmessage: \"Receieved code was not entered in time\"\n\t\t\t\t\t};\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// if a code was not filtered out earlier it is valid\t\n\t\t\t\tdefault:\n\t\t\t\t\toOptions.onScan.call(oDomElement, sScanCode, iSingleScanQty);\n\t\t\t\t\toEvent = new CustomEvent(\n\t\t\t\t\t\t'scan',\n\t\t\t\t\t\t{\t\n\t\t\t\t\t\t\tdetail: { \n\t\t\t\t\t\t\t\tscanCode: sScanCode,\n\t\t\t\t\t\t\t\tqty: iSingleScanQty\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\toDomElement.dispatchEvent(oEvent);\n\t\t\t\t\tonScan._reinitialize(oDomElement);\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\t\n\t\t\t// If an error occurred (otherwise the method would return earlier) create an object for errordetection\n\t\t\toScanError.scanCode = sScanCode;\n\t\t\toScanError.scanDuration = iLastCharTime - iFirstCharTime;\n\t\t\toScanError.avgTimeByChar = oOptions.avgTimeByChar;\n\t\t\toScanError.minLength = oOptions.minLength;\n\t\t\t\n\t\t\toOptions.onScanError.call(oDomElement, oScanError);\n\t\t\t\n\t\t\toEvent = new CustomEvent(\n\t\t\t\t'scanError', \n\t\t\t\t{detail: oScanError}\n\t\t\t);\n\t\t\toDomElement.dispatchEvent(oEvent);\n\t\t\t\n\t\t\tonScan._reinitialize(oDomElement);\n\t\t\treturn false;\n\t },\n\t\n\t /**\n\t * @private\n\t * @param Object oDefaults\n\t * @param Object oOptions\n\t * @return Object\n\t */\n\t\t_mergeOptions: function(oDefaults, oOptions){\n\t\t\tvar oExtended = {};\n\t\t\tvar prop;\n\t\t\tfor (prop in oDefaults){\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(oDefaults, prop)){\n\t\t\t\t\toExtended[prop] = oDefaults[prop];\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t\tfor (prop in oOptions){\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(oOptions, prop)){\n\t\t\t\t\toExtended[prop] = oOptions[prop];\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t\treturn oExtended;\n\t\t},\n\t\n\t\t/**\n\t\t * @private\n\t\t * @param KeyboardEvent e\n\t\t * @return int\n\t\t * @see https://www.w3schools.com/jsref/event_key_keycode.asp\n\t\t */\n\t\t_getNormalizedKeyNum: function(e){\n\t\t\treturn e.which || e.keyCode;\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * @private\n\t\t * @param KeyboardEvent e\n\t\t * @return void\n\t\t */\n\t\t_handleKeyDown: function(e){\n\t\t\tvar iKeyCode = onScan._getNormalizedKeyNum(e);\n\t\t\tvar oOptions = this.scannerDetectionData.options;\n\t\t\tvar oVars = this.scannerDetectionData.vars;\n\t\t\tvar bScanFinished = false;\n\t\t\t\n\t\t\tif (oOptions.onKeyDetect.call(this, iKeyCode, e) === false) {\n\t\t\t\treturn;\n\t\t\t}\t\t\n\t\t\t\n\t\t\tif (onScan._isFocusOnIgnoredElement(this)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\t\t\t\n\t // If it's just the button of the scanner, ignore it and wait for the real input\n\t\t if(oOptions.scanButtonKeyCode !== false && iKeyCode==oOptions.scanButtonKeyCode) {\n\t\t\t\t\n\t\t\t\t// if the button was first pressed, start a timeout for the callback, which gets interrupted if the scanbutton gets released\n\t\t\t\tif (!oVars.longPressed){\n\t\t\t\t\toVars.longPressTimer = setTimeout( oOptions.onScanButtonLongPress, oOptions.scanButtonLongPressTime, this);\n\t\t\t\t\toVars.longPressed = true;\n\t\t\t\t}\n\t\n\t\t\t\treturn;\n\t }\n\t\t\t\n\t\t\tswitch(true){\n\t\t\t\t// If it's not the first character and we encounter a terminating character, trigger scan process\n\t\t\t\tcase (oVars.firstCharTime && oOptions.suffixKeyCodes.indexOf(iKeyCode)!==-1):\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tbScanFinished=true;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// If it's the first character and we encountered one of the starting characters, don't process the scan\t\n\t\t\t\tcase (!oVars.firstCharTime && oOptions.prefixKeyCodes.indexOf(iKeyCode)!==-1):\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tbScanFinished=false;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// Otherwise, just add the character to the scan string we're building\t\n\t\t\t\tdefault:\n\t\t\t\t\tvar character = oOptions.keyCodeMapper.call(this, e);\n\t\t\t\t\tif (character === null){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\toVars.accumulatedString += character;\n\t\t\t\t\t\n\t\t\t\t\tif (oOptions.preventDefault) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tif (oOptions.stopPropagation) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tbScanFinished=false;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t \n\t\t\tif(!oVars.firstCharTime){\n\t\t\t\toVars.firstCharTime=Date.now();\n\t\t\t}\n\t\t\t\n\t\t\toVars.lastCharTime=Date.now();\n\t\n\t\t\tif(oVars.testTimer){ \n\t\t\t\tclearTimeout(oVars.testTimer);\n\t\t\t}\n\t\t\t\n\t\t\tif(bScanFinished){\n\t\t\t\tonScan._validateScanCode(this, oVars.accumulatedString);\n\t\t\t\toVars.testTimer=false;\n\t\t\t} else {\n\t\t\t\toVars.testTimer=setTimeout(onScan._validateScanCode, oOptions.timeBeforeScanTest, this, oVars.accumulatedString);\n\t\t\t}\n\t\n\t\t\toOptions.onKeyProcess.call(this, character, e);\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param Event e\n\t\t * @return void\n\t\t */\n\t\t_handlePaste: function(e){\n\t\n\t\t\tvar oOptions = this.scannerDetectionData.options;\n\t\t\tvar oVars = this.scannerDetectionData.vars;\n\t\t\tvar sPasteString = (event.clipboardData || window.clipboardData).getData('text');\n\t\t\t\n\t\t\t// if the focus is on an ignored element, abort\n\t\t\tif (onScan._isFocusOnIgnoredElement(this)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\te.preventDefault();\n\n\t\t\tif (oOptions.stopPropagation) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\t\t\t\t\t\t\n\t\t\toOptions.onPaste.call(this, sPasteString, event);\n\t\t\t\n\t\t\toVars.firstCharTime = 0;\n\t\t\toVars.lastCharTime = 0;\n\t\t\t\n\t\t\t// validate the string\n\t\t\tonScan._validateScanCode(this, sPasteString);\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param KeyboardEvent e\n\t\t * @return void\n\t\t */\n\t\t_handleKeyUp: function(e){\n\t\t\t// if the focus is on an ignored element, abort\n\t\t\tif (onScan._isFocusOnIgnoredElement(this)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tvar iKeyCode = onScan._getNormalizedKeyNum(e);\n\t\t\t\n\t\t\t// if hardware key is not being pressed anymore stop the timeout and reset\n\t\t\tif (iKeyCode == this.scannerDetectionData.options.scanButtonKeyCode){\n\t\t\t\tclearTimeout(this.scannerDetectionData.vars.longPressTimer);\n\t\t\t\tthis.scannerDetectionData.vars.longPressed = false;\n\t\t\t}\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Returns TRUE the scanner is currently in the middle of a scan sequence.\n\t\t * \n\t\t * @param DomElement\n\t\t * @return boolean\n\t\t */\n\t\tisScanInProgressFor: function(oDomElement) {\n\t\t\treturn oDomElement.scannerDetectionData.vars.firstCharTime > 0;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Returns TRUE if onScan is attached to the given DOM element and FALSE otherwise.\n\t\t * \n\t\t * @param DomElement\n\t\t * @return boolean\n\t\t */\n\t\tisAttachedTo: function(oDomElement) {\n\t\t\treturn (oDomElement.scannerDetectionData !== undefined);\n\t\t}\n\t};\n\t\n\treturn onScan;\n})));","<template>\n\t<div id=\"scan_input\"></div>\n</template>\n\n<script setup lang=\"ts\">\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport onScan from 'onscan.js'\nimport { onMounted, onUnmounted } from 'vue'\n\nconst emit = defineEmits<{ scanInstance: [instance: onScan] }>()\nconst props = defineProps<{\n\tscanHandler: (barcode: string, qty: number) => void\n}>()\n\nonMounted(() => {\n\tconst instance = onScan.attachTo(window, { onScan: props.scanHandler })\n\temit('scanInstance', instance)\n})\n\nonUnmounted(() => {\n\tonScan.detachFrom(window)\n})\n</script>\n","import { App } from 'vue'\n\nimport ActionFooter from '@/components/ActionFooter.vue'\nimport BeamModal from '@/components/BeamModal.vue'\nimport BeamModalOutlet from '@/components/BeamModalOutlet.vue'\nimport Confirm from '@/components/Confirm.vue'\nimport ItemCheck from '@/components/ItemCheck.vue'\nimport ItemCount from '@/components/ItemCount.vue'\nimport ListAnchor from '@/components/ListAnchor.vue'\nimport ListItem from '@/components/ListItem.vue'\nimport ListView from '@/components/ListView.vue'\nimport Navbar from '@/components/Navbar.vue'\nimport ScanInput from '@/components/ScanInput.vue'\nimport 'themes/beam.css'\n\n/**\n * Install all Beam components\n * @param app - Vue app instance\n * @public\n */\nfunction install(app: App /* options */) {\n\tapp.component('ActionFooter', ActionFooter)\n\tapp.component('BeamModal', BeamModal)\n\tapp.component('BeamModalOutlet', BeamModalOutlet)\n\tapp.component('Confirm', Confirm)\n\tapp.component('ItemCheck', ItemCheck)\n\tapp.component('ItemCount', ItemCount)\n\tapp.component('ListAnchor', ListAnchor)\n\tapp.component('ListItem', ListItem)\n\tapp.component('ListView', ListView)\n\tapp.component('Navbar', Navbar)\n\tapp.component('ScanInput', ScanInput)\n}\n\nexport {\n\tActionFooter,\n\tBeamModal,\n\tBeamModalOutlet,\n\tConfirm,\n\tItemCheck,\n\tItemCount,\n\tListAnchor,\n\tListItem,\n\tListView,\n\tNavbar,\n\tScanInput,\n\tinstall,\n}\n"],"names":["emit","__emit","handleFooterAction","_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","$event","value","_useModel","__props","count","isCountComplete","computed","handleInput","event","newValue","listItem","ref","onMounted","handleScroll","onUnmounted","scrollHeightDifference","scrollposition","handlePrimaryAction","global","factory","module","this","onScan","oDomElement","oOptions","oDefaults","sScanned","iQty","oDebug","sChar","oEvent","iKeyCode","sPasted","iCode","sDecoded","mStringOrArray","mKey","oEventProps","oVars","ignoreSelectors","oFocused","i","sScanCode","oScannerData","iSingleScanQty","iFirstCharTime","iLastCharTime","oScanError","oExtended","prop","bScanFinished","character","sPasteString","props","instance","install","app","ActionFooter","BeamModal","BeamModalOutlet","Confirm","ItemCheck","ItemCount","ListAnchor","ListItem","ListView","Navbar","ScanInput"],"mappings":"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","x_google_ignoreList":[7]}
@@ -1 +1 @@
1
- {"version":"5.5.2"}
1
+ {"version":"5.6.2"}
package/dist/beam.umd.cjs CHANGED
@@ -1,2 +1,2 @@
1
- (function(c,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],t):(c=typeof globalThis<"u"?globalThis:c||self,t(c["@stonecrop/beam"]={},c.Vue))})(this,function(c,t){"use strict";const D={class:"beam__actionfooter"},P={class:"footer-action-wrapper"},_=t.defineComponent({__name:"ActionFooter",emits:["click"],setup(s,{emit:i}){const r=i,e=()=>{r("click")};return(n,a)=>(t.openBlock(),t.createElementBlock("footer",D,[t.createElementVNode("span",P,[t.createElementVNode("button",{class:"footer-action btn",onClick:e},[t.renderSlot(n.$slots,"default")])])]))}}),$={class:"beam__modal"},y=t.defineComponent({__name:"BeamModal",props:{showModal:{type:Boolean}},setup(s){return(i,r)=>{const e=t.resolveComponent("portal");return t.openBlock(),t.createBlock(e,{to:"beam__modal_outlet"},{default:t.withCtx(()=>[t.withDirectives(t.createElementVNode("div",$,[t.createElementVNode("button",{class:"btn",onClick:r[0]||(r[0]=n=>i.$emit("closemodal"))},"Close Modal"),t.renderSlot(i.$slots,"default",{onClosemodal:r[1]||(r[1]=n=>i.$emit("closemodal")),onConfirmmodal:r[2]||(r[2]=n=>i.$emit("confirmmodal"))})],512),[[t.vShow,i.showModal]])]),_:3})}}}),k=t.defineComponent({__name:"BeamModalOutlet",setup(s){return(i,r)=>{const e=t.resolveComponent("portal-target");return t.openBlock(),t.createBlock(e,{name:"beam__modal_outlet"})}}}),C=(s,i)=>{const r=s.__vccOpts||s;for(const[e,n]of i)r[e]=n;return r},K={},N={class:"beam__modal-confirm"};function V(s,i){return t.openBlock(),t.createElementBlock("div",N,[i[2]||(i[2]=t.createElementVNode("h2",null,"Would you like to continue?",-1)),t.createElementVNode("button",{class:"btn",onClick:i[0]||(i[0]=r=>s.$emit("confirmmodal"))},"Yes"),t.createElementVNode("button",{class:"btn",onClick:i[1]||(i[1]=r=>s.$emit("closemodal"))},"No")])}const g=C(K,[["render",V]]),I={class:"container"},L=["checked"],p=C(t.defineComponent({__name:"ItemCheck",props:{value:{type:Boolean}},emits:["input"],setup(s,{emit:i}){const r=i,e=t.ref(s.value),n=()=>{r("input",e.value)};return(a,o)=>(t.openBlock(),t.createElementBlock("label",I,[t.createElementVNode("input",{type:"checkbox",checked:a.value,onInput:n,tabindex:"-1"},null,40,L),o[0]||(o[0]=t.createElementVNode("div",{class:"checkmark",tabindex:"0"},null,-1))]))}}),[["__scopeId","data-v-914c0391"]]),F={class:"beam__itemcount"},M=["contenteditable"],A={key:0},h=t.defineComponent({__name:"ItemCount",props:{value:{default:0},denominator:{},uom:{default:""},editable:{type:Boolean,default:!0}},emits:["input"],setup(s,{emit:i}){const r=i,e=t.ref(s.value),n=o=>{o.preventDefault(),o.stopPropagation(),e.value=Number(o.target.innerHTML.replace(/[^0-9]/g,"")),r("input",e.value)},a=t.computed(()=>e.value===s.denominator);return(o,l)=>(t.openBlock(),t.createElementBlock("div",F,[t.createElementVNode("span",{contenteditable:o.editable,class:t.normalizeClass({alert:a.value===!1}),onInput:n,onClick:n},t.toDisplayString(e.value),43,M),t.createElementVNode("span",null,"/"+t.toDisplayString(o.denominator),1),o.uom?(t.openBlock(),t.createElementBlock("span",A,"  "+t.toDisplayString(o.uom),1)):t.createCommentVNode("",!0)]))}}),O=["href"],b=t.defineComponent({__name:"ListAnchor",props:{to:{default:""}},setup(s){return(i,r)=>(t.openBlock(),t.createElementBlock("a",{href:i.to,class:"beam__listanchor"},[t.renderSlot(i.$slots,"default")],8,O))}}),z={tabindex:"0",class:"beam__listitem"},U={class:"beam__listtext"},f=t.defineComponent({__name:"ListItem",props:{item:{}},setup(s){const i=t.ref(s.item);return(r,e)=>(t.openBlock(),t.createElementBlock("li",z,[t.createElementVNode("div",U,[t.createElementVNode("label",null,t.toDisplayString(r.item.label),1),t.createElementVNode("p",null,t.toDisplayString(r.item.description),1)]),r.item.count?(t.openBlock(),t.createBlock(h,{key:0,modelValue:i.value.count.count,"onUpdate:modelValue":e[0]||(e[0]=n=>i.value.count.count=n),denominator:r.item.count.of,uom:r.item.count.uom,editable:!0},null,8,["modelValue","denominator","uom"])):t.createCommentVNode("",!0),r.item.hasOwnProperty("checked")?(t.openBlock(),t.createBlock(p,{key:1,modelValue:i.value.checked,"onUpdate:modelValue":e[1]||(e[1]=n=>i.value.checked=n)},null,8,["modelValue"])):t.createCommentVNode("",!0)]))}}),j={class:"beam__listview"},B=t.defineComponent({__name:"ListView",props:{items:{}},emits:["scrollbottom"],setup(s,{emit:i}){const r=i;t.onMounted(()=>{window.addEventListener("scroll",e)}),t.onUnmounted(()=>{window.removeEventListener("scroll",e)});const e=()=>{const n=document.documentElement.scrollHeight-window.innerHeight,a=document.documentElement.scrollTop;n-a<=2&&r("scrollbottom")};return(n,a)=>(t.openBlock(),t.createElementBlock("ul",j,[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(n.items,o=>(t.openBlock(),t.createElementBlock("li",{key:o.label},[o.linkComponent?(t.openBlock(),t.createBlock(t.resolveDynamicComponent(o.linkComponent),{key:0,to:o.route,tabindex:"-1"},{default:t.withCtx(()=>[t.createVNode(f,{item:o},null,8,["item"])]),_:2},1032,["to"])):(t.openBlock(),t.createBlock(f,{key:1,item:o},null,8,["item"]))]))),128))]))}}),H={class:"beam__navbar"},Q={class:"navbar-action-wrapper"},T=t.defineComponent({__name:"Navbar",emits:["click"],setup(s,{emit:i}){const r=i,e=()=>{r("click")};return(n,a)=>(t.openBlock(),t.createElementBlock("nav",H,[t.renderSlot(n.$slots,"title",{},()=>[a[0]||(a[0]=t.createElementVNode("h1",{class:"nav-title"},"TITLE",-1))]),t.createElementVNode("div",Q,[t.createElementVNode("button",{class:"navbar-action btn",onClick:e},[t.renderSlot(n.$slots,"navbaraction",{},()=>[a[1]||(a[1]=t.createTextVNode("Action"))])])])]))}});var q=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function R(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var w={exports:{}};(function(s,i){(function(r,e){s.exports=e()})(q,function(){var r={attachTo:function(e,n){if(e.scannerDetectionData!==void 0)throw new Error("onScan.js is already initialized for DOM element "+e);var a={onScan:function(o,l){},onScanError:function(o){},onKeyProcess:function(o,l){},onKeyDetect:function(o,l){},onPaste:function(o,l){},keyCodeMapper:function(o){return r.decodeKeyEvent(o)},onScanButtonLongPress:function(){},scanButtonKeyCode:!1,scanButtonLongPressTime:500,timeBeforeScanTest:100,avgTimeByChar:30,minLength:6,suffixKeyCodes:[9,13],prefixKeyCodes:[],ignoreIfFocusOn:!1,stopPropagation:!1,preventDefault:!1,captureEvents:!1,reactToKeydown:!0,reactToPaste:!1,singleScanQty:1};return n=this._mergeOptions(a,n),e.scannerDetectionData={options:n,vars:{firstCharTime:0,lastCharTime:0,accumulatedString:"",testTimer:!1,longPressTimeStart:0,longPressed:!1}},n.reactToPaste===!0&&e.addEventListener("paste",this._handlePaste,n.captureEvents),n.scanButtonKeyCode!==!1&&e.addEventListener("keyup",this._handleKeyUp,n.captureEvents),(n.reactToKeydown===!0||n.scanButtonKeyCode!==!1)&&e.addEventListener("keydown",this._handleKeyDown,n.captureEvents),this},detachFrom:function(e){e.scannerDetectionData.options.reactToPaste&&e.removeEventListener("paste",this._handlePaste),e.scannerDetectionData.options.scanButtonKeyCode!==!1&&e.removeEventListener("keyup",this._handleKeyUp),e.removeEventListener("keydown",this._handleKeyDown),e.scannerDetectionData=void 0},getOptions:function(e){return e.scannerDetectionData.options},setOptions:function(e,n){switch(e.scannerDetectionData.options.reactToPaste){case!0:n.reactToPaste===!1&&e.removeEventListener("paste",this._handlePaste);break;case!1:n.reactToPaste===!0&&e.addEventListener("paste",this._handlePaste);break}switch(e.scannerDetectionData.options.scanButtonKeyCode){case!1:n.scanButtonKeyCode!==!1&&e.addEventListener("keyup",this._handleKeyUp);break;default:n.scanButtonKeyCode===!1&&e.removeEventListener("keyup",this._handleKeyUp);break}return e.scannerDetectionData.options=this._mergeOptions(e.scannerDetectionData.options,n),this._reinitialize(e),this},decodeKeyEvent:function(e){var n=this._getNormalizedKeyNum(e);switch(!0){case(n>=48&&n<=90):case(n>=106&&n<=111):if(e.key!==void 0&&e.key!=="")return e.key;var a=String.fromCharCode(n);switch(e.shiftKey){case!1:a=a.toLowerCase();break;case!0:a=a.toUpperCase();break}return a;case(n>=96&&n<=105):return 0+(n-96)}return""},simulate:function(e,n){return this._reinitialize(e),Array.isArray(n)?n.forEach(function(a){var o={};(typeof a=="object"||typeof a=="function")&&a!==null?o=a:o.keyCode=parseInt(a);var l=new KeyboardEvent("keydown",o);document.dispatchEvent(l)}):this._validateScanCode(e,n),this},_reinitialize:function(e){var n=e.scannerDetectionData.vars;n.firstCharTime=0,n.lastCharTime=0,n.accumulatedString=""},_isFocusOnIgnoredElement:function(e){var n=e.scannerDetectionData.options.ignoreIfFocusOn;if(!n)return!1;var a=document.activeElement;if(Array.isArray(n)){for(var o=0;o<n.length;o++)if(a.matches(n[o])===!0)return!0}else if(a.matches(n))return!0;return!1},_validateScanCode:function(e,n){var a=e.scannerDetectionData,o=a.options,l=a.options.singleScanQty,m=a.vars.firstCharTime,v=a.vars.lastCharTime,d={},u;switch(!0){case n.length<o.minLength:d={message:"Receieved code is shorter then minimal length"};break;case v-m>n.length*o.avgTimeByChar:d={message:"Receieved code was not entered in time"};break;default:return o.onScan.call(e,n,l),u=new CustomEvent("scan",{detail:{scanCode:n,qty:l}}),e.dispatchEvent(u),r._reinitialize(e),!0}return d.scanCode=n,d.scanDuration=v-m,d.avgTimeByChar=o.avgTimeByChar,d.minLength=o.minLength,o.onScanError.call(e,d),u=new CustomEvent("scanError",{detail:d}),e.dispatchEvent(u),r._reinitialize(e),!1},_mergeOptions:function(e,n){var a={},o;for(o in e)Object.prototype.hasOwnProperty.call(e,o)&&(a[o]=e[o]);for(o in n)Object.prototype.hasOwnProperty.call(n,o)&&(a[o]=n[o]);return a},_getNormalizedKeyNum:function(e){return e.which||e.keyCode},_handleKeyDown:function(e){var n=r._getNormalizedKeyNum(e),a=this.scannerDetectionData.options,o=this.scannerDetectionData.vars,l=!1;if(a.onKeyDetect.call(this,n,e)!==!1&&!r._isFocusOnIgnoredElement(this)){if(a.scanButtonKeyCode!==!1&&n==a.scanButtonKeyCode){o.longPressed||(o.longPressTimer=setTimeout(a.onScanButtonLongPress,a.scanButtonLongPressTime,this),o.longPressed=!0);return}switch(!0){case(o.firstCharTime&&a.suffixKeyCodes.indexOf(n)!==-1):e.preventDefault(),e.stopImmediatePropagation(),l=!0;break;case(!o.firstCharTime&&a.prefixKeyCodes.indexOf(n)!==-1):e.preventDefault(),e.stopImmediatePropagation(),l=!1;break;default:var m=a.keyCodeMapper.call(this,e);if(m===null)return;o.accumulatedString+=m,a.preventDefault&&e.preventDefault(),a.stopPropagation&&e.stopImmediatePropagation(),l=!1;break}o.firstCharTime||(o.firstCharTime=Date.now()),o.lastCharTime=Date.now(),o.testTimer&&clearTimeout(o.testTimer),l?(r._validateScanCode(this,o.accumulatedString),o.testTimer=!1):o.testTimer=setTimeout(r._validateScanCode,a.timeBeforeScanTest,this,o.accumulatedString),a.onKeyProcess.call(this,m,e)}},_handlePaste:function(e){var n=this.scannerDetectionData.options,a=this.scannerDetectionData.vars,o=(event.clipboardData||window.clipboardData).getData("text");r._isFocusOnIgnoredElement(this)||(e.preventDefault(),n.stopPropagation&&e.stopImmediatePropagation(),n.onPaste.call(this,o,event),a.firstCharTime=0,a.lastCharTime=0,r._validateScanCode(this,o))},_handleKeyUp:function(e){if(!r._isFocusOnIgnoredElement(this)){var n=r._getNormalizedKeyNum(e);n==this.scannerDetectionData.options.scanButtonKeyCode&&(clearTimeout(this.scannerDetectionData.vars.longPressTimer),this.scannerDetectionData.vars.longPressed=!1)}},isScanInProgressFor:function(e){return e.scannerDetectionData.vars.firstCharTime>0},isAttachedTo:function(e){return e.scannerDetectionData!==void 0}};return r})})(w);var G=w.exports;const E=R(G),W={id:"scan_input"},S=t.defineComponent({__name:"ScanInput",props:{scanHandler:{type:Function}},emits:["scanInstance"],setup(s,{emit:i}){const r=i,e=s;return t.onMounted(()=>{const n=E.attachTo(window,{onScan:e.scanHandler});r("scanInstance",n)}),t.onUnmounted(()=>{E.detachFrom(window)}),(n,a)=>(t.openBlock(),t.createElementBlock("div",W))}});function Y(s){s.component("ActionFooter",_),s.component("BeamModal",y),s.component("BeamModalOutlet",k),s.component("Confirm",g),s.component("ItemCheck",p),s.component("ItemCount",h),s.component("ListAnchor",b),s.component("ListItem",f),s.component("ListView",B),s.component("Navbar",T),s.component("ScanInput",S)}c.ActionFooter=_,c.BeamModal=y,c.BeamModalOutlet=k,c.Confirm=g,c.ItemCheck=p,c.ItemCount=h,c.ListAnchor=b,c.ListItem=f,c.ListView=B,c.Navbar=T,c.ScanInput=S,c.install=Y,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
1
+ (function(c,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(c=typeof globalThis<"u"?globalThis:c||self,e(c["@stonecrop/beam"]={},c.Vue))})(this,function(c,e){"use strict";const D={class:"beam__actionfooter"},P={class:"footer-action-wrapper"},_=e.defineComponent({__name:"ActionFooter",emits:["click"],setup(s,{emit:r}){const i=r,t=()=>{i("click")};return(n,a)=>(e.openBlock(),e.createElementBlock("footer",D,[e.createElementVNode("span",P,[e.createElementVNode("button",{class:"footer-action btn",onClick:t},[e.renderSlot(n.$slots,"default")])])]))}}),V={class:"beam__modal"},y=e.defineComponent({__name:"BeamModal",props:{showModal:{type:Boolean}},setup(s){return(r,i)=>{const t=e.resolveComponent("portal");return e.openBlock(),e.createBlock(t,{to:"beam__modal_outlet"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",V,[e.createElementVNode("button",{class:"btn",onClick:i[0]||(i[0]=n=>r.$emit("closemodal"))},"Close Modal"),e.renderSlot(r.$slots,"default",{onClosemodal:i[1]||(i[1]=n=>r.$emit("closemodal")),onConfirmmodal:i[2]||(i[2]=n=>r.$emit("confirmmodal"))})],512),[[e.vShow,r.showModal]])]),_:3})}}}),C=e.defineComponent({__name:"BeamModalOutlet",emits:["confirmmodal","closemodal"],setup(s){return(r,i)=>{const t=e.resolveComponent("portal-target");return e.openBlock(),e.createBlock(t,{name:"beam__modal_outlet"})}}}),k=(s,r)=>{const i=s.__vccOpts||s;for(const[t,n]of r)i[t]=n;return i},$={},K={class:"beam__modal-confirm"};function N(s,r){return e.openBlock(),e.createElementBlock("div",K,[r[2]||(r[2]=e.createElementVNode("h2",null,"Would you like to continue?",-1)),e.createElementVNode("button",{class:"btn",onClick:r[0]||(r[0]=i=>s.$emit("confirmmodal"))},"Yes"),e.createElementVNode("button",{class:"btn",onClick:r[1]||(r[1]=i=>s.$emit("closemodal"))},"No")])}const g=k($,[["render",N]]),L={class:"container"},p=k(e.defineComponent({__name:"ItemCheck",props:{modelValue:{type:Boolean,default:!1},modelModifiers:{}},emits:["update:modelValue"],setup(s){const r=e.useModel(s,"modelValue");return(i,t)=>(e.openBlock(),e.createElementBlock("label",L,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":t[0]||(t[0]=n=>r.value=n),tabindex:"-1"},null,512),[[e.vModelCheckbox,r.value]]),t[1]||(t[1]=e.createElementVNode("div",{class:"checkmark",tabindex:"0"},null,-1))]))}}),[["__scopeId","data-v-f44a510e"]]),I={class:"beam__itemcount"},M=["contenteditable"],F={key:0},h=e.defineComponent({__name:"ItemCount",props:e.mergeModels({denominator:{},uom:{default:""},editable:{type:Boolean,default:!0}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(s){const r=e.useModel(s,"modelValue"),i=e.computed(()=>r.value===s.denominator),t=n=>{n.preventDefault(),n.stopPropagation();const a=Number(n.target.innerHTML)||0;r.value=Math.min(a,s.denominator)};return(n,a)=>(e.openBlock(),e.createElementBlock("div",I,[e.createElementVNode("span",{contenteditable:n.editable,class:e.normalizeClass({alert:!i.value}),onInput:t,onClick:t},e.toDisplayString(r.value),43,M),e.createElementVNode("span",null,"/"+e.toDisplayString(n.denominator),1),n.uom?(e.openBlock(),e.createElementBlock("span",F,"  "+e.toDisplayString(n.uom),1)):e.createCommentVNode("",!0)]))}}),A=["href"],b=e.defineComponent({__name:"ListAnchor",props:{to:{default:""}},setup(s){return(r,i)=>(e.openBlock(),e.createElementBlock("a",{href:r.to,class:"beam__listanchor"},[e.renderSlot(r.$slots,"default")],8,A))}}),O={tabindex:"0",class:"beam__listitem"},z={class:"beam__listtext"},u=e.defineComponent({__name:"ListItem",props:{item:{}},setup(s){const r=e.ref(s.item);return(i,t)=>(e.openBlock(),e.createElementBlock("li",O,[e.createElementVNode("div",z,[e.createElementVNode("label",null,e.toDisplayString(r.value.label),1),e.createElementVNode("p",null,e.toDisplayString(r.value.description),1)]),r.value.count?(e.openBlock(),e.createBlock(h,{key:0,modelValue:r.value.count.count,"onUpdate:modelValue":t[0]||(t[0]=n=>r.value.count.count=n),denominator:r.value.count.of,uom:r.value.count.uom,editable:!0},null,8,["modelValue","denominator","uom"])):e.createCommentVNode("",!0),r.value.hasOwnProperty("checked")?(e.openBlock(),e.createBlock(p,{key:1,modelValue:r.value.checked,"onUpdate:modelValue":t[1]||(t[1]=n=>r.value.checked=n)},null,8,["modelValue"])):e.createCommentVNode("",!0)]))}}),U={class:"beam__listview"},B=e.defineComponent({__name:"ListView",props:{items:{}},emits:["scrollbottom"],setup(s,{emit:r}){const i=r;e.onMounted(()=>{window.addEventListener("scroll",t)}),e.onUnmounted(()=>{window.removeEventListener("scroll",t)});const t=()=>{const n=document.documentElement.scrollHeight-window.innerHeight,a=document.documentElement.scrollTop;n-a<=2&&i("scrollbottom")};return(n,a)=>(e.openBlock(),e.createElementBlock("ul",U,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.items,o=>(e.openBlock(),e.createElementBlock("li",{key:o.label},[o.linkComponent?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(o.linkComponent),{key:0,to:o.route,tabindex:"-1"},{default:e.withCtx(()=>[e.createVNode(u,{item:o},null,8,["item"])]),_:2},1032,["to"])):(e.openBlock(),e.createBlock(u,{key:1,item:o},null,8,["item"]))]))),128))]))}}),j={class:"beam__navbar"},x={class:"navbar-action-wrapper"},w=e.defineComponent({__name:"Navbar",emits:["click"],setup(s,{emit:r}){const i=r,t=()=>{i("click")};return(n,a)=>(e.openBlock(),e.createElementBlock("nav",j,[e.renderSlot(n.$slots,"title",{},()=>[a[0]||(a[0]=e.createElementVNode("h1",{class:"nav-title"},"TITLE",-1))]),e.createElementVNode("div",x,[e.createElementVNode("button",{class:"navbar-action btn",onClick:t},[e.renderSlot(n.$slots,"navbaraction",{},()=>[a[1]||(a[1]=e.createTextVNode("Action"))])])])]))}});var H=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Q(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var T={exports:{}};(function(s,r){(function(i,t){s.exports=t()})(H,function(){var i={attachTo:function(t,n){if(t.scannerDetectionData!==void 0)throw new Error("onScan.js is already initialized for DOM element "+t);var a={onScan:function(o,l){},onScanError:function(o){},onKeyProcess:function(o,l){},onKeyDetect:function(o,l){},onPaste:function(o,l){},keyCodeMapper:function(o){return i.decodeKeyEvent(o)},onScanButtonLongPress:function(){},scanButtonKeyCode:!1,scanButtonLongPressTime:500,timeBeforeScanTest:100,avgTimeByChar:30,minLength:6,suffixKeyCodes:[9,13],prefixKeyCodes:[],ignoreIfFocusOn:!1,stopPropagation:!1,preventDefault:!1,captureEvents:!1,reactToKeydown:!0,reactToPaste:!1,singleScanQty:1};return n=this._mergeOptions(a,n),t.scannerDetectionData={options:n,vars:{firstCharTime:0,lastCharTime:0,accumulatedString:"",testTimer:!1,longPressTimeStart:0,longPressed:!1}},n.reactToPaste===!0&&t.addEventListener("paste",this._handlePaste,n.captureEvents),n.scanButtonKeyCode!==!1&&t.addEventListener("keyup",this._handleKeyUp,n.captureEvents),(n.reactToKeydown===!0||n.scanButtonKeyCode!==!1)&&t.addEventListener("keydown",this._handleKeyDown,n.captureEvents),this},detachFrom:function(t){t.scannerDetectionData.options.reactToPaste&&t.removeEventListener("paste",this._handlePaste),t.scannerDetectionData.options.scanButtonKeyCode!==!1&&t.removeEventListener("keyup",this._handleKeyUp),t.removeEventListener("keydown",this._handleKeyDown),t.scannerDetectionData=void 0},getOptions:function(t){return t.scannerDetectionData.options},setOptions:function(t,n){switch(t.scannerDetectionData.options.reactToPaste){case!0:n.reactToPaste===!1&&t.removeEventListener("paste",this._handlePaste);break;case!1:n.reactToPaste===!0&&t.addEventListener("paste",this._handlePaste);break}switch(t.scannerDetectionData.options.scanButtonKeyCode){case!1:n.scanButtonKeyCode!==!1&&t.addEventListener("keyup",this._handleKeyUp);break;default:n.scanButtonKeyCode===!1&&t.removeEventListener("keyup",this._handleKeyUp);break}return t.scannerDetectionData.options=this._mergeOptions(t.scannerDetectionData.options,n),this._reinitialize(t),this},decodeKeyEvent:function(t){var n=this._getNormalizedKeyNum(t);switch(!0){case(n>=48&&n<=90):case(n>=106&&n<=111):if(t.key!==void 0&&t.key!=="")return t.key;var a=String.fromCharCode(n);switch(t.shiftKey){case!1:a=a.toLowerCase();break;case!0:a=a.toUpperCase();break}return a;case(n>=96&&n<=105):return 0+(n-96)}return""},simulate:function(t,n){return this._reinitialize(t),Array.isArray(n)?n.forEach(function(a){var o={};(typeof a=="object"||typeof a=="function")&&a!==null?o=a:o.keyCode=parseInt(a);var l=new KeyboardEvent("keydown",o);document.dispatchEvent(l)}):this._validateScanCode(t,n),this},_reinitialize:function(t){var n=t.scannerDetectionData.vars;n.firstCharTime=0,n.lastCharTime=0,n.accumulatedString=""},_isFocusOnIgnoredElement:function(t){var n=t.scannerDetectionData.options.ignoreIfFocusOn;if(!n)return!1;var a=document.activeElement;if(Array.isArray(n)){for(var o=0;o<n.length;o++)if(a.matches(n[o])===!0)return!0}else if(a.matches(n))return!0;return!1},_validateScanCode:function(t,n){var a=t.scannerDetectionData,o=a.options,l=a.options.singleScanQty,m=a.vars.firstCharTime,v=a.vars.lastCharTime,d={},f;switch(!0){case n.length<o.minLength:d={message:"Receieved code is shorter then minimal length"};break;case v-m>n.length*o.avgTimeByChar:d={message:"Receieved code was not entered in time"};break;default:return o.onScan.call(t,n,l),f=new CustomEvent("scan",{detail:{scanCode:n,qty:l}}),t.dispatchEvent(f),i._reinitialize(t),!0}return d.scanCode=n,d.scanDuration=v-m,d.avgTimeByChar=o.avgTimeByChar,d.minLength=o.minLength,o.onScanError.call(t,d),f=new CustomEvent("scanError",{detail:d}),t.dispatchEvent(f),i._reinitialize(t),!1},_mergeOptions:function(t,n){var a={},o;for(o in t)Object.prototype.hasOwnProperty.call(t,o)&&(a[o]=t[o]);for(o in n)Object.prototype.hasOwnProperty.call(n,o)&&(a[o]=n[o]);return a},_getNormalizedKeyNum:function(t){return t.which||t.keyCode},_handleKeyDown:function(t){var n=i._getNormalizedKeyNum(t),a=this.scannerDetectionData.options,o=this.scannerDetectionData.vars,l=!1;if(a.onKeyDetect.call(this,n,t)!==!1&&!i._isFocusOnIgnoredElement(this)){if(a.scanButtonKeyCode!==!1&&n==a.scanButtonKeyCode){o.longPressed||(o.longPressTimer=setTimeout(a.onScanButtonLongPress,a.scanButtonLongPressTime,this),o.longPressed=!0);return}switch(!0){case(o.firstCharTime&&a.suffixKeyCodes.indexOf(n)!==-1):t.preventDefault(),t.stopImmediatePropagation(),l=!0;break;case(!o.firstCharTime&&a.prefixKeyCodes.indexOf(n)!==-1):t.preventDefault(),t.stopImmediatePropagation(),l=!1;break;default:var m=a.keyCodeMapper.call(this,t);if(m===null)return;o.accumulatedString+=m,a.preventDefault&&t.preventDefault(),a.stopPropagation&&t.stopImmediatePropagation(),l=!1;break}o.firstCharTime||(o.firstCharTime=Date.now()),o.lastCharTime=Date.now(),o.testTimer&&clearTimeout(o.testTimer),l?(i._validateScanCode(this,o.accumulatedString),o.testTimer=!1):o.testTimer=setTimeout(i._validateScanCode,a.timeBeforeScanTest,this,o.accumulatedString),a.onKeyProcess.call(this,m,t)}},_handlePaste:function(t){var n=this.scannerDetectionData.options,a=this.scannerDetectionData.vars,o=(event.clipboardData||window.clipboardData).getData("text");i._isFocusOnIgnoredElement(this)||(t.preventDefault(),n.stopPropagation&&t.stopImmediatePropagation(),n.onPaste.call(this,o,event),a.firstCharTime=0,a.lastCharTime=0,i._validateScanCode(this,o))},_handleKeyUp:function(t){if(!i._isFocusOnIgnoredElement(this)){var n=i._getNormalizedKeyNum(t);n==this.scannerDetectionData.options.scanButtonKeyCode&&(clearTimeout(this.scannerDetectionData.vars.longPressTimer),this.scannerDetectionData.vars.longPressed=!1)}},isScanInProgressFor:function(t){return t.scannerDetectionData.vars.firstCharTime>0},isAttachedTo:function(t){return t.scannerDetectionData!==void 0}};return i})})(T);var q=T.exports;const E=Q(q),R={id:"scan_input"},S=e.defineComponent({__name:"ScanInput",props:{scanHandler:{type:Function}},emits:["scanInstance"],setup(s,{emit:r}){const i=r,t=s;return e.onMounted(()=>{const n=E.attachTo(window,{onScan:t.scanHandler});i("scanInstance",n)}),e.onUnmounted(()=>{E.detachFrom(window)}),(n,a)=>(e.openBlock(),e.createElementBlock("div",R))}});function G(s){s.component("ActionFooter",_),s.component("BeamModal",y),s.component("BeamModalOutlet",C),s.component("Confirm",g),s.component("ItemCheck",p),s.component("ItemCount",h),s.component("ListAnchor",b),s.component("ListItem",u),s.component("ListView",B),s.component("Navbar",w),s.component("ScanInput",S)}c.ActionFooter=_,c.BeamModal=y,c.BeamModalOutlet=C,c.Confirm=g,c.ItemCheck=p,c.ItemCount=h,c.ListAnchor=b,c.ListItem=u,c.ListView=B,c.Navbar=w,c.ScanInput=S,c.install=G,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=beam.umd.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"beam.umd.cjs","sources":["../src/components/ActionFooter.vue","../src/components/Confirm.vue","../src/components/ItemCheck.vue","../src/components/ItemCount.vue","../src/components/ListItem.vue","../src/components/ListView.vue","../src/components/Navbar.vue","../../common/temp/node_modules/.pnpm/onscan.js@1.5.2/node_modules/onscan.js/onscan.js","../src/components/ScanInput.vue","../src/index.ts"],"sourcesContent":["<template>\n\t<footer class=\"beam__actionfooter\">\n\t\t<span class=\"footer-action-wrapper\">\n\t\t\t<button class=\"footer-action btn\" @click=\"handleFooterAction\">\n\t\t\t\t<slot />\n\t\t\t</button>\n\t\t</span>\n\t</footer>\n</template>\n\n<script setup lang=\"ts\">\nconst emit = defineEmits(['click'])\n\nconst handleFooterAction = () => {\n\temit('click')\n}\n</script>\n","<template>\n\t<div class=\"beam__modal-confirm\">\n\t\t<h2>Would you like to continue?</h2>\n\t\t<button class=\"btn\" @click=\"$emit('confirmmodal')\">Yes</button>\n\t\t<button class=\"btn\" @click=\"$emit('closemodal')\">No</button>\n\t</div>\n</template>\n","<template>\n\t<label class=\"container\">\n\t\t<input type=\"checkbox\" :checked=\"value\" @input=\"handleInput\" tabindex=\"-1\" />\n\t\t<div class=\"checkmark\" tabindex=\"0\"></div>\n\t</label>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nconst emit = defineEmits(['input'])\n// TODO: make this v-model sensitive from parent\nconst { value } = defineProps<{ value?: boolean }>()\n\nconst checked = ref(value)\n\nconst handleInput = () => {\n\temit('input', checked.value)\n}\n</script>\n\n<style scoped>\n.container {\n\tdisplay: block;\n\tposition: relative;\n\tpadding-left: 2.5ch;\n\tmargin: 0;\n\tmargin-top: 0.5rem;\n\tcursor: pointer;\n\tfont-size: 2rem;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n/* hide default checkbox */\n.container input {\n\tposition: absolute;\n\topacity: 0;\n\tcursor: pointer;\n\theight: 0;\n\twidth: 0;\n}\n\n.checkmark {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\theight: 2rem;\n\twidth: 2rem;\n\tbackground-color: #eee;\n\toutline: 2px solid transparent;\n\tborder: 1px solid var(--highlight);\n}\n\n.container:hover input ~ .checkmark {\n\tbackground-color: white;\n}\n\n.container input:checked ~ .checkmark {\n\tbackground-color: var(--brand-secondary);\n}\n\n.checkmark:after {\n\tcontent: '';\n\tposition: absolute;\n\tdisplay: none;\n}\n\n.container input:checked ~ .checkmark:after {\n\tdisplay: block;\n}\n\n.container .checkmark:after {\n\tleft: 25%;\n\ttop: 50%;\n\twidth: 0.5rem;\n\theight: 1rem;\n\tborder: solid var(--text-color);\n\tborder-width: 0 3px 3px 0;\n\t-webkit-transform: rotate(45deg);\n\t-ms-transform: rotate(45deg);\n\ttransform: rotate(45deg) translate(-50%, -50%);\n}\n</style>\n","<template>\n\t<div class=\"beam__itemcount\">\n\t\t<span\n\t\t\t:contenteditable=\"editable\"\n\t\t\t:class=\"{ alert: countColor === false }\"\n\t\t\t@input=\"handleInput\"\n\t\t\t@click=\"handleInput\">\n\t\t\t{{ count }}\n\t\t</span>\n\t\t<span>/{{ denominator }}</span>\n\t\t<span v-if=\"uom\">&nbsp; {{ uom }}</span>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\nconst emit = defineEmits(['input'])\nconst {\n\tvalue = 0,\n\tdenominator,\n\tuom = '',\n\teditable = true,\n} = defineProps<{\n\tvalue?: number\n\tdenominator: number\n\tuom?: string\n\teditable?: boolean\n}>()\n\nconst count = ref(value)\n\nconst handleInput = (event: InputEvent | MouseEvent) => {\n\tevent.preventDefault()\n\tevent.stopPropagation()\n\tcount.value = Number((event.target as HTMLElement).innerHTML.replace(/[^0-9]/g, ''))\n\temit('input', count.value)\n}\n\nconst countColor = computed(() => {\n\treturn count.value === denominator\n})\n</script>\n","<template>\n\t<li tabindex=\"0\" class=\"beam__listitem\">\n\t\t<div class=\"beam__listtext\">\n\t\t\t<label>{{ item.label }}</label>\n\t\t\t<p>{{ item.description }}</p>\n\t\t</div>\n\n\t\t<ItemCount\n\t\t\tv-if=\"item.count\"\n\t\t\tv-model=\"listItem.count.count\"\n\t\t\t:denominator=\"item.count.of\"\n\t\t\t:uom=\"item.count.uom\"\n\t\t\t:editable=\"true\" />\n\t\t<ItemCheck v-if=\"item.hasOwnProperty('checked')\" v-model=\"listItem.checked\" />\n\t</li>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport ItemCount from '@/components/ItemCount.vue'\nimport ItemCheck from '@/components/ItemCheck.vue'\n\nconst { item } = defineProps<{\n\titem: {\n\t\tlabel: string\n\t\tdescription: string\n\t\tcount?: {\n\t\t\tcount: number\n\t\t\tof: number\n\t\t\tuom: string\n\t\t}\n\t\tchecked?: boolean\n\t}\n}>()\n\nconst listItem = ref(item)\n</script>\n","<template>\n\t<ul class=\"beam__listview\">\n\t\t<li v-for=\"item in items\" :key=\"item.label\">\n\t\t\t<template v-if=\"item.linkComponent\">\n\t\t\t\t<component :is=\"item.linkComponent\" :to=\"item.route\" tabindex=\"-1\">\n\t\t\t\t\t<ListItem :item=\"item\"></ListItem>\n\t\t\t\t</component>\n\t\t\t</template>\n\t\t\t<template v-else>\n\t\t\t\t<ListItem :item=\"item\"></ListItem>\n\t\t\t</template>\n\t\t</li>\n\t</ul>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, onUnmounted } from 'vue'\n\nimport ListItem from '@/components/ListItem.vue'\n\ndefineProps<{\n\titems: {\n\t\tlabel: string\n\t\tdescription: string\n\t\tcount?: {\n\t\t\tcount: number\n\t\t\tof: number\n\t\t\tuom: string\n\t\t}\n\t\tchecked?: boolean\n\t\tlinkComponent?: string\n\t\troute?: string\n\t}[]\n}>()\n\nconst emit = defineEmits(['scrollbottom'])\n\nonMounted(() => {\n\twindow.addEventListener('scroll', handleScroll)\n})\n\nonUnmounted(() => {\n\twindow.removeEventListener('scroll', handleScroll)\n})\n\nconst handleScroll = () => {\n\tconst scrollHeightDifference = document.documentElement.scrollHeight - window.innerHeight\n\tconst scrollposition = document.documentElement.scrollTop\n\tif (scrollHeightDifference - scrollposition <= 2) {\n\t\temit('scrollbottom')\n\t}\n}\n</script>\n","<template>\n\t<nav class=\"beam__navbar\">\n\t\t<slot name=\"title\">\n\t\t\t<h1 class=\"nav-title\">TITLE</h1>\n\t\t</slot>\n\t\t<div class=\"navbar-action-wrapper\">\n\t\t\t<button class=\"navbar-action btn\" @click=\"handlePrimaryAction\">\n\t\t\t\t<slot name=\"navbaraction\">Action</slot>\n\t\t\t</button>\n\t\t</div>\n\t</nav>\n</template>\n\n<script setup lang=\"ts\">\nconst emit = defineEmits(['click'])\n\nconst handlePrimaryAction = () => {\n\temit('click')\n}\n</script>\n","/*\n * onScan.js - scan-events for hardware barcodes scanners in javascript\n */\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory()) :\n global.onScan = factory()\n}(this, (function () {\n\tvar onScan = {\t\n\t\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @param Object oOptions\n\t\t * @return self\n\t\t */\n\t\tattachTo: function(oDomElement, oOptions) {\n\t\n\t\t\tif(oDomElement.scannerDetectionData !== undefined){\n\t\t\t\tthrow new Error(\"onScan.js is already initialized for DOM element \" + oDomElement);\n\t\t\t}\n\t\n\t\t\tvar oDefaults = {\n\t\t\t\tonScan: function(sScanned, iQty){}, // Callback after detection of a successfull scanning: function(){sScancode, iCount)}()\n\t\t\t\tonScanError: function(oDebug){}, // Callback after detection of a unsuccessfull scanning (scanned string in parameter)\n\t\t\t\tonKeyProcess: function(sChar, oEvent){}, // Callback after receiving and processing a char (scanned char in parameter)\n\t\t\t\tonKeyDetect: function(iKeyCode, oEvent){}, // Callback after detecting a keyDown (key char in parameter) - in contrast to onKeyProcess, this fires for non-character keys like tab, arrows, etc. too!\n\t\t\t\tonPaste: function(sPasted, oEvent){}, // Callback after receiving a value on paste, no matter if it is a valid code or not\n\t\t\t\tkeyCodeMapper: function(oEvent) {return onScan.decodeKeyEvent(oEvent)}, // Custom function to decode a keydown event into a character. Must return decoded character or NULL if the given event should not be processed.\n\t\t\t\tonScanButtonLongPress: function(){}, // Callback after detection of a successfull scan while the scan button was pressed and held down\n\t\t\t\tscanButtonKeyCode:false, // Key code of the scanner hardware button (if the scanner button a acts as a key itself) \n\t\t\t\tscanButtonLongPressTime:500, // How long (ms) the hardware button should be pressed, until a callback gets executed\n\t\t\t\ttimeBeforeScanTest:100, // Wait duration (ms) after keypress event to check if scanning is finished\n\t\t\t\tavgTimeByChar:30, // Average time (ms) between 2 chars. Used to do difference between keyboard typing and scanning\n\t\t\t\tminLength:6, // Minimum length for a scanning\n\t\t\t\tsuffixKeyCodes:[9,13], // Chars to remove and means end of scanning\n\t\t\t\tprefixKeyCodes:[], // Chars to remove and means start of scanning\n\t\t\t\tignoreIfFocusOn:false, // do not handle scans if the currently focused element matches this selector or object\n\t\t\t\tstopPropagation:false, // Stop immediate propagation on keypress event\n\t\t\t\tpreventDefault:false, // Prevent default action on keypress event\n\t\t\t\tcaptureEvents:false, // Get the events before any listeners deeper in the DOM\n\t\t\t\treactToKeydown:true, // look for scan input in keyboard events\n\t\t\t\treactToPaste:false, // look for scan input in paste events\n\t\t\t\tsingleScanQty: 1, // Quantity of Items put out to onScan in a single scan\n\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\toOptions = this._mergeOptions(oDefaults, oOptions);\n\t\n\t\t\t// initializing options and variables on DomElement\n\t\t\toDomElement.scannerDetectionData = {\n\t\t\t\t\toptions: oOptions,\n\t\t\t\t\tvars:{\n\t\t\t\t\t\tfirstCharTime: 0,\n\t\t\t\t\t\tlastCharTime: 0,\n\t\t\t\t\t\taccumulatedString: '',\n\t\t\t\t\t\ttestTimer: false,\n\t\t\t\t\t\tlongPressTimeStart: 0,\n\t\t\t\t\t\tlongPressed: false\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t};\n\t\t\t\n\t\t\t// initializing handlers (based on settings)\n\t\t\tif (oOptions.reactToPaste === true){\n\t\t\t\toDomElement.addEventListener(\"paste\", this._handlePaste, oOptions.captureEvents);\n\t\t\t}\n\t\t\tif (oOptions.scanButtonKeyCode !== false){\n\t\t\t\toDomElement.addEventListener(\"keyup\", this._handleKeyUp, oOptions.captureEvents);\n\t\t\t}\n\t\t\tif (oOptions.reactToKeydown === true || oOptions.scanButtonKeyCode !== false){\t\n\t\t\t\toDomElement.addEventListener(\"keydown\", this._handleKeyDown, oOptions.captureEvents);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @return void\n\t\t */\n\t\tdetachFrom: function(oDomElement) {\n\t\t\t// detaching all used events\n\t\t\tif (oDomElement.scannerDetectionData.options.reactToPaste){\n\t\t\t\toDomElement.removeEventListener(\"paste\", this._handlePaste);\n\t\t\t}\n\t\t\tif (oDomElement.scannerDetectionData.options.scanButtonKeyCode !== false){\n\t\t\t\toDomElement.removeEventListener(\"keyup\", this._handleKeyUp);\n\t\t\t}\n\t\t\toDomElement.removeEventListener(\"keydown\", this._handleKeyDown);\n\t\t\t\n\t\t\t// clearing data off DomElement\n\t\t\toDomElement.scannerDetectionData = undefined; \n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @return Object\n\t\t */\n\t\tgetOptions: function(oDomElement){\n\t\t\treturn oDomElement.scannerDetectionData.options;\t\t\t\n\t\t},\n\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @param Object oOptions\n\t\t * @return self\n\t\t */\n\t\tsetOptions: function(oDomElement, oOptions){\n\t\t\t// check if some handlers need to be changed based on possible option changes\n\t\t\tswitch (oDomElement.scannerDetectionData.options.reactToPaste){\n\t\t\t\tcase true: \n\t\t\t\t\tif (oOptions.reactToPaste === false){\n\t\t\t\t\t\toDomElement.removeEventListener(\"paste\", this._handlePaste);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase false:\n\t\t\t\t\tif (oOptions.reactToPaste === true){\n\t\t\t\t\t\toDomElement.addEventListener(\"paste\", this._handlePaste);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tswitch (oDomElement.scannerDetectionData.options.scanButtonKeyCode){\n\t\t\t\tcase false:\n\t\t\t\t\tif (oOptions.scanButtonKeyCode !== false){\n\t\t\t\t\t\toDomElement.addEventListener(\"keyup\", this._handleKeyUp);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: \n\t\t\t\t\tif (oOptions.scanButtonKeyCode === false){\n\t\t\t\t\t\toDomElement.removeEventListener(\"keyup\", this._handleKeyUp);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\t// merge old and new options\n\t\t\toDomElement.scannerDetectionData.options = this._mergeOptions(oDomElement.scannerDetectionData.options, oOptions);\n\t\t\n\t\t\t// reinitiallize\n\t\t\tthis._reinitialize(oDomElement);\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Transforms key codes into characters.\n\t\t * \n\t\t * By default, only the follwing key codes are taken into account\n\t\t * - 48-90 (letters and regular numbers)\n\t\t * - 96-105 (numeric keypad numbers)\n\t\t * - 106-111 (numeric keypad operations)\n\t\t * \n\t\t * All other keys will yield empty strings!\n\t\t * \n\t\t * The above keycodes will be decoded using the KeyboardEvent.key property on modern\n\t\t * browsers. On older browsers the method will fall back to String.fromCharCode()\n\t\t * putting the result to upper/lower case depending on KeyboardEvent.shiftKey if\n\t\t * it is set.\n\t\t * \n\t\t * @param KeyboardEvent oEvent\n\t\t * @return string\n\t\t */\n\t\tdecodeKeyEvent : function (oEvent) {\n\t\t\tvar iCode = this._getNormalizedKeyNum(oEvent);\n\t\t\tswitch (true) {\n\t\t\t\tcase iCode >= 48 && iCode <= 90: // numbers and letters\n\t\t\t\tcase iCode >= 106 && iCode <= 111: // operations on numeric keypad (+, -, etc.)\n\t\t\t\t\tif (oEvent.key !== undefined && oEvent.key !== '') {\n\t\t\t\t\t\treturn oEvent.key;\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\tvar sDecoded = String.fromCharCode(iCode);\n\t\t\t\t\tswitch (oEvent.shiftKey) {\n\t\t\t\t\t\tcase false: sDecoded = sDecoded.toLowerCase(); break;\n\t\t\t\t\t\tcase true: sDecoded = sDecoded.toUpperCase(); break;\n\t\t\t\t\t}\n\t\t\t\t\treturn sDecoded;\n\t\t\t\tcase iCode >= 96 && iCode <= 105: // numbers on numeric keypad\n\t\t\t\t\treturn 0+(iCode-96);\n\t\t\t}\n\t\t\treturn '';\n\t\t},\n\t\t\n\t\t/**\n\t\t * Simulates a scan of the provided code.\n\t *\n\t\t * The scan code can be defined as\n\t\t * - a string - in this case no keyCode decoding is done and the code is merely validated\n\t\t * against constraints like minLenght, etc.\n\t\t * - an array of keyCodes (e.g. `[70,71,80]`) - will produce `keydown` events with corresponding\n\t\t * `keyCode` properties. NOTE: these events will have empty `key` properties, so decoding may\n\t\t * yield different results than with native events.\n\t\t * - an array of objects (e.g. `[{keyCode: 70, key: \"F\", shiftKey: true}, {keyCode: 71, key: \"g\"}]`) -\n\t\t * this way almost any event can be simulated, but it's a lot of work to do.\n\t\t *\n\t\t * @param DomElement oDomElement\n\t\t * @param string|array mStringOrArray\n\t\t * @return self\n\t\t */\n\t\tsimulate: function(oDomElement, mStringOrArray){\n\t\t\tthis._reinitialize(oDomElement);\n\t\t\tif (Array.isArray(mStringOrArray)){\n\t\t\t\tmStringOrArray.forEach(function(mKey){\n\t\t\t\t\tvar oEventProps = {};\n\t\t\t\t\tif( (typeof mKey === \"object\" || typeof mKey === 'function') && (mKey !== null) ) {\n\t\t\t\t\t\toEventProps = mKey;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toEventProps.keyCode = parseInt(mKey);\n\t\t\t\t\t}\n\t\t\t\t\tvar oEvent = new KeyboardEvent('keydown', oEventProps);\n\t\t\t\t\tdocument.dispatchEvent(oEvent);\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis._validateScanCode(oDomElement, mStringOrArray);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param DomElement oDomElement\n\t\t * @return void\n\t\t */\n\t\t_reinitialize: function(oDomElement){\n\t\t\tvar oVars = oDomElement.scannerDetectionData.vars;\n\t\t\toVars.firstCharTime = 0;\n\t\t\toVars.lastCharTime = 0;\n\t\t\toVars.accumulatedString = '';\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param DomElement oDomElement\n\t * @return boolean\n\t\t */\n\t\t_isFocusOnIgnoredElement: function(oDomElement){\n\t\t\t\n\t\t\tvar ignoreSelectors = oDomElement.scannerDetectionData.options.ignoreIfFocusOn;\n\t\n\t if(!ignoreSelectors){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\n\t\t\tvar oFocused = document.activeElement;\n\t\t\t\n\t\t\t// checks if ignored element is an array, and if so it checks if one of the elements of it is an active one\n\t\t\tif (Array.isArray(ignoreSelectors)){\n\t\t\t\tfor(var i=0; i<ignoreSelectors.length; i++){\n\t\t\t\t\tif(oFocused.matches(ignoreSelectors[i]) === true){\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t// if the option consists of an single element, it only checks this one\n\t\t\t} else if (oFocused.matches(ignoreSelectors)){\n\t\t\t\treturn true;\t\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t// if the active element is not listed in the ignoreIfFocusOn option, return false\n\t\t return false;\n\t },\n\t\t\n\t /**\n\t * Validates the scan code accumulated by the given DOM element and fires the respective events.\n\t * \n\t * @private\n\t * @param DomElement oDomElement\n\t * @return boolean\n\t */\n\t\t_validateScanCode: function(oDomElement, sScanCode){\n\t\t\tvar oScannerData = oDomElement.scannerDetectionData;\t\t\t\n\t\t\tvar oOptions = oScannerData.options;\n\t\t\tvar iSingleScanQty = oScannerData.options.singleScanQty;\n\t\t\tvar iFirstCharTime = oScannerData.vars.firstCharTime;\n\t\t\tvar iLastCharTime = oScannerData.vars.lastCharTime;\n\t\t\tvar oScanError = {};\n\t var oEvent;\n\t \n\t\t\tswitch(true){\n\t\t\t\t\n\t\t\t\t// detect codes that are too short\n\t\t\t\tcase (sScanCode.length < oOptions.minLength):\n\t\t\t\t\toScanError = {\n\t\t\t\t\t\tmessage: \"Receieved code is shorter then minimal length\"\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// detect codes that were entered too slow\t\n\t\t\t\tcase ((iLastCharTime - iFirstCharTime) > (sScanCode.length * oOptions.avgTimeByChar)):\n\t\t\t\t\toScanError = {\n\t\t\t\t\t\tmessage: \"Receieved code was not entered in time\"\n\t\t\t\t\t};\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// if a code was not filtered out earlier it is valid\t\n\t\t\t\tdefault:\n\t\t\t\t\toOptions.onScan.call(oDomElement, sScanCode, iSingleScanQty);\n\t\t\t\t\toEvent = new CustomEvent(\n\t\t\t\t\t\t'scan',\n\t\t\t\t\t\t{\t\n\t\t\t\t\t\t\tdetail: { \n\t\t\t\t\t\t\t\tscanCode: sScanCode,\n\t\t\t\t\t\t\t\tqty: iSingleScanQty\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\toDomElement.dispatchEvent(oEvent);\n\t\t\t\t\tonScan._reinitialize(oDomElement);\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\t\n\t\t\t// If an error occurred (otherwise the method would return earlier) create an object for errordetection\n\t\t\toScanError.scanCode = sScanCode;\n\t\t\toScanError.scanDuration = iLastCharTime - iFirstCharTime;\n\t\t\toScanError.avgTimeByChar = oOptions.avgTimeByChar;\n\t\t\toScanError.minLength = oOptions.minLength;\n\t\t\t\n\t\t\toOptions.onScanError.call(oDomElement, oScanError);\n\t\t\t\n\t\t\toEvent = new CustomEvent(\n\t\t\t\t'scanError', \n\t\t\t\t{detail: oScanError}\n\t\t\t);\n\t\t\toDomElement.dispatchEvent(oEvent);\n\t\t\t\n\t\t\tonScan._reinitialize(oDomElement);\n\t\t\treturn false;\n\t },\n\t\n\t /**\n\t * @private\n\t * @param Object oDefaults\n\t * @param Object oOptions\n\t * @return Object\n\t */\n\t\t_mergeOptions: function(oDefaults, oOptions){\n\t\t\tvar oExtended = {};\n\t\t\tvar prop;\n\t\t\tfor (prop in oDefaults){\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(oDefaults, prop)){\n\t\t\t\t\toExtended[prop] = oDefaults[prop];\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t\tfor (prop in oOptions){\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(oOptions, prop)){\n\t\t\t\t\toExtended[prop] = oOptions[prop];\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t\treturn oExtended;\n\t\t},\n\t\n\t\t/**\n\t\t * @private\n\t\t * @param KeyboardEvent e\n\t\t * @return int\n\t\t * @see https://www.w3schools.com/jsref/event_key_keycode.asp\n\t\t */\n\t\t_getNormalizedKeyNum: function(e){\n\t\t\treturn e.which || e.keyCode;\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * @private\n\t\t * @param KeyboardEvent e\n\t\t * @return void\n\t\t */\n\t\t_handleKeyDown: function(e){\n\t\t\tvar iKeyCode = onScan._getNormalizedKeyNum(e);\n\t\t\tvar oOptions = this.scannerDetectionData.options;\n\t\t\tvar oVars = this.scannerDetectionData.vars;\n\t\t\tvar bScanFinished = false;\n\t\t\t\n\t\t\tif (oOptions.onKeyDetect.call(this, iKeyCode, e) === false) {\n\t\t\t\treturn;\n\t\t\t}\t\t\n\t\t\t\n\t\t\tif (onScan._isFocusOnIgnoredElement(this)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\t\t\t\n\t // If it's just the button of the scanner, ignore it and wait for the real input\n\t\t if(oOptions.scanButtonKeyCode !== false && iKeyCode==oOptions.scanButtonKeyCode) {\n\t\t\t\t\n\t\t\t\t// if the button was first pressed, start a timeout for the callback, which gets interrupted if the scanbutton gets released\n\t\t\t\tif (!oVars.longPressed){\n\t\t\t\t\toVars.longPressTimer = setTimeout( oOptions.onScanButtonLongPress, oOptions.scanButtonLongPressTime, this);\n\t\t\t\t\toVars.longPressed = true;\n\t\t\t\t}\n\t\n\t\t\t\treturn;\n\t }\n\t\t\t\n\t\t\tswitch(true){\n\t\t\t\t// If it's not the first character and we encounter a terminating character, trigger scan process\n\t\t\t\tcase (oVars.firstCharTime && oOptions.suffixKeyCodes.indexOf(iKeyCode)!==-1):\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tbScanFinished=true;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// If it's the first character and we encountered one of the starting characters, don't process the scan\t\n\t\t\t\tcase (!oVars.firstCharTime && oOptions.prefixKeyCodes.indexOf(iKeyCode)!==-1):\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tbScanFinished=false;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// Otherwise, just add the character to the scan string we're building\t\n\t\t\t\tdefault:\n\t\t\t\t\tvar character = oOptions.keyCodeMapper.call(this, e);\n\t\t\t\t\tif (character === null){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\toVars.accumulatedString += character;\n\t\t\t\t\t\n\t\t\t\t\tif (oOptions.preventDefault) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tif (oOptions.stopPropagation) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tbScanFinished=false;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t \n\t\t\tif(!oVars.firstCharTime){\n\t\t\t\toVars.firstCharTime=Date.now();\n\t\t\t}\n\t\t\t\n\t\t\toVars.lastCharTime=Date.now();\n\t\n\t\t\tif(oVars.testTimer){ \n\t\t\t\tclearTimeout(oVars.testTimer);\n\t\t\t}\n\t\t\t\n\t\t\tif(bScanFinished){\n\t\t\t\tonScan._validateScanCode(this, oVars.accumulatedString);\n\t\t\t\toVars.testTimer=false;\n\t\t\t} else {\n\t\t\t\toVars.testTimer=setTimeout(onScan._validateScanCode, oOptions.timeBeforeScanTest, this, oVars.accumulatedString);\n\t\t\t}\n\t\n\t\t\toOptions.onKeyProcess.call(this, character, e);\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param Event e\n\t\t * @return void\n\t\t */\n\t\t_handlePaste: function(e){\n\t\n\t\t\tvar oOptions = this.scannerDetectionData.options;\n\t\t\tvar oVars = this.scannerDetectionData.vars;\n\t\t\tvar sPasteString = (event.clipboardData || window.clipboardData).getData('text');\n\t\t\t\n\t\t\t// if the focus is on an ignored element, abort\n\t\t\tif (onScan._isFocusOnIgnoredElement(this)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\te.preventDefault();\n\n\t\t\tif (oOptions.stopPropagation) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\t\t\t\t\t\t\n\t\t\toOptions.onPaste.call(this, sPasteString, event);\n\t\t\t\n\t\t\toVars.firstCharTime = 0;\n\t\t\toVars.lastCharTime = 0;\n\t\t\t\n\t\t\t// validate the string\n\t\t\tonScan._validateScanCode(this, sPasteString);\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param KeyboardEvent e\n\t\t * @return void\n\t\t */\n\t\t_handleKeyUp: function(e){\n\t\t\t// if the focus is on an ignored element, abort\n\t\t\tif (onScan._isFocusOnIgnoredElement(this)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tvar iKeyCode = onScan._getNormalizedKeyNum(e);\n\t\t\t\n\t\t\t// if hardware key is not being pressed anymore stop the timeout and reset\n\t\t\tif (iKeyCode == this.scannerDetectionData.options.scanButtonKeyCode){\n\t\t\t\tclearTimeout(this.scannerDetectionData.vars.longPressTimer);\n\t\t\t\tthis.scannerDetectionData.vars.longPressed = false;\n\t\t\t}\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Returns TRUE the scanner is currently in the middle of a scan sequence.\n\t\t * \n\t\t * @param DomElement\n\t\t * @return boolean\n\t\t */\n\t\tisScanInProgressFor: function(oDomElement) {\n\t\t\treturn oDomElement.scannerDetectionData.vars.firstCharTime > 0;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Returns TRUE if onScan is attached to the given DOM element and FALSE otherwise.\n\t\t * \n\t\t * @param DomElement\n\t\t * @return boolean\n\t\t */\n\t\tisAttachedTo: function(oDomElement) {\n\t\t\treturn (oDomElement.scannerDetectionData !== undefined);\n\t\t}\n\t};\n\t\n\treturn onScan;\n})));","<template>\n\t<div id=\"scan_input\"></div>\n</template>\n\n<script setup lang=\"ts\">\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport onScan from 'onscan.js'\nimport { onMounted, onUnmounted } from 'vue'\n\nconst emit = defineEmits<{\n\tscanInstance: [instance: onScan]\n}>()\n\nconst props = defineProps<{\n\tscanHandler: (barcode: string, qty: number) => void\n}>()\n\nonMounted(() => {\n\tconst instance = onScan.attachTo(window, { onScan: props.scanHandler })\n\temit('scanInstance', instance)\n})\n\nonUnmounted(() => {\n\tonScan.detachFrom(window)\n})\n</script>\n","import { App } from 'vue'\n\nimport ActionFooter from '@/components/ActionFooter.vue'\nimport BeamModal from '@/components/BeamModal.vue'\nimport BeamModalOutlet from '@/components/BeamModalOutlet.vue'\nimport Confirm from '@/components/Confirm.vue'\nimport ItemCheck from '@/components/ItemCheck.vue'\nimport ItemCount from '@/components/ItemCount.vue'\nimport ListAnchor from '@/components/ListAnchor.vue'\nimport ListItem from '@/components/ListItem.vue'\nimport ListView from '@/components/ListView.vue'\nimport Navbar from '@/components/Navbar.vue'\nimport ScanInput from '@/components/ScanInput.vue'\nimport 'themes/beam.css'\n\n/**\n * Install all Beam components\n * @param app - Vue app instance\n * @public\n */\nfunction install(app: App /* options */) {\n\tapp.component('ActionFooter', ActionFooter)\n\tapp.component('BeamModal', BeamModal)\n\tapp.component('BeamModalOutlet', BeamModalOutlet)\n\tapp.component('Confirm', Confirm)\n\tapp.component('ItemCheck', ItemCheck)\n\tapp.component('ItemCount', ItemCount)\n\tapp.component('ListAnchor', ListAnchor)\n\tapp.component('ListItem', ListItem)\n\tapp.component('ListView', ListView)\n\tapp.component('Navbar', Navbar)\n\tapp.component('ScanInput', ScanInput)\n}\n\nexport {\n\tActionFooter,\n\tBeamModal,\n\tBeamModalOutlet,\n\tConfirm,\n\tItemCheck,\n\tItemCount,\n\tListAnchor,\n\tListItem,\n\tListView,\n\tNavbar,\n\tScanInput,\n\tinstall,\n}\n"],"names":["emit","__emit","handleFooterAction","_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","$event","checked","ref","__props","handleInput","count","event","countColor","computed","listItem","onMounted","handleScroll","onUnmounted","scrollHeightDifference","scrollposition","handlePrimaryAction","global","factory","module","this","onScan","oDomElement","oOptions","oDefaults","sScanned","iQty","oDebug","sChar","oEvent","iKeyCode","sPasted","iCode","sDecoded","mStringOrArray","mKey","oEventProps","oVars","ignoreSelectors","oFocused","i","sScanCode","oScannerData","iSingleScanQty","iFirstCharTime","iLastCharTime","oScanError","oExtended","prop","bScanFinished","character","sPasteString","props","instance","install","app","ActionFooter","BeamModal","BeamModalOutlet","Confirm","ItemCheck","ItemCount","ListAnchor","ListItem","ListView","Navbar","ScanInput"],"mappings":"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","x_google_ignoreList":[7]}
1
+ {"version":3,"file":"beam.umd.cjs","sources":["../src/components/ActionFooter.vue","../src/components/Confirm.vue","../src/components/ItemCheck.vue","../src/components/ItemCount.vue","../src/components/ListItem.vue","../src/components/ListView.vue","../src/components/Navbar.vue","../../common/temp/node_modules/.pnpm/onscan.js@1.5.2/node_modules/onscan.js/onscan.js","../src/components/ScanInput.vue","../src/index.ts"],"sourcesContent":["<template>\n\t<footer class=\"beam__actionfooter\">\n\t\t<span class=\"footer-action-wrapper\">\n\t\t\t<button class=\"footer-action btn\" @click=\"handleFooterAction\">\n\t\t\t\t<slot />\n\t\t\t</button>\n\t\t</span>\n\t</footer>\n</template>\n\n<script setup lang=\"ts\">\nconst emit = defineEmits<{ click: [] }>()\n\nconst handleFooterAction = () => {\n\temit('click')\n}\n</script>\n","<template>\n\t<div class=\"beam__modal-confirm\">\n\t\t<h2>Would you like to continue?</h2>\n\t\t<button class=\"btn\" @click=\"$emit('confirmmodal')\">Yes</button>\n\t\t<button class=\"btn\" @click=\"$emit('closemodal')\">No</button>\n\t</div>\n</template>\n","<template>\n\t<label class=\"container\">\n\t\t<input type=\"checkbox\" v-model=\"value\" tabindex=\"-1\" />\n\t\t<div class=\"checkmark\" tabindex=\"0\"></div>\n\t</label>\n</template>\n\n<script setup lang=\"ts\">\nconst value = defineModel<boolean>({ default: false })\n</script>\n\n<style scoped>\n.container {\n\tdisplay: block;\n\tposition: relative;\n\tpadding-left: 2.5ch;\n\tmargin: 0;\n\tmargin-top: 0.5rem;\n\tcursor: pointer;\n\tfont-size: 2rem;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n/* hide default checkbox */\n.container input {\n\tposition: absolute;\n\topacity: 0;\n\tcursor: pointer;\n\theight: 0;\n\twidth: 0;\n}\n\n.checkmark {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\theight: 2rem;\n\twidth: 2rem;\n\tbackground-color: #eee;\n\toutline: 2px solid transparent;\n\tborder: 1px solid var(--highlight);\n}\n\n.container:hover input ~ .checkmark {\n\tbackground-color: white;\n}\n\n.container input:checked ~ .checkmark {\n\tbackground-color: var(--brand-secondary);\n}\n\n.checkmark:after {\n\tcontent: '';\n\tposition: absolute;\n\tdisplay: none;\n}\n\n.container input:checked ~ .checkmark:after {\n\tdisplay: block;\n}\n\n.container .checkmark:after {\n\tleft: 25%;\n\ttop: 50%;\n\twidth: 0.5rem;\n\theight: 1rem;\n\tborder: solid var(--text-color);\n\tborder-width: 0 3px 3px 0;\n\t-webkit-transform: rotate(45deg);\n\t-ms-transform: rotate(45deg);\n\ttransform: rotate(45deg) translate(-50%, -50%);\n}\n</style>\n","<template>\n\t<div class=\"beam__itemcount\">\n\t\t<span :contenteditable=\"editable\" :class=\"{ alert: !isCountComplete }\" @input=\"handleInput\" @click=\"handleInput\">\n\t\t\t{{ count }}\n\t\t</span>\n\t\t<span>/{{ denominator }}</span>\n\t\t<span v-if=\"uom\">&nbsp; {{ uom }}</span>\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst count = defineModel<number>({ required: true })\nconst {\n\tdenominator,\n\tuom = '',\n\teditable = true,\n} = defineProps<{\n\tdenominator: number\n\tuom?: string\n\teditable?: boolean\n}>()\n\nconst isCountComplete = computed(() => count.value === denominator)\n\nconst handleInput = (event: InputEvent | MouseEvent) => {\n\tevent.preventDefault()\n\tevent.stopPropagation()\n\tconst newValue = Number((event.target as HTMLElement).innerHTML) || 0\n\tcount.value = Math.min(newValue, denominator)\n}\n</script>\n","<template>\n\t<li tabindex=\"0\" class=\"beam__listitem\">\n\t\t<div class=\"beam__listtext\">\n\t\t\t<label>{{ listItem.label }}</label>\n\t\t\t<p>{{ listItem.description }}</p>\n\t\t</div>\n\n\t\t<ItemCount\n\t\t\tv-if=\"listItem.count\"\n\t\t\tv-model=\"listItem.count.count\"\n\t\t\t:denominator=\"listItem.count.of\"\n\t\t\t:uom=\"listItem.count.uom\"\n\t\t\t:editable=\"true\" />\n\t\t<ItemCheck v-if=\"listItem.hasOwnProperty('checked')\" v-model=\"listItem.checked\" />\n\t</li>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nimport ItemCount from '@/components/ItemCount.vue'\nimport ItemCheck from '@/components/ItemCheck.vue'\n\nconst { item } = defineProps<{\n\titem: {\n\t\tlabel: string\n\t\tdescription: string\n\t\tcount?: {\n\t\t\tcount: number\n\t\t\tof: number\n\t\t\tuom: string\n\t\t}\n\t\tchecked?: boolean\n\t}\n}>()\n\nconst listItem = ref(item)\n</script>\n","<template>\n\t<ul class=\"beam__listview\">\n\t\t<li v-for=\"item in items\" :key=\"item.label\">\n\t\t\t<template v-if=\"item.linkComponent\">\n\t\t\t\t<component :is=\"item.linkComponent\" :to=\"item.route\" tabindex=\"-1\">\n\t\t\t\t\t<ListItem :item=\"item\"></ListItem>\n\t\t\t\t</component>\n\t\t\t</template>\n\t\t\t<template v-else>\n\t\t\t\t<ListItem :item=\"item\"></ListItem>\n\t\t\t</template>\n\t\t</li>\n\t</ul>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, onUnmounted } from 'vue'\n\nimport ListItem from '@/components/ListItem.vue'\n\ndefineProps<{\n\titems: {\n\t\tlabel: string\n\t\tdescription: string\n\t\tcount?: {\n\t\t\tcount: number\n\t\t\tof: number\n\t\t\tuom: string\n\t\t}\n\t\tchecked?: boolean\n\t\tlinkComponent?: string\n\t\troute?: string\n\t}[]\n}>()\n\nconst emit = defineEmits<{ scrollbottom: [] }>()\n\nonMounted(() => {\n\twindow.addEventListener('scroll', handleScroll)\n})\n\nonUnmounted(() => {\n\twindow.removeEventListener('scroll', handleScroll)\n})\n\nconst handleScroll = () => {\n\tconst scrollHeightDifference = document.documentElement.scrollHeight - window.innerHeight\n\tconst scrollposition = document.documentElement.scrollTop\n\tif (scrollHeightDifference - scrollposition <= 2) {\n\t\temit('scrollbottom')\n\t}\n}\n</script>\n","<template>\n\t<nav class=\"beam__navbar\">\n\t\t<slot name=\"title\">\n\t\t\t<h1 class=\"nav-title\">TITLE</h1>\n\t\t</slot>\n\t\t<div class=\"navbar-action-wrapper\">\n\t\t\t<button class=\"navbar-action btn\" @click=\"handlePrimaryAction\">\n\t\t\t\t<slot name=\"navbaraction\">Action</slot>\n\t\t\t</button>\n\t\t</div>\n\t</nav>\n</template>\n\n<script setup lang=\"ts\">\nconst emit = defineEmits<{ click: [] }>()\n\nconst handlePrimaryAction = () => {\n\temit('click')\n}\n</script>\n","/*\n * onScan.js - scan-events for hardware barcodes scanners in javascript\n */\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory()) :\n global.onScan = factory()\n}(this, (function () {\n\tvar onScan = {\t\n\t\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @param Object oOptions\n\t\t * @return self\n\t\t */\n\t\tattachTo: function(oDomElement, oOptions) {\n\t\n\t\t\tif(oDomElement.scannerDetectionData !== undefined){\n\t\t\t\tthrow new Error(\"onScan.js is already initialized for DOM element \" + oDomElement);\n\t\t\t}\n\t\n\t\t\tvar oDefaults = {\n\t\t\t\tonScan: function(sScanned, iQty){}, // Callback after detection of a successfull scanning: function(){sScancode, iCount)}()\n\t\t\t\tonScanError: function(oDebug){}, // Callback after detection of a unsuccessfull scanning (scanned string in parameter)\n\t\t\t\tonKeyProcess: function(sChar, oEvent){}, // Callback after receiving and processing a char (scanned char in parameter)\n\t\t\t\tonKeyDetect: function(iKeyCode, oEvent){}, // Callback after detecting a keyDown (key char in parameter) - in contrast to onKeyProcess, this fires for non-character keys like tab, arrows, etc. too!\n\t\t\t\tonPaste: function(sPasted, oEvent){}, // Callback after receiving a value on paste, no matter if it is a valid code or not\n\t\t\t\tkeyCodeMapper: function(oEvent) {return onScan.decodeKeyEvent(oEvent)}, // Custom function to decode a keydown event into a character. Must return decoded character or NULL if the given event should not be processed.\n\t\t\t\tonScanButtonLongPress: function(){}, // Callback after detection of a successfull scan while the scan button was pressed and held down\n\t\t\t\tscanButtonKeyCode:false, // Key code of the scanner hardware button (if the scanner button a acts as a key itself) \n\t\t\t\tscanButtonLongPressTime:500, // How long (ms) the hardware button should be pressed, until a callback gets executed\n\t\t\t\ttimeBeforeScanTest:100, // Wait duration (ms) after keypress event to check if scanning is finished\n\t\t\t\tavgTimeByChar:30, // Average time (ms) between 2 chars. Used to do difference between keyboard typing and scanning\n\t\t\t\tminLength:6, // Minimum length for a scanning\n\t\t\t\tsuffixKeyCodes:[9,13], // Chars to remove and means end of scanning\n\t\t\t\tprefixKeyCodes:[], // Chars to remove and means start of scanning\n\t\t\t\tignoreIfFocusOn:false, // do not handle scans if the currently focused element matches this selector or object\n\t\t\t\tstopPropagation:false, // Stop immediate propagation on keypress event\n\t\t\t\tpreventDefault:false, // Prevent default action on keypress event\n\t\t\t\tcaptureEvents:false, // Get the events before any listeners deeper in the DOM\n\t\t\t\treactToKeydown:true, // look for scan input in keyboard events\n\t\t\t\treactToPaste:false, // look for scan input in paste events\n\t\t\t\tsingleScanQty: 1, // Quantity of Items put out to onScan in a single scan\n\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\toOptions = this._mergeOptions(oDefaults, oOptions);\n\t\n\t\t\t// initializing options and variables on DomElement\n\t\t\toDomElement.scannerDetectionData = {\n\t\t\t\t\toptions: oOptions,\n\t\t\t\t\tvars:{\n\t\t\t\t\t\tfirstCharTime: 0,\n\t\t\t\t\t\tlastCharTime: 0,\n\t\t\t\t\t\taccumulatedString: '',\n\t\t\t\t\t\ttestTimer: false,\n\t\t\t\t\t\tlongPressTimeStart: 0,\n\t\t\t\t\t\tlongPressed: false\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t};\n\t\t\t\n\t\t\t// initializing handlers (based on settings)\n\t\t\tif (oOptions.reactToPaste === true){\n\t\t\t\toDomElement.addEventListener(\"paste\", this._handlePaste, oOptions.captureEvents);\n\t\t\t}\n\t\t\tif (oOptions.scanButtonKeyCode !== false){\n\t\t\t\toDomElement.addEventListener(\"keyup\", this._handleKeyUp, oOptions.captureEvents);\n\t\t\t}\n\t\t\tif (oOptions.reactToKeydown === true || oOptions.scanButtonKeyCode !== false){\t\n\t\t\t\toDomElement.addEventListener(\"keydown\", this._handleKeyDown, oOptions.captureEvents);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @return void\n\t\t */\n\t\tdetachFrom: function(oDomElement) {\n\t\t\t// detaching all used events\n\t\t\tif (oDomElement.scannerDetectionData.options.reactToPaste){\n\t\t\t\toDomElement.removeEventListener(\"paste\", this._handlePaste);\n\t\t\t}\n\t\t\tif (oDomElement.scannerDetectionData.options.scanButtonKeyCode !== false){\n\t\t\t\toDomElement.removeEventListener(\"keyup\", this._handleKeyUp);\n\t\t\t}\n\t\t\toDomElement.removeEventListener(\"keydown\", this._handleKeyDown);\n\t\t\t\n\t\t\t// clearing data off DomElement\n\t\t\toDomElement.scannerDetectionData = undefined; \n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @return Object\n\t\t */\n\t\tgetOptions: function(oDomElement){\n\t\t\treturn oDomElement.scannerDetectionData.options;\t\t\t\n\t\t},\n\t\n\t\t/**\n\t\t * \n\t\t * @param DomElement oDomElement\n\t\t * @param Object oOptions\n\t\t * @return self\n\t\t */\n\t\tsetOptions: function(oDomElement, oOptions){\n\t\t\t// check if some handlers need to be changed based on possible option changes\n\t\t\tswitch (oDomElement.scannerDetectionData.options.reactToPaste){\n\t\t\t\tcase true: \n\t\t\t\t\tif (oOptions.reactToPaste === false){\n\t\t\t\t\t\toDomElement.removeEventListener(\"paste\", this._handlePaste);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase false:\n\t\t\t\t\tif (oOptions.reactToPaste === true){\n\t\t\t\t\t\toDomElement.addEventListener(\"paste\", this._handlePaste);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tswitch (oDomElement.scannerDetectionData.options.scanButtonKeyCode){\n\t\t\t\tcase false:\n\t\t\t\t\tif (oOptions.scanButtonKeyCode !== false){\n\t\t\t\t\t\toDomElement.addEventListener(\"keyup\", this._handleKeyUp);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: \n\t\t\t\t\tif (oOptions.scanButtonKeyCode === false){\n\t\t\t\t\t\toDomElement.removeEventListener(\"keyup\", this._handleKeyUp);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\t// merge old and new options\n\t\t\toDomElement.scannerDetectionData.options = this._mergeOptions(oDomElement.scannerDetectionData.options, oOptions);\n\t\t\n\t\t\t// reinitiallize\n\t\t\tthis._reinitialize(oDomElement);\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Transforms key codes into characters.\n\t\t * \n\t\t * By default, only the follwing key codes are taken into account\n\t\t * - 48-90 (letters and regular numbers)\n\t\t * - 96-105 (numeric keypad numbers)\n\t\t * - 106-111 (numeric keypad operations)\n\t\t * \n\t\t * All other keys will yield empty strings!\n\t\t * \n\t\t * The above keycodes will be decoded using the KeyboardEvent.key property on modern\n\t\t * browsers. On older browsers the method will fall back to String.fromCharCode()\n\t\t * putting the result to upper/lower case depending on KeyboardEvent.shiftKey if\n\t\t * it is set.\n\t\t * \n\t\t * @param KeyboardEvent oEvent\n\t\t * @return string\n\t\t */\n\t\tdecodeKeyEvent : function (oEvent) {\n\t\t\tvar iCode = this._getNormalizedKeyNum(oEvent);\n\t\t\tswitch (true) {\n\t\t\t\tcase iCode >= 48 && iCode <= 90: // numbers and letters\n\t\t\t\tcase iCode >= 106 && iCode <= 111: // operations on numeric keypad (+, -, etc.)\n\t\t\t\t\tif (oEvent.key !== undefined && oEvent.key !== '') {\n\t\t\t\t\t\treturn oEvent.key;\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\tvar sDecoded = String.fromCharCode(iCode);\n\t\t\t\t\tswitch (oEvent.shiftKey) {\n\t\t\t\t\t\tcase false: sDecoded = sDecoded.toLowerCase(); break;\n\t\t\t\t\t\tcase true: sDecoded = sDecoded.toUpperCase(); break;\n\t\t\t\t\t}\n\t\t\t\t\treturn sDecoded;\n\t\t\t\tcase iCode >= 96 && iCode <= 105: // numbers on numeric keypad\n\t\t\t\t\treturn 0+(iCode-96);\n\t\t\t}\n\t\t\treturn '';\n\t\t},\n\t\t\n\t\t/**\n\t\t * Simulates a scan of the provided code.\n\t *\n\t\t * The scan code can be defined as\n\t\t * - a string - in this case no keyCode decoding is done and the code is merely validated\n\t\t * against constraints like minLenght, etc.\n\t\t * - an array of keyCodes (e.g. `[70,71,80]`) - will produce `keydown` events with corresponding\n\t\t * `keyCode` properties. NOTE: these events will have empty `key` properties, so decoding may\n\t\t * yield different results than with native events.\n\t\t * - an array of objects (e.g. `[{keyCode: 70, key: \"F\", shiftKey: true}, {keyCode: 71, key: \"g\"}]`) -\n\t\t * this way almost any event can be simulated, but it's a lot of work to do.\n\t\t *\n\t\t * @param DomElement oDomElement\n\t\t * @param string|array mStringOrArray\n\t\t * @return self\n\t\t */\n\t\tsimulate: function(oDomElement, mStringOrArray){\n\t\t\tthis._reinitialize(oDomElement);\n\t\t\tif (Array.isArray(mStringOrArray)){\n\t\t\t\tmStringOrArray.forEach(function(mKey){\n\t\t\t\t\tvar oEventProps = {};\n\t\t\t\t\tif( (typeof mKey === \"object\" || typeof mKey === 'function') && (mKey !== null) ) {\n\t\t\t\t\t\toEventProps = mKey;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toEventProps.keyCode = parseInt(mKey);\n\t\t\t\t\t}\n\t\t\t\t\tvar oEvent = new KeyboardEvent('keydown', oEventProps);\n\t\t\t\t\tdocument.dispatchEvent(oEvent);\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis._validateScanCode(oDomElement, mStringOrArray);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param DomElement oDomElement\n\t\t * @return void\n\t\t */\n\t\t_reinitialize: function(oDomElement){\n\t\t\tvar oVars = oDomElement.scannerDetectionData.vars;\n\t\t\toVars.firstCharTime = 0;\n\t\t\toVars.lastCharTime = 0;\n\t\t\toVars.accumulatedString = '';\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param DomElement oDomElement\n\t * @return boolean\n\t\t */\n\t\t_isFocusOnIgnoredElement: function(oDomElement){\n\t\t\t\n\t\t\tvar ignoreSelectors = oDomElement.scannerDetectionData.options.ignoreIfFocusOn;\n\t\n\t if(!ignoreSelectors){\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\n\t\t\tvar oFocused = document.activeElement;\n\t\t\t\n\t\t\t// checks if ignored element is an array, and if so it checks if one of the elements of it is an active one\n\t\t\tif (Array.isArray(ignoreSelectors)){\n\t\t\t\tfor(var i=0; i<ignoreSelectors.length; i++){\n\t\t\t\t\tif(oFocused.matches(ignoreSelectors[i]) === true){\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t// if the option consists of an single element, it only checks this one\n\t\t\t} else if (oFocused.matches(ignoreSelectors)){\n\t\t\t\treturn true;\t\t\t\t\t\n\t\t\t}\n\t\t\t\n\t\t\t// if the active element is not listed in the ignoreIfFocusOn option, return false\n\t\t return false;\n\t },\n\t\t\n\t /**\n\t * Validates the scan code accumulated by the given DOM element and fires the respective events.\n\t * \n\t * @private\n\t * @param DomElement oDomElement\n\t * @return boolean\n\t */\n\t\t_validateScanCode: function(oDomElement, sScanCode){\n\t\t\tvar oScannerData = oDomElement.scannerDetectionData;\t\t\t\n\t\t\tvar oOptions = oScannerData.options;\n\t\t\tvar iSingleScanQty = oScannerData.options.singleScanQty;\n\t\t\tvar iFirstCharTime = oScannerData.vars.firstCharTime;\n\t\t\tvar iLastCharTime = oScannerData.vars.lastCharTime;\n\t\t\tvar oScanError = {};\n\t var oEvent;\n\t \n\t\t\tswitch(true){\n\t\t\t\t\n\t\t\t\t// detect codes that are too short\n\t\t\t\tcase (sScanCode.length < oOptions.minLength):\n\t\t\t\t\toScanError = {\n\t\t\t\t\t\tmessage: \"Receieved code is shorter then minimal length\"\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// detect codes that were entered too slow\t\n\t\t\t\tcase ((iLastCharTime - iFirstCharTime) > (sScanCode.length * oOptions.avgTimeByChar)):\n\t\t\t\t\toScanError = {\n\t\t\t\t\t\tmessage: \"Receieved code was not entered in time\"\n\t\t\t\t\t};\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// if a code was not filtered out earlier it is valid\t\n\t\t\t\tdefault:\n\t\t\t\t\toOptions.onScan.call(oDomElement, sScanCode, iSingleScanQty);\n\t\t\t\t\toEvent = new CustomEvent(\n\t\t\t\t\t\t'scan',\n\t\t\t\t\t\t{\t\n\t\t\t\t\t\t\tdetail: { \n\t\t\t\t\t\t\t\tscanCode: sScanCode,\n\t\t\t\t\t\t\t\tqty: iSingleScanQty\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\toDomElement.dispatchEvent(oEvent);\n\t\t\t\t\tonScan._reinitialize(oDomElement);\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\t\n\t\t\t// If an error occurred (otherwise the method would return earlier) create an object for errordetection\n\t\t\toScanError.scanCode = sScanCode;\n\t\t\toScanError.scanDuration = iLastCharTime - iFirstCharTime;\n\t\t\toScanError.avgTimeByChar = oOptions.avgTimeByChar;\n\t\t\toScanError.minLength = oOptions.minLength;\n\t\t\t\n\t\t\toOptions.onScanError.call(oDomElement, oScanError);\n\t\t\t\n\t\t\toEvent = new CustomEvent(\n\t\t\t\t'scanError', \n\t\t\t\t{detail: oScanError}\n\t\t\t);\n\t\t\toDomElement.dispatchEvent(oEvent);\n\t\t\t\n\t\t\tonScan._reinitialize(oDomElement);\n\t\t\treturn false;\n\t },\n\t\n\t /**\n\t * @private\n\t * @param Object oDefaults\n\t * @param Object oOptions\n\t * @return Object\n\t */\n\t\t_mergeOptions: function(oDefaults, oOptions){\n\t\t\tvar oExtended = {};\n\t\t\tvar prop;\n\t\t\tfor (prop in oDefaults){\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(oDefaults, prop)){\n\t\t\t\t\toExtended[prop] = oDefaults[prop];\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t\tfor (prop in oOptions){\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(oOptions, prop)){\n\t\t\t\t\toExtended[prop] = oOptions[prop];\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t\treturn oExtended;\n\t\t},\n\t\n\t\t/**\n\t\t * @private\n\t\t * @param KeyboardEvent e\n\t\t * @return int\n\t\t * @see https://www.w3schools.com/jsref/event_key_keycode.asp\n\t\t */\n\t\t_getNormalizedKeyNum: function(e){\n\t\t\treturn e.which || e.keyCode;\n\t\t},\n\t\n\t\n\t\t/**\n\t\t * @private\n\t\t * @param KeyboardEvent e\n\t\t * @return void\n\t\t */\n\t\t_handleKeyDown: function(e){\n\t\t\tvar iKeyCode = onScan._getNormalizedKeyNum(e);\n\t\t\tvar oOptions = this.scannerDetectionData.options;\n\t\t\tvar oVars = this.scannerDetectionData.vars;\n\t\t\tvar bScanFinished = false;\n\t\t\t\n\t\t\tif (oOptions.onKeyDetect.call(this, iKeyCode, e) === false) {\n\t\t\t\treturn;\n\t\t\t}\t\t\n\t\t\t\n\t\t\tif (onScan._isFocusOnIgnoredElement(this)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\t\t\t\n\t // If it's just the button of the scanner, ignore it and wait for the real input\n\t\t if(oOptions.scanButtonKeyCode !== false && iKeyCode==oOptions.scanButtonKeyCode) {\n\t\t\t\t\n\t\t\t\t// if the button was first pressed, start a timeout for the callback, which gets interrupted if the scanbutton gets released\n\t\t\t\tif (!oVars.longPressed){\n\t\t\t\t\toVars.longPressTimer = setTimeout( oOptions.onScanButtonLongPress, oOptions.scanButtonLongPressTime, this);\n\t\t\t\t\toVars.longPressed = true;\n\t\t\t\t}\n\t\n\t\t\t\treturn;\n\t }\n\t\t\t\n\t\t\tswitch(true){\n\t\t\t\t// If it's not the first character and we encounter a terminating character, trigger scan process\n\t\t\t\tcase (oVars.firstCharTime && oOptions.suffixKeyCodes.indexOf(iKeyCode)!==-1):\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tbScanFinished=true;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// If it's the first character and we encountered one of the starting characters, don't process the scan\t\n\t\t\t\tcase (!oVars.firstCharTime && oOptions.prefixKeyCodes.indexOf(iKeyCode)!==-1):\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tbScanFinished=false;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t// Otherwise, just add the character to the scan string we're building\t\n\t\t\t\tdefault:\n\t\t\t\t\tvar character = oOptions.keyCodeMapper.call(this, e);\n\t\t\t\t\tif (character === null){\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\toVars.accumulatedString += character;\n\t\t\t\t\t\n\t\t\t\t\tif (oOptions.preventDefault) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tif (oOptions.stopPropagation) {\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tbScanFinished=false;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t \n\t\t\tif(!oVars.firstCharTime){\n\t\t\t\toVars.firstCharTime=Date.now();\n\t\t\t}\n\t\t\t\n\t\t\toVars.lastCharTime=Date.now();\n\t\n\t\t\tif(oVars.testTimer){ \n\t\t\t\tclearTimeout(oVars.testTimer);\n\t\t\t}\n\t\t\t\n\t\t\tif(bScanFinished){\n\t\t\t\tonScan._validateScanCode(this, oVars.accumulatedString);\n\t\t\t\toVars.testTimer=false;\n\t\t\t} else {\n\t\t\t\toVars.testTimer=setTimeout(onScan._validateScanCode, oOptions.timeBeforeScanTest, this, oVars.accumulatedString);\n\t\t\t}\n\t\n\t\t\toOptions.onKeyProcess.call(this, character, e);\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param Event e\n\t\t * @return void\n\t\t */\n\t\t_handlePaste: function(e){\n\t\n\t\t\tvar oOptions = this.scannerDetectionData.options;\n\t\t\tvar oVars = this.scannerDetectionData.vars;\n\t\t\tvar sPasteString = (event.clipboardData || window.clipboardData).getData('text');\n\t\t\t\n\t\t\t// if the focus is on an ignored element, abort\n\t\t\tif (onScan._isFocusOnIgnoredElement(this)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\te.preventDefault();\n\n\t\t\tif (oOptions.stopPropagation) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\t\t\t\t\t\t\n\t\t\toOptions.onPaste.call(this, sPasteString, event);\n\t\t\t\n\t\t\toVars.firstCharTime = 0;\n\t\t\toVars.lastCharTime = 0;\n\t\t\t\n\t\t\t// validate the string\n\t\t\tonScan._validateScanCode(this, sPasteString);\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * @private\n\t\t * @param KeyboardEvent e\n\t\t * @return void\n\t\t */\n\t\t_handleKeyUp: function(e){\n\t\t\t// if the focus is on an ignored element, abort\n\t\t\tif (onScan._isFocusOnIgnoredElement(this)){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tvar iKeyCode = onScan._getNormalizedKeyNum(e);\n\t\t\t\n\t\t\t// if hardware key is not being pressed anymore stop the timeout and reset\n\t\t\tif (iKeyCode == this.scannerDetectionData.options.scanButtonKeyCode){\n\t\t\t\tclearTimeout(this.scannerDetectionData.vars.longPressTimer);\n\t\t\t\tthis.scannerDetectionData.vars.longPressed = false;\n\t\t\t}\n\t\t\treturn;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Returns TRUE the scanner is currently in the middle of a scan sequence.\n\t\t * \n\t\t * @param DomElement\n\t\t * @return boolean\n\t\t */\n\t\tisScanInProgressFor: function(oDomElement) {\n\t\t\treturn oDomElement.scannerDetectionData.vars.firstCharTime > 0;\n\t\t},\n\t\t\n\t\t/**\n\t\t * Returns TRUE if onScan is attached to the given DOM element and FALSE otherwise.\n\t\t * \n\t\t * @param DomElement\n\t\t * @return boolean\n\t\t */\n\t\tisAttachedTo: function(oDomElement) {\n\t\t\treturn (oDomElement.scannerDetectionData !== undefined);\n\t\t}\n\t};\n\t\n\treturn onScan;\n})));","<template>\n\t<div id=\"scan_input\"></div>\n</template>\n\n<script setup lang=\"ts\">\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport onScan from 'onscan.js'\nimport { onMounted, onUnmounted } from 'vue'\n\nconst emit = defineEmits<{ scanInstance: [instance: onScan] }>()\nconst props = defineProps<{\n\tscanHandler: (barcode: string, qty: number) => void\n}>()\n\nonMounted(() => {\n\tconst instance = onScan.attachTo(window, { onScan: props.scanHandler })\n\temit('scanInstance', instance)\n})\n\nonUnmounted(() => {\n\tonScan.detachFrom(window)\n})\n</script>\n","import { App } from 'vue'\n\nimport ActionFooter from '@/components/ActionFooter.vue'\nimport BeamModal from '@/components/BeamModal.vue'\nimport BeamModalOutlet from '@/components/BeamModalOutlet.vue'\nimport Confirm from '@/components/Confirm.vue'\nimport ItemCheck from '@/components/ItemCheck.vue'\nimport ItemCount from '@/components/ItemCount.vue'\nimport ListAnchor from '@/components/ListAnchor.vue'\nimport ListItem from '@/components/ListItem.vue'\nimport ListView from '@/components/ListView.vue'\nimport Navbar from '@/components/Navbar.vue'\nimport ScanInput from '@/components/ScanInput.vue'\nimport 'themes/beam.css'\n\n/**\n * Install all Beam components\n * @param app - Vue app instance\n * @public\n */\nfunction install(app: App /* options */) {\n\tapp.component('ActionFooter', ActionFooter)\n\tapp.component('BeamModal', BeamModal)\n\tapp.component('BeamModalOutlet', BeamModalOutlet)\n\tapp.component('Confirm', Confirm)\n\tapp.component('ItemCheck', ItemCheck)\n\tapp.component('ItemCount', ItemCount)\n\tapp.component('ListAnchor', ListAnchor)\n\tapp.component('ListItem', ListItem)\n\tapp.component('ListView', ListView)\n\tapp.component('Navbar', Navbar)\n\tapp.component('ScanInput', ScanInput)\n}\n\nexport {\n\tActionFooter,\n\tBeamModal,\n\tBeamModalOutlet,\n\tConfirm,\n\tItemCheck,\n\tItemCount,\n\tListAnchor,\n\tListItem,\n\tListView,\n\tNavbar,\n\tScanInput,\n\tinstall,\n}\n"],"names":["emit","__emit","handleFooterAction","_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","$event","value","_useModel","__props","count","isCountComplete","computed","handleInput","event","newValue","listItem","ref","onMounted","handleScroll","onUnmounted","scrollHeightDifference","scrollposition","handlePrimaryAction","global","factory","module","this","onScan","oDomElement","oOptions","oDefaults","sScanned","iQty","oDebug","sChar","oEvent","iKeyCode","sPasted","iCode","sDecoded","mStringOrArray","mKey","oEventProps","oVars","ignoreSelectors","oFocused","i","sScanCode","oScannerData","iSingleScanQty","iFirstCharTime","iLastCharTime","oScanError","oExtended","prop","e","bScanFinished","character","sPasteString","props","instance","install","app","ActionFooter","BeamModal","BeamModalOutlet","Confirm","ItemCheck","ItemCount","ListAnchor","ListItem","ListView","Navbar","ScanInput"],"mappings":"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","x_google_ignoreList":[7]}
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- @import"https://fonts.googleapis.com/css2?family=Arimo:ital,wght@0,400..700;1,400..700&display=swap";.container[data-v-914c0391]{display:block;position:relative;padding-left:2.5ch;margin:0;margin-top:.5rem;cursor:pointer;font-size:2rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.container input[data-v-914c0391]{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark[data-v-914c0391]{position:absolute;top:0;left:0;height:2rem;width:2rem;background-color:#eee;outline:2px solid transparent;border:1px solid var(--highlight)}.container:hover input~.checkmark[data-v-914c0391]{background-color:#fff}.container input:checked~.checkmark[data-v-914c0391]{background-color:var(--brand-secondary)}.checkmark[data-v-914c0391]:after{content:"";position:absolute;display:none}.container input:checked~.checkmark[data-v-914c0391]:after{display:block}.container .checkmark[data-v-914c0391]:after{left:25%;top:50%;width:.5rem;height:1rem;border:solid var(--text-color);border-width:0 3px 3px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg) translate(-50%,-50%)}:root{--primary-color: #0098c9;--primary-text-color: #ffffff;--brand-color: #202a44;--gray-5: #f2f2f2;--gray-10: #e6e6e6;--gray-20: #cccccc;--gray-50: #808080;--gray-60: #666666;--gray-80: #333333;--brand-danger: #e63c28;--brand-success: #155724;--row-color-zebra-light: #eeeeee;--row-color-zebra-dark: #dddddd;--focus-cell-background: #ffffff;--focus-cell-outline: #000000;--cell-border-color: #ffffff;--cell-text-color: #3a3c41;--active-cell-background: #ffffff;--active-cell-outline: #e6a92d;--row-border-color: var(--gray-20);--header-border-color: #ffffff;--header-text-color: var(--gray-20);--row-number-background-color: #ffffff;--input-border-color: var(--gray-20);--input-label-color: var(--gray-60);--input-active-border-color: #000000;--input-active-label-color: #000000;--required-border: #e63c28;--font-size: 10px;--font-family: Arimo, Arial, sans-serif;--table-font-size: 16px;--atable-font-family: "Arimo", sans-serif;--atable-row-padding: 0px;--atable-row-height: 1.5em;--btn-color: white;--btn-border: #cccccc;--btn-hover: #f2f2f2;--btn-label-color: black}.aform{display:flex;flex-wrap:wrap;gap:1rem;padding:1rem;border:1px solid var(--gray-5);border-left:4px solid var(--gray-5);margin-bottom:1rem;max-width:100%}@media screen and (max-width:400px){.aform{flex-direction:column}}.aform__form-element{border:1px solid transparent;padding:0;margin:0;position:relative;box-sizing:border-box;flex-grow:1;min-width:100px}.aform__input-field{outline:1px solid transparent;border:1px solid var(--input-border-color);font-size:1rem;padding:.5rem .25rem .25rem .5rem;margin:0;border-radius:0;box-sizing:border-box;width:100%;position:relative;color:var(--cell-text-color)}.aform__field-label{color:var(--input-label-color);display:inline-block;position:absolute;padding:0 .25rem;margin:0rem;z-index:2;font-size:.7rem;font-weight:300;letter-spacing:.05rem;width:auto;box-sizing:border-box;background:#fff;margin:0;border:1px solid var(--input-border-color);grid-row:1;top:0;left:10px;border:none;transform:translateY(-50%)}p.error{display:block;display:inline-block;display:none;padding:0rem 0rem 0rem .5rem;margin:.5rem 0 .25rem 0rem;border:1px solid transparent;width:100%;width:auto;color:var(--brand-danger);font-size:.8rem;position:absolute;right:0;top:0;background:#fff;padding:.25rem;transform:translate(-1rem,-50%);margin:0}.aform__input-field:focus{border:1px solid var(--input-active-border-color)}.aform__input-field:focus+.aform__field-label{color:var(--input-active-label-color)}.aform__checkbox{cursor:pointer;width:auto;margin-top:0;display:block}.aform__checkbox:checked{accent-color:var(--primary-color);border:1px solid black}.aform__checkbox-container{width:100%;display:inline-block;text-align:left}.aform__checkbox-container input{width:auto}.aform__checkbox-container:hover+.aform__field-label{color:var(--input-active-label-color)}.aform-primary-action{font-size:100%;text-align:center;min-height:2em;padding:.25rem 1rem;border:1px solid var(--primary-color);color:var(--primary-text-color);background-color:var(--primary-color);outline:2px solid var(--primary-text-color);transition:outline-offset .2s ease;font-size:var(--font-size);margin:.5ch}.aform-primary-action:hover,.aform-primary-action:active{outline:2px solid var(--primary-text-color);outline-offset:-4px;transition:outline-offset .2s ease}tr:focus{background-color:#add8e6;outline:auto}.aform__form-btn{padding:.5rem 2rem;width:auto;border:1px solid var(--input-border-color);color:var(--input-label-color);cursor:pointer;background-color:#fff}.aform__form-btn:disabled{background-color:var(--gray-5)}.aform__file-attach{padding:1rem;display:flex;flex-wrap:wrap;gap:1rem;flex-direction:row;justify-content:center;align-items:center;border:1px dashed var(--input-border-color);width:100%}@media screen and (max-width:400px){.aform__file-attach>.aform__form-btn{width:100%}}.aform__file-attach-feedback{color:var(--input-label-color);width:100%;padding:.5rem;text-align:center;align-self:center}.aform__file-attach-feedback>li{list-style:none;font-style:italic}.aform__file-attach-feedback>p{margin-top:0}.atable{font-family:var(--atable-font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:var(--table-font-size);border-collapse:collapse}.row-index{color:var(--header-text-color);font-weight:700;text-align:center;-webkit-user-select:none;user-select:none;width:2ch}.expandable-row{border-top:1px solid var(--row-border-color);height:var(--atable-row-height);border-left:4px solid var(--row-border-color)}.expanded-row{border-bottom:1px solid var(--row-border-color);border-top:1px solid var(--row-border-color)}.expanded-row-content{border-bottom:1px solid var(--row-border-color);border-top:1px solid var(--row-border-color);padding:1.5rem}.atable__cell{border-radius:0;box-sizing:border-box;margin:0;outline:none;box-shadow:none;color:var(--cell-text-color);text-overflow:ellipsis;overflow:hidden;padding-left:.5ch!important;padding-right:.5ch;padding-top:var(--atable-row-padding);padding-bottom:var(--atable-row-padding);border-spacing:0px;border-collapse:collapse}.atable__cell:focus,.atable__cell:focus-within{background-color:var(--focus-cell-background);outline-width:2px;outline-style:solid;outline-color:var(--focus-cell-outline);box-shadow:none;min-height:1.15em;max-height:1.15em;overflow:hidden}.table-row{border-top:1px solid var(--row-border-color);height:var(--atable-row-height)}.list-index{color:var(--header-text-color);font-weight:700;padding-left:var(--atable-row-padding);padding-right:1em;text-align:center;-webkit-user-select:none;user-select:none;width:v-bind(numberedRowWidth);max-width:v-bind(numberedRowWidth)}.tree-index{color:var(--header-text-color);font-weight:700;text-align:center;-webkit-user-select:none;user-select:none;width:2ch}.atable #header-index{width:v-bind(numberedRowWidth);max-width:v-bind(numberedRowWidth)}.atable th{border-width:0px;border-style:solid;border-radius:0;padding-left:.5ch;padding-right:.5ch;padding-top:var(--atable-row-padding);padding-bottom:var(--atable-row-padding);color:var(--gray-60);height:var(--atable-row-height);font-weight:300;letter-spacing:.05rem}.atable th:focus{outline:none}.amodal{z-index:100;position:absolute;background-color:var(--row-color-zebra-dark)}.login-container{width:100%;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--font-family)}.account-container{width:100%;margin-left:auto;margin-top:.5rem;margin-right:auto;display:flex;flex-direction:column;justify-content:center}.account-header{display:flex;flex-direction:column;text-align:center;margin-top:.5rem}#account-title{font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:-.025em;margin:0}#account-subtitle{font-size:.875rem;line-height:1.25rem;margin:1rem}.login-form-container{display:grid;gap:.5rem}.login-form-element{display:grid;margin:.5rem 0;position:relative}.login-field{padding:.5rem .25rem .25rem .5rem;outline:1px solid transparent;border:1px solid var(--input-border-color);border-radius:.25rem}.login-field:focus{border:1px solid black}.btn{background-color:var(--btn-color);color:var(--btn-label-color);border:1px solid var(--btn-border);margin:.5rem 0;padding:.25rem;position:relative;cursor:pointer}.btn:hover{background-color:var(--btn-hover)}.btn:disabled{background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));color:light-dark(rgb(84,84,84),rgb(170,170,170))}.disabled{opacity:.5}.loading-icon{animation:spin 1s linear infinite forwards;display:inline-block;margin-right:.2rem;line-height:0;font-size:1rem;position:relative;top:.2rem}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:root{--primary-color: #f2f2f2;--primary-text-color: #666666;--brand-color: #202a44}body{font-family:var(--font-family);background-color:#fff;margin:0;padding:0;display:flex;flex-direction:column;flex:1 0 auto;height:100%}.home-icon{font-size:1.875rem;text-align:left;color:var(--primary-text-color);border:1px solid transparent}.home-icon:hover{border:1px solid var(--brand-primary)}.beam__navbar{padding:.625rem;background-color:var(--primary-color);margin-left:0;min-height:2em;max-height:2em;color:var(--primary-text-color);display:flex;flex-flow:row nowrap;align-content:center;justify-content:flex-start;align-items:center;position:sticky;top:0;border-bottom:1px solid var(--row-border-color)}.beam__navbar .nav-title{display:inline-block;border:1px solid transparent;margin-left:.625rem;text-align:left;font-size:1.125rem;color:var(--primary-text-color)}.beam__navbar .navbar-action-wrapper{position:absolute;right:.625rem;top:50%;transform:translateY(-50%);text-align:right}.beam__listview{list-style-type:none;margin:0rem .625rem;padding:0 0 2.5em;margin-top:1px}.beam__listitem{padding:.625rem;border-bottom:1px solid var(--row-border-color);max-width:100%;box-sizing:border-box;display:flex;flex-flow:row nowrap;justify-content:space-between;gap:1.25rem;cursor:pointer;outline:2px solid transparent;outline-offset:-1px}.beam__listitem:focus{outline:2px solid var(--focus-cell-outline);background-color:var(--focus-cell-background)}.beam__listtext{width:80%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;flex-grow:1;color:var(--primary-text-color)}.beam__listitem label{font-size:.875rem;font-weight:700;display:block;overflow:hidden;text-overflow:ellipsis}.beam__listitem p{font-size:.875rem;margin:0;overflow:hidden;text-overflow:ellipsis}.beam__itemcount{font-size:1.3125rem;color:var(--primary-text-color)}.beam__itemcount span{margin:0;padding:0;outline:none}.beam__listanchor{text-decoration:none;outline:none;color:var(--primary-text-color)}.btn{font-size:.875rem;text-align:center;padding:.3125rem .75rem;border:1px solid var(--btn-border);color:var(--btn-label-color);background-color:var(--btn-color);cursor:pointer}.btn:hover,.btn:active{background-color:var(--btn-hover)}.beam__actionfooter{margin-left:0;background:linear-gradient(180deg,transparent 0%,white 100%);color:var(--text-color);position:fixed;bottom:0;left:0;right:0;padding:.625rem;text-align:center}.success{color:var(--brand-success)}.alert{color:var(--brand-danger)}.beam__modal{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:1000;text-align:center;padding:1.25rem}.beam__modal-confirm{background:#fff;padding:1.25rem;width:80%;max-width:400px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.beam__modal-confirm button{margin:.625rem}.beam__modal-confirm h2{border-bottom:1px solid var(--row-border-color);padding-bottom:.625rem;color:var(--primary-text-color)}
1
+ @import"https://fonts.googleapis.com/css2?family=Arimo:ital,wght@0,400..700;1,400..700&display=swap";.container[data-v-f44a510e]{display:block;position:relative;padding-left:2.5ch;margin:0;margin-top:.5rem;cursor:pointer;font-size:2rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.container input[data-v-f44a510e]{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark[data-v-f44a510e]{position:absolute;top:0;left:0;height:2rem;width:2rem;background-color:#eee;outline:2px solid transparent;border:1px solid var(--highlight)}.container:hover input~.checkmark[data-v-f44a510e]{background-color:#fff}.container input:checked~.checkmark[data-v-f44a510e]{background-color:var(--brand-secondary)}.checkmark[data-v-f44a510e]:after{content:"";position:absolute;display:none}.container input:checked~.checkmark[data-v-f44a510e]:after{display:block}.container .checkmark[data-v-f44a510e]:after{left:25%;top:50%;width:.5rem;height:1rem;border:solid var(--text-color);border-width:0 3px 3px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg) translate(-50%,-50%)}:root{--primary-color: #0098c9;--primary-text-color: #ffffff;--brand-color: #202a44;--gray-5: #f2f2f2;--gray-10: #e6e6e6;--gray-20: #cccccc;--gray-50: #808080;--gray-60: #666666;--gray-80: #333333;--brand-danger: #e63c28;--brand-success: #155724;--row-color-zebra-light: #eeeeee;--row-color-zebra-dark: #dddddd;--focus-cell-background: #ffffff;--focus-cell-outline: #000000;--cell-border-color: #ffffff;--cell-text-color: #3a3c41;--active-cell-background: #ffffff;--active-cell-outline: #e6a92d;--row-border-color: var(--gray-20);--header-border-color: #ffffff;--header-text-color: var(--gray-20);--row-number-background-color: #ffffff;--input-border-color: var(--gray-20);--input-label-color: var(--gray-60);--input-active-border-color: #000000;--input-active-label-color: #000000;--required-border: #e63c28;--font-size: 10px;--font-family: Arimo, Arial, sans-serif;--table-font-size: 16px;--atable-font-family: "Arimo", sans-serif;--atable-row-padding: 0px;--atable-row-height: 1.5em;--btn-color: white;--btn-border: #cccccc;--btn-hover: #f2f2f2;--btn-label-color: black}.aform{display:flex;flex-wrap:wrap;gap:1rem;padding:1rem;border:1px solid var(--gray-5);border-left:4px solid var(--gray-5);margin-bottom:1rem;max-width:100%}@media screen and (max-width:400px){.aform{flex-direction:column}}.aform__form-element{border:1px solid transparent;padding:0;margin:0;position:relative;box-sizing:border-box;flex-grow:1;min-width:100px}.aform__input-field{outline:1px solid transparent;border:1px solid var(--input-border-color);font-size:1rem;padding:.5rem .25rem .25rem .5rem;margin:0;border-radius:0;box-sizing:border-box;width:100%;position:relative;color:var(--cell-text-color)}.aform__field-label{color:var(--input-label-color);display:inline-block;position:absolute;padding:0 .25rem;margin:0rem;z-index:2;font-size:.7rem;font-weight:300;letter-spacing:.05rem;width:auto;box-sizing:border-box;background:#fff;margin:0;border:1px solid var(--input-border-color);grid-row:1;top:0;left:10px;border:none;transform:translateY(-50%)}p.error{display:block;display:inline-block;display:none;padding:0rem 0rem 0rem .5rem;margin:.5rem 0 .25rem 0rem;border:1px solid transparent;width:100%;width:auto;color:var(--brand-danger);font-size:.8rem;position:absolute;right:0;top:0;background:#fff;padding:.25rem;transform:translate(-1rem,-50%);margin:0}.aform__input-field:focus{border:1px solid var(--input-active-border-color)}.aform__input-field:focus+.aform__field-label{color:var(--input-active-label-color)}.aform__checkbox{cursor:pointer;width:auto;margin-top:0;display:block}.aform__checkbox:checked{accent-color:var(--primary-color);border:1px solid black}.aform__checkbox-container{width:100%;display:inline-block;text-align:left}.aform__checkbox-container input{width:auto}.aform__checkbox-container:hover+.aform__field-label{color:var(--input-active-label-color)}.aform-primary-action{font-size:100%;text-align:center;min-height:2em;padding:.25rem 1rem;border:1px solid var(--primary-color);color:var(--primary-text-color);background-color:var(--primary-color);outline:2px solid var(--primary-text-color);transition:outline-offset .2s ease;font-size:var(--font-size);margin:.5ch}.aform-primary-action:hover,.aform-primary-action:active{outline:2px solid var(--primary-text-color);outline-offset:-4px;transition:outline-offset .2s ease}tr:focus{background-color:#add8e6;outline:auto}.aform__form-btn{padding:.5rem 2rem;width:auto;border:1px solid var(--input-border-color);color:var(--input-label-color);cursor:pointer;background-color:#fff}.aform__form-btn:disabled{background-color:var(--gray-5)}.aform__file-attach{padding:1rem;display:flex;flex-wrap:wrap;gap:1rem;flex-direction:row;justify-content:center;align-items:center;border:1px dashed var(--input-border-color);width:100%}@media screen and (max-width:400px){.aform__file-attach>.aform__form-btn{width:100%}}.aform__file-attach-feedback{color:var(--input-label-color);width:100%;padding:.5rem;text-align:center;align-self:center}.aform__file-attach-feedback>li{list-style:none;font-style:italic}.aform__file-attach-feedback>p{margin-top:0}.atable{font-family:var(--atable-font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:var(--table-font-size);border-collapse:collapse}.row-index{color:var(--header-text-color);font-weight:700;text-align:center;-webkit-user-select:none;user-select:none;width:2ch}.expandable-row{border-top:1px solid var(--row-border-color);height:var(--atable-row-height);border-left:4px solid var(--row-border-color)}.expanded-row{border-bottom:1px solid var(--row-border-color);border-top:1px solid var(--row-border-color)}.expanded-row-content{border-bottom:1px solid var(--row-border-color);border-top:1px solid var(--row-border-color);padding:1.5rem}.atable__cell{border-radius:0;box-sizing:border-box;margin:0;outline:none;box-shadow:none;color:var(--cell-text-color);text-overflow:ellipsis;overflow:hidden;padding-left:.5ch!important;padding-right:.5ch;padding-top:var(--atable-row-padding);padding-bottom:var(--atable-row-padding);border-spacing:0px;border-collapse:collapse}.atable__cell:focus,.atable__cell:focus-within{background-color:var(--focus-cell-background);outline-width:2px;outline-style:solid;outline-color:var(--focus-cell-outline);box-shadow:none;min-height:1.15em;max-height:1.15em;overflow:hidden}.table-row{border-top:1px solid var(--row-border-color);height:var(--atable-row-height)}.list-index{color:var(--header-text-color);font-weight:700;padding-left:var(--atable-row-padding);padding-right:1em;text-align:center;-webkit-user-select:none;user-select:none;width:v-bind(numberedRowWidth);max-width:v-bind(numberedRowWidth)}.tree-index{color:var(--header-text-color);font-weight:700;text-align:center;-webkit-user-select:none;user-select:none;width:2ch}.atable #header-index{width:v-bind(numberedRowWidth);max-width:v-bind(numberedRowWidth)}.atable th{border-width:0px;border-style:solid;border-radius:0;padding-left:.5ch;padding-right:.5ch;padding-top:var(--atable-row-padding);padding-bottom:var(--atable-row-padding);color:var(--gray-60);height:var(--atable-row-height);font-weight:300;letter-spacing:.05rem}.atable th:focus{outline:none}.amodal{z-index:100;position:absolute;background-color:var(--row-color-zebra-dark)}.login-container{width:100%;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:var(--font-family)}.account-container{width:100%;margin-left:auto;margin-top:.5rem;margin-right:auto;display:flex;flex-direction:column;justify-content:center}.account-header{display:flex;flex-direction:column;text-align:center;margin-top:.5rem}#account-title{font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:-.025em;margin:0}#account-subtitle{font-size:.875rem;line-height:1.25rem;margin:1rem}.login-form-container{display:grid;gap:.5rem}.login-form-element{display:grid;margin:.5rem 0;position:relative}.login-field{padding:.5rem .25rem .25rem .5rem;outline:1px solid transparent;border:1px solid var(--input-border-color);border-radius:.25rem}.login-field:focus{border:1px solid black}.btn{background-color:var(--btn-color);color:var(--btn-label-color);border:1px solid var(--btn-border);margin:.5rem 0;padding:.25rem;position:relative;cursor:pointer}.btn:hover{background-color:var(--btn-hover)}.btn:disabled{background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));color:light-dark(rgb(84,84,84),rgb(170,170,170))}.disabled{opacity:.5}.loading-icon{animation:spin 1s linear infinite forwards;display:inline-block;margin-right:.2rem;line-height:0;font-size:1rem;position:relative;top:.2rem}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:root{--primary-color: #f2f2f2;--primary-text-color: #666666;--brand-color: #202a44}body{font-family:var(--font-family);background-color:#fff;margin:0;padding:0;display:flex;flex-direction:column;flex:1 0 auto;height:100%}.home-icon{font-size:1.875rem;text-align:left;color:var(--primary-text-color);border:1px solid transparent}.home-icon:hover{border:1px solid var(--brand-primary)}.beam__navbar{padding:.625rem;background-color:var(--primary-color);margin-left:0;min-height:2em;max-height:2em;color:var(--primary-text-color);display:flex;flex-flow:row nowrap;align-content:center;justify-content:flex-start;align-items:center;position:sticky;top:0;border-bottom:1px solid var(--row-border-color)}.beam__navbar .nav-title{display:inline-block;border:1px solid transparent;margin-left:.625rem;text-align:left;font-size:1.125rem;color:var(--primary-text-color)}.beam__navbar .navbar-action-wrapper{position:absolute;right:.625rem;top:50%;transform:translateY(-50%);text-align:right}.beam__listview{list-style-type:none;margin:0rem .625rem;padding:0 0 2.5em;margin-top:1px}.beam__listitem{padding:.625rem;border-bottom:1px solid var(--row-border-color);max-width:100%;box-sizing:border-box;display:flex;flex-flow:row nowrap;justify-content:space-between;gap:1.25rem;cursor:pointer;outline:2px solid transparent;outline-offset:-1px}.beam__listitem:focus{outline:2px solid var(--focus-cell-outline);background-color:var(--focus-cell-background)}.beam__listtext{width:80%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;flex-grow:1;color:var(--primary-text-color)}.beam__listitem label{font-size:.875rem;font-weight:700;display:block;overflow:hidden;text-overflow:ellipsis}.beam__listitem p{font-size:.875rem;margin:0;overflow:hidden;text-overflow:ellipsis}.beam__itemcount{font-size:1.3125rem;color:var(--primary-text-color)}.beam__itemcount span{margin:0;padding:0;outline:none}.beam__listanchor{text-decoration:none;outline:none;color:var(--primary-text-color)}.btn{font-size:.875rem;text-align:center;padding:.3125rem .75rem;border:1px solid var(--btn-border);color:var(--btn-label-color);background-color:var(--btn-color);cursor:pointer}.btn:hover,.btn:active{background-color:var(--btn-hover)}.beam__actionfooter{margin-left:0;background:linear-gradient(180deg,transparent 0%,white 100%);color:var(--text-color);position:fixed;bottom:0;left:0;right:0;padding:.625rem;text-align:center}.success{color:var(--brand-success)}.alert{color:var(--brand-danger)}.beam__modal{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#00000080;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:1000;text-align:center;padding:1.25rem}.beam__modal-confirm{background:#fff;padding:1.25rem;width:80%;max-width:400px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.beam__modal-confirm button{margin:.625rem}.beam__modal-confirm h2{border-bottom:1px solid var(--row-border-color);padding-bottom:.625rem;color:var(--primary-text-color)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stonecrop/beam",
3
- "version": "0.2.34",
3
+ "version": "0.2.36",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "author": {
@@ -9,7 +9,7 @@
9
9
  </template>
10
10
 
11
11
  <script setup lang="ts">
12
- const emit = defineEmits(['click'])
12
+ const emit = defineEmits<{ click: [] }>()
13
13
 
14
14
  const handleFooterAction = () => {
15
15
  emit('click')
@@ -8,7 +8,5 @@
8
8
  </template>
9
9
 
10
10
  <script setup lang="ts">
11
- defineProps<{
12
- showModal: boolean
13
- }>()
11
+ defineProps<{ showModal: boolean }>()
14
12
  </script>
@@ -3,7 +3,10 @@
3
3
  </template>
4
4
 
5
5
  <script setup lang="ts">
6
- // const emit = defineEmits(['confirmmodal', 'closemodal'])
6
+ /* const emit = */ defineEmits<{
7
+ confirmmodal: []
8
+ closemodal: []
9
+ }>()
7
10
 
8
11
  // const confirmModal = () => {
9
12
  // emit('confirmmodal')
@@ -1,22 +1,12 @@
1
1
  <template>
2
2
  <label class="container">
3
- <input type="checkbox" :checked="value" @input="handleInput" tabindex="-1" />
3
+ <input type="checkbox" v-model="value" tabindex="-1" />
4
4
  <div class="checkmark" tabindex="0"></div>
5
5
  </label>
6
6
  </template>
7
7
 
8
8
  <script setup lang="ts">
9
- import { ref } from 'vue'
10
-
11
- const emit = defineEmits(['input'])
12
- // TODO: make this v-model sensitive from parent
13
- const { value } = defineProps<{ value?: boolean }>()
14
-
15
- const checked = ref(value)
16
-
17
- const handleInput = () => {
18
- emit('input', checked.value)
19
- }
9
+ const value = defineModel<boolean>({ default: false })
20
10
  </script>
21
11
 
22
12
  <style scoped>
@@ -1,10 +1,6 @@
1
1
  <template>
2
2
  <div class="beam__itemcount">
3
- <span
4
- :contenteditable="editable"
5
- :class="{ alert: countColor === false }"
6
- @input="handleInput"
7
- @click="handleInput">
3
+ <span :contenteditable="editable" :class="{ alert: !isCountComplete }" @input="handleInput" @click="handleInput">
8
4
  {{ count }}
9
5
  </span>
10
6
  <span>/{{ denominator }}</span>
@@ -13,31 +9,25 @@
13
9
  </template>
14
10
 
15
11
  <script setup lang="ts">
16
- import { ref, computed } from 'vue'
12
+ import { computed } from 'vue'
17
13
 
18
- const emit = defineEmits(['input'])
14
+ const count = defineModel<number>({ required: true })
19
15
  const {
20
- value = 0,
21
16
  denominator,
22
17
  uom = '',
23
18
  editable = true,
24
19
  } = defineProps<{
25
- value?: number
26
20
  denominator: number
27
21
  uom?: string
28
22
  editable?: boolean
29
23
  }>()
30
24
 
31
- const count = ref(value)
25
+ const isCountComplete = computed(() => count.value === denominator)
32
26
 
33
27
  const handleInput = (event: InputEvent | MouseEvent) => {
34
28
  event.preventDefault()
35
29
  event.stopPropagation()
36
- count.value = Number((event.target as HTMLElement).innerHTML.replace(/[^0-9]/g, ''))
37
- emit('input', count.value)
30
+ const newValue = Number((event.target as HTMLElement).innerHTML) || 0
31
+ count.value = Math.min(newValue, denominator)
38
32
  }
39
-
40
- const countColor = computed(() => {
41
- return count.value === denominator
42
- })
43
33
  </script>
@@ -1,17 +1,17 @@
1
1
  <template>
2
2
  <li tabindex="0" class="beam__listitem">
3
3
  <div class="beam__listtext">
4
- <label>{{ item.label }}</label>
5
- <p>{{ item.description }}</p>
4
+ <label>{{ listItem.label }}</label>
5
+ <p>{{ listItem.description }}</p>
6
6
  </div>
7
7
 
8
8
  <ItemCount
9
- v-if="item.count"
9
+ v-if="listItem.count"
10
10
  v-model="listItem.count.count"
11
- :denominator="item.count.of"
12
- :uom="item.count.uom"
11
+ :denominator="listItem.count.of"
12
+ :uom="listItem.count.uom"
13
13
  :editable="true" />
14
- <ItemCheck v-if="item.hasOwnProperty('checked')" v-model="listItem.checked" />
14
+ <ItemCheck v-if="listItem.hasOwnProperty('checked')" v-model="listItem.checked" />
15
15
  </li>
16
16
  </template>
17
17
 
@@ -33,7 +33,7 @@ defineProps<{
33
33
  }[]
34
34
  }>()
35
35
 
36
- const emit = defineEmits(['scrollbottom'])
36
+ const emit = defineEmits<{ scrollbottom: [] }>()
37
37
 
38
38
  onMounted(() => {
39
39
  window.addEventListener('scroll', handleScroll)
@@ -12,7 +12,7 @@
12
12
  </template>
13
13
 
14
14
  <script setup lang="ts">
15
- const emit = defineEmits(['click'])
15
+ const emit = defineEmits<{ click: [] }>()
16
16
 
17
17
  const handlePrimaryAction = () => {
18
18
  emit('click')
@@ -9,10 +9,7 @@
9
9
  import onScan from 'onscan.js'
10
10
  import { onMounted, onUnmounted } from 'vue'
11
11
 
12
- const emit = defineEmits<{
13
- scanInstance: [instance: onScan]
14
- }>()
15
-
12
+ const emit = defineEmits<{ scanInstance: [instance: onScan] }>()
16
13
  const props = defineProps<{
17
14
  scanHandler: (barcode: string, qty: number) => void
18
15
  }>()