@blinkk/root-cms 3.1.3 → 3.1.5

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 (147) hide show
  1. package/dist/app.js +3 -5
  2. package/dist/{chunk-4VZTYUQ7.js → chunk-6CTCV2PN.js} +192 -14
  3. package/dist/{chunk-AFBSITEO.js → chunk-ETHWZSNM.js} +4 -0
  4. package/dist/chunk-MUXSUGFF.js +764 -0
  5. package/dist/cli.js +1 -1
  6. package/dist/client.js +1 -1
  7. package/dist/core/ai-tools.d.ts +82 -42
  8. package/dist/core/ai.d.ts +54 -218
  9. package/dist/core/plugin.d.ts +10 -4
  10. package/dist/core/schema.d.ts +88 -3
  11. package/dist/core.js +1 -1
  12. package/dist/functions.js +2 -3
  13. package/dist/plugin.js +43 -209
  14. package/dist/shared/ai/models.d.ts +110 -0
  15. package/dist/shared/ai/prompt-utils.d.ts +59 -0
  16. package/dist/ui/AIPage-25WICIOT.js +1 -0
  17. package/dist/ui/AssetsPage-WKTM2J2G.js +1 -0
  18. package/dist/ui/CollectionPage-5ZOVG7IG.js +1 -0
  19. package/dist/ui/ComparePage-DDIFYYTK.js +1 -0
  20. package/dist/ui/DataPage-RFNGSDDN.js +1 -0
  21. package/dist/ui/DataSourcePage-U46CDIH2.js +1 -0
  22. package/dist/ui/DocTranslationsPage-BFCM2PE3.js +1 -0
  23. package/dist/ui/DocumentPage-OTBXM55S.js +1 -0
  24. package/dist/ui/EditDataSourcePage-NKKIF6AD.js +1 -0
  25. package/dist/ui/EditReleasePage-TKNOUT7A.js +1 -0
  26. package/dist/ui/EmbeddedAIPage-4AX7VO3T.js +1 -0
  27. package/dist/ui/EmbeddedDocumentPage-2CNQJTW5.js +1 -0
  28. package/dist/ui/{ImageEditorDialog-GGS4VFEA.js → ImageEditorDialog-YDKOGVJV.js} +1 -1
  29. package/dist/ui/LogsPage-SCECIAZH.js +1 -0
  30. package/dist/ui/NewDataSourcePage-FAOPK2RZ.js +1 -0
  31. package/dist/ui/NewReleasePage-HD6T6UV2.js +1 -0
  32. package/dist/ui/{NotFoundPage-WXEZQZK6.js → NotFoundPage-JRYFUENW.js} +1 -1
  33. package/dist/ui/ProjectPage-2WIMWCSX.js +1 -0
  34. package/dist/ui/ReleasePage-GUMEMLF6.js +1 -0
  35. package/dist/ui/ReleasesPage-AW6PICTQ.js +1 -0
  36. package/dist/ui/SettingsPage-KFLNZ356.js +1 -0
  37. package/dist/ui/{SidebarToolsPage-API53RRR.js → SidebarToolsPage-3R7BQ2F7.js} +1 -1
  38. package/dist/ui/TaskPage-GZGPKIL5.js +1 -0
  39. package/dist/ui/TasksPage-G3GBTV3L.js +1 -0
  40. package/dist/ui/TranslationsArbPage-K272JEAA.js +2 -0
  41. package/dist/ui/TranslationsEditPage-XWXPNKRQ.js +1 -0
  42. package/dist/ui/{TranslationsPage-NGGZB4L6.js → TranslationsPage-7KUHVTLK.js} +1 -1
  43. package/dist/ui/ai-tools-7S4URTMT.js +1 -0
  44. package/dist/ui/{chunk-TVYAZN2Q.js → chunk-2FQMT5AB.js} +1 -1
  45. package/dist/ui/{chunk-J5E457OI.js → chunk-2PTLQRTU.js} +1 -1
  46. package/dist/ui/{chunk-UPDL6UXI.js → chunk-2RRM4HEQ.js} +1 -1
  47. package/dist/ui/{chunk-WYJJZTCI.js → chunk-34W6H4YG.js} +1 -1
  48. package/dist/ui/{chunk-4FGASIIX.js → chunk-44ZU5WMI.js} +1 -1
  49. package/dist/ui/{chunk-3E6CASIN.js → chunk-535JU7FU.js} +1 -1
  50. package/dist/ui/chunk-5KSGCGYY.js +1 -0
  51. package/dist/ui/{chunk-ZMS6NIGG.js → chunk-75NMQ3LW.js} +1 -1
  52. package/dist/ui/{chunk-Y3MCFLQU.js → chunk-7UHZS56B.js} +57 -57
  53. package/dist/ui/chunk-AAR7DBEN.js +110 -0
  54. package/dist/ui/{chunk-JS6TK4OP.js → chunk-ATTW36EM.js} +1 -1
  55. package/dist/ui/{chunk-DIFPCF7I.js → chunk-DWV5J2W7.js} +1 -1
  56. package/dist/ui/chunk-DZYYWCHX.js +3 -0
  57. package/dist/ui/chunk-F7RQT4XN.js +1 -0
  58. package/dist/ui/chunk-FVWSVOOY.js +1 -0
  59. package/dist/ui/chunk-GCSN3YEC.js +31 -0
  60. package/dist/ui/{chunk-CAY5NM4Z.js → chunk-H37RXS4R.js} +1 -1
  61. package/dist/ui/{chunk-JTIQBW33.js → chunk-HV3JJ5UT.js} +1 -1
  62. package/dist/ui/{chunk-MSYTAJBV.js → chunk-HXSB6YB2.js} +1 -1
  63. package/dist/ui/chunk-IGZDFHVM.js +1 -0
  64. package/dist/ui/chunk-ISUGBMXC.js +1 -0
  65. package/dist/ui/{chunk-G5ZZDHWA.js → chunk-JBLSUM6W.js} +1 -1
  66. package/dist/ui/{chunk-T77VOWHP.js → chunk-N5RJIILP.js} +1 -1
  67. package/dist/ui/{chunk-BW2MKGNP.js → chunk-NCZD5IWS.js} +1 -1
  68. package/dist/ui/chunk-NXWYS4HG.js +19 -0
  69. package/dist/ui/{chunk-FXIR2RBE.js → chunk-OWBT6YUM.js} +1 -1
  70. package/dist/ui/chunk-OWYV43BT.js +1 -0
  71. package/dist/ui/{chunk-QHJOTXYB.js → chunk-PIJ3E47R.js} +1 -1
  72. package/dist/ui/{chunk-ENQKSLGJ.js → chunk-PLYSJ7W5.js} +1 -1
  73. package/dist/ui/{chunk-FJLNXXE3.js → chunk-QFDU6FXP.js} +1 -1
  74. package/dist/ui/{chunk-P2Z66DHV.js → chunk-QLIIVG5Q.js} +1 -1
  75. package/dist/ui/{chunk-HARRKJFZ.js → chunk-QRAFYIAW.js} +1 -1
  76. package/dist/ui/{chunk-2EPQJUGM.js → chunk-QWB6MAPJ.js} +1 -1
  77. package/dist/ui/{chunk-W6LP22IK.js → chunk-RB23LLKL.js} +1 -1
  78. package/dist/ui/chunk-RN4XVVWD.js +1 -0
  79. package/dist/ui/{chunk-BOER3EAW.js → chunk-SYDHFYRC.js} +1 -1
  80. package/dist/ui/{chunk-NSI5JSVV.js → chunk-T5BJNOWE.js} +1 -1
  81. package/dist/ui/chunk-TNW2GNUR.js +1 -0
  82. package/dist/ui/{chunk-WFQU7V3W.js → chunk-UCYWQEAS.js} +1 -1
  83. package/dist/ui/{chunk-GT5EQSEX.js → chunk-UJX25CXD.js} +1 -1
  84. package/dist/ui/chunk-UPN3EMUS.js +1 -0
  85. package/dist/ui/{chunk-NJMNOITA.js → chunk-VPZHG7JL.js} +1 -1
  86. package/dist/ui/{chunk-BUNR5EU3.js → chunk-WASID5UU.js} +1 -1
  87. package/dist/ui/chunk-WC7KMPEQ.js +1 -0
  88. package/dist/ui/chunk-WRA24P66.js +7 -0
  89. package/dist/ui/{chunk-LROR6N3B.js.LEGAL.txt → chunk-WRA24P66.js.LEGAL.txt} +5 -1
  90. package/dist/ui/chunk-XACLTYBB.js +5 -0
  91. package/dist/ui/{chunk-VD6G5NV4.js → chunk-XOWWPE7X.js} +12 -12
  92. package/dist/ui/chunk-XUBZH4ON.js +1 -0
  93. package/dist/ui/{chunk-QF3GPZTI.js → chunk-Y5EOMMNI.js} +1 -1
  94. package/dist/ui/{chunk-NSOTG64N.js → chunk-YBHFGQ3Z.js} +1 -1
  95. package/dist/ui/chunk-YP6ZH3MT.js +1 -0
  96. package/dist/ui/{chunk-UUVAD4U4.js → chunk-Z3ZJJWFT.js} +1 -1
  97. package/dist/ui/ui.css +1 -1
  98. package/dist/ui/ui.js +1 -1
  99. package/package.json +3 -3
  100. package/dist/chunk-4G7S2LJH.js +0 -1411
  101. package/dist/chunk-AJDMNTZQ.js +0 -187
  102. package/dist/ui/AIPage-VOTAEVJE.js +0 -1
  103. package/dist/ui/AssetsPage-EWGRMRPJ.js +0 -1
  104. package/dist/ui/CollectionPage-N5JIAUDS.js +0 -1
  105. package/dist/ui/ComparePage-JDPVU2VA.js +0 -1
  106. package/dist/ui/DataPage-37D4CMLZ.js +0 -1
  107. package/dist/ui/DataSourcePage-LX5ASYQN.js +0 -1
  108. package/dist/ui/DocTranslationsPage-V5M4KB7X.js +0 -1
  109. package/dist/ui/DocumentPage-SURTQJPG.js +0 -1
  110. package/dist/ui/EditDataSourcePage-O7DOV5LX.js +0 -1
  111. package/dist/ui/EditReleasePage-NDYTKGXY.js +0 -1
  112. package/dist/ui/EmbeddedAIPage-RJOUIPF2.js +0 -1
  113. package/dist/ui/EmbeddedDocumentPage-SLEULNNI.js +0 -1
  114. package/dist/ui/LogsPage-ZGBP3I35.js +0 -1
  115. package/dist/ui/NewDataSourcePage-GQONTMP4.js +0 -1
  116. package/dist/ui/NewReleasePage-7ZKXHDTD.js +0 -1
  117. package/dist/ui/ProjectPage-F7W7X6YO.js +0 -1
  118. package/dist/ui/ReleasePage-ZKMNYPML.js +0 -1
  119. package/dist/ui/ReleasesPage-JHCE6AEJ.js +0 -1
  120. package/dist/ui/SettingsPage-MWCPZPGE.js +0 -1
  121. package/dist/ui/TaskPage-73NLAR4J.js +0 -1
  122. package/dist/ui/TasksPage-IKPW2OQO.js +0 -1
  123. package/dist/ui/TranslationsArbPage-QVN66DIW.js +0 -2
  124. package/dist/ui/TranslationsEditPage-ZOELF5PK.js +0 -1
  125. package/dist/ui/ai-tools-4DWMFQS6.js +0 -1
  126. package/dist/ui/chunk-2RAVKX2Z.js +0 -19
  127. package/dist/ui/chunk-344GZOGG.js +0 -84
  128. package/dist/ui/chunk-4ISFTE2G.js +0 -5
  129. package/dist/ui/chunk-BT2NTAW2.js +0 -1
  130. package/dist/ui/chunk-C2BLMTPR.js +0 -3
  131. package/dist/ui/chunk-D3UIZHRK.js +0 -1
  132. package/dist/ui/chunk-DS27MO63.js +0 -1
  133. package/dist/ui/chunk-HO3W4RVG.js +0 -1
  134. package/dist/ui/chunk-IOR72US3.js +0 -1
  135. package/dist/ui/chunk-KRNQ6L35.js +0 -1
  136. package/dist/ui/chunk-LROR6N3B.js +0 -7
  137. package/dist/ui/chunk-N3JSLTMV.js +0 -1
  138. package/dist/ui/chunk-PPYM4O5N.js +0 -1
  139. package/dist/ui/chunk-TOGLZDK3.js +0 -1
  140. package/dist/ui/chunk-TPJCPCRR.js +0 -1
  141. package/dist/ui/chunk-VPHBKJ3I.js +0 -1
  142. package/dist/ui/chunk-YUU6LWQK.js +0 -1
  143. package/dist/ui/chunk-Z6DBYLIM.js +0 -1
  144. /package/dist/ui/{ImageEditorDialog-GGS4VFEA.js.LEGAL.txt → ImageEditorDialog-YDKOGVJV.js.LEGAL.txt} +0 -0
  145. /package/dist/ui/{chunk-Y3MCFLQU.js.LEGAL.txt → chunk-7UHZS56B.js.LEGAL.txt} +0 -0
  146. /package/dist/ui/{chunk-NJMNOITA.js.LEGAL.txt → chunk-VPZHG7JL.js.LEGAL.txt} +0 -0
  147. /package/dist/ui/{chunk-VD6G5NV4.js.LEGAL.txt → chunk-XOWWPE7X.js.LEGAL.txt} +0 -0
