@stonecrop/beam 0.2.42 → 0.2.43
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 +168 -179
- package/dist/beam.js.map +1 -1
- package/dist/beam.umd.cjs +1 -1
- package/dist/beam.umd.cjs.map +1 -1
- package/package.json +1 -1
- package/src/components/BeamMetadata.vue +23 -45
package/dist/beam.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
const H = { class: "beam__actionfooter" }, Q = { class: "footer-action-wrapper" },
|
|
1
|
+
import { defineComponent as d, openBlock as c, createElementBlock as u, createElementVNode as i, renderSlot as _, createTextVNode as w, normalizeClass as k, toDisplayString as p, createStaticVNode as M, resolveComponent as T, createBlock as v, withCtx as P, withDirectives as $, vShow as E, useModel as D, vModelCheckbox as F, mergeModels as N, computed as x, createCommentVNode as y, ref as A, onMounted as S, onUnmounted as B, Fragment as z, renderList as O, resolveDynamicComponent as U, createVNode as j } from "vue";
|
|
2
|
+
const H = { class: "beam__actionfooter" }, Q = { class: "footer-action-wrapper" }, R = /* @__PURE__ */ d({
|
|
3
3
|
__name: "ActionFooter",
|
|
4
4
|
emits: ["click"],
|
|
5
|
-
setup(r, { emit:
|
|
6
|
-
const s =
|
|
5
|
+
setup(r, { emit: o }) {
|
|
6
|
+
const s = o, e = () => {
|
|
7
7
|
s("click");
|
|
8
8
|
};
|
|
9
|
-
return (t,
|
|
9
|
+
return (t, a) => (c(), u("footer", H, [
|
|
10
10
|
i("span", Q, [
|
|
11
11
|
i("button", {
|
|
12
12
|
class: "footer-action btn",
|
|
@@ -17,96 +17,85 @@ const H = { class: "beam__actionfooter" }, Q = { class: "footer-action-wrapper"
|
|
|
17
17
|
])
|
|
18
18
|
]));
|
|
19
19
|
}
|
|
20
|
-
}), q = { class: "beam_metadata" },
|
|
20
|
+
}), q = { class: "beam_metadata" }, G = { class: "beam_metadata_content" }, W = { class: "beam_metadata_block" }, Y = { class: "beam_metadata_heading" }, J = /* @__PURE__ */ d({
|
|
21
21
|
__name: "BeamMetadata",
|
|
22
22
|
props: {
|
|
23
23
|
order: {}
|
|
24
24
|
},
|
|
25
25
|
setup(r) {
|
|
26
|
-
return (
|
|
27
|
-
i("div",
|
|
28
|
-
|
|
29
|
-
i("
|
|
30
|
-
|
|
31
|
-
i("
|
|
26
|
+
return (o, s) => (c(), u("div", q, [
|
|
27
|
+
i("div", G, [
|
|
28
|
+
_(o.$slots, "default", {}, () => [
|
|
29
|
+
s[1] || (s[1] = i("div", { class: "beam_metadata_header beam_metadata--two-column" }, null, -1)),
|
|
30
|
+
i("div", W, [
|
|
31
|
+
i("p", Y, [
|
|
32
|
+
s[0] || (s[0] = w(" Status: ")),
|
|
33
|
+
i("span", {
|
|
34
|
+
class: k([{ alert: !o.order.complete }, "beam_metadata--normal"])
|
|
35
|
+
}, p(o.order.complete ? "Complete" : "In Progress"), 3)
|
|
36
|
+
])
|
|
32
37
|
]),
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}, [
|
|
36
|
-
i("p", null, m(n.order.quantity) + "/" + m(n.order.total), 1)
|
|
37
|
-
], 2)
|
|
38
|
-
]),
|
|
39
|
-
i("div", X, [
|
|
40
|
-
i("p", Z, [
|
|
41
|
-
s[0] || (s[0] = b(" Status: ")),
|
|
42
|
-
i("span", {
|
|
43
|
-
class: y([{ alert: !n.order.complete }, "beam_metadata--normal"])
|
|
44
|
-
}, m(n.order.complete ? "Complete" : "In Progress"), 3)
|
|
45
|
-
])
|
|
46
|
-
]),
|
|
47
|
-
s[1] || (s[1] = M('<div class="beam_metadata_shipping beam_metadata_block"><div class="beam_metadata_source"><p class="beam_metadata_heading">Source</p><p> Packing Warehouse Inc.<br> 1432 W. Parkway Ave.<br> Chicago, IL 60617 </p></div><div class="beam_metadata_arrow"><div class="beam_metadata_arrow-body"></div><div class="beam_metadata_arrow-head"><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6.74 7.78"><polygon points="6.74 3.89 0 0 0 7.78 6.74 3.89" style="fill:#c4c4c4;"></polygon></svg></div></div><div class="beam_metadata_source"><p class="beam_metadata_heading">Receiving</p><p> Packing Warehouse Inc.<br> 1432 W. Parkway Ave.<br> Chicago, IL 60617 </p></div></div><div class="beam_metadata_component_header beam_metadata_block"><p class="beam_metadata_heading">Components</p><p class="beam_metadata_heading">Quantity</p></div>', 2))
|
|
48
|
-
]),
|
|
49
|
-
i("div", ee, [
|
|
50
|
-
_(n.$slots, "components")
|
|
38
|
+
s[2] || (s[2] = M('<div class="beam_metadata_shipping beam_metadata_block"><div class="beam_metadata_source"><p class="beam_metadata_heading">Source</p></div><div class="beam_metadata_arrow"><div class="beam_metadata_arrow-body"></div><div class="beam_metadata_arrow-head"><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6.74 7.78"><polygon points="6.74 3.89 0 0 0 7.78 6.74 3.89" style="fill:#c4c4c4;"></polygon></svg></div></div><div class="beam_metadata_source"><p class="beam_metadata_heading">Receiving</p></div></div>', 1))
|
|
39
|
+
])
|
|
51
40
|
])
|
|
52
41
|
]));
|
|
53
42
|
}
|
|
54
|
-
}),
|
|
43
|
+
}), X = { class: "beam__modal" }, Z = /* @__PURE__ */ d({
|
|
55
44
|
__name: "BeamModal",
|
|
56
45
|
props: {
|
|
57
46
|
showModal: { type: Boolean }
|
|
58
47
|
},
|
|
59
48
|
setup(r) {
|
|
60
|
-
return (
|
|
49
|
+
return (o, s) => {
|
|
61
50
|
const e = T("portal");
|
|
62
51
|
return c(), v(e, { to: "beam__modal_outlet" }, {
|
|
63
52
|
default: P(() => [
|
|
64
|
-
$(i("div",
|
|
53
|
+
$(i("div", X, [
|
|
65
54
|
i("button", {
|
|
66
55
|
class: "btn",
|
|
67
|
-
onClick: s[0] || (s[0] = (t) =>
|
|
56
|
+
onClick: s[0] || (s[0] = (t) => o.$emit("closemodal"))
|
|
68
57
|
}, "Close Modal"),
|
|
69
|
-
_(
|
|
70
|
-
onClosemodal: s[1] || (s[1] = (t) =>
|
|
71
|
-
onConfirmmodal: s[2] || (s[2] = (t) =>
|
|
58
|
+
_(o.$slots, "default", {
|
|
59
|
+
onClosemodal: s[1] || (s[1] = (t) => o.$emit("closemodal")),
|
|
60
|
+
onConfirmmodal: s[2] || (s[2] = (t) => o.$emit("confirmmodal"))
|
|
72
61
|
})
|
|
73
62
|
], 512), [
|
|
74
|
-
[E,
|
|
63
|
+
[E, o.showModal]
|
|
75
64
|
])
|
|
76
65
|
]),
|
|
77
66
|
_: 3
|
|
78
67
|
});
|
|
79
68
|
};
|
|
80
69
|
}
|
|
81
|
-
}),
|
|
70
|
+
}), ee = /* @__PURE__ */ d({
|
|
82
71
|
__name: "BeamModalOutlet",
|
|
83
72
|
emits: ["confirmmodal", "closemodal"],
|
|
84
73
|
setup(r) {
|
|
85
|
-
return (
|
|
74
|
+
return (o, s) => {
|
|
86
75
|
const e = T("portal-target");
|
|
87
76
|
return c(), v(e, { name: "beam__modal_outlet" });
|
|
88
77
|
};
|
|
89
78
|
}
|
|
90
|
-
}),
|
|
79
|
+
}), K = (r, o) => {
|
|
91
80
|
const s = r.__vccOpts || r;
|
|
92
|
-
for (const [e, t] of
|
|
81
|
+
for (const [e, t] of o)
|
|
93
82
|
s[e] = t;
|
|
94
83
|
return s;
|
|
95
|
-
},
|
|
96
|
-
function
|
|
97
|
-
return c(),
|
|
98
|
-
|
|
84
|
+
}, te = {}, ne = { class: "beam__modal-confirm" };
|
|
85
|
+
function ae(r, o) {
|
|
86
|
+
return c(), u("div", ne, [
|
|
87
|
+
o[2] || (o[2] = i("h2", null, "Would you like to continue?", -1)),
|
|
99
88
|
i("button", {
|
|
100
89
|
class: "btn",
|
|
101
|
-
onClick:
|
|
90
|
+
onClick: o[0] || (o[0] = (s) => r.$emit("confirmmodal"))
|
|
102
91
|
}, "Yes"),
|
|
103
92
|
i("button", {
|
|
104
93
|
class: "btn",
|
|
105
|
-
onClick:
|
|
94
|
+
onClick: o[1] || (o[1] = (s) => r.$emit("closemodal"))
|
|
106
95
|
}, "No")
|
|
107
96
|
]);
|
|
108
97
|
}
|
|
109
|
-
const
|
|
98
|
+
const oe = /* @__PURE__ */ K(te, [["render", ae]]), se = { class: "container" }, re = /* @__PURE__ */ d({
|
|
110
99
|
__name: "ItemCheck",
|
|
111
100
|
props: {
|
|
112
101
|
modelValue: { type: Boolean, default: !1 },
|
|
@@ -114,14 +103,14 @@ const ce = /* @__PURE__ */ B(se, [["render", ie]]), le = { class: "container" },
|
|
|
114
103
|
},
|
|
115
104
|
emits: ["update:modelValue"],
|
|
116
105
|
setup(r) {
|
|
117
|
-
const
|
|
118
|
-
return (s, e) => (c(),
|
|
106
|
+
const o = D(r, "modelValue");
|
|
107
|
+
return (s, e) => (c(), u("label", se, [
|
|
119
108
|
$(i("input", {
|
|
120
109
|
type: "checkbox",
|
|
121
|
-
"onUpdate:modelValue": e[0] || (e[0] = (t) =>
|
|
110
|
+
"onUpdate:modelValue": e[0] || (e[0] = (t) => o.value = t),
|
|
122
111
|
tabindex: "-1"
|
|
123
112
|
}, null, 512), [
|
|
124
|
-
[F,
|
|
113
|
+
[F, o.value]
|
|
125
114
|
]),
|
|
126
115
|
e[1] || (e[1] = i("div", {
|
|
127
116
|
class: "checkmark",
|
|
@@ -129,7 +118,7 @@ const ce = /* @__PURE__ */ B(se, [["render", ie]]), le = { class: "container" },
|
|
|
129
118
|
}, null, -1))
|
|
130
119
|
]));
|
|
131
120
|
}
|
|
132
|
-
}),
|
|
121
|
+
}), L = /* @__PURE__ */ K(re, [["__scopeId", "data-v-f44a510e"]]), ie = { class: "beam__itemcount" }, ce = ["contenteditable"], le = { key: 0 }, I = /* @__PURE__ */ d({
|
|
133
122
|
__name: "ItemCount",
|
|
134
123
|
props: /* @__PURE__ */ N({
|
|
135
124
|
denominator: {},
|
|
@@ -141,135 +130,135 @@ const ce = /* @__PURE__ */ B(se, [["render", ie]]), le = { class: "container" },
|
|
|
141
130
|
}),
|
|
142
131
|
emits: ["update:modelValue"],
|
|
143
132
|
setup(r) {
|
|
144
|
-
const
|
|
133
|
+
const o = D(r, "modelValue"), s = x(() => o.value === r.denominator), e = (t) => {
|
|
145
134
|
t.preventDefault(), t.stopPropagation();
|
|
146
|
-
const
|
|
147
|
-
|
|
135
|
+
const a = Number(t.target.innerHTML) || 0;
|
|
136
|
+
o.value = Math.min(a, r.denominator);
|
|
148
137
|
};
|
|
149
|
-
return (t,
|
|
138
|
+
return (t, a) => (c(), u("div", ie, [
|
|
150
139
|
i("span", {
|
|
151
140
|
contenteditable: t.editable,
|
|
152
|
-
class:
|
|
141
|
+
class: k({ alert: !s.value }),
|
|
153
142
|
onInput: e,
|
|
154
143
|
onClick: e
|
|
155
|
-
},
|
|
156
|
-
i("span", null, "/" +
|
|
157
|
-
t.uom ? (c(),
|
|
144
|
+
}, p(o.value), 43, ce),
|
|
145
|
+
i("span", null, "/" + p(t.denominator), 1),
|
|
146
|
+
t.uom ? (c(), u("span", le, " " + p(t.uom), 1)) : y("", !0)
|
|
158
147
|
]));
|
|
159
148
|
}
|
|
160
|
-
}),
|
|
149
|
+
}), ue = ["href"], de = /* @__PURE__ */ d({
|
|
161
150
|
__name: "ListAnchor",
|
|
162
151
|
props: {
|
|
163
152
|
to: { default: "" }
|
|
164
153
|
},
|
|
165
154
|
setup(r) {
|
|
166
|
-
return (
|
|
167
|
-
href:
|
|
155
|
+
return (o, s) => (c(), u("a", {
|
|
156
|
+
href: o.to,
|
|
168
157
|
class: "beam__listanchor"
|
|
169
158
|
}, [
|
|
170
|
-
_(
|
|
171
|
-
], 8,
|
|
159
|
+
_(o.$slots, "default")
|
|
160
|
+
], 8, ue));
|
|
172
161
|
}
|
|
173
|
-
}),
|
|
162
|
+
}), me = {
|
|
174
163
|
tabindex: "0",
|
|
175
164
|
class: "beam__listitem"
|
|
176
|
-
},
|
|
165
|
+
}, fe = { class: "beam__listtext" }, b = /* @__PURE__ */ d({
|
|
177
166
|
__name: "ListItem",
|
|
178
167
|
props: {
|
|
179
168
|
item: {}
|
|
180
169
|
},
|
|
181
170
|
setup(r) {
|
|
182
|
-
const
|
|
183
|
-
return (s, e) => (c(),
|
|
184
|
-
i("div",
|
|
185
|
-
i("label", null,
|
|
186
|
-
i("p", null,
|
|
171
|
+
const o = A(r.item);
|
|
172
|
+
return (s, e) => (c(), u("li", me, [
|
|
173
|
+
i("div", fe, [
|
|
174
|
+
i("label", null, p(o.value.label), 1),
|
|
175
|
+
i("p", null, p(o.value.description), 1)
|
|
187
176
|
]),
|
|
188
|
-
|
|
177
|
+
o.value.count ? (c(), v(I, {
|
|
189
178
|
key: 0,
|
|
190
|
-
modelValue:
|
|
191
|
-
"onUpdate:modelValue": e[0] || (e[0] = (t) =>
|
|
192
|
-
denominator:
|
|
193
|
-
uom:
|
|
179
|
+
modelValue: o.value.count.count,
|
|
180
|
+
"onUpdate:modelValue": e[0] || (e[0] = (t) => o.value.count.count = t),
|
|
181
|
+
denominator: o.value.count.of,
|
|
182
|
+
uom: o.value.count.uom,
|
|
194
183
|
editable: !0
|
|
195
|
-
}, null, 8, ["modelValue", "denominator", "uom"])) :
|
|
196
|
-
|
|
184
|
+
}, null, 8, ["modelValue", "denominator", "uom"])) : y("", !0),
|
|
185
|
+
o.value.hasOwnProperty("checked") ? (c(), v(L, {
|
|
197
186
|
key: 1,
|
|
198
|
-
modelValue:
|
|
199
|
-
"onUpdate:modelValue": e[1] || (e[1] = (t) =>
|
|
200
|
-
}, null, 8, ["modelValue"])) :
|
|
187
|
+
modelValue: o.value.checked,
|
|
188
|
+
"onUpdate:modelValue": e[1] || (e[1] = (t) => o.value.checked = t)
|
|
189
|
+
}, null, 8, ["modelValue"])) : y("", !0)
|
|
201
190
|
]));
|
|
202
191
|
}
|
|
203
|
-
}),
|
|
192
|
+
}), pe = { class: "beam__listview" }, _e = /* @__PURE__ */ d({
|
|
204
193
|
__name: "ListView",
|
|
205
194
|
props: {
|
|
206
195
|
items: {}
|
|
207
196
|
},
|
|
208
197
|
emits: ["scrollbottom"],
|
|
209
|
-
setup(r, { emit:
|
|
210
|
-
const s =
|
|
198
|
+
setup(r, { emit: o }) {
|
|
199
|
+
const s = o;
|
|
211
200
|
S(() => {
|
|
212
201
|
window.addEventListener("scroll", e);
|
|
213
|
-
}),
|
|
202
|
+
}), B(() => {
|
|
214
203
|
window.removeEventListener("scroll", e);
|
|
215
204
|
});
|
|
216
205
|
const e = () => {
|
|
217
|
-
const t = document.documentElement.scrollHeight - window.innerHeight,
|
|
218
|
-
t -
|
|
206
|
+
const t = document.documentElement.scrollHeight - window.innerHeight, a = document.documentElement.scrollTop;
|
|
207
|
+
t - a <= 2 && s("scrollbottom");
|
|
219
208
|
};
|
|
220
|
-
return (t,
|
|
221
|
-
(c(!0),
|
|
222
|
-
key:
|
|
209
|
+
return (t, a) => (c(), u("ul", pe, [
|
|
210
|
+
(c(!0), u(z, null, O(t.items, (n) => (c(), u("li", {
|
|
211
|
+
key: n.label
|
|
223
212
|
}, [
|
|
224
|
-
|
|
213
|
+
n.linkComponent ? (c(), v(U(n.linkComponent), {
|
|
225
214
|
key: 0,
|
|
226
|
-
to:
|
|
215
|
+
to: n.route,
|
|
227
216
|
tabindex: "-1"
|
|
228
217
|
}, {
|
|
229
218
|
default: P(() => [
|
|
230
|
-
j(
|
|
219
|
+
j(b, { item: n }, null, 8, ["item"])
|
|
231
220
|
]),
|
|
232
221
|
_: 2
|
|
233
|
-
}, 1032, ["to"])) : (c(), v(
|
|
222
|
+
}, 1032, ["to"])) : (c(), v(b, {
|
|
234
223
|
key: 1,
|
|
235
|
-
item:
|
|
224
|
+
item: n
|
|
236
225
|
}, null, 8, ["item"]))
|
|
237
226
|
]))), 128))
|
|
238
227
|
]));
|
|
239
228
|
}
|
|
240
|
-
}),
|
|
229
|
+
}), ve = { class: "beam__navbar" }, he = { class: "navbar-action-wrapper" }, ye = /* @__PURE__ */ d({
|
|
241
230
|
__name: "Navbar",
|
|
242
231
|
emits: ["click"],
|
|
243
|
-
setup(r, { emit:
|
|
244
|
-
const s =
|
|
232
|
+
setup(r, { emit: o }) {
|
|
233
|
+
const s = o, e = () => {
|
|
245
234
|
s("click");
|
|
246
235
|
};
|
|
247
|
-
return (t,
|
|
236
|
+
return (t, a) => (c(), u("nav", ve, [
|
|
248
237
|
_(t.$slots, "title", {}, () => [
|
|
249
|
-
|
|
238
|
+
a[0] || (a[0] = i("h1", { class: "nav-title" }, "TITLE", -1))
|
|
250
239
|
]),
|
|
251
|
-
i("div",
|
|
240
|
+
i("div", he, [
|
|
252
241
|
i("button", {
|
|
253
242
|
class: "navbar-action btn",
|
|
254
243
|
onClick: e
|
|
255
244
|
}, [
|
|
256
245
|
_(t.$slots, "navbaraction", {}, () => [
|
|
257
|
-
|
|
246
|
+
a[1] || (a[1] = w("Action"))
|
|
258
247
|
])
|
|
259
248
|
])
|
|
260
249
|
])
|
|
261
250
|
]));
|
|
262
251
|
}
|
|
263
252
|
});
|
|
264
|
-
var
|
|
265
|
-
function
|
|
253
|
+
var be = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
|
|
254
|
+
function ge(r) {
|
|
266
255
|
return r && r.__esModule && Object.prototype.hasOwnProperty.call(r, "default") ? r.default : r;
|
|
267
256
|
}
|
|
268
257
|
var V = { exports: {} };
|
|
269
|
-
(function(r,
|
|
258
|
+
(function(r, o) {
|
|
270
259
|
(function(s, e) {
|
|
271
260
|
r.exports = e();
|
|
272
|
-
})(
|
|
261
|
+
})(be, function() {
|
|
273
262
|
var s = {
|
|
274
263
|
/**
|
|
275
264
|
*
|
|
@@ -280,24 +269,24 @@ var V = { exports: {} };
|
|
|
280
269
|
attachTo: function(e, t) {
|
|
281
270
|
if (e.scannerDetectionData !== void 0)
|
|
282
271
|
throw new Error("onScan.js is already initialized for DOM element " + e);
|
|
283
|
-
var
|
|
284
|
-
onScan: function(
|
|
272
|
+
var a = {
|
|
273
|
+
onScan: function(n, l) {
|
|
285
274
|
},
|
|
286
275
|
// Callback after detection of a successfull scanning: function(){sScancode, iCount)}()
|
|
287
|
-
onScanError: function(
|
|
276
|
+
onScanError: function(n) {
|
|
288
277
|
},
|
|
289
278
|
// Callback after detection of a unsuccessfull scanning (scanned string in parameter)
|
|
290
|
-
onKeyProcess: function(
|
|
279
|
+
onKeyProcess: function(n, l) {
|
|
291
280
|
},
|
|
292
281
|
// Callback after receiving and processing a char (scanned char in parameter)
|
|
293
|
-
onKeyDetect: function(
|
|
282
|
+
onKeyDetect: function(n, l) {
|
|
294
283
|
},
|
|
295
284
|
// Callback after detecting a keyDown (key char in parameter) - in contrast to onKeyProcess, this fires for non-character keys like tab, arrows, etc. too!
|
|
296
|
-
onPaste: function(
|
|
285
|
+
onPaste: function(n, l) {
|
|
297
286
|
},
|
|
298
287
|
// Callback after receiving a value on paste, no matter if it is a valid code or not
|
|
299
|
-
keyCodeMapper: function(
|
|
300
|
-
return s.decodeKeyEvent(
|
|
288
|
+
keyCodeMapper: function(n) {
|
|
289
|
+
return s.decodeKeyEvent(n);
|
|
301
290
|
},
|
|
302
291
|
// Custom function to decode a keydown event into a character. Must return decoded character or NULL if the given event should not be processed.
|
|
303
292
|
onScanButtonLongPress: function() {
|
|
@@ -332,7 +321,7 @@ var V = { exports: {} };
|
|
|
332
321
|
singleScanQty: 1
|
|
333
322
|
// Quantity of Items put out to onScan in a single scan
|
|
334
323
|
};
|
|
335
|
-
return t = this._mergeOptions(
|
|
324
|
+
return t = this._mergeOptions(a, t), e.scannerDetectionData = {
|
|
336
325
|
options: t,
|
|
337
326
|
vars: {
|
|
338
327
|
firstCharTime: 0,
|
|
@@ -410,16 +399,16 @@ var V = { exports: {} };
|
|
|
410
399
|
case (t >= 106 && t <= 111):
|
|
411
400
|
if (e.key !== void 0 && e.key !== "")
|
|
412
401
|
return e.key;
|
|
413
|
-
var
|
|
402
|
+
var a = String.fromCharCode(t);
|
|
414
403
|
switch (e.shiftKey) {
|
|
415
404
|
case !1:
|
|
416
|
-
|
|
405
|
+
a = a.toLowerCase();
|
|
417
406
|
break;
|
|
418
407
|
case !0:
|
|
419
|
-
|
|
408
|
+
a = a.toUpperCase();
|
|
420
409
|
break;
|
|
421
410
|
}
|
|
422
|
-
return
|
|
411
|
+
return a;
|
|
423
412
|
case (t >= 96 && t <= 105):
|
|
424
413
|
return 0 + (t - 96);
|
|
425
414
|
}
|
|
@@ -442,10 +431,10 @@ var V = { exports: {} };
|
|
|
442
431
|
* @return self
|
|
443
432
|
*/
|
|
444
433
|
simulate: function(e, t) {
|
|
445
|
-
return this._reinitialize(e), Array.isArray(t) ? t.forEach(function(
|
|
446
|
-
var
|
|
447
|
-
(typeof
|
|
448
|
-
var l = new KeyboardEvent("keydown",
|
|
434
|
+
return this._reinitialize(e), Array.isArray(t) ? t.forEach(function(a) {
|
|
435
|
+
var n = {};
|
|
436
|
+
(typeof a == "object" || typeof a == "function") && a !== null ? n = a : n.keyCode = parseInt(a);
|
|
437
|
+
var l = new KeyboardEvent("keydown", n);
|
|
449
438
|
document.dispatchEvent(l);
|
|
450
439
|
}) : this._validateScanCode(e, t), this;
|
|
451
440
|
},
|
|
@@ -467,12 +456,12 @@ var V = { exports: {} };
|
|
|
467
456
|
var t = e.scannerDetectionData.options.ignoreIfFocusOn;
|
|
468
457
|
if (!t)
|
|
469
458
|
return !1;
|
|
470
|
-
var
|
|
459
|
+
var a = document.activeElement;
|
|
471
460
|
if (Array.isArray(t)) {
|
|
472
|
-
for (var
|
|
473
|
-
if (
|
|
461
|
+
for (var n = 0; n < t.length; n++)
|
|
462
|
+
if (a.matches(t[n]) === !0)
|
|
474
463
|
return !0;
|
|
475
|
-
} else if (
|
|
464
|
+
} else if (a.matches(t))
|
|
476
465
|
return !0;
|
|
477
466
|
return !1;
|
|
478
467
|
},
|
|
@@ -484,20 +473,20 @@ var V = { exports: {} };
|
|
|
484
473
|
* @return boolean
|
|
485
474
|
*/
|
|
486
475
|
_validateScanCode: function(e, t) {
|
|
487
|
-
var
|
|
476
|
+
var a = e.scannerDetectionData, n = a.options, l = a.options.singleScanQty, f = a.vars.firstCharTime, g = a.vars.lastCharTime, m = {}, h;
|
|
488
477
|
switch (!0) {
|
|
489
|
-
case t.length <
|
|
490
|
-
|
|
478
|
+
case t.length < n.minLength:
|
|
479
|
+
m = {
|
|
491
480
|
message: "Receieved code is shorter then minimal length"
|
|
492
481
|
};
|
|
493
482
|
break;
|
|
494
|
-
case
|
|
495
|
-
|
|
483
|
+
case g - f > t.length * n.avgTimeByChar:
|
|
484
|
+
m = {
|
|
496
485
|
message: "Receieved code was not entered in time"
|
|
497
486
|
};
|
|
498
487
|
break;
|
|
499
488
|
default:
|
|
500
|
-
return
|
|
489
|
+
return n.onScan.call(e, t, l), h = new CustomEvent(
|
|
501
490
|
"scan",
|
|
502
491
|
{
|
|
503
492
|
detail: {
|
|
@@ -507,9 +496,9 @@ var V = { exports: {} };
|
|
|
507
496
|
}
|
|
508
497
|
), e.dispatchEvent(h), s._reinitialize(e), !0;
|
|
509
498
|
}
|
|
510
|
-
return
|
|
499
|
+
return m.scanCode = t, m.scanDuration = g - f, m.avgTimeByChar = n.avgTimeByChar, m.minLength = n.minLength, n.onScanError.call(e, m), h = new CustomEvent(
|
|
511
500
|
"scanError",
|
|
512
|
-
{ detail:
|
|
501
|
+
{ detail: m }
|
|
513
502
|
), e.dispatchEvent(h), s._reinitialize(e), !1;
|
|
514
503
|
},
|
|
515
504
|
/**
|
|
@@ -519,12 +508,12 @@ var V = { exports: {} };
|
|
|
519
508
|
* @return Object
|
|
520
509
|
*/
|
|
521
510
|
_mergeOptions: function(e, t) {
|
|
522
|
-
var
|
|
523
|
-
for (
|
|
524
|
-
Object.prototype.hasOwnProperty.call(e,
|
|
525
|
-
for (
|
|
526
|
-
Object.prototype.hasOwnProperty.call(t,
|
|
527
|
-
return
|
|
511
|
+
var a = {}, n;
|
|
512
|
+
for (n in e)
|
|
513
|
+
Object.prototype.hasOwnProperty.call(e, n) && (a[n] = e[n]);
|
|
514
|
+
for (n in t)
|
|
515
|
+
Object.prototype.hasOwnProperty.call(t, n) && (a[n] = t[n]);
|
|
516
|
+
return a;
|
|
528
517
|
},
|
|
529
518
|
/**
|
|
530
519
|
* @private
|
|
@@ -541,27 +530,27 @@ var V = { exports: {} };
|
|
|
541
530
|
* @return void
|
|
542
531
|
*/
|
|
543
532
|
_handleKeyDown: function(e) {
|
|
544
|
-
var t = s._getNormalizedKeyNum(e),
|
|
545
|
-
if (
|
|
546
|
-
if (
|
|
547
|
-
|
|
533
|
+
var t = s._getNormalizedKeyNum(e), a = this.scannerDetectionData.options, n = this.scannerDetectionData.vars, l = !1;
|
|
534
|
+
if (a.onKeyDetect.call(this, t, e) !== !1 && !s._isFocusOnIgnoredElement(this)) {
|
|
535
|
+
if (a.scanButtonKeyCode !== !1 && t == a.scanButtonKeyCode) {
|
|
536
|
+
n.longPressed || (n.longPressTimer = setTimeout(a.onScanButtonLongPress, a.scanButtonLongPressTime, this), n.longPressed = !0);
|
|
548
537
|
return;
|
|
549
538
|
}
|
|
550
539
|
switch (!0) {
|
|
551
|
-
case (
|
|
540
|
+
case (n.firstCharTime && a.suffixKeyCodes.indexOf(t) !== -1):
|
|
552
541
|
e.preventDefault(), e.stopImmediatePropagation(), l = !0;
|
|
553
542
|
break;
|
|
554
|
-
case (!
|
|
543
|
+
case (!n.firstCharTime && a.prefixKeyCodes.indexOf(t) !== -1):
|
|
555
544
|
e.preventDefault(), e.stopImmediatePropagation(), l = !1;
|
|
556
545
|
break;
|
|
557
546
|
default:
|
|
558
|
-
var
|
|
559
|
-
if (
|
|
547
|
+
var f = a.keyCodeMapper.call(this, e);
|
|
548
|
+
if (f === null)
|
|
560
549
|
return;
|
|
561
|
-
|
|
550
|
+
n.accumulatedString += f, a.preventDefault && e.preventDefault(), a.stopPropagation && e.stopImmediatePropagation(), l = !1;
|
|
562
551
|
break;
|
|
563
552
|
}
|
|
564
|
-
|
|
553
|
+
n.firstCharTime || (n.firstCharTime = Date.now()), n.lastCharTime = Date.now(), n.testTimer && clearTimeout(n.testTimer), l ? (s._validateScanCode(this, n.accumulatedString), n.testTimer = !1) : n.testTimer = setTimeout(s._validateScanCode, a.timeBeforeScanTest, this, n.accumulatedString), a.onKeyProcess.call(this, f, e);
|
|
565
554
|
}
|
|
566
555
|
},
|
|
567
556
|
/**
|
|
@@ -570,8 +559,8 @@ var V = { exports: {} };
|
|
|
570
559
|
* @return void
|
|
571
560
|
*/
|
|
572
561
|
_handlePaste: function(e) {
|
|
573
|
-
var t = this.scannerDetectionData.options,
|
|
574
|
-
s._isFocusOnIgnoredElement(this) || (e.preventDefault(), t.stopPropagation && e.stopImmediatePropagation(), t.onPaste.call(this,
|
|
562
|
+
var t = this.scannerDetectionData.options, a = this.scannerDetectionData.vars, n = (event.clipboardData || window.clipboardData).getData("text");
|
|
563
|
+
s._isFocusOnIgnoredElement(this) || (e.preventDefault(), t.stopPropagation && e.stopImmediatePropagation(), t.onPaste.call(this, n, event), a.firstCharTime = 0, a.lastCharTime = 0, s._validateScanCode(this, n));
|
|
575
564
|
},
|
|
576
565
|
/**
|
|
577
566
|
* @private
|
|
@@ -606,39 +595,39 @@ var V = { exports: {} };
|
|
|
606
595
|
return s;
|
|
607
596
|
});
|
|
608
597
|
})(V);
|
|
609
|
-
var
|
|
610
|
-
const
|
|
598
|
+
var Ce = V.exports;
|
|
599
|
+
const C = /* @__PURE__ */ ge(Ce), we = { id: "scan_input" }, ke = /* @__PURE__ */ d({
|
|
611
600
|
__name: "ScanInput",
|
|
612
601
|
props: {
|
|
613
602
|
scanHandler: { type: Function }
|
|
614
603
|
},
|
|
615
604
|
emits: ["scanInstance"],
|
|
616
|
-
setup(r, { emit:
|
|
617
|
-
const s =
|
|
605
|
+
setup(r, { emit: o }) {
|
|
606
|
+
const s = o, e = r;
|
|
618
607
|
return S(() => {
|
|
619
|
-
const t =
|
|
608
|
+
const t = C.attachTo(window, { onScan: e.scanHandler });
|
|
620
609
|
s("scanInstance", t);
|
|
621
|
-
}),
|
|
622
|
-
|
|
623
|
-
}), (t,
|
|
610
|
+
}), B(() => {
|
|
611
|
+
C.detachFrom(window);
|
|
612
|
+
}), (t, a) => (c(), u("div", we));
|
|
624
613
|
}
|
|
625
614
|
});
|
|
626
|
-
function
|
|
627
|
-
r.component("ActionFooter",
|
|
615
|
+
function Pe(r) {
|
|
616
|
+
r.component("ActionFooter", R), r.component("BeamMetadata", J), r.component("BeamModal", Z), r.component("BeamModalOutlet", ee), r.component("Confirm", oe), r.component("ItemCheck", L), r.component("ItemCount", I), r.component("ListAnchor", de), r.component("ListItem", b), r.component("ListView", _e), r.component("Navbar", ye), r.component("ScanInput", ke);
|
|
628
617
|
}
|
|
629
618
|
export {
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
619
|
+
R as ActionFooter,
|
|
620
|
+
J as BeamMetadata,
|
|
621
|
+
Z as BeamModal,
|
|
622
|
+
ee as BeamModalOutlet,
|
|
623
|
+
oe as Confirm,
|
|
624
|
+
L as ItemCheck,
|
|
625
|
+
I as ItemCount,
|
|
626
|
+
de as ListAnchor,
|
|
627
|
+
b as ListItem,
|
|
628
|
+
_e as ListView,
|
|
629
|
+
ye as Navbar,
|
|
630
|
+
ke as ScanInput,
|
|
631
|
+
Pe as install
|
|
643
632
|
};
|
|
644
633
|
//# 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\" 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\"> {{ 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 BeamMetadata from './components/BeamMetadata.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('BeamMetadata', BeamMetadata)\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\tBeamMetadata,\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","BeamMetadata","BeamModal","BeamModalOutlet","Confirm","ItemCheck","ItemCount","ListAnchor","ListItem","ListView","Navbar","ScanInput"],"mappings":"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","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\"> {{ 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 BeamMetadata from './components/BeamMetadata.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('BeamMetadata', BeamMetadata)\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\tBeamMetadata,\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","BeamMetadata","BeamModal","BeamModalOutlet","Confirm","ItemCheck","ItemCount","ListAnchor","ListItem","ListView","Navbar","ScanInput"],"mappings":"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","x_google_ignoreList":[7]}
|
package/dist/beam.umd.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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 N={class:"beam__actionfooter"},P={class:"footer-action-wrapper"},h=e.defineComponent({__name:"ActionFooter",emits:["click"],setup(i,{emit:o}){const s=o,t=()=>{s("click")};return(n,r)=>(e.openBlock(),e.createElementBlock("footer",N,[e.createElementVNode("span",P,[e.createElementVNode("button",{class:"footer-action btn",onClick:t},[e.renderSlot(n.$slots,"default")])])]))}}),v={class:"beam_metadata"},$={class:"beam_metadata_content"},I={class:"beam_metadata_header beam_metadata--two-column"},L={class:"beam_metadata_header-order-num"},K={class:"beam_metadata--normal"},M={class:"beam_metadata_block"},F={class:"beam_metadata_heading"},A={class:"beam_metadata_components"},y=e.defineComponent({__name:"BeamMetadata",props:{order:{}},setup(i){return(o,s)=>(e.openBlock(),e.createElementBlock("div",v,[e.createElementVNode("div",$,[e.createElementVNode("div",I,[e.createElementVNode("h1",L,[e.createTextVNode(e.toDisplayString(o.order.orderNumber)+" ",1),e.createElementVNode("span",K,e.toDisplayString(o.order.product),1)]),e.createElementVNode("div",{class:e.normalizeClass([{alert:!o.order.complete},"beam_metadata_count"])},[e.createElementVNode("p",null,e.toDisplayString(o.order.quantity)+"/"+e.toDisplayString(o.order.total),1)],2)]),e.createElementVNode("div",M,[e.createElementVNode("p",F,[s[0]||(s[0]=e.createTextVNode(" Status: ")),e.createElementVNode("span",{class:e.normalizeClass([{alert:!o.order.complete},"beam_metadata--normal"])},e.toDisplayString(o.order.complete?"Complete":"In Progress"),3)])]),s[1]||(s[1]=e.createStaticVNode('<div class="beam_metadata_shipping beam_metadata_block"><div class="beam_metadata_source"><p class="beam_metadata_heading">Source</p><p> Packing Warehouse Inc.<br> 1432 W. Parkway Ave.<br> Chicago, IL 60617 </p></div><div class="beam_metadata_arrow"><div class="beam_metadata_arrow-body"></div><div class="beam_metadata_arrow-head"><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6.74 7.78"><polygon points="6.74 3.89 0 0 0 7.78 6.74 3.89" style="fill:#c4c4c4;"></polygon></svg></div></div><div class="beam_metadata_source"><p class="beam_metadata_heading">Receiving</p><p> Packing Warehouse Inc.<br> 1432 W. Parkway Ave.<br> Chicago, IL 60617 </p></div></div><div class="beam_metadata_component_header beam_metadata_block"><p class="beam_metadata_heading">Components</p><p class="beam_metadata_heading">Quantity</p></div>',2))]),e.createElementVNode("div",A,[e.renderSlot(o.$slots,"components")])]))}}),z={class:"beam__modal"},b=e.defineComponent({__name:"BeamModal",props:{showModal:{type:Boolean}},setup(i){return(o,s)=>{const t=e.resolveComponent("portal");return e.openBlock(),e.createBlock(t,{to:"beam__modal_outlet"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",z,[e.createElementVNode("button",{class:"btn",onClick:s[0]||(s[0]=n=>o.$emit("closemodal"))},"Close Modal"),e.renderSlot(o.$slots,"default",{onClosemodal:s[1]||(s[1]=n=>o.$emit("closemodal")),onConfirmmodal:s[2]||(s[2]=n=>o.$emit("confirmmodal"))})],512),[[e.vShow,o.showModal]])]),_:3})}}}),g=e.defineComponent({__name:"BeamModalOutlet",emits:["confirmmodal","closemodal"],setup(i){return(o,s)=>{const t=e.resolveComponent("portal-target");return e.openBlock(),e.createBlock(t,{name:"beam__modal_outlet"})}}}),C=(i,o)=>{const s=i.__vccOpts||i;for(const[t,n]of o)s[t]=n;return s},O={},U={class:"beam__modal-confirm"};function j(i,o){return e.openBlock(),e.createElementBlock("div",U,[o[2]||(o[2]=e.createElementVNode("h2",null,"Would you like to continue?",-1)),e.createElementVNode("button",{class:"btn",onClick:o[0]||(o[0]=s=>i.$emit("confirmmodal"))},"Yes"),e.createElementVNode("button",{class:"btn",onClick:o[1]||(o[1]=s=>i.$emit("closemodal"))},"No")])}const k=C(O,[["render",j]]),H={class:"container"},u=C(e.defineComponent({__name:"ItemCheck",props:{modelValue:{type:Boolean,default:!1},modelModifiers:{}},emits:["update:modelValue"],setup(i){const o=e.useModel(i,"modelValue");return(s,t)=>(e.openBlock(),e.createElementBlock("label",H,[e.withDirectives(e.createElementVNode("input",{type:"checkbox","onUpdate:modelValue":t[0]||(t[0]=n=>o.value=n),tabindex:"-1"},null,512),[[e.vModelCheckbox,o.value]]),t[1]||(t[1]=e.createElementVNode("div",{class:"checkmark",tabindex:"0"},null,-1))]))}}),[["__scopeId","data-v-f44a510e"]]),Q={class:"beam__itemcount"},W=["contenteditable"],q={key:0},_=e.defineComponent({__name:"ItemCount",props:e.mergeModels({denominator:{},uom:{default:""},editable:{type:Boolean,default:!0}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const o=e.useModel(i,"modelValue"),s=e.computed(()=>o.value===i.denominator),t=n=>{n.preventDefault(),n.stopPropagation();const r=Number(n.target.innerHTML)||0;o.value=Math.min(r,i.denominator)};return(n,r)=>(e.openBlock(),e.createElementBlock("div",Q,[e.createElementVNode("span",{contenteditable:n.editable,class:e.normalizeClass({alert:!s.value}),onInput:t,onClick:t},e.toDisplayString(o.value),43,W),e.createElementVNode("span",null,"/"+e.toDisplayString(n.denominator),1),n.uom?(e.openBlock(),e.createElementBlock("span",q," "+e.toDisplayString(n.uom),1)):e.createCommentVNode("",!0)]))}}),R=["href"],B=e.defineComponent({__name:"ListAnchor",props:{to:{default:""}},setup(i){return(o,s)=>(e.openBlock(),e.createElementBlock("a",{href:o.to,class:"beam__listanchor"},[e.renderSlot(o.$slots,"default")],8,R))}}),x={tabindex:"0",class:"beam__listitem"},G={class:"beam__listtext"},p=e.defineComponent({__name:"ListItem",props:{item:{}},setup(i){const o=e.ref(i.item);return(s,t)=>(e.openBlock(),e.createElementBlock("li",x,[e.createElementVNode("div",G,[e.createElementVNode("label",null,e.toDisplayString(o.value.label),1),e.createElementVNode("p",null,e.toDisplayString(o.value.description),1)]),o.value.count?(e.openBlock(),e.createBlock(_,{key:0,modelValue:o.value.count.count,"onUpdate:modelValue":t[0]||(t[0]=n=>o.value.count.count=n),denominator:o.value.count.of,uom:o.value.count.uom,editable:!0},null,8,["modelValue","denominator","uom"])):e.createCommentVNode("",!0),o.value.hasOwnProperty("checked")?(e.openBlock(),e.createBlock(u,{key:1,modelValue:o.value.checked,"onUpdate:modelValue":t[1]||(t[1]=n=>o.value.checked=n)},null,8,["modelValue"])):e.createCommentVNode("",!0)]))}}),Y={class:"beam__listview"},w=e.defineComponent({__name:"ListView",props:{items:{}},emits:["scrollbottom"],setup(i,{emit:o}){const s=o;e.onMounted(()=>{window.addEventListener("scroll",t)}),e.onUnmounted(()=>{window.removeEventListener("scroll",t)});const t=()=>{const n=document.documentElement.scrollHeight-window.innerHeight,r=document.documentElement.scrollTop;n-r<=2&&s("scrollbottom")};return(n,r)=>(e.openBlock(),e.createElementBlock("ul",Y,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.items,a=>(e.openBlock(),e.createElementBlock("li",{key:a.label},[a.linkComponent?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.linkComponent),{key:0,to:a.route,tabindex:"-1"},{default:e.withCtx(()=>[e.createVNode(p,{item:a},null,8,["item"])]),_:2},1032,["to"])):(e.openBlock(),e.createBlock(p,{key:1,item:a},null,8,["item"]))]))),128))]))}}),J={class:"beam__navbar"},X={class:"navbar-action-wrapper"},T=e.defineComponent({__name:"Navbar",emits:["click"],setup(i,{emit:o}){const s=o,t=()=>{s("click")};return(n,r)=>(e.openBlock(),e.createElementBlock("nav",J,[e.renderSlot(n.$slots,"title",{},()=>[r[0]||(r[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",{},()=>[r[1]||(r[1]=e.createTextVNode("Action"))])])])]))}});var Z=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function ee(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var E={exports:{}};(function(i,o){(function(s,t){i.exports=t()})(Z,function(){var s={attachTo:function(t,n){if(t.scannerDetectionData!==void 0)throw new Error("onScan.js is already initialized for DOM element "+t);var r={onScan:function(a,l){},onScanError:function(a){},onKeyProcess:function(a,l){},onKeyDetect:function(a,l){},onPaste:function(a,l){},keyCodeMapper:function(a){return s.decodeKeyEvent(a)},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(r,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 r=String.fromCharCode(n);switch(t.shiftKey){case!1:r=r.toLowerCase();break;case!0:r=r.toUpperCase();break}return r;case(n>=96&&n<=105):return 0+(n-96)}return""},simulate:function(t,n){return this._reinitialize(t),Array.isArray(n)?n.forEach(function(r){var a={};(typeof r=="object"||typeof r=="function")&&r!==null?a=r:a.keyCode=parseInt(r);var l=new KeyboardEvent("keydown",a);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 r=document.activeElement;if(Array.isArray(n)){for(var a=0;a<n.length;a++)if(r.matches(n[a])===!0)return!0}else if(r.matches(n))return!0;return!1},_validateScanCode:function(t,n){var r=t.scannerDetectionData,a=r.options,l=r.options.singleScanQty,m=r.vars.firstCharTime,D=r.vars.lastCharTime,d={},f;switch(!0){case n.length<a.minLength:d={message:"Receieved code is shorter then minimal length"};break;case D-m>n.length*a.avgTimeByChar:d={message:"Receieved code was not entered in time"};break;default:return a.onScan.call(t,n,l),f=new CustomEvent("scan",{detail:{scanCode:n,qty:l}}),t.dispatchEvent(f),s._reinitialize(t),!0}return d.scanCode=n,d.scanDuration=D-m,d.avgTimeByChar=a.avgTimeByChar,d.minLength=a.minLength,a.onScanError.call(t,d),f=new CustomEvent("scanError",{detail:d}),t.dispatchEvent(f),s._reinitialize(t),!1},_mergeOptions:function(t,n){var r={},a;for(a in t)Object.prototype.hasOwnProperty.call(t,a)&&(r[a]=t[a]);for(a in n)Object.prototype.hasOwnProperty.call(n,a)&&(r[a]=n[a]);return r},_getNormalizedKeyNum:function(t){return t.which||t.keyCode},_handleKeyDown:function(t){var n=s._getNormalizedKeyNum(t),r=this.scannerDetectionData.options,a=this.scannerDetectionData.vars,l=!1;if(r.onKeyDetect.call(this,n,t)!==!1&&!s._isFocusOnIgnoredElement(this)){if(r.scanButtonKeyCode!==!1&&n==r.scanButtonKeyCode){a.longPressed||(a.longPressTimer=setTimeout(r.onScanButtonLongPress,r.scanButtonLongPressTime,this),a.longPressed=!0);return}switch(!0){case(a.firstCharTime&&r.suffixKeyCodes.indexOf(n)!==-1):t.preventDefault(),t.stopImmediatePropagation(),l=!0;break;case(!a.firstCharTime&&r.prefixKeyCodes.indexOf(n)!==-1):t.preventDefault(),t.stopImmediatePropagation(),l=!1;break;default:var m=r.keyCodeMapper.call(this,t);if(m===null)return;a.accumulatedString+=m,r.preventDefault&&t.preventDefault(),r.stopPropagation&&t.stopImmediatePropagation(),l=!1;break}a.firstCharTime||(a.firstCharTime=Date.now()),a.lastCharTime=Date.now(),a.testTimer&&clearTimeout(a.testTimer),l?(s._validateScanCode(this,a.accumulatedString),a.testTimer=!1):a.testTimer=setTimeout(s._validateScanCode,r.timeBeforeScanTest,this,a.accumulatedString),r.onKeyProcess.call(this,m,t)}},_handlePaste:function(t){var n=this.scannerDetectionData.options,r=this.scannerDetectionData.vars,a=(event.clipboardData||window.clipboardData).getData("text");s._isFocusOnIgnoredElement(this)||(t.preventDefault(),n.stopPropagation&&t.stopImmediatePropagation(),n.onPaste.call(this,a,event),r.firstCharTime=0,r.lastCharTime=0,s._validateScanCode(this,a))},_handleKeyUp:function(t){if(!s._isFocusOnIgnoredElement(this)){var n=s._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 s})})(E);var te=E.exports;const V=ee(te),ne={id:"scan_input"},S=e.defineComponent({__name:"ScanInput",props:{scanHandler:{type:Function}},emits:["scanInstance"],setup(i,{emit:o}){const s=o,t=i;return e.onMounted(()=>{const n=V.attachTo(window,{onScan:t.scanHandler});s("scanInstance",n)}),e.onUnmounted(()=>{V.detachFrom(window)}),(n,r)=>(e.openBlock(),e.createElementBlock("div",ne))}});function ae(i){i.component("ActionFooter",h),i.component("BeamMetadata",y),i.component("BeamModal",b),i.component("BeamModalOutlet",g),i.component("Confirm",k),i.component("ItemCheck",u),i.component("ItemCount",_),i.component("ListAnchor",B),i.component("ListItem",p),i.component("ListView",w),i.component("Navbar",T),i.component("ScanInput",S)}c.ActionFooter=h,c.BeamMetadata=y,c.BeamModal=b,c.BeamModalOutlet=g,c.Confirm=k,c.ItemCheck=u,c.ItemCount=_,c.ListAnchor=B,c.ListItem=p,c.ListView=w,c.Navbar=T,c.ScanInput=S,c.install=ae,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"},h=e.defineComponent({__name:"ActionFooter",emits:["click"],setup(i,{emit:r}){const s=r,t=()=>{s("click")};return(n,o)=>(e.openBlock(),e.createElementBlock("footer",D,[e.createElementVNode("span",P,[e.createElementVNode("button",{class:"footer-action btn",onClick:t},[e.renderSlot(n.$slots,"default")])])]))}}),$={class:"beam_metadata"},N={class:"beam_metadata_content"},K={class:"beam_metadata_block"},L={class:"beam_metadata_heading"},y=e.defineComponent({__name:"BeamMetadata",props:{order:{}},setup(i){return(r,s)=>(e.openBlock(),e.createElementBlock("div",$,[e.createElementVNode("div",N,[e.renderSlot(r.$slots,"default",{},()=>[s[1]||(s[1]=e.createElementVNode("div",{class:"beam_metadata_header beam_metadata--two-column"},null,-1)),e.createElementVNode("div",K,[e.createElementVNode("p",L,[s[0]||(s[0]=e.createTextVNode(" Status: ")),e.createElementVNode("span",{class:e.normalizeClass([{alert:!r.order.complete},"beam_metadata--normal"])},e.toDisplayString(r.order.complete?"Complete":"In Progress"),3)])]),s[2]||(s[2]=e.createStaticVNode('<div class="beam_metadata_shipping beam_metadata_block"><div class="beam_metadata_source"><p class="beam_metadata_heading">Source</p></div><div class="beam_metadata_arrow"><div class="beam_metadata_arrow-body"></div><div class="beam_metadata_arrow-head"><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6.74 7.78"><polygon points="6.74 3.89 0 0 0 7.78 6.74 3.89" style="fill:#c4c4c4;"></polygon></svg></div></div><div class="beam_metadata_source"><p class="beam_metadata_heading">Receiving</p></div></div>',1))])])]))}}),I={class:"beam__modal"},C=e.defineComponent({__name:"BeamModal",props:{showModal:{type:Boolean}},setup(i){return(r,s)=>{const t=e.resolveComponent("portal");return e.openBlock(),e.createBlock(t,{to:"beam__modal_outlet"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",I,[e.createElementVNode("button",{class:"btn",onClick:s[0]||(s[0]=n=>r.$emit("closemodal"))},"Close Modal"),e.renderSlot(r.$slots,"default",{onClosemodal:s[1]||(s[1]=n=>r.$emit("closemodal")),onConfirmmodal:s[2]||(s[2]=n=>r.$emit("confirmmodal"))})],512),[[e.vShow,r.showModal]])]),_:3})}}}),k=e.defineComponent({__name:"BeamModalOutlet",emits:["confirmmodal","closemodal"],setup(i){return(r,s)=>{const t=e.resolveComponent("portal-target");return e.openBlock(),e.createBlock(t,{name:"beam__modal_outlet"})}}}),b=(i,r)=>{const s=i.__vccOpts||i;for(const[t,n]of r)s[t]=n;return s},M={},F={class:"beam__modal-confirm"};function z(i,r){return e.openBlock(),e.createElementBlock("div",F,[r[2]||(r[2]=e.createElementVNode("h2",null,"Would you like to continue?",-1)),e.createElementVNode("button",{class:"btn",onClick:r[0]||(r[0]=s=>i.$emit("confirmmodal"))},"Yes"),e.createElementVNode("button",{class:"btn",onClick:r[1]||(r[1]=s=>i.$emit("closemodal"))},"No")])}const g=b(M,[["render",z]]),A={class:"container"},p=b(e.defineComponent({__name:"ItemCheck",props:{modelValue:{type:Boolean,default:!1},modelModifiers:{}},emits:["update:modelValue"],setup(i){const r=e.useModel(i,"modelValue");return(s,t)=>(e.openBlock(),e.createElementBlock("label",A,[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"]]),O={class:"beam__itemcount"},U=["contenteditable"],j={key:0},_=e.defineComponent({__name:"ItemCount",props:e.mergeModels({denominator:{},uom:{default:""},editable:{type:Boolean,default:!0}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(i){const r=e.useModel(i,"modelValue"),s=e.computed(()=>r.value===i.denominator),t=n=>{n.preventDefault(),n.stopPropagation();const o=Number(n.target.innerHTML)||0;r.value=Math.min(o,i.denominator)};return(n,o)=>(e.openBlock(),e.createElementBlock("div",O,[e.createElementVNode("span",{contenteditable:n.editable,class:e.normalizeClass({alert:!s.value}),onInput:t,onClick:t},e.toDisplayString(r.value),43,U),e.createElementVNode("span",null,"/"+e.toDisplayString(n.denominator),1),n.uom?(e.openBlock(),e.createElementBlock("span",j," "+e.toDisplayString(n.uom),1)):e.createCommentVNode("",!0)]))}}),x=["href"],B=e.defineComponent({__name:"ListAnchor",props:{to:{default:""}},setup(i){return(r,s)=>(e.openBlock(),e.createElementBlock("a",{href:r.to,class:"beam__listanchor"},[e.renderSlot(r.$slots,"default")],8,x))}}),H={tabindex:"0",class:"beam__listitem"},Q={class:"beam__listtext"},f=e.defineComponent({__name:"ListItem",props:{item:{}},setup(i){const r=e.ref(i.item);return(s,t)=>(e.openBlock(),e.createElementBlock("li",H,[e.createElementVNode("div",Q,[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(_,{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)]))}}),q={class:"beam__listview"},w=e.defineComponent({__name:"ListView",props:{items:{}},emits:["scrollbottom"],setup(i,{emit:r}){const s=r;e.onMounted(()=>{window.addEventListener("scroll",t)}),e.onUnmounted(()=>{window.removeEventListener("scroll",t)});const t=()=>{const n=document.documentElement.scrollHeight-window.innerHeight,o=document.documentElement.scrollTop;n-o<=2&&s("scrollbottom")};return(n,o)=>(e.openBlock(),e.createElementBlock("ul",q,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.items,a=>(e.openBlock(),e.createElementBlock("li",{key:a.label},[a.linkComponent?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.linkComponent),{key:0,to:a.route,tabindex:"-1"},{default:e.withCtx(()=>[e.createVNode(f,{item:a},null,8,["item"])]),_:2},1032,["to"])):(e.openBlock(),e.createBlock(f,{key:1,item:a},null,8,["item"]))]))),128))]))}}),R={class:"beam__navbar"},G={class:"navbar-action-wrapper"},T=e.defineComponent({__name:"Navbar",emits:["click"],setup(i,{emit:r}){const s=r,t=()=>{s("click")};return(n,o)=>(e.openBlock(),e.createElementBlock("nav",R,[e.renderSlot(n.$slots,"title",{},()=>[o[0]||(o[0]=e.createElementVNode("h1",{class:"nav-title"},"TITLE",-1))]),e.createElementVNode("div",G,[e.createElementVNode("button",{class:"navbar-action btn",onClick:t},[e.renderSlot(n.$slots,"navbaraction",{},()=>[o[1]||(o[1]=e.createTextVNode("Action"))])])])]))}});var W=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Y(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var v={exports:{}};(function(i,r){(function(s,t){i.exports=t()})(W,function(){var s={attachTo:function(t,n){if(t.scannerDetectionData!==void 0)throw new Error("onScan.js is already initialized for DOM element "+t);var o={onScan:function(a,l){},onScanError:function(a){},onKeyProcess:function(a,l){},onKeyDetect:function(a,l){},onPaste:function(a,l){},keyCodeMapper:function(a){return s.decodeKeyEvent(a)},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(o,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 o=String.fromCharCode(n);switch(t.shiftKey){case!1:o=o.toLowerCase();break;case!0:o=o.toUpperCase();break}return o;case(n>=96&&n<=105):return 0+(n-96)}return""},simulate:function(t,n){return this._reinitialize(t),Array.isArray(n)?n.forEach(function(o){var a={};(typeof o=="object"||typeof o=="function")&&o!==null?a=o:a.keyCode=parseInt(o);var l=new KeyboardEvent("keydown",a);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 o=document.activeElement;if(Array.isArray(n)){for(var a=0;a<n.length;a++)if(o.matches(n[a])===!0)return!0}else if(o.matches(n))return!0;return!1},_validateScanCode:function(t,n){var o=t.scannerDetectionData,a=o.options,l=o.options.singleScanQty,m=o.vars.firstCharTime,V=o.vars.lastCharTime,d={},u;switch(!0){case n.length<a.minLength:d={message:"Receieved code is shorter then minimal length"};break;case V-m>n.length*a.avgTimeByChar:d={message:"Receieved code was not entered in time"};break;default:return a.onScan.call(t,n,l),u=new CustomEvent("scan",{detail:{scanCode:n,qty:l}}),t.dispatchEvent(u),s._reinitialize(t),!0}return d.scanCode=n,d.scanDuration=V-m,d.avgTimeByChar=a.avgTimeByChar,d.minLength=a.minLength,a.onScanError.call(t,d),u=new CustomEvent("scanError",{detail:d}),t.dispatchEvent(u),s._reinitialize(t),!1},_mergeOptions:function(t,n){var o={},a;for(a in t)Object.prototype.hasOwnProperty.call(t,a)&&(o[a]=t[a]);for(a in n)Object.prototype.hasOwnProperty.call(n,a)&&(o[a]=n[a]);return o},_getNormalizedKeyNum:function(t){return t.which||t.keyCode},_handleKeyDown:function(t){var n=s._getNormalizedKeyNum(t),o=this.scannerDetectionData.options,a=this.scannerDetectionData.vars,l=!1;if(o.onKeyDetect.call(this,n,t)!==!1&&!s._isFocusOnIgnoredElement(this)){if(o.scanButtonKeyCode!==!1&&n==o.scanButtonKeyCode){a.longPressed||(a.longPressTimer=setTimeout(o.onScanButtonLongPress,o.scanButtonLongPressTime,this),a.longPressed=!0);return}switch(!0){case(a.firstCharTime&&o.suffixKeyCodes.indexOf(n)!==-1):t.preventDefault(),t.stopImmediatePropagation(),l=!0;break;case(!a.firstCharTime&&o.prefixKeyCodes.indexOf(n)!==-1):t.preventDefault(),t.stopImmediatePropagation(),l=!1;break;default:var m=o.keyCodeMapper.call(this,t);if(m===null)return;a.accumulatedString+=m,o.preventDefault&&t.preventDefault(),o.stopPropagation&&t.stopImmediatePropagation(),l=!1;break}a.firstCharTime||(a.firstCharTime=Date.now()),a.lastCharTime=Date.now(),a.testTimer&&clearTimeout(a.testTimer),l?(s._validateScanCode(this,a.accumulatedString),a.testTimer=!1):a.testTimer=setTimeout(s._validateScanCode,o.timeBeforeScanTest,this,a.accumulatedString),o.onKeyProcess.call(this,m,t)}},_handlePaste:function(t){var n=this.scannerDetectionData.options,o=this.scannerDetectionData.vars,a=(event.clipboardData||window.clipboardData).getData("text");s._isFocusOnIgnoredElement(this)||(t.preventDefault(),n.stopPropagation&&t.stopImmediatePropagation(),n.onPaste.call(this,a,event),o.firstCharTime=0,o.lastCharTime=0,s._validateScanCode(this,a))},_handleKeyUp:function(t){if(!s._isFocusOnIgnoredElement(this)){var n=s._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 s})})(v);var J=v.exports;const E=Y(J),X={id:"scan_input"},S=e.defineComponent({__name:"ScanInput",props:{scanHandler:{type:Function}},emits:["scanInstance"],setup(i,{emit:r}){const s=r,t=i;return e.onMounted(()=>{const n=E.attachTo(window,{onScan:t.scanHandler});s("scanInstance",n)}),e.onUnmounted(()=>{E.detachFrom(window)}),(n,o)=>(e.openBlock(),e.createElementBlock("div",X))}});function Z(i){i.component("ActionFooter",h),i.component("BeamMetadata",y),i.component("BeamModal",C),i.component("BeamModalOutlet",k),i.component("Confirm",g),i.component("ItemCheck",p),i.component("ItemCount",_),i.component("ListAnchor",B),i.component("ListItem",f),i.component("ListView",w),i.component("Navbar",T),i.component("ScanInput",S)}c.ActionFooter=h,c.BeamMetadata=y,c.BeamModal=C,c.BeamModalOutlet=k,c.Confirm=g,c.ItemCheck=p,c.ItemCount=_,c.ListAnchor=B,c.ListItem=f,c.ListView=w,c.Navbar=T,c.ScanInput=S,c.install=Z,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=beam.umd.cjs.map
|
package/dist/beam.umd.cjs.map
CHANGED
|
@@ -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\" 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\"> {{ 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 BeamMetadata from './components/BeamMetadata.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('BeamMetadata', BeamMetadata)\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\tBeamMetadata,\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","BeamMetadata","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\"> {{ 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 BeamMetadata from './components/BeamMetadata.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('BeamMetadata', BeamMetadata)\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\tBeamMetadata,\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","BeamMetadata","BeamModal","BeamModalOutlet","Confirm","ItemCheck","ItemCount","ListAnchor","ListItem","ListView","Navbar","ScanInput"],"mappings":"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","x_google_ignoreList":[7]}
|
package/package.json
CHANGED
|
@@ -1,55 +1,33 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="beam_metadata">
|
|
3
3
|
<div class="beam_metadata_content">
|
|
4
|
-
<
|
|
5
|
-
<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
<div class="beam_metadata_block">
|
|
13
|
-
<p class="beam_metadata_heading">
|
|
14
|
-
Status:
|
|
15
|
-
<span :class="{ alert: !order.complete }" class="beam_metadata--normal">{{
|
|
16
|
-
order.complete ? 'Complete' : 'In Progress'
|
|
17
|
-
}}</span>
|
|
18
|
-
</p>
|
|
19
|
-
</div>
|
|
20
|
-
<div class="beam_metadata_shipping beam_metadata_block">
|
|
21
|
-
<div class="beam_metadata_source">
|
|
22
|
-
<p class="beam_metadata_heading">Source</p>
|
|
23
|
-
<p>
|
|
24
|
-
Packing Warehouse Inc.<br />
|
|
25
|
-
1432 W. Parkway Ave.<br />
|
|
26
|
-
Chicago, IL 60617
|
|
4
|
+
<slot>
|
|
5
|
+
<div class="beam_metadata_header beam_metadata--two-column"></div>
|
|
6
|
+
<div class="beam_metadata_block">
|
|
7
|
+
<p class="beam_metadata_heading">
|
|
8
|
+
Status:
|
|
9
|
+
<span :class="{ alert: !order.complete }" class="beam_metadata--normal">{{
|
|
10
|
+
order.complete ? 'Complete' : 'In Progress'
|
|
11
|
+
}}</span>
|
|
27
12
|
</p>
|
|
28
13
|
</div>
|
|
29
|
-
<div class="
|
|
30
|
-
<div class="
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
14
|
+
<div class="beam_metadata_shipping beam_metadata_block">
|
|
15
|
+
<div class="beam_metadata_source">
|
|
16
|
+
<p class="beam_metadata_heading">Source</p>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="beam_metadata_arrow">
|
|
19
|
+
<div class="beam_metadata_arrow-body"></div>
|
|
20
|
+
<div class="beam_metadata_arrow-head">
|
|
21
|
+
<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6.74 7.78">
|
|
22
|
+
<polygon points="6.74 3.89 0 0 0 7.78 6.74 3.89" style="fill: #c4c4c4" />
|
|
23
|
+
</svg>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="beam_metadata_source">
|
|
27
|
+
<p class="beam_metadata_heading">Receiving</p>
|
|
35
28
|
</div>
|
|
36
29
|
</div>
|
|
37
|
-
|
|
38
|
-
<p class="beam_metadata_heading">Receiving</p>
|
|
39
|
-
<p>
|
|
40
|
-
Packing Warehouse Inc.<br />
|
|
41
|
-
1432 W. Parkway Ave.<br />
|
|
42
|
-
Chicago, IL 60617
|
|
43
|
-
</p>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
<div class="beam_metadata_component_header beam_metadata_block">
|
|
47
|
-
<p class="beam_metadata_heading">Components</p>
|
|
48
|
-
<p class="beam_metadata_heading">Quantity</p>
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
<div class="beam_metadata_components">
|
|
52
|
-
<slot name="components"></slot>
|
|
30
|
+
</slot>
|
|
53
31
|
</div>
|
|
54
32
|
</div>
|
|
55
33
|
</template>
|