lula2 0.8.11 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- import{g as Ie,b as H,a as l,s as L,c as xe,f as C,e as dt}from"../chunks/DSxRA67V.js";import{p as F,af as A,b as v,U as S,y as p,g as t,ag as se,c as r,n as P,r as a,a as J,t as I,f as W,ah as ct,d as be,_ as Ze,u as Fe,be as vt,s as k,e as ut,ae as Te,o as ft,bf as gt}from"../chunks/DHuA7MQr.js";import{l as E,p as M,i as x,a as Ve,s as Je}from"../chunks/Ew6_cz_0.js";import{a as We,c as ht,I as Ge,T as bt,p as pt,b as Ue,D as mt}from"../chunks/BfBT_e06.js";import{g as xt}from"../chunks/BwQjulyY.js";import{i as te}from"../chunks/kRA7ZCNG.js";import{a as ie,f as Ke,e as _t,d as yt,i as wt,w as He}from"../chunks/DznG4VMX.js";import{c as kt}from"../chunks/CC6oS456.js";Ie(["change"]);var $t=H("<title> </title>"),Ct=H('<svg><!><path d="M11.41 26.59L7.83 23 28 23 28 21 7.83 21 11.41 17.41 10 16 4 22 10 28 11.41 26.59zM28 10L22 4 20.59 5.41 24.17 9 4 9 4 11 24.17 11 20.59 14.59 22 16 28 10z"></path></svg>');function zt($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=Ct();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=$t(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(),a(n),l($,n),J()}var Mt=C('<a href="/setup" class="inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors" title="Switch control set"><!> Switch</a>'),At=C('<div class="text-sm text-gray-500 dark:text-gray-400">Loading...</div>');function St($,s){F(s,!1);const e=()=>Ve(Ke,"$appState",h),[h,i]=Je();te();var u=xe(),f=W(u);{var o=g=>{var b=Mt(),c=r(b);zt(c,{size:16}),P(),a(b),l(g,b)},n=g=>{var b=At();l(g,b)};x(f,g=>{e().isConnected?g(o):g(n,!1)})}l($,u),J(),i()}var Et=H("<title> </title>"),Ht=H('<svg><!><path d="M17.4141 16L24 9.4141 22.5859 8 16 14.5859 9.4143 8 8 9.4141 14.5859 16 8 22.5859 9.4143 24 16 17.4141 22.5859 24 24 22.5859 17.4141 16z"></path></svg>');function It($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=Ht();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=Et(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(),a(n),l($,n),J()}var Lt=C("<option> </option>"),Pt=C(`<div class="fixed inset-0 bg-opacity-10 backdrop-blur-sm overflow-y-auto h-full w-full z-40 flex items-center justify-center p-4" role="dialog" aria-modal="true" tabindex="-1"><div class="bg-white dark:bg-gray-800 rounded-lg shadow-xl p-6 w-full max-w-md mx-auto relative z-50" role="document"><div class="flex items-center justify-between mb-4"><h2 class="text-xl font-semibold text-gray-900 dark:text-white"> </h2> <button class="text-gray-400 dark:text-gray-500 hover:text-gray-600 dark:hover:text-gray-300" aria-label="Close dialog"><!></button></div> <div class="mb-6"><p class="text-sm text-gray-600 dark:text-gray-400 mb-4">Choose which column should contain the mappings data:</p> <div class="space-y-2"><label for="column-select" class="block text-sm font-medium text-gray-700 dark:text-gray-300">Mappings Column</label> <select id="column-select" class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"></select></div> <div class="mt-3 p-3 bg-blue-50 dark:bg-blue-900/20 rounded-md"><p class="text-xs text-blue-600 dark:text-blue-400"><strong>Note:</strong> Mappings data will be formatted as "status: description..." in the
1
+ import{g as Ie,b as H,a as l,s as L,c as xe,f as C,e as dt}from"../chunks/DSxRA67V.js";import{p as F,af as A,b as v,U as S,y as p,g as t,ag as se,c as r,n as P,r as a,a as J,t as I,f as W,ah as ct,d as be,_ as Ze,u as Fe,be as vt,s as k,e as ut,ae as Te,o as ft,bf as gt}from"../chunks/DHuA7MQr.js";import{l as E,p as M,i as x,a as Ve,s as Je}from"../chunks/Ew6_cz_0.js";import{a as We,c as ht,I as Ge,T as bt,p as pt,b as Ue,D as mt}from"../chunks/hVr0KxW1.js";import{g as xt}from"../chunks/CdJEnKns.js";import{i as te}from"../chunks/kRA7ZCNG.js";import{a as ie,f as Ke,e as _t,d as yt,i as wt,w as He}from"../chunks/DznG4VMX.js";import{c as kt}from"../chunks/CC6oS456.js";Ie(["change"]);var $t=H("<title> </title>"),Ct=H('<svg><!><path d="M11.41 26.59L7.83 23 28 23 28 21 7.83 21 11.41 17.41 10 16 4 22 10 28 11.41 26.59zM28 10L22 4 20.59 5.41 24.17 9 4 9 4 11 24.17 11 20.59 14.59 22 16 28 10z"></path></svg>');function zt($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=Ct();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=$t(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(),a(n),l($,n),J()}var Mt=C('<a href="/setup" class="inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors" title="Switch control set"><!> Switch</a>'),At=C('<div class="text-sm text-gray-500 dark:text-gray-400">Loading...</div>');function St($,s){F(s,!1);const e=()=>Ve(Ke,"$appState",h),[h,i]=Je();te();var u=xe(),f=W(u);{var o=g=>{var b=Mt(),c=r(b);zt(c,{size:16}),P(),a(b),l(g,b)},n=g=>{var b=At();l(g,b)};x(f,g=>{e().isConnected?g(o):g(n,!1)})}l($,u),J(),i()}var Et=H("<title> </title>"),Ht=H('<svg><!><path d="M17.4141 16L24 9.4141 22.5859 8 16 14.5859 9.4143 8 8 9.4141 14.5859 16 8 22.5859 9.4143 24 16 17.4141 22.5859 24 24 22.5859 17.4141 16z"></path></svg>');function It($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=Ht();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=Et(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(),a(n),l($,n),J()}var Lt=C("<option> </option>"),Pt=C(`<div class="fixed inset-0 bg-opacity-10 backdrop-blur-sm overflow-y-auto h-full w-full z-40 flex items-center justify-center p-4" role="dialog" aria-modal="true" tabindex="-1"><div class="bg-white dark:bg-gray-800 rounded-lg shadow-xl p-6 w-full max-w-md mx-auto relative z-50" role="document"><div class="flex items-center justify-between mb-4"><h2 class="text-xl font-semibold text-gray-900 dark:text-white"> </h2> <button class="text-gray-400 dark:text-gray-500 hover:text-gray-600 dark:hover:text-gray-300" aria-label="Close dialog"><!></button></div> <div class="mb-6"><p class="text-sm text-gray-600 dark:text-gray-400 mb-4">Choose which column should contain the mappings data:</p> <div class="space-y-2"><label for="column-select" class="block text-sm font-medium text-gray-700 dark:text-gray-300">Mappings Column</label> <select id="column-select" class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm bg-white dark:bg-gray-700 text-gray-900 dark:text-white focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"></select></div> <div class="mt-3 p-3 bg-blue-50 dark:bg-blue-900/20 rounded-md"><p class="text-xs text-blue-600 dark:text-blue-400"><strong>Note:</strong> Mappings data will be formatted as "status: description..." in the
2
2
  selected column.</p></div></div> <div class="flex justify-end space-x-3"><button class="px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors">Cancel</button> <button class="px-4 py-2 text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 rounded-lg transition-colors"> </button></div></div></div>`);function Dt($,s){F(s,!0);let e=M(s,"isOpen",15),h=M(s,"columnHeaders",19,()=>[]),i=M(s,"defaultColumn",3,"Mappings");const u=ct();let f=be(Ze(i()));Fe(()=>{e()&&v(f,i())});function o(R){return e()&&setTimeout(()=>R.focus(),0),{update(){e()&&setTimeout(()=>R.focus(),0)}}}function n(){u("export",{format:s.format,mappingsColumn:t(f)}),e(!1)}function g(){u("cancel"),e(!1)}function b(R){e()&&(R.key==="Escape"?g():R.key==="Enter"&&n())}function c(R){R.target===R.currentTarget&&g()}var d=xe();dt("keydown",vt,b);var y=W(d);{var ke=R=>{var de=Pt();de.__click=c,de.__keydown=N=>N.key==="Escape"&&g();var z=r(de);z.__click=N=>N.stopPropagation();var G=r(z),ce=r(G),_=r(ce);a(ce);var w=k(ce,2);w.__click=g;var m=r(w);It(m,{class:"w-6 h-6"}),a(w),a(G);var D=k(G,2),U=k(r(D),2),K=k(r(U),2);_t(K,21,h,wt,(N,Y)=>{var O=Lt(),Ae=r(O,!0);a(O);var $e={};I(()=>{L(Ae,t(Y).label),$e!==($e=t(Y).value)&&(O.value=(O.__value=t(Y).value)??"")}),l(N,O)}),a(K),We(K,N=>o?.(N)),ut(()=>yt(K,()=>t(f),N=>v(f,N))),a(U),P(2),a(D);var B=k(D,2),Q=r(B);Q.__click=g;var oe=k(Q,2);oe.__click=n;var ve=r(oe);a(oe),a(B),a(z),a(de),I((N,Y)=>{L(_,`Export as ${N??""}`),L(ve,`Export ${Y??""}`)},[()=>s.format.toUpperCase(),()=>s.format.toUpperCase()]),l(R,de)};x(y,R=>{e()&&R(ke)})}l($,d),J()}Ie(["click","keydown"]);var Rt=H("<title> </title>"),Bt=H('<svg><!><path stroke-width="0" d="m20,6c0,1.8587,1.2795,3.4109,3,3.858v4.142c0,1.6543-1.3457,3-3,3h-8c-1.1299,0-2.1617.391-3,1.0256v-8.1676c1.7203-.4471,3-1.9993,3-3.858,0-2.2061-1.7944-4-4-4s-4,1.7939-4,4c0,1.8587,1.2797,3.4108,3,3.858v12.142s0,.142,0,.142c-1.7203.4473-3,1.9997-3,3.858,0,2.2056,1.7944,4,4,4s4-1.7944,4-4c0-1.8583-1.2797-3.4107-3-3.858v-.142c0-1.6543,1.3457-3,3-3h8c2.7568,0,5-2.2432,5-5v-4.142c1.7205-.4471,3-1.9993,3-3.858,0-2.2061-1.7939-4-4-4s-4,1.7939-4,4Zm-14,0c0-1.1025.897-2,2-2s2,.8975,2,2c0,1.1025-.897,2-2,2s-2-.8975-2-2Zm4,20c0,1.103-.897,2-2,2s-2-.897-2-2,.897-2,2-2,2,.897,2,2ZM26,6c0,1.1025-.8975,2-2,2s-2-.8975-2-2c0-1.1025.8975-2,2-2s2,.8975,2,2Z"></path></svg>');function Ye($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=Bt();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=Rt(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(),a(n),l($,n),J()}var jt=H("<title> </title>"),Nt=H('<svg><!><path d="M23.5,22H23V20h.5a4.5,4.5,0,0,0,.36-9L23,11l-.1-.82a7,7,0,0,0-13.88,0L9,11,8.14,11a4.5,4.5,0,0,0,.36,9H9v2H8.5A6.5,6.5,0,0,1,7.2,9.14a9,9,0,0,1,17.6,0A6.5,6.5,0,0,1,23.5,22Z"></path><path d="M17 26.17L17 14 15 14 15 26.17 12.41 23.59 11 25 16 30 21 25 19.59 23.59 17 26.17z"></path></svg>');function je($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=Nt();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=jt(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(2),a(n),l($,n),J()}var Vt=H("<title> </title>"),Tt=H('<svg><!><path d="M12 10H6.78A11 11 0 0127 16h2A13 13 0 006 7.68V4H4v8h8zM20 22h5.22A11 11 0 015 16H3a13 13 0 0023 8.32V28h2V20H20z"></path></svg>');function Gt($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=Tt();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=Vt(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(),a(n),l($,n),J()}var Ut=H("<title> </title>"),Yt=H('<svg><!><path d="M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Zm0,26A12,12,0,1,1,28,16,12,12,0,0,1,16,28Z"></path><path d="M15 8H17V19H15zM16 22a1.5 1.5 0 101.5 1.5A1.5 1.5 0 0016 22z"></path></svg>');function Ne($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=Yt();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=Ut(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(2),a(n),l($,n),J()}var Ot=H("<title> </title>"),Zt=H('<svg><!><circle cx="16" cy="8" r="2"></circle><circle cx="16" cy="16" r="2"></circle><circle cx="16" cy="24" r="2"></circle></svg>');function Ft($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=Zt();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=Ot(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(3),a(n),l($,n),J()}var Jt=C('<div class="flex items-center justify-center py-8"><div class="w-6 h-6 border-2 border-gray-300 dark:border-gray-600 border-t-blue-600 rounded-full animate-spin"></div> <span class="ml-2 text-sm text-gray-600 dark:text-gray-400">Loading git status...</span></div>'),Wt=C('<div class="flex items-center gap-2 text-gray-600 dark:text-gray-400"><!> <span>Not a Git repository</span></div>'),Kt=C('<div class="flex items-center gap-2 text-yellow-600 dark:text-yellow-400"><!> <span class="text-xs"> </span></div>'),qt=C('<div class="flex items-center gap-2 text-blue-600 dark:text-blue-400"><!> <span class="text-xs"> </span></div>'),Qt=C('<div class="flex items-center gap-2 text-green-600 dark:text-green-400"><span class="text-xs">Up to date</span></div>'),Xt=C('<div class="mt-1 text-gray-500 dark:text-gray-500 truncate max-w-60"> </div>'),ea=C('<div class="pt-2 border-t border-gray-200 dark:border-gray-700"><div class="flex items-start gap-2 text-xs text-gray-600 dark:text-gray-400"><!> <div><div> </div> <!></div></div></div>'),ta=C('<div class="pl-6 space-y-1"><!> <!> <!></div> <!>',1),aa=C('<div class="w-4 h-4 border-2 border-gray-600 border-t-transparent rounded-full animate-spin"></div>'),ra=C("<!> Refresh Status",1),sa=C('<div class="w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin"></div>'),ia=C("<!> Pull Changes",1),oa=C('<button class="w-full flex items-center justify-center gap-2 px-3 py-2 text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 disabled:cursor-not-allowed rounded-md transition-colors"><!></button>'),na=C('<div class="pt-2 border-t border-gray-200 dark:border-gray-700"><div class="flex items-start gap-2 p-2 bg-red-50 dark:bg-red-900/20 rounded text-xs text-red-600 dark:text-red-400"><!> <span> </span></div></div>'),la=C('<div class="space-y-2"><div class="flex items-center gap-2"><!> <span class="text-sm font-medium text-gray-900 dark:text-white"> </span></div> <!></div> <div class="pt-2 border-t border-gray-200 dark:border-gray-700 space-y-2"><button class="w-full flex items-center justify-center gap-2 px-3 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-gray-100 dark:bg-gray-700 hover:bg-gray-200 dark:hover:bg-gray-600 disabled:bg-gray-300 disabled:cursor-not-allowed rounded-md transition-colors"><!></button> <!></div> <!>',1),da=C('<div class="flex items-center justify-center py-8 text-sm text-gray-500 dark:text-gray-400">Click to load git status</div>'),ca=C('<div class="absolute right-0 top-full mt-2 w-80 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg z-100"><div class="p-4 space-y-4"><div class="flex items-center gap-2 pb-2 border-b border-gray-200 dark:border-gray-700"><!> <span class="text-sm font-medium text-gray-900 dark:text-white">Git Status</span></div> <!></div></div>'),va=C('<div class="relative"><button class="p-1 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-lg transition-colors" aria-label="Git options"><!></button> <!></div>');function ua($,s){F(s,!0);let e=be(null),h=be(!1),i=be(null),u=be(!1);Fe(()=>{t(u)&&f()});async function f(){try{v(h,!0),v(i,null);const z=await fetch("/api/git-status");if(z.ok)v(e,await z.json(),!0);else throw new Error("Failed to fetch git status")}catch(z){v(i,z instanceof Error?z.message:"Unknown error",!0),console.error("Error fetching git status:",z)}finally{v(h,!1)}}async function o(){if(t(e)?.canPull)try{v(h,!0),v(i,null);const G=await(await fetch("/api/git-pull",{method:"POST"})).json();G.success?await f():v(i,G.message,!0)}catch(z){v(i,z instanceof Error?z.message:"Failed to pull changes",!0),console.error("Error pulling changes:",z)}finally{v(h,!1)}}async function n(){await f()}function g(z){if(!z)return"Unknown";const G=new Date(z),_=new Date().getTime()-G.getTime(),w=Math.floor(_/(1e3*60*60)),m=Math.floor(w/24);if(m>0)return`${m} day${m>1?"s":""} ago`;if(w>0)return`${w} hour${w>1?"s":""} ago`;{const D=Math.floor(_/6e4);return D>0?`${D} min ago`:"Just now"}}function b(){return t(e)?.isGitRepository?t(e)?.branchInfo?.isBehind?Ne:t(e)?.branchInfo?.isAhead?je:Ye:Ge}function c(){return t(e)?.isGitRepository?t(e)?.branchInfo?.isBehind?"text-yellow-500":t(e)?.branchInfo?.isAhead?"text-blue-500":"text-green-500":"text-gray-500"}var d=va(),y=r(d);y.__click=()=>v(u,!t(u));var ke=r(y);Ft(ke,{class:"w-5 h-5"}),a(y);var R=k(y,2);{var de=z=>{var G=ca(),ce=r(G),_=r(ce),w=r(_);{var m=B=>{const Q=Te(b);var oe=xe(),ve=W(oe);{let N=Te(c);kt(ve,()=>t(Q),(Y,O)=>{O(Y,{get class(){return`w-4 h-4 ${t(N)??""}`}})})}l(B,oe)};x(w,B=>{B(m)})}P(2),a(_);var D=k(_,2);{var U=B=>{var Q=Jt();l(B,Q)},K=B=>{var Q=xe(),oe=W(Q);{var ve=Y=>{var O=xe(),Ae=W(O);{var $e=V=>{var X=Wt(),ue=r(X);Ge(ue,{class:"w-4 h-4"}),P(2),a(X),l(V,X)},Le=V=>{var X=la(),ue=W(X),fe=r(ue),ge=r(fe);Ye(ge,{class:"w-4 h-4 text-gray-500"});var ee=k(ge,2),ne=r(ee,!0);a(ee),a(fe);var ae=k(fe,2);{var _e=j=>{var T=ta(),le=W(T),we=r(le);{var Ce=Z=>{var q=Kt(),pe=r(q);Ne(pe,{class:"w-3 h-3"});var me=k(pe,2),Me=r(me);a(me),a(q),I(()=>L(Me,`${t(e).branchInfo.behindCount??""} commit${t(e).branchInfo.behindCount!==1?"s":""} behind`)),l(Z,q)};x(we,Z=>{t(e)?.branchInfo?.isBehind&&Z(Ce)})}var re=k(we,2);{var ze=Z=>{var q=qt(),pe=r(q);je(pe,{class:"w-3 h-3"});var me=k(pe,2),Me=r(me);a(me),a(q),I(()=>L(Me,`${t(e).branchInfo.aheadCount??""} commit${t(e).branchInfo.aheadCount!==1?"s":""} ahead`)),l(Z,q)};x(re,Z=>{t(e)?.branchInfo?.isAhead&&Z(ze)})}var De=k(re,2);{var at=Z=>{var q=Qt();l(Z,q)};x(De,Z=>{!t(e)?.branchInfo?.isBehind&&!t(e)?.branchInfo?.isAhead&&Z(at)})}a(le);var rt=k(le,2);{var st=Z=>{var q=ea(),pe=r(q),me=r(pe);bt(me,{class:"w-3 h-3 mt-0.5 flex-shrink-0"});var Me=k(me,2),Re=r(Me),it=r(Re);a(Re);var ot=k(Re,2);{var nt=Se=>{var Be=Xt(),lt=r(Be,!0);a(Be),I(()=>L(lt,t(e).branchInfo.lastCommitMessage)),l(Se,Be)};x(ot,Se=>{t(e)?.branchInfo?.lastCommitMessage&&Se(nt)})}a(Me),a(pe),a(q),I(Se=>L(it,`Last commit (local): ${Se??""}`),[()=>g(t(e).branchInfo.lastCommitDate)]),l(Z,q)};x(rt,Z=>{t(e)?.branchInfo?.lastCommitDate&&Z(st)})}l(j,T)};x(ae,j=>{t(e)?.branchInfo&&j(_e)})}a(ue);var ye=k(ue,2),he=r(ye);he.__click=n;var Ee=r(he);{var Pe=j=>{var T=aa();l(j,T)},qe=j=>{var T=ra(),le=W(T);Gt(le,{class:"w-4 h-4"}),P(),l(j,T)};x(Ee,j=>{t(h)?j(Pe):j(qe,!1)})}a(he);var Qe=k(he,2);{var Xe=j=>{var T=oa();T.__click=o;var le=r(T);{var we=re=>{var ze=sa();l(re,ze)},Ce=re=>{var ze=ia(),De=W(ze);je(De,{class:"w-4 h-4"}),P(),l(re,ze)};x(le,re=>{t(h)?re(we):re(Ce,!1)})}a(T),I(()=>T.disabled=t(h)),l(j,T)};x(Qe,j=>{t(e)?.canPull&&j(Xe)})}a(ye);var et=k(ye,2);{var tt=j=>{var T=na(),le=r(T),we=r(le);Ne(we,{class:"w-3 h-3 mt-0.5 flex-shrink-0"});var Ce=k(we,2),re=r(Ce,!0);a(Ce),a(le),a(T),I(()=>L(re,t(i))),l(j,T)};x(et,j=>{t(i)&&j(tt)})}I(()=>{L(ne,t(e)?.currentBranch||"Unknown branch"),he.disabled=t(h)}),l(V,X)};x(Ae,V=>{t(e)?.isGitRepository?V(Le,!1):V($e)})}l(Y,O)},N=Y=>{var O=da();l(Y,O)};x(oe,Y=>{t(e)?Y(ve):Y(N,!1)},!0)}l(B,Q)};x(D,B=>{t(h)&&!t(e)?B(U):B(K,!1)})}a(ce),a(G),l(z,G)};x(R,z=>{t(u)&&z(de)})}a(d),We(d,(z,G)=>ht?.(z,G),()=>()=>v(u,!1)),l($,d),J()}Ie(["click"]);var fa=H("<title> </title>"),ga=H('<svg><!><path d="M31 16L24 23 22.59 21.59 28.17 16 22.59 10.41 24 9 31 16zM1 16L8 9 9.41 10.41 3.83 16 9.41 21.59 8 23 1 16z"></path><path d="M5.91 15H26.080000000000002V17H5.91z" transform="rotate(-75 15.996 16)"></path></svg>');function ha($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=ga();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=fa(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(2),a(n),l($,n),J()}var ba=H("<title> </title>"),pa=H('<svg><!><path d="M13 21L26.17 21 23.59 23.59 25 25 30 20 25 15 23.59 16.41 26.17 19 13 19 13 21z"></path><path d="M22,14V10a1,1,0,0,0-.29-.71l-7-7A1,1,0,0,0,14,2H4A2,2,0,0,0,2,4V28a2,2,0,0,0,2,2H20a2,2,0,0,0,2-2V26H20v2H4V4h8v6a2,2,0,0,0,2,2h6v2Zm-8-4V4.41L19.59,10Z"></path></svg>');function ma($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=pa();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=ba(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(2),a(n),l($,n),J()}var xa=H("<title> </title>"),_a=H('<svg><!><path d="M26 24v4H6V24H4v4H4a2 2 0 002 2H26a2 2 0 002-2h0V24zM26 14L24.59 12.59 17 20.17 17 2 15 2 15 20.17 7.41 12.59 6 14 16 24 26 14z"></path></svg>');function Oe($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=_a();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=xa(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(),a(n),l($,n),J()}var ya=H("<title> </title>"),wa=H('<svg><!><path fill-rule="evenodd" d="M16,2a14,14,0,0,0-4.43,27.28c.7.13,1-.3,1-.67s0-1.21,0-2.38c-3.89.84-4.71-1.88-4.71-1.88A3.71,3.71,0,0,0,6.24,22.3c-1.27-.86.1-.85.1-.85A2.94,2.94,0,0,1,8.48,22.9a3,3,0,0,0,4.08,1.16,2.93,2.93,0,0,1,.88-1.87c-3.1-.36-6.37-1.56-6.37-6.92a5.4,5.4,0,0,1,1.44-3.76,5,5,0,0,1,.14-3.7s1.17-.38,3.85,1.43a13.3,13.3,0,0,1,7,0c2.67-1.81,3.84-1.43,3.84-1.43a5,5,0,0,1,.14,3.7,5.4,5.4,0,0,1,1.44,3.76c0,5.38-3.27,6.56-6.39,6.91a3.33,3.33,0,0,1,.95,2.59c0,1.87,0,3.38,0,3.84s.25.81,1,.67A14,14,0,0,0,16,2Z"></path></svg>');function ka($,s){const e=E(s,["children","$$slots","$$events","$$legacy"]),h=E(e,["size","title"]);F(s,!1);const i=S(),u=S();let f=M(s,"size",8,16),o=M(s,"title",8,void 0);A(()=>(p(e),p(o())),()=>{v(i,e["aria-label"]||e["aria-labelledby"]||o())}),A(()=>(t(i),p(e)),()=>{v(u,{"aria-hidden":t(i)?void 0:!0,role:t(i)?"img":void 0,focusable:Number(e.tabindex)===0?!0:void 0})}),se(),te();var n=wa();ie(n,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:f(),height:f(),...t(u),...h}));var g=r(n);{var b=c=>{var d=ya(),y=r(d,!0);a(d),I(()=>L(y,o())),l(c,d)};x(g,c=>{o()&&c(b)})}P(),a(n),l($,n),J()}var $a=C('<div class="space-y-1 p-1"><button class="w-full text-left px-3 py-2 text-sm rounded-md transition-colors duration-200 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700"><div class="flex items-center gap-2"><!> <span>Export as CSV</span></div></button> <button class="w-full text-left px-3 py-2 text-sm rounded-md transition-colors duration-200 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700"><div class="flex items-center gap-2"><!> <span>Export as Excel</span></div></button> <button class="w-full text-left px-3 py-2 text-sm rounded-md transition-colors duration-200 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700"><div class="flex items-center gap-2"><!> <span>Export as JSON</span></div></button></div>'),Ca=C('<div class="flex-1 flex justify-center items-center"><div class="text-center"><div class="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4"></div> <p class="text-gray-500 dark:text-gray-400">Switching control set...</p></div></div>'),za=C('<div class="flex-1 flex justify-center items-center"><div class="text-center"><div class="animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4"></div> <p class="text-gray-500 dark:text-gray-400"> </p></div></div>'),Ma=C('<header class="bg-white dark:bg-gray-900 shadow-sm border-b border-gray-200 dark:border-gray-700 flex-shrink-0 relative z-40"><div class="w-full px-6 lg:px-8"><div class="flex justify-between items-center h-16"><div class="flex items-center"><a href="/" class="flex items-center space-x-3 hover:opacity-80 transition-opacity"><img src="/lula.png" class="h-8 w-8" alt="Lula Logo"/> <div class="flex flex-col"><span class="text-xl font-bold text-gray-900 dark:text-white">Lula</span> <span class="text-xs text-gray-500 dark:text-gray-400 -mt-1">Gitops for Compliance</span></div></a></div> <div class="flex items-center space-x-4"><!> <!> <a class="p-2 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-lg transition-colors" title="Github" href="https://github.com/defenseunicorns/lula" target="_blank"><!></a> <!></div></div></div></header> <div class="flex-1 flex gap-6 p-6 overflow-hidden"><!></div>',1),Aa=C('<div class="h-screen flex flex-col"><!></div> <!>',1);function Ba($,s){F(s,!0);const e=()=>Ve(Ke,"$appState",i),h=()=>Ve(pt,"$page",i),[i,u]=Je();let f=!1,o=be(!1),n=be("csv"),g=be(Ze([])),b=be("Mappings");async function c(){try{if(!e().currentPath){console.error("No current control set path available"),v(g,[{value:"Mappings",label:"Mappings (Default)"}],!0),v(b,"Mappings");return}const w=await fetch("/api/export-column-headers");if(w.ok){const m=await w.json();v(g,m.columnHeaders||[],!0),v(b,m.defaultColumn||"Mappings",!0)}else console.error("Failed to load column headers"),v(g,[{value:"Mappings",label:"Mappings (Default)"}],!0),v(b,"Mappings")}catch(_){console.error("Error loading column headers:",_),v(g,[{value:"Mappings",label:"Mappings (Default)"}],!0),v(b,"Mappings")}}async function d(_){if(_==="json")try{const w=`/api/export-controls?format=${_}`,m=document.createElement("a");m.href=w,m.download="",document.body.appendChild(m),m.click(),document.body.removeChild(m)}catch(w){console.error("Export failed:",w)}else v(n,_,!0),await c(),v(o,!0)}async function y(_){try{const{format:w,mappingsColumn:m}=_.detail,D=`/api/export-controls?format=${w}&mappingsColumn=${encodeURIComponent(m)}`,U=document.createElement("a");U.href=D,U.download="",document.body.appendChild(U),U.click(),document.body.removeChild(U)}catch(w){console.error("Export failed:",w)}}ft(()=>{He.connect();let _=null;const w=async()=>{if(f||h().url.pathname==="/setup"||e().isSwitchingControlSet)return;const m=e();if(m.isConnected){if(f=!0,(!m.name||m.name==="Unknown Control Set"||m.id==="unknown"||m.id==="default")&&(!m.controls||m.controls.length===0)){await He.scanControlSets();const D=await new Promise(U=>{const K=B=>{window.removeEventListener("control-sets-list",K),U(B.detail)};window.addEventListener("control-sets-list",K),setTimeout(()=>{window.removeEventListener("control-sets-list",K),U(null)},2e3)});D&&Array.isArray(D)&&D.length===1?(console.log("Auto-loading single control set:",D[0].path),await He.switchControlSet(D[0].path)):xt("/setup")}}else _=window.setTimeout(w,500)};return _=window.setTimeout(w,100),()=>{_&&clearTimeout(_)}}),gt(()=>{He.disconnect()});var ke=Aa(),R=W(ke),de=r(R);{var z=_=>{var w=Ma(),m=W(w),D=r(m),U=r(D),K=k(r(U),2),B=r(K);St(B,{});var Q=k(B,2);{var oe=V=>{mt(V,{buttonLabel:"Export",get buttonIcon(){return Oe},buttonClass:"inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 dark:text-gray-300 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors",dropdownClass:"w-48",children:ue=>{var fe=$a(),ge=r(fe);ge.__click=()=>d("csv");var ee=r(ge),ne=r(ee);ma(ne,{class:"w-4 h-4"}),P(2),a(ee),a(ge);var ae=k(ge,2);ae.__click=()=>d("excel");var _e=r(ae),ye=r(_e);Oe(ye,{class:"w-4 h-4"}),P(2),a(_e),a(ae);var he=k(ae,2);he.__click=()=>d("json");var Ee=r(he),Pe=r(Ee);ha(Pe,{class:"w-4 h-4"}),P(2),a(Ee),a(he),a(fe),l(ue,fe)},$$slots:{default:!0}})};x(Q,V=>{e().isConnected&&e().controls&&e().controls.length>0&&V(oe)})}var ve=k(Q,2),N=r(ve);ka(N,{class:"w-5 h-5"}),a(ve);var Y=k(ve,2);ua(Y,{}),a(K),a(U),a(D),a(m);var O=k(m,2),Ae=r(O);{var $e=V=>{var X=Ca();l(V,X)},Le=V=>{var X=xe(),ue=W(X);{var fe=ee=>{var ne=za(),ae=r(ne),_e=k(r(ae),2),ye=r(_e,!0);a(_e),a(ae),a(ne),I(()=>L(ye,e().isConnected?e().fieldSchema?"Loading controls...":"Loading schema...":"Connecting...")),l(ee,ne)},ge=ee=>{var ne=xe(),ae=W(ne);Ue(ae,()=>s.children),l(ee,ne)};x(ue,ee=>{!e().isConnected||!e().controls||e().controls.length===0||!e().fieldSchema?ee(fe):ee(ge,!1)},!0)}l(V,X)};x(Ae,V=>{e().isSwitchingControlSet?V($e):V(Le,!1)})}a(O),l(_,w)},G=_=>{var w=xe(),m=W(w);Ue(m,()=>s.children),l(_,w)};x(de,_=>{h().url.pathname!=="/setup"?_(z):_(G,!1)})}a(R);var ce=k(R,2);Dt(ce,{get format(){return t(n)},get columnHeaders(){return t(g)},get defaultColumn(){return t(b)},get isOpen(){return t(o)},set isOpen(_){v(o,_,!0)},$$events:{export:y,cancel:()=>{}}}),l($,ke),J(),u()}Ie(["click"]);export{Ba as component};
@@ -1 +1 @@
1
- import{f as h,a as c,s}from"../chunks/DSxRA67V.js";import{i as l}from"../chunks/kRA7ZCNG.js";import{p as v,f as u,t as _,a as g,c as e,r as o,s as x}from"../chunks/DHuA7MQr.js";import{p}from"../chunks/B0U_2Wn0.js";var d=h("<h1> </h1> <p> </p>",1);function q(m,f){v(f,!1),l();var a=d(),r=u(a),i=e(r,!0);o(r);var t=x(r,2),n=e(t,!0);o(t),_(()=>{s(i,p.status),s(n,p.error?.message)}),c(m,a),g()}export{q as component};
1
+ import{f as h,a as c,s}from"../chunks/DSxRA67V.js";import{i as l}from"../chunks/kRA7ZCNG.js";import{p as v,f as u,t as _,a as g,c as e,r as o,s as x}from"../chunks/DHuA7MQr.js";import{p}from"../chunks/D0gFZGZF.js";var d=h("<h1> </h1> <p> </p>",1);function q(m,f){v(f,!1),l();var a=d(),r=u(a),i=e(r,!0);o(r);var t=x(r,2),n=e(t,!0);o(t),_(()=>{s(i,p.status),s(n,p.error?.message)}),c(m,a),g()}export{q as component};
@@ -1 +1 @@
1
- import{f,a as n}from"../chunks/DSxRA67V.js";import"../chunks/kRA7ZCNG.js";import{f as y,c as t,r,s as w,n as C}from"../chunks/DHuA7MQr.js";import{i as k,s as $,a as D}from"../chunks/Ew6_cz_0.js";import{C as S,a as j,D as L}from"../chunks/RG1JlO7P.js";import{s as N}from"../chunks/BfBT_e06.js";var P=f('<div class=" h-full flex flex-col"><div class="flex-1 flex items-center justify-center p-8"><div class="text-center text-gray-500 dark:text-gray-400"><!> <h3 class="text-xl font-semibold text-gray-900 dark:text-white mb-2">No Control Selected</h3> <p class="text-gray-600 dark:text-gray-400">Select a control from the list to view and edit its details</p></div></div></div>'),q=f('<div class="w-1/2 flex flex-col"><div class="bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg shadow-sm h-full flex flex-col"><!></div></div> <div class="w-1/2 flex flex-col"><!></div>',1);function H(m){const o=()=>D(N,"$selectedControl",x),[x,g]=$();var l=q(),a=y(l),i=t(a),p=t(i);S(p,{}),r(i),r(a);var d=w(a,2),_=t(d);{var h=e=>{j(e,{get control(){return o()}})},b=e=>{var s=P(),c=t(s),v=t(c),u=t(v);L(u,{class:"mx-auto h-16 w-16 mb-4"}),C(4),r(v),r(c),r(s),n(e,s)};k(_,e=>{o()?e(h):e(b,!1)})}r(d),n(m,l),g()}export{H as component};
1
+ import{f,a as n}from"../chunks/DSxRA67V.js";import"../chunks/kRA7ZCNG.js";import{f as y,c as t,r,s as w,n as C}from"../chunks/DHuA7MQr.js";import{i as k,s as $,a as D}from"../chunks/Ew6_cz_0.js";import{C as S,a as j,D as L}from"../chunks/S6YlURmO.js";import{s as N}from"../chunks/hVr0KxW1.js";var P=f('<div class=" h-full flex flex-col"><div class="flex-1 flex items-center justify-center p-8"><div class="text-center text-gray-500 dark:text-gray-400"><!> <h3 class="text-xl font-semibold text-gray-900 dark:text-white mb-2">No Control Selected</h3> <p class="text-gray-600 dark:text-gray-400">Select a control from the list to view and edit its details</p></div></div></div>'),q=f('<div class="w-1/2 flex flex-col"><div class="bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg shadow-sm h-full flex flex-col"><!></div></div> <div class="w-1/2 flex flex-col"><!></div>',1);function H(m){const o=()=>D(N,"$selectedControl",x),[x,g]=$();var l=q(),a=y(l),i=t(a),p=t(i);S(p,{}),r(i),r(a);var d=w(a,2),_=t(d);{var h=e=>{j(e,{get control(){return o()}})},b=e=>{var s=P(),c=t(s),v=t(c),u=t(v);L(u,{class:"mx-auto h-16 w-16 mb-4"}),C(4),r(v),r(c),r(s),n(e,s)};k(_,e=>{o()?e(h):e(b,!1)})}r(d),n(m,l),g()}export{H as component};
@@ -1 +1 @@
1
- import{f as d,a as i}from"../chunks/DSxRA67V.js";import{p as E,u as M,b as u,o as S,f as A,a as B,c as r,d as F,r as s,s as x,g as H,n as N}from"../chunks/DHuA7MQr.js";import{i as h,s as P,a as R}from"../chunks/Ew6_cz_0.js";import{g as U}from"../chunks/BwQjulyY.js";import{p as V}from"../chunks/B0U_2Wn0.js";import{C as q,a as G,D as J}from"../chunks/RG1JlO7P.js";import{w as C}from"../chunks/DznG4VMX.js";import{s as b}from"../chunks/BfBT_e06.js";var K=d('<div class="absolute top-4 right-4 z-10"><div class="w-8 h-8 flex items-center justify-center rounded-full bg-blue-100 dark:bg-blue-900/30" title="Loading control..."><svg class="w-5 h-5 text-blue-600 dark:text-blue-400 animate-spin" fill="none" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg></div></div>'),O=d('<div class=" h-full flex flex-col"><div class="flex-1 flex items-center justify-center p-8"><div class="text-center text-gray-500 dark:text-gray-400"><!> <h3 class="text-xl font-semibold text-gray-900 dark:text-white mb-2">No Control Selected</h3> <p class="text-gray-600 dark:text-gray-400">Select a control from the list to view and edit its details</p></div></div></div>'),Q=d('<div class="w-1/2 flex flex-col"><div class="bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg shadow-sm h-full flex flex-col"><!></div></div> <div class="w-1/2 flex flex-col relative"><!> <!></div>',1);function re(_,w){E(w,!0);const n=()=>R(b,"$selectedControl",y),[y,k]=P();let c="",a=F(!1);M(()=>{const e=V.params.id;if(!e)return;const t=decodeURIComponent(e);t&&t!==c&&C.isConnected()&&(c=t,u(a,!0),C.getControlDetails(t))}),S(()=>{const e=t=>{const o=t.detail;u(a,!1),o?b.set(o):U("/")};return window.addEventListener("control-details",e),()=>{window.removeEventListener("control-details",e)}});var v=Q(),l=A(v),f=r(l),D=r(f);q(D,{}),s(f),s(l);var m=x(l,2),p=r(m);{var L=e=>{var t=K();i(e,t)};h(p,e=>{H(a)&&e(L)})}var I=x(p,2);{var $=e=>{G(e,{get control(){return n()}})},z=e=>{var t=O(),o=r(t),g=r(o),j=r(g);J(j,{class:"mx-auto h-16 w-16 mb-4"}),N(4),s(g),s(o),s(t),i(e,t)};h(I,e=>{n()?e($):e(z,!1)})}s(m),i(_,v),B(),k()}export{re as component};
1
+ import{f as d,a as i}from"../chunks/DSxRA67V.js";import{p as E,u as M,b as u,o as S,f as A,a as B,c as r,d as F,r as s,s as x,g as H,n as N}from"../chunks/DHuA7MQr.js";import{i as h,s as P,a as R}from"../chunks/Ew6_cz_0.js";import{g as U}from"../chunks/CdJEnKns.js";import{p as V}from"../chunks/D0gFZGZF.js";import{C as q,a as G,D as J}from"../chunks/S6YlURmO.js";import{w as C}from"../chunks/DznG4VMX.js";import{s as b}from"../chunks/hVr0KxW1.js";var K=d('<div class="absolute top-4 right-4 z-10"><div class="w-8 h-8 flex items-center justify-center rounded-full bg-blue-100 dark:bg-blue-900/30" title="Loading control..."><svg class="w-5 h-5 text-blue-600 dark:text-blue-400 animate-spin" fill="none" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg></div></div>'),O=d('<div class=" h-full flex flex-col"><div class="flex-1 flex items-center justify-center p-8"><div class="text-center text-gray-500 dark:text-gray-400"><!> <h3 class="text-xl font-semibold text-gray-900 dark:text-white mb-2">No Control Selected</h3> <p class="text-gray-600 dark:text-gray-400">Select a control from the list to view and edit its details</p></div></div></div>'),Q=d('<div class="w-1/2 flex flex-col"><div class="bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg shadow-sm h-full flex flex-col"><!></div></div> <div class="w-1/2 flex flex-col relative"><!> <!></div>',1);function re(_,w){E(w,!0);const n=()=>R(b,"$selectedControl",y),[y,k]=P();let c="",a=F(!1);M(()=>{const e=V.params.id;if(!e)return;const t=decodeURIComponent(e);t&&t!==c&&C.isConnected()&&(c=t,u(a,!0),C.getControlDetails(t))}),S(()=>{const e=t=>{const o=t.detail;u(a,!1),o?b.set(o):U("/")};return window.addEventListener("control-details",e),()=>{window.removeEventListener("control-details",e)}});var v=Q(),l=A(v),f=r(l),D=r(f);q(D,{}),s(f),s(l);var m=x(l,2),p=r(m);{var L=e=>{var t=K();i(e,t)};h(p,e=>{H(a)&&e(L)})}var I=x(p,2);{var $=e=>{G(e,{get control(){return n()}})},z=e=>{var t=O(),o=r(t),g=r(o),j=r(g);J(j,{class:"mx-auto h-16 w-16 mb-4"}),N(4),s(g),s(o),s(t),i(e,t)};h(I,e=>{n()?e($):e(z,!1)})}s(m),i(_,v),B(),k()}export{re as component};
@@ -1,4 +1,4 @@
1
- import{b as Ne,a as d,s as I,f as x,e as c,c as Ae,t as tr}from"../chunks/DSxRA67V.js";import{i as We}from"../chunks/kRA7ZCNG.js";import{p as Xe,af as Ve,b as a,U as k,y as pe,g as e,ag as $r,c as o,n as ke,r as t,a as Ke,t as P,ah as Nr,s as i,f as we,ai as xr,a1 as ze,ae as hr,aj as yr,i as de,o as ot,W as lt}from"../chunks/DHuA7MQr.js";import{l as ar,p as Je,i as M,a as st,s as it}from"../chunks/Ew6_cz_0.js";import{a as Lr,s as le,r as Tr,e as ge,b as Ye,c as Vr,d as _r,i as Cr,f as Sr,w as wr}from"../chunks/DznG4VMX.js";import{g as nt}from"../chunks/BwQjulyY.js";function dt(ue){return function(...U){var F=U[0];return F.stopPropagation(),ue?.apply(this,U)}}var vt=Ne("<title> </title>"),ct=Ne('<svg><!><path d="M11 18L12.41 19.41 15 16.83 15 29 17 29 17 16.83 19.59 19.41 21 18 16 13 11 18z"></path><path d="M23.5,22H23V20h.5a4.5,4.5,0,0,0,.36-9L23,11l-.1-.82a7,7,0,0,0-13.88,0L9,11,8.14,11a4.5,4.5,0,0,0,.36,9H9v2H8.5A6.5,6.5,0,0,1,7.2,9.14a9,9,0,0,1,17.6,0A6.5,6.5,0,0,1,23.5,22Z"></path></svg>');function gt(ue,U){const F=ar(U,["children","$$slots","$$events","$$legacy"]),Y=ar(F,["size","title"]);Xe(U,!1);const E=k(),T=k();let Z=Je(U,"size",8,16),b=Je(U,"title",8,void 0);Ve(()=>(pe(F),pe(b())),()=>{a(E,F["aria-label"]||F["aria-labelledby"]||b())}),Ve(()=>(e(E),pe(F)),()=>{a(T,{"aria-hidden":e(E)?void 0:!0,role:e(E)?"img":void 0,focusable:Number(F.tabindex)===0?!0:void 0})}),$r(),We();var $=ct();Lr($,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:Z(),height:Z(),...e(T),...Y}));var K=o($);{var G=H=>{var g=vt(),N=o(g,!0);t(g),P(()=>I(N,b())),d(H,g)};M(K,H=>{b()&&H(G)})}ke(2),t($),d(ue,$),Ke()}var pt=Ne("<title> </title>"),ut=Ne('<svg><!><path d="M10 6H14V10H10zM18 6H22V10H18zM10 14H14V18H10zM18 14H22V18H18zM10 22H14V26H10zM18 22H22V26H18z"></path></svg>');function kr(ue,U){const F=ar(U,["children","$$slots","$$events","$$legacy"]),Y=ar(F,["size","title"]);Xe(U,!1);const E=k(),T=k();let Z=Je(U,"size",8,16),b=Je(U,"title",8,void 0);Ve(()=>(pe(F),pe(b())),()=>{a(E,F["aria-label"]||F["aria-labelledby"]||b())}),Ve(()=>(e(E),pe(F)),()=>{a(T,{"aria-hidden":e(E)?void 0:!0,role:e(E)?"img":void 0,focusable:Number(F.tabindex)===0?!0:void 0})}),$r(),We();var $=ut();Lr($,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:Z(),height:Z(),...e(T),...Y}));var K=o($);{var G=H=>{var g=pt(),N=o(g,!0);t(g),P(()=>I(N,b())),d(H,g)};M(K,H=>{b()&&H(G)})}ke(),t($),d(ue,$),Ke()}var bt=x('<div class="p-4 text-sm text-blue-800 rounded-lg bg-blue-50 dark:bg-gray-800 dark:text-blue-400"><div class="flex items-center"><svg class="flex-shrink-0 inline w-4 h-4 mr-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20"><path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5ZM9.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM12 15H8a1 1 0 0 1 0-2h1v-3H8a1 1 0 0 1 0-2h2a1 1 0 0 1 1 1v4h1a1 1 0 0 1 0 2Z"></path></svg> <div><span class="font-medium">File loaded:</span> <div class="mt-1"><span class="font-medium">Sheets:</span> <span class="font-medium">Fields:</span> <span class="font-medium">Controls found:</span> </div></div></div></div>'),ft=x('<div class="p-4 text-sm text-red-800 rounded-lg bg-red-50 dark:bg-gray-800 dark:text-red-400"><div class="flex items-center"><svg class="flex-shrink-0 inline w-4 h-4 mr-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20"><path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5ZM9.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM12 15H8a1 1 0 0 1 0-2h1v-3H8a1 1 0 0 1 0-2h2a1 1 0 0 1 1 1v4h1a1 1 0 0 1 0 2Z"></path></svg> <span> </span></div></div>'),mt=x('<div class="p-4 text-sm text-green-800 rounded-lg bg-green-50 dark:bg-gray-800 dark:text-green-400"><div class="flex items-center"><svg class="flex-shrink-0 inline w-4 h-4 mr-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20"><path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5ZM9.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM12 15H8a1 1 0 0 1 0-2h1v-3H8a1 1 0 0 1 0-2h2a1 1 0 0 1 1 1v4h1a1 1 0 0 1 0 2Z"></path></svg> <span> </span></div></div>'),xt=x("<option> </option>"),ht=x("<option> </option>"),yt=x("<option> </option>"),_t=x('<span class="ml-auto text-xs text-blue-600 dark:text-blue-400">ID</span>'),wt=x('<div draggable="true" role="button" tabindex="0" class="flex items-center px-3 py-2 bg-gray-100 dark:bg-gray-700 text-gray-500 dark:text-gray-400 rounded text-sm cursor-move hover:bg-gray-200 dark:hover:bg-gray-600 transition-colors opacity-75"><svg class="w-3 h-3 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z"></path></svg> <span class="truncate line-through"> </span> <!></div>'),kt=x('<p class="text-xs text-gray-400 dark:text-gray-500 text-center py-4">No excluded fields</p>'),Ct=x('<div draggable="true" role="button" tabindex="0"><!> <span class="truncate"> </span></div>'),St=x('<p class="text-xs text-gray-400 dark:text-gray-500 text-center py-4">Drop fields here</p>'),$t=x('<div draggable="true" role="button" tabindex="0"><!> <span class="truncate"> </span></div>'),Dt=x('<p class="text-xs text-gray-400 dark:text-gray-500 text-center py-4">Drop fields here</p>'),Mt=x('<div draggable="true" role="button" tabindex="0"><!> <span class="truncate"> </span></div>'),zt=x('<p class="text-xs text-gray-400 dark:text-gray-500 text-center py-4">Drop fields here</p>'),At=x('<div draggable="false" role="button" tabindex="0" class="flex items-center px-3 py-2 bg-orange-100 dark:bg-orange-900/30 text-orange-800 dark:text-orange-300 rounded text-sm hover:bg-orange-200 dark:hover:bg-orange-800/30 transition-colors"><span class="truncate"> </span> <button class="ml-auto text-gray-400 hover:text-red-500 dark:text-gray-500 dark:hover:text-red-400" title="Remove from mappings">×</button></div>'),Ft=x('<div role="region" aria-label="Justification field drop zone"><p class="text-xs text-gray-400 dark:text-gray-500 text-center py-4">Drop fields here</p></div>'),Ot=x('<th class="px-4 py-2"> </th>'),Pt=x('<td class="px-4 py-2"> </td>'),Ht=x('<tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700"></tr>'),Et=x('<div class="bg-gradient-to-br from-gray-50 to-gray-100 dark:from-gray-800 dark:to-gray-900 rounded-lg p-4 border border-gray-200 dark:border-gray-700"><h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-4">Sample Data Preview</h3> <div class="overflow-x-auto"><table class="w-full text-sm text-left text-gray-500 dark:text-gray-400"><thead class="text-xs text-gray-700 uppercase bg-gray-100 dark:bg-gray-600 dark:text-gray-400"><tr></tr></thead><tbody></tbody></table></div></div>'),It=x('<span class="flex items-center"><svg class="animate-spin -ml-1 mr-3 h-5 w-5 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> Importing...</span>'),jt=x(`<div class="bg-gradient-to-br from-gray-50 to-gray-100 dark:from-gray-800 dark:to-gray-900 rounded-lg p-4 border border-gray-200 dark:border-gray-700"><h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-4">Import Options</h3> <div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4"><div><label for="controlSetName" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Control Set Name <span class="text-red-500">*</span></label> <input type="text" id="controlSetName" placeholder="e.g., NIST 800-53 Rev 4" class="bg-white border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:text-white" required/> <p class="mt-1 text-xs text-gray-500 dark:text-gray-400">This will be used as the display name and folder name</p></div> <div><label for="controlSetDescription" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Description</label> <input type="text" id="controlSetDescription" placeholder="Optional description" class="bg-white border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:text-white"/> <p class="mt-1 text-xs text-gray-500 dark:text-gray-400">Brief description of this control set</p></div></div> <div class="grid grid-cols-1 md:grid-cols-2 gap-4"><div><label for="sheet" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Sheet</label> <select id="sheet" class="bg-white border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:text-white"></select> <p class="mt-1 text-xs text-gray-500 dark:text-gray-400">Select which worksheet contains your control data</p></div> <div><label for="headerRow" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Select Header Row</label> <select id="headerRow" class="bg-white border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:text-white"></select> <p class="mt-1 text-xs text-gray-500 dark:text-gray-400">Select the row containing column headers</p></div> <div><label for="controlIdField" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Control ID Field <span class="text-red-500">*</span></label> <select id="controlIdField" required><option disabled>Select Control ID field</option><!></select> <p class="mt-1 text-xs text-gray-500 dark:text-gray-400">Column containing unique control identifiers (e.g., AC-1, SC-7)</p></div></div></div> <div class="bg-gradient-to-br from-gray-50 to-gray-100 dark:from-gray-800 dark:to-gray-900 rounded-lg p-4 border border-gray-200 dark:border-gray-700"><h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-2">Organize Fields</h3> <p class="text-sm text-gray-600 dark:text-gray-400 mb-4">Drag fields to organize them. <strong>Overview fields</strong> will appear as table columns in
1
+ import{b as Ne,a as d,s as I,f as x,e as c,c as Ae,t as tr}from"../chunks/DSxRA67V.js";import{i as We}from"../chunks/kRA7ZCNG.js";import{p as Xe,af as Ve,b as a,U as k,y as pe,g as e,ag as $r,c as o,n as ke,r as t,a as Ke,t as P,ah as Nr,s as i,f as we,ai as xr,a1 as ze,ae as hr,aj as yr,i as de,o as ot,W as lt}from"../chunks/DHuA7MQr.js";import{l as ar,p as Je,i as M,a as st,s as it}from"../chunks/Ew6_cz_0.js";import{a as Lr,s as le,r as Tr,e as ge,b as Ye,c as Vr,d as _r,i as Cr,f as Sr,w as wr}from"../chunks/DznG4VMX.js";import{g as nt}from"../chunks/CdJEnKns.js";function dt(ue){return function(...U){var F=U[0];return F.stopPropagation(),ue?.apply(this,U)}}var vt=Ne("<title> </title>"),ct=Ne('<svg><!><path d="M11 18L12.41 19.41 15 16.83 15 29 17 29 17 16.83 19.59 19.41 21 18 16 13 11 18z"></path><path d="M23.5,22H23V20h.5a4.5,4.5,0,0,0,.36-9L23,11l-.1-.82a7,7,0,0,0-13.88,0L9,11,8.14,11a4.5,4.5,0,0,0,.36,9H9v2H8.5A6.5,6.5,0,0,1,7.2,9.14a9,9,0,0,1,17.6,0A6.5,6.5,0,0,1,23.5,22Z"></path></svg>');function gt(ue,U){const F=ar(U,["children","$$slots","$$events","$$legacy"]),Y=ar(F,["size","title"]);Xe(U,!1);const E=k(),T=k();let Z=Je(U,"size",8,16),b=Je(U,"title",8,void 0);Ve(()=>(pe(F),pe(b())),()=>{a(E,F["aria-label"]||F["aria-labelledby"]||b())}),Ve(()=>(e(E),pe(F)),()=>{a(T,{"aria-hidden":e(E)?void 0:!0,role:e(E)?"img":void 0,focusable:Number(F.tabindex)===0?!0:void 0})}),$r(),We();var $=ct();Lr($,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:Z(),height:Z(),...e(T),...Y}));var K=o($);{var G=H=>{var g=vt(),N=o(g,!0);t(g),P(()=>I(N,b())),d(H,g)};M(K,H=>{b()&&H(G)})}ke(2),t($),d(ue,$),Ke()}var pt=Ne("<title> </title>"),ut=Ne('<svg><!><path d="M10 6H14V10H10zM18 6H22V10H18zM10 14H14V18H10zM18 14H22V18H18zM10 22H14V26H10zM18 22H22V26H18z"></path></svg>');function kr(ue,U){const F=ar(U,["children","$$slots","$$events","$$legacy"]),Y=ar(F,["size","title"]);Xe(U,!1);const E=k(),T=k();let Z=Je(U,"size",8,16),b=Je(U,"title",8,void 0);Ve(()=>(pe(F),pe(b())),()=>{a(E,F["aria-label"]||F["aria-labelledby"]||b())}),Ve(()=>(e(E),pe(F)),()=>{a(T,{"aria-hidden":e(E)?void 0:!0,role:e(E)?"img":void 0,focusable:Number(F.tabindex)===0?!0:void 0})}),$r(),We();var $=ut();Lr($,()=>({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",fill:"currentColor",preserveAspectRatio:"xMidYMid meet",width:Z(),height:Z(),...e(T),...Y}));var K=o($);{var G=H=>{var g=pt(),N=o(g,!0);t(g),P(()=>I(N,b())),d(H,g)};M(K,H=>{b()&&H(G)})}ke(),t($),d(ue,$),Ke()}var bt=x('<div class="p-4 text-sm text-blue-800 rounded-lg bg-blue-50 dark:bg-gray-800 dark:text-blue-400"><div class="flex items-center"><svg class="flex-shrink-0 inline w-4 h-4 mr-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20"><path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5ZM9.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM12 15H8a1 1 0 0 1 0-2h1v-3H8a1 1 0 0 1 0-2h2a1 1 0 0 1 1 1v4h1a1 1 0 0 1 0 2Z"></path></svg> <div><span class="font-medium">File loaded:</span> <div class="mt-1"><span class="font-medium">Sheets:</span> <span class="font-medium">Fields:</span> <span class="font-medium">Controls found:</span> </div></div></div></div>'),ft=x('<div class="p-4 text-sm text-red-800 rounded-lg bg-red-50 dark:bg-gray-800 dark:text-red-400"><div class="flex items-center"><svg class="flex-shrink-0 inline w-4 h-4 mr-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20"><path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5ZM9.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM12 15H8a1 1 0 0 1 0-2h1v-3H8a1 1 0 0 1 0-2h2a1 1 0 0 1 1 1v4h1a1 1 0 0 1 0 2Z"></path></svg> <span> </span></div></div>'),mt=x('<div class="p-4 text-sm text-green-800 rounded-lg bg-green-50 dark:bg-gray-800 dark:text-green-400"><div class="flex items-center"><svg class="flex-shrink-0 inline w-4 h-4 mr-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20"><path d="M10 .5a9.5 9.5 0 1 0 9.5 9.5A9.51 9.51 0 0 0 10 .5ZM9.5 4a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM12 15H8a1 1 0 0 1 0-2h1v-3H8a1 1 0 0 1 0-2h2a1 1 0 0 1 1 1v4h1a1 1 0 0 1 0 2Z"></path></svg> <span> </span></div></div>'),xt=x("<option> </option>"),ht=x("<option> </option>"),yt=x("<option> </option>"),_t=x('<span class="ml-auto text-xs text-blue-600 dark:text-blue-400">ID</span>'),wt=x('<div draggable="true" role="button" tabindex="0" class="flex items-center px-3 py-2 bg-gray-100 dark:bg-gray-700 text-gray-500 dark:text-gray-400 rounded text-sm cursor-move hover:bg-gray-200 dark:hover:bg-gray-600 transition-colors opacity-75"><svg class="w-3 h-3 mr-2 flex-shrink-0" fill="currentColor" viewBox="0 0 20 20"><path d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z"></path></svg> <span class="truncate line-through"> </span> <!></div>'),kt=x('<p class="text-xs text-gray-400 dark:text-gray-500 text-center py-4">No excluded fields</p>'),Ct=x('<div draggable="true" role="button" tabindex="0"><!> <span class="truncate"> </span></div>'),St=x('<p class="text-xs text-gray-400 dark:text-gray-500 text-center py-4">Drop fields here</p>'),$t=x('<div draggable="true" role="button" tabindex="0"><!> <span class="truncate"> </span></div>'),Dt=x('<p class="text-xs text-gray-400 dark:text-gray-500 text-center py-4">Drop fields here</p>'),Mt=x('<div draggable="true" role="button" tabindex="0"><!> <span class="truncate"> </span></div>'),zt=x('<p class="text-xs text-gray-400 dark:text-gray-500 text-center py-4">Drop fields here</p>'),At=x('<div draggable="false" role="button" tabindex="0" class="flex items-center px-3 py-2 bg-orange-100 dark:bg-orange-900/30 text-orange-800 dark:text-orange-300 rounded text-sm hover:bg-orange-200 dark:hover:bg-orange-800/30 transition-colors"><span class="truncate"> </span> <button class="ml-auto text-gray-400 hover:text-red-500 dark:text-gray-500 dark:hover:text-red-400" title="Remove from mappings">×</button></div>'),Ft=x('<div role="region" aria-label="Justification field drop zone"><p class="text-xs text-gray-400 dark:text-gray-500 text-center py-4">Drop fields here</p></div>'),Ot=x('<th class="px-4 py-2"> </th>'),Pt=x('<td class="px-4 py-2"> </td>'),Ht=x('<tr class="bg-white border-b dark:bg-gray-800 dark:border-gray-700"></tr>'),Et=x('<div class="bg-gradient-to-br from-gray-50 to-gray-100 dark:from-gray-800 dark:to-gray-900 rounded-lg p-4 border border-gray-200 dark:border-gray-700"><h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-4">Sample Data Preview</h3> <div class="overflow-x-auto"><table class="w-full text-sm text-left text-gray-500 dark:text-gray-400"><thead class="text-xs text-gray-700 uppercase bg-gray-100 dark:bg-gray-600 dark:text-gray-400"><tr></tr></thead><tbody></tbody></table></div></div>'),It=x('<span class="flex items-center"><svg class="animate-spin -ml-1 mr-3 h-5 w-5 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path></svg> Importing...</span>'),jt=x(`<div class="bg-gradient-to-br from-gray-50 to-gray-100 dark:from-gray-800 dark:to-gray-900 rounded-lg p-4 border border-gray-200 dark:border-gray-700"><h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-4">Import Options</h3> <div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-4"><div><label for="controlSetName" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Control Set Name <span class="text-red-500">*</span></label> <input type="text" id="controlSetName" placeholder="e.g., NIST 800-53 Rev 4" class="bg-white border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:text-white" required/> <p class="mt-1 text-xs text-gray-500 dark:text-gray-400">This will be used as the display name and folder name</p></div> <div><label for="controlSetDescription" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Description</label> <input type="text" id="controlSetDescription" placeholder="Optional description" class="bg-white border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:text-white"/> <p class="mt-1 text-xs text-gray-500 dark:text-gray-400">Brief description of this control set</p></div></div> <div class="grid grid-cols-1 md:grid-cols-2 gap-4"><div><label for="sheet" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Sheet</label> <select id="sheet" class="bg-white border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:text-white"></select> <p class="mt-1 text-xs text-gray-500 dark:text-gray-400">Select which worksheet contains your control data</p></div> <div><label for="headerRow" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Select Header Row</label> <select id="headerRow" class="bg-white border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full p-2.5 dark:bg-gray-600 dark:border-gray-500 dark:text-white"></select> <p class="mt-1 text-xs text-gray-500 dark:text-gray-400">Select the row containing column headers</p></div> <div><label for="controlIdField" class="block mb-2 text-sm font-medium text-gray-900 dark:text-white">Control ID Field <span class="text-red-500">*</span></label> <select id="controlIdField" required><option disabled>Select Control ID field</option><!></select> <p class="mt-1 text-xs text-gray-500 dark:text-gray-400">Column containing unique control identifiers (e.g., AC-1, SC-7)</p></div></div></div> <div class="bg-gradient-to-br from-gray-50 to-gray-100 dark:from-gray-800 dark:to-gray-900 rounded-lg p-4 border border-gray-200 dark:border-gray-700"><h3 class="text-lg font-semibold text-gray-900 dark:text-white mb-2">Organize Fields</h3> <p class="text-sm text-gray-600 dark:text-gray-400 mb-4">Drag fields to organize them. <strong>Overview fields</strong> will appear as table columns in
2
2
  the controls list.</p> <div class="grid grid-cols-1 lg:grid-cols-5 gap-4"><div class="border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800"><div class="p-3 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-700 rounded-t-lg"><h4 class="text-sm font-semibold text-gray-700 dark:text-gray-300">Excluded Fields</h4> <p class="text-xs text-gray-500 dark:text-gray-400 mt-1">Not imported</p></div> <div role="region" aria-label="Excluded fields drop zone"><!> <!></div></div> <div class="border border-blue-300 dark:border-blue-700 rounded-lg bg-white dark:bg-gray-800"><div class="p-3 border-b border-blue-200 dark:border-blue-800 bg-blue-50 dark:bg-blue-900/20 rounded-t-lg"><h4 class="text-sm font-semibold text-blue-700 dark:text-blue-300">Overview Tab</h4> <p class="text-xs text-blue-600 dark:text-blue-400 mt-1">Shows in details & table columns</p></div> <div role="region" aria-label="Overview tab drop zone"><!> <!></div></div> <div class="border border-green-300 dark:border-green-700 rounded-lg bg-white dark:bg-gray-800"><div class="p-3 border-b border-green-200 dark:border-green-800 bg-green-50 dark:bg-green-900/20 rounded-t-lg"><h4 class="text-sm font-semibold text-green-700 dark:text-green-300">Implementation Tab</h4> <p class="text-xs text-green-600 dark:text-green-400 mt-1">Status & compliance</p></div> <div role="region" aria-label="Implementation tab drop zone"><!> <!></div></div> <div class="border border-purple-300 dark:border-purple-700 rounded-lg bg-white dark:bg-gray-800"><div class="p-3 border-b border-purple-200 dark:border-purple-800 bg-purple-50 dark:bg-purple-900/20 rounded-t-lg"><h4 class="text-sm font-semibold text-purple-700 dark:text-purple-300">Custom Tab</h4> <p class="text-xs text-purple-600 dark:text-purple-400 mt-1">Additional fields</p></div> <div role="region" aria-label="Custom fields drop zone"><!> <!></div></div> <div class="border border-orange-300 dark:border-orange-700 rounded-lg bg-white dark:bg-gray-800"><div class="p-3 border-b border-orange-200 dark:border-orange-800 bg-orange-50 dark:bg-orange-900/20 rounded-t-lg"><h4 class="text-sm font-semibold text-orange-700 dark:text-orange-300">Mappings Tab</h4> <p class="text-xs text-orange-600 dark:text-orange-400 mt-1">Pre-populate justification for a control mapping</p></div> <div role="region" aria-label="Justifications tab drop zone"><div class="space-y-2"><!></div></div></div></div></div> <!> <div class="flex justify-center"><button class="px-5 py-2.5 text-white bg-blue-600 hover:bg-blue-700 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm disabled:opacity-50 disabled:cursor-not-allowed"><!></button></div>`,1),Tt=x('<div class="space-y-6"><div role="button" tabindex="0" class="relative"><label><div class="flex flex-col items-center justify-center pt-5 pb-6"><!> <p class="mb-2 text-sm text-gray-500 dark:text-gray-400"><span class="font-semibold">Click to upload</span> or drag and drop</p> <p class="text-xs text-gray-500 dark:text-gray-400">XLSX, XLS or CSV files</p></div> <input type="file" class="hidden" accept=".xlsx,.xls,.csv"/></label></div> <!> <!> <!> <!></div>');function Vt(ue,U){Xe(U,!1);const F=Nr();let Y=k(null),E=k(""),T=k(""),Z=k([]),b=k([]),$=k([]),K=k(0),G=k([]),H=k([]),g=k(new Map),N=k(1),L=k(""),xe=k(""),J=k(""),Q=k(!1),ee=k(""),be=k(""),Ce=k(!1),te=k(!1),C=k(null),B=k(null),re=k(null);function Se(){a(b,[]),a($,[]),a(K,0),e(g).clear(),a(g,new Map),a(H,[]),a(L,""),a(ee,""),a(be,""),a(C,null),a(B,null),a(re,null)}function p(l){l.preventDefault(),a(te,!0)}function u(){a(te,!1)}function D(l){l.preventDefault(),a(te,!1);const n=l.dataTransfer?.files;n&&n.length>0&&j(n[0])}function V(l){const n=l.target;n.files&&n.files.length>0&&j(n.files[0])}async function j(l){Se(),a(E,l.name),a(Y,l),a(ee,""),a(Q,!0),a(xe,e(E).replace(/\.[^.]+$/,"").replace(/[-_]/g," ")),a(J,`Imported from ${e(E)}`);try{const n=new FormData;n.append("file",l);const y=await fetch("/api/parse-excel",{method:"POST",body:n});if(!y.ok){const z=await y.json();throw new Error(z.error||"Failed to parse file")}const h=await y.json();a(Z,h.sheets||[]),a(T,h.selectedSheet||e(Z)[0]),a(G,h.rowPreviews||[]),e(G).length>0&&e(N)===1&&a(N,e(G)[0].row),await q(),a(Ce,!0)}catch(n){a(ee,"Error reading file: "+n.message)}finally{a(Q,!1)}}async function q(){if(!(!e(Y)||!e(T))){a(Q,!0),e(g).clear(),a(g,new Map),a(L,""),a(H,[]),a(C,null),a(B,null),a(re,null);try{const l=new FormData;l.append("file",e(Y)),l.append("sheetName",e(T));const n=await fetch("/api/parse-excel-sheet-previews",{method:"POST",body:l});if(n.ok){const w=await n.json();a(G,w.rowPreviews||[]),e(G).length>0&&!e(G).some(A=>A.row===e(N))&&a(N,e(G)[0].row)}else{const w=await n.json();throw new Error(w.error||"Failed to load sheet previews")}const y=new FormData;y.append("file",e(Y)),y.append("sheetName",e(T)),y.append("headerRow",e(N).toString());const h=await fetch("/api/parse-excel-sheet",{method:"POST",body:y});if(!h.ok){const w=await h.json();throw new Error(w.error||"Failed to parse sheet")}const z=await h.json();if(a(b,z.fields||[]),a($,z.sampleData||[]),a(K,z.controlCount||0),e(b).forEach((w,A)=>{const _=w.toLowerCase();let ce="custom",fe="text";_.includes("implementation")||_.includes("status")||_.includes("narrative")||_.includes("guidance")?ce="implementation":(_.includes("id")||_.includes("title")||_.includes("family")||_.includes("cci")||_.includes("control")||_.includes("acronym"))&&(ce="overview"),_.includes("description")||_.includes("narrative")||_.includes("guidance")||_.includes("statement")?fe="textarea":_.includes("status")||_.includes("type")||_.includes("designation")?fe="select":_.includes("date")?fe="date":(_.includes("count")||_.includes("number"))&&(fe="number"),e(g).set(w,{originalName:w,tab:ce,displayOrder:A,fieldType:fe,required:_.includes("id")||_.includes("title")})}),a(g,e(g)),e(L)&&!e(b).includes(e(L))&&a(L,""),!e(L)&&e(b).includes("AP Acronym")){const w=!e($).length||e($).every(ne=>!ne["AP Acronym"]||String(ne["AP Acronym"]).length<25),A=e($).map(ne=>ne["AP Acronym"]).filter(ne=>ne!=null&&ne!==""&&String(ne).trim()!==""),_=new Set(A),ce=!A.length||_.size===A.length,fe=A.length>0;w&&ce&&fe&&a(L,"AP Acronym")}}catch(l){a(ee,"Error loading sheet data: "+l.message)}finally{a(Q,!1)}}}function ve(l){if(!l)return l;let n=l.trim().replace(/\r?\n/g," ").replace(/\s+/g," ").trim();return Le(n)}function Le(l){return l.replace(/\W+/g," ").split(/ |\s/).map(n=>n.toLowerCase()).join("-")}function he(l,n){a(C,n),l.dataTransfer&&(l.dataTransfer.effectAllowed="move",l.dataTransfer.setData("text/plain",n))}function ae(){a(C,null),a(B,null),a(re,null)}function S(l,n){l.preventDefault(),a(B,n),l.dataTransfer&&(l.dataTransfer.dropEffect="move")}function se(){a(B,null)}function ie(l,n,y){if(l.preventDefault(),e(C)&&e(g).has(e(C))){const h=e(g).get(e(C));if(n==="mappings")e(H).includes(e(C))||a(H,[...e(H),e(C)]);else{if(h.tab=n,y!==void 0&&n!==null){const w=Array.from(e(g).entries()).filter(([A,_])=>_.tab===n).sort((A,_)=>A[1].displayOrder-_[1].displayOrder).filter(([A])=>A!==e(C));w.splice(y,0,[e(C),h]),w.forEach(([A,_],ce)=>{_.displayOrder=ce,e(g).set(A,_)})}else if(n!==null){const z=Math.max(0,...Array.from(e(g).values()).filter(w=>w.tab===n).map(w=>w.displayOrder));h.displayOrder=z+1}e(g).set(e(C),h),a(g,e(g))}}a(C,null),a(B,null)}function Fe(l,n){l.preventDefault(),l.stopPropagation(),a(re,n)}function $e(){a(re,null)}function De(l,n,y){if(l.preventDefault(),l.stopPropagation(),e(C)&&e(C)!==n){const z=Array.from(e(g).entries()).filter(([w,A])=>A.tab===y).sort((w,A)=>w[1].displayOrder-A[1].displayOrder).findIndex(([w])=>w===n);z!==-1&&ie(l,y,z)}a(re,null)}async function Be(){if(!(!e(Y)||!e(E))){if(!e(L)){a(ee,"Please select a Control ID field before importing"),a(be,"");return}if(!e(xe)||e(xe).trim()===""){a(ee,"Please enter a Control Set Name before importing"),a(be,"");return}a(Q,!0),a(ee,""),a(be,"");try{const l=new FormData;l.append("file",e(Y),e(E)),l.append("controlIdField",e(L)),l.append("startRow",e(N).toString()),l.append("sheetName",e(T)),l.append("namingConvention","kebab-case"),l.append("skipEmpty","true"),l.append("skipEmptyRows","true"),l.append("controlSetName",e(xe)||e(E).replace(/\.[^.]+$/,"")),l.append("controlSetDescription",e(J)||`Imported from ${e(E)}`);const n=Array.from(e(g).entries()).filter(([h,z])=>z.tab!==null).map(([h,z])=>({fieldName:ve(h),...z}));l.append("fieldSchema",JSON.stringify(n)),l.append("justificationFields",JSON.stringify(e(H).map(h=>ve(h))));let y;try{if(y=await fetch("/api/import-spreadsheet",{method:"POST",body:l}),!y.ok){const z=await y.json();throw new Error(z.error||"Import failed")}const h=await y.json();a(be,`Successfully imported ${h.controlCount} controls into ${h.families.length} families`),F("created",{path:h.outputDir})}catch(h){console.error("Error importing spreadsheet:",h)}}catch(l){a(ee,"Error importing spreadsheet: "+l.message)}finally{a(Q,!1)}}}We();var Re=Tt(),ye=o(Re),Ze=o(ye),Oe=o(Ze),or=o(Oe);gt(or,{class:"w-8 h-8 mb-4 text-gray-500 dark:text-gray-400"}),ke(4),t(Oe);var Ge=i(Oe,2);t(Ze),t(ye);var Pe=i(ye,2);{var lr=l=>{var n=bt(),y=o(n),h=i(o(y),2),z=i(o(h)),w=i(z),A=i(o(w)),_=i(A,2),ce=i(_,2);t(w),t(h),t(y),t(n),P(()=>{I(z,` ${e(E)??""} `),I(A,` ${e(Z).length??""} | `),I(_,` ${e(b).length??""} | `),I(ce,` ${e(K)??""}`)}),d(l,n)};M(Pe,l=>{e(E)&&l(lr)})}var Qe=i(Pe,2);{var sr=l=>{var n=ft(),y=o(n),h=i(o(y),2),z=o(h,!0);t(h),t(y),t(n),P(()=>I(z,e(ee))),d(l,n)};M(Qe,l=>{e(ee)&&l(sr)})}var qe=i(Qe,2);{var ir=l=>{var n=mt(),y=o(n),h=i(o(y),2),z=o(h,!0);t(h),t(y),t(n),P(()=>I(z,e(be))),d(l,n)};M(qe,l=>{e(be)&&l(ir)})}var nr=i(qe,2);{var dr=l=>{var n=jt(),y=we(n),h=i(o(y),2),z=o(h),w=i(o(z),2);Tr(w),ke(2),t(z);var A=i(z,2),_=i(o(A),2);Tr(_),ke(2),t(A),t(h);var ce=i(h,2),fe=o(ce),ne=i(o(fe),2);P(()=>{e(T),xr(()=>{e(Z)})}),ge(ne,5,()=>e(Z),r=>r,(r,s)=>{var f=xt(),m=o(f,!0);t(f);var v={};P(()=>{I(m,e(s)),v!==(v=e(s))&&(f.value=(f.__value=e(s))??"")}),d(r,f)}),t(ne),ke(2),t(fe);var vr=i(fe,2),er=i(o(vr),2);P(()=>{e(N),xr(()=>{e(G)})}),ge(er,5,()=>e(G),r=>r.row,(r,s)=>{var f=ht(),m=o(f);t(f);var v={};P(()=>{I(m,`Row ${e(s).row??""}: ${e(s).preview??""}`),v!==(v=e(s).row)&&(f.value=(f.__value=e(s).row)??"")}),d(r,f)}),t(er),ke(2),t(vr);var Dr=i(vr,2),rr=i(o(Dr),2);P(()=>{e(L),xr(()=>{e(b),e($)})});var cr=o(rr);cr.value=cr.__value="";var Br=i(cr);ge(Br,1,()=>e(b),r=>r,(r,s)=>{const f=ze(()=>e($).length>0&&e($)[0][e(s)]?String(e($)[0][e(s)]).slice(0,30):""),m=ze(()=>!e($).length||e($).every(oe=>!oe[e(s)]||String(oe[e(s)]).length<25)),v=ze(()=>e($).map(oe=>oe[e(s)]).filter(oe=>oe!=null&&oe!==""&&String(oe).trim()!=="")),W=ze(()=>new Set(e(v))),X=ze(()=>!e(v).length||e(W).size===e(v).length),R=ze(()=>e(v).length>0);var O=Ae(),me=we(O);{var Me=oe=>{var _e=yt(),mr=o(_e);t(_e);var jr={};P(()=>{I(mr,`${e(s)??""}${e(f)?` (e.g., ${e(f)})`:""}`),jr!==(jr=e(s))&&(_e.value=(_e.__value=e(s))??"")}),d(oe,_e)};M(me,oe=>{e(m)&&e(X)&&e(R)&&oe(Me)})}d(r,O)}),t(rr),ke(2),t(Dr),t(ce),t(y);var gr=i(y,2),Mr=i(o(gr),4),pr=o(Mr),He=i(o(pr),2),zr=o(He);ge(zr,1,()=>e(b).filter(r=>!e(g).get(r)||e(g).get(r)?.tab===null),r=>r,(r,s)=>{var f=wt(),m=i(o(f),2),v=o(m,!0);t(m);var W=i(m,2);{var X=R=>{var O=_t();d(R,O)};M(W,R=>{e(s)===e(L)&&R(X)})}t(f),P(()=>{Ye(f,"aria-label",`Drag ${e(s)??""} field`),I(v,e(s))}),c("dragstart",f,R=>he(R,e(s))),c("dragend",f,ae),d(r,f)});var Rr=i(zr,2);{var Zr=r=>{var s=kt();d(r,s)};M(Rr,r=>{e(b).filter(s=>!e(g).get(s)||e(g).get(s)?.tab===null).length===0&&r(Zr)})}t(He),t(pr);var ur=i(pr,2),Ee=i(o(ur),2),Ar=o(Ee);ge(Ar,3,()=>Array.from(e(g).entries()).filter(([r,s])=>s.tab==="overview").sort((r,s)=>r[1].displayOrder-s[1].displayOrder),([r,s])=>r,(r,s)=>{var f=hr(()=>yr(e(s),2));let m=()=>e(f)[0];var v=Ct(),W=o(v);kr(W,{class:"w-3 h-3 mr-2 flex-shrink-0"});var X=i(W,2),R=o(X,!0);t(X),t(v),P(()=>{Ye(v,"aria-label",`${m()??""} field in Overview tab`),le(v,1,`flex items-center px-3 py-2 bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300 rounded text-sm cursor-move hover:bg-blue-200 dark:hover:bg-blue-800/30 transition-colors
3
3
  ${e(re)===m()&&e(C)!==m()?"border-t-2 border-blue-500":""}`),I(R,m())}),c("dragstart",v,O=>he(O,m())),c("dragend",v,ae),c("dragover",v,O=>Fe(O,m())),c("dragleave",v,$e),c("drop",v,O=>De(O,m(),"overview")),d(r,v)});var qr=i(Ar,2);{var Ur=r=>{var s=St();d(r,s)};M(qr,r=>{Array.from(e(g).entries()).filter(([s,f])=>f.tab==="overview").length===0&&r(Ur)})}t(Ee),t(ur);var br=i(ur,2),Ie=i(o(br),2),Fr=o(Ie);ge(Fr,3,()=>Array.from(e(g).entries()).filter(([r,s])=>s.tab==="implementation").sort((r,s)=>r[1].displayOrder-s[1].displayOrder),([r,s])=>r,(r,s)=>{var f=hr(()=>yr(e(s),2));let m=()=>e(f)[0];var v=$t(),W=o(v);kr(W,{class:"w-3 h-3 mr-2 flex-shrink-0"});var X=i(W,2),R=o(X,!0);t(X),t(v),P(()=>{Ye(v,"aria-label",`${m()??""} field in Implementation tab`),le(v,1,`flex items-center px-3 py-2 bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-300 rounded text-sm cursor-move hover:bg-green-200 dark:hover:bg-green-800/30 transition-colors
4
4
  ${e(re)===m()&&e(C)!==m()?"border-t-2 border-green-500":""}`),I(R,m())}),c("dragstart",v,O=>he(O,m())),c("dragend",v,ae),c("dragover",v,O=>Fe(O,m())),c("dragleave",v,$e),c("drop",v,O=>De(O,m(),"implementation")),d(r,v)});var Yr=i(Fr,2);{var Jr=r=>{var s=Dt();d(r,s)};M(Yr,r=>{Array.from(e(g).entries()).filter(([s,f])=>f.tab==="implementation").length===0&&r(Jr)})}t(Ie),t(br);var fr=i(br,2),je=i(o(fr),2),Or=o(je);ge(Or,3,()=>Array.from(e(g).entries()).filter(([r,s])=>s.tab==="custom").sort((r,s)=>r[1].displayOrder-s[1].displayOrder),([r,s])=>r,(r,s)=>{var f=hr(()=>yr(e(s),2));let m=()=>e(f)[0];var v=Mt(),W=o(v);kr(W,{class:"w-3 h-3 mr-2 flex-shrink-0"});var X=i(W,2),R=o(X,!0);t(X),t(v),P(()=>{Ye(v,"aria-label",`${m()??""} field in Custom tab`),le(v,1,`flex items-center px-3 py-2 bg-purple-100 dark:bg-purple-900/30 text-purple-800 dark:text-purple-300 rounded text-sm cursor-move hover:bg-purple-200 dark:hover:bg-purple-800/30 transition-colors
@@ -1 +1 @@
1
- {"version":"1765992393476"}
1
+ {"version":"1766167081858"}
@@ -3169,6 +3169,7 @@ __export(spreadsheetRoutes_exports, {
3169
3169
  default: () => spreadsheetRoutes_default,
3170
3170
  detectValueType: () => detectValueType,
3171
3171
  extractFamilyFromControlId: () => extractFamilyFromControlId,
3172
+ formatMappingEntry: () => formatMappingEntry,
3172
3173
  parseCSV: () => parseCSV,
3173
3174
  parseUploadedFile: () => parseUploadedFile,
3174
3175
  processImportParameters: () => processImportParameters,
@@ -3649,6 +3650,16 @@ function extractFamilyFromControlId(controlId) {
3649
3650
  }
3650
3651
  return controlId.substring(0, 2).toUpperCase();
3651
3652
  }
3653
+ function formatMappingEntry(mapping) {
3654
+ const justification = mapping.description || mapping.justification || "";
3655
+ const status = mapping.status || "Unknown";
3656
+ const cci = mapping.cci || "";
3657
+ const finalJustification = justification.trim() !== "" ? justification : `[${status}]`;
3658
+ if (cci.trim() !== "") {
3659
+ return `CCI ${cci}: ${finalJustification}`;
3660
+ }
3661
+ return finalJustification;
3662
+ }
3652
3663
  function exportAsCSV(controls, metadata, mappingsColumn, res) {
3653
3664
  return exportAsCSVWithMapping(controls, metadata, { mappings: mappingsColumn }, res);
3654
3665
  }
@@ -3740,11 +3751,7 @@ function exportAsCSVWithMapping(controls, metadata, columnMappings, res) {
3740
3751
  }
3741
3752
  if (value === void 0 || value === null) return '""';
3742
3753
  if (fieldName === "mappings" && Array.isArray(value)) {
3743
- const mappingsStr = value.map((m) => {
3744
- const justification = m.description || m.justification || "";
3745
- const status = m.status || "Unknown";
3746
- return justification.trim() !== "" ? justification : `[${status}]`;
3747
- }).join("\n");
3754
+ const mappingsStr = value.map((m) => formatMappingEntry(m)).join("\n\n");
3748
3755
  return `"${mappingsStr.replace(/"/g, '""')}"`;
3749
3756
  }
3750
3757
  if (Array.isArray(value)) return `"${value.join("; ").replace(/"/g, '""')}"`;
@@ -3835,12 +3842,8 @@ async function exportAsExcelWithMapping(controls, metadata, columnMappings, res)
3835
3842
  if (isMappingColumn) {
3836
3843
  const mappingsValue = control["mappings"];
3837
3844
  if (Array.isArray(mappingsValue) && mappingsValue.length > 0) {
3838
- const mappingsStr = mappingsValue.map((m) => m.description || m.justification || "").filter((desc) => desc && desc.trim() !== "").join("\n");
3839
- if (mappingsStr.trim() !== "") {
3840
- value = mappingsStr;
3841
- } else {
3842
- value = control[fieldName];
3843
- }
3845
+ const mappingsStr = mappingsValue.map((m) => formatMappingEntry(m)).join("\n\n");
3846
+ value = mappingsStr;
3844
3847
  } else {
3845
3848
  value = control[fieldName];
3846
3849
  }
@@ -3848,11 +3851,7 @@ async function exportAsExcelWithMapping(controls, metadata, columnMappings, res)
3848
3851
  value = control[fieldName];
3849
3852
  }
3850
3853
  if (fieldName === "mappings" && Array.isArray(value)) {
3851
- const mappingsStr = value.map((m) => {
3852
- const justification = m.description || m.justification || "";
3853
- const status = m.status || "Unknown";
3854
- return justification.trim() !== "" ? justification : `[${status}]`;
3855
- }).join("\n");
3854
+ const mappingsStr = value.map((m) => formatMappingEntry(m)).join("\n\n");
3856
3855
  exportControl[displayName] = mappingsStr;
3857
3856
  } else if (Array.isArray(value)) {
3858
3857
  exportControl[displayName] = value.join("; ");
@@ -3988,7 +3987,8 @@ var init_spreadsheetRoutes = __esm({
3988
3987
  mappings: controlMappings.map((m) => ({
3989
3988
  uuid: m.uuid,
3990
3989
  status: m.status,
3991
- description: m.justification || ""
3990
+ description: m.justification || "",
3991
+ cci: m.cci || ""
3992
3992
  }))
3993
3993
  };
3994
3994
  });
@@ -4098,7 +4098,8 @@ var init_spreadsheetRoutes = __esm({
4098
4098
  mappings: controlMappings.map((m) => ({
4099
4099
  uuid: m.uuid,
4100
4100
  status: m.status,
4101
- description: m.justification || ""
4101
+ description: m.justification || "",
4102
+ cci: m.cci || ""
4102
4103
  }))
4103
4104
  };
4104
4105
  });
@@ -3151,6 +3151,7 @@ __export(spreadsheetRoutes_exports, {
3151
3151
  default: () => spreadsheetRoutes_default,
3152
3152
  detectValueType: () => detectValueType,
3153
3153
  extractFamilyFromControlId: () => extractFamilyFromControlId,
3154
+ formatMappingEntry: () => formatMappingEntry,
3154
3155
  parseCSV: () => parseCSV,
3155
3156
  parseUploadedFile: () => parseUploadedFile,
3156
3157
  processImportParameters: () => processImportParameters,
@@ -3631,6 +3632,16 @@ function extractFamilyFromControlId(controlId) {
3631
3632
  }
3632
3633
  return controlId.substring(0, 2).toUpperCase();
3633
3634
  }
3635
+ function formatMappingEntry(mapping) {
3636
+ const justification = mapping.description || mapping.justification || "";
3637
+ const status = mapping.status || "Unknown";
3638
+ const cci = mapping.cci || "";
3639
+ const finalJustification = justification.trim() !== "" ? justification : `[${status}]`;
3640
+ if (cci.trim() !== "") {
3641
+ return `CCI ${cci}: ${finalJustification}`;
3642
+ }
3643
+ return finalJustification;
3644
+ }
3634
3645
  function exportAsCSV(controls, metadata, mappingsColumn, res) {
3635
3646
  return exportAsCSVWithMapping(controls, metadata, { mappings: mappingsColumn }, res);
3636
3647
  }
@@ -3722,11 +3733,7 @@ function exportAsCSVWithMapping(controls, metadata, columnMappings, res) {
3722
3733
  }
3723
3734
  if (value === void 0 || value === null) return '""';
3724
3735
  if (fieldName === "mappings" && Array.isArray(value)) {
3725
- const mappingsStr = value.map((m) => {
3726
- const justification = m.description || m.justification || "";
3727
- const status = m.status || "Unknown";
3728
- return justification.trim() !== "" ? justification : `[${status}]`;
3729
- }).join("\n");
3736
+ const mappingsStr = value.map((m) => formatMappingEntry(m)).join("\n\n");
3730
3737
  return `"${mappingsStr.replace(/"/g, '""')}"`;
3731
3738
  }
3732
3739
  if (Array.isArray(value)) return `"${value.join("; ").replace(/"/g, '""')}"`;
@@ -3817,12 +3824,8 @@ async function exportAsExcelWithMapping(controls, metadata, columnMappings, res)
3817
3824
  if (isMappingColumn) {
3818
3825
  const mappingsValue = control["mappings"];
3819
3826
  if (Array.isArray(mappingsValue) && mappingsValue.length > 0) {
3820
- const mappingsStr = mappingsValue.map((m) => m.description || m.justification || "").filter((desc) => desc && desc.trim() !== "").join("\n");
3821
- if (mappingsStr.trim() !== "") {
3822
- value = mappingsStr;
3823
- } else {
3824
- value = control[fieldName];
3825
- }
3827
+ const mappingsStr = mappingsValue.map((m) => formatMappingEntry(m)).join("\n\n");
3828
+ value = mappingsStr;
3826
3829
  } else {
3827
3830
  value = control[fieldName];
3828
3831
  }
@@ -3830,11 +3833,7 @@ async function exportAsExcelWithMapping(controls, metadata, columnMappings, res)
3830
3833
  value = control[fieldName];
3831
3834
  }
3832
3835
  if (fieldName === "mappings" && Array.isArray(value)) {
3833
- const mappingsStr = value.map((m) => {
3834
- const justification = m.description || m.justification || "";
3835
- const status = m.status || "Unknown";
3836
- return justification.trim() !== "" ? justification : `[${status}]`;
3837
- }).join("\n");
3836
+ const mappingsStr = value.map((m) => formatMappingEntry(m)).join("\n\n");
3838
3837
  exportControl[displayName] = mappingsStr;
3839
3838
  } else if (Array.isArray(value)) {
3840
3839
  exportControl[displayName] = value.join("; ");
@@ -3970,7 +3969,8 @@ var init_spreadsheetRoutes = __esm({
3970
3969
  mappings: controlMappings.map((m) => ({
3971
3970
  uuid: m.uuid,
3972
3971
  status: m.status,
3973
- description: m.justification || ""
3972
+ description: m.justification || "",
3973
+ cci: m.cci || ""
3974
3974
  }))
3975
3975
  };
3976
3976
  });
@@ -4080,7 +4080,8 @@ var init_spreadsheetRoutes = __esm({
4080
4080
  mappings: controlMappings.map((m) => ({
4081
4081
  uuid: m.uuid,
4082
4082
  status: m.status,
4083
- description: m.justification || ""
4083
+ description: m.justification || "",
4084
+ cci: m.cci || ""
4084
4085
  }))
4085
4086
  };
4086
4087
  });
@@ -3151,6 +3151,7 @@ __export(spreadsheetRoutes_exports, {
3151
3151
  default: () => spreadsheetRoutes_default,
3152
3152
  detectValueType: () => detectValueType,
3153
3153
  extractFamilyFromControlId: () => extractFamilyFromControlId,
3154
+ formatMappingEntry: () => formatMappingEntry,
3154
3155
  parseCSV: () => parseCSV,
3155
3156
  parseUploadedFile: () => parseUploadedFile,
3156
3157
  processImportParameters: () => processImportParameters,
@@ -3631,6 +3632,16 @@ function extractFamilyFromControlId(controlId) {
3631
3632
  }
3632
3633
  return controlId.substring(0, 2).toUpperCase();
3633
3634
  }
3635
+ function formatMappingEntry(mapping) {
3636
+ const justification = mapping.description || mapping.justification || "";
3637
+ const status = mapping.status || "Unknown";
3638
+ const cci = mapping.cci || "";
3639
+ const finalJustification = justification.trim() !== "" ? justification : `[${status}]`;
3640
+ if (cci.trim() !== "") {
3641
+ return `CCI ${cci}: ${finalJustification}`;
3642
+ }
3643
+ return finalJustification;
3644
+ }
3634
3645
  function exportAsCSV(controls, metadata, mappingsColumn, res) {
3635
3646
  return exportAsCSVWithMapping(controls, metadata, { mappings: mappingsColumn }, res);
3636
3647
  }
@@ -3722,11 +3733,7 @@ function exportAsCSVWithMapping(controls, metadata, columnMappings, res) {
3722
3733
  }
3723
3734
  if (value === void 0 || value === null) return '""';
3724
3735
  if (fieldName === "mappings" && Array.isArray(value)) {
3725
- const mappingsStr = value.map((m) => {
3726
- const justification = m.description || m.justification || "";
3727
- const status = m.status || "Unknown";
3728
- return justification.trim() !== "" ? justification : `[${status}]`;
3729
- }).join("\n");
3736
+ const mappingsStr = value.map((m) => formatMappingEntry(m)).join("\n\n");
3730
3737
  return `"${mappingsStr.replace(/"/g, '""')}"`;
3731
3738
  }
3732
3739
  if (Array.isArray(value)) return `"${value.join("; ").replace(/"/g, '""')}"`;
@@ -3817,12 +3824,8 @@ async function exportAsExcelWithMapping(controls, metadata, columnMappings, res)
3817
3824
  if (isMappingColumn) {
3818
3825
  const mappingsValue = control["mappings"];
3819
3826
  if (Array.isArray(mappingsValue) && mappingsValue.length > 0) {
3820
- const mappingsStr = mappingsValue.map((m) => m.description || m.justification || "").filter((desc) => desc && desc.trim() !== "").join("\n");
3821
- if (mappingsStr.trim() !== "") {
3822
- value = mappingsStr;
3823
- } else {
3824
- value = control[fieldName];
3825
- }
3827
+ const mappingsStr = mappingsValue.map((m) => formatMappingEntry(m)).join("\n\n");
3828
+ value = mappingsStr;
3826
3829
  } else {
3827
3830
  value = control[fieldName];
3828
3831
  }
@@ -3830,11 +3833,7 @@ async function exportAsExcelWithMapping(controls, metadata, columnMappings, res)
3830
3833
  value = control[fieldName];
3831
3834
  }
3832
3835
  if (fieldName === "mappings" && Array.isArray(value)) {
3833
- const mappingsStr = value.map((m) => {
3834
- const justification = m.description || m.justification || "";
3835
- const status = m.status || "Unknown";
3836
- return justification.trim() !== "" ? justification : `[${status}]`;
3837
- }).join("\n");
3836
+ const mappingsStr = value.map((m) => formatMappingEntry(m)).join("\n\n");
3838
3837
  exportControl[displayName] = mappingsStr;
3839
3838
  } else if (Array.isArray(value)) {
3840
3839
  exportControl[displayName] = value.join("; ");
@@ -3970,7 +3969,8 @@ var init_spreadsheetRoutes = __esm({
3970
3969
  mappings: controlMappings.map((m) => ({
3971
3970
  uuid: m.uuid,
3972
3971
  status: m.status,
3973
- description: m.justification || ""
3972
+ description: m.justification || "",
3973
+ cci: m.cci || ""
3974
3974
  }))
3975
3975
  };
3976
3976
  });
@@ -4080,7 +4080,8 @@ var init_spreadsheetRoutes = __esm({
4080
4080
  mappings: controlMappings.map((m) => ({
4081
4081
  uuid: m.uuid,
4082
4082
  status: m.status,
4083
- description: m.justification || ""
4083
+ description: m.justification || "",
4084
+ cci: m.cci || ""
4084
4085
  }))
4085
4086
  };
4086
4087
  });
@@ -1384,7 +1384,8 @@ router.get("/export-controls", async (req, res) => {
1384
1384
  mappings: controlMappings.map((m) => ({
1385
1385
  uuid: m.uuid,
1386
1386
  status: m.status,
1387
- description: m.justification || ""
1387
+ description: m.justification || "",
1388
+ cci: m.cci || ""
1388
1389
  }))
1389
1390
  };
1390
1391
  });
@@ -1405,6 +1406,16 @@ router.get("/export-controls", async (req, res) => {
1405
1406
  res.status(500).json({ error: error.message });
1406
1407
  }
1407
1408
  });
1409
+ function formatMappingEntry(mapping) {
1410
+ const justification = mapping.description || mapping.justification || "";
1411
+ const status = mapping.status || "Unknown";
1412
+ const cci = mapping.cci || "";
1413
+ const finalJustification = justification.trim() !== "" ? justification : `[${status}]`;
1414
+ if (cci.trim() !== "") {
1415
+ return `CCI ${cci}: ${finalJustification}`;
1416
+ }
1417
+ return finalJustification;
1418
+ }
1408
1419
  function exportAsCSV(controls, metadata, mappingsColumn, res) {
1409
1420
  return exportAsCSVWithMapping(controls, metadata, { mappings: mappingsColumn }, res);
1410
1421
  }
@@ -1496,11 +1507,7 @@ function exportAsCSVWithMapping(controls, metadata, columnMappings, res) {
1496
1507
  }
1497
1508
  if (value === void 0 || value === null) return '""';
1498
1509
  if (fieldName === "mappings" && Array.isArray(value)) {
1499
- const mappingsStr = value.map((m) => {
1500
- const justification = m.description || m.justification || "";
1501
- const status = m.status || "Unknown";
1502
- return justification.trim() !== "" ? justification : `[${status}]`;
1503
- }).join("\n");
1510
+ const mappingsStr = value.map((m) => formatMappingEntry(m)).join("\n\n");
1504
1511
  return `"${mappingsStr.replace(/"/g, '""')}"`;
1505
1512
  }
1506
1513
  if (Array.isArray(value)) return `"${value.join("; ").replace(/"/g, '""')}"`;
@@ -1591,12 +1598,8 @@ async function exportAsExcelWithMapping(controls, metadata, columnMappings, res)
1591
1598
  if (isMappingColumn) {
1592
1599
  const mappingsValue = control["mappings"];
1593
1600
  if (Array.isArray(mappingsValue) && mappingsValue.length > 0) {
1594
- const mappingsStr = mappingsValue.map((m) => m.description || m.justification || "").filter((desc) => desc && desc.trim() !== "").join("\n");
1595
- if (mappingsStr.trim() !== "") {
1596
- value = mappingsStr;
1597
- } else {
1598
- value = control[fieldName];
1599
- }
1601
+ const mappingsStr = mappingsValue.map((m) => formatMappingEntry(m)).join("\n\n");
1602
+ value = mappingsStr;
1600
1603
  } else {
1601
1604
  value = control[fieldName];
1602
1605
  }
@@ -1604,11 +1607,7 @@ async function exportAsExcelWithMapping(controls, metadata, columnMappings, res)
1604
1607
  value = control[fieldName];
1605
1608
  }
1606
1609
  if (fieldName === "mappings" && Array.isArray(value)) {
1607
- const mappingsStr = value.map((m) => {
1608
- const justification = m.description || m.justification || "";
1609
- const status = m.status || "Unknown";
1610
- return justification.trim() !== "" ? justification : `[${status}]`;
1611
- }).join("\n");
1610
+ const mappingsStr = value.map((m) => formatMappingEntry(m)).join("\n\n");
1612
1611
  exportControl[displayName] = mappingsStr;
1613
1612
  } else if (Array.isArray(value)) {
1614
1613
  exportControl[displayName] = value.join("; ");
@@ -1743,7 +1742,8 @@ router.post("/export-csv", async (req, res) => {
1743
1742
  mappings: controlMappings.map((m) => ({
1744
1743
  uuid: m.uuid,
1745
1744
  status: m.status,
1746
- description: m.justification || ""
1745
+ description: m.justification || "",
1746
+ cci: m.cci || ""
1747
1747
  }))
1748
1748
  };
1749
1749
  });
@@ -1903,6 +1903,7 @@ export {
1903
1903
  spreadsheetRoutes_default as default,
1904
1904
  detectValueType,
1905
1905
  extractFamilyFromControlId,
1906
+ formatMappingEntry,
1906
1907
  parseCSV,
1907
1908
  parseUploadedFile,
1908
1909
  processImportParameters,