@blinkk/root-cms 3.1.4 → 3.1.6

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.
Files changed (118) hide show
  1. package/dist/app.js +3 -2
  2. package/dist/{chunk-AFBSITEO.js → chunk-PLSNGCYU.js} +200 -22
  3. package/dist/{chunk-MYN76V3L.js → chunk-U4TMO2LI.js} +2 -2
  4. package/dist/{chunk-NC3CRIFA.js → chunk-Z2CTQVYR.js} +1 -1
  5. package/dist/cli.js +1 -1
  6. package/dist/client.js +1 -1
  7. package/dist/core/client.d.ts +30 -2
  8. package/dist/core/cron-schedule.d.ts +63 -0
  9. package/dist/core/plugin.d.ts +6 -1
  10. package/dist/core/schema.d.ts +88 -3
  11. package/dist/core.js +1 -1
  12. package/dist/functions.js +2 -2
  13. package/dist/plugin.js +7 -5
  14. package/dist/richtext.js +1 -1
  15. package/dist/shared/embed-protocol.d.ts +19 -0
  16. package/dist/ui/AIPage-EO5WH25R.js +1 -0
  17. package/dist/ui/{AssetsPage-QUL2NBWK.js → AssetsPage-ESLB4R3I.js} +1 -1
  18. package/dist/ui/CollectionPage-MXN7XKUX.js +1 -0
  19. package/dist/ui/{ComparePage-DCP5QHDE.js → ComparePage-TY7VJVE3.js} +1 -1
  20. package/dist/ui/{DataPage-TUVFBALT.js → DataPage-YEIS7HBN.js} +1 -1
  21. package/dist/ui/{DataSourcePage-YE2ZOHYI.js → DataSourcePage-VD6YBDRW.js} +1 -1
  22. package/dist/ui/{DocTranslationsPage-3ILTQOP2.js → DocTranslationsPage-6XLREBPQ.js} +1 -1
  23. package/dist/ui/DocumentPage-2HNNEGRI.js +1 -0
  24. package/dist/ui/{EditDataSourcePage-WHPZDMD4.js → EditDataSourcePage-E4PSKSG3.js} +1 -1
  25. package/dist/ui/EditReleasePage-DOMXJXCU.js +1 -0
  26. package/dist/ui/EmbeddedAIPage-U5LONYH2.js +1 -0
  27. package/dist/ui/EmbeddedDocumentPage-HYV5GPK6.js +1 -0
  28. package/dist/ui/{ImageEditorDialog-Q44YTLB5.js → ImageEditorDialog-YDKOGVJV.js} +1 -1
  29. package/dist/ui/LogsPage-6KV3CQLH.js +1 -0
  30. package/dist/ui/NewDataSourcePage-NJJDHGPX.js +1 -0
  31. package/dist/ui/NewReleasePage-FXHPFUVG.js +1 -0
  32. package/dist/ui/{NotFoundPage-RMNPVSD3.js → NotFoundPage-CA7XVXUO.js} +1 -1
  33. package/dist/ui/{ProjectPage-VY4EJX6J.js → ProjectPage-XUBJSCWB.js} +1 -1
  34. package/dist/ui/ReleasePage-NLGRYJX7.js +1 -0
  35. package/dist/ui/{ReleasesPage-A4BLUNJE.js → ReleasesPage-OY7OKC3C.js} +1 -1
  36. package/dist/ui/{SettingsPage-MP3YHQDP.js → SettingsPage-5EQUY52A.js} +1 -1
  37. package/dist/ui/SidebarToolsPage-FWG6TIDI.js +1 -0
  38. package/dist/ui/TaskPage-APNRUOYG.js +1 -0
  39. package/dist/ui/TasksPage-FTEELXVZ.js +1 -0
  40. package/dist/ui/{TranslationsArbPage-B7TIRREV.js → TranslationsArbPage-PG5USRYB.js} +1 -1
  41. package/dist/ui/{TranslationsEditPage-VQG4YHA6.js → TranslationsEditPage-GV3ZJXTY.js} +1 -1
  42. package/dist/ui/{TranslationsPage-6VCVMNXI.js → TranslationsPage-3AKSMCNF.js} +1 -1
  43. package/dist/ui/{chunk-5SY2SVEX.js → chunk-235TRWJF.js} +2 -2
  44. package/dist/ui/{chunk-EYVQCOAD.js → chunk-2PTLQRTU.js} +1 -1
  45. package/dist/ui/{chunk-FF4CLAZS.js → chunk-2RRM4HEQ.js} +1 -1
  46. package/dist/ui/{chunk-MAZJRNAL.js → chunk-34W6H4YG.js} +1 -1
  47. package/dist/ui/{chunk-AZ2SK2ZK.js → chunk-3LEYSXZP.js} +1 -1
  48. package/dist/ui/{chunk-L3O3CLWO.js → chunk-44ZU5WMI.js} +1 -1
  49. package/dist/ui/{chunk-MYKJ6VAM.js → chunk-535JU7FU.js} +1 -1
  50. package/dist/ui/chunk-56NMZYX6.js +19 -0
  51. package/dist/ui/{chunk-3WQCVKK4.js → chunk-6WJQBFN5.js} +1 -1
  52. package/dist/ui/{chunk-UHK5N75L.js → chunk-75NMQ3LW.js} +1 -1
  53. package/dist/ui/{chunk-4N6CPIOQ.js → chunk-A7IZAHBZ.js} +1 -1
  54. package/dist/ui/{chunk-2PDMFZBF.js → chunk-C5FRMXDS.js} +1 -1
  55. package/dist/ui/chunk-EYJ6GKZR.js +1 -0
  56. package/dist/ui/{chunk-VB5VMEN7.js → chunk-F7RQT4XN.js} +1 -1
  57. package/dist/ui/chunk-G5647K25.js +1 -0
  58. package/dist/ui/{chunk-74OB6FM4.js → chunk-H37RXS4R.js} +1 -1
  59. package/dist/ui/{chunk-LC6WLVRS.js → chunk-HV3JJ5UT.js} +1 -1
  60. package/dist/ui/{chunk-K3UM5OQF.js → chunk-HXSB6YB2.js} +1 -1
  61. package/dist/ui/chunk-ISUGBMXC.js +1 -0
  62. package/dist/ui/{chunk-WN7HUDGY.js → chunk-JBLSUM6W.js} +1 -1
  63. package/dist/ui/chunk-LAXQZPE3.js +31 -0
  64. package/dist/ui/chunk-MYPLMHFW.js +1 -0
  65. package/dist/ui/{chunk-KBJ4AK5O.js → chunk-NCZD5IWS.js} +1 -1
  66. package/dist/ui/{chunk-XJUQOX4E.js → chunk-O7ESOZQO.js} +1 -1
  67. package/dist/ui/chunk-OWYV43BT.js +1 -0
  68. package/dist/ui/{chunk-XM35ZJBQ.js → chunk-PIJ3E47R.js} +1 -1
  69. package/dist/ui/{chunk-WAT22UHZ.js → chunk-PLYSJ7W5.js} +1 -1
  70. package/dist/ui/{chunk-H3PYPGNR.js → chunk-QFDU6FXP.js} +1 -1
  71. package/dist/ui/{chunk-JSWRHHTZ.js → chunk-QGAPMQEJ.js} +1 -1
  72. package/dist/ui/{chunk-W3ICOHMF.js → chunk-QLIIVG5Q.js} +1 -1
  73. package/dist/ui/{chunk-ELKXEMOU.js → chunk-QRAFYIAW.js} +1 -1
  74. package/dist/ui/{chunk-VRRRFAIV.js → chunk-QWB6MAPJ.js} +1 -1
  75. package/dist/ui/{chunk-GCMX5V3P.js → chunk-RB23LLKL.js} +1 -1
  76. package/dist/ui/{chunk-W2ZAVRAT.js → chunk-ST6QNIWT.js} +57 -57
  77. package/dist/ui/{chunk-76PG55CM.js → chunk-U7LSFUHT.js} +1 -1
  78. package/dist/ui/{chunk-HVYNDEA7.js → chunk-UCYWQEAS.js} +1 -1
  79. package/dist/ui/{chunk-6P75AZ3B.js → chunk-UJX25CXD.js} +1 -1
  80. package/dist/ui/chunk-UOKVF54Y.js +3 -0
  81. package/dist/ui/{chunk-CSUKZZK5.js → chunk-VJRMR2JM.js} +1 -1
  82. package/dist/ui/{chunk-WS37MDM3.js → chunk-WASID5UU.js} +1 -1
  83. package/dist/ui/chunk-WRA24P66.js +7 -0
  84. package/dist/ui/{chunk-ETPZ3TXX.js.LEGAL.txt → chunk-WRA24P66.js.LEGAL.txt} +4 -1
  85. package/dist/ui/{chunk-QHOZXW7Y.js → chunk-Y5EOMMNI.js} +1 -1
  86. package/dist/ui/{chunk-EIMRPYCD.js → chunk-YBHFGQ3Z.js} +1 -1
  87. package/dist/ui/{chunk-62VPTZJL.js → chunk-YP6ZH3MT.js} +1 -1
  88. package/dist/ui/chunk-Z2CRNO3I.js +1 -0
  89. package/dist/ui/{chunk-PR7NB5VK.js → chunk-Z3ZJJWFT.js} +1 -1
  90. package/dist/ui/{chunk-F4F5MH7A.js → chunk-ZAJPNVYS.js} +1 -1
  91. package/dist/ui/ui.css +1 -1
  92. package/dist/ui/ui.js +1 -1
  93. package/package.json +3 -3
  94. package/dist/ui/AIPage-4W4MFELY.js +0 -1
  95. package/dist/ui/CollectionPage-7VU6SUUP.js +0 -1
  96. package/dist/ui/DocumentPage-JFQ3Y2GH.js +0 -1
  97. package/dist/ui/EditReleasePage-QKWHIURV.js +0 -1
  98. package/dist/ui/EmbeddedAIPage-SQLOV4IT.js +0 -1
  99. package/dist/ui/EmbeddedDocumentPage-6FYHUHTE.js +0 -1
  100. package/dist/ui/LogsPage-RC5O722W.js +0 -1
  101. package/dist/ui/NewDataSourcePage-QXW54CHQ.js +0 -1
  102. package/dist/ui/NewReleasePage-TKYWVTOH.js +0 -1
  103. package/dist/ui/ReleasePage-VZAL4KUI.js +0 -1
  104. package/dist/ui/SidebarToolsPage-S5DMIEQ6.js +0 -1
  105. package/dist/ui/TaskPage-LCBDMA4I.js +0 -1
  106. package/dist/ui/TasksPage-72KVSUQY.js +0 -1
  107. package/dist/ui/chunk-ETPZ3TXX.js +0 -7
  108. package/dist/ui/chunk-IMXZTYAA.js +0 -3
  109. package/dist/ui/chunk-J5KDO4RM.js +0 -1
  110. package/dist/ui/chunk-NEA3XU6N.js +0 -19
  111. package/dist/ui/chunk-RN4XVVWD.js +0 -1
  112. package/dist/ui/chunk-SLLTYDVX.js +0 -1
  113. package/dist/ui/chunk-SWTNOWNE.js +0 -1
  114. package/dist/ui/chunk-V3G3554T.js +0 -31
  115. package/dist/ui/chunk-YV5SGR24.js +0 -1
  116. /package/dist/ui/{ImageEditorDialog-Q44YTLB5.js.LEGAL.txt → ImageEditorDialog-YDKOGVJV.js.LEGAL.txt} +0 -0
  117. /package/dist/ui/{chunk-5SY2SVEX.js.LEGAL.txt → chunk-235TRWJF.js.LEGAL.txt} +0 -0
  118. /package/dist/ui/{chunk-W2ZAVRAT.js.LEGAL.txt → chunk-ST6QNIWT.js.LEGAL.txt} +0 -0
