tek-ms-recap 1.0.3 → 1.0.5

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.
@@ -0,0 +1,24 @@
1
+ export interface RecapItem {
2
+ id: string;
3
+ name: string;
4
+ icon: string;
5
+ color: string;
6
+ category: string;
7
+ price: number;
8
+ quantity: number;
9
+ }
10
+ export interface RenderInterfaceRecap {
11
+ cart: RecapItem[];
12
+ onConfirm: (amountReceived: number, change: number) => void;
13
+ onCancel: () => void;
14
+ onRemove: (idx: number) => void;
15
+ }
16
+ export declare class RecapSheet {
17
+ private el;
18
+ private items;
19
+ constructor(mountPoint: HTMLElement);
20
+ getItems(): RecapItem[];
21
+ setItems(_items: RecapItem[]): void;
22
+ onClose(): void;
23
+ render(interfaceRender: RenderInterfaceRecap): void;
24
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export declare function fmt(n: number): string;
@@ -0,0 +1,3 @@
1
+ export type { RenderInterfaceRecap } from './Recap';
2
+ export type { RecapItem } from './Recap';
3
+ export { RecapSheet } from './Recap';
package/dist/main.d.ts ADDED
@@ -0,0 +1 @@
1
+ import 'tek-ms-ds/dist/style.css';
package/dist/ms-recap.js CHANGED
@@ -0,0 +1,95 @@
1
+ //#region src/constants/index.ts
2
+ function e(e) {
3
+ return e.toLocaleString("fr-FR").replace(/,/g, " ") + " F";
4
+ }
5
+ //#endregion
6
+ //#region src/Recap/index.ts
7
+ var t = class {
8
+ el;
9
+ items = [];
10
+ constructor(e) {
11
+ this.el = e;
12
+ }
13
+ getItems() {
14
+ return this.items;
15
+ }
16
+ setItems(e) {
17
+ this.items = e;
18
+ }
19
+ onClose() {
20
+ this.el.innerHTML = "";
21
+ }
22
+ render(t) {
23
+ let n = t.cart.reduce((e, t) => e + t.quantity * t.price, 0);
24
+ this.setItems(t.cart), this.el.innerHTML = `
25
+ <div class="overlay show" id="recap-overlay">
26
+ <div class="sheet modal-recap" style="max-height:88vh;">
27
+ <div class="sheet-handle"></div>
28
+ <h3>Récapitulatif</h3>
29
+ <div class="catalog-price" style="margin-bottom:10px;">Vérifiez avant de confirmer</div>
30
+ <div class="recap-items" id="recap-items">
31
+ ${t.cart.map((t, n) => `
32
+ <div class="recap-row">
33
+ <span class="ic">${t.icon}</span>
34
+ <div class="info">
35
+ <div class="pname">${t.name}</div>
36
+ <div class="qty">× ${t.quantity}</div>
37
+ </div>
38
+ <span class="amt">${e(t.quantity * t.price)}</span>
39
+ <button class="del" data-idx="${n}">✕</button>
40
+ </div>
41
+ `).join("")}
42
+ </div>
43
+ <div class="recap-totals">
44
+ <div class="sum-row"><span>Sous-total</span><span>${e(n)}</span></div>
45
+ <div class="sum-row"><span>Remise</span><span style="color:var(--green);">— 0 F</span></div>
46
+ </div>
47
+ <div class="recap-total-box">
48
+ <span class="lab">TOTAL</span>
49
+ <span class="amt">${e(n)}</span>
50
+ </div>
51
+ <div class="price-field">
52
+ <div style="flex:1;">
53
+ <label>MONTANT REÇU</label>
54
+ <input type="number" id="amount-received" min="0" step="1" placeholder="0">
55
+ </div>
56
+ <span class="unit">FCFA</span>
57
+ </div>
58
+ <div class="change-row" id="change-row">
59
+ <span class="lab">Monnaie à rendre</span>
60
+ <span class="amt" id="change-amount">${e(0)}</span>
61
+ </div>
62
+ <div class="payment-hint">Espèces · Mobile Money · Carte</div>
63
+ <div class="sheet-actions">
64
+ <button class="btn-cancel" id="btn-cancel">Modifier</button>
65
+ <button class="btn-confirm" id="btn-confirm" disabled>Confirmer la vente</button>
66
+ </div>
67
+ </div>
68
+ </div>
69
+ `;
70
+ let r = this.el.querySelector("#amount-received"), i = this.el.querySelector("#change-amount"), a = this.el.querySelector("#change-row"), o = this.el.querySelector("#btn-confirm"), s = () => {
71
+ let e = parseFloat(r.value);
72
+ return Number.isFinite(e) ? e : 0;
73
+ }, c = () => {
74
+ let t = s(), r = t - n;
75
+ i.textContent = e(Math.max(0, r));
76
+ let c = t < n;
77
+ a.classList.toggle("insufficient", c), o.disabled = c || t === 0;
78
+ };
79
+ r.addEventListener("input", c), c(), this.el.querySelectorAll(".del").forEach((e) => {
80
+ e.addEventListener("click", () => {
81
+ let n = parseInt(e.dataset.idx ?? "0");
82
+ t.onRemove(n);
83
+ });
84
+ }), this.el.querySelector("#btn-cancel")?.addEventListener("click", () => {
85
+ t.onCancel();
86
+ }), o.addEventListener("click", () => {
87
+ let e = s();
88
+ if (e < n) return;
89
+ let r = e - n;
90
+ t.onConfirm(e, r);
91
+ });
92
+ }
93
+ };
94
+ //#endregion
95
+ export { t 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.3",
4
+ "version": "v1.0.5",
5
5
  "type": "module",
6
6
  "main": "./dist/ms-recap.js",
7
7
  "module": "./dist/ms-recap.js",