@infuro/cms-core 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/admin.js CHANGED
@@ -333,7 +333,7 @@ var AdminConfigContext = createContext(defaultValue);
333
333
  var INFURO_FAVICON_BASE64 = "data:image/x-icon;base64,AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAKBEAAJ4EAAAwMAAAAQAgAGgmAADGFQAAKAAAABAAAAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8V////bv///7D////R////0f///7D///9u////FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wL///9s0qun7q9qYv/DkYv/6tfV///+/v///////////////+7///9r////AgAAAAAAAAAAAAAAAP///wL///+Q/////sqcl/+WOzH/ljsx/5c9M//AiYP/+/j4/////////////////v///5D///8CAAAAAAAAAAD///9s/////v/////Oo5//lz00/5Y7Mf+WOzH/ljsx/7Z3cP/9+/v////////////////+////bAAAAAD///8V////7v///////////v39//Tq6f/QqKP/m0U8/5Y7Mf+WOzH/z6ah/////////////////////+7///8V////bv///////////////////////////////+XOy/+ZQTf/ljsx/59MQ//69fX/////////////////////bv///7D/////////////////////////////////////wYyG/5Y7Mf+WOzH/4MTC/////////////////////7D////R//////////////////7+//79/f/+/f3//v39/+DGw/+WOzH/ljsx/82inf/////////////////////R////0f///////////////9Svq/+mWVH/pllR/6ZZUf+iUUj/ljsx/5Y7Mf/KnJf/////////////////////0f///7D////////////////KnJf/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/062p/////////////////////7D///9u////////////////0amk/6FQSP+hUEj/oVBI/6JRSP+mWVH/plpS/+7g3v////////////////////9u////Ff///+7///////////7+/v/9/Pz/9u7t/8SSjP/Dj4r/9ezr//79/f/////////////////////u////FQAAAAD///9s/////v///////////////8OPif+WOzH/ljsx/7+Jgv/////////////////////+////bAAAAAAAAAAA////Av///5D////+//////////+9hH7/ljsx/5Y7Mf+8g3z////////////////+////kP///wIAAAAAAAAAAAAAAAD///8C////bP///+7/////8OTi/7R0bP+zcmr/8OLh///////////u////bP///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8V////bv///7D////R////0f///7D///9u////FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Hf///0n///95////mf///67///+u////mf///3n///9J////Hf///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8I////Tf///7D////p/////v////////////////////////////////////7////p////sP///03///8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Pfjz8r7HlpH7wY2H/86lof/iysf/9e3s///+/v//////////////////////////////////////////+////77///89////AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Cf///37////z9Ovq/6BORf+WOzH/ljsx/5Y8Mv+hUEf/v4iC/+rY1v/+/f3///////////////////////////////////////////H///99////CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wr///+d/////P/////06+r/oE5F/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/m0Q7/8WTjf/38PD///////////////////////////////////////////z///+d////CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8J////nf////3///////////Tr6v+gTkX/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/61mX//w4+L///////////////////////////////////////////3///+d////CQAAAAAAAAAAAAAAAAAAAAAAAAAA////Av///37////8////////////////9Ovq/6BORf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/6daUv/v4uD///////////////////////////////////////////z///9+////AgAAAAAAAAAAAAAAAAAAAAD///89////8//////////////////////48fD/rGRc/5pCOf+YPjT/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/6xkXf/37+////////////////////////////////////////////P///89AAAAAAAAAAAAAAAA////CP///77////////////////////////////////7+Pf/8eXj/+DGw/++hn//m0U8/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/8GLhf/9/Pz//////////////////////////////////////////77///8IAAAAAAAAAAD///9N////+/////////////////////////////////////////////////7+/v/p1tP/rGRd/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/mkI4/+XPzf//////////////////////////////////////////+////00AAAAA////Av///7D////////////////////////////////////////////////////////////////06+r/r2pi/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/tndw//38+///////////////////////////////////////////sP///wL///8d////6f/////////////////////////////////////////////////////////////////////x5eP/olJJ/5Y7Mf+WOzH/ljsx/5Y7Mf+aQjn/7dza///////////////////////////////////////////p////Hf///0n////+///////////////////////////////////////////////////////////////////////////Ur6v/ljwy/5Y7Mf+WOzH/ljsx/5Y7Mf/Oo5////////////////////////////////////////////7///9J////ef////////////////////////////////////////////////////////////////////////////////fw7/+jVEv/ljsx/5Y7Mf+WOzH/ljsx/7Nxav///////////////////////////////////////////////3n///+Z/////////////////////////////////////////////////////////////////////////////////////7yCfP+WOzH/ljsx/5Y7Mf+WOzH/pllQ//r29f//////////////////////////////////////////mf///67///////////////////////////////////////////79/f/9/Pz//fz8//38/P/9/Pz//fz8//38/P/9/Pz/yZuW/5Y7Mf+WOzH/ljsx/5Y7Mf+gT0b/9evr//////////////////////////////////////////+u////rv/////////////////////////////////////69vb/wo2I/7Z3cf+2d3H/tndx/7Z3cf+2d3H/tndx/7Z3cf+lV0//ljsx/5Y7Mf+WOzH/ljsx/6BORf/06+r//////////////////////////////////////////67///+Z//////////////////////////////////////Tr6v+gTkX/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/oE5F//Tr6v//////////////////////////////////////////mf///3n/////////////////////////////////////9Ovq/6BORf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+lVk7/+fPz//////////////////////////////////////////95////Sf////7////////////////////////////////06+r/oE5F/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/7FuZ////v7//////////////////////////////////////v///0n///8d////6f////////////////////////////////Tr6v+gTkX/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/zKCb///////////////////////////////////////////p////Hf///wL///+w////////////////////////////////+PLx/7d4cf+tZl//rWZf/61mX/+tZl//rWZf/61mX/+tZl//rmdg/7Z3cP+2d3H/tndx/7h7df/w4uH//////////////////////////////////////////7D///8CAAAAAP///03////7/////////////////////////////////Pv6//z6+f/8+vn//Pr5//z6+f/z6un/48zJ/+LKx//y5+b//fz8//38/P/9/Pz//fz8///////////////////////////////////////////7////TQAAAAAAAAAA////CP///77/////////////////////////////////////////////////////4MXC/6VXTv+WPDL/ljwy/6JRSP/aubb///7+/////////////////////////////////////////////////////77///8IAAAAAAAAAAAAAAAA////Pf////P///////////////////////////////////////////Xs6/+jU0r/ljsx/5Y7Mf+WOzH/ljsx/59MQv/w5OL////////////////////////////////////////////////z////PQAAAAAAAAAAAAAAAAAAAAD///8C////fv////z/////////////////////////////////////3sK//5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/9m5tf///////////////////////////////////////////P///37///8CAAAAAAAAAAAAAAAAAAAAAAAAAAD///8J////nf////3////////////////////////////////ZuLX/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/17Sw//////////////////////////////////////3///+d////CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8K////nf////z//////////////////////////+zc2v+aQzn/ljsx/5Y7Mf+WOzH/ljsx/5pDOf/r2tj////////////////////////////////8////nf///woAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8J////fv////P//////////////////////v39/8eYkv+YPjT/ljsx/5Y7Mf+YPjT/xpSP//79/f//////////////////////////8////37///8JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Pf///77////7/////////////////fv6/+DEwf/Ekoz/wY2H/97Bvv/8+vr/////////////////////+////77///89////AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CP///03///+w////6f////7////////////////////////////////////+////6f///7D///9N////CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wL///8d////Sf///3n///+Z////rv///67///+Z////ef///0n///8d////AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8E////DP///xr///80////Rv///1n///9q////gP///4D///9q////Wf///0b///80////Gv///wz///8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CP///y7///9g////lP///7v////V////6P////r////8/////P////z////8////+v///+j////V////u////5T///9g////Lv///wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wf///81////k////8/////v////+v////////////////////////////////////////////////////////////////////r////v////z////5P///81////BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8G////Kv37+3zt3Nrd27y5/Nm6t//fxMH/59LQ//Dk4v/48vH//fv6//////////////////////////////////////////////////////////////////////z////d////fP///yr///8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xH///9g////wvz5+ffNop3+m0U8/5c+NP+cRz7/pFVN/65oYP+8gnv/0qun/+jU0v/59fT//v7+///////////////////////////////////////////////////////////+////9////8L///9f////EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////GP///4n////m/////fv4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+XPTT/m0Q6/6ZaUf/BjIX/6NXT//z5+f////////////////////////////////////////////////////////////////3////k////if///xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8i////pP////f///////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+XPjT/oVFI/8yhnP/x5OP//vz8////////////////////////////////////////////////////////////////9////6T///8i////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///yL///+d////8/////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5tEOv+3eHL/48rH//37+/////////////////////////////////////////////////////////////////P///+d////IgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////GP///6T////z//////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+YPjT/qFxT/9y+uv/9+vr////////////////////////////////////////////////////////////////z////pP///xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8R////if////f///////////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsy/6NUS//Yt7P//Pn4////////////////////////////////////////////////////////////////9////4n///8RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wb///9g////5v////////////////////////////////v4+P/KnZj/mUI4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5c8Mv+pXlb/38PA//38/P///////////////////////////////////////////////////////////////+b///9g////BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///yr////C/////f////////////////////////////////38+//dwLz/qF1V/51JP/+bRDv/mD40/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+XPTP/qWBY/+vZ2P///v7///////////////////////////////////////////////////////////3////C////KgAAAAAAAAAAAAAAAAAAAAAAAAAA////B////3z////3///////////////////////////////////////////9+/r/9/Dv/+zc2f/dwLz/x5iT/7BrY/+eS0H/lz0z/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/lzwy/7d6c//06un////////////////////////////////////////////////////////////////3////fP///wcAAAAAAAAAAAAAAAAAAAAA////Nf///93////+//////////////////////////////////////////////////////7+/v/+/v7//fz8//Hm5f/XtLH/s3Fq/5lCOP+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/51JP//Sq6b//Pn5///////////////////////////////////////////////////////////+////3f///zUAAAAAAAAAAAAAAAD///8I////k/////z////////////////////////////////////////////////////////////////////////////////9+/v/8eTj/8aVkP+dRz7/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5c8Mv+vamL/7uDf/////////////////////////////////////////////////////////////////P///5P///8IAAAAAAAAAAD///8u////z/////////////////////////////////////////////////////////////////////////////////////////////////fx8P/ImZP/nUg//5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+ZQTj/0qyo//38/P///////////////////////////////////////////////////////////////8////8uAAAAAP///wT///9g////7//////////////////////////////////////////////////////////////////////////////////////////////////////07Or/xJGL/5hAN/+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/rGRd//Tq6P///////////////////////////////////////////////////////////////+////9g////BP///wz///+U////+v////////////////////////////////////////////////////////////////////////////////////////////////////////7/8+jm/7Nya/+WPDP/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/mkQ7/9m3s////v7///////////////////////////////////////////////////////////r///+U////DP///xr///+7/////////////////////////////////////////////////////////////////////////////////////////////////////////////////v7+/+HHxP+hUEf/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljwy/7yBe//69/f///////////////////////////////////////////////////////////////+7////Gv///zT////V//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bu7f+7gHr/mD40/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/6xkXP/u4N/////////////////////////////////////////////////////////////////V////NP///0b////o//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////38/P/XtK//nEY9/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/6BNRP/iycb////////////////////////////////////////////////////////////////o////Rv///1n////6///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////o1NL/pVhQ/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5xGPP/Yt7L//v39///////////////////////////////////////////////////////////6////Wf///2r////8///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////06un/sW1m/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5pDOf/PpKD//Pr5///////////////////////////////////////////////////////////8////av///4D////8/////////////////////////////////////////////////////////////v7//fv7//37+v/9+/r//fv6//37+v/9+/r//fv6//37+v/9+/r//fv6//37+v/06un/snBp/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5lBOP/KnJj/+/j4///////////////////////////////////////////////////////////8////gP///4D////8//////////////////////////////////////////////////////79/f/s3Nr/z6ej/8uemv/Lnpr/y56a/8uemv/Lnpr/y56a/8uemv/Lnpr/y56a/8uemv/GlI//o1VM/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5lBOP/KnJf/+/j4///////////////////////////////////////////////////////////8////gP///2r////8//////////////////////////////////////////////////////z5+f/Nop3/m0Q7/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5lBOP/KnJf/+/j4///////////////////////////////////////////////////////////8////av///1n////6//////////////////////////////////////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5lCOP/KnZj/+/j4///////////////////////////////////////////////////////////6////Wf///0b////o//////////////////////////////////////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5pDOv/Qp6P//Pr6///////////////////////////////////////////////////////////o////Rv///zT////V//////////////////////////////////////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/51IP//bvbr//v7+///////////////////////////////////////////////////////////V////NP///xr///+7//////////////////////////////////////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/6RVTf/n0c////////////////////////////////////////////////////////////////+7////Gv///wz///+U////+v////////////////////////////////////////////////v4+P/KnJf/mUE4/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/7FuZ//z6ej///////////////////////////////////////////////////////////r///+U////DP///wT///9g////7/////////////////////////////////////////////////z4+P/LnZj/mkI5/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/ljwy/5Y8Mv+WPDL/mUE3/8mblf/9+/r//////////////////////////////////////////////////////////+////9g////BAAAAAD///8u////z/////////////////////////////////////////////////38/P/iycb/v4iC/7yCfP+8gnz/vIJ8/7yCfP+8gnz/vIJ8/7yCfP+8gnz/vIJ8/7yCfP+8gnz/voR+/8qcl//Lnpr/y56a/8uemv/Lnpr/zqOf//Hl5P///v7//////////////////////////////////////////////////////////8////8uAAAAAAAAAAD///8I////k/////z////////////////////////////////////////////////9/Pz/+vf2//r39v/69/b/+vf2//r39v/69/b/+vf2//j08//07Ov/7+Df/+7f3v/z6+n/+PPy//z6+v/9+/r//fv6//37+v/9+/r//fv7///+/v///////////////////////////////////////////////////////////P///5P///8IAAAAAAAAAAAAAAAA////Nf///93////+/////////////////////////////////////////////////////////////////////////////v7/9u7t/9i3s/++hn//sW1m/7BsZf+7gnv/066q//Ln5v/+/v7////////////////////////////////////////////////////////////////////////////////+////3f///zUAAAAAAAAAAAAAAAAAAAAA////B////3z////3///////////////////////////////////////////////////////////////////////////17Ov/wo6I/55KQf+XPjT/ljsx/5Y7Mf+XPTP/nEY9/7uBe//x5eP////////////////////////////////////////////////////////////////////////////////3////fP///wcAAAAAAAAAAAAAAAAAAAAAAAAAAP///yr////C/////f////////////////////////////////////////////////////////////////37+//UsKz/nUg//5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5tEO//No57/+/j4//////////////////////////////////////////////////////////////////////3////C////KgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wb///9g////5v////////////////////////////////////////////////////////////////bv7/+5fHb/lz0z/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y8Mv+ycGj/8ujm/////////////////////////////////////////////////////////////////////+b///9g////BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8R////if////f//////////////////////////////////////////////////////////+3e3P+qYlr/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+oXVT/6tnX////////////////////////////////////////////////////////////////9////4n///8RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////GP///6T////z/////////////////////////////////////////////////////+vZ1/+oXVT/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+nWlL/6dbU///////////////////////////////////////////////////////////z////pP///xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///yL///+d////8/////////////////////////////////////////////////Hm5f+wa2T/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5Y7Mf+uaGD/8OPh//////////////////////////////////////////////////////P///+d////IgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8i////pP////f///////////////////////////////////////////r19P/CjYf/mD81/5Y7Mf+WOzH/ljsx/5Y7Mf+WOzH/ljsx/5g/Nf/BjIb/+fTz////////////////////////////////////////////////9////6T///8i////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////GP///4n////m/////f////////////////////////////////7+/v/m0M7/qmFZ/5c9M/+WOzH/ljsx/5Y7Mf+WOzH/lz0z/6leV//lz8z//v7+//////////////////////////////////////3////m////if///xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xH///9g////wv////f////+///////////////////////////8+vr/4snG/7d4cf+iUUj/mUA3/5c+NP+gTkT/tXVu/+DFw//8+fn////////////////////////////////+////9////8L///9g////EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8G////Kv///3z////d/////P///////////////////////////v38//Tr6v/kzcv/2726/9m6t//jysf/8uno//78/P////////////////////////////////z////d////fP///yr///8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wf///81////k////8/////v////+v////////////////////////////////////////////////////////////////////r////v////z////5P///81////BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CP///y7///9g////lP///7v////V////6P////r////8/////P////z////8////+v///+j////V////u////5T///9g////Lv///wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8E////DP///xr///80////Rv///1n///9q////gP///4D///9q////Wf///0b///80////Gv///wz///8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";
334
334
 
335
335
  // src/lib/cms-version.ts
336
- var CMS_VERSION = true ? "1.0.6" : "0.0.0";
336
+ var CMS_VERSION = true ? "1.0.8" : "0.0.0";
337
337
 
338
338
  // src/components/Admin/Sidebar.tsx
339
339
  import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
@@ -5695,7 +5695,7 @@ function DashboardPage() {
5695
5695
  }
5696
5696
 
5697
5697
  // src/admin/pages/AdminPageResolver.tsx
5698
- import { useState as useState31, useEffect as useEffect29, useContext as useContext6, useMemo } from "react";
5698
+ import { useState as useState32, useEffect as useEffect30, useContext as useContext6, useMemo } from "react";
5699
5699
  import { useRouter as useRouter12 } from "next/navigation";
5700
5700
 
5701
5701
  // src/components/Admin/PolicyEditorPage.tsx
@@ -8197,66 +8197,295 @@ function PageBuilderPage({ pageId }) {
8197
8197
  }
8198
8198
 
8199
8199
  // src/admin/pages/PluginsPage.tsx
8200
- import { useContext as useContext5 } from "react";
8201
- import { HardDrive, Mail, CreditCard as CreditCard2, Puzzle as Puzzle2, CheckCircle2 as CheckCircle22, XCircle } from "lucide-react";
8202
- import { jsx as jsx55, jsxs as jsxs47 } from "react/jsx-runtime";
8200
+ import { useContext as useContext5, useState as useState30, useEffect as useEffect28 } from "react";
8201
+ import { HardDrive, Mail, CreditCard as CreditCard2, MessageCircle, Puzzle as Puzzle2, CheckCircle2 as CheckCircle22, XCircle, Save as Save6 } from "lucide-react";
8202
+ import { toast as toast4 } from "sonner";
8203
+ import { Fragment as Fragment12, jsx as jsx55, jsxs as jsxs47 } from "react/jsx-runtime";
8203
8204
  var ICON_MAP = {
8204
8205
  storage: HardDrive,
8205
8206
  email: Mail,
8206
- payment: CreditCard2
8207
+ payment: CreditCard2,
8208
+ llm: MessageCircle
8207
8209
  };
