@zeniai/web-components 4.1.35 → 4.1.36

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 (30) hide show
  1. package/dist/{SessionTimeoutPopup-C669xsfH.js → SessionTimeoutPopup-B30sebbj.js} +65533 -64384
  2. package/dist/{SessionTimeoutPopup-B8_tVziz.cjs → SessionTimeoutPopup-B7rWupPV.cjs} +12994 -12801
  3. package/dist/appLocale.d.ts +43 -0
  4. package/dist/assets/illustrative/no-search-result.svg +24 -0
  5. package/dist/cockpit.cjs.js +1 -1
  6. package/dist/cockpit.esm.js +2 -2
  7. package/dist/components/cockpit/common/cockpitFilters/commonTypes.d.ts +1 -1
  8. package/dist/components/{cockpit/common/cockpitFilters/components → common/filters}/FiltersPopover.d.ts +1 -1
  9. package/dist/components/common/filters/GenericFilters.d.ts +75 -0
  10. package/dist/components/common/filters/components/GenericFiltersSelection.d.ts +58 -0
  11. package/dist/components/common/filters/genericFilterTypes.d.ts +62 -0
  12. package/dist/components/common/listPageSearchInputBox/ListPageSearchInputBox.d.ts +3 -1
  13. package/dist/components/common/listPageSearchSection/ListPageSearchSection.d.ts +13 -0
  14. package/dist/components/expenseAutomation/ExpenseAutomationPage.d.ts +17 -1
  15. package/dist/components/expenseAutomation/components/EmptyTableSection.d.ts +6 -0
  16. package/dist/components/expenseAutomation/components/NavBarWithHeader.d.ts +21 -1
  17. package/dist/components/expenseAutomation/components/TableSection.d.ts +2 -1
  18. package/dist/components/expenseAutomation/components/filters/AmountFilterValueField.d.ts +8 -0
  19. package/dist/components/expenseAutomation/components/filters/AmountMatchingOperatorDropdown.d.ts +8 -0
  20. package/dist/components/expenseAutomation/components/filters/TransactionFiltersComponent.d.ts +17 -0
  21. package/dist/components/expenseAutomation/components/filters/amountFilterConstants.d.ts +19 -0
  22. package/dist/components/expenseAutomation/components/filters/transactionFiltersHelpers.d.ts +24 -0
  23. package/dist/components/expenseAutomation/components/navbarHeaderData.d.ts +2 -2
  24. package/dist/components/formElements/filterValuesDropdownField/FilterValuesDropdownField.d.ts +5 -14
  25. package/dist/components/spendManagement/common/filters/spendManagementFiltersHelpers.d.ts +1 -1
  26. package/dist/context/featureProvider/FeatureGateNameConstants.d.ts +2 -0
  27. package/dist/index.cjs.js +1 -1
  28. package/dist/index.esm.js +1 -1
  29. package/dist/strings/strings.d.ts +43 -0
  30. package/package.json +2 -2
