tango-app-ui-store-builder 1.2.15 → 1.2.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/esm2022/lib/components/manage-store-plano/verification-feedback/zone-editable-fixture/zone-editable-fixture.component.mjs +33 -7
  2. package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +18 -7
  3. package/esm2022/lib/components/plano-tools/allow-edit/allow-edit.component.mjs +4 -3
  4. package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +5 -4
  5. package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +4 -3
  6. package/esm2022/lib/components/plano-tools/delete-floor/delete-floor.component.mjs +4 -3
  7. package/esm2022/lib/components/plano-tools/delete-task/delete-task.component.mjs +11 -4
  8. package/esm2022/lib/components/plano-tools/layout-touchup/layout-touchup.component.mjs +134 -0
  9. package/esm2022/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.mjs +5103 -0
  10. package/esm2022/lib/components/plano-tools/modify-fixture-numbers/modify-fixture-numbers.component.mjs +4 -3
  11. package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +4 -3
  12. package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +4 -3
  13. package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +4 -3
  14. package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +4 -3
  15. package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +6 -3
  16. package/esm2022/lib/components/plano-tools/tool-page-header/tool-page-header.component.mjs +22 -0
  17. package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +27 -8
  18. package/esm2022/lib/components/popups/publish-plano-modal/publish-plano-modal.component.mjs +1 -1
  19. package/esm2022/lib/components/store-plano/store-plano.component.mjs +31 -6
  20. package/esm2022/lib/services/store-builder.service.mjs +10 -1
  21. package/esm2022/lib/tango-store-builder-routing.module.mjs +25 -55
  22. package/esm2022/lib/tango-store-builder.module.mjs +10 -1
  23. package/esm2022/lib/tango-store-plano.module.mjs +5 -2
  24. package/fesm2022/tango-app-ui-store-builder.mjs +5678 -386
  25. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  26. package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -4
  27. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
  28. package/lib/components/manage-store-plano/verification-feedback/zone-editable-fixture/zone-editable-fixture.component.d.ts +6 -0
  29. package/lib/components/plano-configurations/plano-configurations.component.d.ts +9 -1
  30. package/lib/components/plano-tools/delete-task/delete-task.component.d.ts +2 -0
  31. package/lib/components/plano-tools/layout-touchup/layout-touchup.component.d.ts +50 -0
  32. package/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.d.ts +331 -0
  33. package/lib/components/plano-tools/tool-page-header/tool-page-header.component.d.ts +8 -0
  34. package/lib/components/plano-tools/tools-parent/tools-parent.component.d.ts +4 -2
  35. package/lib/components/store-plano/store-plano.component.d.ts +1 -0
  36. package/lib/services/store-builder.service.d.ts +14 -1
  37. package/lib/tango-store-builder.module.d.ts +61 -58
  38. package/lib/tango-store-plano.module.d.ts +1 -1
  39. package/package.json +1 -1
