Plugin Directory

Changeset 2884416


Ignore:
Timestamp:
03/21/2023 04:43:26 PM (3 years ago)
Author:
JaworskiMatt
Message:

0.9.5

Location:
listowp/trunk
Files:
36 edited

Legend:

Unmodified
Added
Removed
  • listowp/trunk/assets/css/admin.css

    r2878127 r2884416  
    1 .lo-listowp,.wp-admin{--P: 30px;--PS: calc(var(--P) / 1.5);--PXS: calc(var(--P) / 3);--R: 6px;--RM: calc(var(--R) * 2);--RL: calc(var(--R) * 3);--LH: 1.2;--LHM: calc(var(--LH) + .2);--LHX: calc(var(--LH) + .4);--C-APP: #fff;--C-G50: #F7FAFC;--C-G100: #EDF2F7;--C-G200: #E2E8F0;--C-G300: #CBD5E0;--C-G400: #A0AEC0;--C-G500: #718096;--C-G600: #4A5568;--C-G700: #2D3748;--C-G800: #1A202C;--C-G900: #171923;--C-BRAND: #00d38d;--C-BRAND--DARK:#0db07a;--C-BRAND--LIGHT: #42edb438;--C-BRAND--LIGHTEN: #62e1b738;--C-INBOX: #90A4AE;--C-INBOX--LIGHT: #E2E8F0;--C-INBOX--LIGHTEN: #e2e8f07e;--C-ALL: #4DD0E1;--C-ALL--LIGHT: #B2EBF2;--C-ALL--LIGHTEN: #b2ebf246;--C-DUE: #F44336;--C-DUE--LIGHT: #ffcfcf;--C-DUE--LIGHTEN: #feb2b254;--C-SCHEDULE: #FFA726;--C-SCHEDULE--LIGHT: #FFE0B2;--C-SCHEDULE--LIGHTEN: #ffe0b27e;--C-DONE: #26be8b;--C-DONE--LIGHT: #60c6a4;--C-DONE--LIGHTEN: #60c6a425;--C-RECU: #eec614;--C-RECU--LIGHT: rgb(235, 221, 97)8;--C-RECU--LIGHTEN: #e8d94d2e;--TC: #000;--TC--LIGHT: #555;--TC--LIGHTEN: #999;--DIVIDER: rgba(22, 27, 37, 0.15);--DIVIDER--DARK: rgba(22, 27, 37, 0.3);--DIVIDER--LIGHT: rgba(22, 27, 37, 0.08);--T: none;--T-O: none;--APP-H: 75vh;--APP-MH: 55vh;--APP-MIN-H: 550px;--APP-MAX-H: 800px;--APP-MAX-MH: 600px;--APP-W: 100%;--APP-FULLCREEN-MAX-W: 1400px;--SIDEBAR-W: 30%;--SIDEBAR-MIN-W: 280px;--SIDEBAR-MW: 55px;--SIDEBAR-MW--EXPANDED: 240px}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--R: 6px}}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--T: all .165s ease, height 0s, opacity 0s;--T-O: opacity .165s ease}}.lo-dark{--C-APP: #1A202C;--C-G900: #171923;--C-G800: #1A202C;--C-G700: #E2E8F0;--C-G600: #CBD5E0;--C-G500: #A0AEC0;--C-G400: #718096;--C-G300: #4A5568;--C-G200: #2D3748;--C-G100: #161b25;--C-G50: #171923;--TC: #ffffff;--TC--LIGHT: #A0AEC0;--TC--LIGHTEN: #718096;--DIVIDER: rgba(213, 223, 243, 0.1);--DIVIDER--DARK: rgba(213, 223, 243, 0.25);--DIVIDER--LIGHT: rgba(213, 223, 243, 0.05)}.lo-listowp,.loa-wrapper{--input-bg: transparent;--input-b: none;--input-sh: none;--input-p: 0;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc;font-family:"Inter",sans-serif;font-size:16px;line-height:1.2;font-weight:normal;color:var(--TC)}.lo-listowp *,.loa-wrapper *{box-sizing:inherit;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc}.lo-listowp input[type=text],.lo-listowp input[type=number],.lo-listowp input[type=date],.lo-listowp textarea,.lo-listowp select,.loa-wrapper input[type=text],.loa-wrapper input[type=number],.loa-wrapper input[type=date],.loa-wrapper textarea,.loa-wrapper select{width:100%;margin:0;padding:var(--input-p);font-family:"Inter",sans-serif;font-size:1rem;font-weight:500;color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp input[type=text]:hover,.lo-listowp input[type=text]:focus,.lo-listowp input[type=number]:hover,.lo-listowp input[type=number]:focus,.lo-listowp input[type=date]:hover,.lo-listowp input[type=date]:focus,.lo-listowp textarea:hover,.lo-listowp textarea:focus,.lo-listowp select:hover,.lo-listowp select:focus,.loa-wrapper input[type=text]:hover,.loa-wrapper input[type=text]:focus,.loa-wrapper input[type=number]:hover,.loa-wrapper input[type=number]:focus,.loa-wrapper input[type=date]:hover,.loa-wrapper input[type=date]:focus,.loa-wrapper textarea:hover,.loa-wrapper textarea:focus,.loa-wrapper select:hover,.loa-wrapper select:focus{color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp select,.loa-wrapper select{cursor:pointer}.lo-listowp input.lo-input,.lo-listowp textarea.lo-input,.loa-wrapper input.lo-input,.loa-wrapper textarea.lo-input{padding-top:var(--PXS);padding-bottom:var(--PXS)}.lo-listowp a,.loa-wrapper a{text-decoration:none}.lo-timezone{display:flex;align-items:center;gap:calc(var(--PXS)/2);padding:calc(var(--PXS)/2) var(--PXS);background-color:var(--DIVIDER--LIGHT);border-radius:var(--RL)}.lo-timezone i{color:var(--TC--LIGHTEN)}.lo-timezone select{font-size:.8rem}.lo-gdpr>a{display:block}.lo-poweredby{position:absolute;z-index:5;right:var(--PXS);bottom:var(--PXS);font-size:.825rem;color:var(--TC--LIGHTEN)}.loa-panel{background-color:var(--C-APP);border-radius:var(--RM);box-shadow:0 1px 2px var(--C-G300),0 10px 20px var(--C-G200)}.loa-panel__header{display:flex;align-items:center;gap:var(--P);padding:var(--P);background-color:var(--C-G50);border-bottom:1px solid var(--C-G200);border-top-left-radius:var(--RM);border-top-right-radius:var(--RM)}.loa-panel__name{display:flex;align-items:center;gap:var(--PXS);font-size:1.25rem}.loa-panel__name>span{font-weight:500}.loa-panel__desc{font-size:1rem;opacity:.8}.loa-panel__desc:empty{display:none}.loa-panel__content{display:flex;flex-direction:column;gap:var(--PXS);padding:var(--P)}.loa-opt{display:flex;flex-direction:column;gap:calc(var(--PXS)/2)}.loa-opt .loa-spinner{color:var(--C-G400);animation-name:spinner;animation-duration:1s;animation-iteration-count:infinite}.loa-opt .loa-check{color:var(--C-BRAND)}@keyframes spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.loa-opt__form{display:flex;align-items:flex-start;gap:var(--PXS)}.loa-opt__form.disabled{opacity:.65}@media(max-width: 75em){.loa-opt__form{flex-wrap:wrap}}.loa-opt__form-input{position:relative}.loa-opt--text .loa-opt__form-input .loa-check,.loa-opt--text .loa-opt__form-input .loa-spinner,.loa-opt--select .loa-opt__form-input .loa-check,.loa-opt--select .loa-opt__form-input .loa-spinner{position:absolute;z-index:5;top:0;right:var(--PXS);display:flex;align-items:center;height:2.25rem}.loa-opt--text .loa-opt__form-input input.loa-input,.loa-opt--text .loa-opt__form-input select.loa-input,.loa-opt--select .loa-opt__form-input input.loa-input,.loa-opt--select .loa-opt__form-input select.loa-input{padding-right:2.25rem}.loa-opt--select .loa-opt__form-input .loa-check,.loa-opt--select .loa-opt__form-input .loa-spinner{right:calc(var(--P)*-1)}.loa-opt--check .loa-opt__form-input{display:flex;align-items:center;flex-wrap:wrap;gap:calc(var(--PXS)/2)}.loa-opt__form-actions{display:flex;align-items:center;gap:calc(var(--PXS)/2)}.loa-opt__label{display:flex;align-items:center;gap:var(--PXS);font-size:.925rem;font-weight:400;color:var(--TC--LIGHT)}.loa-opt--text .loa-opt__label,.loa-opt--check .loa-opt__label,.loa-opt--select .loa-opt__label{width:100%;max-width:200px}@media(max-width: 75em){.loa-opt--text .loa-opt__label,.loa-opt--check .loa-opt__label,.loa-opt--select .loa-opt__label{max-width:100%}}.loa-opt--check .loa-opt__label{padding-top:calc(var(--PXS)/3)}.loa-opt--text+.loa-opt--text,.loa-opt--text+.loa-opt--select,.loa-opt--select+.loa-opt--text,.loa-opt--select+.loa-opt--select{margin-top:var(--PXS)}.loa-opt--text .loa-opt__form,.loa-opt--select .loa-opt__form{align-items:flex-start}.loa-opt--text .loa-opt__label,.loa-opt--select .loa-opt__label{display:flex;align-items:center;min-height:2.25rem}.loa-opt__desc{font-size:.8rem;line-height:1.2;color:var(--C-G500)}.loa-opt__desc>i{opacity:.5}.loa-opt--check .loa-opt__desc{width:100%}.loa-opt--text .loa-opt__desc,.loa-opt--select .loa-opt__desc{padding-top:calc(var(--PXS)/2)}.loa-opt__separator{margin-top:var(--PXS);margin-left:calc(var(--P)*-1);margin-right:calc(var(--P)*-1);padding-top:var(--P);padding-left:var(--P);padding-right:var(--P);padding-bottom:var(--PXS);border-top:1px solid var(--DIVIDER)}.loa-opt__separator:first-child{margin-top:0;padding-top:0;border-top:none}.loa-opt__separator+.loa-opt--check .loa-opt__label{font-weight:500}.loa-opt__separator-name{font-size:1.125rem;font-weight:500}.loa-opt__separator-desc{font-size:1rem}.loa-btn{--c: var(--C-G600);--c-h: var(--C-G600);--bg: transparent;--bg-h: var(--C-G300);--bdc: var(--C-G300);--bdc-h: var(--C-G300);display:inline-block;height:2.25rem;padding-left:var(--PS);padding-right:var(--PS);border-radius:var(--R);font-weight:500;color:var(--c);background-color:var(--bg);border:2px solid var(--bdc);box-shadow:none;outline:none;cursor:pointer}.loa-btn:hover,.loa-btn:focus{color:var(--c-h);background-color:var(--bg-h);border:2px solid var(--bdc-h);box-shadow:none;outline:none}.loa-btn:disabled{opacity:.5;cursor:not-allowed}.loa-btn--action{--c: var(--C-BRAND--DARK);--c-h: #fff;--bg: transparent;--bg-h: var(--C-BRAND--DARK);--bdc: var(--C-BRAND--DARK);--bdc-h: var(--C-BRAND--DARK)}.loa-input{--input-bg: transparent;--input-b: 1px solid var(--C-G300);--input-sh: none;--input-p: 0 var(--PXS);height:2.25rem}.loa-input:focus{--input-b: 1px solid var(--C-BRAND);--input-sh: 0 0 0 4px var(--C-BRAND--LIGHTEN)}.loa-input--full{width:100%}.loa-checkbox__control{font-size:1.6rem;cursor:pointer}.loa-checkbox__control.fa-toggle-on{color:var(--C-BRAND--DARK)}.loa-checkbox__control.fa-toggle-off{color:var(--C-G500)}.toplevel_page_listowp,.listowp_page_listowp-license{background-color:var(--C-G100)}.loa-wrapper{--P: 20px;max-width:1500px;padding-left:15px;padding-right:var(--P)}.loa-wrapper select,.loa-wrapper input[type=text],.loa-wrapper input[type=number]{width:100%}.loa-wrapper .loa-input--full{width:100% !important}.loa-main{display:flex;flex-direction:column;gap:var(--P)}@media(min-width: 75em){.loa-main{display:grid;grid-template-columns:repeat(2, 1fr)}}.loa-header{padding:var(--P)}.loa-header__logo{display:block;max-width:170px}.loa-column{display:flex;flex-direction:column;gap:var(--P)}
     1.lo-listowp,.wp-admin{--P: 30px;--PS: calc(var(--P) / 2);--PXS: calc(var(--P) / 3);--R: 6px;--RM: calc(var(--R) * 2);--RL: calc(var(--R) * 3);--LH: 1.2;--LHM: calc(var(--LH) + .2);--LHX: calc(var(--LH) + .4);--C-APP: #fff;--C-APP-ALPHA9: rgb(255, 255, 255, .9);--C-APP-ALPHA8: rgb(255, 255, 255, .9);--C-APP-ALPHA7: rgb(255, 255, 255, .9);--C-G50: #F7FAFC;--C-G100: #EDF2F7;--C-G200: #E2E8F0;--C-G300: #CBD5E0;--C-G400: #A0AEC0;--C-G500: #718096;--C-G600: #4A5568;--C-G700: #2D3748;--C-G800: #1A202C;--C-G900: #171923;--C-G50: #f0f1f3;--C-G100: #e0e2e8;--C-G200: #c3c6d1;--C-G300: #a5abbb;--C-G400: #8991a5;--C-G500: #6d7790;--C-G600: #515e7b;--C-G700: #364767;--C-G800: #183153;--C-G900: #001c40;--C-BRAND: #00d38d;--C-BRAND--DARK:#0db07a;--C-BRAND--LIGHT: #42edb438;--C-BRAND--LIGHTEN: #62e1b738;--C-INBOX: #90A4AE;--C-INBOX--LIGHT: #E2E8F0;--C-INBOX--LIGHTEN: #e2e8f07e;--C-ALL: #4DD0E1;--C-ALL--LIGHT: #B2EBF2;--C-ALL--LIGHTEN: #b2ebf246;--C-DUE: #F44336;--C-DUE--LIGHT: #ffcfcf;--C-DUE--LIGHTEN: #feb2b254;--C-SCHEDULE: #FFA726;--C-SCHEDULE--LIGHT: #FFE0B2;--C-SCHEDULE--LIGHTEN: #ffe0b27e;--C-DONE: #26be8b;--C-DONE--LIGHT: #60c6a4;--C-DONE--LIGHTEN: #60c6a425;--C-RECU: #eec614;--C-RECU--LIGHT: rgb(235, 221, 97)8;--C-RECU--LIGHTEN: #e8d94d2e;--TC: #000;--TC--LIGHT: #555;--TC--LIGHTEN: #999;--DIVIDER: rgba(38, 45, 61, 0.15);--DIVIDER--DARK: rgba(35, 43, 58, 0.3);--DIVIDER--LIGHT: rgba(40, 48, 65, 0.08);--T: none;--T-O: none;--APP-H: 75vh;--APP-MH: 55vh;--APP-MIN-H: 750px;--APP-MAX-H: 800px;--APP-MAX-MH: 600px;--APP-W: 100%;--APP-FULLCREEN-MAX-W: 1400px;--SIDEBAR-W: 30%;--SIDEBAR-MIN-W: 280px;--SIDEBAR-MW: 55px;--SIDEBAR-MW--EXPANDED: 240px}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--R: 6px}}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--T: all .165s ease, height 0s, opacity 0s;--T-O: opacity .165s ease}}.lo-dark{--C-APP: #191a1b;--C-APP-ALPHA9: rgb(25, 26, 27, .9);--C-APP-ALPHA8: rgb(25, 26, 27, .8);--C-APP-ALPHA7: rgb(25, 26, 27, .7);--C-G900: #262628;--C-G800: #292a2b;--C-G700: #8e9092;--C-G600: #696c6e;--C-G500: #606367;--C-G400: #56595f;--C-G300: #3e4044;--C-G200: #3c3f45;--C-G100: #1d1f21;--C-G50: #1f1f22;--TC: #ffffff;--TC--LIGHT: #A0AEC0;--TC--LIGHTEN: #718096;--DIVIDER: rgba(213, 223, 243, 0.1);--DIVIDER--DARK: rgba(213, 223, 243, 0.25);--DIVIDER--LIGHT: rgba(213, 223, 243, 0.05)}.lo-listowp,.loa-wrapper{--input-bg: transparent;--input-b: none;--input-sh: none;--input-p: 0;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc;font-family:"Inter",sans-serif;font-size:16px;line-height:1.2;font-weight:normal;color:var(--TC)}.lo-listowp *,.loa-wrapper *{box-sizing:inherit;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc}.lo-listowp input[type=text],.lo-listowp input[type=number],.lo-listowp input[type=date],.lo-listowp textarea,.lo-listowp select,.loa-wrapper input[type=text],.loa-wrapper input[type=number],.loa-wrapper input[type=date],.loa-wrapper textarea,.loa-wrapper select{width:100%;margin:0;padding:var(--input-p);font-family:"Inter",sans-serif;font-size:1rem;font-weight:500;color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp input[type=text]:hover,.lo-listowp input[type=text]:focus,.lo-listowp input[type=number]:hover,.lo-listowp input[type=number]:focus,.lo-listowp input[type=date]:hover,.lo-listowp input[type=date]:focus,.lo-listowp textarea:hover,.lo-listowp textarea:focus,.lo-listowp select:hover,.lo-listowp select:focus,.loa-wrapper input[type=text]:hover,.loa-wrapper input[type=text]:focus,.loa-wrapper input[type=number]:hover,.loa-wrapper input[type=number]:focus,.loa-wrapper input[type=date]:hover,.loa-wrapper input[type=date]:focus,.loa-wrapper textarea:hover,.loa-wrapper textarea:focus,.loa-wrapper select:hover,.loa-wrapper select:focus{color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp select,.loa-wrapper select{cursor:pointer}.lo-listowp input.lo-input,.lo-listowp textarea.lo-input,.loa-wrapper input.lo-input,.loa-wrapper textarea.lo-input{padding-top:var(--PXS);padding-bottom:var(--PXS)}.lo-listowp a,.loa-wrapper a{text-decoration:none}.lo-timezone{display:flex;align-items:center;gap:calc(var(--PXS)/2);padding:calc(var(--PXS)/2) var(--PXS);background-color:var(--DIVIDER--LIGHT);border-radius:var(--RL)}.lo-timezone i{color:var(--TC--LIGHTEN)}.lo-timezone select{font-size:.8rem}.lo-gdpr>a{display:block}.lo-poweredby{position:absolute;z-index:5;right:var(--PXS);bottom:var(--PXS);font-size:.825rem;color:var(--TC--LIGHTEN)}.loa-panel{background-color:var(--C-APP);border-radius:var(--RM);box-shadow:0 1px 2px var(--C-G300),0 10px 20px var(--C-G200)}.loa-panel__header{display:flex;align-items:center;gap:var(--P);padding:var(--P);background-color:var(--C-G50);border-bottom:1px solid var(--C-G200);border-top-left-radius:var(--RM);border-top-right-radius:var(--RM)}.loa-panel__name{display:flex;align-items:center;gap:var(--PXS);font-size:1.25rem}.loa-panel__name>span{font-weight:500}.loa-panel__desc{font-size:1rem;opacity:.8}.loa-panel__desc:empty{display:none}.loa-panel__content{display:flex;flex-direction:column;gap:var(--PXS);padding:var(--P)}.loa-opt{display:flex;flex-direction:column;gap:calc(var(--PXS)/2)}.loa-opt .loa-spinner{color:var(--C-G400);animation-name:spinner;animation-duration:1s;animation-iteration-count:infinite}.loa-opt .loa-check{color:var(--C-BRAND)}@keyframes spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.loa-opt__form{display:flex;align-items:flex-start;gap:var(--PXS)}.loa-opt__form.disabled{opacity:.65}@media(max-width: 75em){.loa-opt__form{flex-wrap:wrap}}.loa-opt__form-input{position:relative}.loa-opt--text .loa-opt__form-input .loa-check,.loa-opt--text .loa-opt__form-input .loa-spinner,.loa-opt--select .loa-opt__form-input .loa-check,.loa-opt--select .loa-opt__form-input .loa-spinner{position:absolute;z-index:5;top:0;right:var(--PXS);display:flex;align-items:center;height:2.25rem}.loa-opt--text .loa-opt__form-input input.loa-input,.loa-opt--text .loa-opt__form-input select.loa-input,.loa-opt--select .loa-opt__form-input input.loa-input,.loa-opt--select .loa-opt__form-input select.loa-input{padding-right:2.25rem}.loa-opt--select .loa-opt__form-input .loa-check,.loa-opt--select .loa-opt__form-input .loa-spinner{right:calc(var(--P)*-1)}.loa-opt--check .loa-opt__form-input{display:flex;align-items:center;flex-wrap:wrap;gap:calc(var(--PXS)/2)}.loa-opt__form-actions{display:flex;align-items:center;gap:calc(var(--PXS)/2)}.loa-opt__label{display:flex;align-items:center;gap:var(--PXS);font-size:.925rem;font-weight:400;color:var(--TC--LIGHT)}.loa-opt--text .loa-opt__label,.loa-opt--check .loa-opt__label,.loa-opt--select .loa-opt__label{width:100%;max-width:200px}@media(max-width: 75em){.loa-opt--text .loa-opt__label,.loa-opt--check .loa-opt__label,.loa-opt--select .loa-opt__label{max-width:100%}}.loa-opt--check .loa-opt__label{padding-top:calc(var(--PXS)/3)}.loa-opt--text+.loa-opt--text,.loa-opt--text+.loa-opt--select,.loa-opt--select+.loa-opt--text,.loa-opt--select+.loa-opt--select{margin-top:var(--PXS)}.loa-opt--text .loa-opt__form,.loa-opt--select .loa-opt__form{align-items:flex-start}.loa-opt--text .loa-opt__label,.loa-opt--select .loa-opt__label{display:flex;align-items:center;min-height:2.25rem}.loa-opt__desc{font-size:.8rem;line-height:1.2;color:var(--C-G500)}.loa-opt__desc>i{opacity:.5}.loa-opt--check .loa-opt__desc{width:100%}.loa-opt--text .loa-opt__desc,.loa-opt--select .loa-opt__desc{padding-top:calc(var(--PXS)/2)}.loa-opt__separator{margin-top:var(--PXS);margin-left:calc(var(--P)*-1);margin-right:calc(var(--P)*-1);padding-top:var(--P);padding-left:var(--P);padding-right:var(--P);padding-bottom:var(--PXS);border-top:1px solid var(--DIVIDER)}.loa-opt__separator:first-child{margin-top:0;padding-top:0;border-top:none}.loa-opt__separator+.loa-opt--check .loa-opt__label{font-weight:500}.loa-opt__separator-name{font-size:1.125rem;font-weight:500}.loa-opt__separator-desc{font-size:1rem}.loa-btn{--c: var(--C-G600);--c-h: var(--C-G600);--bg: transparent;--bg-h: var(--C-G300);--bdc: var(--C-G300);--bdc-h: var(--C-G300);display:inline-block;height:2.25rem;padding-left:var(--PS);padding-right:var(--PS);border-radius:var(--R);font-weight:500;color:var(--c);background-color:var(--bg);border:2px solid var(--bdc);box-shadow:none;outline:none;cursor:pointer}.loa-btn:hover,.loa-btn:focus{color:var(--c-h);background-color:var(--bg-h);border:2px solid var(--bdc-h);box-shadow:none;outline:none}.loa-btn:disabled{opacity:.5;cursor:not-allowed}.loa-btn--action{--c: var(--C-BRAND--DARK);--c-h: #fff;--bg: transparent;--bg-h: var(--C-BRAND--DARK);--bdc: var(--C-BRAND--DARK);--bdc-h: var(--C-BRAND--DARK)}.loa-input{--input-bg: transparent;--input-b: 1px solid var(--C-G300);--input-sh: none;--input-p: 0 var(--PXS);height:2.25rem}.loa-input:focus{--input-b: 1px solid var(--C-BRAND);--input-sh: 0 0 0 4px var(--C-BRAND--LIGHTEN)}.loa-input--full{width:100%}.loa-checkbox__control{font-size:1.6rem;cursor:pointer}.loa-checkbox__control.fa-toggle-on{color:var(--C-BRAND--DARK)}.loa-checkbox__control.fa-toggle-off{color:var(--C-G500)}.toplevel_page_listowp,.listowp_page_listowp-license{background-color:var(--C-G100)}.loa-wrapper{--P: 20px;max-width:1500px;padding-left:15px;padding-right:var(--P)}.loa-wrapper select,.loa-wrapper input[type=text],.loa-wrapper input[type=number]{width:100%}.loa-wrapper .loa-input--full{width:100% !important}.loa-main{display:flex;flex-direction:column;gap:var(--P)}@media(min-width: 75em){.loa-main{display:grid;grid-template-columns:repeat(2, 1fr)}}.loa-header{padding:var(--P)}.loa-header__logo{display:block;max-width:170px}.loa-column{display:flex;flex-direction:column;gap:var(--P)}
  • listowp/trunk/assets/css/frontend.css

    r2878127 r2884416  
    1 .lo-listowp,.wp-admin{--P: 30px;--PS: calc(var(--P) / 1.5);--PXS: calc(var(--P) / 3);--R: 6px;--RM: calc(var(--R) * 2);--RL: calc(var(--R) * 3);--LH: 1.2;--LHM: calc(var(--LH) + .2);--LHX: calc(var(--LH) + .4);--C-APP: #fff;--C-G50: #F7FAFC;--C-G100: #EDF2F7;--C-G200: #E2E8F0;--C-G300: #CBD5E0;--C-G400: #A0AEC0;--C-G500: #718096;--C-G600: #4A5568;--C-G700: #2D3748;--C-G800: #1A202C;--C-G900: #171923;--C-BRAND: #00d38d;--C-BRAND--DARK:#0db07a;--C-BRAND--LIGHT: #42edb438;--C-BRAND--LIGHTEN: #62e1b738;--C-INBOX: #90A4AE;--C-INBOX--LIGHT: #E2E8F0;--C-INBOX--LIGHTEN: #e2e8f07e;--C-ALL: #4DD0E1;--C-ALL--LIGHT: #B2EBF2;--C-ALL--LIGHTEN: #b2ebf246;--C-DUE: #F44336;--C-DUE--LIGHT: #ffcfcf;--C-DUE--LIGHTEN: #feb2b254;--C-SCHEDULE: #FFA726;--C-SCHEDULE--LIGHT: #FFE0B2;--C-SCHEDULE--LIGHTEN: #ffe0b27e;--C-DONE: #26be8b;--C-DONE--LIGHT: #60c6a4;--C-DONE--LIGHTEN: #60c6a425;--C-RECU: #eec614;--C-RECU--LIGHT: rgb(235, 221, 97)8;--C-RECU--LIGHTEN: #e8d94d2e;--TC: #000;--TC--LIGHT: #555;--TC--LIGHTEN: #999;--DIVIDER: rgba(22, 27, 37, 0.15);--DIVIDER--DARK: rgba(22, 27, 37, 0.3);--DIVIDER--LIGHT: rgba(22, 27, 37, 0.08);--T: none;--T-O: none;--APP-H: 75vh;--APP-MH: 55vh;--APP-MIN-H: 550px;--APP-MAX-H: 800px;--APP-MAX-MH: 600px;--APP-W: 100%;--APP-FULLCREEN-MAX-W: 1400px;--SIDEBAR-W: 30%;--SIDEBAR-MIN-W: 280px;--SIDEBAR-MW: 55px;--SIDEBAR-MW--EXPANDED: 240px}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--R: 6px}}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--T: all .165s ease, height 0s, opacity 0s;--T-O: opacity .165s ease}}.lo-dark{--C-APP: #1A202C;--C-G900: #171923;--C-G800: #1A202C;--C-G700: #E2E8F0;--C-G600: #CBD5E0;--C-G500: #A0AEC0;--C-G400: #718096;--C-G300: #4A5568;--C-G200: #2D3748;--C-G100: #161b25;--C-G50: #171923;--TC: #ffffff;--TC--LIGHT: #A0AEC0;--TC--LIGHTEN: #718096;--DIVIDER: rgba(213, 223, 243, 0.1);--DIVIDER--DARK: rgba(213, 223, 243, 0.25);--DIVIDER--LIGHT: rgba(213, 223, 243, 0.05)}.lo-listowp,.loa-wrapper{--input-bg: transparent;--input-b: none;--input-sh: none;--input-p: 0;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc;font-family:"Inter",sans-serif;font-size:16px;line-height:1.2;font-weight:normal;color:var(--TC)}.lo-listowp *,.loa-wrapper *{box-sizing:inherit;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc}.lo-listowp input[type=text],.lo-listowp input[type=number],.lo-listowp input[type=date],.lo-listowp textarea,.lo-listowp select,.loa-wrapper input[type=text],.loa-wrapper input[type=number],.loa-wrapper input[type=date],.loa-wrapper textarea,.loa-wrapper select{width:100%;margin:0;padding:var(--input-p);font-family:"Inter",sans-serif;font-size:1rem;font-weight:500;color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp input[type=text]:hover,.lo-listowp input[type=text]:focus,.lo-listowp input[type=number]:hover,.lo-listowp input[type=number]:focus,.lo-listowp input[type=date]:hover,.lo-listowp input[type=date]:focus,.lo-listowp textarea:hover,.lo-listowp textarea:focus,.lo-listowp select:hover,.lo-listowp select:focus,.loa-wrapper input[type=text]:hover,.loa-wrapper input[type=text]:focus,.loa-wrapper input[type=number]:hover,.loa-wrapper input[type=number]:focus,.loa-wrapper input[type=date]:hover,.loa-wrapper input[type=date]:focus,.loa-wrapper textarea:hover,.loa-wrapper textarea:focus,.loa-wrapper select:hover,.loa-wrapper select:focus{color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp select,.loa-wrapper select{cursor:pointer}.lo-listowp input.lo-input,.lo-listowp textarea.lo-input,.loa-wrapper input.lo-input,.loa-wrapper textarea.lo-input{padding-top:var(--PXS);padding-bottom:var(--PXS)}.lo-listowp a,.loa-wrapper a{text-decoration:none}.lo-timezone{display:flex;align-items:center;gap:calc(var(--PXS)/2);padding:calc(var(--PXS)/2) var(--PXS);background-color:var(--DIVIDER--LIGHT);border-radius:var(--RL)}.lo-timezone i{color:var(--TC--LIGHTEN)}.lo-timezone select{font-size:.8rem}.lo-gdpr>a{display:block}.lo-poweredby{position:absolute;z-index:5;right:var(--PXS);bottom:var(--PXS);font-size:.825rem;color:var(--TC--LIGHTEN)}.lo-btn{--bg: transparent;--bg-hover: transparent;--color: inherit;--color-hover: inherit;--radius: var(--RL);display:inline-flex;align-items:center;justify-content:center;gap:var(--PXS);height:auto;margin:0;padding:0;font-family:"Inter",sans-serif;font-size:1rem;color:var(--color);background-color:var(--bg);border:none;border-radius:var(--radius);box-shadow:none;outline:none;transition:var(--T);cursor:pointer}.lo-btn:hover{color:var(--color-hover);background-color:var(--bg-hover)}.lo-btn:focus{color:var(--color);background-color:var(--bg)}.lo-btn:focus:hover{color:var(--color-hover);background-color:var(--bg-hover)}.lo-btn:disabled{opacity:.5;cursor:not-allowed}.lo-btn--default{padding:0 var(--PS);height:2.35rem}.lo-btn--link{--bg: transparent;--bg-hover: var(--C-G200);--color: var(--TC--LIGHT);--color-hover: var(--TC);--border-color: var(--C-G300);border:1px solid var(--border-color)}.lo-btn--action{--bg-hover: var(--C-BRAND);--color: var(--C-BRAND--DARK);--color-hover: #fff;padding:0 var(--PS);height:2.35rem;border:2px solid var(--bg-hover)}.lo-tip{--tip-bg: var(--C-G600);--op: .95;--arrow-size: 8px;--arrow-gap: calc(100% - (var(--arrow-size) - 1px));--transform: translateY(10px) translateX(-50%);--transform--h: translateY(-10px) translateX(-50%);position:relative}.lo-tip:before{content:" ";position:absolute;z-index:9995;left:50%;bottom:var(--arrow-gap);transform:var(--transform);width:0;height:0;border-left:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid rgba(0,0,0,0);border-top:var(--arrow-size) solid var(--tip-bg);opacity:0;pointer-events:none;transition:var(--T),var(--T-O);transition-duration:.5s}.lo-tip:after{content:attr(aria-label);position:absolute;z-index:9999;left:50%;bottom:100%;transform:var(--transform);display:inline-flex;align-items:center;height:1.8rem;padding-left:var(--PXS);padding-right:var(--PXS);font-family:"Inter",sans-serif;font-size:.8rem;font-weight:400;line-height:1.2;white-space:nowrap;color:#fff;background-color:var(--tip-bg);border-radius:var(--R);box-shadow:rgba(50,50,93,.25) 0px 2px 5px -1px,rgba(0,0,0,.3) 0px 1px 3px -1px;opacity:0;pointer-events:none;transition:var(--T),var(--T-O);transition-duration:.5s}.lo-tip:hover:before,.lo-tip:hover:after{transform:var(--transform--h);opacity:var(--op)}@media(max-width: 61.24em){.lo-tip:before,.lo-tip:after{display:none}}.lo-tip--left{--arrow-gap: calc(100% - (var(--arrow-size) + 6px));--transform: translateY(-50%) translateX(10px);--transform--h: translateY(-50%) translateX(-10px)}.lo-tip--left:before{top:50%;left:auto;right:var(--arrow-gap);bottom:auto;border-top:var(--arrow-size) solid rgba(0,0,0,0);border-left:var(--arrow-size) solid var(--tip-bg);border-bottom:var(--arrow-size) solid rgba(0,0,0,0)}.lo-tip--left:after{top:50%;left:auto;right:100%;bottom:auto}.lo-tip--right{--arrow-gap: calc(100% - (var(--arrow-size) + 6px));--transform: translateY(-50%) translateX(-10px);--transform--h: translateY(-50%) translateX(10px)}.lo-tip--right:before{top:50%;left:var(--arrow-gap);bottom:auto;border-top:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid var(--tip-bg);border-bottom:var(--arrow-size) solid rgba(0,0,0,0)}.lo-tip--right:after{top:50%;left:100%;bottom:auto}.lo-tip--bottom{--transform: translateY(-10px) translateX(-50%);--transform--h: translateY(10px) translateX(-50%)}.lo-tip--bottom:before{top:var(--arrow-gap);bottom:auto;border-top:none;border-left:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid rgba(0,0,0,0);border-bottom:var(--arrow-size) solid var(--tip-bg)}.lo-tip--bottom:after{top:100%;bottom:auto}.lo-tip--alt:after{content:attr(aria-label-alt)}.lo-readmore{position:relative;color:var(--TC--LIGHTEN);transition:var(--T)}.lo-task .lo-readmore{margin-left:auto;opacity:0}.lo-readmore>i:before{position:relative;z-index:1}.lo-readmore>i:after{content:"";position:absolute;z-index:0;top:50%;left:50%;transform:translate(-50%, -50%);width:1.75em;height:1.75em;background-color:var(--DIVIDER--LIGHT);border-radius:50%;opacity:0;transition:var(--T-O);transition-duration:.4s}.lo-task .lo-readmore>i:after{display:none}.lo-readmore:hover{color:var(--TC--LIGHT)}.lo-readmore:hover>i:after{opacity:1}.lo-readmore:focus{color:var(--TC--LIGHTEN)}.lo-readmore:focus:hover{color:var(--TC--LIGHT)}@media(max-width: 61.24em){.lo-task--full .lo-readmore{opacity:1}}@media(min-width: 61.25em){.lo-task:hover .lo-readmore{opacity:1}}.lo-wrapper{--w: var(--APP-W);--h: var(--APP-H);--min-h: var(--APP-MIN-H);--max-h: var(--APP-MAX-H);position:relative;display:flex;width:var(w);min-height:var(--min-h);max-height:max(var(--h),var(--max-h));margin-left:auto;margin-right:auto}@media(max-width: 61.24em){.lo-wrapper{--h: var(--APP-MH);--max-h: var(--APP-MAX-MH);padding-left:var(--SIDEBAR-MW)}}.lo-wrapper__toggle{--bg: transparent;--bg-hover: transparent;--color: var(--TC--LIGHT);--color-hover: var(--TC);position:absolute;z-index:100;top:1px;right:1px;display:flex;align-items:center;justify-content:center;width:34px;height:34px}.lo-wrapper--fullscreen .lo-wrapper__toggle{top:1px;right:1px}.lo-wrapper--fullscreen .lo-wrapper__toggle>i:before{content:""}.lo-wrapper--fullscreen{--w: 100%;--h: 100%;--min-h: 100%;--max-h: 100%;position:fixed;top:0;left:0;right:0;bottom:0;z-index:99999;max-width:var(--APP-FULLCREEN-MAX-W)}.lo-wrapper--fullscreen:before{content:" ";position:fixed;z-index:-1;top:0;left:0;right:0;bottom:0;display:block;background-color:var(--C-G900);opacity:.95}.lo-sidebar{--width: var(--SIDEBAR-MW);position:relative;display:flex;flex-direction:column;width:var(--width);min-width:var(--width);background-color:var(--C-APP);border-top-left-radius:var(--RL);border-bottom-left-radius:var(--RL);border:1px solid var(--DIVIDER);border-right:none}@media(max-width: 61.24em){.lo-sidebar{position:absolute;top:0;left:0;bottom:0;z-index:100}}@media(min-width: 61.25em){.lo-sidebar{--width: max(var(--SIDEBAR-MIN-W), var(--SIDEBAR-W))}}.lo-wrapper--fullscreen .lo-sidebar{border-radius:0}.lo-sidebar__toggle{--radius: 0;display:flex;align-items:center;justify-content:center;min-height:var(--SIDEBAR-MW);height:var(--SIDEBAR-MW);font-size:1.25rem;color:var(--TC--LIGHT);border-top:1px solid var(--DIVIDER)}.lo-sidebar--expanded .lo-sidebar__toggle>i{transform:rotate(180deg)}@media(min-width: 61.25em){.lo-sidebar__toggle{display:none}}.lo-sidebar__cover{content:" ";position:absolute;top:0;left:0;right:0;bottom:0;z-index:90;display:none;background-color:rgba(0,0,0,.5);border-radius:var(--RL)}.lo-wrapper--fullscreen .lo-sidebar__cover{border-radius:0}.lo-sidebar--expanded{--width: var(--SIDEBAR-MW--EXPANDED)}.lo-sidebar--expanded+.lo-sidebar__cover{display:block}.lo-main{display:flex;flex-direction:column;width:100%;min-width:0;background-color:var(--C-G100);border:1px solid var(--DIVIDER--LIGHT);border-top-right-radius:var(--RL);border-bottom-right-radius:var(--RL)}.lo-wrapper--fullscreen .lo-main{border-radius:0}.lo-lists__inner{display:flex;flex-direction:column}.lo-lists__form{position:relative;border-top:1px solid var(--DIVIDER)}.lo-lists__add-wrapper{position:relative;z-index:5;display:none;margin:calc(var(--PXS)/2)}.lo-sidebar--expanded .lo-lists__add-wrapper{display:block}@media(min-width: 61.25em){.lo-lists__add-wrapper{display:block}}.lo-lists__add{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND);display:flex;align-items:center;gap:var(--PXS);padding:var(--PXS) calc(var(--PS) - (var(--PXS)/2 + 2px));font-size:1rem;font-weight:500;color:var(--color);background-color:var(--bg);border:2px dashed var(--border-c);box-shadow:0 0 0 4px var(--shadow-c);transition:var(--T);transition-duration:.25s;cursor:pointer}.lo-lists__add>i{color:var(--i-color);transition:var(--T);transition-duration:.4s}@media(max-width: 61.24em){.lo-lists__add{justify-content:center}}@media(min-width: 61.25em){.lo-lists__add{--border-c: var(--C-G300);--color: var(--C-G600);--bg: transparent;--shadow-c: transparent;--i-color: var(--C-G400)}.lo-lists__add>i{--size: 1.2rem;font-size:calc(var(--size)*1.8)}.lo-lists__add:hover{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND)}}.lo-lists__add-form{display:none;align-items:center;padding:var(--PXS) var(--PS)}.lo-sidebar--expanded .lo-lists__add-form{display:flex}@media(min-width: 61.25em){.lo-lists__add-form{display:flex}}.lo-lists__add-form-actions{display:flex;align-items:center;justify-content:space-between}.lo-lists__add-form-action{--bg: transparent;--bg-hover: transparent;--color: var(--C-BRAND);--color-hover: var(--C-BRAND);position:relative;padding:var(--PXS);font-size:1.35rem}.lo-lists__add-form-action>i{position:relative;z-index:1}.lo-lists__add-form-action:last-child{--color: var(--TC--LIGHT);--color-hover: var(--TC--LIGHT);padding-right:0}.lo-lists__add-form-action:disabled{--color: var(--TC--LIGHTEN);--color-hover: var(--TC--LIGHTEN)}.lo-lists--smart{padding-bottom:0}.lo-lists--smart .lo-lists__inner{min-height:63px}.lo-lists--custom{flex-grow:1;overflow:auto;border-bottom-left-radius:var(--RL);box-shadow:inset 0 3px 3px rgba(0,0,0,.08)}.lo-wrapper--fullscreen .lo-lists--custom{border-radius:0}.lo-list{--bg-color: var(--C-INBOX--LIGHT);--bg-color-hover: rgba(54, 74, 87, 0.025);--icon-color: var(--C-INBOX);--icon-color-active: var(--C-INBOX);--shadow-active: var(--C-INBOX);--shadow-active-2: var(--C-INBOX--LIGHTEN);position:relative;color:var(--TC);border-top:1px solid var(--DIVIDER);box-shadow:0 0 0 1px rgba(0,0,0,0);transition:var(--T);cursor:pointer}.lo-lists--smart .lo-list:first-child{border-top:none;border-top-left-radius:var(--RL)}.lo-wrapper--fullscreen .lo-lists--smart .lo-list:first-child{border-radius:0}.lo-lists--smart .lo-list:before{display:none}.lo-list:hover{color:var(--TC);background-color:var(--bg-color-hover)}.lo-list.active{--icon-color: var(--icon-color-active);color:var(--TC);border-top:1px solid rgba(0,0,0,0);background-color:var(--shadow-active-2);box-shadow:0 0 0 1px var(--shadow-active)}.lo-list__inner{display:flex;gap:var(--PXS);padding-top:var(--PXS);padding-bottom:var(--PXS)}.lo-lists--smart .lo-list__inner,.lo-lists__add .lo-list__inner{align-items:center}.lo-sidebar--expanded .lo-list__inner{padding:var(--PXS)}@media(max-width: 61.24em){.lo-list__inner{justify-content:center}}@media(min-width: 61.25em){.lo-list__inner{min-height:63px;padding:var(--PXS) var(--PS)}}.lo-list__name{display:none}.lo-list__name>span{word-break:break-word}.lo-sidebar--expanded .lo-list__name{display:flex;flex-direction:column;flex-grow:1;gap:calc(var(--PXS)/2)}@media(min-width: 61.25em){.lo-list__name{display:flex;flex-direction:column;flex-grow:1;gap:calc(var(--PXS)/2)}}.lo-list__count{display:flex;align-items:center;gap:calc(var(--PXS)/2);font-size:.8rem;font-weight:normal;opacity:.5}.active .lo-list__count,.lo-tasks__header .lo-list__count{opacity:1}.lo-list__count>span{display:flex;align-items:center;justify-content:center;gap:calc(var(--PXS)/2);height:1.115rem;padding-left:calc(var(--PXS)/2);padding-right:calc(var(--PXS)/2);line-height:1;color:var(--TC);background-color:var(--bg-color);border-radius:calc(var(--R)/1.5)}.lo-list__count>span>i{color:var(--icon-color)}@media(max-width: 61.24em){.lo-list__count{gap:calc(var(--PXS)/3)}.lo-lists--smart .lo-list__count{position:absolute;top:calc(var(--PXS)/3);right:calc(var(--PXS)/3)}}.lo-list__icon{--size: 1rem;display:flex;align-items:center;justify-content:center;width:calc(var(--size)*1.8);min-width:calc(var(--size)*1.8);height:calc(var(--size)*1.8);font-size:.925rem;font-style:normal;color:#fff;background-color:var(--icon-color);border-radius:50%;box-shadow:0 0 0 0px var(--shadow-active-2);transition:var(--T)}.lo-list__icon:before{font-size:var(--size)}.lo-list:hover .lo-list__icon{box-shadow:0 0 0 4px var(--shadow-active-2),0 0 0 4px var(--shadow-active-2)}.lo-list.active .lo-list__icon{box-shadow:0 0 0 6px var(--shadow-active-2)}@media(min-width: 61.25em){.lo-list__icon{--size: 1.2rem}.lo-lists--custom .lo-list__icon{margin-top:calc(var(--PXS)/2 - 1px)}}.lo-list--inbox,.lo-list[data-id=inbox]{--bg-color: var(--C-INBOX--LIGHT);--icon-color: var(--C-INBOX);--icon-color-active: var(--C-INBOX);--shadow-active: var(--C-INBOX);--shadow-active-2: var(--C-INBOX--LIGHTEN)}.lo-list--all,.lo-list[data-id=all]{--bg-color: var(--C-ALL--LIGHT);--icon-color: var(--C-ALL);--icon-color-active: var(--C-ALL);--shadow-active: var(--C-ALL);--shadow-active-2: var(--C-ALL--LIGHTEN)}.lo-list[data-id=due]{--bg-color: var(--C-DUE--LIGHT);--icon-color: var(--C-DUE);--icon-color-active: var(--C-DUE);--shadow-active: var(--C-DUE);--shadow-active-2: var(--C-DUE--LIGHTEN)}.lo-list--due .lo-list__count>span:nth-child(2){--bg-color: var(--C-DUE--LIGHT);--icon-color: var(--C-DUE);--icon-color-active: var(--C-DUE)}.lo-list--scheduled,.lo-list[data-id=scheduled]{--bg-color: var(--C-SCHEDULE--LIGHT);--icon-color: var(--C-SCHEDULE);--icon-color-active: var(--C-SCHEDULE);--shadow-active: var(--C-SCHEDULE);--shadow-active-2: var(--C-SCHEDULE--LIGHTEN)}.lo-list--done,.lo-list[data-id=done]{--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE);--shadow-active: var(--C-DONE);--shadow-active-2: var(--C-DONE--LIGHTEN)}.lo-list--recurring,.lo-list[data-id=recurring]{--bg-color: var(--C-RECU--LIGHT);--icon-color: var(--C-RECU);--icon-color-active: var(--C-RECU);--shadow-active: var(--C-RECU);--shadow-active-2: var(--C-RECU--LIGHTEN)}.lo-list__info{position:relative;padding:calc(var(--PXS) + 4px);line-height:var(--LHX)}@media(min-width: 61.25em){.lo-list__info{display:flex;align-items:center;min-height:127px;padding:var(--PS) var(--P)}}.lo-list__info:hover .lo-list__edit{opacity:1}.lo-list__info:hover .lo-list__info-title{gap:var(--PXS)}.lo-list__info-data{flex-grow:1;min-width:0}.lo-list__info-title{display:inline-flex;align-items:center;gap:0;font-size:1.2rem;line-height:1.2;color:var(--TC);transition:var(--T)}.lo-list__info-title .lo-list__edit{--color: var(--TC--LIGHTEN);--color-hover: var(--TC);font-size:.85rem;font-weight:bold;opacity:0;transition:var(--T),var(--T-O);cursor:pointer}.lo-list__info-title:hover{gap:var(--PXS)}.lo-wrapper--fullscreen .lo-list__info-title{padding-right:var(--PS)}.lo-list__info-desc{color:var(--TC--LIGHT);height:calc(var(--LHX)*1em);overflow:hidden;transition:var(--T)}.lo-list__info-desc:empty{opacity:.5}.lo-list__info-desc:empty:before{content:attr(data-placeholder)}.lo-list__info-count{--bg-color: var(--C-INBOX--LIGHT);--bg-color-hover: rgba(54, 74, 87, 0.025);--icon-color: var(--C-INBOX);--icon-color-active: var(--C-INBOX);--shadow-active: var(--C-INBOX);--shadow-active-2: var(--C-INBOX--LIGHTEN);padding-top:var(--PXS);font-size:.925rem}.lo-list__info-count>span:nth-child(2){--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE)}.lo-list__info-count>span:nth-child(3){--bg-color: var(--C-DUE--LIGHT);--icon-color: var(--C-DUE);--icon-color-active: var(--C-DUE)}.lo-list__count{gap:var(--PXS)}.lo-list__count>span{padding-left:0;padding-right:0;background-color:rgba(0,0,0,0)}.lo-list__count>span:nth-child(2){--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE)}.lo-list--due .lo-list__count>span:nth-child(2){--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE)}.lo-list__icon{position:relative}.lo-list__icon-count{position:absolute;top:-3px;right:-8px;background:#f44336;border:2px solid #fff;font-weight:bold;padding:0 2px;min-width:18px;font-family:"Inter",sans-serif;font-size:.6rem;line-height:1;font-weight:400;border-radius:10px;display:flex;height:18px;align-items:center;justify-content:center}.active .lo-list__icon-count{border-color:var(--bg-color)}.lo-tasks{--mobile-padd: 4px;display:flex;flex-direction:column;gap:5px;height:100%;padding:var(--mobile-padd);padding-bottom:50px;overflow:auto}@media(min-width: 61.25em){.lo-tasks{padding:var(--PXS);padding-bottom:50px;gap:var(--PXS)}}.lo-tasks__header{position:relative;background-color:var(--C-APP);border-bottom:1px solid var(--DIVIDER);border-top-right-radius:var(--RL)}.lo-tasks__actions{display:flex;align-items:center;gap:var(--PXS);color:var(--TC--LIGHT)}.lo-tasks__delete{--size: 36px;position:relative;display:flex;align-items:center;justify-content:center;gap:var(--PXS);min-width:var(--size);height:var(--size);margin-right:auto;padding-left:calc(var(--PXS)/2);padding-right:calc(var(--PXS)/2);font-size:1rem;background-color:var(--C-APP);border:1px solid var(--C-G300);border-radius:var(--RL);transition:var(--T)}.lo-tasks__delete button,.lo-tasks__delete span{--color: var(--TC--LIGHT);--color-hover: var(--C-DUE);color:var(--TC--LIGHT);transition:var(--T);cursor:pointer}.lo-tasks__delete button:hover,.lo-tasks__delete span:hover{color:var(--TC)}.lo-tasks__delete:hover{background-color:var(--C-DUE--LIGHTEN);border:1px solid var(--C-DUE--LIGHT)}.lo-tasks__delete:hover button,.lo-tasks__delete:hover span{color:var(--C-DUE)}.lo-tasks__delete-toggle>span,.lo-tasks__delete-toggle>div{position:absolute;top:50%;right:0;transform:translateY(-50%);display:block;width:var(--size);height:var(--size);border-radius:var(--RL)}.lo-tasks__delete-opt{display:flex;align-items:center;gap:var(--PXS);padding-left:var(--PXS)}.lo-tasks__delete-opt a,.lo-tasks__delete-opt span{font-weight:500}.lo-tasks__delete-close{display:flex;align-items:center;justify-content:center;width:calc(var(--size) - var(--PXS))}.lo-tasks__delete-close>span,.lo-tasks__delete-close>div{position:absolute;top:50%;transform:translateY(-50%);display:block;width:var(--size);height:var(--size);border-radius:var(--RL);transition:var(--T)}.lo-tasks__delete-close:hover>span,.lo-tasks__delete-close:hover>div{background-color:var(--C-DUE--LIGHTEN)}.lo-tasks__form{position:relative;display:flex;flex-direction:column;gap:var(--PS)}.lo-tasks__add-wrapper{position:relative;z-index:5;padding:4px;padding-bottom:0}@media(min-width: 61.25em){.lo-tasks__add-wrapper{padding:var(--PXS);padding-bottom:0}}.lo-tasks__add{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND);display:flex;align-items:center;gap:calc(var(--PXS)/2);padding:var(--PXS) calc(var(--PS) - 2px);font-size:1rem;font-weight:500;color:var(--color);background-color:var(--bg);border:2px dashed var(--border-c);border-radius:var(--R);box-shadow:0 0 0 0 var(--shadow-c);transition:var(--T);transition-duration:.25s;cursor:pointer}.lo-tasks__add>i{color:var(--i-color);transition:var(--T);transition-duration:.4s}@media(max-width: 61.24em){.lo-tasks__add{justify-content:center}}@media(min-width: 61.25em){.lo-tasks__add{--border-c: var(--C-G300);--color: var(--C-G600);--bg: transparent;--shadow-c: transparent;--i-color: var(--C-G400);gap:var(--PXS);box-shadow:0 0 0 4px var(--shadow-c)}.lo-tasks__add:hover{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND)}}.lo-tasks__add-form{display:flex;align-items:center;padding:var(--PXS) calc(var(--PXS) + 4px);border-top:1px dashed var(--DIVIDER)}@media(min-width: 61.25em){.lo-tasks__add-form{padding:var(--PXS) var(--P)}}.lo-tasks__add-form-actions{display:flex;align-items:center;justify-content:space-between}.lo-tasks__add-form-action{--size: 34px;--font-size: 1.35rem;--bg: transparent;--bg-hover: transparent;--color: var(--C-BRAND);--color-hover: var(--C-BRAND);position:relative;padding:var(--PXS);font-size:var(--font-size)}.lo-tasks__add-form-action>i{position:relative;z-index:1}.lo-tasks__add-form-action:last-child{--color: var(--TC--LIGHT);--color-hover: var(--TC--LIGHT);padding-right:0}.lo-tasks__add-form-action:disabled{--color: var(--TC--LIGHTEN);--color-hover: var(--TC--LIGHTEN)}.lo-tasks__edit{display:flex;flex-direction:column;width:100%;gap:var(--PXS)}.lo-tasks__edit-form{display:flex;flex-direction:column}.lo-tasks__edit-form input.lo-input,.lo-tasks__edit-form textarea.lo-input{padding-top:2px;padding-bottom:2px;font-weight:400;transition:none}.lo-tasks__edit-form input.lo-input:first-child,.lo-tasks__edit-form textarea.lo-input:first-child{font-size:1.2rem}.lo-tasks__edit-form input.lo-input:focus,.lo-tasks__edit-form textarea.lo-input:focus{background-color:var(--C-G50);box-shadow:-2px 0 0 var(--C-G50),2px 0 0 var(--C-G50)}.lo-tasks__edit-actions{display:flex;align-items:center;justify-content:flex-end;gap:calc(var(--PXS)/2)}.lo-tasks__empty{display:flex;align-items:center;gap:var(--PXS);padding:var(--PXS) calc(var(--PS) - 2px);font-size:1rem;color:var(--C-G500);border:2px dashed var(--C-G300);border-radius:var(--R)}.lo-tasks__empty>i{color:var(--C-G400)}.lo-task{--bg-color: var(--C-APP);--shadow: var(--DIVIDER--LIGHT);--shadow-hover-1: var(--C-G400);--shadow-hover-2: var(--C-G200);position:relative;flex-shrink:0;padding:var(--PXS);color:var(--TC);background-color:var(--bg-color);border-radius:var(--R);box-shadow:0 0 0 1px var(--shadow);transition:var(--T);transition-duration:.25s}.lo-task:hover{--bg-color: var(--C-APP);z-index:1;color:var(--TC);box-shadow:0 0 0 2px var(--shadow-hover-1),0 0 0 4px var(--shadow-hover-2)}.lo-task:focus{color:var(--TC)}@media(min-width: 61.25em){.lo-task{display:flex;align-items:flex-start;gap:var(--PXS);padding:var(--PS)}}.lo-task__edit-toggle{font-size:.85rem;color:var(--TC--LIGHTEN);transition:var(--T),var(--T-O);opacity:0;cursor:pointer}@media(max-width: 61.24em){.lo-task--full .lo-task__edit-toggle{opacity:1}}@media(min-width: 61.25em){.lo-task:hover .lo-task__edit-toggle{opacity:1}}.lo-task__edit-form{display:flex;flex-direction:column}.lo-task__edit-form input.lo-input,.lo-task__edit-form textarea.lo-input{padding-top:2px;padding-bottom:2px;font-size:1rem;font-weight:400;transition:none}.lo-task__edit-form input.lo-input:last-child,.lo-task__edit-form textarea.lo-input:last-child{font-size:.825rem}.lo-task__edit-form input.lo-input:focus,.lo-task__edit-form textarea.lo-input:focus{background-color:var(--C-G50);box-shadow:-2px 0 0 var(--C-G50),2px 0 0 var(--C-G50)}.lo-task__edit-actions{display:flex;align-items:center;justify-content:flex-end;gap:calc(var(--PXS)/2);padding-top:var(--PXS)}.lo-task__check-wrapper{position:absolute;top:var(--PXS);right:var(--PXS)}@media(min-width: 61.25em){.lo-task__check-wrapper{top:var(--PS);right:var(--PS)}}.lo-task__check{cursor:pointer}.lo-task__check>i{font-size:1.45rem;color:var(--C-G400);transition:var(--T)}.lo-task__check>i:hover{color:var(--C-DONE)}.lo-task__check>i:hover:before{content:"";font-weight:bold}.lo-task__name{flex-grow:1}.lo-task__name-title{display:flex;align-items:center;gap:0;padding-right:var(--P);line-height:var(--LHM);transition:var(--T)}.lo-task__name-title .lo-input{width:100%}.lo-task__name-title:hover{color:var(--TC)}.lo-task:hover .lo-task__name-title{gap:var(--PXS)}.lo-task--done .lo-task__name-title{color:var(--TC--LIGHT);text-decoration:line-through;text-decoration-color:var(--DIVIDER--DARK)}.lo-task__name-desc{font-size:.825rem;line-height:var(--LHX);color:var(--TC--LIGHT)}@media(max-width: 61.24em){.lo-task__name-desc{margin-top:var(--PXS)}.lo-task__name-desc:empty{margin-top:0}}.lo-task__name-desc--empty{opacity:.5}.lo-task__name-meta{display:flex;align-items:center;gap:calc(var(--PXS)/2);padding-top:var(--PXS)}.lo-task--done .lo-task__name-meta{opacity:.75}@media(min-width: 61.25em){.lo-task--edit .lo-task__name-meta{position:absolute;left:var(--PS);bottom:var(--PS)}}.lo-task__collapse{position:absolute;z-index:5;top:calc(var(--PXS)/2);right:calc(var(--PXS)/2);color:var(--TC--LIGHTEN);transition:var(--T);cursor:pointer}.lo-task__collapse:hover{color:var(--TC)}.lo-task__delete{cursor:pointer}@media(min-width: 61.25em){.lo-task__delete{margin-right:0}}.lo-task__meta{--c: var(--C-G600);--ic: var(--C-G500);--bg: var(--C-G200);--bg-hover: var(--C-G200);--bsh: var(--C-G50);position:relative;display:inline-flex;align-items:center;justify-content:center;gap:calc(var(--PXS)/2);min-height:1.45rem;padding-left:calc(var(--PXS)/2);padding-right:calc(var(--PXS)/2);font-size:.925rem;font-weight:500;line-height:1.4;white-space:nowrap;color:var(--c);background-color:var(--bg);border-radius:var(--R);box-shadow:0 0 0 2px rgba(0,0,0,0);transition:var(--T),var(--T-O);cursor:pointer}.lo-task__meta>i{color:var(--ic)}.lo-task__meta>span{display:flex;align-items:center;position:relative}.lo-task__meta:hover{box-shadow:0 0 0 4px var(--bsh)}.lo-task--done .lo-task__meta{--c: var(--C-G600);--ic: var(--C-G500);--bg: var(--C-G200);--bsh: var(--C-G100)}.lo-task--done .lo-task__meta:hover{box-shadow:none}.lo-task__meta--date{padding-right:0}.lo-task__meta-input{position:absolute !important;top:0;left:0;width:100% !important;height:100% !important;overflow:hidden;opacity:0;cursor:pointer}.lo-task__meta-toggle{position:relative;display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1.375rem;padding-left:var(--PXS);font-size:.725rem;border-left:1px solid var(--DIVIDER);cursor:pointer}.lo-task__meta--date .lo-task__meta-toggle{padding-right:var(--PXS)}.lo-task__meta--scheduled{--c: #fff;--ic: #fff;--bg: var(--C-SCHEDULE);--bsh: var(--C-SCHEDULE--LIGHTEN)}.lo-task__meta--scheduled .lo-task__meta-toggle{--togg-bg: rgba(0,0,0, .15)}.lo-task__meta--scheduled .lo-task__meta-input{color-scheme:dark}.lo-task__meta--expired{--c: #fff;--ic: #fff;--bg: var(--C-DUE);--bsh: var(--C-DUE--LIGHTEN)}.lo-task__meta--expired .lo-task__meta-toggle{--togg-bg: rgba(0,0,0, .15)}.lo-task__meta--expired .lo-task__meta-input{color-scheme:dark}@media(max-width: 61.24em){.lo-task--full{--bg-color: var(--C-APP);z-index:1;color:var(--TC);box-shadow:0 0 0 2px var(--shadow-hover-1),0 0 0 4px var(--shadow-hover-2)}}.lo-task--done{--bg-color: var(--C-G100);--shadow: var(--DIVIDER)}.lo-task--done:hover,.lo-task--done:focus{--bg-color: var(--C-G50);--shadow: var(--DIVIDER--LIGHT)}.lo-task--done .lo-task__check>i{font-weight:bold;color:var(--C-DONE)}.lo-task--done .lo-task__check>i:before{content:""}.lo-task--done .lo-task__check>i:hover{color:var(--C-G500)}.lo-task--done .lo-task__check>i:hover:before{content:""}.lo-pref{--p: 0;position:absolute;z-index:100;top:var(--p);left:var(--p);right:var(--p);bottom:var(--p);background-color:rgba(255,255,255,.75);border-radius:var(--RL);box-shadow:rgba(40,40,44,.2) 0px 7px 29px 0px;backdrop-filter:blur(10px)}.lo-pref__toggle{--bg: var(--C-APP);--bg-hover: var(--C-APP);--color: var(--TC--LIGHT);--color-hover: var(--TC);--radius: 50%;position:absolute;z-index:50;right:var(--PXS);bottom:var(--PXS);display:flex;align-items:center;justify-content:center;width:35px;height:35px;font-size:1.25rem;border:1px solid var(--C-G300);box-shadow:rgba(0,0,0,.04) 0px 3px 5px}.lo-pref__close{position:absolute;z-index:5;top:var(--PXS);right:var(--PXS);font-size:1.25rem;color:var(--TC--LIGHTEN)}.lo-pref__title{padding-top:var(--P);padding-left:var(--P);padding-right:var(--P);font-size:1.15rem;line-height:1}.lo-pref__inner{display:grid;grid-template-columns:repeat(4, 1fr);gap:var(--P);padding:var(--P)}.lo-pref__box{display:flex;flex-direction:column;gap:var(--PXS)}.lo-pref__box-title{display:flex;align-items:center;gap:calc(var(--PXS)/2);font-weight:500}.lo-pref__box-title>i{color:var(--TC--LIGHTEN)}.lo-pref__box-desc{font-size:.825rem;color:var(--TC--LIGHT)}.lo-pref__box-opt{font-size:.9rem}
     1.lo-listowp,.wp-admin{--P: 30px;--PS: calc(var(--P) / 2);--PXS: calc(var(--P) / 3);--R: 6px;--RM: calc(var(--R) * 2);--RL: calc(var(--R) * 3);--LH: 1.2;--LHM: calc(var(--LH) + .2);--LHX: calc(var(--LH) + .4);--C-APP: #fff;--C-APP-ALPHA9: rgb(255, 255, 255, .9);--C-APP-ALPHA8: rgb(255, 255, 255, .9);--C-APP-ALPHA7: rgb(255, 255, 255, .9);--C-G50: #F7FAFC;--C-G100: #EDF2F7;--C-G200: #E2E8F0;--C-G300: #CBD5E0;--C-G400: #A0AEC0;--C-G500: #718096;--C-G600: #4A5568;--C-G700: #2D3748;--C-G800: #1A202C;--C-G900: #171923;--C-G50: #f0f1f3;--C-G100: #e0e2e8;--C-G200: #c3c6d1;--C-G300: #a5abbb;--C-G400: #8991a5;--C-G500: #6d7790;--C-G600: #515e7b;--C-G700: #364767;--C-G800: #183153;--C-G900: #001c40;--C-BRAND: #00d38d;--C-BRAND--DARK:#0db07a;--C-BRAND--LIGHT: #42edb438;--C-BRAND--LIGHTEN: #62e1b738;--C-INBOX: #90A4AE;--C-INBOX--LIGHT: #E2E8F0;--C-INBOX--LIGHTEN: #e2e8f07e;--C-ALL: #4DD0E1;--C-ALL--LIGHT: #B2EBF2;--C-ALL--LIGHTEN: #b2ebf246;--C-DUE: #F44336;--C-DUE--LIGHT: #ffcfcf;--C-DUE--LIGHTEN: #feb2b254;--C-SCHEDULE: #FFA726;--C-SCHEDULE--LIGHT: #FFE0B2;--C-SCHEDULE--LIGHTEN: #ffe0b27e;--C-DONE: #26be8b;--C-DONE--LIGHT: #60c6a4;--C-DONE--LIGHTEN: #60c6a425;--C-RECU: #eec614;--C-RECU--LIGHT: rgb(235, 221, 97)8;--C-RECU--LIGHTEN: #e8d94d2e;--TC: #000;--TC--LIGHT: #555;--TC--LIGHTEN: #999;--DIVIDER: rgba(38, 45, 61, 0.15);--DIVIDER--DARK: rgba(35, 43, 58, 0.3);--DIVIDER--LIGHT: rgba(40, 48, 65, 0.08);--T: none;--T-O: none;--APP-H: 75vh;--APP-MH: 55vh;--APP-MIN-H: 750px;--APP-MAX-H: 800px;--APP-MAX-MH: 600px;--APP-W: 100%;--APP-FULLCREEN-MAX-W: 1400px;--SIDEBAR-W: 30%;--SIDEBAR-MIN-W: 280px;--SIDEBAR-MW: 55px;--SIDEBAR-MW--EXPANDED: 240px}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--R: 6px}}@media(min-width: 61.25em){.lo-listowp,.wp-admin{--T: all .165s ease, height 0s, opacity 0s;--T-O: opacity .165s ease}}.lo-dark{--C-APP: #191a1b;--C-APP-ALPHA9: rgb(25, 26, 27, .9);--C-APP-ALPHA8: rgb(25, 26, 27, .8);--C-APP-ALPHA7: rgb(25, 26, 27, .7);--C-G900: #262628;--C-G800: #292a2b;--C-G700: #8e9092;--C-G600: #696c6e;--C-G500: #606367;--C-G400: #56595f;--C-G300: #3e4044;--C-G200: #3c3f45;--C-G100: #1d1f21;--C-G50: #1f1f22;--TC: #ffffff;--TC--LIGHT: #A0AEC0;--TC--LIGHTEN: #718096;--DIVIDER: rgba(213, 223, 243, 0.1);--DIVIDER--DARK: rgba(213, 223, 243, 0.25);--DIVIDER--LIGHT: rgba(213, 223, 243, 0.05)}.lo-listowp,.loa-wrapper{--input-bg: transparent;--input-b: none;--input-sh: none;--input-p: 0;box-sizing:border-box;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc;font-family:"Inter",sans-serif;font-size:16px;line-height:1.2;font-weight:normal;color:var(--TC)}.lo-listowp *,.loa-wrapper *{box-sizing:inherit;scrollbar-width:thin;scrollbar-color:#ccc #fcfcfc}.lo-listowp input[type=text],.lo-listowp input[type=number],.lo-listowp input[type=date],.lo-listowp textarea,.lo-listowp select,.loa-wrapper input[type=text],.loa-wrapper input[type=number],.loa-wrapper input[type=date],.loa-wrapper textarea,.loa-wrapper select{width:100%;margin:0;padding:var(--input-p);font-family:"Inter",sans-serif;font-size:1rem;font-weight:500;color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp input[type=text]:hover,.lo-listowp input[type=text]:focus,.lo-listowp input[type=number]:hover,.lo-listowp input[type=number]:focus,.lo-listowp input[type=date]:hover,.lo-listowp input[type=date]:focus,.lo-listowp textarea:hover,.lo-listowp textarea:focus,.lo-listowp select:hover,.lo-listowp select:focus,.loa-wrapper input[type=text]:hover,.loa-wrapper input[type=text]:focus,.loa-wrapper input[type=number]:hover,.loa-wrapper input[type=number]:focus,.loa-wrapper input[type=date]:hover,.loa-wrapper input[type=date]:focus,.loa-wrapper textarea:hover,.loa-wrapper textarea:focus,.loa-wrapper select:hover,.loa-wrapper select:focus{color:var(--TC);background-color:var(--input-bg);border:var(--input-b);border-radius:var(--R);box-shadow:var(--input-sh);outline:none}.lo-listowp select,.loa-wrapper select{cursor:pointer}.lo-listowp input.lo-input,.lo-listowp textarea.lo-input,.loa-wrapper input.lo-input,.loa-wrapper textarea.lo-input{padding-top:var(--PXS);padding-bottom:var(--PXS)}.lo-listowp a,.loa-wrapper a{text-decoration:none}.lo-timezone{display:flex;align-items:center;gap:calc(var(--PXS)/2);padding:calc(var(--PXS)/2) var(--PXS);background-color:var(--DIVIDER--LIGHT);border-radius:var(--RL)}.lo-timezone i{color:var(--TC--LIGHTEN)}.lo-timezone select{font-size:.8rem}.lo-gdpr>a{display:block}.lo-poweredby{position:absolute;z-index:5;right:var(--PXS);bottom:var(--PXS);font-size:.825rem;color:var(--TC--LIGHTEN)}.lo-btn{--bg: transparent;--bg-hover: transparent;--color: inherit;--color-hover: inherit;--radius: var(--R);display:inline-flex;align-items:center;justify-content:center;gap:var(--PXS);height:auto;margin:0;padding:0;font-family:"Inter",sans-serif;font-size:1rem;color:var(--color);background-color:var(--bg);border:none;border-radius:var(--radius);box-shadow:none;outline:none;transition:var(--T);cursor:pointer}.lo-btn:hover{color:var(--color-hover);background-color:var(--bg-hover)}.lo-btn:focus{color:var(--color);background-color:var(--bg)}.lo-btn:focus:hover{color:var(--color-hover);background-color:var(--bg-hover)}.lo-btn:disabled{opacity:.5;cursor:not-allowed}.lo-btn--default{padding:0 var(--PS);height:2.35rem}.lo-btn--sm{padding:0 var(--PXS);height:2rem;font-size:.9rem}.lo-btn--link{--bg: transparent;--bg-hover: var(--C-G50);--color: var(--TC--LIGHT);--color-hover: var(--TC);--border-color: var(--C-G200);border:1px solid var(--border-color)}.lo-btn--action{--bg: var(--C-BRAND);--bg-hover: var(--C-BRAND--DARK);--color: #fff;--color-hover: #fff;--border-color: var(--C-BRAND--DARK);border:1px solid var(--border-color)}.lo-tip{--tip-bg: var(--C-G600);--op: .95;--arrow-size: 8px;--arrow-gap: calc(100% - (var(--arrow-size) - 1px));--transform: translateY(10px) translateX(-50%);--transform--h: translateY(-10px) translateX(-50%);position:relative}.lo-tip:before{content:" ";position:absolute;z-index:9995;left:50%;bottom:var(--arrow-gap);transform:var(--transform);width:0;height:0;border-left:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid rgba(0,0,0,0);border-top:var(--arrow-size) solid var(--tip-bg);opacity:0;pointer-events:none;transition:var(--T),var(--T-O);transition-duration:.5s}.lo-tip:after{content:attr(aria-label);position:absolute;z-index:9999;left:50%;bottom:100%;transform:var(--transform);display:inline-flex;align-items:center;height:1.8rem;padding-left:var(--PXS);padding-right:var(--PXS);font-family:"Inter",sans-serif;font-size:.8rem;font-weight:400;line-height:1.2;white-space:nowrap;color:#fff;background-color:var(--tip-bg);border-radius:var(--R);box-shadow:rgba(50,50,93,.25) 0px 2px 5px -1px,rgba(0,0,0,.3) 0px 1px 3px -1px;opacity:0;pointer-events:none;transition:var(--T),var(--T-O);transition-duration:.5s}.lo-tip:hover:before,.lo-tip:hover:after{transform:var(--transform--h);opacity:var(--op)}@media(max-width: 61.24em){.lo-tip:before,.lo-tip:after{display:none}}.lo-tip--left{--arrow-gap: calc(100% - (var(--arrow-size) + 6px));--transform: translateY(-50%) translateX(10px);--transform--h: translateY(-50%) translateX(-10px)}.lo-tip--left:before{top:50%;left:auto;right:var(--arrow-gap);bottom:auto;border-top:var(--arrow-size) solid rgba(0,0,0,0);border-left:var(--arrow-size) solid var(--tip-bg);border-bottom:var(--arrow-size) solid rgba(0,0,0,0)}.lo-tip--left:after{top:50%;left:auto;right:100%;bottom:auto}.lo-tip--right{--arrow-gap: calc(100% - (var(--arrow-size) + 6px));--transform: translateY(-50%) translateX(-10px);--transform--h: translateY(-50%) translateX(10px)}.lo-tip--right:before{top:50%;left:var(--arrow-gap);bottom:auto;border-top:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid var(--tip-bg);border-bottom:var(--arrow-size) solid rgba(0,0,0,0)}.lo-tip--right:after{top:50%;left:100%;bottom:auto}.lo-tip--bottom{--transform: translateY(-10px) translateX(-50%);--transform--h: translateY(10px) translateX(-50%)}.lo-tip--bottom:before{top:var(--arrow-gap);bottom:auto;border-top:none;border-left:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid rgba(0,0,0,0);border-bottom:var(--arrow-size) solid var(--tip-bg)}.lo-tip--bottom:after{top:100%;bottom:auto}.lo-tip--alt:after{content:attr(aria-label-alt)}.lo-popover{position:absolute;z-index:50;top:100%;left:0;width:280px;padding:var(--PS);background-color:var(--C-APP);border-radius:var(--RM);box-shadow:rgba(46,50,62,.05) 0px 6px 24px 0px,var(--DIVIDER) 0px 0px 0px 1px}.lo-readmore{position:relative;color:var(--TC--LIGHTEN);transition:var(--T)}.lo-task .lo-readmore{margin-left:auto;opacity:0}.lo-readmore>i:before{position:relative;z-index:1}.lo-readmore>i:after{content:"";position:absolute;z-index:0;top:50%;left:50%;transform:translate(-50%, -50%);width:1.75em;height:1.75em;background-color:var(--DIVIDER--LIGHT);border-radius:50%;opacity:0;transition:var(--T-O);transition-duration:.4s}.lo-task .lo-readmore>i:after{display:none}.lo-readmore:hover{color:var(--TC--LIGHT)}.lo-readmore:hover>i:after{opacity:1}.lo-readmore:focus{color:var(--TC--LIGHTEN)}.lo-readmore:focus:hover{color:var(--TC--LIGHT)}@media(max-width: 61.24em){.lo-task--full .lo-readmore{opacity:1}}@media(min-width: 61.25em){.lo-task:hover .lo-readmore{opacity:1}}.lo-form{display:flex;flex-direction:column;gap:var(--PS)}.lo-form__row{display:flex;gap:var(--PXS);width:100%}.lo-form__label{min-width:30%;color:var(--TC)}.lo-form__control{display:flex;align-items:center}.lo-form__control>i{min-width:1.35rem;color:var(--TC--LIGHT)}.lo-form__control select,.lo-form__control input[type=text],.lo-form__control input[type=date],.lo-form__control input[type=number]{font-size:.875rem;line-height:1;-webkit-appearance:none}.lo-form__control input[type=date]::-webkit-inner-spin-button,.lo-form__control input[type=date]::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}.lo-form__actions{display:flex;gap:var(--PXS);justify-content:flex-end;padding-top:var(--PS);border-top:1px solid var(--DIVIDER--LIGHT)}.lo-form__actions .lo-btn:first-child{margin-right:auto}.lo-wrapper{--w: var(--APP-W);--h: var(--APP-H);--min-h: var(--APP-MIN-H);--max-h: var(--APP-MAX-H);position:relative;display:flex;width:var(w);min-height:var(--min-h);max-height:max(var(--h),var(--max-h));margin-left:auto;margin-right:auto}@media(max-width: 61.24em){.lo-wrapper{--h: var(--APP-MH);--max-h: var(--APP-MAX-MH);padding-left:var(--SIDEBAR-MW)}}.lo-wrapper__toggle{--bg: transparent;--bg-hover: transparent;--color: var(--TC--LIGHTEN);--color-hover: var(--TC);position:absolute;z-index:100;top:1px;right:28px;display:flex;align-items:center;justify-content:center;width:34px;height:34px}.lo-wrapper--fullscreen .lo-wrapper__toggle{top:1px;right:28px}.lo-wrapper--fullscreen .lo-wrapper__toggle>i:before{content:""}.lo-wrapper--fullscreen{--w: 100%;--h: 100%;--min-h: 100%;--max-h: 100%;position:fixed;top:0;left:0;right:0;bottom:0;z-index:99999;max-width:var(--APP-FULLCREEN-MAX-W)}.lo-wrapper--fullscreen:before{content:" ";position:fixed;z-index:-1;top:0;left:0;right:0;bottom:0;display:block;background-color:var(--C-G900);opacity:.95}.lo-sidebar{--width: var(--SIDEBAR-MW);position:relative;display:flex;flex-direction:column;width:var(--width);min-width:var(--width);background-color:var(--C-APP);border-top-left-radius:var(--RL);border-bottom-left-radius:var(--RL);border:1px solid var(--DIVIDER);border-right:none}@media(max-width: 61.24em){.lo-sidebar{position:absolute;top:0;left:0;bottom:0;z-index:100}}@media(min-width: 61.25em){.lo-sidebar{--width: max(var(--SIDEBAR-MIN-W), var(--SIDEBAR-W))}}.lo-wrapper--fullscreen .lo-sidebar{border-radius:0}.lo-sidebar__toggle{--radius: 0;display:flex;align-items:center;justify-content:center;min-height:var(--SIDEBAR-MW);height:var(--SIDEBAR-MW);font-size:1.25rem;color:var(--TC--LIGHT);border-top:1px solid var(--DIVIDER)}.lo-sidebar--expanded .lo-sidebar__toggle>i{transform:rotate(180deg)}@media(min-width: 61.25em){.lo-sidebar__toggle{display:none}}.lo-sidebar__cover{content:" ";position:absolute;top:0;left:0;right:0;bottom:0;z-index:90;display:none;background-color:rgba(0,0,0,.5);border-radius:var(--RL)}.lo-wrapper--fullscreen .lo-sidebar__cover{border-radius:0}.lo-sidebar--expanded{--width: var(--SIDEBAR-MW--EXPANDED)}.lo-sidebar--expanded+.lo-sidebar__cover{display:block}.lo-main{display:flex;flex-direction:column;width:100%;min-width:0;background-color:var(--C-G50);border:1px solid var(--DIVIDER--LIGHT);border-top-right-radius:var(--RL);border-bottom-right-radius:var(--RL)}.lo-wrapper--fullscreen .lo-main{border-radius:0}.lo-lists__inner{display:flex;flex-direction:column}.lo-lists__form{position:relative;border-top:1px solid var(--DIVIDER)}.lo-lists__add-wrapper{position:relative;z-index:5;display:none;margin:calc(var(--PXS)/2)}.lo-sidebar--expanded .lo-lists__add-wrapper{display:block}@media(min-width: 61.25em){.lo-lists__add-wrapper{display:block}}.lo-lists__add{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND);display:flex;align-items:center;gap:var(--PXS);padding:var(--PXS) calc(var(--PS) - (var(--PXS)/2 + 2px));font-size:1rem;font-weight:500;color:var(--color);background-color:var(--bg);border:2px dashed var(--border-c);box-shadow:0 0 0 4px var(--shadow-c);transition:var(--T);transition-duration:.25s;cursor:pointer}.lo-lists__add>i{position:relative;color:var(--i-color);transition:var(--T);transition-duration:.4s}.lo-lists__add>i:after{content:"+";position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);font-size:1.35rem;font-weight:bold}@media(max-width: 61.24em){.lo-lists__add{justify-content:center}}@media(min-width: 61.25em){.lo-lists__add{--border-c: var(--C-G200);--color: var(--C-G600);--bg: transparent;--shadow-c: transparent;--i-color: var(--C-G400)}.lo-lists__add>i{--size: 1.2rem;font-size:calc(var(--size)*1.8)}.lo-lists__add:hover{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND)}}.lo-lists__add-form{display:none;align-items:center;padding:var(--PXS) var(--PS)}.lo-sidebar--expanded .lo-lists__add-form{display:flex}@media(min-width: 61.25em){.lo-lists__add-form{display:flex}}.lo-lists__add-form-actions{display:flex;align-items:center;justify-content:space-between}.lo-lists__add-form-action{--bg: transparent;--bg-hover: transparent;--color: var(--TC--LIGHT);--color-hover: var(--TC--LIGHT);position:relative;padding:var(--PXS);font-size:1.35rem}.lo-lists__add-form-action>i{position:relative;z-index:1}.lo-lists__add-form-action:last-child{--color: var(--C-BRAND);--color-hover: var(--C-BRAND);padding-right:0}.lo-lists__add-form-action:disabled{--color: var(--TC--LIGHTEN);--color-hover: var(--TC--LIGHTEN)}.lo-lists--smart{padding-bottom:0}.lo-lists--smart .lo-lists__inner{min-height:63px}.lo-lists--custom{flex-grow:1;overflow:auto;border-bottom-left-radius:var(--RL);box-shadow:inset 0 3px 3px rgba(0,0,0,.08)}.lo-wrapper--fullscreen .lo-lists--custom{border-radius:0}.lo-list{--bg-color: var(--C-INBOX--LIGHT);--bg-color-hover: rgba(54, 74, 87, 0.025);--icon-color: var(--C-INBOX);--icon-color-active: var(--C-INBOX);--shadow-active: var(--C-INBOX);--shadow-active-2: var(--C-INBOX--LIGHTEN);position:relative;color:var(--TC);border-top:1px solid var(--DIVIDER);box-shadow:0 0 0 1px rgba(0,0,0,0);transition:var(--T);cursor:pointer}.lo-lists--smart .lo-list:first-child{border-top:none;border-top-left-radius:var(--RL)}.lo-wrapper--fullscreen .lo-lists--smart .lo-list:first-child{border-radius:0}.lo-lists--smart .lo-list:before{display:none}.lo-list:hover{color:var(--TC);background-color:var(--bg-color-hover)}.lo-list.active{--icon-color: var(--icon-color-active);color:var(--TC);border-top:1px solid rgba(0,0,0,0);background-color:var(--shadow-active-2);box-shadow:0 0 0 1px var(--shadow-active)}.lo-list__inner{display:flex;gap:var(--PXS);padding-top:var(--PXS);padding-bottom:var(--PXS)}.lo-lists--smart .lo-list__inner,.lo-lists__add .lo-list__inner{align-items:center}.lo-sidebar--expanded .lo-list__inner{padding:var(--PXS)}@media(max-width: 61.24em){.lo-list__inner{justify-content:center}}@media(min-width: 61.25em){.lo-list__inner{min-height:63px;padding:var(--PXS) var(--PS)}}.lo-list__name{display:none}.lo-list__name>span{word-break:break-word}.lo-sidebar--expanded .lo-list__name{display:flex;flex-direction:column;flex-grow:1;gap:calc(var(--PXS)/2)}@media(min-width: 61.25em){.lo-list__name{display:flex;flex-direction:column;flex-grow:1;gap:calc(var(--PXS)/2)}}.lo-list__count{display:flex;align-items:center;gap:calc(var(--PXS)/2);font-size:.8rem;font-weight:normal;opacity:.5}.active .lo-list__count,.lo-tasks__header .lo-list__count{opacity:1}.lo-list__count>span{display:flex;align-items:center;justify-content:center;gap:calc(var(--PXS)/2);height:1.115rem;padding-left:calc(var(--PXS)/2);padding-right:calc(var(--PXS)/2);line-height:1;color:var(--TC);background-color:var(--bg-color);border-radius:calc(var(--R)/1.5)}.lo-list__count>span>i{color:var(--icon-color)}@media(max-width: 61.24em){.lo-list__count{gap:calc(var(--PXS)/3)}.lo-lists--smart .lo-list__count{position:absolute;top:calc(var(--PXS)/3);right:calc(var(--PXS)/3)}}.lo-list__icon{--size: 1rem;display:flex;align-items:center;justify-content:center;width:calc(var(--size)*1.8);min-width:calc(var(--size)*1.8);height:calc(var(--size)*1.8);font-size:.925rem;font-style:normal;color:#fff;background-color:var(--icon-color);border-radius:50%;box-shadow:0 0 0 0px var(--shadow-active-2);transition:var(--T)}.lo-list__icon:before{font-size:var(--size)}.lo-list:hover .lo-list__icon{box-shadow:0 0 0 4px var(--shadow-active-2),0 0 0 4px var(--shadow-active-2)}.lo-list.active .lo-list__icon{box-shadow:0 0 0 6px var(--shadow-active-2)}@media(min-width: 61.25em){.lo-list__icon{--size: 1.2rem}.lo-lists--custom .lo-list__icon{margin-top:calc(var(--PXS)/2 - 1px)}}.lo-list--inbox,.lo-list[data-id=inbox]{--bg-color: var(--C-INBOX--LIGHT);--icon-color: var(--C-INBOX);--icon-color-active: var(--C-INBOX);--shadow-active: var(--C-INBOX);--shadow-active-2: var(--C-INBOX--LIGHTEN)}.lo-list--all,.lo-list[data-id=all]{--bg-color: var(--C-ALL--LIGHT);--icon-color: var(--C-ALL);--icon-color-active: var(--C-ALL);--shadow-active: var(--C-ALL);--shadow-active-2: var(--C-ALL--LIGHTEN)}.lo-list[data-id=due]{--bg-color: var(--C-DUE--LIGHT);--icon-color: var(--C-DUE);--icon-color-active: var(--C-DUE);--shadow-active: var(--C-DUE);--shadow-active-2: var(--C-DUE--LIGHTEN)}.lo-list--due .lo-list__count>span:nth-child(2){--bg-color: var(--C-DUE--LIGHT);--icon-color: var(--C-DUE);--icon-color-active: var(--C-DUE)}.lo-list--scheduled,.lo-list[data-id=scheduled]{--bg-color: var(--C-SCHEDULE--LIGHT);--icon-color: var(--C-SCHEDULE);--icon-color-active: var(--C-SCHEDULE);--shadow-active: var(--C-SCHEDULE);--shadow-active-2: var(--C-SCHEDULE--LIGHTEN)}.lo-list--done,.lo-list[data-id=done]{--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE);--shadow-active: var(--C-DONE);--shadow-active-2: var(--C-DONE--LIGHTEN)}.lo-list--recurring,.lo-list[data-id=recurring]{--bg-color: var(--C-RECU--LIGHT);--icon-color: var(--C-RECU);--icon-color-active: var(--C-RECU);--shadow-active: var(--C-RECU);--shadow-active-2: var(--C-RECU--LIGHTEN)}.lo-list__info{position:relative;padding:calc(var(--PXS) + 4px);line-height:var(--LHX)}@media(min-width: 61.25em){.lo-list__info{display:flex;align-items:center;min-height:127px;padding:var(--PS) calc(var(--PS) + var(--PXS))}}.lo-list__info:hover .lo-list__edit{opacity:1}.lo-list__info:hover .lo-list__info-title{gap:var(--PXS)}.lo-list__info-data{flex-grow:1;min-width:0}.lo-list__info-title{display:inline-flex;align-items:center;gap:0;font-size:1.2rem;line-height:1.2;color:var(--TC);transition:var(--T)}.lo-list__info-title .lo-list__edit{--color: var(--TC--LIGHTEN);--color-hover: var(--TC);font-size:.85rem;font-weight:bold;opacity:0;transition:var(--T),var(--T-O);cursor:pointer}.lo-list__info-title:hover{gap:var(--PXS)}.lo-wrapper--fullscreen .lo-list__info-title{padding-right:var(--PS)}.lo-list__info-desc{color:var(--TC--LIGHT);height:calc(var(--LHX)*1em);overflow:hidden;transition:var(--T)}.lo-list__info-desc:empty{opacity:.5}.lo-list__info-desc:empty:before{content:attr(data-placeholder)}.lo-list__info-count{--bg-color: var(--C-INBOX--LIGHT);--bg-color-hover: rgba(54, 74, 87, 0.025);--icon-color: var(--C-INBOX);--icon-color-active: var(--C-INBOX);--shadow-active: var(--C-INBOX);--shadow-active-2: var(--C-INBOX--LIGHTEN);padding-top:var(--PXS);font-size:.925rem}.lo-list__info-count>span:nth-child(2){--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE)}.lo-list__info-count>span:nth-child(3){--bg-color: var(--C-DUE--LIGHT);--icon-color: var(--C-DUE);--icon-color-active: var(--C-DUE)}.lo-list__count{gap:var(--PXS)}.lo-list__count>span{padding-left:0;padding-right:0;background-color:rgba(0,0,0,0)}.lo-list__count>span:nth-child(2){--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE)}.lo-list--due .lo-list__count>span:nth-child(2){--bg-color: var(--C-DONE--LIGHT);--icon-color: var(--C-DONE);--icon-color-active: var(--C-DONE)}.lo-list__icon{position:relative}.lo-list__icon-count{position:absolute;top:-3px;right:-8px;background:#f44336;border:2px solid #fff;font-weight:bold;padding:0 2px;min-width:18px;font-family:"Inter",sans-serif;font-size:.6rem;line-height:1;font-weight:400;border-radius:10px;display:flex;height:18px;align-items:center;justify-content:center}.active .lo-list__icon-count{border-color:var(--bg-color)}.lo-tasks{--mobile-padd: 4px;display:flex;flex-direction:column;gap:5px;height:100%;padding:var(--mobile-padd);padding-bottom:50px;overflow:auto}@media(min-width: 61.25em){.lo-tasks{padding:var(--PXS);padding-bottom:50px;gap:var(--PXS)}}.lo-tasks__header{position:relative;background-color:var(--C-APP);border-bottom:1px solid var(--DIVIDER);border-top-right-radius:var(--RL)}.lo-tasks__actions{display:flex;align-items:center;gap:var(--PXS);color:var(--TC--LIGHT)}.lo-tasks__delete{--size: 36px;position:relative;display:flex;align-items:center;justify-content:center;gap:var(--PXS);min-width:var(--size);height:var(--size);margin-right:auto;padding-left:calc(var(--PXS)/2);padding-right:calc(var(--PXS)/2);font-size:1rem;background-color:var(--C-APP);border:1px solid var(--C-G300);border-radius:var(--RL);transition:var(--T)}.lo-tasks__delete button,.lo-tasks__delete span{--color: var(--TC--LIGHT);--color-hover: var(--C-DUE);color:var(--TC--LIGHT);transition:var(--T);cursor:pointer}.lo-tasks__delete button:hover,.lo-tasks__delete span:hover{color:var(--TC)}.lo-tasks__delete:hover{background-color:var(--C-DUE--LIGHTEN);border:1px solid var(--C-DUE--LIGHT)}.lo-tasks__delete:hover button,.lo-tasks__delete:hover span{color:var(--C-DUE)}.lo-tasks__delete-toggle>span,.lo-tasks__delete-toggle>div{position:absolute;top:50%;right:0;transform:translateY(-50%);display:block;width:var(--size);height:var(--size);border-radius:var(--RL)}.lo-tasks__delete-opt{display:flex;align-items:center;gap:var(--PXS);padding-left:var(--PXS)}.lo-tasks__delete-opt a,.lo-tasks__delete-opt span{font-weight:500}.lo-tasks__delete-close{display:flex;align-items:center;justify-content:center;width:calc(var(--size) - var(--PXS))}.lo-tasks__delete-close>span,.lo-tasks__delete-close>div{position:absolute;top:50%;transform:translateY(-50%);display:block;width:var(--size);height:var(--size);border-radius:var(--RL);transition:var(--T)}.lo-tasks__delete-close:hover>span,.lo-tasks__delete-close:hover>div{background-color:var(--C-DUE--LIGHTEN)}.lo-tasks__form{position:relative;display:flex;flex-direction:column;gap:var(--PS)}.lo-tasks__add-wrapper{position:relative;z-index:5;padding:4px;padding-bottom:0}@media(min-width: 61.25em){.lo-tasks__add-wrapper{padding:var(--PXS);padding-bottom:0}}.lo-tasks__add{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND);display:flex;align-items:center;gap:calc(var(--PXS)/2);padding:var(--PXS) calc(var(--PS) - 2px);font-size:1rem;font-weight:500;color:var(--color);background-color:var(--bg);border:2px dashed var(--border-c);border-radius:var(--R);box-shadow:0 0 0 0 var(--shadow-c);transition:var(--T);transition-duration:.25s;cursor:pointer}.lo-tasks__add>i{color:var(--i-color);transition:var(--T);transition-duration:.4s}@media(max-width: 61.24em){.lo-tasks__add{justify-content:center}}@media(min-width: 61.25em){.lo-tasks__add{--border-c: var(--C-G300);--color: var(--C-G600);--bg: transparent;--shadow-c: transparent;--i-color: var(--C-G400);gap:var(--PXS);box-shadow:0 0 0 4px var(--shadow-c)}.lo-tasks__add:hover{--border-c: var(--C-BRAND);--color: var(--TC);--bg: var(--C-BRAND--LIGHTEN);--shadow-c: var(--C-BRAND--LIGHTEN);--i-color: var(--C-BRAND)}}.lo-tasks__add-form{display:flex;align-items:center;padding:var(--PXS) calc(var(--PXS) + 4px);border-top:1px dashed var(--DIVIDER)}@media(min-width: 61.25em){.lo-tasks__add-form{padding:var(--PXS) var(--P)}}.lo-tasks__add-form-actions{display:flex;align-items:center;justify-content:space-between}.lo-tasks__add-form-action{--size: 34px;--font-size: 1.35rem;--bg: transparent;--bg-hover: transparent;--color: var(--TC--LIGHT);--color-hover: var(--TC--LIGHT);position:relative;padding:var(--PXS);font-size:var(--font-size)}.lo-tasks__add-form-action>i{position:relative;z-index:1}.lo-tasks__add-form-action:last-child{--color: var(--C-BRAND);--color-hover: var(--C-BRAND);padding-right:0}.lo-tasks__add-form-action:disabled{--color: var(--TC--LIGHTEN);--color-hover: var(--TC--LIGHTEN)}.lo-tasks__edit{display:flex;flex-direction:column;width:100%;gap:var(--PXS)}.lo-tasks__edit-form{display:flex;flex-direction:column}.lo-tasks__edit-form input.lo-input,.lo-tasks__edit-form textarea.lo-input{padding-top:2px;padding-bottom:2px;font-weight:400;transition:none}.lo-tasks__edit-form input.lo-input:first-child,.lo-tasks__edit-form textarea.lo-input:first-child{font-size:1.2rem}.lo-tasks__edit-form input.lo-input:focus,.lo-tasks__edit-form textarea.lo-input:focus{background-color:var(--C-G50);box-shadow:-2px 0 0 var(--C-G50),2px 0 0 var(--C-G50)}.lo-tasks__edit-actions{display:flex;align-items:center;justify-content:flex-end;gap:calc(var(--PXS)/2)}.lo-tasks__empty{display:flex;align-items:center;gap:var(--PXS);padding:var(--PXS) calc(var(--PS) - 2px);font-size:1rem;color:var(--C-G500);border:2px dashed var(--C-G300);border-radius:var(--R)}.lo-tasks__empty>i{color:var(--C-G400)}.lo-task{--bg-color: var(--C-APP);--shadow: var(--DIVIDER--LIGHT);--shadow-hover-1: var(--C-G200);--shadow-hover-2: var(--C-G100);position:relative;flex-shrink:0;padding:var(--PXS);color:var(--TC);background-color:var(--bg-color);border-radius:var(--R);box-shadow:0 0 0 1px var(--shadow);transition:var(--T);transition-duration:.25s}.lo-task:hover{--bg-color: var(--C-APP);z-index:1;color:var(--TC);box-shadow:0 0 0 2px var(--shadow-hover-1),0 0 0 4px var(--shadow-hover-2)}.lo-task:focus{color:var(--TC)}@media(min-width: 61.25em){.lo-task{display:flex;align-items:flex-start;gap:var(--PXS);padding:var(--PS)}}.lo-task__edit-toggle{font-size:.85rem;color:var(--TC--LIGHTEN);transition:var(--T),var(--T-O);opacity:0;cursor:pointer}@media(max-width: 61.24em){.lo-task--full .lo-task__edit-toggle{opacity:1}}@media(min-width: 61.25em){.lo-task:hover .lo-task__edit-toggle{opacity:1}}.lo-task__edit-form{display:flex;flex-direction:column}.lo-task__edit-form input.lo-input,.lo-task__edit-form textarea.lo-input{padding-top:2px;padding-bottom:2px;font-size:1rem;font-weight:400;transition:none}.lo-task__edit-form input.lo-input:last-child,.lo-task__edit-form textarea.lo-input:last-child{font-size:.825rem}.lo-task__edit-form input.lo-input:focus,.lo-task__edit-form textarea.lo-input:focus{background-color:var(--C-G50);box-shadow:-2px 0 0 var(--C-G50),2px 0 0 var(--C-G50)}.lo-task__edit-actions{display:flex;align-items:center;justify-content:flex-end;gap:calc(var(--PXS)/2);padding-top:var(--PXS)}.lo-task__check-wrapper{position:absolute;top:var(--PXS);right:var(--PXS)}@media(min-width: 61.25em){.lo-task__check-wrapper{top:var(--PS);right:var(--PS)}}.lo-task__check{cursor:pointer}.lo-task__check>i{font-size:1.45rem;color:var(--C-G400);transition:var(--T)}.lo-task__check>i:hover{color:var(--C-DONE)}.lo-task__check>i:hover:before{content:"";font-weight:bold}.lo-task__name{flex-grow:1}.lo-task__name-title{display:flex;align-items:center;gap:0;padding-right:var(--P);line-height:var(--LHM);transition:var(--T)}.lo-task__name-title .lo-input{width:100%}.lo-task__name-title:hover{color:var(--TC)}.lo-task:hover .lo-task__name-title{gap:var(--PXS)}.lo-task--done .lo-task__name-title{color:var(--TC--LIGHT);text-decoration:line-through;text-decoration-color:var(--DIVIDER--DARK)}.lo-task__name-desc{font-size:.825rem;line-height:var(--LHX);color:var(--TC--LIGHT)}@media(max-width: 61.24em){.lo-task__name-desc{margin-top:var(--PXS)}.lo-task__name-desc:empty{margin-top:0}}.lo-task__name-desc--empty{opacity:.5}.lo-task__name-meta{display:flex;align-items:center;gap:calc(var(--PXS)/2);padding-top:var(--PXS)}.lo-task--done .lo-task__name-meta{opacity:.75}@media(min-width: 61.25em){.lo-task--edit .lo-task__name-meta{position:absolute;left:var(--PS);bottom:var(--PS)}}.lo-task__collapse{position:absolute;z-index:5;top:calc(var(--PXS)/2);right:calc(var(--PXS)/2);color:var(--TC--LIGHTEN);transition:var(--T);cursor:pointer}.lo-task__collapse:hover{color:var(--TC)}.lo-task__delete{cursor:pointer}@media(min-width: 61.25em){.lo-task__delete{margin-right:0}}.lo-task__meta{--c: var(--C-G600);--ic: var(--C-G500);--bg: var(--C-G100);--bg-hover: var(--C-G100);--bsh: var(--C-G50);position:relative;display:inline-flex;align-items:center;justify-content:center;gap:calc(var(--PXS)/2);min-height:1.45rem;padding-left:calc(var(--PXS)/2);padding-right:calc(var(--PXS)/2);font-size:.925rem;font-weight:500;line-height:1.4;white-space:nowrap;color:var(--c);background-color:var(--bg);border-radius:var(--R);box-shadow:0 0 0 2px rgba(0,0,0,0);transition:var(--T),var(--T-O);cursor:pointer}.lo-task__meta>i{color:var(--ic)}.lo-task__meta>span{display:flex;align-items:center;position:relative}.lo-task__meta:hover{box-shadow:0 0 0 4px var(--bsh)}.lo-task--done .lo-task__meta{--c: var(--C-G600);--ic: var(--C-G500);--bg: var(--C-G100);--bsh: var(--C-G100)}.lo-task--done .lo-task__meta:hover{box-shadow:none}.lo-task__meta--date{padding-right:0}.lo-task__meta--time{appearance:none;-webkit-appearance:none}.lo-task__meta-input{position:absolute !important;top:0;left:0;width:100% !important;height:100% !important;overflow:hidden;opacity:0;cursor:pointer}.lo-task__meta-toggle{position:relative;display:inline-flex;align-items:center;justify-content:center;width:1rem;height:1.375rem;padding-left:var(--PXS);font-size:.725rem;border-left:1px solid var(--DIVIDER);cursor:pointer}.lo-task__meta--date .lo-task__meta-toggle{padding-right:var(--PXS)}.lo-task__meta--scheduled{--c: #fff;--ic: #fff;--bg: var(--C-SCHEDULE);--bsh: var(--C-SCHEDULE--LIGHTEN)}.lo-task__meta--scheduled .lo-task__meta-toggle{--togg-bg: rgba(0,0,0, .15)}.lo-task__meta--scheduled .lo-task__meta-input{color-scheme:dark}.lo-task__meta--expired{--c: #fff;--ic: #fff;--bg: var(--C-DUE);--bsh: var(--C-DUE--LIGHTEN)}.lo-task__meta--expired .lo-task__meta-toggle{--togg-bg: rgba(0,0,0, .15)}.lo-task__meta--expired .lo-task__meta-input{color-scheme:dark}@media(max-width: 61.24em){.lo-task--full{--bg-color: var(--C-APP);z-index:1;color:var(--TC);box-shadow:0 0 0 2px var(--shadow-hover-1),0 0 0 4px var(--shadow-hover-2)}}.lo-task--done{--bg-color: var(--C-G50);--shadow: var(--DIVIDER)}.lo-task--done:hover,.lo-task--done:focus{--bg-color: var(--C-G50);--shadow: var(--DIVIDER--LIGHT)}.lo-task--done .lo-task__check>i{font-weight:bold;color:var(--C-DONE)}.lo-task--done .lo-task__check>i:before{content:""}.lo-task--done .lo-task__check>i:hover{color:var(--C-G500)}.lo-task--done .lo-task__check>i:hover:before{content:""}.lo-pref{--p: 0;position:absolute;z-index:100;top:var(--p);left:var(--p);right:var(--p);bottom:var(--p);background-color:var(--C-APP-ALPHA7);border-radius:var(--RL);box-shadow:rgba(40,40,44,.2) 0px 7px 29px 0px;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.lo-pref__toggle{--bg: transparent;--bg-hover: transparent;--color: var(--TC--LIGHTEN);--color-hover: var(--TC);position:absolute;z-index:100;top:1px;right:1px;display:flex;align-items:center;justify-content:center;width:34px;height:34px}.lo-pref__close{position:absolute;z-index:5;top:var(--PXS);right:var(--PXS);font-size:1.25rem;color:var(--TC--LIGHTEN)}.lo-pref__title{padding-top:var(--P);padding-left:var(--P);padding-right:var(--P);font-size:1.15rem;line-height:1}.lo-pref__inner{display:grid;grid-template-columns:repeat(4, 1fr);gap:var(--P);padding:var(--P)}.lo-pref__box{display:flex;flex-direction:column;gap:var(--PXS)}.lo-pref__box-title{display:flex;align-items:center;gap:calc(var(--PXS)/2);font-weight:500}.lo-pref__box-title>i{color:var(--TC--LIGHTEN)}.lo-pref__box-desc{font-size:.825rem;color:var(--TC--LIGHT)}.lo-pref__box-opt{font-size:.9rem}
  • listowp/trunk/assets/js/admin.js

    r2877206 r2884416  
    1515            this.$el.on('change', 'select', e => this.onSelectChange(e));
    1616
    17             ajax('listo/v1/admin', { position })
    18                 .done(json => this.render(json))
    19                 .fail(xhr => alert(xhr.responseJSON.message));
     17            ajax('listo/v1/admin', { position }).done(json => this.render(json));
    2018        }
    2119
     
    111109                    });
    112110                })
    113                 .fail(xhr => {
    114                     alert(xhr.responseJSON.message);
    115                     progress($config, 'fail');
    116                 });
     111                .fail(() => progress($config, 'fail'));
    117112
    118113            // Update toggle class.
     
    182177                    progress($config, 'done');
    183178                })
    184                 .fail(xhr => {
    185                     alert(xhr.responseJSON.message);
    186                     progress($config, 'fail');
    187                 });
     179                .fail(() => progress($config, 'fail'));
    188180        }
    189181
     
    203195                    progress($config, 'done');
    204196                })
    205                 .fail(xhr => {
    206                     alert(xhr.responseJSON.message);
    207                     progress($config, 'fail');
    208                 });
     197                .fail(() => progress($config, 'fail'));
    209198        }
    210199    }
     
    218207            beforeSend(xhr) {
    219208                xhr.setRequestHeader('X-WP-Nonce', REST_NONCE);
     209            }
     210        }).fail(xhr => {
     211            if (xhr && xhr.responseJSON) {
     212                alert(xhr.responseJSON.message);
    220213            }
    221214        });
  • listowp/trunk/assets/js/frontend.js

    r2878127 r2884416  
    1 !function(t,o,s,a={}){const n=t.wpApiSettings.root,l=t.wpApiSettings.nonce;var e={ajax(t,e={},i="GET"){return o.ajax({url:""+n+t,method:i,data:e,dataType:"json",beforeSend(t){t.setRequestHeader("X-WP-Nonce",l)}})},template(t){var e={variable:"data",evaluate:/\{\{([\s\S]+?)\}\}/g,interpolate:/\{\{=([\s\S]+?)\}\}/g,escape:/\{\{-([\s\S]+?)\}\}/g};let i=s.template(t,e);return i="function"!=typeof i?s.template(t,null,e):i},data(e="",i){let o=a,s;e=e.split(".");for(let t=0;t<e.length&&void 0!==o[e[t]];t++)t===e.length-1?void 0===i?s=o[e[t]]:o[e[t]]=i:o=o[e[t]];return s},class(t,e){if(t.match(/^Listo([A-Z][a-z]+)*$/))return"function"==typeof e&&"function"==typeof(e=e(this,o))&&(this[t]=e),this[t];throw new Error("Invalid Listo class name.")},escapeHtml(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},nl2br(t){return t.replace(/\r?\n/g,"<br>")},isIOS:/iPad|iPhone|iPod/.test(navigator.userAgent)};t.listo=e}(window,window.jQuery,window._,window.listoData),function(t){Object.assign(t,{hooks:function(){let n={};function i(t,e,i,o=10){if("function"==typeof e&&(o=i||o,i=e,e=`cb_t${(new Date).getTime()}_r`+(1e4+Math.floor(1e4*Math.random()))),"function"!=typeof i)throw new Error("The callback parameter must be a function.");if("number"!=typeof o)throw new Error("The priority parameter must be a number.");let s=n[t],a=(s=s||(n[t]=[])).length;for(;0<a&&!(o>=s[a-1].priority);a--);return s.splice(a,0,{name:e,callback:i,priority:o}),e}function o(t,e){if(void 0===e)delete n[t];else{var i=n[t];if(i){for(let t=i.length-1;0<=t;t--)i[t].name===e&&i.splice(t,1);i.length||delete n[t]}}}function s(t,i,...o){let e=n[t],s;return i&&(s=o[0]),e&&e.forEach(t=>{try{var e=t.callback.apply(null,o);i&&(s=o[0]=e)}catch(t){}}),s}return{addFilter(t,...e){return i("filter/"+t,...e)},removeFilter(t,...e){return o("filter/"+t,...e)},applyFilters(t,...e){return s("filter/"+t,!0,...e)},addAction(t,...e){return i("action/"+t,...e)},removeAction(t,...e){return o("action/"+t,...e)},doAction(t,...e){return s("action/"+t,!1,...e)}}}()})}(window.listo),function(t){function e(t){t.style.height="",t.style.height=+t.scrollHeight+"px"}t.fn.listo_autosize=function(){return this.each(function(){e(this),t(this).off("input.listo-autosize").on("input.listo-autosize",function(){e(this)})})}}(window.jQuery),listo.trimHtml=function(t,e){var i=document.createElement("div"),t=(i.innerHTML=t,function t(e,o=0){return[...e.childNodes].forEach(e=>{if([Node.ELEMENT_NODE,Node.TEXT_NODE].find(t=>t===e.nodeType))if(o<=0)e.remove();else{if(Node.ELEMENT_NODE===e.nodeType){if("BR"===e.tagName)return void o--;var i=t(e,o);o=i.length,e.childNodes.length||e.remove()}if(Node.TEXT_NODE===e.nodeType){let t=e.textContent;t.length<=o?o-=t.length:((t=t[o].match(/\s/)?t.slice(0,o):-1===(i=(t=t.slice(0,o)).lastIndexOf(" "))?"":t.slice(0,Math.min(t.length,i))).length?e.textContent=t:e.remove(),o=0)}}}),{element:e,length:o}}(i,e));return t.element.innerHTML},listo.class("Listo",function(o,a){const{ajax:i,hooks:n,template:s,data:l,escapeHtml:d,nl2br:r}=o,c=!!+l("enable_collections");return class{constructor(t){this.collectionsMap={},this.currentCollection=l("last_viewed_collection");var e=s(l("templates.root")),i={enable_collections:c,lang:l("lang")};this.$el=a(t).html(e(i)),this.$wrapper=this.$el.find("[data-listo=wrapper]"),this.$sidebar=this.$el.find("[data-listo=sidebar]"),this.$smartCollections=this.$el.find("[data-listo=smart-collections]"),this.$collections=this.$el.find("[data-listo=collections]"),this.$collectionHeader=this.$el.find("[data-listo=collection-header]"),this.$items=this.$el.find("[data-listo=items]"),this.$panels=this.$el.find("[data-listo=panel]"),this.$timezone=this.$el.find("[data-listo=user-timezone]"),this.$preferences=this.$el.find("[data-listo=preferences]"),this.$el.on("click change","[data-listo]",t=>this.triggerEventListener(t)),this.$el.on("click","[data-listo=pref-toggle]",t=>this.$preferences.fadeToggle(200)),this.$el.on("click","[data-listo=pref-close]",t=>this.$preferences.fadeToggle(200)),new(o.class("ListoCollectionHeader"))(this.$collectionHeader),new(o.class("ListoCollectionItems"))(this.$items),new(o.class("ListoNewCollection"))({toggle:this.$el.find("[data-listo=new-collection]"),form:this.$el.find("[data-listo=new-collection-form]")}),new(o.class("ListoNewItem"))({toggle:this.$el.find("[data-listo=new-item]"),form:this.$el.find("[data-listo=new-item-form]")}),this.sortable=new(o.class("ListoSortable"))(this.$el),n.addFilter("current_collection_id",()=>this.currentCollection),n.addFilter("can_create_item",t=>this.canCreateItem(t)),n.addAction("collection_added",t=>this.onCollectionAdded(t)),n.addAction("collection_updated",t=>this.onCollectionUpdated(t)),n.addAction("collection_deleted",t=>this.onCollectionDeleted(t)),n.addAction("items_loaded",()=>this.onItemsLoaded()),n.addAction("item_added",t=>this.onItemAdded(t)),n.addAction("item_moved",t=>this.onItemMoved(t)),n.addAction("maintenance",()=>this.maintenance()),a(document).on("keydown",t=>{"KeyF"!==t.code||!t.ctrlKey||t.altKey||t.shiftKey||this.onWrapperToggleClick(t)}),this.maintenance().always(()=>{c?this.loadCollections():this.loadItems("all"),this.getTimezone()})}$collection(t){return this.$smartCollections.add(this.$collections).children(`[data-listo=collection][data-id=${t}]`)}$item(t){return this.$items.children(`[data-listo=item][data-id=${t}]`)}loadCollections(){return this.$panels.addClass("loading"),i("listo/v1/collections").done(t=>{if(this.collectionsMap={},this.$smartCollections.empty(),this.$collections.empty(),t instanceof Array){t.sort((t,e)=>+t.order-+e.order);let i=s(l("templates.collection"));t.forEach(t=>{this.collectionsMap[t.id]=t;var e=i(t);(0<t.smart?this.$smartCollections:this.$collections).append(e)}),this.loadItems(this.currentCollection)}n.doAction("collections_loaded")}).fail(t=>alert(t.responseJSON.message)).always(()=>{this.$panels.removeClass("loading")})}loadItems(t){this.$panels.addClass("loading"),this.currentCollection=t;var e=this.$el.find("[data-listo=collection]"),i=this.$collection(t);e.filter(".active").not(i).removeClass("active"),i.addClass("active"),n.doAction("set_current_collection",this.collectionsMap[t])}loadItem(t){return i("listo/v1/items",{id:t}).done(t=>{}).fail(t=>alert(t.responseJSON.message))}updateItem(t,e={}){return i("listo/v1/items",Object.assign(e,{id:t}),"PATCH").done(t=>{}).fail(t=>alert(t.responseJSON.message))}canCreateItem(t){return t=t||this.currentCollection,-1===["due","scheduled","done","recurring"].indexOf(t)}getTimezone(){return i("listo/v1/preferences",{id:"timezone"}).done(t=>{t.timezone&&this.$timezone.val(t.timezone)})}setTimezone(t){return i("listo/v1/preferences",{id:"timezone",value:t},"PATCH")}maintenance(){return i("listo/v1/maintenance").done(t=>{if(t instanceof Array&&t[0]instanceof Object)for(const e in t[0]){let s=t[0][e];this.$collection(e).find("[data-field]").each((t,e)=>{var e=a(e),i=e.data("field"),o=s[i+"_formatted"];e.html(o),"count_items_due"===i&&(+o?e.show():e.hide())}),n.doAction("count_items_updated",Object.assign(s,{id:e}))}})}triggerEventListener(t){var e="on"+h(t.currentTarget.getAttribute("data-listo")+"-"+t.type);"function"==typeof this[e]&&this[e](t)}onWrapperToggleClick(t){t.preventDefault(),t.stopPropagation(),this.$wrapper.toggleClass("lo-wrapper--fullscreen")}onSidebarToggleClick(t){t.preventDefault(),t.stopPropagation(),this.$sidebar.hasClass("lo-sidebar--expanded")?(a(document).off("click.listo-sidebar"),this.$sidebar.removeClass("lo-sidebar--expanded")):(this.$sidebar.addClass("lo-sidebar--expanded"),a(document).one("click.listo-sidebar",()=>{this.$sidebar.removeClass("lo-sidebar--expanded")}))}onCollectionAdded(t={}){"object"==typeof t&&t.id&&(this.currentCollection=t.id,this.loadCollections())}onCollectionUpdated(e={}){if("object"==typeof e&&e.id){var i=this.$collection(e.id);for(const o in e){let t=e[o];-1<["initials","title","description"].indexOf(o)&&(t=r(d(t))),i.find(`[data-field=${o}]`).html(t)}}}onCollectionDeleted(t){this.$collection(t).remove(),this.currentCollection="inbox",this.loadCollections()}onCollectionClick(t){t.preventDefault();t=a(t.currentTarget);this.loadItems(t.data("id"))}onItemsLoaded(){this.sortable.init(this.currentCollection)}onItemAdded(t={}){"object"==typeof t&&t.id&&(n.doAction("maintenance"),this.loadItems(this.currentCollection))}onItemMoved(t=0){var e;this.$items.children("[data-listo=item]").length||n.applyFilters("can_create_item")||(e=s(l("templates.item_list_empty"))({collection:this.currentCollection}),this.$items.append(e)),n.doAction("maintenance")}onUserTimezoneChange(t){this.setTimezone(t.currentTarget.value).done(()=>{c?this.loadCollections():this.loadItems("all")})}onGdprDeleteClick(t){if(t.preventDefault(),t.stopPropagation(),confirm(l("lang.gdpr_delete_confirmation")))return i("listo/v1/gdpr",{},"DELETE").done(t=>{this.currentCollection="inbox",this.$timezone.val("+00:00"),c?this.loadCollections():this.loadItems("all")}).fail(t=>alert(t.responseJSON.message))}onDropdownToggleClick(t){let e=a(t.currentTarget).siblings("[data-listo=dropdown-menu]");e.is(":hidden")?(t.stopPropagation(),e.show(),a(document).one("click",()=>e.hide())):e.hide()}onDropdownMenuClick(t){t.stopPropagation()}};function h(t){return t.replace(/(?:^|-)([a-z])/gi,function(t,e){return e.toUpperCase()})}}),listo.class("ListoCollectionHeader",function(t,e){const{ajax:s,hooks:a,data:i,escapeHtml:n,nl2br:l}=t,d=+i("animation_speed");return class{constructor(t){this.data=null,this.saving=!1,this.$el=e(t),this.$info=this.$el.find("[data-listo=collection-info]"),this.$infoTitle=this.$info.find("[data-listo=title]"),this.$infoDescription=this.$info.find("[data-listo=description]"),this.$infoDescriptionToggle=this.$info.find("[data-listo=description-toggle]"),this.$edit=this.$el.find("[data-listo=edit-collection]"),this.$editForm=this.$el.find("[data-listo=edit-collection-form]"),this.$editTitle=this.$editForm.find("[name=title]"),this.$editDescription=this.$editForm.find("[name=description]"),this.$editCancel=this.$editForm.find("[data-listo=cancel]"),this.$editSave=this.$editForm.find("[data-listo=save]"),this.$delete=this.$el.find("[data-listo=delete-collection]"),this.$deleteForm=this.$el.find("[data-listo=delete-collection-form]"),this.$deleteCancel=this.$el.find("[data-listo=delete-collection-cancel]"),this.$deleteConfirm=this.$el.find("[data-listo=delete-collection-confirm]"),this.$createItem=e('[data-listo="wrapper"]').find("[data-listo=new-item]"),this.$infoDescriptionToggle.on("click",t=>this.onInfoDescriptionToggleClick(t)),this.$edit.on("click",t=>this.onEditClick(t)),this.$editTitle.on("input",t=>this.onEditTitleInput(t)),this.$editDescription.on("input",t=>this.onEditDescriptionInput(t)),this.$editCancel.on("click",t=>this.onEditCancelClick(t)),this.$editSave.on("click",t=>this.onEditSaveClick(t)),this.$delete.on("click",t=>this.onDeleteClick(t)),this.$deleteCancel.on("click",t=>this.onDeleteCancelClick(t)),this.$deleteConfirm.on("click",t=>this.onDeleteConfirmClick(t)),a.addAction("collections_loaded",()=>this.$el.show()),a.addAction("set_current_collection",t=>this.update(t)),a.addAction("count_items_updated",t=>this.updateCountItems(t))}reset(){var t=this.data.title.trim(),e=this.data.description.trim(),i=+this.data.smart,o=-1===["due","scheduled","done","recurring"].indexOf(this.data.id),t=(this.$info.show(),this.$infoTitle.html(l(n(t))),this.$infoDescription.html(l(n(e))),this.$edit[i?"hide":"show"](),this.$editForm.hide(),this.$editTitle.val(t),this.$editDescription.val(e),this.$editCancel.removeAttr("disabled"),this.$editSave.attr("disabled","disabled"),this.$delete.parent()[i?"fadeOut":"fadeIn"](d),this.$delete.show(),this.$deleteForm.hide(),this.$deleteCancel.hide(),this.$createItem[o?"show":"hide"](),this.$infoDescription[0]);t.scrollHeight>1.5*t.clientHeight?this.$infoDescriptionToggle.show():this.$infoDescriptionToggle.hide(),this.updateCountItems(this.data)}update(t){this.data=t,this.reset()}updateCountItems(t={}){t.id===this.data.id&&(this.$info.find("[data-field=count_items]").html(t.count_items),this.$info.find("[data-field=count_items_done]").html(t.count_items_done),this.$info.find("[data-field=count_items_due]").html(t.count_items_due))}onInfoDescriptionToggleClick(t){t.preventDefault(),t.stopPropagation();t="auto"===this.$infoDescription[0].style.height;this.$infoDescription.css({height:t?"":"auto",overflow:t?"":"visible"}),this.$infoDescriptionToggle[t?"removeClass":"addClass"]("lo-tip--alt")}onEditClick(t){t.preventDefault(),t.stopPropagation(),this.$info.hide(),this.$edit.hide(),this.$editForm.show(),this.$editTitle.data("value",this.$editTitle.val()),this.$editDescription.data("value",this.$editDescription.val()).listo_autosize(),this.$editSave.attr("disabled","disabled"),this.$createItem.fadeOut(d),setTimeout(()=>this.$editTitle[0].focus(),100)}onEditTitleInput(t){var e=this.$editTitle.val();e.trim()&&e!==this.$editTitle.data("value")||this.$editDescription.val()!==this.$editDescription.data("value")?this.$editSave.removeAttr("disabled"):this.$editSave.attr("disabled","disabled")}onEditDescriptionInput(t){var e=this.$editTitle.val();e.trim()&&e!==this.$editTitle.data("value")||this.$editDescription.val()!==this.$editDescription.data("value")?this.$editSave.removeAttr("disabled"):this.$editSave.attr("disabled","disabled")}onEditCancelClick(t){t.preventDefault(),t.stopPropagation(),this.reset()}onEditSaveClick(t){if(t.preventDefault(),t.stopPropagation(),!this.saving){this.saving=!0,this.$editCancel.add(this.$editSave).attr("disabled","disabled");let e=this.data.id;var t=this.$editTitle.val().trim(),o=this.$editDescription.val().trim();let i={id:e,title:t,description:o};s("listo/v1/collections",i,"PATCH").done(t=>{Object.assign(this.data,i),s("listo/v1/collections",{id:e}).done(t=>{t instanceof Array&&t[0]&&(this.data=t[0])}).always(()=>{this.saving=!1,this.reset(),a.doAction("collection_updated",this.data)})}).fail(t=>alert(t.responseJSON.message))}}onDeleteClick(t){t.preventDefault(),t.stopPropagation(),this.$delete.hide(),this.$deleteForm.add(this.$deleteCancel).fadeIn(d)}onDeleteCancelClick(t){t.preventDefault(),t.stopPropagation(),this.$deleteForm.add(this.$deleteCancel).fadeOut(d,()=>this.$delete.show())}onDeleteConfirmClick(t){t.preventDefault(),t.stopPropagation(),s("listo/v1/collections/"+this.data.id,{},"DELETE").done(t=>{this.$deleteForm.add(this.$deleteCancel).hide(),this.$delete.show(),a.doAction("collection_deleted",this.data.id)}).fail(t=>alert(t.responseJSON.message))}onCreateItemClick(t){}}}),listo.class("ListoCollectionItems",function(t,c){const{ajax:o,hooks:s,template:a,data:n,isIOS:l}=t,i=+n("animation_speed");return class{constructor(t){this.collection=null,this.$el=c(t),this.$el.on("click","[data-listo=item]",t=>this.onItemClick(t)),this.$el.on("click","[data-listo=item-toggle]",t=>this.onItemToggleClick(t)),this.$el.on("click","[data-listo=item-check]",t=>this.onItemCheckClick(t)),this.$el.on("click","[data-listo=description-toggle]",t=>this.onDescriptionToggleClick(t)),this.$el.on("click","[data-listo=item-due-picker]",t=>this.onItemDuePickerClick(t)).on("input","[data-listo=item-due-picker]",t=>this.onItemDuePickerInput(t)).on("change","[data-listo=item-due-picker]",t=>this.onItemDuePickerChange(t)).on("blur","[data-listo=item-due-picker]",t=>this.onItemDuePickerBlur(t)),this.$el.on("click","[data-listo=item-due-remove]",t=>this.onItemDueRemoveClick(t)),this.$el.on("click","[data-listo=delete-item]",t=>this.onDeleteItemClick(t)),this.$el.on("click","[data-listo=delete-item-cancel]",t=>this.onCancelDeleteItemClick(t)),this.$el.on("click","[data-listo=delete-item-confirm]",t=>this.onConfirmDeleteItemClick(t)),this.$el.on("click","[data-listo=edit-item]",t=>this.onEditItemClick(t)),this.$el.on("input","[name=title]",t=>this.onEditTitleInput(t)),this.$el.on("input","[name=description]",t=>this.onEditDescriptionInput(t)),this.$el.on("click","[data-listo=cancel]",t=>this.onCancelEditItemClick(t)),this.$el.on("click","[data-listo=save]",t=>this.onSaveEditItemClick(t)),s.addAction("set_current_collection",t=>this.update(t))}update(t){this.collection=t.id,o("listo/v1/items",{collection:this.collection}).done(t=>{this.render(t),s.doAction("items_loaded",t)}).fail(t=>alert(t.responseJSON.message))}render(t){if(this.$el.empty(),t instanceof Array&&t.length){let e=a(n("templates.item"));t.forEach(t=>{t.due=t.due&&t.due.split(" ")[0],this.$el.append(e(t))})}else s.applyFilters("can_create_item")||(t=a(n("templates.item_list_empty")),this.$el.append(t({collection:this.collection})))}loadItem(t){return o("listo/v1/items",{id:t}).done(t=>{}).fail(t=>alert(t.responseJSON.message))}updateItem(t,e={}){return o("listo/v1/items",Object.assign(e,{id:t}),"PATCH").done(t=>{t instanceof Array&&t[0]&&s.doAction("item_updated",t[0])}).fail(t=>alert(t.responseJSON.message))}toggleItem(t,e){var i=c(t),o=c("[data-listo=item]"),s="lo-task--full";!0!==e||i.hasClass(s)?!1===e&&i.hasClass(s)?i.removeClass(s):void 0===e&&this.toggleItem(t,!i.hasClass(s)):(o.removeClass(s),i.addClass(s))}onItemClick(t){t.preventDefault(),t.stopPropagation(),this.toggleItem(t.currentTarget,!0)}onItemToggleClick(t){t.preventDefault(),t.stopPropagation();t=c(t.currentTarget).closest("[data-listo=item]");this.toggleItem(t)}onItemCheckClick(t){t.preventDefault(),t.stopPropagation();let o=c(t.currentTarget).closest("[data-listo=item]");if(!o.data("saving")){o.data("saving",1);let t=o.data("id"),e=o.data("rrule_id"),i=+o.data("status")?0:1;this.updateItem(t,{status:i,rrule_id:e}).done(()=>{e&&i?(this.update({id:this.collection}),o.removeData("saving"),s.doAction("maintenance")):"done"!==this.collection||i?this.loadItem(t).done(t=>{var e;t instanceof Array&&t.length&&(e=a(n("templates.item")),(t=t[0]).due=t.due&&t.due.split(" ")[0],o.replaceWith(e(t))),o.removeData("saving"),s.doAction("maintenance")}):(o.remove(),o.removeData("saving"),s.doAction("maintenance"))})}}onItemDuePickerClick(t){t.stopPropagation();t=c(t.currentTarget);t.data("value",t.val()),t[0].showPicker()}onItemDuePickerInput(t){t.stopPropagation();let i=(new Date).getTime(),o=c(t.currentTarget).data("date-event-id",i);setTimeout(()=>{var t=(l?o.data("onblur"):o.data("onchange"))&&o.data("value")!==o.val();if(o.removeData("onchange onblur"),t&&o.data("date-event-id")===i){let i=o.closest("[data-listo=item-due]");var t=i.closest("[data-listo=item]").data("id"),e=o.val();i.show().css("opacity",.3),this.updateItem(t,{due:e}).done(t=>{var e;t instanceof Array&&t.length&&(e=a(n("templates.item_due")),(t=t[0]).due=t.due&&t.due.split(" ")[0],i.replaceWith(e(t))),s.doAction("maintenance")})}},200)}onItemDuePickerChange(t){t.stopPropagation(),c(t.currentTarget).data("onchange",!0)}onItemDuePickerBlur(t){t.stopPropagation(),c(t.currentTarget).data("onblur",!0),this.onItemDuePickerInput(t)}onItemDueRemoveClick(t){t.stopPropagation();let i=c(t.currentTarget).closest("[data-listo=item-due]");t=i.closest("[data-listo=item]");this.updateItem(t.data("id"),{due:""}).done(t=>{var e;t instanceof Array&&t.length&&(e=a(n("templates.item_due")),(t=t[0]).due=t.due&&t.due.split(" ")[0],i.replaceWith(e(t))),s.doAction("maintenance")})}onDeleteItemClick(t){t.preventDefault(),t.stopPropagation();t=c(t.currentTarget).closest("[data-listo=item]");t.find("[data-listo=delete-item]").hide(),t.find("[data-listo=delete-item-form]").add(t.find("[data-listo=delete-item-cancel]")).fadeIn(i)}onCancelDeleteItemClick(t){t.preventDefault(),t.stopPropagation();let e=c(t.currentTarget).closest("[data-listo=item]");e.find("[data-listo=delete-item-form]").add(e.find("[data-listo=delete-item-cancel]")).fadeOut(i,()=>{e.find("[data-listo=delete-item]").show()})}onConfirmDeleteItemClick(t){t.preventDefault(),t.stopPropagation();let e=c(t.currentTarget).closest("[data-listo=item]");t=e.data("id");return o("listo/v1/items/"+t,{},"DELETE").done(()=>{e.siblings().length?e.css({opacity:0}).slideUp(i,()=>e.remove()):this.render([]),s.doAction("maintenance")}).fail(t=>alert(t.responseJSON.message))}onDescriptionToggleClick(t){t.preventDefault(),t.stopPropagation();var t=c(t.currentTarget).closest("[data-listo=item]"),e=t.find("[data-listo=description]").parent(),t=t.find("[data-listo=description-toggle]");e.slideToggle(),t.toggleClass("lo-tip--alt")}onEditItemClick(t){t.preventDefault(),t.stopPropagation();var t=c(t.currentTarget).closest("[data-listo=item]"),e=t.find("[data-listo=item-check]").parent(),i=t.find("[data-listo=title]").parent(),o=t.find("[data-listo=description]").parent(),s=t.find("[data-listo=description-toggle]"),a=t.find("[data-listo=edit-item]"),n=t.find("[data-listo=edit-item-form]");let l=n.find("[name=title]");var d=n.find("[name=description]"),r=n.find("[data-listo=save]");t.toggleClass("lo-task--edit"),a.hide(),e.hide(),i.hide(),o.hide(),s.hide(),n.show(),l.data("value",l.val()),d.data("value",d.val()).listo_autosize(),r.attr("disabled","disabled"),setTimeout(()=>l[0].focus(),100)}onEditTitleInput(t){var t=c(t.currentTarget).closest("[data-listo=edit-item-form]"),e=t.find("[name=title]"),i=t.find("[name=description]"),t=t.find("[data-listo=save]");e.val().trim()&&e.val()!==e.data("value")||i.val()!==i.data("value")?t.removeAttr("disabled"):t.attr("disabled","disabled")}onEditDescriptionInput(t){var t=c(t.currentTarget).closest("[data-listo=edit-item-form]"),e=t.find("[name=title]"),i=t.find("[name=description]"),t=t.find("[data-listo=save]");e.val().trim()&&e.val()!==e.data("value")||i.val()!==i.data("value")?t.removeAttr("disabled"):t.attr("disabled","disabled")}onCancelEditItemClick(t){t.preventDefault(),t.stopPropagation();var t=c(t.currentTarget).closest("[data-listo=item]"),e=t.find("[data-listo=item-check]").parent(),i=t.find("[data-listo=title]").parent(),o=t.find("[data-listo=description]").parent(),s=t.find("[data-listo=description-toggle]"),a=t.find("[data-listo=edit-item]"),n=t.find("[data-listo=edit-item-form]"),l=n.find("[name=title]"),d=n.find("[name=description]"),r=n.find("[data-listo=save]");t.toggleClass("lo-task--edit"),e.show(),a.show(),i.show(),o.hide(),s.show(),n.hide(),l.val(l.data("value")),d.val(d.data("value")),r.attr("disabled","disabled")}onSaveEditItemClick(t){t.preventDefault(),t.stopPropagation();let i=c(t.currentTarget).closest("[data-listo=item]");var t=i.find("[data-listo=edit-item-form]"),e=t.find("[name=title]"),t=t.find("[name=description]"),e={id:i.data("id"),title:e.val().trim(),description:t.val().trim()};return o("listo/v1/items",e,"PATCH").done(t=>{var e=a(n("templates.item")),t=t[0];t.due=t.due&&t.due.split(" ")[0],i.replaceWith(e(t)),s.doAction("maintenance")}).fail(t=>alert(t.responseJSON.message))}}}),listo.class("ListoNewCollection",function(t,e){const{ajax:s,hooks:a,data:i}=t,o=+i("animation_speed");return class{constructor(t={}){this.saving=!1,this.$toggle=e(t.toggle),this.$form=e(t.form),this.$title=this.$form.find("[name=title]"),this.$cancel=this.$form.find("[data-listo=cancel]"),this.$save=this.$form.find("[data-listo=save]"),this.$saveAndNew=this.$form.find("[data-listo=save-and-new]"),this.$buttons=this.$save.add(this.$saveAndNew),this.$toggle.on("click",t=>t.stopPropagation()||this.show()),this.$cancel.on("click",t=>t.stopPropagation()||this.hide()),this.$form.on("click",t=>t.stopPropagation()),this.$title.on("keydown",t=>this.onKeyDown(t)),this.$title.on("input",()=>this.onInput()),this.$save.on("click",()=>this.submit()),this.$saveAndNew.on("click",()=>this.submit(!0)),a.addAction("collections_loaded",()=>this.$toggle.show()),a.addAction("new_item_form",()=>this.hide())}show(){this.$form.is(":hidden")&&(this.$toggle.hide(),this.$form.fadeIn(o),this.$title.focus(),a.doAction("new_collection_form"))}hide(){this.$form.is(":visible")&&(this.$form.hide(),this.$toggle.fadeIn(o))}value(t){if("string"!=typeof t)return this.$title.val().trim();this.$title.val(t.trim())}submit(i){let o=this.value();o&&!this.saving&&(this.saving=!0,this.onInput(),s("listo/v1/collections",{},"POST").done(e=>{if(e instanceof Array&&e[0]){let t=Object.assign(e[0],{title:o});e=t["id"];s("listo/v1/collections",{id:e,title:o},"PATCH").fail(t=>alert(t.responseJSON.message)).always(()=>{this.value(""),this.saving=!1,this.onInput(),a.doAction("collection_added",t),i?this.$title.focus():this.hide()})}}).fail(t=>alert(t.responseJSON.message)))}onKeyDown(t){"Enter"===t.code?(t.preventDefault(),t.stopPropagation(),(t.shiftKey?this.$saveAndNew:this.$save).trigger("click")):"Escape"===t.code&&this.hide()}onInput(){this.value()&&!this.saving?this.$buttons.removeAttr("disabled"):this.$buttons.attr("disabled","disabled")}}}),listo.class("ListoNewItem",function(t,e){const{ajax:a,hooks:n,data:i}=t,o=+i("animation_speed");return class{constructor(t={}){this.saving=!1,this.$toggle=e(t.toggle),this.$form=e(t.form),this.$title=this.$form.find("[name=title]"),this.$cancel=this.$form.find("[data-listo=cancel]"),this.$save=this.$form.find("[data-listo=save]"),this.$saveAndNew=this.$form.find("[data-listo=save-and-new]"),this.$buttons=this.$save.add(this.$saveAndNew),this.$toggle.on("click",t=>t.stopPropagation()||this.show()),this.$cancel.on("click",t=>t.stopPropagation()||this.hide()),this.$form.on("click",t=>t.stopPropagation()),this.$title.on("keydown",t=>this.onKeyDown(t)),this.$title.on("input",()=>this.onInput()),this.$save.on("click",()=>this.submit()),this.$saveAndNew.on("click",()=>this.submit(!0)),n.addAction("new_collection_form",()=>this.hide())}show(){this.$form.is(":hidden")&&(this.$toggle.hide(),this.$form.fadeIn(o),this.$title.focus(),n.doAction("new_item_form"))}hide(){this.$form.is(":visible")&&(this.$form.hide(),this.$toggle.fadeIn(o))}value(t){if("string"!=typeof t)return this.$title.val().trim();this.$title.val(t.trim())}submit(o){let s=this.value();s&&!this.saving&&(this.saving=!0,this.onInput(),a("listo/v1/items",{},"POST").done(e=>{if(e instanceof Array&&e[0]){var i=+n.applyFilters("current_collection_id")||void 0;let t=Object.assign(e[0],{title:s,collection:i});e=t["id"];a("listo/v1/items",{id:e,title:s,collection:i},"PATCH").fail(t=>alert(t.responseJSON.message)).always(()=>{this.value(""),this.saving=!1,this.onInput(),n.doAction("item_added",t),o?this.$title.focus():this.hide()})}}).fail(t=>alert(t.responseJSON.message)))}onKeyDown(t){"Enter"===t.code?(t.preventDefault(),t.stopPropagation(),(t.shiftKey?this.$saveAndNew:this.$save).trigger("click")):"Escape"===t.code&&this.hide()}onInput(){this.value()&&!this.saving?this.$buttons.removeAttr("disabled"):this.$buttons.attr("disabled","disabled")}}}),listo.class("ListoSortable",function(t,l){const{ajax:i,hooks:o}=t;return class{constructor(t){this.$el=l(t),this.$smartCollections=this.$el.find("[data-listo=smart-collections]"),this.$collections=this.$el.find("[data-listo=collections]"),this.$items=this.$el.find("[data-listo=items]")}getObjects(){return l().add(this.$smartCollections.find("[data-listo=collection]")).add(this.$collections.find("[data-listo=collection]")).add(this.$items.find("[data-listo=item]")).toArray()}init(t){this.currentCollection=t,this.objects=this.getObjects(),this.draggedObject=null,this.objects.forEach(t=>{t.getAttribute("draggable")||(t.draggable=!0,t.addEventListener("dragstart",this.onDragStart.bind(this)),t.addEventListener("dragenter",this.onDragEnter.bind(this)),t.addEventListener("dragover",this.onDragOver.bind(this)),t.addEventListener("dragleave",this.onDragLeave.bind(this)),t.addEventListener("dragend",this.onDragEnd.bind(this)),t.addEventListener("drop",this.onDrop.bind(this)))})}reorderCollections(){var t=this.$collections.children("[data-listo=collection]").toArray().map(t=>t.getAttribute("data-id"));return i("listo/v1/collections",{ids:t},"PATCH").done(()=>{o.doAction("collections_reorder")})}reorderItems(){var t=this.$items.children("[data-listo=item]").toArray().map(t=>t.getAttribute("data-id")),e=this.currentCollection;return i("listo/v1/items",{ids:t,collection:e},"PATCH").done(()=>{o.doAction("items_reorder")})}moveItem(t,e){return e=0<e?e:0,i("listo/v1/items",{id:t,collection:e},"PATCH").done(()=>{o.doAction("item_move",{id:t,collection:e})})}canDrag(t){if("collection"===t.getAttribute("data-listo")){if(!+t.getAttribute("data-id"))return!1}else{t=this.currentCollection;if(!+t&&"inbox"!==t)return!1}return!0}canDrop(t,e){if(t&&t!==e){var i=t.getAttribute("data-listo"),o=e.getAttribute("data-listo"),t=t.getAttribute("data-id"),e=e.getAttribute("data-id");if("collection"===i){if("item"===o)return!1;if(!+e)return!1}else if("item"===i)if("collection"===o){if(e==this.currentCollection)return!1;if(!+e&&"inbox"!==e)return!1}else if(!+this.currentCollection)return!1;return{sourceType:i,sourceId:t,targetType:o,targetId:e}}return!1}onDragStart(t){var e=t.currentTarget;this.canDrag(e)?this.draggedObject=e:t.preventDefault()}onDragEnter(t){var e=this.draggedObject,t=t.currentTarget;this.canDrop(e,t)}onDragOver(t){return t.preventDefault(),!1}onDragLeave(t){this.draggedObject,t.currentTarget}onDragEnd(t){t.currentTarget;this.objects.forEach(t=>{})}onDrop(s){s.stopPropagation(),s.preventDefault();let a=this.draggedObject;var s=s.currentTarget,n=this.canDrop(a,s);if(n){let{sourceType:t,sourceId:e,targetType:i,targetId:o}=n;"item"===t&&"collection"===i?l(a).css({opacity:0}).slideUp(()=>{a.remove(),this.moveItem(e,o)}):t===i&&(n=a.parentElement,d(a)>d(s)?n.insertBefore(a,s):(s=s.nextElementSibling)?n.insertBefore(a,s):n.append(a),"collection"===t?this.reorderCollections():"item"===t&&this.reorderItems()),this.draggedObject=null}}};function d(t,e=0){return e=t.previousElementSibling?d(t.previousElementSibling,e+1):e}}),function(e,t,i,o={}){function s(){document.querySelectorAll("[data-listo=root]").forEach(t=>new e.Listo(t))}+t.logged_in&&i(function(){o&&o.domReady?o.domReady(()=>setTimeout(s,0)):s()})}(window.listo,window.listoData,window.jQuery,window.wp);
     1!function(t,o,s,n={}){const a=t.wpApiSettings.root,l=t.wpApiSettings.nonce;var e={ajax(t,e={},i="GET"){return o.ajax({url:""+a+t,method:i,data:e,dataType:"json",beforeSend(t){t.setRequestHeader("X-WP-Nonce",l)}}).fail(t=>{t&&t.responseJSON&&alert(t.responseJSON.message)})},template(t){var e={variable:"data",evaluate:/\{\{([\s\S]+?)\}\}/g,interpolate:/\{\{=([\s\S]+?)\}\}/g,escape:/\{\{-([\s\S]+?)\}\}/g};let i=s.template(t,e);return i="function"!=typeof i?s.template(t,null,e):i},data(e="",i){let o=n,s;e=e.split(".");for(let t=0;t<e.length&&void 0!==o[e[t]];t++)t===e.length-1?void 0===i?s=o[e[t]]:o[e[t]]=i:o=o[e[t]];return s},class(t,e){if(t.match(/^Listo([A-Z][a-z]+)*$/))return"function"==typeof e&&"function"==typeof(e=e(this,o))&&(this[t]=e),this[t];throw new Error("Invalid Listo class name.")},escapeHtml(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},nl2br(t){return t.replace(/\r?\n/g,"<br>")},isIOS:/iPad|iPhone|iPod/.test(navigator.userAgent),focus(t){var e;(t=t.jquery?t[0]:t).focus(),t.setSelectionRange&&(e=t.value.length,t.setSelectionRange(e,e))}};t.listo=e}(window,window.jQuery,window._,window.listoData),function(t){Object.assign(t,{hooks:function(){let a={};function i(t,e,i,o=10){if("function"==typeof e&&(o=i||o,i=e,e=`cb_t${(new Date).getTime()}_r`+(1e4+Math.floor(1e4*Math.random()))),"function"!=typeof i)throw new Error("The callback parameter must be a function.");if("number"!=typeof o)throw new Error("The priority parameter must be a number.");let s=a[t],n=(s=s||(a[t]=[])).length;for(;0<n&&!(o>=s[n-1].priority);n--);return s.splice(n,0,{name:e,callback:i,priority:o}),e}function o(t,e){if(void 0===e)delete a[t];else{var i=a[t];if(i){for(let t=i.length-1;0<=t;t--)i[t].name===e&&i.splice(t,1);i.length||delete a[t]}}}function s(t,i,...o){let e=a[t],s;return i&&(s=o[0]),e&&(e=e.map(t=>t.callback)).forEach(t=>{try{var e=t.apply(null,o);i&&(s=o[0]=e)}catch(t){}}),s}return{addFilter(t,...e){return i("filter/"+t,...e)},removeFilter(t,...e){return o("filter/"+t,...e)},applyFilters(t,...e){return s("filter/"+t,!0,...e)},addAction(t,...e){return i("action/"+t,...e)},removeAction(t,...e){return o("action/"+t,...e)},doAction(t,...e){return s("action/"+t,!1,...e)}}}()})}(window.listo),function(t){function e(t){t.style.height="",t.style.height=+t.scrollHeight+"px"}t.fn.listo_autosize=function(){return this.each(function(){e(this),t(this).off("input.listo-autosize").on("input.listo-autosize",function(){e(this)})})}}(window.jQuery),listo.trimHtml=function(t,e){var i=document.createElement("div"),t=(i.innerHTML=t,function t(e,o=0){return[...e.childNodes].forEach(e=>{if([Node.ELEMENT_NODE,Node.TEXT_NODE].find(t=>t===e.nodeType))if(o<=0)e.remove();else{if(Node.ELEMENT_NODE===e.nodeType){if("BR"===e.tagName)return void o--;var i=t(e,o);o=i.length,e.childNodes.length||e.remove()}if(Node.TEXT_NODE===e.nodeType){let t=e.textContent;t.length<=o?o-=t.length:((t=t[o].match(/\s/)?t.slice(0,o):-1===(i=(t=t.slice(0,o)).lastIndexOf(" "))?"":t.slice(0,Math.min(t.length,i))).length?e.textContent=t:e.remove(),o=0)}}}),{element:e,length:o}}(i,e));return t.element.innerHTML},listo.class("ListoAbstract",function(t,e){return class{constructor(t){this.$container=e(t),this.$container.on("click change input","[data-listo]",t=>{this.triggerEventListener(t)})}triggerEventListener(t){var e="on"+i(t.currentTarget.getAttribute("data-listo")+"-"+t.type);"function"==typeof this[e]&&this[e](t)}};function i(t){return t.replace(/(?:^|-)([a-z])/gi,function(t,e){return e.toUpperCase()})}}),listo.class("ListoRoot",function(o,n){const{ajax:i,hooks:a,template:s,data:l,escapeHtml:d,nl2br:r}=o,c=!!+l("enable_collections"),e=+l("animation_speed")||0;return class extends o.class("ListoAbstract"){constructor(t){super(t),this.collectionsMap={},this.currentCollection=l("last_viewed_collection");var e=s(l("templates.root")),i={enable_collections:c,lang:l("lang")};this.$el=n(t).html(e(i)),this.$wrapper=this.$el.find("[data-listo=wrapper]"),this.$sidebar=this.$el.find("[data-listo=sidebar]"),this.$smartCollections=this.$el.find("[data-listo=smart-collections]"),this.$collections=this.$el.find("[data-listo=collections]"),this.$collectionHeader=this.$el.find("[data-listo=collection-header]"),this.$items=this.$el.find("[data-listo=items]"),this.$panels=this.$el.find("[data-listo=panel]"),this.$timezone=this.$el.find("[data-listo=user-timezone]"),this.$preferences=this.$el.find("[data-listo=preferences]"),new(o.class("ListoCollectionHeader"))(this.$collectionHeader),new(o.class("ListoItems"))(this.$items),new(o.class("ListoNewCollection"))({toggle:this.$el.find("[data-listo=new-collection]"),form:this.$el.find("[data-listo=new-collection-form]")}),new(o.class("ListoNewItem"))({toggle:this.$el.find("[data-listo=new-item]"),form:this.$el.find("[data-listo=new-item-form]")}),this.sortable=new(o.class("ListoSortable"))(this.$el),a.addFilter("current_collection_id",()=>this.currentCollection),a.addFilter("can_create_item",t=>this.canCreateItem(t)),a.addAction("collection_added",t=>this.onCollectionAdded(t)),a.addAction("collection_updated",t=>this.onCollectionUpdated(t)),a.addAction("collection_deleted",t=>this.onCollectionDeleted(t)),a.addAction("items_loaded",()=>this.onItemsLoaded()),a.addAction("item_added",()=>this.onItemAdded()),a.addAction("item_moved",t=>this.onItemMoved(t)),a.addAction("maintenance",()=>this.maintenance()),n(document).on("keydown",t=>{"KeyF"===t.code&&t.ctrlKey&&!t.altKey&&this.onWrapperToggleClick(t)}),this.maintenance().always(()=>{c?this.loadCollections():this.loadItems("all"),this.getTimezone()})}$collection(t){return this.$smartCollections.add(this.$collections).children(`[data-listo=collection][data-id=${t}]`)}$item(t){return this.$items.children(`[data-listo=item][data-id=${t}]`)}loadCollections(){return this.$panels.addClass("loading"),i("listo/v1/collections").done(t=>{if(this.collectionsMap={},this.$smartCollections.empty(),this.$collections.empty(),t instanceof Array){t.sort((t,e)=>+t.order-+e.order);let i=s(l("templates.collection"));t.forEach(t=>{this.collectionsMap[t.id]=t;var e=i(t);(0<t.smart?this.$smartCollections:this.$collections).append(e)}),this.loadItems(this.currentCollection)}a.doAction("collections_loaded")}).always(()=>{this.$panels.removeClass("loading")})}loadItems(t){this.$panels.addClass("loading"),this.currentCollection=t;var e=this.$el.find("[data-listo=collection]"),i=this.$collection(t);e.filter(".active").not(i).removeClass("active"),i.addClass("active"),a.doAction("set_current_collection",this.collectionsMap[t])}loadItem(t){return i("listo/v1/items",{id:t}).done(t=>{})}updateItem(t,e={}){return i("listo/v1/items",Object.assign(e,{id:t}),"PATCH").done(t=>{})}canCreateItem(t){return t=t||this.currentCollection,-1===["due","scheduled","done","recurring"].indexOf(t)}getTimezone(){return i("listo/v1/preferences",{id:"timezone"}).done(t=>{t.timezone&&this.$timezone.val(t.timezone)})}setTimezone(t){return i("listo/v1/preferences",{id:"timezone",value:t},"PATCH")}maintenance(){return i("listo/v1/maintenance").done(t=>{if(t instanceof Array&&t[0]instanceof Object)for(const e in t[0]){let s=t[0][e];this.$collection(e).find("[data-field]").each((t,e)=>{var e=n(e),i=e.data("field"),o=s[i+"_formatted"];e.html(o),"count_items_due"===i&&(+o?e.show():e.hide())}),a.doAction("count_items_updated",Object.assign(s,{id:e}))}})}onWrapperToggleClick(t){t.preventDefault(),t.stopPropagation(),this.$wrapper.toggleClass("lo-wrapper--fullscreen")}onSidebarToggleClick(t){t.preventDefault(),t.stopPropagation(),this.$sidebar.hasClass("lo-sidebar--expanded")?(n(document).off("click.listo-sidebar"),this.$sidebar.removeClass("lo-sidebar--expanded")):(this.$sidebar.addClass("lo-sidebar--expanded"),n(document).one("click.listo-sidebar",()=>{this.$sidebar.removeClass("lo-sidebar--expanded")}))}onCollectionAdded(t={}){"object"==typeof t&&t.id&&(this.currentCollection=t.id,this.loadCollections())}onCollectionUpdated(e={}){if("object"==typeof e&&e.id){var i=this.$collection(e.id);for(const o in e){let t=e[o];-1<["initials","title","description"].indexOf(o)&&(t=r(d(t))),i.find(`[data-field=${o}]`).html(t)}}}onCollectionDeleted(t){this.$collection(t).remove(),this.currentCollection="inbox",this.loadCollections(),a.doAction("maintenance")}onCollectionClick(t){t.preventDefault(),t.stopPropagation();t=n(t.currentTarget);this.loadItems(t.data("id"))}onItemsLoaded(){this.sortable.init(this.currentCollection)}onItemAdded(){a.doAction("maintenance")}onItemMoved(t=0){var e;this.$items.children("[data-listo=item]").length||a.applyFilters("can_create_item")||(e=s(l("templates.item_list_empty"))({collection:this.currentCollection}),this.$items.append(e)),a.doAction("maintenance")}onUserTimezoneChange(t){this.setTimezone(t.currentTarget.value).done(()=>{c?this.loadCollections():this.loadItems("all")})}onGdprDeleteClick(t){if(t.preventDefault(),t.stopPropagation(),confirm(l("lang.gdpr_delete_confirmation")))return i("listo/v1/gdpr",{},"DELETE").done(t=>{this.currentCollection="inbox",this.$timezone.val("+00:00"),c?this.loadCollections():this.loadItems("all")})}onDropdownToggleClick(t){let e=n(t.currentTarget).siblings("[data-listo=dropdown-menu]");e.is(":hidden")?(t.stopPropagation(),e.show(),n(document).one("click",()=>e.hide())):e.hide()}onDropdownMenuClick(t){t.stopPropagation()}onPreferencesClick(t){t.stopPropagation()}onPreferencesToggleClick(t){this.$preferences.fadeIn(e),n(document).on("keydown.listo-preferences",t=>{"Escape"===t.code&&(n(document).off("keydown.listo-preferences"),this.$preferences.fadeOut(e))})}onPreferencesCloseClick(t){n(document).off("keydown.listo-preferences"),this.$preferences.fadeOut(e)}}}),listo.class("ListoCollectionHeader",function(e,i){const{ajax:s,hooks:n,data:t,escapeHtml:a,nl2br:l}=e,d=+t("animation_speed");return class{constructor(t){this.data=null,this.saving=!1,this.$el=i(t),this.$info=this.$el.find("[data-listo=collection-info]"),this.$infoTitle=this.$info.find("[data-listo=title]"),this.$infoDescription=this.$info.find("[data-listo=description]"),this.$infoDescriptionToggle=this.$info.find("[data-listo=description-toggle]"),this.$edit=this.$el.find("[data-listo=edit-collection]"),this.$editForm=this.$el.find("[data-listo=edit-collection-form]"),this.$editTitle=this.$editForm.find("[name=title]"),this.$editDescription=this.$editForm.find("[name=description]"),this.$editCancel=this.$editForm.find("[data-listo=cancel]"),this.$editSave=this.$editForm.find("[data-listo=save]"),this.$delete=this.$el.find("[data-listo=delete-collection]"),this.$deleteForm=this.$el.find("[data-listo=delete-collection-form]"),this.$deleteCancel=this.$el.find("[data-listo=delete-collection-cancel]"),this.$deleteConfirm=this.$el.find("[data-listo=delete-collection-confirm]"),this.$createItem=i('[data-listo="wrapper"]').find("[data-listo=new-item]"),this.$infoDescriptionToggle.on("click",t=>this.onInfoDescriptionToggleClick(t)),this.$edit.on("click",t=>this.onEditClick(t)),this.$editTitle.on("input",t=>this.onEditTitleInput(t)),this.$editDescription.on("input",t=>this.onEditDescriptionInput(t)),this.$editCancel.on("click",t=>this.onEditCancelClick(t)),this.$editSave.on("click",t=>this.onEditSaveClick(t)),this.$delete.on("click",t=>this.onDeleteClick(t)),this.$deleteCancel.on("click",t=>this.onDeleteCancelClick(t)),this.$deleteConfirm.on("click",t=>this.onDeleteConfirmClick(t)),n.addAction("set_current_collection",t=>this.update(t)),n.addAction("count_items_updated",t=>this.updateCountItems(t)),n.addAction("collections_loaded","new_item_form",()=>{n.removeAction("collections_loaded","new_item_form"),this.$el.show()})}reset(){var t=this.data.title.trim(),e=this.data.description.trim(),i=+this.data.smart,o=-1===["due","scheduled","done","recurring"].indexOf(this.data.id),t=(this.$info.show(),this.$infoTitle.html(l(a(t))),this.$infoDescription.html(l(a(e))),this.$edit[i?"hide":"show"](),this.$editForm.hide(),this.$editTitle.val(t),this.$editDescription.val(e),this.$editCancel.removeAttr("disabled"),this.$editSave.attr("disabled","disabled"),this.$delete.parent()[i?"fadeOut":"fadeIn"](d),this.$delete.show(),this.$deleteForm.hide(),this.$deleteCancel.hide(),this.$createItem[o?"show":"hide"](),this.$infoDescription[0]);t.scrollHeight>1.5*t.clientHeight?this.$infoDescriptionToggle.show():this.$infoDescriptionToggle.hide(),this.updateCountItems(this.data)}update(t){this.data=t,this.reset()}updateCountItems(t={}){t.id===this.data.id&&(this.$info.find("[data-field=count_items]").html(t.count_items),this.$info.find("[data-field=count_items_done]").html(t.count_items_done),this.$info.find("[data-field=count_items_due]").html(t.count_items_due))}onInfoDescriptionToggleClick(t){t.preventDefault(),t.stopPropagation();t="auto"===this.$infoDescription[0].style.height;this.$infoDescription.css({height:t?"":"auto",overflow:t?"":"visible"}),this.$infoDescriptionToggle[t?"removeClass":"addClass"]("lo-tip--alt")}onEditClick(t){t.preventDefault(),t.stopPropagation(),this.$info.hide(),this.$edit.hide(),this.$editForm.show(),this.$editTitle.data("value",this.$editTitle.val()),this.$editDescription.data("value",this.$editDescription.val()).listo_autosize(),this.$editSave.attr("disabled","disabled"),this.$createItem.fadeOut(d),e.focus(this.$editTitle)}onEditTitleInput(t){var e=this.$editTitle.val();e.trim()&&e!==this.$editTitle.data("value")||this.$editDescription.val()!==this.$editDescription.data("value")?this.$editSave.removeAttr("disabled"):this.$editSave.attr("disabled","disabled")}onEditDescriptionInput(t){var e=this.$editTitle.val();e.trim()&&e!==this.$editTitle.data("value")||this.$editDescription.val()!==this.$editDescription.data("value")?this.$editSave.removeAttr("disabled"):this.$editSave.attr("disabled","disabled")}onEditCancelClick(t){t.preventDefault(),t.stopPropagation(),this.reset()}onEditSaveClick(t){if(t.preventDefault(),t.stopPropagation(),!this.saving){this.saving=!0,this.$editCancel.add(this.$editSave).attr("disabled","disabled");let e=this.data.id;var t=this.$editTitle.val().trim(),o=this.$editDescription.val().trim();let i={id:e,title:t,description:o};s("listo/v1/collections",i,"PATCH").done(t=>{Object.assign(this.data,i),s("listo/v1/collections",{id:e}).done(t=>{t instanceof Array&&t[0]&&(this.data=t[0])}).always(()=>{this.saving=!1,this.reset(),n.doAction("collection_updated",this.data)})})}}onDeleteClick(t){t.preventDefault(),t.stopPropagation(),this.$delete.hide(),this.$deleteForm.add(this.$deleteCancel).fadeIn(d)}onDeleteCancelClick(t){t.preventDefault(),t.stopPropagation(),this.$deleteForm.add(this.$deleteCancel).fadeOut(d,()=>this.$delete.show())}onDeleteConfirmClick(t){t.preventDefault(),t.stopPropagation(),s("listo/v1/collections/"+this.data.id,{},"DELETE").done(t=>{this.$deleteForm.add(this.$deleteCancel).hide(),this.$delete.show(),n.doAction("collection_deleted",this.data.id)})}onCreateItemClick(t){}}}),listo.class("ListoNewCollection",function(o,e){const{ajax:s,hooks:n,data:t}=o,i=+t("animation_speed");return class{constructor(t={}){this.saving=!1,this.$toggle=e(t.toggle),this.$form=e(t.form),this.$title=this.$form.find("[name=title]"),this.$cancel=this.$form.find("[data-listo=cancel]"),this.$save=this.$form.find("[data-listo=save]"),this.$toggle.on("click",t=>t.stopPropagation()||this.show()),this.$form.on("click",t=>t.stopPropagation()),this.$title.on("keydown",t=>this.onKeyDown(t)),this.$title.on("input",()=>this.onInput()),this.$cancel.on("click",t=>t.stopPropagation()||this.hide()),this.$save.on("click",()=>this.submit()),n.addAction("new_item_form",()=>this.hide()),n.addAction("collections_loaded","new_collection_form",()=>{n.removeAction("collections_loaded","new_collection_form"),this.$toggle.show()})}show(){this.$form.is(":hidden")&&(this.$toggle.hide(),this.$form.fadeIn(i),o.focus(this.$title),n.doAction("new_collection_form"))}hide(){this.$form.is(":visible")&&(this.$form.hide(),this.$toggle.fadeIn(i))}value(t){if("string"!=typeof t)return this.$title.val().trim();this.$title.val(t.trim())}submit(){let i=this.value();i&&!this.saving&&(this.saving=!0,this.onInput(),s("listo/v1/collections",{},"POST").done(e=>{if(e instanceof Array&&e[0]){let t=Object.assign(e[0],{title:i});e=t["id"];s("listo/v1/collections",{id:e,title:i},"PATCH").always(()=>{this.value(""),this.saving=!1,this.onInput(),o.focus(this.$title),n.doAction("collection_added",t)})}}))}onKeyDown(t){"Enter"===t.code?(t.preventDefault(),t.stopPropagation(),this.$save.trigger("click")):"Escape"===t.code&&this.hide()}onInput(){this.value()&&!this.saving?this.$save.removeAttr("disabled"):this.$save.attr("disabled","disabled")}}}),listo.class("ListoItems",function(c,h){const{ajax:i,hooks:n,template:a,data:l}=c,o=+l("animation_speed");return class{constructor(t){this.collection=null,this.$el=h(t),this.$el.on("click","[data-listo=item]",t=>this.onItemClick(t)),this.$el.on("click","[data-listo=item-toggle]",t=>this.onItemToggleClick(t)),this.$el.on("click","[data-listo=item-check]",t=>this.onItemCheckClick(t)),this.$el.on("click","[data-listo=description-toggle]",t=>this.onDescriptionToggleClick(t)),this.$el.on("click","[data-listo=delete-item]",t=>this.onDeleteItemClick(t)),this.$el.on("click","[data-listo=delete-item-cancel]",t=>this.onCancelDeleteItemClick(t)),this.$el.on("click","[data-listo=delete-item-confirm]",t=>this.onConfirmDeleteItemClick(t)),this.$el.on("click","[data-listo=edit-item]",t=>this.onEditItemClick(t)),this.$el.on("input","[name=title]",t=>this.onEditTitleInput(t)),this.$el.on("input","[name=description]",t=>this.onEditDescriptionInput(t)),this.$el.on("click","[data-listo=cancel]",t=>this.onCancelEditItemClick(t)),this.$el.on("click","[data-listo=save]",t=>this.onSaveEditItemClick(t)),new(c.class("ListoItemDue"))(t),n.addAction("set_current_collection",t=>{this.collection=t.id,this.update()}),n.addAction("item_added",()=>this.update())}update(){i("listo/v1/items",{collection:this.collection}).done(t=>{this.render(t),n.doAction("items_loaded",t)})}render(t){if(this.$el.empty(),t instanceof Array&&t.length){let e=a(l("templates.item"));t.forEach(t=>this.$el.append(e(t)))}else n.applyFilters("can_create_item")||(t=a(l("templates.item_list_empty")),this.$el.append(t({collection:this.collection})))}loadItem(t){return i("listo/v1/items",{id:t}).done(t=>{})}updateItem(t,e={}){return i("listo/v1/items",Object.assign(e,{id:t}),"PATCH")}toggleItem(t,e){var i=h(t),o=h("[data-listo=item]"),s="lo-task--full";!0!==e||i.hasClass(s)?!1===e&&i.hasClass(s)?i.removeClass(s):void 0===e&&this.toggleItem(t,!i.hasClass(s)):(o.removeClass(s),i.addClass(s))}onItemClick(t){t.preventDefault(),t.stopPropagation(),this.toggleItem(t.currentTarget,!0)}onItemToggleClick(t){t.preventDefault(),t.stopPropagation();t=h(t.currentTarget).closest("[data-listo=item]");this.toggleItem(t)}onItemCheckClick(t){t.preventDefault(),t.stopPropagation();let s=h(t.currentTarget).closest("[data-listo=item]");if(!s.data("saving")){s.data("saving",1);let e=s.data("id"),i=s.data("rrule_id"),o=+s.data("status")?0:1;this.updateItem(e,{status:o,rrule_id:i}).done(t=>{i&&o?(this.update(),s.removeData("saving"),n.doAction("item_updated",t[0]),n.doAction("maintenance")):"done"!==this.collection||o?this.loadItem(e).done(t=>{var e;t instanceof Array&&t.length&&(e=a(l("templates.item")),t=t[0],s.replaceWith(e(t)),n.doAction("item_updated",t)),s.removeData("saving"),n.doAction("maintenance")}):(s.remove(),s.removeData("saving"),n.doAction("item_updated",t[0]),n.doAction("maintenance"))})}}onDeleteItemClick(t){t.preventDefault(),t.stopPropagation();t=h(t.currentTarget).closest("[data-listo=item]");t.find("[data-listo=delete-item]").hide(),t.find("[data-listo=delete-item-form]").add(t.find("[data-listo=delete-item-cancel]")).fadeIn(o)}onCancelDeleteItemClick(t){t.preventDefault(),t.stopPropagation();let e=h(t.currentTarget).closest("[data-listo=item]");e.find("[data-listo=delete-item-form]").add(e.find("[data-listo=delete-item-cancel]")).fadeOut(o,()=>{e.find("[data-listo=delete-item]").show()})}onConfirmDeleteItemClick(t){t.preventDefault(),t.stopPropagation();let e=h(t.currentTarget).closest("[data-listo=item]");t=e.data("id");return i("listo/v1/items/"+t,{},"DELETE").done(()=>{e.siblings().length?e.css({opacity:0}).slideUp(o,()=>e.remove()):this.render([]),n.doAction("maintenance")})}onDescriptionToggleClick(t){t.preventDefault(),t.stopPropagation();var t=h(t.currentTarget).closest("[data-listo=item]"),e=t.find("[data-listo=description]").parent(),t=t.find("[data-listo=description-toggle]");e.slideToggle(),t.toggleClass("lo-tip--alt")}onEditItemClick(t){t.preventDefault(),t.stopPropagation();var t=h(t.currentTarget).closest("[data-listo=item]"),e=t.find("[data-listo=item-check]").parent(),i=t.find("[data-listo=title]").parent(),o=t.find("[data-listo=description]").parent(),s=t.find("[data-listo=description-toggle]"),n=t.find("[data-listo=edit-item]"),a=t.find("[data-listo=edit-item-form]"),l=a.find("[name=title]"),d=a.find("[name=description]"),r=a.find("[data-listo=save]");t.toggleClass("lo-task--edit"),n.hide(),e.hide(),i.hide(),o.hide(),s.hide(),a.show(),l.data("value",l.val()),d.data("value",d.val()).listo_autosize(),r.attr("disabled","disabled"),c.focus(l)}onEditTitleInput(t){var t=h(t.currentTarget).closest("[data-listo=edit-item-form]"),e=t.find("[name=title]"),i=t.find("[name=description]"),t=t.find("[data-listo=save]");e.val().trim()&&e.val()!==e.data("value")||i.val()!==i.data("value")?t.removeAttr("disabled"):t.attr("disabled","disabled")}onEditDescriptionInput(t){var t=h(t.currentTarget).closest("[data-listo=edit-item-form]"),e=t.find("[name=title]"),i=t.find("[name=description]"),t=t.find("[data-listo=save]");e.val().trim()&&e.val()!==e.data("value")||i.val()!==i.data("value")?t.removeAttr("disabled"):t.attr("disabled","disabled")}onCancelEditItemClick(t){t.preventDefault(),t.stopPropagation();var t=h(t.currentTarget).closest("[data-listo=item]"),e=t.find("[data-listo=item-check]").parent(),i=t.find("[data-listo=title]").parent(),o=t.find("[data-listo=description]").parent(),s=t.find("[data-listo=description-toggle]"),n=t.find("[data-listo=edit-item]"),a=t.find("[data-listo=edit-item-form]"),l=a.find("[name=title]"),d=a.find("[name=description]"),r=a.find("[data-listo=save]");t.toggleClass("lo-task--edit"),e.show(),n.show(),i.show(),o.hide(),s.show(),a.hide(),l.val(l.data("value")),d.val(d.data("value")),r.attr("disabled","disabled")}onSaveEditItemClick(t){t.preventDefault(),t.stopPropagation();let i=h(t.currentTarget).closest("[data-listo=item]");var t=i.find("[data-listo=edit-item-form]"),e=t.find("[name=title]"),t=t.find("[name=description]"),o=i.data("id"),e=e.val().trim(),t=t.val().trim();return this.updateItem(o,{title:e,description:t}).done(t=>{var e=a(l("templates.item")),t=t[0];i.replaceWith(e(t)),n.doAction("item_updated",t),n.doAction("maintenance")})}}}),listo.class("ListoItemDue",function(t,e){const{ajax:o,hooks:s,template:n,data:a}=t;return class extends t.class("ListoAbstract"){constructor(t){super(t),e(document).on("click",()=>{this.$container.find("[data-listo=item]").each((t,e)=>{this.hide(e)})})}update(i,t){var e=this.$item(i).data("id");return t=Object.assign({},t,{id:e}),o("listo/v1/items",t,"PATCH").done(t=>{var e;t instanceof Array&&t[0]&&(e=n(a("templates.item_due")),t=t[0],console.log(t),this.$toggle(i).replaceWith(e(t))),s.doAction("maintenance")})}$item(t){return e(t.currentTarget||t).closest("[data-listo=item]")}$toggle(t){return this.$item(t).find("[data-listo=item-due]")}$popup(t){return this.$item(t).find("[data-listo=item-due-popup]")}show(t){var t=this.$popup(t),e=(this.$container.find("[data-listo=item-due-popup]").not(t).filter(":visible").hide(),t.show(),s.doAction("item_due_show",t),s.applyFilters("item_due_can_submit",!0,t));this.toggleSubmit(t,e)}hide(t){this.$popup(t).hide()}toggle(t){this.$popup(t).is(":visible")?this.hide(t):this.show(t)}toggleSubmit(t,e){let i=t.find("[data-listo=item-due-set]");"boolean"==typeof e?e?i.removeAttr("disabled"):i.attr("disabled","disabled"):e&&e.done&&(i.attr("disabled","disabled"),e.done(t=>{t?i.removeAttr("disabled"):i.attr("disabled","disabled")}))}onItemClick(t){this.hide(t)}onItemDueClick(t){t.stopPropagation(),this.toggle(t)}onItemDuePopupClick(t){t.stopPropagation()}onItemDueDateChange(t){s.doAction("item_due_date_changed",this.$popup(t))}onItemDueDateToggleClick(t){this.$popup(t).find("[data-listo=item-due-date]")[0].showPicker()}onItemDueSetClick(t){t.stopPropagation();var e=this.$popup(t),i={due:e.find("[data-listo=item-due-date]").val()+" "+(e.find("[data-listo=item-due-hours]").val()+`:${e.find("[data-listo=item-due-minutes]").val()}:00`)},i=s.applyFilters("item_due_submit_data",i,e);this.update(t,i)}onItemDueClearClick(t){t.stopPropagation(),this.update(t,{due:""})}}}),listo.class("ListoNewItem",function(s,e){const{ajax:n,hooks:a,data:t}=s,i=+t("animation_speed");return class{constructor(t={}){this.saving=!1,this.$toggle=e(t.toggle),this.$form=e(t.form),this.$title=this.$form.find("[name=title]"),this.$cancel=this.$form.find("[data-listo=cancel]"),this.$save=this.$form.find("[data-listo=save]"),this.$toggle.on("click",t=>t.stopPropagation()||this.show()),this.$form.on("click",t=>t.stopPropagation()),this.$title.on("keydown",t=>this.onKeyDown(t)),this.$title.on("input",()=>this.onInput()),this.$cancel.on("click",t=>t.stopPropagation()||this.hide()),this.$save.on("click",()=>this.submit()),a.addAction("new_collection_form",()=>this.hide())}show(){this.$form.is(":hidden")&&(this.$toggle.hide(),this.$form.fadeIn(i),s.focus(this.$title),a.doAction("new_item_form"))}hide(){this.$form.is(":visible")&&(this.$form.hide(),this.$toggle.fadeIn(i))}value(t){if("string"!=typeof t)return this.$title.val().trim();this.$title.val(t.trim())}submit(){let o=this.value();o&&!this.saving&&(this.saving=!0,this.onInput(),n("listo/v1/items",{},"POST").done(e=>{if(e instanceof Array&&e[0]){var i=+a.applyFilters("current_collection_id")||void 0;let t=Object.assign(e[0],{title:o,collection:i});e=t["id"];n("listo/v1/items",{id:e,title:o,collection:i},"PATCH").always(()=>{this.value(""),this.saving=!1,this.onInput(),s.focus(this.$title),a.doAction("item_added",t)})}}))}onKeyDown(t){"Enter"===t.code?(t.preventDefault(),t.stopPropagation(),this.$save.trigger("click")):"Escape"===t.code&&this.hide()}onInput(){this.value()&&!this.saving?this.$save.removeAttr("disabled"):this.$save.attr("disabled","disabled")}}}),listo.class("ListoSortable",function(t,l){const{ajax:i,hooks:o}=t;return class{constructor(t){this.$el=l(t),this.$smartCollections=this.$el.find("[data-listo=smart-collections]"),this.$collections=this.$el.find("[data-listo=collections]"),this.$items=this.$el.find("[data-listo=items]"),o.addAction("item_added",()=>this.onItemAdded()),o.addAction("item_updated",()=>this.onItemUpdated())}getObjects(){return l().add(this.$smartCollections.find("[data-listo=collection]")).add(this.$collections.find("[data-listo=collection]")).add(this.$items.find("[data-listo=item]")).toArray()}init(t){this.currentCollection=t,this.objects=this.getObjects(),this.draggedObject=null,this.objects.forEach(t=>{t.getAttribute("draggable")||(t.draggable=!0,t.addEventListener("dragstart",this.onDragStart.bind(this)),t.addEventListener("dragenter",this.onDragEnter.bind(this)),t.addEventListener("dragover",this.onDragOver.bind(this)),t.addEventListener("dragleave",this.onDragLeave.bind(this)),t.addEventListener("dragend",this.onDragEnd.bind(this)),t.addEventListener("drop",this.onDrop.bind(this)))})}reorderCollections(){var t=this.$collections.children("[data-listo=collection]").toArray().map(t=>t.getAttribute("data-id"));return i("listo/v1/collections",{ids:t},"PATCH").done(()=>{o.doAction("collections_reorder")})}reorderItems(){var t=this.$items.children("[data-listo=item]").toArray().map(t=>t.getAttribute("data-id")),e=this.currentCollection;return i("listo/v1/items",{ids:t,collection:e},"PATCH").done(()=>{o.doAction("items_reorder")})}moveItem(t,e){return e=0<e?e:0,i("listo/v1/items",{id:t,collection:e},"PATCH").done(()=>{o.doAction("item_move",{id:t,collection:e})})}canDrag(t){if("collection"===t.getAttribute("data-listo")){if(!+t.getAttribute("data-id"))return!1}else{t=this.currentCollection;if(!+t&&"inbox"!==t)return!1}return!0}canDrop(t,e){if(t&&t!==e){var i=t.getAttribute("data-listo"),o=e.getAttribute("data-listo"),t=t.getAttribute("data-id"),e=e.getAttribute("data-id");if("collection"===i){if("item"===o)return!1;if(!+e)return!1}else if("item"===i)if("collection"===o){if(e==this.currentCollection)return!1;if(!+e&&"inbox"!==e)return!1}else if(!+this.currentCollection)return!1;return{sourceType:i,sourceId:t,targetType:o,targetId:e}}return!1}onDragStart(t){var e=t.currentTarget;this.canDrag(e)?this.draggedObject=e:t.preventDefault()}onDragEnter(t){var e=this.draggedObject,t=t.currentTarget;this.canDrop(e,t)}onDragOver(t){return t.preventDefault(),!1}onDragLeave(t){this.draggedObject,t.currentTarget}onDragEnd(t){t.currentTarget;this.objects.forEach(t=>{})}onDrop(s){s.stopPropagation(),s.preventDefault();let n=this.draggedObject;var s=s.currentTarget,a=this.canDrop(n,s);if(a){let{sourceType:t,sourceId:e,targetType:i,targetId:o}=a;"item"===t&&"collection"===i?l(n).css({opacity:0}).slideUp(()=>{n.remove(),this.moveItem(e,o)}):t===i&&(a=n.parentElement,d(n)>d(s)?a.insertBefore(n,s):(s=s.nextElementSibling)?a.insertBefore(n,s):a.append(n),"collection"===t?this.reorderCollections():"item"===t&&this.reorderItems()),this.draggedObject=null}}onItemAdded(){this.init(this.currentCollection)}onItemUpdated(){this.init(this.currentCollection)}};function d(t,e=0){return e=t.previousElementSibling?d(t.previousElementSibling,e+1):e}}),function(e,t,i,o={}){function s(){document.querySelectorAll("[data-listo=root]").forEach(t=>{new(e.class("ListoRoot"))(t)})}+t.logged_in&&i(function(){o&&o.domReady?o.domReady(()=>setTimeout(s,0)):s()})}(window.listo,window.listoData,window.jQuery,window.wp);
  • listowp/trunk/assets/js/frontend/_load_order.json

    r2877206 r2884416  
    44  "autosize",
    55  "trim-html",
    6   "class-listo",
     6  "class-listo-abstract",
     7  "class-listo-root",
    78  "class-listo-collection-header",
    8   "class-listo-collection-items",
    99  "class-listo-new-collection",
     10  "class-listo-items",
     11  "class-listo-item-due",
    1012  "class-listo-new-item",
    1113  "class-listo-sortable",
  • listowp/trunk/assets/js/frontend/base.js

    r2877206 r2884416  
    2020                beforeSend(xhr) {
    2121                    xhr.setRequestHeader('X-WP-Nonce', REST_NONCE);
     22                }
     23            }).fail(xhr => {
     24                if (xhr && xhr.responseJSON) {
     25                    alert(xhr.responseJSON.message);
    2226                }
    2327            });
     
    126130         * @type {boolean}
    127131         */
    128         isIOS: /iPad|iPhone|iPod/.test(navigator.userAgent)
     132        isIOS: /iPad|iPhone|iPod/.test(navigator.userAgent),
     133
     134        /**
     135         * Focus and put cursor to the end of an input text.
     136         *
     137         * @param {Element|jQuery} input
     138         */
     139        focus(input) {
     140            input = input.jquery ? input[0] : input;
     141            input.focus();
     142
     143            if (input.setSelectionRange) {
     144                let len = input.value.length;
     145                input.setSelectionRange(len, len);
     146            }
     147        }
    129148    };
    130149
  • listowp/trunk/assets/js/frontend/class-listo-collection-header.js

    r2877206 r2884416  
    3636            this.$deleteConfirm.on('click', e => this.onDeleteConfirmClick(e));
    3737
    38             hooks.addAction('collections_loaded', () => this.$el.show());
    3938            hooks.addAction('set_current_collection', data => this.update(data));
    4039            hooks.addAction('count_items_updated', data => this.updateCountItems(data));
     40
     41            hooks.addAction('collections_loaded', 'new_item_form', () => {
     42                hooks.removeAction('collections_loaded', 'new_item_form');
     43                this.$el.show();
     44            });
    4145        }
    4246
     
    112116
    113117            // Set focus on the title input.
    114             setTimeout(() => this.$editTitle[0].focus(), 100);
     118            listo.focus(this.$editTitle);
    115119        }
    116120
     
    159163            let params = { id, title, description };
    160164
    161             ajax('listo/v1/collections', params, 'PATCH')
    162                 .done(json => {
    163                     Object.assign(this.data, params); // temporary, or if GET request failed
    164                     ajax('listo/v1/collections', { id })
    165                         .done(json => {
    166                             if (json instanceof Array && json[0]) {
    167                                 this.data = json[0];
    168                             }
    169                         })
    170                         .always(() => {
    171                             this.saving = false;
    172                             this.reset();
    173                             hooks.doAction('collection_updated', this.data);
    174                         });
    175                 })
    176                 .fail(xhr => alert(xhr.responseJSON.message));
     165            ajax('listo/v1/collections', params, 'PATCH').done(json => {
     166                Object.assign(this.data, params); // temporary, or if GET request failed
     167                ajax('listo/v1/collections', { id })
     168                    .done(json => {
     169                        if (json instanceof Array && json[0]) {
     170                            this.data = json[0];
     171                        }
     172                    })
     173                    .always(() => {
     174                        this.saving = false;
     175                        this.reset();
     176                        hooks.doAction('collection_updated', this.data);
     177                    });
     178            });
    177179        }
    178180
     
    196198            e.stopPropagation();
    197199
    198             ajax(`listo/v1/collections/${this.data.id}`, {}, 'DELETE')
    199                 .done(json => {
    200                     this.$deleteForm.add(this.$deleteCancel).hide();
    201                     this.$delete.show();
    202 
    203                     hooks.doAction('collection_deleted', this.data.id);
    204                 })
    205                 .fail(xhr => alert(xhr.responseJSON.message));
     200            ajax(`listo/v1/collections/${this.data.id}`, {}, 'DELETE').done(json => {
     201                this.$deleteForm.add(this.$deleteCancel).hide();
     202                this.$delete.show();
     203
     204                hooks.doAction('collection_deleted', this.data.id);
     205            });
    206206        }
    207207
  • listowp/trunk/assets/js/frontend/class-listo-new-collection.js

    r2878127 r2884416  
    1313            this.$cancel = this.$form.find('[data-listo=cancel]');
    1414            this.$save = this.$form.find('[data-listo=save]');
    15             this.$saveAndNew = this.$form.find('[data-listo=save-and-new]');
    16             this.$buttons = this.$save.add(this.$saveAndNew);
    1715
    1816            this.$toggle.on('click', e => e.stopPropagation() || this.show());
    19             this.$cancel.on('click', e => e.stopPropagation() || this.hide());
    2017            this.$form.on('click', e => e.stopPropagation());
    2118            this.$title.on('keydown', e => this.onKeyDown(e));
    2219            this.$title.on('input', () => this.onInput());
     20            this.$cancel.on('click', e => e.stopPropagation() || this.hide());
    2321            this.$save.on('click', () => this.submit());
    24             this.$saveAndNew.on('click', () => this.submit(true));
    2522
    26             hooks.addAction('collections_loaded', () => this.$toggle.show());
    2723            hooks.addAction('new_item_form', () => this.hide());
     24
     25            // Run once on page load.
     26            hooks.addAction('collections_loaded', 'new_collection_form', () => {
     27                hooks.removeAction('collections_loaded', 'new_collection_form');
     28                this.$toggle.show();
     29            });
    2830        }
    2931
     
    3234                this.$toggle.hide();
    3335                this.$form.fadeIn(ANIM_SPEED);
    34                 this.$title.focus();
     36                listo.focus(this.$title);
     37
    3538                hooks.doAction('new_collection_form');
    3639            }
     
    5255        }
    5356
    54         submit(keepOpen) {
     57        submit() {
    5558            let title = this.value();
    5659            if (!title) {
     
    6366
    6467            // Create collection with an empty title.
    65             ajax('listo/v1/collections', {}, 'POST')
    66                 .done(json => {
    67                     if (json instanceof Array && json[0]) {
    68                         let collection = Object.assign(json[0], { title });
    69                         let { id } = collection;
     68            ajax('listo/v1/collections', {}, 'POST').done(json => {
     69                if (json instanceof Array && json[0]) {
     70                    let collection = Object.assign(json[0], { title });
     71                    let { id } = collection;
    7072
    71                         // Update collection title.
    72                         ajax('listo/v1/collections', { id, title }, 'PATCH')
    73                             .fail(xhr => alert(xhr.responseJSON.message))
    74                             .always(() => {
    75                                 this.value('');
    76                                 this.saving = false;
    77                                 this.onInput();
     73                    // Update collection title.
     74                    ajax('listo/v1/collections', { id, title }, 'PATCH').always(() => {
     75                        this.value('');
     76                        this.saving = false;
     77                        this.onInput();
     78                        listo.focus(this.$title);
    7879
    79                                 hooks.doAction('collection_added', collection);
    80 
    81                                 keepOpen ? this.$title.focus() : this.hide();
    82                             });
    83                     }
    84                 })
    85                 .fail(xhr => alert(xhr.responseJSON.message));
     80                        hooks.doAction('collection_added', collection);
     81                    });
     82                }
     83            });
    8684        }
    8785
     
    9088                e.preventDefault();
    9189                e.stopPropagation();
    92                 e.shiftKey ? this.$saveAndNew.trigger('click') : this.$save.trigger('click');
     90                this.$save.trigger('click');
    9391            } else if ('Escape' === e.code) {
    9492                this.hide();
     
    9896        onInput() {
    9997            this.value() && !this.saving
    100                 ? this.$buttons.removeAttr('disabled')
    101                 : this.$buttons.attr('disabled', 'disabled');
     98                ? this.$save.removeAttr('disabled')
     99                : this.$save.attr('disabled', 'disabled');
    102100        }
    103101    };
  • listowp/trunk/assets/js/frontend/class-listo-new-item.js

    r2878127 r2884416  
    1313            this.$cancel = this.$form.find('[data-listo=cancel]');
    1414            this.$save = this.$form.find('[data-listo=save]');
    15             this.$saveAndNew = this.$form.find('[data-listo=save-and-new]');
    16             this.$buttons = this.$save.add(this.$saveAndNew);
    1715
    1816            this.$toggle.on('click', e => e.stopPropagation() || this.show());
    19             this.$cancel.on('click', e => e.stopPropagation() || this.hide());
    2017            this.$form.on('click', e => e.stopPropagation());
    2118            this.$title.on('keydown', e => this.onKeyDown(e));
    2219            this.$title.on('input', () => this.onInput());
     20            this.$cancel.on('click', e => e.stopPropagation() || this.hide());
    2321            this.$save.on('click', () => this.submit());
    24             this.$saveAndNew.on('click', () => this.submit(true));
    2522
    2623            hooks.addAction('new_collection_form', () => this.hide());
     
    3128                this.$toggle.hide();
    3229                this.$form.fadeIn(ANIM_SPEED);
    33                 this.$title.focus();
     30                listo.focus(this.$title);
     31
    3432                hooks.doAction('new_item_form');
    3533            }
     
    5149        }
    5250
    53         submit(keepOpen) {
     51        submit() {
    5452            let title = this.value();
    5553            if (!title) {
     
    6260
    6361            // Create item with an empty title.
    64             ajax('listo/v1/items', {}, 'POST')
    65                 .done(json => {
    66                     if (json instanceof Array && json[0]) {
    67                         let collection = +hooks.applyFilters('current_collection_id') || undefined;
    68                         let item = Object.assign(json[0], { title, collection });
    69                         let { id } = item;
     62            ajax('listo/v1/items', {}, 'POST').done(json => {
     63                if (json instanceof Array && json[0]) {
     64                    let collection = +hooks.applyFilters('current_collection_id') || undefined;
     65                    let item = Object.assign(json[0], { title, collection });
     66                    let { id } = item;
    7067
    71                         // Update item title.
    72                         ajax('listo/v1/items', { id, title, collection }, 'PATCH')
    73                             .fail(xhr => alert(xhr.responseJSON.message))
    74                             .always(() => {
    75                                 this.value('');
    76                                 this.saving = false;
    77                                 this.onInput();
     68                    // Update item title.
     69                    ajax('listo/v1/items', { id, title, collection }, 'PATCH').always(() => {
     70                        this.value('');
     71                        this.saving = false;
     72                        this.onInput();
     73                        listo.focus(this.$title);
    7874
    79                                 hooks.doAction('item_added', item);
    80 
    81                                 keepOpen ? this.$title.focus() : this.hide();
    82                             });
    83                     }
    84                 })
    85                 .fail(xhr => alert(xhr.responseJSON.message));
     75                        hooks.doAction('item_added', item);
     76                    });
     77                }
     78            });
    8679        }
    8780
     
    9083                e.preventDefault();
    9184                e.stopPropagation();
    92                 e.shiftKey ? this.$saveAndNew.trigger('click') : this.$save.trigger('click');
     85                this.$save.trigger('click');
    9386            } else if ('Escape' === e.code) {
    9487                this.hide();
     
    9891        onInput() {
    9992            this.value() && !this.saving
    100                 ? this.$buttons.removeAttr('disabled')
    101                 : this.$buttons.attr('disabled', 'disabled');
     93                ? this.$save.removeAttr('disabled')
     94                : this.$save.attr('disabled', 'disabled');
    10295        }
    10396    };
  • listowp/trunk/assets/js/frontend/class-listo-sortable.js

    r2877206 r2884416  
    88            this.$collections = this.$el.find('[data-listo=collections]');
    99            this.$items = this.$el.find('[data-listo=items]');
     10
     11            hooks.addAction('item_added', () => this.onItemAdded());
     12            hooks.addAction('item_updated', () => this.onItemUpdated());
    1013        }
    1114
     
    215218            }
    216219        }
     220
     221        onItemAdded() {
     222            this.init(this.currentCollection);
     223        }
     224
     225        onItemUpdated() {
     226            this.init(this.currentCollection);
     227        }
    217228    };
    218229
  • listowp/trunk/assets/js/frontend/hooks.js

    r2877206 r2884416  
    9696
    9797            if (callbacks) {
    98                 callbacks.forEach(item => {
     98                // Map callback objects to their actual functions since the list
     99                // can be altered (added/deleted) during execution.
     100                callbacks = callbacks.map(cb => cb.callback);
     101
     102                callbacks.forEach(fn => {
    99103                    try {
    100                         let callbackResult = item.callback.apply(null, args);
     104                        let callbackResult = fn.apply(null, args);
    101105                        if (returnFirstArg) {
    102106                            result = args[0] = callbackResult;
  • listowp/trunk/assets/js/frontend/init.js

    r2877206 r2884416  
    55
    66    function initListoWP() {
    7         document.querySelectorAll('[data-listo=root]').forEach(el => new listo.Listo(el));
     7        document.querySelectorAll('[data-listo=root]').forEach(el => {
     8            new (listo.class('ListoRoot'))(el);
     9        });
    810    }
    911
  • listowp/trunk/assets/scss/_vars.scss

    r2878127 r2884416  
    33    // SPACING
    44    --P: 30px;
    5     --PS: calc(var(--P) / 1.5);
     5    --PS: calc(var(--P) / 2);
    66    --PXS: calc(var(--P) / 3);
    77
     
    2323    // APP COLORS
    2424    --C-APP: #fff;
     25    --C-APP-ALPHA9: rgb(255, 255, 255, .9);
     26    --C-APP-ALPHA8: rgb(255, 255, 255, .9);
     27    --C-APP-ALPHA7: rgb(255, 255, 255, .9);
    2528
    2629    // GRAY PALETTE
     
    3538    --C-G800: #1A202C;
    3639    --C-G900: #171923;
     40
     41    --C-G50: #f0f1f3;
     42    --C-G100: #e0e2e8;
     43    --C-G200: #c3c6d1;
     44    --C-G300: #a5abbb;
     45    --C-G400: #8991a5;
     46    --C-G500: #6d7790;
     47    --C-G600: #515e7b;
     48    --C-G700: #364767;
     49    --C-G800: #183153;
     50    --C-G900: #001c40;
    3751
    3852    // BRAND COLORS
     
    7892
    7993    // DIVIDER DEFAULT STYLES
    80     --DIVIDER: rgba(22, 27, 37, 0.15);
    81     --DIVIDER--DARK: rgba(22, 27, 37, 0.3);
    82     --DIVIDER--LIGHT: rgba(22, 27, 37, 0.08);
     94    --DIVIDER: rgba(38, 45, 61, 0.15);
     95    --DIVIDER--DARK: rgba(35, 43, 58, 0.3);
     96    --DIVIDER--LIGHT: rgba(40, 48, 65, 0.08);
    8397
    8498    // GLOBAL TRANSITION SETTINGS (set: "none" to disable)
     
    94108    // LAYOUT SETTINGS
    95109    --APP-H: 75vh; // App height
    96     --APP-MH: 55vh; // Mobile App height
    97     --APP-MIN-H: 550px; // App min height
     110    --APP-MH: 55vh; // (Mobile) App height
     111    --APP-MIN-H: 750px; // App min height
    98112    --APP-MAX-H: 800px; // App max height
    99     --APP-MAX-MH: 600px; // Mobile App max height
     113    --APP-MAX-MH: 600px; // (Mobile) App max height
    100114    --APP-W: 100%; // App width
    101     --APP-FULLCREEN-MAX-W: 1400px;
     115    --APP-FULLCREEN-MAX-W: 1400px; // Limit width of the fullscreen view
    102116
    103117    // SIDEBAR SETTINGS
     
    112126.lo-dark {
    113127    // APP COLORS
    114     --C-APP: #1A202C;
     128    --C-APP: #191a1b;
     129    --C-APP-ALPHA9: rgb(25, 26, 27, .9);
     130    --C-APP-ALPHA8: rgb(25, 26, 27, .8);
     131    --C-APP-ALPHA7: rgb(25, 26, 27, .7);
    115132
    116133    // GRAY PALETTE
    117     --C-G900: #171923;
    118     --C-G800: #1A202C;
    119     --C-G700: #E2E8F0;
    120     --C-G600: #CBD5E0;
    121     --C-G500: #A0AEC0;
    122     --C-G400: #718096;
    123     --C-G300: #4A5568;
    124     --C-G200: #2D3748;
    125     --C-G100: #161b25;
    126     --C-G50: #171923;
     134    --C-G900: #262628;
     135    --C-G800: #292a2b;
     136    --C-G700: #8e9092;
     137    --C-G600: #696c6e;
     138    --C-G500: #606367;
     139    --C-G400: #56595f;
     140    --C-G300: #3e4044;
     141    --C-G200: #3c3f45;
     142    --C-G100: #1d1f21;
     143    --C-G50: #1f1f22;
    127144
    128145    // TEXT COLORS
  • listowp/trunk/assets/scss/components/_button.scss

    r2877206 r2884416  
    1111    --color: inherit;
    1212    --color-hover: inherit;
    13     --radius: var(--RL);
     13    --radius: var(--R);
    1414
    1515    display: inline-flex;
     
    6161
    6262//
     63// Small button class modifier
     64// ----------------------------------------------------------------
     65.lo-btn--sm {
     66    padding: 0 var(--PXS);
     67    height: 2rem;
     68    font-size: .9rem;
     69}
     70
     71//
    6372// Link button class modifier
    6473// ----------------------------------------------------------------
    6574.lo-btn--link {
    6675    --bg: transparent;
    67     --bg-hover: var(--C-G200);
     76    --bg-hover: var(--C-G50);
    6877    --color: var(--TC--LIGHT);
    6978    --color-hover: var(--TC);
    70     --border-color: var(--C-G300);
     79    --border-color: var(--C-G200);
    7180
    7281    border: 1px solid var(--border-color);
     
    7786// ----------------------------------------------------------------
    7887.lo-btn--action {
    79     --bg-hover: var(--C-BRAND);
    80     --color: var(--C-BRAND--DARK);
     88    --bg: var(--C-BRAND);
     89    --bg-hover: var(--C-BRAND--DARK);
     90    --color: #fff;
    8191    --color-hover: #fff;
     92    --border-color: var(--C-BRAND--DARK);
    8293
    83     padding: 0 var(--PS);
    84     height: 2.35rem;
    85     border: 2px solid var(--bg-hover);
     94    border: 1px solid var(--border-color);
    8695}
  • listowp/trunk/assets/scss/frontend.scss

    r2878127 r2884416  
    77@import 'components/button';
    88@import 'components/tip';
     9@import 'components/popover';
    910
    1011// HELPERS
    1112@import 'helpers/helpers';
     13@import 'helpers/form';
    1214
    1315// STRUCTURES
  • listowp/trunk/assets/scss/structures/_lists-item.scss

    r2878127 r2884416  
    287287        align-items: center;
    288288        min-height: 127px;
    289         padding: var(--PS) var(--P);
     289        padding: var(--PS) calc(var(--PS) + var(--PXS));
    290290    }
    291291
  • listowp/trunk/assets/scss/structures/_lists.scss

    r2878127 r2884416  
    6666
    6767    > i {
     68        position: relative;
    6869        color: var(--i-color);
    6970        transition: var(--T);
    7071        transition-duration: .4s;
     72
     73        &:after {
     74            content: "\2b";
     75            position: absolute;
     76            top: 50%;
     77            left: 50%;
     78            transform: translate(-50%, -50%);
     79            font-size: 1.35rem;
     80            font-weight: bold;
     81        }
    7182    }
    7283
     
    7687
    7788    @include mq($from: desktop) {
    78         --border-c: var(--C-G300);
     89        --border-c: var(--C-G200);
    7990        --color: var(--C-G600);
    8091        --bg: transparent;
     
    130141    --bg: transparent;
    131142    --bg-hover: transparent;
    132     --color: var(--C-BRAND);
    133     --color-hover: var(--C-BRAND);
     143    --color: var(--TC--LIGHT);
     144    --color-hover: var(--TC--LIGHT);
    134145
    135146    position: relative;
     
    143154
    144155    &:last-child {
    145         --color: var(--TC--LIGHT);
    146         --color-hover: var(--TC--LIGHT);
     156        --color: var(--C-BRAND);
     157        --color-hover: var(--C-BRAND);
    147158
    148159        padding-right: 0;
  • listowp/trunk/assets/scss/structures/_main.scss

    r2877206 r2884416  
    99    width: 100%;
    1010    min-width: 0;
    11     background-color: var(--C-G100);
     11    background-color: var(--C-G50);
    1212    border: 1px solid var(--DIVIDER--LIGHT);
    1313    border-top-right-radius: var(--RL);
  • listowp/trunk/assets/scss/structures/_tasks-item.scss

    r2877206 r2884416  
    77    --bg-color: var(--C-APP);
    88    --shadow: var(--DIVIDER--LIGHT);
    9     --shadow-hover-1: var(--C-G400);
    10     --shadow-hover-2: var(--C-G200);
     9    --shadow-hover-1: var(--C-G200);
     10    --shadow-hover-2: var(--C-G100);
    1111
    1212    position: relative;
     
    233233    --c: var(--C-G600);
    234234    --ic: var(--C-G500);
    235     --bg: var(--C-G200);
    236     --bg-hover: var(--C-G200);
     235    --bg: var(--C-G100);
     236    --bg-hover: var(--C-G100);
    237237    --bsh: var(--C-G50);
    238238
     
    273273        --c: var(--C-G600);
    274274        --ic: var(--C-G500);
    275         --bg: var(--C-G200);
     275        --bg: var(--C-G100);
    276276        --bsh: var(--C-G100);
    277277
     
    284284.lo-task__meta--date {
    285285    padding-right: 0;
     286}
     287
     288.lo-task__meta--time {
     289    appearance: none;
     290    -webkit-appearance: none;
    286291}
    287292
     
    359364// ----------------------------------------------------------------
    360365.lo-task--done {
    361     --bg-color: var(--C-G100);
     366    --bg-color: var(--C-G50);
    362367    --shadow: var(--DIVIDER);
    363368
  • listowp/trunk/assets/scss/structures/_tasks.scss

    r2878127 r2884416  
    243243    --bg: transparent;
    244244    --bg-hover: transparent;
    245     --color: var(--C-BRAND);
    246     --color-hover: var(--C-BRAND);
     245    --color: var(--TC--LIGHT);
     246    --color-hover: var(--TC--LIGHT);
    247247
    248248    position: relative;
     
    256256
    257257    &:last-child {
    258         --color: var(--TC--LIGHT);
    259         --color-hover: var(--TC--LIGHT);
     258        --color: var(--C-BRAND);
     259        --color-hover: var(--C-BRAND);
    260260
    261261        padding-right: 0;
  • listowp/trunk/assets/scss/structures/_wrapper.scss

    r2877206 r2884416  
    3434    --bg: transparent;
    3535    --bg-hover: transparent;
    36     --color: var(--TC--LIGHT);
     36    --color: var(--TC--LIGHTEN);
    3737    --color-hover: var(--TC);
    3838
     
    4040    z-index: 100;
    4141    top: 1px;
    42     right: 1px;
     42    right: 28px;
    4343    display: flex;
    4444    align-items: center;
     
    4949    .lo-wrapper--fullscreen & {
    5050        top: 1px;
    51         right: 1px;
     51        right: 28px;
    5252
    5353        > i {
  • listowp/trunk/classes/config/config_panel.php

    r2878127 r2884416  
    152152
    153153            // Position
    154             if(stristr($name,'_position')) {
     154            if(stristr($name,'_position') || stristr($name,'_int')) {
     155                $label = $label ? $label : _x('Position','admin','listowp');
    155156                $config[$name] = [
    156157                    'type' => 'int',
    157                     'title' => _x('Position','admin','listowp'),
     158                    'title' => $label,
    158159                ];
    159160            }
     
    208209            'date_format' => _x('Used on Tasks due this year','admin','listowp'),
    209210            'date_format_long' => _x('Used on Tasks due any other year','admin','listowp'),
     211            'bb_position' => self::maybe_desc_empty_for_default() .'<br/><b>By default, BuddyBoss does not number tabs from 1</b><br/>Please <a href="https://ListoWP.com/r/docs_config_integrations" target="_blank">check the documentation</a> for more information.'
    210212        ];
    211213
     
    214216        if(isset($item['pro']) && !apply_filters('listowp_is_pro',0) ) {
    215217            // @TODO #143 - convert upsell to static HTML included in the plugin
    216             //return 'Not configurable in the free version. <a href="'.admin_url('admin.php?page=listo-upgrade').'">Upgrade to ListoWP Pro!</a>';
    217             return 'Not configurable in the free version. <a href="https://ListoWP.com/pricing" target="_blank">Upgrade to ListoWP Pro!</a>';
     218            //return 'Not configurable in the free version. <a href="'.admin_url('admin.php?page=listo-upgrade').'">Upgrade to Pro!</a>';
     219            return 'Not configurable in the free version. <a href="https://ListoWP.com/pricing" target="_blank">Upgrade to Pro!</a>';
    218220        }
    219221
     
    222224        }
    223225
    224         if( stristr($item['id'],'_position') || stristr($item['id'],'_slug') || stristr($item['id'],'_label')) {
     226        if( stristr($item['id'],'_position') || stristr($item['id'],'_slug') || stristr($item['id'],'_label') || stristr($item['id'],'_int')) {
    225227            return self::maybe_desc_empty_for_default();
    226228        }
  • listowp/trunk/classes/config/config_upgrade.php

    r2878127 r2884416  
    1919                        <div class="loa-upgrade-pricing-inner">
    2020                            <div class="loa-upgrade-pricing__column loa-upgrade-pricing__column--yearly">
    21                                 <div class="loa-upgrade-pricing__title">Yearly - <strong>20% off!</strong></div>
    22                                 <div class="loa-upgrade-pricing__price"><strike style="color:#990000;opacity:0.5">$29</strike> $23</div>
     21                                <div class="loa-upgrade-pricing__title">Yearly <span>20% off!</span></div>
     22                                <div class="loa-upgrade-pricing__price"><strike>$29</strike> $23</div>
    2323                                <div class="loa-upgrade-pricing__action">
    2424                                    <a href="https://listowp.com/?listo_add_to_cart=yearly&discount=UPGRADE20" target="_blank">BUY NOW</a>
    2525                                </div>
    26                                 <div class="loa-upgrade-pricing__price__discount" style="opacity:0.5;font-size:10px;text-align:center;">Use code <code style="font-size:10px;background:white;padding:0">UPGRADE20</code> on checkout</div>
     26                                <div class="loa-upgrade-pricing__price__discount">Use code <code>UPGRADE20</code> on checkout</div>
    2727                                <div class="loa-upgrade-pricing__features">
    2828                                    <div class="loa-upgrade-pricing__feature">
     
    4141                            </div>
    4242                            <div class="loa-upgrade-pricing__column loa-upgrade-pricing__column--lifetime">
    43                                 <div class="loa-upgrade-pricing__title">Lifetime - <strong>20% off!</strong></div>
    44                                 <div class="loa-upgrade-pricing__price"><strike style="color:#990000;opacity:0.5">$299</strike> $239</div>
     43                                <div class="loa-upgrade-pricing__title">Lifetime <span>20% off!</span></div>
     44                                <div class="loa-upgrade-pricing__price"><strike>$299</strike> $239</div>
    4545                                <div class="loa-upgrade-pricing__action">
    4646                                    <a href="https://listowp.com/?listo_add_to_cart=lifetime&discount=UPGRADE20" target="_blank">BUY NOW</a>
    4747                                </div>
    48                                 <div class="loa-upgrade-pricing__price__discount" style="opacity:0.5;font-size:10px;text-align:center;">Use code <code style="font-size:10px;background:white;padding:0">UPGRADE20</code> on checkout</div>
     48                                <div class="loa-upgrade-pricing__price__discount">Use code <code>UPGRADE20</code> on checkout</div>
    4949                                <div class="loa-upgrade-pricing__features">
    5050                                    <div class="loa-upgrade-pricing__feature">
  • listowp/trunk/classes/frontend/assets_pro.php

    r2877206 r2884416  
    66    $pro_data = [
    77        'templates' => [
    8             'recurring' => $assets->get_template('pro/recurring'),
     8            'recurring' => $assets->get_template('pro/item_due_recurring'),
    99        ]
    1010    ];
  • listowp/trunk/classes/models/abstract_listing.php

    r2877206 r2884416  
    7575    // Add default ORDER statement
    7676    protected function query_order($order=[]) {
    77         $this->query .= " ORDER BY `order` ASC, `id` DESC";
     77        $order = array_merge($order, ['order' => '`order` ASC','id'=>'`id` DESC']);
     78
     79        foreach($order as $k=>$v) {
     80            if(NULL==$v) {
     81                unset($order[$k]);
     82            }
     83        }
     84        $this->query .= " ORDER BY ".implode(',', $order);
    7885    }
    7986
  • listowp/trunk/classes/models/collections.php

    r2877206 r2884416  
    122122        $this->init('collection');
    123123        $this->query_start();
    124         $this->query_where();
     124
     125        $board = is_int($this->request['board']) ? $this->request['board'] : NULL;
     126
     127        $where = [
     128            'board ' => "board IS NULL",
     129        ];
     130
     131        if($board) {
     132            $where = [
     133                'board ' => "board=$board",
     134            ];
     135        }
     136
     137        $this->query_where($where);
    125138        $this->query_order();
    126139
     
    128141
    129142        // Attach smart collections only if we are requesting a full list
    130         if($this->request->get_method() == 'GET' && !isset($this->request['id'])) {
     143        if($this->request->get_method() == 'GET' && !isset($this->request['id']) && NULL===$board) {
    131144            $default_ids = [
    132145                'due',
     
    144157            }
    145158        }
    146 
     159new Listo_Debug($this->query);
    147160        $result = $this->wpdb->get_results($this->query, ARRAY_A);
    148161        foreach($result as $id) {
  • listowp/trunk/classes/models/item.php

    r2877206 r2884416  
    77    public $due;
    88    public $due_formatted;
    9     public $due_human;
     9    public $due_formatted_long;
     10    public $due_formatted_long_time;
    1011    public $due_past;
    1112
     
    1415    public $rrule = NULL;
    1516    public $rrule_id = NULL;
     17
     18    public $rrule_label = NULL;
    1619
    1720
     
    3639        }
    3740
    38         if ( 'status' == $property && 1==$value) {
    39             $now = current_time('mysql',TRUE);
    40             $this->set('closed', $now);
     41        if('rrule_id' == $property) {
     42            if('none' == $value) {
     43                $value = NULL;
     44            }
     45        }
     46
     47        if ( 'status' == $property) {
     48            if(1==$value) {
     49                $now = current_time('mysql',TRUE);
     50                $this->set('closed', $now);
     51            } else {
     52                $this->set('closed', NULL);
     53            }
    4154        }
    4255
     
    5972            $this->due_formatted = Listo_Time::format($this->due);
    6073            $this->due_formatted_long = Listo_Time::format($this->due, TRUE);
     74            $this->due_formatted_long_time = Listo_Time::format($this->due, TRUE, TRUE);
    6175
    6276            $diff = Listo_Time::diff_human($this->due);
    6377            $this->due_past = $diff['past'];
    6478            $this->due_this_year = $diff['this_year'];
     79
     80            if($this->rrule_id && class_exists('Listo_Recurring')) {
     81                $defaults = Listo_Recurring::defaults(date('Y-m-d H:i:s'));
     82                if(array_key_exists($this->rrule_id, $defaults)) {
     83                    $this->rrule_label = $defaults[$this->rrule_id]['label'];
     84                }
     85            }
    6586        }
    6687
  • listowp/trunk/classes/models/items.php

    r2877206 r2884416  
    1111        $this->init('item');
    1212        $this->query_start();
     13
     14        $prefs = Listo_User_Preferences::get_instance();
    1315
    1416        $where = [];
     
    3436        }
    3537
     38        $where['board'] ="NOT EXISTS (SELECT id FROM {$this->wpdb->prefix}listo_collections WHERE id=$this->table.collection AND {$this->wpdb->prefix}listo_collections.board IS NOT NULL)";
     39
     40        // Hide "Done" except "done" smart list
     41        if($prefs->get('items_hide_done', 0) && $this->request['collection']!='done') {
     42            $where['status'] = '`status`=0';
     43        }
     44
    3645        $where = apply_filters('listowp_items_query_where', $where, $this->request);
    3746
    3847        $this->query_where($where);
    3948
    40         $this->query_order();
     49        // Ordering
     50        $order = [];
     51
     52        /**
     53         * order        `order` - no  ASC or DESC here
     54         * status       `status`
     55         * due          `due`, but keep empty on the bottom
     56         */
     57
     58        $sort = $prefs->get('items_order', 0);
     59        $sort_dir = $prefs->get('items_order_dir', 'asc');
     60        switch($sort) {
     61            case 'due':
     62                $order['due_is_null'] = '(`due` IS NULL) ASC'; # https://stackoverflow.com/questions/8510632/php-mysql-order-by-date-but-empty-dates-last-not-first
     63                $order['due'] = '`due` '.$sort_dir;
     64                break;
     65            case 'status':
     66                $order['status'] = '`status` '.$sort_dir;
     67                break;
     68            case 'edited':
     69                $order['edited'] = '`edited` '.$sort_dir;
     70                break;
     71            case 'created':
     72                $order['created'] = '`created` '.$sort_dir;
     73                break;
     74            default:
     75                // Abstract knows what to do
     76                break;
     77        }
     78
     79
     80
     81        $this->query_order($order);
    4182
    4283        $ids = [];
  • listowp/trunk/classes/users/preferences.php

    r2877206 r2884416  
    1313        global $wpdb;
    1414
    15         $sql = $wpdb->prepare("SELECT `key`, `value` FROM {$wpdb->prefix}listo_user_preferences WHERE `user`=%d", Listo_User::get_id());
     15        $sql = $wpdb->prepare("SELECT `name`, `value` FROM {$wpdb->prefix}listo_user_preferences WHERE `user`=%d", Listo_User::get_id());
    1616        $rows = $wpdb->get_results( $sql, ARRAY_A );
    1717
    1818        if ( $wpdb->num_rows > 0 ) {
    1919            foreach ( $rows as $row ) {
    20                 $this->prefs[$row['key']] = maybe_unserialize($row['value']);
     20                $this->prefs[$row['name']] = maybe_unserialize($row['value']);
    2121            }
    2222        }
    2323    }
    2424
    25     public function set($key, $value) {
     25    public function set($name, $value) {
    2626        global $wpdb;
    2727
     
    2929
    3030        // Insert
    31         if(!isset($this->prefs[$key])) {
    32             $sql = $wpdb->prepare("INSERT INTO {$wpdb->prefix}listo_user_preferences (`user`,`key`,`value`) VALUES (%d, %s, %s)", Listo_User::get_id(), $key, $value);
     31        if(!isset($this->prefs[$name])) {
     32            $sql = $wpdb->prepare("INSERT INTO {$wpdb->prefix}listo_user_preferences (`user`,`name`,`value`) VALUES (%d, %s, %s)", Listo_User::get_id(), $name, $value);
    3333            //new Listo_Debug($sql);
    3434            $wpdb->query($sql);
     
    3636
    3737        // Update
    38         $sql = $wpdb->prepare("UPDATE {$wpdb->prefix}listo_user_preferences SET `value`=%s WHERE `user`=%d AND `key`=%s", $value, Listo_User::get_id(), $key);
     38        $sql = $wpdb->prepare("UPDATE {$wpdb->prefix}listo_user_preferences SET `value`=%s WHERE `user`=%d AND `name`=%s", $value, Listo_User::get_id(), $name);
    3939        $wpdb->query($sql);
    4040        //new Listo_Debug($sql);
    41         $this->prefs[$key]=$value;
     41        $this->prefs[$name]=$value;
    4242    }
    4343
    44     public function get($key, $default = NULL) {
     44    public function get($name, $default = NULL) {
    4545
    46         if(isset($this->prefs[$key])) {
    47             return $this->prefs[$key];
     46        if(isset($this->prefs[$name])) {
     47            return $this->prefs[$name];
    4848        }
    4949
  • listowp/trunk/language/listowp.pot

    r2878127 r2884416  
    33msgstr ""
    44"Project-Id-Version: ListoWP\n"
    5 "POT-Creation-Date: 2023-03-10 15:15-0500\n"
     5"POT-Creation-Date: 2023-03-10 17:02-0500\n"
    66"PO-Revision-Date: 2023-02-02 16:34-0500\n"
    77"Last-Translator: \n"
     
    515515
    516516#: templates/root.php:66
    517 msgid "Close Preferences"
     517msgctxt "Button to close window etc"
     518msgid "Close"
    518519msgstr ""
    519520
  • listowp/trunk/listo_plugin.php

    r2878127 r2884416  
    22/**
    33 * Plugin Name: ListoWP
    4  * Plugin URI: https://ListoWP.com
    54 * Description: Front-end To Do Lists for your WordPress users
    6  * Author: Matt Jaworski
    7  * Version: 0.9.4
    8  * Copyright: (c) Matt Jaworski
     5 * Author: ListoWP
     6 * Author URI: https://ListoWP.com
     7 * Version: 0.9.5
     8 * Copyright: (c) MJWP, LLC
    99 * License: GPLv2 or later
    1010 * License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    2222 **/
    2323
     24if(class_exists('Listo_Plugin')) {
     25    deactivate_plugins( plugin_basename( __FILE__ ) );
     26    add_action('admin_notices',function(){
     27    ?>
     28        <div class="error listo">Please make sure to have only one version of ListoWP active. If you are using ListoWP Pro, the free version can be deactivated and removed.</div>
     29    <?php
     30    });
     31} else {
     32
     33    class Listo_Plugin {
     34
     35        private static $instance = null;
     36
     37        const PLUGIN_VERSION = '0.9.5';
     38
     39        public static function get_instance() {
     40            return ( null == self::$instance ) ? new self() : self::$instance;
     41        }
    2442
    2543
    26 class Listo_Plugin {
    27 
    28     private static $instance = NULL;
    29 
    30     const PLUGIN_VERSION = '0.9.4';
    31 
    32     public static function get_instance() {
    33         return (NULL==self::$instance) ? new self() : self::$instance;
    34     }
     44        private function __construct() {
     45            $this->autoload();
     46            add_action( 'plugins_loaded', array( &$this, 'load_textdomain' ) );
     47        }
    3548
    3649
     50        /** UTILITIES **/
    3751
    38     private function __construct() {
    39         $this->autoload();
    40         add_action('plugins_loaded', array(&$this, 'load_textdomain'));
    41     }
     52        private function autoload() {
     53            require_once( 'classes' . DIRECTORY_SEPARATOR . 'boot' . DIRECTORY_SEPARATOR . 'all.php' );
     54            Listo_Autoload::get_instance();
     55            Listo_API::get_instance();
     56            Listo_Frontend_Assets::get_instance();
    4257
     58            register_activation_hook( __FILE__, [ 'Listo_Activation', '_' ] );
     59            if ( class_exists( 'Listo_Activation_Pro' ) ) {
     60                register_activation_hook( __FILE__, [ 'Listo_Activation_Pro', '_' ] );
     61            }
     62        }
    4363
     64        public function load_textdomain() {
     65            $path = str_ireplace( WP_PLUGIN_DIR, '', dirname( __FILE__ ) ) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR;
     66            load_plugin_textdomain( 'listowp', false, $path );
     67        }
     68    }
    4469
    45     /** UTILITIES **/
    46 
    47     private function autoload() {
    48         require_once('classes' . DIRECTORY_SEPARATOR . 'boot' . DIRECTORY_SEPARATOR . 'all.php');
    49         Listo_Autoload::get_instance();
    50         Listo_API::get_instance();
    51         Listo_Frontend_Assets::get_instance();
    52 
    53         register_activation_hook(__FILE__, ['Listo_Activation', '_']);
    54 
    55 
    56     }
    57 
    58     public function load_textdomain()
    59     {
    60         $path = str_ireplace(WP_PLUGIN_DIR, '', dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR;
    61         load_plugin_textdomain('listowp', FALSE, $path);
    62     }
     70    Listo_Plugin::get_instance();
    6371}
    64 
    65 Listo_Plugin::get_instance();
  • listowp/trunk/readme.txt

    r2878127 r2884416  
    66Requires at least: 6.0
    77Tested up to: 6.1
    8 Stable tag: 0.9.4
     8Stable tag: 0.9.5
    99License: GPLv2 or later
    1010
     
    6161
    6262== Changelog ==
     63
     64= 0.9.5 -
     65* Mar 21, 2023 • BETA6
     66* NEW • PRO • Task deadlines can now be recurring
     67* NEW • Task deadlines can also be set with time
     68* IMP • Task deadline setting is now a drop-down menu
     69* IMP • PRO • BuddyBoss integration: added extra explanation to the "position" option as BB does not number the profile tabs from "1"
     70* IMP • PRO • Separate activation script for Pro related options & database tables
     71* IMP • PRO • Add a warning if admin is trying to activate both Free and Pro at the same time
     72* FIX • PRO • PeepSo integration: wrong use of slug & label
     73* FIX • Edited tasks couldn't be dragged
     74* FIX • Plugin activation resets configuration
    6375
    6476= 0.9.4 -
  • listowp/trunk/templates/collection_header.php

    r2878127 r2884416  
    6363                    placeholder="<?php echo esc_attr__('Task title', 'listowp'); ?>" />
    6464            <div class="lo-tasks__add-form-actions">
    65                 <button class="lo-tasks__add-form-action lo-btn lo-tip" disabled data-listo="save-and-new"
    66                         aria-label="<?php echo esc_attr__("Add & new", 'listowp') . " (⇧&#9166;)"; ?>">
    67                     <i class="fa-solid fa-circle-plus"></i>
    68                 </button>
    6965                <button class="lo-tasks__add-form-action lo-btn lo-tip" data-listo="cancel"
    7066                        aria-label="<?php echo esc_attr__('Cancel', 'listowp'); ?>">
    7167                    <i class="fa-regular fa-circle-xmark"></i>
    7268                </button>
     69                <button class="lo-tasks__add-form-action lo-btn lo-tip" disabled data-listo="save"
     70                        aria-label="<?php echo esc_attr__("Add", 'listowp'); ?>">
     71                    <i class="fa-solid fa-circle-plus"></i>
     72                </button>
     73
    7374            </div>
    7475        </div>
  • listowp/trunk/templates/item.php

    r2877206 r2884416  
    4444        <div class="lo-task__name-meta">
    4545            <?php echo Listo_Frontend_Assets::get_instance()->get_template('item_due'); ?>
    46             <?php do_action('listowp_item_meta');?>
     46
    4747            <!-- Read more -->
    4848            <button
     
    5454                <i class="fa-solid fa-circle-info"></i>
    5555            </button>
     56
    5657            <!-- Edit button -->
    5758            <div class="lo-task__edit-toggle lo-task__meta lo-tip lo-tip--bottom" data-listo="edit-item" aria-label="<?php echo esc_attr__('Edit', 'listowp'); ?>">
  • listowp/trunk/templates/item_due.php

    r2877206 r2884416  
    11{{ if (data.due) { }}
    2 <span class="lo-task__meta lo-task__meta--date {{= data.due_past ? 'lo-task__meta--expired' : 'lo-task__meta--scheduled' }}"
    3         data-listo="item-due">
    4 
    5 <!--    {{ if (data.rrule) { }}-->
    6 <!--        <i class="fa-solid fa-repeat"></i>-->
    7 <!--    {{ } else{ }}-->
    8         {{ if (data.due_past) { }}
     2<div class="lo-task__meta lo-task__meta--date {{= data.due_past ? 'lo-task__meta--expired' : 'lo-task__meta--scheduled' }}" data-listo="item-due">
     3    <div class="lo-tip lo-tip--right" aria-label="{{= data.due_formatted_long_time }}{{ if (data.rrule_label) { }} • {{= data.rrule_label }}{{ } }}">
     4        {{ if (data.rrule) { }}
     5        <i class="fa-solid fa-repeat"></i>
     6        {{ } else if (data.due_past) { }}
    97        <i class="fa-solid fa-circle-exclamation"></i>
    108        {{ } else { }}
    119        <i class="fa-solid fa-calendar-days"></i>
    1210        {{ } }}
    13 <!--    {{ } }}-->
    14     <span class="lo-tip lo-tip--right" aria-label="<?php echo esc_attr(__('Due date', 'listowp')); ?>">
    1511        {{= data.due_this_year ? data.due_formatted : data.due_formatted_long }}
    16         <input class="lo-task__meta-input" type="date" value="{{= data.due }}" data-listo="item-due-picker" />
    17     </span>
    18     <span class="lo-tip lo-tip--right" aria-label="<?php echo esc_attr(__('Clear', 'listowp')); ?>">
    19         <i class="fa-solid fa-xmark lo-task__meta-toggle" data-listo="item-due-remove"></i>
    20     </span>
    21 </span>
     12        <i class="fa-solid fa-angle-down lo-task__meta-toggle"></i>
     13    </div>
     14
     15    <?php echo Listo_Frontend_Assets::get_instance()->get_template('item_due_popup'); ?>
     16</div>
    2217{{ } else { }}
    23 <span class="lo-task__meta lo-task__meta--date lo-tip lo-tip--right" data-listo="item-due" aria-label="<?php echo esc_attr(__('No due date', 'listowp')); ?>">
    24     <i class="fa-regular fa-calendar"></i>
    25     <input class="lo-task__meta-input" type="date" value="" data-listo="item-due-picker" />
    26     <i class="fa-solid fa-angle-down lo-task__meta-toggle" data-listo="item-due-change"></i>
    27 </span>
     18<div class="lo-task__meta lo-task__meta--date" data-listo="item-due">
     19    <div class="lo-tip lo-tip--right" aria-label="<?php echo esc_attr__('No due date', 'listowp'); ?>">
     20        <i class="fa-regular fa-calendar"></i>
     21        <i class="fa-solid fa-angle-down lo-task__meta-toggle"></i>
     22    </div>
     23
     24    <?php echo Listo_Frontend_Assets::get_instance()->get_template('item_due_popup'); ?>
     25</div>
    2826{{ } }}
  • listowp/trunk/templates/root.php

    r2878127 r2884416  
    55    <a class="lo-activate" href="<?php echo admin_url('admin.php?page=listowp-license');?>">Please activate your ListoWP Pro license!</a>
    66<?php } else {
     7
    78    if(Listo_User::get_id()) { ?>
    89        <?php $color_theme = Listo_Config::get('default_theme_select'); ?>
     
    2324                    <i class="fa-solid fa-up-right-and-down-left-from-center"></i>
    2425                </button>
     26                <button class="lo-pref__toggle lo-btn lo-tip lo-tip--left" data-listo="preferences-toggle" aria-label="<?php echo esc_attr__('Preferences', 'listowp'); ?>">
     27                    <i class="fa-solid fa-gear"></i>
     28                </button>
    2529                {{ if (data.enable_collections) { }}
    2630                <div class="lo-sidebar" data-listo="sidebar">
     
    3741                                placeholder="<?php echo esc_attr(__('List name', 'listowp')); ?>" />
    3842                            <div class="lo-lists__add-form-actions">
    39                                 <button class="lo-btn lo-lists__add-form-action lo-tip lo-tip--bottom" disabled data-listo="save-and-new" aria-label="<?php echo esc_attr(__('Add & new', 'listowp'))." (⇧&#9166;)"; ?>"><i class="fa-solid fa-circle-plus"></i></button>
    4043                                <button class="lo-btn lo-lists__add-form-action lo-tip lo-tip--bottom" data-listo="cancel" aria-label="<?php echo esc_attr(__('Cancel', 'listowp')); ?>"><i class="fa-regular fa-circle-xmark"></i></button>
     44                                <button class="lo-btn lo-lists__add-form-action lo-tip lo-tip--bottom" disabled data-listo="save" aria-label="<?php echo esc_attr(__('Add', 'listowp')); ?>"><i class="fa-solid fa-circle-plus"></i></button>
    4145                            </div>
    4246                        </div>
     
    4448                    <div class="lo-lists__add-wrapper" data-listo="new-collection" style="display:none">
    4549                        <div class="lo-lists__add">
    46                             <i class="fa-solid fa-circle-plus"></i><?php echo __('New list','listowp'); ?>
     50                            <i class="fa-regular fa-circle"></i><?php echo __('New list','listowp'); ?>
    4751                        </div>
    4852                    </div>
     
    6266                    <div class="lo-tasks" data-listo="items"></div>
    6367                </div>
    64                 <button class="lo-pref__toggle lo-btn lo-tip lo-tip--left" data-listo="pref-toggle" aria-label="<?php echo esc_attr__('Preferences', 'listowp'); ?>"><i class="fa-solid fa-gear"></i></button>
    65                 <div class="lo-pref" style="display:none" data-listo="preferences">
    66                     <button class="lo-pref__close lo-btn lo-tip lo-tip--left" data-listo="pref-close" aria-label="<?php echo esc_attr__('Close Preferences', 'listowp'); ?>">
     68                <div class="lo-pref" data-listo="preferences" style="display:none">
     69                    <button class="lo-pref__close lo-btn lo-tip lo-tip--left" data-listo="preferences-close" aria-label="<?php echo esc_attr_x('Close', 'Button to close window etc','listowp'); ?>">
    6770                        <i class="fa-solid fa-circle-xmark"></i>
    6871                    </button>
Note: See TracChangeset for help on using the changeset viewer.