8208
- function PluginIcon({ descriptor }) {
8210
+ function PluginIcon({ descriptor, size = "md" }) {
8209
8211
  const Icon2 = descriptor.icon ? ICON_MAP[descriptor.icon] ?? Puzzle2 : Puzzle2;
8210
- return /* @__PURE__ */ jsx55("div", { className: "flex h-11 w-11 shrink-0 items-center justify-center rounded-lg bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-300", children: /* @__PURE__ */ jsx55(Icon2, { className: "h-5 w-5" }) });
8212
+ const sizeClass = size === "sm" ? "h-8 w-8" : "h-11 w-11";
8213
+ const iconClass = size === "sm" ? "h-4 w-4" : "h-5 w-5";
8214
+ return /* @__PURE__ */ jsx55("div", { className: `flex shrink-0 items-center justify-center rounded-lg bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-300 ${sizeClass}`, children: /* @__PURE__ */ jsx55(Icon2, { className: iconClass }) });
8215
+ }
8216
+ function PluginSettingsPanel({
8217
+ descriptor,
8218
+ onSaved
8219
+ }) {
8220
+ const settingsGroup = descriptor.settingsGroup;
8221
+ const isLlm = settingsGroup === "llm";
8222
+ const [enabled, setEnabled] = useState30(true);
8223
+ const [botName, setBotName] = useState30("");
8224
+ const [icon, setIcon] = useState30("");
8225
+ const [iconImageUrl, setIconImageUrl] = useState30("");
8226
+ const [iconBackgroundColor, setIconBackgroundColor] = useState30("#6366f1");
8227
+ const [headerColor, setHeaderColor] = useState30("#6366f1");
8228
+ const [loading, setLoading] = useState30(true);
8229
+ const [saving, setSaving] = useState30(false);
8230
+ useEffect28(() => {
8231
+ fetch(`/api/settings/${settingsGroup}`).then((r) => r.ok ? r.json() : {}).then((data) => {
8232
+ setEnabled(data.enabled !== "false");
8233
+ setBotName(data.botName ?? "");
8234
+ setIcon(data.icon ?? "");
8235
+ if (isLlm) {
8236
+ setIconImageUrl(data.iconImageUrl ?? "");
8237
+ setIconBackgroundColor(data.iconBackgroundColor ?? "#6366f1");
8238
+ setHeaderColor(data.headerColor ?? "#6366f1");
8239
+ }
8240
+ }).finally(() => setLoading(false));
8241
+ }, [settingsGroup, isLlm]);
8242
+ const buildPayload = () => {
8243
+ const payload = {
8244
+ enabled: { value: enabled ? "true" : "false", type: "public" },
8245
+ botName: { value: botName, type: "public" },
8246
+ icon: { value: icon, type: "public" }
8247
+ };
8248
+ if (isLlm) {
8249
+ payload.iconImageUrl = { value: iconImageUrl, type: "public" };
8250
+ payload.iconBackgroundColor = { value: iconBackgroundColor, type: "public" };
8251
+ payload.headerColor = { value: headerColor, type: "public" };
8252
+ }
8253
+ return payload;
8254
+ };
8255
+ const handleSave = async () => {
8256
+ setSaving(true);
8257
+ try {
8258
+ const res = await fetch(`/api/settings/${settingsGroup}`, {
8259
+ method: "PUT",
8260
+ headers: { "Content-Type": "application/json" },
8261
+ body: JSON.stringify(buildPayload())
8262
+ });
8263
+ if (!res.ok) throw new Error();
8264
+ toast4.success("Settings saved");
8265
+ onSaved?.();
8266
+ } catch {
8267
+ toast4.error("Failed to save");
8268
+ } finally {
8269
+ setSaving(false);
8270
+ }
8271
+ };
8272
+ if (loading) return /* @__PURE__ */ jsx55("div", { className: "text-sm text-gray-500 dark:text-gray-400", children: "Loading..." });
8273
+ return /* @__PURE__ */ jsxs47("div", { className: "space-y-4", children: [
8274
+ /* @__PURE__ */ jsxs47("div", { className: "flex items-center justify-between gap-2", children: [
8275
+ /* @__PURE__ */ jsx55(Label3, { htmlFor: `${settingsGroup}-enabled`, className: "text-sm", children: "Enabled" }),
8276
+ /* @__PURE__ */ jsx55(Switch, { id: `${settingsGroup}-enabled`, checked: enabled, onCheckedChange: setEnabled })
8277
+ ] }),
8278
+ /* @__PURE__ */ jsxs47("div", { className: "space-y-1", children: [
8279
+ /* @__PURE__ */ jsx55(Label3, { htmlFor: `${settingsGroup}-botName`, className: "text-sm", children: "Name" }),
8280
+ /* @__PURE__ */ jsx55(
8281
+ Input,
8282
+ {
8283
+ id: `${settingsGroup}-botName`,
8284
+ value: botName,
8285
+ onChange: (e) => setBotName(e.target.value),
8286
+ placeholder: "e.g. Support Bot",
8287
+ className: "h-8 text-sm"
8288
+ }
8289
+ )
8290
+ ] }),
8291
+ isLlm ? /* @__PURE__ */ jsxs47(Fragment12, { children: [
8292
+ /* @__PURE__ */ jsxs47("div", { className: "space-y-1", children: [
8293
+ /* @__PURE__ */ jsx55(Label3, { htmlFor: `${settingsGroup}-iconImageUrl`, className: "text-sm", children: "Icon image URL" }),
8294
+ /* @__PURE__ */ jsx55(
8295
+ Input,
8296
+ {
8297
+ id: `${settingsGroup}-iconImageUrl`,
8298
+ value: iconImageUrl,
8299
+ onChange: (e) => setIconImageUrl(e.target.value),
8300
+ placeholder: "https://\u2026 or /images/chat-icon.png",
8301
+ className: "h-8 text-sm"
8302
+ }
8303
+ ),
8304
+ /* @__PURE__ */ jsx55("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: "PNG or image URL. Leave empty to use emoji below." })
8305
+ ] }),
8306
+ /* @__PURE__ */ jsxs47("div", { className: "space-y-1", children: [
8307
+ /* @__PURE__ */ jsx55(Label3, { htmlFor: `${settingsGroup}-icon`, className: "text-sm", children: "Icon fallback (emoji)" }),
8308
+ /* @__PURE__ */ jsx55(
8309
+ Input,
8310
+ {
8311
+ id: `${settingsGroup}-icon`,
8312
+ value: icon,
8313
+ onChange: (e) => setIcon(e.target.value),
8314
+ placeholder: "e.g. \u{1F4AC}",
8315
+ className: "h-8 text-sm w-20"
8316
+ }
8317
+ )
8318
+ ] }),
8319
+ /* @__PURE__ */ jsxs47("div", { className: "flex gap-4", children: [
8320
+ /* @__PURE__ */ jsxs47("div", { className: "space-y-1", children: [
8321
+ /* @__PURE__ */ jsx55(Label3, { htmlFor: `${settingsGroup}-iconBg`, className: "text-sm", children: "Icon background" }),
8322
+ /* @__PURE__ */ jsxs47("div", { className: "flex items-center gap-2", children: [
8323
+ /* @__PURE__ */ jsx55(
8324
+ "input",
8325
+ {
8326
+ type: "color",
8327
+ id: `${settingsGroup}-iconBg`,
8328
+ value: iconBackgroundColor,
8329
+ onChange: (e) => setIconBackgroundColor(e.target.value),
8330
+ className: "h-8 w-10 cursor-pointer rounded border border-gray-300 dark:border-gray-600"
8331
+ }
8332
+ ),
8333
+ /* @__PURE__ */ jsx55(
8334
+ Input,
8335
+ {
8336
+ value: iconBackgroundColor,
8337
+ onChange: (e) => setIconBackgroundColor(e.target.value),
8338
+ className: "h-8 w-24 text-sm font-mono"
8339
+ }
8340
+ )
8341
+ ] })
8342
+ ] }),
8343
+ /* @__PURE__ */ jsxs47("div", { className: "space-y-1", children: [
8344
+ /* @__PURE__ */ jsx55(Label3, { htmlFor: `${settingsGroup}-headerColor`, className: "text-sm", children: "Header color" }),
8345
+ /* @__PURE__ */ jsxs47("div", { className: "flex items-center gap-2", children: [
8346
+ /* @__PURE__ */ jsx55(
8347
+ "input",
8348
+ {
8349
+ type: "color",
8350
+ id: `${settingsGroup}-headerColor`,
8351
+ value: headerColor,
8352
+ onChange: (e) => setHeaderColor(e.target.value),
8353
+ className: "h-8 w-10 cursor-pointer rounded border border-gray-300 dark:border-gray-600"
8354
+ }
8355
+ ),
8356
+ /* @__PURE__ */ jsx55(
8357
+ Input,
8358
+ {
8359
+ value: headerColor,
8360
+ onChange: (e) => setHeaderColor(e.target.value),
8361
+ className: "h-8 w-24 text-sm font-mono"
8362
+ }
8363
+ )
8364
+ ] })
8365
+ ] })
8366
+ ] })
8367
+ ] }) : /* @__PURE__ */ jsxs47("div", { className: "space-y-1", children: [
8368
+ /* @__PURE__ */ jsx55(Label3, { htmlFor: `${settingsGroup}-icon`, className: "text-sm", children: "Icon (emoji or name)" }),
8369
+ /* @__PURE__ */ jsx55(
8370
+ Input,
8371
+ {
8372
+ id: `${settingsGroup}-icon`,
8373
+ value: icon,
8374
+ onChange: (e) => setIcon(e.target.value),
8375
+ placeholder: "e.g. \u{1F916} or llm",
8376
+ className: "h-8 text-sm"
8377
+ }
8378
+ )
8379
+ ] }),
8380
+ /* @__PURE__ */ jsxs47(Button, { size: "sm", onClick: handleSave, disabled: saving, className: "gap-1", children: [
8381
+ /* @__PURE__ */ jsx55(Save6, { className: "h-3.5 w-3.5" }),
8382
+ "Save"
8383
+ ] })
8384
+ ] });
8385
+ }
8386
+ function PluginListItem({
8387
+ descriptor,
8388
+ enabled,
8389
+ selected,
8390
+ onSelect
8391
+ }) {
8392
+ return /* @__PURE__ */ jsxs47(
8393
+ "button",
8394
+ {
8395
+ type: "button",
8396
+ onClick: onSelect,
8397
+ className: `flex w-full items-center gap-3 rounded-lg border px-3 py-2.5 text-left transition-colors ${selected ? "border-gray-300 bg-gray-50 dark:border-gray-600 dark:bg-gray-700/50" : "border-transparent hover:bg-gray-50 dark:hover:bg-gray-800/50"}`,
8398
+ children: [
8399
+ /* @__PURE__ */ jsx55(PluginIcon, { descriptor, size: "sm" }),
8400
+ /* @__PURE__ */ jsxs47("div", { className: "min-w-0 flex-1", children: [
8401
+ /* @__PURE__ */ jsx55("div", { className: "font-medium text-gray-900 dark:text-white truncate", children: descriptor.label || descriptor.name }),
8402
+ /* @__PURE__ */ jsxs47("div", { className: "flex items-center gap-2 mt-0.5", children: [
8403
+ /* @__PURE__ */ jsxs47(
8404
+ "span",
8405
+ {
8406
+ className: `inline-flex items-center gap-1 rounded-full px-1.5 py-0.5 text-xs font-medium ${enabled ? "bg-emerald-50 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400" : "bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-400"}`,
8407
+ children: [
8408
+ enabled ? /* @__PURE__ */ jsx55(CheckCircle22, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx55(XCircle, { className: "h-3 w-3" }),
8409
+ enabled ? "On" : "Off"
8410
+ ]
8411
+ }
8412
+ ),
8413
+ /* @__PURE__ */ jsxs47("span", { className: "text-xs text-gray-400 dark:text-gray-500", children: [
8414
+ "v",
8415
+ descriptor.version
8416
+ ] })
8417
+ ] })
8418
+ ] })
8419
+ ]
8420
+ }
8421
+ );
8211
8422
  }
8212
8423
  function PluginsPage() {
8213
8424
  const { pluginDescriptors = [] } = useContext5(AdminConfigContext);
8214
- return /* @__PURE__ */ jsxs47("div", { className: "space-y-6", children: [
8215
- /* @__PURE__ */ jsxs47("div", { children: [
8216
- /* @__PURE__ */ jsx55("h1", { className: "text-xl font-semibold text-gray-900 dark:text-white", children: "Plugins" }),
8217
- /* @__PURE__ */ jsx55("p", { className: "mt-0.5 text-sm text-gray-500 dark:text-gray-400", children: "Registered plugins and their status" })
8425
+ const [selectedName, setSelectedName] = useState30(null);
8426
+ const [enabledMap, setEnabledMap] = useState30({});
8427
+ useEffect28(() => {
8428
+ pluginDescriptors.forEach((p) => {
8429
+ if (!p.settingsGroup) return;
8430
+ fetch(`/api/settings/${p.settingsGroup}`).then((r) => r.ok ? r.json() : {}).then(
8431
+ (data) => setEnabledMap((prev) => ({ ...prev, [p.name]: data.enabled !== "false" }))
8432
+ ).catch(() => {
8433
+ });
8434
+ });
8435
+ }, [pluginDescriptors]);
8436
+ const selectedDescriptor = pluginDescriptors.find((p) => p.name === selectedName);
8437
+ const refreshEnabled = (name) => {
8438
+ const d = pluginDescriptors.find((p) => p.name === name);
8439
+ if (!d?.settingsGroup) return;
8440
+ fetch(`/api/settings/${d.settingsGroup}`).then((r) => r.ok ? r.json() : {}).then(
8441
+ (data) => setEnabledMap((prev) => ({ ...prev, [name]: data.enabled !== "false" }))
8442
+ ).catch(() => {
8443
+ });
8444
+ };
8445
+ return /* @__PURE__ */ jsxs47("div", { className: "min-w-0 rounded-lg bg-white shadow-md dark:bg-gray-800", children: [
8446
+ /* @__PURE__ */ jsxs47("div", { className: "bg-gray-800 border-b border-gray-700 px-4 py-2.5 rounded-t-lg dark:bg-gray-900 dark:border-gray-700", children: [
8447
+ /* @__PURE__ */ jsx55("h1", { className: "text-base font-semibold text-white", children: "Plugins" }),
8448
+ /* @__PURE__ */ jsx55("p", { className: "text-xs text-gray-300 mt-0.5", children: "Registered plugins and their status" })
8218
8449
  ] }),
8219
- pluginDescriptors.length === 0 ? /* @__PURE__ */ jsxs47("div", { className: "rounded-xl border border-gray-200 bg-white p-8 text-center dark:border-gray-700 dark:bg-gray-800", children: [
8450
+ /* @__PURE__ */ jsx55("div", { className: "min-w-0 p-6", children: pluginDescriptors.length === 0 ? /* @__PURE__ */ jsxs47("div", { className: "py-12 text-center", children: [
8220
8451
  /* @__PURE__ */ jsx55(Puzzle2, { className: "mx-auto h-10 w-10 text-gray-400" }),
8221
8452
  /* @__PURE__ */ jsx55("p", { className: "mt-3 text-sm text-gray-500 dark:text-gray-400", children: "No plugins registered. Add plugin descriptors to your app admin layout." })
8222
- ] }) : /* @__PURE__ */ jsx55("div", { className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3", children: pluginDescriptors.map((p) => {
8223
- const enabled = p.enabled !== false;
8224
- return /* @__PURE__ */ jsx55(
8225
- "div",
8453
+ ] }) : /* @__PURE__ */ jsxs47("div", { className: "flex gap-6", children: [
8454
+ /* @__PURE__ */ jsx55("div", { className: "w-56 shrink-0 space-y-1", children: pluginDescriptors.map((p) => /* @__PURE__ */ jsx55(
8455
+ PluginListItem,
8226
8456
  {
8227
- className: "flex flex-col rounded-xl border border-gray-200 bg-white shadow-sm transition-shadow hover:shadow dark:border-gray-700 dark:bg-gray-800",
8228
- children: /* @__PURE__ */ jsxs47("div", { className: "flex items-start gap-4 p-5", children: [
8229
- /* @__PURE__ */ jsx55(PluginIcon, { descriptor: p }),
8230
- /* @__PURE__ */ jsxs47("div", { className: "min-w-0 flex-1", children: [
8231
- /* @__PURE__ */ jsxs47("div", { className: "flex items-center justify-between gap-2", children: [
8232
- /* @__PURE__ */ jsx55("h2", { className: "font-medium text-gray-900 dark:text-white", children: p.label || p.name }),
8233
- /* @__PURE__ */ jsxs47(
8234
- "span",
8235
- {
8236
- className: `inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium ${enabled ? "bg-emerald-50 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400" : "bg-gray-100 text-gray-600 dark:bg-gray-700 dark:text-gray-400"}`,
8237
- children: [
8238
- enabled ? /* @__PURE__ */ jsx55(CheckCircle22, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx55(XCircle, { className: "h-3.5 w-3.5" }),
8239
- enabled ? "Enabled" : "Disabled"
8240
- ]
8241
- }
8242
- )
8243
- ] }),
8244
- /* @__PURE__ */ jsxs47("p", { className: "mt-0.5 text-xs text-gray-500 dark:text-gray-400", children: [
8245
- "v",
8246
- p.version
8247
- ] }),
8248
- p.description && /* @__PURE__ */ jsx55("p", { className: "mt-2 text-sm text-gray-600 dark:text-gray-300", children: p.description })
8249
- ] })
8250
- ] })
8457
+ descriptor: p,
8458
+ enabled: p.settingsGroup ? enabledMap[p.name] ?? p.enabled !== false : p.enabled !== false,
8459
+ selected: selectedName === p.name,
8460
+ onSelect: () => setSelectedName(p.name)
8251
8461
  },
8252
8462
  p.name
8253
- );
8254
- }) })
8463
+ )) }),
8464
+ /* @__PURE__ */ jsx55("div", { className: "min-w-0 flex-1", children: !selectedName ? /* @__PURE__ */ jsxs47("div", { className: "flex flex-col items-center justify-center py-12 text-center", children: [
8465
+ /* @__PURE__ */ jsx55(Puzzle2, { className: "h-10 w-10 text-gray-300 dark:text-gray-600" }),
8466
+ /* @__PURE__ */ jsx55("p", { className: "mt-3 text-sm text-gray-500 dark:text-gray-400", children: "Select a plugin to view or edit its configuration." })
8467
+ ] }) : /* @__PURE__ */ jsx55("div", { className: "rounded-lg border border-gray-200 bg-gray-50/50 p-5 dark:border-gray-700 dark:bg-gray-800/50", children: selectedDescriptor?.settingsGroup ? /* @__PURE__ */ jsxs47(Fragment12, { children: [
8468
+ /* @__PURE__ */ jsxs47("h2", { className: "text-sm font-medium text-gray-700 dark:text-gray-300 mb-4", children: [
8469
+ selectedDescriptor.label || selectedDescriptor.name,
8470
+ " \u2014 Configuration"
8471
+ ] }),
8472
+ /* @__PURE__ */ jsx55(
8473
+ PluginSettingsPanel,
8474
+ {
8475
+ descriptor: selectedDescriptor,
8476
+ onSaved: () => refreshEnabled(selectedDescriptor.name)
8477
+ }
8478
+ )
8479
+ ] }) : /* @__PURE__ */ jsxs47("div", { className: "flex flex-col items-center justify-center py-12 text-center", children: [
8480
+ /* @__PURE__ */ jsx55(Puzzle2, { className: "h-10 w-10 text-gray-300 dark:text-gray-600" }),
8481
+ /* @__PURE__ */ jsx55("p", { className: "mt-3 text-sm text-gray-500 dark:text-gray-400", children: "No configuration available for this plugin." })
8482
+ ] }) }) })
8483
+ ] }) })
8255
8484
  ] });
8256
8485
  }
8257
8486
 
8258
8487
  // src/admin/pages/BrandEditPage.tsx
8259
- import { useState as useState30, useEffect as useEffect28 } from "react";
8488
+ import { useState as useState31, useEffect as useEffect29 } from "react";
8260
8489
  import { useRouter as useRouter11 } from "next/navigation";
8261
8490
  import { AlertCircle as AlertCircle5 } from "lucide-react";
8262
8491
 
@@ -8349,23 +8578,23 @@ async function fetchSeo(seoId) {
8349
8578
  }
8350
8579
 
8351
8580
  // src/admin/pages/BrandEditPage.tsx
8352
- import { Fragment as Fragment12, jsx as jsx57, jsxs as jsxs49 } from "react/jsx-runtime";
8581
+ import { Fragment as Fragment13, jsx as jsx57, jsxs as jsxs49 } from "react/jsx-runtime";
8353
8582
  var isCreate = (id) => id === "create";
8354
8583
  function BrandEditPage({ brandId }) {
8355
8584
  const router = useRouter11();
8356
8585
  const create = isCreate(brandId);
8357
- const [loading, setLoading] = useState30(!create);
8358
- const [saving, setSaving] = useState30(false);
8359
- const [errors, setErrors] = useState30([]);
8360
- const [name, setName] = useState30("");
8361
- const [slug, setSlug] = useState30("");
8362
- const [description, setDescription] = useState30("");
8363
- const [logo, setLogo] = useState30("");
8364
- const [active, setActive] = useState30(true);
8365
- const [sortOrder, setSortOrder] = useState30(0);
8366
- const [seoId, setSeoId] = useState30(null);
8367
- const [seo, setSeo] = useState30({ seoTitle: "", seoDescription: "", seoKeywords: "", seoOgTitle: "", seoOgDescription: "", seoOgImage: "" });
8368
- useEffect28(() => {
8586
+ const [loading, setLoading] = useState31(!create);
8587
+ const [saving, setSaving] = useState31(false);
8588
+ const [errors, setErrors] = useState31([]);
8589
+ const [name, setName] = useState31("");
8590
+ const [slug, setSlug] = useState31("");
8591
+ const [description, setDescription] = useState31("");
8592
+ const [logo, setLogo] = useState31("");
8593
+ const [active, setActive] = useState31(true);
8594
+ const [sortOrder, setSortOrder] = useState31(0);
8595
+ const [seoId, setSeoId] = useState31(null);
8596
+ const [seo, setSeo] = useState31({ seoTitle: "", seoDescription: "", seoKeywords: "", seoOgTitle: "", seoOgDescription: "", seoOgImage: "" });
8597
+ useEffect29(() => {
8369
8598
  if (create) return;
8370
8599
  let cancelled = false;
8371
8600
  (async () => {
@@ -8460,7 +8689,7 @@ function BrandEditPage({ brandId }) {
8460
8689
  /* @__PURE__ */ jsx57(
8461
8690
  DetailPageLayout,
8462
8691
  {
8463
- main: /* @__PURE__ */ jsxs49(Fragment12, { children: [
8692
+ main: /* @__PURE__ */ jsxs49(Fragment13, { children: [
8464
8693
  /* @__PURE__ */ jsxs49("section", { children: [
8465
8694
  /* @__PURE__ */ jsx57("h2", { className: "text-xs font-semibold text-gray-400 uppercase tracking-wider mb-2", children: "Basic info" }),
8466
8695
  /* @__PURE__ */ jsxs49("div", { className: "min-w-0 overflow-hidden border border-gray-200 rounded-lg p-4 bg-gray-50/50 space-y-4", children: [
@@ -8533,7 +8762,7 @@ function BrandEditPage({ brandId }) {
8533
8762
  /* @__PURE__ */ jsx57("div", { className: "min-w-0 overflow-hidden border border-gray-200 rounded-lg p-4 bg-gray-50/50", children: /* @__PURE__ */ jsx57(SeoSection, { values: seo, onChange: (field, value) => setSeo((s) => ({ ...s, [field]: value })) }) })
8534
8763
  ] })
8535
8764
  ] }),
8536
- sidebar: /* @__PURE__ */ jsx57(Fragment12, { children: /* @__PURE__ */ jsxs49("section", { children: [
8765
+ sidebar: /* @__PURE__ */ jsx57(Fragment13, { children: /* @__PURE__ */ jsxs49("section", { children: [
8537
8766
  /* @__PURE__ */ jsx57("h2", { className: "text-xs font-semibold text-gray-400 uppercase tracking-wider mb-2", children: "Status" }),
8538
8767
  /* @__PURE__ */ jsx57("div", { className: "min-w-0 overflow-hidden border border-gray-200 rounded-lg p-4 bg-gray-50/50", children: /* @__PURE__ */ jsxs49("label", { className: "flex items-center gap-2 cursor-pointer", children: [
8539
8768
  /* @__PURE__ */ jsx57(
@@ -8836,9 +9065,9 @@ var CRUD_CONFIGS = {
8836
9065
  }
8837
9066
  };
8838
9067
  function BlogEditorWrapper({ blogId }) {
8839
- const [blog, setBlog] = useState31(null);
8840
- const [loading, setLoading] = useState31(!!blogId);
8841
- useEffect29(() => {
9068
+ const [blog, setBlog] = useState32(null);
9069
+ const [loading, setLoading] = useState32(!!blogId);
9070
+ useEffect30(() => {
8842
9071
  if (!blogId) return;
8843
9072
  fetch(`/api/blogs/${blogId}`).then((res) => res.ok ? res.json() : null).then((data) => setBlog(data)).finally(() => setLoading(false));
8844
9073
  }, [blogId]);
@@ -8851,9 +9080,9 @@ function BlogEditorWrapper({ blogId }) {
8851
9080
  return /* @__PURE__ */ jsx58(BlogEditor, { existingBlog: blog });
8852
9081
  }
8853
9082
  function PolicyEditorWrapper({ policyId }) {
8854
- const [policy, setPolicy] = useState31(null);
8855
- const [loading, setLoading] = useState31(!!policyId);
8856
- useEffect29(() => {
9083
+ const [policy, setPolicy] = useState32(null);
9084
+ const [loading, setLoading] = useState32(!!policyId);
9085
+ useEffect30(() => {
8857
9086
  if (!policyId) return;
8858
9087
  fetch(`/api/policies/${policyId}`).then((res) => res.ok ? res.json() : null).then((data) => setPolicy(data)).finally(() => setLoading(false));
8859
9088
  }, [policyId]);
@@ -8869,7 +9098,7 @@ function AdminPageResolver({ slug }) {
8869
9098
  const router = useRouter12();
8870
9099
  const { customCrudConfigs, storeEnabled } = useContext6(AdminConfigContext);
8871
9100
  const key = slug?.[0] || "dashboard";
8872
- useEffect29(() => {
9101
+ useEffect30(() => {
8873
9102
  if (key === "layout-settings") {
8874
9103
  router.replace("/admin/settings?tab=navbar");
8875
9104
  }
@@ -8948,22 +9177,22 @@ function AdminPageResolver({ slug }) {
8948
9177
  }
8949
9178
 
8950
9179
  // src/admin/pages/LayoutSettingsPage.tsx
8951
- import { useState as useState32, useEffect as useEffect30, useContext as useContext7 } from "react";
8952
- import { Save as Save6 } from "lucide-react";
9180
+ import { useState as useState33, useEffect as useEffect31, useContext as useContext7 } from "react";
9181
+ import { Save as Save7 } from "lucide-react";
8953
9182
  import { jsx as jsx59, jsxs as jsxs51 } from "react/jsx-runtime";
8954
9183
  function LayoutSettingsPage() {
8955
9184
  const { theme } = useContext7(AdminConfigContext);
8956
- const [activeTab, setActiveTab] = useState32("navbar");
8957
- const [navbarConfig, setNavbarConfig] = useState32({
9185
+ const [activeTab, setActiveTab] = useState33("navbar");
9186
+ const [navbarConfig, setNavbarConfig] = useState33({
8958
9187
  logo: "",
8959
9188
  items: [],
8960
9189
  ctaLabel: "",
8961
9190
  ctaUrl: ""
8962
9191
  });
8963
- const [footerValues, setFooterValues] = useState32({});
8964
- const [saving, setSaving] = useState32(false);
8965
- const [loading, setLoading] = useState32(true);
8966
- useEffect30(() => {
9192
+ const [footerValues, setFooterValues] = useState33({});
9193
+ const [saving, setSaving] = useState33(false);
9194
+ const [loading, setLoading] = useState33(true);
9195
+ useEffect31(() => {
8967
9196
  fetch("/api/settings/theme").then((r) => r.ok ? r.json() : null).then((data) => {
8968
9197
  if (!data) return;
8969
9198
  if (data.navbar) {
@@ -9021,7 +9250,7 @@ function LayoutSettingsPage() {
9021
9250
  disabled: saving,
9022
9251
  className: "bg-white text-gray-800 hover:bg-gray-100 border-0 text-xs",
9023
9252
  children: [
9024
- /* @__PURE__ */ jsx59(Save6, { className: "h-4 w-4 mr-2" }),
9253
+ /* @__PURE__ */ jsx59(Save7, { className: "h-4 w-4 mr-2" }),
9025
9254
  saving ? "Saving..." : "Save"
9026
9255
  ]
9027
9256
  }