@@ -54,13 +54,13 @@ export declare class PlanoRolloutTableComponent implements OnInit, OnDestroy {
54
54
  paginationSize(): number;
55
55
  onPageChange(pageOffset: number): void;
56
56
  onPageSizeChange(pageSize: number): void;
57
- getTaskStatus(data: any, type: string): "completed" | "yetToAssign" | "reviewPending" | "taskAssigned" | undefined;
58
- getTaskTooltip(data: any, type: string): "Review Pending" | "Yet to Assign" | "Task Assigned" | "Completed" | undefined;
57
+ getTaskStatus(data: any, type: string): "yetToAssign" | "taskAssigned" | "completed" | "reviewPending" | undefined;
58
+ getTaskTooltip(data: any, type: string): "Yet to Assign" | "Task Assigned" | "Review Pending" | "Completed" | undefined;
59
59
  showBreach(data: any, type: string): boolean;
60
60
  updateQueryParams(): void;
61
61
  ngOnDestroy(): void;
62
- getStatus(data: any): "Review Pending" | "Yet to Assign" | "Task Assigned" | "Ready to Publish" | "Published" | undefined;
63
- getStatusBadge(data: any): "yetToAssign" | "reviewPending" | "taskAssigned" | "primaryBadgeStyle" | "bg-success" | undefined;
62
+ getStatus(data: any): "Yet to Assign" | "Task Assigned" | "Review Pending" | "Ready to Publish" | "Published" | undefined;
63
+ getStatusBadge(data: any): "yetToAssign" | "taskAssigned" | "reviewPending" | "primaryBadgeStyle" | "bg-success" | undefined;
64
64
  onExport(): void;
65
65
  static ɵfac: i0.ɵɵFactoryDeclaration<PlanoRolloutTableComponent, never>;
66
66
  static ɵcmp: i0.ɵɵComponentDeclaration<PlanoRolloutTableComponent, "lib-plano-rollout-table", never, {}, {}, never, never, false, never>;
@@ -54,14 +54,14 @@ export declare class PlanoVerificationTableComponent implements OnInit, OnDestro
54
54
  onPageChange(pageOffset: number): void;
55
55
  onPageSizeChange(pageSize: number): void;
56
56
  planoFloorDetails(data: any): string | 1;
57
- getTaskStatus(data: any, type: string): "completed" | "yetToAssign" | "reviewPending" | "taskAssigned" | undefined;
58
- getTaskTooltip(data: any, type: string): "Review Pending" | "Yet to Assign" | "Task Assigned" | "Task Scheduled" | "Completed" | undefined;
59
- getZoneStatus(data: any): "completed" | "yetToAssign" | "reviewPending" | "taskAssigned" | "flag";
57
+ getTaskStatus(data: any, type: string): "yetToAssign" | "taskAssigned" | "completed" | "reviewPending" | undefined;
58
+ getTaskTooltip(data: any, type: string): "Yet to Assign" | "Task Assigned" | "Review Pending" | "Completed" | "Task Scheduled" | undefined;
59
+ getZoneStatus(data: any): "yetToAssign" | "taskAssigned" | "completed" | "reviewPending" | "flag";
60
60
  getZoneTooltip(data: any): any;
61
61
  getProgressValue(data: any): 100 | 50 | 25;
62
62
  showBreach(data: any, type: string): boolean;
63
- getStatus(data: any): "Review Pending" | "Yet to Assign" | "Task Assigned" | "Ready to Publish" | "Published" | "Task Scheduled" | "Completed" | undefined;
64
- getStatusBadge(data: any): "completed" | "yetToAssign" | "reviewPending" | "taskAssigned" | "primaryBadgeStyle" | "bg-success" | undefined;
63
+ getStatus(data: any): "Yet to Assign" | "Task Assigned" | "Review Pending" | "Completed" | "Ready to Publish" | "Published" | "Task Scheduled" | undefined;
64
+ getStatusBadge(data: any): "yetToAssign" | "taskAssigned" | "completed" | "reviewPending" | "primaryBadgeStyle" | "bg-success" | undefined;
65
65
  getSubmit(data: any): boolean;
66
66
  updateQueryParams(): void;
67
67
  ngOnDestroy(): void;
@@ -46,6 +46,8 @@ export declare class ZoneEditableFixtureComponent implements OnInit, OnChanges,
46
46
  bg: string;
47
47
  border: string;
48
48
  }[];
