zaravand-ui 7.0.1 → 7.0.2

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 (56) hide show
  1. package/dist/components/Dialog/Dialog.cjs +1 -1
  2. package/dist/components/Dialog/Dialog.js +1 -1
  3. package/dist/components/Select/Select.cjs +1 -1
  4. package/dist/components/Select/Select.d.cts +4 -1
  5. package/dist/components/Select/Select.d.ts +4 -1
  6. package/dist/components/Select/Select.interface.d.cts +15 -1
  7. package/dist/components/Select/Select.interface.d.ts +15 -1
  8. package/dist/components/Select/Select.js +697 -566
  9. package/dist/components/Table/Table.cjs +1 -1
  10. package/dist/components/Table/Table.constants.cjs +1 -1
  11. package/dist/components/Table/Table.constants.d.cts +1 -0
  12. package/dist/components/Table/Table.constants.d.ts +1 -0
  13. package/dist/components/Table/Table.constants.js +2 -2
  14. package/dist/components/Table/Table.interface.d.cts +39 -0
  15. package/dist/components/Table/Table.interface.d.ts +39 -0
  16. package/dist/components/Table/Table.js +448 -371
  17. package/dist/components/Table/Table.utils.cjs +1 -1
  18. package/dist/components/Table/Table.utils.d.cts +10 -1
  19. package/dist/components/Table/Table.utils.d.ts +10 -1
  20. package/dist/components/Table/Table.utils.js +23 -1
  21. package/dist/components/Table/Table.variant.cjs +1 -1
  22. package/dist/components/Table/Table.variant.d.cts +5 -0
  23. package/dist/components/Table/Table.variant.d.ts +5 -0
  24. package/dist/components/Table/Table.variant.js +17 -11
  25. package/dist/components/Table/TableActiveFilters.cjs +1 -0
  26. package/dist/components/Table/TableActiveFilters.d.cts +12 -0
  27. package/dist/components/Table/TableActiveFilters.d.ts +12 -0
  28. package/dist/components/Table/TableActiveFilters.js +55 -0
  29. package/dist/components/Table/TableColumnFilter.cjs +1 -0
  30. package/dist/components/Table/TableColumnFilter.d.cts +17 -0
  31. package/dist/components/Table/TableColumnFilter.d.ts +17 -0
  32. package/dist/components/Table/TableColumnFilter.js +70 -0
  33. package/dist/components/Table/TableEmptyState.cjs +1 -1
  34. package/dist/components/Table/TableEmptyState.d.cts +1 -1
  35. package/dist/components/Table/TableEmptyState.d.ts +1 -1
  36. package/dist/components/Table/TableEmptyState.js +16 -7
  37. package/dist/components/Table/TableSkeletonRows.cjs +1 -1
  38. package/dist/components/Table/TableSkeletonRows.js +7 -7
  39. package/dist/components/Table/TableSortToggle.cjs +1 -1
  40. package/dist/components/Table/TableSortToggle.js +8 -8
  41. package/dist/components/Table/hooks/useTableFilter.cjs +1 -0
  42. package/dist/components/Table/hooks/useTableFilter.d.cts +18 -0
  43. package/dist/components/Table/hooks/useTableFilter.d.ts +18 -0
  44. package/dist/components/Table/hooks/useTableFilter.js +49 -0
  45. package/dist/components/Uploader/Uploader.variant.cjs +1 -1
  46. package/dist/components/Uploader/Uploader.variant.d.cts +1 -1
  47. package/dist/components/Uploader/Uploader.variant.d.ts +1 -1
  48. package/dist/components/Uploader/Uploader.variant.js +1 -1
  49. package/dist/config/messages.cjs +1 -1
  50. package/dist/config/messages.d.cts +4 -0
  51. package/dist/config/messages.d.ts +4 -0
  52. package/dist/config/messages.js +10 -2
  53. package/dist/index.css +1 -1
  54. package/dist/index.d.cts +1 -1
  55. package/dist/index.d.ts +1 -1
  56. package/package.json +2 -1
