@retalia/pos-components 0.0.2 → 0.0.4

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.
Files changed (46) hide show
  1. package/README.md +303 -44
  2. package/eslint.config.js +32 -0
  3. package/ng-package.json +14 -0
  4. package/package.json +17 -28
  5. package/src/lib/basket/pos-basket.html +124 -0
  6. package/src/lib/basket/pos-basket.scss +285 -0
  7. package/src/lib/basket/pos-basket.spec.ts +198 -0
  8. package/src/lib/basket/pos-basket.stories.ts +114 -0
  9. package/src/lib/basket/pos-basket.ts +142 -0
  10. package/src/lib/item-entry/pos-item-entry.html +41 -0
  11. package/src/lib/item-entry/pos-item-entry.scss +145 -0
  12. package/src/lib/item-entry/pos-item-entry.spec.ts +123 -0
  13. package/src/lib/item-entry/pos-item-entry.stories.ts +31 -0
  14. package/src/lib/item-entry/pos-item-entry.ts +81 -0
  15. package/src/lib/login/pos-login.html +82 -0
  16. package/src/lib/login/pos-login.scss +238 -0
  17. package/src/lib/login/pos-login.spec.ts +89 -0
  18. package/src/lib/login/pos-login.stories.ts +36 -0
  19. package/src/lib/login/pos-login.ts +150 -0
  20. package/src/lib/receipt/pos-receipt.html +116 -0
  21. package/src/lib/receipt/pos-receipt.scss +367 -0
  22. package/src/lib/receipt/pos-receipt.spec.ts +188 -0
  23. package/src/lib/receipt/pos-receipt.stories.ts +163 -0
  24. package/src/lib/receipt/pos-receipt.ts +129 -0
  25. package/src/lib/tender/pos-tender.html +79 -0
  26. package/src/lib/tender/pos-tender.scss +318 -0
  27. package/src/lib/tender/pos-tender.spec.ts +150 -0
  28. package/src/lib/tender/pos-tender.stories.ts +47 -0
  29. package/src/lib/tender/pos-tender.ts +154 -0
  30. package/src/lib/tokens/pos-theme-css.spec.ts +75 -0
  31. package/src/lib/tokens/pos-theme-css.ts +123 -0
  32. package/src/lib/tokens/pos-token-catalog.ts +514 -0
  33. package/src/lib/tokens/pos-tokens.html +351 -0
  34. package/src/lib/tokens/pos-tokens.scss +437 -0
  35. package/src/lib/tokens/pos-tokens.spec.ts +164 -0
  36. package/src/lib/tokens/pos-tokens.stories.ts +22 -0
  37. package/src/lib/tokens/pos-tokens.ts +208 -0
  38. package/src/public-api.ts +37 -0
  39. package/src/styles/styles.css +1 -0
  40. package/src/styles/tokens.css +57 -0
  41. package/tsconfig.lib.json +14 -0
  42. package/tsconfig.lib.prod.json +11 -0
  43. package/tsconfig.spec.json +11 -0
  44. package/fesm2022/retalia-pos-components.mjs +0 -97
  45. package/fesm2022/retalia-pos-components.mjs.map +0 -1
  46. package/types/retalia-pos-components.d.ts +0 -16
