@skdx/react 0.30.0 → 0.32.0

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 (197) hide show
  1. package/dist/accordion/Accordion.cjs +1 -1
  2. package/dist/accordion/Accordion.js +1 -1
  3. package/dist/autocomplete/Autocomplete.cjs +1 -1
  4. package/dist/autocomplete/Autocomplete.js +1 -1
  5. package/dist/avatar/Avatar.cjs +1 -1
  6. package/dist/avatar/Avatar.d.cts +1 -1
  7. package/dist/avatar/Avatar.d.ts +1 -1
  8. package/dist/avatar/Avatar.js +1 -1
  9. package/dist/backdrop/Backdrop.cjs +2 -0
  10. package/dist/backdrop/Backdrop.d.cts +9 -0
  11. package/dist/backdrop/Backdrop.d.ts +9 -0
  12. package/dist/backdrop/Backdrop.js +2 -0
  13. package/dist/backdrop/index.d.cts +2 -0
  14. package/dist/backdrop/index.d.ts +2 -0
  15. package/dist/backdrop/types.d.cts +3 -0
  16. package/dist/backdrop/types.d.ts +3 -0
  17. package/dist/button/Button.cjs +1 -1
  18. package/dist/button/Button.js +1 -1
  19. package/dist/checkbox-card/CheckboxCard.cjs +1 -1
  20. package/dist/checkbox-card/CheckboxCard.js +1 -1
  21. package/dist/checkbox-group/CheckboxGroup.cjs +1 -1
  22. package/dist/checkbox-group/CheckboxGroup.js +1 -1
  23. package/dist/checkbox-group/CheckboxGroupAnatomy.d.cts +10 -1
  24. package/dist/checkbox-group/CheckboxGroupAnatomy.d.ts +10 -1
  25. package/dist/checkbox-group/CheckboxGroupItem.d.cts +2 -1
  26. package/dist/checkbox-group/CheckboxGroupItem.d.ts +2 -1
  27. package/dist/checkbox-group/CheckboxGroupSelectAll.d.cts +3 -2
  28. package/dist/checkbox-group/CheckboxGroupSelectAll.d.ts +3 -2
  29. package/dist/chip/Chip.cjs +2 -0
  30. package/dist/chip/Chip.d.cts +9 -0
  31. package/dist/chip/Chip.d.ts +9 -0
  32. package/dist/chip/Chip.js +2 -0
  33. package/dist/chip/index.d.cts +2 -0
  34. package/dist/chip/index.d.ts +2 -0
  35. package/dist/chip/types.d.cts +3 -0
  36. package/dist/chip/types.d.ts +3 -0
  37. package/dist/color-picker/ColorPicker.cjs +1 -1
  38. package/dist/color-picker/ColorPicker.js +1 -1
  39. package/dist/combobox/Combobox.cjs +1 -1
  40. package/dist/combobox/Combobox.js +1 -1
  41. package/dist/date-picker/DatePicker.cjs +1 -1
  42. package/dist/date-picker/DatePicker.js +1 -1
  43. package/dist/date-picker/DatePickerTimeField.d.cts +1 -1
  44. package/dist/date-picker/DatePickerTimeField.d.ts +1 -1
  45. package/dist/date-range-picker/DateRangePicker.cjs +2 -0
  46. package/dist/date-range-picker/DateRangePicker.d.cts +9 -0
  47. package/dist/date-range-picker/DateRangePicker.d.ts +9 -0
  48. package/dist/date-range-picker/DateRangePicker.js +2 -0
  49. package/dist/date-range-picker/index.d.cts +2 -0
  50. package/dist/date-range-picker/index.d.ts +2 -0
  51. package/dist/date-range-picker/types.d.cts +3 -0
  52. package/dist/date-range-picker/types.d.ts +3 -0
  53. package/dist/date-time-picker/DateTimePicker.cjs +2 -0
  54. package/dist/date-time-picker/DateTimePicker.d.cts +9 -0
  55. package/dist/date-time-picker/DateTimePicker.d.ts +9 -0
  56. package/dist/date-time-picker/DateTimePicker.js +2 -0
  57. package/dist/date-time-picker/index.d.cts +2 -0
  58. package/dist/date-time-picker/index.d.ts +2 -0
  59. package/dist/date-time-picker/types.d.cts +3 -0
  60. package/dist/date-time-picker/types.d.ts +3 -0
  61. package/dist/dialog/Dialog.cjs +1 -1
  62. package/dist/dialog/Dialog.js +1 -1
  63. package/dist/dialog/Dialogs.d.cts +24 -0
  64. package/dist/dialog/Dialogs.d.ts +24 -0
  65. package/dist/dialog/index.d.cts +2 -1
  66. package/dist/dialog/index.d.ts +2 -1
  67. package/dist/dialog/types.d.cts +6 -0
  68. package/dist/dialog/types.d.ts +6 -0
  69. package/dist/fab/Fab.cjs +2 -0
  70. package/dist/fab/Fab.d.cts +9 -0
  71. package/dist/fab/Fab.d.ts +9 -0
  72. package/dist/fab/Fab.js +2 -0
  73. package/dist/fab/index.d.cts +2 -0
  74. package/dist/fab/index.d.ts +2 -0
  75. package/dist/fab/types.d.cts +3 -0
  76. package/dist/fab/types.d.ts +3 -0
  77. package/dist/field/Field.cjs +1 -1
  78. package/dist/field/Field.js +1 -1
  79. package/dist/floating-panel/FloatingPanel.cjs +1 -1
  80. package/dist/floating-panel/FloatingPanel.js +1 -1
  81. package/dist/floating-panel/types.d.cts +4 -0
  82. package/dist/floating-panel/types.d.ts +4 -0
  83. package/dist/gauge/Gauge.cjs +2 -0
  84. package/dist/gauge/Gauge.d.cts +9 -0
  85. package/dist/gauge/Gauge.d.ts +9 -0
  86. package/dist/gauge/Gauge.js +2 -0
  87. package/dist/gauge/index.d.cts +2 -0
  88. package/dist/gauge/index.d.ts +2 -0
  89. package/dist/gauge/types.d.cts +3 -0
  90. package/dist/gauge/types.d.ts +3 -0
  91. package/dist/grid/Grid.cjs +2 -0
  92. package/dist/grid/Grid.d.cts +9 -0
  93. package/dist/grid/Grid.d.ts +9 -0
  94. package/dist/grid/Grid.js +2 -0
  95. package/dist/grid/index.d.cts +2 -0
  96. package/dist/grid/index.d.ts +2 -0
  97. package/dist/grid/types.d.cts +3 -0
  98. package/dist/grid/types.d.ts +3 -0
  99. package/dist/index.cjs +1 -1
  100. package/dist/index.d.cts +15 -1
  101. package/dist/index.d.ts +15 -1
  102. package/dist/index.js +1 -1
  103. package/dist/link/Link.cjs +1 -1
  104. package/dist/link/Link.js +1 -1
  105. package/dist/listbox/Listbox.cjs +1 -1
  106. package/dist/listbox/Listbox.js +1 -1
  107. package/dist/paper/Paper.cjs +2 -0
  108. package/dist/paper/Paper.d.cts +9 -0
  109. package/dist/paper/Paper.d.ts +9 -0
  110. package/dist/paper/Paper.js +2 -0
  111. package/dist/paper/index.d.cts +2 -0
  112. package/dist/paper/index.d.ts +2 -0
  113. package/dist/paper/types.d.cts +3 -0
  114. package/dist/paper/types.d.ts +3 -0
  115. package/dist/password-input/types.d.cts +6 -2
  116. package/dist/password-input/types.d.ts +6 -2
  117. package/dist/primitives/table.cjs +1 -1
  118. package/dist/primitives/table.js +1 -1
  119. package/dist/scroll-area/ScrollArea.cjs +1 -1
  120. package/dist/scroll-area/ScrollArea.js +1 -1
  121. package/dist/speed-dial/SpeedDial.cjs +1 -1
  122. package/dist/speed-dial/SpeedDial.d.cts +1 -1
  123. package/dist/speed-dial/SpeedDial.d.ts +1 -1
  124. package/dist/speed-dial/SpeedDial.js +1 -1
  125. package/dist/speed-dial/SpeedDialAnatomy.d.cts +2 -1
  126. package/dist/speed-dial/SpeedDialAnatomy.d.ts +2 -1
  127. package/dist/speed-dial/types.d.cts +5 -0
  128. package/dist/speed-dial/types.d.ts +5 -0
  129. package/dist/stack/Stack.cjs +2 -0
  130. package/dist/stack/Stack.d.cts +9 -0
  131. package/dist/stack/Stack.d.ts +9 -0
  132. package/dist/stack/Stack.js +2 -0
  133. package/dist/stack/index.d.cts +2 -0
  134. package/dist/stack/index.d.ts +2 -0
  135. package/dist/stack/types.d.cts +3 -0
  136. package/dist/stack/types.d.ts +3 -0
  137. package/dist/table/Table.cjs +1 -1
  138. package/dist/table/Table.d.cts +2 -2
  139. package/dist/table/Table.d.ts +2 -2
  140. package/dist/table/Table.js +1 -1
  141. package/dist/table/TableAnatomy.d.cts +2 -1
  142. package/dist/table/TableAnatomy.d.ts +2 -1
  143. package/dist/table/TableColumnHeaderFilterInput.d.cts +18 -0
  144. package/dist/table/TableColumnHeaderFilterInput.d.ts +18 -0
  145. package/dist/table/TableHeaderCell.d.cts +1 -1
  146. package/dist/table/TableHeaderCell.d.ts +1 -1
  147. package/dist/table/index.d.cts +1 -1
  148. package/dist/table/index.d.ts +1 -1
  149. package/dist/table/primitives.d.cts +2 -1
  150. package/dist/table/primitives.d.ts +2 -1
  151. package/dist/table/types.d.cts +52 -0
  152. package/dist/table/types.d.ts +52 -0
  153. package/dist/table/useTableFilter.d.cts +3 -0
  154. package/dist/table/useTableFilter.d.ts +3 -0
  155. package/dist/time/Time.cjs +1 -1
  156. package/dist/time/Time.d.cts +1 -1
  157. package/dist/time/Time.d.ts +1 -1
  158. package/dist/time/Time.js +1 -1
  159. package/dist/timeline/Timeline.cjs +1 -1
  160. package/dist/timeline/Timeline.d.cts +1 -1
  161. package/dist/timeline/Timeline.d.ts +1 -1
  162. package/dist/timeline/Timeline.js +1 -1
  163. package/dist/tooltip/Tooltip.cjs +2 -0
  164. package/dist/tooltip/Tooltip.d.cts +16 -0
  165. package/dist/tooltip/Tooltip.d.ts +16 -0
  166. package/dist/tooltip/Tooltip.js +2 -0
  167. package/dist/tooltip/index.d.cts +2 -0
  168. package/dist/tooltip/index.d.ts +2 -0
  169. package/dist/tooltip/types.d.cts +3 -0
  170. package/dist/tooltip/types.d.ts +3 -0
  171. package/dist/utils/csv.cjs +3 -0
  172. package/dist/utils/csv.d.cts +43 -0
  173. package/dist/utils/csv.d.ts +43 -0
  174. package/dist/utils/csv.js +3 -0
  175. package/dist/utils/dialogs.cjs +2 -0
  176. package/dist/utils/dialogs.d.cts +96 -0
  177. package/dist/utils/dialogs.d.ts +96 -0
  178. package/dist/utils/dialogs.js +2 -0
  179. package/dist/utils/dismissal.cjs +1 -1
  180. package/dist/utils/dismissal.d.cts +7 -0
  181. package/dist/utils/dismissal.d.ts +7 -0
  182. package/dist/utils/dismissal.js +1 -1
  183. package/dist/utils/field-core.cjs +1 -1
  184. package/dist/utils/field-core.d.cts +2 -0
  185. package/dist/utils/field-core.d.ts +2 -0
  186. package/dist/utils/field-core.js +1 -1
  187. package/dist/utils/media-query.cjs +2 -0
  188. package/dist/utils/media-query.d.cts +7 -0
  189. package/dist/utils/media-query.d.ts +7 -0
  190. package/dist/utils/media-query.js +2 -0
  191. package/dist/utils/useDismiss.cjs +1 -1
  192. package/dist/utils/useDismiss.js +1 -1
  193. package/dist/utils/useMediaQuery.cjs +2 -0
  194. package/dist/utils/useMediaQuery.d.cts +10 -0
  195. package/dist/utils/useMediaQuery.d.ts +10 -0
  196. package/dist/utils/useMediaQuery.js +2 -0
  197. package/package.json +102 -2
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- "use strict";var oo=Object.create;var j=Object.defineProperty;var ro=Object.getOwnPropertyDescriptor;var no=Object.getOwnPropertyNames;var ao=Object.getPrototypeOf,lo=Object.prototype.hasOwnProperty;var io=(e,t)=>{for(var o in t)j(e,o,{get:t[o],enumerable:!0})},Ke=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of no(t))!lo.call(e,n)&&n!==o&&j(e,n,{get:()=>t[n],enumerable:!(r=ro(t,n))||r.enumerable});return e};var ee=(e,t,o)=>(o=e!=null?oo(ao(e)):{},Ke(t||!e||!e.__esModule?j(o,"default",{value:e,enumerable:!0}):o,e)),so=e=>Ke(j({},"__esModule",{value:!0}),e);var wo={};io(wo,{Table:()=>Ne,TableBody:()=>te,TableCaption:()=>oe,TableCell:()=>$,TableColumnHeaderSortTrigger:()=>Y,TableColumnResizeTrigger:()=>me,TableEmpty:()=>re,TableExpandTrigger:()=>ie,TableExpandedRow:()=>ne,TableFooter:()=>_t,TableHeader:()=>se,TableHeaderCell:()=>V,TableHeaderCellProvider:()=>Pe,TableProvider:()=>Mt,TableRoot:()=>Ee,TableRow:()=>F,TableRowSelectCheckbox:()=>ue,TableSelectAllCheckbox:()=>pe,TableSortIndicator:()=>Xt,defaultGetSortLabel:()=>It,defaultSelectAllLabel:()=>St,tableDetailRowId:()=>B,useTableContext:()=>d,useTableHeaderCellContext:()=>_});module.exports=so(wo);var c=ee(require("react"),1),Ht=require("../utils/appearance.cjs"),Wt=require("../utils/composeRefs.cjs"),we=require("../utils/createContext.cjs"),Dt=require("../utils/liveAnnouncer.cjs"),At=require("../utils/part.cjs"),Lt=require("../utils/primitive.cjs"),zt=require("../utils/recipeAxis.cjs"),vt=require("../utils/useCallbackRef.cjs"),G=require("../utils/useControllableState.cjs");var Te=ee(require("react"),1);var $e=require("../utils/part.cjs"),_e=require("../utils/primitive.cjs"),Oe=require("react/jsx-runtime"),te=({ref:e,...t})=>(0,Oe.jsx)(_e.Primitive.tbody,{...t,...(0,$e.skdxPart)("table","body",t.className),ref:e});te.displayName="TableBody";var Ve=require("../utils/part.cjs"),Fe=require("../utils/primitive.cjs"),Xe=require("react/jsx-runtime"),oe=({ref:e,...t})=>(0,Xe.jsx)(Fe.Primitive.caption,{...t,...(0,Ve.skdxPart)("table","caption",t.className),ref:e});oe.displayName="TableCaption";var Ue=require("../utils/part.cjs"),Be=require("../utils/primitive.cjs"),Ye=require("react/jsx-runtime"),$=({ref:e,...t})=>(0,Ye.jsx)(Be.Primitive.td,{...t,...(0,Ue.skdxPart)("table","cell",t.className),ref:e});$.displayName="TableCell";var Ge=require("../utils/part.cjs"),qe=require("../utils/primitive.cjs");var ye=require("react/jsx-runtime"),re=({colSpan:e,children:t,ref:o,...r})=>{let n=d("TableEmpty");return(0,ye.jsx)(qe.Primitive.tr,{"data-state":"empty","data-skdx-table-empty":"",...r,...(0,Ge.skdxPart)("table","empty",r.className),ref:o,children:r.asChild?t:(0,ye.jsx)("td",{colSpan:e??n.headerCellCount,children:t})})};re.displayName="TableEmpty";var Je=require("../utils/part.cjs"),Ze=require("../utils/primitive.cjs");var he=require("react/jsx-runtime"),ne=({rowId:e,colSpan:t,children:o,ref:r,...n})=>{let l=d("TableExpandedRow"),i=l.isRowExpanded(e);return(0,he.jsx)(Ze.Primitive.tr,{id:B(l.tableId,e),"data-state":i?"expanded":"collapsed","data-skdx-table-detail-row":"",hidden:!i,...n,...(0,Je.skdxPart)("table","expanded-row",n.className),ref:r,children:n.asChild?o:(0,he.jsx)("td",{colSpan:t??l.headerCellCount,children:o})})};ne.displayName="TableExpandedRow";var Qe=require("../utils/Glyph.cjs"),je=require("../utils/part.cjs"),le=require("../utils/primitive.cjs");var ae=require("react/jsx-runtime"),co=()=>(0,ae.jsx)(Qe.Glyph,{name:"chevron-right"}),ie=({rowId:e,ref:t,...o})=>{let r=d("TableExpandTrigger"),n=r.isRowExpanded(e);return(0,ae.jsx)(le.Primitive.button,{type:"button","aria-expanded":n,"aria-controls":B(r.tableId,e),"data-state":n?"expanded":"collapsed","data-skdx-table-expand-trigger":"",...o,...(0,je.skdxPart)("table","expand-trigger",o.className),ref:t,onClick:(0,le.composeEventHandlers)(o.onClick,l=>{l.stopPropagation(),r.toggleRowExpanded(e)}),children:o.children??(0,ae.jsx)(co,{})})};ie.displayName="TableExpandTrigger";var et=require("../utils/part.cjs"),tt=require("../utils/primitive.cjs"),ot=require("react/jsx-runtime"),se=({ref:e,...t})=>(0,ot.jsx)(tt.Primitive.thead,{...t,...(0,et.skdxPart)("table","header",t.className),ref:e});se.displayName="TableHeader";var D=ee(require("react"),1),ct=require("../utils/part.cjs"),dt=require("../utils/primitive.cjs");var rt=require("../utils/part.cjs"),ce=require("../utils/primitive.cjs");var nt=require("react/jsx-runtime"),Y=({columnKey:e,ref:t,...o})=>{let r=d("TableColumnHeaderSortTrigger"),n=_("TableColumnHeaderSortTrigger"),l=e??(n.sortable?n.columnKey:void 0);if(l===void 0)return null;let i=r.sortList.findIndex(b=>b.columnKey===l),m=r.sortList[i]?.direction;return(0,nt.jsx)(ce.Primitive.button,{type:"button","data-skdx-table-sort-trigger":"","data-sort-direction":m,"data-sort-index":r.multiSort&&i!==-1?i:void 0,...o,...(0,rt.skdxPart)("table","column-header-sort-trigger",o.className),ref:t,onClick:(0,ce.composeEventHandlers)(o.onClick,b=>{r.toggleSort(l,b.currentTarget.textContent?.trim()||l)})})};Y.displayName="TableColumnHeaderSortTrigger";var M=ee(require("react"),1),at=require("../utils/clamp.cjs"),lt=require("../utils/composeRefs.cjs"),O=require("../utils/direction.cjs"),it=require("../utils/part.cjs"),L=require("../utils/primitive.cjs"),de=require("../utils/useCallbackRef.cjs");var st=require("react/jsx-runtime"),mo=40,fo=1e3,uo=8,po=new Set(["ArrowLeft","ArrowRight","Home","End"]),me=({columnKey:e,minWidth:t,maxWidth:o,step:r,label:n,ref:l,...i})=>{let m=d("TableColumnResizeTrigger"),b=_("TableColumnResizeTrigger"),N=(0,O.useDirection)(),y=M.useRef(null),H=(0,lt.useComposedRefs)(l,y),h=M.useRef(null),[x,k]=M.useState(!1),g=e??b.columnKey,P=t??b.minWidth??mo,f=o??b.maxWidth??fo,w=r??b.resizeStep??uo,C=g===void 0?void 0:m.columnWidths[g],W=M.useRef(!1),E=(0,de.useCallbackRef)(s=>{if(g===void 0)return;let u=(0,at.clamp)(Math.round(s),P,f);u!==m.columnWidths[g]&&(W.current=!0),m.setColumnWidth(g,u)}),z=(0,de.useCallbackRef)(()=>{W.current&&(W.current=!1,m.commitColumnWidths())}),X=()=>C!==void 0?C:(y.current?.closest("th")?.getBoundingClientRect().width??0)||P,K=(0,de.useCallbackRef)(()=>{let s=h.current;if(!s)return null;h.current=null,k(!1);let u=y.current;return u?.hasPointerCapture?.(s.pointerId)&&u.releasePointerCapture(s.pointerId),s});M.useEffect(()=>{if(!x)return;let s=u=>{if(u.key!=="Escape")return;let v=K();v&&(E(v.startWidth),z())};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[x,K,E,z]);let Re=(0,L.useComposedEventHandlers)(i.onPointerDown,s=>{s.button===0&&(s.preventDefault(),s.stopPropagation(),h.current={startX:s.clientX,startWidth:X(),pointerId:s.pointerId},k(!0),s.currentTarget.setPointerCapture?.(s.pointerId))}),U=(0,L.useComposedEventHandlers)(i.onPointerMove,s=>{let u=h.current;if(!u)return;let ge=(0,O.resolveDirection)(s.currentTarget,N)==="rtl"?u.startX-s.clientX:s.clientX-u.startX;E(u.startWidth+ge)}),J=(0,L.useComposedEventHandlers)(i.onKeyDown,s=>{let u=(0,O.directionalKey)(s.key,s.currentTarget,N);if(u==="ArrowRight")E(X()+w);else if(u==="ArrowLeft")E(X()-w);else if(s.key==="Home")E(P);else if(s.key==="End")E(f);else return;s.preventDefault(),s.stopPropagation()});return g===void 0?null:(0,st.jsx)(L.Primitive.span,{role:"separator","aria-orientation":"vertical","aria-label":n??b.resizeLabel??"Resize column","aria-valuenow":Math.round(C??P),"aria-valuemin":P,"aria-valuemax":f,tabIndex:0,"data-skdx-table-resizer":"","data-dragging":x?"":void 0,...i,...(0,it.skdxPart)("table","column-resize-trigger",i.className),ref:H,onPointerDown:Re,onPointerMove:U,onPointerUp:(0,L.composeEventHandlers)(i.onPointerUp,()=>{K()&&z()}),onPointerCancel:(0,L.composeEventHandlers)(i.onPointerCancel,()=>{K()&&z()}),onKeyDown:J,onKeyUp:(0,L.composeEventHandlers)(i.onKeyUp,s=>{po.has(s.key)&&z()})})};me.displayName="TableColumnResizeTrigger";var I=require("react/jsx-runtime");function mt(e){return D.Children.toArray(e).some(t=>D.isValidElement(t)?t.type===Y?!0:t.type===D.Fragment&&mt(t.props.children):!1)}function bo(e,t){if(e)return t==="asc"?"ascending":t==="desc"?"descending":"none"}function To(e,t,o){if(e)return o.find(r=>r.columnKey===t)?.direction}function Ro(e,t){let o=e&&D.isValidElement(t)?t:null,r=o?o.props.children:t;return{asChildTarget:o,label:r}}function go(e,t){return e===void 0?t:{...t,width:e,"--skdx-table-column-width":`${e}px`}}var V=({columnKey:e,sortable:t,resizable:o=!1,minWidth:r=40,maxWidth:n=1e3,resizeLabel:l="Resize column",resizeStep:i=8,children:m,style:b,ref:N,...y})=>{let H=d("TableHeaderCell"),{registerHeaderCell:h}=H;D.useEffect(()=>h(),[h]);let x=t===!0&&e!==void 0,k=To(x,e,H.sortList),g=bo(x,k),P=o&&e!==void 0,f=e===void 0?void 0:H.columnWidths[e],{asChildTarget:w,label:C}=Ro(y.asChild,m),W=(0,I.jsxs)(I.Fragment,{children:[x&&!mt(C)?(0,I.jsx)(Y,{children:C}):C,P?(0,I.jsx)(me,{}):null]});return(0,I.jsx)(Pe,{columnKey:e,sortable:x,minWidth:r,maxWidth:n,resizeLabel:l,resizeStep:i,children:(0,I.jsx)(dt.Primitive.th,{"aria-sort":g,"data-sort-direction":k,"data-resizable":P?"":void 0,style:go(f,b),...y,...(0,ct.skdxPart)("table","header-cell",y.className),ref:N,children:w?D.cloneElement(w,void 0,W):W})})};V.displayName="TableHeaderCell";var ft=require("../utils/part.cjs"),fe=require("../utils/primitive.cjs");var ut=require("react/jsx-runtime"),Co='button, a, input, [role="button"]',F=({rowId:e,ref:t,...o})=>{let r=d("TableRow"),n=e!==void 0&&r.isRowSelected(e),l=r.selectionMode!=="none"&&e!==void 0;return(0,ut.jsx)(fe.Primitive.tr,{"data-state":n?"selected":void 0,"data-row-id":l?e:void 0,...o,...(0,ft.skdxPart)("table","row",o.className),ref:t,onClick:(0,fe.composeEventHandlers)(o.onClick,i=>{!l||i.target.closest(Co)||r.toggleRow(e,i.shiftKey)})})};F.displayName="TableRow";var pt=require("../checkbox/Checkbox.cjs"),bt=require("../utils/part.cjs"),Tt=require("../utils/primitive.cjs");var Rt=require("react/jsx-runtime"),ue=({rowId:e,ref:t,...o})=>{let r=d("TableRowSelectCheckbox");return(0,Rt.jsx)(pt.Checkbox,{...o,...(0,bt.skdxPart)("table","row-select-checkbox",o.className),ref:t,checked:r.isRowSelected(e),"data-skdx-table-row-select":"",onClick:(0,Tt.composeEventHandlers)(o.onClick,n=>{o.readOnly||r.toggleRow(e,n.shiftKey)})})};ue.displayName="TableRowSelectCheckbox";var gt=require("../checkbox/Checkbox.cjs"),Ct=require("../utils/part.cjs"),xt=require("../utils/primitive.cjs");var yt=require("react/jsx-runtime");function St(e,t){let o=`${t} ${t===1?"row":"rows"}`;return e==="page"?`Select all ${o} on this page`:`Select all ${o}`}function xo(e,t){return e.isAllSelected(t)?!0:e.isSomeSelected(t)?"indeterminate":!1}var pe=({rowIds:e,scope:t,getSelectAllLabel:o=St,ref:r,...n})=>{let l=d("TableSelectAllCheckbox"),i=xo(l,e);return(0,yt.jsx)(gt.Checkbox,{"aria-label":o(t,e.length),...n,...(0,Ct.skdxPart)("table","select-all-checkbox",n.className),ref:r,checked:i,"data-skdx-table-select-all":"","data-scope":t,onClick:(0,xt.composeEventHandlers)(n.onClick,()=>{n.readOnly||l.toggleAll(e)})})};pe.displayName="TableSelectAllCheckbox";var p=require("react/jsx-runtime");function be(e,t){return e[t]}function ke(e){return typeof e=="string"?e:String(e)}function So(e,t){return typeof e=="number"&&typeof t=="number"?e-t:e instanceof Date&&t instanceof Date?e.getTime()-t.getTime():ke(e??"").localeCompare(ke(t??""))}function yo(e,t){return t.length===0?[...e]:[...e].sort((o,r)=>{for(let{columnKey:n,direction:l}of t){let i=So(be(o,n),be(r,n));if(i!==0)return l==="desc"?-i:i}return 0})}function ho(e,t){let o=be(e,"id");return String(typeof o=="string"||typeof o=="number"?o:t)}function Po(e,t,o){return t.cell?t.cell(e):o?o(e,t):ke(be(e,t.key)??"")}function ht({size:e,columns:t,data:o,sortable:r,selectable:n,expandable:l,renderExpanded:i,resizable:m,empty:b,caption:N,renderCell:y,rowId:H=ho,getRowLabel:h}){let x=d("Table"),k=Math.max(t.length+(n?1:0)+(l?1:0),1),g=Te.useMemo(()=>yo(o,x.sortList),[o,x.sortList]),P=g.map((f,w)=>H(f,w));return(0,p.jsxs)(p.Fragment,{children:[N?(0,p.jsx)(oe,{children:N}):null,(0,p.jsx)(se,{children:(0,p.jsxs)(F,{children:[n?(0,p.jsx)(V,{children:(0,p.jsx)(pe,{scope:"page",rowIds:P,size:e})}):null,l?(0,p.jsx)(V,{"aria-hidden":"true"}):null,t.map(f=>(0,p.jsx)(V,{columnKey:f.key,sortable:f.sortable??r,resizable:f.resizable??m,minWidth:f.minWidth,maxWidth:f.maxWidth,children:f.header??f.key},f.key))]})}),(0,p.jsx)(te,{children:g.length===0&&b?(0,p.jsx)(re,{colSpan:k,children:b}):g.map((f,w)=>{let C=P[w],W=h?.(f,w)??`row ${C}`;return(0,p.jsxs)(Te.Fragment,{children:[(0,p.jsxs)(F,{rowId:C,children:[n?(0,p.jsx)($,{children:(0,p.jsx)(ue,{rowId:C,"aria-label":`Select ${W}`,size:e})}):null,l?(0,p.jsx)($,{children:(0,p.jsx)(ie,{rowId:C,"aria-label":`Details for ${W}`})}):null,t.map(E=>(0,p.jsx)($,{children:Po(f,E,y)},E.key))]}),l?(0,p.jsx)(ne,{rowId:C,colSpan:k,children:i?.(f)}):null]},C)})})]})}var q=require("react/jsx-runtime");function Pt(e,t){return e.size===t.size&&[...t].every(o=>e.has(o))?e:t}function kt(e){return e===void 0?new Set:e instanceof Set?e:new Set(e)}var wt=[],Et={},Nt=[];function ko(e,t,o){let r=e.find(l=>l.columnKey===t),n="asc";return r!==void 0&&(n=r.direction==="asc"?"desc":null),o?n===null?e.filter(l=>l.columnKey!==t):r===void 0?[...e,{columnKey:t,direction:n}]:e.map(l=>l.columnKey===t?{columnKey:t,direction:n}:l):n===null?[]:[{columnKey:t,direction:n}]}function It(e,t){return t===null?`${e} not sorted`:`${e} sorted ${t==="asc"?"ascending":"descending"}`}var[Mt,d]=(0,we.createSafeContext)("Table"),[Pe,_]=(0,we.createSafeContext)("TableHeaderCell",{});function B(e,t){return`${e}-detail-${t}`}var Ee=({sort:e,defaultSort:t=Nt,onSortChange:o,multiSort:r=!1,selected:n,defaultSelected:l,onSelectedChange:i,selectionMode:m="none",getSortLabel:b=It,expandedRowIds:N,defaultExpandedRowIds:y=wt,onExpandedRowIdsChange:H,columnWidths:h,defaultColumnWidths:x,onColumnWidthsChange:k,onColumnWidthsCommit:g,rowCount:P,columnCount:f,children:w,ref:C,density:W,stickyHeader:E,...z})=>{let X=c.useId(),K=c.useRef(null),Re=(0,Wt.useComposedRefs)(C,K),[U=Nt,J]=(0,G.useControllableState)({prop:e,defaultProp:t,onChange:o}),s=c.useMemo(()=>n===void 0?void 0:kt(n),[n]),[u=new Set,v]=(0,G.useControllableState)({prop:s,defaultProp:kt(l??[]),onChange:a=>i?.([...a])}),ge=c.useCallback((a,T=a)=>{let R=ko(U,a,r);J(R);let S=R.find(A=>A.columnKey===a)?.direction??null;(0,Dt.announce)(b(T,S))},[U,r,J,b]),He=c.useCallback(()=>{let a=K.current;return a?[...a.querySelectorAll(":scope > tbody > tr[data-row-id]")].map(R=>R.dataset.rowId):[]},[]),We=c.useRef(null),Bt=c.useCallback((a,T=!1)=>{if(m==="none")return;let R=We.current;if(T&&m==="multiple"&&R!==null&&R!==a){let S=He(),A=S.indexOf(R),Se=S.indexOf(a);if(A!==-1&&Se!==-1){let to=S.slice(Math.min(A,Se),Math.max(A,Se)+1);v((Me=new Set)=>Pt(Me,new Set([...Me,...to])));return}}We.current=a,v((S=new Set)=>{if(m==="single")return S.has(a)&&S.size===1?new Set:new Set([a]);let A=new Set(S);return A.has(a)?A.delete(a):A.add(a),A})},[m,v,He]),[De=wt,Ae]=(0,G.useControllableState)({prop:N,defaultProp:y,onChange:H}),Ce=c.useMemo(()=>new Set(De),[De]),[Z=Et,Le]=(0,G.useControllableState)({prop:h,defaultProp:x??Et,onChange:k}),Yt=c.useCallback(a=>{Ae((T=[])=>T.includes(a)?T.filter(R=>R!==a):[...T,a])},[Ae]),Gt=c.useCallback(a=>Ce.has(a),[Ce]),Q=c.useRef(Z);c.useLayoutEffect(()=>{Q.current=Z},[Z]);let qt=c.useCallback((a,T)=>{let R=Q.current;if(R[a]===T)return;let S={...R,[a]:T};Q.current=S,Le(S)},[Le]),ze=(0,vt.useCallbackRef)(g),Jt=c.useCallback(()=>{ze(Q.current)},[ze]),Zt=c.useCallback(a=>u.has(a),[u]),xe=c.useCallback(a=>a.length>0&&a.every(T=>u.has(T)),[u]),Qt=c.useCallback(a=>a.some(T=>u.has(T))&&!xe(a),[u,xe]),jt=c.useCallback(a=>{m!=="none"&&v((T=new Set)=>{if(a.length>0&&a.every(R=>T.has(R))){let R=new Set(T);return a.forEach(S=>R.delete(S)),R}return Pt(T,new Set([...T,...a]))})},[m,v]),[ve,Ie]=c.useState(0),eo=c.useCallback(()=>(Ie(a=>a+1),()=>Ie(a=>a-1)),[]);return(0,q.jsx)(Mt,{tableId:X,headerCellCount:ve>0?ve:f??1,registerHeaderCell:eo,sortList:U,multiSort:r,selected:u,selectionMode:m,toggleSort:ge,toggleRow:Bt,isRowSelected:Zt,toggleAll:jt,isAllSelected:xe,isSomeSelected:Qt,expandedRows:Ce,toggleRowExpanded:Yt,isRowExpanded:Gt,columnWidths:Z,setColumnWidth:qt,commitColumnWidths:Jt,children:(0,q.jsx)(Lt.Primitive.table,{"aria-rowcount":P,"aria-colcount":f,...z,...(0,Ht.appearanceAttrs)({density:W,stickyHeader:E},z),...(0,At.skdxPart)("table","root",z.className),ref:Re,children:w})})};Ee.displayName="TableRoot";function Ne({columns:e,data:t,sortable:o=!1,selectable:r=!1,expandable:n=!1,renderExpanded:l,resizable:i=!1,empty:m,caption:b,renderCell:N,rowId:y,getRowLabel:H,selectionMode:h,size:x,ref:k,...g}){return(0,q.jsx)(Ee,{...g,"data-size":void 0,selectionMode:h??(r?"multiple":"none"),ref:k,children:(0,q.jsx)(ht,{size:(0,zt.recipeAxis)(x,g,"data-size"),columns:e,data:t,sortable:o,selectable:r,expandable:n,renderExpanded:l,resizable:i,empty:m,caption:b,renderCell:N,rowId:y,getRowLabel:H})})}Ne.displayName="Table";var Kt=require("../utils/part.cjs"),$t=require("../utils/primitive.cjs"),Ot=require("react/jsx-runtime"),_t=({ref:e,...t})=>(0,Ot.jsx)($t.Primitive.tfoot,{...t,...(0,Kt.skdxPart)("table","footer",t.className),ref:e});_t.displayName="TableFooter";var Vt=require("../utils/part.cjs"),Ft=require("../utils/primitive.cjs");var Ut=require("react/jsx-runtime"),Xt=({columnKey:e,ref:t,...o})=>{let r=d("TableSortIndicator"),n=_("TableSortIndicator"),l=e??n.columnKey,i=l===void 0?-1:r.sortList.findIndex(b=>b.columnKey===l),m=r.sortList[i]?.direction??"none";return(0,Ut.jsx)(Ft.Primitive.span,{"aria-hidden":"true","data-skdx-table-sort-indicator":"","data-sort-direction":m,"data-sort-index":r.multiSort&&i!==-1?i:void 0,...o,...(0,Vt.skdxPart)("table","sort-indicator",o.className),ref:t})};Xt.displayName="TableSortIndicator";0&&(module.exports={Table,TableBody,TableCaption,TableCell,TableColumnHeaderSortTrigger,TableColumnResizeTrigger,TableEmpty,TableExpandTrigger,TableExpandedRow,TableFooter,TableHeader,TableHeaderCell,TableHeaderCellProvider,TableProvider,TableRoot,TableRow,TableRowSelectCheckbox,TableSelectAllCheckbox,TableSortIndicator,defaultGetSortLabel,defaultSelectAllLabel,tableDetailRowId,useTableContext,useTableHeaderCellContext});
2
+ "use strict";var br=Object.create;var ae=Object.defineProperty;var Tr=Object.getOwnPropertyDescriptor;var Rr=Object.getOwnPropertyNames;var Cr=Object.getPrototypeOf,gr=Object.prototype.hasOwnProperty;var xr=(e,t)=>{for(var r in t)ae(e,r,{get:t[r],enumerable:!0})},Xe=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Rr(t))!gr.call(e,a)&&a!==r&&ae(e,a,{get:()=>t[a],enumerable:!(o=Tr(t,a))||o.enumerable});return e};var G=(e,t,r)=>(r=e!=null?br(Cr(e)):{},Xe(t||!e||!e.__esModule?ae(r,"default",{value:e,enumerable:!0}):r,e)),yr=e=>Xe(ae({},"__esModule",{value:!0}),e);var _r={};xr(_r,{Table:()=>De,TableBody:()=>ne,TableCaption:()=>le,TableCell:()=>_,TableColumnHeaderFilterInput:()=>q,TableColumnHeaderSortTrigger:()=>Z,TableColumnResizeTrigger:()=>Te,TableEmpty:()=>ie,TableExpandTrigger:()=>me,TableExpandedRow:()=>se,TableFooter:()=>qt,TableHeader:()=>fe,TableHeaderCell:()=>X,TableHeaderCellProvider:()=>We,TableProvider:()=>Yt,TableRoot:()=>Ie,TableRow:()=>U,TableRowSelectCheckbox:()=>Ce,TableSelectAllCheckbox:()=>ge,TableSortIndicator:()=>er,defaultGetSortLabel:()=>Bt,defaultSelectAllLabel:()=>Ht,tableDetailRowId:()=>J,useTableContext:()=>c,useTableHeaderCellContext:()=>z});module.exports=yr(_r);var m=G(require("react"),1),Kt=require("../utils/appearance.cjs"),$t=require("../utils/composeRefs.cjs"),Le=require("../utils/createContext.cjs"),_t=require("../utils/liveAnnouncer.cjs"),Ot=require("../utils/part.cjs"),Vt=require("../utils/primitive.cjs"),Xt=require("../utils/recipeAxis.cjs"),Ut=require("../utils/useCallbackRef.cjs"),j=require("../utils/useControllableState.cjs");var ye=G(require("react"),1);var Ue=require("../utils/part.cjs"),Be=require("../utils/primitive.cjs"),Ye=require("react/jsx-runtime"),ne=({ref:e,...t})=>(0,Ye.jsx)(Be.Primitive.tbody,{...t,...(0,Ue.skdxPart)("table","body",t.className),ref:e});ne.displayName="TableBody";var Ge=require("../utils/part.cjs"),Je=require("../utils/primitive.cjs"),qe=require("react/jsx-runtime"),le=({ref:e,...t})=>(0,qe.jsx)(Je.Primitive.caption,{...t,...(0,Ge.skdxPart)("table","caption",t.className),ref:e});le.displayName="TableCaption";var Ze=require("../utils/part.cjs"),Qe=require("../utils/primitive.cjs"),je=require("react/jsx-runtime"),_=({ref:e,...t})=>(0,je.jsx)(Qe.Primitive.td,{...t,...(0,Ze.skdxPart)("table","cell",t.className),ref:e});_.displayName="TableCell";var et=require("../utils/part.cjs"),tt=require("../utils/primitive.cjs");var Ee=require("react/jsx-runtime"),ie=({colSpan:e,children:t,ref:r,...o})=>{let a=c("TableEmpty");return(0,Ee.jsx)(tt.Primitive.tr,{"data-state":"empty","data-skdx-table-empty":"",...o,...(0,et.skdxPart)("table","empty",o.className),ref:r,children:o.asChild?t:(0,Ee.jsx)("td",{colSpan:e??a.headerCellCount,children:t})})};ie.displayName="TableEmpty";var rt=require("../utils/part.cjs"),ot=require("../utils/primitive.cjs");var He=require("react/jsx-runtime"),se=({rowId:e,colSpan:t,children:r,ref:o,...a})=>{let n=c("TableExpandedRow"),l=n.isRowExpanded(e);return(0,He.jsx)(ot.Primitive.tr,{id:J(n.tableId,e),"data-state":l?"expanded":"collapsed","data-skdx-table-detail-row":"",hidden:!l,...a,...(0,rt.skdxPart)("table","expanded-row",a.className),ref:o,children:a.asChild?r:(0,He.jsx)("td",{colSpan:t??n.headerCellCount,children:r})})};se.displayName="TableExpandedRow";var at=require("../utils/Glyph.cjs"),nt=require("../utils/part.cjs"),ce=require("../utils/primitive.cjs");var de=require("react/jsx-runtime"),Sr=()=>(0,de.jsx)(at.Glyph,{name:"chevron-right"}),me=({rowId:e,ref:t,...r})=>{let o=c("TableExpandTrigger"),a=o.isRowExpanded(e);return(0,de.jsx)(ce.Primitive.button,{type:"button","aria-expanded":a,"aria-controls":J(o.tableId,e),"data-state":a?"expanded":"collapsed","data-skdx-table-expand-trigger":"",...r,...(0,nt.skdxPart)("table","expand-trigger",r.className),ref:t,onClick:(0,ce.composeEventHandlers)(r.onClick,n=>{n.stopPropagation(),o.toggleRowExpanded(e)}),children:r.children??(0,de.jsx)(Sr,{})})};me.displayName="TableExpandTrigger";var lt=require("../utils/part.cjs"),it=require("../utils/primitive.cjs"),st=require("react/jsx-runtime"),fe=({ref:e,...t})=>(0,st.jsx)(it.Primitive.thead,{...t,...(0,lt.skdxPart)("table","header",t.className),ref:e});fe.displayName="TableHeader";var F=G(require("react"),1),Rt=require("../utils/part.cjs"),Ct=require("../utils/primitive.cjs");var dt=require("../utils/part.cjs"),ue=require("../utils/primitive.cjs");var ct=require("react/jsx-runtime"),q=({columnKey:e,ref:t,...r})=>{let o=c("TableColumnHeaderFilterInput"),a=z("TableColumnHeaderFilterInput"),n=e??(a.filterable?a.columnKey:void 0);if(n===void 0)return null;let l=o.filterMap[n]??"";return(0,ct.jsx)(ue.Primitive.input,{type:"search","aria-label":a.filterLabel??`Filter ${n}`,"data-skdx-table-filter-input":"","data-filtered":l===""?void 0:"",...r,value:l,...(0,dt.skdxPart)("table","column-header-filter-input",r.className),ref:t,onChange:(0,ue.composeEventHandlers)(r.onChange,f=>{o.setColumnFilter(n,f.currentTarget.value)})})};q.displayName="TableColumnHeaderFilterInput";var mt=require("../utils/part.cjs"),pe=require("../utils/primitive.cjs");var ft=require("react/jsx-runtime"),Z=({columnKey:e,ref:t,...r})=>{let o=c("TableColumnHeaderSortTrigger"),a=z("TableColumnHeaderSortTrigger"),n=e??(a.sortable?a.columnKey:void 0);if(n===void 0)return null;let l=o.sortList.findIndex(u=>u.columnKey===n),f=o.sortList[l]?.direction;return(0,ft.jsx)(pe.Primitive.button,{type:"button","data-skdx-table-sort-trigger":"","data-sort-direction":f,"data-sort-index":o.multiSort&&l!==-1?l:void 0,...r,...(0,mt.skdxPart)("table","column-header-sort-trigger",r.className),ref:t,onClick:(0,pe.composeEventHandlers)(r.onClick,u=>{o.toggleSort(n,u.currentTarget.textContent?.trim()||n)})})};Z.displayName="TableColumnHeaderSortTrigger";var M=G(require("react"),1),ut=require("../utils/clamp.cjs"),pt=require("../utils/composeRefs.cjs"),V=require("../utils/direction.cjs"),bt=require("../utils/part.cjs"),v=require("../utils/primitive.cjs"),be=require("../utils/useCallbackRef.cjs");var Tt=require("react/jsx-runtime"),hr=40,Pr=1e3,kr=8,wr=new Set(["ArrowLeft","ArrowRight","Home","End"]),Te=({columnKey:e,minWidth:t,maxWidth:r,step:o,label:a,ref:n,...l})=>{let f=c("TableColumnResizeTrigger"),u=z("TableColumnResizeTrigger"),S=(0,V.useDirection)(),R=M.useRef(null),L=(0,pt.useComposedRefs)(n,R),h=M.useRef(null),[P,k]=M.useState(!1),C=e??u.columnKey,x=t??u.minWidth??hr,I=r??u.maxWidth??Pr,d=o??u.resizeStep??kr,N=C===void 0?void 0:f.columnWidths[C],y=M.useRef(!1),w=(0,be.useCallbackRef)(s=>{if(C===void 0)return;let T=(0,ut.clamp)(Math.round(s),x,I);T!==f.columnWidths[C]&&(y.current=!0),f.setColumnWidth(C,T)}),H=(0,be.useCallbackRef)(()=>{y.current&&(y.current=!1,f.commitColumnWidths())}),K=()=>N!==void 0?N:(R.current?.closest("th")?.getBoundingClientRect().width??0)||x,A=(0,be.useCallbackRef)(()=>{let s=h.current;if(!s)return null;h.current=null,k(!1);let T=R.current;return T?.hasPointerCapture?.(s.pointerId)&&T.releasePointerCapture(s.pointerId),s});M.useEffect(()=>{if(!P)return;let s=T=>{if(T.key!=="Escape")return;let O=A();O&&(w(O.startWidth),H())};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[P,A,w,H]);let B=(0,v.useComposedEventHandlers)(l.onPointerDown,s=>{s.button===0&&(s.preventDefault(),s.stopPropagation(),h.current={startX:s.clientX,startWidth:K(),pointerId:s.pointerId},k(!0),s.currentTarget.setPointerCapture?.(s.pointerId))}),Se=(0,v.useComposedEventHandlers)(l.onPointerMove,s=>{let T=h.current;if(!T)return;let he=(0,V.resolveDirection)(s.currentTarget,S)==="rtl"?T.startX-s.clientX:s.clientX-T.startX;w(T.startWidth+he)}),te=(0,v.useComposedEventHandlers)(l.onKeyDown,s=>{let T=(0,V.directionalKey)(s.key,s.currentTarget,S);if(T==="ArrowRight")w(K()+d);else if(T==="ArrowLeft")w(K()-d);else if(s.key==="Home")w(x);else if(s.key==="End")w(I);else return;s.preventDefault(),s.stopPropagation()});return C===void 0?null:(0,Tt.jsx)(v.Primitive.span,{role:"separator","aria-orientation":"vertical","aria-label":a??u.resizeLabel??"Resize column","aria-valuenow":Math.round(N??x),"aria-valuemin":x,"aria-valuemax":I,tabIndex:0,"data-skdx-table-resizer":"","data-dragging":P?"":void 0,...l,...(0,bt.skdxPart)("table","column-resize-trigger",l.className),ref:L,onPointerDown:B,onPointerMove:Se,onPointerUp:(0,v.composeEventHandlers)(l.onPointerUp,()=>{A()&&H()}),onPointerCancel:(0,v.composeEventHandlers)(l.onPointerCancel,()=>{A()&&H()}),onKeyDown:te,onKeyUp:(0,v.composeEventHandlers)(l.onKeyUp,s=>{wr.has(s.key)&&H()})})};Te.displayName="TableColumnResizeTrigger";var W=require("react/jsx-runtime");function Ne(e,t){return F.Children.toArray(e).some(r=>F.isValidElement(r)?r.type===t?!0:r.type===F.Fragment&&Ne(r.props.children,t):!1)}function Er(e,t){if(e)return t==="asc"?"ascending":t==="desc"?"descending":"none"}function Hr(e,t,r){if(e)return r.find(o=>o.columnKey===t)?.direction}function Nr(e,t){let r=e&&F.isValidElement(t)?t:null,o=r?r.props.children:t;return{asChildTarget:r,label:o}}function Wr(e,t,r){let o=e===!0&&t!==void 0;return{filterable:o,filtered:o&&(r[t]??"")!==""}}function Fr({label:e,sortable:t,filterable:r,canResize:o}){return(0,W.jsxs)(W.Fragment,{children:[t&&!Ne(e,Z)?(0,W.jsx)(Z,{children:e}):e,r&&!Ne(e,q)?(0,W.jsx)(q,{}):null,o?(0,W.jsx)(Te,{}):null]})}function Lr(e,t){return e===void 0?t:{...t,width:e,"--skdx-table-column-width":`${e}px`}}var X=({columnKey:e,sortable:t,filterable:r,filterLabel:o,resizable:a=!1,minWidth:n=40,maxWidth:l=1e3,resizeLabel:f="Resize column",resizeStep:u=8,children:S,style:R,ref:L,...h})=>{let P=c("TableHeaderCell"),{registerHeaderCell:k}=P;F.useEffect(()=>k(),[k]);let C=t===!0&&e!==void 0,x=Hr(C,e,P.sortList),I=Er(C,x),{filterable:d,filtered:N}=Wr(r,e,P.filterMap),y=a&&e!==void 0,w=e===void 0?void 0:P.columnWidths[e],{asChildTarget:H,label:K}=Nr(h.asChild,S),A=(0,W.jsx)(Fr,{label:K,sortable:C,filterable:d,canResize:y});return(0,W.jsx)(We,{columnKey:e,sortable:C,filterable:d,filterLabel:o,minWidth:n,maxWidth:l,resizeLabel:f,resizeStep:u,children:(0,W.jsx)(Ct.Primitive.th,{"aria-sort":I,"data-sort-direction":x,"data-filterable":d?"":void 0,"data-filtered":N?"":void 0,"data-resizable":y?"":void 0,style:Lr(w,R),...h,...(0,Rt.skdxPart)("table","header-cell",h.className),ref:L,children:H?F.cloneElement(H,void 0,A):A})})};X.displayName="TableHeaderCell";var gt=require("../utils/part.cjs"),Re=require("../utils/primitive.cjs");var xt=require("react/jsx-runtime"),Ir='button, a, input, [role="button"]',U=({rowId:e,ref:t,...r})=>{let o=c("TableRow"),a=e!==void 0&&o.isRowSelected(e),n=o.selectionMode!=="none"&&e!==void 0;return(0,xt.jsx)(Re.Primitive.tr,{"data-state":a?"selected":void 0,"data-row-id":n?e:void 0,...r,...(0,gt.skdxPart)("table","row",r.className),ref:t,onClick:(0,Re.composeEventHandlers)(r.onClick,l=>{!n||l.target.closest(Ir)||o.toggleRow(e,l.shiftKey)})})};U.displayName="TableRow";var yt=require("../checkbox/Checkbox.cjs"),St=require("../utils/part.cjs"),ht=require("../utils/primitive.cjs");var Pt=require("react/jsx-runtime"),Ce=({rowId:e,ref:t,...r})=>{let o=c("TableRowSelectCheckbox");return(0,Pt.jsx)(yt.Checkbox,{...r,...(0,St.skdxPart)("table","row-select-checkbox",r.className),ref:t,checked:o.isRowSelected(e),"data-skdx-table-row-select":"",onClick:(0,ht.composeEventHandlers)(r.onClick,a=>{r.readOnly||o.toggleRow(e,a.shiftKey)})})};Ce.displayName="TableRowSelectCheckbox";var kt=require("../checkbox/Checkbox.cjs"),wt=require("../utils/part.cjs"),Et=require("../utils/primitive.cjs");var Nt=require("react/jsx-runtime");function Ht(e,t){let r=`${t} ${t===1?"row":"rows"}`;return e==="page"?`Select all ${r} on this page`:`Select all ${r}`}function Dr(e,t){return e.isAllSelected(t)?!0:e.isSomeSelected(t)?"indeterminate":!1}var ge=({rowIds:e,scope:t,getSelectAllLabel:r=Ht,ref:o,...a})=>{let n=c("TableSelectAllCheckbox"),l=Dr(n,e);return(0,Nt.jsx)(kt.Checkbox,{"aria-label":r(t,e.length),...a,...(0,wt.skdxPart)("table","select-all-checkbox",a.className),ref:o,checked:l,"data-skdx-table-select-all":"","data-scope":t,onClick:(0,Et.composeEventHandlers)(a.onClick,()=>{a.readOnly||n.toggleAll(e)})})};ge.displayName="TableSelectAllCheckbox";var p=require("react/jsx-runtime");function Q(e,t){return e[t]}function xe(e){return typeof e=="string"?e:String(e)}function vr(e,t){return typeof e=="number"&&typeof t=="number"?e-t:e instanceof Date&&t instanceof Date?e.getTime()-t.getTime():xe(e??"").localeCompare(xe(t??""))}function Ar(e,t){return t.length===0?[...e]:[...e].sort((r,o)=>{for(let{columnKey:a,direction:n}of t){let l=vr(Q(r,a),Q(o,a));if(l!==0)return n==="desc"?-l:l}return 0})}function zr(e,t){let r=Object.entries(t).filter(([,o])=>o!=="");return r.length===0?[...e]:e.filter(o=>r.every(([a,n])=>xe(Q(o,a)??"").toLowerCase().includes(n.toLowerCase())))}function Mr(e,t){let r=Q(e,"id");return String(typeof r=="string"||typeof r=="number"?r:t)}function Kr(e,t,r){return t.cell?t.cell(e):r?r(e,t):xe(Q(e,t.key)??"")}function Wt({size:e,columns:t,data:r,sortable:o,selectable:a,expandable:n,renderExpanded:l,resizable:f,filterable:u,empty:S,caption:R,renderCell:L,rowId:h=Mr,getRowLabel:P}){let k=c("Table"),C=Math.max(t.length+(a?1:0)+(n?1:0),1),x=ye.useMemo(()=>Ar(zr(r,k.filterMap),k.sortList),[r,k.filterMap,k.sortList]),I=x.map((d,N)=>h(d,N));return(0,p.jsxs)(p.Fragment,{children:[R?(0,p.jsx)(le,{children:R}):null,(0,p.jsx)(fe,{children:(0,p.jsxs)(U,{children:[a?(0,p.jsx)(X,{children:(0,p.jsx)(ge,{scope:"page",rowIds:I,size:e})}):null,n?(0,p.jsx)(X,{"aria-hidden":"true"}):null,t.map(d=>(0,p.jsx)(X,{columnKey:d.key,sortable:d.sortable??o,filterable:d.filterable??u,filterLabel:`Filter ${typeof d.header=="string"?d.header:d.key}`,resizable:d.resizable??f,minWidth:d.minWidth,maxWidth:d.maxWidth,children:d.header??d.key},d.key))]})}),(0,p.jsx)(ne,{children:x.length===0&&S?(0,p.jsx)(ie,{colSpan:C,children:S}):x.map((d,N)=>{let y=I[N],w=P?.(d,N)??`row ${y}`;return(0,p.jsxs)(ye.Fragment,{children:[(0,p.jsxs)(U,{rowId:y,children:[a?(0,p.jsx)(_,{children:(0,p.jsx)(Ce,{rowId:y,"aria-label":`Select ${w}`,size:e})}):null,n?(0,p.jsx)(_,{children:(0,p.jsx)(me,{rowId:y,"aria-label":`Details for ${w}`})}):null,t.map(H=>(0,p.jsx)(_,{children:Kr(d,H,L)},H.key))]}),n?(0,p.jsx)(se,{rowId:y,colSpan:C,children:l?.(d)}):null]},y)})})]})}var Ft=G(require("react"),1),Lt=require("../utils/useControllableState.cjs"),Fe={};function It(e,t,r){let[o=Fe,a]=(0,Lt.useControllableState)({prop:e,defaultProp:t??Fe,onChange:r}),n=Ft.useCallback((l,f)=>{a((u=Fe)=>{if((u[l]??"")===f)return u;let S={...u};return f===""?delete S[l]:S[l]=f,S})},[a]);return[o,n]}var ee=require("react/jsx-runtime");function Dt(e,t){return e.size===t.size&&[...t].every(r=>e.has(r))?e:t}function vt(e){return e===void 0?new Set:e instanceof Set?e:new Set(e)}var At=[],zt={},Mt=[];function $r(e,t,r){let o=e.find(n=>n.columnKey===t),a="asc";return o!==void 0&&(a=o.direction==="asc"?"desc":null),r?a===null?e.filter(n=>n.columnKey!==t):o===void 0?[...e,{columnKey:t,direction:a}]:e.map(n=>n.columnKey===t?{columnKey:t,direction:a}:n):a===null?[]:[{columnKey:t,direction:a}]}function Bt(e,t){return t===null?`${e} not sorted`:`${e} sorted ${t==="asc"?"ascending":"descending"}`}var[Yt,c]=(0,Le.createSafeContext)("Table"),[We,z]=(0,Le.createSafeContext)("TableHeaderCell",{});function J(e,t){return`${e}-detail-${t}`}var Ie=({sort:e,defaultSort:t=Mt,onSortChange:r,filter:o,defaultFilter:a,onFilterChange:n,multiSort:l=!1,selected:f,defaultSelected:u,onSelectedChange:S,selectionMode:R="none",getSortLabel:L=Bt,expandedRowIds:h,defaultExpandedRowIds:P=At,onExpandedRowIdsChange:k,columnWidths:C,defaultColumnWidths:x,onColumnWidthsChange:I,onColumnWidthsCommit:d,rowCount:N,columnCount:y,children:w,ref:H,density:K,stickyHeader:A,...B})=>{let Se=m.useId(),te=m.useRef(null),s=(0,$t.useComposedRefs)(H,te),[T=Mt,O]=(0,j.useControllableState)({prop:e,defaultProp:t,onChange:r}),he=m.useMemo(()=>f===void 0?void 0:vt(f),[f]),[$=new Set,Y]=(0,j.useControllableState)({prop:he,defaultProp:vt(u??[]),onChange:i=>S?.([...i])}),rr=m.useCallback((i,b=i)=>{let g=$r(T,i,l);O(g);let E=g.find(D=>D.columnKey===i)?.direction??null;(0,_t.announce)(L(b,E))},[T,l,O,L]),[or,ar]=It(o,a,n),ve=m.useCallback(()=>{let i=te.current;return i?[...i.querySelectorAll(":scope > tbody > tr[data-row-id]")].map(g=>g.dataset.rowId):[]},[]),Ae=m.useRef(null),nr=m.useCallback((i,b=!1)=>{if(R==="none")return;let g=Ae.current;if(b&&R==="multiple"&&g!==null&&g!==i){let E=ve(),D=E.indexOf(g),we=E.indexOf(i);if(D!==-1&&we!==-1){let pr=E.slice(Math.min(D,we),Math.max(D,we)+1);Y((Ve=new Set)=>Dt(Ve,new Set([...Ve,...pr])));return}}Ae.current=i,Y((E=new Set)=>{if(R==="single")return E.has(i)&&E.size===1?new Set:new Set([i]);let D=new Set(E);return D.has(i)?D.delete(i):D.add(i),D})},[R,Y,ve]),[ze=At,Me]=(0,j.useControllableState)({prop:h,defaultProp:P,onChange:k}),Pe=m.useMemo(()=>new Set(ze),[ze]),[re=zt,Ke]=(0,j.useControllableState)({prop:C,defaultProp:x??zt,onChange:I}),lr=m.useCallback(i=>{Me((b=[])=>b.includes(i)?b.filter(g=>g!==i):[...b,i])},[Me]),ir=m.useCallback(i=>Pe.has(i),[Pe]),oe=m.useRef(re);m.useLayoutEffect(()=>{oe.current=re},[re]);let sr=m.useCallback((i,b)=>{let g=oe.current;if(g[i]===b)return;let E={...g,[i]:b};oe.current=E,Ke(E)},[Ke]),$e=(0,Ut.useCallbackRef)(d),dr=m.useCallback(()=>{$e(oe.current)},[$e]),cr=m.useCallback(i=>$.has(i),[$]),ke=m.useCallback(i=>i.length>0&&i.every(b=>$.has(b)),[$]),mr=m.useCallback(i=>i.some(b=>$.has(b))&&!ke(i),[$,ke]),fr=m.useCallback(i=>{R!=="none"&&Y((b=new Set)=>{if(i.length>0&&i.every(g=>b.has(g))){let g=new Set(b);return i.forEach(E=>g.delete(E)),g}return Dt(b,new Set([...b,...i]))})},[R,Y]),[_e,Oe]=m.useState(0),ur=m.useCallback(()=>(Oe(i=>i+1),()=>Oe(i=>i-1)),[]);return(0,ee.jsx)(Yt,{tableId:Se,headerCellCount:_e>0?_e:y??1,registerHeaderCell:ur,sortList:T,multiSort:l,selected:$,selectionMode:R,toggleSort:rr,filterMap:or,setColumnFilter:ar,toggleRow:nr,isRowSelected:cr,toggleAll:fr,isAllSelected:ke,isSomeSelected:mr,expandedRows:Pe,toggleRowExpanded:lr,isRowExpanded:ir,columnWidths:re,setColumnWidth:sr,commitColumnWidths:dr,children:(0,ee.jsx)(Vt.Primitive.table,{"aria-rowcount":N,"aria-colcount":y,...B,...(0,Kt.appearanceAttrs)({density:K,stickyHeader:A},B),...(0,Ot.skdxPart)("table","root",B.className),ref:s,children:w})})};Ie.displayName="TableRoot";function De({columns:e,data:t,sortable:r=!1,selectable:o=!1,expandable:a=!1,renderExpanded:n,resizable:l=!1,filterable:f=!1,empty:u,caption:S,renderCell:R,rowId:L,getRowLabel:h,selectionMode:P,size:k,ref:C,...x}){return(0,ee.jsx)(Ie,{...x,"data-size":void 0,selectionMode:P??(o?"multiple":"none"),ref:C,children:(0,ee.jsx)(Wt,{size:(0,Xt.recipeAxis)(k,x,"data-size"),columns:e,data:t,sortable:r,selectable:o,expandable:a,renderExpanded:n,resizable:l,filterable:f,empty:u,caption:S,renderCell:R,rowId:L,getRowLabel:h})})}De.displayName="Table";var Gt=require("../utils/part.cjs"),Jt=require("../utils/primitive.cjs"),Zt=require("react/jsx-runtime"),qt=({ref:e,...t})=>(0,Zt.jsx)(Jt.Primitive.tfoot,{...t,...(0,Gt.skdxPart)("table","footer",t.className),ref:e});qt.displayName="TableFooter";var Qt=require("../utils/part.cjs"),jt=require("../utils/primitive.cjs");var tr=require("react/jsx-runtime"),er=({columnKey:e,ref:t,...r})=>{let o=c("TableSortIndicator"),a=z("TableSortIndicator"),n=e??a.columnKey,l=n===void 0?-1:o.sortList.findIndex(u=>u.columnKey===n),f=o.sortList[l]?.direction??"none";return(0,tr.jsx)(jt.Primitive.span,{"aria-hidden":"true","data-skdx-table-sort-indicator":"","data-sort-direction":f,"data-sort-index":o.multiSort&&l!==-1?l:void 0,...r,...(0,Qt.skdxPart)("table","sort-indicator",r.className),ref:t})};er.displayName="TableSortIndicator";0&&(module.exports={Table,TableBody,TableCaption,TableCell,TableColumnHeaderFilterInput,TableColumnHeaderSortTrigger,TableColumnResizeTrigger,TableEmpty,TableExpandTrigger,TableExpandedRow,TableFooter,TableHeader,TableHeaderCell,TableHeaderCellProvider,TableProvider,TableRoot,TableRow,TableRowSelectCheckbox,TableSelectAllCheckbox,TableSortIndicator,defaultGetSortLabel,defaultSelectAllLabel,tableDetailRowId,useTableContext,useTableHeaderCellContext});
@@ -53,10 +53,10 @@ export declare function tableDetailRowId(tableId: string, rowId: string): string
53
53
  * ```
54
54
  */
55
55
  export declare const TableRoot: {
56
- ({ sort: sortProp, defaultSort, onSortChange, multiSort, selected: selectedProp, defaultSelected, onSelectedChange, selectionMode, getSortLabel, expandedRowIds: expandedRowIdsProp, defaultExpandedRowIds, onExpandedRowIdsChange, columnWidths: columnWidthsProp, defaultColumnWidths, onColumnWidthsChange, onColumnWidthsCommit, rowCount, columnCount, children, ref: forwardedRef, density, stickyHeader, ...props }: TableRootProps): React.ReactNode;
56
+ ({ sort: sortProp, defaultSort, onSortChange, filter: filterProp, defaultFilter, onFilterChange, multiSort, selected: selectedProp, defaultSelected, onSelectedChange, selectionMode, getSortLabel, expandedRowIds: expandedRowIdsProp, defaultExpandedRowIds, onExpandedRowIdsChange, columnWidths: columnWidthsProp, defaultColumnWidths, onColumnWidthsChange, onColumnWidthsCommit, rowCount, columnCount, children, ref: forwardedRef, density, stickyHeader, ...props }: TableRootProps): React.ReactNode;
57
57
  displayName: string;
58
58
  };
59
- export declare function Table<T extends object>({ columns, data, sortable, selectable, expandable, renderExpanded, resizable, empty, caption, renderCell, rowId, getRowLabel, selectionMode, size, ref: forwardedRef, ...rootProps }: TableProps<T>): React.ReactNode;
59
+ export declare function Table<T extends object>({ columns, data, sortable, selectable, expandable, renderExpanded, resizable, filterable, empty, caption, renderCell, rowId, getRowLabel, selectionMode, size, ref: forwardedRef, ...rootProps }: TableProps<T>): React.ReactNode;
60
60
  export declare namespace Table {
61
61
  var displayName: string;
62
62
  }
@@ -53,10 +53,10 @@ export declare function tableDetailRowId(tableId: string, rowId: string): string
53
53
  * ```
54
54
  */
55
55
  export declare const TableRoot: {
56
- ({ sort: sortProp, defaultSort, onSortChange, multiSort, selected: selectedProp, defaultSelected, onSelectedChange, selectionMode, getSortLabel, expandedRowIds: expandedRowIdsProp, defaultExpandedRowIds, onExpandedRowIdsChange, columnWidths: columnWidthsProp, defaultColumnWidths, onColumnWidthsChange, onColumnWidthsCommit, rowCount, columnCount, children, ref: forwardedRef, density, stickyHeader, ...props }: TableRootProps): React.ReactNode;
56
+ ({ sort: sortProp, defaultSort, onSortChange, filter: filterProp, defaultFilter, onFilterChange, multiSort, selected: selectedProp, defaultSelected, onSelectedChange, selectionMode, getSortLabel, expandedRowIds: expandedRowIdsProp, defaultExpandedRowIds, onExpandedRowIdsChange, columnWidths: columnWidthsProp, defaultColumnWidths, onColumnWidthsChange, onColumnWidthsCommit, rowCount, columnCount, children, ref: forwardedRef, density, stickyHeader, ...props }: TableRootProps): React.ReactNode;
57
57
  displayName: string;
58
58
  };
59
- export declare function Table<T extends object>({ columns, data, sortable, selectable, expandable, renderExpanded, resizable, empty, caption, renderCell, rowId, getRowLabel, selectionMode, size, ref: forwardedRef, ...rootProps }: TableProps<T>): React.ReactNode;
59
+ export declare function Table<T extends object>({ columns, data, sortable, selectable, expandable, renderExpanded, resizable, filterable, empty, caption, renderCell, rowId, getRowLabel, selectionMode, size, ref: forwardedRef, ...rootProps }: TableProps<T>): React.ReactNode;
60
60
  export declare namespace Table {
61
61
  var displayName: string;
62
62
  }
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- import*as c from"react";import{appearanceAttrs as so}from"../utils/appearance.js";import{useComposedRefs as co}from"../utils/composeRefs.js";import{createSafeContext as Ke}from"../utils/createContext.js";import{announce as mo}from"../utils/liveAnnouncer.js";import{skdxPart as fo}from"../utils/part.js";import{Primitive as uo}from"../utils/primitive.js";import{recipeAxis as po}from"../utils/recipeAxis.js";import{useCallbackRef as bo}from"../utils/useCallbackRef.js";import{useControllableState as Q}from"../utils/useControllableState.js";import*as Z from"react";import{skdxPart as Ze}from"../utils/part.js";import{Primitive as Qe}from"../utils/primitive.js";import{jsx as je}from"react/jsx-runtime";var ae=({ref:e,...t})=>je(Qe.tbody,{...t,...Ze("table","body",t.className),ref:e});ae.displayName="TableBody";import{skdxPart as et}from"../utils/part.js";import{Primitive as tt}from"../utils/primitive.js";import{jsx as ot}from"react/jsx-runtime";var le=({ref:e,...t})=>ot(tt.caption,{...t,...et("table","caption",t.className),ref:e});le.displayName="TableCaption";import{skdxPart as rt}from"../utils/part.js";import{Primitive as nt}from"../utils/primitive.js";import{jsx as at}from"react/jsx-runtime";var M=({ref:e,...t})=>at(nt.td,{...t,...rt("table","cell",t.className),ref:e});M.displayName="TableCell";import{skdxPart as lt}from"../utils/part.js";import{Primitive as it}from"../utils/primitive.js";import{jsx as Ne}from"react/jsx-runtime";var ie=({colSpan:e,children:t,ref:o,...r})=>{let n=u("TableEmpty");return Ne(it.tr,{"data-state":"empty","data-skdx-table-empty":"",...r,...lt("table","empty",r.className),ref:o,children:r.asChild?t:Ne("td",{colSpan:e??n.headerCellCount,children:t})})};ie.displayName="TableEmpty";import{skdxPart as st}from"../utils/part.js";import{Primitive as ct}from"../utils/primitive.js";import{jsx as He}from"react/jsx-runtime";var se=({rowId:e,colSpan:t,children:o,ref:r,...n})=>{let l=u("TableExpandedRow"),i=l.isRowExpanded(e);return He(ct.tr,{id:B(l.tableId,e),"data-state":i?"expanded":"collapsed","data-skdx-table-detail-row":"",hidden:!i,...n,...st("table","expanded-row",n.className),ref:r,children:n.asChild?o:He("td",{colSpan:t??l.headerCellCount,children:o})})};se.displayName="TableExpandedRow";import{Glyph as dt}from"../utils/Glyph.js";import{skdxPart as mt}from"../utils/part.js";import{composeEventHandlers as ft,Primitive as ut}from"../utils/primitive.js";import{jsx as ce}from"react/jsx-runtime";var pt=()=>ce(dt,{name:"chevron-right"}),de=({rowId:e,ref:t,...o})=>{let r=u("TableExpandTrigger"),n=r.isRowExpanded(e);return ce(ut.button,{type:"button","aria-expanded":n,"aria-controls":B(r.tableId,e),"data-state":n?"expanded":"collapsed","data-skdx-table-expand-trigger":"",...o,...mt("table","expand-trigger",o.className),ref:t,onClick:ft(o.onClick,l=>{l.stopPropagation(),r.toggleRowExpanded(e)}),children:o.children??ce(pt,{})})};de.displayName="TableExpandTrigger";import{skdxPart as bt}from"../utils/part.js";import{Primitive as Tt}from"../utils/primitive.js";import{jsx as Rt}from"react/jsx-runtime";var me=({ref:e,...t})=>Rt(Tt.thead,{...t,...bt("table","header",t.className),ref:e});me.displayName="TableHeader";import*as D from"react";import{skdxPart as zt}from"../utils/part.js";import{Primitive as vt}from"../utils/primitive.js";import{skdxPart as gt}from"../utils/part.js";import{composeEventHandlers as Ct,Primitive as xt}from"../utils/primitive.js";import{jsx as St}from"react/jsx-runtime";var Y=({columnKey:e,ref:t,...o})=>{let r=u("TableColumnHeaderSortTrigger"),n=K("TableColumnHeaderSortTrigger"),l=e??(n.sortable?n.columnKey:void 0);if(l===void 0)return null;let i=r.sortList.findIndex(p=>p.columnKey===l),d=r.sortList[i]?.direction;return St(xt.button,{type:"button","data-skdx-table-sort-trigger":"","data-sort-direction":d,"data-sort-index":r.multiSort&&i!==-1?i:void 0,...o,...gt("table","column-header-sort-trigger",o.className),ref:t,onClick:Ct(o.onClick,p=>{r.toggleSort(l,p.currentTarget.textContent?.trim()||l)})})};Y.displayName="TableColumnHeaderSortTrigger";import*as v from"react";import{clamp as yt}from"../utils/clamp.js";import{useComposedRefs as ht}from"../utils/composeRefs.js";import{directionalKey as Pt,resolveDirection as kt,useDirection as wt}from"../utils/direction.js";import{skdxPart as Et}from"../utils/part.js";import{composeEventHandlers as fe,Primitive as Nt,useComposedEventHandlers as ue}from"../utils/primitive.js";import{useCallbackRef as pe}from"../utils/useCallbackRef.js";import{jsx as Lt}from"react/jsx-runtime";var Ht=40,Wt=1e3,Dt=8,At=new Set(["ArrowLeft","ArrowRight","Home","End"]),be=({columnKey:e,minWidth:t,maxWidth:o,step:r,label:n,ref:l,...i})=>{let d=u("TableColumnResizeTrigger"),p=K("TableColumnResizeTrigger"),N=wt(),y=v.useRef(null),H=ht(l,y),h=v.useRef(null),[C,k]=v.useState(!1),R=e??p.columnKey,P=t??p.minWidth??Ht,m=o??p.maxWidth??Wt,w=r??p.resizeStep??Dt,g=R===void 0?void 0:d.columnWidths[R],W=v.useRef(!1),E=pe(s=>{if(R===void 0)return;let f=yt(Math.round(s),P,m);f!==d.columnWidths[R]&&(W.current=!0),d.setColumnWidth(R,f)}),L=pe(()=>{W.current&&(W.current=!1,d.commitColumnWidths())}),$=()=>g!==void 0?g:(y.current?.closest("th")?.getBoundingClientRect().width??0)||P,I=pe(()=>{let s=h.current;if(!s)return null;h.current=null,k(!1);let f=y.current;return f?.hasPointerCapture?.(s.pointerId)&&f.releasePointerCapture(s.pointerId),s});v.useEffect(()=>{if(!C)return;let s=f=>{if(f.key!=="Escape")return;let z=I();z&&(E(z.startWidth),L())};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[C,I,E,L]);let ee=ue(i.onPointerDown,s=>{s.button===0&&(s.preventDefault(),s.stopPropagation(),h.current={startX:s.clientX,startWidth:$(),pointerId:s.pointerId},k(!0),s.currentTarget.setPointerCapture?.(s.pointerId))}),_=ue(i.onPointerMove,s=>{let f=h.current;if(!f)return;let te=kt(s.currentTarget,N)==="rtl"?f.startX-s.clientX:s.clientX-f.startX;E(f.startWidth+te)}),F=ue(i.onKeyDown,s=>{let f=Pt(s.key,s.currentTarget,N);if(f==="ArrowRight")E($()+w);else if(f==="ArrowLeft")E($()-w);else if(s.key==="Home")E(P);else if(s.key==="End")E(m);else return;s.preventDefault(),s.stopPropagation()});return R===void 0?null:Lt(Nt.span,{role:"separator","aria-orientation":"vertical","aria-label":n??p.resizeLabel??"Resize column","aria-valuenow":Math.round(g??P),"aria-valuemin":P,"aria-valuemax":m,tabIndex:0,"data-skdx-table-resizer":"","data-dragging":C?"":void 0,...i,...Et("table","column-resize-trigger",i.className),ref:H,onPointerDown:ee,onPointerMove:_,onPointerUp:fe(i.onPointerUp,()=>{I()&&L()}),onPointerCancel:fe(i.onPointerCancel,()=>{I()&&L()}),onKeyDown:F,onKeyUp:fe(i.onKeyUp,s=>{At.has(s.key)&&L()})})};be.displayName="TableColumnResizeTrigger";import{Fragment as _t,jsx as G,jsxs as Ot}from"react/jsx-runtime";function We(e){return D.Children.toArray(e).some(t=>D.isValidElement(t)?t.type===Y?!0:t.type===D.Fragment&&We(t.props.children):!1)}function It(e,t){if(e)return t==="asc"?"ascending":t==="desc"?"descending":"none"}function Mt(e,t,o){if(e)return o.find(r=>r.columnKey===t)?.direction}function Kt(e,t){let o=e&&D.isValidElement(t)?t:null,r=o?o.props.children:t;return{asChildTarget:o,label:r}}function $t(e,t){return e===void 0?t:{...t,width:e,"--skdx-table-column-width":`${e}px`}}var O=({columnKey:e,sortable:t,resizable:o=!1,minWidth:r=40,maxWidth:n=1e3,resizeLabel:l="Resize column",resizeStep:i=8,children:d,style:p,ref:N,...y})=>{let H=u("TableHeaderCell"),{registerHeaderCell:h}=H;D.useEffect(()=>h(),[h]);let C=t===!0&&e!==void 0,k=Mt(C,e,H.sortList),R=It(C,k),P=o&&e!==void 0,m=e===void 0?void 0:H.columnWidths[e],{asChildTarget:w,label:g}=Kt(y.asChild,d),W=Ot(_t,{children:[C&&!We(g)?G(Y,{children:g}):g,P?G(be,{}):null]});return G(De,{columnKey:e,sortable:C,minWidth:r,maxWidth:n,resizeLabel:l,resizeStep:i,children:G(vt.th,{"aria-sort":R,"data-sort-direction":k,"data-resizable":P?"":void 0,style:$t(m,p),...y,...zt("table","header-cell",y.className),ref:N,children:w?D.cloneElement(w,void 0,W):W})})};O.displayName="TableHeaderCell";import{skdxPart as Vt}from"../utils/part.js";import{composeEventHandlers as Ft,Primitive as Xt}from"../utils/primitive.js";import{jsx as Bt}from"react/jsx-runtime";var Ut='button, a, input, [role="button"]',V=({rowId:e,ref:t,...o})=>{let r=u("TableRow"),n=e!==void 0&&r.isRowSelected(e),l=r.selectionMode!=="none"&&e!==void 0;return Bt(Xt.tr,{"data-state":n?"selected":void 0,"data-row-id":l?e:void 0,...o,...Vt("table","row",o.className),ref:t,onClick:Ft(o.onClick,i=>{!l||i.target.closest(Ut)||r.toggleRow(e,i.shiftKey)})})};V.displayName="TableRow";import{Checkbox as Yt}from"../checkbox/Checkbox.js";import{skdxPart as Gt}from"../utils/part.js";import{composeEventHandlers as qt}from"../utils/primitive.js";import{jsx as Jt}from"react/jsx-runtime";var Te=({rowId:e,ref:t,...o})=>{let r=u("TableRowSelectCheckbox");return Jt(Yt,{...o,...Gt("table","row-select-checkbox",o.className),ref:t,checked:r.isRowSelected(e),"data-skdx-table-row-select":"",onClick:qt(o.onClick,n=>{o.readOnly||r.toggleRow(e,n.shiftKey)})})};Te.displayName="TableRowSelectCheckbox";import{Checkbox as Zt}from"../checkbox/Checkbox.js";import{skdxPart as Qt}from"../utils/part.js";import{composeEventHandlers as jt}from"../utils/primitive.js";import{jsx as oo}from"react/jsx-runtime";function eo(e,t){let o=`${t} ${t===1?"row":"rows"}`;return e==="page"?`Select all ${o} on this page`:`Select all ${o}`}function to(e,t){return e.isAllSelected(t)?!0:e.isSomeSelected(t)?"indeterminate":!1}var Re=({rowIds:e,scope:t,getSelectAllLabel:o=eo,ref:r,...n})=>{let l=u("TableSelectAllCheckbox"),i=to(l,e);return oo(Zt,{"aria-label":o(t,e.length),...n,...Qt("table","select-all-checkbox",n.className),ref:r,checked:i,"data-skdx-table-select-all":"","data-scope":t,onClick:jt(n.onClick,()=>{n.readOnly||l.toggleAll(e)})})};Re.displayName="TableSelectAllCheckbox";import{Fragment as io,jsx as S,jsxs as q}from"react/jsx-runtime";function J(e,t){return e[t]}function ge(e){return typeof e=="string"?e:String(e)}function ro(e,t){return typeof e=="number"&&typeof t=="number"?e-t:e instanceof Date&&t instanceof Date?e.getTime()-t.getTime():ge(e??"").localeCompare(ge(t??""))}function no(e,t){return t.length===0?[...e]:[...e].sort((o,r)=>{for(let{columnKey:n,direction:l}of t){let i=ro(J(o,n),J(r,n));if(i!==0)return l==="desc"?-i:i}return 0})}function ao(e,t){let o=J(e,"id");return String(typeof o=="string"||typeof o=="number"?o:t)}function lo(e,t,o){return t.cell?t.cell(e):o?o(e,t):ge(J(e,t.key)??"")}function Ae({size:e,columns:t,data:o,sortable:r,selectable:n,expandable:l,renderExpanded:i,resizable:d,empty:p,caption:N,renderCell:y,rowId:H=ao,getRowLabel:h}){let C=u("Table"),k=Math.max(t.length+(n?1:0)+(l?1:0),1),R=Z.useMemo(()=>no(o,C.sortList),[o,C.sortList]),P=R.map((m,w)=>H(m,w));return q(io,{children:[N?S(le,{children:N}):null,S(me,{children:q(V,{children:[n?S(O,{children:S(Re,{scope:"page",rowIds:P,size:e})}):null,l?S(O,{"aria-hidden":"true"}):null,t.map(m=>S(O,{columnKey:m.key,sortable:m.sortable??r,resizable:m.resizable??d,minWidth:m.minWidth,maxWidth:m.maxWidth,children:m.header??m.key},m.key))]})}),S(ae,{children:R.length===0&&p?S(ie,{colSpan:k,children:p}):R.map((m,w)=>{let g=P[w],W=h?.(m,w)??`row ${g}`;return q(Z.Fragment,{children:[q(V,{rowId:g,children:[n?S(M,{children:S(Te,{rowId:g,"aria-label":`Select ${W}`,size:e})}):null,l?S(M,{children:S(de,{rowId:g,"aria-label":`Details for ${W}`})}):null,t.map(E=>S(M,{children:lo(m,E,y)},E.key))]}),l?S(se,{rowId:g,colSpan:k,children:i?.(m)}):null]},g)})})]})}import{jsx as j}from"react/jsx-runtime";function Le(e,t){return e.size===t.size&&[...t].every(o=>e.has(o))?e:t}function ze(e){return e===void 0?new Set:e instanceof Set?e:new Set(e)}var ve=[],Ie={},Me=[];function To(e,t,o){let r=e.find(l=>l.columnKey===t),n="asc";return r!==void 0&&(n=r.direction==="asc"?"desc":null),o?n===null?e.filter(l=>l.columnKey!==t):r===void 0?[...e,{columnKey:t,direction:n}]:e.map(l=>l.columnKey===t?{columnKey:t,direction:n}:l):n===null?[]:[{columnKey:t,direction:n}]}function Ro(e,t){return t===null?`${e} not sorted`:`${e} sorted ${t==="asc"?"ascending":"descending"}`}var[go,u]=Ke("Table"),[De,K]=Ke("TableHeaderCell",{});function B(e,t){return`${e}-detail-${t}`}var $e=({sort:e,defaultSort:t=Me,onSortChange:o,multiSort:r=!1,selected:n,defaultSelected:l,onSelectedChange:i,selectionMode:d="none",getSortLabel:p=Ro,expandedRowIds:N,defaultExpandedRowIds:y=ve,onExpandedRowIdsChange:H,columnWidths:h,defaultColumnWidths:C,onColumnWidthsChange:k,onColumnWidthsCommit:R,rowCount:P,columnCount:m,children:w,ref:g,density:W,stickyHeader:E,...L})=>{let $=c.useId(),I=c.useRef(null),ee=co(g,I),[_=Me,F]=Q({prop:e,defaultProp:t,onChange:o}),s=c.useMemo(()=>n===void 0?void 0:ze(n),[n]),[f=new Set,z]=Q({prop:s,defaultProp:ze(l??[]),onChange:a=>i?.([...a])}),te=c.useCallback((a,b=a)=>{let T=To(_,a,r);F(T);let x=T.find(A=>A.columnKey===a)?.direction??null;mo(p(b,x))},[_,r,F,p]),Ce=c.useCallback(()=>{let a=I.current;return a?[...a.querySelectorAll(":scope > tbody > tr[data-row-id]")].map(T=>T.dataset.rowId):[]},[]),xe=c.useRef(null),Oe=c.useCallback((a,b=!1)=>{if(d==="none")return;let T=xe.current;if(b&&d==="multiple"&&T!==null&&T!==a){let x=Ce(),A=x.indexOf(T),ne=x.indexOf(a);if(A!==-1&&ne!==-1){let Je=x.slice(Math.min(A,ne),Math.max(A,ne)+1);z((Ee=new Set)=>Le(Ee,new Set([...Ee,...Je])));return}}xe.current=a,z((x=new Set)=>{if(d==="single")return x.has(a)&&x.size===1?new Set:new Set([a]);let A=new Set(x);return A.has(a)?A.delete(a):A.add(a),A})},[d,z,Ce]),[Se=ve,ye]=Q({prop:N,defaultProp:y,onChange:H}),oe=c.useMemo(()=>new Set(Se),[Se]),[X=Ie,he]=Q({prop:h,defaultProp:C??Ie,onChange:k}),Ve=c.useCallback(a=>{ye((b=[])=>b.includes(a)?b.filter(T=>T!==a):[...b,a])},[ye]),Fe=c.useCallback(a=>oe.has(a),[oe]),U=c.useRef(X);c.useLayoutEffect(()=>{U.current=X},[X]);let Xe=c.useCallback((a,b)=>{let T=U.current;if(T[a]===b)return;let x={...T,[a]:b};U.current=x,he(x)},[he]),Pe=bo(R),Ue=c.useCallback(()=>{Pe(U.current)},[Pe]),Be=c.useCallback(a=>f.has(a),[f]),re=c.useCallback(a=>a.length>0&&a.every(b=>f.has(b)),[f]),Ye=c.useCallback(a=>a.some(b=>f.has(b))&&!re(a),[f,re]),Ge=c.useCallback(a=>{d!=="none"&&z((b=new Set)=>{if(a.length>0&&a.every(T=>b.has(T))){let T=new Set(b);return a.forEach(x=>T.delete(x)),T}return Le(b,new Set([...b,...a]))})},[d,z]),[ke,we]=c.useState(0),qe=c.useCallback(()=>(we(a=>a+1),()=>we(a=>a-1)),[]);return j(go,{tableId:$,headerCellCount:ke>0?ke:m??1,registerHeaderCell:qe,sortList:_,multiSort:r,selected:f,selectionMode:d,toggleSort:te,toggleRow:Oe,isRowSelected:Be,toggleAll:Ge,isAllSelected:re,isSomeSelected:Ye,expandedRows:oe,toggleRowExpanded:Ve,isRowExpanded:Fe,columnWidths:X,setColumnWidth:Xe,commitColumnWidths:Ue,children:j(uo.table,{"aria-rowcount":P,"aria-colcount":m,...L,...so({density:W,stickyHeader:E},L),...fo("table","root",L.className),ref:ee,children:w})})};$e.displayName="TableRoot";function _e({columns:e,data:t,sortable:o=!1,selectable:r=!1,expandable:n=!1,renderExpanded:l,resizable:i=!1,empty:d,caption:p,renderCell:N,rowId:y,getRowLabel:H,selectionMode:h,size:C,ref:k,...R}){return j($e,{...R,"data-size":void 0,selectionMode:h??(r?"multiple":"none"),ref:k,children:j(Ae,{size:po(C,R,"data-size"),columns:e,data:t,sortable:o,selectable:r,expandable:n,renderExpanded:l,resizable:i,empty:d,caption:p,renderCell:N,rowId:y,getRowLabel:H})})}_e.displayName="Table";import{skdxPart as Co}from"../utils/part.js";import{Primitive as xo}from"../utils/primitive.js";import{jsx as yo}from"react/jsx-runtime";var So=({ref:e,...t})=>yo(xo.tfoot,{...t,...Co("table","footer",t.className),ref:e});So.displayName="TableFooter";import{skdxPart as ho}from"../utils/part.js";import{Primitive as Po}from"../utils/primitive.js";import{jsx as wo}from"react/jsx-runtime";var ko=({columnKey:e,ref:t,...o})=>{let r=u("TableSortIndicator"),n=K("TableSortIndicator"),l=e??n.columnKey,i=l===void 0?-1:r.sortList.findIndex(p=>p.columnKey===l),d=r.sortList[i]?.direction??"none";return wo(Po.span,{"aria-hidden":"true","data-skdx-table-sort-indicator":"","data-sort-direction":d,"data-sort-index":r.multiSort&&i!==-1?i:void 0,...o,...ho("table","sort-indicator",o.className),ref:t})};ko.displayName="TableSortIndicator";export{_e as Table,ae as TableBody,le as TableCaption,M as TableCell,Y as TableColumnHeaderSortTrigger,be as TableColumnResizeTrigger,ie as TableEmpty,de as TableExpandTrigger,se as TableExpandedRow,So as TableFooter,me as TableHeader,O as TableHeaderCell,De as TableHeaderCellProvider,go as TableProvider,$e as TableRoot,V as TableRow,Te as TableRowSelectCheckbox,Re as TableSelectAllCheckbox,ko as TableSortIndicator,Ro as defaultGetSortLabel,eo as defaultSelectAllLabel,B as tableDetailRowId,u as useTableContext,K as useTableHeaderCellContext};
2
+ import*as c from"react";import{appearanceAttrs as kr}from"../utils/appearance.js";import{useComposedRefs as wr}from"../utils/composeRefs.js";import{createSafeContext as Xe}from"../utils/createContext.js";import{announce as Er}from"../utils/liveAnnouncer.js";import{skdxPart as Hr}from"../utils/part.js";import{Primitive as Nr}from"../utils/primitive.js";import{recipeAxis as Wr}from"../utils/recipeAxis.js";import{useCallbackRef as Fr}from"../utils/useCallbackRef.js";import{useControllableState as re}from"../utils/useControllableState.js";import*as te from"react";import{skdxPart as lt}from"../utils/part.js";import{Primitive as it}from"../utils/primitive.js";import{jsx as st}from"react/jsx-runtime";var de=({ref:e,...t})=>st(it.tbody,{...t,...lt("table","body",t.className),ref:e});de.displayName="TableBody";import{skdxPart as dt}from"../utils/part.js";import{Primitive as ct}from"../utils/primitive.js";import{jsx as mt}from"react/jsx-runtime";var ce=({ref:e,...t})=>mt(ct.caption,{...t,...dt("table","caption",t.className),ref:e});ce.displayName="TableCaption";import{skdxPart as ft}from"../utils/part.js";import{Primitive as ut}from"../utils/primitive.js";import{jsx as pt}from"react/jsx-runtime";var $=({ref:e,...t})=>pt(ut.td,{...t,...ft("table","cell",t.className),ref:e});$.displayName="TableCell";import{skdxPart as bt}from"../utils/part.js";import{Primitive as Tt}from"../utils/primitive.js";import{jsx as Ie}from"react/jsx-runtime";var me=({colSpan:e,children:t,ref:r,...o})=>{let a=f("TableEmpty");return Ie(Tt.tr,{"data-state":"empty","data-skdx-table-empty":"",...o,...bt("table","empty",o.className),ref:r,children:o.asChild?t:Ie("td",{colSpan:e??a.headerCellCount,children:t})})};me.displayName="TableEmpty";import{skdxPart as Rt}from"../utils/part.js";import{Primitive as Ct}from"../utils/primitive.js";import{jsx as De}from"react/jsx-runtime";var fe=({rowId:e,colSpan:t,children:r,ref:o,...a})=>{let n=f("TableExpandedRow"),l=n.isRowExpanded(e);return De(Ct.tr,{id:q(n.tableId,e),"data-state":l?"expanded":"collapsed","data-skdx-table-detail-row":"",hidden:!l,...a,...Rt("table","expanded-row",a.className),ref:o,children:a.asChild?r:De("td",{colSpan:t??n.headerCellCount,children:r})})};fe.displayName="TableExpandedRow";import{Glyph as gt}from"../utils/Glyph.js";import{skdxPart as xt}from"../utils/part.js";import{composeEventHandlers as yt,Primitive as St}from"../utils/primitive.js";import{jsx as ue}from"react/jsx-runtime";var ht=()=>ue(gt,{name:"chevron-right"}),pe=({rowId:e,ref:t,...r})=>{let o=f("TableExpandTrigger"),a=o.isRowExpanded(e);return ue(St.button,{type:"button","aria-expanded":a,"aria-controls":q(o.tableId,e),"data-state":a?"expanded":"collapsed","data-skdx-table-expand-trigger":"",...r,...xt("table","expand-trigger",r.className),ref:t,onClick:yt(r.onClick,n=>{n.stopPropagation(),o.toggleRowExpanded(e)}),children:r.children??ue(ht,{})})};pe.displayName="TableExpandTrigger";import{skdxPart as Pt}from"../utils/part.js";import{Primitive as kt}from"../utils/primitive.js";import{jsx as wt}from"react/jsx-runtime";var be=({ref:e,...t})=>wt(kt.thead,{...t,...Pt("table","header",t.className),ref:e});be.displayName="TableHeader";import*as W from"react";import{skdxPart as Yt}from"../utils/part.js";import{Primitive as Gt}from"../utils/primitive.js";import{skdxPart as Et}from"../utils/part.js";import{composeEventHandlers as Ht,Primitive as Nt}from"../utils/primitive.js";import{jsx as Wt}from"react/jsx-runtime";var Z=({columnKey:e,ref:t,...r})=>{let o=f("TableColumnHeaderFilterInput"),a=v("TableColumnHeaderFilterInput"),n=e??(a.filterable?a.columnKey:void 0);if(n===void 0)return null;let l=o.filterMap[n]??"";return Wt(Nt.input,{type:"search","aria-label":a.filterLabel??`Filter ${n}`,"data-skdx-table-filter-input":"","data-filtered":l===""?void 0:"",...r,value:l,...Et("table","column-header-filter-input",r.className),ref:t,onChange:Ht(r.onChange,m=>{o.setColumnFilter(n,m.currentTarget.value)})})};Z.displayName="TableColumnHeaderFilterInput";import{skdxPart as Ft}from"../utils/part.js";import{composeEventHandlers as Lt,Primitive as It}from"../utils/primitive.js";import{jsx as Dt}from"react/jsx-runtime";var Q=({columnKey:e,ref:t,...r})=>{let o=f("TableColumnHeaderSortTrigger"),a=v("TableColumnHeaderSortTrigger"),n=e??(a.sortable?a.columnKey:void 0);if(n===void 0)return null;let l=o.sortList.findIndex(u=>u.columnKey===n),m=o.sortList[l]?.direction;return Dt(It.button,{type:"button","data-skdx-table-sort-trigger":"","data-sort-direction":m,"data-sort-index":o.multiSort&&l!==-1?l:void 0,...r,...Ft("table","column-header-sort-trigger",r.className),ref:t,onClick:Lt(r.onClick,u=>{o.toggleSort(n,u.currentTarget.textContent?.trim()||n)})})};Q.displayName="TableColumnHeaderSortTrigger";import*as A from"react";import{clamp as vt}from"../utils/clamp.js";import{useComposedRefs as At}from"../utils/composeRefs.js";import{directionalKey as zt,resolveDirection as Mt,useDirection as Kt}from"../utils/direction.js";import{skdxPart as $t}from"../utils/part.js";import{composeEventHandlers as Te,Primitive as _t,useComposedEventHandlers as Re}from"../utils/primitive.js";import{useCallbackRef as Ce}from"../utils/useCallbackRef.js";import{jsx as Bt}from"react/jsx-runtime";var Ot=40,Vt=1e3,Xt=8,Ut=new Set(["ArrowLeft","ArrowRight","Home","End"]),ge=({columnKey:e,minWidth:t,maxWidth:r,step:o,label:a,ref:n,...l})=>{let m=f("TableColumnResizeTrigger"),u=v("TableColumnResizeTrigger"),y=Kt(),T=A.useRef(null),F=At(n,T),S=A.useRef(null),[h,P]=A.useState(!1),R=e??u.columnKey,g=t??u.minWidth??Ot,L=r??u.maxWidth??Vt,d=o??u.resizeStep??Xt,N=R===void 0?void 0:m.columnWidths[R],x=A.useRef(!1),k=Ce(s=>{if(R===void 0)return;let b=vt(Math.round(s),g,L);b!==m.columnWidths[R]&&(x.current=!0),m.setColumnWidth(R,b)}),H=Ce(()=>{x.current&&(x.current=!1,m.commitColumnWidths())}),z=()=>N!==void 0?N:(T.current?.closest("th")?.getBoundingClientRect().width??0)||g,D=Ce(()=>{let s=S.current;if(!s)return null;S.current=null,P(!1);let b=T.current;return b?.hasPointerCapture?.(s.pointerId)&&b.releasePointerCapture(s.pointerId),s});A.useEffect(()=>{if(!h)return;let s=b=>{if(b.key!=="Escape")return;let K=D();K&&(k(K.startWidth),H())};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[h,D,k,H]);let O=Re(l.onPointerDown,s=>{s.button===0&&(s.preventDefault(),s.stopPropagation(),S.current={startX:s.clientX,startWidth:z(),pointerId:s.pointerId},P(!0),s.currentTarget.setPointerCapture?.(s.pointerId))}),ae=Re(l.onPointerMove,s=>{let b=S.current;if(!b)return;let ne=Mt(s.currentTarget,y)==="rtl"?b.startX-s.clientX:s.clientX-b.startX;k(b.startWidth+ne)}),Y=Re(l.onKeyDown,s=>{let b=zt(s.key,s.currentTarget,y);if(b==="ArrowRight")k(z()+d);else if(b==="ArrowLeft")k(z()-d);else if(s.key==="Home")k(g);else if(s.key==="End")k(L);else return;s.preventDefault(),s.stopPropagation()});return R===void 0?null:Bt(_t.span,{role:"separator","aria-orientation":"vertical","aria-label":a??u.resizeLabel??"Resize column","aria-valuenow":Math.round(N??g),"aria-valuemin":g,"aria-valuemax":L,tabIndex:0,"data-skdx-table-resizer":"","data-dragging":h?"":void 0,...l,...$t("table","column-resize-trigger",l.className),ref:F,onPointerDown:O,onPointerMove:ae,onPointerUp:Te(l.onPointerUp,()=>{D()&&H()}),onPointerCancel:Te(l.onPointerCancel,()=>{D()&&H()}),onKeyDown:Y,onKeyUp:Te(l.onKeyUp,s=>{Ut.has(s.key)&&H()})})};ge.displayName="TableColumnResizeTrigger";import{Fragment as tr,jsx as _,jsxs as rr}from"react/jsx-runtime";function xe(e,t){return W.Children.toArray(e).some(r=>W.isValidElement(r)?r.type===t?!0:r.type===W.Fragment&&xe(r.props.children,t):!1)}function Jt(e,t){if(e)return t==="asc"?"ascending":t==="desc"?"descending":"none"}function qt(e,t,r){if(e)return r.find(o=>o.columnKey===t)?.direction}function Zt(e,t){let r=e&&W.isValidElement(t)?t:null,o=r?r.props.children:t;return{asChildTarget:r,label:o}}function Qt(e,t,r){let o=e===!0&&t!==void 0;return{filterable:o,filtered:o&&(r[t]??"")!==""}}function jt({label:e,sortable:t,filterable:r,canResize:o}){return rr(tr,{children:[t&&!xe(e,Q)?_(Q,{children:e}):e,r&&!xe(e,Z)?_(Z,{}):null,o?_(ge,{}):null]})}function er(e,t){return e===void 0?t:{...t,width:e,"--skdx-table-column-width":`${e}px`}}var X=({columnKey:e,sortable:t,filterable:r,filterLabel:o,resizable:a=!1,minWidth:n=40,maxWidth:l=1e3,resizeLabel:m="Resize column",resizeStep:u=8,children:y,style:T,ref:F,...S})=>{let h=f("TableHeaderCell"),{registerHeaderCell:P}=h;W.useEffect(()=>P(),[P]);let R=t===!0&&e!==void 0,g=qt(R,e,h.sortList),L=Jt(R,g),{filterable:d,filtered:N}=Qt(r,e,h.filterMap),x=a&&e!==void 0,k=e===void 0?void 0:h.columnWidths[e],{asChildTarget:H,label:z}=Zt(S.asChild,y),D=_(jt,{label:z,sortable:R,filterable:d,canResize:x});return _(ve,{columnKey:e,sortable:R,filterable:d,filterLabel:o,minWidth:n,maxWidth:l,resizeLabel:m,resizeStep:u,children:_(Gt.th,{"aria-sort":L,"data-sort-direction":g,"data-filterable":d?"":void 0,"data-filtered":N?"":void 0,"data-resizable":x?"":void 0,style:er(k,T),...S,...Yt("table","header-cell",S.className),ref:F,children:H?W.cloneElement(H,void 0,D):D})})};X.displayName="TableHeaderCell";import{skdxPart as or}from"../utils/part.js";import{composeEventHandlers as ar,Primitive as nr}from"../utils/primitive.js";import{jsx as ir}from"react/jsx-runtime";var lr='button, a, input, [role="button"]',U=({rowId:e,ref:t,...r})=>{let o=f("TableRow"),a=e!==void 0&&o.isRowSelected(e),n=o.selectionMode!=="none"&&e!==void 0;return ir(nr.tr,{"data-state":a?"selected":void 0,"data-row-id":n?e:void 0,...r,...or("table","row",r.className),ref:t,onClick:ar(r.onClick,l=>{!n||l.target.closest(lr)||o.toggleRow(e,l.shiftKey)})})};U.displayName="TableRow";import{Checkbox as sr}from"../checkbox/Checkbox.js";import{skdxPart as dr}from"../utils/part.js";import{composeEventHandlers as cr}from"../utils/primitive.js";import{jsx as mr}from"react/jsx-runtime";var ye=({rowId:e,ref:t,...r})=>{let o=f("TableRowSelectCheckbox");return mr(sr,{...r,...dr("table","row-select-checkbox",r.className),ref:t,checked:o.isRowSelected(e),"data-skdx-table-row-select":"",onClick:cr(r.onClick,a=>{r.readOnly||o.toggleRow(e,a.shiftKey)})})};ye.displayName="TableRowSelectCheckbox";import{Checkbox as fr}from"../checkbox/Checkbox.js";import{skdxPart as ur}from"../utils/part.js";import{composeEventHandlers as pr}from"../utils/primitive.js";import{jsx as Rr}from"react/jsx-runtime";function br(e,t){let r=`${t} ${t===1?"row":"rows"}`;return e==="page"?`Select all ${r} on this page`:`Select all ${r}`}function Tr(e,t){return e.isAllSelected(t)?!0:e.isSomeSelected(t)?"indeterminate":!1}var Se=({rowIds:e,scope:t,getSelectAllLabel:r=br,ref:o,...a})=>{let n=f("TableSelectAllCheckbox"),l=Tr(n,e);return Rr(fr,{"aria-label":r(t,e.length),...a,...ur("table","select-all-checkbox",a.className),ref:o,checked:l,"data-skdx-table-select-all":"","data-scope":t,onClick:pr(a.onClick,()=>{a.readOnly||n.toggleAll(e)})})};Se.displayName="TableSelectAllCheckbox";import{Fragment as hr,jsx as E,jsxs as j}from"react/jsx-runtime";function B(e,t){return e[t]}function ee(e){return typeof e=="string"?e:String(e)}function Cr(e,t){return typeof e=="number"&&typeof t=="number"?e-t:e instanceof Date&&t instanceof Date?e.getTime()-t.getTime():ee(e??"").localeCompare(ee(t??""))}function gr(e,t){return t.length===0?[...e]:[...e].sort((r,o)=>{for(let{columnKey:a,direction:n}of t){let l=Cr(B(r,a),B(o,a));if(l!==0)return n==="desc"?-l:l}return 0})}function xr(e,t){let r=Object.entries(t).filter(([,o])=>o!=="");return r.length===0?[...e]:e.filter(o=>r.every(([a,n])=>ee(B(o,a)??"").toLowerCase().includes(n.toLowerCase())))}function yr(e,t){let r=B(e,"id");return String(typeof r=="string"||typeof r=="number"?r:t)}function Sr(e,t,r){return t.cell?t.cell(e):r?r(e,t):ee(B(e,t.key)??"")}function Ae({size:e,columns:t,data:r,sortable:o,selectable:a,expandable:n,renderExpanded:l,resizable:m,filterable:u,empty:y,caption:T,renderCell:F,rowId:S=yr,getRowLabel:h}){let P=f("Table"),R=Math.max(t.length+(a?1:0)+(n?1:0),1),g=te.useMemo(()=>gr(xr(r,P.filterMap),P.sortList),[r,P.filterMap,P.sortList]),L=g.map((d,N)=>S(d,N));return j(hr,{children:[T?E(ce,{children:T}):null,E(be,{children:j(U,{children:[a?E(X,{children:E(Se,{scope:"page",rowIds:L,size:e})}):null,n?E(X,{"aria-hidden":"true"}):null,t.map(d=>E(X,{columnKey:d.key,sortable:d.sortable??o,filterable:d.filterable??u,filterLabel:`Filter ${typeof d.header=="string"?d.header:d.key}`,resizable:d.resizable??m,minWidth:d.minWidth,maxWidth:d.maxWidth,children:d.header??d.key},d.key))]})}),E(de,{children:g.length===0&&y?E(me,{colSpan:R,children:y}):g.map((d,N)=>{let x=L[N],k=h?.(d,N)??`row ${x}`;return j(te.Fragment,{children:[j(U,{rowId:x,children:[a?E($,{children:E(ye,{rowId:x,"aria-label":`Select ${k}`,size:e})}):null,n?E($,{children:E(pe,{rowId:x,"aria-label":`Details for ${k}`})}):null,t.map(H=>E($,{children:Sr(d,H,F)},H.key))]}),n?E(fe,{rowId:x,colSpan:R,children:l?.(d)}):null]},x)})})]})}import*as ze from"react";import{useControllableState as Pr}from"../utils/useControllableState.js";var he={};function Me(e,t,r){let[o=he,a]=Pr({prop:e,defaultProp:t??he,onChange:r}),n=ze.useCallback((l,m)=>{a((u=he)=>{if((u[l]??"")===m)return u;let y={...u};return m===""?delete y[l]:y[l]=m,y})},[a]);return[o,n]}import{jsx as oe}from"react/jsx-runtime";function Ke(e,t){return e.size===t.size&&[...t].every(r=>e.has(r))?e:t}function $e(e){return e===void 0?new Set:e instanceof Set?e:new Set(e)}var _e=[],Oe={},Ve=[];function Lr(e,t,r){let o=e.find(n=>n.columnKey===t),a="asc";return o!==void 0&&(a=o.direction==="asc"?"desc":null),r?a===null?e.filter(n=>n.columnKey!==t):o===void 0?[...e,{columnKey:t,direction:a}]:e.map(n=>n.columnKey===t?{columnKey:t,direction:a}:n):a===null?[]:[{columnKey:t,direction:a}]}function Ir(e,t){return t===null?`${e} not sorted`:`${e} sorted ${t==="asc"?"ascending":"descending"}`}var[Dr,f]=Xe("Table"),[ve,v]=Xe("TableHeaderCell",{});function q(e,t){return`${e}-detail-${t}`}var Ue=({sort:e,defaultSort:t=Ve,onSortChange:r,filter:o,defaultFilter:a,onFilterChange:n,multiSort:l=!1,selected:m,defaultSelected:u,onSelectedChange:y,selectionMode:T="none",getSortLabel:F=Ir,expandedRowIds:S,defaultExpandedRowIds:h=_e,onExpandedRowIdsChange:P,columnWidths:R,defaultColumnWidths:g,onColumnWidthsChange:L,onColumnWidthsCommit:d,rowCount:N,columnCount:x,children:k,ref:H,density:z,stickyHeader:D,...O})=>{let ae=c.useId(),Y=c.useRef(null),s=wr(H,Y),[b=Ve,K]=re({prop:e,defaultProp:t,onChange:r}),ne=c.useMemo(()=>m===void 0?void 0:$e(m),[m]),[M=new Set,V]=re({prop:ne,defaultProp:$e(u??[]),onChange:i=>y?.([...i])}),Ye=c.useCallback((i,p=i)=>{let C=Lr(b,i,l);K(C);let w=C.find(I=>I.columnKey===i)?.direction??null;Er(F(p,w))},[b,l,K,F]),[Ge,Je]=Me(o,a,n),Pe=c.useCallback(()=>{let i=Y.current;return i?[...i.querySelectorAll(":scope > tbody > tr[data-row-id]")].map(C=>C.dataset.rowId):[]},[]),ke=c.useRef(null),qe=c.useCallback((i,p=!1)=>{if(T==="none")return;let C=ke.current;if(p&&T==="multiple"&&C!==null&&C!==i){let w=Pe(),I=w.indexOf(C),se=w.indexOf(i);if(I!==-1&&se!==-1){let nt=w.slice(Math.min(I,se),Math.max(I,se)+1);V((Le=new Set)=>Ke(Le,new Set([...Le,...nt])));return}}ke.current=i,V((w=new Set)=>{if(T==="single")return w.has(i)&&w.size===1?new Set:new Set([i]);let I=new Set(w);return I.has(i)?I.delete(i):I.add(i),I})},[T,V,Pe]),[we=_e,Ee]=re({prop:S,defaultProp:h,onChange:P}),le=c.useMemo(()=>new Set(we),[we]),[G=Oe,He]=re({prop:R,defaultProp:g??Oe,onChange:L}),Ze=c.useCallback(i=>{Ee((p=[])=>p.includes(i)?p.filter(C=>C!==i):[...p,i])},[Ee]),Qe=c.useCallback(i=>le.has(i),[le]),J=c.useRef(G);c.useLayoutEffect(()=>{J.current=G},[G]);let je=c.useCallback((i,p)=>{let C=J.current;if(C[i]===p)return;let w={...C,[i]:p};J.current=w,He(w)},[He]),Ne=Fr(d),et=c.useCallback(()=>{Ne(J.current)},[Ne]),tt=c.useCallback(i=>M.has(i),[M]),ie=c.useCallback(i=>i.length>0&&i.every(p=>M.has(p)),[M]),rt=c.useCallback(i=>i.some(p=>M.has(p))&&!ie(i),[M,ie]),ot=c.useCallback(i=>{T!=="none"&&V((p=new Set)=>{if(i.length>0&&i.every(C=>p.has(C))){let C=new Set(p);return i.forEach(w=>C.delete(w)),C}return Ke(p,new Set([...p,...i]))})},[T,V]),[We,Fe]=c.useState(0),at=c.useCallback(()=>(Fe(i=>i+1),()=>Fe(i=>i-1)),[]);return oe(Dr,{tableId:ae,headerCellCount:We>0?We:x??1,registerHeaderCell:at,sortList:b,multiSort:l,selected:M,selectionMode:T,toggleSort:Ye,filterMap:Ge,setColumnFilter:Je,toggleRow:qe,isRowSelected:tt,toggleAll:ot,isAllSelected:ie,isSomeSelected:rt,expandedRows:le,toggleRowExpanded:Ze,isRowExpanded:Qe,columnWidths:G,setColumnWidth:je,commitColumnWidths:et,children:oe(Nr.table,{"aria-rowcount":N,"aria-colcount":x,...O,...kr({density:z,stickyHeader:D},O),...Hr("table","root",O.className),ref:s,children:k})})};Ue.displayName="TableRoot";function Be({columns:e,data:t,sortable:r=!1,selectable:o=!1,expandable:a=!1,renderExpanded:n,resizable:l=!1,filterable:m=!1,empty:u,caption:y,renderCell:T,rowId:F,getRowLabel:S,selectionMode:h,size:P,ref:R,...g}){return oe(Ue,{...g,"data-size":void 0,selectionMode:h??(o?"multiple":"none"),ref:R,children:oe(Ae,{size:Wr(P,g,"data-size"),columns:e,data:t,sortable:r,selectable:o,expandable:a,renderExpanded:n,resizable:l,filterable:m,empty:u,caption:y,renderCell:T,rowId:F,getRowLabel:S})})}Be.displayName="Table";import{skdxPart as vr}from"../utils/part.js";import{Primitive as Ar}from"../utils/primitive.js";import{jsx as Mr}from"react/jsx-runtime";var zr=({ref:e,...t})=>Mr(Ar.tfoot,{...t,...vr("table","footer",t.className),ref:e});zr.displayName="TableFooter";import{skdxPart as Kr}from"../utils/part.js";import{Primitive as $r}from"../utils/primitive.js";import{jsx as Or}from"react/jsx-runtime";var _r=({columnKey:e,ref:t,...r})=>{let o=f("TableSortIndicator"),a=v("TableSortIndicator"),n=e??a.columnKey,l=n===void 0?-1:o.sortList.findIndex(u=>u.columnKey===n),m=o.sortList[l]?.direction??"none";return Or($r.span,{"aria-hidden":"true","data-skdx-table-sort-indicator":"","data-sort-direction":m,"data-sort-index":o.multiSort&&l!==-1?l:void 0,...r,...Kr("table","sort-indicator",r.className),ref:t})};_r.displayName="TableSortIndicator";export{Be as Table,de as TableBody,ce as TableCaption,$ as TableCell,Z as TableColumnHeaderFilterInput,Q as TableColumnHeaderSortTrigger,ge as TableColumnResizeTrigger,me as TableEmpty,pe as TableExpandTrigger,fe as TableExpandedRow,zr as TableFooter,be as TableHeader,X as TableHeaderCell,ve as TableHeaderCellProvider,Dr as TableProvider,Ue as TableRoot,U as TableRow,ye as TableRowSelectCheckbox,Se as TableSelectAllCheckbox,_r as TableSortIndicator,Ir as defaultGetSortLabel,br as defaultSelectAllLabel,q as tableDetailRowId,f as useTableContext,v as useTableHeaderCellContext};
@@ -5,7 +5,7 @@ import type { TableColumn, TableRowSelectCheckboxProps } from './types.cjs';
5
5
  *
6
6
  * @internal
7
7
  */
8
- export declare function TableAnatomy<T extends object>({ size, columns, data, sortable, selectable, expandable, renderExpanded, resizable, empty, caption, renderCell, rowId, getRowLabel, }: {
8
+ export declare function TableAnatomy<T extends object>({ size, columns, data, sortable, selectable, expandable, renderExpanded, resizable, filterable, empty, caption, renderCell, rowId, getRowLabel, }: {
9
9
  size?: TableRowSelectCheckboxProps['size'] | undefined;
10
10
  columns: TableColumn<T>[];
11
11
  data: T[];
@@ -14,6 +14,7 @@ export declare function TableAnatomy<T extends object>({ size, columns, data, so
14
14
  expandable?: boolean | undefined;
15
15
  renderExpanded?: ((row: T) => React.ReactNode) | undefined;
16
16
  resizable?: boolean | undefined;
17
+ filterable?: boolean | undefined;
17
18
  empty?: React.ReactNode | undefined;
18
19
  caption?: React.ReactNode | undefined;
19
20
  renderCell?: ((row: T, column: TableColumn<T>) => React.ReactNode) | undefined;
@@ -5,7 +5,7 @@ import type { TableColumn, TableRowSelectCheckboxProps } from './types.js';
5
5
  *
6
6
  * @internal
7
7
  */
8
- export declare function TableAnatomy<T extends object>({ size, columns, data, sortable, selectable, expandable, renderExpanded, resizable, empty, caption, renderCell, rowId, getRowLabel, }: {
8
+ export declare function TableAnatomy<T extends object>({ size, columns, data, sortable, selectable, expandable, renderExpanded, resizable, filterable, empty, caption, renderCell, rowId, getRowLabel, }: {
9
9
  size?: TableRowSelectCheckboxProps['size'] | undefined;
10
10
  columns: TableColumn<T>[];
11
11
  data: T[];
@@ -14,6 +14,7 @@ export declare function TableAnatomy<T extends object>({ size, columns, data, so
14
14
  expandable?: boolean | undefined;
15
15
  renderExpanded?: ((row: T) => React.ReactNode) | undefined;
16
16
  resizable?: boolean | undefined;
17
+ filterable?: boolean | undefined;
17
18
  empty?: React.ReactNode | undefined;
18
19
  caption?: React.ReactNode | undefined;
19
20
  renderCell?: ((row: T, column: TableColumn<T>) => React.ReactNode) | undefined;
@@ -0,0 +1,18 @@
1
+ import type * as React from 'react';
2
+ import type { TableColumnHeaderFilterInputProps } from './types.cjs';
3
+ /**
4
+ * Text input that filters its column: typing writes the column's entry in the
5
+ * table's filter map, clearing removes it.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * <TableHeaderCell columnKey="name" filterable>
10
+ * Name
11
+ * <TableColumnHeaderFilterInput placeholder="Search names" />
12
+ * </TableHeaderCell>
13
+ * ```
14
+ */
15
+ export declare const TableColumnHeaderFilterInput: {
16
+ ({ columnKey: columnKeyProp, ref: forwardedRef, ...props }: TableColumnHeaderFilterInputProps): React.ReactNode;
17
+ displayName: string;
18
+ };
@@ -0,0 +1,18 @@
1
+ import type * as React from 'react';
2
+ import type { TableColumnHeaderFilterInputProps } from './types.js';
3
+ /**
4
+ * Text input that filters its column: typing writes the column's entry in the
5
+ * table's filter map, clearing removes it.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * <TableHeaderCell columnKey="name" filterable>
10
+ * Name
11
+ * <TableColumnHeaderFilterInput placeholder="Search names" />
12
+ * </TableHeaderCell>
13
+ * ```
14
+ */
15
+ export declare const TableColumnHeaderFilterInput: {
16
+ ({ columnKey: columnKeyProp, ref: forwardedRef, ...props }: TableColumnHeaderFilterInputProps): React.ReactNode;
17
+ displayName: string;
18
+ };
@@ -9,6 +9,6 @@ import type { TableHeaderCellProps } from './types.cjs';
9
9
  * ```
10
10
  */
11
11
  export declare const TableHeaderCell: {
12
- ({ columnKey, sortable: sortableProp, resizable, minWidth, maxWidth, resizeLabel, resizeStep, children, style, ref: forwardedRef, ...props }: TableHeaderCellProps): React.ReactNode;
12
+ ({ columnKey, sortable: sortableProp, filterable: filterableProp, filterLabel, resizable, minWidth, maxWidth, resizeLabel, resizeStep, children, style, ref: forwardedRef, ...props }: TableHeaderCellProps): React.ReactNode;
13
13
  displayName: string;
14
14
  };
@@ -9,6 +9,6 @@ import type { TableHeaderCellProps } from './types.js';
9
9
  * ```
10
10
  */
11
11
  export declare const TableHeaderCell: {
12
- ({ columnKey, sortable: sortableProp, resizable, minWidth, maxWidth, resizeLabel, resizeStep, children, style, ref: forwardedRef, ...props }: TableHeaderCellProps): React.ReactNode;
12
+ ({ columnKey, sortable: sortableProp, filterable: filterableProp, filterLabel, resizable, minWidth, maxWidth, resizeLabel, resizeStep, children, style, ref: forwardedRef, ...props }: TableHeaderCellProps): React.ReactNode;
13
13
  displayName: string;
14
14
  };
@@ -1,4 +1,4 @@
1
1
  export { Table, useTableContext } from './Table.cjs';
2
2
  export { TableRow } from './TableRow.cjs';
3
3
  export { TableCell } from './TableCell.cjs';
4
- export type { TableColumn, TableColumnWidths, TableContextValue, TableProps, TableRowProps, TableCellProps, TableSort, TableSortState, SortDirection, TableSelectionMode, } from './types.cjs';
4
+ export type { TableColumn, TableColumnWidths, TableContextValue, TableProps, TableRowProps, TableCellProps, TableSort, TableSortState, TableFilterState, SortDirection, TableSelectionMode, } from './types.cjs';
@@ -1,4 +1,4 @@
1
1
  export { Table, useTableContext } from './Table.js';
2
2
  export { TableRow } from './TableRow.js';
3
3
  export { TableCell } from './TableCell.js';
4
- export type { TableColumn, TableColumnWidths, TableContextValue, TableProps, TableRowProps, TableCellProps, TableSort, TableSortState, SortDirection, TableSelectionMode, } from './types.js';
4
+ export type { TableColumn, TableColumnWidths, TableContextValue, TableProps, TableRowProps, TableCellProps, TableSort, TableSortState, TableFilterState, SortDirection, TableSelectionMode, } from './types.js';
@@ -33,8 +33,9 @@ export { TableExpandTrigger } from './TableExpandTrigger.cjs';
33
33
  export { TableExpandedRow } from './TableExpandedRow.cjs';
34
34
  export { TableEmpty } from './TableEmpty.cjs';
35
35
  export { TableColumnHeaderSortTrigger } from './TableColumnHeaderSortTrigger.cjs';
36
+ export { TableColumnHeaderFilterInput } from './TableColumnHeaderFilterInput.cjs';
36
37
  export { TableSortIndicator } from './TableSortIndicator.cjs';
37
38
  export { TableSelectAllCheckbox, defaultSelectAllLabel } from './TableSelectAllCheckbox.cjs';
38
39
  export { TableRowSelectCheckbox } from './TableRowSelectCheckbox.cjs';
39
40
  export { TableColumnResizeTrigger } from './TableColumnResizeTrigger.cjs';
40
- export type { TableRootProps, TableHeaderProps, TableBodyProps, TableFooterProps, TableRowProps, TableHeaderCellProps, TableCellProps, TableCaptionProps, TableSortState, TableSort, SortDirection, TableSelectionMode, TableColumnWidths, TableContextValue, TableExpandTriggerProps, TableExpandedRowProps, TableEmptyProps, TableColumnHeaderSortTriggerProps, TableSortIndicatorProps, TableSelectAllCheckboxProps, TableSelectAllScope, TableRowSelectCheckboxProps, TableColumnResizeTriggerProps, } from './types.cjs';
41
+ export type { TableRootProps, TableHeaderProps, TableBodyProps, TableFooterProps, TableRowProps, TableHeaderCellProps, TableCellProps, TableCaptionProps, TableSortState, TableSort, SortDirection, TableSelectionMode, TableColumnWidths, TableContextValue, TableExpandTriggerProps, TableExpandedRowProps, TableEmptyProps, TableColumnHeaderSortTriggerProps, TableColumnHeaderFilterInputProps, TableFilterState, TableSortIndicatorProps, TableSelectAllCheckboxProps, TableSelectAllScope, TableRowSelectCheckboxProps, TableColumnResizeTriggerProps, } from './types.cjs';
@@ -33,8 +33,9 @@ export { TableExpandTrigger } from './TableExpandTrigger.js';
33
33
  export { TableExpandedRow } from './TableExpandedRow.js';
34
34
  export { TableEmpty } from './TableEmpty.js';
35
35
  export { TableColumnHeaderSortTrigger } from './TableColumnHeaderSortTrigger.js';
36
+ export { TableColumnHeaderFilterInput } from './TableColumnHeaderFilterInput.js';
36
37
  export { TableSortIndicator } from './TableSortIndicator.js';
37
38
  export { TableSelectAllCheckbox, defaultSelectAllLabel } from './TableSelectAllCheckbox.js';
38
39
  export { TableRowSelectCheckbox } from './TableRowSelectCheckbox.js';
39
40
  export { TableColumnResizeTrigger } from './TableColumnResizeTrigger.js';
40
- export type { TableRootProps, TableHeaderProps, TableBodyProps, TableFooterProps, TableRowProps, TableHeaderCellProps, TableCellProps, TableCaptionProps, TableSortState, TableSort, SortDirection, TableSelectionMode, TableColumnWidths, TableContextValue, TableExpandTriggerProps, TableExpandedRowProps, TableEmptyProps, TableColumnHeaderSortTriggerProps, TableSortIndicatorProps, TableSelectAllCheckboxProps, TableSelectAllScope, TableRowSelectCheckboxProps, TableColumnResizeTriggerProps, } from './types.js';
41
+ export type { TableRootProps, TableHeaderProps, TableBodyProps, TableFooterProps, TableRowProps, TableHeaderCellProps, TableCellProps, TableCaptionProps, TableSortState, TableSort, SortDirection, TableSelectionMode, TableColumnWidths, TableContextValue, TableExpandTriggerProps, TableExpandedRowProps, TableEmptyProps, TableColumnHeaderSortTriggerProps, TableColumnHeaderFilterInputProps, TableFilterState, TableSortIndicatorProps, TableSelectAllCheckboxProps, TableSelectAllScope, TableRowSelectCheckboxProps, TableColumnResizeTriggerProps, } from './types.js';
@@ -10,6 +10,8 @@ export interface TableSortState {
10
10
  }
11
11
  /** Array of sorted columns, most significant first, always present even with `multiSort` off. */
12
12
  export type TableSort = TableSortState[];
13
+ /** Active column filters: each key is a `columnKey`, each value the text its rows must contain. */
14
+ export type TableFilterState = Record<string, string>;
13
15
  /** Whether `TableSelectAllCheckbox` covers the page or entire dataset. */
14
16
  export type TableSelectAllScope = 'page' | 'all';
15
17
  /** How many rows can be selected: one, many, or none. */
@@ -37,6 +39,10 @@ export interface TableContextValue {
37
39
  commitColumnWidths: () => void;
38
40
  /** Cycle column sort asc → desc → unsorted; switch columns always start at asc. */
39
41
  toggleSort: (columnKey: string, columnLabel?: string) => void;
42
+ /** Active column filters, keyed by `columnKey`; a column with no entry is unfiltered. */
43
+ filterMap: TableFilterState;
44
+ /** Set one column's filter text; an empty string clears that column. */
45
+ setColumnFilter: (columnKey: string, value: string) => void;
40
46
  /** Toggle a row's selection; `extend` selects range in `'multiple'` mode. */
41
47
  toggleRow: (id: string, extend?: boolean) => void;
42
48
  isRowSelected: (id: string) => boolean;
@@ -55,6 +61,9 @@ export interface TableHeaderCellContextValue {
55
61
  columnKey?: string | undefined;
56
62
  /** Whether this column can be sorted. */
57
63
  sortable?: boolean | undefined;
64
+ /** Whether this column can be filtered. */
65
+ filterable?: boolean | undefined;
66
+ filterLabel?: string | undefined;
58
67
  minWidth?: number | undefined;
59
68
  maxWidth?: number | undefined;
60
69
  resizeLabel?: string | undefined;
@@ -92,6 +101,21 @@ export interface TableRootProps extends Omit<PrimitivePropsWithRef<'table'>, 'on
92
101
  * @default undefined
93
102
  */
94
103
  onSortChange?: ((sort: TableSort) => void) | undefined;
104
+ /**
105
+ * Active column filters, for controlled usage.
106
+ * @default undefined
107
+ */
108
+ filter?: TableFilterState | undefined;
109
+ /**
110
+ * Initial column filters for uncontrolled usage.
111
+ * @default {}
112
+ */
113
+ defaultFilter?: TableFilterState | undefined;
114
+ /**
115
+ * Fires with the new filter map whenever a column's filter text changes.
116
+ * @default undefined
117
+ */
118
+ onFilterChange?: ((filter: TableFilterState) => void) | undefined;
95
119
  /**
96
120
  * Whether a second sorted column appends or replaces the first.
97
121
  * @default false
@@ -192,6 +216,11 @@ export interface TableColumn<T extends object = object> {
192
216
  * @default inherits root's `resizable`
193
217
  */
194
218
  resizable?: boolean | undefined;
219
+ /**
220
+ * Override the root's `filterable` for this column alone.
221
+ * @default inherits root's `filterable`
222
+ */
223
+ filterable?: boolean | undefined;
195
224
  /** @default 40 */
196
225
  minWidth?: number | undefined;
197
226
  /** @default 1000 */
@@ -228,6 +257,11 @@ export interface TableProps<T extends object = object> extends Omit<TableRootPro
228
257
  * @default false
229
258
  */
230
259
  resizable?: boolean | undefined;
260
+ /**
261
+ * Default `filterable` for every column that doesn't set its own; the derived view then renders only rows matching every active filter.
262
+ * @default false
263
+ */
264
+ filterable?: boolean | undefined;
231
265
  /**
232
266
  * Content for a derived empty row shown when data is empty.
233
267
  * @default no empty row
@@ -288,6 +322,16 @@ export interface TableHeaderCellProps extends PrimitivePropsWithRef<'th'> {
288
322
  * @default undefined
289
323
  */
290
324
  sortable?: boolean | undefined;
325
+ /**
326
+ * Renders a filter text input under the label, bound to this column's entry in the filter map.
327
+ * @default false
328
+ */
329
+ filterable?: boolean | undefined;
330
+ /**
331
+ * Accessible name for the derived filter input.
332
+ * @default `Filter ${columnKey}`
333
+ */
334
+ filterLabel?: string | undefined;
291
335
  /**
292
336
  * Renders a focusable resize handle, dragged or stepped with Arrow Left/Right.
293
337
  * @default false
@@ -322,6 +366,14 @@ export interface TableColumnHeaderSortTriggerProps extends PrimitivePropsWithRef
322
366
  */
323
367
  columnKey?: string | undefined;
324
368
  }
369
+ /** Props for the text input inside a header cell that filters its column. */
370
+ export interface TableColumnHeaderFilterInputProps extends PrimitivePropsWithRef<'input'> {
371
+ /**
372
+ * Column this input filters, inherited from the enclosing `TableHeaderCell`'s `columnKey`.
373
+ * @default enclosing `TableHeaderCell`'s `columnKey`
374
+ */
375
+ columnKey?: string | undefined;
376
+ }
325
377
  /** Props for the decorative sort direction arrow. */
326
378
  export interface TableSortIndicatorProps extends PrimitivePropsWithRef<'span'> {
327
379
  /**
@@ -10,6 +10,8 @@ export interface TableSortState {
10
10
  }
11
11
  /** Array of sorted columns, most significant first, always present even with `multiSort` off. */
12
12
  export type TableSort = TableSortState[];
13
+ /** Active column filters: each key is a `columnKey`, each value the text its rows must contain. */
14
+ export type TableFilterState = Record<string, string>;
13
15
  /** Whether `TableSelectAllCheckbox` covers the page or entire dataset. */
14
16
  export type TableSelectAllScope = 'page' | 'all';
15
17
  /** How many rows can be selected: one, many, or none. */
@@ -37,6 +39,10 @@ export interface TableContextValue {
37
39
  commitColumnWidths: () => void;
38
40
  /** Cycle column sort asc → desc → unsorted; switch columns always start at asc. */
39
41
  toggleSort: (columnKey: string, columnLabel?: string) => void;
42
+ /** Active column filters, keyed by `columnKey`; a column with no entry is unfiltered. */
43
+ filterMap: TableFilterState;
44
+ /** Set one column's filter text; an empty string clears that column. */
45
+ setColumnFilter: (columnKey: string, value: string) => void;
40
46
  /** Toggle a row's selection; `extend` selects range in `'multiple'` mode. */
41
47
  toggleRow: (id: string, extend?: boolean) => void;
42
48
  isRowSelected: (id: string) => boolean;
@@ -55,6 +61,9 @@ export interface TableHeaderCellContextValue {
55
61
  columnKey?: string | undefined;
56
62
  /** Whether this column can be sorted. */
57
63
  sortable?: boolean | undefined;
64
+ /** Whether this column can be filtered. */
65
+ filterable?: boolean | undefined;
66
+ filterLabel?: string | undefined;
58
67
  minWidth?: number | undefined;
59
68
  maxWidth?: number | undefined;
60
69
  resizeLabel?: string | undefined;
@@ -92,6 +101,21 @@ export interface TableRootProps extends Omit<PrimitivePropsWithRef<'table'>, 'on
92
101
  * @default undefined
93
102
  */
94
103
  onSortChange?: ((sort: TableSort) => void) | undefined;
104
+ /**
105
+ * Active column filters, for controlled usage.
106
+ * @default undefined
107
+ */
108
+ filter?: TableFilterState | undefined;
109
+ /**
110
+ * Initial column filters for uncontrolled usage.
111
+ * @default {}
112
+ */
113
+ defaultFilter?: TableFilterState | undefined;
114
+ /**
115
+ * Fires with the new filter map whenever a column's filter text changes.
116
+ * @default undefined
117
+ */
118
+ onFilterChange?: ((filter: TableFilterState) => void) | undefined;
95
119
  /**
96
120
  * Whether a second sorted column appends or replaces the first.
97
121
  * @default false
@@ -192,6 +216,11 @@ export interface TableColumn<T extends object = object> {
192
216
  * @default inherits root's `resizable`
193
217
  */
194
218
  resizable?: boolean | undefined;
219
+ /**
220
+ * Override the root's `filterable` for this column alone.
221
+ * @default inherits root's `filterable`
222
+ */
223
+ filterable?: boolean | undefined;
195
224
  /** @default 40 */
196
225
  minWidth?: number | undefined;
197
226
  /** @default 1000 */
@@ -228,6 +257,11 @@ export interface TableProps<T extends object = object> extends Omit<TableRootPro
228
257
  * @default false
229
258
  */
230
259
  resizable?: boolean | undefined;
260
+ /**
261
+ * Default `filterable` for every column that doesn't set its own; the derived view then renders only rows matching every active filter.
262
+ * @default false
263
+ */
264
+ filterable?: boolean | undefined;
231
265
  /**
232
266
  * Content for a derived empty row shown when data is empty.
233
267
  * @default no empty row
@@ -288,6 +322,16 @@ export interface TableHeaderCellProps extends PrimitivePropsWithRef<'th'> {
288
322
  * @default undefined
289
323
  */
290
324
  sortable?: boolean | undefined;
325
+ /**
326
+ * Renders a filter text input under the label, bound to this column's entry in the filter map.
327
+ * @default false
328
+ */
329
+ filterable?: boolean | undefined;
330
+ /**
331
+ * Accessible name for the derived filter input.
332
+ * @default `Filter ${columnKey}`
333
+ */
334
+ filterLabel?: string | undefined;
291
335
  /**
292
336
  * Renders a focusable resize handle, dragged or stepped with Arrow Left/Right.
293
337
  * @default false
@@ -322,6 +366,14 @@ export interface TableColumnHeaderSortTriggerProps extends PrimitivePropsWithRef
322
366
  */
323
367
  columnKey?: string | undefined;
324
368
  }
369
+ /** Props for the text input inside a header cell that filters its column. */
370
+ export interface TableColumnHeaderFilterInputProps extends PrimitivePropsWithRef<'input'> {
371
+ /**
372
+ * Column this input filters, inherited from the enclosing `TableHeaderCell`'s `columnKey`.
373
+ * @default enclosing `TableHeaderCell`'s `columnKey`
374
+ */
375
+ columnKey?: string | undefined;
376
+ }
325
377
  /** Props for the decorative sort direction arrow. */
326
378
  export interface TableSortIndicatorProps extends PrimitivePropsWithRef<'span'> {
327
379
  /**
@@ -0,0 +1,3 @@
1
+ import type { TableFilterState } from './types.cjs';
2
+ /** Controlled-or-uncontrolled column filter map plus the per-column setter TableRoot publishes. */
3
+ export declare function useTableFilter(prop: TableFilterState | undefined, defaultProp: TableFilterState | undefined, onChange: ((filter: TableFilterState) => void) | undefined): [TableFilterState, (columnKey: string, value: string) => void];
@@ -0,0 +1,3 @@
1
+ import type { TableFilterState } from './types.js';
2
+ /** Controlled-or-uncontrolled column filter map plus the per-column setter TableRoot publishes. */
3
+ export declare function useTableFilter(prop: TableFilterState | undefined, defaultProp: TableFilterState | undefined, onChange: ((filter: TableFilterState) => void) | undefined): [TableFilterState, (columnKey: string, value: string) => void];
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- "use strict";var l=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var b=(t,e)=>{for(var i in e)l(t,i,{get:e[i],enumerable:!0})},x=(t,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of R(e))!D.call(t,r)&&r!==i&&l(t,r,{get:()=>e[r],enumerable:!(o=v(e,r))||o.enumerable});return t};var P=t=>x(l({},"__esModule",{value:!0}),t);var I={};b(I,{Time:()=>c,formatAbsolute:()=>f,formatRelative:()=>s});module.exports=P(I);var T=require("../utils/date-value.cjs"),_=require("../utils/part.cjs"),y=require("../utils/primitive.cjs");function d(t){return t??new Intl.DateTimeFormat().resolvedOptions().locale}function f(t,e){return t.toLocaleDateString(d(e),{year:"numeric",month:"long",day:"numeric"})}var h=[["year",31536e6],["month",2592e6],["week",6048e5],["day",864e5],["hour",36e5],["minute",6e4],["second",1e3]];function s(t,e,i){let o=Date.now();e instanceof Date?o=e.getTime():e!==void 0&&(o=e);let r=t.getTime()-o,n=new Intl.RelativeTimeFormat(d(i),{numeric:"auto"});for(let[u,m]of h)if(Math.abs(r)>=m)return n.format(Math.trunc(r/m),u);return n.format(0,"second")}var g=require("react/jsx-runtime"),c=({value:t,relative:e=!1,absoluteTitle:i=!0,locale:o,now:r,children:n,ref:u,...m})=>{let a=(0,T.toDate)(t,"Time.value");if(!a)return null;let p=f(a,o);return(0,g.jsx)(y.Primitive.time,{dateTime:a.toISOString(),title:e&&i?p:void 0,...m,...(0,_.skdxPart)("time","root",m.className),ref:u,children:n??(e?s(a,r,o):p)})};c.displayName="Time";0&&(module.exports={Time,formatAbsolute,formatRelative});
2
+ "use strict";var u=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var R=Object.prototype.hasOwnProperty;var D=(t,e)=>{for(var i in e)u(t,i,{get:e[i],enumerable:!0})},x=(t,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of b(e))!R.call(t,r)&&r!==i&&u(t,r,{get:()=>e[r],enumerable:!(o=v(e,r))||o.enumerable});return t};var P=t=>x(u({},"__esModule",{value:!0}),t);var S={};D(S,{Time:()=>c,formatAbsolute:()=>s,formatRelative:()=>f});module.exports=P(S);var y=require("../utils/date-value.cjs"),_=require("../utils/part.cjs"),g=require("../utils/primitive.cjs");function T(t){return t??new Intl.DateTimeFormat().resolvedOptions().locale}function s(t,e){return t.toLocaleDateString(T(e),{year:"numeric",month:"long",day:"numeric"})}var I=[["year",31536e6],["month",2592e6],["week",6048e5],["day",864e5],["hour",36e5],["minute",6e4],["second",1e3]];function f(t,e,i){let o=Date.now();e instanceof Date?o=e.getTime():e!==void 0&&(o=e);let r=t.getTime()-o,n=new Intl.RelativeTimeFormat(T(i),{numeric:"auto"});for(let[l,a]of I)if(Math.abs(r)>=a)return n.format(Math.trunc(r/a),l);return n.format(0,"second")}var h=require("react/jsx-runtime"),c=({value:t,relative:e=!1,absoluteTitle:i=!0,locale:o,now:r,children:n,ref:l,asChild:a,...d})=>{let m=(0,y.toDate)(t,"Time.value");if(!m)return null;let p=s(m,o);return(0,h.jsx)(g.Primitive.time,{dateTime:m.toISOString(),title:e&&i?p:void 0,asChild:n===void 0?!1:a,...d,...(0,_.skdxPart)("time","root",d.className),ref:l,children:n??(e?f(m,r,o):p)})};c.displayName="Time";0&&(module.exports={Time,formatAbsolute,formatRelative});