49
+ private readonly ZONE_DIFF_COLOR;
50
+ private readonly ZONE_MATCH_COLOR;
49
51
  sectionByZones: {
50
52
  zone: string;
51
53
  section: {
@@ -80,6 +82,10 @@ export declare class ZoneEditableFixtureComponent implements OnInit, OnChanges,
80
82
  }[];
81
83
  isToggleAvailable(): boolean;
82
84
  onToggleOthers(zone: string): Promise<void>;
85
+ private getZoneBrandsFromConfig;
86
+ private zoneBrandKey;
87
+ private isZoneBrandsDifferent;
88
+ private zoneColor;
83
89
  private snapshotBrandsByZone;
84
90
  private loadHeaders;
85
91
  private loadBrandsForHeader;
@@ -1,6 +1,7 @@
1
1
  import { ChangeDetectorRef, ElementRef, OnInit } from "@angular/core";
2
2
  import { AbstractControl, FormArray, FormBuilder, FormGroup } from "@angular/forms";
3
3
  import { NgbModal } from "@ng-bootstrap/ng-bootstrap";
4
+ import { Router } from "@angular/router";
4
5
  import { GlobalStateService, PageInfoService } from "tango-app-ui-global";
5
6
  import { ToastService } from "tango-app-ui-shared";
6
7
  import { PlanoDataService } from "../../services/plano-data.service";
@@ -16,6 +17,7 @@ export declare class PlanoConfigurationsComponent implements OnInit {
16
17
  private modelService;
17
18
  private cd;
18
19
  private pageInfo;
20
+ private router;
19
21
  formRef: ElementRef;
20
22
  brandMetaRef: ElementRef;
21
23
  selectedTab: string;
@@ -29,7 +31,13 @@ export declare class PlanoConfigurationsComponent implements OnInit {
29
31
  brandMetaList: any[];
30
32
  isBrandMetaEdit: boolean;
31
33
  brandMetaSearch: string;
32
- constructor(fb: FormBuilder, dataService: PlanoDataService, gs: GlobalStateService, builderService: StoreBuilderService, toast: ToastService, modelService: NgbModal, cd: ChangeDetectorRef, pageInfo: PageInfoService);
34
+ constructor(fb: FormBuilder, dataService: PlanoDataService, gs: GlobalStateService, builderService: StoreBuilderService, toast: ToastService, modelService: NgbModal, cd: ChangeDetectorRef, pageInfo: PageInfoService, router: Router);
35
+ /**
36
+ * Hidden entry point to the internal plano-tools page.
37
+ * Triggered from an invisible 1×1 hit-area below the config side card —
38
+ * for ops/devs who know it's there. Not discoverable in the UI.
39
+ */
40
+ goToPlanoTools(): void;
33
41
  ngOnInit(): Promise<void>;
34
42
  setPageData(): void;
35
43
  loadBrandData(): Promise<void>;
@@ -7,6 +7,7 @@ export declare class DeleteTaskComponent implements OnInit, OnDestroy {
7
7
  private sbs;
8
8
  private gs;
9
9
  clientId: string;
10
+ taskType: 'fixture' | 'zoneVerification';
10
11
  storeOptions: StoreOption[];
11
12
  initialStores: StoreOption[];
12
13
  selectedStores: StoreOption[];
@@ -18,6 +19,7 @@ export declare class DeleteTaskComponent implements OnInit, OnDestroy {
18
19
  ngOnInit(): void;
19
20
  loadStores(): void;
20
21
  onStoresSelected(stores: StoreOption[]): void;
22
+ onTaskTypeChange(): void;
21
23
  onSubmit(): void;
22
24
  showMessage(msg: string, type: 'success' | 'error'): void;
23
25
  ngOnDestroy(): void;
@@ -0,0 +1,50 @@
1
+ import { OnDestroy, OnInit } from "@angular/core";
2
+ import { Router } from "@angular/router";
3
+ import { GlobalStateService } from "tango-app-ui-global";
4
+ import { ToastService } from "tango-app-ui-shared";
5
+ import { StoreBuilderService } from "../../../services/store-builder.service";
6
+ import * as i0 from "@angular/core";
7
+ interface StoreTouchupOption {
8
+ id: string;
9
+ label: string;
10
+ storeId?: string;
11
+ }
12
+ /**
13
+ * Layout Touchup — internal tool selector.
14
+ *
15
+ * Two-step selector (Store → Floor). On "Open Editor", navigates to the
16
+ * existing manage-planogram route with `touchup=1` query param. The existing
17
+ * ManageStorePlanoComponent detects this and switches to touchup behaviour:
18
+ * - status-affecting buttons (publish / assign / redo / revoke) hidden
19
+ * - Save calls /managePlano/updateLayoutTouchup (no task cascade)
20
+ *
21
+ * No canvas rendering or fixture editor lives here — the existing edit-plano
22
+ * surface IS the editor, so the visual is identical to the verification flow.
23
+ */
24
+ export declare class LayoutTouchupComponent implements OnInit, OnDestroy {
25
+ private apiService;
26
+ private gs;
27
+ private toast;
28
+ private router;
29
+ private destroy$;
30
+ clientId: string;
31
+ storeOptions: StoreTouchupOption[];
32
+ selectedStore: StoreTouchupOption | null;
33
+ floorOptions: {
34
+ id: string;
35
+ label: string;
36
+ }[];
37
+ selectedFloorId: string;
38
+ isLoadingStores: boolean;
39
+ isLoadingFloor: boolean;
40
+ constructor(apiService: StoreBuilderService, gs: GlobalStateService, toast: ToastService, router: Router);
41
+ ngOnInit(): void;
42
+ ngOnDestroy(): void;
43
+ loadStores(): void;
44
+ onStoreChange(planoId: string | null): void;
45
+ loadFloorsForPlano(planoId: string): void;
46
+ openEditor(): void;
47
+ static ɵfac: i0.ɵɵFactoryDeclaration<LayoutTouchupComponent, never>;
48
+ static ɵcmp: i0.ɵɵComponentDeclaration<LayoutTouchupComponent, "lib-layout-touchup", never, {}, {}, never, never, false, never>;
49
+ }
50
+ export {};
@@ -0,0 +1,331 @@
1
+ import { AfterViewInit, ChangeDetectorRef, ElementRef, OnDestroy, OnInit, TemplateRef } from "@angular/core";
2
+ import { Location, TitleCasePipe } from "@angular/common";
3
+ import { FormArray, FormBuilder, FormControl, FormGroup } from "@angular/forms";
4
+ import { ActivatedRoute, Router } from "@angular/router";
5
+ import { Subject, Subscription } from "rxjs";
6
+ import { NgbAccordionDirective, NgbModal } from "@ng-bootstrap/ng-bootstrap";
7
+ import * as fabric from "fabric";
8
+ import { GlobalStateService, PageInfoService } from "tango-app-ui-global";
9
+ import { ToastService } from "tango-app-ui-shared";
10
+ import { StoreBuilderService } from "../../../../services/store-builder.service";
11
+ import { DropdownIF } from "../../../../interfaces/plano-general.interface";
12
+ import * as i0 from "@angular/core";
13
+ type BoundFixtureGroup = {
14
+ fixtureGroup: fabric.Group;
15
+ offsetX: number;
16
+ offsetY: number;
17
+ _tempOldTop?: number;
18
+ _tempOldLeft?: number;
19
+ };
20
+ /**
21
+ * Layout Touchup Editor — full clone of ManageStorePlanoComponent for the
22
+ * internal Layout Touchup tool flow.
23
+ *
24
+ * Identical canvas rendering, fixture editor (uses the same 3 standalone tab
25
+ * components from TangoStoreBuilderModule with `revertOnEdit=false` so per-
26
+ * fixture saves don't cascade), and form patching logic — verification /
27
+ * task / publish / assign UI is removed from the template so users can't
28
+ * accidentally mutate task state.
29
+ *
30
+ * Top "Save" calls /managePlano/updateLayoutTouchup which on the backend:
31
+ * - rejects any add/remove of walls / fixtures / entrances / otherElements
32
+ * - upserts geometry + fixture detail fields ONLY
33
+ * - never touches processedTask / planoTaskCompliance / planoCompliance
34
+ * - never flips floor status (verificationStatus, isPlanoApproved, etc.)
35
+ *
36
+ * Maintenance note: keep this file in approximate sync with
37
+ * manage-store-plano.component.ts for canvas-rendering bug fixes. The two are
38
+ * intentionally independent so the verification flow is never destabilized by
39
+ * touchup changes (and vice versa).
40
+ */
41
+ export declare class TouchupEditorComponent implements AfterViewInit, OnDestroy, OnInit {
42
+ private apiService;
43
+ private route;
44
+ private fb;
45
+ private gs;
46
+ private titleCase;
47
+ private toastService;
48
+ private modalService;
49
+ private pageInfo;
50
+ private location;
51
+ private router;
52
+ private cd;
53
+ canvasRef: ElementRef<HTMLCanvasElement>;
54
+ containerRef: ElementRef<HTMLDivElement>;
55
+ noStoreVideoModalRef: TemplateRef<any>;
56
+ applyLogicsModalRef: TemplateRef<any>;
57
+ approveLayoutModalRef: TemplateRef<any>;
58
+ bodyAccordion?: NgbAccordionDirective;
59
+ onResize(): void;
60
+ destroy$: Subject<unknown>;
61
+ clientId: string;
62
+ canvas: fabric.Canvas;
63
+ zoomLevel: number;
64
+ wallThickness: number;
65
+ verticalMargin: number;
66
+ wallBindings: Map<fabric.Group, BoundFixtureGroup[]>;
67
+ layoutForm: FormGroup;
68
+ selectedFloorId: FormControl<string | null>;
69
+ floorsList: DropdownIF[][];
70
+ fixtureConfigSubscriptions: Subscription[];
71
+ fixtureTemplateIdSubscriptions: Subscription[];
72
+ otherElementsSubscriptions: Subscription[];
73
+ planoData: any;
74
+ floorData: any;
75
+ readonly originalFloorData: any;
76
+ cdnUrl: string;
77
+ fixtureTemplates: any[];
78
+ allFixtures: any[];
79
+ allFixtureInstances: any[];
80
+ storeFeedback: any;
81
+ zoneFeedback: any;
82
+ selectedZoneFeedback: any;
83
+ private isClComplianceRow;
84
+ get zonePendingCount(): number;
85
+ get zoneRedoCount(): number;
86
+ get zoneRedoStatus(): boolean;
87
+ get zoneTaskStyle(): {
88
+ name: string;
89
+ class: string;
90
+ };
91
+ get showTopPublish(): boolean;
92
+ get topPublishDisabled(): boolean;
93
+ readonly shouldRevertOnEdit: boolean;
94
+ readonly canMutateStructure: boolean;
95
+ isSyncingZoneResponse: boolean;
96
+ selectedFixture: any;
97
+ selectedFixtureData: any;
98
+ selectedFixtureFeedback: any;
99
+ editFixture: boolean;
100
+ editFixtureSection: "basic-details" | "products" | "vms";
101
+ activeFeedbackTab: "fixture" | "zone";
102
+ editFromTab: "fixture" | "zone";
103
+ submitFixture: boolean;
104
+ highlightedFixtureFormId: string | null;
105
+ storeMetrics: {
106
+ floorCount: number;
107
+ fixtureCount: number;
108
+ vmCount: number;
109
+ };
110
+ isPageLoading: boolean;
111
+ isRightPanelCollapsed: boolean;
112
+ isLeftPanelCollapsed: boolean;
113
+ selectedView: "tree" | "detail";
114
+ publishingState: "layout" | "layout-redo" | "fixture" | "fixture-redo" | "vm" | "vm-redo" | "complete" | "";
115
+ disabledPublish: boolean;
116
+ disableEdit: boolean;
117
+ isSavingLayout: boolean;
118
+ layoutHasUnsavedChanges: boolean;
119
+ taskInfo: any;
120
+ taskStyle: {
121
+ layout: {
122
+ name: string;
123
+ class: string;
124
+ };
125
+ fixture: {
126
+ name: string;
127
+ class: string;
128
+ };
129
+ vm: {
130
+ name: string;
131
+ class: string;
132
+ };
133
+ };
134
+ otherElementList: DropdownIF[];
135
+ storeList: any;
136
+ selectedStoreName: any;
137
+ private activeHighlight;
138
+ private cancelHighlightBlink;
139
+ isButtonLoading: boolean;
140
+ isStoreTourLoading: boolean;
141
+ layoutBounds: any;
142
+ showLayout: boolean;
143
+ clCount: number;
144
+ wallCount: number;
145
+ toggle: boolean;
146
+ constructor(apiService: StoreBuilderService, route: ActivatedRoute, fb: FormBuilder, gs: GlobalStateService, titleCase: TitleCasePipe, toastService: ToastService, modalService: NgbModal, pageInfo: PageInfoService, location: Location, router: Router, cd: ChangeDetectorRef);
147
+ ngOnInit(): void;
148
+ ngAfterViewInit(): void;
149
+ updateAllPositions(): Promise<void>;
150
+ applyGroupTransform(selection: fabric.ActiveSelection): void;
151
+ resizeCanvas(): void;
152
+ setupZoomHandlers(): void;
153
+ setPageData(): void;
154
+ onFixtureSave(): void;
155
+ onFixturePageCancel(): Promise<void>;
156
+ onFixtureSubmit(event: any): void;
157
+ togglePanel(side: "left" | "right", action?: boolean): void;
158
+ onFeedbackTabChange(tab: "fixture" | "zone"): void;
159
+ getZoneVerificationFeedback(planoId: string, floorId: string): Promise<unknown>;
160
+ selectZoneFeedback(fixtureId: string): void;
161
+ getStoreFeedback(planoId: string, floorId: string, filter: any, checkPublishState?: boolean): Promise<unknown>;
162
+ calculatePublishingState(): void;
163
+ getTemplate(fixtureConfigId: string): Promise<Object>;
164
+ processLayoutFeedback(storeFeedback: any[]): Promise<void>;
165
+ processFixtureFeedback(storeFeedback: any[]): void;
166
+ processVmFeedback(storeFeedback: any[]): void;
167
+ transferArrayItem<T = any>(currentArray: T[], targetArray: T[], currentIndex: number, targetIndex: number): void;
168
+ reorderFixture(floorData: any): void;
169
+ getElementValue(group: any): any;
170
+ private getWallByNumber;
171
+ roundToTwo(num: number): number;
172
+ getStoreFixtures(storeId: string, enable?: boolean): Promise<void>;
173
+ extractAllFixtures(floorData: any): void;
174
+ renderFloor(update?: boolean): Promise<void>;
175
+ drawInitialContent(): Promise<void>;
176
+ private getFullLayoutBounds;
177
+ private fitCanvasToLayoutAnimated;
178
+ drawLayoutElements(): Promise<true | undefined>;
179
+ private isPointInsidePolygon;
180
+ private getOccupiedRects;
181
+ private rectsOverlap;
182
+ private computeEmptyMargin;
183
+ drawFixtureRowLabel(text: string, x: number, y: number): void;
184
+ drawWall(canvas: fabric.Canvas, x: number, y: number, height: number, width: number, elementData: any): Promise<fabric.Group & {
185
+ objType: string;
186
+ data: any;
187
+ }>;
188
+ drawFixture(canvas: fabric.Canvas, x: number, y: number, height: number, width: number, fixtureData: any): Promise<(fabric.Group & {
189
+ wallIndex: number;
190
+ fixtureIndex: number;
191
+ fixtureId: string;
192
+ fixtureType: "wall" | "floor";
193
+ issue: boolean;
194
+ issueData: any;
195
+ taskType: string;
196
+ vmConfig: [];
197
+ objType: string;
198
+ }) | undefined>;
199
+ drawEntrance(canvas: fabric.Canvas, x: number, y: number, width: number, height: number, arrowWidth: number, elementData: any): void;
200
+ drawOtherElementsWithLabel(canvas: fabric.Canvas, x: number, y: number, a: number, width: number, height: number, element: any): fabric.Group;
201
+ drawBg(): void;
202
+ subscribeToFixtureConfigIdChanges(): void;
203
+ subscribeToOtherElementsChanges(): void;
204
+ updateCanvasOtherElementLabel(elementRef: any): void;
205
+ rotateCanvas(canvas: fabric.Canvas, angleDeg: number): void;
206
+ selectFixtureOnCanvasClick(target: any, collapseTaskInfo?: boolean): void;
207
+ selectFixtureFeedback(fixtureId: string, collapseTaskInfo?: boolean): void;
208
+ getFixtureTemplates(): Promise<void>;
209
+ createForm(): void;
210
+ get getFormWalls(): FormArray<any>;
211
+ get getFormFloorFixtures(): FormArray<any>;
212
+ get getFormFloorOtherElements(): FormArray<any>;
213
+ get getEntrances(): any;
214
+ get showFixturePreview(): boolean;
215
+ getWallOtherElements(wallIndex: number): FormArray<any>;
216
+ getFormFixtures(wallIndex: number): FormArray<any>;
217
+ patchWallElements({ elementType, elementNumber }: Record<string, any>): FormGroup<{
218
+ elementType: FormControl<any>;
219
+ elementNumber: FormControl<any>;
220
+ fixtures: FormArray<FormControl<unknown>>;
221
+ otherElements: FormArray<FormControl<unknown>>;
222
+ }>;
223
+ patchFixture({ fixtureName, fixtureConfigId, _id }: Record<string, any>): FormGroup<{
224
+ fixtureName: FormControl<any>;
225
+ fixtureConfigId: FormControl<any>;
226
+ _id: FormControl<any>;
227
+ }>;
228
+ addWallSpace(wallIndex: number, operation: "increment" | "decrement"): void;
229
+ deleteFixture(fixtureType: "wall" | "floor", fixtureIndex: number, wallIndex?: number): void;
230
+ private hasUnsavedLayoutChanges;
231
+ removeOtherElement(elementType: "wall" | "floor", elementIndex: number, wallIndex?: number): void;
232
+ changeFixtureTemplate(configId: string, fixtureType: "wall" | "floor", fixtureIndex: number, wallIndex?: number): void;
233
+ onDrop(event: any, destinationWallIndex: number | "floor", destinationFixtureIndex?: number): void;
234
+ downloadCanvas(): void;
235
+ private createExportLayoutBackground;
236
+ private buildLayoutPolygonFromWalls;
237
+ handleFeedbackAction(userAction: any): Promise<void>;
238
+ private mergeAiFixtureData;
239
+ private replaceFixtureInFloorData;
240
+ private buildLocalActionComment;
241
+ private mergeZoneFixtureData;
242
+ handleZoneFeedbackAction(userAction: any): Promise<void>;
243
+ private buildZoneModifiedAnswer;
244
+ private persistZoneEditAccepted;
245
+ rotateWall(eleNumber: number): void;
246
+ addNewWall(eleNumber: number): void;
247
+ addNewEntrance(): void;
248
+ private isAddingFixture;
249
+ addNewFixture(fixtureType: "wall" | "floor", wallIndex?: number): Promise<void>;
250
+ private addNewFixtureInternal;
251
+ addNewOtherElements(posType: "wall" | "floor", wallIndex?: number): void;
252
+ findEmptyCenterSpot(objectWidthPx: number, objectHeightPx: number, tempOccupied?: {
253
+ x: number;
254
+ y: number;
255
+ width: number;
256
+ height: number;
257
+ }[]): {
258
+ x: number;
259
+ y: number;
260
+ } | null;
261
+ cancelEdit(): Promise<void>;
262
+ listenToDeleteKey(): void;
263
+ deleteEntrance(): void;
264
+ deleteWall(eleNumber: number): Promise<void>;
265
+ updateWallElementNumber(): void;
266
+ toPixels(value: number, unit: string, dpi?: number): number;
267
+ fromPixels(pixels: number, unit: string, dpi?: number): number;
268
+ confirmEdit(): Promise<boolean>;
269
+ confirmDeleteWall(): Promise<boolean>;
270
+ updateFixtureCoordinates(fixtures?: any): void;
271
+ updateOtherElementsCoordinates(): void;
272
+ updateWallCoordinates(): void;
273
+ updateEntranceCoordinates(): void;
274
+ /**
275
+ * Touchup save — calls /managePlano/updateLayoutTouchup which never wipes
276
+ * task rows or flips floor status. Shows a touchup-specific confirm dialog
277
+ * (the original verification flow's confirmEdit warns about resetting
278
+ * progress — not applicable here).
279
+ *
280
+ * editMode arg is kept for template parity with manage-store-plano's Save
281
+ * button, but is ignored — every touchup save behaves the same way.
282
+ */
283
+ updateLayout(_editMode?: boolean): Promise<void>;
284
+ /**
285
+ * Layout Touchup — Sync zone response.
286
+ *
287
+ * For each zone-verification compliance row on this floor, rewrites
288
+ * `answers[0].shelfConfig` to match the fixture's current shelves: shelf
289
+ * count + per-shelf zone come from the fixture, user-submitted
290
+ * productBrandName / productCategory are preserved (zone-normalized for
291
+ * newly added shelves). See /managePlano/syncZoneResponseFromFixtures on
292
+ * the BE.
293
+ *
294
+ * Only available in non-edit mode (gated in template via *ngIf="!layoutForm.enabled").
295
+ */
296
+ syncZoneResponse(): Promise<void>;
297
+ assignTask(): Promise<void>;
298
+ revokeZoneTask(): void;
299
+ publishZoneVerification(): Promise<void>;
300
+ publishZoneRedo(): Promise<void>;
301
+ onClickEdit(): void;
302
+ taskDetails(planoId: any, floorId: any): Promise<unknown>;
303
+ getStatus(type: any): {
304
+ name: string;
305
+ class: string;
306
+ };
307
+ getElementNumber(group: any): number | null;
308
+ highlightFixture(group: any, blink?: boolean): void;
309
+ removeHighlight(): void;
310
+ keepHighlightOnTop: () => void;
311
+ highlightFixtureInAccordion(fixtureData: any): void;
312
+ onChangeFixtureOnFeedbackPanel({ currentFixture, action, }: {
313
+ currentFixture?: string;
314
+ action?: "next" | "previous";
315
+ }, collapseTaskInfo?: boolean): void;
316
+ revokeTask(): void;
317
+ publish(): void;
318
+ goToStoreTourPage(): Promise<void>;
319
+ openNoVideoFoundModal(): Promise<void>;
320
+ goToStoreCameraPage(): void;
321
+ getStoreList(planoId?: string): void;
322
+ onSelected(event: any): Promise<void>;
323
+ applyPIDLogics(): Promise<void>;
324
+ onClickApplyLogics(): Promise<void>;
325
+ onClickApproveLayout(): Promise<void>;
326
+ approveLayout(): Promise<void>;
327
+ ngOnDestroy(): void;
328
+ static ɵfac: i0.ɵɵFactoryDeclaration<TouchupEditorComponent, never>;
329
+ static ɵcmp: i0.ɵɵComponentDeclaration<TouchupEditorComponent, "lib-touchup-editor", never, {}, {}, never, never, false, never>;
330
+ }
331
+ export {};
@@ -0,0 +1,8 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class ToolPageHeaderComponent {
3
+ title: string;
4
+ description: string;
5
+ backLink: string;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToolPageHeaderComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolPageHeaderComponent, "lib-tool-page-header", never, { "title": { "alias": "title"; "required": false; }; "description": { "alias": "description"; "required": false; }; "backLink": { "alias": "backLink"; "required": false; }; }, {}, never, never, false, never>;
8
+ }
@@ -1,16 +1,18 @@
1
1
  import { OnInit } from "@angular/core";
2
2
  import { NgbModal } from "@ng-bootstrap/ng-bootstrap";
3
- import { GlobalStateService } from "tango-app-ui-global";
3
+ import { GlobalStateService, PageInfoService } from "tango-app-ui-global";
4
4
  import { Router } from "@angular/router";
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class ToolsParentComponent implements OnInit {
7
7
  private ngbModal;
8
8
  private router;
9
9
  private gs;
10
+ private pageInfo;
10
11
  clientId: string;
11
12
  private readonly destroy$;
12
- constructor(ngbModal: NgbModal, router: Router, gs: GlobalStateService);
13
+ constructor(ngbModal: NgbModal, router: Router, gs: GlobalStateService, pageInfo: PageInfoService);
13
14
  ngOnInit(): void;
15
+ setPageData(): void;
14
16
  onClickCreateFixtureTemplate(): void;
15
17
  ngOnDestroy(): void;
16
18
  static ɵfac: i0.ɵɵFactoryDeclaration<ToolsParentComponent, never>;
@@ -122,6 +122,7 @@ export declare class StorePlanoComponent implements OnInit, AfterViewInit, OnDes
122
122
  private isFutureTaskDate;
123
123
  openSetCurrentModal(revisionIndex: number): void;
124
124
  private doOpenSetCurrentModal;
125
+ toggleStagingFlag(revisionIndex: number): void;
125
126
  openEditNameModal(revisionIndex: number): void;
126
127
  static ɵfac: i0.ɵɵFactoryDeclaration<StorePlanoComponent, never>;
127
128
  static ɵcmp: i0.ɵɵComponentDeclaration<StorePlanoComponent, "app-store-plano", never, {}, {}, never, never, false, never>;
@@ -79,6 +79,16 @@ export declare class StoreBuilderService implements OnDestroy {
79
79
  updateApprovalStatus(data: any): import("rxjs").Observable<Object>;
80
80
  getStoreFixturesfeedback(data: any): import("rxjs").Observable<Object>;
81
81
  updateStorePlano(data: any): import("rxjs").Observable<Object>;
82
+ updateLayoutTouchup(data: {
83
+ planoId: string;
84
+ floorId: string;
85
+ data: any;
86
+ }): import("rxjs").Observable<Object>;
87
+ getStoresForTouchup(): import("rxjs").Observable<Object>;
88
+ syncZoneResponseFromFixtures(data: {
89
+ planoId: string;
90
+ floorId: string;
91
+ }): import("rxjs").Observable<Object>;
82
92
  getStoreFeedback(data: any): import("rxjs").Observable<Object>;
83
93
  getRolloutFeedback(data: any): import("rxjs").Observable<Object>;
84
94
  getZoneVerificationFeedback(data: any): import("rxjs").Observable<Object>;
@@ -229,7 +239,10 @@ export declare class StoreBuilderService implements OnDestroy {
229
239
  fixtureNumber?: number;
230
240
  associatedElementFixtureNumber?: number;
231
241
  }): import("rxjs").Observable<Object>;
232
- deleteTaskForStores(data: any): import("rxjs").Observable<Object>;
242
+ deleteTaskForStores(data: {
243
+ storeNames: string[];
244
+ taskType: "fixture" | "zoneVerification";
245
+ }): import("rxjs").Observable<Object>;
233
246
  getFloorsWithStatus(storeName: string, clientId: string): import("rxjs").Observable<Object>;
234
247
  moveStoreBucket(data: {
235
248
  floorId: string;