newest version of timetracker

This commit is contained in:
Daniel Goc
2026-03-11 11:46:25 +01:00
parent 9ef4bb219b
commit 5921987ad7
32 changed files with 422 additions and 275 deletions

55
.air.toml Normal file
View File

@@ -0,0 +1,55 @@
#:schema https://json.schemastore.org/any.json
root = "."
testdata_dir = "testdata"
tmp_dir = "tmp"
[build]
args_bin = []
bin = "./tmp/main"
cmd = "go build -o ./tmp/main app/cmd/main.go"
delay = 1000
entrypoint = ["./tmp/main"]
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
exclude_file = []
exclude_regex = ["_test.go"]
exclude_unchanged = false
follow_symlink = false
full_bin = ""
include_dir = []
include_ext = ["go", "tpl", "tmpl", "html"]
include_file = []
kill_delay = "0s"
log = "build-errors.log"
poll = false
poll_interval = 0
post_cmd = []
pre_cmd = []
rerun = false
rerun_delay = 500
send_interrupt = false
stop_on_error = false
[color]
app = ""
build = "yellow"
main = "magenta"
runner = "green"
watcher = "cyan"
[log]
main_only = false
silent = false
time = false
[misc]
clean_on_exit = false
[proxy]
app_port = 0
enabled = false
proxy_port = 0
[screen]
clear_on_rebuild = false
keep_scroll = true

46
.env Normal file
View File

@@ -0,0 +1,46 @@
# Server Configuration
SERVER_PORT=3000
SERVER_HOST=0.0.0.0
# Database Configuration
DB_HOST=localhost
DB_PORT=5432
DB_USER=gitea
DB_PASSWORD=gitea
DB_NAME=gitea
PROJECT_NAME=gitea-ext
DB_SERVICE_NAME=postgres
DB_SSLMODE=disable
# App COnfig
APP_NAME="User Management System"
APP_VERSION=2.1.0
APP_ENVIRONMENT=development
# JWT Configuration
AUTH_JWT_SECRET=511900e67f2db873e72b0b24e51352227b067fc03c5d7b3d321e3baba317c83a
AUTH_JWT_EXPIRATION=86400
AUTH_REFRESH_EXPIRATION=604800
# Google OAuth2
OAUTH_GOOGLE_CLIENT_ID=331979954218-9vrpe08oqhhcgj6bvu6d4lds0dt630m9.apps.googleusercontent.com
OAUTH_GOOGLE_CLIENT_SECRET=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
OAUTH_GOOGLE_REDIRECT_URL=http://localhost:3000/api/v1/public/auth/google/callback
# Email Configuration (SMTP)
# Set EMAIL_ENABLED=true to require email verification
EMAIL_ENABLED=true
EMAIL_SMTP_HOST=mail.ma-al.com
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=test@ma-al.com
EMAIL_SMTP_PASSWORD=maal12345678
EMAIL_FROM=test@ma-al.com
EMAIL_FROM_NAME=Gitea Manager
EMAIL_ADMIN=goc_marek@ma-al.pl
I18N_LANGS=en,pl,cs
PDF_SERVER_URL=http://localhost:8000
FILE_MAAL_PL_USER=git_operator
FILE_MAAL_PL_PASSWORD=1FnwqcEgIUjQHjt1