@@ -1 +1 @@
1
- import{c as b,n as x}from"./chunk-VD6G5NV4.js";async function A(){let r=window.firebase.db,e=window.__ROOT_CTX.rootConfig.projectId||"default",t=b(r,"Projects",e),s=await x(t);if(!s.exists)return[];let n=(s.data()||{}).roles||{},o=[];return Object.entries(n).forEach(([p,d])=>{(d==="ADMIN"||d==="EDITOR"||d==="CONTRIBUTOR")&&o.push(p)}),o}var E=class r{constructor(e){this.spreadsheetId=e}static async create(e){let t=e.share??!1,s={fields:"spreadsheetId"};e?.title&&(s.resource={properties:{title:e.title}});let n=(await gapi.client.sheets.spreadsheets.create(s)).result,o=new r(n.spreadsheetId);if(o.setSpreadsheet(n),e?.parent&&await gapi.client.drive.files.update({fileId:o.spreadsheetId,addParents:e.parent,removeParents:"root",fields:"id, parents",resource:{},supportsAllDrives:!0}),t)try{let p=await A();await o.share(p,"writer")}catch(p){console.warn("Failed to share spreadsheet:",p)}return o}getUrl(){return U({spreadsheetId:this.spreadsheetId})}async getSheet(e){if(this.sheets||await this.fetchSheets(),this.sheets){for(let t=0;t<this.sheets.length;t++)if(this.sheets[t].gid===e)return this.sheets[t]}return null}async createSheet(e){console.log("createSheet",this.spreadsheetId);let t=await gapi.client.sheets.spreadsheets.batchUpdate({spreadsheetId:this.spreadsheetId,resource:{requests:[{addSheet:{properties:{title:e.title}}}]}}),s=t.result.replies||[];if(s&&s.length>0){let i=s[0].addSheet?.properties?.sheetId;if(typeof i=="number")return new I(this,i,e.title)}throw console.error(t),new Error("failed to get gid of new tab")}async fetchSheets(){let t=(await gapi.client.sheets.spreadsheets.get({spreadsheetId:this.spreadsheetId,fields:"sheets.properties"})).result;this.setSpreadsheet(t)}setSpreadsheet(e){this.spreadsheet=e,this.spreadsheet.sheets&&this.setSheets(this.spreadsheet.sheets)}setSheets(e){let t=[];e.forEach(s=>{let i=s.properties?.sheetId,n=s.properties?.title,o=new I(this,i??0,n);t.push(o)}),this.sheets=t}async share(e,t){await Promise.all(e.map(async s=>{let i;s.startsWith("*@")?i={type:"domain",domain:s.slice(2),role:t}:i={type:"user",emailAddress:s,role:t},await gapi.client.drive.permissions.create({fileId:this.spreadsheetId,resource:i,sendNotificationEmail:!1,fields:"id",supportsAllDrives:!0})}))}},I=class{constructor(e,t,s){this.spreadsheet=e,this.gid=t,this.title=s}async updateValuesMap(e,t){let s=t.keyedBy,i=t.preserveColumns||[];if(!s)throw new Error('missing "keyedBy" argument');let[n,o]=await this.getValues(),p=[...n],d=[],w=-1,S=new Set;d.push(n.map((a,u)=>(a===s&&(w=u),i.includes(a)&&S.add(u),{hasChanges:!1,value:a})));function v(a){d[0].push({hasChanges:!0,value:a}),p.push(a)}w===-1&&v(s);let y={};o.forEach((a,u)=>{let h=u+1;d.push(a.map((c,l)=>(l===w&&c&&(c in y?console.warn(`multiple rows keyed by "${c}"`):y[c]=h),{hasChanges:!1,value:c})))});function O(a){for(let h in a)p.includes(h)||v(h);return p.map(h=>a[h]??null)}e.forEach(a=>{let u=O(a),h=a[s],c=y[h];if(c){let l=d[c];u.map((m,g)=>{g>=l.length?l.push({hasChanges:!0,value:m||""}):m!==null&&l[g].value!==m&&(!S.has(g)||!l[g].value)&&(l[g]={hasChanges:!0,value:m})})}else d.push(u.map(l=>({hasChanges:!!l,value:l||""})))});let C=p.length,R=d.length,$=n.length,F=o.length+1;(C>$||R>F)&&await this.resizeSheet({numCols:C+2,numRows:R+20});let f=[];d.forEach((a,u)=>{for(;a.length>0&&a.at(-1)?.hasChanges===!1;)a.pop();if(a.length!==0){if(a.every(h=>h.hasChanges)){f.push({range:`${this.title}!A${u+1}`,majorDimension:"ROWS",values:[a.map(h=>h.value||"")]});return}a.forEach((h,c)=>{if(h.hasChanges){let l=P(c);f.push({range:`${this.title}!${l}${u+1}`,majorDimension:"ROWS",values:[[h.value||""]]})}})}}),f.length>0&&await gapi.client.sheets.spreadsheets.values.batchUpdate({spreadsheetId:this.spreadsheet.spreadsheetId,resource:{data:f,valueInputOption:"RAW"}})}async replaceSheet(e,t){let s=e.length,i=t.length+1,n=[];n.push(e),n.push(...t.map(p=>e.map(d=>p[d]||""))),await this.resizeSheet({numCols:s+2,numRows:i+20}),console.log("updating cell values");let o=P(s-1);await gapi.client.sheets.spreadsheets.values.update({spreadsheetId:this.spreadsheet.spreadsheetId,range:`${this.title}!A1:${o}${i}`,valueInputOption:"RAW",resource:{range:`${this.title}!A1:${o}${i}`,majorDimension:"ROWS",values:n}})}async resizeSheet(e){let t=[];e.numCols&&t.push({updateSheetProperties:{properties:{sheetId:this.gid,gridProperties:{columnCount:e.numCols}},fields:"gridProperties.columnCount"}}),e.numRows&&t.push({updateSheetProperties:{properties:{sheetId:this.gid,gridProperties:{rowCount:e.numRows}},fields:"gridProperties.rowCount"}}),t.length>0&&(console.log("resizing sheet"),await gapi.client.sheets.spreadsheets.batchUpdate({spreadsheetId:this.spreadsheet.spreadsheetId,resource:{requests:t}}))}async getValues(){let t=(await gapi.client.sheets.spreadsheets.values.get({spreadsheetId:this.spreadsheet.spreadsheetId,range:this.title})).result.values;if(!t||t.length===0)return[[],[]];let s=t[0],i=t.slice(1);return[s,i]}async getValuesMap(){let[e,t]=await this.getValues();return t.map(i=>{let n={};return i.forEach((o,p)=>{let d=e[p];d&&(n[d]=String(o||""))}),n})}async setTitle(e){await gapi.client.sheets.spreadsheets.batchUpdate({spreadsheetId:this.spreadsheet.spreadsheetId,resource:{requests:[{updateSheetProperties:{properties:{title:e,sheetId:this.gid},fields:"title"}}]}}),this.title=e}getUrl(){return U({spreadsheetId:this.spreadsheet.spreadsheetId,gid:this.gid})}async applyL10nTheme(){await gapi.client.sheets.spreadsheets.batchUpdate({spreadsheetId:this.spreadsheet.spreadsheetId,resource:{requests:[{repeatCell:{range:{sheetId:this.gid,startRowIndex:0},cell:{userEnteredFormat:{textFormat:{fontFamily:"Ubuntu",fontSize:10}}},fields:"userEnteredFormat(textFormat)"}},{repeatCell:{range:{sheetId:this.gid,startRowIndex:0,endRowIndex:1},cell:{userEnteredFormat:{textFormat:{bold:!0,fontFamily:"Ubuntu",fontSize:10}}},fields:"userEnteredFormat(textFormat)"}},{updateSheetProperties:{properties:{sheetId:this.gid,gridProperties:{frozenRowCount:1}},fields:"gridProperties.frozenRowCount"}},{updateDimensionProperties:{range:{sheetId:this.gid,dimension:"COLUMNS",startIndex:0,endIndex:1},properties:{pixelSize:320},fields:"pixelSize"}},{updateDimensionProperties:{range:{sheetId:this.gid,dimension:"COLUMNS",startIndex:1},properties:{pixelSize:320},fields:"pixelSize"}},{repeatCell:{range:{sheetId:this.gid,startRowIndex:1,startColumnIndex:0},cell:{userEnteredFormat:{wrapStrategy:"WRAP"}},fields:"userEnteredFormat(wrapStrategy)"}}]}})}};function U(r){let t=[`https://docs.google.com/spreadsheets/d/${r.spreadsheetId}/edit`];return typeof r.gid=="number"&&t.push(`#gid=${r.gid}`),t.join("")}function k(r){if(!r.startsWith("https://docs.google.com/spreadsheets/d/"))return null;let e=r.split("/"),t=e[e.length-2],i=r.slice(r.indexOf("#")).match(/gid=(\d+)/),n=0;return i&&i[1]&&(n=parseInt(i[1])),{spreadsheetId:t,gid:n}}function P(r){let e=[];for(;r>=0;){let t=r%26;e.push(String.fromCharCode(t+65)),r=(r-t-1)/26}return e.reverse().join("")}function z(r){if(!r)return;if(!r.startsWith("https://drive.google.com/drive/folders/")){let s=r.trim();if(s.length===33&&/^[a-zA-Z0-9_-]+$/.test(s))return s}let e=r.trim().split("/");return e[e.length-1]||void 0}function W(r){let e=z(r);return e?`https://drive.google.com/drive/folders/${e}`:"https://drive.google.com/drive"}export{E as a,U as b,k as c,z as d,W as e};
1
+ import{c as b,n as x}from"./chunk-XOWWPE7X.js";async function A(){let r=window.firebase.db,e=window.__ROOT_CTX.rootConfig.projectId||"default",t=b(r,"Projects",e),s=await x(t);if(!s.exists)return[];let n=(s.data()||{}).roles||{},o=[];return Object.entries(n).forEach(([p,d])=>{(d==="ADMIN"||d==="EDITOR"||d==="CONTRIBUTOR")&&o.push(p)}),o}var E=class r{constructor(e){this.spreadsheetId=e}static async create(e){let t=e.share??!1,s={fields:"spreadsheetId"};e?.title&&(s.resource={properties:{title:e.title}});let n=(await gapi.client.sheets.spreadsheets.create(s)).result,o=new r(n.spreadsheetId);if(o.setSpreadsheet(n),e?.parent&&await gapi.client.drive.files.update({fileId:o.spreadsheetId,addParents:e.parent,removeParents:"root",fields:"id, parents",resource:{},supportsAllDrives:!0}),t)try{let p=await A();await o.share(p,"writer")}catch(p){console.warn("Failed to share spreadsheet:",p)}return o}getUrl(){return U({spreadsheetId:this.spreadsheetId})}async getSheet(e){if(this.sheets||await this.fetchSheets(),this.sheets){for(let t=0;t<this.sheets.length;t++)if(this.sheets[t].gid===e)return this.sheets[t]}return null}async createSheet(e){console.log("createSheet",this.spreadsheetId);let t=await gapi.client.sheets.spreadsheets.batchUpdate({spreadsheetId:this.spreadsheetId,resource:{requests:[{addSheet:{properties:{title:e.title}}}]}}),s=t.result.replies||[];if(s&&s.length>0){let i=s[0].addSheet?.properties?.sheetId;if(typeof i=="number")return new I(this,i,e.title)}throw console.error(t),new Error("failed to get gid of new tab")}async fetchSheets(){let t=(await gapi.client.sheets.spreadsheets.get({spreadsheetId:this.spreadsheetId,fields:"sheets.properties"})).result;this.setSpreadsheet(t)}setSpreadsheet(e){this.spreadsheet=e,this.spreadsheet.sheets&&this.setSheets(this.spreadsheet.sheets)}setSheets(e){let t=[];e.forEach(s=>{let i=s.properties?.sheetId,n=s.properties?.title,o=new I(this,i??0,n);t.push(o)}),this.sheets=t}async share(e,t){await Promise.all(e.map(async s=>{let i;s.startsWith("*@")?i={type:"domain",domain:s.slice(2),role:t}:i={type:"user",emailAddress:s,role:t},await gapi.client.drive.permissions.create({fileId:this.spreadsheetId,resource:i,sendNotificationEmail:!1,fields:"id",supportsAllDrives:!0})}))}},I=class{constructor(e,t,s){this.spreadsheet=e,this.gid=t,this.title=s}async updateValuesMap(e,t){let s=t.keyedBy,i=t.preserveColumns||[];if(!s)throw new Error('missing "keyedBy" argument');let[n,o]=await this.getValues(),p=[...n],d=[],w=-1,S=new Set;d.push(n.map((a,u)=>(a===s&&(w=u),i.includes(a)&&S.add(u),{hasChanges:!1,value:a})));function v(a){d[0].push({hasChanges:!0,value:a}),p.push(a)}w===-1&&v(s);let y={};o.forEach((a,u)=>{let h=u+1;d.push(a.map((c,l)=>(l===w&&c&&(c in y?console.warn(`multiple rows keyed by "${c}"`):y[c]=h),{hasChanges:!1,value:c})))});function O(a){for(let h in a)p.includes(h)||v(h);return p.map(h=>a[h]??null)}e.forEach(a=>{let u=O(a),h=a[s],c=y[h];if(c){let l=d[c];u.map((m,g)=>{g>=l.length?l.push({hasChanges:!0,value:m||""}):m!==null&&l[g].value!==m&&(!S.has(g)||!l[g].value)&&(l[g]={hasChanges:!0,value:m})})}else d.push(u.map(l=>({hasChanges:!!l,value:l||""})))});let C=p.length,R=d.length,$=n.length,F=o.length+1;(C>$||R>F)&&await this.resizeSheet({numCols:C+2,numRows:R+20});let f=[];d.forEach((a,u)=>{for(;a.length>0&&a.at(-1)?.hasChanges===!1;)a.pop();if(a.length!==0){if(a.every(h=>h.hasChanges)){f.push({range:`${this.title}!A${u+1}`,majorDimension:"ROWS",values:[a.map(h=>h.value||"")]});return}a.forEach((h,c)=>{if(h.hasChanges){let l=P(c);f.push({range:`${this.title}!${l}${u+1}`,majorDimension:"ROWS",values:[[h.value||""]]})}})}}),f.length>0&&await gapi.client.sheets.spreadsheets.values.batchUpdate({spreadsheetId:this.spreadsheet.spreadsheetId,resource:{data:f,valueInputOption:"RAW"}})}async replaceSheet(e,t){let s=e.length,i=t.length+1,n=[];n.push(e),n.push(...t.map(p=>e.map(d=>p[d]||""))),await this.resizeSheet({numCols:s+2,numRows:i+20}),console.log("updating cell values");let o=P(s-1);await gapi.client.sheets.spreadsheets.values.update({spreadsheetId:this.spreadsheet.spreadsheetId,range:`${this.title}!A1:${o}${i}`,valueInputOption:"RAW",resource:{range:`${this.title}!A1:${o}${i}`,majorDimension:"ROWS",values:n}})}async resizeSheet(e){let t=[];e.numCols&&t.push({updateSheetProperties:{properties:{sheetId:this.gid,gridProperties:{columnCount:e.numCols}},fields:"gridProperties.columnCount"}}),e.numRows&&t.push({updateSheetProperties:{properties:{sheetId:this.gid,gridProperties:{rowCount:e.numRows}},fields:"gridProperties.rowCount"}}),t.length>0&&(console.log("resizing sheet"),await gapi.client.sheets.spreadsheets.batchUpdate({spreadsheetId:this.spreadsheet.spreadsheetId,resource:{requests:t}}))}async getValues(){let t=(await gapi.client.sheets.spreadsheets.values.get({spreadsheetId:this.spreadsheet.spreadsheetId,range:this.title})).result.values;if(!t||t.length===0)return[[],[]];let s=t[0],i=t.slice(1);return[s,i]}async getValuesMap(){let[e,t]=await this.getValues();return t.map(i=>{let n={};return i.forEach((o,p)=>{let d=e[p];d&&(n[d]=String(o||""))}),n})}async setTitle(e){await gapi.client.sheets.spreadsheets.batchUpdate({spreadsheetId:this.spreadsheet.spreadsheetId,resource:{requests:[{updateSheetProperties:{properties:{title:e,sheetId:this.gid},fields:"title"}}]}}),this.title=e}getUrl(){return U({spreadsheetId:this.spreadsheet.spreadsheetId,gid:this.gid})}async applyL10nTheme(){await gapi.client.sheets.spreadsheets.batchUpdate({spreadsheetId:this.spreadsheet.spreadsheetId,resource:{requests:[{repeatCell:{range:{sheetId:this.gid,startRowIndex:0},cell:{userEnteredFormat:{textFormat:{fontFamily:"Ubuntu",fontSize:10}}},fields:"userEnteredFormat(textFormat)"}},{repeatCell:{range:{sheetId:this.gid,startRowIndex:0,endRowIndex:1},cell:{userEnteredFormat:{textFormat:{bold:!0,fontFamily:"Ubuntu",fontSize:10}}},fields:"userEnteredFormat(textFormat)"}},{updateSheetProperties:{properties:{sheetId:this.gid,gridProperties:{frozenRowCount:1}},fields:"gridProperties.frozenRowCount"}},{updateDimensionProperties:{range:{sheetId:this.gid,dimension:"COLUMNS",startIndex:0,endIndex:1},properties:{pixelSize:320},fields:"pixelSize"}},{updateDimensionProperties:{range:{sheetId:this.gid,dimension:"COLUMNS",startIndex:1},properties:{pixelSize:320},fields:"pixelSize"}},{repeatCell:{range:{sheetId:this.gid,startRowIndex:1,startColumnIndex:0},cell:{userEnteredFormat:{wrapStrategy:"WRAP"}},fields:"userEnteredFormat(wrapStrategy)"}}]}})}};function U(r){let t=[`https://docs.google.com/spreadsheets/d/${r.spreadsheetId}/edit`];return typeof r.gid=="number"&&t.push(`#gid=${r.gid}`),t.join("")}function k(r){if(!r.startsWith("https://docs.google.com/spreadsheets/d/"))return null;let e=r.split("/"),t=e[e.length-2],i=r.slice(r.indexOf("#")).match(/gid=(\d+)/),n=0;return i&&i[1]&&(n=parseInt(i[1])),{spreadsheetId:t,gid:n}}function P(r){let e=[];for(;r>=0;){let t=r%26;e.push(String.fromCharCode(t+65)),r=(r-t-1)/26}return e.reverse().join("")}function z(r){if(!r)return;if(!r.startsWith("https://drive.google.com/drive/folders/")){let s=r.trim();if(s.length===33&&/^[a-zA-Z0-9_-]+$/.test(s))return s}let e=r.trim().split("/");return e[e.length-1]||void 0}function W(r){let e=z(r);return e?`https://drive.google.com/drive/folders/${e}`:"https://drive.google.com/drive"}export{E as a,U as b,k as c,z as d,W as e};
@@ -1 +1 @@
1
- import{e as z,j as I}from"./chunk-PPYM4O5N.js";import{c as N,e as L}from"./chunk-DS27MO63.js";import{a as C}from"./chunk-FJLNXXE3.js";import{a as w,c as y}from"./chunk-HARRKJFZ.js";import{b as v}from"./chunk-5MV6XVGA.js";import{Cc as B,Ga as e,V as P,a as g,da as p,g as M,j as x,ua as S,za as f}from"./chunk-LROR6N3B.js";x();x();function O(o,t){return M(()=>{if(!t.trim())return o;let l=t.toLowerCase();return o.filter(c=>{let[a,u]=c.id.split("/"),r=c.fields||{},n=window.__ROOT_CTX.collections[a],s=v(r,n.preview?.title||"meta.title")||"";return c.id.toLowerCase().includes(l)||s.toLowerCase().includes(l)||u.toLowerCase().includes(l)})},[o,t])}var h="DocPickerModal";function ee(){let o=w(),t=y();return{open:l=>{o.openContextModal(h,{...t,innerProps:l,size:"700px",overflow:"inside"})},close:()=>{o.closeModal(h)}}}function k(o){let{innerProps:t}=o,l=Object.keys(window.__ROOT_CTX.collections);t.collections?.length&&(l=l.filter(i=>t.collections?.includes(i)));let c=[{value:"",label:"Select"}];l.forEach(i=>{c.push({value:i,label:i})});let[a,u]=C("DocPickerModal.lastSelectedCollection",""),r=()=>t.initialCollection?t.initialCollection:a&&l.includes(a)?a:l.length===1?l[0]:"",[n,D]=g(r()),s=i=>{D(i),u(i)};function m(i){t.multiSelect&&t.onChangeMulti?t.onChangeMulti(i.id,!0):t.onChange&&t.onChange(i.id)}function b(i){t.multiSelect&&t.onChangeMulti&&t.onChangeMulti(i.id,!1)}return e("div",{className:"DocPickerModal",children:[l.length===0&&e("div",{className:"DocPickerModal__noCollections",children:"No collections matching schema field definition."}),l.length>0&&e(k.DocsList,{collection:n,onDocSelected:m,onDocUnselected:b,onCollectionChange:s,multiSelect:t.multiSelect,selectedDocIds:t.selectedDocIds,options:{enableSearch:t.enableSearch??!0,enableSort:t.enableSort??!0,enableCreate:t.enableCreate??!0,enableStatusBadges:t.enableStatusBadges??!0,showCollectionSelect:l.length>1,collectionSelectValue:n,collectionSelectOptions:c}})]})}k.DocsList=o=>{let[t,l]=g(""),[c,a]=C(`root::DocPickerModal:${o.collection}:sortBy`,"modifiedAt"),[u,r]=g(!1),[n,D,s]=z(o.collection||"",{orderBy:c}),m=O(s,t),b=[{value:"modifiedAt",label:"Last Modified"},{value:"slug",label:"A-Z"},{value:"slugDesc",label:"Z-A"},{value:"newest",label:"Newest"},{value:"oldest",label:"Oldest"}],i=o.selectedDocIds||[],d=o.options||{};return e("div",{className:"DocPickerModal__DocsList",children:[e("div",{className:"DocPickerModal__DocsList__stickyHeader",children:[d.showCollectionSelect&&e("div",{className:"DocPickerModal__collection__select",children:[e("div",{className:"DocPickerModal__collection__select__label",children:"Content Type:"}),e(f,{data:d.collectionSelectOptions||[],value:d.collectionSelectValue,placeholder:"Select",onChange:_=>{o.onCollectionChange?.(_||"")},size:"xs",radius:0,searchable:!0,autoFocus:!0,dropdownComponent:"div"}),d.collectionSelectValue&&e(p,{variant:"outline",color:"dark",size:"xs",onClick:()=>r(!0),children:"New"})]}),d.enableSearch&&d.collectionSelectValue&&e("div",{className:"DocPickerModal__DocsList__controls",children:[e(S,{placeholder:"Search documents...",value:t,onChange:_=>l(_.target.value),icon:e(B,{size:16}),size:"xs",className:"DocPickerModal__DocsList__controls__search"}),d.enableSort&&e(f,{data:b,value:c,onChange:_=>a(_||"modifiedAt"),size:"xs",className:"DocPickerModal__DocsList__controls__sort"})]}),!n&&s.length>0&&e("div",{className:"DocPickerModal__DocsList__count",children:["Showing ",m.length," of ",s.length," documents"]})]}),e("div",{className:"DocPickerModal__DocsList__docsContainer",children:o.collection?n?e("div",{className:"DocPickerModal__DocsList__loading",children:e(P,{color:"gray",size:"xl"})}):m.length===0?e("div",{className:"DocPickerModal__DocsList__empty",children:s.length===0?"Collection is empty.":"No documents match your search."}):e("div",{className:"DocPickerModal__DocsList__docs",children:m.map(_=>e(k.DocCard,{doc:_,onDocSelected:o.onDocSelected,onDocUnselected:o.onDocUnselected,multiSelect:o.multiSelect,selected:i.includes(_.id),enableStatusBadges:d.enableStatusBadges},_.id))}):e("div",{className:"DocPickerModal__DocsList__empty",children:"Select a content type to view documents"})}),d.collectionSelectValue&&e(I,{collection:d.collectionSelectValue,opened:u,skipNavigation:!0,onClose:()=>{r(!1),D()}})]})};k.DocCard=o=>{let[t,l]=g(!!o.selected),c=o.doc,[a,u]=c.id.split("/"),r=c.fields||{},n=window.__ROOT_CTX.collections[a],D=`/cms/content/${a}/${u}`,s=v(r,n.preview?.title||"meta.title"),m=v(r,n.preview?.image||"meta.image")||n.preview?.defaultImage;return e("div",{className:"DocPickerModal__DocCard",children:[e("div",{className:"DocPickerModal__DocCard__image",onClick:()=>window.open(D,"_blank"),children:e(L,{file:m,width:120,height:90,withPlaceholder:!m?.src})}),e("div",{className:"DocPickerModal__DocCard__content",children:[e("div",{className:"DocPickerModal__DocCard__content__header",children:e("div",{className:"DocPickerModal__DocCard__content__header__docId",onClick:()=>window.open(D,"_blank"),children:c.id})}),e("div",{className:"DocPickerModal__DocCard__content__title",children:e("div",{className:"DocPickerModal__DocCard__content__link",onClick:()=>window.open(D,"_blank"),children:s||"[UNTITLED]"})}),o.enableStatusBadges&&e("div",{className:"DocPickerModal__DocCard__content__badges",children:e(N,{doc:c})})]}),e("div",{className:"DocPickerModal__DocCard__controls",children:e("div",{className:"DocPickerModal__DocCard__controls__buttons",children:o.multiSelect?t?e(p,{variant:"light",color:"blue",size:"xs",onClick:()=>{l(!1),o.onDocUnselected(o.doc)},children:"Unselect"}):e(p,{variant:"filled",color:"blue",size:"xs",onClick:()=>{l(!0),o.onDocSelected(o.doc)},children:"Select"}):e(p,{color:"blue",size:"xs",onClick:()=>o.onDocSelected(o.doc),children:"Select"})})})]})};k.id=h;export{ee as a,k as b};
1
+ import{e as z,j as I}from"./chunk-UPN3EMUS.js";import{d as N,f as L}from"./chunk-TNW2GNUR.js";import{a as C}from"./chunk-QFDU6FXP.js";import{a as w,c as y}from"./chunk-QRAFYIAW.js";import{b as v}from"./chunk-5MV6XVGA.js";import{Ga as e,Gc as B,V as P,a as g,da as p,g as M,j as x,ua as S,za as f}from"./chunk-WRA24P66.js";x();x();function O(o,t){return M(()=>{if(!t.trim())return o;let l=t.toLowerCase();return o.filter(c=>{let[a,u]=c.id.split("/"),r=c.fields||{},n=window.__ROOT_CTX.collections[a],s=v(r,n.preview?.title||"meta.title")||"";return c.id.toLowerCase().includes(l)||s.toLowerCase().includes(l)||u.toLowerCase().includes(l)})},[o,t])}var h="DocPickerModal";function ee(){let o=w(),t=y();return{open:l=>{o.openContextModal(h,{...t,innerProps:l,size:"700px",overflow:"inside"})},close:()=>{o.closeModal(h)}}}function k(o){let{innerProps:t}=o,l=Object.keys(window.__ROOT_CTX.collections);t.collections?.length&&(l=l.filter(i=>t.collections?.includes(i)));let c=[{value:"",label:"Select"}];l.forEach(i=>{c.push({value:i,label:i})});let[a,u]=C("DocPickerModal.lastSelectedCollection",""),r=()=>t.initialCollection?t.initialCollection:a&&l.includes(a)?a:l.length===1?l[0]:"",[n,D]=g(r()),s=i=>{D(i),u(i)};function m(i){t.multiSelect&&t.onChangeMulti?t.onChangeMulti(i.id,!0):t.onChange&&t.onChange(i.id)}function b(i){t.multiSelect&&t.onChangeMulti&&t.onChangeMulti(i.id,!1)}return e("div",{className:"DocPickerModal",children:[l.length===0&&e("div",{className:"DocPickerModal__noCollections",children:"No collections matching schema field definition."}),l.length>0&&e(k.DocsList,{collection:n,onDocSelected:m,onDocUnselected:b,onCollectionChange:s,multiSelect:t.multiSelect,selectedDocIds:t.selectedDocIds,options:{enableSearch:t.enableSearch??!0,enableSort:t.enableSort??!0,enableCreate:t.enableCreate??!0,enableStatusBadges:t.enableStatusBadges??!0,showCollectionSelect:l.length>1,collectionSelectValue:n,collectionSelectOptions:c}})]})}k.DocsList=o=>{let[t,l]=g(""),[c,a]=C(`root::DocPickerModal:${o.collection}:sortBy`,"modifiedAt"),[u,r]=g(!1),[n,D,s]=z(o.collection||"",{orderBy:c}),m=O(s,t),b=[{value:"modifiedAt",label:"Last Modified"},{value:"slug",label:"A-Z"},{value:"slugDesc",label:"Z-A"},{value:"newest",label:"Newest"},{value:"oldest",label:"Oldest"}],i=o.selectedDocIds||[],d=o.options||{};return e("div",{className:"DocPickerModal__DocsList",children:[e("div",{className:"DocPickerModal__DocsList__stickyHeader",children:[d.showCollectionSelect&&e("div",{className:"DocPickerModal__collection__select",children:[e("div",{className:"DocPickerModal__collection__select__label",children:"Content Type:"}),e(f,{data:d.collectionSelectOptions||[],value:d.collectionSelectValue,placeholder:"Select",onChange:_=>{o.onCollectionChange?.(_||"")},size:"xs",radius:0,searchable:!0,autoFocus:!0,dropdownComponent:"div"}),d.collectionSelectValue&&e(p,{variant:"outline",color:"dark",size:"xs",onClick:()=>r(!0),children:"New"})]}),d.enableSearch&&d.collectionSelectValue&&e("div",{className:"DocPickerModal__DocsList__controls",children:[e(S,{placeholder:"Search documents...",value:t,onChange:_=>l(_.target.value),icon:e(B,{size:16}),size:"xs",className:"DocPickerModal__DocsList__controls__search"}),d.enableSort&&e(f,{data:b,value:c,onChange:_=>a(_||"modifiedAt"),size:"xs",className:"DocPickerModal__DocsList__controls__sort"})]}),!n&&s.length>0&&e("div",{className:"DocPickerModal__DocsList__count",children:["Showing ",m.length," of ",s.length," documents"]})]}),e("div",{className:"DocPickerModal__DocsList__docsContainer",children:o.collection?n?e("div",{className:"DocPickerModal__DocsList__loading",children:e(P,{color:"gray",size:"xl"})}):m.length===0?e("div",{className:"DocPickerModal__DocsList__empty",children:s.length===0?"Collection is empty.":"No documents match your search."}):e("div",{className:"DocPickerModal__DocsList__docs",children:m.map(_=>e(k.DocCard,{doc:_,onDocSelected:o.onDocSelected,onDocUnselected:o.onDocUnselected,multiSelect:o.multiSelect,selected:i.includes(_.id),enableStatusBadges:d.enableStatusBadges},_.id))}):e("div",{className:"DocPickerModal__DocsList__empty",children:"Select a content type to view documents"})}),d.collectionSelectValue&&e(I,{collection:d.collectionSelectValue,opened:u,skipNavigation:!0,onClose:()=>{r(!1),D()}})]})};k.DocCard=o=>{let[t,l]=g(!!o.selected),c=o.doc,[a,u]=c.id.split("/"),r=c.fields||{},n=window.__ROOT_CTX.collections[a],D=`/cms/content/${a}/${u}`,s=v(r,n.preview?.title||"meta.title"),m=v(r,n.preview?.image||"meta.image")||n.preview?.defaultImage;return e("div",{className:"DocPickerModal__DocCard",children:[e("div",{className:"DocPickerModal__DocCard__image",onClick:()=>window.open(D,"_blank"),children:e(L,{file:m,width:120,height:90,withPlaceholder:!m?.src})}),e("div",{className:"DocPickerModal__DocCard__content",children:[e("div",{className:"DocPickerModal__DocCard__content__header",children:e("div",{className:"DocPickerModal__DocCard__content__header__docId",onClick:()=>window.open(D,"_blank"),children:c.id})}),e("div",{className:"DocPickerModal__DocCard__content__title",children:e("div",{className:"DocPickerModal__DocCard__content__link",onClick:()=>window.open(D,"_blank"),children:s||"[UNTITLED]"})}),o.enableStatusBadges&&e("div",{className:"DocPickerModal__DocCard__content__badges",children:e(N,{doc:c})})]}),e("div",{className:"DocPickerModal__DocCard__controls",children:e("div",{className:"DocPickerModal__DocCard__controls__buttons",children:o.multiSelect?t?e(p,{variant:"light",color:"blue",size:"xs",onClick:()=>{l(!1),o.onDocUnselected(o.doc)},children:"Unselect"}):e(p,{variant:"filled",color:"blue",size:"xs",onClick:()=>{l(!0),o.onDocSelected(o.doc)},children:"Select"}):e(p,{color:"blue",size:"xs",onClick:()=>o.onDocSelected(o.doc),children:"Select"})})})]})};k.id=h;export{ee as a,k as b};
@@ -0,0 +1,3 @@
1
+ import{D as R,b as m,c as l,f as y,g as f,h as T,n as x,o as L,q as _,w,x as h,y as b}from"./chunk-XOWWPE7X.js";function d(n,o){let t=n.translationLanguages||{},a=String(o).toLowerCase();for(let[r,s]of Object.entries(t))if(r.toLowerCase()===a)return s;return o}function O(n,o){let t=[];for(let a of o){let r=d(n,a);t.includes(r)||t.push(r)}return t}function C(n,o){let t=n.locales||["en"],a=String(o).toLowerCase(),r=[];for(let s of t)(String(s).toLowerCase()===a||d(n,s).toLowerCase()===a)&&r.push(s);return r}function I(n,o,t){for(let a of C(n,t)){let r=o[a];if(typeof r=="string"&&r)return r}return""}function j(){let n=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db;return m(o,"Projects",n,"Translations")}async function D(n){let o=j(),t=n?.tags?f(o,T("tags","array-contains-any",n.tags)):f(o),a=await L(t),r={};return a.forEach(s=>{let e=s.id;r[e]=s.data()}),r}async function G(n){let o=Array.from(new Set(n)).filter(Boolean),t={};if(o.length===0)return t;let a=j(),r=30,s=[];for(let e=0;e<o.length;e+=r)s.push(o.slice(e,e+r));return await Promise.all(s.map(async e=>{let i=f(a,T(y(),"in",e));(await L(i)).forEach(c=>{t[c.id]=c.data()})})),t}async function N(n){let o=window.__ROOT_CTX.rootConfig.projectId,t=window.firebase.db,a=l(t,"Projects",o,"Translations",n);return(await x(a)).data()}async function K(n,o){let t=window.__ROOT_CTX.rootConfig.projectId,a=window.firebase.db,r=l(a,"Projects",t,"Translations",n),s={};for(let e in o){if(e==="tags"){s.tags=o.tags;continue}for(let i of X(e))s[i]=o[e]}console.log("updating translations: ",s),await _(r,s),R("translations.save",{metadata:{hash:n},throttle:5*b.minute,throttleId:n})}async function W(n,o){let t=o?.mode??"replace",a=window.__ROOT_CTX.rootConfig.projectId,r=window.firebase.db,s=500;for(let e=0;e<n.length;e+=s){let i=h(r);n.slice(e,e+s).forEach(({hash:c,tags:u})=>{let g=l(r,"Projects",a,"Translations",c);t==="union"?i.update(g,{tags:w(...u)}):i.update(g,{tags:u})}),await i.commit()}}async function M(n){return k(E(n))}async function k(n){let t=new TextEncoder().encode(n),a=await crypto.subtle.digest("SHA-1",t);return Array.from(new Uint8Array(a)).map(e=>e.toString(16).padStart(2,"0")).join("")}function E(n){return String(n).trim().split(`
2
+ `).map(t=>q(t)).join(`
3
+ `)}function q(n){return String(n).trimEnd().replace(/&nbsp;$/,"")}var S=new Map;function H(n){let o=S.get(n);if(o)return o;let t=n.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,"."),a=new RegExp(`^${t}$`,"i");return S.set(n,a),a}function Z(n){return(window.__ROOT_CTX.excludeLocalesFromTranslations||[]).some(t=>H(t).test(n))}function J(n){let t=(window.__ROOT_CTX.rootConfig.i18n||{}).locales||["en"];for(let a of t)if(String(a).toLowerCase()===n.toLowerCase())return a;return null}function Q(n){let o=window.__ROOT_CTX.rootConfig.i18n||{};return d(o,n)}function V(n){let o=window.__ROOT_CTX.rootConfig.i18n||{};return O(o,n)}function X(n){let o=window.__ROOT_CTX.rootConfig.i18n||{};return C(o,n)}function Y(n,o){let t=window.__ROOT_CTX.rootConfig.i18n||{};return I(t,n,o)}async function nn(n,o){let t=window.__ROOT_CTX.rootConfig.projectId,a=window.firebase.db,r=500,s=await Promise.all(n.map(async e=>({hash:await M(e.source),locales:e.locales,source:e.source})));for(let e=0;e<s.length;e+=r){let i=h(a),p=s.slice(e,e+r);for(let c of p){let u=l(a,"Projects",t,"Translations",c.hash),g={source:c.source};for(let[F,P]of Object.entries(c.locales))for(let A of X(F))g[A]=E(P);o?.tags?.length&&(g.tags=w(...o.tags)),i.set(u,g,{merge:!0})}await i.commit()}R("translations.batch_save",{metadata:{count:n.length}})}export{j as a,D as b,G as c,N as d,K as e,W as f,M as g,E as h,Z as i,J as j,Q as k,V as l,X as m,Y as n,nn as o};
@@ -0,0 +1 @@
1
+ import{$c as r,Ga as o,Qc as c}from"./chunk-WRA24P66.js";function m(e){let a=e.size??36,t=Math.round(a*.55),n=e.className?`DataSourceIcon ${e.className}`:"DataSourceIcon";return o("div",{className:n,style:{width:`${a}px`,height:`${a}px`},children:e.type==="gsheet"?o(c,{size:t,stroke:1.5}):o(r,{size:t,stroke:1.5})})}export{m as a};
@@ -0,0 +1 @@
1
+ import{c as T}from"./chunk-JDW4UORS.js";import{k as z}from"./chunk-RN4XVVWD.js";import{C as _}from"./chunk-ISUGBMXC.js";import{D as l,a as f,b as w,c as s,g as b,i as k,n as v,o as j,q as u,t as R,u as c,v as y,x as I}from"./chunk-XOWWPE7X.js";var O=["agile","airy","alert","amber","amused","ancient","aqua","arctic","astral","autumn","avid","azure","balmy","beige","big","bitter","black","blazing","blissful","blooming","blue","bold","bouncy","brainy","brave","breezy","bright","brisk","broad","bronze","brown","bubbly","busy","calm","candid","careful","caring","charming","cheerful","cherry","chilly","chipper","classic","clean","clear","clever","cloudy","coastal","cobalt","cold","cool","copper","coral","cosmic","cosy","cozy","crafty","creamy","crimson","crisp","cuddly","curious","dandy","dapper","daring","dark","dawn","dazzling","dear","deep","deft","delicate","dewy","dizzy","dotted","dreamy","driven","dry","dusky","dusty","eager","early","earnest","earthy","eastern","easy","ebony","elated","electric","elegant","emerald","empty","epic","even","every","faint","fair","falling","famous","fancy","fast","feisty","festive","fierce","fiery","fine","firm","flat","floral","flowing","fluffy","foggy","fond","forest","fragrant","fresh","friendly","frisky","frosty","funky","funny","fuzzy","gallant","gentle","giant","gilded","glad","gleaming","glossy","glowing","gold","golden","good","graceful","grand","grassy","gray","green","groovy","gusty","handy","happy","hardy","hazy","hearty","heavy","helpful","heroic","hidden","high","holy","honest","honeyed","hopeful","humble","humming","hushed","icy","ideal","idle","indigo","inky","iron","ivory","jade","jaunty","jazzy","jolly","jovial","joyful","jubilant","juicy","jumpy","keen","kind","kindly","lacy","late","lazy","leafy","lemon","light","limber","lime","linen","little","lively","lone","long","loud","lovely","loyal","lucid","lucky","luminous","lunar","lush","magenta","magic","majestic","mango","marble","maritime","maroon","massive","mauve","mellow","merry","mighty","mild","milky","mindful","minty","misty","mocha","modest","morning","mossy","muddy","mysterious","mythic","narrow","navy","neat","neon","new","nimble","noble","noisy","noon","northern","nosy","nutty","oaken","oceanic","odd","old","olive","onyx","opal","open","orange","orderly","pale","pastel","patient","peaceful","peach","peachy","pearly","pebbly","peppy","perky","pink","placid","plain","playful","pleasant","plucky","plum","plush","polar","polite","prime","pristine","proud","pure","purple","quaint","quick","quiet","quirky","radiant","rapid","rare","raven","ready","red","regal","restless","rich","rolling","rosy","rough","round","royal","ruby","rugged","rumbling","russet","rustic","sable","safe","sage","salty","sandy","sapphire","savvy","scarlet","scenic","secret","sepia","serene","shaggy","sharp","shimmering","shiny","short","shrewd","shy","silent","silky","silly","silver","simple","sleek","sleepy","slim","slow","small","smart","smoky","smooth","snappy","snowy","soaring","soft","solar","solid","southern","sparkly","speedy","spicy","spiffy","spotted","spry","square","starry","steady","steel","stellar","sticky","still","stony","stormy","striped","strong","sturdy","subtle","sunlit","sunny","super","supreme","swank","sweet","swift","tame","tan","tangy","tart","teal","tender","thin","thirsty","thriving","tidal","tidy","tiny","tireless","toasty","topaz","tough","tranquil","trim","tropical","true","twinkly","umber","upbeat","urban","useful","valiant","vast","velvet","verdant","vernal","vibrant","vintage","violet","vivid","wandering","warm","watchful","wavy","wee","western","whimsical","whispering","white","wholesome","wild","winding","windy","winter","wintry","wise","witty","wondrous","woody","wool","yellow","young","youthful","zany","zealous","zen","zesty","zippy"],A=["acorn","almond","alpaca","anchor","antler","apple","apricot","arrow","aspen","aurora","autumn","avocado","badger","bagel","bamboo","banana","basil","bay","bayou","beach","bear","bee","beetle","bell","berry","birch","bird","biscuit","bison","blossom","bluff","boat","bobcat","bonfire","book","boot","bottle","boulder","branch","brass","breeze","bridge","brook","broom","brunch","bubble","bucket","bud","buffalo","bug","bunny","burrow","butter","button","cabin","cactus","cake","camel","canary","candle","canyon","cape","caravan","cardinal","carrot","cascade","cashew","castle","cat","cave","cedar","chair","cherry","chestnut","chickpea","chime","cinnamon","citadel","cliff","cloud","clove","clover","cocoa","comet","compass","condor","cookie","coral","cottage","cotton","cove","coyote","crane","crayon","creek","cricket","crocus","crow","crumpet","crystal","cup","cupcake","currant","cypress","daffodil","dahlia","daisy","dawn","deer","delta","desert","dew","diamond","dingo","dock","dogwood","dolphin","donut","dove","dragon","drift","drizzle","drum","duck","dumpling","dune","eagle","echo","eclipse","eel","egg","elder","elephant","elk","ember","ermine","estuary","evergreen","falcon","fawn","feather","fennel","fern","ferret","field","fig","finch","fir","firefly","fish","fjord","flame","flamingo","flask","flax","fleece","flicker","flower","flute","fog","forest","fossil","fountain","fox","frog","frost","galaxy","garden","gazelle","gecko","gem","geyser","ginger","glacier","glade","glen","globe","glow","goat","goose","gorge","gourd","granite","grape","grass","grotto","grove","gull","hammock","harbor","hare","harp","harvest","hat","hawk","haystack","hazel","hearth","heather","hedge","heron","hibiscus","hickory","hill","hollow","honey","horizon","horse","hummingbird","ibis","iceberg","icicle","inlet","iris","island","ivy","jackal","jacket","jade","jaguar","jam","jar","jasmine","jay","jelly","jetty","juniper","kayak","kelp","kestrel","kettle","key","kingfisher","kite","kitten","kiwi","knoll","koala","ladybug","lagoon","lake","lamp","lantern","lark","lava","lavender","leaf","ledge","lemon","lemur","leopard","lichen","lighthouse","lilac","lily","lime","lion","llama","lobster","log","loon","lotus","lynx","lyric","magnet","manatee","mango","mangrove","maple","marble","marigold","marlin","marsh","meadow","melody","melon","mermaid","mesa","meteor","minnow","mint","mirage","mist","mitten","mole","monkey","moon","moose","morel","mosaic","moss","moth","mountain","mouse","muffin","mushroom","mussel","narwhal","nautilus","nectar","needle","nest","nettle","newt","nightingale","nimbus","noodle","north","note","nutmeg","oak","oasis","oats","ocean","ocelot","octopus","olive","onion","opal","orange","orca","orchid","oriole","osprey","otter","owl","oyster","paddle","palm","panda","pansy","panther","papaya","paper","parrot","parsley","partridge","pasture","path","peach","peacock","pear","pebble","pecan","pelican","penguin","peony","pepper","petal","petunia","pheasant","phoenix","pie","pigeon","pine","pineapple","pistachio","planet","plateau","plover","plum","pond","pony","poppy","porpoise","pouch","prairie","pretzel","primrose","puffin","pumpkin","quail","quartz","queen","quill","quince","quokka","rabbit","raccoon","radish","rain","rainbow","rapids","raspberry","raven","redwood","reef","reel","reindeer","rhino","ribbon","ridge","river","road","robin","rock","rooster","rose","rosemary","rowan","rye","saffron","sage","salmon","sand","sapphire","satellite","savanna","scallop","scarf","sea","seagull","seal","seed","sequoia","sesame","shark","shell","shore","shrimp","silk","silo","sky","skylark","sleet","snail","snake","snow","sock","sorbet","spark","sparrow","spider","spire","spoon","spring","sprout","spruce","squirrel","star","starfish","starling","stone","stork","storm","stream","summer","sun","sundial","sunflower","swan","swift","sycamore","tadpole","tamarind","tangerine","tea","teal","tern","terrace","thicket","thistle","thrush","thunder","tide","tiger","timber","toad","toffee","tooth","topaz","tortoise","totem","toucan","tower","tractor","trail","tree","trout","truffle","tugboat","tulip","tundra","turnip","turtle","twig","twilight","umbrella","unicorn","urchin","valley","vanilla","vine","violet","vista","volcano","voyage","vulture","wagon","walnut","walrus","wasp","water","waterfall","wave","whale","wharf","wheat","whisker","wildcat","wildflower","willow","wind","window","winter","wisteria","wolf","wombat","wood","wren","yak","yam","yarrow","yew","yucca","zebra","zephyr","zinnia","zucchini"];var x="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",S="YYYYMMDD";function D(e,r){let a=r?.now??new Date,o=r?.random??Math.random,t=e.replace(/\{([^{}]+?)\}/g,(n,d)=>{let[p,g]=q(d);switch(p){case"date":return E(a,g||S);case"adjective":return C(O,o);case"noun":return C(A,o);case"random":return M(Y(g,6),o);default:return n}});return T(t.toLowerCase())}function q(e){let r=e.indexOf(":");return r===-1?[e.trim(),void 0]:[e.slice(0,r).trim(),e.slice(r+1)]}function Y(e,r){if(!e)return r;let a=parseInt(e,10);return Number.isFinite(a)&&a>0?a:r}function C(e,r){return e[Math.floor(r()*e.length)]}function M(e,r){let a=[];for(let o=0;o<e;o++)a.push(x.charAt(Math.floor(r()*x.length)));return a.join("")}function E(e,r){let a={YYYY:String(e.getFullYear()),YY:String(e.getFullYear()).slice(-2),MM:m(e.getMonth()+1),DD:m(e.getDate()),HH:m(e.getHours()),mm:m(e.getMinutes()),ss:m(e.getSeconds())};return r.replace(/YYYY|YY|MM|DD|HH|mm|ss/g,o=>a[o]??o)}function m(e){return e<10?`0${e}`:String(e)}var i="Releases";async function V(e,r){if(!e)throw new Error("missing data source id");let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,t=s(o,"Projects",a,i,e);await R(o,async n=>{if((await n.get(t)).exists())throw new Error(`release exists: ${e}`);await n.set(t,{...r,id:e,createdAt:y(),createdBy:window.firebase.user.email})}),l("release.create",{metadata:{releaseId:e}})}async function G(){let e=window.__ROOT_CTX.rootConfig.projectId,r=window.firebase.db,a=w(r,"Projects",e,i),o=b(a,k("createdAt","desc")),t=await j(o),n=[];return t.forEach(d=>{n.push(d.data())}),n}async function h(e){let r=window.__ROOT_CTX.rootConfig.projectId,a=window.firebase.db,o=s(a,"Projects",r,i,e),t=await v(o);return t.exists()?t.data():null}async function K(e,r){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,t=s(o,"Projects",a,i,e);await u(t,r),l("release.save",{metadata:{releaseId:e}})}async function Q(e){let r=window.__ROOT_CTX.rootConfig.projectId,a=window.firebase.db,o=s(a,"Projects",r,i,e);await u(o,{archivedAt:y(),archivedBy:window.firebase.user.email}),l("release.archive",{metadata:{releaseId:e}})}async function W(e){let r=window.__ROOT_CTX.rootConfig.projectId,a=window.firebase.db,o=s(a,"Projects",r,i,e);await u(o,{archivedAt:c(),archivedBy:c()}),l("release.unarchive",{metadata:{releaseId:e}})}async function Z(e){let r=await h(e);if(!r)throw new Error(`release not found: ${e}`);if(r.archivedAt)throw new Error(`release is archived: ${e}`);let a=r.docIds||[],o=r.dataSourceIds||[];if(a.length===0&&o.length===0)throw new Error(`no docs or data sources to publish for release: ${e}`);let t=window.__ROOT_CTX.rootConfig.projectId,n=window.firebase.db,d=s(n,"Projects",t,i,e),p=I(n);p.update(d,{publishedAt:y(),publishedBy:window.firebase.user.email,scheduledAt:c(),scheduledBy:c()}),o.length>0&&await z(o,{batch:p,commitBatch:!1}),await _(a,{batch:p,releaseId:e,publishMessage:r.description}),console.log(`published release: ${e}`);let g={releaseId:e,docIds:a,dataSourceIds:o};r.description&&(g.publishMessage=r.description),l("release.publish",{metadata:g})}async function ee(e,r){let a=await h(e);if(!a)throw new Error(`release not found: ${e}`);if(a.archivedAt)throw new Error(`release is archived: ${e}`);typeof r=="number"&&(r=f.fromMillis(r));let o=window.__ROOT_CTX.rootConfig.projectId,t=window.firebase.db,n=s(t,"Projects",o,i,e);await u(n,{scheduledAt:r,scheduledBy:window.firebase.user.email}),l("release.publish",{metadata:{releaseId:e,scheduledAt:r.toMillis()}})}function re(){return D("{date}-{adjective}-{noun}")}async function ae(e){if(!await h(e))throw new Error(`release not found: ${e}`);let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,t=s(o,"Projects",a,i,e);await u(t,{scheduledAt:c(),scheduledBy:c()}),l("release.unschedule",{metadata:{releaseId:e}})}export{D as a,V as b,G as c,h as d,K as e,Q as f,W as g,Z as h,ee as i,re as j,ae as k};