@@ -1 +1 @@
1
- const e=require(`../../services/convertToEnglishDigits/convertToEnglishDigits.cjs`),t=require(`../../services/localizeDigits/localizeDigits.cjs`);var n=96,r=56,i=16,a=/^(\d*\.?\d+)\s*(px|%|rem|em)?$/i;function o(){if(typeof window>`u`||typeof document>`u`)return i;let e=Number.parseFloat(window.getComputedStyle(document.documentElement).fontSize);return Number.isFinite(e)&&e>0?e:i}function s(e){if(typeof e==`number`)return Number.isFinite(e)&&e>0?{kind:`weight`,value:e}:{kind:`weight`,value:n};let t=typeof e==`string`?e.trim().match(a):null,r=t?Number.parseFloat(t[1]):NaN;if(!t||!Number.isFinite(r)||r<=0)return{kind:`weight`,value:n};let i=(t[2]??`px`).toLowerCase();return i===`%`?{kind:`percent`,value:r}:i===`rem`||i===`em`?{kind:`weight`,value:r*o()}:{kind:`weight`,value:r}}function c(e,t,n){let i=n?{width:`112px`,minWidth:`112px`}:void 0;if(e.length===0&&!t)return{rowNumberColumnStyle:void 0,columnStyleByKey:{},actionsColumnStyle:i};let a=t?r:0,o=e.map(e=>s(e.width)),c=o.reduce((e,t)=>t.kind===`percent`?e+t.value:e,0),l=c>100?100/c:1,u=Math.max(0,100-c*l),d=a+o.reduce((e,t)=>t.kind===`weight`?e+t.value:e,0),f=e=>d>0?e/d*u:0,p=e=>({width:`${e.toFixed(4)}%`}),m=Object.fromEntries(e.map((e,t)=>{let n=o[t],r=n.kind===`percent`?n.value*l:f(n.value);return[e.key,p(r)]}));return{rowNumberColumnStyle:t?p(f(a)):void 0,columnStyleByKey:m,actionsColumnStyle:i}}function l(e,t){return typeof e==`number`&&Number.isFinite(e)&&e>0?Math.min(12,Math.max(1,Math.floor(e))):t>0?Math.min(12,t):6}function u(e,t){let n=t%3;return e.type===`checkbox`?`zui:size-4`:e.type===`number`||e.type===`money`?n===0?`zui:h-4 zui:w-16`:n===1?`zui:h-4 zui:w-12`:`zui:h-4 zui:w-20`:e.type===`date`?n===0?`zui:h-4 zui:w-28`:n===1?`zui:h-4 zui:w-24`:`zui:h-4 zui:w-32`:e.type===`textarea`?n===0?`zui:h-4 zui:w-[92%]`:n===1?`zui:h-4 zui:w-[76%]`:`zui:h-4 zui:w-[84%]`:n===0?`zui:h-4 zui:w-[78%]`:n===1?`zui:h-4 zui:w-[62%]`:`zui:h-4 zui:w-[86%]`}function d(e){return e==null?!0:typeof e==`string`?e.trim().length===0:!1}function f(e){if(typeof e==`number`)return Number.isFinite(e)?e:null;if(typeof e==`string`){let t=e.replace(/,/g,``).trim();if(t.length===0)return null;let n=Number(t);return Number.isFinite(n)?n:null}return null}function p(e){return e.toLocaleString(`en-US`)}function m(e){if(e instanceof Date&&!Number.isNaN(e.getTime()))return e;if(typeof e==`string`&&e.trim().length>0){let t=new Date(e);if(!Number.isNaN(t.getTime()))return t}return null}function h(e){return typeof e.placeholder==`string`&&e.placeholder.trim().length>0?e.placeholder:`---`}function g(e){return typeof e.displayPlaceholder==`string`&&e.displayPlaceholder.trim().length>0?e.displayPlaceholder:h(e)}function _(e,t){if(t.type!==`select`&&t.type!==`radio`||!Array.isArray(t.options)||t.options.length===0)return null;let n=String(e).trim();if(n.length===0)return null;let r=t.options.find(e=>e.value.trim()===n);if(r){let e=r.label.trim();return e.length>0?e:null}let i=e=>{let t=e.trim().toLocaleLowerCase();return/^[0-9a-f-]+$/i.test(t)?t.replaceAll(`-`,``):t},a=n.toLocaleLowerCase(),o=t.options.find(e=>e.value.trim().toLocaleLowerCase()===a);if(o){let e=o.label.trim();return e.length>0?e:null}let s=i(n),c=t.options.find(e=>i(e.value)===s);if(!c)return null;let l=c.label.trim();return l.length>0?l:null}var v=new Map;function y(e){let t=v.get(e);return t||(t=new Intl.DateTimeFormat(`${e}-u-ca-persian`,{dateStyle:`medium`}),v.set(e,t)),t}function b(t,n,{messages:r}){if(d(t))return g(n);if(n.type===`checkbox`)return t===!0?r.common.yes:r.common.no;if(n.type===`date`){let i=m(t);return i?e.convertToEnglishDigits({value:y(r.calendar.locale).format(i)}):g(n)}if(n.type===`money`){let e=f(t);return e===null?g(n):p(e)}return typeof t==`string`||typeof t==`number`?_(t,n)||(n.type===`select`&&n.optionsSource?g(n):String(t)):g(n)}function x(e,n,r){return t.localizeDigits(b(e,n,r),r.digits)}function S(e,t,n){if(typeof n!=`function`)return;let r=n(e,t);if(typeof r==`number`)return Number.isFinite(r)?r:void 0;if(typeof r==`string`){let e=r.trim();return e.length>0?e:void 0}}function C(e,t,n,r){if(n!==void 0&&typeof r==`function`){let t=e.findIndex((e,t)=>S(e,t,r)===n);if(t>=0)return t}return t>=0&&t<e.length?t:-1}function w(e,t){if(d(e))return t.type===`number`||t.type===`money`||t.type===`date`?-1/0:``;if(t.type===`number`||t.type===`money`)return f(e)??-1/0;if(t.type===`date`){let t=m(e);return t?t.getTime():-1/0}return typeof e==`number`?e:String(e)}function T(e,t,n,r){let i=w(e[n.key],n),a=w(t[n.key],n),o=typeof i==`number`&&typeof a==`number`?i-a:String(i).localeCompare(String(a),`fa`);return r===`asc`?o:-o}function E(e,t){return e?.sortKey===t?e.direction===`asc`?{sortKey:t,direction:`desc`}:null:{sortKey:t,direction:`asc`}}function D(e){return e===`asc`?`ascending`:e===`desc`?`descending`:`none`}function O(e,t,n){return t===`asc`?`${n.sortBy} ${e} (${n.sortDescending})`:t===`desc`?`${n.sortClear} ${e} (${n.sortDefault})`:`${n.sortBy} ${e} (${n.sortAscending})`}function k(e,t,n,r,i){let a=C(e,t,n,r);if(a<0)return e;let o=[...e];return o[a]=i,o}exports.compareTableRowsByColumn=T,exports.formatCellValue=x,exports.replaceRowByIdentifier=k,exports.resolveAriaSort=D,exports.resolveColumnWidthPercentages=c,exports.resolveLoadingCellSkeletonClassName=u,exports.resolveLoadingRowsCount=l,exports.resolveNextSort=E,exports.resolvePlaceholder=h,exports.resolveSafeRowId=S,exports.resolveSortToggleTooltipText=O;
1
+ const e=require(`../../services/convertToEnglishDigits/convertToEnglishDigits.cjs`),t=require(`../../services/localizeDigits/localizeDigits.cjs`);var n=96,r=56,i=16,a=/^(\d*\.?\d+)\s*(px|%|rem|em)?$/i;function o(){if(typeof window>`u`||typeof document>`u`)return i;let e=Number.parseFloat(window.getComputedStyle(document.documentElement).fontSize);return Number.isFinite(e)&&e>0?e:i}function s(e){if(typeof e==`number`)return Number.isFinite(e)&&e>0?{kind:`weight`,value:e}:{kind:`weight`,value:n};let t=typeof e==`string`?e.trim().match(a):null,r=t?Number.parseFloat(t[1]):NaN;if(!t||!Number.isFinite(r)||r<=0)return{kind:`weight`,value:n};let i=(t[2]??`px`).toLowerCase();return i===`%`?{kind:`percent`,value:r}:i===`rem`||i===`em`?{kind:`weight`,value:r*o()}:{kind:`weight`,value:r}}function c(e,t,n){let i=n?{width:`112px`,minWidth:`112px`}:void 0;if(e.length===0&&!t)return{rowNumberColumnStyle:void 0,columnStyleByKey:{},actionsColumnStyle:i};let a=t?r:0,o=e.map(e=>s(e.width)),c=o.reduce((e,t)=>t.kind===`percent`?e+t.value:e,0),l=c>100?100/c:1,u=Math.max(0,100-c*l),d=a+o.reduce((e,t)=>t.kind===`weight`?e+t.value:e,0),f=e=>d>0?e/d*u:0,p=e=>({width:`${e.toFixed(4)}%`}),m=Object.fromEntries(e.map((e,t)=>{let n=o[t],r=n.kind===`percent`?n.value*l:f(n.value);return[e.key,p(r)]}));return{rowNumberColumnStyle:t?p(f(a)):void 0,columnStyleByKey:m,actionsColumnStyle:i}}function l(e,t){return typeof e==`number`&&Number.isFinite(e)&&e>0?Math.min(12,Math.max(1,Math.floor(e))):t>0?Math.min(12,t):6}function u(e,t){let n=t%3;return e.type===`checkbox`?`zui:size-4`:e.type===`number`||e.type===`money`?n===0?`zui:h-4 zui:w-16`:n===1?`zui:h-4 zui:w-12`:`zui:h-4 zui:w-20`:e.type===`date`?n===0?`zui:h-4 zui:w-28`:n===1?`zui:h-4 zui:w-24`:`zui:h-4 zui:w-32`:e.type===`textarea`?n===0?`zui:h-4 zui:w-[92%]`:n===1?`zui:h-4 zui:w-[76%]`:`zui:h-4 zui:w-[84%]`:n===0?`zui:h-4 zui:w-[78%]`:n===1?`zui:h-4 zui:w-[62%]`:`zui:h-4 zui:w-[86%]`}function d(e){return e==null?!0:typeof e==`string`?e.trim().length===0:!1}function f(e){if(typeof e==`number`)return Number.isFinite(e)?e:null;if(typeof e==`string`){let t=e.replace(/,/g,``).trim();if(t.length===0)return null;let n=Number(t);return Number.isFinite(n)?n:null}return null}function p(e){return e.toLocaleString(`en-US`)}function m(e){if(e instanceof Date&&!Number.isNaN(e.getTime()))return e;if(typeof e==`string`&&e.trim().length>0){let t=new Date(e);if(!Number.isNaN(t.getTime()))return t}return null}function h(e){return typeof e.placeholder==`string`&&e.placeholder.trim().length>0?e.placeholder:`---`}function g(e){return typeof e.displayPlaceholder==`string`&&e.displayPlaceholder.trim().length>0?e.displayPlaceholder:h(e)}function _(e,t){if(t.type!==`select`&&t.type!==`radio`||!Array.isArray(t.options)||t.options.length===0)return null;let n=String(e).trim();if(n.length===0)return null;let r=t.options.find(e=>e.value.trim()===n);if(r){let e=r.label.trim();return e.length>0?e:null}let i=e=>{let t=e.trim().toLocaleLowerCase();return/^[0-9a-f-]+$/i.test(t)?t.replaceAll(`-`,``):t},a=n.toLocaleLowerCase(),o=t.options.find(e=>e.value.trim().toLocaleLowerCase()===a);if(o){let e=o.label.trim();return e.length>0?e:null}let s=i(n),c=t.options.find(e=>i(e.value)===s);if(!c)return null;let l=c.label.trim();return l.length>0?l:null}var v=new Map;function y(e){let t=v.get(e);return t||(t=new Intl.DateTimeFormat(`${e}-u-ca-persian`,{dateStyle:`medium`}),v.set(e,t)),t}function b(t,n,{messages:r}){if(d(t))return g(n);if(n.type===`checkbox`)return t===!0?r.common.yes:r.common.no;if(n.type===`date`){let i=m(t);return i?e.convertToEnglishDigits({value:y(r.calendar.locale).format(i)}):g(n)}if(n.type===`money`){let e=f(t);return e===null?g(n):p(e)}return typeof t==`string`||typeof t==`number`?_(t,n)||(n.type===`select`&&n.optionsSource?g(n):String(t)):g(n)}function x(e,n,r){return t.localizeDigits(b(e,n,r),r.digits)}function S(e,t,n){if(typeof n!=`function`)return;let r=n(e,t);if(typeof r==`number`)return Number.isFinite(r)?r:void 0;if(typeof r==`string`){let e=r.trim();return e.length>0?e:void 0}}function C(e,t,n,r){if(n!==void 0&&typeof r==`function`){let t=e.findIndex((e,t)=>S(e,t,r)===n);if(t>=0)return t}return t>=0&&t<e.length?t:-1}function w(e,t){if(d(e))return t.type===`number`||t.type===`money`||t.type===`date`?-1/0:``;if(t.type===`number`||t.type===`money`)return f(e)??-1/0;if(t.type===`date`){let t=m(e);return t?t.getTime():-1/0}return typeof e==`number`?e:String(e)}function T(e,t,n,r){let i=w(e[n.key],n),a=w(t[n.key],n),o=typeof i==`number`&&typeof a==`number`?i-a:String(i).localeCompare(String(a),`fa`);return r===`asc`?o:-o}function E(e,t){return e?.sortKey===t?e.direction===`asc`?{sortKey:t,direction:`desc`}:null:{sortKey:t,direction:`asc`}}function D(e){return e===`asc`?`ascending`:e===`desc`?`descending`:`none`}function O(e,t,n){return t===`asc`?`${n.sortBy} ${e} (${n.sortDescending})`:t===`desc`?`${n.sortClear} ${e} (${n.sortDefault})`:`${n.sortBy} ${e} (${n.sortAscending})`}function k(e,t,n,r,i){let a=C(e,t,n,r);if(a<0)return e;let o=[...e];return o[a]=i,o}function A(e){return e===void 0||e.length===0}function j(e,t){return e.map(e=>t.find(t=>t.value===e)?.label??e).join(`, `)}function M(e,t,n){let r=e[t.key];return n.includes(r==null?``:String(r).trim())}function N(e,t,n){if(Array.isArray(e.options)&&e.options.length>0)return e.options;if(e.optionsSource)return[];let r=new Map;return t.forEach(t=>{let i=t[e.key],a=i==null?``:String(i).trim();a.length>0&&!r.has(a)&&r.set(a,x(i,e,n))}),Array.from(r,([e,t])=>({value:e,label:t})).sort((e,t)=>e.label.localeCompare(t.label,void 0,{numeric:!0}))}exports.compareTableRowsByColumn=T,exports.formatCellValue=x,exports.isEmptyFilterValue=A,exports.replaceRowByIdentifier=k,exports.resolveAriaSort=D,exports.resolveColumnWidthPercentages=c,exports.resolveFilterOptions=N,exports.resolveFilterText=j,exports.resolveLoadingCellSkeletonClassName=u,exports.resolveLoadingRowsCount=l,exports.resolveNextSort=E,exports.resolvePlaceholder=h,exports.resolveSafeRowId=S,exports.resolveSortToggleTooltipText=O,exports.rowMatchesColumnFilter=M;
@@ -1,7 +1,7 @@
1
1
  import type * as React from "react";
2
2
  import type { ZuiMessages } from "../../config/messages.cjs";
3
3
  import { type ZuiDigits } from "../../services/localizeDigits/localizeDigits.cjs";
4
- import type { DynamicTableRow, TableActiveSort, TableRowId, TableRowIdResolver, TableSchemaColumn, TableSortDirection } from "./Table.interface.cjs";
4
+ import type { DynamicTableRow, TableActiveSort, TableFilterValue, TableRowId, TableRowIdResolver, TableSchemaColumn, TableSelectOption, TableSortDirection } from "./Table.interface.cjs";
5
5
  export declare const ACTIONS_COLUMN_WIDTH_PX = 112;
