@accounter/client 0.0.8-alpha-20251022144027-c9c7a4b309de8a72dfd0ec4f11e63713ad12878f → 0.0.8-alpha-20251023065832-9a9f37786b0e29dc8e6ea58ec9856bc043cc0e8a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/CHANGELOG.md +42 -1
  2. package/dist/assets/Checkbox-lfqFDKZM.js +6 -0
  3. package/dist/assets/Progress-DvGsu87E.js +1 -0
  4. package/dist/assets/Typography-BX4mj53o.js +1 -0
  5. package/dist/assets/accordion-lOk81yKP.js +1 -0
  6. package/dist/assets/accountant-approvals-DWLEu1Um.js +1 -0
  7. package/dist/assets/all-charges-DhPxcK73.js +1 -0
  8. package/dist/assets/arrow-up-down-CFrneqND.js +6 -0
  9. package/dist/assets/building-2-Bqvbwz7Q.js +6 -0
  10. package/dist/assets/business--eNnF4xF.js +42 -0
  11. package/dist/assets/business-header-DjutqTRC.js +1 -0
  12. package/dist/assets/business-transactions-single-CJ5pLN-D.js +1 -0
  13. package/dist/assets/business-trip-Jlc0bfXC.js +1 -0
  14. package/dist/assets/charges-filters-C-H07qp1.js +1 -0
  15. package/dist/assets/charges-ledger-validation-Bln73m_U.js +1 -0
  16. package/dist/assets/chart-Wut6cPCx.js +74 -0
  17. package/dist/assets/data-table-pagination-BnQGVnmE.js +11 -0
  18. package/dist/assets/editable-business-trip-CjJg13b0.js +16 -0
  19. package/dist/assets/graphql-document-dedupe-fragments-ByT8-wlV.js +1 -0
  20. package/dist/assets/index-BE5nnZYY.js +9 -0
  21. package/dist/assets/index-BQrSA2Kk.js +1 -0
  22. package/dist/assets/index-BX3VSsge.js +1 -0
  23. package/dist/assets/index-BagyRbeI.js +2 -0
  24. package/dist/assets/index-BkeJsHyM.js +1 -0
  25. package/dist/assets/index-BoSqeUi7.js +24 -0
  26. package/dist/assets/index-BtAgm6J8.js +1 -0
  27. package/dist/assets/index-BwIQ8ifH.js +1 -0
  28. package/dist/assets/index-Bxlzprxi.js +1 -0
  29. package/dist/assets/index-C--YkrHw.js +1 -0
  30. package/dist/assets/index-C2INIVq3.js +137 -0
  31. package/dist/assets/index-CN7VPpiB.js +876 -0
  32. package/dist/assets/index-CQXFj3Uj.css +1 -0
  33. package/dist/assets/index-CVz9TqoS.js +6 -0
  34. package/dist/assets/index-CalcGztb.js +1 -0
  35. package/dist/assets/index-Csqyxwgx.js +11 -0
  36. package/dist/assets/index-DjSJrgv5.js +2 -0
  37. package/dist/assets/index-DquDHLbE.js +17 -0
  38. package/dist/assets/index-Dr2UkUOm.js +1 -0
  39. package/dist/assets/index-E2rO9Bsf.js +1 -0
  40. package/dist/assets/index-Ggixi4PP.js +1 -0
  41. package/dist/assets/index-WCosiqtQ.js +1 -0
  42. package/dist/assets/index-vsZbkVMv.js +1 -0
  43. package/dist/assets/index-y8Z-aJKc.js +6 -0
  44. package/dist/assets/{index.es-9gVMpHTc.js → index.es-D8leRAY2.js} +5 -5
  45. package/dist/assets/issue-document-DKE0dzdE.js +1 -0
  46. package/dist/assets/login-page-BYwtRBMd.js +1 -0
  47. package/dist/assets/missing-info-charges-CgMJ4Bu3.js +1 -0
  48. package/dist/assets/page-not-found-Cfte6bjZ.js +1 -0
  49. package/dist/assets/pencil-CUSCcyVn.js +6 -0
  50. package/dist/assets/report-commentary-row-B-uxVnyO.js +1 -0
  51. package/dist/assets/save-qyt28nOG.js +6 -0
  52. package/dist/assets/sequential-CAnleQny.js +1 -0
  53. package/dist/assets/sub-LLu8afpC.js +1 -0
  54. package/dist/assets/subMonths-C1UIPrOU.js +1 -0
  55. package/dist/index.html +2 -2
  56. package/package.json +1 -1
  57. package/src/components/business/admin-business-section.tsx +11 -5
  58. package/src/components/business/business-header.tsx +21 -2
  59. package/src/components/business-transactions/business-extended-info.tsx +13 -15
  60. package/src/components/business-transactions/business-transactions-single.tsx +3 -3
  61. package/src/components/business-transactions/index.tsx +12 -1
  62. package/src/components/business-trips/business-trip.tsx +3 -3
  63. package/src/components/businesses/index.tsx +45 -36
  64. package/src/components/charges/cells/business-trip.tsx +6 -8
  65. package/src/components/charges/cells/counterparty.tsx +7 -5
  66. package/src/components/common/accounter-table.tsx +6 -5
  67. package/src/components/common/business-trip-report/parts/core-expense-row.tsx +11 -9
  68. package/src/components/common/business-trip-report/parts/uncategorized-transactions.tsx +11 -13
  69. package/src/components/common/buttons/index.ts +0 -2
  70. package/src/components/common/buttons/logout-button.tsx +7 -6
  71. package/src/components/common/documents-to-charge-matcher/selection-handler/index.tsx +4 -2
  72. package/src/components/common/documents-to-charge-matcher/selection-handler/wide-filtered-selection.tsx +5 -7
  73. package/src/components/common/forms/edit-document.tsx +21 -10
  74. package/src/components/common/forms/index.ts +0 -1
  75. package/src/components/common/new-documents-list.tsx +10 -8
  76. package/src/components/documents-table/cells/creditor.tsx +11 -4
  77. package/src/components/documents-table/cells/debtor.tsx +11 -4
  78. package/src/components/error-boundary.tsx +189 -0
  79. package/src/components/layout/breadcrumbs.tsx +72 -0
  80. package/src/components/layout/dashboard-layout.tsx +4 -0
  81. package/src/components/layout/document-title.tsx +26 -0
  82. package/src/components/layout/navigation-progress.tsx +52 -0
  83. package/src/components/layout/page-skeleton.tsx +49 -0
  84. package/src/components/layout/sidelinks.tsx +28 -27
  85. package/src/components/ledger-table/counterparty-cell.tsx +19 -13
  86. package/src/components/login-page.tsx +2 -1
  87. package/src/components/reports/corporate-tax-ruling-compliance-report/index.tsx +3 -3
  88. package/src/components/reports/profit-and-loss-report/index.tsx +3 -3
  89. package/src/components/reports/tax-report/index.tsx +3 -3
  90. package/src/components/screens/businesses/business.tsx +21 -9
  91. package/src/components/screens/charges/charge.tsx +22 -9
  92. package/src/components/transactions-table/cells/counterparty.tsx +9 -2
  93. package/src/components/transactions-table/cells-legacy/counterparty.tsx +9 -2
  94. package/src/gql/gql.ts +6 -30
  95. package/src/gql/graphql.ts +13 -36
  96. package/src/helpers/dates.ts +2 -32
  97. package/src/index.tsx +4 -22
  98. package/src/providers/auth-guard.tsx +14 -23
  99. package/src/providers/index.tsx +7 -2
  100. package/src/providers/urql-client.ts +86 -0
  101. package/src/providers/urql.tsx +7 -12
  102. package/src/providers/user-provider.tsx +3 -2
  103. package/src/router/config.tsx +534 -0
  104. package/src/router/layouts/dashboard-layout.tsx +20 -0
  105. package/src/router/layouts/root-layout.tsx +69 -0
  106. package/src/router/loaders/auth-loader.ts +32 -0
  107. package/src/router/loaders/business-loader.ts +25 -0
  108. package/src/router/loaders/charge-loader.ts +25 -0
  109. package/src/router/loaders/index.ts +17 -0
  110. package/src/router/routes.ts +88 -0
  111. package/src/router/types.ts +68 -0
  112. package/dist/assets/index-B2UYAO1O.css +0 -1
  113. package/dist/assets/index-CZb2m31K.js +0 -1229
  114. package/src/components/businesses/all-businesses-row.tsx +0 -87
  115. package/src/components/businesses/cells/hebrew-name.tsx +0 -31
  116. package/src/components/businesses/cells/index.ts +0 -2
  117. package/src/components/businesses/cells/name.tsx +0 -31
  118. package/src/components/common/buttons/button-with-label.tsx +0 -41
  119. package/src/components/common/buttons/button.tsx +0 -44
  120. package/src/components/common/forms/business-card.tsx +0 -234
