@retalia/pos-components 0.0.10 → 0.0.11
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 +442 -400
- package/fesm2022/retalia-pos-components.mjs +1751 -32
- package/fesm2022/retalia-pos-components.mjs.map +1 -1
- package/package.json +1 -1
- package/types/retalia-pos-components.d.ts +253 -13
package/package.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { Signal } from '@angular/core';
|
|
2
3
|
|
|
3
4
|
type PosLoginIntent = {
|
|
4
5
|
readonly type: 'login.key';
|
|
@@ -161,22 +162,15 @@ type PosTransactionActionBarIntent = {
|
|
|
161
162
|
} | {
|
|
162
163
|
readonly type: 'actionBar.tender';
|
|
163
164
|
};
|
|
164
|
-
interface TransactionButton {
|
|
165
|
-
readonly id: 'clearBasket' | 'tender';
|
|
166
|
-
readonly label: string;
|
|
167
|
-
readonly className: string;
|
|
168
|
-
readonly intent: PosTransactionActionBarIntent;
|
|
169
|
-
}
|
|
170
165
|
declare class PosTransactionActionBar {
|
|
171
|
-
/**
|
|
166
|
+
/** Envelope action names. `clearBasket` shows Cancel. `tender` shows Cash. */
|
|
172
167
|
readonly availableActions: _angular_core.InputSignal<readonly string[]>;
|
|
173
|
-
/** Locks the shown buttons while the host is busy. Does not choose which actions exist. */
|
|
174
168
|
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
175
169
|
readonly action: _angular_core.OutputEmitterRef<PosTransactionActionBarIntent>;
|
|
176
|
-
protected
|
|
177
|
-
protected
|
|
170
|
+
protected onClear(): void;
|
|
171
|
+
protected onCash(): void;
|
|
178
172
|
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,
|
|
173
|
+
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, ["*"], true, never>;
|
|
180
174
|
}
|
|
181
175
|
|
|
182
176
|
type PosItemEntryIntent = {
|
|
@@ -210,6 +204,252 @@ declare class PosItemEntry {
|
|
|
210
204
|
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>;
|
|
211
205
|
}
|
|
212
206
|
|
|
207
|
+
declare const POS_WORKSPACE_PANE_IDS: readonly ["header", "itemEntry", "basket", "actionBar"];
|
|
208
|
+
type PosWorkspaceBuiltinPaneId = (typeof POS_WORKSPACE_PANE_IDS)[number];
|
|
209
|
+
/** A library region, or a custom slot (`empty-1`, `empty-2`, …) the POS fills later. */
|
|
210
|
+
type PosWorkspacePaneId = PosWorkspaceBuiltinPaneId | `empty-${number}`;
|
|
211
|
+
type PosWorkspaceColumn = 0 | 1;
|
|
212
|
+
/** Which edge a pane uses when it spans both columns. */
|
|
213
|
+
type PosWorkspaceSpan = 'top' | 'bottom';
|
|
214
|
+
/** Where one logged-in sale region sits. Weight 0 sizes to content; a positive weight shares leftover height. */
|
|
215
|
+
interface PosWorkspacePanePlacement {
|
|
216
|
+
readonly id: PosWorkspacePaneId;
|
|
217
|
+
readonly column: PosWorkspaceColumn;
|
|
218
|
+
readonly order: number;
|
|
219
|
+
readonly weight: number;
|
|
220
|
+
/** Spans both columns at this pane's place in the stack. */
|
|
221
|
+
readonly fullWidth?: boolean;
|
|
222
|
+
/** `top` sits above the split. `bottom` sits under both columns. */
|
|
223
|
+
readonly span?: PosWorkspaceSpan;
|
|
224
|
+
/** Omitted or true shows the pane. False keeps it in the layout and hides it on the till. */
|
|
225
|
+
readonly visible?: boolean;
|
|
226
|
+
}
|
|
227
|
+
/** Arrangement of the logged-in sale shell. The host can keep this later; the workspace does not store it. */
|
|
228
|
+
interface PosWorkspaceLayout {
|
|
229
|
+
/** Share of the width given to the left column once a pane is docked on the right. */
|
|
230
|
+
readonly startColumnRatio: number;
|
|
231
|
+
readonly panes: readonly PosWorkspacePanePlacement[];
|
|
232
|
+
}
|
|
233
|
+
/** JSON the consuming POS passes back in as the `layout` input. */
|
|
234
|
+
declare function workspaceLayoutJson(layout: PosWorkspaceLayout): string;
|
|
235
|
+
/** Reads a file written by `workspaceLayoutJson`. */
|
|
236
|
+
declare function parseWorkspaceLayout(json: string): PosWorkspaceLayout;
|
|
237
|
+
interface PosWorkspaceGridPane {
|
|
238
|
+
readonly id: PosWorkspacePaneId;
|
|
239
|
+
readonly column: 1 | 2;
|
|
240
|
+
readonly rowStart: number;
|
|
241
|
+
readonly rowEnd: number;
|
|
242
|
+
readonly showResize: boolean;
|
|
243
|
+
/** When set, the pane stretches across both columns. */
|
|
244
|
+
readonly spanColumns?: boolean;
|
|
245
|
+
/** Edit mode keeps a hidden pane in the grid so its settings can show it again. */
|
|
246
|
+
readonly concealed?: boolean;
|
|
247
|
+
}
|
|
248
|
+
interface PosWorkspaceGrid {
|
|
249
|
+
readonly columns: string;
|
|
250
|
+
readonly rows: string;
|
|
251
|
+
readonly split: boolean;
|
|
252
|
+
readonly panes: readonly PosWorkspaceGridPane[];
|
|
253
|
+
}
|
|
254
|
+
declare function workspacePaneLabel(id: PosWorkspacePaneId): string;
|
|
255
|
+
/** Same stack the sale screen uses today: header, item lookup, flexible basket, action bar. */
|
|
256
|
+
declare const POS_WORKSPACE_DEFAULT_LAYOUT: PosWorkspaceLayout;
|
|
257
|
+
/** Basket docked on the right at full height. Item lookup is marked flexible so it fills above the action bar. */
|
|
258
|
+
declare const POS_WORKSPACE_BASKET_RIGHT_LAYOUT: PosWorkspaceLayout;
|
|
259
|
+
/** Nothing placed yet. Edit mode lists the library components so they can be dragged on. */
|
|
260
|
+
declare const POS_WORKSPACE_EMPTY_LAYOUT: PosWorkspaceLayout;
|
|
261
|
+
/** Header spans both columns, with the basket docked on the right. */
|
|
262
|
+
declare const POS_WORKSPACE_HEADER_SPAN_LAYOUT: PosWorkspaceLayout;
|
|
263
|
+
|
|
264
|
+
type PosWorkspaceMoveKey = 'ArrowUp' | 'ArrowDown' | 'ArrowLeft' | 'ArrowRight';
|
|
265
|
+
interface PosWorkspaceController {
|
|
266
|
+
readonly editing: Signal<boolean>;
|
|
267
|
+
readonly placements: Signal<ReadonlyMap<PosWorkspacePaneId, PosWorkspaceGridPane>>;
|
|
268
|
+
readonly draggingPane: Signal<PosWorkspacePaneId | null>;
|
|
269
|
+
readonly spans: Signal<ReadonlyMap<PosWorkspacePaneId, PosWorkspaceSpan | null>>;
|
|
270
|
+
readonly flexibleIds: Signal<ReadonlySet<PosWorkspacePaneId>>;
|
|
271
|
+
readonly fullWidthIds: Signal<ReadonlySet<PosWorkspacePaneId>>;
|
|
272
|
+
readonly settingsPane: Signal<PosWorkspacePaneId | null>;
|
|
273
|
+
togglePaneSettings(id: PosWorkspacePaneId): void;
|
|
274
|
+
closePaneSettings(id: PosWorkspacePaneId): void;
|
|
275
|
+
moveByKey(id: PosWorkspacePaneId, key: PosWorkspaceMoveKey): void;
|
|
276
|
+
setFullWidth(id: PosWorkspacePaneId, enabled: boolean): void;
|
|
277
|
+
setVisible(id: PosWorkspacePaneId, visible: boolean): void;
|
|
278
|
+
setFlexible(id: PosWorkspacePaneId, enabled: boolean): void;
|
|
279
|
+
removeFromLayout(id: PosWorkspacePaneId): void;
|
|
280
|
+
resizeByKey(id: PosWorkspacePaneId, direction: -1 | 1): void;
|
|
281
|
+
beginPaneDrag(id: PosWorkspacePaneId, event: PointerEvent): void;
|
|
282
|
+
updatePaneDrag(event: PointerEvent): void;
|
|
283
|
+
endPaneDrag(event?: PointerEvent): void;
|
|
284
|
+
beginPaneResize(id: PosWorkspacePaneId, event: PointerEvent): void;
|
|
285
|
+
updatePaneResize(event: PointerEvent): void;
|
|
286
|
+
endPaneResize(): void;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
interface PosWorkspaceDropIndicator {
|
|
290
|
+
readonly top: number;
|
|
291
|
+
readonly left: number;
|
|
292
|
+
readonly width: number;
|
|
293
|
+
readonly height: number;
|
|
294
|
+
readonly line: boolean;
|
|
295
|
+
}
|
|
296
|
+
interface PosWorkspaceDropHint {
|
|
297
|
+
readonly kind: 'top' | 'bottom' | 'dock';
|
|
298
|
+
readonly top: number;
|
|
299
|
+
readonly left: number;
|
|
300
|
+
readonly width: number;
|
|
301
|
+
readonly height: number;
|
|
302
|
+
}
|
|
303
|
+
declare class PosWorkspace {
|
|
304
|
+
private readonly hostRef;
|
|
305
|
+
private readonly destroyRef;
|
|
306
|
+
private readonly paneRefs;
|
|
307
|
+
private readonly frameRef;
|
|
308
|
+
/** Draws outlines, drag handles, and resize controls. */
|
|
309
|
+
readonly editing: _angular_core.InputSignal<boolean>;
|
|
310
|
+
/** Starting arrangement. Edits stay in this view until a new layout input arrives. */
|
|
311
|
+
readonly layout: _angular_core.InputSignal<PosWorkspaceLayout>;
|
|
312
|
+
/** Fired when the arrangement changes. Nothing is stored beyond this view. */
|
|
313
|
+
readonly layoutChange: _angular_core.OutputEmitterRef<PosWorkspaceLayout>;
|
|
314
|
+
/** The arrangement to pass back as `layout` from the consuming POS. */
|
|
315
|
+
readonly layoutExport: _angular_core.OutputEmitterRef<PosWorkspaceLayout>;
|
|
316
|
+
private readonly layoutState;
|
|
317
|
+
private readonly viewportWidth;
|
|
318
|
+
private readonly dropTarget;
|
|
319
|
+
private resizeSession;
|
|
320
|
+
private paletteGesture;
|
|
321
|
+
private ignorePaletteClick;
|
|
322
|
+
protected readonly paletteOpen: _angular_core.WritableSignal<boolean>;
|
|
323
|
+
protected readonly paletteMenuLifted: _angular_core.WritableSignal<boolean>;
|
|
324
|
+
private splitting;
|
|
325
|
+
private splitStartLayout;
|
|
326
|
+
private readonly history;
|
|
327
|
+
protected readonly canUndo: _angular_core.WritableSignal<boolean>;
|
|
328
|
+
readonly draggingPane: _angular_core.WritableSignal<PosWorkspacePaneId | null>;
|
|
329
|
+
readonly settingsPane: _angular_core.WritableSignal<PosWorkspacePaneId | null>;
|
|
330
|
+
readonly spans: _angular_core.Signal<Map<PosWorkspacePaneId, PosWorkspaceSpan | null>>;
|
|
331
|
+
readonly fullWidthIds: _angular_core.Signal<Set<PosWorkspacePaneId>>;
|
|
332
|
+
readonly flexibleIds: _angular_core.Signal<Set<PosWorkspacePaneId>>;
|
|
333
|
+
protected readonly dropIndicator: _angular_core.WritableSignal<PosWorkspaceDropIndicator | null>;
|
|
334
|
+
protected readonly dropHints: _angular_core.WritableSignal<readonly PosWorkspaceDropHint[]>;
|
|
335
|
+
protected readonly status: _angular_core.WritableSignal<string>;
|
|
336
|
+
private readonly compact;
|
|
337
|
+
protected readonly grid: _angular_core.Signal<PosWorkspaceGrid>;
|
|
338
|
+
/** Library components the host projected that are not on the screen yet. */
|
|
339
|
+
protected readonly palette: _angular_core.Signal<("header" | "itemEntry" | "basket" | "actionBar")[]>;
|
|
340
|
+
/** Empty slots with no projected content. The POS fills a slot by projecting the same id. */
|
|
341
|
+
protected readonly emptySlots: _angular_core.Signal<`empty-${number}`[]>;
|
|
342
|
+
protected readonly paneLabel: typeof workspacePaneLabel;
|
|
343
|
+
readonly placements: _angular_core.Signal<Map<PosWorkspacePaneId, PosWorkspaceGridPane>>;
|
|
344
|
+
protected readonly showSplitter: _angular_core.Signal<boolean>;
|
|
345
|
+
/** The rows the right column occupies, so the bar stays off full-width panes. */
|
|
346
|
+
protected readonly splitterRow: _angular_core.Signal<string>;
|
|
347
|
+
protected readonly splitterLeft: _angular_core.Signal<string>;
|
|
348
|
+
protected readonly ratioPercent: _angular_core.Signal<number>;
|
|
349
|
+
constructor();
|
|
350
|
+
togglePaneSettings(id: PosWorkspacePaneId): void;
|
|
351
|
+
closePaneSettings(id: PosWorkspacePaneId): void;
|
|
352
|
+
moveByKey(id: PosWorkspacePaneId, key: PosWorkspaceMoveKey): void;
|
|
353
|
+
resizeByKey(id: PosWorkspacePaneId, direction: -1 | 1): void;
|
|
354
|
+
beginPaneDrag(id: PosWorkspacePaneId, event: PointerEvent): void;
|
|
355
|
+
updatePaneDrag(event: PointerEvent): void;
|
|
356
|
+
endPaneDrag(event?: PointerEvent): void;
|
|
357
|
+
protected onPalettePointerDown(kind: PosWorkspaceBuiltinPaneId | 'empty', event: PointerEvent): void;
|
|
358
|
+
protected onPalettePointerMove(event: PointerEvent): void;
|
|
359
|
+
protected onPalettePointerUp(event: PointerEvent): void;
|
|
360
|
+
protected onPalettePointerCancel(): void;
|
|
361
|
+
protected onPaletteClick(kind: PosWorkspaceBuiltinPaneId | 'empty'): void;
|
|
362
|
+
protected togglePalette(): void;
|
|
363
|
+
protected closePalette(): void;
|
|
364
|
+
protected onPaletteMenuKeydown(event: KeyboardEvent): void;
|
|
365
|
+
protected undoLayout(): void;
|
|
366
|
+
protected applyDefaultLayout(): void;
|
|
367
|
+
protected resetLayout(): void;
|
|
368
|
+
protected exportLayout(): void;
|
|
369
|
+
protected importLayoutFile(event: Event): void;
|
|
370
|
+
setFullWidth(id: PosWorkspacePaneId, enabled: boolean): void;
|
|
371
|
+
setVisible(id: PosWorkspacePaneId, visible: boolean): void;
|
|
372
|
+
setFlexible(id: PosWorkspacePaneId, enabled: boolean): void;
|
|
373
|
+
removeFromLayout(id: PosWorkspacePaneId): void;
|
|
374
|
+
beginPaneResize(id: PosWorkspacePaneId, event: PointerEvent): void;
|
|
375
|
+
updatePaneResize(event: PointerEvent): void;
|
|
376
|
+
endPaneResize(): void;
|
|
377
|
+
protected onSplitterDown(event: PointerEvent): void;
|
|
378
|
+
protected onSplitterMove(event: PointerEvent): void;
|
|
379
|
+
protected onSplitterUp(): void;
|
|
380
|
+
protected onSplitterKeydown(event: KeyboardEvent): void;
|
|
381
|
+
private commit;
|
|
382
|
+
private remember;
|
|
383
|
+
private downloadLayout;
|
|
384
|
+
private publish;
|
|
385
|
+
private placeMessage;
|
|
386
|
+
private messageForMove;
|
|
387
|
+
private refreshDropHints;
|
|
388
|
+
/** True when the pointer is above the docked column (or in the top band when nothing sits above it). */
|
|
389
|
+
private inFullWidthDropZone;
|
|
390
|
+
/** Top edge of the side-by-side region (right column). Null when nothing is docked right. */
|
|
391
|
+
private splitBodyTop;
|
|
392
|
+
/** Full-width rows that sit above the split, used for drop ordering in that band. */
|
|
393
|
+
private idsAboveSplit;
|
|
394
|
+
/** Maps a visual index among banner/full-width rows onto the body column order. */
|
|
395
|
+
private bodyIndexForFullWidthDrop;
|
|
396
|
+
private fullWidthIndicator;
|
|
397
|
+
private nextVisualId;
|
|
398
|
+
private idsInVisualColumn;
|
|
399
|
+
private indicatorBox;
|
|
400
|
+
private paneElement;
|
|
401
|
+
private gridElement;
|
|
402
|
+
private clearDrag;
|
|
403
|
+
private clearInteraction;
|
|
404
|
+
private isPrimaryPointer;
|
|
405
|
+
private capture;
|
|
406
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PosWorkspace, never>;
|
|
407
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosWorkspace, "pos-workspace", never, { "editing": { "alias": "editing"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; }, { "layoutChange": "layoutChange"; "layoutExport": "layoutExport"; }, ["paneRefs"], ["*"], true, never>;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
declare class PosWorkspacePane {
|
|
411
|
+
protected readonly workspace: PosWorkspaceController;
|
|
412
|
+
readonly paneId: _angular_core.InputSignal<PosWorkspacePaneId>;
|
|
413
|
+
/** Draws the unassigned-slot message. The POS replaces this by projecting the same pane id. */
|
|
414
|
+
readonly placeholder: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
415
|
+
protected readonly place: _angular_core.Signal<PosWorkspaceGridPane | undefined>;
|
|
416
|
+
protected readonly dragging: _angular_core.Signal<boolean>;
|
|
417
|
+
protected readonly columnStyle: _angular_core.Signal<1 | 2 | "1 / -1" | null>;
|
|
418
|
+
protected readonly rowStyle: _angular_core.Signal<string | null>;
|
|
419
|
+
protected readonly showResize: _angular_core.Signal<boolean>;
|
|
420
|
+
protected readonly concealed: _angular_core.Signal<boolean>;
|
|
421
|
+
protected readonly settingsOpen: _angular_core.Signal<boolean>;
|
|
422
|
+
protected readonly fullWidth: _angular_core.Signal<boolean>;
|
|
423
|
+
protected readonly shown: _angular_core.Signal<boolean>;
|
|
424
|
+
protected readonly flexible: _angular_core.Signal<boolean>;
|
|
425
|
+
protected readonly label: _angular_core.Signal<string>;
|
|
426
|
+
protected readonly menuAbove: _angular_core.Signal<boolean>;
|
|
427
|
+
protected readonly handleLabel: _angular_core.Signal<string>;
|
|
428
|
+
protected readonly resizeLabel: _angular_core.Signal<string>;
|
|
429
|
+
protected readonly settingsLabel: _angular_core.Signal<string>;
|
|
430
|
+
protected readonly closeMenuLabel: _angular_core.Signal<string>;
|
|
431
|
+
protected readonly removeLabel: _angular_core.Signal<string>;
|
|
432
|
+
protected onDragPointerDown(event: PointerEvent): void;
|
|
433
|
+
protected onDragPointerMove(event: PointerEvent): void;
|
|
434
|
+
protected onDragPointerUp(event: PointerEvent): void;
|
|
435
|
+
protected onHandleKeydown(event: KeyboardEvent): void;
|
|
436
|
+
protected toggleSettings(event: Event): void;
|
|
437
|
+
protected closeSettings(event: Event): void;
|
|
438
|
+
protected onSettingsKeydown(event: KeyboardEvent): void;
|
|
439
|
+
protected onVisible(event: Event): void;
|
|
440
|
+
protected onFlexible(event: Event): void;
|
|
441
|
+
protected onFullWidth(event: Event): void;
|
|
442
|
+
protected onRemove(event: Event): void;
|
|
443
|
+
protected onResizePointerDown(event: PointerEvent): void;
|
|
444
|
+
protected onResizePointerMove(event: PointerEvent): void;
|
|
445
|
+
protected onResizePointerUp(): void;
|
|
446
|
+
protected onResizeKeydown(event: KeyboardEvent): void;
|
|
447
|
+
private capture;
|
|
448
|
+
private isMoveKey;
|
|
449
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PosWorkspacePane, never>;
|
|
450
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosWorkspacePane, "pos-workspace-pane", never, { "paneId": { "alias": "paneId"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
451
|
+
}
|
|
452
|
+
|
|
213
453
|
type PosTenderIntent = {
|
|
214
454
|
readonly type: 'tender.cash';
|
|
215
455
|
readonly amount: number;
|
|
@@ -386,5 +626,5 @@ declare class PosTokens {
|
|
|
386
626
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PosTokens, "pos-tokens", never, {}, {}, never, never, true, never>;
|
|
387
627
|
}
|
|
388
628
|
|
|
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 };
|
|
629
|
+
export { POS_WORKSPACE_BASKET_RIGHT_LAYOUT, POS_WORKSPACE_DEFAULT_LAYOUT, POS_WORKSPACE_EMPTY_LAYOUT, POS_WORKSPACE_HEADER_SPAN_LAYOUT, PosBasket, PosHeader, PosItemEntry, PosLogin, PosReceipt, PosTender, PosTokens, PosTransactionActionBar, PosWorkspace, PosWorkspacePane, parseWorkspaceLayout, workspaceLayoutJson };
|
|
630
|
+
export type { PosBasketIntent, PosBasketLine, PosBasketTotals, PosBasketVat, PosHeaderIntent, PosItemEntryIntent, PosLoginIntent, PosLoginSessionState, PosLoginSessionStatus, PosReceiptDocument, PosReceiptIntent, PosReceiptLine, PosReceiptPayment, PosReceiptTotals, PosReceiptVat, PosTenderIntent, PosTokenSwatch, PosTransactionActionBarIntent, PosWorkspaceColumn, PosWorkspaceLayout, PosWorkspacePaneId, PosWorkspacePanePlacement, PosWorkspaceSpan };
|