@blinkk/root-cms 3.0.6 → 3.1.2

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 (153) hide show
  1. package/README.md +77 -0
  2. package/dist/app.js +6 -4
  3. package/dist/browser-client/browser-client.d.ts +148 -0
  4. package/dist/browser-client/embed-window.d.ts +66 -0
  5. package/dist/browser-client/emitter.d.ts +11 -0
  6. package/dist/browser-client.js +377 -0
  7. package/dist/{chunk-RXWDB3K4.js → chunk-4VZTYUQ7.js} +1 -1
  8. package/dist/{chunk-N4K6ICFR.js → chunk-AFBSITEO.js} +4 -6
  9. package/dist/{chunk-PNLLZXVY.js → chunk-AJDMNTZQ.js} +2 -2
  10. package/dist/chunk-J72JK4KR.js +8 -0
  11. package/dist/{chunk-7L5OI5ES.js → chunk-X5CNR4CK.js} +8 -4
  12. package/dist/cli.js +2 -1
  13. package/dist/client.js +2 -1
  14. package/dist/core/client.d.ts +5 -0
  15. package/dist/core/plugin.d.ts +1 -1
  16. package/dist/core/translations.d.ts +19 -4
  17. package/dist/core.js +4 -2
  18. package/dist/functions.js +4 -3
  19. package/dist/plugin.js +38 -7
  20. package/dist/shared/embed-protocol.d.ts +72 -0
  21. package/dist/shared/translation-languages.d.ts +67 -0
  22. package/dist/ui/AIPage-2N5UYBRX.js +1 -0
  23. package/dist/ui/AssetsPage-KLGNE6D6.js +1 -0
  24. package/dist/ui/CollectionPage-D7IG6526.js +1 -0
  25. package/dist/ui/ComparePage-726NIJW5.js +1 -0
  26. package/dist/ui/DataPage-YMSQCIVK.js +1 -0
  27. package/dist/ui/DataSourcePage-7VPFUG3K.js +1 -0
  28. package/dist/ui/DocTranslationsPage-FO7O76VK.js +1 -0
  29. package/dist/ui/DocumentPage-M7SJ4ITQ.js +1 -0
  30. package/dist/ui/EditDataSourcePage-Y7YK6IWT.js +1 -0
  31. package/dist/ui/EditReleasePage-XZ4RHHRT.js +1 -0
  32. package/dist/ui/EmbeddedAIPage-RJOUIPF2.js +1 -0
  33. package/dist/ui/EmbeddedDocumentPage-4TLMCDSO.js +1 -0
  34. package/dist/ui/{ImageEditorDialog-QEULJAT2.js → ImageEditorDialog-GGS4VFEA.js} +2 -2
  35. package/dist/ui/LogsPage-IGDDZGEI.js +1 -0
  36. package/dist/ui/NewDataSourcePage-YUPRHL7F.js +1 -0
  37. package/dist/ui/NewReleasePage-6HHLYOQP.js +1 -0
  38. package/dist/ui/NotFoundPage-A6OCYREA.js +1 -0
  39. package/dist/ui/ProjectPage-UHRXNN7O.js +1 -0
  40. package/dist/ui/ReleasePage-V2JMPWX7.js +1 -0
  41. package/dist/ui/ReleasesPage-SCR4SVKN.js +1 -0
  42. package/dist/ui/SettingsPage-5XKHPG6K.js +1 -0
  43. package/dist/ui/SidebarToolsPage-VXVRZ2C3.js +1 -0
  44. package/dist/ui/TaskPage-LDPRN3G6.js +1 -0
  45. package/dist/ui/TasksPage-DIXUWYXM.js +1 -0
  46. package/dist/ui/TranslationsArbPage-QPD3ZBT4.js +2 -0
  47. package/dist/ui/TranslationsEditPage-475Z7UPC.js +1 -0
  48. package/dist/ui/{TranslationsPage-OBN6CQZZ.js → TranslationsPage-674JU6L4.js} +32 -32
  49. package/dist/ui/{chunk-N4DFAIC5.js → chunk-2EPQJUGM.js} +1 -1
  50. package/dist/ui/{chunk-WKOX3VFN.js → chunk-2RAVKX2Z.js} +2 -2
  51. package/dist/ui/chunk-2S5HMST6.js +1 -0
  52. package/dist/ui/{chunk-V7RAXP2W.js → chunk-3E6CASIN.js} +1 -1
  53. package/dist/ui/chunk-4ALFT4ES.js +141 -0
  54. package/dist/ui/{chunk-KYKFNAX4.js → chunk-4FGASIIX.js} +1 -1
  55. package/dist/ui/chunk-4ISFTE2G.js +5 -0
  56. package/dist/ui/{chunk-SKEP5WYH.js → chunk-7SK47HHZ.js} +3 -3
  57. package/dist/ui/chunk-AAHM6RYJ.js +1 -0
  58. package/dist/ui/chunk-AGFPVTBA.js +1 -0
  59. package/dist/ui/chunk-BUNR5EU3.js +1 -0
  60. package/dist/ui/{chunk-N5Y5OWTV.js → chunk-BW2MKGNP.js} +1 -1
  61. package/dist/ui/{chunk-2225WAJ2.js → chunk-CAY5NM4Z.js} +1 -1
  62. package/dist/ui/{chunk-4KE2SZKH.js → chunk-D3UIZHRK.js} +1 -1
  63. package/dist/ui/{chunk-HYARD7BK.js → chunk-ENQKSLGJ.js} +1 -1
  64. package/dist/ui/chunk-FBSBL476.js +1 -0
  65. package/dist/ui/{chunk-NQB37NMX.js → chunk-FJLNXXE3.js} +1 -1
  66. package/dist/ui/chunk-GT5EQSEX.js +1 -0
  67. package/dist/ui/{chunk-KPJ53X55.js → chunk-HARRKJFZ.js} +1 -1
  68. package/dist/ui/{chunk-6E7PGMZX.js → chunk-HO3W4RVG.js} +1 -1
  69. package/dist/ui/{chunk-CVGYBXVH.js → chunk-J5E457OI.js} +1 -1
  70. package/dist/ui/{chunk-SEUH7LN2.js → chunk-JBHRZ4EX.js} +1 -1
  71. package/dist/ui/{chunk-W3HIZQ4Z.js → chunk-JS6TK4OP.js} +1 -1
  72. package/dist/ui/{chunk-BEDUTYQP.js → chunk-JTIQBW33.js} +1 -1
  73. package/dist/ui/{chunk-ORXEMIQC.js → chunk-KRNQ6L35.js} +1 -1
  74. package/dist/ui/chunk-LROR6N3B.js +7 -0
  75. package/dist/ui/{chunk-4CUWZQXT.js.LEGAL.txt → chunk-LROR6N3B.js.LEGAL.txt} +6 -1
  76. package/dist/ui/{chunk-6GPTGBA7.js → chunk-MSYTAJBV.js} +1 -1
  77. package/dist/ui/{chunk-RQKL4KXY.js → chunk-N3JSLTMV.js} +1 -1
  78. package/dist/ui/{chunk-NMBXHKIJ.js → chunk-NJMNOITA.js} +1 -1
  79. package/dist/ui/{chunk-D37DCENS.js → chunk-NSOTG64N.js} +1 -1
  80. package/dist/ui/chunk-NWHGT476.js +1 -0
  81. package/dist/ui/chunk-P2Z66DHV.js +1 -0
  82. package/dist/ui/{chunk-4IXGYXA2.js → chunk-PTPYMVFW.js} +1 -1
  83. package/dist/ui/{chunk-OVRTVMO5.js → chunk-Q7IU4QCY.js} +1 -1
  84. package/dist/ui/{chunk-XYBHH5L4.js → chunk-QF3GPZTI.js} +1 -1
  85. package/dist/ui/{chunk-AXETBZ6T.js → chunk-QHJOTXYB.js} +1 -1
  86. package/dist/ui/{chunk-UHWNLNP4.js → chunk-RHAJNURN.js} +1 -1
  87. package/dist/ui/chunk-SENZVSVZ.js +1 -0
  88. package/dist/ui/chunk-SKQECSUR.js +1 -0
  89. package/dist/ui/chunk-TOGLZDK3.js +1 -0
  90. package/dist/ui/chunk-TPJCPCRR.js +1 -0
  91. package/dist/ui/{chunk-EMYXSVTD.js → chunk-TVYAZN2Q.js} +1 -1
  92. package/dist/ui/{chunk-GDSSFO5R.js → chunk-UUVAD4U4.js} +1 -1
  93. package/dist/ui/{chunk-EGEB6N4J.js → chunk-VD6G5NV4.js} +11 -11
  94. package/dist/ui/{chunk-DXKEDMEI.js → chunk-VJUMFJIX.js} +1 -1
  95. package/dist/ui/chunk-W5DOO6ID.js +1 -0
  96. package/dist/ui/{chunk-6MOPIV5T.js → chunk-W6LP22IK.js} +1 -1
  97. package/dist/ui/{chunk-3XYCOR6Z.js → chunk-WFQU7V3W.js} +1 -1
  98. package/dist/ui/chunk-WMICEDOT.js +1 -0
  99. package/dist/ui/chunk-XMESZUC5.js +1 -0
  100. package/dist/ui/{chunk-T47V6AGW.js → chunk-XWX2622O.js} +1 -1
  101. package/dist/ui/chunk-YMBBWVBB.js +3 -0
  102. package/dist/ui/chunk-YXSXWFLZ.js +1 -0
  103. package/dist/ui/chunk-ZMS6NIGG.js +1 -0
  104. package/dist/ui/gcs-ECSDFCIU.js +1 -0
  105. package/dist/ui/ui.css +1 -1
  106. package/dist/ui/ui.js +1 -1
  107. package/package.json +7 -3
  108. package/dist/ui/AIPage-JPZ4QUB4.js +0 -1
  109. package/dist/ui/AssetsPage-GDJMKS3M.js +0 -1
  110. package/dist/ui/CollectionPage-5DVXJEET.js +0 -1
  111. package/dist/ui/ComparePage-LIXA6G66.js +0 -1
  112. package/dist/ui/DataPage-AP4Z5JPS.js +0 -1
  113. package/dist/ui/DataSourcePage-WO3ZKMFI.js +0 -1
  114. package/dist/ui/DocTranslationsPage-QKYFIVHP.js +0 -1
  115. package/dist/ui/DocumentPage-ON43I5KM.js +0 -1
  116. package/dist/ui/EditDataSourcePage-XVMEV2LJ.js +0 -1
  117. package/dist/ui/EditReleasePage-A2NB5TFG.js +0 -1
  118. package/dist/ui/LogsPage-4LZJX3O4.js +0 -1
  119. package/dist/ui/NewDataSourcePage-4YWX7IOG.js +0 -1
  120. package/dist/ui/NewReleasePage-HWLVTEXX.js +0 -1
  121. package/dist/ui/NotFoundPage-72AXQAYX.js +0 -1
  122. package/dist/ui/ProjectPage-L4GYDIA5.js +0 -1
  123. package/dist/ui/ReleasePage-43BSWL5B.js +0 -1
  124. package/dist/ui/ReleasesPage-CJXAZBP6.js +0 -1
  125. package/dist/ui/SettingsPage-SYXAMKSF.js +0 -1
  126. package/dist/ui/SidebarToolsPage-OFF5BOXP.js +0 -1
  127. package/dist/ui/TaskPage-HBDLHFI5.js +0 -1
  128. package/dist/ui/TasksPage-OLCDTQNB.js +0 -1
  129. package/dist/ui/TranslationsArbPage-E3NCMAMS.js +0 -2
  130. package/dist/ui/TranslationsEditPage-IWOI7Y5G.js +0 -1
  131. package/dist/ui/chunk-32LRQ5MJ.js +0 -1
  132. package/dist/ui/chunk-3HVDIPSS.js +0 -1
  133. package/dist/ui/chunk-3IDOZ4MG.js +0 -1
  134. package/dist/ui/chunk-4CUWZQXT.js +0 -7
  135. package/dist/ui/chunk-AOCBDKLV.js +0 -1
  136. package/dist/ui/chunk-DUJYIOLE.js +0 -5
  137. package/dist/ui/chunk-IDYKCAAL.js +0 -1
  138. package/dist/ui/chunk-IKED2IGU.js +0 -1
  139. package/dist/ui/chunk-J3EGGI57.js +0 -1
  140. package/dist/ui/chunk-MZP6RIG2.js +0 -1
  141. package/dist/ui/chunk-NQ5ARARP.js +0 -1
  142. package/dist/ui/chunk-RI2JWWU3.js +0 -141
  143. package/dist/ui/chunk-RPOP6MVJ.js +0 -1
  144. package/dist/ui/chunk-TDKVKTW4.js +0 -1
  145. package/dist/ui/chunk-TZEZEMRQ.js +0 -1
  146. package/dist/ui/chunk-UA7UCTX5.js +0 -1
  147. package/dist/ui/chunk-UFQSZ6J2.js +0 -3
  148. package/dist/ui/gcs-L33FIRZU.js +0 -1
  149. /package/dist/ui/{ImageEditorDialog-QEULJAT2.js.LEGAL.txt → ImageEditorDialog-GGS4VFEA.js.LEGAL.txt} +0 -0
  150. /package/dist/ui/{chunk-RI2JWWU3.js.LEGAL.txt → chunk-4ALFT4ES.js.LEGAL.txt} +0 -0
  151. /package/dist/ui/{chunk-SKEP5WYH.js.LEGAL.txt → chunk-7SK47HHZ.js.LEGAL.txt} +0 -0
  152. /package/dist/ui/{chunk-NMBXHKIJ.js.LEGAL.txt → chunk-NJMNOITA.js.LEGAL.txt} +0 -0
  153. /package/dist/ui/{chunk-EGEB6N4J.js.LEGAL.txt → chunk-VD6G5NV4.js.LEGAL.txt} +0 -0