@@ -0,0 +1 @@
1
+ import{j as e,c as t,dA as s}from"./index-CN7VPpiB.js";const o=()=>e.jsx(t,{title:"New Document",description:"Issue a document for a client",children:e.jsx(s,{})});export{o as IssueDocumentScreen};
@@ -0,0 +1 @@
1
+ import{r as n,g3 as j,w as f,Q as p,V as b,j as e,$ as v,a1 as o,a2 as l,a3 as c,a4 as i,v as d,a6 as m,B as w,a9 as N,R as y,t as x,ab as u}from"./index-CN7VPpiB.js";const S=N({username:u().min(2).max(50),password:u().min(2).max(50)});function E(){const{authService:a}=n.useContext(j);n.useEffect(()=>{a.logout()},[a]);const h=f(),s=p({resolver:b(S),defaultValues:{username:"",password:""}});function g(r){try{a.login(r.username,r.password).then(t=>{h(y.HOME)}),x.success("Success",{description:"You have successfully logged in."})}catch(t){console.error(t),x.error("Error",{description:"Invalid credentials. Please try again."})}}return e.jsxs("div",{className:"w-full flex flex-col justify-center items-center h-screen lg:grid lg:min-h-[200px] lg:grid-cols-2 xl:min-h-screen",children:[e.jsx("div",{className:"flex items-center justify-center",children:e.jsx(v,{...s,children:e.jsxs("form",{onSubmit:s.handleSubmit(g),className:"space-y-8 w-[300px]",children:[e.jsxs("div",{className:"grid gap-2 text-center",children:[e.jsx("h1",{className:"text-3xl font-bold",children:"Accounter"}),e.jsx("h1",{className:"text-3xl font-bold",children:"Login"}),e.jsx("p",{className:"text-balance text-muted-foreground",children:"Enter your credentials to login."})]}),e.jsx(o,{control:s.control,name:"username",render:({field:r})=>e.jsxs(l,{children:[e.jsx(c,{children:"Username"}),e.jsx(i,{children:e.jsx(d,{placeholder:"Username",...r})}),e.jsx(m,{})]})}),e.jsx(o,{control:s.control,name:"password",render:({field:r})=>e.jsxs(l,{children:[e.jsx(c,{children:"Password"}),e.jsx(i,{children:e.jsx(d,{placeholder:"Password",type:"password",...r})}),e.jsx(m,{})]})}),e.jsx(w,{disabled:s.formState.isSubmitting||!s.formState.isValid,className:"w-full font-semibold",type:"submit",children:"Login"})]})})}),e.jsx("div",{className:"hidden bg-muted lg:block bg-black rounded-tl-3xl rounded-bl-3xl",children:e.jsx("div",{className:"flex flex-row justify-center items-center h-screen",children:e.jsx("img",{src:"../../icons/guild-logo.svg",alt:"nature",className:"w-[100px] h-[100px] object-cover"})})})]})}export{E as LoginPage};
@@ -0,0 +1 @@
1
+ import{r as s,F as S,u as D,a as w,j as e,T as E,B as b,P as N,b as P,c as R,L as T,C as q,E as y,I as z,M as A,d as B}from"./index-CN7VPpiB.js";import{M as F}from"./index-Csqyxwgx.js";import"./Checkbox-lfqFDKZM.js";const Q=()=>{const{setFiltersContext:g}=s.useContext(S),[n,u]=s.useState(void 0),[i,h]=s.useState(void 0),[o,m]=s.useState(void 0),[r,C]=s.useState(!1),[t,c]=s.useState([]),{get:x}=D(),[p,f]=s.useState(x("page")?Number(x("page")):1),j=s.useCallback((a,v)=>{t.map(d=>d.id).includes(a)?c(t.filter(d=>d.id!==a)):c([...t,{id:a,onChange:v}])},[t]),[{data:l,fetching:M}]=w({query:B,variables:{page:p,limit:100}});function I(){c([])}return s.useEffect(()=>{g(e.jsxs("div",{className:"flex flex-row gap-x-5",children:[e.jsx(E,{label:"Expand all accounts",children:e.jsx(b,{variant:"outline",size:"icon",className:"size-7.5",onClick:()=>C(a=>!a),children:r?e.jsx(N,{className:"size-5"}):e.jsx(P,{className:"size-5"})})}),e.jsx(F,{selected:t,resetMerge:I})]}))},[l,M,p,r,g,f,C,t]),e.jsxs(R,{title:"Missing Info Charges",description:"Review charges with missing required details",children:[!l?.chargesWithMissingRequiredInfo.nodes||M?e.jsx(T,{className:"h-10 w-10 animate-spin mr-2 self-center"}):e.jsx(q,{setEditChargeId:u,setInsertDocument:h,setMatchDocuments:m,toggleMergeCharge:j,mergeSelectedCharges:new Set(t.map(a=>a.id)),data:l?.chargesWithMissingRequiredInfo?.nodes,isAllOpened:r}),n&&e.jsx(y,{chargeId:n?.id,close:()=>u(void 0),onChange:n.onChange}),i&&e.jsx(z,{chargeId:i.id,onChange:i.onChange,close:()=>h(void 0)}),o&&e.jsx(A,{chargeId:o.id,ownerId:o.ownerId,setMatchDocuments:()=>m(void 0)})]})};export{Q as MissingInfoCharges};
@@ -0,0 +1 @@
1
+ import{j as s,X as a,Y as e,Z as r,a0 as d}from"./index-CN7VPpiB.js";const o=()=>s.jsxs(a,{className:"m-5",children:[s.jsx(e,{children:s.jsx(r,{children:"404"})}),s.jsx(d,{children:s.jsx("p",{children:"Page not found"})})]});export{o as PageNotFound};
@@ -0,0 +1,6 @@
1
+ import{z as a}from"./index-CN7VPpiB.js";/**
2
+ * @license lucide-react v0.546.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const e=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]],c=a("pencil",e);export{c as P};
@@ -0,0 +1 @@
1
+ import{r as i,W as c,eL as j,j as t,c7 as h,cj as x,eM as m}from"./index-CN7VPpiB.js";const p=({subCommentaryData:a,dataRow:o})=>{const[s,l]=i.useState(!1),r=a.map(e=>c(j,e)),d=t.jsx(x,{toggleExpansion:l,isExpanded:s});return t.jsxs(t.Fragment,{children:[o(d),s&&t.jsx("tr",{children:t.jsx("td",{colSpan:99,children:t.jsxs(h,{striped:!0,highlightOnHover:!0,className:"ml-8 w-full h-full",children:[t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"Entity"}),t.jsx("th",{children:"Amount"})]})}),t.jsxs("tbody",{children:[r?.sort((e,n)=>e.financialEntity.name.localeCompare(n.financialEntity.name)).map(e=>t.jsxs("tr",{children:[t.jsx("td",{children:e.financialEntity.name}),t.jsx("td",{children:e.amount.formatted})]},e.financialEntity.id)),t.jsx("tr",{children:t.jsx("td",{colSpan:8})})]})]})})})]})},g=({commentaryData:a,dataRow:o})=>{const[s,l]=i.useState(!1),{records:r}=c(m,a),d=r.length?t.jsx(x,{toggleExpansion:l,isExpanded:s}):null;return t.jsxs(t.Fragment,{children:[o(d),s&&t.jsx("tr",{children:t.jsx("td",{colSpan:99,children:t.jsxs(h,{striped:!0,highlightOnHover:!0,className:"ml-8 w-full h-full",children:[t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"Sort Code"}),t.jsx("th",{children:"Amount"}),t.jsx("th",{})]})}),t.jsxs("tbody",{children:[r?.sort((e,n)=>e.sortCode.key-n.sortCode.key).map(e=>t.jsx(p,{dataRow:n=>t.jsxs("tr",{children:[t.jsxs("td",{children:[e.sortCode.key," - ",e.sortCode.name]}),t.jsx("td",{children:e.amount.formatted}),t.jsx("td",{children:n})]},e.sortCode.key),subCommentaryData:e.records},e.sortCode.key)),t.jsx("tr",{children:t.jsx("td",{colSpan:8})})]})]})})})]})};export{g as R};
@@ -0,0 +1,6 @@
1
+ import{z as a}from"./index-CN7VPpiB.js";/**
2
+ * @license lucide-react v0.546.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const e=[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]],o=a("save",e);export{o as S};
@@ -0,0 +1 @@
1
+ function Un(n){return function(){return n}}const ma=Math.cos,da=Math.sin,ya=Math.sqrt,It=Math.PI,pa=2*It;function Rt(n){return typeof n=="object"&&"length"in n?n:Array.from(n)}function yn(n,e){if((o=n.length)>1)for(var t=1,r,u,a=n[e[0]],o,i=a.length;t<o;++t)for(u=a,a=n[e[t]],r=0;r<i;++r)a[r][1]+=a[r][0]=isNaN(u[r][1])?u[r][0]:u[r][1]}function ve(n){for(var e=n.length,t=new Array(e);--e>=0;)t[e]=e;return t}function qt(n,e){return n[e]}function Pt(n){const e=[];return e.key=n,e}function xa(){var n=Un([]),e=ve,t=yn,r=qt;function u(a){var o=Array.from(n.apply(this,arguments),Pt),i,c=o.length,f=-1,g;for(const l of a)for(i=0,++f;i<c;++i)(o[i][f]=[0,+r(l,o[i].key,f,a)]).data=l;for(i=0,g=Rt(e(o));i<c;++i)o[g[i]].index=i;return t(o,g),o}return u.keys=function(a){return arguments.length?(n=typeof a=="function"?a:Un(Array.from(a)),u):n},u.value=function(a){return arguments.length?(r=typeof a=="function"?a:Un(+a),u):r},u.order=function(a){return arguments.length?(e=a==null?ve:typeof a=="function"?a:Un(Array.from(a)),u):e},u.offset=function(a){return arguments.length?(t=a??yn,u):t},u}function Ma(n,e){if((r=n.length)>0){for(var t,r,u=0,a=n[0].length,o;u<a;++u){for(o=t=0;t<r;++t)o+=n[t][u][1]||0;if(o)for(t=0;t<r;++t)n[t][u][1]/=o}yn(n,e)}}function wa(n,e){if((u=n.length)>0){for(var t=0,r=n[e[0]],u,a=r.length;t<a;++t){for(var o=0,i=0;o<u;++o)i+=n[o][t][1]||0;r[t][1]+=r[t][0]=-i/2}yn(n,e)}}function ba(n,e){if(!(!((o=n.length)>0)||!((a=(u=n[e[0]]).length)>0))){for(var t=0,r=1,u,a,o;r<a;++r){for(var i=0,c=0,f=0;i<o;++i){for(var g=n[e[i]],l=g[r][1]||0,h=g[r-1][1]||0,p=(l-h)/2,d=0;d<i;++d){var v=n[e[d]],k=v[r][1]||0,C=v[r-1][1]||0;p+=k-C}c+=l,f+=p*l}u[r-1][1]+=u[r-1][0]=t,c&&(t-=f/c)}u[r-1][1]+=u[r-1][0]=t,yn(n,e)}}function $n(n,e){return n==null||e==null?NaN:n<e?-1:n>e?1:n>=e?0:NaN}function Et(n,e){return n==null||e==null?NaN:e<n?-1:e>n?1:e>=n?0:NaN}function fe(n){let e,t,r;n.length!==2?(e=$n,t=(i,c)=>$n(n(i),c),r=(i,c)=>n(i)-c):(e=n===$n||n===Et?n:zt,t=n,r=n);function u(i,c,f=0,g=i.length){if(f<g){if(e(c,c)!==0)return g;do{const l=f+g>>>1;t(i[l],c)<0?f=l+1:g=l}while(f<g)}return f}function a(i,c,f=0,g=i.length){if(f<g){if(e(c,c)!==0)return g;do{const l=f+g>>>1;t(i[l],c)<=0?f=l+1:g=l}while(f<g)}return f}function o(i,c,f=0,g=i.length){const l=u(i,c,f,g-1);return l>f&&r(i[l-1],c)>-r(i[l],c)?l-1:l}return{left:u,center:o,right:a}}function zt(){return 0}function Zt(n){return n===null?NaN:+n}function*va(n,e){for(let t of n)t!=null&&(t=+t)>=t&&(yield t)}const Vt=fe($n),ut=Vt.right;fe(Zt).center;class Te extends Map{constructor(e,t=Bt){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),e!=null)for(const[r,u]of e)this.set(r,u)}get(e){return super.get(ke(this,e))}has(e){return super.has(ke(this,e))}set(e,t){return super.set(Qt(this,e),t)}delete(e){return super.delete(Xt(this,e))}}function ke({_intern:n,_key:e},t){const r=e(t);return n.has(r)?n.get(r):t}function Qt({_intern:n,_key:e},t){const r=e(t);return n.has(r)?n.get(r):(n.set(r,t),t)}function Xt({_intern:n,_key:e},t){const r=e(t);return n.has(r)&&(t=n.get(r),n.delete(r)),t}function Bt(n){return n!==null&&typeof n=="object"?n.valueOf():n}const _t=Math.sqrt(50),Gt=Math.sqrt(10),Jt=Math.sqrt(2);function Fn(n,e,t){const r=(e-n)/Math.max(0,t),u=Math.floor(Math.log10(r)),a=r/Math.pow(10,u),o=a>=_t?10:a>=Gt?5:a>=Jt?2:1;let i,c,f;return u<0?(f=Math.pow(10,-u)/o,i=Math.round(n*f),c=Math.round(e*f),i/f<n&&++i,c/f>e&&--c,f=-f):(f=Math.pow(10,u)*o,i=Math.round(n/f),c=Math.round(e/f),i*f<n&&++i,c*f>e&&--c),c<i&&.5<=t&&t<2?Fn(n,e,t*2):[i,c,f]}function te(n,e,t){if(e=+e,n=+n,t=+t,!(t>0))return[];if(n===e)return[n];const r=e<n,[u,a,o]=r?Fn(e,n,t):Fn(n,e,t);if(!(a>=u))return[];const i=a-u+1,c=new Array(i);if(r)if(o<0)for(let f=0;f<i;++f)c[f]=(a-f)/-o;else for(let f=0;f<i;++f)c[f]=(a-f)*o;else if(o<0)for(let f=0;f<i;++f)c[f]=(u+f)/-o;else for(let f=0;f<i;++f)c[f]=(u+f)*o;return c}function re(n,e,t){return e=+e,n=+n,t=+t,Fn(n,e,t)[2]}function ue(n,e,t){e=+e,n=+n,t=+t;const r=e<n,u=r?re(e,n,t):re(n,e,t);return(r?-1:1)*(u<0?1/-u:u)}function Kt(n,e,t){n=+n,e=+e,t=(u=arguments.length)<2?(e=n,n=0,1):u<3?1:+t;for(var r=-1,u=Math.max(0,Math.ceil((e-n)/t))|0,a=new Array(u);++r<u;)a[r]=n+r*t;return a}function B(n,e){switch(arguments.length){case 0:break;case 1:this.range(n);break;default:this.range(e).domain(n);break}return this}function Rn(n,e){switch(arguments.length){case 0:break;case 1:{typeof n=="function"?this.interpolator(n):this.range(n);break}default:{this.domain(n),typeof e=="function"?this.interpolator(e):this.range(e);break}}return this}const Ce=Symbol("implicit");function at(){var n=new Te,e=[],t=[],r=Ce;function u(a){let o=n.get(a);if(o===void 0){if(r!==Ce)return r;n.set(a,o=e.push(a)-1)}return t[o%t.length]}return u.domain=function(a){if(!arguments.length)return e.slice();e=[],n=new Te;for(const o of a)n.has(o)||n.set(o,e.push(o)-1);return u},u.range=function(a){return arguments.length?(t=Array.from(a),u):t.slice()},u.unknown=function(a){return arguments.length?(r=a,u):r},u.copy=function(){return at(e,t).unknown(r)},B.apply(u,arguments),u}function ot(){var n=at().unknown(void 0),e=n.domain,t=n.range,r=0,u=1,a,o,i=!1,c=0,f=0,g=.5;delete n.unknown;function l(){var h=e().length,p=u<r,d=p?u:r,v=p?r:u;a=(v-d)/Math.max(1,h-c+f*2),i&&(a=Math.floor(a)),d+=(v-d-a*(h-c))*g,o=a*(1-c),i&&(d=Math.round(d),o=Math.round(o));var k=Kt(h).map(function(C){return d+a*C});return t(p?k.reverse():k)}return n.domain=function(h){return arguments.length?(e(h),l()):e()},n.range=function(h){return arguments.length?([r,u]=h,r=+r,u=+u,l()):[r,u]},n.rangeRound=function(h){return[r,u]=h,r=+r,u=+u,i=!0,l()},n.bandwidth=function(){return o},n.step=function(){return a},n.round=function(h){return arguments.length?(i=!!h,l()):i},n.padding=function(h){return arguments.length?(c=Math.min(1,f=+h),l()):c},n.paddingInner=function(h){return arguments.length?(c=Math.min(1,h),l()):c},n.paddingOuter=function(h){return arguments.length?(f=+h,l()):f},n.align=function(h){return arguments.length?(g=Math.max(0,Math.min(1,h)),l()):g},n.copy=function(){return ot(e(),[r,u]).round(i).paddingInner(c).paddingOuter(f).align(g)},B.apply(l(),arguments)}function it(n){var e=n.copy;return n.padding=n.paddingOuter,delete n.paddingInner,delete n.paddingOuter,n.copy=function(){return it(e())},n}function Ta(){return it(ot.apply(null,arguments).paddingInner(1))}function ce(n,e,t){n.prototype=e.prototype=t,t.constructor=n}function ft(n,e){var t=Object.create(n.prototype);for(var r in e)t[r]=e[r];return t}function bn(){}var pn=.7,Hn=1/pn,cn="\\s*([+-]?\\d+)\\s*",xn="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",P="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",jt=/^#([0-9a-f]{3,8})$/,nr=new RegExp(`^rgb\\(${cn},${cn},${cn}\\)$`),er=new RegExp(`^rgb\\(${P},${P},${P}\\)$`),tr=new RegExp(`^rgba\\(${cn},${cn},${cn},${xn}\\)$`),rr=new RegExp(`^rgba\\(${P},${P},${P},${xn}\\)$`),ur=new RegExp(`^hsl\\(${xn},${P},${P}\\)$`),ar=new RegExp(`^hsla\\(${xn},${P},${P},${xn}\\)$`),Ue={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};ce(bn,Mn,{copy(n){return Object.assign(new this.constructor,this,n)},displayable(){return this.rgb().displayable()},hex:Se,formatHex:Se,formatHex8:or,formatHsl:ir,formatRgb:De,toString:De});function Se(){return this.rgb().formatHex()}function or(){return this.rgb().formatHex8()}function ir(){return ct(this).formatHsl()}function De(){return this.rgb().formatRgb()}function Mn(n){var e,t;return n=(n+"").trim().toLowerCase(),(e=jt.exec(n))?(t=e[1].length,e=parseInt(e[1],16),t===6?Ne(e):t===3?new Y(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):t===8?Sn(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):t===4?Sn(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=nr.exec(n))?new Y(e[1],e[2],e[3],1):(e=er.exec(n))?new Y(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=tr.exec(n))?Sn(e[1],e[2],e[3],e[4]):(e=rr.exec(n))?Sn(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=ur.exec(n))?He(e[1],e[2]/100,e[3]/100,1):(e=ar.exec(n))?He(e[1],e[2]/100,e[3]/100,e[4]):Ue.hasOwnProperty(n)?Ne(Ue[n]):n==="transparent"?new Y(NaN,NaN,NaN,0):null}function Ne(n){return new Y(n>>16&255,n>>8&255,n&255,1)}function Sn(n,e,t,r){return r<=0&&(n=e=t=NaN),new Y(n,e,t,r)}function fr(n){return n instanceof bn||(n=Mn(n)),n?(n=n.rgb(),new Y(n.r,n.g,n.b,n.opacity)):new Y}function ae(n,e,t,r){return arguments.length===1?fr(n):new Y(n,e,t,r??1)}function Y(n,e,t,r){this.r=+n,this.g=+e,this.b=+t,this.opacity=+r}ce(Y,ae,ft(bn,{brighter(n){return n=n==null?Hn:Math.pow(Hn,n),new Y(this.r*n,this.g*n,this.b*n,this.opacity)},darker(n){return n=n==null?pn:Math.pow(pn,n),new Y(this.r*n,this.g*n,this.b*n,this.opacity)},rgb(){return this},clamp(){return new Y(en(this.r),en(this.g),en(this.b),Yn(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:$e,formatHex:$e,formatHex8:cr,formatRgb:Fe,toString:Fe}));function $e(){return`#${j(this.r)}${j(this.g)}${j(this.b)}`}function cr(){return`#${j(this.r)}${j(this.g)}${j(this.b)}${j((isNaN(this.opacity)?1:this.opacity)*255)}`}function Fe(){const n=Yn(this.opacity);return`${n===1?"rgb(":"rgba("}${en(this.r)}, ${en(this.g)}, ${en(this.b)}${n===1?")":`, ${n})`}`}function Yn(n){return isNaN(n)?1:Math.max(0,Math.min(1,n))}function en(n){return Math.max(0,Math.min(255,Math.round(n)||0))}function j(n){return n=en(n),(n<16?"0":"")+n.toString(16)}function He(n,e,t,r){return r<=0?n=e=t=NaN:t<=0||t>=1?n=e=NaN:e<=0&&(n=NaN),new q(n,e,t,r)}function ct(n){if(n instanceof q)return new q(n.h,n.s,n.l,n.opacity);if(n instanceof bn||(n=Mn(n)),!n)return new q;if(n instanceof q)return n;n=n.rgb();var e=n.r/255,t=n.g/255,r=n.b/255,u=Math.min(e,t,r),a=Math.max(e,t,r),o=NaN,i=a-u,c=(a+u)/2;return i?(e===a?o=(t-r)/i+(t<r)*6:t===a?o=(r-e)/i+2:o=(e-t)/i+4,i/=c<.5?a+u:2-a-u,o*=60):i=c>0&&c<1?0:o,new q(o,i,c,n.opacity)}function lr(n,e,t,r){return arguments.length===1?ct(n):new q(n,e,t,r??1)}function q(n,e,t,r){this.h=+n,this.s=+e,this.l=+t,this.opacity=+r}ce(q,lr,ft(bn,{brighter(n){return n=n==null?Hn:Math.pow(Hn,n),new q(this.h,this.s,this.l*n,this.opacity)},darker(n){return n=n==null?pn:Math.pow(pn,n),new q(this.h,this.s,this.l*n,this.opacity)},rgb(){var n=this.h%360+(this.h<0)*360,e=isNaN(n)||isNaN(this.s)?0:this.s,t=this.l,r=t+(t<.5?t:1-t)*e,u=2*t-r;return new Y(_n(n>=240?n-240:n+120,u,r),_n(n,u,r),_n(n<120?n+240:n-120,u,r),this.opacity)},clamp(){return new q(Ye(this.h),Dn(this.s),Dn(this.l),Yn(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const n=Yn(this.opacity);return`${n===1?"hsl(":"hsla("}${Ye(this.h)}, ${Dn(this.s)*100}%, ${Dn(this.l)*100}%${n===1?")":`, ${n})`}`}}));function Ye(n){return n=(n||0)%360,n<0?n+360:n}function Dn(n){return Math.max(0,Math.min(1,n||0))}function _n(n,e,t){return(n<60?e+(t-e)*n/60:n<180?t:n<240?e+(t-e)*(240-n)/60:e)*255}const le=n=>()=>n;function sr(n,e){return function(t){return n+t*e}}function gr(n,e,t){return n=Math.pow(n,t),e=Math.pow(e,t)-n,t=1/t,function(r){return Math.pow(n+r*e,t)}}function hr(n){return(n=+n)==1?lt:function(e,t){return t-e?gr(e,t,n):le(isNaN(e)?t:e)}}function lt(n,e){var t=e-n;return t?sr(n,t):le(isNaN(n)?e:n)}const Ae=(function n(e){var t=hr(e);function r(u,a){var o=t((u=ae(u)).r,(a=ae(a)).r),i=t(u.g,a.g),c=t(u.b,a.b),f=lt(u.opacity,a.opacity);return function(g){return u.r=o(g),u.g=i(g),u.b=c(g),u.opacity=f(g),u+""}}return r.gamma=n,r})(1);function mr(n,e){e||(e=[]);var t=n?Math.min(e.length,n.length):0,r=e.slice(),u;return function(a){for(u=0;u<t;++u)r[u]=n[u]*(1-a)+e[u]*a;return r}}function dr(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function yr(n,e){var t=e?e.length:0,r=n?Math.min(t,n.length):0,u=new Array(r),a=new Array(t),o;for(o=0;o<r;++o)u[o]=qn(n[o],e[o]);for(;o<t;++o)a[o]=e[o];return function(i){for(o=0;o<r;++o)a[o]=u[o](i);return a}}function pr(n,e){var t=new Date;return n=+n,e=+e,function(r){return t.setTime(n*(1-r)+e*r),t}}function An(n,e){return n=+n,e=+e,function(t){return n*(1-t)+e*t}}function xr(n,e){var t={},r={},u;(n===null||typeof n!="object")&&(n={}),(e===null||typeof e!="object")&&(e={});for(u in e)u in n?t[u]=qn(n[u],e[u]):r[u]=e[u];return function(a){for(u in t)r[u]=t[u](a);return r}}var oe=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Gn=new RegExp(oe.source,"g");function Mr(n){return function(){return n}}function wr(n){return function(e){return n(e)+""}}function br(n,e){var t=oe.lastIndex=Gn.lastIndex=0,r,u,a,o=-1,i=[],c=[];for(n=n+"",e=e+"";(r=oe.exec(n))&&(u=Gn.exec(e));)(a=u.index)>t&&(a=e.slice(t,a),i[o]?i[o]+=a:i[++o]=a),(r=r[0])===(u=u[0])?i[o]?i[o]+=u:i[++o]=u:(i[++o]=null,c.push({i:o,x:An(r,u)})),t=Gn.lastIndex;return t<e.length&&(a=e.slice(t),i[o]?i[o]+=a:i[++o]=a),i.length<2?c[0]?wr(c[0].x):Mr(e):(e=c.length,function(f){for(var g=0,l;g<e;++g)i[(l=c[g]).i]=l.x(f);return i.join("")})}function qn(n,e){var t=typeof e,r;return e==null||t==="boolean"?le(e):(t==="number"?An:t==="string"?(r=Mn(e))?(e=r,Ae):br:e instanceof Mn?Ae:e instanceof Date?pr:dr(e)?mr:Array.isArray(e)?yr:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?xr:An)(n,e)}function st(n,e){return n=+n,e=+e,function(t){return Math.round(n*(1-t)+e*t)}}function vr(n){return function(){return n}}function Tr(n){return+n}var We=[0,1];function O(n){return n}function ie(n,e){return(e-=n=+n)?function(t){return(t-n)/e}:vr(isNaN(e)?NaN:.5)}function kr(n,e){var t;return n>e&&(t=n,n=e,e=t),function(r){return Math.max(n,Math.min(e,r))}}function Cr(n,e,t){var r=n[0],u=n[1],a=e[0],o=e[1];return u<r?(r=ie(u,r),a=t(o,a)):(r=ie(r,u),a=t(a,o)),function(i){return a(r(i))}}function Ur(n,e,t){var r=Math.min(n.length,e.length)-1,u=new Array(r),a=new Array(r),o=-1;for(n[r]<n[0]&&(n=n.slice().reverse(),e=e.slice().reverse());++o<r;)u[o]=ie(n[o],n[o+1]),a[o]=t(e[o],e[o+1]);return function(i){var c=ut(n,i,1,r)-1;return a[c](u[c](i))}}function vn(n,e){return e.domain(n.domain()).range(n.range()).interpolate(n.interpolate()).clamp(n.clamp()).unknown(n.unknown())}function Pn(){var n=We,e=We,t=qn,r,u,a,o=O,i,c,f;function g(){var h=Math.min(n.length,e.length);return o!==O&&(o=kr(n[0],n[h-1])),i=h>2?Ur:Cr,c=f=null,l}function l(h){return h==null||isNaN(h=+h)?a:(c||(c=i(n.map(r),e,t)))(r(o(h)))}return l.invert=function(h){return o(u((f||(f=i(e,n.map(r),An)))(h)))},l.domain=function(h){return arguments.length?(n=Array.from(h,Tr),g()):n.slice()},l.range=function(h){return arguments.length?(e=Array.from(h),g()):e.slice()},l.rangeRound=function(h){return e=Array.from(h),t=st,g()},l.clamp=function(h){return arguments.length?(o=h?!0:O,g()):o!==O},l.interpolate=function(h){return arguments.length?(t=h,g()):t},l.unknown=function(h){return arguments.length?(a=h,l):a},function(h,p){return r=h,u=p,g()}}function gt(){return Pn()(O,O)}function Sr(n){return Math.abs(n=Math.round(n))>=1e21?n.toLocaleString("en").replace(/,/g,""):n.toString(10)}function Wn(n,e){if((t=(n=e?n.toExponential(e-1):n.toExponential()).indexOf("e"))<0)return null;var t,r=n.slice(0,t);return[r.length>1?r[0]+r.slice(2):r,+n.slice(t+1)]}function ln(n){return n=Wn(Math.abs(n)),n?n[1]:NaN}function Dr(n,e){return function(t,r){for(var u=t.length,a=[],o=0,i=n[0],c=0;u>0&&i>0&&(c+i+1>r&&(i=Math.max(1,r-c)),a.push(t.substring(u-=i,u+i)),!((c+=i+1)>r));)i=n[o=(o+1)%n.length];return a.reverse().join(e)}}function Nr(n){return function(e){return e.replace(/[0-9]/g,function(t){return n[+t]})}}var $r=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function wn(n){if(!(e=$r.exec(n)))throw new Error("invalid format: "+n);var e;return new se({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}wn.prototype=se.prototype;function se(n){this.fill=n.fill===void 0?" ":n.fill+"",this.align=n.align===void 0?">":n.align+"",this.sign=n.sign===void 0?"-":n.sign+"",this.symbol=n.symbol===void 0?"":n.symbol+"",this.zero=!!n.zero,this.width=n.width===void 0?void 0:+n.width,this.comma=!!n.comma,this.precision=n.precision===void 0?void 0:+n.precision,this.trim=!!n.trim,this.type=n.type===void 0?"":n.type+""}se.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Fr(n){n:for(var e=n.length,t=1,r=-1,u;t<e;++t)switch(n[t]){case".":r=u=t;break;case"0":r===0&&(r=t),u=t;break;default:if(!+n[t])break n;r>0&&(r=0);break}return r>0?n.slice(0,r)+n.slice(u+1):n}var ht;function Hr(n,e){var t=Wn(n,e);if(!t)return n+"";var r=t[0],u=t[1],a=u-(ht=Math.max(-8,Math.min(8,Math.floor(u/3)))*3)+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Wn(n,Math.max(0,e+a-1))[0]}function Le(n,e){var t=Wn(n,e);if(!t)return n+"";var r=t[0],u=t[1];return u<0?"0."+new Array(-u).join("0")+r:r.length>u+1?r.slice(0,u+1)+"."+r.slice(u+1):r+new Array(u-r.length+2).join("0")}const Oe={"%":(n,e)=>(n*100).toFixed(e),b:n=>Math.round(n).toString(2),c:n=>n+"",d:Sr,e:(n,e)=>n.toExponential(e),f:(n,e)=>n.toFixed(e),g:(n,e)=>n.toPrecision(e),o:n=>Math.round(n).toString(8),p:(n,e)=>Le(n*100,e),r:Le,s:Hr,X:n=>Math.round(n).toString(16).toUpperCase(),x:n=>Math.round(n).toString(16)};function Ie(n){return n}var Re=Array.prototype.map,qe=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Yr(n){var e=n.grouping===void 0||n.thousands===void 0?Ie:Dr(Re.call(n.grouping,Number),n.thousands+""),t=n.currency===void 0?"":n.currency[0]+"",r=n.currency===void 0?"":n.currency[1]+"",u=n.decimal===void 0?".":n.decimal+"",a=n.numerals===void 0?Ie:Nr(Re.call(n.numerals,String)),o=n.percent===void 0?"%":n.percent+"",i=n.minus===void 0?"−":n.minus+"",c=n.nan===void 0?"NaN":n.nan+"";function f(l){l=wn(l);var h=l.fill,p=l.align,d=l.sign,v=l.symbol,k=l.zero,C=l.width,G=l.comma,D=l.precision,L=l.trim,N=l.type;N==="n"?(G=!0,N="g"):Oe[N]||(D===void 0&&(D=12),L=!0,N="g"),(k||h==="0"&&p==="=")&&(k=!0,h="0",p="=");var y=v==="$"?t:v==="#"&&/[boxX]/.test(N)?"0"+N.toLowerCase():"",$=v==="$"?r:/[%p]/.test(N)?o:"",J=Oe[N],Bn=/[defgprs%]/.test(N);D=D===void 0?6:/[gprs]/.test(N)?Math.max(1,Math.min(21,D)):Math.max(0,Math.min(20,D));function kn(M){var E=y,F=$,_,Cn,un;if(N==="c")F=J(M)+F,M="";else{M=+M;var an=M<0||1/M<0;if(M=isNaN(M)?c:J(Math.abs(M),D),L&&(M=Fr(M)),an&&+M==0&&d!=="+"&&(an=!1),E=(an?d==="("?d:i:d==="-"||d==="("?"":d)+E,F=(N==="s"?qe[8+ht/3]:"")+F+(an&&d==="("?")":""),Bn){for(_=-1,Cn=M.length;++_<Cn;)if(un=M.charCodeAt(_),48>un||un>57){F=(un===46?u+M.slice(_+1):M.slice(_))+F,M=M.slice(0,_);break}}}G&&!k&&(M=e(M,1/0));var on=E.length+M.length+F.length,R=on<C?new Array(C-on+1).join(h):"";switch(G&&k&&(M=e(R+M,R.length?C-F.length:1/0),R=""),p){case"<":M=E+M+F+R;break;case"=":M=E+R+M+F;break;case"^":M=R.slice(0,on=R.length>>1)+E+M+F+R.slice(on);break;default:M=R+E+M+F;break}return a(M)}return kn.toString=function(){return l+""},kn}function g(l,h){var p=f((l=wn(l),l.type="f",l)),d=Math.max(-8,Math.min(8,Math.floor(ln(h)/3)))*3,v=Math.pow(10,-d),k=qe[8+d/3];return function(C){return p(v*C)+k}}return{format:f,formatPrefix:g}}var Nn,ge,mt;Ar({thousands:",",grouping:[3],currency:["$",""]});function Ar(n){return Nn=Yr(n),ge=Nn.format,mt=Nn.formatPrefix,Nn}function Wr(n){return Math.max(0,-ln(Math.abs(n)))}function Lr(n,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(ln(e)/3)))*3-ln(Math.abs(n)))}function Or(n,e){return n=Math.abs(n),e=Math.abs(e)-n,Math.max(0,ln(e)-ln(n))+1}function Ir(n,e,t,r){var u=ue(n,e,t),a;switch(r=wn(r??",f"),r.type){case"s":{var o=Math.max(Math.abs(n),Math.abs(e));return r.precision==null&&!isNaN(a=Lr(u,o))&&(r.precision=a),mt(r,o)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(a=Or(u,Math.max(Math.abs(n),Math.abs(e))))&&(r.precision=a-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(a=Wr(u))&&(r.precision=a-(r.type==="%")*2);break}}return ge(r)}function En(n){var e=n.domain;return n.ticks=function(t){var r=e();return te(r[0],r[r.length-1],t??10)},n.tickFormat=function(t,r){var u=e();return Ir(u[0],u[u.length-1],t??10,r)},n.nice=function(t){t==null&&(t=10);var r=e(),u=0,a=r.length-1,o=r[u],i=r[a],c,f,g=10;for(i<o&&(f=o,o=i,i=f,f=u,u=a,a=f);g-- >0;){if(f=re(o,i,t),f===c)return r[u]=o,r[a]=i,e(r);if(f>0)o=Math.floor(o/f)*f,i=Math.ceil(i/f)*f;else if(f<0)o=Math.ceil(o*f)/f,i=Math.floor(i*f)/f;else break;c=f}return n},n}function Rr(){var n=gt();return n.copy=function(){return vn(n,Rr())},B.apply(n,arguments),En(n)}function dt(n,e){n=n.slice();var t=0,r=n.length-1,u=n[t],a=n[r],o;return a<u&&(o=t,t=r,r=o,o=u,u=a,a=o),n[t]=e.floor(u),n[r]=e.ceil(a),n}function Pe(n){return Math.log(n)}function Ee(n){return Math.exp(n)}function qr(n){return-Math.log(-n)}function Pr(n){return-Math.exp(-n)}function Er(n){return isFinite(n)?+("1e"+n):n<0?0:n}function zr(n){return n===10?Er:n===Math.E?Math.exp:e=>Math.pow(n,e)}function Zr(n){return n===Math.E?Math.log:n===10&&Math.log10||n===2&&Math.log2||(n=Math.log(n),e=>Math.log(e)/n)}function ze(n){return(e,t)=>-n(-e,t)}function yt(n){const e=n(Pe,Ee),t=e.domain;let r=10,u,a;function o(){return u=Zr(r),a=zr(r),t()[0]<0?(u=ze(u),a=ze(a),n(qr,Pr)):n(Pe,Ee),e}return e.base=function(i){return arguments.length?(r=+i,o()):r},e.domain=function(i){return arguments.length?(t(i),o()):t()},e.ticks=i=>{const c=t();let f=c[0],g=c[c.length-1];const l=g<f;l&&([f,g]=[g,f]);let h=u(f),p=u(g),d,v;const k=i==null?10:+i;let C=[];if(!(r%1)&&p-h<k){if(h=Math.floor(h),p=Math.ceil(p),f>0){for(;h<=p;++h)for(d=1;d<r;++d)if(v=h<0?d/a(-h):d*a(h),!(v<f)){if(v>g)break;C.push(v)}}else for(;h<=p;++h)for(d=r-1;d>=1;--d)if(v=h>0?d/a(-h):d*a(h),!(v<f)){if(v>g)break;C.push(v)}C.length*2<k&&(C=te(f,g,k))}else C=te(h,p,Math.min(p-h,k)).map(a);return l?C.reverse():C},e.tickFormat=(i,c)=>{if(i==null&&(i=10),c==null&&(c=r===10?"s":","),typeof c!="function"&&(!(r%1)&&(c=wn(c)).precision==null&&(c.trim=!0),c=ge(c)),i===1/0)return c;const f=Math.max(1,r*i/e.ticks().length);return g=>{let l=g/a(Math.round(u(g)));return l*r<r-.5&&(l*=r),l<=f?c(g):""}},e.nice=()=>t(dt(t(),{floor:i=>a(Math.floor(u(i))),ceil:i=>a(Math.ceil(u(i)))})),e}function Vr(){const n=yt(Pn()).domain([1,10]);return n.copy=()=>vn(n,Vr()).base(n.base()),B.apply(n,arguments),n}function Ze(n){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/n))}}function Ve(n){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*n}}function pt(n){var e=1,t=n(Ze(e),Ve(e));return t.constant=function(r){return arguments.length?n(Ze(e=+r),Ve(e)):e},En(t)}function Qr(){var n=pt(Pn());return n.copy=function(){return vn(n,Qr()).constant(n.constant())},B.apply(n,arguments)}function Qe(n){return function(e){return e<0?-Math.pow(-e,n):Math.pow(e,n)}}function Xr(n){return n<0?-Math.sqrt(-n):Math.sqrt(n)}function Br(n){return n<0?-n*n:n*n}function xt(n){var e=n(O,O),t=1;function r(){return t===1?n(O,O):t===.5?n(Xr,Br):n(Qe(t),Qe(1/t))}return e.exponent=function(u){return arguments.length?(t=+u,r()):t},En(e)}function Mt(){var n=xt(Pn());return n.copy=function(){return vn(n,Mt()).exponent(n.exponent())},B.apply(n,arguments),n}function ka(){return Mt.apply(null,arguments).exponent(.5)}function _r(){var n=[.5],e=[0,1],t,r=1;function u(a){return a!=null&&a<=a?e[ut(n,a,0,r)]:t}return u.domain=function(a){return arguments.length?(n=Array.from(a),r=Math.min(n.length,e.length-1),u):n.slice()},u.range=function(a){return arguments.length?(e=Array.from(a),r=Math.min(n.length,e.length-1),u):e.slice()},u.invertExtent=function(a){var o=e.indexOf(a);return[n[o-1],n[o]]},u.unknown=function(a){return arguments.length?(t=a,u):t},u.copy=function(){return _r().domain(n).range(e).unknown(t)},B.apply(u,arguments)}const Jn=new Date,Kn=new Date;function U(n,e,t,r){function u(a){return n(a=arguments.length===0?new Date:new Date(+a)),a}return u.floor=a=>(n(a=new Date(+a)),a),u.ceil=a=>(n(a=new Date(a-1)),e(a,1),n(a),a),u.round=a=>{const o=u(a),i=u.ceil(a);return a-o<i-a?o:i},u.offset=(a,o)=>(e(a=new Date(+a),o==null?1:Math.floor(o)),a),u.range=(a,o,i)=>{const c=[];if(a=u.ceil(a),i=i==null?1:Math.floor(i),!(a<o)||!(i>0))return c;let f;do c.push(f=new Date(+a)),e(a,i),n(a);while(f<a&&a<o);return c},u.filter=a=>U(o=>{if(o>=o)for(;n(o),!a(o);)o.setTime(o-1)},(o,i)=>{if(o>=o)if(i<0)for(;++i<=0;)for(;e(o,-1),!a(o););else for(;--i>=0;)for(;e(o,1),!a(o););}),t&&(u.count=(a,o)=>(Jn.setTime(+a),Kn.setTime(+o),n(Jn),n(Kn),Math.floor(t(Jn,Kn))),u.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?u.filter(r?o=>r(o)%a===0:o=>u.count(0,o)%a===0):u)),u}const Ln=U(()=>{},(n,e)=>{n.setTime(+n+e)},(n,e)=>e-n);Ln.every=n=>(n=Math.floor(n),!isFinite(n)||!(n>0)?null:n>1?U(e=>{e.setTime(Math.floor(e/n)*n)},(e,t)=>{e.setTime(+e+t*n)},(e,t)=>(t-e)/n):Ln);Ln.range;const z=1e3,I=z*60,Z=I*60,V=Z*24,he=V*7,Xe=V*30,jn=V*365,nn=U(n=>{n.setTime(n-n.getMilliseconds())},(n,e)=>{n.setTime(+n+e*z)},(n,e)=>(e-n)/z,n=>n.getUTCSeconds());nn.range;const me=U(n=>{n.setTime(n-n.getMilliseconds()-n.getSeconds()*z)},(n,e)=>{n.setTime(+n+e*I)},(n,e)=>(e-n)/I,n=>n.getMinutes());me.range;const de=U(n=>{n.setUTCSeconds(0,0)},(n,e)=>{n.setTime(+n+e*I)},(n,e)=>(e-n)/I,n=>n.getUTCMinutes());de.range;const ye=U(n=>{n.setTime(n-n.getMilliseconds()-n.getSeconds()*z-n.getMinutes()*I)},(n,e)=>{n.setTime(+n+e*Z)},(n,e)=>(e-n)/Z,n=>n.getHours());ye.range;const pe=U(n=>{n.setUTCMinutes(0,0,0)},(n,e)=>{n.setTime(+n+e*Z)},(n,e)=>(e-n)/Z,n=>n.getUTCHours());pe.range;const Tn=U(n=>n.setHours(0,0,0,0),(n,e)=>n.setDate(n.getDate()+e),(n,e)=>(e-n-(e.getTimezoneOffset()-n.getTimezoneOffset())*I)/V,n=>n.getDate()-1);Tn.range;const zn=U(n=>{n.setUTCHours(0,0,0,0)},(n,e)=>{n.setUTCDate(n.getUTCDate()+e)},(n,e)=>(e-n)/V,n=>n.getUTCDate()-1);zn.range;const wt=U(n=>{n.setUTCHours(0,0,0,0)},(n,e)=>{n.setUTCDate(n.getUTCDate()+e)},(n,e)=>(e-n)/V,n=>Math.floor(n/V));wt.range;function tn(n){return U(e=>{e.setDate(e.getDate()-(e.getDay()+7-n)%7),e.setHours(0,0,0,0)},(e,t)=>{e.setDate(e.getDate()+t*7)},(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*I)/he)}const Zn=tn(0),On=tn(1),Gr=tn(2),Jr=tn(3),sn=tn(4),Kr=tn(5),jr=tn(6);Zn.range;On.range;Gr.range;Jr.range;sn.range;Kr.range;jr.range;function rn(n){return U(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-n)%7),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t*7)},(e,t)=>(t-e)/he)}const Vn=rn(0),In=rn(1),nu=rn(2),eu=rn(3),gn=rn(4),tu=rn(5),ru=rn(6);Vn.range;In.range;nu.range;eu.range;gn.range;tu.range;ru.range;const xe=U(n=>{n.setDate(1),n.setHours(0,0,0,0)},(n,e)=>{n.setMonth(n.getMonth()+e)},(n,e)=>e.getMonth()-n.getMonth()+(e.getFullYear()-n.getFullYear())*12,n=>n.getMonth());xe.range;const Me=U(n=>{n.setUTCDate(1),n.setUTCHours(0,0,0,0)},(n,e)=>{n.setUTCMonth(n.getUTCMonth()+e)},(n,e)=>e.getUTCMonth()-n.getUTCMonth()+(e.getUTCFullYear()-n.getUTCFullYear())*12,n=>n.getUTCMonth());Me.range;const Q=U(n=>{n.setMonth(0,1),n.setHours(0,0,0,0)},(n,e)=>{n.setFullYear(n.getFullYear()+e)},(n,e)=>e.getFullYear()-n.getFullYear(),n=>n.getFullYear());Q.every=n=>!isFinite(n=Math.floor(n))||!(n>0)?null:U(e=>{e.setFullYear(Math.floor(e.getFullYear()/n)*n),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t*n)});Q.range;const X=U(n=>{n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)},(n,e)=>{n.setUTCFullYear(n.getUTCFullYear()+e)},(n,e)=>e.getUTCFullYear()-n.getUTCFullYear(),n=>n.getUTCFullYear());X.every=n=>!isFinite(n=Math.floor(n))||!(n>0)?null:U(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/n)*n),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t*n)});X.range;function bt(n,e,t,r,u,a){const o=[[nn,1,z],[nn,5,5*z],[nn,15,15*z],[nn,30,30*z],[a,1,I],[a,5,5*I],[a,15,15*I],[a,30,30*I],[u,1,Z],[u,3,3*Z],[u,6,6*Z],[u,12,12*Z],[r,1,V],[r,2,2*V],[t,1,he],[e,1,Xe],[e,3,3*Xe],[n,1,jn]];function i(f,g,l){const h=g<f;h&&([f,g]=[g,f]);const p=l&&typeof l.range=="function"?l:c(f,g,l),d=p?p.range(f,+g+1):[];return h?d.reverse():d}function c(f,g,l){const h=Math.abs(g-f)/l,p=fe(([,,k])=>k).right(o,h);if(p===o.length)return n.every(ue(f/jn,g/jn,l));if(p===0)return Ln.every(Math.max(ue(f,g,l),1));const[d,v]=o[h/o[p-1][2]<o[p][2]/h?p-1:p];return d.every(v)}return[i,c]}const[uu,au]=bt(X,Me,Vn,wt,pe,de),[ou,iu]=bt(Q,xe,Zn,Tn,ye,me);function ne(n){if(0<=n.y&&n.y<100){var e=new Date(-1,n.m,n.d,n.H,n.M,n.S,n.L);return e.setFullYear(n.y),e}return new Date(n.y,n.m,n.d,n.H,n.M,n.S,n.L)}function ee(n){if(0<=n.y&&n.y<100){var e=new Date(Date.UTC(-1,n.m,n.d,n.H,n.M,n.S,n.L));return e.setUTCFullYear(n.y),e}return new Date(Date.UTC(n.y,n.m,n.d,n.H,n.M,n.S,n.L))}function hn(n,e,t){return{y:n,m:e,d:t,H:0,M:0,S:0,L:0}}function fu(n){var e=n.dateTime,t=n.date,r=n.time,u=n.periods,a=n.days,o=n.shortDays,i=n.months,c=n.shortMonths,f=mn(u),g=dn(u),l=mn(a),h=dn(a),p=mn(o),d=dn(o),v=mn(i),k=dn(i),C=mn(c),G=dn(c),D={a:an,A:on,b:R,B:Nt,c:null,d:je,e:je,f:Fu,g:Pu,G:zu,H:Du,I:Nu,j:$u,L:vt,m:Hu,M:Yu,p:$t,q:Ft,Q:tt,s:rt,S:Au,u:Wu,U:Lu,V:Ou,w:Iu,W:Ru,x:null,X:null,y:qu,Y:Eu,Z:Zu,"%":et},L={a:Ht,A:Yt,b:At,B:Wt,c:null,d:nt,e:nt,f:Bu,g:ua,G:oa,H:Vu,I:Qu,j:Xu,L:kt,m:_u,M:Gu,p:Lt,q:Ot,Q:tt,s:rt,S:Ju,u:Ku,U:ju,V:na,w:ea,W:ta,x:null,X:null,y:ra,Y:aa,Z:ia,"%":et},N={a:kn,A:M,b:E,B:F,c:_,d:Je,e:Je,f:ku,g:Ge,G:_e,H:Ke,I:Ke,j:wu,L:Tu,m:Mu,M:bu,p:Bn,q:xu,Q:Uu,s:Su,S:vu,u:hu,U:mu,V:du,w:gu,W:yu,x:Cn,X:un,y:Ge,Y:_e,Z:pu,"%":Cu};D.x=y(t,D),D.X=y(r,D),D.c=y(e,D),L.x=y(t,L),L.X=y(r,L),L.c=y(e,L);function y(m,x){return function(w){var s=[],H=-1,T=0,A=m.length,W,K,be;for(w instanceof Date||(w=new Date(+w));++H<A;)m.charCodeAt(H)===37&&(s.push(m.slice(T,H)),(K=Be[W=m.charAt(++H)])!=null?W=m.charAt(++H):K=W==="e"?" ":"0",(be=x[W])&&(W=be(w,K)),s.push(W),T=H+1);return s.push(m.slice(T,H)),s.join("")}}function $(m,x){return function(w){var s=hn(1900,void 0,1),H=J(s,m,w+="",0),T,A;if(H!=w.length)return null;if("Q"in s)return new Date(s.Q);if("s"in s)return new Date(s.s*1e3+("L"in s?s.L:0));if(x&&!("Z"in s)&&(s.Z=0),"p"in s&&(s.H=s.H%12+s.p*12),s.m===void 0&&(s.m="q"in s?s.q:0),"V"in s){if(s.V<1||s.V>53)return null;"w"in s||(s.w=1),"Z"in s?(T=ee(hn(s.y,0,1)),A=T.getUTCDay(),T=A>4||A===0?In.ceil(T):In(T),T=zn.offset(T,(s.V-1)*7),s.y=T.getUTCFullYear(),s.m=T.getUTCMonth(),s.d=T.getUTCDate()+(s.w+6)%7):(T=ne(hn(s.y,0,1)),A=T.getDay(),T=A>4||A===0?On.ceil(T):On(T),T=Tn.offset(T,(s.V-1)*7),s.y=T.getFullYear(),s.m=T.getMonth(),s.d=T.getDate()+(s.w+6)%7)}else("W"in s||"U"in s)&&("w"in s||(s.w="u"in s?s.u%7:"W"in s?1:0),A="Z"in s?ee(hn(s.y,0,1)).getUTCDay():ne(hn(s.y,0,1)).getDay(),s.m=0,s.d="W"in s?(s.w+6)%7+s.W*7-(A+5)%7:s.w+s.U*7-(A+6)%7);return"Z"in s?(s.H+=s.Z/100|0,s.M+=s.Z%100,ee(s)):ne(s)}}function J(m,x,w,s){for(var H=0,T=x.length,A=w.length,W,K;H<T;){if(s>=A)return-1;if(W=x.charCodeAt(H++),W===37){if(W=x.charAt(H++),K=N[W in Be?x.charAt(H++):W],!K||(s=K(m,w,s))<0)return-1}else if(W!=w.charCodeAt(s++))return-1}return s}function Bn(m,x,w){var s=f.exec(x.slice(w));return s?(m.p=g.get(s[0].toLowerCase()),w+s[0].length):-1}function kn(m,x,w){var s=p.exec(x.slice(w));return s?(m.w=d.get(s[0].toLowerCase()),w+s[0].length):-1}function M(m,x,w){var s=l.exec(x.slice(w));return s?(m.w=h.get(s[0].toLowerCase()),w+s[0].length):-1}function E(m,x,w){var s=C.exec(x.slice(w));return s?(m.m=G.get(s[0].toLowerCase()),w+s[0].length):-1}function F(m,x,w){var s=v.exec(x.slice(w));return s?(m.m=k.get(s[0].toLowerCase()),w+s[0].length):-1}function _(m,x,w){return J(m,e,x,w)}function Cn(m,x,w){return J(m,t,x,w)}function un(m,x,w){return J(m,r,x,w)}function an(m){return o[m.getDay()]}function on(m){return a[m.getDay()]}function R(m){return c[m.getMonth()]}function Nt(m){return i[m.getMonth()]}function $t(m){return u[+(m.getHours()>=12)]}function Ft(m){return 1+~~(m.getMonth()/3)}function Ht(m){return o[m.getUTCDay()]}function Yt(m){return a[m.getUTCDay()]}function At(m){return c[m.getUTCMonth()]}function Wt(m){return i[m.getUTCMonth()]}function Lt(m){return u[+(m.getUTCHours()>=12)]}function Ot(m){return 1+~~(m.getUTCMonth()/3)}return{format:function(m){var x=y(m+="",D);return x.toString=function(){return m},x},parse:function(m){var x=$(m+="",!1);return x.toString=function(){return m},x},utcFormat:function(m){var x=y(m+="",L);return x.toString=function(){return m},x},utcParse:function(m){var x=$(m+="",!0);return x.toString=function(){return m},x}}}var Be={"-":"",_:" ",0:"0"},S=/^\s*\d+/,cu=/^%/,lu=/[\\^$*+?|[\]().{}]/g;function b(n,e,t){var r=n<0?"-":"",u=(r?-n:n)+"",a=u.length;return r+(a<t?new Array(t-a+1).join(e)+u:u)}function su(n){return n.replace(lu,"\\$&")}function mn(n){return new RegExp("^(?:"+n.map(su).join("|")+")","i")}function dn(n){return new Map(n.map((e,t)=>[e.toLowerCase(),t]))}function gu(n,e,t){var r=S.exec(e.slice(t,t+1));return r?(n.w=+r[0],t+r[0].length):-1}function hu(n,e,t){var r=S.exec(e.slice(t,t+1));return r?(n.u=+r[0],t+r[0].length):-1}function mu(n,e,t){var r=S.exec(e.slice(t,t+2));return r?(n.U=+r[0],t+r[0].length):-1}function du(n,e,t){var r=S.exec(e.slice(t,t+2));return r?(n.V=+r[0],t+r[0].length):-1}function yu(n,e,t){var r=S.exec(e.slice(t,t+2));return r?(n.W=+r[0],t+r[0].length):-1}function _e(n,e,t){var r=S.exec(e.slice(t,t+4));return r?(n.y=+r[0],t+r[0].length):-1}function Ge(n,e,t){var r=S.exec(e.slice(t,t+2));return r?(n.y=+r[0]+(+r[0]>68?1900:2e3),t+r[0].length):-1}function pu(n,e,t){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(t,t+6));return r?(n.Z=r[1]?0:-(r[2]+(r[3]||"00")),t+r[0].length):-1}function xu(n,e,t){var r=S.exec(e.slice(t,t+1));return r?(n.q=r[0]*3-3,t+r[0].length):-1}function Mu(n,e,t){var r=S.exec(e.slice(t,t+2));return r?(n.m=r[0]-1,t+r[0].length):-1}function Je(n,e,t){var r=S.exec(e.slice(t,t+2));return r?(n.d=+r[0],t+r[0].length):-1}function wu(n,e,t){var r=S.exec(e.slice(t,t+3));return r?(n.m=0,n.d=+r[0],t+r[0].length):-1}function Ke(n,e,t){var r=S.exec(e.slice(t,t+2));return r?(n.H=+r[0],t+r[0].length):-1}function bu(n,e,t){var r=S.exec(e.slice(t,t+2));return r?(n.M=+r[0],t+r[0].length):-1}function vu(n,e,t){var r=S.exec(e.slice(t,t+2));return r?(n.S=+r[0],t+r[0].length):-1}function Tu(n,e,t){var r=S.exec(e.slice(t,t+3));return r?(n.L=+r[0],t+r[0].length):-1}function ku(n,e,t){var r=S.exec(e.slice(t,t+6));return r?(n.L=Math.floor(r[0]/1e3),t+r[0].length):-1}function Cu(n,e,t){var r=cu.exec(e.slice(t,t+1));return r?t+r[0].length:-1}function Uu(n,e,t){var r=S.exec(e.slice(t));return r?(n.Q=+r[0],t+r[0].length):-1}function Su(n,e,t){var r=S.exec(e.slice(t));return r?(n.s=+r[0],t+r[0].length):-1}function je(n,e){return b(n.getDate(),e,2)}function Du(n,e){return b(n.getHours(),e,2)}function Nu(n,e){return b(n.getHours()%12||12,e,2)}function $u(n,e){return b(1+Tn.count(Q(n),n),e,3)}function vt(n,e){return b(n.getMilliseconds(),e,3)}function Fu(n,e){return vt(n,e)+"000"}function Hu(n,e){return b(n.getMonth()+1,e,2)}function Yu(n,e){return b(n.getMinutes(),e,2)}function Au(n,e){return b(n.getSeconds(),e,2)}function Wu(n){var e=n.getDay();return e===0?7:e}function Lu(n,e){return b(Zn.count(Q(n)-1,n),e,2)}function Tt(n){var e=n.getDay();return e>=4||e===0?sn(n):sn.ceil(n)}function Ou(n,e){return n=Tt(n),b(sn.count(Q(n),n)+(Q(n).getDay()===4),e,2)}function Iu(n){return n.getDay()}function Ru(n,e){return b(On.count(Q(n)-1,n),e,2)}function qu(n,e){return b(n.getFullYear()%100,e,2)}function Pu(n,e){return n=Tt(n),b(n.getFullYear()%100,e,2)}function Eu(n,e){return b(n.getFullYear()%1e4,e,4)}function zu(n,e){var t=n.getDay();return n=t>=4||t===0?sn(n):sn.ceil(n),b(n.getFullYear()%1e4,e,4)}function Zu(n){var e=n.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+b(e/60|0,"0",2)+b(e%60,"0",2)}function nt(n,e){return b(n.getUTCDate(),e,2)}function Vu(n,e){return b(n.getUTCHours(),e,2)}function Qu(n,e){return b(n.getUTCHours()%12||12,e,2)}function Xu(n,e){return b(1+zn.count(X(n),n),e,3)}function kt(n,e){return b(n.getUTCMilliseconds(),e,3)}function Bu(n,e){return kt(n,e)+"000"}function _u(n,e){return b(n.getUTCMonth()+1,e,2)}function Gu(n,e){return b(n.getUTCMinutes(),e,2)}function Ju(n,e){return b(n.getUTCSeconds(),e,2)}function Ku(n){var e=n.getUTCDay();return e===0?7:e}function ju(n,e){return b(Vn.count(X(n)-1,n),e,2)}function Ct(n){var e=n.getUTCDay();return e>=4||e===0?gn(n):gn.ceil(n)}function na(n,e){return n=Ct(n),b(gn.count(X(n),n)+(X(n).getUTCDay()===4),e,2)}function ea(n){return n.getUTCDay()}function ta(n,e){return b(In.count(X(n)-1,n),e,2)}function ra(n,e){return b(n.getUTCFullYear()%100,e,2)}function ua(n,e){return n=Ct(n),b(n.getUTCFullYear()%100,e,2)}function aa(n,e){return b(n.getUTCFullYear()%1e4,e,4)}function oa(n,e){var t=n.getUTCDay();return n=t>=4||t===0?gn(n):gn.ceil(n),b(n.getUTCFullYear()%1e4,e,4)}function ia(){return"+0000"}function et(){return"%"}function tt(n){return+n}function rt(n){return Math.floor(+n/1e3)}var fn,Ut,St;fa({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function fa(n){return fn=fu(n),Ut=fn.format,fn.parse,St=fn.utcFormat,fn.utcParse,fn}function ca(n){return new Date(n)}function la(n){return n instanceof Date?+n:+new Date(+n)}function we(n,e,t,r,u,a,o,i,c,f){var g=gt(),l=g.invert,h=g.domain,p=f(".%L"),d=f(":%S"),v=f("%I:%M"),k=f("%I %p"),C=f("%a %d"),G=f("%b %d"),D=f("%B"),L=f("%Y");function N(y){return(c(y)<y?p:i(y)<y?d:o(y)<y?v:a(y)<y?k:r(y)<y?u(y)<y?C:G:t(y)<y?D:L)(y)}return g.invert=function(y){return new Date(l(y))},g.domain=function(y){return arguments.length?h(Array.from(y,la)):h().map(ca)},g.ticks=function(y){var $=h();return n($[0],$[$.length-1],y??10)},g.tickFormat=function(y,$){return $==null?N:f($)},g.nice=function(y){var $=h();return(!y||typeof y.range!="function")&&(y=e($[0],$[$.length-1],y??10)),y?h(dt($,y)):g},g.copy=function(){return vn(g,we(n,e,t,r,u,a,o,i,c,f))},g}function Ca(){return B.apply(we(ou,iu,Q,xe,Zn,Tn,ye,me,nn,Ut).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function Ua(){return B.apply(we(uu,au,X,Me,Vn,zn,pe,de,nn,St).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function Qn(){var n=0,e=1,t,r,u,a,o=O,i=!1,c;function f(l){return l==null||isNaN(l=+l)?c:o(u===0?.5:(l=(a(l)-t)*u,i?Math.max(0,Math.min(1,l)):l))}f.domain=function(l){return arguments.length?([n,e]=l,t=a(n=+n),r=a(e=+e),u=t===r?0:1/(r-t),f):[n,e]},f.clamp=function(l){return arguments.length?(i=!!l,f):i},f.interpolator=function(l){return arguments.length?(o=l,f):o};function g(l){return function(h){var p,d;return arguments.length?([p,d]=h,o=l(p,d),f):[o(0),o(1)]}}return f.range=g(qn),f.rangeRound=g(st),f.unknown=function(l){return arguments.length?(c=l,f):c},function(l){return a=l,t=l(n),r=l(e),u=t===r?0:1/(r-t),f}}function Xn(n,e){return e.domain(n.domain()).interpolator(n.interpolator()).clamp(n.clamp()).unknown(n.unknown())}function sa(){var n=En(Qn()(O));return n.copy=function(){return Xn(n,sa())},Rn.apply(n,arguments)}function ga(){var n=yt(Qn()).domain([1,10]);return n.copy=function(){return Xn(n,ga()).base(n.base())},Rn.apply(n,arguments)}function ha(){var n=pt(Qn());return n.copy=function(){return Xn(n,ha()).constant(n.constant())},Rn.apply(n,arguments)}function Dt(){var n=xt(Qn());return n.copy=function(){return Xn(n,Dt()).exponent(n.exponent())},Rn.apply(n,arguments)}function Sa(){return Dt.apply(null,arguments).exponent(.5)}export{ma as A,$n as B,va as C,Zt as D,qn as E,Tr as F,En as G,gt as H,B as I,ut as J,O as K,Rn as L,Xn as M,yt as N,xt as O,pt as P,st as Q,Ce as R,ga as S,Dt as T,Sa as U,ha as V,Qr as W,Ir as X,Rt as a,yn as b,Un as c,ve as d,ba as e,wa as f,Ma as g,xa as h,_r as i,Ca as j,ka as k,Rr as l,Vr as m,ot as n,at as o,Mt as p,Ta as q,An as r,sa as s,pa as t,Ua as u,pr as v,Mn as w,ya as x,It as y,da as z};
@@ -0,0 +1 @@
1
+ import{fr as d,fs as y}from"./index-CN7VPpiB.js";import{s as S}from"./subMonths-C1UIPrOU.js";function T(s,t,o){return d(s,-t,o)}function M(s,t,o){const{years:n=0,months:u=0,weeks:r=0,days:c=0,hours:e=0,minutes:a=0,seconds:m=0}=t,b=S(s,u+n*12,o),i=T(b,c+r*7,o),f=a+e*60,h=(m+f*60)*1e3;return y(s,+i-h)}export{M as s};
@@ -0,0 +1 @@
1
+ import{ft as n}from"./index-CN7VPpiB.js";function a(t,o,s){return n(t,-o,s)}export{a as s};
package/dist/index.html CHANGED
@@ -5,8 +5,8 @@
5
5
  <link rel="icon" href="/icons/accounter-logo.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>Accounter</title>
8
- <script type="module" crossorigin src="/assets/index-CZb2m31K.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-B2UYAO1O.css">
8
+ <script type="module" crossorigin src="/assets/index-CN7VPpiB.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-CQXFj3Uj.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@accounter/client",
3
- "version": "0.0.8-alpha-20251022144027-c9c7a4b309de8a72dfd0ec4f11e63713ad12878f",
3
+ "version": "0.0.8-alpha-20251023065832-9a9f37786b0e29dc8e6ea58ec9856bc043cc0e8a",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "scripts": {
@@ -31,6 +31,7 @@ import {
31
31
  import { getFragmentData, type FragmentType } from '@/gql/index.js';
32
32
  import {
33
33
  dirtyFieldMarker,
34
+ formatTimelessDateString,
34
35
  relevantDataPicker,
35
36
  type MakeBoolean,
36
37
  type TimelessDateString,
@@ -104,7 +105,9 @@ function convertFormDataToUpdateAdminBusinessInput(
104
105
  taxPrepaymentId: formData.taxPrepaymentId,
105
106
  nationalInsuranceEmployerId: formData.nationalInsuranceEmployerId,
106
107
  advanceTaxRate: formData.advanceTaxRate,
107
- registrationDate: formData.registrationDate as TimelessDateString,
108
+ registrationDate: formData.registrationDate
109
+ ? (formatTimelessDateString(new Date(formData.registrationDate)) as TimelessDateString)
110
+ : undefined,
108
111
  };
109
112
  }
110
113
 
@@ -119,8 +122,7 @@ export function AdminBusinessSection({ data, refetchBusiness }: Props): React.Re
119
122
  BusinessAdminSectionFragmentToFormValues(admin),
120
123
  );
121
124
 
122
- const { updateAdminBusiness: updateDbAdminBusiness, fetching: isUpdating } =
123
- useUpdateAdminBusiness();
125
+ const { updateAdminBusiness, fetching: isUpdating } = useUpdateAdminBusiness();
124
126
 
125
127
  const form = useForm<AdminBusinessFormValues>({
126
128
  resolver: zodResolver(adminBusinessFormSchema),
@@ -141,7 +143,7 @@ export function AdminBusinessSection({ data, refetchBusiness }: Props): React.Re
141
143
 
142
144
  const updateBusinessInput = convertFormDataToUpdateAdminBusinessInput(dataToUpdate);
143
145
 
144
- await updateDbAdminBusiness({
146
+ await updateAdminBusiness({
145
147
  adminBusinessId: admin.id,
146
148
  fields: updateBusinessInput,
147
149
  });
@@ -271,7 +273,11 @@ export function AdminBusinessSection({ data, refetchBusiness }: Props): React.Re
271
273
  <CardFooter className="flex justify-end border-t mt-4 pt-6">
272
274
  <Button
273
275
  type="submit"
274
- disabled={isUpdating || Object.keys(form.formState.dirtyFields).length === 0}
276
+ disabled={
277
+ isUpdating ||
278
+ Object.keys(form.formState.dirtyFields).length === 0 ||
279
+ !form.formState.isValid
280
+ }
275
281
  >
276
282
  <Save className="h-4 w-4" />
277
283
  Save Changes
@@ -11,8 +11,15 @@ import { getFragmentData, type FragmentType } from '@/gql/index.js';
11
11
  id
12
12
  name
13
13
  createdAt
14
+ isActive
14
15
  ... on LtdFinancialEntity {
15
16
  governmentId
17
+ adminInfo {
18
+ id
19
+ }
20
+ clientInfo {
21
+ id
22
+ }
16
23
  }
17
24
  }
18
25
  `;
@@ -29,6 +36,12 @@ export function BusinessHeader({ data }: Props) {
29
36
  return <div />;
30
37
  }
31
38
 
39
+ const { isActive, adminInfo, clientInfo } = business;
40
+ const isAdmin = !!adminInfo?.id;
41
+ const isClient = !!clientInfo?.id;
42
+ // TODO: add worker info to the business and uncomment
43
+ // const isWorker = _TBD_;
44
+
32
45
  return (
33
46
  <header className="sticky top-0 z-50 w-full border-b border-border bg-card/95 backdrop-blur supports-[backdrop-filter]:bg-card/60">
34
47
  <div className="container mx-auto px-4 md:px-6 lg:px-8 max-w-7xl">
@@ -40,8 +53,14 @@ export function BusinessHeader({ data }: Props) {
40
53
  <div className="min-w-0 flex-1">
41
54
  <div className="flex items-center gap-2 flex-wrap">
42
55
  <h1 className="text-lg font-semibold text-foreground">{business.name}</h1>
43
- {/* TODO: make dynamic, add client badge */}
44
- <Badge variant="secondary">Active</Badge>
56
+ {isActive ? (
57
+ <Badge variant="secondary">Active</Badge>
58
+ ) : (
59
+ <Badge variant="destructive">Inactive</Badge>
60
+ )}
61
+ {isAdmin && <Badge variant="outline">Admin</Badge>}
62
+ {isClient && <Badge variant="outline">Client</Badge>}
63
+ {/* {isWorker && <Badge variant="outline">Worker</Badge>} */}
45
64
  </div>
