@blinkk/root-cms 3.0.5 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -0
- package/dist/app.js +7 -4
- package/dist/browser-client/browser-client.d.ts +148 -0
- package/dist/browser-client/embed-window.d.ts +66 -0
- package/dist/browser-client/emitter.d.ts +11 -0
- package/dist/browser-client.js +377 -0
- package/dist/{chunk-RXWDB3K4.js → chunk-4VZTYUQ7.js} +1 -1
- package/dist/{chunk-N4K6ICFR.js → chunk-AFBSITEO.js} +4 -6
- package/dist/{chunk-PNLLZXVY.js → chunk-AJDMNTZQ.js} +2 -2
- package/dist/{chunk-VSPPZPMP.js → chunk-GXV4UQ6Z.js} +15 -11
- package/dist/chunk-J72JK4KR.js +8 -0
- package/dist/cli.js +2 -1
- package/dist/client.js +2 -1
- package/dist/core/client.d.ts +5 -0
- package/dist/core/plugin.d.ts +17 -0
- package/dist/core.js +4 -2
- package/dist/functions.js +4 -3
- package/dist/plugin.js +16 -4
- package/dist/shared/embed-protocol.d.ts +72 -0
- package/dist/ui/AIPage-EL6DQYII.js +1 -0
- package/dist/ui/AssetsPage-5S6PNMF6.js +1 -0
- package/dist/ui/CollectionPage-CU3VDEXA.js +1 -0
- package/dist/ui/ComparePage-FTZLYO2O.js +1 -0
- package/dist/ui/DataPage-XIXFKXDN.js +1 -0
- package/dist/ui/DataSourcePage-ORIEQH3Y.js +1 -0
- package/dist/ui/DocTranslationsPage-4OVBIPSG.js +1 -0
- package/dist/ui/DocumentPage-3JPFJF3E.js +1 -0
- package/dist/ui/EditDataSourcePage-HIGZZQJC.js +1 -0
- package/dist/ui/EditReleasePage-KUHBU2HQ.js +1 -0
- package/dist/ui/EmbeddedAIPage-CJWZE5FC.js +1 -0
- package/dist/ui/EmbeddedDocumentPage-6XQHYIAO.js +1 -0
- package/dist/ui/{ImageEditorDialog-4H665KK2.js → ImageEditorDialog-GGS4VFEA.js} +2 -2
- package/dist/ui/LogsPage-4DVGYXZY.js +1 -0
- package/dist/ui/NewDataSourcePage-7TUUE6ZL.js +1 -0
- package/dist/ui/NewReleasePage-6UT36HDW.js +1 -0
- package/dist/ui/NotFoundPage-AW6UC6II.js +1 -0
- package/dist/ui/ProjectPage-US5FJGFK.js +1 -0
- package/dist/ui/ReleasePage-W2R3DIFX.js +1 -0
- package/dist/ui/ReleasesPage-HBBUGE7D.js +1 -0
- package/dist/ui/SettingsPage-7JQQILUV.js +1 -0
- package/dist/ui/SidebarToolsPage-MIYXKHF2.js +1 -0
- package/dist/ui/TaskPage-JYUQEGRB.js +1 -0
- package/dist/ui/TasksPage-4VFQF243.js +1 -0
- package/dist/ui/TranslationsArbPage-AJLM5VSD.js +2 -0
- package/dist/ui/TranslationsEditPage-RTTGTIGI.js +1 -0
- package/dist/ui/{TranslationsPage-WIDVSTYF.js → TranslationsPage-HPYAJQ4Q.js} +31 -31
- package/dist/ui/{ai-tools-5E5ELLZX.js → ai-tools-4DWMFQS6.js} +1 -1
- package/dist/ui/{chunk-JYFLU7DM.js → chunk-2KSMCQ6H.js} +2 -2
- package/dist/ui/{chunk-HKINZLMW.js → chunk-344GZOGG.js} +45 -45
- package/dist/ui/{chunk-CGCKJFL4.js → chunk-3E6CASIN.js} +1 -1
- package/dist/ui/chunk-3T4ZWQR4.js +7 -0
- package/dist/ui/chunk-4ISFTE2G.js +5 -0
- package/dist/ui/chunk-5AVRMJVW.js +1 -0
- package/dist/ui/chunk-764W6634.js +1 -0
- package/dist/ui/chunk-76ZGLKLT.js +1 -0
- package/dist/ui/{chunk-SKEP5WYH.js → chunk-7SK47HHZ.js} +3 -3
- package/dist/ui/chunk-AZCGXQTL.js +1 -0
- package/dist/ui/{chunk-W3BJ2EZX.js → chunk-B6M55OFE.js} +1 -1
- package/dist/ui/{chunk-KYDOSLTO.js → chunk-CAY5NM4Z.js} +1 -1
- package/dist/ui/{chunk-4KE2SZKH.js → chunk-D3UIZHRK.js} +1 -1
- package/dist/ui/chunk-E76ECIOX.js +81 -0
- package/dist/ui/chunk-FBSBL476.js +1 -0
- package/dist/ui/chunk-FFHV5S6A.js +1 -0
- package/dist/ui/{chunk-X2WHBGTP.js → chunk-FJLNXXE3.js} +1 -1
- package/dist/ui/chunk-FSVNOZ6F.js +1 -0
- package/dist/ui/{chunk-BZIRGB4W.js → chunk-GDXNSFLE.js} +1 -1
- package/dist/ui/{chunk-C5NH23G4.js → chunk-GQ5IRK43.js} +1 -1
- package/dist/ui/{chunk-DEGMKEHP.js → chunk-GU24U5RM.js} +1 -1
- package/dist/ui/{chunk-HRGYNHZ3.js → chunk-HARRKJFZ.js} +1 -1
- package/dist/ui/{chunk-PHBMVORG.js → chunk-HO3W4RVG.js} +1 -1
- package/dist/ui/{chunk-62UWGWON.js → chunk-J5E457OI.js} +1 -1
- package/dist/ui/{chunk-W3HIZQ4Z.js → chunk-JS6TK4OP.js} +1 -1
- package/dist/ui/{chunk-54DVDYU6.js → chunk-JTIQBW33.js} +1 -1
- package/dist/ui/{chunk-ORXEMIQC.js → chunk-KRNQ6L35.js} +1 -1
- package/dist/ui/chunk-LROR6N3B.js +7 -0
- package/dist/ui/{chunk-NZHF733K.js.LEGAL.txt → chunk-LROR6N3B.js.LEGAL.txt} +6 -1
- package/dist/ui/{chunk-E2RCCK2T.js → chunk-M3T56ZRP.js} +1 -1
- package/dist/ui/chunk-MXGHX55S.js +141 -0
- package/dist/ui/{chunk-KFAZBEPV.js → chunk-MZTOPPWQ.js} +1 -1
- package/dist/ui/{chunk-JHBAMPGB.js → chunk-N3JSLTMV.js} +1 -1
- package/dist/ui/{chunk-L4RHGQUG.js → chunk-NSOTG64N.js} +1 -1
- package/dist/ui/{chunk-HLMBCVRX.js → chunk-O5P3CPJ4.js} +1 -1
- package/dist/ui/chunk-OWQL5DVE.js +1 -0
- package/dist/ui/{chunk-P3NETZZP.js → chunk-OXVYTSIZ.js} +1 -1
- package/dist/ui/chunk-P2Z66DHV.js +1 -0
- package/dist/ui/chunk-QEE7XS6O.js +1 -0
- package/dist/ui/chunk-QHJOTXYB.js +1 -0
- package/dist/ui/{chunk-3IYZCUPI.js → chunk-R6B3W5AJ.js} +1 -1
- package/dist/ui/{chunk-QGBR3J2Y.js → chunk-RAXWL656.js} +1 -1
- package/dist/ui/chunk-SRX7EWL4.js +1 -0
- package/dist/ui/chunk-TDUBSLEC.js +1 -0
- package/dist/ui/chunk-TFB3VGWP.js +1 -0
- package/dist/ui/{chunk-767BAQ53.js → chunk-U7PWJV6F.js} +1 -1
- package/dist/ui/{chunk-PWKJDYE2.js → chunk-UUVAD4U4.js} +1 -1
- package/dist/ui/chunk-V4CTOC6E.js +1 -0
- package/dist/ui/{chunk-EGEB6N4J.js → chunk-VD6G5NV4.js} +11 -11
- package/dist/ui/chunk-W5DOO6ID.js +1 -0
- package/dist/ui/{chunk-HHMG665Z.js → chunk-WFQU7V3W.js} +1 -1
- package/dist/ui/{chunk-SQRKKWRG.js → chunk-WKF7CSWS.js} +1 -1
- package/dist/ui/{chunk-4W73RW5I.js → chunk-WXT7LTQM.js} +1 -1
- package/dist/ui/{chunk-VMT7JFAM.js → chunk-XT5FNJCX.js} +1 -1
- package/dist/ui/chunk-YLSRRNSE.js +1 -0
- package/dist/ui/chunk-ZN2Y5OUF.js +3 -0
- package/dist/ui/gcs-ECSDFCIU.js +1 -0
- package/dist/ui/ui.css +1 -1
- package/dist/ui/ui.js +1 -1
- package/package.json +14 -10
- package/dist/ui/AIPage-F3NNYM5E.js +0 -1
- package/dist/ui/AssetsPage-DZQHAENZ.js +0 -1
- package/dist/ui/CollectionPage-WVVG62NR.js +0 -1
- package/dist/ui/ComparePage-CRDHP45W.js +0 -1
- package/dist/ui/DataPage-WMLBCPGF.js +0 -1
- package/dist/ui/DataSourcePage-POZAQFPU.js +0 -1
- package/dist/ui/DocTranslationsPage-UR5D2RF2.js +0 -1
- package/dist/ui/DocumentPage-SQ7ROBMC.js +0 -1
- package/dist/ui/EditDataSourcePage-PUA2AJ4C.js +0 -1
- package/dist/ui/EditReleasePage-CENP46EO.js +0 -1
- package/dist/ui/LogsPage-FZRN6MBJ.js +0 -1
- package/dist/ui/NewDataSourcePage-FTILYFJY.js +0 -1
- package/dist/ui/NewReleasePage-MHJC66KK.js +0 -1
- package/dist/ui/NotFoundPage-EP2OE4JV.js +0 -1
- package/dist/ui/ProjectPage-6J7QCG75.js +0 -1
- package/dist/ui/ReleasePage-IZ3DNGT4.js +0 -1
- package/dist/ui/ReleasesPage-RWFOJ5VG.js +0 -1
- package/dist/ui/SettingsPage-M4SIDBTI.js +0 -1
- package/dist/ui/SidebarToolsPage-GAX3XJ7W.js +0 -1
- package/dist/ui/TaskPage-UCATTNZ5.js +0 -1
- package/dist/ui/TasksPage-4AQLQ4IT.js +0 -1
- package/dist/ui/TranslationsArbPage-JGQGATCS.js +0 -2
- package/dist/ui/TranslationsEditPage-7AGZGHKS.js +0 -1
- package/dist/ui/chunk-7MTDTPYB.js +0 -1
- package/dist/ui/chunk-7UIUAHC4.js +0 -1
- package/dist/ui/chunk-AEWL2RWR.js +0 -141
- package/dist/ui/chunk-AFWBSIPL.js +0 -1
- package/dist/ui/chunk-AL3TN2KI.js +0 -1
- package/dist/ui/chunk-DUJYIOLE.js +0 -5
- package/dist/ui/chunk-I6ICVKEC.js +0 -1
- package/dist/ui/chunk-JKCZGT6B.js +0 -1
- package/dist/ui/chunk-JZFTZ4X4.js +0 -87
- package/dist/ui/chunk-KKEWCXVV.js +0 -1
- package/dist/ui/chunk-NZHF733K.js +0 -7
- package/dist/ui/chunk-ONTGW2VA.js +0 -1
- package/dist/ui/chunk-P4U2LUTF.js +0 -1
- package/dist/ui/chunk-PJA7YP4A.js +0 -1
- package/dist/ui/chunk-RSVO46S3.js +0 -1
- package/dist/ui/chunk-TJBVMFNQ.js +0 -1
- package/dist/ui/chunk-XOQ3KDSR.js +0 -3
- package/dist/ui/chunk-YFA6U2CV.js +0 -1
- package/dist/ui/gcs-L33FIRZU.js +0 -1
- /package/dist/ui/{ImageEditorDialog-4H665KK2.js.LEGAL.txt → ImageEditorDialog-GGS4VFEA.js.LEGAL.txt} +0 -0
- /package/dist/ui/{chunk-SKEP5WYH.js.LEGAL.txt → chunk-7SK47HHZ.js.LEGAL.txt} +0 -0
- /package/dist/ui/{chunk-JZFTZ4X4.js.LEGAL.txt → chunk-E76ECIOX.js.LEGAL.txt} +0 -0
- /package/dist/ui/{chunk-AEWL2RWR.js.LEGAL.txt → chunk-MXGHX55S.js.LEGAL.txt} +0 -0
- /package/dist/ui/{chunk-EGEB6N4J.js.LEGAL.txt → chunk-VD6G5NV4.js.LEGAL.txt} +0 -0
- /package/dist/ui/{prerender-Q4YSDCPB.js → prerender-M47IWV5Q.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(n,t){if(t in n)return n[t];let o=`*@${t.split("@").at(-1)}`;return o in n?n[o]:null}function i(n,t){let r=e(n,t);return r==="ADMIN"||r==="EDITOR"}function s(n,t){let r=e(n,t);return r==="ADMIN"||r==="EDITOR"||r==="CONTRIBUTOR"}export{i as a,s as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as C}from"./chunk-
|
|
1
|
+
import{b as C}from"./chunk-JTIQBW33.js";import{e as F}from"./chunk-JS6TK4OP.js";import{c,e as y,p as w,q as U,s as m}from"./chunk-VD6G5NV4.js";import{Ga as d,a as f,c as g,da as v,h as S,i as p,j as b,wb as k}from"./chunk-LROR6N3B.js";import{j as a,k as h}from"./chunk-KUCVLANF.js";h();b();var z=[{name:"Google Drive Folder",key:"googleDriveFolder",placeholder:"https://drive.google.com/drive/folders/...",description:`Where Google Sheets created by Root CMS's localization process are stored. If unspecified, they will be created in your "My Drive".`,ui:e=>d(v,{disabled:!e,variant:"default",size:"xs",compact:!0,rightIcon:d(k,{size:14}),onClick:()=>{e&&window.open(e,F(e))},children:"Open"})}],D=a(null);function X(e){let{db:r,user:s}=C(),o=window.__ROOT_CTX.rootConfig.projectId,[P,u]=f({});g(()=>{let n=c(r,"Projects",o),i=m(n,t=>{if(t.exists()){let l=t.data()||{};u(l.settings||{})}else u({})},t=>{console.error("Failed to subscribe to site settings:",t)});return()=>i()},[r,o,s.uid]);let x=S(async(n,i)=>{let t=c(r,"Projects",o);try{await U(t,new y("settings",n),i)}catch(l){console.error("Failed to set setting",n,l)}},[r,o,s.uid]);return d(D.Provider,{value:{settings:P,setSettings:x},children:e.children})}function B(){let e=p(D);if(!e)throw new Error("useSiteSettings must be used within a <SiteSettingsProvider>");return e}h();b();var I=a(null);function H(e){let{db:r,user:s}=C(),o=window.__ROOT_CTX.rootConfig.projectId,[P,u]=f({});g(()=>{let n=c(r,"Projects",o,"Users",s.uid),i=m(n,t=>{t.exists()?u(t.data()):u({})},t=>{console.error("Failed to subscribe to user preferences:",t)});return()=>i()},[r,o,s.uid]);let x=S(async(n,i)=>{let t=c(r,"Projects",o,"Users",s.uid);try{await w(t,{[n]:i},{merge:!0})}catch(l){console.error("Failed to set user preference",n,l)}},[r,o,s.uid]);return d(I.Provider,{value:{preferences:P,setPreference:x},children:e.children})}function K(){let e=p(I);if(!e)throw new Error("useUserPreferences must be used within a <UserPreferencesProvider>");return e}export{z as a,X as b,B as c,H as d,K as e};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as na,b as P,c as I,d as ia,e as la}from"./chunk-
|
|
1
|
+
import{a as na,b as P,c as I,d as ia,e as la}from"./chunk-4ISFTE2G.js";import{a as v}from"./chunk-MZTOPPWQ.js";import{a as d}from"./chunk-SRX7EWL4.js";import{a as oa}from"./chunk-FJLNXXE3.js";import{a as D}from"./chunk-J5E457OI.js";import{a as A}from"./chunk-QHJOTXYB.js";import{f as Q}from"./chunk-YLSRRNSE.js";import{Cb as ta,Da as J,Ga as a,Mc as ra,Pa as X,V as G,Vc as sa,Wa as Z,_a as aa,a as l,c as W,da as _,g as V,j as fa,kb as ea,qa as z,ua as Y,xa as R,ya as q}from"./chunk-LROR6N3B.js";fa();var O=[{value:"new",label:"New"},{value:"in-progress",label:"In progress"},{value:"in-review",label:"In review"},{value:"closed",label:"Closed"}],Ta=O.filter(t=>t.value!=="closed"),xa=O.filter(t=>t.value==="closed"),va=[{value:"table",label:a("span",{className:"TaskManager__layoutOption",children:[a(ra,{size:14,strokeWidth:"1.8"}),"Table"]})},{value:"board",label:a("span",{className:"TaskManager__layoutOption",children:[a(ea,{size:14,strokeWidth:"1.8"}),"Board"]})}],ba=[{value:"open",label:"Active"},{value:"assigned-to-me",label:"Assigned to me"}],ha=[{value:"open",label:"Active"},{value:"assigned-to-me",label:"Assigned to me"},{value:"created-by-me",label:"Created by me"},{value:"closed",label:"Closed"},{value:"all",label:"All"}];function qa(t){let e=window.firebase.user.email||"",r=(t.variant||"compact")==="page",{tasks:i,loading:n,error:c}=Sa(r?"all":"open"),[f,b]=l("open"),[p,da]=oa("root-cms-task-manager-layout-v2","table"),[h,j]=l(""),[g,y]=l(""),[M,T]=l(!1),[w,B]=l("normal"),[x,N]=l(""),[C,L]=l(!1),[H,F]=l(!1),pa=r?ha:ba,U=V(()=>za(i,f,e),[i,f,e]),K=U.length,ga=r?`${K} shown`:`${K} active`,ma=!!h.trim()&&!H;async function ka(o){o.preventDefault();let $=h.trim();if(!$)return;let S=Ca($);F(!0);try{await na({title:S.title,description:S.description,assignee:g.trim()||void 0,priority:w,targetLaunchDate:_a(x)}),j(""),y(""),B("normal"),N(""),A({title:"Task created",message:S.title,autoClose:4e3})}catch(ua){A({title:"Could not create task",message:D(ua),color:"red",autoClose:!1})}finally{F(!1)}}return a("div",{className:Q(t.className,"TaskManager",r&&"TaskManager--page"),children:[a(d,{className:"TaskManager__composer",children:a("form",{onSubmit:o=>ka(o),children:[a("div",{className:"TaskManager__composer__header",children:[a("div",{className:"TaskManager__composer__avatar",children:g&&a(v,{email:g,size:32})}),a("div",{children:[a("div",{className:"TaskManager__composer__title",children:"Create a task"}),a("div",{className:"TaskManager__composer__subtitle",children:"Assign it to an agent, a teammate, or yourself."})]})]}),a("textarea",{className:"TaskManager__composer__textarea",value:h,rows:3,placeholder:"Enter a task description. Specify scope, collection, and acceptance criteria.",onInput:o=>{j(o.currentTarget.value)}}),a("div",{className:"TaskManager__composer__footer",children:[a("div",{className:"TaskManager__composer__controls",children:[a(R,{opened:M,onClose:()=>T(!1),position:"bottom",shadow:"md",width:280,withArrow:!0,target:a("button",{className:"TaskManager__composer__control",type:"button","aria-expanded":M,onClick:()=>T(!M),children:[a(sa,{size:15,strokeWidth:"1.8"}),a("span",{children:"assign to..."}),g&&a("span",{className:"TaskManager__composer__control__value",children:m(g)})]}),children:a("div",{className:"TaskManager__composer__popover",children:[a(Y,{autoFocus:!0,label:"Email",placeholder:"teammate@example.com",size:"xs",type:"email",value:g,onChange:o=>y(o.currentTarget.value),onKeyDown:o=>{o.key==="Enter"&&(o.preventDefault(),T(!1))}}),a("div",{className:"TaskManager__composer__popover__actions",children:[a(_,{compact:!0,size:"xs",variant:"default",onClick:()=>y(""),children:"Clear"}),a(_,{compact:!0,size:"xs",color:"dark",onClick:()=>T(!1),children:"Done"})]})]})}),a(z,{position:"bottom",shadow:"md",control:a("button",{className:"TaskManager__composer__control",type:"button",children:[a(ta,{size:15,strokeWidth:"1.8"}),a("span",{children:w}),a(aa,{size:14,strokeWidth:"1.8"})]}),children:["high","medium","normal"].map(o=>a(z.Item,{className:w===o?"TaskManager__composer__menuItem--active":"",onClick:()=>B(o),children:o},o))}),a(R,{opened:C,onClose:()=>L(!1),position:"bottom",shadow:"md",width:260,withArrow:!0,target:a("button",{className:"TaskManager__composer__control",type:"button","aria-expanded":C,onClick:()=>L(!C),children:[a(Z,{size:15,strokeWidth:"1.8"}),a("span",{children:x?Da(x):"target launch date"})]}),children:a("div",{className:"TaskManager__composer__popover",children:[a("label",{className:"TaskManager__composer__dateLabel",children:["Target launch date",a("input",{type:"date",value:x,onInput:o=>{N(o.currentTarget.value)}})]}),a("div",{className:"TaskManager__composer__popover__actions",children:[a(_,{compact:!0,size:"xs",variant:"default",onClick:()=>N(""),children:"Clear"}),a(_,{compact:!0,size:"xs",color:"dark",onClick:()=>L(!1),children:"Done"})]})]})})]}),a(_,{type:"submit",size:"xs",color:"dark",loading:H,disabled:!ma,rightIcon:a(X,{size:15,strokeWidth:"1.8"}),children:"Create task"})]})]})}),a("div",{className:"TaskManager__listHeader",children:[a("div",{className:"TaskManager__listHeader__summary",children:[a("div",{className:"TaskManager__listHeader__titleLine",children:[a("div",{className:"TaskManager__sectionTitle",children:r?"Tasks":"Active tasks"}),a("span",{className:"TaskManager__listHeader__count",children:ga})]}),a("div",{className:"TaskManager__filters","aria-label":"Task filters",children:pa.map(o=>a("button",{className:f===o.value?"active":"",type:"button",onClick:()=>b(o.value),children:o.label},o.value))})]}),a("div",{className:"TaskManager__listHeader__actions",children:r?a(q,{className:"TaskManager__layoutToggle",size:"xs",value:p,onChange:o=>da(o),data:va}):a(_,{component:"a",href:"/cms/tasks",variant:"default",size:"xs",compact:!0,children:"Show all"})})]}),a(ya,{error:c,filter:f,layout:r?p:"compact",loading:n,tasks:U})]})}function ya(t){let{error:e,filter:s,layout:r,loading:i,tasks:n}=t;return i?a(d,{className:"TaskManager__list",children:a("div",{className:"TaskManager__list__state",children:a(G,{color:"gray",size:"sm"})})}):e?a(d,{className:"TaskManager__list",children:a("div",{className:"TaskManager__list__state error",children:e})}):n.length===0?a(d,{className:"TaskManager__list",children:a("div",{className:"TaskManager__list__state",children:Ra(s,r)})}):r==="board"?a(wa,{filter:s,tasks:n}):r==="table"?a(Ma,{tasks:n}):a(d,{className:"TaskManager__list",children:n.map(c=>a(La,{task:c},c.id))})}function Ma(t){return a(d,{className:"TaskManager__tableSurface",children:a(J,{className:"TaskManager__table",verticalSpacing:"xs",striped:!0,highlightOnHover:!0,fontSize:"xs",children:[a("thead",{children:a("tr",{children:[a("th",{children:"task"}),a("th",{children:"status"}),a("th",{children:"priority"}),a("th",{children:"assignee"}),a("th",{children:"target"}),a("th",{children:"opened"})]})}),a("tbody",{children:t.tasks.map(e=>{let s=e.createdBy||"unknown";return a("tr",{children:[a("td",{children:a("a",{className:"TaskManager__tableTask",href:`/cms/tasks/${e.id}`,children:[a("div",{className:"TaskManager__taskRow__avatar",children:e.assignee&&a(v,{email:e.assignee,size:24})}),a("span",{className:"TaskManager__tableTask__content",children:[a("span",{className:"TaskManager__tableTask__title",children:e.title}),a("span",{className:"TaskManager__tableTask__meta",children:["#",e.id," by ",m(s)]})]})]})}),a("td",{children:a("span",{className:"TaskManager__taskRow__status",children:[a("span",{}),E(e.status)]})}),a("td",{children:a("span",{className:`TaskManager__taskRow__priority TaskManager__taskRow__priority--${u(e.priority)}`,children:u(e.priority)})}),a("td",{children:e.assignee?m(e.assignee):"Unassigned"}),a("td",{children:e.targetLaunchDate?k(e.targetLaunchDate):"None"}),a("td",{children:k(e.createdAt)})]},e.id)})})]})})}function wa(t){let e=Aa(t.tasks,t.filter);return a("div",{className:"TaskManager__board",children:e.map(s=>{let r=t.tasks.filter(i=>ca(i)===s.value);return a("section",{className:"TaskManager__boardColumn",children:[a("div",{className:"TaskManager__boardColumn__header",children:[a("span",{children:s.label}),a("span",{children:r.length})]}),a("div",{className:"TaskManager__boardColumn__tasks",children:[r.length===0&&a("div",{className:"TaskManager__boardColumn__empty",children:"No tasks"}),r.map(i=>a(Na,{task:i},i.id))]})]},s.value)})})}function Na(t){let{task:e}=t,s=e.createdBy||"unknown";return a("a",{className:"TaskManager__boardCard",href:`/cms/tasks/${e.id}`,children:[a("div",{className:"TaskManager__boardCard__title",children:e.title}),e.description&&a("div",{className:"TaskManager__boardCard__description",children:e.description}),a("div",{className:"TaskManager__boardCard__meta",children:["#",e.id," opened ",k(e.createdAt)," by"," ",m(s)]}),a("div",{className:"TaskManager__boardCard__badges",children:[a("span",{className:`TaskManager__taskRow__priority TaskManager__taskRow__priority--${u(e.priority)}`,children:u(e.priority)}),a("span",{className:"TaskManager__boardCard__badge",children:e.assignee?m(e.assignee):"Unassigned"}),e.targetLaunchDate&&a("span",{className:"TaskManager__boardCard__badge",children:["target ",k(e.targetLaunchDate)]})]})]})}function Ca(t){let[e,...s]=t.split(`
|
|
2
2
|
`);for(;s.length>0&&s[0].trim().length===0;)s.shift();return{title:e.trim(),description:s.join(`
|
|
3
3
|
`).trim()}}function La(t){let{task:e}=t,s=e.createdBy||"unknown";return a("a",{className:"TaskManager__taskRow",href:`/cms/tasks/${e.id}`,children:[a("div",{className:"TaskManager__taskRow__avatar",children:e.assignee&&a(v,{email:e.assignee,size:28})}),a("div",{className:"TaskManager__taskRow__content",children:[a("div",{className:"TaskManager__taskRow__title",children:e.title}),a("div",{className:"TaskManager__taskRow__meta",children:["opened ",k(e.createdAt)," by ",m(s)]})]}),a("div",{className:"TaskManager__taskRow__badges",children:[a("div",{className:"TaskManager__taskRow__status",children:[a("span",{}),E(e.status)]}),a("div",{className:`TaskManager__taskRow__priority TaskManager__taskRow__priority--${u(e.priority)}`,children:u(e.priority)}),e.targetLaunchDate&&a("div",{className:"TaskManager__taskRow__date",children:["target ",k(e.targetLaunchDate)]})]})]})}function Sa(t){let[e,s]=l([]),[r,i]=l(!0),[n,c]=l("");return W(()=>{i(!0);let b=(t==="all"?ia:la)(p=>{s(p),c(""),i(!1)},p=>{c(D(p)),i(!1)});return()=>b()},[t]),{tasks:e,loading:r,error:n}}function za(t,e,s){switch(e){case"all":return t;case"closed":return t.filter(r=>!P(r.status));case"assigned-to-me":return t.filter(r=>r.assignee===s);case"created-by-me":return t.filter(r=>r.createdBy===s);default:return t.filter(r=>P(r.status))}}function Ra(t,e){switch(t){case"assigned-to-me":return e==="compact"?"No active tasks are assigned to you.":"No tasks are assigned to you.";case"created-by-me":return"No tasks created by you.";case"closed":return"No closed tasks yet.";case"all":return"No tasks yet.";default:return"No active tasks yet."}}function m(t){return t.split("@")[0]||t}function k(t){return t?.toMillis?new Date(t.toMillis()).toLocaleDateString("en",{month:"short",day:"numeric"}):"just now"}function E(t){return I(t).replace(/[-_]/g," ")}function ca(t){return I(t.status)}function Aa(t,e){let s=e==="open"?Ta:e==="closed"?xa:O,r=new Set(s.map(n=>n.value)),i=t.map(n=>ca(n)).filter(n=>!r.has(n));return[...s,...Array.from(new Set(i)).map(n=>({value:n,label:E(n)}))]}function u(t){return t||"normal"}function _a(t){if(!t)return null;let[e,s,r]=t.split("-").map(Number);return!e||!s||!r?null:new Date(e,s-1,r)}function Da(t){let e=_a(t);return e?e.toLocaleDateString("en",{month:"short",day:"numeric"}):"target launch date"}export{qa as a};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as b,c as w}from"./chunk-
|
|
1
|
+
import{a as b,c as w}from"./chunk-HARRKJFZ.js";import{b as z,e as I,f as C}from"./chunk-ZN2Y5OUF.js";import{a as p}from"./chunk-QHJOTXYB.js";import{a}from"./chunk-O5P3CPJ4.js";import{Bc as N,Ga as n,V as v,a as c,c as y,da as m,j as L}from"./chunk-LROR6N3B.js";import{d as M}from"./chunk-KUCVLANF.js";L();var S="PruneTranslationsModal";function W(){let u=b(),o=w();return{open:r=>{u.openContextModal(S,{...o,title:`Prune unused strings from ${r.docId}`,innerProps:r,size:600})}}}function $(u){let{innerProps:o,context:r,id:f}=u,[l,h]=c(!0),[e,k]=c([]),[E,x]=c(!1);y(()=>{let s=!1;async function d(){let t=o.docId,g=await z({tags:[t]}),H=new Set(await Promise.all(o.sourceStrings.map(i=>C(i)))),T=[];for(let[i,P]of Object.entries(g))if(!H.has(i)){let _=P.tags||[];_.includes(t)&&T.push({hash:i,source:P.source||i,tags:_.filter(B=>B!==t)})}s||(k(T),h(!1))}return d().catch(t=>{console.error(t),s||h(!1)}),()=>{s=!0}},[o.docId,o.sourceStrings]);async function U(){if(e.length!==0){x(!0);try{let s=e.map(({hash:t,tags:g})=>({hash:t,tags:g}));await I(s,{mode:"replace"});let d=e.map(t=>t.hash);p({title:"Pruned translations",message:`Removed "${o.docId}" tag from ${d.length} unused translation(s).`,color:"green",autoClose:5e3}),o.onPruned?.(d),r.closeModal(f)}catch(s){console.error(s),p({title:"Error pruning translations",message:String(s),color:"red",autoClose:!1})}finally{x(!1)}}}return n("div",{className:"PruneTranslationsModal",children:[n("div",{className:"PruneTranslationsModal__description",children:n(a,{size:"body",children:["Pruning removes the ",n("strong",{children:o.docId})," tag from translation strings that are no longer referenced by this document. The translations themselves are not deleted and will remain available to other documents that still reference them."]})}),l&&n("div",{className:"PruneTranslationsModal__loading",children:[n(v,{color:"gray",size:"sm"}),n(a,{size:"body",color:"gray",children:"Scanning for unused strings\u2026"})]}),!l&&e.length===0&&n("div",{className:"PruneTranslationsModal__empty",children:n(a,{size:"body",color:"gray",children:['All translations tagged with "',o.docId,'" are still in use. Nothing to prune.']})}),!l&&e.length>0&&n(M,{children:[n(a,{size:"body",weight:"semi-bold",children:[e.length," unused string",e.length!==1?"s":""," will be untagged:"]}),n("div",{className:"PruneTranslationsModal__list",children:e.map(s=>n("div",{className:"PruneTranslationsModal__list__item",children:n(a,{size:"body-sm",children:s.source})},s.hash))})]}),n("div",{className:"PruneTranslationsModal__actions",children:[n(m,{variant:"default",size:"xs",onClick:()=>r.closeModal(f),children:"Cancel"}),n(m,{variant:"filled",size:"xs",color:"red",leftIcon:n(N,{size:14}),loading:E,disabled:l||e.length===0,onClick:U,children:["Prune ",e.length>0?e.length:""," string",e.length!==1?"s":""]})]})]})}$.id=S;export{W as a,$ as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{f as n}from"./chunk-
|
|
1
|
+
import{f as n}from"./chunk-YLSRRNSE.js";import{Ga as t}from"./chunk-LROR6N3B.js";function f(a){let{className:r,as:h,size:e,weight:o,color:i,children:g,...s}=a;return t(h||"h2",{...s,className:n(r,"heading",e&&`size:${e}`,o&&`weight:${o}`,i&&`color:${i}`),children:g})}export{f as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as q,b as j,d as B,e as f,g as O,i as U,j as H}from"./chunk-LROR6N3B.js";import{a as g,b as _,f as K,i as k,j as D,k as M}from"./chunk-KUCVLANF.js";M();H();var d,R;function V(e){return!R||(typeof R=="string"?e.startsWith(R):R.test(e))}function ee(e,t){let r="";if(d=void 0,t&&t.type==="click"){if(t.ctrlKey||t.metaKey||t.altKey||t.shiftKey||t.button!==0)return e;let n=t.composedPath().find(i=>i.nodeName=="A"&&i.href),o=n&&n.getAttribute("href");if(!n||n.origin!=location.origin||/^#/.test(o)||!/^(_?self)?$/i.test(n.target)||!V(o)||n.download)return e;d=!0,t.preventDefault(),r=n.href.replace(location.origin,"")}else t&&t.url?(d=!t.replace,r=t.url):r=location.pathname+location.search;return d===!0?history.pushState(null,"",r):d===!1&&history.replaceState(null,"",r),r}var te=(e,t,r={})=>{e=e.split("/").filter(Boolean),t=(t||"").split("/").filter(Boolean),r.params||(r.params={});for(let n=0,o,i;n<Math.max(e.length,t.length);n++){let[,s,a,l]=(t[n]||"").match(/^(:?)(.*?)([+*?]?)$/);if(o=e[n],!(!s&&a==o)){if(!s&&o&&l=="*"){r.rest="/"+e.slice(n).map(decodeURIComponent).join("/");break}if(!s||!o&&l!="?"&&l!="*")return;if(i=l=="+"||l=="*",i?o=e.slice(n).map(decodeURIComponent).join("/")||void 0:o&&(o=decodeURIComponent(o)),r.params[a]=o,a in r||(r[a]=o),i)break}}return r};function E(e){let[t,r]=j(ee,e.url||location.pathname+location.search);e.scope&&(R=e.scope);let n=d===!0,o=O(()=>{let i=new URL(t,location.origin),s=i.pathname.replace(/\/+$/g,"")||"/";return{url:t,path:s,query:Object.fromEntries(i.searchParams),route:(a,l)=>r({url:a,replace:l}),wasPush:n}},[t]);return B(()=>(addEventListener("click",r),addEventListener("popstate",r),()=>{removeEventListener("click",r),removeEventListener("popstate",r)}),[]),_(E.ctx.Provider,{value:o},e.children)}var re=Promise.resolve();function T(e){let[t,r]=j(c=>c+1,0),{url:n,query:o,wasPush:i,path:s}=J();if(!n)throw new Error("preact-iso's <Router> must be used within a <LocationProvider>, see: https://github.com/preactjs/preact-iso#locationprovider");let{rest:a=s,params:l={}}=U($),S=f(!1),z=f(s),C=f(0),u=f(),p=f(),h=f(),b=f(!1),P=f();P.current=!1;let A,I,m;K(e.children).some(c=>{if(te(a,c.props.path,m={...c.props,path:a,query:o,params:Object.assign({},l),rest:""}))return A=k(c,m);c.props.default&&(I=k(c,m))});let v=A||I,G=u.current&&u.current.__u&x&&u.current.__u&L,Q=u.current&&u.current.__h,X=O(()=>{p.current=u.current,u.current=_($.Provider,{value:m},v);let c=p.current&&p.current.props.children;return!c||!v||v.type!==c.type||v.props.component!==c.props.component?(this.__v&&this.__v.__k&&this.__v.__k.reverse(),C.current++,!0):!1},[n,JSON.stringify(m)]);G?(u.current.__u|=x,u.current.__u|=L):Q&&(u.current.__h=!0);let Z=p.current;return p.current=null,this.__c=(c,y)=>{P.current=!0,p.current=Z,e.onLoadStart&&e.onLoadStart(n),S.current=!0;let N=C.current;c.then(()=>{N===C.current&&(p.current=null,u.current&&(y.__h&&(u.current.__h=y.__h),y.__u&L&&(u.current.__u|=L),y.__u&x&&(u.current.__u|=x)),re.then(r))})},B(()=>{let c=this.__v&&this.__v.__e;if(P.current){!b.current&&!h.current&&(h.current=c);return}!b.current&&h.current&&(h.current!==c&&h.current.remove(),h.current=null),b.current=!0,z.current!==s&&(i&&scrollTo(0,0),e.onRouteChange&&e.onRouteChange(n),z.current=s),e.onLoadEnd&&S.current&&e.onLoadEnd(n),S.current=!1},[s,i,t]),X?[_(w,{r:u}),_(w,{r:p})]:_(w,{r:u})}var x=32,L=128,w=({r:e})=>e.current;T.Provider=E;E.ctx=D({});var $=D({}),ne=e=>_(e.component,e),J=()=>U(E.ctx);M();H();var W=g.__b;g.__b=e=>{e.type&&e.type._forwarded&&e.ref&&(e.props.ref=e.ref,e.ref=null),W&&W(e)};function F(e){let t,r,n=()=>e().then(i=>r=i&&i.default||i),o=i=>{let[,s]=q(0),a=f(r);if(t||(t=n()),r!==void 0)return _(r,i);throw a.current||(a.current=t.then(()=>s(1))),t};return o.preload=()=>(t||(t=n()),t),o._forwarded=!0,o}var Y=g.__e;g.__e=(e,t,r)=>{if(e&&e.then){let n=t;for(;n=n.__;)if(n.__c&&n.__c.__c)return t.__e==null&&(t.__c.__z=[r.__e],t.__e=r.__e,t.__k=r.__k),t.__k||(t.__k=[]),n.__c.__c(e,t)}Y&&Y(e,t,r)};M();function ve(...e){return e.filter(t=>!!t).join(" ")||void 0}export{E as a,T as b,ne as c,J as d,F as e,ve as f};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{a as C,f as h}from"./chunk-KRNQ6L35.js";import{b as m,c as g,g as p,h as b,n as y,o as x,q as _,w as f,x as u}from"./chunk-VD6G5NV4.js";function S(){let t=window.__ROOT_CTX.rootConfig.projectId,n=window.firebase.db;return m(n,"Projects",t,"Translations")}async function $(t){let n=S(),s=t?.tags?p(n,b("tags","array-contains-any",t.tags)):p(n),a=await x(s),e={};return a.forEach(r=>{let o=r.id;e[o]=r.data()}),e}async function k(t){let n=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,a=g(s,"Projects",n,"Translations",t);return(await y(a)).data()}async function H(t,n){let s=window.__ROOT_CTX.rootConfig.projectId,a=window.firebase.db,e=g(a,"Projects",s,"Translations",t),r={};for(let o in n){if(o==="tags"){r.tags=n.tags;continue}let c=O(o);c&&(r[c]=n[o])}console.log("updating translations: ",r),await _(e,r),h("translations.save",{metadata:{hash:t},throttle:5*C.minute,throttleId:t})}async function U(t,n){let s=n?.mode??"replace",a=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,r=500;for(let o=0;o<t.length;o+=r){let c=u(e);t.slice(o,o+r).forEach(({hash:l,tags:d})=>{let i=g(e,"Projects",a,"Translations",l);s==="union"?c.update(i,{tags:f(...d)}):c.update(i,{tags:d})}),await c.commit()}}async function A(t){return P(j(t))}async function P(t){let s=new TextEncoder().encode(t),a=await crypto.subtle.digest("SHA-1",s);return Array.from(new Uint8Array(a)).map(o=>o.toString(16).padStart(2,"0")).join("")}function j(t){return String(t).trim().split(`
|
|
2
|
+
`).map(s=>X(s)).join(`
|
|
3
|
+
`)}function X(t){return String(t).trimEnd().replace(/ $/,"")}var R=new Map;function L(t){let n=R.get(t);if(n)return n;let s=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,"."),a=new RegExp(`^${s}$`,"i");return R.set(t,a),a}function q(t){return(window.__ROOT_CTX.excludeLocalesFromTranslations||[]).some(s=>L(s).test(t))}function O(t){let s=(window.__ROOT_CTX.rootConfig.i18n||{}).locales||["en"];for(let a of s)if(String(a).toLowerCase()===t.toLowerCase())return a;return null}async function B(t,n){let s=window.__ROOT_CTX.rootConfig.projectId,a=window.firebase.db,e=500,r=await Promise.all(t.map(async o=>({hash:await A(o.source),locales:o.locales,source:o.source})));for(let o=0;o<r.length;o+=e){let c=u(a),w=r.slice(o,o+e);for(let l of w){let d=g(a,"Projects",s,"Translations",l.hash),i={source:l.source};for(let[E,I]of Object.entries(l.locales)){let T=O(E);T&&(i[T]=j(I))}n?.tags?.length&&(i.tags=f(...n.tags)),c.set(d,i,{merge:!0})}await c.commit()}h("translations.batch_save",{metadata:{count:t.length}})}export{S as a,$ as b,k as c,H as d,U as e,A as f,j as g,q as h,B as i};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b as a,c as b,d as c,e as d,f as e,g as f,h as g,i as h,j as i,k as j,l as k,m as l,n as m,o as n,p as o,q as p}from"./chunk-7SK47HHZ.js";import"./chunk-DTMZLUNY.js";import"./chunk-PVAE643M.js";export{a as GCI_SUPPORTED_EXTS,f as GCI_URL_PREFIX,b as IMAGE_EXTS,c as OPT_IN_IMAGE_EXTS,d as PREVIEW_IMAGE_EXTS,e as VIDEO_EXTS,o as buildDownloadURL,i as checkFileExists,h as deleteFileFromGCS,j as getFileExt,p as shouldImageUseDarkBg,n as testFileMatchesAccept,l as testIsGoogleCloudImageFile,k as testIsImageFile,m as testIsVideoFile,g as uploadFileToGCS};
|