6
6
  export declare function resolveColumnWidthPercentages(visibleColumns: TableSchemaColumn[], shouldShowRowNumbers: boolean, hasRowActions: boolean): {
7
7
  rowNumberColumnStyle: React.CSSProperties | undefined;
@@ -37,3 +37,12 @@ export declare function resolveAriaSort(direction: TableSortDirection | undefine
37
37
  */
38
38
  export declare function resolveSortToggleTooltipText(columnLabel: string, direction: TableSortDirection | undefined, labels: ZuiMessages["table"]): string;
39
39
  export declare function replaceRowByIdentifier(rows: DynamicTableRow[], targetRowIndex: number, targetRowId: TableRowId | undefined, getRowId: TableRowIdResolver | undefined, nextRow: DynamicTableRow): DynamicTableRow[];
40
+ export declare function isEmptyFilterValue(value: TableFilterValue | undefined): boolean;
41
+ /** The chosen values as the filter chips and the phone filter list show them. */
42
+ export declare function resolveFilterText(value: TableFilterValue, options: TableSelectOption[]): string;
43
+ export declare function rowMatchesColumnFilter(row: DynamicTableRow, column: TableSchemaColumn, value: TableFilterValue): boolean;
44
+ /**
45
+ * The options a column filter offers: the column's own `options`, nothing for `optionsSource`
46
+ * (the select loads them), else the distinct values of `data`, shown the way the cells show them.
47
+ */
48
+ export declare function resolveFilterOptions(column: TableSchemaColumn, data: DynamicTableRow[], formatOptions: TableCellFormatOptions): TableSelectOption[];
@@ -1,7 +1,7 @@
1
1
  import type * as React from "react";
2
2
  import type { ZuiMessages } from "../../config/messages.js";
3
3
  import { type ZuiDigits } from "../../services/localizeDigits/localizeDigits.js";
4
- import type { DynamicTableRow, TableActiveSort, TableRowId, TableRowIdResolver, TableSchemaColumn, TableSortDirection } from "./Table.interface.js";
4
+ import type { DynamicTableRow, TableActiveSort, TableFilterValue, TableRowId, TableRowIdResolver, TableSchemaColumn, TableSelectOption, TableSortDirection } from "./Table.interface.js";
5
5
  export declare const ACTIONS_COLUMN_WIDTH_PX = 112;
6
6
  export declare function resolveColumnWidthPercentages(visibleColumns: TableSchemaColumn[], shouldShowRowNumbers: boolean, hasRowActions: boolean): {
7
7
  rowNumberColumnStyle: React.CSSProperties | undefined;
@@ -37,3 +37,12 @@ export declare function resolveAriaSort(direction: TableSortDirection | undefine
37
37
  */
38
38
  export declare function resolveSortToggleTooltipText(columnLabel: string, direction: TableSortDirection | undefined, labels: ZuiMessages["table"]): string;
39
39
  export declare function replaceRowByIdentifier(rows: DynamicTableRow[], targetRowIndex: number, targetRowId: TableRowId | undefined, getRowId: TableRowIdResolver | undefined, nextRow: DynamicTableRow): DynamicTableRow[];
40
+ export declare function isEmptyFilterValue(value: TableFilterValue | undefined): boolean;
41
+ /** The chosen values as the filter chips and the phone filter list show them. */
42
+ export declare function resolveFilterText(value: TableFilterValue, options: TableSelectOption[]): string;
43
+ export declare function rowMatchesColumnFilter(row: DynamicTableRow, column: TableSchemaColumn, value: TableFilterValue): boolean;
44
+ /**
45
+ * The options a column filter offers: the column's own `options`, nothing for `optionsSource`
46
+ * (the select loads them), else the distinct values of `data`, shown the way the cells show them.
47
+ */
48
+ export declare function resolveFilterOptions(column: TableSchemaColumn, data: DynamicTableRow[], formatOptions: TableCellFormatOptions): TableSelectOption[];
@@ -182,5 +182,27 @@ function k(e, t, n, r, i) {
182
182
  let o = [...e];
183
183
  return o[a] = i, o;
184
184
  }
185
+ function A(e) {
186
+ return e === void 0 || e.length === 0;
187
+ }
188
+ function j(e, t) {
189
+ return e.map((e) => t.find((t) => t.value === e)?.label ?? e).join(", ");
190
+ }
191
+ function M(e, t, n) {
192
+ let r = e[t.key];
193
+ return n.includes(r == null ? "" : String(r).trim());
194
+ }
195
+ function N(e, t, n) {
196
+ if (Array.isArray(e.options) && e.options.length > 0) return e.options;
197
+ if (e.optionsSource) return [];
198
+ let r = /* @__PURE__ */ new Map();
199
+ return t.forEach((t) => {
200
+ let i = t[e.key], a = i == null ? "" : String(i).trim();
201
+ a.length > 0 && !r.has(a) && r.set(a, x(i, e, n));
202
+ }), Array.from(r, ([e, t]) => ({
203
+ value: e,
204
+ label: t
205
+ })).sort((e, t) => e.label.localeCompare(t.label, void 0, { numeric: !0 }));
206
+ }
185
207
  //#endregion
186
- export { T as compareTableRowsByColumn, x as formatCellValue, k as replaceRowByIdentifier, D as resolveAriaSort, c as resolveColumnWidthPercentages, u as resolveLoadingCellSkeletonClassName, l as resolveLoadingRowsCount, E as resolveNextSort, h as resolvePlaceholder, S as resolveSafeRowId, O as resolveSortToggleTooltipText };
208
+ export { T as compareTableRowsByColumn, x as formatCellValue, A as isEmptyFilterValue, k as replaceRowByIdentifier, D as resolveAriaSort, c as resolveColumnWidthPercentages, N as resolveFilterOptions, j as resolveFilterText, u as resolveLoadingCellSkeletonClassName, l as resolveLoadingRowsCount, E as resolveNextSort, h as resolvePlaceholder, S as resolveSafeRowId, O as resolveSortToggleTooltipText, M as rowMatchesColumnFilter };
@@ -1 +1 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../shared/responsiveScale.cjs`);let t=require(`class-variance-authority`);var n=(0,t.cva)(`zui:relative zui:w-full zui:min-w-0 zui:overflow-hidden zui:p-1.25`),r=(0,t.cva)(`zui:w-full zui:table-fixed ${e.TABLE_TEXT_SIZE}`,{variants:{showColumnBorder:{true:`zui:[&_th]:border-e zui:[&_td]:border-e zui:[&_th]:border-[var(--zui-theme-border-default)] zui:[&_td]:border-[var(--zui-theme-border-default)] zui:[&_tr>*:last-child]:border-e-0`,false:``},showRowBorder:{true:`zui:[&_tbody_tr>*]:border-b zui:[&_tbody_tr>*]:border-[var(--zui-theme-border-default)] zui:[&_tbody_tr:last-child>*]:border-b-0`,false:``}},defaultVariants:{showColumnBorder:!1,showRowBorder:!1}}),i=(0,t.cva)(``),a=(0,t.cva)(`zui:[&>tr:first-child>td]:pt-5 zui:[&>tr:nth-child(odd)>td]:bg-[var(--zui-color-muted-surface)] zui:[&>tr:nth-child(even)>td]:bg-[var(--zui-color-surface)]`),o=(0,t.cva)(`zui:bg-[var(--zui-color-surface)] zui:font-medium zui:text-[var(--zui-color-text)]`),s=(0,t.cva)(`zui:cursor-default`),c={start:`zui:text-start`,center:`zui:text-center`,end:`zui:text-end`},l=(0,t.cva)(`zui:relative ${e.TABLE_HEADER_HEIGHT} zui:whitespace-normal zui:break-words zui:bg-[var(--zui-color-primary)] ${e.CONTROL_PADDING_X} zui:align-middle zui:font-medium zui:text-[var(--zui-color-surface)] zui:[&:has([role=checkbox])]:ps-0 zui:[&>[role=checkbox]]:translate-y-[2px]`,{variants:{align:c},defaultVariants:{align:`start`}}),u=(0,t.cva)(`zui:inline-flex zui:shrink-0 zui:cursor-pointer zui:items-center zui:justify-center zui:border-0 zui:bg-transparent zui:px-1.5 zui:py-1 zui:text-[var(--zui-color-surface)] zui:outline-none`),d=(0,t.cva)(`zui:transition-opacity zui:duration-200 zui:ease-out`,{variants:{emphasis:{highlighted:`zui:opacity-100`,idle:`zui:opacity-55`,dimmed:`zui:opacity-25`}},defaultVariants:{emphasis:`idle`}}),f=(0,t.cva)(`${e.CONTROL_PADDING_X} ${e.CONTROL_PADDING_Y} zui:whitespace-normal zui:break-words zui:align-middle zui:text-[var(--zui-color-text)] zui:[&:has([role=checkbox])]:ps-0 zui:[&>[role=checkbox]]:translate-y-[2px]`,{variants:{align:c},defaultVariants:{align:`start`}});exports.tableBodyVariants=a,exports.tableCellVariants=f,exports.tableContainerVariants=n,exports.tableFooterVariants=o,exports.tableHeadVariants=l,exports.tableHeaderVariants=i,exports.tableRowVariants=s,exports.tableSortArrowVariants=d,exports.tableSortToggleVariants=u,exports.tableVariants=r;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../shared/responsiveScale.cjs`);let t=require(`class-variance-authority`);var n=(0,t.cva)(`zui:relative zui:w-full zui:min-w-0 zui:overflow-hidden zui:p-1.25`),r=(0,t.cva)(`zui:w-full zui:table-fixed ${e.TABLE_TEXT_SIZE}`,{variants:{showColumnBorder:{true:`zui:[&_th]:border-e zui:[&_td]:border-e zui:[&_th]:border-[var(--zui-theme-border-default)] zui:[&_td]:border-[var(--zui-theme-border-default)] zui:[&_tr>*:last-child]:border-e-0`,false:``},showRowBorder:{true:`zui:[&_tbody_tr>*]:border-b zui:[&_tbody_tr>*]:border-[var(--zui-theme-border-default)] zui:[&_tbody_tr:last-child>*]:border-b-0`,false:``}},defaultVariants:{showColumnBorder:!1,showRowBorder:!1}}),i=(0,t.cva)(``),a=(0,t.cva)(`zui:[&>tr:first-child>td]:pt-5 zui:[&>tr:nth-child(odd)>td]:bg-[var(--zui-color-muted-surface)] zui:[&>tr:nth-child(even)>td]:bg-[var(--zui-color-surface)]`),o=(0,t.cva)(`zui:bg-[var(--zui-color-surface)] zui:font-medium zui:text-[var(--zui-color-text)]`),s=(0,t.cva)(`zui:cursor-default`),c={start:`zui:text-start`,center:`zui:text-center`,end:`zui:text-end`},l=(0,t.cva)(`zui:relative ${e.TABLE_HEADER_HEIGHT} zui:whitespace-normal zui:break-words zui:bg-[var(--zui-color-primary)] ${e.CONTROL_PADDING_X} zui:align-middle zui:font-medium zui:text-[var(--zui-color-surface)] zui:[&:has([role=checkbox])]:ps-0 zui:[&>[role=checkbox]]:translate-y-[2px]`,{variants:{align:c},defaultVariants:{align:`start`}}),u=(0,t.cva)(`zui:inline-flex zui:shrink-0 zui:cursor-pointer zui:items-center zui:justify-center zui:border-0 zui:bg-transparent zui:px-1.5 zui:py-1 zui:text-[var(--zui-color-surface)] zui:outline-none`),d=(0,t.cva)(`zui:transition-opacity zui:duration-200 zui:ease-out`,{variants:{emphasis:{highlighted:`zui:opacity-100`,idle:`zui:opacity-55`,dimmed:`zui:opacity-25`}},defaultVariants:{emphasis:`idle`}}),f=(0,t.cva)(`${e.CONTROL_PADDING_X} ${e.CONTROL_PADDING_Y} zui:whitespace-normal zui:break-words zui:align-middle zui:text-[var(--zui-color-text)] zui:[&:has([role=checkbox])]:ps-0 zui:[&>[role=checkbox]]:translate-y-[2px]`,{variants:{align:c},defaultVariants:{align:`start`}}),p=(0,t.cva)(`zui:relative zui:inline-flex zui:shrink-0 zui:cursor-pointer zui:items-center zui:justify-center zui:rounded-md zui:border-0 zui:p-1 zui:text-[var(--zui-color-surface)] zui:outline-none zui:transition-[opacity,background-color] zui:duration-200 zui:hover:bg-[color-mix(in_srgb,var(--zui-color-surface)_20%,transparent)] zui:focus-visible:ring-2 zui:focus-visible:ring-[var(--zui-theme-action-secondary)]`,{variants:{active:{true:`zui:bg-[color-mix(in_srgb,var(--zui-color-surface)_24%,transparent)] zui:opacity-100`,false:`zui:bg-transparent zui:opacity-85 zui:hover:opacity-100`}},defaultVariants:{active:!1}}),m=`zui:inline-flex zui:max-w-full zui:items-center zui:gap-1 zui-radius-xs zui:border zui:border-[var(--zui-theme-action-primary)] zui:bg-transparent zui:ps-3 zui:pe-1.5 zui:text-base zui:text-[var(--zui-color-text)] zui:md:text-sm zui:mobile:shrink-0 zui:duration-200 zui:animate-in zui:fade-in-0 zui:zoom-in-95 ${e.CONTROL_HEIGHT_SM}`,h=`zui:inline-flex zui:shrink-0 zui:cursor-pointer zui:items-center zui:justify-center zui:rounded-full zui:border-0 zui:bg-transparent zui:p-0.5 zui:text-[var(--zui-color-text)] zui:opacity-70 zui:outline-none zui:transition-colors zui:hover:bg-[var(--zui-color-muted-surface)] zui:hover:opacity-100 zui:focus-visible:opacity-100 zui:focus-visible:ring-2 zui:focus-visible:ring-[var(--zui-theme-action-secondary)]`;exports.tableActiveFilterChipClassName=m,exports.tableActiveFilterRemoveClassName=h,exports.tableBodyVariants=a,exports.tableCellVariants=f,exports.tableContainerVariants=n,exports.tableFilterToggleVariants=p,exports.tableFooterVariants=o,exports.tableHeadVariants=l,exports.tableHeaderVariants=i,exports.tableRowVariants=s,exports.tableSortArrowVariants=d,exports.tableSortToggleVariants=u,exports.tableVariants=r;
@@ -17,3 +17,8 @@ export declare const tableSortArrowVariants: (props?: ({
17
17
  export declare const tableCellVariants: (props?: ({
18
18
  align?: "end" | "start" | "center" | null | undefined;
19
19
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
20
+ export declare const tableFilterToggleVariants: (props?: ({
21
+ active?: boolean | null | undefined;
22
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
23
+ export declare const tableActiveFilterChipClassName = "zui:inline-flex zui:max-w-full zui:items-center zui:gap-1 zui-radius-xs zui:border zui:border-[var(--zui-theme-action-primary)] zui:bg-transparent zui:ps-3 zui:pe-1.5 zui:text-base zui:text-[var(--zui-color-text)] zui:md:text-sm zui:mobile:shrink-0 zui:duration-200 zui:animate-in zui:fade-in-0 zui:zoom-in-95 zui:h-[calc(var(--zui-scale,10px)*4.608)]";
24
+ export declare const tableActiveFilterRemoveClassName = "zui:inline-flex zui:shrink-0 zui:cursor-pointer zui:items-center zui:justify-center zui:rounded-full zui:border-0 zui:bg-transparent zui:p-0.5 zui:text-[var(--zui-color-text)] zui:opacity-70 zui:outline-none zui:transition-colors zui:hover:bg-[var(--zui-color-muted-surface)] zui:hover:opacity-100 zui:focus-visible:opacity-100 zui:focus-visible:ring-2 zui:focus-visible:ring-[var(--zui-theme-action-secondary)]";
@@ -17,3 +17,8 @@ export declare const tableSortArrowVariants: (props?: ({
17
17
  export declare const tableCellVariants: (props?: ({
18
18
  align?: "end" | "start" | "center" | null | undefined;
19
19
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
20
+ export declare const tableFilterToggleVariants: (props?: ({
21
+ active?: boolean | null | undefined;
22
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
23
+ export declare const tableActiveFilterChipClassName = "zui:inline-flex zui:max-w-full zui:items-center zui:gap-1 zui-radius-xs zui:border zui:border-[var(--zui-theme-action-primary)] zui:bg-transparent zui:ps-3 zui:pe-1.5 zui:text-base zui:text-[var(--zui-color-text)] zui:md:text-sm zui:mobile:shrink-0 zui:duration-200 zui:animate-in zui:fade-in-0 zui:zoom-in-95 zui:h-[calc(var(--zui-scale,10px)*4.608)]";
24
+ export declare const tableActiveFilterRemoveClassName = "zui:inline-flex zui:shrink-0 zui:cursor-pointer zui:items-center zui:justify-center zui:rounded-full zui:border-0 zui:bg-transparent zui:p-0.5 zui:text-[var(--zui-color-text)] zui:opacity-70 zui:outline-none zui:transition-colors zui:hover:bg-[var(--zui-color-muted-surface)] zui:hover:opacity-100 zui:focus-visible:opacity-100 zui:focus-visible:ring-2 zui:focus-visible:ring-[var(--zui-theme-action-secondary)]";
@@ -1,7 +1,7 @@
1
- import { CONTROL_PADDING_X as e, CONTROL_PADDING_Y as t, TABLE_HEADER_HEIGHT as n, TABLE_TEXT_SIZE as r } from "../shared/responsiveScale.js";
2
- import { cva as i } from "class-variance-authority";
1
+ import { CONTROL_HEIGHT_SM as e, CONTROL_PADDING_X as t, CONTROL_PADDING_Y as n, TABLE_HEADER_HEIGHT as r, TABLE_TEXT_SIZE as i } from "../shared/responsiveScale.js";
2
+ import { cva as a } from "class-variance-authority";
3
3
  //#region src/components/Table/Table.variant.ts
4
- var a = i("zui:relative zui:w-full zui:min-w-0 zui:overflow-hidden zui:p-1.25"), o = i(`zui:w-full zui:table-fixed ${r}`, {
4
+ var o = a("zui:relative zui:w-full zui:min-w-0 zui:overflow-hidden zui:p-1.25"), s = a(`zui:w-full zui:table-fixed ${i}`, {
5
5
  variants: {
6
6
  showColumnBorder: {
7
7
  true: "zui:[&_th]:border-e zui:[&_td]:border-e zui:[&_th]:border-[var(--zui-theme-border-default)] zui:[&_td]:border-[var(--zui-theme-border-default)] zui:[&_tr>*:last-child]:border-e-0",
@@ -16,23 +16,29 @@ var a = i("zui:relative zui:w-full zui:min-w-0 zui:overflow-hidden zui:p-1.25"),
16
16
  showColumnBorder: !1,
17
17
  showRowBorder: !1
18
18
  }
19
- }), s = i(""), c = i("zui:[&>tr:first-child>td]:pt-5 zui:[&>tr:nth-child(odd)>td]:bg-[var(--zui-color-muted-surface)] zui:[&>tr:nth-child(even)>td]:bg-[var(--zui-color-surface)]"), l = i("zui:bg-[var(--zui-color-surface)] zui:font-medium zui:text-[var(--zui-color-text)]"), u = i("zui:cursor-default"), d = {
19
+ }), c = a(""), l = a("zui:[&>tr:first-child>td]:pt-5 zui:[&>tr:nth-child(odd)>td]:bg-[var(--zui-color-muted-surface)] zui:[&>tr:nth-child(even)>td]:bg-[var(--zui-color-surface)]"), u = a("zui:bg-[var(--zui-color-surface)] zui:font-medium zui:text-[var(--zui-color-text)]"), d = a("zui:cursor-default"), f = {
20
20
  start: "zui:text-start",
21
21
  center: "zui:text-center",
22
22
  end: "zui:text-end"
23
- }, f = i(`zui:relative ${n} zui:whitespace-normal zui:break-words zui:bg-[var(--zui-color-primary)] ${e} zui:align-middle zui:font-medium zui:text-[var(--zui-color-surface)] zui:[&:has([role=checkbox])]:ps-0 zui:[&>[role=checkbox]]:translate-y-[2px]`, {
24
- variants: { align: d },
23
+ }, p = a(`zui:relative ${r} zui:whitespace-normal zui:break-words zui:bg-[var(--zui-color-primary)] ${t} zui:align-middle zui:font-medium zui:text-[var(--zui-color-surface)] zui:[&:has([role=checkbox])]:ps-0 zui:[&>[role=checkbox]]:translate-y-[2px]`, {
24
+ variants: { align: f },
25
25
  defaultVariants: { align: "start" }
26
- }), p = i("zui:inline-flex zui:shrink-0 zui:cursor-pointer zui:items-center zui:justify-center zui:border-0 zui:bg-transparent zui:px-1.5 zui:py-1 zui:text-[var(--zui-color-surface)] zui:outline-none"), m = i("zui:transition-opacity zui:duration-200 zui:ease-out", {
26
+ }), m = a("zui:inline-flex zui:shrink-0 zui:cursor-pointer zui:items-center zui:justify-center zui:border-0 zui:bg-transparent zui:px-1.5 zui:py-1 zui:text-[var(--zui-color-surface)] zui:outline-none"), h = a("zui:transition-opacity zui:duration-200 zui:ease-out", {
27
27
  variants: { emphasis: {
28
28
  highlighted: "zui:opacity-100",
29
29
  idle: "zui:opacity-55",
30
30
  dimmed: "zui:opacity-25"
31
31
  } },
32
32
  defaultVariants: { emphasis: "idle" }
33
- }), h = i(`${e} ${t} zui:whitespace-normal zui:break-words zui:align-middle zui:text-[var(--zui-color-text)] zui:[&:has([role=checkbox])]:ps-0 zui:[&>[role=checkbox]]:translate-y-[2px]`, {
34
- variants: { align: d },
33
+ }), g = a(`${t} ${n} zui:whitespace-normal zui:break-words zui:align-middle zui:text-[var(--zui-color-text)] zui:[&:has([role=checkbox])]:ps-0 zui:[&>[role=checkbox]]:translate-y-[2px]`, {
34
+ variants: { align: f },
35
35
  defaultVariants: { align: "start" }
36
- });
36
+ }), _ = a("zui:relative zui:inline-flex zui:shrink-0 zui:cursor-pointer zui:items-center zui:justify-center zui:rounded-md zui:border-0 zui:p-1 zui:text-[var(--zui-color-surface)] zui:outline-none zui:transition-[opacity,background-color] zui:duration-200 zui:hover:bg-[color-mix(in_srgb,var(--zui-color-surface)_20%,transparent)] zui:focus-visible:ring-2 zui:focus-visible:ring-[var(--zui-theme-action-secondary)]", {
37
+ variants: { active: {
38
+ true: "zui:bg-[color-mix(in_srgb,var(--zui-color-surface)_24%,transparent)] zui:opacity-100",
39
+ false: "zui:bg-transparent zui:opacity-85 zui:hover:opacity-100"
40
+ } },
41
+ defaultVariants: { active: !1 }
42
+ }), v = `zui:inline-flex zui:max-w-full zui:items-center zui:gap-1 zui-radius-xs zui:border zui:border-[var(--zui-theme-action-primary)] zui:bg-transparent zui:ps-3 zui:pe-1.5 zui:text-base zui:text-[var(--zui-color-text)] zui:md:text-sm zui:mobile:shrink-0 zui:duration-200 zui:animate-in zui:fade-in-0 zui:zoom-in-95 ${e}`, y = "zui:inline-flex zui:shrink-0 zui:cursor-pointer zui:items-center zui:justify-center zui:rounded-full zui:border-0 zui:bg-transparent zui:p-0.5 zui:text-[var(--zui-color-text)] zui:opacity-70 zui:outline-none zui:transition-colors zui:hover:bg-[var(--zui-color-muted-surface)] zui:hover:opacity-100 zui:focus-visible:opacity-100 zui:focus-visible:ring-2 zui:focus-visible:ring-[var(--zui-theme-action-secondary)]";
37
43
  //#endregion
38
- export { c as tableBodyVariants, h as tableCellVariants, a as tableContainerVariants, l as tableFooterVariants, f as tableHeadVariants, s as tableHeaderVariants, u as tableRowVariants, m as tableSortArrowVariants, p as tableSortToggleVariants, o as tableVariants };
44
+ export { v as tableActiveFilterChipClassName, y as tableActiveFilterRemoveClassName, l as tableBodyVariants, g as tableCellVariants, o as tableContainerVariants, _ as tableFilterToggleVariants, u as tableFooterVariants, p as tableHeadVariants, c as tableHeaderVariants, d as tableRowVariants, h as tableSortArrowVariants, m as tableSortToggleVariants, s as tableVariants };
@@ -0,0 +1 @@
1
+ "use client";require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../config/useZuiConfig.cjs`),t=require(`../../services/localizeDigits/localizeDigits.cjs`),n=require(`../Tooltip/Tooltip.cjs`),r=require(`../shared/FieldClearButton.cjs`),i=require(`./Table.utils.cjs`),a=require(`./Table.variant.cjs`);let o=require(`react/jsx-runtime`),s=require(`lucide-react`);function c({columns:c,values:l,optionsByColumn:u,onRemove:d,onSelect:f}){let{messages:p,digits:m}=e.useZuiConfig(),h=c.flatMap(e=>{let t=l[e.key];return t===void 0||i.isEmptyFilterValue(t)?[]:[{column:e,text:i.resolveFilterText(t,u[e.key]??[])}]});return h.length===0?null:(0,o.jsx)(`div`,{"data-slot":`table-active-filters`,className:`zui:mb-3 zui:flex zui:flex-wrap zui:items-center zui:gap-2 zui:mobile:flex-nowrap zui:mobile:overflow-x-auto zui:mobile:[scrollbar-width:none] zui:mobile:[&::-webkit-scrollbar]:hidden`,children:h.map(({column:e,text:i})=>{let c=`${p.table.filterClear}: ${t.localizeDigits(e.label,m)}`;return(0,o.jsxs)(`span`,{"data-slot":`table-active-filter`,className:a.tableActiveFilterChipClassName,children:[f?(0,o.jsx)(`button`,{type:`button`,"data-slot":`table-active-filter-button`,onClick:()=>f(e.key),className:`zui:min-w-0 zui:cursor-pointer zui:truncate zui:border-0 zui:bg-transparent zui:p-0 zui:text-inherit zui:outline-none`,children:t.localizeDigits(`${e.label}: ${i}`,m)}):(0,o.jsx)(`span`,{className:`zui:min-w-0 zui:truncate`,children:t.localizeDigits(`${e.label}: ${i}`,m)}),(0,o.jsx)(n.default,{text:c,position:`top`,trigger:(0,o.jsx)(`button`,{type:`button`,"aria-label":c,onClick:()=>d(e.key),className:a.tableActiveFilterRemoveClassName,children:(0,o.jsx)(s.X,{className:r.CLEAR_ICON_CLASS,"aria-hidden":`true`})})})]},e.key)})})}exports.default=c;
@@ -0,0 +1,12 @@
1
+ import type { TableFilterValues, TableSchemaColumn, TableSelectOption } from "./Table.interface.cjs";
2
+ type TableActiveFiltersProps = {
3
+ columns: TableSchemaColumn[];
4
+ values: TableFilterValues;
5
+ optionsByColumn: Record<string, TableSelectOption[]>;
6
+ onRemove: (columnKey: string) => void;
7
+ /** Makes the chip itself a button (on phones it reopens that column's filter). */
8
+ onSelect?: (columnKey: string) => void;
9
+ };
10
+ /** The row of chips above the table that lists the active column filters. */
11
+ export default function TableActiveFilters({ columns, values, optionsByColumn, onRemove, onSelect, }: TableActiveFiltersProps): import("react/jsx-runtime").JSX.Element | null;
12
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { TableFilterValues, TableSchemaColumn, TableSelectOption } from "./Table.interface.js";
2
+ type TableActiveFiltersProps = {
3
+ columns: TableSchemaColumn[];
4
+ values: TableFilterValues;
5
+ optionsByColumn: Record<string, TableSelectOption[]>;
6
+ onRemove: (columnKey: string) => void;
7
+ /** Makes the chip itself a button (on phones it reopens that column's filter). */
8
+ onSelect?: (columnKey: string) => void;
9
+ };
10
+ /** The row of chips above the table that lists the active column filters. */
11
+ export default function TableActiveFilters({ columns, values, optionsByColumn, onRemove, onSelect, }: TableActiveFiltersProps): import("react/jsx-runtime").JSX.Element | null;
12
+ export {};
@@ -0,0 +1,55 @@
1
+ "use client";
2
+ import { useZuiConfig as e } from "../../config/useZuiConfig.js";
3
+ import { localizeDigits as t } from "../../services/localizeDigits/localizeDigits.js";
4
+ import n from "../Tooltip/Tooltip.js";
5
+ import { CLEAR_ICON_CLASS as r } from "../shared/FieldClearButton.js";
6
+ import { isEmptyFilterValue as i, resolveFilterText as a } from "./Table.utils.js";
7
+ import { tableActiveFilterChipClassName as o, tableActiveFilterRemoveClassName as s } from "./Table.variant.js";
8
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
9
+ import { X as u } from "lucide-react";
10
+ //#region src/components/Table/TableActiveFilters.tsx
11
+ function d({ columns: d, values: f, optionsByColumn: p, onRemove: m, onSelect: h }) {
12
+ let { messages: g, digits: _ } = e(), v = d.flatMap((e) => {
13
+ let t = f[e.key];
14
+ return t === void 0 || i(t) ? [] : [{
15
+ column: e,
16
+ text: a(t, p[e.key] ?? [])
17
+ }];
18
+ });
19
+ return v.length === 0 ? null : /* @__PURE__ */ c("div", {
20
+ "data-slot": "table-active-filters",
21
+ className: "zui:mb-3 zui:flex zui:flex-wrap zui:items-center zui:gap-2 zui:mobile:flex-nowrap zui:mobile:overflow-x-auto zui:mobile:[scrollbar-width:none] zui:mobile:[&::-webkit-scrollbar]:hidden",
22
+ children: v.map(({ column: e, text: i }) => {
23
+ let a = `${g.table.filterClear}: ${t(e.label, _)}`;
24
+ return /* @__PURE__ */ l("span", {
25
+ "data-slot": "table-active-filter",
26
+ className: o,
27
+ children: [h ? /* @__PURE__ */ c("button", {
28
+ type: "button",
29
+ "data-slot": "table-active-filter-button",
30
+ onClick: () => h(e.key),
31
+ className: "zui:min-w-0 zui:cursor-pointer zui:truncate zui:border-0 zui:bg-transparent zui:p-0 zui:text-inherit zui:outline-none",
32
+ children: t(`${e.label}: ${i}`, _)
33
+ }) : /* @__PURE__ */ c("span", {
34
+ className: "zui:min-w-0 zui:truncate",
35
+ children: t(`${e.label}: ${i}`, _)
36
+ }), /* @__PURE__ */ c(n, {
37
+ text: a,
38
+ position: "top",
39
+ trigger: /* @__PURE__ */ c("button", {
40
+ type: "button",
41
+ "aria-label": a,
42
+ onClick: () => m(e.key),
43
+ className: s,
44
+ children: /* @__PURE__ */ c(u, {
45
+ className: r,
46
+ "aria-hidden": "true"
47
+ })
48
+ })
49
+ })]
50
+ }, e.key);
51
+ })
52
+ });
53
+ }
54
+ //#endregion
55
+ export { d as default };
@@ -0,0 +1 @@
1
+ "use client";require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../config/useZuiConfig.cjs`),t=require(`../../services/localizeDigits/localizeDigits.cjs`),n=require(`../Select/Select.cjs`),r=require(`./Table.constants.cjs`),i=require(`./Table.utils.cjs`),a=require(`./Table.variant.cjs`);let o=require(`react/jsx-runtime`),s=require(`lucide-react`);function c({column:c,value:l,onChange:u,options:d}){let{messages:f,digits:p}=e.useZuiConfig(),m=!i.isEmptyFilterValue(l),h=`${f.table.filterBy} ${t.localizeDigits(c.label,p)}`;return(0,o.jsx)(`span`,{"data-slot":`table-filter`,className:`zui:inline-flex zui:shrink-0`,children:(0,o.jsxs)(n.default,{type:`multi`,isSearch:!0,searchActions:!1,placeholder:h,options:d,remoteOptions:c.optionsSource,value:l??[],onValueChange:e=>u(e.length>0?e:void 0),children:[(0,o.jsxs)(n.SelectTrigger,{unstyled:!0,"aria-label":h,tooltip:h,"data-slot":`table-filter-toggle-button`,"data-active":m||void 0,className:a.tableFilterToggleVariants({active:m}),children:[(0,o.jsx)(s.Funnel,{className:r.filterIconClassName,fill:m?`currentColor`:`none`,"aria-hidden":`true`}),m?(0,o.jsx)(`span`,{"aria-hidden":`true`,"data-slot":`table-filter-active-dot`,className:`zui:absolute zui:end-0 zui:top-0 zui:size-2 zui:rounded-full zui:bg-[var(--zui-color-surface)] zui:ring-2 zui:ring-[var(--zui-color-primary)]`}):null]}),(0,o.jsx)(n.SelectContent,{className:`zui:w-60`})]})})}function l({column:r,value:i,onChange:a,options:s,open:c,onOpenChange:l}){let{messages:u,digits:d}=e.useZuiConfig();return(0,o.jsx)(`div`,{"data-slot":`table-filter-sheet`,"aria-hidden":`true`,className:`zui:sr-only`,children:(0,o.jsx)(n.default,{type:`multi`,isSearch:!0,searchActions:!1,placeholder:`${u.table.filterBy} ${t.localizeDigits(r.label,d)}`,options:s,remoteOptions:r.optionsSource,value:i??[],onValueChange:e=>a(e.length>0?e:void 0),open:c,onOpenChange:l,children:(0,o.jsx)(n.SelectTrigger,{unstyled:!0,tabIndex:-1})})})}exports.TableColumnFilterSheet=l,exports.default=c;
@@ -0,0 +1,17 @@
1
+ import type { TableColumnFilterProps } from "./Table.interface.cjs";
2
+ /**
3
+ * The filter button of a column header. It opens the same dropdown as `Select`: a multi-select of
4
+ * the values the column can have, with its search field.
5
+ */
6
+ export default function TableColumnFilter({ column, value, onChange, options, }: TableColumnFilterProps): import("react/jsx-runtime").JSX.Element;
7
+ type TableColumnFilterSheetProps = TableColumnFilterProps & {
8
+ open: boolean;
9
+ onOpenChange: (open: boolean) => void;
10
+ };
11
+ /**
12
+ * The filter of one column on a phone, where the header (and so its button) is not there: the same
13
+ * multi-select, opened from the filter list and shown as the bottom sheet every `Select` becomes
14
+ * below the mobile breakpoint. Nothing of it is visible while closed.
15
+ */
16
+ export declare function TableColumnFilterSheet({ column, value, onChange, options, open, onOpenChange, }: TableColumnFilterSheetProps): import("react/jsx-runtime").JSX.Element;
17
+ export {};
@@ -0,0 +1,17 @@
1
+ import type { TableColumnFilterProps } from "./Table.interface.js";
2
+ /**
3
+ * The filter button of a column header. It opens the same dropdown as `Select`: a multi-select of
4
+ * the values the column can have, with its search field.
5
+ */
6
+ export default function TableColumnFilter({ column, value, onChange, options, }: TableColumnFilterProps): import("react/jsx-runtime").JSX.Element;
7
+ type TableColumnFilterSheetProps = TableColumnFilterProps & {
8
+ open: boolean;
9
+ onOpenChange: (open: boolean) => void;
10
+ };
11
+ /**
12
+ * The filter of one column on a phone, where the header (and so its button) is not there: the same
13
+ * multi-select, opened from the filter list and shown as the bottom sheet every `Select` becomes
14
+ * below the mobile breakpoint. Nothing of it is visible while closed.
15
+ */
16
+ export declare function TableColumnFilterSheet({ column, value, onChange, options, open, onOpenChange, }: TableColumnFilterSheetProps): import("react/jsx-runtime").JSX.Element;
17
+ export {};
@@ -0,0 +1,70 @@
1
+ "use client";
2
+ import { useZuiConfig as e } from "../../config/useZuiConfig.js";
3
+ import { localizeDigits as t } from "../../services/localizeDigits/localizeDigits.js";
4
+ import n, { SelectContent as r, SelectTrigger as i } from "../Select/Select.js";
5
+ import { filterIconClassName as a } from "./Table.constants.js";
6
+ import { isEmptyFilterValue as o } from "./Table.utils.js";
7
+ import { tableFilterToggleVariants as s } from "./Table.variant.js";
8
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
9
+ import { Funnel as u } from "lucide-react";
10
+ //#region src/components/Table/TableColumnFilter.tsx
11
+ function d({ column: d, value: f, onChange: p, options: m }) {
12
+ let { messages: h, digits: g } = e(), _ = !o(f), v = `${h.table.filterBy} ${t(d.label, g)}`;
13
+ return /* @__PURE__ */ c("span", {
14
+ "data-slot": "table-filter",
15
+ className: "zui:inline-flex zui:shrink-0",
16
+ children: /* @__PURE__ */ l(n, {
17
+ type: "multi",
18
+ isSearch: !0,
19
+ searchActions: !1,
20
+ placeholder: v,
21
+ options: m,
22
+ remoteOptions: d.optionsSource,
23
+ value: f ?? [],
24
+ onValueChange: (e) => p(e.length > 0 ? e : void 0),
25
+ children: [/* @__PURE__ */ l(i, {
26
+ unstyled: !0,
27
+ "aria-label": v,
28
+ tooltip: v,
29
+ "data-slot": "table-filter-toggle-button",
30
+ "data-active": _ || void 0,
31
+ className: s({ active: _ }),
32
+ children: [/* @__PURE__ */ c(u, {
33
+ className: a,
34
+ fill: _ ? "currentColor" : "none",
35
+ "aria-hidden": "true"
36
+ }), _ ? /* @__PURE__ */ c("span", {
37
+ "aria-hidden": "true",
38
+ "data-slot": "table-filter-active-dot",
39
+ className: "zui:absolute zui:end-0 zui:top-0 zui:size-2 zui:rounded-full zui:bg-[var(--zui-color-surface)] zui:ring-2 zui:ring-[var(--zui-color-primary)]"
40
+ }) : null]
41
+ }), /* @__PURE__ */ c(r, { className: "zui:w-60" })]
42
+ })
43
+ });
44
+ }
45
+ function f({ column: r, value: a, onChange: o, options: s, open: l, onOpenChange: u }) {
46
+ let { messages: d, digits: f } = e();
47
+ return /* @__PURE__ */ c("div", {
48
+ "data-slot": "table-filter-sheet",
49
+ "aria-hidden": "true",
50
+ className: "zui:sr-only",
51
+ children: /* @__PURE__ */ c(n, {
52
+ type: "multi",
53
+ isSearch: !0,
54
+ searchActions: !1,
55
+ placeholder: `${d.table.filterBy} ${t(r.label, f)}`,
56
+ options: s,
57
+ remoteOptions: r.optionsSource,
58
+ value: a ?? [],
59
+ onValueChange: (e) => o(e.length > 0 ? e : void 0),
60
+ open: l,
61
+ onOpenChange: u,
62
+ children: /* @__PURE__ */ c(i, {
63
+ unstyled: !0,
64
+ tabIndex: -1
65
+ })
66
+ })
67
+ });
68
+ }
69
+ //#endregion
70
+ export { f as TableColumnFilterSheet, d as default };
@@ -1 +1 @@
1
- "use client";require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../config/useZuiConfig.cjs`),t=require(`../../lib/utils.cjs`),n=require(`./Table.variant.cjs`);let r=require(`react/jsx-runtime`);function i({colSpan:i,showSearchInput:a,normalizedSearchTerm:o}){let{messages:s}=e.useZuiConfig();return(0,r.jsx)(`tr`,{className:n.tableRowVariants(),children:(0,r.jsx)(`td`,{colSpan:i,className:t.cn(n.tableCellVariants(),`zui:py-7 zui:text-center zui:text-[var(--zui-color-text)]`),children:a&&o.length>0?s.table.noSearchResults:s.table.empty})})}exports.default=i;
1
+ "use client";require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../config/useZuiConfig.cjs`),t=require(`../../lib/utils.cjs`),n=require(`./Table.variant.cjs`);let r=require(`react/jsx-runtime`);function i({colSpan:i,showSearchInput:a,normalizedSearchTerm:o,hasActiveFilters:s=!1,onClearFilters:c}){let{messages:l}=e.useZuiConfig();return(0,r.jsx)(`tr`,{className:n.tableRowVariants(),children:(0,r.jsxs)(`td`,{colSpan:i,className:t.cn(n.tableCellVariants(),`zui:py-7 zui:text-center zui:text-[var(--zui-color-text)]`),children:[s?l.table.noFilterResults:a&&o.length>0?l.table.noSearchResults:l.table.empty,s&&c?(0,r.jsx)(`div`,{className:`zui:mt-2`,children:(0,r.jsx)(`button`,{type:`button`,"data-slot":`table-empty-clear-filters`,onClick:c,className:`zui:cursor-pointer zui:border-0 zui:bg-transparent zui:p-0 zui:text-xs zui:text-[var(--zui-theme-action-primary)] zui:underline zui:outline-none zui:focus-visible:ring-2 zui:focus-visible:ring-[var(--zui-theme-action-secondary)]`,children:l.table.filterClearAll})}):null]})})}exports.default=i;
@@ -1,2 +1,2 @@
1
1
  import type { TableEmptyStateProps } from "./Table.interface.cjs";
2
- export default function TableEmptyState({ colSpan, showSearchInput, normalizedSearchTerm, }: TableEmptyStateProps): import("react/jsx-runtime").JSX.Element;
2
+ export default function TableEmptyState({ colSpan, showSearchInput, normalizedSearchTerm, hasActiveFilters, onClearFilters, }: TableEmptyStateProps): import("react/jsx-runtime").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import type { TableEmptyStateProps } from "./Table.interface.js";
2
- export default function TableEmptyState({ colSpan, showSearchInput, normalizedSearchTerm, }: TableEmptyStateProps): import("react/jsx-runtime").JSX.Element;
2
+ export default function TableEmptyState({ colSpan, showSearchInput, normalizedSearchTerm, hasActiveFilters, onClearFilters, }: TableEmptyStateProps): import("react/jsx-runtime").JSX.Element;
@@ -2,18 +2,27 @@
2
2
  import { useZuiConfig as e } from "../../config/useZuiConfig.js";
3
3
  import { cn as t } from "../../lib/utils.js";
4
4
  import { tableCellVariants as n, tableRowVariants as r } from "./Table.variant.js";
5
- import { jsx as i } from "react/jsx-runtime";
5
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
6
6
  //#region src/components/Table/TableEmptyState.tsx
7
- function a({ colSpan: a, showSearchInput: o, normalizedSearchTerm: s }) {
8
- let { messages: c } = e();
7
+ function o({ colSpan: o, showSearchInput: s, normalizedSearchTerm: c, hasActiveFilters: l = !1, onClearFilters: u }) {
8
+ let { messages: d } = e();
9
9
  return /* @__PURE__ */ i("tr", {
10
10
  className: r(),
11
- children: /* @__PURE__ */ i("td", {
12
- colSpan: a,
11
+ children: /* @__PURE__ */ a("td", {
12
+ colSpan: o,
13
13
  className: t(n(), "zui:py-7 zui:text-center zui:text-[var(--zui-color-text)]"),
14
- children: o && s.length > 0 ? c.table.noSearchResults : c.table.empty
14
+ children: [l ? d.table.noFilterResults : s && c.length > 0 ? d.table.noSearchResults : d.table.empty, l && u ? /* @__PURE__ */ i("div", {
15
+ className: "zui:mt-2",
16
+ children: /* @__PURE__ */ i("button", {
17
+ type: "button",
18
+ "data-slot": "table-empty-clear-filters",
19
+ onClick: u,
20
+ className: "zui:cursor-pointer zui:border-0 zui:bg-transparent zui:p-0 zui:text-xs zui:text-[var(--zui-theme-action-primary)] zui:underline zui:outline-none zui:focus-visible:ring-2 zui:focus-visible:ring-[var(--zui-theme-action-secondary)]",
21
+ children: d.table.filterClearAll
22
+ })
23
+ }) : null]
15
24
  })
16
25
  });
17
26
  }
18
27
  //#endregion
19
- export { a as default };
28
+ export { o as default };
@@ -1 +1 @@
1
- "use client";require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../config/useZuiConfig.cjs`),t=require(`../../lib/utils.cjs`),n=require(`../Skeleton/Skeleton.cjs`),r=require(`./Table.constants.cjs`),i=require(`./TableParts.cjs`),a=require(`./Table.utils.cjs`);let o=require(`react/jsx-runtime`);function s({count:s,keyPrefix:c,showRowNumbers:l,columns:u,actionsCount:d}){let{messages:f}=e.useZuiConfig();return Array.from({length:s},(e,s)=>(0,o.jsxs)(i.TableRow,{slot:`table-loading-row`,children:[l?(0,o.jsx)(i.TableCell,{align:`center`,className:r.rowNumberColumnClassName,"data-label":f.table.rowNumber,children:(0,o.jsx)(n.default,{className:`zui:mx-auto zui:h-4 zui:w-8`})}):null,u.map(e=>(0,o.jsx)(i.TableCell,{align:e.align,"data-label":e.label,children:(0,o.jsx)(n.default,{className:t.cn(`zui:max-w-full`,e.align===`center`?`zui:mx-auto`:void 0,a.resolveLoadingCellSkeletonClassName(e,s))})},`${c}-cell-${e.key}-${s}`)),d>0?(0,o.jsx)(i.TableCell,{align:`center`,"data-cell":`actions`,className:t.cn(r.actionsColumnClassName,r.actionsColumnStickyClassName),children:(0,o.jsx)(`div`,{"data-slot":`table-row-actions-skeleton`,className:`zui:flex zui:items-center zui:justify-center zui:gap-0.5`,children:Array.from({length:d},(e,t)=>(0,o.jsx)(n.default,{className:`zui:size-9`},`${c}-action-${t}`))})}):null]},`${c}-row-${s}`))}exports.default=s;
1
+ "use client";require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../config/useZuiConfig.cjs`),t=require(`../../lib/utils.cjs`),n=require(`../Skeleton/Skeleton.cjs`),r=require(`./Table.constants.cjs`),i=require(`./Table.utils.cjs`),a=require(`./TableParts.cjs`);let o=require(`react/jsx-runtime`);function s({count:s,keyPrefix:c,showRowNumbers:l,columns:u,actionsCount:d}){let{messages:f}=e.useZuiConfig();return Array.from({length:s},(e,s)=>(0,o.jsxs)(a.TableRow,{slot:`table-loading-row`,children:[l?(0,o.jsx)(a.TableCell,{align:`center`,className:r.rowNumberColumnClassName,"data-label":f.table.rowNumber,children:(0,o.jsx)(n.default,{className:`zui:mx-auto zui:h-4 zui:w-8`})}):null,u.map(e=>(0,o.jsx)(a.TableCell,{align:e.align,"data-label":e.label,children:(0,o.jsx)(n.default,{className:t.cn(`zui:max-w-full`,e.align===`center`?`zui:mx-auto`:void 0,i.resolveLoadingCellSkeletonClassName(e,s))})},`${c}-cell-${e.key}-${s}`)),d>0?(0,o.jsx)(a.TableCell,{align:`center`,"data-cell":`actions`,className:t.cn(r.actionsColumnClassName,r.actionsColumnStickyClassName),children:(0,o.jsx)(`div`,{"data-slot":`table-row-actions-skeleton`,className:`zui:flex zui:items-center zui:justify-center zui:gap-0.5`,children:Array.from({length:d},(e,t)=>(0,o.jsx)(n.default,{className:`zui:size-9`},`${c}-action-${t}`))})}):null]},`${c}-row-${s}`))}exports.default=s;
@@ -3,27 +3,27 @@ import { useZuiConfig as e } from "../../config/useZuiConfig.js";
3
3
  import { cn as t } from "../../lib/utils.js";
4
4
  import n from "../Skeleton/Skeleton.js";
5
5
  import { actionsColumnClassName as r, actionsColumnStickyClassName as i, rowNumberColumnClassName as a } from "./Table.constants.js";
6
- import { TableCell as o, TableRow as s } from "./TableParts.js";
7
- import { resolveLoadingCellSkeletonClassName as c } from "./Table.utils.js";
6
+ import { resolveLoadingCellSkeletonClassName as o } from "./Table.utils.js";
7
+ import { TableCell as s, TableRow as c } from "./TableParts.js";
8
8
  import { jsx as l, jsxs as u } from "react/jsx-runtime";
9
9
  //#region src/components/Table/TableSkeletonRows.tsx
10
10
  function d({ count: d, keyPrefix: f, showRowNumbers: p, columns: m, actionsCount: h }) {
11
11
  let { messages: g } = e();
12
- return Array.from({ length: d }, (e, d) => /* @__PURE__ */ u(s, {
12
+ return Array.from({ length: d }, (e, d) => /* @__PURE__ */ u(c, {
13
13
  slot: "table-loading-row",
14
14
  children: [
15
- p ? /* @__PURE__ */ l(o, {
15
+ p ? /* @__PURE__ */ l(s, {
16
16
  align: "center",
17
17
  className: a,
18
18
  "data-label": g.table.rowNumber,
19
19
  children: /* @__PURE__ */ l(n, { className: "zui:mx-auto zui:h-4 zui:w-8" })
20
20
  }) : null,
21
- m.map((e) => /* @__PURE__ */ l(o, {
21
+ m.map((e) => /* @__PURE__ */ l(s, {
22
22
  align: e.align,
23
23
  "data-label": e.label,
24
- children: /* @__PURE__ */ l(n, { className: t("zui:max-w-full", e.align === "center" ? "zui:mx-auto" : void 0, c(e, d)) })
24
+ children: /* @__PURE__ */ l(n, { className: t("zui:max-w-full", e.align === "center" ? "zui:mx-auto" : void 0, o(e, d)) })
25
25
  }, `${f}-cell-${e.key}-${d}`)),
26
- h > 0 ? /* @__PURE__ */ l(o, {
26
+ h > 0 ? /* @__PURE__ */ l(s, {
27
27
  align: "center",
28
28
  "data-cell": "actions",
29
29
  className: t(r, i),
@@ -1 +1 @@
1
- "use client";require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../config/useZuiConfig.cjs`),t=require(`../../lib/utils.cjs`),n=require(`../Tooltip/Tooltip.cjs`),r=require(`./Table.variant.cjs`),i=require(`./Table.constants.cjs`),a=require(`./Table.utils.cjs`);let o=require(`react/jsx-runtime`);function s(e,t){return t===void 0?`idle`:e===t?`highlighted`:`dimmed`}function c({columnLabel:c,direction:l,onToggle:u,className:d}){let{messages:f}=e.useZuiConfig(),p=a.resolveSortToggleTooltipText(c,l,f.table);return(0,o.jsx)(n.default,{text:p,position:`top`,trigger:(0,o.jsx)(`button`,{type:`button`,"aria-label":p,"data-slot":`table-sort-toggle-button`,"data-sort-direction":l??`none`,onClick:u,className:t.cn(r.tableSortToggleVariants(),d),children:(0,o.jsxs)(`svg`,{viewBox:`0 0 10 16`,className:i.sortIconClassName,fill:`currentColor`,stroke:`currentColor`,strokeWidth:1,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,o.jsx)(`path`,{d:`M5 1.5 L8.5 6.5 H1.5 Z`,className:r.tableSortArrowVariants({emphasis:s(`asc`,l)})}),(0,o.jsx)(`path`,{d:`M1.5 9.5 H8.5 L5 14.5 Z`,className:r.tableSortArrowVariants({emphasis:s(`desc`,l)})})]})})})}exports.default=c;
1
+ "use client";require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../config/useZuiConfig.cjs`),t=require(`../../lib/utils.cjs`),n=require(`../Tooltip/Tooltip.cjs`),r=require(`./Table.constants.cjs`),i=require(`./Table.utils.cjs`),a=require(`./Table.variant.cjs`);let o=require(`react/jsx-runtime`);function s(e,t){return t===void 0?`idle`:e===t?`highlighted`:`dimmed`}function c({columnLabel:c,direction:l,onToggle:u,className:d}){let{messages:f}=e.useZuiConfig(),p=i.resolveSortToggleTooltipText(c,l,f.table);return(0,o.jsx)(n.default,{text:p,position:`top`,trigger:(0,o.jsx)(`button`,{type:`button`,"aria-label":p,"data-slot":`table-sort-toggle-button`,"data-sort-direction":l??`none`,onClick:u,className:t.cn(a.tableSortToggleVariants(),d),children:(0,o.jsxs)(`svg`,{viewBox:`0 0 10 16`,className:r.sortIconClassName,fill:`currentColor`,stroke:`currentColor`,strokeWidth:1,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,o.jsx)(`path`,{d:`M5 1.5 L8.5 6.5 H1.5 Z`,className:a.tableSortArrowVariants({emphasis:s(`asc`,l)})}),(0,o.jsx)(`path`,{d:`M1.5 9.5 H8.5 L5 14.5 Z`,className:a.tableSortArrowVariants({emphasis:s(`desc`,l)})})]})})})}exports.default=c;
@@ -2,16 +2,16 @@
2
2
  import { useZuiConfig as e } from "../../config/useZuiConfig.js";
3
3
  import { cn as t } from "../../lib/utils.js";
4
4
  import n from "../Tooltip/Tooltip.js";
5
- import { tableSortArrowVariants as r, tableSortToggleVariants as i } from "./Table.variant.js";
6
- import { sortIconClassName as a } from "./Table.constants.js";
7
- import { resolveSortToggleTooltipText as o } from "./Table.utils.js";
5
+ import { sortIconClassName as r } from "./Table.constants.js";
6
+ import { resolveSortToggleTooltipText as i } from "./Table.utils.js";
7
+ import { tableSortArrowVariants as a, tableSortToggleVariants as o } from "./Table.variant.js";
8
8
  import { jsx as s, jsxs as c } from "react/jsx-runtime";
9
9
  //#region src/components/Table/TableSortToggle.tsx
10
10
  function l(e, t) {
11
11
  return t === void 0 ? "idle" : e === t ? "highlighted" : "dimmed";
12
12
  }
13
13
  function u({ columnLabel: u, direction: d, onToggle: f, className: p }) {
14
- let { messages: m } = e(), h = o(u, d, m.table);
14
+ let { messages: m } = e(), h = i(u, d, m.table);
15
15
  return /* @__PURE__ */ s(n, {
16
16
  text: h,
17
17
  position: "top",
@@ -21,10 +21,10 @@ function u({ columnLabel: u, direction: d, onToggle: f, className: p }) {
21
21
  "data-slot": "table-sort-toggle-button",
22
22
  "data-sort-direction": d ?? "none",
23
23
  onClick: f,
24
- className: t(i(), p),
24
+ className: t(o(), p),
25
25
  children: /* @__PURE__ */ c("svg", {
26
26
  viewBox: "0 0 10 16",
27
- className: a,
27
+ className: r,
28
28
  fill: "currentColor",
29
29
  stroke: "currentColor",
30
30
  strokeWidth: 1,
@@ -32,10 +32,10 @@ function u({ columnLabel: u, direction: d, onToggle: f, className: p }) {
32
32
  "aria-hidden": "true",
33
33
  children: [/* @__PURE__ */ s("path", {
34
34
  d: "M5 1.5 L8.5 6.5 H1.5 Z",
35
- className: r({ emphasis: l("asc", d) })
35
+ className: a({ emphasis: l("asc", d) })
36
36
  }), /* @__PURE__ */ s("path", {
37
37
  d: "M1.5 9.5 H8.5 L5 14.5 Z",
38
- className: r({ emphasis: l("desc", d) })
38
+ className: a({ emphasis: l("desc", d) })
39
39
  })]
40
40
  })
41
41
  })
@@ -0,0 +1 @@
1
+ const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../Table.utils.cjs`);let n=require(`react`);n=e.__toESM(n,1);var r={};function i({rows:e,columns:i,filterConfig:a}){let o=a?.onFilterChange,s=typeof o==`function`,c=a?.values,[l,u]=n.useState(r),d=s&&c?c:l,f=n.useMemo(()=>JSON.stringify(d),[d]),p=n.useMemo(()=>Object.values(d).filter(e=>!t.isEmptyFilterValue(e)).length,[d]),m=n.useMemo(()=>{if(s||p===0)return e;let n=i.flatMap(e=>{let n=d[e.key];return n===void 0||t.isEmptyFilterValue(n)?[]:[{column:e,value:n}]});return e.filter(({row:e})=>n.every(({column:n,value:r})=>t.rowMatchesColumnFilter(e,n,r)))},[p,i,d,s,e]),h=n.useRef({filterValues:d,onFilterChange:o});n.useEffect(()=>{h.current={filterValues:d,onFilterChange:o}});let g=n.useCallback(e=>{u(e),h.current.onFilterChange?.(e)},[]);return{filteredRows:m,filterValues:d,activeFilterCount:p,filterKey:f,isRemoteFilter:s,handleFilterChange:n.useCallback((e,n)=>{let r={...h.current.filterValues};n===void 0||t.isEmptyFilterValue(n)?delete r[e]:r[e]=n,g(r)},[g]),handleFilterClear:n.useCallback(()=>g(r),[g])}}exports.useTableFilter=i;
@@ -0,0 +1,18 @@
1
+ import type { TableFilterValue, TableFilterValues, TableSchemaColumn, TableSchemaFilter, TableVisibleRow } from "../Table.interface.cjs";
2
+ type UseTableFilterInput = {
3
+ rows: TableVisibleRow[];
4
+ columns: TableSchemaColumn[];
5
+ filterConfig?: TableSchemaFilter;
6
+ };
7
+ type UseTableFilterResult = {
8
+ filteredRows: TableVisibleRow[];
9
+ filterValues: TableFilterValues;
10
+ activeFilterCount: number;
11
+ /** Changes when any filter does; used to send the table back to its first page. */
12
+ filterKey: string;
13
+ isRemoteFilter: boolean;
14
+ handleFilterChange: (columnKey: string, value: TableFilterValue | undefined) => void;
15
+ handleFilterClear: () => void;
16
+ };
17
+ export declare function useTableFilter({ rows, columns, filterConfig, }: UseTableFilterInput): UseTableFilterResult;
18
+ export {};
@@ -0,0 +1,18 @@
1
+ import type { TableFilterValue, TableFilterValues, TableSchemaColumn, TableSchemaFilter, TableVisibleRow } from "../Table.interface.js";
2
+ type UseTableFilterInput = {
3
+ rows: TableVisibleRow[];
4
+ columns: TableSchemaColumn[];
5
+ filterConfig?: TableSchemaFilter;
6
+ };
7
+ type UseTableFilterResult = {
8
+ filteredRows: TableVisibleRow[];
9
+ filterValues: TableFilterValues;
10
+ activeFilterCount: number;
11
+ /** Changes when any filter does; used to send the table back to its first page. */
12
+ filterKey: string;
13
+ isRemoteFilter: boolean;
14
+ handleFilterChange: (columnKey: string, value: TableFilterValue | undefined) => void;
15
+ handleFilterClear: () => void;
16
+ };
17
+ export declare function useTableFilter({ rows, columns, filterConfig, }: UseTableFilterInput): UseTableFilterResult;
18
+ export {};