@@ -1 +0,0 @@
1
- import{a as k}from"./chunk-HYARD7BK.js";import{b as B}from"./chunk-W3HIZQ4Z.js";import{a as H}from"./chunk-32LRQ5MJ.js";import{g as D}from"./chunk-ORXEMIQC.js";import{a as b}from"./chunk-EGEB6N4J.js";import{f as C}from"./chunk-RPOP6MVJ.js";import{Da as F,F as M,Fa as L,Ga as t,U as w,V as N,a as d,c as v,da as p,g as A,j as Y,sa as I,ua as j,wa as O,za as E,zc as U}from"./chunk-4CUWZQXT.js";import{d as z}from"./chunk-KUCVLANF.js";Y();var S=50,tt=[{value:"all",label:"All time"},{value:"1h",label:"Last hour"},{value:"24h",label:"Last 24 hours"},{value:"7d",label:"Last 7 days"},{value:"30d",label:"Last 30 days"}];function Q(e){let[a,o]=d(!0),[n,i]=d([]);return v(()=>{D(e?{limit:e}:void 0).then(r=>{i(r),o(!1)})},[e]),{loading:a,actions:n}}function xt(e){if(e.compact)return t(ot,{...e});let[a,o]=d(""),[n]=M(a,300),[i,r]=d([]),[m,q]=d([]),[g,G]=d("all"),[h,T]=d(1),{actions:l,loading:R}=Q(),X=A(()=>{let s=new Set;return l.forEach(c=>s.add(c.action)),Array.from(s).sort()},[l]),Z=A(()=>{let s=new Set;return l.forEach(c=>{c.by&&s.add(c.by)}),Array.from(s).sort()},[l]),u=A(()=>{let s=Date.now();return l.filter(c=>{if(n){let f=n.toLowerCase(),x=c.action.toLowerCase().includes(f),_=c.by?.toLowerCase().includes(f),K=ct(c.metadata).toLowerCase().includes(f);if(!x&&!_&&!K)return!1}if(i.length>0&&!i.includes(c.action)||m.length>0&&(!c.by||!m.includes(c.by)))return!1;if(g&&g!=="all"){let f=J(c.timestamp);if(!f)return!1;let x=f.toMillis(),_=0;switch(g){case"1h":_=s-3600*1e3;break;case"24h":_=s-1440*60*1e3;break;case"7d":_=s-10080*60*1e3;break;case"30d":_=s-720*60*60*1e3;break}if(x<_)return!1}return!0})},[l,n,i,m,g]),$=e.compact?1:Math.ceil(u.length/S),y=A(()=>{if(e.compact)return u;let s=(h-1)*S;return u.slice(s,s+S)},[u,h,e.compact]);return v(()=>{T(1)},[n,i,m,g]),R?t("div",{className:`ActionsLog ActionsLog--loading ${e.className||""}`,children:t(N,{color:"gray",size:"xl"})}):t("div",{className:`ActionsLog ${e.className||""}`,children:[!e.compact&&t("div",{className:"ActionsLog__tableHeader",children:[t("div",{className:"ActionsLog__filters",children:[t(j,{className:"ActionsLog__filters__search",placeholder:"Search actions...",icon:t(U,{size:16}),value:a,onChange:s=>o(s.target.value)}),t(I,{className:"ActionsLog__filters__select",placeholder:"Filter by action",clearable:!0,searchable:!0,data:X,value:i,onChange:r}),t(I,{className:"ActionsLog__filters__select",placeholder:"Filter by user",clearable:!0,searchable:!0,data:Z,value:m,onChange:q}),t(E,{className:"ActionsLog__filters__select",placeholder:"Filter by time",data:tt,value:g,onChange:G})]}),t("div",{className:"ActionsLog__summary",children:["Showing ",y.length," of ",u.length," ","actions",u.length!==l.length&&` (filtered from ${l.length} total)`]})]}),t(H,{className:"ActionsLog__tableSurface",children:t(F,{className:"ActionsLog__table",children:[t("thead",{children:t("tr",{className:"ActionsLogs__table__row ActionsLogs__table__row--header",children:[t("th",{className:"ActionsLogs__table__header",children:"Timestamp"}),t("th",{className:"ActionsLogs__table__header",children:"User"}),t("th",{className:"ActionsLogs__table__header",children:"Action"}),t("th",{className:"ActionsLogs__table__header",children:"Details"}),t("th",{className:"ActionsLogs__table__header",children:"Links"})]})}),t("tbody",{children:[y.map((s,c)=>t("tr",{className:"ActionsLogs__table__row",children:[t("td",{className:"ActionsLogs__table__col ActionsLogs__table__col--nowrap",children:V(s.timestamp)}),t("td",{className:"ActionsLogs__table__col ActionsLogs__table__col--nowrap",children:t("span",{className:"ActionsLogs__user",children:s.by?t(z,{children:[t(k,{email:s.by,size:20}),t("span",{className:"ActionsLogs__user__email",children:s.by})]}):"\u2014"})}),t("td",{className:"ActionsLogs__table__col ActionsLogs__table__col--action",children:t("span",{className:"ActionsLogs__action",children:s.action})}),t("td",{className:"ActionsLogs__table__col ActionsLogs__table__col--metadata",children:t(W,{metadata:s.metadata})}),t("td",{className:"ActionsLogs__table__col ActionsLogs__table__col--links",children:t(P,{action:s})})]},c)),y.length===0&&t("tr",{children:t("td",{colSpan:5,className:"ActionsLogs__table__col ActionsLogs__table__col--empty",children:"No actions found matching your filters."})})]})]})}),!e.compact&&$>1&&t("div",{className:"ActionsLog__pagination",children:t(O,{total:$,value:h,onChange:T,size:"sm"})})]})}function W(e){let{metadata:a}=e;if(!a||Object.keys(a).length===0)return t("span",{className:"ActionsLogs__metadata--empty",children:"\u2014"});let o=Object.entries(a);return t("div",{className:"ActionsLogs__metadata",children:o.map(([n,i])=>t("div",{className:"ActionsLogs__metadata__item",children:[t("span",{className:"ActionsLogs__metadata__key",children:[n,":"]})," ",t("span",{className:"ActionsLogs__metadata__value",children:et(i)})]},n))})}function et(e){if(e==null)return"\u2014";if(Array.isArray(e))return e.length===0?"[]":e.length<=3?e.join(", "):`${e.slice(0,3).join(", ")} (+${e.length-3} more)`;if(typeof e=="object"){let a=at(e);try{return JSON.stringify(a)}catch(o){console.error(o),console.error("failed to stringify json:",a)}}return String(e)}function at(e){let a={};return Object.entries(e).forEach(([o,n])=>{o.startsWith("_")||(a[o]=n)}),a}function P(e){let{action:a}=e,o=[];function n(i){return e.label||i}return a.action!=="doc.delete"&&a.metadata?.docId&&o.push(t(L,{transition:"pop",label:a.metadata.docId,children:t(p,{component:"a",variant:"default",size:"xs",compact:!0,href:`/cms/content/${a.metadata.docId}`,children:n("Open doc")})},"doc")),a.action!=="datasource.delete"&&a.metadata?.datasourceId&&o.push(t(L,{transition:"pop",label:a.metadata.datasourceId,children:t(p,{component:"a",variant:"default",size:"xs",compact:!0,href:`/cms/data/${a.metadata.datasourceId}`,children:n("Open data source")})},"datasource")),a.action!=="release.delete"&&a.metadata?.releaseId&&o.push(t(L,{transition:"pop",label:a.metadata.releaseId,children:t(p,{component:"a",variant:"default",size:"xs",compact:!0,href:`/cms/releases/${a.metadata.releaseId}`,children:n("Open release")})},"release")),a.metadata?.sheetId&&o.push(t(p,{component:"a",variant:"default",size:"xs",compact:!0,href:B(a.metadata.sheetId),target:"_blank",children:n("Open sheet")},"sheet")),a.action.startsWith("acls.")&&o.push(t(p,{component:"a",variant:"default",size:"xs",compact:!0,href:"/cms/settings",children:n("Open settings")},"settings")),a.links&&a.links.forEach((i,r)=>{o.push(t(p,{component:"a",variant:"default",size:"xs",compact:!0,href:i.url,target:i.target,children:i.label},`link-${r}`))}),o.length===0?t("span",{className:"ActionsLogs__links--empty"}):(e.limit&&(o=o.slice(0,e.limit)),t("div",{className:"ActionsLogs__table__buttons",children:o}))}function ot(e){let{actions:a,loading:o}=Q(e.limit||10);return o?t("div",{className:C(e.className,"ActionLogsCompact","ActionLogsCompact--loading"),children:t(N,{color:"gray",size:"xl"})}):t("div",{className:C(e.className,"ActionLogsCompact"),children:t(w,{className:"ActionLogsCompact__table",multiple:!0,children:a.map((n,i)=>t(w.Item,{label:t(nt,{action:n}),children:t(st,{action:n})},i))})})}function nt(e){let a=e.action,o=it(a),n=e.action.by||"";return t("div",{className:"ActionLogsCompactItemPreview",children:[t("div",{className:"ActionLogsCompactItemPreview__user",children:t(k,{email:n,size:20})}),t("div",{className:"ActionLogsCompactItemPreview__timestamp",children:V(a.timestamp)}),t("div",{className:"ActionLogsCompactItemPreview__action",children:a.action}),t("div",{className:"ActionLogsCompactItemPreview__actionMetaId",children:o}),t("div",{className:"ActionLogsCompactItemPreview__buttons",children:t(P,{action:a,label:"Open",limit:1})})]})}function st(e){let a=e.action,o={user:a.by,...a.metadata};return t("div",{className:"ActionLogsCompactItemDetails",children:[t(W,{metadata:o}),t(P,{action:a})]})}function it(e){for(let a of Object.keys(e.metadata||{}))if(a.toLowerCase().endsWith("id"))return e.metadata[a];return""}function J(e){return e?e instanceof b?e:typeof e=="object"&&typeof e._seconds=="number"?new b(e._seconds,e._nanoseconds||0):typeof e=="object"&&typeof e.seconds=="number"?new b(e.seconds,e.nanoseconds||0):typeof e=="number"?b.fromMillis(e):null:null}function V(e){let a=J(e);if(!a)return"Invalid date";let o=a.toDate(),n=String(o.getMonth()+1).padStart(2,"0"),i=String(o.getDate()).padStart(2,"0"),r=String(o.getHours()).padStart(2,"0"),m=String(o.getMinutes()).padStart(2,"0");return`${n}/${i} ${r}:${m}`}function ct(e){function a(o){return o===null?"null":typeof o>"u"?"undefined":typeof o=="string"?`"${o.replaceAll('"','\\"')}"`:typeof o!="object"?String(o):Array.isArray(o)?`[${o.map(a).join(", ")}]`:`{${Object.entries(o).map(([i,r])=>`${i}: ${a(r)}`).join(", ")}}`}return a(e)}export{xt as a};
@@ -1,5 +0,0 @@
1
- import{f as c}from"./chunk-ORXEMIQC.js";import{a as p,b,c as g,g as E,i as C,n as x,p as _,q as A,r as w,s as h,u,v as D}from"./chunk-EGEB6N4J.js";var q="tasks",H=20;function K(){let t=window.firebase.db,e=window.__ROOT_CTX.rootConfig.projectId;return g(t,"Projects",e)}function T(t){let e=window.firebase.db,n=window.__ROOT_CTX.rootConfig.projectId;return g(e,"Projects",n,"Tasks",t)}function N(){let t=window.firebase.db,e=window.__ROOT_CTX.rootConfig.projectId;return g(t,"Projects",e,"Counters",q)}function v(){let t=window.firebase.db,e=window.__ROOT_CTX.rootConfig.projectId;return b(t,"Projects",e,"Tasks")}function O(t){let e=window.firebase.db,n=window.__ROOT_CTX.rootConfig.projectId;return b(e,"Projects",n,"Tasks",t,"Comments")}function P(t,e){let n=window.firebase.db,s=window.__ROOT_CTX.rootConfig.projectId;return g(n,"Projects",s,"Tasks",t,"Comments",e)}function R(t){let e=window.firebase.db,n=window.__ROOT_CTX.rootConfig.projectId;return b(e,"Projects",n,"Tasks",t,"Events")}function G(t){return g(R(t))}async function J(){let t=await x(K());return t.exists()&&(t.data()||{}).settings?.defaultAssignee||null}async function st(t){if(!t.title)throw new Error("missing task title");let e=window.firebase.db,n=t.assignee??await J(),s=t.priority||"normal",a="new",i=L(t.targetLaunchDate),d=await h(e,async r=>{let o=N(),l=(await r.get(o)).data()||{},f=typeof l.lastTaskId=="number"?l.lastTaskId:0,k=Math.floor(f)+1;for(let B=0;B<H;B++){let j=T(String(k));if(!(await r.get(j)).exists())return r.set(o,{lastTaskId:k,updatedAt:u()},{merge:!0}),r.set(j,{id:String(k),title:t.title,description:t.description||"",assignee:n??null,priority:s,status:a,targetLaunchDate:i,createdAt:u(),createdBy:window.firebase.user.email||"",updatedAt:u(),updatedBy:window.firebase.user.email||""}),String(k);k+=1}throw new Error("unable to allocate a task id")});return c("tasks.create",{metadata:{taskId:d}}),d}function L(t){return t instanceof Date?p.fromDate(t):t??null}function Q(t){let e=W(t);return!["closed","complete","completed","done","resolved"].includes(e)}function W(t){let e=(t||"new").trim().toLowerCase();return e==="open"?"new":e==="blocked"?"in-progress":["done","complete","completed","resolved"].includes(e)?"closed":e}function Y(t){return t.sort((e,n)=>{let s=e.createdAt?.toMillis?.()||0;return(n.createdAt?.toMillis?.()||0)-s})}function M(t){return Y(t.docs.map(e=>({...e.data(),id:e.id})))}function at(t,e){return w(v(),n=>{t(M(n))},e)}function it(t,e){return w(v(),n=>{t(M(n).filter(s=>Q(s.status)))},e)}function rt(t,e,n){return w(T(t),s=>{if(!s.exists()){e(null);return}e({...s.data(),id:s.id})},n)}function ot(t,e,n){return w(E(O(t),C("createdAt","asc")),s=>{e(s.docs.map(a=>({...a.data(),id:a.id})))},n)}function dt(t,e,n){return w(E(R(t),C("createdAt","asc")),s=>{e(s.docs.map(a=>({...a.data(),id:a.id})))},n)}async function ct(t,e){if(!t)throw new Error("missing task id");let n=e?.trim()||null;await y(t,"assignee",n)&&c("tasks.updateAssignee",{metadata:{taskId:t,assignee:n}})}async function ut(t,e){if(!t)throw new Error("missing task id");let n=e.trim();if(!n)throw new Error("missing title");await y(t,"title",n)&&c("tasks.updateTitle",{metadata:{taskId:t}})}async function mt(t,e){if(!t)throw new Error("missing task id");if(!e)throw new Error("missing status");let n=e.trim();await y(t,"status",n)&&c("tasks.updateStatus",{metadata:{taskId:t,status:e}})}async function lt(t,e){if(!t)throw new Error("missing task id");await y(t,"priority",e)&&c("tasks.updatePriority",{metadata:{taskId:t,priority:e}})}async function ft(t,e){if(!t)throw new Error("missing task id");let n=L(e);await y(t,"targetLaunchDate",n)&&c("tasks.updateTargetLaunchDate",{metadata:{taskId:t}})}async function pt(t,e){if(!t)throw new Error("missing task id");await A(T(t),{description:e,updatedAt:u(),updatedBy:window.firebase.user.email||""}),c("tasks.updateDescription",{metadata:{taskId:t}})}async function gt(t,e){if(!t)throw new Error("missing task id");if(!e?.src)throw new Error("missing attachment file");let n=window.firebase.db,s=T(t),a=window.firebase.user.email||"",i={...e,id:g(R(t)).id,attachedAt:p.now(),attachedBy:a};return await h(n,async d=>{let r=await d.get(s);if(!r.exists())throw new Error("task not found");let o=r.data(),m=S(o.attachments);d.update(s,{attachments:[...m,i],updatedAt:u(),updatedBy:a})}),c("tasks.attachment.add",{metadata:{taskId:t,attachmentId:i.id,filename:i.filename||i.src}}),i}async function wt(t,e){if(!t||!e)throw new Error("missing task or attachment id");let n=window.firebase.db,s=T(t),a=window.firebase.user.email||"",i;await h(n,async r=>{let o=await r.get(s);if(!o.exists())throw new Error("task not found");let m=o.data(),l=S(m.attachments);return i=l.find(f=>f.id===e),i?(r.update(s,{attachments:l.filter(f=>f.id!==e),updatedAt:u(),updatedBy:a}),!0):!1})&&c("tasks.attachment.remove",{metadata:{taskId:t,attachmentId:e,filename:i?.filename||i?.src||""}})}async function y(t,e,n){let s=window.firebase.db,a=T(t),i=G(t),d=window.firebase.user.email||"";return h(s,async r=>{let o=await r.get(a);if(!o.exists())throw new Error("task not found");let m=o.data(),l=U(m[e]),f=U(n);return Z(l,f)?!1:(r.update(a,{[e]:f,updatedAt:u(),updatedBy:d}),r.set(i,{id:i.id,taskId:t,type:"metadata",field:e,oldValue:l,newValue:f,createdAt:u(),createdBy:d}),!0)})}function U(t){return t instanceof p||typeof t=="string"?t:null}function Z(t,e){return t instanceof p&&e instanceof p?t.toMillis()===e.toMillis():t===e}function S(t){return Array.isArray(t)?t.filter(e=>!!(e?.id&&e?.src)):[]}async function Tt(t,e,n,s){if(!t)throw new Error("missing task id");if(!e)throw new Error("missing comment content");let a=z(e),i=typeof e=="string"?e:F(e);if(!i.trim()&&!a)throw new Error("missing comment content");let d=g(O(t)),r=d.id,o=(s?.mentions||[]).map(m=>m.toLowerCase());return await _(d,{id:r,taskId:t,parentId:n||null,content:i,body:a,mentions:o,createdAt:u(),createdBy:window.firebase.user.email||"",history:[]}),c("tasks.comment.add",{metadata:{taskId:t,commentId:r,parentId:n||null,mentions:o}}),r}async function kt(t,e,n,s){if(!t||!e)throw new Error("missing task or comment id");if(!n)throw new Error("missing comment content");let a=z(n),i=typeof n=="string"?n:F(n);if(!i.trim()&&!a)throw new Error("missing comment content");let d=P(t,e),r=await x(d);if(!r.exists())throw new Error("comment not found");let o=r.data(),m=(s?.mentions||[]).map(l=>l.toLowerCase());await A(d,{content:i,body:a,mentions:m,updatedAt:u(),updatedBy:window.firebase.user.email||"",isDeleted:!1,history:D({action:"edit",content:o.content,body:o.body||null,changedAt:p.now(),changedBy:window.firebase.user.email||""})}),c("tasks.comment.edit",{metadata:{taskId:t,commentId:e,mentions:m}})}function z(t){return typeof t=="string"?null:t}function F(t){return t?.blocks?.length?t.blocks.map(e=>$(e)).filter(Boolean).join(`
2
- `).trim():""}function $(t){switch(t.type){case"paragraph":case"heading":case"quote":return V(t.data?.text||"");case"orderedList":case"unorderedList":return(t.data?.items||[]).map(e=>X(e)).filter(Boolean).join(`
3
- `);case"image":return t.data?.file?.alt||t.data?.file?.url||"";default:return""}}function X(t){let e=[V(t.content||"")];return t.items?.length&&e.push(t.items.map(n=>X(n)).filter(Boolean).join(`
4
- `)),e.filter(Boolean).join(`
5
- `)}function V(t){return t.replace(/<[^>]+>/g,"")}async function ht(t,e){if(!t||!e)throw new Error("missing task or comment id");let n=P(t,e),s=await x(n);if(!s.exists())throw new Error("comment not found");let a=s.data();await A(n,{content:"",isDeleted:!0,deletedAt:u(),deletedBy:window.firebase.user.email||"",history:D({action:"delete",content:a.content,changedAt:p.now(),changedBy:window.firebase.user.email||""})}),c("tasks.comment.delete",{metadata:{taskId:t,commentId:e}})}export{st as a,Q as b,W as c,at as d,it as e,rt as f,ot as g,dt as h,ct as i,ut as j,mt as k,lt as l,ft as m,pt as n,gt as o,wt as p,Tt as q,kt as r,ht as s};
@@ -1 +0,0 @@
1
- import{a as $}from"./chunk-RQKL4KXY.js";import{a as W}from"./chunk-T47V6AGW.js";import{f as U}from"./chunk-4IXGYXA2.js";import{a as B,c as L,d as O,i as A}from"./chunk-UA7UCTX5.js";import{a as j,c as q}from"./chunk-TDKVKTW4.js";import{a as H}from"./chunk-D37DCENS.js";import{a as T}from"./chunk-JDW4UORS.js";import{b as M}from"./chunk-CVGYBXVH.js";import{a as v}from"./chunk-AXETBZ6T.js";import{d as k}from"./chunk-RPOP6MVJ.js";import{$ as D,Fa as I,Ga as e,Oc as F,Qa as V,W as p,a as c,c as N,da as f,e as P,j as ie,na as y,pa as z,ua as E}from"./chunk-4CUWZQXT.js";ie();function R(s){let{route:i}=k(),S=P(null),[Y,d]=c(!1),[w,g]=c(""),[G,h]=c(!!s.releaseId),[J,C]=c(null),[m,x]=c([]),[_,b]=c([]),K=W(),Q=$(),{roles:X}=H(),Z=window.firebase.user.email||"",n=j(X,Z);async function ee(r){console.log(r),await M(async()=>{let t=await L(r);C(t),x(t?.docIds||[]),b(t?.dataSourceIds||[])}),h(!1)}N(()=>{s.releaseId&&(h(!0),ee(s.releaseId))},[s.releaseId]);async function oe(){g("");let r=S.current;function t(l){let u=r.elements[l];return u?u.value.trim():""}let o=s.releaseId||t("id");if(!o){g("missing id");return}if(!T(o)){g("id is invalid (alphanumeric characters and dashes only)");return}let a={id:o,description:t("description"),docIds:m,dataSourceIds:_};try{C(a),d(!0),s.releaseId?(await O(s.releaseId,a),v({title:"Saved release",message:`Updated ${o}`,autoClose:5e3}),d(!1)):(await B(o,a),v({title:"Added release",message:`Successfully added ${o}`,autoClose:5e3}),d(!1)),i(`/cms/releases/${o}`)}catch(l){console.error(l),v({title:"Failed to save release",message:String(l),color:"red",autoClose:!1}),d(!1)}}function ae(){K.open({multiSelect:!0,selectedDocIds:m,onChangeMulti:(r,t)=>{x(o=>{let a=[...o];if(t)a.push(r);else{let l=a.findIndex(u=>u===r);l>-1&&a.splice(l,1)}return console.log(a),a.sort()})}})}function se(){Q.open({selectedDataSourceIds:_,onChange:(r,t)=>{b(o=>{let a=[...o];if(t)a.push(r);else{let l=a.indexOf(r);l>-1&&a.splice(l,1)}return a.sort()})}})}function re(r){console.log("onRemoveDoc()",r),x(t=>{let o=[...t],a=o.indexOf(r);return a!==-1&&o.splice(a,1),console.log(o),o})}function te(r){b(t=>{let o=[...t],a=o.indexOf(r);return a!==-1&&o.splice(a,1),o})}return e("form",{className:"ReleaseForm",ref:S,onSubmit:r=>{r.preventDefault(),oe()},children:[e(z,{visible:G}),e(E,{className:"ReleaseForm__input",name:"id",label:"ID",description:"Unique identifier for the release. Use alphanumeric characters and dashes only, e.g. grogus-favorite-meals",size:"xs",radius:0,defaultValue:s.releaseId||A(),disabled:!!s.releaseId}),e(y,{className:"ReleaseForm__input",name:"description",label:"Description",description:"Optional.",size:"xs",radius:0,value:J?.description,disabled:!n}),e(D,{className:"ReleaseForm__input",label:"Docs",description:"Select one or more docs to add to the release. Note: you can add or edit this list at a later time, if needed.",size:"xs",children:[m.length>0&&e(R.DocPreviewCards,{docIds:m,onRemoveDoc:re,canEdit:n}),e(f,{className:"ReleaseForm__docSelectButton",color:"dark",size:"xs",onClick:()=>ae(),disabled:!n,children:"Select"})]}),e(D,{className:"ReleaseForm__input",label:"Data Sources",description:"Optional. Data sources to publish with the release.",size:"xs",children:[_.length>0&&e(R.DataSourceIds,{ids:_,onRemove:te,canEdit:n}),e(f,{className:"ReleaseForm__docSelectButton",color:"dark",size:"xs",onClick:()=>se(),disabled:!n,children:"Select"})]}),e("div",{className:"ReleaseForm__submit__buttons",children:e(q,{label:"You don't have access to create or edit releases",condition:!n,children:e("span",{children:e(f,{className:"ReleaseForm__submit",color:"blue",size:"xs",type:"submit",loading:Y,disabled:!n,children:s.buttonLabel||"Save"})})})}),w&&e("div",{className:"ReleaseForm__error",children:["Error: ",w]})]})}R.DocPreviewCards=s=>e("div",{className:"ReleaseForm__DocPreviewCards",children:s.docIds.map(i=>e("div",{className:"ReleaseForm__DocPreviewCards__card",children:[e(U,{className:"ReleaseForm__DocPreviewCards__card__preview",docId:i}),e("div",{className:"ReleaseForm__DocPreviewCards__card__controls",children:[s.canEdit&&e("div",{className:"ReleaseForm__DocPreviewCards__card__controls__remove",children:e(I,{label:"Remove",children:e(p,{className:"ReleaseForm__DocPreviewCards__card__controls__remove__icon",onClick:()=>s.onRemoveDoc(i),children:e(F,{size:16})})})}),e("div",{className:"ReleaseForm__DocPreviewCards__card__controls__open",children:e(I,{label:"Open",children:e(p,{component:"a",className:"ReleaseForm__DocPreviewCards__card__controls__open__icon",href:`/cms/content/${i}`,target:"_blank",children:e(V,{size:16})})})})]})]},i))});R.DataSourceIds=s=>e("div",{className:"ReleaseForm__DataSourceIds",children:s.ids.map(i=>e("div",{className:"ReleaseForm__DataSourceIds__item",children:[e("span",{className:"ReleaseForm__DataSourceIds__item__id",children:i}),s.canEdit&&e(p,{className:"ReleaseForm__DataSourceIds__item__remove",onClick:()=>s.onRemove(i),children:e(F,{size:16})})]},i))});export{R as a};
@@ -1 +0,0 @@
1
- import{b as se}from"./chunk-BEDUTYQP.js";import{a as te,b as R,c as k}from"./chunk-JDW4UORS.js";import{a as ie}from"./chunk-YDO2EDVY.js";import{c as ne,s as re}from"./chunk-NQ5ARARP.js";import{b as oe}from"./chunk-CVGYBXVH.js";import{a as U}from"./chunk-AXETBZ6T.js";import{a as P}from"./chunk-N5Y5OWTV.js";import{a as z}from"./chunk-5MV6XVGA.js";import{b as K,f as H,g as E,i as C,o as Z}from"./chunk-EGEB6N4J.js";import{d as ee,f as ae}from"./chunk-RPOP6MVJ.js";import{A as W,Ga as g,a as p,c as v,da as j,e as S,g as X,h as N,i as B,j as D,ra as G,ua as J,za as Q}from"./chunk-4CUWZQXT.js";import{j as q,k as Ee}from"./chunk-KUCVLANF.js";function $(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=Ce(e);return`${n}${r}`}function Ce(e){let o=window.__ROOT_CTX.collections,{collectionId:t,slug:n,locale:r}=e,a=o[t];if(!a)throw new Error(`collection not found: ${t}`);if(!a.url)return"";let s=window.__ROOT_CTX.rootConfig,f=s.base||"/",l="/[base]/[path]";r&&(l=s.i18n.urlFormat||"/[locale]/[base]/[path]");let d="",u=a?.url;if(u)if(n){let c=u.replace(/\[.*slug\]/,n).replaceAll("--","/").replace(/\/+/g,"/");c==="/index"&&(c="/"),d=c}else d=u;return le(l,{base:f,path:d,locale:r||"",slug:n})}function ze(e){let o=window.__ROOT_CTX.collections,{collectionId:t,slug:n,locale:r}=e,a=o[t];if(!a)throw new Error(`collection not found: ${t}`);let s=window.__ROOT_CTX.rootConfig,f=s.base||"/",l="/[base]/[path]";r&&(l=s.i18n.urlFormat||"/[locale]/[base]/[path]");let d="",u=a?.previewUrl||a?.url;if(u)if(n){let c=u.replace(/\[.*slug\]/,n).replaceAll("--","/").replace(/\/+/g,"/");c==="/index"&&(c="/"),d=c}else d=u;return le(l,{base:f,path:d,locale:r||"",slug:n})}function le(e,o){let t=e.replaceAll(/\[\[?(\.\.\.)?([\w\-_]*)\]?\]/g,(n,r,a)=>o[a]??n);return ke(t,{trailingSlash:window.__ROOT_CTX.rootConfig.server.trailingSlash})}function ke(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}D();function $e(e,o){let[t,n]=p([]),[r,a]=p(!0),f=se().db,l=window.__ROOT_CTX.rootConfig.projectId||"default",d=o.includeArchived??!1,u=async()=>{a(!0);let c=K(f,"Projects",l,"Collections",e,"Drafts"),i=c,m=o.orderBy;if(m==="modifiedAt")i=E(c,C("sys.modifiedAt","desc"));else if(m==="newest")i=E(c,C("sys.createdAt","desc"));else if(m==="oldest")i=E(c,C("sys.createdAt"));else if(m==="slug")i=E(c,C(H()));else if(m==="slugDesc")i=E(c,C(H(),"desc"));else{let y=window.__ROOT_CTX.collections[e]?.sortOptions?.find(w=>w.id===m);y&&(i=y.direction==="desc"?E(c,C(y.field,"desc")):E(c,C(y.field)))}await oe(async()=>{let h=await Z(i),y=[];h.docs.forEach(w=>{let L=w.data(),b=w.id,_=`${e}/${b}`,x={...L,id:_,slug:b};ne(_,x),!(!d&&x?.sys?.archivedAt)&&y.push(x)}),n(y)}),a(!1)};return v(()=>{a(!0),u()},[e,o.orderBy,d]),[r,u,t]}Ee();D();var O={CONNECTED:"connected",SCHEMA_CHANGED:"schemaChanged"};function ce(e){let t=new URLSearchParams(window.location.search).get("e");return t?t.split(",").includes(e):!1}var _e="/cms/api/sse.connect",I=ce("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))}},ge=q(null);function Qe(e){let t=S(new F).current,n=S(null),r=S(!1),a=S({attempt:0,timer:0}),s=S(""),f=()=>{n.current&&(n.current.close(),n.current=null)},l=N(()=>{I&&console.log("[sse] connecting..."),f();let u=new EventSource(_e);n.current=u,u.addEventListener(O.CONNECTED,i=>{if(I&&console.log("[sse] connected"),r.current=!1,a.current.attempt=0,ue){let h=de(i.data)?.serverVersion||"";s.current?s.current!==h&&(console.log(`server version changed: ${s.current} -> ${h}`),console.log("reloading..."),window.location.reload()):s.current=h}});let c=i=>{if(!i||!i.type)return;let m=de(i.data);I&&console.log("[sse] event:",i.type,m),t.emit(i.type,m,i)};Object.values(O).forEach(i=>{u.addEventListener(i,c)}),u.addEventListener("error",()=>{I&&console.log("[sse] disconnected"),u.readyState===EventSource.CLOSED&&!r.current&&(r.current=!0,(()=>{let m=++a.current.attempt,h=Math.min(3e4,Math.pow(2,m)*500),y=Math.random()*.3*h,w=h+y;window.clearTimeout(a.current.timer),a.current.timer=window.setTimeout(()=>{r.current=!1,l()},w)})())})},[t]);v(()=>{if(!ue)return;l();let u=()=>{document.visibilityState==="visible"&&n.current?.readyState!==EventSource.OPEN&&l()};return document.addEventListener("visibilitychange",u),()=>{document.removeEventListener("visibilitychange",u),window.clearTimeout(a.current.timer),f()}},[l]);let d=X(()=>({emitter:t}),[t]);return g(ge.Provider,{value:d,children:e.children})}function de(e){try{return JSON.parse(e)}catch{return e}}function fe(e,o){let t=B(ge);if(!t)throw new Error("useSSE() must be used within an <SSEProvider>");let n=S(o);v(()=>{n.current=o},[o]),v(()=>t.emitter.on(e,(r,a)=>n.current(r,a)),[t,e])}D();var me=["agile","amber","amused","ancient","autumn","azure","balmy","beige","big","bitter","black","blue","bold","brave","breezy","bright","brisk","broad","bronze","brown","bubbly","busy","calm","candid","careful","caring","cheerful","cherry","chilly","classic","clean","clear","clever","cloudy","cobalt","cold","cool","cosmic","cosy","cozy","crimson","crisp","cuddly","curious","daring","dark","dawn","dazzling","dear","deep","delicate","dewy","dizzy","dreamy","dry","dusky","dusty","eager","early","earnest","easy","electric","elegant","emerald","empty","epic","even","every","faint","fair","falling","famous","fancy","fast","feisty","fierce","fiery","fine","firm","flat","fluffy","foggy","fond","forest","fragrant","fresh","friendly","frosty","funky","funny","fuzzy","gentle","giant","glad","gleaming","glossy","gold","golden","good","graceful","grand","grassy","gray","green","groovy","happy","hardy","hazy","hearty","heavy","helpful","hidden","high","holy","honest","hopeful","humble","humming","icy","ideal","idle","indigo","inky","iron","ivory","jade","jazzy","jolly","jovial","joyful","juicy","jumpy","keen","kind","lacy","late","lazy","lemon","light","lime","linen","little","lively","lone","long","loud","lovely","loyal","lucid","lucky","lush","magenta","magic","mango","marble","maroon","massive","mauve","mellow","merry","mighty","mild","milky","mindful","minty","misty","mocha","modest","morning","mossy","muddy","mysterious","narrow","navy","neat","neon","new","nimble","noble","noisy","noon","nosy","oaken","odd","old","olive","onyx","opal","open","orange","pale","patient","peach","peachy","pearly","peppy","perky","pink","placid","plain","playful","plucky","plum","plush","polite","proud","pure","purple","quaint","quick","quiet","quirky","rapid","rare","raven","ready","red","restless","rich","rosy","rough","round","royal","ruby","rugged","rustic","sable","safe","sage","salty","sandy","sapphire","savvy","scarlet","secret","sepia","serene","shaggy","sharp","shiny","short","shrewd","shy","silent","silky","silly","silver","simple","sleek","sleepy","slim","slow","small","smart","smoky","smooth","snappy","snowy","soft","solar","solid","spicy","spiffy","spry","square","steady","steel","sticky","still","stony","stormy","strong","sturdy","sunny","super","swank","sweet","swift","tame","tan","tart","teal","tender","thin","thirsty","tidy","tiny","tireless","topaz","tough","tranquil","trim","true","twinkly","umber","upbeat","urban","useful","vast","velvet","vibrant","vintage","violet","vivid","warm","watchful","wavy","wee","whimsical","whispering","white","wild","windy","winter","wise","witty","woody","wool","yellow","young","youthful","zealous","zen","zesty","zippy"],pe=["acorn","alpaca","anchor","apple","apricot","arrow","autumn","badger","bagel","bamboo","banana","bay","beach","bear","bee","beetle","bell","berry","bird","biscuit","blossom","boat","book","boot","bottle","boulder","branch","brass","breeze","bridge","brook","broom","brunch","bubble","bucket","bud","buffalo","bug","bunny","burrow","butter","button","cabin","cactus","cake","camel","candle","canyon","cape","cardinal","carrot","cat","cave","cedar","chair","cherry","chestnut","chickpea","cliff","cloud","clove","clover","cocoa","comet","compass","cookie","coral","cottage","cotton","cove","crane","crayon","creek","cricket","crow","crumpet","crystal","cup","cupcake","currant","cypress","daffodil","dahlia","daisy","dawn","deer","desert","dew","diamond","dingo","dock","dolphin","donut","dove","dragon","drizzle","drum","duck","dumpling","dune","eagle","echo","eel","egg","elder","elephant","elk","ember","ermine","estuary","falcon","fawn","feather","fern","field","fig","finch","fir","firefly","fish","flame","flamingo","flask","flax","fleece","flower","flute","fog","forest","fountain","fox","frog","frost","galaxy","garden","gecko","gem","ginger","glacier","globe","glow","goat","goose","gorge","grape","grass","grove","gull","hammock","hare","harp","harvest","hat","hawk","haystack","hazel","heather","hedge","heron","hill","honey","horizon","horse","iceberg","iris","island","ivy","jacket","jade","jaguar","jam","jar","jasmine","jay","jelly","juniper","kayak","kelp","kettle","key","kingfisher","kite","kitten","koala","ladybug","lagoon","lake","lamp","lantern","lark","lava","leaf","lemon","lemur","leopard","lighthouse","lilac","lily","lime","lion","llama","lobster","log","lotus","lynx","magnet","mango","maple","marble","marlin","meadow","melody","melon","mermaid","meteor","mint","mist","mitten","mole","monkey","moon","moose","morel","moss","moth","mountain","mouse","muffin","mushroom","mussel","nectar","needle","nest","newt","nimbus","noodle","north","note","oak","oasis","oats","ocean","octopus","olive","onion","opal","orange","orchid","otter","owl","oyster","paddle","palm","panda","pansy","panther","paper","parrot","partridge","pasture","path","peach","peacock","pear","pebble","pelican","penguin","peony","pepper","petal","phoenix","pie","pigeon","pine","pineapple","planet","plover","plum","pond","pony","poppy","pouch","prairie","puffin","pumpkin","quail","quartz","queen","quill","rabbit","raccoon","radish","rain","rainbow","raven","reef","reel","reindeer","rhino","ribbon","ridge","river","road","robin","rock","rose","rowan","sage","salmon","sand","sapphire","satellite","scarf","sea","seagull","seal","seed","shark","shell","shore","shrimp","silk","silo","sky","sleet","snail","snake","snow","sock","spark","sparrow","spider","spire","spoon","spring","spruce","squirrel","star","starling","stone","stork","storm","stream","summer","sun","sundial","swan","swift","tadpole","tea","teal","thicket","thistle","thrush","thunder","tide","tiger","toad","tooth","topaz","tortoise","totem","tower","tractor","trail","tree","truffle","tulip","tundra","turtle","twig","twilight","umbrella","unicorn","urchin","valley","vine","violet","volcano","vulture","wagon","walnut","walrus","wasp","water","wave","whale","wheat","whisker","wildcat","willow","wind","window","winter","wolf","wombat","wood","wren","yak","yam","zebra","zinnia"];var he="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",xe="YYYYMMDD";function be(e,o){let t=o?.now??new Date,n=o?.random??Math.random,r=e.replace(/\{([^{}]+?)\}/g,(a,s)=>{let[f,l]=De(s);switch(f){case"date":return Me(t,l||xe);case"adjective":return ye(me,n);case"noun":return ye(pe,n);case"random":return Te(Oe(l,6),n);default:return a}});return k(r.toLowerCase())}function De(e){let o=e.indexOf(":");return o===-1?[e.trim(),void 0]:[e.slice(0,o).trim(),e.slice(o+1)]}function Oe(e,o){if(!e)return o;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:o}function ye(e,o){return e[Math.floor(o()*e.length)]}function Te(e,o){let t=[];for(let n=0;n<e;n++)t.push(he.charAt(Math.floor(o()*he.length)));return t.join("")}function Me(e,o){let t={YYYY:String(e.getFullYear()),YY:String(e.getFullYear()).slice(-2),MM:T(e.getMonth()+1),DD:T(e.getDate()),HH:T(e.getHours()),mm:T(e.getMinutes()),ss:T(e.getSeconds())};return o.replace(/YYYY|YY|MM|DD|HH|mm|ss/g,n=>t[n]??n)}function T(e){return e<10?`0${e}`:String(e)}D();function we(e){let[o,t]=p(!0),[n,r]=p(null),a=N(async()=>{try{let s=await ie(e);r(s)}catch(s){console.error(s),U({title:`Failed to load collection: ${e}`,message:String(s),color:"red",autoClose:!1})}t(!1)},[e]);return v(()=>{a()},[e]),fe(O.SCHEMA_CHANGED,async s=>{await a();let f=s.file?`Applied updates from changes to ${s.file}.`:"Applied updates from changes to a .schema.ts file.";U({title:"Updated schema!",message:f})}),{loading:o,schema:n}}function Y(e){let o={_array:[]};return e.forEach(t=>{let n=Ne();o._array.push(n),o[n]=t}),o}function Ne(){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]=Y(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 a=n[r.id];if(a!=null){if(r.type==="array"&&Array.isArray(a)){let s=a.map(f=>Re(r.of,f,t));n[r.id]=Y(s)}else if(r.type==="object"&&z(a))n[r.id]=A(r,a,t);else if(r.type==="oneof"&&z(a)&&typeof a._type=="string"&&t){let s=t[a._type];s&&(n[r.id]=A(s,a,t))}}}),n}function Re(e,o,t){if(!z(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}D();function Se(e){let[o,t]=p(e.collectionId||""),n=S(null),[r,a]=p(e.initialSlug||""),s=window.__ROOT_CTX.collections[o],f=[];e.collectionId&&e.collectionDisabled?f.push({value:e.collectionId,label:e.collectionId}):Object.keys(window.__ROOT_CTX.collections).forEach(i=>{f.push({value:i,label:i})});let l="",d="";if(s?.url){if(r){let i=k(r),m=s?.slugRegex;te(i,m)?l=$({collectionId:o,slug:i}):d=R(i,m)}else l=$({collectionId:o,slug:"[slug]"});l.endsWith("/index")&&(l=l.replace(/\/index$/,"/"))}function u(i){t(i),e.onChange&&e.onChange({collectionId:i,slug:r})}function c(i){a(i),e.onChange&&e.onChange({collectionId:o,slug:i})}return g("div",{className:ae(e.className,"SlugInput"),children:[g("div",{className:"SlugInput__inputs",children:[g(Q,{className:"SlugInput__collection",placeholder:"Collection",size:"xs",data:f,onChange:i=>u(i),value:o,disabled:!!e.collectionDisabled}),g("div",{className:"SlugInput__divider",children:"/"}),g(J,{className:"SlugInput__slug",name:"slug",ref:n,value:r,onChange:i=>{c(i.currentTarget.value)},placeholder:"slug",autoComplete:"off",size:"xs"})]}),l&&g(P,{className:"SlugInput__urlHelp",size:"body-sm",children:l}),d&&g(P,{className:"SlugInput__slugError",size:"body-sm",children:d})]})}function Ut(e){let{route:o}=ee(),t=W(),n=e.collection,r=window.__ROOT_CTX.collections[n];if(!r)throw new Error(`collection not found: ${n}`);let[a]=p(()=>r.autoSlug?be(r.autoSlug):""),[s,f]=p(a),[l,d]=p(!1),[u,c]=p(()=>y(a)),[i,m]=p(""),h=we(n);function y(b){let _=k(b);return _?R(_,r.slugRegex):""}function w(){e.onClose&&e.onClose()}async function L(b){if(b.preventDefault(),d(!0),c(""),y(s)){d(!1);return}let x=k(s),ve=`${n}/${x}`;try{let M={};!h.loading&&h.schema&&(M=await V(h.schema)),await re(ve,{fields:M})}catch(M){m(String(M)),d(!1);return}d(!1),e.skipNavigation?w():o(`/cms/content/${e.collection}/${x}`)}return g(G,{className:"NewDocModal",opened:e.opened||!1,onClose:()=>w(),title:"New",size:"500px",overlayColor:t.colorScheme==="dark"?t.colors.dark[9]:t.colors.gray[2],children:[g("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."}),g("form",{onSubmit:b=>L(b),children:[g(Se,{className:"NewDocModal__slug",collectionId:n,initialSlug:a,onChange:b=>{f(b.slug),c(y(b.slug)),m("")}}),i&&g("div",{className:"NewDocModal__slugError",children:i}),g("div",{className:"NewDocModal__buttons",children:[g(j,{variant:"outline",onClick:()=>w(),type:"button",size:"xs",color:"dark",children:"Cancel"}),g(j,{variant:"filled",type:"submit",size:"xs",color:"dark",loading:h.loading||l,disabled:!!u||!!i,children:"Submit"})]})]})]})}export{$ as a,Ce as b,ze as c,Se as d,$e as e,Qe as f,we as g,V as h,A as i,Ut as j};
@@ -1 +0,0 @@
1
- import{a as B}from"./chunk-V7RAXP2W.js";import{a as P,c as $}from"./chunk-TDKVKTW4.js";import{h as w,i as A}from"./chunk-4KE2SZKH.js";import{a as C}from"./chunk-D37DCENS.js";import{a as v,b as S}from"./chunk-AXETBZ6T.js";import{b as l}from"./chunk-ORXEMIQC.js";import{a as D}from"./chunk-EGEB6N4J.js";import{Fa as c,Ga as o,a as e,c as y,da as T,j as g}from"./chunk-4CUWZQXT.js";g();g();function x(t){let i=k(t.timestamp),[s,a]=e(i>0?l(i,{style:"short"}):"never");return i?(y(()=>{let u=window.setInterval(()=>{a(l(i,{style:"short"}))},6e4);return()=>window.clearInterval(u)},[]),o(c,{transition:"pop",label:`${U(i)} by ${t.email}`,children:l(i,{style:"short"})})):o("div",{children:s})}function U(t){return new Date(t).toLocaleDateString("en",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function k(t){return typeof t=="number"?t:t?.toMillis?t.toMillis():0}function et(t){let i=t.dataSource,[s,a]=e(!1),[u,N]=e(t.action==="sync"?i.syncedAt:i.publishedAt),[I,L]=e(t.action==="sync"?i.syncedBy:i.publishedBy),b=B(),{roles:_}=C(),E=window.firebase.user.email||"",m=P(_,E),d=t.action==="publish",r=!!i.archivedAt;async function M(){a(!0);let p=`data-source-${t.action}-${i.id}`;v({id:p,loading:!0,title:`Running Data Source ${t.action}`,message:`Updating ${i.id}...`,autoClose:!1,disallowClose:!0});try{t.action==="sync"?(i.type==="gsheet"&&!b.isLoggedIn()&&await b.login(),await w(i.id)):t.action==="publish"&&await A(i.id),N(D.now()),L(window.firebase.user.email),a(!1),t.onAction&&t.onAction(),S({id:p,title:"Success",message:`Updated Data Source ${i.id}`,autoClose:!1})}catch(n){console.error(n);let h=n;typeof n=="object"&&n.body&&(h=String(n.body)),a(!1),S({id:p,title:`Data Source ${t.action} failed`,message:String(h),color:"red",autoClose:!1})}}let f="";return t.action==="sync"?f="Sync data to a draft state":t.action==="publish"&&(f="Publish synced data to prod"),o("div",{className:"DataSourceStatusButton",children:[o("div",{className:"DataSourceStatusButton__label",children:!s&&o(x,{timestamp:u,email:I})}),o("div",{className:"DataSourceStatusButton__button",children:o($,{label:r?"Data source is archived":"You don't have access to publish this data source",condition:r||d&&!m,children:o(c,{transition:"pop",label:f,disabled:r||d&&!m,children:o(T,{variant:"default",size:"xs",compact:!0,onClick:()=>M(),loading:s,disabled:r||d&&!m,children:t.action})})})})]})}export{et as a};
@@ -1 +0,0 @@
1
- import{a as bt}from"./chunk-V7RAXP2W.js";import{f as ft,g as ht,h as mt,i as ke,j as R,k as Ae,l as Q,m as vt}from"./chunk-SKEP5WYH.js";import{c as nt}from"./chunk-NQ5ARARP.js";import{a as at}from"./chunk-CVGYBXVH.js";import{a as w,c as we}from"./chunk-AXETBZ6T.js";import{a as ce,f as ot}from"./chunk-ORXEMIQC.js";import{a as N,d as Se}from"./chunk-5MV6XVGA.js";import{c as et,q as tt,r as it,t as de,u as xe}from"./chunk-EGEB6N4J.js";import{f as j}from"./chunk-RPOP6MVJ.js";import{A as qe,Ba as se,Da as Qe,Dc as Y,Ec as Ie,Fa as re,Ga as i,Nb as ut,Oc as gt,R as $e,V as We,Vc as Ee,W as X,Y as G,_ as Fe,a as g,c as z,da as A,e as ve,ea as Ke,fa as B,g as J,ga as Je,i as oe,ic as pt,j as be,kc as De,la as Xe,lb as lt,lc as Te,m as _e,na as Z,nb as st,o as Ve,p as He,pa as Ze,qa as T,ra as ye,tb as rt,ua as ne,vb as dt,w as je,wb as ct,ya as Ye,za as le,zb as Ce}from"./chunk-4CUWZQXT.js";import{d as M,j as ae,k as Le}from"./chunk-KUCVLANF.js";Le();be();function _t(e,l){let t;return(...a)=>{window.clearTimeout(t),t=window.setTimeout(()=>{e(...a)},l)}}function Ft(e){e||(e=6);let l=[],t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",a=t.length;for(let o=0;o<e;o++)l.push(t.charAt(Math.floor(Math.random()*a)));return l.join("")}var q=class{constructor(){this.events=new Map}on(l,t){let a=Ft(6),o=this.events.get(l);return o||(o=new Map,this.events.set(l,o)),o.set(a,t),()=>{this.off(l,a)}}off(l,t){let a=this.events.get(l);a&&(a.delete(t),a.size===0&&this.events.delete(l))}dispatch(l,...t){let a=this.events.get(l);a&&a.forEach(o=>o(...t))}dispose(){this.events.clear()}};var ue=class{constructor(){this.subscribers=new Set;this.subtreeSubscribers=new Set;this.children=new Map}},pe=class extends q{constructor(t){super();this.root=new ue;this.data=t||{}}get(t){return this.getValueFromPath(t,this.data)}set(t,a){if(t===""){N(a)&&this.setData(a);return}this.update({[t]:a})}update(t){let a=new Map,o=(s,r,d)=>{if(a.set(s,d),!N(r)&&!N(d))return;let u=N(r)?Object.keys(r):[],m=N(d)?Object.keys(d):[];new Set([...u,...m]).forEach(h=>{let p=N(r)?r[h]:void 0,b=N(d)?d[h]:void 0;Se(p,b)||o(`${s}.${h}`,p,b)})};Object.entries(t).forEach(([s,r])=>{let d=this.data,u=s.split("."),m=u.pop();for(let h of u)d[h]||(d[h]={}),d=d[h];let F=d[m];d[m]=r,this.dispatch("VALUE_CHANGE",s,r),o(s,F,r)});let n=new Map;a.forEach((s,r)=>{this.collectSubtreeNotifications(r,n)}),a.forEach((s,r)=>{let d=this.getTrieNode(r);d&&d.subscribers.size>0&&d.subscribers.forEach(u=>u(s))}),n.forEach((s,r)=>{let d=this.get(r);s.subtreeSubscribers.forEach(u=>u(d))}),this.dispatch("CHANGE",this.data)}setData(t){let a=this.data;this.notifyOnUpdate(this.root,"",a,t),this.data=t,this.dispatch("CHANGE",this.data)}subscribe(t,a){let o=this.getTrieNode(t,!0);return o.subscribers.add(a),window.setTimeout(()=>{let n=this.get(t);n!==void 0&&a(n)}),()=>{o.subscribers.delete(a)}}subscribeSubtree(t,a){let o=this.getTrieNode(t,!0);return o.subtreeSubscribers.add(a),window.setTimeout(()=>{let n=this.get(t);n!==void 0&&a(n)}),()=>{o.subtreeSubscribers.delete(a)}}getDataSnapshot(){return this.data}dispose(){super.dispose(),this.data={},this.root.subscribers.clear(),this.root.subtreeSubscribers.clear(),this.root.children.clear()}notifyOnUpdate(t,a,o,n){let s=this.getValueFromPath(a,o),r=this.getValueFromPath(a,n);Se(s,r)||(t.subscribers.forEach(d=>d(r)),t.subtreeSubscribers.forEach(d=>d(r))),t.children.forEach((d,u)=>{let m=a?`${a}.${u}`:u;this.notifyOnUpdate(d,m,o,n)})}collectSubtreeNotifications(t,a){let o=this.root;if(o.subtreeSubscribers.size>0&&a.set("",o),!t)return;let n="";for(let s of t.split(".")){if(o=o.children.get(s),!o)return;n=n?`${n}.${s}`:s,o.subtreeSubscribers.size>0&&a.set(n,o)}}getValueFromPath(t,a){if(!t)return a;let o=t.split("."),n=a;for(let s of o){if(n===null||typeof n!="object"||!(s in n))return;n=n[s]}return n}getTrieNode(t,a=!1){if(!t)return this.root;let o=t.split("."),n=this.root;for(let s of o){if(!n.children.has(s))if(a)n.children.set(s,new ue);else return;n=n.children.get(s)}return n}};var yt=3*ce.second,kt=5*ce.minute;var At=30*ce.second,Pe=class extends q{constructor(t){super();this.pendingUpdates=new Map;this.saveState="NO_CHANGES";this.autolock=!1;this.autolockReason="autolock";this.autolockApplied=!1;this.readOnly=!1;this.autoSave=!0;this.flushOnStop=!0;this.started=!1;this.queueChanges=_t(()=>this.flush(),yt);this.projectId=window.__ROOT_CTX.rootConfig.projectId;let[a,o]=t.split("/");this.docId=t,this.collectionId=a,this.slug=o,this.db=window.firebase.db,this.docRef=et(this.db,"Projects",this.projectId,"Collections",a,"Drafts",o),this.store=new pe({id:this.docId,collection:this.collectionId,slug:this.slug,sys:{}}),this.store.on("CHANGE",s=>{this.dispatch("CHANGE",s)}),this.store.on("VALUE_CHANGE",(s,r)=>{this.dispatch("VALUE_CHANGE",s,r)});let n=window.__ROOT_CTX.collections[a];n&&(this.autolock=!!n.autolock,n.autolockReason&&(this.autolockReason=n.autolockReason))}async start(){this.started||(this.started=!0,this.dbUnsubscribe=it(this.docRef,t=>{if(t.metadata.hasPendingWrites)return;let a=t.data()||{};this.pendingUpdates.size>0&&wt(a,Object.fromEntries(this.pendingUpdates)),this.store.setData(a)}))}stop(){this.started&&(this.dbUnsubscribe&&this.dbUnsubscribe(),this.flushOnStop&&this.flush(),this.started=!1)}onChange(t){return this.on("CHANGE",t)}onSaveStateChange(t){return this.on("SAVE_STATE_CHANGE",t)}onFlush(t){return this.on("FLUSH",t)}subscribe(t,a){return this.store.subscribe(t,a)}subscribeSubtree(t,a){return this.store.subscribeSubtree(t,a)}getData(){return this.store.getDataSnapshot()}getValue(t){return this.store.get(t)}async updateKey(t,a){this.readOnly||(a===void 0?this.setPendingUpdate(t,de()):this.setPendingUpdate(t,a),this.store.set(t,a),this.setSaveState("UPDATE_PENDING"),this.autoSave&&this.queueChanges())}async updateKeys(t){if(!this.readOnly){for(let a in t){let o=t[a];o==null?this.setPendingUpdate(a,de()):this.setPendingUpdate(a,o)}this.store.update(t),this.setSaveState("UPDATE_PENDING"),this.autoSave&&this.queueChanges()}}async removeKey(t){this.readOnly||(this.setPendingUpdate(t,de()),this.store.set(t,void 0),this.setSaveState("UPDATE_PENDING"),this.autoSave&&this.queueChanges())}setPendingUpdate(t,a){for(let o of this.pendingUpdates.keys())Ut(o,t)&&this.pendingUpdates.delete(o);this.pendingUpdates.set(t,a)}getPendingUpdates(){return Nt(Object.fromEntries(this.pendingUpdates))}setSaveState(t){let a=this.saveState;t==="SAVED"&&a!=="SAVING"||(this.saveState=t,t==="SAVED"&&window.setTimeout(()=>{this.saveState==="SAVED"&&this.setSaveState("NO_CHANGES")},yt),this.dispatch("SAVE_STATE_CHANGE",t))}removePublishingLock(){this.autolockApplied=!0,this.removeKey("sys.publishingLocked"),this.flush()}async flush(t){if(this.readOnly||this.pendingUpdates.size===0)return;let a=this.getPendingUpdates();a["sys.modifiedAt"]=xe(),a["sys.modifiedBy"]=window.firebase.user.email,this.autolock&&!this.autolockApplied&&!this.store.get("sys.publishingLocked")&&(this.autolockApplied=!0,a["sys.publishingLocked"]={lockedAt:xe(),lockedBy:window.firebase.user.email,reason:this.autolockReason}),this.pendingUpdates.clear();try{this.setSaveState("SAVING"),await tt(this.docRef,a),this.setSaveState("SAVED"),t?.quiet||this.dispatch("FLUSH"),ot("doc.save",{metadata:{docId:this.docId},throttle:kt,throttleId:this.docId})}catch(o){console.error("failed to update doc:",o),this.setSaveState("ERROR");let n=at(o);w({title:`Failed to save ${this.slug}`,message:n||`Something went wrong while saving ${this.slug}`,color:"red",autoClose:!1});for(let s in a)s.startsWith("sys.")||this.pendingUpdates.has(s)||(this.pendingUpdates.set(s,a[s]),this.queueChanges(),console.log("re-queued updates"),console.log(this.pendingUpdates))}}getLocales(){let t=this.store.get("sys.locales");return t||["en"]}setLocales(t){this.updateKey("sys.locales",t)}async dispose(){super.dispose(),this.stop()}};function wt(e,l){for(let t in l){let a=l[t];if(t.includes(".")){let[o,n]=Pt(t);e[o]??={},wt(e[o],{[n]:a})}else typeof a>"u"?delete e[t]:e[t]=a}}function Pt(e){let l=e.indexOf("."),t=e.substring(0,l),a=e.substring(l+1);return[t,a]}function Nt(e){let l={...e};for(let t in l)Ot(t,l)&&delete l[t];return l}function Ot(e,l){let t=e.split(".");for(let a=1;a<t.length;a++)if(t.slice(0,a).join(".")in l)return!0;return!1}function Ut(e,l){return e.startsWith(`${l}.`)}var Ne=ae(null);function hi(e){let[l,t]=g(!0),a=J(()=>new Pe(e.docId),[e.docId]);a.readOnly=e.readOnly??!1,a.autoSave=e.autoSave??!0,a.flushOnStop=e.flushOnStop??!0,z(()=>(t(!0),a.onChange(n=>{t(!1),nt(n.id,n)}),a.start(),()=>a.dispose()),[a]),z(()=>{let n,s=()=>{document.hidden||document.visibilityState!=="visible"?n=window.setTimeout(()=>{a.stop()},At):(n&&(clearTimeout(n),n=void 0),a.started||a.start())};return document.addEventListener("visibilitychange",s),()=>{document.removeEventListener("visibilitychange",s),n&&clearTimeout(n)}},[a]);let o=J(()=>({loading:l,controller:a}),[l,a]);return i(Ne.Provider,{value:o,children:e.children})}function mi(e){return i(Ne.Provider,{value:e.value,children:e.children})}function ge(){let e=oe(Ne);if(!e)throw new Error("useDraftDoc() should be used within a <DraftDocProvider>");return e}function vi(e){let{controller:l}=ge();z(()=>l.onSaveStateChange(e),[l])}function bi(e){let{controller:l}=ge();z(()=>l.onChange(e),[l])}function _i(e,l){let{controller:t}=ge();z(()=>t.subscribe(e,l),[t])}function Oe(e,l){let{controller:t}=ge(),[a,o]=g(t.getValue(e)??l);return z(()=>t.subscribe(e,s=>{o(s)}),[t]),[a,s=>{o(s),s==null?t.removeKey(e):t.updateKey(e,s)}]}Le();je();je();be();var Mt=["drive.google.com","docs.google.com"];function fe(e){try{let l=new URL(e);if(!Mt.includes(l.hostname))return null;if(l.searchParams.has("id"))return l.searchParams.get("id");let t=l.pathname.split("/"),a=t.findIndex(o=>o==="d");if(a!==-1&&a<t.length-1)return t[a+1]}catch{return null}return null}async function xt(e,l){let t="https://www.googleapis.com/auth/drive.readonly";(!e.isLoggedIn()||!e.hasScope(t))&&await e.login({scopes:[t]});let a=window.gapi;if(!a||!a.client||!a.client.drive)throw new Error("Google Drive API not loaded");let o=a.auth.getToken()?.access_token;if(!o)throw new Error("No Google Drive access token found");let[n,s]=await Promise.all([a.client.drive.files.get({fileId:l,fields:"name,mimeType,size",supportsAllDrives:!0}),fetch(`https://www.googleapis.com/drive/v3/files/${l}?alt=media&supportsAllDrives=true`,{headers:{Authorization:`Bearer ${o}`}})]),r=n.result;if(!s.ok)throw new Error(`Failed to download file from Drive: ${s.statusText}`);let d=await s.blob();return new File([d],r.name,{type:r.mimeType})}be();var zt=["1:1","2:3","3:2","3:4","4:3","4:5","5:4","9:16","16:9","21:9"],Gt=["#25262b","#868e96","#fa5252","#e64980","#be4bdb","#7950f2","#4c6ef5","#228be6","#15aabf","#12b886","#40c057","#82c91e","#fab005","#fd7e14"];function St(e){let[l,t]=g("simple"),[a,o]=g(!1),[n,s]=g(!1),[r,d]=g(null),[u,m]=g(""),[F,h]=g(e.initialWidth||1600),[p,b]=g(e.initialHeight||900),[S,$]=g("16:9"),W=!!(window.__ROOT_CTX?.experiments||{}).ai;async function L(){if(!u){w({title:"Prompt required",message:"Please enter a prompt to generate an image.",color:"red"});return}o(!0);try{let _=await(await fetch("/cms/api/ai.generate_image",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({prompt:u,aspectRatio:S})})).json();if(_.success&&_.image)d(_.image);else throw new Error(_.error||"Failed to generate image")}catch(f){console.error(f),w({title:"Generation failed",message:f.message||"Unknown error",color:"red"})}finally{o(!1)}}function te(f){f.preventDefault();let _=new FormData(f.target),y=parseInt(_.get("width"),10),D=parseInt(_.get("height"),10),V=_.get("backgroundColor"),O=_.get("label")||`${y}x${D}`,E=[];if(E.push(`<svg xmlns="http://www.w3.org/2000/svg" width="${y}" height="${D}" viewBox="0 0 ${y} ${D}"><rect width="${y}" height="${D}" fill="${V}" />`),O){let me=y*.5/(O.length*.6);E.push(`<text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle" font-family="sans-serif" font-size="${me}" fill="#fff">${O}</text>`)}E.push("</svg>");let H=E.join(""),U=new TextEncoder().encode(H),he={src:`data:image/svg+xml;base64,${btoa(String.fromCharCode(...U))}`,filename:"placeholder.svg",width:y,height:D,alt:""};e.onSubmit(he)}async function K(){if(r){s(!0);try{let _=await(await fetch(r)).blob(),y=new File([_],"generated-image.png",{type:"image/png"}),{uploadFileToGCS:D}=await import("./gcs-L33FIRZU.js"),V=await D(y),[O,E]=S.split(":").map(Number),H=1600,ie=Math.round(H*E/O),U={...V,width:H,height:ie,alt:u};e.onSubmit(U)}catch(f){console.error(f),w({title:"Save failed",message:f.message||"Failed to upload image",color:"red"})}finally{s(!1)}}}return i(se,{gap:"md",children:[W&&i(Ye,{value:l,onChange:f=>t(f),data:[{label:"Simple",value:"simple"},{label:i(B,{gap:5,children:[i(Y,{size:16}),i("span",{children:"Generate with AI"})]}),value:"ai"}],fullWidth:!0}),l==="simple"?i("form",{onSubmit:te,children:[i(se,{gap:"xs",children:[i(ne,{label:"Width",name:"width",type:"number",value:F,onChange:f=>h(parseInt(f.currentTarget.value,10)),"data-autofocus":!0}),i(ne,{label:"Height",name:"height",type:"number",value:p,onChange:f=>b(parseInt(f.currentTarget.value,10))}),i(ne,{name:"label",label:"Label",defaultValue:""}),i(Je,{name:"backgroundColor",label:"Background color",format:"hex",defaultValue:"#868e96",swatches:Gt})]}),i(B,{justify:"flex-end",mt:"md",children:i(A,{variant:"filled",type:"submit",children:"Create"})})]}):i(se,{gap:"xs",children:[i(le,{label:"Aspect Ratio",data:zt,value:S,onChange:f=>$(f)}),i(Z,{label:"Prompt",placeholder:"Describe the image you want to generate...",minRows:3,value:u,onChange:f=>m(f.currentTarget.value),"data-autofocus":!0,required:!0}),r&&i(Xe,{src:r,alt:"Generated preview",height:200,fit:"contain"}),i(B,{justify:"flex-end",mt:"md",children:[i(A,{variant:"light",onClick:L,loading:a,disabled:n||!u,leftIcon:i(Y,{size:16}),children:a?"Generating...":"Preview"}),i(A,{variant:"filled",onClick:K,loading:n,disabled:!r||a,children:n?"Saving...":"Save"})]})]})]})}var Bt=["image/gif","image/jpeg","image/png","image/svg+xml","image/webp"],Ct=ae(null),Rt=He(()=>import("./ImageEditorDialog-QEULJAT2.js").then(e=>({default:e.ImageEditorDialog})));function ee(){let e=oe(Ct);if(!e)throw new Error("useFileField() should be called within a <FileFieldContext.Provider>");return e}function Lt(e){let{field:l,value:t,setValue:a,loadingState:o,setLoadingState:n}=e,s=qe(),r=ve(null),[d,u]=g(!1),[m,F]=g(!1),[h,p]=g(!1),b=bt(),S=e.allowEditing!==!1,[$,Ue]=g("hash"),[W,L]=g(null),[te,K]=g(!1),[f,_]=g(null),y=e.accept??l.exts??(e.variant==="image"?Bt:[]),D=t?.alt||"",V=e.altDisabledByMetadata===!0,O=l.alt!==!1&&!V;async function E(c,C,v){try{n("loading");let P=v?.namingMode||(l.preserveFilename?"clean":"hash"),k=l.cacheControl||(P==="clean"?"no-cache":void 0),x=await ft(c,{namingMode:P,checkExists:v?.checkExists??!1,cacheControl:k});!x.alt&&Dt(x.filename)&&D&&(x.alt=D),C&&(x.originalSrc=C),a(x),n("complete"),L(null),_(null)}catch(P){console.error("upload failed"),console.error(P),n("error"),w({title:"Upload failed",message:"Failed to upload: "+String(P),color:"red",autoClose:!1})}}async function H(){n("loading");try{let c=t?.gcsPath||t?.src;c&&await ht(c),a(null),n(null),w({message:"File deleted from GCS",color:"green"})}catch(c){console.error(c),n("error"),w({title:"Delete failed",message:String(c),color:"red"})}finally{F(!1)}}function ie(){if(!S&&t?.src){F(!0);return}a(null)}async function U(c,C){if(!c)return;if(L(null),_(null),K(!1),typeof c=="string"&&!C?.as){let k=fe(c);if(k){try{if(!b.enabled){console.warn("Google API integration is not enabled for this project. Specify the `gapi` config in your root.config.ts to enable pasting from Google Drive URLs.");return}n("loading"),w({message:"Downloading from Google Drive...",loading:!0,autoClose:!1,id:"gdrive-download"});let x=await xt(b,k);we("gdrive-download"),U(x)}catch(x){console.error(x),n("error"),we("gdrive-download"),w({title:"Google Drive import failed",message:x.message||"Failed to download",color:"red"})}return}}C?.as==="svg"&&typeof c=="string"&&(c=new File([new Blob([c],{type:"image/svg+xml"})],"untitled.svg",{type:"image/svg+xml"}));let v=c,P=ke(v.name);if(y.length>0&&!y.some(k=>k.endsWith(P)||k===`*/${P}`||k==="*/*"||k===v.type)){w({title:"Invalid file type",message:`File type ${P} is not allowed.`,color:"red",autoClose:!0});return}if($==="clean"&&e.showNamingOptions){n("loading");let x=`${window.__ROOT_CTX.rootConfig.projectId}/uploads/${v.name}`;try{if(await mt(x)){L(v),_(`https://storage.googleapis.com/${window.firebase.storage.app.options.storageBucket}/${x}`),n(null);return}}catch(Re){console.warn("Failed to check file existence",Re)}}E(v,void 0,{namingMode:$})}function Me(){r.current?.focus()}function he(){if(t?.src)if(Ae(t.src)){let c=document.createElement("a");c.href=vt(t.src),t.filename&&(c.download=t.filename),document.body.appendChild(c),c.click(),document.body.removeChild(c)}else window.open(t.src,"_blank")}function ze(){let c=document.createElement("input");c.type="file",y.length>0&&(c.accept=y.join(",")),c.onchange=C=>{let v=C.target;v.files&&v.files.length>0&&U(v.files[0])},c.click(),c.remove()}function Ge(){u(!0)}function me(){p(!0)}function Be(c){t?.src&&a({...t,alt:c||""})}async function Et(){let c=t;if(c?.src){n("loading");try{let C=await window.fetch("/cms/api/ai.generate_alt_text",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({imageUrl:c.src})}),v=await C.json();if(!C.ok||!v.success)throw new Error(v.error||"Failed to generate alt text");v.altText&&Be(v.altText)}catch(C){w({title:"Sorry, something went wrong.",message:C.message||"Unknown error",color:"red",autoClose:!0})}finally{n("complete")}}}return i(Ct.Provider,{value:{field:l,variant:e.variant,value:t,setValue:a,loadingState:o,removeFile:ie,acceptedFileTypes:y,handleFile:U,focusDropZone:Me,requestGenerateAltText:Et,requestFileUpload:ze,requestFileDownload:he,requestPlaceholderModalOpen:Ge,requestImageEditorOpen:me,showAltText:O,altText:D,setAltText:Be,altDisabledByMetadata:V,setAltDisabledByMetadata:e.setAltDisabledByMetadata,allowEditing:S},children:[i(ye,{size:"sm",opened:d,onClose:()=>u(!1),title:"Placeholder image",centered:!0,overlayColor:s.colorScheme==="dark"?s.colors.dark[9]:s.colors.gray[2],children:i(St,{onSubmit:c=>{a(c),u(!1)}})}),i(ye,{size:"sm",opened:m,onClose:()=>F(!1),title:"Delete file?",centered:!0,overlayColor:s.colorScheme==="dark"?s.colors.dark[9]:s.colors.gray[2],children:[i(G,{size:"sm",mb:"lg",children:"Are you sure you want to delete this file from GCS? This action cannot be undone."}),i(B,{grow:!0,spacing:"xs",children:[i(A,{variant:"default",onClick:()=>F(!1),disabled:o==="loading",children:"Cancel"}),i(A,{color:"red",onClick:H,loading:o==="loading",children:"Delete"})]})]}),h&&t?.src&&i(Ve,{fallback:null,children:i(Rt,{opened:h,onClose:()=>p(!1),src:t.src,originalSrc:t.originalSrc,filename:t.filename,initialWidth:parseInt(t.width),initialHeight:parseInt(t.height),onSave:c=>{E(c,t.originalSrc||t.src),p(!1)}},t.src)}),W?i("div",{className:"FileField__overwriteWarning",children:[i("div",{className:"FileField__overwriteWarning__header",children:i(G,{size:"sm",color:"red",weight:700,children:"File already exists"})}),i(G,{size:"sm",children:["A file named ",i("strong",{children:W.name})," already exists."]}),f&&i(G,{size:"sm",className:"FileField__overwriteWarning__link",children:i("a",{href:f,target:"_blank",rel:"noopener noreferrer",children:["View existing file ",i(ct,{size:12})]})}),i("div",{className:"FileField__overwriteWarning__checkbox",children:i(Ke,{label:"Confirm overwrite",checked:te,onChange:c=>K(c.currentTarget.checked)})}),i(B,{grow:!0,spacing:"xs",className:"FileField__overwriteWarning__actions",children:[i(A,{variant:"default",onClick:()=>{L(null),_(null),K(!1)},disabled:o==="loading",children:"Cancel"}),i(A,{disabled:!te,onClick:()=>E(W,void 0,{namingMode:"clean"}),color:"red",loading:o==="loading",children:"Overwrite"})]})]}):i(M,{children:[i("div",{className:j("FileField",e.showNamingOptions&&"FileField--withOptions"),children:[i(I.Dropzone,{ref:r}),t?.src?i(I.Preview,{}):i(I.InvisibleDropzone,{children:i(I.Empty,{})})]}),e.showNamingOptions&&!t&&i("div",{className:"FileField__settings",style:{marginTop:8},children:i(le,{label:"File name options",size:"xs",itemComponent:Vt,data:[{value:"hash",label:"Hash the file name",description:"The filename will be hashed so the file's original name won't be exposed."},{value:"hash-path",label:"Use a hashed path with the original file name",description:"Use the original file name, but put it inside a hashed directory."},{value:"clean",label:"Use the original file name only",description:"The file will be uploaded to the bucket as-is, without a hashed directory."}],value:$,onChange:c=>Ue(c||"hash"),disabled:o==="loading"||!!t})})]})]})}function I(e){let l=e.field,[t,a]=Oe(e.deepKey),[o,n]=g(null),s=jt(e.deepKey),[r,d]=Oe(s),u=r?.alt===!1,m=F=>{let h={...r||{}};F?h.alt=!1:delete h.alt,d(Object.keys(h).length===0?null:h)};return i(Lt,{field:l,value:t,setValue:a,loadingState:o,setLoadingState:n,variant:e.variant,allowEditing:e.allowEditing,altDisabledByMetadata:u,setAltDisabledByMetadata:e.variant==="image"&&l.alt!==!1?m:void 0})}I.Preview=()=>{let e=ee(),[l,t]=g(!1),[a,o]=g(!1),n=window.__ROOT_CTX.experiments||{},s=!!e.value?.width&&!!e.value?.height&&Number(e.value.width)>0&&Number(e.value.height)>0,r=e.value?.filename||"",d=Q(r),u=R(r)||d&&s,[m,F]=g(!u),h=ve(e.value?.src);if(e.value?.src!==h.current){h.current=e.value?.src;let p=e.value?.filename||"",b=R(p)||Q(p)&&s;!b&&!m?F(!0):b&&m&&F(!1)}return e.value?.src?i("div",{className:"FileField__Preview",children:[i("div",{className:"FileField__Preview__InfoButton",children:[u&&i(re,{label:"Toggle file info",position:"top",withArrow:!0,children:i(X,{onClick:()=>F(p=>!p),size:"sm",variant:"outline",className:"FileField__Preview__InfoButton__Icon","aria-label":"Toggle file info",children:i(ut,{size:16})})}),i(T,{shadow:"sm",control:i(X,{variant:"outline",size:"sm",radius:"sm",c:"black",className:"FileField__Preview__InfoButton__Icon",children:i(rt,{size:16})}),children:[e.allowEditing&&i(M,{children:[i(T.Label,{size:"sm",children:"REPLACE"}),i(T.Item,{icon:e.variant==="image"?i(Te,{size:16}):i(Ce,{size:16}),onClick:()=>e.requestFileUpload(),children:["Upload ",e.variant==="image"?"image":"file"]}),Tt(e.acceptedFileTypes)&&i(T.Item,{disabled:!e.value?.src,icon:i(De,{size:16}),onClick:()=>{e.requestPlaceholderModalOpen()},children:"Placeholder image"}),R(e.value?.src)&&!e.value?.src?.endsWith(".svg")&&i(T.Item,{disabled:!e.value?.src,icon:i(st,{size:16}),closeMenuOnClick:!0,onClick:()=>{e.requestImageEditorOpen()},children:"Edit image"}),i(Fe,{})]}),i(T.Item,{disabled:e.value?.src?.startsWith("data:"),onClick:()=>{e?.requestFileDownload()},icon:i(dt,{size:16}),children:"Download file"}),i(T.Item,{closeOnItemClick:!1,icon:i(lt,{size:16}),onClick:()=>{o(!1);let p=e.value?.src||"";Ae(p)&&(p=p.split("=")[0]+"=s0"),navigator.clipboard.writeText(p).then(()=>o(!0)).finally(()=>setTimeout(()=>{o(!1)},2e3))},children:a?"Copied!":"Copy URL"}),e.allowEditing&&R(e.value?.src||"")&&e.value?.canvasBgColor&&i(T.Item,{icon:e.value?.canvasBgColor==="dark"?i(Ee,{size:16}):i(Ie,{size:16,style:{opacity:.25}}),closeOnItemClick:!1,onClick:()=>{let p=e.value?.canvasBgColor==="dark"?"light":"dark";e.value&&e.setValue({...e.value,canvasBgColor:p})},children:"Use dark canvas"}),e.allowEditing&&e.setAltDisabledByMetadata&&i(T.Item,{icon:e.altDisabledByMetadata?i(Ee,{size:16}):i(Ie,{size:16,style:{opacity:.25}}),closeOnItemClick:!1,onClick:()=>{e.setAltDisabledByMetadata?.(!e.altDisabledByMetadata)},children:"Disable alt text"}),i(Fe,{}),i(T.Item,{color:"red",onClick:()=>{e?.removeFile()},icon:i(gt,{size:16}),children:"Remove file"})]})]}),i("div",{className:j("FileField__Canvas",m&&"FileField__Canvas--infoOpened",l&&"dragging"),style:Ht(e.value),onDragOver:p=>{p.preventDefault(),t(!0)},onDragLeave:p=>{p.preventDefault(),t(!1)},onDrop:p=>{p.preventDefault(),t(!1);let b=p.dataTransfer?.files[0];b&&e&&e.handleFile(b)},onPaste:p=>{p.preventDefault();let b=p.clipboardData?.files[0];if(b){e.handleFile(b);return}let S=p.clipboardData?.getData("text/plain");if(S){if(fe(S)){e.handleFile(S);return}if(It(S)){e.handleFile(S,{as:"svg"});return}}},children:[i(Ze,{visible:e.loadingState==="loading"}),m?i("div",{className:"FileField__Canvas__Info",children:[i(pt,{size:16,className:"FileField__Canvas__Info__Icon"}),i(Qe,{className:"FileField__Canvas__Info__Table",verticalSpacing:"xs",fontSize:"xs",children:i("tbody",{children:[e.value?.filename&&i("tr",{children:[i("td",{children:i("b",{children:"Name"})}),i("td",{children:e.value.filename})]}),e.value?.uploadedAt&&i("tr",{children:[i("td",{children:i("b",{children:"Uploaded"})}),i("td",{children:[new Date(parseInt(e.value.uploadedAt,10)).toLocaleString(),e.value.uploadedBy&&i(M,{children:[" by ",e.value.uploadedBy]})]})]}),!!(e.value?.width&&e.value?.height)&&i("tr",{children:[i("td",{children:i("b",{children:"Dimensions"})}),i("td",{children:[e.value.width,"x",e.value.height]})]}),i("tr",{children:[i("td",{children:i("b",{children:"URL"})}),i("td",{children:i(Z,{readOnly:!0,value:e.value?.src,size:"xs",radius:0,autosize:!0,maxRows:10})})]})]})})]}):i(M,{children:[!!(e.value?.width&&e.value?.height)&&i($e,{radius:"sm",className:"FileField__Preview__Info",children:[e.value.width,"x",e.value.height]}),R(e.value?.src)&&i("img",{onClick:()=>{e?.focusDropZone()},onDblClick:()=>{e.allowEditing&&e?.requestFileUpload()},src:e.value.src,alt:e.value.alt||"Uploaded file preview",className:"FileField__Preview__Image"}),Q(e.value?.src)&&i(M,{children:i("video",{className:"FileField__Preview__Image",controls:!0,muted:!0,preload:"metadata",children:i("source",{src:e.value.src,type:`video/${ke(e.value.src)}`})})})]}),e.allowEditing&&i("div",{className:"FileField__reupload",children:i(I.UploadButton,{className:"FileField__reupload__button",compact:!0})})]}),e.allowEditing&&e.showAltText&&(e.altText||Dt(e.value?.filename)||e.variant==="image")&&i("div",{className:"DocEditor__ImageField__imagePreview__Image__Alt",children:[i(Z,{radius:0,className:"DocEditor__ImageField__imagePreview__Image__Alt__Textarea",value:e.altText,placeholder:"Alt text",size:"xs",autosize:!0,disabled:e.loadingState==="loading",onChange:p=>{e?.setAltText(p.currentTarget.value)}}),n.ai&&!e.altText&&e.value?.src?.startsWith("http")&&i(re,{label:"Generate alt text with AI",position:"top",withArrow:!0,children:i(X,{className:"DocEditor__ImageField__imagePreview__Image__Alt__AiButton",onClick:()=>{e.requestGenerateAltText()},disabled:e.loadingState==="loading",children:i(Y,{size:20,stroke:"1.75"})})})]})]}):null};I.UploadButton=e=>{let l=ee(),t=l.loadingState==="loading",a=e.compact?14:16;return i(A,{color:"black",variant:"default",disabled:t,size:e.compact?"compact-xs":"compact-md",className:j("FileField__FileUploadButton",e.compact&&"FileField__FileUploadButton--compact"),onClick:()=>{l.requestFileUpload()},leftIcon:i(M,{children:t&&!e.compact?i(We,{size:a}):l?.variant==="image"?i(Te,{size:a}):i(Ce,{size:a})}),children:t&&!e.compact?"Uploading...":l.value?.src?"Upload":"Paste, drop, or click to upload"})};I.InvisibleDropzone=e=>{let[l,t]=g(!1),a=ee();return i("div",{className:j("FileField__InvisibleDropzone",l&&"dragging"),onDragOver:o=>{o.preventDefault(),o.stopPropagation(),t(!0)},onDragLeave:o=>{o.preventDefault(),o.stopPropagation(),t(!1)},onDrop:o=>{o.preventDefault(),o.stopPropagation(),t(!1);let n=o.dataTransfer?.files[0];n&&a.handleFile(n)},children:e.children})};I.Empty=()=>{let e=ee(),l=J(()=>{if(e.acceptedFileTypes.length===0)return"";let t=e.acceptedFileTypes.filter(a=>a!=="*/*"&&a!=="*");return t.length===0?"":t.map(a=>a.split("/").pop().split("+")[0].replaceAll(".","")).sort().join(", ")},[e.acceptedFileTypes]);return i("div",{className:"FileField__Empty",children:[i("div",{className:"FileField__Empty__Label",children:[i(I.UploadButton,{}),Tt(e.acceptedFileTypes)&&i("div",{children:i(re,{label:"Create placeholder image",children:i(X,{className:"FileField__Empty__Label__PlaceholderButton",onClick:()=>{e.requestPlaceholderModalOpen()},title:"Create placeholder image",children:i(De,{size:16})})})})]}),l&&i("div",{children:i("div",{className:"FileField__Empty__AcceptTypes",children:["Allowed file types: ",l]})})]})};I.Dropzone=_e((e,l)=>{let[t,a]=g(!1),o=ee();return i("button",{ref:l,className:j("FileField__Dropzone",t&&"dragging"),onDblClick:()=>{o?.requestFileUpload()},onCopy:n=>{o.value?.src&&(n.preventDefault(),n.clipboardData?.setData("text/plain",o.value.src),n.clipboardData?.setData("application/json",JSON.stringify(o.value)))},onKeyDown:n=>{((n.metaKey||n.ctrlKey)&&n.key==="Backspace"||n.key==="Delete")&&(n.preventDefault(),o.value?.src&&o.removeFile())},onDragOver:n=>{n.preventDefault(),a(!0)},onDragLeave:n=>{n.preventDefault(),a(!1)},onDrop:n=>{n.preventDefault(),a(!1);let s=n.dataTransfer?.files[0];s&&o&&o.handleFile(s)},onPaste:n=>{if(n.preventDefault(),!o)return;let s=n.clipboardData?.getData("application/json");if(s)try{let u=JSON.parse(s);if(u&&u.src&&u.filename&&o){console.log("Parsed JSON file:",u),o.setValue(u);return}}catch(u){console.error("error parsing json",u)}let r=n.clipboardData?.files[0];if(r){o.handleFile(r);return}let d=n.clipboardData?.getData("text/plain");if(d){if(fe(d)){o.handleFile(d);return}if(It(d)){o.handleFile(d,{as:"svg"});return}}},title:"Drop or paste to upload a file"})});var Vt=_e(e=>{let{label:l,description:t,...a}=e;return i("div",{className:"FileField__NamingModeItem",...a,children:[i(G,{size:"sm",weight:500,children:l}),i(G,{size:"xs",color:"dimmed",children:t})]})});function Dt(e){return e?R(e)||Q(e):!1}function Tt(e){return e.some(l=>l.startsWith("image/"))||e.length===0}function Ht(e){let l={};if(e.width&&e.height){l["--canvas-aspect-ratio"]=`${e.width} / ${e.height}`,l["--canvas-asset-width"]=`${e.width}px`;let t=Math.min(e.height,280);t<80&&(t=80),l["--canvas-max-height"]=`${t}px`}return e.canvasBgColor==="dark"&&(l["--canvas-bg-color"]="#000"),l}function jt(e){let l=e.split("."),t=l.pop();return[...l,`@${t}`].join(".")}function It(e){return/^(?:\uFEFF)?\s*(?:<!--[\s\S]*?-->\s*)*(?:<\?xml[\s\S]*?\?>\s*)?(?:<!DOCTYPE\s+svg[\s\S]*?>\s*)?<svg\b[^>]*?(?:\/>|>[\s\S]*?<\/svg>)\s*$/.test(e)}export{_t as a,Ft as b,q as c,hi as d,mi as e,ge as f,vi as g,bi as h,_i as i,Oe as j,Lt as k,I as l};
@@ -1 +0,0 @@
1
- import{a as X,f as G,g as P,h as H}from"./chunk-UFQSZ6J2.js";import{f as u}from"./chunk-ORXEMIQC.js";import{a as C,b as j,c as d,f as L,g as A,h as B,i as I,j as V,l as $,n as D,o as _,p as E,q as x,s as M,t as w,u as h,v as F,w as T}from"./chunk-EGEB6N4J.js";function Q(e){return typeof e=="object"&&!Array.isArray(e)&&e!==null}function U(e){return Q(e)&&Array.isArray(e.blocks)&&e.blocks.length>0}var v=new Map;function W(e){return v.get(e)||null}async function he(e){let t=W(e);if(t)return t;let s=g(e),o=(await D(s)).data();return Y(e,o),o}function Y(e,t){v.set(e,t)}function S(e){v.delete(e)}function q(e){for(let t of e)S(t)}async function Ce(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,[n,o]=e.split("/"),r=d(s,"Projects",t,"Collections",n,"Drafts",o),i=d(s,"Projects",t,"Collections",n,"Published",o),c=d(s,"Projects",t,"Collections",n,"Scheduled",o),a=T(s);a.delete(r),a.delete(i),a.delete(c),await a.commit(),console.log(`deleted doc: ${e}`),u("doc.delete",{metadata:{docId:e}})}async function Ae(e,t){await Z([e],t)}async function Z(e,t){if(e.length===0){console.log("no docs to publish");return}let s=window.firebase.db;if(e.length>100)throw new Error("publish docs exceeds limit of 100 docs. break up your request into multiple calls.");let n=await re(e),o=t?.batch||T(s),r=["published"];t?.releaseId&&r.push(`release:${t.releaseId}`),e.forEach(i=>{let c=n[i];if(!c)throw new Error(`doc does not exist: ${i}`);ee(o,i,c,r,t?.publishMessage)}),await o.commit(),e.length===1?console.log(`published ${e[0]}`):console.log(`published ${e.length} docs: ${e.join(", ")}`);for(let i of e){let c={docId:i};t?.publishMessage&&(c.publishMessage=t.publishMessage),u("doc.publish",{metadata:c})}q(e)}function ee(e,t,s,n,o){if(se(s))throw new Error(`publishing is locked for doc: ${s.id}`);if(te(s))throw new Error(`cannot publish archived doc: ${s.id}`);let r=window.__ROOT_CTX.rootConfig.projectId,i=window.firebase.db,[c,a]=t.split("/"),b=d(i,"Projects",r,"Collections",c,"Drafts",a),f=d(i,"Projects",r,"Collections",c,"Scheduled",a),p=d(i,"Projects",r,"Collections",c,"Published",a),m={...s},l=m.sys??{};l.modifiedAt=h(),l.modifiedBy=window.firebase.user.email,l.publishedAt=h(),l.publishedBy=window.firebase.user.email,l.firstPublishedAt??=h(),l.firstPublishedBy??=window.firebase.user.email,delete l.scheduledAt,delete l.scheduledBy,e.update(b,{sys:l}),e.set(p,{...m,sys:l}),e.delete(f);let y=d(i,"Projects",r,"Collections",c,"Drafts",a,"Versions",String(Date.now())),R={id:t,collection:c,slug:a,fields:m.fields||{},sys:l};n?.length&&(R.tags=n),o&&(R.publishMessage=o),e.set(y,R)}async function ke(e,t,s){let n=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,[r,i]=e.split("/"),c=d(o,"Projects",n,"Collections",r,"Drafts",i),a=d(o,"Projects",n,"Collections",r,"Scheduled",i);await M(o,async f=>{let p=await f.get(c);if(!p.exists())throw new Error(`${c.id} does not exist`);let m={...p.data()},l=m.sys??{};l.modifiedAt=h(),l.modifiedBy=window.firebase.user.email,l.scheduledAt=C.fromMillis(t),l.scheduledBy=window.firebase.user.email,f.update(c,{sys:l});let y={...m,sys:l};s?.publishMessage&&(y.scheduledPublishMessage=s.publishMessage),f.set(a,y)}),console.log(`saved ${a.id}`);let b={docId:e,scheduledAt:t};s?.publishMessage&&(b.publishMessage=s.publishMessage),u("doc.schedule",{metadata:b})}async function je(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,[n,o]=e.split("/"),r=d(s,"Projects",t,"Collections",n,"Drafts",o),i=d(s,"Projects",t,"Collections",n,"Scheduled",o),c=d(s,"Projects",t,"Collections",n,"Published",o),a=T(s);a.update(r,{"sys.modifiedAt":h(),"sys.modifiedBy":window.firebase.user.email,"sys.publishedAt":w(),"sys.publishedBy":w(),"sys.firstPublishedAt":w(),"sys.firstPublishedBy":w()}),a.delete(i),a.delete(c),await a.commit(),console.log(`unpublished ${e}`),u("doc.unpublish",{metadata:{docId:e}}),S(e)}async function Be(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,[n,o]=e.split("/"),r=d(s,"Projects",t,"Collections",n,"Drafts",o),i=d(s,"Projects",t,"Collections",n,"Published",o);await M(s,async c=>{let a=await c.get(i);if(!a.exists())throw new Error(`${i.id} does not exist`);let b=a.data();c.set(r,b)}),console.log(`reverted draft ${e}`),u("doc.revert",{metadata:{docId:e}})}async function _e(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,[n,o]=e.split("/"),r=d(s,"Projects",t,"Collections",n,"Drafts",o),i=d(s,"Projects",t,"Collections",n,"Scheduled",o),c=T(s);c.update(r,{"sys.modifiedAt":h(),"sys.modifiedBy":window.firebase.user.email,"sys.scheduledAt":w(),"sys.scheduledBy":w()}),c.delete(i),await c.commit(),console.log(`unscheduled ${e}`),u("doc.unschedule",{metadata:{docId:e}})}async function Me(e,t){let s={lockedAt:h(),lockedBy:window.firebase.user.email,reason:t.reason||`Locked by ${window.firebase.user.email}.`};t.until&&(s.until=C.fromMillis(t.until));let n=g(e);await x(n,{"sys.publishingLocked":s});let r={docId:e,reason:t.reason};t.until&&(r.until=t.until),u("doc.lock_publishing",{metadata:r})}async function Pe(e){let t=g(e),s={"sys.publishingLocked":w()};await x(t,s),u("doc.unlock_publishing",{metadata:{docId:e}})}async function ve(e){let t=g(e);await x(t,{"sys.archivedAt":h(),"sys.archivedBy":window.firebase.user.email}),u("doc.archive",{metadata:{docId:e}})}async function Se(e){let t=g(e);await x(t,{"sys.archivedAt":w(),"sys.archivedBy":w()}),u("doc.unarchive",{metadata:{docId:e}})}function te(e){return!!e?.sys?.archivedAt}function Oe(e){let t=C.now().toMillis();return(e?.sys?.scheduledAt?.toMillis()||0)>t}function se(e){if(e?.sys?.publishingLocked){if(e.sys.publishingLocked.until){let t=C.now().toMillis(),s=e.sys.publishingLocked.until.toMillis();return t<s}return!0}return!1}async function Le(e,t,s){let n=g(e),o=await D(n);if(!o.exists())throw new Error(`doc ${e} does not exist`);let r=o.data(),i=r.fields??{},c=r.sys?.locales;await oe(t,{fields:i,locales:c,overwrite:s?.overwrite})}async function oe(e,t){let[s,n]=e.split("/"),o=g(e),r=await D(o);if(r.exists()&&!t?.overwrite)throw new Error(`${e} already exists`);let i={id:e,collection:s,slug:n,sys:{createdAt:h(),createdBy:window.firebase.user.email,modifiedAt:h(),modifiedBy:window.firebase.user.email,locales:t?.locales??["en"]},fields:t?.fields??{}};if(r.exists()&&t?.overwrite){let c=r.data();i.sys={...c.sys,locales:t?.locales??c.sys.locales,modifiedAt:h(),modifiedBy:window.firebase.user.email}}await E(o,i),u("doc.create",{metadata:{docId:e}})}async function Ie(e,t,s){let o=(window.__ROOT_CTX.rootConfig.i18n||{}).locales||["en"];function r(l){for(let y of o)if(String(y).toLowerCase()===l.toLowerCase())return y;return null}let i={};for(let l of t){if(!l.source)continue;let y={source:P(l.source)};Object.entries(l).forEach(([O,K])=>{if(O==="source")return;let k=r(O);k&&!H(k)&&(y[k]=P(K||""))});let R=await G(y.source);i[R]=y}let a=[e.split("/")[0],e];s?.tags&&a.push(...s.tags);let b=X(),f=window.firebase.db,p=T(f),m=0;for(let l in i){let y=i[l],R=d(b,l);p.set(R,{...y,tags:F(...a)},{merge:!0}),m+=1,m>=500&&(await p.commit(),p=T(f),console.log(`saved ${m} strings`),m=0)}return m>0&&(await p.commit(),console.log(`saved ${m} strings`)),u("doc.import_translations",{metadata:{docId:e,...s?.actionMetadata},links:s?.actionLinks}),i}function g(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,[n,o]=e.split("/");return d(s,"Projects",t,"Collections",n,"Drafts",o)}function ne(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,[n,o]=e.split("/");return d(s,"Projects",t,"Collections",n,"Published",o)}function ie(e,t){let s=window.__ROOT_CTX.rootConfig.projectId,n=window.firebase.db,[o,r]=e.split("/");return d(n,"Projects",s,"Collections",o,"Drafts",r,"Versions",t)}async function re(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,n={};e.forEach(r=>{let[i,c]=r.split("/");i in n?n[i].push(c):n[i]=[c]});let o={};return await Promise.all(Object.entries(n).map(async([r,i])=>{let c=j(s,"Projects",t,"Collections",r,"Drafts"),a=A(c,B(L(),"in",i));(await _(a)).forEach(f=>{let p=`${r}/${f.id}`;o[p]=f.data()})})),o}async function Ve(e,t){let s=window.firebase.db,n=g(e),o=j(s,n.path,"Versions"),r=t?.limit??50,i=A(o,I("sys.modifiedAt","desc"),V(r));t?.tags&&(i=A(i,B("tags","array-contains-any",t.tags))),t?.cursor&&(i=A(i,$(t.cursor)));let c=await _(i),a=[],b=null;return c.forEach(f=>{let p={...f.data(),_versionId:f.id};a.push(p),b=f}),{versions:a,lastDoc:b,hasMore:c.size===r}}async function $e(e,t){let s=g(e),n={"sys.modifiedAt":h(),"sys.modifiedBy":window.firebase.user.email,fields:t.fields||{}};await x(s,n),u("doc.restore_version",{metadata:{docId:e,versionModifiedAt:t.sys?.modifiedAt,versionModifiedBy:t.sys?.modifiedBy}})}async function Ee(e,t){let s;t==="draft"?s=g(e):t==="published"?s=ne(e):s=ie(e,t);let n=await D(s);return n.exists()?n.data():null}async function Fe(e,t){if(!t?.spreadsheetId)throw new Error("no spreadsheet id");let s=g(e),n={"sys.l10nSheet":{spreadsheetId:t.spreadsheetId,gid:t.gid||0,linkedAt:h(),linkedBy:window.firebase.user.email}};await x(s,n),u("doc.link_sheet",{metadata:{docId:e,sheetId:t}})}async function Xe(e){let t=g(e),s={"sys.l10nSheet":w()};await x(t,s),u("doc.unlink_sheet",{metadata:{docId:e}})}async function Ge(e){let t=g(e),o=(await D(t)).data()?.sys?.l10nSheet||{};return o?.spreadsheetId?{spreadsheetId:o.spreadsheetId,gid:o.gid||0}:null}function z(e,t){let s={};for(let n in e){let o=e[n];if(J(o))if(o.toMillis)s[n]=o.toMillis();else if(Object.hasOwn(o,"_array")&&Array.isArray(o._array)){let r=o._array.map(i=>{let c={...z(o[i]||{},t),_arrayKey:i};return t?.removeArrayKey&&delete c._arrayKey,c});s[n]=r}else s[n]=z(o,t);else s[n]=o}return s}async function He(e,t){let s=await window.fetch("/cms/api/ai.diff",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({docId:e,beforeVersion:t?.beforeVersion||"published",afterVersion:t?.afterVersion||"draft"})}),n=await s.text(),o=null;try{o=JSON.parse(n)}catch{}if(!s.ok||o?.success===!1){let r=o&&(o.error||o.message)||n;throw new Error(r||"Failed to fetch AI summary")}return typeof o?.summary=="string"?o.summary:typeof o?.data?.summary=="string"?o.data.summary:!o&&n?n:""}function J(e){return typeof e=="object"&&!Array.isArray(e)&&e!==null}function Qe(e){let[t,s]=e.split("/");return{id:e,collection:t,slug:s}}function N(e){if(ce(e))return C.fromMillis(e.seconds*1e3);if(U(e))return e.time=Date.now(),e;if(Array.isArray(e))return e.map(t=>N(t));if(J(e)){let t={};return Object.keys(e).forEach(s=>{t[s]=N(e[s])}),t}return e}function ce(e){return e?.type==="firestore/timestamp/1.0"}export{U as a,he as b,Y as c,Ce as d,Ae as e,Z as f,ke as g,je as h,Be as i,_e as j,Me as k,Pe as l,ve as m,Se as n,te as o,Oe as p,se as q,Le as r,oe as s,Ie as t,re as u,Ve as v,$e as w,Ee as x,Fe as y,Xe as z,Ge as A,z as B,He as C,Qe as D,N as E};