@blinkk/root-cms 3.1.1 → 3.1.3

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 (95) hide show
  1. package/dist/app.js +1 -1
  2. package/dist/{chunk-GXV4UQ6Z.js → chunk-4G7S2LJH.js} +2 -2
  3. package/dist/core/plugin.d.ts +1 -1
  4. package/dist/core/translations.d.ts +19 -4
  5. package/dist/plugin.js +34 -4
  6. package/dist/shared/translation-languages.d.ts +67 -0
  7. package/dist/ui/AIPage-VOTAEVJE.js +1 -0
  8. package/dist/ui/AssetsPage-EWGRMRPJ.js +1 -0
  9. package/dist/ui/{CollectionPage-CU3VDEXA.js → CollectionPage-N5JIAUDS.js} +1 -1
  10. package/dist/ui/ComparePage-JDPVU2VA.js +1 -0
  11. package/dist/ui/{DataPage-XIXFKXDN.js → DataPage-37D4CMLZ.js} +1 -1
  12. package/dist/ui/{DataSourcePage-ORIEQH3Y.js → DataSourcePage-LX5ASYQN.js} +1 -1
  13. package/dist/ui/DocTranslationsPage-V5M4KB7X.js +1 -0
  14. package/dist/ui/DocumentPage-SURTQJPG.js +1 -0
  15. package/dist/ui/{EditDataSourcePage-HIGZZQJC.js → EditDataSourcePage-O7DOV5LX.js} +1 -1
  16. package/dist/ui/{EditReleasePage-KUHBU2HQ.js → EditReleasePage-NDYTKGXY.js} +1 -1
  17. package/dist/ui/{EmbeddedAIPage-CJWZE5FC.js → EmbeddedAIPage-RJOUIPF2.js} +1 -1
  18. package/dist/ui/EmbeddedDocumentPage-SLEULNNI.js +1 -0
  19. package/dist/ui/LogsPage-ZGBP3I35.js +1 -0
  20. package/dist/ui/{NewDataSourcePage-7TUUE6ZL.js → NewDataSourcePage-GQONTMP4.js} +1 -1
  21. package/dist/ui/NewReleasePage-7ZKXHDTD.js +1 -0
  22. package/dist/ui/{NotFoundPage-AW6UC6II.js → NotFoundPage-WXEZQZK6.js} +1 -1
  23. package/dist/ui/ProjectPage-F7W7X6YO.js +1 -0
  24. package/dist/ui/{ReleasePage-W2R3DIFX.js → ReleasePage-ZKMNYPML.js} +1 -1
  25. package/dist/ui/{ReleasesPage-HBBUGE7D.js → ReleasesPage-JHCE6AEJ.js} +1 -1
  26. package/dist/ui/SettingsPage-MWCPZPGE.js +1 -0
  27. package/dist/ui/SidebarToolsPage-API53RRR.js +1 -0
  28. package/dist/ui/TaskPage-73NLAR4J.js +1 -0
  29. package/dist/ui/TasksPage-IKPW2OQO.js +1 -0
  30. package/dist/ui/{TranslationsArbPage-AJLM5VSD.js → TranslationsArbPage-QVN66DIW.js} +1 -1
  31. package/dist/ui/TranslationsEditPage-ZOELF5PK.js +1 -0
  32. package/dist/ui/{TranslationsPage-HPYAJQ4Q.js → TranslationsPage-NGGZB4L6.js} +32 -32
  33. package/dist/ui/{chunk-3T4ZWQR4.js → chunk-2EPQJUGM.js} +1 -1
  34. package/dist/ui/{chunk-2KSMCQ6H.js → chunk-2RAVKX2Z.js} +1 -1
  35. package/dist/ui/{chunk-B6M55OFE.js → chunk-4FGASIIX.js} +1 -1
  36. package/dist/ui/chunk-AAHM6RYJ.js +1 -0
  37. package/dist/ui/{chunk-OXVYTSIZ.js → chunk-BOER3EAW.js} +1 -1
  38. package/dist/ui/{chunk-GU24U5RM.js → chunk-BT2NTAW2.js} +1 -1
  39. package/dist/ui/chunk-BUNR5EU3.js +1 -0
  40. package/dist/ui/{chunk-O5P3CPJ4.js → chunk-BW2MKGNP.js} +1 -1
  41. package/dist/ui/chunk-C2BLMTPR.js +3 -0
  42. package/dist/ui/{chunk-RAXWL656.js → chunk-DIFPCF7I.js} +1 -1
  43. package/dist/ui/{chunk-R6B3W5AJ.js → chunk-DS27MO63.js} +1 -1
  44. package/dist/ui/{chunk-MZTOPPWQ.js → chunk-ENQKSLGJ.js} +1 -1
  45. package/dist/ui/chunk-FXIR2RBE.js +1 -0
  46. package/dist/ui/chunk-G5ZZDHWA.js +1 -0
  47. package/dist/ui/{chunk-76ZGLKLT.js → chunk-GT5EQSEX.js} +1 -1
  48. package/dist/ui/{chunk-AZCGXQTL.js → chunk-IOR72US3.js} +1 -1
  49. package/dist/ui/{chunk-XT5FNJCX.js → chunk-MSYTAJBV.js} +1 -1
  50. package/dist/ui/{chunk-E76ECIOX.js → chunk-NJMNOITA.js} +1 -1
  51. package/dist/ui/chunk-NSI5JSVV.js +1 -0
  52. package/dist/ui/{chunk-OWQL5DVE.js → chunk-PPYM4O5N.js} +1 -1
  53. package/dist/ui/{chunk-WKF7CSWS.js → chunk-QF3GPZTI.js} +1 -1
  54. package/dist/ui/{chunk-TDUBSLEC.js → chunk-T77VOWHP.js} +1 -1
  55. package/dist/ui/chunk-TOGLZDK3.js +1 -0
  56. package/dist/ui/{chunk-V4CTOC6E.js → chunk-TPJCPCRR.js} +1 -1
  57. package/dist/ui/{chunk-GQ5IRK43.js → chunk-TVYAZN2Q.js} +1 -1
  58. package/dist/ui/chunk-UPDL6UXI.js +1 -0
  59. package/dist/ui/{chunk-764W6634.js → chunk-VPHBKJ3I.js} +1 -1
  60. package/dist/ui/{chunk-U7PWJV6F.js → chunk-W6LP22IK.js} +1 -1
  61. package/dist/ui/{chunk-WXT7LTQM.js → chunk-WYJJZTCI.js} +1 -1
  62. package/dist/ui/chunk-Y3MCFLQU.js +141 -0
  63. package/dist/ui/chunk-YUU6LWQK.js +1 -0
  64. package/dist/ui/chunk-Z6DBYLIM.js +1 -0
  65. package/dist/ui/chunk-ZMS6NIGG.js +1 -0
  66. package/dist/ui/ui.css +1 -1
  67. package/dist/ui/ui.js +1 -1
  68. package/package.json +3 -3
  69. package/dist/ui/AIPage-EL6DQYII.js +0 -1
  70. package/dist/ui/AssetsPage-5S6PNMF6.js +0 -1
  71. package/dist/ui/ComparePage-FTZLYO2O.js +0 -1
  72. package/dist/ui/DocTranslationsPage-4OVBIPSG.js +0 -1
  73. package/dist/ui/DocumentPage-3JPFJF3E.js +0 -1
  74. package/dist/ui/EmbeddedDocumentPage-6XQHYIAO.js +0 -1
  75. package/dist/ui/LogsPage-4DVGYXZY.js +0 -1
  76. package/dist/ui/NewReleasePage-6UT36HDW.js +0 -1
  77. package/dist/ui/ProjectPage-US5FJGFK.js +0 -1
  78. package/dist/ui/SettingsPage-7JQQILUV.js +0 -1
  79. package/dist/ui/SidebarToolsPage-MIYXKHF2.js +0 -1
  80. package/dist/ui/TaskPage-JYUQEGRB.js +0 -1
  81. package/dist/ui/TasksPage-4VFQF243.js +0 -1
  82. package/dist/ui/TranslationsEditPage-RTTGTIGI.js +0 -1
  83. package/dist/ui/chunk-5AVRMJVW.js +0 -1
  84. package/dist/ui/chunk-FFHV5S6A.js +0 -1
  85. package/dist/ui/chunk-FSVNOZ6F.js +0 -1
  86. package/dist/ui/chunk-GDXNSFLE.js +0 -1
  87. package/dist/ui/chunk-M3T56ZRP.js +0 -1
  88. package/dist/ui/chunk-MXGHX55S.js +0 -141
  89. package/dist/ui/chunk-QEE7XS6O.js +0 -1
  90. package/dist/ui/chunk-SRX7EWL4.js +0 -1
  91. package/dist/ui/chunk-TFB3VGWP.js +0 -1
  92. package/dist/ui/chunk-YLSRRNSE.js +0 -1
  93. package/dist/ui/chunk-ZN2Y5OUF.js +0 -3
  94. /package/dist/ui/{chunk-E76ECIOX.js.LEGAL.txt → chunk-NJMNOITA.js.LEGAL.txt} +0 -0
  95. /package/dist/ui/{chunk-MXGHX55S.js.LEGAL.txt → chunk-Y3MCFLQU.js.LEGAL.txt} +0 -0