@@ -0,0 +1,351 @@
1
+ <article class="pos-tokens__page">
2
+ <header class="pos-tokens__intro">
3
+ <p class="pos-tokens__kicker">@retalia/pos-components</p>
4
+ <h1 class="pos-tokens__title">Design tokens</h1>
5
+ <p class="pos-tokens__lede">
6
+ Click a sample or token to edit it. Changes are live overrides in this lab only —
7
+ package defaults are never overwritten. Export a complete <code>:root</code> CSS
8
+ file for the consuming POS, and import that file back later to resume editing.
9
+ </p>
10
+ <div class="pos-tokens__toolbar">
11
+ <input
12
+ #importFile
13
+ class="pos-tokens__file"
14
+ type="file"
15
+ accept=".css,text/css"
16
+ (change)="onImportFile($event)"
17
+ />
18
+ <button type="button" class="pos-tokens__tool pos-tokens__tool--primary" (click)="exportThemeFile()">
19
+ Export CSS
20
+ </button>
21
+ <button type="button" class="pos-tokens__tool" (click)="importFile.click()">
22
+ Import CSS
23
+ </button>
24
+ <button
25
+ type="button"
26
+ class="pos-tokens__tool"
27
+ [disabled]="!hasOverrides()"
28
+ (click)="resetTheme()"
29
+ >
30
+ Reset overrides
31
+ </button>
32
+ </div>
33
+ <p class="pos-tokens__status" role="status" aria-live="polite">{{ statusMessage() }}</p>
34
+ </header>
35
+
36
+ <div class="pos-tokens__layout">
37
+ <div class="pos-tokens__gallery">
38
+ <section class="pos-tokens__section" aria-labelledby="pos-tokens-samples">
39
+ <h2 id="pos-tokens-samples" class="pos-tokens__heading">In action</h2>
40
+ <p class="pos-tokens__hint">Click a control to edit the tokens it uses.</p>
41
+ <div class="pos-tokens__samples">
42
+ <button
43
+ type="button"
44
+ class="pos-tokens__sample"
45
+ [class.pos-tokens__sample--selected]="isSampleSelected('primary')"
46
+ [attr.aria-pressed]="isSampleSelected('primary')"
47
+ (click)="selectSample('primary')"
48
+ >
49
+ <span class="pos-tokens__btn pos-tokens__btn--primary">Primary</span>
50
+ </button>
51
+ <button
52
+ type="button"
53
+ class="pos-tokens__sample"
54
+ [class.pos-tokens__sample--selected]="isSampleSelected('success')"
55
+ [attr.aria-pressed]="isSampleSelected('success')"
56
+ (click)="selectSample('success')"
57
+ >
58
+ <span class="pos-tokens__btn pos-tokens__btn--success">Success</span>
59
+ </button>
60
+ <button
61
+ type="button"
62
+ class="pos-tokens__sample"
63
+ [class.pos-tokens__sample--selected]="isSampleSelected('danger')"
64
+ [attr.aria-pressed]="isSampleSelected('danger')"
65
+ (click)="selectSample('danger')"
66
+ >
67
+ <span class="pos-tokens__btn pos-tokens__btn--danger">Danger</span>
68
+ </button>
69
+ <button
70
+ type="button"
71
+ class="pos-tokens__sample"
72
+ [class.pos-tokens__sample--selected]="isSampleSelected('disabled')"
73
+ [attr.aria-pressed]="isSampleSelected('disabled')"
74
+ (click)="selectSample('disabled')"
75
+ >
76
+ <span class="pos-tokens__btn pos-tokens__btn--disabled">Disabled</span>
77
+ </button>
78
+ <button
79
+ type="button"
80
+ class="pos-tokens__sample pos-tokens__sample--text"
81
+ [class.pos-tokens__sample--selected]="isSampleSelected('text')"
82
+ [attr.aria-pressed]="isSampleSelected('text')"
83
+ (click)="selectSample('text')"
84
+ >
85
+ <span class="pos-tokens__sample-text">
86
+ Body text · <span class="pos-tokens__sample-muted">muted</span>
87
+ </span>
88
+ </button>
89
+ <button
90
+ type="button"
91
+ class="pos-tokens__sample pos-tokens__sample--text"
92
+ [class.pos-tokens__sample--selected]="isSampleSelected('error')"
93
+ [attr.aria-pressed]="isSampleSelected('error')"
94
+ (click)="selectSample('error')"
95
+ >
96
+ <span class="pos-tokens__sample-danger">Danger / error message</span>
97
+ </button>
98
+ </div>
99
+ </section>
100
+
101
+ <section class="pos-tokens__section" aria-labelledby="pos-tokens-colors">
102
+ <h2 id="pos-tokens-colors" class="pos-tokens__heading">Color</h2>
103
+ <ul class="pos-tokens__swatch-grid">
104
+ @for (token of colorTokens; track token.variable) {
105
+ <li>
106
+ <button
107
+ type="button"
108
+ class="pos-tokens__pick"
109
+ [class.pos-tokens__pick--selected]="isTokenSelected(token.variable)"
110
+ [class.pos-tokens__pick--modified]="isModified(token.variable)"
111
+ [attr.aria-pressed]="isTokenSelected(token.variable)"
112
+ (click)="selectToken(token)"
113
+ >
114
+ <span
115
+ class="pos-tokens__chip"
116
+ [style.background]="'var(' + token.variable + ')'"
117
+ ></span>
118
+ <span class="pos-tokens__swatch-meta">
119
+ <span class="pos-tokens__swatch-name">
120
+ {{ token.name }}
121
+ @if (isModified(token.variable)) {
122
+ <span class="pos-tokens__edited">Edited</span>
123
+ }
124
+ </span>
125
+ <code class="pos-tokens__swatch-var">{{ token.variable }}</code>
126
+ </span>
127
+ </button>
128
+ </li>
129
+ }
130
+ </ul>
131
+ </section>
132
+
133
+ <section class="pos-tokens__section" aria-labelledby="pos-tokens-radius">
134
+ <h2 id="pos-tokens-radius" class="pos-tokens__heading">Radius</h2>
135
+ <ul class="pos-tokens__radius-row">
136
+ @for (token of radiusTokens; track token.variable) {
137
+ <li>
138
+ <button
139
+ type="button"
140
+ class="pos-tokens__pick"
141
+ [class.pos-tokens__pick--selected]="isTokenSelected(token.variable)"
142
+ [class.pos-tokens__pick--modified]="isModified(token.variable)"
143
+ [attr.aria-pressed]="isTokenSelected(token.variable)"
144
+ (click)="selectToken(token)"
145
+ >
146
+ <span
147
+ class="pos-tokens__radius-box"
148
+ [style.border-radius]="'var(' + token.variable + ')'"
149
+ ></span>
150
+ <span class="pos-tokens__swatch-name">
151
+ {{ token.name }}
152
+ @if (isModified(token.variable)) {
153
+ <span class="pos-tokens__edited">Edited</span>
154
+ }
155
+ </span>
156
+ <code class="pos-tokens__swatch-var">{{ token.variable }}</code>
157
+ </button>
158
+ </li>
159
+ }
160
+ </ul>
161
+ </section>
162
+
163
+ <section class="pos-tokens__section" aria-labelledby="pos-tokens-space">
164
+ <h2 id="pos-tokens-space" class="pos-tokens__heading">Space</h2>
165
+ <ul class="pos-tokens__space-list">
166
+ @for (token of spaceTokens; track token.variable) {
167
+ <li>
168
+ <button
169
+ type="button"
170
+ class="pos-tokens__pick pos-tokens__pick--row"
171
+ [class.pos-tokens__pick--selected]="isTokenSelected(token.variable)"
172
+ [class.pos-tokens__pick--modified]="isModified(token.variable)"
173
+ [attr.aria-pressed]="isTokenSelected(token.variable)"
174
+ (click)="selectToken(token)"
175
+ >
176
+ <span
177
+ class="pos-tokens__space-bar"
178
+ [style.width]="'var(' + token.variable + ')'"
179
+ ></span>
180
+ <span class="pos-tokens__swatch-meta">
181
+ <span class="pos-tokens__swatch-name">
182
+ {{ token.name }}
183
+ @if (isModified(token.variable)) {
184
+ <span class="pos-tokens__edited">Edited</span>
185
+ }
186
+ </span>
187
+ <code class="pos-tokens__swatch-var">{{ token.variable }}</code>
188
+ </span>
189
+ </button>
190
+ </li>
191
+ }
192
+ </ul>
193
+ </section>
194
+
195
+ <section class="pos-tokens__section" aria-labelledby="pos-tokens-type">
196
+ <h2 id="pos-tokens-type" class="pos-tokens__heading">Typography</h2>
197
+ <ul class="pos-tokens__type-list">
198
+ @for (token of typeTokens; track token.variable) {
199
+ <li>
200
+ <button
201
+ type="button"
202
+ class="pos-tokens__pick"
203
+ [class.pos-tokens__pick--selected]="isTokenSelected(token.variable)"
204
+ [class.pos-tokens__pick--modified]="isModified(token.variable)"
205
+ [attr.aria-pressed]="isTokenSelected(token.variable)"
206
+ (click)="selectToken(token)"
207
+ >
208
+ <span class="pos-tokens__swatch-name">
209
+ {{ token.name }}
210
+ @if (isModified(token.variable)) {
211
+ <span class="pos-tokens__edited">Edited</span>
212
+ }
213
+ </span>
214
+ <code class="pos-tokens__swatch-var">{{ token.variable }}</code>
215
+ @switch (token.preview) {
216
+ @case ('font-family') {
217
+ <span
218
+ class="pos-tokens__type-preview"
219
+ [style.font-family]="'var(' + token.variable + ')'"
220
+ >
221
+ The quick brown fox
222
+ </span>
223
+ }
224
+ @case ('font-size') {
225
+ <span
226
+ class="pos-tokens__type-preview"
227
+ [style.font-size]="'var(' + token.variable + ')'"
228
+ >
229
+ The quick brown fox
230
+ </span>
231
+ }
232
+ @case ('font-weight') {
233
+ <span
234
+ class="pos-tokens__type-preview"
235
+ [style.font-weight]="'var(' + token.variable + ')'"
236
+ >
237
+ The quick brown fox
238
+ </span>
239
+ }
240
+ @case ('letter-spacing') {
241
+ <span
242
+ class="pos-tokens__type-preview pos-tokens__type-preview--caps"
243
+ [style.letter-spacing]="'var(' + token.variable + ')'"
244
+ >
245
+ Display
246
+ </span>
247
+ }
248
+ }
249
+ </button>
250
+ </li>
251
+ }
252
+ </ul>
253
+ </section>
254
+
255
+ <section class="pos-tokens__section" aria-labelledby="pos-tokens-controls">
256
+ <h2 id="pos-tokens-controls" class="pos-tokens__heading">Controls</h2>
257
+ <ul class="pos-tokens__control-list">
258
+ @for (token of controlTokens; track token.variable) {
259
+ <li>
260
+ <button
261
+ type="button"
262
+ class="pos-tokens__pick pos-tokens__pick--row"
263
+ [class.pos-tokens__pick--selected]="isTokenSelected(token.variable)"
264
+ [class.pos-tokens__pick--modified]="isModified(token.variable)"
265
+ [attr.aria-pressed]="isTokenSelected(token.variable)"
266
+ (click)="selectToken(token)"
267
+ >
268
+ <span
269
+ class="pos-tokens__size-box"
270
+ [style.width]="'var(' + token.variable + ')'"
271
+ [style.height]="'var(' + token.variable + ')'"
272
+ ></span>
273
+ <span class="pos-tokens__swatch-meta">
274
+ <span class="pos-tokens__swatch-name">
275
+ {{ token.name }}
276
+ @if (isModified(token.variable)) {
277
+ <span class="pos-tokens__edited">Edited</span>
278
+ }
279
+ </span>
280
+ <code class="pos-tokens__swatch-var">{{ token.variable }}</code>
281
+ </span>
282
+ </button>
283
+ </li>
284
+ }
285
+ </ul>
286
+ </section>
287
+ </div>
288
+
289
+ <aside class="pos-tokens__inspector" aria-labelledby="pos-tokens-inspector-title">
290
+ <div class="pos-tokens__inspector-header">
291
+ <h2 id="pos-tokens-inspector-title" class="pos-tokens__heading">
292
+ {{ selection()?.title ?? 'Theme editor' }}
293
+ </h2>
294
+ @if (selection()) {
295
+ <button type="button" class="pos-tokens__tool pos-tokens__tool--quiet" (click)="clearSelection()">
296
+ Close
297
+ </button>
298
+ }
299
+ </div>
300
+
301
+ @if (!selection()) {
302
+ <p class="pos-tokens__hint">
303
+ Select a sample or token to change its values. Export writes a complete CSS
304
+ file the host POS can load after the package stylesheet.
305
+ </p>
306
+ } @else {
307
+ <ul class="pos-tokens__fields">
308
+ @for (token of selectedTokens(); track token.variable) {
309
+ <li class="pos-tokens__field">
310
+ <label class="pos-tokens__field-label" [attr.for]="tokenFieldId(token.variable)">
311
+ {{ token.name }}
312
+ </label>
313
+ <code class="pos-tokens__swatch-var">{{ token.variable }}</code>
314
+ <div class="pos-tokens__field-controls">
315
+ @if (token.kind === 'color') {
316
+ @if (colorInputValue(token.variable); as hex) {
317
+ <input
318
+ class="pos-tokens__color"
319
+ type="color"
320
+ [value]="hex"
321
+ [attr.aria-label]="token.name + ' color'"
322
+ (input)="onTokenInput(token.variable, $event)"
323
+ />
324
+ }
325
+ }
326
+ <input
327
+ class="pos-tokens__value"
328
+ type="text"
329
+ [id]="tokenFieldId(token.variable)"
330
+ [value]="currentValue(token.variable)"
331
+ spellcheck="false"
332
+ autocomplete="off"
333
+ (input)="onTokenInput(token.variable, $event)"
334
+ />
335
+ </div>
336
+ <p class="pos-tokens__default">
337
+ Default
338
+ <code>{{ defaultValue(token.variable) }}</code>
339
+ </p>
340
+ @if (isModified(token.variable)) {
341
+ <button type="button" class="pos-tokens__reset" (click)="resetToken(token.variable)">
342
+ Reset to default
343
+ </button>
344
+ }
345
+ </li>
346
+ }
347
+ </ul>
348
+ }
349
+ </aside>
350
+ </div>
351
+ </article>