6
.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@
***/node_modules/***
tmp
assets/public/dist
bin/
i18n/*.json
*_templ.go

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
import{I as e,J as t,S as n,Y as r,_t as i,d as a,ot as o,ut as s,w as c,y as l}from"./vue.runtime.esm-bundler-BM5WPBHd.js";import{E as u,i as d}from"./tv-uB0-NqWK.js";import{f}from"./usePortal-BgeZHop8.js";function p(e){let t=f({dir:s(`ltr`)});return a(()=>e?.value||t.dir?.value||`ltr`)}function m(e){return a(()=>i(e)?!!u(e)?.closest(`form`):!0)}function h(){let e=s();return{primitiveElement:e,currentElement:a(()=>[`#text`,`#comment`].includes(e.value?.$el.nodeName)?e.value?.$el.nextElementSibling:u(e))}}var g=`data-reka-collection-item`;function _(i={}){let{key:u=``,isProvider:f=!1}=i,p=`${u}CollectionProvider`,m;if(f){let t=s(new Map);m={collectionRef:s(),itemMap:t},e(p,m)}else m=c(p);let _=(e=!1)=>{let t=m.collectionRef.value;if(!t)return[];let n=Array.from(t.querySelectorAll(`[${g}]`)),r=Array.from(m.itemMap.value.values()).sort((e,t)=>n.indexOf(e.ref)-n.indexOf(t.ref));return e?r:r.filter(e=>e.ref.dataset.disabled!==``)},v=l({name:`CollectionSlot`,inheritAttrs:!1,setup(e,{slots:r,attrs:i}){let{primitiveElement:a,currentElement:o}=h();return t(o,()=>{m.collectionRef.value=o.value}),()=>n(d,{ref:a,...i},r)}}),y=l({name:`CollectionItem`,inheritAttrs:!1,props:{value:{validator:()=>!0}},setup(e,{slots:t,attrs:i}){let{primitiveElement:a,currentElement:s}=h();return r(t=>{if(s.value){let n=o(s.value);m.itemMap.value.set(n,{ref:s.value,value:e.value}),t(()=>m.itemMap.value.delete(n))}}),()=>n(d,{...i,[g]:``,ref:a},t)}});return{getItems:_,reactiveItems:a(()=>Array.from(m.itemMap.value.values())),itemMapSize:a(()=>m.itemMap.value.size),CollectionSlot:v,CollectionItem:y}}export{p as i,h as n,m as r,_ as t};

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
import{F as e,Q as t,_ as n,f as r,g as i,h as a,m as o,o as s,p as c,ut as l,wt as u,y as d,yt as f}from"./vue.runtime.esm-bundler-BM5WPBHd.js";import"./useFetchJson-BTB9doG4.js";import{g as p,t as m}from"./Button-Dys5wjZc.js";import{Z as h,s as g}from"./tv-uB0-NqWK.js";import{t as _}from"./auth-DHyg2egq.js";import{n as v,r as y,t as b}from"./useValidation-pSaoyCcB.js";import{n as x}from"./settings-84EZt-NQ.js";import{t as S}from"./Alert-CvejfPQL.js";var C={class:`h-[100vh] flex flex-col items-center justify-center px-4 sm:px-6 lg:px-8`},w={class:`text-center mb-15`},T={class:`inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-primary-500 text-white mb-4 shadow-lg shadow-primary-500/30`},E={class:`w-full max-w-md flex flex-col gap-4`},D={key:0,class:`text-center flex flex-col gap-4`},O={class:`text-xl font-semibold dark:text-white text-black`},k={class:`text-sm text-gray-600 dark:text-gray-400`},A={class:`text-center`},j={class:`text-sm text-gray-600 dark:text-gray-400`},M={class:`text-center flex flex-col gap-3 border-t dark:border-(--border-dark) border-(--border-light) pt-4`},N=[`loading`],P={class:`text-sm text-gray-600 dark:text-gray-400`},F=d({__name:`PasswordRecoveryView`,setup(d){let F=h(),I=_(),L=b(),R=l(``),z=l(!1);async function B(){await I.requestPasswordReset(R.value)&&(z.value=!0)}function V(){F.push({name:`login`})}function H(){F.push({name:`register`})}function U(){return L.reset(),L.validateEmail(R,`email`,p.t(`validate_error.email_required`)),L.errors}return(l,d)=>{let p=g,h=m,_=S,b=x,F=v,L=y;return e(),a(`div`,C,[r(`div`,w,[r(`div`,T,[n(p,{name:`i-heroicons-clock`,class:`w-8 h-8`})]),d[1]||=r(`h1`,{class:`text-3xl font-bold text-gray-900 dark:text-white`},`TimeTracker`,-1)]),r(`div`,E,[z.value?(e(),a(`div`,D,[n(p,{name:`i-heroicons-envelope`,class:`w-12 h-12 mx-auto text-primary-500`}),r(`h2`,O,u(l.$t(`general.check_your_email`)),1),r(`p`,k,u(l.$t(`general.password_reset_link_sent_notice`)),1),n(h,{color:`neutral`,variant:`outline`,block:``,onClick:V,class:`dark:text-white text-black cursor-pointer`},{default:t(()=>[i(u(l.$t(`general.back_to_sign_in`)),1)]),_:1})])):(e(),a(s,{key:1},[r(`div`,A,[r(`p`,j,u(l.$t(`general.enter_email_for_password_reset`)),1)]),n(L,{validate:U,onSubmit:B,class:`flex flex-col gap-3`},{default:t(()=>[f(I).error?(e(),c(_,{key:0,color:`error`,variant:`subtle`,icon:`i-heroicons-exclamation-triangle`,title:f(I).error,"close-button":{icon:`i-heroicons-x-mark-20-solid`,variant:`link`},onClose:f(I).clearError},null,8,[`title`,`onClose`])):o(``,!0),n(F,{label:l.$t(`general.email_address`),name:`email`,required:``,class:`w-full dark:text-white text-black`},{default:t(()=>[n(b,{modelValue:R.value,"onUpdate:modelValue":d[0]||=e=>R.value=e,placeholder:l.$t(`general.enter_your_email`),disabled:f(I).loading,class:`w-full dark:text-white text-black placeholder:text-(--placeholder)`},null,8,[`modelValue`,`placeholder`,`disabled`])]),_:1},8,[`label`]),n(h,{type:`submit`,block:``,loading:f(I).loading,class:`text-white bg-(--color-blue-600) dark:bg-(--color-blue-500) cursor-pointer`},{default:t(()=>[i(u(l.$t(`general.send_password_reset_link`)),1)]),_:1},8,[`loading`])]),_:1}),r(`div`,M,[r(`button`,{color:`neutral`,variant:`outline`,loading:f(I).loading,class:`w-full flex items-center gap-2 justify-center text-[15px] dark:text-white text-black cursor-pointer`,onClick:V},[n(p,{name:`mingcute:arrow-left-line`,class:`text-(--color-blue-600) dark:text-(--color-blue-500) text-[16px]`}),i(` `+u(l.$t(`general.back_to_sign_in`)),1)],8,N),r(`p`,P,[i(u(l.$t(`general.dont_have_an_account`))+` `,1),r(`button`,{variant:`link`,size:`sm`,onClick:H,class:`text-[15px] text-(--color-blue-600) dark:text-(--color-blue-500) cursor-pointer`},u(l.$t(`general.create_account_now`)),1)])])],64))])])}}});export{F as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
import{F as e,M as t,Q as n,_ as r,f as i,g as a,h as o,m as s,p as c,ut as l,wt as u,y as d,yt as f}from"./vue.runtime.esm-bundler-BM5WPBHd.js";import"./useFetchJson-BTB9doG4.js";import{g as p,t as m}from"./Button-Dys5wjZc.js";import{X as h,Z as g,s as _}from"./tv-uB0-NqWK.js";import{t as v}from"./auth-DHyg2egq.js";import{n as y,r as b,t as x}from"./useValidation-pSaoyCcB.js";import{n as S}from"./settings-84EZt-NQ.js";import{t as C}from"./Alert-CvejfPQL.js";var w={class:`h-[100vh] flex flex-col items-center justify-center px-4 sm:px-6 lg:px-8`},T={class:`text-center mb-15`},E={class:`inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-primary-500 text-white mb-4 shadow-lg shadow-primary-500/30`},D={class:`w-full max-w-md flex flex-col gap-4`},O={key:0,class:`text-center flex flex-col gap-4`},k={class:`text-xl font-semibold dark:text-white text-black`},A={class:`text-sm text-gray-600 dark:text-gray-400`},j={class:`text-center border-t dark:border-(--border-dark) border-(--border-light) pt-4`},M=d({__name:`ResetPasswordForm`,setup(d){let M=g(),N=h(),P=v(),F=x(),I=l(``),L=l(``),R=l(!1),z=l(!1),B=l(``),V=l(!1);t(()=>{B.value=N.query.token||``,B.value||M.push({name:`password-recovery`})});async function H(){await P.resetPassword(B.value,I.value)&&(V.value=!0)}function U(){M.push({name:`login`})}function W(){return F.reset(),F.validatePasswords(I,`new_password`,L,`confirm_new_password`,p.t(`validate_error.confirm_password_required`)),F.errors}return(t,l)=>{let d=_,p=m,h=C,g=S,v=y,x=b;return e(),o(`div`,w,[i(`div`,T,[i(`div`,E,[r(d,{name:`i-heroicons-clock`,class:`w-8 h-8`})]),l[4]||=i(`h1`,{class:`text-3xl font-bold text-gray-900 dark:text-white`},`TimeTracker`,-1)]),i(`div`,D,[V.value?(e(),o(`div`,O,[r(d,{name:`i-heroicons-check-circle`,class:`w-12 h-12 mx-auto text-green-800`}),i(`h2`,k,u(t.$t(`general.password_updated`)),1),i(`p`,A,u(t.$t(`general.password_updated_description`)),1),r(p,{block:``,onClick:U,class:`dark:text-white text-black`},{default:n(()=>[a(u(t.$t(`general.back_to_sign_in`)),1)]),_:1})])):(e(),c(x,{key:1,validate:W,onSubmit:H,class:`flex flex-col gap-3`},{default:n(()=>[f(P).error?(e(),c(h,{key:0,color:`error`,variant:`subtle`,icon:`i-heroicons-exclamation-triangle`,title:f(P).error,"close-button":{icon:`i-heroicons-x-mark-20-solid`,variant:`link`},onClose:f(P).clearError},null,8,[`title`,`onClose`])):s(``,!0),r(v,{label:t.$t(`general.new_password`),name:`new_password`,required:``,class:`w-full dark:text-white text-black`},{default:n(()=>[r(g,{modelValue:I.value,"onUpdate:modelValue":l[1]||=e=>I.value=e,type:R.value?`text`:`password`,placeholder:t.$t(`general.enter_your_new_password`),disabled:f(P).loading,class:`w-full dark:text-white text-black placeholder:text-(--placeholder)`,ui:{trailing:`pe-1`}},{trailing:n(()=>[r(d,{color:`neutral`,variant:`link`,size:`sm`,name:R.value?`i-lucide-eye-off`:`i-lucide-eye`,"aria-label":R.value?`Hide password`:`Show password`,"aria-pressed":R.value,"aria-controls":`new_password`,onClick:l[0]||=e=>R.value=!R.value,class:`mr-2`},null,8,[`name`,`aria-label`,`aria-pressed`])]),_:1},8,[`modelValue`,`type`,`placeholder`,`disabled`])]),_:1},8,[`label`]),r(v,{label:t.$t(`general.confirm_password`),name:`confirm_new_password`,required:``,class:`w-full dark:text-white text-black`},{default:n(()=>[r(g,{modelValue:L.value,"onUpdate:modelValue":l[3]||=e=>L.value=e,type:z.value?`text`:`password`,placeholder:t.$t(`general.confirm_your_new_password`),disabled:f(P).loading,class:`w-full dark:text-white text-black placeholder:text-(--placeholder)`,ui:{trailing:`pe-1`}},{trailing:n(()=>[r(d,{color:`neutral`,variant:`ghost`,size:`sm`,name:z.value?`i-lucide-eye-off`:`i-lucide-eye`,onClick:l[2]||=e=>z.value=!z.value,class:`mr-2`},null,8,[`name`])]),_:1},8,[`modelValue`,`type`,`placeholder`,`disabled`])]),_:1},8,[`label`]),r(p,{type:`submit`,block:``,loading:f(P).loading,class:`text-white! bg-(--color-blue-600) dark:bg-(--color-blue-500) cursor-pointer`},{default:n(()=>[a(u(t.$t(`general.reset_password`)),1)]),_:1},8,[`loading`]),i(`div`,j,[i(`button`,{color:`neutral`,variant:`ghost`,onClick:U,class:`text-[15px] flex items-center gap-2 text-(--color-blue-600) dark:text-(--color-blue-500) cursor-pointer`},[r(d,{name:`mingcute:arrow-left-line`}),a(` `+u(t.$t(`general.back_to_sign_in`)),1)])])]),_:1}))])])}}});export{M as default};

View File

@@ -1 +0,0 @@
import{F as e,M as t,Q as n,_ as r,f as i,g as a,h as o,m as s,ut as c,wt as l,y as u}from"./vue.runtime.esm-bundler-BM5WPBHd.js";import{t as d}from"./useFetchJson-BTB9doG4.js";import{g as f,t as p}from"./Button-Dys5wjZc.js";import{$ as m,X as h,Z as g,s as _}from"./tv-uB0-NqWK.js";import{t as v}from"./Card-DJGrWflS.js";import{t as y}from"./Alert-CvejfPQL.js";var b={class:`min-h-screen bg-gradient-to-br from-primary-50 via-white to-primary-100 dark:from-gray-900 dark:via-gray-800 dark:to-gray-900`},x={class:`pt-20 pb-8 flex items-center justify-center px-4 sm:px-6 lg:px-8`},S={class:`w-full max-w-md`},C={class:`text-center mb-8`},w={class:`inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-primary-500 text-white mb-4 shadow-lg shadow-primary-500/30`},T={class:`text-center`},E={key:0},D={class:`text-xl font-semibold text-gray-900 dark:text-white`},O={key:1},k={class:`inline-flex items-center justify-center w-12 h-12 rounded-full bg-green-100 text-green-600 mb-4`},A={class:`text-xl font-semibold text-gray-900 dark:text-white`},j={class:`mt-1 text-sm text-gray-500 dark:text-gray-400`},M={key:2},N={class:`inline-flex items-center justify-center w-12 h-12 rounded-full bg-red-100 text-red-600 mb-4`},P={class:`text-xl font-semibold text-gray-900 dark:text-white`},F={class:`mt-1 text-sm text-gray-500 dark:text-gray-400`},I={key:0,class:`text-center py-4`},L={class:`text-gray-600 dark:text-gray-400 mb-4`},R={key:1,class:`text-center py-4`},z={key:2,class:`text-center py-4`},B={class:`text-gray-500 dark:text-gray-400`},V={class:`text-center`},H={class:`text-sm text-gray-600 dark:text-gray-400`},U=u({__name:`VerifyEmailView`,setup(u){let{t:U,te:W}=m(),G=g(),K=h(),q=c(``),J=c(!1),Y=c(null),X=c(!1),Z=c(!0);t(()=>{if(q.value=K.query.token||``,!q.value){Y.value=f.t(`verify_email.invalid_token`),Z.value=!1;return}Q()});async function Q(){if(!q.value){Y.value=f.t(`verify_email.invalid_token`);return}J.value=!0,Y.value=null;try{await d(`/api/v1/public/auth/complete-registration`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({token:q.value})}),X.value=!0,Z.value=!1,setTimeout(()=>{G.push({name:`login`})},3e3)}catch(e){Y.value=e?.message??f.t(`verify_email.verification_failed`),Z.value=!1}finally{J.value=!1}}function $(){G.push({name:`login`})}return(t,c)=>{let u=_,d=p,f=y,m=v;return e(),o(`div`,b,[i(`div`,x,[i(`div`,S,[i(`div`,C,[i(`div`,w,[r(u,{name:`i-heroicons-clock`,class:`w-8 h-8`})]),c[0]||=i(`h1`,{class:`text-3xl font-bold text-gray-900 dark:text-white`},`TimeTracker`,-1)]),r(m,{class:`shadow-xl shadow-gray-200/50 dark:shadow-gray-900/50`},{header:n(()=>[i(`div`,T,[Z.value&&J.value?(e(),o(`div`,E,[r(u,{name:`i-heroicons-arrow-path`,class:`w-8 h-8 animate-spin text-primary-500 mx-auto mb-4`}),i(`h2`,D,l(t.$t(`verify_email.verifying`)),1)])):X.value?(e(),o(`div`,O,[i(`div`,k,[r(u,{name:`i-heroicons-check-circle`,class:`w-6 h-6`})]),i(`h2`,A,l(t.$t(`verify_email.success_title`)),1),i(`p`,j,l(t.$t(`verify_email.success_message`)),1)])):Y.value?(e(),o(`div`,M,[i(`div`,N,[r(u,{name:`i-heroicons-exclamation-circle`,class:`w-6 h-6`})]),i(`h2`,P,l(t.$t(`verify_email.error_title`)),1),i(`p`,F,l(t.$t(`verify_email.error_message`)),1)])):s(``,!0)])]),footer:n(()=>[i(`div`,V,[i(`p`,H,[a(l(t.$t(`verify_email.already_registered`))+` `,1),i(`button`,{variant:`link`,size:`sm`,onClick:$,class:`cursor-pointer text-(--color-blue-600) dark:text-(--color-blue-500)`},l(t.$t(`general.sign_in`)),1)])])]),default:n(()=>[X.value?(e(),o(`div`,I,[i(`p`,L,l(t.$t(`verify_email.redirect_message`)),1),r(d,{color:`primary`,onClick:$},{default:n(()=>[a(l(t.$t(`verify_email.go_to_login`)),1)]),_:1})])):Y.value?(e(),o(`div`,R,[r(f,{color:`error`,variant:`subtle`,icon:`i-heroicons-exclamation-triangle`,title:Y.value,class:`mb-4`},null,8,[`title`]),r(d,{color:`primary`,onClick:$,class:`cursor-pointer`},{default:n(()=>[a(l(t.$t(`verify_email.go_to_login`)),1)]),_:1})])):Z.value&&J.value?(e(),o(`div`,z,[i(`p`,B,l(t.$t(`verify_email.please_wait`)),1)])):s(``,!0)]),_:1})])])])}}});export{U as default};

View File

@@ -1 +0,0 @@
import{D as e,F as t,J as n,L as r,d as i,h as a,m as o,o as s,p as c,y as l}from"./vue.runtime.esm-bundler-BM5WPBHd.js";import{h as u,n as d}from"./usePortal-BgeZHop8.js";import{n as f}from"./Collection-Dmox1UHc.js";var p={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function m(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function h(e,t,n){let r=m(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return p[r]}function g(e,t=!1){let n=u();for(let r of e)if(r===n||(r.focus({preventScroll:t}),u()!==n))return}function _(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var v=l({inheritAttrs:!1,__name:`VisuallyHiddenInputBubble`,props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:`fully-hidden`}},setup(r){let a=r,{primitiveElement:o,currentElement:s}=f();return n(i(()=>a.checked??a.value),(e,t)=>{if(!s.value)return;let n=s.value,r=window.HTMLInputElement.prototype,i=Object.getOwnPropertyDescriptor(r,`value`).set;if(i&&e!==t){let t=new Event(`input`,{bubbles:!0}),r=new Event(`change`,{bubbles:!0});i.call(n,e),n.dispatchEvent(t),n.dispatchEvent(r)}}),(n,r)=>(t(),c(d,e({ref_key:`primitiveElement`,ref:o},{...a,...n.$attrs},{as:`input`}),null,16))}}),y=l({inheritAttrs:!1,__name:`VisuallyHiddenInput`,props:{name:{type:String,required:!0},value:{type:null,required:!0},checked:{type:Boolean,required:!1,default:void 0},required:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},feature:{type:String,required:!1,default:`fully-hidden`}},setup(n){let l=n,u=i(()=>typeof l.value==`object`&&Array.isArray(l.value)&&l.value.length===0&&l.required),d=i(()=>typeof l.value==`string`||typeof l.value==`number`||typeof l.value==`boolean`||l.value===null||l.value===void 0?[{name:l.name,value:l.value}]:typeof l.value==`object`&&Array.isArray(l.value)?l.value.flatMap((e,t)=>typeof e==`object`?Object.entries(e).map(([e,n])=>({name:`${l.name}[${t}][${e}]`,value:n})):{name:`${l.name}[${t}]`,value:e}):l.value!==null&&typeof l.value==`object`&&!Array.isArray(l.value)?Object.entries(l.value).map(([e,t])=>({name:`${l.name}[${e}]`,value:t})):[]);return(n,i)=>(t(),a(s,null,[o(` We render single input if it's required `),u.value?(t(),c(v,e({key:n.name},{...l,...n.$attrs},{name:n.name,value:n.value}),null,16,[`name`,`value`])):(t(!0),a(s,{key:1},r(d.value,r=>(t(),c(v,e({key:r.name},{ref_for:!0},{...l,...n.$attrs},{name:r.name,value:r.value}),null,16,[`name`,`value`]))),128))],2112))}});export{_ as a,h as i,p as n,g as r,y as t};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
import"./useFetchJson-BTB9doG4.js";import{t as e}from"./auth-DHyg2egq.js";export{e as useAuthStore};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
import"./useFetchJson-BTB9doG4.js";import"./Button-Dys5wjZc.js";import"./tv-uB0-NqWK.js";import"./auth-DHyg2egq.js";import{t as e}from"./router-DDV1eCGp.js";import"./settings-84EZt-NQ.js";export{e as default};

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +0,0 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/auth-O--VICRG.js","assets/auth-DHyg2egq.js","assets/vue.runtime.esm-bundler-BM5WPBHd.js"])))=>i.map(i=>d[i]);
var e=`modulepreload`,t=function(e){return`/`+e},n={};const r=function(r,i,a){let o=Promise.resolve();if(i&&i.length>0){let r=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}o=l(i.map(i=>{if(i=t(i,a),i in n)return;n[i]=!0;let o=i.endsWith(`.css`),s=o?`[rel="stylesheet"]`:``;if(a)for(let e=r.length-1;e>=0;e--){let t=r[e];if(t.href===i&&(!o||t.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${i}"]${s}`))return;let l=document.createElement(`link`);if(l.rel=o?`stylesheet`:e,o||(l.as=`script`),l.crossOrigin=``,l.href=i,c&&l.setAttribute(`nonce`,c),document.head.appendChild(l),o)return new Promise((e,t)=>{l.addEventListener(`load`,e),l.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${i}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(e=>{for(let t of e||[])t.status===`rejected`&&s(t.reason);return r().catch(s)})};async function i(e,t){let n=a(``,e),i=new Headers(t?.headers);i.has(`Content-Type`)||i.set(`Content-Type`,`application/json`);let o={...t,headers:i,credentials:`same-origin`};try{let e=await fetch(n,o);if(!(e.headers.get(`content-type`)??``).includes(`application/json`))throw{message:`this is not proper json format`};let t=await e.json();if(e.status===401){let{useAuthStore:e}=await r(async()=>{let{useAuthStore:e}=await import(`./auth-O--VICRG.js`);return{useAuthStore:e}},__vite__mapDeps([0,1,2])),i=e();if(await i.refreshAccessToken()){let e=await fetch(n,o);if(!(e.headers.get(`content-type`)??``).includes(`application/json`))throw{message:`this is not proper json format`};let t=await e.json();if(!e.ok)throw t;return t}throw i.logout(),t}if(!e.ok)throw t;return t}catch(e){throw e}}function a(...e){let t=e.filter(Boolean).join(`/`).replace(/\/{2,}/g,`/`);return t.startsWith(`/`)?t:`/${t}`}export{r as n,i as t};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
import{h as e}from"./usePortal-BgeZHop8.js";var t=[`Enter`,` `],n=[`ArrowDown`,`PageUp`,`Home`],r=[`ArrowUp`,`PageDown`,`End`];[...n,...r],[...t],[...t];function i(e){return e?`open`:`closed`}function a(t){let n=e();for(let r of t)if(r===n||(r.focus(),e()!==n))return}export{i as n,a as t};

View File

@@ -16,19 +16,19 @@
var pageName = "default"; var pageName = "default";
globalThis.appInit = []; globalThis.appInit = [];
</script> </script>
<script type="module" crossorigin src="/assets/index-DpkssS-Q.js"></script> <script type="module" crossorigin src="/assets/index-DkQbBNTz.js"></script>
<link rel="modulepreload" crossorigin href="/assets/vue.runtime.esm-bundler-BM5WPBHd.js"> <link rel="modulepreload" crossorigin href="/assets/vue.runtime.esm-bundler-BM5WPBHd.js">
<link rel="modulepreload" crossorigin href="/assets/useFetchJson-BTB9doG4.js"> <link rel="modulepreload" crossorigin href="/assets/useFetchJson-jOnQsk3s.js">
<link rel="modulepreload" crossorigin href="/assets/tv-uB0-NqWK.js"> <link rel="modulepreload" crossorigin href="/assets/tv-uB0-NqWK.js">
<link rel="modulepreload" crossorigin href="/assets/Button-Dys5wjZc.js"> <link rel="modulepreload" crossorigin href="/assets/Button-BXAyuyRY.js">
<link rel="modulepreload" crossorigin href="/assets/useForwardExpose-CEpqU5vT.js"> <link rel="modulepreload" crossorigin href="/assets/useForwardExpose-CEpqU5vT.js">
<link rel="modulepreload" crossorigin href="/assets/usePortal-BgeZHop8.js"> <link rel="modulepreload" crossorigin href="/assets/usePortal-BN0HgbYf.js">
<link rel="modulepreload" crossorigin href="/assets/esm-BmwkJimY.js"> <link rel="modulepreload" crossorigin href="/assets/esm-BOSevWwL.js">
<link rel="modulepreload" crossorigin href="/assets/settings-84EZt-NQ.js"> <link rel="modulepreload" crossorigin href="/assets/settings-CuKZNbpU.js">
<link rel="modulepreload" crossorigin href="/assets/auth-DHyg2egq.js"> <link rel="modulepreload" crossorigin href="/assets/auth-nMJSXbCC.js">
<link rel="modulepreload" crossorigin href="/assets/Collection-Dmox1UHc.js"> <link rel="modulepreload" crossorigin href="/assets/Collection-Dntc3bmH.js">
<link rel="modulepreload" crossorigin href="/assets/VisuallyHiddenInput-DPrwdEvl.js"> <link rel="modulepreload" crossorigin href="/assets/VisuallyHiddenInput-B1GXqDS_.js">
<link rel="modulepreload" crossorigin href="/assets/router-DDV1eCGp.js"> <link rel="modulepreload" crossorigin href="/assets/router-BBH257zw.js">
<link rel="stylesheet" crossorigin href="/assets/index-DLyy94LM.css"> <link rel="stylesheet" crossorigin href="/assets/index-DLyy94LM.css">
</head> </head>
<body> <body>

Binary file not shown.

View File

@@ -27,7 +27,7 @@ const authStore = useAuthStore()
<!-- Logout Button (only when authenticated) --> <!-- Logout Button (only when authenticated) -->
<button v-if="authStore.isAuthenticated" @click="authStore.logout()" <button v-if="authStore.isAuthenticated" @click="authStore.logout()"
class="px-3 py-1.5 text-sm font-medium text-black dark:text-white hover:text-black dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-600 rounded-lg transition-colors border border-(--border-light) dark:border-(--border-dark)"> class="px-3 py-1.5 text-sm font-medium text-black dark:text-white hover:text-black dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-600 rounded-lg transition-colors border border-(--border-light) dark:border-(--border-dark)">
Logout {{ $t('general.logout') }}
</button> </button>
</div> </div>
</div> </div>

View File

@@ -62,7 +62,7 @@ const PrivacyComponent = computed(() =>
<component :is="TermsComponent" /> <component :is="TermsComponent" />
</template> </template>
<template #footer> <template #footer>
<UButton @click="showTherms = false" class="mx-auto px-12">close</UButton> <UButton @click="showTherms = false" class="mx-auto px-12">{{ $t('general.close') }}</UButton>
</template> </template>
</UDrawer> </UDrawer>
<!-- PrivacyPolicyView --> <!-- PrivacyPolicyView -->
@@ -71,7 +71,7 @@ const PrivacyComponent = computed(() =>
<component :is="PrivacyComponent" /> <component :is="PrivacyComponent" />
</template> </template>
<template #footer> <template #footer>
<UButton @click="showPrivacy = false" class="mx-auto px-12">close</UButton> <UButton @click="showPrivacy = false" class="mx-auto px-12">{{ $t('general.close') }}</UButton>
</template> </template>
</UDrawer> </UDrawer>
<div class="h-[100vh] flex flex-col items-center justify-center px-4 sm:px-6 lg:px-8"> <div class="h-[100vh] flex flex-col items-center justify-center px-4 sm:px-6 lg:px-8">
@@ -120,7 +120,7 @@ const PrivacyComponent = computed(() =>
<!-- Divider --> <!-- Divider -->
<div class="flex items-center gap-3 my-1"> <div class="flex items-center gap-3 my-1">
<div class="flex-1 h-px bg-gray-200 dark:bg-gray-700" /> <div class="flex-1 h-px bg-gray-200 dark:bg-gray-700" />
<span class="text-xs text-gray-400 dark:text-gray-500">or</span> <span class="text-xs text-gray-400 dark:text-gray-500">{{ $t('general.or') }}</span>
<div class="flex-1 h-px bg-gray-200 dark:bg-gray-700" /> <div class="flex-1 h-px bg-gray-200 dark:bg-gray-700" />
</div> </div>

View File

@@ -14,11 +14,13 @@ import { getRepos, getYears, getQuarters, getIssues, type QuarterData, type Issu
import { useAuthStore } from '@/stores/auth' import { useAuthStore } from '@/stores/auth'
import { i18n } from '@/plugins/02_i18n' import { i18n } from '@/plugins/02_i18n'
import type { TableColumn } from '@nuxt/ui' import type { TableColumn } from '@nuxt/ui'
import { useI18n } from 'vue-i18n'
ChartJS.register(Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale) ChartJS.register(Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale)
const authStore = useAuthStore() const authStore = useAuthStore()
const { t } = useI18n()
const repos = ref<number[]>([]) const repos = ref<number[]>([])
const years = ref<number[]>([]) const years = ref<number[]>([])
const quarters = ref<QuarterData[]>([]) const quarters = ref<QuarterData[]>([])
@@ -47,7 +49,7 @@ async function loadData<T>(fetchFn: () => Promise<any>, target: Ref<T[]>, errorM
} }
} }
onMounted(() => loadData(() => getRepos(), repos, i18n.t('repo_chart.failed_to_load_repositories'))) onMounted(() => loadData(() => getRepos(), repos, t('repo_chart.failed_to_load_repositories')))
watch(selectedRepo, async (newRepo) => { watch(selectedRepo, async (newRepo) => {
selectedYear.value = null selectedYear.value = null
@@ -55,7 +57,7 @@ watch(selectedRepo, async (newRepo) => {
quarters.value = [] quarters.value = []
issues.value = [] issues.value = []
if (newRepo) { if (newRepo) {
await loadData(() => getYears(newRepo), years, i18n.t('repo_chart.failed_to_load_years')) await loadData(() => getYears(newRepo), years, t('repo_chart.failed_to_load_years'))
} }
}) })
@@ -63,7 +65,7 @@ watch(selectedYear, async (newYear) => {
selectedQuarter.value = null selectedQuarter.value = null
issues.value = [] issues.value = []
if (newYear && selectedRepo.value) { if (newYear && selectedRepo.value) {
await loadData(() => getQuarters(selectedRepo.value!, newYear), quarters, i18n.t('repo_chart.failed_to_load_quarters')) await loadData(() => getQuarters(selectedRepo.value!, newYear), quarters, t('repo_chart.failed_to_load_quarters'))
} }
}) })
@@ -91,7 +93,7 @@ async function loadIssues(repoID: number, year: number, quarterStr: string) {
issues.value = response.items || [] issues.value = response.items || []
totalItems.value = response.items_count || 0 totalItems.value = response.items_count || 0
} catch (e: any) { } catch (e: any) {
error.value = e?.message || i18n.t('repo_chart.failed_to_load_issues') error.value = e?.message || t('repo_chart.failed_to_load_issues')
} finally { } finally {
loading.value = false loading.value = false
} }
@@ -101,24 +103,36 @@ const chartData = computed(() => ({
labels: quarters.value.map((q) => q.quarter), labels: quarters.value.map((q) => q.quarter),
datasets: [ datasets: [
{ {
label: i18n.t('repo_chart.hours_worked'), label: t('repo_chart.hours_worked'),
backgroundColor: '#3b82f6', backgroundColor: '#3b82f6',
data: quarters.value.map((q) => q.time), data: quarters.value.map((q) => q.time),
}, },
], ],
})) }))
const chartOptions = { const chartOptions = computed(() => ({
responsive: true, responsive: true,
maintainAspectRatio: false, maintainAspectRatio: false,
onClick: (_event: any, elements: any[]) => {
if (elements.length > 0) {
const index = elements[0].index
const quarter = quarters.value[index]
if (quarter) {
selectedQuarter.value = quarter.quarter
}
}
},
plugins: { plugins: {
legend: { position: 'top' as const }, legend: { position: 'top' as const },
title: { display: true, text: i18n.t('repo_chart.work_by_quarter') }, title: { display: true, text: t('repo_chart.work_by_quarter') },
}, },
scales: { scales: {
y: { beginAtZero: true, title: { display: true, text: i18n.t('repo_chart.hours') } }, y: {
beginAtZero: true,
title: { display: true, text: t('repo_chart.hours') },
},
}, },
} }))
const hasData = computed(() => quarters.value.length > 0) const hasData = computed(() => quarters.value.length > 0)
const hasIssues = computed(() => issues.value.length > 0) const hasIssues = computed(() => issues.value.length > 0)
@@ -126,31 +140,27 @@ const hasIssues = computed(() => issues.value.length > 0)
const items = computed(() => repos.value.map(r => ({ value: r, label: `Repo ${r}` }))) const items = computed(() => repos.value.map(r => ({ value: r, label: `Repo ${r}` })))
const yearItems = computed(() => [ const yearItems = computed(() => [
{ value: null, label: i18n.t('repo_chart.select_a_year') }, { value: null, label: t('repo_chart.select_a_year') },
...years.value.map(y => ({ value: y, label: String(y) })) ...years.value.map(y => ({ value: y, label: String(y) }))
]) ])
const quarterItems = computed(() => [ const quarterItems = computed(() => [
{ value: null, label: i18n.t('repo_chart.all_quarters') }, { value: null, label: t('repo_chart.all_quarters') },
...quarters.value.map(q => ({ ...quarters.value.map(q => ({
value: q.quarter, value: q.quarter,
label: `${q.quarter} (${q.time.toFixed(1)}h)` label: `${q.quarter} (${q.time.toFixed(1)}h)`
})) }))
]) ])
const columns: TableColumn<IssueTimeSummary>[] = [ const columns = computed<TableColumn<IssueTimeSummary>[]>(() => [
{ {
accessorKey: 'IssueID', accessorKey: 'IssueID',
header: 'ID', header: 'ID'
}, },
{ {
accessorKey: 'IssueName', accessorKey: 'IssueName',
header: i18n.t('repo_chart.issue_name'), header: i18n.t('repo_chart.issue_name'),
}, },
// {
// accessorKey: 'Initials',
// header: i18n.t('repo_chart.user_initials'),
// },
{ {
accessorKey: 'CreatedDate', accessorKey: 'CreatedDate',
header: i18n.t('repo_chart.created_on'), header: i18n.t('repo_chart.created_on'),
@@ -159,29 +169,15 @@ const columns: TableColumn<IssueTimeSummary>[] = [
return date.toLocaleDateString(i18n.locale.value) return date.toLocaleDateString(i18n.locale.value)
} }
}, },
{
accessorKey: 'CreatedDate',
header: i18n.t('repo_chart.created_on'),
cell: ({ row }) => {
const date = new Date(row.getValue('CreatedDate'))
return date.toLocaleTimeString(i18n.locale.value)
}
},
{ {
accessorKey: 'TotalHoursSpent', accessorKey: 'TotalHoursSpent',
header: i18n.t('repo_chart.hours_spent'), header: i18n.t('repo_chart.hours_spent'),
meta: { meta: {
class: { class: { th: 'text-right', td: 'text-right font-medium' }
th: 'text-right',
td: 'text-right font-medium'
}
}, },
cell: ({ row }) => { cell: ({ row }) => `${row.getValue('TotalHoursSpent')}h`
const hours = row.getValue('TotalHoursSpent')
return `${hours}h`
}
}, },
] ])
</script> </script>
<template> <template>
@@ -211,14 +207,16 @@ const columns: TableColumn<IssueTimeSummary>[] = [
}}</label> }}</label>
<USelect v-model="selectedYear" :items="yearItems" <USelect v-model="selectedYear" :items="yearItems"
:disabled="loading || !selectedRepo || years.length === 0" :disabled="loading || !selectedRepo || years.length === 0"
:placeholder="$t('repo_chart.select_a_year')" class="dark:text-white text-black placeholder:text-(--placeholder)" /> :placeholder="$t('repo_chart.select_a_year')"
class="dark:text-white text-black placeholder:text-(--placeholder)" />
</div> </div>
<div class="flex flex-col min-w-[192px]"> <div class="flex flex-col min-w-[192px]">
<label class="mb-1 text-sm font-medium text-black dark:text-white">{{ $t('repo_chart.quarter') <label class="mb-1 text-sm font-medium text-black dark:text-white">{{ $t('repo_chart.quarter')
}}</label> }}</label>
<USelect v-model="selectedQuarter" :items="quarterItems" <USelect v-model="selectedQuarter" :items="quarterItems"
:disabled="loading || !selectedYear || quarters.length === 0" :disabled="loading || !selectedYear || quarters.length === 0"
:placeholder="$t('repo_chart.all_quarters')" class="dark:text-white text-black placeholder:text-(--placeholder)" /> :placeholder="$t('repo_chart.all_quarters')"
class="dark:text-white text-black placeholder:text-(--placeholder)" />
</div> </div>
</div> </div>

View File

@@ -27,6 +27,7 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
(1, 3, 300, 'back_to_sign_in', 'Powrót do logowania'), (1, 3, 300, 'back_to_sign_in', 'Powrót do logowania'),
(1, 3, 300, 'by_signing_in_you_agree_to_our', 'Logując się, zgadzasz się z naszymi'), (1, 3, 300, 'by_signing_in_you_agree_to_our', 'Logując się, zgadzasz się z naszymi'),
(1, 3, 300, 'check_your_email', 'Sprawdź swoją skrzynkę e-mail'), (1, 3, 300, 'check_your_email', 'Sprawdź swoją skrzynkę e-mail'),
(1, 3, 300, 'close', 'zamknij'),
(1, 3, 300, 'confirm_password', 'Potwierdź hasło'), (1, 3, 300, 'confirm_password', 'Potwierdź hasło'),
(1, 3, 300, 'confirm_your_new_password', 'Potwierdź swoje nowe hasło'), (1, 3, 300, 'confirm_your_new_password', 'Potwierdź swoje nowe hasło'),
(1, 3, 300, 'confirm_your_password', 'Potwierdź swoje hasło'), (1, 3, 300, 'confirm_your_password', 'Potwierdź swoje hasło'),
@@ -43,7 +44,9 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
(1, 3, 300, 'forgot_password', 'Zapomniałeś hasła'), (1, 3, 300, 'forgot_password', 'Zapomniałeś hasła'),
(1, 3, 300, 'i_agree_to_the', 'Zgadzam się z'), (1, 3, 300, 'i_agree_to_the', 'Zgadzam się z'),
(1, 3, 300, 'last_name', 'Nazwisko'), (1, 3, 300, 'last_name', 'Nazwisko'),
(1, 3, 300, 'logout', 'Wyloguj się'),
(1, 3, 300, 'new_password', 'Nowe hasło'), (1, 3, 300, 'new_password', 'Nowe hasło'),
(1, 3, 300, 'or', 'albo'),
(1, 3, 300, 'password', 'Hasło'), (1, 3, 300, 'password', 'Hasło'),
(1, 3, 300, 'password_reset_link_sent_notice', 'Jeśli konto z tym adresem e-mail istnieje, wysłaliśmy link do resetowania hasła. Sprawdź swoją skrzynkę odbiorczą'), (1, 3, 300, 'password_reset_link_sent_notice', 'Jeśli konto z tym adresem e-mail istnieje, wysłaliśmy link do resetowania hasła. Sprawdź swoją skrzynkę odbiorczą'),
(1, 3, 300, 'password_updated', 'Hasło zaktualizowane'), (1, 3, 300, 'password_updated', 'Hasło zaktualizowane'),
@@ -58,6 +61,7 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
(2, 3, 300, 'back_to_sign_in', 'Back to Sign In'), (2, 3, 300, 'back_to_sign_in', 'Back to Sign In'),
(2, 3, 300, 'by_signing_in_you_agree_to_our', 'By signing in, you agree to our terms'), (2, 3, 300, 'by_signing_in_you_agree_to_our', 'By signing in, you agree to our terms'),
(2, 3, 300, 'check_your_email', 'Check your email'), (2, 3, 300, 'check_your_email', 'Check your email'),
(2, 3, 300, 'close', 'close'),
(2, 3, 300, 'confirm_password', 'Confirm password'), (2, 3, 300, 'confirm_password', 'Confirm password'),
(2, 3, 300, 'confirm_your_new_password', 'Confirm your new password'), (2, 3, 300, 'confirm_your_new_password', 'Confirm your new password'),
(2, 3, 300, 'confirm_your_password', 'Confirm your password'), (2, 3, 300, 'confirm_your_password', 'Confirm your password'),
@@ -74,7 +78,9 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
(2, 3, 300, 'forgot_password', 'Forgot password'), (2, 3, 300, 'forgot_password', 'Forgot password'),
(2, 3, 300, 'i_agree_to_the', 'I agree to the'), (2, 3, 300, 'i_agree_to_the', 'I agree to the'),
(2, 3, 300, 'last_name', 'Last name'), (2, 3, 300, 'last_name', 'Last name'),
(2, 3, 300, 'logout', 'Logout'),
(2, 3, 300, 'new_password', 'New password'), (2, 3, 300, 'new_password', 'New password'),
(2, 3, 300, 'or', 'or'),
(2, 3, 300, 'password', 'Password'), (2, 3, 300, 'password', 'Password'),
(2, 3, 300, 'password_reset_link_sent_notice', 'If an account with that email exists, we have sent a password reset link. Please check your inbox.'), (2, 3, 300, 'password_reset_link_sent_notice', 'If an account with that email exists, we have sent a password reset link. Please check your inbox.'),
(2, 3, 300, 'password_updated', 'Password updated'), (2, 3, 300, 'password_updated', 'Password updated'),
@@ -89,6 +95,7 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
(3, 3, 300, 'back_to_sign_in', 'Zpět k přihlášení'), (3, 3, 300, 'back_to_sign_in', 'Zpět k přihlášení'),
(3, 3, 300, 'by_signing_in_you_agree_to_our', 'Přihlášením souhlasíte s našimi'), (3, 3, 300, 'by_signing_in_you_agree_to_our', 'Přihlášením souhlasíte s našimi'),
(3, 3, 300, 'check_your_email', 'Zkontrolujte svůj e-mail'), (3, 3, 300, 'check_your_email', 'Zkontrolujte svůj e-mail'),
(3, 3, 300, 'close', 'zavřít'),
(3, 3, 300, 'confirm_password', 'Potvrzení hesla'), (3, 3, 300, 'confirm_password', 'Potvrzení hesla'),
(3, 3, 300, 'confirm_your_new_password', 'Potvrďte své nové heslo'), (3, 3, 300, 'confirm_your_new_password', 'Potvrďte své nové heslo'),
(3, 3, 300, 'confirm_your_password', 'Potvrďte své heslo'), (3, 3, 300, 'confirm_your_password', 'Potvrďte své heslo'),
@@ -105,7 +112,9 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
(3, 3, 300, 'forgot_password', 'Zapomněli jste heslo'), (3, 3, 300, 'forgot_password', 'Zapomněli jste heslo'),
(3, 3, 300, 'i_agree_to_the', 'Souhlasím s'), (3, 3, 300, 'i_agree_to_the', 'Souhlasím s'),
(3, 3, 300, 'last_name', 'Příjmení'), (3, 3, 300, 'last_name', 'Příjmení'),
(3, 3, 300, 'logout', 'Odhlásit se'),
(3, 3, 300, 'new_password', 'Nové heslo'), (3, 3, 300, 'new_password', 'Nové heslo'),
(3, 3, 300, 'or', 'nebo'),
(3, 3, 300, 'password', 'Heslo'), (3, 3, 300, 'password', 'Heslo'),
(3, 3, 300, 'password_reset_link_sent_notice', 'Pokud účet s touto e-mailovou adresou existuje, poslali jsme odkaz pro obnovení hesla. Zkontrolujte svůj inbox.'), (3, 3, 300, 'password_reset_link_sent_notice', 'Pokud účet s touto e-mailovou adresou existuje, poslali jsme odkaz pro obnovení hesla. Zkontrolujte svůj inbox.'),
(3, 3, 300, 'password_updated', 'Heslo aktualizováno'), (3, 3, 300, 'password_updated', 'Heslo aktualizováno'),
@@ -237,7 +246,7 @@ INSERT INTO translations (lang_id, scope_id, component_id, "key", data) VALUES
(1, 3, 303, 'success_title', 'E-mail zweryfikowany!'), (1, 3, 303, 'success_title', 'E-mail zweryfikowany!'),
(1, 3, 303, 'verification_failed', 'Weryfikacja e-maila nie powiodła się'), (1, 3, 303, 'verification_failed', 'Weryfikacja e-maila nie powiodła się'),
(1, 3, 303, 'verifying', 'Sprawdzanie Twojego adresu e-mail...'), (1, 3, 303, 'verifying', 'Sprawdzanie Twojego adresu e-mail...'),
(2, 3, 303, 'already_registered', 'already registered?'), (2, 3, 303, 'already_registered', 'Already have an account?'),
(2, 3, 303, 'error_message', 'We could not verify your email.'), (2, 3, 303, 'error_message', 'We could not verify your email.'),
(2, 3, 303, 'error_title', 'Verification Failed'), (2, 3, 303, 'error_title', 'Verification Failed'),
(2, 3, 303, 'go_to_login', 'Go to Login'), (2, 3, 303, 'go_to_login', 'Go to Login'),

View File

@@ -270,6 +270,63 @@
} }
] ]
}, },
{
"key": "close",
"scope_id": 3,
"component_id": 300,
"lang_id": 1,
"data": "",
"locations": [
{
"file": "../bo/src/views/LoginView.vue",
"line": 7,
"column": 66
},
{
"file": "../bo/src/views/LoginView.vue",
"line": 16,
"column": 67
}
]
},
{
"key": "close",
"scope_id": 3,
"component_id": 300,
"lang_id": 2,
"data": "",
"locations": [
{
"file": "../bo/src/views/LoginView.vue",
"line": 7,
"column": 66
},
{
"file": "../bo/src/views/LoginView.vue",
"line": 16,
"column": 67
}
]
},
{
"key": "close",
"scope_id": 3,
"component_id": 300,
"lang_id": 3,
"data": "",
"locations": [
{
"file": "../bo/src/views/LoginView.vue",
"line": 7,
"column": 66
},
{
"file": "../bo/src/views/LoginView.vue",
"line": 16,
"column": 67
}
]
},
{ {
"key": "confirm_password", "key": "confirm_password",
"scope_id": 3, "scope_id": 3,
@@ -1092,6 +1149,48 @@
} }
] ]
}, },
{
"key": "logout",
"scope_id": 3,
"component_id": 300,
"lang_id": 1,
"data": "",
"locations": [
{
"file": "../bo/src/components/TopBar.vue",
"line": 22,
"column": 13
}
]
},
{
"key": "logout",
"scope_id": 3,
"component_id": 300,
"lang_id": 2,
"data": "",
"locations": [
{
"file": "../bo/src/components/TopBar.vue",
"line": 22,
"column": 13
}
]
},
{
"key": "logout",
"scope_id": 3,
"component_id": 300,
"lang_id": 3,
"data": "",
"locations": [
{
"file": "../bo/src/components/TopBar.vue",
"line": 22,
"column": 13
}
]
},
{ {
"key": "new_password", "key": "new_password",
"scope_id": 3, "scope_id": 3,
@@ -1134,6 +1233,48 @@
} }
] ]
}, },
{
"key": "or",
"scope_id": 3,
"component_id": 300,
"lang_id": 1,
"data": "",
"locations": [
{
"file": "../bo/src/views/LoginView.vue",
"line": 65,
"column": 64
}
]
},
{
"key": "or",
"scope_id": 3,
"component_id": 300,
"lang_id": 2,
"data": "",
"locations": [
{
"file": "../bo/src/views/LoginView.vue",
"line": 65,
"column": 64
}
]
},
{
"key": "or",
"scope_id": 3,
"component_id": 300,
"lang_id": 3,
"data": "",
"locations": [
{
"file": "../bo/src/views/LoginView.vue",
"line": 65,
"column": 64
}
]
},
{ {
"key": "password", "key": "password",
"scope_id": 3, "scope_id": 3,
@@ -1601,8 +1742,8 @@
}, },
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 134, "line": 148,
"column": 34 "column": 29
} }
] ]
}, },
@@ -1620,8 +1761,8 @@
}, },
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 134, "line": 148,
"column": 34 "column": 29
} }
] ]
}, },
@@ -1639,8 +1780,8 @@
}, },
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 134, "line": 148,
"column": 34 "column": 29
} }
] ]
}, },
@@ -1653,12 +1794,7 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 156, "line": 166,
"column": 24
},
{
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 164,
"column": 24 "column": 24
} }
] ]
@@ -1672,12 +1808,7 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 156, "line": 166,
"column": 24
},
{
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 164,
"column": 24 "column": 24
} }
] ]
@@ -1691,12 +1822,7 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 156, "line": 166,
"column": 24
},
{
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 164,
"column": 24 "column": 24
} }
] ]
@@ -1710,8 +1836,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 94, "line": 96,
"column": 44 "column": 39
} }
] ]
}, },
@@ -1724,8 +1850,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 94, "line": 96,
"column": 44 "column": 39
} }
] ]
}, },
@@ -1738,8 +1864,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 94, "line": 96,
"column": 44 "column": 39
} }
] ]
}, },
@@ -1752,8 +1878,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 66, "line": 68,
"column": 90 "column": 85
} }
] ]
}, },
@@ -1766,8 +1892,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 66, "line": 68,
"column": 90 "column": 85
} }
] ]
}, },
@@ -1780,8 +1906,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 66, "line": 68,
"column": 90 "column": 85
} }
] ]
}, },
@@ -1794,8 +1920,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 50, "line": 52,
"column": 58 "column": 53
} }
] ]
}, },
@@ -1808,8 +1934,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 50, "line": 52,
"column": 58 "column": 53
} }
] ]
}, },
@@ -1822,25 +1948,25 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 50, "line": 52,
"column": 53
}
]
},
{
"key": "failed_to_load_years",
"scope_id": 3,
"component_id": 302,
"lang_id": 1,
"data": "",
"locations": [
{
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 60,
"column": 58 "column": 58
} }
] ]
}, },
{
"key": "failed_to_load_years",
"scope_id": 3,
"component_id": 302,
"lang_id": 1,
"data": "",
"locations": [
{
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 58,
"column": 63
}
]
},
{ {
"key": "failed_to_load_years", "key": "failed_to_load_years",
"scope_id": 3, "scope_id": 3,
@@ -1850,8 +1976,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 58, "line": 60,
"column": 63 "column": 58
} }
] ]
}, },
@@ -1864,8 +1990,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 58, "line": 60,
"column": 63 "column": 58
} }
] ]
}, },
@@ -1878,8 +2004,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 119, "line": 132,
"column": 70 "column": 45
} }
] ]
}, },
@@ -1892,8 +2018,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 119, "line": 132,
"column": 70 "column": 45
} }
] ]
}, },
@@ -1906,8 +2032,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 119, "line": 132,
"column": 70 "column": 45
} }
] ]
}, },
@@ -1920,7 +2046,7 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 172, "line": 174,
"column": 24 "column": 24
} }
] ]
@@ -1934,7 +2060,7 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 172, "line": 174,
"column": 24 "column": 24
} }
] ]
@@ -1948,7 +2074,7 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 172, "line": 174,
"column": 24 "column": 24
} }
] ]
@@ -1962,8 +2088,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 104, "line": 106,
"column": 27 "column": 22
} }
] ]
}, },
@@ -1976,8 +2102,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 104, "line": 106,
"column": 27 "column": 22
} }
] ]
}, },
@@ -1990,8 +2116,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 104, "line": 106,
"column": 27 "column": 22
} }
] ]
}, },
@@ -2004,7 +2130,7 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 148, "line": 162,
"column": 24 "column": 24
} }
] ]
@@ -2018,7 +2144,7 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 148, "line": 162,
"column": 24 "column": 24
} }
] ]
@@ -2032,7 +2158,7 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 148, "line": 162,
"column": 24 "column": 24
} }
] ]
@@ -2046,7 +2172,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 51, "line": 52,
"column": 81 "column": 81
} }
] ]
@@ -2060,7 +2186,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 51, "line": 52,
"column": 81 "column": 81
} }
] ]
@@ -2074,7 +2200,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 51, "line": 52,
"column": 81 "column": 81
} }
] ]
@@ -2130,7 +2256,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 13, "line": 12,
"column": 17 "column": 17
} }
] ]
@@ -2144,7 +2270,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 13, "line": 12,
"column": 17 "column": 17
} }
] ]
@@ -2158,7 +2284,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 13, "line": 12,
"column": 17 "column": 17
} }
] ]
@@ -2172,7 +2298,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 70, "line": 71,
"column": 57 "column": 57
} }
] ]
@@ -2186,7 +2312,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 70, "line": 71,
"column": 57 "column": 57
} }
] ]
@@ -2200,7 +2326,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 70, "line": 71,
"column": 57 "column": 57
} }
] ]
@@ -2256,7 +2382,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 18, "line": 17,
"column": 88 "column": 88
} }
] ]
@@ -2270,7 +2396,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 18, "line": 17,
"column": 88 "column": 88
} }
] ]
@@ -2284,7 +2410,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 18, "line": 17,
"column": 88 "column": 88
} }
] ]
@@ -2340,7 +2466,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 21, "line": 20,
"column": 25 "column": 25
} }
] ]
@@ -2354,7 +2480,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 21, "line": 20,
"column": 25 "column": 25
} }
] ]
@@ -2368,7 +2494,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 21, "line": 20,
"column": 25 "column": 25
} }
] ]
@@ -2382,13 +2508,13 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 29, "line": 28,
"column": 25 "column": 25
}, },
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 129, "line": 143,
"column": 34 "column": 29
} }
] ]
}, },
@@ -2401,13 +2527,13 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 29, "line": 28,
"column": 25 "column": 25
}, },
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 129, "line": 143,
"column": 34 "column": 29
} }
] ]
}, },
@@ -2420,13 +2546,13 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 29, "line": 28,
"column": 25 "column": 25
}, },
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 129, "line": 143,
"column": 34 "column": 29
} }
] ]
}, },
@@ -2439,7 +2565,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 69, "line": 70,
"column": 52 "column": 52
} }
] ]
@@ -2453,7 +2579,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 69, "line": 70,
"column": 52 "column": 52
} }
] ]
@@ -2467,7 +2593,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 69, "line": 70,
"column": 52 "column": 52
} }
] ]
@@ -2481,7 +2607,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 67, "line": 68,
"column": 44 "column": 44
} }
] ]
@@ -2495,7 +2621,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 67, "line": 68,
"column": 44 "column": 44
} }
] ]
@@ -2509,7 +2635,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 67, "line": 68,
"column": 44 "column": 44
} }
] ]
@@ -2523,7 +2649,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 68, "line": 69,
"column": 49 "column": 49
} }
] ]
@@ -2537,7 +2663,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 68, "line": 69,
"column": 49 "column": 49
} }
] ]
@@ -2551,53 +2677,11 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 68, "line": 69,
"column": 49 "column": 49
} }
] ]
}, },
{
"key": "user_initials",
"scope_id": 3,
"component_id": 302,
"lang_id": 1,
"data": "",
"locations": [
{
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 152,
"column": 24
}
]
},
{
"key": "user_initials",
"scope_id": 3,
"component_id": 302,
"lang_id": 2,
"data": "",
"locations": [
{
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 152,
"column": 24
}
]
},
{
"key": "user_initials",
"scope_id": 3,
"component_id": 302,
"lang_id": 3,
"data": "",
"locations": [
{
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 152,
"column": 24
}
]
},
{ {
"key": "work_by_quarter", "key": "work_by_quarter",
"scope_id": 3, "scope_id": 3,
@@ -2607,8 +2691,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 116, "line": 127,
"column": 46 "column": 41
} }
] ]
}, },
@@ -2621,8 +2705,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 116, "line": 127,
"column": 46 "column": 41
} }
] ]
}, },
@@ -2635,8 +2719,8 @@
"locations": [ "locations": [
{ {
"file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue", "file": "/home/daniel/coding/work/timetracker/bo/src/views/RepoChartView.vue",
"line": 116, "line": 127,
"column": 46 "column": 41
} }
] ]
}, },
@@ -2649,7 +2733,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 42, "line": 43,
"column": 81 "column": 81
} }
] ]
@@ -2663,7 +2747,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 42, "line": 43,
"column": 81 "column": 81
} }
] ]
@@ -2677,7 +2761,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 42, "line": 43,
"column": 81 "column": 81
} }
] ]
@@ -2691,7 +2775,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 25, "line": 24,
"column": 88 "column": 88
} }
] ]
@@ -2705,7 +2789,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 25, "line": 24,
"column": 88 "column": 88
} }
] ]
@@ -2719,7 +2803,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 25, "line": 24,
"column": 88 "column": 88
} }
] ]
@@ -2946,7 +3030,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 62, "line": 63,
"column": 17 "column": 17
} }
] ]
@@ -2960,7 +3044,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 62, "line": 63,
"column": 17 "column": 17
} }
] ]
@@ -2974,7 +3058,7 @@
"locations": [ "locations": [
{ {
"file": "../bo/src/views/RepoChartView.vue", "file": "../bo/src/views/RepoChartView.vue",
"line": 62, "line": 63,
"column": 17 "column": 17
} }
] ]
@@ -3615,18 +3699,18 @@
], ],
"dynamic": [], "dynamic": [],
"summary": { "summary": {
"total_keys": 228, "total_keys": 234,
"static_keys": 76, "static_keys": 78,
"dynamic_keys": 0, "dynamic_keys": 0,
"by_component": { "by_component": {
"300": 31, "300": 34,
"301": 8, "301": 8,
"302": 26, "302": 25,
"303": 11 "303": 11
}, },
"by_component_name": { "by_component_name": {
"general": 31, "general": 34,
"repo_chart": 26, "repo_chart": 25,
"validate_error": 8, "validate_error": 8,
"verify_email": 11 "verify_email": 11
} }