@memberjunction/ng-record-clone 0.0.1-seed.1 → 6.2.0-edge.3
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/LICENSE +183 -0
- package/README.md +241 -3
- package/dist/lib/clone-lineage-chip.component.d.ts +50 -0
- package/dist/lib/clone-lineage-chip.component.d.ts.map +1 -0
- package/dist/lib/clone-lineage-chip.component.js +448 -0
- package/dist/lib/clone-lineage-chip.component.js.map +1 -0
- package/dist/lib/clone-plan-tree.component.d.ts +51 -0
- package/dist/lib/clone-plan-tree.component.d.ts.map +1 -0
- package/dist/lib/clone-plan-tree.component.js +634 -0
- package/dist/lib/clone-plan-tree.component.js.map +1 -0
- package/dist/lib/clone-progress.component.d.ts +12 -0
- package/dist/lib/clone-progress.component.d.ts.map +1 -0
- package/dist/lib/clone-progress.component.js +151 -0
- package/dist/lib/clone-progress.component.js.map +1 -0
- package/dist/lib/clone-result.component.d.ts +40 -0
- package/dist/lib/clone-result.component.d.ts.map +1 -0
- package/dist/lib/clone-result.component.js +357 -0
- package/dist/lib/clone-result.component.js.map +1 -0
- package/dist/lib/clone-review.component.d.ts +58 -0
- package/dist/lib/clone-review.component.d.ts.map +1 -0
- package/dist/lib/clone-review.component.js +581 -0
- package/dist/lib/clone-review.component.js.map +1 -0
- package/dist/lib/clone-scope-controls.component.d.ts +81 -0
- package/dist/lib/clone-scope-controls.component.d.ts.map +1 -0
- package/dist/lib/clone-scope-controls.component.js +394 -0
- package/dist/lib/clone-scope-controls.component.js.map +1 -0
- package/dist/lib/clone-values.component.d.ts +55 -0
- package/dist/lib/clone-values.component.d.ts.map +1 -0
- package/dist/lib/clone-values.component.js +493 -0
- package/dist/lib/clone-values.component.js.map +1 -0
- package/dist/lib/record-clone-panel.component.d.ts +247 -0
- package/dist/lib/record-clone-panel.component.d.ts.map +1 -0
- package/dist/lib/record-clone-panel.component.js +1252 -0
- package/dist/lib/record-clone-panel.component.js.map +1 -0
- package/dist/lib/record-clone-slide-in.component.d.ts +83 -0
- package/dist/lib/record-clone-slide-in.component.d.ts.map +1 -0
- package/dist/lib/record-clone-slide-in.component.js +206 -0
- package/dist/lib/record-clone-slide-in.component.js.map +1 -0
- package/dist/lib/record-clone-types.d.ts +89 -0
- package/dist/lib/record-clone-types.d.ts.map +1 -0
- package/dist/lib/record-clone-types.js +29 -0
- package/dist/lib/record-clone-types.js.map +1 -0
- package/dist/lib/record-clone.module.d.ts +16 -0
- package/dist/lib/record-clone.module.d.ts.map +1 -0
- package/dist/lib/record-clone.module.js +69 -0
- package/dist/lib/record-clone.module.js.map +1 -0
- package/dist/lib/record-clone.service.d.ts +42 -0
- package/dist/lib/record-clone.service.d.ts.map +1 -0
- package/dist/lib/record-clone.service.js +123 -0
- package/dist/lib/record-clone.service.js.map +1 -0
- package/dist/public-api.d.ts +16 -0
- package/dist/public-api.d.ts.map +1 -0
- package/dist/public-api.js +16 -0
- package/dist/public-api.js.map +1 -0
- package/package.json +47 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-plan-tree.component.js","sourceRoot":"","sources":["../../src/lib/clone-plan-tree.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Expandable hierarchical tree rendering a RecordClonePlan.\n *\n * Implements §12.3 & §12.4 of the Record Cloning architectural blueprint. Renders the\n * planned record graph as an interactive tree with per-edge policy pills (Deep/Reference/Skip)\n * with lock tooltips, per-node action badges, entity counts summary, and live search.\n */\n\nimport {\n Component,\n ChangeDetectionStrategy,\n Input,\n Output,\n EventEmitter,\n ChangeDetectorRef,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MJButtonDirective } from '@memberjunction/ng-ui-components';\nimport type {\n RecordClonePlanDetails,\n RecordClonePlanNode,\n RecordClonePlanEdge,\n} from '@memberjunction/core-entities';\nimport type { CloneTreeNodeViewModel, CloneEdgePolicyChange } from './record-clone-types';\n\n@Component({\n standalone: true,\n selector: 'mj-clone-plan-tree',\n template: `\n <div class=\"plan-tree-container\">\n <!-- Search & Toolbar -->\n <div class=\"tree-toolbar\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-magnifying-glass search-icon\"></i>\n <input\n type=\"text\"\n class=\"mj-input search-input\"\n placeholder=\"Search entities or records...\"\n [ngModel]=\"SearchTerm\"\n (ngModelChange)=\"OnSearchTermChange($event)\" />\n @if (SearchTerm) {\n <button\n type=\"button\"\n class=\"clear-search-btn\"\n (click)=\"OnSearchTermChange('')\"\n title=\"Clear search\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n <div class=\"tree-actions\">\n <button\n type=\"button\"\n mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"ExpandAll()\">\n Expand All\n </button>\n <button\n type=\"button\"\n mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"CollapseAll()\">\n Collapse All\n </button>\n </div>\n </div>\n\n <!-- Aggregate Counts Bar -->\n @if (Plan) {\n <div class=\"counts-bar\">\n <span class=\"count-item total\">\n <strong>{{Plan.Counts.Total}}</strong> Total\n </span>\n <span class=\"count-item create\">\n <i class=\"fa-solid fa-plus-circle\"></i>\n <strong>{{Plan.Counts.Create}}</strong> Create\n </span>\n @if (ReferenceCount > 0) {\n <span class=\"count-item reference\">\n <i class=\"fa-solid fa-link\"></i>\n <strong>{{ReferenceCount}}</strong> Reference\n </span>\n }\n @if (SkipCount > 0) {\n <span class=\"count-item skip\">\n <i class=\"fa-solid fa-forward\"></i>\n <strong>{{SkipCount}}</strong> Skip\n </span>\n }\n @if (Plan.Blocked) {\n @if (NeedsValuesOnly) {\n <span class=\"count-item skip\" title=\"Enter the required values on the Values step\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n <strong>Needs values</strong>\n </span>\n } @else {\n <span class=\"count-item blocked\">\n <i class=\"fa-solid fa-ban\"></i>\n <strong>Blocked</strong>\n </span>\n }\n }\n </div>\n }\n\n <!-- Hierarchical Node Tree -->\n <div class=\"tree-content\" role=\"list\" aria-label=\"Records in the clone plan\">\n @if (TreeNodes.length === 0) {\n <div class=\"empty-tree-message\">\n @if (SearchTerm) {\n No matching records found in the clone plan.\n } @else {\n No records planned for cloning.\n }\n </div>\n } @else {\n @for (item of FlatVisibleNodes; track item.Node.Key) {\n <div\n class=\"tree-row\"\n [class.selected]=\"SelectedNodeKey === item.Node.Key\"\n [class.is-subtype]=\"item.Node.IsSubtypeRow\"\n [style.padding-left.px]=\"item.Level * 20 + 8\"\n role=\"listitem\"\n [attr.aria-level]=\"item.Level + 1\"\n (click)=\"OnSelectNode(item.Node)\">\n\n <!-- Expand/Collapse Chevron -->\n <div class=\"chevron-cell\">\n @if (item.Children.length > 0) {\n <button\n type=\"button\"\n class=\"chevron-btn\"\n (click)=\"OnToggleExpand(item, $event)\"\n [attr.aria-expanded]=\"item.Expanded\"\n [attr.aria-label]=\"(item.Expanded ? 'Collapse ' : 'Expand ') + (item.Node.DisplayName || item.Node.EntityName)\"\n [title]=\"item.Expanded ? 'Collapse' : 'Expand'\">\n <i\n class=\"fa-solid\"\n [class.fa-chevron-down]=\"item.Expanded\"\n [class.fa-chevron-right]=\"!item.Expanded\">\n </i>\n </button>\n }\n </div>\n\n <!-- Policy Pill (if edge connects to parent) -->\n @if (item.ParentEdge) {\n <div class=\"edge-cell\">\n @if (NextPolicy(item.ParentEdge); as next) {\n <button\n type=\"button\"\n class=\"policy-pill policy-pill--toggle\"\n [class.policy-deep]=\"item.ParentEdge.Policy === 'Deep'\"\n [class.policy-ref]=\"item.ParentEdge.Policy === 'Reference'\"\n [class.policy-skip]=\"item.ParentEdge.Policy === 'Skip'\"\n [title]=\"GetEdgeTooltip(item.ParentEdge) + (next === 'Skip' ? ' Click to skip every ' + item.ParentEdge.RelatedEntityName + ' row.' : ' Click to copy these rows.')\"\n [attr.aria-label]=\"(next === 'Skip' ? 'Skip every ' : 'Copy every ') + item.ParentEdge.RelatedEntityName + ' row'\"\n (click)=\"OnPolicyToggle(item.ParentEdge, next, $event)\">\n {{item.ParentEdge.Policy}}\n </button>\n } @else {\n <span\n class=\"policy-pill\"\n [class.policy-deep]=\"item.ParentEdge.Policy === 'Deep'\"\n [class.policy-ref]=\"item.ParentEdge.Policy === 'Reference'\"\n [class.policy-skip]=\"item.ParentEdge.Policy === 'Skip'\"\n [title]=\"GetEdgeTooltip(item.ParentEdge)\">\n @if (item.ParentEdge.Locked) {\n <i class=\"fa-solid fa-lock lock-icon\"></i>\n }\n {{item.ParentEdge.Policy}}\n </span>\n }\n </div>\n }\n\n <!-- Action Badge -->\n <div class=\"action-cell\">\n <span\n class=\"action-badge\"\n [class.action-create]=\"item.Node.Action === 'Create'\"\n [class.action-ref]=\"item.Node.Action === 'Reference'\"\n [class.action-skip]=\"item.Node.Action === 'Skip'\"\n [class.action-blocked]=\"item.Node.Action === 'Blocked'\">\n {{item.Node.Action}}\n </span>\n </div>\n\n <!-- Entity & Record Label -->\n <div class=\"node-label-cell\">\n <span class=\"entity-badge\">{{item.Node.EntityName}}</span>\n <span class=\"record-title\" [title]=\"item.Node.DisplayName\">\n {{item.Node.DisplayName}}\n </span>\n @if (item.Node.Warnings && item.Node.Warnings.length > 0) {\n <span\n class=\"node-warning-badge\"\n [title]=\"item.Node.Warnings.length + ' warning(s)'\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n {{item.Node.Warnings.length}}\n </span>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n `,\n styles: [`\n .plan-tree-container {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2);\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n }\n\n .tree-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--mj-space-2);\n padding: var(--mj-space-2) var(--mj-space-3);\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .search-box {\n position: relative;\n flex: 1;\n max-width: 320px;\n display: flex;\n align-items: center;\n }\n\n .search-icon {\n position: absolute;\n left: 10px;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n pointer-events: none;\n }\n\n .search-input {\n width: 100%;\n padding: 5px 28px 5px 30px;\n font-size: var(--mj-text-xs);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n outline: none;\n }\n\n .search-input:focus {\n border-color: var(--mj-brand-primary);\n }\n\n .clear-search-btn {\n position: absolute;\n right: 8px;\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 2px;\n }\n\n .tree-actions {\n display: flex;\n gap: var(--mj-space-1-5);\n }\n\n .counts-bar {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--mj-space-3);\n padding: 6px var(--mj-space-3);\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: var(--mj-text-xs);\n }\n\n .count-item {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n }\n\n .count-item.create {\n color: var(--mj-status-success-text);\n }\n\n .count-item.reference {\n color: var(--mj-status-info-text);\n }\n\n .count-item.skip {\n color: var(--mj-text-muted);\n }\n\n .count-item.blocked {\n color: var(--mj-status-error-text);\n }\n\n .tree-content {\n display: flex;\n flex-direction: column;\n max-height: 480px;\n overflow-y: auto;\n padding: var(--mj-space-1) 0;\n }\n\n .empty-tree-message {\n padding: var(--mj-space-6);\n text-align: center;\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n }\n\n .tree-row {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n padding-top: 6px;\n padding-bottom: 6px;\n padding-right: var(--mj-space-3);\n cursor: pointer;\n user-select: none;\n border-left: 3px solid transparent;\n transition: background-color 0.1s ease;\n }\n\n .tree-row:hover {\n background: var(--mj-bg-surface-hover);\n }\n\n .tree-row.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-left-color: var(--mj-brand-primary);\n }\n\n .tree-row.is-subtype {\n font-style: italic;\n }\n\n .chevron-cell {\n width: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .chevron-btn {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 2px;\n font-size: 11px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .edge-cell {\n display: flex;\n align-items: center;\n }\n\n .policy-pill {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .policy-pill--toggle {\n border: 1px solid transparent;\n cursor: pointer;\n font-family: inherit;\n line-height: inherit;\n }\n\n .policy-pill--toggle:hover,\n .policy-pill--toggle:focus-visible {\n border-color: var(--mj-border-focus);\n outline: none;\n }\n\n .policy-pill.policy-deep {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n }\n\n .policy-pill.policy-ref {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n }\n\n .policy-pill.policy-skip {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n }\n\n .lock-icon {\n font-size: 9px;\n }\n\n .action-cell {\n display: flex;\n align-items: center;\n }\n\n .action-badge {\n display: inline-block;\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: 11px;\n font-weight: 600;\n }\n\n .action-badge.action-create {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n }\n\n .action-badge.action-ref {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n }\n\n .action-badge.action-skip {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n }\n\n .action-badge.action-blocked {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n }\n\n .node-label-cell {\n display: flex;\n align-items: center;\n gap: var(--mj-space-1-5);\n flex: 1;\n min-width: 0;\n }\n\n .entity-badge {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-card);\n padding: 1px 6px;\n border-radius: var(--mj-radius-sm);\n white-space: nowrap;\n }\n\n .record-title {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .node-warning-badge {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n font-size: 10px;\n color: var(--mj-status-warning-text);\n background: var(--mj-status-warning-bg);\n padding: 1px 5px;\n border-radius: 8px;\n margin-left: 4px;\n }\n `],\n imports: [\n CommonModule,\n FormsModule,\n MJButtonDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ClonePlanTreeComponent {\n private _plan: RecordClonePlanDetails | null = null;\n private cdr = inject(ChangeDetectorRef);\n\n /** The plan to render. Setting it rebuilds the tree. */\n @Input()\n set Plan(value: RecordClonePlanDetails | null) {\n this._plan = value;\n this.rebuildTree();\n }\n get Plan(): RecordClonePlanDetails | null {\n return this._plan;\n }\n\n /** Key of the node to highlight, e.g. when the review step links back to it. */\n @Input() SelectedNodeKey: string | null = null;\n\n /** Let the user switch unlocked Deep branches to Skip (narrowing). Default false (read-only tree). */\n @Input() AllowNarrowing = false;\n\n /** Also let the user switch Skip branches to Deep (widening; needs Clone Records: Override Scope). */\n @Input() AllowWidening = false;\n\n /** Fires when the user selects a node row. */\n @Output() NodeSelected = new EventEmitter<RecordClonePlanNode>();\n\n /** Fires when the user switches a branch's policy; the host re-plans with it as an edge override. */\n @Output() EdgePolicyChanged = new EventEmitter<CloneEdgePolicyChange>();\n\n public SearchTerm = '';\n public TreeNodes: CloneTreeNodeViewModel[] = [];\n public FlatVisibleNodes: CloneTreeNodeViewModel[] = [];\n\n public get ReferenceCount(): number {\n if (!this.Plan) return 0;\n return this.Plan.Nodes.filter(n => n.Action === 'Reference').length;\n }\n\n /** Blocked only because prompted values haven't been entered yet: not a problem on the Scope step. */\n public get NeedsValuesOnly(): boolean {\n const errors = (this.Plan?.Warnings ?? []).filter((w) => w.Severity === 'Error');\n return errors.length > 0 && errors.every((w) => w.Code === 'UNIQUE_PROMPT_REQUIRED');\n }\n\n public get SkipCount(): number {\n if (!this.Plan) return 0;\n return this.Plan.Nodes.filter(n => n.Action === 'Skip').length;\n }\n\n public OnSearchTermChange(term: string): void {\n this.SearchTerm = term;\n this.updateVisibleNodes();\n this.cdr.markForCheck();\n }\n\n public OnSelectNode(node: RecordClonePlanNode): void {\n this.SelectedNodeKey = node.Key;\n this.NodeSelected.emit(node);\n this.cdr.markForCheck();\n }\n\n public OnToggleExpand(item: CloneTreeNodeViewModel, event: MouseEvent): void {\n event.stopPropagation();\n item.Expanded = !item.Expanded;\n this.updateVisibleNodes();\n this.cdr.markForCheck();\n }\n\n public ExpandAll(): void {\n this.setAllExpanded(this.TreeNodes, true);\n this.updateVisibleNodes();\n this.cdr.markForCheck();\n }\n\n public CollapseAll(): void {\n this.setAllExpanded(this.TreeNodes, false);\n this.updateVisibleNodes();\n this.cdr.markForCheck();\n }\n\n /** The policy a click on this edge's pill would switch to, or null when the pill is read-only. */\n public NextPolicy(edge: RecordClonePlanEdge): 'Deep' | 'Skip' | null {\n if (edge.Locked || !edge.RelationshipID) return null;\n if (edge.Policy === 'Deep' && this.AllowNarrowing) return 'Skip';\n // A branch the user skipped themselves can always be put back; the host drops that override.\n if (edge.Policy === 'Skip' && (this.AllowWidening || edge.PolicySource === 'Request')) return 'Deep';\n return null;\n }\n\n public OnPolicyToggle(edge: RecordClonePlanEdge, policy: 'Deep' | 'Skip', event: MouseEvent): void {\n event.stopPropagation();\n if (!edge.RelationshipID) return;\n this.EdgePolicyChanged.emit({ RelationshipID: edge.RelationshipID, Policy: policy, RelatedEntityName: edge.RelatedEntityName });\n }\n\n public GetEdgeTooltip(edge: RecordClonePlanEdge): string {\n if (edge.Locked) {\n return `Policy is locked (${edge.PolicySource || 'system constraint'}). Cannot be modified.`;\n }\n return `Relationship policy: ${edge.Policy} (${edge.PolicySource || 'default'})`;\n }\n\n private setAllExpanded(nodes: CloneTreeNodeViewModel[], expanded: boolean): void {\n for (const node of nodes) {\n node.Expanded = expanded;\n if (node.Children.length > 0) {\n this.setAllExpanded(node.Children, expanded);\n }\n }\n }\n\n private rebuildTree(): void {\n if (!this._plan || !this._plan.Nodes || this._plan.Nodes.length === 0) {\n this.TreeNodes = [];\n this.FlatVisibleNodes = [];\n this.cdr.markForCheck();\n return;\n }\n\n const nodesByKey = new Map<string, CloneTreeNodeViewModel>();\n const edgesByToKey = new Map<string, RecordClonePlanEdge>();\n\n if (this._plan.Edges) {\n for (const edge of this._plan.Edges) {\n edgesByToKey.set(edge.ToKey, edge);\n }\n }\n\n for (const node of this._plan.Nodes) {\n const edge = edgesByToKey.get(node.Key) || null;\n nodesByKey.set(node.Key, {\n Node: node,\n ParentEdge: edge,\n Children: [],\n Expanded: true, // Expanded by default\n Level: node.Depth ?? 0,\n });\n }\n\n const roots: CloneTreeNodeViewModel[] = [];\n for (const [key, item] of nodesByKey.entries()) {\n if (item.Node.ParentKey && nodesByKey.has(item.Node.ParentKey)) {\n const parent = nodesByKey.get(item.Node.ParentKey)!;\n parent.Children.push(item);\n } else {\n roots.push(item);\n }\n }\n\n this.TreeNodes = roots;\n this.updateVisibleNodes();\n this.cdr.markForCheck();\n }\n\n private updateVisibleNodes(): void {\n const flat: CloneTreeNodeViewModel[] = [];\n const term = this.SearchTerm.trim().toLowerCase();\n\n const traverse = (node: CloneTreeNodeViewModel) => {\n const matchesSearch = !term ||\n node.Node.EntityName.toLowerCase().includes(term) ||\n (node.Node.DisplayName && node.Node.DisplayName.toLowerCase().includes(term));\n\n if (matchesSearch || this.subtreeMatches(node, term)) {\n flat.push(node);\n if (node.Expanded || term) { // auto-expand matching paths on search\n for (const child of node.Children) {\n traverse(child);\n }\n }\n }\n };\n\n for (const root of this.TreeNodes) {\n traverse(root);\n }\n\n this.FlatVisibleNodes = flat;\n }\n\n private subtreeMatches(node: CloneTreeNodeViewModel, term: string): boolean {\n if (!term) return true;\n for (const child of node.Children) {\n if (\n child.Node.EntityName.toLowerCase().includes(term) ||\n (child.Node.DisplayName && child.Node.DisplayName.toLowerCase().includes(term)) ||\n this.subtreeMatches(child, term)\n ) {\n return true;\n }\n }\n return false;\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CloneProgressUpdate } from './record-clone-types';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class CloneProgressComponent {
|
|
4
|
+
/** Latest progress update; null shows an indeterminate bar. */
|
|
5
|
+
Progress: CloneProgressUpdate | null;
|
|
6
|
+
/** Whether the update carries real progress (a percentage or rows done), not just a message. */
|
|
7
|
+
get IsDeterminate(): boolean;
|
|
8
|
+
get PercentComplete(): number;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CloneProgressComponent, never>;
|
|
10
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CloneProgressComponent, "mj-clone-progress", never, { "Progress": { "alias": "Progress"; "required": false; }; }, {}, never, never, true, never>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=clone-progress.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-progress.component.d.ts","sourceRoot":"","sources":["../../src/lib/clone-progress.component.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;;AAEhE,qBAsGa,sBAAsB;IAC/B,+DAA+D;IACtD,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAQ;IAErD,gGAAgG;IAChG,IAAW,aAAa,IAAI,OAAO,CAIlC;IAED,IAAW,eAAe,IAAI,MAAM,CAcnC;yCAzBQ,sBAAsB;2CAAtB,sBAAsB;CA0BlC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Progress display component during clone execution.
|
|
3
|
+
*
|
|
4
|
+
* Implements §12.3 of the Record Cloning architectural blueprint. Tracks percentage
|
|
5
|
+
* completion, current stage, record counts, and the specific node being processed.
|
|
6
|
+
*/
|
|
7
|
+
import { Component, ChangeDetectionStrategy, Input, } from '@angular/core';
|
|
8
|
+
import { CommonModule } from '@angular/common';
|
|
9
|
+
import { MJProgressBarComponent } from '@memberjunction/ng-ui-components';
|
|
10
|
+
import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@memberjunction/ng-shared-generic";
|
|
13
|
+
function CloneProgressComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
+
i0.ɵɵelement(0, "mj-loading", 1);
|
|
15
|
+
} if (rf & 2) {
|
|
16
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
17
|
+
i0.ɵɵproperty("Text", (ctx_r0.Progress == null ? null : ctx_r0.Progress.Message) || (ctx_r0.Progress == null ? null : ctx_r0.Progress.Phase) || "Cloning...");
|
|
18
|
+
} }
|
|
19
|
+
function CloneProgressComponent_Conditional_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
+
i0.ɵɵelementStart(0, "span", 8);
|
|
21
|
+
i0.ɵɵtext(1);
|
|
22
|
+
i0.ɵɵelementEnd();
|
|
23
|
+
} if (rf & 2) {
|
|
24
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
25
|
+
i0.ɵɵadvance();
|
|
26
|
+
i0.ɵɵtextInterpolate(ctx_r0.Progress == null ? null : ctx_r0.Progress.Message);
|
|
27
|
+
} }
|
|
28
|
+
function CloneProgressComponent_Conditional_2_Conditional_9_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
29
|
+
i0.ɵɵtext(0);
|
|
30
|
+
} if (rf & 2) {
|
|
31
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
32
|
+
i0.ɵɵtextInterpolate1(" (", ctx_r0.Progress.CurrentEntityName, ")");
|
|
33
|
+
} }
|
|
34
|
+
function CloneProgressComponent_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
+
i0.ɵɵelementStart(0, "span", 9);
|
|
36
|
+
i0.ɵɵtext(1);
|
|
37
|
+
i0.ɵɵconditionalCreate(2, CloneProgressComponent_Conditional_2_Conditional_9_Conditional_2_Template, 1, 1);
|
|
38
|
+
i0.ɵɵelementEnd();
|
|
39
|
+
} if (rf & 2) {
|
|
40
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
41
|
+
i0.ɵɵadvance();
|
|
42
|
+
i0.ɵɵtextInterpolate2("Record ", ctx_r0.Progress.CompletedRecords ?? ctx_r0.Progress.Processed ?? 0, " of ", ctx_r0.Progress.TotalRecords ?? ctx_r0.Progress.Total);
|
|
43
|
+
i0.ɵɵadvance();
|
|
44
|
+
i0.ɵɵconditional(ctx_r0.Progress.CurrentEntityName ? 2 : -1);
|
|
45
|
+
} }
|
|
46
|
+
function CloneProgressComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
47
|
+
i0.ɵɵelementStart(0, "div", 2)(1, "span", 3);
|
|
48
|
+
i0.ɵɵelement(2, "i", 4);
|
|
49
|
+
i0.ɵɵtext(3);
|
|
50
|
+
i0.ɵɵelementEnd();
|
|
51
|
+
i0.ɵɵelementStart(4, "span", 5);
|
|
52
|
+
i0.ɵɵtext(5);
|
|
53
|
+
i0.ɵɵelementEnd()();
|
|
54
|
+
i0.ɵɵelement(6, "mj-progress-bar", 6);
|
|
55
|
+
i0.ɵɵelementStart(7, "div", 7);
|
|
56
|
+
i0.ɵɵconditionalCreate(8, CloneProgressComponent_Conditional_2_Conditional_8_Template, 2, 1, "span", 8);
|
|
57
|
+
i0.ɵɵconditionalCreate(9, CloneProgressComponent_Conditional_2_Conditional_9_Template, 3, 3, "span", 9);
|
|
58
|
+
i0.ɵɵelementEnd();
|
|
59
|
+
} if (rf & 2) {
|
|
60
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
61
|
+
i0.ɵɵadvance(3);
|
|
62
|
+
i0.ɵɵtextInterpolate1(" ", (ctx_r0.Progress == null ? null : ctx_r0.Progress.Phase) || "Executing Record Clone...", " ");
|
|
63
|
+
i0.ɵɵadvance(2);
|
|
64
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.PercentComplete, "% ");
|
|
65
|
+
i0.ɵɵadvance();
|
|
66
|
+
i0.ɵɵproperty("Value", ctx_r0.PercentComplete)("Type", ctx_r0.PercentComplete > 0 ? "value" : "infinite");
|
|
67
|
+
i0.ɵɵadvance(2);
|
|
68
|
+
i0.ɵɵconditional((ctx_r0.Progress == null ? null : ctx_r0.Progress.Message) ? 8 : -1);
|
|
69
|
+
i0.ɵɵadvance();
|
|
70
|
+
i0.ɵɵconditional(ctx_r0.Progress && (ctx_r0.Progress.TotalRecords || ctx_r0.Progress.Total) ? 9 : -1);
|
|
71
|
+
} }
|
|
72
|
+
export class CloneProgressComponent {
|
|
73
|
+
/** Latest progress update; null shows an indeterminate bar. */
|
|
74
|
+
Progress = null;
|
|
75
|
+
/** Whether the update carries real progress (a percentage or rows done), not just a message. */
|
|
76
|
+
get IsDeterminate() {
|
|
77
|
+
const p = this.Progress;
|
|
78
|
+
if (!p)
|
|
79
|
+
return false;
|
|
80
|
+
return p.PercentComplete != null || p.Percent != null || p.CompletedRecords != null || p.Processed != null;
|
|
81
|
+
}
|
|
82
|
+
get PercentComplete() {
|
|
83
|
+
if (!this.Progress)
|
|
84
|
+
return 0;
|
|
85
|
+
if (this.Progress.PercentComplete != null) {
|
|
86
|
+
return Math.min(100, Math.max(0, Math.round(this.Progress.PercentComplete)));
|
|
87
|
+
}
|
|
88
|
+
if (this.Progress.Percent != null) {
|
|
89
|
+
return Math.min(100, Math.max(0, Math.round(this.Progress.Percent)));
|
|
90
|
+
}
|
|
91
|
+
const total = this.Progress.TotalRecords ?? this.Progress.Total ?? 0;
|
|
92
|
+
const completed = this.Progress.CompletedRecords ?? this.Progress.Processed ?? 0;
|
|
93
|
+
if (total > 0) {
|
|
94
|
+
return Math.min(100, Math.max(0, Math.round((completed / total) * 100)));
|
|
95
|
+
}
|
|
96
|
+
return 0;
|
|
97
|
+
}
|
|
98
|
+
static ɵfac = function CloneProgressComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CloneProgressComponent)(); };
|
|
99
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CloneProgressComponent, selectors: [["mj-clone-progress"]], inputs: { Progress: "Progress" }, decls: 3, vars: 1, consts: [[1, "clone-progress-container"], ["Size", "medium", 3, "Text"], [1, "progress-header"], [1, "progress-title"], [1, "fa-solid", "fa-spinner", "fa-spin", "progress-spinner"], [1, "progress-percentage"], [3, "Value", "Type"], [1, "progress-details"], [1, "progress-message"], [1, "records-counter"]], template: function CloneProgressComponent_Template(rf, ctx) { if (rf & 1) {
|
|
100
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
101
|
+
i0.ɵɵconditionalCreate(1, CloneProgressComponent_Conditional_1_Template, 1, 1, "mj-loading", 1)(2, CloneProgressComponent_Conditional_2_Template, 10, 6);
|
|
102
|
+
i0.ɵɵelementEnd();
|
|
103
|
+
} if (rf & 2) {
|
|
104
|
+
i0.ɵɵadvance();
|
|
105
|
+
i0.ɵɵconditional(!ctx.IsDeterminate ? 1 : 2);
|
|
106
|
+
} }, dependencies: [CommonModule,
|
|
107
|
+
SharedGenericModule, i1.LoadingComponent, MJProgressBarComponent], styles: [".clone-progress-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-4);\n padding: var(--mj-space-8) var(--mj-space-4);\n align-items: center;\n text-align: center;\n }\n\n .progress-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n max-width: 440px;\n }\n\n .progress-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: var(--mj-text-sm);\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .progress-spinner[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .progress-percentage[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n font-weight: 700;\n color: var(--mj-brand-primary);\n }\n\n mj-progress-bar[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 440px;\n }\n\n .progress-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-width: 440px;\n }\n\n .progress-message[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n }\n\n .records-counter[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n font-weight: 500;\n }"], changeDetection: 0 });
|
|
108
|
+
}
|
|
109
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CloneProgressComponent, [{
|
|
110
|
+
type: Component,
|
|
111
|
+
args: [{ standalone: true, selector: 'mj-clone-progress', template: `
|
|
112
|
+
<div class="clone-progress-container">
|
|
113
|
+
@if (!IsDeterminate) {
|
|
114
|
+
<!-- No progress channel reports per-row counts yet: say what is happening, not a made-up percentage. -->
|
|
115
|
+
<mj-loading [Text]="Progress?.Message || Progress?.Phase || 'Cloning...'" Size="medium"></mj-loading>
|
|
116
|
+
} @else {
|
|
117
|
+
<div class="progress-header">
|
|
118
|
+
<span class="progress-title">
|
|
119
|
+
<i class="fa-solid fa-spinner fa-spin progress-spinner"></i>
|
|
120
|
+
{{Progress?.Phase || 'Executing Record Clone...'}}
|
|
121
|
+
</span>
|
|
122
|
+
<span class="progress-percentage">
|
|
123
|
+
{{PercentComplete}}%
|
|
124
|
+
</span>
|
|
125
|
+
</div>
|
|
126
|
+
|
|
127
|
+
<mj-progress-bar
|
|
128
|
+
[Value]="PercentComplete"
|
|
129
|
+
[Type]="PercentComplete > 0 ? 'value' : 'infinite'">
|
|
130
|
+
</mj-progress-bar>
|
|
131
|
+
|
|
132
|
+
<div class="progress-details">
|
|
133
|
+
@if (Progress?.Message) {
|
|
134
|
+
<span class="progress-message">{{Progress?.Message}}</span>
|
|
135
|
+
}
|
|
136
|
+
@if (Progress && (Progress.TotalRecords || Progress.Total)) {
|
|
137
|
+
<span class="records-counter">Record {{Progress.CompletedRecords ?? Progress.Processed ?? 0}} of {{Progress.TotalRecords ?? Progress.Total}}@if (Progress.CurrentEntityName) { ({{Progress.CurrentEntityName}})}</span>
|
|
138
|
+
}
|
|
139
|
+
</div>
|
|
140
|
+
}
|
|
141
|
+
</div>
|
|
142
|
+
`, imports: [
|
|
143
|
+
CommonModule,
|
|
144
|
+
SharedGenericModule,
|
|
145
|
+
MJProgressBarComponent,
|
|
146
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, styles: ["\n .clone-progress-container {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-4);\n padding: var(--mj-space-8) var(--mj-space-4);\n align-items: center;\n text-align: center;\n }\n\n .progress-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n max-width: 440px;\n }\n\n .progress-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: var(--mj-text-sm);\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .progress-spinner {\n color: var(--mj-brand-primary);\n }\n\n .progress-percentage {\n font-size: var(--mj-text-sm);\n font-weight: 700;\n color: var(--mj-brand-primary);\n }\n\n mj-progress-bar {\n width: 100%;\n max-width: 440px;\n }\n\n .progress-details {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-width: 440px;\n }\n\n .progress-message {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n }\n\n .records-counter {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n font-weight: 500;\n }\n "] }]
|
|
147
|
+
}], null, { Progress: [{
|
|
148
|
+
type: Input
|
|
149
|
+
}] }); })();
|
|
150
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CloneProgressComponent, { className: "CloneProgressComponent", filePath: "src/lib/clone-progress.component.ts", lineNumber: 120 }); })();
|
|
151
|
+
//# sourceMappingURL=clone-progress.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-progress.component.js","sourceRoot":"","sources":["../../src/lib/clone-progress.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Progress display component during clone execution.\n *\n * Implements §12.3 of the Record Cloning architectural blueprint. Tracks percentage\n * completion, current stage, record counts, and the specific node being processed.\n */\n\nimport {\n Component,\n ChangeDetectionStrategy,\n Input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MJProgressBarComponent } from '@memberjunction/ng-ui-components';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport type { CloneProgressUpdate } from './record-clone-types';\n\n@Component({\n standalone: true,\n selector: 'mj-clone-progress',\n template: `\n <div class=\"clone-progress-container\">\n @if (!IsDeterminate) {\n <!-- No progress channel reports per-row counts yet: say what is happening, not a made-up percentage. -->\n <mj-loading [Text]=\"Progress?.Message || Progress?.Phase || 'Cloning...'\" Size=\"medium\"></mj-loading>\n } @else {\n <div class=\"progress-header\">\n <span class=\"progress-title\">\n <i class=\"fa-solid fa-spinner fa-spin progress-spinner\"></i>\n {{Progress?.Phase || 'Executing Record Clone...'}}\n </span>\n <span class=\"progress-percentage\">\n {{PercentComplete}}%\n </span>\n </div>\n\n <mj-progress-bar\n [Value]=\"PercentComplete\"\n [Type]=\"PercentComplete > 0 ? 'value' : 'infinite'\">\n </mj-progress-bar>\n\n <div class=\"progress-details\">\n @if (Progress?.Message) {\n <span class=\"progress-message\">{{Progress?.Message}}</span>\n }\n @if (Progress && (Progress.TotalRecords || Progress.Total)) {\n <span class=\"records-counter\">Record {{Progress.CompletedRecords ?? Progress.Processed ?? 0}} of {{Progress.TotalRecords ?? Progress.Total}}@if (Progress.CurrentEntityName) { ({{Progress.CurrentEntityName}})}</span>\n }\n </div>\n }\n </div>\n `,\n styles: [`\n .clone-progress-container {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-4);\n padding: var(--mj-space-8) var(--mj-space-4);\n align-items: center;\n text-align: center;\n }\n\n .progress-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n max-width: 440px;\n }\n\n .progress-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: var(--mj-text-sm);\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .progress-spinner {\n color: var(--mj-brand-primary);\n }\n\n .progress-percentage {\n font-size: var(--mj-text-sm);\n font-weight: 700;\n color: var(--mj-brand-primary);\n }\n\n mj-progress-bar {\n width: 100%;\n max-width: 440px;\n }\n\n .progress-details {\n display: flex;\n flex-direction: column;\n gap: 4px;\n max-width: 440px;\n }\n\n .progress-message {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n }\n\n .records-counter {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n font-weight: 500;\n }\n `],\n imports: [\n CommonModule,\n SharedGenericModule,\n MJProgressBarComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CloneProgressComponent {\n /** Latest progress update; null shows an indeterminate bar. */\n @Input() Progress: CloneProgressUpdate | null = null;\n\n /** Whether the update carries real progress (a percentage or rows done), not just a message. */\n public get IsDeterminate(): boolean {\n const p = this.Progress;\n if (!p) return false;\n return p.PercentComplete != null || p.Percent != null || p.CompletedRecords != null || p.Processed != null;\n }\n\n public get PercentComplete(): number {\n if (!this.Progress) return 0;\n if (this.Progress.PercentComplete != null) {\n return Math.min(100, Math.max(0, Math.round(this.Progress.PercentComplete)));\n }\n if (this.Progress.Percent != null) {\n return Math.min(100, Math.max(0, Math.round(this.Progress.Percent)));\n }\n const total = this.Progress.TotalRecords ?? this.Progress.Total ?? 0;\n const completed = this.Progress.CompletedRecords ?? this.Progress.Processed ?? 0;\n if (total > 0) {\n return Math.min(100, Math.max(0, Math.round((completed / total) * 100)));\n }\n return 0;\n }\n}\n"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Result display component following clone execution.
|
|
3
|
+
*
|
|
4
|
+
* Implements §12.3 of the Record Cloning architectural blueprint. Displays success
|
|
5
|
+
* state, execution summary (records created/referenced/skipped and execution duration),
|
|
6
|
+
* warnings review, and navigation CTAs ("Open Cloned Record", "Clone Another", "Close").
|
|
7
|
+
*/
|
|
8
|
+
import { EventEmitter } from '@angular/core';
|
|
9
|
+
import type { RecordCloneExecuteOutput } from '@memberjunction/core-entities';
|
|
10
|
+
import type { CloneNavigationEvent } from './record-clone-types';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
export declare class CloneResultComponent {
|
|
13
|
+
/** Execute output to summarize. */
|
|
14
|
+
Result: RecordCloneExecuteOutput | null;
|
|
15
|
+
/** Entity of the root clone. */
|
|
16
|
+
EntityName: string;
|
|
17
|
+
/** Record-id string of the root clone; falls back to `Result.Roots[0].TargetKey`. */
|
|
18
|
+
TargetKey: string | null;
|
|
19
|
+
/** Display name of the new root record. */
|
|
20
|
+
RootRecordName?: string;
|
|
21
|
+
/** Fires with the root clone's key when the user opens it. `NavigateToRecord` fires too. */
|
|
22
|
+
OpenClone: EventEmitter<string>;
|
|
23
|
+
/** The user wants to clone the source again. */
|
|
24
|
+
CloneAnother: EventEmitter<void>;
|
|
25
|
+
/** The user closed the result. */
|
|
26
|
+
Close: EventEmitter<void>;
|
|
27
|
+
/** Fires with the clone log ID when the user opens the log. `NavigateToRecord` fires too. */
|
|
28
|
+
OpenCloneLog: EventEmitter<string>;
|
|
29
|
+
/** Asks the host to open the clone or the clone log record. */
|
|
30
|
+
NavigateToRecord: EventEmitter<CloneNavigationEvent>;
|
|
31
|
+
get CreatedCount(): number;
|
|
32
|
+
get ReferencedCount(): number;
|
|
33
|
+
OnOpenClone(): void;
|
|
34
|
+
OnCloneAnother(): void;
|
|
35
|
+
OnClose(): void;
|
|
36
|
+
OnOpenCloneLog(): void;
|
|
37
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CloneResultComponent, never>;
|
|
38
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CloneResultComponent, "mj-clone-result", never, { "Result": { "alias": "Result"; "required": false; }; "EntityName": { "alias": "EntityName"; "required": false; }; "TargetKey": { "alias": "TargetKey"; "required": false; }; "RootRecordName": { "alias": "RootRecordName"; "required": false; }; }, { "OpenClone": "OpenClone"; "CloneAnother": "CloneAnother"; "Close": "Close"; "OpenCloneLog": "OpenCloneLog"; "NavigateToRecord": "NavigateToRecord"; }, never, never, true, never>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=clone-result.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-result.component.d.ts","sourceRoot":"","sources":["../../src/lib/clone-result.component.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAKH,YAAY,EACf,MAAM,eAAe,CAAC;AAMvB,OAAO,KAAK,EACR,wBAAwB,EAE3B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;;AAEjE,qBAyPa,oBAAoB;IAC7B,mCAAmC;IAC1B,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IACxD,gCAAgC;IACvB,UAAU,SAAY;IAC/B,qFAAqF;IAC5E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IACzC,2CAA2C;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC,4FAA4F;IAClF,SAAS,uBAA8B;IACjD,gDAAgD;IACtC,YAAY,qBAA4B;IAClD,kCAAkC;IACxB,KAAK,qBAA4B;IAC3C,6FAA6F;IACnF,YAAY,uBAA8B;IACpD,+DAA+D;IACrD,gBAAgB,qCAA4C;IAEtE,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,IAAW,eAAe,IAAI,MAAM,CAGnC;IAEM,WAAW,IAAI,IAAI;IAenB,cAAc,IAAI,IAAI;IAItB,OAAO,IAAI,IAAI;IAIf,cAAc,IAAI,IAAI;yCArDpB,oBAAoB;2CAApB,oBAAoB;CA+DhC"}
|