@@ -87,10 +87,13 @@ declare class AppLocale {
87
87
  unreview: string;
88
88
  download: string;
89
89
  search: string;
90
+ searchShortcutCmd: string;
91
+ searchShortcutCtrl: string;
90
92
  delete: string;
91
93
  reload: string;
92
94
  goHome: string;
93
95
  refresh: string;
96
+ filter: string;
94
97
  name: string;
95
98
  select: string;
96
99
  goBack: string;
@@ -8538,6 +8541,46 @@ declare class AppLocale {
8538
8541
  title: string;
8539
8542
  subTitle: string;
8540
8543
  };
8544
+ emptyStates: {
8545
+ noSearchResults: {
8546
+ title: string;
8547
+ subTitle: string;
8548
+ };
8549
+ };
8550
+ filters: {
8551
+ categoryLabels: {
8552
+ paymentAccountName: string;
8553
+ paymentAccountType: string;
8554
+ payee: string;
8555
+ category: string;
8556
+ class: string;
8557
+ amount: string;
8558
+ };
8559
+ amountOperators: {
8560
+ lessThan: string;
8561
+ greaterThan: string;
8562
+ isEqual: string;
8563
+ inBetween: string;
8564
+ placeholder: string;
8565
+ };
8566
+ amountInputPlaceholders: {
8567
+ enterAmount: string;
8568
+ from: string;
8569
+ to: string;
8570
+ };
8571
+ filterOptions: {
8572
+ transactionAmountOptions: {
8573
+ label: string;
8574
+ value: string;
8575
+ }[];
8576
+ transactionTypeOptions: {
8577
+ label: string;
8578
+ value: string;
8579
+ }[];
8580
+ };
8581
+ selectPaymentAccountNamePlaceholder: string;
8582
+ searchForPayeePlaceholder: string;
8583
+ };
8541
8584
  addCategory: string;
8542
8585
  addClass: string;
8543
8586
  addProject: string;
@@ -0,0 +1,24 @@
1
+ <svg width="87" height="69" viewBox="0 0 87 69" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g opacity="0.2">
3
+ <rect x="5.07362" y="5.97328" width="71.6165" height="16.0084" rx="0.421274" fill="#97C3B9"/>
4
+ <rect x="5.07362" y="5.97328" width="71.6165" height="16.0084" rx="0.421274" stroke="#97C3B9" stroke-width="0.842547"/>
5
+ <rect x="5.07411" y="48.5582" width="71.6165" height="16.0084" rx="0.421274" fill="#97C3B9"/>
6
+ <rect x="5.07411" y="48.5582" width="71.6165" height="16.0084" rx="0.421274" stroke="#97C3B9" stroke-width="0.842547"/>
7
+ <rect x="5.07411" y="27.2658" width="71.6165" height="16.0084" rx="0.421274" fill="#97C3B9"/>
8
+ <rect x="5.07411" y="27.2658" width="71.6165" height="16.0084" rx="0.421274" stroke="#97C3B9" stroke-width="0.842547"/>
9
+ <path d="M32.1074 33.6116C32.1074 38.8302 34.1805 43.835 37.8706 47.5251C41.5607 51.2152 46.5656 53.2883 51.7842 53.2883C57.0028 53.2883 62.0076 51.2152 65.6978 47.5251C69.3879 43.835 71.4609 38.8302 71.4609 33.6116C71.4609 28.393 69.3879 23.3881 65.6978 19.698C62.0076 16.0079 57.0028 13.9348 51.7842 13.9348C46.5656 13.9348 41.5607 16.0079 37.8706 19.698C34.1805 23.3881 32.1074 28.393 32.1074 33.6116Z" fill="#97C3B9"/>
10
+ </g>
11
+ <rect x="8.69056" y="8.82703" width="56.8595" height="0.277597" rx="0.138799" stroke="#97C3B9" stroke-width="0.277597"/>
12
+ <path d="M35.078 17.3912H1.60915C1.14382 17.3912 0.766602 17.014 0.766602 16.5487V1.38283C0.766602 0.917506 1.14382 0.540283 1.60915 0.540283H72.4708C72.9374 0.540283 73.3152 0.919552 73.3133 1.38619L73.2532 16.4851C73.2513 16.9491 72.8747 17.3243 72.4106 17.3243H67.0575" stroke="#97C3B9" stroke-width="0.666234" stroke-linecap="round"/>
13
+ <path d="M70.126 22.3201H72.471C72.9376 22.3201 73.3154 22.6993 73.3135 23.166L73.253 38.3766C73.2514 38.7789 72.9248 39.1041 72.5226 39.1041" stroke="#97C3B9" stroke-width="0.666234" stroke-linecap="round"/>
14
+ <rect x="8.69056" y="30.6068" width="19.2475" height="0.277597" rx="0.138799" stroke="#97C3B9" stroke-width="0.277597"/>
15
+ <path d="M30.8562 22.3201H1.17556C0.710229 22.3201 0.333008 22.6973 0.333008 23.1626V38.3285C0.333008 38.7938 0.710229 39.171 1.17556 39.171H29.7519" stroke="#97C3B9" stroke-width="0.666234" stroke-linecap="round"/>
16
+ <rect x="8.69056" y="52.6395" width="26.7253" height="0.277597" rx="0.138799" fill="#97C3B9" stroke="#97C3B9" stroke-width="0.277597"/>
17
+ <path d="M73.2257 58.1678V60.3613C73.2257 60.8266 72.8485 61.2039 72.3831 61.2039H1.60915C1.14382 61.2039 0.766602 60.8266 0.766602 60.3613V45.1955C0.766602 44.7301 1.14382 44.3529 1.60915 44.3529H30.6776" stroke="#97C3B9" stroke-width="0.666234" stroke-linecap="round"/>
18
+ <path d="M70.126 43.9727H72.4743C72.9397 43.9727 73.3169 44.3499 73.3169 44.8152V53.3979" stroke="#97C3B9" stroke-width="0.842547" stroke-linecap="round"/>
19
+ <path d="M31.7017 33.9263C31.7017 39.1449 33.7747 44.1497 37.4648 47.8398C41.155 51.5299 46.1598 53.603 51.3784 53.603C56.597 53.603 61.6019 51.5299 65.292 47.8398C68.9821 44.1497 71.0552 39.1449 71.0552 33.9263C71.0552 28.7077 68.9821 23.7028 65.292 20.0127C61.6019 16.3226 56.597 14.2495 51.3784 14.2495C46.1598 14.2495 41.155 16.3226 37.4648 20.0127C33.7747 23.7028 31.7017 28.7077 31.7017 33.9263Z" stroke="#EEBA7D" stroke-linecap="round" stroke-linejoin="round"/>
20
+ <path d="M84.3854 67.1342L65.6099 48.3586" stroke="#EEBA7D" stroke-linecap="round" stroke-linejoin="round"/>
21
+ <path d="M58.0977 26.9509L45.0031 40.0455" stroke="#EEBA7D" stroke-linecap="round"/>
22
+ <path d="M58.0977 40.0457L45.0031 26.9511" stroke="#EEBA7D" stroke-linecap="round"/>
23
+ <path opacity="0.2" d="M84.4455 68.4403L65.6699 49.6648" stroke="#97C3B9" stroke-width="1.11039" stroke-linecap="round" stroke-linejoin="round"/>
24
+ </svg>
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./SessionTimeoutPopup-B8_tVziz.cjs"),o=require("./vendor-.pnpm-Dd2Fl0gB.cjs"),u=require("react"),s=require("@emotion/styled"),Xe=require("@liveblocks/react"),J=require("@zeniai/client-epic-state"),Es=require("@liveblocks/react-ui"),we=require("@emotion/react"),Lo=require("react-dom"),St=require("@liveblocks/react-ui/primitives"),xi=require("@liveblocks/react/suspense");function Ea(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,i.get?i:{enumerable:!0,get:()=>e[r]})}}return n.default=e,Object.freeze(n)}const le=Ea(u),wa=({inboxNotification:e,onNotificationClick:n})=>{const r=Xe.useInboxNotificationThread(e.id),i=r.metadata.entityType.split("."),a=r.metadata.isGlobalComment&&i.length===2;return o.jsxRuntimeExports.jsx(va,{isClickable:a,isUnRead:e.readAt==null,onClick:()=>{n(r.metadata,r.id)},children:o.jsxRuntimeExports.jsx(Es.InboxNotification,{inboxNotification:e,kinds:{thread:d=>o.jsxRuntimeExports.jsx(Es.InboxNotification.Thread,{...d,showRoomName:!0})}})})},va=s.div`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./SessionTimeoutPopup-B7rWupPV.cjs"),o=require("./vendor-.pnpm-Dd2Fl0gB.cjs"),u=require("react"),s=require("@emotion/styled"),Xe=require("@liveblocks/react"),J=require("@zeniai/client-epic-state"),Es=require("@liveblocks/react-ui"),we=require("@emotion/react"),Lo=require("react-dom"),St=require("@liveblocks/react-ui/primitives"),xi=require("@liveblocks/react/suspense");function Ea(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,i.get?i:{enumerable:!0,get:()=>e[r]})}}return n.default=e,Object.freeze(n)}const le=Ea(u),wa=({inboxNotification:e,onNotificationClick:n})=>{const r=Xe.useInboxNotificationThread(e.id),i=r.metadata.entityType.split("."),a=r.metadata.isGlobalComment&&i.length===2;return o.jsxRuntimeExports.jsx(va,{isClickable:a,isUnRead:e.readAt==null,onClick:()=>{n(r.metadata,r.id)},children:o.jsxRuntimeExports.jsx(Es.InboxNotification,{inboxNotification:e,kinds:{thread:d=>o.jsxRuntimeExports.jsx(Es.InboxNotification.Thread,{...d,showRoomName:!0})}})})},va=s.div`
2
2
  display: flex;
3
3
  width: 100%;
4
4
  cursor: ${e=>e.isClickable?"pointer":"initial"};
@@ -1,5 +1,5 @@
1
- import { bR as o, dm as Ne, h as $t, cO as O, dO as It, dP as Qr, dQ as We, dR as Qd, dS as Jd, dT as Xd, a8 as I, dU as U, dV as qd, dK as ge, dW as lo, dX as lt, a9 as Ft, b2 as Bs, dY as wo, dZ as ps, d_ as So, d$ as us, bh as ep, e0 as Jt, e1 as De, e2 as Fl, e3 as Co, e4 as Fs, e5 as Be, e6 as tp, e7 as op, e8 as Wt, e9 as np, ea as Wl, eb as rp, ec as hs, ed as ms, ee as ip, ef as sp, eg as ap, eh as lp, ei as cp, ej as xt, ek as _l, el as dp, em as Jr, en as gs, dk as M, eo as pp, ep as up, eq as be, er as hp, bE as z, es as Fe, et as pt, eu as xs, aM as Nr, ev as mp, ew as ys, ex as Xr, d9 as Pe, ey as qr, ez as Vl, eA as Ul, eB as Xn, cT as zt, eC as dt, eD as gn, eE as gp, eF as Kl, eG as Hl, eH as Pt, cM as qe, eI as Mr, eJ as xp, eK as xn, eL as yn, eM as fn, eN as Fo, eO as ei, eP as fs, eQ as yp, eR as Gl, eS as co, eT as Wo, eU as Qt, eV as Ws, eW as fp, eX as bp, eY as $p, eZ as Cp, e_ as wp, e$ as qn, f0 as Sp, f1 as bs, c$ as vp, f2 as Yl, f3 as Zl, f4 as Ql, f5 as Jl, f6 as jp, f7 as _s, f8 as $s, f9 as kp, fa as Tp, fb as er, fc as bn, fd as Cs, fe as Lp, ff as ti, fg as bt, fh as Xl, fi as zr, fj as Pp, fk as ws, fl as Ip, fm as pn, fn as Ap, fo as Op, fp as Dp, fq as oi, fr as Vs, fs as ql, dB as Br, bc as ec, ft as tc, fu as Ss, fv as Ep, af as un, fw as Zn, fx as Qn, dL as oc, aH as Rp, dy as Np, fy as Yt, fz as Lt, fA as vs, fB as nc, fC as Mp, fD as rc, fE as zp, fF as Bp, fG as Ut, fH as sr, aI as Fp, fI as Kt, fJ as ic, fK as cn, fL as sc, fM as Fr, fN as ac, fO as Wp, fP as _p, fQ as Vp, fR as Wr, fS as Xi, fT as Us, fU as Up, fV as Kp, fW as li, fX as ci, fY as Hp, fZ as Ks, f_ as Gp, f$ as Yp, g0 as Hs, g1 as Zp, g2 as Qp, g3 as Jp, g4 as Xp, g5 as tr, g6 as lc, g7 as cc, g8 as Zt, g9 as ni, ga as hn, gb as dc, gc as pc, gd as qp, ge as eu, gf as uc, gg as tu, gh as ou, gi as _r, gj as hc, gk as nu, gl as ru, gm as iu, gn as js, go as mc, gp as gc, gq as xc, gr as yc, gs as fc, gt as su, gu as bc, gv as $c, gw as au, gx as lu, dw as cu, gy as du, gz as pu, gA as uu, gB as hu, gC as Gs, gD as mu, gE as Cc, gF as Ys, gG as gu, gH as xu, gI as yu, gJ as fu, gK as bu, gL as $u, gM as Zs, gN as Cu, gO as wc, gP as wu, gQ as Sc, gR as Su, gS as vu, gT as ju, gU as ku, gV as vc, gW as Tu, gX as Lu, gY as Pu, gZ as Iu, g_ as jc, g$ as Au, h0 as Ou, h1 as Du } from "./SessionTimeoutPopup-C669xsfH.js";
2
- import { A as ck, a as dk, b as pk, c as uk, d as hk, e as mk, f as gk, g as xk, i as yk, j as fk, k as bk, l as $k, m as Ck, n as wk, o as Sk, p as vk, q as jk, r as kk, s as Tk, t as Lk, u as Pk, v as Ik, w as Ak, x as Ok, y as Dk, z as Ek, B as Rk, C as Nk, D as Mk, E as zk, F as Bk, G as Fk, H as Wk, I as _k, J as Vk, K as Uk, S as Kk, L as Hk, M as Gk, N as Yk, O as Zk, P as Qk, Q as Jk, R as Xk, T as qk, U as eT, V as tT, W as oT, X as nT, Y as rT, Z as iT, _ as sT, $ as aT, S as lT, a0 as cT, a1 as dT, a2 as pT, a3 as uT, a4 as hT, a5 as mT, a6 as gT, a7 as xT, aa as yT, ab as fT, ac as bT, ad as $T, ae as CT, ag as wT, ah as ST, ai as vT, aj as jT, ak as kT, al as TT, am as LT, an as PT, ao as IT, ap as AT, aq as OT, ar as DT, as as ET, at as RT, au as NT, av as MT, aw as zT, ax as BT, ay as FT, az as WT, aA as _T, aB as VT, aC as UT, aD as KT, aE as HT, aF as GT, aG as YT, aJ as ZT, aK as QT, aL as JT, aN as XT, aO as qT, aP as eL, aQ as tL, aR as oL, aS as nL, aT as rL, aU as iL, aV as sL, aW as aL, aX as lL, aY as cL, aZ as dL, a_ as pL, a$ as uL, b0 as hL, b1 as mL, b3 as gL, b4 as xL, b5 as yL, b6 as fL, b7 as bL, b8 as $L, b9 as CL, ba as wL, bb as SL, bd as vL, be as jL, bf as kL, bg as TL, bi as LL, bj as PL, bk as IL, bl as AL, bm as OL, bn as DL, bo as EL, bp as RL, bq as NL, br as ML, bs as zL, bt as BL, bu as FL, bv as WL, bw as _L, bx as VL, by as UL, bz as KL, bA as HL, S as GL, bB as YL, bC as ZL, bD as QL, bF as JL, bG as XL, bH as qL, bI as eP, bJ as tP, bK as oP, bL as nP, bM as rP, bN as iP, bO as sP, bP as aP, bQ as lP, bS as cP, bT as dP, bU as pP, bV as uP, bW as hP, bX as mP, bY as gP, bZ as xP, b_ as yP, b$ as fP, c0 as bP, c1 as $P, c2 as CP, c3 as wP, c4 as SP, c5 as vP, c6 as jP, c7 as kP, c8 as TP, c9 as LP, ca as PP, cb as IP, cc as AP, cd as OP, ce as DP, cf as EP, cg as RP, ch as NP, ci as MP, cj as zP, ck as BP, cl as FP, cm as WP, cn as _P, co as VP, cp as UP, cq as KP, cr as HP, cs as GP, ct as YP, cu as ZP, cv as QP, cw as JP, cx as XP, cy as qP, cz as eI, cA as tI, cB as oI, cC as nI, cD as rI, cE as iI, cF as sI, cG as aI, cH as lI, cI, cJ as dI, cK as pI, cL as uI, cN as hI, cP as mI, cQ as gI, cR as xI, cS as yI, cU as fI, cV as bI, cW as $I, cX as CI, cY as wI, cZ as SI, c_ as vI, d0 as jI, d1 as kI, d2 as TI, d3 as LI, d4 as PI, d5 as II, d6 as AI, d7 as OI, d8 as DI, da as EI, db as RI, dc as NI, dd as MI, de as zI, df as BI, dg as FI, dh as WI, di as _I, dj as VI, dl as UI, dn as KI, dp as HI, dq as GI, dr as YI, ds as ZI, dt as QI, du as JI, dv as XI, dx as qI, dz as eA, dA as tA, dC as oA, dD as nA, dE as rA, dF as iA, dG as sA, dH as aA, dI as lA, dJ as cA, dM as dA, dN as pA } from "./SessionTimeoutPopup-C669xsfH.js";
1
+ import { bR as o, dm as Ne, h as $t, cO as O, dO as It, dP as Qr, dQ as We, dR as Qd, dS as Jd, dT as Xd, a8 as I, dU as U, dV as qd, dK as ge, dW as lo, dX as lt, a9 as Ft, b2 as Bs, dY as wo, dZ as ps, d_ as So, d$ as us, bh as ep, e0 as Jt, e1 as De, e2 as Fl, e3 as Co, e4 as Fs, e5 as Be, e6 as tp, e7 as op, e8 as Wt, e9 as np, ea as Wl, eb as rp, ec as hs, ed as ms, ee as ip, ef as sp, eg as ap, eh as lp, ei as cp, ej as xt, ek as _l, el as dp, em as Jr, en as gs, dk as M, eo as pp, ep as up, eq as be, er as hp, bE as z, es as Fe, et as pt, eu as xs, aM as Nr, ev as mp, ew as ys, ex as Xr, d9 as Pe, ey as qr, ez as Vl, eA as Ul, eB as Xn, cT as zt, eC as dt, eD as gn, eE as gp, eF as Kl, eG as Hl, eH as Pt, cM as qe, eI as Mr, eJ as xp, eK as xn, eL as yn, eM as fn, eN as Fo, eO as ei, eP as fs, eQ as yp, eR as Gl, eS as co, eT as Wo, eU as Qt, eV as Ws, eW as fp, eX as bp, eY as $p, eZ as Cp, e_ as wp, e$ as qn, f0 as Sp, f1 as bs, c$ as vp, f2 as Yl, f3 as Zl, f4 as Ql, f5 as Jl, f6 as jp, f7 as _s, f8 as $s, f9 as kp, fa as Tp, fb as er, fc as bn, fd as Cs, fe as Lp, ff as ti, fg as bt, fh as Xl, fi as zr, fj as Pp, fk as ws, fl as Ip, fm as pn, fn as Ap, fo as Op, fp as Dp, fq as oi, fr as Vs, fs as ql, dB as Br, bc as ec, ft as tc, fu as Ss, fv as Ep, af as un, fw as Zn, fx as Qn, dL as oc, aH as Rp, dy as Np, fy as Yt, fz as Lt, fA as vs, fB as nc, fC as Mp, fD as rc, fE as zp, fF as Bp, fG as Ut, fH as sr, aI as Fp, fI as Kt, fJ as ic, fK as cn, fL as sc, fM as Fr, fN as ac, fO as Wp, fP as _p, fQ as Vp, fR as Wr, fS as Xi, fT as Us, fU as Up, fV as Kp, fW as li, fX as ci, fY as Hp, fZ as Ks, f_ as Gp, f$ as Yp, g0 as Hs, g1 as Zp, g2 as Qp, g3 as Jp, g4 as Xp, g5 as tr, g6 as lc, g7 as cc, g8 as Zt, g9 as ni, ga as hn, gb as dc, gc as pc, gd as qp, ge as eu, gf as uc, gg as tu, gh as ou, gi as _r, gj as hc, gk as nu, gl as ru, gm as iu, gn as js, go as mc, gp as gc, gq as xc, gr as yc, gs as fc, gt as su, gu as bc, gv as $c, gw as au, gx as lu, dw as cu, gy as du, gz as pu, gA as uu, gB as hu, gC as Gs, gD as mu, gE as Cc, gF as Ys, gG as gu, gH as xu, gI as yu, gJ as fu, gK as bu, gL as $u, gM as Zs, gN as Cu, gO as wc, gP as wu, gQ as Sc, gR as Su, gS as vu, gT as ju, gU as ku, gV as vc, gW as Tu, gX as Lu, gY as Pu, gZ as Iu, g_ as jc, g$ as Au, h0 as Ou, h1 as Du } from "./SessionTimeoutPopup-B30sebbj.js";
2
+ import { A as ck, a as dk, b as pk, c as uk, d as hk, e as mk, f as gk, g as xk, i as yk, j as fk, k as bk, l as $k, m as Ck, n as wk, o as Sk, p as vk, q as jk, r as kk, s as Tk, t as Lk, u as Pk, v as Ik, w as Ak, x as Ok, y as Dk, z as Ek, B as Rk, C as Nk, D as Mk, E as zk, F as Bk, G as Fk, H as Wk, I as _k, J as Vk, K as Uk, S as Kk, L as Hk, M as Gk, N as Yk, O as Zk, P as Qk, Q as Jk, R as Xk, T as qk, U as eT, V as tT, W as oT, X as nT, Y as rT, Z as iT, _ as sT, $ as aT, S as lT, a0 as cT, a1 as dT, a2 as pT, a3 as uT, a4 as hT, a5 as mT, a6 as gT, a7 as xT, aa as yT, ab as fT, ac as bT, ad as $T, ae as CT, ag as wT, ah as ST, ai as vT, aj as jT, ak as kT, al as TT, am as LT, an as PT, ao as IT, ap as AT, aq as OT, ar as DT, as as ET, at as RT, au as NT, av as MT, aw as zT, ax as BT, ay as FT, az as WT, aA as _T, aB as VT, aC as UT, aD as KT, aE as HT, aF as GT, aG as YT, aJ as ZT, aK as QT, aL as JT, aN as XT, aO as qT, aP as eL, aQ as tL, aR as oL, aS as nL, aT as rL, aU as iL, aV as sL, aW as aL, aX as lL, aY as cL, aZ as dL, a_ as pL, a$ as uL, b0 as hL, b1 as mL, b3 as gL, b4 as xL, b5 as yL, b6 as fL, b7 as bL, b8 as $L, b9 as CL, ba as wL, bb as SL, bd as vL, be as jL, bf as kL, bg as TL, bi as LL, bj as PL, bk as IL, bl as AL, bm as OL, bn as DL, bo as EL, bp as RL, bq as NL, br as ML, bs as zL, bt as BL, bu as FL, bv as WL, bw as _L, bx as VL, by as UL, bz as KL, bA as HL, S as GL, bB as YL, bC as ZL, bD as QL, bF as JL, bG as XL, bH as qL, bI as eP, bJ as tP, bK as oP, bL as nP, bM as rP, bN as iP, bO as sP, bP as aP, bQ as lP, bS as cP, bT as dP, bU as pP, bV as uP, bW as hP, bX as mP, bY as gP, bZ as xP, b_ as yP, b$ as fP, c0 as bP, c1 as $P, c2 as CP, c3 as wP, c4 as SP, c5 as vP, c6 as jP, c7 as kP, c8 as TP, c9 as LP, ca as PP, cb as IP, cc as AP, cd as OP, ce as DP, cf as EP, cg as RP, ch as NP, ci as MP, cj as zP, ck as BP, cl as FP, cm as WP, cn as _P, co as VP, cp as UP, cq as KP, cr as HP, cs as GP, ct as YP, cu as ZP, cv as QP, cw as JP, cx as XP, cy as qP, cz as eI, cA as tI, cB as oI, cC as nI, cD as rI, cE as iI, cF as sI, cG as aI, cH as lI, cI, cJ as dI, cK as pI, cL as uI, cN as hI, cP as mI, cQ as gI, cR as xI, cS as yI, cU as fI, cV as bI, cW as $I, cX as CI, cY as wI, cZ as SI, c_ as vI, d0 as jI, d1 as kI, d2 as TI, d3 as LI, d4 as PI, d5 as II, d6 as AI, d7 as OI, d8 as DI, da as EI, db as RI, dc as NI, dd as MI, de as zI, df as BI, dg as FI, dh as WI, di as _I, dj as VI, dl as UI, dn as KI, dp as HI, dq as GI, dr as YI, ds as ZI, dt as QI, du as JI, dv as XI, dx as qI, dz as eA, dA as tA, dC as oA, dD as nA, dE as rA, dF as iA, dG as sA, dH as aA, dI as lA, dJ as cA, dM as dA, dN as pA } from "./SessionTimeoutPopup-B30sebbj.js";
3
3
  import { j as t, D as Eu, f as Ru, u as Ve, S as $n, c as rt, L as Nu, T as Mu, a as zu, P as ri, C as Xt, b as ye, d as po, e as Cn, g as uo, h as _o, F as ho, i as Vo, A as qt, V as Uo, k as nt, I as kc, l as Bu, n as Mt, m as Bo, o as Fu, p as ks, q as Tc, M as Wu, r as _u, t as Ts, v as Ls, w as Qs } from "./vendor-.pnpm-DtQs9f4A.js";
4
4
  import { s as hA } from "./vendor-.pnpm-DtQs9f4A.js";
5
5
  import * as me from "react";
@@ -24,7 +24,7 @@ export interface HealthMonitorFilterCategoryDropdownOption extends CategoryDropd
24
24
  export interface AiAccountantFilterCategoryDropdownOption extends CategoryDropdownOption {
25
25
  value: AiAccountantFilterCategoryField;
26
26
  }
27
- export type MatchingOperatorDropdownValue = "equal" | "not-equal";
27
+ export type MatchingOperatorDropdownValue = "equal" | "not_equal";
28
28
  export type ValuesCombinationOperatorDropdownValue = "ANY" | "ALL";
29
29
  export interface MatchingOperatorDropdownOption {
30
30
  label: "is" | "is not";
@@ -1,4 +1,4 @@
1
- import { ReactChild } from '../../../../../types/common';
1
+ import { ReactChild } from '../../../types/common';
2
2
  interface Props {
3
3
  anchorEl: HTMLElement | null;
4
4
  children: ReactChild | ReactChild[];
@@ -0,0 +1,75 @@
1
+ import { MatchingOperatorDropdownOption, SpendManagementFilterEntityType, TransactionFilterEntityType, UserRoleType } from '@zeniai/client-epic-state';
2
+ import { AutoCompleteActions, AutoCompleteData } from '../../common/autoComplete/autoCompleteProps';
3
+ import { GenericFilterCategory, GenericFilterCategoryDropdownOption, GenericFiltersType, ValuesDropdownOption } from './genericFilterTypes';
4
+ export type SupportedFilterEntityType = TransactionFilterEntityType | SpendManagementFilterEntityType;
5
+ export interface GroupByFiltersComponentProps {
6
+ component: React.ReactElement;
7
+ height: number;
8
+ }
9
+ export interface GenericFiltersProps<TEntity extends SupportedFilterEntityType, TField extends string, TCategoryDropdownOption extends GenericFilterCategoryDropdownOption<TField>, TFiltersType extends GenericFiltersType<TField>> {
10
+ entity: TEntity;
11
+ filters: TFiltersType;
12
+ filterStrings: {
13
+ addFilterBtnText: string;
14
+ categoryPlaceholder: string;
15
+ clearAllBtnText: string;
16
+ empty: string;
17
+ filterByLabel: string;
18
+ searchPlaceholder: string;
19
+ select: string;
20
+ /** Optional: return custom placeholder for the value dropdown by category field */
21
+ getValuePlaceholder?: (categoryField: string, categoryLabel: string) => string | undefined;
22
+ };
23
+ helpers: {
24
+ getAppliedFiltersCount: (filters: TFiltersType) => number;
25
+ getDefaultEmptyFilters: () => TFiltersType;
26
+ getFilterCategories: (entity: TEntity, userRole?: UserRoleType[]) => TCategoryDropdownOption[];
27
+ getFilterCategoryLabel: (entity: TEntity, key: string) => string;
28
+ getUpdatedFiltersOnCategoryChange: (props: {
29
+ currentFilters: TFiltersType;
30
+ selectedOption: TCategoryDropdownOption;
31
+ categoryIndex?: number;
32
+ }) => TFiltersType;
33
+ getUpdatedFiltersOnMatchingOperatorChange: (props: {
34
+ currentFilters: TFiltersType;
35
+ selectedOption: MatchingOperatorDropdownOption;
36
+ categoryIndex?: number;
37
+ }) => TFiltersType;
38
+ getUpdatedFiltersOnValueChange: (props: {
39
+ categoryIndex: number;
40
+ currentFilters: TFiltersType;
41
+ selectedOptions: ValuesDropdownOption[];
42
+ }) => TFiltersType;
43
+ };
44
+ /**
45
+ * Memoized dropdown options keyed by category field. The cache inside
46
+ * GenericFilters mirrors this value, so when source data lands after
47
+ * first render the dropdowns refresh automatically. Callers MUST
48
+ * memoize this (e.g. with `useMemo`) — passing a new object reference
49
+ * on every parent render will churn the internal cache state.
50
+ */
51
+ categoryWiseOptions?: Record<string, ValuesDropdownOption[]>;
52
+ createdByUserListLoaded?: boolean;
53
+ disableFilters?: boolean;
54
+ groupByFiltersComponent?: GroupByFiltersComponentProps;
55
+ transactionsLoaded?: boolean;
56
+ vendorSearchAutoCompleteActions?: AutoCompleteActions;
57
+ vendorSearchAutoCompleteData?: AutoCompleteData;
58
+ onFiltersChange: (filters: TFiltersType) => void;
59
+ onFilterClick?: (entity: TEntity) => void;
60
+ /** When provided and returns non-null for a field, renders custom operator + value UI (e.g. transaction amount filter with From/To inputs). */
61
+ renderCustomCategoryValueSection?: (field: string, props: {
62
+ categoryIndex: number;
63
+ filter: GenericFilterCategory<TField>;
64
+ onMatchingOperatorChange: (option: {
65
+ label: string;
66
+ value: string;
67
+ }, categoryIndex?: number) => void;
68
+ onValueChange: (value: ValuesDropdownOption[], categoryIndex: number) => void;
69
+ }) => {
70
+ operatorDropdown: React.ReactNode;
71
+ valueField: React.ReactNode;
72
+ } | null;
73
+ }
74
+ declare function GenericFilters<TEntity extends SupportedFilterEntityType, TField extends string, TCategoryDropdownOption extends GenericFilterCategoryDropdownOption<TField>, TFiltersType extends GenericFiltersType<TField>>({ entity: selectedEntity, filters, filterStrings, helpers, onFiltersChange, createdByUserListLoaded, disableFilters, groupByFiltersComponent, transactionsLoaded, vendorSearchAutoCompleteActions, vendorSearchAutoCompleteData, categoryWiseOptions, onFilterClick, renderCustomCategoryValueSection, }: GenericFiltersProps<TEntity, TField, TCategoryDropdownOption, TFiltersType>): import("react/jsx-runtime").JSX.Element;
75
+ export default GenericFilters;
@@ -0,0 +1,58 @@
1
+ import { MatchingOperatorDropdownOption, UserRoleType } from '@zeniai/client-epic-state';
2
+ import { AutoCompleteActions, AutoCompleteData } from '../../../common/autoComplete/autoCompleteProps';
3
+ import { SupportedFilterEntityType } from '../GenericFilters';
4
+ import { GenericFilterCategory, GenericFilterCategoryDropdownOption, GenericFiltersType, ValuesDropdownOption } from '../genericFilterTypes';
5
+ export interface GenericFiltersSelectionProps<TEntity extends SupportedFilterEntityType, TField extends string, TCategoryDropdownOption extends GenericFilterCategoryDropdownOption<TField>, TFiltersType extends GenericFiltersType<TField>> {
6
+ filters: TFiltersType;
7
+ filterStrings: {
8
+ addFilterBtnText: string;
9
+ categoryPlaceholder: string;
10
+ clearAllBtnText: string;
11
+ filterByLabel: string;
12
+ searchPlaceholder: string;
13
+ select: string;
14
+ getValuePlaceholder?: (categoryField: string, categoryLabel: string) => string | undefined;
15
+ };
16
+ filterValues: Record<string, ValuesDropdownOption[]>;
17
+ helpers: {
18
+ getAppliedFiltersCount: (filters: TFiltersType) => number;
19
+ getDefaultEmptyFilters: () => TFiltersType;
20
+ getFilterCategories: (entity: TEntity, userRole?: UserRoleType[]) => TCategoryDropdownOption[];
21
+ getFilterCategoryLabel: (entity: TEntity, key: string) => string;
22
+ getUpdatedFiltersOnCategoryChange: (props: {
23
+ currentFilters: TFiltersType;
24
+ selectedOption: TCategoryDropdownOption;
25
+ categoryIndex?: number;
26
+ }) => TFiltersType;
27
+ getUpdatedFiltersOnMatchingOperatorChange: (props: {
28
+ currentFilters: TFiltersType;
29
+ selectedOption: MatchingOperatorDropdownOption;
30
+ categoryIndex?: number;
31
+ }) => TFiltersType;
32
+ getUpdatedFiltersOnValueChange: (props: {
33
+ categoryIndex: number;
34
+ currentFilters: TFiltersType;
35
+ selectedOptions: ValuesDropdownOption[];
36
+ }) => TFiltersType;
37
+ };
38
+ selectedEntity: TEntity;
39
+ vendorSearchAutoCompleteActions?: AutoCompleteActions;
40
+ vendorSearchAutoCompleteData?: AutoCompleteData;
41
+ onFiltersChange: (filters: TFiltersType) => void;
42
+ renderCustomCategoryValueSection?: (field: string, props: {
43
+ categoryIndex: number;
44
+ filter: GenericFilterCategory<TField>;
45
+ onMatchingOperatorChange: (option: {
46
+ label: string;
47
+ value: string;
48
+ }, categoryIndex?: number) => void;
49
+ onValueChange: (value: ValuesDropdownOption[], categoryIndex: number) => void;
50
+ }) => {
51
+ operatorDropdown: React.ReactNode;
52
+ valueField: React.ReactNode;
53
+ } | null;
54
+ }
55
+ declare const _default: <TEntity extends SupportedFilterEntityType, TField extends string, TCategoryDropdownOption extends GenericFilterCategoryDropdownOption<TField>, TFiltersType extends GenericFiltersType<TField>>(props: GenericFiltersSelectionProps<TEntity, TField, TCategoryDropdownOption, TFiltersType> & {
56
+ ref?: React.ForwardedRef<HTMLDivElement>;
57
+ }) => React.ReactElement;
58
+ export default _default;
@@ -0,0 +1,62 @@
1
+ import { CategoryCombinationOperator, ZeniDate, ZeniUrl } from '@zeniai/client-epic-state';
2
+ type DropdownOptionTypeBase = {
3
+ [key: string]: any;
4
+ };
5
+ export type ValuesDropdownOption = DropdownOptionTypeBase & {
6
+ label: string;
7
+ value: string | number | ZeniDate;
8
+ email?: string;
9
+ iconColor?: string;
10
+ iconType?: string;
11
+ photo?: ZeniUrl;
12
+ };
13
+ /**
14
+ * How a category's selected values combine when matching:
15
+ * - `"ANY"` — match a row if any value in `values[]` matches (OR semantics).
16
+ * - `"ALL"` — match a row only if every value in `values[]` matches (AND).
17
+ *
18
+ * Exposed as a named type so callsites that store or narrow this field
19
+ * (e.g. TC's `TransactionFilterCategory`, which pins it to literal `"ANY"`)
20
+ * reference one source of truth rather than redeclaring the union.
21
+ */
22
+ export type ValuesCombinationOperator = "ANY" | "ALL";
23
+ export type GenericFilterCategory<TField extends string = string> = {
24
+ values: Array<string | number | ZeniDate>;
25
+ field?: TField;
26
+ matchingOperator?: string;
27
+ valuesCombinationOperator?: ValuesCombinationOperator;
28
+ };
29
+ export type GenericFiltersType<TField extends string = string> = {
30
+ categories: GenericFilterCategory<TField>[];
31
+ categoryCombinationOperator: CategoryCombinationOperator;
32
+ };
33
+ /**
34
+ * Type shape for `NEW_CATEGORY_BODY` below. Carries three deliberate
35
+ * narrowing choices:
36
+ *
37
+ * - `valuesCombinationOperator: "ANY"` — the literal type, not the wider
38
+ * `ValuesCombinationOperator` union, because TC's
39
+ * `TransactionFilterCategory` narrows the field further to exactly
40
+ * `"ANY"`. Without the literal here, the `...NEW_CATEGORY_BODY` spread
41
+ * would produce `string` and fail the downstream assignment.
42
+ * - `values: never[]` — narrowest possible array type, so the spread is
43
+ * assignable to any concrete `values` (e.g. TC's `(string | number)[]`,
44
+ * SM's `Array<string | number | ZeniDate>`).
45
+ * - `matchingOperator: string` — widely usable placeholder; every caller
46
+ * overrides this field after the spread.
47
+ *
48
+ * Using an explicit type annotation rather than `as const` keeps the
49
+ * narrowing without scattering `as const` through callsites.
50
+ */
51
+ type NewCategoryBody = {
52
+ matchingOperator: string;
53
+ values: never[];
54
+ valuesCombinationOperator: "ANY";
55
+ };
56
+ export declare const NEW_CATEGORY_BODY: NewCategoryBody;
57
+ export type GenericFilterCategoryDropdownOption<TField extends string = string> = {
58
+ value: TField;
59
+ multiple?: boolean;
60
+ type?: string;
61
+ };
62
+ export {};
@@ -1,5 +1,6 @@
1
1
  export interface Props {
2
2
  disabled?: boolean;
3
+ enableSearchHotkey?: boolean;
3
4
  inputWrapperStyle?: React.CSSProperties;
4
5
  keepSearchBoxOpen?: boolean;
5
6
  placeholder?: string;
@@ -8,9 +9,10 @@ export interface Props {
8
9
  searchIconMarginRight?: string;
9
10
  searchText?: string;
10
11
  style?: React.CSSProperties;
12
+ styledSearchCancelIconWrapperStyle?: React.CSSProperties;
11
13
  styledSearchIconContainerStyle?: React.CSSProperties;
12
14
  styledSearchIconWrapperStyle?: React.CSSProperties;
13
15
  onSearchOpen?: (isOpen: boolean) => void;
14
16
  onSearchTextChanged?: (text: string) => void;
15
17
  }
16
- export declare function ListPageSearchInputBox({ disabled, inputWrapperStyle, keepSearchBoxOpen, placeholder, searchBarDataTestId, searchIconMarginRight, searchText, style, styledSearchIconContainerStyle, styledSearchIconWrapperStyle, onSearchOpen, onSearchTextChanged, }: Readonly<Props>): import("react/jsx-runtime").JSX.Element;
18
+ export declare function ListPageSearchInputBox({ enableSearchHotkey, disabled, inputWrapperStyle, keepSearchBoxOpen, placeholder, searchBarDataTestId, searchIconMarginRight, searchText, style, styledSearchCancelIconWrapperStyle, styledSearchIconContainerStyle, styledSearchIconWrapperStyle, onSearchOpen, onSearchTextChanged, }: Readonly<Props>): import("react/jsx-runtime").JSX.Element;
@@ -2,13 +2,26 @@ export interface ListPageSearchSectionProps {
2
2
  isSearchOpen: boolean;
3
3
  searchPlaceHolder: string;
4
4
  searchText: string;
5
+ /** Tab-within-feature scope — see `selectedEntity` above. */
6
+ currentTab?: string;
5
7
  downloadPresent?: boolean;
8
+ enableSearchHotkey?: boolean;
6
9
  hideSearchBtn?: boolean;
7
10
  inputWrapperStyle?: React.CSSProperties;
8
11
  /** When set, applied to each search bar container (icon + input). */
9
12
  searchBarDataTestId?: string;
10
13
  searchIconMarginRight?: string;
11
14
  searchTextBoxStyle?: React.CSSProperties;
15
+ /**
16
+ * Optional page/feature scope — paired with `currentTab` to derive a
17
+ * specific `data-testid` on the outer container (e.g.
18
+ * `search-transaction_categorization-review`). Both must be supplied for
19
+ * the attribute to render; either missing falls back to no `data-testid`
20
+ * so consumers without this context (vendor pages, aging reports, etc.)
21
+ * stay un-tagged and continue to rely on their own scoping mechanisms.
22
+ */
23
+ selectedEntity?: string;
24
+ styledSearchCancelIconWrapperStyle?: React.CSSProperties;
12
25
  styledSearchIconContainerStyle?: React.CSSProperties;
13
26
  styledSearchIconWrapperStyle?: React.CSSProperties;
14
27
  onSearchTextChanged?: (searchText: string) => void;
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { AccountBase, AuthParams, BulkUploadResultsTab, BulkUploadSelectorData, BulkUploadSortKey, COTTransactionTrackingByTransactionId, ClassBase, CompletedSubTab, CustomerBase, Entity, ExpenseAutomationJESchedulesViewUIState, ExpenseAutomationMissingReceiptsViewUIState, ExpenseAutomationReconciliationViewTab, ExpenseAutomationStepDetails, ExpenseAutomationTransactionsTab, ExpenseAutomationTransactionsViewUIState, ExpenseAutomationViewSelector, ExpenseAutomationViewType, FetchState, FluxAnalysisActionType, FluxAnalysisSectionType, FluxAnalysisViewUIState, ID, JEScheduleTransactionKey, LoggedInUser, MissingReceiptsTab, MonthYearPeriod, PageToken, PlaidLinkTokenType, RecommendationWithCOT, ReconReconcileSortKey, ReconReviewSortKey, ReconciliationReviewTabLocalData, SaveExpenseAutomationReconciliationActionType, ScheduleTypes, SortOrder, SupportedTransactionPayload, SupportedTransactionWithCOT, TransactionEntityType, TransactionID, TransactionType, Vendor, VendorBase, ZeniAPIStatus } from '@zeniai/client-epic-state';
2
+ import { AccountBase, AccountFilterOption, AuthParams, BulkUploadResultsTab, BulkUploadSelectorData, BulkUploadSortKey, COTTransactionTrackingByTransactionId, ClassBase, ClassFilterOption, CompletedSubTab, CustomerBase, Entity, ExpenseAutomationJESchedulesViewUIState, ExpenseAutomationMissingReceiptsViewUIState, ExpenseAutomationReconciliationViewTab, ExpenseAutomationStepDetails, ExpenseAutomationTransactionsTab, ExpenseAutomationTransactionsViewUIState, ExpenseAutomationViewSelector, ExpenseAutomationViewType, FetchState, FluxAnalysisActionType, FluxAnalysisSectionType, FluxAnalysisViewUIState, ID, JEScheduleTransactionKey, LoggedInUser, MissingReceiptsTab, MonthYearPeriod, PageToken, PlaidLinkTokenType, RecommendationWithCOT, ReconReconcileSortKey, ReconReviewSortKey, ReconciliationReviewTabLocalData, SaveExpenseAutomationReconciliationActionType, ScheduleTypes, SortOrder, SupportedTransactionPayload, SupportedTransactionWithCOT, TransactionEntityType, TransactionFilters, TransactionID, TransactionType, Vendor, VendorBase, ZeniAPIStatus } from '@zeniai/client-epic-state';
3
3
  import { AutoCompleteActions, AutoCompleteData } from '../common/autoComplete/autoCompleteProps';
4
4
  import { ReportTreeScrollPosition } from '../reportTree/ReportTree';
5
5
  import { ExpenseAutomationThreadClickTarget } from './components/ExpenseAutomationCommentingShell';
@@ -22,6 +22,8 @@ export interface ExpenseAutomationPageProps extends MonthEndReportPageProps {
22
22
  receiptUploadEndpoint: string;
23
23
  vendorSearchAutoCompleteActions: AutoCompleteActions;
24
24
  vendorSearchAutoCompleteData: AutoCompleteData;
25
+ /** Accounts from getAllAccounts(accountState) for Payment Account Name/Type filter dropdowns */
26
+ accountsForFilters?: AccountFilterOption[];
25
27
  /**
26
28
  * Transaction categorization only: inline activity next to the TC list
27
29
  * (e.g. `TransactionActivityLogPanel`).
@@ -34,6 +36,19 @@ export interface ExpenseAutomationPageProps extends MonthEndReportPageProps {
34
36
  activityLogTransactionId?: ID;
35
37
  bulkUploadEndpoint?: string;
36
38
  bulkUploadSelector?: BulkUploadSelectorData;
39
+ /** Options for the Category filter dropdown (converted to { label: accountName, value: accountId }) */
40
+ categoryOptions?: Array<{
41
+ accountId?: string;
42
+ accountName?: string;
43
+ }>;
44
+ /**
45
+ * Class options for the Class filter dropdown. Uses the narrow
46
+ * `ClassFilterOption` ({classId, className}) — only the identity and the
47
+ * display label are needed here. Passing the full `ClassBase` would be a
48
+ * loose contract that lets consumers accidentally rely on fields that the
49
+ * upstream selector strips out.
50
+ */
51
+ classesForFilters?: ClassFilterOption[];
37
52
  /** Initial receipts sub-tab (e.g. Storybook: show Unmatched without clicking tabs). */
38
53
  initialMissingReceiptsTab?: MissingReceiptsTab;
39
54
  isAiCfoAccessEnabled?: boolean;
@@ -72,6 +87,7 @@ export interface ExpenseAutomationPageProps extends MonthEndReportPageProps {
72
87
  }, isBulkFetch: boolean, selectedTab: ExpenseAutomationTransactionsTab, entity?: Entity, updatedCustomer?: CustomerBase) => void;
73
88
  onFetchReimbursementView: (selectedPeriod: MonthYearPeriod, pageToken: PageToken, keepExistingListItems: boolean) => void;
74
89
  onFetchTransactionCategorizationList: (selectedTab: ExpenseAutomationTransactionsTab, searchString?: string, keepExistingListItems?: boolean, pageToken?: PageToken, refreshInBackground?: boolean, resetListItems?: boolean) => void;
90
+ onFiltersChange: (filters: TransactionFilters) => void;
75
91
  onIncludeAccountIntoReconciliation: (accountId: ID) => void;
76
92
  onJeAccountSettingsChange: (formData: JEScheduleAccountSettingsFormData) => void;
77
93
  onJESchedulesFormDataChange: (scheduleJournalEntryID: ID, localData: JEScheduleResolveComponentFormData) => void;
@@ -6,6 +6,12 @@ interface EmptyTableSectionProps {
6
6
  subTitle: string;
7
7
  tab: ExpenseAutomationViewType;
8
8
  title: string;
9
+ /**
10
+ * When true, render the "no search results" illustration instead of the
11
+ * tab-specific all-done illustration. Used by the Transaction Categorization
12
+ * list when an active search/filter yields no matches.
13
+ */
14
+ useNoSearchResultIcon?: boolean;
9
15
  }
10
16
  export default function EmptyTableSection(props: EmptyTableSectionProps): import("react/jsx-runtime").JSX.Element;
11
17
  export {};
@@ -1,6 +1,8 @@
1
1
  import { ReactNode } from 'react';
2
- import { CompletionStatusType, ExpenseAutomationReconciliationViewTab, ExpenseAutomationTransactionsTab, ExpenseAutomationViewType, FetchState, ID, MissingReceiptsTab } from '@zeniai/client-epic-state';
2
+ import { CompletionStatusType, ExpenseAutomationReconciliationViewTab, ExpenseAutomationTransactionsTab, ExpenseAutomationViewType, FetchState, ID, MissingReceiptsTab, TransactionFilterEntityType, TransactionFilters } from '@zeniai/client-epic-state';
3
3
  import { TabSwitcherOption } from '../../common/allNavBars/statusSwitcher/switcherTypes';
4
+ import { AutoCompleteActions, AutoCompleteData } from '../../common/autoComplete/autoCompleteProps';
5
+ import { ValuesDropdownOption } from '../../common/filters/genericFilterTypes';
4
6
  import { JEScheduleMainTab } from '../sections/jeSchedules/jeScheduleConfig';
5
7
  import { ExpenseAutomationNavbarHeaderData } from './navbarHeaderData';
6
8
  interface NavBarWithHeaderProps {
@@ -12,15 +14,30 @@ interface NavBarWithHeaderProps {
12
14
  isZeniUser: boolean;
13
15
  refreshStatus: FetchState;
14
16
  searchText: string;
17
+ selectedEntity: TransactionFilterEntityType;
15
18
  /** Renders below the tab strip (e.g. Missing Receipts bulk upload email + policy). */
16
19
  belowTabsSlot?: ReactNode;
17
20
  completionPercentage?: number;
18
21
  /** Raw progress (0–100) for color bands; falls back to `completionPercentage` when omitted. */
19
22
  completionProgressRaw?: number;
23
+ createdByUserListLoaded?: boolean;
20
24
  currentJeTab?: JEScheduleMainTab;
21
25
  currentMissingReceiptsTab?: MissingReceiptsTab;
22
26
  currentRecontab?: ExpenseAutomationReconciliationViewTab;
23
27
  currentTab?: ExpenseAutomationTransactionsTab;
28
+ filterComponent?: React.ComponentType<{
29
+ entity: TransactionFilterEntityType;
30
+ filters: TransactionFilters;
31
+ /** Memoized dropdown options keyed by category field. Update this when source data populates so dropdowns refresh. */
32
+ categoryWiseOptions?: Record<string, ValuesDropdownOption[]>;
33
+ createdByUserListLoaded?: boolean;
34
+ vendorSearchAutoCompleteActions?: AutoCompleteActions;
35
+ vendorSearchAutoCompleteData?: AutoCompleteData;
36
+ onFiltersChange: (filters: TransactionFilters) => void;
37
+ }>;
38
+ /** Memoized dropdown options keyed by category field. Update this when source data populates so dropdowns refresh. */
39
+ filterOptions?: Record<string, ValuesDropdownOption[]>;
40
+ filters?: TransactionFilters;
24
41
  hideTabSwitcher?: boolean;
25
42
  isAiCfoAccessEnabled?: boolean;
26
43
  isCompletionLoading?: boolean;
@@ -29,6 +46,8 @@ interface NavBarWithHeaderProps {
29
46
  selectedGenericTab?: ID;
30
47
  selectedReconAccountId?: ID;
31
48
  titleStyle?: React.CSSProperties;
49
+ vendorSearchAutoCompleteActions?: AutoCompleteActions;
50
+ vendorSearchAutoCompleteData?: AutoCompleteData;
32
51
  getTabCountAndFetchState: (currentTab: ExpenseAutomationTransactionsTab | ExpenseAutomationReconciliationViewTab | MissingReceiptsTab | JEScheduleMainTab) => {
33
52
  count: number;
34
53
  isFetching: boolean;
@@ -43,6 +62,7 @@ interface NavBarWithHeaderProps {
43
62
  onUpdateTab: (tab: ExpenseAutomationTransactionsTab) => void;
44
63
  onAskAiCfoClick?: () => void;
45
64
  onCommentDrawerClick?: () => void;
65
+ onFiltersChange?: (filters: TransactionFilters) => void;
46
66
  onGenericTabChange?: (tab: TabSwitcherOption) => void;
47
67
  onJeTabUpdate?: (tab: JEScheduleMainTab) => void;
48
68
  onMissingReceiptsTabUpdate?: (tab: MissingReceiptsTab) => void;
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { AttachmentFilePayload, AuthParams, ExpenseAutomationViewSelector, ID, LoggedInUser, SaveExpenseAutomationReconciliationActionType } from '@zeniai/client-epic-state';
2
+ import { AttachmentFilePayload, AuthParams, ExpenseAutomationViewSelector, ID, LoggedInUser, SaveExpenseAutomationReconciliationActionType, TransactionFilters } from '@zeniai/client-epic-state';
3
3
  import { AutoCompleteActions, AutoCompleteData } from '../../common/autoComplete/autoCompleteProps';
4
4
  import { FooterFormIdType } from '../common';
5
5
  import { AccountReconciliationParentPageActionProps } from '../sections/accountRecon/AccountReconciliationPage';
@@ -32,6 +32,7 @@ export interface MonthEndReportPageProps {
32
32
  interface TableSectionProps extends MissingReceiptsListTableActionProps, TransactionCategorizationActionProps, JESchedulePageProps, FluxAnalysisTableProps, AccountReconciliationParentPageActionProps, MonthEndReportPageProps {
33
33
  authParams: AuthParams;
34
34
  expenseAutomationViewSelector: ExpenseAutomationViewSelector;
35
+ filters: TransactionFilters;
35
36
  isAccountingClassesEnabled: boolean;
36
37
  isCOTEnabled: boolean;
37
38
  isProjectsTransactionsEnabled: boolean;
@@ -0,0 +1,8 @@
1
+ import { ValuesDropdownOption } from '../../../common/filters/genericFilterTypes';
2
+ export interface AmountFilterValueFieldProps {
3
+ matchingOperator: string;
4
+ value: (string | number)[];
5
+ onChange: (options: ValuesDropdownOption[]) => void;
6
+ }
7
+ declare const AmountFilterValueField: ({ matchingOperator, value, onChange, }: AmountFilterValueFieldProps) => import("react/jsx-runtime").JSX.Element;
8
+ export default AmountFilterValueField;
@@ -0,0 +1,8 @@
1
+ import { AmountMatchingOperatorOption } from './amountFilterConstants';
2
+ interface AmountMatchingOperatorDropdownProps {
3
+ categoryIndex?: number;
4
+ value?: string;
5
+ onChange: (option: AmountMatchingOperatorOption, categoryIndex?: number) => void;
6
+ }
7
+ declare const AmountMatchingOperatorDropdown: ({ onChange, value, categoryIndex, }: AmountMatchingOperatorDropdownProps) => import("react/jsx-runtime").JSX.Element;
8
+ export default AmountMatchingOperatorDropdown;
@@ -0,0 +1,17 @@
1
+ import { TransactionFilterEntityType, TransactionFilters } from '@zeniai/client-epic-state';
2
+ import { AutoCompleteActions, AutoCompleteData } from '../../../common/autoComplete/autoCompleteProps';
3
+ import { ValuesDropdownOption } from '../../../common/filters/genericFilterTypes';
4
+ export interface TransactionFiltersProps {
5
+ entity: TransactionFilterEntityType;
6
+ filters: TransactionFilters;
7
+ /** Memoized dropdown options keyed by category field. Update this when the source data populates so the dropdowns refresh. */
8
+ categoryWiseOptions?: Record<string, ValuesDropdownOption[]>;
9
+ createdByUserListLoaded?: boolean;
10
+ disableFilters?: boolean;
11
+ transactionsLoaded?: boolean;
12
+ vendorSearchAutoCompleteActions?: AutoCompleteActions;
13
+ vendorSearchAutoCompleteData?: AutoCompleteData;
14
+ onFiltersChange: (filters: TransactionFilters) => void;
15
+ }
16
+ declare const TransactionFiltersComponent: ({ entity, filters, vendorSearchAutoCompleteData, vendorSearchAutoCompleteActions, disableFilters, transactionsLoaded, createdByUserListLoaded, onFiltersChange, categoryWiseOptions, }: TransactionFiltersProps) => import("react/jsx-runtime").JSX.Element;
17
+ export default TransactionFiltersComponent;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Amount filter: operator types and dropdown options for the
3
+ * transaction-categorization Amount filter. Used only by the TC filter UI;
4
+ * not consumed outside this folder.
5
+ */
6
+ type AmountMatchingOperatorValue = "less_than" | "greater_than" | "equal" | "in_between";
7
+ export interface AmountMatchingOperatorOption {
8
+ label: string;
9
+ value: AmountMatchingOperatorValue;
10
+ }
11
+ export declare const getAmountMatchingOperatorOptions: (labels: {
12
+ greaterThan: string;
13
+ inBetween: string;
14
+ isEqual: string;
15
+ lessThan: string;
16
+ }) => AmountMatchingOperatorOption[];
17
+ export declare const isAmountMatchingOperator: (value: string) => value is AmountMatchingOperatorValue;
18
+ export declare const DEFAULT_AMOUNT_MATCHING_OPERATOR: AmountMatchingOperatorValue;
19
+ export {};
@@ -0,0 +1,24 @@
1
+ import { MatchingOperatorDropdownOption, TransactionFilterCategoryDropdownOption, TransactionFilters } from '@zeniai/client-epic-state';
2
+ import { ValuesDropdownOption } from '../../../common/filters/genericFilterTypes';
3
+ export declare const getTransactionFilterCategories: () => TransactionFilterCategoryDropdownOption[];
4
+ export declare const getTransactionFilterCategoryLabel: (key: string) => string;
5
+ export declare const getUpdatedTransactionFiltersOnCategoryChange: ({ currentFilters, selectedOption, categoryIndex, }: {
6
+ currentFilters: TransactionFilters;
7
+ selectedOption: TransactionFilterCategoryDropdownOption;
8
+ categoryIndex?: number;
9
+ }) => TransactionFilters;
10
+ export declare const getUpdatedTransactionFiltersOnMatchingOperatorChange: ({ currentFilters, selectedOption, categoryIndex, }: {
11
+ currentFilters: TransactionFilters;
12
+ selectedOption: MatchingOperatorDropdownOption | {
13
+ label: string;
14
+ value: string;
15
+ };
16
+ categoryIndex?: number;
17
+ }) => TransactionFilters;
18
+ export declare const getUpdatedTransactionFiltersOnValueChange: ({ categoryIndex, currentFilters, selectedOptions, }: {
19
+ categoryIndex: number;
20
+ currentFilters: TransactionFilters;
21
+ selectedOptions: ValuesDropdownOption[];
22
+ }) => TransactionFilters;
23
+ export declare const getTransactionAppliedFiltersCount: (filters: TransactionFilters) => number;
24
+ export declare const hasActiveSearchOrFilters: (searchString: string, filters: TransactionFilters) => boolean;
@@ -1,6 +1,6 @@
1
1
  import { ExpenseAutomationReconciliationViewTab, ExpenseAutomationTransactionsTab, ExpenseAutomationViewType, ID, MissingReceiptsTab } from '@zeniai/client-epic-state';
2
2
  import { JEScheduleMainTab } from '../sections/jeSchedules/jeScheduleConfig';
3
- declare const toRightOptionType: (v: string) => "search" | "close" | "comment" | "refresh" | "commentDrawer" | "askAiCfo";
3
+ declare const toRightOptionType: (v: string) => "search" | "close" | "filter" | "comment" | "refresh" | "commentDrawer" | "askAiCfo";
4
4
  type RightSection = ReturnType<typeof toRightOptionType>;
5
5
  declare const toLeftOptionType: (v: string) => "back";
6
6
  type LeftSection = ReturnType<typeof toLeftOptionType>;
@@ -35,7 +35,7 @@ export interface ExpenseAutomationNavbarHeaderData {
35
35
  title: string;
36
36
  subText?: string;
37
37
  }
38
- export declare const getNavBarHeaderData: (expenseAutomationViewType: ExpenseAutomationViewType, autoCategorizedTransactionNumber?: number, accountId?: ID, customTitle?: string, navBarSubText?: string,
38
+ export declare const getNavBarHeaderData: (expenseAutomationViewType: ExpenseAutomationViewType, autoCategorizedTransactionNumber?: number, accountId?: ID, customTitle?: string, navBarSubText?: string, currentTab?: ExpenseAutomationTransactionsTab, isSearchAndFilterEnabled?: boolean,
39
39
  /** When `{ includeBulkUploadTabs: false }` (bulk upload / feature off), no sub-tabs — original subtitle only. */
40
40
  missingReceiptsOptions?: {
41
41
  includeBulkUploadTabs?: boolean;