@@ -1,3 +0,0 @@
1
- import{a as Z}from"./chunk-MYKJ6VAM.js";import{a as j}from"./chunk-JDW4UORS.js";import{a as Q,c as X,e as Y}from"./chunk-RN4XVVWD.js";import{c as K}from"./chunk-ATTW36EM.js";import{b as J}from"./chunk-EYVQCOAD.js";import{a as x}from"./chunk-XM35ZJBQ.js";import{d as W}from"./chunk-WS37MDM3.js";import{Ga as e,a as s,c as q,da as A,e as B,ea as P,j as re,na as b,pa as $,ua as F,va as V,za as S}from"./chunk-ETPZ3TXX.js";import{d as M}from"./chunk-KUCVLANF.js";re();var se="Enter the URL to make the HTTP request.",ne="Enter the URL of the Google Sheet, e.g. https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit#gid=SHEET_ID";function Ne(a){let{route:n}=W(),c=B(null),i=Z(),[h,d]=s(!1),[r,U]=s(i.enabled?"gsheet":"http"),[g,z]=s("map"),[v,ee]=s("GET"),[y,T]=s(!1),[w,N]=s(1),[E,H]=s("hours"),[R,C]=s(!1),[L,p]=s(""),[te,O]=s(!!a.dataSourceId),[_,G]=s(null),I="";r==="http"?I=se:r==="gsheet"&&(I=ne);async function ae(t){await J(async()=>{let o=await X(t);G(o),U(o?.type||"http"),z(o?.dataFormat||"map"),o?.cron?(T(o.cron.enabled||!1),N(o.cron.interval||1),H(o.cron.unit||"hours"),C(o.cron.autoPublish||!1)):(T(!1),N(1),H("hours"),C(!1))}),O(!1)}q(()=>{a.dataSourceId&&(O(!0),ae(a.dataSourceId))},[a.dataSourceId]);async function oe(){p("");let t=c.current;function o(l){let f=t.elements[l];return f?f.value.trim():""}let m=a.dataSourceId||o("id");if(!m){p("missing id");return}if(!j(m)){p("id is invalid (alphanumeric characters and dashes only)");return}let D=o("url");if(!D){p("missing url");return}let u={id:m,description:o("description"),type:r,url:D,previewUrl:o("previewUrl")};if(r==="http"){if(!ie(D)){p("invalid url");return}u.httpOptions={method:v};let l=o("httpHeaders");if(l&&(u.httpOptions.headers=ue(l)),v==="POST"){let f=o("httpBody");f&&(u.httpOptions.body=f)}}else if(r==="gsheet"){if(!K(D)?.spreadsheetId){p("failed to parse spreadsheet url");return}u.dataFormat=g||"map"}y?u.cron={enabled:!0,interval:w,unit:E,autoPublish:R}:u.cron={enabled:!1,interval:w,unit:E};try{G(u),d(!0),a.dataSourceId?(await Y(a.dataSourceId,u),x({title:"Saved data source",message:`Successfully updated ${m}`,autoClose:5e3}),d(!1)):(await Q(m,u),x({title:"Added data source",message:`Successfully added ${m}`,autoClose:5e3}),d(!1),n(`/cms/data/${m}`))}catch(l){console.error(l),x({title:"Failed to save data source",message:String(l),color:"red",autoClose:!1}),d(!1)}}let k=[{value:"http",label:"HTTP"}];return(i.enabled||r==="gsheet")&&k.push({value:"gsheet",label:"Google Sheet"}),e("form",{className:"DataSourceForm",ref:c,onSubmit:t=>{t.preventDefault(),oe()},children:[e($,{visible:te}),e("div",{className:"DataSourceForm__input",children:e(S,{name:"type",label:"Type",data:k,value:r,onChange:t=>U(t),size:"xs",radius:0,dropdownComponent:"div"})}),e(F,{className:"DataSourceForm__input",name:"id",label:"ID",description:"Unique identifier for the data source. Use alphanumeric characters and dashes only, e.g. grogus-favorite-meals",size:"xs",radius:0,value:a.dataSourceId,disabled:!!a.dataSourceId}),e(b,{className:"DataSourceForm__input",name:"description",label:"Description",description:"Optional.",size:"xs",radius:0,value:_?.description}),e(F,{className:"DataSourceForm__input",name:"url",label:"URL",description:I,size:"xs",radius:0,value:_?.url}),r==="http"&&e(M,{children:[e("div",{className:"DataSourceForm__input",children:e(S,{name:"httpMethod",label:"HTTP Request Method",data:[{value:"GET",label:"GET"},{value:"POST",label:"POST"}],value:v,onChange:t=>ee(t),size:"xs",radius:0,dropdownComponent:"div"})}),e(b,{className:"DataSourceForm__input",name:"httpHeaders",label:"HTTP Request Headers",description:"Format as `HeaderName: Value`, each value on its own line.",size:"xs",radius:0,value:ce(_?.httpOptions?.headers||{})}),v==="POST"&&e(b,{className:"DataSourceForm__input",name:"httpRequestBody",label:"HTTP Request Body",size:"xs",radius:0,value:_?.httpOptions?.body})]}),r==="gsheet"&&e("div",{className:"DataSourceForm__input",children:[e(S,{name:"dataFormat",label:"Data Format",data:[{value:"map",label:"map"}],value:g,onChange:t=>z(t),size:"xs",radius:0,dropdownComponent:"div"}),g==="array"&&e("div",{className:"DataSourceForm__input__example",children:["Data is stored as an array of arrays, e.g.",e("code",{children:"[[header1, header2], [foo, bar]]"})]}),g==="map"&&e("div",{className:"DataSourceForm__input__example",children:["Data is stored as an array of maps, e.g.",e("code",{children:["[","{","header1: foo, header2: bar","}","]"]})]})]}),e("div",{className:"DataSourceForm__section",children:[e("div",{className:"DataSourceForm__section__label",children:"Sync Schedule"}),e(P,{className:"DataSourceForm__input",label:"Enable scheduled sync",checked:y,onChange:t=>T(t.currentTarget.checked),size:"xs"}),y&&e("div",{className:"DataSourceForm__cron",children:[e("div",{className:"DataSourceForm__cron__row",children:[e("span",{children:"Run every"}),e(V,{className:"DataSourceForm__cron__interval",value:w,onChange:t=>N(Number(t)||1),min:1,size:"xs",radius:0}),e(S,{className:"DataSourceForm__cron__unit",data:[{value:"minutes",label:"minutes"},{value:"hours",label:"hours"},{value:"days",label:"days"}],value:E,onChange:t=>H(t),size:"xs",radius:0,dropdownComponent:"div"})]}),e(P,{className:"DataSourceForm__input",label:"Auto-publish after sync",checked:R,onChange:t=>C(t.currentTarget.checked),size:"xs"})]})]}),e(F,{className:"DataSourceForm__input",name:"previewUrl",label:"Preview URL",description:"URL where users can preview the data source.",size:"xs",radius:0,value:_?.previewUrl}),e(A,{className:"DataSourceForm__submit",color:"blue",size:"xs",type:"submit",loading:h,children:a.buttonLabel||"Save"}),L&&e("div",{className:"DataSourceForm__error",children:["Error: ",L]})]})}function ie(a){let n,c=a.startsWith("/")?"http://localhost":void 0;try{n=new URL(a,c)}catch(i){return console.error(i),!1}return n.protocol==="http:"||n.protocol==="https:"}function ue(a){let n={};return a.split(`
2
- `).forEach(i=>{let h=i.indexOf(":");if(h===-1)return;let d=i.slice(0,h).trim(),r=i.slice(h+1).trim();d&&r&&(n[d]=r)}),n}function ce(a){let n=[];for(let c in a){let i=a[c];n.push(`${c}: ${i}`)}return n.join(`
3
- `)}export{Ne as a};
@@ -1 +0,0 @@
1
- import{b as le}from"./chunk-LC6WLVRS.js";import{a as oe}from"./chunk-CSUKZZK5.js";import{a as ee,b as R,c as T}from"./chunk-JDW4UORS.js";import{a as ie}from"./chunk-YDO2EDVY.js";import{a as M}from"./chunk-5MV6XVGA.js";import{b as te}from"./chunk-EYVQCOAD.js";import{a as $}from"./chunk-XM35ZJBQ.js";import{a as j}from"./chunk-KBJ4AK5O.js";import{P as re,c as ne}from"./chunk-YV5SGR24.js";import{b as K,f as U,g as _,i as y,o as Y}from"./chunk-XOWWPE7X.js";import{d as Z,e as se}from"./chunk-WS37MDM3.js";import{A as G,Ga as f,a as p,c as w,da as P,e as v,g as B,h as I,i as W,j as O,ra as Q,ua as q,za as J}from"./chunk-ETPZ3TXX.js";import{j as X,k as Se}from"./chunk-KUCVLANF.js";function z(e){let t=window.__ROOT_CTX.collections[e.collectionId];if(!t)throw new Error(`collection not found: ${e.collectionId}`);if(!t.url)return"";let n=t.domain||window.__ROOT_CTX.rootConfig.domain||"https://example.com",r=Ee(e);return`${n}${r}`}function Ee(e){let o=window.__ROOT_CTX.collections,{collectionId:t,slug:n,locale:r}=e,s=o[t];if(!s)throw new Error(`collection not found: ${t}`);if(!s.url)return"";let l=window.__ROOT_CTX.rootConfig,g=l.base||"/",u="/[base]/[path]";r&&(u=l.i18n.urlFormat||"/[locale]/[base]/[path]");let d="",a=s?.url;if(a)if(n){let c=a.replace(/\[.*slug\]/,n).replaceAll("--","/").replace(/\/+/g,"/");c==="/index"&&(c="/"),d=c}else d=a;return ce(u,{base:g,path:d,locale:r||"",slug:n})}function ye(e){let o=window.__ROOT_CTX.collections,{collectionId:t,slug:n,locale:r}=e,s=o[t];if(!s)throw new Error(`collection not found: ${t}`);let l=window.__ROOT_CTX.rootConfig,g=l.base||"/",u="/[base]/[path]";r&&(u=l.i18n.urlFormat||"/[locale]/[base]/[path]");let d="",a=s?.previewUrl||s?.url;if(a)if(n){let c=a.replace(/\[.*slug\]/,n).replaceAll("--","/").replace(/\/+/g,"/");c==="/index"&&(c="/"),d=c}else d=a;return ce(u,{base:g,path:d,locale:r||"",slug:n})}function ce(e,o){let t=e.replaceAll(/\[\[?(\.\.\.)?([\w\-_]*)\]?\]/g,(n,r,s)=>o[s]??n);return Ce(t,{trailingSlash:window.__ROOT_CTX.rootConfig.server.trailingSlash})}function Ce(e,o){return e=e.replace(/\/+/g,"/"),o?.trailingSlash===!1&&e!=="/"&&e.endsWith("/")&&(e=e.replace(/\/*$/g,"")),(e.endsWith("/index")||e.endsWith("/index/"))&&(e=e.slice(0,-6)),e.startsWith("/")||(e=`/${e}`),o?.trailingSlash&&!e.endsWith("/")&&(e=`${e}/`),e}O();function Re(e,o){let[t,n]=p([]),[r,s]=p(!0),g=le().db,u=window.__ROOT_CTX.rootConfig.projectId||"default",d=o.includeArchived??!1,a=async()=>{s(!0);let c=K(g,"Projects",u,"Collections",e,"Drafts"),i=c,m=o.orderBy;if(m==="modifiedAt")i=_(c,y("sys.modifiedAt","desc"));else if(m==="newest")i=_(c,y("sys.createdAt","desc"));else if(m==="oldest")i=_(c,y("sys.createdAt"));else if(m==="slug")i=_(c,y(U()));else if(m==="slugDesc")i=_(c,y(U(),"desc"));else{let S=window.__ROOT_CTX.collections[e]?.sortOptions?.find(C=>C.id===m);S&&(i=S.direction==="desc"?_(c,y(S.field,"desc")):_(c,y(S.field)))}await te(async()=>{let h=await Y(i),S=[];h.docs.forEach(C=>{let k=C.data(),E=C.id,b=`${e}/${E}`,x={...k,id:b,slug:E};ne(b,x),!(!d&&x?.sys?.archivedAt)&&S.push(x)}),n(S)}),s(!1)};return w(()=>{s(!0),a()},[e,o.orderBy,d]),[r,a,t]}Se();O();var D={CONNECTED:"connected",SCHEMA_CHANGED:"schemaChanged"};function ae(e){let t=new URLSearchParams(window.location.search).get("e");return t?t.split(",").includes(e):!1}var ve="/cms/api/sse.connect",L=ae("EnableVerboseLogging"),ue=window.location.hostname==="localhost",F=class{constructor(){this.map=new Map}on(o,t){return this.map.has(o)||this.map.set(o,new Set),this.map.get(o).add(t),()=>{this.map.get(o)?.delete(t)}}emit(o,t,n){this.map.get(o)?.forEach(r=>r(t,n)),this.map.get("*")?.forEach(r=>r({type:o,data:t},n))}},fe=X(null);function Fe(e){let t=v(new F).current,n=v(null),r=v(!1),s=v({attempt:0,timer:0}),l=v(""),g=()=>{n.current&&(n.current.close(),n.current=null)},u=I(()=>{L&&console.log("[sse] connecting..."),g();let a=new EventSource(ve);n.current=a,a.addEventListener(D.CONNECTED,i=>{if(L&&console.log("[sse] connected"),r.current=!1,s.current.attempt=0,ue){let h=de(i.data)?.serverVersion||"";l.current?l.current!==h&&(console.log(`server version changed: ${l.current} -> ${h}`),console.log("reloading..."),window.location.reload()):l.current=h}});let c=i=>{if(!i||!i.type)return;let m=de(i.data);L&&console.log("[sse] event:",i.type,m),t.emit(i.type,m,i)};Object.values(D).forEach(i=>{a.addEventListener(i,c)}),a.addEventListener("error",()=>{L&&console.log("[sse] disconnected"),a.readyState===EventSource.CLOSED&&!r.current&&(r.current=!0,(()=>{let m=++s.current.attempt,h=Math.min(3e4,Math.pow(2,m)*500),S=Math.random()*.3*h,C=h+S;window.clearTimeout(s.current.timer),s.current.timer=window.setTimeout(()=>{r.current=!1,u()},C)})())})},[t]);w(()=>{if(!ue)return;u();let a=()=>{document.visibilityState==="visible"&&n.current?.readyState!==EventSource.OPEN&&u()};return document.addEventListener("visibilitychange",a),()=>{document.removeEventListener("visibilitychange",a),window.clearTimeout(s.current.timer),g()}},[u]);let d=B(()=>({emitter:t}),[t]);return f(fe.Provider,{value:d,children:e.children})}function de(e){try{return JSON.parse(e)}catch{return e}}function ge(e,o){let t=W(fe);if(!t)throw new Error("useSSE() must be used within an <SSEProvider>");let n=v(o);w(()=>{n.current=o},[o]),w(()=>t.emitter.on(e,(r,s)=>n.current(r,s)),[t,e])}O();O();function me(e){let[o,t]=p(!0),[n,r]=p(null),s=I(async()=>{try{let l=await ie(e);r(l)}catch(l){console.error(l),$({title:`Failed to load collection: ${e}`,message:String(l),color:"red",autoClose:!1})}t(!1)},[e]);return w(()=>{s()},[e]),ge(D.SCHEMA_CHANGED,async l=>{await s();let g=l.file?`Applied updates from changes to ${l.file}.`:"Applied updates from changes to a .schema.ts file.";$({title:"Updated schema!",message:g})}),{loading:o,schema:n}}function H(e){let o={_array:[]};return e.forEach(t=>{let n=we();o._array.push(n),o[n]=t}),o}function we(){let e=[],o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t=o.length;for(let n=0;n<6;n++)e.push(o.charAt(Math.floor(Math.random()*t)));return e.join("")}function V(e){let o={};return e.fields.forEach(t=>{t.id&&(t.type==="array"&&t.default&&Array.isArray(t.default)?o[t.id]=H(t.default):t.default?o[t.id]=t.default:t.type==="object"&&(o[t.id]=V(t)))}),o}function A(e,o,t){let n={...o};return e.fields.forEach(r=>{if(!r.id)return;let s=n[r.id];if(s!=null){if(r.type==="array"&&Array.isArray(s)){let l=s.map(g=>_e(r.of,g,t));n[r.id]=H(l)}else if(r.type==="object"&&M(s))n[r.id]=A(r,s,t);else if(r.type==="oneof"&&M(s)&&typeof s._type=="string"&&t){let l=t[s._type];l&&(n[r.id]=A(l,s,t))}}}),n}function _e(e,o,t){if(!M(o))return o;if(e.type==="object")return A(e,o,t);if(e.type==="oneof"&&typeof o._type=="string"&&t){let n=t[o._type];if(n)return A(n,o,t)}return o}O();function pe(e){let[o,t]=p(e.collectionId||""),n=v(null),[r,s]=p(e.initialSlug||""),l=window.__ROOT_CTX.collections[o],g=[];e.collectionId&&e.collectionDisabled?g.push({value:e.collectionId,label:e.collectionId}):Object.keys(window.__ROOT_CTX.collections).forEach(i=>{g.push({value:i,label:i})});let u="",d="";if(l?.url){if(r){let i=T(r),m=l?.slugRegex;ee(i,m)?u=z({collectionId:o,slug:i}):d=R(i,m)}else u=z({collectionId:o,slug:"[slug]"});u.endsWith("/index")&&(u=u.replace(/\/index$/,"/"))}function a(i){t(i),e.onChange&&e.onChange({collectionId:i,slug:r})}function c(i){s(i),e.onChange&&e.onChange({collectionId:o,slug:i})}return f("div",{className:se(e.className,"SlugInput"),children:[f("div",{className:"SlugInput__inputs",children:[f(J,{className:"SlugInput__collection",placeholder:"Collection",size:"xs",data:g,onChange:i=>a(i),value:o,disabled:!!e.collectionDisabled}),f("div",{className:"SlugInput__divider",children:"/"}),f(q,{className:"SlugInput__slug",name:"slug",ref:n,value:r,onChange:i=>{c(i.currentTarget.value)},placeholder:"slug",autoComplete:"off",size:"xs"})]}),u&&f(j,{className:"SlugInput__urlHelp",size:"body-sm",children:u}),d&&f(j,{className:"SlugInput__slugError",size:"body-sm",children:d})]})}function bt(e){let{route:o}=Z(),t=G(),n=e.collection,r=window.__ROOT_CTX.collections[n];if(!r)throw new Error(`collection not found: ${n}`);let[s]=p(()=>r.autoSlug?oe(r.autoSlug):""),[l,g]=p(s),[u,d]=p(!1),[a,c]=p(()=>S(s)),[i,m]=p(""),h=me(n);function S(E){let b=T(E);return b?R(b,r.slugRegex):""}function C(){e.onClose&&e.onClose()}async function k(E){if(E.preventDefault(),d(!0),c(""),S(l)){d(!1);return}let x=T(l),he=`${n}/${x}`;try{let N={};!h.loading&&h.schema&&(N=await V(h.schema)),await re(he,{fields:N})}catch(N){m(String(N)),d(!1);return}d(!1),e.skipNavigation?C():o(`/cms/content/${e.collection}/${x}`)}return f(Q,{className:"NewDocModal",opened:e.opened||!1,onClose:()=>C(),title:"New",size:"500px",overlayColor:t.colorScheme==="dark"?t.colors.dark[9]:t.colors.gray[2],children:[f("div",{className:"NewDocModal__body",children:"Enter a slug for the new doc. The slug is the ID of the page and is what's used in the URL. Use only lowercase letters, numbers, and dashes."}),f("form",{onSubmit:E=>k(E),children:[f(pe,{className:"NewDocModal__slug",collectionId:n,initialSlug:s,onChange:E=>{g(E.slug),c(S(E.slug)),m("")}}),i&&f("div",{className:"NewDocModal__slugError",children:i}),f("div",{className:"NewDocModal__buttons",children:[f(P,{variant:"outline",onClick:()=>C(),type:"button",size:"xs",color:"dark",children:"Cancel"}),f(P,{variant:"filled",type:"submit",size:"xs",color:"dark",loading:h.loading||u,disabled:!!a||!!i,children:"Submit"})]})]})]})}export{z as a,Ee as b,ye as c,pe as d,Re as e,Fe as f,me as g,V as h,A as i,bt as j};
@@ -1,19 +0,0 @@
1
- import{a as Nt,b as Pt,c as Et,d as St,e as zt,f as jt,g as Dt,h as Lt,i as $t,j as Bt,k as Ut,l as Ot,m as Wt,n as Ht,o as nt}from"./chunk-V3G3554T.js";import{a as wt}from"./chunk-VRRRFAIV.js";import{a as Tt,c as at}from"./chunk-5SY2SVEX.js";import{P as kt,T as Mt}from"./chunk-AAR7DBEN.js";import{f as Y}from"./chunk-5MV6XVGA.js";import{b as _t,c as mt,g as ut,h as ht,j as ft,n as q,o as gt,p as xt,r as Ct,v as G}from"./chunk-XOWWPE7X.js";import{d as At,e as N}from"./chunk-WS37MDM3.js";import{$a as tt,Ec as yt,Fa as H,Ga as o,Sc as Rt,V as J,W as P,Za as Q,Zc as U,_a as Z,a as h,ba as X,c as k,da as z,e as v,g as pt,h as M,hc as et,j as oe,mb as vt,mc as ot,nc as bt,qa as B,yc as j}from"./chunk-ETPZ3TXX.js";import{d as ct}from"./chunk-KUCVLANF.js";import{h as It}from"./chunk-7SK47HHZ.js";oe();var ae=500;function Ft(){return window.firebase.db}function Vt(){return window.__ROOT_CTX.rootConfig.projectId}function it(){return window.firebase.user?.email||""}function ne(){return _t(Ft(),"Projects",Vt(),"AiChats")}function rt(t){return mt(Ft(),"Projects",Vt(),"AiChats",t)}function D(t){return t&&typeof t.toMillis=="function"?t.toMillis():typeof t=="number"?t:0}async function Kt(t){let e=it();if(!e)return[];let a=t?.limit,n=typeof a=="number"&&Number.isFinite(a)&&a>0?Math.min(Math.floor(a),100):50,p=ut(ne(),ht("createdBy","==",e),ft(ae)),s=(await gt(p)).docs.map(l=>l.data());return s.sort((l,g)=>D(g.modifiedAt)-D(l.modifiedAt)),s.slice(0,n).map(l=>({id:l.id,title:l.title,modelId:l.modelId,createdAt:D(l.createdAt),modifiedAt:D(l.modifiedAt)}))}async function st(t){let e=await q(rt(t));if(!e.exists())return null;let a=e.data();return a.createdBy!==it()?null:{id:a.id||t,title:a.title,modelId:a.modelId,createdAt:D(a.createdAt),modifiedAt:D(a.modifiedAt),messages:a.messages||[]}}async function Jt(t,e){let a=it(),n=rt(t),p=await q(n);if(p.exists()&&p.data().createdBy!==a)throw new Error("chat is owned by another user");let _={id:t,createdBy:a,modifiedAt:G(),messages:$t(e.messages)};p.exists()||(_.createdAt=G()),e.modelId&&(_.modelId=e.modelId),e.title&&(_.title=e.title),await xt(n,_,{merge:!0})}async function Xt(t){await st(t)&&await Ct(rt(t))}async function qt(t,e){let a=St(e);if(a==="New chat")return a;let n=zt(e);if(!n)return a;try{let p=Et(Pt(t)),_=await kt({model:p,system:Dt,prompt:Lt(n),maxOutputTokens:64,temperature:.3}),s=jt(_.text);if(s)return s}catch(p){console.error("failed to generate chat title:",p)}return a}function Gt(t){let{size:e=14}=t,a=e*3.57,n=e*2;return o("div",{className:"BouncingLoader",style:{"--dot-size":`${e}px`,width:`${a}px`,height:`${n}px`}})}var lt=[{id:"read",label:"Read only",description:"Inspect CMS content without planning or applying writes."},{id:"approve",label:"Ask before writing",description:"Read freely, then pause for approval before draft edits."},{id:"auto",label:"Auto-apply draft edits",description:"Apply draft-only writes without approval in this chat."}],te="root-cms.ai.executionMode",ee="root-cms.ai.selectedModel";function ie(t){return lt.some(e=>e.id===t)}function re(){if(typeof window>"u")return"approve";try{let t=window.localStorage.getItem(te);if(ie(t))return t}catch(t){console.error("failed to read AI execution mode preference",t)}return"approve"}function se(t){if(typeof window>"u")return null;try{let e=window.localStorage.getItem(ee);if(e&&t.some(a=>a.id===e))return e}catch(e){console.error("failed to read AI model preference",e)}return null}function le(t){if(!(typeof window>"u"))try{window.localStorage.setItem(ee,t)}catch(e){console.error("failed to save AI model preference",e)}}function de(t){if(!(typeof window>"u"))try{window.localStorage.setItem(te,t)}catch(e){console.error("failed to save AI execution mode preference",e)}}var F="";function mo(t){let[e,a]=h(null),[n,p]=h("");k(()=>{let s=!0;return fetch("/cms/api/ai.config",{credentials:"include"}).then(async l=>{let g=await l.json();s&&a(g)}).catch(l=>{s&&p(String(l))}),()=>{s=!1}},[]);let _=!!e?.enabled&&(e.models?.length||0)>0;return o("div",{className:N("RootAIChat",`RootAIChat--${t.variant}`),children:!e&&!n?o("div",{className:"RootAIChat__loading",children:o(J,{size:"md",color:"gray"})}):_?o(pe,{variant:t.variant,config:e,initialChatId:t.variant==="panel"?void 0:t.initialChatId,docContext:t.docContext,onClose:t.onClose}):o(ce,{error:n,onClose:t.onClose})})}function ce(t){return o("div",{className:"RootAIChat__notEnabled",children:[t.onClose&&o(P,{className:"RootAIChat__notEnabled__close",onClick:t.onClose,title:"Close",children:o(U,{size:16})}),o("div",{className:"RootAIChat__notEnabled__icon",children:o(j,{size:36})}),o("div",{className:"RootAIChat__notEnabled__title",children:"Root AI is not configured for this project."}),o("div",{className:"RootAIChat__notEnabled__body",children:["Add an ",o("code",{children:"ai.models"})," entry to ",o("code",{children:"cmsPlugin()"})," in"," ",o("code",{children:"root.config.ts"}),"."]}),t.error&&o("pre",{className:"RootAIChat__notEnabled__error",children:t.error})]})}function pe(t){let e=t.variant==="panel",{route:a}=At(),n=t.config.models||[],p=()=>se(n)||t.config.defaultModel||n[0]?.id||"",[_,s]=h(p),[l,g]=h(re),[f,b]=h(t.initialChatId||F),[y,C]=h(t.initialChatId||F),[E,d]=h([]),[x,A]=h(""),[I,T]=h([]),[V,O]=h(0),S=async()=>{if(!e)try{let i=await Kt();T(i)}catch(i){console.error("failed to load chat list",i)}};k(()=>{S(),!e&&t.initialChatId&&K(t.initialChatId)},[]),k(()=>{de(l)},[l]);let L=async i=>{try{let u=await st(i);return u?(b(i),C(i),d(u.messages||[]),A(u.title||""),u.modelId&&n.find(R=>R.id===u.modelId)&&s(u.modelId),O(w=>w+1),!0):!1}catch(u){return console.error("failed to load chat",u),!1}},K=i=>L(i),$=()=>{s(p()),b(F),C(F),d([]),A(""),O(i=>i+1),e||a("/cms/ai")},W=async i=>{if(i===y)return;await L(i)&&!e&&a(`/cms/ai/chat/${i}`)},r=async i=>{try{await Xt(i),y===i&&$(),S()}catch(u){console.error("failed to delete chat",u)}},m=n.find(i=>i.id===_)||n[0],c=i=>{s(i),le(i)};return o("div",{className:"RootAIChat__layout",children:[!e&&o(me,{chats:I,activeChatId:y,onSelect:W,onNew:$,onDelete:r}),o("div",{className:"RootAIChat__main",children:[e&&o(_e,{onNewChat:$,onClose:t.onClose}),o(he,{initialChatId:f,initialTitle:x,model:m,initialMessages:E,executionMode:l,canAutoApply:t.config.canAutoApply??!1,models:n,selectedModel:m,docContext:t.docContext,onSelectModel:c,onSelectExecutionMode:g,onChatPersisted:i=>{C(i),S(),e||window.history.replaceState(null,"",`/cms/ai/chat/${i}`)}},V)]})]})}function _e(t){return o("div",{className:"RootAIChat__panelHeader",children:[o("div",{className:"RootAIChat__panelHeader__title",children:[o(j,{size:14}),o("span",{children:"Root AI"})]}),o("div",{className:"RootAIChat__panelHeader__actions",children:[o(H,{label:"New chat",children:o(P,{size:"xs",onClick:t.onNewChat,children:o(et,{size:14})})}),t.onClose&&o(H,{label:"Close (\u2318 + i)",children:o(P,{size:"xs",onClick:t.onClose,children:o(U,{size:14})})})]})]})}function me(t){return o("aside",{className:"RootAIChat__sidebar",children:[o("button",{type:"button",className:"RootAIChat__sidebar__newButton",onClick:t.onNew,children:[o(et,{size:18}),o("span",{children:"New chat"})]}),o("div",{className:"RootAIChat__sidebar__list",children:[t.chats.length===0&&o("div",{className:"RootAIChat__sidebar__empty",children:"No chats yet."}),t.chats.map(e=>o("div",{className:N("RootAIChat__sidebar__item",e.id===t.activeChatId&&"RootAIChat__sidebar__item--active"),onClick:()=>t.onSelect(e.id),children:[o("div",{className:"RootAIChat__sidebar__item__title",title:e.title||"Untitled chat",children:e.title||"Untitled chat"}),o("button",{type:"button",className:"RootAIChat__sidebar__item__delete",title:"Delete chat",onClick:a=>{a.stopPropagation(),window.confirm("Delete this chat?")&&t.onDelete(e.id)},children:o(Rt,{size:14})})]},e.id))]})]})}function ue(t){let e=t.canAutoApply?lt:lt.filter(n=>n.id!=="auto"),a=e.find(n=>n.id===t.executionMode)||e[0];return o("div",{className:"RootAIChat__options",children:[o(B,{control:o(z,{type:"button",className:"RootAIChat__modePicker",variant:"subtle",color:"dark",size:"xs",compact:!0,leftIcon:o(bt,{size:16}),children:a.label}),children:e.map(n=>o(B.Item,{onClick:()=>t.onSelectExecutionMode(n.id),children:o("div",{className:"RootAIChat__modePicker__option",children:[o("div",{className:"RootAIChat__modePicker__option__label",children:n.label}),o("div",{className:"RootAIChat__modePicker__option__description",children:n.description})]})},n.id))}),o(B,{control:o(z,{type:"button",className:"RootAIChat__modelPicker",variant:"subtle",color:"dark",size:"xs",compact:!0,leftIcon:o(j,{size:16}),children:t.selectedModel?.label||"Select model"}),children:t.models.map(n=>o(B.Item,{onClick:()=>t.onSelectModel(n.id),children:o("div",{className:"RootAIChat__modelPicker__option",children:[o("div",{className:"RootAIChat__modelPicker__option__label",children:n.label}),n.description&&o("div",{className:"RootAIChat__modelPicker__option__description",children:n.description})]})},n.id))})]})}function he(t){let[e]=h(()=>t.initialChatId||Se()),a=v(t.model?.id);a.current=t.model?.id;let n=v(t.executionMode);n.current=t.executionMode;let p=v(t.docContext);p.current=t.docContext;let _=v(t.onChatPersisted);_.current=t.onChatPersisted;let s=v(null),l=v(t.executionMode),g=v(t.initialTitle),f=v(null),[b,y]=h({}),C=v({});k(()=>()=>{for(let r of Object.values(C.current))r("reject");C.current={}},[]);let E=M((r,m,c,i)=>new Promise(u=>{C.current[r]=u,y(w=>({...w,[r]:{toolCallId:r,toolName:m,input:c,preview:i,status:"pending"}}))}),[]),d=M(r=>{y(m=>{let c=m[r];return c?{...m,[r]:{...c,status:"executing"}}:m}),C.current[r]?.("approve"),delete C.current[r]},[]),x=M(r=>{y(m=>{let c={...m};return delete c[r],c}),C.current[r]?.("reject"),delete C.current[r]},[]),A=M(async r=>{if(!Wt(r.toolName))return await nt(r.toolName,r.input);let m=l.current;if(m==="read")return{success:!1,error:"WRITE_BLOCKED_BY_MODE",message:"The current execution mode is read only. Do not call write tools."};let c;try{c=await Ht(r.toolName,r.input)}catch(i){return{success:!1,error:"PREVIEW_FAILED",message:i?.message||String(i)}}if(c.error)return{success:!1,error:c.error,message:c.summary,errors:c.errors,hint:c.hint};if(m==="approve"&&await E(r.toolCallId,r.toolName,r.input,c)==="reject")return{success:!1,error:"USER_REJECTED",message:"The user rejected this draft change. Do not retry unless they ask for a revised version."};try{return await nt(r.toolName,r.input)}finally{y(i=>{if(!i[r.toolCallId])return i;let u={...i};return delete u[r.toolCallId],u})}},[E]),I=M(async r=>{let m=s.current;try{let c=g.current;if(!c&&m){let i=await qt(m,r);i&&i!=="New chat"&&(c=i,g.current=i)}await Jt(e,{messages:r,modelId:m?.id||a.current,title:c||void 0})}catch(c){console.error("failed to persist chat history",c)}_.current(e)},[e]),T=pt(()=>Bt({loadTurnConfig:async()=>{let r=a.current,m=n.current,c=p.current?.docId,i=`${r}|${m}|${c||""}`,u=f.current;if(u&&u.key===i)return u.config;let w=await fetch("/cms/api/ai.chat.prepare",{method:"POST",credentials:"include",headers:{"content-type":"application/json"},body:JSON.stringify({modelId:r,executionMode:m,docId:c})}),R=await w.json();if(!w.ok||!R.success)throw new Error(R.error||`ai.chat.prepare failed: ${w.status}`);let dt={model:R.model,system:R.system,maxSteps:R.maxSteps};return s.current=R.model,l.current=R.executionMode||m,f.current={key:i,config:dt},dt},buildTools:r=>r.capabilities.tools?l.current==="read"?Ot():Ut():{},onFinish:I}),[I]),{messages:V,sendMessage:O,status:S,error:L,stop:K,addToolOutput:$}=Nt({id:e,messages:t.initialMessages,transport:T,sendAutomaticallyWhen:Mt,onToolCall:async({toolCall:r})=>{let m=await A(r);$({tool:r.toolName,toolCallId:r.toolCallId,output:m})}}),W=S==="streaming"||S==="submitted";return o(ct,{children:[o(fe,{messages:V,isStreaming:W,emptyMessage:t.model?void 0:"Select a model to start.",toolApprovals:{approvals:b,onApprove:d,onReject:x}}),L&&o("div",{className:"RootAIChat__error",children:[o("strong",{children:"Error:"})," ",L.message]}),o(ke,{disabled:!t.model,canAttach:t.model?.capabilities.attachments??!1,isStreaming:W,onStop:K,controls:o(ue,{models:t.models,selectedModel:t.selectedModel,onSelectModel:t.onSelectModel,executionMode:t.executionMode,canAutoApply:t.canAutoApply,onSelectExecutionMode:t.onSelectExecutionMode}),onSend:(r,m)=>{if(!r&&m.length===0)return;let c=Me(m),i=[r,c.text].filter(Boolean).join(`
2
-
3
- `);O({text:i,files:c.files.map(u=>({type:"file",mediaType:u.mediaType,url:u.url,filename:u.filename}))})}})]})}function fe(t){let e=v(null);return k(()=>{let a=e.current;a&&(a.scrollTop=a.scrollHeight)},[t.messages]),t.messages.length===0?o("div",{className:"RootAIChat__transcript RootAIChat__transcript--empty",ref:e,children:o("div",{className:"RootAIChat__welcome",children:[o("div",{className:"RootAIChat__welcome__icon",children:o(j,{size:36})}),o("div",{className:"RootAIChat__welcome__title",children:"Root AI"}),o("div",{className:"RootAIChat__welcome__body",children:t.emptyMessage||"What are we going to get done today?"})]})}):o("div",{className:"RootAIChat__transcript",ref:e,children:o("div",{className:"RootAIChat__transcript__inner",children:[t.messages.map(a=>o(ge,{message:a,toolApprovals:t.toolApprovals},a.id)),t.isStreaming&&o("div",{className:"RootAIChat__streamingIndicator",children:o(Gt,{size:6})})]})})}function ge(t){let e=t.message,a=e.role==="user",n=a?"You":"Root AI",p=a?window.firebase.user?.photoURL:null,[_,s]=h(!1),l=M(()=>(e.parts||[]).filter(f=>f.type==="text"&&f.text).map(f=>f.text).join(`
4
-
5
- `),[e.parts]),g=M(async()=>{let f=l();if(!f)return;let b=Tt.parse(f);try{await navigator.clipboard.write([new ClipboardItem({"text/html":new Blob([b],{type:"text/html"}),"text/plain":new Blob([f],{type:"text/plain"})})]),s(!0),setTimeout(()=>s(!1),2e3)}catch{await navigator.clipboard.writeText(f),s(!0),setTimeout(()=>s(!1),2e3)}},[l]);return o("div",{className:N("RootAIChat__message",`RootAIChat__message--${e.role}`),children:[o("div",{className:"RootAIChat__message__avatar",children:p?o("img",{src:p,alt:n}):o(j,{size:20})}),o("div",{className:"RootAIChat__message__body",children:[o("div",{className:"RootAIChat__message__username",children:n}),o("div",{className:"RootAIChat__message__parts",children:(e.parts||[]).map((f,b)=>o(xe,{part:f,toolApprovals:t.toolApprovals},b))}),o("button",{type:"button",className:N("RootAIChat__message__copy",_&&"RootAIChat__message__copy--copied"),title:_?"Copied!":"Copy message",onClick:g,children:_?o(Q,{size:14}):o(vt,{size:14})})]})]})}function xe(t){let e=t.part;return e.type==="text"?e.text?o("div",{className:"RootAIChat__textPart",children:o(at,{code:e.text})}):null:e.type==="reasoning"?o(Ce,{text:e.text}):e.type==="file"?o(Ae,{part:e}):e.type==="source-url"?o("a",{className:"RootAIChat__sourcePart",href:e.url,target:"_blank",rel:"noopener noreferrer",children:e.title||e.url}):typeof e.type=="string"&&e.type.startsWith("tool-")?o(Yt,{part:e,toolApprovals:t.toolApprovals}):e.type==="dynamic-tool"?o(Yt,{part:e,toolApprovals:t.toolApprovals}):e.type==="step-start"?null:o("div",{className:"RootAIChat__unknownPart",children:o("pre",{children:JSON.stringify(e,null,2)})})}function Ce(t){let[e,a]=h(!1);return t.text?o("div",{className:N("RootAIChat__reasoning",e&&"RootAIChat__reasoning--open"),children:[o("button",{type:"button",className:"RootAIChat__reasoning__toggle",onClick:()=>a(!e),children:[o(Z,{size:14,style:{transform:e?"rotate(0deg)":"rotate(-90deg)"}}),o("span",{children:"Thinking"})]}),e&&o("div",{className:"RootAIChat__reasoning__body",children:o(at,{code:t.text})})]}):null}function Ae(t){let e=t.part;return e.mediaType?.startsWith("image/")?o("div",{className:"RootAIChat__filePart",children:o("img",{src:e.url,alt:e.filename||"attachment"})}):o("a",{className:"RootAIChat__filePart RootAIChat__filePart--link",href:e.url,target:"_blank",rel:"noopener noreferrer",children:[o(ot,{size:14}),o("span",{children:e.filename||e.url})]})}function Yt(t){let e=t.part,a=typeof e.type=="string"&&e.type.startsWith("tool-")?e.type.slice(5):e.toolName||"tool",n=e.state||"",p=Ie(e),_=t.toolApprovals,s=p?_?.approvals[p]:void 0,[l,g]=h(!!s);return k(()=>{s&&g(!0)},[s]),o("div",{className:"RootAIChat__tool",children:[o("button",{type:"button",className:"RootAIChat__tool__header",onClick:()=>g(!l),children:[o(Z,{className:N("RootAIChat__tool__header__icon",l&&"RootAIChat__tool__header__icon--open"),size:14}),o(X,{color:"dark",variant:"filled",size:"xs",children:a}),o("span",{className:"RootAIChat__tool__title",children:ve(a,e.input)}),o("span",{className:"RootAIChat__tool__state",children:s?Re(s.status):we(n)})]}),l&&o("div",{className:"RootAIChat__tool__body",children:[s&&_&&o(be,{approval:s,onApprove:()=>_.onApprove(s.toolCallId),onReject:()=>_.onReject(s.toolCallId)}),e.output?.receipt&&o(ye,{output:e.output}),e.input&&o("details",{children:[o("summary",{children:[o(tt,{size:14,className:"RootAIChat__tool__json__icon"}),o("span",{children:"Input"})]}),o("pre",{children:JSON.stringify(e.input,null,2)})]}),e.output&&o("details",{children:[o("summary",{children:[o(tt,{size:14,className:"RootAIChat__tool__json__icon"}),o("span",{children:"Output"})]}),o("pre",{children:JSON.stringify(e.output,null,2)})]}),e.errorText&&o("div",{className:"RootAIChat__tool__error",children:e.errorText})]})]})}function Ie(t){return t.toolCallId||t.id||""}function ve(t,e){switch(t){case"collections_list":return"List collections";case"docs_list":return`List ${e?.collectionId||"documents"}`;case"docs_search":return`Search docs${e?.query?` for "${e.query}"`:""}`;case"doc_get":return`Read ${e?.docId||"document"}`;case"doc_getVersion":return`Read ${e?.docId||"document"} version`;case"doc_set":return`Replace ${e?.docId||"draft fields"}`;case"doc_create":return`Create ${e?.docId||"draft document"}`;case"doc_updateField":return`Update ${e?.path||"field"}`;case"doc_edit":return`Edit ${e?.docId||"document"}`;case"doc_duplicate":return`Duplicate ${e?.fromDocId||"document"}`;case"doc_listVersions":return`List versions for ${e?.docId||"document"}`;case"doc_translateField":return"Translate field text";case"schema_get":return`Read ${e?.collectionId||"collection"} schema`;default:return t}}function be(t){let e=t.approval.preview,a=e.before!==void 0&&e.after!==void 0;return o("div",{className:"RootAIChat__approval",children:[o("div",{className:"RootAIChat__approval__header",children:[o("div",{children:[o("div",{className:"RootAIChat__approval__title",children:e.title}),o("div",{className:"RootAIChat__approval__summary",children:e.summary})]}),o(X,{className:"RootAIChat__approval__status",variant:"light",color:"gray",children:t.approval.status==="executing"?"Applying":"Review"})]}),e.details.length>0&&o("div",{className:"RootAIChat__approval__details",children:e.details.map(n=>o("div",{children:[o("span",{children:n.label}),o("strong",{children:n.value})]},`${n.label}:${n.value}`))}),a&&o(wt,{className:"RootAIChat__approval__diff",oldCode:Y(e.before),newCode:Y(e.after)}),o("div",{className:"RootAIChat__approval__actions",children:[o(z,{variant:"default",color:"dark",size:"xs",type:"button",className:"RootAIChat__approval__button",disabled:t.approval.status==="executing",onClick:t.onReject,children:"Reject"}),o(z,{variant:"filled",color:"green",size:"xs",type:"button",className:"RootAIChat__approval__button RootAIChat__approval__button--primary",disabled:t.approval.status==="executing",onClick:t.onApprove,children:"Approve draft edit"})]})]})}function ye(t){let e=t.output.receipt;return o("div",{className:"RootAIChat__receipt",children:[o("div",{className:"RootAIChat__receipt__title",children:[o(Q,{size:14}),o("span",{children:e.title})]}),o("div",{className:"RootAIChat__receipt__summary",children:e.summary}),e.details?.length>0&&o("div",{className:"RootAIChat__receipt__details",children:e.details.map(a=>o("div",{children:[o("span",{children:a.label}),o("strong",{children:a.value})]},`${a.label}:${a.value}`))}),e.adminUrl&&o(z,{component:"a",className:"RootAIChat__receipt__link",variant:"default",size:"xs",compact:!0,href:e.adminUrl,children:"Open document"})]})}function Re(t){return t==="executing"?"applying\u2026":"waiting for approval"}function we(t){switch(t){case"input-streaming":return"preparing\u2026";case"input-available":return"running\u2026";case"output-available":return"done";case"output-error":return"error";default:return t}}function ke(t){let[e,a]=h(""),[n,p]=h([]),[_,s]=h(!1),l=v(null),g=v(null);k(()=>{window.requestAnimationFrame(()=>{let d=g.current;d&&(d.style.height="auto",d.style.height=`${Math.min(d.scrollHeight,240)}px`)})},[e,n]);let b=()=>{t.disabled||t.isStreaming||!e&&n.length===0||(t.onSend(e,n),a(""),p([]),l.current&&(l.current.value=""))},y=d=>{d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),b())},C=async d=>{s(!0);try{let x=d.type||Ee(d.name),A=await Te(d,x),I=await It(d,{disableGci:!0});p(T=>[...T,{url:I.src,filename:I.filename||d.name,mediaType:x,textContent:A?.text,textTruncated:A?.truncated,width:I.width,height:I.height}])}catch(x){console.error("upload failed",x)}finally{s(!1),l.current&&(l.current.value="")}},E=d=>{let x=d.target;Array.from(x.files||[]).forEach(C)};return o("div",{className:"RootAIChat__composer",children:[n.length>0&&o("div",{className:"RootAIChat__composer__attachments",children:n.map((d,x)=>o("div",{className:"RootAIChat__composer__attachment",children:[d.mediaType.startsWith("image/")?o("img",{src:d.url,alt:d.filename}):o("span",{className:"RootAIChat__composer__attachment__name",children:d.filename}),o("button",{type:"button",className:"RootAIChat__composer__attachment__remove",onClick:()=>p(A=>A.filter((I,T)=>T!==x)),children:o(U,{size:12})})]},x))}),o("div",{className:"RootAIChat__composer__row",children:[o(H,{label:t.canAttach?"Attach file":"Model doesn't support attachments",className:"RootAIChat__composer__attachTooltip",children:o(P,{component:"label",radius:"xl",className:N("RootAIChat__composer__attach",!t.canAttach&&"RootAIChat__composer__attach--disabled"),disabled:!t.canAttach,children:[_?o(J,{size:"xs"}):o(ot,{size:18}),o("input",{ref:l,type:"file",style:{display:"none"},onChange:E})]})}),o("textarea",{ref:g,className:"RootAIChat__composer__textarea",placeholder:t.disabled?"Select a model\u2026":"Ask anything\u2026",value:e,rows:1,autofocus:!0,disabled:t.disabled,onKeyDown:y,onChange:d=>a(d.target.value),onPaste:d=>{let x=d.clipboardData?.items||[];for(let A of x)if(A.kind==="file"){let I=A.getAsFile();I&&t.canAttach&&C(I)}}}),t.isStreaming?o(P,{className:"RootAIChat__composer__button RootAIChat__composer__stopButton",radius:"xl",color:"dark",variant:"filled",onClick:t.onStop,title:"Stop",children:o(U,{size:18})}):o(P,{className:"RootAIChat__composer__button RootAIChat__composer__submitButton",radius:"xl",color:"dark",variant:"filled",disabled:t.disabled||_||!e&&n.length===0,onClick:b,title:"Send",children:o(yt,{size:18})})]}),t.controls]})}var Qt=1e5;function Me(t){let e=t.filter(Zt),a=t.filter(n=>!Zt(n)).map(Ne);return{files:e,text:a.length?`Attached files:
6
-
7
- ${a.join(`
8
-
9
- `)}`:""}}function Zt(t){return t.mediaType.startsWith("image/")}function Ne(t){let e=`File: ${t.filename} (${t.mediaType})`;if(t.textContent!==void 0){let a=t.textTruncated?`
10
-
11
- [Content truncated before sending to the model.]`:"";return`${e}
12
- URL: ${t.url}
13
-
14
- ~~~
15
- ${t.textContent}${a}
16
- ~~~`}return`${e}
17
- URL: ${t.url}
18
-
19
- [The file was uploaded, but its binary content was not inlined into this chat message.]`}async function Te(t,e){if(!Pe(t.name,e))return null;let a=await t.text();return a.length<=Qt?{text:a,truncated:!1}:{text:a.slice(0,Qt),truncated:!0}}function Pe(t,e){return e.startsWith("text/")?!0:[".css",".js",".jsx",".json",".md",".mdx",".mjs",".scss",".ts",".tsx",".txt",".yaml",".yml"].some(a=>t.toLowerCase().endsWith(a))}function Ee(t){let e=t.toLowerCase();return e.endsWith(".png")?"image/png":e.endsWith(".webp")?"image/webp":e.endsWith(".jpg")||e.endsWith(".jpeg")?"image/jpeg":e.endsWith(".gif")?"image/gif":e.endsWith(".svg")?"image/svg+xml":e.endsWith(".pdf")?"application/pdf":e.endsWith(".json")?"application/json":e.endsWith(".csv")?"text/csv":e.endsWith(".md")?"text/markdown":e.endsWith(".txt")?"text/plain":"application/octet-stream"}function Se(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`chat-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}export{mo as a};
@@ -1 +0,0 @@
1
- import{a as _,c as P}from"./chunk-ATTW36EM.js";import{D as u,a as w,b as j,c as n,g as T,n as b,o as R,p as I,q as m,u as h,v as l,x as f}from"./chunk-XOWWPE7X.js";async function F(t,a){if(!t)throw new Error("missing data source id");let o=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,s=n(e,"Projects",o,"DataSources",t);await I(s,{...a,id:t,createdAt:l(),createdBy:window.firebase.user.email}),u("datasource.create",{metadata:{datasourceId:t}})}async function G(){let t=window.__ROOT_CTX.rootConfig.projectId,a=window.firebase.db,o=j(a,"Projects",t,"DataSources"),e=T(o),s=await R(e),r=[];return s.forEach(c=>{r.push(c.data())}),r}async function S(t){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,e=n(o,"Projects",a,"DataSources",t),s=await b(e);return s.exists()?s.data():null}async function O(t,a){let o=a?.mode||"draft",e=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,r=n(s,"Projects",e,"DataSources",t,"Data",o),c=await b(r);return c.exists()?c.data():null}async function U(t,a){let o=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,s=n(e,"Projects",o,"DataSources",t);await m(s,a),u("datasource.save",{metadata:{datasourceId:t}})}async function q(t){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,e=n(o,"Projects",a,"DataSources",t);await m(e,{archivedAt:l(),archivedBy:window.firebase.user.email}),u("datasource.archive",{metadata:{datasourceId:t}})}async function H(t){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,e=n(o,"Projects",a,"DataSources",t);await m(e,{archivedAt:h(),archivedBy:h()}),u("datasource.unarchive",{metadata:{datasourceId:t}})}async function W(t){let a=await S(t);if(!a)throw new Error(`data source not found: ${t}`);if(a.archivedAt)throw new Error(`data source is archived: ${t}`);if(a.type==="http"&&a.url&&!C(a.url)){let o=await fetch("/cms/api/data.sync",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:a.id})});if(o.status!==200){let e=await o.text();throw new Error(`sync failed: ${e}`)}}else{let{data:o,headers:e}=await x(a),s=window.__ROOT_CTX.rootConfig.projectId,r=window.firebase.db,c=n(r,"Projects",s,"DataSources",t),d=n(r,"Projects",s,"DataSources",t,"Data","draft"),p={...a,syncedAt:w.now(),syncedBy:window.firebase.user.email},i=f(r);i.set(d,{dataSource:p,data:o,...e?{headers:e}:{}}),i.update(c,{syncedAt:w.now(),syncedBy:window.firebase.user.email}),await i.commit()}console.log(`synced data source: ${t}`),u("datasource.sync",{metadata:{datasourceId:t}})}async function M(t){let a=await S(t);if(!a)throw new Error(`data source not found: ${t}`);if(a.archivedAt)throw new Error(`data source is archived: ${t}`);let o=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,s=n(e,"Projects",o,"DataSources",t),r=n(e,"Projects",o,"DataSources",t,"Data","draft"),c=n(e,"Projects",o,"DataSources",t,"Data","published"),d=await O(t,{mode:"draft"}),p={...a,publishedAt:w.now(),publishedBy:window.firebase.user.email},i=f(e);i.set(c,{dataSource:p,data:d?.data||null,...d?.headers?{headers:d.headers}:{}}),i.update(r,{dataSource:p}),i.update(s,{publishedAt:w.now(),publishedBy:window.firebase.user.email}),await i.commit(),console.log(`published data ${t}`),u("datasource.publish",{metadata:{datasourceId:t}})}async function k(t){if(!await S(t))throw new Error(`data source not found: ${t}`);let o=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,s=n(e,"Projects",o,"DataSources",t),r=n(e,"Projects",o,"DataSources",t,"Data","draft"),c=n(e,"Projects",o,"DataSources",t,"Data","published"),d=f(e);d.update(s,{publishedAt:h(),publishedBy:h()}),(await b(r)).exists()&&d.update(r,{"dataSource.publishedAt":h(),"dataSource.publishedBy":h()}),d.delete(c),await d.commit(),console.log(`unpublished data source: ${t}`),u("datasource.unpublish",{metadata:{datasourceId:t}})}async function J(t,a){if(t.length===0)return;let o=window.firebase.db,e=window.__ROOT_CTX.rootConfig.projectId,s=a?.batch||f(o);for(let r of t){let c=await S(r);if(!c)throw new Error(`data source not found: ${r}`);if(c.archivedAt)throw new Error(`data source is archived: ${r}`);let d=await O(r,{mode:"draft"}),p=n(o,"Projects",e,"DataSources",r),i=n(o,"Projects",e,"DataSources",r,"Data","draft"),y=n(o,"Projects",e,"DataSources",r,"Data","published"),D={...c,publishedAt:l(),publishedBy:window.firebase.user.email};s.set(y,{dataSource:D,data:d?.data||null,...d?.headers?{headers:d.headers}:{}}),s.update(i,{dataSource:D}),s.update(p,{publishedAt:l(),publishedBy:window.firebase.user.email}),u("datasource.publish",{metadata:{datasourceId:r}})}(!a?.batch||a?.commitBatch)&&await s.commit()}async function N(t){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,e=n(o,"Projects",a,"DataSources",t),s=n(o,"Projects",a,"DataSources",t,"Data","draft"),r=n(o,"Projects",a,"DataSources",t,"Data","published"),c=f(o);c.delete(s),c.delete(r),c.delete(e),await c.commit(),console.log(`deleted data source ${t}`),u("datasource.delete",{metadata:{datasourceId:t}})}async function x(t){if(t.type==="http")return{data:await B(t)};if(t.type==="gsheet")return await v(t);throw new Error(`unsupported data source: ${t.type}`)}async function v(t){let a=P(t.url);if(!a?.spreadsheetId)throw new Error(`failed to parse google sheet url: ${t.url}`);let e=await new _(a.spreadsheetId).getSheet(a.gid??0);if(!e)throw new Error(`could not find sheet: ${t.url}`);let s=t.dataFormat||"map",[r,c]=await e.getValues();return s==="array"?{data:[r,c],headers:r}:{data:c.map(p=>{let i={};return p.forEach((y,D)=>{let g=r[D];g&&(i[g]=String(y||""))}),i}),headers:r}}async function B(t){if(!C(t.url))throw new Error(`unsupported url: ${t.url}`);let a=await fetch(t.url,{method:t.httpOptions?.method||"GET",headers:t.httpOptions?.headers||[],body:t.httpOptions?.body||void 0});if(a.status!==200){let e=await a.text();throw new Error(`req failed: ${e}`)}return String(a.headers.get("content-type")).includes("application/json")?await a.json():a.text()}function C(t){return t&&t.startsWith("/")}export{F as a,G as b,S as c,O as d,U as e,q as f,H as g,W as h,M as i,k as j,J as k,N as l};
@@ -1 +0,0 @@
1
- import{c as F}from"./chunk-CSUKZZK5.js";import{b as P}from"./chunk-5MV6XVGA.js";import{b as $}from"./chunk-EYVQCOAD.js";import{N as T,b as S}from"./chunk-YV5SGR24.js";import{B as b,z as p}from"./chunk-XOWWPE7X.js";import{e as w}from"./chunk-WS37MDM3.js";import{Fa as g,Ga as t,V as N,a as f,ba as l,c as h,e as k,i as R,j as B,la as I}from"./chunk-ETPZ3TXX.js";import{d as y,j as x,k as M}from"./chunk-KUCVLANF.js";M();B();var L=x(null);function W(e){let[i,n]=f([]),[o,a]=f(!1),r=k("idle");function u(){r.current==="idle"&&(r.current="fetching",a(!0),F().then(s=>{let c=s.filter(m=>!m.publishedAt&&!m.archivedAt);n(c)}).catch(s=>{console.error("Failed to fetch pending releases:",s)}).finally(()=>{r.current="done",a(!1)}))}function d(s){return i.filter(c=>c.docIds?.includes(s))}return t(L.Provider,{value:{releases:i,getReleasesForDoc:d,loading:o,fetchReleases:u},children:e.children})}function A(){let e=R(L);if(!e)throw new Error("usePendingReleases must be used within a <PendingReleasesProvider>");let{fetchReleases:i,...n}=e;return h(()=>{i()},[]),n}function z(e){let i={transition:"pop"},n=e.doc,o=n.sys;return t("div",{className:"DocStatusBadges",children:[(!o.publishedAt||!o.modifiedAt||o.modifiedAt>o.publishedAt)&&t(g,{...i,label:`Modified ${_(o.modifiedAt)} by ${o.modifiedBy}`,children:t(l,{size:"xs",variant:"gradient",gradient:{from:"indigo",to:"cyan"},children:"Draft"})}),!!o.publishedAt&&t(g,{...i,label:`Published ${_(o.publishedAt)} by ${o.publishedBy}`,children:t(l,{size:"xs",variant:"gradient",gradient:{from:"teal",to:"lime",deg:105},children:"Published"})}),!!o.scheduledAt&&t(g,{...i,label:`Scheduled ${b(o.scheduledAt)} by ${o.scheduledBy}`,children:t(l,{size:"xs",variant:"gradient",gradient:{from:"grape",to:"pink",deg:35},children:"Scheduled"})}),!e.hideReleases&&t(K,{docId:e.docId||n.id,tooltipProps:i}),T(n)&&t(g,{...i,label:O(n),children:t(l,{size:"xs",variant:"gradient",gradient:{from:"orange",to:"red"},className:e.onPublishingLockClick?"DocStatusBadges__badge--clickable":void 0,style:e.onPublishingLockClick?{cursor:"pointer"}:void 0,role:e.onPublishingLockClick?"button":void 0,tabIndex:e.onPublishingLockClick?0:void 0,onClick:e.onPublishingLockClick,onKeyDown:e.onPublishingLockClick?a=>{(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),e.onPublishingLockClick())}:void 0,children:"Locked"})}),!!o.archivedAt&&t(g,{...i,label:`Archived ${_(o.archivedAt)} by ${o.archivedBy}`,children:t(l,{size:"xs",variant:"gradient",gradient:{from:"gray",to:"dark"},children:"Archived"})})]})}function O(e){let i=e.sys?.publishingLocked;return i?i.until?`Locked until ${b(i.until)} by ${i.lockedBy}: "${i.reason}"`:`Locked by ${i.lockedBy}: "${i.reason}"`:""}function K(e){let{getReleasesForDoc:i}=A(),n=i(e.docId);return n.length===0?null:t(y,{children:n.map(o=>t(g,{...e.tooltipProps,label:`In release: ${o.id}`,children:t(l,{component:"a",href:`/cms/releases/${o.id}`,size:"xs",variant:"gradient",gradient:{from:"violet",to:"grape"},style:{cursor:"pointer"},children:o.id})},o.id))})}function _(e){return e?p(e.toMillis()):p(new Date().getTime())}function E(e){let{file:i,width:n,height:o,withPlaceholder:a,className:r,alt:u}=e,d=typeof i=="string"?i:i?.src;return U(i)?t(X,{className:r,src:d,width:n,height:o}):t(I,{className:r,src:d,width:n,height:o,withPlaceholder:a,alt:u})}function U(e){if(!e)return!1;if(typeof e=="string")return/\.mp4($|\?)/i.test(e);if(typeof e.mimeType=="string")return e.mimeType.toLowerCase()==="video/mp4";let i=e.src;return typeof i!="string"?!1:/\.mp4($|\?)/i.test(i)}function X(e){return t("video",{className:e.className,src:e.src,width:e.width,height:e.height,muted:!0,playsInline:!0,preload:"metadata",style:{width:`${e.width}px`,height:`${e.height}px`,backgroundColor:"#f1f3f5",objectFit:"cover",display:"block"}})}B();function De(e){let i=e.docId,[n,o]=f(e.doc),[a,r]=f(!e.doc);async function u(){r(!0),await $(async()=>{let V=await S(i);o(V)}),r(!1)}if(h(()=>{u()},[i]),a)return t("div",{className:w(e.className,"DocPreviewCard","DocPreviewCard--loading",e.variant&&`DocPreviewCard--${e.variant}`),children:t(N,{color:"gray",size:"sm"})});if(!n)return;let[d]=i.split("/"),s=n.fields||{},c=window.__ROOT_CTX.collections[d];if(!c)return console.error(`could not find collection: ${d}`),t("div",{className:"DocPreviewCard",children:["Collection ",t("b",{children:d})," not found."]});let m=P(s,c.preview?.title||"meta.title"),C=P(s,c.preview?.image||"meta.image")||c.preview?.defaultImage,D="div",v={};return e.clickable&&(D="a",v.href=`/cms/content/${e.docId}`,v.target="_blank"),t(D,{className:w(e.className,"DocPreviewCard",e.variant&&`DocPreviewCard--${e.variant}`),...v,children:[t("div",{className:"DocPreviewCard__image",children:t(E,{file:C,width:80,height:60,withPlaceholder:!C?.src})}),t("div",{className:"DocPreviewCard__content",children:[t("div",{className:"DocPreviewCard__content__header",children:t("div",{className:"DocPreviewCard__content__header__docId",children:n.id})}),t("div",{className:"DocPreviewCard__content__title",children:m||"[UNTITLED]"}),e.statusBadges&&n&&t("div",{className:"DocPreviewCard__content__badges",children:t(z,{doc:n,hideReleases:e.hideReleases})})]})]})}export{W as a,A as b,z as c,O as d,E as e,De as f};
@@ -1 +0,0 @@
1
- import{e}from"./chunk-WS37MDM3.js";import{Ga as o}from"./chunk-ETPZ3TXX.js";function n(r){return o("div",{className:e(r.className,"Surface"),children:r.children})}export{n as a};