|4~Qp4cU7iC(G4gtvp+Z_Zp)4Jtt+fW3CDi)kbT@8(<`G4kPLNc*=$uh$Tub>t6
zhkDBPEM9p8`#Sje>ir)}$U-!F`^^$->_oI0!GH}badtj&2KXhUh8?mjf)ShgxldtL
zsoZP&^mZ!&gVxS<+AL$UjkfR#@(ktd69oQMZfT0XII~_p@N+=%=;Ruk{p|_oDZ!c*
z;91H*{2@M$v2bqkKM?zrz}UY)B?TC+3CUpa{ehP$joctQm!KoVeJ%z{#82FqxFn&C
z2$%biPMF#H2&EC6^m^hTBuo(FDGMR9Smxd2yoIKq!>5+8SB9z`^#XR^;B0DQj&_v3
zXHm)sv9`Ii%$H@%j)=br{d?;tVb;!;f>2`k;Wg6kG%D@fzxB`WF>V)Z$Tz%aZkl5M
z>Pf91b=Nx)?^kZ|r;l{MLtTEoQef#Q(^URLldiWs`KjtVRU1dXsvc8&EH6N{-8HXr
z84?WIf-JCR9URVmp(NKcnBq57M_O(a$6Xa`NsOs&Oyr;z=zQ
zrRs3i^>`V^+Esyv<|8-d{
zSRXewL{{%#Cjv%8ywb2Hcjx%+(=8qyA><05sQP)W>ts6R%Bo_n3~nlJ%_fH(4$Hf|huI^{D~z}p)h!|cz3ki&x8
zDPjKzSVl~NqG8%5ly{O**$1`vKlVLHvLCn^bX*I@H5@-QO{P%qGe%_xXB(h|QFu
zVWqJf(_1LJkl7lFhDH`eIg8x(imY`80JPU=e)BDt^1w2BmJm7Ry
z3yISTcElH%vC{^iida89(ykDI?$B3O#j0ztH)?nk)KQLeP2L-l9SodCiq6zE#uUwAYDOTR2tD13Meiz3CDXD(!+G3r#SZme4V7LMkp0)RSZ=V)0ARKnL5X!wFeMjh?
zQo8ISE*^^a4broGieL*&A&fqDVQaWNn&ey*+IEdbLnDTfRD8#DZmEj}U~LE)XXNIe
z8n+l5%8=&g9b58PfP|{Q-|#%jer%H(Mz%Mcp#59VDV>t+Nn6wHSHbYKq9w`r?#Jqw
zeCnq<+uO75kr
z+F7}@N$J#<1ZvzTJ5TbuS4EtWJpQ68o$CYo=+2x&!XC9~fCPu=Gk2r}uK&zm`#vhP
zQDdoY7I2+V*_1|{45UH<(G}~Q@SXKq>?_#WQ(8M?z&dKWf9O-^v6Hd$k5+~vE=x$5
zM4TjS4bCQ2rJsMyUBIkE?y6mUpE=#I|AP}t9(Yx8w#H3y^l|Br$K0OHr#?(Js6Ox>
zw-C`^YKEV5`a0Yoh#aNLCLKi-t@GF>tAgc}Gga~3iZ8ynF>1YG*#<JI@u6|rw#
zG{Eu`qXE;pl3(J@E+5srNzECXD~A_X;KxB|on#=8?w}1ndyYoU-}SwlKQhCP3wP`v
zt6rnub5Q=rrca2zfv4y{qULlwgSMB$&x}$1#3+3Jf>d?QdqaEmJs})m0Jllp4Q)g5
zb7M^lo;KgRq~x6f9IQw!b_I!)y#N~|OT-%C4x&4;lz!Wit7_lmz=Yj4KkeApws};D%)nfHN6D6I&TbJj0;F!RkaKf@&ozF5h3_2EN
zT?(DLq6>v+_A;InxlWM7Iv`=+?*Waxj1p|#c;V(2d75xAmfAzaftXrmgH$=rOvNM#
zGu7s2cbKZ1R?xW=?CpyA&45?7@_iez&gq3A-*;t{V5a_qkFHR^V`Xx!3rnZjiJUnT
z7Odffraz%&>tAHi;yAOVNkXXC#U+HO-R5b8R@E~xWepF^G5JcH2Xl-Jm+oc6c9*qk(2UK=kBnur^{)Q*0q)4RyQx7K
zUR2H^pbrs0d$kw74${7DU$Lfq5$b+rfz$5w<>LI+)TWNVsdu95?qoaB{%*!}W|Kdr
zH8`bZx1ltTx*?@*-va3E9A(Q)iT~D&R((6k|L=@W?eZN1mC%w(r*0a9{flf5gsi_x
z^R2YEyUX#b?hQ}HEMeqK@%&++dzP^4={sWhF_txPNJ2)98OK8gQE+Ny7|A|aM_A@X
zYc}gOB}x7y7O{96Z#nM2_7J~P7|tPCJmWM5#D>4<>_B+n22Ld43Ql*#T)s=jI>u(g
zJjLAef-ZCbNJGA&myy(S9zr>mKeidPH~X?dKJzw7V|p=U6mfhtkvyYe^Uw$MrmDGG
z>d8|G7H7E51U@ZCeXERwWm3n=AU-eqYr3(JvY2DdQCxbq2H0Opj({*Qh%VjmjXSQN
zQq0fa3I!}(*cS4bn+fLAbp$f&g@Cb%L&945hq@H=vCG?X63ve%Y1>)@-R<=B^k(#i
zNxRrZNQZDPj}g+#s#Frp1qXIcZI?caIVISqujvYzYNJGe9!(Xo9H%rTZKy6l>$xq#
zh(@|01vS;$Z-LSK@gGg`R{6WIIj0myIo_L7GGXber^PHIeyu;sa`@fQ^7G5c31
z4eF+V%FTKseXnRf-O7KCWtPv@ftK%X@s@gThzk4&Xk`fKc584-li!+h2=5qP>?zBS
z{nqU0%9|~v&!x;;nMy;w6XJZc!}y3mu9a&AxB8ENAH$Bw^eGTRJZmd%C*5q+?~XuO
zit~JB%i^T)W|5xFM5A!eEeG$9Tij3Q4O7qB{?$sk$d7;U3d6LLOUos<@C0ARQ?|8z
z@bp73F|_t1)a*X14|~6)nhT@o25spL*s^lViv}hTAWM{_U~g0>7D_9pr25KV>bEb^Yhl@!#=JN>Ls~3L#_RA`YioF4Y_;rJ~6@UgpQITf8&rp&?HPJXg4uX#7
zEa%C0Di7@TT2!r2qa@|XOT>AM(V5B+IZmC25V-7*=eF`REQE;BO}v)JOA{5@TdhS~
zKbsZJ%vH(O;j)|V*W%9bKH+|T5XHsjhS&WmfPrpH#=lzt!wODMFhedkC1D&bd|}42
zai7Ut86qbhcp}?iKBaD^60Iad4-%`uu9-C|paqk;*(RGuL!zt9qfP-*r#O3X%vJk>
z$B4mu3v8f4)7w;L121vXv-At@eRc!f3rm70
z;B}Wyq*?u`Evm$IF7`PMR`D|^9zKp|3bejM+)(#6lINaNQXBd;4~^`Cq$%0-g}s|n$kkU@5_>@pmpl{fqoKe&X{poxv2)fhZaEj>O*5QRr*pge!pi=Ee7dKJ
zHK1dW{XQa&`o0(Gb5oUdnRL@RCo$S+N{c1Lw`B_566nR9$|SVuq1CauG~t7!imxk8
zy!6YKDE8xQC_w9Umot2%GX*KsWEdzT>*~V|CT#H2l?*p&PL3h-!G-iEby`4)L4%Yk
zov-{R!2qTz&_#)GjdxQi3*M!S_EVCG&Y4vVC64#kq+b+$Fs~EBLFddvn4wGqQ2un5f9DPj
zf_}7xWZ!8K^`q-L{K;A9-%k3Q%;|`T6Nxg~gn1RZ1=V3~0!4&&u
zlap?lY%RIWUwRSE`jjbzl8pU?m0^wQ*OCb#VBPn4ARVQy)yAc~hs+
z_-d;9WKt_~#hio$Yce@B4vok^*{v~tnTABWkD98F=W1A<5=VZqf4RmdTVTzryol`cyv`=d~cb5L!^x}PzLzcNL
z!S9@SK46Bu3!^*luCvA!{!v`k7e{%tvCppqBO@mHwH(qXcsP-uC1-?4Y+r%pP9KB(
zhYPZT6aqIKF2O{UH05kg7LGjA*LpE@Px9SlN`*3HZmV>JkR%jx$sq@xEQ~=;cPa5l
zdBaRf1s5f+pB5X^Xw|U9X{*Va%(_Lt<;alfu7oE>>qU<4dBLx89h((+PQd~sfFW2C
z9|s$>O@*rS#wteK{WWKygpvhysCn#e0RQ_?TFhZF
z`U@j?SAf#;I2zB&vF55yxK>^;kmAP*rOdP`sT6ib9(6f-O_Wt{<+nhZh%`cB%|OeU
zD+*GDCfU}YN>}L=e{<*pixAFPt!QsrMg9p)=GN`Lt;~$SJ->v*e()Q8wzlMo%_rHf
zk0#gZjyReoky_Wg8J=7}%YNn$JS%wx+b0ZTY~m2s*$EZX{-vwt$_Cg*V^sVs@_{)y&Qj0H>BV
z=E54QM{RFu&Q(rt5zg~~K&9;O>?ZrZa&|^?q(f74v&i^XZF6&TkVKKJDRu#23y2O>
zsWXeA7A4UczD`xlnD}9$y7hUk?a1Lva2;HZ%!l3PD!dnsDk<)K!(skOVy%^$ilj?W
zmb&QA{vKA(_PK5<3(K?YlX&krCHxoljVM
z&z~4Yum#&rqYD~&bDw`P3K#(1k6<2}d8glRu!*l1RtC8jQH&OmW6b${bqbCh&>|eg
zf0o+^y>*83G)Yo8R;bHyVEDU}tIO$X>hawEAs+msR7Zw(7e#uZ-
z4DZF0n!NtN;2yyV`LS(**
zDxz*h6igR(NN)VpD$Zl(ETh61XAfOH+sxxx0lYV~?>`%x1{%;R`hV5=pH`pV!)mWL
zYKu{85!G2WV=5*(7x*l~*!*q%Uxs=j`P!&1HiZe$?^hF}i#^1|Fq_pHsx
z#eg*`*;FBVtlyt*1?&N!M#O&!|Yd)GC1~
zfUtpKPt7u0&A`!!TE%C2o-$7cgRC7_VS=g(Aj#<9;#)xwK~gXhekSwpeBO`q(!5$H
z?HWZQBbymk6BB76PF{WLbGgz|U=%Hysu1D@TRr(Os`Y%B;DPggwR5IsSzk-Vj
z*Ii(#`ql28FVBgUU$&K2VBpDV>RQtb#pZE2J##CIPPpaLUDH{)=zXcA#D
zxSQ?BcBu;l0vCTbYHB-Fevv$@@iyQUsgqe5PRx#<*g!!ekmv(yc)Gmo@~9b(pb2E(
zARp}S7Auj*Kj6|CJJ{J>tkGn1u+ig%!uW=O7#LkcMWm_pup7ZfuY?O?*e=?U!5NZq
zrmL*^zNw8oR7Ac0Ha0t^Hw^!ks~!Prb5HiyN19m|o^^1h9YGI$A&4cr4&J)J>D??U
zCWo>i7ly2)A4PJP1k=yo0Q{%oETu#Y0L(lgiBZTatwV8^nLkVf*AIX5dc{gY+q5OH{RN|Hctpweto_bcm@Ek5?W5_4<=Pkj8B(9
z;U?K7gWa9&w}m`qIOe;M);WzN{%1FU`9V9VL69XUKe~s=1Lc`&BZaRKByrBYPucH#
z9HDoF0!iL46%%(IiD|V|=$BiYQ)czGt{=Tg8d~BKN||!*T{k{0DaqYar>QFj{fxcp
zqxgeDrn!-HG04&Dd-$@>P0U4E3C@t|%#!Fp&R@<3PhD1sdP*jP2MUX?n9O6Wk?>k3
zeFp>LBBv>zk&-{6|K-{K7!~9OUk9vRaT7DeZkJp3Y@P_mAnVmHL}vXxC;-z)y}qP^
zgeltzX*z?%dV(XYn&~&UuVso~D`Tjx>fl$G%Xo4?Qx(L1Pdn+P#_l`;Dct7-crzxzcO%nh|J{ka8y5
z7W>hhxV0&5K$B;ZPf0zTlS(Sj);&CoUnM#|%8DZJ)>dvF{HDV{nj@(=d>1Tgn0`NQ
z_%LwtO})yPzkTURTq;|2NsZuIM0TQvhwkz{X>_?wY9~}9*
za^sXk^U;9XXL*n4o6ff*$7YK`{^49;7BW((84ofTJABDu5&;I2+2&elSa
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
diff --git a/DB/initdb/02_sample_data.sql b/DB/initdb/02_sample_data.sql
index a0ee8f3..ea7fcf7 100755
--- a/DB/initdb/02_sample_data.sql
+++ b/DB/initdb/02_sample_data.sql
@@ -5,4 +5,4 @@ INSERT INTO "user_password" ("personal_nummer", "pass_hash") VALUES
(123, crypt('max_pass', gen_salt('bf')));
INSERT INTO "s_anwesenheit_typen" ("anwesenheit_id", "anwesenheit_name") VALUES (1, 'Büro');
-INSERT INTO "s_abwesenheit_typen" ("abwesenheit_id", "abwesenheit_name", "arbeitszeit_equivalent") VALUES (1, 'Urlaub', 10), (2, 'Krank', 10), (3, 'Kurzarbeit', 2);
+INSERT INTO "s_abwesenheit_typen" ("abwesenheit_id", "abwesenheit_name", "arbeitszeit_equivalent") VALUES (1, 'Urlaub', 100), (2, 'Krank', 100), (3, 'Kurzarbeit', -1), (4, 'Urlaub untertags', 50);
diff --git a/DocumentCreator/Dockerfile b/DocumentCreator/Dockerfile
index 1989fed..e132f75 100644
--- a/DocumentCreator/Dockerfile
+++ b/DocumentCreator/Dockerfile
@@ -1,6 +1,7 @@
FROM ghcr.io/typst/typst:0.14.0
-COPY ./templates ./templates
-COPY ./static ./static
+WORKDIR /app
+COPY ./templates /app/templates
+COPY ./static /app/static
ENTRYPOINT ["sh", "-c", "while true; do sleep 3600; done"]
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 18cb121..a07ce83 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,9 +14,42 @@ importers:
tailwindcss:
specifier: ^4.1.12
version: 4.1.12
+ devDependencies:
+ '@iconify-json/material-symbols-light':
+ specifier: ^1.2.33
+ version: 1.2.50
+ '@iconify/tailwind4':
+ specifier: ^1.0.6
+ version: 1.2.0(tailwindcss@4.1.12)
+ prettier:
+ specifier: ^3.6.2
+ version: 3.7.4
packages:
+ '@antfu/install-pkg@1.1.0':
+ resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
+
+ '@cyberalien/svg-utils@1.0.11':
+ resolution: {integrity: sha512-qEE9mnyI+avfGT3emKuRs3ucYkITeaV0Xi7VlYN41f+uGnZBecQP3jwz/AF437H9J4Q7qPClHKm4NiTYpNE6hA==}
+
+ '@iconify-json/material-symbols-light@1.2.50':
+ resolution: {integrity: sha512-Ehvmar2TPoYxmKgB5szeIMlmvA/mIc7gzUoQ5/AWFG+N6d4T53uCHwxnXFf1nXPWlpf0+cv26AXMJC6W5mkdrQ==}
+
+ '@iconify/tailwind4@1.2.0':
+ resolution: {integrity: sha512-+t7XqfojOB0zzZdd8gV7IQZGq1AaIHTlsxMVzagxYR0hAlJCLUD63o3iSlNKRMH3ZR7gZ8y5c9dJ7J431avRbA==}
+ peerDependencies:
+ tailwindcss: '>= 4.0.0'
+
+ '@iconify/tools@5.0.1':
+ resolution: {integrity: sha512-/znhBN9WIpJd9UtKhyEDfRKwNo8rrOy8dShF8bwSZ1i27ukTSHjeS6bmVK4tTYBYriwFhBf70JT6g8GIRwFvbw==}
+
+ '@iconify/types@2.0.0':
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+
+ '@iconify/utils@3.1.0':
+ resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==}
+
'@isaacs/fs-minipass@4.0.1':
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
engines: {node: '>=18.0.0'}
@@ -208,6 +241,14 @@ packages:
resolution: {integrity: sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==}
engines: {node: '>= 10'}
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
@@ -216,6 +257,32 @@ packages:
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
engines: {node: '>=18'}
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+ css-select@5.2.2:
+ resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
+
+ css-tree@2.2.1:
+ resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ css-tree@3.1.0:
+ resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
+ css-what@6.2.2:
+ resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
+ engines: {node: '>= 6'}
+
+ csso@5.0.5:
+ resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
detect-libc@1.0.3:
resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
engines: {node: '>=0.10'}
@@ -225,10 +292,30 @@ packages:
resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
engines: {node: '>=8'}
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
+ domutils@3.2.2:
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
enhanced-resolve@5.18.3:
resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
engines: {node: '>=10.13.0'}
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ fflate@0.8.2:
+ resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
+
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
@@ -319,6 +406,12 @@ packages:
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+ mdn-data@2.0.28:
+ resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+
+ mdn-data@2.12.2:
+ resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
+
micromatch@4.0.8:
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines: {node: '>=8.6'}
@@ -336,6 +429,13 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ mlly@1.8.0:
+ resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
+
+ modern-tar@0.7.3:
+ resolution: {integrity: sha512-4W79zekKGyYU4JXVmB78DOscMFaJth2gGhgfTl2alWE4rNe3nf4N2pqenQ0rEtIewrnD79M687Ouba3YGTLOvg==}
+ engines: {node: '>=18.0.0'}
+
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
@@ -343,6 +443,15 @@ packages:
node-addon-api@7.1.1:
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+ package-manager-detector@1.6.0:
+ resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
+
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -350,10 +459,26 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
+ prettier@3.7.4:
+ resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ sax@1.4.3:
+ resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==}
+
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ svgo@4.0.0:
+ resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==}
+ engines: {node: '>=16'}
+ hasBin: true
+
tailwindcss@4.1.12:
resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==}
@@ -365,16 +490,61 @@ packages:
resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
engines: {node: '>=18'}
+ tinyexec@1.0.2:
+ resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
+ engines: {node: '>=18'}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
+ ufo@1.6.1:
+ resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
+
yallist@5.0.0:
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
engines: {node: '>=18'}
snapshots:
+ '@antfu/install-pkg@1.1.0':
+ dependencies:
+ package-manager-detector: 1.6.0
+ tinyexec: 1.0.2
+
+ '@cyberalien/svg-utils@1.0.11':
+ dependencies:
+ '@iconify/types': 2.0.0
+
+ '@iconify-json/material-symbols-light@1.2.50':
+ dependencies:
+ '@iconify/types': 2.0.0
+
+ '@iconify/tailwind4@1.2.0(tailwindcss@4.1.12)':
+ dependencies:
+ '@iconify/tools': 5.0.1
+ '@iconify/types': 2.0.0
+ '@iconify/utils': 3.1.0
+ tailwindcss: 4.1.12
+
+ '@iconify/tools@5.0.1':
+ dependencies:
+ '@cyberalien/svg-utils': 1.0.11
+ '@iconify/types': 2.0.0
+ '@iconify/utils': 3.1.0
+ fflate: 0.8.2
+ modern-tar: 0.7.3
+ pathe: 2.0.3
+ svgo: 4.0.0
+
+ '@iconify/types@2.0.0': {}
+
+ '@iconify/utils@3.1.0':
+ dependencies:
+ '@antfu/install-pkg': 1.1.0
+ '@iconify/types': 2.0.0
+ mlly: 1.8.0
+
'@isaacs/fs-minipass@4.0.1':
dependencies:
minipass: 7.1.2
@@ -532,21 +702,75 @@ snapshots:
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.12
'@tailwindcss/oxide-win32-x64-msvc': 4.1.12
+ acorn@8.15.0: {}
+
+ boolbase@1.0.0: {}
+
braces@3.0.3:
dependencies:
fill-range: 7.1.1
chownr@3.0.0: {}
+ commander@11.1.0: {}
+
+ confbox@0.1.8: {}
+
+ css-select@5.2.2:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.2.2
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ nth-check: 2.1.1
+
+ css-tree@2.2.1:
+ dependencies:
+ mdn-data: 2.0.28
+ source-map-js: 1.2.1
+
+ css-tree@3.1.0:
+ dependencies:
+ mdn-data: 2.12.2
+ source-map-js: 1.2.1
+
+ css-what@6.2.2: {}
+
+ csso@5.0.5:
+ dependencies:
+ css-tree: 2.2.1
+
detect-libc@1.0.3: {}
detect-libc@2.0.4: {}
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@3.2.2:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
enhanced-resolve@5.18.3:
dependencies:
graceful-fs: 4.2.11
tapable: 2.2.2
+ entities@4.5.0: {}
+
+ fflate@0.8.2: {}
+
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
@@ -612,6 +836,10 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
+ mdn-data@2.0.28: {}
+
+ mdn-data@2.12.2: {}
+
micromatch@4.0.8:
dependencies:
braces: 3.0.3
@@ -625,16 +853,53 @@ snapshots:
mkdirp@3.0.1: {}
+ mlly@1.8.0:
+ dependencies:
+ acorn: 8.15.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.1
+
+ modern-tar@0.7.3: {}
+
mri@1.2.0: {}
node-addon-api@7.1.1: {}
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ package-manager-detector@1.6.0: {}
+
+ pathe@2.0.3: {}
+
picocolors@1.1.1: {}
picomatch@2.3.1: {}
+ pkg-types@1.3.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.8.0
+ pathe: 2.0.3
+
+ prettier@3.7.4: {}
+
+ sax@1.4.3: {}
+
source-map-js@1.2.1: {}
+ svgo@4.0.0:
+ dependencies:
+ commander: 11.1.0
+ css-select: 5.2.2
+ css-tree: 3.1.0
+ css-what: 6.2.2
+ csso: 5.0.5
+ picocolors: 1.1.1
+ sax: 1.4.3
+
tailwindcss@4.1.12: {}
tapable@2.2.2: {}
@@ -648,8 +913,12 @@ snapshots:
mkdirp: 3.0.1
yallist: 5.0.0
+ tinyexec@1.0.2: {}
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
+ ufo@1.6.1: {}
+
yallist@5.0.0: {}
--
2.49.1
From b7de3ade65ad27ddb446eae47bc5f37d13a363c3 Mon Sep 17 00:00:00 2001
From: tom_trgr
Date: Wed, 24 Dec 2025 23:20:57 +0100
Subject: [PATCH 31/35] fixed #65, #67
---
Backend/Makefile | 4 +-
Backend/endpoints/time.go | 27 +-
Backend/models/absence.go | 9 +
Backend/static/css/styles.css | 1278 +--------------------
Backend/templates/reportPage.templ | 124 +-
Backend/templates/reportPage_templ.go | 477 +++++++-
Backend/templates/teamComponents.templ | 120 +-
Backend/templates/teamComponents_templ.go | 532 +--------
Backend/templates/timeComponents.templ | 4 +-
Backend/templates/timeComponents_templ.go | 4 +-
Backend/templates/timePage.templ | 44 +-
Backend/templates/timePage_templ.go | 165 ++-
DB/initdb/03_create_user.sh | 4 +
13 files changed, 777 insertions(+), 2015 deletions(-)
diff --git a/Backend/Makefile b/Backend/Makefile
index 53655ef..08eeb44 100644
--- a/Backend/Makefile
+++ b/Backend/Makefile
@@ -12,5 +12,5 @@ live:
live/templ:
templ generate --watch --proxy="http://localhost:8080" --cmd="go run ." --open-browser=false
-live/tailwind:
- npx --yes tailwindcss -i ./input.css -o ./assets/styles.css --minify --watch
+live/tailwindcss:
+ npx --yes tailwindcss -i ./src/main.css -o ./static/css/styles.css --minify --watch
diff --git a/Backend/endpoints/time.go b/Backend/endpoints/time.go
index 15a6375..1f7985e 100644
--- a/Backend/endpoints/time.go
+++ b/Backend/endpoints/time.go
@@ -37,8 +37,18 @@ func AbsencHandler(w http.ResponseWriter, r *http.Request) {
helper.SetCors(w)
switch r.Method {
case http.MethodPost:
- err := updateAbsence(r)
+ r.ParseForm()
+ var err error
+ switch r.FormValue("action") {
+ case "insert":
+ err = updateAbsence(r)
+ case "delete":
+ err = deleteAbsence(r)
+ default:
+ slog.Warn("No action found!")
+ }
if err != nil {
+ slog.Warn("Error handling absence route ", "error", err)
http.Error(w, "Internal error", http.StatusInternalServerError)
return
}
@@ -104,6 +114,21 @@ func getBookings(w http.ResponseWriter, r *http.Request) {
templates.TimePage([]models.WorkDay{}, lastSub).Render(ctx, w)
}
+func deleteAbsence(r *http.Request) error {
+ r.ParseForm()
+ pp := paramParser.New(r.Form)
+ counterId, err := pp.ParseInt("aw_id")
+
+ if err != nil {
+ return err
+ }
+ absence, err := models.GetAbsenceById(counterId)
+ if err != nil {
+ return err
+ }
+ return absence.Delete()
+}
+
func updateBooking(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
pp := paramParser.New(r.Form)
diff --git a/Backend/models/absence.go b/Backend/models/absence.go
index 8b7e789..0f1f03b 100644
--- a/Backend/models/absence.go
+++ b/Backend/models/absence.go
@@ -294,3 +294,12 @@ func GetAbsenceTypeById(absenceTypeId int8) (AbsenceType, error) {
}
return absenceType, nil
}
+
+func (a *Absence) Delete() error {
+ qStr, err := DB.Prepare("DELETE from abwesenheit WHERE counter_id = $1;")
+ if err != nil {
+ return err
+ }
+ _, err = qStr.Exec(a.CounterId)
+ return err
+}
diff --git a/Backend/static/css/styles.css b/Backend/static/css/styles.css
index ee0ad93..c5dc9bd 100644
--- a/Backend/static/css/styles.css
+++ b/Backend/static/css/styles.css
@@ -1,1278 +1,2 @@
/*! tailwindcss v4.1.12 | MIT License | https://tailwindcss.com */
-@layer properties;
-@layer theme, base, components, utilities;
-@layer theme {
- :root, :host {
- --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
- "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
- "Courier New", monospace;
- --color-red-500: oklch(63.7% 0.237 25.331);
- --color-red-600: oklch(57.7% 0.245 27.325);
- --color-red-700: oklch(50.5% 0.213 27.518);
- --color-orange-500: oklch(70.5% 0.213 47.604);
- --color-purple-600: oklch(55.8% 0.288 302.321);
- --color-slate-300: oklch(86.9% 0.022 252.894);
- --color-slate-600: oklch(44.6% 0.043 257.281);
- --color-slate-700: oklch(37.2% 0.044 257.287);
- --color-slate-800: oklch(27.9% 0.041 260.031);
- --color-neutral-100: oklch(97% 0 0);
- --color-neutral-200: oklch(92.2% 0 0);
- --color-neutral-300: oklch(87% 0 0);
- --color-neutral-400: oklch(70.8% 0 0);
- --color-neutral-500: oklch(55.6% 0 0);
- --color-neutral-600: oklch(43.9% 0 0);
- --color-neutral-700: oklch(37.1% 0 0);
- --color-neutral-800: oklch(26.9% 0 0);
- --color-black: #000;
- --color-white: #fff;
- --spacing: 0.25rem;
- --text-sm: 0.875rem;
- --text-sm--line-height: calc(1.25 / 0.875);
- --text-xl: 1.25rem;
- --text-xl--line-height: calc(1.75 / 1.25);
- --text-2xl: 1.5rem;
- --text-2xl--line-height: calc(2 / 1.5);
- --font-weight-bold: 700;
- --radius-md: 0.375rem;
- --default-transition-duration: 150ms;
- --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- --default-font-family: var(--font-sans);
- --default-mono-font-family: var(--font-mono);
- --color-accent: #0eaf23;
- }
-}
-@layer base {
- *, ::after, ::before, ::backdrop, ::file-selector-button {
- box-sizing: border-box;
- margin: 0;
- padding: 0;
- border: 0 solid;
- }
- html, :host {
- line-height: 1.5;
- -webkit-text-size-adjust: 100%;
- tab-size: 4;
- font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
- font-feature-settings: var(--default-font-feature-settings, normal);
- font-variation-settings: var(--default-font-variation-settings, normal);
- -webkit-tap-highlight-color: transparent;
- }
- hr {
- height: 0;
- color: inherit;
- border-top-width: 1px;
- }
- abbr:where([title]) {
- -webkit-text-decoration: underline dotted;
- text-decoration: underline dotted;
- }
- h1, h2, h3, h4, h5, h6 {
- font-size: inherit;
- font-weight: inherit;
- }
- a {
- color: inherit;
- -webkit-text-decoration: inherit;
- text-decoration: inherit;
- }
- b, strong {
- font-weight: bolder;
- }
- code, kbd, samp, pre {
- font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
- font-feature-settings: var(--default-mono-font-feature-settings, normal);
- font-variation-settings: var(--default-mono-font-variation-settings, normal);
- font-size: 1em;
- }
- small {
- font-size: 80%;
- }
- sub, sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
- }
- sub {
- bottom: -0.25em;
- }
- sup {
- top: -0.5em;
- }
- table {
- text-indent: 0;
- border-color: inherit;
- border-collapse: collapse;
- }
- :-moz-focusring {
- outline: auto;
- }
- progress {
- vertical-align: baseline;
- }
- summary {
- display: list-item;
- }
- ol, ul, menu {
- list-style: none;
- }
- img, svg, video, canvas, audio, iframe, embed, object {
- display: block;
- vertical-align: middle;
- }
- img, video {
- max-width: 100%;
- height: auto;
- }
- button, input, select, optgroup, textarea, ::file-selector-button {
- font: inherit;
- font-feature-settings: inherit;
- font-variation-settings: inherit;
- letter-spacing: inherit;
- color: inherit;
- border-radius: 0;
- background-color: transparent;
- opacity: 1;
- }
- :where(select:is([multiple], [size])) optgroup {
- font-weight: bolder;
- }
- :where(select:is([multiple], [size])) optgroup option {
- padding-inline-start: 20px;
- }
- ::file-selector-button {
- margin-inline-end: 4px;
- }
- ::placeholder {
- opacity: 1;
- }
- @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
- ::placeholder {
- color: currentcolor;
- @supports (color: color-mix(in lab, red, red)) {
- color: color-mix(in oklab, currentcolor 50%, transparent);
- }
- }
- }
- textarea {
- resize: vertical;
- }
- ::-webkit-search-decoration {
- -webkit-appearance: none;
- }
- ::-webkit-date-and-time-value {
- min-height: 1lh;
- text-align: inherit;
- }
- ::-webkit-datetime-edit {
- display: inline-flex;
- }
- ::-webkit-datetime-edit-fields-wrapper {
- padding: 0;
- }
- ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
- padding-block: 0;
- }
- ::-webkit-calendar-picker-indicator {
- line-height: 1;
- }
- :-moz-ui-invalid {
- box-shadow: none;
- }
- button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
- appearance: button;
- }
- ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
- height: auto;
- }
- [hidden]:where(:not([hidden="until-found"])) {
- display: none !important;
- }
-}
-@layer utilities {
- .\@container {
- container-type: inline-size;
- }
- .absolute {
- position: absolute;
- }
- .relative {
- position: relative;
- }
- .top-1 {
- top: calc(var(--spacing) * 1);
- }
- .top-1\/2 {
- top: calc(1/2 * 100%);
- }
- .top-2 {
- top: calc(var(--spacing) * 2);
- }
- .top-2\.5 {
- top: calc(var(--spacing) * 2.5);
- }
- .top-\[0\.125rem\] {
- top: 0.125rem;
- }
- .right-1 {
- right: calc(var(--spacing) * 1);
- }
- .right-2 {
- right: calc(var(--spacing) * 2);
- }
- .right-2\.5 {
- right: calc(var(--spacing) * 2.5);
- }
- .left-1 {
- left: calc(var(--spacing) * 1);
- }
- .left-1\/2 {
- left: calc(1/2 * 100%);
- }
- .col-span-2 {
- grid-column: span 2 / span 2;
- }
- .col-span-3 {
- grid-column: span 3 / span 3;
- }
- .col-span-full {
- grid-column: 1 / -1;
- }
- .mx-auto {
- margin-inline: auto;
- }
- .-my-1 {
- margin-block: calc(var(--spacing) * -1);
- }
- .mt-1 {
- margin-top: calc(var(--spacing) * 1);
- }
- .mb-1 {
- margin-bottom: calc(var(--spacing) * 1);
- }
- .mb-2 {
- margin-bottom: calc(var(--spacing) * 2);
- }
- .ml-1 {
- margin-left: calc(var(--spacing) * 1);
- }
- .ml-2 {
- margin-left: calc(var(--spacing) * 2);
- }
- .icon-\[material-symbols-light--cancel-outline\] {
- display: inline-block;
- width: 1.25em;
- height: 1.25em;
- background-color: currentColor;
- -webkit-mask-image: var(--svg);
- mask-image: var(--svg);
- -webkit-mask-repeat: no-repeat;
- mask-repeat: no-repeat;
- -webkit-mask-size: 100% 100%;
- mask-size: 100% 100%;
- --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m8.4 16.308l3.6-3.6l3.6 3.6l.708-.708l-3.6-3.6l3.6-3.6l-.708-.708l-3.6 3.6l-3.6-3.6l-.708.708l3.6 3.6l-3.6 3.6zM12.003 21q-1.866 0-3.51-.708q-1.643-.709-2.859-1.924t-1.925-2.856T3 12.003t.709-3.51Q4.417 6.85 5.63 5.634t2.857-1.925T11.997 3t3.51.709q1.643.708 2.859 1.922t1.925 2.857t.709 3.509t-.708 3.51t-1.924 2.859t-2.856 1.925t-3.509.709M12 20q3.35 0 5.675-2.325T20 12t-2.325-5.675T12 4T6.325 6.325T4 12t2.325 5.675T12 20m0-8'/%3E%3C/svg%3E");
- }
- .icon-\[material-symbols-light--check-circle-outline\] {
- display: inline-block;
- width: 1.25em;
- height: 1.25em;
- background-color: currentColor;
- -webkit-mask-image: var(--svg);
- mask-image: var(--svg);
- -webkit-mask-repeat: no-repeat;
- mask-repeat: no-repeat;
- -webkit-mask-size: 100% 100%;
- mask-size: 100% 100%;
- --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m10.562 15.908l6.396-6.396l-.708-.708l-5.688 5.688l-2.85-2.85l-.708.708zM12.003 21q-1.866 0-3.51-.708q-1.643-.709-2.859-1.924t-1.925-2.856T3 12.003t.709-3.51Q4.417 6.85 5.63 5.634t2.857-1.925T11.997 3t3.51.709q1.643.708 2.859 1.922t1.925 2.857t.709 3.509t-.708 3.51t-1.924 2.859t-2.856 1.925t-3.509.709M12 20q3.35 0 5.675-2.325T20 12t-2.325-5.675T12 4T6.325 6.325T4 12t2.325 5.675T12 20m0-8'/%3E%3C/svg%3E");
- }
- .icon-\[material-symbols-light--circle-outline\] {
- display: inline-block;
- width: 1.25em;
- height: 1.25em;
- background-color: currentColor;
- -webkit-mask-image: var(--svg);
- mask-image: var(--svg);
- -webkit-mask-repeat: no-repeat;
- mask-repeat: no-repeat;
- -webkit-mask-size: 100% 100%;
- mask-size: 100% 100%;
- --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12.003 21q-1.866 0-3.51-.708q-1.643-.709-2.859-1.924t-1.925-2.856T3 12.003t.709-3.51Q4.417 6.85 5.63 5.634t2.857-1.925T11.997 3t3.51.709q1.643.708 2.859 1.922t1.925 2.857t.709 3.509t-.708 3.51t-1.924 2.859t-2.856 1.925t-3.509.709M12 20q3.35 0 5.675-2.325T20 12t-2.325-5.675T12 4T6.325 6.325T4 12t2.325 5.675T12 20m0-8'/%3E%3C/svg%3E");
- }
- .icon-\[material-symbols-light--delete-outline\] {
- display: inline-block;
- width: 1.25em;
- height: 1.25em;
- background-color: currentColor;
- -webkit-mask-image: var(--svg);
- mask-image: var(--svg);
- -webkit-mask-repeat: no-repeat;
- mask-repeat: no-repeat;
- -webkit-mask-size: 100% 100%;
- mask-size: 100% 100%;
- --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M7.616 20q-.672 0-1.144-.472T6 18.385V6H5V5h4v-.77h6V5h4v1h-1v12.385q0 .69-.462 1.153T16.384 20zM17 6H7v12.385q0 .269.173.442t.443.173h8.769q.23 0 .423-.192t.192-.424zM9.808 17h1V8h-1zm3.384 0h1V8h-1zM7 6v13z'/%3E%3C/svg%3E");
- }
- .icon-\[material-symbols-light--more-time\] {
- display: inline-block;
- width: 1.25em;
- height: 1.25em;
- background-color: currentColor;
- -webkit-mask-image: var(--svg);
- mask-image: var(--svg);
- -webkit-mask-repeat: no-repeat;
- mask-repeat: no-repeat;
- -webkit-mask-size: 100% 100%;
- mask-size: 100% 100%;
- --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M11.003 20q-1.666 0-3.123-.622t-2.545-1.71t-1.712-2.544T3 12.003t.622-3.123t1.711-2.546q1.09-1.089 2.545-1.711T11 4q.525 0 1.013.063T13 4.25V5.3q-.5-.15-.987-.225T11 5Q8.089 5 6.044 7.044T4 12t2.044 4.956T11 19t4.956-2.044T18 11.996q0-.271-.025-.554t-.094-.557h1.011q.05.236.08.538q.028.302.028.577q0 1.667-.622 3.122t-1.71 2.545q-1.089 1.088-2.544 1.71q-1.455.623-3.121.623m3.143-4.146L10.5 12.208V7h1v4.792l3.354 3.354zM18 8.884v-3h-3v-1h3v-3h1v3h3v1h-3v3z'/%3E%3C/svg%3E");
- }
- .icon-\[material-symbols-light--motion-photos-paused-outline\] {
- display: inline-block;
- width: 1.25em;
- height: 1.25em;
- background-color: currentColor;
- -webkit-mask-image: var(--svg);
- mask-image: var(--svg);
- -webkit-mask-repeat: no-repeat;
- mask-repeat: no-repeat;
- -webkit-mask-size: 100% 100%;
- mask-size: 100% 100%;
- --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M9.808 14.616h1V9.385h-1zm3.384 0h1V9.385h-1zM12.003 21q-1.866 0-3.51-.705q-1.643-.706-2.859-1.915t-1.925-2.843T3 12.039q0-.905.167-1.778t.497-1.713l.78.78q-.219.65-.331 1.32T4 12q0 3.35 2.325 5.675T12 20t5.675-2.325T20 12t-2.325-5.675T12 4q-.675 0-1.332.112t-1.3.332l-.776-.775q.789-.315 1.606-.492T11.885 3q1.887 0 3.546.701t2.894 1.926t1.955 2.866t.72 3.505t-.708 3.509t-1.924 2.859t-2.856 1.925t-3.509.709M5.923 6.808q-.356 0-.62-.265q-.264-.264-.264-.62t.264-.62t.62-.264t.62.264t.265.62t-.265.62t-.62.265M12 12'/%3E%3C/svg%3E");
- }
- .icon-\[material-symbols-light--schedule-outline\] {
- display: inline-block;
- width: 1.25em;
- height: 1.25em;
- background-color: currentColor;
- -webkit-mask-image: var(--svg);
- mask-image: var(--svg);
- -webkit-mask-repeat: no-repeat;
- mask-repeat: no-repeat;
- -webkit-mask-size: 100% 100%;
- mask-size: 100% 100%;
- --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m15.646 16.354l.708-.708l-3.854-3.854V7h-1v5.208zM12.003 21q-1.866 0-3.51-.708q-1.643-.709-2.859-1.924t-1.925-2.856T3 12.003t.709-3.51Q4.417 6.85 5.63 5.634t2.857-1.925T11.997 3t3.51.709q1.643.708 2.859 1.922t1.925 2.857t.709 3.509t-.708 3.51t-1.924 2.859t-2.856 1.925t-3.509.709M12 20q3.325 0 5.663-2.337T20 12t-2.337-5.663T12 4T6.337 6.338T4 12t2.338 5.663T12 20'/%3E%3C/svg%3E");
- }
- .block {
- display: block;
- }
- .flex {
- display: flex;
- }
- .grid {
- display: grid;
- }
- .hidden {
- display: none;
- }
- .inline {
- display: inline;
- }
- .inline-flex {
- display: inline-flex;
- }
- .table {
- display: table;
- }
- .size-2 {
- width: calc(var(--spacing) * 2);
- height: calc(var(--spacing) * 2);
- }
- .size-4 {
- width: calc(var(--spacing) * 4);
- height: calc(var(--spacing) * 4);
- }
- .size-5 {
- width: calc(var(--spacing) * 5);
- height: calc(var(--spacing) * 5);
- }
- .h-2 {
- height: calc(var(--spacing) * 2);
- }
- .h-3 {
- height: calc(var(--spacing) * 3);
- }
- .h-3\.5 {
- height: calc(var(--spacing) * 3.5);
- }
- .h-4 {
- height: calc(var(--spacing) * 4);
- }
- .h-5 {
- height: calc(var(--spacing) * 5);
- }
- .h-8 {
- height: calc(var(--spacing) * 8);
- }
- .h-\[100vh\] {
- height: 100vh;
- }
- .h-full {
- height: 100%;
- }
- .w-2 {
- width: calc(var(--spacing) * 2);
- }
- .w-3 {
- width: calc(var(--spacing) * 3);
- }
- .w-3\.5 {
- width: calc(var(--spacing) * 3.5);
- }
- .w-4 {
- width: calc(var(--spacing) * 4);
- }
- .w-5 {
- width: calc(var(--spacing) * 5);
- }
- .w-9 {
- width: calc(var(--spacing) * 9);
- }
- .w-9\/10 {
- width: calc(9/10 * 100%);
- }
- .w-\[2px\] {
- width: 2px;
- }
- .w-auto {
- width: auto;
- }
- .w-full {
- width: 100%;
- }
- .flex-shrink {
- flex-shrink: 1;
- }
- .flex-shrink-0 {
- flex-shrink: 0;
- }
- .flex-grow {
- flex-grow: 1;
- }
- .grow-0 {
- flex-grow: 0;
- }
- .grow-1 {
- flex-grow: 1;
- }
- .basis-\[content\] {
- flex-basis: content;
- }
- .border-collapse {
- border-collapse: collapse;
- }
- .-translate-x-1 {
- --tw-translate-x: calc(var(--spacing) * -1);
- translate: var(--tw-translate-x) var(--tw-translate-y);
- }
- .-translate-x-1\/2 {
- --tw-translate-x: calc(calc(1/2 * 100%) * -1);
- translate: var(--tw-translate-x) var(--tw-translate-y);
- }
- .-translate-y-1 {
- --tw-translate-y: calc(var(--spacing) * -1);
- translate: var(--tw-translate-x) var(--tw-translate-y);
- }
- .-translate-y-1\/2 {
- --tw-translate-y: calc(calc(1/2 * 100%) * -1);
- translate: var(--tw-translate-x) var(--tw-translate-y);
- }
- .transform {
- transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
- }
- .cursor-pointer {
- cursor: pointer;
- }
- .resize {
- resize: both;
- }
- .scroll-m-2 {
- scroll-margin: calc(var(--spacing) * 2);
- }
- .appearance-none {
- appearance: none;
- }
- .break-after-page {
- break-after: page;
- }
- .auto-rows-min {
- grid-auto-rows: min-content;
- }
- .grid-cols-2 {
- grid-template-columns: repeat(2, minmax(0, 1fr));
- }
- .grid-cols-5 {
- grid-template-columns: repeat(5, minmax(0, 1fr));
- }
- .grid-cols-\[3fr_2fr_2fr_2fr_3fr_3fr_3fr\] {
- grid-template-columns: 3fr 2fr 2fr 2fr 3fr 3fr 3fr;
- }
- .grid-cols-subgrid {
- grid-template-columns: subgrid;
- }
- .grid-rows-6 {
- grid-template-rows: repeat(6, minmax(0, 1fr));
- }
- .flex-col {
- flex-direction: column;
- }
- .flex-row {
- flex-direction: row;
- }
- .content-baseline {
- align-content: baseline;
- }
- .content-end {
- align-content: flex-end;
- }
- .items-center {
- align-items: center;
- }
- .items-end {
- align-items: flex-end;
- }
- .justify-around {
- justify-content: space-around;
- }
- .justify-between {
- justify-content: space-between;
- }
- .justify-center {
- justify-content: center;
- }
- .gap-2 {
- gap: calc(var(--spacing) * 2);
- }
- .gap-4 {
- gap: calc(var(--spacing) * 4);
- }
- .divide-x-1 {
- :where(& > :not(:last-child)) {
- --tw-divide-x-reverse: 0;
- border-inline-style: var(--tw-border-style);
- border-inline-start-width: calc(1px * var(--tw-divide-x-reverse));
- border-inline-end-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
- }
- }
- .divide-y-1 {
- :where(& > :not(:last-child)) {
- --tw-divide-y-reverse: 0;
- border-bottom-style: var(--tw-border-style);
- border-top-style: var(--tw-border-style);
- border-top-width: calc(1px * var(--tw-divide-y-reverse));
- border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
- }
- }
- .divide-neutral-300 {
- :where(& > :not(:last-child)) {
- border-color: var(--color-neutral-300);
- }
- }
- .justify-self-end {
- justify-self: flex-end;
- }
- .overflow-hidden {
- overflow: hidden;
- }
- .rounded {
- border-radius: 0.25rem;
- }
- .rounded-full {
- border-radius: calc(infinity * 1px);
- }
- .rounded-md {
- border-radius: var(--radius-md);
- }
- .rounded-none {
- border-radius: 0;
- }
- .border {
- border-style: var(--tw-border-style);
- border-width: 1px;
- }
- .border-0 {
- border-style: var(--tw-border-style);
- border-width: 0px;
- }
- .border-r-0 {
- border-right-style: var(--tw-border-style);
- border-right-width: 0px;
- }
- .border-r-1 {
- border-right-style: var(--tw-border-style);
- border-right-width: 1px;
- }
- .border-b-0 {
- border-bottom-style: var(--tw-border-style);
- border-bottom-width: 0px;
- }
- .border-dashed {
- --tw-border-style: dashed;
- border-style: dashed;
- }
- .border-neutral-300 {
- border-color: var(--color-neutral-300);
- }
- .border-neutral-500 {
- border-color: var(--color-neutral-500);
- }
- .border-neutral-600 {
- border-color: var(--color-neutral-600);
- }
- .border-slate-300 {
- border-color: var(--color-slate-300);
- }
- .border-slate-700 {
- border-color: var(--color-slate-700);
- }
- .border-slate-800 {
- border-color: var(--color-slate-800);
- }
- .bg-accent {
- background-color: var(--color-accent);
- }
- .bg-neutral-100 {
- background-color: var(--color-neutral-100);
- }
- .bg-neutral-300 {
- background-color: var(--color-neutral-300);
- }
- .bg-neutral-400 {
- background-color: var(--color-neutral-400);
- }
- .bg-orange-500 {
- background-color: var(--color-orange-500);
- }
- .bg-purple-600 {
- background-color: var(--color-purple-600);
- }
- .bg-red-600 {
- background-color: var(--color-red-600);
- }
- .mask-repeat {
- mask-repeat: repeat;
- }
- .p-1 {
- padding: calc(var(--spacing) * 1);
- }
- .p-2 {
- padding: calc(var(--spacing) * 2);
- }
- .p-8 {
- padding: calc(var(--spacing) * 8);
- }
- .px-3 {
- padding-inline: calc(var(--spacing) * 3);
- }
- .py-2 {
- padding-block: calc(var(--spacing) * 2);
- }
- .py-4 {
- padding-block: calc(var(--spacing) * 4);
- }
- .text-center {
- text-align: center;
- }
- .text-2xl {
- font-size: var(--text-2xl);
- line-height: var(--tw-leading, var(--text-2xl--line-height));
- }
- .text-sm {
- font-size: var(--text-sm);
- line-height: var(--tw-leading, var(--text-sm--line-height));
- }
- .text-xl {
- font-size: var(--text-xl);
- line-height: var(--tw-leading, var(--text-xl--line-height));
- }
- .font-bold {
- --tw-font-weight: var(--font-weight-bold);
- font-weight: var(--font-weight-bold);
- }
- .whitespace-nowrap {
- white-space: nowrap;
- }
- .text-accent {
- color: var(--color-accent);
- }
- .text-black {
- color: var(--color-black);
- }
- .text-neutral-300 {
- color: var(--color-neutral-300);
- }
- .text-neutral-500 {
- color: var(--color-neutral-500);
- }
- .text-neutral-700 {
- color: var(--color-neutral-700);
- }
- .text-neutral-800 {
- color: var(--color-neutral-800);
- }
- .text-red-500 {
- color: var(--color-red-500);
- }
- .text-red-600 {
- color: var(--color-red-600);
- }
- .text-slate-600 {
- color: var(--color-slate-600);
- }
- .text-slate-700 {
- color: var(--color-slate-700);
- }
- .text-white {
- color: var(--color-white);
- }
- .uppercase {
- text-transform: uppercase;
- }
- .underline {
- text-decoration-line: underline;
- }
- .opacity-0 {
- opacity: 0%;
- }
- .outline {
- outline-style: var(--tw-outline-style);
- outline-width: 1px;
- }
- .filter {
- filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
- }
- .transition {
- transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events;
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
- transition-duration: var(--tw-duration, var(--default-transition-duration));
- }
- .transition-all {
- transition-property: all;
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
- transition-duration: var(--tw-duration, var(--default-transition-duration));
- }
- .transition-colors {
- transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
- transition-duration: var(--tw-duration, var(--default-transition-duration));
- }
- .duration-300 {
- --tw-duration: 300ms;
- transition-duration: 300ms;
- }
- .select-none {
- -webkit-user-select: none;
- user-select: none;
- }
- .\*\:text-center {
- :is(& > *) {
- text-align: center;
- }
- }
- .\*\:not-print\:p-2 {
- :is(& > *) {
- @media not print {
- padding: calc(var(--spacing) * 2);
- }
- }
- }
- .group-hover\:text-black {
- &:is(:where(.group):hover *) {
- @media (hover: hover) {
- color: var(--color-black);
- }
- }
- }
- .group-hover\:text-white {
- &:is(:where(.group):hover *) {
- @media (hover: hover) {
- color: var(--color-white);
- }
- }
- }
- .group-\[\.edit\]\:ml-2 {
- &:is(:where(.group):is(.edit) *) {
- margin-left: calc(var(--spacing) * 2);
- }
- }
- .group-\[\.edit\]\:flex {
- &:is(:where(.group):is(.edit) *) {
- display: flex;
- }
- }
- .group-\[\.edit\]\:hidden {
- &:is(:where(.group):is(.edit) *) {
- display: none;
- }
- }
- .group-\[\.edit\]\:inline {
- &:is(:where(.group):is(.edit) *) {
- display: inline;
- }
- }
- .group-\[\.edit\]\/button\:block {
- &:is(:where(.group\/button):is(.edit) *) {
- display: block;
- }
- }
- .group-\[\.edit\]\/button\:hidden {
- &:is(:where(.group\/button):is(.edit) *) {
- display: none;
- }
- }
- .peer-checked\:opacity-100 {
- &:is(:where(.peer):checked ~ *) {
- opacity: 100%;
- }
- }
- .placeholder\:text-neutral-400 {
- &::placeholder {
- color: var(--color-neutral-400);
- }
- }
- .checked\:border-slate-800 {
- &:checked {
- border-color: var(--color-slate-800);
- }
- }
- .checked\:bg-slate-800 {
- &:checked {
- background-color: var(--color-slate-800);
- }
- }
- .hover\:border-neutral-500 {
- &:hover {
- @media (hover: hover) {
- border-color: var(--color-neutral-500);
- }
- }
- }
- .hover\:bg-neutral-200 {
- &:hover {
- @media (hover: hover) {
- background-color: var(--color-neutral-200);
- }
- }
- }
- .hover\:bg-neutral-700 {
- &:hover {
- @media (hover: hover) {
- background-color: var(--color-neutral-700);
- }
- }
- }
- .hover\:bg-red-700 {
- &:hover {
- @media (hover: hover) {
- background-color: var(--color-red-700);
- }
- }
- }
- .hover\:text-white {
- &:hover {
- @media (hover: hover) {
- color: var(--color-white);
- }
- }
- }
- .focus\:bg-neutral-700 {
- &:focus {
- background-color: var(--color-neutral-700);
- }
- }
- .focus\:outline-none {
- &:focus {
- --tw-outline-style: none;
- outline-style: none;
- }
- }
- .active\:bg-neutral-700 {
- &:active {
- background-color: var(--color-neutral-700);
- }
- }
- .disabled\:pointer-events-none {
- &:disabled {
- pointer-events: none;
- }
- }
- .disabled\:opacity-50 {
- &:disabled {
- opacity: 50%;
- }
- }
- .max-md\:grid {
- @media (width < 48rem) {
- display: grid;
- }
- }
- .max-md\:hidden {
- @media (width < 48rem) {
- display: none;
- }
- }
- .max-md\:divide-y-1 {
- @media (width < 48rem) {
- :where(& > :not(:last-child)) {
- --tw-divide-y-reverse: 0;
- border-bottom-style: var(--tw-border-style);
- border-top-style: var(--tw-border-style);
- border-top-width: calc(1px * var(--tw-divide-y-reverse));
- border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
- }
- }
- }
- .max-md\:bg-neutral-300 {
- @media (width < 48rem) {
- background-color: var(--color-neutral-300);
- }
- }
- .md\:col-span-1 {
- @media (width >= 48rem) {
- grid-column: span 1 / span 1;
- }
- }
- .md\:col-span-3 {
- @media (width >= 48rem) {
- grid-column: span 3 / span 3;
- }
- }
- .md\:mx-\[10\%\] {
- @media (width >= 48rem) {
- margin-inline: 10%;
- }
- }
- .md\:block {
- @media (width >= 48rem) {
- display: block;
- }
- }
- .md\:hidden {
- @media (width >= 48rem) {
- display: none;
- }
- }
- .md\:inline {
- @media (width >= 48rem) {
- display: inline;
- }
- }
- .md\:w-1\/2 {
- @media (width >= 48rem) {
- width: calc(1/2 * 100%);
- }
- }
- .md\:flex-row {
- @media (width >= 48rem) {
- flex-direction: row;
- }
- }
- .md\:px-4 {
- @media (width >= 48rem) {
- padding-inline: calc(var(--spacing) * 4);
- }
- }
- .md\:text-transparent {
- @media (width >= 48rem) {
- color: transparent;
- }
- }
- .group-\[\.edit\]\/button\:md\:block {
- &:is(:where(.group\/button):is(.edit) *) {
- @media (width >= 48rem) {
- display: block;
- }
- }
- }
- .lg\:hidden {
- @media (width >= 64rem) {
- display: none;
- }
- }
- .lg\:grid-cols-1 {
- @media (width >= 64rem) {
- grid-template-columns: repeat(1, minmax(0, 1fr));
- }
- }
- .lg\:divide-x-1 {
- @media (width >= 64rem) {
- :where(& > :not(:last-child)) {
- --tw-divide-x-reverse: 0;
- border-inline-style: var(--tw-border-style);
- border-inline-start-width: calc(1px * var(--tw-divide-x-reverse));
- border-inline-end-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
- }
- }
- }
- .lg\:border-0 {
- @media (width >= 64rem) {
- border-style: var(--tw-border-style);
- border-width: 0px;
- }
- }
- .\@7xl\:grid {
- @container (width >= 80rem) {
- display: grid;
- }
- }
- .\@7xl\:grid-cols-5 {
- @container (width >= 80rem) {
- grid-template-columns: repeat(5, minmax(0, 1fr));
- }
- }
- .print\:hidden {
- @media print {
- display: none;
- }
- }
-}
-@layer base {
- body {
- -webkit-print-color-adjust: exact !important;
- print-color-adjust: exact !important;
- background-color: white;
- }
-}
-@layer components {
- .grid-main {
- display: grid;
- grid-template-columns: 4fr 3fr 3fr 1fr;
- align-items: stretch;
- }
- .grid-sub {
- display: grid;
- grid-template-columns: subgrid;
- grid-column: 1 / -1;
- border-color: var(--color-neutral-400);
- transition: background-color 0.2s ease-in-out;
- }
- .grid-sub.responsive {
- display: flex;
- flex-direction: column;
- }
- .grid-sub:hover {
- background-color: var(--color-neutral-200);
- }
- .grid-cell {
- padding: calc(var(--spacing) * 2);
- border-color: var(--color-neutral-400);
- }
- .btn {
- width: 100%;
- cursor: pointer;
- border-radius: var(--radius-md);
- color: var(--color-neutral-800);
- font-size: var(--text-sm);
- text-align: center;
- padding: calc(var(--spacing) * 2);
- border-style: var(--tw-border-style);
- border-width: 1px;
- border-color: var(--color-neutral-800);
- transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
- transition-timing-function: var( --tw-ease, var(--default-transition-timing-function) );
- transition-duration: var(--tw-duration, var(--default-transition-duration));
- }
- input.btn, select.btn {
- transition-duration: 300ms;
- }
- .btn:hover {
- color: var(--color-white);
- background-color: var(--color-neutral-700);
- }
- .btn:disabled {
- opacity: 50%;
- pointer-events: none;
- }
- input.btn, select.btn {
- text-align: left;
- }
- input.btn:hover, select.btn:hover {
- border-color: var(--color-neutral-300);
- background-color: var(--color-neutral-100);
- color: var(--color-neutral-800);
- }
- .edit-box {
- border-radius: var(--radius-md);
- overflow: hidden;
- border-color: var(--color-neutral-500);
- transition-property: background-color, border-color;
- transition-timing-function: var(--default-transition-timing-function) * 2;
- transition-duration: var(--default-transition-duration);
- outline: none;
- &:is(:where(.group):is(.edit) *) {
- border-width: 1px;
- }
- }
- .edit-box:hover {
- &:is(:where(.group):is(.edit) *) {
- background-color: var(--color-white);
- border-color: var(--color-neutral-300);
- }
- }
- .edit-box input:focus {
- outline: none;
- }
- div.edit {
- border-width: 1px;
- background-color: var(--color-neutral-300);
- }
- @media (width >=48rem) {
- .grid-main {
- grid-template-columns: repeat(5, 1fr);
- margin: 0 10%;
- }
- .grid-sub.responsive {
- display: grid;
- }
- .btn {
- padding-inline: calc(var(--spacing) * 4);
- }
- }
-}
-@property --tw-translate-x {
- syntax: "*";
- inherits: false;
- initial-value: 0;
-}
-@property --tw-translate-y {
- syntax: "*";
- inherits: false;
- initial-value: 0;
-}
-@property --tw-translate-z {
- syntax: "*";
- inherits: false;
- initial-value: 0;
-}
-@property --tw-rotate-x {
- syntax: "*";
- inherits: false;
-}
-@property --tw-rotate-y {
- syntax: "*";
- inherits: false;
-}
-@property --tw-rotate-z {
- syntax: "*";
- inherits: false;
-}
-@property --tw-skew-x {
- syntax: "*";
- inherits: false;
-}
-@property --tw-skew-y {
- syntax: "*";
- inherits: false;
-}
-@property --tw-divide-x-reverse {
- syntax: "*";
- inherits: false;
- initial-value: 0;
-}
-@property --tw-border-style {
- syntax: "*";
- inherits: false;
- initial-value: solid;
-}
-@property --tw-divide-y-reverse {
- syntax: "*";
- inherits: false;
- initial-value: 0;
-}
-@property --tw-font-weight {
- syntax: "*";
- inherits: false;
-}
-@property --tw-outline-style {
- syntax: "*";
- inherits: false;
- initial-value: solid;
-}
-@property --tw-blur {
- syntax: "*";
- inherits: false;
-}
-@property --tw-brightness {
- syntax: "*";
- inherits: false;
-}
-@property --tw-contrast {
- syntax: "*";
- inherits: false;
-}
-@property --tw-grayscale {
- syntax: "*";
- inherits: false;
-}
-@property --tw-hue-rotate {
- syntax: "*";
- inherits: false;
-}
-@property --tw-invert {
- syntax: "*";
- inherits: false;
-}
-@property --tw-opacity {
- syntax: "*";
- inherits: false;
-}
-@property --tw-saturate {
- syntax: "*";
- inherits: false;
-}
-@property --tw-sepia {
- syntax: "*";
- inherits: false;
-}
-@property --tw-drop-shadow {
- syntax: "*";
- inherits: false;
-}
-@property --tw-drop-shadow-color {
- syntax: "*";
- inherits: false;
-}
-@property --tw-drop-shadow-alpha {
- syntax: "";
- inherits: false;
- initial-value: 100%;
-}
-@property --tw-drop-shadow-size {
- syntax: "*";
- inherits: false;
-}
-@property --tw-duration {
- syntax: "*";
- inherits: false;
-}
-@layer properties {
- @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
- *, ::before, ::after, ::backdrop {
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-translate-z: 0;
- --tw-rotate-x: initial;
- --tw-rotate-y: initial;
- --tw-rotate-z: initial;
- --tw-skew-x: initial;
- --tw-skew-y: initial;
- --tw-divide-x-reverse: 0;
- --tw-border-style: solid;
- --tw-divide-y-reverse: 0;
- --tw-font-weight: initial;
- --tw-outline-style: solid;
- --tw-blur: initial;
- --tw-brightness: initial;
- --tw-contrast: initial;
- --tw-grayscale: initial;
- --tw-hue-rotate: initial;
- --tw-invert: initial;
- --tw-opacity: initial;
- --tw-saturate: initial;
- --tw-sepia: initial;
- --tw-drop-shadow: initial;
- --tw-drop-shadow-color: initial;
- --tw-drop-shadow-alpha: 100%;
- --tw-drop-shadow-size: initial;
- --tw-duration: initial;
- }
- }
-}
+@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-font-weight:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-orange-500:oklch(70.5% .213 47.604);--color-purple-600:oklch(55.8% .288 302.321);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-bold:700;--radius-md:.375rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-accent:#0eaf23}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}body{background-color:#fff;-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}}@layer components{.grid-main{grid-template-columns:4fr 3fr 3fr 1fr;align-items:stretch;display:grid}.grid-sub{grid-template-columns:subgrid;border-color:var(--color-neutral-400);grid-column:1/-1;transition:background-color .2s ease-in-out;display:grid}.grid-sub.responsive{flex-direction:column;display:flex}.grid-sub:hover{background-color:var(--color-neutral-200)}.grid-cell{padding:calc(var(--spacing)*2);border-color:var(--color-neutral-400)}.btn{cursor:pointer;border-radius:var(--radius-md);width:100%;color:var(--color-neutral-800);font-size:var(--text-sm);text-align:center;padding:calc(var(--spacing)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-neutral-800);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}input.btn,select.btn{transition-duration:.3s}.btn:hover{color:var(--color-white);background-color:var(--color-neutral-700)}.btn:disabled{opacity:.5;pointer-events:none}input.btn,select.btn{text-align:left}input.btn:hover,select.btn:hover{border-color:var(--color-neutral-300);background-color:var(--color-neutral-100);color:var(--color-neutral-800)}.edit-box{border-radius:var(--radius-md);border-color:var(--color-neutral-500);transition-property:background-color,border-color;transition-timing-function:var(--default-transition-timing-function)*2;transition-duration:var(--default-transition-duration);outline:none;overflow:hidden}.edit-box:is(:where(.group).edit *){border-width:1px}.edit-box:hover:is(:where(.group).edit *){background-color:var(--color-white);border-color:var(--color-neutral-300)}.edit-box input:focus{outline:none}div.edit{background-color:var(--color-neutral-300);border-width:1px}@media (min-width:48rem){.grid-main{grid-template-columns:repeat(5,1fr);margin:0 10%}.grid-sub.responsive{display:grid}.btn{padding-inline:calc(var(--spacing)*4)}}}@layer utilities{.\@container{container-type:inline-size}.absolute{position:absolute}.relative{position:relative}.top-1\/2{top:50%}.top-2\.5{top:calc(var(--spacing)*2.5)}.top-\[0\.125rem\]{top:.125rem}.right-1{right:calc(var(--spacing)*1)}.right-2\.5{right:calc(var(--spacing)*2.5)}.left-1\/2{left:50%}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-full{grid-column:1/-1}.mx-auto{margin-inline:auto}.-my-1{margin-block:calc(var(--spacing)*-1)}.mt-1{margin-top:calc(var(--spacing)*1)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.icon-\[material-symbols-light--cancel-outline\]{width:1.25em;height:1.25em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m8.4 16.308l3.6-3.6l3.6 3.6l.708-.708l-3.6-3.6l3.6-3.6l-.708-.708l-3.6 3.6l-3.6-3.6l-.708.708l3.6 3.6l-3.6 3.6zM12.003 21q-1.866 0-3.51-.708q-1.643-.709-2.859-1.924t-1.925-2.856T3 12.003t.709-3.51Q4.417 6.85 5.63 5.634t2.857-1.925T11.997 3t3.51.709q1.643.708 2.859 1.922t1.925 2.857t.709 3.509t-.708 3.51t-1.924 2.859t-2.856 1.925t-3.509.709M12 20q3.35 0 5.675-2.325T20 12t-2.325-5.675T12 4T6.325 6.325T4 12t2.325 5.675T12 20m0-8'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[material-symbols-light--check-circle-outline\]{width:1.25em;height:1.25em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m10.562 15.908l6.396-6.396l-.708-.708l-5.688 5.688l-2.85-2.85l-.708.708zM12.003 21q-1.866 0-3.51-.708q-1.643-.709-2.859-1.924t-1.925-2.856T3 12.003t.709-3.51Q4.417 6.85 5.63 5.634t2.857-1.925T11.997 3t3.51.709q1.643.708 2.859 1.922t1.925 2.857t.709 3.509t-.708 3.51t-1.924 2.859t-2.856 1.925t-3.509.709M12 20q3.35 0 5.675-2.325T20 12t-2.325-5.675T12 4T6.325 6.325T4 12t2.325 5.675T12 20m0-8'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[material-symbols-light--circle-outline\]{width:1.25em;height:1.25em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M12.003 21q-1.866 0-3.51-.708q-1.643-.709-2.859-1.924t-1.925-2.856T3 12.003t.709-3.51Q4.417 6.85 5.63 5.634t2.857-1.925T11.997 3t3.51.709q1.643.708 2.859 1.922t1.925 2.857t.709 3.509t-.708 3.51t-1.924 2.859t-2.856 1.925t-3.509.709M12 20q3.35 0 5.675-2.325T20 12t-2.325-5.675T12 4T6.325 6.325T4 12t2.325 5.675T12 20m0-8'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[material-symbols-light--delete-outline\]{width:1.25em;height:1.25em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M7.616 20q-.672 0-1.144-.472T6 18.385V6H5V5h4v-.77h6V5h4v1h-1v12.385q0 .69-.462 1.153T16.384 20zM17 6H7v12.385q0 .269.173.442t.443.173h8.769q.23 0 .423-.192t.192-.424zM9.808 17h1V8h-1zm3.384 0h1V8h-1zM7 6v13z'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[material-symbols-light--more-time\]{width:1.25em;height:1.25em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M11.003 20q-1.666 0-3.123-.622t-2.545-1.71t-1.712-2.544T3 12.003t.622-3.123t1.711-2.546q1.09-1.089 2.545-1.711T11 4q.525 0 1.013.063T13 4.25V5.3q-.5-.15-.987-.225T11 5Q8.089 5 6.044 7.044T4 12t2.044 4.956T11 19t4.956-2.044T18 11.996q0-.271-.025-.554t-.094-.557h1.011q.05.236.08.538q.028.302.028.577q0 1.667-.622 3.122t-1.71 2.545q-1.089 1.088-2.544 1.71q-1.455.623-3.121.623m3.143-4.146L10.5 12.208V7h1v4.792l3.354 3.354zM18 8.884v-3h-3v-1h3v-3h1v3h3v1h-3v3z'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[material-symbols-light--motion-photos-paused-outline\]{width:1.25em;height:1.25em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M9.808 14.616h1V9.385h-1zm3.384 0h1V9.385h-1zM12.003 21q-1.866 0-3.51-.705q-1.643-.706-2.859-1.915t-1.925-2.843T3 12.039q0-.905.167-1.778t.497-1.713l.78.78q-.219.65-.331 1.32T4 12q0 3.35 2.325 5.675T12 20t5.675-2.325T20 12t-2.325-5.675T12 4q-.675 0-1.332.112t-1.3.332l-.776-.775q.789-.315 1.606-.492T11.885 3q1.887 0 3.546.701t2.894 1.926t1.955 2.866t.72 3.505t-.708 3.509t-1.924 2.859t-2.856 1.925t-3.509.709M5.923 6.808q-.356 0-.62-.265q-.264-.264-.264-.62t.264-.62t.62-.264t.62.264t.265.62t-.265.62t-.62.265M12 12'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.icon-\[material-symbols-light--schedule-outline\]{width:1.25em;height:1.25em;-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);-webkit-mask-image:var(--svg);mask-image:var(--svg);--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='m15.646 16.354l.708-.708l-3.854-3.854V7h-1v5.208zM12.003 21q-1.866 0-3.51-.708q-1.643-.709-2.859-1.924t-1.925-2.856T3 12.003t.709-3.51Q4.417 6.85 5.63 5.634t2.857-1.925T11.997 3t3.51.709q1.643.708 2.859 1.922t1.925 2.857t.709 3.509t-.708 3.51t-1.924 2.859t-2.856 1.925t-3.509.709M12 20q3.325 0 5.663-2.337T20 12t-2.337-5.663T12 4T6.337 6.338T4 12t2.338 5.663T12 20'/%3E%3C/svg%3E");background-color:currentColor;display:inline-block;-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.h-2{height:calc(var(--spacing)*2)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-\[100vh\]{height:100vh}.h-full{height:100%}.w-2{width:calc(var(--spacing)*2)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-9\/10{width:90%}.w-\[2px\]{width:2px}.w-auto{width:auto}.w-full{width:100%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.grow-0{flex-grow:0}.grow-1{flex-grow:1}.basis-\[content\]{flex-basis:content}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.scroll-m-2{scroll-margin:calc(var(--spacing)*2)}.appearance-none{appearance:none}.break-after-page{break-after:page}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-\[3fr_2fr_2fr_2fr_3fr_3fr_3fr\]{grid-template-columns:3fr 2fr 2fr 2fr 3fr 3fr 3fr}.grid-cols-subgrid{grid-template-columns:subgrid}.grid-rows-6{grid-template-rows:repeat(6,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.content-baseline{align-content:baseline}.content-end{align-content:flex-end}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}:where(.divide-x-1>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y-1>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-neutral-300>:not(:last-child)){border-color:var(--color-neutral-300)}.justify-self-end{justify-self:flex-end}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-r-1{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-neutral-300{border-color:var(--color-neutral-300)}.border-neutral-500{border-color:var(--color-neutral-500)}.border-neutral-600{border-color:var(--color-neutral-600)}.border-slate-800{border-color:var(--color-slate-800)}.bg-accent{background-color:var(--color-accent)}.bg-neutral-100{background-color:var(--color-neutral-100)}.bg-neutral-300{background-color:var(--color-neutral-300)}.bg-neutral-400{background-color:var(--color-neutral-400)}.bg-orange-500{background-color:var(--color-orange-500)}.bg-purple-600{background-color:var(--color-purple-600)}.bg-red-600{background-color:var(--color-red-600)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-8{padding:calc(var(--spacing)*8)}.px-3{padding-inline:calc(var(--spacing)*3)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.whitespace-nowrap{white-space:nowrap}.text-accent{color:var(--color-accent)}.text-black{color:var(--color-black)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-700{color:var(--color-neutral-700)}.text-neutral-800{color:var(--color-neutral-800)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.opacity-0{opacity:0}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.select-none{-webkit-user-select:none;user-select:none}:is(.\*\:text-center>*){text-align:center}@media not print{:is(.\*\:not-print\:p-2>*){padding:calc(var(--spacing)*2)}}@media (hover:hover){.group-hover\:text-black:is(:where(.group):hover *){color:var(--color-black)}.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}}.group-\[\.edit\]\:ml-2:is(:where(.group).edit *){margin-left:calc(var(--spacing)*2)}.group-\[\.edit\]\:flex:is(:where(.group).edit *){display:flex}.group-\[\.edit\]\:hidden:is(:where(.group).edit *){display:none}.group-\[\.edit\]\:inline:is(:where(.group).edit *){display:inline}.group-\[\.edit\]\/button\:block:is(:where(.group\/button).edit *){display:block}.group-\[\.edit\]\/button\:hidden:is(:where(.group\/button).edit *){display:none}.peer-checked\:opacity-100:is(:where(.peer):checked~*){opacity:1}.placeholder\:text-neutral-400::placeholder{color:var(--color-neutral-400)}.checked\:border-slate-800:checked{border-color:var(--color-slate-800)}.checked\:bg-slate-800:checked{background-color:var(--color-slate-800)}@media (hover:hover){.hover\:border-neutral-500:hover{border-color:var(--color-neutral-500)}.hover\:bg-neutral-200:hover{background-color:var(--color-neutral-200)}.hover\:bg-neutral-700:hover{background-color:var(--color-neutral-700)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:text-white:hover{color:var(--color-white)}}.focus\:bg-neutral-700:focus{background-color:var(--color-neutral-700)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:bg-neutral-700:active{background-color:var(--color-neutral-700)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}@media not all and (min-width:48rem){.max-md\:grid{display:grid}.max-md\:hidden{display:none}:where(.max-md\:divide-y-1>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}.max-md\:bg-neutral-300{background-color:var(--color-neutral-300)}}@media (min-width:48rem){.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-3{grid-column:span 3/span 3}.md\:mx-\[10\%\]{margin-inline:10%}.md\:block{display:block}.md\:hidden{display:none}.md\:inline{display:inline}.md\:w-1\/2{width:50%}.md\:flex-row{flex-direction:row}.md\:px-4{padding-inline:calc(var(--spacing)*4)}.md\:text-transparent{color:#0000}.group-\[\.edit\]\/button\:md\:block:is(:where(.group\/button).edit *){display:block}}@media (min-width:64rem){.lg\:hidden{display:none}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}:where(.lg\:divide-x-1>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px*var(--tw-divide-x-reverse));border-inline-end-width:calc(1px*calc(1 - var(--tw-divide-x-reverse)))}.lg\:border-0{border-style:var(--tw-border-style);border-width:0}}@container (min-width:80rem){.\@7xl\:grid{display:grid}.\@7xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media print{.print\:hidden{display:none}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}
\ No newline at end of file
diff --git a/Backend/templates/reportPage.templ b/Backend/templates/reportPage.templ
index df2bab2..bc74e34 100644
--- a/Backend/templates/reportPage.templ
+++ b/Backend/templates/reportPage.templ
@@ -1,6 +1,12 @@
package templates
-import "arbeitszeitmessung/models"
+import (
+ "arbeitszeitmessung/helper"
+ "arbeitszeitmessung/models"
+ "fmt"
+ "strconv"
+ "time"
+)
templ TeamPage(weeks []models.WorkWeek, userWeek models.WorkWeek) {
@Base()
@@ -22,3 +28,119 @@ templ TeamPage(weeks []models.WorkWeek, userWeek models.WorkWeek) {
}
}
+
+templ workWeekComponent(week models.WorkWeek, onlyAccept bool) {
+ {{
+ year, kw := week.WeekStart.ISOWeek()
+ progress := (float32(week.WorktimeVirtual.Hours()) / week.User.ArbeitszeitPerWoche) * 100
+ }}
+
+
+ if !onlyAccept {
+
+ @weekPicker(week.WeekStart)
+
+ }
+
{ week.User.Vorname } { week.User.Name }
+
+ if !onlyAccept {
+
+
+ @statusCheckMark(week.CheckStatus(), models.WeekStatusSent)
+ Gesendet
+
+
+ @statusCheckMark(week.CheckStatus(), models.WeekStatusAccepted)
+ Akzeptiert
+
+
+ }
+
+ @timeGaugeComponent(int8(progress), false)
+
+
Arbeitszeit: { fmt.Sprintf("%s", helper.FormatDuration(week.Worktime)) }
+
Überstunden: { fmt.Sprintf("%s", helper.FormatDurationFill(week.Overtime, true)) }
+
+
+
+
+
+ for _, day := range week.Days {
+ @defaultWeekDayComponent(week.User, day)
+ }
+
+
+ if onlyAccept {
+
Woche: { fmt.Sprintf("%02d-%d", kw, year) }
+ } else {
+
+ @weekPicker(week.WeekStart)
+
+ }
+
+
+
+}
+
+templ defaultWeekDayComponent(u models.User, day models.IWorkDay) {
+
+ @timeGaugeComponent(day.GetDayProgress(u), false)
+
+
{ helper.FormatGermanDayOfWeek(day.Date()) }: { day.Date().Format("02.01.2006") }
+ {{ work, pause, _ := day.GetTimes(u, models.WorktimeBaseDay, false) }}
+ if day.IsWorkDay() || day.GetDayProgress(u) < 100 {
+
+ { helper.FormatDuration(work) }
+ { helper.FormatDuration(pause) }
+
+ }
+ @weekDayTypeSwitcher(day)
+
+
+}
+
+templ weekDayTypeSwitcher(day models.IWorkDay) {
+ switch day.Type() {
+ case models.DayTypeWorkday:
+ {{ workDay, _ := day.(*models.WorkDay) }}
+ @workDayWeekComponent(workDay)
+ case models.DayTypeCompound:
+ for _, c := range day.(*models.CompoundDay).DayParts {
+ @weekDayTypeSwitcher(c)
+ }
+ default:
+ { day.ToString() }
+ }
+}
diff --git a/Backend/templates/reportPage_templ.go b/Backend/templates/reportPage_templ.go
index 6a97c20..96ed8f5 100644
--- a/Backend/templates/reportPage_templ.go
+++ b/Backend/templates/reportPage_templ.go
@@ -8,7 +8,13 @@ package templates
import "github.com/a-h/templ"
import templruntime "github.com/a-h/templ/runtime"
-import "arbeitszeitmessung/models"
+import (
+ "arbeitszeitmessung/helper"
+ "arbeitszeitmessung/models"
+ "fmt"
+ "strconv"
+ "time"
+)
func TeamPage(weeks []models.WorkWeek, userWeek models.WorkWeek) templ.Component {
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
@@ -67,4 +73,473 @@ func TeamPage(weeks []models.WorkWeek, userWeek models.WorkWeek) templ.Component
})
}
+func workWeekComponent(week models.WorkWeek, onlyAccept bool) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var2 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var2 == nil {
+ templ_7745c5c3_Var2 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ year, kw := week.WeekStart.ISOWeek()
+ progress := (float32(week.WorktimeVirtual.Hours()) / week.User.ArbeitszeitPerWoche) * 100
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ if !onlyAccept {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = weekPicker(week.WeekStart).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var3 string
+ templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(week.User.Vorname)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reportPage.templ`, Line: 44, Col: 53}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, " ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var4 string
+ templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(week.User.Name)
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reportPage.templ`, Line: 44, Col: 72}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ if !onlyAccept {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = statusCheckMark(week.CheckStatus(), models.WeekStatusSent).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "Gesendet ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = statusCheckMark(week.CheckStatus(), models.WeekStatusAccepted).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "Akzeptiert
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = timeGaugeComponent(int8(progress), false).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "
Arbeitszeit: ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var5 string
+ templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%s", helper.FormatDuration(week.Worktime)))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reportPage.templ`, Line: 61, Col: 79}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "
Überstunden: ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var6 string
+ templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%s", helper.FormatDurationFill(week.Overtime, true)))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reportPage.templ`, Line: 62, Col: 90}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ for _, day := range week.Days {
+ templ_7745c5c3_Err = defaultWeekDayComponent(week.User, day).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ if onlyAccept {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "
Woche: ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var7 string
+ templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%02d-%d", kw, year))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reportPage.templ`, Line: 74, Col: 86}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ } else {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = weekPicker(week.WeekStart).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func defaultWeekDayComponent(u models.User, day models.IWorkDay) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var11 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var11 == nil {
+ templ_7745c5c3_Var11 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = timeGaugeComponent(day.GetDayProgress(u), false).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var12 string
+ templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(helper.FormatGermanDayOfWeek(day.Date()))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reportPage.templ`, Line: 121, Col: 108}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, ": ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var13 string
+ templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(day.Date().Format("02.01.2006"))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reportPage.templ`, Line: 121, Col: 152}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ work, pause, _ := day.GetTimes(u, models.WorktimeBaseDay, false)
+ if day.IsWorkDay() || day.GetDayProgress(u) < 100 {
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var14 string
+ templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(helper.FormatDuration(work))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reportPage.templ`, Line: 125, Col: 60}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, " ")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var15 string
+ templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(helper.FormatDuration(pause))
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reportPage.templ`, Line: 126, Col: 66}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ templ_7745c5c3_Err = weekDayTypeSwitcher(day).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ return nil
+ })
+}
+
+func weekDayTypeSwitcher(day models.IWorkDay) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var16 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var16 == nil {
+ templ_7745c5c3_Var16 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ switch day.Type() {
+ case models.DayTypeWorkday:
+ workDay, _ := day.(*models.WorkDay)
+ templ_7745c5c3_Err = workDayWeekComponent(workDay).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ case models.DayTypeCompound:
+ for _, c := range day.(*models.CompoundDay).DayParts {
+ templ_7745c5c3_Err = weekDayTypeSwitcher(c).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ default:
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var17 string
+ templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(day.ToString())
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/reportPage.templ`, Line: 144, Col: 24}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ return nil
+ })
+}
+
var _ = templruntime.GeneratedTemplate
diff --git a/Backend/templates/teamComponents.templ b/Backend/templates/teamComponents.templ
index 9790ef7..fd09824 100644
--- a/Backend/templates/teamComponents.templ
+++ b/Backend/templates/teamComponents.templ
@@ -1,10 +1,8 @@
package templates
import (
- "arbeitszeitmessung/helper"
"arbeitszeitmessung/models"
"fmt"
- "strconv"
"time"
)
@@ -26,38 +24,7 @@ templ weekPicker(weekStart time.Time) {
}
-templ defaultWeekDayComponent(u models.User, day models.IWorkDay) {
-
- @timeGaugeComponent(day.GetDayProgress(u), false)
-
-
{ helper.FormatGermanDayOfWeek(day.Date()) }: { day.Date().Format("02.01.2006") }
- {{ work, pause, _ := day.GetTimes(u, models.WorktimeBaseDay, false) }}
-
- { helper.FormatDuration(work) }
- { helper.FormatDuration(pause) }
-
- switch day.Type() {
- case models.DayTypeWorkday:
- {{ workDay, _ := day.(*models.WorkDay) }}
- @workDayWeekComponent(workDay, u)
- case models.DayTypeCompound:
- for _, c := range day.(*models.CompoundDay).DayParts {
- switch c.Type() {
- case models.DayTypeWorkday:
- {{ workDay, _ := c.(*models.WorkDay) }}
- @workDayWeekComponent(workDay, u)
- default:
-
{ c.ToString() }
- }
- }
- default:
-
{ day.ToString() }
- }
-
-
-}
-
-templ workDayWeekComponent(workDay *models.WorkDay, u models.User) {
+templ workDayWeekComponent(workDay *models.WorkDay) {
if !workDay.RequiresAction() {
@@ -75,91 +42,6 @@ templ workDayWeekComponent(workDay *models.WorkDay, u models.User) {
}
}
-templ workWeekComponent(week models.WorkWeek, onlyAccept bool) {
- {{
- year, kw := week.WeekStart.ISOWeek()
- progress := (float32(week.WorktimeVirtual.Hours()) / week.User.ArbeitszeitPerWoche) * 100
- }}
-
-
- if !onlyAccept {
-
- @weekPicker(week.WeekStart)
-
- }
-
{ week.User.Vorname } { week.User.Name }
-
- if !onlyAccept {
-
-
- @statusCheckMark(week.CheckStatus(), models.WeekStatusSent)
- Gesendet
-
-
- @statusCheckMark(week.CheckStatus(), models.WeekStatusAccepted)
- Akzeptiert
-
-
- }
-
- @timeGaugeComponent(int8(progress), false)
-
-
Arbeitszeit: { fmt.Sprintf("%s", helper.FormatDuration(week.Worktime)) }
-
Überstunden: { fmt.Sprintf("%s", helper.FormatDurationFill(week.Overtime, true)) }
-
-
-
-
-
- for _, day := range week.Days {
- @defaultWeekDayComponent(week.User, day)
- }
-
-
- if onlyAccept {
-
Woche: { fmt.Sprintf("%02d-%d", kw, year) }
- } else {
-
- @weekPicker(week.WeekStart)
-
- }
-
-
-
-}
-
templ userPresenceComponent(user models.User, present bool) {
if present {
diff --git a/Backend/templates/teamComponents_templ.go b/Backend/templates/teamComponents_templ.go
index e65c224..0078d43 100644
--- a/Backend/templates/teamComponents_templ.go
+++ b/Backend/templates/teamComponents_templ.go
@@ -9,10 +9,8 @@ import "github.com/a-h/templ"
import templruntime "github.com/a-h/templ/runtime"
import (
- "arbeitszeitmessung/helper"
"arbeitszeitmessung/models"
"fmt"
- "strconv"
"time"
)
@@ -45,7 +43,7 @@ func weekPicker(weekStart time.Time) templ.Component {
var templ_7745c5c3_Var2 string
templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(weekStart.Format(time.DateOnly))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 14, Col: 98}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 12, Col: 98}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
if templ_7745c5c3_Err != nil {
@@ -75,7 +73,7 @@ func weekPicker(weekStart time.Time) templ.Component {
var templ_7745c5c3_Var4 string
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%02d, %d", kw, year))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 20, Col: 69}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 18, Col: 69}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
if templ_7745c5c3_Err != nil {
@@ -116,7 +114,7 @@ func weekPicker(weekStart time.Time) templ.Component {
})
}
-func defaultWeekDayComponent(u models.User, day models.IWorkDay) templ.Component {
+func workDayWeekComponent(workDay *models.WorkDay) templ.Component {
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
@@ -137,208 +135,55 @@ func defaultWeekDayComponent(u models.User, day models.IWorkDay) templ.Component
templ_7745c5c3_Var6 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = timeGaugeComponent(day.GetDayProgress(u), false).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var7 string
- templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(helper.FormatGermanDayOfWeek(day.Date()))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 33, Col: 108}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, ": ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var8 string
- templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(day.Date().Format("02.01.2006"))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 33, Col: 152}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- work, pause, _ := day.GetTimes(u, models.WorktimeBaseDay, false)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var9 string
- templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(helper.FormatDuration(work))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 36, Col: 59}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, " ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var10 string
- templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(helper.FormatDuration(pause))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 37, Col: 65}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- switch day.Type() {
- case models.DayTypeWorkday:
- workDay, _ := day.(*models.WorkDay)
- templ_7745c5c3_Err = workDayWeekComponent(workDay, u).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- case models.DayTypeCompound:
- for _, c := range day.(*models.CompoundDay).DayParts {
- switch c.Type() {
- case models.DayTypeWorkday:
- workDay, _ := c.(*models.WorkDay)
- templ_7745c5c3_Err = workDayWeekComponent(workDay, u).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- default:
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var11 string
- templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(c.ToString())
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 50, Col: 27}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- }
- }
- default:
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var12 string
- templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(day.ToString())
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 54, Col: 26}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- return nil
- })
-}
-
-func workDayWeekComponent(workDay *models.WorkDay, u models.User) templ.Component {
- return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
- templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
- if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
- return templ_7745c5c3_CtxErr
- }
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
- if !templ_7745c5c3_IsBuffer {
- defer func() {
- templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err == nil {
- templ_7745c5c3_Err = templ_7745c5c3_BufErr
- }
- }()
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var13 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var13 == nil {
- templ_7745c5c3_Var13 = templ.NopComponent
- }
- ctx = templ.ClearChildren(ctx)
if !workDay.RequiresAction() {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
switch {
case !workDay.TimeFrom.Equal(workDay.TimeTo):
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var14 string
- templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(workDay.TimeFrom.Format("15:04"))
+ var templ_7745c5c3_Var7 string
+ templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(workDay.TimeFrom.Format("15:04"))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 66, Col: 45}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 33, Col: 45}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, " - ")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, " - ")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var15 string
- templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(workDay.TimeTo.Format("15:04"))
+ var templ_7745c5c3_Var8 string
+ templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(workDay.TimeTo.Format("15:04"))
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 68, Col: 43}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 35, Col: 43}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
default:
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "
Keine Anwesenheit
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "
Keine Anwesenheit
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
} else {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "
Bitte anpassen
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "
Bitte anpassen
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -347,313 +192,6 @@ func workDayWeekComponent(workDay *models.WorkDay, u models.User) templ.Componen
})
}
-func workWeekComponent(week models.WorkWeek, onlyAccept bool) templ.Component {
- return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
- templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
- if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
- return templ_7745c5c3_CtxErr
- }
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
- if !templ_7745c5c3_IsBuffer {
- defer func() {
- templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err == nil {
- templ_7745c5c3_Err = templ_7745c5c3_BufErr
- }
- }()
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var16 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var16 == nil {
- templ_7745c5c3_Var16 = templ.NopComponent
- }
- ctx = templ.ClearChildren(ctx)
- year, kw := week.WeekStart.ISOWeek()
- progress := (float32(week.WorktimeVirtual.Hours()) / week.User.ArbeitszeitPerWoche) * 100
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- if !onlyAccept {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = weekPicker(week.WeekStart).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var17 string
- templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(week.User.Vorname)
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 90, Col: 53}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, " ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var18 string
- templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(week.User.Name)
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 90, Col: 72}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- if !onlyAccept {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = statusCheckMark(week.CheckStatus(), models.WeekStatusSent).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "Gesendet ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = statusCheckMark(week.CheckStatus(), models.WeekStatusAccepted).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "Akzeptiert
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = timeGaugeComponent(int8(progress), false).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "
Arbeitszeit: ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var19 string
- templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%s", helper.FormatDuration(week.Worktime)))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 107, Col: 79}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "
Überstunden: ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var20 string
- templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%s", helper.FormatDurationFill(week.Overtime, true)))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 108, Col: 90}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- for _, day := range week.Days {
- templ_7745c5c3_Err = defaultWeekDayComponent(week.User, day).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- if onlyAccept {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "
Woche: ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var21 string
- templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%02d-%d", kw, year))
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 120, Col: 86}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- } else {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = weekPicker(week.WeekStart).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- return nil
- })
-}
-
func userPresenceComponent(user models.User, present bool) templ.Component {
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
@@ -670,53 +208,53 @@ func userPresenceComponent(user models.User, present bool) templ.Component {
}()
}
ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var25 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var25 == nil {
- templ_7745c5c3_Var25 = templ.NopComponent
+ templ_7745c5c3_Var9 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var9 == nil {
+ templ_7745c5c3_Var9 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
if present {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "
Anwesend
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "
Anwesend
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
} else {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "
Abwesend
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "
Abwesend
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var26 string
- templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(user.Vorname)
+ var templ_7745c5c3_Var10 string
+ templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(user.Vorname)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 170, Col: 19}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 52, Col: 19}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, " ")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, " ")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- var templ_7745c5c3_Var27 string
- templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(user.Name)
+ var templ_7745c5c3_Var11 string
+ templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(user.Name)
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 170, Col: 33}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/teamComponents.templ`, Line: 52, Col: 33}
}
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
diff --git a/Backend/templates/timeComponents.templ b/Backend/templates/timeComponents.templ
index e2f0d62..8020919 100644
--- a/Backend/templates/timeComponents.templ
+++ b/Backend/templates/timeComponents.templ
@@ -20,7 +20,7 @@ templ lineComponent() {
}
templ changeButtonComponent(id string, workDay bool) {
-
@@ -160,6 +137,23 @@ templ defaultDayComponent(day models.IWorkDay) {
}
+templ timeDayTypeSwitch(day models.IWorkDay, fromCompound bool) {
+ switch day.Type() {
+ case models.DayTypeWorkday:
+ {{ workDay, _ := day.(*models.WorkDay) }}
+ @workdayComponent(workDay)
+ case models.DayTypeAbsence:
+ {{ absentDay, _ := day.(*models.Absence) }}
+ @absenceComponent(absentDay, fromCompound)
+ case models.DayTypeCompound:
+ for _, c := range day.(*models.CompoundDay).DayParts {
+ @timeDayTypeSwitch(c, true)
+ }
+ default:
+ { day.ToString() }
+ }
+}
+
templ workdayComponent(workDay *models.WorkDay) {
if len(workDay.Bookings) < 1 {
Keine Buchung gefunden. Bitte Arbeitsstunden oder Grund der Abwesenheit eingeben!
diff --git a/Backend/templates/timePage_templ.go b/Backend/templates/timePage_templ.go
index 3484084..7755a83 100644
--- a/Backend/templates/timePage_templ.go
+++ b/Backend/templates/timePage_templ.go
@@ -410,90 +410,15 @@ func defaultDayComponent(day models.IWorkDay) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- switch day.Type() {
- case models.DayTypeWorkday:
- workDay, _ := day.(*models.WorkDay)
- templ_7745c5c3_Err = workdayComponent(workDay).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, " ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = newAbsenceComponent().Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- case models.DayTypeAbsence:
- absentDay, _ := day.(*models.Absence)
- templ_7745c5c3_Err = absenceComponent(absentDay, false).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- case models.DayTypeCompound:
- for _, c := range day.(*models.CompoundDay).DayParts {
- switch c.Type() {
- case models.DayTypeWorkday:
- workDay, _ := c.(*models.WorkDay)
- templ_7745c5c3_Err = workdayComponent(workDay).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, " ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = newAbsenceComponent().Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- case models.DayTypeAbsence:
- absentDay, _ := c.(*models.Absence)
- templ_7745c5c3_Err = absenceComponent(absentDay, false).Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- default:
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var20 string
- templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(c.ToString())
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/timePage.templ`, Line: 148, Col: 26}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- }
- }
- default:
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var21 string
- templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(day.ToString())
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/timePage.templ`, Line: 152, Col: 25}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
+ templ_7745c5c3_Err = newAbsenceComponent().Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "")
+ templ_7745c5c3_Err = timeDayTypeSwitch(day, false).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -501,7 +426,7 @@ func defaultDayComponent(day models.IWorkDay) templ.Component {
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -509,6 +434,70 @@ func defaultDayComponent(day models.IWorkDay) templ.Component {
})
}
+func timeDayTypeSwitch(day models.IWorkDay, fromCompound bool) templ.Component {
+ return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
+ if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
+ return templ_7745c5c3_CtxErr
+ }
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
+ if !templ_7745c5c3_IsBuffer {
+ defer func() {
+ templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err == nil {
+ templ_7745c5c3_Err = templ_7745c5c3_BufErr
+ }
+ }()
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var20 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var20 == nil {
+ templ_7745c5c3_Var20 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ switch day.Type() {
+ case models.DayTypeWorkday:
+ workDay, _ := day.(*models.WorkDay)
+ templ_7745c5c3_Err = workdayComponent(workDay).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ case models.DayTypeAbsence:
+ absentDay, _ := day.(*models.Absence)
+ templ_7745c5c3_Err = absenceComponent(absentDay, fromCompound).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ case models.DayTypeCompound:
+ for _, c := range day.(*models.CompoundDay).DayParts {
+ templ_7745c5c3_Err = timeDayTypeSwitch(c, true).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ default:
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ var templ_7745c5c3_Var21 string
+ templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(day.ToString())
+ if templ_7745c5c3_Err != nil {
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/timePage.templ`, Line: 153, Col: 22}
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ }
+ return nil
+ })
+}
+
func workdayComponent(workDay *models.WorkDay) templ.Component {
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
@@ -531,7 +520,7 @@ func workdayComponent(workDay *models.WorkDay) templ.Component {
}
ctx = templ.ClearChildren(ctx)
if len(workDay.Bookings) < 1 {
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "Keine Buchung gefunden. Bitte Arbeitsstunden oder Grund der Abwesenheit eingeben!
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "Keine Buchung gefunden. Bitte Arbeitsstunden oder Grund der Abwesenheit eingeben!
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
@@ -577,20 +566,20 @@ func holidayComponent(d models.IWorkDay) templ.Component {
templ_7745c5c3_Var23 = templ.NopComponent
}
ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "
")
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
var templ_7745c5c3_Var24 string
templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(d.ToString())
if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/timePage.templ`, Line: 177, Col: 18}
+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/timePage.templ`, Line: 171, Col: 18}
}
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err
}
- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "
")
+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "