tek-ms-recap 1.0.8 → 1.0.10
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/Recap/index.d.ts +29 -2
- package/dist/index.d.ts +1 -1
- package/dist/ms-recap.js +192 -54
- package/package.json +2 -2
package/dist/Recap/index.d.ts
CHANGED
|
@@ -7,15 +7,30 @@ export interface RecapItem {
|
|
|
7
7
|
price: number;
|
|
8
8
|
quantity: number;
|
|
9
9
|
}
|
|
10
|
+
export interface Customer {
|
|
11
|
+
firstname: string;
|
|
12
|
+
lastname: string;
|
|
13
|
+
phone: string;
|
|
14
|
+
}
|
|
10
15
|
export interface RenderInterfaceRecap {
|
|
11
16
|
items: RecapItem[];
|
|
12
|
-
|
|
17
|
+
customers: Customer[];
|
|
18
|
+
onConfirm: (items: RecapItem[], customer: Customer) => void;
|
|
13
19
|
onCancel: (items: RecapItem[]) => void;
|
|
20
|
+
onSaveCustomer?: (customer: Customer) => void;
|
|
14
21
|
}
|
|
15
22
|
export declare class RecapSheet {
|
|
16
23
|
private el;
|
|
24
|
+
private clientOverlayEl;
|
|
25
|
+
private newClientOverlayEl;
|
|
17
26
|
private items;
|
|
18
27
|
private total;
|
|
28
|
+
private customers;
|
|
29
|
+
private clientSearchTerm;
|
|
30
|
+
private selectedCustomer;
|
|
31
|
+
private onConfirm?;
|
|
32
|
+
private onCancel?;
|
|
33
|
+
private onSaveCustomer?;
|
|
19
34
|
constructor(mountPoint: HTMLElement);
|
|
20
35
|
getItems(): RecapItem[];
|
|
21
36
|
setItems(_items: RecapItem[]): void;
|
|
@@ -23,7 +38,19 @@ export declare class RecapSheet {
|
|
|
23
38
|
setTotal(_total: number): void;
|
|
24
39
|
onClose(): void;
|
|
25
40
|
removeFromCartItems(idx: number): void;
|
|
41
|
+
private getCustomerInitials;
|
|
42
|
+
private avatarColorFor;
|
|
43
|
+
render(interfaceRender: RenderInterfaceRecap): void;
|
|
26
44
|
private renderItems;
|
|
27
45
|
private renderRecapTotal;
|
|
28
|
-
|
|
46
|
+
private renderClientBlock;
|
|
47
|
+
private renderClientSheet;
|
|
48
|
+
private renderClientResults;
|
|
49
|
+
private selectCustomer;
|
|
50
|
+
private resetClientSheet;
|
|
51
|
+
private clearClientSearch;
|
|
52
|
+
private renderClientOverlay;
|
|
53
|
+
private extractLocalPhoneDigits;
|
|
54
|
+
private formatLocalPhoneDigits;
|
|
55
|
+
private resetClientOverlay;
|
|
29
56
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { RecapSheet, type
|
|
1
|
+
export { RecapSheet, type Customer, type RecapItem } from './Recap';
|
package/dist/ms-recap.js
CHANGED
|
@@ -4,12 +4,33 @@ function e(e) {
|
|
|
4
4
|
}
|
|
5
5
|
//#endregion
|
|
6
6
|
//#region src/Recap/index.ts
|
|
7
|
-
var t =
|
|
7
|
+
var t = [
|
|
8
|
+
"#B6481E",
|
|
9
|
+
"#3F7D58",
|
|
10
|
+
"#C68A1F",
|
|
11
|
+
"#33476C",
|
|
12
|
+
"#B23A33",
|
|
13
|
+
"#C95B2C",
|
|
14
|
+
"#283A58",
|
|
15
|
+
"#6B4226",
|
|
16
|
+
"#2E7D6B",
|
|
17
|
+
"#8E5B9A",
|
|
18
|
+
"#1F7A8C",
|
|
19
|
+
"#A6763D"
|
|
20
|
+
], n = class {
|
|
8
21
|
el;
|
|
22
|
+
clientOverlayEl;
|
|
23
|
+
newClientOverlayEl;
|
|
9
24
|
items = [];
|
|
10
25
|
total = 0;
|
|
26
|
+
customers = [];
|
|
27
|
+
clientSearchTerm = "";
|
|
28
|
+
selectedCustomer = null;
|
|
29
|
+
onConfirm;
|
|
30
|
+
onCancel;
|
|
31
|
+
onSaveCustomer;
|
|
11
32
|
constructor(e) {
|
|
12
|
-
this.el = e;
|
|
33
|
+
this.el = e, this.clientOverlayEl = document.createElement("div"), this.clientOverlayEl.id = "recap-client-overlay", document.body.appendChild(this.clientOverlayEl), this.newClientOverlayEl = document.createElement("div"), this.newClientOverlayEl.id = "recap-new-client-overlay", document.body.appendChild(this.newClientOverlayEl);
|
|
13
34
|
}
|
|
14
35
|
getItems() {
|
|
15
36
|
return this.items;
|
|
@@ -24,15 +45,53 @@ var t = class {
|
|
|
24
45
|
this.total = e;
|
|
25
46
|
}
|
|
26
47
|
onClose() {
|
|
27
|
-
this.setItems([]), this.el.innerHTML = "";
|
|
48
|
+
this.setItems([]), this.selectedCustomer = null, this.el.innerHTML = "", this.resetClientSheet(), this.resetClientOverlay();
|
|
28
49
|
}
|
|
29
50
|
removeFromCartItems(e) {
|
|
30
51
|
let t = this.getItems();
|
|
31
52
|
t.splice(e, 1), this.setItems(t), this.renderItems(), this.renderRecapTotal(), t.length == 0 && this.onClose();
|
|
32
53
|
}
|
|
54
|
+
getCustomerInitials(e, t) {
|
|
55
|
+
return ((e[0] ?? "") + (t[0] ?? "")).toUpperCase();
|
|
56
|
+
}
|
|
57
|
+
avatarColorFor(e) {
|
|
58
|
+
let n = 0;
|
|
59
|
+
for (let t = 0; t < e.length; t++) n += e.charCodeAt(t);
|
|
60
|
+
return t[n % t.length];
|
|
61
|
+
}
|
|
62
|
+
render(t) {
|
|
63
|
+
this.setItems(t.items), this.customers = t.customers, this.onConfirm = t.onConfirm, this.onCancel = t.onCancel, this.onSaveCustomer = t.onSaveCustomer, this.selectedCustomer = null, this.el.innerHTML = `
|
|
64
|
+
<div class="overlay show" id="recap-overlay">
|
|
65
|
+
<div class="sheet modal-recap" style="max-height:88vh;">
|
|
66
|
+
<div class="sheet-handle"></div>
|
|
67
|
+
<h3>Récapitulatif</h3>
|
|
68
|
+
<div class="catalog-price" style="margin-bottom:10px;">Vérifiez avant de confirmer</div>
|
|
69
|
+
<div class="recap-items" id="recap-items"></div>
|
|
70
|
+
<div class="recap-totals">
|
|
71
|
+
<div class="sum-row"><span>Sous-total</span><span id="recap-subtotal">${e(this.getTotal())}</span></div>
|
|
72
|
+
<div class="sum-row"><span>Remise</span><span style="color:var(--green);">— 0 F</span></div>
|
|
73
|
+
</div>
|
|
74
|
+
<div class="recap-total-box">
|
|
75
|
+
<span class="lab">TOTAL</span>
|
|
76
|
+
<span class="amt" id="recap-total">${e(this.getTotal())}</span>
|
|
77
|
+
</div>
|
|
78
|
+
<div id="recap-client-block" style="background:var(--paper-deep); border-radius:12px; padding:14px; margin-bottom:14px; text-align:center;"></div>
|
|
79
|
+
<div class="payment-hint">Espèces · Mobile Money · Carte</div>
|
|
80
|
+
<div class="sheet-actions">
|
|
81
|
+
<button class="btn-cancel" id="recap-btn-cancel">Modifier</button>
|
|
82
|
+
<button class="btn-confirm" id="recap-btn-confirm" disabled style="opacity:0.4;">Confirmer la vente</button>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
`, this.el.querySelector("#recap-btn-cancel")?.addEventListener("click", () => {
|
|
87
|
+
this.onCancel?.(this.getItems()), this.onClose();
|
|
88
|
+
}), this.el.querySelector("#recap-btn-confirm")?.addEventListener("click", () => {
|
|
89
|
+
this.selectedCustomer && this.onConfirm?.(this.getItems(), this.selectedCustomer);
|
|
90
|
+
}), this.renderItems(), this.renderRecapTotal(), this.renderClientBlock();
|
|
91
|
+
}
|
|
33
92
|
renderItems() {
|
|
34
|
-
this.el.querySelector("#recap-items")
|
|
35
|
-
|
|
93
|
+
let t = this.el.querySelector("#recap-items");
|
|
94
|
+
t && (t.innerHTML = this.getItems().map((t, n) => `
|
|
36
95
|
<div class="recap-row">
|
|
37
96
|
<span class="ic">${t.icon}</span>
|
|
38
97
|
<div class="info">
|
|
@@ -42,68 +101,147 @@ var t = class {
|
|
|
42
101
|
<span class="amt">${e(t.price)}</span>
|
|
43
102
|
<button class="del" data-idx="${n}">✕</button>
|
|
44
103
|
</div>
|
|
45
|
-
`).join("")
|
|
46
|
-
`, this.el.querySelectorAll(".del").forEach((e) => {
|
|
104
|
+
`).join(""), t.querySelectorAll(".del").forEach((e) => {
|
|
47
105
|
e.addEventListener("click", () => {
|
|
48
106
|
let t = parseInt(e.dataset.idx ?? "0");
|
|
49
107
|
this.removeFromCartItems(t);
|
|
50
108
|
});
|
|
51
|
-
});
|
|
109
|
+
}));
|
|
52
110
|
}
|
|
53
111
|
renderRecapTotal() {
|
|
54
112
|
let t = this.getItems().reduce((e, t) => e + t.price * t.quantity, 0);
|
|
55
|
-
this.setTotal(t)
|
|
113
|
+
this.setTotal(t);
|
|
114
|
+
let n = this.el.querySelector("#recap-subtotal"), r = this.el.querySelector("#recap-total");
|
|
115
|
+
n && (n.innerHTML = e(t)), r && (r.innerHTML = e(t));
|
|
56
116
|
}
|
|
57
|
-
|
|
58
|
-
this.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
<div class="
|
|
65
|
-
|
|
66
|
-
<div class="sum-row"><span>Sous-total</span><span id="recap-total">${e(this.getTotal())}</span></div>
|
|
67
|
-
<div class="sum-row"><span>Remise</span><span style="color:var(--green);">— 0 F</span></div>
|
|
68
|
-
</div>
|
|
69
|
-
<div class="recap-total-box">
|
|
70
|
-
<span class="lab">TOTAL</span>
|
|
71
|
-
<span class="amt" id="total">${e(this.getTotal())}</span>
|
|
117
|
+
renderClientBlock() {
|
|
118
|
+
let e = this.el.querySelector("#recap-client-block"), t = this.el.querySelector("#recap-btn-confirm");
|
|
119
|
+
if (e) {
|
|
120
|
+
if (this.selectedCustomer) {
|
|
121
|
+
let t = this.selectedCustomer;
|
|
122
|
+
e.innerHTML = `
|
|
123
|
+
<div style="display:flex; align-items:center; gap:10px; text-align:left;">
|
|
124
|
+
<div class="avatar" style="background:${this.avatarColorFor(t.phone)}; width:36px; height:36px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:#fff; font-weight:700; font-size:11px; flex-shrink:0;">
|
|
125
|
+
${this.getCustomerInitials(t.firstname, t.lastname)}
|
|
72
126
|
</div>
|
|
73
|
-
<div
|
|
74
|
-
<div style="
|
|
75
|
-
|
|
76
|
-
<input type="number" id="amount-received" min="0" step="1" placeholder="0">
|
|
77
|
-
</div>
|
|
78
|
-
<span class="unit">FCFA</span>
|
|
79
|
-
</div>
|
|
80
|
-
<div class="change-row" id="change-row">
|
|
81
|
-
<span class="lab">Monnaie à rendre</span>
|
|
82
|
-
<span class="amt" id="change-amount">${e(0)}</span>
|
|
83
|
-
</div>
|
|
84
|
-
<div class="payment-hint">Espèces · Mobile Money · Carte</div>
|
|
85
|
-
<div class="sheet-actions">
|
|
86
|
-
<button class="btn-cancel" id="btn-cancel">Modifier</button>
|
|
87
|
-
<button class="btn-confirm" id="btn-confirm" disabled>Confirmer la vente</button>
|
|
127
|
+
<div style="flex:1; min-width:0;">
|
|
128
|
+
<div style="font-size:11.5px; font-weight:700; color:var(--ink);">${t.firstname} ${t.lastname}</div>
|
|
129
|
+
<div style="font-size:9.5px; color:var(--ink-muted); margin-top:1px;">${t.phone}</div>
|
|
88
130
|
</div>
|
|
131
|
+
<button class="btn-cancel" id="recap-btn-change-client" style="padding:6px 10px; flex-shrink:0;">Changer</button>
|
|
132
|
+
</div>
|
|
133
|
+
`, e.querySelector("#recap-btn-change-client")?.addEventListener("click", () => {
|
|
134
|
+
this.renderClientSheet();
|
|
135
|
+
});
|
|
136
|
+
} else e.innerHTML = "\n <div style=\"font-size:11.5px; color:var(--ink-muted); margin-bottom:8px;\">Aucun client identifié</div>\n <button class=\"btn-cancel\" style=\"width:100%;\" id=\"recap-btn-choose-client\">Choisir un client</button>\n ", e.querySelector("#recap-btn-choose-client")?.addEventListener("click", () => {
|
|
137
|
+
this.renderClientSheet();
|
|
138
|
+
});
|
|
139
|
+
t && (t.disabled = !this.selectedCustomer, t.style.opacity = this.selectedCustomer ? "1" : "0.4");
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
renderClientSheet() {
|
|
143
|
+
this.clientSearchTerm = "", this.clientOverlayEl.innerHTML = "\n <div class=\"overlay show\">\n <div class=\"sheet\" style=\"max-height:88vh;\">\n <div class=\"sheet-handle\"></div>\n <h3>Identifier la cliente</h3>\n <div class=\"catalog-price\" style=\"margin-bottom:10px;\">Recherchez par nom ou numéro</div>\n\n <div class=\"search-input-wrap\" id=\"client-search-wrap\" style=\"margin-bottom:12px;\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"><circle cx=\"11\" cy=\"11\" r=\"7\"/><line x1=\"21\" y1=\"21\" x2=\"16.4\" y2=\"16.4\"/></svg>\n <input type=\"text\" id=\"client-search-input\" placeholder=\"Nom ou téléphone...\">\n <button class=\"search-clear\" id=\"client-search-clear\">✕</button>\n </div>\n\n <div class=\"clients-grid\" id=\"client-results-list\" style=\"grid-template-columns:1fr; max-height:38vh; overflow-y:auto; margin-bottom:14px;\"></div>\n\n <button class=\"btn-confirm\" style=\"width:100%;\" id=\"nouveau-client\">+ Nouveau client</button>\n </div>\n </div>\n ", this.clientOverlayEl.querySelector("#nouveau-client")?.addEventListener("click", () => this.renderClientOverlay()), this.clientOverlayEl.querySelector("#client-search-clear")?.addEventListener("click", () => this.clearClientSearch());
|
|
144
|
+
let e = this.clientOverlayEl.querySelector("#client-search-input"), t = this.clientOverlayEl.querySelector("#client-search-wrap");
|
|
145
|
+
e?.addEventListener("focus", () => t?.classList.add("focus")), e?.addEventListener("blur", () => t?.classList.remove("focus")), e?.addEventListener("input", () => {
|
|
146
|
+
this.clientSearchTerm = e.value.toLowerCase(), this.renderClientResults();
|
|
147
|
+
}), this.clientOverlayEl.querySelector(".overlay")?.addEventListener("click", (e) => {
|
|
148
|
+
e.target === e.currentTarget && this.resetClientSheet();
|
|
149
|
+
}), this.renderClientResults();
|
|
150
|
+
}
|
|
151
|
+
renderClientResults() {
|
|
152
|
+
let e = this.clientSearchTerm, t = e ? this.customers.filter((t) => `${t.firstname} ${t.lastname}`.toLowerCase().includes(e) || t.phone.replace(/\s/g, "").includes(e.replace(/\s/g, ""))) : this.customers, n = this.clientOverlayEl.querySelector("#client-results-list");
|
|
153
|
+
if (n) {
|
|
154
|
+
if (t.length === 0) {
|
|
155
|
+
n.innerHTML = "<div class=\"no-results\"><span class=\"mark\">Aucun client</span>Créez une nouvelle fiche ci-dessous</div>";
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
n.innerHTML = t.map((e) => `
|
|
159
|
+
<div class="client-card" style="cursor:pointer;" data-phone="${e.phone}">
|
|
160
|
+
<div class="avatar" style="background:${this.avatarColorFor(e.phone)};">${this.getCustomerInitials(e.firstname, e.lastname)}</div>
|
|
161
|
+
<div class="info">
|
|
162
|
+
<div class="cname">${e.firstname} ${e.lastname}</div>
|
|
163
|
+
<div class="cphone">${e.phone}</div>
|
|
89
164
|
</div>
|
|
90
165
|
</div>
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
166
|
+
`).join(""), n.querySelectorAll(".client-card").forEach((e) => {
|
|
167
|
+
e.addEventListener("click", () => {
|
|
168
|
+
let t = e.dataset.phone;
|
|
169
|
+
t && this.selectCustomer(t);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
selectCustomer(e) {
|
|
175
|
+
let t = this.customers.find((t) => t.phone === e);
|
|
176
|
+
t && (this.selectedCustomer = t, this.renderClientBlock(), this.resetClientSheet());
|
|
177
|
+
}
|
|
178
|
+
resetClientSheet() {
|
|
179
|
+
this.clientOverlayEl.innerHTML = "";
|
|
180
|
+
}
|
|
181
|
+
clearClientSearch() {
|
|
182
|
+
let e = this.clientOverlayEl.querySelector("#client-search-input");
|
|
183
|
+
e && (e.value = ""), this.clientSearchTerm = "", this.renderClientResults();
|
|
184
|
+
}
|
|
185
|
+
renderClientOverlay() {
|
|
186
|
+
this.newClientOverlayEl.innerHTML = "\n <div class=\"overlay show\">\n <div class=\"sheet\">\n <div class=\"sheet-handle\"></div>\n <h3>Nouveau client</h3>\n <div class=\"catalog-price\" style=\"margin-bottom:10px;\">Enregistré pour vos prochaines ventes</div>\n\n <div class=\"field\"><label>Prénom</label><input type=\"text\" id=\"new-client-firstname\"></div>\n <div id=\"new-client-firstname-error\" style=\"display:none; color:var(--rust); font-size:9.5px; font-weight:600; margin:-8px 0 10px;\">\n Le prénom doit contenir au moins 3 caractères\n </div>\n <div class=\"field\"><label>Nom</label><input type=\"text\" id=\"new-client-lastname\"></div>\n <div id=\"new-client-lastname-error\" style=\"display:none; color:var(--rust); font-size:9.5px; font-weight:600; margin:-8px 0 10px;\">\n Le nom doit contenir au moins 3 caractères\n </div>\n <div class=\"field\" style=\"margin-bottom:0;\">\n <label>Téléphone</label>\n <input type=\"tel\" id=\"new-client-phone\" placeholder=\"+242 7X XXX XX XX\" value=\"+242 \">\n </div>\n <div id=\"new-client-phone-error\" style=\"display:none; color:var(--rust); font-size:9.5px; font-weight:600; margin-top:5px;\">\n Format invalide — attendu +242 7X XXX XX XX\n </div>\n\n <div class=\"sheet-actions\" style=\"margin-top:14px;\">\n <button class=\"btn-cancel\" id=\"cancel-new-client\">Annuler</button>\n <button class=\"btn-confirm\" id=\"save-new-client\">Enregistrer</button>\n </div>\n </div>\n </div>\n ", this.newClientOverlayEl.querySelector("#cancel-new-client")?.addEventListener("click", () => this.resetClientOverlay());
|
|
187
|
+
let e = this.newClientOverlayEl.querySelector("#new-client-firstname"), t = this.newClientOverlayEl.querySelector("#new-client-firstname-error");
|
|
188
|
+
e?.addEventListener("input", () => {
|
|
189
|
+
t && (t.style.display = "none");
|
|
190
|
+
});
|
|
191
|
+
let n = this.newClientOverlayEl.querySelector("#new-client-lastname"), r = this.newClientOverlayEl.querySelector("#new-client-lastname-error");
|
|
192
|
+
n?.addEventListener("input", () => {
|
|
193
|
+
r && (r.style.display = "none");
|
|
194
|
+
});
|
|
195
|
+
let i = "+242 ", a = this.newClientOverlayEl.querySelector("#new-client-phone"), o = this.newClientOverlayEl.querySelector("#new-client-phone-error"), s = () => {
|
|
196
|
+
if (!a) return;
|
|
197
|
+
let e = a.selectionStart ?? 0, t = a.selectionEnd ?? 0;
|
|
198
|
+
if (e < 5 || t < 5) {
|
|
199
|
+
let e = a.value.length;
|
|
200
|
+
a.setSelectionRange(e, e);
|
|
201
|
+
}
|
|
100
202
|
};
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
t
|
|
105
|
-
|
|
203
|
+
a?.addEventListener("click", s), a?.addEventListener("keyup", s), a?.addEventListener("input", () => {
|
|
204
|
+
let e = a.value;
|
|
205
|
+
e.startsWith("+242") || (e = i + e.replace(/\D/g, ""));
|
|
206
|
+
let t = this.extractLocalPhoneDigits(e);
|
|
207
|
+
a.value = i + this.formatLocalPhoneDigits(t), a.setSelectionRange(a.value.length, a.value.length), o && (o.style.display = "none");
|
|
208
|
+
}), a?.addEventListener("focus", () => {
|
|
209
|
+
a.value ||= i, s();
|
|
210
|
+
}), this.newClientOverlayEl.querySelector("#save-new-client")?.addEventListener("click", () => {
|
|
211
|
+
let i = !1, s = e?.value ?? "";
|
|
212
|
+
s.length < 3 ? (t && (t.style.display = "block"), i = !0) : t && (t.style.display = "none");
|
|
213
|
+
let c = n?.value ?? "";
|
|
214
|
+
c.length < 3 ? (r && (r.style.display = "block"), i = !0) : r && (r.style.display = "none");
|
|
215
|
+
let l = a?.value ?? "";
|
|
216
|
+
if (this.extractLocalPhoneDigits(l).length === 9 ? o && (o.style.display = "none") : (o && (o.style.display = "block"), i = !0), i) return;
|
|
217
|
+
let u = this.customers.find((e) => e.phone === l), d = u ?? {
|
|
218
|
+
firstname: s,
|
|
219
|
+
lastname: c,
|
|
220
|
+
phone: l
|
|
221
|
+
};
|
|
222
|
+
u || this.customers.unshift(d), this.selectedCustomer = d, this.renderClientBlock(), this.resetClientOverlay(), this.resetClientSheet(), this.onSaveCustomer?.(d);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
extractLocalPhoneDigits(e) {
|
|
226
|
+
let t = e.replace(/\D/g, "");
|
|
227
|
+
return t.startsWith("242") && (t = t.slice(3)), t.slice(0, 9);
|
|
228
|
+
}
|
|
229
|
+
formatLocalPhoneDigits(e) {
|
|
230
|
+
let t = [
|
|
231
|
+
2,
|
|
232
|
+
3,
|
|
233
|
+
2,
|
|
234
|
+
2
|
|
235
|
+
], n = "", r = 0;
|
|
236
|
+
for (let i of t) {
|
|
237
|
+
if (r >= e.length) break;
|
|
238
|
+
n += (n ? " " : "") + e.slice(r, r + i), r += i;
|
|
239
|
+
}
|
|
240
|
+
return n;
|
|
241
|
+
}
|
|
242
|
+
resetClientOverlay() {
|
|
243
|
+
this.newClientOverlayEl.innerHTML = "";
|
|
106
244
|
}
|
|
107
245
|
};
|
|
108
246
|
//#endregion
|
|
109
|
-
export {
|
|
247
|
+
export { n as RecapSheet };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tek-ms-recap",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "v1.0.
|
|
4
|
+
"version": "v1.0.10",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/ms-recap.js",
|
|
7
7
|
"module": "./dist/ms-recap.js",
|
|
@@ -33,6 +33,6 @@
|
|
|
33
33
|
"vitest": "^4.1.9"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"tek-ms-ds": "^1.0.
|
|
36
|
+
"tek-ms-ds": "^1.0.18"
|
|
37
37
|
}
|
|
38
38
|
}
|