From d6d7b03d09fa359d8e1168bd030e98a2cfc02704 Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Tue, 19 May 2026 00:31:34 +0200 Subject: [PATCH] chore: auto-commit (5 archivos) - app.md - appicon.ico - extract_panel.cpp - main.cpp - views.cpp Co-Authored-By: Claude Opus 4.7 (1M context) --- app.md | 24 +++++++++++------------- appicon.ico | Bin 18030 -> 18848 bytes extract_panel.cpp | 2 ++ main.cpp | 1 + views.cpp | 4 ++++ 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/app.md b/app.md index 3292462..9dde777 100644 --- a/app.md +++ b/app.md @@ -2,6 +2,7 @@ name: graph_explorer lang: cpp domain: viz +version: 0.1.0 description: "Visor de grafos GPU-accelerated agnostico del backend. Lee operations.db de cualquier app del registry y permite explorar entidades/relaciones con shapes/iconos/layouts/filtros." tags: [imgui, graph, osint, visualization, gpu] uses_functions: @@ -17,19 +18,6 @@ uses_functions: - graph_icons_cpp_viz - graph_sources_cpp_viz - graph_types_cpp_viz - # data_table stack — issue 0081-J: panel Table migrado a data_table::render - - data_table_cpp_viz - - viz_render_cpp_viz - - compute_stage_cpp_core - - compute_pipeline_cpp_core - - tql_emit_cpp_core - - tql_apply_cpp_core - - lua_engine_cpp_core - - join_tables_cpp_core - - auto_detect_type_cpp_core - - compute_column_stats_cpp_core - - llm_anthropic_cpp_core - - tql_to_sql_cpp_core # core - graph_spatial_hash_cpp_core - button_cpp_core @@ -168,3 +156,13 @@ Recetas validadas en notebooks 04-08 del analysis y vaultadas en `vaults/osint_n Issues que desbloquea: `issues/0041-split-confidence-thresholds.md` y `issues/0042-gliner2-unified-extractor.md`. El registry tiene todas las funciones necesarias; solo falta cablearlas en `extract_graph_hybrid_py_pipelines` y el panel `paste_extract`. Playground de referencia: `projects/osint_graph/analysis/gliner_glirel_tuning/playground/` (FastAPI + Sigma.js, sirviendo en `localhost:7878`). + + +## Capability growth log + +Una linea por bump SemVer. Bump-type segun `.claude/commands/version.md`: +- `major`: breaking observable (CLI args, schema BBDD propia, formato wire). +- `minor`: feature aditiva (nuevo panel, endpoint, opcion). +- `patch`: bugfix sin cambio observable. + +- v0.1.0 (2026-05-18) — baseline. diff --git a/appicon.ico b/appicon.ico index cb5fcef053e2b69c9376cef8c389fdc60adf7fd9..a162d5adc6460e1263abb9549f0c4ed828128e24 100644 GIT binary patch literal 18848 zcmbrkWl&tf+BLcd5AN>n?rwpg!Gi_Y;1Jv`xCM8&;O_1oAh^4`2fLGV-uvg)t?&Ku zP1V#)cW>){WUXiQ1^^HM3!tI`;14Mf1p)vU@IPGK|F&fz000vFB_;iDy9g2h6rccr zmG!@EbQl1*fdv3j(f_tZ-~a#`836qJ{@b1gUsn?Q-~WFfQXqmH0I+BPAWTV78VMdB z9^8o}^GQ+#{QK_-P~pJW14wS(4FLe8CL<}P=9W?MbB#g50e48G%lM|YoGOy4Me}T* zc4DB&L2RAbzCF=*N4NPJCzhZkKS4LV=+jTk@Suo+1X@Mr{`z31%zfS=tUYJEjj`f` z=cAiH6u|Wm4pVJtCB3+bj!)EW@^!MGcw1C8xwplZkT{rBljUw^nR5O0S|9gk z4uhhOq3%zd847AP?VS%`rA7&*Rg z_k~L?!9Go(Yxbg=R>1ZhtGio|4EbH7Nit7)r*y1B|Z5{Z6*CS zbkd`}&WruC6L^^cnU9K+mEr~g|3Aj~XMWuO7-Q2_=n()Q(Ee+TwWJO!Rb||e?1z2G zkGV{@+~L##Nc8?L4oSC*A|!I({Wf>i#KiC?l(voNVSe#`LP#rt zrVCRfBauz}rA!g_BV9M-C;BH!1sTE@g#*ILC!q^Zy~z-zT%@KK7=_vtg#@FRcGh!^G%zR6mIqVb=l-(O%AsPSVftH(9qi^O z-!3j6ZLE*b`Njs{KHNc8p0CO1u{aucVL*ny4YLX5u{|-v`;q(V>tIwb8SVE}NA$TQ zqNHX6gtrrMd@Mtt;Wlai|5ozz9VF=#HQ>7r)Zn#8>8YNX&4m zUj16iI(O=QiWJGiCf7d$CI2qJZ{0+#OA-Abe1e9ud7Zt==;FV0<+&co&X9)KC8DhC=mRH)WC+W zQZrrjJDAz}BLZ;bG;JARDqpjccGn6TlmV2Un(P)niebblq?@kc$# z#Na%0|511M%wvjt@@X@rA{Lr&P$$_ARgUt*z_yo4o82s6NyAE#G+kC#jeiR)D!}ab zO)EeaWOg_8&DN`}H2eIDhRua*yS~kMo4b-+lN&HwMmZlSQJ>{FF50;l+8&wHQCR-K zILvn3**2Q`MpilLhUN#dyNttcTk8HygB(|-%(0Ddb+qLutY@4)e}@URORLX&P6iLb zf|Gvab>E@)*c4L_O1N49ZCkEp5#8dMUe42eLXZzYx3pXVwa_ z2vy6HuJx}%D~s?i<3=tJ1QB(h*0(IpUiC!+8-M&u$Tb$bY6U}rg$L^moJd7Mol(XJ1(DW{! zynJkemdPmqA!A$ZUoOTx1dlUZJ=0%n3iMHp9JVn$b3_B7g=5MbHfxb6yZz>rR zcaP-C;ZDx&-g`yle%oY>9D6gfnsTM}?Z=aC@fmLuGUB;S1kT^qYjj2yemyyylGwVx z5WoVzO~U?YUZ?2%#JdT>q*)1_KZSG@?9sQ~NFu1RSn2wZ4G~%@5}v97c5c)!Fe`@0 zbULvzp=wpWpju)vH!}j}s{bWQ|G_!yf1>mY#8U_u!BV2@XZ@rj+jTVjcesNm%fuEQ9V~P=@@N0JB=9`HKH{IPmE8(|h)T_axuc3OtnP_}{N8 zIW?VrP6H5IKKGuHuTgGxx7g(OFTXcN`Z@>)L?K`Cgj&KokRYL(_##l!7dOZd`{ypg zKwXfZp>DZ$xA>Jp$uG>P>)cM^exQWs_AZYO&T^fWHb@3+NT4MFsiaE0A|ZTX9$g9~ z1PWOWaAhdj<~v7e)gOcr4TZ$zh6qyQONt9;Cu$-0OmHx3ipt^rri!D@3$*djexitL zLhQ$I1DB>pR6ectQ8!K6PrHZE$bZ&E$->9wWJBRbV96Lk$Fv(5ZfjfZV|o{dfM{WC z@QyHT5LHh52y*xJEv3<(a4mI3cyN(n=M}*{>yZ$lq55{*H!7N>Nl}c#?wRxLyg9LG zu?Q9B{N|p~(_SM8KAsXI&8#fReI=xd%&({Aw!05wNT34|bP&)2L!^^EMy`c%(&SDR z=AeV(SkbW4xiKr^F8!O2LXUdKxw_*&^uVrFnfrCSn--mJ| ztK-@Y`c^VzNP4(Lgg|AlhMl_KyCHgT|6wURXxZcGzytcPZFBa z%4ms`1JcjfjKLI}06f!wliimuD4bOg=jkB~#Lm~2@qXabN?<4SljD~D#704HFv3g0 z#vTVggXG1N_(PaY;(}IkvQ)HKhzfJx%z5wh(I7bQw7c;KCllZnYW&>zirGb1btV7` zbLf;;GpiwUrjh&*rV>b@x#Nv++J#D_8R`MzQ4 z%ogQcw`~MY9Wm7dNl(UT{T>~8ZUbIh^mj!+;tpzOcBYJOLPoew#c7#U@7~qVJoT-6 z+4if2QrMrc)orbhkDs6c=9uJm{g}&bl0x~XCsducG6_tmcSR}P?q8>Dp#k0VH(y4W zX^plfcgE=%i^fhqQp0C_tA*a9;nG8TgkNh(X97NTKO7tbpCV#BIU#03{u0^=>zvrR zf7Z56;9f=*hg&_pCHhm)tckgud1>q%c#e;PErw9twhB-VmA-Jd&^}&t+)r*oB&Sq> zZAUpcP|GBeF1UlbE>ASDjAseFXw0E6jfweq=m&#exDhWPnTJ-r#-52`3p3*i#QW#A3#auP;i>ob zgO-jqh(OUh+ZuD$r*{NvPi}a~k-u2-n0?QABINy@kQj4rha21uB?#2`f0t>IDN}|o z8`Mt)Shao|*JY!mSff(!%svbhY=Bgug0%gWjKlqu7*M~-dqDICy5I07{!Dh_&`Qtp zQzR0TOU}eVL2UQUhlyW98!rrr%Gm?S-POFD={!-EP`sE#VH0c!s|-2^^5M$Gz=^p- zXN9U<#URO*fCF$(WyB4m>);>X!=OP$>Qo}l^d7z-ev8x4m=z~rp#nJv*AlvtnPUi;*cDy75?&zACUtIHnqmt$_&<#{3Y zTKvBD%e#tI2_fHp#g zokjlT;4?4^esKc>AMyS z=F~L~MZyL|f!YYSIb%oLVr_{r3?$cMg-eHjWE;(j9j8os_U@IyGfoYWBD8H1q>)Em z{Fw>SZJZw1+lOO$BNg>6K3F>QE8&tF(A~&a>ZQGg8*95GE{f8c!HlfVbvYA&NZu>y zQzs~$BxKQats=vBaI6FRG%tyopYVsF!YVH6LM+UcQL&IxfSKMPb1=~ltCYV}gr`DZ zOG=(nI*Y-;$pLRGuRFp?#Z)U{MqeSAHV-j=ebY8OlS3tv00ghR8#vceJA*^8LfcAX zvofLO0e|a2+b0=q%Y2#MMz0{P_cN(%g4*5M)fPq>UgniSfx3&YZ=e~i8a(C^nE=wW zu-GX+u-y?0M?N4}c6&Z*!93jYm^gB5RSF5oMg6EK*cFLlH?LycczH*&{ZzRi(kw)L zuOSGhS>-@s(0N{_q@lJ(OMvndZD3A;9fX6w>~~t291!tADE=?3;8o+3>CPFQouXS!QN&)y>emT9jJDXsX@FN=tnJ5t>f z^DY^-C|h}={=(5s*;#VR&KMBrWO6@^_pEMy)+fw2Y^IB(wGm~Mb49l3?KpC$@GZ9qmFY_^PV<^u!@QfmNvp&4;G)H%7jCEHg%y01HmY9c)3Gb4 zZ3uKum3e7ljTydV1uF66t(lp3Y9@L{kN7*WSrP}EBF`MB>m6I8A*c37g0u*kb%|p# zu>R(ani$R&C%4!&LX|(4z`@}_`?Lv$B;%Onp?bn5Op!FGi8XhW{Vc+a5_ zB9=~nL&n~ZyV$`IbqobB>mQ2-LYZIk*h$1MP5KGA%u-k|50!euSpyuek+5#`RC?TR zqI(jZP6gJQgOGn*zt{Zz4c%#dk}&jk{ZYu0B+KOf4Sk=4mtyEmOB+cfBbm4w34~G2 z%n^3se&d`zHgUncVJb0ArT6*;8Yz?esTG_jPwD9%PCg()gGSr~c1c_klV;bM&@^po zt6v}0`DDu9*BKRYNo$A{(%}mv60?q3MEH_2g)dsfG2P7vyp|p^u6`21K~U%P z(%#(~sl)4~WX{NOtCkt6YeN9w>1ek>oV>s1o>sm*b(mvcE+yGrUe!gkv=~$Abj;P4_5Kh2{Q(sq53z&m}-G zwP0_AvVyUR|LZBQPZV{8jh_Hwl=2>kq(ZB|G2;(tZx4oJ>gCm|o2?c0gd^Tf$QRpP zMjK4__8pz_ic)!4*0v%VbEmLi`bsczd6Fi!=00+~IQr*#Mx8QuuoZ~}{if{=Ri(3R zTt0G%>O>D>lMTMZ$FiEmn6@GZyDT`{-^&`kC9~bhP5%e%&``fYi$~Exh*yY~uzeIQ z!Gh!J?|D<>oi<#lQ%+e1u|Dd{(a?KXV?QIy!#pn2gHg2P&?+AcpTm^5<|{daiV3m~ z)ggcN^BkcfNFyQo{ulb-2OjtP4}ItpHXH*hyD9%eA2Qw5)V^d5byZ=P(BEeo=|ibu zikU`)OJNvG$4%PuA1TrhaU6W-oXj|%l=ql98ey|J?bl=HGfO>JoRN9xPYDZ8E2+tM z2n+BFAUD*P%vq#M%Jcj6u#W;!(f%C%MG2v5{rScHWNk?3rPK9!ZR0{1o?G;8&~Om@ zBCZ;FCwk(K^#;l&0I$VMJ}1FI$&e@U{p zTNzk#ZW4khciNDXtYt9$OuQBX$BNqL0rW})IY8yY_3Nj`M1=>xAS<@H!5K_aM`~!& zJD)52vWh}9(cNL7^dTbdL%JM=-*6lhsUxlBBM#3D9H}EED3nkJAeTn}Z~y?uS~>8dZu|If3nf^?iY|OE zJ9+TS6ZR@(%=xh-56?{M+T-)bSaVRzRj!-)8v0||s@nqH%-y#15KDf|hQUzM2b7)) zkWVWmcDA*A)951*OMDzs7gH`No70r3O)U>a<@b!yTWx-qhgZxATe=pPo&2F9WVGlE zojm|eG^H5cu1d#f`caA_3b_wXp7Ws``#86^&9!j3-CO)4YecucDRs|E)at5n)Y+n{ zZbWaRUJ4!zelQ_{k;J8n2KvtzL9M9`BBG#+fuK!IS zh{WdiODbK9vsB$Z0(mpS63YQ1lI(%7B4ncub5-NBc|9^RIFNNXQgC|4+MmD%n@1aE zBy*v_kw_9^hMoz3!+AR^a>y+!!)ID-C^A3!3X+-^o?!Lac_Lh{ttf`Oa!0<8WE2T6 zdTij!^#8TcG_{eC(!C(wRDUlc$ZX$W;D#atP=Yhm=eYz&+kA#D;c9dx+^QB)g8-O8 z`SM!SD1nQ=+DPsjBA@=-`|bIMrfCnpDlTE1u@7*T6bvQ!sf@@Z<5(-w97GdD_(EMgJtFKW9 z5A(uOMTfXJ>rfBq8&86;4-LfJd?v)t;VP@Xq^Ss--}Kx|+Pp{|Il+?wH45rw1Y(KO5pwT#8&# zs5v0{3Pj4a2&*q_534tsC33UUY7>+L-d4(1Yxs94C&tV3?A7_4)Sr_jozbOgPjz;^ zQQ2+XP)9M4o3Iebu2R9_7aSCLABlHiCaS(Gb5IV4ewyE6_v=M!0`71HX9AT^EiL{O zT4Tz5r|~o61{(oX0}LryJ}o1{)klv|7Nd5q-?V#&#KZ#+MiSL2sBd?NI0L+DE8Hht z1m~sVM<^FT#Xkx2b4ZB#meSV_StCh5okgo}fi6|!K9fY5;g7xDH%v&=2*Xj61|g&w zDixfV@;NiR9@g0HIL_Zp6%H&(0#n5_s8M!ixTo~xgCr~qYx`|VBc^WLT*xe@R5j6! z>W+9msd1sjpY>9m+sZ%2ssbd@^C!PW?eEO2UTXyVT{SM|X?NW?!-#Tv0k`9RtkYJt z2}fPL2~M9cDiK4`iGI{U#Uin|W^C5ao4w<#Ze``5ssqY8A5S3~yf6H>_VHt^ z--@Oe?Ye{KiFMC^V?=Qzf@cx0Sgf<8KNs*i$Ao=CT(Pj#al&(Xn|HV}3Vx`0DVXgX zBq@89I^T^B00q#`yt)9h05q^OE&5E)^f0Uwc0X@0b^MXmjWeX#FT)R0Ly-gVg0nvS z9E2EEGsT^OR(U=Hp^1YPG=w9m{ngID3rA6?9>R(oBCIQ3FwX3Ue^_x~I4E?A-XxkQ zWDNeF^E~qu_DS&7m5_Wcgvj16`Wy{qm_;wxMv1L2)C}>NO1dWN%cx1{-PPvZIXF@s zdKL!IT1-CcIwEZ{CvOFMCTSx+<>A2u8k@P%?`7x-g0Did(MEXo1I@(pwdn5NMh1SU zQf_Xx@glCk-pJh@rwdnFXZt6F8#UFB6jTTxQ7G^+XB&pO;jY($TcRSCg5nR#XKHD( zI3=3(1<0$;7mxccrih{9Ii?aaNmd2ay~05Rys&adnC>Gp$ID+r4lQ(|Qp$^2vMv=q z>%XHbXsR|(Czx?3b|R_`{88Ru zE0I^FsxNF1xgH4*4VP)N zBT{oj1_6JZnAR3`=IvLmZmLHj+h4>pTKMYLbr$C%qC((VH~Tl$k}-gz>{5;4oS!#0 zuojq(C2%X!Dvt21KBsL*N+7*X%`n3N`%jT6mM@JZFefOwqD@$Miuc`nMZipIYh+$* z>D|tpDu?)MC>lQ!cB2b*TF-eNzL(N;WJN^2!+SgH_=C9}oz?RX`|3ulcc+T5l$ujS z@Y3L{437|l4ZM{;PaJWsT`2#f7%qepxKtqEt{p5c+WC*OZPf zL5%@MgpBnSndVhYrScQ1b*QAngD`zFO2@w|iR^fKRYWalB+Z<+Q~=v zva7nin+)O}D---3q20lcF3I{pr%sI4w-=ThycQMuo5`wyVzG1Eu;KK2*uCBe4$3O9Weuh&ai z>n+~tbWufRxEnRHdFennmIj5sX`8T3R}h$doNlBM-$geI8?Ou;RCjiDmg3DL-!d2eE=N#8x1hJ8fuo8fCt5>tcg@Ds|jM ztP0dCq&_?~Chq8mbL9%t?VDBAtz(L`*vbpDGP{lXk(V|t=c+BGTf`R!qnVi=&bPyy z4uX-g0K4&S8+ItXhM64>JV82B3h z(f5)M4c>vx^K(a1WG2(@|-bf;TZLUMhD}Dcxa|KdmcBjJySN5|nZC z@&25I*vC=O^Ulacy?3~_3@BY2&bsOPH-MLUYiNiC<3iXT(@7j)=!2|g;=(@34-9)B zepAM{K3TrpPxR0|IhIzG1n%wR4R`=LXwK_s^M+9^_JC}mN z&L5#XeBWOR0jJVte6ftVI~a29k!6Pa&zutSaH}71q#;C4a?mzJbVIGazBXFZ1DjXS zagP@QI8!A}I!1O{kUl;|t3?;P5wlR$-5UrYH|%JJhKh|zcAhY?$@;wc(}iEpDK4Npc?2rCw9eA*c3;V#zVrB>qz?M}PBLlDkp z^yGL~QAmqvz3L596{38r8AxmpA>u)7JsD`9(VTmcZun{iJm97pPz!=+RA&j>D~3!5r{=JAo3w`l=;v={anK< zrbx4TLSNR`Vm6Zh)Q*~B1~(}0N@99$D@mh5+k2eIEGE9`o(e-RIt`^YB>AsIPpggd7gxz}Z8Zkj!&`znj(Z27%Y^ z+2S`rZ2ITU6>}St9QB34(Ghe35leXb4NfJ%{&QW3eVSpczMLMX!X6-feCs7r z%dn{T9e0t>3mz|cSJdY$^x=*)OY#`;dhkf-dEq&~)7)J2@kURDSCW^@N%I&&;&+^1+ZRE>#5Q^jl^RFI> zuq{SkKPj>y0avD;o1+{1+ER=O$UbmpG5o5AYCc#SX4W4^;MQJ4WXy@QmoU7_B(ufq zoIkrQ{8vAD(Ab;vxeo;l)y1pN`U^Zknb7KPrUMY$7Y@S2kI9%mGDTesr43_SSR{n} z(BF|_9Q6Wj&(})bglJNo37Y4PUm|j=94W0kzX*HJ6n8v&%P`%mUv&kB_Q!b;xnRq` z-*I?uUH0X;cM{Y3SR)-coZ~9w*Gt5>^uhHC&3*cCy&qY80_KE!`LmM6;rX$un0jL} zgP)T%-^oT%7}9E9Z`F$jAOJ;vq}3#R>GrNEe2X7F64DWu(9+0$`AfJ20Sk^l!?Gqz zIZ+UIf^V?;gA4K2K_)u~S6$C@&}=yFUiT-k0pl(YmBB`)kv zP|C6M#<+Ex(p_&r(%$Mwrtx`4G#3vhJ*2tKdfP?6dy!)KS7}K z{RAYVDS^2ErO9!=D9FQ79bYXlNR&=z3H9Ie5OGQ1GuBW)46z$J{p*W|h?N5UzjgE~ zHDHNp?_IQwHxuh}?|}<+v}SODJ~B4!MCC2t%m4V@NY4te zc;*DVzh3?4idfz@qy?vM#wB$a+p9|Uk2tEuG$wA* z$dDo4c+Otp%}#2li?4DeI~Ybnp0NIFwu(gAsBeo5aBf|6;NjDd3)0wYcaGziphcVw z@5p4%-007tJ6Bhn1~(XhvyXU2U`(gEDxh>g)8Ar!7N`OHuTwXW$$R=2kTdx?)T*ZO zGy8u#41_OjO}I3XWE1R46|0>sw;v-GqX_*x0cQA@PI#0AJC|oy^|LTyMs^- z@z{XF1@Ks#ItelNe@-QqIv%@)7Yz+X!UJwkK8JeZReqku0LaK)RDs`BB4p>5C7lYN zfuPXE7zjU~*AEVMJogSB5Tug*mC(TJUkq~Og$L*Vv}pl2G&VZXnD?O234`on8bDk! z62cD^Egt|M{GY)ONB}yy-YpdPZpr{Exe+G#vbfOTdr5)*Z@S!h+dw83{<6@$9YR}l z1j81ABLUb^$O^CgG)HioMh7buf#NPq4iCUyC5=@Z>cPxYOY!YKBmb%2>=Amhm^~!A_LfYs z!2b;rSIb&-T|f+R_5o6G2m&%1IMAx@T^3!@w{n5%I@Cm(`*kiNt=w-RzOL=d1kVfd zLz=$uAa+i8K;Sygb8{t8HJ0#jr=DBVjiJVPPA$mYoxcL9-&q-0oEE_`A)o!w^}-W= zbJJTyg|S7J$lFHOKcECGj!=|3G&{)$)ulU3+zyMr*gEFbrHknzLi-T~c`{s$j$gH} zju~)EjLph+nNvrL$;PsnFn1m_G}OYKTH_<4G_!h65 z3_`ZuD9=xiJ>jF2_7|GbhTbRvmlo3{N<~v$UcV4=R+fC9?EYA>ZXdvgceAI|#nx2x z3n_yS@h~Ahm}<26zNn-&vf@foWjC~bY&Myljg1DUjV%ejVP1kv9AUS2wD;_QwnbzU z@uhK1O+ng?`K!=g=*`Xc-E-I__*RsYQxTT8zBoJGL^!a&bW%nGseV(FP3HrfGQ2xp zUdm297dD4HX-e}W-mI*v>1Gi9(GY$#ornzYU|;-xgydo=Ey42etH%faS&fRkR}9pR zk<=hUEs%6<)WU-VfesI3RU;lg4V$)OL3SvkN>udtWWkdC=hg)+*`8-YrIG;!z*|Jn zCn|JGXvgd@i(CmQNpQNLQD1wN&(0>o822Qom6(%nL)BW5UqyiiKDT~{De`!EpdPwh zhe`5=^N3GHMkm7ry!h7^d!Fi!$b2-}`6HVyqAxYJdlED!vstW<0-~caF@)d&Vj_dp zwCCg%l`V>cV(KxSy4lS=vYnSFNUqbB(6HxRU~_shoEmpxwRlUatfSh&5ZeTOg?cw@ zQn5Qc$iB#`QQxxqNFdBJ2iR10>O%I!<=zGUjd<15BFHinL;EIX`X%F?pkOz-R?!VV$QP}0{fg+XdRXX zV^>oQ1y5xEEa0?Xhgsshb>*~ncLARXpNQISw5IeeCqD||cEFA%YT&Ce1!?j!x9(it zw4sC{6*s1Oo{rsaX>hMJ$Uu6;UzoSuh5C=;x=R^PYR&g&8NxCvr*8ty*AEFhg?Kxc zO0wk>ss%jXW)H7k!c@F8RVLIVroT=z`Vl2IK5U;8nY*#P4)mJTY)*Rz2OPcJ7)dDE zZ&(Ya;SYHp!1|FULR^e13_X+;Q!IZOczzB30nt4fJ>Ot>*Hk>c6Evh4xD*-kfN5Z* zmD$&|g5Q&o(X0D)1i$Gc>{fs43Tt3)Y?(kFVDH!0P?6HbgfoY{?(I6|>i#GW zWa`t$ZB{wWT=mwQd^)=<6Ui`0gb=vM_)#c$K7tB6p(;B){~gDncG_Q44Z$hb-H@17 z$P1R?`ms-44TF!KJ9Apr1Z6?d^Ppzj2Jz?w1O5K84m7Yo0H66N(R1X?CCj8jG%AR* z*V+6_OAZqzq;+i{HpVyxw-zu4HN895O{9FBXk=GBr;Fw!sN+b%*jcXR8`-ecjZrrc zu%zSU@FTZ5B32oI`whmM?Kg*2xo~fv8tj;JhHB%8Mad^xKfuIiUpt0n$y9C%~$ed1eU+D$> zTW$y@u-m_1qt^-xL`G4~Q4p6qw$!1#JKqYj3kwCkYN!dPVPW-u|6TTTwW)`iRf9kz3+Il-1}fC*YI%~{iT}nb?;(qofd!! zzoXln{=-{R?nb!3Qu}CMG_z+G0sU|$Jf>@T^!LQqsQ?PR`lH|1u7lu;T;Q>w{Y1er z79>ZsiUNV8LTAq+v1IS5g*K(pc3JVlu&8diA~T8&d?sd;vJ`meVkwjlhjyqG2p+|G zh~eci1zjqNLBDbHWZrPSb6GO(5B?w>l@0@YANnT)f9MK)p<~a6=0DRBbqblh8XG^5 znchQ^Wr0=ViC58tAHqy}!s>%#u2u?Wg7K;WL}f*eoo0&i)e>K9`5~eG{A}ne21tsj zC_W8T$ST!WeH-5ExjH8KoDQZkyYmgkV};t*Ol8tl{@GFTAKun8R^WjPEcGi7pRKnv zY)o!fGL8hDvjLf{Q`5DeA7HDLZ&>ugQq8q*e4&opY&;~jPD%E^4msFCQH^&iwPcOn zS``OemWJztx3XkF!pvO>%Nm#f#KXfj{o$GBvFsV$&;>P3-fmAzv#)NXf-|x)9yg7; z>%)ra!|t^9xigxesS23AT(84?5eJdlM|o?9SU(|Y&|OYJr!F>n)y@UWK;jXxvwUBT-=e=vqB{3<`x1 z%^8G!GCKHG%AJj2P$60fu~CsWdL%=tRN5^;SED(uj!~Zpt4!E7mt?n-L_#1e3m|Qc4X?iu*YnxKRAyuZ1>f8SW}uw!}dvxa(ktq@4_aA zL_P%k!oZ!>sx~lS3J}N#P;o!_MIqFo9vtkQ76G`L5|=SgshVv!hyiNwC&{ z*+5%XpacwbMKju7U-e=p(TWycg!VLrxY1AI^DF2J3{fs7$GYn$_$(HVZCa=Dnw11I zMm5|YJqdWoK7b}5;DV}pA!E!VjXEoHS`Z%2NBg7?%A`+UfZwGYn|(jOt+p|sd}OM; zdL%e0>uubN-?ZwRUoBVS64uI?;QXuqdvz~%bYfBpM2c#Kk)N`#b5Uj4qZ%@mtCeru zT3MB2Uj=w7p#93Jr3OvW6zeR|nf zY(q$b3T?i4PL$m`J|_$DZVf!bdI?c1Nwp$EoOdVH zrS2C>g$?ggAblqcnzeb^2l?$6nlDAJ~0~r{kUfwex@p?62 z;VgSrX13vORY;nJ;zvk_7~0BL&j~#Fco#rjXemp{hgzU20cKJ#Y;#i^YT9FRV00Yx zVd74n-$ok*)$6dmRWmN8SxPh%6QV@N3@A7%ygFzf6ReLG0pm=}1%na2ApQ4SC{jQMwCcLP z$Kx8U$-aVrrY!`o)5;o077BwmflXLxGw>z(oc^UHX<1I3b|+DSg_}wTk(=th72a!3W4=BOrezI=tP`wIp;w-mqxg%=+ri z>-8WXS+m7SA`E5M>l$yN~3ytTf zAP7;Q^4{L}T@m5BPL5zEpk*VuutQ?Wu@t%Voj-J8D(S|B8U%n#(5+mdr<67>9GsOi z4o!MaP6Y52r2R}oN^>=a-8114FV#pnf;?YEk|>&g%ocKNKD6LmCAT{Yrl3bW4-Jq~ zg`VkxJ<9f7RDnTQSU)fmD=N=tl>{Ez56G}N-hI((Q44QFr??`EiD|Mzr%2T}t*L*| z;CF^;&-8`1JJ9dJ^|c$1K_Hgq+64{O053 z_kFr}J%PJsIdkB(vo4nn03H6pOW{vU4ndsytnecwan2it&P3(KP@8>L>K`>YoEND4 zSvhGURXpjZc>JP~3!sKFB`+2Yu}jQ7?$lG3$$57%ohM7)ls`3wi!5C3Fv4F7v=7j-XyTpsF*62=D245P5`S4*E#_dx%kVXKoNP=-* z(f`IZTl0Hh@_k3btOS2(VWRhC5!IY0_{9$f^mVvdRNt%45nlBJD;c{MqubRkRlCbR z`^|9&n2N;vE+VjwP9gNrLwjMer;LjhE5?{b5$_Ro(0)6T5_6(aCBtCL>j0RIq)bQ~ znbRWys+AAi(T!!b9}cwJuEzV>G*IM6DbfGgC%*UP>TtbR=Ug}PO5G4F5}Xra_}`*( z9dN;D$Ky$V)2XQ_C)WR3DczM$a%Y3&0bvg+8s~Ke&;&ozpwxt9XGz z{!m>D&gD^XS+&7t^+XJ|>B`I3FZ|E;QSC$DsX7vTr;bzU80gH6m_ee;-}&$H4!Q$HZNV4aVU9zB(@) zXY;anMOdu0*wIpRSFNBC3*SSob<=${k8sOXHs?}zYJ~aH9*(A%J3#LjCV1-%zY3NC zu)**@_$8Z14}pol#)gC)`_9#Cu!Jq!0p6c-g>Wi# zl~_Z6(#I|44s+{_Vr9tUx3h0JQty{GN_6b{TQ4T<`FnUI_rg+@{Zml)V+sHguyf{g z+Ukoot^1|fB8~EUI<(e64jnJ2lEjn9h7AzZ&02dzIn*m=f=*obTE^*yCq+T5kq-Wy zDI_=nT5)2ZknSbQvyY1&ln`KkEhW`E@2E+@-Y?W|TC38GQwVB8ji~>-EWCaz(;2IvBva zHGT&!5Xv_aLx`}VCT+v}lmXx}Y3%a*J?;xTLsqgshrwp@-VOqn+mjkz+Ou=}_|?ID zlQFmuVD9Qu1Xq78bYYJdGRDw#A-Q0h`(o2VYjN)AqDm-x3$h<7QF^ga;BOz`yyz}Ig6&x^S8AfgmN*0^QSjyAiwu=D~~b#Z8chLZ7qf_-O)`%cP=rE8`xE$ z)63){{%jKI^0bY0fvvvX#CIS~sAI35Kc~0YZbHtEI~p!9+r_Lqu=9+NxrP{mW(t&m zS5b=_t*(OBeeV-CFh$(v*K}P4mhZTg-G?vlGdNd8n13{R-XBKsf?sopun__~09fDq zSDu|J`I-d(s?g�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 literal 18030 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 ARsaA1 diff --git a/extract_panel.cpp b/extract_panel.cpp index 96b3038..d17d86b 100644 --- a/extract_panel.cpp +++ b/extract_panel.cpp @@ -978,6 +978,7 @@ void extract_panel_render(AppState& app) { // Tabla de entidades. if (!res->entities.empty() && ImGui::CollapsingHeader("Entities", ImGuiTreeNodeFlags_DefaultOpen)) { + // LAYOUT-TABLE — form editor con InputText/Checkbox editables inline; keep BeginTable inline. if (ImGui::BeginTable("##ents", 5, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg | ImGuiTableFlags_ScrollY, @@ -1024,6 +1025,7 @@ void extract_panel_render(AppState& app) { // Tabla de relaciones. if (!res->relations.empty() && ImGui::CollapsingHeader("Relations", ImGuiTreeNodeFlags_DefaultOpen)) { + // LAYOUT-TABLE — form editor con Checkbox por fila; keep BeginTable inline. if (ImGui::BeginTable("##rels", 5, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg | ImGuiTableFlags_ScrollY, diff --git a/main.cpp b/main.cpp index 5a6c45e..e1723d3 100644 --- a/main.cpp +++ b/main.cpp @@ -1124,6 +1124,7 @@ static void render_enricher_config_window() { g_app.enr_modal_param_bufs.resize(spec->params.size()); } + // LAYOUT-TABLE — KPI/form/splitter, no data; keep BeginTable inline. if (ImGui::BeginTable("##enr_params", 2, ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_NoBordersInBody)) { diff --git a/views.cpp b/views.cpp index b1a0b0a..9fa5094 100644 --- a/views.cpp +++ b/views.cpp @@ -882,6 +882,7 @@ void views_inspector(AppState& app) { ImGui::TextUnformatted("Identity"); ImGui::Separator(); + // LAYOUT-TABLE — KPI/form/splitter, no data; keep BeginTable inline. if (ImGui::BeginTable("##insp_id", 2, ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_NoBordersInBody)) { @@ -955,6 +956,7 @@ void views_inspector(AppState& app) { const EntitySpec* spec = find_entity_spec(app.parsed_types, app.insp_type_buf); + // LAYOUT-TABLE — KPI/form/splitter, no data; keep BeginTable inline. if (ImGui::BeginTable("##insp_fields", 2, ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_NoBordersInBody)) { @@ -1851,6 +1853,8 @@ void views_node_groups_window(AppState& app) { ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg | ImGuiTableFlags_ScrollY | ImGuiTableFlags_Resizable | ImGuiTableFlags_SizingStretchProp; + // LAYOUT-TABLE — interactividad app-específica: Selectable+click/dblclick diferenciado, + // PopupContextItem con promote/demote/focus, paginación manual. No migrable a data_table::render. if (col_count > 0 && ImGui::BeginTable("##te_rows", col_count, tflags, ImVec2(0, -ImGui::GetFrameHeightWithSpacing()))) { ImGui::TableSetupScrollFreeze(0, 1);