1"use strict";(self.webpackChunkSlideSquad=self.webpackChunkSlideSquad||[]).push([[6329],{56329:(nt,m,p)=>{p.r(m),p.d(m,{CanonicalOutputCatalogComponent:()=>et});var e=p(54438),d=p(60177),s=p(89417),h=p(21413),g=p(56977),x=p(27468),v=p(74710);function k(o,c){if(1&o&&(e.j41(0,"span",8),e.EFF(1),e.k0s()),2&o){const t=e.XpG();e.R7$(),e.Lme(" ",t.values.length," value",1===t.values.length?"":"s"," ")}}function y(o,c){1&o&&(e.j41(0,"span",28),e.nrm(1,"i",29),e.EFF(2," Updating mode\u2026 "),e.k0s())}function M(o,c){1&o&&(e.j41(0,"p",30),e.nrm(1,"i",31),e.EFF(2," Free mode applies no vocabulary. Switching to "),e.j41(3,"strong"),e.EFF(4,"Closed"),e.k0s(),e.EFF(5," or "),e.j41(6,"strong"),e.EFF(7,"OpenWithDefaults"),e.k0s(),e.EFF(8," activates the values list below. "),e.k0s())}function F(o,c){1&o&&(e.j41(0,"p",30),e.nrm(1,"i",32),e.j41(2,"strong"),e.EFF(3,"Closed:"),e.k0s(),e.EFF(4," only listed values are accepted; emissions outside this set are rejected by the writer. "),e.k0s())}function O(o,c){1&o&&(e.j41(0,"p",30),e.nrm(1,"i",33),e.j41(2,"strong"),e.EFF(3,"OpenWithDefaults:"),e.k0s(),e.EFF(4," listed values are the seed; new emissions are tracked as sightings for promotion review. "),e.k0s())}function w(o,c){if(1&o){const t=e.RV6();e.qex(0),e.j41(1,"code",38),e.EFF(2),e.k0s(),e.j41(3,"div",39)(4,"button",40),e.bIt("click",function(){e.eBV(t);const n=e.XpG().index,a=e.XpG(3);return e.Njj(a.moveUp(n))}),e.nrm(5,"i",41),e.k0s(),e.j41(6,"button",42),e.bIt("click",function(){e.eBV(t);const n=e.XpG().index,a=e.XpG(3);return e.Njj(a.moveDown(n))}),e.nrm(7,"i",43),e.k0s(),e.j41(8,"button",44),e.bIt("click",function(){e.eBV(t);const n=e.XpG().index,a=e.XpG(3);return e.Njj(a.beginEdit(n))}),e.nrm(9,"i",45),e.k0s(),e.j41(10,"button",46),e.bIt("click",function(){e.eBV(t);const n=e.XpG().index,a=e.XpG(3);return e.Njj(a.removeValue(n))}),e.nrm(11,"i",47),e.k0s()(),e.bVm()}if(2&o){const t=e.XpG(),i=t.$implicit,n=t.index,a=e.XpG(3);e.R7$(2),e.JRh(i),e.R7$(2),e.Y8G("disabled",0===n||!a.isVocabMode),e.R7$(2),e.Y8G("disabled",n===a.values.length-1||!a.isVocabMode),e.R7$(2),e.Y8G("disabled",!a.isVocabMode),e.R7$(2),e.Y8G("disabled",!a.isVocabMode)}}function P(o,c){if(1&o){const t=e.RV6();e.qex(0),e.j41(1,"input",48),e.mxI("ngModelChange",function(n){e.eBV(t);const a=e.XpG(4);return e.DH7(a.editingDraft,n)||(a.editingDraft=n),e.Njj(n)}),e.bIt("keydown.enter",function(){e.eBV(t);const n=e.XpG(4);return e.Njj(n.commitEdit())})("keydown.escape",function(){e.eBV(t);const n=e.XpG(4);return e.Njj(n.cancelEdit())}),e.k0s(),e.j41(2,"div",39)(3,"button",49),e.bIt("click",function(){e.eBV(t);const n=e.XpG(4);return e.Njj(n.commitEdit())}),e.nrm(4,"i",50),e.k0s(),e.j41(5,"button",51),e.bIt("click",function(){e.eBV(t);const n=e.XpG(4);return e.Njj(n.cancelEdit())}),e.nrm(6,"i",52),e.k0s()(),e.bVm()}if(2&o){const t=e.XpG(4);e.R7$(),e.R50("ngModel",t.editingDraft)}}function R(o,c){if(1&o&&(e.j41(0,"li",36),e.DNE(1,w,12,5,"ng-container",37)(2,P,7,1,"ng-container",37),e.k0s()),2&o){const t=c.index,i=e.XpG(3);e.AVh("vve-row--editing",i.editingIndex===t),e.R7$(),e.Y8G("ngIf",i.editingIndex!==t),e.R7$(),e.Y8G("ngIf",i.editingIndex===t)}}function E(o,c){if(1&o&&(e.j41(0,"ul",34),e.DNE(1,R,3,4,"li",35),e.k0s()),2&o){const t=e.XpG(2);e.R7$(),e.Y8G("ngForOf",t.values)("ngForTrackBy",t.trackByIndex)}}function j(o,c){1&o&&(e.j41(0,"p",53),e.nrm(1,"i",54),e.EFF(2," No values yet \u2014 add one below. "),e.k0s())}function T(o,c){if(1&o&&(e.j41(0,"div",55),e.nrm(1,"i",56),e.EFF(2),e.k0s()),2&o){const t=e.XpG(2);e.R7$(2),e.SpI(" ",t.saveError," ")}}function V(o,c){1&o&&(e.j41(0,"span",57),e.nrm(1,"i",58),e.EFF(2," Unsaved changes "),e.k0s())}function I(o,c){if(1&o){const t=e.RV6();e.j41(0,"div",9)(1,"div",10)(2,"span",11),e.EFF(3,"Value-set mode"),e.k0s(),e.j41(4,"div",12)(5,"button",13),e.bIt("click",function(){e.eBV(t);const n=e.XpG();return e.Njj(n.changeMode("Free"))}),e.EFF(6," Free "),e.k0s(),e.j41(7,"button",13),e.bIt("click",function(){e.eBV(t);const n=e.XpG();return e.Njj(n.changeMode("Closed"))}),e.EFF(8," Closed "),e.k0s(),e.j41(9,"button",13),e.bIt("click",function(){e.eBV(t);const n=e.XpG();return e.Njj(n.changeMode("OpenWithDefaults"))}),e.EFF(10," OpenWithDefaults "),e.k0s()(),e.DNE(11,y,3,0,"span",14),e.k0s(),e.DNE(12,M,9,0,"p",15)(13,F,5,0,"p",15)(14,O,5,0,"p",15),e.j41(15,"div",16),e.DNE(16,E,2,2,"ul",17)(17,j,3,0,"p",18),e.j41(18,"div",19)(19,"input",20),e.mxI("ngModelChange",function(n){e.eBV(t);const a=e.XpG();return e.DH7(a.newValue,n)||(a.newValue=n),e.Njj(n)}),e.bIt("keydown.enter",function(){e.eBV(t);const n=e.XpG();return e.Njj(n.addValue())}),e.k0s(),e.j41(20,"button",21),e.bIt("click",function(){e.eBV(t);const n=e.XpG();return e.Njj(n.addValue())}),e.nrm(21,"i",22),e.EFF(22," Add "),e.k0s()()(),e.DNE(23,T,3,1,"div",23),e.j41(24,"div",24),e.DNE(25,V,3,0,"span",25),e.j41(26,"button",26),e.bIt("click",function(){e.eBV(t);const n=e.XpG();return e.Njj(n.saveValues())}),e.nrm(27,"i",27),e.EFF(28),e.k0s()()()}if(2&o){const t=e.XpG();e.R7$(5),e.AVh("vve-mode-opt--active","Free"===t.mode),e.Y8G("disabled",t.savingMode),e.R7$(2),e.AVh("vve-mode-opt--active","Closed"===t.mode),e.Y8G("disabled",t.savingMode),e.R7$(2),e.AVh("vve-mode-opt--active","OpenWithDefaults"===t.mode),e.Y8G("disabled",t.savingMode),e.R7$(2),e.Y8G("ngIf",t.savingMode),e.R7$(),e.Y8G("ngIf","Free"===t.mode),e.R7$(),e.Y8G("ngIf","Closed"===t.mode),e.R7$(),e.Y8G("ngIf","OpenWithDefaults"===t.mode),e.R7$(),e.AVh("vve-values--disabled",!t.isVocabMode),e.R7$(),e.Y8G("ngIf",t.values.length>0),e.R7$(),e.Y8G("ngIf",0===t.values.length),e.R7$(2),e.R50("ngModel",t.newValue),e.Y8G("disabled",!t.isVocabMode),e.R7$(),e.Y8G("disabled",!t.isVocabMode||!t.newValue.trim()),e.R7$(3),e.Y8G("ngIf",t.saveError),e.R7$(2),e.Y8G("ngIf",t.isDirty&&t.isVocabMode),e.R7$(),e.Y8G("disabled",!t.isDirty||t.saving||!t.isVocabMode),e.R7$(),e.AVh("fa-floppy-disk",!t.saving)("fa-circle-notch",t.saving)("fa-spin",t.saving),e.R7$(),e.SpI(" ",t.saving?"Saving\u2026":"Save values"," ")}}let D=(()=>{class o{constructor(t){this.cdr=t,this.entry=null,this.saving=!1,this.savingMode=!1,this.saveError=null,this.modeChangeRequested=new e.bkB,this.valuesChangeRequested=new e.bkB,this.mode="Free",this.values=[],this.editingIndex=null,this.editingDraft="",this.newValue="",this.collapsed=!0,this.userToggledCollapsed=!1,this.trackByIndex=(i,n)=>i}ngOnChanges(t){t.entry&&this.resetFromEntry()}resetFromEntry(){const t=this.entry;this.mode=t?.valueSetMode??"Free",this.values=this.parseValues(t?.defaultValuesJson),this.editingIndex=null,this.editingDraft="",this.newValue="",this.userToggledCollapsed=!1,this.collapsed="Free"===this.mode,this.cdr.markForCheck()}parseValues(t){if(!t)return[];try{const i=JSON.parse(t);return Array.isArray(i)?i.filter(n=>"string"==typeof n&&n.trim().length>0).map(n=>n.trim()):[]}catch{return[]}}get isVocabMode(){return"Free"!==this.mode}get isDirty(){const t=this.parseValues(this.entry?.defaultValuesJson);if(t.length!==this.values.length)return!0;for(let i=0;i<t.length;i++)if(t[i]!==this.values[i])return!0;return!1}changeMode(t){t===this.mode||this.savingMode||(this.mode=t,this.userToggledCollapsed||(this.collapsed="Free"===t),this.modeChangeRequested.emit(t),this.cdr.markForCheck())}toggleCollapse(){this.userToggledCollapsed=!0,this.collapsed=!this.collapsed,this.cdr.markForCheck()}addValue(){const t=this.newValue.trim();!t||new Set(this.values.map(n=>n.toLowerCase())).has(t.toLowerCase())||(this.values=[...this.values,t],this.newValue="",this.cdr.markForCheck())}removeValue(t){t<0||t>=this.values.length||(this.values=[...this.values.slice(0,t),...this.values.slice(t+1)],this.editingIndex===t&&this.cancelEdit(),this.cdr.markForCheck())}moveUp(t){if(t<=0||t>=this.values.length)return;const i=[...this.values];[i[t-1],i[t]]=[i[t],i[t-1]],this.values=i,this.cdr.markForCheck()}moveDown(t){if(t<0||t>=this.values.length-1)return;const i=[...this.values];[i[t],i[t+1]]=[i[t+1],i[t]],this.values=i,this.cdr.markForCheck()}beginEdit(t){t<0||t>=this.values.length||(this.editingIndex=t,this.editingDraft=this.values[t],this.cdr.markForCheck())}commitEdit(){const t=this.editingIndex;if(null===t)return;const i=this.editingDraft.trim();if(i){const n=[...this.values];n[t]=i,this.values=n}this.editingIndex=null,this.editingDraft="",this.cdr.markForCheck()}cancelEdit(){this.editingIndex=null,this.editingDraft="",this.cdr.markForCheck()}saveValues(){this.saving||!this.isDirty||this.valuesChangeRequested.emit([...this.values])}static{this.\u0275fac=function(i){return new(i||o)(e.rXU(e.gRc))}}static{this.\u0275cmp=e.VBU({type:o,selectors:[["app-vocab-values-editor"]],inputs:{entry:"entry",saving:"saving",savingMode:"savingMode",saveError:"saveError"},outputs:{modeChangeRequested:"modeChangeRequested",valuesChangeRequested:"valuesChangeRequested"},standalone:!0,features:[e.OA$,e.aNF],decls:10,vars:12,consts:[[1,"vve"],["type","button",1,"vve-head",3,"click"],[1,"fas","vve-chev"],[1,"vve-head-title"],[1,"fas","fa-list-check","vve-head-icon"],[1,"vve-head-mode"],["class","vve-head-count",4,"ngIf"],["class","vve-body",4,"ngIf"],[1,"vve-head-count"],[1,"vve-body"],[1,"vve-mode-row"],[1,"vve-label"],["role","group","aria-label","Value-set mode",1,"vve-mode-seg"],["type","button",1,"vve-mode-opt",3,"click","disabled"],["class","vve-mode-spinner",4,"ngIf"],["class","vve-hint",4,"ngIf"],[1,"vve-values"],["class","vve-list",4,"ngIf"],["class","vve-empty",4,"ngIf"],[1,"vve-add"],["type","text","placeholder","New value\u2026",1,"vve-input",3,"ngModelChange","keydown.enter","ngModel","disabled"],["type","button",1,"vve-add-btn",3,"click","disabled"],[1,"fas","fa-plus"],["class","vve-save-err",4,"ngIf"],[1,"vve-actions"],["class","vve-dirty-hint",4,"ngIf"],["type","button",1,"vve-save-btn",3,"click","disabled"],[1,"fas"],[1,"vve-mode-spinner"],[1,"fas","fa-circle-notch","fa-spin"],[1,"vve-hint"],[1,"fas","fa-circle-info"],[1,"fas","fa-lock"],[1,"fas","fa-lock-open"],[1,"vve-list"],["class","vve-row",3,"vve-row--editing",4,"ngFor","ngForOf","ngForTrackBy"],[1,"vve-row"],[4,"ngIf"],[1,"vve-value"],[1,"vve-row-actions"],["type","button","title","Move up","aria-label","Move up",1,"vve-icon-btn",3,"click","disabled"],[1,"fas","fa-arrow-up"],["type","button","title","Move down","aria-label","Move down",1,"vve-icon-btn",3,"click","disabled"],[1,"fas","fa-arrow-down"],["type","button","title","Edit","aria-label","Edit",1,"vve-icon-btn",3,"click","disabled"],[1,"fas","fa-pen"],["type","button","title","Remove","aria-label","Remove",1,"vve-icon-btn","vve-icon-btn--danger",3,"click","disabled"],[1,"fas","fa-xmark"],["type","text","autofocus","",1,"vve-input","vve-input--edit",3,"ngModelChange","keydown.enter","keydown.escape","ngModel"],["type","button","title","Commit",1,"vve-icon-btn","vve-icon-btn--primary",3,"click"],[1,"fas","fa-check"],["type","button","title","Cancel",1,"vve-icon-btn",3,"click"],[1,"fas","fa-rotate-left"],[1,"vve-empty"],[1,"fas","fa-list"],[1,"vve-save-err"],[1,"fas","fa-circle-exclamation"],[1,"vve-dirty-hint"],[1,"fas","fa-pen-to-square"]],template:function(i,n){1&i&&(e.j41(0,"section",0)(1,"button",1),e.bIt("click",function(){return n.toggleCollapse()}),e.nrm(2,"i",2),e.j41(3,"span",3),e.nrm(4,"i",4),e.EFF(5," Controlled vocabulary "),e.k0s(),e.j41(6,"span",5),e.EFF(7),e.k0s(),e.DNE(8,k,2,2,"span",6),e.k0s(),e.DNE(9,I,29,30,"div",7),e.k0s()),2&i&&(e.AVh("vve--collapsed",n.collapsed),e.R7$(),e.BMQ("aria-expanded",!n.collapsed),e.R7$(),e.AVh("fa-chevron-down",!n.collapsed)("fa-chevron-right",n.collapsed),e.R7$(4),e.AVh("vve-head-mode--free","Free"===n.mode),e.R7$(),e.SpI(" ",n.mode," "),e.R7$(),e.Y8G("ngIf",n.isVocabMode&&!n.collapsed),e.R7$(),e.Y8G("ngIf",!n.collapsed))},dependencies:[d.MD,d.Sq,d.bT,s.YN,s.me,s.BC,s.vS],styles:["[_nghost-%COMP%]{display:block}.vve[_ngcontent-%COMP%]{border:1px solid #e2e8f0;border-radius:8px;background:#fff;margin:16px 0;overflow:hidden;transition:border-color .15s ease}.vve[_ngcontent-%COMP%]:hover{border-color:#cbd5e1}.vve--collapsed[_ngcontent-%COMP%]{background:#fafbfc}.vve-head[_ngcontent-%COMP%]{width:100%;display:flex;align-items:center;gap:10px;padding:10px 14px;background:transparent;border:0;cursor:pointer;text-align:left;font-size:13px;color:#1e293b;transition:background-color .12s ease}.vve-head[_ngcontent-%COMP%]:hover{background:#f8fafc}.vve-head[_ngcontent-%COMP%]:focus-visible{outline:2px solid #93c5fd;outline-offset:-2px}
1.vve-chev[_ngcontent-%COMP%]{font-size:10px;color:#64748b;width:12px;text-align:center}.vve-head-icon[_ngcontent-%COMP%]{font-size:11px;color:#6366f1}.vve-head-title[_ngcontent-%COMP%]{flex:1;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#475569;display:inline-flex;align-items:center;gap:8px}.vve-head-mode[_ngcontent-%COMP%]{padding:2px 8px;border-radius:999px;background:#eef2ff;color:#4338ca;border:1px solid #c7d2fe;font-size:11px;font-weight:600;letter-spacing:.01em}.vve-head-mode--free[_ngcontent-%COMP%]{background:#f1f5f9;color:#64748b;border-color:#e2e8f0}.vve-head-count[_ngcontent-%COMP%]{padding:2px 8px;font-size:11px;font-weight:500;border-radius:999px;background:#fff;color:#64748b;border:1px solid #e2e8f0;font-variant-numeric:tabular-nums}.vve-body[_ngcontent-%COMP%]{padding:14px 16px 16px;border-top:1px solid #eef2f6}.vve-label[_ngcontent-%COMP%]{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#475569;white-space:nowrap}.vve-mode-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:8px}.vve-mode-seg[_ngcontent-%COMP%]{display:inline-flex;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:8px;padding:3px;gap:2px}.vve-mode-opt[_ngcontent-%COMP%]{padding:5px 12px;background:transparent;border:0;border-radius:6px;font-size:12px;font-weight:600;color:#64748b;cursor:pointer;transition:background-color .12s ease,color .12s ease}.vve-mode-opt[_ngcontent-%COMP%]:hover:not(:disabled):not(.vve-mode-opt--active){color:#334155}.vve-mode-opt[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.vve-mode-opt--active[_ngcontent-%COMP%]{background:#fff;color:#1e293b;box-shadow:0 1px 2px #0f172a0f,inset 0 0 0 1px #0f172a0a}.vve-mode-spinner[_ngcontent-%COMP%]{font-size:12px;color:#6366f1;display:inline-flex;align-items:center;gap:6px}.vve-hint[_ngcontent-%COMP%]{margin:0 0 12px;padding:8px 12px;font-size:12px;line-height:1.45;color:#475569;background:#f8fafc;border-left:3px solid #c7d2fe;border-radius:4px;display:flex;align-items:flex-start;gap:8px}.vve-hint[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#6366f1;font-size:11px;margin-top:2px}.vve-hint[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:#1e293b}.vve-values[_ngcontent-%COMP%]{transition:opacity .15s ease}.vve-values--disabled[_ngcontent-%COMP%]{opacity:.55}.vve-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;border:1px solid #eef2f6;border-radius:6px;overflow:hidden}.vve-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:6px 10px 6px 12px;background:#fff;border-bottom:1px solid #eef2f6;font-size:12px;transition:background-color .12s ease}.vve-row[_ngcontent-%COMP%]:last-child{border-bottom:none}.vve-row[_ngcontent-%COMP%]:hover{background:#f8fafc}.vve-row--editing[_ngcontent-%COMP%]{background:#eff6ff}.vve-value[_ngcontent-%COMP%]{flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;color:#0f172a;font-size:12px;word-break:break-all}.vve-row-actions[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:2px;flex-shrink:0}.vve-icon-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;background:transparent;border:1px solid transparent;border-radius:4px;color:#64748b;cursor:pointer;transition:background-color .12s ease,color .12s ease,border-color .12s ease}.vve-icon-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:#f1f5f9;color:#1e293b;border-color:#e2e8f0}.vve-icon-btn[_ngcontent-%COMP%]:disabled{opacity:.35;cursor:not-allowed}.vve-icon-btn--primary[_ngcontent-%COMP%]{color:#1d4ed8;background:#dbeafe;border-color:#93c5fd}.vve-icon-btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:#bfdbfe;color:#1e3a8a}.vve-icon-btn--danger[_ngcontent-%COMP%]:hover:not(:disabled){background:#fef2f2;color:#b91c1c;border-color:#fecaca}.vve-icon-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:11px}.vve-empty[_ngcontent-%COMP%]{font-size:12px;color:#94a3b8;font-style:italic;margin:0;padding:12px 14px;background:#f8fafc;border:1px dashed #e2e8f0;border-radius:6px;display:inline-flex;align-items:center;gap:8px}.vve-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#cbd5e1}.vve-add[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-top:10px}.vve-input[_ngcontent-%COMP%]{flex:1;min-width:0;padding:6px 10px;border:1px solid #cbd5e1;border-radius:6px;font-size:12px;color:#0f172a;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;background:#fff;transition:border-color .12s ease,box-shadow .12s ease}.vve-input[_ngcontent-%COMP%]:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 3px #2563eb1f}.vve-input[_ngcontent-%COMP%]:disabled{background:#f1f5f9;color:#94a3b8;cursor:not-allowed}.vve-input--edit[_ngcontent-%COMP%]{background:#fff}.vve-add-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;background:#fff;border:1px solid #cbd5e1;border-radius:6px;font-size:12px;font-weight:600;color:#1e293b;cursor:pointer;transition:border-color .12s ease,background-color .12s ease,color .12s ease}.vve-add-btn[_ngcontent-%COMP%]:hover:not(:disabled){border-color:#2563eb;
1color:#1d4ed8;background:#f0f7ff}.vve-add-btn[_ngcontent-%COMP%]:disabled{opacity:.45;cursor:not-allowed}.vve-add-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:10px}.vve-save-err[_ngcontent-%COMP%]{margin-top:10px;padding:8px 12px;font-size:12px;color:#991b1b;background:#fef2f2;border:1px solid #fecaca;border-radius:6px;display:flex;align-items:center;gap:6px}.vve-save-err[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#dc2626}.vve-actions[_ngcontent-%COMP%]{margin-top:14px;padding-top:12px;border-top:1px solid #eef2f6;display:flex;align-items:center;justify-content:flex-end;gap:12px}.vve-dirty-hint[_ngcontent-%COMP%]{font-size:11px;font-weight:500;color:#b45309;display:inline-flex;align-items:center;gap:5px}.vve-dirty-hint[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:10px}.vve-save-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;background:#2563eb;border:1px solid #1d4ed8;color:#fff;font-size:12px;font-weight:600;border-radius:6px;cursor:pointer;transition:background-color .12s ease,border-color .12s ease,box-shadow .12s ease}.vve-save-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:#1d4ed8;border-color:#1e40af;box-shadow:0 1px 2px #0f172a14}.vve-save-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.vve-save-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:11px}@media (max-width: 600px){.vve-mode-row[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch;gap:8px}.vve-mode-seg[_ngcontent-%COMP%]{width:100%;justify-content:stretch}.vve-mode-opt[_ngcontent-%COMP%]{flex:1;text-align:center}.vve-row[_ngcontent-%COMP%]{flex-wrap:wrap}.vve-add[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch}.vve-add-btn[_ngcontent-%COMP%]{justify-content:center}}"],changeDetection:0})}}return o})();var u=p(21626);let b=(()=>{class o{constructor(t){this.http=t,this.adminBase="/api/admin/canonical-output",this.readBase="/api/canonical-output",this.vocabBase="/api/admin/vocabulary"}list(t=!0){const i=(new u.Nl).set("includeDeprecated",t);return this.http.get(this.adminBase,{params:i})}patch(t,i){return this.http.patch(`${this.adminBase}/${t}`,i)}deprecate(t,i){let n=new u.Nl;return i&&i.trim()&&(n=n.set("note",i.trim())),this.http.delete(`${this.adminBase}/${t}`,{params:n})}reactivate(t){return this.http.post(`${this.adminBase}/${t}/reactivate`,{})}snippet(t){return this.http.get(`${this.readBase}/${encodeURIComponent(t)}/snippet`)}usage(){return this.http.get(`${this.readBase}/usage`)}create(t){return this.http.post(this.adminBase,t)}getVocabulary(t,i,n){let a=(new u.Nl).set("orgId",i);return n&&(a=a.set("locationId",n)),this.http.get(`${this.vocabBase}/${encodeURIComponent(t)}`,{params:a})}listSightings(t,i){let n=(new u.Nl).set("orgId",t);return i?.locationId&&(n=n.set("locationId",i.locationId)),!1===i?.pendingOnly&&(n=n.set("pendingOnly","false")),null!=i?.catalogId&&(n=n.set("catalogId",i.catalogId)),this.http.get(`${this.vocabBase}/sightings`,{params:n})}setVocabMode(t,i){return this.http.post(`${this.vocabBase}/${t}/mode`,{mode:i})}promoteSighting(t,i){return this.http.post(`${this.vocabBase}/sightings/${t}/promote`,{target:i})}rejectSighting(t){return this.http.post(`${this.vocabBase}/sightings/${t}/reject`,{})}static{this.\u0275fac=function(i){return new(i||o)(e.KVO(u.Qq))}}static{this.\u0275prov=e.jDH({token:o,factory:o.\u0275fac,providedIn:"root"})}}return o})();const $=()=>["/admin/workflow-agents"],G=o=>({q:o});function S(o,c){if(1&o&&(e.j41(0,"div",41),e.nrm(1,"i",42),e.EFF(2),e.k0s()),2&o){const t=e.XpG(2);e.R7$(2),e.SpI(" ",t.saveError," ")}}function N(o,c){1&o&&(e.j41(0,"span",43),e.EFF(1,"Unsaved edits"),e.k0s())}function B(o,c){if(1&o){const t=e.RV6();e.j41(0,"app-vocab-values-editor",44),e.bIt("modeChangeRequested",function(n){e.eBV(t);const a=e.XpG(2);return e.Njj(a.onVocabModeChanged(n))})("valuesChangeRequested",function(n){e.eBV(t);const a=e.XpG(2);return e.Njj(a.onVocabValuesChanged(n))}),e.k0s()}if(2&o){const t=e.XpG(2);e.Y8G("entry",t.entry)("saving",t.vocabValuesSaving)("savingMode",t.vocabModeSaving)("saveError",t.vocabSaveError)}}function Y(o,c){if(1&o&&(e.j41(0,"li")(1,"a",47),e.nrm(2,"i",48),e.EFF(3),e.k0s()()),2&o){const t=c.$implicit;e.R7$(),e.Y8G("routerLink",e.lJ4(3,$))("queryParams",e.eq3(4,G,t)),e.R7$(2),e.SpI(" ",t," ")}}function z(o,c){if(1&o&&(e.j41(0,"ul",45),e.DNE(1,Y,4,6,"li",46),e.k0s()),2&o){const t=e.XpG(2);e.R7$(),e.Y8G("ngForOf",t.emittedByNames)("ngForTrackBy",t.trackByName)}}function J(o,c){1&o&&(e.j41(0,"p",49),e.nrm(1,"i",50),e.EFF(2," No active agent emits this field \u2014 deprecation candidate. "),e.k0s())}function X(o,c){if(1&o&&(e.j41(0,"li"),e.nrm(1,"i",48),e.EFF(2),e.k0s()),2&o){const t=c.$implicit;e.R7$(2),e.SpI(" ",t," ")}}function K(o,c){if(1&o&&(e.j41(0,"div",51)(1,"div",52),e.nrm(2,"i",50),e.EFF(3," Retiring this field will affect "),e.j41(4,"strong"),e.EFF(5),e.k0s(),e.EFF(6),e.k0s(),e.j41(7,"ul",53),e.DNE(8,X,3,1,"li",46),e.k0s(),e.j41(9,"p",54),e.
1EFF(10,' Soft-deprecate is reversible (Reactivate restores it). Identity is immutable \u2014 to change the field shape, deprecate then create a new one (the drawer\'s "Duplicate as new" pre-fills the form). '),e.k0s()()),2&o){const t=e.XpG(2);e.R7$(5),e.JRh(t.emittedByNames.length),e.R7$(),e.SpI(" active emitter",1===t.emittedByNames.length?"":"s"," "),e.R7$(2),e.Y8G("ngForOf",t.emittedByNames)("ngForTrackBy",t.trackByName)}}function A(o,c){if(1&o){const t=e.RV6();e.qex(0),e.j41(1,"button",55),e.bIt("click",function(){e.eBV(t);const n=e.XpG(2);return e.Njj(n.onDuplicateClick())}),e.nrm(2,"i",56),e.EFF(3," Duplicate as new "),e.k0s(),e.j41(4,"input",57),e.mxI("ngModelChange",function(n){e.eBV(t);const a=e.XpG(2);return e.DH7(a.deprecateNote,n)||(a.deprecateNote=n),e.Njj(n)}),e.k0s(),e.j41(5,"button",58),e.bIt("click",function(){e.eBV(t);const n=e.XpG(2);return e.Njj(n.onDeprecateClick())}),e.nrm(6,"i",30),e.EFF(7),e.k0s(),e.bVm()}if(2&o){const t=e.XpG(2);e.R7$(4),e.R50("ngModel",t.deprecateNote),e.R7$(),e.AVh("cod-btn--armed",t.pendingDeprecate),e.R7$(),e.AVh("fa-ban",!t.pendingDeprecate)("fa-circle-exclamation",t.pendingDeprecate),e.R7$(),e.SpI(" ",t.pendingDeprecate?"Click again to confirm":"Deprecate"," ")}}function L(o,c){if(1&o&&(e.j41(0,"span",62),e.nrm(1,"i",63),e.EFF(2),e.k0s()),2&o){const t=e.XpG(3);e.R7$(2),e.SpI(" ",null==t.entry?null:t.entry.deprecationNote," ")}}function q(o,c){if(1&o){const t=e.RV6();e.qex(0),e.DNE(1,L,3,1,"span",59),e.j41(2,"button",60),e.bIt("click",function(){e.eBV(t);const n=e.XpG(2);return e.Njj(n.onReactivateClick())}),e.nrm(3,"i",61),e.EFF(4," Reactivate "),e.k0s(),e.bVm()}if(2&o){const t=e.XpG(2);e.R7$(),e.Y8G("ngIf",null==t.entry?null:t.entry.deprecationNote)}}function U(o,c){if(1&o){const t=e.RV6();e.j41(0,"aside",3)(1,"header",4)(2,"div",5)(3,"code",6),e.EFF(4),e.k0s(),e.j41(5,"span",7),e.EFF(6),e.k0s()(),e.j41(7,"button",8),e.bIt("click",function(){e.eBV(t);const n=e.XpG();return e.Njj(n.onClose())}),e.nrm(8,"i",9),e.k0s()(),e.j41(9,"div",10)(10,"section",11)(11,"h3",12),e.
1EFF(12,"Identity "),e.j41(13,"span",13),e.nrm(14,"i",14),e.EFF(15," immutable"),e.k0s()(),e.j41(16,"div",15)(17,"div",16)(18,"label"),e.EFF(19,"Field Key"),e.k0s(),e.nrm(20,"input",17),e.k0s(),e.j41(21,"div",16)(22,"label"),e.EFF(23,"Bucket"),e.k0s(),e.nrm(24,"input",17),e.k0s(),e.j41(25,"div",16)(26,"label"),e.EFF(27,"Data Type"),e.k0s(),e.nrm(28,"input",17),e.k0s(),e.j41(29,"div",16)(30,"label"),e.EFF(31,"Persist Target"),e.k0s(),e.nrm(32,"input",17),e.k0s(),e.j41(33,"div",16)(34,"label"),e.EFF(35,"Scope"),e.k0s(),e.nrm(36,"input",17),e.k0s(),e.j41(37,"div",16)(38,"label"),e.EFF(39,"Value Shape"),e.k0s(),e.nrm(40,"input",17),e.k0s()()(),e.j41(41,"section",11)(42,"h3",12),e.EFF(43,"Editable"),e.k0s(),e.j41(44,"div",16)(45,"label",18),e.EFF(46,"RW Name "),e.j41(47,"span",19),e.EFF(48,"GHL display name"),e.k0s()(),e.j41(49,"input",20),e.mxI("ngModelChange",function(n){const a=e.eBV(t).ngIf;return e.DH7(a.rwName,n)||(a.rwName=n),e.Njj(n)}),e.k0s()(),e.j41(50,"div",16)(51,"label",21),e.EFF(52,"Description"),e.k0s(),e.j41(53,"textarea",22),e.mxI("ngModelChange",function(n){const a=e.eBV(t).ngIf;return e.DH7(a.description,n)||(a.description=n),e.Njj(n)}),e.k0s()(),e.j41(54,"div",16)(55,"label",23),e.EFF(56,"Write Guidance "),e.j41(57,"span",19),e.EFF(58,"rendered into the agent prompt"),e.k0s()(),e.j41(59,"textarea",24),e.mxI("ngModelChange",function(n){const a=e.eBV(t).ngIf;return e.DH7(a.writeGuidance,n)||(a.writeGuidance=n),e.Njj(n)}),e.k0s()(),e.j41(60,"div",16)(61,"label",25),e.EFF(62,"Examples JSON"),e.k0s(),e.j41(63,"textarea",26),e.mxI("ngModelChange",function(n){const a=e.eBV(t).ngIf;return e.DH7(a.examplesJson,n)||(a.examplesJson=n),e.Njj(n)}),e.k0s()(),e.DNE(64,S,3,1,"div",27),e.j41(65,"div",28)(66,"button",29),e.bIt("click",function(){e.eBV(t);const n=e.XpG();return e.Njj(n.onSave())}),e.nrm(67,"i",30),e.EFF(68),e.k0s(),e.DNE(69,N,2,0,"span",31),e.k0s()(),e.j41(70,"section",11)(71,"h3",12),e.
1EFF(72,"Copy"),e.k0s(),e.j41(73,"div",32)(74,"button",33),e.bIt("click",function(){e.eBV(t);const n=e.XpG();return e.Njj(n.copyFieldCode())}),e.nrm(75,"i",30),e.EFF(76),e.k0s(),e.j41(77,"button",34),e.bIt("click",function(){e.eBV(t);const n=e.XpG();return e.Njj(n.copyPromptSnippet())}),e.nrm(78,"i",30),e.EFF(79),e.k0s(),e.j41(80,"button",33),e.bIt("click",function(){e.eBV(t);const n=e.XpG();return e.Njj(n.copyJsonStub())}),e.nrm(81,"i",30),e.EFF(82),e.k0s()()(),e.DNE(83,B,1,4,"app-vocab-values-editor",35),e.j41(84,"section",11)(85,"h3",12),e.EFF(86),e.k0s(),e.DNE(87,z,2,2,"ul",36)(88,J,3,0,"ng-template",null,0,e.C5r),e.k0s()(),e.j41(90,"footer",37),e.DNE(91,K,11,4,"div",38),e.j41(92,"div",39),e.DNE(93,A,8,8,"ng-container",40)(94,q,5,1,"ng-container",40),e.k0s()()()}if(2&o){const t=c.ngIf,i=e.sdS(89),n=e.XpG();e.AVh("cod-drawer--open",n.open),e.R7$(4),e.JRh(t.fieldKey),e.R7$(),e.AVh("cod-status--active",!n.isDeprecated)("cod-status--deprecated",n.isDeprecated),e.R7$(),e.SpI(" ",n.isDeprecated?"Deprecated":"Active"," "),e.R7$(14),e.Y8G("value",t.fieldKey),e.R7$(4),e.Y8G("value",t.bucket),e.R7$(4),e.Y8G("value",t.dataType),e.R7$(4),e.Y8G("value",t.persistTarget),e.R7$(4),e.Y8G("value",null==t.orgId?"Global":"Org "+t.orgId),e.R7$(4),e.Y8G("value",t.valueShape),e.R7$(9),e.R50("ngModel",t.rwName),e.R7$(4),e.R50("ngModel",t.description),e.R7$(6),e.R50("ngModel",t.writeGuidance),e.R7$(4),e.R50("ngModel",t.examplesJson),e.R7$(),e.Y8G("ngIf",n.saveError),e.R7$(2),e.Y8G("disabled",!n.isDirty||n.isSaving),e.R7$(),e.AVh("fa-floppy-disk",!n.isSaving)("fa-circle-notch",n.isSaving)("fa-spin",n.isSaving),e.R7$(),e.SpI(" ",n.isSaving?"Saving\u2026":"Save changes"," "),e.R7$(),e.Y8G("ngIf",n.isDirty&&!n.isSaving),e.R7$(6),e.AVh("fa-copy","code"!==n.copiedKey)("fa-check","code"===n.copiedKey),e.R7$(),e.SpI(" ","code"===n.copiedKey?"Copied":"Field code"," "),e.R7$(),e.Y8G("disabled",n.snippetLoading),e.R7$(),e.AVh("fa-wand-magic-sparkles",!n.snippetLoading&&"snippet"!==n.copiedKey)("fa-circle-notch",n.snippetLoading)("fa-spin",n.snippetLoading)("fa-check","snippet"===n.copiedKey),e.R7$(),e.SpI(" ","snippet"===n.copiedKey?"Copied":n.snippetLoading?"Rendering\u2026":"Prompt snippet"," "),e.R7$(2),e.AVh("fa-code","json"!==n.copiedKey)("fa-check","json"===n.copiedKey),e.R7$(),e.SpI(" ","json"===n.copiedKey?"Copied":"JSON stub"," "),e.R7$(),e.Y8G("ngIf",n.showVocabEditor),e.R7$(3),e.Lme("Emitted by ",n.emittedByNames.length," agent",1===n.emittedByNames.length?"":"s",""),e.R7$(),e.Y8G("ngIf",n.emittedByNames.length>0)("ngIfElse",i),e.R7$(4),e.Y8G("ngIf",!n.isDeprecated&&n.hasActiveEmitters),e.R7$(2),e.Y8G("ngIf",!n.isDeprecated),e.R7$(),e.Y8G("ngIf",n.isDeprecated)}}let H=(()=>{class o{constructor(t,i){this.svc=t,this.cdr=i,this.open=!1,this.entry=null,this.emittedByNames=[],this.saved=new e.bkB,this.deprecated=new e.bkB,this.reactivated=new e.bkB,this.closed=new e.bkB,this.vocabModeChanged=new e.bkB,this.vocabValuesChanged=new e.bkB,this.duplicateRequested=new e.bkB,this.vocabModeSaving=!1,this.vocabValuesSaving=!1,this.vocabSaveError=null,this.draft=null,this.isSaving=!1,this.saveError=null,this.copiedKey=null,this.snippetLoading=!1,this.pendingDeprecate=!1,this.deprecateNote="",this.deprecateTimer=null,this.destroy$=new h.B,this.trackByName=(n,a)=>a}ngOnChanges(t){t.entry&&(this.draft=this.entry?{...this.entry}:null,this.saveError=null,this.pendingDeprecate=!1,this.deprecateNote="",this.deprecateTimer&&(clearTimeout(this.deprecateTimer),this.deprecateTimer=null))}get isDirty(){return!(!this.draft||!this.entry||this.draft.rwName===this.entry.rwName&&this.draft.description===this.entry.description&&this.draft.writeGuidance===this.entry.writeGuidance&&this.draft.examplesJson===this.entry.examplesJson)}get isDeprecated(){return!!this.entry?.deprecatedAt}get hasActiveEmitters(){return this.emittedByNames.length>0}get showVocabEditor(){return!(!this.entry||"scores"!==this.entry.bucket&&"fields"!==this.entry.bucket||this.isDeprecated)}onVocabModeChanged(t){this.entry&&this.vocabModeChanged.emit({id:this.entry.outputId,mode:t})}onVocabValuesChanged(t){if(!this.entry)return;const i=t.length>0?JSON.stringify(t):"[]";this.vocabValuesChanged.emit({id:this.entry.outputId,valuesJson:i})}
1onDuplicateClick(){this.entry&&this.duplicateRequested.emit(this.entry)}onClose(){this.closed.emit()}onSave(){!this.draft||!this.isDirty||this.isSaving||(this.isSaving=!0,this.saveError=null,this.cdr.markForCheck(),this.svc.patch(this.draft.outputId,this.draft).pipe((0,g.Q)(this.destroy$)).subscribe({next:t=>{this.isSaving=!1,this.saved.emit(t),this.cdr.markForCheck()},error:t=>{this.isSaving=!1,this.saveError=t?.error??t?.error?.message??`Save failed (${t?.status??"network"})`,this.cdr.markForCheck()}}))}onDeprecateClick(){if(this.entry){if(this.pendingDeprecate)return this.pendingDeprecate=!1,this.deprecateTimer&&(clearTimeout(this.deprecateTimer),this.deprecateTimer=null),void this.deprecated.emit({id:this.entry.outputId,note:this.deprecateNote.trim()});this.pendingDeprecate=!0,this.cdr.markForCheck(),this.deprecateTimer=setTimeout(()=>{this.pendingDeprecate=!1,this.cdr.markForCheck()},4e3)}}onReactivateClick(){this.entry&&this.reactivated.emit(this.entry.outputId)}flashCopied(t){this.copiedKey=t,this.cdr.markForCheck(),setTimeout(()=>{this.copiedKey=null,this.cdr.markForCheck()},1500)}writeClipboard(t,i){navigator.clipboard?.writeText(t).then(()=>this.flashCopied(i),()=>{})}copyFieldCode(){this.entry&&this.writeClipboard(this.entry.fieldKey,"code")}copyJsonStub(){this.entry&&this.writeClipboard(`"${this.entry.fieldKey}": ${this.sampleValue(this.entry.dataType)}`,"json")}copyPromptSnippet(){!this.entry||this.snippetLoading||(this.snippetLoading=!0,this.cdr.markForCheck(),this.svc.snippet(this.entry.fieldKey).pipe((0,g.Q)(this.destroy$)).subscribe({next:t=>{this.snippetLoading=!1,this.writeClipboard(t.snippet??"","snippet")},error:()=>{this.snippetLoading=!1,this.cdr.markForCheck()}}))}sampleValue(t){switch((t||"").toUpperCase()){case"NUMERICAL":return"7";case"FLOAT":return"0.5";default:return'"\u2026"'}}static{this.\u0275fac=function(i){return new(i||o)(e.rXU(b),e.rXU(e.gRc))}}static{this.\u0275cmp=e.VBU({type:o,selectors:[["app-output-detail-drawer"]],inputs:{open:"open",entry:"entry",emittedByNames:"emittedByNames",vocabModeSaving:"vocabModeSaving",vocabValuesSaving:"vocabValuesSaving",vocabSaveError:"vocabSaveError"},outputs:{saved:"saved",deprecated:"deprecated",reactivated:"reactivated",closed:"closed",vocabModeChanged:"vocabModeChanged",vocabValuesChanged:"vocabValuesChanged",duplicateRequested:"duplicateRequested"},standalone:!0,features:[e.OA$,e.aNF],decls:2,vars:3,consts:[["noUse",""],[1,"cod-overlay",3,"click"],["class","cod-drawer",3,"cod-drawer--open",4,"ngIf"],[1,"cod-drawer"],[1,"cod-head"],[1,"cod-head-main"],[1,"cod-key"],[1,"cod-status"],["type","button","aria-label","Close",1,"cod-close",3,"click"],[1,"fas","fa-times"],[1,"cod-body"],[1,"cod-section"],[1,"cod-section-title"],[1,"cod-lock"],[1,"fas","fa-lock"],[1,"cod-grid"],[1,"cod-field"],["type","text","disabled","",3,"value"],["for","cod-rwname"],[1,"cod-hint"],["id","cod-rwname","type","text","maxlength","200",3,"ngModelChange","ngModel"],["for","cod-desc"],["id","cod-desc","rows","2",3,"ngModelChange","ngModel"],["for","cod-guid"],["id","cod-guid","rows","3",3,"ngModelChange","ngModel"],["for","cod-ex"],["id","cod-ex","rows","2","placeholder",'e.g. ["high","medium","low"]',1,"cod-mono",3,"ngModelChange","ngModel"],["class","cod-error",4,"ngIf"],[1,"cod-save-row"],["type","button",1,"cod-btn","cod-btn--primary",3,"click","disabled"],[1,"fas"],["class","cod-dirty",4,"ngIf"],[1,"cod-copy-row"],["type","button",1,"cod-btn",3,"click"],["type","button",1,"cod-btn",3,"click","disabled"],[3,"entry","saving","savingMode","saveError","modeChangeRequested","valuesChangeRequested",4,"ngIf"],["class","cod-usedby",4,"ngIf","ngIfElse"],[1,"cod-foot"],["class","cod-safe-retire",4,"ngIf"],[1,"cod-foot-row"],[4,"ngIf"],[1,"cod-error"],[1,"fas","fa-circle-exclamation"],[1,"cod-dirty"],[3,"modeChangeRequested","valuesChangeRequested","entry","saving","savingMode","saveError"],[1,"cod-usedby"],[4,"ngFor","ngForOf","ngForTrackBy"],[3,"routerLink","queryParams"],[1,"fas","fa-robot"],[1,"cod-muted"],[1,"fas","fa-triangle-exclamation"],[1,"cod-safe-retire"],[1,"cod-safe-retire-head"],[1,"cod-safe-retire-list"],[1,"cod-safe-retire-hint"],["type","button","title","Pre-fill the create form from this row (new FieldKey)",1,"cod-btn","cod-btn--secondary",3,"click"],[1,"fas","fa-copy"],["type","text","placeholder","Deprecation note (optional)",1,"cod-note",3,"ngModelChange","ngModel"],["type","button",1,"cod-btn","cod-btn--danger",3,"click"],["class","cod-muted cod-foot-note",4,"ngIf"],["type","button",1,"cod-btn","cod-btn--primary",3,"click"],[1,"fas","fa-rotate-left"],[1,"cod-muted","cod-foot-note"],[1,"fas","fa-circle-info"]],template:function(i,n){1&i&&(e.j41(0,"div",1),e.bIt("click",function(){return n.onClose()}),e.k0s(),e.DNE(1,U,95,56,"aside",2)),2&i&&(e.AVh("cod-overlay--open",n.open),e.R7$(),e.Y8G("ngIf",n.draft))},dependencies:[d.MD,d.Sq,d.bT,s.YN,s.me,s.BC,s.tU,s.vS,v.Wk,D],styles:[".cod-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#0f172a61;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease;z-index:1040}.cod-overlay--open[_ngcontent-%COMP%]{opacity:1;visibility:visible}.cod-drawer[_ngcontent-%COMP%]{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(880px,94vw);max-height:92vh;display:flex;flex-direction:column;background:#fff;border:1px solid #e2e8f0;border-radius:12px;box-shadow:0 24px 64px #0f172a3d,0 4px 12px #0f172a14;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease,box-shadow .2s ease;z-index:1041;overflow:hidden}.cod-drawer--open[_ngcontent-%COMP%]{opacity:1;visibility:visible}@media (max-width: 700px){.cod-drawer[_ngcontent-%COMP%]{width:96vw;max-height:94vh}}.cod-head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 18px;border-bottom:1px solid #e2e8f0;background:#f8fafc}.cod-head-main[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;min-width:0}.cod-key[_ngcontent-%COMP%]{font-size:14px;font-weight:600;color:#0f172a;background:#eef2ff;padding:3px 8px;border-radius:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cod-status[_ngcontent-%COMP%]{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11px;font-weight:600;border:1px solid transparent;flex-shrink:0}.cod-status--active[_ngcontent-%COMP%]{background:#ecfdf5;color:#047857;border-color:#a7f3d0}.cod-status--deprecated[_ngcontent-%COMP%]{background:#fef2f2;color:#991b1b;border-color:#fecaca}
1.cod-close[_ngcontent-%COMP%]{border:none;background:transparent;color:#64748b;font-size:16px;cursor:pointer;padding:4px 8px;border-radius:4px;transition:color .2s ease,background-color .2s ease}.cod-close[_ngcontent-%COMP%]:hover{color:#0f172a;background:#e2e8f0}.cod-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:18px}.cod-section[_ngcontent-%COMP%]{margin-bottom:22px}.cod-section[_ngcontent-%COMP%]:last-child{margin-bottom:0}.cod-section-title[_ngcontent-%COMP%]{font-size:11px;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.5px;margin:0 0 10px;display:flex;align-items:center;gap:8px}.cod-lock[_ngcontent-%COMP%]{font-weight:600;color:#94a3b8;text-transform:none;letter-spacing:0;font-size:10px}.cod-lock[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-right:3px}.cod-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(2,1fr);gap:10px 14px}@media (max-width: 600px){.cod-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}.cod-field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px;margin-bottom:12px}.cod-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:11px;font-weight:600;color:#475569}.cod-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .cod-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{font-size:13px;padding:7px 10px;border:1px solid #cbd5e1;border-radius:6px;background:#fff;color:#0f172a;font-family:inherit;transition:border-color .2s ease,box-shadow .2s ease}.cod-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, .cod-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus{outline:none;border-color:#2f7fff;box-shadow:0 0 0 2px #2f7fff29}.cod-field[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:disabled, .cod-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:disabled{background:#f1f5f9;color:#64748b;cursor:not-allowed}.cod-field[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{resize:vertical}.cod-mono[_ngcontent-%COMP%]{font-family:SFMono-Regular,Consolas,monospace;font-size:12px}.cod-hint[_ngcontent-%COMP%]{font-weight:400;color:#94a3b8;font-size:10px}.cod-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid #cbd5e1;border-radius:6px;color:#1e293b;font-size:12px;padding:7px 12px;cursor:pointer;transition:border-color .2s ease,color .2s ease,background-color .2s ease}.cod-btn[_ngcontent-%COMP%]:hover:not(:disabled){border-color:#94a3b8;background:#f8fafc}.cod-btn[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.cod-btn--primary[_ngcontent-%COMP%]{background:#2f7fff;border-color:#2f7fff;color:#fff}.cod-btn--primary[_ngcontent-%COMP%]:hover:not(:disabled){background:#1f6fe5;border-color:#1f6fe5}.cod-btn--danger[_ngcontent-%COMP%]{color:#991b1b;border-color:#fecaca}.cod-btn--danger[_ngcontent-%COMP%]:hover:not(:disabled){background:#fef2f2;border-color:#fca5a5}.cod-btn--armed[_ngcontent-%COMP%]{background:#fef2f2;border-color:#ef4444;color:#991b1b}.cod-copy-row[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:8px}.cod-save-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;margin-top:4px}.cod-dirty[_ngcontent-%COMP%]{font-size:11px;color:#b45309;font-weight:600}.cod-error[_ngcontent-%COMP%]{background:#fef2f2;border:1px solid #fecaca;border-left:3px solid #ef4444;border-radius:4px;padding:8px 12px;font-size:12px;color:#991b1b;margin:6px 0 12px}.cod-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-right:6px}.cod-usedby[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.cod-usedby[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:#2f7fff;text-decoration:none}.cod-usedby[_ngcontent-%COMP%] a[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#94a3b8;font-size:11px}.cod-usedby[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}.cod-muted[_ngcontent-%COMP%]{font-size:12px;color:#94a3b8;margin:0}.cod-muted[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-right:5px;color:#f59e0b}.cod-foot[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;padding:14px 18px;border-top:1px solid #e2e8f0;background:#f8fafc}.cod-safe-retire[_ngcontent-%COMP%]{padding:12px 14px;background:#fffbeb;border:1px solid #fde68a;border-radius:6px;display:flex;flex-direction:column;gap:8px}
1.cod-safe-retire-head[_ngcontent-%COMP%]{font-size:12px;font-weight:600;color:#92400e;display:inline-flex;align-items:center;gap:6px}.cod-safe-retire-head[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#d97706;font-size:11px}.cod-safe-retire-head[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:#78350f}.cod-safe-retire-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:4px 6px}.cod-safe-retire-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;background:#fff;border:1px solid #fde68a;color:#78350f;font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.cod-safe-retire-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:10px;color:#d97706}.cod-safe-retire-hint[_ngcontent-%COMP%]{margin:0;font-size:11px;color:#92400e;font-style:italic;line-height:1.45}.cod-foot-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.cod-note[_ngcontent-%COMP%]{flex:1;min-width:160px;font-size:12px;padding:7px 10px;border:1px solid #cbd5e1;border-radius:6px;background:#fff;color:#0f172a;transition:border-color .2s ease,box-shadow .2s ease}.cod-note[_ngcontent-%COMP%]:focus{outline:none;border-color:#2f7fff;box-shadow:0 0 0 2px #2f7fff29}.cod-foot-note[_ngcontent-%COMP%]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cod-btn--secondary[_ngcontent-%COMP%]{background:#fff;border:1px solid #cbd5e1;color:#1e293b;display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border-radius:6px;font-size:12px;font-weight:600;cursor:pointer;transition:border-color .2s ease,color .2s ease,background-color .2s ease}.cod-btn--secondary[_ngcontent-%COMP%]:hover:not(:disabled){border-color:#2f7fff;color:#1d4ed8;background:#f0f7ff}.cod-btn--secondary[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}@media (max-width: 600px){.cod-foot-row[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch}.cod-note[_ngcontent-%COMP%]{min-width:0}}"],changeDetection:0})}}return o})();const f=()=>({standalone:!0});function W(o,c){if(1&o&&(e.j41(0,"span",39),e.nrm(1,"i",40),e.EFF(2," Duplicating from "),e.j41(3,"code"),e.EFF(4),e.k0s()()),2&o){const t=e.XpG();e.R7$(4),e.JRh(t.duplicatedFromLabel)}}function Q(o,c){if(1&o&&(e.j41(0,"option",41),e.EFF(1),e.k0s()),2&o){const t=c.$implicit;e.Y8G("value",t),e.R7$(),e.JRh(t)}}function Z(o,c){if(1&o&&(e.j41(0,"option",41),e.EFF(1),e.k0s()),2&o){const t=c.$implicit;e.Y8G("value",t),e.R7$(),e.JRh(t)}}function ee(o,c){1&o&&(e.j41(0,"span",42),e.nrm(1,"i",43),e.EFF(2," auto "),e.k0s())}function te(o,c){if(1&o&&(e.j41(0,"option",41),e.EFF(1),e.k0s()),2&o){const t=c.$implicit;e.Y8G("value",t),e.R7$(),e.JRh(t)}}function ne(o,c){if(1&o){const t=e.RV6();e.j41(0,"select",14),e.mxI("ngModelChange",function(n){e.eBV(t);const a=e.XpG();return e.DH7(a.persistTarget,n)||(a.persistTarget=n),e.Njj(n)}),e.DNE(1,te,2,2,"option",15),e.k0s()}if(2&o){const t=e.XpG();e.R50("ngModel",t.persistTarget),e.Y8G("ngModelOptions",e.lJ4(3,f)),e.R7$(),e.Y8G("ngForOf",t.validPersistTargets)}}function oe(o,c){if(1&o&&(e.j41(0,"div",44),e.EFF(1),e.k0s()),2&o){const t=e.XpG();e.R7$(),e.SpI(" ",t.persistTarget," ")}}function ie(o,c){if(1&o&&(e.j41(0,"span",45),e.nrm(1,"i",21),e.EFF(2),e.k0s()),2&o){const t=e.XpG();e.R7$(2),e.SpI(" ",t.casingHint," ")}}function ae(o,c){if(1&o&&(e.j41(0,"span",46),e.EFF(1),e.k0s()),2&o){const t=e.XpG();e.R7$(),e.JRh(t.errorFor("fieldKey"))}}function ce(o,c){if(1&o&&(e.j41(0,"span",46),e.EFF(1),e.k0s()),2&o){const t=e.XpG();e.R7$(),e.JRh(t.errorFor("rwName"))}}function re(o,c){if(1&o&&(e.j41(0,"span",46),e.EFF(1),e.k0s()),2&o){const t=e.XpG();e.R7$(),e.JRh(t.errorFor("examplesJson"))}}function se(o,c){1&o&&(e.j41(0,"span",45),e.EFF(1,"\u2014 disabled in Free mode"),e.k0s())}function le(o,c){if(1&o&&(e.j41(0,"span",46),e.EFF(1),e.k0s()),2&o){const t=e.XpG(2);e.R7$(),e.JRh(t.errorFor("defaultValuesJson"))}}function de(o,c){if(1&o){const t=e.RV6();e.j41(0,"fieldset",47)(1,"legend"),e.nrm(2,"i",48),e.EFF(3," Controlled vocabulary "),e.j41(4,"span",49),e.EFF(5,"optional \u2014 scores/fields only"),e.k0s()(),e.j41(6,"div",50)(7,"label",11)(8,"span",12),e.EFF(9,"Value-Set Mode"),e.k0s(),e.j41(10,"select",14),e.mxI("ngModelChange",function(n){e.eBV(t);const a=e.XpG();return e.DH7(a.valueSetMode,n)||(a.valueSetMode=n),e.Njj(n)}),e.j41(11,"option",51),e.EFF(12,"Free \u2014 no vocabulary applied"),e.k0s(),e.j41(13,"option",52),e.EFF(14,"Closed \u2014 only listed values accepted"),e.k0s(),e.j41(15,"option",53),e.EFF(16,"OpenWithDefaults \u2014 listed + new sightings tracked"),e.k0s()()()(),e.j41(17,"label",30)(18,"span",12),e.EFF(19," Default Values (JSON array) "),e.DNE(20,se,2,0,"span",24),e.k0s(),e.j41(21,"textarea",54),e.mxI("ngModelChange",function(n){e.eBV(t);const a=e.XpG();return e.DH7(a.defaultValuesJsonDraft,n)||(a.defaultValuesJsonDraft=n),e.Njj(n)}),e.k0s(),e.DNE(22,le,2,1,"span",25),e.k0s()()}if(2&o){const t=e.XpG();e.R7$(10),e.R50("ngModel",t.valueSetMode),e.Y8G("ngModelOptions",e.lJ4(7,f)),e.R7$(10),e.Y8G("ngIf",t.vocabValuesDisabled),e.R7$(),e.R50("ngModel",t.defaultValuesJsonDraft),e.Y8G("ngModelOptions",e.lJ4(8,f))("disabled",t.vocabValuesDisabled),e.R7$(),e.Y8G("ngIf",t.hasError("defaultValuesJson"))}}function pe(o,c){if(1&o&&(e.j41(0,"div",55),e.nrm(1,"i",56),e.EFF(2),e.k0s()),2&o){const t=e.XpG();e.R7$(2),e.SpI(" ",t.submitError," ")}}function fe(o,c){1&o&&(e.j41(0,"span"),e.EFF(1,"Cancel"),e.k0s())}function ge(o,c){1&o&&(e.j41(0,"span"),e.EFF(1,"Discard draft?"),e.k0s())}let ue=(()=>{class o{static{this.VALID_PERSIST_FOR_BUCKET={scores:["ghlCustom"],fields:["ghlCustom","ghlStandard"],tags:["ghlTag"],milestones:["factMilestone"],actions:["dwOnly"],warnings:["dwOnly"],insights:["dwOnly"]}}static{this.DEFAULT_PERSIST_FOR_BUCKET={scores:"ghlCustom",fields:"ghlCustom",tags:"ghlTag",milestones:"factMilestone",warnings:"dwOnly",insights:"dwOnly",actions:"dwOnly"}}static{this.PERSIST_DESCRIPTIONS={ghlCustom:"Writes to a custom field on the GHL contact record (added via the customField payload).",ghlStandard:"Updates a standard GHL contact property (e.g. firstName, companyName, email).",ghlTag:"Appends as a tag on the contact\u2019s GHL tag list (tag is added/removed via the tag API).",dwOnly:"Recorded in the data warehouse only \u2014 never pushed back to the CRM.",factMilestone:"Inserts a row into FACT_Milestones \u2014 the milestone fact table the analytics layer reads."}}
1static{this.CASING_HINT_FOR_BUCKET={scores:"camelCase (e.g. leadScore)",fields:"camelCase (e.g. industry, summary)",tags:"kebab-case (e.g. hot-lead)",milestones:"PascalCase (e.g. BookedDemo)",actions:"camelCase (e.g. sendFollowUp)",warnings:"camelCase (e.g. doNotContact)",insights:"camelCase (e.g. nextBestAction)"}}constructor(t){this.cdr=t,this.duplicateFrom=null,this.submitError=null,this.submitting=!1,this.submitted=new e.bkB,this.cancelled=new e.bkB,this.fieldKey="",this.rwName="",this.bucket="fields",this.dataType="TEXT",this.persistTarget="ghlCustom",this.description=null,this.writeGuidance=null,this.examplesJson=null,this.valueSetMode="Free",this.defaultValuesJsonDraft="",this.errors={},this.confirmingCancel=!1,this.confirmTimer=null,this.duplicatedFromLabel=null,this.buckets=["scores","fields","tags","milestones","actions","warnings","insights"],this.dataTypes=["NUMERICAL","FLOAT","TEXT","LARGE_TEXT"],this.persistTargets=["ghlCustom","ghlStandard","ghlTag","dwOnly","factMilestone"]}ngOnChanges(t){t.duplicateFrom&&this.applyDuplicateFrom()}applyDuplicateFrom(){const t=this.duplicateFrom;t?(this.duplicatedFromLabel=t.fieldKey,this.fieldKey="",this.rwName=t.rwName??"",this.bucket=t.bucket,this.dataType=t.dataType,this.persistTarget=t.persistTarget,this.description=t.description,this.writeGuidance=t.writeGuidance,this.examplesJson=t.examplesJson,this.valueSetMode=t.valueSetMode??"Free",this.defaultValuesJsonDraft=t.defaultValuesJson??"",this.errors={},this.confirmingCancel=!1,this.cdr.markForCheck()):this.duplicatedFromLabel=null}get casingHint(){return o.CASING_HINT_FOR_BUCKET[this.bucket]??""}get validPersistTargets(){return o.VALID_PERSIST_FOR_BUCKET[this.bucket]??this.persistTargets}get persistIsLocked(){return this.validPersistTargets.length<=1}get persistDescription(){return o.PERSIST_DESCRIPTIONS[this.persistTarget]??""}get showVocabBlock(){return"scores"===this.bucket||"fields"===this.bucket}get vocabValuesDisabled(){return"Free"===this.valueSetMode}get isDirty(){return!!(this.fieldKey||this.rwName||this.description||this.writeGuidance||this.examplesJson||this.defaultValuesJsonDraft||"Free"!==this.valueSetMode||null!=this.duplicateFrom)}onBucketChange(t){this.bucket=t;const i=this.validPersistTargets;i.includes(this.persistTarget)||(this.persistTarget=i[0]??o.DEFAULT_PERSIST_FOR_BUCKET[t]??this.persistTarget),this.showVocabBlock||(this.valueSetMode="Free",this.defaultValuesJsonDraft=""),this.cdr.markForCheck()}validate(){const t={};if(this.fieldKey.trim()||(t.fieldKey="FieldKey is required."),this.rwName.trim()||(t.rwName="RwName is required."),this.buckets.includes(this.bucket)||(t.bucket=`Bucket must be one of: ${this.buckets.join(", ")}.`),this.dataTypes.includes(this.dataType)||(t.dataType=`DataType must be one of: ${this.dataTypes.join(", ")}.`),this.persistTargets.includes(this.persistTarget)||(t.persistTarget=`PersistTarget must be one of: ${this.persistTargets.join(", ")}.`),this.examplesJson&&this.examplesJson.trim())try{JSON.parse(this.examplesJson)}catch{t.examplesJson="ExamplesJson must be valid JSON (or blank)."}if(this.showVocabBlock&&this.defaultValuesJsonDraft.trim())try{const i=JSON.parse(this.defaultValuesJsonDraft);Array.isArray(i)||(t.defaultValuesJson="DefaultValuesJson must be a JSON array (or blank).")}catch{t.defaultValuesJson="DefaultValuesJson is not valid JSON."}return this.errors=t,0===Object.keys(t).length}hasError(t){return!!this.errors[t]}errorFor(t){return this.errors[t]??null}submit(){if(!this.validate())return void this.cdr.markForCheck();const t=(new Date).toISOString(),i=this.showVocabBlock&&"Free"!==this.valueSetMode&&!!this.defaultValuesJsonDraft.trim(),n={outputId:0,fieldKey:this.fieldKey.trim(),orgId:null,bucket:this.bucket,persistTarget:this.persistTarget,dataType:this.dataType,category:null,priority:5,displayAs:null,colorHint:null,sortOrder:10,rwName:this.rwName.trim(),valueShape:"scalar",primaryValueKey:null,schemaJson:null,dimColumn:null,primaryFieldOnly:!1,description:this.description?.trim()||null,writeGuidance:this.writeGuidance?.trim()||null,examplesJson:this.examplesJson?.trim()||null,isPii:!1,version:1,deprecatedAt:null,deprecationNote:null,createdAt:t,updatedAt:t,updatedByUserId:null,valueSetMode:this.showVocabBlock?this.valueSetMode:"Free",defaultValuesJson:i?this.defaultValuesJsonDraft.trim():null};this.submitted.emit(n)}cancel(){if(this.isDirty)return this.confirmingCancel?(this.clearConfirmTimer(),this.confirmingCancel=!1,void this.cancelled.emit()):(this.confirmingCancel=!0,this.confirmTimer=setTimeout(()=>{this.confirmingCancel=!1,this.cdr.markForCheck()},4e3),void this.cdr.markForCheck());this.cancelled.emit()}clearConfirmTimer(){this.confirmTimer&&(clearTimeout(this.confirmTimer),this.confirmTimer=null)}static{this.\u0275fac=function(i){return new(i||o)(e.rXU(e.gRc))}}static{this.\u0275cmp=e.VBU({type:o,selectors:[["app-create-field-form"]],inputs:{duplicateFrom:"duplicateFrom",submitError:"submitError",submitting:"submitting"},outputs:{submitted:"submitted",cancelled:"cancelled"},standalone:!0,features:[e.OA$,e.aNF],decls:81,vars:55,consts:[["role","presentation",1,"cff-backdrop",3,"click","keydown.escape"],["role","dialog","aria-modal","true","aria-labelledby","cff-title",1,"cff-modal",3,"click"],[1,"cff-modal-head"],[1,"cff-modal-head-text"],["id","cff-title",1,"cff-title"],[1,"fas","fa-plus-circle"],["class","cff-dup-tag",4,"ngIf"],["type","button","aria-label","Close","title","Close (cancel)",1,"cff-modal-close",3,"click","disabled"],[1,"fas","fa-times"],[1,"cff-sub"],[1,"cff-row","cff-row--identity"],[1,"cff-field"],[1,"cff-label"],[1,"cff-req"],[1,"cff-input",3,"ngModelChange","ngModel","ngModelOptions"],[3,"value",4,"ngFor","ngForOf"],[1,"cff-field","cff-field--persist"],["class","cff-locked-tag",4,"ngIf"],["class","cff-input",3,"ngModel","ngModelOptions","ngModelChange",4,"ngIf"],["class","cff-locked-value",4,"ngIf"],[1,"cff-persist-desc"],[1,"fas","fa-info-circle"],[1,"cff-row","cff-row--names"],["type","text","placeholder","e.g. leadScore",1,"cff-input",3,"ngModelChange","ngModel","ngModelOptions"],["class","cff-hint",4,"ngIf"],["class","cff-err",4,"ngIf"],["type","text","placeholder","e.g. RW Lead Score",1,"cff-input",3,"ngModelChange","ngModel","ngModelOptions"],[1,"cff-row","cff-row--prose"],["rows","3","placeholder","What this field represents. Surfaces in pickers.",1,"cff-input","cff-textarea",3,"ngModelChange","ngModel","ngModelOptions"],["rows","3","placeholder","LLM-facing guidance \u2014 surfaces in agent prompts.",1,"cff-input","cff-textarea",3,"ngModelChange","ngModel","ngModelOptions"],[1,"cff-field","cff-field--full"],["rows","2","placeholder",'[{"value":"manufacturing"},{"value":"finance"}]',1,"cff-input","cff-textarea","cff-textarea--mono",3,"ngModelChange","ngModel","ngModelOptions"],["class","cff-vocab",4,"ngIf"],["class","cff-server-err",4,"ngIf"],[1,"cff-actions"],["type","button",1,"cff-btn","cff-btn--cancel",3,"click","disabled"],[1,"fas"],[4,"ngIf"],["type","button",1,"cff-btn","cff-btn--submit",3,"click","disabled"],[1,"cff-dup-tag"],[1,"fas","fa-copy"],[3,"value"],[1,"cff-locked-tag"],[1,"fas","fa-lock"],[1,"cff-locked-value"],[1,"cff-hint"],[1,"cff-err"],[1,"cff-vocab"],[1,"fas","fa-list-check"],[1,"cff-vocab-hint"],[1,"cff-row","cff-row--vocab"],["value","Free"],["value","Closed"],["value","OpenWithDefaults"],["rows","3","placeholder",'["manufacturing","finance","retail"]',1,"cff-input","cff-textarea","cff-textarea--mono",3,"ngModelChange","ngModel","ngModelOptions","disabled"],[1,"cff-server-err"],[1,"fas","fa-circle-exclamation"]],template:function(i,n){1&i&&(e.j41(0,"div",0),e.bIt("click",function(){return n.cancel()})("keydown.escape",function(){return n.cancel()}),e.k0s(),e.j41(1,"section",1),e.bIt("click",function(r){return r.stopPropagation()}),e.j41(2,"header",2)(3,"div",3)(4,"h2",4),e.nrm(5,"i",5),e.EFF(6," New canonical field "),e.k0s(),e.DNE(7,W,5,1,"span",6),e.k0s(),e.j41(8,"button",7),e.bIt("click",function(){return n.cancel()}),e.nrm(9,"i",8),e.k0s()(),e.j41(10,"p",9),e.EFF(11," Immutable identity (Bucket \xb7 FieldKey \xb7 DataType \xb7 PersistTarget) is set once at create time \u2014 change a field later by deprecating and creating a new one (Decision #107). "),e.k0s(),e.j41(12,"div",10)(13,"label",11)(14,"span",12),e.EFF(15,"Bucket "),e.j41(16,"span",13),e.EFF(17,"*"),e.k0s()(),e.j41(18,"select",14),e.bIt("ngModelChange",function(r){return n.onBucketChange(r)}),e.DNE(19,Q,2,2,"option",15),e.k0s()(),e.j41(20,"label",11)(21,"span",12),e.EFF(22,"DataType "),e.j41(23,"span",13),e.EFF(24,"*"),e.k0s()(),e.j41(25,"select",14),e.mxI("ngModelChange",function(r){return e.DH7(n.dataType,r)||(n.dataType=r),r}),e.DNE(26,Z,2,2,"option",15),e.k0s()(),e.j41(27,"label",16)(28,"span",12),e.EFF(29," Persist Target "),e.j41(30,"span",13),e.EFF(31,"*"),e.k0s(),e.DNE(32,ee,3,0,"span",17),e.k0s(),e.DNE(33,ne,2,4,"select",18)(34,oe,2,1,"div",19),e.k0s()(),e.j41(35,"p",20),e.nrm(36,"i",21),e.j41(37,"strong"),e.EFF(38),e.k0s(),e.EFF(39),e.k0s(),e.j41(40,"div",22)(41,"label",11)(42,"span",12),e.EFF(43,"FieldKey "),e.j41(44,"span",13),e.EFF(45,"*"),e.k0s()(),e.j41(46,"input",23),e.mxI("ngModelChange",function(r){return e.DH7(n.fieldKey,r)||(n.fieldKey=r),r}),e.k0s(),e.DNE(47,ie,3,1,"span",24)(48,ae,2,1,"span",25),e.k0s(),e.j41(49,"label",11)(50,"span",12),e.EFF(51,"RW Name "),e.j41(52,"span",13),e.EFF(53,"*"),e.k0s()(),e.j41(54,"input",26),e.mxI("ngModelChange",function(r){return e.DH7(n.rwName,r)||(n.rwName=r),r}),e.k0s(),e.DNE(55,ce,2,1,"span",25),e.k0s()(),e.j41(56,"div",27)(57,"label",11)(58,"span",12),e.EFF(59,"Description"),e.k0s(),e.j41(60,"textarea",28),e.mxI("ngModelChange",function(r){return e.DH7(n.description,r)||(n.description=r),r}),e.k0s()(),e.j41(61,"label",11)(62,"span",12),e.EFF(63,"Write Guidance"),e.k0s(),e.j41(64,"textarea",29),e.mxI("ngModelChange",function(r){return e.DH7(n.writeGuidance,r)||(n.writeGuidance=r),r}),e.k0s()()(),e.j41(65,"label",30)(66,"span",12),e.EFF(67,"Examples (JSON, optional)"),e.k0s(),e.j41(68,"textarea",31),e.mxI("ngModelChange",function(r){return e.DH7(n.examplesJson,r)||(n.examplesJson=r),r}),e.k0s(),e.DNE(69,re,2,1,"span",25),e.k0s(),e.DNE(70,de,23,9,"fieldset",32)(71,pe,3,1,"div",33),e.j41(72,"div",34)(73,"button",35),e.bIt("click",function(){return n.cancel()}),e.nrm(74,"i",36),e.DNE(75,fe,2,0,"span",37)(76,ge,2,0,"span",37),e.k0s(),e.j41(77,"button",38),e.bIt("click",function(){return n.submit()}),e.nrm(78,"i",36),e.j41(79,"span"),e.EFF(80),e.k0s()()()()),2&i&&(e.R7$(),e.AVh("cff-modal--submitting",n.submitting),e.R7$(6),e.Y8G("ngIf",n.duplicatedFromLabel),e.R7$(),e.Y8G("disabled",n.submitting),e.R7$(10),e.Y8G("ngModel",n.bucket)("ngModelOptions",e.lJ4(48,f)),e.R7$(),e.Y8G("ngForOf",n.buckets),e.R7$(6),e.R50("ngModel",n.dataType),e.Y8G("ngModelOptions",e.lJ4(49,f)),e.R7$(),e.Y8G("ngForOf",n.dataTypes),e.R7$(6),e.Y8G("ngIf",n.persistIsLocked),e.R7$(),e.Y8G("ngIf",!n.persistIsLocked),e.R7$(),e.Y8G("ngIf",n.persistIsLocked),e.R7$(4),e.JRh(n.persistTarget),e.R7$(),e.SpI(" \u2014 ",n.persistDescription," "),e.R7$(7),e.R50("ngModel",n.fieldKey),e.Y8G("ngModelOptions",e.lJ4(50,f)),e.R7$(),e.Y8G("ngIf",n.casingHint),e.R7$(),e.Y8G("ngIf",n.hasError("fieldKey")),e.R7$(6),e.R50("ngModel",n.rwName),e.Y8G("ngModelOptions",e.lJ4(51,f)),e.R7$(),e.Y8G("ngIf",n.hasError("rwName")),e.R7$(5),e.R50("ngModel",n.description),e.Y8G("ngModelOptions",e.lJ4(52,f)),e.R7$(4),e.R50("ngModel",n.writeGuidance),e.Y8G("ngModelOptions",e.lJ4(53,f)),e.R7$(4),e.R50("ngModel",n.examplesJson),e.Y8G("ngModelOptions",e.lJ4(54,f)),e.R7$(),e.Y8G("ngIf",n.hasError("examplesJson")),e.R7$(),e.Y8G("ngIf",n.showVocabBlock),e.R7$(),e.Y8G("ngIf",n.submitError),e.R7$(2),e.AVh("cff-btn--confirm",n.confirmingCancel),e.Y8G("disabled",n.submitting),e.R7$(),e.AVh("fa-xmark",!n.confirmingCancel)("fa-triangle-exclamation",n.confirmingCancel),e.R7$(),e.Y8G("ngIf",!n.confirmingCancel),e.R7$(),e.Y8G("ngIf",n.confirmingCancel),e.R7$(),e.Y8G("disabled",n.submitting),e.R7$(),e.AVh("fa-plus",!n.submitting)("fa-circle-notch",n.submitting)("fa-spin",n.submitting),e.R7$(2),e.JRh(n.submitting?"Creating\u2026":"Create field"))},dependencies:[d.MD,d.Sq,d.bT,s.YN,s.xH,s.y7,s.me,s.wz,s.BC,s.vS],styles:["[_nghost-%COMP%]{display:block}.cff-backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;background:#0f172a73;z-index:1000;animation:_ngcontent-%COMP%_cff-fade-in .15s ease-out}@keyframes _ngcontent-%COMP%_cff-fade-in{0%{opacity:0}
1to{opacity:1}}.cff-modal[_ngcontent-%COMP%]{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:min(880px,94vw);max-height:92vh;overflow-y:auto;background:#fff;border-radius:12px;box-shadow:0 24px 64px #0f172a3d,0 4px 12px #0f172a14;z-index:1001;padding:20px 24px 22px;animation:_ngcontent-%COMP%_cff-pop-in .15s ease-out}.cff-modal--submitting[_ngcontent-%COMP%]{opacity:.92}@keyframes _ngcontent-%COMP%_cff-pop-in{0%{opacity:0}to{opacity:1}}.cff-modal-head[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:6px}.cff-modal-head-text[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.cff-modal-close[_ngcontent-%COMP%]{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;background:transparent;border:0;border-radius:6px;color:#64748b;cursor:pointer;transition:background-color .12s ease,color .12s ease}.cff-modal-close[_ngcontent-%COMP%]:hover:not(:disabled){background:#f1f5f9;color:#1e293b}.cff-modal-close[_ngcontent-%COMP%]:disabled{opacity:.4;cursor:not-allowed}.cff-modal-close[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:14px}.cff-title[_ngcontent-%COMP%]{font-size:16px;font-weight:600;color:#0f172a;margin:0;display:inline-flex;align-items:center;gap:8px}.cff-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#2563eb;font-size:14px}.cff-dup-tag[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;font-size:11px;font-weight:500;background:#eef2ff;color:#4338ca;border:1px solid #c7d2fe;border-radius:999px}.cff-dup-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:10px}.cff-dup-tag[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;background:transparent;padding:0;color:#312e81}.cff-sub[_ngcontent-%COMP%]{font-size:12px;color:#64748b;margin:0 0 14px;line-height:1.5;max-width:760px}.cff-row[_ngcontent-%COMP%]{display:grid;gap:12px 16px;margin-bottom:10px}.cff-row--identity[_ngcontent-%COMP%]{grid-template-columns:1fr 1fr minmax(180px,1.4fr)}.cff-row--names[_ngcontent-%COMP%], .cff-row--prose[_ngcontent-%COMP%]{grid-template-columns:1fr 1fr}.cff-row--vocab[_ngcontent-%COMP%]{grid-template-columns:minmax(260px,1fr)}.cff-field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px;min-width:0}.cff-field--full[_ngcontent-%COMP%]{grid-column:1/-1;margin-bottom:10px}.cff-field--persist[_ngcontent-%COMP%] .cff-locked-tag[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:3px;padding:1px 6px;margin-left:6px;font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;background:#f1f5f9;color:#64748b;border:1px solid #e2e8f0;border-radius:999px}.cff-field--persist[_ngcontent-%COMP%] .cff-locked-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:8px}.cff-field--persist[_ngcontent-%COMP%] .cff-locked-value[_ngcontent-%COMP%]{padding:8px 10px;border:1px solid #e2e8f0;background:#f8fafc;border-radius:6px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:13px;color:#334155}.cff-label[_ngcontent-%COMP%]{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#475569;display:flex;align-items:center;gap:6px}.cff-req[_ngcontent-%COMP%]{color:#ef4444;font-weight:700}.cff-input[_ngcontent-%COMP%]{width:100%;padding:7px 10px;border:1px solid #cbd5e1;border-radius:6px;font-size:13px;color:#0f172a;background:#fff;transition:border-color .12s ease,box-shadow .12s ease,background-color .12s ease}.cff-input[_ngcontent-%COMP%]:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 3px #2563eb1f}.cff-input[_ngcontent-%COMP%]:disabled{background:#f1f5f9;color:#94a3b8;cursor:not-allowed}.cff-textarea[_ngcontent-%COMP%]{font-family:inherit;resize:vertical;min-height:44px;line-height:1.45}.cff-textarea--mono[_ngcontent-%COMP%]{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12px}.cff-hint[_ngcontent-%COMP%]{font-size:11px;color:#64748b;display:inline-flex;align-items:center;gap:4px;margin-top:1px}.cff-hint[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:10px;color:#94a3b8}.cff-err[_ngcontent-%COMP%]{font-size:11px;color:#b91c1c;margin-top:2px}.cff-persist-desc[_ngcontent-%COMP%]{margin:0 0 14px;padding:8px 12px;font-size:12px;line-height:1.45;color:#334155;background:#f0f7ff;border-left:3px solid #93c5fd;border-radius:4px;display:flex;align-items:flex-start;gap:8px}.cff-persist-desc[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#2563eb;font-size:11px;margin-top:2px;flex-shrink:0}.cff-persist-desc[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:#0f172a;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12px}
1.cff-vocab[_ngcontent-%COMP%]{border:1px dashed #c7d2fe;border-radius:8px;padding:12px 14px 4px;margin:4px 0 12px;background:#f9fafff5}.cff-vocab[_ngcontent-%COMP%] legend[_ngcontent-%COMP%]{padding:0 6px;font-size:12px;font-weight:600;color:#4338ca;display:inline-flex;align-items:center;gap:8px}.cff-vocab[_ngcontent-%COMP%] legend[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:11px;color:#6366f1}.cff-vocab-hint[_ngcontent-%COMP%]{font-size:10px;font-weight:500;color:#818cf8;text-transform:uppercase;letter-spacing:.05em}.cff-server-err[_ngcontent-%COMP%]{margin-top:6px;padding:10px 14px;border:1px solid #fecaca;background:#fef2f2;color:#991b1b;border-radius:6px;font-size:13px;display:flex;align-items:center;gap:8px}.cff-server-err[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#dc2626}.cff-actions[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:flex-end;gap:10px;margin-top:16px;padding-top:14px;border-top:1px solid #eef2f6}.cff-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;transition:background-color .12s ease,border-color .12s ease,color .12s ease,box-shadow .12s ease}.cff-btn[_ngcontent-%COMP%]:disabled{opacity:.55;cursor:not-allowed}.cff-btn--cancel[_ngcontent-%COMP%]{background:#fff;border:1px solid #cbd5e1;color:#475569}.cff-btn--cancel[_ngcontent-%COMP%]:hover:not(:disabled){border-color:#94a3b8;background:#f8fafc}.cff-btn--confirm[_ngcontent-%COMP%]{background:#fef3c7;border-color:#fcd34d;color:#92400e}.cff-btn--confirm[_ngcontent-%COMP%]:hover:not(:disabled){background:#fde68a;border-color:#f59e0b;color:#78350f}.cff-btn--submit[_ngcontent-%COMP%]{background:#2563eb;border:1px solid #1d4ed8;color:#fff}.cff-btn--submit[_ngcontent-%COMP%]:hover:not(:disabled){background:#1d4ed8;border-color:#1e40af;box-shadow:0 1px 2px #0f172a14}@media (max-width: 700px){.cff-modal[_ngcontent-%COMP%]{padding:16px;width:96vw}.cff-row--identity[_ngcontent-%COMP%], .cff-row--names[_ngcontent-%COMP%], .cff-row--prose[_ngcontent-%COMP%]{grid-template-columns:1fr}.cff-actions[_ngcontent-%COMP%]{flex-direction:column-reverse;align-items:stretch;gap:8px}.cff-btn[_ngcontent-%COMP%]{justify-content:center;padding:10px 14px;font-size:14px}}"],changeDetection:0})}}return o})();const _e=()=>[],me=()=>[1,2,3,4,5,6,7,8];function he(o,c){if(1&o&&(e.j41(0,"option",31),e.EFF(1),e.k0s()),2&o){const t=c.$implicit;e.Y8G("value",t),e.R7$(),e.JRh(t)}}function be(o,c){if(1&o&&(e.j41(0,"span",32),e.EFF(1),e.k0s()),2&o){const t=e.XpG();e.R7$(),e.SpI(" ",t.validationBadgeCount()," ")}}function Ce(o,c){1&o&&(e.j41(0,"p",43),e.EFF(1," Every agent emit maps to a known canonical key in the right bucket. "),e.k0s())}function xe(o,c){if(1&o&&(e.j41(0,"li")(1,"code"),e.EFF(2),e.k0s(),e.j41(3,"span",46),e.EFF(4),e.k0s()()),2&o){const t=c.$implicit;e.R7$(2),e.JRh(t.agentDisplayName),e.R7$(2),e.Lme(" ",t.bucket?t.bucket+"."+t.fieldKey:""," \u2014 ",t.reason," ")}}function ve(o,c){if(1&o&&(e.j41(0,"ul",44),e.DNE(1,xe,5,3,"li",45),e.k0s()),2&o){const t=e.XpG(2);e.R7$(),e.Y8G("ngForOf",t.usage.unknownEmits)("ngForTrackBy",t.trackByEmit)}}function ke(o,c){1&o&&(e.j41(0,"p",43),e.EFF(1," Every active canonical field is emitted by at least one agent. "),e.k0s())}function ye(o,c){if(1&o&&(e.j41(0,"li")(1,"code"),e.EFF(2),e.k0s(),e.j41(3,"span",46),e.EFF(4,"deprecation candidate"),e.k0s()()),2&o){const t=c.$implicit;e.R7$(2),e.JRh(t)}}function Me(o,c){if(1&o&&(e.j41(0,"ul",44),e.DNE(1,ye,5,1,"li",45),e.k0s()),2&o){const t=e.XpG(2);e.R7$(),e.Y8G("ngForOf",t.usage.unusedKeys)("ngForTrackBy",t.trackByStr)}}function Fe(o,c){1&o&&(e.j41(0,"p",43),e.EFF(1," Every active emit subscription resolves to a current catalog field. "),e.k0s())}function Oe(o,c){if(1&o&&(e.j41(0,"li")(1,"code"),e.EFF(2),e.k0s(),e.j41(3,"span",46),e.EFF(4),e.k0s()()),2&o){const t=c.$implicit;e.R7$(2),e.JRh(t.agentDisplayName),e.R7$(2),e.JRh(t.reason)}}function we(o,c){if(1&o&&(e.j41(0,"ul",44),e.DNE(1,Oe,5,2,"li",45),e.k0s()),2&o){const t=e.XpG(2);e.R7$(),e.Y8G("ngForOf",t.usage.subscriptionOrphans)("ngForTrackBy",t.trackByEmit)}}function Pe(o,c){1&o&&(e.j41(0,"p",43),e.EFF(1," Subscription junction and "),e.j41(2,"code"),e.EFF(3,"OutputSchemaJ
1son"),e.k0s(),e.EFF(4," agree per field. "),e.k0s())}function Re(o,c){if(1&o&&(e.qex(0),e.EFF(1),e.bVm()),2&o){const t=e.XpG().$implicit;e.R7$(),e.SpI(" subs-only: ",t.inSubscriptionsOnly.join(", ")," ")}}function Ee(o,c){1&o&&(e.qex(0),e.EFF(1," \xb7 "),e.bVm())}function je(o,c){if(1&o&&(e.qex(0),e.EFF(1),e.bVm()),2&o){const t=e.XpG().$implicit;e.R7$(),e.SpI(" schema-only: ",t.inSchemaOnly.join(", ")," ")}}function Te(o,c){if(1&o&&(e.j41(0,"li")(1,"code"),e.EFF(2),e.k0s(),e.j41(3,"span",46),e.DNE(4,Re,2,1,"ng-container",29)(5,Ee,2,0,"ng-container",29)(6,je,2,1,"ng-container",29),e.k0s()()),2&o){const t=c.$implicit;e.R7$(2),e.JRh(t.fieldKey),e.R7$(2),e.Y8G("ngIf",t.inSubscriptionsOnly.length>0),e.R7$(),e.Y8G("ngIf",t.inSubscriptionsOnly.length>0&&t.inSchemaOnly.length>0),e.R7$(),e.Y8G("ngIf",t.inSchemaOnly.length>0)}}function Ve(o,c){if(1&o&&(e.j41(0,"ul",44),e.DNE(1,Te,7,4,"li",45),e.k0s()),2&o){const t=e.XpG(2);e.R7$(),e.Y8G("ngForOf",t.usage.legacyEmitDrift)("ngForTrackBy",t.trackByDrift)}}function Ie(o,c){if(1&o&&(e.j41(0,"section",33)(1,"div",34)(2,"h2",35),e.nrm(3,"i",36),e.EFF(4),e.k0s(),e.DNE(5,Ce,2,0,"p",37)(6,ve,2,2,"ul",38),e.k0s(),e.j41(7,"div",34)(8,"h2",35),e.nrm(9,"i",39),e.EFF(10),e.k0s(),e.DNE(11,ke,2,0,"p",37)(12,Me,2,2,"ul",38),e.k0s(),e.j41(13,"div",34)(14,"h2",35),e.nrm(15,"i",40),e.EFF(16),e.k0s(),e.DNE(17,Fe,2,0,"p",37)(18,we,2,2,"ul",38),e.k0s(),e.j41(19,"div",34)(20,"h2",35),e.nrm(21,"i",41),e.EFF(22),e.k0s(),e.DNE(23,Pe,5,0,"p",37)(24,Ve,2,2,"ul",38),e.k0s(),e.j41(25,"p",42),e.EFF(26),e.k0s()()),2&o){const t=e.XpG();e.R7$(4),e.SpI(" Orphan emits (",t.usage.unknownEmits.length,") "),e.R7$(),e.Y8G("ngIf",0===t.usage.unknownEmits.length),e.R7$(),e.Y8G("ngIf",t.usage.unknownEmits.length>0),e.R7$(4),e.SpI(" No emitter (",t.usage.unusedKeys.length,") "),e.R7$(),e.Y8G("ngIf",0===t.usage.unusedKeys.length),e.R7$(),e.Y8G("ngIf",t.usage.unusedKeys.length>0),e.R7$(4),e.SpI(" Subscription orphans (",t.usage.subscriptionOrphans.length,") "),e.R7$(),e.Y8G("ngIf",0===t.usage.subscriptionOrphans.length),e.R7$(),e.Y8G("ngIf",t.usage.subscriptionOrphans.length>0),e.R7$(4),e.SpI(" Legacy emit-drift (",t.usage.legacyEmitDrift.length,") "),e.R7$(),e.Y8G("ngIf",0===t.usage.legacyEmitDrift.length),e.R7$(),e.Y8G("ngIf",t.usage.legacyEmitDrift.length>0),e.R7$(2),e.SpI("",t.usage.agentsScanned," active agent schemas scanned.")}}function De(o,c){if(1&o){const t=e.RV6();e.j41(0,"app-create-field-form",47),e.bIt("submitted",function(n){e.eBV(t);const a=e.XpG();return e.Njj(a.onCreateSubmitted(n))})("cancelled",function(){e.eBV(t);const n=e.XpG();return e.Njj(n.onCreateCancelled())}),e.k0s()}if(2&o){const t=e.XpG();e.Y8G("duplicateFrom",t.duplicateSource)("submitError",t.createSubmitError)("submitting",t.isCreating)}}function $e(o,c){if(1&o&&(e.j41(0,"div",48),e.nrm(1,"i",49),e.EFF(2),e.k0s()),2&o){const t=e.XpG();e.R7$(2),e.SpI(" ",t.loadError," ")}}function Ge(o,c){1&o&&e.nrm(0,"div",52)}function Se(o,c){1&o&&(e.j41(0,"div",50),e.DNE(1,Ge,1,0,"div",51),e.k0s()),2&o&&(e.R7$(),e.Y8G("ngForOf",e.lJ4(1,me)))}function Ne(o,c){1&o&&(e.j41(0,"div",53),e.nrm(1,"i",54),e.j41(2,"p"),e.EFF(3,"No canonical fields match."),e.k0s()())}function Be(o,c){if(1&o&&(e.j41(0,"span",89),e.EFF(1),e.k0s()),2&o){const t=c.$implicit;e.R7$(),e.JRh(t)}}function Ye(o,c){if(1&o&&(e.qex(0),e.j41(1,"span",87),e.EFF(2,"Emitted by"),e.k0s(),e.DNE(3,Be,2,1,"span",88),e.bVm()),2&o){const t=e.XpG(2).$implicit,i=e.XpG(4);e.R7$(3),e.Y8G("ngForOf",i.emittedByNames(t.fieldKey))("ngForTrackBy",i.trackByStr)}}function ze(o,c){1&o&&(e.j41(0,"span",90),e.EFF(1," No active emitters \u2014 deprecation candidate. "),e.k0s())}function Je(o,c){if(1&o&&(e.j41(0,"tr",84)(1,"td",85),e.DNE(2,Ye,4,2,"ng-container",86)(3,ze,2,0,"ng-template",null,0,e.C5r),e.k0s()()),2&o){const t=e.sdS(4),i=e.XpG().$implicit,n=e.XpG(4);e.R7$(2),e.Y8G("ngIf",n.emittedByCount(i.fieldKey)>0)("ngIfElse",t)}}function Xe(o,c){if(1&o){const t=e.RV6();e.qex(0),e.j41(1,"tr",74),e.bIt("click",function(){const n=e.eBV(t).$implicit,a=e.XpG(4);return e.Njj(a.openRow(n))}),e.j41(2,"td",75)(3,"code",76),e.EFF(4),e.k0s()(),e.j41(5,"td"),e.EFF(6),e.k0s(),e.j41(7,"td",75),e.EFF(8),e.k0s(),e.j41(9,"td")(10,"span",77),e.EFF(11),e.k0s()(),e.j41(12,"td",78),e.EFF(13),e.k0s(),e.j41(14,"td")(15,"button",79),e.bIt("click",function(n){const a=e.eBV(t).$implicit,r=e.XpG(4);return n.stopPropagation(),e.Njj(r.toggleRow(a.fieldKey))}),e.j41(16,"span",80),e.EFF(17),e.k0s(),e.nrm(18,"i",81),e.k0s()(),e.j41(19,"td")(20,"span",82),e.EFF(21),e.k0s()()(),e.DNE(22,Je,5,2,"tr",83),e.bVm()}if(2&o){const t=c.$implicit,i=e.XpG(4);e.R7$(),e.AVh("coc-row--deprecated",t.deprecatedAt)("coc-row--expanded",i.expandedRowKey===t.fieldKey),e.R7$(),e.Y8G("title",t.fieldKey),e.R7$(2),e.JRh(t.fieldKey),e.R7$(2),e.JRh(i.scopeLabel(t)),e.R7$(),e.Y8G("title",t.rwName),e.R7$(),e.JRh(t.rwName),e.R7$(3),e.JRh(t.dataType),e.R7$(2),e.JRh(t.persistTarget),e.R7$(2),e.AVh("coc-emit--zero",0===i.emittedByCount(t.fieldKey))("coc-emit--open",i.expandedRowKey===t.fieldKey),e.BMQ("aria-label","Emitted by "+i.emittedByCount(t.fieldKey)+" agents \u2014 toggle list"),e.R7$(2),e.JRh(i.emittedByCount(t.fieldKey)),e.R7$(),e.AVh("fa-chevron-down",i.expandedRowKey!==t.fieldKey)("fa-chevron-up",i.expandedRowKey===t.fieldKey),e.R7$(2),e.AVh("coc-status--active",!t.deprecatedAt)("coc-status--deprecated",t.deprecatedAt),e.R7$(),e.SpI(" ",t.deprecatedAt?"Deprecated":"Active"," "),e.R7$(),e.Y8G("ngIf",i.expandedRowKey===t.fieldKey)}}function Ke(o,c){if(1&o&&(e.j41(0,"span",89),e.EFF(1),e.k0s()),2&o){const t=c.$implicit;e.R7$(),e.JRh(t)}}function Ae(o,c){if(1&o&&(e.qex(0),e.DNE(1,Ke,2,1,"span",88),e.bVm()),2&o){const t=e.XpG(2).$implicit,i=e.XpG(4);e.R7$(),e.Y8G("ngForOf",i.emittedByNames(t.fieldKey))("ngForTrackBy",i.trackByStr)}}function Le(o,c){1&o&&(e.j41(0,"span",90),e.EFF(1," No active emitters \u2014 deprecation candidate. "),e.k0s())}function qe(o,c){if(1&o&&(e.j41(0,"div",97),e.DNE(1,Ae,2,2,"ng-container",86)(2,Le,2,0,"ng-template",null,1,e.C5r),e.k0s()),2&o){const t=e.sdS(3),i=e.XpG().$implicit,n=e.XpG(4);e.R7$(),e.Y8G("ngIf",n.emittedByCount(i.fieldKey)>0)("ngIfElse",t)}}function Ue(o,c){if(1&o){const t=e.RV6();e.j41(0,"div",91),e.bIt("click",function(){const n=e.eBV(t).$implicit,a=e.XpG(4);return e.Njj(a.openRow(n))}),e.j41(1,"div",92)(2,"code",76),e.EFF(3),e.k0s(),e.j41(4,"span",82),e.EFF(5),e.k0s()(),e.j41(6,"div",93),e.EFF(7),e.k0s(),e.j41(8,"div",94),e.EFF(9),e.j41(10,"button",95),e.bIt("click",function(n){const a=e.eBV(t).$implicit,r=e.XpG(4);return n.stopPropagation(),e.Njj(r.toggleRow(a.fieldKey))}),e.EFF(11," Emitted by "),e.j41(12,"span",80),e.EFF(13),e.k0s()()(),e.DNE(14,qe,4,2,"div",96),e.k0s()}if(2&o){const t=c.$implicit,i=e.XpG(4);e.AVh("coc-card--deprecated",t.deprecatedAt),e.R7$(3),e.JRh(t.fieldKey),e.R7$(),e.AVh("coc-status--active",!t.deprecatedAt)("coc-status--deprecated",t.deprecatedAt),e.R7$(),e.SpI(" ",t.deprecatedAt?"Deprecated":"Active"," "),e.R7$(2),e.JRh(t.rwName),e.R7$(2),e.Lme(" ",i.scopeLabel(t)," \xb7 ",t.dataType," \xb7 "),e.R7$(),e.AVh("coc-emit--zero",0===i.emittedByCount(t.fieldKey))("coc-emit--open",i.expandedRowKey===t.fieldKey),e.R7$(3),e.JRh(i.emittedByCount(t.fieldKey)),e.R7$(),e.Y8G("ngIf",i.expandedRowKey===t.fieldKey)}}function He(o,c){if(1&o&&(e.j41(0,"div",62)(1,"div",63)(2,"table",64)(3,"colgroup"),e.nrm(4,"col",65)(5,"col",66)(6,"col",67)(7,"col",68)(8,"col",69)(9,"col",70)(10,"col",71),e.k0s(),e.j41(11,"thead")(12,"tr")(13,"th"),e.EFF(14,"Field Key"),e.k0s(),e.j41(15,"th"),e.EFF(16,"Scope"),e.k0s(),e.j41(17,"th"),e.EFF(18,"RW Name"),e.k0s(),e.j41(19,"th"),e.EFF(20,"Data Type"),e.k0s(),e.j41(21,"th"),e.EFF(22,"Persist"),e.k0s(),e.j41(23,"th"),e.EFF(24,"Emitted by"),e.k0s(),e.j41(25,"th"),e.EFF(26,"Status"),e.k0s()()(),e.j41(27,"tbody"),e.DNE(28,Xe,23,27,"ng-container",45),e.k0s()()(),e.j41(29,"div",72),e.DNE(30,Ue,15,17,"div",73),e.k0s()()),2&o){const t=e.XpG().$implicit,i=e.XpG(2);e.R7$(28),e.Y8G("ngForOf",t.rows)("ngForTrackBy",i.trackByOutputId),e.R7$(2),e.Y8G("ngForOf",t.rows)("ngForTrackBy",i.trackByOutputId)}}function We(o,c){if(1&o){const t=e.RV6();e.j41(0,"section",56)(1,"button",57),e.bIt("click",function(){const n=e.eBV(t).$implicit,a=e.XpG(2);return e.Njj(a.toggleBucket(n.bucket))}),e.nrm(2,"i",58),e.j41(3,"span",59),e.EFF(4),e.k0s(),e.j41(5,"span",60),e.EFF(6),e.k0s()(),e.DNE(7,He,31,4,"div",61),e.k0s()}if(2&o){const t=c.$implicit;e.AVh("coc-bucket--collapsed",t.collapsed),e.R7$(),e.BMQ("aria-expanded",!t.collapsed),e.R7$(),e.AVh("fa-chevron-down",!t.collapsed)("fa-chevron-right",t.collapsed),e.R7$(2),e.JRh(t.bucket),e.R7$(2),e.JRh(t.rows.length),e.R7$(),e.Y8G("ngIf",!t.collapsed)}}function Qe(o,c){if(1&o&&(e.qex(0),e.DNE(1,We,8,10,"section",55),e.bVm()),2&o){const t=e.XpG();e.R7$(),e.Y8G("ngForOf",t.groupedRows)("ngForTrackBy",t.trackByBucket)}}const C=["scores","fields","tags","milestones","actions","warnings","insights"];let et=(()=>{class o{constructor(t,i){this.svc=t,this.cdr=i,this.rows=[],this.usage=null,this.search="",this.includeDeprecated=!0,this.bucketFilter="",this.isLoading=!1,this.loadError=null,this.showValidation=!1,this.selected=null,this.drawerOpen=!1,this.bucketState={},this.expandedRowKey=null,this.newFieldRequested=new e.bkB,this.showCreateForm=!1,this.duplicateSource=null,this.createSubmitError=null,this.isCreating=!1,this.isVocabModeSaving=!1,this.isVocabValuesSaving=!1,this.vocabSaveError=null,this.destroy$=new h.B,this.trackByOutputId=(n,a)=>a.outputId,this.trackByEmit=(n,a)=>`${a.registryId}:${a.fieldKey}`,this.trackByStr=(n,a)=>a,this.trackByBucket=(n,a)=>a.bucket,this.trackByDrift=(n,a)=>a.fieldKey}ngOnInit(){this.refresh(),this.newFieldRequested.pipe((0,g.Q)(this.destroy$)).subscribe(()=>this.openCreateForm(null))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}openCreateForm(t){this.duplicateSource=t,this.createSubmitError=null,this.showCreateForm=!0,this.cdr.markForCheck()}onCreateSubmitted(t){this.isCreating=!0,this.createSubmitError=null,this.cdr.markForCheck(),this.svc.create(t).pipe((0,g.Q)(this.destroy$)).subscribe({next:i=>{this.rows=[...this.rows,i],this.selected=i,this.drawerOpen=!0,this.showCreateForm=!1,this.duplicateSource=null,this.isCreating=!1,this.cdr.markForCheck(),this.refresh()},error:i=>{this.createSubmitError=i?.error?.message??i?.error??`Failed to create field (${i?.status??"network"})`,this.isCreating=!1,this.cdr.markForCheck()}})}onCreateCancelled(){this.showCreateForm=!1,this.duplicateSource=null,this.createSubmitError=null,this.cdr.markForCheck()}onVocabModeChanged(t){this.isVocabModeSaving=!0,this.vocabSaveError=null,this.cdr.markForCheck(),this.svc.setVocabMode(t.id,t.mode).pipe((0,g.Q)(this.destroy$)).subscribe({next:()=>{this.isVocabModeSaving=!1,this.cdr.markForCheck(),this.refresh()},error:i=>{this.isVocabModeSaving=!1,this.vocabSaveError=i?.error?.message??i?.error?.code??`Failed to update mode (${i?.status??"network"})`,this.cdr.markForCheck()}})}onVocabValuesChanged(t){if(!this.selected)return;this.isVocabValuesSaving=!0,this.vocabSaveError=null,this.cdr.markForCheck();const i={...this.selected,defaultValuesJson:t.valuesJson};this.svc.patch(t.id,i).pipe((0,g.Q)(this.destroy$)).subscribe({next:n=>{this.isVocabValuesSaving=!1,this.mergeRow(n),this.selected=n,this.cdr.markForCheck()},error:n=>{this.isVocabValuesSaving=!1,this.vocabSaveError=n?.error?.message??n?.error?.code??`Failed to save vocab values (${n?.status??"network"})`,this.cdr.markForCheck()}})}
1onDuplicateRequested(t){this.closeDrawer(),this.openCreateForm(t)}refresh(){this.isLoading=!0,this.loadError=null,this.cdr.markForCheck(),(0,x.p)({rows:this.svc.list(this.includeDeprecated),usage:this.svc.usage()}).pipe((0,g.Q)(this.destroy$)).subscribe({next:({rows:t,usage:i})=>{this.rows=t??[],this.usage=i??null,this.isLoading=!1,this.cdr.markForCheck()},error:t=>{this.loadError=t?.error?.message??`Failed to load catalog (${t?.status??"network"})`,this.isLoading=!1,this.cdr.markForCheck()}})}get buckets(){return[...new Set(this.rows.map(t=>t.bucket))].sort()}get filteredRows(){const t=this.search.trim().toLowerCase();return this.rows.filter(i=>(!this.bucketFilter||i.bucket===this.bucketFilter)&&(!t||i.fieldKey.toLowerCase().includes(t)||(i.rwName??"").toLowerCase().includes(t)||i.bucket.toLowerCase().includes(t)||i.dataType.toLowerCase().includes(t)))}get groupedRows(){const t=this.filteredRows;if(0===t.length)return[];const i=new Map;for(const l of t){const _=i.get(l.bucket);_?_.push(l):i.set(l.bucket,[l])}const n=[];for(const l of C)i.has(l)&&n.push(l);const a=[...i.keys()].filter(l=>!C.includes(l)).sort();n.push(...a);const r=this.search.trim().length>0;return n.map(l=>{const _=i.get(l);return{bucket:l,rows:_,collapsed:this.isBucketCollapsed(l,_.length,r)}})}isBucketCollapsed(t,i,n){if(n)return!1;const a=this.bucketState[t];return a?"collapsed"===a:i>10}toggleBucket(t){const i=this.groupedRows.find(n=>n.bucket===t);this.bucketState[t]=i?.collapsed?"expanded":"collapsed",this.cdr.markForCheck()}toggleRow(t){this.expandedRowKey=this.expandedRowKey===t?null:t,this.cdr.markForCheck()}emittedByCount(t){return this.usage?.subscriptionUsageByKey?.[t]?.length??0}emittedByNames(t){return this.usage?.subscriptionUsageByKey?.[t]??[]}validationBadgeCount(){const t=this.usage;return t?(t.unknownEmits?.length??0)+(t.unusedKeys?.length??0)+(t.subscriptionOrphans?.length??0)+(t.legacyEmitDrift?.length??0):0}usedByNames(t){return this.usage?.usageByKey?.[t]??[]}openRow(t){this.selected=t,this.drawerOpen=!0,this.cdr.markForCheck()}closeDrawer(){this.drawerOpen=!1,this.cdr.markForCheck()}onSaved(t){this.mergeRow(t),this.selected=t,this.cdr.markForCheck()}onDeprecated(t){this.svc.deprecate(t.id,t.note).pipe((0,g.Q)(this.destroy$)).subscribe({next:()=>{this.closeDrawer(),this.refresh()},error:()=>this.cdr.markForCheck()})}onReactivated(t){this.svc.reactivate(t).pipe((0,g.Q)(this.destroy$)).subscribe({next:i=>{this.mergeRow(i),this.selected=i,this.cdr.markForCheck()},error:()=>this.cdr.markForCheck()})}mergeRow(t){const i=this.rows.findIndex(n=>n.outputId===t.outputId);i>=0&&(this.rows[i]=t),this.rows=[...this.rows]}scopeLabel(t){return null==t.orgId?"Global":`Org ${t.orgId}`}static{this.\u0275fac=function(i){return new(i||o)(e.rXU(b),e.rXU(e.gRc))}}static{this.\u0275cmp=e.VBU({type:o,selectors:[["app-canonical-output-catalog"]],outputs:{newFieldRequested:"newFieldRequested"},standalone:!0,features:[e.aNF],decls:46,vars:24,consts:[["noEmitters",""],["noMobileEmitters",""],[1,"coc-page"],[1,"coc-header"],[1,"coc-title"],[1,"coc-sub"],[1,"coc-header-actions"],["type","button",1,"coc-new",3,"click","disabled"],[1,"fas","fa-plus"],["type","button",1,"coc-refresh",3,"click","disabled"],[1,"fas","fa-rotate-right"],[1,"coc-filters"],[1,"coc-filter","coc-filter--grow"],[1,"coc-filter-label"],["type","text","placeholder","field key, RW name, bucket, type\u2026",1,"coc-input",3,"ngModelChange","ngModel"],[1,"coc-filter"],[1,"coc-input",3,"ngModelChange","ngModel"],["value",""],[3,"value",4,"ngFor","ngForOf"],[1,"coc-check"],["type","checkbox",3,"ngModelChange","change","ngModel"],["type","button",1,"coc-vbtn",3,"click"],[1,"fas","fa-clipboard-check"],["class","coc-vbadge",4,"ngIf"],["class","coc-validation",4,"ngIf"],[3,"duplicateFrom","submitError","submitting","submitted","cancelled",4,"ngIf"],["class","coc-error",4,"ngIf"],["class","coc-skeleton",4,"ngIf"],["class","coc-empty",4,"ngIf"],[4,"ngIf"],[3,"closed","saved","deprecated","vocabModeChanged","vocabValuesChanged","duplicateRequested","reactivated","open","entry","emittedByNames","vocabModeSaving","vocabValuesSaving","vocabSaveError"],[3,"value"],[1,"coc-vbadge"],[1,"coc-validation"],[1,"coc-val-col"],[1,"coc-val-title"],[1,"fas","fa-triangle-exclamation"],["class","coc-val-empty",4,"ngIf"],["class","coc-val-list",4,"ngIf"],[1,"fas","fa-link-slash"],[1,"fas","fa-ghost"],[1,"fas","fa-code-compare"],[1,"coc-val-foot"],[1,"coc-val-empty"],[1,"coc-val-list"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"coc-val-detail"],[3,"submitted","cancelled","duplicateFrom","submitError","submitting"],[1,"coc-error"],[1,"fas","fa-circle-exclamation"],[1,"coc-skeleton"],["class","coc-skeleton-row",4,"ngFor","ngForOf"],[1,"coc-skeleton-row"],[1,"coc-empty"],[1,"fas","fa-inbox"],["class","coc-bucket",3,"coc-bucket--collapsed",4,"ngFor","ngForOf","ngForTrackBy"],[1,"coc-bucket"],["type","button",1,"coc-bucket-head",3,"click"],[1,"fas","coc-bucket-chev"],[1,"coc-bucket-name"],[1,"coc-bucket-count"],["class","coc-bucket-body",4,"ngIf"],[1,"coc-bucket-body"],[1,"coc-table-wrap"],[1,"coc-table"],[1,"coc-col--key"],[1,"coc-col--scope"],[1,"coc-col--rwname"],[1,"coc-col--type"],[1,"coc-col--persist"],[1,"coc-col--emit"],[1,"coc-col--status"],[1,"coc-cards"],["class","coc-card",3,"coc-card--deprecated","click",4,"ngFor","ngForOf","ngForTrackBy"],[1,"coc-row",3,"click"],[3,"title"],[1,"coc-key"],[1,"coc-tag"],[1,"coc-persist"],["type","button",1,"coc-emit",3,"click"],[1,"coc-emit-num"],[1,"fas","coc-emit-chev"],[1,"coc-status"],["class","coc-row-detail",4,"ngIf"],[1,"coc-row-detail"],["colspan","7"],[4,"ngIf","ngIfElse"],[1,"coc-emit-list-label"],["class","coc-emit-chip",4,"ngFor","ngForOf","ngForTrackBy"],[1,"coc-emit-chip"],[1,"coc-emit-zero-hint"],[1,"coc-card",3,"click"],[1,"coc-card-head"],[1,"coc-card-name"],[1,"coc-card-meta"],["type","button",1,"coc-emit","coc-emit--mobile",3,"click"],["class","coc-card-emit-list",4,"ngIf"],[1,"coc-card-emit-list"]],template:function(i,n){1&i&&(e.j41(0,"div",2)(1,"header",3)(2,"div")(3,"h1",4),e.EFF(4,"Canonical Output Catalog"),e.k0s(),e.j41(5,"p",5),e.EFF(6," The single source of truth for agent output fields ("),e.j41(7,"code"),e.EFF(8,"DW_CanonicalOutputRegistry"),e.k0s(),e.EFF(9,"). Identity columns are immutable \u2014 change a field by deprecating and recreating it. "),e.k0s()(),e.j41(10,"div",6)(11,"button",7),e.bIt("click",function(){return n.newFieldRequested.emit()}),e.nrm(12,"i",8),e.j41(13,"span"),e.EFF(14,"New field"),e.k0s()(),e.j41(15,"button",9),e.bIt("click",function(){return n.refresh()}),e.nrm(16,"i",10),e.j41(17,"span"),e.EFF(18,"Refresh"),e.k0s()()()(),e.j41(19,"section",11)(20,"label",12)(21,"span",13),e.EFF(22,"Search"),e.k0s(),e.j41(23,"input",14),e.mxI("ngModelChange",function(r){return e.DH7(n.search,r)||(n.search=r),r}),e.k0s()(),e.j41(24,"label",15)(25,"span",13),e.EFF(26,"Bucket"),e.k0s(),e.j41(27,"select",16),e.mxI("ngModelChange",function(r){return e.DH7(n.bucketFilter,r)||(n.bucketFilter=r),r}),e.j41(28,"option",17),e.EFF(29,"All"),e.k0s(),e.DNE(30,he,2,2,"option",18),e.k0s()(),e.j41(31,"label",19)(32,"input",20),e.mxI("ngModelChange",function(r){return e.DH7(n.includeDeprecated,r)||(n.includeDeprecated=r),r}),e.bIt("change",function(){return n.refresh()}),e.k0s(),e.j41(33,"span"),e.EFF(34,"Include deprecated"),e.k0s()(),e.j41(35,"button",21),e.bIt("click",function(){return n.showValidation=!n.showValidation}),e.nrm(36,"i",22),e.EFF(37," Validation "),e.DNE(38,be,2,1,"span",23),e.k0s()(),e.DNE(39,Ie,27,13,"section",24)(40,De,1,3,"app-create-field-form",25)(41,$e,3,1,"div",26)(42,Se,2,2,"div",27)(43,Ne,4,0,"div",28)(44,Qe,2,2,"ng-container",29),e.j41(45,"app-output-detail-drawer",30),e.bIt("closed",function(){return n.closeDrawer()})("saved",function(r){return n.onSaved(r)})("deprecated",function(r){return n.onDeprecated(r)})("vocabModeChanged",function(r){return n.onVocabModeChanged(r)})("vocabValuesChanged",function(r){return n.onVocabValuesChanged(r)})("duplicateRequested",function(r){return n.onDuplicateRequested(r)})("reactivated",function(r){return n.onReactivated(r)}),e.k0s()()),2&i&&(e.R7$(11),e.Y8G("disabled",n.isLoading),e.R7$(4),e.Y8G("disabled",n.isLoading),e.R7$(),e.AVh("fa-spin",n.isLoading),e.R7$(7),e.R50("ngModel",n.search),e.R7$(4),e.R50("ngModel",n.bucketFilter),e.R7$(3),e.Y8G("ngForOf",n.buckets),e.R7$(2),e.R50("ngModel",n.includeDeprecated),e.R7$(3),e.AVh("coc-vbtn--on",n.showValidation),e.R7$(3),e.Y8G("ngIf",n.usage&&n.val
1idationBadgeCount()>0),e.R7$(),e.Y8G("ngIf",n.showValidation&&n.usage),e.R7$(),e.Y8G("ngIf",n.showCreateForm),e.R7$(),e.Y8G("ngIf",n.loadError),e.R7$(),e.Y8G("ngIf",n.isLoading&&0===n.rows.length),e.R7$(),e.Y8G("ngIf",!n.isLoading&&0===n.filteredRows.length&&!n.loadError),e.R7$(),e.Y8G("ngIf",n.filteredRows.length>0),e.R7$(),e.Y8G("open",n.drawerOpen)("entry",n.selected)("emittedByNames",n.selected?n.emittedByNames(n.selected.fieldKey):e.lJ4(23,_e))("vocabModeSaving",n.isVocabModeSaving)("vocabValuesSaving",n.isVocabValuesSaving)("vocabSaveError",n.vocabSaveError))},dependencies:[d.MD,d.Sq,d.bT,s.YN,s.xH,s.y7,s.me,s.Zm,s.wz,s.BC,s.vS,H,ue],styles:["[_nghost-%COMP%]{display:block;padding:24px;color:#0f172a;background:#f8fafc;min-height:100vh}.coc-page[_ngcontent-%COMP%]{max-width:1320px;margin:0 auto}.coc-header[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:18px}.coc-title[_ngcontent-%COMP%]{font-size:22px;font-weight:600;margin:0 0 4px}.coc-sub[_ngcontent-%COMP%]{font-size:13px;color:#475569;margin:0;max-width:760px;line-height:1.5}.coc-sub[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{background:#f1f5f9;padding:1px 5px;border-radius:3px;font-size:12px}.coc-header-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;flex-shrink:0}.coc-refresh[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;background:#fff;border:1px solid #cbd5e1;border-radius:6px;color:#1e293b;font-size:13px;padding:6px 12px;cursor:pointer;transition:border-color .15s ease,color .15s ease,background-color .15s ease}.coc-refresh[_ngcontent-%COMP%]:hover:not(:disabled){border-color:#94a3b8;background:#f8fafc}.coc-refresh[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.coc-new[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;background:#2563eb;border:1px solid #1d4ed8;border-radius:6px;color:#fff;font-size:13px;font-weight:600;padding:6px 14px;cursor:pointer;transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease}.coc-new[_ngcontent-%COMP%]:hover:not(:disabled){background:#1d4ed8;border-color:#1e40af;box-shadow:0 1px 2px #0f172a0f}.coc-new[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.coc-filters[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-end;margin-bottom:18px;padding:14px 16px;background:#fff;border:1px solid #e2e8f0;border-radius:8px}.coc-filter[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px;min-width:180px}.coc-filter--grow[_ngcontent-%COMP%]{flex:1;min-width:240px}.coc-filter-label[_ngcontent-%COMP%]{font-size:11px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.4px}.coc-input[_ngcontent-%COMP%]{width:100%;font-size:13px;padding:6px 10px;border:1px solid #cbd5e1;border-radius:6px;background:#fff;color:#0f172a;transition:border-color .15s ease,box-shadow .15s ease}.coc-input[_ngcontent-%COMP%]:focus{outline:none;border-color:#2f7fff;box-shadow:0 0 0 2px #2f7fff29}.coc-check[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#475569;cursor:pointer;padding-bottom:6px}.coc-check[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{cursor:pointer}.coc-vbtn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;margin-left:auto;background:#fff;border:1px solid #cbd5e1;border-radius:6px;color:#1e293b;font-size:12px;padding:6px 12px;cursor:pointer;transition:border-color .15s ease,background-color .15s ease,color .15s ease}.coc-vbtn[_ngcontent-%COMP%]:hover{border-color:#94a3b8;background:#f8fafc}.coc-vbtn--on[_ngcontent-%COMP%]{background:#eef2ff;border-color:#c7d2fe;color:#3730a3}.coc-vbadge[_ngcontent-%COMP%]{background:#fef3c7;color:#92400e;font-weight:700;font-size:10px;padding:1px 6px;border-radius:999px}.coc-validation[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:18px;background:#fff;border:1px solid #e2e8f0;border-radius:8px;padding:16px;margin-bottom:16px}@media (max-width: 720px){.coc-validation[_ngcontent-%COMP%]{grid-template-columns:1fr}}.coc-val-col[_ngcontent-%COMP%]{min-width:0}.coc-val-title[_ngcontent-%COMP%]{font-size:12px;font-weight:700;color:#475569;text-transform:uppercase;letter-spacing:.4px;margin:0 0 8px}.coc-val-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-right:6px;color:#f59e0b}.coc-val-empty[_ngcontent-%COMP%]{font-size:12px;color:#94a3b8;margin:0}.coc-val-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:5px;max-height:260px;overflow-y:auto}.coc-val-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{font-size:12px;color:#1e293b}.coc-val-list[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{background:#f1f5f9;padding:1px 5px;border-radius:3px;font-size:11px;color:#334155;margin-right:6px}.coc-val-detail[_ngcontent-%COMP%]{color:#64748b}.coc-val-foot[_ngcontent-%COMP%]{grid-column:1/-1;font-size:11px;color:#94a3b8;margin:0}.coc-error[_ngcontent-%COMP%]{background:#fef2f2;border:1px solid #fecaca;border-left:3px solid #ef4444;border-radius:4px;padding:10px 14px;font-size:13px;color:#991b1b;margin-bottom:14px}.coc-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-right:6px}.coc-empty[_ngcontent-%COMP%]{text-align:center;padding:40px 16px;color:#94a3b8;background:#fff;border:1px solid #e2e8f0;border-radius:8px}
1.coc-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:28px;margin-bottom:6px}.coc-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:13px;margin:0}.coc-skeleton[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:6px}.coc-skeleton-row[_ngcontent-%COMP%]{height:38px;background:linear-gradient(90deg,#f1f5f9 25%,#e2e8f0,#f1f5f9 75%);background-size:200% 100%;animation:_ngcontent-%COMP%_coc-shimmer 1.4s infinite ease-in-out;border-radius:6px}@keyframes _ngcontent-%COMP%_coc-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.coc-table-wrap[_ngcontent-%COMP%]{background:#fff;border:1px solid #e2e8f0;border-radius:8px;overflow:hidden}.coc-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;font-size:12px;table-layout:fixed}.coc-table[_ngcontent-%COMP%] col.coc-col--key[_ngcontent-%COMP%]{width:18%}.coc-table[_ngcontent-%COMP%] col.coc-col--scope[_ngcontent-%COMP%]{width:9%}.coc-table[_ngcontent-%COMP%] col.coc-col--rwname[_ngcontent-%COMP%]{width:24%}.coc-table[_ngcontent-%COMP%] col.coc-col--type[_ngcontent-%COMP%]{width:11%}.coc-table[_ngcontent-%COMP%] col.coc-col--persist[_ngcontent-%COMP%], .coc-table[_ngcontent-%COMP%] col.coc-col--emit[_ngcontent-%COMP%]{width:13%}.coc-table[_ngcontent-%COMP%] col.coc-col--status[_ngcontent-%COMP%]{width:12%}.coc-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{background:#f8fafc;border-bottom:1px solid #e2e8f0;text-align:left;padding:9px 12px;color:#64748b;font-weight:600;text-transform:uppercase;font-size:10px;letter-spacing:.4px;white-space:nowrap}.coc-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:9px 12px;border-bottom:1px solid #f1f5f9;color:#1e293b;vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.coc-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%]{border-bottom:none}.coc-row[_ngcontent-%COMP%]{cursor:pointer;transition:background-color .12s ease}.coc-row[_ngcontent-%COMP%]:hover{background:#f8fafc}.coc-row--deprecated[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{background:#fafafa;color:#94a3b8}.coc-key[_ngcontent-%COMP%]{font-size:11px;color:#334155;background:#eef2ff;padding:2px 6px;border-radius:4px}.coc-tag[_ngcontent-%COMP%]{font-size:10px;font-weight:600;color:#475569;background:#f1f5f9;padding:2px 7px;border-radius:999px}.coc-persist[_ngcontent-%COMP%]{color:#64748b;font-size:11px}.coc-used[_ngcontent-%COMP%]{display:inline-block;min-width:22px;text-align:center;font-weight:600;color:#047857}.coc-used--zero[_ngcontent-%COMP%]{color:#b45309}.coc-status[_ngcontent-%COMP%]{display:inline-block;padding:1px 8px;border-radius:999px;font-size:11px;font-weight:600;border:1px solid transparent}.coc-status--active[_ngcontent-%COMP%]{background:#ecfdf5;color:#047857;border-color:#a7f3d0}.coc-status--deprecated[_ngcontent-%COMP%]{background:#fef2f2;color:#991b1b;border-color:#fecaca}.coc-cards[_ngcontent-%COMP%]{display:none}@media (max-width: 600px){[_nghost-%COMP%]{padding:16px}.coc-header[_ngcontent-%COMP%]{flex-direction:column;gap:10px}.coc-table-wrap[_ngcontent-%COMP%]{display:none}.coc-cards[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.coc-card[_ngcontent-%COMP%]{background:#fff;border:1px solid #e2e8f0;border-radius:8px;padding:10px 12px;cursor:pointer;transition:border-color .12s ease}.coc-card[_ngcontent-%COMP%]:hover{border-color:#cbd5e1}.coc-card--deprecated[_ngcontent-%COMP%]{opacity:.7}.coc-card-head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}.coc-card-name[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:#0f172a}.coc-card-meta[_ngcontent-%COMP%]{font-size:11px;color:#64748b;margin-top:4px}}.coc-bucket[_ngcontent-%COMP%]{background:#fff;border:1px solid #e2e8f0;border-radius:10px;margin-bottom:14px;overflow:hidden;transition:border-color .15s ease}.coc-bucket[_ngcontent-%COMP%]:hover{border-color:#cbd5e1}.coc-bucket--collapsed[_ngcontent-%COMP%]{background:#fafbfc}.coc-bucket-head[_ngcontent-%COMP%]{width:100%;display:flex;align-items:center;gap:10px;padding:12px 16px;background:transparent;border:0;cursor:pointer;text-align:left;font-size:13px;color:#1e293b;transition:background-color .12s ease}.coc-bucket-head[_ngcontent-%COMP%]:hover{background:#f8fafc}.coc-bucket-head[_ngcontent-%COMP%]:focus-visible{outline:2px solid #93c5fd;outline-offset:-2px}
1.coc-bucket-chev[_ngcontent-%COMP%]{font-size:11px;color:#64748b;width:12px;text-align:center;transition:color .12s ease}.coc-bucket-name[_ngcontent-%COMP%]{flex:1;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#475569}.coc-bucket-count[_ngcontent-%COMP%]{font-size:11px;font-weight:500;padding:2px 8px;border-radius:999px;background:#f1f5f9;color:#64748b;border:1px solid #e2e8f0;font-variant-numeric:tabular-nums}.coc-bucket-body[_ngcontent-%COMP%]{border-top:1px solid #eef2f6}.coc-bucket-body[_ngcontent-%COMP%] .coc-table-wrap[_ngcontent-%COMP%]{background:transparent;border:0;border-radius:0;overflow:visible}.coc-bucket-body[_ngcontent-%COMP%] .coc-cards[_ngcontent-%COMP%]{padding:8px 12px}.coc-emit[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:999px;color:#1e293b;font-size:12px;font-weight:500;cursor:pointer;font-variant-numeric:tabular-nums;transition:background-color .12s ease,border-color .12s ease,color .12s ease}.coc-emit[_ngcontent-%COMP%]:hover{border-color:#94a3b8;background:#e2e8f0}.coc-emit[_ngcontent-%COMP%]:focus-visible{outline:2px solid #93c5fd;outline-offset:2px}.coc-emit--zero[_ngcontent-%COMP%]{background:#fff7ed;border-color:#fed7aa;color:#b45309}.coc-emit--open[_ngcontent-%COMP%]{background:#e0f2fe;border-color:#bae6fd;color:#075985}.coc-emit--mobile[_ngcontent-%COMP%]{padding:1px 8px;font-size:11px}.coc-emit-num[_ngcontent-%COMP%]{font-weight:600}.coc-emit-chev[_ngcontent-%COMP%]{font-size:9px;color:inherit}.coc-row--expanded[_ngcontent-%COMP%], .coc-row-detail[_ngcontent-%COMP%]{background:#f8fafc}.coc-row-detail[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:8px 12px 12px;border-top:0;border-bottom:1px solid #eef2f6}.coc-emit-list-label[_ngcontent-%COMP%]{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:#94a3b8;margin-right:8px}.coc-emit-chip[_ngcontent-%COMP%]{display:inline-block;margin:2px 4px 2px 0;padding:2px 8px;background:#fff;border:1px solid #e2e8f0;border-radius:999px;color:#475569;font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.coc-emit-zero-hint[_ngcontent-%COMP%]{font-size:11px;color:#b45309;font-style:italic}.coc-card-emit-list[_ngcontent-%COMP%]{margin-top:6px;padding-top:6px;border-top:1px dashed #e2e8f0;display:flex;flex-wrap:wrap;gap:2px}.coc-validation[_ngcontent-%COMP%]{display:grid!important;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))!important;gap:18px!important}"],changeDetection:0})}}return o})()}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.