46
65
  <p className="text-sm text-muted-foreground truncate">Business ID: {business.id}</p>
47
66
  </div>
@@ -1,8 +1,9 @@
1
1
  import { useState, type ReactElement } from 'react';
2
2
  import { format } from 'date-fns';
3
3
  import { ChevronsLeftRightEllipsis, ChevronsRightLeft } from 'lucide-react';
4
+ import { Link } from 'react-router-dom';
4
5
  import { useQuery } from 'urql';
5
- import { Mark, NavLink, Table, Tooltip } from '@mantine/core';
6
+ import { Mark, Table, Tooltip } from '@mantine/core';
6
7
  import {
7
8
  BusinessTransactionsInfoDocument,
8
9
  Currency,
@@ -14,6 +15,7 @@ import { AccounterLoader } from '../common/index.js';
14
15
  import { getChargeHref } from '../screens/charges/charge.js';
15
16
  import { Button } from '../ui/button.js';
16
17
  import { DownloadCSV } from './download-csv.js';
18
+ import { getBusinessTransactionsHref } from './index.js';
17
19
 
18
20
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- used by codegen
19
21
  /* GraphQL */ `
@@ -233,17 +235,15 @@ export function BusinessExtendedInfo({ businessID, filter }: Props): ReactElemen
233
235
  }}
234
236
  >
235
237
  <td>
236
- <a
237
- href={`/businesses/${row.business.id}/transactions`}
238
+ <Link
239
+ to={getBusinessTransactionsHref({ businessIDs: [row.business.id] })}
238
240
  target="_blank"
239
241
  rel="noreferrer"
240
242
  onClick={event => event.stopPropagation()}
243
+ className="inline-flex items-center font-semibold"
241
244
  >
242
- <NavLink
243
- label={row.business.name}
244
- className="[&>*>.mantine-NavLink-label]:font-semibold"
245
- />
246
- </a>
245
+ {row.business.name}
246
+ </Link>
247
247
  </td>
248
248
  <td>{row.invoiceDate ? format(new Date(row.invoiceDate), 'dd/MM/yy') : null}</td>
249
249
  <td style={{ whiteSpace: 'nowrap' }}>
@@ -273,17 +273,15 @@ export function BusinessExtendedInfo({ businessID, filter }: Props): ReactElemen
273
273
  <td>{row.details}</td>
274
274
  <td>
275
275
  {row.counterAccount && (
276
- <a
277
- href={`/businesses/${row.counterAccount?.id}/transactions`}
276
+ <Link
277
+ to={getBusinessTransactionsHref({ businessIDs: [row.counterAccount.id] })}
278
278
  target="_blank"
279
279
  rel="noreferrer"
280
280
  onClick={event => event.stopPropagation()}
281
+ className="inline-flex items-center font-semibold"
281
282
  >
282
- <NavLink
283
- label={row.counterAccount?.name}
284
- className="[&>*>.mantine-NavLink-label]:font-semibold"
285
- />
286
- </a>
283
+ {row.counterAccount.name}
284
+ </Link>
287
285
  )}
288
286
  </td>
289
287
  <td />
@@ -1,5 +1,5 @@
1
1
  import { useContext, useEffect, useMemo, useState, type ReactElement, type ReactNode } from 'react';
2
- import { useMatch } from 'react-router-dom';
2
+ import { useParams } from 'react-router-dom';
3
3
  import { useQuery } from 'urql';
4
4
  import { Mark } from '@mantine/core';
5
5
  import {
@@ -19,10 +19,10 @@ type Props = {
19
19
  };
20
20
 
21
21
  export const BusinessTransactionsSingle = ({ businessId }: Props): ReactElement => {
22
- const match = useMatch('businesses/:businessId/transactions');
22
+ const { businessId: businessIdFromUrl } = useParams<{ businessId: string }>();
23
23
  const { get } = useUrlQuery();
24
24
  const { setFiltersContext } = useContext(FiltersContext);
25
- const id = businessId || match?.params.businessId;
25
+ const id = businessId || businessIdFromUrl;
26
26
  const [filter, setFilter] = useState<BusinessTransactionsFilter>(
27
27
  get('transactionsFilters')
28
28
  ? {
@@ -72,13 +72,24 @@ import {
72
72
  export function getBusinessTransactionsHref(filter?: BusinessTransactionsFilter | null): string {
73
73
  const params = new URLSearchParams();
74
74
 
75
- const transactionsFilters = encodeTransactionsFilters(filter);
75
+ let businessId: string | undefined = undefined;
76
+ let adjustedFilter = filter;
77
+ if (filter?.businessIDs && filter.businessIDs.length === 1) {
78
+ const { businessIDs, ...rest } = filter;
79
+ businessId = businessIDs[0];
80
+ adjustedFilter = rest;
81
+ }
82
+
83
+ const transactionsFilters = encodeTransactionsFilters(adjustedFilter);
76
84
  if (transactionsFilters) {
77
85
  // Add it as a single encoded parameter
78
86
  params.append('transactionsFilters', transactionsFilters);
79
87
  }
80
88
 
81
89
  const queryParams = params.size > 0 ? `?${params}` : '';
90
+ if (businessId) {
91
+ return `/businesses/${businessId}/transactions${queryParams}`;
92
+ }
82
93
  return `/businesses/transactions${queryParams}`;
83
94
  }
84
95
 
@@ -1,5 +1,5 @@
1
1
  import { useContext, useEffect, type ReactElement } from 'react';
2
- import { useMatch } from 'react-router-dom';
2
+ import { useParams } from 'react-router-dom';
3
3
  import { useQuery } from 'urql';
4
4
  import { Container } from '@mantine/core';
5
5
  import { BusinessTripScreenDocument } from '../../gql/graphql.js';
@@ -26,9 +26,9 @@ type Props = {
26
26
  };
27
27
 
28
28
  export const BusinessTrip = ({ businessTripId }: Props): ReactElement => {
29
- const match = useMatch('business-trips/:businessTripId');
29
+ const { businessTripId: businessTripIdFromUrl } = useParams<{ businessTripId: string }>();
30
30
  const { setFiltersContext } = useContext(FiltersContext);
31
- const id = businessTripId ?? match?.params.businessTripId ?? '';
31
+ const id = businessTripId ?? businessTripIdFromUrl ?? '';
32
32
  const [{ data, fetching }] = useQuery({
33
33
  query: BusinessTripScreenDocument,
34
34
  variables: {
@@ -1,18 +1,18 @@
1
1
  import { useCallback, useContext, useEffect, useState, type ReactElement } from 'react';
2
2
  import { Loader2, PanelTopClose, PanelTopOpen } from 'lucide-react';
3
+ import { useNavigate } from 'react-router-dom';
3
4
  import { useQuery } from 'urql';
4
- import { Table, Tooltip } from '@mantine/core';
5
- import {
6
- AllBusinessesForScreenDocument,
7
- type AllBusinessesForScreenQuery,
8
- } from '../../gql/graphql.js';
5
+ import { Tooltip } from '@mantine/core';
6
+ import { AllBusinessesForScreenDocument } from '../../gql/graphql.js';
9
7
  import { useUrlQuery } from '../../hooks/use-url-query.js';
10
8
  import { cn } from '../../lib/utils.js';
11
9
  import { FiltersContext } from '../../providers/filters-context.js';
10
+ import { ROUTES } from '../../router/routes.js';
11
+ import { BusinessHeader } from '../business/business-header.js';
12
12
  import { MergeBusinessesButton } from '../common/index.js';
13
13
  import { PageLayout } from '../layout/page-layout.js';
14
14
  import { Button } from '../ui/button.js';
15
- import { AllBusinessesRow } from './all-businesses-row.js';
15
+ import { Checkbox } from '../ui/checkbox.js';
16
16
  import { BusinessesFilters } from './businesses-filters.js';
17
17
 
18
18
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- used by codegen
@@ -24,7 +24,7 @@ import { BusinessesFilters } from './businesses-filters.js';
24
24
  id
25
25
  name
26
26
  ... on LtdFinancialEntity {
27
- ...AllBusinessesRowFields
27
+ ...BusinessHeader
28
28
  }
29
29
  }
30
30
  pageInfo {
@@ -52,6 +52,7 @@ export const Businesses = (): ReactElement => {
52
52
  },
53
53
  });
54
54
 
55
+ const navigate = useNavigate();
55
56
  const [mergeSelectedBusinesses, setMergeSelectedBusinesses] = useState<
56
57
  Array<{ id: string; onChange: () => void }>
57
58
  >([]);
@@ -127,35 +128,43 @@ export const Businesses = (): ReactElement => {
127
128
  <Loader2 className={cn('h-10 w-10 animate-spin mr-2')} />
128
129
  </div>
129
130
  ) : (
130
- <Table striped highlightOnHover>
131
- <thead className="sticky top-0 z-20">
132
- <tr className="px-10 py-10 title-font tracking-wider font-medium text-gray-900 text-sm bg-gray-100 rounded-tl rounded-bl">
133
- <th>Name</th>
134
- <th>Hebrew Name</th>
135
- <th>More Info</th>
136
- </tr>
137
- </thead>
138
- <tbody>
139
- {businesses.map(business => (
140
- <AllBusinessesRow
141
- key={business.id}
142
- data={
143
- business as Extract<
144
- NonNullable<AllBusinessesForScreenQuery['allBusinesses']>['nodes'][number],
145
- { __typename: 'LtdFinancialEntity' }
146
- >
147
- }
148
- isAllOpened={isAllOpened}
149
- toggleMergeBusiness={
150
- toggleMergeBusiness
151
- ? (onChange: () => void): void => toggleMergeBusiness(business.id, onChange)
152
- : undefined
153
- }
154
- isSelectedForMerge={selectedIds.has(business.id) ?? false}
155
- />
156
- ))}
157
- </tbody>
158
- </Table>
131
+ <div className="space-y-2">
132
+ {businesses.map(business => (
133
+ <div
134
+ key={business.id}
135
+ className="group relative border rounded-lg hover:shadow-md transition-shadow"
136
+ >
137
+ <div className="flex items-center gap-3">
138
+ <div className="pl-4 flex items-center">
139
+ <Checkbox
140
+ checked={selectedIds.has(business.id)}
141
+ onCheckedChange={() => {
142
+ toggleMergeBusiness(business.id, () => {});
143
+ }}
144
+ className="h-4 w-4 rounded border-gray-300 cursor-pointer"
145
+ onClick={(e): void => e.stopPropagation()}
146
+ />
147
+ </div>
148
+ <div
149
+ role="button"
150
+ tabIndex={0}
151
+ className="flex-1 cursor-pointer"
152
+ onClick={(): void => {
153
+ navigate(ROUTES.BUSINESSES.DETAIL(business.id));
154
+ }}
155
+ onKeyDown={(e): void => {
156
+ if (e.key === 'Enter' || e.key === ' ') {
157
+ e.preventDefault();
158
+ navigate(ROUTES.BUSINESSES.DETAIL(business.id));
159
+ }
160
+ }}
161
+ >
162
+ <BusinessHeader data={business} />
163
+ </div>
164
+ </div>
165
+ </div>
166
+ ))}
167
+ </div>
159
168
  )}
160
169
  </PageLayout>
161
170
  );
@@ -1,5 +1,5 @@
1
1
  import { type ReactElement } from 'react';
2
- import { NavLink } from '@mantine/core';
2
+ import { Link } from 'react-router-dom';
3
3
  import { ChargesTableBusinessTripFieldsFragmentDoc } from '../../../gql/graphql.js';
4
4
  import { getFragmentData, type FragmentType } from '../../../gql/index.js';
5
5
 
@@ -29,17 +29,15 @@ export const BusinessTrip = ({ data }: Props): ReactElement => {
29
29
 
30
30
  return (
31
31
  <td>
32
- <a
33
- href={`/business-trips/${charge.businessTrip?.id}`}
32
+ <Link
33
+ to={`/business-trips/${charge.businessTrip?.id}`}
34
34
  target="_blank"
35
35
  rel="noreferrer"
36
36
  onClick={event => event.stopPropagation()}
37
+ className="inline-flex items-center font-semibold"
37
38
  >
38
- <NavLink
39
- label={charge.businessTrip?.name}
40
- className="[&>*>.mantine-NavLink-label]:font-semibold"
41
- />
42
- </a>
39
+ {charge.businessTrip?.name}
40
+ </Link>
43
41
  </td>
44
42
  );
45
43
  };
@@ -1,5 +1,6 @@
1
1
  import { useCallback, useMemo, type ReactElement } from 'react';
2
- import { Indicator, NavLink } from '@mantine/core';
2
+ import { Link } from 'react-router-dom';
3
+ import { Indicator } from '@mantine/core';
3
4
  import {
4
5
  ChargesTableEntityFieldsFragmentDoc,
5
6
  MissingChargeInfo,
@@ -81,14 +82,15 @@ export const Counterparty = ({ data }: Props): ReactElement => {
81
82
  <div className="flex flex-wrap">
82
83
  <Indicator inline size={12} disabled={!isError} color="red" zIndex="auto">
83
84
  {!isError && id && (
84
- <a
85
- href={getHref(id)}
85
+ <Link
86
+ to={getHref(id)}
86
87
  target="_blank"
87
88
  rel="noreferrer"
88
89
  onClick={event => event.stopPropagation()}
90
+ className="inline-flex items-center font-semibold"
89
91
  >
90
- <NavLink label={name} className="[&>*>.mantine-NavLink-label]:font-semibold" />
91
- </a>
92
+ {name}
93
+ </Link>
92
94
  )}
93
95
  {isError && name}
94
96
  </Indicator>
@@ -1,6 +1,6 @@
1
1
  import { useState, type ReactElement, type ReactNode } from 'react';
2
+ import { Button } from '@/components/ui/button.js';
2
3
  import { Pagination, Paper, Table, type PaginationProps } from '@mantine/core';
3
- import { Button } from './index.js';
4
4
 
5
5
  export interface AccounterTableProps<T, U> {
6
6
  highlightOnHover?: boolean;
@@ -47,7 +47,9 @@ export function AccounterTableRow<T, U>(props: AccountTableRow<T, U>): ReactElem
47
47
  {moreInfoValue === null ? (
48
48
  <p>No Data Related</p>
49
49
  ) : (
50
- <Button title="More Info" onClick={(): void => setOpened(!opened)} />
50
+ <Button onClick={(): void => setOpened(!opened)} className="ml-auto">
51
+ More Info
52
+ </Button>
51
53
  )}
52
54
  </td>
53
55
  )}
@@ -73,15 +75,14 @@ export function AccounterTable<T, U>(props: AccounterTableProps<T, U>): ReactNod
73
75
  <div className="flex flex-row justify-end w-full">
74
76
  {props.pagination && <Pagination className="flex-auto" {...props.pagination} />}
75
77
  {props.showButton === true ? (
76
- <button
77
- className="inline-flex text-white bg-indigo-500 border-0 py-1.5 px-3 focus:outline-hidden hover:bg-indigo-600 rounded-sm text-sm"
78
+ <Button
78
79
  type="button"
79
80
  onClick={(): void => {
80
81
  setIsShowAll(prev => !prev);
81
82
  }}
82
83
  >
83
84
  {isShowAll ? 'Hide All' : 'Show All'}
84
- </button>
85
+ </Button>
85
86
  ) : null}
86
87
  </div>
87
88
  <Table striped={props.striped} highlightOnHover={props.highlightOnHover}>