Plugin Directory

Changeset 3733904


Ignore:
Timestamp:
10/08/2026 07:45:25 AM (3 weeks ago)
Author:
smgom
Message:

Release 1.0.4: share the sync log for every linked store, with no switch

Location:
erp7-order-sync-for-zoho-books
Files:
24 edited
1 copied

Legend:

Unmodified
Added
Removed
  • erp7-order-sync-for-zoho-books/tags/1.0.4/build/index-rtl.css

    r3733769 r3733904  
    1 #zbwc-app{--zbwc-accent:#2271b1;--zbwc-border:#dcdcde;--zbwc-bg:#f6f7f7;--zbwc-ok:#00a32a;--zbwc-warn:#dba617;--zbwc-error:#d63638;--zbwc-plan-soft:#f0f6fc;--zbwc-plan-line:#c5d9ed;--zbwc-plan-tint:#dfebf7;--zbwc-bar-soft:#fdf8e3;--zbwc-bar-line:#e6d18d;--zbwc-bar-tint:#f7e8b4;--zbwc-bar-ink:#7a5d0a;color:#1e1e1e;margin:20px 0 0 20px}#zbwc-app .zbwc-boot{color:#757575;padding:40px}#zbwc-app .zbwc-nav{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:20px;padding:10px 16px}#zbwc-app .zbwc-nav__brand{align-items:center;display:flex;font-size:15px;font-weight:600;gap:8px}#zbwc-app .zbwc-nav__logo{color:var(--zbwc-accent)}#zbwc-app .zbwc-nav__sub{color:#757575;font-weight:400}#zbwc-app .zbwc-nav__tabs{display:flex;flex:1;flex-wrap:wrap;gap:4px}#zbwc-app .zbwc-nav__tab{background:transparent;border:none;border-radius:6px;color:#50575e;cursor:pointer;font-size:13px;padding:8px 14px}#zbwc-app .zbwc-nav__tab:hover{background:var(--zbwc-bg)}#zbwc-app .zbwc-nav__tab.is-active{background:var(--zbwc-accent);color:#fff}#zbwc-app .zbwc-layout.has-aside{align-items:start;display:grid;gap:24px;grid-template-columns:minmax(0,1fr) 300px}#zbwc-app .zbwc-aside{position:sticky;top:42px}#zbwc-app .zbwc-aside .zbwc-plancard{max-width:none}@media(max-width:1200px){#zbwc-app .zbwc-layout.has-aside{display:block}#zbwc-app .zbwc-aside{display:none}}#zbwc-app .zbwc-page{display:flex;flex-direction:column;gap:20px;padding-bottom:80px}#zbwc-app .zbwc-grid{display:grid;gap:16px}#zbwc-app .zbwc-grid--2{grid-template-columns:1fr 1fr}#zbwc-app .zbwc-grid--stats{grid-template-columns:repeat(4,1fr)}@media(max-width:960px){#zbwc-app .zbwc-grid--2,#zbwc-app .zbwc-grid--stats{grid-template-columns:1fr 1fr}}@media(max-width:782px){#zbwc-app .zbwc-grid--2{grid-template-columns:minmax(0,1fr)}}#zbwc-app .zbwc-section{border-radius:8px}#zbwc-app .zbwc-section__header{align-items:flex-start}#zbwc-app .zbwc-section__title{font-size:14px;margin:0}#zbwc-app .zbwc-section__desc{color:#757575;font-size:12px;margin:2px 0 0}@media(max-width:782px){#zbwc-app .zbwc-section__header{flex-wrap:wrap;row-gap:8px}#zbwc-app .zbwc-section__heading{flex:1 1 200px;min-width:0}}#zbwc-app .zbwc-section .components-base-control{margin-bottom:16px}#zbwc-app .zbwc-stat{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;padding:16px;text-align:center}#zbwc-app .zbwc-stat__value{color:var(--zbwc-accent);font-size:28px;font-weight:700}#zbwc-app .zbwc-stat__label{color:#757575;font-size:12px;margin-top:4px}#zbwc-app .zbwc-stat__hint{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-kv{border-collapse:collapse;width:100%}#zbwc-app .zbwc-kv th{color:#50575e;font-weight:500;padding:6px 0;text-align:right;width:45%}#zbwc-app .zbwc-kv td{padding:6px 0}#zbwc-app .zbwc-pill{border-radius:999px;display:inline-block;font-size:11px;font-weight:600;line-height:1.8;padding:2px 10px}#zbwc-app .zbwc-pill.is-ok{background:#edfaef;color:var(--zbwc-ok)}#zbwc-app .zbwc-pill.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-pill.is-error{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-pill.is-info{background:#f0f6fc;color:var(--zbwc-accent)}#zbwc-app .zbwc-activity{margin:0}#zbwc-app .zbwc-activity__item{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;font-size:13px;gap:10px;padding:8px 0}#zbwc-app .zbwc-activity__cat{color:#757575;font-size:10px;min-width:70px;text-transform:uppercase}#zbwc-app .zbwc-activity__msg{flex:1}#zbwc-app .zbwc-activity__time{color:#a7aaad;font-size:11px}#zbwc-app .zbwc-dot{background:var(--zbwc-accent);border-radius:50%;height:8px;width:8px}#zbwc-app .zbwc-dot.is-error{background:var(--zbwc-error)}#zbwc-app .zbwc-dot.is-warn{background:var(--zbwc-warn)}#zbwc-app .zbwc-maptable{margin-top:8px}#zbwc-app .zbwc-maptable__toolbar{margin-bottom:10px}#zbwc-app .zbwc-maptable__actions{display:flex;gap:6px}#zbwc-app .zbwc-maptable__scope{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-maptable__add{margin-top:12px;max-width:360px}@media(max-width:782px){#zbwc-app .zbwc-maptable{overflow-x:auto}#zbwc-app table.zbwc-maptable{display:block}#zbwc-app .zbwc-maptable__toolbar .components-button{height:auto;min-height:36px;text-align:right;white-space:normal}}#zbwc-app .zbwc-logtable td{font-size:12px;vertical-align:top}#zbwc-app .zbwc-nowrap{white-space:nowrap}#zbwc-app .zbwc-errcell{color:var(--zbwc-error);font-size:12px;max-width:420px}#zbwc-app .zbwc-share-log{border-bottom:1px solid #f0f0f1;margin-bottom:14px;padding:0 0 14px}#zbwc-app .zbwc-share-log .components-toggle-control__help{max-width:640px}#zbwc-app .zbwc-filters{align-items:flex-end;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:12px}#zbwc-app .zbwc-filters .components-base-control{margin-bottom:0;min-width:160px}#zbwc-app .zbwc-pager{align-items:center;color:#50575e;display:flex;font-size:12px;gap:12px;justify-content:flex-end;margin-top:12px}#zbwc-app .zbwc-muted{color:#646970;font-size:13px}#zbwc-app .zbwc-actions{margin-top:12px}#zbwc-app .zbwc-upgrade-banner{border-radius:8px;margin:0 0 20px}#zbwc-app .zbwc-upgrade-banner .components-notice__content{margin:0;width:100%}#zbwc-app .zbwc-plans{align-items:start;display:grid;gap:24px;grid-template-columns:1fr 1fr;margin-top:8px}@media(max-width:900px){#zbwc-app .zbwc-plans{grid-template-columns:1fr}}#zbwc-app .zbwc-plans__card{background:#fff;border:1px solid var(--zbwc-border);border-radius:12px;padding:24px;position:relative}#zbwc-app .zbwc-plans__card.is-featured{border:2px solid var(--zbwc-accent);padding-top:30px}#zbwc-app .zbwc-plans__ribbon{background:var(--zbwc-accent);border-radius:999px;color:#fff;font-size:11px;font-weight:700;right:50%;letter-spacing:.5px;padding:4px 16px;position:absolute;top:0;transform:translate(50%,-50%);white-space:nowrap}#zbwc-app .zbwc-plans__head{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-plans__head h3{font-size:20px;margin:0}#zbwc-app .zbwc-plans__current{background:#edfaef;border-radius:999px;color:#00611c;font-size:12px;font-weight:600;padding:4px 14px}#zbwc-app .zbwc-plans__price{margin:14px 0 18px}#zbwc-app .zbwc-plans__price strong{font-size:34px;font-weight:700;line-height:1}#zbwc-app .zbwc-plans__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plans__list li{align-items:flex-start;color:#1e1e1e;display:flex;font-size:14px;gap:10px;margin-bottom:10px}#zbwc-app .zbwc-plans__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plans__list li.is-no{color:#646970}#zbwc-app .zbwc-plans__list li.is-no .dashicons{color:#a7aaad}#zbwc-app .zbwc-plans__note{background:var(--zbwc-bg);border-radius:8px;color:#50575e;font-size:13px;margin:0;padding:14px 16px}#zbwc-app .zbwc-plans__cta.components-button.is-primary,#zbwc-app .zbwc-plans__cta.components-button.is-secondary{font-size:14px;font-weight:600;height:44px;justify-content:center;width:100%}#zbwc-app .zbwc-plans__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plans__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-planbar{align-items:center;background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-right:4px solid var(--zbwc-warn);border-radius:10px;display:flex;flex-wrap:wrap;gap:14px;margin:0 0 20px;padding:12px 16px}#zbwc-app .zbwc-planbar.is-urgent{border-color:var(--zbwc-warn);border-right-width:4px}#zbwc-app .zbwc-planbar__icon{align-items:center;background:var(--zbwc-bar-tint);border-radius:50%;color:var(--zbwc-bar-ink);display:flex;flex:none;height:32px;justify-content:center;width:32px}#zbwc-app .zbwc-planbar__text{align-items:baseline;display:flex;flex:1;flex-wrap:wrap;gap:10px;min-width:240px}#zbwc-app .zbwc-planbar__text strong{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-planbar__text span{color:#50575e;font-size:13px}#zbwc-app .zbwc-planbar__actions{align-items:center;display:flex;gap:8px;margin-right:auto}#zbwc-app .zbwc-plancard{background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-radius:10px;border-top:3px solid var(--zbwc-warn);max-width:420px;padding:20px 22px 18px}#zbwc-app .zbwc-plancard__chip{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);display:inline-block;font-size:11px;font-weight:700;letter-spacing:.4px;padding:3px 12px}#zbwc-app .zbwc-plancard__title{font-size:17px;margin:12px 0 6px}#zbwc-app .zbwc-plancard__desc{color:#50575e;font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-plancard__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plancard__list li{align-items:flex-start;color:#3c434a;display:flex;font-size:13px;gap:8px;margin-bottom:7px}#zbwc-app .zbwc-plancard__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plancard__cta.components-button.is-primary{font-weight:600;height:40px;justify-content:center;width:100%}#zbwc-app .zbwc-plancard__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plancard__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-quotachip{background:#edfaef;border-radius:999px;color:#0a6b22;display:inline-block;font-size:12px;font-weight:600;padding:3px 12px;white-space:nowrap}#zbwc-app .zbwc-quotachip.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-quotachip.is-full{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-quotanote{margin:0 0 16px}#zbwc-app .zbwc-pagehead{align-items:center;display:flex;gap:16px;justify-content:space-between}#zbwc-app .zbwc-pagehead__title{font-size:20px;font-weight:700;letter-spacing:-.01em;margin:0}#zbwc-app .zbwc-statbar{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:grid;grid-template-columns:repeat(5,1fr);overflow:hidden}#zbwc-app .zbwc-statbar__cell{align-items:flex-start;border-left:1px solid var(--zbwc-border);display:flex;flex-direction:column;gap:6px;padding:16px 18px}#zbwc-app .zbwc-statbar__cell:last-child{border-left:none}#zbwc-app .zbwc-statbar__label{color:#757575;font-size:11px;letter-spacing:.06em;text-transform:uppercase}#zbwc-app .zbwc-statbar__value{font-size:26px;font-variant-numeric:tabular-nums;font-weight:700;line-height:1}#zbwc-app .zbwc-statbar__value--sm{font-size:17px}#zbwc-app .zbwc-statbar__value.is-bad{color:var(--zbwc-error)}#zbwc-app .zbwc-statbar__sub{color:#757575;font-size:12px}@media(max-width:1100px){#zbwc-app .zbwc-statbar{grid-template-columns:repeat(3,1fr)}#zbwc-app .zbwc-statbar__cell:nth-child(3){border-left:none}}@media(max-width:600px){#zbwc-app .zbwc-statbar{grid-template-columns:1fr 1fr}}#zbwc-app .zbwc-masterbar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-right:4px solid var(--zbwc-ok);border-radius:8px;display:flex;gap:20px;padding:16px 18px}#zbwc-app .zbwc-masterbar.is-off{background:var(--zbwc-bg);border-right-color:var(--zbwc-warn)}#zbwc-app .zbwc-masterbar__text{display:flex;flex:1;flex-direction:column;gap:4px}#zbwc-app .zbwc-masterbar__title{align-items:center;display:flex;font-size:15px;font-weight:600;gap:10px}#zbwc-app .zbwc-masterbar__desc{color:#646970;font-size:13px}#zbwc-app .zbwc-flow{display:flex;flex-direction:column}#zbwc-app .zbwc-flow__row{border-bottom:1px solid #f0f0f1;padding:14px 0}#zbwc-app .zbwc-flow__row:last-child{border-bottom:none}#zbwc-app .zbwc-flow__row:first-child{padding-top:4px}#zbwc-app .zbwc-flow__row.is-disabled{opacity:.65}#zbwc-app .zbwc-flow__main{align-items:center;display:flex;gap:14px}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{align-items:center;display:flex;gap:10px;min-width:0}#zbwc-app .zbwc-flow__event{flex:0 0 46%}#zbwc-app .zbwc-flow__doc{flex:1}#zbwc-app .zbwc-flow__label{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-flow__arrow{color:#a7aaad;flex:none}#zbwc-app .zbwc-flow__badge{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);flex:none;font-size:11px;font-weight:700;letter-spacing:.4px;padding:2px 9px}#zbwc-app .zbwc-flow__switch{flex:none;margin-right:auto}#zbwc-app .zbwc-flow .components-base-control,#zbwc-app .zbwc-flow .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-flow__hint{color:#757575;font-size:12px;margin:6px 0 0;padding-right:2px}@media(max-width:782px){#zbwc-app .zbwc-flow__main{flex-wrap:wrap}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{flex:1 1 100%}#zbwc-app .zbwc-flow__arrow{display:none}}#zbwc-app .zbwc-note{align-items:flex-start;background:#fff;border:1px solid var(--zbwc-border);border-radius:10px;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-note p{color:#3c434a;font-size:14px;line-height:1.55;margin:0}#zbwc-app .zbwc-note .dashicons{align-items:center;border-radius:9px;display:flex;flex:none;font-size:19px;height:34px;justify-content:center;width:34px}#zbwc-app .zbwc-note.is-info .dashicons{background:var(--zbwc-plan-tint);color:var(--zbwc-accent)}#zbwc-app .zbwc-note.is-warn .dashicons{background:var(--zbwc-bar-tint);color:var(--zbwc-bar-ink)}#zbwc-app .zbwc-subnav{display:grid;gap:4px;grid-auto-columns:1fr;grid-auto-flow:column}#zbwc-app .zbwc-subnav__tab{background:transparent;border:none;border-radius:8px;color:#50575e;cursor:pointer;font-size:14px;font-weight:500;padding:10px 16px;text-align:center;transition:background-color .12s ease}#zbwc-app .zbwc-subnav__tab:hover{background:rgba(0,0,0,.03)}#zbwc-app .zbwc-subnav__tab.is-active{background:#e4e5e7;color:#1e1e1e;font-weight:600}#zbwc-app .zbwc-subnav__tab:focus-visible{outline:2px solid var(--zbwc-accent);outline-offset:2px}@media(max-width:782px){#zbwc-app .zbwc-subnav{grid-auto-columns:auto;grid-auto-flow:row}}#zbwc-app .zbwc-savebar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;bottom:0;box-shadow:0 -2px 10px rgba(0,0,0,.06);display:flex;justify-content:space-between;margin-top:8px;padding:12px 16px;position:sticky}#zbwc-app .zbwc-savebar__msg{font-weight:500}#zbwc-app .zbwc-savebar__actions{display:flex;gap:8px}#zbwc-app .zbwc-code{background:#1e1e1e;border-radius:6px;color:#7fd;display:block;font-size:12px;padding:10px 12px;word-break:break-all}#zbwc-app .zbwc-linkbtn,#zbwc-app .zbwc-loading{align-items:center;display:inline-flex;gap:8px}#zbwc-app .zbwc-linkbtn{background:none;border:none;color:var(--zbwc-accent);cursor:pointer}#zbwc-app .zbwc-loading{color:#757575;padding:30px}#zbwc-app .zbwc-orglist__row{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;justify-content:space-between;padding:8px 0}#zbwc-app .zbwc-subhead{border-bottom:1px solid #f0f0f1;color:#757575;font-size:11px;letter-spacing:.5px;margin:22px 0 10px;padding-bottom:5px}#zbwc-app .zbwc-onboarding{--ob-ink:#1a1a1a;--ob-muted:#656a70;--ob-line:#e3e5e7;--ob-soft:#f7f8f8;margin:0 auto;max-width:1120px;padding-bottom:60px}#zbwc-app .zbwc-onboarding__bar{align-items:center;display:flex;gap:10px;padding:4px 0 20px}#zbwc-app .zbwc-onboarding__logo.dashicons{color:var(--zbwc-accent);font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-onboarding__brand{font-size:16px;font-weight:700;letter-spacing:-.01em}#zbwc-app .zbwc-onboarding__titlerow{align-items:center;display:flex;gap:16px;justify-content:space-between;margin-bottom:16px}#zbwc-app .zbwc-onboarding__title{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0}#zbwc-app .zbwc-onboarding__chip{background:#e9eaeb;border-radius:999px;color:#50575e;font-size:12px;font-weight:500;padding:5px 14px}#zbwc-app .zbwc-onboarding__card{background:#fff;border:1px solid var(--ob-line);border-radius:16px;display:grid;grid-template-columns:minmax(0,1fr) 330px;overflow:hidden}#zbwc-app .zbwc-onboarding__panel{padding:34px 38px 38px}#zbwc-app .zbwc-onboarding__aside{background:var(--ob-soft);border-right:1px solid var(--ob-line);padding:32px 28px}@media(max-width:960px){#zbwc-app .zbwc-onboarding__card{grid-template-columns:1fr}#zbwc-app .zbwc-onboarding__panel{padding:26px 22px 30px}#zbwc-app .zbwc-onboarding__aside{border-right:none;border-top:1px solid var(--ob-line)}}#zbwc-app .zbwc-ob-eyebrow{color:var(--ob-muted);font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-ob-heading{color:var(--ob-ink);font-size:30px;font-weight:700;letter-spacing:-.02em;line-height:1.18;margin:0 0 12px}#zbwc-app .zbwc-ob-lead{color:#4a5056;font-size:14.5px;line-height:1.6;margin:0 0 26px;max-width:46em}#zbwc-app .zbwc-ob-footnote{color:var(--ob-muted);font-size:12.5px;line-height:1.6;margin:18px 0 0}#zbwc-app .zbwc-ob-quiet{margin-top:16px}#zbwc-app .zbwc-ob-icon{align-items:center;background:var(--ob-soft);border:1px solid var(--ob-line);border-radius:11px;color:var(--ob-ink);display:flex;flex:none;height:42px;justify-content:center;width:42px}#zbwc-app .zbwc-ob-icon .dashicons{font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-features{list-style:none;margin:0 0 30px;padding:0}#zbwc-app .zbwc-ob-feature{display:flex;gap:16px;margin-bottom:22px}#zbwc-app .zbwc-ob-feature h3{font-size:15px;font-weight:600;margin:0 0 4px}#zbwc-app .zbwc-ob-feature p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:0}#zbwc-app .zbwc-ob-aside__title{font-size:14px;font-weight:700;margin:0}#zbwc-app .zbwc-ob-progress{list-style:none;margin:18px 0 0;padding:0}#zbwc-app .zbwc-ob-progress__item{display:flex;gap:14px;padding-bottom:22px;position:relative}#zbwc-app .zbwc-ob-progress__item:last-child{padding-bottom:0}#zbwc-app .zbwc-ob-progress__item:before{background:#dcdee0;bottom:6px;content:"";right:15px;position:absolute;top:34px;width:1px}#zbwc-app .zbwc-ob-progress__item:last-child:before{display:none}#zbwc-app .zbwc-ob-progress__num{align-items:center;background:#fff;border:1px solid #d5d7d9;border-radius:50%;color:#8c8f94;display:flex;flex:none;font-size:12px;font-weight:600;height:31px;justify-content:center;position:relative;width:31px}#zbwc-app .zbwc-ob-progress__num .dashicons{font-size:18px;height:18px;width:18px}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__num,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__num{background:var(--ob-ink);border-color:var(--ob-ink);color:#fff}#zbwc-app .zbwc-ob-progress__text{display:flex;flex-direction:column;gap:3px;padding-top:4px}#zbwc-app .zbwc-ob-progress__text strong{color:#8c8f94;font-size:13.5px;font-weight:600}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__text strong,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__text strong{color:var(--ob-ink)}#zbwc-app .zbwc-ob-progress__text span{color:var(--ob-muted);font-size:12.5px;line-height:1.5}#zbwc-app .zbwc-ob-facts{border-top:1px solid var(--ob-line);list-style:none;margin:22px 0 0;padding:18px 0 0}#zbwc-app .zbwc-ob-facts li{color:var(--ob-muted);font-size:12.5px;line-height:1.55;margin:0 0 10px;padding-right:14px;position:relative}#zbwc-app .zbwc-ob-facts li:before{content:"·";right:4px;position:absolute}#zbwc-app .zbwc-ob-count{border-top:1px solid var(--ob-line);font-size:13px;font-weight:600;margin:22px 0 0;padding-top:18px}#zbwc-app .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin-top:14px;padding:14px 15px}#zbwc-app .zbwc-ob-note p{font-size:12.5px;line-height:1.55;margin:0}#zbwc-app .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-ob-note.is-warn{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-ob-note.is-plan{background:#edfaef;color:#0a6b22}#zbwc-app .zbwc-ob-badge{border-radius:999px;flex:none;font-size:12px;font-weight:600;padding:4px 12px;white-space:nowrap}#zbwc-app .zbwc-ob-badge.is-ok{background:#d8f5e3;color:#0a6b2f}#zbwc-app .zbwc-ob-badge.is-blue{background:#e4f0fb;color:#1c5a99}#zbwc-app .zbwc-ob-badge.is-muted{background:#eceded;color:#646970}#zbwc-app .zbwc-ob-option{border:1px solid var(--ob-line);border-radius:12px;padding:20px 22px}#zbwc-app .zbwc-ob-option.is-done{background:var(--ob-soft)}#zbwc-app .zbwc-ob-option__head{align-items:center;display:flex;gap:12px;justify-content:space-between}#zbwc-app .zbwc-ob-option__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-option__desc{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:8px 0 0}#zbwc-app .zbwc-ob-option .zbwc-kv{margin-top:10px}#zbwc-app .zbwc-ob-howto{color:#3c434a;font-size:13.5px;line-height:1.7;margin:18px 0 0;padding-right:18px}#zbwc-app .zbwc-ob-howto li{margin-bottom:10px}#zbwc-app .zbwc-ob-copyrow{align-items:center;display:flex;gap:8px;margin-top:8px}#zbwc-app .zbwc-ob-copyrow .zbwc-code{flex:1;margin:0}#zbwc-app .zbwc-ob-fields{border-top:1px solid var(--ob-line);display:grid;gap:18px;margin-top:20px;padding-top:20px}#zbwc-app .zbwc-ob-fields .components-base-control{margin-bottom:0}#zbwc-app .zbwc-ob-actions{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}#zbwc-app .zbwc-ob-actions .components-button .dashicons{font-size:17px;height:17px;margin-left:6px;width:17px}#zbwc-app .zbwc-ob-divider{background:var(--ob-line);height:1px;margin:26px 0 18px}#zbwc-app .zbwc-ob-disclosure{align-items:center;background:none;border:none;color:var(--zbwc-accent);cursor:pointer;display:inline-flex;font-size:13.5px;font-weight:500;gap:6px;padding:0}#zbwc-app .zbwc-ob-disclosure .dashicons{font-size:16px;height:16px;width:16px}#zbwc-app .zbwc-ob-advanced{background:var(--ob-soft);border-radius:12px;margin-top:16px;padding:18px 20px}#zbwc-app .zbwc-ob-advanced p{color:var(--ob-muted);font-size:13px;line-height:1.6;margin:0 0 14px}#zbwc-app .zbwc-ob-advanced .components-base-control{margin-bottom:14px}#zbwc-app .zbwc-ob-resource{border:1px solid var(--ob-line);border-radius:12px;margin-bottom:14px;transition:border-color .12s ease,box-shadow .12s ease}#zbwc-app .zbwc-ob-resource.is-on{border-color:#c4c7ca;box-shadow:0 1px 2px rgba(0,0,0,.04)}#zbwc-app .zbwc-ob-resource__main{align-items:flex-start;cursor:pointer;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-ob-resource__box{cursor:default;display:flex;padding-top:3px}#zbwc-app .zbwc-ob-resource .components-base-control,#zbwc-app .zbwc-ob-resource .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-ob-resource__body{flex:1}#zbwc-app .zbwc-ob-resource__head{align-items:center;display:flex;flex-wrap:wrap;gap:10px}#zbwc-app .zbwc-ob-resource__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-resource__body p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:5px 0 0}#zbwc-app .zbwc-ob-resource__prefs{cursor:default;display:grid;gap:18px;grid-template-columns:1fr 1fr;margin-top:16px}@media(max-width:782px){#zbwc-app .zbwc-ob-resource__prefs{grid-template-columns:1fr}}#zbwc-app .zbwc-ob-inline-notice.components-notice{border-radius:10px;margin:4px 0 0}#zbwc-app .zbwc-ob-done{background:#fff;border:1px solid var(--ob-line);border-radius:16px;margin:0 auto;max-width:620px;padding:44px 44px 36px;text-align:center}#zbwc-app .zbwc-ob-done__check{align-items:center;background:#e2f5e9;border-radius:50%;display:inline-flex;height:76px;justify-content:center;margin-bottom:20px;width:76px}#zbwc-app .zbwc-ob-done__check .dashicons{align-items:center;background:#2f7a48;border-radius:50%;color:#fff;display:flex;font-size:34px;height:54px;justify-content:center;width:54px}#zbwc-app .zbwc-ob-done h2{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0 0 10px}#zbwc-app .zbwc-ob-done .zbwc-ob-lead{margin:0 auto 26px;max-width:34em}#zbwc-app .zbwc-ob-done .zbwc-ob-note{text-align:right}#zbwc-app .zbwc-ob-summary{border:1px solid var(--ob-line);border-radius:12px;list-style:none;margin:0;overflow:hidden;padding:0;text-align:right}#zbwc-app .zbwc-ob-summary__row{align-items:center;border-bottom:1px solid var(--ob-line);display:flex;gap:12px;padding:15px 18px}#zbwc-app .zbwc-ob-summary__row:last-child{border-bottom:none}#zbwc-app .zbwc-ob-summary__icon{display:flex}#zbwc-app .zbwc-ob-summary__icon .dashicons{color:#2f7a48;font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-summary__icon.is-muted .dashicons{color:#a7aaad}#zbwc-app .zbwc-ob-summary__text{display:flex;flex:1;flex-direction:column;gap:2px}#zbwc-app .zbwc-ob-summary__text strong{font-size:14px}#zbwc-app .zbwc-ob-summary__text span{color:var(--ob-muted);font-size:12.5px}#zbwc-app .zbwc-ob-done__actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:24px}#zbwc-app .zbwc-ob-nav{align-items:center;display:flex;justify-content:space-between;margin-top:22px}#zbwc-app .zbwc-onboarding .components-button.is-primary{background:var(--ob-ink);border-color:var(--ob-ink);border-radius:8px;box-shadow:none;font-size:13.5px;font-weight:600;height:42px;padding:0 20px}#zbwc-app .zbwc-onboarding .components-button.is-primary:focus:not(:disabled),#zbwc-app .zbwc-onboarding .components-button.is-primary:hover:not(:disabled){background:#000;border-color:#000;color:#fff}#zbwc-app .zbwc-onboarding .components-button.is-primary:disabled,#zbwc-app .zbwc-onboarding .components-button.is-primary[aria-disabled=true]{background:#e6e7e8;border-color:#e6e7e8;color:#a7aaad}#zbwc-app .zbwc-onboarding .components-button.is-secondary{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #d5d7d9;color:var(--ob-ink);font-size:13.5px;font-weight:600;height:42px;padding:0 18px}#zbwc-app .zbwc-onboarding .components-button.is-secondary:hover:not(:disabled){background:var(--ob-soft);box-shadow:inset 0 0 0 1px #b9bcbf;color:var(--ob-ink)}#zbwc-app .zbwc-onboarding .components-button.is-tertiary{border-radius:8px;font-weight:600;height:42px;padding:0 14px}#zbwc-app .zbwc-toasts{bottom:20px;right:160px;position:fixed;z-index:100000}@media(max-width:782px){#zbwc-app .zbwc-toasts{right:16px;left:16px;width:auto}}.zbwc-upgrade-modal.components-modal__frame{border-radius:12px;max-width:32rem;position:relative;width:calc(100% - 32px)}.zbwc-upgrade-modal .components-modal__header{border-bottom:none;height:auto;justify-content:center;padding:28px 32px 0}.zbwc-upgrade-modal .components-modal__header-heading-container{justify-content:center}.zbwc-upgrade-modal .components-modal__header-heading{font-size:22px;font-weight:700;line-height:1.3;text-align:center}.zbwc-upgrade-modal .components-modal__header .components-button.has-icon{margin:0;position:absolute;left:12px;top:10px}.zbwc-upgrade-modal .components-modal__content{padding:0 32px 28px}.zbwc-upgrade-modal .components-modal__content:before{content:none}.zbwc-upgrade-modal__body{text-align:center}.zbwc-upgrade-modal__lead{color:#3c434a;font-size:14px;line-height:1.6;margin:12px auto 0;max-width:34rem}.zbwc-upgrade-modal__note{color:#646970;font-size:13px;line-height:1.6;margin:8px auto 0;max-width:34rem}.zbwc-upgrade-modal__offer{align-items:baseline;display:flex;gap:8px;justify-content:center;margin:20px 0 16px}.zbwc-upgrade-modal__plan{font-size:15px;font-weight:600}.zbwc-upgrade-modal__price{font-size:30px;font-weight:700;line-height:1}.zbwc-upgrade-modal__per{color:#646970;font-size:14px;font-weight:400}.zbwc-upgrade-modal__cta.components-button.is-primary{border-radius:8px;display:flex;font-size:15px;font-weight:600;height:48px;justify-content:center;width:100%}.zbwc-upgrade-modal__later.components-button{color:#50575e;display:block;margin:14px auto 0;text-decoration:underline}.zbwc-upgrade-modal__trust{align-items:center;border-top:1px solid #e0e0e0;color:#646970;display:flex;font-size:13px;gap:6px;justify-content:center;margin:22px 0 0;padding-top:18px}.zbwc-upgrade-modal__trust .dashicons{font-size:16px;height:16px;width:16px}.zbwc-org-modal.components-modal__frame{border-radius:14px;max-width:480px;width:calc(100% - 32px)}.zbwc-org-modal .components-modal__header-heading{font-size:17px;font-weight:600}.zbwc-org-modal .components-modal__content{padding:2px 28px 24px}.zbwc-org-modal__lead{color:#646970;font-size:13px;line-height:1.6;margin:0 0 16px}.zbwc-org-modal__loading{align-items:center;color:#646970;display:flex;gap:8px;padding:16px 0 8px}.zbwc-org-modal__loading .components-spinner{margin:0}.zbwc-org-modal__list{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow-y:auto}.zbwc-org-modal__row{align-items:center;background:#fff;border:1px solid #dcdcde;border-radius:10px;color:inherit;cursor:pointer;display:flex;font:inherit;gap:12px;padding:12px 14px;text-align:right;transition:border-color .12s ease,box-shadow .12s ease;width:100%}.zbwc-org-modal__row:hover{border-color:#8c8f94}.zbwc-org-modal__row:focus-visible{outline:2px solid var(--wp-admin-theme-color,#3858e9);outline-offset:1px}.zbwc-org-modal__row.is-selected{border-color:var(--wp-admin-theme-color,#3858e9);box-shadow:0 0 0 1px var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__icon{background:#f0f0f1;border-radius:9px;color:#50575e;display:grid;flex:none;height:36px;place-items:center;width:36px}.zbwc-org-modal__icon .dashicons{font-size:18px;height:18px;width:18px}.zbwc-org-modal__name{display:flex;flex:1;flex-direction:column;gap:1px;min-width:0}.zbwc-org-modal__name strong{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zbwc-org-modal__name span{color:#646970;font-size:12px}.zbwc-org-modal__current{background:#f0f0f1;border-radius:999px;color:#50575e;flex:none;font-size:11.5px;font-weight:600;padding:2px 10px}.zbwc-org-modal__tick{color:transparent;flex:none}.zbwc-org-modal__tick.is-on{color:var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__retry{margin-top:12px}.zbwc-org-modal__switch{display:flex;flex-direction:column;gap:12px;margin-top:16px}.zbwc-org-modal__switch .components-notice{margin:0}.zbwc-org-modal__note{color:#646970;font-size:12.5px;line-height:1.55;margin:0}.zbwc-org-modal__footer{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-connbox{align-items:center;display:flex;flex-wrap:wrap;gap:14px}#zbwc-app .zbwc-connbox__icon{background:#edfaef;border-radius:11px;color:#0a6b2f;display:grid;flex:none;height:44px;place-items:center;width:44px}#zbwc-app .zbwc-connbox__icon .dashicons{font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-connbox.is-warn .zbwc-connbox__icon{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-connbox__body{display:flex;flex:1;flex-direction:column;gap:3px;min-width:220px}#zbwc-app .zbwc-connbox__name{font-size:15px;font-weight:600;line-height:1.2}#zbwc-app .zbwc-connbox__meta{align-items:center;color:#646970;display:flex;flex-wrap:wrap;font-size:12.5px;gap:6px 10px}#zbwc-app .zbwc-connbox__meta code{background:#f0f0f1;border-radius:4px;font-size:11.5px;padding:1px 6px}#zbwc-app .zbwc-connbox__actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}#zbwc-app .zbwc-connbox+.components-notice{margin:12px 0 0}.zbwc-org-modal__list.is-compact{max-height:176px}#zbwc-app .zbwc-copyrow{margin:10px 0 2px}#zbwc-app .zbwc-connfields{display:flex;flex-direction:column;gap:16px;margin-top:18px}#zbwc-app .zbwc-invnotice.components-notice{margin:12px 0 0}#zbwc-app .zbwc-invnotice .components-button.is-link{font-size:inherit}#zbwc-app .zbwc-invnotice__lead{font-weight:600;margin:0 0 8px}#zbwc-app .zbwc-invnotice__steps{margin:0 0 10px;padding-right:20px}#zbwc-app .zbwc-invnotice__steps li{margin:4px 0}#zbwc-app .zbwc-invnotice__actions{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-page .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin:0 0 14px;padding:14px 15px}#zbwc-app .zbwc-page .zbwc-ob-note p{font-size:13px;line-height:1.55;margin:0}#zbwc-app .zbwc-page .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-page .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-quiet.components-button{margin-top:18px}#zbwc-app .zbwc-whpicker{align-items:flex-start;display:flex;gap:10px;max-width:560px}#zbwc-app .zbwc-whpicker .components-base-control{flex:1}#zbwc-app .zbwc-whpicker .components-button{margin-top:23px}#zbwc-app .zbwc-whwarn.components-notice{margin:0 0 14px}.zbwc-guide-modal.components-modal__frame{border-radius:14px;max-width:640px;width:calc(100% - 32px)}.zbwc-guide-modal .components-modal__content{padding:2px 28px 24px}.zbwc-guide-modal__lede{color:#646970;font-size:13.5px;line-height:1.6;margin:0 0 16px}.zbwc-guide-modal__steps{margin:0;padding-right:22px}.zbwc-guide-modal__steps li{margin:0 0 14px}.zbwc-guide-modal__steps strong{font-size:14px}.zbwc-guide-modal__steps p{color:#50575e;font-size:13.5px;line-height:1.55;margin:3px 0 0}.zbwc-guide-modal__uri{background:#f0f2f5;border-radius:8px;display:block;font-size:12px;margin-top:8px;padding:8px 10px;word-break:break-all}.zbwc-guide-modal__h{font-size:14px;margin:20px 0 8px}.zbwc-guide-modal__table{border-collapse:collapse;font-size:13px;width:100%}.zbwc-guide-modal__table td{border-bottom:1px solid #eceef1;padding:5px 0 5px 10px}.zbwc-guide-modal__table code{background:#f0f2f5;border-radius:4px;font-size:12px;padding:1px 6px}.zbwc-guide-modal__fixes{font-size:13.5px;margin:0;padding-right:20px}.zbwc-guide-modal__fixes li{color:#50575e;margin:6px 0}.zbwc-guide-modal__footer{display:flex;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-ob-guidelink.components-button{font-weight:600;margin:-6px 0 20px}#zbwc-app .zbwc-rule{border:0;border-top:1px solid #e0e2e6;margin:20px 0 14px}#zbwc-app .zbwc-subhead{color:#646970;font-size:12px;font-weight:600;letter-spacing:.06em;margin:0 0 10px;text-transform:uppercase}#zbwc-app .zbwc-activity{margin:0 0 16px}#zbwc-app .zbwc-activity__task{align-items:center;background:#fff;border:1px solid #e0e2e6;border-right:3px solid #2271b1;border-radius:8px;display:grid;gap:14px;grid-template-columns:230px minmax(120px,1fr) 3.4em minmax(0,34%);margin-bottom:6px;max-height:80px;overflow:hidden;padding:9px 14px;transition:opacity .6s ease,max-height .6s ease,padding .6s ease,margin .6s ease,border-color .3s ease}#zbwc-app .zbwc-activity__task.is-leaving{border-bottom-width:0;border-top-width:0;margin-bottom:0;max-height:0;opacity:0;padding-bottom:0;padding-top:0}#zbwc-app .zbwc-activity__task.is-done{border-right-color:#00a32a}#zbwc-app .zbwc-activity__task.is-failed{border-right-color:#d63638}#zbwc-app .zbwc-activity__label{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__bar{background:#e6e8eb;border-radius:999px;height:6px;overflow:hidden}#zbwc-app .zbwc-activity__fill{background:#2271b1;border-radius:999px;height:100%;transition:width .4s ease;width:0}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__fill{background:#00a32a}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__fill{background:#d63638}#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:zbwc-activity-slide 1.4s ease-in-out infinite;width:35%}#zbwc-app .zbwc-activity__pct{color:#1e1e1e;font-size:13px;font-variant-numeric:tabular-nums;font-weight:600;text-align:left}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__pct{color:#00a32a}#zbwc-app .zbwc-activity__meta{color:#646970;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__task.is-failed{max-height:160px}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__meta{white-space:normal}@media(max-width:782px){#zbwc-app .zbwc-activity__task{gap:6px 10px;grid-template-areas:"label pct" "bar bar" "meta meta";grid-template-columns:minmax(0,1fr) auto;max-height:160px}#zbwc-app .zbwc-activity__label{grid-area:label;white-space:normal}#zbwc-app .zbwc-activity__pct{grid-area:pct}#zbwc-app .zbwc-activity__bar{grid-area:bar}#zbwc-app .zbwc-activity__meta{grid-area:meta;white-space:normal}#zbwc-app .zbwc-activity__label{-ms-grid-column:1;-ms-grid-row:1}#zbwc-app .zbwc-activity__pct{-ms-grid-column:3;-ms-grid-row:1}#zbwc-app .zbwc-activity__bar{-ms-grid-column:1;-ms-grid-row:3;-ms-grid-column-span:3}#zbwc-app .zbwc-activity__meta{-ms-grid-column:1;-ms-grid-row:5;-ms-grid-column-span:3}#zbwc-app .zbwc-failtable,#zbwc-app .zbwc-failtable tbody,#zbwc-app .zbwc-logtable,#zbwc-app .zbwc-logtable tbody{display:block}#zbwc-app .zbwc-failtable thead,#zbwc-app .zbwc-logtable thead{display:none}#zbwc-app .zbwc-failtable tr,#zbwc-app .zbwc-logtable tr{align-items:center;display:flex;flex-wrap:wrap;gap:6px 10px;padding:10px 12px}#zbwc-app .zbwc-failtable td,#zbwc-app .zbwc-logtable td{display:block;padding:0}#zbwc-app .zbwc-failtable .zbwc-errcell,#zbwc-app .zbwc-failtable .zbwc-maptable__actions,#zbwc-app .zbwc-logtable__msg{flex-basis:100%;max-width:none}#zbwc-app .zbwc-logtable__res{color:#646970;flex-basis:100%}#zbwc-app .zbwc-logtable__res:empty{display:none}#zbwc-app .zbwc-failtable code{overflow-wrap:anywhere}#zbwc-app .zbwc-failtable__attempts:before{color:#646970;content:attr(data-label) ": "}}@keyframes zbwc-activity-slide{0%{margin-right:-35%}to{margin-right:100%}}@media(prefers-reduced-motion:reduce){#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:none;opacity:.55;width:100%}#zbwc-app .zbwc-activity__fill,#zbwc-app .zbwc-activity__task{transition:none}}
     1#zbwc-app{--zbwc-accent:#2271b1;--zbwc-border:#dcdcde;--zbwc-bg:#f6f7f7;--zbwc-ok:#00a32a;--zbwc-warn:#dba617;--zbwc-error:#d63638;--zbwc-plan-soft:#f0f6fc;--zbwc-plan-line:#c5d9ed;--zbwc-plan-tint:#dfebf7;--zbwc-bar-soft:#fdf8e3;--zbwc-bar-line:#e6d18d;--zbwc-bar-tint:#f7e8b4;--zbwc-bar-ink:#7a5d0a;color:#1e1e1e;margin:20px 0 0 20px}#zbwc-app .zbwc-boot{color:#757575;padding:40px}#zbwc-app .zbwc-nav{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:20px;padding:10px 16px}#zbwc-app .zbwc-nav__brand{align-items:center;display:flex;font-size:15px;font-weight:600;gap:8px}#zbwc-app .zbwc-nav__logo{color:var(--zbwc-accent)}#zbwc-app .zbwc-nav__sub{color:#757575;font-weight:400}#zbwc-app .zbwc-nav__tabs{display:flex;flex:1;flex-wrap:wrap;gap:4px}#zbwc-app .zbwc-nav__tab{background:transparent;border:none;border-radius:6px;color:#50575e;cursor:pointer;font-size:13px;padding:8px 14px}#zbwc-app .zbwc-nav__tab:hover{background:var(--zbwc-bg)}#zbwc-app .zbwc-nav__tab.is-active{background:var(--zbwc-accent);color:#fff}#zbwc-app .zbwc-layout.has-aside{align-items:start;display:grid;gap:24px;grid-template-columns:minmax(0,1fr) 300px}#zbwc-app .zbwc-aside{position:sticky;top:42px}#zbwc-app .zbwc-aside .zbwc-plancard{max-width:none}@media(max-width:1200px){#zbwc-app .zbwc-layout.has-aside{display:block}#zbwc-app .zbwc-aside{display:none}}#zbwc-app .zbwc-page{display:flex;flex-direction:column;gap:20px;padding-bottom:80px}#zbwc-app .zbwc-grid{display:grid;gap:16px}#zbwc-app .zbwc-grid--2{grid-template-columns:1fr 1fr}#zbwc-app .zbwc-grid--stats{grid-template-columns:repeat(4,1fr)}@media(max-width:960px){#zbwc-app .zbwc-grid--2,#zbwc-app .zbwc-grid--stats{grid-template-columns:1fr 1fr}}@media(max-width:782px){#zbwc-app .zbwc-grid--2{grid-template-columns:minmax(0,1fr)}}#zbwc-app .zbwc-section{border-radius:8px}#zbwc-app .zbwc-section__header{align-items:flex-start}#zbwc-app .zbwc-section__title{font-size:14px;margin:0}#zbwc-app .zbwc-section__desc{color:#757575;font-size:12px;margin:2px 0 0}@media(max-width:782px){#zbwc-app .zbwc-section__header{flex-wrap:wrap;row-gap:8px}#zbwc-app .zbwc-section__heading{flex:1 1 200px;min-width:0}}#zbwc-app .zbwc-section .components-base-control{margin-bottom:16px}#zbwc-app .zbwc-stat{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;padding:16px;text-align:center}#zbwc-app .zbwc-stat__value{color:var(--zbwc-accent);font-size:28px;font-weight:700}#zbwc-app .zbwc-stat__label{color:#757575;font-size:12px;margin-top:4px}#zbwc-app .zbwc-stat__hint{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-kv{border-collapse:collapse;width:100%}#zbwc-app .zbwc-kv th{color:#50575e;font-weight:500;padding:6px 0;text-align:right;width:45%}#zbwc-app .zbwc-kv td{padding:6px 0}#zbwc-app .zbwc-pill{border-radius:999px;display:inline-block;font-size:11px;font-weight:600;line-height:1.8;padding:2px 10px}#zbwc-app .zbwc-pill.is-ok{background:#edfaef;color:var(--zbwc-ok)}#zbwc-app .zbwc-pill.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-pill.is-error{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-pill.is-info{background:#f0f6fc;color:var(--zbwc-accent)}#zbwc-app .zbwc-activity{margin:0}#zbwc-app .zbwc-activity__item{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;font-size:13px;gap:10px;padding:8px 0}#zbwc-app .zbwc-activity__cat{color:#757575;font-size:10px;min-width:70px;text-transform:uppercase}#zbwc-app .zbwc-activity__msg{flex:1}#zbwc-app .zbwc-activity__time{color:#a7aaad;font-size:11px}#zbwc-app .zbwc-dot{background:var(--zbwc-accent);border-radius:50%;height:8px;width:8px}#zbwc-app .zbwc-dot.is-error{background:var(--zbwc-error)}#zbwc-app .zbwc-dot.is-warn{background:var(--zbwc-warn)}#zbwc-app .zbwc-maptable{margin-top:8px}#zbwc-app .zbwc-maptable__toolbar{margin-bottom:10px}#zbwc-app .zbwc-maptable__actions{display:flex;gap:6px}#zbwc-app .zbwc-maptable__scope{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-maptable__add{margin-top:12px;max-width:360px}@media(max-width:782px){#zbwc-app .zbwc-maptable{overflow-x:auto}#zbwc-app table.zbwc-maptable{display:block}#zbwc-app .zbwc-maptable__toolbar .components-button{height:auto;min-height:36px;text-align:right;white-space:normal}}#zbwc-app .zbwc-logtable td{font-size:12px;vertical-align:top}#zbwc-app .zbwc-nowrap{white-space:nowrap}#zbwc-app .zbwc-errcell{color:var(--zbwc-error);font-size:12px;max-width:420px}#zbwc-app .zbwc-filters{align-items:flex-end;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:12px}#zbwc-app .zbwc-filters .components-base-control{margin-bottom:0;min-width:160px}#zbwc-app .zbwc-pager{align-items:center;color:#50575e;display:flex;font-size:12px;gap:12px;justify-content:flex-end;margin-top:12px}#zbwc-app .zbwc-muted{color:#646970;font-size:13px}#zbwc-app .zbwc-actions{margin-top:12px}#zbwc-app .zbwc-upgrade-banner{border-radius:8px;margin:0 0 20px}#zbwc-app .zbwc-upgrade-banner .components-notice__content{margin:0;width:100%}#zbwc-app .zbwc-plans{align-items:start;display:grid;gap:24px;grid-template-columns:1fr 1fr;margin-top:8px}@media(max-width:900px){#zbwc-app .zbwc-plans{grid-template-columns:1fr}}#zbwc-app .zbwc-plans__card{background:#fff;border:1px solid var(--zbwc-border);border-radius:12px;padding:24px;position:relative}#zbwc-app .zbwc-plans__card.is-featured{border:2px solid var(--zbwc-accent);padding-top:30px}#zbwc-app .zbwc-plans__ribbon{background:var(--zbwc-accent);border-radius:999px;color:#fff;font-size:11px;font-weight:700;right:50%;letter-spacing:.5px;padding:4px 16px;position:absolute;top:0;transform:translate(50%,-50%);white-space:nowrap}#zbwc-app .zbwc-plans__head{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-plans__head h3{font-size:20px;margin:0}#zbwc-app .zbwc-plans__current{background:#edfaef;border-radius:999px;color:#00611c;font-size:12px;font-weight:600;padding:4px 14px}#zbwc-app .zbwc-plans__price{margin:14px 0 18px}#zbwc-app .zbwc-plans__price strong{font-size:34px;font-weight:700;line-height:1}#zbwc-app .zbwc-plans__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plans__list li{align-items:flex-start;color:#1e1e1e;display:flex;font-size:14px;gap:10px;margin-bottom:10px}#zbwc-app .zbwc-plans__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plans__list li.is-no{color:#646970}#zbwc-app .zbwc-plans__list li.is-no .dashicons{color:#a7aaad}#zbwc-app .zbwc-plans__note{background:var(--zbwc-bg);border-radius:8px;color:#50575e;font-size:13px;margin:0;padding:14px 16px}#zbwc-app .zbwc-plans__cta.components-button.is-primary,#zbwc-app .zbwc-plans__cta.components-button.is-secondary{font-size:14px;font-weight:600;height:44px;justify-content:center;width:100%}#zbwc-app .zbwc-plans__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plans__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-planbar{align-items:center;background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-right:4px solid var(--zbwc-warn);border-radius:10px;display:flex;flex-wrap:wrap;gap:14px;margin:0 0 20px;padding:12px 16px}#zbwc-app .zbwc-planbar.is-urgent{border-color:var(--zbwc-warn);border-right-width:4px}#zbwc-app .zbwc-planbar__icon{align-items:center;background:var(--zbwc-bar-tint);border-radius:50%;color:var(--zbwc-bar-ink);display:flex;flex:none;height:32px;justify-content:center;width:32px}#zbwc-app .zbwc-planbar__text{align-items:baseline;display:flex;flex:1;flex-wrap:wrap;gap:10px;min-width:240px}#zbwc-app .zbwc-planbar__text strong{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-planbar__text span{color:#50575e;font-size:13px}#zbwc-app .zbwc-planbar__actions{align-items:center;display:flex;gap:8px;margin-right:auto}#zbwc-app .zbwc-plancard{background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-radius:10px;border-top:3px solid var(--zbwc-warn);max-width:420px;padding:20px 22px 18px}#zbwc-app .zbwc-plancard__chip{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);display:inline-block;font-size:11px;font-weight:700;letter-spacing:.4px;padding:3px 12px}#zbwc-app .zbwc-plancard__title{font-size:17px;margin:12px 0 6px}#zbwc-app .zbwc-plancard__desc{color:#50575e;font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-plancard__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plancard__list li{align-items:flex-start;color:#3c434a;display:flex;font-size:13px;gap:8px;margin-bottom:7px}#zbwc-app .zbwc-plancard__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plancard__cta.components-button.is-primary{font-weight:600;height:40px;justify-content:center;width:100%}#zbwc-app .zbwc-plancard__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plancard__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-quotachip{background:#edfaef;border-radius:999px;color:#0a6b22;display:inline-block;font-size:12px;font-weight:600;padding:3px 12px;white-space:nowrap}#zbwc-app .zbwc-quotachip.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-quotachip.is-full{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-quotanote{margin:0 0 16px}#zbwc-app .zbwc-pagehead{align-items:center;display:flex;gap:16px;justify-content:space-between}#zbwc-app .zbwc-pagehead__title{font-size:20px;font-weight:700;letter-spacing:-.01em;margin:0}#zbwc-app .zbwc-statbar{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:grid;grid-template-columns:repeat(5,1fr);overflow:hidden}#zbwc-app .zbwc-statbar__cell{align-items:flex-start;border-left:1px solid var(--zbwc-border);display:flex;flex-direction:column;gap:6px;padding:16px 18px}#zbwc-app .zbwc-statbar__cell:last-child{border-left:none}#zbwc-app .zbwc-statbar__label{color:#757575;font-size:11px;letter-spacing:.06em;text-transform:uppercase}#zbwc-app .zbwc-statbar__value{font-size:26px;font-variant-numeric:tabular-nums;font-weight:700;line-height:1}#zbwc-app .zbwc-statbar__value--sm{font-size:17px}#zbwc-app .zbwc-statbar__value.is-bad{color:var(--zbwc-error)}#zbwc-app .zbwc-statbar__sub{color:#757575;font-size:12px}@media(max-width:1100px){#zbwc-app .zbwc-statbar{grid-template-columns:repeat(3,1fr)}#zbwc-app .zbwc-statbar__cell:nth-child(3){border-left:none}}@media(max-width:600px){#zbwc-app .zbwc-statbar{grid-template-columns:1fr 1fr}}#zbwc-app .zbwc-masterbar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-right:4px solid var(--zbwc-ok);border-radius:8px;display:flex;gap:20px;padding:16px 18px}#zbwc-app .zbwc-masterbar.is-off{background:var(--zbwc-bg);border-right-color:var(--zbwc-warn)}#zbwc-app .zbwc-masterbar__text{display:flex;flex:1;flex-direction:column;gap:4px}#zbwc-app .zbwc-masterbar__title{align-items:center;display:flex;font-size:15px;font-weight:600;gap:10px}#zbwc-app .zbwc-masterbar__desc{color:#646970;font-size:13px}#zbwc-app .zbwc-flow{display:flex;flex-direction:column}#zbwc-app .zbwc-flow__row{border-bottom:1px solid #f0f0f1;padding:14px 0}#zbwc-app .zbwc-flow__row:last-child{border-bottom:none}#zbwc-app .zbwc-flow__row:first-child{padding-top:4px}#zbwc-app .zbwc-flow__row.is-disabled{opacity:.65}#zbwc-app .zbwc-flow__main{align-items:center;display:flex;gap:14px}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{align-items:center;display:flex;gap:10px;min-width:0}#zbwc-app .zbwc-flow__event{flex:0 0 46%}#zbwc-app .zbwc-flow__doc{flex:1}#zbwc-app .zbwc-flow__label{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-flow__arrow{color:#a7aaad;flex:none}#zbwc-app .zbwc-flow__badge{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);flex:none;font-size:11px;font-weight:700;letter-spacing:.4px;padding:2px 9px}#zbwc-app .zbwc-flow__switch{flex:none;margin-right:auto}#zbwc-app .zbwc-flow .components-base-control,#zbwc-app .zbwc-flow .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-flow__hint{color:#757575;font-size:12px;margin:6px 0 0;padding-right:2px}@media(max-width:782px){#zbwc-app .zbwc-flow__main{flex-wrap:wrap}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{flex:1 1 100%}#zbwc-app .zbwc-flow__arrow{display:none}}#zbwc-app .zbwc-note{align-items:flex-start;background:#fff;border:1px solid var(--zbwc-border);border-radius:10px;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-note p{color:#3c434a;font-size:14px;line-height:1.55;margin:0}#zbwc-app .zbwc-note .dashicons{align-items:center;border-radius:9px;display:flex;flex:none;font-size:19px;height:34px;justify-content:center;width:34px}#zbwc-app .zbwc-note.is-info .dashicons{background:var(--zbwc-plan-tint);color:var(--zbwc-accent)}#zbwc-app .zbwc-note.is-warn .dashicons{background:var(--zbwc-bar-tint);color:var(--zbwc-bar-ink)}#zbwc-app .zbwc-subnav{display:grid;gap:4px;grid-auto-columns:1fr;grid-auto-flow:column}#zbwc-app .zbwc-subnav__tab{background:transparent;border:none;border-radius:8px;color:#50575e;cursor:pointer;font-size:14px;font-weight:500;padding:10px 16px;text-align:center;transition:background-color .12s ease}#zbwc-app .zbwc-subnav__tab:hover{background:rgba(0,0,0,.03)}#zbwc-app .zbwc-subnav__tab.is-active{background:#e4e5e7;color:#1e1e1e;font-weight:600}#zbwc-app .zbwc-subnav__tab:focus-visible{outline:2px solid var(--zbwc-accent);outline-offset:2px}@media(max-width:782px){#zbwc-app .zbwc-subnav{grid-auto-columns:auto;grid-auto-flow:row}}#zbwc-app .zbwc-savebar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;bottom:0;box-shadow:0 -2px 10px rgba(0,0,0,.06);display:flex;justify-content:space-between;margin-top:8px;padding:12px 16px;position:sticky}#zbwc-app .zbwc-savebar__msg{font-weight:500}#zbwc-app .zbwc-savebar__actions{display:flex;gap:8px}#zbwc-app .zbwc-code{background:#1e1e1e;border-radius:6px;color:#7fd;display:block;font-size:12px;padding:10px 12px;word-break:break-all}#zbwc-app .zbwc-linkbtn,#zbwc-app .zbwc-loading{align-items:center;display:inline-flex;gap:8px}#zbwc-app .zbwc-linkbtn{background:none;border:none;color:var(--zbwc-accent);cursor:pointer}#zbwc-app .zbwc-loading{color:#757575;padding:30px}#zbwc-app .zbwc-orglist__row{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;justify-content:space-between;padding:8px 0}#zbwc-app .zbwc-subhead{border-bottom:1px solid #f0f0f1;color:#757575;font-size:11px;letter-spacing:.5px;margin:22px 0 10px;padding-bottom:5px}#zbwc-app .zbwc-onboarding{--ob-ink:#1a1a1a;--ob-muted:#656a70;--ob-line:#e3e5e7;--ob-soft:#f7f8f8;margin:0 auto;max-width:1120px;padding-bottom:60px}#zbwc-app .zbwc-onboarding__bar{align-items:center;display:flex;gap:10px;padding:4px 0 20px}#zbwc-app .zbwc-onboarding__logo.dashicons{color:var(--zbwc-accent);font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-onboarding__brand{font-size:16px;font-weight:700;letter-spacing:-.01em}#zbwc-app .zbwc-onboarding__titlerow{align-items:center;display:flex;gap:16px;justify-content:space-between;margin-bottom:16px}#zbwc-app .zbwc-onboarding__title{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0}#zbwc-app .zbwc-onboarding__chip{background:#e9eaeb;border-radius:999px;color:#50575e;font-size:12px;font-weight:500;padding:5px 14px}#zbwc-app .zbwc-onboarding__card{background:#fff;border:1px solid var(--ob-line);border-radius:16px;display:grid;grid-template-columns:minmax(0,1fr) 330px;overflow:hidden}#zbwc-app .zbwc-onboarding__panel{padding:34px 38px 38px}#zbwc-app .zbwc-onboarding__aside{background:var(--ob-soft);border-right:1px solid var(--ob-line);padding:32px 28px}@media(max-width:960px){#zbwc-app .zbwc-onboarding__card{grid-template-columns:1fr}#zbwc-app .zbwc-onboarding__panel{padding:26px 22px 30px}#zbwc-app .zbwc-onboarding__aside{border-right:none;border-top:1px solid var(--ob-line)}}#zbwc-app .zbwc-ob-eyebrow{color:var(--ob-muted);font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-ob-heading{color:var(--ob-ink);font-size:30px;font-weight:700;letter-spacing:-.02em;line-height:1.18;margin:0 0 12px}#zbwc-app .zbwc-ob-lead{color:#4a5056;font-size:14.5px;line-height:1.6;margin:0 0 26px;max-width:46em}#zbwc-app .zbwc-ob-footnote{color:var(--ob-muted);font-size:12.5px;line-height:1.6;margin:18px 0 0}#zbwc-app .zbwc-ob-quiet{margin-top:16px}#zbwc-app .zbwc-ob-icon{align-items:center;background:var(--ob-soft);border:1px solid var(--ob-line);border-radius:11px;color:var(--ob-ink);display:flex;flex:none;height:42px;justify-content:center;width:42px}#zbwc-app .zbwc-ob-icon .dashicons{font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-features{list-style:none;margin:0 0 30px;padding:0}#zbwc-app .zbwc-ob-feature{display:flex;gap:16px;margin-bottom:22px}#zbwc-app .zbwc-ob-feature h3{font-size:15px;font-weight:600;margin:0 0 4px}#zbwc-app .zbwc-ob-feature p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:0}#zbwc-app .zbwc-ob-aside__title{font-size:14px;font-weight:700;margin:0}#zbwc-app .zbwc-ob-progress{list-style:none;margin:18px 0 0;padding:0}#zbwc-app .zbwc-ob-progress__item{display:flex;gap:14px;padding-bottom:22px;position:relative}#zbwc-app .zbwc-ob-progress__item:last-child{padding-bottom:0}#zbwc-app .zbwc-ob-progress__item:before{background:#dcdee0;bottom:6px;content:"";right:15px;position:absolute;top:34px;width:1px}#zbwc-app .zbwc-ob-progress__item:last-child:before{display:none}#zbwc-app .zbwc-ob-progress__num{align-items:center;background:#fff;border:1px solid #d5d7d9;border-radius:50%;color:#8c8f94;display:flex;flex:none;font-size:12px;font-weight:600;height:31px;justify-content:center;position:relative;width:31px}#zbwc-app .zbwc-ob-progress__num .dashicons{font-size:18px;height:18px;width:18px}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__num,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__num{background:var(--ob-ink);border-color:var(--ob-ink);color:#fff}#zbwc-app .zbwc-ob-progress__text{display:flex;flex-direction:column;gap:3px;padding-top:4px}#zbwc-app .zbwc-ob-progress__text strong{color:#8c8f94;font-size:13.5px;font-weight:600}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__text strong,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__text strong{color:var(--ob-ink)}#zbwc-app .zbwc-ob-progress__text span{color:var(--ob-muted);font-size:12.5px;line-height:1.5}#zbwc-app .zbwc-ob-facts{border-top:1px solid var(--ob-line);list-style:none;margin:22px 0 0;padding:18px 0 0}#zbwc-app .zbwc-ob-facts li{color:var(--ob-muted);font-size:12.5px;line-height:1.55;margin:0 0 10px;padding-right:14px;position:relative}#zbwc-app .zbwc-ob-facts li:before{content:"·";right:4px;position:absolute}#zbwc-app .zbwc-ob-count{border-top:1px solid var(--ob-line);font-size:13px;font-weight:600;margin:22px 0 0;padding-top:18px}#zbwc-app .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin-top:14px;padding:14px 15px}#zbwc-app .zbwc-ob-note p{font-size:12.5px;line-height:1.55;margin:0}#zbwc-app .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-ob-note.is-warn{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-ob-note.is-plan{background:#edfaef;color:#0a6b22}#zbwc-app .zbwc-ob-badge{border-radius:999px;flex:none;font-size:12px;font-weight:600;padding:4px 12px;white-space:nowrap}#zbwc-app .zbwc-ob-badge.is-ok{background:#d8f5e3;color:#0a6b2f}#zbwc-app .zbwc-ob-badge.is-blue{background:#e4f0fb;color:#1c5a99}#zbwc-app .zbwc-ob-badge.is-muted{background:#eceded;color:#646970}#zbwc-app .zbwc-ob-option{border:1px solid var(--ob-line);border-radius:12px;padding:20px 22px}#zbwc-app .zbwc-ob-option.is-done{background:var(--ob-soft)}#zbwc-app .zbwc-ob-option__head{align-items:center;display:flex;gap:12px;justify-content:space-between}#zbwc-app .zbwc-ob-option__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-option__desc{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:8px 0 0}#zbwc-app .zbwc-ob-option .zbwc-kv{margin-top:10px}#zbwc-app .zbwc-ob-howto{color:#3c434a;font-size:13.5px;line-height:1.7;margin:18px 0 0;padding-right:18px}#zbwc-app .zbwc-ob-howto li{margin-bottom:10px}#zbwc-app .zbwc-ob-copyrow{align-items:center;display:flex;gap:8px;margin-top:8px}#zbwc-app .zbwc-ob-copyrow .zbwc-code{flex:1;margin:0}#zbwc-app .zbwc-ob-fields{border-top:1px solid var(--ob-line);display:grid;gap:18px;margin-top:20px;padding-top:20px}#zbwc-app .zbwc-ob-fields .components-base-control{margin-bottom:0}#zbwc-app .zbwc-ob-actions{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}#zbwc-app .zbwc-ob-actions .components-button .dashicons{font-size:17px;height:17px;margin-left:6px;width:17px}#zbwc-app .zbwc-ob-divider{background:var(--ob-line);height:1px;margin:26px 0 18px}#zbwc-app .zbwc-ob-disclosure{align-items:center;background:none;border:none;color:var(--zbwc-accent);cursor:pointer;display:inline-flex;font-size:13.5px;font-weight:500;gap:6px;padding:0}#zbwc-app .zbwc-ob-disclosure .dashicons{font-size:16px;height:16px;width:16px}#zbwc-app .zbwc-ob-advanced{background:var(--ob-soft);border-radius:12px;margin-top:16px;padding:18px 20px}#zbwc-app .zbwc-ob-advanced p{color:var(--ob-muted);font-size:13px;line-height:1.6;margin:0 0 14px}#zbwc-app .zbwc-ob-advanced .components-base-control{margin-bottom:14px}#zbwc-app .zbwc-ob-resource{border:1px solid var(--ob-line);border-radius:12px;margin-bottom:14px;transition:border-color .12s ease,box-shadow .12s ease}#zbwc-app .zbwc-ob-resource.is-on{border-color:#c4c7ca;box-shadow:0 1px 2px rgba(0,0,0,.04)}#zbwc-app .zbwc-ob-resource__main{align-items:flex-start;cursor:pointer;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-ob-resource__box{cursor:default;display:flex;padding-top:3px}#zbwc-app .zbwc-ob-resource .components-base-control,#zbwc-app .zbwc-ob-resource .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-ob-resource__body{flex:1}#zbwc-app .zbwc-ob-resource__head{align-items:center;display:flex;flex-wrap:wrap;gap:10px}#zbwc-app .zbwc-ob-resource__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-resource__body p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:5px 0 0}#zbwc-app .zbwc-ob-resource__prefs{cursor:default;display:grid;gap:18px;grid-template-columns:1fr 1fr;margin-top:16px}@media(max-width:782px){#zbwc-app .zbwc-ob-resource__prefs{grid-template-columns:1fr}}#zbwc-app .zbwc-ob-inline-notice.components-notice{border-radius:10px;margin:4px 0 0}#zbwc-app .zbwc-ob-done{background:#fff;border:1px solid var(--ob-line);border-radius:16px;margin:0 auto;max-width:620px;padding:44px 44px 36px;text-align:center}#zbwc-app .zbwc-ob-done__check{align-items:center;background:#e2f5e9;border-radius:50%;display:inline-flex;height:76px;justify-content:center;margin-bottom:20px;width:76px}#zbwc-app .zbwc-ob-done__check .dashicons{align-items:center;background:#2f7a48;border-radius:50%;color:#fff;display:flex;font-size:34px;height:54px;justify-content:center;width:54px}#zbwc-app .zbwc-ob-done h2{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0 0 10px}#zbwc-app .zbwc-ob-done .zbwc-ob-lead{margin:0 auto 26px;max-width:34em}#zbwc-app .zbwc-ob-done .zbwc-ob-note{text-align:right}#zbwc-app .zbwc-ob-summary{border:1px solid var(--ob-line);border-radius:12px;list-style:none;margin:0;overflow:hidden;padding:0;text-align:right}#zbwc-app .zbwc-ob-summary__row{align-items:center;border-bottom:1px solid var(--ob-line);display:flex;gap:12px;padding:15px 18px}#zbwc-app .zbwc-ob-summary__row:last-child{border-bottom:none}#zbwc-app .zbwc-ob-summary__icon{display:flex}#zbwc-app .zbwc-ob-summary__icon .dashicons{color:#2f7a48;font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-summary__icon.is-muted .dashicons{color:#a7aaad}#zbwc-app .zbwc-ob-summary__text{display:flex;flex:1;flex-direction:column;gap:2px}#zbwc-app .zbwc-ob-summary__text strong{font-size:14px}#zbwc-app .zbwc-ob-summary__text span{color:var(--ob-muted);font-size:12.5px}#zbwc-app .zbwc-ob-done__actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:24px}#zbwc-app .zbwc-ob-nav{align-items:center;display:flex;justify-content:space-between;margin-top:22px}#zbwc-app .zbwc-onboarding .components-button.is-primary{background:var(--ob-ink);border-color:var(--ob-ink);border-radius:8px;box-shadow:none;font-size:13.5px;font-weight:600;height:42px;padding:0 20px}#zbwc-app .zbwc-onboarding .components-button.is-primary:focus:not(:disabled),#zbwc-app .zbwc-onboarding .components-button.is-primary:hover:not(:disabled){background:#000;border-color:#000;color:#fff}#zbwc-app .zbwc-onboarding .components-button.is-primary:disabled,#zbwc-app .zbwc-onboarding .components-button.is-primary[aria-disabled=true]{background:#e6e7e8;border-color:#e6e7e8;color:#a7aaad}#zbwc-app .zbwc-onboarding .components-button.is-secondary{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #d5d7d9;color:var(--ob-ink);font-size:13.5px;font-weight:600;height:42px;padding:0 18px}#zbwc-app .zbwc-onboarding .components-button.is-secondary:hover:not(:disabled){background:var(--ob-soft);box-shadow:inset 0 0 0 1px #b9bcbf;color:var(--ob-ink)}#zbwc-app .zbwc-onboarding .components-button.is-tertiary{border-radius:8px;font-weight:600;height:42px;padding:0 14px}#zbwc-app .zbwc-toasts{bottom:20px;right:160px;position:fixed;z-index:100000}@media(max-width:782px){#zbwc-app .zbwc-toasts{right:16px;left:16px;width:auto}}.zbwc-upgrade-modal.components-modal__frame{border-radius:12px;max-width:32rem;position:relative;width:calc(100% - 32px)}.zbwc-upgrade-modal .components-modal__header{border-bottom:none;height:auto;justify-content:center;padding:28px 32px 0}.zbwc-upgrade-modal .components-modal__header-heading-container{justify-content:center}.zbwc-upgrade-modal .components-modal__header-heading{font-size:22px;font-weight:700;line-height:1.3;text-align:center}.zbwc-upgrade-modal .components-modal__header .components-button.has-icon{margin:0;position:absolute;left:12px;top:10px}.zbwc-upgrade-modal .components-modal__content{padding:0 32px 28px}.zbwc-upgrade-modal .components-modal__content:before{content:none}.zbwc-upgrade-modal__body{text-align:center}.zbwc-upgrade-modal__lead{color:#3c434a;font-size:14px;line-height:1.6;margin:12px auto 0;max-width:34rem}.zbwc-upgrade-modal__note{color:#646970;font-size:13px;line-height:1.6;margin:8px auto 0;max-width:34rem}.zbwc-upgrade-modal__offer{align-items:baseline;display:flex;gap:8px;justify-content:center;margin:20px 0 16px}.zbwc-upgrade-modal__plan{font-size:15px;font-weight:600}.zbwc-upgrade-modal__price{font-size:30px;font-weight:700;line-height:1}.zbwc-upgrade-modal__per{color:#646970;font-size:14px;font-weight:400}.zbwc-upgrade-modal__cta.components-button.is-primary{border-radius:8px;display:flex;font-size:15px;font-weight:600;height:48px;justify-content:center;width:100%}.zbwc-upgrade-modal__later.components-button{color:#50575e;display:block;margin:14px auto 0;text-decoration:underline}.zbwc-upgrade-modal__trust{align-items:center;border-top:1px solid #e0e0e0;color:#646970;display:flex;font-size:13px;gap:6px;justify-content:center;margin:22px 0 0;padding-top:18px}.zbwc-upgrade-modal__trust .dashicons{font-size:16px;height:16px;width:16px}.zbwc-org-modal.components-modal__frame{border-radius:14px;max-width:480px;width:calc(100% - 32px)}.zbwc-org-modal .components-modal__header-heading{font-size:17px;font-weight:600}.zbwc-org-modal .components-modal__content{padding:2px 28px 24px}.zbwc-org-modal__lead{color:#646970;font-size:13px;line-height:1.6;margin:0 0 16px}.zbwc-org-modal__loading{align-items:center;color:#646970;display:flex;gap:8px;padding:16px 0 8px}.zbwc-org-modal__loading .components-spinner{margin:0}.zbwc-org-modal__list{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow-y:auto}.zbwc-org-modal__row{align-items:center;background:#fff;border:1px solid #dcdcde;border-radius:10px;color:inherit;cursor:pointer;display:flex;font:inherit;gap:12px;padding:12px 14px;text-align:right;transition:border-color .12s ease,box-shadow .12s ease;width:100%}.zbwc-org-modal__row:hover{border-color:#8c8f94}.zbwc-org-modal__row:focus-visible{outline:2px solid var(--wp-admin-theme-color,#3858e9);outline-offset:1px}.zbwc-org-modal__row.is-selected{border-color:var(--wp-admin-theme-color,#3858e9);box-shadow:0 0 0 1px var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__icon{background:#f0f0f1;border-radius:9px;color:#50575e;display:grid;flex:none;height:36px;place-items:center;width:36px}.zbwc-org-modal__icon .dashicons{font-size:18px;height:18px;width:18px}.zbwc-org-modal__name{display:flex;flex:1;flex-direction:column;gap:1px;min-width:0}.zbwc-org-modal__name strong{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zbwc-org-modal__name span{color:#646970;font-size:12px}.zbwc-org-modal__current{background:#f0f0f1;border-radius:999px;color:#50575e;flex:none;font-size:11.5px;font-weight:600;padding:2px 10px}.zbwc-org-modal__tick{color:transparent;flex:none}.zbwc-org-modal__tick.is-on{color:var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__retry{margin-top:12px}.zbwc-org-modal__switch{display:flex;flex-direction:column;gap:12px;margin-top:16px}.zbwc-org-modal__switch .components-notice{margin:0}.zbwc-org-modal__note{color:#646970;font-size:12.5px;line-height:1.55;margin:0}.zbwc-org-modal__footer{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-connbox{align-items:center;display:flex;flex-wrap:wrap;gap:14px}#zbwc-app .zbwc-connbox__icon{background:#edfaef;border-radius:11px;color:#0a6b2f;display:grid;flex:none;height:44px;place-items:center;width:44px}#zbwc-app .zbwc-connbox__icon .dashicons{font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-connbox.is-warn .zbwc-connbox__icon{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-connbox__body{display:flex;flex:1;flex-direction:column;gap:3px;min-width:220px}#zbwc-app .zbwc-connbox__name{font-size:15px;font-weight:600;line-height:1.2}#zbwc-app .zbwc-connbox__meta{align-items:center;color:#646970;display:flex;flex-wrap:wrap;font-size:12.5px;gap:6px 10px}#zbwc-app .zbwc-connbox__meta code{background:#f0f0f1;border-radius:4px;font-size:11.5px;padding:1px 6px}#zbwc-app .zbwc-connbox__actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}#zbwc-app .zbwc-connbox+.components-notice{margin:12px 0 0}.zbwc-org-modal__list.is-compact{max-height:176px}#zbwc-app .zbwc-copyrow{margin:10px 0 2px}#zbwc-app .zbwc-connfields{display:flex;flex-direction:column;gap:16px;margin-top:18px}#zbwc-app .zbwc-invnotice.components-notice{margin:12px 0 0}#zbwc-app .zbwc-invnotice .components-button.is-link{font-size:inherit}#zbwc-app .zbwc-invnotice__lead{font-weight:600;margin:0 0 8px}#zbwc-app .zbwc-invnotice__steps{margin:0 0 10px;padding-right:20px}#zbwc-app .zbwc-invnotice__steps li{margin:4px 0}#zbwc-app .zbwc-invnotice__actions{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-page .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin:0 0 14px;padding:14px 15px}#zbwc-app .zbwc-page .zbwc-ob-note p{font-size:13px;line-height:1.55;margin:0}#zbwc-app .zbwc-page .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-page .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-quiet.components-button{margin-top:18px}#zbwc-app .zbwc-whpicker{align-items:flex-start;display:flex;gap:10px;max-width:560px}#zbwc-app .zbwc-whpicker .components-base-control{flex:1}#zbwc-app .zbwc-whpicker .components-button{margin-top:23px}#zbwc-app .zbwc-whwarn.components-notice{margin:0 0 14px}.zbwc-guide-modal.components-modal__frame{border-radius:14px;max-width:640px;width:calc(100% - 32px)}.zbwc-guide-modal .components-modal__content{padding:2px 28px 24px}.zbwc-guide-modal__lede{color:#646970;font-size:13.5px;line-height:1.6;margin:0 0 16px}.zbwc-guide-modal__steps{margin:0;padding-right:22px}.zbwc-guide-modal__steps li{margin:0 0 14px}.zbwc-guide-modal__steps strong{font-size:14px}.zbwc-guide-modal__steps p{color:#50575e;font-size:13.5px;line-height:1.55;margin:3px 0 0}.zbwc-guide-modal__uri{background:#f0f2f5;border-radius:8px;display:block;font-size:12px;margin-top:8px;padding:8px 10px;word-break:break-all}.zbwc-guide-modal__h{font-size:14px;margin:20px 0 8px}.zbwc-guide-modal__table{border-collapse:collapse;font-size:13px;width:100%}.zbwc-guide-modal__table td{border-bottom:1px solid #eceef1;padding:5px 0 5px 10px}.zbwc-guide-modal__table code{background:#f0f2f5;border-radius:4px;font-size:12px;padding:1px 6px}.zbwc-guide-modal__fixes{font-size:13.5px;margin:0;padding-right:20px}.zbwc-guide-modal__fixes li{color:#50575e;margin:6px 0}.zbwc-guide-modal__footer{display:flex;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-ob-guidelink.components-button{font-weight:600;margin:-6px 0 20px}#zbwc-app .zbwc-rule{border:0;border-top:1px solid #e0e2e6;margin:20px 0 14px}#zbwc-app .zbwc-subhead{color:#646970;font-size:12px;font-weight:600;letter-spacing:.06em;margin:0 0 10px;text-transform:uppercase}#zbwc-app .zbwc-activity{margin:0 0 16px}#zbwc-app .zbwc-activity__task{align-items:center;background:#fff;border:1px solid #e0e2e6;border-right:3px solid #2271b1;border-radius:8px;display:grid;gap:14px;grid-template-columns:230px minmax(120px,1fr) 3.4em minmax(0,34%);margin-bottom:6px;max-height:80px;overflow:hidden;padding:9px 14px;transition:opacity .6s ease,max-height .6s ease,padding .6s ease,margin .6s ease,border-color .3s ease}#zbwc-app .zbwc-activity__task.is-leaving{border-bottom-width:0;border-top-width:0;margin-bottom:0;max-height:0;opacity:0;padding-bottom:0;padding-top:0}#zbwc-app .zbwc-activity__task.is-done{border-right-color:#00a32a}#zbwc-app .zbwc-activity__task.is-failed{border-right-color:#d63638}#zbwc-app .zbwc-activity__label{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__bar{background:#e6e8eb;border-radius:999px;height:6px;overflow:hidden}#zbwc-app .zbwc-activity__fill{background:#2271b1;border-radius:999px;height:100%;transition:width .4s ease;width:0}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__fill{background:#00a32a}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__fill{background:#d63638}#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:zbwc-activity-slide 1.4s ease-in-out infinite;width:35%}#zbwc-app .zbwc-activity__pct{color:#1e1e1e;font-size:13px;font-variant-numeric:tabular-nums;font-weight:600;text-align:left}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__pct{color:#00a32a}#zbwc-app .zbwc-activity__meta{color:#646970;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__task.is-failed{max-height:160px}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__meta{white-space:normal}@media(max-width:782px){#zbwc-app .zbwc-activity__task{gap:6px 10px;grid-template-areas:"label pct" "bar bar" "meta meta";grid-template-columns:minmax(0,1fr) auto;max-height:160px}#zbwc-app .zbwc-activity__label{grid-area:label;white-space:normal}#zbwc-app .zbwc-activity__pct{grid-area:pct}#zbwc-app .zbwc-activity__bar{grid-area:bar}#zbwc-app .zbwc-activity__meta{grid-area:meta;white-space:normal}#zbwc-app .zbwc-activity__label{-ms-grid-column:1;-ms-grid-row:1}#zbwc-app .zbwc-activity__pct{-ms-grid-column:3;-ms-grid-row:1}#zbwc-app .zbwc-activity__bar{-ms-grid-column:1;-ms-grid-row:3;-ms-grid-column-span:3}#zbwc-app .zbwc-activity__meta{-ms-grid-column:1;-ms-grid-row:5;-ms-grid-column-span:3}#zbwc-app .zbwc-failtable,#zbwc-app .zbwc-failtable tbody,#zbwc-app .zbwc-logtable,#zbwc-app .zbwc-logtable tbody{display:block}#zbwc-app .zbwc-failtable thead,#zbwc-app .zbwc-logtable thead{display:none}#zbwc-app .zbwc-failtable tr,#zbwc-app .zbwc-logtable tr{align-items:center;display:flex;flex-wrap:wrap;gap:6px 10px;padding:10px 12px}#zbwc-app .zbwc-failtable td,#zbwc-app .zbwc-logtable td{display:block;padding:0}#zbwc-app .zbwc-failtable .zbwc-errcell,#zbwc-app .zbwc-failtable .zbwc-maptable__actions,#zbwc-app .zbwc-logtable__msg{flex-basis:100%;max-width:none}#zbwc-app .zbwc-logtable__res{color:#646970;flex-basis:100%}#zbwc-app .zbwc-logtable__res:empty{display:none}#zbwc-app .zbwc-failtable code{overflow-wrap:anywhere}#zbwc-app .zbwc-failtable__attempts:before{color:#646970;content:attr(data-label) ": "}}@keyframes zbwc-activity-slide{0%{margin-right:-35%}to{margin-right:100%}}@media(prefers-reduced-motion:reduce){#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:none;opacity:.55;width:100%}#zbwc-app .zbwc-activity__fill,#zbwc-app .zbwc-activity__task{transition:none}}
  • erp7-order-sync-for-zoho-books/tags/1.0.4/build/index.asset.php

    r3733769 r3733904  
    1 <?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-components', 'wp-dom-ready', 'wp-element', 'wp-i18n'), 'version' => 'e99746af84593b135c80');
     1<?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-components', 'wp-dom-ready', 'wp-element', 'wp-i18n'), 'version' => '6bf024ff61b1e1184811');
  • erp7-order-sync-for-zoho-books/tags/1.0.4/build/index.css

    r3733769 r3733904  
    1 #zbwc-app{--zbwc-accent:#2271b1;--zbwc-border:#dcdcde;--zbwc-bg:#f6f7f7;--zbwc-ok:#00a32a;--zbwc-warn:#dba617;--zbwc-error:#d63638;--zbwc-plan-soft:#f0f6fc;--zbwc-plan-line:#c5d9ed;--zbwc-plan-tint:#dfebf7;--zbwc-bar-soft:#fdf8e3;--zbwc-bar-line:#e6d18d;--zbwc-bar-tint:#f7e8b4;--zbwc-bar-ink:#7a5d0a;color:#1e1e1e;margin:20px 20px 0 0}#zbwc-app .zbwc-boot{color:#757575;padding:40px}#zbwc-app .zbwc-nav{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:20px;padding:10px 16px}#zbwc-app .zbwc-nav__brand{align-items:center;display:flex;font-size:15px;font-weight:600;gap:8px}#zbwc-app .zbwc-nav__logo{color:var(--zbwc-accent)}#zbwc-app .zbwc-nav__sub{color:#757575;font-weight:400}#zbwc-app .zbwc-nav__tabs{display:flex;flex:1;flex-wrap:wrap;gap:4px}#zbwc-app .zbwc-nav__tab{background:transparent;border:none;border-radius:6px;color:#50575e;cursor:pointer;font-size:13px;padding:8px 14px}#zbwc-app .zbwc-nav__tab:hover{background:var(--zbwc-bg)}#zbwc-app .zbwc-nav__tab.is-active{background:var(--zbwc-accent);color:#fff}#zbwc-app .zbwc-layout.has-aside{align-items:start;display:grid;gap:24px;grid-template-columns:minmax(0,1fr) 300px}#zbwc-app .zbwc-aside{position:sticky;top:42px}#zbwc-app .zbwc-aside .zbwc-plancard{max-width:none}@media(max-width:1200px){#zbwc-app .zbwc-layout.has-aside{display:block}#zbwc-app .zbwc-aside{display:none}}#zbwc-app .zbwc-page{display:flex;flex-direction:column;gap:20px;padding-bottom:80px}#zbwc-app .zbwc-grid{display:grid;gap:16px}#zbwc-app .zbwc-grid--2{grid-template-columns:1fr 1fr}#zbwc-app .zbwc-grid--stats{grid-template-columns:repeat(4,1fr)}@media(max-width:960px){#zbwc-app .zbwc-grid--2,#zbwc-app .zbwc-grid--stats{grid-template-columns:1fr 1fr}}@media(max-width:782px){#zbwc-app .zbwc-grid--2{grid-template-columns:minmax(0,1fr)}}#zbwc-app .zbwc-section{border-radius:8px}#zbwc-app .zbwc-section__header{align-items:flex-start}#zbwc-app .zbwc-section__title{font-size:14px;margin:0}#zbwc-app .zbwc-section__desc{color:#757575;font-size:12px;margin:2px 0 0}@media(max-width:782px){#zbwc-app .zbwc-section__header{flex-wrap:wrap;row-gap:8px}#zbwc-app .zbwc-section__heading{flex:1 1 200px;min-width:0}}#zbwc-app .zbwc-section .components-base-control{margin-bottom:16px}#zbwc-app .zbwc-stat{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;padding:16px;text-align:center}#zbwc-app .zbwc-stat__value{color:var(--zbwc-accent);font-size:28px;font-weight:700}#zbwc-app .zbwc-stat__label{color:#757575;font-size:12px;margin-top:4px}#zbwc-app .zbwc-stat__hint{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-kv{border-collapse:collapse;width:100%}#zbwc-app .zbwc-kv th{color:#50575e;font-weight:500;padding:6px 0;text-align:left;width:45%}#zbwc-app .zbwc-kv td{padding:6px 0}#zbwc-app .zbwc-pill{border-radius:999px;display:inline-block;font-size:11px;font-weight:600;line-height:1.8;padding:2px 10px}#zbwc-app .zbwc-pill.is-ok{background:#edfaef;color:var(--zbwc-ok)}#zbwc-app .zbwc-pill.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-pill.is-error{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-pill.is-info{background:#f0f6fc;color:var(--zbwc-accent)}#zbwc-app .zbwc-activity{margin:0}#zbwc-app .zbwc-activity__item{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;font-size:13px;gap:10px;padding:8px 0}#zbwc-app .zbwc-activity__cat{color:#757575;font-size:10px;min-width:70px;text-transform:uppercase}#zbwc-app .zbwc-activity__msg{flex:1}#zbwc-app .zbwc-activity__time{color:#a7aaad;font-size:11px}#zbwc-app .zbwc-dot{background:var(--zbwc-accent);border-radius:50%;height:8px;width:8px}#zbwc-app .zbwc-dot.is-error{background:var(--zbwc-error)}#zbwc-app .zbwc-dot.is-warn{background:var(--zbwc-warn)}#zbwc-app .zbwc-maptable{margin-top:8px}#zbwc-app .zbwc-maptable__toolbar{margin-bottom:10px}#zbwc-app .zbwc-maptable__actions{display:flex;gap:6px}#zbwc-app .zbwc-maptable__scope{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-maptable__add{margin-top:12px;max-width:360px}@media(max-width:782px){#zbwc-app .zbwc-maptable{overflow-x:auto}#zbwc-app table.zbwc-maptable{display:block}#zbwc-app .zbwc-maptable__toolbar .components-button{height:auto;min-height:36px;text-align:left;white-space:normal}}#zbwc-app .zbwc-logtable td{font-size:12px;vertical-align:top}#zbwc-app .zbwc-nowrap{white-space:nowrap}#zbwc-app .zbwc-errcell{color:var(--zbwc-error);font-size:12px;max-width:420px}#zbwc-app .zbwc-share-log{border-bottom:1px solid #f0f0f1;margin-bottom:14px;padding:0 0 14px}#zbwc-app .zbwc-share-log .components-toggle-control__help{max-width:640px}#zbwc-app .zbwc-filters{align-items:flex-end;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:12px}#zbwc-app .zbwc-filters .components-base-control{margin-bottom:0;min-width:160px}#zbwc-app .zbwc-pager{align-items:center;color:#50575e;display:flex;font-size:12px;gap:12px;justify-content:flex-end;margin-top:12px}#zbwc-app .zbwc-muted{color:#646970;font-size:13px}#zbwc-app .zbwc-actions{margin-top:12px}#zbwc-app .zbwc-upgrade-banner{border-radius:8px;margin:0 0 20px}#zbwc-app .zbwc-upgrade-banner .components-notice__content{margin:0;width:100%}#zbwc-app .zbwc-plans{align-items:start;display:grid;gap:24px;grid-template-columns:1fr 1fr;margin-top:8px}@media(max-width:900px){#zbwc-app .zbwc-plans{grid-template-columns:1fr}}#zbwc-app .zbwc-plans__card{background:#fff;border:1px solid var(--zbwc-border);border-radius:12px;padding:24px;position:relative}#zbwc-app .zbwc-plans__card.is-featured{border:2px solid var(--zbwc-accent);padding-top:30px}#zbwc-app .zbwc-plans__ribbon{background:var(--zbwc-accent);border-radius:999px;color:#fff;font-size:11px;font-weight:700;left:50%;letter-spacing:.5px;padding:4px 16px;position:absolute;top:0;transform:translate(-50%,-50%);white-space:nowrap}#zbwc-app .zbwc-plans__head{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-plans__head h3{font-size:20px;margin:0}#zbwc-app .zbwc-plans__current{background:#edfaef;border-radius:999px;color:#00611c;font-size:12px;font-weight:600;padding:4px 14px}#zbwc-app .zbwc-plans__price{margin:14px 0 18px}#zbwc-app .zbwc-plans__price strong{font-size:34px;font-weight:700;line-height:1}#zbwc-app .zbwc-plans__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plans__list li{align-items:flex-start;color:#1e1e1e;display:flex;font-size:14px;gap:10px;margin-bottom:10px}#zbwc-app .zbwc-plans__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plans__list li.is-no{color:#646970}#zbwc-app .zbwc-plans__list li.is-no .dashicons{color:#a7aaad}#zbwc-app .zbwc-plans__note{background:var(--zbwc-bg);border-radius:8px;color:#50575e;font-size:13px;margin:0;padding:14px 16px}#zbwc-app .zbwc-plans__cta.components-button.is-primary,#zbwc-app .zbwc-plans__cta.components-button.is-secondary{font-size:14px;font-weight:600;height:44px;justify-content:center;width:100%}#zbwc-app .zbwc-plans__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plans__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-planbar{align-items:center;background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-left:4px solid var(--zbwc-warn);border-radius:10px;display:flex;flex-wrap:wrap;gap:14px;margin:0 0 20px;padding:12px 16px}#zbwc-app .zbwc-planbar.is-urgent{border-color:var(--zbwc-warn);border-left-width:4px}#zbwc-app .zbwc-planbar__icon{align-items:center;background:var(--zbwc-bar-tint);border-radius:50%;color:var(--zbwc-bar-ink);display:flex;flex:none;height:32px;justify-content:center;width:32px}#zbwc-app .zbwc-planbar__text{align-items:baseline;display:flex;flex:1;flex-wrap:wrap;gap:10px;min-width:240px}#zbwc-app .zbwc-planbar__text strong{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-planbar__text span{color:#50575e;font-size:13px}#zbwc-app .zbwc-planbar__actions{align-items:center;display:flex;gap:8px;margin-left:auto}#zbwc-app .zbwc-plancard{background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-radius:10px;border-top:3px solid var(--zbwc-warn);max-width:420px;padding:20px 22px 18px}#zbwc-app .zbwc-plancard__chip{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);display:inline-block;font-size:11px;font-weight:700;letter-spacing:.4px;padding:3px 12px}#zbwc-app .zbwc-plancard__title{font-size:17px;margin:12px 0 6px}#zbwc-app .zbwc-plancard__desc{color:#50575e;font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-plancard__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plancard__list li{align-items:flex-start;color:#3c434a;display:flex;font-size:13px;gap:8px;margin-bottom:7px}#zbwc-app .zbwc-plancard__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plancard__cta.components-button.is-primary{font-weight:600;height:40px;justify-content:center;width:100%}#zbwc-app .zbwc-plancard__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plancard__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-quotachip{background:#edfaef;border-radius:999px;color:#0a6b22;display:inline-block;font-size:12px;font-weight:600;padding:3px 12px;white-space:nowrap}#zbwc-app .zbwc-quotachip.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-quotachip.is-full{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-quotanote{margin:0 0 16px}#zbwc-app .zbwc-pagehead{align-items:center;display:flex;gap:16px;justify-content:space-between}#zbwc-app .zbwc-pagehead__title{font-size:20px;font-weight:700;letter-spacing:-.01em;margin:0}#zbwc-app .zbwc-statbar{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:grid;grid-template-columns:repeat(5,1fr);overflow:hidden}#zbwc-app .zbwc-statbar__cell{align-items:flex-start;border-right:1px solid var(--zbwc-border);display:flex;flex-direction:column;gap:6px;padding:16px 18px}#zbwc-app .zbwc-statbar__cell:last-child{border-right:none}#zbwc-app .zbwc-statbar__label{color:#757575;font-size:11px;letter-spacing:.06em;text-transform:uppercase}#zbwc-app .zbwc-statbar__value{font-size:26px;font-variant-numeric:tabular-nums;font-weight:700;line-height:1}#zbwc-app .zbwc-statbar__value--sm{font-size:17px}#zbwc-app .zbwc-statbar__value.is-bad{color:var(--zbwc-error)}#zbwc-app .zbwc-statbar__sub{color:#757575;font-size:12px}@media(max-width:1100px){#zbwc-app .zbwc-statbar{grid-template-columns:repeat(3,1fr)}#zbwc-app .zbwc-statbar__cell:nth-child(3){border-right:none}}@media(max-width:600px){#zbwc-app .zbwc-statbar{grid-template-columns:1fr 1fr}}#zbwc-app .zbwc-masterbar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-left:4px solid var(--zbwc-ok);border-radius:8px;display:flex;gap:20px;padding:16px 18px}#zbwc-app .zbwc-masterbar.is-off{background:var(--zbwc-bg);border-left-color:var(--zbwc-warn)}#zbwc-app .zbwc-masterbar__text{display:flex;flex:1;flex-direction:column;gap:4px}#zbwc-app .zbwc-masterbar__title{align-items:center;display:flex;font-size:15px;font-weight:600;gap:10px}#zbwc-app .zbwc-masterbar__desc{color:#646970;font-size:13px}#zbwc-app .zbwc-flow{display:flex;flex-direction:column}#zbwc-app .zbwc-flow__row{border-bottom:1px solid #f0f0f1;padding:14px 0}#zbwc-app .zbwc-flow__row:last-child{border-bottom:none}#zbwc-app .zbwc-flow__row:first-child{padding-top:4px}#zbwc-app .zbwc-flow__row.is-disabled{opacity:.65}#zbwc-app .zbwc-flow__main{align-items:center;display:flex;gap:14px}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{align-items:center;display:flex;gap:10px;min-width:0}#zbwc-app .zbwc-flow__event{flex:0 0 46%}#zbwc-app .zbwc-flow__doc{flex:1}#zbwc-app .zbwc-flow__label{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-flow__arrow{color:#a7aaad;flex:none}#zbwc-app .zbwc-flow__badge{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);flex:none;font-size:11px;font-weight:700;letter-spacing:.4px;padding:2px 9px}#zbwc-app .zbwc-flow__switch{flex:none;margin-left:auto}#zbwc-app .zbwc-flow .components-base-control,#zbwc-app .zbwc-flow .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-flow__hint{color:#757575;font-size:12px;margin:6px 0 0;padding-left:2px}@media(max-width:782px){#zbwc-app .zbwc-flow__main{flex-wrap:wrap}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{flex:1 1 100%}#zbwc-app .zbwc-flow__arrow{display:none}}#zbwc-app .zbwc-note{align-items:flex-start;background:#fff;border:1px solid var(--zbwc-border);border-radius:10px;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-note p{color:#3c434a;font-size:14px;line-height:1.55;margin:0}#zbwc-app .zbwc-note .dashicons{align-items:center;border-radius:9px;display:flex;flex:none;font-size:19px;height:34px;justify-content:center;width:34px}#zbwc-app .zbwc-note.is-info .dashicons{background:var(--zbwc-plan-tint);color:var(--zbwc-accent)}#zbwc-app .zbwc-note.is-warn .dashicons{background:var(--zbwc-bar-tint);color:var(--zbwc-bar-ink)}#zbwc-app .zbwc-subnav{display:grid;gap:4px;grid-auto-columns:1fr;grid-auto-flow:column}#zbwc-app .zbwc-subnav__tab{background:transparent;border:none;border-radius:8px;color:#50575e;cursor:pointer;font-size:14px;font-weight:500;padding:10px 16px;text-align:center;transition:background-color .12s ease}#zbwc-app .zbwc-subnav__tab:hover{background:rgba(0,0,0,.03)}#zbwc-app .zbwc-subnav__tab.is-active{background:#e4e5e7;color:#1e1e1e;font-weight:600}#zbwc-app .zbwc-subnav__tab:focus-visible{outline:2px solid var(--zbwc-accent);outline-offset:2px}@media(max-width:782px){#zbwc-app .zbwc-subnav{grid-auto-columns:auto;grid-auto-flow:row}}#zbwc-app .zbwc-savebar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;bottom:0;box-shadow:0 -2px 10px rgba(0,0,0,.06);display:flex;justify-content:space-between;margin-top:8px;padding:12px 16px;position:sticky}#zbwc-app .zbwc-savebar__msg{font-weight:500}#zbwc-app .zbwc-savebar__actions{display:flex;gap:8px}#zbwc-app .zbwc-code{background:#1e1e1e;border-radius:6px;color:#7fd;display:block;font-size:12px;padding:10px 12px;word-break:break-all}#zbwc-app .zbwc-linkbtn,#zbwc-app .zbwc-loading{align-items:center;display:inline-flex;gap:8px}#zbwc-app .zbwc-linkbtn{background:none;border:none;color:var(--zbwc-accent);cursor:pointer}#zbwc-app .zbwc-loading{color:#757575;padding:30px}#zbwc-app .zbwc-orglist__row{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;justify-content:space-between;padding:8px 0}#zbwc-app .zbwc-subhead{border-bottom:1px solid #f0f0f1;color:#757575;font-size:11px;letter-spacing:.5px;margin:22px 0 10px;padding-bottom:5px}#zbwc-app .zbwc-onboarding{--ob-ink:#1a1a1a;--ob-muted:#656a70;--ob-line:#e3e5e7;--ob-soft:#f7f8f8;margin:0 auto;max-width:1120px;padding-bottom:60px}#zbwc-app .zbwc-onboarding__bar{align-items:center;display:flex;gap:10px;padding:4px 0 20px}#zbwc-app .zbwc-onboarding__logo.dashicons{color:var(--zbwc-accent);font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-onboarding__brand{font-size:16px;font-weight:700;letter-spacing:-.01em}#zbwc-app .zbwc-onboarding__titlerow{align-items:center;display:flex;gap:16px;justify-content:space-between;margin-bottom:16px}#zbwc-app .zbwc-onboarding__title{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0}#zbwc-app .zbwc-onboarding__chip{background:#e9eaeb;border-radius:999px;color:#50575e;font-size:12px;font-weight:500;padding:5px 14px}#zbwc-app .zbwc-onboarding__card{background:#fff;border:1px solid var(--ob-line);border-radius:16px;display:grid;grid-template-columns:minmax(0,1fr) 330px;overflow:hidden}#zbwc-app .zbwc-onboarding__panel{padding:34px 38px 38px}#zbwc-app .zbwc-onboarding__aside{background:var(--ob-soft);border-left:1px solid var(--ob-line);padding:32px 28px}@media(max-width:960px){#zbwc-app .zbwc-onboarding__card{grid-template-columns:1fr}#zbwc-app .zbwc-onboarding__panel{padding:26px 22px 30px}#zbwc-app .zbwc-onboarding__aside{border-left:none;border-top:1px solid var(--ob-line)}}#zbwc-app .zbwc-ob-eyebrow{color:var(--ob-muted);font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-ob-heading{color:var(--ob-ink);font-size:30px;font-weight:700;letter-spacing:-.02em;line-height:1.18;margin:0 0 12px}#zbwc-app .zbwc-ob-lead{color:#4a5056;font-size:14.5px;line-height:1.6;margin:0 0 26px;max-width:46em}#zbwc-app .zbwc-ob-footnote{color:var(--ob-muted);font-size:12.5px;line-height:1.6;margin:18px 0 0}#zbwc-app .zbwc-ob-quiet{margin-top:16px}#zbwc-app .zbwc-ob-icon{align-items:center;background:var(--ob-soft);border:1px solid var(--ob-line);border-radius:11px;color:var(--ob-ink);display:flex;flex:none;height:42px;justify-content:center;width:42px}#zbwc-app .zbwc-ob-icon .dashicons{font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-features{list-style:none;margin:0 0 30px;padding:0}#zbwc-app .zbwc-ob-feature{display:flex;gap:16px;margin-bottom:22px}#zbwc-app .zbwc-ob-feature h3{font-size:15px;font-weight:600;margin:0 0 4px}#zbwc-app .zbwc-ob-feature p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:0}#zbwc-app .zbwc-ob-aside__title{font-size:14px;font-weight:700;margin:0}#zbwc-app .zbwc-ob-progress{list-style:none;margin:18px 0 0;padding:0}#zbwc-app .zbwc-ob-progress__item{display:flex;gap:14px;padding-bottom:22px;position:relative}#zbwc-app .zbwc-ob-progress__item:last-child{padding-bottom:0}#zbwc-app .zbwc-ob-progress__item:before{background:#dcdee0;bottom:6px;content:"";left:15px;position:absolute;top:34px;width:1px}#zbwc-app .zbwc-ob-progress__item:last-child:before{display:none}#zbwc-app .zbwc-ob-progress__num{align-items:center;background:#fff;border:1px solid #d5d7d9;border-radius:50%;color:#8c8f94;display:flex;flex:none;font-size:12px;font-weight:600;height:31px;justify-content:center;position:relative;width:31px}#zbwc-app .zbwc-ob-progress__num .dashicons{font-size:18px;height:18px;width:18px}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__num,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__num{background:var(--ob-ink);border-color:var(--ob-ink);color:#fff}#zbwc-app .zbwc-ob-progress__text{display:flex;flex-direction:column;gap:3px;padding-top:4px}#zbwc-app .zbwc-ob-progress__text strong{color:#8c8f94;font-size:13.5px;font-weight:600}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__text strong,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__text strong{color:var(--ob-ink)}#zbwc-app .zbwc-ob-progress__text span{color:var(--ob-muted);font-size:12.5px;line-height:1.5}#zbwc-app .zbwc-ob-facts{border-top:1px solid var(--ob-line);list-style:none;margin:22px 0 0;padding:18px 0 0}#zbwc-app .zbwc-ob-facts li{color:var(--ob-muted);font-size:12.5px;line-height:1.55;margin:0 0 10px;padding-left:14px;position:relative}#zbwc-app .zbwc-ob-facts li:before{content:"·";left:4px;position:absolute}#zbwc-app .zbwc-ob-count{border-top:1px solid var(--ob-line);font-size:13px;font-weight:600;margin:22px 0 0;padding-top:18px}#zbwc-app .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin-top:14px;padding:14px 15px}#zbwc-app .zbwc-ob-note p{font-size:12.5px;line-height:1.55;margin:0}#zbwc-app .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-ob-note.is-warn{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-ob-note.is-plan{background:#edfaef;color:#0a6b22}#zbwc-app .zbwc-ob-badge{border-radius:999px;flex:none;font-size:12px;font-weight:600;padding:4px 12px;white-space:nowrap}#zbwc-app .zbwc-ob-badge.is-ok{background:#d8f5e3;color:#0a6b2f}#zbwc-app .zbwc-ob-badge.is-blue{background:#e4f0fb;color:#1c5a99}#zbwc-app .zbwc-ob-badge.is-muted{background:#eceded;color:#646970}#zbwc-app .zbwc-ob-option{border:1px solid var(--ob-line);border-radius:12px;padding:20px 22px}#zbwc-app .zbwc-ob-option.is-done{background:var(--ob-soft)}#zbwc-app .zbwc-ob-option__head{align-items:center;display:flex;gap:12px;justify-content:space-between}#zbwc-app .zbwc-ob-option__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-option__desc{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:8px 0 0}#zbwc-app .zbwc-ob-option .zbwc-kv{margin-top:10px}#zbwc-app .zbwc-ob-howto{color:#3c434a;font-size:13.5px;line-height:1.7;margin:18px 0 0;padding-left:18px}#zbwc-app .zbwc-ob-howto li{margin-bottom:10px}#zbwc-app .zbwc-ob-copyrow{align-items:center;display:flex;gap:8px;margin-top:8px}#zbwc-app .zbwc-ob-copyrow .zbwc-code{flex:1;margin:0}#zbwc-app .zbwc-ob-fields{border-top:1px solid var(--ob-line);display:grid;gap:18px;margin-top:20px;padding-top:20px}#zbwc-app .zbwc-ob-fields .components-base-control{margin-bottom:0}#zbwc-app .zbwc-ob-actions{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}#zbwc-app .zbwc-ob-actions .components-button .dashicons{font-size:17px;height:17px;margin-right:6px;width:17px}#zbwc-app .zbwc-ob-divider{background:var(--ob-line);height:1px;margin:26px 0 18px}#zbwc-app .zbwc-ob-disclosure{align-items:center;background:none;border:none;color:var(--zbwc-accent);cursor:pointer;display:inline-flex;font-size:13.5px;font-weight:500;gap:6px;padding:0}#zbwc-app .zbwc-ob-disclosure .dashicons{font-size:16px;height:16px;width:16px}#zbwc-app .zbwc-ob-advanced{background:var(--ob-soft);border-radius:12px;margin-top:16px;padding:18px 20px}#zbwc-app .zbwc-ob-advanced p{color:var(--ob-muted);font-size:13px;line-height:1.6;margin:0 0 14px}#zbwc-app .zbwc-ob-advanced .components-base-control{margin-bottom:14px}#zbwc-app .zbwc-ob-resource{border:1px solid var(--ob-line);border-radius:12px;margin-bottom:14px;transition:border-color .12s ease,box-shadow .12s ease}#zbwc-app .zbwc-ob-resource.is-on{border-color:#c4c7ca;box-shadow:0 1px 2px rgba(0,0,0,.04)}#zbwc-app .zbwc-ob-resource__main{align-items:flex-start;cursor:pointer;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-ob-resource__box{cursor:default;display:flex;padding-top:3px}#zbwc-app .zbwc-ob-resource .components-base-control,#zbwc-app .zbwc-ob-resource .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-ob-resource__body{flex:1}#zbwc-app .zbwc-ob-resource__head{align-items:center;display:flex;flex-wrap:wrap;gap:10px}#zbwc-app .zbwc-ob-resource__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-resource__body p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:5px 0 0}#zbwc-app .zbwc-ob-resource__prefs{cursor:default;display:grid;gap:18px;grid-template-columns:1fr 1fr;margin-top:16px}@media(max-width:782px){#zbwc-app .zbwc-ob-resource__prefs{grid-template-columns:1fr}}#zbwc-app .zbwc-ob-inline-notice.components-notice{border-radius:10px;margin:4px 0 0}#zbwc-app .zbwc-ob-done{background:#fff;border:1px solid var(--ob-line);border-radius:16px;margin:0 auto;max-width:620px;padding:44px 44px 36px;text-align:center}#zbwc-app .zbwc-ob-done__check{align-items:center;background:#e2f5e9;border-radius:50%;display:inline-flex;height:76px;justify-content:center;margin-bottom:20px;width:76px}#zbwc-app .zbwc-ob-done__check .dashicons{align-items:center;background:#2f7a48;border-radius:50%;color:#fff;display:flex;font-size:34px;height:54px;justify-content:center;width:54px}#zbwc-app .zbwc-ob-done h2{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0 0 10px}#zbwc-app .zbwc-ob-done .zbwc-ob-lead{margin:0 auto 26px;max-width:34em}#zbwc-app .zbwc-ob-done .zbwc-ob-note{text-align:left}#zbwc-app .zbwc-ob-summary{border:1px solid var(--ob-line);border-radius:12px;list-style:none;margin:0;overflow:hidden;padding:0;text-align:left}#zbwc-app .zbwc-ob-summary__row{align-items:center;border-bottom:1px solid var(--ob-line);display:flex;gap:12px;padding:15px 18px}#zbwc-app .zbwc-ob-summary__row:last-child{border-bottom:none}#zbwc-app .zbwc-ob-summary__icon{display:flex}#zbwc-app .zbwc-ob-summary__icon .dashicons{color:#2f7a48;font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-summary__icon.is-muted .dashicons{color:#a7aaad}#zbwc-app .zbwc-ob-summary__text{display:flex;flex:1;flex-direction:column;gap:2px}#zbwc-app .zbwc-ob-summary__text strong{font-size:14px}#zbwc-app .zbwc-ob-summary__text span{color:var(--ob-muted);font-size:12.5px}#zbwc-app .zbwc-ob-done__actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:24px}#zbwc-app .zbwc-ob-nav{align-items:center;display:flex;justify-content:space-between;margin-top:22px}#zbwc-app .zbwc-onboarding .components-button.is-primary{background:var(--ob-ink);border-color:var(--ob-ink);border-radius:8px;box-shadow:none;font-size:13.5px;font-weight:600;height:42px;padding:0 20px}#zbwc-app .zbwc-onboarding .components-button.is-primary:focus:not(:disabled),#zbwc-app .zbwc-onboarding .components-button.is-primary:hover:not(:disabled){background:#000;border-color:#000;color:#fff}#zbwc-app .zbwc-onboarding .components-button.is-primary:disabled,#zbwc-app .zbwc-onboarding .components-button.is-primary[aria-disabled=true]{background:#e6e7e8;border-color:#e6e7e8;color:#a7aaad}#zbwc-app .zbwc-onboarding .components-button.is-secondary{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #d5d7d9;color:var(--ob-ink);font-size:13.5px;font-weight:600;height:42px;padding:0 18px}#zbwc-app .zbwc-onboarding .components-button.is-secondary:hover:not(:disabled){background:var(--ob-soft);box-shadow:inset 0 0 0 1px #b9bcbf;color:var(--ob-ink)}#zbwc-app .zbwc-onboarding .components-button.is-tertiary{border-radius:8px;font-weight:600;height:42px;padding:0 14px}#zbwc-app .zbwc-toasts{bottom:20px;left:160px;position:fixed;z-index:100000}@media(max-width:782px){#zbwc-app .zbwc-toasts{left:16px;right:16px;width:auto}}.zbwc-upgrade-modal.components-modal__frame{border-radius:12px;max-width:32rem;position:relative;width:calc(100% - 32px)}.zbwc-upgrade-modal .components-modal__header{border-bottom:none;height:auto;justify-content:center;padding:28px 32px 0}.zbwc-upgrade-modal .components-modal__header-heading-container{justify-content:center}.zbwc-upgrade-modal .components-modal__header-heading{font-size:22px;font-weight:700;line-height:1.3;text-align:center}.zbwc-upgrade-modal .components-modal__header .components-button.has-icon{margin:0;position:absolute;right:12px;top:10px}.zbwc-upgrade-modal .components-modal__content{padding:0 32px 28px}.zbwc-upgrade-modal .components-modal__content:before{content:none}.zbwc-upgrade-modal__body{text-align:center}.zbwc-upgrade-modal__lead{color:#3c434a;font-size:14px;line-height:1.6;margin:12px auto 0;max-width:34rem}.zbwc-upgrade-modal__note{color:#646970;font-size:13px;line-height:1.6;margin:8px auto 0;max-width:34rem}.zbwc-upgrade-modal__offer{align-items:baseline;display:flex;gap:8px;justify-content:center;margin:20px 0 16px}.zbwc-upgrade-modal__plan{font-size:15px;font-weight:600}.zbwc-upgrade-modal__price{font-size:30px;font-weight:700;line-height:1}.zbwc-upgrade-modal__per{color:#646970;font-size:14px;font-weight:400}.zbwc-upgrade-modal__cta.components-button.is-primary{border-radius:8px;display:flex;font-size:15px;font-weight:600;height:48px;justify-content:center;width:100%}.zbwc-upgrade-modal__later.components-button{color:#50575e;display:block;margin:14px auto 0;text-decoration:underline}.zbwc-upgrade-modal__trust{align-items:center;border-top:1px solid #e0e0e0;color:#646970;display:flex;font-size:13px;gap:6px;justify-content:center;margin:22px 0 0;padding-top:18px}.zbwc-upgrade-modal__trust .dashicons{font-size:16px;height:16px;width:16px}.zbwc-org-modal.components-modal__frame{border-radius:14px;max-width:480px;width:calc(100% - 32px)}.zbwc-org-modal .components-modal__header-heading{font-size:17px;font-weight:600}.zbwc-org-modal .components-modal__content{padding:2px 28px 24px}.zbwc-org-modal__lead{color:#646970;font-size:13px;line-height:1.6;margin:0 0 16px}.zbwc-org-modal__loading{align-items:center;color:#646970;display:flex;gap:8px;padding:16px 0 8px}.zbwc-org-modal__loading .components-spinner{margin:0}.zbwc-org-modal__list{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow-y:auto}.zbwc-org-modal__row{align-items:center;background:#fff;border:1px solid #dcdcde;border-radius:10px;color:inherit;cursor:pointer;display:flex;font:inherit;gap:12px;padding:12px 14px;text-align:left;transition:border-color .12s ease,box-shadow .12s ease;width:100%}.zbwc-org-modal__row:hover{border-color:#8c8f94}.zbwc-org-modal__row:focus-visible{outline:2px solid var(--wp-admin-theme-color,#3858e9);outline-offset:1px}.zbwc-org-modal__row.is-selected{border-color:var(--wp-admin-theme-color,#3858e9);box-shadow:0 0 0 1px var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__icon{background:#f0f0f1;border-radius:9px;color:#50575e;display:grid;flex:none;height:36px;place-items:center;width:36px}.zbwc-org-modal__icon .dashicons{font-size:18px;height:18px;width:18px}.zbwc-org-modal__name{display:flex;flex:1;flex-direction:column;gap:1px;min-width:0}.zbwc-org-modal__name strong{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zbwc-org-modal__name span{color:#646970;font-size:12px}.zbwc-org-modal__current{background:#f0f0f1;border-radius:999px;color:#50575e;flex:none;font-size:11.5px;font-weight:600;padding:2px 10px}.zbwc-org-modal__tick{color:transparent;flex:none}.zbwc-org-modal__tick.is-on{color:var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__retry{margin-top:12px}.zbwc-org-modal__switch{display:flex;flex-direction:column;gap:12px;margin-top:16px}.zbwc-org-modal__switch .components-notice{margin:0}.zbwc-org-modal__note{color:#646970;font-size:12.5px;line-height:1.55;margin:0}.zbwc-org-modal__footer{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-connbox{align-items:center;display:flex;flex-wrap:wrap;gap:14px}#zbwc-app .zbwc-connbox__icon{background:#edfaef;border-radius:11px;color:#0a6b2f;display:grid;flex:none;height:44px;place-items:center;width:44px}#zbwc-app .zbwc-connbox__icon .dashicons{font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-connbox.is-warn .zbwc-connbox__icon{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-connbox__body{display:flex;flex:1;flex-direction:column;gap:3px;min-width:220px}#zbwc-app .zbwc-connbox__name{font-size:15px;font-weight:600;line-height:1.2}#zbwc-app .zbwc-connbox__meta{align-items:center;color:#646970;display:flex;flex-wrap:wrap;font-size:12.5px;gap:6px 10px}#zbwc-app .zbwc-connbox__meta code{background:#f0f0f1;border-radius:4px;font-size:11.5px;padding:1px 6px}#zbwc-app .zbwc-connbox__actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}#zbwc-app .zbwc-connbox+.components-notice{margin:12px 0 0}.zbwc-org-modal__list.is-compact{max-height:176px}#zbwc-app .zbwc-copyrow{margin:10px 0 2px}#zbwc-app .zbwc-connfields{display:flex;flex-direction:column;gap:16px;margin-top:18px}#zbwc-app .zbwc-invnotice.components-notice{margin:12px 0 0}#zbwc-app .zbwc-invnotice .components-button.is-link{font-size:inherit}#zbwc-app .zbwc-invnotice__lead{font-weight:600;margin:0 0 8px}#zbwc-app .zbwc-invnotice__steps{margin:0 0 10px;padding-left:20px}#zbwc-app .zbwc-invnotice__steps li{margin:4px 0}#zbwc-app .zbwc-invnotice__actions{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-page .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin:0 0 14px;padding:14px 15px}#zbwc-app .zbwc-page .zbwc-ob-note p{font-size:13px;line-height:1.55;margin:0}#zbwc-app .zbwc-page .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-page .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-quiet.components-button{margin-top:18px}#zbwc-app .zbwc-whpicker{align-items:flex-start;display:flex;gap:10px;max-width:560px}#zbwc-app .zbwc-whpicker .components-base-control{flex:1}#zbwc-app .zbwc-whpicker .components-button{margin-top:23px}#zbwc-app .zbwc-whwarn.components-notice{margin:0 0 14px}.zbwc-guide-modal.components-modal__frame{border-radius:14px;max-width:640px;width:calc(100% - 32px)}.zbwc-guide-modal .components-modal__content{padding:2px 28px 24px}.zbwc-guide-modal__lede{color:#646970;font-size:13.5px;line-height:1.6;margin:0 0 16px}.zbwc-guide-modal__steps{margin:0;padding-left:22px}.zbwc-guide-modal__steps li{margin:0 0 14px}.zbwc-guide-modal__steps strong{font-size:14px}.zbwc-guide-modal__steps p{color:#50575e;font-size:13.5px;line-height:1.55;margin:3px 0 0}.zbwc-guide-modal__uri{background:#f0f2f5;border-radius:8px;display:block;font-size:12px;margin-top:8px;padding:8px 10px;word-break:break-all}.zbwc-guide-modal__h{font-size:14px;margin:20px 0 8px}.zbwc-guide-modal__table{border-collapse:collapse;font-size:13px;width:100%}.zbwc-guide-modal__table td{border-bottom:1px solid #eceef1;padding:5px 10px 5px 0}.zbwc-guide-modal__table code{background:#f0f2f5;border-radius:4px;font-size:12px;padding:1px 6px}.zbwc-guide-modal__fixes{font-size:13.5px;margin:0;padding-left:20px}.zbwc-guide-modal__fixes li{color:#50575e;margin:6px 0}.zbwc-guide-modal__footer{display:flex;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-ob-guidelink.components-button{font-weight:600;margin:-6px 0 20px}#zbwc-app .zbwc-rule{border:0;border-top:1px solid #e0e2e6;margin:20px 0 14px}#zbwc-app .zbwc-subhead{color:#646970;font-size:12px;font-weight:600;letter-spacing:.06em;margin:0 0 10px;text-transform:uppercase}#zbwc-app .zbwc-activity{margin:0 0 16px}#zbwc-app .zbwc-activity__task{align-items:center;background:#fff;border:1px solid #e0e2e6;border-left:3px solid #2271b1;border-radius:8px;display:grid;gap:14px;grid-template-columns:230px minmax(120px,1fr) 3.4em minmax(0,34%);margin-bottom:6px;max-height:80px;overflow:hidden;padding:9px 14px;transition:opacity .6s ease,max-height .6s ease,padding .6s ease,margin .6s ease,border-color .3s ease}#zbwc-app .zbwc-activity__task.is-leaving{border-bottom-width:0;border-top-width:0;margin-bottom:0;max-height:0;opacity:0;padding-bottom:0;padding-top:0}#zbwc-app .zbwc-activity__task.is-done{border-left-color:#00a32a}#zbwc-app .zbwc-activity__task.is-failed{border-left-color:#d63638}#zbwc-app .zbwc-activity__label{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__bar{background:#e6e8eb;border-radius:999px;height:6px;overflow:hidden}#zbwc-app .zbwc-activity__fill{background:#2271b1;border-radius:999px;height:100%;transition:width .4s ease;width:0}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__fill{background:#00a32a}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__fill{background:#d63638}#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:zbwc-activity-slide 1.4s ease-in-out infinite;width:35%}#zbwc-app .zbwc-activity__pct{color:#1e1e1e;font-size:13px;font-variant-numeric:tabular-nums;font-weight:600;text-align:right}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__pct{color:#00a32a}#zbwc-app .zbwc-activity__meta{color:#646970;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__task.is-failed{max-height:160px}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__meta{white-space:normal}@media(max-width:782px){#zbwc-app .zbwc-activity__task{gap:6px 10px;grid-template-areas:"label pct" "bar bar" "meta meta";grid-template-columns:minmax(0,1fr) auto;max-height:160px}#zbwc-app .zbwc-activity__label{grid-area:label;white-space:normal}#zbwc-app .zbwc-activity__pct{grid-area:pct}#zbwc-app .zbwc-activity__bar{grid-area:bar}#zbwc-app .zbwc-activity__meta{grid-area:meta;white-space:normal}#zbwc-app .zbwc-activity__label{-ms-grid-column:1;-ms-grid-row:1}#zbwc-app .zbwc-activity__pct{-ms-grid-column:3;-ms-grid-row:1}#zbwc-app .zbwc-activity__bar{-ms-grid-column:1;-ms-grid-row:3;-ms-grid-column-span:3}#zbwc-app .zbwc-activity__meta{-ms-grid-column:1;-ms-grid-row:5;-ms-grid-column-span:3}#zbwc-app .zbwc-failtable,#zbwc-app .zbwc-failtable tbody,#zbwc-app .zbwc-logtable,#zbwc-app .zbwc-logtable tbody{display:block}#zbwc-app .zbwc-failtable thead,#zbwc-app .zbwc-logtable thead{display:none}#zbwc-app .zbwc-failtable tr,#zbwc-app .zbwc-logtable tr{align-items:center;display:flex;flex-wrap:wrap;gap:6px 10px;padding:10px 12px}#zbwc-app .zbwc-failtable td,#zbwc-app .zbwc-logtable td{display:block;padding:0}#zbwc-app .zbwc-failtable .zbwc-errcell,#zbwc-app .zbwc-failtable .zbwc-maptable__actions,#zbwc-app .zbwc-logtable__msg{flex-basis:100%;max-width:none}#zbwc-app .zbwc-logtable__res{color:#646970;flex-basis:100%}#zbwc-app .zbwc-logtable__res:empty{display:none}#zbwc-app .zbwc-failtable code{overflow-wrap:anywhere}#zbwc-app .zbwc-failtable__attempts:before{color:#646970;content:attr(data-label) ": "}}@keyframes zbwc-activity-slide{0%{margin-left:-35%}to{margin-left:100%}}@media(prefers-reduced-motion:reduce){#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:none;opacity:.55;width:100%}#zbwc-app .zbwc-activity__fill,#zbwc-app .zbwc-activity__task{transition:none}}
     1#zbwc-app{--zbwc-accent:#2271b1;--zbwc-border:#dcdcde;--zbwc-bg:#f6f7f7;--zbwc-ok:#00a32a;--zbwc-warn:#dba617;--zbwc-error:#d63638;--zbwc-plan-soft:#f0f6fc;--zbwc-plan-line:#c5d9ed;--zbwc-plan-tint:#dfebf7;--zbwc-bar-soft:#fdf8e3;--zbwc-bar-line:#e6d18d;--zbwc-bar-tint:#f7e8b4;--zbwc-bar-ink:#7a5d0a;color:#1e1e1e;margin:20px 20px 0 0}#zbwc-app .zbwc-boot{color:#757575;padding:40px}#zbwc-app .zbwc-nav{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:20px;padding:10px 16px}#zbwc-app .zbwc-nav__brand{align-items:center;display:flex;font-size:15px;font-weight:600;gap:8px}#zbwc-app .zbwc-nav__logo{color:var(--zbwc-accent)}#zbwc-app .zbwc-nav__sub{color:#757575;font-weight:400}#zbwc-app .zbwc-nav__tabs{display:flex;flex:1;flex-wrap:wrap;gap:4px}#zbwc-app .zbwc-nav__tab{background:transparent;border:none;border-radius:6px;color:#50575e;cursor:pointer;font-size:13px;padding:8px 14px}#zbwc-app .zbwc-nav__tab:hover{background:var(--zbwc-bg)}#zbwc-app .zbwc-nav__tab.is-active{background:var(--zbwc-accent);color:#fff}#zbwc-app .zbwc-layout.has-aside{align-items:start;display:grid;gap:24px;grid-template-columns:minmax(0,1fr) 300px}#zbwc-app .zbwc-aside{position:sticky;top:42px}#zbwc-app .zbwc-aside .zbwc-plancard{max-width:none}@media(max-width:1200px){#zbwc-app .zbwc-layout.has-aside{display:block}#zbwc-app .zbwc-aside{display:none}}#zbwc-app .zbwc-page{display:flex;flex-direction:column;gap:20px;padding-bottom:80px}#zbwc-app .zbwc-grid{display:grid;gap:16px}#zbwc-app .zbwc-grid--2{grid-template-columns:1fr 1fr}#zbwc-app .zbwc-grid--stats{grid-template-columns:repeat(4,1fr)}@media(max-width:960px){#zbwc-app .zbwc-grid--2,#zbwc-app .zbwc-grid--stats{grid-template-columns:1fr 1fr}}@media(max-width:782px){#zbwc-app .zbwc-grid--2{grid-template-columns:minmax(0,1fr)}}#zbwc-app .zbwc-section{border-radius:8px}#zbwc-app .zbwc-section__header{align-items:flex-start}#zbwc-app .zbwc-section__title{font-size:14px;margin:0}#zbwc-app .zbwc-section__desc{color:#757575;font-size:12px;margin:2px 0 0}@media(max-width:782px){#zbwc-app .zbwc-section__header{flex-wrap:wrap;row-gap:8px}#zbwc-app .zbwc-section__heading{flex:1 1 200px;min-width:0}}#zbwc-app .zbwc-section .components-base-control{margin-bottom:16px}#zbwc-app .zbwc-stat{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;padding:16px;text-align:center}#zbwc-app .zbwc-stat__value{color:var(--zbwc-accent);font-size:28px;font-weight:700}#zbwc-app .zbwc-stat__label{color:#757575;font-size:12px;margin-top:4px}#zbwc-app .zbwc-stat__hint{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-kv{border-collapse:collapse;width:100%}#zbwc-app .zbwc-kv th{color:#50575e;font-weight:500;padding:6px 0;text-align:left;width:45%}#zbwc-app .zbwc-kv td{padding:6px 0}#zbwc-app .zbwc-pill{border-radius:999px;display:inline-block;font-size:11px;font-weight:600;line-height:1.8;padding:2px 10px}#zbwc-app .zbwc-pill.is-ok{background:#edfaef;color:var(--zbwc-ok)}#zbwc-app .zbwc-pill.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-pill.is-error{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-pill.is-info{background:#f0f6fc;color:var(--zbwc-accent)}#zbwc-app .zbwc-activity{margin:0}#zbwc-app .zbwc-activity__item{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;font-size:13px;gap:10px;padding:8px 0}#zbwc-app .zbwc-activity__cat{color:#757575;font-size:10px;min-width:70px;text-transform:uppercase}#zbwc-app .zbwc-activity__msg{flex:1}#zbwc-app .zbwc-activity__time{color:#a7aaad;font-size:11px}#zbwc-app .zbwc-dot{background:var(--zbwc-accent);border-radius:50%;height:8px;width:8px}#zbwc-app .zbwc-dot.is-error{background:var(--zbwc-error)}#zbwc-app .zbwc-dot.is-warn{background:var(--zbwc-warn)}#zbwc-app .zbwc-maptable{margin-top:8px}#zbwc-app .zbwc-maptable__toolbar{margin-bottom:10px}#zbwc-app .zbwc-maptable__actions{display:flex;gap:6px}#zbwc-app .zbwc-maptable__scope{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-maptable__add{margin-top:12px;max-width:360px}@media(max-width:782px){#zbwc-app .zbwc-maptable{overflow-x:auto}#zbwc-app table.zbwc-maptable{display:block}#zbwc-app .zbwc-maptable__toolbar .components-button{height:auto;min-height:36px;text-align:left;white-space:normal}}#zbwc-app .zbwc-logtable td{font-size:12px;vertical-align:top}#zbwc-app .zbwc-nowrap{white-space:nowrap}#zbwc-app .zbwc-errcell{color:var(--zbwc-error);font-size:12px;max-width:420px}#zbwc-app .zbwc-filters{align-items:flex-end;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:12px}#zbwc-app .zbwc-filters .components-base-control{margin-bottom:0;min-width:160px}#zbwc-app .zbwc-pager{align-items:center;color:#50575e;display:flex;font-size:12px;gap:12px;justify-content:flex-end;margin-top:12px}#zbwc-app .zbwc-muted{color:#646970;font-size:13px}#zbwc-app .zbwc-actions{margin-top:12px}#zbwc-app .zbwc-upgrade-banner{border-radius:8px;margin:0 0 20px}#zbwc-app .zbwc-upgrade-banner .components-notice__content{margin:0;width:100%}#zbwc-app .zbwc-plans{align-items:start;display:grid;gap:24px;grid-template-columns:1fr 1fr;margin-top:8px}@media(max-width:900px){#zbwc-app .zbwc-plans{grid-template-columns:1fr}}#zbwc-app .zbwc-plans__card{background:#fff;border:1px solid var(--zbwc-border);border-radius:12px;padding:24px;position:relative}#zbwc-app .zbwc-plans__card.is-featured{border:2px solid var(--zbwc-accent);padding-top:30px}#zbwc-app .zbwc-plans__ribbon{background:var(--zbwc-accent);border-radius:999px;color:#fff;font-size:11px;font-weight:700;left:50%;letter-spacing:.5px;padding:4px 16px;position:absolute;top:0;transform:translate(-50%,-50%);white-space:nowrap}#zbwc-app .zbwc-plans__head{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-plans__head h3{font-size:20px;margin:0}#zbwc-app .zbwc-plans__current{background:#edfaef;border-radius:999px;color:#00611c;font-size:12px;font-weight:600;padding:4px 14px}#zbwc-app .zbwc-plans__price{margin:14px 0 18px}#zbwc-app .zbwc-plans__price strong{font-size:34px;font-weight:700;line-height:1}#zbwc-app .zbwc-plans__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plans__list li{align-items:flex-start;color:#1e1e1e;display:flex;font-size:14px;gap:10px;margin-bottom:10px}#zbwc-app .zbwc-plans__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plans__list li.is-no{color:#646970}#zbwc-app .zbwc-plans__list li.is-no .dashicons{color:#a7aaad}#zbwc-app .zbwc-plans__note{background:var(--zbwc-bg);border-radius:8px;color:#50575e;font-size:13px;margin:0;padding:14px 16px}#zbwc-app .zbwc-plans__cta.components-button.is-primary,#zbwc-app .zbwc-plans__cta.components-button.is-secondary{font-size:14px;font-weight:600;height:44px;justify-content:center;width:100%}#zbwc-app .zbwc-plans__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plans__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-planbar{align-items:center;background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-left:4px solid var(--zbwc-warn);border-radius:10px;display:flex;flex-wrap:wrap;gap:14px;margin:0 0 20px;padding:12px 16px}#zbwc-app .zbwc-planbar.is-urgent{border-color:var(--zbwc-warn);border-left-width:4px}#zbwc-app .zbwc-planbar__icon{align-items:center;background:var(--zbwc-bar-tint);border-radius:50%;color:var(--zbwc-bar-ink);display:flex;flex:none;height:32px;justify-content:center;width:32px}#zbwc-app .zbwc-planbar__text{align-items:baseline;display:flex;flex:1;flex-wrap:wrap;gap:10px;min-width:240px}#zbwc-app .zbwc-planbar__text strong{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-planbar__text span{color:#50575e;font-size:13px}#zbwc-app .zbwc-planbar__actions{align-items:center;display:flex;gap:8px;margin-left:auto}#zbwc-app .zbwc-plancard{background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-radius:10px;border-top:3px solid var(--zbwc-warn);max-width:420px;padding:20px 22px 18px}#zbwc-app .zbwc-plancard__chip{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);display:inline-block;font-size:11px;font-weight:700;letter-spacing:.4px;padding:3px 12px}#zbwc-app .zbwc-plancard__title{font-size:17px;margin:12px 0 6px}#zbwc-app .zbwc-plancard__desc{color:#50575e;font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-plancard__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plancard__list li{align-items:flex-start;color:#3c434a;display:flex;font-size:13px;gap:8px;margin-bottom:7px}#zbwc-app .zbwc-plancard__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plancard__cta.components-button.is-primary{font-weight:600;height:40px;justify-content:center;width:100%}#zbwc-app .zbwc-plancard__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plancard__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-quotachip{background:#edfaef;border-radius:999px;color:#0a6b22;display:inline-block;font-size:12px;font-weight:600;padding:3px 12px;white-space:nowrap}#zbwc-app .zbwc-quotachip.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-quotachip.is-full{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-quotanote{margin:0 0 16px}#zbwc-app .zbwc-pagehead{align-items:center;display:flex;gap:16px;justify-content:space-between}#zbwc-app .zbwc-pagehead__title{font-size:20px;font-weight:700;letter-spacing:-.01em;margin:0}#zbwc-app .zbwc-statbar{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:grid;grid-template-columns:repeat(5,1fr);overflow:hidden}#zbwc-app .zbwc-statbar__cell{align-items:flex-start;border-right:1px solid var(--zbwc-border);display:flex;flex-direction:column;gap:6px;padding:16px 18px}#zbwc-app .zbwc-statbar__cell:last-child{border-right:none}#zbwc-app .zbwc-statbar__label{color:#757575;font-size:11px;letter-spacing:.06em;text-transform:uppercase}#zbwc-app .zbwc-statbar__value{font-size:26px;font-variant-numeric:tabular-nums;font-weight:700;line-height:1}#zbwc-app .zbwc-statbar__value--sm{font-size:17px}#zbwc-app .zbwc-statbar__value.is-bad{color:var(--zbwc-error)}#zbwc-app .zbwc-statbar__sub{color:#757575;font-size:12px}@media(max-width:1100px){#zbwc-app .zbwc-statbar{grid-template-columns:repeat(3,1fr)}#zbwc-app .zbwc-statbar__cell:nth-child(3){border-right:none}}@media(max-width:600px){#zbwc-app .zbwc-statbar{grid-template-columns:1fr 1fr}}#zbwc-app .zbwc-masterbar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-left:4px solid var(--zbwc-ok);border-radius:8px;display:flex;gap:20px;padding:16px 18px}#zbwc-app .zbwc-masterbar.is-off{background:var(--zbwc-bg);border-left-color:var(--zbwc-warn)}#zbwc-app .zbwc-masterbar__text{display:flex;flex:1;flex-direction:column;gap:4px}#zbwc-app .zbwc-masterbar__title{align-items:center;display:flex;font-size:15px;font-weight:600;gap:10px}#zbwc-app .zbwc-masterbar__desc{color:#646970;font-size:13px}#zbwc-app .zbwc-flow{display:flex;flex-direction:column}#zbwc-app .zbwc-flow__row{border-bottom:1px solid #f0f0f1;padding:14px 0}#zbwc-app .zbwc-flow__row:last-child{border-bottom:none}#zbwc-app .zbwc-flow__row:first-child{padding-top:4px}#zbwc-app .zbwc-flow__row.is-disabled{opacity:.65}#zbwc-app .zbwc-flow__main{align-items:center;display:flex;gap:14px}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{align-items:center;display:flex;gap:10px;min-width:0}#zbwc-app .zbwc-flow__event{flex:0 0 46%}#zbwc-app .zbwc-flow__doc{flex:1}#zbwc-app .zbwc-flow__label{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-flow__arrow{color:#a7aaad;flex:none}#zbwc-app .zbwc-flow__badge{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);flex:none;font-size:11px;font-weight:700;letter-spacing:.4px;padding:2px 9px}#zbwc-app .zbwc-flow__switch{flex:none;margin-left:auto}#zbwc-app .zbwc-flow .components-base-control,#zbwc-app .zbwc-flow .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-flow__hint{color:#757575;font-size:12px;margin:6px 0 0;padding-left:2px}@media(max-width:782px){#zbwc-app .zbwc-flow__main{flex-wrap:wrap}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{flex:1 1 100%}#zbwc-app .zbwc-flow__arrow{display:none}}#zbwc-app .zbwc-note{align-items:flex-start;background:#fff;border:1px solid var(--zbwc-border);border-radius:10px;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-note p{color:#3c434a;font-size:14px;line-height:1.55;margin:0}#zbwc-app .zbwc-note .dashicons{align-items:center;border-radius:9px;display:flex;flex:none;font-size:19px;height:34px;justify-content:center;width:34px}#zbwc-app .zbwc-note.is-info .dashicons{background:var(--zbwc-plan-tint);color:var(--zbwc-accent)}#zbwc-app .zbwc-note.is-warn .dashicons{background:var(--zbwc-bar-tint);color:var(--zbwc-bar-ink)}#zbwc-app .zbwc-subnav{display:grid;gap:4px;grid-auto-columns:1fr;grid-auto-flow:column}#zbwc-app .zbwc-subnav__tab{background:transparent;border:none;border-radius:8px;color:#50575e;cursor:pointer;font-size:14px;font-weight:500;padding:10px 16px;text-align:center;transition:background-color .12s ease}#zbwc-app .zbwc-subnav__tab:hover{background:rgba(0,0,0,.03)}#zbwc-app .zbwc-subnav__tab.is-active{background:#e4e5e7;color:#1e1e1e;font-weight:600}#zbwc-app .zbwc-subnav__tab:focus-visible{outline:2px solid var(--zbwc-accent);outline-offset:2px}@media(max-width:782px){#zbwc-app .zbwc-subnav{grid-auto-columns:auto;grid-auto-flow:row}}#zbwc-app .zbwc-savebar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;bottom:0;box-shadow:0 -2px 10px rgba(0,0,0,.06);display:flex;justify-content:space-between;margin-top:8px;padding:12px 16px;position:sticky}#zbwc-app .zbwc-savebar__msg{font-weight:500}#zbwc-app .zbwc-savebar__actions{display:flex;gap:8px}#zbwc-app .zbwc-code{background:#1e1e1e;border-radius:6px;color:#7fd;display:block;font-size:12px;padding:10px 12px;word-break:break-all}#zbwc-app .zbwc-linkbtn,#zbwc-app .zbwc-loading{align-items:center;display:inline-flex;gap:8px}#zbwc-app .zbwc-linkbtn{background:none;border:none;color:var(--zbwc-accent);cursor:pointer}#zbwc-app .zbwc-loading{color:#757575;padding:30px}#zbwc-app .zbwc-orglist__row{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;justify-content:space-between;padding:8px 0}#zbwc-app .zbwc-subhead{border-bottom:1px solid #f0f0f1;color:#757575;font-size:11px;letter-spacing:.5px;margin:22px 0 10px;padding-bottom:5px}#zbwc-app .zbwc-onboarding{--ob-ink:#1a1a1a;--ob-muted:#656a70;--ob-line:#e3e5e7;--ob-soft:#f7f8f8;margin:0 auto;max-width:1120px;padding-bottom:60px}#zbwc-app .zbwc-onboarding__bar{align-items:center;display:flex;gap:10px;padding:4px 0 20px}#zbwc-app .zbwc-onboarding__logo.dashicons{color:var(--zbwc-accent);font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-onboarding__brand{font-size:16px;font-weight:700;letter-spacing:-.01em}#zbwc-app .zbwc-onboarding__titlerow{align-items:center;display:flex;gap:16px;justify-content:space-between;margin-bottom:16px}#zbwc-app .zbwc-onboarding__title{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0}#zbwc-app .zbwc-onboarding__chip{background:#e9eaeb;border-radius:999px;color:#50575e;font-size:12px;font-weight:500;padding:5px 14px}#zbwc-app .zbwc-onboarding__card{background:#fff;border:1px solid var(--ob-line);border-radius:16px;display:grid;grid-template-columns:minmax(0,1fr) 330px;overflow:hidden}#zbwc-app .zbwc-onboarding__panel{padding:34px 38px 38px}#zbwc-app .zbwc-onboarding__aside{background:var(--ob-soft);border-left:1px solid var(--ob-line);padding:32px 28px}@media(max-width:960px){#zbwc-app .zbwc-onboarding__card{grid-template-columns:1fr}#zbwc-app .zbwc-onboarding__panel{padding:26px 22px 30px}#zbwc-app .zbwc-onboarding__aside{border-left:none;border-top:1px solid var(--ob-line)}}#zbwc-app .zbwc-ob-eyebrow{color:var(--ob-muted);font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-ob-heading{color:var(--ob-ink);font-size:30px;font-weight:700;letter-spacing:-.02em;line-height:1.18;margin:0 0 12px}#zbwc-app .zbwc-ob-lead{color:#4a5056;font-size:14.5px;line-height:1.6;margin:0 0 26px;max-width:46em}#zbwc-app .zbwc-ob-footnote{color:var(--ob-muted);font-size:12.5px;line-height:1.6;margin:18px 0 0}#zbwc-app .zbwc-ob-quiet{margin-top:16px}#zbwc-app .zbwc-ob-icon{align-items:center;background:var(--ob-soft);border:1px solid var(--ob-line);border-radius:11px;color:var(--ob-ink);display:flex;flex:none;height:42px;justify-content:center;width:42px}#zbwc-app .zbwc-ob-icon .dashicons{font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-features{list-style:none;margin:0 0 30px;padding:0}#zbwc-app .zbwc-ob-feature{display:flex;gap:16px;margin-bottom:22px}#zbwc-app .zbwc-ob-feature h3{font-size:15px;font-weight:600;margin:0 0 4px}#zbwc-app .zbwc-ob-feature p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:0}#zbwc-app .zbwc-ob-aside__title{font-size:14px;font-weight:700;margin:0}#zbwc-app .zbwc-ob-progress{list-style:none;margin:18px 0 0;padding:0}#zbwc-app .zbwc-ob-progress__item{display:flex;gap:14px;padding-bottom:22px;position:relative}#zbwc-app .zbwc-ob-progress__item:last-child{padding-bottom:0}#zbwc-app .zbwc-ob-progress__item:before{background:#dcdee0;bottom:6px;content:"";left:15px;position:absolute;top:34px;width:1px}#zbwc-app .zbwc-ob-progress__item:last-child:before{display:none}#zbwc-app .zbwc-ob-progress__num{align-items:center;background:#fff;border:1px solid #d5d7d9;border-radius:50%;color:#8c8f94;display:flex;flex:none;font-size:12px;font-weight:600;height:31px;justify-content:center;position:relative;width:31px}#zbwc-app .zbwc-ob-progress__num .dashicons{font-size:18px;height:18px;width:18px}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__num,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__num{background:var(--ob-ink);border-color:var(--ob-ink);color:#fff}#zbwc-app .zbwc-ob-progress__text{display:flex;flex-direction:column;gap:3px;padding-top:4px}#zbwc-app .zbwc-ob-progress__text strong{color:#8c8f94;font-size:13.5px;font-weight:600}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__text strong,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__text strong{color:var(--ob-ink)}#zbwc-app .zbwc-ob-progress__text span{color:var(--ob-muted);font-size:12.5px;line-height:1.5}#zbwc-app .zbwc-ob-facts{border-top:1px solid var(--ob-line);list-style:none;margin:22px 0 0;padding:18px 0 0}#zbwc-app .zbwc-ob-facts li{color:var(--ob-muted);font-size:12.5px;line-height:1.55;margin:0 0 10px;padding-left:14px;position:relative}#zbwc-app .zbwc-ob-facts li:before{content:"·";left:4px;position:absolute}#zbwc-app .zbwc-ob-count{border-top:1px solid var(--ob-line);font-size:13px;font-weight:600;margin:22px 0 0;padding-top:18px}#zbwc-app .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin-top:14px;padding:14px 15px}#zbwc-app .zbwc-ob-note p{font-size:12.5px;line-height:1.55;margin:0}#zbwc-app .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-ob-note.is-warn{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-ob-note.is-plan{background:#edfaef;color:#0a6b22}#zbwc-app .zbwc-ob-badge{border-radius:999px;flex:none;font-size:12px;font-weight:600;padding:4px 12px;white-space:nowrap}#zbwc-app .zbwc-ob-badge.is-ok{background:#d8f5e3;color:#0a6b2f}#zbwc-app .zbwc-ob-badge.is-blue{background:#e4f0fb;color:#1c5a99}#zbwc-app .zbwc-ob-badge.is-muted{background:#eceded;color:#646970}#zbwc-app .zbwc-ob-option{border:1px solid var(--ob-line);border-radius:12px;padding:20px 22px}#zbwc-app .zbwc-ob-option.is-done{background:var(--ob-soft)}#zbwc-app .zbwc-ob-option__head{align-items:center;display:flex;gap:12px;justify-content:space-between}#zbwc-app .zbwc-ob-option__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-option__desc{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:8px 0 0}#zbwc-app .zbwc-ob-option .zbwc-kv{margin-top:10px}#zbwc-app .zbwc-ob-howto{color:#3c434a;font-size:13.5px;line-height:1.7;margin:18px 0 0;padding-left:18px}#zbwc-app .zbwc-ob-howto li{margin-bottom:10px}#zbwc-app .zbwc-ob-copyrow{align-items:center;display:flex;gap:8px;margin-top:8px}#zbwc-app .zbwc-ob-copyrow .zbwc-code{flex:1;margin:0}#zbwc-app .zbwc-ob-fields{border-top:1px solid var(--ob-line);display:grid;gap:18px;margin-top:20px;padding-top:20px}#zbwc-app .zbwc-ob-fields .components-base-control{margin-bottom:0}#zbwc-app .zbwc-ob-actions{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}#zbwc-app .zbwc-ob-actions .components-button .dashicons{font-size:17px;height:17px;margin-right:6px;width:17px}#zbwc-app .zbwc-ob-divider{background:var(--ob-line);height:1px;margin:26px 0 18px}#zbwc-app .zbwc-ob-disclosure{align-items:center;background:none;border:none;color:var(--zbwc-accent);cursor:pointer;display:inline-flex;font-size:13.5px;font-weight:500;gap:6px;padding:0}#zbwc-app .zbwc-ob-disclosure .dashicons{font-size:16px;height:16px;width:16px}#zbwc-app .zbwc-ob-advanced{background:var(--ob-soft);border-radius:12px;margin-top:16px;padding:18px 20px}#zbwc-app .zbwc-ob-advanced p{color:var(--ob-muted);font-size:13px;line-height:1.6;margin:0 0 14px}#zbwc-app .zbwc-ob-advanced .components-base-control{margin-bottom:14px}#zbwc-app .zbwc-ob-resource{border:1px solid var(--ob-line);border-radius:12px;margin-bottom:14px;transition:border-color .12s ease,box-shadow .12s ease}#zbwc-app .zbwc-ob-resource.is-on{border-color:#c4c7ca;box-shadow:0 1px 2px rgba(0,0,0,.04)}#zbwc-app .zbwc-ob-resource__main{align-items:flex-start;cursor:pointer;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-ob-resource__box{cursor:default;display:flex;padding-top:3px}#zbwc-app .zbwc-ob-resource .components-base-control,#zbwc-app .zbwc-ob-resource .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-ob-resource__body{flex:1}#zbwc-app .zbwc-ob-resource__head{align-items:center;display:flex;flex-wrap:wrap;gap:10px}#zbwc-app .zbwc-ob-resource__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-resource__body p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:5px 0 0}#zbwc-app .zbwc-ob-resource__prefs{cursor:default;display:grid;gap:18px;grid-template-columns:1fr 1fr;margin-top:16px}@media(max-width:782px){#zbwc-app .zbwc-ob-resource__prefs{grid-template-columns:1fr}}#zbwc-app .zbwc-ob-inline-notice.components-notice{border-radius:10px;margin:4px 0 0}#zbwc-app .zbwc-ob-done{background:#fff;border:1px solid var(--ob-line);border-radius:16px;margin:0 auto;max-width:620px;padding:44px 44px 36px;text-align:center}#zbwc-app .zbwc-ob-done__check{align-items:center;background:#e2f5e9;border-radius:50%;display:inline-flex;height:76px;justify-content:center;margin-bottom:20px;width:76px}#zbwc-app .zbwc-ob-done__check .dashicons{align-items:center;background:#2f7a48;border-radius:50%;color:#fff;display:flex;font-size:34px;height:54px;justify-content:center;width:54px}#zbwc-app .zbwc-ob-done h2{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0 0 10px}#zbwc-app .zbwc-ob-done .zbwc-ob-lead{margin:0 auto 26px;max-width:34em}#zbwc-app .zbwc-ob-done .zbwc-ob-note{text-align:left}#zbwc-app .zbwc-ob-summary{border:1px solid var(--ob-line);border-radius:12px;list-style:none;margin:0;overflow:hidden;padding:0;text-align:left}#zbwc-app .zbwc-ob-summary__row{align-items:center;border-bottom:1px solid var(--ob-line);display:flex;gap:12px;padding:15px 18px}#zbwc-app .zbwc-ob-summary__row:last-child{border-bottom:none}#zbwc-app .zbwc-ob-summary__icon{display:flex}#zbwc-app .zbwc-ob-summary__icon .dashicons{color:#2f7a48;font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-summary__icon.is-muted .dashicons{color:#a7aaad}#zbwc-app .zbwc-ob-summary__text{display:flex;flex:1;flex-direction:column;gap:2px}#zbwc-app .zbwc-ob-summary__text strong{font-size:14px}#zbwc-app .zbwc-ob-summary__text span{color:var(--ob-muted);font-size:12.5px}#zbwc-app .zbwc-ob-done__actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:24px}#zbwc-app .zbwc-ob-nav{align-items:center;display:flex;justify-content:space-between;margin-top:22px}#zbwc-app .zbwc-onboarding .components-button.is-primary{background:var(--ob-ink);border-color:var(--ob-ink);border-radius:8px;box-shadow:none;font-size:13.5px;font-weight:600;height:42px;padding:0 20px}#zbwc-app .zbwc-onboarding .components-button.is-primary:focus:not(:disabled),#zbwc-app .zbwc-onboarding .components-button.is-primary:hover:not(:disabled){background:#000;border-color:#000;color:#fff}#zbwc-app .zbwc-onboarding .components-button.is-primary:disabled,#zbwc-app .zbwc-onboarding .components-button.is-primary[aria-disabled=true]{background:#e6e7e8;border-color:#e6e7e8;color:#a7aaad}#zbwc-app .zbwc-onboarding .components-button.is-secondary{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #d5d7d9;color:var(--ob-ink);font-size:13.5px;font-weight:600;height:42px;padding:0 18px}#zbwc-app .zbwc-onboarding .components-button.is-secondary:hover:not(:disabled){background:var(--ob-soft);box-shadow:inset 0 0 0 1px #b9bcbf;color:var(--ob-ink)}#zbwc-app .zbwc-onboarding .components-button.is-tertiary{border-radius:8px;font-weight:600;height:42px;padding:0 14px}#zbwc-app .zbwc-toasts{bottom:20px;left:160px;position:fixed;z-index:100000}@media(max-width:782px){#zbwc-app .zbwc-toasts{left:16px;right:16px;width:auto}}.zbwc-upgrade-modal.components-modal__frame{border-radius:12px;max-width:32rem;position:relative;width:calc(100% - 32px)}.zbwc-upgrade-modal .components-modal__header{border-bottom:none;height:auto;justify-content:center;padding:28px 32px 0}.zbwc-upgrade-modal .components-modal__header-heading-container{justify-content:center}.zbwc-upgrade-modal .components-modal__header-heading{font-size:22px;font-weight:700;line-height:1.3;text-align:center}.zbwc-upgrade-modal .components-modal__header .components-button.has-icon{margin:0;position:absolute;right:12px;top:10px}.zbwc-upgrade-modal .components-modal__content{padding:0 32px 28px}.zbwc-upgrade-modal .components-modal__content:before{content:none}.zbwc-upgrade-modal__body{text-align:center}.zbwc-upgrade-modal__lead{color:#3c434a;font-size:14px;line-height:1.6;margin:12px auto 0;max-width:34rem}.zbwc-upgrade-modal__note{color:#646970;font-size:13px;line-height:1.6;margin:8px auto 0;max-width:34rem}.zbwc-upgrade-modal__offer{align-items:baseline;display:flex;gap:8px;justify-content:center;margin:20px 0 16px}.zbwc-upgrade-modal__plan{font-size:15px;font-weight:600}.zbwc-upgrade-modal__price{font-size:30px;font-weight:700;line-height:1}.zbwc-upgrade-modal__per{color:#646970;font-size:14px;font-weight:400}.zbwc-upgrade-modal__cta.components-button.is-primary{border-radius:8px;display:flex;font-size:15px;font-weight:600;height:48px;justify-content:center;width:100%}.zbwc-upgrade-modal__later.components-button{color:#50575e;display:block;margin:14px auto 0;text-decoration:underline}.zbwc-upgrade-modal__trust{align-items:center;border-top:1px solid #e0e0e0;color:#646970;display:flex;font-size:13px;gap:6px;justify-content:center;margin:22px 0 0;padding-top:18px}.zbwc-upgrade-modal__trust .dashicons{font-size:16px;height:16px;width:16px}.zbwc-org-modal.components-modal__frame{border-radius:14px;max-width:480px;width:calc(100% - 32px)}.zbwc-org-modal .components-modal__header-heading{font-size:17px;font-weight:600}.zbwc-org-modal .components-modal__content{padding:2px 28px 24px}.zbwc-org-modal__lead{color:#646970;font-size:13px;line-height:1.6;margin:0 0 16px}.zbwc-org-modal__loading{align-items:center;color:#646970;display:flex;gap:8px;padding:16px 0 8px}.zbwc-org-modal__loading .components-spinner{margin:0}.zbwc-org-modal__list{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow-y:auto}.zbwc-org-modal__row{align-items:center;background:#fff;border:1px solid #dcdcde;border-radius:10px;color:inherit;cursor:pointer;display:flex;font:inherit;gap:12px;padding:12px 14px;text-align:left;transition:border-color .12s ease,box-shadow .12s ease;width:100%}.zbwc-org-modal__row:hover{border-color:#8c8f94}.zbwc-org-modal__row:focus-visible{outline:2px solid var(--wp-admin-theme-color,#3858e9);outline-offset:1px}.zbwc-org-modal__row.is-selected{border-color:var(--wp-admin-theme-color,#3858e9);box-shadow:0 0 0 1px var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__icon{background:#f0f0f1;border-radius:9px;color:#50575e;display:grid;flex:none;height:36px;place-items:center;width:36px}.zbwc-org-modal__icon .dashicons{font-size:18px;height:18px;width:18px}.zbwc-org-modal__name{display:flex;flex:1;flex-direction:column;gap:1px;min-width:0}.zbwc-org-modal__name strong{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zbwc-org-modal__name span{color:#646970;font-size:12px}.zbwc-org-modal__current{background:#f0f0f1;border-radius:999px;color:#50575e;flex:none;font-size:11.5px;font-weight:600;padding:2px 10px}.zbwc-org-modal__tick{color:transparent;flex:none}.zbwc-org-modal__tick.is-on{color:var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__retry{margin-top:12px}.zbwc-org-modal__switch{display:flex;flex-direction:column;gap:12px;margin-top:16px}.zbwc-org-modal__switch .components-notice{margin:0}.zbwc-org-modal__note{color:#646970;font-size:12.5px;line-height:1.55;margin:0}.zbwc-org-modal__footer{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-connbox{align-items:center;display:flex;flex-wrap:wrap;gap:14px}#zbwc-app .zbwc-connbox__icon{background:#edfaef;border-radius:11px;color:#0a6b2f;display:grid;flex:none;height:44px;place-items:center;width:44px}#zbwc-app .zbwc-connbox__icon .dashicons{font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-connbox.is-warn .zbwc-connbox__icon{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-connbox__body{display:flex;flex:1;flex-direction:column;gap:3px;min-width:220px}#zbwc-app .zbwc-connbox__name{font-size:15px;font-weight:600;line-height:1.2}#zbwc-app .zbwc-connbox__meta{align-items:center;color:#646970;display:flex;flex-wrap:wrap;font-size:12.5px;gap:6px 10px}#zbwc-app .zbwc-connbox__meta code{background:#f0f0f1;border-radius:4px;font-size:11.5px;padding:1px 6px}#zbwc-app .zbwc-connbox__actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}#zbwc-app .zbwc-connbox+.components-notice{margin:12px 0 0}.zbwc-org-modal__list.is-compact{max-height:176px}#zbwc-app .zbwc-copyrow{margin:10px 0 2px}#zbwc-app .zbwc-connfields{display:flex;flex-direction:column;gap:16px;margin-top:18px}#zbwc-app .zbwc-invnotice.components-notice{margin:12px 0 0}#zbwc-app .zbwc-invnotice .components-button.is-link{font-size:inherit}#zbwc-app .zbwc-invnotice__lead{font-weight:600;margin:0 0 8px}#zbwc-app .zbwc-invnotice__steps{margin:0 0 10px;padding-left:20px}#zbwc-app .zbwc-invnotice__steps li{margin:4px 0}#zbwc-app .zbwc-invnotice__actions{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-page .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin:0 0 14px;padding:14px 15px}#zbwc-app .zbwc-page .zbwc-ob-note p{font-size:13px;line-height:1.55;margin:0}#zbwc-app .zbwc-page .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-page .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-quiet.components-button{margin-top:18px}#zbwc-app .zbwc-whpicker{align-items:flex-start;display:flex;gap:10px;max-width:560px}#zbwc-app .zbwc-whpicker .components-base-control{flex:1}#zbwc-app .zbwc-whpicker .components-button{margin-top:23px}#zbwc-app .zbwc-whwarn.components-notice{margin:0 0 14px}.zbwc-guide-modal.components-modal__frame{border-radius:14px;max-width:640px;width:calc(100% - 32px)}.zbwc-guide-modal .components-modal__content{padding:2px 28px 24px}.zbwc-guide-modal__lede{color:#646970;font-size:13.5px;line-height:1.6;margin:0 0 16px}.zbwc-guide-modal__steps{margin:0;padding-left:22px}.zbwc-guide-modal__steps li{margin:0 0 14px}.zbwc-guide-modal__steps strong{font-size:14px}.zbwc-guide-modal__steps p{color:#50575e;font-size:13.5px;line-height:1.55;margin:3px 0 0}.zbwc-guide-modal__uri{background:#f0f2f5;border-radius:8px;display:block;font-size:12px;margin-top:8px;padding:8px 10px;word-break:break-all}.zbwc-guide-modal__h{font-size:14px;margin:20px 0 8px}.zbwc-guide-modal__table{border-collapse:collapse;font-size:13px;width:100%}.zbwc-guide-modal__table td{border-bottom:1px solid #eceef1;padding:5px 10px 5px 0}.zbwc-guide-modal__table code{background:#f0f2f5;border-radius:4px;font-size:12px;padding:1px 6px}.zbwc-guide-modal__fixes{font-size:13.5px;margin:0;padding-left:20px}.zbwc-guide-modal__fixes li{color:#50575e;margin:6px 0}.zbwc-guide-modal__footer{display:flex;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-ob-guidelink.components-button{font-weight:600;margin:-6px 0 20px}#zbwc-app .zbwc-rule{border:0;border-top:1px solid #e0e2e6;margin:20px 0 14px}#zbwc-app .zbwc-subhead{color:#646970;font-size:12px;font-weight:600;letter-spacing:.06em;margin:0 0 10px;text-transform:uppercase}#zbwc-app .zbwc-activity{margin:0 0 16px}#zbwc-app .zbwc-activity__task{align-items:center;background:#fff;border:1px solid #e0e2e6;border-left:3px solid #2271b1;border-radius:8px;display:grid;gap:14px;grid-template-columns:230px minmax(120px,1fr) 3.4em minmax(0,34%);margin-bottom:6px;max-height:80px;overflow:hidden;padding:9px 14px;transition:opacity .6s ease,max-height .6s ease,padding .6s ease,margin .6s ease,border-color .3s ease}#zbwc-app .zbwc-activity__task.is-leaving{border-bottom-width:0;border-top-width:0;margin-bottom:0;max-height:0;opacity:0;padding-bottom:0;padding-top:0}#zbwc-app .zbwc-activity__task.is-done{border-left-color:#00a32a}#zbwc-app .zbwc-activity__task.is-failed{border-left-color:#d63638}#zbwc-app .zbwc-activity__label{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__bar{background:#e6e8eb;border-radius:999px;height:6px;overflow:hidden}#zbwc-app .zbwc-activity__fill{background:#2271b1;border-radius:999px;height:100%;transition:width .4s ease;width:0}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__fill{background:#00a32a}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__fill{background:#d63638}#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:zbwc-activity-slide 1.4s ease-in-out infinite;width:35%}#zbwc-app .zbwc-activity__pct{color:#1e1e1e;font-size:13px;font-variant-numeric:tabular-nums;font-weight:600;text-align:right}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__pct{color:#00a32a}#zbwc-app .zbwc-activity__meta{color:#646970;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__task.is-failed{max-height:160px}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__meta{white-space:normal}@media(max-width:782px){#zbwc-app .zbwc-activity__task{gap:6px 10px;grid-template-areas:"label pct" "bar bar" "meta meta";grid-template-columns:minmax(0,1fr) auto;max-height:160px}#zbwc-app .zbwc-activity__label{grid-area:label;white-space:normal}#zbwc-app .zbwc-activity__pct{grid-area:pct}#zbwc-app .zbwc-activity__bar{grid-area:bar}#zbwc-app .zbwc-activity__meta{grid-area:meta;white-space:normal}#zbwc-app .zbwc-activity__label{-ms-grid-column:1;-ms-grid-row:1}#zbwc-app .zbwc-activity__pct{-ms-grid-column:3;-ms-grid-row:1}#zbwc-app .zbwc-activity__bar{-ms-grid-column:1;-ms-grid-row:3;-ms-grid-column-span:3}#zbwc-app .zbwc-activity__meta{-ms-grid-column:1;-ms-grid-row:5;-ms-grid-column-span:3}#zbwc-app .zbwc-failtable,#zbwc-app .zbwc-failtable tbody,#zbwc-app .zbwc-logtable,#zbwc-app .zbwc-logtable tbody{display:block}#zbwc-app .zbwc-failtable thead,#zbwc-app .zbwc-logtable thead{display:none}#zbwc-app .zbwc-failtable tr,#zbwc-app .zbwc-logtable tr{align-items:center;display:flex;flex-wrap:wrap;gap:6px 10px;padding:10px 12px}#zbwc-app .zbwc-failtable td,#zbwc-app .zbwc-logtable td{display:block;padding:0}#zbwc-app .zbwc-failtable .zbwc-errcell,#zbwc-app .zbwc-failtable .zbwc-maptable__actions,#zbwc-app .zbwc-logtable__msg{flex-basis:100%;max-width:none}#zbwc-app .zbwc-logtable__res{color:#646970;flex-basis:100%}#zbwc-app .zbwc-logtable__res:empty{display:none}#zbwc-app .zbwc-failtable code{overflow-wrap:anywhere}#zbwc-app .zbwc-failtable__attempts:before{color:#646970;content:attr(data-label) ": "}}@keyframes zbwc-activity-slide{0%{margin-left:-35%}to{margin-left:100%}}@media(prefers-reduced-motion:reduce){#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:none;opacity:.55;width:100%}#zbwc-app .zbwc-activity__fill,#zbwc-app .zbwc-activity__task{transition:none}}
  • erp7-order-sync-for-zoho-books/tags/1.0.4/build/index.js

    r3733769 r3733904  
    55(0,a.__)("%1$s — %2$s only","erp7-order-sync-for-zoho-books"),o,t):(0,a.sprintf)(/* translators: %s: two-letter country code. */ /* translators: %s: two-letter country code. */
    66(0,a.__)("%s — any state","erp7-order-sync-for-zoho-books"),o):(0,a.__)("Any country","erp7-order-sync-for-zoho-books")}(n))),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:n.zoho_tax_id||"",options:p,onChange:e=>r(o=>o.map((o,t)=>t===l?{...o,zoho_tax_id:e}:o))})),(0,o.createElement)("td",{className:"zbwc-maptable__actions"},(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>(async o=>{const t=c.find(e=>e.tax_id===o.zoho_tax_id);try{await y("/mappings/tax",{id:o.id||0,woo_tax_title:o.woo_tax_title,woo_tax_rate:o.woo_tax_rate,woo_country:o.woo_country||"",woo_state:o.woo_state||"",zoho_tax_id:o.zoho_tax_id,zoho_tax_name:t?t.tax_name:""}),e((0,a.__)("Tax mapping saved.","erp7-order-sync-for-zoho-books"),"success"),_()}catch(o){e(z(o),"error")}})(t[l]),disabled:!n.zoho_tax_id},(0,a.__)("Save","erp7-order-sync-for-zoho-books")),n.id?(0,o.createElement)(s.Button,{variant:"tertiary",size:"small",isDestructive:!0,onClick:()=>(async o=>{try{await f(`/mappings/tax/${o}`),_()}catch(o){e(z(o),"error")}})(n.id)},(0,a.__)("Delete","erp7-order-sync-for-zoho-books")):null))))),g.length>0&&(0,o.createElement)("div",{className:"zbwc-maptable__add"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Add a WooCommerce rate","erp7-order-sync-for-zoho-books"),value:"",options:[{label:(0,a.__)("— Choose a rate —","erp7-order-sync-for-zoho-books"),value:""},...g.map((e,o)=>({label:(0,a.sprintf)(/* translators: 1: WooCommerce tax rate label. 2: tax rate percentage. */ /* translators: 1: WooCommerce tax rate label. 2: tax rate percentage. */
    7 (0,a._x)("%1$s (%2$s%%)","WooCommerce tax rate option","erp7-order-sync-for-zoho-books"),e.label,e.rate),value:String(o)}))],onChange:e=>{return""!==e&&(o=g[Number(e)],void r(e=>[...e,{id:0,woo_tax_title:o.label,woo_tax_rate:o.rate,woo_country:o.country,woo_state:o.state,zoho_tax_id:""}]));var o}})))}function C(){const e=l(),[t,r]=(0,n.useState)(null),[c,i]=(0,n.useState)([]);if((0,n.useEffect)(()=>{(async()=>{try{const[e,o]=await Promise.all([b("/mappings/gateway"),b("/zoho/accounts")]);r(e),i(o.accounts||[])}catch(o){e(z(o),"error"),r({gateways:[],paymentModes:[]})}})()},[]),null===t)return(0,o.createElement)(s.Spinner,null);const d=[{label:(0,a.__)("— Default (cash) —","erp7-order-sync-for-zoho-books"),value:""},...t.paymentModes.map(e=>({label:e,value:e}))],m=[{label:(0,a.__)("— Store default —","erp7-order-sync-for-zoho-books"),value:""},...c.map(e=>({label:e.account_name,value:e.account_id}))],u=(e,o)=>r(t=>({...t,gateways:t.gateways.map((t,r)=>r===e?{...t,...o}:t)}));return(0,o.createElement)("table",{className:"widefat striped zbwc-maptable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Payment gateway","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Zoho payment mode","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Deposit account","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null))),(0,o.createElement)("tbody",null,0===t.gateways.length&&(0,o.createElement)("tr",null,(0,o.createElement)("td",{colSpan:"4"},(0,a.__)("No gateways detected.","erp7-order-sync-for-zoho-books"))),t.gateways.map((r,n)=>(0,o.createElement)("tr",{key:r.gateway},(0,o.createElement)("td",null,r.title),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:r.zoho_payment_method||"",options:d,onChange:e=>u(n,{zoho_payment_method:e})})),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:r.deposit_account_id||"",options:m,onChange:e=>u(n,{deposit_account_id:e})})),(0,o.createElement)("td",null,(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>(async o=>{try{await y("/mappings/gateway",{gateway:o.gateway,zoho_payment_method:o.zoho_payment_method,deposit_account_id:o.deposit_account_id}),e((0,a.__)("Gateway mapping saved.","erp7-order-sync-for-zoho-books"),"success")}catch(o){e(z(o),"error")}})(t.gateways[n])},(0,a.__)("Save","erp7-order-sync-for-zoho-books")))))))}function S({inventoryRefused:e=!1}){const t=l(),[r,c]=(0,n.useState)(null),[i,d]=(0,n.useState)([]);if((0,n.useEffect)(()=>{(async()=>{try{const[e,o]=await Promise.all([b("/mappings/location"),b("/zoho/warehouses")]);c(e.locations||[]),d(o.warehouses||[])}catch(e){t(z(e),"error"),c([])}})()},[]),null===r)return null;const m=[{label:(0,a.__)("— Default warehouse —","erp7-order-sync-for-zoho-books"),value:""},...i.map(e=>({label:e.warehouse_name,value:e.warehouse_id}))],u=(e,o)=>c(t=>t.map((t,r)=>r===e?{...t,zoho_warehouse_id:o}:t)),h=async e=>{const o=i.find(o=>o.warehouse_id===e.zoho_warehouse_id);try{await y("/mappings/location",{location_id:e.location_id,location_name:e.location_name,zoho_warehouse_id:e.zoho_warehouse_id,zoho_warehouse_name:o?o.warehouse_name:""}),t((0,a.__)("Location mapping saved.","erp7-order-sync-for-zoho-books"),"success")}catch(e){t(z(e),"error")}},_=e?(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1,className:"zbwc-whwarn"},(0,a.__)("Stock cannot sync yet — Zoho declined inventory tracking for this organization. Enable Inventory in Zoho Books first (steps at the top of this page); the warehouse chosen below is saved for when it is on.","erp7-order-sync-for-zoho-books")):null;if(r.length<=1){const e=r[0]||{location_id:"default",location_name:"",zoho_warehouse_id:""};return(0,o.createElement)(w,{title:(0,a.__)("Zoho warehouse","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Where this store's stock lives in Zoho Books. WooCommerce keeps a single stock pool, so there is nothing to configure on the Woo side.","erp7-order-sync-for-zoho-books")},_,0===i.length?(0,o.createElement)("p",{className:"zbwc-muted"},(0,a.__)("Your organization has no warehouses yet — they arrive with Zoho Inventory. Until then, stock uses Zoho's default warehouse and there is nothing to choose.","erp7-order-sync-for-zoho-books")):(0,o.createElement)("div",{className:"zbwc-whpicker"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Warehouse","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Stock reads from and writes to this warehouse. Leave on default to use Zoho's primary warehouse.","erp7-order-sync-for-zoho-books"),value:e.zoho_warehouse_id||"",options:m,onChange:e=>u(0,e)}),(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>h(r[0])},(0,a.__)("Save","erp7-order-sync-for-zoho-books"))))}return(0,o.createElement)(w,{title:(0,a.__)("Zoho warehouses","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Each of your locations writes its stock into its own Zoho warehouse.","erp7-order-sync-for-zoho-books")},_,(0,o.createElement)("table",{className:"widefat striped zbwc-maptable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Location","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Zoho warehouse","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null))),(0,o.createElement)("tbody",null,r.map((e,t)=>(0,o.createElement)("tr",{key:e.location_id},(0,o.createElement)("td",null,e.location_name),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:e.zoho_warehouse_id||"",options:m,onChange:e=>u(t,e)})),(0,o.createElement)("td",null,(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>h(r[t])},(0,a.__)("Save","erp7-order-sync-for-zoho-books"))))))))}function x({label:e,help:t,endpoint:r,listKey:c,optionValue:l,optionLabel:i,value:d,onChange:m,placeholder:u=(0,a.__)("— Select —","erp7-order-sync-for-zoho-books"),filter:h,formatLabel:_}){const[p,y]=(0,n.useState)([]),[f,z]=(0,n.useState)(!0);(0,n.useEffect)(()=>{let e=!0;return z(!0),b(r).then(o=>{if(!e)return;let t=o[c]||[];h&&(t=t.filter(h)),y(t)}).catch(()=>{}).finally(()=>e&&z(!1)),()=>{e=!1}},[r]);const g=[{label:f?(0,a.__)("Loading…","erp7-order-sync-for-zoho-books"):u,value:""},...p.map(e=>({label:_?_(e):String(e[i]),value:String(e[l])}))];return(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:e,help:t,value:d||"",options:g,onChange:m,disabled:f})}function B({status:e="info",children:t}){const r={ok:"is-ok",warn:"is-warn",error:"is-error",info:"is-info"}[e]||"is-info";return(0,o.createElement)("span",{className:"zbwc-pill "+r},t)}function Z({label:e=(0,a.__)("Loading…","erp7-order-sync-for-zoho-books")}){return(0,o.createElement)("div",{className:"zbwc-loading"},(0,o.createElement)(s.Spinner,null),(0,o.createElement)("span",null,e))}function T({error:e,onRetry:t}){return e?(0,o.createElement)(s.Notice,{status:"error",isDismissible:!1,className:"zbwc-error"},e,t&&(0,o.createElement)(o.Fragment,null," ",(0,o.createElement)(s.Button,{variant:"link",onClick:t},(0,a.__)("Retry","erp7-order-sync-for-zoho-books")))):null}const I=[];function P(){return[...I].sort((e,o)=>e.order-o.order)}const M={Section:w,SaveBar:v,TaxMappings:N,GatewayMappings:C,LocationMappings:S,ZohoSelect:x,Loading:Z,ErrorNotice:T,StatusPill:B,useToast:l,useAsync:g,useHashRoute:k,useSettings:E,apiGet:b,apiPost:y,apiDelete:f,errorMessage:z},R=[{slug:"dashboard",label:(0,a.__)("Dashboard","erp7-order-sync-for-zoho-books")},{slug:"orders",label:(0,a.__)("Orders","erp7-order-sync-for-zoho-books")},{slug:"customers",label:(0,a.__)("Customers","erp7-order-sync-for-zoho-books")},{slug:"products",label:(0,a.__)("Products & Inventory","erp7-order-sync-for-zoho-books")},{slug:"logs",label:(0,a.__)("Logs","erp7-order-sync-for-zoho-books")}],D={slug:"connection",label:(0,a.__)("Connection","erp7-order-sync-for-zoho-books")},O={slug:"plan",label:(0,a.__)("Plan","erp7-order-sync-for-zoho-books")};function A({route:e,navigate:t,connection:r}){return(0,o.createElement)("div",{className:"zbwc-nav"},(0,o.createElement)("div",{className:"zbwc-nav__brand"},(0,o.createElement)("span",{className:"zbwc-nav__logo dashicons dashicons-book-alt"}),(0,o.createElement)("span",null,"Zoho Integration ",(0,o.createElement)("span",{className:"zbwc-nav__sub"},"for WooCommerce"))),(0,o.createElement)("nav",{className:"zbwc-nav__tabs"},function(){const e=h.plan&&h.plan.enforced?[D,O]:[D];return[...R,...P().map(({slug:e,label:o})=>({slug:e,label:o})),...e]}().map(r=>(0,o.createElement)("button",{key:r.slug,type:"button",className:"zbwc-nav__tab"+(e===r.slug?" is-active":""),onClick:()=>t(r.slug)},r.label))),(0,o.createElement)("div",{className:"zbwc-nav__status"},r&&r.connected?(0,o.createElement)("span",{className:"zbwc-pill is-ok"},(0,a.__)("Connected","erp7-order-sync-for-zoho-books")):(0,o.createElement)("span",{className:"zbwc-pill is-warn"},(0,a.__)("Not connected","erp7-order-sync-for-zoho-books"))))}function W(){return h.plan||{}}function H(){return W().usage||{}}function F(){return!!W().enforced&&!!H().limited}function U(e){const o=W();return!o.enforced||(o.features||[]).includes(e)}function L(e){if(!F())return null;const o=(H().quotas||{})[e];return o&&o.limit?o:null}const $={orders:(0,a.__)("orders","erp7-order-sync-for-zoho-books"),products:(0,a.__)("products","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("customers","erp7-order-sync-for-zoho-books")};function j(e){return e.length<2?e[0]||"":e.slice(0,-1).join(", ")+(0,a.__)(" and ","erp7-order-sync-for-zoho-books")+e[e.length-1]}function q(e){return $[e]||e}function G(){const e=H().quotas||{};return j(Object.keys($).filter(o=>e[o]&&e[o].limit).map(o=>`${e[o].limit} ${q(o)}`))}function Y({title:e,description:t,bullets:r=[]}){const n=W(),c=!n.plan||"free"===n.plan;return(0,o.createElement)("div",{className:"zbwc-plancard"},(0,o.createElement)("span",{className:"zbwc-plancard__chip"},c?(0,a.__)("FREE PLAN","erp7-order-sync-for-zoho-books"):(0,a.__)("NOT IN YOUR PLAN","erp7-order-sync-for-zoho-books")),(0,o.createElement)("h3",{className:"zbwc-plancard__title"},e),t&&(0,o.createElement)("p",{className:"zbwc-plancard__desc"},t),r.length>0&&(0,o.createElement)("ul",{className:"zbwc-plancard__list"},r.map(e=>(0,o.createElement)("li",{key:e},(0,o.createElement)("span",{className:"dashicons dashicons-yes","aria-hidden":"true"}),e))),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-plancard__cta",href:"#/plan"},(0,a.__)("Upgrade to Pro","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-plancard__trust"},(0,o.createElement)("span",{className:"dashicons dashicons-lock","aria-hidden":"true"}),(0,a.__)("Secure checkout via Stripe","erp7-order-sync-for-zoho-books")))}const K="zbwc_plan_modal_later";function V({title:e,message:t,onUpgrade:r,onDismiss:n,urgent:c=!1}){return(0,o.createElement)("div",{className:"zbwc-planbar"+(c?" is-urgent":"")},(0,o.createElement)("span",{className:"zbwc-planbar__icon dashicons dashicons-unlock","aria-hidden":"true"}),(0,o.createElement)("div",{className:"zbwc-planbar__text"},(0,o.createElement)("strong",null,e),(0,o.createElement)("span",null,t)),(0,o.createElement)("div",{className:"zbwc-planbar__actions"},n&&(0,o.createElement)(s.Button,{variant:"tertiary",onClick:n},(0,a.__)("Not now","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-planbar__cta",onClick:r},(0,a.__)("Upgrade for unlimited sync","erp7-order-sync-for-zoho-books"))))}function J({route:e,navigate:t}){const r=H(),{full:c,nearly:i}=function(e){const o=[],t=[];return Object.entries(e).forEach(([e,r])=>{r.limit&&(r.exhausted?o.push(q(e)):r.used/r.limit>=.5&&t.push(q(e)))}),{full:o,nearly:t}}(r.quotas||{});let d="base";c.length?d="limit":i.length&&(d="nudge");const m=`zbwc_upgrade_${d}_${r.period||""}`,u=F()&&"plan"!==e,[h,_]=(0,n.useState)(()=>function(e,o){try{const t=parseInt(window.localStorage.getItem(e),10);return!!t&&("limit"!==o||Date.now()-t<864e5)}catch(e){return!1}}(m,d)),[p,f]=(0,n.useState)(null),[g,k]=(0,n.useState)(!1),[E,w]=(0,n.useState)(!1),[v,N]=(0,n.useState)(!1),[C,S]=(0,n.useState)(()=>function(){try{const e=parseInt(window.localStorage.getItem(K),10);return!!e&&Date.now()-e<432e6}catch(e){return!1}}()),x=l(),B=(0,n.useRef)(!0);(0,n.useEffect)(()=>{B.current?B.current=!1:F()&&"plan"!==e&&(N(!1),w(!0))},[e]);const Z=u&&"limit"===d,T=u&&!v&&!C&&(Z||E);if((0,n.useEffect)(()=>{T&&null===p&&b("/plan/available").then(e=>f((e.plans||[]).find(e=>!e.isFree)||!1)).catch(()=>f(!1))},[T,p]),!u)return null;const I=()=>{w(!1),N(!0)},P=()=>t("plan"),M="nudge"!==d||h?(0,o.createElement)(V,{title:(0,a.__)("You're on the free plan","erp7-order-sync-for-zoho-books"),message:(0,a.sprintf)(/* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */
     7(0,a._x)("%1$s (%2$s%%)","WooCommerce tax rate option","erp7-order-sync-for-zoho-books"),e.label,e.rate),value:String(o)}))],onChange:e=>{return""!==e&&(o=g[Number(e)],void r(e=>[...e,{id:0,woo_tax_title:o.label,woo_tax_rate:o.rate,woo_country:o.country,woo_state:o.state,zoho_tax_id:""}]));var o}})))}function C(){const e=l(),[t,r]=(0,n.useState)(null),[c,i]=(0,n.useState)([]);if((0,n.useEffect)(()=>{(async()=>{try{const[e,o]=await Promise.all([b("/mappings/gateway"),b("/zoho/accounts")]);r(e),i(o.accounts||[])}catch(o){e(z(o),"error"),r({gateways:[],paymentModes:[]})}})()},[]),null===t)return(0,o.createElement)(s.Spinner,null);const d=[{label:(0,a.__)("— Default (cash) —","erp7-order-sync-for-zoho-books"),value:""},...t.paymentModes.map(e=>({label:e,value:e}))],m=[{label:(0,a.__)("— Store default —","erp7-order-sync-for-zoho-books"),value:""},...c.map(e=>({label:e.account_name,value:e.account_id}))],u=(e,o)=>r(t=>({...t,gateways:t.gateways.map((t,r)=>r===e?{...t,...o}:t)}));return(0,o.createElement)("table",{className:"widefat striped zbwc-maptable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Payment gateway","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Zoho payment mode","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Deposit account","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null))),(0,o.createElement)("tbody",null,0===t.gateways.length&&(0,o.createElement)("tr",null,(0,o.createElement)("td",{colSpan:"4"},(0,a.__)("No gateways detected.","erp7-order-sync-for-zoho-books"))),t.gateways.map((r,n)=>(0,o.createElement)("tr",{key:r.gateway},(0,o.createElement)("td",null,r.title),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:r.zoho_payment_method||"",options:d,onChange:e=>u(n,{zoho_payment_method:e})})),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:r.deposit_account_id||"",options:m,onChange:e=>u(n,{deposit_account_id:e})})),(0,o.createElement)("td",null,(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>(async o=>{try{await y("/mappings/gateway",{gateway:o.gateway,zoho_payment_method:o.zoho_payment_method,deposit_account_id:o.deposit_account_id}),e((0,a.__)("Gateway mapping saved.","erp7-order-sync-for-zoho-books"),"success")}catch(o){e(z(o),"error")}})(t.gateways[n])},(0,a.__)("Save","erp7-order-sync-for-zoho-books")))))))}function S({inventoryRefused:e=!1}){const t=l(),[r,c]=(0,n.useState)(null),[i,d]=(0,n.useState)([]);if((0,n.useEffect)(()=>{(async()=>{try{const[e,o]=await Promise.all([b("/mappings/location"),b("/zoho/warehouses")]);c(e.locations||[]),d(o.warehouses||[])}catch(e){t(z(e),"error"),c([])}})()},[]),null===r)return null;const m=[{label:(0,a.__)("— Default warehouse —","erp7-order-sync-for-zoho-books"),value:""},...i.map(e=>({label:e.warehouse_name,value:e.warehouse_id}))],u=(e,o)=>c(t=>t.map((t,r)=>r===e?{...t,zoho_warehouse_id:o}:t)),h=async e=>{const o=i.find(o=>o.warehouse_id===e.zoho_warehouse_id);try{await y("/mappings/location",{location_id:e.location_id,location_name:e.location_name,zoho_warehouse_id:e.zoho_warehouse_id,zoho_warehouse_name:o?o.warehouse_name:""}),t((0,a.__)("Location mapping saved.","erp7-order-sync-for-zoho-books"),"success")}catch(e){t(z(e),"error")}},_=e?(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1,className:"zbwc-whwarn"},(0,a.__)("Stock cannot sync yet — Zoho declined inventory tracking for this organization. Enable Inventory in Zoho Books first (steps at the top of this page); the warehouse chosen below is saved for when it is on.","erp7-order-sync-for-zoho-books")):null;if(r.length<=1){const e=r[0]||{location_id:"default",location_name:"",zoho_warehouse_id:""};return(0,o.createElement)(w,{title:(0,a.__)("Zoho warehouse","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Where this store's stock lives in Zoho Books. WooCommerce keeps a single stock pool, so there is nothing to configure on the Woo side.","erp7-order-sync-for-zoho-books")},_,0===i.length?(0,o.createElement)("p",{className:"zbwc-muted"},(0,a.__)("Your organization has no warehouses yet — they arrive with Zoho Inventory. Until then, stock uses Zoho's default warehouse and there is nothing to choose.","erp7-order-sync-for-zoho-books")):(0,o.createElement)("div",{className:"zbwc-whpicker"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Warehouse","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Stock reads from and writes to this warehouse. Leave on default to use Zoho's primary warehouse.","erp7-order-sync-for-zoho-books"),value:e.zoho_warehouse_id||"",options:m,onChange:e=>u(0,e)}),(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>h(r[0])},(0,a.__)("Save","erp7-order-sync-for-zoho-books"))))}return(0,o.createElement)(w,{title:(0,a.__)("Zoho warehouses","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Each of your locations writes its stock into its own Zoho warehouse.","erp7-order-sync-for-zoho-books")},_,(0,o.createElement)("table",{className:"widefat striped zbwc-maptable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Location","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Zoho warehouse","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null))),(0,o.createElement)("tbody",null,r.map((e,t)=>(0,o.createElement)("tr",{key:e.location_id},(0,o.createElement)("td",null,e.location_name),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:e.zoho_warehouse_id||"",options:m,onChange:e=>u(t,e)})),(0,o.createElement)("td",null,(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>h(r[t])},(0,a.__)("Save","erp7-order-sync-for-zoho-books"))))))))}function x({label:e,help:t,endpoint:r,listKey:c,optionValue:l,optionLabel:i,value:d,onChange:m,placeholder:u=(0,a.__)("— Select —","erp7-order-sync-for-zoho-books"),filter:h,formatLabel:_}){const[p,y]=(0,n.useState)([]),[f,z]=(0,n.useState)(!0);(0,n.useEffect)(()=>{let e=!0;return z(!0),b(r).then(o=>{if(!e)return;let t=o[c]||[];h&&(t=t.filter(h)),y(t)}).catch(()=>{}).finally(()=>e&&z(!1)),()=>{e=!1}},[r]);const g=[{label:f?(0,a.__)("Loading…","erp7-order-sync-for-zoho-books"):u,value:""},...p.map(e=>({label:_?_(e):String(e[i]),value:String(e[l])}))];return(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:e,help:t,value:d||"",options:g,onChange:m,disabled:f})}function B({status:e="info",children:t}){const r={ok:"is-ok",warn:"is-warn",error:"is-error",info:"is-info"}[e]||"is-info";return(0,o.createElement)("span",{className:"zbwc-pill "+r},t)}function Z({label:e=(0,a.__)("Loading…","erp7-order-sync-for-zoho-books")}){return(0,o.createElement)("div",{className:"zbwc-loading"},(0,o.createElement)(s.Spinner,null),(0,o.createElement)("span",null,e))}function T({error:e,onRetry:t}){return e?(0,o.createElement)(s.Notice,{status:"error",isDismissible:!1,className:"zbwc-error"},e,t&&(0,o.createElement)(o.Fragment,null," ",(0,o.createElement)(s.Button,{variant:"link",onClick:t},(0,a.__)("Retry","erp7-order-sync-for-zoho-books")))):null}const I=[];function P(){return[...I].sort((e,o)=>e.order-o.order)}const M={Section:w,SaveBar:v,TaxMappings:N,GatewayMappings:C,LocationMappings:S,ZohoSelect:x,Loading:Z,ErrorNotice:T,StatusPill:B,useToast:l,useAsync:g,useHashRoute:k,useSettings:E,apiGet:b,apiPost:y,apiDelete:f,errorMessage:z},D=[{slug:"dashboard",label:(0,a.__)("Dashboard","erp7-order-sync-for-zoho-books")},{slug:"orders",label:(0,a.__)("Orders","erp7-order-sync-for-zoho-books")},{slug:"customers",label:(0,a.__)("Customers","erp7-order-sync-for-zoho-books")},{slug:"products",label:(0,a.__)("Products & Inventory","erp7-order-sync-for-zoho-books")},{slug:"logs",label:(0,a.__)("Logs","erp7-order-sync-for-zoho-books")}],R={slug:"connection",label:(0,a.__)("Connection","erp7-order-sync-for-zoho-books")},O={slug:"plan",label:(0,a.__)("Plan","erp7-order-sync-for-zoho-books")};function A({route:e,navigate:t,connection:r}){return(0,o.createElement)("div",{className:"zbwc-nav"},(0,o.createElement)("div",{className:"zbwc-nav__brand"},(0,o.createElement)("span",{className:"zbwc-nav__logo dashicons dashicons-book-alt"}),(0,o.createElement)("span",null,"Zoho Integration ",(0,o.createElement)("span",{className:"zbwc-nav__sub"},"for WooCommerce"))),(0,o.createElement)("nav",{className:"zbwc-nav__tabs"},function(){const e=h.plan&&h.plan.enforced?[R,O]:[R];return[...D,...P().map(({slug:e,label:o})=>({slug:e,label:o})),...e]}().map(r=>(0,o.createElement)("button",{key:r.slug,type:"button",className:"zbwc-nav__tab"+(e===r.slug?" is-active":""),onClick:()=>t(r.slug)},r.label))),(0,o.createElement)("div",{className:"zbwc-nav__status"},r&&r.connected?(0,o.createElement)("span",{className:"zbwc-pill is-ok"},(0,a.__)("Connected","erp7-order-sync-for-zoho-books")):(0,o.createElement)("span",{className:"zbwc-pill is-warn"},(0,a.__)("Not connected","erp7-order-sync-for-zoho-books"))))}function W(){return h.plan||{}}function F(){return W().usage||{}}function H(){return!!W().enforced&&!!F().limited}function U(e){const o=W();return!o.enforced||(o.features||[]).includes(e)}function L(e){if(!H())return null;const o=(F().quotas||{})[e];return o&&o.limit?o:null}const $={orders:(0,a.__)("orders","erp7-order-sync-for-zoho-books"),products:(0,a.__)("products","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("customers","erp7-order-sync-for-zoho-books")};function j(e){return e.length<2?e[0]||"":e.slice(0,-1).join(", ")+(0,a.__)(" and ","erp7-order-sync-for-zoho-books")+e[e.length-1]}function q(e){return $[e]||e}function G(){const e=F().quotas||{};return j(Object.keys($).filter(o=>e[o]&&e[o].limit).map(o=>`${e[o].limit} ${q(o)}`))}function Y({title:e,description:t,bullets:r=[]}){const n=W(),c=!n.plan||"free"===n.plan;return(0,o.createElement)("div",{className:"zbwc-plancard"},(0,o.createElement)("span",{className:"zbwc-plancard__chip"},c?(0,a.__)("FREE PLAN","erp7-order-sync-for-zoho-books"):(0,a.__)("NOT IN YOUR PLAN","erp7-order-sync-for-zoho-books")),(0,o.createElement)("h3",{className:"zbwc-plancard__title"},e),t&&(0,o.createElement)("p",{className:"zbwc-plancard__desc"},t),r.length>0&&(0,o.createElement)("ul",{className:"zbwc-plancard__list"},r.map(e=>(0,o.createElement)("li",{key:e},(0,o.createElement)("span",{className:"dashicons dashicons-yes","aria-hidden":"true"}),e))),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-plancard__cta",href:"#/plan"},(0,a.__)("Upgrade to Pro","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-plancard__trust"},(0,o.createElement)("span",{className:"dashicons dashicons-lock","aria-hidden":"true"}),(0,a.__)("Secure checkout via Stripe","erp7-order-sync-for-zoho-books")))}const K="zbwc_plan_modal_later";function V({title:e,message:t,onUpgrade:r,onDismiss:n,urgent:c=!1}){return(0,o.createElement)("div",{className:"zbwc-planbar"+(c?" is-urgent":"")},(0,o.createElement)("span",{className:"zbwc-planbar__icon dashicons dashicons-unlock","aria-hidden":"true"}),(0,o.createElement)("div",{className:"zbwc-planbar__text"},(0,o.createElement)("strong",null,e),(0,o.createElement)("span",null,t)),(0,o.createElement)("div",{className:"zbwc-planbar__actions"},n&&(0,o.createElement)(s.Button,{variant:"tertiary",onClick:n},(0,a.__)("Not now","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-planbar__cta",onClick:r},(0,a.__)("Upgrade for unlimited sync","erp7-order-sync-for-zoho-books"))))}function J({route:e,navigate:t}){const r=F(),{full:c,nearly:i}=function(e){const o=[],t=[];return Object.entries(e).forEach(([e,r])=>{r.limit&&(r.exhausted?o.push(q(e)):r.used/r.limit>=.5&&t.push(q(e)))}),{full:o,nearly:t}}(r.quotas||{});let d="base";c.length?d="limit":i.length&&(d="nudge");const m=`zbwc_upgrade_${d}_${r.period||""}`,u=H()&&"plan"!==e,[h,_]=(0,n.useState)(()=>function(e,o){try{const t=parseInt(window.localStorage.getItem(e),10);return!!t&&("limit"!==o||Date.now()-t<864e5)}catch(e){return!1}}(m,d)),[p,f]=(0,n.useState)(null),[g,k]=(0,n.useState)(!1),[E,w]=(0,n.useState)(!1),[v,N]=(0,n.useState)(!1),[C,S]=(0,n.useState)(()=>function(){try{const e=parseInt(window.localStorage.getItem(K),10);return!!e&&Date.now()-e<432e6}catch(e){return!1}}()),x=l(),B=(0,n.useRef)(!0);(0,n.useEffect)(()=>{B.current?B.current=!1:H()&&"plan"!==e&&(N(!1),w(!0))},[e]);const Z=u&&"limit"===d,T=u&&!v&&!C&&(Z||E);if((0,n.useEffect)(()=>{T&&null===p&&b("/plan/available").then(e=>f((e.plans||[]).find(e=>!e.isFree)||!1)).catch(()=>f(!1))},[T,p]),!u)return null;const I=()=>{w(!1),N(!0)},P=()=>t("plan"),M="nudge"!==d||h?(0,o.createElement)(V,{title:(0,a.__)("You're on the free plan","erp7-order-sync-for-zoho-books"),message:(0,a.sprintf)(/* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */
    88(0,a.__)("%s sync free every month.","erp7-order-sync-for-zoho-books"),G()),onUpgrade:P}):(0,o.createElement)(V,{urgent:!0,title:(0,a.__)("Over halfway through your free plan","erp7-order-sync-for-zoho-books"),message:(0,a.sprintf)(/* translators: 1: meter names, e.g. "orders and products". 2: month. */ /* translators: 1: meter names, e.g. "orders and products". 2: month. */
    99(0,a.__)("You have used more than half your %1$s allowance for %2$s.","erp7-order-sync-for-zoho-books"),j(i),r.period),onUpgrade:P,onDismiss:()=>{try{window.localStorage.setItem(m,String(Date.now()))}catch(e){}_(!0)}});return T?(0,o.createElement)(o.Fragment,null,M,(0,o.createElement)(s.Modal,{title:Z?(0,a.__)("Your free allowance is used up","erp7-order-sync-for-zoho-books"):(0,a.__)("Enjoy unlimited monthly sync","erp7-order-sync-for-zoho-books"),onRequestClose:I,className:"zbwc-upgrade-modal"},(0,o.createElement)("div",{className:"zbwc-upgrade-modal__body"},Z?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("p",{className:"zbwc-upgrade-modal__lead"},(0,a.sprintf)(/* translators: 1: meter names, e.g. "orders and products". 2: month. */ /* translators: 1: meter names, e.g. "orders and products". 2: month. */
    1010(0,a.__)("You have used all your %1$s for %2$s, so those syncs have stopped. They start again on the 1st, or straight away on Pro.","erp7-order-sync-for-zoho-books"),j(c),r.period)),(0,o.createElement)("p",{className:"zbwc-upgrade-modal__note"},(0,a.__)("Nothing has been lost — anything already sent to Zoho Books stays there, and re-syncing an existing record is always free.","erp7-order-sync-for-zoho-books"))):(0,o.createElement)("p",{className:"zbwc-upgrade-modal__lead"},(0,a.sprintf)(/* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */
    11 (0,a.__)("The free plan includes %s synced every month. Pro removes every limit and adds inventory and warehouse sync.","erp7-order-sync-for-zoho-books"),G())),p&&(0,o.createElement)("div",{className:"zbwc-upgrade-modal__offer"},(0,o.createElement)("span",{className:"zbwc-upgrade-modal__plan"},p.name),(0,o.createElement)("span",{className:"zbwc-upgrade-modal__price"},(R=p.priceCents,D=p.currency,new Intl.NumberFormat(void 0,{style:"currency",currency:(D||"usd").toUpperCase()}).format((R||0)/100))),(0,o.createElement)("span",{className:"zbwc-upgrade-modal__per"},"/ ",p.interval)),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-upgrade-modal__cta",isBusy:g,disabled:g,onClick:async()=>{if(!p)return I(),void P();k(!0);try{const e=await y("/plan/checkout",{plan:p.slug});if(e&&e.checkoutUrl)return I(),void(window.location.href=e.checkoutUrl);I(),P()}catch(e){x(z(e),"error"),k(!1)}}},(0,a.__)("Upgrade to Pro — unlimited sync","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"link",className:"zbwc-upgrade-modal__later",disabled:g,onClick:()=>{!function(){try{window.localStorage.setItem(K,String(Date.now()))}catch(e){}}(),S(!0),I()}},(0,a.__)("Maybe later","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-upgrade-modal__trust"},(0,o.createElement)("span",{className:"dashicons dashicons-lock","aria-hidden":"true"}),(0,a.__)("Secure checkout by Stripe · Cancel anytime","erp7-order-sync-for-zoho-books"))))):M;var R,D}const Q=[(0,a.__)("Unlimited orders, products & customers","erp7-order-sync-for-zoho-books"),(0,a.__)("Inventory & warehouse sync","erp7-order-sync-for-zoho-books"),(0,a.__)("Payments, refunds & fulfilment","erp7-order-sync-for-zoho-books")];function X({navigate:e}){return F()?(0,o.createElement)("aside",{className:"zbwc-aside"},(0,o.createElement)("div",{className:"zbwc-plancard"},(0,o.createElement)("span",{className:"zbwc-plancard__chip"},(0,a.__)("FREE PLAN","erp7-order-sync-for-zoho-books")),(0,o.createElement)("h3",{className:"zbwc-plancard__title"},(0,a.__)("Go unlimited with Pro","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-plancard__desc"},(0,a.sprintf)(/* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */
     11(0,a.__)("The free plan includes %s synced every month. Pro removes every limit and adds inventory and warehouse sync.","erp7-order-sync-for-zoho-books"),G())),p&&(0,o.createElement)("div",{className:"zbwc-upgrade-modal__offer"},(0,o.createElement)("span",{className:"zbwc-upgrade-modal__plan"},p.name),(0,o.createElement)("span",{className:"zbwc-upgrade-modal__price"},(D=p.priceCents,R=p.currency,new Intl.NumberFormat(void 0,{style:"currency",currency:(R||"usd").toUpperCase()}).format((D||0)/100))),(0,o.createElement)("span",{className:"zbwc-upgrade-modal__per"},"/ ",p.interval)),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-upgrade-modal__cta",isBusy:g,disabled:g,onClick:async()=>{if(!p)return I(),void P();k(!0);try{const e=await y("/plan/checkout",{plan:p.slug});if(e&&e.checkoutUrl)return I(),void(window.location.href=e.checkoutUrl);I(),P()}catch(e){x(z(e),"error"),k(!1)}}},(0,a.__)("Upgrade to Pro — unlimited sync","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"link",className:"zbwc-upgrade-modal__later",disabled:g,onClick:()=>{!function(){try{window.localStorage.setItem(K,String(Date.now()))}catch(e){}}(),S(!0),I()}},(0,a.__)("Maybe later","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-upgrade-modal__trust"},(0,o.createElement)("span",{className:"dashicons dashicons-lock","aria-hidden":"true"}),(0,a.__)("Secure checkout by Stripe · Cancel anytime","erp7-order-sync-for-zoho-books"))))):M;var D,R}const Q=[(0,a.__)("Unlimited orders, products & customers","erp7-order-sync-for-zoho-books"),(0,a.__)("Inventory & warehouse sync","erp7-order-sync-for-zoho-books"),(0,a.__)("Payments, refunds & fulfilment","erp7-order-sync-for-zoho-books")];function X({navigate:e}){return H()?(0,o.createElement)("aside",{className:"zbwc-aside"},(0,o.createElement)("div",{className:"zbwc-plancard"},(0,o.createElement)("span",{className:"zbwc-plancard__chip"},(0,a.__)("FREE PLAN","erp7-order-sync-for-zoho-books")),(0,o.createElement)("h3",{className:"zbwc-plancard__title"},(0,a.__)("Go unlimited with Pro","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-plancard__desc"},(0,a.sprintf)(/* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */
    1212(0,a.__)("%s sync free every month. Pro removes every limit.","erp7-order-sync-for-zoho-books"),G())),(0,o.createElement)("ul",{className:"zbwc-plancard__list"},Q.map(e=>(0,o.createElement)("li",{key:e},(0,o.createElement)("span",{className:"dashicons dashicons-yes","aria-hidden":"true"}),e))),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-plancard__cta",onClick:()=>e("plan")},(0,a.__)("Upgrade to Pro","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-plancard__trust"},(0,o.createElement)("span",{className:"dashicons dashicons-lock","aria-hidden":"true"}),(0,a.__)("Secure checkout via Stripe","erp7-order-sync-for-zoho-books")))):null}function ee(e){if(!e)return null;if(e instanceof Date)return isNaN(e.getTime())?null:e;if("number"==typeof e)return new Date(e);const o=String(e).trim(),t=/^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}(:\d{2})?$/.test(o)?o.replace(" ","T")+"Z":o,r=new Date(t);return isNaN(r.getTime())?null:r}function oe(e,o={dateStyle:"medium",timeStyle:"medium"}){const t=ee(e);if(!t)return e?String(e):"";try{return new Intl.DateTimeFormat(void 0,o).format(t)}catch(e){return t.toLocaleString()}}function te(e){const o=ee(e);return o?`${oe(o,{dateStyle:"full",timeStyle:"long"})} (${oe(o,{timeStyle:"medium",timeZone:"UTC"})} UTC)`:""}const re={error:"is-error",warn:"is-warn",info:"is-info",debug:"is-info"};function ne({navigate:e}){var t;const{loading:r,data:c,error:l,reload:i}=g(()=>b("/dashboard"),[]),d=c&&c.queue&&c.queue.available&&Number(c.queue.pending)||0,m=c&&c.queue&&Number(c.queue.oldestPendingMinutes)||0,u=c&&c.queue&&c.queue.available&&Number(null!==(t=c.queue.due)&&void 0!==t?t:c.queue.pending)||0,[h,_]=(0,n.useState)(!1);if((0,n.useEffect)(()=>{if(d<=0)return;const e=setInterval(i,5e3);return()=>clearInterval(e)},[d,i]),r&&!c)return(0,o.createElement)(Z,{label:(0,a.__)("Loading dashboard…","erp7-order-sync-for-zoho-books")});if(l&&!c)return(0,o.createElement)(T,{error:l,onRetry:i});const{connection:p,syncStatus:f,counts:z,logStats:k,failedCount:E,queue:v,recent:N,baseCurrency:C,usage:S,rateLimitedUntil:x=0,orders:I={}}=c,P=S&&S.limited?S.quotas||{}:null;return(0,o.createElement)("div",{className:"zbwc-page"},!p.connected&&(0,o.createElement)(w,{title:(0,a.__)("Connect to Zoho Books","erp7-order-sync-for-zoho-books")},(0,o.createElement)("p",null,(0,a.__)("You're not connected yet. Connect your Zoho Books organization to start syncing.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>e("connection")},(0,a.__)("Go to Connection","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-grid zbwc-grid--stats"},(0,o.createElement)(ae,{label:(0,a.__)("Customers mapped","erp7-order-sync-for-zoho-books"),value:z.customer_map}),(0,o.createElement)(ae,{label:(0,a.__)("Items mapped","erp7-order-sync-for-zoho-books"),value:z.item_map}),(0,o.createElement)(ae,{label:(0,a.__)("Orders synced","erp7-order-sync-for-zoho-books"),value:z.order_map,hint:I.total?(0,a.sprintf)(/* translators: %d: number of orders in WooCommerce eligible for syncing. */ /* translators: %d: number of orders in WooCommerce eligible for syncing. */
    1313(0,a.__)("of %d in WooCommerce","erp7-order-sync-for-zoho-books"),I.total):null}),(0,o.createElement)(ae,{label:(0,a.__)("Refunds / credit notes","erp7-order-sync-for-zoho-books"),value:z.refund_map})),P&&(0,o.createElement)(w,{title:(0,a.__)("This month's usage","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Re-syncing something already sent to Zoho is always free.","erp7-order-sync-for-zoho-books"),actions:(0,o.createElement)(s.Button,{variant:"secondary",href:"#/plan"},(0,a.__)("View plan","erp7-order-sync-for-zoho-books"))},(0,o.createElement)("table",{className:"zbwc-kv"},(0,o.createElement)("tbody",null,Object.entries(P).map(([e,t])=>(0,o.createElement)("tr",{key:e},(0,o.createElement)("th",null,{orders:(0,a.__)("Orders synced","erp7-order-sync-for-zoho-books"),products:(0,a.__)("Products synced","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("Customers synced","erp7-order-sync-for-zoho-books")}[e]||e),(0,o.createElement)("td",null,(0,a.sprintf)(/* translators: 1: used, 2: allowed. */ /* translators: 1: used, 2: allowed. */
    … …  
    1818(0,a.__)("Now syncing with %s.","erp7-order-sync-for-zoho-books"),w.name):(0,a.__)("Organization selected.","erp7-order-sync-for-zoho-books"),c(r,"success"),t&&t(w)}catch(e){c(z(e),"error"),k(!1)}}},isBusy:g,disabled:g||!w||!!e&&!v},v?(0,a.sprintf)(/* translators: %s: organization being switched to. */ /* translators: %s: organization being switched to. */
    1919(0,a.__)("Switch to %s","erp7-order-sync-for-zoho-books"),w.name):(0,a.__)("Use this organization","erp7-order-sync-for-zoho-books"))))}function ce(){return(0,o.createElement)("div",{className:"zbwc-ob-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-archive","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("Planning to sync stock? Enable Inventory Tracking in Zoho Books first — Settings (gear icon) → Preferences → Items. Some Zoho plans need the Zoho Inventory add-on. Products sync fine without it; stock joins in once it's on.","erp7-order-sync-for-zoho-books")))}const le={us:"com",eu:"eu",in:"in",au:"com.au",jp:"jp",ca:"ca",sa:"sa",cn:"com.cn"};function ie({region:e="us",onRechecked:t}){const r=l(),[c,i]=(0,n.useState)(!1),d="https://books.zoho."+(le[e]||"com")+"/app#/settings/preferences/items";return(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1,className:"zbwc-invnotice"},(0,o.createElement)("p",{className:"zbwc-invnotice__lead"},(0,a.__)("This Zoho organization declined stock tracking, so products sync without stock for now. To enable it:","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-invnotice__steps"},(0,o.createElement)("li",null,(0,a.__)("In Zoho Books, open Settings (the gear icon) → Preferences → Items.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,a.__)("Turn on Inventory Tracking. Some Zoho plans ask you to add the Zoho Inventory subscription here.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,a.__)("Back here, press Check again (reconnecting or switching organization also works) — otherwise it retries by itself within 12 hours.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,a.__)("Then pick a Stock-on-hand account under Products & Inventory so new items are created stock-tracked.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-invnotice__actions"},(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{i(!0);try{await y("/connection/recheck-inventory",{}),r((0,a.__)("Inventory will be tried again on the next product sync.","erp7-order-sync-for-zoho-books"),"success"),t&&t()}catch(e){r(z(e),"error")}finally{i(!1)}},isBusy:c,disabled:c},(0,a.__)("Check again","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"link",href:d,target:"_blank",rel:"noreferrer"},(0,a.__)("Open Zoho Books settings ↗","erp7-order-sync-for-zoho-books"))))}async function de(e){const o=String(e||"");if(!o)return!1;if(window.isSecureContext&&window.navigator.clipboard)try{return await window.navigator.clipboard.writeText(o),!0}catch(e){}try{const e=document.createElement("textarea");e.value=o,e.setAttribute("readonly",""),e.style.position="fixed",e.style.top="-1000px",e.style.opacity="0",document.body.appendChild(e),e.select(),e.setSelectionRange(0,o.length);const t=document.execCommand("copy");return document.body.removeChild(e),!!t}catch(e){return!1}}const me={connected:[(0,a.__)("Connected to Zoho Books.","erp7-order-sync-for-zoho-books"),"success"],error:[(0,a.__)("OAuth failed — double-check your Client ID/Secret and region.","erp7-order-sync-for-zoho-books"),"error"],denied:[(0,a.__)("Authorization was denied.","erp7-order-sync-for-zoho-books"),"error"],badstate:[(0,a.__)("The authorization session expired. Please try again.","erp7-order-sync-for-zoho-books"),"error"]};function ue({connection:e,reloadConnection:t}){const r=l(),c=e||{},[i,d]=(0,n.useState)(()=>({clientId:c.clientId||"",clientSecret:"",region:c.region||"us"})),[m,u]=(0,n.useState)(!1),[h,_]=(0,n.useState)(!1),[p,b]=(0,n.useState)(!1),g=!!c.hasRefreshToken,k=g&&!c.organizationId,E="needs_reauth"===c.connectionStatus;(0,n.useEffect)(()=>{const e=new URLSearchParams(window.location.search),o=e.get("zbwc_oauth");if(!o)return;const n=me[o];n&&r(n[0],n[1]),e.delete("zbwc_oauth"),window.history.replaceState({},"",window.location.pathname+(e.toString()?"?"+e.toString():"")+window.location.hash),"connected"===o&&t&&t()},[]);const v=(0,n.useRef)(!1);(0,n.useEffect)(()=>{k&&!v.current&&(v.current=!0,b(!0))},[k]);const N=(e,o)=>d(t=>({...t,[e]:o})),C=Object.entries(c.regions||{us:"United States (.com)"}).map(([e,o])=>({value:e,label:o})),S=async()=>{u(!0);try{await f("/connection"),v.current=!1,b(!1),r((0,a.__)("Disconnected.","erp7-order-sync-for-zoho-books"),"info"),t&&t()}catch(e){r(z(e),"error")}finally{u(!1)}},x=c.connected?(0,o.createElement)(B,{status:"ok"},(0,a.__)("Connected","erp7-order-sync-for-zoho-books")):k?(0,o.createElement)(B,{status:"warn"},(0,a.__)("Select organization","erp7-order-sync-for-zoho-books")):E?(0,o.createElement)(B,{status:"warn"},(0,a.__)("Needs re-authorization","erp7-order-sync-for-zoho-books")):(0,o.createElement)(B,{status:"warn"},(0,a.__)("Not connected","erp7-order-sync-for-zoho-books")),Z=g&&!!c.organizationId;return(0,o.createElement)("div",{className:"zbwc-page"},(Z||k)&&(0,o.createElement)(w,{title:(0,a.__)("Status","erp7-order-sync-for-zoho-books"),actions:x},Z?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("div",{className:"zbwc-connbox"+(E?" is-warn":"")},(0,o.createElement)("span",{className:"zbwc-connbox__icon","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-building"})),(0,o.createElement)("div",{className:"zbwc-connbox__body"},(0,o.createElement)("strong",{className:"zbwc-connbox__name"},c.organizationName||c.organizationId),(0,o.createElement)("span",{className:"zbwc-connbox__meta"},(0,o.createElement)("code",null,"#"+c.organizationId),(0,o.createElement)("span",null,String(c.apiDomain||c.regions&&c.regions[c.region]||c.region).replace(/^https?:\/\//,"")),c.connectedAt>0&&(0,o.createElement)("span",null,(0,a.sprintf)(/* translators: %s: date the connection was made. */ /* translators: %s: date the connection was made. */
    20 (0,a.__)("Connected %s","erp7-order-sync-for-zoho-books"),new Date(1e3*c.connectedAt).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}))))),(0,o.createElement)("div",{className:"zbwc-connbox__actions"},c.connected&&(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{u(!0);try{const e=await y("/connection/test",{});r(e.ok?(0,a.__)("Connection is healthy.","erp7-order-sync-for-zoho-books"):(0,a.__)("Zoho did not respond as expected.","erp7-order-sync-for-zoho-books"),e.ok?"success":"error")}catch(e){r(z(e),"error")}finally{u(!1)}},isBusy:m,disabled:m},(0,a.__)("Test connection","erp7-order-sync-for-zoho-books")),c.connected&&(0,o.createElement)(s.Button,{variant:"secondary",onClick:()=>b(!0),disabled:m},(0,a.__)("Change organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,onClick:S,disabled:m},(0,a.__)("Disconnect","erp7-order-sync-for-zoho-books")))),E&&(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1},(0,a.__)("Zoho stopped accepting this site's tokens. Use “Save & Reconnect to Zoho” below to authorize again — your organization and settings are kept.","erp7-order-sync-for-zoho-books")),c.inventoryRefused&&(0,o.createElement)(ie,{region:c.region,onRechecked:t})):k?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("p",{className:"zbwc-muted"},(0,a.__)("Your Zoho account is authorized — one step left: choose the organization this store syncs with.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Flex,{justify:"flex-start",gap:2,style:{marginTop:12}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>b(!0),disabled:m},(0,a.__)("Choose organization","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,onClick:S,disabled:m},(0,a.__)("Disconnect","erp7-order-sync-for-zoho-books"))))):null),(0,o.createElement)(w,{title:(0,a.__)("Zoho API client","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Create a Server-based Application in the Zoho API console, then connect this store to it.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("p",null,(0,a.__)("In the","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)(s.ExternalLink,{href:"https://api-console.zoho.com/"},(0,a.__)("Zoho API Console","erp7-order-sync-for-zoho-books"))," ",(0,a.__)("create a Server-based Application and add this exact","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("strong",null,(0,a.__)("Authorized Redirect URI","erp7-order-sync-for-zoho-books")),":"),(0,o.createElement)(s.Flex,{justify:"flex-start",align:"center",gap:2,className:"zbwc-copyrow",style:{flexWrap:"wrap"}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)("code",{className:"zbwc-code"},c.redirectUri)),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{if(await de(c.redirectUri))return _(!0),void setTimeout(()=>_(!1),2e3);r((0,a.__)("Copy failed — select the URL and copy it manually.","erp7-order-sync-for-zoho-books"),"error")}},h?(0,a.__)("Copied","erp7-order-sync-for-zoho-books"):(0,a.__)("Copy","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("div",{className:"zbwc-connfields"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Data centre / region","erp7-order-sync-for-zoho-books"),help:(0,a.__)("The Zoho domain you sign in on — .com, .eu, .in and so on.","erp7-order-sync-for-zoho-books"),value:i.region,options:C,onChange:e=>N("region",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client ID","erp7-order-sync-for-zoho-books"),value:i.clientId,onChange:e=>N("clientId",e),autoComplete:"off"}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client Secret","erp7-order-sync-for-zoho-books"),type:"password",value:i.clientSecret,placeholder:c.hasClientSecret?(0,a.__)("•••••••• (saved — leave blank to keep)","erp7-order-sync-for-zoho-books"):"",onChange:e=>N("clientSecret",e),autoComplete:"off"}),(0,o.createElement)(s.Flex,{justify:"flex-start",align:"center",gap:3,style:{flexWrap:"wrap"}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",onClick:async()=>{u(!0);try{const e={clientId:i.clientId,region:i.region};i.clientSecret&&(e.clientSecret=i.clientSecret),await y("/connection/credentials",e);const o=await y("/connection/authorize",{});window.location.href=o.authUrl}catch(e){r(z(e),"error"),u(!1)}},isBusy:m,disabled:m||!i.clientId||!i.clientSecret&&!c.hasClientSecret},g?(0,a.__)("Save & Reconnect to Zoho","erp7-order-sync-for-zoho-books"):(0,a.__)("Save & Connect to Zoho","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)("span",{className:"zbwc-muted"},(0,a.__)("Saves the credentials, then sends you to Zoho to authorize — you'll come straight back here.","erp7-order-sync-for-zoho-books")))))),p&&(0,o.createElement)(se,{currentId:c.organizationId||"",onChosen:()=>{b(!1),t&&t()},onClose:()=>b(!1)}))}function he({enabled:e=!0,reason:t,onClick:r,children:n,...a}){const c=(0,o.createElement)(s.Button,{variant:"secondary",onClick:e?r:void 0,disabled:!e,__experimentalIsFocusable:!0,...a},n);return e||!t?c:(0,o.createElement)(s.Tooltip,{text:t,delay:100,placement:"top"},c)}const _e=[{key:"lifecycle",label:(0,a.__)("Lifecycle","erp7-order-sync-for-zoho-books")},{key:"payments",label:(0,a.__)("Payments","erp7-order-sync-for-zoho-books")},{key:"taxes",label:(0,a.__)("Taxes","erp7-order-sync-for-zoho-books")},{key:"defaults",label:(0,a.__)("Defaults","erp7-order-sync-for-zoho-books")}];function pe({openTab:e}){var t,r,c;const i=E(),d=g(()=>b("/sync/stats?kind=orders"),[]),m=l(),[u,h]=(0,n.useState)(()=>_e.some(o=>o.key===e)?e:"lifecycle"),[_,p]=(0,n.useState)(!1);if(i.loading)return(0,o.createElement)(Z,{label:(0,a.__)("Loading order settings…","erp7-order-sync-for-zoho-books")});const f=e=>({checked:!!i.value(e),onChange:o=>i.set(e,o)}),k=e=>({value:i.value(e)||"",onChange:o=>i.set(e,o)}),S=d.data||{},I=!!i.value("orderSyncMasterEnabled"),P=U("payments"),M=U("refunds"),R=U("fulfillment"),D=S.needsReauth?{tone:"error",text:(0,a.__)("Reconnect needed","erp7-order-sync-for-zoho-books")}:S.connected?S.openFailures>0?{tone:"warn",text:(0,a.__)("Needs attention","erp7-order-sync-for-zoho-books")}:{tone:"ok",text:(0,a.__)("Healthy","erp7-order-sync-for-zoho-books")}:{tone:"warn",text:(0,a.__)("Not connected","erp7-order-sync-for-zoho-books")};return(0,o.createElement)("div",{className:"zbwc-page"},(0,o.createElement)(T,{error:i.error}),(0,o.createElement)("div",{className:"zbwc-pagehead"},(0,o.createElement)("h2",{className:"zbwc-pagehead__title"},(0,a.__)("Order sync","erp7-order-sync-for-zoho-books")),(0,o.createElement)(he,{enabled:!!S.connected&&I&&!_,reason:S.connected?I?"":(0,a.__)("Turn on order sync first.","erp7-order-sync-for-zoho-books"):(0,a.__)("Connect to Zoho Books first.","erp7-order-sync-for-zoho-books"),onClick:async()=>{p(!0);try{await y("/sync/run",{kind:"orders"}),m((0,a.__)("Order backfill queued.","erp7-order-sync-for-zoho-books"),"success"),setTimeout(d.reload,1200)}catch(e){m(z(e),"error")}finally{p(!1)}},isBusy:_},(0,a.__)("Run backfill","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-statbar"},(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Status","erp7-order-sync-for-zoho-books")),(0,o.createElement)(B,{status:D.tone},D.text)),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Mapped","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value"},d.loading?"—":null!==(t=S.mapped)&&void 0!==t?t:0),(0,o.createElement)("span",{className:"zbwc-statbar__sub"},(0,a.__)("orders","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Synced today","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value"},d.loading?"—":null!==(r=S.syncedToday)&&void 0!==r?r:0),(0,o.createElement)("span",{className:"zbwc-statbar__sub"},(0,a.__)("to Zoho","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Last run","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value zbwc-statbar__value--sm"},d.loading?"—":function(e){if(!e)return(0,a.__)("Never","erp7-order-sync-for-zoho-books");const o=Math.max(0,Math.floor((Date.now()-new Date(e).getTime())/1e3));if(o<60)return(0,a.__)("Just now","erp7-order-sync-for-zoho-books");const t=[[86400,(0,a.__)("d","erp7-order-sync-for-zoho-books")],[3600,(0,a.__)("h","erp7-order-sync-for-zoho-books")],[60,(0,a.__)("m","erp7-order-sync-for-zoho-books")]];for(const[e,r]of t)if(o>=e)return Math.floor(o/e)+r+(0,a.__)(" ago","erp7-order-sync-for-zoho-books");return(0,a.__)("Just now","erp7-order-sync-for-zoho-books")}(S.lastRun))),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Open failures","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value"+(S.openFailures>0?" is-bad":"")},d.loading?"—":null!==(c=S.openFailures)&&void 0!==c?c:0),(0,o.createElement)("span",{className:"zbwc-statbar__sub"},S.openFailures>0?(0,a.__)("see Logs","erp7-order-sync-for-zoho-books"):(0,a.__)("all caught up","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("div",{className:"zbwc-masterbar"+(I?"":" is-off")},(0,o.createElement)("div",{className:"zbwc-masterbar__text"},(0,o.createElement)("span",{className:"zbwc-masterbar__title"},(0,a.__)("Order sync","erp7-order-sync-for-zoho-books"),(0,o.createElement)(B,{status:I?"ok":"warn"},I?(0,a.__)("On","erp7-order-sync-for-zoho-books"):(0,a.__)("Off","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("span",{className:"zbwc-masterbar__desc"},(0,a.__)("Orders flow from WooCommerce to Zoho Books. Switch off to pause every order sync, including payments and refunds.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.Button,{variant:"secondary",isDestructive:I,onClick:()=>i.set("orderSyncMasterEnabled",!I)},I?(0,a.__)("Turn off","erp7-order-sync-for-zoho-books"):(0,a.__)("Turn on","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-subnav",role:"tablist"},_e.map(e=>(0,o.createElement)("button",{key:e.key,type:"button",role:"tab","aria-selected":u===e.key,className:"zbwc-subnav__tab"+(u===e.key?" is-active":""),onClick:()=>h(e.key)},e.label))),"lifecycle"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)("div",{className:"zbwc-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("WooCommerce is the source of truth for orders. Each row below is one event and the Zoho document it produces — orders only ever move WooCommerce → Zoho.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(w,{title:(0,a.__)("WooCommerce → Zoho Books","erp7-order-sync-for-zoho-books"),description:(0,a.__)("The document chain is kept intact: each invoice references its sales order, each payment references its invoice.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("div",{className:"zbwc-flow"},(0,o.createElement)(be,{event:(0,a.__)("Order reaches","erp7-order-sync-for-zoho-books"),eventControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Trigger status","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Processing","erp7-order-sync-for-zoho-books"),value:"processing"},{label:(0,a.__)("Completed","erp7-order-sync-for-zoho-books"),value:"completed"},{label:(0,a.__)("On hold","erp7-order-sync-for-zoho-books"),value:"on-hold"},{label:(0,a.__)("Any status","erp7-order-sync-for-zoho-books"),value:"any"}],...k("orderTriggerStatus")}),docControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Zoho document","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Sales order, then invoice","erp7-order-sync-for-zoho-books"),value:"invoice"},{label:(0,a.__)("Sales order only","erp7-order-sync-for-zoho-books"),value:"salesorder"}],...k("zohoDocumentType")}),checked:!!i.value("wooToZohoEnabled"),onChange:e=>i.set("wooToZohoEnabled",e),hint:(0,a.__)("The order itself. Everything below hangs off this document.","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order paid","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Payment recorded against the invoice","erp7-order-sync-for-zoho-books"),checked:P&&!!i.value("recordPayments"),onChange:e=>i.set("recordPayments",e),disabled:!P,badge:P?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books"),hint:(0,a.__)("Deposit account and gateway mapping live on the Payments tab.","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order refunded","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Credit note","erp7-order-sync-for-zoho-books"),checked:M&&!!i.value("syncRefunds"),onChange:e=>i.set("syncRefunds",e),disabled:!M,badge:M?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order cancelled","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Zoho documents voided","erp7-order-sync-for-zoho-books"),checked:M&&!!i.value("syncCancellations"),onChange:e=>i.set("syncCancellations",e),disabled:!M,badge:M?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Paid order cancelled","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Payment removed, then voided","erp7-order-sync-for-zoho-books"),checked:M&&!!i.value("syncCancellations")&&!!i.value("voidPaidCancellations"),onChange:e=>i.set("voidPaidCancellations",e),disabled:!M||!i.value("syncCancellations"),badge:M?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books"),hint:(0,a.__)("Zoho will not void an invoice with a payment on it. With this on, the payment this plugin recorded for the order is removed first. A payment entered in Zoho by hand, or a credit note already applied, is never touched.","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order fulfilled","erp7-order-sync-for-zoho-books"),eventControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Fulfilment status","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("On completed","erp7-order-sync-for-zoho-books"),value:"completed"},{label:(0,a.__)("On processing","erp7-order-sync-for-zoho-books"),value:"processing"}],...k("fulfillmentTriggerStatus")}),docControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Fulfilment document","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Note on the sales order","erp7-order-sync-for-zoho-books"),value:"so_note"},{label:(0,a.__)("Delivery challan","erp7-order-sync-for-zoho-books"),value:"delivery_challan"}],...k("fulfillmentMode")}),checked:R&&!!i.value("syncFulfillments"),onChange:e=>i.set("syncFulfillments",e),disabled:!R,badge:R?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books")}),R&&!!i.value("syncFulfillments")&&"delivery_challan"===i.value("fulfillmentMode")&&(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Mark the delivery challan as open","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Zoho creates challans in draft. Opening one records the shipment — but it also reserves the stock a second time, on top of the invoice this order already raised. Leave off unless you reconcile stock in Zoho yourself.","erp7-order-sync-for-zoho-books"),checked:!!i.value("challanMarkOpen"),onChange:e=>i.set("challanMarkOpen",e)}))),(0,o.createElement)(w,{title:(0,a.__)("Which orders","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Keep older orders out of Zoho Books.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,type:"date",label:(0,a.__)("Import orders from","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Orders placed before this date are never sent to Zoho: not by the backfill, and not when they change status, are paid or are refunded. Orders already in Zoho keep updating. Leave empty to include every order.","erp7-order-sync-for-zoho-books"),value:i.value("orderImportFrom")||"",onChange:e=>i.set("orderImportFrom",e)})),(0,o.createElement)(w,{title:(0,a.__)("Documents","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Document approval","erp7-order-sync-for-zoho-books"),help:(0,a.__)("A draft cannot be sent to the customer until someone approves it in Zoho.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Auto-approve (mark open)","erp7-order-sync-for-zoho-books"),value:"auto_approve"},{label:(0,a.__)("Save as draft","erp7-order-sync-for-zoho-books"),value:"save_as_draft"}],...k("approvalState")})),(0,o.createElement)(w,{title:(0,a.__)("Customer handling","erp7-order-sync-for-zoho-books"),description:(0,a.__)("What to do about the contact on each order.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("When an order has no matching Zoho contact","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Create the contact in Zoho","erp7-order-sync-for-zoho-books"),value:"create_in_zoho"},{label:(0,a.__)("Use a generic contact","erp7-order-sync-for-zoho-books"),value:"generic_contact"},{label:(0,a.__)("Skip the order","erp7-order-sync-for-zoho-books"),value:"skip"}],...k("customerCreationPolicy")}),"generic_contact"!==i.value("customerCreationPolicy")&&(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Look for an existing Zoho contact by","erp7-order-sync-for-zoho-books"),help:(0,a.__)("How an order or customer is matched to a contact already in Zoho, before one is created or the order is skipped. Matching by name puts different customers who share a name on one contact, so choose it only if names in your Zoho contacts are unique.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Email","erp7-order-sync-for-zoho-books"),value:"email"},{label:(0,a.__)("Name","erp7-order-sync-for-zoho-books"),value:"name"},{label:(0,a.__)("Email, then name","erp7-order-sync-for-zoho-books"),value:"email_then_name"}],...k("customerMatchBy")}),"generic_contact"===i.value("customerCreationPolicy")&&(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Generic Zoho contact ID","erp7-order-sync-for-zoho-books"),value:i.value("genericContactId")||"",onChange:e=>i.set("genericContactId",e)}))),"payments"===u&&(P?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("div",{className:"zbwc-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("Whether payments and refunds sync at all is set on the Lifecycle tab. These are the accounts they post to.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(w,{title:(0,a.__)("Payments","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Record payment when order status becomes","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Processing","erp7-order-sync-for-zoho-books"),value:"processing"},{label:(0,a.__)("Completed","erp7-order-sync-for-zoho-books"),value:"completed"}],...k("paymentTriggerStatus")}),(0,o.createElement)(x,{label:(0,a.__)("Deposit account","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Where payments are deposited. A gateway mapping below overrides this per gateway.","erp7-order-sync-for-zoho-books"),endpoint:"/zoho/accounts",listKey:"accounts",optionValue:"account_id",optionLabel:"account_name",value:i.value("paymentDepositAccountId"),onChange:e=>i.set("paymentDepositAccountId",e)})),(0,o.createElement)(w,{title:(0,a.__)("Refunds","erp7-order-sync-for-zoho-books")},(0,o.createElement)(x,{label:(0,a.__)("Refund from account","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Bank account cash refunds are paid from.","erp7-order-sync-for-zoho-books"),endpoint:"/zoho/accounts",listKey:"accounts",optionValue:"account_id",optionLabel:"account_name",value:i.value("refundFromAccountId"),onChange:e=>i.set("refundFromAccountId",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Credit note prefix","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Used only when custom document numbering is switched on under Defaults.","erp7-order-sync-for-zoho-books"),value:i.value("numberSeriesCreditNote")||"",onChange:e=>i.set("numberSeriesCreditNote",e)})),(0,o.createElement)(w,{title:(0,a.__)("Payment gateway mapping","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Map each gateway to a Zoho payment mode and deposit account.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(C,null))):(0,o.createElement)(Y,{title:(0,a.__)("Payments & Refunds","erp7-order-sync-for-zoho-books"),description:(0,a.__)("The money side of an order, recorded in Zoho Books.","erp7-order-sync-for-zoho-books"),bullets:[(0,a.__)("Record payments against the Zoho invoice automatically","erp7-order-sync-for-zoho-books"),(0,a.__)("Turn WooCommerce refunds into credit notes","erp7-order-sync-for-zoho-books"),(0,a.__)("Void Zoho documents when an order is cancelled","erp7-order-sync-for-zoho-books"),(0,a.__)("Record fulfilment with tracking details","erp7-order-sync-for-zoho-books")]})),"taxes"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:(0,a.__)("Tax & totals","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Tax handling","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Use WooCommerce tax to keep totals identical, or let Zoho recompute from item tax.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Use WooCommerce tax (map rates below)","erp7-order-sync-for-zoho-books"),value:"use_woo"},{label:(0,a.__)("Let Zoho Books compute tax","erp7-order-sync-for-zoho-books"),value:"recompute_in_zoho"}],...k("taxBehavior")}),(0,o.createElement)(x,{label:(0,a.__)("Tax exemption for non-taxable items","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Used for products, fees and shipping that WooCommerce does not tax, and for new Zoho items made from non-taxable products. Leave empty to send a 0% tax instead, mapped below.","erp7-order-sync-for-zoho-books"),endpoint:"/zoho/tax-exemptions",listKey:"tax_exemptions",optionValue:"tax_exemption_id",formatLabel:e=>[e.tax_exemption_code,e.description].filter(Boolean).join(" — ")||e.tax_exemption_id,placeholder:(0,a.__)("None: use a 0% tax","erp7-order-sync-for-zoho-books"),value:i.value("taxExemptionId"),onChange:e=>i.set("taxExemptionId",e)}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Add shipping as a line item","erp7-order-sync-for-zoho-books"),...f("shippingAsLineItem")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Shipping is taxable","erp7-order-sync-for-zoho-books"),...f("shippingIsTaxable")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Discount style","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Per line (baked into unit price)","erp7-order-sync-for-zoho-books"),value:"per_line"},{label:(0,a.__)("Document level","erp7-order-sync-for-zoho-books"),value:"document_level"}],...k("discountStyle")})),(0,o.createElement)(w,{title:(0,a.__)("Tax rate mapping","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Map every rate you charge. An unmapped rate is sent without tax and logged, rather than guessed at.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(N,null))),"defaults"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:(0,a.__)("Region","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Region","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Set to India to enable GST, HSN and place-of-supply handling.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Other","erp7-order-sync-for-zoho-books"),value:"OTHER"},{label:(0,a.__)("India (GST)","erp7-order-sync-for-zoho-books"),value:"IN"},{label:(0,a.__)("UAE","erp7-order-sync-for-zoho-books"),value:"AE"},{label:(0,a.__)("GCC","erp7-order-sync-for-zoho-books"),value:"GCC"}],...k("orderRegion")})),(0,o.createElement)(w,{title:(0,a.__)("India GST","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("GSTIN source","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Order meta field","erp7-order-sync-for-zoho-books"),value:"order_meta"},{label:(0,a.__)("None","erp7-order-sync-for-zoho-books"),value:"none"}],...k("gstinSource")}),"order_meta"===i.value("gstinSource")&&(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("GSTIN order-meta key","erp7-order-sync-for-zoho-books"),help:(0,a.__)("e.g. _billing_gstin","erp7-order-sync-for-zoho-books"),value:i.value("gstinMetaKey")||"",onChange:e=>i.set("gstinMetaKey",e)}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Default GST treatment (no GSTIN)","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Consumer (B2C)","erp7-order-sync-for-zoho-books"),value:"consumer"},{label:(0,a.__)("Registered business","erp7-order-sync-for-zoho-books"),value:"business_gst"},{label:(0,a.__)("Unregistered business","erp7-order-sync-for-zoho-books"),value:"business_none"},{label:(0,a.__)("Overseas","erp7-order-sync-for-zoho-books"),value:"overseas"}],...k("defaultGstTreatment")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Place of supply from","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Also decides which tax mapping applies, so intra-state and inter-state orders pick the right Zoho tax.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Shipping address","erp7-order-sync-for-zoho-books"),value:"shipping"},{label:(0,a.__)("Billing address","erp7-order-sync-for-zoho-books"),value:"billing"}],...k("placeOfSupplySource")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Skip orders without a GSTIN","erp7-order-sync-for-zoho-books"),...f("skipOrdersWithoutGstin")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("HSN/SAC source","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Product meta field","erp7-order-sync-for-zoho-books"),value:"product_meta"},{label:(0,a.__)("None","erp7-order-sync-for-zoho-books"),value:"none"}],...k("hsnSource")}),"product_meta"===i.value("hsnSource")&&(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("HSN product-meta key","erp7-order-sync-for-zoho-books"),help:(0,a.__)("e.g. _hsn_code","erp7-order-sync-for-zoho-books"),value:i.value("hsnMetaKey")||"",onChange:e=>i.set("hsnMetaKey",e)})),(0,o.createElement)(w,{title:(0,a.__)("Multi-currency","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Handle foreign-currency orders","erp7-order-sync-for-zoho-books"),...f("multiCurrencyEnabled")}),!!i.value("multiCurrencyEnabled")&&(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Exchange rate from","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Zoho Books","erp7-order-sync-for-zoho-books"),value:"zoho"},{label:(0,a.__)("WooCommerce","erp7-order-sync-for-zoho-books"),value:"woo"}],...k("exchangeRateSource")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("If currency differs from base and multi-currency is off","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Send anyway (amounts as-is)","erp7-order-sync-for-zoho-books"),value:"convert"},{label:(0,a.__)("Skip the order","erp7-order-sync-for-zoho-books"),value:"skip"}],...k("multiCurrencyMismatch")})),(0,o.createElement)(w,{title:(0,a.__)("Document numbering","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Use custom document numbers (prefix + order number)","erp7-order-sync-for-zoho-books"),...f("useCustomNumbering")}),!!i.value("useCustomNumbering")&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Sales order prefix","erp7-order-sync-for-zoho-books"),value:i.value("numberSeriesSalesOrder")||"",onChange:e=>i.set("numberSeriesSalesOrder",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Invoice prefix","erp7-order-sync-for-zoho-books"),value:i.value("numberSeriesInvoice")||"",onChange:e=>i.set("numberSeriesInvoice",e)}))),(0,o.createElement)(w,{title:(0,a.__)("Maintenance","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Write a daily reconciliation report to the log","erp7-order-sync-for-zoho-books"),...f("dailyReconEnabled")}))),(0,o.createElement)(v,{isDirty:i.isDirty,saving:i.saving,onSave:async()=>{const e=await i.save();m(e?(0,a.__)("Order settings saved.","erp7-order-sync-for-zoho-books"):i.error||(0,a.__)("Save failed","erp7-order-sync-for-zoho-books"),e?"success":"error")},onReset:i.reset}))}function be({event:e,eventControl:t,doc:r,docControl:n,checked:a,onChange:c,disabled:l,badge:i,hint:d}){return(0,o.createElement)("div",{className:"zbwc-flow__row"+(l?" is-disabled":"")},(0,o.createElement)("div",{className:"zbwc-flow__main"},(0,o.createElement)("div",{className:"zbwc-flow__event"},(0,o.createElement)("span",{className:"zbwc-flow__label"},e),i&&(0,o.createElement)("span",{className:"zbwc-flow__badge"},i),t),(0,o.createElement)("span",{className:"zbwc-flow__arrow dashicons dashicons-arrow-right-alt","aria-hidden":"true"}),(0,o.createElement)("div",{className:"zbwc-flow__doc"},n||(0,o.createElement)("span",{className:"zbwc-flow__label"},r)),(0,o.createElement)("div",{className:"zbwc-flow__switch"},(0,o.createElement)(s.CheckboxControl,{__nextHasNoMarginBottom:!0,checked:!!a,onChange:c,disabled:l,label:"","aria-label":e}))),d&&(0,o.createElement)("p",{className:"zbwc-flow__hint"},d))}function ye({name:e}){const t=L(e);if(!t)return null;let r="is-ok";return t.exhausted?r="is-full":t.used/t.limit>=.5&&(r="is-warn"),(0,o.createElement)("span",{className:`zbwc-quotachip ${r}`},(0,a.sprintf)(/* translators: 1: used this month. 2: monthly allowance. */ /* translators: 1: used this month. 2: monthly allowance. */
     20(0,a.__)("Connected %s","erp7-order-sync-for-zoho-books"),new Date(1e3*c.connectedAt).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}))))),(0,o.createElement)("div",{className:"zbwc-connbox__actions"},c.connected&&(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{u(!0);try{const e=await y("/connection/test",{});r(e.ok?(0,a.__)("Connection is healthy.","erp7-order-sync-for-zoho-books"):(0,a.__)("Zoho did not respond as expected.","erp7-order-sync-for-zoho-books"),e.ok?"success":"error")}catch(e){r(z(e),"error")}finally{u(!1)}},isBusy:m,disabled:m},(0,a.__)("Test connection","erp7-order-sync-for-zoho-books")),c.connected&&(0,o.createElement)(s.Button,{variant:"secondary",onClick:()=>b(!0),disabled:m},(0,a.__)("Change organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,onClick:S,disabled:m},(0,a.__)("Disconnect","erp7-order-sync-for-zoho-books")))),E&&(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1},(0,a.__)("Zoho stopped accepting this site's tokens. Use “Save & Reconnect to Zoho” below to authorize again — your organization and settings are kept.","erp7-order-sync-for-zoho-books")),c.inventoryRefused&&(0,o.createElement)(ie,{region:c.region,onRechecked:t})):k?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("p",{className:"zbwc-muted"},(0,a.__)("Your Zoho account is authorized — one step left: choose the organization this store syncs with.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Flex,{justify:"flex-start",gap:2,style:{marginTop:12}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>b(!0),disabled:m},(0,a.__)("Choose organization","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,onClick:S,disabled:m},(0,a.__)("Disconnect","erp7-order-sync-for-zoho-books"))))):null),(0,o.createElement)(w,{title:(0,a.__)("Zoho API client","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Create a Server-based Application in the Zoho API console, then connect this store to it.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("p",null,(0,a.__)("In the","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)(s.ExternalLink,{href:"https://api-console.zoho.com/"},(0,a.__)("Zoho API Console","erp7-order-sync-for-zoho-books"))," ",(0,a.__)("create a Server-based Application and add this exact","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("strong",null,(0,a.__)("Authorized Redirect URI","erp7-order-sync-for-zoho-books")),":"),(0,o.createElement)(s.Flex,{justify:"flex-start",align:"center",gap:2,className:"zbwc-copyrow",style:{flexWrap:"wrap"}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)("code",{className:"zbwc-code"},c.redirectUri)),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{if(await de(c.redirectUri))return _(!0),void setTimeout(()=>_(!1),2e3);r((0,a.__)("Copy failed — select the URL and copy it manually.","erp7-order-sync-for-zoho-books"),"error")}},h?(0,a.__)("Copied","erp7-order-sync-for-zoho-books"):(0,a.__)("Copy","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("div",{className:"zbwc-connfields"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Data centre / region","erp7-order-sync-for-zoho-books"),help:(0,a.__)("The Zoho domain you sign in on — .com, .eu, .in and so on.","erp7-order-sync-for-zoho-books"),value:i.region,options:C,onChange:e=>N("region",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client ID","erp7-order-sync-for-zoho-books"),value:i.clientId,onChange:e=>N("clientId",e),autoComplete:"off"}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client Secret","erp7-order-sync-for-zoho-books"),type:"password",value:i.clientSecret,placeholder:c.hasClientSecret?(0,a.__)("•••••••• (saved — leave blank to keep)","erp7-order-sync-for-zoho-books"):"",onChange:e=>N("clientSecret",e),autoComplete:"off"}),(0,o.createElement)(s.Flex,{justify:"flex-start",align:"center",gap:3,style:{flexWrap:"wrap"}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",onClick:async()=>{u(!0);try{const e={clientId:i.clientId,region:i.region};i.clientSecret&&(e.clientSecret=i.clientSecret),await y("/connection/credentials",e);const o=await y("/connection/authorize",{});window.location.href=o.authUrl}catch(e){r(z(e),"error"),u(!1)}},isBusy:m,disabled:m||!i.clientId||!i.clientSecret&&!c.hasClientSecret},g?(0,a.__)("Save & Reconnect to Zoho","erp7-order-sync-for-zoho-books"):(0,a.__)("Save & Connect to Zoho","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)("span",{className:"zbwc-muted"},(0,a.__)("Saves the credentials, then sends you to Zoho to authorize — you'll come straight back here.","erp7-order-sync-for-zoho-books")))))),p&&(0,o.createElement)(se,{currentId:c.organizationId||"",onChosen:()=>{b(!1),t&&t()},onClose:()=>b(!1)}))}function he({enabled:e=!0,reason:t,onClick:r,children:n,...a}){const c=(0,o.createElement)(s.Button,{variant:"secondary",onClick:e?r:void 0,disabled:!e,__experimentalIsFocusable:!0,...a},n);return e||!t?c:(0,o.createElement)(s.Tooltip,{text:t,delay:100,placement:"top"},c)}const _e=[{key:"lifecycle",label:(0,a.__)("Lifecycle","erp7-order-sync-for-zoho-books")},{key:"payments",label:(0,a.__)("Payments","erp7-order-sync-for-zoho-books")},{key:"taxes",label:(0,a.__)("Taxes","erp7-order-sync-for-zoho-books")},{key:"defaults",label:(0,a.__)("Defaults","erp7-order-sync-for-zoho-books")}];function pe({openTab:e}){var t,r,c;const i=E(),d=g(()=>b("/sync/stats?kind=orders"),[]),m=l(),[u,h]=(0,n.useState)(()=>_e.some(o=>o.key===e)?e:"lifecycle"),[_,p]=(0,n.useState)(!1);if(i.loading)return(0,o.createElement)(Z,{label:(0,a.__)("Loading order settings…","erp7-order-sync-for-zoho-books")});const f=e=>({checked:!!i.value(e),onChange:o=>i.set(e,o)}),k=e=>({value:i.value(e)||"",onChange:o=>i.set(e,o)}),S=d.data||{},I=!!i.value("orderSyncMasterEnabled"),P=U("payments"),M=U("refunds"),D=U("fulfillment"),R=S.needsReauth?{tone:"error",text:(0,a.__)("Reconnect needed","erp7-order-sync-for-zoho-books")}:S.connected?S.openFailures>0?{tone:"warn",text:(0,a.__)("Needs attention","erp7-order-sync-for-zoho-books")}:{tone:"ok",text:(0,a.__)("Healthy","erp7-order-sync-for-zoho-books")}:{tone:"warn",text:(0,a.__)("Not connected","erp7-order-sync-for-zoho-books")};return(0,o.createElement)("div",{className:"zbwc-page"},(0,o.createElement)(T,{error:i.error}),(0,o.createElement)("div",{className:"zbwc-pagehead"},(0,o.createElement)("h2",{className:"zbwc-pagehead__title"},(0,a.__)("Order sync","erp7-order-sync-for-zoho-books")),(0,o.createElement)(he,{enabled:!!S.connected&&I&&!_,reason:S.connected?I?"":(0,a.__)("Turn on order sync first.","erp7-order-sync-for-zoho-books"):(0,a.__)("Connect to Zoho Books first.","erp7-order-sync-for-zoho-books"),onClick:async()=>{p(!0);try{await y("/sync/run",{kind:"orders"}),m((0,a.__)("Order backfill queued.","erp7-order-sync-for-zoho-books"),"success"),setTimeout(d.reload,1200)}catch(e){m(z(e),"error")}finally{p(!1)}},isBusy:_},(0,a.__)("Run backfill","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-statbar"},(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Status","erp7-order-sync-for-zoho-books")),(0,o.createElement)(B,{status:R.tone},R.text)),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Mapped","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value"},d.loading?"—":null!==(t=S.mapped)&&void 0!==t?t:0),(0,o.createElement)("span",{className:"zbwc-statbar__sub"},(0,a.__)("orders","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Synced today","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value"},d.loading?"—":null!==(r=S.syncedToday)&&void 0!==r?r:0),(0,o.createElement)("span",{className:"zbwc-statbar__sub"},(0,a.__)("to Zoho","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Last run","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value zbwc-statbar__value--sm"},d.loading?"—":function(e){if(!e)return(0,a.__)("Never","erp7-order-sync-for-zoho-books");const o=Math.max(0,Math.floor((Date.now()-new Date(e).getTime())/1e3));if(o<60)return(0,a.__)("Just now","erp7-order-sync-for-zoho-books");const t=[[86400,(0,a.__)("d","erp7-order-sync-for-zoho-books")],[3600,(0,a.__)("h","erp7-order-sync-for-zoho-books")],[60,(0,a.__)("m","erp7-order-sync-for-zoho-books")]];for(const[e,r]of t)if(o>=e)return Math.floor(o/e)+r+(0,a.__)(" ago","erp7-order-sync-for-zoho-books");return(0,a.__)("Just now","erp7-order-sync-for-zoho-books")}(S.lastRun))),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Open failures","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value"+(S.openFailures>0?" is-bad":"")},d.loading?"—":null!==(c=S.openFailures)&&void 0!==c?c:0),(0,o.createElement)("span",{className:"zbwc-statbar__sub"},S.openFailures>0?(0,a.__)("see Logs","erp7-order-sync-for-zoho-books"):(0,a.__)("all caught up","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("div",{className:"zbwc-masterbar"+(I?"":" is-off")},(0,o.createElement)("div",{className:"zbwc-masterbar__text"},(0,o.createElement)("span",{className:"zbwc-masterbar__title"},(0,a.__)("Order sync","erp7-order-sync-for-zoho-books"),(0,o.createElement)(B,{status:I?"ok":"warn"},I?(0,a.__)("On","erp7-order-sync-for-zoho-books"):(0,a.__)("Off","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("span",{className:"zbwc-masterbar__desc"},(0,a.__)("Orders flow from WooCommerce to Zoho Books. Switch off to pause every order sync, including payments and refunds.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.Button,{variant:"secondary",isDestructive:I,onClick:()=>i.set("orderSyncMasterEnabled",!I)},I?(0,a.__)("Turn off","erp7-order-sync-for-zoho-books"):(0,a.__)("Turn on","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-subnav",role:"tablist"},_e.map(e=>(0,o.createElement)("button",{key:e.key,type:"button",role:"tab","aria-selected":u===e.key,className:"zbwc-subnav__tab"+(u===e.key?" is-active":""),onClick:()=>h(e.key)},e.label))),"lifecycle"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)("div",{className:"zbwc-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("WooCommerce is the source of truth for orders. Each row below is one event and the Zoho document it produces — orders only ever move WooCommerce → Zoho.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(w,{title:(0,a.__)("WooCommerce → Zoho Books","erp7-order-sync-for-zoho-books"),description:(0,a.__)("The document chain is kept intact: each invoice references its sales order, each payment references its invoice.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("div",{className:"zbwc-flow"},(0,o.createElement)(be,{event:(0,a.__)("Order reaches","erp7-order-sync-for-zoho-books"),eventControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Trigger status","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Processing","erp7-order-sync-for-zoho-books"),value:"processing"},{label:(0,a.__)("Completed","erp7-order-sync-for-zoho-books"),value:"completed"},{label:(0,a.__)("On hold","erp7-order-sync-for-zoho-books"),value:"on-hold"},{label:(0,a.__)("Any status","erp7-order-sync-for-zoho-books"),value:"any"}],...k("orderTriggerStatus")}),docControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Zoho document","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Sales order, then invoice","erp7-order-sync-for-zoho-books"),value:"invoice"},{label:(0,a.__)("Sales order only","erp7-order-sync-for-zoho-books"),value:"salesorder"}],...k("zohoDocumentType")}),checked:!!i.value("wooToZohoEnabled"),onChange:e=>i.set("wooToZohoEnabled",e),hint:(0,a.__)("The order itself. Everything below hangs off this document.","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order paid","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Payment recorded against the invoice","erp7-order-sync-for-zoho-books"),checked:P&&!!i.value("recordPayments"),onChange:e=>i.set("recordPayments",e),disabled:!P,badge:P?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books"),hint:(0,a.__)("Deposit account and gateway mapping live on the Payments tab.","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order refunded","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Credit note","erp7-order-sync-for-zoho-books"),checked:M&&!!i.value("syncRefunds"),onChange:e=>i.set("syncRefunds",e),disabled:!M,badge:M?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order cancelled","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Zoho documents voided","erp7-order-sync-for-zoho-books"),checked:M&&!!i.value("syncCancellations"),onChange:e=>i.set("syncCancellations",e),disabled:!M,badge:M?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Paid order cancelled","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Payment removed, then voided","erp7-order-sync-for-zoho-books"),checked:M&&!!i.value("syncCancellations")&&!!i.value("voidPaidCancellations"),onChange:e=>i.set("voidPaidCancellations",e),disabled:!M||!i.value("syncCancellations"),badge:M?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books"),hint:(0,a.__)("Zoho will not void an invoice with a payment on it. With this on, the payment this plugin recorded for the order is removed first. A payment entered in Zoho by hand, or a credit note already applied, is never touched.","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order fulfilled","erp7-order-sync-for-zoho-books"),eventControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Fulfilment status","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("On completed","erp7-order-sync-for-zoho-books"),value:"completed"},{label:(0,a.__)("On processing","erp7-order-sync-for-zoho-books"),value:"processing"}],...k("fulfillmentTriggerStatus")}),docControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Fulfilment document","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Note on the sales order","erp7-order-sync-for-zoho-books"),value:"so_note"},{label:(0,a.__)("Delivery challan","erp7-order-sync-for-zoho-books"),value:"delivery_challan"}],...k("fulfillmentMode")}),checked:D&&!!i.value("syncFulfillments"),onChange:e=>i.set("syncFulfillments",e),disabled:!D,badge:D?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books")}),D&&!!i.value("syncFulfillments")&&"delivery_challan"===i.value("fulfillmentMode")&&(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Mark the delivery challan as open","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Zoho creates challans in draft. Opening one records the shipment — but it also reserves the stock a second time, on top of the invoice this order already raised. Leave off unless you reconcile stock in Zoho yourself.","erp7-order-sync-for-zoho-books"),checked:!!i.value("challanMarkOpen"),onChange:e=>i.set("challanMarkOpen",e)}))),(0,o.createElement)(w,{title:(0,a.__)("Which orders","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Keep older orders out of Zoho Books.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,type:"date",label:(0,a.__)("Import orders from","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Orders placed before this date are never sent to Zoho: not by the backfill, and not when they change status, are paid or are refunded. Orders already in Zoho keep updating. Leave empty to include every order.","erp7-order-sync-for-zoho-books"),value:i.value("orderImportFrom")||"",onChange:e=>i.set("orderImportFrom",e)})),(0,o.createElement)(w,{title:(0,a.__)("Documents","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Document approval","erp7-order-sync-for-zoho-books"),help:(0,a.__)("A draft cannot be sent to the customer until someone approves it in Zoho.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Auto-approve (mark open)","erp7-order-sync-for-zoho-books"),value:"auto_approve"},{label:(0,a.__)("Save as draft","erp7-order-sync-for-zoho-books"),value:"save_as_draft"}],...k("approvalState")})),(0,o.createElement)(w,{title:(0,a.__)("Customer handling","erp7-order-sync-for-zoho-books"),description:(0,a.__)("What to do about the contact on each order.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("When an order has no matching Zoho contact","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Create the contact in Zoho","erp7-order-sync-for-zoho-books"),value:"create_in_zoho"},{label:(0,a.__)("Use a generic contact","erp7-order-sync-for-zoho-books"),value:"generic_contact"},{label:(0,a.__)("Skip the order","erp7-order-sync-for-zoho-books"),value:"skip"}],...k("customerCreationPolicy")}),"generic_contact"!==i.value("customerCreationPolicy")&&(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Look for an existing Zoho contact by","erp7-order-sync-for-zoho-books"),help:(0,a.__)("How an order or customer is matched to a contact already in Zoho, before one is created or the order is skipped. Matching by name puts different customers who share a name on one contact, so choose it only if names in your Zoho contacts are unique.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Email","erp7-order-sync-for-zoho-books"),value:"email"},{label:(0,a.__)("Name","erp7-order-sync-for-zoho-books"),value:"name"},{label:(0,a.__)("Email, then name","erp7-order-sync-for-zoho-books"),value:"email_then_name"}],...k("customerMatchBy")}),"generic_contact"===i.value("customerCreationPolicy")&&(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Generic Zoho contact ID","erp7-order-sync-for-zoho-books"),value:i.value("genericContactId")||"",onChange:e=>i.set("genericContactId",e)}))),"payments"===u&&(P?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("div",{className:"zbwc-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("Whether payments and refunds sync at all is set on the Lifecycle tab. These are the accounts they post to.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(w,{title:(0,a.__)("Payments","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Record payment when order status becomes","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Processing","erp7-order-sync-for-zoho-books"),value:"processing"},{label:(0,a.__)("Completed","erp7-order-sync-for-zoho-books"),value:"completed"}],...k("paymentTriggerStatus")}),(0,o.createElement)(x,{label:(0,a.__)("Deposit account","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Where payments are deposited. A gateway mapping below overrides this per gateway.","erp7-order-sync-for-zoho-books"),endpoint:"/zoho/accounts",listKey:"accounts",optionValue:"account_id",optionLabel:"account_name",value:i.value("paymentDepositAccountId"),onChange:e=>i.set("paymentDepositAccountId",e)})),(0,o.createElement)(w,{title:(0,a.__)("Refunds","erp7-order-sync-for-zoho-books")},(0,o.createElement)(x,{label:(0,a.__)("Refund from account","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Bank account cash refunds are paid from.","erp7-order-sync-for-zoho-books"),endpoint:"/zoho/accounts",listKey:"accounts",optionValue:"account_id",optionLabel:"account_name",value:i.value("refundFromAccountId"),onChange:e=>i.set("refundFromAccountId",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Credit note prefix","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Used only when custom document numbering is switched on under Defaults.","erp7-order-sync-for-zoho-books"),value:i.value("numberSeriesCreditNote")||"",onChange:e=>i.set("numberSeriesCreditNote",e)})),(0,o.createElement)(w,{title:(0,a.__)("Payment gateway mapping","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Map each gateway to a Zoho payment mode and deposit account.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(C,null))):(0,o.createElement)(Y,{title:(0,a.__)("Payments & Refunds","erp7-order-sync-for-zoho-books"),description:(0,a.__)("The money side of an order, recorded in Zoho Books.","erp7-order-sync-for-zoho-books"),bullets:[(0,a.__)("Record payments against the Zoho invoice automatically","erp7-order-sync-for-zoho-books"),(0,a.__)("Turn WooCommerce refunds into credit notes","erp7-order-sync-for-zoho-books"),(0,a.__)("Void Zoho documents when an order is cancelled","erp7-order-sync-for-zoho-books"),(0,a.__)("Record fulfilment with tracking details","erp7-order-sync-for-zoho-books")]})),"taxes"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:(0,a.__)("Tax & totals","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Tax handling","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Use WooCommerce tax to keep totals identical, or let Zoho recompute from item tax.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Use WooCommerce tax (map rates below)","erp7-order-sync-for-zoho-books"),value:"use_woo"},{label:(0,a.__)("Let Zoho Books compute tax","erp7-order-sync-for-zoho-books"),value:"recompute_in_zoho"}],...k("taxBehavior")}),(0,o.createElement)(x,{label:(0,a.__)("Tax exemption for non-taxable items","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Used for products, fees and shipping that WooCommerce does not tax, and for new Zoho items made from non-taxable products. Leave empty to send a 0% tax instead, mapped below.","erp7-order-sync-for-zoho-books"),endpoint:"/zoho/tax-exemptions",listKey:"tax_exemptions",optionValue:"tax_exemption_id",formatLabel:e=>[e.tax_exemption_code,e.description].filter(Boolean).join(" — ")||e.tax_exemption_id,placeholder:(0,a.__)("None: use a 0% tax","erp7-order-sync-for-zoho-books"),value:i.value("taxExemptionId"),onChange:e=>i.set("taxExemptionId",e)}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Add shipping as a line item","erp7-order-sync-for-zoho-books"),...f("shippingAsLineItem")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Shipping is taxable","erp7-order-sync-for-zoho-books"),...f("shippingIsTaxable")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Discount style","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Per line (baked into unit price)","erp7-order-sync-for-zoho-books"),value:"per_line"},{label:(0,a.__)("Document level","erp7-order-sync-for-zoho-books"),value:"document_level"}],...k("discountStyle")})),(0,o.createElement)(w,{title:(0,a.__)("Tax rate mapping","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Map every rate you charge. An unmapped rate is sent without tax and logged, rather than guessed at.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(N,null))),"defaults"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:(0,a.__)("Region","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Region","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Set to India to enable GST, HSN and place-of-supply handling.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Other","erp7-order-sync-for-zoho-books"),value:"OTHER"},{label:(0,a.__)("India (GST)","erp7-order-sync-for-zoho-books"),value:"IN"},{label:(0,a.__)("UAE","erp7-order-sync-for-zoho-books"),value:"AE"},{label:(0,a.__)("GCC","erp7-order-sync-for-zoho-books"),value:"GCC"}],...k("orderRegion")})),(0,o.createElement)(w,{title:(0,a.__)("India GST","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("GSTIN source","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Order meta field","erp7-order-sync-for-zoho-books"),value:"order_meta"},{label:(0,a.__)("None","erp7-order-sync-for-zoho-books"),value:"none"}],...k("gstinSource")}),"order_meta"===i.value("gstinSource")&&(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("GSTIN order-meta key","erp7-order-sync-for-zoho-books"),help:(0,a.__)("e.g. _billing_gstin","erp7-order-sync-for-zoho-books"),value:i.value("gstinMetaKey")||"",onChange:e=>i.set("gstinMetaKey",e)}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Default GST treatment (no GSTIN)","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Consumer (B2C)","erp7-order-sync-for-zoho-books"),value:"consumer"},{label:(0,a.__)("Registered business","erp7-order-sync-for-zoho-books"),value:"business_gst"},{label:(0,a.__)("Unregistered business","erp7-order-sync-for-zoho-books"),value:"business_none"},{label:(0,a.__)("Overseas","erp7-order-sync-for-zoho-books"),value:"overseas"}],...k("defaultGstTreatment")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Place of supply from","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Also decides which tax mapping applies, so intra-state and inter-state orders pick the right Zoho tax.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Shipping address","erp7-order-sync-for-zoho-books"),value:"shipping"},{label:(0,a.__)("Billing address","erp7-order-sync-for-zoho-books"),value:"billing"}],...k("placeOfSupplySource")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Skip orders without a GSTIN","erp7-order-sync-for-zoho-books"),...f("skipOrdersWithoutGstin")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("HSN/SAC source","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Product meta field","erp7-order-sync-for-zoho-books"),value:"product_meta"},{label:(0,a.__)("None","erp7-order-sync-for-zoho-books"),value:"none"}],...k("hsnSource")}),"product_meta"===i.value("hsnSource")&&(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("HSN product-meta key","erp7-order-sync-for-zoho-books"),help:(0,a.__)("e.g. _hsn_code","erp7-order-sync-for-zoho-books"),value:i.value("hsnMetaKey")||"",onChange:e=>i.set("hsnMetaKey",e)})),(0,o.createElement)(w,{title:(0,a.__)("Multi-currency","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Handle foreign-currency orders","erp7-order-sync-for-zoho-books"),...f("multiCurrencyEnabled")}),!!i.value("multiCurrencyEnabled")&&(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Exchange rate from","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Zoho Books","erp7-order-sync-for-zoho-books"),value:"zoho"},{label:(0,a.__)("WooCommerce","erp7-order-sync-for-zoho-books"),value:"woo"}],...k("exchangeRateSource")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("If currency differs from base and multi-currency is off","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Send anyway (amounts as-is)","erp7-order-sync-for-zoho-books"),value:"convert"},{label:(0,a.__)("Skip the order","erp7-order-sync-for-zoho-books"),value:"skip"}],...k("multiCurrencyMismatch")})),(0,o.createElement)(w,{title:(0,a.__)("Document numbering","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Use custom document numbers (prefix + order number)","erp7-order-sync-for-zoho-books"),...f("useCustomNumbering")}),!!i.value("useCustomNumbering")&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Sales order prefix","erp7-order-sync-for-zoho-books"),value:i.value("numberSeriesSalesOrder")||"",onChange:e=>i.set("numberSeriesSalesOrder",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Invoice prefix","erp7-order-sync-for-zoho-books"),value:i.value("numberSeriesInvoice")||"",onChange:e=>i.set("numberSeriesInvoice",e)}))),(0,o.createElement)(w,{title:(0,a.__)("Maintenance","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Write a daily reconciliation report to the log","erp7-order-sync-for-zoho-books"),...f("dailyReconEnabled")}))),(0,o.createElement)(v,{isDirty:i.isDirty,saving:i.saving,onSave:async()=>{const e=await i.save();m(e?(0,a.__)("Order settings saved.","erp7-order-sync-for-zoho-books"):i.error||(0,a.__)("Save failed","erp7-order-sync-for-zoho-books"),e?"success":"error")},onReset:i.reset}))}function be({event:e,eventControl:t,doc:r,docControl:n,checked:a,onChange:c,disabled:l,badge:i,hint:d}){return(0,o.createElement)("div",{className:"zbwc-flow__row"+(l?" is-disabled":"")},(0,o.createElement)("div",{className:"zbwc-flow__main"},(0,o.createElement)("div",{className:"zbwc-flow__event"},(0,o.createElement)("span",{className:"zbwc-flow__label"},e),i&&(0,o.createElement)("span",{className:"zbwc-flow__badge"},i),t),(0,o.createElement)("span",{className:"zbwc-flow__arrow dashicons dashicons-arrow-right-alt","aria-hidden":"true"}),(0,o.createElement)("div",{className:"zbwc-flow__doc"},n||(0,o.createElement)("span",{className:"zbwc-flow__label"},r)),(0,o.createElement)("div",{className:"zbwc-flow__switch"},(0,o.createElement)(s.CheckboxControl,{__nextHasNoMarginBottom:!0,checked:!!a,onChange:c,disabled:l,label:"","aria-label":e}))),d&&(0,o.createElement)("p",{className:"zbwc-flow__hint"},d))}function ye({name:e}){const t=L(e);if(!t)return null;let r="is-ok";return t.exhausted?r="is-full":t.used/t.limit>=.5&&(r="is-warn"),(0,o.createElement)("span",{className:`zbwc-quotachip ${r}`},(0,a.sprintf)(/* translators: 1: used this month. 2: monthly allowance. */ /* translators: 1: used this month. 2: monthly allowance. */
    2121(0,a.__)("%1$d of %2$d this month","erp7-order-sync-for-zoho-books"),t.used,t.limit))}function fe(){const e=E(),t=l(),r=L("customers");if(e.loading)return(0,o.createElement)(Z,{label:"Loading customer settings…"});const n=o=>({checked:!!e.value(o),onChange:t=>e.set(o,t)}),a=o=>({value:e.value(o)||"",onChange:t=>e.set(o,t)}),c=async(e,o)=>{try{await y("/sync/run",{kind:e}),t(`${o} queued.`,"success")}catch(e){t(z(e),"error")}},i=(o,t)=>e.value("customerSyncMasterEnabled")?e.value(o)?{enabled:!0}:{enabled:!1,reason:`Turn on "${t}" above first.`}:{enabled:!1,reason:'Turn on "Enable customer sync" above first.'};return(0,o.createElement)("div",{className:"zbwc-page"},(0,o.createElement)(T,{error:e.error}),(0,o.createElement)(w,{title:"Customer sync",description:"Keep WooCommerce customers and Zoho Books contacts in step.",actions:(0,o.createElement)(ye,{name:"customers"})},r&&(0,o.createElement)("p",{className:"zbwc-muted zbwc-quotanote"},r.exhausted?`You have created all ${r.limit} contacts included this month. Orders for new customers are held until the 1st, or straight away on a paid plan.`:`${r.remaining} of your ${r.limit} free contacts are left this month. A customer costs one the first time they reach Zoho; syncing their later changes is free.`),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Enable customer sync",...n("customerSyncMasterEnabled")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Push WooCommerce customers to Zoho Books",...n("wooToZohoCustomerEnabled")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Pull Zoho contacts into WooCommerce",...n("zohoToWooCustomerEnabled")})),(0,o.createElement)(w,{title:"Sync rules",description:"How often to pull, and how to resolve matches and conflicts."},!!e.value("zohoToWooCustomerEnabled")&&(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"Zoho → WooCommerce sync frequency",options:[{label:"Every hour",value:"1"},{label:"Every 3 hours",value:"3"},{label:"Every 6 hours",value:"6"},{label:"Every 12 hours",value:"12"},{label:"Daily",value:"24"}],...a("customerSyncFrequency")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"When no match exists",options:[{label:"Create new contacts",value:"always"},{label:"Only update existing",value:"update_only"}],...a("customerSyncCreatePolicy")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"On conflict",options:[{label:"WooCommerce wins",value:"woo_wins"},{label:"Zoho wins",value:"zoho_wins"},{label:"Last write wins",value:"last_write_wins"}],...a("customerSyncConflictPolicy")})),(0,o.createElement)(w,{title:"Sync now",description:"Queue a full re-sync in the background. Each button follows its sync toggles above."},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Also sync guest customers from orders",help:"People who checked out without an account — on most stores, the larger half. They are identified by billing address, so a repeat shopper is one contact, not one per order.",...n("syncGuestCustomers")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Include accounts that have never ordered",help:"Off keeps Zoho Books to people you have actually billed. On also sends registered customers who have not bought anything yet.",...n("backfillCustomersWithoutOrders")}),(0,o.createElement)(s.Flex,{justify:"flex-start",gap:3,wrap:!0,style:{marginTop:16}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(he,{...i("wooToZohoCustomerEnabled","Push WooCommerce customers to Zoho Books"),onClick:()=>c("customers","Customer sync to Zoho")},"Sync all customers to Zoho")),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(he,{...i("zohoToWooCustomerEnabled","Pull Zoho contacts into WooCommerce"),onClick:()=>c("zoho_customers","Contact pull from Zoho")},"Pull all contacts from Zoho")))),(0,o.createElement)(v,{isDirty:e.isDirty,saving:e.saving,onSave:async()=>{const o=await e.save();t(o?"Customer settings saved.":e.error||"Save failed",o?"success":"error")},onReset:e.reset}))}const ze=[{label:"Product title",token:"title"},{label:"SKU",token:"sku"},{label:"Price",token:"price"},{label:"Description",token:"description"},{label:"Featured image",token:"image"}];function ge({connection:e,reloadConnection:t}){const r=E(),a=l(),c=(0,n.useRef)("woo");if(r.loading)return(0,o.createElement)(Z,{label:"Loading product settings…"});const i=e=>({checked:!!r.value(e),onChange:o=>r.set(e,o)}),d=e=>({value:r.value(e)||"",onChange:o=>r.set(e,o)}),m=r.value("catalogPushFields")||[],u=r.value("inventorySource")||"";"off"!==u&&(c.current=u);const h=U("products"),_=U("inventory"),p=L("products"),b=async(e,o)=>{try{await y("/sync/run",{kind:e}),a(`${o} queued.`,"success")}catch(e){a(z(e),"error")}},f=(e,o)=>r.value("productSyncMasterEnabled")?r.value(e)?{enabled:!0}:{enabled:!1,reason:`Turn on "${o}" above first.`}:{enabled:!1,reason:'Turn on "Enable product sync" above first.'},g="zoho"===u?{enabled:!0}:{enabled:!1,reason:'Set "Inventory source of truth" to Zoho → WooCommerce above first.'};return(0,o.createElement)("div",{className:"zbwc-page"},(0,o.createElement)(T,{error:r.error}),"off"!==u&&e&&e.inventoryRefused&&(0,o.createElement)(ie,{region:e.region,onRechecked:t}),h?(0,o.createElement)(w,{title:"Products",description:"Sync WooCommerce products with Zoho Books items.",actions:(0,o.createElement)(ye,{name:"products"})},p&&(0,o.createElement)("p",{className:"zbwc-muted zbwc-quotanote"},p.exhausted?`You have linked all ${p.limit} products included this month. Orders still sync — their lines go through by name, without a Zoho item — and the allowance resets on the 1st.`:`${p.remaining} of your ${p.limit} free product links are left this month. A product costs one the first time it reaches Zoho; re-syncing it later is free.`),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Enable product sync",...i("productSyncMasterEnabled")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Push WooCommerce products to Zoho items",...i("wooToZohoProductEnabled")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Pull Zoho items into WooCommerce products",...i("zohoToWooProductEnabled")}),!!r.value("zohoToWooProductEnabled")&&(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"How often to pull items from Zoho",help:"Names, prices and descriptions arrive on this schedule without pressing Sync now. Stock has its own schedule below.",options:[{label:"Every 15 minutes",value:"every_15_min"},{label:"Hourly",value:"hourly"},{label:"Every 6 hours",value:"every_6_hours"},{label:"Daily",value:"daily"}],...d("productPullSchedule")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"Match items by",options:[{label:"SKU",value:"sku"},{label:"Name",value:"name"}],...d("catalogMatchBy")}),ze.map(e=>(0,o.createElement)(s.CheckboxControl,{key:e.token,__nextHasNoMarginBottom:!0,label:e.label,checked:m.includes(e.token),onChange:o=>((e,o)=>{const t=o?[...m.filter(o=>o!==e),e]:m.filter(o=>o!==e);r.set("catalogPushFields",t)})(e.token,o)})),(0,o.createElement)(x,{label:"Default tax for new items",endpoint:"/zoho/taxes",listKey:"taxes",optionValue:"tax_id",optionLabel:"tax_name",value:r.value("itemDefaultTaxId"),onChange:e=>r.set("itemDefaultTaxId",e),formatLabel:e=>{var o;return`${e.tax_name} (${null!==(o=e.tax_percentage)&&void 0!==o?o:"?"}%)`}}),(0,o.createElement)("p",{className:"zbwc-muted"},"A product needs a SKU to reach Zoho. Without one there is nothing to identify it by, so it is left out rather than matched by name onto the wrong item. Orders containing it still sync — the product is listed by name on the line."),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Upper-case SKUs to avoid duplicates",...i("itemAutoFixSkuCasing")})):(0,o.createElement)(Y,{title:"Product sync",description:"Keep your WooCommerce catalogue and Zoho Books items in step.",bullets:["Push product edits to Zoho items, field by field","Pull Zoho items into WooCommerce products","Unlimited products every month"]}),_?(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:"Stock & inventory",description:"One switch: everything stock needs lives here, and nothing here does anything while it is off."},"off"===u&&!(e&&e.inventoryRefused)&&(0,o.createElement)(ce,null),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Sync stock levels with Zoho",help:"off"===u?"Off — stock is managed in each system separately. Products and orders still sync.":"On — the settings below decide which system wins and how stock travels.",checked:"off"!==u,onChange:e=>r.set("inventorySource",e?c.current:"off")}),"off"!==u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"Which system owns stock levels?",help:"The other system follows it. Pick the one your team actually counts stock in.",options:[{label:"WooCommerce → Zoho — the store is the source of truth",value:"woo"},{label:"Zoho → WooCommerce — Zoho is the source of truth",value:"zoho"}],...d("inventorySource")}),"woo"===u&&(0,o.createElement)(x,{label:"Inventory adjustment account",help:"Where Zoho books the value of each stock change this store pushes.",endpoint:"/zoho/accounts",listKey:"accounts",optionValue:"account_id",optionLabel:"account_name",value:r.value("inventoryAdjustmentAccountId"),onChange:e=>r.set("inventoryAdjustmentAccountId",e)}),"zoho"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"How often to pull stock",options:[{label:"Every 15 minutes",value:"every_15_min"},{label:"Hourly",value:"hourly"},{label:"Every 6 hours",value:"every_6_hours"},{label:"Daily",value:"daily"}],...d("inventoryPullSchedule")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Allow stock to decrease on pull",help:"Off only ever raises WooCommerce stock — a guard against a half-configured Zoho warehouse zeroing the store.",...i("inventoryAllowDecreases")})),(0,o.createElement)("hr",{className:"zbwc-rule"}),(0,o.createElement)("p",{className:"zbwc-subhead"},"New items in Zoho"),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Create new items as inventory-tracked",help:"Zoho can only count stock for items created this way. Needs a Zoho Inventory subscription.",...i("createAsInventory")}),!!r.value("createAsInventory")&&(0,o.createElement)(x,{label:"Stock-on-hand account",help:"The asset account new stock-tracked items book against. Without it, items are created untracked.",endpoint:"/zoho/accounts",listKey:"accounts",optionValue:"account_id",optionLabel:"account_name",value:r.value("inventoryStockAccountId"),onChange:e=>r.set("inventoryStockAccountId",e)}))),"off"!==u&&(0,o.createElement)(S,{inventoryRefused:!(!e||!e.inventoryRefused)})):(0,o.createElement)(Y,{title:"Inventory & warehouses",description:"Choose which system owns stock levels and how they flow.",bullets:["Pick WooCommerce or Zoho as the source of truth for stock","Pull stock on a schedule, as often as every 15 minutes","Map each WooCommerce location to a Zoho warehouse"]}),(h||_)&&(0,o.createElement)(w,{title:"Sync now",description:"Queue a full re-sync in the background. Each button follows its sync toggles above."},(0,o.createElement)(s.Flex,{justify:"flex-start",gap:3,wrap:!0},h&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(he,{...f("wooToZohoProductEnabled","Push WooCommerce products to Zoho items"),onClick:()=>b("products","Product sync to Zoho")},"Sync all products to Zoho")),h&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(he,{...f("zohoToWooProductEnabled","Pull Zoho items into WooCommerce products"),onClick:()=>b("zoho_products","Item pull from Zoho")},"Pull all items from Zoho")),_&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(he,{...g,onClick:()=>b("zoho_inventory","Stock pull from Zoho")},"Pull stock from Zoho")))),(0,o.createElement)(v,{isDirty:r.isDirty,saving:r.saving,onSave:async()=>{const e=await r.save();a(e?"Product settings saved.":r.error||"Save failed",e?"success":"error")},onReset:r.reset}))}const ke=7e3,Ee="__queue";function we({onNewEntries:e}){const[t,r]=(0,n.useState)(null),a=(0,n.useRef)(new Map),[s,c]=(0,n.useState)(()=>Date.now()),l=(0,n.useRef)(0),i=(0,n.useRef)(null),d=(0,n.useRef)(e);d.current=e,(0,n.useEffect)(()=>{let e=!0,o=null;const t=async()=>{let n=6e3;try{const o=await b("/logs/activity");if(!e)return;const t=Date.now(),m=o.now?1e3*o.now-t:0,u=a.current;(o.tasks||[]).forEach(e=>{if("done"===e.state){const o=u.get(e.key);u.set(e.key,{task:e,at:o?o.at:1e3*e.updated-m})}else u.has(e.key)&&u.delete(e.key)});const h=(o.queue?.pending||0)+(o.queue?.running||0);h>0?(l.current=Math.max(l.current,h),u.delete(Ee)):l.current>0&&(u.set(Ee,{total:l.current,at:t}),l.current=0),r(o),c(t),null!==i.current&&o.latest>i.current&&d.current&&d.current(),i.current=o.latest,n=(s=o)&&((s.tasks||[]).some(e=>"running"===e.state)||(s.queue?.pending||0)+(s.queue?.running||0)>0)||u.size?2e3:6e3}catch(e){n=12e3}var s;e&&(o=setTimeout(t,n))};return t(),()=>{e=!1,clearTimeout(o)}},[]);const m=a.current.size>0;(0,n.useEffect)(()=>{if(!m)return;const e=setInterval(()=>{const e=Date.now();a.current.forEach((o,t)=>{e-o.at>=ke&&a.current.delete(t)}),c(e)},150);return()=>clearInterval(e)},[m]);const u=t?.tasks||[],h=t?.queue||{},_=(h.pending||0)+(h.running||0),p=e=>s-e.at>=6400,y=[],f=new Set;u.forEach(e=>{if("done"===e.state){const t=a.current.get(e.key);return t&&s-t.at<ke&&y.push((0,o.createElement)(Ne,{key:e.key,task:t.task,leaving:p(t)})),void f.add(e.key)}y.push((0,o.createElement)(Ne,{key:e.key,task:e,leaving:!1}))}),a.current.forEach((e,t)=>{t!==Ee&&!f.has(t)&&s-e.at<ke&&y.push((0,o.createElement)(Ne,{key:t,task:e.task,leaving:p(e)}))});const z=a.current.get(Ee);return _>0?y.push((0,o.createElement)(Ce,{key:Ee,queue:h,total:l.current,leaving:!1})):z&&s-z.at<ke&&y.push((0,o.createElement)(Ce,{key:Ee,queue:h,total:z.total,leaving:p(z)})),y.length?(0,o.createElement)("div",{className:"zbwc-activity"},y):null}function ve({state:e,label:t,pct:r,meta:n,leaving:a}){const s="running"===e&&null===r,c="running"===e?r:100;return(0,o.createElement)("div",{className:"zbwc-activity__task is-"+e+(a?" is-leaving":"")},(0,o.createElement)("span",{className:"zbwc-activity__label"},"done"===e?"✓ ":"",t),(0,o.createElement)("div",{className:"zbwc-activity__bar",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":s?void 0:c,"aria-label":t},(0,o.createElement)("div",{className:"zbwc-activity__fill"+(s?" is-indeterminate":""),style:s?void 0:{width:c+"%"}})),(0,o.createElement)("span",{className:"zbwc-activity__pct"},s?"—":(null!=r?r:c)+"%"),(0,o.createElement)("span",{className:"zbwc-activity__meta",title:n},n))}function Ne({task:e,leaving:t}){const r=e.total>0,n=["done","failed"].includes(e.state)?e.state:"running",s=e.done||0,c=e.failed||0,l=e.skipped||0,i=s+c+l,d=o=>r?Math.min(100,Math.round(o/e.total*100)):null;let m,u;if("done"===n)m=e.message||(0,a.__)("Finished","erp7-order-sync-for-zoho-books"),u=100;else if("failed"===n)m=e.message||(0,a.__)("Stopped","erp7-order-sync-for-zoho-books"),u=r?d(s):0;else if(r){const o=[(0,a.sprintf)(/* translators: 1: records Zoho accepted so far, 2: records in this run. */ /* translators: 1: records Zoho accepted so far, 2: records in this run. */
    2222(0,a.__)("%1$s of %2$s sent","erp7-order-sync-for-zoho-books"),s,e.total)];c&&o.push((0,a.sprintf)(/* translators: 1: records Zoho refused, 2: Zoho's reason. */ /* translators: 1: records Zoho refused, 2: Zoho's reason. */
    … …  
    2626(0,a._n)("%d record so far","%d records so far",e.done,"erp7-order-sync-for-zoho-books"),e.done);m=e.detail?o+" · "+e.detail:o,u=null}return(0,o.createElement)(ve,{state:n,label:e.label,pct:u,meta:m,leaving:t})}function Ce({queue:e,total:t,leaving:r}){const n=(e.pending||0)+(e.running||0),s=Math.max(t,n,1),c=s-n,l=(0,a.__)("Background queue","erp7-order-sync-for-zoho-books");if(!n){const e=(0,a.sprintf)(/* translators: %d: number of background jobs that ran. */ /* translators: %d: number of background jobs that ran. */
    2727(0,a._n)("%d job done","%d jobs done",s,"erp7-order-sync-for-zoho-books"),s);return(0,o.createElement)(ve,{state:"done",label:l,pct:100,meta:e,leaving:r})}const i=(e.byHook||[]).map(e=>`${e.label} ${e.pending+e.running}`).join(" · "),d=(0,a.sprintf)(/* translators: 1: jobs finished, 2: jobs in this run. */ /* translators: 1: jobs finished, 2: jobs in this run. */
    28 (0,a.__)("%1$d of %2$d done","erp7-order-sync-for-zoho-books"),c,s);return(0,o.createElement)(ve,{state:"running",label:l,pct:Math.round(c/s*100),meta:i?d+" · "+i:d,leaving:r})}const Se=[{label:(0,a.__)("All levels","erp7-order-sync-for-zoho-books"),value:""},{label:(0,a.__)("Info","erp7-order-sync-for-zoho-books"),value:"info"},{label:(0,a.__)("Warning","erp7-order-sync-for-zoho-books"),value:"warn"},{label:(0,a.__)("Error","erp7-order-sync-for-zoho-books"),value:"error"},{label:(0,a.__)("Debug","erp7-order-sync-for-zoho-books"),value:"debug"}],xe=[{value:"order",label:(0,a.__)("Orders","erp7-order-sync-for-zoho-books")},{value:"customer",label:(0,a.__)("Customers","erp7-order-sync-for-zoho-books")},{value:"product",label:(0,a.__)("Products","erp7-order-sync-for-zoho-books")},{value:"inventory",label:(0,a.__)("Inventory","erp7-order-sync-for-zoho-books")},{value:"payment",label:(0,a.__)("Payments","erp7-order-sync-for-zoho-books")},{value:"refund",label:(0,a.__)("Refunds","erp7-order-sync-for-zoho-books")},{value:"fulfillment",label:(0,a.__)("Fulfilment","erp7-order-sync-for-zoho-books")},{value:"bulk",label:(0,a.__)("Bulk backfill","erp7-order-sync-for-zoho-books")},{value:"connection",label:(0,a.__)("Connection","erp7-order-sync-for-zoho-books")},{value:"webhook",label:(0,a.__)("Webhooks","erp7-order-sync-for-zoho-books")},{value:"system",label:(0,a.__)("System","erp7-order-sync-for-zoho-books")}],Be={error:"error",warn:"warn",info:"info",debug:"info"};function Ze(){const[e,t]=(0,n.useState)("log");return(0,o.createElement)("div",{className:"zbwc-page"},(0,o.createElement)("div",{className:"zbwc-subnav"},(0,o.createElement)("button",{type:"button",className:"zbwc-subnav__tab"+("log"===e?" is-active":""),onClick:()=>t("log")},(0,a.__)("Sync log","erp7-order-sync-for-zoho-books")),(0,o.createElement)("button",{type:"button",className:"zbwc-subnav__tab"+("failed"===e?" is-active":""),onClick:()=>t("failed")},(0,a.__)("Failed jobs","erp7-order-sync-for-zoho-books"))),"log"===e?(0,o.createElement)(Ie,null):(0,o.createElement)(Pe,null))}function Te(){const e=l(),{data:t,reload:r}=g(()=>b("/logs/share"),[]),[c,i]=(0,n.useState)(!1);if(!t)return null;const d=(0,a.__)("Customer email addresses and phone numbers are removed before anything is sent.","erp7-order-sync-for-zoho-books");let m;return m=t.enabled?t.error?(0,a.sprintf)(/* translators: %s: why the last attempt failed. */ /* translators: %s: why the last attempt failed. */
    29 (0,a.__)("The last attempt did not go through (%s). It tries again by itself.","erp7-order-sync-for-zoho-books"),t.error):t.sentAt?(0,a.sprintf)(/* translators: %s: date and time of the last batch. */ /* translators: %s: date and time of the last batch. */
    30 (0,a.__)("Sent every 5 minutes; last sent %s.","erp7-order-sync-for-zoho-books"),oe(1e3*t.sentAt,{dateStyle:"medium",timeStyle:"short"}))+" "+d:(0,a.__)("Sent every 5 minutes.","erp7-order-sync-for-zoho-books")+" "+d:(0,a.__)("Off. Switch it on so ERP7 support can see this store’s failures and help sooner.","erp7-order-sync-for-zoho-books")+" "+d,(0,o.createElement)("div",{className:"zbwc-share-log"},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Send this log to ERP7 support","erp7-order-sync-for-zoho-books"),help:m,checked:!!t.enabled,disabled:c,onChange:async o=>{i(!0);try{await y("/logs/share",{enabled:o}),r()}catch(o){e(z(o),"error")}i(!1)}}))}function Ie(){const e=l(),[t,r]=(0,n.useState)({level:"",category:"",search:"",page:1,per_page:25}),{loading:c,data:i,error:d,reload:m}=g(()=>b("/logs?"+function(e){const o=new URLSearchParams;return Object.entries(e).forEach(([e,t])=>{""!==t&&null!=t&&o.set(e,t)}),o.toString()}(t)),[t]),u=(e,o)=>r(t=>({...t,[e]:o,page:1})),h=i?Math.max(1,Math.ceil(i.total/i.per_page)):1;return(0,o.createElement)(w,{title:(0,a.__)("Sync log","erp7-order-sync-for-zoho-books"),actions:(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,onClick:async()=>{try{await f("/logs"),e((0,a.__)("Log cleared.","erp7-order-sync-for-zoho-books"),"success"),m()}catch(o){e(z(o),"error")}}},(0,a.__)("Clear log","erp7-order-sync-for-zoho-books"))},(0,o.createElement)(Te,null),(0,o.createElement)(we,{onNewEntries:()=>1===t.page&&m()}),(0,o.createElement)("div",{className:"zbwc-filters"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Level","erp7-order-sync-for-zoho-books"),value:t.level,options:Se,onChange:e=>u("level",e)}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Category","erp7-order-sync-for-zoho-books"),value:t.category,options:[{label:(0,a.__)("All categories","erp7-order-sync-for-zoho-books"),value:""},...xe],onChange:e=>u("category",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Search","erp7-order-sync-for-zoho-books"),value:t.search,onChange:e=>u("search",e)})),(0,o.createElement)(T,{error:d,onRetry:m}),c?(0,o.createElement)(Z,null):(0,o.createElement)(o.Fragment,null,(0,o.createElement)("table",{className:"widefat striped zbwc-logtable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Time","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Level","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Category","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Message","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Resource","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("tbody",null,0===i.items.length&&(0,o.createElement)("tr",null,(0,o.createElement)("td",{colSpan:"5"},(0,a.__)("No log entries.","erp7-order-sync-for-zoho-books"))),i.items.map(e=>(0,o.createElement)("tr",{key:e.id},(0,o.createElement)("td",{className:"zbwc-nowrap",title:te(e.created_at)},oe(e.created_at)),(0,o.createElement)("td",null,(0,o.createElement)(B,{status:Be[e.level]||"info"},e.level)),(0,o.createElement)("td",null,e.category),(0,o.createElement)("td",{className:"zbwc-logtable__msg"},e.message),(0,o.createElement)("td",{className:"zbwc-logtable__res"},e.resource_name||e.resource_id||""))))),(0,o.createElement)("div",{className:"zbwc-pager"},(0,o.createElement)(s.Button,{variant:"tertiary",disabled:t.page<=1,onClick:()=>r(e=>({...e,page:e.page-1}))},(0,a.__)("‹ Prev","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",null,(0,a.sprintf)(/* translators: 1: current page number, 2: total number of pages, 3: total number of log entries. */ /* translators: 1: current page number, 2: total number of pages, 3: total number of log entries. */
    31 (0,a.__)("Page %1$s of %2$s (%3$s)","erp7-order-sync-for-zoho-books"),i.page,h,i.total)),(0,o.createElement)(s.Button,{variant:"tertiary",disabled:t.page>=h,onClick:()=>r(e=>({...e,page:e.page+1}))},(0,a.__)("Next ›","erp7-order-sync-for-zoho-books")))))}function Pe(){const e=l(),{loading:t,data:r,error:n,reload:c}=g(()=>b("/logs/failed"),[]);return(0,o.createElement)(w,{title:(0,a.__)("Failed jobs","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Jobs that exhausted their retries. Re-queue after fixing the cause.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(T,{error:n,onRetry:c}),t?(0,o.createElement)(Z,null):(0,o.createElement)("table",{className:"widefat striped zbwc-failtable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("When","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Job","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Error","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Attempts","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null))),(0,o.createElement)("tbody",null,0===r.items.length&&(0,o.createElement)("tr",null,(0,o.createElement)("td",{colSpan:"5"},(0,a.__)("No failed jobs. 🎉","erp7-order-sync-for-zoho-books"))),r.items.map(t=>(0,o.createElement)("tr",{key:t.id},(0,o.createElement)("td",{className:"zbwc-nowrap",title:te(t.last_attempt_at)},oe(t.last_attempt_at)),(0,o.createElement)("td",null,(0,o.createElement)("code",null,t.hook)),(0,o.createElement)("td",{className:"zbwc-errcell"},t.error),(0,o.createElement)("td",{className:"zbwc-failtable__attempts","data-label":(0,a.__)("Attempts","erp7-order-sync-for-zoho-books")},t.attempts),(0,o.createElement)("td",{className:"zbwc-maptable__actions"},(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>(async o=>{try{await y(`/logs/failed/${o}/retry`,{}),e((0,a.__)("Job re-queued.","erp7-order-sync-for-zoho-books"),"success"),c()}catch(o){e(z(o),"error")}})(t.id)},(0,a.__)("Retry","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"tertiary",size:"small",isDestructive:!0,onClick:()=>(async o=>{try{await f(`/logs/failed/${o}`),c()}catch(o){e(z(o),"error")}})(t.id)},(0,a.__)("Delete","erp7-order-sync-for-zoho-books"))))))))}const Me=[{icon:"cart",title:(0,a.__)("Orders sync as they happen","erp7-order-sync-for-zoho-books"),text:(0,a.__)("Every WooCommerce order becomes a sales order or invoice in Zoho Books, with its contact and line items created for you — no nightly batch, no copy-paste.","erp7-order-sync-for-zoho-books")},{icon:"update",title:(0,a.__)("Customers and products stay in step","erp7-order-sync-for-zoho-books"),text:(0,a.__)("Contacts and catalogue items are matched by SKU or name, created when an order needs them, and kept aligned as they change.","erp7-order-sync-for-zoho-books")},{icon:"shield",title:(0,a.__)("Built for audit trails","erp7-order-sync-for-zoho-books"),text:(0,a.__)("Every sync attempt is logged with what was sent. Failures retry on their own and land in one queue you can inspect and re-run.","erp7-order-sync-for-zoho-books")}];function Re({onStart:e}){return(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Sync WooCommerce with","erp7-order-sync-for-zoho-books"),(0,o.createElement)("br",null),(0,a.__)("Zoho Books in minutes","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Stop re-typing orders into your accounting. This integration keeps orders, customers, products and refunds aligned between your store and Zoho Books.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ul",{className:"zbwc-ob-features"},Me.map(e=>(0,o.createElement)("li",{key:e.icon,className:"zbwc-ob-feature"},(0,o.createElement)("span",{className:"zbwc-ob-icon","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-"+e.icon})),(0,o.createElement)("div",null,(0,o.createElement)("h3",null,e.title),(0,o.createElement)("p",null,e.text))))),(0,o.createElement)(s.Button,{variant:"primary",onClick:e},(0,a.__)("Get started →","erp7-order-sync-for-zoho-books")))}const De=[["accounts.zoho.com","United States (.com)"],["accounts.zoho.eu","Europe (.eu)"],["accounts.zoho.in","India (.in)"],["accounts.zoho.com.au","Australia (.com.au)"],["accounts.zoho.jp","Japan (.jp)"],["accounts.zohocloud.ca","Canada (.ca)"],["accounts.zoho.sa","Saudi Arabia (.sa)"],["accounts.zoho.com.cn","China (.com.cn)"]];function Oe({redirectUri:e,onClose:t}){return(0,o.createElement)(s.Modal,{title:(0,a.__)("Create your Zoho API client","erp7-order-sync-for-zoho-books"),onRequestClose:t,className:"zbwc-guide-modal"},(0,o.createElement)("p",{className:"zbwc-guide-modal__lede"},(0,a.__)('Zoho asks every store to use its own API client — a small "app" you create once in the Zoho console. About 5 minutes, no code, and your Zoho password never touches this site.',"erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-guide-modal__steps"},(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Copy your Redirect URI","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Use the Copy button next to the Authorized Redirect URI on this screen. Zoho only accepts an exact match, so always copy — never retype.","erp7-order-sync-for-zoho-books")),!!e&&(0,o.createElement)("code",{className:"zbwc-guide-modal__uri"},e)),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Open the Zoho API Console","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Go to","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("a",{href:"https://api-console.zoho.com/",target:"_blank",rel:"noreferrer"},"api-console.zoho.com")," ",(0,a.__)('and sign in with the same Zoho account that owns your Zoho Books organization. Click "Get Started" or "Add Client".',"erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('Choose "Server-based Applications"',"erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Not Self Client — this plugin uses the secure redirect flow only.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Fill the form and press Create","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)('Client Name: anything you like (e.g. "My Store — WooCommerce Sync"). Homepage URL: your store address. Authorized Redirect URIs: paste from step 1. Zoho then shows your Client ID (starts with "1000.") and Client Secret.',"erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Paste the keys here and connect","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Pick the data centre you sign in on, paste the Client ID and Secret, and press Save & Connect to Zoho. The secret is stored encrypted.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Accept, then pick your organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Zoho shows what the plugin needs (full Zoho Books access, to create orders, contacts, items and invoices). Press Accept — you land straight back here, and the organization chooser opens by itself.","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("h3",{className:"zbwc-guide-modal__h"},(0,a.__)("Which region am I on?","erp7-order-sync-for-zoho-books")),(0,o.createElement)("table",{className:"zbwc-guide-modal__table"},(0,o.createElement)("tbody",null,De.map(([e,t])=>(0,o.createElement)("tr",{key:e},(0,o.createElement)("td",null,(0,o.createElement)("code",null,e)),(0,o.createElement)("td",null,t))))),(0,o.createElement)("h3",{className:"zbwc-guide-modal__h"},(0,a.__)("If something goes wrong","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ul",{className:"zbwc-guide-modal__fixes"},(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"Invalid Redirect URI"',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("the console URI doesn't exactly match this site's. Protocol, www, and trailing slash all count. Copy again, replace, retry.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"Invalid client" or a login loop',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("region mismatch. Set the data centre to the domain you actually sign in on.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"The authorization session expired"',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("the one-time token lasts 15 minutes. Nothing is wrong — connect again.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"Authorization was denied"',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("Cancel was pressed on Zoho's screen. Connect again and press Accept.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-guide-modal__footer"},(0,o.createElement)(s.Button,{variant:"primary",onClick:t},(0,a.__)("Got it","erp7-order-sync-for-zoho-books"))))}const Ae={connected:[(0,a.__)("Connected to Zoho Books.","erp7-order-sync-for-zoho-books"),"success"],error:[(0,a.__)("OAuth failed — double-check your Client ID/Secret and region.","erp7-order-sync-for-zoho-books"),"error"],denied:[(0,a.__)("Authorization was denied.","erp7-order-sync-for-zoho-books"),"error"],badstate:[(0,a.__)("The authorization session expired. Please try again.","erp7-order-sync-for-zoho-books"),"error"]};function We({connection:e,reloadConnection:t,onOrganization:r}){const c=l(),[i,d]=(0,n.useState)({clientId:e.clientId||"",clientSecret:"",region:e.region||"us"}),[m,u]=(0,n.useState)(!1),[h,_]=(0,n.useState)(!1),[p,b]=(0,n.useState)(!1),[g,k]=(0,n.useState)(!1),E=!!e.hasRefreshToken&&!e.organizationId;(0,n.useEffect)(()=>{const e=new URLSearchParams(window.location.search),o=e.get("zbwc_oauth");if(!o)return;const r=Ae[o];r&&c(r[0],r[1]),e.delete("zbwc_oauth"),window.history.replaceState({},"",window.location.pathname+(e.toString()?"?"+e.toString():"")+window.location.hash),"connected"===o&&t&&t()},[]);const w=(0,n.useRef)(!1);(0,n.useEffect)(()=>{E&&!w.current&&(w.current=!0,u(!0))},[E]);const v=(e,o)=>d(t=>({...t,[e]:o})),N=Object.entries(e.regions||{us:"United States (.com)"}).map(([e,o])=>({value:e,label:o}));return e.connected?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Zoho Books is connected","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Your store can talk to Zoho Books. Continue to choose what should sync.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-option is-done"},(0,o.createElement)("div",{className:"zbwc-ob-option__head"},(0,o.createElement)("h3",null,(0,a.__)("Organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-ob-badge is-ok"},(0,a.__)("Connected","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("table",{className:"zbwc-kv"},(0,o.createElement)("tbody",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,e.organizationName||e.organizationId||"—")),(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Data centre","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,e.apiDomain||(e.regions||{})[e.region]||e.region))))),(0,o.createElement)(s.Button,{variant:"secondary",isDestructive:!0,onClick:async()=>{b(!0);try{await f("/connection"),w.current=!1,u(!1),c((0,a.__)("Disconnected.","erp7-order-sync-for-zoho-books"),"info"),t&&t()}catch(e){c(z(e),"error")}finally{b(!1)}},disabled:p,className:"zbwc-ob-quiet"},(0,a.__)("Disconnect and start over","erp7-order-sync-for-zoho-books"))):E?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Choose your organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Your Zoho account is authorized. Pick the Zoho Books organization this store should sync with.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-option is-done"},(0,o.createElement)("div",{className:"zbwc-ob-option__head"},(0,o.createElement)("h3",null,(0,a.__)("Organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-ob-badge is-ok"},(0,a.__)("Authorized","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("p",{className:"zbwc-ob-option__desc"},(0,a.__)("One decision left: which organization the sync writes into.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-actions"},(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>u(!0)},(0,a.__)("Choose organization","erp7-order-sync-for-zoho-books")))),m&&(0,o.createElement)(se,{onChosen:e=>{u(!1),r&&r(e.name||""),t&&t()},onClose:()=>u(!1)})):(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Connect your Zoho Books account","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Zoho asks each store to use its own API client. Create one, paste its keys below, and you'll be redirected to Zoho to authorize — we never see or store your Zoho password.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"link",className:"zbwc-ob-guidelink",onClick:()=>_(!0)},(0,a.__)("Step-by-step guide →","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-option"},(0,o.createElement)("div",{className:"zbwc-ob-option__head"},(0,o.createElement)("h3",null,(0,a.__)("Server-based Application","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-ob-badge is-ok"},(0,a.__)("Secure OAuth","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("p",{className:"zbwc-ob-option__desc"},(0,a.__)("Authorize once and the connection keeps itself alive — Zoho issues a refresh token, so there is nothing to renew by hand.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-ob-howto"},(0,o.createElement)("li",null,(0,a.__)("Open the","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)(s.ExternalLink,{href:"https://api-console.zoho.com/"},(0,a.__)("Zoho API Console","erp7-order-sync-for-zoho-books"))," ",(0,a.__)("and create a","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("strong",null,(0,a.__)("Server-based Application","erp7-order-sync-for-zoho-books")),"."),(0,o.createElement)("li",null,(0,a.__)("Paste this as its","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("strong",null,(0,a.__)("Authorized Redirect URI","erp7-order-sync-for-zoho-books")),":",(0,o.createElement)("span",{className:"zbwc-ob-copyrow"},(0,o.createElement)("code",{className:"zbwc-code"},e.redirectUri),(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{if(await de(e.redirectUri))return k(!0),void setTimeout(()=>k(!1),2e3);c((0,a.__)("Copy failed — select the URL and copy it manually.","erp7-order-sync-for-zoho-books"),"error")}},g?(0,a.__)("Copied","erp7-order-sync-for-zoho-books"):(0,a.__)("Copy","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("li",null,(0,a.__)("Copy its Client ID and Client Secret into the fields below.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-ob-fields"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Data centre / region","erp7-order-sync-for-zoho-books"),help:(0,a.__)("The Zoho domain you sign in on — .com, .eu, .in and so on.","erp7-order-sync-for-zoho-books"),value:i.region,options:N,onChange:e=>v("region",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client ID","erp7-order-sync-for-zoho-books"),value:i.clientId,onChange:e=>v("clientId",e),autoComplete:"off"}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client Secret","erp7-order-sync-for-zoho-books"),type:"password",value:i.clientSecret,placeholder:e.hasClientSecret?(0,a.__)("•••••••• (saved — leave blank to keep)","erp7-order-sync-for-zoho-books"):"",onChange:e=>v("clientSecret",e),autoComplete:"off"}))),(0,o.createElement)("div",{className:"zbwc-ob-actions"},(0,o.createElement)(s.Button,{variant:"primary",onClick:async()=>{b(!0);try{await(async()=>{const e={clientId:i.clientId,region:i.region};i.clientSecret&&(e.clientSecret=i.clientSecret),await y("/connection/credentials",e)})();const e=await y("/connection/authorize",{});window.location.href=e.authUrl}catch(e){c(z(e),"error"),b(!1)}},isBusy:p,disabled:p||!i.clientId||!i.clientSecret&&!e.hasClientSecret},(0,o.createElement)("span",{className:"dashicons dashicons-admin-links","aria-hidden":"true"}),(0,a.__)("Connect with Zoho","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"secondary",href:"https://api-console.zoho.com/",target:"_blank"},(0,a.__)("Open Zoho API Console ↗","erp7-order-sync-for-zoho-books"))),h&&(0,o.createElement)(Oe,{redirectUri:e.redirectUri,onClose:()=>_(!1)}))}const He=[{value:"invoice",label:(0,a.__)("Sales order, then invoice","erp7-order-sync-for-zoho-books")},{value:"salesorder",label:(0,a.__)("Sales order only","erp7-order-sync-for-zoho-books")}],Fe=[{value:"processing",label:(0,a.__)("Processing","erp7-order-sync-for-zoho-books")},{value:"completed",label:(0,a.__)("Completed","erp7-order-sync-for-zoho-books")},{value:"on-hold",label:(0,a.__)("On hold","erp7-order-sync-for-zoho-books")},{value:"any",label:(0,a.__)("Any status change","erp7-order-sync-for-zoho-books")}];function Ue({connection:e,orgName:t,resources:r,onToggle:n,prefs:c,setPref:l}){const i=U("payments")?(0,a.__)("Every WooCommerce order — line items, shipping, fees, coupons and tax — pushed to Zoho Books. Payments are recorded, refunds become credit notes, and cancelled orders are voided.","erp7-order-sync-for-zoho-books"):(0,a.__)("Every WooCommerce order — line items, shipping, fees, coupons and tax — pushed to Zoho Books as a sales order or invoice, with its contact and items created as needed.","erp7-order-sync-for-zoho-books"),d=U("inventory")?(0,a.__)("Each WooCommerce product and variation maps to one Zoho Books item, matched by SKU. Stock levels pull back from Zoho on a schedule you set.","erp7-order-sync-for-zoho-books"):(0,a.__)("Each WooCommerce product and variation maps to one Zoho Books item, matched by SKU, so order lines land against the right thing.","erp7-order-sync-for-zoho-books"),m=t||e.organizationName||e.organizationId,u=e.apiDomain||"";return(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Pick what to sync","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},m&&u?(0,a.sprintf)(/* translators: 1: Zoho organization name or id, 2: Zoho API domain. */ /* translators: 1: Zoho organization name or id, 2: Zoho API domain. */
    32 (0,a.__)("Connected to %1$s on %2$s. Only what you switch on here will sync — change any of it later.","erp7-order-sync-for-zoho-books"),m,u):(0,a.__)("Only what you switch on here will sync — you can change any of it later.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(Le,{icon:"cart",title:(0,a.__)("Orders & invoices","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Recommended","erp7-order-sync-for-zoho-books"),text:i,checked:r.orders,onChange:()=>n("orders")},r.orders&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Create each order as","erp7-order-sync-for-zoho-books"),value:c.zohoDocumentType,options:He,onChange:e=>l("zohoDocumentType",e)}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Send it when the order status becomes","erp7-order-sync-for-zoho-books"),value:c.orderTriggerStatus,options:Fe,onChange:e=>l("orderTriggerStatus",e)}))),(0,o.createElement)(Le,{icon:"groups",title:(0,a.__)("Customers","erp7-order-sync-for-zoho-books"),text:(0,a.__)("WooCommerce customers and guest checkouts become Zoho contacts, with billing and shipping addresses kept in step as they change.","erp7-order-sync-for-zoho-books"),checked:r.customers,onChange:()=>n("customers")}),(0,o.createElement)(Le,{icon:"products",title:(0,a.__)("Products","erp7-order-sync-for-zoho-books"),text:d,checked:r.products,onChange:()=>n("products")}),e&&e.inventoryRefused?(0,o.createElement)(ie,{region:e.region}):(0,o.createElement)(ce,null),!r.orders&&(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1,className:"zbwc-ob-inline-notice"},(0,a.__)("With orders off, nothing is sent to Zoho Books when an order is placed. You can switch it on later on the Orders tab.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-footnote"},(0,a.__)("Syncing runs in the background on WooCommerce's own Action Scheduler queue, so checkout is never held up waiting for Zoho.","erp7-order-sync-for-zoho-books")))}function Le({icon:e,title:t,badge:r,text:n,checked:a,onChange:c,children:l}){return(0,o.createElement)("div",{className:"zbwc-ob-resource"+(a?" is-on":"")},(0,o.createElement)("div",{className:"zbwc-ob-resource__main",role:"presentation",onClick:c},(0,o.createElement)("div",{className:"zbwc-ob-resource__box",role:"presentation",onClick:e=>e.stopPropagation()},(0,o.createElement)(s.CheckboxControl,{__nextHasNoMarginBottom:!0,checked:a,onChange:c,label:"","aria-label":t})),(0,o.createElement)("span",{className:"zbwc-ob-icon","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-"+e})),(0,o.createElement)("div",{className:"zbwc-ob-resource__body"},(0,o.createElement)("div",{className:"zbwc-ob-resource__head"},(0,o.createElement)("h3",null,t),r&&(0,o.createElement)("span",{className:"zbwc-ob-badge is-blue"},r)),(0,o.createElement)("p",null,n),l&&(0,o.createElement)("div",{className:"zbwc-ob-resource__prefs",role:"presentation",onClick:e=>e.stopPropagation()},l))))}function $e({connection:e,orgName:t,resources:r,onFinish:n}){const c=Object.keys(r).filter(e=>r[e]),l=!!W().enforced,i=t||e.organizationName||e.organizationId,d=(m=e.apiDomain,String(m||"").replace(/^https?:\/\//,"").replace(/^www\./,"").replace(/\/$/,""));var m;const u=[{title:(0,a.__)("Connected to Zoho Books","erp7-order-sync-for-zoho-books"),detail:[i,d].filter(Boolean).join(" · "),badge:(0,a.__)("Active","erp7-order-sync-for-zoho-books"),tone:"is-ok"},{title:(0,a.__)("Sync preferences saved","erp7-order-sync-for-zoho-books"),detail:c.length?j(c.map(e=>q(e))):(0,a.__)("Nothing switched on yet","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Saved","erp7-order-sync-for-zoho-books"),tone:"is-ok"},r.orders?{title:(0,a.__)("Order events are live","erp7-order-sync-for-zoho-books"),detail:(0,a.__)("New orders queue for Zoho as their status changes","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Live","erp7-order-sync-for-zoho-books"),tone:"is-ok"}:{title:(0,a.__)("Order sync is off","erp7-order-sync-for-zoho-books"),detail:(0,a.__)("Switch it on any time from the Orders tab","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Off","erp7-order-sync-for-zoho-books"),tone:"is-muted"}];return(0,o.createElement)("div",{className:"zbwc-ob-done"},(0,o.createElement)("span",{className:"zbwc-ob-done__check","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-yes"})),(0,o.createElement)("h2",null,(0,a.__)("You're all set","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Your store and Zoho Books are connected. New records sync automatically as they happen in WooCommerce.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ul",{className:"zbwc-ob-summary"},u.map(e=>(0,o.createElement)("li",{key:e.title,className:"zbwc-ob-summary__row"},(0,o.createElement)("span",{className:"zbwc-ob-summary__icon "+e.tone,"aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-yes"})),(0,o.createElement)("span",{className:"zbwc-ob-summary__text"},(0,o.createElement)("strong",null,e.title),e.detail&&(0,o.createElement)("span",null,e.detail)),(0,o.createElement)("span",{className:"zbwc-ob-badge "+e.tone},e.badge)))),(0,o.createElement)("div",{className:"zbwc-ob-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.sprintf)(/* translators: %s: the name of the Orders-tab button, "Run backfill". */ /* translators: %s: the name of the Orders-tab button, "Run backfill". */
    33 (0,a.__)("Already have orders in WooCommerce? Use %s on the Orders tab to send the ones you placed before today.","erp7-order-sync-for-zoho-books"),(0,a.__)("Run backfill","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("div",{className:"zbwc-ob-done__actions"},(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>n("dashboard")},(0,a.__)("Go to dashboard","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"secondary",onClick:()=>n("orders")},(0,a.__)("Review sync settings","erp7-order-sync-for-zoho-books")),l&&(0,o.createElement)(s.Button,{variant:"tertiary",onClick:()=>n("plan")},(0,a.__)("View plan","erp7-order-sync-for-zoho-books"))))}const je=[{title:(0,a.__)("Welcome","erp7-order-sync-for-zoho-books"),todo:(0,a.__)("See how the sync keeps your books aligned.","erp7-order-sync-for-zoho-books"),done:(0,a.__)("Overview of the integration.","erp7-order-sync-for-zoho-books")},{title:(0,a.__)("Connect Zoho Books","erp7-order-sync-for-zoho-books"),todo:(0,a.__)("Authorize your organization and data centre.","erp7-order-sync-for-zoho-books"),done:(0,a.__)("Organization authorized.","erp7-order-sync-for-zoho-books")},{title:(0,a.__)("Pick what to sync","erp7-order-sync-for-zoho-books"),todo:(0,a.__)("Choose the records that flow into Zoho.","erp7-order-sync-for-zoho-books"),done:(0,a.__)("Sync preferences saved.","erp7-order-sync-for-zoho-books")}],qe="undefined"!=typeof window&&window.location.search.includes("zbwc_oauth=");function Ge({connection:e,reloadConnection:t,onFinish:r}){const c=l(),[i,d]=(0,n.useState)(()=>function(e){return qe?1:e.connected?2:e.hasRefreshToken?1:0}(e)),[m,u]=(0,n.useState)(!1),[h,_]=(0,n.useState)(!1),[p,b]=(0,n.useState)(""),[f,g]=(0,n.useState)({orders:!0,customers:!0,products:!0}),[k,E]=(0,n.useState)({zohoDocumentType:"invoice",orderTriggerStatus:"processing"}),w=(0,n.useRef)(!1);(0,n.useEffect)(()=>{w.current?e.connected&&1===i&&d(2):w.current=!0},[e.connected]);const v=Object.values(f).filter(Boolean).length;return m?(0,o.createElement)("div",{className:"zbwc-onboarding"},(0,o.createElement)(Ye,null),(0,o.createElement)($e,{connection:e,orgName:p,resources:f,onFinish:r})):(0,o.createElement)("div",{className:"zbwc-onboarding"},(0,o.createElement)(Ye,null),(0,o.createElement)("div",{className:"zbwc-onboarding__titlerow"},(0,o.createElement)("h1",{className:"zbwc-onboarding__title"},(0,a.__)("Get set up","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-onboarding__chip"},(0,a.__)("Setup","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-onboarding__card"},(0,o.createElement)("div",{className:"zbwc-onboarding__panel"},(0,o.createElement)("p",{className:"zbwc-ob-eyebrow"},(0,a.sprintf)(/* translators: 1: current step number, 2: total steps, 3: step name. */ /* translators: 1: current step number, 2: total steps, 3: step name. */
    34 (0,a.__)("Step %1$d of %2$d · %3$s","erp7-order-sync-for-zoho-books"),i+1,je.length,je[i].title)),0===i&&(0,o.createElement)(Re,{onStart:()=>d(1)}),1===i&&(0,o.createElement)(We,{connection:e,reloadConnection:t,onOrganization:b}),2===i&&(0,o.createElement)(Ue,{connection:e,orgName:p,resources:f,onToggle:e=>g(o=>({...o,[e]:!o[e]})),prefs:k,setPref:(e,o)=>E(t=>({...t,[e]:o}))})),(0,o.createElement)("aside",{className:"zbwc-onboarding__aside"},(0,o.createElement)("h2",{className:"zbwc-ob-aside__title"},0===i?(0,a.__)("What's next","erp7-order-sync-for-zoho-books"):(0,a.__)("Setup progress","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-ob-progress"},je.map((e,t)=>(0,o.createElement)("li",{key:e.title,className:"zbwc-ob-progress__item"+(t===i?" is-active":"")+(t<i?" is-done":"")},(0,o.createElement)("span",{className:"zbwc-ob-progress__num","aria-hidden":"true"},t<i?(0,o.createElement)("span",{className:"dashicons dashicons-yes"}):t+1),(0,o.createElement)("span",{className:"zbwc-ob-progress__text"},(0,o.createElement)("strong",null,e.title),(0,o.createElement)("span",null,t<i?e.done:e.todo))))),(0,o.createElement)(Ke,{step:i,connection:e,selectedCount:v,total:Object.keys(f).length}))),i>0&&(0,o.createElement)("div",{className:"zbwc-ob-nav"},(0,o.createElement)(s.Button,{variant:"secondary",onClick:()=>d(i-1)},(0,a.__)("← Back","erp7-order-sync-for-zoho-books")),1===i?(0,o.createElement)(s.Button,{variant:"primary",disabled:!e.connected,onClick:()=>d(2)},e.connected?(0,a.__)("Continue →","erp7-order-sync-for-zoho-books"):(0,a.__)("Connect to continue","erp7-order-sync-for-zoho-books")):(0,o.createElement)(s.Button,{variant:"primary",onClick:async()=>{_(!0);try{await y("/settings",{settings:{onboardingCompleted:!0,orderSyncMasterEnabled:f.orders,wooToZohoEnabled:!0,zohoDocumentType:k.zohoDocumentType,orderTriggerStatus:k.orderTriggerStatus,customerSyncMasterEnabled:f.customers,wooToZohoCustomerEnabled:!0,productSyncMasterEnabled:f.products,wooToZohoProductEnabled:!0}}),u(!0)}catch(e){c(z(e),"error")}finally{_(!1)}},isBusy:h,disabled:h},(0,a.__)("Save and finish →","erp7-order-sync-for-zoho-books"))))}function Ye(){return(0,o.createElement)("div",{className:"zbwc-onboarding__bar"},(0,o.createElement)("span",{className:"zbwc-onboarding__logo dashicons dashicons-book-alt","aria-hidden":"true"}),(0,o.createElement)("span",{className:"zbwc-onboarding__brand"},(0,a.__)("Zoho Books Integration For WooCommerce","erp7-order-sync-for-zoho-books")))}function Ke({step:e,connection:t,selectedCount:r,total:n}){if(0===e){const e=Object.keys(t.regions||{}).map(e=>e.toUpperCase()).join(", ");return(0,o.createElement)("ul",{className:"zbwc-ob-facts"},(0,o.createElement)("li",null,(0,a.__)("Secure OAuth — your Zoho password never touches this site.","erp7-order-sync-for-zoho-books")),e&&(0,o.createElement)("li",null,(0,a.sprintf)(/* translators: %s: comma-separated data centre codes, e.g. "US, EU, IN". */ /* translators: %s: comma-separated data centre codes, e.g. "US, EU, IN". */
     28(0,a.__)("%1$d of %2$d done","erp7-order-sync-for-zoho-books"),c,s);return(0,o.createElement)(ve,{state:"running",label:l,pct:Math.round(c/s*100),meta:i?d+" · "+i:d,leaving:r})}const Se=[{label:(0,a.__)("All levels","erp7-order-sync-for-zoho-books"),value:""},{label:(0,a.__)("Info","erp7-order-sync-for-zoho-books"),value:"info"},{label:(0,a.__)("Warning","erp7-order-sync-for-zoho-books"),value:"warn"},{label:(0,a.__)("Error","erp7-order-sync-for-zoho-books"),value:"error"},{label:(0,a.__)("Debug","erp7-order-sync-for-zoho-books"),value:"debug"}],xe=[{value:"order",label:(0,a.__)("Orders","erp7-order-sync-for-zoho-books")},{value:"customer",label:(0,a.__)("Customers","erp7-order-sync-for-zoho-books")},{value:"product",label:(0,a.__)("Products","erp7-order-sync-for-zoho-books")},{value:"inventory",label:(0,a.__)("Inventory","erp7-order-sync-for-zoho-books")},{value:"payment",label:(0,a.__)("Payments","erp7-order-sync-for-zoho-books")},{value:"refund",label:(0,a.__)("Refunds","erp7-order-sync-for-zoho-books")},{value:"fulfillment",label:(0,a.__)("Fulfilment","erp7-order-sync-for-zoho-books")},{value:"bulk",label:(0,a.__)("Bulk backfill","erp7-order-sync-for-zoho-books")},{value:"connection",label:(0,a.__)("Connection","erp7-order-sync-for-zoho-books")},{value:"webhook",label:(0,a.__)("Webhooks","erp7-order-sync-for-zoho-books")},{value:"system",label:(0,a.__)("System","erp7-order-sync-for-zoho-books")}],Be={error:"error",warn:"warn",info:"info",debug:"info"};function Ze(){const[e,t]=(0,n.useState)("log");return(0,o.createElement)("div",{className:"zbwc-page"},(0,o.createElement)("div",{className:"zbwc-subnav"},(0,o.createElement)("button",{type:"button",className:"zbwc-subnav__tab"+("log"===e?" is-active":""),onClick:()=>t("log")},(0,a.__)("Sync log","erp7-order-sync-for-zoho-books")),(0,o.createElement)("button",{type:"button",className:"zbwc-subnav__tab"+("failed"===e?" is-active":""),onClick:()=>t("failed")},(0,a.__)("Failed jobs","erp7-order-sync-for-zoho-books"))),"log"===e?(0,o.createElement)(Te,null):(0,o.createElement)(Ie,null))}function Te(){const e=l(),[t,r]=(0,n.useState)({level:"",category:"",search:"",page:1,per_page:25}),{loading:c,data:i,error:d,reload:m}=g(()=>b("/logs?"+function(e){const o=new URLSearchParams;return Object.entries(e).forEach(([e,t])=>{""!==t&&null!=t&&o.set(e,t)}),o.toString()}(t)),[t]),u=(e,o)=>r(t=>({...t,[e]:o,page:1})),h=i?Math.max(1,Math.ceil(i.total/i.per_page)):1;return(0,o.createElement)(w,{title:(0,a.__)("Sync log","erp7-order-sync-for-zoho-books"),actions:(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,onClick:async()=>{try{await f("/logs"),e((0,a.__)("Log cleared.","erp7-order-sync-for-zoho-books"),"success"),m()}catch(o){e(z(o),"error")}}},(0,a.__)("Clear log","erp7-order-sync-for-zoho-books"))},(0,o.createElement)(we,{onNewEntries:()=>1===t.page&&m()}),(0,o.createElement)("div",{className:"zbwc-filters"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Level","erp7-order-sync-for-zoho-books"),value:t.level,options:Se,onChange:e=>u("level",e)}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Category","erp7-order-sync-for-zoho-books"),value:t.category,options:[{label:(0,a.__)("All categories","erp7-order-sync-for-zoho-books"),value:""},...xe],onChange:e=>u("category",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Search","erp7-order-sync-for-zoho-books"),value:t.search,onChange:e=>u("search",e)})),(0,o.createElement)(T,{error:d,onRetry:m}),c?(0,o.createElement)(Z,null):(0,o.createElement)(o.Fragment,null,(0,o.createElement)("table",{className:"widefat striped zbwc-logtable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Time","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Level","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Category","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Message","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Resource","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("tbody",null,0===i.items.length&&(0,o.createElement)("tr",null,(0,o.createElement)("td",{colSpan:"5"},(0,a.__)("No log entries.","erp7-order-sync-for-zoho-books"))),i.items.map(e=>(0,o.createElement)("tr",{key:e.id},(0,o.createElement)("td",{className:"zbwc-nowrap",title:te(e.created_at)},oe(e.created_at)),(0,o.createElement)("td",null,(0,o.createElement)(B,{status:Be[e.level]||"info"},e.level)),(0,o.createElement)("td",null,e.category),(0,o.createElement)("td",{className:"zbwc-logtable__msg"},e.message),(0,o.createElement)("td",{className:"zbwc-logtable__res"},e.resource_name||e.resource_id||""))))),(0,o.createElement)("div",{className:"zbwc-pager"},(0,o.createElement)(s.Button,{variant:"tertiary",disabled:t.page<=1,onClick:()=>r(e=>({...e,page:e.page-1}))},(0,a.__)("‹ Prev","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",null,(0,a.sprintf)(/* translators: 1: current page number, 2: total number of pages, 3: total number of log entries. */ /* translators: 1: current page number, 2: total number of pages, 3: total number of log entries. */
     29(0,a.__)("Page %1$s of %2$s (%3$s)","erp7-order-sync-for-zoho-books"),i.page,h,i.total)),(0,o.createElement)(s.Button,{variant:"tertiary",disabled:t.page>=h,onClick:()=>r(e=>({...e,page:e.page+1}))},(0,a.__)("Next ›","erp7-order-sync-for-zoho-books")))))}function Ie(){const e=l(),{loading:t,data:r,error:n,reload:c}=g(()=>b("/logs/failed"),[]);return(0,o.createElement)(w,{title:(0,a.__)("Failed jobs","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Jobs that exhausted their retries. Re-queue after fixing the cause.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(T,{error:n,onRetry:c}),t?(0,o.createElement)(Z,null):(0,o.createElement)("table",{className:"widefat striped zbwc-failtable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("When","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Job","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Error","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Attempts","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null))),(0,o.createElement)("tbody",null,0===r.items.length&&(0,o.createElement)("tr",null,(0,o.createElement)("td",{colSpan:"5"},(0,a.__)("No failed jobs. 🎉","erp7-order-sync-for-zoho-books"))),r.items.map(t=>(0,o.createElement)("tr",{key:t.id},(0,o.createElement)("td",{className:"zbwc-nowrap",title:te(t.last_attempt_at)},oe(t.last_attempt_at)),(0,o.createElement)("td",null,(0,o.createElement)("code",null,t.hook)),(0,o.createElement)("td",{className:"zbwc-errcell"},t.error),(0,o.createElement)("td",{className:"zbwc-failtable__attempts","data-label":(0,a.__)("Attempts","erp7-order-sync-for-zoho-books")},t.attempts),(0,o.createElement)("td",{className:"zbwc-maptable__actions"},(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>(async o=>{try{await y(`/logs/failed/${o}/retry`,{}),e((0,a.__)("Job re-queued.","erp7-order-sync-for-zoho-books"),"success"),c()}catch(o){e(z(o),"error")}})(t.id)},(0,a.__)("Retry","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"tertiary",size:"small",isDestructive:!0,onClick:()=>(async o=>{try{await f(`/logs/failed/${o}`),c()}catch(o){e(z(o),"error")}})(t.id)},(0,a.__)("Delete","erp7-order-sync-for-zoho-books"))))))))}const Pe=[{icon:"cart",title:(0,a.__)("Orders sync as they happen","erp7-order-sync-for-zoho-books"),text:(0,a.__)("Every WooCommerce order becomes a sales order or invoice in Zoho Books, with its contact and line items created for you — no nightly batch, no copy-paste.","erp7-order-sync-for-zoho-books")},{icon:"update",title:(0,a.__)("Customers and products stay in step","erp7-order-sync-for-zoho-books"),text:(0,a.__)("Contacts and catalogue items are matched by SKU or name, created when an order needs them, and kept aligned as they change.","erp7-order-sync-for-zoho-books")},{icon:"shield",title:(0,a.__)("Built for audit trails","erp7-order-sync-for-zoho-books"),text:(0,a.__)("Every sync attempt is logged with what was sent. Failures retry on their own and land in one queue you can inspect and re-run.","erp7-order-sync-for-zoho-books")}];function Me({onStart:e}){return(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Sync WooCommerce with","erp7-order-sync-for-zoho-books"),(0,o.createElement)("br",null),(0,a.__)("Zoho Books in minutes","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Stop re-typing orders into your accounting. This integration keeps orders, customers, products and refunds aligned between your store and Zoho Books.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ul",{className:"zbwc-ob-features"},Pe.map(e=>(0,o.createElement)("li",{key:e.icon,className:"zbwc-ob-feature"},(0,o.createElement)("span",{className:"zbwc-ob-icon","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-"+e.icon})),(0,o.createElement)("div",null,(0,o.createElement)("h3",null,e.title),(0,o.createElement)("p",null,e.text))))),(0,o.createElement)(s.Button,{variant:"primary",onClick:e},(0,a.__)("Get started →","erp7-order-sync-for-zoho-books")))}const De=[["accounts.zoho.com","United States (.com)"],["accounts.zoho.eu","Europe (.eu)"],["accounts.zoho.in","India (.in)"],["accounts.zoho.com.au","Australia (.com.au)"],["accounts.zoho.jp","Japan (.jp)"],["accounts.zohocloud.ca","Canada (.ca)"],["accounts.zoho.sa","Saudi Arabia (.sa)"],["accounts.zoho.com.cn","China (.com.cn)"]];function Re({redirectUri:e,onClose:t}){return(0,o.createElement)(s.Modal,{title:(0,a.__)("Create your Zoho API client","erp7-order-sync-for-zoho-books"),onRequestClose:t,className:"zbwc-guide-modal"},(0,o.createElement)("p",{className:"zbwc-guide-modal__lede"},(0,a.__)('Zoho asks every store to use its own API client — a small "app" you create once in the Zoho console. About 5 minutes, no code, and your Zoho password never touches this site.',"erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-guide-modal__steps"},(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Copy your Redirect URI","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Use the Copy button next to the Authorized Redirect URI on this screen. Zoho only accepts an exact match, so always copy — never retype.","erp7-order-sync-for-zoho-books")),!!e&&(0,o.createElement)("code",{className:"zbwc-guide-modal__uri"},e)),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Open the Zoho API Console","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Go to","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("a",{href:"https://api-console.zoho.com/",target:"_blank",rel:"noreferrer"},"api-console.zoho.com")," ",(0,a.__)('and sign in with the same Zoho account that owns your Zoho Books organization. Click "Get Started" or "Add Client".',"erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('Choose "Server-based Applications"',"erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Not Self Client — this plugin uses the secure redirect flow only.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Fill the form and press Create","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)('Client Name: anything you like (e.g. "My Store — WooCommerce Sync"). Homepage URL: your store address. Authorized Redirect URIs: paste from step 1. Zoho then shows your Client ID (starts with "1000.") and Client Secret.',"erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Paste the keys here and connect","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Pick the data centre you sign in on, paste the Client ID and Secret, and press Save & Connect to Zoho. The secret is stored encrypted.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Accept, then pick your organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Zoho shows what the plugin needs (full Zoho Books access, to create orders, contacts, items and invoices). Press Accept — you land straight back here, and the organization chooser opens by itself.","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("h3",{className:"zbwc-guide-modal__h"},(0,a.__)("Which region am I on?","erp7-order-sync-for-zoho-books")),(0,o.createElement)("table",{className:"zbwc-guide-modal__table"},(0,o.createElement)("tbody",null,De.map(([e,t])=>(0,o.createElement)("tr",{key:e},(0,o.createElement)("td",null,(0,o.createElement)("code",null,e)),(0,o.createElement)("td",null,t))))),(0,o.createElement)("h3",{className:"zbwc-guide-modal__h"},(0,a.__)("If something goes wrong","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ul",{className:"zbwc-guide-modal__fixes"},(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"Invalid Redirect URI"',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("the console URI doesn't exactly match this site's. Protocol, www, and trailing slash all count. Copy again, replace, retry.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"Invalid client" or a login loop',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("region mismatch. Set the data centre to the domain you actually sign in on.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"The authorization session expired"',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("the one-time token lasts 15 minutes. Nothing is wrong — connect again.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"Authorization was denied"',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("Cancel was pressed on Zoho's screen. Connect again and press Accept.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-guide-modal__footer"},(0,o.createElement)(s.Button,{variant:"primary",onClick:t},(0,a.__)("Got it","erp7-order-sync-for-zoho-books"))))}const Oe={connected:[(0,a.__)("Connected to Zoho Books.","erp7-order-sync-for-zoho-books"),"success"],error:[(0,a.__)("OAuth failed — double-check your Client ID/Secret and region.","erp7-order-sync-for-zoho-books"),"error"],denied:[(0,a.__)("Authorization was denied.","erp7-order-sync-for-zoho-books"),"error"],badstate:[(0,a.__)("The authorization session expired. Please try again.","erp7-order-sync-for-zoho-books"),"error"]};function Ae({connection:e,reloadConnection:t,onOrganization:r}){const c=l(),[i,d]=(0,n.useState)({clientId:e.clientId||"",clientSecret:"",region:e.region||"us"}),[m,u]=(0,n.useState)(!1),[h,_]=(0,n.useState)(!1),[p,b]=(0,n.useState)(!1),[g,k]=(0,n.useState)(!1),E=!!e.hasRefreshToken&&!e.organizationId;(0,n.useEffect)(()=>{const e=new URLSearchParams(window.location.search),o=e.get("zbwc_oauth");if(!o)return;const r=Oe[o];r&&c(r[0],r[1]),e.delete("zbwc_oauth"),window.history.replaceState({},"",window.location.pathname+(e.toString()?"?"+e.toString():"")+window.location.hash),"connected"===o&&t&&t()},[]);const w=(0,n.useRef)(!1);(0,n.useEffect)(()=>{E&&!w.current&&(w.current=!0,u(!0))},[E]);const v=(e,o)=>d(t=>({...t,[e]:o})),N=Object.entries(e.regions||{us:"United States (.com)"}).map(([e,o])=>({value:e,label:o}));return e.connected?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Zoho Books is connected","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Your store can talk to Zoho Books. Continue to choose what should sync.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-option is-done"},(0,o.createElement)("div",{className:"zbwc-ob-option__head"},(0,o.createElement)("h3",null,(0,a.__)("Organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-ob-badge is-ok"},(0,a.__)("Connected","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("table",{className:"zbwc-kv"},(0,o.createElement)("tbody",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,e.organizationName||e.organizationId||"—")),(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Data centre","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,e.apiDomain||(e.regions||{})[e.region]||e.region))))),(0,o.createElement)(s.Button,{variant:"secondary",isDestructive:!0,onClick:async()=>{b(!0);try{await f("/connection"),w.current=!1,u(!1),c((0,a.__)("Disconnected.","erp7-order-sync-for-zoho-books"),"info"),t&&t()}catch(e){c(z(e),"error")}finally{b(!1)}},disabled:p,className:"zbwc-ob-quiet"},(0,a.__)("Disconnect and start over","erp7-order-sync-for-zoho-books"))):E?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Choose your organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Your Zoho account is authorized. Pick the Zoho Books organization this store should sync with.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-option is-done"},(0,o.createElement)("div",{className:"zbwc-ob-option__head"},(0,o.createElement)("h3",null,(0,a.__)("Organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-ob-badge is-ok"},(0,a.__)("Authorized","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("p",{className:"zbwc-ob-option__desc"},(0,a.__)("One decision left: which organization the sync writes into.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-actions"},(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>u(!0)},(0,a.__)("Choose organization","erp7-order-sync-for-zoho-books")))),m&&(0,o.createElement)(se,{onChosen:e=>{u(!1),r&&r(e.name||""),t&&t()},onClose:()=>u(!1)})):(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Connect your Zoho Books account","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Zoho asks each store to use its own API client. Create one, paste its keys below, and you'll be redirected to Zoho to authorize — we never see or store your Zoho password.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"link",className:"zbwc-ob-guidelink",onClick:()=>_(!0)},(0,a.__)("Step-by-step guide →","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-option"},(0,o.createElement)("div",{className:"zbwc-ob-option__head"},(0,o.createElement)("h3",null,(0,a.__)("Server-based Application","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-ob-badge is-ok"},(0,a.__)("Secure OAuth","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("p",{className:"zbwc-ob-option__desc"},(0,a.__)("Authorize once and the connection keeps itself alive — Zoho issues a refresh token, so there is nothing to renew by hand.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-ob-howto"},(0,o.createElement)("li",null,(0,a.__)("Open the","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)(s.ExternalLink,{href:"https://api-console.zoho.com/"},(0,a.__)("Zoho API Console","erp7-order-sync-for-zoho-books"))," ",(0,a.__)("and create a","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("strong",null,(0,a.__)("Server-based Application","erp7-order-sync-for-zoho-books")),"."),(0,o.createElement)("li",null,(0,a.__)("Paste this as its","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("strong",null,(0,a.__)("Authorized Redirect URI","erp7-order-sync-for-zoho-books")),":",(0,o.createElement)("span",{className:"zbwc-ob-copyrow"},(0,o.createElement)("code",{className:"zbwc-code"},e.redirectUri),(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{if(await de(e.redirectUri))return k(!0),void setTimeout(()=>k(!1),2e3);c((0,a.__)("Copy failed — select the URL and copy it manually.","erp7-order-sync-for-zoho-books"),"error")}},g?(0,a.__)("Copied","erp7-order-sync-for-zoho-books"):(0,a.__)("Copy","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("li",null,(0,a.__)("Copy its Client ID and Client Secret into the fields below.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-ob-fields"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Data centre / region","erp7-order-sync-for-zoho-books"),help:(0,a.__)("The Zoho domain you sign in on — .com, .eu, .in and so on.","erp7-order-sync-for-zoho-books"),value:i.region,options:N,onChange:e=>v("region",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client ID","erp7-order-sync-for-zoho-books"),value:i.clientId,onChange:e=>v("clientId",e),autoComplete:"off"}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client Secret","erp7-order-sync-for-zoho-books"),type:"password",value:i.clientSecret,placeholder:e.hasClientSecret?(0,a.__)("•••••••• (saved — leave blank to keep)","erp7-order-sync-for-zoho-books"):"",onChange:e=>v("clientSecret",e),autoComplete:"off"}))),(0,o.createElement)("div",{className:"zbwc-ob-actions"},(0,o.createElement)(s.Button,{variant:"primary",onClick:async()=>{b(!0);try{await(async()=>{const e={clientId:i.clientId,region:i.region};i.clientSecret&&(e.clientSecret=i.clientSecret),await y("/connection/credentials",e)})();const e=await y("/connection/authorize",{});window.location.href=e.authUrl}catch(e){c(z(e),"error"),b(!1)}},isBusy:p,disabled:p||!i.clientId||!i.clientSecret&&!e.hasClientSecret},(0,o.createElement)("span",{className:"dashicons dashicons-admin-links","aria-hidden":"true"}),(0,a.__)("Connect with Zoho","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"secondary",href:"https://api-console.zoho.com/",target:"_blank"},(0,a.__)("Open Zoho API Console ↗","erp7-order-sync-for-zoho-books"))),h&&(0,o.createElement)(Re,{redirectUri:e.redirectUri,onClose:()=>_(!1)}))}const We=[{value:"invoice",label:(0,a.__)("Sales order, then invoice","erp7-order-sync-for-zoho-books")},{value:"salesorder",label:(0,a.__)("Sales order only","erp7-order-sync-for-zoho-books")}],Fe=[{value:"processing",label:(0,a.__)("Processing","erp7-order-sync-for-zoho-books")},{value:"completed",label:(0,a.__)("Completed","erp7-order-sync-for-zoho-books")},{value:"on-hold",label:(0,a.__)("On hold","erp7-order-sync-for-zoho-books")},{value:"any",label:(0,a.__)("Any status change","erp7-order-sync-for-zoho-books")}];function He({connection:e,orgName:t,resources:r,onToggle:n,prefs:c,setPref:l}){const i=U("payments")?(0,a.__)("Every WooCommerce order — line items, shipping, fees, coupons and tax — pushed to Zoho Books. Payments are recorded, refunds become credit notes, and cancelled orders are voided.","erp7-order-sync-for-zoho-books"):(0,a.__)("Every WooCommerce order — line items, shipping, fees, coupons and tax — pushed to Zoho Books as a sales order or invoice, with its contact and items created as needed.","erp7-order-sync-for-zoho-books"),d=U("inventory")?(0,a.__)("Each WooCommerce product and variation maps to one Zoho Books item, matched by SKU. Stock levels pull back from Zoho on a schedule you set.","erp7-order-sync-for-zoho-books"):(0,a.__)("Each WooCommerce product and variation maps to one Zoho Books item, matched by SKU, so order lines land against the right thing.","erp7-order-sync-for-zoho-books"),m=t||e.organizationName||e.organizationId,u=e.apiDomain||"";return(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Pick what to sync","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},m&&u?(0,a.sprintf)(/* translators: 1: Zoho organization name or id, 2: Zoho API domain. */ /* translators: 1: Zoho organization name or id, 2: Zoho API domain. */
     30(0,a.__)("Connected to %1$s on %2$s. Only what you switch on here will sync — change any of it later.","erp7-order-sync-for-zoho-books"),m,u):(0,a.__)("Only what you switch on here will sync — you can change any of it later.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(Ue,{icon:"cart",title:(0,a.__)("Orders & invoices","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Recommended","erp7-order-sync-for-zoho-books"),text:i,checked:r.orders,onChange:()=>n("orders")},r.orders&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Create each order as","erp7-order-sync-for-zoho-books"),value:c.zohoDocumentType,options:We,onChange:e=>l("zohoDocumentType",e)}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Send it when the order status becomes","erp7-order-sync-for-zoho-books"),value:c.orderTriggerStatus,options:Fe,onChange:e=>l("orderTriggerStatus",e)}))),(0,o.createElement)(Ue,{icon:"groups",title:(0,a.__)("Customers","erp7-order-sync-for-zoho-books"),text:(0,a.__)("WooCommerce customers and guest checkouts become Zoho contacts, with billing and shipping addresses kept in step as they change.","erp7-order-sync-for-zoho-books"),checked:r.customers,onChange:()=>n("customers")}),(0,o.createElement)(Ue,{icon:"products",title:(0,a.__)("Products","erp7-order-sync-for-zoho-books"),text:d,checked:r.products,onChange:()=>n("products")}),e&&e.inventoryRefused?(0,o.createElement)(ie,{region:e.region}):(0,o.createElement)(ce,null),!r.orders&&(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1,className:"zbwc-ob-inline-notice"},(0,a.__)("With orders off, nothing is sent to Zoho Books when an order is placed. You can switch it on later on the Orders tab.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-footnote"},(0,a.__)("Syncing runs in the background on WooCommerce's own Action Scheduler queue, so checkout is never held up waiting for Zoho.","erp7-order-sync-for-zoho-books")))}function Ue({icon:e,title:t,badge:r,text:n,checked:a,onChange:c,children:l}){return(0,o.createElement)("div",{className:"zbwc-ob-resource"+(a?" is-on":"")},(0,o.createElement)("div",{className:"zbwc-ob-resource__main",role:"presentation",onClick:c},(0,o.createElement)("div",{className:"zbwc-ob-resource__box",role:"presentation",onClick:e=>e.stopPropagation()},(0,o.createElement)(s.CheckboxControl,{__nextHasNoMarginBottom:!0,checked:a,onChange:c,label:"","aria-label":t})),(0,o.createElement)("span",{className:"zbwc-ob-icon","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-"+e})),(0,o.createElement)("div",{className:"zbwc-ob-resource__body"},(0,o.createElement)("div",{className:"zbwc-ob-resource__head"},(0,o.createElement)("h3",null,t),r&&(0,o.createElement)("span",{className:"zbwc-ob-badge is-blue"},r)),(0,o.createElement)("p",null,n),l&&(0,o.createElement)("div",{className:"zbwc-ob-resource__prefs",role:"presentation",onClick:e=>e.stopPropagation()},l))))}function Le({connection:e,orgName:t,resources:r,onFinish:n}){const c=Object.keys(r).filter(e=>r[e]),l=!!W().enforced,i=t||e.organizationName||e.organizationId,d=(m=e.apiDomain,String(m||"").replace(/^https?:\/\//,"").replace(/^www\./,"").replace(/\/$/,""));var m;const u=[{title:(0,a.__)("Connected to Zoho Books","erp7-order-sync-for-zoho-books"),detail:[i,d].filter(Boolean).join(" · "),badge:(0,a.__)("Active","erp7-order-sync-for-zoho-books"),tone:"is-ok"},{title:(0,a.__)("Sync preferences saved","erp7-order-sync-for-zoho-books"),detail:c.length?j(c.map(e=>q(e))):(0,a.__)("Nothing switched on yet","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Saved","erp7-order-sync-for-zoho-books"),tone:"is-ok"},r.orders?{title:(0,a.__)("Order events are live","erp7-order-sync-for-zoho-books"),detail:(0,a.__)("New orders queue for Zoho as their status changes","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Live","erp7-order-sync-for-zoho-books"),tone:"is-ok"}:{title:(0,a.__)("Order sync is off","erp7-order-sync-for-zoho-books"),detail:(0,a.__)("Switch it on any time from the Orders tab","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Off","erp7-order-sync-for-zoho-books"),tone:"is-muted"}];return(0,o.createElement)("div",{className:"zbwc-ob-done"},(0,o.createElement)("span",{className:"zbwc-ob-done__check","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-yes"})),(0,o.createElement)("h2",null,(0,a.__)("You're all set","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Your store and Zoho Books are connected. New records sync automatically as they happen in WooCommerce.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ul",{className:"zbwc-ob-summary"},u.map(e=>(0,o.createElement)("li",{key:e.title,className:"zbwc-ob-summary__row"},(0,o.createElement)("span",{className:"zbwc-ob-summary__icon "+e.tone,"aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-yes"})),(0,o.createElement)("span",{className:"zbwc-ob-summary__text"},(0,o.createElement)("strong",null,e.title),e.detail&&(0,o.createElement)("span",null,e.detail)),(0,o.createElement)("span",{className:"zbwc-ob-badge "+e.tone},e.badge)))),(0,o.createElement)("div",{className:"zbwc-ob-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.sprintf)(/* translators: %s: the name of the Orders-tab button, "Run backfill". */ /* translators: %s: the name of the Orders-tab button, "Run backfill". */
     31(0,a.__)("Already have orders in WooCommerce? Use %s on the Orders tab to send the ones you placed before today.","erp7-order-sync-for-zoho-books"),(0,a.__)("Run backfill","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("div",{className:"zbwc-ob-done__actions"},(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>n("dashboard")},(0,a.__)("Go to dashboard","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"secondary",onClick:()=>n("orders")},(0,a.__)("Review sync settings","erp7-order-sync-for-zoho-books")),l&&(0,o.createElement)(s.Button,{variant:"tertiary",onClick:()=>n("plan")},(0,a.__)("View plan","erp7-order-sync-for-zoho-books"))))}const $e=[{title:(0,a.__)("Welcome","erp7-order-sync-for-zoho-books"),todo:(0,a.__)("See how the sync keeps your books aligned.","erp7-order-sync-for-zoho-books"),done:(0,a.__)("Overview of the integration.","erp7-order-sync-for-zoho-books")},{title:(0,a.__)("Connect Zoho Books","erp7-order-sync-for-zoho-books"),todo:(0,a.__)("Authorize your organization and data centre.","erp7-order-sync-for-zoho-books"),done:(0,a.__)("Organization authorized.","erp7-order-sync-for-zoho-books")},{title:(0,a.__)("Pick what to sync","erp7-order-sync-for-zoho-books"),todo:(0,a.__)("Choose the records that flow into Zoho.","erp7-order-sync-for-zoho-books"),done:(0,a.__)("Sync preferences saved.","erp7-order-sync-for-zoho-books")}],je="undefined"!=typeof window&&window.location.search.includes("zbwc_oauth=");function qe({connection:e,reloadConnection:t,onFinish:r}){const c=l(),[i,d]=(0,n.useState)(()=>function(e){return je?1:e.connected?2:e.hasRefreshToken?1:0}(e)),[m,u]=(0,n.useState)(!1),[h,_]=(0,n.useState)(!1),[p,b]=(0,n.useState)(""),[f,g]=(0,n.useState)({orders:!0,customers:!0,products:!0}),[k,E]=(0,n.useState)({zohoDocumentType:"invoice",orderTriggerStatus:"processing"}),w=(0,n.useRef)(!1);(0,n.useEffect)(()=>{w.current?e.connected&&1===i&&d(2):w.current=!0},[e.connected]);const v=Object.values(f).filter(Boolean).length;return m?(0,o.createElement)("div",{className:"zbwc-onboarding"},(0,o.createElement)(Ge,null),(0,o.createElement)(Le,{connection:e,orgName:p,resources:f,onFinish:r})):(0,o.createElement)("div",{className:"zbwc-onboarding"},(0,o.createElement)(Ge,null),(0,o.createElement)("div",{className:"zbwc-onboarding__titlerow"},(0,o.createElement)("h1",{className:"zbwc-onboarding__title"},(0,a.__)("Get set up","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-onboarding__chip"},(0,a.__)("Setup","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-onboarding__card"},(0,o.createElement)("div",{className:"zbwc-onboarding__panel"},(0,o.createElement)("p",{className:"zbwc-ob-eyebrow"},(0,a.sprintf)(/* translators: 1: current step number, 2: total steps, 3: step name. */ /* translators: 1: current step number, 2: total steps, 3: step name. */
     32(0,a.__)("Step %1$d of %2$d · %3$s","erp7-order-sync-for-zoho-books"),i+1,$e.length,$e[i].title)),0===i&&(0,o.createElement)(Me,{onStart:()=>d(1)}),1===i&&(0,o.createElement)(Ae,{connection:e,reloadConnection:t,onOrganization:b}),2===i&&(0,o.createElement)(He,{connection:e,orgName:p,resources:f,onToggle:e=>g(o=>({...o,[e]:!o[e]})),prefs:k,setPref:(e,o)=>E(t=>({...t,[e]:o}))})),(0,o.createElement)("aside",{className:"zbwc-onboarding__aside"},(0,o.createElement)("h2",{className:"zbwc-ob-aside__title"},0===i?(0,a.__)("What's next","erp7-order-sync-for-zoho-books"):(0,a.__)("Setup progress","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-ob-progress"},$e.map((e,t)=>(0,o.createElement)("li",{key:e.title,className:"zbwc-ob-progress__item"+(t===i?" is-active":"")+(t<i?" is-done":"")},(0,o.createElement)("span",{className:"zbwc-ob-progress__num","aria-hidden":"true"},t<i?(0,o.createElement)("span",{className:"dashicons dashicons-yes"}):t+1),(0,o.createElement)("span",{className:"zbwc-ob-progress__text"},(0,o.createElement)("strong",null,e.title),(0,o.createElement)("span",null,t<i?e.done:e.todo))))),(0,o.createElement)(Ye,{step:i,connection:e,selectedCount:v,total:Object.keys(f).length}))),i>0&&(0,o.createElement)("div",{className:"zbwc-ob-nav"},(0,o.createElement)(s.Button,{variant:"secondary",onClick:()=>d(i-1)},(0,a.__)("← Back","erp7-order-sync-for-zoho-books")),1===i?(0,o.createElement)(s.Button,{variant:"primary",disabled:!e.connected,onClick:()=>d(2)},e.connected?(0,a.__)("Continue →","erp7-order-sync-for-zoho-books"):(0,a.__)("Connect to continue","erp7-order-sync-for-zoho-books")):(0,o.createElement)(s.Button,{variant:"primary",onClick:async()=>{_(!0);try{await y("/settings",{settings:{onboardingCompleted:!0,orderSyncMasterEnabled:f.orders,wooToZohoEnabled:!0,zohoDocumentType:k.zohoDocumentType,orderTriggerStatus:k.orderTriggerStatus,customerSyncMasterEnabled:f.customers,wooToZohoCustomerEnabled:!0,productSyncMasterEnabled:f.products,wooToZohoProductEnabled:!0}}),u(!0)}catch(e){c(z(e),"error")}finally{_(!1)}},isBusy:h,disabled:h},(0,a.__)("Save and finish →","erp7-order-sync-for-zoho-books"))))}function Ge(){return(0,o.createElement)("div",{className:"zbwc-onboarding__bar"},(0,o.createElement)("span",{className:"zbwc-onboarding__logo dashicons dashicons-book-alt","aria-hidden":"true"}),(0,o.createElement)("span",{className:"zbwc-onboarding__brand"},(0,a.__)("Zoho Books Integration For WooCommerce","erp7-order-sync-for-zoho-books")))}function Ye({step:e,connection:t,selectedCount:r,total:n}){if(0===e){const e=Object.keys(t.regions||{}).map(e=>e.toUpperCase()).join(", ");return(0,o.createElement)("ul",{className:"zbwc-ob-facts"},(0,o.createElement)("li",null,(0,a.__)("Secure OAuth — your Zoho password never touches this site.","erp7-order-sync-for-zoho-books")),e&&(0,o.createElement)("li",null,(0,a.sprintf)(/* translators: %s: comma-separated data centre codes, e.g. "US, EU, IN". */ /* translators: %s: comma-separated data centre codes, e.g. "US, EU, IN". */
    3533(0,a.__)("Works with every Zoho data centre (%s).","erp7-order-sync-for-zoho-books"),e)),(0,o.createElement)("li",null,(0,a.__)("Nothing syncs until you say so on step 3.","erp7-order-sync-for-zoho-books")))}return 1===e?(0,o.createElement)("div",{className:"zbwc-ob-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("Step 3 is just picking what you want to sync. You can change all of it later in settings.","erp7-order-sync-for-zoho-books"))):(0,o.createElement)(o.Fragment,null,(0,o.createElement)("p",{className:"zbwc-ob-count"},(0,a.sprintf)(/* translators: 1: number ticked, 2: number available. */ /* translators: 1: number ticked, 2: number available. */
    36 (0,a.__)("%1$d of %2$d resources selected","erp7-order-sync-for-zoho-books"),r,n)),F()&&(0,o.createElement)("div",{className:"zbwc-ob-note is-plan"},(0,o.createElement)("span",{className:"dashicons dashicons-chart-bar","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.sprintf)(/* translators: %s: the monthly allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the monthly allowance, e.g. "10 orders, 10 products and 10 customers". */
    37 (0,a.__)("Your free plan covers %s each month. Re-syncing a record already sent to Zoho is always free.","erp7-order-sync-for-zoho-books"),G()))),(0,o.createElement)("div",{className:"zbwc-ob-note is-warn"},(0,o.createElement)("span",{className:"dashicons dashicons-warning","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("Zoho caps daily API calls by your Zoho plan. Each resource you switch on uses part of that quota — if the cap is reached, syncing pauses and resumes on its own, so nothing is lost.","erp7-order-sync-for-zoho-books"))))}const Ve={payments:(0,a.__)("Record payments in Zoho","erp7-order-sync-for-zoho-books"),refunds:(0,a.__)("Refunds & cancellations","erp7-order-sync-for-zoho-books"),fulfillment:(0,a.__)("Fulfilment","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("Customer sync","erp7-order-sync-for-zoho-books"),products:(0,a.__)("Product sync","erp7-order-sync-for-zoho-books"),inventory:(0,a.__)("Inventory","erp7-order-sync-for-zoho-books")},Je={orders:(0,a.__)("Orders synced","erp7-order-sync-for-zoho-books"),products:(0,a.__)("Products synced","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("Customers synced","erp7-order-sync-for-zoho-books")},Qe={active:"ok",trialing:"ok",past_due:"warn",inactive:"warn",cancelled:"error",canceled:"error",expired:"error"};function Xe(){const e=g(()=>b("/plan"),[]),t=g(()=>b("/plan/available"),[]),r=l(),[c,i]=(0,n.useState)(!1),[d,m]=(0,n.useState)(!1);if(e.loading)return(0,o.createElement)(Z,{label:(0,a.__)("Loading your plan…","erp7-order-sync-for-zoho-books")});if(e.error)return(0,o.createElement)(T,{error:e.error,onRetry:e.reload});const u=e.data||{},h=u.usage||{},_=h.limited?h.quotas||{}:null,p=u.features||[],f=t.data&&t.data.plans||[],k=!!(u.cancelling&&u.periodEnd&&1e3*u.periodEnd<=Date.now()),E=!(!u.connected||"free"===u.plan||!["active","trialing","past_due"].includes(u.status)||k),v=f.find(e=>e.isFree)||null,N=(u.all||[]).filter(e=>!p.includes(e)).map(e=>Ve[e]||e),C=async(o,t)=>{i(!0);try{const n=await o();return t&&r(t,"success"),e.reload(),n}catch(e){return r(z(e),"error"),null}finally{i(!1)}},S=async()=>{const e=await C(()=>y("/plan/portal"));e&&e.portalUrl&&(window.location.href=e.portalUrl)},x=(e,o)=>new Intl.NumberFormat(void 0,{style:"currency",currency:(o||"usd").toUpperCase()}).format((e||0)/100);return(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:(0,a.__)("Your plan","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Billing is handled by Stripe. Changes take effect straight away.","erp7-order-sync-for-zoho-books"),actions:(0,o.createElement)(s.Button,{variant:"secondary",isBusy:c,disabled:c,onClick:()=>C(()=>y("/plan/refresh"),(0,a.__)("Plan refreshed.","erp7-order-sync-for-zoho-books"))},(0,a.__)("Refresh","erp7-order-sync-for-zoho-books"))},(0,o.createElement)("table",{className:"zbwc-kv"},(0,o.createElement)("tbody",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Plan","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,(0,o.createElement)("strong",null,u.plan))),(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Status","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,(0,o.createElement)(B,{status:k?"error":Qe[u.status]||"info"},k?(0,a.__)("ended","erp7-order-sync-for-zoho-books"):u.status),u.inGrace&&(0,o.createElement)("em",null," ",(0,a.__)("(server unreachable — running on grace)","erp7-order-sync-for-zoho-books")))),u.periodEnd>0&&(0,o.createElement)("tr",null,(0,o.createElement)("th",null,k?(0,a.__)("Ended","erp7-order-sync-for-zoho-books"):u.cancelling?(0,a.__)("Access until","erp7-order-sync-for-zoho-books"):(0,a.__)("Renews","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,new Date(1e3*u.periodEnd).toLocaleDateString(),u.cancelling&&(0,o.createElement)(o.Fragment,null," ",(0,o.createElement)(B,{status:"warn"},(0,a.__)("Cancelling","erp7-order-sync-for-zoho-books"))))),(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("This site","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,u.connected?(0,a.__)("Linked to your subscription","erp7-order-sync-for-zoho-books"):(0,a.__)("Not linked — on the free plan","erp7-order-sync-for-zoho-books"))))),u.message&&(0,o.createElement)("p",{className:"zbwc-muted"},u.message),(0,o.createElement)(s.Flex,{justify:"flex-start",gap:2,className:"zbwc-actions"},u.manageBilling&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"secondary",isBusy:c,disabled:c,onClick:S},(0,a.__)("Manage billing","erp7-order-sync-for-zoho-books"))),E&&!u.cancelling&&!d&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,disabled:c,onClick:()=>m(!0)},(0,a.__)("Cancel subscription","erp7-order-sync-for-zoho-books"))),E&&u.cancelling&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",isBusy:c,disabled:c,onClick:()=>C(()=>y("/plan/resume"),(0,a.__)("Your subscription will continue.","erp7-order-sync-for-zoho-books"))},(0,a.__)("Keep my subscription","erp7-order-sync-for-zoho-books")))),k&&(0,o.createElement)(s.Notice,{status:"error",isDismissible:!1},(0,a.sprintf)(/* translators: %s: date the subscription ended. */ /* translators: %s: date the subscription ended. */
     34(0,a.__)("%1$d of %2$d resources selected","erp7-order-sync-for-zoho-books"),r,n)),H()&&(0,o.createElement)("div",{className:"zbwc-ob-note is-plan"},(0,o.createElement)("span",{className:"dashicons dashicons-chart-bar","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.sprintf)(/* translators: %s: the monthly allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the monthly allowance, e.g. "10 orders, 10 products and 10 customers". */
     35(0,a.__)("Your free plan covers %s each month. Re-syncing a record already sent to Zoho is always free.","erp7-order-sync-for-zoho-books"),G()))),(0,o.createElement)("div",{className:"zbwc-ob-note is-warn"},(0,o.createElement)("span",{className:"dashicons dashicons-warning","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("Zoho caps daily API calls by your Zoho plan. Each resource you switch on uses part of that quota — if the cap is reached, syncing pauses and resumes on its own, so nothing is lost.","erp7-order-sync-for-zoho-books"))))}const Ke={payments:(0,a.__)("Record payments in Zoho","erp7-order-sync-for-zoho-books"),refunds:(0,a.__)("Refunds & cancellations","erp7-order-sync-for-zoho-books"),fulfillment:(0,a.__)("Fulfilment","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("Customer sync","erp7-order-sync-for-zoho-books"),products:(0,a.__)("Product sync","erp7-order-sync-for-zoho-books"),inventory:(0,a.__)("Inventory","erp7-order-sync-for-zoho-books")},Ve={orders:(0,a.__)("Orders synced","erp7-order-sync-for-zoho-books"),products:(0,a.__)("Products synced","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("Customers synced","erp7-order-sync-for-zoho-books")},Je={active:"ok",trialing:"ok",past_due:"warn",inactive:"warn",cancelled:"error",canceled:"error",expired:"error"};function Qe(){const e=g(()=>b("/plan"),[]),t=g(()=>b("/plan/available"),[]),r=l(),[c,i]=(0,n.useState)(!1),[d,m]=(0,n.useState)(!1);if(e.loading)return(0,o.createElement)(Z,{label:(0,a.__)("Loading your plan…","erp7-order-sync-for-zoho-books")});if(e.error)return(0,o.createElement)(T,{error:e.error,onRetry:e.reload});const u=e.data||{},h=u.usage||{},_=h.limited?h.quotas||{}:null,p=u.features||[],f=t.data&&t.data.plans||[],k=!!(u.cancelling&&u.periodEnd&&1e3*u.periodEnd<=Date.now()),E=!(!u.connected||"free"===u.plan||!["active","trialing","past_due"].includes(u.status)||k),v=f.find(e=>e.isFree)||null,N=(u.all||[]).filter(e=>!p.includes(e)).map(e=>Ke[e]||e),C=async(o,t)=>{i(!0);try{const n=await o();return t&&r(t,"success"),e.reload(),n}catch(e){return r(z(e),"error"),null}finally{i(!1)}},S=async()=>{const e=await C(()=>y("/plan/portal"));e&&e.portalUrl&&(window.location.href=e.portalUrl)},x=(e,o)=>new Intl.NumberFormat(void 0,{style:"currency",currency:(o||"usd").toUpperCase()}).format((e||0)/100);return(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:(0,a.__)("Your plan","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Billing is handled by Stripe. Changes take effect straight away.","erp7-order-sync-for-zoho-books"),actions:(0,o.createElement)(s.Button,{variant:"secondary",isBusy:c,disabled:c,onClick:()=>C(()=>y("/plan/refresh"),(0,a.__)("Plan refreshed.","erp7-order-sync-for-zoho-books"))},(0,a.__)("Refresh","erp7-order-sync-for-zoho-books"))},(0,o.createElement)("table",{className:"zbwc-kv"},(0,o.createElement)("tbody",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Plan","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,(0,o.createElement)("strong",null,u.plan))),(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Status","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,(0,o.createElement)(B,{status:k?"error":Je[u.status]||"info"},k?(0,a.__)("ended","erp7-order-sync-for-zoho-books"):u.status),u.inGrace&&(0,o.createElement)("em",null," ",(0,a.__)("(server unreachable — running on grace)","erp7-order-sync-for-zoho-books")))),u.periodEnd>0&&(0,o.createElement)("tr",null,(0,o.createElement)("th",null,k?(0,a.__)("Ended","erp7-order-sync-for-zoho-books"):u.cancelling?(0,a.__)("Access until","erp7-order-sync-for-zoho-books"):(0,a.__)("Renews","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,new Date(1e3*u.periodEnd).toLocaleDateString(),u.cancelling&&(0,o.createElement)(o.Fragment,null," ",(0,o.createElement)(B,{status:"warn"},(0,a.__)("Cancelling","erp7-order-sync-for-zoho-books"))))),(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("This site","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,u.connected?(0,a.__)("Linked to your subscription","erp7-order-sync-for-zoho-books"):(0,a.__)("Not linked — on the free plan","erp7-order-sync-for-zoho-books"))))),u.message&&(0,o.createElement)("p",{className:"zbwc-muted"},u.message),(0,o.createElement)(s.Flex,{justify:"flex-start",gap:2,className:"zbwc-actions"},u.manageBilling&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"secondary",isBusy:c,disabled:c,onClick:S},(0,a.__)("Manage billing","erp7-order-sync-for-zoho-books"))),E&&!u.cancelling&&!d&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,disabled:c,onClick:()=>m(!0)},(0,a.__)("Cancel subscription","erp7-order-sync-for-zoho-books"))),E&&u.cancelling&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",isBusy:c,disabled:c,onClick:()=>C(()=>y("/plan/resume"),(0,a.__)("Your subscription will continue.","erp7-order-sync-for-zoho-books"))},(0,a.__)("Keep my subscription","erp7-order-sync-for-zoho-books")))),k&&(0,o.createElement)(s.Notice,{status:"error",isDismissible:!1},(0,a.sprintf)(/* translators: %s: date the subscription ended. */ /* translators: %s: date the subscription ended. */
    3836(0,a.__)("Your subscription ended on %s and this site is back on the free plan. Subscribe again below to restore the paid features — your settings and mappings were kept.","erp7-order-sync-for-zoho-books"),new Date(1e3*u.periodEnd).toLocaleDateString())),u.cancelling&&!k&&!d&&(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1},u.periodEnd>0?(0,a.sprintf)(/* translators: %s: date the subscription ends. */ /* translators: %s: date the subscription ends. */
    3937(0,a.__)("Your subscription is set to end on %s. Everything keeps working until then, and you can change your mind any time before that date.","erp7-order-sync-for-zoho-books"),new Date(1e3*u.periodEnd).toLocaleDateString()):(0,a.__)("Your subscription is set to end at the close of the current billing period.","erp7-order-sync-for-zoho-books")),d&&(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1,className:"zbwc-confirm"},(0,o.createElement)("p",null,u.periodEnd>0?(0,a.sprintf)(/* translators: %s: date access ends. */ /* translators: %s: date access ends. */
    4038(0,a.__)("You have paid up to %s, so nothing changes before then — the site keeps syncing and you will not be charged again. On that date this site drops to the free plan.","erp7-order-sync-for-zoho-books"),new Date(1e3*u.periodEnd).toLocaleDateString()):(0,a.__)("Your subscription will end at the close of the current billing period. Nothing changes before then.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Flex,{justify:"flex-start",gap:2},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",isDestructive:!0,isBusy:c,disabled:c,onClick:()=>{m(!1),C(()=>y("/plan/cancel"),(0,a.__)("Subscription set to end on the date shown.","erp7-order-sync-for-zoho-books"))}},(0,a.__)("Yes, cancel at period end","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"tertiary",disabled:c,onClick:()=>m(!1)},(0,a.__)("Never mind","erp7-order-sync-for-zoho-books")))))),f.length>0&&(0,o.createElement)(w,{title:(0,a.__)("Plans","erp7-order-sync-for-zoho-books"),description:E?(0,a.__)("Switching plans, updating your card and cancelling all happen in the Stripe billing portal, so you are charged the difference rather than twice.","erp7-order-sync-for-zoho-books"):(0,a.__)("Every sync feature is built into this plugin. A plan decides how much you can sync each month and which advanced areas are switched on.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("div",{className:"zbwc-plans"},v&&(0,o.createElement)("div",{className:"zbwc-plans__card"},(0,o.createElement)("div",{className:"zbwc-plans__head"},(0,o.createElement)("h3",null,v.name),!E&&(0,o.createElement)("span",{className:"zbwc-plans__current"},(0,a.__)("Current plan","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("p",{className:"zbwc-plans__price"},(0,o.createElement)("strong",null,x(0,v.currency)),(0,o.createElement)("span",{className:"zbwc-muted"}," ",(0,a.__)("forever","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("ul",{className:"zbwc-plans__list"},(v.features||[]).map(e=>(0,o.createElement)("li",{key:e},(0,o.createElement)("span",{className:"dashicons dashicons-yes","aria-hidden":"true"}),e)),!E&&N.map(e=>(0,o.createElement)("li",{key:e,className:"is-no"},(0,o.createElement)("span",{className:"dashicons dashicons-no-alt","aria-hidden":"true"}),e))),v.description&&(0,o.createElement)("p",{className:"zbwc-plans__note"},v.description)),f.filter(e=>!e.isFree).map(e=>{return(0,o.createElement)("div",{key:e.slug,className:"zbwc-plans__card is-featured"},(0,o.createElement)("span",{className:"zbwc-plans__ribbon"},(0,a.__)("MOST POPULAR","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-plans__head"},(0,o.createElement)("h3",null,e.name),E&&u.plan===e.slug&&(0,o.createElement)("span",{className:"zbwc-plans__current"},(0,a.__)("Current plan","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("p",{className:"zbwc-plans__price"},(0,o.createElement)("strong",null,x(e.priceCents,e.currency)),(0,o.createElement)("span",{className:"zbwc-muted"}," / ",e.interval)),(0,o.createElement)("ul",{className:"zbwc-plans__list"},(e.features||[]).map(e=>(0,o.createElement)("li",{key:e},(0,o.createElement)("span",{className:"dashicons dashicons-yes","aria-hidden":"true"}),e))),(0,o.createElement)(s.Button,{variant:E&&u.plan===e.slug?"secondary":"primary",className:"zbwc-plans__cta",disabled:c||E&&u.plan===e.slug,isBusy:c,onClick:()=>E?S():(async e=>{const o=await C(()=>y("/plan/checkout",{plan:e}));o&&o.checkoutUrl&&(window.location.href=o.checkoutUrl)})(e.slug)},(t=e,E&&u.plan===t.slug?(0,a.__)("Current plan","erp7-order-sync-for-zoho-books"):E?(0,a.__)("Switch in billing portal","erp7-order-sync-for-zoho-books"):(0,a.sprintf)((0,a.__)("Upgrade to %s","erp7-order-sync-for-zoho-books"),t.name)
    4139/* translators: %s: plan name. */)),(0,o.createElement)("p",{className:"zbwc-plans__trust"},(0,o.createElement)("span",{className:"dashicons dashicons-lock","aria-hidden":"true"}),(0,a.__)("Secure checkout by Stripe","erp7-order-sync-for-zoho-books")));var t}))),_&&(0,o.createElement)(w,{title:(0,a.sprintf)(/* translators: %s: month and year, e.g. August 2026. */ /* translators: %s: month and year, e.g. August 2026. */
    42 (0,a.__)("Usage — %s","erp7-order-sync-for-zoho-books"),h.period),description:(0,a.__)("Counts what first reached Zoho this month. Re-syncing something already sent is free, and the allowance resets on the 1st.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("table",{className:"widefat striped"},(0,o.createElement)("tbody",null,Object.entries(_).map(([e,t])=>(0,o.createElement)("tr",{key:e},(0,o.createElement)("th",null,Je[e]||e),(0,o.createElement)("td",null,(0,a.sprintf)(/* translators: 1: used, 2: allowed. */ /* translators: 1: used, 2: allowed. */
     40(0,a.__)("Usage — %s","erp7-order-sync-for-zoho-books"),h.period),description:(0,a.__)("Counts what first reached Zoho this month. Re-syncing something already sent is free, and the allowance resets on the 1st.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("table",{className:"widefat striped"},(0,o.createElement)("tbody",null,Object.entries(_).map(([e,t])=>(0,o.createElement)("tr",{key:e},(0,o.createElement)("th",null,Ve[e]||e),(0,o.createElement)("td",null,(0,a.sprintf)(/* translators: 1: used, 2: allowed. */ /* translators: 1: used, 2: allowed. */
    4341(0,a.__)("%1$d of %2$d","erp7-order-sync-for-zoho-books"),t.used,t.limit)),(0,o.createElement)("td",{style:{width:"9rem"}},t.exhausted?(0,o.createElement)(B,{status:"error"},(0,a.__)("Limit reached","erp7-order-sync-for-zoho-books")):(0,o.createElement)(B,{status:"ok"},(0,a.sprintf)(/* translators: %d: remaining this month. */ /* translators: %d: remaining this month. */
    44 (0,a.__)("%d left","erp7-order-sync-for-zoho-books"),t.remaining)))))))))}const eo={customers:{feature:"customers",title:(0,a.__)("Customers","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Two-way contact sync between WooCommerce and Zoho Books.","erp7-order-sync-for-zoho-books"),bullets:[(0,a.__)("Push customer profile and address changes to Zoho","erp7-order-sync-for-zoho-books"),(0,a.__)("Pull Zoho contacts into WooCommerce on a schedule","erp7-order-sync-for-zoho-books"),(0,a.__)("Create and conflict policies for both directions","erp7-order-sync-for-zoho-books")]}},oo=["orders","payments","customers","products"];function to(){const e=g(()=>b("/connection"),[]),[t,r]=k("dashboard"),[s,c]=(0,n.useState)(!!h.onboardingCompleted);if(e.loading&&!e.data)return(0,o.createElement)(i,null,(0,o.createElement)("div",{className:"zbwc-shell"},(0,o.createElement)(Z,{label:(0,a.__)("Loading the integration…","erp7-order-sync-for-zoho-books")})));const l=e.data||{connected:!1};if(!s)return(0,o.createElement)(i,null,(0,o.createElement)("div",{className:"zbwc-shell zbwc-shell--onboarding"},(0,o.createElement)(Ge,{connection:l,reloadConnection:e.reload,onFinish:e=>{c(!0),r(e||"dashboard")}})));const d={dashboard:(0,o.createElement)(ne,{navigate:r}),orders:(0,o.createElement)(pe,null),payments:(0,o.createElement)(pe,{openTab:"payments"}),customers:((e,t)=>{const r=eo.customers;return!r||U(r.feature)?t:(0,o.createElement)(Y,{title:r.title,description:r.description,bullets:r.bullets})})(0,(0,o.createElement)(fe,null)),products:(0,o.createElement)(ge,{connection:l,reloadConnection:e.reload}),logs:(0,o.createElement)(Ze,null)};P().forEach(({slug:t,component:r})=>{d[t]=(0,o.createElement)(r,{connection:l,reloadConnection:e.reload})}),d.connection=(0,o.createElement)(ue,{connection:l,reloadConnection:e.reload}),h.plan&&h.plan.enforced&&(d.plan=(0,o.createElement)(Xe,null));const m=d[t]?t:"dashboard",u=eo[m],_=F()&&oo.includes(m)&&(!u||U(u.feature));return(0,o.createElement)(i,null,(0,o.createElement)("div",{className:"zbwc-shell"},(0,o.createElement)(A,{route:m,navigate:r,connection:l}),(0,o.createElement)(J,{route:m,navigate:r}),(0,o.createElement)("div",{className:"zbwc-layout"+(_?" has-aside":"")},(0,o.createElement)("div",{className:"zbwc-content"},d[m]),_&&(0,o.createElement)(X,{navigate:r}))))}"undefined"!=typeof window&&(window.ZBWC=window.ZBWC||{},window.ZBWC.registerPage=function({slug:e,label:o,component:t,order:r=50}){if(!e||!t)return;const n=I.findIndex(o=>o.slug===e),a={slug:e,label:o||e,component:t,order:r};n>=0?I[n]=a:I.push(a)},window.ZBWC.ui=M,window.ZBWC.boot=h),r()(()=>{const e=document.getElementById("zbwc-app");e&&(0,n.createRoot)(e).render((0,o.createElement)(to,null))})})();
     42(0,a.__)("%d left","erp7-order-sync-for-zoho-books"),t.remaining)))))))))}const Xe={customers:{feature:"customers",title:(0,a.__)("Customers","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Two-way contact sync between WooCommerce and Zoho Books.","erp7-order-sync-for-zoho-books"),bullets:[(0,a.__)("Push customer profile and address changes to Zoho","erp7-order-sync-for-zoho-books"),(0,a.__)("Pull Zoho contacts into WooCommerce on a schedule","erp7-order-sync-for-zoho-books"),(0,a.__)("Create and conflict policies for both directions","erp7-order-sync-for-zoho-books")]}},eo=["orders","payments","customers","products"];function oo(){const e=g(()=>b("/connection"),[]),[t,r]=k("dashboard"),[s,c]=(0,n.useState)(!!h.onboardingCompleted);if(e.loading&&!e.data)return(0,o.createElement)(i,null,(0,o.createElement)("div",{className:"zbwc-shell"},(0,o.createElement)(Z,{label:(0,a.__)("Loading the integration…","erp7-order-sync-for-zoho-books")})));const l=e.data||{connected:!1};if(!s)return(0,o.createElement)(i,null,(0,o.createElement)("div",{className:"zbwc-shell zbwc-shell--onboarding"},(0,o.createElement)(qe,{connection:l,reloadConnection:e.reload,onFinish:e=>{c(!0),r(e||"dashboard")}})));const d={dashboard:(0,o.createElement)(ne,{navigate:r}),orders:(0,o.createElement)(pe,null),payments:(0,o.createElement)(pe,{openTab:"payments"}),customers:((e,t)=>{const r=Xe.customers;return!r||U(r.feature)?t:(0,o.createElement)(Y,{title:r.title,description:r.description,bullets:r.bullets})})(0,(0,o.createElement)(fe,null)),products:(0,o.createElement)(ge,{connection:l,reloadConnection:e.reload}),logs:(0,o.createElement)(Ze,null)};P().forEach(({slug:t,component:r})=>{d[t]=(0,o.createElement)(r,{connection:l,reloadConnection:e.reload})}),d.connection=(0,o.createElement)(ue,{connection:l,reloadConnection:e.reload}),h.plan&&h.plan.enforced&&(d.plan=(0,o.createElement)(Qe,null));const m=d[t]?t:"dashboard",u=Xe[m],_=H()&&eo.includes(m)&&(!u||U(u.feature));return(0,o.createElement)(i,null,(0,o.createElement)("div",{className:"zbwc-shell"},(0,o.createElement)(A,{route:m,navigate:r,connection:l}),(0,o.createElement)(J,{route:m,navigate:r}),(0,o.createElement)("div",{className:"zbwc-layout"+(_?" has-aside":"")},(0,o.createElement)("div",{className:"zbwc-content"},d[m]),_&&(0,o.createElement)(X,{navigate:r}))))}"undefined"!=typeof window&&(window.ZBWC=window.ZBWC||{},window.ZBWC.registerPage=function({slug:e,label:o,component:t,order:r=50}){if(!e||!t)return;const n=I.findIndex(o=>o.slug===e),a={slug:e,label:o||e,component:t,order:r};n>=0?I[n]=a:I.push(a)},window.ZBWC.ui=M,window.ZBWC.boot=h),r()(()=>{const e=document.getElementById("zbwc-app");e&&(0,n.createRoot)(e).render((0,o.createElement)(oo,null))})})();
  • erp7-order-sync-for-zoho-books/tags/1.0.4/erp7-order-sync-for-zoho-books.php

    r3733769 r3733904  
    33 * Plugin Name:       Zoho Books Integration For WooCommerce
    44 * Description:       Sync WooCommerce with Zoho Books: orders as sales orders or invoices, payments, refunds, cancellations, fulfilment, customers, products and inventory. Includes an onboarding wizard, dashboard and sync log.
    5  * Version:           1.0.3
     5 * Version:           1.0.4
    66 * Author:            Manish
    77 * Author URI:        https://profiles.wordpress.org/smgom/
    … …  
    2828 * Constants
    2929 * ---------------------------------------------------------------------- */
    30 define( 'ZBWC_VERSION', '1.0.3' );
     30define( 'ZBWC_VERSION', '1.0.4' );
    3131define( 'ZBWC_FILE', __FILE__ );
    3232define( 'ZBWC_PATH', plugin_dir_path( __FILE__ ) );
  • erp7-order-sync-for-zoho-books/tags/1.0.4/includes/Rest/LogsController.php

    r3733769 r3733904  
    1212use ZBWC\Queue\DeadLetter;
    1313use ZBWC\Queue\Scheduler;
    14 use ZBWC\Subscription\State;
    1514use ZBWC\Support\Logger;
    16 use ZBWC\Support\LogShare;
    1715use ZBWC\Support\Progress;
    18 use ZBWC\Support\Settings;
    1916
    2017/**
    … …  
    2724                $this->route( '/logs', 'DELETE', array( $this, 'clear_logs' ) );
    2825                $this->route( '/logs/activity', 'GET', array( $this, 'activity' ) );
    29                 $this->route( '/logs/share', 'GET', array( $this, 'share_status' ) );
    30                 $this->route( '/logs/share', 'POST', array( $this, 'share_choose' ) );
    3126                $this->route( '/logs/failed', 'GET', array( $this, 'list_failed' ) );
    3227                $this->route( '/logs/failed/(?P<id>\d+)/retry', 'POST', array( $this, 'retry_failed' ) );
    … …  
    7772        }
    7873
    79         /**
    80          * Whether this store's log goes to ERP7 support, and how the last batch went.
    81          *
    82          * @return \WP_REST_Response
    83          */
    84         public function share_status() {
    85                 $state = LogShare::state();
    86                 return $this->ok(
    87                         array(
    88                                 'enabled' => LogShare::enabled(),
    89                                 'chosen'  => '' !== (string) Settings::get( 'shareSyncLog', '' ),
    90                                 'linked'  => State::connected(),
    91                                 'sentAt'  => (int) $state['sentAt'],
    92                                 'error'   => (string) $state['error'],
    93                                 'retryAt' => (int) $state['retryAt'],
    94                         )
    95                 );
    96         }
    97 
    98         /**
    99          * Switch sharing on or off.
    100          *
    101          * @param \WP_REST_Request $req Request with `enabled`.
    102          * @return \WP_REST_Response
    103          */
    104         public function share_choose( $req ) {
    105                 LogShare::choose( (bool) $req->get_param( 'enabled' ) );
    106                 ( new Scheduler( $this->plugin ) )->sync_recurring();
    107                 return $this->share_status();
    108         }
    109 
    11074        /** Truncate the log table. */
    11175        public function clear_logs() {
  • erp7-order-sync-for-zoho-books/tags/1.0.4/includes/Subscription/Client.php

    r3733769 r3733904  
    146146
    147147        /**
    148          * Send a batch of sync-log lines.
    149          *
    150          * Signed when the store is linked, so the lines are attributed to it
    151          * beyond doubt; a store that never linked sends to the public route.
    152          *
    153          * @param array      $body  install_id, site_url, entries and the rest.
    154          * @param array|null $creds Tenant credentials, or null when not linked.
    155          * @return array{ok:bool,data:array,message:string}
    156          */
    157         public function send_logs( array $body, $creds = null ) {
    158                 if ( $creds ) {
    159                         return $this->request( 'POST', '/logs', $body, $creds );
    160                 }
    161                 return $this->request( 'POST', '/public/logs', $body, null, true );
     148         * Send a batch of sync-log lines, signed so they are attributed to this
     149         * store beyond doubt.
     150         *
     151         * @param array $body  install_id, site_url, entries and the rest.
     152         * @param array $creds Tenant credentials.
     153         * @return array{ok:bool,data:array,message:string}
     154         */
     155        public function send_logs( array $body, array $creds ) {
     156                return $this->request( 'POST', '/logs', $body, $creds );
    162157        }
    163158
  • erp7-order-sync-for-zoho-books/tags/1.0.4/includes/Support/LogShare.php

    r3733769 r3733904  
    1616/**
    1717 * Sends new log lines every few minutes, with customer email addresses and
    18  * phone numbers taken out first — signed when the store is linked to an
    19  * account, plain otherwise.
    20  *
    21  * Linked stores share unless the merchant switches it off; stores that never
    22  * linked share only once the merchant switches it on.
     18 * phone numbers taken out first, signed with the store's account link. Only
     19 * stores linked to an ERP7 account share.
    2320 */
    2421class LogShare {
    … …  
    4946
    5047        /**
    51          * Is the log being shared?
     48         * Is the log being shared? Always, for a store linked to an ERP7 account —
     49         * linking says so — and never for one that is not.
    5250         *
    5351         * @return bool
    5452         */
    5553        public static function enabled() {
    56                 $choice = (string) Settings::get( 'shareSyncLog', '' );
    57                 if ( 'on' === $choice ) {
    58                         return true;
    59                 }
    60                 if ( 'off' === $choice ) {
    61                         return false;
    62                 }
    6354                return State::connected();
    64         }
    65 
    66         /**
    67          * Turn sharing on or off by the merchant's choice.
    68          *
    69          * Switching it on starts from the last day rather than from wherever the
    70          * cursor stopped, which could be weeks of history nobody asked to send.
    71          *
    72          * @param bool $on New state.
    73          * @return void
    74          */
    75         public static function choose( $on ) {
    76                 $was = self::enabled();
    77                 Settings::set( 'shareSyncLog', $on ? 'on' : 'off' );
    78                 if ( $on && ! $was ) {
    79                         $state            = self::state();
    80                         $state['cursor']  = null;
    81                         $state['error']   = '';
    82                         $state['retryAt'] = 0;
    83                         self::save( $state );
    84                 }
    8555        }
    8656
    … …  
    134104                $state['cursor'] = max( (int) $state['cursor'], $floor );
    135105
    136                 $creds = State::connected() ? State::credentials() : null;
     106                $creds = State::credentials();
    137107                for ( $i = 0; $i < self::MAX_BATCHES; $i++ ) {
    138108                        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, PluginCheck.Security.DirectDB.UnescapedDBParameter
  • erp7-order-sync-for-zoho-books/tags/1.0.4/includes/Support/Settings.php

    r3733769 r3733904  
    156156                        /* -------- Maintenance -------- */
    157157                        'dailyReconEnabled'       => false,
    158                         // Send the sync log to ERP7 support: 'on' | 'off' | '' (not chosen:
    159                         // on for a store linked to an account, off otherwise). See LogShare.
    160                         'shareSyncLog'            => '',
    161158                );
    162159
    … …  
    268265                        return in_array( $value, array( 'email', 'name', 'email_then_name' ), true ) ? $value : 'email';
    269266                }
    270                 if ( 'shareSyncLog' === $key ) {
    271                         return in_array( $value, array( 'on', 'off' ), true ) ? $value : '';
    272                 }
    273267                return $value;
    274268        }
  • erp7-order-sync-for-zoho-books/tags/1.0.4/readme.txt

    r3733793 r3733904  
    77WC requires at least: 8.0
    88WC tested up to: 10.8
    9 Stable tag: 1.0.3
     9Stable tag: 1.0.4
    1010License: GPLv2 or later
    1111License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    6262* 🆕 If your Zoho Books trial or subscription ends, the plugin tells you once and keeps the work ready to re-run
    6363* 🆕 Works on a phone
    64 * 🆕 Optional: send your sync log to ERP7 support, so problems are spotted sooner
     64* 🆕 Stores linked to an ERP7 account share their sync log with support, so problems are spotted sooner
    6565* A setup wizard that resumes exactly where you left off — even across the OAuth redirect
    6666* Change organization safely: the plugin warns you, explains what happens to existing links, and cleans up on your say-so
    … …  
    105105
    106106* Plans: a store linked to an ERP7 account checks its plan here, sending its site address with each signed request.
    107 * Sync log: every 5 minutes the store sends the new lines of its sync log — time, level, type, the message, the order or product it is about, how long it took and the technical detail recorded with it (such as the job, the attempt and Zoho's reply) — with customer email addresses and phone numbers removed first, together with the site address, site name, plugin version and a random id for this installation. Support uses it to spot failures and help sooner, and it is kept for 30 days. It is on for stores linked to an ERP7 account and off for others until switched on; either way, switch it under Zoho Sync → Logs → "Send this log to ERP7 support".
     107* Sync log: every 5 minutes the store sends the new lines of its sync log — time, level, type, the message, the order or product it is about, how long it took and the technical detail recorded with it (such as the job, the attempt and Zoho's reply) — with customer email addresses and phone numbers removed first, together with the site address, site name, plugin version and a random id for this installation. Support uses it to spot failures and help sooner, and it is kept for 30 days. Only stores linked to an ERP7 account send it; linking an account turns it on. A store that is not linked sends nothing.
    108108
    109109== Frequently Asked Questions ==
    … …  
    137137
    138138== Changelog ==
     139
     140= 1.0.4 =
     141* Every store linked to an ERP7 account now shares its sync log with ERP7 support, so failures are spotted and fixed sooner. The switch under Zoho Sync → Logs is gone. Customer email addresses and phone numbers are still removed first, and a store that is not linked sends nothing.
    139142
    140143= 1.0.3 =
  • erp7-order-sync-for-zoho-books/tags/1.0.4/src/pages/Logs.jsx

    r3733769 r3733904  
    44 */
    55import { useState } from '@wordpress/element';
    6 import { SelectControl, TextControl, Button, ToggleControl } from '@wordpress/components';
     6import { SelectControl, TextControl, Button } from '@wordpress/components';
    77import { __, sprintf } from '@wordpress/i18n';
    88import Section from '../components/Section';
    … …  
    6767}
    6868
    69 /**
    70  * The switch for sending this log to ERP7 support, with how it is going.
    71  *
    72  * @return {Element|null} Toggle row, or nothing until the state has loaded.
    73  */
    74 function ShareLog() {
    75         const addToast = useToast();
    76         const { data, reload } = useAsync( () => apiGet( '/logs/share' ), [] );
    77         const [ saving, setSaving ] = useState( false );
    78 
    79         if ( ! data ) {
    80                 return null;
    81         }
    82 
    83         const choose = async ( enabled ) => {
    84                 setSaving( true );
    85                 try {
    86                         await apiPost( '/logs/share', { enabled } );
    87                         reload();
    88                 } catch ( e ) {
    89                         addToast( errorMessage( e ), 'error' );
    90                 }
    91                 setSaving( false );
    92         };
    93 
    94         const privacy = __( 'Customer email addresses and phone numbers are removed before anything is sent.', 'erp7-order-sync-for-zoho-books' );
    95         let help;
    96         if ( ! data.enabled ) {
    97                 help = __( 'Off. Switch it on so ERP7 support can see this store’s failures and help sooner.', 'erp7-order-sync-for-zoho-books' ) + ' ' + privacy;
    98         } else if ( data.error ) {
    99                 help = sprintf(
    100                         /* translators: %s: why the last attempt failed. */
    101                         __( 'The last attempt did not go through (%s). It tries again by itself.', 'erp7-order-sync-for-zoho-books' ),
    102                         data.error
    103                 );
    104         } else if ( data.sentAt ) {
    105                 help = sprintf(
    106                         /* translators: %s: date and time of the last batch. */
    107                         __( 'Sent every 5 minutes; last sent %s.', 'erp7-order-sync-for-zoho-books' ),
    108                         localTime( data.sentAt * 1000, { dateStyle: 'medium', timeStyle: 'short' } )
    109                 ) + ' ' + privacy;
    110         } else {
    111                 help = __( 'Sent every 5 minutes.', 'erp7-order-sync-for-zoho-books' ) + ' ' + privacy;
    112         }
    113 
    114         return (
    115                 <div className="zbwc-share-log">
    116                         <ToggleControl
    117                                 __nextHasNoMarginBottom
    118                                 label={ __( 'Send this log to ERP7 support', 'erp7-order-sync-for-zoho-books' ) }
    119                                 help={ help }
    120                                 checked={ !! data.enabled }
    121                                 disabled={ saving }
    122                                 onChange={ choose }
    123                         />
    124                 </div>
    125         );
    126 }
    127 
    12869function SyncLog() {
    12970        const addToast = useToast();
    … …  
    15091                        actions={ <Button variant="tertiary" isDestructive onClick={ clearLogs }>{ __( 'Clear log', 'erp7-order-sync-for-zoho-books' ) }</Button> }
    15192                >
    152                         <ShareLog />
    153 
    15493                        <ActivityBar onNewEntries={ () => filters.page === 1 && reload() } />
    15594
  • erp7-order-sync-for-zoho-books/tags/1.0.4/src/styles.scss

    r3733769 r3733904  
    168168        .zbwc-nowrap { white-space: nowrap; }
    169169        .zbwc-errcell { color: var(--zbwc-error); font-size: 12px; max-width: 420px; }
    170 
    171         .zbwc-share-log { padding: 0 0 14px; margin-bottom: 14px; border-bottom: 1px solid #f0f0f1; }
    172         .zbwc-share-log .components-toggle-control__help { max-width: 640px; }
    173170
    174171        .zbwc-filters { display: flex; gap: 16px; align-items: flex-end; margin-bottom: 12px; flex-wrap: wrap; }
  • erp7-order-sync-for-zoho-books/trunk/build/index-rtl.css

    r3733769 r3733904  
    1 #zbwc-app{--zbwc-accent:#2271b1;--zbwc-border:#dcdcde;--zbwc-bg:#f6f7f7;--zbwc-ok:#00a32a;--zbwc-warn:#dba617;--zbwc-error:#d63638;--zbwc-plan-soft:#f0f6fc;--zbwc-plan-line:#c5d9ed;--zbwc-plan-tint:#dfebf7;--zbwc-bar-soft:#fdf8e3;--zbwc-bar-line:#e6d18d;--zbwc-bar-tint:#f7e8b4;--zbwc-bar-ink:#7a5d0a;color:#1e1e1e;margin:20px 0 0 20px}#zbwc-app .zbwc-boot{color:#757575;padding:40px}#zbwc-app .zbwc-nav{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:20px;padding:10px 16px}#zbwc-app .zbwc-nav__brand{align-items:center;display:flex;font-size:15px;font-weight:600;gap:8px}#zbwc-app .zbwc-nav__logo{color:var(--zbwc-accent)}#zbwc-app .zbwc-nav__sub{color:#757575;font-weight:400}#zbwc-app .zbwc-nav__tabs{display:flex;flex:1;flex-wrap:wrap;gap:4px}#zbwc-app .zbwc-nav__tab{background:transparent;border:none;border-radius:6px;color:#50575e;cursor:pointer;font-size:13px;padding:8px 14px}#zbwc-app .zbwc-nav__tab:hover{background:var(--zbwc-bg)}#zbwc-app .zbwc-nav__tab.is-active{background:var(--zbwc-accent);color:#fff}#zbwc-app .zbwc-layout.has-aside{align-items:start;display:grid;gap:24px;grid-template-columns:minmax(0,1fr) 300px}#zbwc-app .zbwc-aside{position:sticky;top:42px}#zbwc-app .zbwc-aside .zbwc-plancard{max-width:none}@media(max-width:1200px){#zbwc-app .zbwc-layout.has-aside{display:block}#zbwc-app .zbwc-aside{display:none}}#zbwc-app .zbwc-page{display:flex;flex-direction:column;gap:20px;padding-bottom:80px}#zbwc-app .zbwc-grid{display:grid;gap:16px}#zbwc-app .zbwc-grid--2{grid-template-columns:1fr 1fr}#zbwc-app .zbwc-grid--stats{grid-template-columns:repeat(4,1fr)}@media(max-width:960px){#zbwc-app .zbwc-grid--2,#zbwc-app .zbwc-grid--stats{grid-template-columns:1fr 1fr}}@media(max-width:782px){#zbwc-app .zbwc-grid--2{grid-template-columns:minmax(0,1fr)}}#zbwc-app .zbwc-section{border-radius:8px}#zbwc-app .zbwc-section__header{align-items:flex-start}#zbwc-app .zbwc-section__title{font-size:14px;margin:0}#zbwc-app .zbwc-section__desc{color:#757575;font-size:12px;margin:2px 0 0}@media(max-width:782px){#zbwc-app .zbwc-section__header{flex-wrap:wrap;row-gap:8px}#zbwc-app .zbwc-section__heading{flex:1 1 200px;min-width:0}}#zbwc-app .zbwc-section .components-base-control{margin-bottom:16px}#zbwc-app .zbwc-stat{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;padding:16px;text-align:center}#zbwc-app .zbwc-stat__value{color:var(--zbwc-accent);font-size:28px;font-weight:700}#zbwc-app .zbwc-stat__label{color:#757575;font-size:12px;margin-top:4px}#zbwc-app .zbwc-stat__hint{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-kv{border-collapse:collapse;width:100%}#zbwc-app .zbwc-kv th{color:#50575e;font-weight:500;padding:6px 0;text-align:right;width:45%}#zbwc-app .zbwc-kv td{padding:6px 0}#zbwc-app .zbwc-pill{border-radius:999px;display:inline-block;font-size:11px;font-weight:600;line-height:1.8;padding:2px 10px}#zbwc-app .zbwc-pill.is-ok{background:#edfaef;color:var(--zbwc-ok)}#zbwc-app .zbwc-pill.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-pill.is-error{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-pill.is-info{background:#f0f6fc;color:var(--zbwc-accent)}#zbwc-app .zbwc-activity{margin:0}#zbwc-app .zbwc-activity__item{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;font-size:13px;gap:10px;padding:8px 0}#zbwc-app .zbwc-activity__cat{color:#757575;font-size:10px;min-width:70px;text-transform:uppercase}#zbwc-app .zbwc-activity__msg{flex:1}#zbwc-app .zbwc-activity__time{color:#a7aaad;font-size:11px}#zbwc-app .zbwc-dot{background:var(--zbwc-accent);border-radius:50%;height:8px;width:8px}#zbwc-app .zbwc-dot.is-error{background:var(--zbwc-error)}#zbwc-app .zbwc-dot.is-warn{background:var(--zbwc-warn)}#zbwc-app .zbwc-maptable{margin-top:8px}#zbwc-app .zbwc-maptable__toolbar{margin-bottom:10px}#zbwc-app .zbwc-maptable__actions{display:flex;gap:6px}#zbwc-app .zbwc-maptable__scope{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-maptable__add{margin-top:12px;max-width:360px}@media(max-width:782px){#zbwc-app .zbwc-maptable{overflow-x:auto}#zbwc-app table.zbwc-maptable{display:block}#zbwc-app .zbwc-maptable__toolbar .components-button{height:auto;min-height:36px;text-align:right;white-space:normal}}#zbwc-app .zbwc-logtable td{font-size:12px;vertical-align:top}#zbwc-app .zbwc-nowrap{white-space:nowrap}#zbwc-app .zbwc-errcell{color:var(--zbwc-error);font-size:12px;max-width:420px}#zbwc-app .zbwc-share-log{border-bottom:1px solid #f0f0f1;margin-bottom:14px;padding:0 0 14px}#zbwc-app .zbwc-share-log .components-toggle-control__help{max-width:640px}#zbwc-app .zbwc-filters{align-items:flex-end;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:12px}#zbwc-app .zbwc-filters .components-base-control{margin-bottom:0;min-width:160px}#zbwc-app .zbwc-pager{align-items:center;color:#50575e;display:flex;font-size:12px;gap:12px;justify-content:flex-end;margin-top:12px}#zbwc-app .zbwc-muted{color:#646970;font-size:13px}#zbwc-app .zbwc-actions{margin-top:12px}#zbwc-app .zbwc-upgrade-banner{border-radius:8px;margin:0 0 20px}#zbwc-app .zbwc-upgrade-banner .components-notice__content{margin:0;width:100%}#zbwc-app .zbwc-plans{align-items:start;display:grid;gap:24px;grid-template-columns:1fr 1fr;margin-top:8px}@media(max-width:900px){#zbwc-app .zbwc-plans{grid-template-columns:1fr}}#zbwc-app .zbwc-plans__card{background:#fff;border:1px solid var(--zbwc-border);border-radius:12px;padding:24px;position:relative}#zbwc-app .zbwc-plans__card.is-featured{border:2px solid var(--zbwc-accent);padding-top:30px}#zbwc-app .zbwc-plans__ribbon{background:var(--zbwc-accent);border-radius:999px;color:#fff;font-size:11px;font-weight:700;right:50%;letter-spacing:.5px;padding:4px 16px;position:absolute;top:0;transform:translate(50%,-50%);white-space:nowrap}#zbwc-app .zbwc-plans__head{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-plans__head h3{font-size:20px;margin:0}#zbwc-app .zbwc-plans__current{background:#edfaef;border-radius:999px;color:#00611c;font-size:12px;font-weight:600;padding:4px 14px}#zbwc-app .zbwc-plans__price{margin:14px 0 18px}#zbwc-app .zbwc-plans__price strong{font-size:34px;font-weight:700;line-height:1}#zbwc-app .zbwc-plans__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plans__list li{align-items:flex-start;color:#1e1e1e;display:flex;font-size:14px;gap:10px;margin-bottom:10px}#zbwc-app .zbwc-plans__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plans__list li.is-no{color:#646970}#zbwc-app .zbwc-plans__list li.is-no .dashicons{color:#a7aaad}#zbwc-app .zbwc-plans__note{background:var(--zbwc-bg);border-radius:8px;color:#50575e;font-size:13px;margin:0;padding:14px 16px}#zbwc-app .zbwc-plans__cta.components-button.is-primary,#zbwc-app .zbwc-plans__cta.components-button.is-secondary{font-size:14px;font-weight:600;height:44px;justify-content:center;width:100%}#zbwc-app .zbwc-plans__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plans__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-planbar{align-items:center;background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-right:4px solid var(--zbwc-warn);border-radius:10px;display:flex;flex-wrap:wrap;gap:14px;margin:0 0 20px;padding:12px 16px}#zbwc-app .zbwc-planbar.is-urgent{border-color:var(--zbwc-warn);border-right-width:4px}#zbwc-app .zbwc-planbar__icon{align-items:center;background:var(--zbwc-bar-tint);border-radius:50%;color:var(--zbwc-bar-ink);display:flex;flex:none;height:32px;justify-content:center;width:32px}#zbwc-app .zbwc-planbar__text{align-items:baseline;display:flex;flex:1;flex-wrap:wrap;gap:10px;min-width:240px}#zbwc-app .zbwc-planbar__text strong{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-planbar__text span{color:#50575e;font-size:13px}#zbwc-app .zbwc-planbar__actions{align-items:center;display:flex;gap:8px;margin-right:auto}#zbwc-app .zbwc-plancard{background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-radius:10px;border-top:3px solid var(--zbwc-warn);max-width:420px;padding:20px 22px 18px}#zbwc-app .zbwc-plancard__chip{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);display:inline-block;font-size:11px;font-weight:700;letter-spacing:.4px;padding:3px 12px}#zbwc-app .zbwc-plancard__title{font-size:17px;margin:12px 0 6px}#zbwc-app .zbwc-plancard__desc{color:#50575e;font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-plancard__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plancard__list li{align-items:flex-start;color:#3c434a;display:flex;font-size:13px;gap:8px;margin-bottom:7px}#zbwc-app .zbwc-plancard__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plancard__cta.components-button.is-primary{font-weight:600;height:40px;justify-content:center;width:100%}#zbwc-app .zbwc-plancard__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plancard__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-quotachip{background:#edfaef;border-radius:999px;color:#0a6b22;display:inline-block;font-size:12px;font-weight:600;padding:3px 12px;white-space:nowrap}#zbwc-app .zbwc-quotachip.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-quotachip.is-full{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-quotanote{margin:0 0 16px}#zbwc-app .zbwc-pagehead{align-items:center;display:flex;gap:16px;justify-content:space-between}#zbwc-app .zbwc-pagehead__title{font-size:20px;font-weight:700;letter-spacing:-.01em;margin:0}#zbwc-app .zbwc-statbar{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:grid;grid-template-columns:repeat(5,1fr);overflow:hidden}#zbwc-app .zbwc-statbar__cell{align-items:flex-start;border-left:1px solid var(--zbwc-border);display:flex;flex-direction:column;gap:6px;padding:16px 18px}#zbwc-app .zbwc-statbar__cell:last-child{border-left:none}#zbwc-app .zbwc-statbar__label{color:#757575;font-size:11px;letter-spacing:.06em;text-transform:uppercase}#zbwc-app .zbwc-statbar__value{font-size:26px;font-variant-numeric:tabular-nums;font-weight:700;line-height:1}#zbwc-app .zbwc-statbar__value--sm{font-size:17px}#zbwc-app .zbwc-statbar__value.is-bad{color:var(--zbwc-error)}#zbwc-app .zbwc-statbar__sub{color:#757575;font-size:12px}@media(max-width:1100px){#zbwc-app .zbwc-statbar{grid-template-columns:repeat(3,1fr)}#zbwc-app .zbwc-statbar__cell:nth-child(3){border-left:none}}@media(max-width:600px){#zbwc-app .zbwc-statbar{grid-template-columns:1fr 1fr}}#zbwc-app .zbwc-masterbar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-right:4px solid var(--zbwc-ok);border-radius:8px;display:flex;gap:20px;padding:16px 18px}#zbwc-app .zbwc-masterbar.is-off{background:var(--zbwc-bg);border-right-color:var(--zbwc-warn)}#zbwc-app .zbwc-masterbar__text{display:flex;flex:1;flex-direction:column;gap:4px}#zbwc-app .zbwc-masterbar__title{align-items:center;display:flex;font-size:15px;font-weight:600;gap:10px}#zbwc-app .zbwc-masterbar__desc{color:#646970;font-size:13px}#zbwc-app .zbwc-flow{display:flex;flex-direction:column}#zbwc-app .zbwc-flow__row{border-bottom:1px solid #f0f0f1;padding:14px 0}#zbwc-app .zbwc-flow__row:last-child{border-bottom:none}#zbwc-app .zbwc-flow__row:first-child{padding-top:4px}#zbwc-app .zbwc-flow__row.is-disabled{opacity:.65}#zbwc-app .zbwc-flow__main{align-items:center;display:flex;gap:14px}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{align-items:center;display:flex;gap:10px;min-width:0}#zbwc-app .zbwc-flow__event{flex:0 0 46%}#zbwc-app .zbwc-flow__doc{flex:1}#zbwc-app .zbwc-flow__label{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-flow__arrow{color:#a7aaad;flex:none}#zbwc-app .zbwc-flow__badge{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);flex:none;font-size:11px;font-weight:700;letter-spacing:.4px;padding:2px 9px}#zbwc-app .zbwc-flow__switch{flex:none;margin-right:auto}#zbwc-app .zbwc-flow .components-base-control,#zbwc-app .zbwc-flow .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-flow__hint{color:#757575;font-size:12px;margin:6px 0 0;padding-right:2px}@media(max-width:782px){#zbwc-app .zbwc-flow__main{flex-wrap:wrap}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{flex:1 1 100%}#zbwc-app .zbwc-flow__arrow{display:none}}#zbwc-app .zbwc-note{align-items:flex-start;background:#fff;border:1px solid var(--zbwc-border);border-radius:10px;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-note p{color:#3c434a;font-size:14px;line-height:1.55;margin:0}#zbwc-app .zbwc-note .dashicons{align-items:center;border-radius:9px;display:flex;flex:none;font-size:19px;height:34px;justify-content:center;width:34px}#zbwc-app .zbwc-note.is-info .dashicons{background:var(--zbwc-plan-tint);color:var(--zbwc-accent)}#zbwc-app .zbwc-note.is-warn .dashicons{background:var(--zbwc-bar-tint);color:var(--zbwc-bar-ink)}#zbwc-app .zbwc-subnav{display:grid;gap:4px;grid-auto-columns:1fr;grid-auto-flow:column}#zbwc-app .zbwc-subnav__tab{background:transparent;border:none;border-radius:8px;color:#50575e;cursor:pointer;font-size:14px;font-weight:500;padding:10px 16px;text-align:center;transition:background-color .12s ease}#zbwc-app .zbwc-subnav__tab:hover{background:rgba(0,0,0,.03)}#zbwc-app .zbwc-subnav__tab.is-active{background:#e4e5e7;color:#1e1e1e;font-weight:600}#zbwc-app .zbwc-subnav__tab:focus-visible{outline:2px solid var(--zbwc-accent);outline-offset:2px}@media(max-width:782px){#zbwc-app .zbwc-subnav{grid-auto-columns:auto;grid-auto-flow:row}}#zbwc-app .zbwc-savebar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;bottom:0;box-shadow:0 -2px 10px rgba(0,0,0,.06);display:flex;justify-content:space-between;margin-top:8px;padding:12px 16px;position:sticky}#zbwc-app .zbwc-savebar__msg{font-weight:500}#zbwc-app .zbwc-savebar__actions{display:flex;gap:8px}#zbwc-app .zbwc-code{background:#1e1e1e;border-radius:6px;color:#7fd;display:block;font-size:12px;padding:10px 12px;word-break:break-all}#zbwc-app .zbwc-linkbtn,#zbwc-app .zbwc-loading{align-items:center;display:inline-flex;gap:8px}#zbwc-app .zbwc-linkbtn{background:none;border:none;color:var(--zbwc-accent);cursor:pointer}#zbwc-app .zbwc-loading{color:#757575;padding:30px}#zbwc-app .zbwc-orglist__row{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;justify-content:space-between;padding:8px 0}#zbwc-app .zbwc-subhead{border-bottom:1px solid #f0f0f1;color:#757575;font-size:11px;letter-spacing:.5px;margin:22px 0 10px;padding-bottom:5px}#zbwc-app .zbwc-onboarding{--ob-ink:#1a1a1a;--ob-muted:#656a70;--ob-line:#e3e5e7;--ob-soft:#f7f8f8;margin:0 auto;max-width:1120px;padding-bottom:60px}#zbwc-app .zbwc-onboarding__bar{align-items:center;display:flex;gap:10px;padding:4px 0 20px}#zbwc-app .zbwc-onboarding__logo.dashicons{color:var(--zbwc-accent);font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-onboarding__brand{font-size:16px;font-weight:700;letter-spacing:-.01em}#zbwc-app .zbwc-onboarding__titlerow{align-items:center;display:flex;gap:16px;justify-content:space-between;margin-bottom:16px}#zbwc-app .zbwc-onboarding__title{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0}#zbwc-app .zbwc-onboarding__chip{background:#e9eaeb;border-radius:999px;color:#50575e;font-size:12px;font-weight:500;padding:5px 14px}#zbwc-app .zbwc-onboarding__card{background:#fff;border:1px solid var(--ob-line);border-radius:16px;display:grid;grid-template-columns:minmax(0,1fr) 330px;overflow:hidden}#zbwc-app .zbwc-onboarding__panel{padding:34px 38px 38px}#zbwc-app .zbwc-onboarding__aside{background:var(--ob-soft);border-right:1px solid var(--ob-line);padding:32px 28px}@media(max-width:960px){#zbwc-app .zbwc-onboarding__card{grid-template-columns:1fr}#zbwc-app .zbwc-onboarding__panel{padding:26px 22px 30px}#zbwc-app .zbwc-onboarding__aside{border-right:none;border-top:1px solid var(--ob-line)}}#zbwc-app .zbwc-ob-eyebrow{color:var(--ob-muted);font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-ob-heading{color:var(--ob-ink);font-size:30px;font-weight:700;letter-spacing:-.02em;line-height:1.18;margin:0 0 12px}#zbwc-app .zbwc-ob-lead{color:#4a5056;font-size:14.5px;line-height:1.6;margin:0 0 26px;max-width:46em}#zbwc-app .zbwc-ob-footnote{color:var(--ob-muted);font-size:12.5px;line-height:1.6;margin:18px 0 0}#zbwc-app .zbwc-ob-quiet{margin-top:16px}#zbwc-app .zbwc-ob-icon{align-items:center;background:var(--ob-soft);border:1px solid var(--ob-line);border-radius:11px;color:var(--ob-ink);display:flex;flex:none;height:42px;justify-content:center;width:42px}#zbwc-app .zbwc-ob-icon .dashicons{font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-features{list-style:none;margin:0 0 30px;padding:0}#zbwc-app .zbwc-ob-feature{display:flex;gap:16px;margin-bottom:22px}#zbwc-app .zbwc-ob-feature h3{font-size:15px;font-weight:600;margin:0 0 4px}#zbwc-app .zbwc-ob-feature p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:0}#zbwc-app .zbwc-ob-aside__title{font-size:14px;font-weight:700;margin:0}#zbwc-app .zbwc-ob-progress{list-style:none;margin:18px 0 0;padding:0}#zbwc-app .zbwc-ob-progress__item{display:flex;gap:14px;padding-bottom:22px;position:relative}#zbwc-app .zbwc-ob-progress__item:last-child{padding-bottom:0}#zbwc-app .zbwc-ob-progress__item:before{background:#dcdee0;bottom:6px;content:"";right:15px;position:absolute;top:34px;width:1px}#zbwc-app .zbwc-ob-progress__item:last-child:before{display:none}#zbwc-app .zbwc-ob-progress__num{align-items:center;background:#fff;border:1px solid #d5d7d9;border-radius:50%;color:#8c8f94;display:flex;flex:none;font-size:12px;font-weight:600;height:31px;justify-content:center;position:relative;width:31px}#zbwc-app .zbwc-ob-progress__num .dashicons{font-size:18px;height:18px;width:18px}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__num,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__num{background:var(--ob-ink);border-color:var(--ob-ink);color:#fff}#zbwc-app .zbwc-ob-progress__text{display:flex;flex-direction:column;gap:3px;padding-top:4px}#zbwc-app .zbwc-ob-progress__text strong{color:#8c8f94;font-size:13.5px;font-weight:600}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__text strong,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__text strong{color:var(--ob-ink)}#zbwc-app .zbwc-ob-progress__text span{color:var(--ob-muted);font-size:12.5px;line-height:1.5}#zbwc-app .zbwc-ob-facts{border-top:1px solid var(--ob-line);list-style:none;margin:22px 0 0;padding:18px 0 0}#zbwc-app .zbwc-ob-facts li{color:var(--ob-muted);font-size:12.5px;line-height:1.55;margin:0 0 10px;padding-right:14px;position:relative}#zbwc-app .zbwc-ob-facts li:before{content:"·";right:4px;position:absolute}#zbwc-app .zbwc-ob-count{border-top:1px solid var(--ob-line);font-size:13px;font-weight:600;margin:22px 0 0;padding-top:18px}#zbwc-app .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin-top:14px;padding:14px 15px}#zbwc-app .zbwc-ob-note p{font-size:12.5px;line-height:1.55;margin:0}#zbwc-app .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-ob-note.is-warn{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-ob-note.is-plan{background:#edfaef;color:#0a6b22}#zbwc-app .zbwc-ob-badge{border-radius:999px;flex:none;font-size:12px;font-weight:600;padding:4px 12px;white-space:nowrap}#zbwc-app .zbwc-ob-badge.is-ok{background:#d8f5e3;color:#0a6b2f}#zbwc-app .zbwc-ob-badge.is-blue{background:#e4f0fb;color:#1c5a99}#zbwc-app .zbwc-ob-badge.is-muted{background:#eceded;color:#646970}#zbwc-app .zbwc-ob-option{border:1px solid var(--ob-line);border-radius:12px;padding:20px 22px}#zbwc-app .zbwc-ob-option.is-done{background:var(--ob-soft)}#zbwc-app .zbwc-ob-option__head{align-items:center;display:flex;gap:12px;justify-content:space-between}#zbwc-app .zbwc-ob-option__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-option__desc{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:8px 0 0}#zbwc-app .zbwc-ob-option .zbwc-kv{margin-top:10px}#zbwc-app .zbwc-ob-howto{color:#3c434a;font-size:13.5px;line-height:1.7;margin:18px 0 0;padding-right:18px}#zbwc-app .zbwc-ob-howto li{margin-bottom:10px}#zbwc-app .zbwc-ob-copyrow{align-items:center;display:flex;gap:8px;margin-top:8px}#zbwc-app .zbwc-ob-copyrow .zbwc-code{flex:1;margin:0}#zbwc-app .zbwc-ob-fields{border-top:1px solid var(--ob-line);display:grid;gap:18px;margin-top:20px;padding-top:20px}#zbwc-app .zbwc-ob-fields .components-base-control{margin-bottom:0}#zbwc-app .zbwc-ob-actions{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}#zbwc-app .zbwc-ob-actions .components-button .dashicons{font-size:17px;height:17px;margin-left:6px;width:17px}#zbwc-app .zbwc-ob-divider{background:var(--ob-line);height:1px;margin:26px 0 18px}#zbwc-app .zbwc-ob-disclosure{align-items:center;background:none;border:none;color:var(--zbwc-accent);cursor:pointer;display:inline-flex;font-size:13.5px;font-weight:500;gap:6px;padding:0}#zbwc-app .zbwc-ob-disclosure .dashicons{font-size:16px;height:16px;width:16px}#zbwc-app .zbwc-ob-advanced{background:var(--ob-soft);border-radius:12px;margin-top:16px;padding:18px 20px}#zbwc-app .zbwc-ob-advanced p{color:var(--ob-muted);font-size:13px;line-height:1.6;margin:0 0 14px}#zbwc-app .zbwc-ob-advanced .components-base-control{margin-bottom:14px}#zbwc-app .zbwc-ob-resource{border:1px solid var(--ob-line);border-radius:12px;margin-bottom:14px;transition:border-color .12s ease,box-shadow .12s ease}#zbwc-app .zbwc-ob-resource.is-on{border-color:#c4c7ca;box-shadow:0 1px 2px rgba(0,0,0,.04)}#zbwc-app .zbwc-ob-resource__main{align-items:flex-start;cursor:pointer;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-ob-resource__box{cursor:default;display:flex;padding-top:3px}#zbwc-app .zbwc-ob-resource .components-base-control,#zbwc-app .zbwc-ob-resource .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-ob-resource__body{flex:1}#zbwc-app .zbwc-ob-resource__head{align-items:center;display:flex;flex-wrap:wrap;gap:10px}#zbwc-app .zbwc-ob-resource__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-resource__body p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:5px 0 0}#zbwc-app .zbwc-ob-resource__prefs{cursor:default;display:grid;gap:18px;grid-template-columns:1fr 1fr;margin-top:16px}@media(max-width:782px){#zbwc-app .zbwc-ob-resource__prefs{grid-template-columns:1fr}}#zbwc-app .zbwc-ob-inline-notice.components-notice{border-radius:10px;margin:4px 0 0}#zbwc-app .zbwc-ob-done{background:#fff;border:1px solid var(--ob-line);border-radius:16px;margin:0 auto;max-width:620px;padding:44px 44px 36px;text-align:center}#zbwc-app .zbwc-ob-done__check{align-items:center;background:#e2f5e9;border-radius:50%;display:inline-flex;height:76px;justify-content:center;margin-bottom:20px;width:76px}#zbwc-app .zbwc-ob-done__check .dashicons{align-items:center;background:#2f7a48;border-radius:50%;color:#fff;display:flex;font-size:34px;height:54px;justify-content:center;width:54px}#zbwc-app .zbwc-ob-done h2{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0 0 10px}#zbwc-app .zbwc-ob-done .zbwc-ob-lead{margin:0 auto 26px;max-width:34em}#zbwc-app .zbwc-ob-done .zbwc-ob-note{text-align:right}#zbwc-app .zbwc-ob-summary{border:1px solid var(--ob-line);border-radius:12px;list-style:none;margin:0;overflow:hidden;padding:0;text-align:right}#zbwc-app .zbwc-ob-summary__row{align-items:center;border-bottom:1px solid var(--ob-line);display:flex;gap:12px;padding:15px 18px}#zbwc-app .zbwc-ob-summary__row:last-child{border-bottom:none}#zbwc-app .zbwc-ob-summary__icon{display:flex}#zbwc-app .zbwc-ob-summary__icon .dashicons{color:#2f7a48;font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-summary__icon.is-muted .dashicons{color:#a7aaad}#zbwc-app .zbwc-ob-summary__text{display:flex;flex:1;flex-direction:column;gap:2px}#zbwc-app .zbwc-ob-summary__text strong{font-size:14px}#zbwc-app .zbwc-ob-summary__text span{color:var(--ob-muted);font-size:12.5px}#zbwc-app .zbwc-ob-done__actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:24px}#zbwc-app .zbwc-ob-nav{align-items:center;display:flex;justify-content:space-between;margin-top:22px}#zbwc-app .zbwc-onboarding .components-button.is-primary{background:var(--ob-ink);border-color:var(--ob-ink);border-radius:8px;box-shadow:none;font-size:13.5px;font-weight:600;height:42px;padding:0 20px}#zbwc-app .zbwc-onboarding .components-button.is-primary:focus:not(:disabled),#zbwc-app .zbwc-onboarding .components-button.is-primary:hover:not(:disabled){background:#000;border-color:#000;color:#fff}#zbwc-app .zbwc-onboarding .components-button.is-primary:disabled,#zbwc-app .zbwc-onboarding .components-button.is-primary[aria-disabled=true]{background:#e6e7e8;border-color:#e6e7e8;color:#a7aaad}#zbwc-app .zbwc-onboarding .components-button.is-secondary{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #d5d7d9;color:var(--ob-ink);font-size:13.5px;font-weight:600;height:42px;padding:0 18px}#zbwc-app .zbwc-onboarding .components-button.is-secondary:hover:not(:disabled){background:var(--ob-soft);box-shadow:inset 0 0 0 1px #b9bcbf;color:var(--ob-ink)}#zbwc-app .zbwc-onboarding .components-button.is-tertiary{border-radius:8px;font-weight:600;height:42px;padding:0 14px}#zbwc-app .zbwc-toasts{bottom:20px;right:160px;position:fixed;z-index:100000}@media(max-width:782px){#zbwc-app .zbwc-toasts{right:16px;left:16px;width:auto}}.zbwc-upgrade-modal.components-modal__frame{border-radius:12px;max-width:32rem;position:relative;width:calc(100% - 32px)}.zbwc-upgrade-modal .components-modal__header{border-bottom:none;height:auto;justify-content:center;padding:28px 32px 0}.zbwc-upgrade-modal .components-modal__header-heading-container{justify-content:center}.zbwc-upgrade-modal .components-modal__header-heading{font-size:22px;font-weight:700;line-height:1.3;text-align:center}.zbwc-upgrade-modal .components-modal__header .components-button.has-icon{margin:0;position:absolute;left:12px;top:10px}.zbwc-upgrade-modal .components-modal__content{padding:0 32px 28px}.zbwc-upgrade-modal .components-modal__content:before{content:none}.zbwc-upgrade-modal__body{text-align:center}.zbwc-upgrade-modal__lead{color:#3c434a;font-size:14px;line-height:1.6;margin:12px auto 0;max-width:34rem}.zbwc-upgrade-modal__note{color:#646970;font-size:13px;line-height:1.6;margin:8px auto 0;max-width:34rem}.zbwc-upgrade-modal__offer{align-items:baseline;display:flex;gap:8px;justify-content:center;margin:20px 0 16px}.zbwc-upgrade-modal__plan{font-size:15px;font-weight:600}.zbwc-upgrade-modal__price{font-size:30px;font-weight:700;line-height:1}.zbwc-upgrade-modal__per{color:#646970;font-size:14px;font-weight:400}.zbwc-upgrade-modal__cta.components-button.is-primary{border-radius:8px;display:flex;font-size:15px;font-weight:600;height:48px;justify-content:center;width:100%}.zbwc-upgrade-modal__later.components-button{color:#50575e;display:block;margin:14px auto 0;text-decoration:underline}.zbwc-upgrade-modal__trust{align-items:center;border-top:1px solid #e0e0e0;color:#646970;display:flex;font-size:13px;gap:6px;justify-content:center;margin:22px 0 0;padding-top:18px}.zbwc-upgrade-modal__trust .dashicons{font-size:16px;height:16px;width:16px}.zbwc-org-modal.components-modal__frame{border-radius:14px;max-width:480px;width:calc(100% - 32px)}.zbwc-org-modal .components-modal__header-heading{font-size:17px;font-weight:600}.zbwc-org-modal .components-modal__content{padding:2px 28px 24px}.zbwc-org-modal__lead{color:#646970;font-size:13px;line-height:1.6;margin:0 0 16px}.zbwc-org-modal__loading{align-items:center;color:#646970;display:flex;gap:8px;padding:16px 0 8px}.zbwc-org-modal__loading .components-spinner{margin:0}.zbwc-org-modal__list{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow-y:auto}.zbwc-org-modal__row{align-items:center;background:#fff;border:1px solid #dcdcde;border-radius:10px;color:inherit;cursor:pointer;display:flex;font:inherit;gap:12px;padding:12px 14px;text-align:right;transition:border-color .12s ease,box-shadow .12s ease;width:100%}.zbwc-org-modal__row:hover{border-color:#8c8f94}.zbwc-org-modal__row:focus-visible{outline:2px solid var(--wp-admin-theme-color,#3858e9);outline-offset:1px}.zbwc-org-modal__row.is-selected{border-color:var(--wp-admin-theme-color,#3858e9);box-shadow:0 0 0 1px var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__icon{background:#f0f0f1;border-radius:9px;color:#50575e;display:grid;flex:none;height:36px;place-items:center;width:36px}.zbwc-org-modal__icon .dashicons{font-size:18px;height:18px;width:18px}.zbwc-org-modal__name{display:flex;flex:1;flex-direction:column;gap:1px;min-width:0}.zbwc-org-modal__name strong{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zbwc-org-modal__name span{color:#646970;font-size:12px}.zbwc-org-modal__current{background:#f0f0f1;border-radius:999px;color:#50575e;flex:none;font-size:11.5px;font-weight:600;padding:2px 10px}.zbwc-org-modal__tick{color:transparent;flex:none}.zbwc-org-modal__tick.is-on{color:var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__retry{margin-top:12px}.zbwc-org-modal__switch{display:flex;flex-direction:column;gap:12px;margin-top:16px}.zbwc-org-modal__switch .components-notice{margin:0}.zbwc-org-modal__note{color:#646970;font-size:12.5px;line-height:1.55;margin:0}.zbwc-org-modal__footer{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-connbox{align-items:center;display:flex;flex-wrap:wrap;gap:14px}#zbwc-app .zbwc-connbox__icon{background:#edfaef;border-radius:11px;color:#0a6b2f;display:grid;flex:none;height:44px;place-items:center;width:44px}#zbwc-app .zbwc-connbox__icon .dashicons{font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-connbox.is-warn .zbwc-connbox__icon{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-connbox__body{display:flex;flex:1;flex-direction:column;gap:3px;min-width:220px}#zbwc-app .zbwc-connbox__name{font-size:15px;font-weight:600;line-height:1.2}#zbwc-app .zbwc-connbox__meta{align-items:center;color:#646970;display:flex;flex-wrap:wrap;font-size:12.5px;gap:6px 10px}#zbwc-app .zbwc-connbox__meta code{background:#f0f0f1;border-radius:4px;font-size:11.5px;padding:1px 6px}#zbwc-app .zbwc-connbox__actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}#zbwc-app .zbwc-connbox+.components-notice{margin:12px 0 0}.zbwc-org-modal__list.is-compact{max-height:176px}#zbwc-app .zbwc-copyrow{margin:10px 0 2px}#zbwc-app .zbwc-connfields{display:flex;flex-direction:column;gap:16px;margin-top:18px}#zbwc-app .zbwc-invnotice.components-notice{margin:12px 0 0}#zbwc-app .zbwc-invnotice .components-button.is-link{font-size:inherit}#zbwc-app .zbwc-invnotice__lead{font-weight:600;margin:0 0 8px}#zbwc-app .zbwc-invnotice__steps{margin:0 0 10px;padding-right:20px}#zbwc-app .zbwc-invnotice__steps li{margin:4px 0}#zbwc-app .zbwc-invnotice__actions{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-page .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin:0 0 14px;padding:14px 15px}#zbwc-app .zbwc-page .zbwc-ob-note p{font-size:13px;line-height:1.55;margin:0}#zbwc-app .zbwc-page .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-page .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-quiet.components-button{margin-top:18px}#zbwc-app .zbwc-whpicker{align-items:flex-start;display:flex;gap:10px;max-width:560px}#zbwc-app .zbwc-whpicker .components-base-control{flex:1}#zbwc-app .zbwc-whpicker .components-button{margin-top:23px}#zbwc-app .zbwc-whwarn.components-notice{margin:0 0 14px}.zbwc-guide-modal.components-modal__frame{border-radius:14px;max-width:640px;width:calc(100% - 32px)}.zbwc-guide-modal .components-modal__content{padding:2px 28px 24px}.zbwc-guide-modal__lede{color:#646970;font-size:13.5px;line-height:1.6;margin:0 0 16px}.zbwc-guide-modal__steps{margin:0;padding-right:22px}.zbwc-guide-modal__steps li{margin:0 0 14px}.zbwc-guide-modal__steps strong{font-size:14px}.zbwc-guide-modal__steps p{color:#50575e;font-size:13.5px;line-height:1.55;margin:3px 0 0}.zbwc-guide-modal__uri{background:#f0f2f5;border-radius:8px;display:block;font-size:12px;margin-top:8px;padding:8px 10px;word-break:break-all}.zbwc-guide-modal__h{font-size:14px;margin:20px 0 8px}.zbwc-guide-modal__table{border-collapse:collapse;font-size:13px;width:100%}.zbwc-guide-modal__table td{border-bottom:1px solid #eceef1;padding:5px 0 5px 10px}.zbwc-guide-modal__table code{background:#f0f2f5;border-radius:4px;font-size:12px;padding:1px 6px}.zbwc-guide-modal__fixes{font-size:13.5px;margin:0;padding-right:20px}.zbwc-guide-modal__fixes li{color:#50575e;margin:6px 0}.zbwc-guide-modal__footer{display:flex;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-ob-guidelink.components-button{font-weight:600;margin:-6px 0 20px}#zbwc-app .zbwc-rule{border:0;border-top:1px solid #e0e2e6;margin:20px 0 14px}#zbwc-app .zbwc-subhead{color:#646970;font-size:12px;font-weight:600;letter-spacing:.06em;margin:0 0 10px;text-transform:uppercase}#zbwc-app .zbwc-activity{margin:0 0 16px}#zbwc-app .zbwc-activity__task{align-items:center;background:#fff;border:1px solid #e0e2e6;border-right:3px solid #2271b1;border-radius:8px;display:grid;gap:14px;grid-template-columns:230px minmax(120px,1fr) 3.4em minmax(0,34%);margin-bottom:6px;max-height:80px;overflow:hidden;padding:9px 14px;transition:opacity .6s ease,max-height .6s ease,padding .6s ease,margin .6s ease,border-color .3s ease}#zbwc-app .zbwc-activity__task.is-leaving{border-bottom-width:0;border-top-width:0;margin-bottom:0;max-height:0;opacity:0;padding-bottom:0;padding-top:0}#zbwc-app .zbwc-activity__task.is-done{border-right-color:#00a32a}#zbwc-app .zbwc-activity__task.is-failed{border-right-color:#d63638}#zbwc-app .zbwc-activity__label{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__bar{background:#e6e8eb;border-radius:999px;height:6px;overflow:hidden}#zbwc-app .zbwc-activity__fill{background:#2271b1;border-radius:999px;height:100%;transition:width .4s ease;width:0}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__fill{background:#00a32a}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__fill{background:#d63638}#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:zbwc-activity-slide 1.4s ease-in-out infinite;width:35%}#zbwc-app .zbwc-activity__pct{color:#1e1e1e;font-size:13px;font-variant-numeric:tabular-nums;font-weight:600;text-align:left}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__pct{color:#00a32a}#zbwc-app .zbwc-activity__meta{color:#646970;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__task.is-failed{max-height:160px}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__meta{white-space:normal}@media(max-width:782px){#zbwc-app .zbwc-activity__task{gap:6px 10px;grid-template-areas:"label pct" "bar bar" "meta meta";grid-template-columns:minmax(0,1fr) auto;max-height:160px}#zbwc-app .zbwc-activity__label{grid-area:label;white-space:normal}#zbwc-app .zbwc-activity__pct{grid-area:pct}#zbwc-app .zbwc-activity__bar{grid-area:bar}#zbwc-app .zbwc-activity__meta{grid-area:meta;white-space:normal}#zbwc-app .zbwc-activity__label{-ms-grid-column:1;-ms-grid-row:1}#zbwc-app .zbwc-activity__pct{-ms-grid-column:3;-ms-grid-row:1}#zbwc-app .zbwc-activity__bar{-ms-grid-column:1;-ms-grid-row:3;-ms-grid-column-span:3}#zbwc-app .zbwc-activity__meta{-ms-grid-column:1;-ms-grid-row:5;-ms-grid-column-span:3}#zbwc-app .zbwc-failtable,#zbwc-app .zbwc-failtable tbody,#zbwc-app .zbwc-logtable,#zbwc-app .zbwc-logtable tbody{display:block}#zbwc-app .zbwc-failtable thead,#zbwc-app .zbwc-logtable thead{display:none}#zbwc-app .zbwc-failtable tr,#zbwc-app .zbwc-logtable tr{align-items:center;display:flex;flex-wrap:wrap;gap:6px 10px;padding:10px 12px}#zbwc-app .zbwc-failtable td,#zbwc-app .zbwc-logtable td{display:block;padding:0}#zbwc-app .zbwc-failtable .zbwc-errcell,#zbwc-app .zbwc-failtable .zbwc-maptable__actions,#zbwc-app .zbwc-logtable__msg{flex-basis:100%;max-width:none}#zbwc-app .zbwc-logtable__res{color:#646970;flex-basis:100%}#zbwc-app .zbwc-logtable__res:empty{display:none}#zbwc-app .zbwc-failtable code{overflow-wrap:anywhere}#zbwc-app .zbwc-failtable__attempts:before{color:#646970;content:attr(data-label) ": "}}@keyframes zbwc-activity-slide{0%{margin-right:-35%}to{margin-right:100%}}@media(prefers-reduced-motion:reduce){#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:none;opacity:.55;width:100%}#zbwc-app .zbwc-activity__fill,#zbwc-app .zbwc-activity__task{transition:none}}
     1#zbwc-app{--zbwc-accent:#2271b1;--zbwc-border:#dcdcde;--zbwc-bg:#f6f7f7;--zbwc-ok:#00a32a;--zbwc-warn:#dba617;--zbwc-error:#d63638;--zbwc-plan-soft:#f0f6fc;--zbwc-plan-line:#c5d9ed;--zbwc-plan-tint:#dfebf7;--zbwc-bar-soft:#fdf8e3;--zbwc-bar-line:#e6d18d;--zbwc-bar-tint:#f7e8b4;--zbwc-bar-ink:#7a5d0a;color:#1e1e1e;margin:20px 0 0 20px}#zbwc-app .zbwc-boot{color:#757575;padding:40px}#zbwc-app .zbwc-nav{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:20px;padding:10px 16px}#zbwc-app .zbwc-nav__brand{align-items:center;display:flex;font-size:15px;font-weight:600;gap:8px}#zbwc-app .zbwc-nav__logo{color:var(--zbwc-accent)}#zbwc-app .zbwc-nav__sub{color:#757575;font-weight:400}#zbwc-app .zbwc-nav__tabs{display:flex;flex:1;flex-wrap:wrap;gap:4px}#zbwc-app .zbwc-nav__tab{background:transparent;border:none;border-radius:6px;color:#50575e;cursor:pointer;font-size:13px;padding:8px 14px}#zbwc-app .zbwc-nav__tab:hover{background:var(--zbwc-bg)}#zbwc-app .zbwc-nav__tab.is-active{background:var(--zbwc-accent);color:#fff}#zbwc-app .zbwc-layout.has-aside{align-items:start;display:grid;gap:24px;grid-template-columns:minmax(0,1fr) 300px}#zbwc-app .zbwc-aside{position:sticky;top:42px}#zbwc-app .zbwc-aside .zbwc-plancard{max-width:none}@media(max-width:1200px){#zbwc-app .zbwc-layout.has-aside{display:block}#zbwc-app .zbwc-aside{display:none}}#zbwc-app .zbwc-page{display:flex;flex-direction:column;gap:20px;padding-bottom:80px}#zbwc-app .zbwc-grid{display:grid;gap:16px}#zbwc-app .zbwc-grid--2{grid-template-columns:1fr 1fr}#zbwc-app .zbwc-grid--stats{grid-template-columns:repeat(4,1fr)}@media(max-width:960px){#zbwc-app .zbwc-grid--2,#zbwc-app .zbwc-grid--stats{grid-template-columns:1fr 1fr}}@media(max-width:782px){#zbwc-app .zbwc-grid--2{grid-template-columns:minmax(0,1fr)}}#zbwc-app .zbwc-section{border-radius:8px}#zbwc-app .zbwc-section__header{align-items:flex-start}#zbwc-app .zbwc-section__title{font-size:14px;margin:0}#zbwc-app .zbwc-section__desc{color:#757575;font-size:12px;margin:2px 0 0}@media(max-width:782px){#zbwc-app .zbwc-section__header{flex-wrap:wrap;row-gap:8px}#zbwc-app .zbwc-section__heading{flex:1 1 200px;min-width:0}}#zbwc-app .zbwc-section .components-base-control{margin-bottom:16px}#zbwc-app .zbwc-stat{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;padding:16px;text-align:center}#zbwc-app .zbwc-stat__value{color:var(--zbwc-accent);font-size:28px;font-weight:700}#zbwc-app .zbwc-stat__label{color:#757575;font-size:12px;margin-top:4px}#zbwc-app .zbwc-stat__hint{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-kv{border-collapse:collapse;width:100%}#zbwc-app .zbwc-kv th{color:#50575e;font-weight:500;padding:6px 0;text-align:right;width:45%}#zbwc-app .zbwc-kv td{padding:6px 0}#zbwc-app .zbwc-pill{border-radius:999px;display:inline-block;font-size:11px;font-weight:600;line-height:1.8;padding:2px 10px}#zbwc-app .zbwc-pill.is-ok{background:#edfaef;color:var(--zbwc-ok)}#zbwc-app .zbwc-pill.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-pill.is-error{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-pill.is-info{background:#f0f6fc;color:var(--zbwc-accent)}#zbwc-app .zbwc-activity{margin:0}#zbwc-app .zbwc-activity__item{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;font-size:13px;gap:10px;padding:8px 0}#zbwc-app .zbwc-activity__cat{color:#757575;font-size:10px;min-width:70px;text-transform:uppercase}#zbwc-app .zbwc-activity__msg{flex:1}#zbwc-app .zbwc-activity__time{color:#a7aaad;font-size:11px}#zbwc-app .zbwc-dot{background:var(--zbwc-accent);border-radius:50%;height:8px;width:8px}#zbwc-app .zbwc-dot.is-error{background:var(--zbwc-error)}#zbwc-app .zbwc-dot.is-warn{background:var(--zbwc-warn)}#zbwc-app .zbwc-maptable{margin-top:8px}#zbwc-app .zbwc-maptable__toolbar{margin-bottom:10px}#zbwc-app .zbwc-maptable__actions{display:flex;gap:6px}#zbwc-app .zbwc-maptable__scope{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-maptable__add{margin-top:12px;max-width:360px}@media(max-width:782px){#zbwc-app .zbwc-maptable{overflow-x:auto}#zbwc-app table.zbwc-maptable{display:block}#zbwc-app .zbwc-maptable__toolbar .components-button{height:auto;min-height:36px;text-align:right;white-space:normal}}#zbwc-app .zbwc-logtable td{font-size:12px;vertical-align:top}#zbwc-app .zbwc-nowrap{white-space:nowrap}#zbwc-app .zbwc-errcell{color:var(--zbwc-error);font-size:12px;max-width:420px}#zbwc-app .zbwc-filters{align-items:flex-end;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:12px}#zbwc-app .zbwc-filters .components-base-control{margin-bottom:0;min-width:160px}#zbwc-app .zbwc-pager{align-items:center;color:#50575e;display:flex;font-size:12px;gap:12px;justify-content:flex-end;margin-top:12px}#zbwc-app .zbwc-muted{color:#646970;font-size:13px}#zbwc-app .zbwc-actions{margin-top:12px}#zbwc-app .zbwc-upgrade-banner{border-radius:8px;margin:0 0 20px}#zbwc-app .zbwc-upgrade-banner .components-notice__content{margin:0;width:100%}#zbwc-app .zbwc-plans{align-items:start;display:grid;gap:24px;grid-template-columns:1fr 1fr;margin-top:8px}@media(max-width:900px){#zbwc-app .zbwc-plans{grid-template-columns:1fr}}#zbwc-app .zbwc-plans__card{background:#fff;border:1px solid var(--zbwc-border);border-radius:12px;padding:24px;position:relative}#zbwc-app .zbwc-plans__card.is-featured{border:2px solid var(--zbwc-accent);padding-top:30px}#zbwc-app .zbwc-plans__ribbon{background:var(--zbwc-accent);border-radius:999px;color:#fff;font-size:11px;font-weight:700;right:50%;letter-spacing:.5px;padding:4px 16px;position:absolute;top:0;transform:translate(50%,-50%);white-space:nowrap}#zbwc-app .zbwc-plans__head{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-plans__head h3{font-size:20px;margin:0}#zbwc-app .zbwc-plans__current{background:#edfaef;border-radius:999px;color:#00611c;font-size:12px;font-weight:600;padding:4px 14px}#zbwc-app .zbwc-plans__price{margin:14px 0 18px}#zbwc-app .zbwc-plans__price strong{font-size:34px;font-weight:700;line-height:1}#zbwc-app .zbwc-plans__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plans__list li{align-items:flex-start;color:#1e1e1e;display:flex;font-size:14px;gap:10px;margin-bottom:10px}#zbwc-app .zbwc-plans__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plans__list li.is-no{color:#646970}#zbwc-app .zbwc-plans__list li.is-no .dashicons{color:#a7aaad}#zbwc-app .zbwc-plans__note{background:var(--zbwc-bg);border-radius:8px;color:#50575e;font-size:13px;margin:0;padding:14px 16px}#zbwc-app .zbwc-plans__cta.components-button.is-primary,#zbwc-app .zbwc-plans__cta.components-button.is-secondary{font-size:14px;font-weight:600;height:44px;justify-content:center;width:100%}#zbwc-app .zbwc-plans__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plans__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-planbar{align-items:center;background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-right:4px solid var(--zbwc-warn);border-radius:10px;display:flex;flex-wrap:wrap;gap:14px;margin:0 0 20px;padding:12px 16px}#zbwc-app .zbwc-planbar.is-urgent{border-color:var(--zbwc-warn);border-right-width:4px}#zbwc-app .zbwc-planbar__icon{align-items:center;background:var(--zbwc-bar-tint);border-radius:50%;color:var(--zbwc-bar-ink);display:flex;flex:none;height:32px;justify-content:center;width:32px}#zbwc-app .zbwc-planbar__text{align-items:baseline;display:flex;flex:1;flex-wrap:wrap;gap:10px;min-width:240px}#zbwc-app .zbwc-planbar__text strong{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-planbar__text span{color:#50575e;font-size:13px}#zbwc-app .zbwc-planbar__actions{align-items:center;display:flex;gap:8px;margin-right:auto}#zbwc-app .zbwc-plancard{background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-radius:10px;border-top:3px solid var(--zbwc-warn);max-width:420px;padding:20px 22px 18px}#zbwc-app .zbwc-plancard__chip{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);display:inline-block;font-size:11px;font-weight:700;letter-spacing:.4px;padding:3px 12px}#zbwc-app .zbwc-plancard__title{font-size:17px;margin:12px 0 6px}#zbwc-app .zbwc-plancard__desc{color:#50575e;font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-plancard__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plancard__list li{align-items:flex-start;color:#3c434a;display:flex;font-size:13px;gap:8px;margin-bottom:7px}#zbwc-app .zbwc-plancard__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plancard__cta.components-button.is-primary{font-weight:600;height:40px;justify-content:center;width:100%}#zbwc-app .zbwc-plancard__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plancard__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-quotachip{background:#edfaef;border-radius:999px;color:#0a6b22;display:inline-block;font-size:12px;font-weight:600;padding:3px 12px;white-space:nowrap}#zbwc-app .zbwc-quotachip.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-quotachip.is-full{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-quotanote{margin:0 0 16px}#zbwc-app .zbwc-pagehead{align-items:center;display:flex;gap:16px;justify-content:space-between}#zbwc-app .zbwc-pagehead__title{font-size:20px;font-weight:700;letter-spacing:-.01em;margin:0}#zbwc-app .zbwc-statbar{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:grid;grid-template-columns:repeat(5,1fr);overflow:hidden}#zbwc-app .zbwc-statbar__cell{align-items:flex-start;border-left:1px solid var(--zbwc-border);display:flex;flex-direction:column;gap:6px;padding:16px 18px}#zbwc-app .zbwc-statbar__cell:last-child{border-left:none}#zbwc-app .zbwc-statbar__label{color:#757575;font-size:11px;letter-spacing:.06em;text-transform:uppercase}#zbwc-app .zbwc-statbar__value{font-size:26px;font-variant-numeric:tabular-nums;font-weight:700;line-height:1}#zbwc-app .zbwc-statbar__value--sm{font-size:17px}#zbwc-app .zbwc-statbar__value.is-bad{color:var(--zbwc-error)}#zbwc-app .zbwc-statbar__sub{color:#757575;font-size:12px}@media(max-width:1100px){#zbwc-app .zbwc-statbar{grid-template-columns:repeat(3,1fr)}#zbwc-app .zbwc-statbar__cell:nth-child(3){border-left:none}}@media(max-width:600px){#zbwc-app .zbwc-statbar{grid-template-columns:1fr 1fr}}#zbwc-app .zbwc-masterbar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-right:4px solid var(--zbwc-ok);border-radius:8px;display:flex;gap:20px;padding:16px 18px}#zbwc-app .zbwc-masterbar.is-off{background:var(--zbwc-bg);border-right-color:var(--zbwc-warn)}#zbwc-app .zbwc-masterbar__text{display:flex;flex:1;flex-direction:column;gap:4px}#zbwc-app .zbwc-masterbar__title{align-items:center;display:flex;font-size:15px;font-weight:600;gap:10px}#zbwc-app .zbwc-masterbar__desc{color:#646970;font-size:13px}#zbwc-app .zbwc-flow{display:flex;flex-direction:column}#zbwc-app .zbwc-flow__row{border-bottom:1px solid #f0f0f1;padding:14px 0}#zbwc-app .zbwc-flow__row:last-child{border-bottom:none}#zbwc-app .zbwc-flow__row:first-child{padding-top:4px}#zbwc-app .zbwc-flow__row.is-disabled{opacity:.65}#zbwc-app .zbwc-flow__main{align-items:center;display:flex;gap:14px}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{align-items:center;display:flex;gap:10px;min-width:0}#zbwc-app .zbwc-flow__event{flex:0 0 46%}#zbwc-app .zbwc-flow__doc{flex:1}#zbwc-app .zbwc-flow__label{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-flow__arrow{color:#a7aaad;flex:none}#zbwc-app .zbwc-flow__badge{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);flex:none;font-size:11px;font-weight:700;letter-spacing:.4px;padding:2px 9px}#zbwc-app .zbwc-flow__switch{flex:none;margin-right:auto}#zbwc-app .zbwc-flow .components-base-control,#zbwc-app .zbwc-flow .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-flow__hint{color:#757575;font-size:12px;margin:6px 0 0;padding-right:2px}@media(max-width:782px){#zbwc-app .zbwc-flow__main{flex-wrap:wrap}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{flex:1 1 100%}#zbwc-app .zbwc-flow__arrow{display:none}}#zbwc-app .zbwc-note{align-items:flex-start;background:#fff;border:1px solid var(--zbwc-border);border-radius:10px;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-note p{color:#3c434a;font-size:14px;line-height:1.55;margin:0}#zbwc-app .zbwc-note .dashicons{align-items:center;border-radius:9px;display:flex;flex:none;font-size:19px;height:34px;justify-content:center;width:34px}#zbwc-app .zbwc-note.is-info .dashicons{background:var(--zbwc-plan-tint);color:var(--zbwc-accent)}#zbwc-app .zbwc-note.is-warn .dashicons{background:var(--zbwc-bar-tint);color:var(--zbwc-bar-ink)}#zbwc-app .zbwc-subnav{display:grid;gap:4px;grid-auto-columns:1fr;grid-auto-flow:column}#zbwc-app .zbwc-subnav__tab{background:transparent;border:none;border-radius:8px;color:#50575e;cursor:pointer;font-size:14px;font-weight:500;padding:10px 16px;text-align:center;transition:background-color .12s ease}#zbwc-app .zbwc-subnav__tab:hover{background:rgba(0,0,0,.03)}#zbwc-app .zbwc-subnav__tab.is-active{background:#e4e5e7;color:#1e1e1e;font-weight:600}#zbwc-app .zbwc-subnav__tab:focus-visible{outline:2px solid var(--zbwc-accent);outline-offset:2px}@media(max-width:782px){#zbwc-app .zbwc-subnav{grid-auto-columns:auto;grid-auto-flow:row}}#zbwc-app .zbwc-savebar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;bottom:0;box-shadow:0 -2px 10px rgba(0,0,0,.06);display:flex;justify-content:space-between;margin-top:8px;padding:12px 16px;position:sticky}#zbwc-app .zbwc-savebar__msg{font-weight:500}#zbwc-app .zbwc-savebar__actions{display:flex;gap:8px}#zbwc-app .zbwc-code{background:#1e1e1e;border-radius:6px;color:#7fd;display:block;font-size:12px;padding:10px 12px;word-break:break-all}#zbwc-app .zbwc-linkbtn,#zbwc-app .zbwc-loading{align-items:center;display:inline-flex;gap:8px}#zbwc-app .zbwc-linkbtn{background:none;border:none;color:var(--zbwc-accent);cursor:pointer}#zbwc-app .zbwc-loading{color:#757575;padding:30px}#zbwc-app .zbwc-orglist__row{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;justify-content:space-between;padding:8px 0}#zbwc-app .zbwc-subhead{border-bottom:1px solid #f0f0f1;color:#757575;font-size:11px;letter-spacing:.5px;margin:22px 0 10px;padding-bottom:5px}#zbwc-app .zbwc-onboarding{--ob-ink:#1a1a1a;--ob-muted:#656a70;--ob-line:#e3e5e7;--ob-soft:#f7f8f8;margin:0 auto;max-width:1120px;padding-bottom:60px}#zbwc-app .zbwc-onboarding__bar{align-items:center;display:flex;gap:10px;padding:4px 0 20px}#zbwc-app .zbwc-onboarding__logo.dashicons{color:var(--zbwc-accent);font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-onboarding__brand{font-size:16px;font-weight:700;letter-spacing:-.01em}#zbwc-app .zbwc-onboarding__titlerow{align-items:center;display:flex;gap:16px;justify-content:space-between;margin-bottom:16px}#zbwc-app .zbwc-onboarding__title{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0}#zbwc-app .zbwc-onboarding__chip{background:#e9eaeb;border-radius:999px;color:#50575e;font-size:12px;font-weight:500;padding:5px 14px}#zbwc-app .zbwc-onboarding__card{background:#fff;border:1px solid var(--ob-line);border-radius:16px;display:grid;grid-template-columns:minmax(0,1fr) 330px;overflow:hidden}#zbwc-app .zbwc-onboarding__panel{padding:34px 38px 38px}#zbwc-app .zbwc-onboarding__aside{background:var(--ob-soft);border-right:1px solid var(--ob-line);padding:32px 28px}@media(max-width:960px){#zbwc-app .zbwc-onboarding__card{grid-template-columns:1fr}#zbwc-app .zbwc-onboarding__panel{padding:26px 22px 30px}#zbwc-app .zbwc-onboarding__aside{border-right:none;border-top:1px solid var(--ob-line)}}#zbwc-app .zbwc-ob-eyebrow{color:var(--ob-muted);font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-ob-heading{color:var(--ob-ink);font-size:30px;font-weight:700;letter-spacing:-.02em;line-height:1.18;margin:0 0 12px}#zbwc-app .zbwc-ob-lead{color:#4a5056;font-size:14.5px;line-height:1.6;margin:0 0 26px;max-width:46em}#zbwc-app .zbwc-ob-footnote{color:var(--ob-muted);font-size:12.5px;line-height:1.6;margin:18px 0 0}#zbwc-app .zbwc-ob-quiet{margin-top:16px}#zbwc-app .zbwc-ob-icon{align-items:center;background:var(--ob-soft);border:1px solid var(--ob-line);border-radius:11px;color:var(--ob-ink);display:flex;flex:none;height:42px;justify-content:center;width:42px}#zbwc-app .zbwc-ob-icon .dashicons{font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-features{list-style:none;margin:0 0 30px;padding:0}#zbwc-app .zbwc-ob-feature{display:flex;gap:16px;margin-bottom:22px}#zbwc-app .zbwc-ob-feature h3{font-size:15px;font-weight:600;margin:0 0 4px}#zbwc-app .zbwc-ob-feature p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:0}#zbwc-app .zbwc-ob-aside__title{font-size:14px;font-weight:700;margin:0}#zbwc-app .zbwc-ob-progress{list-style:none;margin:18px 0 0;padding:0}#zbwc-app .zbwc-ob-progress__item{display:flex;gap:14px;padding-bottom:22px;position:relative}#zbwc-app .zbwc-ob-progress__item:last-child{padding-bottom:0}#zbwc-app .zbwc-ob-progress__item:before{background:#dcdee0;bottom:6px;content:"";right:15px;position:absolute;top:34px;width:1px}#zbwc-app .zbwc-ob-progress__item:last-child:before{display:none}#zbwc-app .zbwc-ob-progress__num{align-items:center;background:#fff;border:1px solid #d5d7d9;border-radius:50%;color:#8c8f94;display:flex;flex:none;font-size:12px;font-weight:600;height:31px;justify-content:center;position:relative;width:31px}#zbwc-app .zbwc-ob-progress__num .dashicons{font-size:18px;height:18px;width:18px}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__num,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__num{background:var(--ob-ink);border-color:var(--ob-ink);color:#fff}#zbwc-app .zbwc-ob-progress__text{display:flex;flex-direction:column;gap:3px;padding-top:4px}#zbwc-app .zbwc-ob-progress__text strong{color:#8c8f94;font-size:13.5px;font-weight:600}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__text strong,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__text strong{color:var(--ob-ink)}#zbwc-app .zbwc-ob-progress__text span{color:var(--ob-muted);font-size:12.5px;line-height:1.5}#zbwc-app .zbwc-ob-facts{border-top:1px solid var(--ob-line);list-style:none;margin:22px 0 0;padding:18px 0 0}#zbwc-app .zbwc-ob-facts li{color:var(--ob-muted);font-size:12.5px;line-height:1.55;margin:0 0 10px;padding-right:14px;position:relative}#zbwc-app .zbwc-ob-facts li:before{content:"·";right:4px;position:absolute}#zbwc-app .zbwc-ob-count{border-top:1px solid var(--ob-line);font-size:13px;font-weight:600;margin:22px 0 0;padding-top:18px}#zbwc-app .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin-top:14px;padding:14px 15px}#zbwc-app .zbwc-ob-note p{font-size:12.5px;line-height:1.55;margin:0}#zbwc-app .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-ob-note.is-warn{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-ob-note.is-plan{background:#edfaef;color:#0a6b22}#zbwc-app .zbwc-ob-badge{border-radius:999px;flex:none;font-size:12px;font-weight:600;padding:4px 12px;white-space:nowrap}#zbwc-app .zbwc-ob-badge.is-ok{background:#d8f5e3;color:#0a6b2f}#zbwc-app .zbwc-ob-badge.is-blue{background:#e4f0fb;color:#1c5a99}#zbwc-app .zbwc-ob-badge.is-muted{background:#eceded;color:#646970}#zbwc-app .zbwc-ob-option{border:1px solid var(--ob-line);border-radius:12px;padding:20px 22px}#zbwc-app .zbwc-ob-option.is-done{background:var(--ob-soft)}#zbwc-app .zbwc-ob-option__head{align-items:center;display:flex;gap:12px;justify-content:space-between}#zbwc-app .zbwc-ob-option__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-option__desc{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:8px 0 0}#zbwc-app .zbwc-ob-option .zbwc-kv{margin-top:10px}#zbwc-app .zbwc-ob-howto{color:#3c434a;font-size:13.5px;line-height:1.7;margin:18px 0 0;padding-right:18px}#zbwc-app .zbwc-ob-howto li{margin-bottom:10px}#zbwc-app .zbwc-ob-copyrow{align-items:center;display:flex;gap:8px;margin-top:8px}#zbwc-app .zbwc-ob-copyrow .zbwc-code{flex:1;margin:0}#zbwc-app .zbwc-ob-fields{border-top:1px solid var(--ob-line);display:grid;gap:18px;margin-top:20px;padding-top:20px}#zbwc-app .zbwc-ob-fields .components-base-control{margin-bottom:0}#zbwc-app .zbwc-ob-actions{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}#zbwc-app .zbwc-ob-actions .components-button .dashicons{font-size:17px;height:17px;margin-left:6px;width:17px}#zbwc-app .zbwc-ob-divider{background:var(--ob-line);height:1px;margin:26px 0 18px}#zbwc-app .zbwc-ob-disclosure{align-items:center;background:none;border:none;color:var(--zbwc-accent);cursor:pointer;display:inline-flex;font-size:13.5px;font-weight:500;gap:6px;padding:0}#zbwc-app .zbwc-ob-disclosure .dashicons{font-size:16px;height:16px;width:16px}#zbwc-app .zbwc-ob-advanced{background:var(--ob-soft);border-radius:12px;margin-top:16px;padding:18px 20px}#zbwc-app .zbwc-ob-advanced p{color:var(--ob-muted);font-size:13px;line-height:1.6;margin:0 0 14px}#zbwc-app .zbwc-ob-advanced .components-base-control{margin-bottom:14px}#zbwc-app .zbwc-ob-resource{border:1px solid var(--ob-line);border-radius:12px;margin-bottom:14px;transition:border-color .12s ease,box-shadow .12s ease}#zbwc-app .zbwc-ob-resource.is-on{border-color:#c4c7ca;box-shadow:0 1px 2px rgba(0,0,0,.04)}#zbwc-app .zbwc-ob-resource__main{align-items:flex-start;cursor:pointer;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-ob-resource__box{cursor:default;display:flex;padding-top:3px}#zbwc-app .zbwc-ob-resource .components-base-control,#zbwc-app .zbwc-ob-resource .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-ob-resource__body{flex:1}#zbwc-app .zbwc-ob-resource__head{align-items:center;display:flex;flex-wrap:wrap;gap:10px}#zbwc-app .zbwc-ob-resource__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-resource__body p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:5px 0 0}#zbwc-app .zbwc-ob-resource__prefs{cursor:default;display:grid;gap:18px;grid-template-columns:1fr 1fr;margin-top:16px}@media(max-width:782px){#zbwc-app .zbwc-ob-resource__prefs{grid-template-columns:1fr}}#zbwc-app .zbwc-ob-inline-notice.components-notice{border-radius:10px;margin:4px 0 0}#zbwc-app .zbwc-ob-done{background:#fff;border:1px solid var(--ob-line);border-radius:16px;margin:0 auto;max-width:620px;padding:44px 44px 36px;text-align:center}#zbwc-app .zbwc-ob-done__check{align-items:center;background:#e2f5e9;border-radius:50%;display:inline-flex;height:76px;justify-content:center;margin-bottom:20px;width:76px}#zbwc-app .zbwc-ob-done__check .dashicons{align-items:center;background:#2f7a48;border-radius:50%;color:#fff;display:flex;font-size:34px;height:54px;justify-content:center;width:54px}#zbwc-app .zbwc-ob-done h2{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0 0 10px}#zbwc-app .zbwc-ob-done .zbwc-ob-lead{margin:0 auto 26px;max-width:34em}#zbwc-app .zbwc-ob-done .zbwc-ob-note{text-align:right}#zbwc-app .zbwc-ob-summary{border:1px solid var(--ob-line);border-radius:12px;list-style:none;margin:0;overflow:hidden;padding:0;text-align:right}#zbwc-app .zbwc-ob-summary__row{align-items:center;border-bottom:1px solid var(--ob-line);display:flex;gap:12px;padding:15px 18px}#zbwc-app .zbwc-ob-summary__row:last-child{border-bottom:none}#zbwc-app .zbwc-ob-summary__icon{display:flex}#zbwc-app .zbwc-ob-summary__icon .dashicons{color:#2f7a48;font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-summary__icon.is-muted .dashicons{color:#a7aaad}#zbwc-app .zbwc-ob-summary__text{display:flex;flex:1;flex-direction:column;gap:2px}#zbwc-app .zbwc-ob-summary__text strong{font-size:14px}#zbwc-app .zbwc-ob-summary__text span{color:var(--ob-muted);font-size:12.5px}#zbwc-app .zbwc-ob-done__actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:24px}#zbwc-app .zbwc-ob-nav{align-items:center;display:flex;justify-content:space-between;margin-top:22px}#zbwc-app .zbwc-onboarding .components-button.is-primary{background:var(--ob-ink);border-color:var(--ob-ink);border-radius:8px;box-shadow:none;font-size:13.5px;font-weight:600;height:42px;padding:0 20px}#zbwc-app .zbwc-onboarding .components-button.is-primary:focus:not(:disabled),#zbwc-app .zbwc-onboarding .components-button.is-primary:hover:not(:disabled){background:#000;border-color:#000;color:#fff}#zbwc-app .zbwc-onboarding .components-button.is-primary:disabled,#zbwc-app .zbwc-onboarding .components-button.is-primary[aria-disabled=true]{background:#e6e7e8;border-color:#e6e7e8;color:#a7aaad}#zbwc-app .zbwc-onboarding .components-button.is-secondary{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #d5d7d9;color:var(--ob-ink);font-size:13.5px;font-weight:600;height:42px;padding:0 18px}#zbwc-app .zbwc-onboarding .components-button.is-secondary:hover:not(:disabled){background:var(--ob-soft);box-shadow:inset 0 0 0 1px #b9bcbf;color:var(--ob-ink)}#zbwc-app .zbwc-onboarding .components-button.is-tertiary{border-radius:8px;font-weight:600;height:42px;padding:0 14px}#zbwc-app .zbwc-toasts{bottom:20px;right:160px;position:fixed;z-index:100000}@media(max-width:782px){#zbwc-app .zbwc-toasts{right:16px;left:16px;width:auto}}.zbwc-upgrade-modal.components-modal__frame{border-radius:12px;max-width:32rem;position:relative;width:calc(100% - 32px)}.zbwc-upgrade-modal .components-modal__header{border-bottom:none;height:auto;justify-content:center;padding:28px 32px 0}.zbwc-upgrade-modal .components-modal__header-heading-container{justify-content:center}.zbwc-upgrade-modal .components-modal__header-heading{font-size:22px;font-weight:700;line-height:1.3;text-align:center}.zbwc-upgrade-modal .components-modal__header .components-button.has-icon{margin:0;position:absolute;left:12px;top:10px}.zbwc-upgrade-modal .components-modal__content{padding:0 32px 28px}.zbwc-upgrade-modal .components-modal__content:before{content:none}.zbwc-upgrade-modal__body{text-align:center}.zbwc-upgrade-modal__lead{color:#3c434a;font-size:14px;line-height:1.6;margin:12px auto 0;max-width:34rem}.zbwc-upgrade-modal__note{color:#646970;font-size:13px;line-height:1.6;margin:8px auto 0;max-width:34rem}.zbwc-upgrade-modal__offer{align-items:baseline;display:flex;gap:8px;justify-content:center;margin:20px 0 16px}.zbwc-upgrade-modal__plan{font-size:15px;font-weight:600}.zbwc-upgrade-modal__price{font-size:30px;font-weight:700;line-height:1}.zbwc-upgrade-modal__per{color:#646970;font-size:14px;font-weight:400}.zbwc-upgrade-modal__cta.components-button.is-primary{border-radius:8px;display:flex;font-size:15px;font-weight:600;height:48px;justify-content:center;width:100%}.zbwc-upgrade-modal__later.components-button{color:#50575e;display:block;margin:14px auto 0;text-decoration:underline}.zbwc-upgrade-modal__trust{align-items:center;border-top:1px solid #e0e0e0;color:#646970;display:flex;font-size:13px;gap:6px;justify-content:center;margin:22px 0 0;padding-top:18px}.zbwc-upgrade-modal__trust .dashicons{font-size:16px;height:16px;width:16px}.zbwc-org-modal.components-modal__frame{border-radius:14px;max-width:480px;width:calc(100% - 32px)}.zbwc-org-modal .components-modal__header-heading{font-size:17px;font-weight:600}.zbwc-org-modal .components-modal__content{padding:2px 28px 24px}.zbwc-org-modal__lead{color:#646970;font-size:13px;line-height:1.6;margin:0 0 16px}.zbwc-org-modal__loading{align-items:center;color:#646970;display:flex;gap:8px;padding:16px 0 8px}.zbwc-org-modal__loading .components-spinner{margin:0}.zbwc-org-modal__list{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow-y:auto}.zbwc-org-modal__row{align-items:center;background:#fff;border:1px solid #dcdcde;border-radius:10px;color:inherit;cursor:pointer;display:flex;font:inherit;gap:12px;padding:12px 14px;text-align:right;transition:border-color .12s ease,box-shadow .12s ease;width:100%}.zbwc-org-modal__row:hover{border-color:#8c8f94}.zbwc-org-modal__row:focus-visible{outline:2px solid var(--wp-admin-theme-color,#3858e9);outline-offset:1px}.zbwc-org-modal__row.is-selected{border-color:var(--wp-admin-theme-color,#3858e9);box-shadow:0 0 0 1px var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__icon{background:#f0f0f1;border-radius:9px;color:#50575e;display:grid;flex:none;height:36px;place-items:center;width:36px}.zbwc-org-modal__icon .dashicons{font-size:18px;height:18px;width:18px}.zbwc-org-modal__name{display:flex;flex:1;flex-direction:column;gap:1px;min-width:0}.zbwc-org-modal__name strong{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zbwc-org-modal__name span{color:#646970;font-size:12px}.zbwc-org-modal__current{background:#f0f0f1;border-radius:999px;color:#50575e;flex:none;font-size:11.5px;font-weight:600;padding:2px 10px}.zbwc-org-modal__tick{color:transparent;flex:none}.zbwc-org-modal__tick.is-on{color:var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__retry{margin-top:12px}.zbwc-org-modal__switch{display:flex;flex-direction:column;gap:12px;margin-top:16px}.zbwc-org-modal__switch .components-notice{margin:0}.zbwc-org-modal__note{color:#646970;font-size:12.5px;line-height:1.55;margin:0}.zbwc-org-modal__footer{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-connbox{align-items:center;display:flex;flex-wrap:wrap;gap:14px}#zbwc-app .zbwc-connbox__icon{background:#edfaef;border-radius:11px;color:#0a6b2f;display:grid;flex:none;height:44px;place-items:center;width:44px}#zbwc-app .zbwc-connbox__icon .dashicons{font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-connbox.is-warn .zbwc-connbox__icon{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-connbox__body{display:flex;flex:1;flex-direction:column;gap:3px;min-width:220px}#zbwc-app .zbwc-connbox__name{font-size:15px;font-weight:600;line-height:1.2}#zbwc-app .zbwc-connbox__meta{align-items:center;color:#646970;display:flex;flex-wrap:wrap;font-size:12.5px;gap:6px 10px}#zbwc-app .zbwc-connbox__meta code{background:#f0f0f1;border-radius:4px;font-size:11.5px;padding:1px 6px}#zbwc-app .zbwc-connbox__actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}#zbwc-app .zbwc-connbox+.components-notice{margin:12px 0 0}.zbwc-org-modal__list.is-compact{max-height:176px}#zbwc-app .zbwc-copyrow{margin:10px 0 2px}#zbwc-app .zbwc-connfields{display:flex;flex-direction:column;gap:16px;margin-top:18px}#zbwc-app .zbwc-invnotice.components-notice{margin:12px 0 0}#zbwc-app .zbwc-invnotice .components-button.is-link{font-size:inherit}#zbwc-app .zbwc-invnotice__lead{font-weight:600;margin:0 0 8px}#zbwc-app .zbwc-invnotice__steps{margin:0 0 10px;padding-right:20px}#zbwc-app .zbwc-invnotice__steps li{margin:4px 0}#zbwc-app .zbwc-invnotice__actions{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-page .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin:0 0 14px;padding:14px 15px}#zbwc-app .zbwc-page .zbwc-ob-note p{font-size:13px;line-height:1.55;margin:0}#zbwc-app .zbwc-page .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-page .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-quiet.components-button{margin-top:18px}#zbwc-app .zbwc-whpicker{align-items:flex-start;display:flex;gap:10px;max-width:560px}#zbwc-app .zbwc-whpicker .components-base-control{flex:1}#zbwc-app .zbwc-whpicker .components-button{margin-top:23px}#zbwc-app .zbwc-whwarn.components-notice{margin:0 0 14px}.zbwc-guide-modal.components-modal__frame{border-radius:14px;max-width:640px;width:calc(100% - 32px)}.zbwc-guide-modal .components-modal__content{padding:2px 28px 24px}.zbwc-guide-modal__lede{color:#646970;font-size:13.5px;line-height:1.6;margin:0 0 16px}.zbwc-guide-modal__steps{margin:0;padding-right:22px}.zbwc-guide-modal__steps li{margin:0 0 14px}.zbwc-guide-modal__steps strong{font-size:14px}.zbwc-guide-modal__steps p{color:#50575e;font-size:13.5px;line-height:1.55;margin:3px 0 0}.zbwc-guide-modal__uri{background:#f0f2f5;border-radius:8px;display:block;font-size:12px;margin-top:8px;padding:8px 10px;word-break:break-all}.zbwc-guide-modal__h{font-size:14px;margin:20px 0 8px}.zbwc-guide-modal__table{border-collapse:collapse;font-size:13px;width:100%}.zbwc-guide-modal__table td{border-bottom:1px solid #eceef1;padding:5px 0 5px 10px}.zbwc-guide-modal__table code{background:#f0f2f5;border-radius:4px;font-size:12px;padding:1px 6px}.zbwc-guide-modal__fixes{font-size:13.5px;margin:0;padding-right:20px}.zbwc-guide-modal__fixes li{color:#50575e;margin:6px 0}.zbwc-guide-modal__footer{display:flex;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-ob-guidelink.components-button{font-weight:600;margin:-6px 0 20px}#zbwc-app .zbwc-rule{border:0;border-top:1px solid #e0e2e6;margin:20px 0 14px}#zbwc-app .zbwc-subhead{color:#646970;font-size:12px;font-weight:600;letter-spacing:.06em;margin:0 0 10px;text-transform:uppercase}#zbwc-app .zbwc-activity{margin:0 0 16px}#zbwc-app .zbwc-activity__task{align-items:center;background:#fff;border:1px solid #e0e2e6;border-right:3px solid #2271b1;border-radius:8px;display:grid;gap:14px;grid-template-columns:230px minmax(120px,1fr) 3.4em minmax(0,34%);margin-bottom:6px;max-height:80px;overflow:hidden;padding:9px 14px;transition:opacity .6s ease,max-height .6s ease,padding .6s ease,margin .6s ease,border-color .3s ease}#zbwc-app .zbwc-activity__task.is-leaving{border-bottom-width:0;border-top-width:0;margin-bottom:0;max-height:0;opacity:0;padding-bottom:0;padding-top:0}#zbwc-app .zbwc-activity__task.is-done{border-right-color:#00a32a}#zbwc-app .zbwc-activity__task.is-failed{border-right-color:#d63638}#zbwc-app .zbwc-activity__label{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__bar{background:#e6e8eb;border-radius:999px;height:6px;overflow:hidden}#zbwc-app .zbwc-activity__fill{background:#2271b1;border-radius:999px;height:100%;transition:width .4s ease;width:0}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__fill{background:#00a32a}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__fill{background:#d63638}#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:zbwc-activity-slide 1.4s ease-in-out infinite;width:35%}#zbwc-app .zbwc-activity__pct{color:#1e1e1e;font-size:13px;font-variant-numeric:tabular-nums;font-weight:600;text-align:left}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__pct{color:#00a32a}#zbwc-app .zbwc-activity__meta{color:#646970;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__task.is-failed{max-height:160px}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__meta{white-space:normal}@media(max-width:782px){#zbwc-app .zbwc-activity__task{gap:6px 10px;grid-template-areas:"label pct" "bar bar" "meta meta";grid-template-columns:minmax(0,1fr) auto;max-height:160px}#zbwc-app .zbwc-activity__label{grid-area:label;white-space:normal}#zbwc-app .zbwc-activity__pct{grid-area:pct}#zbwc-app .zbwc-activity__bar{grid-area:bar}#zbwc-app .zbwc-activity__meta{grid-area:meta;white-space:normal}#zbwc-app .zbwc-activity__label{-ms-grid-column:1;-ms-grid-row:1}#zbwc-app .zbwc-activity__pct{-ms-grid-column:3;-ms-grid-row:1}#zbwc-app .zbwc-activity__bar{-ms-grid-column:1;-ms-grid-row:3;-ms-grid-column-span:3}#zbwc-app .zbwc-activity__meta{-ms-grid-column:1;-ms-grid-row:5;-ms-grid-column-span:3}#zbwc-app .zbwc-failtable,#zbwc-app .zbwc-failtable tbody,#zbwc-app .zbwc-logtable,#zbwc-app .zbwc-logtable tbody{display:block}#zbwc-app .zbwc-failtable thead,#zbwc-app .zbwc-logtable thead{display:none}#zbwc-app .zbwc-failtable tr,#zbwc-app .zbwc-logtable tr{align-items:center;display:flex;flex-wrap:wrap;gap:6px 10px;padding:10px 12px}#zbwc-app .zbwc-failtable td,#zbwc-app .zbwc-logtable td{display:block;padding:0}#zbwc-app .zbwc-failtable .zbwc-errcell,#zbwc-app .zbwc-failtable .zbwc-maptable__actions,#zbwc-app .zbwc-logtable__msg{flex-basis:100%;max-width:none}#zbwc-app .zbwc-logtable__res{color:#646970;flex-basis:100%}#zbwc-app .zbwc-logtable__res:empty{display:none}#zbwc-app .zbwc-failtable code{overflow-wrap:anywhere}#zbwc-app .zbwc-failtable__attempts:before{color:#646970;content:attr(data-label) ": "}}@keyframes zbwc-activity-slide{0%{margin-right:-35%}to{margin-right:100%}}@media(prefers-reduced-motion:reduce){#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:none;opacity:.55;width:100%}#zbwc-app .zbwc-activity__fill,#zbwc-app .zbwc-activity__task{transition:none}}
  • erp7-order-sync-for-zoho-books/trunk/build/index.asset.php

    r3733769 r3733904  
    1 <?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-components', 'wp-dom-ready', 'wp-element', 'wp-i18n'), 'version' => 'e99746af84593b135c80');
     1<?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-components', 'wp-dom-ready', 'wp-element', 'wp-i18n'), 'version' => '6bf024ff61b1e1184811');
  • erp7-order-sync-for-zoho-books/trunk/build/index.css

    r3733769 r3733904  
    1 #zbwc-app{--zbwc-accent:#2271b1;--zbwc-border:#dcdcde;--zbwc-bg:#f6f7f7;--zbwc-ok:#00a32a;--zbwc-warn:#dba617;--zbwc-error:#d63638;--zbwc-plan-soft:#f0f6fc;--zbwc-plan-line:#c5d9ed;--zbwc-plan-tint:#dfebf7;--zbwc-bar-soft:#fdf8e3;--zbwc-bar-line:#e6d18d;--zbwc-bar-tint:#f7e8b4;--zbwc-bar-ink:#7a5d0a;color:#1e1e1e;margin:20px 20px 0 0}#zbwc-app .zbwc-boot{color:#757575;padding:40px}#zbwc-app .zbwc-nav{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:20px;padding:10px 16px}#zbwc-app .zbwc-nav__brand{align-items:center;display:flex;font-size:15px;font-weight:600;gap:8px}#zbwc-app .zbwc-nav__logo{color:var(--zbwc-accent)}#zbwc-app .zbwc-nav__sub{color:#757575;font-weight:400}#zbwc-app .zbwc-nav__tabs{display:flex;flex:1;flex-wrap:wrap;gap:4px}#zbwc-app .zbwc-nav__tab{background:transparent;border:none;border-radius:6px;color:#50575e;cursor:pointer;font-size:13px;padding:8px 14px}#zbwc-app .zbwc-nav__tab:hover{background:var(--zbwc-bg)}#zbwc-app .zbwc-nav__tab.is-active{background:var(--zbwc-accent);color:#fff}#zbwc-app .zbwc-layout.has-aside{align-items:start;display:grid;gap:24px;grid-template-columns:minmax(0,1fr) 300px}#zbwc-app .zbwc-aside{position:sticky;top:42px}#zbwc-app .zbwc-aside .zbwc-plancard{max-width:none}@media(max-width:1200px){#zbwc-app .zbwc-layout.has-aside{display:block}#zbwc-app .zbwc-aside{display:none}}#zbwc-app .zbwc-page{display:flex;flex-direction:column;gap:20px;padding-bottom:80px}#zbwc-app .zbwc-grid{display:grid;gap:16px}#zbwc-app .zbwc-grid--2{grid-template-columns:1fr 1fr}#zbwc-app .zbwc-grid--stats{grid-template-columns:repeat(4,1fr)}@media(max-width:960px){#zbwc-app .zbwc-grid--2,#zbwc-app .zbwc-grid--stats{grid-template-columns:1fr 1fr}}@media(max-width:782px){#zbwc-app .zbwc-grid--2{grid-template-columns:minmax(0,1fr)}}#zbwc-app .zbwc-section{border-radius:8px}#zbwc-app .zbwc-section__header{align-items:flex-start}#zbwc-app .zbwc-section__title{font-size:14px;margin:0}#zbwc-app .zbwc-section__desc{color:#757575;font-size:12px;margin:2px 0 0}@media(max-width:782px){#zbwc-app .zbwc-section__header{flex-wrap:wrap;row-gap:8px}#zbwc-app .zbwc-section__heading{flex:1 1 200px;min-width:0}}#zbwc-app .zbwc-section .components-base-control{margin-bottom:16px}#zbwc-app .zbwc-stat{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;padding:16px;text-align:center}#zbwc-app .zbwc-stat__value{color:var(--zbwc-accent);font-size:28px;font-weight:700}#zbwc-app .zbwc-stat__label{color:#757575;font-size:12px;margin-top:4px}#zbwc-app .zbwc-stat__hint{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-kv{border-collapse:collapse;width:100%}#zbwc-app .zbwc-kv th{color:#50575e;font-weight:500;padding:6px 0;text-align:left;width:45%}#zbwc-app .zbwc-kv td{padding:6px 0}#zbwc-app .zbwc-pill{border-radius:999px;display:inline-block;font-size:11px;font-weight:600;line-height:1.8;padding:2px 10px}#zbwc-app .zbwc-pill.is-ok{background:#edfaef;color:var(--zbwc-ok)}#zbwc-app .zbwc-pill.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-pill.is-error{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-pill.is-info{background:#f0f6fc;color:var(--zbwc-accent)}#zbwc-app .zbwc-activity{margin:0}#zbwc-app .zbwc-activity__item{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;font-size:13px;gap:10px;padding:8px 0}#zbwc-app .zbwc-activity__cat{color:#757575;font-size:10px;min-width:70px;text-transform:uppercase}#zbwc-app .zbwc-activity__msg{flex:1}#zbwc-app .zbwc-activity__time{color:#a7aaad;font-size:11px}#zbwc-app .zbwc-dot{background:var(--zbwc-accent);border-radius:50%;height:8px;width:8px}#zbwc-app .zbwc-dot.is-error{background:var(--zbwc-error)}#zbwc-app .zbwc-dot.is-warn{background:var(--zbwc-warn)}#zbwc-app .zbwc-maptable{margin-top:8px}#zbwc-app .zbwc-maptable__toolbar{margin-bottom:10px}#zbwc-app .zbwc-maptable__actions{display:flex;gap:6px}#zbwc-app .zbwc-maptable__scope{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-maptable__add{margin-top:12px;max-width:360px}@media(max-width:782px){#zbwc-app .zbwc-maptable{overflow-x:auto}#zbwc-app table.zbwc-maptable{display:block}#zbwc-app .zbwc-maptable__toolbar .components-button{height:auto;min-height:36px;text-align:left;white-space:normal}}#zbwc-app .zbwc-logtable td{font-size:12px;vertical-align:top}#zbwc-app .zbwc-nowrap{white-space:nowrap}#zbwc-app .zbwc-errcell{color:var(--zbwc-error);font-size:12px;max-width:420px}#zbwc-app .zbwc-share-log{border-bottom:1px solid #f0f0f1;margin-bottom:14px;padding:0 0 14px}#zbwc-app .zbwc-share-log .components-toggle-control__help{max-width:640px}#zbwc-app .zbwc-filters{align-items:flex-end;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:12px}#zbwc-app .zbwc-filters .components-base-control{margin-bottom:0;min-width:160px}#zbwc-app .zbwc-pager{align-items:center;color:#50575e;display:flex;font-size:12px;gap:12px;justify-content:flex-end;margin-top:12px}#zbwc-app .zbwc-muted{color:#646970;font-size:13px}#zbwc-app .zbwc-actions{margin-top:12px}#zbwc-app .zbwc-upgrade-banner{border-radius:8px;margin:0 0 20px}#zbwc-app .zbwc-upgrade-banner .components-notice__content{margin:0;width:100%}#zbwc-app .zbwc-plans{align-items:start;display:grid;gap:24px;grid-template-columns:1fr 1fr;margin-top:8px}@media(max-width:900px){#zbwc-app .zbwc-plans{grid-template-columns:1fr}}#zbwc-app .zbwc-plans__card{background:#fff;border:1px solid var(--zbwc-border);border-radius:12px;padding:24px;position:relative}#zbwc-app .zbwc-plans__card.is-featured{border:2px solid var(--zbwc-accent);padding-top:30px}#zbwc-app .zbwc-plans__ribbon{background:var(--zbwc-accent);border-radius:999px;color:#fff;font-size:11px;font-weight:700;left:50%;letter-spacing:.5px;padding:4px 16px;position:absolute;top:0;transform:translate(-50%,-50%);white-space:nowrap}#zbwc-app .zbwc-plans__head{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-plans__head h3{font-size:20px;margin:0}#zbwc-app .zbwc-plans__current{background:#edfaef;border-radius:999px;color:#00611c;font-size:12px;font-weight:600;padding:4px 14px}#zbwc-app .zbwc-plans__price{margin:14px 0 18px}#zbwc-app .zbwc-plans__price strong{font-size:34px;font-weight:700;line-height:1}#zbwc-app .zbwc-plans__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plans__list li{align-items:flex-start;color:#1e1e1e;display:flex;font-size:14px;gap:10px;margin-bottom:10px}#zbwc-app .zbwc-plans__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plans__list li.is-no{color:#646970}#zbwc-app .zbwc-plans__list li.is-no .dashicons{color:#a7aaad}#zbwc-app .zbwc-plans__note{background:var(--zbwc-bg);border-radius:8px;color:#50575e;font-size:13px;margin:0;padding:14px 16px}#zbwc-app .zbwc-plans__cta.components-button.is-primary,#zbwc-app .zbwc-plans__cta.components-button.is-secondary{font-size:14px;font-weight:600;height:44px;justify-content:center;width:100%}#zbwc-app .zbwc-plans__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plans__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-planbar{align-items:center;background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-left:4px solid var(--zbwc-warn);border-radius:10px;display:flex;flex-wrap:wrap;gap:14px;margin:0 0 20px;padding:12px 16px}#zbwc-app .zbwc-planbar.is-urgent{border-color:var(--zbwc-warn);border-left-width:4px}#zbwc-app .zbwc-planbar__icon{align-items:center;background:var(--zbwc-bar-tint);border-radius:50%;color:var(--zbwc-bar-ink);display:flex;flex:none;height:32px;justify-content:center;width:32px}#zbwc-app .zbwc-planbar__text{align-items:baseline;display:flex;flex:1;flex-wrap:wrap;gap:10px;min-width:240px}#zbwc-app .zbwc-planbar__text strong{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-planbar__text span{color:#50575e;font-size:13px}#zbwc-app .zbwc-planbar__actions{align-items:center;display:flex;gap:8px;margin-left:auto}#zbwc-app .zbwc-plancard{background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-radius:10px;border-top:3px solid var(--zbwc-warn);max-width:420px;padding:20px 22px 18px}#zbwc-app .zbwc-plancard__chip{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);display:inline-block;font-size:11px;font-weight:700;letter-spacing:.4px;padding:3px 12px}#zbwc-app .zbwc-plancard__title{font-size:17px;margin:12px 0 6px}#zbwc-app .zbwc-plancard__desc{color:#50575e;font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-plancard__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plancard__list li{align-items:flex-start;color:#3c434a;display:flex;font-size:13px;gap:8px;margin-bottom:7px}#zbwc-app .zbwc-plancard__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plancard__cta.components-button.is-primary{font-weight:600;height:40px;justify-content:center;width:100%}#zbwc-app .zbwc-plancard__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plancard__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-quotachip{background:#edfaef;border-radius:999px;color:#0a6b22;display:inline-block;font-size:12px;font-weight:600;padding:3px 12px;white-space:nowrap}#zbwc-app .zbwc-quotachip.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-quotachip.is-full{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-quotanote{margin:0 0 16px}#zbwc-app .zbwc-pagehead{align-items:center;display:flex;gap:16px;justify-content:space-between}#zbwc-app .zbwc-pagehead__title{font-size:20px;font-weight:700;letter-spacing:-.01em;margin:0}#zbwc-app .zbwc-statbar{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:grid;grid-template-columns:repeat(5,1fr);overflow:hidden}#zbwc-app .zbwc-statbar__cell{align-items:flex-start;border-right:1px solid var(--zbwc-border);display:flex;flex-direction:column;gap:6px;padding:16px 18px}#zbwc-app .zbwc-statbar__cell:last-child{border-right:none}#zbwc-app .zbwc-statbar__label{color:#757575;font-size:11px;letter-spacing:.06em;text-transform:uppercase}#zbwc-app .zbwc-statbar__value{font-size:26px;font-variant-numeric:tabular-nums;font-weight:700;line-height:1}#zbwc-app .zbwc-statbar__value--sm{font-size:17px}#zbwc-app .zbwc-statbar__value.is-bad{color:var(--zbwc-error)}#zbwc-app .zbwc-statbar__sub{color:#757575;font-size:12px}@media(max-width:1100px){#zbwc-app .zbwc-statbar{grid-template-columns:repeat(3,1fr)}#zbwc-app .zbwc-statbar__cell:nth-child(3){border-right:none}}@media(max-width:600px){#zbwc-app .zbwc-statbar{grid-template-columns:1fr 1fr}}#zbwc-app .zbwc-masterbar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-left:4px solid var(--zbwc-ok);border-radius:8px;display:flex;gap:20px;padding:16px 18px}#zbwc-app .zbwc-masterbar.is-off{background:var(--zbwc-bg);border-left-color:var(--zbwc-warn)}#zbwc-app .zbwc-masterbar__text{display:flex;flex:1;flex-direction:column;gap:4px}#zbwc-app .zbwc-masterbar__title{align-items:center;display:flex;font-size:15px;font-weight:600;gap:10px}#zbwc-app .zbwc-masterbar__desc{color:#646970;font-size:13px}#zbwc-app .zbwc-flow{display:flex;flex-direction:column}#zbwc-app .zbwc-flow__row{border-bottom:1px solid #f0f0f1;padding:14px 0}#zbwc-app .zbwc-flow__row:last-child{border-bottom:none}#zbwc-app .zbwc-flow__row:first-child{padding-top:4px}#zbwc-app .zbwc-flow__row.is-disabled{opacity:.65}#zbwc-app .zbwc-flow__main{align-items:center;display:flex;gap:14px}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{align-items:center;display:flex;gap:10px;min-width:0}#zbwc-app .zbwc-flow__event{flex:0 0 46%}#zbwc-app .zbwc-flow__doc{flex:1}#zbwc-app .zbwc-flow__label{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-flow__arrow{color:#a7aaad;flex:none}#zbwc-app .zbwc-flow__badge{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);flex:none;font-size:11px;font-weight:700;letter-spacing:.4px;padding:2px 9px}#zbwc-app .zbwc-flow__switch{flex:none;margin-left:auto}#zbwc-app .zbwc-flow .components-base-control,#zbwc-app .zbwc-flow .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-flow__hint{color:#757575;font-size:12px;margin:6px 0 0;padding-left:2px}@media(max-width:782px){#zbwc-app .zbwc-flow__main{flex-wrap:wrap}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{flex:1 1 100%}#zbwc-app .zbwc-flow__arrow{display:none}}#zbwc-app .zbwc-note{align-items:flex-start;background:#fff;border:1px solid var(--zbwc-border);border-radius:10px;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-note p{color:#3c434a;font-size:14px;line-height:1.55;margin:0}#zbwc-app .zbwc-note .dashicons{align-items:center;border-radius:9px;display:flex;flex:none;font-size:19px;height:34px;justify-content:center;width:34px}#zbwc-app .zbwc-note.is-info .dashicons{background:var(--zbwc-plan-tint);color:var(--zbwc-accent)}#zbwc-app .zbwc-note.is-warn .dashicons{background:var(--zbwc-bar-tint);color:var(--zbwc-bar-ink)}#zbwc-app .zbwc-subnav{display:grid;gap:4px;grid-auto-columns:1fr;grid-auto-flow:column}#zbwc-app .zbwc-subnav__tab{background:transparent;border:none;border-radius:8px;color:#50575e;cursor:pointer;font-size:14px;font-weight:500;padding:10px 16px;text-align:center;transition:background-color .12s ease}#zbwc-app .zbwc-subnav__tab:hover{background:rgba(0,0,0,.03)}#zbwc-app .zbwc-subnav__tab.is-active{background:#e4e5e7;color:#1e1e1e;font-weight:600}#zbwc-app .zbwc-subnav__tab:focus-visible{outline:2px solid var(--zbwc-accent);outline-offset:2px}@media(max-width:782px){#zbwc-app .zbwc-subnav{grid-auto-columns:auto;grid-auto-flow:row}}#zbwc-app .zbwc-savebar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;bottom:0;box-shadow:0 -2px 10px rgba(0,0,0,.06);display:flex;justify-content:space-between;margin-top:8px;padding:12px 16px;position:sticky}#zbwc-app .zbwc-savebar__msg{font-weight:500}#zbwc-app .zbwc-savebar__actions{display:flex;gap:8px}#zbwc-app .zbwc-code{background:#1e1e1e;border-radius:6px;color:#7fd;display:block;font-size:12px;padding:10px 12px;word-break:break-all}#zbwc-app .zbwc-linkbtn,#zbwc-app .zbwc-loading{align-items:center;display:inline-flex;gap:8px}#zbwc-app .zbwc-linkbtn{background:none;border:none;color:var(--zbwc-accent);cursor:pointer}#zbwc-app .zbwc-loading{color:#757575;padding:30px}#zbwc-app .zbwc-orglist__row{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;justify-content:space-between;padding:8px 0}#zbwc-app .zbwc-subhead{border-bottom:1px solid #f0f0f1;color:#757575;font-size:11px;letter-spacing:.5px;margin:22px 0 10px;padding-bottom:5px}#zbwc-app .zbwc-onboarding{--ob-ink:#1a1a1a;--ob-muted:#656a70;--ob-line:#e3e5e7;--ob-soft:#f7f8f8;margin:0 auto;max-width:1120px;padding-bottom:60px}#zbwc-app .zbwc-onboarding__bar{align-items:center;display:flex;gap:10px;padding:4px 0 20px}#zbwc-app .zbwc-onboarding__logo.dashicons{color:var(--zbwc-accent);font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-onboarding__brand{font-size:16px;font-weight:700;letter-spacing:-.01em}#zbwc-app .zbwc-onboarding__titlerow{align-items:center;display:flex;gap:16px;justify-content:space-between;margin-bottom:16px}#zbwc-app .zbwc-onboarding__title{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0}#zbwc-app .zbwc-onboarding__chip{background:#e9eaeb;border-radius:999px;color:#50575e;font-size:12px;font-weight:500;padding:5px 14px}#zbwc-app .zbwc-onboarding__card{background:#fff;border:1px solid var(--ob-line);border-radius:16px;display:grid;grid-template-columns:minmax(0,1fr) 330px;overflow:hidden}#zbwc-app .zbwc-onboarding__panel{padding:34px 38px 38px}#zbwc-app .zbwc-onboarding__aside{background:var(--ob-soft);border-left:1px solid var(--ob-line);padding:32px 28px}@media(max-width:960px){#zbwc-app .zbwc-onboarding__card{grid-template-columns:1fr}#zbwc-app .zbwc-onboarding__panel{padding:26px 22px 30px}#zbwc-app .zbwc-onboarding__aside{border-left:none;border-top:1px solid var(--ob-line)}}#zbwc-app .zbwc-ob-eyebrow{color:var(--ob-muted);font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-ob-heading{color:var(--ob-ink);font-size:30px;font-weight:700;letter-spacing:-.02em;line-height:1.18;margin:0 0 12px}#zbwc-app .zbwc-ob-lead{color:#4a5056;font-size:14.5px;line-height:1.6;margin:0 0 26px;max-width:46em}#zbwc-app .zbwc-ob-footnote{color:var(--ob-muted);font-size:12.5px;line-height:1.6;margin:18px 0 0}#zbwc-app .zbwc-ob-quiet{margin-top:16px}#zbwc-app .zbwc-ob-icon{align-items:center;background:var(--ob-soft);border:1px solid var(--ob-line);border-radius:11px;color:var(--ob-ink);display:flex;flex:none;height:42px;justify-content:center;width:42px}#zbwc-app .zbwc-ob-icon .dashicons{font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-features{list-style:none;margin:0 0 30px;padding:0}#zbwc-app .zbwc-ob-feature{display:flex;gap:16px;margin-bottom:22px}#zbwc-app .zbwc-ob-feature h3{font-size:15px;font-weight:600;margin:0 0 4px}#zbwc-app .zbwc-ob-feature p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:0}#zbwc-app .zbwc-ob-aside__title{font-size:14px;font-weight:700;margin:0}#zbwc-app .zbwc-ob-progress{list-style:none;margin:18px 0 0;padding:0}#zbwc-app .zbwc-ob-progress__item{display:flex;gap:14px;padding-bottom:22px;position:relative}#zbwc-app .zbwc-ob-progress__item:last-child{padding-bottom:0}#zbwc-app .zbwc-ob-progress__item:before{background:#dcdee0;bottom:6px;content:"";left:15px;position:absolute;top:34px;width:1px}#zbwc-app .zbwc-ob-progress__item:last-child:before{display:none}#zbwc-app .zbwc-ob-progress__num{align-items:center;background:#fff;border:1px solid #d5d7d9;border-radius:50%;color:#8c8f94;display:flex;flex:none;font-size:12px;font-weight:600;height:31px;justify-content:center;position:relative;width:31px}#zbwc-app .zbwc-ob-progress__num .dashicons{font-size:18px;height:18px;width:18px}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__num,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__num{background:var(--ob-ink);border-color:var(--ob-ink);color:#fff}#zbwc-app .zbwc-ob-progress__text{display:flex;flex-direction:column;gap:3px;padding-top:4px}#zbwc-app .zbwc-ob-progress__text strong{color:#8c8f94;font-size:13.5px;font-weight:600}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__text strong,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__text strong{color:var(--ob-ink)}#zbwc-app .zbwc-ob-progress__text span{color:var(--ob-muted);font-size:12.5px;line-height:1.5}#zbwc-app .zbwc-ob-facts{border-top:1px solid var(--ob-line);list-style:none;margin:22px 0 0;padding:18px 0 0}#zbwc-app .zbwc-ob-facts li{color:var(--ob-muted);font-size:12.5px;line-height:1.55;margin:0 0 10px;padding-left:14px;position:relative}#zbwc-app .zbwc-ob-facts li:before{content:"·";left:4px;position:absolute}#zbwc-app .zbwc-ob-count{border-top:1px solid var(--ob-line);font-size:13px;font-weight:600;margin:22px 0 0;padding-top:18px}#zbwc-app .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin-top:14px;padding:14px 15px}#zbwc-app .zbwc-ob-note p{font-size:12.5px;line-height:1.55;margin:0}#zbwc-app .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-ob-note.is-warn{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-ob-note.is-plan{background:#edfaef;color:#0a6b22}#zbwc-app .zbwc-ob-badge{border-radius:999px;flex:none;font-size:12px;font-weight:600;padding:4px 12px;white-space:nowrap}#zbwc-app .zbwc-ob-badge.is-ok{background:#d8f5e3;color:#0a6b2f}#zbwc-app .zbwc-ob-badge.is-blue{background:#e4f0fb;color:#1c5a99}#zbwc-app .zbwc-ob-badge.is-muted{background:#eceded;color:#646970}#zbwc-app .zbwc-ob-option{border:1px solid var(--ob-line);border-radius:12px;padding:20px 22px}#zbwc-app .zbwc-ob-option.is-done{background:var(--ob-soft)}#zbwc-app .zbwc-ob-option__head{align-items:center;display:flex;gap:12px;justify-content:space-between}#zbwc-app .zbwc-ob-option__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-option__desc{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:8px 0 0}#zbwc-app .zbwc-ob-option .zbwc-kv{margin-top:10px}#zbwc-app .zbwc-ob-howto{color:#3c434a;font-size:13.5px;line-height:1.7;margin:18px 0 0;padding-left:18px}#zbwc-app .zbwc-ob-howto li{margin-bottom:10px}#zbwc-app .zbwc-ob-copyrow{align-items:center;display:flex;gap:8px;margin-top:8px}#zbwc-app .zbwc-ob-copyrow .zbwc-code{flex:1;margin:0}#zbwc-app .zbwc-ob-fields{border-top:1px solid var(--ob-line);display:grid;gap:18px;margin-top:20px;padding-top:20px}#zbwc-app .zbwc-ob-fields .components-base-control{margin-bottom:0}#zbwc-app .zbwc-ob-actions{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}#zbwc-app .zbwc-ob-actions .components-button .dashicons{font-size:17px;height:17px;margin-right:6px;width:17px}#zbwc-app .zbwc-ob-divider{background:var(--ob-line);height:1px;margin:26px 0 18px}#zbwc-app .zbwc-ob-disclosure{align-items:center;background:none;border:none;color:var(--zbwc-accent);cursor:pointer;display:inline-flex;font-size:13.5px;font-weight:500;gap:6px;padding:0}#zbwc-app .zbwc-ob-disclosure .dashicons{font-size:16px;height:16px;width:16px}#zbwc-app .zbwc-ob-advanced{background:var(--ob-soft);border-radius:12px;margin-top:16px;padding:18px 20px}#zbwc-app .zbwc-ob-advanced p{color:var(--ob-muted);font-size:13px;line-height:1.6;margin:0 0 14px}#zbwc-app .zbwc-ob-advanced .components-base-control{margin-bottom:14px}#zbwc-app .zbwc-ob-resource{border:1px solid var(--ob-line);border-radius:12px;margin-bottom:14px;transition:border-color .12s ease,box-shadow .12s ease}#zbwc-app .zbwc-ob-resource.is-on{border-color:#c4c7ca;box-shadow:0 1px 2px rgba(0,0,0,.04)}#zbwc-app .zbwc-ob-resource__main{align-items:flex-start;cursor:pointer;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-ob-resource__box{cursor:default;display:flex;padding-top:3px}#zbwc-app .zbwc-ob-resource .components-base-control,#zbwc-app .zbwc-ob-resource .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-ob-resource__body{flex:1}#zbwc-app .zbwc-ob-resource__head{align-items:center;display:flex;flex-wrap:wrap;gap:10px}#zbwc-app .zbwc-ob-resource__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-resource__body p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:5px 0 0}#zbwc-app .zbwc-ob-resource__prefs{cursor:default;display:grid;gap:18px;grid-template-columns:1fr 1fr;margin-top:16px}@media(max-width:782px){#zbwc-app .zbwc-ob-resource__prefs{grid-template-columns:1fr}}#zbwc-app .zbwc-ob-inline-notice.components-notice{border-radius:10px;margin:4px 0 0}#zbwc-app .zbwc-ob-done{background:#fff;border:1px solid var(--ob-line);border-radius:16px;margin:0 auto;max-width:620px;padding:44px 44px 36px;text-align:center}#zbwc-app .zbwc-ob-done__check{align-items:center;background:#e2f5e9;border-radius:50%;display:inline-flex;height:76px;justify-content:center;margin-bottom:20px;width:76px}#zbwc-app .zbwc-ob-done__check .dashicons{align-items:center;background:#2f7a48;border-radius:50%;color:#fff;display:flex;font-size:34px;height:54px;justify-content:center;width:54px}#zbwc-app .zbwc-ob-done h2{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0 0 10px}#zbwc-app .zbwc-ob-done .zbwc-ob-lead{margin:0 auto 26px;max-width:34em}#zbwc-app .zbwc-ob-done .zbwc-ob-note{text-align:left}#zbwc-app .zbwc-ob-summary{border:1px solid var(--ob-line);border-radius:12px;list-style:none;margin:0;overflow:hidden;padding:0;text-align:left}#zbwc-app .zbwc-ob-summary__row{align-items:center;border-bottom:1px solid var(--ob-line);display:flex;gap:12px;padding:15px 18px}#zbwc-app .zbwc-ob-summary__row:last-child{border-bottom:none}#zbwc-app .zbwc-ob-summary__icon{display:flex}#zbwc-app .zbwc-ob-summary__icon .dashicons{color:#2f7a48;font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-summary__icon.is-muted .dashicons{color:#a7aaad}#zbwc-app .zbwc-ob-summary__text{display:flex;flex:1;flex-direction:column;gap:2px}#zbwc-app .zbwc-ob-summary__text strong{font-size:14px}#zbwc-app .zbwc-ob-summary__text span{color:var(--ob-muted);font-size:12.5px}#zbwc-app .zbwc-ob-done__actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:24px}#zbwc-app .zbwc-ob-nav{align-items:center;display:flex;justify-content:space-between;margin-top:22px}#zbwc-app .zbwc-onboarding .components-button.is-primary{background:var(--ob-ink);border-color:var(--ob-ink);border-radius:8px;box-shadow:none;font-size:13.5px;font-weight:600;height:42px;padding:0 20px}#zbwc-app .zbwc-onboarding .components-button.is-primary:focus:not(:disabled),#zbwc-app .zbwc-onboarding .components-button.is-primary:hover:not(:disabled){background:#000;border-color:#000;color:#fff}#zbwc-app .zbwc-onboarding .components-button.is-primary:disabled,#zbwc-app .zbwc-onboarding .components-button.is-primary[aria-disabled=true]{background:#e6e7e8;border-color:#e6e7e8;color:#a7aaad}#zbwc-app .zbwc-onboarding .components-button.is-secondary{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #d5d7d9;color:var(--ob-ink);font-size:13.5px;font-weight:600;height:42px;padding:0 18px}#zbwc-app .zbwc-onboarding .components-button.is-secondary:hover:not(:disabled){background:var(--ob-soft);box-shadow:inset 0 0 0 1px #b9bcbf;color:var(--ob-ink)}#zbwc-app .zbwc-onboarding .components-button.is-tertiary{border-radius:8px;font-weight:600;height:42px;padding:0 14px}#zbwc-app .zbwc-toasts{bottom:20px;left:160px;position:fixed;z-index:100000}@media(max-width:782px){#zbwc-app .zbwc-toasts{left:16px;right:16px;width:auto}}.zbwc-upgrade-modal.components-modal__frame{border-radius:12px;max-width:32rem;position:relative;width:calc(100% - 32px)}.zbwc-upgrade-modal .components-modal__header{border-bottom:none;height:auto;justify-content:center;padding:28px 32px 0}.zbwc-upgrade-modal .components-modal__header-heading-container{justify-content:center}.zbwc-upgrade-modal .components-modal__header-heading{font-size:22px;font-weight:700;line-height:1.3;text-align:center}.zbwc-upgrade-modal .components-modal__header .components-button.has-icon{margin:0;position:absolute;right:12px;top:10px}.zbwc-upgrade-modal .components-modal__content{padding:0 32px 28px}.zbwc-upgrade-modal .components-modal__content:before{content:none}.zbwc-upgrade-modal__body{text-align:center}.zbwc-upgrade-modal__lead{color:#3c434a;font-size:14px;line-height:1.6;margin:12px auto 0;max-width:34rem}.zbwc-upgrade-modal__note{color:#646970;font-size:13px;line-height:1.6;margin:8px auto 0;max-width:34rem}.zbwc-upgrade-modal__offer{align-items:baseline;display:flex;gap:8px;justify-content:center;margin:20px 0 16px}.zbwc-upgrade-modal__plan{font-size:15px;font-weight:600}.zbwc-upgrade-modal__price{font-size:30px;font-weight:700;line-height:1}.zbwc-upgrade-modal__per{color:#646970;font-size:14px;font-weight:400}.zbwc-upgrade-modal__cta.components-button.is-primary{border-radius:8px;display:flex;font-size:15px;font-weight:600;height:48px;justify-content:center;width:100%}.zbwc-upgrade-modal__later.components-button{color:#50575e;display:block;margin:14px auto 0;text-decoration:underline}.zbwc-upgrade-modal__trust{align-items:center;border-top:1px solid #e0e0e0;color:#646970;display:flex;font-size:13px;gap:6px;justify-content:center;margin:22px 0 0;padding-top:18px}.zbwc-upgrade-modal__trust .dashicons{font-size:16px;height:16px;width:16px}.zbwc-org-modal.components-modal__frame{border-radius:14px;max-width:480px;width:calc(100% - 32px)}.zbwc-org-modal .components-modal__header-heading{font-size:17px;font-weight:600}.zbwc-org-modal .components-modal__content{padding:2px 28px 24px}.zbwc-org-modal__lead{color:#646970;font-size:13px;line-height:1.6;margin:0 0 16px}.zbwc-org-modal__loading{align-items:center;color:#646970;display:flex;gap:8px;padding:16px 0 8px}.zbwc-org-modal__loading .components-spinner{margin:0}.zbwc-org-modal__list{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow-y:auto}.zbwc-org-modal__row{align-items:center;background:#fff;border:1px solid #dcdcde;border-radius:10px;color:inherit;cursor:pointer;display:flex;font:inherit;gap:12px;padding:12px 14px;text-align:left;transition:border-color .12s ease,box-shadow .12s ease;width:100%}.zbwc-org-modal__row:hover{border-color:#8c8f94}.zbwc-org-modal__row:focus-visible{outline:2px solid var(--wp-admin-theme-color,#3858e9);outline-offset:1px}.zbwc-org-modal__row.is-selected{border-color:var(--wp-admin-theme-color,#3858e9);box-shadow:0 0 0 1px var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__icon{background:#f0f0f1;border-radius:9px;color:#50575e;display:grid;flex:none;height:36px;place-items:center;width:36px}.zbwc-org-modal__icon .dashicons{font-size:18px;height:18px;width:18px}.zbwc-org-modal__name{display:flex;flex:1;flex-direction:column;gap:1px;min-width:0}.zbwc-org-modal__name strong{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zbwc-org-modal__name span{color:#646970;font-size:12px}.zbwc-org-modal__current{background:#f0f0f1;border-radius:999px;color:#50575e;flex:none;font-size:11.5px;font-weight:600;padding:2px 10px}.zbwc-org-modal__tick{color:transparent;flex:none}.zbwc-org-modal__tick.is-on{color:var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__retry{margin-top:12px}.zbwc-org-modal__switch{display:flex;flex-direction:column;gap:12px;margin-top:16px}.zbwc-org-modal__switch .components-notice{margin:0}.zbwc-org-modal__note{color:#646970;font-size:12.5px;line-height:1.55;margin:0}.zbwc-org-modal__footer{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-connbox{align-items:center;display:flex;flex-wrap:wrap;gap:14px}#zbwc-app .zbwc-connbox__icon{background:#edfaef;border-radius:11px;color:#0a6b2f;display:grid;flex:none;height:44px;place-items:center;width:44px}#zbwc-app .zbwc-connbox__icon .dashicons{font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-connbox.is-warn .zbwc-connbox__icon{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-connbox__body{display:flex;flex:1;flex-direction:column;gap:3px;min-width:220px}#zbwc-app .zbwc-connbox__name{font-size:15px;font-weight:600;line-height:1.2}#zbwc-app .zbwc-connbox__meta{align-items:center;color:#646970;display:flex;flex-wrap:wrap;font-size:12.5px;gap:6px 10px}#zbwc-app .zbwc-connbox__meta code{background:#f0f0f1;border-radius:4px;font-size:11.5px;padding:1px 6px}#zbwc-app .zbwc-connbox__actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}#zbwc-app .zbwc-connbox+.components-notice{margin:12px 0 0}.zbwc-org-modal__list.is-compact{max-height:176px}#zbwc-app .zbwc-copyrow{margin:10px 0 2px}#zbwc-app .zbwc-connfields{display:flex;flex-direction:column;gap:16px;margin-top:18px}#zbwc-app .zbwc-invnotice.components-notice{margin:12px 0 0}#zbwc-app .zbwc-invnotice .components-button.is-link{font-size:inherit}#zbwc-app .zbwc-invnotice__lead{font-weight:600;margin:0 0 8px}#zbwc-app .zbwc-invnotice__steps{margin:0 0 10px;padding-left:20px}#zbwc-app .zbwc-invnotice__steps li{margin:4px 0}#zbwc-app .zbwc-invnotice__actions{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-page .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin:0 0 14px;padding:14px 15px}#zbwc-app .zbwc-page .zbwc-ob-note p{font-size:13px;line-height:1.55;margin:0}#zbwc-app .zbwc-page .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-page .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-quiet.components-button{margin-top:18px}#zbwc-app .zbwc-whpicker{align-items:flex-start;display:flex;gap:10px;max-width:560px}#zbwc-app .zbwc-whpicker .components-base-control{flex:1}#zbwc-app .zbwc-whpicker .components-button{margin-top:23px}#zbwc-app .zbwc-whwarn.components-notice{margin:0 0 14px}.zbwc-guide-modal.components-modal__frame{border-radius:14px;max-width:640px;width:calc(100% - 32px)}.zbwc-guide-modal .components-modal__content{padding:2px 28px 24px}.zbwc-guide-modal__lede{color:#646970;font-size:13.5px;line-height:1.6;margin:0 0 16px}.zbwc-guide-modal__steps{margin:0;padding-left:22px}.zbwc-guide-modal__steps li{margin:0 0 14px}.zbwc-guide-modal__steps strong{font-size:14px}.zbwc-guide-modal__steps p{color:#50575e;font-size:13.5px;line-height:1.55;margin:3px 0 0}.zbwc-guide-modal__uri{background:#f0f2f5;border-radius:8px;display:block;font-size:12px;margin-top:8px;padding:8px 10px;word-break:break-all}.zbwc-guide-modal__h{font-size:14px;margin:20px 0 8px}.zbwc-guide-modal__table{border-collapse:collapse;font-size:13px;width:100%}.zbwc-guide-modal__table td{border-bottom:1px solid #eceef1;padding:5px 10px 5px 0}.zbwc-guide-modal__table code{background:#f0f2f5;border-radius:4px;font-size:12px;padding:1px 6px}.zbwc-guide-modal__fixes{font-size:13.5px;margin:0;padding-left:20px}.zbwc-guide-modal__fixes li{color:#50575e;margin:6px 0}.zbwc-guide-modal__footer{display:flex;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-ob-guidelink.components-button{font-weight:600;margin:-6px 0 20px}#zbwc-app .zbwc-rule{border:0;border-top:1px solid #e0e2e6;margin:20px 0 14px}#zbwc-app .zbwc-subhead{color:#646970;font-size:12px;font-weight:600;letter-spacing:.06em;margin:0 0 10px;text-transform:uppercase}#zbwc-app .zbwc-activity{margin:0 0 16px}#zbwc-app .zbwc-activity__task{align-items:center;background:#fff;border:1px solid #e0e2e6;border-left:3px solid #2271b1;border-radius:8px;display:grid;gap:14px;grid-template-columns:230px minmax(120px,1fr) 3.4em minmax(0,34%);margin-bottom:6px;max-height:80px;overflow:hidden;padding:9px 14px;transition:opacity .6s ease,max-height .6s ease,padding .6s ease,margin .6s ease,border-color .3s ease}#zbwc-app .zbwc-activity__task.is-leaving{border-bottom-width:0;border-top-width:0;margin-bottom:0;max-height:0;opacity:0;padding-bottom:0;padding-top:0}#zbwc-app .zbwc-activity__task.is-done{border-left-color:#00a32a}#zbwc-app .zbwc-activity__task.is-failed{border-left-color:#d63638}#zbwc-app .zbwc-activity__label{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__bar{background:#e6e8eb;border-radius:999px;height:6px;overflow:hidden}#zbwc-app .zbwc-activity__fill{background:#2271b1;border-radius:999px;height:100%;transition:width .4s ease;width:0}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__fill{background:#00a32a}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__fill{background:#d63638}#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:zbwc-activity-slide 1.4s ease-in-out infinite;width:35%}#zbwc-app .zbwc-activity__pct{color:#1e1e1e;font-size:13px;font-variant-numeric:tabular-nums;font-weight:600;text-align:right}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__pct{color:#00a32a}#zbwc-app .zbwc-activity__meta{color:#646970;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__task.is-failed{max-height:160px}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__meta{white-space:normal}@media(max-width:782px){#zbwc-app .zbwc-activity__task{gap:6px 10px;grid-template-areas:"label pct" "bar bar" "meta meta";grid-template-columns:minmax(0,1fr) auto;max-height:160px}#zbwc-app .zbwc-activity__label{grid-area:label;white-space:normal}#zbwc-app .zbwc-activity__pct{grid-area:pct}#zbwc-app .zbwc-activity__bar{grid-area:bar}#zbwc-app .zbwc-activity__meta{grid-area:meta;white-space:normal}#zbwc-app .zbwc-activity__label{-ms-grid-column:1;-ms-grid-row:1}#zbwc-app .zbwc-activity__pct{-ms-grid-column:3;-ms-grid-row:1}#zbwc-app .zbwc-activity__bar{-ms-grid-column:1;-ms-grid-row:3;-ms-grid-column-span:3}#zbwc-app .zbwc-activity__meta{-ms-grid-column:1;-ms-grid-row:5;-ms-grid-column-span:3}#zbwc-app .zbwc-failtable,#zbwc-app .zbwc-failtable tbody,#zbwc-app .zbwc-logtable,#zbwc-app .zbwc-logtable tbody{display:block}#zbwc-app .zbwc-failtable thead,#zbwc-app .zbwc-logtable thead{display:none}#zbwc-app .zbwc-failtable tr,#zbwc-app .zbwc-logtable tr{align-items:center;display:flex;flex-wrap:wrap;gap:6px 10px;padding:10px 12px}#zbwc-app .zbwc-failtable td,#zbwc-app .zbwc-logtable td{display:block;padding:0}#zbwc-app .zbwc-failtable .zbwc-errcell,#zbwc-app .zbwc-failtable .zbwc-maptable__actions,#zbwc-app .zbwc-logtable__msg{flex-basis:100%;max-width:none}#zbwc-app .zbwc-logtable__res{color:#646970;flex-basis:100%}#zbwc-app .zbwc-logtable__res:empty{display:none}#zbwc-app .zbwc-failtable code{overflow-wrap:anywhere}#zbwc-app .zbwc-failtable__attempts:before{color:#646970;content:attr(data-label) ": "}}@keyframes zbwc-activity-slide{0%{margin-left:-35%}to{margin-left:100%}}@media(prefers-reduced-motion:reduce){#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:none;opacity:.55;width:100%}#zbwc-app .zbwc-activity__fill,#zbwc-app .zbwc-activity__task{transition:none}}
     1#zbwc-app{--zbwc-accent:#2271b1;--zbwc-border:#dcdcde;--zbwc-bg:#f6f7f7;--zbwc-ok:#00a32a;--zbwc-warn:#dba617;--zbwc-error:#d63638;--zbwc-plan-soft:#f0f6fc;--zbwc-plan-line:#c5d9ed;--zbwc-plan-tint:#dfebf7;--zbwc-bar-soft:#fdf8e3;--zbwc-bar-line:#e6d18d;--zbwc-bar-tint:#f7e8b4;--zbwc-bar-ink:#7a5d0a;color:#1e1e1e;margin:20px 20px 0 0}#zbwc-app .zbwc-boot{color:#757575;padding:40px}#zbwc-app .zbwc-nav{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:20px;padding:10px 16px}#zbwc-app .zbwc-nav__brand{align-items:center;display:flex;font-size:15px;font-weight:600;gap:8px}#zbwc-app .zbwc-nav__logo{color:var(--zbwc-accent)}#zbwc-app .zbwc-nav__sub{color:#757575;font-weight:400}#zbwc-app .zbwc-nav__tabs{display:flex;flex:1;flex-wrap:wrap;gap:4px}#zbwc-app .zbwc-nav__tab{background:transparent;border:none;border-radius:6px;color:#50575e;cursor:pointer;font-size:13px;padding:8px 14px}#zbwc-app .zbwc-nav__tab:hover{background:var(--zbwc-bg)}#zbwc-app .zbwc-nav__tab.is-active{background:var(--zbwc-accent);color:#fff}#zbwc-app .zbwc-layout.has-aside{align-items:start;display:grid;gap:24px;grid-template-columns:minmax(0,1fr) 300px}#zbwc-app .zbwc-aside{position:sticky;top:42px}#zbwc-app .zbwc-aside .zbwc-plancard{max-width:none}@media(max-width:1200px){#zbwc-app .zbwc-layout.has-aside{display:block}#zbwc-app .zbwc-aside{display:none}}#zbwc-app .zbwc-page{display:flex;flex-direction:column;gap:20px;padding-bottom:80px}#zbwc-app .zbwc-grid{display:grid;gap:16px}#zbwc-app .zbwc-grid--2{grid-template-columns:1fr 1fr}#zbwc-app .zbwc-grid--stats{grid-template-columns:repeat(4,1fr)}@media(max-width:960px){#zbwc-app .zbwc-grid--2,#zbwc-app .zbwc-grid--stats{grid-template-columns:1fr 1fr}}@media(max-width:782px){#zbwc-app .zbwc-grid--2{grid-template-columns:minmax(0,1fr)}}#zbwc-app .zbwc-section{border-radius:8px}#zbwc-app .zbwc-section__header{align-items:flex-start}#zbwc-app .zbwc-section__title{font-size:14px;margin:0}#zbwc-app .zbwc-section__desc{color:#757575;font-size:12px;margin:2px 0 0}@media(max-width:782px){#zbwc-app .zbwc-section__header{flex-wrap:wrap;row-gap:8px}#zbwc-app .zbwc-section__heading{flex:1 1 200px;min-width:0}}#zbwc-app .zbwc-section .components-base-control{margin-bottom:16px}#zbwc-app .zbwc-stat{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;padding:16px;text-align:center}#zbwc-app .zbwc-stat__value{color:var(--zbwc-accent);font-size:28px;font-weight:700}#zbwc-app .zbwc-stat__label{color:#757575;font-size:12px;margin-top:4px}#zbwc-app .zbwc-stat__hint{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-kv{border-collapse:collapse;width:100%}#zbwc-app .zbwc-kv th{color:#50575e;font-weight:500;padding:6px 0;text-align:left;width:45%}#zbwc-app .zbwc-kv td{padding:6px 0}#zbwc-app .zbwc-pill{border-radius:999px;display:inline-block;font-size:11px;font-weight:600;line-height:1.8;padding:2px 10px}#zbwc-app .zbwc-pill.is-ok{background:#edfaef;color:var(--zbwc-ok)}#zbwc-app .zbwc-pill.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-pill.is-error{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-pill.is-info{background:#f0f6fc;color:var(--zbwc-accent)}#zbwc-app .zbwc-activity{margin:0}#zbwc-app .zbwc-activity__item{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;font-size:13px;gap:10px;padding:8px 0}#zbwc-app .zbwc-activity__cat{color:#757575;font-size:10px;min-width:70px;text-transform:uppercase}#zbwc-app .zbwc-activity__msg{flex:1}#zbwc-app .zbwc-activity__time{color:#a7aaad;font-size:11px}#zbwc-app .zbwc-dot{background:var(--zbwc-accent);border-radius:50%;height:8px;width:8px}#zbwc-app .zbwc-dot.is-error{background:var(--zbwc-error)}#zbwc-app .zbwc-dot.is-warn{background:var(--zbwc-warn)}#zbwc-app .zbwc-maptable{margin-top:8px}#zbwc-app .zbwc-maptable__toolbar{margin-bottom:10px}#zbwc-app .zbwc-maptable__actions{display:flex;gap:6px}#zbwc-app .zbwc-maptable__scope{color:#8c8f94;font-size:11px;margin-top:2px}#zbwc-app .zbwc-maptable__add{margin-top:12px;max-width:360px}@media(max-width:782px){#zbwc-app .zbwc-maptable{overflow-x:auto}#zbwc-app table.zbwc-maptable{display:block}#zbwc-app .zbwc-maptable__toolbar .components-button{height:auto;min-height:36px;text-align:left;white-space:normal}}#zbwc-app .zbwc-logtable td{font-size:12px;vertical-align:top}#zbwc-app .zbwc-nowrap{white-space:nowrap}#zbwc-app .zbwc-errcell{color:var(--zbwc-error);font-size:12px;max-width:420px}#zbwc-app .zbwc-filters{align-items:flex-end;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:12px}#zbwc-app .zbwc-filters .components-base-control{margin-bottom:0;min-width:160px}#zbwc-app .zbwc-pager{align-items:center;color:#50575e;display:flex;font-size:12px;gap:12px;justify-content:flex-end;margin-top:12px}#zbwc-app .zbwc-muted{color:#646970;font-size:13px}#zbwc-app .zbwc-actions{margin-top:12px}#zbwc-app .zbwc-upgrade-banner{border-radius:8px;margin:0 0 20px}#zbwc-app .zbwc-upgrade-banner .components-notice__content{margin:0;width:100%}#zbwc-app .zbwc-plans{align-items:start;display:grid;gap:24px;grid-template-columns:1fr 1fr;margin-top:8px}@media(max-width:900px){#zbwc-app .zbwc-plans{grid-template-columns:1fr}}#zbwc-app .zbwc-plans__card{background:#fff;border:1px solid var(--zbwc-border);border-radius:12px;padding:24px;position:relative}#zbwc-app .zbwc-plans__card.is-featured{border:2px solid var(--zbwc-accent);padding-top:30px}#zbwc-app .zbwc-plans__ribbon{background:var(--zbwc-accent);border-radius:999px;color:#fff;font-size:11px;font-weight:700;left:50%;letter-spacing:.5px;padding:4px 16px;position:absolute;top:0;transform:translate(-50%,-50%);white-space:nowrap}#zbwc-app .zbwc-plans__head{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-plans__head h3{font-size:20px;margin:0}#zbwc-app .zbwc-plans__current{background:#edfaef;border-radius:999px;color:#00611c;font-size:12px;font-weight:600;padding:4px 14px}#zbwc-app .zbwc-plans__price{margin:14px 0 18px}#zbwc-app .zbwc-plans__price strong{font-size:34px;font-weight:700;line-height:1}#zbwc-app .zbwc-plans__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plans__list li{align-items:flex-start;color:#1e1e1e;display:flex;font-size:14px;gap:10px;margin-bottom:10px}#zbwc-app .zbwc-plans__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plans__list li.is-no{color:#646970}#zbwc-app .zbwc-plans__list li.is-no .dashicons{color:#a7aaad}#zbwc-app .zbwc-plans__note{background:var(--zbwc-bg);border-radius:8px;color:#50575e;font-size:13px;margin:0;padding:14px 16px}#zbwc-app .zbwc-plans__cta.components-button.is-primary,#zbwc-app .zbwc-plans__cta.components-button.is-secondary{font-size:14px;font-weight:600;height:44px;justify-content:center;width:100%}#zbwc-app .zbwc-plans__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plans__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-planbar{align-items:center;background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-left:4px solid var(--zbwc-warn);border-radius:10px;display:flex;flex-wrap:wrap;gap:14px;margin:0 0 20px;padding:12px 16px}#zbwc-app .zbwc-planbar.is-urgent{border-color:var(--zbwc-warn);border-left-width:4px}#zbwc-app .zbwc-planbar__icon{align-items:center;background:var(--zbwc-bar-tint);border-radius:50%;color:var(--zbwc-bar-ink);display:flex;flex:none;height:32px;justify-content:center;width:32px}#zbwc-app .zbwc-planbar__text{align-items:baseline;display:flex;flex:1;flex-wrap:wrap;gap:10px;min-width:240px}#zbwc-app .zbwc-planbar__text strong{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-planbar__text span{color:#50575e;font-size:13px}#zbwc-app .zbwc-planbar__actions{align-items:center;display:flex;gap:8px;margin-left:auto}#zbwc-app .zbwc-plancard{background:var(--zbwc-bar-soft);border:1px solid var(--zbwc-bar-line);border-radius:10px;border-top:3px solid var(--zbwc-warn);max-width:420px;padding:20px 22px 18px}#zbwc-app .zbwc-plancard__chip{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);display:inline-block;font-size:11px;font-weight:700;letter-spacing:.4px;padding:3px 12px}#zbwc-app .zbwc-plancard__title{font-size:17px;margin:12px 0 6px}#zbwc-app .zbwc-plancard__desc{color:#50575e;font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-plancard__list{list-style:none;margin:0 0 18px;padding:0}#zbwc-app .zbwc-plancard__list li{align-items:flex-start;color:#3c434a;display:flex;font-size:13px;gap:8px;margin-bottom:7px}#zbwc-app .zbwc-plancard__list .dashicons{color:var(--zbwc-ok);flex:none}#zbwc-app .zbwc-plancard__cta.components-button.is-primary{font-weight:600;height:40px;justify-content:center;width:100%}#zbwc-app .zbwc-plancard__trust{align-items:center;color:#646970;display:flex;font-size:12px;gap:6px;justify-content:center;margin:12px 0 0}#zbwc-app .zbwc-plancard__trust .dashicons{font-size:15px;height:15px;width:15px}#zbwc-app .zbwc-quotachip{background:#edfaef;border-radius:999px;color:#0a6b22;display:inline-block;font-size:12px;font-weight:600;padding:3px 12px;white-space:nowrap}#zbwc-app .zbwc-quotachip.is-warn{background:#fcf9e8;color:#8a6d0b}#zbwc-app .zbwc-quotachip.is-full{background:#fcf0f1;color:var(--zbwc-error)}#zbwc-app .zbwc-quotanote{margin:0 0 16px}#zbwc-app .zbwc-pagehead{align-items:center;display:flex;gap:16px;justify-content:space-between}#zbwc-app .zbwc-pagehead__title{font-size:20px;font-weight:700;letter-spacing:-.01em;margin:0}#zbwc-app .zbwc-statbar{background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;display:grid;grid-template-columns:repeat(5,1fr);overflow:hidden}#zbwc-app .zbwc-statbar__cell{align-items:flex-start;border-right:1px solid var(--zbwc-border);display:flex;flex-direction:column;gap:6px;padding:16px 18px}#zbwc-app .zbwc-statbar__cell:last-child{border-right:none}#zbwc-app .zbwc-statbar__label{color:#757575;font-size:11px;letter-spacing:.06em;text-transform:uppercase}#zbwc-app .zbwc-statbar__value{font-size:26px;font-variant-numeric:tabular-nums;font-weight:700;line-height:1}#zbwc-app .zbwc-statbar__value--sm{font-size:17px}#zbwc-app .zbwc-statbar__value.is-bad{color:var(--zbwc-error)}#zbwc-app .zbwc-statbar__sub{color:#757575;font-size:12px}@media(max-width:1100px){#zbwc-app .zbwc-statbar{grid-template-columns:repeat(3,1fr)}#zbwc-app .zbwc-statbar__cell:nth-child(3){border-right:none}}@media(max-width:600px){#zbwc-app .zbwc-statbar{grid-template-columns:1fr 1fr}}#zbwc-app .zbwc-masterbar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-left:4px solid var(--zbwc-ok);border-radius:8px;display:flex;gap:20px;padding:16px 18px}#zbwc-app .zbwc-masterbar.is-off{background:var(--zbwc-bg);border-left-color:var(--zbwc-warn)}#zbwc-app .zbwc-masterbar__text{display:flex;flex:1;flex-direction:column;gap:4px}#zbwc-app .zbwc-masterbar__title{align-items:center;display:flex;font-size:15px;font-weight:600;gap:10px}#zbwc-app .zbwc-masterbar__desc{color:#646970;font-size:13px}#zbwc-app .zbwc-flow{display:flex;flex-direction:column}#zbwc-app .zbwc-flow__row{border-bottom:1px solid #f0f0f1;padding:14px 0}#zbwc-app .zbwc-flow__row:last-child{border-bottom:none}#zbwc-app .zbwc-flow__row:first-child{padding-top:4px}#zbwc-app .zbwc-flow__row.is-disabled{opacity:.65}#zbwc-app .zbwc-flow__main{align-items:center;display:flex;gap:14px}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{align-items:center;display:flex;gap:10px;min-width:0}#zbwc-app .zbwc-flow__event{flex:0 0 46%}#zbwc-app .zbwc-flow__doc{flex:1}#zbwc-app .zbwc-flow__label{color:#1e1e1e;font-size:14px}#zbwc-app .zbwc-flow__arrow{color:#a7aaad;flex:none}#zbwc-app .zbwc-flow__badge{background:var(--zbwc-bar-tint);border-radius:999px;color:var(--zbwc-bar-ink);flex:none;font-size:11px;font-weight:700;letter-spacing:.4px;padding:2px 9px}#zbwc-app .zbwc-flow__switch{flex:none;margin-left:auto}#zbwc-app .zbwc-flow .components-base-control,#zbwc-app .zbwc-flow .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-flow__hint{color:#757575;font-size:12px;margin:6px 0 0;padding-left:2px}@media(max-width:782px){#zbwc-app .zbwc-flow__main{flex-wrap:wrap}#zbwc-app .zbwc-flow__doc,#zbwc-app .zbwc-flow__event{flex:1 1 100%}#zbwc-app .zbwc-flow__arrow{display:none}}#zbwc-app .zbwc-note{align-items:flex-start;background:#fff;border:1px solid var(--zbwc-border);border-radius:10px;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-note p{color:#3c434a;font-size:14px;line-height:1.55;margin:0}#zbwc-app .zbwc-note .dashicons{align-items:center;border-radius:9px;display:flex;flex:none;font-size:19px;height:34px;justify-content:center;width:34px}#zbwc-app .zbwc-note.is-info .dashicons{background:var(--zbwc-plan-tint);color:var(--zbwc-accent)}#zbwc-app .zbwc-note.is-warn .dashicons{background:var(--zbwc-bar-tint);color:var(--zbwc-bar-ink)}#zbwc-app .zbwc-subnav{display:grid;gap:4px;grid-auto-columns:1fr;grid-auto-flow:column}#zbwc-app .zbwc-subnav__tab{background:transparent;border:none;border-radius:8px;color:#50575e;cursor:pointer;font-size:14px;font-weight:500;padding:10px 16px;text-align:center;transition:background-color .12s ease}#zbwc-app .zbwc-subnav__tab:hover{background:rgba(0,0,0,.03)}#zbwc-app .zbwc-subnav__tab.is-active{background:#e4e5e7;color:#1e1e1e;font-weight:600}#zbwc-app .zbwc-subnav__tab:focus-visible{outline:2px solid var(--zbwc-accent);outline-offset:2px}@media(max-width:782px){#zbwc-app .zbwc-subnav{grid-auto-columns:auto;grid-auto-flow:row}}#zbwc-app .zbwc-savebar{align-items:center;background:#fff;border:1px solid var(--zbwc-border);border-radius:8px;bottom:0;box-shadow:0 -2px 10px rgba(0,0,0,.06);display:flex;justify-content:space-between;margin-top:8px;padding:12px 16px;position:sticky}#zbwc-app .zbwc-savebar__msg{font-weight:500}#zbwc-app .zbwc-savebar__actions{display:flex;gap:8px}#zbwc-app .zbwc-code{background:#1e1e1e;border-radius:6px;color:#7fd;display:block;font-size:12px;padding:10px 12px;word-break:break-all}#zbwc-app .zbwc-linkbtn,#zbwc-app .zbwc-loading{align-items:center;display:inline-flex;gap:8px}#zbwc-app .zbwc-linkbtn{background:none;border:none;color:var(--zbwc-accent);cursor:pointer}#zbwc-app .zbwc-loading{color:#757575;padding:30px}#zbwc-app .zbwc-orglist__row{align-items:center;border-bottom:1px solid #f0f0f1;display:flex;justify-content:space-between;padding:8px 0}#zbwc-app .zbwc-subhead{border-bottom:1px solid #f0f0f1;color:#757575;font-size:11px;letter-spacing:.5px;margin:22px 0 10px;padding-bottom:5px}#zbwc-app .zbwc-onboarding{--ob-ink:#1a1a1a;--ob-muted:#656a70;--ob-line:#e3e5e7;--ob-soft:#f7f8f8;margin:0 auto;max-width:1120px;padding-bottom:60px}#zbwc-app .zbwc-onboarding__bar{align-items:center;display:flex;gap:10px;padding:4px 0 20px}#zbwc-app .zbwc-onboarding__logo.dashicons{color:var(--zbwc-accent);font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-onboarding__brand{font-size:16px;font-weight:700;letter-spacing:-.01em}#zbwc-app .zbwc-onboarding__titlerow{align-items:center;display:flex;gap:16px;justify-content:space-between;margin-bottom:16px}#zbwc-app .zbwc-onboarding__title{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0}#zbwc-app .zbwc-onboarding__chip{background:#e9eaeb;border-radius:999px;color:#50575e;font-size:12px;font-weight:500;padding:5px 14px}#zbwc-app .zbwc-onboarding__card{background:#fff;border:1px solid var(--ob-line);border-radius:16px;display:grid;grid-template-columns:minmax(0,1fr) 330px;overflow:hidden}#zbwc-app .zbwc-onboarding__panel{padding:34px 38px 38px}#zbwc-app .zbwc-onboarding__aside{background:var(--ob-soft);border-left:1px solid var(--ob-line);padding:32px 28px}@media(max-width:960px){#zbwc-app .zbwc-onboarding__card{grid-template-columns:1fr}#zbwc-app .zbwc-onboarding__panel{padding:26px 22px 30px}#zbwc-app .zbwc-onboarding__aside{border-left:none;border-top:1px solid var(--ob-line)}}#zbwc-app .zbwc-ob-eyebrow{color:var(--ob-muted);font-size:13px;margin:0 0 14px}#zbwc-app .zbwc-ob-heading{color:var(--ob-ink);font-size:30px;font-weight:700;letter-spacing:-.02em;line-height:1.18;margin:0 0 12px}#zbwc-app .zbwc-ob-lead{color:#4a5056;font-size:14.5px;line-height:1.6;margin:0 0 26px;max-width:46em}#zbwc-app .zbwc-ob-footnote{color:var(--ob-muted);font-size:12.5px;line-height:1.6;margin:18px 0 0}#zbwc-app .zbwc-ob-quiet{margin-top:16px}#zbwc-app .zbwc-ob-icon{align-items:center;background:var(--ob-soft);border:1px solid var(--ob-line);border-radius:11px;color:var(--ob-ink);display:flex;flex:none;height:42px;justify-content:center;width:42px}#zbwc-app .zbwc-ob-icon .dashicons{font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-features{list-style:none;margin:0 0 30px;padding:0}#zbwc-app .zbwc-ob-feature{display:flex;gap:16px;margin-bottom:22px}#zbwc-app .zbwc-ob-feature h3{font-size:15px;font-weight:600;margin:0 0 4px}#zbwc-app .zbwc-ob-feature p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:0}#zbwc-app .zbwc-ob-aside__title{font-size:14px;font-weight:700;margin:0}#zbwc-app .zbwc-ob-progress{list-style:none;margin:18px 0 0;padding:0}#zbwc-app .zbwc-ob-progress__item{display:flex;gap:14px;padding-bottom:22px;position:relative}#zbwc-app .zbwc-ob-progress__item:last-child{padding-bottom:0}#zbwc-app .zbwc-ob-progress__item:before{background:#dcdee0;bottom:6px;content:"";left:15px;position:absolute;top:34px;width:1px}#zbwc-app .zbwc-ob-progress__item:last-child:before{display:none}#zbwc-app .zbwc-ob-progress__num{align-items:center;background:#fff;border:1px solid #d5d7d9;border-radius:50%;color:#8c8f94;display:flex;flex:none;font-size:12px;font-weight:600;height:31px;justify-content:center;position:relative;width:31px}#zbwc-app .zbwc-ob-progress__num .dashicons{font-size:18px;height:18px;width:18px}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__num,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__num{background:var(--ob-ink);border-color:var(--ob-ink);color:#fff}#zbwc-app .zbwc-ob-progress__text{display:flex;flex-direction:column;gap:3px;padding-top:4px}#zbwc-app .zbwc-ob-progress__text strong{color:#8c8f94;font-size:13.5px;font-weight:600}#zbwc-app .zbwc-ob-progress__item.is-active .zbwc-ob-progress__text strong,#zbwc-app .zbwc-ob-progress__item.is-done .zbwc-ob-progress__text strong{color:var(--ob-ink)}#zbwc-app .zbwc-ob-progress__text span{color:var(--ob-muted);font-size:12.5px;line-height:1.5}#zbwc-app .zbwc-ob-facts{border-top:1px solid var(--ob-line);list-style:none;margin:22px 0 0;padding:18px 0 0}#zbwc-app .zbwc-ob-facts li{color:var(--ob-muted);font-size:12.5px;line-height:1.55;margin:0 0 10px;padding-left:14px;position:relative}#zbwc-app .zbwc-ob-facts li:before{content:"·";left:4px;position:absolute}#zbwc-app .zbwc-ob-count{border-top:1px solid var(--ob-line);font-size:13px;font-weight:600;margin:22px 0 0;padding-top:18px}#zbwc-app .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin-top:14px;padding:14px 15px}#zbwc-app .zbwc-ob-note p{font-size:12.5px;line-height:1.55;margin:0}#zbwc-app .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-ob-note.is-warn{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-ob-note.is-plan{background:#edfaef;color:#0a6b22}#zbwc-app .zbwc-ob-badge{border-radius:999px;flex:none;font-size:12px;font-weight:600;padding:4px 12px;white-space:nowrap}#zbwc-app .zbwc-ob-badge.is-ok{background:#d8f5e3;color:#0a6b2f}#zbwc-app .zbwc-ob-badge.is-blue{background:#e4f0fb;color:#1c5a99}#zbwc-app .zbwc-ob-badge.is-muted{background:#eceded;color:#646970}#zbwc-app .zbwc-ob-option{border:1px solid var(--ob-line);border-radius:12px;padding:20px 22px}#zbwc-app .zbwc-ob-option.is-done{background:var(--ob-soft)}#zbwc-app .zbwc-ob-option__head{align-items:center;display:flex;gap:12px;justify-content:space-between}#zbwc-app .zbwc-ob-option__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-option__desc{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:8px 0 0}#zbwc-app .zbwc-ob-option .zbwc-kv{margin-top:10px}#zbwc-app .zbwc-ob-howto{color:#3c434a;font-size:13.5px;line-height:1.7;margin:18px 0 0;padding-left:18px}#zbwc-app .zbwc-ob-howto li{margin-bottom:10px}#zbwc-app .zbwc-ob-copyrow{align-items:center;display:flex;gap:8px;margin-top:8px}#zbwc-app .zbwc-ob-copyrow .zbwc-code{flex:1;margin:0}#zbwc-app .zbwc-ob-fields{border-top:1px solid var(--ob-line);display:grid;gap:18px;margin-top:20px;padding-top:20px}#zbwc-app .zbwc-ob-fields .components-base-control{margin-bottom:0}#zbwc-app .zbwc-ob-actions{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}#zbwc-app .zbwc-ob-actions .components-button .dashicons{font-size:17px;height:17px;margin-right:6px;width:17px}#zbwc-app .zbwc-ob-divider{background:var(--ob-line);height:1px;margin:26px 0 18px}#zbwc-app .zbwc-ob-disclosure{align-items:center;background:none;border:none;color:var(--zbwc-accent);cursor:pointer;display:inline-flex;font-size:13.5px;font-weight:500;gap:6px;padding:0}#zbwc-app .zbwc-ob-disclosure .dashicons{font-size:16px;height:16px;width:16px}#zbwc-app .zbwc-ob-advanced{background:var(--ob-soft);border-radius:12px;margin-top:16px;padding:18px 20px}#zbwc-app .zbwc-ob-advanced p{color:var(--ob-muted);font-size:13px;line-height:1.6;margin:0 0 14px}#zbwc-app .zbwc-ob-advanced .components-base-control{margin-bottom:14px}#zbwc-app .zbwc-ob-resource{border:1px solid var(--ob-line);border-radius:12px;margin-bottom:14px;transition:border-color .12s ease,box-shadow .12s ease}#zbwc-app .zbwc-ob-resource.is-on{border-color:#c4c7ca;box-shadow:0 1px 2px rgba(0,0,0,.04)}#zbwc-app .zbwc-ob-resource__main{align-items:flex-start;cursor:pointer;display:flex;gap:14px;padding:18px 20px}#zbwc-app .zbwc-ob-resource__box{cursor:default;display:flex;padding-top:3px}#zbwc-app .zbwc-ob-resource .components-base-control,#zbwc-app .zbwc-ob-resource .components-base-control__field{margin-bottom:0}#zbwc-app .zbwc-ob-resource__body{flex:1}#zbwc-app .zbwc-ob-resource__head{align-items:center;display:flex;flex-wrap:wrap;gap:10px}#zbwc-app .zbwc-ob-resource__head h3{font-size:15px;font-weight:600;margin:0}#zbwc-app .zbwc-ob-resource__body p{color:var(--ob-muted);font-size:13.5px;line-height:1.6;margin:5px 0 0}#zbwc-app .zbwc-ob-resource__prefs{cursor:default;display:grid;gap:18px;grid-template-columns:1fr 1fr;margin-top:16px}@media(max-width:782px){#zbwc-app .zbwc-ob-resource__prefs{grid-template-columns:1fr}}#zbwc-app .zbwc-ob-inline-notice.components-notice{border-radius:10px;margin:4px 0 0}#zbwc-app .zbwc-ob-done{background:#fff;border:1px solid var(--ob-line);border-radius:16px;margin:0 auto;max-width:620px;padding:44px 44px 36px;text-align:center}#zbwc-app .zbwc-ob-done__check{align-items:center;background:#e2f5e9;border-radius:50%;display:inline-flex;height:76px;justify-content:center;margin-bottom:20px;width:76px}#zbwc-app .zbwc-ob-done__check .dashicons{align-items:center;background:#2f7a48;border-radius:50%;color:#fff;display:flex;font-size:34px;height:54px;justify-content:center;width:54px}#zbwc-app .zbwc-ob-done h2{font-size:28px;font-weight:700;letter-spacing:-.02em;margin:0 0 10px}#zbwc-app .zbwc-ob-done .zbwc-ob-lead{margin:0 auto 26px;max-width:34em}#zbwc-app .zbwc-ob-done .zbwc-ob-note{text-align:left}#zbwc-app .zbwc-ob-summary{border:1px solid var(--ob-line);border-radius:12px;list-style:none;margin:0;overflow:hidden;padding:0;text-align:left}#zbwc-app .zbwc-ob-summary__row{align-items:center;border-bottom:1px solid var(--ob-line);display:flex;gap:12px;padding:15px 18px}#zbwc-app .zbwc-ob-summary__row:last-child{border-bottom:none}#zbwc-app .zbwc-ob-summary__icon{display:flex}#zbwc-app .zbwc-ob-summary__icon .dashicons{color:#2f7a48;font-size:20px;height:20px;width:20px}#zbwc-app .zbwc-ob-summary__icon.is-muted .dashicons{color:#a7aaad}#zbwc-app .zbwc-ob-summary__text{display:flex;flex:1;flex-direction:column;gap:2px}#zbwc-app .zbwc-ob-summary__text strong{font-size:14px}#zbwc-app .zbwc-ob-summary__text span{color:var(--ob-muted);font-size:12.5px}#zbwc-app .zbwc-ob-done__actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:24px}#zbwc-app .zbwc-ob-nav{align-items:center;display:flex;justify-content:space-between;margin-top:22px}#zbwc-app .zbwc-onboarding .components-button.is-primary{background:var(--ob-ink);border-color:var(--ob-ink);border-radius:8px;box-shadow:none;font-size:13.5px;font-weight:600;height:42px;padding:0 20px}#zbwc-app .zbwc-onboarding .components-button.is-primary:focus:not(:disabled),#zbwc-app .zbwc-onboarding .components-button.is-primary:hover:not(:disabled){background:#000;border-color:#000;color:#fff}#zbwc-app .zbwc-onboarding .components-button.is-primary:disabled,#zbwc-app .zbwc-onboarding .components-button.is-primary[aria-disabled=true]{background:#e6e7e8;border-color:#e6e7e8;color:#a7aaad}#zbwc-app .zbwc-onboarding .components-button.is-secondary{background:#fff;border-radius:8px;box-shadow:inset 0 0 0 1px #d5d7d9;color:var(--ob-ink);font-size:13.5px;font-weight:600;height:42px;padding:0 18px}#zbwc-app .zbwc-onboarding .components-button.is-secondary:hover:not(:disabled){background:var(--ob-soft);box-shadow:inset 0 0 0 1px #b9bcbf;color:var(--ob-ink)}#zbwc-app .zbwc-onboarding .components-button.is-tertiary{border-radius:8px;font-weight:600;height:42px;padding:0 14px}#zbwc-app .zbwc-toasts{bottom:20px;left:160px;position:fixed;z-index:100000}@media(max-width:782px){#zbwc-app .zbwc-toasts{left:16px;right:16px;width:auto}}.zbwc-upgrade-modal.components-modal__frame{border-radius:12px;max-width:32rem;position:relative;width:calc(100% - 32px)}.zbwc-upgrade-modal .components-modal__header{border-bottom:none;height:auto;justify-content:center;padding:28px 32px 0}.zbwc-upgrade-modal .components-modal__header-heading-container{justify-content:center}.zbwc-upgrade-modal .components-modal__header-heading{font-size:22px;font-weight:700;line-height:1.3;text-align:center}.zbwc-upgrade-modal .components-modal__header .components-button.has-icon{margin:0;position:absolute;right:12px;top:10px}.zbwc-upgrade-modal .components-modal__content{padding:0 32px 28px}.zbwc-upgrade-modal .components-modal__content:before{content:none}.zbwc-upgrade-modal__body{text-align:center}.zbwc-upgrade-modal__lead{color:#3c434a;font-size:14px;line-height:1.6;margin:12px auto 0;max-width:34rem}.zbwc-upgrade-modal__note{color:#646970;font-size:13px;line-height:1.6;margin:8px auto 0;max-width:34rem}.zbwc-upgrade-modal__offer{align-items:baseline;display:flex;gap:8px;justify-content:center;margin:20px 0 16px}.zbwc-upgrade-modal__plan{font-size:15px;font-weight:600}.zbwc-upgrade-modal__price{font-size:30px;font-weight:700;line-height:1}.zbwc-upgrade-modal__per{color:#646970;font-size:14px;font-weight:400}.zbwc-upgrade-modal__cta.components-button.is-primary{border-radius:8px;display:flex;font-size:15px;font-weight:600;height:48px;justify-content:center;width:100%}.zbwc-upgrade-modal__later.components-button{color:#50575e;display:block;margin:14px auto 0;text-decoration:underline}.zbwc-upgrade-modal__trust{align-items:center;border-top:1px solid #e0e0e0;color:#646970;display:flex;font-size:13px;gap:6px;justify-content:center;margin:22px 0 0;padding-top:18px}.zbwc-upgrade-modal__trust .dashicons{font-size:16px;height:16px;width:16px}.zbwc-org-modal.components-modal__frame{border-radius:14px;max-width:480px;width:calc(100% - 32px)}.zbwc-org-modal .components-modal__header-heading{font-size:17px;font-weight:600}.zbwc-org-modal .components-modal__content{padding:2px 28px 24px}.zbwc-org-modal__lead{color:#646970;font-size:13px;line-height:1.6;margin:0 0 16px}.zbwc-org-modal__loading{align-items:center;color:#646970;display:flex;gap:8px;padding:16px 0 8px}.zbwc-org-modal__loading .components-spinner{margin:0}.zbwc-org-modal__list{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow-y:auto}.zbwc-org-modal__row{align-items:center;background:#fff;border:1px solid #dcdcde;border-radius:10px;color:inherit;cursor:pointer;display:flex;font:inherit;gap:12px;padding:12px 14px;text-align:left;transition:border-color .12s ease,box-shadow .12s ease;width:100%}.zbwc-org-modal__row:hover{border-color:#8c8f94}.zbwc-org-modal__row:focus-visible{outline:2px solid var(--wp-admin-theme-color,#3858e9);outline-offset:1px}.zbwc-org-modal__row.is-selected{border-color:var(--wp-admin-theme-color,#3858e9);box-shadow:0 0 0 1px var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__icon{background:#f0f0f1;border-radius:9px;color:#50575e;display:grid;flex:none;height:36px;place-items:center;width:36px}.zbwc-org-modal__icon .dashicons{font-size:18px;height:18px;width:18px}.zbwc-org-modal__name{display:flex;flex:1;flex-direction:column;gap:1px;min-width:0}.zbwc-org-modal__name strong{font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zbwc-org-modal__name span{color:#646970;font-size:12px}.zbwc-org-modal__current{background:#f0f0f1;border-radius:999px;color:#50575e;flex:none;font-size:11.5px;font-weight:600;padding:2px 10px}.zbwc-org-modal__tick{color:transparent;flex:none}.zbwc-org-modal__tick.is-on{color:var(--wp-admin-theme-color,#3858e9)}.zbwc-org-modal__retry{margin-top:12px}.zbwc-org-modal__switch{display:flex;flex-direction:column;gap:12px;margin-top:16px}.zbwc-org-modal__switch .components-notice{margin:0}.zbwc-org-modal__note{color:#646970;font-size:12.5px;line-height:1.55;margin:0}.zbwc-org-modal__footer{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-connbox{align-items:center;display:flex;flex-wrap:wrap;gap:14px}#zbwc-app .zbwc-connbox__icon{background:#edfaef;border-radius:11px;color:#0a6b2f;display:grid;flex:none;height:44px;place-items:center;width:44px}#zbwc-app .zbwc-connbox__icon .dashicons{font-size:22px;height:22px;width:22px}#zbwc-app .zbwc-connbox.is-warn .zbwc-connbox__icon{background:#fdf4e3;color:#7a5309}#zbwc-app .zbwc-connbox__body{display:flex;flex:1;flex-direction:column;gap:3px;min-width:220px}#zbwc-app .zbwc-connbox__name{font-size:15px;font-weight:600;line-height:1.2}#zbwc-app .zbwc-connbox__meta{align-items:center;color:#646970;display:flex;flex-wrap:wrap;font-size:12.5px;gap:6px 10px}#zbwc-app .zbwc-connbox__meta code{background:#f0f0f1;border-radius:4px;font-size:11.5px;padding:1px 6px}#zbwc-app .zbwc-connbox__actions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}#zbwc-app .zbwc-connbox+.components-notice{margin:12px 0 0}.zbwc-org-modal__list.is-compact{max-height:176px}#zbwc-app .zbwc-copyrow{margin:10px 0 2px}#zbwc-app .zbwc-connfields{display:flex;flex-direction:column;gap:16px;margin-top:18px}#zbwc-app .zbwc-invnotice.components-notice{margin:12px 0 0}#zbwc-app .zbwc-invnotice .components-button.is-link{font-size:inherit}#zbwc-app .zbwc-invnotice__lead{font-weight:600;margin:0 0 8px}#zbwc-app .zbwc-invnotice__steps{margin:0 0 10px;padding-left:20px}#zbwc-app .zbwc-invnotice__steps li{margin:4px 0}#zbwc-app .zbwc-invnotice__actions{align-items:center;display:flex;flex-wrap:wrap;gap:12px}#zbwc-app .zbwc-page .zbwc-ob-note{border-radius:10px;display:flex;gap:10px;margin:0 0 14px;padding:14px 15px}#zbwc-app .zbwc-page .zbwc-ob-note p{font-size:13px;line-height:1.55;margin:0}#zbwc-app .zbwc-page .zbwc-ob-note.is-info{background:#eaf2fb;color:#1c4670}#zbwc-app .zbwc-page .zbwc-ob-note .dashicons{flex:none;font-size:17px;height:17px;width:17px}#zbwc-app .zbwc-ob-quiet.components-button{margin-top:18px}#zbwc-app .zbwc-whpicker{align-items:flex-start;display:flex;gap:10px;max-width:560px}#zbwc-app .zbwc-whpicker .components-base-control{flex:1}#zbwc-app .zbwc-whpicker .components-button{margin-top:23px}#zbwc-app .zbwc-whwarn.components-notice{margin:0 0 14px}.zbwc-guide-modal.components-modal__frame{border-radius:14px;max-width:640px;width:calc(100% - 32px)}.zbwc-guide-modal .components-modal__content{padding:2px 28px 24px}.zbwc-guide-modal__lede{color:#646970;font-size:13.5px;line-height:1.6;margin:0 0 16px}.zbwc-guide-modal__steps{margin:0;padding-left:22px}.zbwc-guide-modal__steps li{margin:0 0 14px}.zbwc-guide-modal__steps strong{font-size:14px}.zbwc-guide-modal__steps p{color:#50575e;font-size:13.5px;line-height:1.55;margin:3px 0 0}.zbwc-guide-modal__uri{background:#f0f2f5;border-radius:8px;display:block;font-size:12px;margin-top:8px;padding:8px 10px;word-break:break-all}.zbwc-guide-modal__h{font-size:14px;margin:20px 0 8px}.zbwc-guide-modal__table{border-collapse:collapse;font-size:13px;width:100%}.zbwc-guide-modal__table td{border-bottom:1px solid #eceef1;padding:5px 10px 5px 0}.zbwc-guide-modal__table code{background:#f0f2f5;border-radius:4px;font-size:12px;padding:1px 6px}.zbwc-guide-modal__fixes{font-size:13.5px;margin:0;padding-left:20px}.zbwc-guide-modal__fixes li{color:#50575e;margin:6px 0}.zbwc-guide-modal__footer{display:flex;justify-content:flex-end;margin-top:20px}#zbwc-app .zbwc-ob-guidelink.components-button{font-weight:600;margin:-6px 0 20px}#zbwc-app .zbwc-rule{border:0;border-top:1px solid #e0e2e6;margin:20px 0 14px}#zbwc-app .zbwc-subhead{color:#646970;font-size:12px;font-weight:600;letter-spacing:.06em;margin:0 0 10px;text-transform:uppercase}#zbwc-app .zbwc-activity{margin:0 0 16px}#zbwc-app .zbwc-activity__task{align-items:center;background:#fff;border:1px solid #e0e2e6;border-left:3px solid #2271b1;border-radius:8px;display:grid;gap:14px;grid-template-columns:230px minmax(120px,1fr) 3.4em minmax(0,34%);margin-bottom:6px;max-height:80px;overflow:hidden;padding:9px 14px;transition:opacity .6s ease,max-height .6s ease,padding .6s ease,margin .6s ease,border-color .3s ease}#zbwc-app .zbwc-activity__task.is-leaving{border-bottom-width:0;border-top-width:0;margin-bottom:0;max-height:0;opacity:0;padding-bottom:0;padding-top:0}#zbwc-app .zbwc-activity__task.is-done{border-left-color:#00a32a}#zbwc-app .zbwc-activity__task.is-failed{border-left-color:#d63638}#zbwc-app .zbwc-activity__label{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__bar{background:#e6e8eb;border-radius:999px;height:6px;overflow:hidden}#zbwc-app .zbwc-activity__fill{background:#2271b1;border-radius:999px;height:100%;transition:width .4s ease;width:0}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__fill{background:#00a32a}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__fill{background:#d63638}#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:zbwc-activity-slide 1.4s ease-in-out infinite;width:35%}#zbwc-app .zbwc-activity__pct{color:#1e1e1e;font-size:13px;font-variant-numeric:tabular-nums;font-weight:600;text-align:right}#zbwc-app .zbwc-activity__task.is-done .zbwc-activity__pct{color:#00a32a}#zbwc-app .zbwc-activity__meta{color:#646970;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#zbwc-app .zbwc-activity__task.is-failed{max-height:160px}#zbwc-app .zbwc-activity__task.is-failed .zbwc-activity__meta{white-space:normal}@media(max-width:782px){#zbwc-app .zbwc-activity__task{gap:6px 10px;grid-template-areas:"label pct" "bar bar" "meta meta";grid-template-columns:minmax(0,1fr) auto;max-height:160px}#zbwc-app .zbwc-activity__label{grid-area:label;white-space:normal}#zbwc-app .zbwc-activity__pct{grid-area:pct}#zbwc-app .zbwc-activity__bar{grid-area:bar}#zbwc-app .zbwc-activity__meta{grid-area:meta;white-space:normal}#zbwc-app .zbwc-activity__label{-ms-grid-column:1;-ms-grid-row:1}#zbwc-app .zbwc-activity__pct{-ms-grid-column:3;-ms-grid-row:1}#zbwc-app .zbwc-activity__bar{-ms-grid-column:1;-ms-grid-row:3;-ms-grid-column-span:3}#zbwc-app .zbwc-activity__meta{-ms-grid-column:1;-ms-grid-row:5;-ms-grid-column-span:3}#zbwc-app .zbwc-failtable,#zbwc-app .zbwc-failtable tbody,#zbwc-app .zbwc-logtable,#zbwc-app .zbwc-logtable tbody{display:block}#zbwc-app .zbwc-failtable thead,#zbwc-app .zbwc-logtable thead{display:none}#zbwc-app .zbwc-failtable tr,#zbwc-app .zbwc-logtable tr{align-items:center;display:flex;flex-wrap:wrap;gap:6px 10px;padding:10px 12px}#zbwc-app .zbwc-failtable td,#zbwc-app .zbwc-logtable td{display:block;padding:0}#zbwc-app .zbwc-failtable .zbwc-errcell,#zbwc-app .zbwc-failtable .zbwc-maptable__actions,#zbwc-app .zbwc-logtable__msg{flex-basis:100%;max-width:none}#zbwc-app .zbwc-logtable__res{color:#646970;flex-basis:100%}#zbwc-app .zbwc-logtable__res:empty{display:none}#zbwc-app .zbwc-failtable code{overflow-wrap:anywhere}#zbwc-app .zbwc-failtable__attempts:before{color:#646970;content:attr(data-label) ": "}}@keyframes zbwc-activity-slide{0%{margin-left:-35%}to{margin-left:100%}}@media(prefers-reduced-motion:reduce){#zbwc-app .zbwc-activity__fill.is-indeterminate{animation:none;opacity:.55;width:100%}#zbwc-app .zbwc-activity__fill,#zbwc-app .zbwc-activity__task{transition:none}}
  • erp7-order-sync-for-zoho-books/trunk/build/index.js

    r3733769 r3733904  
    55(0,a.__)("%1$s — %2$s only","erp7-order-sync-for-zoho-books"),o,t):(0,a.sprintf)(/* translators: %s: two-letter country code. */ /* translators: %s: two-letter country code. */
    66(0,a.__)("%s — any state","erp7-order-sync-for-zoho-books"),o):(0,a.__)("Any country","erp7-order-sync-for-zoho-books")}(n))),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:n.zoho_tax_id||"",options:p,onChange:e=>r(o=>o.map((o,t)=>t===l?{...o,zoho_tax_id:e}:o))})),(0,o.createElement)("td",{className:"zbwc-maptable__actions"},(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>(async o=>{const t=c.find(e=>e.tax_id===o.zoho_tax_id);try{await y("/mappings/tax",{id:o.id||0,woo_tax_title:o.woo_tax_title,woo_tax_rate:o.woo_tax_rate,woo_country:o.woo_country||"",woo_state:o.woo_state||"",zoho_tax_id:o.zoho_tax_id,zoho_tax_name:t?t.tax_name:""}),e((0,a.__)("Tax mapping saved.","erp7-order-sync-for-zoho-books"),"success"),_()}catch(o){e(z(o),"error")}})(t[l]),disabled:!n.zoho_tax_id},(0,a.__)("Save","erp7-order-sync-for-zoho-books")),n.id?(0,o.createElement)(s.Button,{variant:"tertiary",size:"small",isDestructive:!0,onClick:()=>(async o=>{try{await f(`/mappings/tax/${o}`),_()}catch(o){e(z(o),"error")}})(n.id)},(0,a.__)("Delete","erp7-order-sync-for-zoho-books")):null))))),g.length>0&&(0,o.createElement)("div",{className:"zbwc-maptable__add"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Add a WooCommerce rate","erp7-order-sync-for-zoho-books"),value:"",options:[{label:(0,a.__)("— Choose a rate —","erp7-order-sync-for-zoho-books"),value:""},...g.map((e,o)=>({label:(0,a.sprintf)(/* translators: 1: WooCommerce tax rate label. 2: tax rate percentage. */ /* translators: 1: WooCommerce tax rate label. 2: tax rate percentage. */
    7 (0,a._x)("%1$s (%2$s%%)","WooCommerce tax rate option","erp7-order-sync-for-zoho-books"),e.label,e.rate),value:String(o)}))],onChange:e=>{return""!==e&&(o=g[Number(e)],void r(e=>[...e,{id:0,woo_tax_title:o.label,woo_tax_rate:o.rate,woo_country:o.country,woo_state:o.state,zoho_tax_id:""}]));var o}})))}function C(){const e=l(),[t,r]=(0,n.useState)(null),[c,i]=(0,n.useState)([]);if((0,n.useEffect)(()=>{(async()=>{try{const[e,o]=await Promise.all([b("/mappings/gateway"),b("/zoho/accounts")]);r(e),i(o.accounts||[])}catch(o){e(z(o),"error"),r({gateways:[],paymentModes:[]})}})()},[]),null===t)return(0,o.createElement)(s.Spinner,null);const d=[{label:(0,a.__)("— Default (cash) —","erp7-order-sync-for-zoho-books"),value:""},...t.paymentModes.map(e=>({label:e,value:e}))],m=[{label:(0,a.__)("— Store default —","erp7-order-sync-for-zoho-books"),value:""},...c.map(e=>({label:e.account_name,value:e.account_id}))],u=(e,o)=>r(t=>({...t,gateways:t.gateways.map((t,r)=>r===e?{...t,...o}:t)}));return(0,o.createElement)("table",{className:"widefat striped zbwc-maptable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Payment gateway","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Zoho payment mode","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Deposit account","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null))),(0,o.createElement)("tbody",null,0===t.gateways.length&&(0,o.createElement)("tr",null,(0,o.createElement)("td",{colSpan:"4"},(0,a.__)("No gateways detected.","erp7-order-sync-for-zoho-books"))),t.gateways.map((r,n)=>(0,o.createElement)("tr",{key:r.gateway},(0,o.createElement)("td",null,r.title),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:r.zoho_payment_method||"",options:d,onChange:e=>u(n,{zoho_payment_method:e})})),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:r.deposit_account_id||"",options:m,onChange:e=>u(n,{deposit_account_id:e})})),(0,o.createElement)("td",null,(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>(async o=>{try{await y("/mappings/gateway",{gateway:o.gateway,zoho_payment_method:o.zoho_payment_method,deposit_account_id:o.deposit_account_id}),e((0,a.__)("Gateway mapping saved.","erp7-order-sync-for-zoho-books"),"success")}catch(o){e(z(o),"error")}})(t.gateways[n])},(0,a.__)("Save","erp7-order-sync-for-zoho-books")))))))}function S({inventoryRefused:e=!1}){const t=l(),[r,c]=(0,n.useState)(null),[i,d]=(0,n.useState)([]);if((0,n.useEffect)(()=>{(async()=>{try{const[e,o]=await Promise.all([b("/mappings/location"),b("/zoho/warehouses")]);c(e.locations||[]),d(o.warehouses||[])}catch(e){t(z(e),"error"),c([])}})()},[]),null===r)return null;const m=[{label:(0,a.__)("— Default warehouse —","erp7-order-sync-for-zoho-books"),value:""},...i.map(e=>({label:e.warehouse_name,value:e.warehouse_id}))],u=(e,o)=>c(t=>t.map((t,r)=>r===e?{...t,zoho_warehouse_id:o}:t)),h=async e=>{const o=i.find(o=>o.warehouse_id===e.zoho_warehouse_id);try{await y("/mappings/location",{location_id:e.location_id,location_name:e.location_name,zoho_warehouse_id:e.zoho_warehouse_id,zoho_warehouse_name:o?o.warehouse_name:""}),t((0,a.__)("Location mapping saved.","erp7-order-sync-for-zoho-books"),"success")}catch(e){t(z(e),"error")}},_=e?(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1,className:"zbwc-whwarn"},(0,a.__)("Stock cannot sync yet — Zoho declined inventory tracking for this organization. Enable Inventory in Zoho Books first (steps at the top of this page); the warehouse chosen below is saved for when it is on.","erp7-order-sync-for-zoho-books")):null;if(r.length<=1){const e=r[0]||{location_id:"default",location_name:"",zoho_warehouse_id:""};return(0,o.createElement)(w,{title:(0,a.__)("Zoho warehouse","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Where this store's stock lives in Zoho Books. WooCommerce keeps a single stock pool, so there is nothing to configure on the Woo side.","erp7-order-sync-for-zoho-books")},_,0===i.length?(0,o.createElement)("p",{className:"zbwc-muted"},(0,a.__)("Your organization has no warehouses yet — they arrive with Zoho Inventory. Until then, stock uses Zoho's default warehouse and there is nothing to choose.","erp7-order-sync-for-zoho-books")):(0,o.createElement)("div",{className:"zbwc-whpicker"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Warehouse","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Stock reads from and writes to this warehouse. Leave on default to use Zoho's primary warehouse.","erp7-order-sync-for-zoho-books"),value:e.zoho_warehouse_id||"",options:m,onChange:e=>u(0,e)}),(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>h(r[0])},(0,a.__)("Save","erp7-order-sync-for-zoho-books"))))}return(0,o.createElement)(w,{title:(0,a.__)("Zoho warehouses","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Each of your locations writes its stock into its own Zoho warehouse.","erp7-order-sync-for-zoho-books")},_,(0,o.createElement)("table",{className:"widefat striped zbwc-maptable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Location","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Zoho warehouse","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null))),(0,o.createElement)("tbody",null,r.map((e,t)=>(0,o.createElement)("tr",{key:e.location_id},(0,o.createElement)("td",null,e.location_name),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:e.zoho_warehouse_id||"",options:m,onChange:e=>u(t,e)})),(0,o.createElement)("td",null,(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>h(r[t])},(0,a.__)("Save","erp7-order-sync-for-zoho-books"))))))))}function x({label:e,help:t,endpoint:r,listKey:c,optionValue:l,optionLabel:i,value:d,onChange:m,placeholder:u=(0,a.__)("— Select —","erp7-order-sync-for-zoho-books"),filter:h,formatLabel:_}){const[p,y]=(0,n.useState)([]),[f,z]=(0,n.useState)(!0);(0,n.useEffect)(()=>{let e=!0;return z(!0),b(r).then(o=>{if(!e)return;let t=o[c]||[];h&&(t=t.filter(h)),y(t)}).catch(()=>{}).finally(()=>e&&z(!1)),()=>{e=!1}},[r]);const g=[{label:f?(0,a.__)("Loading…","erp7-order-sync-for-zoho-books"):u,value:""},...p.map(e=>({label:_?_(e):String(e[i]),value:String(e[l])}))];return(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:e,help:t,value:d||"",options:g,onChange:m,disabled:f})}function B({status:e="info",children:t}){const r={ok:"is-ok",warn:"is-warn",error:"is-error",info:"is-info"}[e]||"is-info";return(0,o.createElement)("span",{className:"zbwc-pill "+r},t)}function Z({label:e=(0,a.__)("Loading…","erp7-order-sync-for-zoho-books")}){return(0,o.createElement)("div",{className:"zbwc-loading"},(0,o.createElement)(s.Spinner,null),(0,o.createElement)("span",null,e))}function T({error:e,onRetry:t}){return e?(0,o.createElement)(s.Notice,{status:"error",isDismissible:!1,className:"zbwc-error"},e,t&&(0,o.createElement)(o.Fragment,null," ",(0,o.createElement)(s.Button,{variant:"link",onClick:t},(0,a.__)("Retry","erp7-order-sync-for-zoho-books")))):null}const I=[];function P(){return[...I].sort((e,o)=>e.order-o.order)}const M={Section:w,SaveBar:v,TaxMappings:N,GatewayMappings:C,LocationMappings:S,ZohoSelect:x,Loading:Z,ErrorNotice:T,StatusPill:B,useToast:l,useAsync:g,useHashRoute:k,useSettings:E,apiGet:b,apiPost:y,apiDelete:f,errorMessage:z},R=[{slug:"dashboard",label:(0,a.__)("Dashboard","erp7-order-sync-for-zoho-books")},{slug:"orders",label:(0,a.__)("Orders","erp7-order-sync-for-zoho-books")},{slug:"customers",label:(0,a.__)("Customers","erp7-order-sync-for-zoho-books")},{slug:"products",label:(0,a.__)("Products & Inventory","erp7-order-sync-for-zoho-books")},{slug:"logs",label:(0,a.__)("Logs","erp7-order-sync-for-zoho-books")}],D={slug:"connection",label:(0,a.__)("Connection","erp7-order-sync-for-zoho-books")},O={slug:"plan",label:(0,a.__)("Plan","erp7-order-sync-for-zoho-books")};function A({route:e,navigate:t,connection:r}){return(0,o.createElement)("div",{className:"zbwc-nav"},(0,o.createElement)("div",{className:"zbwc-nav__brand"},(0,o.createElement)("span",{className:"zbwc-nav__logo dashicons dashicons-book-alt"}),(0,o.createElement)("span",null,"Zoho Integration ",(0,o.createElement)("span",{className:"zbwc-nav__sub"},"for WooCommerce"))),(0,o.createElement)("nav",{className:"zbwc-nav__tabs"},function(){const e=h.plan&&h.plan.enforced?[D,O]:[D];return[...R,...P().map(({slug:e,label:o})=>({slug:e,label:o})),...e]}().map(r=>(0,o.createElement)("button",{key:r.slug,type:"button",className:"zbwc-nav__tab"+(e===r.slug?" is-active":""),onClick:()=>t(r.slug)},r.label))),(0,o.createElement)("div",{className:"zbwc-nav__status"},r&&r.connected?(0,o.createElement)("span",{className:"zbwc-pill is-ok"},(0,a.__)("Connected","erp7-order-sync-for-zoho-books")):(0,o.createElement)("span",{className:"zbwc-pill is-warn"},(0,a.__)("Not connected","erp7-order-sync-for-zoho-books"))))}function W(){return h.plan||{}}function H(){return W().usage||{}}function F(){return!!W().enforced&&!!H().limited}function U(e){const o=W();return!o.enforced||(o.features||[]).includes(e)}function L(e){if(!F())return null;const o=(H().quotas||{})[e];return o&&o.limit?o:null}const $={orders:(0,a.__)("orders","erp7-order-sync-for-zoho-books"),products:(0,a.__)("products","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("customers","erp7-order-sync-for-zoho-books")};function j(e){return e.length<2?e[0]||"":e.slice(0,-1).join(", ")+(0,a.__)(" and ","erp7-order-sync-for-zoho-books")+e[e.length-1]}function q(e){return $[e]||e}function G(){const e=H().quotas||{};return j(Object.keys($).filter(o=>e[o]&&e[o].limit).map(o=>`${e[o].limit} ${q(o)}`))}function Y({title:e,description:t,bullets:r=[]}){const n=W(),c=!n.plan||"free"===n.plan;return(0,o.createElement)("div",{className:"zbwc-plancard"},(0,o.createElement)("span",{className:"zbwc-plancard__chip"},c?(0,a.__)("FREE PLAN","erp7-order-sync-for-zoho-books"):(0,a.__)("NOT IN YOUR PLAN","erp7-order-sync-for-zoho-books")),(0,o.createElement)("h3",{className:"zbwc-plancard__title"},e),t&&(0,o.createElement)("p",{className:"zbwc-plancard__desc"},t),r.length>0&&(0,o.createElement)("ul",{className:"zbwc-plancard__list"},r.map(e=>(0,o.createElement)("li",{key:e},(0,o.createElement)("span",{className:"dashicons dashicons-yes","aria-hidden":"true"}),e))),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-plancard__cta",href:"#/plan"},(0,a.__)("Upgrade to Pro","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-plancard__trust"},(0,o.createElement)("span",{className:"dashicons dashicons-lock","aria-hidden":"true"}),(0,a.__)("Secure checkout via Stripe","erp7-order-sync-for-zoho-books")))}const K="zbwc_plan_modal_later";function V({title:e,message:t,onUpgrade:r,onDismiss:n,urgent:c=!1}){return(0,o.createElement)("div",{className:"zbwc-planbar"+(c?" is-urgent":"")},(0,o.createElement)("span",{className:"zbwc-planbar__icon dashicons dashicons-unlock","aria-hidden":"true"}),(0,o.createElement)("div",{className:"zbwc-planbar__text"},(0,o.createElement)("strong",null,e),(0,o.createElement)("span",null,t)),(0,o.createElement)("div",{className:"zbwc-planbar__actions"},n&&(0,o.createElement)(s.Button,{variant:"tertiary",onClick:n},(0,a.__)("Not now","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-planbar__cta",onClick:r},(0,a.__)("Upgrade for unlimited sync","erp7-order-sync-for-zoho-books"))))}function J({route:e,navigate:t}){const r=H(),{full:c,nearly:i}=function(e){const o=[],t=[];return Object.entries(e).forEach(([e,r])=>{r.limit&&(r.exhausted?o.push(q(e)):r.used/r.limit>=.5&&t.push(q(e)))}),{full:o,nearly:t}}(r.quotas||{});let d="base";c.length?d="limit":i.length&&(d="nudge");const m=`zbwc_upgrade_${d}_${r.period||""}`,u=F()&&"plan"!==e,[h,_]=(0,n.useState)(()=>function(e,o){try{const t=parseInt(window.localStorage.getItem(e),10);return!!t&&("limit"!==o||Date.now()-t<864e5)}catch(e){return!1}}(m,d)),[p,f]=(0,n.useState)(null),[g,k]=(0,n.useState)(!1),[E,w]=(0,n.useState)(!1),[v,N]=(0,n.useState)(!1),[C,S]=(0,n.useState)(()=>function(){try{const e=parseInt(window.localStorage.getItem(K),10);return!!e&&Date.now()-e<432e6}catch(e){return!1}}()),x=l(),B=(0,n.useRef)(!0);(0,n.useEffect)(()=>{B.current?B.current=!1:F()&&"plan"!==e&&(N(!1),w(!0))},[e]);const Z=u&&"limit"===d,T=u&&!v&&!C&&(Z||E);if((0,n.useEffect)(()=>{T&&null===p&&b("/plan/available").then(e=>f((e.plans||[]).find(e=>!e.isFree)||!1)).catch(()=>f(!1))},[T,p]),!u)return null;const I=()=>{w(!1),N(!0)},P=()=>t("plan"),M="nudge"!==d||h?(0,o.createElement)(V,{title:(0,a.__)("You're on the free plan","erp7-order-sync-for-zoho-books"),message:(0,a.sprintf)(/* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */
     7(0,a._x)("%1$s (%2$s%%)","WooCommerce tax rate option","erp7-order-sync-for-zoho-books"),e.label,e.rate),value:String(o)}))],onChange:e=>{return""!==e&&(o=g[Number(e)],void r(e=>[...e,{id:0,woo_tax_title:o.label,woo_tax_rate:o.rate,woo_country:o.country,woo_state:o.state,zoho_tax_id:""}]));var o}})))}function C(){const e=l(),[t,r]=(0,n.useState)(null),[c,i]=(0,n.useState)([]);if((0,n.useEffect)(()=>{(async()=>{try{const[e,o]=await Promise.all([b("/mappings/gateway"),b("/zoho/accounts")]);r(e),i(o.accounts||[])}catch(o){e(z(o),"error"),r({gateways:[],paymentModes:[]})}})()},[]),null===t)return(0,o.createElement)(s.Spinner,null);const d=[{label:(0,a.__)("— Default (cash) —","erp7-order-sync-for-zoho-books"),value:""},...t.paymentModes.map(e=>({label:e,value:e}))],m=[{label:(0,a.__)("— Store default —","erp7-order-sync-for-zoho-books"),value:""},...c.map(e=>({label:e.account_name,value:e.account_id}))],u=(e,o)=>r(t=>({...t,gateways:t.gateways.map((t,r)=>r===e?{...t,...o}:t)}));return(0,o.createElement)("table",{className:"widefat striped zbwc-maptable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Payment gateway","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Zoho payment mode","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Deposit account","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null))),(0,o.createElement)("tbody",null,0===t.gateways.length&&(0,o.createElement)("tr",null,(0,o.createElement)("td",{colSpan:"4"},(0,a.__)("No gateways detected.","erp7-order-sync-for-zoho-books"))),t.gateways.map((r,n)=>(0,o.createElement)("tr",{key:r.gateway},(0,o.createElement)("td",null,r.title),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:r.zoho_payment_method||"",options:d,onChange:e=>u(n,{zoho_payment_method:e})})),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:r.deposit_account_id||"",options:m,onChange:e=>u(n,{deposit_account_id:e})})),(0,o.createElement)("td",null,(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>(async o=>{try{await y("/mappings/gateway",{gateway:o.gateway,zoho_payment_method:o.zoho_payment_method,deposit_account_id:o.deposit_account_id}),e((0,a.__)("Gateway mapping saved.","erp7-order-sync-for-zoho-books"),"success")}catch(o){e(z(o),"error")}})(t.gateways[n])},(0,a.__)("Save","erp7-order-sync-for-zoho-books")))))))}function S({inventoryRefused:e=!1}){const t=l(),[r,c]=(0,n.useState)(null),[i,d]=(0,n.useState)([]);if((0,n.useEffect)(()=>{(async()=>{try{const[e,o]=await Promise.all([b("/mappings/location"),b("/zoho/warehouses")]);c(e.locations||[]),d(o.warehouses||[])}catch(e){t(z(e),"error"),c([])}})()},[]),null===r)return null;const m=[{label:(0,a.__)("— Default warehouse —","erp7-order-sync-for-zoho-books"),value:""},...i.map(e=>({label:e.warehouse_name,value:e.warehouse_id}))],u=(e,o)=>c(t=>t.map((t,r)=>r===e?{...t,zoho_warehouse_id:o}:t)),h=async e=>{const o=i.find(o=>o.warehouse_id===e.zoho_warehouse_id);try{await y("/mappings/location",{location_id:e.location_id,location_name:e.location_name,zoho_warehouse_id:e.zoho_warehouse_id,zoho_warehouse_name:o?o.warehouse_name:""}),t((0,a.__)("Location mapping saved.","erp7-order-sync-for-zoho-books"),"success")}catch(e){t(z(e),"error")}},_=e?(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1,className:"zbwc-whwarn"},(0,a.__)("Stock cannot sync yet — Zoho declined inventory tracking for this organization. Enable Inventory in Zoho Books first (steps at the top of this page); the warehouse chosen below is saved for when it is on.","erp7-order-sync-for-zoho-books")):null;if(r.length<=1){const e=r[0]||{location_id:"default",location_name:"",zoho_warehouse_id:""};return(0,o.createElement)(w,{title:(0,a.__)("Zoho warehouse","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Where this store's stock lives in Zoho Books. WooCommerce keeps a single stock pool, so there is nothing to configure on the Woo side.","erp7-order-sync-for-zoho-books")},_,0===i.length?(0,o.createElement)("p",{className:"zbwc-muted"},(0,a.__)("Your organization has no warehouses yet — they arrive with Zoho Inventory. Until then, stock uses Zoho's default warehouse and there is nothing to choose.","erp7-order-sync-for-zoho-books")):(0,o.createElement)("div",{className:"zbwc-whpicker"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Warehouse","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Stock reads from and writes to this warehouse. Leave on default to use Zoho's primary warehouse.","erp7-order-sync-for-zoho-books"),value:e.zoho_warehouse_id||"",options:m,onChange:e=>u(0,e)}),(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>h(r[0])},(0,a.__)("Save","erp7-order-sync-for-zoho-books"))))}return(0,o.createElement)(w,{title:(0,a.__)("Zoho warehouses","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Each of your locations writes its stock into its own Zoho warehouse.","erp7-order-sync-for-zoho-books")},_,(0,o.createElement)("table",{className:"widefat striped zbwc-maptable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Location","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Zoho warehouse","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null))),(0,o.createElement)("tbody",null,r.map((e,t)=>(0,o.createElement)("tr",{key:e.location_id},(0,o.createElement)("td",null,e.location_name),(0,o.createElement)("td",null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,value:e.zoho_warehouse_id||"",options:m,onChange:e=>u(t,e)})),(0,o.createElement)("td",null,(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>h(r[t])},(0,a.__)("Save","erp7-order-sync-for-zoho-books"))))))))}function x({label:e,help:t,endpoint:r,listKey:c,optionValue:l,optionLabel:i,value:d,onChange:m,placeholder:u=(0,a.__)("— Select —","erp7-order-sync-for-zoho-books"),filter:h,formatLabel:_}){const[p,y]=(0,n.useState)([]),[f,z]=(0,n.useState)(!0);(0,n.useEffect)(()=>{let e=!0;return z(!0),b(r).then(o=>{if(!e)return;let t=o[c]||[];h&&(t=t.filter(h)),y(t)}).catch(()=>{}).finally(()=>e&&z(!1)),()=>{e=!1}},[r]);const g=[{label:f?(0,a.__)("Loading…","erp7-order-sync-for-zoho-books"):u,value:""},...p.map(e=>({label:_?_(e):String(e[i]),value:String(e[l])}))];return(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:e,help:t,value:d||"",options:g,onChange:m,disabled:f})}function B({status:e="info",children:t}){const r={ok:"is-ok",warn:"is-warn",error:"is-error",info:"is-info"}[e]||"is-info";return(0,o.createElement)("span",{className:"zbwc-pill "+r},t)}function Z({label:e=(0,a.__)("Loading…","erp7-order-sync-for-zoho-books")}){return(0,o.createElement)("div",{className:"zbwc-loading"},(0,o.createElement)(s.Spinner,null),(0,o.createElement)("span",null,e))}function T({error:e,onRetry:t}){return e?(0,o.createElement)(s.Notice,{status:"error",isDismissible:!1,className:"zbwc-error"},e,t&&(0,o.createElement)(o.Fragment,null," ",(0,o.createElement)(s.Button,{variant:"link",onClick:t},(0,a.__)("Retry","erp7-order-sync-for-zoho-books")))):null}const I=[];function P(){return[...I].sort((e,o)=>e.order-o.order)}const M={Section:w,SaveBar:v,TaxMappings:N,GatewayMappings:C,LocationMappings:S,ZohoSelect:x,Loading:Z,ErrorNotice:T,StatusPill:B,useToast:l,useAsync:g,useHashRoute:k,useSettings:E,apiGet:b,apiPost:y,apiDelete:f,errorMessage:z},D=[{slug:"dashboard",label:(0,a.__)("Dashboard","erp7-order-sync-for-zoho-books")},{slug:"orders",label:(0,a.__)("Orders","erp7-order-sync-for-zoho-books")},{slug:"customers",label:(0,a.__)("Customers","erp7-order-sync-for-zoho-books")},{slug:"products",label:(0,a.__)("Products & Inventory","erp7-order-sync-for-zoho-books")},{slug:"logs",label:(0,a.__)("Logs","erp7-order-sync-for-zoho-books")}],R={slug:"connection",label:(0,a.__)("Connection","erp7-order-sync-for-zoho-books")},O={slug:"plan",label:(0,a.__)("Plan","erp7-order-sync-for-zoho-books")};function A({route:e,navigate:t,connection:r}){return(0,o.createElement)("div",{className:"zbwc-nav"},(0,o.createElement)("div",{className:"zbwc-nav__brand"},(0,o.createElement)("span",{className:"zbwc-nav__logo dashicons dashicons-book-alt"}),(0,o.createElement)("span",null,"Zoho Integration ",(0,o.createElement)("span",{className:"zbwc-nav__sub"},"for WooCommerce"))),(0,o.createElement)("nav",{className:"zbwc-nav__tabs"},function(){const e=h.plan&&h.plan.enforced?[R,O]:[R];return[...D,...P().map(({slug:e,label:o})=>({slug:e,label:o})),...e]}().map(r=>(0,o.createElement)("button",{key:r.slug,type:"button",className:"zbwc-nav__tab"+(e===r.slug?" is-active":""),onClick:()=>t(r.slug)},r.label))),(0,o.createElement)("div",{className:"zbwc-nav__status"},r&&r.connected?(0,o.createElement)("span",{className:"zbwc-pill is-ok"},(0,a.__)("Connected","erp7-order-sync-for-zoho-books")):(0,o.createElement)("span",{className:"zbwc-pill is-warn"},(0,a.__)("Not connected","erp7-order-sync-for-zoho-books"))))}function W(){return h.plan||{}}function F(){return W().usage||{}}function H(){return!!W().enforced&&!!F().limited}function U(e){const o=W();return!o.enforced||(o.features||[]).includes(e)}function L(e){if(!H())return null;const o=(F().quotas||{})[e];return o&&o.limit?o:null}const $={orders:(0,a.__)("orders","erp7-order-sync-for-zoho-books"),products:(0,a.__)("products","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("customers","erp7-order-sync-for-zoho-books")};function j(e){return e.length<2?e[0]||"":e.slice(0,-1).join(", ")+(0,a.__)(" and ","erp7-order-sync-for-zoho-books")+e[e.length-1]}function q(e){return $[e]||e}function G(){const e=F().quotas||{};return j(Object.keys($).filter(o=>e[o]&&e[o].limit).map(o=>`${e[o].limit} ${q(o)}`))}function Y({title:e,description:t,bullets:r=[]}){const n=W(),c=!n.plan||"free"===n.plan;return(0,o.createElement)("div",{className:"zbwc-plancard"},(0,o.createElement)("span",{className:"zbwc-plancard__chip"},c?(0,a.__)("FREE PLAN","erp7-order-sync-for-zoho-books"):(0,a.__)("NOT IN YOUR PLAN","erp7-order-sync-for-zoho-books")),(0,o.createElement)("h3",{className:"zbwc-plancard__title"},e),t&&(0,o.createElement)("p",{className:"zbwc-plancard__desc"},t),r.length>0&&(0,o.createElement)("ul",{className:"zbwc-plancard__list"},r.map(e=>(0,o.createElement)("li",{key:e},(0,o.createElement)("span",{className:"dashicons dashicons-yes","aria-hidden":"true"}),e))),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-plancard__cta",href:"#/plan"},(0,a.__)("Upgrade to Pro","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-plancard__trust"},(0,o.createElement)("span",{className:"dashicons dashicons-lock","aria-hidden":"true"}),(0,a.__)("Secure checkout via Stripe","erp7-order-sync-for-zoho-books")))}const K="zbwc_plan_modal_later";function V({title:e,message:t,onUpgrade:r,onDismiss:n,urgent:c=!1}){return(0,o.createElement)("div",{className:"zbwc-planbar"+(c?" is-urgent":"")},(0,o.createElement)("span",{className:"zbwc-planbar__icon dashicons dashicons-unlock","aria-hidden":"true"}),(0,o.createElement)("div",{className:"zbwc-planbar__text"},(0,o.createElement)("strong",null,e),(0,o.createElement)("span",null,t)),(0,o.createElement)("div",{className:"zbwc-planbar__actions"},n&&(0,o.createElement)(s.Button,{variant:"tertiary",onClick:n},(0,a.__)("Not now","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-planbar__cta",onClick:r},(0,a.__)("Upgrade for unlimited sync","erp7-order-sync-for-zoho-books"))))}function J({route:e,navigate:t}){const r=F(),{full:c,nearly:i}=function(e){const o=[],t=[];return Object.entries(e).forEach(([e,r])=>{r.limit&&(r.exhausted?o.push(q(e)):r.used/r.limit>=.5&&t.push(q(e)))}),{full:o,nearly:t}}(r.quotas||{});let d="base";c.length?d="limit":i.length&&(d="nudge");const m=`zbwc_upgrade_${d}_${r.period||""}`,u=H()&&"plan"!==e,[h,_]=(0,n.useState)(()=>function(e,o){try{const t=parseInt(window.localStorage.getItem(e),10);return!!t&&("limit"!==o||Date.now()-t<864e5)}catch(e){return!1}}(m,d)),[p,f]=(0,n.useState)(null),[g,k]=(0,n.useState)(!1),[E,w]=(0,n.useState)(!1),[v,N]=(0,n.useState)(!1),[C,S]=(0,n.useState)(()=>function(){try{const e=parseInt(window.localStorage.getItem(K),10);return!!e&&Date.now()-e<432e6}catch(e){return!1}}()),x=l(),B=(0,n.useRef)(!0);(0,n.useEffect)(()=>{B.current?B.current=!1:H()&&"plan"!==e&&(N(!1),w(!0))},[e]);const Z=u&&"limit"===d,T=u&&!v&&!C&&(Z||E);if((0,n.useEffect)(()=>{T&&null===p&&b("/plan/available").then(e=>f((e.plans||[]).find(e=>!e.isFree)||!1)).catch(()=>f(!1))},[T,p]),!u)return null;const I=()=>{w(!1),N(!0)},P=()=>t("plan"),M="nudge"!==d||h?(0,o.createElement)(V,{title:(0,a.__)("You're on the free plan","erp7-order-sync-for-zoho-books"),message:(0,a.sprintf)(/* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */
    88(0,a.__)("%s sync free every month.","erp7-order-sync-for-zoho-books"),G()),onUpgrade:P}):(0,o.createElement)(V,{urgent:!0,title:(0,a.__)("Over halfway through your free plan","erp7-order-sync-for-zoho-books"),message:(0,a.sprintf)(/* translators: 1: meter names, e.g. "orders and products". 2: month. */ /* translators: 1: meter names, e.g. "orders and products". 2: month. */
    99(0,a.__)("You have used more than half your %1$s allowance for %2$s.","erp7-order-sync-for-zoho-books"),j(i),r.period),onUpgrade:P,onDismiss:()=>{try{window.localStorage.setItem(m,String(Date.now()))}catch(e){}_(!0)}});return T?(0,o.createElement)(o.Fragment,null,M,(0,o.createElement)(s.Modal,{title:Z?(0,a.__)("Your free allowance is used up","erp7-order-sync-for-zoho-books"):(0,a.__)("Enjoy unlimited monthly sync","erp7-order-sync-for-zoho-books"),onRequestClose:I,className:"zbwc-upgrade-modal"},(0,o.createElement)("div",{className:"zbwc-upgrade-modal__body"},Z?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("p",{className:"zbwc-upgrade-modal__lead"},(0,a.sprintf)(/* translators: 1: meter names, e.g. "orders and products". 2: month. */ /* translators: 1: meter names, e.g. "orders and products". 2: month. */
    1010(0,a.__)("You have used all your %1$s for %2$s, so those syncs have stopped. They start again on the 1st, or straight away on Pro.","erp7-order-sync-for-zoho-books"),j(c),r.period)),(0,o.createElement)("p",{className:"zbwc-upgrade-modal__note"},(0,a.__)("Nothing has been lost — anything already sent to Zoho Books stays there, and re-syncing an existing record is always free.","erp7-order-sync-for-zoho-books"))):(0,o.createElement)("p",{className:"zbwc-upgrade-modal__lead"},(0,a.sprintf)(/* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */
    11 (0,a.__)("The free plan includes %s synced every month. Pro removes every limit and adds inventory and warehouse sync.","erp7-order-sync-for-zoho-books"),G())),p&&(0,o.createElement)("div",{className:"zbwc-upgrade-modal__offer"},(0,o.createElement)("span",{className:"zbwc-upgrade-modal__plan"},p.name),(0,o.createElement)("span",{className:"zbwc-upgrade-modal__price"},(R=p.priceCents,D=p.currency,new Intl.NumberFormat(void 0,{style:"currency",currency:(D||"usd").toUpperCase()}).format((R||0)/100))),(0,o.createElement)("span",{className:"zbwc-upgrade-modal__per"},"/ ",p.interval)),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-upgrade-modal__cta",isBusy:g,disabled:g,onClick:async()=>{if(!p)return I(),void P();k(!0);try{const e=await y("/plan/checkout",{plan:p.slug});if(e&&e.checkoutUrl)return I(),void(window.location.href=e.checkoutUrl);I(),P()}catch(e){x(z(e),"error"),k(!1)}}},(0,a.__)("Upgrade to Pro — unlimited sync","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"link",className:"zbwc-upgrade-modal__later",disabled:g,onClick:()=>{!function(){try{window.localStorage.setItem(K,String(Date.now()))}catch(e){}}(),S(!0),I()}},(0,a.__)("Maybe later","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-upgrade-modal__trust"},(0,o.createElement)("span",{className:"dashicons dashicons-lock","aria-hidden":"true"}),(0,a.__)("Secure checkout by Stripe · Cancel anytime","erp7-order-sync-for-zoho-books"))))):M;var R,D}const Q=[(0,a.__)("Unlimited orders, products & customers","erp7-order-sync-for-zoho-books"),(0,a.__)("Inventory & warehouse sync","erp7-order-sync-for-zoho-books"),(0,a.__)("Payments, refunds & fulfilment","erp7-order-sync-for-zoho-books")];function X({navigate:e}){return F()?(0,o.createElement)("aside",{className:"zbwc-aside"},(0,o.createElement)("div",{className:"zbwc-plancard"},(0,o.createElement)("span",{className:"zbwc-plancard__chip"},(0,a.__)("FREE PLAN","erp7-order-sync-for-zoho-books")),(0,o.createElement)("h3",{className:"zbwc-plancard__title"},(0,a.__)("Go unlimited with Pro","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-plancard__desc"},(0,a.sprintf)(/* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */
     11(0,a.__)("The free plan includes %s synced every month. Pro removes every limit and adds inventory and warehouse sync.","erp7-order-sync-for-zoho-books"),G())),p&&(0,o.createElement)("div",{className:"zbwc-upgrade-modal__offer"},(0,o.createElement)("span",{className:"zbwc-upgrade-modal__plan"},p.name),(0,o.createElement)("span",{className:"zbwc-upgrade-modal__price"},(D=p.priceCents,R=p.currency,new Intl.NumberFormat(void 0,{style:"currency",currency:(R||"usd").toUpperCase()}).format((D||0)/100))),(0,o.createElement)("span",{className:"zbwc-upgrade-modal__per"},"/ ",p.interval)),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-upgrade-modal__cta",isBusy:g,disabled:g,onClick:async()=>{if(!p)return I(),void P();k(!0);try{const e=await y("/plan/checkout",{plan:p.slug});if(e&&e.checkoutUrl)return I(),void(window.location.href=e.checkoutUrl);I(),P()}catch(e){x(z(e),"error"),k(!1)}}},(0,a.__)("Upgrade to Pro — unlimited sync","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"link",className:"zbwc-upgrade-modal__later",disabled:g,onClick:()=>{!function(){try{window.localStorage.setItem(K,String(Date.now()))}catch(e){}}(),S(!0),I()}},(0,a.__)("Maybe later","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-upgrade-modal__trust"},(0,o.createElement)("span",{className:"dashicons dashicons-lock","aria-hidden":"true"}),(0,a.__)("Secure checkout by Stripe · Cancel anytime","erp7-order-sync-for-zoho-books"))))):M;var D,R}const Q=[(0,a.__)("Unlimited orders, products & customers","erp7-order-sync-for-zoho-books"),(0,a.__)("Inventory & warehouse sync","erp7-order-sync-for-zoho-books"),(0,a.__)("Payments, refunds & fulfilment","erp7-order-sync-for-zoho-books")];function X({navigate:e}){return H()?(0,o.createElement)("aside",{className:"zbwc-aside"},(0,o.createElement)("div",{className:"zbwc-plancard"},(0,o.createElement)("span",{className:"zbwc-plancard__chip"},(0,a.__)("FREE PLAN","erp7-order-sync-for-zoho-books")),(0,o.createElement)("h3",{className:"zbwc-plancard__title"},(0,a.__)("Go unlimited with Pro","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-plancard__desc"},(0,a.sprintf)(/* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the allowance, e.g. "10 orders, 10 products and 10 customers". */
    1212(0,a.__)("%s sync free every month. Pro removes every limit.","erp7-order-sync-for-zoho-books"),G())),(0,o.createElement)("ul",{className:"zbwc-plancard__list"},Q.map(e=>(0,o.createElement)("li",{key:e},(0,o.createElement)("span",{className:"dashicons dashicons-yes","aria-hidden":"true"}),e))),(0,o.createElement)(s.Button,{variant:"primary",className:"zbwc-plancard__cta",onClick:()=>e("plan")},(0,a.__)("Upgrade to Pro","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-plancard__trust"},(0,o.createElement)("span",{className:"dashicons dashicons-lock","aria-hidden":"true"}),(0,a.__)("Secure checkout via Stripe","erp7-order-sync-for-zoho-books")))):null}function ee(e){if(!e)return null;if(e instanceof Date)return isNaN(e.getTime())?null:e;if("number"==typeof e)return new Date(e);const o=String(e).trim(),t=/^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}(:\d{2})?$/.test(o)?o.replace(" ","T")+"Z":o,r=new Date(t);return isNaN(r.getTime())?null:r}function oe(e,o={dateStyle:"medium",timeStyle:"medium"}){const t=ee(e);if(!t)return e?String(e):"";try{return new Intl.DateTimeFormat(void 0,o).format(t)}catch(e){return t.toLocaleString()}}function te(e){const o=ee(e);return o?`${oe(o,{dateStyle:"full",timeStyle:"long"})} (${oe(o,{timeStyle:"medium",timeZone:"UTC"})} UTC)`:""}const re={error:"is-error",warn:"is-warn",info:"is-info",debug:"is-info"};function ne({navigate:e}){var t;const{loading:r,data:c,error:l,reload:i}=g(()=>b("/dashboard"),[]),d=c&&c.queue&&c.queue.available&&Number(c.queue.pending)||0,m=c&&c.queue&&Number(c.queue.oldestPendingMinutes)||0,u=c&&c.queue&&c.queue.available&&Number(null!==(t=c.queue.due)&&void 0!==t?t:c.queue.pending)||0,[h,_]=(0,n.useState)(!1);if((0,n.useEffect)(()=>{if(d<=0)return;const e=setInterval(i,5e3);return()=>clearInterval(e)},[d,i]),r&&!c)return(0,o.createElement)(Z,{label:(0,a.__)("Loading dashboard…","erp7-order-sync-for-zoho-books")});if(l&&!c)return(0,o.createElement)(T,{error:l,onRetry:i});const{connection:p,syncStatus:f,counts:z,logStats:k,failedCount:E,queue:v,recent:N,baseCurrency:C,usage:S,rateLimitedUntil:x=0,orders:I={}}=c,P=S&&S.limited?S.quotas||{}:null;return(0,o.createElement)("div",{className:"zbwc-page"},!p.connected&&(0,o.createElement)(w,{title:(0,a.__)("Connect to Zoho Books","erp7-order-sync-for-zoho-books")},(0,o.createElement)("p",null,(0,a.__)("You're not connected yet. Connect your Zoho Books organization to start syncing.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>e("connection")},(0,a.__)("Go to Connection","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-grid zbwc-grid--stats"},(0,o.createElement)(ae,{label:(0,a.__)("Customers mapped","erp7-order-sync-for-zoho-books"),value:z.customer_map}),(0,o.createElement)(ae,{label:(0,a.__)("Items mapped","erp7-order-sync-for-zoho-books"),value:z.item_map}),(0,o.createElement)(ae,{label:(0,a.__)("Orders synced","erp7-order-sync-for-zoho-books"),value:z.order_map,hint:I.total?(0,a.sprintf)(/* translators: %d: number of orders in WooCommerce eligible for syncing. */ /* translators: %d: number of orders in WooCommerce eligible for syncing. */
    1313(0,a.__)("of %d in WooCommerce","erp7-order-sync-for-zoho-books"),I.total):null}),(0,o.createElement)(ae,{label:(0,a.__)("Refunds / credit notes","erp7-order-sync-for-zoho-books"),value:z.refund_map})),P&&(0,o.createElement)(w,{title:(0,a.__)("This month's usage","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Re-syncing something already sent to Zoho is always free.","erp7-order-sync-for-zoho-books"),actions:(0,o.createElement)(s.Button,{variant:"secondary",href:"#/plan"},(0,a.__)("View plan","erp7-order-sync-for-zoho-books"))},(0,o.createElement)("table",{className:"zbwc-kv"},(0,o.createElement)("tbody",null,Object.entries(P).map(([e,t])=>(0,o.createElement)("tr",{key:e},(0,o.createElement)("th",null,{orders:(0,a.__)("Orders synced","erp7-order-sync-for-zoho-books"),products:(0,a.__)("Products synced","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("Customers synced","erp7-order-sync-for-zoho-books")}[e]||e),(0,o.createElement)("td",null,(0,a.sprintf)(/* translators: 1: used, 2: allowed. */ /* translators: 1: used, 2: allowed. */
    … …  
    1818(0,a.__)("Now syncing with %s.","erp7-order-sync-for-zoho-books"),w.name):(0,a.__)("Organization selected.","erp7-order-sync-for-zoho-books"),c(r,"success"),t&&t(w)}catch(e){c(z(e),"error"),k(!1)}}},isBusy:g,disabled:g||!w||!!e&&!v},v?(0,a.sprintf)(/* translators: %s: organization being switched to. */ /* translators: %s: organization being switched to. */
    1919(0,a.__)("Switch to %s","erp7-order-sync-for-zoho-books"),w.name):(0,a.__)("Use this organization","erp7-order-sync-for-zoho-books"))))}function ce(){return(0,o.createElement)("div",{className:"zbwc-ob-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-archive","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("Planning to sync stock? Enable Inventory Tracking in Zoho Books first — Settings (gear icon) → Preferences → Items. Some Zoho plans need the Zoho Inventory add-on. Products sync fine without it; stock joins in once it's on.","erp7-order-sync-for-zoho-books")))}const le={us:"com",eu:"eu",in:"in",au:"com.au",jp:"jp",ca:"ca",sa:"sa",cn:"com.cn"};function ie({region:e="us",onRechecked:t}){const r=l(),[c,i]=(0,n.useState)(!1),d="https://books.zoho."+(le[e]||"com")+"/app#/settings/preferences/items";return(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1,className:"zbwc-invnotice"},(0,o.createElement)("p",{className:"zbwc-invnotice__lead"},(0,a.__)("This Zoho organization declined stock tracking, so products sync without stock for now. To enable it:","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-invnotice__steps"},(0,o.createElement)("li",null,(0,a.__)("In Zoho Books, open Settings (the gear icon) → Preferences → Items.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,a.__)("Turn on Inventory Tracking. Some Zoho plans ask you to add the Zoho Inventory subscription here.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,a.__)("Back here, press Check again (reconnecting or switching organization also works) — otherwise it retries by itself within 12 hours.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,a.__)("Then pick a Stock-on-hand account under Products & Inventory so new items are created stock-tracked.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-invnotice__actions"},(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{i(!0);try{await y("/connection/recheck-inventory",{}),r((0,a.__)("Inventory will be tried again on the next product sync.","erp7-order-sync-for-zoho-books"),"success"),t&&t()}catch(e){r(z(e),"error")}finally{i(!1)}},isBusy:c,disabled:c},(0,a.__)("Check again","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"link",href:d,target:"_blank",rel:"noreferrer"},(0,a.__)("Open Zoho Books settings ↗","erp7-order-sync-for-zoho-books"))))}async function de(e){const o=String(e||"");if(!o)return!1;if(window.isSecureContext&&window.navigator.clipboard)try{return await window.navigator.clipboard.writeText(o),!0}catch(e){}try{const e=document.createElement("textarea");e.value=o,e.setAttribute("readonly",""),e.style.position="fixed",e.style.top="-1000px",e.style.opacity="0",document.body.appendChild(e),e.select(),e.setSelectionRange(0,o.length);const t=document.execCommand("copy");return document.body.removeChild(e),!!t}catch(e){return!1}}const me={connected:[(0,a.__)("Connected to Zoho Books.","erp7-order-sync-for-zoho-books"),"success"],error:[(0,a.__)("OAuth failed — double-check your Client ID/Secret and region.","erp7-order-sync-for-zoho-books"),"error"],denied:[(0,a.__)("Authorization was denied.","erp7-order-sync-for-zoho-books"),"error"],badstate:[(0,a.__)("The authorization session expired. Please try again.","erp7-order-sync-for-zoho-books"),"error"]};function ue({connection:e,reloadConnection:t}){const r=l(),c=e||{},[i,d]=(0,n.useState)(()=>({clientId:c.clientId||"",clientSecret:"",region:c.region||"us"})),[m,u]=(0,n.useState)(!1),[h,_]=(0,n.useState)(!1),[p,b]=(0,n.useState)(!1),g=!!c.hasRefreshToken,k=g&&!c.organizationId,E="needs_reauth"===c.connectionStatus;(0,n.useEffect)(()=>{const e=new URLSearchParams(window.location.search),o=e.get("zbwc_oauth");if(!o)return;const n=me[o];n&&r(n[0],n[1]),e.delete("zbwc_oauth"),window.history.replaceState({},"",window.location.pathname+(e.toString()?"?"+e.toString():"")+window.location.hash),"connected"===o&&t&&t()},[]);const v=(0,n.useRef)(!1);(0,n.useEffect)(()=>{k&&!v.current&&(v.current=!0,b(!0))},[k]);const N=(e,o)=>d(t=>({...t,[e]:o})),C=Object.entries(c.regions||{us:"United States (.com)"}).map(([e,o])=>({value:e,label:o})),S=async()=>{u(!0);try{await f("/connection"),v.current=!1,b(!1),r((0,a.__)("Disconnected.","erp7-order-sync-for-zoho-books"),"info"),t&&t()}catch(e){r(z(e),"error")}finally{u(!1)}},x=c.connected?(0,o.createElement)(B,{status:"ok"},(0,a.__)("Connected","erp7-order-sync-for-zoho-books")):k?(0,o.createElement)(B,{status:"warn"},(0,a.__)("Select organization","erp7-order-sync-for-zoho-books")):E?(0,o.createElement)(B,{status:"warn"},(0,a.__)("Needs re-authorization","erp7-order-sync-for-zoho-books")):(0,o.createElement)(B,{status:"warn"},(0,a.__)("Not connected","erp7-order-sync-for-zoho-books")),Z=g&&!!c.organizationId;return(0,o.createElement)("div",{className:"zbwc-page"},(Z||k)&&(0,o.createElement)(w,{title:(0,a.__)("Status","erp7-order-sync-for-zoho-books"),actions:x},Z?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("div",{className:"zbwc-connbox"+(E?" is-warn":"")},(0,o.createElement)("span",{className:"zbwc-connbox__icon","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-building"})),(0,o.createElement)("div",{className:"zbwc-connbox__body"},(0,o.createElement)("strong",{className:"zbwc-connbox__name"},c.organizationName||c.organizationId),(0,o.createElement)("span",{className:"zbwc-connbox__meta"},(0,o.createElement)("code",null,"#"+c.organizationId),(0,o.createElement)("span",null,String(c.apiDomain||c.regions&&c.regions[c.region]||c.region).replace(/^https?:\/\//,"")),c.connectedAt>0&&(0,o.createElement)("span",null,(0,a.sprintf)(/* translators: %s: date the connection was made. */ /* translators: %s: date the connection was made. */
    20 (0,a.__)("Connected %s","erp7-order-sync-for-zoho-books"),new Date(1e3*c.connectedAt).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}))))),(0,o.createElement)("div",{className:"zbwc-connbox__actions"},c.connected&&(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{u(!0);try{const e=await y("/connection/test",{});r(e.ok?(0,a.__)("Connection is healthy.","erp7-order-sync-for-zoho-books"):(0,a.__)("Zoho did not respond as expected.","erp7-order-sync-for-zoho-books"),e.ok?"success":"error")}catch(e){r(z(e),"error")}finally{u(!1)}},isBusy:m,disabled:m},(0,a.__)("Test connection","erp7-order-sync-for-zoho-books")),c.connected&&(0,o.createElement)(s.Button,{variant:"secondary",onClick:()=>b(!0),disabled:m},(0,a.__)("Change organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,onClick:S,disabled:m},(0,a.__)("Disconnect","erp7-order-sync-for-zoho-books")))),E&&(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1},(0,a.__)("Zoho stopped accepting this site's tokens. Use “Save & Reconnect to Zoho” below to authorize again — your organization and settings are kept.","erp7-order-sync-for-zoho-books")),c.inventoryRefused&&(0,o.createElement)(ie,{region:c.region,onRechecked:t})):k?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("p",{className:"zbwc-muted"},(0,a.__)("Your Zoho account is authorized — one step left: choose the organization this store syncs with.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Flex,{justify:"flex-start",gap:2,style:{marginTop:12}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>b(!0),disabled:m},(0,a.__)("Choose organization","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,onClick:S,disabled:m},(0,a.__)("Disconnect","erp7-order-sync-for-zoho-books"))))):null),(0,o.createElement)(w,{title:(0,a.__)("Zoho API client","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Create a Server-based Application in the Zoho API console, then connect this store to it.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("p",null,(0,a.__)("In the","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)(s.ExternalLink,{href:"https://api-console.zoho.com/"},(0,a.__)("Zoho API Console","erp7-order-sync-for-zoho-books"))," ",(0,a.__)("create a Server-based Application and add this exact","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("strong",null,(0,a.__)("Authorized Redirect URI","erp7-order-sync-for-zoho-books")),":"),(0,o.createElement)(s.Flex,{justify:"flex-start",align:"center",gap:2,className:"zbwc-copyrow",style:{flexWrap:"wrap"}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)("code",{className:"zbwc-code"},c.redirectUri)),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{if(await de(c.redirectUri))return _(!0),void setTimeout(()=>_(!1),2e3);r((0,a.__)("Copy failed — select the URL and copy it manually.","erp7-order-sync-for-zoho-books"),"error")}},h?(0,a.__)("Copied","erp7-order-sync-for-zoho-books"):(0,a.__)("Copy","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("div",{className:"zbwc-connfields"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Data centre / region","erp7-order-sync-for-zoho-books"),help:(0,a.__)("The Zoho domain you sign in on — .com, .eu, .in and so on.","erp7-order-sync-for-zoho-books"),value:i.region,options:C,onChange:e=>N("region",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client ID","erp7-order-sync-for-zoho-books"),value:i.clientId,onChange:e=>N("clientId",e),autoComplete:"off"}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client Secret","erp7-order-sync-for-zoho-books"),type:"password",value:i.clientSecret,placeholder:c.hasClientSecret?(0,a.__)("•••••••• (saved — leave blank to keep)","erp7-order-sync-for-zoho-books"):"",onChange:e=>N("clientSecret",e),autoComplete:"off"}),(0,o.createElement)(s.Flex,{justify:"flex-start",align:"center",gap:3,style:{flexWrap:"wrap"}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",onClick:async()=>{u(!0);try{const e={clientId:i.clientId,region:i.region};i.clientSecret&&(e.clientSecret=i.clientSecret),await y("/connection/credentials",e);const o=await y("/connection/authorize",{});window.location.href=o.authUrl}catch(e){r(z(e),"error"),u(!1)}},isBusy:m,disabled:m||!i.clientId||!i.clientSecret&&!c.hasClientSecret},g?(0,a.__)("Save & Reconnect to Zoho","erp7-order-sync-for-zoho-books"):(0,a.__)("Save & Connect to Zoho","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)("span",{className:"zbwc-muted"},(0,a.__)("Saves the credentials, then sends you to Zoho to authorize — you'll come straight back here.","erp7-order-sync-for-zoho-books")))))),p&&(0,o.createElement)(se,{currentId:c.organizationId||"",onChosen:()=>{b(!1),t&&t()},onClose:()=>b(!1)}))}function he({enabled:e=!0,reason:t,onClick:r,children:n,...a}){const c=(0,o.createElement)(s.Button,{variant:"secondary",onClick:e?r:void 0,disabled:!e,__experimentalIsFocusable:!0,...a},n);return e||!t?c:(0,o.createElement)(s.Tooltip,{text:t,delay:100,placement:"top"},c)}const _e=[{key:"lifecycle",label:(0,a.__)("Lifecycle","erp7-order-sync-for-zoho-books")},{key:"payments",label:(0,a.__)("Payments","erp7-order-sync-for-zoho-books")},{key:"taxes",label:(0,a.__)("Taxes","erp7-order-sync-for-zoho-books")},{key:"defaults",label:(0,a.__)("Defaults","erp7-order-sync-for-zoho-books")}];function pe({openTab:e}){var t,r,c;const i=E(),d=g(()=>b("/sync/stats?kind=orders"),[]),m=l(),[u,h]=(0,n.useState)(()=>_e.some(o=>o.key===e)?e:"lifecycle"),[_,p]=(0,n.useState)(!1);if(i.loading)return(0,o.createElement)(Z,{label:(0,a.__)("Loading order settings…","erp7-order-sync-for-zoho-books")});const f=e=>({checked:!!i.value(e),onChange:o=>i.set(e,o)}),k=e=>({value:i.value(e)||"",onChange:o=>i.set(e,o)}),S=d.data||{},I=!!i.value("orderSyncMasterEnabled"),P=U("payments"),M=U("refunds"),R=U("fulfillment"),D=S.needsReauth?{tone:"error",text:(0,a.__)("Reconnect needed","erp7-order-sync-for-zoho-books")}:S.connected?S.openFailures>0?{tone:"warn",text:(0,a.__)("Needs attention","erp7-order-sync-for-zoho-books")}:{tone:"ok",text:(0,a.__)("Healthy","erp7-order-sync-for-zoho-books")}:{tone:"warn",text:(0,a.__)("Not connected","erp7-order-sync-for-zoho-books")};return(0,o.createElement)("div",{className:"zbwc-page"},(0,o.createElement)(T,{error:i.error}),(0,o.createElement)("div",{className:"zbwc-pagehead"},(0,o.createElement)("h2",{className:"zbwc-pagehead__title"},(0,a.__)("Order sync","erp7-order-sync-for-zoho-books")),(0,o.createElement)(he,{enabled:!!S.connected&&I&&!_,reason:S.connected?I?"":(0,a.__)("Turn on order sync first.","erp7-order-sync-for-zoho-books"):(0,a.__)("Connect to Zoho Books first.","erp7-order-sync-for-zoho-books"),onClick:async()=>{p(!0);try{await y("/sync/run",{kind:"orders"}),m((0,a.__)("Order backfill queued.","erp7-order-sync-for-zoho-books"),"success"),setTimeout(d.reload,1200)}catch(e){m(z(e),"error")}finally{p(!1)}},isBusy:_},(0,a.__)("Run backfill","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-statbar"},(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Status","erp7-order-sync-for-zoho-books")),(0,o.createElement)(B,{status:D.tone},D.text)),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Mapped","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value"},d.loading?"—":null!==(t=S.mapped)&&void 0!==t?t:0),(0,o.createElement)("span",{className:"zbwc-statbar__sub"},(0,a.__)("orders","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Synced today","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value"},d.loading?"—":null!==(r=S.syncedToday)&&void 0!==r?r:0),(0,o.createElement)("span",{className:"zbwc-statbar__sub"},(0,a.__)("to Zoho","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Last run","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value zbwc-statbar__value--sm"},d.loading?"—":function(e){if(!e)return(0,a.__)("Never","erp7-order-sync-for-zoho-books");const o=Math.max(0,Math.floor((Date.now()-new Date(e).getTime())/1e3));if(o<60)return(0,a.__)("Just now","erp7-order-sync-for-zoho-books");const t=[[86400,(0,a.__)("d","erp7-order-sync-for-zoho-books")],[3600,(0,a.__)("h","erp7-order-sync-for-zoho-books")],[60,(0,a.__)("m","erp7-order-sync-for-zoho-books")]];for(const[e,r]of t)if(o>=e)return Math.floor(o/e)+r+(0,a.__)(" ago","erp7-order-sync-for-zoho-books");return(0,a.__)("Just now","erp7-order-sync-for-zoho-books")}(S.lastRun))),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Open failures","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value"+(S.openFailures>0?" is-bad":"")},d.loading?"—":null!==(c=S.openFailures)&&void 0!==c?c:0),(0,o.createElement)("span",{className:"zbwc-statbar__sub"},S.openFailures>0?(0,a.__)("see Logs","erp7-order-sync-for-zoho-books"):(0,a.__)("all caught up","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("div",{className:"zbwc-masterbar"+(I?"":" is-off")},(0,o.createElement)("div",{className:"zbwc-masterbar__text"},(0,o.createElement)("span",{className:"zbwc-masterbar__title"},(0,a.__)("Order sync","erp7-order-sync-for-zoho-books"),(0,o.createElement)(B,{status:I?"ok":"warn"},I?(0,a.__)("On","erp7-order-sync-for-zoho-books"):(0,a.__)("Off","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("span",{className:"zbwc-masterbar__desc"},(0,a.__)("Orders flow from WooCommerce to Zoho Books. Switch off to pause every order sync, including payments and refunds.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.Button,{variant:"secondary",isDestructive:I,onClick:()=>i.set("orderSyncMasterEnabled",!I)},I?(0,a.__)("Turn off","erp7-order-sync-for-zoho-books"):(0,a.__)("Turn on","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-subnav",role:"tablist"},_e.map(e=>(0,o.createElement)("button",{key:e.key,type:"button",role:"tab","aria-selected":u===e.key,className:"zbwc-subnav__tab"+(u===e.key?" is-active":""),onClick:()=>h(e.key)},e.label))),"lifecycle"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)("div",{className:"zbwc-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("WooCommerce is the source of truth for orders. Each row below is one event and the Zoho document it produces — orders only ever move WooCommerce → Zoho.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(w,{title:(0,a.__)("WooCommerce → Zoho Books","erp7-order-sync-for-zoho-books"),description:(0,a.__)("The document chain is kept intact: each invoice references its sales order, each payment references its invoice.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("div",{className:"zbwc-flow"},(0,o.createElement)(be,{event:(0,a.__)("Order reaches","erp7-order-sync-for-zoho-books"),eventControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Trigger status","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Processing","erp7-order-sync-for-zoho-books"),value:"processing"},{label:(0,a.__)("Completed","erp7-order-sync-for-zoho-books"),value:"completed"},{label:(0,a.__)("On hold","erp7-order-sync-for-zoho-books"),value:"on-hold"},{label:(0,a.__)("Any status","erp7-order-sync-for-zoho-books"),value:"any"}],...k("orderTriggerStatus")}),docControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Zoho document","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Sales order, then invoice","erp7-order-sync-for-zoho-books"),value:"invoice"},{label:(0,a.__)("Sales order only","erp7-order-sync-for-zoho-books"),value:"salesorder"}],...k("zohoDocumentType")}),checked:!!i.value("wooToZohoEnabled"),onChange:e=>i.set("wooToZohoEnabled",e),hint:(0,a.__)("The order itself. Everything below hangs off this document.","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order paid","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Payment recorded against the invoice","erp7-order-sync-for-zoho-books"),checked:P&&!!i.value("recordPayments"),onChange:e=>i.set("recordPayments",e),disabled:!P,badge:P?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books"),hint:(0,a.__)("Deposit account and gateway mapping live on the Payments tab.","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order refunded","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Credit note","erp7-order-sync-for-zoho-books"),checked:M&&!!i.value("syncRefunds"),onChange:e=>i.set("syncRefunds",e),disabled:!M,badge:M?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order cancelled","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Zoho documents voided","erp7-order-sync-for-zoho-books"),checked:M&&!!i.value("syncCancellations"),onChange:e=>i.set("syncCancellations",e),disabled:!M,badge:M?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Paid order cancelled","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Payment removed, then voided","erp7-order-sync-for-zoho-books"),checked:M&&!!i.value("syncCancellations")&&!!i.value("voidPaidCancellations"),onChange:e=>i.set("voidPaidCancellations",e),disabled:!M||!i.value("syncCancellations"),badge:M?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books"),hint:(0,a.__)("Zoho will not void an invoice with a payment on it. With this on, the payment this plugin recorded for the order is removed first. A payment entered in Zoho by hand, or a credit note already applied, is never touched.","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order fulfilled","erp7-order-sync-for-zoho-books"),eventControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Fulfilment status","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("On completed","erp7-order-sync-for-zoho-books"),value:"completed"},{label:(0,a.__)("On processing","erp7-order-sync-for-zoho-books"),value:"processing"}],...k("fulfillmentTriggerStatus")}),docControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Fulfilment document","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Note on the sales order","erp7-order-sync-for-zoho-books"),value:"so_note"},{label:(0,a.__)("Delivery challan","erp7-order-sync-for-zoho-books"),value:"delivery_challan"}],...k("fulfillmentMode")}),checked:R&&!!i.value("syncFulfillments"),onChange:e=>i.set("syncFulfillments",e),disabled:!R,badge:R?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books")}),R&&!!i.value("syncFulfillments")&&"delivery_challan"===i.value("fulfillmentMode")&&(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Mark the delivery challan as open","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Zoho creates challans in draft. Opening one records the shipment — but it also reserves the stock a second time, on top of the invoice this order already raised. Leave off unless you reconcile stock in Zoho yourself.","erp7-order-sync-for-zoho-books"),checked:!!i.value("challanMarkOpen"),onChange:e=>i.set("challanMarkOpen",e)}))),(0,o.createElement)(w,{title:(0,a.__)("Which orders","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Keep older orders out of Zoho Books.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,type:"date",label:(0,a.__)("Import orders from","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Orders placed before this date are never sent to Zoho: not by the backfill, and not when they change status, are paid or are refunded. Orders already in Zoho keep updating. Leave empty to include every order.","erp7-order-sync-for-zoho-books"),value:i.value("orderImportFrom")||"",onChange:e=>i.set("orderImportFrom",e)})),(0,o.createElement)(w,{title:(0,a.__)("Documents","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Document approval","erp7-order-sync-for-zoho-books"),help:(0,a.__)("A draft cannot be sent to the customer until someone approves it in Zoho.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Auto-approve (mark open)","erp7-order-sync-for-zoho-books"),value:"auto_approve"},{label:(0,a.__)("Save as draft","erp7-order-sync-for-zoho-books"),value:"save_as_draft"}],...k("approvalState")})),(0,o.createElement)(w,{title:(0,a.__)("Customer handling","erp7-order-sync-for-zoho-books"),description:(0,a.__)("What to do about the contact on each order.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("When an order has no matching Zoho contact","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Create the contact in Zoho","erp7-order-sync-for-zoho-books"),value:"create_in_zoho"},{label:(0,a.__)("Use a generic contact","erp7-order-sync-for-zoho-books"),value:"generic_contact"},{label:(0,a.__)("Skip the order","erp7-order-sync-for-zoho-books"),value:"skip"}],...k("customerCreationPolicy")}),"generic_contact"!==i.value("customerCreationPolicy")&&(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Look for an existing Zoho contact by","erp7-order-sync-for-zoho-books"),help:(0,a.__)("How an order or customer is matched to a contact already in Zoho, before one is created or the order is skipped. Matching by name puts different customers who share a name on one contact, so choose it only if names in your Zoho contacts are unique.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Email","erp7-order-sync-for-zoho-books"),value:"email"},{label:(0,a.__)("Name","erp7-order-sync-for-zoho-books"),value:"name"},{label:(0,a.__)("Email, then name","erp7-order-sync-for-zoho-books"),value:"email_then_name"}],...k("customerMatchBy")}),"generic_contact"===i.value("customerCreationPolicy")&&(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Generic Zoho contact ID","erp7-order-sync-for-zoho-books"),value:i.value("genericContactId")||"",onChange:e=>i.set("genericContactId",e)}))),"payments"===u&&(P?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("div",{className:"zbwc-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("Whether payments and refunds sync at all is set on the Lifecycle tab. These are the accounts they post to.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(w,{title:(0,a.__)("Payments","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Record payment when order status becomes","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Processing","erp7-order-sync-for-zoho-books"),value:"processing"},{label:(0,a.__)("Completed","erp7-order-sync-for-zoho-books"),value:"completed"}],...k("paymentTriggerStatus")}),(0,o.createElement)(x,{label:(0,a.__)("Deposit account","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Where payments are deposited. A gateway mapping below overrides this per gateway.","erp7-order-sync-for-zoho-books"),endpoint:"/zoho/accounts",listKey:"accounts",optionValue:"account_id",optionLabel:"account_name",value:i.value("paymentDepositAccountId"),onChange:e=>i.set("paymentDepositAccountId",e)})),(0,o.createElement)(w,{title:(0,a.__)("Refunds","erp7-order-sync-for-zoho-books")},(0,o.createElement)(x,{label:(0,a.__)("Refund from account","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Bank account cash refunds are paid from.","erp7-order-sync-for-zoho-books"),endpoint:"/zoho/accounts",listKey:"accounts",optionValue:"account_id",optionLabel:"account_name",value:i.value("refundFromAccountId"),onChange:e=>i.set("refundFromAccountId",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Credit note prefix","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Used only when custom document numbering is switched on under Defaults.","erp7-order-sync-for-zoho-books"),value:i.value("numberSeriesCreditNote")||"",onChange:e=>i.set("numberSeriesCreditNote",e)})),(0,o.createElement)(w,{title:(0,a.__)("Payment gateway mapping","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Map each gateway to a Zoho payment mode and deposit account.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(C,null))):(0,o.createElement)(Y,{title:(0,a.__)("Payments & Refunds","erp7-order-sync-for-zoho-books"),description:(0,a.__)("The money side of an order, recorded in Zoho Books.","erp7-order-sync-for-zoho-books"),bullets:[(0,a.__)("Record payments against the Zoho invoice automatically","erp7-order-sync-for-zoho-books"),(0,a.__)("Turn WooCommerce refunds into credit notes","erp7-order-sync-for-zoho-books"),(0,a.__)("Void Zoho documents when an order is cancelled","erp7-order-sync-for-zoho-books"),(0,a.__)("Record fulfilment with tracking details","erp7-order-sync-for-zoho-books")]})),"taxes"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:(0,a.__)("Tax & totals","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Tax handling","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Use WooCommerce tax to keep totals identical, or let Zoho recompute from item tax.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Use WooCommerce tax (map rates below)","erp7-order-sync-for-zoho-books"),value:"use_woo"},{label:(0,a.__)("Let Zoho Books compute tax","erp7-order-sync-for-zoho-books"),value:"recompute_in_zoho"}],...k("taxBehavior")}),(0,o.createElement)(x,{label:(0,a.__)("Tax exemption for non-taxable items","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Used for products, fees and shipping that WooCommerce does not tax, and for new Zoho items made from non-taxable products. Leave empty to send a 0% tax instead, mapped below.","erp7-order-sync-for-zoho-books"),endpoint:"/zoho/tax-exemptions",listKey:"tax_exemptions",optionValue:"tax_exemption_id",formatLabel:e=>[e.tax_exemption_code,e.description].filter(Boolean).join(" — ")||e.tax_exemption_id,placeholder:(0,a.__)("None: use a 0% tax","erp7-order-sync-for-zoho-books"),value:i.value("taxExemptionId"),onChange:e=>i.set("taxExemptionId",e)}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Add shipping as a line item","erp7-order-sync-for-zoho-books"),...f("shippingAsLineItem")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Shipping is taxable","erp7-order-sync-for-zoho-books"),...f("shippingIsTaxable")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Discount style","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Per line (baked into unit price)","erp7-order-sync-for-zoho-books"),value:"per_line"},{label:(0,a.__)("Document level","erp7-order-sync-for-zoho-books"),value:"document_level"}],...k("discountStyle")})),(0,o.createElement)(w,{title:(0,a.__)("Tax rate mapping","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Map every rate you charge. An unmapped rate is sent without tax and logged, rather than guessed at.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(N,null))),"defaults"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:(0,a.__)("Region","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Region","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Set to India to enable GST, HSN and place-of-supply handling.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Other","erp7-order-sync-for-zoho-books"),value:"OTHER"},{label:(0,a.__)("India (GST)","erp7-order-sync-for-zoho-books"),value:"IN"},{label:(0,a.__)("UAE","erp7-order-sync-for-zoho-books"),value:"AE"},{label:(0,a.__)("GCC","erp7-order-sync-for-zoho-books"),value:"GCC"}],...k("orderRegion")})),(0,o.createElement)(w,{title:(0,a.__)("India GST","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("GSTIN source","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Order meta field","erp7-order-sync-for-zoho-books"),value:"order_meta"},{label:(0,a.__)("None","erp7-order-sync-for-zoho-books"),value:"none"}],...k("gstinSource")}),"order_meta"===i.value("gstinSource")&&(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("GSTIN order-meta key","erp7-order-sync-for-zoho-books"),help:(0,a.__)("e.g. _billing_gstin","erp7-order-sync-for-zoho-books"),value:i.value("gstinMetaKey")||"",onChange:e=>i.set("gstinMetaKey",e)}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Default GST treatment (no GSTIN)","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Consumer (B2C)","erp7-order-sync-for-zoho-books"),value:"consumer"},{label:(0,a.__)("Registered business","erp7-order-sync-for-zoho-books"),value:"business_gst"},{label:(0,a.__)("Unregistered business","erp7-order-sync-for-zoho-books"),value:"business_none"},{label:(0,a.__)("Overseas","erp7-order-sync-for-zoho-books"),value:"overseas"}],...k("defaultGstTreatment")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Place of supply from","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Also decides which tax mapping applies, so intra-state and inter-state orders pick the right Zoho tax.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Shipping address","erp7-order-sync-for-zoho-books"),value:"shipping"},{label:(0,a.__)("Billing address","erp7-order-sync-for-zoho-books"),value:"billing"}],...k("placeOfSupplySource")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Skip orders without a GSTIN","erp7-order-sync-for-zoho-books"),...f("skipOrdersWithoutGstin")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("HSN/SAC source","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Product meta field","erp7-order-sync-for-zoho-books"),value:"product_meta"},{label:(0,a.__)("None","erp7-order-sync-for-zoho-books"),value:"none"}],...k("hsnSource")}),"product_meta"===i.value("hsnSource")&&(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("HSN product-meta key","erp7-order-sync-for-zoho-books"),help:(0,a.__)("e.g. _hsn_code","erp7-order-sync-for-zoho-books"),value:i.value("hsnMetaKey")||"",onChange:e=>i.set("hsnMetaKey",e)})),(0,o.createElement)(w,{title:(0,a.__)("Multi-currency","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Handle foreign-currency orders","erp7-order-sync-for-zoho-books"),...f("multiCurrencyEnabled")}),!!i.value("multiCurrencyEnabled")&&(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Exchange rate from","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Zoho Books","erp7-order-sync-for-zoho-books"),value:"zoho"},{label:(0,a.__)("WooCommerce","erp7-order-sync-for-zoho-books"),value:"woo"}],...k("exchangeRateSource")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("If currency differs from base and multi-currency is off","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Send anyway (amounts as-is)","erp7-order-sync-for-zoho-books"),value:"convert"},{label:(0,a.__)("Skip the order","erp7-order-sync-for-zoho-books"),value:"skip"}],...k("multiCurrencyMismatch")})),(0,o.createElement)(w,{title:(0,a.__)("Document numbering","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Use custom document numbers (prefix + order number)","erp7-order-sync-for-zoho-books"),...f("useCustomNumbering")}),!!i.value("useCustomNumbering")&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Sales order prefix","erp7-order-sync-for-zoho-books"),value:i.value("numberSeriesSalesOrder")||"",onChange:e=>i.set("numberSeriesSalesOrder",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Invoice prefix","erp7-order-sync-for-zoho-books"),value:i.value("numberSeriesInvoice")||"",onChange:e=>i.set("numberSeriesInvoice",e)}))),(0,o.createElement)(w,{title:(0,a.__)("Maintenance","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Write a daily reconciliation report to the log","erp7-order-sync-for-zoho-books"),...f("dailyReconEnabled")}))),(0,o.createElement)(v,{isDirty:i.isDirty,saving:i.saving,onSave:async()=>{const e=await i.save();m(e?(0,a.__)("Order settings saved.","erp7-order-sync-for-zoho-books"):i.error||(0,a.__)("Save failed","erp7-order-sync-for-zoho-books"),e?"success":"error")},onReset:i.reset}))}function be({event:e,eventControl:t,doc:r,docControl:n,checked:a,onChange:c,disabled:l,badge:i,hint:d}){return(0,o.createElement)("div",{className:"zbwc-flow__row"+(l?" is-disabled":"")},(0,o.createElement)("div",{className:"zbwc-flow__main"},(0,o.createElement)("div",{className:"zbwc-flow__event"},(0,o.createElement)("span",{className:"zbwc-flow__label"},e),i&&(0,o.createElement)("span",{className:"zbwc-flow__badge"},i),t),(0,o.createElement)("span",{className:"zbwc-flow__arrow dashicons dashicons-arrow-right-alt","aria-hidden":"true"}),(0,o.createElement)("div",{className:"zbwc-flow__doc"},n||(0,o.createElement)("span",{className:"zbwc-flow__label"},r)),(0,o.createElement)("div",{className:"zbwc-flow__switch"},(0,o.createElement)(s.CheckboxControl,{__nextHasNoMarginBottom:!0,checked:!!a,onChange:c,disabled:l,label:"","aria-label":e}))),d&&(0,o.createElement)("p",{className:"zbwc-flow__hint"},d))}function ye({name:e}){const t=L(e);if(!t)return null;let r="is-ok";return t.exhausted?r="is-full":t.used/t.limit>=.5&&(r="is-warn"),(0,o.createElement)("span",{className:`zbwc-quotachip ${r}`},(0,a.sprintf)(/* translators: 1: used this month. 2: monthly allowance. */ /* translators: 1: used this month. 2: monthly allowance. */
     20(0,a.__)("Connected %s","erp7-order-sync-for-zoho-books"),new Date(1e3*c.connectedAt).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}))))),(0,o.createElement)("div",{className:"zbwc-connbox__actions"},c.connected&&(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{u(!0);try{const e=await y("/connection/test",{});r(e.ok?(0,a.__)("Connection is healthy.","erp7-order-sync-for-zoho-books"):(0,a.__)("Zoho did not respond as expected.","erp7-order-sync-for-zoho-books"),e.ok?"success":"error")}catch(e){r(z(e),"error")}finally{u(!1)}},isBusy:m,disabled:m},(0,a.__)("Test connection","erp7-order-sync-for-zoho-books")),c.connected&&(0,o.createElement)(s.Button,{variant:"secondary",onClick:()=>b(!0),disabled:m},(0,a.__)("Change organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,onClick:S,disabled:m},(0,a.__)("Disconnect","erp7-order-sync-for-zoho-books")))),E&&(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1},(0,a.__)("Zoho stopped accepting this site's tokens. Use “Save & Reconnect to Zoho” below to authorize again — your organization and settings are kept.","erp7-order-sync-for-zoho-books")),c.inventoryRefused&&(0,o.createElement)(ie,{region:c.region,onRechecked:t})):k?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("p",{className:"zbwc-muted"},(0,a.__)("Your Zoho account is authorized — one step left: choose the organization this store syncs with.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Flex,{justify:"flex-start",gap:2,style:{marginTop:12}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>b(!0),disabled:m},(0,a.__)("Choose organization","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,onClick:S,disabled:m},(0,a.__)("Disconnect","erp7-order-sync-for-zoho-books"))))):null),(0,o.createElement)(w,{title:(0,a.__)("Zoho API client","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Create a Server-based Application in the Zoho API console, then connect this store to it.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("p",null,(0,a.__)("In the","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)(s.ExternalLink,{href:"https://api-console.zoho.com/"},(0,a.__)("Zoho API Console","erp7-order-sync-for-zoho-books"))," ",(0,a.__)("create a Server-based Application and add this exact","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("strong",null,(0,a.__)("Authorized Redirect URI","erp7-order-sync-for-zoho-books")),":"),(0,o.createElement)(s.Flex,{justify:"flex-start",align:"center",gap:2,className:"zbwc-copyrow",style:{flexWrap:"wrap"}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)("code",{className:"zbwc-code"},c.redirectUri)),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{if(await de(c.redirectUri))return _(!0),void setTimeout(()=>_(!1),2e3);r((0,a.__)("Copy failed — select the URL and copy it manually.","erp7-order-sync-for-zoho-books"),"error")}},h?(0,a.__)("Copied","erp7-order-sync-for-zoho-books"):(0,a.__)("Copy","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("div",{className:"zbwc-connfields"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Data centre / region","erp7-order-sync-for-zoho-books"),help:(0,a.__)("The Zoho domain you sign in on — .com, .eu, .in and so on.","erp7-order-sync-for-zoho-books"),value:i.region,options:C,onChange:e=>N("region",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client ID","erp7-order-sync-for-zoho-books"),value:i.clientId,onChange:e=>N("clientId",e),autoComplete:"off"}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client Secret","erp7-order-sync-for-zoho-books"),type:"password",value:i.clientSecret,placeholder:c.hasClientSecret?(0,a.__)("•••••••• (saved — leave blank to keep)","erp7-order-sync-for-zoho-books"):"",onChange:e=>N("clientSecret",e),autoComplete:"off"}),(0,o.createElement)(s.Flex,{justify:"flex-start",align:"center",gap:3,style:{flexWrap:"wrap"}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",onClick:async()=>{u(!0);try{const e={clientId:i.clientId,region:i.region};i.clientSecret&&(e.clientSecret=i.clientSecret),await y("/connection/credentials",e);const o=await y("/connection/authorize",{});window.location.href=o.authUrl}catch(e){r(z(e),"error"),u(!1)}},isBusy:m,disabled:m||!i.clientId||!i.clientSecret&&!c.hasClientSecret},g?(0,a.__)("Save & Reconnect to Zoho","erp7-order-sync-for-zoho-books"):(0,a.__)("Save & Connect to Zoho","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)("span",{className:"zbwc-muted"},(0,a.__)("Saves the credentials, then sends you to Zoho to authorize — you'll come straight back here.","erp7-order-sync-for-zoho-books")))))),p&&(0,o.createElement)(se,{currentId:c.organizationId||"",onChosen:()=>{b(!1),t&&t()},onClose:()=>b(!1)}))}function he({enabled:e=!0,reason:t,onClick:r,children:n,...a}){const c=(0,o.createElement)(s.Button,{variant:"secondary",onClick:e?r:void 0,disabled:!e,__experimentalIsFocusable:!0,...a},n);return e||!t?c:(0,o.createElement)(s.Tooltip,{text:t,delay:100,placement:"top"},c)}const _e=[{key:"lifecycle",label:(0,a.__)("Lifecycle","erp7-order-sync-for-zoho-books")},{key:"payments",label:(0,a.__)("Payments","erp7-order-sync-for-zoho-books")},{key:"taxes",label:(0,a.__)("Taxes","erp7-order-sync-for-zoho-books")},{key:"defaults",label:(0,a.__)("Defaults","erp7-order-sync-for-zoho-books")}];function pe({openTab:e}){var t,r,c;const i=E(),d=g(()=>b("/sync/stats?kind=orders"),[]),m=l(),[u,h]=(0,n.useState)(()=>_e.some(o=>o.key===e)?e:"lifecycle"),[_,p]=(0,n.useState)(!1);if(i.loading)return(0,o.createElement)(Z,{label:(0,a.__)("Loading order settings…","erp7-order-sync-for-zoho-books")});const f=e=>({checked:!!i.value(e),onChange:o=>i.set(e,o)}),k=e=>({value:i.value(e)||"",onChange:o=>i.set(e,o)}),S=d.data||{},I=!!i.value("orderSyncMasterEnabled"),P=U("payments"),M=U("refunds"),D=U("fulfillment"),R=S.needsReauth?{tone:"error",text:(0,a.__)("Reconnect needed","erp7-order-sync-for-zoho-books")}:S.connected?S.openFailures>0?{tone:"warn",text:(0,a.__)("Needs attention","erp7-order-sync-for-zoho-books")}:{tone:"ok",text:(0,a.__)("Healthy","erp7-order-sync-for-zoho-books")}:{tone:"warn",text:(0,a.__)("Not connected","erp7-order-sync-for-zoho-books")};return(0,o.createElement)("div",{className:"zbwc-page"},(0,o.createElement)(T,{error:i.error}),(0,o.createElement)("div",{className:"zbwc-pagehead"},(0,o.createElement)("h2",{className:"zbwc-pagehead__title"},(0,a.__)("Order sync","erp7-order-sync-for-zoho-books")),(0,o.createElement)(he,{enabled:!!S.connected&&I&&!_,reason:S.connected?I?"":(0,a.__)("Turn on order sync first.","erp7-order-sync-for-zoho-books"):(0,a.__)("Connect to Zoho Books first.","erp7-order-sync-for-zoho-books"),onClick:async()=>{p(!0);try{await y("/sync/run",{kind:"orders"}),m((0,a.__)("Order backfill queued.","erp7-order-sync-for-zoho-books"),"success"),setTimeout(d.reload,1200)}catch(e){m(z(e),"error")}finally{p(!1)}},isBusy:_},(0,a.__)("Run backfill","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-statbar"},(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Status","erp7-order-sync-for-zoho-books")),(0,o.createElement)(B,{status:R.tone},R.text)),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Mapped","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value"},d.loading?"—":null!==(t=S.mapped)&&void 0!==t?t:0),(0,o.createElement)("span",{className:"zbwc-statbar__sub"},(0,a.__)("orders","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Synced today","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value"},d.loading?"—":null!==(r=S.syncedToday)&&void 0!==r?r:0),(0,o.createElement)("span",{className:"zbwc-statbar__sub"},(0,a.__)("to Zoho","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Last run","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value zbwc-statbar__value--sm"},d.loading?"—":function(e){if(!e)return(0,a.__)("Never","erp7-order-sync-for-zoho-books");const o=Math.max(0,Math.floor((Date.now()-new Date(e).getTime())/1e3));if(o<60)return(0,a.__)("Just now","erp7-order-sync-for-zoho-books");const t=[[86400,(0,a.__)("d","erp7-order-sync-for-zoho-books")],[3600,(0,a.__)("h","erp7-order-sync-for-zoho-books")],[60,(0,a.__)("m","erp7-order-sync-for-zoho-books")]];for(const[e,r]of t)if(o>=e)return Math.floor(o/e)+r+(0,a.__)(" ago","erp7-order-sync-for-zoho-books");return(0,a.__)("Just now","erp7-order-sync-for-zoho-books")}(S.lastRun))),(0,o.createElement)("div",{className:"zbwc-statbar__cell"},(0,o.createElement)("span",{className:"zbwc-statbar__label"},(0,a.__)("Open failures","erp7-order-sync-for-zoho-books")),(0,o.createElement)("strong",{className:"zbwc-statbar__value"+(S.openFailures>0?" is-bad":"")},d.loading?"—":null!==(c=S.openFailures)&&void 0!==c?c:0),(0,o.createElement)("span",{className:"zbwc-statbar__sub"},S.openFailures>0?(0,a.__)("see Logs","erp7-order-sync-for-zoho-books"):(0,a.__)("all caught up","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("div",{className:"zbwc-masterbar"+(I?"":" is-off")},(0,o.createElement)("div",{className:"zbwc-masterbar__text"},(0,o.createElement)("span",{className:"zbwc-masterbar__title"},(0,a.__)("Order sync","erp7-order-sync-for-zoho-books"),(0,o.createElement)(B,{status:I?"ok":"warn"},I?(0,a.__)("On","erp7-order-sync-for-zoho-books"):(0,a.__)("Off","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("span",{className:"zbwc-masterbar__desc"},(0,a.__)("Orders flow from WooCommerce to Zoho Books. Switch off to pause every order sync, including payments and refunds.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.Button,{variant:"secondary",isDestructive:I,onClick:()=>i.set("orderSyncMasterEnabled",!I)},I?(0,a.__)("Turn off","erp7-order-sync-for-zoho-books"):(0,a.__)("Turn on","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-subnav",role:"tablist"},_e.map(e=>(0,o.createElement)("button",{key:e.key,type:"button",role:"tab","aria-selected":u===e.key,className:"zbwc-subnav__tab"+(u===e.key?" is-active":""),onClick:()=>h(e.key)},e.label))),"lifecycle"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)("div",{className:"zbwc-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("WooCommerce is the source of truth for orders. Each row below is one event and the Zoho document it produces — orders only ever move WooCommerce → Zoho.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(w,{title:(0,a.__)("WooCommerce → Zoho Books","erp7-order-sync-for-zoho-books"),description:(0,a.__)("The document chain is kept intact: each invoice references its sales order, each payment references its invoice.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("div",{className:"zbwc-flow"},(0,o.createElement)(be,{event:(0,a.__)("Order reaches","erp7-order-sync-for-zoho-books"),eventControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Trigger status","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Processing","erp7-order-sync-for-zoho-books"),value:"processing"},{label:(0,a.__)("Completed","erp7-order-sync-for-zoho-books"),value:"completed"},{label:(0,a.__)("On hold","erp7-order-sync-for-zoho-books"),value:"on-hold"},{label:(0,a.__)("Any status","erp7-order-sync-for-zoho-books"),value:"any"}],...k("orderTriggerStatus")}),docControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Zoho document","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Sales order, then invoice","erp7-order-sync-for-zoho-books"),value:"invoice"},{label:(0,a.__)("Sales order only","erp7-order-sync-for-zoho-books"),value:"salesorder"}],...k("zohoDocumentType")}),checked:!!i.value("wooToZohoEnabled"),onChange:e=>i.set("wooToZohoEnabled",e),hint:(0,a.__)("The order itself. Everything below hangs off this document.","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order paid","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Payment recorded against the invoice","erp7-order-sync-for-zoho-books"),checked:P&&!!i.value("recordPayments"),onChange:e=>i.set("recordPayments",e),disabled:!P,badge:P?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books"),hint:(0,a.__)("Deposit account and gateway mapping live on the Payments tab.","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order refunded","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Credit note","erp7-order-sync-for-zoho-books"),checked:M&&!!i.value("syncRefunds"),onChange:e=>i.set("syncRefunds",e),disabled:!M,badge:M?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order cancelled","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Zoho documents voided","erp7-order-sync-for-zoho-books"),checked:M&&!!i.value("syncCancellations"),onChange:e=>i.set("syncCancellations",e),disabled:!M,badge:M?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Paid order cancelled","erp7-order-sync-for-zoho-books"),doc:(0,a.__)("Payment removed, then voided","erp7-order-sync-for-zoho-books"),checked:M&&!!i.value("syncCancellations")&&!!i.value("voidPaidCancellations"),onChange:e=>i.set("voidPaidCancellations",e),disabled:!M||!i.value("syncCancellations"),badge:M?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books"),hint:(0,a.__)("Zoho will not void an invoice with a payment on it. With this on, the payment this plugin recorded for the order is removed first. A payment entered in Zoho by hand, or a credit note already applied, is never touched.","erp7-order-sync-for-zoho-books")}),(0,o.createElement)(be,{event:(0,a.__)("Order fulfilled","erp7-order-sync-for-zoho-books"),eventControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Fulfilment status","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("On completed","erp7-order-sync-for-zoho-books"),value:"completed"},{label:(0,a.__)("On processing","erp7-order-sync-for-zoho-books"),value:"processing"}],...k("fulfillmentTriggerStatus")}),docControl:(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,"aria-label":(0,a.__)("Fulfilment document","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Note on the sales order","erp7-order-sync-for-zoho-books"),value:"so_note"},{label:(0,a.__)("Delivery challan","erp7-order-sync-for-zoho-books"),value:"delivery_challan"}],...k("fulfillmentMode")}),checked:D&&!!i.value("syncFulfillments"),onChange:e=>i.set("syncFulfillments",e),disabled:!D,badge:D?null:(0,a.__)("Pro","erp7-order-sync-for-zoho-books")}),D&&!!i.value("syncFulfillments")&&"delivery_challan"===i.value("fulfillmentMode")&&(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Mark the delivery challan as open","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Zoho creates challans in draft. Opening one records the shipment — but it also reserves the stock a second time, on top of the invoice this order already raised. Leave off unless you reconcile stock in Zoho yourself.","erp7-order-sync-for-zoho-books"),checked:!!i.value("challanMarkOpen"),onChange:e=>i.set("challanMarkOpen",e)}))),(0,o.createElement)(w,{title:(0,a.__)("Which orders","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Keep older orders out of Zoho Books.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,type:"date",label:(0,a.__)("Import orders from","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Orders placed before this date are never sent to Zoho: not by the backfill, and not when they change status, are paid or are refunded. Orders already in Zoho keep updating. Leave empty to include every order.","erp7-order-sync-for-zoho-books"),value:i.value("orderImportFrom")||"",onChange:e=>i.set("orderImportFrom",e)})),(0,o.createElement)(w,{title:(0,a.__)("Documents","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Document approval","erp7-order-sync-for-zoho-books"),help:(0,a.__)("A draft cannot be sent to the customer until someone approves it in Zoho.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Auto-approve (mark open)","erp7-order-sync-for-zoho-books"),value:"auto_approve"},{label:(0,a.__)("Save as draft","erp7-order-sync-for-zoho-books"),value:"save_as_draft"}],...k("approvalState")})),(0,o.createElement)(w,{title:(0,a.__)("Customer handling","erp7-order-sync-for-zoho-books"),description:(0,a.__)("What to do about the contact on each order.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("When an order has no matching Zoho contact","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Create the contact in Zoho","erp7-order-sync-for-zoho-books"),value:"create_in_zoho"},{label:(0,a.__)("Use a generic contact","erp7-order-sync-for-zoho-books"),value:"generic_contact"},{label:(0,a.__)("Skip the order","erp7-order-sync-for-zoho-books"),value:"skip"}],...k("customerCreationPolicy")}),"generic_contact"!==i.value("customerCreationPolicy")&&(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Look for an existing Zoho contact by","erp7-order-sync-for-zoho-books"),help:(0,a.__)("How an order or customer is matched to a contact already in Zoho, before one is created or the order is skipped. Matching by name puts different customers who share a name on one contact, so choose it only if names in your Zoho contacts are unique.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Email","erp7-order-sync-for-zoho-books"),value:"email"},{label:(0,a.__)("Name","erp7-order-sync-for-zoho-books"),value:"name"},{label:(0,a.__)("Email, then name","erp7-order-sync-for-zoho-books"),value:"email_then_name"}],...k("customerMatchBy")}),"generic_contact"===i.value("customerCreationPolicy")&&(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Generic Zoho contact ID","erp7-order-sync-for-zoho-books"),value:i.value("genericContactId")||"",onChange:e=>i.set("genericContactId",e)}))),"payments"===u&&(P?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("div",{className:"zbwc-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("Whether payments and refunds sync at all is set on the Lifecycle tab. These are the accounts they post to.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(w,{title:(0,a.__)("Payments","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Record payment when order status becomes","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Processing","erp7-order-sync-for-zoho-books"),value:"processing"},{label:(0,a.__)("Completed","erp7-order-sync-for-zoho-books"),value:"completed"}],...k("paymentTriggerStatus")}),(0,o.createElement)(x,{label:(0,a.__)("Deposit account","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Where payments are deposited. A gateway mapping below overrides this per gateway.","erp7-order-sync-for-zoho-books"),endpoint:"/zoho/accounts",listKey:"accounts",optionValue:"account_id",optionLabel:"account_name",value:i.value("paymentDepositAccountId"),onChange:e=>i.set("paymentDepositAccountId",e)})),(0,o.createElement)(w,{title:(0,a.__)("Refunds","erp7-order-sync-for-zoho-books")},(0,o.createElement)(x,{label:(0,a.__)("Refund from account","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Bank account cash refunds are paid from.","erp7-order-sync-for-zoho-books"),endpoint:"/zoho/accounts",listKey:"accounts",optionValue:"account_id",optionLabel:"account_name",value:i.value("refundFromAccountId"),onChange:e=>i.set("refundFromAccountId",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Credit note prefix","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Used only when custom document numbering is switched on under Defaults.","erp7-order-sync-for-zoho-books"),value:i.value("numberSeriesCreditNote")||"",onChange:e=>i.set("numberSeriesCreditNote",e)})),(0,o.createElement)(w,{title:(0,a.__)("Payment gateway mapping","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Map each gateway to a Zoho payment mode and deposit account.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(C,null))):(0,o.createElement)(Y,{title:(0,a.__)("Payments & Refunds","erp7-order-sync-for-zoho-books"),description:(0,a.__)("The money side of an order, recorded in Zoho Books.","erp7-order-sync-for-zoho-books"),bullets:[(0,a.__)("Record payments against the Zoho invoice automatically","erp7-order-sync-for-zoho-books"),(0,a.__)("Turn WooCommerce refunds into credit notes","erp7-order-sync-for-zoho-books"),(0,a.__)("Void Zoho documents when an order is cancelled","erp7-order-sync-for-zoho-books"),(0,a.__)("Record fulfilment with tracking details","erp7-order-sync-for-zoho-books")]})),"taxes"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:(0,a.__)("Tax & totals","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Tax handling","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Use WooCommerce tax to keep totals identical, or let Zoho recompute from item tax.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Use WooCommerce tax (map rates below)","erp7-order-sync-for-zoho-books"),value:"use_woo"},{label:(0,a.__)("Let Zoho Books compute tax","erp7-order-sync-for-zoho-books"),value:"recompute_in_zoho"}],...k("taxBehavior")}),(0,o.createElement)(x,{label:(0,a.__)("Tax exemption for non-taxable items","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Used for products, fees and shipping that WooCommerce does not tax, and for new Zoho items made from non-taxable products. Leave empty to send a 0% tax instead, mapped below.","erp7-order-sync-for-zoho-books"),endpoint:"/zoho/tax-exemptions",listKey:"tax_exemptions",optionValue:"tax_exemption_id",formatLabel:e=>[e.tax_exemption_code,e.description].filter(Boolean).join(" — ")||e.tax_exemption_id,placeholder:(0,a.__)("None: use a 0% tax","erp7-order-sync-for-zoho-books"),value:i.value("taxExemptionId"),onChange:e=>i.set("taxExemptionId",e)}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Add shipping as a line item","erp7-order-sync-for-zoho-books"),...f("shippingAsLineItem")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Shipping is taxable","erp7-order-sync-for-zoho-books"),...f("shippingIsTaxable")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Discount style","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Per line (baked into unit price)","erp7-order-sync-for-zoho-books"),value:"per_line"},{label:(0,a.__)("Document level","erp7-order-sync-for-zoho-books"),value:"document_level"}],...k("discountStyle")})),(0,o.createElement)(w,{title:(0,a.__)("Tax rate mapping","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Map every rate you charge. An unmapped rate is sent without tax and logged, rather than guessed at.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(N,null))),"defaults"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:(0,a.__)("Region","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Region","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Set to India to enable GST, HSN and place-of-supply handling.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Other","erp7-order-sync-for-zoho-books"),value:"OTHER"},{label:(0,a.__)("India (GST)","erp7-order-sync-for-zoho-books"),value:"IN"},{label:(0,a.__)("UAE","erp7-order-sync-for-zoho-books"),value:"AE"},{label:(0,a.__)("GCC","erp7-order-sync-for-zoho-books"),value:"GCC"}],...k("orderRegion")})),(0,o.createElement)(w,{title:(0,a.__)("India GST","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("GSTIN source","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Order meta field","erp7-order-sync-for-zoho-books"),value:"order_meta"},{label:(0,a.__)("None","erp7-order-sync-for-zoho-books"),value:"none"}],...k("gstinSource")}),"order_meta"===i.value("gstinSource")&&(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("GSTIN order-meta key","erp7-order-sync-for-zoho-books"),help:(0,a.__)("e.g. _billing_gstin","erp7-order-sync-for-zoho-books"),value:i.value("gstinMetaKey")||"",onChange:e=>i.set("gstinMetaKey",e)}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Default GST treatment (no GSTIN)","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Consumer (B2C)","erp7-order-sync-for-zoho-books"),value:"consumer"},{label:(0,a.__)("Registered business","erp7-order-sync-for-zoho-books"),value:"business_gst"},{label:(0,a.__)("Unregistered business","erp7-order-sync-for-zoho-books"),value:"business_none"},{label:(0,a.__)("Overseas","erp7-order-sync-for-zoho-books"),value:"overseas"}],...k("defaultGstTreatment")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Place of supply from","erp7-order-sync-for-zoho-books"),help:(0,a.__)("Also decides which tax mapping applies, so intra-state and inter-state orders pick the right Zoho tax.","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Shipping address","erp7-order-sync-for-zoho-books"),value:"shipping"},{label:(0,a.__)("Billing address","erp7-order-sync-for-zoho-books"),value:"billing"}],...k("placeOfSupplySource")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Skip orders without a GSTIN","erp7-order-sync-for-zoho-books"),...f("skipOrdersWithoutGstin")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("HSN/SAC source","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Product meta field","erp7-order-sync-for-zoho-books"),value:"product_meta"},{label:(0,a.__)("None","erp7-order-sync-for-zoho-books"),value:"none"}],...k("hsnSource")}),"product_meta"===i.value("hsnSource")&&(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("HSN product-meta key","erp7-order-sync-for-zoho-books"),help:(0,a.__)("e.g. _hsn_code","erp7-order-sync-for-zoho-books"),value:i.value("hsnMetaKey")||"",onChange:e=>i.set("hsnMetaKey",e)})),(0,o.createElement)(w,{title:(0,a.__)("Multi-currency","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Handle foreign-currency orders","erp7-order-sync-for-zoho-books"),...f("multiCurrencyEnabled")}),!!i.value("multiCurrencyEnabled")&&(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Exchange rate from","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Zoho Books","erp7-order-sync-for-zoho-books"),value:"zoho"},{label:(0,a.__)("WooCommerce","erp7-order-sync-for-zoho-books"),value:"woo"}],...k("exchangeRateSource")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("If currency differs from base and multi-currency is off","erp7-order-sync-for-zoho-books"),options:[{label:(0,a.__)("Send anyway (amounts as-is)","erp7-order-sync-for-zoho-books"),value:"convert"},{label:(0,a.__)("Skip the order","erp7-order-sync-for-zoho-books"),value:"skip"}],...k("multiCurrencyMismatch")})),(0,o.createElement)(w,{title:(0,a.__)("Document numbering","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Use custom document numbers (prefix + order number)","erp7-order-sync-for-zoho-books"),...f("useCustomNumbering")}),!!i.value("useCustomNumbering")&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Sales order prefix","erp7-order-sync-for-zoho-books"),value:i.value("numberSeriesSalesOrder")||"",onChange:e=>i.set("numberSeriesSalesOrder",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Invoice prefix","erp7-order-sync-for-zoho-books"),value:i.value("numberSeriesInvoice")||"",onChange:e=>i.set("numberSeriesInvoice",e)}))),(0,o.createElement)(w,{title:(0,a.__)("Maintenance","erp7-order-sync-for-zoho-books")},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Write a daily reconciliation report to the log","erp7-order-sync-for-zoho-books"),...f("dailyReconEnabled")}))),(0,o.createElement)(v,{isDirty:i.isDirty,saving:i.saving,onSave:async()=>{const e=await i.save();m(e?(0,a.__)("Order settings saved.","erp7-order-sync-for-zoho-books"):i.error||(0,a.__)("Save failed","erp7-order-sync-for-zoho-books"),e?"success":"error")},onReset:i.reset}))}function be({event:e,eventControl:t,doc:r,docControl:n,checked:a,onChange:c,disabled:l,badge:i,hint:d}){return(0,o.createElement)("div",{className:"zbwc-flow__row"+(l?" is-disabled":"")},(0,o.createElement)("div",{className:"zbwc-flow__main"},(0,o.createElement)("div",{className:"zbwc-flow__event"},(0,o.createElement)("span",{className:"zbwc-flow__label"},e),i&&(0,o.createElement)("span",{className:"zbwc-flow__badge"},i),t),(0,o.createElement)("span",{className:"zbwc-flow__arrow dashicons dashicons-arrow-right-alt","aria-hidden":"true"}),(0,o.createElement)("div",{className:"zbwc-flow__doc"},n||(0,o.createElement)("span",{className:"zbwc-flow__label"},r)),(0,o.createElement)("div",{className:"zbwc-flow__switch"},(0,o.createElement)(s.CheckboxControl,{__nextHasNoMarginBottom:!0,checked:!!a,onChange:c,disabled:l,label:"","aria-label":e}))),d&&(0,o.createElement)("p",{className:"zbwc-flow__hint"},d))}function ye({name:e}){const t=L(e);if(!t)return null;let r="is-ok";return t.exhausted?r="is-full":t.used/t.limit>=.5&&(r="is-warn"),(0,o.createElement)("span",{className:`zbwc-quotachip ${r}`},(0,a.sprintf)(/* translators: 1: used this month. 2: monthly allowance. */ /* translators: 1: used this month. 2: monthly allowance. */
    2121(0,a.__)("%1$d of %2$d this month","erp7-order-sync-for-zoho-books"),t.used,t.limit))}function fe(){const e=E(),t=l(),r=L("customers");if(e.loading)return(0,o.createElement)(Z,{label:"Loading customer settings…"});const n=o=>({checked:!!e.value(o),onChange:t=>e.set(o,t)}),a=o=>({value:e.value(o)||"",onChange:t=>e.set(o,t)}),c=async(e,o)=>{try{await y("/sync/run",{kind:e}),t(`${o} queued.`,"success")}catch(e){t(z(e),"error")}},i=(o,t)=>e.value("customerSyncMasterEnabled")?e.value(o)?{enabled:!0}:{enabled:!1,reason:`Turn on "${t}" above first.`}:{enabled:!1,reason:'Turn on "Enable customer sync" above first.'};return(0,o.createElement)("div",{className:"zbwc-page"},(0,o.createElement)(T,{error:e.error}),(0,o.createElement)(w,{title:"Customer sync",description:"Keep WooCommerce customers and Zoho Books contacts in step.",actions:(0,o.createElement)(ye,{name:"customers"})},r&&(0,o.createElement)("p",{className:"zbwc-muted zbwc-quotanote"},r.exhausted?`You have created all ${r.limit} contacts included this month. Orders for new customers are held until the 1st, or straight away on a paid plan.`:`${r.remaining} of your ${r.limit} free contacts are left this month. A customer costs one the first time they reach Zoho; syncing their later changes is free.`),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Enable customer sync",...n("customerSyncMasterEnabled")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Push WooCommerce customers to Zoho Books",...n("wooToZohoCustomerEnabled")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Pull Zoho contacts into WooCommerce",...n("zohoToWooCustomerEnabled")})),(0,o.createElement)(w,{title:"Sync rules",description:"How often to pull, and how to resolve matches and conflicts."},!!e.value("zohoToWooCustomerEnabled")&&(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"Zoho → WooCommerce sync frequency",options:[{label:"Every hour",value:"1"},{label:"Every 3 hours",value:"3"},{label:"Every 6 hours",value:"6"},{label:"Every 12 hours",value:"12"},{label:"Daily",value:"24"}],...a("customerSyncFrequency")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"When no match exists",options:[{label:"Create new contacts",value:"always"},{label:"Only update existing",value:"update_only"}],...a("customerSyncCreatePolicy")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"On conflict",options:[{label:"WooCommerce wins",value:"woo_wins"},{label:"Zoho wins",value:"zoho_wins"},{label:"Last write wins",value:"last_write_wins"}],...a("customerSyncConflictPolicy")})),(0,o.createElement)(w,{title:"Sync now",description:"Queue a full re-sync in the background. Each button follows its sync toggles above."},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Also sync guest customers from orders",help:"People who checked out without an account — on most stores, the larger half. They are identified by billing address, so a repeat shopper is one contact, not one per order.",...n("syncGuestCustomers")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Include accounts that have never ordered",help:"Off keeps Zoho Books to people you have actually billed. On also sends registered customers who have not bought anything yet.",...n("backfillCustomersWithoutOrders")}),(0,o.createElement)(s.Flex,{justify:"flex-start",gap:3,wrap:!0,style:{marginTop:16}},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(he,{...i("wooToZohoCustomerEnabled","Push WooCommerce customers to Zoho Books"),onClick:()=>c("customers","Customer sync to Zoho")},"Sync all customers to Zoho")),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(he,{...i("zohoToWooCustomerEnabled","Pull Zoho contacts into WooCommerce"),onClick:()=>c("zoho_customers","Contact pull from Zoho")},"Pull all contacts from Zoho")))),(0,o.createElement)(v,{isDirty:e.isDirty,saving:e.saving,onSave:async()=>{const o=await e.save();t(o?"Customer settings saved.":e.error||"Save failed",o?"success":"error")},onReset:e.reset}))}const ze=[{label:"Product title",token:"title"},{label:"SKU",token:"sku"},{label:"Price",token:"price"},{label:"Description",token:"description"},{label:"Featured image",token:"image"}];function ge({connection:e,reloadConnection:t}){const r=E(),a=l(),c=(0,n.useRef)("woo");if(r.loading)return(0,o.createElement)(Z,{label:"Loading product settings…"});const i=e=>({checked:!!r.value(e),onChange:o=>r.set(e,o)}),d=e=>({value:r.value(e)||"",onChange:o=>r.set(e,o)}),m=r.value("catalogPushFields")||[],u=r.value("inventorySource")||"";"off"!==u&&(c.current=u);const h=U("products"),_=U("inventory"),p=L("products"),b=async(e,o)=>{try{await y("/sync/run",{kind:e}),a(`${o} queued.`,"success")}catch(e){a(z(e),"error")}},f=(e,o)=>r.value("productSyncMasterEnabled")?r.value(e)?{enabled:!0}:{enabled:!1,reason:`Turn on "${o}" above first.`}:{enabled:!1,reason:'Turn on "Enable product sync" above first.'},g="zoho"===u?{enabled:!0}:{enabled:!1,reason:'Set "Inventory source of truth" to Zoho → WooCommerce above first.'};return(0,o.createElement)("div",{className:"zbwc-page"},(0,o.createElement)(T,{error:r.error}),"off"!==u&&e&&e.inventoryRefused&&(0,o.createElement)(ie,{region:e.region,onRechecked:t}),h?(0,o.createElement)(w,{title:"Products",description:"Sync WooCommerce products with Zoho Books items.",actions:(0,o.createElement)(ye,{name:"products"})},p&&(0,o.createElement)("p",{className:"zbwc-muted zbwc-quotanote"},p.exhausted?`You have linked all ${p.limit} products included this month. Orders still sync — their lines go through by name, without a Zoho item — and the allowance resets on the 1st.`:`${p.remaining} of your ${p.limit} free product links are left this month. A product costs one the first time it reaches Zoho; re-syncing it later is free.`),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Enable product sync",...i("productSyncMasterEnabled")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Push WooCommerce products to Zoho items",...i("wooToZohoProductEnabled")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Pull Zoho items into WooCommerce products",...i("zohoToWooProductEnabled")}),!!r.value("zohoToWooProductEnabled")&&(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"How often to pull items from Zoho",help:"Names, prices and descriptions arrive on this schedule without pressing Sync now. Stock has its own schedule below.",options:[{label:"Every 15 minutes",value:"every_15_min"},{label:"Hourly",value:"hourly"},{label:"Every 6 hours",value:"every_6_hours"},{label:"Daily",value:"daily"}],...d("productPullSchedule")}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"Match items by",options:[{label:"SKU",value:"sku"},{label:"Name",value:"name"}],...d("catalogMatchBy")}),ze.map(e=>(0,o.createElement)(s.CheckboxControl,{key:e.token,__nextHasNoMarginBottom:!0,label:e.label,checked:m.includes(e.token),onChange:o=>((e,o)=>{const t=o?[...m.filter(o=>o!==e),e]:m.filter(o=>o!==e);r.set("catalogPushFields",t)})(e.token,o)})),(0,o.createElement)(x,{label:"Default tax for new items",endpoint:"/zoho/taxes",listKey:"taxes",optionValue:"tax_id",optionLabel:"tax_name",value:r.value("itemDefaultTaxId"),onChange:e=>r.set("itemDefaultTaxId",e),formatLabel:e=>{var o;return`${e.tax_name} (${null!==(o=e.tax_percentage)&&void 0!==o?o:"?"}%)`}}),(0,o.createElement)("p",{className:"zbwc-muted"},"A product needs a SKU to reach Zoho. Without one there is nothing to identify it by, so it is left out rather than matched by name onto the wrong item. Orders containing it still sync — the product is listed by name on the line."),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Upper-case SKUs to avoid duplicates",...i("itemAutoFixSkuCasing")})):(0,o.createElement)(Y,{title:"Product sync",description:"Keep your WooCommerce catalogue and Zoho Books items in step.",bullets:["Push product edits to Zoho items, field by field","Pull Zoho items into WooCommerce products","Unlimited products every month"]}),_?(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:"Stock & inventory",description:"One switch: everything stock needs lives here, and nothing here does anything while it is off."},"off"===u&&!(e&&e.inventoryRefused)&&(0,o.createElement)(ce,null),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Sync stock levels with Zoho",help:"off"===u?"Off — stock is managed in each system separately. Products and orders still sync.":"On — the settings below decide which system wins and how stock travels.",checked:"off"!==u,onChange:e=>r.set("inventorySource",e?c.current:"off")}),"off"!==u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"Which system owns stock levels?",help:"The other system follows it. Pick the one your team actually counts stock in.",options:[{label:"WooCommerce → Zoho — the store is the source of truth",value:"woo"},{label:"Zoho → WooCommerce — Zoho is the source of truth",value:"zoho"}],...d("inventorySource")}),"woo"===u&&(0,o.createElement)(x,{label:"Inventory adjustment account",help:"Where Zoho books the value of each stock change this store pushes.",endpoint:"/zoho/accounts",listKey:"accounts",optionValue:"account_id",optionLabel:"account_name",value:r.value("inventoryAdjustmentAccountId"),onChange:e=>r.set("inventoryAdjustmentAccountId",e)}),"zoho"===u&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:"How often to pull stock",options:[{label:"Every 15 minutes",value:"every_15_min"},{label:"Hourly",value:"hourly"},{label:"Every 6 hours",value:"every_6_hours"},{label:"Daily",value:"daily"}],...d("inventoryPullSchedule")}),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Allow stock to decrease on pull",help:"Off only ever raises WooCommerce stock — a guard against a half-configured Zoho warehouse zeroing the store.",...i("inventoryAllowDecreases")})),(0,o.createElement)("hr",{className:"zbwc-rule"}),(0,o.createElement)("p",{className:"zbwc-subhead"},"New items in Zoho"),(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:"Create new items as inventory-tracked",help:"Zoho can only count stock for items created this way. Needs a Zoho Inventory subscription.",...i("createAsInventory")}),!!r.value("createAsInventory")&&(0,o.createElement)(x,{label:"Stock-on-hand account",help:"The asset account new stock-tracked items book against. Without it, items are created untracked.",endpoint:"/zoho/accounts",listKey:"accounts",optionValue:"account_id",optionLabel:"account_name",value:r.value("inventoryStockAccountId"),onChange:e=>r.set("inventoryStockAccountId",e)}))),"off"!==u&&(0,o.createElement)(S,{inventoryRefused:!(!e||!e.inventoryRefused)})):(0,o.createElement)(Y,{title:"Inventory & warehouses",description:"Choose which system owns stock levels and how they flow.",bullets:["Pick WooCommerce or Zoho as the source of truth for stock","Pull stock on a schedule, as often as every 15 minutes","Map each WooCommerce location to a Zoho warehouse"]}),(h||_)&&(0,o.createElement)(w,{title:"Sync now",description:"Queue a full re-sync in the background. Each button follows its sync toggles above."},(0,o.createElement)(s.Flex,{justify:"flex-start",gap:3,wrap:!0},h&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(he,{...f("wooToZohoProductEnabled","Push WooCommerce products to Zoho items"),onClick:()=>b("products","Product sync to Zoho")},"Sync all products to Zoho")),h&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(he,{...f("zohoToWooProductEnabled","Pull Zoho items into WooCommerce products"),onClick:()=>b("zoho_products","Item pull from Zoho")},"Pull all items from Zoho")),_&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(he,{...g,onClick:()=>b("zoho_inventory","Stock pull from Zoho")},"Pull stock from Zoho")))),(0,o.createElement)(v,{isDirty:r.isDirty,saving:r.saving,onSave:async()=>{const e=await r.save();a(e?"Product settings saved.":r.error||"Save failed",e?"success":"error")},onReset:r.reset}))}const ke=7e3,Ee="__queue";function we({onNewEntries:e}){const[t,r]=(0,n.useState)(null),a=(0,n.useRef)(new Map),[s,c]=(0,n.useState)(()=>Date.now()),l=(0,n.useRef)(0),i=(0,n.useRef)(null),d=(0,n.useRef)(e);d.current=e,(0,n.useEffect)(()=>{let e=!0,o=null;const t=async()=>{let n=6e3;try{const o=await b("/logs/activity");if(!e)return;const t=Date.now(),m=o.now?1e3*o.now-t:0,u=a.current;(o.tasks||[]).forEach(e=>{if("done"===e.state){const o=u.get(e.key);u.set(e.key,{task:e,at:o?o.at:1e3*e.updated-m})}else u.has(e.key)&&u.delete(e.key)});const h=(o.queue?.pending||0)+(o.queue?.running||0);h>0?(l.current=Math.max(l.current,h),u.delete(Ee)):l.current>0&&(u.set(Ee,{total:l.current,at:t}),l.current=0),r(o),c(t),null!==i.current&&o.latest>i.current&&d.current&&d.current(),i.current=o.latest,n=(s=o)&&((s.tasks||[]).some(e=>"running"===e.state)||(s.queue?.pending||0)+(s.queue?.running||0)>0)||u.size?2e3:6e3}catch(e){n=12e3}var s;e&&(o=setTimeout(t,n))};return t(),()=>{e=!1,clearTimeout(o)}},[]);const m=a.current.size>0;(0,n.useEffect)(()=>{if(!m)return;const e=setInterval(()=>{const e=Date.now();a.current.forEach((o,t)=>{e-o.at>=ke&&a.current.delete(t)}),c(e)},150);return()=>clearInterval(e)},[m]);const u=t?.tasks||[],h=t?.queue||{},_=(h.pending||0)+(h.running||0),p=e=>s-e.at>=6400,y=[],f=new Set;u.forEach(e=>{if("done"===e.state){const t=a.current.get(e.key);return t&&s-t.at<ke&&y.push((0,o.createElement)(Ne,{key:e.key,task:t.task,leaving:p(t)})),void f.add(e.key)}y.push((0,o.createElement)(Ne,{key:e.key,task:e,leaving:!1}))}),a.current.forEach((e,t)=>{t!==Ee&&!f.has(t)&&s-e.at<ke&&y.push((0,o.createElement)(Ne,{key:t,task:e.task,leaving:p(e)}))});const z=a.current.get(Ee);return _>0?y.push((0,o.createElement)(Ce,{key:Ee,queue:h,total:l.current,leaving:!1})):z&&s-z.at<ke&&y.push((0,o.createElement)(Ce,{key:Ee,queue:h,total:z.total,leaving:p(z)})),y.length?(0,o.createElement)("div",{className:"zbwc-activity"},y):null}function ve({state:e,label:t,pct:r,meta:n,leaving:a}){const s="running"===e&&null===r,c="running"===e?r:100;return(0,o.createElement)("div",{className:"zbwc-activity__task is-"+e+(a?" is-leaving":"")},(0,o.createElement)("span",{className:"zbwc-activity__label"},"done"===e?"✓ ":"",t),(0,o.createElement)("div",{className:"zbwc-activity__bar",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":s?void 0:c,"aria-label":t},(0,o.createElement)("div",{className:"zbwc-activity__fill"+(s?" is-indeterminate":""),style:s?void 0:{width:c+"%"}})),(0,o.createElement)("span",{className:"zbwc-activity__pct"},s?"—":(null!=r?r:c)+"%"),(0,o.createElement)("span",{className:"zbwc-activity__meta",title:n},n))}function Ne({task:e,leaving:t}){const r=e.total>0,n=["done","failed"].includes(e.state)?e.state:"running",s=e.done||0,c=e.failed||0,l=e.skipped||0,i=s+c+l,d=o=>r?Math.min(100,Math.round(o/e.total*100)):null;let m,u;if("done"===n)m=e.message||(0,a.__)("Finished","erp7-order-sync-for-zoho-books"),u=100;else if("failed"===n)m=e.message||(0,a.__)("Stopped","erp7-order-sync-for-zoho-books"),u=r?d(s):0;else if(r){const o=[(0,a.sprintf)(/* translators: 1: records Zoho accepted so far, 2: records in this run. */ /* translators: 1: records Zoho accepted so far, 2: records in this run. */
    2222(0,a.__)("%1$s of %2$s sent","erp7-order-sync-for-zoho-books"),s,e.total)];c&&o.push((0,a.sprintf)(/* translators: 1: records Zoho refused, 2: Zoho's reason. */ /* translators: 1: records Zoho refused, 2: Zoho's reason. */
    … …  
    2626(0,a._n)("%d record so far","%d records so far",e.done,"erp7-order-sync-for-zoho-books"),e.done);m=e.detail?o+" · "+e.detail:o,u=null}return(0,o.createElement)(ve,{state:n,label:e.label,pct:u,meta:m,leaving:t})}function Ce({queue:e,total:t,leaving:r}){const n=(e.pending||0)+(e.running||0),s=Math.max(t,n,1),c=s-n,l=(0,a.__)("Background queue","erp7-order-sync-for-zoho-books");if(!n){const e=(0,a.sprintf)(/* translators: %d: number of background jobs that ran. */ /* translators: %d: number of background jobs that ran. */
    2727(0,a._n)("%d job done","%d jobs done",s,"erp7-order-sync-for-zoho-books"),s);return(0,o.createElement)(ve,{state:"done",label:l,pct:100,meta:e,leaving:r})}const i=(e.byHook||[]).map(e=>`${e.label} ${e.pending+e.running}`).join(" · "),d=(0,a.sprintf)(/* translators: 1: jobs finished, 2: jobs in this run. */ /* translators: 1: jobs finished, 2: jobs in this run. */
    28 (0,a.__)("%1$d of %2$d done","erp7-order-sync-for-zoho-books"),c,s);return(0,o.createElement)(ve,{state:"running",label:l,pct:Math.round(c/s*100),meta:i?d+" · "+i:d,leaving:r})}const Se=[{label:(0,a.__)("All levels","erp7-order-sync-for-zoho-books"),value:""},{label:(0,a.__)("Info","erp7-order-sync-for-zoho-books"),value:"info"},{label:(0,a.__)("Warning","erp7-order-sync-for-zoho-books"),value:"warn"},{label:(0,a.__)("Error","erp7-order-sync-for-zoho-books"),value:"error"},{label:(0,a.__)("Debug","erp7-order-sync-for-zoho-books"),value:"debug"}],xe=[{value:"order",label:(0,a.__)("Orders","erp7-order-sync-for-zoho-books")},{value:"customer",label:(0,a.__)("Customers","erp7-order-sync-for-zoho-books")},{value:"product",label:(0,a.__)("Products","erp7-order-sync-for-zoho-books")},{value:"inventory",label:(0,a.__)("Inventory","erp7-order-sync-for-zoho-books")},{value:"payment",label:(0,a.__)("Payments","erp7-order-sync-for-zoho-books")},{value:"refund",label:(0,a.__)("Refunds","erp7-order-sync-for-zoho-books")},{value:"fulfillment",label:(0,a.__)("Fulfilment","erp7-order-sync-for-zoho-books")},{value:"bulk",label:(0,a.__)("Bulk backfill","erp7-order-sync-for-zoho-books")},{value:"connection",label:(0,a.__)("Connection","erp7-order-sync-for-zoho-books")},{value:"webhook",label:(0,a.__)("Webhooks","erp7-order-sync-for-zoho-books")},{value:"system",label:(0,a.__)("System","erp7-order-sync-for-zoho-books")}],Be={error:"error",warn:"warn",info:"info",debug:"info"};function Ze(){const[e,t]=(0,n.useState)("log");return(0,o.createElement)("div",{className:"zbwc-page"},(0,o.createElement)("div",{className:"zbwc-subnav"},(0,o.createElement)("button",{type:"button",className:"zbwc-subnav__tab"+("log"===e?" is-active":""),onClick:()=>t("log")},(0,a.__)("Sync log","erp7-order-sync-for-zoho-books")),(0,o.createElement)("button",{type:"button",className:"zbwc-subnav__tab"+("failed"===e?" is-active":""),onClick:()=>t("failed")},(0,a.__)("Failed jobs","erp7-order-sync-for-zoho-books"))),"log"===e?(0,o.createElement)(Ie,null):(0,o.createElement)(Pe,null))}function Te(){const e=l(),{data:t,reload:r}=g(()=>b("/logs/share"),[]),[c,i]=(0,n.useState)(!1);if(!t)return null;const d=(0,a.__)("Customer email addresses and phone numbers are removed before anything is sent.","erp7-order-sync-for-zoho-books");let m;return m=t.enabled?t.error?(0,a.sprintf)(/* translators: %s: why the last attempt failed. */ /* translators: %s: why the last attempt failed. */
    29 (0,a.__)("The last attempt did not go through (%s). It tries again by itself.","erp7-order-sync-for-zoho-books"),t.error):t.sentAt?(0,a.sprintf)(/* translators: %s: date and time of the last batch. */ /* translators: %s: date and time of the last batch. */
    30 (0,a.__)("Sent every 5 minutes; last sent %s.","erp7-order-sync-for-zoho-books"),oe(1e3*t.sentAt,{dateStyle:"medium",timeStyle:"short"}))+" "+d:(0,a.__)("Sent every 5 minutes.","erp7-order-sync-for-zoho-books")+" "+d:(0,a.__)("Off. Switch it on so ERP7 support can see this store’s failures and help sooner.","erp7-order-sync-for-zoho-books")+" "+d,(0,o.createElement)("div",{className:"zbwc-share-log"},(0,o.createElement)(s.ToggleControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Send this log to ERP7 support","erp7-order-sync-for-zoho-books"),help:m,checked:!!t.enabled,disabled:c,onChange:async o=>{i(!0);try{await y("/logs/share",{enabled:o}),r()}catch(o){e(z(o),"error")}i(!1)}}))}function Ie(){const e=l(),[t,r]=(0,n.useState)({level:"",category:"",search:"",page:1,per_page:25}),{loading:c,data:i,error:d,reload:m}=g(()=>b("/logs?"+function(e){const o=new URLSearchParams;return Object.entries(e).forEach(([e,t])=>{""!==t&&null!=t&&o.set(e,t)}),o.toString()}(t)),[t]),u=(e,o)=>r(t=>({...t,[e]:o,page:1})),h=i?Math.max(1,Math.ceil(i.total/i.per_page)):1;return(0,o.createElement)(w,{title:(0,a.__)("Sync log","erp7-order-sync-for-zoho-books"),actions:(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,onClick:async()=>{try{await f("/logs"),e((0,a.__)("Log cleared.","erp7-order-sync-for-zoho-books"),"success"),m()}catch(o){e(z(o),"error")}}},(0,a.__)("Clear log","erp7-order-sync-for-zoho-books"))},(0,o.createElement)(Te,null),(0,o.createElement)(we,{onNewEntries:()=>1===t.page&&m()}),(0,o.createElement)("div",{className:"zbwc-filters"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Level","erp7-order-sync-for-zoho-books"),value:t.level,options:Se,onChange:e=>u("level",e)}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Category","erp7-order-sync-for-zoho-books"),value:t.category,options:[{label:(0,a.__)("All categories","erp7-order-sync-for-zoho-books"),value:""},...xe],onChange:e=>u("category",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Search","erp7-order-sync-for-zoho-books"),value:t.search,onChange:e=>u("search",e)})),(0,o.createElement)(T,{error:d,onRetry:m}),c?(0,o.createElement)(Z,null):(0,o.createElement)(o.Fragment,null,(0,o.createElement)("table",{className:"widefat striped zbwc-logtable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Time","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Level","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Category","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Message","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Resource","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("tbody",null,0===i.items.length&&(0,o.createElement)("tr",null,(0,o.createElement)("td",{colSpan:"5"},(0,a.__)("No log entries.","erp7-order-sync-for-zoho-books"))),i.items.map(e=>(0,o.createElement)("tr",{key:e.id},(0,o.createElement)("td",{className:"zbwc-nowrap",title:te(e.created_at)},oe(e.created_at)),(0,o.createElement)("td",null,(0,o.createElement)(B,{status:Be[e.level]||"info"},e.level)),(0,o.createElement)("td",null,e.category),(0,o.createElement)("td",{className:"zbwc-logtable__msg"},e.message),(0,o.createElement)("td",{className:"zbwc-logtable__res"},e.resource_name||e.resource_id||""))))),(0,o.createElement)("div",{className:"zbwc-pager"},(0,o.createElement)(s.Button,{variant:"tertiary",disabled:t.page<=1,onClick:()=>r(e=>({...e,page:e.page-1}))},(0,a.__)("‹ Prev","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",null,(0,a.sprintf)(/* translators: 1: current page number, 2: total number of pages, 3: total number of log entries. */ /* translators: 1: current page number, 2: total number of pages, 3: total number of log entries. */
    31 (0,a.__)("Page %1$s of %2$s (%3$s)","erp7-order-sync-for-zoho-books"),i.page,h,i.total)),(0,o.createElement)(s.Button,{variant:"tertiary",disabled:t.page>=h,onClick:()=>r(e=>({...e,page:e.page+1}))},(0,a.__)("Next ›","erp7-order-sync-for-zoho-books")))))}function Pe(){const e=l(),{loading:t,data:r,error:n,reload:c}=g(()=>b("/logs/failed"),[]);return(0,o.createElement)(w,{title:(0,a.__)("Failed jobs","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Jobs that exhausted their retries. Re-queue after fixing the cause.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(T,{error:n,onRetry:c}),t?(0,o.createElement)(Z,null):(0,o.createElement)("table",{className:"widefat striped zbwc-failtable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("When","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Job","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Error","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Attempts","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null))),(0,o.createElement)("tbody",null,0===r.items.length&&(0,o.createElement)("tr",null,(0,o.createElement)("td",{colSpan:"5"},(0,a.__)("No failed jobs. 🎉","erp7-order-sync-for-zoho-books"))),r.items.map(t=>(0,o.createElement)("tr",{key:t.id},(0,o.createElement)("td",{className:"zbwc-nowrap",title:te(t.last_attempt_at)},oe(t.last_attempt_at)),(0,o.createElement)("td",null,(0,o.createElement)("code",null,t.hook)),(0,o.createElement)("td",{className:"zbwc-errcell"},t.error),(0,o.createElement)("td",{className:"zbwc-failtable__attempts","data-label":(0,a.__)("Attempts","erp7-order-sync-for-zoho-books")},t.attempts),(0,o.createElement)("td",{className:"zbwc-maptable__actions"},(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>(async o=>{try{await y(`/logs/failed/${o}/retry`,{}),e((0,a.__)("Job re-queued.","erp7-order-sync-for-zoho-books"),"success"),c()}catch(o){e(z(o),"error")}})(t.id)},(0,a.__)("Retry","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"tertiary",size:"small",isDestructive:!0,onClick:()=>(async o=>{try{await f(`/logs/failed/${o}`),c()}catch(o){e(z(o),"error")}})(t.id)},(0,a.__)("Delete","erp7-order-sync-for-zoho-books"))))))))}const Me=[{icon:"cart",title:(0,a.__)("Orders sync as they happen","erp7-order-sync-for-zoho-books"),text:(0,a.__)("Every WooCommerce order becomes a sales order or invoice in Zoho Books, with its contact and line items created for you — no nightly batch, no copy-paste.","erp7-order-sync-for-zoho-books")},{icon:"update",title:(0,a.__)("Customers and products stay in step","erp7-order-sync-for-zoho-books"),text:(0,a.__)("Contacts and catalogue items are matched by SKU or name, created when an order needs them, and kept aligned as they change.","erp7-order-sync-for-zoho-books")},{icon:"shield",title:(0,a.__)("Built for audit trails","erp7-order-sync-for-zoho-books"),text:(0,a.__)("Every sync attempt is logged with what was sent. Failures retry on their own and land in one queue you can inspect and re-run.","erp7-order-sync-for-zoho-books")}];function Re({onStart:e}){return(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Sync WooCommerce with","erp7-order-sync-for-zoho-books"),(0,o.createElement)("br",null),(0,a.__)("Zoho Books in minutes","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Stop re-typing orders into your accounting. This integration keeps orders, customers, products and refunds aligned between your store and Zoho Books.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ul",{className:"zbwc-ob-features"},Me.map(e=>(0,o.createElement)("li",{key:e.icon,className:"zbwc-ob-feature"},(0,o.createElement)("span",{className:"zbwc-ob-icon","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-"+e.icon})),(0,o.createElement)("div",null,(0,o.createElement)("h3",null,e.title),(0,o.createElement)("p",null,e.text))))),(0,o.createElement)(s.Button,{variant:"primary",onClick:e},(0,a.__)("Get started →","erp7-order-sync-for-zoho-books")))}const De=[["accounts.zoho.com","United States (.com)"],["accounts.zoho.eu","Europe (.eu)"],["accounts.zoho.in","India (.in)"],["accounts.zoho.com.au","Australia (.com.au)"],["accounts.zoho.jp","Japan (.jp)"],["accounts.zohocloud.ca","Canada (.ca)"],["accounts.zoho.sa","Saudi Arabia (.sa)"],["accounts.zoho.com.cn","China (.com.cn)"]];function Oe({redirectUri:e,onClose:t}){return(0,o.createElement)(s.Modal,{title:(0,a.__)("Create your Zoho API client","erp7-order-sync-for-zoho-books"),onRequestClose:t,className:"zbwc-guide-modal"},(0,o.createElement)("p",{className:"zbwc-guide-modal__lede"},(0,a.__)('Zoho asks every store to use its own API client — a small "app" you create once in the Zoho console. About 5 minutes, no code, and your Zoho password never touches this site.',"erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-guide-modal__steps"},(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Copy your Redirect URI","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Use the Copy button next to the Authorized Redirect URI on this screen. Zoho only accepts an exact match, so always copy — never retype.","erp7-order-sync-for-zoho-books")),!!e&&(0,o.createElement)("code",{className:"zbwc-guide-modal__uri"},e)),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Open the Zoho API Console","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Go to","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("a",{href:"https://api-console.zoho.com/",target:"_blank",rel:"noreferrer"},"api-console.zoho.com")," ",(0,a.__)('and sign in with the same Zoho account that owns your Zoho Books organization. Click "Get Started" or "Add Client".',"erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('Choose "Server-based Applications"',"erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Not Self Client — this plugin uses the secure redirect flow only.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Fill the form and press Create","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)('Client Name: anything you like (e.g. "My Store — WooCommerce Sync"). Homepage URL: your store address. Authorized Redirect URIs: paste from step 1. Zoho then shows your Client ID (starts with "1000.") and Client Secret.',"erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Paste the keys here and connect","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Pick the data centre you sign in on, paste the Client ID and Secret, and press Save & Connect to Zoho. The secret is stored encrypted.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Accept, then pick your organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Zoho shows what the plugin needs (full Zoho Books access, to create orders, contacts, items and invoices). Press Accept — you land straight back here, and the organization chooser opens by itself.","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("h3",{className:"zbwc-guide-modal__h"},(0,a.__)("Which region am I on?","erp7-order-sync-for-zoho-books")),(0,o.createElement)("table",{className:"zbwc-guide-modal__table"},(0,o.createElement)("tbody",null,De.map(([e,t])=>(0,o.createElement)("tr",{key:e},(0,o.createElement)("td",null,(0,o.createElement)("code",null,e)),(0,o.createElement)("td",null,t))))),(0,o.createElement)("h3",{className:"zbwc-guide-modal__h"},(0,a.__)("If something goes wrong","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ul",{className:"zbwc-guide-modal__fixes"},(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"Invalid Redirect URI"',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("the console URI doesn't exactly match this site's. Protocol, www, and trailing slash all count. Copy again, replace, retry.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"Invalid client" or a login loop',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("region mismatch. Set the data centre to the domain you actually sign in on.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"The authorization session expired"',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("the one-time token lasts 15 minutes. Nothing is wrong — connect again.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"Authorization was denied"',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("Cancel was pressed on Zoho's screen. Connect again and press Accept.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-guide-modal__footer"},(0,o.createElement)(s.Button,{variant:"primary",onClick:t},(0,a.__)("Got it","erp7-order-sync-for-zoho-books"))))}const Ae={connected:[(0,a.__)("Connected to Zoho Books.","erp7-order-sync-for-zoho-books"),"success"],error:[(0,a.__)("OAuth failed — double-check your Client ID/Secret and region.","erp7-order-sync-for-zoho-books"),"error"],denied:[(0,a.__)("Authorization was denied.","erp7-order-sync-for-zoho-books"),"error"],badstate:[(0,a.__)("The authorization session expired. Please try again.","erp7-order-sync-for-zoho-books"),"error"]};function We({connection:e,reloadConnection:t,onOrganization:r}){const c=l(),[i,d]=(0,n.useState)({clientId:e.clientId||"",clientSecret:"",region:e.region||"us"}),[m,u]=(0,n.useState)(!1),[h,_]=(0,n.useState)(!1),[p,b]=(0,n.useState)(!1),[g,k]=(0,n.useState)(!1),E=!!e.hasRefreshToken&&!e.organizationId;(0,n.useEffect)(()=>{const e=new URLSearchParams(window.location.search),o=e.get("zbwc_oauth");if(!o)return;const r=Ae[o];r&&c(r[0],r[1]),e.delete("zbwc_oauth"),window.history.replaceState({},"",window.location.pathname+(e.toString()?"?"+e.toString():"")+window.location.hash),"connected"===o&&t&&t()},[]);const w=(0,n.useRef)(!1);(0,n.useEffect)(()=>{E&&!w.current&&(w.current=!0,u(!0))},[E]);const v=(e,o)=>d(t=>({...t,[e]:o})),N=Object.entries(e.regions||{us:"United States (.com)"}).map(([e,o])=>({value:e,label:o}));return e.connected?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Zoho Books is connected","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Your store can talk to Zoho Books. Continue to choose what should sync.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-option is-done"},(0,o.createElement)("div",{className:"zbwc-ob-option__head"},(0,o.createElement)("h3",null,(0,a.__)("Organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-ob-badge is-ok"},(0,a.__)("Connected","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("table",{className:"zbwc-kv"},(0,o.createElement)("tbody",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,e.organizationName||e.organizationId||"—")),(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Data centre","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,e.apiDomain||(e.regions||{})[e.region]||e.region))))),(0,o.createElement)(s.Button,{variant:"secondary",isDestructive:!0,onClick:async()=>{b(!0);try{await f("/connection"),w.current=!1,u(!1),c((0,a.__)("Disconnected.","erp7-order-sync-for-zoho-books"),"info"),t&&t()}catch(e){c(z(e),"error")}finally{b(!1)}},disabled:p,className:"zbwc-ob-quiet"},(0,a.__)("Disconnect and start over","erp7-order-sync-for-zoho-books"))):E?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Choose your organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Your Zoho account is authorized. Pick the Zoho Books organization this store should sync with.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-option is-done"},(0,o.createElement)("div",{className:"zbwc-ob-option__head"},(0,o.createElement)("h3",null,(0,a.__)("Organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-ob-badge is-ok"},(0,a.__)("Authorized","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("p",{className:"zbwc-ob-option__desc"},(0,a.__)("One decision left: which organization the sync writes into.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-actions"},(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>u(!0)},(0,a.__)("Choose organization","erp7-order-sync-for-zoho-books")))),m&&(0,o.createElement)(se,{onChosen:e=>{u(!1),r&&r(e.name||""),t&&t()},onClose:()=>u(!1)})):(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Connect your Zoho Books account","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Zoho asks each store to use its own API client. Create one, paste its keys below, and you'll be redirected to Zoho to authorize — we never see or store your Zoho password.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"link",className:"zbwc-ob-guidelink",onClick:()=>_(!0)},(0,a.__)("Step-by-step guide →","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-option"},(0,o.createElement)("div",{className:"zbwc-ob-option__head"},(0,o.createElement)("h3",null,(0,a.__)("Server-based Application","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-ob-badge is-ok"},(0,a.__)("Secure OAuth","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("p",{className:"zbwc-ob-option__desc"},(0,a.__)("Authorize once and the connection keeps itself alive — Zoho issues a refresh token, so there is nothing to renew by hand.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-ob-howto"},(0,o.createElement)("li",null,(0,a.__)("Open the","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)(s.ExternalLink,{href:"https://api-console.zoho.com/"},(0,a.__)("Zoho API Console","erp7-order-sync-for-zoho-books"))," ",(0,a.__)("and create a","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("strong",null,(0,a.__)("Server-based Application","erp7-order-sync-for-zoho-books")),"."),(0,o.createElement)("li",null,(0,a.__)("Paste this as its","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("strong",null,(0,a.__)("Authorized Redirect URI","erp7-order-sync-for-zoho-books")),":",(0,o.createElement)("span",{className:"zbwc-ob-copyrow"},(0,o.createElement)("code",{className:"zbwc-code"},e.redirectUri),(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{if(await de(e.redirectUri))return k(!0),void setTimeout(()=>k(!1),2e3);c((0,a.__)("Copy failed — select the URL and copy it manually.","erp7-order-sync-for-zoho-books"),"error")}},g?(0,a.__)("Copied","erp7-order-sync-for-zoho-books"):(0,a.__)("Copy","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("li",null,(0,a.__)("Copy its Client ID and Client Secret into the fields below.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-ob-fields"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Data centre / region","erp7-order-sync-for-zoho-books"),help:(0,a.__)("The Zoho domain you sign in on — .com, .eu, .in and so on.","erp7-order-sync-for-zoho-books"),value:i.region,options:N,onChange:e=>v("region",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client ID","erp7-order-sync-for-zoho-books"),value:i.clientId,onChange:e=>v("clientId",e),autoComplete:"off"}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client Secret","erp7-order-sync-for-zoho-books"),type:"password",value:i.clientSecret,placeholder:e.hasClientSecret?(0,a.__)("•••••••• (saved — leave blank to keep)","erp7-order-sync-for-zoho-books"):"",onChange:e=>v("clientSecret",e),autoComplete:"off"}))),(0,o.createElement)("div",{className:"zbwc-ob-actions"},(0,o.createElement)(s.Button,{variant:"primary",onClick:async()=>{b(!0);try{await(async()=>{const e={clientId:i.clientId,region:i.region};i.clientSecret&&(e.clientSecret=i.clientSecret),await y("/connection/credentials",e)})();const e=await y("/connection/authorize",{});window.location.href=e.authUrl}catch(e){c(z(e),"error"),b(!1)}},isBusy:p,disabled:p||!i.clientId||!i.clientSecret&&!e.hasClientSecret},(0,o.createElement)("span",{className:"dashicons dashicons-admin-links","aria-hidden":"true"}),(0,a.__)("Connect with Zoho","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"secondary",href:"https://api-console.zoho.com/",target:"_blank"},(0,a.__)("Open Zoho API Console ↗","erp7-order-sync-for-zoho-books"))),h&&(0,o.createElement)(Oe,{redirectUri:e.redirectUri,onClose:()=>_(!1)}))}const He=[{value:"invoice",label:(0,a.__)("Sales order, then invoice","erp7-order-sync-for-zoho-books")},{value:"salesorder",label:(0,a.__)("Sales order only","erp7-order-sync-for-zoho-books")}],Fe=[{value:"processing",label:(0,a.__)("Processing","erp7-order-sync-for-zoho-books")},{value:"completed",label:(0,a.__)("Completed","erp7-order-sync-for-zoho-books")},{value:"on-hold",label:(0,a.__)("On hold","erp7-order-sync-for-zoho-books")},{value:"any",label:(0,a.__)("Any status change","erp7-order-sync-for-zoho-books")}];function Ue({connection:e,orgName:t,resources:r,onToggle:n,prefs:c,setPref:l}){const i=U("payments")?(0,a.__)("Every WooCommerce order — line items, shipping, fees, coupons and tax — pushed to Zoho Books. Payments are recorded, refunds become credit notes, and cancelled orders are voided.","erp7-order-sync-for-zoho-books"):(0,a.__)("Every WooCommerce order — line items, shipping, fees, coupons and tax — pushed to Zoho Books as a sales order or invoice, with its contact and items created as needed.","erp7-order-sync-for-zoho-books"),d=U("inventory")?(0,a.__)("Each WooCommerce product and variation maps to one Zoho Books item, matched by SKU. Stock levels pull back from Zoho on a schedule you set.","erp7-order-sync-for-zoho-books"):(0,a.__)("Each WooCommerce product and variation maps to one Zoho Books item, matched by SKU, so order lines land against the right thing.","erp7-order-sync-for-zoho-books"),m=t||e.organizationName||e.organizationId,u=e.apiDomain||"";return(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Pick what to sync","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},m&&u?(0,a.sprintf)(/* translators: 1: Zoho organization name or id, 2: Zoho API domain. */ /* translators: 1: Zoho organization name or id, 2: Zoho API domain. */
    32 (0,a.__)("Connected to %1$s on %2$s. Only what you switch on here will sync — change any of it later.","erp7-order-sync-for-zoho-books"),m,u):(0,a.__)("Only what you switch on here will sync — you can change any of it later.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(Le,{icon:"cart",title:(0,a.__)("Orders & invoices","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Recommended","erp7-order-sync-for-zoho-books"),text:i,checked:r.orders,onChange:()=>n("orders")},r.orders&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Create each order as","erp7-order-sync-for-zoho-books"),value:c.zohoDocumentType,options:He,onChange:e=>l("zohoDocumentType",e)}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Send it when the order status becomes","erp7-order-sync-for-zoho-books"),value:c.orderTriggerStatus,options:Fe,onChange:e=>l("orderTriggerStatus",e)}))),(0,o.createElement)(Le,{icon:"groups",title:(0,a.__)("Customers","erp7-order-sync-for-zoho-books"),text:(0,a.__)("WooCommerce customers and guest checkouts become Zoho contacts, with billing and shipping addresses kept in step as they change.","erp7-order-sync-for-zoho-books"),checked:r.customers,onChange:()=>n("customers")}),(0,o.createElement)(Le,{icon:"products",title:(0,a.__)("Products","erp7-order-sync-for-zoho-books"),text:d,checked:r.products,onChange:()=>n("products")}),e&&e.inventoryRefused?(0,o.createElement)(ie,{region:e.region}):(0,o.createElement)(ce,null),!r.orders&&(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1,className:"zbwc-ob-inline-notice"},(0,a.__)("With orders off, nothing is sent to Zoho Books when an order is placed. You can switch it on later on the Orders tab.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-footnote"},(0,a.__)("Syncing runs in the background on WooCommerce's own Action Scheduler queue, so checkout is never held up waiting for Zoho.","erp7-order-sync-for-zoho-books")))}function Le({icon:e,title:t,badge:r,text:n,checked:a,onChange:c,children:l}){return(0,o.createElement)("div",{className:"zbwc-ob-resource"+(a?" is-on":"")},(0,o.createElement)("div",{className:"zbwc-ob-resource__main",role:"presentation",onClick:c},(0,o.createElement)("div",{className:"zbwc-ob-resource__box",role:"presentation",onClick:e=>e.stopPropagation()},(0,o.createElement)(s.CheckboxControl,{__nextHasNoMarginBottom:!0,checked:a,onChange:c,label:"","aria-label":t})),(0,o.createElement)("span",{className:"zbwc-ob-icon","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-"+e})),(0,o.createElement)("div",{className:"zbwc-ob-resource__body"},(0,o.createElement)("div",{className:"zbwc-ob-resource__head"},(0,o.createElement)("h3",null,t),r&&(0,o.createElement)("span",{className:"zbwc-ob-badge is-blue"},r)),(0,o.createElement)("p",null,n),l&&(0,o.createElement)("div",{className:"zbwc-ob-resource__prefs",role:"presentation",onClick:e=>e.stopPropagation()},l))))}function $e({connection:e,orgName:t,resources:r,onFinish:n}){const c=Object.keys(r).filter(e=>r[e]),l=!!W().enforced,i=t||e.organizationName||e.organizationId,d=(m=e.apiDomain,String(m||"").replace(/^https?:\/\//,"").replace(/^www\./,"").replace(/\/$/,""));var m;const u=[{title:(0,a.__)("Connected to Zoho Books","erp7-order-sync-for-zoho-books"),detail:[i,d].filter(Boolean).join(" · "),badge:(0,a.__)("Active","erp7-order-sync-for-zoho-books"),tone:"is-ok"},{title:(0,a.__)("Sync preferences saved","erp7-order-sync-for-zoho-books"),detail:c.length?j(c.map(e=>q(e))):(0,a.__)("Nothing switched on yet","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Saved","erp7-order-sync-for-zoho-books"),tone:"is-ok"},r.orders?{title:(0,a.__)("Order events are live","erp7-order-sync-for-zoho-books"),detail:(0,a.__)("New orders queue for Zoho as their status changes","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Live","erp7-order-sync-for-zoho-books"),tone:"is-ok"}:{title:(0,a.__)("Order sync is off","erp7-order-sync-for-zoho-books"),detail:(0,a.__)("Switch it on any time from the Orders tab","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Off","erp7-order-sync-for-zoho-books"),tone:"is-muted"}];return(0,o.createElement)("div",{className:"zbwc-ob-done"},(0,o.createElement)("span",{className:"zbwc-ob-done__check","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-yes"})),(0,o.createElement)("h2",null,(0,a.__)("You're all set","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Your store and Zoho Books are connected. New records sync automatically as they happen in WooCommerce.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ul",{className:"zbwc-ob-summary"},u.map(e=>(0,o.createElement)("li",{key:e.title,className:"zbwc-ob-summary__row"},(0,o.createElement)("span",{className:"zbwc-ob-summary__icon "+e.tone,"aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-yes"})),(0,o.createElement)("span",{className:"zbwc-ob-summary__text"},(0,o.createElement)("strong",null,e.title),e.detail&&(0,o.createElement)("span",null,e.detail)),(0,o.createElement)("span",{className:"zbwc-ob-badge "+e.tone},e.badge)))),(0,o.createElement)("div",{className:"zbwc-ob-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.sprintf)(/* translators: %s: the name of the Orders-tab button, "Run backfill". */ /* translators: %s: the name of the Orders-tab button, "Run backfill". */
    33 (0,a.__)("Already have orders in WooCommerce? Use %s on the Orders tab to send the ones you placed before today.","erp7-order-sync-for-zoho-books"),(0,a.__)("Run backfill","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("div",{className:"zbwc-ob-done__actions"},(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>n("dashboard")},(0,a.__)("Go to dashboard","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"secondary",onClick:()=>n("orders")},(0,a.__)("Review sync settings","erp7-order-sync-for-zoho-books")),l&&(0,o.createElement)(s.Button,{variant:"tertiary",onClick:()=>n("plan")},(0,a.__)("View plan","erp7-order-sync-for-zoho-books"))))}const je=[{title:(0,a.__)("Welcome","erp7-order-sync-for-zoho-books"),todo:(0,a.__)("See how the sync keeps your books aligned.","erp7-order-sync-for-zoho-books"),done:(0,a.__)("Overview of the integration.","erp7-order-sync-for-zoho-books")},{title:(0,a.__)("Connect Zoho Books","erp7-order-sync-for-zoho-books"),todo:(0,a.__)("Authorize your organization and data centre.","erp7-order-sync-for-zoho-books"),done:(0,a.__)("Organization authorized.","erp7-order-sync-for-zoho-books")},{title:(0,a.__)("Pick what to sync","erp7-order-sync-for-zoho-books"),todo:(0,a.__)("Choose the records that flow into Zoho.","erp7-order-sync-for-zoho-books"),done:(0,a.__)("Sync preferences saved.","erp7-order-sync-for-zoho-books")}],qe="undefined"!=typeof window&&window.location.search.includes("zbwc_oauth=");function Ge({connection:e,reloadConnection:t,onFinish:r}){const c=l(),[i,d]=(0,n.useState)(()=>function(e){return qe?1:e.connected?2:e.hasRefreshToken?1:0}(e)),[m,u]=(0,n.useState)(!1),[h,_]=(0,n.useState)(!1),[p,b]=(0,n.useState)(""),[f,g]=(0,n.useState)({orders:!0,customers:!0,products:!0}),[k,E]=(0,n.useState)({zohoDocumentType:"invoice",orderTriggerStatus:"processing"}),w=(0,n.useRef)(!1);(0,n.useEffect)(()=>{w.current?e.connected&&1===i&&d(2):w.current=!0},[e.connected]);const v=Object.values(f).filter(Boolean).length;return m?(0,o.createElement)("div",{className:"zbwc-onboarding"},(0,o.createElement)(Ye,null),(0,o.createElement)($e,{connection:e,orgName:p,resources:f,onFinish:r})):(0,o.createElement)("div",{className:"zbwc-onboarding"},(0,o.createElement)(Ye,null),(0,o.createElement)("div",{className:"zbwc-onboarding__titlerow"},(0,o.createElement)("h1",{className:"zbwc-onboarding__title"},(0,a.__)("Get set up","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-onboarding__chip"},(0,a.__)("Setup","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-onboarding__card"},(0,o.createElement)("div",{className:"zbwc-onboarding__panel"},(0,o.createElement)("p",{className:"zbwc-ob-eyebrow"},(0,a.sprintf)(/* translators: 1: current step number, 2: total steps, 3: step name. */ /* translators: 1: current step number, 2: total steps, 3: step name. */
    34 (0,a.__)("Step %1$d of %2$d · %3$s","erp7-order-sync-for-zoho-books"),i+1,je.length,je[i].title)),0===i&&(0,o.createElement)(Re,{onStart:()=>d(1)}),1===i&&(0,o.createElement)(We,{connection:e,reloadConnection:t,onOrganization:b}),2===i&&(0,o.createElement)(Ue,{connection:e,orgName:p,resources:f,onToggle:e=>g(o=>({...o,[e]:!o[e]})),prefs:k,setPref:(e,o)=>E(t=>({...t,[e]:o}))})),(0,o.createElement)("aside",{className:"zbwc-onboarding__aside"},(0,o.createElement)("h2",{className:"zbwc-ob-aside__title"},0===i?(0,a.__)("What's next","erp7-order-sync-for-zoho-books"):(0,a.__)("Setup progress","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-ob-progress"},je.map((e,t)=>(0,o.createElement)("li",{key:e.title,className:"zbwc-ob-progress__item"+(t===i?" is-active":"")+(t<i?" is-done":"")},(0,o.createElement)("span",{className:"zbwc-ob-progress__num","aria-hidden":"true"},t<i?(0,o.createElement)("span",{className:"dashicons dashicons-yes"}):t+1),(0,o.createElement)("span",{className:"zbwc-ob-progress__text"},(0,o.createElement)("strong",null,e.title),(0,o.createElement)("span",null,t<i?e.done:e.todo))))),(0,o.createElement)(Ke,{step:i,connection:e,selectedCount:v,total:Object.keys(f).length}))),i>0&&(0,o.createElement)("div",{className:"zbwc-ob-nav"},(0,o.createElement)(s.Button,{variant:"secondary",onClick:()=>d(i-1)},(0,a.__)("← Back","erp7-order-sync-for-zoho-books")),1===i?(0,o.createElement)(s.Button,{variant:"primary",disabled:!e.connected,onClick:()=>d(2)},e.connected?(0,a.__)("Continue →","erp7-order-sync-for-zoho-books"):(0,a.__)("Connect to continue","erp7-order-sync-for-zoho-books")):(0,o.createElement)(s.Button,{variant:"primary",onClick:async()=>{_(!0);try{await y("/settings",{settings:{onboardingCompleted:!0,orderSyncMasterEnabled:f.orders,wooToZohoEnabled:!0,zohoDocumentType:k.zohoDocumentType,orderTriggerStatus:k.orderTriggerStatus,customerSyncMasterEnabled:f.customers,wooToZohoCustomerEnabled:!0,productSyncMasterEnabled:f.products,wooToZohoProductEnabled:!0}}),u(!0)}catch(e){c(z(e),"error")}finally{_(!1)}},isBusy:h,disabled:h},(0,a.__)("Save and finish →","erp7-order-sync-for-zoho-books"))))}function Ye(){return(0,o.createElement)("div",{className:"zbwc-onboarding__bar"},(0,o.createElement)("span",{className:"zbwc-onboarding__logo dashicons dashicons-book-alt","aria-hidden":"true"}),(0,o.createElement)("span",{className:"zbwc-onboarding__brand"},(0,a.__)("Zoho Books Integration For WooCommerce","erp7-order-sync-for-zoho-books")))}function Ke({step:e,connection:t,selectedCount:r,total:n}){if(0===e){const e=Object.keys(t.regions||{}).map(e=>e.toUpperCase()).join(", ");return(0,o.createElement)("ul",{className:"zbwc-ob-facts"},(0,o.createElement)("li",null,(0,a.__)("Secure OAuth — your Zoho password never touches this site.","erp7-order-sync-for-zoho-books")),e&&(0,o.createElement)("li",null,(0,a.sprintf)(/* translators: %s: comma-separated data centre codes, e.g. "US, EU, IN". */ /* translators: %s: comma-separated data centre codes, e.g. "US, EU, IN". */
     28(0,a.__)("%1$d of %2$d done","erp7-order-sync-for-zoho-books"),c,s);return(0,o.createElement)(ve,{state:"running",label:l,pct:Math.round(c/s*100),meta:i?d+" · "+i:d,leaving:r})}const Se=[{label:(0,a.__)("All levels","erp7-order-sync-for-zoho-books"),value:""},{label:(0,a.__)("Info","erp7-order-sync-for-zoho-books"),value:"info"},{label:(0,a.__)("Warning","erp7-order-sync-for-zoho-books"),value:"warn"},{label:(0,a.__)("Error","erp7-order-sync-for-zoho-books"),value:"error"},{label:(0,a.__)("Debug","erp7-order-sync-for-zoho-books"),value:"debug"}],xe=[{value:"order",label:(0,a.__)("Orders","erp7-order-sync-for-zoho-books")},{value:"customer",label:(0,a.__)("Customers","erp7-order-sync-for-zoho-books")},{value:"product",label:(0,a.__)("Products","erp7-order-sync-for-zoho-books")},{value:"inventory",label:(0,a.__)("Inventory","erp7-order-sync-for-zoho-books")},{value:"payment",label:(0,a.__)("Payments","erp7-order-sync-for-zoho-books")},{value:"refund",label:(0,a.__)("Refunds","erp7-order-sync-for-zoho-books")},{value:"fulfillment",label:(0,a.__)("Fulfilment","erp7-order-sync-for-zoho-books")},{value:"bulk",label:(0,a.__)("Bulk backfill","erp7-order-sync-for-zoho-books")},{value:"connection",label:(0,a.__)("Connection","erp7-order-sync-for-zoho-books")},{value:"webhook",label:(0,a.__)("Webhooks","erp7-order-sync-for-zoho-books")},{value:"system",label:(0,a.__)("System","erp7-order-sync-for-zoho-books")}],Be={error:"error",warn:"warn",info:"info",debug:"info"};function Ze(){const[e,t]=(0,n.useState)("log");return(0,o.createElement)("div",{className:"zbwc-page"},(0,o.createElement)("div",{className:"zbwc-subnav"},(0,o.createElement)("button",{type:"button",className:"zbwc-subnav__tab"+("log"===e?" is-active":""),onClick:()=>t("log")},(0,a.__)("Sync log","erp7-order-sync-for-zoho-books")),(0,o.createElement)("button",{type:"button",className:"zbwc-subnav__tab"+("failed"===e?" is-active":""),onClick:()=>t("failed")},(0,a.__)("Failed jobs","erp7-order-sync-for-zoho-books"))),"log"===e?(0,o.createElement)(Te,null):(0,o.createElement)(Ie,null))}function Te(){const e=l(),[t,r]=(0,n.useState)({level:"",category:"",search:"",page:1,per_page:25}),{loading:c,data:i,error:d,reload:m}=g(()=>b("/logs?"+function(e){const o=new URLSearchParams;return Object.entries(e).forEach(([e,t])=>{""!==t&&null!=t&&o.set(e,t)}),o.toString()}(t)),[t]),u=(e,o)=>r(t=>({...t,[e]:o,page:1})),h=i?Math.max(1,Math.ceil(i.total/i.per_page)):1;return(0,o.createElement)(w,{title:(0,a.__)("Sync log","erp7-order-sync-for-zoho-books"),actions:(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,onClick:async()=>{try{await f("/logs"),e((0,a.__)("Log cleared.","erp7-order-sync-for-zoho-books"),"success"),m()}catch(o){e(z(o),"error")}}},(0,a.__)("Clear log","erp7-order-sync-for-zoho-books"))},(0,o.createElement)(we,{onNewEntries:()=>1===t.page&&m()}),(0,o.createElement)("div",{className:"zbwc-filters"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Level","erp7-order-sync-for-zoho-books"),value:t.level,options:Se,onChange:e=>u("level",e)}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Category","erp7-order-sync-for-zoho-books"),value:t.category,options:[{label:(0,a.__)("All categories","erp7-order-sync-for-zoho-books"),value:""},...xe],onChange:e=>u("category",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Search","erp7-order-sync-for-zoho-books"),value:t.search,onChange:e=>u("search",e)})),(0,o.createElement)(T,{error:d,onRetry:m}),c?(0,o.createElement)(Z,null):(0,o.createElement)(o.Fragment,null,(0,o.createElement)("table",{className:"widefat striped zbwc-logtable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Time","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Level","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Category","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Message","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Resource","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("tbody",null,0===i.items.length&&(0,o.createElement)("tr",null,(0,o.createElement)("td",{colSpan:"5"},(0,a.__)("No log entries.","erp7-order-sync-for-zoho-books"))),i.items.map(e=>(0,o.createElement)("tr",{key:e.id},(0,o.createElement)("td",{className:"zbwc-nowrap",title:te(e.created_at)},oe(e.created_at)),(0,o.createElement)("td",null,(0,o.createElement)(B,{status:Be[e.level]||"info"},e.level)),(0,o.createElement)("td",null,e.category),(0,o.createElement)("td",{className:"zbwc-logtable__msg"},e.message),(0,o.createElement)("td",{className:"zbwc-logtable__res"},e.resource_name||e.resource_id||""))))),(0,o.createElement)("div",{className:"zbwc-pager"},(0,o.createElement)(s.Button,{variant:"tertiary",disabled:t.page<=1,onClick:()=>r(e=>({...e,page:e.page-1}))},(0,a.__)("‹ Prev","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",null,(0,a.sprintf)(/* translators: 1: current page number, 2: total number of pages, 3: total number of log entries. */ /* translators: 1: current page number, 2: total number of pages, 3: total number of log entries. */
     29(0,a.__)("Page %1$s of %2$s (%3$s)","erp7-order-sync-for-zoho-books"),i.page,h,i.total)),(0,o.createElement)(s.Button,{variant:"tertiary",disabled:t.page>=h,onClick:()=>r(e=>({...e,page:e.page+1}))},(0,a.__)("Next ›","erp7-order-sync-for-zoho-books")))))}function Ie(){const e=l(),{loading:t,data:r,error:n,reload:c}=g(()=>b("/logs/failed"),[]);return(0,o.createElement)(w,{title:(0,a.__)("Failed jobs","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Jobs that exhausted their retries. Re-queue after fixing the cause.","erp7-order-sync-for-zoho-books")},(0,o.createElement)(T,{error:n,onRetry:c}),t?(0,o.createElement)(Z,null):(0,o.createElement)("table",{className:"widefat striped zbwc-failtable"},(0,o.createElement)("thead",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("When","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Job","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Error","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null,(0,a.__)("Attempts","erp7-order-sync-for-zoho-books")),(0,o.createElement)("th",null))),(0,o.createElement)("tbody",null,0===r.items.length&&(0,o.createElement)("tr",null,(0,o.createElement)("td",{colSpan:"5"},(0,a.__)("No failed jobs. 🎉","erp7-order-sync-for-zoho-books"))),r.items.map(t=>(0,o.createElement)("tr",{key:t.id},(0,o.createElement)("td",{className:"zbwc-nowrap",title:te(t.last_attempt_at)},oe(t.last_attempt_at)),(0,o.createElement)("td",null,(0,o.createElement)("code",null,t.hook)),(0,o.createElement)("td",{className:"zbwc-errcell"},t.error),(0,o.createElement)("td",{className:"zbwc-failtable__attempts","data-label":(0,a.__)("Attempts","erp7-order-sync-for-zoho-books")},t.attempts),(0,o.createElement)("td",{className:"zbwc-maptable__actions"},(0,o.createElement)(s.Button,{variant:"primary",size:"small",onClick:()=>(async o=>{try{await y(`/logs/failed/${o}/retry`,{}),e((0,a.__)("Job re-queued.","erp7-order-sync-for-zoho-books"),"success"),c()}catch(o){e(z(o),"error")}})(t.id)},(0,a.__)("Retry","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"tertiary",size:"small",isDestructive:!0,onClick:()=>(async o=>{try{await f(`/logs/failed/${o}`),c()}catch(o){e(z(o),"error")}})(t.id)},(0,a.__)("Delete","erp7-order-sync-for-zoho-books"))))))))}const Pe=[{icon:"cart",title:(0,a.__)("Orders sync as they happen","erp7-order-sync-for-zoho-books"),text:(0,a.__)("Every WooCommerce order becomes a sales order or invoice in Zoho Books, with its contact and line items created for you — no nightly batch, no copy-paste.","erp7-order-sync-for-zoho-books")},{icon:"update",title:(0,a.__)("Customers and products stay in step","erp7-order-sync-for-zoho-books"),text:(0,a.__)("Contacts and catalogue items are matched by SKU or name, created when an order needs them, and kept aligned as they change.","erp7-order-sync-for-zoho-books")},{icon:"shield",title:(0,a.__)("Built for audit trails","erp7-order-sync-for-zoho-books"),text:(0,a.__)("Every sync attempt is logged with what was sent. Failures retry on their own and land in one queue you can inspect and re-run.","erp7-order-sync-for-zoho-books")}];function Me({onStart:e}){return(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Sync WooCommerce with","erp7-order-sync-for-zoho-books"),(0,o.createElement)("br",null),(0,a.__)("Zoho Books in minutes","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Stop re-typing orders into your accounting. This integration keeps orders, customers, products and refunds aligned between your store and Zoho Books.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ul",{className:"zbwc-ob-features"},Pe.map(e=>(0,o.createElement)("li",{key:e.icon,className:"zbwc-ob-feature"},(0,o.createElement)("span",{className:"zbwc-ob-icon","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-"+e.icon})),(0,o.createElement)("div",null,(0,o.createElement)("h3",null,e.title),(0,o.createElement)("p",null,e.text))))),(0,o.createElement)(s.Button,{variant:"primary",onClick:e},(0,a.__)("Get started →","erp7-order-sync-for-zoho-books")))}const De=[["accounts.zoho.com","United States (.com)"],["accounts.zoho.eu","Europe (.eu)"],["accounts.zoho.in","India (.in)"],["accounts.zoho.com.au","Australia (.com.au)"],["accounts.zoho.jp","Japan (.jp)"],["accounts.zohocloud.ca","Canada (.ca)"],["accounts.zoho.sa","Saudi Arabia (.sa)"],["accounts.zoho.com.cn","China (.com.cn)"]];function Re({redirectUri:e,onClose:t}){return(0,o.createElement)(s.Modal,{title:(0,a.__)("Create your Zoho API client","erp7-order-sync-for-zoho-books"),onRequestClose:t,className:"zbwc-guide-modal"},(0,o.createElement)("p",{className:"zbwc-guide-modal__lede"},(0,a.__)('Zoho asks every store to use its own API client — a small "app" you create once in the Zoho console. About 5 minutes, no code, and your Zoho password never touches this site.',"erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-guide-modal__steps"},(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Copy your Redirect URI","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Use the Copy button next to the Authorized Redirect URI on this screen. Zoho only accepts an exact match, so always copy — never retype.","erp7-order-sync-for-zoho-books")),!!e&&(0,o.createElement)("code",{className:"zbwc-guide-modal__uri"},e)),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Open the Zoho API Console","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Go to","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("a",{href:"https://api-console.zoho.com/",target:"_blank",rel:"noreferrer"},"api-console.zoho.com")," ",(0,a.__)('and sign in with the same Zoho account that owns your Zoho Books organization. Click "Get Started" or "Add Client".',"erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('Choose "Server-based Applications"',"erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Not Self Client — this plugin uses the secure redirect flow only.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Fill the form and press Create","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)('Client Name: anything you like (e.g. "My Store — WooCommerce Sync"). Homepage URL: your store address. Authorized Redirect URIs: paste from step 1. Zoho then shows your Client ID (starts with "1000.") and Client Secret.',"erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Paste the keys here and connect","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Pick the data centre you sign in on, paste the Client ID and Secret, and press Save & Connect to Zoho. The secret is stored encrypted.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)("Accept, then pick your organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",null,(0,a.__)("Zoho shows what the plugin needs (full Zoho Books access, to create orders, contacts, items and invoices). Press Accept — you land straight back here, and the organization chooser opens by itself.","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("h3",{className:"zbwc-guide-modal__h"},(0,a.__)("Which region am I on?","erp7-order-sync-for-zoho-books")),(0,o.createElement)("table",{className:"zbwc-guide-modal__table"},(0,o.createElement)("tbody",null,De.map(([e,t])=>(0,o.createElement)("tr",{key:e},(0,o.createElement)("td",null,(0,o.createElement)("code",null,e)),(0,o.createElement)("td",null,t))))),(0,o.createElement)("h3",{className:"zbwc-guide-modal__h"},(0,a.__)("If something goes wrong","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ul",{className:"zbwc-guide-modal__fixes"},(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"Invalid Redirect URI"',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("the console URI doesn't exactly match this site's. Protocol, www, and trailing slash all count. Copy again, replace, retry.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"Invalid client" or a login loop',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("region mismatch. Set the data centre to the domain you actually sign in on.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"The authorization session expired"',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("the one-time token lasts 15 minutes. Nothing is wrong — connect again.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("li",null,(0,o.createElement)("strong",null,(0,a.__)('"Authorization was denied"',"erp7-order-sync-for-zoho-books"))," — ",(0,a.__)("Cancel was pressed on Zoho's screen. Connect again and press Accept.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-guide-modal__footer"},(0,o.createElement)(s.Button,{variant:"primary",onClick:t},(0,a.__)("Got it","erp7-order-sync-for-zoho-books"))))}const Oe={connected:[(0,a.__)("Connected to Zoho Books.","erp7-order-sync-for-zoho-books"),"success"],error:[(0,a.__)("OAuth failed — double-check your Client ID/Secret and region.","erp7-order-sync-for-zoho-books"),"error"],denied:[(0,a.__)("Authorization was denied.","erp7-order-sync-for-zoho-books"),"error"],badstate:[(0,a.__)("The authorization session expired. Please try again.","erp7-order-sync-for-zoho-books"),"error"]};function Ae({connection:e,reloadConnection:t,onOrganization:r}){const c=l(),[i,d]=(0,n.useState)({clientId:e.clientId||"",clientSecret:"",region:e.region||"us"}),[m,u]=(0,n.useState)(!1),[h,_]=(0,n.useState)(!1),[p,b]=(0,n.useState)(!1),[g,k]=(0,n.useState)(!1),E=!!e.hasRefreshToken&&!e.organizationId;(0,n.useEffect)(()=>{const e=new URLSearchParams(window.location.search),o=e.get("zbwc_oauth");if(!o)return;const r=Oe[o];r&&c(r[0],r[1]),e.delete("zbwc_oauth"),window.history.replaceState({},"",window.location.pathname+(e.toString()?"?"+e.toString():"")+window.location.hash),"connected"===o&&t&&t()},[]);const w=(0,n.useRef)(!1);(0,n.useEffect)(()=>{E&&!w.current&&(w.current=!0,u(!0))},[E]);const v=(e,o)=>d(t=>({...t,[e]:o})),N=Object.entries(e.regions||{us:"United States (.com)"}).map(([e,o])=>({value:e,label:o}));return e.connected?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Zoho Books is connected","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Your store can talk to Zoho Books. Continue to choose what should sync.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-option is-done"},(0,o.createElement)("div",{className:"zbwc-ob-option__head"},(0,o.createElement)("h3",null,(0,a.__)("Organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-ob-badge is-ok"},(0,a.__)("Connected","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("table",{className:"zbwc-kv"},(0,o.createElement)("tbody",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,e.organizationName||e.organizationId||"—")),(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Data centre","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,e.apiDomain||(e.regions||{})[e.region]||e.region))))),(0,o.createElement)(s.Button,{variant:"secondary",isDestructive:!0,onClick:async()=>{b(!0);try{await f("/connection"),w.current=!1,u(!1),c((0,a.__)("Disconnected.","erp7-order-sync-for-zoho-books"),"info"),t&&t()}catch(e){c(z(e),"error")}finally{b(!1)}},disabled:p,className:"zbwc-ob-quiet"},(0,a.__)("Disconnect and start over","erp7-order-sync-for-zoho-books"))):E?(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Choose your organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Your Zoho account is authorized. Pick the Zoho Books organization this store should sync with.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-option is-done"},(0,o.createElement)("div",{className:"zbwc-ob-option__head"},(0,o.createElement)("h3",null,(0,a.__)("Organization","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-ob-badge is-ok"},(0,a.__)("Authorized","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("p",{className:"zbwc-ob-option__desc"},(0,a.__)("One decision left: which organization the sync writes into.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-actions"},(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>u(!0)},(0,a.__)("Choose organization","erp7-order-sync-for-zoho-books")))),m&&(0,o.createElement)(se,{onChosen:e=>{u(!1),r&&r(e.name||""),t&&t()},onClose:()=>u(!1)})):(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Connect your Zoho Books account","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Zoho asks each store to use its own API client. Create one, paste its keys below, and you'll be redirected to Zoho to authorize — we never see or store your Zoho password.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"link",className:"zbwc-ob-guidelink",onClick:()=>_(!0)},(0,a.__)("Step-by-step guide →","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-ob-option"},(0,o.createElement)("div",{className:"zbwc-ob-option__head"},(0,o.createElement)("h3",null,(0,a.__)("Server-based Application","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-ob-badge is-ok"},(0,a.__)("Secure OAuth","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("p",{className:"zbwc-ob-option__desc"},(0,a.__)("Authorize once and the connection keeps itself alive — Zoho issues a refresh token, so there is nothing to renew by hand.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-ob-howto"},(0,o.createElement)("li",null,(0,a.__)("Open the","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)(s.ExternalLink,{href:"https://api-console.zoho.com/"},(0,a.__)("Zoho API Console","erp7-order-sync-for-zoho-books"))," ",(0,a.__)("and create a","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("strong",null,(0,a.__)("Server-based Application","erp7-order-sync-for-zoho-books")),"."),(0,o.createElement)("li",null,(0,a.__)("Paste this as its","erp7-order-sync-for-zoho-books")," ",(0,o.createElement)("strong",null,(0,a.__)("Authorized Redirect URI","erp7-order-sync-for-zoho-books")),":",(0,o.createElement)("span",{className:"zbwc-ob-copyrow"},(0,o.createElement)("code",{className:"zbwc-code"},e.redirectUri),(0,o.createElement)(s.Button,{variant:"secondary",onClick:async()=>{if(await de(e.redirectUri))return k(!0),void setTimeout(()=>k(!1),2e3);c((0,a.__)("Copy failed — select the URL and copy it manually.","erp7-order-sync-for-zoho-books"),"error")}},g?(0,a.__)("Copied","erp7-order-sync-for-zoho-books"):(0,a.__)("Copy","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("li",null,(0,a.__)("Copy its Client ID and Client Secret into the fields below.","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-ob-fields"},(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Data centre / region","erp7-order-sync-for-zoho-books"),help:(0,a.__)("The Zoho domain you sign in on — .com, .eu, .in and so on.","erp7-order-sync-for-zoho-books"),value:i.region,options:N,onChange:e=>v("region",e)}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client ID","erp7-order-sync-for-zoho-books"),value:i.clientId,onChange:e=>v("clientId",e),autoComplete:"off"}),(0,o.createElement)(s.TextControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Client Secret","erp7-order-sync-for-zoho-books"),type:"password",value:i.clientSecret,placeholder:e.hasClientSecret?(0,a.__)("•••••••• (saved — leave blank to keep)","erp7-order-sync-for-zoho-books"):"",onChange:e=>v("clientSecret",e),autoComplete:"off"}))),(0,o.createElement)("div",{className:"zbwc-ob-actions"},(0,o.createElement)(s.Button,{variant:"primary",onClick:async()=>{b(!0);try{await(async()=>{const e={clientId:i.clientId,region:i.region};i.clientSecret&&(e.clientSecret=i.clientSecret),await y("/connection/credentials",e)})();const e=await y("/connection/authorize",{});window.location.href=e.authUrl}catch(e){c(z(e),"error"),b(!1)}},isBusy:p,disabled:p||!i.clientId||!i.clientSecret&&!e.hasClientSecret},(0,o.createElement)("span",{className:"dashicons dashicons-admin-links","aria-hidden":"true"}),(0,a.__)("Connect with Zoho","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"secondary",href:"https://api-console.zoho.com/",target:"_blank"},(0,a.__)("Open Zoho API Console ↗","erp7-order-sync-for-zoho-books"))),h&&(0,o.createElement)(Re,{redirectUri:e.redirectUri,onClose:()=>_(!1)}))}const We=[{value:"invoice",label:(0,a.__)("Sales order, then invoice","erp7-order-sync-for-zoho-books")},{value:"salesorder",label:(0,a.__)("Sales order only","erp7-order-sync-for-zoho-books")}],Fe=[{value:"processing",label:(0,a.__)("Processing","erp7-order-sync-for-zoho-books")},{value:"completed",label:(0,a.__)("Completed","erp7-order-sync-for-zoho-books")},{value:"on-hold",label:(0,a.__)("On hold","erp7-order-sync-for-zoho-books")},{value:"any",label:(0,a.__)("Any status change","erp7-order-sync-for-zoho-books")}];function He({connection:e,orgName:t,resources:r,onToggle:n,prefs:c,setPref:l}){const i=U("payments")?(0,a.__)("Every WooCommerce order — line items, shipping, fees, coupons and tax — pushed to Zoho Books. Payments are recorded, refunds become credit notes, and cancelled orders are voided.","erp7-order-sync-for-zoho-books"):(0,a.__)("Every WooCommerce order — line items, shipping, fees, coupons and tax — pushed to Zoho Books as a sales order or invoice, with its contact and items created as needed.","erp7-order-sync-for-zoho-books"),d=U("inventory")?(0,a.__)("Each WooCommerce product and variation maps to one Zoho Books item, matched by SKU. Stock levels pull back from Zoho on a schedule you set.","erp7-order-sync-for-zoho-books"):(0,a.__)("Each WooCommerce product and variation maps to one Zoho Books item, matched by SKU, so order lines land against the right thing.","erp7-order-sync-for-zoho-books"),m=t||e.organizationName||e.organizationId,u=e.apiDomain||"";return(0,o.createElement)(o.Fragment,null,(0,o.createElement)("h2",{className:"zbwc-ob-heading"},(0,a.__)("Pick what to sync","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},m&&u?(0,a.sprintf)(/* translators: 1: Zoho organization name or id, 2: Zoho API domain. */ /* translators: 1: Zoho organization name or id, 2: Zoho API domain. */
     30(0,a.__)("Connected to %1$s on %2$s. Only what you switch on here will sync — change any of it later.","erp7-order-sync-for-zoho-books"),m,u):(0,a.__)("Only what you switch on here will sync — you can change any of it later.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(Ue,{icon:"cart",title:(0,a.__)("Orders & invoices","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Recommended","erp7-order-sync-for-zoho-books"),text:i,checked:r.orders,onChange:()=>n("orders")},r.orders&&(0,o.createElement)(o.Fragment,null,(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Create each order as","erp7-order-sync-for-zoho-books"),value:c.zohoDocumentType,options:We,onChange:e=>l("zohoDocumentType",e)}),(0,o.createElement)(s.SelectControl,{__nextHasNoMarginBottom:!0,label:(0,a.__)("Send it when the order status becomes","erp7-order-sync-for-zoho-books"),value:c.orderTriggerStatus,options:Fe,onChange:e=>l("orderTriggerStatus",e)}))),(0,o.createElement)(Ue,{icon:"groups",title:(0,a.__)("Customers","erp7-order-sync-for-zoho-books"),text:(0,a.__)("WooCommerce customers and guest checkouts become Zoho contacts, with billing and shipping addresses kept in step as they change.","erp7-order-sync-for-zoho-books"),checked:r.customers,onChange:()=>n("customers")}),(0,o.createElement)(Ue,{icon:"products",title:(0,a.__)("Products","erp7-order-sync-for-zoho-books"),text:d,checked:r.products,onChange:()=>n("products")}),e&&e.inventoryRefused?(0,o.createElement)(ie,{region:e.region}):(0,o.createElement)(ce,null),!r.orders&&(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1,className:"zbwc-ob-inline-notice"},(0,a.__)("With orders off, nothing is sent to Zoho Books when an order is placed. You can switch it on later on the Orders tab.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-footnote"},(0,a.__)("Syncing runs in the background on WooCommerce's own Action Scheduler queue, so checkout is never held up waiting for Zoho.","erp7-order-sync-for-zoho-books")))}function Ue({icon:e,title:t,badge:r,text:n,checked:a,onChange:c,children:l}){return(0,o.createElement)("div",{className:"zbwc-ob-resource"+(a?" is-on":"")},(0,o.createElement)("div",{className:"zbwc-ob-resource__main",role:"presentation",onClick:c},(0,o.createElement)("div",{className:"zbwc-ob-resource__box",role:"presentation",onClick:e=>e.stopPropagation()},(0,o.createElement)(s.CheckboxControl,{__nextHasNoMarginBottom:!0,checked:a,onChange:c,label:"","aria-label":t})),(0,o.createElement)("span",{className:"zbwc-ob-icon","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-"+e})),(0,o.createElement)("div",{className:"zbwc-ob-resource__body"},(0,o.createElement)("div",{className:"zbwc-ob-resource__head"},(0,o.createElement)("h3",null,t),r&&(0,o.createElement)("span",{className:"zbwc-ob-badge is-blue"},r)),(0,o.createElement)("p",null,n),l&&(0,o.createElement)("div",{className:"zbwc-ob-resource__prefs",role:"presentation",onClick:e=>e.stopPropagation()},l))))}function Le({connection:e,orgName:t,resources:r,onFinish:n}){const c=Object.keys(r).filter(e=>r[e]),l=!!W().enforced,i=t||e.organizationName||e.organizationId,d=(m=e.apiDomain,String(m||"").replace(/^https?:\/\//,"").replace(/^www\./,"").replace(/\/$/,""));var m;const u=[{title:(0,a.__)("Connected to Zoho Books","erp7-order-sync-for-zoho-books"),detail:[i,d].filter(Boolean).join(" · "),badge:(0,a.__)("Active","erp7-order-sync-for-zoho-books"),tone:"is-ok"},{title:(0,a.__)("Sync preferences saved","erp7-order-sync-for-zoho-books"),detail:c.length?j(c.map(e=>q(e))):(0,a.__)("Nothing switched on yet","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Saved","erp7-order-sync-for-zoho-books"),tone:"is-ok"},r.orders?{title:(0,a.__)("Order events are live","erp7-order-sync-for-zoho-books"),detail:(0,a.__)("New orders queue for Zoho as their status changes","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Live","erp7-order-sync-for-zoho-books"),tone:"is-ok"}:{title:(0,a.__)("Order sync is off","erp7-order-sync-for-zoho-books"),detail:(0,a.__)("Switch it on any time from the Orders tab","erp7-order-sync-for-zoho-books"),badge:(0,a.__)("Off","erp7-order-sync-for-zoho-books"),tone:"is-muted"}];return(0,o.createElement)("div",{className:"zbwc-ob-done"},(0,o.createElement)("span",{className:"zbwc-ob-done__check","aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-yes"})),(0,o.createElement)("h2",null,(0,a.__)("You're all set","erp7-order-sync-for-zoho-books")),(0,o.createElement)("p",{className:"zbwc-ob-lead"},(0,a.__)("Your store and Zoho Books are connected. New records sync automatically as they happen in WooCommerce.","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ul",{className:"zbwc-ob-summary"},u.map(e=>(0,o.createElement)("li",{key:e.title,className:"zbwc-ob-summary__row"},(0,o.createElement)("span",{className:"zbwc-ob-summary__icon "+e.tone,"aria-hidden":"true"},(0,o.createElement)("span",{className:"dashicons dashicons-yes"})),(0,o.createElement)("span",{className:"zbwc-ob-summary__text"},(0,o.createElement)("strong",null,e.title),e.detail&&(0,o.createElement)("span",null,e.detail)),(0,o.createElement)("span",{className:"zbwc-ob-badge "+e.tone},e.badge)))),(0,o.createElement)("div",{className:"zbwc-ob-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.sprintf)(/* translators: %s: the name of the Orders-tab button, "Run backfill". */ /* translators: %s: the name of the Orders-tab button, "Run backfill". */
     31(0,a.__)("Already have orders in WooCommerce? Use %s on the Orders tab to send the ones you placed before today.","erp7-order-sync-for-zoho-books"),(0,a.__)("Run backfill","erp7-order-sync-for-zoho-books")))),(0,o.createElement)("div",{className:"zbwc-ob-done__actions"},(0,o.createElement)(s.Button,{variant:"primary",onClick:()=>n("dashboard")},(0,a.__)("Go to dashboard","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Button,{variant:"secondary",onClick:()=>n("orders")},(0,a.__)("Review sync settings","erp7-order-sync-for-zoho-books")),l&&(0,o.createElement)(s.Button,{variant:"tertiary",onClick:()=>n("plan")},(0,a.__)("View plan","erp7-order-sync-for-zoho-books"))))}const $e=[{title:(0,a.__)("Welcome","erp7-order-sync-for-zoho-books"),todo:(0,a.__)("See how the sync keeps your books aligned.","erp7-order-sync-for-zoho-books"),done:(0,a.__)("Overview of the integration.","erp7-order-sync-for-zoho-books")},{title:(0,a.__)("Connect Zoho Books","erp7-order-sync-for-zoho-books"),todo:(0,a.__)("Authorize your organization and data centre.","erp7-order-sync-for-zoho-books"),done:(0,a.__)("Organization authorized.","erp7-order-sync-for-zoho-books")},{title:(0,a.__)("Pick what to sync","erp7-order-sync-for-zoho-books"),todo:(0,a.__)("Choose the records that flow into Zoho.","erp7-order-sync-for-zoho-books"),done:(0,a.__)("Sync preferences saved.","erp7-order-sync-for-zoho-books")}],je="undefined"!=typeof window&&window.location.search.includes("zbwc_oauth=");function qe({connection:e,reloadConnection:t,onFinish:r}){const c=l(),[i,d]=(0,n.useState)(()=>function(e){return je?1:e.connected?2:e.hasRefreshToken?1:0}(e)),[m,u]=(0,n.useState)(!1),[h,_]=(0,n.useState)(!1),[p,b]=(0,n.useState)(""),[f,g]=(0,n.useState)({orders:!0,customers:!0,products:!0}),[k,E]=(0,n.useState)({zohoDocumentType:"invoice",orderTriggerStatus:"processing"}),w=(0,n.useRef)(!1);(0,n.useEffect)(()=>{w.current?e.connected&&1===i&&d(2):w.current=!0},[e.connected]);const v=Object.values(f).filter(Boolean).length;return m?(0,o.createElement)("div",{className:"zbwc-onboarding"},(0,o.createElement)(Ge,null),(0,o.createElement)(Le,{connection:e,orgName:p,resources:f,onFinish:r})):(0,o.createElement)("div",{className:"zbwc-onboarding"},(0,o.createElement)(Ge,null),(0,o.createElement)("div",{className:"zbwc-onboarding__titlerow"},(0,o.createElement)("h1",{className:"zbwc-onboarding__title"},(0,a.__)("Get set up","erp7-order-sync-for-zoho-books")),(0,o.createElement)("span",{className:"zbwc-onboarding__chip"},(0,a.__)("Setup","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("div",{className:"zbwc-onboarding__card"},(0,o.createElement)("div",{className:"zbwc-onboarding__panel"},(0,o.createElement)("p",{className:"zbwc-ob-eyebrow"},(0,a.sprintf)(/* translators: 1: current step number, 2: total steps, 3: step name. */ /* translators: 1: current step number, 2: total steps, 3: step name. */
     32(0,a.__)("Step %1$d of %2$d · %3$s","erp7-order-sync-for-zoho-books"),i+1,$e.length,$e[i].title)),0===i&&(0,o.createElement)(Me,{onStart:()=>d(1)}),1===i&&(0,o.createElement)(Ae,{connection:e,reloadConnection:t,onOrganization:b}),2===i&&(0,o.createElement)(He,{connection:e,orgName:p,resources:f,onToggle:e=>g(o=>({...o,[e]:!o[e]})),prefs:k,setPref:(e,o)=>E(t=>({...t,[e]:o}))})),(0,o.createElement)("aside",{className:"zbwc-onboarding__aside"},(0,o.createElement)("h2",{className:"zbwc-ob-aside__title"},0===i?(0,a.__)("What's next","erp7-order-sync-for-zoho-books"):(0,a.__)("Setup progress","erp7-order-sync-for-zoho-books")),(0,o.createElement)("ol",{className:"zbwc-ob-progress"},$e.map((e,t)=>(0,o.createElement)("li",{key:e.title,className:"zbwc-ob-progress__item"+(t===i?" is-active":"")+(t<i?" is-done":"")},(0,o.createElement)("span",{className:"zbwc-ob-progress__num","aria-hidden":"true"},t<i?(0,o.createElement)("span",{className:"dashicons dashicons-yes"}):t+1),(0,o.createElement)("span",{className:"zbwc-ob-progress__text"},(0,o.createElement)("strong",null,e.title),(0,o.createElement)("span",null,t<i?e.done:e.todo))))),(0,o.createElement)(Ye,{step:i,connection:e,selectedCount:v,total:Object.keys(f).length}))),i>0&&(0,o.createElement)("div",{className:"zbwc-ob-nav"},(0,o.createElement)(s.Button,{variant:"secondary",onClick:()=>d(i-1)},(0,a.__)("← Back","erp7-order-sync-for-zoho-books")),1===i?(0,o.createElement)(s.Button,{variant:"primary",disabled:!e.connected,onClick:()=>d(2)},e.connected?(0,a.__)("Continue →","erp7-order-sync-for-zoho-books"):(0,a.__)("Connect to continue","erp7-order-sync-for-zoho-books")):(0,o.createElement)(s.Button,{variant:"primary",onClick:async()=>{_(!0);try{await y("/settings",{settings:{onboardingCompleted:!0,orderSyncMasterEnabled:f.orders,wooToZohoEnabled:!0,zohoDocumentType:k.zohoDocumentType,orderTriggerStatus:k.orderTriggerStatus,customerSyncMasterEnabled:f.customers,wooToZohoCustomerEnabled:!0,productSyncMasterEnabled:f.products,wooToZohoProductEnabled:!0}}),u(!0)}catch(e){c(z(e),"error")}finally{_(!1)}},isBusy:h,disabled:h},(0,a.__)("Save and finish →","erp7-order-sync-for-zoho-books"))))}function Ge(){return(0,o.createElement)("div",{className:"zbwc-onboarding__bar"},(0,o.createElement)("span",{className:"zbwc-onboarding__logo dashicons dashicons-book-alt","aria-hidden":"true"}),(0,o.createElement)("span",{className:"zbwc-onboarding__brand"},(0,a.__)("Zoho Books Integration For WooCommerce","erp7-order-sync-for-zoho-books")))}function Ye({step:e,connection:t,selectedCount:r,total:n}){if(0===e){const e=Object.keys(t.regions||{}).map(e=>e.toUpperCase()).join(", ");return(0,o.createElement)("ul",{className:"zbwc-ob-facts"},(0,o.createElement)("li",null,(0,a.__)("Secure OAuth — your Zoho password never touches this site.","erp7-order-sync-for-zoho-books")),e&&(0,o.createElement)("li",null,(0,a.sprintf)(/* translators: %s: comma-separated data centre codes, e.g. "US, EU, IN". */ /* translators: %s: comma-separated data centre codes, e.g. "US, EU, IN". */
    3533(0,a.__)("Works with every Zoho data centre (%s).","erp7-order-sync-for-zoho-books"),e)),(0,o.createElement)("li",null,(0,a.__)("Nothing syncs until you say so on step 3.","erp7-order-sync-for-zoho-books")))}return 1===e?(0,o.createElement)("div",{className:"zbwc-ob-note is-info"},(0,o.createElement)("span",{className:"dashicons dashicons-info-outline","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("Step 3 is just picking what you want to sync. You can change all of it later in settings.","erp7-order-sync-for-zoho-books"))):(0,o.createElement)(o.Fragment,null,(0,o.createElement)("p",{className:"zbwc-ob-count"},(0,a.sprintf)(/* translators: 1: number ticked, 2: number available. */ /* translators: 1: number ticked, 2: number available. */
    36 (0,a.__)("%1$d of %2$d resources selected","erp7-order-sync-for-zoho-books"),r,n)),F()&&(0,o.createElement)("div",{className:"zbwc-ob-note is-plan"},(0,o.createElement)("span",{className:"dashicons dashicons-chart-bar","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.sprintf)(/* translators: %s: the monthly allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the monthly allowance, e.g. "10 orders, 10 products and 10 customers". */
    37 (0,a.__)("Your free plan covers %s each month. Re-syncing a record already sent to Zoho is always free.","erp7-order-sync-for-zoho-books"),G()))),(0,o.createElement)("div",{className:"zbwc-ob-note is-warn"},(0,o.createElement)("span",{className:"dashicons dashicons-warning","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("Zoho caps daily API calls by your Zoho plan. Each resource you switch on uses part of that quota — if the cap is reached, syncing pauses and resumes on its own, so nothing is lost.","erp7-order-sync-for-zoho-books"))))}const Ve={payments:(0,a.__)("Record payments in Zoho","erp7-order-sync-for-zoho-books"),refunds:(0,a.__)("Refunds & cancellations","erp7-order-sync-for-zoho-books"),fulfillment:(0,a.__)("Fulfilment","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("Customer sync","erp7-order-sync-for-zoho-books"),products:(0,a.__)("Product sync","erp7-order-sync-for-zoho-books"),inventory:(0,a.__)("Inventory","erp7-order-sync-for-zoho-books")},Je={orders:(0,a.__)("Orders synced","erp7-order-sync-for-zoho-books"),products:(0,a.__)("Products synced","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("Customers synced","erp7-order-sync-for-zoho-books")},Qe={active:"ok",trialing:"ok",past_due:"warn",inactive:"warn",cancelled:"error",canceled:"error",expired:"error"};function Xe(){const e=g(()=>b("/plan"),[]),t=g(()=>b("/plan/available"),[]),r=l(),[c,i]=(0,n.useState)(!1),[d,m]=(0,n.useState)(!1);if(e.loading)return(0,o.createElement)(Z,{label:(0,a.__)("Loading your plan…","erp7-order-sync-for-zoho-books")});if(e.error)return(0,o.createElement)(T,{error:e.error,onRetry:e.reload});const u=e.data||{},h=u.usage||{},_=h.limited?h.quotas||{}:null,p=u.features||[],f=t.data&&t.data.plans||[],k=!!(u.cancelling&&u.periodEnd&&1e3*u.periodEnd<=Date.now()),E=!(!u.connected||"free"===u.plan||!["active","trialing","past_due"].includes(u.status)||k),v=f.find(e=>e.isFree)||null,N=(u.all||[]).filter(e=>!p.includes(e)).map(e=>Ve[e]||e),C=async(o,t)=>{i(!0);try{const n=await o();return t&&r(t,"success"),e.reload(),n}catch(e){return r(z(e),"error"),null}finally{i(!1)}},S=async()=>{const e=await C(()=>y("/plan/portal"));e&&e.portalUrl&&(window.location.href=e.portalUrl)},x=(e,o)=>new Intl.NumberFormat(void 0,{style:"currency",currency:(o||"usd").toUpperCase()}).format((e||0)/100);return(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:(0,a.__)("Your plan","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Billing is handled by Stripe. Changes take effect straight away.","erp7-order-sync-for-zoho-books"),actions:(0,o.createElement)(s.Button,{variant:"secondary",isBusy:c,disabled:c,onClick:()=>C(()=>y("/plan/refresh"),(0,a.__)("Plan refreshed.","erp7-order-sync-for-zoho-books"))},(0,a.__)("Refresh","erp7-order-sync-for-zoho-books"))},(0,o.createElement)("table",{className:"zbwc-kv"},(0,o.createElement)("tbody",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Plan","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,(0,o.createElement)("strong",null,u.plan))),(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Status","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,(0,o.createElement)(B,{status:k?"error":Qe[u.status]||"info"},k?(0,a.__)("ended","erp7-order-sync-for-zoho-books"):u.status),u.inGrace&&(0,o.createElement)("em",null," ",(0,a.__)("(server unreachable — running on grace)","erp7-order-sync-for-zoho-books")))),u.periodEnd>0&&(0,o.createElement)("tr",null,(0,o.createElement)("th",null,k?(0,a.__)("Ended","erp7-order-sync-for-zoho-books"):u.cancelling?(0,a.__)("Access until","erp7-order-sync-for-zoho-books"):(0,a.__)("Renews","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,new Date(1e3*u.periodEnd).toLocaleDateString(),u.cancelling&&(0,o.createElement)(o.Fragment,null," ",(0,o.createElement)(B,{status:"warn"},(0,a.__)("Cancelling","erp7-order-sync-for-zoho-books"))))),(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("This site","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,u.connected?(0,a.__)("Linked to your subscription","erp7-order-sync-for-zoho-books"):(0,a.__)("Not linked — on the free plan","erp7-order-sync-for-zoho-books"))))),u.message&&(0,o.createElement)("p",{className:"zbwc-muted"},u.message),(0,o.createElement)(s.Flex,{justify:"flex-start",gap:2,className:"zbwc-actions"},u.manageBilling&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"secondary",isBusy:c,disabled:c,onClick:S},(0,a.__)("Manage billing","erp7-order-sync-for-zoho-books"))),E&&!u.cancelling&&!d&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,disabled:c,onClick:()=>m(!0)},(0,a.__)("Cancel subscription","erp7-order-sync-for-zoho-books"))),E&&u.cancelling&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",isBusy:c,disabled:c,onClick:()=>C(()=>y("/plan/resume"),(0,a.__)("Your subscription will continue.","erp7-order-sync-for-zoho-books"))},(0,a.__)("Keep my subscription","erp7-order-sync-for-zoho-books")))),k&&(0,o.createElement)(s.Notice,{status:"error",isDismissible:!1},(0,a.sprintf)(/* translators: %s: date the subscription ended. */ /* translators: %s: date the subscription ended. */
     34(0,a.__)("%1$d of %2$d resources selected","erp7-order-sync-for-zoho-books"),r,n)),H()&&(0,o.createElement)("div",{className:"zbwc-ob-note is-plan"},(0,o.createElement)("span",{className:"dashicons dashicons-chart-bar","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.sprintf)(/* translators: %s: the monthly allowance, e.g. "10 orders, 10 products and 10 customers". */ /* translators: %s: the monthly allowance, e.g. "10 orders, 10 products and 10 customers". */
     35(0,a.__)("Your free plan covers %s each month. Re-syncing a record already sent to Zoho is always free.","erp7-order-sync-for-zoho-books"),G()))),(0,o.createElement)("div",{className:"zbwc-ob-note is-warn"},(0,o.createElement)("span",{className:"dashicons dashicons-warning","aria-hidden":"true"}),(0,o.createElement)("p",null,(0,a.__)("Zoho caps daily API calls by your Zoho plan. Each resource you switch on uses part of that quota — if the cap is reached, syncing pauses and resumes on its own, so nothing is lost.","erp7-order-sync-for-zoho-books"))))}const Ke={payments:(0,a.__)("Record payments in Zoho","erp7-order-sync-for-zoho-books"),refunds:(0,a.__)("Refunds & cancellations","erp7-order-sync-for-zoho-books"),fulfillment:(0,a.__)("Fulfilment","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("Customer sync","erp7-order-sync-for-zoho-books"),products:(0,a.__)("Product sync","erp7-order-sync-for-zoho-books"),inventory:(0,a.__)("Inventory","erp7-order-sync-for-zoho-books")},Ve={orders:(0,a.__)("Orders synced","erp7-order-sync-for-zoho-books"),products:(0,a.__)("Products synced","erp7-order-sync-for-zoho-books"),customers:(0,a.__)("Customers synced","erp7-order-sync-for-zoho-books")},Je={active:"ok",trialing:"ok",past_due:"warn",inactive:"warn",cancelled:"error",canceled:"error",expired:"error"};function Qe(){const e=g(()=>b("/plan"),[]),t=g(()=>b("/plan/available"),[]),r=l(),[c,i]=(0,n.useState)(!1),[d,m]=(0,n.useState)(!1);if(e.loading)return(0,o.createElement)(Z,{label:(0,a.__)("Loading your plan…","erp7-order-sync-for-zoho-books")});if(e.error)return(0,o.createElement)(T,{error:e.error,onRetry:e.reload});const u=e.data||{},h=u.usage||{},_=h.limited?h.quotas||{}:null,p=u.features||[],f=t.data&&t.data.plans||[],k=!!(u.cancelling&&u.periodEnd&&1e3*u.periodEnd<=Date.now()),E=!(!u.connected||"free"===u.plan||!["active","trialing","past_due"].includes(u.status)||k),v=f.find(e=>e.isFree)||null,N=(u.all||[]).filter(e=>!p.includes(e)).map(e=>Ke[e]||e),C=async(o,t)=>{i(!0);try{const n=await o();return t&&r(t,"success"),e.reload(),n}catch(e){return r(z(e),"error"),null}finally{i(!1)}},S=async()=>{const e=await C(()=>y("/plan/portal"));e&&e.portalUrl&&(window.location.href=e.portalUrl)},x=(e,o)=>new Intl.NumberFormat(void 0,{style:"currency",currency:(o||"usd").toUpperCase()}).format((e||0)/100);return(0,o.createElement)(o.Fragment,null,(0,o.createElement)(w,{title:(0,a.__)("Your plan","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Billing is handled by Stripe. Changes take effect straight away.","erp7-order-sync-for-zoho-books"),actions:(0,o.createElement)(s.Button,{variant:"secondary",isBusy:c,disabled:c,onClick:()=>C(()=>y("/plan/refresh"),(0,a.__)("Plan refreshed.","erp7-order-sync-for-zoho-books"))},(0,a.__)("Refresh","erp7-order-sync-for-zoho-books"))},(0,o.createElement)("table",{className:"zbwc-kv"},(0,o.createElement)("tbody",null,(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Plan","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,(0,o.createElement)("strong",null,u.plan))),(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("Status","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,(0,o.createElement)(B,{status:k?"error":Je[u.status]||"info"},k?(0,a.__)("ended","erp7-order-sync-for-zoho-books"):u.status),u.inGrace&&(0,o.createElement)("em",null," ",(0,a.__)("(server unreachable — running on grace)","erp7-order-sync-for-zoho-books")))),u.periodEnd>0&&(0,o.createElement)("tr",null,(0,o.createElement)("th",null,k?(0,a.__)("Ended","erp7-order-sync-for-zoho-books"):u.cancelling?(0,a.__)("Access until","erp7-order-sync-for-zoho-books"):(0,a.__)("Renews","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,new Date(1e3*u.periodEnd).toLocaleDateString(),u.cancelling&&(0,o.createElement)(o.Fragment,null," ",(0,o.createElement)(B,{status:"warn"},(0,a.__)("Cancelling","erp7-order-sync-for-zoho-books"))))),(0,o.createElement)("tr",null,(0,o.createElement)("th",null,(0,a.__)("This site","erp7-order-sync-for-zoho-books")),(0,o.createElement)("td",null,u.connected?(0,a.__)("Linked to your subscription","erp7-order-sync-for-zoho-books"):(0,a.__)("Not linked — on the free plan","erp7-order-sync-for-zoho-books"))))),u.message&&(0,o.createElement)("p",{className:"zbwc-muted"},u.message),(0,o.createElement)(s.Flex,{justify:"flex-start",gap:2,className:"zbwc-actions"},u.manageBilling&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"secondary",isBusy:c,disabled:c,onClick:S},(0,a.__)("Manage billing","erp7-order-sync-for-zoho-books"))),E&&!u.cancelling&&!d&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"tertiary",isDestructive:!0,disabled:c,onClick:()=>m(!0)},(0,a.__)("Cancel subscription","erp7-order-sync-for-zoho-books"))),E&&u.cancelling&&(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",isBusy:c,disabled:c,onClick:()=>C(()=>y("/plan/resume"),(0,a.__)("Your subscription will continue.","erp7-order-sync-for-zoho-books"))},(0,a.__)("Keep my subscription","erp7-order-sync-for-zoho-books")))),k&&(0,o.createElement)(s.Notice,{status:"error",isDismissible:!1},(0,a.sprintf)(/* translators: %s: date the subscription ended. */ /* translators: %s: date the subscription ended. */
    3836(0,a.__)("Your subscription ended on %s and this site is back on the free plan. Subscribe again below to restore the paid features — your settings and mappings were kept.","erp7-order-sync-for-zoho-books"),new Date(1e3*u.periodEnd).toLocaleDateString())),u.cancelling&&!k&&!d&&(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1},u.periodEnd>0?(0,a.sprintf)(/* translators: %s: date the subscription ends. */ /* translators: %s: date the subscription ends. */
    3937(0,a.__)("Your subscription is set to end on %s. Everything keeps working until then, and you can change your mind any time before that date.","erp7-order-sync-for-zoho-books"),new Date(1e3*u.periodEnd).toLocaleDateString()):(0,a.__)("Your subscription is set to end at the close of the current billing period.","erp7-order-sync-for-zoho-books")),d&&(0,o.createElement)(s.Notice,{status:"warning",isDismissible:!1,className:"zbwc-confirm"},(0,o.createElement)("p",null,u.periodEnd>0?(0,a.sprintf)(/* translators: %s: date access ends. */ /* translators: %s: date access ends. */
    4038(0,a.__)("You have paid up to %s, so nothing changes before then — the site keeps syncing and you will not be charged again. On that date this site drops to the free plan.","erp7-order-sync-for-zoho-books"),new Date(1e3*u.periodEnd).toLocaleDateString()):(0,a.__)("Your subscription will end at the close of the current billing period. Nothing changes before then.","erp7-order-sync-for-zoho-books")),(0,o.createElement)(s.Flex,{justify:"flex-start",gap:2},(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"primary",isDestructive:!0,isBusy:c,disabled:c,onClick:()=>{m(!1),C(()=>y("/plan/cancel"),(0,a.__)("Subscription set to end on the date shown.","erp7-order-sync-for-zoho-books"))}},(0,a.__)("Yes, cancel at period end","erp7-order-sync-for-zoho-books"))),(0,o.createElement)(s.FlexItem,null,(0,o.createElement)(s.Button,{variant:"tertiary",disabled:c,onClick:()=>m(!1)},(0,a.__)("Never mind","erp7-order-sync-for-zoho-books")))))),f.length>0&&(0,o.createElement)(w,{title:(0,a.__)("Plans","erp7-order-sync-for-zoho-books"),description:E?(0,a.__)("Switching plans, updating your card and cancelling all happen in the Stripe billing portal, so you are charged the difference rather than twice.","erp7-order-sync-for-zoho-books"):(0,a.__)("Every sync feature is built into this plugin. A plan decides how much you can sync each month and which advanced areas are switched on.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("div",{className:"zbwc-plans"},v&&(0,o.createElement)("div",{className:"zbwc-plans__card"},(0,o.createElement)("div",{className:"zbwc-plans__head"},(0,o.createElement)("h3",null,v.name),!E&&(0,o.createElement)("span",{className:"zbwc-plans__current"},(0,a.__)("Current plan","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("p",{className:"zbwc-plans__price"},(0,o.createElement)("strong",null,x(0,v.currency)),(0,o.createElement)("span",{className:"zbwc-muted"}," ",(0,a.__)("forever","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("ul",{className:"zbwc-plans__list"},(v.features||[]).map(e=>(0,o.createElement)("li",{key:e},(0,o.createElement)("span",{className:"dashicons dashicons-yes","aria-hidden":"true"}),e)),!E&&N.map(e=>(0,o.createElement)("li",{key:e,className:"is-no"},(0,o.createElement)("span",{className:"dashicons dashicons-no-alt","aria-hidden":"true"}),e))),v.description&&(0,o.createElement)("p",{className:"zbwc-plans__note"},v.description)),f.filter(e=>!e.isFree).map(e=>{return(0,o.createElement)("div",{key:e.slug,className:"zbwc-plans__card is-featured"},(0,o.createElement)("span",{className:"zbwc-plans__ribbon"},(0,a.__)("MOST POPULAR","erp7-order-sync-for-zoho-books")),(0,o.createElement)("div",{className:"zbwc-plans__head"},(0,o.createElement)("h3",null,e.name),E&&u.plan===e.slug&&(0,o.createElement)("span",{className:"zbwc-plans__current"},(0,a.__)("Current plan","erp7-order-sync-for-zoho-books"))),(0,o.createElement)("p",{className:"zbwc-plans__price"},(0,o.createElement)("strong",null,x(e.priceCents,e.currency)),(0,o.createElement)("span",{className:"zbwc-muted"}," / ",e.interval)),(0,o.createElement)("ul",{className:"zbwc-plans__list"},(e.features||[]).map(e=>(0,o.createElement)("li",{key:e},(0,o.createElement)("span",{className:"dashicons dashicons-yes","aria-hidden":"true"}),e))),(0,o.createElement)(s.Button,{variant:E&&u.plan===e.slug?"secondary":"primary",className:"zbwc-plans__cta",disabled:c||E&&u.plan===e.slug,isBusy:c,onClick:()=>E?S():(async e=>{const o=await C(()=>y("/plan/checkout",{plan:e}));o&&o.checkoutUrl&&(window.location.href=o.checkoutUrl)})(e.slug)},(t=e,E&&u.plan===t.slug?(0,a.__)("Current plan","erp7-order-sync-for-zoho-books"):E?(0,a.__)("Switch in billing portal","erp7-order-sync-for-zoho-books"):(0,a.sprintf)((0,a.__)("Upgrade to %s","erp7-order-sync-for-zoho-books"),t.name)
    4139/* translators: %s: plan name. */)),(0,o.createElement)("p",{className:"zbwc-plans__trust"},(0,o.createElement)("span",{className:"dashicons dashicons-lock","aria-hidden":"true"}),(0,a.__)("Secure checkout by Stripe","erp7-order-sync-for-zoho-books")));var t}))),_&&(0,o.createElement)(w,{title:(0,a.sprintf)(/* translators: %s: month and year, e.g. August 2026. */ /* translators: %s: month and year, e.g. August 2026. */
    42 (0,a.__)("Usage — %s","erp7-order-sync-for-zoho-books"),h.period),description:(0,a.__)("Counts what first reached Zoho this month. Re-syncing something already sent is free, and the allowance resets on the 1st.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("table",{className:"widefat striped"},(0,o.createElement)("tbody",null,Object.entries(_).map(([e,t])=>(0,o.createElement)("tr",{key:e},(0,o.createElement)("th",null,Je[e]||e),(0,o.createElement)("td",null,(0,a.sprintf)(/* translators: 1: used, 2: allowed. */ /* translators: 1: used, 2: allowed. */
     40(0,a.__)("Usage — %s","erp7-order-sync-for-zoho-books"),h.period),description:(0,a.__)("Counts what first reached Zoho this month. Re-syncing something already sent is free, and the allowance resets on the 1st.","erp7-order-sync-for-zoho-books")},(0,o.createElement)("table",{className:"widefat striped"},(0,o.createElement)("tbody",null,Object.entries(_).map(([e,t])=>(0,o.createElement)("tr",{key:e},(0,o.createElement)("th",null,Ve[e]||e),(0,o.createElement)("td",null,(0,a.sprintf)(/* translators: 1: used, 2: allowed. */ /* translators: 1: used, 2: allowed. */
    4341(0,a.__)("%1$d of %2$d","erp7-order-sync-for-zoho-books"),t.used,t.limit)),(0,o.createElement)("td",{style:{width:"9rem"}},t.exhausted?(0,o.createElement)(B,{status:"error"},(0,a.__)("Limit reached","erp7-order-sync-for-zoho-books")):(0,o.createElement)(B,{status:"ok"},(0,a.sprintf)(/* translators: %d: remaining this month. */ /* translators: %d: remaining this month. */
    44 (0,a.__)("%d left","erp7-order-sync-for-zoho-books"),t.remaining)))))))))}const eo={customers:{feature:"customers",title:(0,a.__)("Customers","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Two-way contact sync between WooCommerce and Zoho Books.","erp7-order-sync-for-zoho-books"),bullets:[(0,a.__)("Push customer profile and address changes to Zoho","erp7-order-sync-for-zoho-books"),(0,a.__)("Pull Zoho contacts into WooCommerce on a schedule","erp7-order-sync-for-zoho-books"),(0,a.__)("Create and conflict policies for both directions","erp7-order-sync-for-zoho-books")]}},oo=["orders","payments","customers","products"];function to(){const e=g(()=>b("/connection"),[]),[t,r]=k("dashboard"),[s,c]=(0,n.useState)(!!h.onboardingCompleted);if(e.loading&&!e.data)return(0,o.createElement)(i,null,(0,o.createElement)("div",{className:"zbwc-shell"},(0,o.createElement)(Z,{label:(0,a.__)("Loading the integration…","erp7-order-sync-for-zoho-books")})));const l=e.data||{connected:!1};if(!s)return(0,o.createElement)(i,null,(0,o.createElement)("div",{className:"zbwc-shell zbwc-shell--onboarding"},(0,o.createElement)(Ge,{connection:l,reloadConnection:e.reload,onFinish:e=>{c(!0),r(e||"dashboard")}})));const d={dashboard:(0,o.createElement)(ne,{navigate:r}),orders:(0,o.createElement)(pe,null),payments:(0,o.createElement)(pe,{openTab:"payments"}),customers:((e,t)=>{const r=eo.customers;return!r||U(r.feature)?t:(0,o.createElement)(Y,{title:r.title,description:r.description,bullets:r.bullets})})(0,(0,o.createElement)(fe,null)),products:(0,o.createElement)(ge,{connection:l,reloadConnection:e.reload}),logs:(0,o.createElement)(Ze,null)};P().forEach(({slug:t,component:r})=>{d[t]=(0,o.createElement)(r,{connection:l,reloadConnection:e.reload})}),d.connection=(0,o.createElement)(ue,{connection:l,reloadConnection:e.reload}),h.plan&&h.plan.enforced&&(d.plan=(0,o.createElement)(Xe,null));const m=d[t]?t:"dashboard",u=eo[m],_=F()&&oo.includes(m)&&(!u||U(u.feature));return(0,o.createElement)(i,null,(0,o.createElement)("div",{className:"zbwc-shell"},(0,o.createElement)(A,{route:m,navigate:r,connection:l}),(0,o.createElement)(J,{route:m,navigate:r}),(0,o.createElement)("div",{className:"zbwc-layout"+(_?" has-aside":"")},(0,o.createElement)("div",{className:"zbwc-content"},d[m]),_&&(0,o.createElement)(X,{navigate:r}))))}"undefined"!=typeof window&&(window.ZBWC=window.ZBWC||{},window.ZBWC.registerPage=function({slug:e,label:o,component:t,order:r=50}){if(!e||!t)return;const n=I.findIndex(o=>o.slug===e),a={slug:e,label:o||e,component:t,order:r};n>=0?I[n]=a:I.push(a)},window.ZBWC.ui=M,window.ZBWC.boot=h),r()(()=>{const e=document.getElementById("zbwc-app");e&&(0,n.createRoot)(e).render((0,o.createElement)(to,null))})})();
     42(0,a.__)("%d left","erp7-order-sync-for-zoho-books"),t.remaining)))))))))}const Xe={customers:{feature:"customers",title:(0,a.__)("Customers","erp7-order-sync-for-zoho-books"),description:(0,a.__)("Two-way contact sync between WooCommerce and Zoho Books.","erp7-order-sync-for-zoho-books"),bullets:[(0,a.__)("Push customer profile and address changes to Zoho","erp7-order-sync-for-zoho-books"),(0,a.__)("Pull Zoho contacts into WooCommerce on a schedule","erp7-order-sync-for-zoho-books"),(0,a.__)("Create and conflict policies for both directions","erp7-order-sync-for-zoho-books")]}},eo=["orders","payments","customers","products"];function oo(){const e=g(()=>b("/connection"),[]),[t,r]=k("dashboard"),[s,c]=(0,n.useState)(!!h.onboardingCompleted);if(e.loading&&!e.data)return(0,o.createElement)(i,null,(0,o.createElement)("div",{className:"zbwc-shell"},(0,o.createElement)(Z,{label:(0,a.__)("Loading the integration…","erp7-order-sync-for-zoho-books")})));const l=e.data||{connected:!1};if(!s)return(0,o.createElement)(i,null,(0,o.createElement)("div",{className:"zbwc-shell zbwc-shell--onboarding"},(0,o.createElement)(qe,{connection:l,reloadConnection:e.reload,onFinish:e=>{c(!0),r(e||"dashboard")}})));const d={dashboard:(0,o.createElement)(ne,{navigate:r}),orders:(0,o.createElement)(pe,null),payments:(0,o.createElement)(pe,{openTab:"payments"}),customers:((e,t)=>{const r=Xe.customers;return!r||U(r.feature)?t:(0,o.createElement)(Y,{title:r.title,description:r.description,bullets:r.bullets})})(0,(0,o.createElement)(fe,null)),products:(0,o.createElement)(ge,{connection:l,reloadConnection:e.reload}),logs:(0,o.createElement)(Ze,null)};P().forEach(({slug:t,component:r})=>{d[t]=(0,o.createElement)(r,{connection:l,reloadConnection:e.reload})}),d.connection=(0,o.createElement)(ue,{connection:l,reloadConnection:e.reload}),h.plan&&h.plan.enforced&&(d.plan=(0,o.createElement)(Qe,null));const m=d[t]?t:"dashboard",u=Xe[m],_=H()&&eo.includes(m)&&(!u||U(u.feature));return(0,o.createElement)(i,null,(0,o.createElement)("div",{className:"zbwc-shell"},(0,o.createElement)(A,{route:m,navigate:r,connection:l}),(0,o.createElement)(J,{route:m,navigate:r}),(0,o.createElement)("div",{className:"zbwc-layout"+(_?" has-aside":"")},(0,o.createElement)("div",{className:"zbwc-content"},d[m]),_&&(0,o.createElement)(X,{navigate:r}))))}"undefined"!=typeof window&&(window.ZBWC=window.ZBWC||{},window.ZBWC.registerPage=function({slug:e,label:o,component:t,order:r=50}){if(!e||!t)return;const n=I.findIndex(o=>o.slug===e),a={slug:e,label:o||e,component:t,order:r};n>=0?I[n]=a:I.push(a)},window.ZBWC.ui=M,window.ZBWC.boot=h),r()(()=>{const e=document.getElementById("zbwc-app");e&&(0,n.createRoot)(e).render((0,o.createElement)(oo,null))})})();
  • erp7-order-sync-for-zoho-books/trunk/erp7-order-sync-for-zoho-books.php

    r3733769 r3733904  
    33 * Plugin Name:       Zoho Books Integration For WooCommerce
    44 * Description:       Sync WooCommerce with Zoho Books: orders as sales orders or invoices, payments, refunds, cancellations, fulfilment, customers, products and inventory. Includes an onboarding wizard, dashboard and sync log.
    5  * Version:           1.0.3
     5 * Version:           1.0.4
    66 * Author:            Manish
    77 * Author URI:        https://profiles.wordpress.org/smgom/
    … …  
    2828 * Constants
    2929 * ---------------------------------------------------------------------- */
    30 define( 'ZBWC_VERSION', '1.0.3' );
     30define( 'ZBWC_VERSION', '1.0.4' );
    3131define( 'ZBWC_FILE', __FILE__ );
    3232define( 'ZBWC_PATH', plugin_dir_path( __FILE__ ) );
  • erp7-order-sync-for-zoho-books/trunk/includes/Rest/LogsController.php

    r3733769 r3733904  
    1212use ZBWC\Queue\DeadLetter;
    1313use ZBWC\Queue\Scheduler;
    14 use ZBWC\Subscription\State;
    1514use ZBWC\Support\Logger;
    16 use ZBWC\Support\LogShare;
    1715use ZBWC\Support\Progress;
    18 use ZBWC\Support\Settings;
    1916
    2017/**
    … …  
    2724                $this->route( '/logs', 'DELETE', array( $this, 'clear_logs' ) );
    2825                $this->route( '/logs/activity', 'GET', array( $this, 'activity' ) );
    29                 $this->route( '/logs/share', 'GET', array( $this, 'share_status' ) );
    30                 $this->route( '/logs/share', 'POST', array( $this, 'share_choose' ) );
    3126                $this->route( '/logs/failed', 'GET', array( $this, 'list_failed' ) );
    3227                $this->route( '/logs/failed/(?P<id>\d+)/retry', 'POST', array( $this, 'retry_failed' ) );
    … …  
    7772        }
    7873
    79         /**
    80          * Whether this store's log goes to ERP7 support, and how the last batch went.
    81          *
    82          * @return \WP_REST_Response
    83          */
    84         public function share_status() {
    85                 $state = LogShare::state();
    86                 return $this->ok(
    87                         array(
    88                                 'enabled' => LogShare::enabled(),
    89                                 'chosen'  => '' !== (string) Settings::get( 'shareSyncLog', '' ),
    90                                 'linked'  => State::connected(),
    91                                 'sentAt'  => (int) $state['sentAt'],
    92                                 'error'   => (string) $state['error'],
    93                                 'retryAt' => (int) $state['retryAt'],
    94                         )
    95                 );
    96         }
    97 
    98         /**
    99          * Switch sharing on or off.
    100          *
    101          * @param \WP_REST_Request $req Request with `enabled`.
    102          * @return \WP_REST_Response
    103          */
    104         public function share_choose( $req ) {
    105                 LogShare::choose( (bool) $req->get_param( 'enabled' ) );
    106                 ( new Scheduler( $this->plugin ) )->sync_recurring();
    107                 return $this->share_status();
    108         }
    109 
    11074        /** Truncate the log table. */
    11175        public function clear_logs() {
  • erp7-order-sync-for-zoho-books/trunk/includes/Subscription/Client.php

    r3733769 r3733904  
    146146
    147147        /**
    148          * Send a batch of sync-log lines.
    149          *
    150          * Signed when the store is linked, so the lines are attributed to it
    151          * beyond doubt; a store that never linked sends to the public route.
    152          *
    153          * @param array      $body  install_id, site_url, entries and the rest.
    154          * @param array|null $creds Tenant credentials, or null when not linked.
    155          * @return array{ok:bool,data:array,message:string}
    156          */
    157         public function send_logs( array $body, $creds = null ) {
    158                 if ( $creds ) {
    159                         return $this->request( 'POST', '/logs', $body, $creds );
    160                 }
    161                 return $this->request( 'POST', '/public/logs', $body, null, true );
     148         * Send a batch of sync-log lines, signed so they are attributed to this
     149         * store beyond doubt.
     150         *
     151         * @param array $body  install_id, site_url, entries and the rest.
     152         * @param array $creds Tenant credentials.
     153         * @return array{ok:bool,data:array,message:string}
     154         */
     155        public function send_logs( array $body, array $creds ) {
     156                return $this->request( 'POST', '/logs', $body, $creds );
    162157        }
    163158
  • erp7-order-sync-for-zoho-books/trunk/includes/Support/LogShare.php

    r3733769 r3733904  
    1616/**
    1717 * Sends new log lines every few minutes, with customer email addresses and
    18  * phone numbers taken out first — signed when the store is linked to an
    19  * account, plain otherwise.
    20  *
    21  * Linked stores share unless the merchant switches it off; stores that never
    22  * linked share only once the merchant switches it on.
     18 * phone numbers taken out first, signed with the store's account link. Only
     19 * stores linked to an ERP7 account share.
    2320 */
    2421class LogShare {
    … …  
    4946
    5047        /**
    51          * Is the log being shared?
     48         * Is the log being shared? Always, for a store linked to an ERP7 account —
     49         * linking says so — and never for one that is not.
    5250         *
    5351         * @return bool
    5452         */
    5553        public static function enabled() {
    56                 $choice = (string) Settings::get( 'shareSyncLog', '' );
    57                 if ( 'on' === $choice ) {
    58                         return true;
    59                 }
    60                 if ( 'off' === $choice ) {
    61                         return false;
    62                 }
    6354                return State::connected();
    64         }
    65 
    66         /**
    67          * Turn sharing on or off by the merchant's choice.
    68          *
    69          * Switching it on starts from the last day rather than from wherever the
    70          * cursor stopped, which could be weeks of history nobody asked to send.
    71          *
    72          * @param bool $on New state.
    73          * @return void
    74          */
    75         public static function choose( $on ) {
    76                 $was = self::enabled();
    77                 Settings::set( 'shareSyncLog', $on ? 'on' : 'off' );
    78                 if ( $on && ! $was ) {
    79                         $state            = self::state();
    80                         $state['cursor']  = null;
    81                         $state['error']   = '';
    82                         $state['retryAt'] = 0;
    83                         self::save( $state );
    84                 }
    8555        }
    8656
    … …  
    134104                $state['cursor'] = max( (int) $state['cursor'], $floor );
    135105
    136                 $creds = State::connected() ? State::credentials() : null;
     106                $creds = State::credentials();
    137107                for ( $i = 0; $i < self::MAX_BATCHES; $i++ ) {
    138108                        // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, PluginCheck.Security.DirectDB.UnescapedDBParameter
  • erp7-order-sync-for-zoho-books/trunk/includes/Support/Settings.php

    r3733769 r3733904  
    156156                        /* -------- Maintenance -------- */
    157157                        'dailyReconEnabled'       => false,
    158                         // Send the sync log to ERP7 support: 'on' | 'off' | '' (not chosen:
    159                         // on for a store linked to an account, off otherwise). See LogShare.
    160                         'shareSyncLog'            => '',
    161158                );
    162159
    … …  
    268265                        return in_array( $value, array( 'email', 'name', 'email_then_name' ), true ) ? $value : 'email';
    269266                }
    270                 if ( 'shareSyncLog' === $key ) {
    271                         return in_array( $value, array( 'on', 'off' ), true ) ? $value : '';
    272                 }
    273267                return $value;
    274268        }
  • erp7-order-sync-for-zoho-books/trunk/readme.txt

    r3733793 r3733904  
    77WC requires at least: 8.0
    88WC tested up to: 10.8
    9 Stable tag: 1.0.3
     9Stable tag: 1.0.4
    1010License: GPLv2 or later
    1111License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    6262* 🆕 If your Zoho Books trial or subscription ends, the plugin tells you once and keeps the work ready to re-run
    6363* 🆕 Works on a phone
    64 * 🆕 Optional: send your sync log to ERP7 support, so problems are spotted sooner
     64* 🆕 Stores linked to an ERP7 account share their sync log with support, so problems are spotted sooner
    6565* A setup wizard that resumes exactly where you left off — even across the OAuth redirect
    6666* Change organization safely: the plugin warns you, explains what happens to existing links, and cleans up on your say-so
    … …  
    105105
    106106* Plans: a store linked to an ERP7 account checks its plan here, sending its site address with each signed request.
    107 * Sync log: every 5 minutes the store sends the new lines of its sync log — time, level, type, the message, the order or product it is about, how long it took and the technical detail recorded with it (such as the job, the attempt and Zoho's reply) — with customer email addresses and phone numbers removed first, together with the site address, site name, plugin version and a random id for this installation. Support uses it to spot failures and help sooner, and it is kept for 30 days. It is on for stores linked to an ERP7 account and off for others until switched on; either way, switch it under Zoho Sync → Logs → "Send this log to ERP7 support".
     107* Sync log: every 5 minutes the store sends the new lines of its sync log — time, level, type, the message, the order or product it is about, how long it took and the technical detail recorded with it (such as the job, the attempt and Zoho's reply) — with customer email addresses and phone numbers removed first, together with the site address, site name, plugin version and a random id for this installation. Support uses it to spot failures and help sooner, and it is kept for 30 days. Only stores linked to an ERP7 account send it; linking an account turns it on. A store that is not linked sends nothing.
    108108
    109109== Frequently Asked Questions ==
    … …  
    137137
    138138== Changelog ==
     139
     140= 1.0.4 =
     141* Every store linked to an ERP7 account now shares its sync log with ERP7 support, so failures are spotted and fixed sooner. The switch under Zoho Sync → Logs is gone. Customer email addresses and phone numbers are still removed first, and a store that is not linked sends nothing.
    139142
    140143= 1.0.3 =
  • erp7-order-sync-for-zoho-books/trunk/src/pages/Logs.jsx

    r3733769 r3733904  
    44 */
    55import { useState } from '@wordpress/element';
    6 import { SelectControl, TextControl, Button, ToggleControl } from '@wordpress/components';
     6import { SelectControl, TextControl, Button } from '@wordpress/components';
    77import { __, sprintf } from '@wordpress/i18n';
    88import Section from '../components/Section';
    … …  
    6767}
    6868
    69 /**
    70  * The switch for sending this log to ERP7 support, with how it is going.
    71  *
    72  * @return {Element|null} Toggle row, or nothing until the state has loaded.
    73  */
    74 function ShareLog() {
    75         const addToast = useToast();
    76         const { data, reload } = useAsync( () => apiGet( '/logs/share' ), [] );
    77         const [ saving, setSaving ] = useState( false );
    78 
    79         if ( ! data ) {
    80                 return null;
    81         }
    82 
    83         const choose = async ( enabled ) => {
    84                 setSaving( true );
    85                 try {
    86                         await apiPost( '/logs/share', { enabled } );
    87                         reload();
    88                 } catch ( e ) {
    89                         addToast( errorMessage( e ), 'error' );
    90                 }
    91                 setSaving( false );
    92         };
    93 
    94         const privacy = __( 'Customer email addresses and phone numbers are removed before anything is sent.', 'erp7-order-sync-for-zoho-books' );
    95         let help;
    96         if ( ! data.enabled ) {
    97                 help = __( 'Off. Switch it on so ERP7 support can see this store’s failures and help sooner.', 'erp7-order-sync-for-zoho-books' ) + ' ' + privacy;
    98         } else if ( data.error ) {
    99                 help = sprintf(
    100                         /* translators: %s: why the last attempt failed. */
    101                         __( 'The last attempt did not go through (%s). It tries again by itself.', 'erp7-order-sync-for-zoho-books' ),
    102                         data.error
    103                 );
    104         } else if ( data.sentAt ) {
    105                 help = sprintf(
    106                         /* translators: %s: date and time of the last batch. */
    107                         __( 'Sent every 5 minutes; last sent %s.', 'erp7-order-sync-for-zoho-books' ),
    108                         localTime( data.sentAt * 1000, { dateStyle: 'medium', timeStyle: 'short' } )
    109                 ) + ' ' + privacy;
    110         } else {
    111                 help = __( 'Sent every 5 minutes.', 'erp7-order-sync-for-zoho-books' ) + ' ' + privacy;
    112         }
    113 
    114         return (
    115                 <div className="zbwc-share-log">
    116                         <ToggleControl
    117                                 __nextHasNoMarginBottom
    118                                 label={ __( 'Send this log to ERP7 support', 'erp7-order-sync-for-zoho-books' ) }
    119                                 help={ help }
    120                                 checked={ !! data.enabled }
    121                                 disabled={ saving }
    122                                 onChange={ choose }
    123                         />
    124                 </div>
    125         );
    126 }
    127 
    12869function SyncLog() {
    12970        const addToast = useToast();
    … …  
    15091                        actions={ <Button variant="tertiary" isDestructive onClick={ clearLogs }>{ __( 'Clear log', 'erp7-order-sync-for-zoho-books' ) }</Button> }
    15192                >
    152                         <ShareLog />
    153 
    15493                        <ActivityBar onNewEntries={ () => filters.page === 1 && reload() } />
    15594
  • erp7-order-sync-for-zoho-books/trunk/src/styles.scss

    r3733769 r3733904  
    168168        .zbwc-nowrap { white-space: nowrap; }
    169169        .zbwc-errcell { color: var(--zbwc-error); font-size: 12px; max-width: 420px; }
    170 
    171         .zbwc-share-log { padding: 0 0 14px; margin-bottom: 14px; border-bottom: 1px solid #f0f0f1; }
    172         .zbwc-share-log .components-toggle-control__help { max-width: 640px; }
    173170
    174171        .zbwc-filters { display: flex; gap: 16px; align-items: flex-end; margin-bottom: 12px; flex-wrap: wrap; }
Note: See TracChangeset for help on using the changeset viewer.