@@ -0,0 +1 @@
1
+ import{a as F,b as B,c as U}from"./chunk-UPDL6UXI.js";import{a as N}from"./chunk-ENQKSLGJ.js";import{a as H}from"./chunk-TOGLZDK3.js";import{b as j}from"./chunk-JS6TK4OP.js";import{g as z}from"./chunk-KRNQ6L35.js";import{a as A}from"./chunk-VD6G5NV4.js";import{e as w}from"./chunk-BUNR5EU3.js";import{Cc as E,Da as O,F as P,Fa as f,Ga as t,U as y,V as x,a as _,c as T,da as l,g as b,j as tt,sa as v,ua as M,za as D}from"./chunk-LROR6N3B.js";import{d as $}from"./chunk-KUCVLANF.js";tt();var et=50,at=["doc.save","doc.publish","doc.restore_version","doc.import_translations","doc.revert"],ot=[{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 W(a){let[e,o]=_(!0),[n,s]=_([]);return T(()=>{z(a?{limit:a}:void 0).then(m=>{s(m),o(!1)})},[a]),{loading:e,actions:n}}function Pt(a){if(a.compact)return t(ct,{...a});let[e,o]=_(""),[n]=P(e,300),[s,m]=_([]),[h,V]=_([]),[g,q]=_("all"),{actions:r,loading:X}=W(),Y=b(()=>{let i=new Set;return r.forEach(c=>i.add(c.action)),Array.from(i).sort()},[r]),Z=b(()=>{let i=new Set;return r.forEach(c=>{c.by&&i.add(c.by)}),Array.from(i).sort()},[r]),S=b(()=>{let i=Date.now();return r.filter(c=>{if(n){let u=n.toLowerCase(),L=c.action.toLowerCase().includes(u),p=c.by?.toLowerCase().includes(u),K=ut(c.metadata).toLowerCase().includes(u);if(!L&&!p&&!K)return!1}if(s.length>0&&!s.includes(c.action)||h.length>0&&(!c.by||!h.includes(c.by)))return!1;if(g&&g!=="all"){let u=C(c.timestamp);if(!u)return!1;let L=u.toMillis(),p=0;switch(g){case"1h":p=i-3600*1e3;break;case"24h":p=i-1440*60*1e3;break;case"7d":p=i-10080*60*1e3;break;case"30d":p=i-720*60*60*1e3;break}if(L<p)return!1}return!0})},[r,n,s,h,g]),d=F(S,{pageSize:et,resetDeps:[n,s,h,g]}),k=d.pageItems;return X?t("div",{className:`ActionsLog ActionsLog--loading ${a.className||""}`,children:t(x,{color:"gray",size:"xl"})}):t("div",{className:`ActionsLog ${a.className||""}`,children:[!a.compact&&t("div",{className:"ActionsLog__tableHeader",children:[t("div",{className:"ActionsLog__filters",children:[t(M,{className:"ActionsLog__filters__search",placeholder:"Search actions...",icon:t(E,{size:16}),value:e,onChange:i=>o(i.target.value)}),t(v,{className:"ActionsLog__filters__select",placeholder:"Filter by action",clearable:!0,searchable:!0,data:Y,value:s,onChange:m}),t(v,{className:"ActionsLog__filters__select",placeholder:"Filter by user",clearable:!0,searchable:!0,data:Z,value:h,onChange:V}),t(D,{className:"ActionsLog__filters__select",placeholder:"Filter by time",data:ot,value:g,onChange:q})]}),t(U,{start:d.start,end:d.end,total:d.totalItems,noun:"action",note:S.length!==r.length?`filtered from ${r.length} total`:void 0})]}),t(H,{className:"ActionsLog__tableSurface",children:t(O,{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:[k.map((i,c)=>t("tr",{className:"ActionsLogs__table__row",children:[t("td",{className:"ActionsLogs__table__col ActionsLogs__table__col--nowrap",children:t(G,{timestamp:i.timestamp,format:"long"})}),t("td",{className:"ActionsLogs__table__col ActionsLogs__table__col--nowrap",children:t("span",{className:"ActionsLogs__user",children:i.by?t($,{children:[t(N,{email:i.by,size:20}),t("span",{className:"ActionsLogs__user__email",children:i.by})]}):"\u2014"})}),t("td",{className:"ActionsLogs__table__col ActionsLogs__table__col--action",children:t("span",{className:"ActionsLogs__action",children:i.action})}),t("td",{className:"ActionsLogs__table__col ActionsLogs__table__col--metadata",children:t(Q,{metadata:i.metadata})}),t("td",{className:"ActionsLogs__table__col ActionsLogs__table__col--links",children:t(I,{action:i})})]},c)),k.length===0&&t("tr",{children:t("td",{colSpan:5,className:"ActionsLogs__table__col ActionsLogs__table__col--empty",children:"No actions found matching your filters."})})]})]})}),t(B,{total:d.totalPages,page:d.page,onChange:d.setPage})]})}function Q(a){let{metadata:e}=a;if(!e||Object.keys(e).length===0)return t("span",{className:"ActionsLogs__metadata--empty",children:"\u2014"});let o=Object.entries(e);return t("div",{className:"ActionsLogs__metadata",children:o.map(([n,s])=>t("div",{className:"ActionsLogs__metadata__item",children:[t("span",{className:"ActionsLogs__metadata__key",children:[n,":"]})," ",t("span",{className:"ActionsLogs__metadata__value",children:nt(s)})]},n))})}function nt(a){if(a==null)return"\u2014";if(Array.isArray(a))return a.length===0?"[]":a.length<=3?a.join(", "):`${a.slice(0,3).join(", ")} (+${a.length-3} more)`;if(typeof a=="object"){let e=st(a);try{return JSON.stringify(e)}catch(o){console.error(o),console.error("failed to stringify json:",e)}}return String(a)}function st(a){let e={};return Object.entries(a).forEach(([o,n])=>{o.startsWith("_")||(e[o]=n)}),e}function I(a){let{action:e}=a,o=[];function n(s){return a.label||s}if(e.action!=="doc.delete"&&e.metadata?.docId&&o.push(t(f,{transition:"pop",label:e.metadata.docId,children:t(l,{component:"a",variant:"default",size:"xs",compact:!0,href:`/cms/content/${e.metadata.docId}`,children:n("Open doc")})},"doc")),at.includes(e.action)&&e.metadata?.docId){let s=C(e.timestamp)?.toMillis();s&&o.push(t(f,{transition:"pop",label:`Show changes to ${e.metadata.docId}`,children:t(l,{component:"a",variant:"default",size:"xs",compact:!0,href:it(e.metadata.docId,s),children:n("Show changes")})},"changes"))}return e.action!=="datasource.delete"&&e.metadata?.datasourceId&&o.push(t(f,{transition:"pop",label:e.metadata.datasourceId,children:t(l,{component:"a",variant:"default",size:"xs",compact:!0,href:`/cms/data/${e.metadata.datasourceId}`,children:n("Open data source")})},"datasource")),e.action!=="release.delete"&&e.metadata?.releaseId&&o.push(t(f,{transition:"pop",label:e.metadata.releaseId,children:t(l,{component:"a",variant:"default",size:"xs",compact:!0,href:`/cms/releases/${e.metadata.releaseId}`,children:n("Open release")})},"release")),e.metadata?.sheetId&&o.push(t(l,{component:"a",variant:"default",size:"xs",compact:!0,href:j(e.metadata.sheetId),target:"_blank",children:n("Open sheet")},"sheet")),e.action.startsWith("acls.")&&o.push(t(l,{component:"a",variant:"default",size:"xs",compact:!0,href:"/cms/settings",children:n("Open settings")},"settings")),e.links&&e.links.forEach((s,m)=>{o.push(t(l,{component:"a",variant:"default",size:"xs",compact:!0,href:s.url,target:s.target,children:s.label},`link-${m}`))}),o.length===0?t("span",{className:"ActionsLogs__links--empty"}):(a.limit&&(o=o.slice(0,a.limit)),t("div",{className:"ActionsLogs__table__buttons",children:o}))}function it(a,e){let o=J(a,`before:${e}`),n=J(a,`after:${e}`);return`/cms/compare?left=${o}&right=${n}`}function J(a,e){return encodeURIComponent(`${a}@${e}`).replaceAll("%2F","/").replaceAll("%40","@").replaceAll("%3A",":")}function ct(a){let{actions:e,loading:o}=W(a.limit||10);return o?t("div",{className:w(a.className,"ActionLogsCompact","ActionLogsCompact--loading"),children:t(x,{color:"gray",size:"xl"})}):t("div",{className:w(a.className,"ActionLogsCompact"),children:t(y,{className:"ActionLogsCompact__table",multiple:!0,children:e.map((n,s)=>t(y.Item,{label:t(rt,{action:n}),children:t(lt,{action:n})},s))})})}function rt(a){let e=a.action,o=mt(e),n=a.action.by||"";return t("div",{className:"ActionLogsCompactItemPreview",children:[t("div",{className:"ActionLogsCompactItemPreview__user",children:t(N,{email:n,size:20})}),t("div",{className:"ActionLogsCompactItemPreview__timestamp",children:t(G,{timestamp:e.timestamp})}),t("div",{className:"ActionLogsCompactItemPreview__action",children:e.action}),t("div",{className:"ActionLogsCompactItemPreview__actionMetaId",children:o}),t("div",{className:"ActionLogsCompactItemPreview__buttons",children:t(I,{action:e,label:"Open",limit:1})})]})}function lt(a){let e=a.action,o={user:e.by,...e.metadata};return t("div",{className:"ActionLogsCompactItemDetails",children:[t(Q,{metadata:o}),t(I,{action:e})]})}function mt(a){for(let e of Object.keys(a.metadata||{}))if(e.toLowerCase().endsWith("id"))return a.metadata[e];return""}function C(a){return a?a instanceof A?a:typeof a=="object"&&typeof a._seconds=="number"?new A(a._seconds,a._nanoseconds||0):typeof a=="object"&&typeof a.seconds=="number"?new A(a.seconds,a.nanoseconds||0):typeof a=="number"?A.fromMillis(a):null:null}function G(a){let e=C(a.timestamp)?.toMillis()||0;if(!e)return t("span",{children:"Invalid date"});let o=a.format==="long"?_t(e):pt(e);return t(f,{transition:"pop",label:gt(e),children:t("span",{className:"ActionsLogs__timestamp",children:o})})}var dt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function R(a){let e=a.getHours(),o=e<12?"AM":"PM",n=String(e%12||12).padStart(2,"0"),s=String(a.getMinutes()).padStart(2,"0");return`${n}:${s} ${o}`}function pt(a){let e=new Date(a),o=String(e.getDate()).padStart(2,"0");return`${dt[e.getMonth()]} ${o}, ${R(e)}`}function _t(a){let e=new Date(a),o=e.toLocaleDateString("en",{month:"long"}),n=String(e.getDate()).padStart(2,"0");return`${o} ${n}, ${e.getFullYear()} ${R(e)}`}function gt(a){return new Date(a).toLocaleString("en",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit"})}function ut(a){function e(o){return o===null?"null":typeof o>"u"?"undefined":typeof o=="string"?`"${o.replaceAll('"','\\"')}"`:typeof o!="object"?String(o):Array.isArray(o)?`[${o.map(e).join(", ")}]`:`{${Object.entries(o).map(([s,m])=>`${s}: ${e(m)}`).join(", ")}}`}return e(a)}export{Pt as a};
@@ -0,0 +1 @@
1
+ import{a as te,g as se,h as U,i as oe,j as ne,m as ie}from"./chunk-C2BLMTPR.js";import{f as p}from"./chunk-KRNQ6L35.js";import{a as k,b as I,c as l,f as J,g as x,h as D,i as O,j as F,l as Y,n as B,o as j,p as M,q as w,r as Z,t as $,u as R,v as m,w as ee,x as T}from"./chunk-VD6G5NV4.js";import{k as N}from"./chunk-7SK47HHZ.js";function re(e){return typeof e=="object"&&!Array.isArray(e)&&e!==null}function ce(e){return re(e)&&Array.isArray(e.blocks)&&e.blocks.length>0}var X=new Map;function Re(e){return X.get(e)||null}async function We(e){let t=Re(e);if(t)return t;let s=b(e),o=(await B(s)).data();return De(e,o),o}function De(e,t){X.set(e,t)}function q(e){X.delete(e)}function L(e){for(let t of e)q(t)}function ae(e){e||(e=6);let t=[],s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",n=s.length;for(let o=0;o<e;o++)t.push(s.charAt(Math.floor(Math.random()*n)));return t.join("")}var v=class extends Error{},le=200,Ce=/[/\\\u0000-\u001f]/;function C(){let e=window.__ROOT_CTX.rootConfig.projectId,t=window.firebase.db;return I(t,"Projects",e,"Assets")}var Te="root-cms:assetPicker:lastFolder";function ue(){let e=window.__ROOT_CTX.rootConfig.projectId;return`${Te}:${e}`}function rt(){try{return localStorage.getItem(ue())||""}catch{return""}}function ct(e){try{localStorage.setItem(ue(),e||"")}catch{}}function H(e){let t=(e||"").trim();if(!t)throw new v("Name is required.");if(t.length>le)throw new v(`Name is too long (max ${le} chars).`);if(Ce.test(t))throw new v("Name cannot contain slashes.");if(t==="."||t==="..")throw new v("Invalid name.");return t}function _(e,t){return e?`${e}/${t}`:t}function at(e){return e?e.split("/").filter(Boolean):[]}function E(e){return`folder-${encodeURIComponent(e)}`}function me(e){return e.sort((t,s)=>t.type!==s.type?t.type==="folder"?-1:1:(t.name||"").localeCompare(s.name||"",void 0,{numeric:!0,sensitivity:"base"}))}function pe(e){return!!e&&typeof e.name=="string"&&(e.type==="file"||e.type==="folder")}async function Be(e){let t=C(),s=x(t,D("parent","==",e||"")),n=await j(s),o=[];return n.forEach(i=>{let r=i.data();pe(r)&&o.push(r)}),me(o)}var de=1e3;async function lt(e){let t=C(),s;e?s=x(t,D("parent",">=",e),D("parent","<=",`${e}\uF8FF`),F(de)):s=x(t,F(de));let n=await j(s),o=[];return n.forEach(i=>{let r=i.data();pe(r)&&(!e||Q(r.parent,e))&&o.push(r)}),me(o)}function dt(e,t){return t?e===t?"":e.startsWith(`${t}/`)?e.slice(t.length+1):e:e}async function P(e){let t=l(C(),e),s=await B(t);return s.exists()?s.data():null}async function ft(e,t){let s=H(t),n=_(e,s),o=E(n),i=l(C(),o),r={id:o,type:"folder",parent:e||"",name:s,createdAt:m(),createdBy:window.firebase.user.email,modifiedAt:m(),modifiedBy:window.firebase.user.email};return await M(i,r,{merge:!0}),p("asset.folder_create",{metadata:{folder:n}}),await P(o)}async function ut(e){let t=W(e.file),s=H(e.name||t.filename||Fe(t.src)),n=ae(12),o=l(C(),n);return await M(o,{id:n,type:"file",parent:e.parent||"",name:s,file:t,createdAt:m(),createdBy:window.firebase.user.email,modifiedAt:m(),modifiedBy:window.firebase.user.email}),p("asset.upload",{metadata:{assetId:n,name:s}}),await P(n)}async function mt(e,t){let s=H(t);if(s===e.name)return;if(e.type==="folder"){let o=_(e.parent,e.name),i=_(e.parent,s);await ge(e,i,s,e.parent),p("asset.rename",{metadata:{from:o,to:i}});return}let n=l(C(),e.id);await w(n,{name:s,modifiedAt:m(),modifiedBy:window.firebase.user.email}),p("asset.rename",{metadata:{assetId:e.id,from:e.name,to:s}})}async function pt(e,t){let s=t||"";if(s===e.parent)return;if(e.type==="folder"){let o=_(e.parent,e.name),i=_(s,e.name);if(i===o||Q(i,o))throw new Error("Cannot move a folder into itself.");await ge(e,i,e.name,s),p("asset.move",{metadata:{from:o,to:i}});return}let n=l(C(),e.id);await w(n,{parent:s,modifiedAt:m(),modifiedBy:window.firebase.user.email}),p("asset.move",{metadata:{assetId:e.id,from:e.parent,to:s}})}function Q(e,t){return e===t||e.startsWith(`${t}/`)}async function ge(e,t,s,n){let o=_(e.parent,e.name),i=C(),r=window.firebase.db,c=x(i,D("parent",">=",o),D("parent","<=",`${o}\uF8FF`)),a=await j(c),f=[];a.forEach(h=>{let A=h.data();Q(A.parent,o)&&f.push(A)});let d=T(r),g=0,y=async()=>{g+=1,g>=400&&(await d.commit(),d=T(r),g=0)},u=E(t);d.set(l(i,u),{id:u,type:"folder",parent:n,name:s,createdAt:e.createdAt??m(),createdBy:e.createdBy??window.firebase.user.email,modifiedAt:m(),modifiedBy:window.firebase.user.email}),await y();for(let h of f){let A=t+h.parent.slice(o.length);if(h.type==="folder"){let S=_(A,h.name);d.set(l(i,E(S)),{...h,id:E(S),parent:A,modifiedAt:m(),modifiedBy:window.firebase.user.email}),await y(),d.delete(l(i,h.id)),await y()}else d.update(l(i,h.id),{parent:A,modifiedAt:m(),modifiedBy:window.firebase.user.email}),await y()}u!==e.id&&(d.delete(l(i,e.id)),g+=1),g>0&&await d.commit()}async function gt(e){if(e.type==="folder"){let t=_(e.parent,e.name);if((await Be(t)).length>0)throw new Error("Folder is not empty.")}await Z(l(C(),e.id)),p("asset.delete",{metadata:{assetId:e.id,name:e.name}})}async function yt(e,t){let s=W(t);!s.alt&&e.file?.alt&&(s.alt=e.file.alt),e.file?.altDisabled&&(s.altDisabled=!0);let n=l(C(),e.id),o={file:s,modifiedAt:m(),modifiedBy:window.firebase.user.email},i=N(s.filename||s.src||""),r=je(e.name,i);return r!==e.name&&(o.name=r),await w(n,o),p("asset.replace",{metadata:{assetId:e.id,name:e.name}}),await P(e.id)}function je(e,t){let s=(e||"").lastIndexOf(".");return!t||s<=0||N(e)===t?e:`${e.slice(0,s)}.${t}`}async function ht(e,t){let s=l(C(),e.id);return await w(s,{"file.alt":t||"",modifiedAt:m(),modifiedBy:window.firebase.user.email}),await P(e.id)}async function wt(e,t){let s=l(C(),e.id);return await w(s,{"file.altDisabled":t?!0:R(),modifiedAt:m(),modifiedBy:window.firebase.user.email}),p("asset.alt_disabled",{metadata:{assetId:e.id,name:e.name,disabled:t}}),await P(e.id)}function _e(e){let t={...W(e.file),assetId:e.id};return t.altDisabled&&(t.alt=""),t}function K(e){let t=new Set;return G(e,t),Array.from(t).sort()}function G(e,t){if(!(!e||typeof e!="object")){if(Array.isArray(e)){for(let s of e)G(s,t);return}if(typeof e.toMillis!="function"){if(z(e)){t.add(e.assetId);return}for(let s of Object.keys(e))G(e[s],t)}}}function z(e){return typeof e?.assetId=="string"&&typeof e?.src=="string"}function fe(e){if(!e||typeof e!="object")return!1;if(Array.isArray(e)){for(let t of e)if(fe(t))return!0;return!1}if(typeof e.toMillis=="function")return!1;if(z(e))return!0;for(let t of Object.keys(e))if(fe(e[t]))return!0;return!1}async function ke(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,n=Object.keys(window.__ROOT_CTX.collections||{});return(await Promise.all(n.map(async r=>{let c=I(s,"Projects",t,"Collections",r,"Drafts"),a=x(c,D("sys.assets","array-contains",e)),f=await j(a),d=[];return f.forEach(g=>{d.push(g.data())}),d}))).flat().sort((r,c)=>r.id.localeCompare(c.id))}async function bt(e,t={}){let s=window.__ROOT_CTX.rootConfig.projectId,n=window.firebase.db,o=t.docs??await ke(e.id),i=[],r=[];for(let c of o){let a=[];if(ye(c.fields,e.id,"fields",a),a.length===0)continue;let f={};for(let u of a)f[u.path]=Ie(e,u.value,t.previousFile);f["sys.modifiedAt"]=m(),f["sys.modifiedBy"]=window.firebase.user.email;let[d,g]=c.id.split("/"),y=l(n,"Projects",s,"Collections",d,"Drafts",g);try{await w(y,f),i.push(c.id)}catch(u){console.error(`failed to sync asset ${e.id} to ${c.id}:`,u),r.push(c.id)}}return i.length>0&&(L(i),p("asset.sync",{metadata:{assetId:e.id,name:e.name,docIds:i}})),{updatedDocIds:i,failedDocIds:r}}function ye(e,t,s,n){if(!(!e||typeof e!="object")&&!Array.isArray(e)&&typeof e.toMillis!="function"){if(z(e)){e.assetId===t&&n.push({path:s,value:e});return}for(let o of Object.keys(e))ye(e[o],t,`${s}.${o}`,n)}}function Ie(e,t,s){let n=_e(e);if(!e.file?.altDisabled){let i=s?.alt??e.file?.alt??"",r=t?.alt||"";r&&r!==i&&(n.alt=r)}let o=s?.canvasBgColor??e.file?.canvasBgColor;return t?.canvasBgColor&&t.canvasBgColor!==o&&(n.canvasBgColor=t.canvasBgColor),n}function W(e){let t={};return Object.entries(e||{}).forEach(([s,n])=>{n!==void 0&&(t[s]=n)}),t}function Fe(e){return(e||"").split("?")[0].split("/").pop()||"untitled"}async function Ft(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,[n,o]=e.split("/"),i=l(s,"Projects",t,"Collections",n,"Drafts",o),r=l(s,"Projects",t,"Collections",n,"Published",o),c=l(s,"Projects",t,"Collections",n,"Scheduled",o),a=T(s);a.delete(i),a.delete(r),a.delete(c),await a.commit(),console.log(`deleted doc: ${e}`),p("doc.delete",{metadata:{docId:e}})}async function vt(e,t){await ve([e],t)}async function ve(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 Ve(e),o=t?.batch||T(s),i=["published"];t?.releaseId&&i.push(`release:${t.releaseId}`),e.forEach(r=>{let c=n[r];if(!c)throw new Error(`doc does not exist: ${r}`);Me(o,r,c,i,t?.publishMessage)}),await o.commit(),e.length===1?console.log(`published ${e[0]}`):console.log(`published ${e.length} docs: ${e.join(", ")}`);for(let r of e){let c={docId:r};t?.publishMessage&&(c.publishMessage=t.publishMessage),p("doc.publish",{metadata:c})}L(e)}function Me(e,t,s,n,o){if(Se(s))throw new Error(`publishing is locked for doc: ${s.id}`);if(Pe(s))throw new Error(`cannot publish archived doc: ${s.id}`);let i=window.__ROOT_CTX.rootConfig.projectId,r=window.firebase.db,[c,a]=t.split("/"),f=l(r,"Projects",i,"Collections",c,"Drafts",a),d=l(r,"Projects",i,"Collections",c,"Scheduled",a),g=l(r,"Projects",i,"Collections",c,"Published",a),y={...s},u=y.sys??{};u.modifiedAt=m(),u.modifiedBy=window.firebase.user.email,u.publishedAt=m(),u.publishedBy=window.firebase.user.email,u.firstPublishedAt??=m(),u.firstPublishedBy??=window.firebase.user.email,delete u.scheduledAt,delete u.scheduledBy,e.update(f,{sys:u}),e.set(g,{...y,sys:u}),e.delete(d);let h=l(r,"Projects",i,"Collections",c,"Drafts",a,"Versions",String(Date.now())),A={id:t,collection:c,slug:a,fields:y.fields||{},sys:u};n?.length&&(A.tags=n),o&&(A.publishMessage=o),e.set(h,A)}async function Mt(e,t,s){let n=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,[i,r]=e.split("/"),c=l(o,"Projects",n,"Collections",i,"Drafts",r),a=l(o,"Projects",n,"Collections",i,"Scheduled",r);await $(o,async d=>{let g=await d.get(c);if(!g.exists())throw new Error(`${c.id} does not exist`);let y={...g.data()},u=y.sys??{};u.modifiedAt=m(),u.modifiedBy=window.firebase.user.email,u.scheduledAt=k.fromMillis(t),u.scheduledBy=window.firebase.user.email,d.update(c,{sys:u});let h={...y,sys:u};s?.publishMessage&&(h.scheduledPublishMessage=s.publishMessage),d.set(a,h)}),console.log(`saved ${a.id}`);let f={docId:e,scheduledAt:t};s?.publishMessage&&(f.publishMessage=s.publishMessage),p("doc.schedule",{metadata:f})}async function Pt(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,[n,o]=e.split("/"),i=l(s,"Projects",t,"Collections",n,"Drafts",o),r=l(s,"Projects",t,"Collections",n,"Scheduled",o),c=l(s,"Projects",t,"Collections",n,"Published",o),a=T(s);a.update(i,{"sys.modifiedAt":m(),"sys.modifiedBy":window.firebase.user.email,"sys.publishedAt":R(),"sys.publishedBy":R(),"sys.firstPublishedAt":R(),"sys.firstPublishedBy":R()}),a.delete(r),a.delete(c),await a.commit(),console.log(`unpublished ${e}`),p("doc.unpublish",{metadata:{docId:e}}),q(e)}async function St(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,[n,o]=e.split("/"),i=l(s,"Projects",t,"Collections",n,"Drafts",o),r=l(s,"Projects",t,"Collections",n,"Published",o);await $(s,async c=>{let a=await c.get(r);if(!a.exists())throw new Error(`${r.id} does not exist`);let f=a.data();c.set(i,f)}),console.log(`reverted draft ${e}`),p("doc.revert",{metadata:{docId:e}})}async function Ot(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,[n,o]=e.split("/"),i=l(s,"Projects",t,"Collections",n,"Drafts",o),r=l(s,"Projects",t,"Collections",n,"Scheduled",o),c=T(s);c.update(i,{"sys.modifiedAt":m(),"sys.modifiedBy":window.firebase.user.email,"sys.scheduledAt":R(),"sys.scheduledBy":R()}),c.delete(r),await c.commit(),console.log(`unscheduled ${e}`),p("doc.unschedule",{metadata:{docId:e}})}async function Lt(e,t){let s={lockedAt:m(),lockedBy:window.firebase.user.email,reason:t.reason||`Locked by ${window.firebase.user.email}.`};t.until&&(s.until=k.fromMillis(t.until));let n=b(e);await w(n,{"sys.publishingLocked":s});let i={docId:e,reason:t.reason};t.until&&(i.until=t.until),p("doc.lock_publishing",{metadata:i})}async function Et(e){let t=b(e),s={"sys.publishingLocked":R()};await w(t,s),p("doc.unlock_publishing",{metadata:{docId:e}})}async function Vt(e){let t=b(e);await w(t,{"sys.archivedAt":m(),"sys.archivedBy":window.firebase.user.email}),p("doc.archive",{metadata:{docId:e}})}async function $t(e){let t=b(e);await w(t,{"sys.archivedAt":R(),"sys.archivedBy":R()}),p("doc.unarchive",{metadata:{docId:e}})}function Pe(e){return!!e?.sys?.archivedAt}function Nt(e){let t=k.now().toMillis();return(e?.sys?.scheduledAt?.toMillis()||0)>t}function Se(e){if(e?.sys?.publishingLocked){if(e.sys.publishingLocked.until){let t=k.now().toMillis(),s=e.sys.publishingLocked.until.toMillis();return t<s}return!0}return!1}async function Ut(e,t,s){let n=b(e),o=await B(n);if(!o.exists())throw new Error(`doc ${e} does not exist`);let i=o.data(),r=i.fields??{},c=i.sys?.locales;await Oe(t,{fields:r,locales:c,overwrite:s?.overwrite})}async function Oe(e,t){let[s,n]=e.split("/"),o=b(e),i=await B(o);if(i.exists()&&!t?.overwrite)throw new Error(`${e} already exists`);let r=t?.fields??{},c={id:e,collection:s,slug:n,sys:{createdAt:m(),createdBy:window.firebase.user.email,modifiedAt:m(),modifiedBy:window.firebase.user.email,locales:t?.locales??["en"]},fields:r};if(i.exists()&&t?.overwrite){let f=i.data();c.sys={...f.sys,locales:t?.locales??f.sys.locales,modifiedAt:m(),modifiedBy:window.firebase.user.email}}let a=K(r);a.length>0?c.sys.assets=a:delete c.sys.assets,await M(o,c),p("doc.create",{metadata:{docId:e}})}async function Xt(e,t,s){let n={};for(let d of t){if(!d.source)continue;let g={source:U(d.source)},y={},u={};Object.entries(d).forEach(([A,S])=>{if(A==="source")return;let Ae=ne(A);for(let V of ie(A)){if(oe(V))continue;let xe=V===Ae?u:y;xe[V]=U(S||"")}}),Object.assign(g,y,u);let h=await se(g.source);n[h]=g}let i=[e.split("/")[0],e];s?.tags&&i.push(...s.tags);let r=te(),c=window.firebase.db,a=T(c),f=0;for(let d in n){let g=n[d],y=l(r,d);a.set(y,{...g,tags:ee(...i)},{merge:!0}),f+=1,f>=500&&(await a.commit(),a=T(c),console.log(`saved ${f} strings`),f=0)}return f>0&&(await a.commit(),console.log(`saved ${f} strings`)),p("doc.import_translations",{metadata:{docId:e,...s?.actionMetadata},links:s?.actionLinks}),n}function b(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,[n,o]=e.split("/");return l(s,"Projects",t,"Collections",n,"Drafts",o)}function Le(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,[n,o]=e.split("/");return l(s,"Projects",t,"Collections",n,"Published",o)}function Ee(e,t){let s=window.__ROOT_CTX.rootConfig.projectId,n=window.firebase.db,[o,i]=e.split("/");return l(n,"Projects",s,"Collections",o,"Drafts",i,"Versions",t)}async function Ve(e){let t=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,n={};e.forEach(i=>{let[r,c]=i.split("/");r in n?n[r].push(c):n[r]=[c]});let o={};return await Promise.all(Object.entries(n).map(async([i,r])=>{let c=I(s,"Projects",t,"Collections",i,"Drafts"),a=x(c,D(J(),"in",r));(await j(a)).forEach(d=>{let g=`${i}/${d.id}`;o[g]=d.data()})})),o}async function qt(e,t){let s=window.firebase.db,n=b(e),o=I(s,n.path,"Versions"),i=t?.limit??50,r=x(o,O("sys.modifiedAt","desc"),F(i));t?.tags&&(r=x(r,D("tags","array-contains-any",t.tags))),t?.cursor&&(r=x(r,Y(t.cursor)));let c=await j(r),a=[],f=null;return c.forEach(d=>{let g={...d.data(),_versionId:d.id};a.push(g),f=d}),{versions:a,lastDoc:f,hasMore:c.size===i}}async function Gt(e,t){let s=b(e),n={"sys.modifiedAt":m(),"sys.modifiedBy":window.firebase.user.email,"sys.assets":K(t.fields||{}),fields:t.fields||{}};await w(s,n),p("doc.restore_version",{metadata:{docId:e,versionModifiedAt:t.sys?.modifiedAt,versionModifiedBy:t.sys?.modifiedBy}})}var $e=/^(before|after):(\d+)$/,Ne=10*1e3;async function Ue(e,t){let s=String(t).match($e);if(s)return await Xe(e,s[1],parseInt(s[2]));let n;t==="draft"?n=b(e):t==="published"?n=Le(e):n=Ee(e,t);let o=await B(n);return o.exists()?o.data():null}async function Xe(e,t,s){let n=window.firebase.db,o=b(e),i=I(n,o.path,"Versions"),r=k.fromMillis(s-Ne),c;t==="before"?c=x(i,D("sys.modifiedAt","<",r),O("sys.modifiedAt","desc"),F(1)):c=x(i,D("sys.modifiedAt",">=",r),O("sys.modifiedAt","asc"),F(1));let a=await j(c);return a.empty?t==="after"?await Ue(e,"draft"):null:a.docs[0].data()}async function Ht(e,t){if(!t?.spreadsheetId)throw new Error("no spreadsheet id");let s=b(e),n={"sys.l10nSheet":{spreadsheetId:t.spreadsheetId,gid:t.gid||0,linkedAt:m(),linkedBy:window.firebase.user.email}};await w(s,n),p("doc.link_sheet",{metadata:{docId:e,sheetId:t}})}async function Qt(e){let t=b(e),s={"sys.l10nSheet":R()};await w(t,s),p("doc.unlink_sheet",{metadata:{docId:e}})}async function Kt(e){let t=b(e),o=(await B(t)).data()?.sys?.l10nSheet||{};return o?.spreadsheetId?{spreadsheetId:o.spreadsheetId,gid:o.gid||0}:null}function he(e,t){let s={};for(let n in e){let o=e[n];if(be(o))if(o.toMillis)s[n]=o.toMillis();else if(Object.hasOwn(o,"_array")&&Array.isArray(o._array)){let i=o._array.map(r=>{let c={...he(o[r]||{},t),_arrayKey:r};return t?.removeArrayKey&&delete c._arrayKey,c});s[n]=i}else s[n]=he(o,t);else s[n]=o}return s}async function zt(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 i=o&&(o.error||o.message)||n;throw new Error(i||"Failed to fetch AI summary")}return typeof o?.summary=="string"?o.summary:typeof o?.data?.summary=="string"?o.data.summary:!o&&n?n:""}function be(e){return typeof e=="object"&&!Array.isArray(e)&&e!==null}function Wt(e){let[t,s]=e.split("/");return{id:e,collection:t,slug:s}}function we(e){if(qe(e))return k.fromMillis(e.seconds*1e3);if(ce(e))return e.time=Date.now(),e;if(Array.isArray(e))return e.map(t=>we(t));if(be(e)){let t={};return Object.keys(e).forEach(s=>{t[s]=we(e[s])}),t}return e}function qe(e){return e?.type==="firestore/timestamp/1.0"}export{ce as a,We as b,De as c,ae as d,rt as e,ct as f,_ as g,at as h,Be as i,lt as j,dt as k,P as l,ft as m,ut as n,mt as o,pt as p,gt as q,yt as r,je as s,ht as t,wt as u,_e as v,K as w,fe as x,ke as y,bt as z,Ft as A,vt as B,ve as C,Mt as D,Pt as E,St as F,Ot as G,Lt as H,Et as I,Vt as J,$t as K,Pe as L,Nt as M,Se as N,Ut as O,Oe as P,Xt as Q,Ve as R,qt as S,Gt as T,Ue as U,Ht as V,Qt as W,Kt as X,he as Y,zt as Z,Wt as _,we as $};
@@ -0,0 +1 @@
1
+ import{b as N,f as R,g as U,i as H,j as O,k as P,m as j,o as M}from"./chunk-VD6G5NV4.js";import{a as u,c as C,e as G,h as A,j as F}from"./chunk-LROR6N3B.js";F();var X=200,Y=25,J=2;function ot(t,n={}){let[s,r]=u([]),[g,e]=u(!1),[o,h]=u(null),[y,a]=u(null),i=G(null),x=n.limit??Y,L=n.minQueryLength??J;return C(()=>{let m=t.trim();if(m.length<L){i.current?.abort(),i.current=null,r([]),e(!1),h(null);return}e(!0),h(null);let S=window.setTimeout(async()=>{i.current?.abort();let l=new AbortController;i.current=l;try{let c=await fetch("/cms/api/search.query",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({q:m,limit:x}),signal:l.signal});if(!c.ok)throw new Error(`search.query returned ${c.status}`);let d=await c.json();if(!d?.success)throw new Error(d?.error||"search failed");if(l.signal.aborted)return;r(Array.isArray(d.hits)?d.hits:[]),a(d.meta||null),e(!1)}catch(c){if(l.signal.aborted)return;console.error("global search failed:",c),h(String(c?.message||c)),r([]),e(!1)}},X);return()=>{window.clearTimeout(S)}},[t,x,L]),{hits:s,loading:g,error:o,status:y}}function st(){let[t,n]=u({status:{lastRun:null,docCount:0,fieldCount:0,shardCount:0},running:!1}),[s,r]=u(!0),g=A(async()=>{try{let e=await fetch("/cms/api/search.status",{method:"GET",headers:{"Content-Type":"application/json"}});if(!e.ok)return;let o=await e.json();if(!o?.success)return;n({status:o.status,running:!!o.running})}catch(e){console.error("search.status failed:",e)}finally{r(!1)}},[]);return C(()=>{g()},[g]),{...t,loading:s,refresh:g}}var V=200,W=5,z=2;function at(t,n={}){let[s,r]=u([]),[g,e]=u(!1),o=G(null),h=n.limit??10,y=n.minQueryLength??z;return C(()=>{let a=t.trim(),i=a.indexOf("/");if((i>=0?a.slice(i+1):a).length<y){o.current&&(o.current.aborted=!0),o.current=null,r([]),e(!1);return}e(!0);let L=window.setTimeout(async()=>{o.current&&(o.current.aborted=!0);let m={aborted:!1};o.current=m;let S=null,l=a;i>=0&&(S=a.slice(0,i),l=a.slice(i+1));let c=window.__ROOT_CTX?.rootConfig?.projectId,d=window.firebase?.db;if(!c||!d){r([]),e(!1);return}let v=Object.keys(window.__ROOT_CTX.collections||{}),$=S?v.filter(p=>p.toLowerCase()===S.toLowerCase()):v,q=l,B=`${l}\uF8FF`;try{let p=$.map(async f=>{let w=N(d,"Projects",c,"Collections",f,"Drafts"),E=U(w,H(R()),P(q),j(B),O(W));try{let b=await M(E),_=[];return b.forEach(D=>{_.push({collection:f,slug:D.id,docId:`${f}/${D.id}`})}),_}catch(b){return console.error(`docSlugSearch failed for ${f}:`,b),[]}}),K=(await Promise.all(p)).flat();if(m.aborted)return;let Q=K.sort((f,w)=>{let E=f.slug===l||f.docId===a?0:1,b=w.slug===l||w.docId===a?0:1;return E!==b?E-b:f.docId.localeCompare(w.docId)});r(Q.slice(0,h)),e(!1)}catch(p){if(m.aborted)return;console.error("docSlugSearch failed:",p),r([]),e(!1)}},V);return()=>{window.clearTimeout(L)}},[t,h,y]),{hits:s,loading:g}}var T=new Set,k=!1;function I(){return T.values().next().value}function Z(t){I()&&(t.preventDefault(),t.returnValue="")}function tt(t){let n=I();if(!n||t.defaultPrevented||t.ctrlKey||t.metaKey||t.altKey||t.shiftKey||t.button!==0)return;let s=t.composedPath().find(r=>r instanceof HTMLAnchorElement&&!!r.href);!s||(s.getAttribute("href")||"").startsWith("#")||s.download||s.origin!==window.location.origin||!/^(_?self)?$/i.test(s.target)||window.confirm(n.message)||(t.preventDefault(),t.stopImmediatePropagation())}function et(t){let n=I();n&&(window.confirm(n.message)||(t.stopImmediatePropagation(),window.history.pushState(null,"",n.url)))}function lt(){k||(k=!0,window.addEventListener("beforeunload",Z),window.addEventListener("click",tt,{capture:!0}),window.addEventListener("popstate",et))}function ct(t){return T.add(t),()=>T.delete(t)}export{ot as a,st as b,at as c,lt as d,ct as e};