@retalia/pos-components 0.0.11 → 0.0.13
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 +410 -442
- package/fesm2022/retalia-pos-components.mjs +23 -20
- package/fesm2022/retalia-pos-components.mjs.map +1 -1
- package/package.json +1 -5
- package/fesm2022/retalia-pos-components-services.mjs +0 -203
- package/fesm2022/retalia-pos-components-services.mjs.map +0 -1
- package/types/retalia-pos-components-services.d.ts +0 -179
|
@@ -861,11 +861,9 @@ function setPaneFullWidth(layout, id, enabled) {
|
|
|
861
861
|
return pane;
|
|
862
862
|
}
|
|
863
863
|
if (!enabled) {
|
|
864
|
-
|
|
865
|
-
return rest;
|
|
864
|
+
return copyPaneWithout(pane, 'span', 'fullWidth');
|
|
866
865
|
}
|
|
867
|
-
|
|
868
|
-
return { ...rest, fullWidth: true };
|
|
866
|
+
return { ...copyPaneWithout(pane, 'span'), fullWidth: true };
|
|
869
867
|
}),
|
|
870
868
|
};
|
|
871
869
|
}
|
|
@@ -892,8 +890,7 @@ function setPaneVisible(layout, id, visible) {
|
|
|
892
890
|
return pane;
|
|
893
891
|
}
|
|
894
892
|
if (visible) {
|
|
895
|
-
|
|
896
|
-
return shown;
|
|
893
|
+
return copyPaneWithout(pane, 'visible');
|
|
897
894
|
}
|
|
898
895
|
return { ...pane, visible: false };
|
|
899
896
|
}),
|
|
@@ -939,19 +936,25 @@ function placedPanes(layout, present) {
|
|
|
939
936
|
}
|
|
940
937
|
return panes;
|
|
941
938
|
}
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
const
|
|
945
|
-
|
|
946
|
-
|
|
939
|
+
/** Rebuilds a pane without the named optional flags so they stay absent from the layout object. */
|
|
940
|
+
function copyPaneWithout(pane, ...drop) {
|
|
941
|
+
const omit = new Set(drop);
|
|
942
|
+
let next = {
|
|
943
|
+
id: pane.id,
|
|
944
|
+
column: pane.column,
|
|
945
|
+
order: pane.order,
|
|
946
|
+
weight: pane.weight,
|
|
947
|
+
};
|
|
948
|
+
if (!omit.has('fullWidth') && pane.fullWidth === true) {
|
|
949
|
+
next = { ...next, fullWidth: true };
|
|
947
950
|
}
|
|
948
|
-
if (
|
|
949
|
-
|
|
951
|
+
if (!omit.has('span') && pane.span != null) {
|
|
952
|
+
next = { ...next, span: pane.span };
|
|
950
953
|
}
|
|
951
|
-
if (
|
|
952
|
-
|
|
954
|
+
if (!omit.has('visible') && pane.visible === false) {
|
|
955
|
+
next = { ...next, visible: false };
|
|
953
956
|
}
|
|
954
|
-
return
|
|
957
|
+
return next;
|
|
955
958
|
}
|
|
956
959
|
/** On a narrow screen, keep the header at the top and the action bar at the bottom. */
|
|
957
960
|
function compactStack(left, right) {
|
|
@@ -2062,7 +2065,7 @@ class PosWorkspace {
|
|
|
2062
2065
|
}
|
|
2063
2066
|
}
|
|
2064
2067
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: PosWorkspace, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2065
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: PosWorkspace, isStandalone: true, selector: "pos-workspace", inputs: { editing: { classPropertyName: "editing", publicName: "editing", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { layoutChange: "layoutChange", layoutExport: "layoutExport" }, host: { properties: { "class.pos-workspace--editing": "editing()", "class.pos-workspace--dragging": "draggingPane() !== null" }, classAttribute: "pos-workspace" }, providers: [{ provide: POS_WORKSPACE, useExisting: forwardRef(() => PosWorkspace) }], queries: [{ propertyName: "paneRefs", predicate: PosWorkspacePane, isSignal: true }], viewQueries: [{ propertyName: "frameRef", first: true, predicate: ["frame"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (editing()) {\r\n <div class=\"pos-workspace__tools\">\r\n <div class=\"pos-workspace__palette\">\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-toggle\"\r\n aria-haspopup=\"menu\"\r\n [attr.aria-expanded]=\"paletteOpen()\"\r\n (click)=\"togglePalette()\"\r\n >\r\n Components\r\n </button>\r\n @if (paletteOpen()) {\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-backdrop\"\r\n tabindex=\"-1\"\r\n aria-label=\"Close components\"\r\n (click)=\"closePalette()\"\r\n ></button>\r\n <div\r\n class=\"pos-workspace__palette-menu\"\r\n [class.pos-workspace__palette-menu--lifted]=\"paletteMenuLifted()\"\r\n role=\"menu\"\r\n aria-label=\"Components\"\r\n (keydown)=\"onPaletteMenuKeydown($event)\"\r\n >\r\n @for (id of palette(); track id) {\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-item\"\r\n role=\"menuitem\"\r\n [attr.data-palette]=\"id\"\r\n (pointerdown)=\"onPalettePointerDown(id, $event)\"\r\n (pointermove)=\"onPalettePointerMove($event)\"\r\n (pointerup)=\"onPalettePointerUp($event)\"\r\n (pointercancel)=\"onPalettePointerCancel()\"\r\n (click)=\"onPaletteClick(id)\"\r\n >\r\n {{ paneLabel(id) }}\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-item\"\r\n role=\"menuitem\"\r\n data-palette=\"empty\"\r\n (pointerdown)=\"onPalettePointerDown('empty', $event)\"\r\n (pointermove)=\"onPalettePointerMove($event)\"\r\n (pointerup)=\"onPalettePointerUp($event)\"\r\n (pointercancel)=\"onPalettePointerCancel()\"\r\n (click)=\"onPaletteClick('empty')\"\r\n >\r\n Custom container\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"pos-workspace__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__undo\"\r\n [disabled]=\"!canUndo()\"\r\n (click)=\"undoLayout()\"\r\n >\r\n Undo\r\n </button>\r\n <button type=\"button\" class=\"pos-workspace__new\" (click)=\"resetLayout()\">New</button>\r\n <button type=\"button\" class=\"pos-workspace__default\" (click)=\"applyDefaultLayout()\">\r\n Default layout\r\n </button>\r\n <button type=\"button\" class=\"pos-workspace__import\" (click)=\"layoutFile.click()\">\r\n Import layout\r\n </button>\r\n <button type=\"button\" class=\"pos-workspace__export\" (click)=\"exportLayout()\">\r\n Export layout\r\n </button>\r\n <input\r\n #layoutFile\r\n class=\"pos-workspace__file\"\r\n type=\"file\"\r\n accept=\"application/json,.json\"\r\n aria-label=\"Import layout file\"\r\n (change)=\"importLayoutFile($event)\"\r\n />\r\n </div>\r\n </div>\r\n}\r\n\r\n<div\r\n #frame\r\n class=\"pos-workspace__grid\"\r\n [style.grid-template-columns]=\"grid().columns\"\r\n [style.grid-template-rows]=\"grid().rows\"\r\n>\r\n <ng-content />\r\n @for (slot of emptySlots(); track slot) {\r\n <pos-workspace-pane [paneId]=\"slot\" [placeholder]=\"true\" />\r\n }\r\n @if (showSplitter()) {\r\n <div\r\n class=\"pos-workspace__splitter\"\r\n role=\"separator\"\r\n aria-orientation=\"vertical\"\r\n aria-label=\"Resize columns\"\r\n aria-valuemin=\"28\"\r\n aria-valuemax=\"72\"\r\n [attr.aria-valuenow]=\"ratioPercent()\"\r\n tabindex=\"0\"\r\n [style.grid-row]=\"splitterRow()\"\r\n [style.left]=\"splitterLeft()\"\r\n (pointerdown)=\"onSplitterDown($event)\"\r\n (pointermove)=\"onSplitterMove($event)\"\r\n (pointerup)=\"onSplitterUp()\"\r\n (pointercancel)=\"onSplitterUp()\"\r\n (keydown)=\"onSplitterKeydown($event)\"\r\n ></div>\r\n }\r\n</div>\r\n\r\n@for (hint of dropHints(); track hint.kind) {\r\n <div\r\n class=\"pos-workspace__hint\"\r\n [class.pos-workspace__hint--top]=\"hint.kind === 'top'\"\r\n [class.pos-workspace__hint--bottom]=\"hint.kind === 'bottom'\"\r\n [class.pos-workspace__hint--dock]=\"hint.kind === 'dock'\"\r\n [style.top.px]=\"hint.top\"\r\n [style.left.px]=\"hint.left\"\r\n [style.width.px]=\"hint.width\"\r\n [style.height.px]=\"hint.height\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n}\r\n\r\n@if (dropIndicator(); as indicator) {\r\n <div\r\n class=\"pos-workspace__drop\"\r\n [class.pos-workspace__drop--line]=\"indicator.line\"\r\n [style.top.px]=\"indicator.top\"\r\n [style.left.px]=\"indicator.left\"\r\n [style.width.px]=\"indicator.width\"\r\n [style.height.px]=\"indicator.height\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n}\r\n\r\n<div class=\"pos-workspace__status\" aria-live=\"polite\">{{ status() }}</div>\r\n", styles: [":host{display:flex;position:relative;flex-direction:column;box-sizing:border-box;height:100%;min-height:0;color:var(--pos-color-text);font-family:var(--pos-font-family)}.pos-workspace__tools{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--pos-space-sm);padding:var(--pos-space-sm) var(--pos-space-lg) 0}.pos-workspace__palette{position:relative}.pos-workspace__palette-toggle{min-height:var(--pos-button-min-height);padding:0 var(--pos-space-lg);border:1px dashed var(--pos-color-primary);border-radius:var(--pos-radius-md);background:var(--pos-color-surface);color:var(--pos-color-text);font:inherit;font-size:var(--pos-font-size-md);cursor:pointer}.pos-workspace__palette-backdrop{position:fixed;z-index:5;inset:0;padding:0;border:0;background:transparent}.pos-workspace__palette-menu{position:absolute;z-index:6;top:calc(100% + var(--pos-space-xs));left:0;display:flex;flex-direction:column;min-width:14rem;max-height:min(20rem,70vh);overflow:auto;padding:var(--pos-space-xs);border:1px solid var(--pos-color-border);border-radius:var(--pos-radius-md);background:var(--pos-color-surface)}.pos-workspace__palette-menu--lifted{visibility:hidden}.pos-workspace__palette-item{min-height:var(--pos-button-min-height);padding:0 var(--pos-space-md);border:0;border-radius:var(--pos-radius-sm);background:transparent;color:var(--pos-color-text);font:inherit;font-size:var(--pos-font-size-md);text-align:left;cursor:grab;touch-action:none}.pos-workspace__palette-item:hover{background:color-mix(in srgb,var(--pos-color-primary) 12%,var(--pos-color-surface))}.pos-workspace__palette-toggle:focus-visible,.pos-workspace__palette-item:focus-visible{outline:2px solid var(--pos-color-ink);outline-offset:2px}.pos-workspace__actions{display:flex;flex-wrap:wrap;gap:var(--pos-space-sm)}.pos-workspace__undo,.pos-workspace__new,.pos-workspace__default,.pos-workspace__export,.pos-workspace__import{min-height:var(--pos-button-min-height);padding:0 var(--pos-space-lg);border:1px solid var(--pos-color-key-border);border-radius:var(--pos-radius-md);background:var(--pos-color-key);color:var(--pos-color-text);font:inherit;font-size:var(--pos-font-size-md);cursor:pointer}.pos-workspace__file{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.pos-workspace__undo:disabled{background:var(--pos-color-disabled);color:var(--pos-color-on-disabled);cursor:default}.pos-workspace__undo:focus-visible,.pos-workspace__new:focus-visible,.pos-workspace__default:focus-visible,.pos-workspace__export:focus-visible,.pos-workspace__import:focus-visible{outline:2px solid var(--pos-color-ink);outline-offset:2px}:host(.pos-workspace--dragging){cursor:grabbing;-webkit-user-select:none;user-select:none}.pos-workspace__grid{display:grid;position:relative;flex:1 1 auto;box-sizing:border-box;min-height:0;padding:var(--pos-space-lg);gap:var(--pos-space-md)}.pos-workspace__hint{position:absolute;z-index:2;box-sizing:border-box;border:2px dashed color-mix(in srgb,var(--pos-color-primary) 55%,transparent);border-radius:var(--pos-radius-md);background:color-mix(in srgb,var(--pos-color-primary) 8%,transparent);pointer-events:none}.pos-workspace__drop{position:absolute;z-index:3;box-sizing:border-box;border:2px dashed var(--pos-color-primary);border-radius:var(--pos-radius-md);background:color-mix(in srgb,var(--pos-color-primary) 24%,transparent);pointer-events:none}.pos-workspace__drop--line{border:0;border-radius:var(--pos-radius-pill);background:var(--pos-color-primary)}.pos-workspace__splitter{position:absolute;z-index:4;top:0;bottom:0;grid-column:1/-1;width:var(--pos-space-xl);padding:0;border:0;background:transparent;cursor:ew-resize;touch-action:none;transform:translate(-50%)}.pos-workspace__splitter:before{content:\"\";position:absolute;top:0;bottom:0;left:50%;width:var(--pos-space-xs);border-radius:var(--pos-radius-pill);background:var(--pos-color-primary);transform:translate(-50%)}.pos-workspace__splitter:focus-visible{outline:2px solid var(--pos-color-ink);outline-offset:2px}.pos-workspace__status{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "component", type: PosWorkspacePane, selector: "pos-workspace-pane", inputs: ["paneId", "placeholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2068
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: PosWorkspace, isStandalone: true, selector: "pos-workspace", inputs: { editing: { classPropertyName: "editing", publicName: "editing", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { layoutChange: "layoutChange", layoutExport: "layoutExport" }, host: { properties: { "class.pos-workspace--editing": "editing()", "class.pos-workspace--dragging": "draggingPane() !== null" }, classAttribute: "pos-workspace" }, providers: [{ provide: POS_WORKSPACE, useExisting: forwardRef(() => PosWorkspace) }], queries: [{ propertyName: "paneRefs", predicate: PosWorkspacePane, isSignal: true }], viewQueries: [{ propertyName: "frameRef", first: true, predicate: ["frame"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (editing()) {\r\n <div class=\"pos-workspace__tools\">\r\n <div class=\"pos-workspace__palette\">\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-toggle\"\r\n aria-haspopup=\"menu\"\r\n [attr.aria-expanded]=\"paletteOpen()\"\r\n (click)=\"togglePalette()\"\r\n >\r\n Components\r\n </button>\r\n @if (paletteOpen()) {\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-backdrop\"\r\n tabindex=\"-1\"\r\n aria-label=\"Close components\"\r\n (click)=\"closePalette()\"\r\n ></button>\r\n <div\r\n class=\"pos-workspace__palette-menu\"\r\n [class.pos-workspace__palette-menu--lifted]=\"paletteMenuLifted()\"\r\n role=\"menu\"\r\n tabindex=\"-1\"\r\n aria-label=\"Components\"\r\n (keydown)=\"onPaletteMenuKeydown($event)\"\r\n >\r\n @for (id of palette(); track id) {\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-item\"\r\n role=\"menuitem\"\r\n [attr.data-palette]=\"id\"\r\n (pointerdown)=\"onPalettePointerDown(id, $event)\"\r\n (pointermove)=\"onPalettePointerMove($event)\"\r\n (pointerup)=\"onPalettePointerUp($event)\"\r\n (pointercancel)=\"onPalettePointerCancel()\"\r\n (click)=\"onPaletteClick(id)\"\r\n >\r\n {{ paneLabel(id) }}\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-item\"\r\n role=\"menuitem\"\r\n data-palette=\"empty\"\r\n (pointerdown)=\"onPalettePointerDown('empty', $event)\"\r\n (pointermove)=\"onPalettePointerMove($event)\"\r\n (pointerup)=\"onPalettePointerUp($event)\"\r\n (pointercancel)=\"onPalettePointerCancel()\"\r\n (click)=\"onPaletteClick('empty')\"\r\n >\r\n Custom container\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"pos-workspace__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__undo\"\r\n [disabled]=\"!canUndo()\"\r\n (click)=\"undoLayout()\"\r\n >\r\n Undo\r\n </button>\r\n <button type=\"button\" class=\"pos-workspace__new\" (click)=\"resetLayout()\">New</button>\r\n <button type=\"button\" class=\"pos-workspace__default\" (click)=\"applyDefaultLayout()\">\r\n Default layout\r\n </button>\r\n <button type=\"button\" class=\"pos-workspace__import\" (click)=\"layoutFile.click()\">\r\n Import layout\r\n </button>\r\n <button type=\"button\" class=\"pos-workspace__export\" (click)=\"exportLayout()\">\r\n Export layout\r\n </button>\r\n <input\r\n #layoutFile\r\n class=\"pos-workspace__file\"\r\n type=\"file\"\r\n accept=\"application/json,.json\"\r\n aria-label=\"Import layout file\"\r\n (change)=\"importLayoutFile($event)\"\r\n />\r\n </div>\r\n </div>\r\n}\r\n\r\n<div\r\n #frame\r\n class=\"pos-workspace__grid\"\r\n [style.grid-template-columns]=\"grid().columns\"\r\n [style.grid-template-rows]=\"grid().rows\"\r\n>\r\n <ng-content />\r\n @for (slot of emptySlots(); track slot) {\r\n <pos-workspace-pane [paneId]=\"slot\" [placeholder]=\"true\" />\r\n }\r\n @if (showSplitter()) {\r\n <div\r\n class=\"pos-workspace__splitter\"\r\n role=\"separator\"\r\n aria-orientation=\"vertical\"\r\n aria-label=\"Resize columns\"\r\n aria-valuemin=\"28\"\r\n aria-valuemax=\"72\"\r\n [attr.aria-valuenow]=\"ratioPercent()\"\r\n tabindex=\"0\"\r\n [style.grid-row]=\"splitterRow()\"\r\n [style.left]=\"splitterLeft()\"\r\n (pointerdown)=\"onSplitterDown($event)\"\r\n (pointermove)=\"onSplitterMove($event)\"\r\n (pointerup)=\"onSplitterUp()\"\r\n (pointercancel)=\"onSplitterUp()\"\r\n (keydown)=\"onSplitterKeydown($event)\"\r\n ></div>\r\n }\r\n</div>\r\n\r\n@for (hint of dropHints(); track hint.kind) {\r\n <div\r\n class=\"pos-workspace__hint\"\r\n [class.pos-workspace__hint--top]=\"hint.kind === 'top'\"\r\n [class.pos-workspace__hint--bottom]=\"hint.kind === 'bottom'\"\r\n [class.pos-workspace__hint--dock]=\"hint.kind === 'dock'\"\r\n [style.top.px]=\"hint.top\"\r\n [style.left.px]=\"hint.left\"\r\n [style.width.px]=\"hint.width\"\r\n [style.height.px]=\"hint.height\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n}\r\n\r\n@if (dropIndicator(); as indicator) {\r\n <div\r\n class=\"pos-workspace__drop\"\r\n [class.pos-workspace__drop--line]=\"indicator.line\"\r\n [style.top.px]=\"indicator.top\"\r\n [style.left.px]=\"indicator.left\"\r\n [style.width.px]=\"indicator.width\"\r\n [style.height.px]=\"indicator.height\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n}\r\n\r\n<div class=\"pos-workspace__status\" aria-live=\"polite\">{{ status() }}</div>\r\n", styles: [":host{display:flex;position:relative;flex-direction:column;box-sizing:border-box;height:100%;min-height:0;color:var(--pos-color-text);font-family:var(--pos-font-family)}.pos-workspace__tools{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--pos-space-sm);padding:var(--pos-space-sm) var(--pos-space-lg) 0}.pos-workspace__palette{position:relative}.pos-workspace__palette-toggle{min-height:var(--pos-button-min-height);padding:0 var(--pos-space-lg);border:1px dashed var(--pos-color-primary);border-radius:var(--pos-radius-md);background:var(--pos-color-surface);color:var(--pos-color-text);font:inherit;font-size:var(--pos-font-size-md);cursor:pointer}.pos-workspace__palette-backdrop{position:fixed;z-index:5;inset:0;padding:0;border:0;background:transparent}.pos-workspace__palette-menu{position:absolute;z-index:6;top:calc(100% + var(--pos-space-xs));left:0;display:flex;flex-direction:column;min-width:14rem;max-height:min(20rem,70vh);overflow:auto;padding:var(--pos-space-xs);border:1px solid var(--pos-color-border);border-radius:var(--pos-radius-md);background:var(--pos-color-surface)}.pos-workspace__palette-menu--lifted{visibility:hidden}.pos-workspace__palette-item{min-height:var(--pos-button-min-height);padding:0 var(--pos-space-md);border:0;border-radius:var(--pos-radius-sm);background:transparent;color:var(--pos-color-text);font:inherit;font-size:var(--pos-font-size-md);text-align:left;cursor:grab;touch-action:none}.pos-workspace__palette-item:hover{background:color-mix(in srgb,var(--pos-color-primary) 12%,var(--pos-color-surface))}.pos-workspace__palette-toggle:focus-visible,.pos-workspace__palette-item:focus-visible{outline:2px solid var(--pos-color-ink);outline-offset:2px}.pos-workspace__actions{display:flex;flex-wrap:wrap;gap:var(--pos-space-sm)}.pos-workspace__undo,.pos-workspace__new,.pos-workspace__default,.pos-workspace__export,.pos-workspace__import{min-height:var(--pos-button-min-height);padding:0 var(--pos-space-lg);border:1px solid var(--pos-color-key-border);border-radius:var(--pos-radius-md);background:var(--pos-color-key);color:var(--pos-color-text);font:inherit;font-size:var(--pos-font-size-md);cursor:pointer}.pos-workspace__file{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.pos-workspace__undo:disabled{background:var(--pos-color-disabled);color:var(--pos-color-on-disabled);cursor:default}.pos-workspace__undo:focus-visible,.pos-workspace__new:focus-visible,.pos-workspace__default:focus-visible,.pos-workspace__export:focus-visible,.pos-workspace__import:focus-visible{outline:2px solid var(--pos-color-ink);outline-offset:2px}:host(.pos-workspace--dragging){cursor:grabbing;-webkit-user-select:none;user-select:none}.pos-workspace__grid{display:grid;position:relative;flex:1 1 auto;box-sizing:border-box;min-height:0;padding:var(--pos-space-lg);gap:var(--pos-space-md)}.pos-workspace__hint{position:absolute;z-index:2;box-sizing:border-box;border:2px dashed color-mix(in srgb,var(--pos-color-primary) 55%,transparent);border-radius:var(--pos-radius-md);background:color-mix(in srgb,var(--pos-color-primary) 8%,transparent);pointer-events:none}.pos-workspace__drop{position:absolute;z-index:3;box-sizing:border-box;border:2px dashed var(--pos-color-primary);border-radius:var(--pos-radius-md);background:color-mix(in srgb,var(--pos-color-primary) 24%,transparent);pointer-events:none}.pos-workspace__drop--line{border:0;border-radius:var(--pos-radius-pill);background:var(--pos-color-primary)}.pos-workspace__splitter{position:absolute;z-index:4;top:0;bottom:0;grid-column:1/-1;width:var(--pos-space-xl);padding:0;border:0;background:transparent;cursor:ew-resize;touch-action:none;transform:translate(-50%)}.pos-workspace__splitter:before{content:\"\";position:absolute;top:0;bottom:0;left:50%;width:var(--pos-space-xs);border-radius:var(--pos-radius-pill);background:var(--pos-color-primary);transform:translate(-50%)}.pos-workspace__splitter:focus-visible{outline:2px solid var(--pos-color-ink);outline-offset:2px}.pos-workspace__status{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "component", type: PosWorkspacePane, selector: "pos-workspace-pane", inputs: ["paneId", "placeholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2066
2069
|
}
|
|
2067
2070
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: PosWorkspace, decorators: [{
|
|
2068
2071
|
type: Component,
|
|
@@ -2070,7 +2073,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
|
|
|
2070
2073
|
class: 'pos-workspace',
|
|
2071
2074
|
'[class.pos-workspace--editing]': 'editing()',
|
|
2072
2075
|
'[class.pos-workspace--dragging]': 'draggingPane() !== null',
|
|
2073
|
-
}, template: "@if (editing()) {\r\n <div class=\"pos-workspace__tools\">\r\n <div class=\"pos-workspace__palette\">\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-toggle\"\r\n aria-haspopup=\"menu\"\r\n [attr.aria-expanded]=\"paletteOpen()\"\r\n (click)=\"togglePalette()\"\r\n >\r\n Components\r\n </button>\r\n @if (paletteOpen()) {\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-backdrop\"\r\n tabindex=\"-1\"\r\n aria-label=\"Close components\"\r\n (click)=\"closePalette()\"\r\n ></button>\r\n <div\r\n class=\"pos-workspace__palette-menu\"\r\n [class.pos-workspace__palette-menu--lifted]=\"paletteMenuLifted()\"\r\n role=\"menu\"\r\n aria-label=\"Components\"\r\n (keydown)=\"onPaletteMenuKeydown($event)\"\r\n >\r\n @for (id of palette(); track id) {\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-item\"\r\n role=\"menuitem\"\r\n [attr.data-palette]=\"id\"\r\n (pointerdown)=\"onPalettePointerDown(id, $event)\"\r\n (pointermove)=\"onPalettePointerMove($event)\"\r\n (pointerup)=\"onPalettePointerUp($event)\"\r\n (pointercancel)=\"onPalettePointerCancel()\"\r\n (click)=\"onPaletteClick(id)\"\r\n >\r\n {{ paneLabel(id) }}\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-item\"\r\n role=\"menuitem\"\r\n data-palette=\"empty\"\r\n (pointerdown)=\"onPalettePointerDown('empty', $event)\"\r\n (pointermove)=\"onPalettePointerMove($event)\"\r\n (pointerup)=\"onPalettePointerUp($event)\"\r\n (pointercancel)=\"onPalettePointerCancel()\"\r\n (click)=\"onPaletteClick('empty')\"\r\n >\r\n Custom container\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"pos-workspace__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__undo\"\r\n [disabled]=\"!canUndo()\"\r\n (click)=\"undoLayout()\"\r\n >\r\n Undo\r\n </button>\r\n <button type=\"button\" class=\"pos-workspace__new\" (click)=\"resetLayout()\">New</button>\r\n <button type=\"button\" class=\"pos-workspace__default\" (click)=\"applyDefaultLayout()\">\r\n Default layout\r\n </button>\r\n <button type=\"button\" class=\"pos-workspace__import\" (click)=\"layoutFile.click()\">\r\n Import layout\r\n </button>\r\n <button type=\"button\" class=\"pos-workspace__export\" (click)=\"exportLayout()\">\r\n Export layout\r\n </button>\r\n <input\r\n #layoutFile\r\n class=\"pos-workspace__file\"\r\n type=\"file\"\r\n accept=\"application/json,.json\"\r\n aria-label=\"Import layout file\"\r\n (change)=\"importLayoutFile($event)\"\r\n />\r\n </div>\r\n </div>\r\n}\r\n\r\n<div\r\n #frame\r\n class=\"pos-workspace__grid\"\r\n [style.grid-template-columns]=\"grid().columns\"\r\n [style.grid-template-rows]=\"grid().rows\"\r\n>\r\n <ng-content />\r\n @for (slot of emptySlots(); track slot) {\r\n <pos-workspace-pane [paneId]=\"slot\" [placeholder]=\"true\" />\r\n }\r\n @if (showSplitter()) {\r\n <div\r\n class=\"pos-workspace__splitter\"\r\n role=\"separator\"\r\n aria-orientation=\"vertical\"\r\n aria-label=\"Resize columns\"\r\n aria-valuemin=\"28\"\r\n aria-valuemax=\"72\"\r\n [attr.aria-valuenow]=\"ratioPercent()\"\r\n tabindex=\"0\"\r\n [style.grid-row]=\"splitterRow()\"\r\n [style.left]=\"splitterLeft()\"\r\n (pointerdown)=\"onSplitterDown($event)\"\r\n (pointermove)=\"onSplitterMove($event)\"\r\n (pointerup)=\"onSplitterUp()\"\r\n (pointercancel)=\"onSplitterUp()\"\r\n (keydown)=\"onSplitterKeydown($event)\"\r\n ></div>\r\n }\r\n</div>\r\n\r\n@for (hint of dropHints(); track hint.kind) {\r\n <div\r\n class=\"pos-workspace__hint\"\r\n [class.pos-workspace__hint--top]=\"hint.kind === 'top'\"\r\n [class.pos-workspace__hint--bottom]=\"hint.kind === 'bottom'\"\r\n [class.pos-workspace__hint--dock]=\"hint.kind === 'dock'\"\r\n [style.top.px]=\"hint.top\"\r\n [style.left.px]=\"hint.left\"\r\n [style.width.px]=\"hint.width\"\r\n [style.height.px]=\"hint.height\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n}\r\n\r\n@if (dropIndicator(); as indicator) {\r\n <div\r\n class=\"pos-workspace__drop\"\r\n [class.pos-workspace__drop--line]=\"indicator.line\"\r\n [style.top.px]=\"indicator.top\"\r\n [style.left.px]=\"indicator.left\"\r\n [style.width.px]=\"indicator.width\"\r\n [style.height.px]=\"indicator.height\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n}\r\n\r\n<div class=\"pos-workspace__status\" aria-live=\"polite\">{{ status() }}</div>\r\n", styles: [":host{display:flex;position:relative;flex-direction:column;box-sizing:border-box;height:100%;min-height:0;color:var(--pos-color-text);font-family:var(--pos-font-family)}.pos-workspace__tools{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--pos-space-sm);padding:var(--pos-space-sm) var(--pos-space-lg) 0}.pos-workspace__palette{position:relative}.pos-workspace__palette-toggle{min-height:var(--pos-button-min-height);padding:0 var(--pos-space-lg);border:1px dashed var(--pos-color-primary);border-radius:var(--pos-radius-md);background:var(--pos-color-surface);color:var(--pos-color-text);font:inherit;font-size:var(--pos-font-size-md);cursor:pointer}.pos-workspace__palette-backdrop{position:fixed;z-index:5;inset:0;padding:0;border:0;background:transparent}.pos-workspace__palette-menu{position:absolute;z-index:6;top:calc(100% + var(--pos-space-xs));left:0;display:flex;flex-direction:column;min-width:14rem;max-height:min(20rem,70vh);overflow:auto;padding:var(--pos-space-xs);border:1px solid var(--pos-color-border);border-radius:var(--pos-radius-md);background:var(--pos-color-surface)}.pos-workspace__palette-menu--lifted{visibility:hidden}.pos-workspace__palette-item{min-height:var(--pos-button-min-height);padding:0 var(--pos-space-md);border:0;border-radius:var(--pos-radius-sm);background:transparent;color:var(--pos-color-text);font:inherit;font-size:var(--pos-font-size-md);text-align:left;cursor:grab;touch-action:none}.pos-workspace__palette-item:hover{background:color-mix(in srgb,var(--pos-color-primary) 12%,var(--pos-color-surface))}.pos-workspace__palette-toggle:focus-visible,.pos-workspace__palette-item:focus-visible{outline:2px solid var(--pos-color-ink);outline-offset:2px}.pos-workspace__actions{display:flex;flex-wrap:wrap;gap:var(--pos-space-sm)}.pos-workspace__undo,.pos-workspace__new,.pos-workspace__default,.pos-workspace__export,.pos-workspace__import{min-height:var(--pos-button-min-height);padding:0 var(--pos-space-lg);border:1px solid var(--pos-color-key-border);border-radius:var(--pos-radius-md);background:var(--pos-color-key);color:var(--pos-color-text);font:inherit;font-size:var(--pos-font-size-md);cursor:pointer}.pos-workspace__file{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.pos-workspace__undo:disabled{background:var(--pos-color-disabled);color:var(--pos-color-on-disabled);cursor:default}.pos-workspace__undo:focus-visible,.pos-workspace__new:focus-visible,.pos-workspace__default:focus-visible,.pos-workspace__export:focus-visible,.pos-workspace__import:focus-visible{outline:2px solid var(--pos-color-ink);outline-offset:2px}:host(.pos-workspace--dragging){cursor:grabbing;-webkit-user-select:none;user-select:none}.pos-workspace__grid{display:grid;position:relative;flex:1 1 auto;box-sizing:border-box;min-height:0;padding:var(--pos-space-lg);gap:var(--pos-space-md)}.pos-workspace__hint{position:absolute;z-index:2;box-sizing:border-box;border:2px dashed color-mix(in srgb,var(--pos-color-primary) 55%,transparent);border-radius:var(--pos-radius-md);background:color-mix(in srgb,var(--pos-color-primary) 8%,transparent);pointer-events:none}.pos-workspace__drop{position:absolute;z-index:3;box-sizing:border-box;border:2px dashed var(--pos-color-primary);border-radius:var(--pos-radius-md);background:color-mix(in srgb,var(--pos-color-primary) 24%,transparent);pointer-events:none}.pos-workspace__drop--line{border:0;border-radius:var(--pos-radius-pill);background:var(--pos-color-primary)}.pos-workspace__splitter{position:absolute;z-index:4;top:0;bottom:0;grid-column:1/-1;width:var(--pos-space-xl);padding:0;border:0;background:transparent;cursor:ew-resize;touch-action:none;transform:translate(-50%)}.pos-workspace__splitter:before{content:\"\";position:absolute;top:0;bottom:0;left:50%;width:var(--pos-space-xs);border-radius:var(--pos-radius-pill);background:var(--pos-color-primary);transform:translate(-50%)}.pos-workspace__splitter:focus-visible{outline:2px solid var(--pos-color-ink);outline-offset:2px}.pos-workspace__status{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}\n"] }]
|
|
2076
|
+
}, template: "@if (editing()) {\r\n <div class=\"pos-workspace__tools\">\r\n <div class=\"pos-workspace__palette\">\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-toggle\"\r\n aria-haspopup=\"menu\"\r\n [attr.aria-expanded]=\"paletteOpen()\"\r\n (click)=\"togglePalette()\"\r\n >\r\n Components\r\n </button>\r\n @if (paletteOpen()) {\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-backdrop\"\r\n tabindex=\"-1\"\r\n aria-label=\"Close components\"\r\n (click)=\"closePalette()\"\r\n ></button>\r\n <div\r\n class=\"pos-workspace__palette-menu\"\r\n [class.pos-workspace__palette-menu--lifted]=\"paletteMenuLifted()\"\r\n role=\"menu\"\r\n tabindex=\"-1\"\r\n aria-label=\"Components\"\r\n (keydown)=\"onPaletteMenuKeydown($event)\"\r\n >\r\n @for (id of palette(); track id) {\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-item\"\r\n role=\"menuitem\"\r\n [attr.data-palette]=\"id\"\r\n (pointerdown)=\"onPalettePointerDown(id, $event)\"\r\n (pointermove)=\"onPalettePointerMove($event)\"\r\n (pointerup)=\"onPalettePointerUp($event)\"\r\n (pointercancel)=\"onPalettePointerCancel()\"\r\n (click)=\"onPaletteClick(id)\"\r\n >\r\n {{ paneLabel(id) }}\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__palette-item\"\r\n role=\"menuitem\"\r\n data-palette=\"empty\"\r\n (pointerdown)=\"onPalettePointerDown('empty', $event)\"\r\n (pointermove)=\"onPalettePointerMove($event)\"\r\n (pointerup)=\"onPalettePointerUp($event)\"\r\n (pointercancel)=\"onPalettePointerCancel()\"\r\n (click)=\"onPaletteClick('empty')\"\r\n >\r\n Custom container\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"pos-workspace__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"pos-workspace__undo\"\r\n [disabled]=\"!canUndo()\"\r\n (click)=\"undoLayout()\"\r\n >\r\n Undo\r\n </button>\r\n <button type=\"button\" class=\"pos-workspace__new\" (click)=\"resetLayout()\">New</button>\r\n <button type=\"button\" class=\"pos-workspace__default\" (click)=\"applyDefaultLayout()\">\r\n Default layout\r\n </button>\r\n <button type=\"button\" class=\"pos-workspace__import\" (click)=\"layoutFile.click()\">\r\n Import layout\r\n </button>\r\n <button type=\"button\" class=\"pos-workspace__export\" (click)=\"exportLayout()\">\r\n Export layout\r\n </button>\r\n <input\r\n #layoutFile\r\n class=\"pos-workspace__file\"\r\n type=\"file\"\r\n accept=\"application/json,.json\"\r\n aria-label=\"Import layout file\"\r\n (change)=\"importLayoutFile($event)\"\r\n />\r\n </div>\r\n </div>\r\n}\r\n\r\n<div\r\n #frame\r\n class=\"pos-workspace__grid\"\r\n [style.grid-template-columns]=\"grid().columns\"\r\n [style.grid-template-rows]=\"grid().rows\"\r\n>\r\n <ng-content />\r\n @for (slot of emptySlots(); track slot) {\r\n <pos-workspace-pane [paneId]=\"slot\" [placeholder]=\"true\" />\r\n }\r\n @if (showSplitter()) {\r\n <div\r\n class=\"pos-workspace__splitter\"\r\n role=\"separator\"\r\n aria-orientation=\"vertical\"\r\n aria-label=\"Resize columns\"\r\n aria-valuemin=\"28\"\r\n aria-valuemax=\"72\"\r\n [attr.aria-valuenow]=\"ratioPercent()\"\r\n tabindex=\"0\"\r\n [style.grid-row]=\"splitterRow()\"\r\n [style.left]=\"splitterLeft()\"\r\n (pointerdown)=\"onSplitterDown($event)\"\r\n (pointermove)=\"onSplitterMove($event)\"\r\n (pointerup)=\"onSplitterUp()\"\r\n (pointercancel)=\"onSplitterUp()\"\r\n (keydown)=\"onSplitterKeydown($event)\"\r\n ></div>\r\n }\r\n</div>\r\n\r\n@for (hint of dropHints(); track hint.kind) {\r\n <div\r\n class=\"pos-workspace__hint\"\r\n [class.pos-workspace__hint--top]=\"hint.kind === 'top'\"\r\n [class.pos-workspace__hint--bottom]=\"hint.kind === 'bottom'\"\r\n [class.pos-workspace__hint--dock]=\"hint.kind === 'dock'\"\r\n [style.top.px]=\"hint.top\"\r\n [style.left.px]=\"hint.left\"\r\n [style.width.px]=\"hint.width\"\r\n [style.height.px]=\"hint.height\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n}\r\n\r\n@if (dropIndicator(); as indicator) {\r\n <div\r\n class=\"pos-workspace__drop\"\r\n [class.pos-workspace__drop--line]=\"indicator.line\"\r\n [style.top.px]=\"indicator.top\"\r\n [style.left.px]=\"indicator.left\"\r\n [style.width.px]=\"indicator.width\"\r\n [style.height.px]=\"indicator.height\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n}\r\n\r\n<div class=\"pos-workspace__status\" aria-live=\"polite\">{{ status() }}</div>\r\n", styles: [":host{display:flex;position:relative;flex-direction:column;box-sizing:border-box;height:100%;min-height:0;color:var(--pos-color-text);font-family:var(--pos-font-family)}.pos-workspace__tools{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--pos-space-sm);padding:var(--pos-space-sm) var(--pos-space-lg) 0}.pos-workspace__palette{position:relative}.pos-workspace__palette-toggle{min-height:var(--pos-button-min-height);padding:0 var(--pos-space-lg);border:1px dashed var(--pos-color-primary);border-radius:var(--pos-radius-md);background:var(--pos-color-surface);color:var(--pos-color-text);font:inherit;font-size:var(--pos-font-size-md);cursor:pointer}.pos-workspace__palette-backdrop{position:fixed;z-index:5;inset:0;padding:0;border:0;background:transparent}.pos-workspace__palette-menu{position:absolute;z-index:6;top:calc(100% + var(--pos-space-xs));left:0;display:flex;flex-direction:column;min-width:14rem;max-height:min(20rem,70vh);overflow:auto;padding:var(--pos-space-xs);border:1px solid var(--pos-color-border);border-radius:var(--pos-radius-md);background:var(--pos-color-surface)}.pos-workspace__palette-menu--lifted{visibility:hidden}.pos-workspace__palette-item{min-height:var(--pos-button-min-height);padding:0 var(--pos-space-md);border:0;border-radius:var(--pos-radius-sm);background:transparent;color:var(--pos-color-text);font:inherit;font-size:var(--pos-font-size-md);text-align:left;cursor:grab;touch-action:none}.pos-workspace__palette-item:hover{background:color-mix(in srgb,var(--pos-color-primary) 12%,var(--pos-color-surface))}.pos-workspace__palette-toggle:focus-visible,.pos-workspace__palette-item:focus-visible{outline:2px solid var(--pos-color-ink);outline-offset:2px}.pos-workspace__actions{display:flex;flex-wrap:wrap;gap:var(--pos-space-sm)}.pos-workspace__undo,.pos-workspace__new,.pos-workspace__default,.pos-workspace__export,.pos-workspace__import{min-height:var(--pos-button-min-height);padding:0 var(--pos-space-lg);border:1px solid var(--pos-color-key-border);border-radius:var(--pos-radius-md);background:var(--pos-color-key);color:var(--pos-color-text);font:inherit;font-size:var(--pos-font-size-md);cursor:pointer}.pos-workspace__file{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.pos-workspace__undo:disabled{background:var(--pos-color-disabled);color:var(--pos-color-on-disabled);cursor:default}.pos-workspace__undo:focus-visible,.pos-workspace__new:focus-visible,.pos-workspace__default:focus-visible,.pos-workspace__export:focus-visible,.pos-workspace__import:focus-visible{outline:2px solid var(--pos-color-ink);outline-offset:2px}:host(.pos-workspace--dragging){cursor:grabbing;-webkit-user-select:none;user-select:none}.pos-workspace__grid{display:grid;position:relative;flex:1 1 auto;box-sizing:border-box;min-height:0;padding:var(--pos-space-lg);gap:var(--pos-space-md)}.pos-workspace__hint{position:absolute;z-index:2;box-sizing:border-box;border:2px dashed color-mix(in srgb,var(--pos-color-primary) 55%,transparent);border-radius:var(--pos-radius-md);background:color-mix(in srgb,var(--pos-color-primary) 8%,transparent);pointer-events:none}.pos-workspace__drop{position:absolute;z-index:3;box-sizing:border-box;border:2px dashed var(--pos-color-primary);border-radius:var(--pos-radius-md);background:color-mix(in srgb,var(--pos-color-primary) 24%,transparent);pointer-events:none}.pos-workspace__drop--line{border:0;border-radius:var(--pos-radius-pill);background:var(--pos-color-primary)}.pos-workspace__splitter{position:absolute;z-index:4;top:0;bottom:0;grid-column:1/-1;width:var(--pos-space-xl);padding:0;border:0;background:transparent;cursor:ew-resize;touch-action:none;transform:translate(-50%)}.pos-workspace__splitter:before{content:\"\";position:absolute;top:0;bottom:0;left:50%;width:var(--pos-space-xs);border-radius:var(--pos-radius-pill);background:var(--pos-color-primary);transform:translate(-50%)}.pos-workspace__splitter:focus-visible{outline:2px solid var(--pos-color-ink);outline-offset:2px}.pos-workspace__status{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}\n"] }]
|
|
2074
2077
|
}], ctorParameters: () => [], propDecorators: { paneRefs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => PosWorkspacePane), { isSignal: true }] }], frameRef: [{ type: i0.ViewChild, args: ['frame', { isSignal: true }] }], editing: [{ type: i0.Input, args: [{ isSignal: true, alias: "editing", required: false }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], layoutChange: [{ type: i0.Output, args: ["layoutChange"] }], layoutExport: [{ type: i0.Output, args: ["layoutExport"] }] } });
|
|
2075
2078
|
|
|
2076
2079
|
const COIN_AMOUNTS = [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2];
|
|
@@ -2261,13 +2264,13 @@ class PosReceipt {
|
|
|
2261
2264
|
this.action.emit({ type: 'receipt.newSale' });
|
|
2262
2265
|
}
|
|
2263
2266
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: PosReceipt, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2264
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: PosReceipt, isStandalone: true, selector: "pos-receipt", inputs: { lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, totals: { classPropertyName: "totals", publicName: "totals", isSignal: true, isRequired: false, transformFunction: null }, payments: { classPropertyName: "payments", publicName: "payments", isSignal: true, isRequired: false, transformFunction: null }, document: { classPropertyName: "document", publicName: "document", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, emptyMessage: { classPropertyName: "emptyMessage", publicName: "emptyMessage", isSignal: true, isRequired: false, transformFunction: null }, preparingLabel: { classPropertyName: "preparingLabel", publicName: "preparingLabel", isSignal: true, isRequired: false, transformFunction: null }, readyLabel: { classPropertyName: "readyLabel", publicName: "readyLabel", isSignal: true, isRequired: false, transformFunction: null }, newSaleLabel: { classPropertyName: "newSaleLabel", publicName: "newSaleLabel", isSignal: true, isRequired: false, transformFunction: null }, tenderLabel: { classPropertyName: "tenderLabel", publicName: "tenderLabel", isSignal: true, isRequired: false, transformFunction: null }, amountLabel: { classPropertyName: "amountLabel", publicName: "amountLabel", isSignal: true, isRequired: false, transformFunction: null }, tenderedLabel: { classPropertyName: "tenderedLabel", publicName: "tenderedLabel", isSignal: true, isRequired: false, transformFunction: null }, changeLabel: { classPropertyName: "changeLabel", publicName: "changeLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, host: { classAttribute: "pos-receipt" }, ngImport: i0, template: "<section\r\n class=\"pos-receipt__panel\"\r\n [class.pos-receipt__panel--bordered]=\"bordered()\"\r\n [attr.aria-busy]=\"disabled() || !document().receiptReady ? true : null\"\r\n>\r\n <header class=\"pos-receipt__header\">\r\n <div class=\"pos-receipt__heading\">\r\n <p class=\"pos-receipt__kicker\">Adaptive POS</p>\r\n <h2 class=\"pos-receipt__title\">{{ title() }}</h2>\r\n </div>\r\n @if (hasDocumentNumber()) {\r\n <p class=\"pos-receipt__number\" aria-label=\"Document number\">\r\n {{ document().number }}\r\n </p>\r\n }\r\n </header>\r\n\r\n <p class=\"pos-receipt__status\" aria-live=\"polite\">{{ statusText() }}</p>\r\n\r\n <ul class=\"pos-receipt__lines\" aria-label=\"Receipt lines\">\r\n @if (!hasLines()) {\r\n <li class=\"pos-receipt__empty\">{{ emptyMessage() }}</li>\r\n } @else {\r\n @for (line of lines(); track line.lineId) {\r\n <li>\r\n <article\r\n class=\"pos-receipt__line\"\r\n [class.pos-receipt__line--voided]=\"line.struckThrough\"\r\n >\r\n <div class=\"pos-receipt__line-info\">\r\n <h3 class=\"pos-receipt__line-name\">{{ line.name }}</h3>\r\n <p class=\"pos-receipt__line-sku\">{{ line.sku }}</p>\r\n @if (line.struckThrough) {\r\n <p class=\"pos-receipt__line-voided\">Voided</p>\r\n }\r\n </div>\r\n <p class=\"pos-receipt__qty\">{{ line.qty }}</p>\r\n <div class=\"pos-receipt__line-prices\">\r\n <p class=\"pos-receipt__unit-price\">\r\n {{ formatMoney(line.unitPrice) }}\r\n </p>\r\n <p class=\"pos-receipt__line-total\">\r\n {{ formatMoney(line.lineTotal) }}\r\n </p>\r\n </div>\r\n </article>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n\r\n <div class=\"pos-receipt__summary\">\r\n <dl class=\"pos-receipt__totals\" aria-live=\"polite\">\r\n <div class=\"pos-receipt__row\">\r\n <dt>Gross</dt>\r\n <dd>{{ formatMoney(totals().gross) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>Net</dt>\r\n <dd>{{ formatMoney(totals().net) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>VAT</dt>\r\n <dd>{{ formatMoney(totals().vat) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>Discount</dt>\r\n <dd>{{ formatMoney(totals().discount) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row pos-receipt__row--due\">\r\n <dt>Due</dt>\r\n <dd>{{ formatMoney(totals().due) }}</dd>\r\n </div>\r\n </dl>\r\n\r\n @if (hasPayments()) {\r\n <section class=\"pos-receipt__tender\">\r\n <h3 class=\"pos-receipt__tender-title\">{{ tenderLabel() }}</h3>\r\n <ul class=\"pos-receipt__payments\">\r\n @for (payment of payments(); track $index) {\r\n <li class=\"pos-receipt__payment\">\r\n <header class=\"pos-receipt__payment-header\">\r\n <p class=\"pos-receipt__payment-tender\">{{ payment.tender }}</p>\r\n <p class=\"pos-receipt__payment-state\">{{ payment.state }}</p>\r\n </header>\r\n <dl class=\"pos-receipt__payment-amounts\">\r\n <div class=\"pos-receipt__row\">\r\n <dt>{{ amountLabel() }}</dt>\r\n <dd>{{ formatMoney(payment.amount) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>{{ tenderedLabel() }}</dt>\r\n <dd>{{ formatMoney(payment.tendered) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row pos-receipt__row--change\">\r\n <dt>{{ changeLabel() }}</dt>\r\n <dd>{{ formatMoney(payment.change) }}</dd>\r\n </div>\r\n </dl>\r\n </li>\r\n }\r\n </ul>\r\n </section>\r\n }\r\n </div>\r\n\r\n <div class=\"pos-receipt__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"pos-receipt__new-sale\"\r\n [disabled]=\"!canStartNewSale()\"\r\n (click)=\"onNewSale()\"\r\n >\r\n {{ newSaleLabel() }}\r\n </button>\r\n </div>\r\n</section>\r\n", styles: [":host{display:flex;flex-direction:column;min-height:0;width:100%;height:100%;color:var(--pos-color-text);font-family:var(--pos-font-family);font-size:var(--pos-font-size-md)}.pos-receipt__panel{display:flex;flex-direction:column;min-height:0;height:100%;padding:var(--pos-space-lg);border-radius:var(--pos-radius-lg);background:var(--pos-color-panel)}.pos-receipt__panel--bordered{border:1px solid var(--pos-color-border)}.pos-receipt__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--pos-space-md)}.pos-receipt__heading{display:flex;flex-direction:column;gap:var(--pos-space-sm);min-width:0}.pos-receipt__kicker{margin:0;color:var(--pos-color-primary);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-bold);letter-spacing:.14em;text-transform:uppercase}.pos-receipt__title{margin:0;font-family:var(--pos-font-family-display);font-size:var(--pos-font-size-xl);font-weight:var(--pos-font-weight-bold);letter-spacing:var(--pos-letter-spacing-tight)}.pos-receipt__number{margin:0;color:var(--pos-color-text-muted);font-family:var(--pos-font-family-display);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold);overflow-wrap:anywhere;text-align:right}.pos-receipt__status{margin:var(--pos-space-md) 0 0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold)}.pos-receipt__lines{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--pos-space-sm);min-height:8rem;margin:var(--pos-space-md) 0 0;padding:0;overflow-y:auto;list-style:none}.pos-receipt__empty{margin:auto 0;padding:var(--pos-space-2xl) var(--pos-space-md);color:var(--pos-color-text-muted);text-align:center}.pos-receipt__line{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:\"info qty\" \"prices prices\";align-items:center;gap:var(--pos-space-xs) var(--pos-space-md);padding:var(--pos-space-md);border:1px solid var(--pos-color-border);border-radius:var(--pos-radius-md);background:var(--pos-color-panel-elevated)}.pos-receipt__line-info{grid-area:info;min-width:0}.pos-receipt__line-name{margin:0;font-size:var(--pos-font-size-md);font-weight:var(--pos-font-weight-semibold);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pos-receipt__line-sku,.pos-receipt__line-voided{margin:var(--pos-space-xs) 0 0;font-size:var(--pos-font-size-sm)}.pos-receipt__line-sku{color:var(--pos-color-text-muted)}.pos-receipt__line-voided{color:var(--pos-color-danger);font-weight:var(--pos-font-weight-semibold)}.pos-receipt__qty{grid-area:qty;margin:0;font-family:var(--pos-font-family-display);font-weight:var(--pos-font-weight-bold);font-variant-numeric:tabular-nums;text-align:right}.pos-receipt__line-prices{grid-area:prices;display:flex;justify-content:space-between;gap:var(--pos-space-md)}.pos-receipt__unit-price{margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm)}.pos-receipt__line-total{margin:0;font-family:var(--pos-font-family-display);font-weight:var(--pos-font-weight-bold);font-variant-numeric:tabular-nums}.pos-receipt__line--voided .pos-receipt__line-name,.pos-receipt__line--voided .pos-receipt__line-sku,.pos-receipt__line--voided .pos-receipt__line-prices,.pos-receipt__line--voided .pos-receipt__qty{color:var(--pos-color-text-muted);text-decoration:line-through}.pos-receipt__summary{display:flex;flex-direction:column;gap:var(--pos-space-md);margin-top:var(--pos-space-md);padding-top:var(--pos-space-md);border-top:1px solid var(--pos-color-border)}.pos-receipt__totals,.pos-receipt__payment-amounts{display:flex;flex-direction:column;gap:var(--pos-space-sm);margin:0}.pos-receipt__row{display:flex;justify-content:space-between;gap:var(--pos-space-md);margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm)}.pos-receipt__row dt,.pos-receipt__row dd{margin:0}.pos-receipt__row dd{font-variant-numeric:tabular-nums}.pos-receipt__row--due,.pos-receipt__row--change{padding-top:var(--pos-space-sm);border-top:1px solid var(--pos-color-border);color:var(--pos-color-text);font-family:var(--pos-font-family-display);font-size:var(--pos-font-size-lg);font-weight:var(--pos-font-weight-bold)}.pos-receipt__tender{display:flex;flex-direction:column;gap:var(--pos-space-sm)}.pos-receipt__tender-title{margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold);letter-spacing:var(--pos-letter-spacing-brand);text-transform:uppercase}.pos-receipt__payments{display:flex;flex-direction:column;gap:var(--pos-space-sm);margin:0;padding:0;list-style:none}.pos-receipt__payment{display:flex;flex-direction:column;gap:var(--pos-space-sm);padding:var(--pos-space-md) var(--pos-space-lg);border:1px solid var(--pos-color-success);border-radius:var(--pos-radius-md);background:color-mix(in srgb,var(--pos-color-success) 14%,var(--pos-color-panel-elevated))}.pos-receipt__payment-header{display:flex;align-items:baseline;justify-content:space-between;gap:var(--pos-space-md)}.pos-receipt__payment-tender{margin:0;font-size:var(--pos-font-size-md);font-weight:var(--pos-font-weight-bold)}.pos-receipt__payment-state{margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold)}.pos-receipt__actions{margin-top:var(--pos-space-md)}.pos-receipt__new-sale{width:100%;min-height:var(--pos-button-min-height);border:1px solid var(--pos-color-border);border-radius:var(--pos-radius-md);background:var(--pos-color-surface);color:var(--pos-color-text);font:inherit;font-weight:var(--pos-font-weight-semibold);cursor:pointer;-webkit-tap-highlight-color:transparent}.pos-receipt__new-sale:not(:disabled):active{transform:translateY(1px)}.pos-receipt__new-sale:disabled{background:var(--pos-color-disabled);color:var(--pos-color-on-disabled);cursor:not-allowed;transform:none}.pos-receipt__new-sale:focus-visible{outline:2px solid var(--pos-color-primary);outline-offset:2px}@media(min-width:768px){.pos-receipt__panel{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(16rem,1fr);grid-template-areas:\"header header\" \"status status\" \"lines summary\" \"actions actions\";gap:var(--pos-space-lg);padding:var(--pos-space-xl);align-items:start}.pos-receipt__header{grid-area:header}.pos-receipt__status{grid-area:status;margin:0}.pos-receipt__lines{grid-area:lines;margin:0}.pos-receipt__line{grid-template-columns:minmax(0,1fr) auto auto;grid-template-areas:\"info qty prices\";gap:var(--pos-space-md)}.pos-receipt__line-prices{flex-direction:column;align-items:flex-end;justify-content:center}.pos-receipt__summary{grid-area:summary;margin:0;padding:0;border-top:0}.pos-receipt__actions{grid-area:actions;margin:0}}@media(prefers-reduced-motion:reduce){.pos-receipt__new-sale{transform:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2267
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.22", type: PosReceipt, isStandalone: true, selector: "pos-receipt", inputs: { lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null }, totals: { classPropertyName: "totals", publicName: "totals", isSignal: true, isRequired: false, transformFunction: null }, payments: { classPropertyName: "payments", publicName: "payments", isSignal: true, isRequired: false, transformFunction: null }, document: { classPropertyName: "document", publicName: "document", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, emptyMessage: { classPropertyName: "emptyMessage", publicName: "emptyMessage", isSignal: true, isRequired: false, transformFunction: null }, preparingLabel: { classPropertyName: "preparingLabel", publicName: "preparingLabel", isSignal: true, isRequired: false, transformFunction: null }, readyLabel: { classPropertyName: "readyLabel", publicName: "readyLabel", isSignal: true, isRequired: false, transformFunction: null }, newSaleLabel: { classPropertyName: "newSaleLabel", publicName: "newSaleLabel", isSignal: true, isRequired: false, transformFunction: null }, tenderLabel: { classPropertyName: "tenderLabel", publicName: "tenderLabel", isSignal: true, isRequired: false, transformFunction: null }, amountLabel: { classPropertyName: "amountLabel", publicName: "amountLabel", isSignal: true, isRequired: false, transformFunction: null }, tenderedLabel: { classPropertyName: "tenderedLabel", publicName: "tenderedLabel", isSignal: true, isRequired: false, transformFunction: null }, changeLabel: { classPropertyName: "changeLabel", publicName: "changeLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, host: { classAttribute: "pos-receipt" }, ngImport: i0, template: "<section\r\n class=\"pos-receipt__panel\"\r\n [class.pos-receipt__panel--bordered]=\"bordered()\"\r\n [attr.aria-busy]=\"disabled() || !document().receiptReady ? true : null\"\r\n>\r\n <header class=\"pos-receipt__header\">\r\n <div class=\"pos-receipt__heading\">\r\n <p class=\"pos-receipt__kicker\">Adaptive POS</p>\r\n <h2 class=\"pos-receipt__title\">{{ title() }}</h2>\r\n </div>\r\n @if (hasDocumentNumber()) {\r\n <p class=\"pos-receipt__number\" aria-label=\"Document number\">\r\n {{ document().number }}\r\n </p>\r\n }\r\n </header>\r\n\r\n <p class=\"pos-receipt__status\" aria-live=\"polite\">{{ statusText() }}</p>\r\n\r\n <ul class=\"pos-receipt__lines\" aria-label=\"Receipt lines\">\r\n @if (!hasLines()) {\r\n <li class=\"pos-receipt__empty\">{{ emptyMessage() }}</li>\r\n } @else {\r\n @for (line of lines(); track line.lineId) {\r\n <li>\r\n <article\r\n class=\"pos-receipt__line\"\r\n [class.pos-receipt__line--voided]=\"line.struckThrough\"\r\n >\r\n <div class=\"pos-receipt__line-info\">\r\n <h3 class=\"pos-receipt__line-name\">{{ line.name }}</h3>\r\n <p class=\"pos-receipt__line-sku\">{{ line.sku }}</p>\r\n @if (line.struckThrough) {\r\n <p class=\"pos-receipt__line-voided\">Voided</p>\r\n }\r\n </div>\r\n <p class=\"pos-receipt__qty\">{{ line.qty }}</p>\r\n <div class=\"pos-receipt__line-prices\">\r\n <p class=\"pos-receipt__unit-price\">\r\n {{ formatMoney(line.unitPrice) }}\r\n </p>\r\n <p class=\"pos-receipt__line-total\">\r\n {{ formatMoney(line.lineTotal) }}\r\n </p>\r\n </div>\r\n </article>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n\r\n <div class=\"pos-receipt__summary\">\r\n <dl class=\"pos-receipt__totals\" aria-live=\"polite\">\r\n <div class=\"pos-receipt__row\">\r\n <dt>Gross</dt>\r\n <dd>{{ formatMoney(totals().gross) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>Net</dt>\r\n <dd>{{ formatMoney(totals().net) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>VAT</dt>\r\n <dd>{{ formatMoney(totals().vat) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>Discount</dt>\r\n <dd>{{ formatMoney(totals().discount) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row pos-receipt__row--due\">\r\n <dt>Due</dt>\r\n <dd>{{ formatMoney(totals().due) }}</dd>\r\n </div>\r\n </dl>\r\n\r\n @if (hasPayments()) {\r\n <section class=\"pos-receipt__tender\">\r\n <h3 class=\"pos-receipt__tender-title\">{{ tenderLabel() }}</h3>\r\n <ul class=\"pos-receipt__payments\">\r\n @for (payment of payments(); track $index) {\r\n <li class=\"pos-receipt__payment\">\r\n <header class=\"pos-receipt__payment-header\">\r\n <p class=\"pos-receipt__payment-tender\">{{ payment.tender }}</p>\r\n <p class=\"pos-receipt__payment-state\">{{ payment.state }}</p>\r\n </header>\r\n <dl class=\"pos-receipt__payment-amounts\">\r\n <div class=\"pos-receipt__row\">\r\n <dt>{{ amountLabel() }}</dt>\r\n <dd>{{ formatMoney(payment.amount) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>{{ tenderedLabel() }}</dt>\r\n <dd>{{ formatMoney(payment.tendered) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row pos-receipt__row--change\">\r\n <dt>{{ changeLabel() }}</dt>\r\n <dd>{{ formatMoney(payment.change) }}</dd>\r\n </div>\r\n </dl>\r\n </li>\r\n }\r\n </ul>\r\n </section>\r\n }\r\n </div>\r\n\r\n <div class=\"pos-receipt__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"pos-receipt__new-sale\"\r\n [disabled]=\"!canStartNewSale()\"\r\n (click)=\"onNewSale()\"\r\n >\r\n {{ newSaleLabel() }}\r\n </button>\r\n </div>\r\n</section>\r\n", styles: [":host{display:flex;flex-direction:column;min-height:0;width:100%;height:100%;color:var(--pos-color-text);font-family:var(--pos-font-family);font-size:var(--pos-font-size-md)}.pos-receipt__panel{display:flex;flex-direction:column;min-height:0;height:100%;padding:var(--pos-space-lg);border-radius:var(--pos-radius-lg);background:var(--pos-color-panel)}.pos-receipt__panel--bordered{border:1px solid var(--pos-color-border)}.pos-receipt__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--pos-space-md)}.pos-receipt__heading{display:flex;flex-direction:column;gap:var(--pos-space-sm);min-width:0}.pos-receipt__kicker{margin:0;color:var(--pos-color-primary);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-bold);letter-spacing:.14em;text-transform:uppercase}.pos-receipt__title{margin:0;font-family:var(--pos-font-family-display);font-size:var(--pos-font-size-xl);font-weight:var(--pos-font-weight-bold);letter-spacing:var(--pos-letter-spacing-tight)}.pos-receipt__number{margin:0;color:var(--pos-color-text-muted);font-family:var(--pos-font-family-display);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold);overflow-wrap:anywhere;text-align:right}.pos-receipt__status{margin:var(--pos-space-md) 0 0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold)}.pos-receipt__lines{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--pos-space-sm);min-height:8rem;margin:var(--pos-space-md) 0 0;padding:0;overflow-y:auto;list-style:none}.pos-receipt__empty{margin:auto 0;padding:var(--pos-space-2xl) var(--pos-space-md);color:var(--pos-color-text-muted);text-align:center}.pos-receipt__line{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:\"info qty\" \"prices prices\";align-items:center;gap:var(--pos-space-xs) var(--pos-space-md);padding:var(--pos-space-md);border:1px solid var(--pos-color-border);border-radius:var(--pos-radius-md);background:var(--pos-color-panel-elevated)}.pos-receipt__line-info{grid-area:info;min-width:0}.pos-receipt__line-name{margin:0;font-size:var(--pos-font-size-md);font-weight:var(--pos-font-weight-semibold);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pos-receipt__line-sku,.pos-receipt__line-voided{margin:var(--pos-space-xs) 0 0;font-size:var(--pos-font-size-sm)}.pos-receipt__line-sku{color:var(--pos-color-text-muted)}.pos-receipt__line-voided{color:var(--pos-color-danger);font-weight:var(--pos-font-weight-semibold)}.pos-receipt__qty{grid-area:qty;margin:0;font-family:var(--pos-font-family-display);font-weight:var(--pos-font-weight-bold);font-variant-numeric:tabular-nums;text-align:right}.pos-receipt__line-prices{grid-area:prices;display:flex;justify-content:space-between;gap:var(--pos-space-md)}.pos-receipt__unit-price{margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm)}.pos-receipt__line-total{margin:0;font-family:var(--pos-font-family-display);font-weight:var(--pos-font-weight-bold);font-variant-numeric:tabular-nums}.pos-receipt__line--voided .pos-receipt__line-name,.pos-receipt__line--voided .pos-receipt__line-sku,.pos-receipt__line--voided .pos-receipt__line-prices,.pos-receipt__line--voided .pos-receipt__qty{color:var(--pos-color-text-muted);text-decoration:line-through}.pos-receipt__summary{display:flex;flex-direction:column;gap:var(--pos-space-md);margin-top:var(--pos-space-md);padding-top:var(--pos-space-md);border-top:1px solid var(--pos-color-border)}.pos-receipt__totals,.pos-receipt__payment-amounts{display:flex;flex-direction:column;gap:var(--pos-space-sm);margin:0}.pos-receipt__row{display:flex;justify-content:space-between;gap:var(--pos-space-md);margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm)}.pos-receipt__row dt,.pos-receipt__row dd{margin:0}.pos-receipt__row dd{font-variant-numeric:tabular-nums}.pos-receipt__row--due,.pos-receipt__row--change{padding-top:var(--pos-space-sm);border-top:1px solid var(--pos-color-border);color:var(--pos-color-text);font-family:var(--pos-font-family-display);font-size:var(--pos-font-size-lg);font-weight:var(--pos-font-weight-bold)}.pos-receipt__tender{display:flex;flex-direction:column;gap:var(--pos-space-sm)}.pos-receipt__tender-title{margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold);letter-spacing:var(--pos-letter-spacing-brand);text-transform:uppercase}.pos-receipt__payments{display:flex;flex-direction:column;gap:var(--pos-space-sm);margin:0;padding:0;list-style:none}.pos-receipt__payment{display:flex;flex-direction:column;gap:var(--pos-space-sm);padding:var(--pos-space-md) var(--pos-space-lg);border:1px solid var(--pos-color-success);border-radius:var(--pos-radius-md);background:color-mix(in srgb,var(--pos-color-success) 14%,var(--pos-color-panel-elevated))}.pos-receipt__payment-header{display:flex;align-items:baseline;justify-content:space-between;gap:var(--pos-space-md)}.pos-receipt__payment-tender{margin:0;font-size:var(--pos-font-size-md);font-weight:var(--pos-font-weight-bold)}.pos-receipt__payment-state{margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold)}.pos-receipt__actions{display:flex;justify-content:flex-end;margin-top:var(--pos-space-md)}.pos-receipt__new-sale{min-width:10rem;min-height:calc(var(--pos-button-min-height) - var(--pos-space-sm));padding:var(--pos-space-sm) var(--pos-space-xl);border:1px solid var(--pos-color-primary);border-radius:var(--pos-radius-md);background:var(--pos-color-primary);color:var(--pos-color-on-primary);font:inherit;font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold);cursor:pointer;-webkit-tap-highlight-color:transparent}.pos-receipt__new-sale:not(:disabled):hover{filter:brightness(1.06)}.pos-receipt__new-sale:not(:disabled):active{transform:translateY(1px)}.pos-receipt__new-sale:disabled{border-color:transparent;background:var(--pos-color-disabled);color:var(--pos-color-on-disabled);cursor:not-allowed;filter:none;transform:none}.pos-receipt__new-sale:focus-visible{outline:2px solid var(--pos-color-primary);outline-offset:2px}@media(min-width:768px){.pos-receipt__panel{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(16rem,1fr);grid-template-areas:\"header header\" \"status status\" \"lines summary\" \"actions actions\";gap:var(--pos-space-lg);padding:var(--pos-space-xl);align-items:start}.pos-receipt__header{grid-area:header}.pos-receipt__status{grid-area:status;margin:0}.pos-receipt__lines{grid-area:lines;margin:0}.pos-receipt__line{grid-template-columns:minmax(0,1fr) auto auto;grid-template-areas:\"info qty prices\";gap:var(--pos-space-md)}.pos-receipt__line-prices{flex-direction:column;align-items:flex-end;justify-content:center}.pos-receipt__summary{grid-area:summary;margin:0;padding:0;border-top:0}.pos-receipt__actions{grid-area:actions;margin:0}}@media(prefers-reduced-motion:reduce){.pos-receipt__new-sale{transform:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2265
2268
|
}
|
|
2266
2269
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: PosReceipt, decorators: [{
|
|
2267
2270
|
type: Component,
|
|
2268
2271
|
args: [{ selector: 'pos-receipt', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
2269
2272
|
class: 'pos-receipt',
|
|
2270
|
-
}, template: "<section\r\n class=\"pos-receipt__panel\"\r\n [class.pos-receipt__panel--bordered]=\"bordered()\"\r\n [attr.aria-busy]=\"disabled() || !document().receiptReady ? true : null\"\r\n>\r\n <header class=\"pos-receipt__header\">\r\n <div class=\"pos-receipt__heading\">\r\n <p class=\"pos-receipt__kicker\">Adaptive POS</p>\r\n <h2 class=\"pos-receipt__title\">{{ title() }}</h2>\r\n </div>\r\n @if (hasDocumentNumber()) {\r\n <p class=\"pos-receipt__number\" aria-label=\"Document number\">\r\n {{ document().number }}\r\n </p>\r\n }\r\n </header>\r\n\r\n <p class=\"pos-receipt__status\" aria-live=\"polite\">{{ statusText() }}</p>\r\n\r\n <ul class=\"pos-receipt__lines\" aria-label=\"Receipt lines\">\r\n @if (!hasLines()) {\r\n <li class=\"pos-receipt__empty\">{{ emptyMessage() }}</li>\r\n } @else {\r\n @for (line of lines(); track line.lineId) {\r\n <li>\r\n <article\r\n class=\"pos-receipt__line\"\r\n [class.pos-receipt__line--voided]=\"line.struckThrough\"\r\n >\r\n <div class=\"pos-receipt__line-info\">\r\n <h3 class=\"pos-receipt__line-name\">{{ line.name }}</h3>\r\n <p class=\"pos-receipt__line-sku\">{{ line.sku }}</p>\r\n @if (line.struckThrough) {\r\n <p class=\"pos-receipt__line-voided\">Voided</p>\r\n }\r\n </div>\r\n <p class=\"pos-receipt__qty\">{{ line.qty }}</p>\r\n <div class=\"pos-receipt__line-prices\">\r\n <p class=\"pos-receipt__unit-price\">\r\n {{ formatMoney(line.unitPrice) }}\r\n </p>\r\n <p class=\"pos-receipt__line-total\">\r\n {{ formatMoney(line.lineTotal) }}\r\n </p>\r\n </div>\r\n </article>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n\r\n <div class=\"pos-receipt__summary\">\r\n <dl class=\"pos-receipt__totals\" aria-live=\"polite\">\r\n <div class=\"pos-receipt__row\">\r\n <dt>Gross</dt>\r\n <dd>{{ formatMoney(totals().gross) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>Net</dt>\r\n <dd>{{ formatMoney(totals().net) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>VAT</dt>\r\n <dd>{{ formatMoney(totals().vat) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>Discount</dt>\r\n <dd>{{ formatMoney(totals().discount) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row pos-receipt__row--due\">\r\n <dt>Due</dt>\r\n <dd>{{ formatMoney(totals().due) }}</dd>\r\n </div>\r\n </dl>\r\n\r\n @if (hasPayments()) {\r\n <section class=\"pos-receipt__tender\">\r\n <h3 class=\"pos-receipt__tender-title\">{{ tenderLabel() }}</h3>\r\n <ul class=\"pos-receipt__payments\">\r\n @for (payment of payments(); track $index) {\r\n <li class=\"pos-receipt__payment\">\r\n <header class=\"pos-receipt__payment-header\">\r\n <p class=\"pos-receipt__payment-tender\">{{ payment.tender }}</p>\r\n <p class=\"pos-receipt__payment-state\">{{ payment.state }}</p>\r\n </header>\r\n <dl class=\"pos-receipt__payment-amounts\">\r\n <div class=\"pos-receipt__row\">\r\n <dt>{{ amountLabel() }}</dt>\r\n <dd>{{ formatMoney(payment.amount) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>{{ tenderedLabel() }}</dt>\r\n <dd>{{ formatMoney(payment.tendered) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row pos-receipt__row--change\">\r\n <dt>{{ changeLabel() }}</dt>\r\n <dd>{{ formatMoney(payment.change) }}</dd>\r\n </div>\r\n </dl>\r\n </li>\r\n }\r\n </ul>\r\n </section>\r\n }\r\n </div>\r\n\r\n <div class=\"pos-receipt__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"pos-receipt__new-sale\"\r\n [disabled]=\"!canStartNewSale()\"\r\n (click)=\"onNewSale()\"\r\n >\r\n {{ newSaleLabel() }}\r\n </button>\r\n </div>\r\n</section>\r\n", styles: [":host{display:flex;flex-direction:column;min-height:0;width:100%;height:100%;color:var(--pos-color-text);font-family:var(--pos-font-family);font-size:var(--pos-font-size-md)}.pos-receipt__panel{display:flex;flex-direction:column;min-height:0;height:100%;padding:var(--pos-space-lg);border-radius:var(--pos-radius-lg);background:var(--pos-color-panel)}.pos-receipt__panel--bordered{border:1px solid var(--pos-color-border)}.pos-receipt__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--pos-space-md)}.pos-receipt__heading{display:flex;flex-direction:column;gap:var(--pos-space-sm);min-width:0}.pos-receipt__kicker{margin:0;color:var(--pos-color-primary);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-bold);letter-spacing:.14em;text-transform:uppercase}.pos-receipt__title{margin:0;font-family:var(--pos-font-family-display);font-size:var(--pos-font-size-xl);font-weight:var(--pos-font-weight-bold);letter-spacing:var(--pos-letter-spacing-tight)}.pos-receipt__number{margin:0;color:var(--pos-color-text-muted);font-family:var(--pos-font-family-display);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold);overflow-wrap:anywhere;text-align:right}.pos-receipt__status{margin:var(--pos-space-md) 0 0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold)}.pos-receipt__lines{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--pos-space-sm);min-height:8rem;margin:var(--pos-space-md) 0 0;padding:0;overflow-y:auto;list-style:none}.pos-receipt__empty{margin:auto 0;padding:var(--pos-space-2xl) var(--pos-space-md);color:var(--pos-color-text-muted);text-align:center}.pos-receipt__line{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:\"info qty\" \"prices prices\";align-items:center;gap:var(--pos-space-xs) var(--pos-space-md);padding:var(--pos-space-md);border:1px solid var(--pos-color-border);border-radius:var(--pos-radius-md);background:var(--pos-color-panel-elevated)}.pos-receipt__line-info{grid-area:info;min-width:0}.pos-receipt__line-name{margin:0;font-size:var(--pos-font-size-md);font-weight:var(--pos-font-weight-semibold);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pos-receipt__line-sku,.pos-receipt__line-voided{margin:var(--pos-space-xs) 0 0;font-size:var(--pos-font-size-sm)}.pos-receipt__line-sku{color:var(--pos-color-text-muted)}.pos-receipt__line-voided{color:var(--pos-color-danger);font-weight:var(--pos-font-weight-semibold)}.pos-receipt__qty{grid-area:qty;margin:0;font-family:var(--pos-font-family-display);font-weight:var(--pos-font-weight-bold);font-variant-numeric:tabular-nums;text-align:right}.pos-receipt__line-prices{grid-area:prices;display:flex;justify-content:space-between;gap:var(--pos-space-md)}.pos-receipt__unit-price{margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm)}.pos-receipt__line-total{margin:0;font-family:var(--pos-font-family-display);font-weight:var(--pos-font-weight-bold);font-variant-numeric:tabular-nums}.pos-receipt__line--voided .pos-receipt__line-name,.pos-receipt__line--voided .pos-receipt__line-sku,.pos-receipt__line--voided .pos-receipt__line-prices,.pos-receipt__line--voided .pos-receipt__qty{color:var(--pos-color-text-muted);text-decoration:line-through}.pos-receipt__summary{display:flex;flex-direction:column;gap:var(--pos-space-md);margin-top:var(--pos-space-md);padding-top:var(--pos-space-md);border-top:1px solid var(--pos-color-border)}.pos-receipt__totals,.pos-receipt__payment-amounts{display:flex;flex-direction:column;gap:var(--pos-space-sm);margin:0}.pos-receipt__row{display:flex;justify-content:space-between;gap:var(--pos-space-md);margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm)}.pos-receipt__row dt,.pos-receipt__row dd{margin:0}.pos-receipt__row dd{font-variant-numeric:tabular-nums}.pos-receipt__row--due,.pos-receipt__row--change{padding-top:var(--pos-space-sm);border-top:1px solid var(--pos-color-border);color:var(--pos-color-text);font-family:var(--pos-font-family-display);font-size:var(--pos-font-size-lg);font-weight:var(--pos-font-weight-bold)}.pos-receipt__tender{display:flex;flex-direction:column;gap:var(--pos-space-sm)}.pos-receipt__tender-title{margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold);letter-spacing:var(--pos-letter-spacing-brand);text-transform:uppercase}.pos-receipt__payments{display:flex;flex-direction:column;gap:var(--pos-space-sm);margin:0;padding:0;list-style:none}.pos-receipt__payment{display:flex;flex-direction:column;gap:var(--pos-space-sm);padding:var(--pos-space-md) var(--pos-space-lg);border:1px solid var(--pos-color-success);border-radius:var(--pos-radius-md);background:color-mix(in srgb,var(--pos-color-success) 14%,var(--pos-color-panel-elevated))}.pos-receipt__payment-header{display:flex;align-items:baseline;justify-content:space-between;gap:var(--pos-space-md)}.pos-receipt__payment-tender{margin:0;font-size:var(--pos-font-size-md);font-weight:var(--pos-font-weight-bold)}.pos-receipt__payment-state{margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold)}.pos-receipt__actions{margin-top:var(--pos-space-md)}.pos-receipt__new-sale{width:100%;min-height:var(--pos-button-min-height);border:1px solid var(--pos-color-border);border-radius:var(--pos-radius-md);background:var(--pos-color-surface);color:var(--pos-color-text);font:inherit;font-weight:var(--pos-font-weight-semibold);cursor:pointer;-webkit-tap-highlight-color:transparent}.pos-receipt__new-sale:not(:disabled):active{transform:translateY(1px)}.pos-receipt__new-sale:disabled{background:var(--pos-color-disabled);color:var(--pos-color-on-disabled);cursor:not-allowed;transform:none}.pos-receipt__new-sale:focus-visible{outline:2px solid var(--pos-color-primary);outline-offset:2px}@media(min-width:768px){.pos-receipt__panel{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(16rem,1fr);grid-template-areas:\"header header\" \"status status\" \"lines summary\" \"actions actions\";gap:var(--pos-space-lg);padding:var(--pos-space-xl);align-items:start}.pos-receipt__header{grid-area:header}.pos-receipt__status{grid-area:status;margin:0}.pos-receipt__lines{grid-area:lines;margin:0}.pos-receipt__line{grid-template-columns:minmax(0,1fr) auto auto;grid-template-areas:\"info qty prices\";gap:var(--pos-space-md)}.pos-receipt__line-prices{flex-direction:column;align-items:flex-end;justify-content:center}.pos-receipt__summary{grid-area:summary;margin:0;padding:0;border-top:0}.pos-receipt__actions{grid-area:actions;margin:0}}@media(prefers-reduced-motion:reduce){.pos-receipt__new-sale{transform:none}}\n"] }]
|
|
2273
|
+
}, template: "<section\r\n class=\"pos-receipt__panel\"\r\n [class.pos-receipt__panel--bordered]=\"bordered()\"\r\n [attr.aria-busy]=\"disabled() || !document().receiptReady ? true : null\"\r\n>\r\n <header class=\"pos-receipt__header\">\r\n <div class=\"pos-receipt__heading\">\r\n <p class=\"pos-receipt__kicker\">Adaptive POS</p>\r\n <h2 class=\"pos-receipt__title\">{{ title() }}</h2>\r\n </div>\r\n @if (hasDocumentNumber()) {\r\n <p class=\"pos-receipt__number\" aria-label=\"Document number\">\r\n {{ document().number }}\r\n </p>\r\n }\r\n </header>\r\n\r\n <p class=\"pos-receipt__status\" aria-live=\"polite\">{{ statusText() }}</p>\r\n\r\n <ul class=\"pos-receipt__lines\" aria-label=\"Receipt lines\">\r\n @if (!hasLines()) {\r\n <li class=\"pos-receipt__empty\">{{ emptyMessage() }}</li>\r\n } @else {\r\n @for (line of lines(); track line.lineId) {\r\n <li>\r\n <article\r\n class=\"pos-receipt__line\"\r\n [class.pos-receipt__line--voided]=\"line.struckThrough\"\r\n >\r\n <div class=\"pos-receipt__line-info\">\r\n <h3 class=\"pos-receipt__line-name\">{{ line.name }}</h3>\r\n <p class=\"pos-receipt__line-sku\">{{ line.sku }}</p>\r\n @if (line.struckThrough) {\r\n <p class=\"pos-receipt__line-voided\">Voided</p>\r\n }\r\n </div>\r\n <p class=\"pos-receipt__qty\">{{ line.qty }}</p>\r\n <div class=\"pos-receipt__line-prices\">\r\n <p class=\"pos-receipt__unit-price\">\r\n {{ formatMoney(line.unitPrice) }}\r\n </p>\r\n <p class=\"pos-receipt__line-total\">\r\n {{ formatMoney(line.lineTotal) }}\r\n </p>\r\n </div>\r\n </article>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n\r\n <div class=\"pos-receipt__summary\">\r\n <dl class=\"pos-receipt__totals\" aria-live=\"polite\">\r\n <div class=\"pos-receipt__row\">\r\n <dt>Gross</dt>\r\n <dd>{{ formatMoney(totals().gross) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>Net</dt>\r\n <dd>{{ formatMoney(totals().net) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>VAT</dt>\r\n <dd>{{ formatMoney(totals().vat) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>Discount</dt>\r\n <dd>{{ formatMoney(totals().discount) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row pos-receipt__row--due\">\r\n <dt>Due</dt>\r\n <dd>{{ formatMoney(totals().due) }}</dd>\r\n </div>\r\n </dl>\r\n\r\n @if (hasPayments()) {\r\n <section class=\"pos-receipt__tender\">\r\n <h3 class=\"pos-receipt__tender-title\">{{ tenderLabel() }}</h3>\r\n <ul class=\"pos-receipt__payments\">\r\n @for (payment of payments(); track $index) {\r\n <li class=\"pos-receipt__payment\">\r\n <header class=\"pos-receipt__payment-header\">\r\n <p class=\"pos-receipt__payment-tender\">{{ payment.tender }}</p>\r\n <p class=\"pos-receipt__payment-state\">{{ payment.state }}</p>\r\n </header>\r\n <dl class=\"pos-receipt__payment-amounts\">\r\n <div class=\"pos-receipt__row\">\r\n <dt>{{ amountLabel() }}</dt>\r\n <dd>{{ formatMoney(payment.amount) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row\">\r\n <dt>{{ tenderedLabel() }}</dt>\r\n <dd>{{ formatMoney(payment.tendered) }}</dd>\r\n </div>\r\n <div class=\"pos-receipt__row pos-receipt__row--change\">\r\n <dt>{{ changeLabel() }}</dt>\r\n <dd>{{ formatMoney(payment.change) }}</dd>\r\n </div>\r\n </dl>\r\n </li>\r\n }\r\n </ul>\r\n </section>\r\n }\r\n </div>\r\n\r\n <div class=\"pos-receipt__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"pos-receipt__new-sale\"\r\n [disabled]=\"!canStartNewSale()\"\r\n (click)=\"onNewSale()\"\r\n >\r\n {{ newSaleLabel() }}\r\n </button>\r\n </div>\r\n</section>\r\n", styles: [":host{display:flex;flex-direction:column;min-height:0;width:100%;height:100%;color:var(--pos-color-text);font-family:var(--pos-font-family);font-size:var(--pos-font-size-md)}.pos-receipt__panel{display:flex;flex-direction:column;min-height:0;height:100%;padding:var(--pos-space-lg);border-radius:var(--pos-radius-lg);background:var(--pos-color-panel)}.pos-receipt__panel--bordered{border:1px solid var(--pos-color-border)}.pos-receipt__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--pos-space-md)}.pos-receipt__heading{display:flex;flex-direction:column;gap:var(--pos-space-sm);min-width:0}.pos-receipt__kicker{margin:0;color:var(--pos-color-primary);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-bold);letter-spacing:.14em;text-transform:uppercase}.pos-receipt__title{margin:0;font-family:var(--pos-font-family-display);font-size:var(--pos-font-size-xl);font-weight:var(--pos-font-weight-bold);letter-spacing:var(--pos-letter-spacing-tight)}.pos-receipt__number{margin:0;color:var(--pos-color-text-muted);font-family:var(--pos-font-family-display);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold);overflow-wrap:anywhere;text-align:right}.pos-receipt__status{margin:var(--pos-space-md) 0 0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold)}.pos-receipt__lines{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--pos-space-sm);min-height:8rem;margin:var(--pos-space-md) 0 0;padding:0;overflow-y:auto;list-style:none}.pos-receipt__empty{margin:auto 0;padding:var(--pos-space-2xl) var(--pos-space-md);color:var(--pos-color-text-muted);text-align:center}.pos-receipt__line{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:\"info qty\" \"prices prices\";align-items:center;gap:var(--pos-space-xs) var(--pos-space-md);padding:var(--pos-space-md);border:1px solid var(--pos-color-border);border-radius:var(--pos-radius-md);background:var(--pos-color-panel-elevated)}.pos-receipt__line-info{grid-area:info;min-width:0}.pos-receipt__line-name{margin:0;font-size:var(--pos-font-size-md);font-weight:var(--pos-font-weight-semibold);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pos-receipt__line-sku,.pos-receipt__line-voided{margin:var(--pos-space-xs) 0 0;font-size:var(--pos-font-size-sm)}.pos-receipt__line-sku{color:var(--pos-color-text-muted)}.pos-receipt__line-voided{color:var(--pos-color-danger);font-weight:var(--pos-font-weight-semibold)}.pos-receipt__qty{grid-area:qty;margin:0;font-family:var(--pos-font-family-display);font-weight:var(--pos-font-weight-bold);font-variant-numeric:tabular-nums;text-align:right}.pos-receipt__line-prices{grid-area:prices;display:flex;justify-content:space-between;gap:var(--pos-space-md)}.pos-receipt__unit-price{margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm)}.pos-receipt__line-total{margin:0;font-family:var(--pos-font-family-display);font-weight:var(--pos-font-weight-bold);font-variant-numeric:tabular-nums}.pos-receipt__line--voided .pos-receipt__line-name,.pos-receipt__line--voided .pos-receipt__line-sku,.pos-receipt__line--voided .pos-receipt__line-prices,.pos-receipt__line--voided .pos-receipt__qty{color:var(--pos-color-text-muted);text-decoration:line-through}.pos-receipt__summary{display:flex;flex-direction:column;gap:var(--pos-space-md);margin-top:var(--pos-space-md);padding-top:var(--pos-space-md);border-top:1px solid var(--pos-color-border)}.pos-receipt__totals,.pos-receipt__payment-amounts{display:flex;flex-direction:column;gap:var(--pos-space-sm);margin:0}.pos-receipt__row{display:flex;justify-content:space-between;gap:var(--pos-space-md);margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm)}.pos-receipt__row dt,.pos-receipt__row dd{margin:0}.pos-receipt__row dd{font-variant-numeric:tabular-nums}.pos-receipt__row--due,.pos-receipt__row--change{padding-top:var(--pos-space-sm);border-top:1px solid var(--pos-color-border);color:var(--pos-color-text);font-family:var(--pos-font-family-display);font-size:var(--pos-font-size-lg);font-weight:var(--pos-font-weight-bold)}.pos-receipt__tender{display:flex;flex-direction:column;gap:var(--pos-space-sm)}.pos-receipt__tender-title{margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold);letter-spacing:var(--pos-letter-spacing-brand);text-transform:uppercase}.pos-receipt__payments{display:flex;flex-direction:column;gap:var(--pos-space-sm);margin:0;padding:0;list-style:none}.pos-receipt__payment{display:flex;flex-direction:column;gap:var(--pos-space-sm);padding:var(--pos-space-md) var(--pos-space-lg);border:1px solid var(--pos-color-success);border-radius:var(--pos-radius-md);background:color-mix(in srgb,var(--pos-color-success) 14%,var(--pos-color-panel-elevated))}.pos-receipt__payment-header{display:flex;align-items:baseline;justify-content:space-between;gap:var(--pos-space-md)}.pos-receipt__payment-tender{margin:0;font-size:var(--pos-font-size-md);font-weight:var(--pos-font-weight-bold)}.pos-receipt__payment-state{margin:0;color:var(--pos-color-text-muted);font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold)}.pos-receipt__actions{display:flex;justify-content:flex-end;margin-top:var(--pos-space-md)}.pos-receipt__new-sale{min-width:10rem;min-height:calc(var(--pos-button-min-height) - var(--pos-space-sm));padding:var(--pos-space-sm) var(--pos-space-xl);border:1px solid var(--pos-color-primary);border-radius:var(--pos-radius-md);background:var(--pos-color-primary);color:var(--pos-color-on-primary);font:inherit;font-size:var(--pos-font-size-sm);font-weight:var(--pos-font-weight-semibold);cursor:pointer;-webkit-tap-highlight-color:transparent}.pos-receipt__new-sale:not(:disabled):hover{filter:brightness(1.06)}.pos-receipt__new-sale:not(:disabled):active{transform:translateY(1px)}.pos-receipt__new-sale:disabled{border-color:transparent;background:var(--pos-color-disabled);color:var(--pos-color-on-disabled);cursor:not-allowed;filter:none;transform:none}.pos-receipt__new-sale:focus-visible{outline:2px solid var(--pos-color-primary);outline-offset:2px}@media(min-width:768px){.pos-receipt__panel{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(16rem,1fr);grid-template-areas:\"header header\" \"status status\" \"lines summary\" \"actions actions\";gap:var(--pos-space-lg);padding:var(--pos-space-xl);align-items:start}.pos-receipt__header{grid-area:header}.pos-receipt__status{grid-area:status;margin:0}.pos-receipt__lines{grid-area:lines;margin:0}.pos-receipt__line{grid-template-columns:minmax(0,1fr) auto auto;grid-template-areas:\"info qty prices\";gap:var(--pos-space-md)}.pos-receipt__line-prices{flex-direction:column;align-items:flex-end;justify-content:center}.pos-receipt__summary{grid-area:summary;margin:0;padding:0;border-top:0}.pos-receipt__actions{grid-area:actions;margin:0}}@media(prefers-reduced-motion:reduce){.pos-receipt__new-sale{transform:none}}\n"] }]
|
|
2271
2274
|
}], propDecorators: { lines: [{ type: i0.Input, args: [{ isSignal: true, alias: "lines", required: false }] }], totals: [{ type: i0.Input, args: [{ isSignal: true, alias: "totals", required: false }] }], payments: [{ type: i0.Input, args: [{ isSignal: true, alias: "payments", required: false }] }], document: [{ type: i0.Input, args: [{ isSignal: true, alias: "document", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], bordered: [{ type: i0.Input, args: [{ isSignal: true, alias: "bordered", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], emptyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyMessage", required: false }] }], preparingLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "preparingLabel", required: false }] }], readyLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "readyLabel", required: false }] }], newSaleLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "newSaleLabel", required: false }] }], tenderLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "tenderLabel", required: false }] }], amountLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "amountLabel", required: false }] }], tenderedLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "tenderedLabel", required: false }] }], changeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "changeLabel", required: false }] }], action: [{ type: i0.Output, args: ["action"] }] } });
|
|
2272
2275
|
|
|
2273
2276
|
const POS_TOKEN_CATALOG = [
|