@retalia/pos-components 0.0.8 → 0.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/README.md +69 -7
- package/fesm2022/retalia-pos-components.mjs +299 -106
- package/fesm2022/retalia-pos-components.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/styles.css +1 -0
- package/styles/tokens.css +21 -15
- package/types/retalia-pos-components.d.ts +113 -23
package/package.json
CHANGED
package/styles/styles.css
CHANGED
package/styles/tokens.css
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
:root {
|
|
2
|
-
/* Color —
|
|
2
|
+
/* Color — white surfaces from the POS POC. Coral, mint, and lilac stay on confirm, cancel, and primary actions. */
|
|
3
3
|
--pos-color-primary: #c9b5f0;
|
|
4
4
|
--pos-color-on-primary: #333333;
|
|
5
5
|
--pos-color-success: #16dbcc;
|
|
@@ -8,22 +8,22 @@
|
|
|
8
8
|
--pos-color-on-danger: #ffffff;
|
|
9
9
|
--pos-color-secondary: #16dbcc;
|
|
10
10
|
--pos-color-warning: #f0ad4e;
|
|
11
|
-
--pos-color-text: #
|
|
12
|
-
--pos-color-text-muted: #
|
|
11
|
+
--pos-color-text: #1a1a1a;
|
|
12
|
+
--pos-color-text-muted: #666a70;
|
|
13
13
|
--pos-color-surface: #ffffff;
|
|
14
|
-
--pos-color-surface-muted: #
|
|
15
|
-
--pos-color-panel: #
|
|
14
|
+
--pos-color-surface-muted: #f5f5f7;
|
|
15
|
+
--pos-color-panel: #ffffff;
|
|
16
16
|
--pos-color-panel-elevated: #ffffff;
|
|
17
|
-
--pos-color-ink: #
|
|
18
|
-
--pos-color-border: #
|
|
17
|
+
--pos-color-ink: #1a1a1a;
|
|
18
|
+
--pos-color-border: #ececf0;
|
|
19
19
|
--pos-color-disabled: #dddddd;
|
|
20
20
|
--pos-color-on-disabled: #999999;
|
|
21
|
-
--pos-color-display: #
|
|
21
|
+
--pos-color-display: #1a1a1a;
|
|
22
22
|
--pos-color-on-display: #ffffff;
|
|
23
23
|
--pos-color-key: #ffffff;
|
|
24
|
-
--pos-color-key-border: #
|
|
25
|
-
--pos-color-key-active: #
|
|
26
|
-
--pos-color-on-key-active: #
|
|
24
|
+
--pos-color-key-border: #ececf0;
|
|
25
|
+
--pos-color-key-active: #f0e6fd;
|
|
26
|
+
--pos-color-on-key-active: #1a1a1a;
|
|
27
27
|
|
|
28
28
|
/* Shape / size */
|
|
29
29
|
--pos-radius-sm: 4px;
|
|
@@ -35,16 +35,22 @@
|
|
|
35
35
|
--pos-keypad-size-md: 3.75rem;
|
|
36
36
|
--pos-keypad-size-lg: 4.25rem;
|
|
37
37
|
|
|
38
|
-
/* Type —
|
|
39
|
-
--pos-font-family:
|
|
40
|
-
--pos-font-family-display:
|
|
38
|
+
/* Type — Chakra Petch body and Helvetica Neue headlines, matching the POS POC */
|
|
39
|
+
--pos-font-family: 'Chakra Petch', ui-sans-serif, system-ui, sans-serif;
|
|
40
|
+
--pos-font-family-display: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
41
41
|
--pos-font-size-sm: 0.8125rem;
|
|
42
|
-
--pos-font-size-md: 0.
|
|
42
|
+
--pos-font-size-md: 0.90625rem;
|
|
43
43
|
--pos-font-size-lg: 1.125rem;
|
|
44
44
|
--pos-font-size-xl: 1.375rem;
|
|
45
45
|
--pos-font-weight-semibold: 600;
|
|
46
46
|
--pos-font-weight-bold: 700;
|
|
47
47
|
--pos-letter-spacing-display: 0.28em;
|
|
48
|
+
--pos-letter-spacing-brand: 0.08em;
|
|
49
|
+
--pos-letter-spacing-tight: -0.03em;
|
|
50
|
+
|
|
51
|
+
/* Elevation */
|
|
52
|
+
--pos-shadow-key: 0 1px 3px color-mix(in srgb, var(--pos-color-ink) 8%, transparent);
|
|
53
|
+
--pos-shadow-overlay: 0 var(--pos-space-md) var(--pos-space-2xl) color-mix(in srgb, var(--pos-color-ink) 14%, transparent);
|
|
48
54
|
|
|
49
55
|
/* Space */
|
|
50
56
|
--pos-space-xs: 4px;
|
|
@@ -25,27 +25,50 @@ type LoginStage = 'clerkNumber' | 'password';
|
|
|
25
25
|
declare class PosLogin {
|
|
26
26
|
readonly errorMessage: _angular_core.InputSignal<string>;
|
|
27
27
|
readonly session: _angular_core.InputSignal<PosLoginSessionState>;
|
|
28
|
+
readonly heading: _angular_core.InputSignal<string>;
|
|
28
29
|
readonly titleClerkNumber: _angular_core.InputSignal<string>;
|
|
29
30
|
readonly titleClerkPassword: _angular_core.InputSignal<string>;
|
|
30
31
|
readonly nextLabel: _angular_core.InputSignal<string>;
|
|
31
32
|
readonly loginLabel: _angular_core.InputSignal<string>;
|
|
33
|
+
/** Shop context beside the keypad. Off leaves the keypad on its own. */
|
|
34
|
+
readonly showAside: _angular_core.InputSignal<boolean>;
|
|
35
|
+
/** Draws a frame around the login shell. Off by default. */
|
|
36
|
+
readonly bordered: _angular_core.InputSignal<boolean>;
|
|
37
|
+
/** When false, the brand image is omitted, including the built-in mark. */
|
|
38
|
+
readonly showBrandImage: _angular_core.InputSignal<boolean>;
|
|
39
|
+
/** Partner image URL. Empty, while `showBrandImage` is true, uses the built-in Retalia mark. */
|
|
40
|
+
readonly brandImage: _angular_core.InputSignal<string>;
|
|
41
|
+
/** Wordmark after the image. Empty shows no text. */
|
|
42
|
+
readonly brandLabel: _angular_core.InputSignal<string>;
|
|
43
|
+
/** First address line under the brand. Empty hides it. */
|
|
44
|
+
readonly locationName: _angular_core.InputSignal<string>;
|
|
45
|
+
/** Second address line. Empty hides it. */
|
|
46
|
+
readonly terminalLine: _angular_core.InputSignal<string>;
|
|
47
|
+
/** Shop line. Empty hides it. */
|
|
48
|
+
readonly shopName: _angular_core.InputSignal<string>;
|
|
49
|
+
readonly dateLabel: _angular_core.InputSignal<string>;
|
|
50
|
+
readonly posNumberLabel: _angular_core.InputSignal<string>;
|
|
51
|
+
/** Empty hides the POS number tile. */
|
|
52
|
+
readonly posNumber: _angular_core.InputSignal<string>;
|
|
32
53
|
readonly action: _angular_core.OutputEmitterRef<PosLoginIntent>;
|
|
33
|
-
protected readonly
|
|
54
|
+
protected readonly digitKeys: readonly string[];
|
|
34
55
|
protected readonly inputValue: _angular_core.WritableSignal<string>;
|
|
35
56
|
protected readonly stage: _angular_core.WritableSignal<LoginStage>;
|
|
36
57
|
private readonly clerkNumber;
|
|
37
58
|
protected readonly title: _angular_core.Signal<string>;
|
|
38
59
|
protected readonly maskInput: _angular_core.Signal<boolean>;
|
|
60
|
+
protected readonly hasEntry: _angular_core.Signal<boolean>;
|
|
61
|
+
protected readonly displayText: _angular_core.Signal<string>;
|
|
39
62
|
protected readonly showBack: _angular_core.Signal<boolean>;
|
|
40
63
|
protected readonly primaryLabel: _angular_core.Signal<string>;
|
|
41
|
-
protected readonly primaryEnabled: _angular_core.Signal<boolean>;
|
|
42
64
|
protected readonly interactionLocked: _angular_core.Signal<boolean>;
|
|
65
|
+
protected readonly shownDate: _angular_core.Signal<string>;
|
|
43
66
|
protected readonly sessionStatusText: _angular_core.Signal<string>;
|
|
44
67
|
protected onKeypad(key: string): void;
|
|
45
68
|
protected onPrimary(): void;
|
|
46
69
|
protected onBack(): void;
|
|
47
70
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PosLogin, never>;
|
|
48
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosLogin, "pos-login", never, { "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "session": { "alias": "session"; "required": false; "isSignal": true; }; "titleClerkNumber": { "alias": "titleClerkNumber"; "required": false; "isSignal": true; }; "titleClerkPassword": { "alias": "titleClerkPassword"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "loginLabel": { "alias": "loginLabel"; "required": false; "isSignal": true; }; }, { "action": "action"; }, never, never, true, never>;
|
|
71
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosLogin, "pos-login", never, { "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "session": { "alias": "session"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "titleClerkNumber": { "alias": "titleClerkNumber"; "required": false; "isSignal": true; }; "titleClerkPassword": { "alias": "titleClerkPassword"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "loginLabel": { "alias": "loginLabel"; "required": false; "isSignal": true; }; "showAside": { "alias": "showAside"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "showBrandImage": { "alias": "showBrandImage"; "required": false; "isSignal": true; }; "brandImage": { "alias": "brandImage"; "required": false; "isSignal": true; }; "brandLabel": { "alias": "brandLabel"; "required": false; "isSignal": true; }; "locationName": { "alias": "locationName"; "required": false; "isSignal": true; }; "terminalLine": { "alias": "terminalLine"; "required": false; "isSignal": true; }; "shopName": { "alias": "shopName"; "required": false; "isSignal": true; }; "dateLabel": { "alias": "dateLabel"; "required": false; "isSignal": true; }; "posNumberLabel": { "alias": "posNumberLabel"; "required": false; "isSignal": true; }; "posNumber": { "alias": "posNumber"; "required": false; "isSignal": true; }; }, { "action": "action"; }, never, never, true, never>;
|
|
49
72
|
}
|
|
50
73
|
|
|
51
74
|
type PosBasketIntent = {
|
|
@@ -88,12 +111,12 @@ declare class PosBasket {
|
|
|
88
111
|
readonly lines: _angular_core.InputSignal<readonly PosBasketLine[]>;
|
|
89
112
|
readonly totals: _angular_core.InputSignal<PosBasketTotals>;
|
|
90
113
|
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
114
|
+
/** Draws the panel frame. Off by default so the host can sit the basket flush. */
|
|
115
|
+
readonly bordered: _angular_core.InputSignal<boolean>;
|
|
91
116
|
readonly title: _angular_core.InputSignal<string>;
|
|
92
117
|
readonly emptyMessage: _angular_core.InputSignal<string>;
|
|
93
|
-
readonly clearLabel: _angular_core.InputSignal<string>;
|
|
94
118
|
readonly action: _angular_core.OutputEmitterRef<PosBasketIntent>;
|
|
95
119
|
protected readonly hasLines: _angular_core.Signal<boolean>;
|
|
96
|
-
protected readonly canClear: _angular_core.Signal<boolean>;
|
|
97
120
|
protected formatMoney(amount: number): string;
|
|
98
121
|
protected canChangeQuantity(line: PosBasketLine): boolean;
|
|
99
122
|
protected canDecrement(line: PosBasketLine): boolean;
|
|
@@ -101,9 +124,59 @@ declare class PosBasket {
|
|
|
101
124
|
protected onIncrement(line: PosBasketLine): void;
|
|
102
125
|
protected onDecrement(line: PosBasketLine): void;
|
|
103
126
|
protected onVoid(line: PosBasketLine): void;
|
|
104
|
-
protected onClear(): void;
|
|
105
127
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PosBasket, never>;
|
|
106
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosBasket, "pos-basket", never, { "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "totals": { "alias": "totals"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "
|
|
128
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosBasket, "pos-basket", never, { "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "totals": { "alias": "totals"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; }, { "action": "action"; }, never, never, true, never>;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
interface PosHeaderIntent {
|
|
132
|
+
readonly type: 'header.signOut';
|
|
133
|
+
}
|
|
134
|
+
declare class PosHeader {
|
|
135
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
136
|
+
readonly context: _angular_core.InputSignal<string>;
|
|
137
|
+
/** When false, the brand image is omitted, including the built-in mark. */
|
|
138
|
+
readonly showBrandImage: _angular_core.InputSignal<boolean>;
|
|
139
|
+
/** Partner image URL. Empty, while `showBrandImage` is true, uses the built-in Retalia mark. */
|
|
140
|
+
readonly brandImage: _angular_core.InputSignal<string>;
|
|
141
|
+
/** Wordmark after the image. Empty shows no text. */
|
|
142
|
+
readonly brandLabel: _angular_core.InputSignal<string>;
|
|
143
|
+
readonly clerkName: _angular_core.InputSignal<string>;
|
|
144
|
+
readonly clerkRole: _angular_core.InputSignal<string>;
|
|
145
|
+
readonly signOutLabel: _angular_core.InputSignal<string>;
|
|
146
|
+
readonly menuLabel: _angular_core.InputSignal<string>;
|
|
147
|
+
readonly canSignOut: _angular_core.InputSignal<boolean>;
|
|
148
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
149
|
+
readonly action: _angular_core.OutputEmitterRef<PosHeaderIntent>;
|
|
150
|
+
protected readonly menuOpen: _angular_core.WritableSignal<boolean>;
|
|
151
|
+
protected readonly initial: _angular_core.Signal<string>;
|
|
152
|
+
protected toggleMenu(): void;
|
|
153
|
+
protected closeMenu(): void;
|
|
154
|
+
protected onSignOut(): void;
|
|
155
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PosHeader, never>;
|
|
156
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosHeader, "pos-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; "showBrandImage": { "alias": "showBrandImage"; "required": false; "isSignal": true; }; "brandImage": { "alias": "brandImage"; "required": false; "isSignal": true; }; "brandLabel": { "alias": "brandLabel"; "required": false; "isSignal": true; }; "clerkName": { "alias": "clerkName"; "required": false; "isSignal": true; }; "clerkRole": { "alias": "clerkRole"; "required": false; "isSignal": true; }; "signOutLabel": { "alias": "signOutLabel"; "required": false; "isSignal": true; }; "menuLabel": { "alias": "menuLabel"; "required": false; "isSignal": true; }; "canSignOut": { "alias": "canSignOut"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "action": "action"; }, never, never, true, never>;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
type PosTransactionActionBarIntent = {
|
|
160
|
+
readonly type: 'actionBar.clearBasket';
|
|
161
|
+
} | {
|
|
162
|
+
readonly type: 'actionBar.tender';
|
|
163
|
+
};
|
|
164
|
+
interface TransactionButton {
|
|
165
|
+
readonly id: 'clearBasket' | 'tender';
|
|
166
|
+
readonly label: string;
|
|
167
|
+
readonly className: string;
|
|
168
|
+
readonly intent: PosTransactionActionBarIntent;
|
|
169
|
+
}
|
|
170
|
+
declare class PosTransactionActionBar {
|
|
171
|
+
/** Action ids from the envelope. A button is shown only when its id is listed. */
|
|
172
|
+
readonly availableActions: _angular_core.InputSignal<readonly string[]>;
|
|
173
|
+
/** Locks the shown buttons while the host is busy. Does not choose which actions exist. */
|
|
174
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
175
|
+
readonly action: _angular_core.OutputEmitterRef<PosTransactionActionBarIntent>;
|
|
176
|
+
protected readonly buttons: _angular_core.Signal<TransactionButton[]>;
|
|
177
|
+
protected onPress(button: TransactionButton): void;
|
|
178
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PosTransactionActionBar, never>;
|
|
179
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosTransactionActionBar, "pos-transaction-action-bar", never, { "availableActions": { "alias": "availableActions"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "action": "action"; }, never, never, true, never>;
|
|
107
180
|
}
|
|
108
181
|
|
|
109
182
|
type PosItemEntryIntent = {
|
|
@@ -112,11 +185,15 @@ type PosItemEntryIntent = {
|
|
|
112
185
|
};
|
|
113
186
|
declare class PosItemEntry {
|
|
114
187
|
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
188
|
+
/** Draws the panel frame. Off by default so the host can sit the field flush. */
|
|
189
|
+
readonly bordered: _angular_core.InputSignal<boolean>;
|
|
115
190
|
readonly errorMessage: _angular_core.InputSignal<string>;
|
|
116
191
|
readonly autofocus: _angular_core.InputSignal<boolean>;
|
|
117
192
|
readonly label: _angular_core.InputSignal<string>;
|
|
118
193
|
readonly placeholder: _angular_core.InputSignal<string>;
|
|
119
|
-
readonly
|
|
194
|
+
readonly scannerStatus: _angular_core.InputSignal<string>;
|
|
195
|
+
/** Key that moves focus to the field. Empty hides the hint and the shortcut. */
|
|
196
|
+
readonly focusHotkey: _angular_core.InputSignal<string>;
|
|
120
197
|
readonly action: _angular_core.OutputEmitterRef<{
|
|
121
198
|
readonly type: "itemEntry.submit";
|
|
122
199
|
readonly reference: string;
|
|
@@ -125,16 +202,19 @@ declare class PosItemEntry {
|
|
|
125
202
|
protected readonly reference: _angular_core.WritableSignal<string>;
|
|
126
203
|
protected readonly canSubmit: _angular_core.Signal<boolean>;
|
|
127
204
|
constructor();
|
|
205
|
+
protected onDocumentKeydown(event: KeyboardEvent): void;
|
|
128
206
|
protected onInput(event: Event): void;
|
|
129
207
|
protected onSubmit(event: Event): void;
|
|
130
208
|
private focusInput;
|
|
131
209
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PosItemEntry, never>;
|
|
132
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosItemEntry, "pos-item-entry", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "
|
|
210
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosItemEntry, "pos-item-entry", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "scannerStatus": { "alias": "scannerStatus"; "required": false; "isSignal": true; }; "focusHotkey": { "alias": "focusHotkey"; "required": false; "isSignal": true; }; }, { "action": "action"; }, never, never, true, never>;
|
|
133
211
|
}
|
|
134
212
|
|
|
135
213
|
type PosTenderIntent = {
|
|
136
214
|
readonly type: 'tender.cash';
|
|
137
215
|
readonly amount: number;
|
|
216
|
+
} | {
|
|
217
|
+
readonly type: 'tender.cancel';
|
|
138
218
|
};
|
|
139
219
|
declare class PosTender {
|
|
140
220
|
/** Display-only amount due from the host envelope — not calculated here. */
|
|
@@ -149,23 +229,30 @@ declare class PosTender {
|
|
|
149
229
|
readonly tenderedLabel: _angular_core.InputSignal<string>;
|
|
150
230
|
readonly changeDueLabel: _angular_core.InputSignal<string>;
|
|
151
231
|
readonly tenderLabel: _angular_core.InputSignal<string>;
|
|
232
|
+
readonly cancelLabel: _angular_core.InputSignal<string>;
|
|
233
|
+
readonly hint: _angular_core.InputSignal<string>;
|
|
152
234
|
readonly processingLabel: _angular_core.InputSignal<string>;
|
|
153
|
-
readonly action: _angular_core.OutputEmitterRef<
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
protected readonly keypadRows: readonly (readonly string[])[];
|
|
158
|
-
protected readonly amountInput: _angular_core.WritableSignal<string>;
|
|
235
|
+
readonly action: _angular_core.OutputEmitterRef<PosTenderIntent>;
|
|
236
|
+
protected readonly coins: readonly number[];
|
|
237
|
+
protected readonly notes: readonly number[];
|
|
238
|
+
protected readonly given: _angular_core.WritableSignal<number>;
|
|
159
239
|
protected readonly parsedAmount: _angular_core.Signal<number | null>;
|
|
160
240
|
protected readonly canTender: _angular_core.Signal<boolean>;
|
|
161
241
|
protected readonly hasChangeDue: _angular_core.Signal<boolean>;
|
|
162
|
-
protected readonly
|
|
242
|
+
protected readonly displayGiven: _angular_core.Signal<string>;
|
|
243
|
+
protected readonly quickAmounts: _angular_core.Signal<number[]>;
|
|
163
244
|
protected readonly statusText: _angular_core.Signal<string>;
|
|
164
245
|
protected formatMoney(amount: number): string;
|
|
165
|
-
protected
|
|
246
|
+
protected denominationLabel(amount: number): string;
|
|
247
|
+
protected quickLabel(amount: number): string;
|
|
248
|
+
protected isExact(amount: number): boolean;
|
|
249
|
+
protected addAmount(amount: number): void;
|
|
250
|
+
protected setAmount(amount: number): void;
|
|
251
|
+
protected resetAmount(): void;
|
|
166
252
|
protected onTender(): void;
|
|
253
|
+
protected onCancel(): void;
|
|
167
254
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PosTender, never>;
|
|
168
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosTender, "pos-tender", never, { "amountDue": { "alias": "amountDue"; "required": false; "isSignal": true; }; "changeDue": { "alias": "changeDue"; "required": false; "isSignal": true; }; "currency": { "alias": "currency"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "amountDueLabel": { "alias": "amountDueLabel"; "required": false; "isSignal": true; }; "tenderedLabel": { "alias": "tenderedLabel"; "required": false; "isSignal": true; }; "changeDueLabel": { "alias": "changeDueLabel"; "required": false; "isSignal": true; }; "tenderLabel": { "alias": "tenderLabel"; "required": false; "isSignal": true; }; "processingLabel": { "alias": "processingLabel"; "required": false; "isSignal": true; }; }, { "action": "action"; }, never, never, true, never>;
|
|
255
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosTender, "pos-tender", never, { "amountDue": { "alias": "amountDue"; "required": false; "isSignal": true; }; "changeDue": { "alias": "changeDue"; "required": false; "isSignal": true; }; "currency": { "alias": "currency"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "amountDueLabel": { "alias": "amountDueLabel"; "required": false; "isSignal": true; }; "tenderedLabel": { "alias": "tenderedLabel"; "required": false; "isSignal": true; }; "changeDueLabel": { "alias": "changeDueLabel"; "required": false; "isSignal": true; }; "tenderLabel": { "alias": "tenderLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "processingLabel": { "alias": "processingLabel"; "required": false; "isSignal": true; }; }, { "action": "action"; }, never, never, true, never>;
|
|
169
256
|
}
|
|
170
257
|
|
|
171
258
|
interface PosReceiptIntent {
|
|
@@ -216,6 +303,8 @@ declare class PosReceipt {
|
|
|
216
303
|
readonly payments: _angular_core.InputSignal<readonly PosReceiptPayment[]>;
|
|
217
304
|
readonly document: _angular_core.InputSignal<PosReceiptDocument>;
|
|
218
305
|
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
306
|
+
/** Draws the panel frame. Off by default so the host can sit the receipt flush. */
|
|
307
|
+
readonly bordered: _angular_core.InputSignal<boolean>;
|
|
219
308
|
readonly title: _angular_core.InputSignal<string>;
|
|
220
309
|
readonly emptyMessage: _angular_core.InputSignal<string>;
|
|
221
310
|
readonly preparingLabel: _angular_core.InputSignal<string>;
|
|
@@ -234,7 +323,7 @@ declare class PosReceipt {
|
|
|
234
323
|
protected formatMoney(amount: number): string;
|
|
235
324
|
protected onNewSale(): void;
|
|
236
325
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PosReceipt, never>;
|
|
237
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosReceipt, "pos-receipt", never, { "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "totals": { "alias": "totals"; "required": false; "isSignal": true; }; "payments": { "alias": "payments"; "required": false; "isSignal": true; }; "document": { "alias": "document"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "preparingLabel": { "alias": "preparingLabel"; "required": false; "isSignal": true; }; "readyLabel": { "alias": "readyLabel"; "required": false; "isSignal": true; }; "newSaleLabel": { "alias": "newSaleLabel"; "required": false; "isSignal": true; }; "tenderLabel": { "alias": "tenderLabel"; "required": false; "isSignal": true; }; "amountLabel": { "alias": "amountLabel"; "required": false; "isSignal": true; }; "tenderedLabel": { "alias": "tenderedLabel"; "required": false; "isSignal": true; }; "changeLabel": { "alias": "changeLabel"; "required": false; "isSignal": true; }; }, { "action": "action"; }, never, never, true, never>;
|
|
326
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosReceipt, "pos-receipt", never, { "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "totals": { "alias": "totals"; "required": false; "isSignal": true; }; "payments": { "alias": "payments"; "required": false; "isSignal": true; }; "document": { "alias": "document"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "preparingLabel": { "alias": "preparingLabel"; "required": false; "isSignal": true; }; "readyLabel": { "alias": "readyLabel"; "required": false; "isSignal": true; }; "newSaleLabel": { "alias": "newSaleLabel"; "required": false; "isSignal": true; }; "tenderLabel": { "alias": "tenderLabel"; "required": false; "isSignal": true; }; "amountLabel": { "alias": "amountLabel"; "required": false; "isSignal": true; }; "tenderedLabel": { "alias": "tenderedLabel"; "required": false; "isSignal": true; }; "changeLabel": { "alias": "changeLabel"; "required": false; "isSignal": true; }; }, { "action": "action"; }, never, never, true, never>;
|
|
238
327
|
}
|
|
239
328
|
|
|
240
329
|
/**
|
|
@@ -242,8 +331,8 @@ declare class PosReceipt {
|
|
|
242
331
|
* The lab never writes that file; edits are live overrides only.
|
|
243
332
|
*/
|
|
244
333
|
type PosTokenKind = 'color' | 'length' | 'font-family' | 'font-weight' | 'other';
|
|
245
|
-
type PosTokenGroup = 'color' | 'radius' | 'space' | 'type' | 'control';
|
|
246
|
-
type PosTokenPreview = 'color' | 'radius' | 'space' | 'font-size' | 'font-family' | 'font-weight' | 'letter-spacing' | 'size';
|
|
334
|
+
type PosTokenGroup = 'color' | 'radius' | 'space' | 'type' | 'shadow' | 'control';
|
|
335
|
+
type PosTokenPreview = 'color' | 'radius' | 'space' | 'font-size' | 'font-family' | 'font-weight' | 'letter-spacing' | 'shadow' | 'size';
|
|
247
336
|
interface PosTokenSwatch {
|
|
248
337
|
readonly name: string;
|
|
249
338
|
readonly variable: string;
|
|
@@ -265,6 +354,7 @@ declare class PosTokens {
|
|
|
265
354
|
protected readonly radiusTokens: readonly PosTokenDefinition[];
|
|
266
355
|
protected readonly spaceTokens: readonly PosTokenDefinition[];
|
|
267
356
|
protected readonly typeTokens: readonly PosTokenDefinition[];
|
|
357
|
+
protected readonly shadowTokens: readonly PosTokenDefinition[];
|
|
268
358
|
protected readonly controlTokens: readonly PosTokenDefinition[];
|
|
269
359
|
private readonly overrides;
|
|
270
360
|
protected readonly selection: _angular_core.WritableSignal<PosTokenSelection | null>;
|
|
@@ -296,5 +386,5 @@ declare class PosTokens {
|
|
|
296
386
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosTokens, "pos-tokens", never, {}, {}, never, never, true, never>;
|
|
297
387
|
}
|
|
298
388
|
|
|
299
|
-
export { PosBasket, PosItemEntry, PosLogin, PosReceipt, PosTender, PosTokens };
|
|
300
|
-
export type { PosBasketIntent, PosBasketLine, PosBasketTotals, PosBasketVat, PosItemEntryIntent, PosLoginIntent, PosLoginSessionState, PosLoginSessionStatus, PosReceiptDocument, PosReceiptIntent, PosReceiptLine, PosReceiptPayment, PosReceiptTotals, PosReceiptVat, PosTenderIntent, PosTokenSwatch };
|
|
389
|
+
export { PosBasket, PosHeader, PosItemEntry, PosLogin, PosReceipt, PosTender, PosTokens, PosTransactionActionBar };
|
|
390
|
+
export type { PosBasketIntent, PosBasketLine, PosBasketTotals, PosBasketVat, PosHeaderIntent, PosItemEntryIntent, PosLoginIntent, PosLoginSessionState, PosLoginSessionStatus, PosReceiptDocument, PosReceiptIntent, PosReceiptLine, PosReceiptPayment, PosReceiptTotals, PosReceiptVat, PosTenderIntent, PosTokenSwatch, PosTransactionActionBarIntent };
|