neba 1.18.0 → 1.19.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 (200) hide show
  1. package/dist/a2ui/adapter-catalog.json +1 -1
  2. package/dist/a2ui/catalog.json +2 -2
  3. package/dist/components/accordion/Accordion.js +1 -1
  4. package/dist/components/agent-steps/AgentSteps.js +1 -1
  5. package/dist/components/alert/Alert.js +1 -1
  6. package/dist/components/anchor/Anchor.js +1 -1
  7. package/dist/components/animate-counter/AnimateCounter.js +1 -1
  8. package/dist/components/animate-headline/AnimateHeadline.js +1 -1
  9. package/dist/components/animate-lighting/AnimateLighting.js +1 -1
  10. package/dist/components/animate-marquee/AnimateMarquee.js +1 -1
  11. package/dist/components/animate-scramble/AnimateScramble.js +1 -1
  12. package/dist/components/animate-typing/AnimateTyping.js +1 -1
  13. package/dist/components/app-logo/AppLogo.js +1 -1
  14. package/dist/components/approval/Approval.js +1 -1
  15. package/dist/components/aspect-ratio/AspectRatio.js +1 -1
  16. package/dist/components/avatar/Avatar.js +1 -1
  17. package/dist/components/badge/Badge.js +1 -1
  18. package/dist/components/bar-chart/BarChart.js +1 -1
  19. package/dist/components/blockquote/Blockquote.js +1 -1
  20. package/dist/components/bottom-navigation/BottomNavigation.js +1 -1
  21. package/dist/components/breadcrumb/Breadcrumb.js +1 -1
  22. package/dist/components/button/Button.js +1 -1
  23. package/dist/components/button-group/ButtonGroup.js +1 -1
  24. package/dist/components/calendar/Calendar.js +1 -1
  25. package/dist/components/carousel/Carousel.js +1 -1
  26. package/dist/components/chat-bubble/ChatBubble.js +1 -1
  27. package/dist/components/checkbox/Checkbox.js +1 -1
  28. package/dist/components/checkbox/index.d.ts +1 -1
  29. package/dist/components/checkbox-group/CheckboxGroup.d.ts +84 -0
  30. package/dist/components/checkbox-group/CheckboxGroup.js +1 -0
  31. package/dist/components/checkbox-group/index.d.ts +2 -0
  32. package/dist/components/checkbox-group/index.js +1 -0
  33. package/dist/components/chip/Chip.d.ts +32 -3
  34. package/dist/components/chip/Chip.js +1 -1
  35. package/dist/components/code-block/CodeBlock.js +1 -1
  36. package/dist/components/collapsible/Collapsible.js +1 -1
  37. package/dist/components/color-picker/ColorPicker.js +1 -1
  38. package/dist/components/combobox/Combobox.d.ts +11 -0
  39. package/dist/components/combobox/Combobox.js +1 -1
  40. package/dist/components/combobox/index.d.ts +1 -1
  41. package/dist/components/command-palette/CommandPalette.d.ts +21 -5
  42. package/dist/components/command-palette/CommandPalette.js +1 -1
  43. package/dist/components/command-palette/CommandPaletteSheet.d.ts +27 -0
  44. package/dist/components/command-palette/CommandPaletteSheet.js +1 -0
  45. package/dist/components/command-palette/index.d.ts +1 -1
  46. package/dist/components/confirm/Confirm.d.ts +7 -5
  47. package/dist/components/confirm/Confirm.js +1 -1
  48. package/dist/components/data-list/DataList.js +1 -1
  49. package/dist/components/data-table/DataTable.js +1 -1
  50. package/dist/components/data-table/RowsPerPage.d.ts +43 -0
  51. package/dist/components/data-table/RowsPerPage.js +1 -0
  52. package/dist/components/date-picker/DatePicker.js +1 -1
  53. package/dist/components/date-range-picker/DateRangePicker.js +1 -1
  54. package/dist/components/date-time-picker/DateTimePicker.js +1 -1
  55. package/dist/components/dialog/Dialog.js +1 -1
  56. package/dist/components/dialog/index.d.ts +1 -1
  57. package/dist/components/drawer/Drawer.d.ts +1 -1
  58. package/dist/components/drawer/Drawer.js +1 -1
  59. package/dist/components/empty/Empty.js +1 -1
  60. package/dist/components/fieldset/Fieldset.d.ts +12 -1
  61. package/dist/components/fieldset/Fieldset.js +1 -1
  62. package/dist/components/file-picker/FilePicker.js +1 -1
  63. package/dist/components/floating-action-button/FloatingActionButton.js +1 -1
  64. package/dist/components/floating-action-button/index.d.ts +1 -0
  65. package/dist/components/floating-bottom-navigation/FloatingBottomNavigation.js +1 -1
  66. package/dist/components/footer/Footer.js +1 -1
  67. package/dist/components/form/Form.d.ts +8 -2
  68. package/dist/components/form/Form.js +1 -1
  69. package/dist/components/gallery/Gallery.js +1 -1
  70. package/dist/components/gauge-chart/GaugeChart.js +1 -1
  71. package/dist/components/header/Header.js +1 -1
  72. package/dist/components/heatmap-chart/HeatmapChart.js +1 -1
  73. package/dist/components/highlight/Highlight.js +1 -1
  74. package/dist/components/hover-card/HoverCard.js +1 -1
  75. package/dist/components/how-to-steps/HowToSteps.d.ts +3 -0
  76. package/dist/components/how-to-steps/HowToSteps.js +1 -1
  77. package/dist/components/image/Image.js +1 -1
  78. package/dist/components/inline-citation/InlineCitation.d.ts +24 -0
  79. package/dist/components/inline-citation/InlineCitation.js +1 -1
  80. package/dist/components/list/List.d.ts +9 -0
  81. package/dist/components/list/List.js +1 -1
  82. package/dist/components/menu/Menu.js +1 -1
  83. package/dist/components/menubar/Menubar.js +1 -1
  84. package/dist/components/meter/Meter.js +1 -1
  85. package/dist/components/mockup/Mockup.js +1 -1
  86. package/dist/components/navigation-menu/NavigationMenu.d.ts +2 -1
  87. package/dist/components/navigation-menu/NavigationMenu.js +1 -1
  88. package/dist/components/number-field/NumberField.js +1 -1
  89. package/dist/components/number-field/index.d.ts +1 -1
  90. package/dist/components/overlay/Overlay.js +1 -1
  91. package/dist/components/page-layout/PageLayout.js +1 -1
  92. package/dist/components/pagination/Pagination.js +1 -1
  93. package/dist/components/panes/Panes.js +1 -1
  94. package/dist/components/pie-chart/PieChart.js +1 -1
  95. package/dist/components/pill/Pill.js +1 -1
  96. package/dist/components/popover/Popover.js +1 -1
  97. package/dist/components/progress-box/ProgressBox.js +1 -1
  98. package/dist/components/progress-circular/ProgressCircular.js +1 -1
  99. package/dist/components/progress-linear/ProgressLinear.js +1 -1
  100. package/dist/components/prompt-input/PromptInput.js +1 -1
  101. package/dist/components/provider/NebaProvider.d.ts +3 -2
  102. package/dist/components/provider/NebaProvider.js +1 -1
  103. package/dist/components/radio-group/RadioGroup.d.ts +13 -0
  104. package/dist/components/radio-group/RadioGroup.js +1 -1
  105. package/dist/components/radio-group/index.d.ts +1 -1
  106. package/dist/components/rating/Rating.js +1 -1
  107. package/dist/components/reasoning/Reasoning.js +1 -1
  108. package/dist/components/scatter-chart/ScatterChart.js +1 -1
  109. package/dist/components/scroll-area/ScrollArea.js +1 -1
  110. package/dist/components/scroll-zone/ScrollZone.js +1 -1
  111. package/dist/components/segmented-button/SegmentedButton.js +1 -1
  112. package/dist/components/select/Select.d.ts +12 -0
  113. package/dist/components/select/Select.js +1 -1
  114. package/dist/components/select/index.d.ts +1 -1
  115. package/dist/components/shortcut/Shortcut.js +1 -1
  116. package/dist/components/sidebar/Sidebar.js +1 -1
  117. package/dist/components/sidebar/SidebarTrigger.js +1 -1
  118. package/dist/components/skeleton/Skeleton.js +1 -1
  119. package/dist/components/slider/Slider.js +1 -1
  120. package/dist/components/slider/index.d.ts +1 -1
  121. package/dist/components/sources/Sources.js +1 -1
  122. package/dist/components/sparkline/Sparkline.d.ts +7 -0
  123. package/dist/components/sparkline/Sparkline.js +1 -1
  124. package/dist/components/spoiler/Spoiler.js +1 -1
  125. package/dist/components/statistic/Statistic.js +1 -1
  126. package/dist/components/streaming-text/StreamingText.d.ts +10 -6
  127. package/dist/components/streaming-text/StreamingText.js +1 -1
  128. package/dist/components/switch/Switch.js +1 -1
  129. package/dist/components/switch/index.d.ts +1 -1
  130. package/dist/components/table/Table.js +1 -1
  131. package/dist/components/table/index.d.ts +1 -1
  132. package/dist/components/tabs/Tabs.js +1 -1
  133. package/dist/components/text-field/TextField.js +1 -1
  134. package/dist/components/text-field/index.d.ts +1 -1
  135. package/dist/components/text-link/TextLink.js +1 -1
  136. package/dist/components/time-picker/TimePicker.js +1 -1
  137. package/dist/components/timeline-chart/TimelineChart.js +1 -1
  138. package/dist/components/toast/Toast.d.ts +38 -5
  139. package/dist/components/toast/Toast.js +1 -1
  140. package/dist/components/toast/index.d.ts +2 -2
  141. package/dist/components/toast/index.js +1 -1
  142. package/dist/components/toggle/Toggle.js +1 -1
  143. package/dist/components/toggle-group/ToggleGroup.js +1 -1
  144. package/dist/components/tool-call/ToolCall.js +1 -1
  145. package/dist/components/toolbar/Toolbar.js +1 -1
  146. package/dist/components/tooltip/Tooltip.js +1 -1
  147. package/dist/components/tour/Tour.js +1 -1
  148. package/dist/components/tour/index.d.ts +1 -1
  149. package/dist/components/transfer/Transfer.d.ts +7 -0
  150. package/dist/components/transfer/Transfer.js +1 -1
  151. package/dist/components/tree-select/TreeSelect.js +1 -1
  152. package/dist/components/tree-view/TreeView.js +1 -1
  153. package/dist/components/window-pane/WindowPane.js +1 -1
  154. package/dist/index.d.ts +1 -0
  155. package/dist/index.js +1 -1
  156. package/dist/internal/animate.d.ts +34 -2
  157. package/dist/internal/animate.js +1 -1
  158. package/dist/internal/cache.d.ts +7 -1
  159. package/dist/internal/cache.js +1 -1
  160. package/dist/internal/calendar.d.ts +40 -1
  161. package/dist/internal/calendar.js +1 -1
  162. package/dist/internal/chart-frame.d.ts +86 -8
  163. package/dist/internal/chart-frame.js +1 -1
  164. package/dist/internal/chart-line.js +1 -1
  165. package/dist/internal/chart.d.ts +13 -0
  166. package/dist/internal/chart.js +1 -1
  167. package/dist/internal/checkbox-group.d.ts +29 -0
  168. package/dist/internal/checkbox-group.js +1 -0
  169. package/dist/internal/data-table.d.ts +7 -1
  170. package/dist/internal/data-table.js +1 -1
  171. package/dist/internal/date.d.ts +10 -0
  172. package/dist/internal/date.js +1 -1
  173. package/dist/internal/defaults.d.ts +14 -2
  174. package/dist/internal/idle.d.ts +10 -0
  175. package/dist/internal/idle.js +1 -0
  176. package/dist/internal/link.d.ts +4 -3
  177. package/dist/internal/media.js +1 -1
  178. package/dist/internal/observe.d.ts +4 -0
  179. package/dist/internal/observe.js +1 -1
  180. package/dist/internal/page-layout.d.ts +30 -2
  181. package/dist/internal/page-layout.js +1 -1
  182. package/dist/internal/picker.js +1 -1
  183. package/dist/internal/progress.d.ts +17 -0
  184. package/dist/internal/progress.js +1 -1
  185. package/dist/internal/refs.d.ts +18 -0
  186. package/dist/internal/refs.js +1 -0
  187. package/dist/internal/run.d.ts +34 -19
  188. package/dist/internal/run.js +1 -1
  189. package/dist/internal/sizer.d.ts +9 -4
  190. package/dist/internal/sizer.js +1 -1
  191. package/dist/internal/styles.d.ts +27 -1
  192. package/dist/internal/styles.js +1 -1
  193. package/dist/internal/tile.d.ts +34 -0
  194. package/dist/internal/tile.js +1 -0
  195. package/dist/internal/wheel.d.ts +24 -1
  196. package/dist/internal/wheel.js +1 -1
  197. package/dist/styles.css +1 -1
  198. package/dist/tailwind.css +369 -62
  199. package/dist/types.d.ts +4 -2
  200. package/package.json +2 -2
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as l}from"react/jsx-runtime";import*as a from"react";import{Combobox as t}from"@base-ui/react/combobox";import{Field as n}from"@base-ui/react/field";import{Chip as r}from"../chip/Chip.js";import{actionMessages as i,comboboxMessages as o,fillMessage as s,useMessages as c}from"../../internal/i18n.js";import{CheckIcon as d,ChevronIcon as m,CloseIcon as u,PlusIcon as p}from"../../internal/icons.js";import{keyHandler as b}from"../../internal/keys.js";import{FieldNotch as h,NotchFrame as f,restEndOf as g}from"../../internal/notch.js";import{chipRemoveClasses as v,controlTextLeadingClasses as x,cx as y,disabledClasses as N,fieldFocusTransitionClasses as w,fieldHeightClasses as j,fieldReadOnlyClasses as C,fieldRestClasses as L,fieldRingClasses as S,fieldSheetClasses as I,fieldSheetDisabledClasses as z,fieldSheetReadOnlyClasses as $,gapClasses as O,hasContent as V,iconClasses as _,metaTextClasses as M,paddingXClasses as k,popupFadeClasses as P,radiusClasses as A,readOnlyFilterClasses as E,stackGapClasses as F,surfaceClasses as R,surfaceSlots as T,transitionClasses as q}from"../../internal/styles.js";import{useStyleDefaults as B}from"../../internal/defaults.js";import{fieldLight as D,fieldSpotlightSlot as G,glowClasses as H}from"../../internal/glow.js";import{useFieldsetDisabled as K}from"../../internal/fieldset.js";const W=["group relative flex w-full cursor-text items-center","[-webkit-tap-highlight-color:transparent]",q,w,_].join(" "),J={xs:"min-h-5.5 py-0",sm:"min-h-6.5 py-[2px]",md:"min-h-8 py-[3px]",lg:"min-h-10 py-[4px]",xl:"min-h-12 py-[4px]"},Q=[R,"max-h-[min(20rem,var(--available-height))] overflow-y-auto overscroll-contain","w-[var(--anchor-width)] border bg-(--n-panel-press) p-1","[border-color:var(--n-line)]","[box-shadow:var(--neba-shadow-3),var(--neba-plate-glass)]","[outline:none]",P].join(" "),U=["relative flex cursor-pointer items-center gap-2 select-none","rounded-(--neba-radius-xs) py-1.5 pe-2 ps-7",q,"data-[highlighted]:bg-(--n-soft-hover) data-[highlighted]:text-(--n-on-tint)","data-[selected]:text-(--n-on-tint) data-[selected]:font-medium","data-[disabled]:cursor-not-allowed data-[disabled]:text-(--neba-disabled-fg)","[outline:none]"].join(" "),X=["inline-flex h-[1lh] shrink-0 cursor-pointer items-center justify-center","rounded-(--neba-radius-xs) text-(--neba-muted-fg)","[transition:color_var(--neba-duration)_var(--neba-ease)]","hover:text-(--n-accent)","focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-1","disabled:cursor-not-allowed disabled:text-(--neba-disabled-fg)"].join(" ");function Y(e){return null==e?[]:Array.isArray(e)?e.slice():[e]}export function Combobox(w){const{variant:_="outline",size:P="md",color:R="primary",density:q="default",elevation:Z=0,items:ee,multiple:le,value:ae,defaultValue:te,onValueChange:ne,filter:re,onInputValueChange:ie,allowCustom:oe=!0,customLabel:se,clearable:ce=!1,locale:de,emptyMessage:me,limit:ue,placeholder:pe,label:be,labelPlacement:he="top",description:fe,error:ge,invalid:ve,startIcon:xe,fullWidth:ye=!1,disabled:Ne,readOnly:we=!1,required:je=!1,name:Ce,open:Le,defaultOpen:Se,onOpenChange:Ie,clearLabel:ze,openLabel:$e,removeLabel:Oe,inputRef:Ve,shortcuts:_e,id:Me,className:ke,classNames:Pe,style:Ae,"aria-label":Ee,"aria-labelledby":Fe,...Re}=B(w,["size","density","variant","locale","labelPlacement"]),Te=K(Ne),qe=!Te&&!we,Be=c(o,de),De=c(i,de),Ge=Oe??(e=>s(Be.remove,{label:e})),He=V(ge),Ke=ve??He,We=Ke?"danger":R,Je=!0===le,Qe=a.useMemo(()=>ee.map(e=>({value:e.value,label:e.label??String(e.value),disabled:e.disabled})),[ee]),[Ue,Xe]=a.useState(()=>Y(te)),Ye=void 0===ae?Ue:Y(ae),[Ze,el]=a.useState(""),ll=a.useMemo(()=>new Map(Qe.map(e=>[e.value,e])),[Qe]),al=a.useCallback(e=>ll.get(e)??{value:e,label:String(e),custom:!0},[ll]),tl=oe&&!we&&!Te,nl=a.useMemo(()=>{if(!tl)return null;const e=new Set;for(const l of Qe)e.add(l.label.toLocaleLowerCase()),e.add(String(l.value).toLocaleLowerCase());return e},[tl,Qe]),rl=Ze.trim();let il=null;if(nl&&""!==rl){const e=rl.toLocaleLowerCase();nl.has(e)||Ye.some(l=>String(l).toLocaleLowerCase()===e)||(il=rl)}const ol=t.useFilter({locale:de}),sl=null!==il&&void 0!==ue&&ue>-1,cl=a.useMemo(()=>{if(null===il)return Qe;const e={value:il,label:il,custom:!0};if(!sl)return[...Qe,e];return[...(!1===re?Qe:Qe.filter(e=>re?re(e,il):ol.contains(e.label,il))).slice(0,ue),e]},[Qe,il,sl,re,ol,ue]),dl=Je?Ye.map(al):Ye.length>0?al(Ye[0]):null;const ml=k[q][P],ul="top"!==he&&V(be),pl=ul&&"float"===he&&!V(xe),bl=[W,x[P],A[P],O[P],Je?J[P]:j[P],`${ml} pe-1.5`,ul?"":S,Te?(ul?z:N)[_]:we?ul?`${$[_]} ${E}`:C[_]:`${(ul?I:L)[_]} ${H}`,Pe?.shell].filter(Boolean).join(" "),hl=["neba-input min-w-0 flex-1 self-stretch bg-transparent [font:inherit] text-inherit","[outline:none]","placeholder:text-(--neba-muted-fg)","caret-(--n-accent) selection:bg-(--n-soft-press)","disabled:cursor-not-allowed",pl?"neba-float-control":"",Pe?.control].filter(Boolean).join(" "),fl=l=>e(t.Input,{ref:Ve,"aria-label":Ee,"aria-labelledby":Fe,onKeyDown:b(_e),placeholder:pl?pe||" ":pe,className:Je?`${hl} min-w-16 ${l?"ms-1.5":""}`:hl}),gl=l(t.InputGroup,{className:bl,...D(qe),children:[xe?e("span",{className:"flex h-[1lh] shrink-0 items-center text-(--neba-muted-fg)",children:xe}):null,Je?e(t.Chips,{className:"flex min-w-0 flex-1 flex-wrap items-center gap-1",children:e(t.Value,{children:n=>l(a.Fragment,{children:[n.map(l=>e(t.Chip,{render:e(r,{variant:"outline",size:P,color:We,density:"compact",disabled:Te,className:Pe?.chip,endIcon:we||Te?null:e(t.ChipRemove,{"aria-label":Ge(l.label),className:v,children:e(u,{})})}),children:l.label},String(l.value))),fl(n.length>0)]})})}):fl(!1),ce&&!we?e(t.Clear,{"aria-label":ze??De.clear,className:X,children:e(u,{})}):null,e(t.Trigger,{"aria-label":"string"==typeof be?void 0:$e??Be.open,className:X,children:e(t.Icon,{className:["flex items-center","[transition:rotate_var(--neba-duration)_var(--neba-ease)]","data-[popup-open]:rotate-180"].join(" "),children:e(m,{})})}),ul?e(h,{label:be,variant:_,disabled:Te,readOnly:we,rests:pl,empty:Je?0===Ye.length&&""===Ze:void 0,labelClassName:Pe?.label}):null]});return l(n.Root,{disabled:Te,invalid:Ke,className:y("flex-col align-top",F[P],ye?"flex w-full":"inline-flex",ke??""),style:{...T(We,Z),...qe?G:void 0,...Ae},...Re,children:[be&&!ul?e(n.Label,{className:y(M[P],"font-medium",Te?"text-(--neba-disabled-fg)":"text-(--neba-fg)",Pe?.label),children:be}):null,l(t.Root,{id:Me,name:Ce,items:cl,multiple:Je,value:dl,onValueChange:e=>{!function(e){void 0===ae&&Xe(e),ne?.(Je?e:e[0]??null)}((null===e?[]:Array.isArray(e)?e:[e]).map(e=>e.value))},onInputValueChange:e=>{el(e),ie?.(e)},open:Le,defaultOpen:Se,onOpenChange:e=>Ie?.(e),autoHighlight:!0,itemToStringLabel:e=>e.label,itemToStringValue:e=>String(e.value),isItemEqualToValue:(e,l)=>e.value===l.value,limit:sl?-1:ue,filter:sl||!1===re?null:re?(e,l)=>!0===e.custom||re(e,l):void 0,disabled:Te,readOnly:we,required:je,children:[ul?e(f,{label:be,size:P,density:q,variant:_,rests:pl,restEnd:g(P,ce&&!we?[1.2,1.2]:[1.2]),labelClassName:Pe?.label,children:gl}):gl,e(t.Portal,{children:e(t.Positioner,{className:"neba-portal z-(--neba-z-portal) [outline:none]",sideOffset:6,children:l(t.Popup,{className:y(Q,A[P],x[P],Pe?.popup),style:T(We,3),children:[e(t.Empty,{className:"px-2 py-1.5 text-(--neba-muted-fg) empty:hidden",children:me??Be.empty}),e(t.List,{children:n=>e(t.Item,{value:n,disabled:n.disabled,className:y(U,Pe?.item),children:n.custom?l(a.Fragment,{children:[e("span",{className:"absolute start-1.5 flex size-4 items-center justify-center text-(--n-accent) [&_svg]:size-4",children:e(p,{})}),e("span",{className:"truncate",children:se?se(n.label):s(Be.add,{label:n.label})})]}):l(a.Fragment,{children:[e(t.ItemIndicator,{className:"absolute start-1.5 flex size-4 items-center justify-center",children:e(d,{})}),e("span",{className:"truncate",children:n.label})]})},`${n.custom?"custom:":""}${String(n.value)}`)})]})})})]}),fe?e(n.Description,{className:y(M[P],"text-(--neba-muted-fg)",Pe?.description),children:fe}):null,e(n.Error,He?{match:!0,className:y(M[P],"text-(--n-accent)",Pe?.error),children:ge}:{className:y(M[P],"text-(--n-accent)",Pe?.error)})]})}
1
+ "use client";import{jsx as e,jsxs as l}from"react/jsx-runtime";import*as a from"react";import{Combobox as t}from"@base-ui/react/combobox";import{Field as n}from"@base-ui/react/field";import{Chip as r}from"../chip/Chip.js";import{actionMessages as i,comboboxMessages as o,fillMessage as s,useMessages as c}from"../../internal/i18n.js";import{CheckIcon as d,ChevronIcon as u,CloseIcon as m,PlusIcon as p}from"../../internal/icons.js";import{keyHandler as b}from"../../internal/keys.js";import{FieldNotch as f,NotchFrame as h,restEndOf as g}from"../../internal/notch.js";import{chipRemoveClasses as v,controlTextLeadingClasses as x,cx as y,disabledClasses as N,fieldFocusTransitionClasses as w,fieldHeightClasses as C,fieldReadOnlyClasses as j,fieldRestClasses as L,fieldRingClasses as S,fieldSheetClasses as I,fieldSheetDisabledClasses as O,fieldSheetReadOnlyClasses as z,gapClasses as M,hasContent as $,iconClasses as V,metaTextClasses as _,paddingXClasses as k,popupFadeClasses as P,radiusClasses as A,readOnlyFilterClasses as E,stackGapClasses as F,surfaceClasses as R,surfaceSlots as T,transitionClasses as q}from"../../internal/styles.js";import{useStyleDefaults as B}from"../../internal/defaults.js";import{fieldLight as D,fieldSpotlightSlot as J,glowClasses as W}from"../../internal/glow.js";import{useFieldsetDisabled as G}from"../../internal/fieldset.js";const H="group relative flex w-full cursor-text items-center [-webkit-tap-highlight-color:transparent] "+q+" "+w+" "+V,K={xs:"min-h-5.5 py-0",sm:"min-h-6.5 py-[2px]",md:"min-h-8 py-[3px]",lg:"min-h-10 py-[4px]",xl:"min-h-12 py-[4px]"},Q=R+" max-h-[min(20rem,var(--available-height))] overflow-y-auto overscroll-contain w-[var(--anchor-width)] border bg-(--n-panel-press) p-1 [border-color:var(--n-line)] [box-shadow:var(--neba-shadow-3),var(--neba-plate-glass)] [outline:none] "+P,U="relative flex cursor-pointer items-center gap-2 select-none rounded-(--neba-radius-xs) py-1.5 pe-2 ps-7 "+q+" data-[highlighted]:bg-(--n-soft-hover) data-[highlighted]:text-(--n-on-tint) data-[selected]:text-(--n-on-tint) data-[selected]:font-medium data-[disabled]:cursor-not-allowed data-[disabled]:text-(--neba-disabled-fg) [outline:none]",X="inline-flex h-[1lh] shrink-0 cursor-pointer items-center justify-center rounded-(--neba-radius-xs) text-(--neba-muted-fg) [transition:color_var(--neba-duration)_var(--neba-ease)] hover:text-(--n-accent) focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-1 disabled:cursor-not-allowed disabled:text-(--neba-disabled-fg)";function Y(e){return e.label}function Z(e){return String(e.value)}function ee(e,l){return e.value===l.value}const le=new WeakMap;function ae(e){return null==e?[]:Array.isArray(e)?e.slice():[e]}export function Combobox(w){const{variant:V="outline",size:P="md",color:R="primary",density:q="default",elevation:te=0,items:ne,multiple:re,value:ie,defaultValue:oe,onValueChange:se,filter:ce,onInputValueChange:de,allowCustom:ue=!0,customLabel:me,clearable:pe=!1,locale:be,emptyMessage:fe,limit:he,placeholder:ge,label:ve,labelPlacement:xe="top",description:ye,error:Ne,invalid:we,startIcon:Ce,fullWidth:je=!1,disabled:Le,readOnly:Se=!1,required:Ie=!1,name:Oe,autoComplete:ze,open:Me,defaultOpen:$e,onOpenChange:Ve,clearLabel:_e,openLabel:ke,removeLabel:Pe,inputRef:Ae,shortcuts:Ee,id:Fe,className:Re,classNames:Te,style:qe,"aria-label":Be,"aria-labelledby":De,...Je}=B(w,["size","density","variant","locale","labelPlacement"]),We=G(Le),Ge=!We&&!Se,He=c(o,be),Ke=c(i,be),Qe=Pe??(e=>s(He.remove,{label:e})),Ue=$(Ne),Xe=we??Ue,Ye=Xe?"danger":R,Ze=!0===re,el=function(e){let l=le.get(e);return void 0===l&&(l=JSON.stringify(e.map(e=>[e.value,typeof e.value,e.label,!0===e.disabled])),le.set(e,l)),l}(ne),ll=a.useMemo(()=>ne.map(e=>({value:e.value,label:e.label??String(e.value),disabled:e.disabled})),[el]),[al,tl]=a.useState(()=>ae(oe)),nl=void 0===ie?al:ae(ie),[rl,il]=a.useState(""),ol=a.useMemo(()=>new Map(ll.map(e=>[e.value,e])),[ll]),sl=a.useCallback(e=>ol.get(e)??{value:e,label:String(e),custom:!0},[ol]),cl=ue&&!Se&&!We,dl=a.useMemo(()=>{if(!cl)return null;const e=new Set;for(const l of ll)e.add(l.label.toLocaleLowerCase()),e.add(String(l.value).toLocaleLowerCase());return e},[cl,ll]),ul=rl.trim();let ml=null;if(dl&&""!==ul){const e=ul.toLocaleLowerCase();dl.has(e)||nl.some(l=>String(l).toLocaleLowerCase()===e)||(ml=ul)}const pl=t.useFilter({locale:be}),bl=null!==ml&&void 0!==he&&he>-1,fl=a.useMemo(()=>{if(null===ml)return ll;const e={value:ml,label:ml,custom:!0};if(!bl)return[...ll,e];return[...(!1===ce?ll:ll.filter(e=>ce?ce(e,ml):pl.contains(e.label,ml))).slice(0,he),e]},[ll,ml,bl,ce,pl,he]),hl=nl.map(sl),gl=JSON.stringify(hl),vl=a.useMemo(()=>Ze?hl:hl[0]??null,[Ze,gl]),xl=a.useMemo(()=>bl||!1===ce?null:ce?(e,l)=>!0===e.custom||ce(e,l):void 0,[bl,ce]);const yl=k[q][P],Nl="top"!==xe&&$(ve),wl=Nl&&"float"===xe&&!$(Ce),Cl=[H,x[P],A[P],M[P],Ze?K[P]:C[P],`${yl} pe-1.5`,Nl?"":S,We?(Nl?O:N)[V]:Se?Nl?`${z[V]} ${E}`:j[V]:`${(Nl?I:L)[V]} ${W}`,Te?.shell].filter(Boolean).join(" "),jl=["neba-input min-w-0 flex-1 self-stretch bg-transparent [font:inherit] text-inherit","[outline:none]","placeholder:text-(--neba-muted-fg)","caret-(--n-accent) selection:bg-(--n-soft-press)","disabled:cursor-not-allowed",wl?"neba-float-control":"",Te?.control].filter(Boolean).join(" "),Ll=l=>e(t.Input,{ref:Ae,"aria-label":Be,"aria-labelledby":De,onKeyDown:b(Ee),placeholder:wl?ge||" ":ge,className:Ze?`${jl} min-w-16 ${l?"ms-1.5":""}`:jl}),Sl=l(t.InputGroup,{className:Cl,...D(Ge),children:[Ce?e("span",{className:"flex h-[1lh] shrink-0 items-center text-(--neba-muted-fg)",children:Ce}):null,Ze?e(t.Chips,{className:"flex min-w-0 flex-1 flex-wrap items-center gap-1",children:e(t.Value,{children:n=>l(a.Fragment,{children:[n.map(l=>e(t.Chip,{render:e(r,{variant:"outline",size:P,color:Ye,density:"compact",disabled:We,className:Te?.chip,endIcon:Se||We?null:e(t.ChipRemove,{"aria-label":Qe(l.label),className:v,children:e(m,{})})}),children:l.label},String(l.value))),Ll(n.length>0)]})})}):Ll(!1),pe&&!Se?e(t.Clear,{"aria-label":_e??Ke.clear,className:X,children:e(m,{})}):null,e(t.Trigger,{"aria-label":"string"==typeof ve?void 0:ke??He.open,className:X,children:e(t.Icon,{className:"flex items-center [transition:rotate_var(--neba-duration)_var(--neba-ease)] data-[popup-open]:rotate-180",children:e(u,{})})}),Nl?e(f,{label:ve,variant:V,disabled:We,readOnly:Se,rests:wl,empty:Ze?0===nl.length&&""===rl:void 0,labelClassName:Te?.label}):null]});return l(n.Root,{disabled:We,invalid:Xe,className:y("flex-col align-top",F[P],je?"flex w-full":"inline-flex",Re??""),style:{...T(Ye,te),...Ge?J:void 0,...qe},...Je,children:[ve&&!Nl?e(n.Label,{className:y(_[P],"font-medium",We?"text-(--neba-disabled-fg)":"text-(--neba-fg)",Te?.label),children:ve}):null,l(t.Root,{id:Fe,name:Oe,autoComplete:ze,items:fl,multiple:Ze,value:vl,onValueChange:e=>{!function(e){void 0===ie&&tl(e),se?.(Ze?e:e[0]??null)}((null===e?[]:Array.isArray(e)?e:[e]).map(e=>e.value))},onInputValueChange:e=>{il(e),de?.(e)},open:Me,defaultOpen:$e,onOpenChange:e=>Ve?.(e),autoHighlight:!0,itemToStringLabel:Y,itemToStringValue:Z,isItemEqualToValue:ee,limit:bl?-1:he,filter:xl,disabled:We,readOnly:Se,required:Ie,children:[Nl?e(h,{label:ve,size:P,density:q,variant:V,rests:wl,restEnd:g(P,pe&&!Se?[1.2,1.2]:[1.2]),labelClassName:Te?.label,children:Sl}):Sl,e(t.Portal,{children:e(t.Positioner,{className:"neba-portal z-(--neba-z-portal) [outline:none]",sideOffset:6,children:l(t.Popup,{className:y(Q,A[P],x[P],Te?.popup),style:T(Ye,3),children:[e(t.Empty,{className:"px-2 py-1.5 text-(--neba-muted-fg) empty:hidden",children:fe??He.empty}),e(t.List,{children:n=>e(t.Item,{value:n,disabled:n.disabled,className:y(U,Te?.item),children:n.custom?l(a.Fragment,{children:[e("span",{className:"absolute start-1.5 flex size-4 items-center justify-center text-(--n-accent) [&_svg]:size-4",children:e(p,{})}),e("span",{className:"truncate",children:me?me(n.label):s(He.add,{label:n.label})})]}):l(a.Fragment,{children:[e(t.ItemIndicator,{className:"absolute start-1.5 flex size-4 items-center justify-center",children:e(d,{})}),e("span",{className:"truncate",children:n.label})]})},`${n.custom?"custom:":""}${String(n.value)}`)})]})})})]}),ye?e(n.Description,{className:y(_[P],"text-(--neba-muted-fg)",Te?.description),children:ye}):null,e(n.Error,Ue?{match:!0,className:y(_[P],"text-(--n-accent)",Te?.error),children:Ne}:{className:y(_[P],"text-(--n-accent)",Te?.error)})]})}
@@ -1,2 +1,2 @@
1
1
  export { Combobox } from './Combobox.js';
2
- export type { ComboboxOption, ComboboxProps, ComboboxValue } from './Combobox.js';
2
+ export type { ComboboxOption, ComboboxProps, ComboboxSlot, ComboboxValue } from './Combobox.js';
@@ -87,6 +87,19 @@ export interface CommandPaletteProps extends Pick<NebaStyleProps, 'size' | 'colo
87
87
  */
88
88
  classNames?: NebaSlots<CommandPaletteSlot>;
89
89
  }
90
+ /**
91
+ * The one request for the sheet's chunk, shared by everything that asks. A
92
+ * request that fails is forgotten, so the next one tries again rather than
93
+ * failing for good.
94
+ *
95
+ * An object rather than a function so a test can spy on it. Exported for that,
96
+ * and deliberately left out of the barrel.
97
+ */
98
+ export declare const sheetChunk: {
99
+ load(): Promise<{
100
+ default: typeof import("./CommandPaletteSheet.js").CommandPaletteSheet;
101
+ }>;
102
+ };
90
103
  /**
91
104
  * Everything an application can do, behind one field.
92
105
  *
@@ -97,9 +110,12 @@ export interface CommandPaletteProps extends Pick<NebaStyleProps, 'size' | 'colo
97
110
  * [Combobox](./combobox) either: what comes back is not a value, it is
98
111
  * something happening.
99
112
  *
100
- * Base UI's Autocomplete owns the list — the highlight the pointer and the arrow
101
- * keys share, `aria-activedescendant`, Enter running the highlighted row — and
102
- * its Dialog owns the sheet, the scrim, the focus trap and returning the focus
103
- * to wherever the reader was.
113
+ * What is here is what has to be ready before the palette is: the open state
114
+ * and the key that changes it. Everything drawn is in `CommandPaletteSheet`,
115
+ * which is mounted by the first open and kept from then on, so it can fade out
116
+ * as it closes. It is never mounted on a server or in the render that hydrates
117
+ * what a server sent — a component fetched on demand suspends there, and the
118
+ * server drew nothing for a shut dialog anyway — so a palette that starts open
119
+ * opens once the page has hydrated.
104
120
  */
105
- export declare function CommandPalette(rawProps: CommandPaletteProps): React.JSX.Element;
121
+ export declare function CommandPalette(rawProps: CommandPaletteProps): React.JSX.Element | null;
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as a from"react";import{Autocomplete as l}from"@base-ui/react/autocomplete";import{Dialog as n}from"@base-ui/react/dialog";import{Shortcut as s}from"../shortcut/Shortcut.js";import{useShortcut as o}from"../../hooks/useShortcut.js";import{commandMessages as r,useMessages as i}from"../../internal/i18n.js";import{searchHaystack as c,searchText as m}from"../../internal/search.js";import{controlTextLeadingClasses as d,cx as p,hasContent as u,metaTextClasses as h,popupFadeClasses as x,radiusClasses as b,surfaceClasses as f,surfaceSlots as g,toLength as v}from"../../internal/styles.js";import{useStyleDefaults as y}from"../../internal/defaults.js";const w=["fixed inset-0 z-(--neba-z-portal) bg-(--neba-scrim)","[backdrop-filter:blur(2px)]",x].join(" "),N=[f,"relative flex w-full flex-col overflow-hidden","border text-(--neba-fg) bg-(--n-panel-press)","[border-color:var(--n-line)]","[box-shadow:var(--neba-shadow-3),var(--neba-plate-glass)]","[outline:none]",x].join(" "),k={xs:"max-w-sm",sm:"max-w-md",md:"max-w-xl",lg:"max-w-2xl",xl:"max-w-3xl"},j={xs:"h-9",sm:"h-10",md:"h-12",lg:"h-14",xl:"h-16"},z={xs:"py-1",sm:"py-1.5",md:"py-2",lg:"py-2.5",xl:"py-3"},C={xs:"px-2.5",sm:"px-3",md:"px-3.5",lg:"px-4",xl:"px-5"},S=["flex cursor-pointer items-center gap-3 select-none","[transition:background-color_var(--neba-duration)_var(--neba-ease)]","data-[highlighted]:bg-(--n-soft) data-[highlighted]:text-(--n-on-tint)","data-[disabled]:cursor-not-allowed data-[disabled]:text-(--neba-disabled-fg)"].join(" ");function M(e){return c([e.label,e.group,...e.keywords??[]])}export function CommandPalette(c){const{items:x,open:f,defaultOpen:O=!1,onOpenChange:$,onSelect:P,shortcut:V="Mod+K",width:_,maxHeight:E=320,locale:G,placeholder:H,emptyMessage:I,label:L,size:R="md",color:T="primary",density:W="default",className:B,classNames:D}=y(c,["size","density","locale"]),F=i(r,G),[K,q]=a.useState(O),[A,J]=a.useState(""),Q=f??K,[U,X]=a.useState(Q);Q!==U&&(X(Q),Q||J(""));const Y=a.useCallback(e=>{void 0===f&&q(e),$?.(e)},[f,$]);o(V,()=>{Q||Y(!0)},{ignoreWhileTyping:!1});const Z=a.useMemo(()=>x.map(M),[x]),ee=a.useMemo(()=>{const e=m(A);return""===e?x:x.filter((t,a)=>Z[a].includes(e))},[x,Z,A]),{groups:te,order:ae}=a.useMemo(()=>{const e=[],t=new Map;return ee.forEach((a,l)=>{t.set(a,l);const n=e[e.length-1];n&&n.value===a.group?n.items.push(a):e.push({key:`${e.length}:${a.group??""}`,value:a.group,items:[a]})}),{groups:e,order:t}},[ee]),le=v(_),ne=v(E);return e(n.Root,{open:Q,onOpenChange:Y,children:t(n.Portal,{children:[e(n.Backdrop,{className:p("neba-portal",w,D?.backdrop)}),e(n.Viewport,{className:p("neba-portal fixed inset-0 z-(--neba-z-portal) flex justify-center p-4 pt-[12vh]",D?.viewport),children:e(n.Popup,{"aria-label":L??F.label,className:p(N,b[R],d[R],void 0===le?k[R]:"","self-start",B),style:{...g(T,3),...void 0===le?null:{maxWidth:le}},children:t(l.Root,{open:!0,mode:"list",items:te,filter:null,value:A,onValueChange:e=>J(e),onOpenChange:(e,t)=>{e||"escape-key"!==t.reason||Y(!1)},itemToStringValue:e=>e.label,children:[e("div",{className:`flex shrink-0 items-center border-b [border-color:var(--n-line)] ${C[R]}`,children:e(l.Input,{autoFocus:!0,placeholder:H??F.search,className:p("neba-input min-w-0 flex-1 bg-transparent [font:inherit] text-inherit [outline:none]","placeholder:text-(--neba-muted-fg) caret-(--n-accent)",j[R],D?.input)})}),e(l.List,{className:p("min-h-0 flex-1 overflow-y-auto overscroll-contain p-1",D?.list),style:{maxHeight:ne},children:a=>t(l.Group,{items:a.items,children:[a.value?e(l.GroupLabel,{className:p(C[R],"pt-2 pb-1 font-medium text-(--neba-muted-fg)",h[R],D?.group),children:a.value}):null,e(l.Collection,{children:a=>t(l.Item,{index:ae.get(a),value:a,disabled:a.disabled,onClick:()=>(e=>{e.disabled||(e.onSelect?.(),P?.(e),Y(!1))})(a),className:p(S,b[R],C[R],z["compact"===W?"xs":R],D?.item),children:[u(a.icon)?e("span",{className:"flex h-[1lh] shrink-0 items-center [&_svg]:size-[1.15em]",children:a.icon}):null,t("span",{className:"flex min-w-0 flex-1 flex-col",children:[e("span",{className:"truncate",children:a.label}),u(a.description)?e("span",{className:`truncate text-(--neba-muted-fg) ${h[R]}`,children:a.description}):null]}),a.shortcut?e(s,{size:"xs",keys:a.shortcut,className:"shrink-0"}):null]},a.value)})]},a.key)}),e(l.Empty,{className:p(C[R],"py-6 text-center text-(--neba-muted-fg)",h[R],D?.empty),children:I??F.empty})]})})})]})})}
1
+ "use client";import{jsx as e}from"react/jsx-runtime";import*as t from"react";import{useShortcut as n}from"../../hooks/useShortcut.js";import{useHydrated as o}from"../../internal/media.js";import{useStyleDefaults as a}from"../../internal/defaults.js";import{whenIdle as l}from"../../internal/idle.js";let s,r;export const sheetChunk={load:()=>(s??=import("./CommandPaletteSheet.js").then(e=>({default:e.CommandPaletteSheet})).then(e=>(r=e.default,e),e=>{throw s=void 0,e}),s)};const i=t.lazy(()=>sheetChunk.load());export function CommandPalette(s){const{open:u,defaultOpen:m=!1,onOpenChange:d,shortcut:c="Mod+K",size:h="md",color:p="primary",density:f="default",...C}=a(s,["size","density","locale"]),[j,S]=t.useState(m),k=u??j,y=t.useCallback(e=>{void 0===u&&S(e),d?.(e)},[u,d]);n(c,()=>{k||y(!0)},{ignoreWhileTyping:!1});const g=o(),[x,z]=t.useState(null),[O]=t.useState(k);return null===x&&k&&g&&z(()=>r??i),t.useEffect(()=>l(()=>{sheetChunk.load().catch(()=>{})},2e3,200),[]),x?e(t.Suspense,{fallback:null,children:e(x,{...C,open:k,onOpenChange:y,fadeIn:!O,size:h,color:p,density:f})}):null}
@@ -0,0 +1,27 @@
1
+ import * as React from 'react';
2
+ import type { NebaColor, NebaDensity, NebaSize } from '../../types.js';
3
+ import type { CommandPaletteProps } from './CommandPalette.js';
4
+ /** What the palette hands the sheet, with its defaults already settled. */
5
+ export interface CommandPaletteSheetProps extends Omit<CommandPaletteProps, 'open' | 'defaultOpen' | 'onOpenChange' | 'shortcut' | 'size' | 'color' | 'density'> {
6
+ open: boolean;
7
+ onOpenChange: (open: boolean) => void;
8
+ /** Whether the first open fades in. A palette open from the start never did. */
9
+ fadeIn: boolean;
10
+ size: NebaSize;
11
+ color: NebaColor;
12
+ density: NebaDensity;
13
+ }
14
+ /**
15
+ * The palette's sheet: the dialog, the field and the rows.
16
+ *
17
+ * A file of its own so that it can be fetched on its own. Base UI's Dialog and
18
+ * Autocomplete are most of what a palette weighs, and a palette is shut until
19
+ * a reader asks for it — see `CommandPalette` for when it is fetched and
20
+ * mounted. Once mounted it stays, so the sheet can fade out as it closes.
21
+ *
22
+ * Base UI's Autocomplete owns the list — the highlight the pointer and the arrow
23
+ * keys share, `aria-activedescendant`, Enter running the highlighted row — and
24
+ * its Dialog owns the sheet, the scrim, the focus trap and returning the focus
25
+ * to wherever the reader was.
26
+ */
27
+ export declare function CommandPaletteSheet({ items, open, onOpenChange, fadeIn, onSelect, width, maxHeight, locale, placeholder, emptyMessage, label, size, color, density, className, classNames }: CommandPaletteSheetProps): React.JSX.Element;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as a from"react";import{Autocomplete as l}from"@base-ui/react/autocomplete";import{Dialog as n}from"@base-ui/react/dialog";import{Shortcut as s}from"../shortcut/Shortcut.js";import{useLayoutEffectOnClient as r}from"../../internal/layout-effect.js";import{commandMessages as o,useMessages as i}from"../../internal/i18n.js";import{searchHaystack as c,searchText as m}from"../../internal/search.js";import{controlTextLeadingClasses as p,cx as d,hasContent as u,metaTextClasses as h,popupFadeClasses as x,radiusClasses as b,surfaceClasses as f,surfaceSlots as g,toLength as v}from"../../internal/styles.js";const y="fixed inset-0 z-(--neba-z-portal) bg-(--neba-scrim) [backdrop-filter:blur(2px)] "+x,w=`${f} relative flex w-full flex-col overflow-hidden border text-(--neba-fg) bg-(--n-panel-press) [border-color:var(--n-line)] [box-shadow:var(--neba-shadow-3),var(--neba-plate-glass)] [outline:none] `+x,N={xs:"max-w-sm",sm:"max-w-md",md:"max-w-xl",lg:"max-w-2xl",xl:"max-w-3xl"},k={xs:"h-9",sm:"h-10",md:"h-12",lg:"h-14",xl:"h-16"},j={xs:"py-1",sm:"py-1.5",md:"py-2",lg:"py-2.5",xl:"py-3"},S={xs:"px-2.5",sm:"px-3",md:"px-3.5",lg:"px-4",xl:"px-5"};function z(e){return c([e.label,e.group,...e.keywords??[]])}export function CommandPaletteSheet({items:c,open:x,onOpenChange:f,fadeIn:C,onSelect:M,width:$,maxHeight:I=320,locale:O,placeholder:P,emptyMessage:V,label:_,size:E,color:G,density:H,className:L,classNames:R}){const B=i(o,O),[D,F]=a.useState(""),[T,W]=a.useState(C);r(()=>{W(!1)},[]);const[q,A]=a.useState(x);x!==q&&(A(x),x||F(""));const J=a.useMemo(()=>x?c.map(z):null,[c,x]),K=a.useMemo(()=>{if(null===J)return c;const e=m(D);return""===e?c:c.filter((t,a)=>J[a].includes(e))},[c,J,D]),{groups:Q,order:U}=a.useMemo(()=>{const e=[],t=new Map;return K.forEach((a,l)=>{t.set(a,l);const n=e[e.length-1];n&&n.value===a.group?n.items.push(a):e.push({key:`${e.length}:${a.group??""}`,value:a.group,items:[a]})}),{groups:e,order:t}},[K]),X=v($),Y=v(I);return e(n.Root,{open:x&&!T,onOpenChange:f,children:t(n.Portal,{children:[e(n.Backdrop,{className:d("neba-portal",y,R?.backdrop)}),e(n.Viewport,{className:d("neba-portal fixed inset-0 z-(--neba-z-portal) flex justify-center p-4 pt-[12vh]",R?.viewport),children:e(n.Popup,{"aria-label":_??B.label,className:d(w,b[E],p[E],void 0===X?N[E]:"","self-start",L),style:{...g(G,3),...void 0===X?null:{maxWidth:X}},children:t(l.Root,{open:!0,mode:"list",items:Q,filter:null,value:D,onValueChange:e=>F(e),onOpenChange:(e,t)=>{e||"escape-key"!==t.reason||f(!1)},itemToStringValue:e=>e.label,children:[e("div",{className:`flex shrink-0 items-center border-b [border-color:var(--n-line)] ${S[E]}`,children:e(l.Input,{autoFocus:!0,placeholder:P??B.search,className:d("neba-input min-w-0 flex-1 bg-transparent [font:inherit] text-inherit [outline:none]","placeholder:text-(--neba-muted-fg) caret-(--n-accent)",k[E],R?.input)})}),e(l.List,{className:d("min-h-0 flex-1 overflow-y-auto overscroll-contain p-1",R?.list),style:{maxHeight:Y},children:a=>t(l.Group,{items:a.items,children:[a.value?e(l.GroupLabel,{className:d(S[E],"pt-2 pb-1 font-medium text-(--neba-muted-fg)",h[E],R?.group),children:a.value}):null,e(l.Collection,{children:a=>t(l.Item,{index:U.get(a),value:a,disabled:a.disabled,onClick:()=>(e=>{e.disabled||(e.onSelect?.(),M?.(e),f(!1))})(a),className:d("flex cursor-pointer items-center gap-3 select-none [transition:background-color_var(--neba-duration)_var(--neba-ease)] data-[highlighted]:bg-(--n-soft) data-[highlighted]:text-(--n-on-tint) data-[disabled]:cursor-not-allowed data-[disabled]:text-(--neba-disabled-fg)",b[E],S[E],j["compact"===H?"xs":E],R?.item),children:[u(a.icon)?e("span",{className:"flex h-[1lh] shrink-0 items-center [&_svg]:size-[1.15em]",children:a.icon}):null,t("span",{className:"flex min-w-0 flex-1 flex-col",children:[e("span",{className:"truncate",children:a.label}),u(a.description)?e("span",{className:`truncate text-(--neba-muted-fg) ${h[E]}`,children:a.description}):null]}),a.shortcut?e(s,{size:"xs",keys:a.shortcut,className:"shrink-0"}):null]},a.value)})]},a.key)}),e(l.Empty,{className:d(S[E],"py-6 text-center text-(--neba-muted-fg)",h[E],R?.empty),children:V??B.empty})]})})})]})})}
@@ -1,2 +1,2 @@
1
1
  export { CommandPalette } from './CommandPalette.js';
2
- export type { CommandItem, CommandPaletteProps } from './CommandPalette.js';
2
+ export type { CommandItem, CommandPaletteProps, CommandPaletteSlot } from './CommandPalette.js';
@@ -57,8 +57,9 @@ export interface ConfirmProviderProps {
57
57
  * **Questions queue.** Two raised at once are two questions somebody meant to
58
58
  * ask, and resolving the older one `false` to make room would be reporting an
59
59
  * answer the reader never gave — which reads, at the call site, as "they said
60
- * no". So the second waits for the first, and no promise is settled by anything
61
- * but a person.
60
+ * no". So the second waits for the first, and while the provider is mounted no
61
+ * promise is settled by anything but a person. Unmounting it answers whatever
62
+ * is still waiting `false`, since nobody is left to ask.
62
63
  */
63
64
  export declare function ConfirmProvider({ children, defaults }: ConfirmProviderProps): React.JSX.Element;
64
65
  /**
@@ -76,8 +77,9 @@ export declare function ConfirmProvider({ children, defaults }: ConfirmProviderP
76
77
  * the code that acts: a callback splits one decision across two functions and
77
78
  * leaves the caller to carry whatever it was about to do into the second.
78
79
  *
79
- * Cancelling, Escape and a click on the backdrop all resolve `false`. It never
80
- * rejects — a question that was answered "no" is an answer, not a failure, and
81
- * a promise that throws for it turns every call site into a `try`.
80
+ * Cancelling, Escape and a click on the backdrop all resolve `false`, and so
81
+ * does the `ConfirmProvider` unmounting before the question is answered. It
82
+ * never rejects — a question that was answered "no" is an answer, not a
83
+ * failure, and a promise that throws for it turns every call site into a `try`.
82
84
  */
83
85
  export declare function useConfirm(): ConfirmFunction;
@@ -1 +1 @@
1
- "use client";import{jsx as e,Fragment as t,jsxs as n}from"react/jsx-runtime";import{DefaultsContext as r}from"../../internal/defaults.js";import*as o from"react";import{Button as i}from"../button/Button.js";import{Dialog as l}from"../dialog/Dialog.js";import{confirmMessages as s,useMessages as c}from"../../internal/i18n.js";const a=/*@__PURE__*/o.createContext(null);export function ConfirmProvider({children:u,defaults:m}){const[d,f]=o.useState([]),p=o.useRef(null),C=o.useRef(null),h=o.useRef(null),[v,x]=o.useState(void 0),[b,g]=o.useState(0),j=o.useRef(0),w=d[0];w&&w.options!==v&&(x(w.options),g(w.id));const y=o.useCallback(e=>new Promise(t=>{p.current||(p.current=document.activeElement instanceof HTMLElement?document.activeElement:null),j.current+=1;const n=j.current;f(r=>[...r,{id:n,options:"string"==typeof e?{title:e}:e,settle:t}])}),[]),E=e=>{w&&(w.settle(e),f(e=>e.slice(1)))},P={...m,...v},R=o.useContext(r),k=c(s,P.locale??R?.locale),F="danger"===P.color&&!P.alert;return n(a.Provider,{value:y,children:[u,e(l,{open:void 0!==w,onOpenChange:e=>{e||E(!0===P.alert)},size:P.size??"sm",color:P.color??"primary",width:P.width,title:P.title,description:P.description,dismissible:P.dismissible??!0,showClose:!1,role:"alertdialog",initialFocus:F?C:h,finalFocus:()=>{const e=p.current;return 0===d.length&&(p.current=null),!e?.isConnected||e},actions:n(t,{children:[P.alert?null:e(i,{ref:C,variant:"text",color:"secondary",onClick:()=>E(!1),children:P.cancelLabel??k.cancel}),e(i,{ref:h,variant:"solid",color:P.color??"primary",onClick:()=>E(!0),children:P.confirmLabel??k.confirm})]})},b)]})}export function useConfirm(){const e=o.useContext(a);if(!e)throw new Error("neba: useConfirm() needs a <ConfirmProvider> above it.");return e}
1
+ "use client";import{jsx as e,Fragment as t,jsxs as r}from"react/jsx-runtime";import{DefaultsContext as n}from"../../internal/defaults.js";import*as o from"react";import{Button as i}from"../button/Button.js";import{Dialog as s}from"../dialog/Dialog.js";import{confirmMessages as l,useMessages as c}from"../../internal/i18n.js";const u=/*@__PURE__*/o.createContext(null);export function ConfirmProvider({children:a,defaults:f}){const[d,m]=o.useState([]),p=o.useRef(null),C=o.useRef(null),v=o.useRef(null),[h,x]=o.useState(void 0),[b,g]=o.useState(0),j=o.useRef(0),w=o.useRef(new Set),R=o.useRef(!1),E=o.useRef(!1);o.useEffect(()=>{const e=w.current;return R.current=!0,E.current=!1,()=>{R.current=!1,queueMicrotask(()=>{if(!R.current){E.current=!0;for(const t of e)t(!1);e.clear(),m([])}})}},[]);const k=d[0];k&&k.options!==h&&(x(k.options),g(k.id));const y=o.useCallback(e=>new Promise(t=>{if(E.current)return void t(!1);w.current.add(t),p.current||(p.current=document.activeElement instanceof HTMLElement?document.activeElement:null),j.current+=1;const r=j.current;m(n=>[...n,{id:r,options:"string"==typeof e?{title:e}:e,settle:t}])}),[]),P=e=>{k&&(w.current.delete(k.settle),k.settle(e),m(e=>e.slice(1)))},S={...f,...h},F=o.useContext(n),L=c(l,S.locale??F?.locale),z="danger"===S.color&&!S.alert;return r(u.Provider,{value:y,children:[a,e(s,{open:void 0!==k,onOpenChange:e=>{e||P(!0===S.alert)},size:S.size??"sm",color:S.color??"primary",width:S.width,title:S.title,description:S.description,dismissible:S.dismissible??!0,showClose:!1,role:"alertdialog",initialFocus:z?C:v,finalFocus:()=>{const e=p.current;return 0===d.length&&(p.current=null),!e?.isConnected||e},actions:r(t,{children:[S.alert?null:e(i,{ref:C,variant:"text",color:"secondary",onClick:()=>P(!1),children:S.cancelLabel??L.cancel}),e(i,{ref:v,variant:"solid",color:S.color??"primary",onClick:()=>P(!0),children:S.confirmLabel??L.confirm})]})},b)]})}export function useConfirm(){const e=o.useContext(u);if(!e)throw new Error("neba: useConfirm() needs a <ConfirmProvider> above it.");return e}
@@ -1 +1 @@
1
- "use client";import{jsx as t,Fragment as n,jsxs as e}from"react/jsx-runtime";import*as d from"react";import{controlTextLeadingClasses as p,hasContent as o,metaTextClasses as a,toLength as l}from"../../internal/styles.js";import{useStyleDefaults as r}from"../../internal/defaults.js";const f=/*@__PURE__*/d.createContext({size:"md",density:"default",orientation:"horizontal"}),s={default:{xs:"gap-x-3",sm:"gap-x-4",md:"gap-x-5",lg:"gap-x-6",xl:"gap-x-8"},compact:{xs:"gap-x-2",sm:"gap-x-2.5",md:"gap-x-3",lg:"gap-x-4",xl:"gap-x-5"}},m={default:{xs:"gap-y-2",sm:"gap-y-2.5",md:"gap-y-3",lg:"gap-y-3.5",xl:"gap-y-4"},compact:{xs:"gap-y-1",sm:"gap-y-1.5",md:"gap-y-2",lg:"gap-y-2",xl:"gap-y-2.5"}},y=["[&>dt:nth-of-type(n+2)]:border-t [&>dd:nth-of-type(n+2)]:border-t","[&>dt]:[border-color:var(--neba-border)] [&>dd]:[border-color:var(--neba-border)]"].join(" "),i={default:{xs:"[&>dt:nth-of-type(n+2)]:pt-2 [&>dd:nth-of-type(n+2)]:pt-2",sm:"[&>dt:nth-of-type(n+2)]:pt-2.5 [&>dd:nth-of-type(n+2)]:pt-2.5",md:"[&>dt:nth-of-type(n+2)]:pt-3 [&>dd:nth-of-type(n+2)]:pt-3",lg:"[&>dt:nth-of-type(n+2)]:pt-3.5 [&>dd:nth-of-type(n+2)]:pt-3.5",xl:"[&>dt:nth-of-type(n+2)]:pt-4 [&>dd:nth-of-type(n+2)]:pt-4"},compact:{xs:"[&>dt:nth-of-type(n+2)]:pt-1 [&>dd:nth-of-type(n+2)]:pt-1",sm:"[&>dt:nth-of-type(n+2)]:pt-1.5 [&>dd:nth-of-type(n+2)]:pt-1.5",md:"[&>dt:nth-of-type(n+2)]:pt-2 [&>dd:nth-of-type(n+2)]:pt-2",lg:"[&>dt:nth-of-type(n+2)]:pt-2 [&>dd:nth-of-type(n+2)]:pt-2",xl:"[&>dt:nth-of-type(n+2)]:pt-2.5 [&>dd:nth-of-type(n+2)]:pt-2.5"}},h={default:{xs:"[&>dt:nth-of-type(n+2)]:mt-2",sm:"[&>dt:nth-of-type(n+2)]:mt-2.5",md:"[&>dt:nth-of-type(n+2)]:mt-3",lg:"[&>dt:nth-of-type(n+2)]:mt-3.5",xl:"[&>dt:nth-of-type(n+2)]:mt-4"},compact:{xs:"[&>dt:nth-of-type(n+2)]:mt-1",sm:"[&>dt:nth-of-type(n+2)]:mt-1.5",md:"[&>dt:nth-of-type(n+2)]:mt-2",lg:"[&>dt:nth-of-type(n+2)]:mt-2",xl:"[&>dt:nth-of-type(n+2)]:mt-2.5"}},x={default:{xs:"[&>dt:nth-of-type(n+2)]:pt-2",sm:"[&>dt:nth-of-type(n+2)]:pt-2.5",md:"[&>dt:nth-of-type(n+2)]:pt-3",lg:"[&>dt:nth-of-type(n+2)]:pt-3.5",xl:"[&>dt:nth-of-type(n+2)]:pt-4"},compact:{xs:"[&>dt:nth-of-type(n+2)]:pt-1",sm:"[&>dt:nth-of-type(n+2)]:pt-1.5",md:"[&>dt:nth-of-type(n+2)]:pt-2",lg:"[&>dt:nth-of-type(n+2)]:pt-2",xl:"[&>dt:nth-of-type(n+2)]:pt-2.5"}};export function DataListItem({label:l,children:r}){const{size:s,orientation:m}=d.useContext(f);return e(n,{children:[t("dt",{className:["min-w-0 text-(--neba-muted-fg)",a[s],"vertical"===m?"mb-0.5":"py-px"].join(" "),children:l}),t("dd",{className:`m-0 min-w-0 text-(--neba-fg) ${p[s]}`,children:o(r)?r:null})]})}export const DataList=/*@__PURE__*/d.forwardRef(function DataList(n,e){const{orientation:p="horizontal",labelWidth:o,dividers:a=!1,size:c="md",density:g="default",className:b,style:u,children:v,...j}=r(n,["size","density"]),z=d.useMemo(()=>({size:c,density:g,orientation:p}),[c,g,p]),$=l(o);return t(f.Provider,{value:z,children:t("dl",{ref:e,className:["m-0 min-w-0","vertical"===p?"flex flex-col":"grid [grid-template-columns:var(--n-label)_minmax(0,1fr)] items-baseline","vertical"===p?h[g][c]:`${s[g][c]} ${m[g][c]}`,a?"vertical"===p?`[&>dt:nth-of-type(n+2)]:border-t [&>dt]:[border-color:var(--neba-border)] ${x[g][c]}`:`${y} ${i[g][c]}`:"",b??""].filter(Boolean).join(" "),style:{"--n-label":$??"fit-content(50%)",...u},...j,children:v})})});
1
+ "use client";import{jsx as t,Fragment as n,jsxs as e}from"react/jsx-runtime";import*as d from"react";import{controlTextLeadingClasses as p,hasContent as o,metaTextClasses as a,toLength as l}from"../../internal/styles.js";import{useStyleDefaults as r}from"../../internal/defaults.js";const f=/*@__PURE__*/d.createContext({size:"md",density:"default",orientation:"horizontal"}),s={default:{xs:"gap-x-3",sm:"gap-x-4",md:"gap-x-5",lg:"gap-x-6",xl:"gap-x-8"},compact:{xs:"gap-x-2",sm:"gap-x-2.5",md:"gap-x-3",lg:"gap-x-4",xl:"gap-x-5"}},m={default:{xs:"gap-y-2",sm:"gap-y-2.5",md:"gap-y-3",lg:"gap-y-3.5",xl:"gap-y-4"},compact:{xs:"gap-y-1",sm:"gap-y-1.5",md:"gap-y-2",lg:"gap-y-2",xl:"gap-y-2.5"}},y={default:{xs:"[&>dt:nth-of-type(n+2)]:pt-2 [&>dd:nth-of-type(n+2)]:pt-2",sm:"[&>dt:nth-of-type(n+2)]:pt-2.5 [&>dd:nth-of-type(n+2)]:pt-2.5",md:"[&>dt:nth-of-type(n+2)]:pt-3 [&>dd:nth-of-type(n+2)]:pt-3",lg:"[&>dt:nth-of-type(n+2)]:pt-3.5 [&>dd:nth-of-type(n+2)]:pt-3.5",xl:"[&>dt:nth-of-type(n+2)]:pt-4 [&>dd:nth-of-type(n+2)]:pt-4"},compact:{xs:"[&>dt:nth-of-type(n+2)]:pt-1 [&>dd:nth-of-type(n+2)]:pt-1",sm:"[&>dt:nth-of-type(n+2)]:pt-1.5 [&>dd:nth-of-type(n+2)]:pt-1.5",md:"[&>dt:nth-of-type(n+2)]:pt-2 [&>dd:nth-of-type(n+2)]:pt-2",lg:"[&>dt:nth-of-type(n+2)]:pt-2 [&>dd:nth-of-type(n+2)]:pt-2",xl:"[&>dt:nth-of-type(n+2)]:pt-2.5 [&>dd:nth-of-type(n+2)]:pt-2.5"}},i={default:{xs:"[&>dt:nth-of-type(n+2)]:mt-2",sm:"[&>dt:nth-of-type(n+2)]:mt-2.5",md:"[&>dt:nth-of-type(n+2)]:mt-3",lg:"[&>dt:nth-of-type(n+2)]:mt-3.5",xl:"[&>dt:nth-of-type(n+2)]:mt-4"},compact:{xs:"[&>dt:nth-of-type(n+2)]:mt-1",sm:"[&>dt:nth-of-type(n+2)]:mt-1.5",md:"[&>dt:nth-of-type(n+2)]:mt-2",lg:"[&>dt:nth-of-type(n+2)]:mt-2",xl:"[&>dt:nth-of-type(n+2)]:mt-2.5"}},h={default:{xs:"[&>dt:nth-of-type(n+2)]:pt-2",sm:"[&>dt:nth-of-type(n+2)]:pt-2.5",md:"[&>dt:nth-of-type(n+2)]:pt-3",lg:"[&>dt:nth-of-type(n+2)]:pt-3.5",xl:"[&>dt:nth-of-type(n+2)]:pt-4"},compact:{xs:"[&>dt:nth-of-type(n+2)]:pt-1",sm:"[&>dt:nth-of-type(n+2)]:pt-1.5",md:"[&>dt:nth-of-type(n+2)]:pt-2",lg:"[&>dt:nth-of-type(n+2)]:pt-2",xl:"[&>dt:nth-of-type(n+2)]:pt-2.5"}};export function DataListItem({label:l,children:r}){const{size:s,orientation:m}=d.useContext(f);return e(n,{children:[t("dt",{className:"min-w-0 text-(--neba-muted-fg) "+a[s]+" "+("vertical"===m?"mb-0.5":"py-px"),children:l}),t("dd",{className:`m-0 min-w-0 text-(--neba-fg) ${p[s]}`,children:o(r)?r:null})]})}export const DataList=/*@__PURE__*/d.forwardRef(function DataList(n,e){const{orientation:p="horizontal",labelWidth:o,dividers:a=!1,size:x="md",density:c="default",className:g,style:b,children:u,...v}=r(n,["size","density"]),z=d.useMemo(()=>({size:x,density:c,orientation:p}),[x,c,p]),j=l(o);return t(f.Provider,{value:z,children:t("dl",{ref:e,className:["m-0 min-w-0","vertical"===p?"flex flex-col":"grid [grid-template-columns:var(--n-label)_minmax(0,1fr)] items-baseline","vertical"===p?i[c][x]:`${s[c][x]} ${m[c][x]}`,a?"vertical"===p?`[&>dt:nth-of-type(n+2)]:border-t [&>dt]:[border-color:var(--neba-border)] ${h[c][x]}`:`[&>dt:nth-of-type(n+2)]:border-t [&>dd:nth-of-type(n+2)]:border-t [&>dt]:[border-color:var(--neba-border)] [&>dd]:[border-color:var(--neba-border)] ${y[c][x]}`:"",g??""].filter(Boolean).join(" "),style:{"--n-label":j??"fit-content(50%)",...b},...v,children:u})})});
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import*as n from"react";import{useLayoutEffectOnClient as a}from"../../internal/layout-effect.js";import{Box as o}from"../box/Box.js";import{Button as l}from"../button/Button.js";import{Checkbox as i}from"../checkbox/Checkbox.js";import{Pagination as s}from"../pagination/Pagination.js";import{Select as c}from"../select/Select.js";import{TextField as u}from"../text-field/TextField.js";import{compareValues as d,dataHeaderHeights as p,dataRowHeights as f,dataTickWidths as g,defaultColumnWidth as m,isEmptyValue as h,keysBetween as y,minColumnWidth as b,nextSort as v,pageBounds as k,sortRows as w,virtualWindow as x}from"../../internal/data-table.js";import{beginPointerDrag as S,drawnScale as C}from"../../internal/drag.js";import{dateFormatter as M}from"../../internal/format.js";import{emptyMessages as N,fillMessage as R,tableMessages as _,useMessages as T}from"../../internal/i18n.js";import{searchHaystack as D,searchText as K}from"../../internal/search.js";import{ChevronIcon as $}from"../../internal/icons.js";import{observeResize as z}from"../../internal/observe.js";import{downloadText as A,toCsv as j}from"../../internal/csv.js";import{controlTextLeadingClasses as I,cx as E,hasContent as P,insetRingClasses as B,metaTextClasses as H,paddingXValues as O,srOnlyClasses as F,toLength as L,transitionClasses as W}from"../../internal/styles.js";import{useStyleDefaults as V}from"../../internal/defaults.js";import{useIntlLocale as X}from"../../internal/media.js";const q=["[--n-row:transparent]","[transition:background-color_var(--neba-duration)_var(--neba-ease)]"].join(" "),G={"--n-stripe":"color-mix(in oklab, var(--neba-fg) 4%, transparent)"},U=["group/sort flex w-full min-w-0 cursor-pointer items-center gap-1","text-inherit [outline:none]","[transition:color_var(--neba-duration)_var(--neba-ease)]","hover:text-(--n-accent)","focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-1","[&_svg]:pointer-events-none [&_svg]:size-[1.15em] [&_svg]:shrink-0"].join(" "),Y="Alt+ArrowLeft Alt+ArrowRight";function J(e){const t=e.currentTarget;t.scrollWidth>t.clientWidth?t.title=t.textContent??"":t.removeAttribute("title")}const Q='button, a, input, select, textarea, label, [role="button"], [role="checkbox"], [role="switch"], [role="radio"]',Z={start:"shadow-[inset_2px_0_0_var(--n-accent)] rtl:shadow-[inset_-2px_0_0_var(--n-accent)]",end:"shadow-[inset_-2px_0_0_var(--n-accent)] rtl:shadow-[inset_2px_0_0_var(--n-accent)]"},ee='[data-neba-tick] [role="checkbox"], [data-neba-editor]';function SearchIcon(){return t("svg",{viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[e("circle",{cx:"7.25",cy:"7.25",r:"4.75",stroke:"currentColor",strokeWidth:"1.5"}),e("path",{d:"m10.75 10.75 2.75 2.75",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function te(e,t,r){return{position:"sticky",insetInlineStart:"start"===e?`${t}px`:void 0,insetInlineEnd:"end"===e?`${t}px`:void 0,zIndex:r?21:1,backgroundColor:"var(--n-panel-press)",backgroundImage:r?void 0:"linear-gradient(var(--n-row), var(--n-row))"}}function re(e,t,r){if(!e.pinned)return{};const n="start"===e.pinned?t.start.get(e.key):t.end.get(e.key);return te(e.pinned,n??0,r)}function ne(e,t){return e.value?e.value(t):t[e.key]}function ae(e,t,r){return r&&("function"==typeof e.editable?e.editable(t):Boolean(e.editable))}function oe(t){return e("span",{className:"flex items-center justify-center",children:t})}function DataTableRow({entry:r,index:n,position:a,selected:o,active:l,editing:s,look:c,actions:u}){const{columns:d,reactId:p,cellStyle:f}=c,g=`${p}-first-${r.origin}`;return t("tr",{id:`${p}-${r.key}`,"aria-selected":c.selects?o:void 0,"aria-rowindex":c.virtualized?n+c.headRows+1:void 0,"data-neba-row":r.key,className:E(q,o?"[--n-row:var(--n-soft-press)]":null!==c.stripe&&n%2===c.stripe?"[--n-row:var(--n-stripe)]":"",!o&&c.hoverable?"hover:[--n-row:var(--n-soft)]":"",l&&c.navigable?"[box-shadow:inset_0_0_0_1px_var(--n-ring)]":"",c.pressable?"cursor-default":""),style:{height:`${c.rowHeight}px`,backgroundColor:"var(--n-row)"},onPointerDown:e=>u.current?.pointerDown(r,e),onClick:e=>u.current?.click(r,a,e),onDoubleClick:e=>u.current?.doubleClick(r,a,e),children:[c.showTicks?e("td",{"data-neba-tick":"",role:c.selects?"gridcell":void 0,style:{...f,padding:0,overflow:"visible",...c.pinsStart?te("start",0,!1):{}},children:oe(e(i,{size:c.size,color:c.color,checked:o,tabIndex:-1,"aria-labelledby":d.length>0?`${c.tickNameId} ${g}`:void 0,"aria-label":d.length>0?void 0:c.selectRowLabel,onCheckedChange:()=>u.current?.tick(r.key)}))}):null,d.map((t,n)=>{const o=ae(t,r.row,c.edits),l=s===t.key,i=l?ne(t,r.row):void 0;return e("td",{id:c.showTicks&&0===n?g:void 0,role:c.navigable?"gridcell":void 0,style:{...f,...re(t,c.pinOffsets,!1),textAlign:t.align??"start",cursor:o&&!l?"cell":void 0},onPointerEnter:t.render||l?void 0:J,onDoubleClick:o?e=>{e.stopPropagation(),u.current?.openEditor(r.key,t.key)}:void 0,children:l?e("input",{autoFocus:!0,"data-neba-editor":"",type:"number"===t.editType?"number":"text",defaultValue:null==i?"":String(i),"aria-label":"string"==typeof t.label?t.label:t.key,className:"neba-input w-full bg-transparent [font:inherit] text-inherit [outline:none]",style:{textAlign:t.align??"start"},onPointerDown:e=>e.stopPropagation(),onBlur:e=>u.current?.editorBlur(r,t,e.currentTarget.value),onKeyDown:e=>u.current?.editorKeyDown(r,t,e)}):t.render?t.render(r.row,a):(d=r.row[t.key],p=c.intlLocale,"boolean"==typeof d?String(d):d instanceof Date?Number.isNaN(d.getTime())?"":M(p,{dateStyle:"medium"}).format(d):d)},t.key);var d,p}),c.filler?e("td",{"aria-hidden":"true",style:{...f,padding:0}}):null]})}const le=/*@__PURE__*/n.memo(DataTableRow);export function DataTable(M){const{headers:q,items:J,getRowKey:ie,variant:se="outline",size:ce="sm",color:ue="primary",density:de="compact",elevation:pe=0,height:fe,maxHeight:ge,rowHeight:me,striped:he=!1,hoverable:ye=!0,stickyHeader:be=!0,caption:ve,label:ke,empty:we,virtual:xe=!0,overscan:Se=8,sortable:Ce=!1,sortMode:Me="single",sort:Ne,defaultSort:Re,onSortChange:_e,resizable:Te=!1,columnWidths:De,columnOrder:Ke,defaultColumnOrder:$e,onColumnOrderChange:ze,reorderable:Ae=!1,defaultColumnWidths:je,onColumnWidthsChange:Ie,selectionMode:Ee="none",selected:Pe,defaultSelected:Be,onSelectedChange:He,checkboxes:Oe=!1,onRowClick:Fe,onRowActivate:Le,paging:We="scroll",page:Ve,defaultPage:Xe=1,onPageChange:qe,getPageHref:Ge,pageSize:Ue,defaultPageSize:Ye=25,onPageSizeChange:Je,pageSizeOptions:Qe=[10,25,50,100],footer:Ze,search:et,defaultSearch:tt,onSearchChange:rt,searchable:nt=!1,searchPlaceholder:at,filter:ot,toolbar:lt,exportable:it=!1,exportFileName:st="table.csv",onExport:ct,exportEscapeFormulas:ut=!0,onCellEdit:dt,groupBy:pt,collapsibleGroups:ft=!0,defaultCollapsedGroups:gt,manual:mt=!1,rowCount:ht,locale:yt,className:bt,style:vt,...kt}=V(M,["size","density","variant","locale"]),wt=T(_,yt),xt=T(N,yt),St=X(yt),Ct=n.useId(),Mt=me??f[de][ce],Nt=p[de][ce],Rt=O[de][ce],_t=n.useMemo(()=>new Set(!0===mt?["sort","filter","pages"]:mt||[]),[mt]),[Tt,Dt]=n.useState(()=>$e??[]),Kt=Ke??Tt,$t=e=>{void 0===Ke&&Dt(e),ze?.(e)},zt=n.useMemo(()=>{const e=q.filter(e=>!e.hidden),t=Kt.map(t=>e.find(e=>e.key===t)).filter(e=>void 0!==e),r=e.filter(e=>!Kt.includes(e.key)),n=0===Kt.length?e:[...t,...r],a=e=>"start"===e.pinned?0:"end"===e.pinned?2:1;return n.map((e,t)=>({column:e,index:t})).sort((e,t)=>a(e.column)-a(t.column)||e.index-t.index).map(e=>e.column)},[q,Kt]),At=zt.some(e=>void 0!==e.group),jt=At?2:1,It="none"!==Ee,Et="multiple"===Ee,Pt=It&&Oe,Bt=void 0!==dt&&zt.some(e=>void 0!==e.editable),Ht=It||void 0!==Le||Bt,Ot=n.useMemo(()=>J.map((e,t)=>{const r=ie?ie(e,t):t;return{row:e,identity:r,key:String(r),origin:t}}),[J,ie]),[Ft,Lt]=n.useState(tt??""),Wt=(et??Ft).trim(),Vt=n.useMemo(()=>zt.filter(e=>!1!==e.searchable),[zt]),Xt=n.useMemo(()=>{let e=null;return()=>e??=Ot.map(e=>D(Vt.map(t=>t.value?t.value(e.row):e.row[t.key])))},[Ot,Vt]),qt=n.useMemo(()=>new Intl.Collator(St,{numeric:!0,sensitivity:"base"}),[St]),[Gt,Ut]=n.useState(Re??[]),Yt=Ne??Gt,Jt=n.useMemo(()=>_t.has("sort")?Ot:w(Ot,Yt,e=>{const t=zt.find(t=>t.key===e);if(!t)return null;if(t.compare)return(e,r)=>t.compare(e.row,r.row);const r=t.value?t.value:e=>e[t.key];return{compare:(e,t)=>d(r(e.row),r(t.row),qt),isEmpty:e=>h(r(e.row))}}),[Ot,Yt,zt,qt,_t]),Qt=n.useMemo(()=>{if(_t.has("filter"))return Jt;const e=K(Wt);let t=Jt;if(""!==e&&Vt.length>0){const r=Xt();t=Jt.filter(t=>r[t.origin].includes(e))}return ot?t.filter(e=>ot(e.row,e.origin)):t},[Jt,Wt,ot,_t,Vt,Xt]),[Zt,er]=n.useState(Xe),[tr,rr]=n.useState(Ye),nr=Ue??tr,[ar,or]=n.useState(()=>new Set(gt??[])),lr=n.useMemo(()=>{if(!pt)return null;const e=[],t=new Map;for(const r of Qt){const n=pt(r.row)??"";t.has(n)||(t.set(n,[]),e.push(n)),t.get(n).push(r)}return{order:[...e].sort((e,t)=>""===e?-1:""===t?1:0),byLabel:t}},[Qt,pt]),ir=n.useMemo(()=>lr?lr.order.flatMap(e=>ar.has(e)?[]:lr.byLabel.get(e)??[]):Qt,[lr,ar,Qt]),sr=_t.has("pages")?ht??ir.length:ir.length,cr=k(sr,Ve??Zt,nr),ur=n.useMemo(()=>"pages"!==We||_t.has("pages")?ir:ir.slice(cr.start,cr.end),[ir,We,_t,cr.start,cr.end]),dr="pages"===We?cr.start:0,pr=n.useMemo(()=>ur.map(e=>e.key),[ur]),fr=n.useMemo(()=>new Map(pr.map((e,t)=>[e,t])),[pr]),gr=n.useMemo(()=>new Map(Ot.map(e=>[e.key,e])),[Ot]),[mr,hr]=n.useState(Be??[]),yr=Pe??mr,br=n.useMemo(()=>new Set(yr.map(String)),[yr]),[vr,kr]=n.useState(null),wr=n.useRef(null),xr=n.useRef({paged:ur,pagedKeys:pr,byKey:gr,selectedKeys:br,selectedValues:yr,multiple:Et});xr.current={paged:ur,pagedKeys:pr,byKey:gr,selectedKeys:br,selectedValues:yr,multiple:Et};const Sr=n.useCallback(e=>{const t=[],r=[],n=_t.has("pages")?new Map(xr.current.selectedValues.map(e=>[String(e),e])):null;for(const a of e){const e=xr.current.byKey.get(a);e?(t.push(e.identity),r.push(e.row)):n?.has(a)&&t.push(n.get(a))}void 0===Pe&&hr(t),He?.(t,r)},[Pe,He,_t]),Cr=n.useCallback(e=>{wr.current=e,Sr([e])},[Sr]),Mr=n.useCallback(e=>{const t=xr.current.selectedKeys,r=new Set(t);r.has(e)?r.delete(e):r.add(e),wr.current=e,Sr([...r])},[Sr]),Nr=n.useCallback((e,t)=>{const r=xr.current.pagedKeys,n=wr.current??r[0];if(void 0===n)return;const a=y(r,n,e);0!==a.length?Sr(t?[...new Set([...xr.current.selectedKeys,...a])]:a):r.includes(e)&&(wr.current=e,Sr(t?[...new Set([...xr.current.selectedKeys,e])]:[e]))},[Sr]),Rr=n.useRef(null),_r=n.useRef(null),Tr=n.useRef(null),Dr=n.useRef(null),[Kr,$r]=n.useState(0),[zr,Ar]=n.useState(0),jr=void 0!==fe||void 0!==ge,Ir=void 0!==pt,Er=xe&&jr&&ur.length>0&&!pt,Pr=xe&&!Er&&ur.length>500?ur.length:0,Br=n.useRef(!1);n.useEffect(()=>{"production"===process.env.NODE_ENV||0===Pr||Br.current||(Br.current=!0,console.warn(`Neba: a DataTable is drawing ${Pr} rows at once, because ${Ir?"a grouped table is never virtual":"nothing bounds its height"}. ${Ir?'Page it with paging="pages", or leave groupBy off and give it a height or a maxHeight':'Give it a height or a maxHeight to draw only the rows on screen, or page it with paging="pages"'}. Pass virtual={false} if every row is meant to be drawn.`))},[Pr,Ir]),a(()=>{const e=Rr.current;if(e&&Er)return $r(e.clientHeight),z(e,e=>$r(e.contentRect.height))},[Er]);const Hr=n.useCallback(e=>{if(!Er)return;const t=Math.floor(e.currentTarget.scrollTop/Mt)*Mt;Ar(e=>e===t?e:t)},[Er,Mt]),Or=Er?x(zr,Kr,Mt,ur.length,Se):{start:0,end:ur.length,before:0,after:0},Fr=ur.slice(Or.start,Or.end),Lr=Ht&&null!==vr&&Fr.some(e=>e.key===vr),[Wr,Vr]=n.useState(je??{}),Xr=De??Wr,qr=n.useCallback(e=>{void 0===De&&Vr(e),Ie?.(e)},[De,Ie]),Gr=n.useRef(new Map),Ur=n.useRef(null),Yr=n.useRef(null),[Jr,Qr]=n.useState(null),[Zr,en]=n.useState(null),tn=n.useRef(null),rn=n.useRef(null);n.useEffect(()=>()=>{Ur.current?.(),Yr.current?.()},[]);const nn=()=>{const e={...Xr};for(const t of zt){const r=Gr.current.get(t.key);r&&void 0===e[t.key]&&(e[t.key]=r.offsetWidth)}return e},an=e=>zt.find(t=>t.key===e)?.minWidth??b,on=n.useRef(null);a(()=>{const e=on.current;if(null===e)return;on.current=null;const t=Gr.current.get(e),r=t?.querySelector("button")??t;r&&r!==document.activeElement&&r.focus()});const ln=n.useCallback((e,t)=>{const r=Rr.current,n=_r.current;if(!r||!n)return;const a=function(e,t){for(let r=0;r<e.rows.length;r+=1)if(e.rows[r].dataset.nebaRow===t)return e.rows[r];return null}(n,e);if(!jr)return void a?.scrollIntoView({block:"nearest",inline:"nearest"});const o=r.getBoundingClientRect().top+r.clientTop-r.scrollTop,l=(a??n).getBoundingClientRect(),i=l.top-o+(a?0:t*Mt),s=i+(a?l.height:Mt),c=be?Tr.current?.tHead?.getBoundingClientRect().height??0:0;i<r.scrollTop+c?r.scrollTop=Math.max(0,Math.floor(i-c)):s>r.scrollTop+r.clientHeight&&(r.scrollTop=Math.ceil(s-r.clientHeight))},[jr,be,Mt]),sn=(e,t,r=!0)=>{const n=xr.current.paged,a=Math.min(Math.max(e,0),n.length-1),o=n[a];o&&(t.preventDefault(),kr(o.key),ln(o.key,a),It&&(t.shiftKey&&xr.current.multiple?Nr(o.key,!1):!r||t.ctrlKey||t.metaKey||Cr(o.key)))},cn=(e,t,r)=>{const n=Rr.current;if(!n||!jr)return;r.preventDefault();const a=Math.max(0,n.scrollHeight-n.clientHeight),o="start"===e?0:"end"===e?a:n.scrollTop+e;n.scrollTop=Math.min(Math.max(o,0),a),sn(t,r,!1)};const un=n.useCallback(e=>{const t=_r.current,r=xr.current.paged;if(!t||0===r.length)return null;if(Ir){const n=t.querySelectorAll("tr[data-neba-row]");let a=0,o=n.length-1,l=0;for(;a<=o;){const t=a+o>>1;n[t].getBoundingClientRect().top<=e?(l=t,a=t+1):o=t-1}return Math.min(l,r.length-1)}const n=t.getBoundingClientRect().top,a=Math.floor((e-n)/Mt);return Math.min(Math.max(a,0),r.length-1)},[Mt,Ir]),dn=n.useRef(null),pn=n.useCallback(e=>{const t=un(e),r=null===t?void 0:xr.current.paged[t],n=dn.current;!r||n&&n.key===r.key||(n&&(n.key=r.key),kr(r.key),Nr(r.key,!1))},[un,Nr]),fn=n.useRef(pn);fn.current=pn;n.useEffect(()=>()=>dn.current?.stop(),[]);const gn=n.useMemo(()=>pr.reduce((e,t)=>br.has(t)?e+1:e,0),[pr,br]),mn=pr.length>0&&gn===pr.length,hn=g[ce],yn=e=>Xr[e.key]??e.width,bn=(Pt?hn:0)+zt.reduce((e,t)=>e+(yn(t)??b),0),vn=zt.length>0&&zt.every(e=>void 0!==yn(e)),kn=zt.length+(Pt?1:0)+(vn?1:0),wn=n.useMemo(()=>{const e=[];return zt.forEach((t,r)=>{const n=e[e.length-1];n&&void 0!==n.label&&n.label===t.group?n.span+=1:e.push({label:t.group,span:1,from:r})}),e},[zt]),xn=zt.filter(e=>e.pinned).map(e=>yn(e)??"").join(","),Sn=n.useMemo(()=>{const e=new Map,t=new Map;let r=Pt?hn:0;for(const t of zt)"start"===t.pinned&&(e.set(t.key,r),r+=yn(t)??m);let n=0;for(let e=zt.length-1;e>=0;e-=1){const r=zt[e];"end"===r.pinned&&(t.set(r.key,n),n+=yn(r)??m)}return{start:e,end:t}},[zt,xn,Pt,hn]),Cn=(e,t)=>re(e,Sn,t),Mn=zt.some(e=>"start"===e.pinned),Nn=e=>Mn?te("start",0,e):{},Rn=n.useMemo(()=>({padding:`0 ${Rt}`,borderBottom:"1px solid var(--n-line)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}),[Rt]),_n={...Rn,height:`${Nt}px`,backgroundColor:"var(--n-panel-press)",color:"var(--n-cell-ink, var(--neba-muted-fg))"},Tn=n.useMemo(()=>new Intl.NumberFormat(St),[St]),Dn=Ze??"pages"===We,Kn=R(wt.range,{start:Tn.format(0===sr?0:("pages"===We?cr.start:0)+1),end:Tn.format("pages"===We?cr.end:sr),total:Tn.format(sr)}),$n=It&&br.size>0?R(wt.selected,{count:Tn.format(br.size)}):"",zn=e=>{void 0===Ve&&er(e),qe?.(e)},An=`${Ct}-tick`,jn=It||void 0!==Fe,In=void 0!==dt,En=n.useMemo(()=>({columns:zt,reactId:Ct,selects:It,navigable:Ht,showTicks:Pt,pressable:jn,virtualized:Er,headRows:jt,stripe:!1===he?null:"odd"===he?0:1,hoverable:ye,rowHeight:Mt,cellStyle:Rn,pinOffsets:Sn,pinsStart:Mn,filler:vn,edits:In,size:ce,color:ue,intlLocale:St,tickNameId:An,selectRowLabel:wt.selectRow}),[zt,Ct,It,Ht,Pt,jn,Er,jt,he,ye,Mt,Rn,Sn,Mn,vn,In,ce,ue,St,An,wt.selectRow]),Pn=n.useRef(null),Bn=(t,r)=>e(le,{entry:t,index:r,position:dr+r,selected:br.has(t.key),active:vr===t.key,editing:Ln?.key===t.key?Ln.column:null,look:En,actions:Pn,redraw:M},t.key),Hn=e=>{const t=zt.map(e=>e.key);return null!==Jr&&t.indexOf(Jr)<t.indexOf(e)?"end":"start"},On=(n,a,o)=>{const l=n.sortable??Ce,i=n.resizable??Te,s=Ae&&!n.pinned,c=(u=n.key,Yt.find(e=>e.key===u));var u;const d=c?Yt.findIndex(e=>e.key===n.key)+1:0,p=n.headerAlign??n.align??"start",f=i&&a<zt.length-1,g=f||d>1?`${Ct}-head-${a}`:void 0;return t("th",{"aria-labelledby":g,ref:e=>{e?Gr.current.set(n.key,e):Gr.current.delete(n.key)},scope:"col",rowSpan:o,"aria-sort":c&&1===d?"asc"===c.direction?"ascending":"descending":void 0,"data-column":n.key,"data-dragging":Jr===n.key||void 0,className:E("relative font-semibold select-none",be?"sticky z-20 [backdrop-filter:var(--neba-blur)]":"",s?Jr===n.key?"cursor-grabbing":"cursor-grab":"",s&&!l?B:"",Zr===n.key?Z[Hn(n.key)]:""),style:{..._n,...Cn(n,!0),backgroundImage:Jr===n.key?"linear-gradient(var(--n-soft), var(--n-soft))":void 0,top:be?2!==o&&At?Nt:0:void 0,textAlign:p,color:c?"var(--n-cell-ink, var(--n-accent))":_n.color},tabIndex:s&&!l?0:void 0,"aria-keyshortcuts":s&&!l?Y:void 0,onPointerDown:s?e=>((e,t)=>{if(0!==t.button)return;const r=t.currentTarget,n=t.clientX;let a=!1;Yr.current=S({target:r,pointerId:t.pointerId,capture:!1,onMove:t=>{if(!a){if(Math.abs(t.clientX-n)<6)return;a=!0,tn.current=e,Qr(e)}const r=zt.find(e=>{if(e.pinned)return!1;const r=Gr.current.get(e.key);if(!r)return!1;const n=r.getBoundingClientRect();return t.clientX>=n.left&&t.clientX<=n.right});rn.current=r&&r.key!==e?r.key:null,en(rn.current)},onEnd:()=>{const e=tn.current,t=rn.current;if(Yr.current=null,tn.current=null,rn.current=null,Qr(null),en(null),e&&t&&e!==t){const r=zt.map(e=>e.key),n=r.indexOf(e),a=r.indexOf(t);r.splice(a,0,...r.splice(n,1)),$t(r)}}})})(n.key,e):void 0,onKeyDown:s?e=>((e,t)=>{if(!t.altKey||"ArrowLeft"!==t.key&&"ArrowRight"!==t.key)return;t.preventDefault();const r="rtl"===getComputedStyle(t.currentTarget).direction,n="ArrowRight"===t.key!==r?1:-1,a=zt.map(e=>e.key),o=a.indexOf(e),l=zt[o+n];l&&!l.pinned&&(a.splice(o+n,0,...a.splice(o,1)),on.current=e,$t(a))})(n.key,e):void 0,children:[l?t("button",{type:"button","aria-keyshortcuts":s?Y:void 0,className:E(U,"end"===p?"justify-end":"center"===p?"justify-center":"justify-start"),onClick:e=>((e,t)=>{const r=v(Yt,e,t&&"multiple"===Me);void 0===Ne&&Ut(r),_e?.(r)})(n.key,e.shiftKey),children:[e("span",{id:g,className:"min-w-0 truncate",children:n.label??n.key}),e("span",{"aria-hidden":"true",className:E("flex items-center","desc"===c?.direction?"rotate-0":"rotate-180",c?"":"text-transparent group-hover/sort:text-inherit group-focus-visible/sort:text-inherit"),children:e($,{})}),d>1?t(r,{children:[e("span",{"aria-hidden":"true",className:"text-[0.85em] tabular-nums",children:d}),t("span",{className:F,children:[" ",R("desc"===c?.direction?wt.sortDescending:wt.sortAscending,{order:Tn.format(d)})]})]}):null]}):e("span",{id:g,className:"block truncate",children:n.label??n.key}),f?e("span",{role:"separator","aria-orientation":"vertical","aria-label":R(wt.resizeColumn,{column:"string"==typeof n.label?n.label:n.key}),"aria-valuenow":Xr[n.key]??n.width,"aria-valuemin":an(n.key),tabIndex:0,className:"absolute inset-y-0 z-10 w-2 cursor-col-resize select-none end-0 translate-x-1/2 rtl:-translate-x-1/2 after:absolute after:inset-y-1 after:start-1/2 after:w-px after:[background:transparent] after:[transition:background_var(--neba-duration)_var(--neba-ease)] hover:after:[background:var(--n-accent)] data-[dragging]:after:[background:var(--n-accent)] focus-visible:after:[background:var(--n-accent)] [outline:0_solid_transparent] focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-0",onFocus:e=>{const t=Gr.current.get(n.key);t&&!e.currentTarget.hasAttribute("aria-valuenow")&&e.currentTarget.setAttribute("aria-valuenow",String(t.offsetWidth))},onPointerDown:e=>((e,t)=>{t.preventDefault(),t.stopPropagation();const r=t.currentTarget,n=nn(),a=Gr.current.get(e),o=a?C(a).x:1,l="rtl"===getComputedStyle(r).direction,i=t.clientX,s=n[e]??m,c=an(e);Ur.current=S({target:r,pointerId:t.pointerId,onMove:t=>{const r=(t.clientX-i)/o*(l?-1:1);qr({...n,[e]:Math.max(c,Math.round(s+r))})},onEnd:()=>{Ur.current=null}})})(n.key,e),onDoubleClick:()=>(e=>{const t={...Xr};delete t[e],qr(t)})(n.key),onKeyDown:e=>((e,t)=>{if("ArrowLeft"!==t.key&&"ArrowRight"!==t.key)return;t.preventDefault(),t.stopPropagation();const r="rtl"===getComputedStyle(t.currentTarget).direction,n="ArrowRight"===t.key!==r,a=nn(),o=a[e]??m;qr({...a,[e]:Math.max(an(e),o+(n?16:-16))})})(n.key,e)}):null]},n.key)},Fn=(r,n)=>{const a=ar.has(r),o=ft,l=n.map(e=>e.row),i=()=>or(e=>{const t=new Set(e);return t.has(r)?t.delete(r):t.add(r),t}),s=t("span",{className:"flex min-w-0 items-center gap-1.5",children:[o?e("span",{"aria-hidden":"true",className:E("flex items-center text-(--neba-muted-fg)","[transition:rotate_var(--neba-duration)_var(--neba-ease)]",a?"-rotate-90 rtl:rotate-90":""),children:e($,{})}):null,e("span",{className:"truncate font-semibold",children:""===r?wt.noGroup:r}),e("span",{className:"shrink-0 text-(--neba-muted-fg) tabular-nums",children:Tn.format(n.length)})]});return t("tr",{"data-neba-group":r,style:{height:`${Mt}px`,backgroundColor:"var(--n-soft)"},children:[Pt?e("td",{style:{...Rn,padding:0,...Nn(!1)}}):null,zt.map((t,r)=>e("td",{colSpan:1,style:{...Rn,...Cn(t,!1),textAlign:0===r?"start":t.align??"start"},children:0===r?o?e("button",{type:"button","aria-expanded":!a,className:`flex w-full min-w-0 items-center text-start ${W} focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:[outline-offset:-2px]`,onClick:i,children:s}):s:t.aggregate?e("span",{className:"tabular-nums",children:t.aggregate(l)}):null},t.key)),vn?e("td",{"aria-hidden":"true",style:{...Rn,padding:0}}):null]})},[Ln,Wn]=n.useState(null),Vn=n.useRef(!1);function Xn(e,t){Vn.current=!1,Wn({key:e,column:t})}const qn=(e,t)=>ae(e,t,void 0!==dt),Gn=(e,t,r)=>{Wn(null);const n=ne(t,e.row),a="number"===t.editType?Number(r):r;("number"!==t.editType||""!==r.trim()&&!Number.isNaN(a))&&String(a)!==String(n??"")&&dt?.(e.row,t,a)};Pn.current={pointerDown:function(e,t){if(Dr.current=null,It){if(!t.target.closest(Q))if("touch"!==t.pointerType)if(Tr.current?.focus({preventScroll:!0}),kr(e.key),2!==t.button){if(0===t.button)return t.shiftKey&&Et?(t.preventDefault(),void Nr(e.key,t.ctrlKey||t.metaKey)):void((t.ctrlKey||t.metaKey)&&Et?Mr(e.key):(Cr(e.key),Et&&((e,t)=>{const r=Tr.current;if(dn.current||!r)return;const n=e.clientY,a=()=>{const e=dn.current,t=Rr.current;if(!e||!t||0===e.speed)return void(e&&(e.frame=null));const r=t.scrollTop;t.scrollTop=r+e.speed;const n=t.scrollTop!==r;fn.current(e.y),e.frame=n?requestAnimationFrame(a):null};let o=()=>{};const l=()=>{const e=dn.current;null!=e?.frame&&cancelAnimationFrame(e.frame),dn.current=null,o()};dn.current={y:n,speed:0,frame:null,stop:l,key:t},o=S({target:r,pointerId:e.pointerId,onMove:e=>{const t=dn.current,r=Rr.current;if(t){if(t.y=e.clientY,r&&jr){const e=r.getBoundingClientRect(),n=e.top+Mt-t.y,a=t.y-(e.bottom-Mt);t.speed=n>0?-Math.min(n,40):a>0?Math.min(a,40):0}null!==t.frame&&0!==t.speed||(fn.current(t.y),0!==t.speed&&null===t.frame&&(t.frame=requestAnimationFrame(a)))}},onEnd:l,capture:!1,mark:!1})})(t,e.key)))}else xr.current.selectedKeys.has(e.key)||Cr(e.key);else Dr.current=e.key}else Ht&&!t.target.closest(Q)&&kr(e.key)},click:(e,t,r)=>{r.target.closest(ee)||(Dr.current===e.key&&(Dr.current=null,Tr.current?.focus({preventScroll:!0}),kr(e.key),Cr(e.key)),Fe?.(e.row,t,r))},doubleClick:(e,t,r)=>{r.target.closest(ee)||Le?.(e.row,t)},tick:e=>{Et?Mr(e):Cr(e)},openEditor:Xn,editorBlur:(e,t,r)=>{Vn.current||Gn(e,t,r)},editorKeyDown:(e,t,r)=>{"Enter"!==r.key&&"Escape"!==r.key||(r.stopPropagation(),Vn.current=!0,"Enter"===r.key?(r.preventDefault(),Gn(e,t,r.currentTarget.value)):Wn(null),Tr.current?.focus({preventScroll:!0}))}};const Un=Et?oe(e(i,{size:ce,color:ue,checked:mn,indeterminate:gn>0&&!mn,"aria-label":wt.selectAll,onCheckedChange:()=>{if(mn){const e=new Set(pr);Sr([...br].filter(t=>!e.has(t)))}else Sr([...new Set([...br,...pr])])}})):null,Yn=vn?e("th",{"aria-hidden":"true",className:E(be?"sticky top-0 z-20 [backdrop-filter:var(--neba-blur)]":""),style:{..._n,padding:0}}):null,Jn=(t,r)=>r>0?e("tr",{"aria-hidden":"true",style:{height:`${r}px`},children:e("td",{colSpan:kn,style:{padding:0,border:0}})},t):null;return t(o,{variant:se,size:ce,color:ue,density:de,elevation:pe,padded:!1,className:E("flex flex-col overflow-hidden",Ht?"has-[table:focus-visible,[data-neba-editor]:focus-visible]:[outline:2px_solid_var(--n-ring)] has-[table:focus-visible,[data-neba-editor]:focus-visible]:outline-offset-2":"",bt),style:{...G,...vt},...kt,children:[nt||it||P(lt)?t("div",{className:"flex items-center gap-2",style:{padding:`${Rt} ${Rt}`,borderBottom:"1px solid var(--n-line)"},children:[nt?e(u,{size:ce,color:ue,density:de,variant:"outline",type:"search",className:"w-full max-w-64",startIcon:e(SearchIcon,{}),placeholder:at??wt.search,"aria-label":at??wt.search,value:et??Ft,onChange:e=>{const t=e.target.value;void 0===et&&Lt(t),zn(1),rt?.(t)}}):null,it||P(lt)?t("div",{className:"ms-auto flex items-center gap-2",children:[lt,it?e(l,{size:ce,color:ue,density:de,variant:"outline",onClick:()=>{const e=zt.filter(e=>!1!==e.exportable),t=e.map(e=>"string"==typeof e.label?e.label:e.key),r=Qt.map(t=>e.map(e=>e.exportValue?e.exportValue(t.row):e.value?e.value(t.row):t.row[e.key])),n=j([t,...r],{escapeFormulas:ut});ct?ct(n):A(n,st,"text/csv;charset=utf-8")},children:wt.exportCsv}):null]}):null]}):null,e("div",{ref:Rr,className:"min-h-0 flex-auto overflow-auto overscroll-contain",style:{height:L(fe),maxHeight:L(ge)},onScroll:Hr,children:t("table",{ref:Tr,role:Ht?"grid":void 0,"aria-label":ke,"aria-multiselectable":Et||void 0,"aria-rowcount":Er?ur.length+jt:void 0,"aria-activedescendant":Lr?`${Ct}-${vr}`:void 0,tabIndex:Ht?0:void 0,className:E("w-full text-start [outline:none]",I[ce],"text-(--neba-fg)",It?"select-none":""),style:{tableLayout:"fixed",borderCollapse:"separate",borderSpacing:0,minWidth:`${bn}px`},onKeyDown:function(e){if(!Ht||e.target!==e.currentTarget)return;const t=xr.current.paged;if(0===t.length)return;const r=null===vr?-1:xr.current.pagedKeys.indexOf(vr),n=Rr.current,a=be?Tr.current?.tHead?.getBoundingClientRect().height??0:0,o=n?n.clientHeight-a:0,l=Math.max(1,Math.floor((o>0?o:10*Mt)/Mt)-1);switch(e.key){case"ArrowDown":sn(r+1,e);break;case"ArrowUp":sn(-1===r?0:r-1,e);break;case"Home":cn("start",0,e);break;case"End":cn("end",t.length-1,e);break;case"PageDown":cn(l*Mt,Math.max(r,0)+l,e);break;case"PageUp":cn(-l*Mt,Math.max(r,0)-l,e);break;case" ":It&&-1!==r&&(e.preventDefault(),(e.ctrlKey||e.metaKey)&&Et?Mr(t[r].key):Cr(t[r].key));break;case"a":case"A":It&&(e.ctrlKey||e.metaKey)&&Et&&(e.preventDefault(),Sr(xr.current.pagedKeys));break;case"Escape":It&&(e.preventDefault(),Sr([]));break;case"Enter":-1!==r&&Le&&(e.preventDefault(),Le(t[r].row,dr+r));break;case"F2":{const n=t[r],a=n?zt.find(e=>qn(e,n.row)):void 0;n&&a&&(e.preventDefault(),Xn(n.key,a.key));break}}},children:[ve?e("caption",{className:E(H[ce],"text-(--neba-muted-fg)"),style:{padding:`0.5rem ${Rt}`,textAlign:"start"},children:ve}):null,t("colgroup",{children:[Pt?e("col",{style:{width:`${hn}px`}}):null,zt.map(t=>{const r=yn(t);return e("col",{style:void 0===r?void 0:{width:`${r}px`}},t.key)}),vn?e("col",{}):null]}),t("thead",{children:[At?t("tr",{"aria-rowindex":Er?1:void 0,style:{height:`${Nt}px`},children:[Pt?e("th",{scope:"col",rowSpan:2,className:E(be?"sticky top-0 z-20 [backdrop-filter:var(--neba-blur)]":""),style:{..._n,padding:0,overflow:"visible",...Nn(!0)},children:Un}):null,wn.map(t=>void 0===t.label?On(zt[t.from],t.from,2):e("th",{scope:"colgroup",colSpan:t.span,className:E("font-semibold select-none",be?"sticky top-0 z-20 [backdrop-filter:var(--neba-blur)]":""),style:{..._n,textAlign:"center"},children:t.label},`group-${t.from}`)),vn?n.cloneElement(Yn,{rowSpan:2}):null]}):null,t("tr",{"aria-rowindex":Er?jt:void 0,style:{height:`${Nt}px`},children:[Pt&&!At?e("th",{scope:"col",className:E(be?"sticky top-0 z-20 [backdrop-filter:var(--neba-blur)]":""),style:{..._n,padding:0,overflow:"visible",...Nn(!0)},children:Un}):null,zt.map((e,t)=>At&&void 0===e.group?null:On(e,t)),vn&&!At?Yn:null]})]}),e("tbody",{ref:_r,children:0===ur.length?e("tr",{children:e("td",{colSpan:kn,style:{padding:`2rem ${Rt}`,textAlign:"center",color:"var(--n-cell-ink, var(--neba-muted-fg))"},children:we??xt.title})}):e(r,{children:lr?lr.order.map(e=>{const r=lr.byLabel.get(e)??[],a=r.filter(e=>fr.has(e.key));return 0!==a.length||ar.has(e)?t(n.Fragment,{children:[Fn(e,r),a.map(e=>Bn(e,fr.get(e.key)??0))]},e||"\0"):null}):(()=>{const e=Ln?ur.findIndex(e=>e.key===Ln.key):-1,t=-1!==e&&e<Or.start,r=-1!==e&&e>=Or.end;return[...t?[Jn("before",e*Mt),Bn(ur[e],e),Jn("before-rest",Or.before-(e+1)*Mt)]:[Jn("before",Or.before)],...Fr.map((e,t)=>Bn(e,Or.start+t)),...r?[Jn("after-rest",(e-Or.end)*Mt),Bn(ur[e],e),Jn("after",Or.after-(e-Or.end+1)*Mt)]:[Jn("after",Or.after)]]})()})})]})}),Dn?t("div",{className:E("flex flex-wrap items-center gap-3",H[ce]),style:{padding:`0.375rem ${Rt}`,borderTop:"1px solid var(--n-line)"},children:[t("span",{role:"status",className:"flex flex-wrap items-center gap-3",children:[e("span",{className:"text-(--neba-muted-fg) tabular-nums",children:Kn}),$n?e("span",{className:"text-(--n-accent) tabular-nums",children:$n}):null]}),t("div",{className:"ms-auto flex items-center gap-2",children:["pages"===We&&Qe.length>0?e(r,{children:e(c,{size:ce,color:ue,density:de,variant:"outline",label:wt.rowsPerPage,items:Qe.map(e=>({value:e})),value:nr,onValueChange:e=>{const t=Number(e);void 0===Ue&&rr(t),zn(Math.floor(cr.start/t)+1),Je?.(t)}})}):null,"pages"===We?e(s,{size:ce,color:ue,locale:yt,count:cr.pages,page:cr.page,siblingCount:0,getPageHref:Ge,onPageChange:zn}):null]})]}):null,Dn?null:t("span",{role:"status",className:F,children:[Kn,$n?` ${$n}`:null]}),Pt?e("span",{id:An,hidden:!0,children:wt.selectRow}):null]})}
1
+ "use client";import{jsx as e,jsxs as t,Fragment as n}from"react/jsx-runtime";import*as r from"react";import{useLayoutEffectOnClient as a}from"../../internal/layout-effect.js";import{Box as o}from"../box/Box.js";import{Button as l}from"../button/Button.js";import{Checkbox as i}from"../checkbox/Checkbox.js";import{Pagination as s}from"../pagination/Pagination.js";import{TextField as c}from"../text-field/TextField.js";import{RowsPerPage as u}from"./RowsPerPage.js";import{compareValues as d,dataHeaderHeights as p,dataRowHeights as g,dataTickWidths as f,defaultColumnWidth as m,isEmptyValue as h,keysBetween as b,minColumnWidth as y,nextSort as v,pageBounds as k,sortRows as w,virtualWindow as x}from"../../internal/data-table.js";import{beginPointerDrag as S,drawnScale as C}from"../../internal/drag.js";import{memoise as M}from"../../internal/cache.js";import{dateFormatter as R}from"../../internal/format.js";import{emptyMessages as N,fillMessage as _,tableMessages as D,useMessages as T}from"../../internal/i18n.js";import{searchHaystack as I,searchText as K}from"../../internal/search.js";import{ChevronIcon as A}from"../../internal/icons.js";import{observeResize as $}from"../../internal/observe.js";import{downloadText as z,toCsv as j}from"../../internal/csv.js";import{controlTextLeadingClasses as P,cx as E,hasContent as H,insetRingClasses as B,metaTextClasses as O,paddingXValues as F,srOnlyClasses as L,toLength as W,transitionClasses as V}from"../../internal/styles.js";import{useStyleDefaults as X}from"../../internal/defaults.js";import{whenIdle as q}from"../../internal/idle.js";import{useIntlLocale as G}from"../../internal/media.js";const U={"--n-stripe":"color-mix(in oklab, var(--neba-fg) 4%, transparent)"},Y="Alt+ArrowLeft Alt+ArrowRight";function J(e){const t=e.currentTarget;t.scrollWidth>t.clientWidth?t.title=t.textContent??"":t.removeAttribute("title")}const Q='button, a, input, select, textarea, label, [role="button"], [role="checkbox"], [role="switch"], [role="radio"]',Z={start:"shadow-[inset_2px_0_0_var(--n-accent)] rtl:shadow-[inset_-2px_0_0_var(--n-accent)]",end:"shadow-[inset_-2px_0_0_var(--n-accent)] rtl:shadow-[inset_2px_0_0_var(--n-accent)]"},ee='[data-neba-tick] [role="checkbox"], [data-neba-editor]';const te=new Map;function SearchIcon(){return t("svg",{viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[e("circle",{cx:"7.25",cy:"7.25",r:"4.75",stroke:"currentColor",strokeWidth:"1.5"}),e("path",{d:"m10.75 10.75 2.75 2.75",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function ne(e,t,n){return{position:"sticky",insetInlineStart:"start"===e?`${t}px`:void 0,insetInlineEnd:"end"===e?`${t}px`:void 0,zIndex:n?21:1,backgroundColor:"var(--n-panel-press)",backgroundImage:n?void 0:"linear-gradient(var(--n-row), var(--n-row))"}}function re(e,t,n){if(!e.pinned)return{};const r="start"===e.pinned?t.start.get(e.key):t.end.get(e.key);return ne(e.pinned,r??0,n)}function ae(e,t){return e.value?e.value(t):t[e.key]}function oe(e,t,n){return n&&("function"==typeof e.editable?e.editable(t):Boolean(e.editable))}function le(t){return e("span",{className:"flex items-center justify-center",children:t})}function DataTableRow({entry:n,index:r,position:a,selected:o,active:l,editing:s,look:c,actions:u}){const{columns:d,reactId:p,cellStyle:g}=c,f=`${p}-first-${n.origin}`;return t("tr",{id:`${p}-${n.key}`,"aria-selected":c.selects?o:void 0,"aria-rowindex":c.virtualized?r+c.headRows+1:void 0,"data-neba-row":n.key,className:E("[--n-row:transparent] [transition:background-color_var(--neba-duration)_var(--neba-ease)]",o?"[--n-row:var(--n-soft-press)]":null!==c.stripe&&r%2===c.stripe?"[--n-row:var(--n-stripe)]":"",!o&&c.hoverable?"hover:[--n-row:var(--n-soft)]":"",l&&c.navigable?"[box-shadow:inset_0_0_0_1px_var(--n-ring)]":"",c.pressable?"cursor-default":""),style:{height:`${c.rowHeight}px`,backgroundColor:"var(--n-row)"},onPointerDown:e=>u.current?.pointerDown(n,e),onClick:e=>u.current?.click(n,a,e),onDoubleClick:e=>u.current?.doubleClick(n,a,e),children:[c.showTicks?e("td",{"data-neba-tick":"",role:c.selects?"gridcell":void 0,style:{...g,padding:0,overflow:"visible",...c.pinsStart?ne("start",0,!1):{}},children:le(e(i,{size:c.size,color:c.color,checked:o,tabIndex:-1,"aria-labelledby":d.length>0?`${c.tickNameId} ${f}`:void 0,"aria-label":d.length>0?void 0:c.selectRowLabel,onCheckedChange:()=>u.current?.tick(n.key)}))}):null,d.map((t,r)=>{const o=oe(t,n.row,c.edits),l=s===t.key,i=l?ae(t,n.row):void 0;return e("td",{id:c.showTicks&&0===r?f:void 0,role:c.navigable?"gridcell":void 0,style:{...g,...re(t,c.pinOffsets,!1),textAlign:t.align??"start",cursor:o&&!l?"cell":void 0},onPointerEnter:t.render||l?void 0:J,onDoubleClick:o?e=>{e.stopPropagation(),u.current?.openEditor(n.key,t.key)}:void 0,children:l?e("input",{autoFocus:!0,"data-neba-editor":"",type:"number"===t.editType?"number":"text",defaultValue:null==i?"":String(i),"aria-label":"string"==typeof t.label?t.label:t.key,className:"neba-input w-full bg-transparent [font:inherit] text-inherit [outline:none]",style:{textAlign:t.align??"start"},onPointerDown:e=>e.stopPropagation(),onBlur:e=>u.current?.editorBlur(n,t,e.currentTarget.value),onKeyDown:e=>u.current?.editorKeyDown(n,t,e)}):t.render?t.render(n.row,a):(d=n.row[t.key],p=c.dateLocale,"boolean"==typeof d?String(d):d instanceof Date?Number.isNaN(d.getTime())?"":R(p,{dateStyle:"medium"}).format(d):d)},t.key);var d,p}),c.filler?e("td",{"aria-hidden":"true",style:{...g,padding:0}}):null]})}const ie=/*@__PURE__*/r.memo(DataTableRow);function DataTableBody({paged:t,pageIndex:n,instead:o,virtualized:l,rowHeight:i,overscan:s,viewportHeight:c,scrollSinkRef:u,tableRef:d,columnCount:p,editingKey:g,activeKey:f,reactId:m,row:h}){const[b,y]=r.useState(0);a(()=>{const e=e=>{const t=Math.floor(e/i)*i;y(e=>e===t?e:t)};return u.current=e,()=>{u.current===e&&(u.current=null)}},[i,u]);const v=l?x(b,c,i,t.length,s):{start:0,end:t.length,before:0,after:0},k=null===f?-1:n.get(f)??-1,w=-1!==k&&(null!==o||k>=v.start&&k<v.end)?`${m}-${f}`:null;if(a(()=>{const e=d.current;e&&e.getAttribute("aria-activedescendant")!==w&&(null===w?e.removeAttribute("aria-activedescendant"):e.setAttribute("aria-activedescendant",w))}),null!==o)return o;const S=(t,n)=>n>0?e("tr",{"aria-hidden":"true",style:{height:`${n}px`},children:e("td",{colSpan:p,style:{padding:0,border:0}})},t):null,C=null===g?-1:n.get(g)??-1,M=-1!==C&&C<v.start,R=-1!==C&&C>=v.end;return[...M?[S("before",C*i),h(t[C],C),S("before-rest",v.before-(C+1)*i)]:[S("before",v.before)],...t.slice(v.start,v.end).map((e,t)=>h(e,v.start+t)),...R?[S("after-rest",(C-v.end)*i),h(t[C],C),S("after",v.after-(C-v.end+1)*i)]:[S("after",v.after)]]}export function DataTable(x){const{headers:R,items:J,getRowKey:se,variant:ce="outline",size:ue="sm",color:de="primary",density:pe="compact",elevation:ge=0,height:fe,maxHeight:me,rowHeight:he,striped:be=!1,hoverable:ye=!0,stickyHeader:ve=!0,caption:ke,label:we,empty:xe,virtual:Se=!0,overscan:Ce=8,sortable:Me=!1,sortMode:Re="single",sort:Ne,defaultSort:_e,onSortChange:De,resizable:Te=!1,columnWidths:Ie,columnOrder:Ke,defaultColumnOrder:Ae,onColumnOrderChange:$e,reorderable:ze=!1,defaultColumnWidths:je,onColumnWidthsChange:Pe,selectionMode:Ee="none",selected:He,defaultSelected:Be,onSelectedChange:Oe,checkboxes:Fe=!1,onRowClick:Le,onRowActivate:We,paging:Ve="scroll",page:Xe,defaultPage:qe=1,onPageChange:Ge,getPageHref:Ue,pageSize:Ye,defaultPageSize:Je=25,onPageSizeChange:Qe,pageSizeOptions:Ze=[10,25,50,100],footer:et,search:tt,defaultSearch:nt,onSearchChange:rt,searchable:at=!1,searchPlaceholder:ot,filter:lt,toolbar:it,exportable:st=!1,exportFileName:ct="table.csv",onExport:ut,exportEscapeFormulas:dt=!0,onCellEdit:pt,groupBy:gt,collapsibleGroups:ft=!0,defaultCollapsedGroups:mt,manual:ht=!1,rowCount:bt,locale:yt,className:vt,style:kt,...wt}=X(x,["size","density","variant","locale"]),xt=T(D,yt),St=T(N,yt),Ct=function(e){return M(te,e??"",()=>({collator:new Intl.Collator(e).resolvedOptions().locale,number:new Intl.NumberFormat(e).resolvedOptions().locale,date:new Intl.DateTimeFormat(e).resolvedOptions().locale}))}(G(yt)),Mt=r.useId(),Rt=he??g[pe][ue],Nt=p[pe][ue],_t=F[pe][ue],Dt=r.useMemo(()=>new Set(!0===ht?["sort","filter","pages"]:ht||[]),[ht]),[Tt,It]=r.useState(()=>Ae??[]),Kt=Ke??Tt,At=e=>{void 0===Ke&&It(e),$e?.(e)},$t=r.useMemo(()=>{const e=R.filter(e=>!e.hidden),t=Kt.map(t=>e.find(e=>e.key===t)).filter(e=>void 0!==e),n=e.filter(e=>!Kt.includes(e.key)),r=0===Kt.length?e:[...t,...n],a=e=>"start"===e.pinned?0:"end"===e.pinned?2:1;return r.map((e,t)=>({column:e,index:t})).sort((e,t)=>a(e.column)-a(t.column)||e.index-t.index).map(e=>e.column)},[R,Kt]),zt=$t.some(e=>void 0!==e.group),jt=zt?2:1,Pt="none"!==Ee,Et="multiple"===Ee,Ht=Pt&&Fe,Bt=void 0!==pt&&$t.some(e=>void 0!==e.editable),Ot=Pt||void 0!==We||Bt,Ft=r.useMemo(()=>J.map((e,t)=>{const n=se?se(e,t):t;return{row:e,identity:n,key:String(n),origin:t}}),[J,se]),[Lt,Wt]=r.useState(nt??""),Vt=r.useDeferredValue((tt??Lt).trim()),Xt=r.useMemo(()=>$t.filter(e=>!1!==e.searchable),[$t]),qt=r.useMemo(()=>{const e=[],t=t=>{const n=Math.min(Ft.length,e.length+t);for(let t=e.length;t<n;t+=1){const n=Ft[t].row;e.push(I(Xt.map(e=>e.value?e.value(n):n[e.key])))}return e.length<Ft.length};return{fold:t,all:()=>(t(1/0),e)}},[Ft,Xt]),Gt=Dt.has("filter");r.useEffect(()=>{if(!at||Gt||0===Xt.length)return;let e=()=>{};const t=n=>{const r=performance.now()+8;let a=qt.fold(200);for(;a&&performance.now()<r&&(void 0===n||n.timeRemaining()>1);)a=qt.fold(200);a&&(e=q(t,1e3))};return e=q(t,1e3),()=>e()},[at,Gt,Xt.length,qt]);const Ut=r.useMemo(()=>new Intl.Collator(Ct.collator,{numeric:!0,sensitivity:"base"}),[Ct.collator]),[Yt,Jt]=r.useState(_e??[]),Qt=Ne??Yt,Zt=r.useMemo(()=>Dt.has("sort")?Ft:w(Ft,Qt,e=>{const t=$t.find(t=>t.key===e);if(!t)return null;if(t.compare)return(e,n)=>t.compare(e.row,n.row);const n=t.value?t.value:e=>e[t.key];return{compare:(e,t)=>d(n(e.row),n(t.row),Ut),isEmpty:e=>h(n(e.row))}}),[Ft,Qt,$t,Ut,Dt]),en=r.useMemo(()=>{if(Gt)return Zt;const e=K(Vt);let t=Zt;if(""!==e&&Xt.length>0){const n=qt.all();t=Zt.filter(t=>n[t.origin].includes(e))}return lt?t.filter(e=>lt(e.row,e.origin)):t},[Zt,Vt,lt,Gt,Xt,qt]),[tn,nn]=r.useState(qe),[rn,an]=r.useState(Je),on=Ye??rn,[ln,sn]=r.useState(()=>new Set(mt??[])),cn=r.useMemo(()=>{if(!gt)return null;const e=[],t=new Map;for(const n of en){const r=gt(n.row)??"";t.has(r)||(t.set(r,[]),e.push(r)),t.get(r).push(n)}return{order:[...e].sort((e,t)=>""===e?-1:""===t?1:0),byLabel:t}},[en,gt]),un=r.useMemo(()=>cn?cn.order.flatMap(e=>ln.has(e)?[]:cn.byLabel.get(e)??[]):en,[cn,ln,en]),dn=Dt.has("pages")?bt??un.length:un.length,pn=k(dn,Xe??tn,on),gn=r.useMemo(()=>"pages"!==Ve||Dt.has("pages")?un:un.slice(pn.start,pn.end),[un,Ve,Dt,pn.start,pn.end]),fn="pages"===Ve?pn.start:0,mn=r.useMemo(()=>gn.map(e=>e.key),[gn]),hn=r.useMemo(()=>new Map(mn.map((e,t)=>[e,t])),[mn]),bn=r.useMemo(()=>new Map(Ft.map(e=>[e.key,e])),[Ft]),[yn,vn]=r.useState(Be??[]),kn=He??yn,wn=r.useMemo(()=>new Set(kn.map(String)),[kn]),[xn,Sn]=r.useState(null),Cn=r.useRef(null),Mn=r.useRef({paged:gn,pagedKeys:mn,pageIndex:hn,byKey:bn,selectedKeys:wn,selectedValues:kn,multiple:Et});Mn.current={paged:gn,pagedKeys:mn,pageIndex:hn,byKey:bn,selectedKeys:wn,selectedValues:kn,multiple:Et};const Rn=r.useCallback(e=>{const t=[],n=[],r=Dt.has("pages")?new Map(Mn.current.selectedValues.map(e=>[String(e),e])):null;for(const a of e){const e=Mn.current.byKey.get(a);e?(t.push(e.identity),n.push(e.row)):r?.has(a)&&t.push(r.get(a))}void 0===He&&vn(t),Oe?.(t,n)},[He,Oe,Dt]),Nn=r.useCallback(e=>{Cn.current=e,Rn([e])},[Rn]),_n=r.useCallback(e=>{const t=Mn.current.selectedKeys,n=new Set(t);n.has(e)?n.delete(e):n.add(e),Cn.current=e,Rn([...n])},[Rn]),Dn=r.useCallback((e,t)=>{const{pagedKeys:n,pageIndex:r}=Mn.current,a=Cn.current??n[0];if(void 0===a)return;const o=b(n,a,e,r);0!==o.length?Rn(t?[...new Set([...Mn.current.selectedKeys,...o])]:o):r.has(e)&&(Cn.current=e,Rn(t?[...new Set([...Mn.current.selectedKeys,e])]:[e]))},[Rn]),Tn=r.useRef(null),In=r.useRef(null),Kn=r.useRef(null),An=r.useRef(null),$n=void 0!==fe||void 0!==me,zn=void 0!==gt,jn=Se&&$n&&gn.length>0&&!gt,Pn=Se&&!jn&&gn.length>500?gn.length:0,En=r.useRef(!1);r.useEffect(()=>{"production"===process.env.NODE_ENV||0===Pn||En.current||(En.current=!0,console.warn(`Neba: a DataTable is drawing ${Pn} rows at once, because ${zn?"a grouped table is never virtual":"nothing bounds its height"}. ${zn?'Page it with paging="pages", or leave groupBy off and give it a height or a maxHeight':'Give it a height or a maxHeight to draw only the rows on screen, or page it with paging="pages"'}. Pass virtual={false} if every row is meant to be drawn.`))},[Pn,zn]);const[Hn,Bn]=r.useState(0);a(()=>{const e=Tn.current;if(e&&jn)return Bn(e.clientHeight),$(e,e=>Bn(e.contentRect.height))},[jn]);const On=r.useRef(null),Fn=r.useCallback(e=>{jn&&On.current?.(e.currentTarget.scrollTop)},[jn]),[Ln,Wn]=r.useState(je??{}),Vn=Ie??Ln,Xn=r.useCallback(e=>{void 0===Ie&&Wn(e),Pe?.(e)},[Ie,Pe]),qn=r.useRef(new Map),Gn=r.useRef(null),Un=r.useRef(null),[Yn,Jn]=r.useState(null),[Qn,Zn]=r.useState(null),er=r.useRef(null),tr=r.useRef(null);r.useEffect(()=>()=>{Gn.current?.(),Un.current?.()},[]);const nr=()=>{const e={...Vn};for(const t of $t){const n=qn.current.get(t.key);n&&void 0===e[t.key]&&(e[t.key]=n.offsetWidth)}return e},rr=e=>$t.find(t=>t.key===e)?.minWidth??y,ar=r.useRef(null);a(()=>{const e=ar.current;if(null===e)return;ar.current=null;const t=qn.current.get(e),n=t?.querySelector("button")??t;n&&n!==document.activeElement&&n.focus()});const or=r.useCallback((e,t)=>{const n=Tn.current,r=In.current;if(!n||!r)return;const a=function(e,t){for(let n=0;n<e.rows.length;n+=1)if(e.rows[n].dataset.nebaRow===t)return e.rows[n];return null}(r,e);if(!$n)return void a?.scrollIntoView({block:"nearest",inline:"nearest"});const o=n.getBoundingClientRect().top+n.clientTop-n.scrollTop,l=(a??r).getBoundingClientRect(),i=l.top-o+(a?0:t*Rt),s=i+(a?l.height:Rt),c=ve?Kn.current?.tHead?.getBoundingClientRect().height??0:0;i<n.scrollTop+c?n.scrollTop=Math.max(0,Math.floor(i-c)):s>n.scrollTop+n.clientHeight&&(n.scrollTop=Math.ceil(s-n.clientHeight))},[$n,ve,Rt]),lr=(e,t,n=!0)=>{const r=Mn.current.paged,a=Math.min(Math.max(e,0),r.length-1),o=r[a];o&&(t.preventDefault(),Sn(o.key),or(o.key,a),Pt&&(t.shiftKey&&Mn.current.multiple?Dn(o.key,!1):!n||t.ctrlKey||t.metaKey||Nn(o.key)))},ir=(e,t,n)=>{const r=Tn.current;if(!r||!$n)return;n.preventDefault();const a=Math.max(0,r.scrollHeight-r.clientHeight),o="start"===e?0:"end"===e?a:r.scrollTop+e;r.scrollTop=Math.min(Math.max(o,0),a),lr(t,n,!1)};const sr=r.useCallback(e=>{const t=In.current,n=Mn.current.paged;if(!t||0===n.length)return null;if(zn){const r=t.querySelectorAll("tr[data-neba-row]");let a=0,o=r.length-1,l=0;for(;a<=o;){const t=a+o>>1;r[t].getBoundingClientRect().top<=e?(l=t,a=t+1):o=t-1}return Math.min(l,n.length-1)}const r=t.getBoundingClientRect().top,a=Math.floor((e-r)/Rt);return Math.min(Math.max(a,0),n.length-1)},[Rt,zn]),cr=r.useRef(null),ur=r.useCallback(e=>{const t=sr(e),n=null===t?void 0:Mn.current.paged[t],r=cr.current;!n||r&&r.key===n.key||(r&&(r.key=n.key),Sn(n.key),Dn(n.key,!1))},[sr,Dn]),dr=r.useRef(ur);dr.current=ur;r.useEffect(()=>()=>cr.current?.stop(),[]);const pr=r.useMemo(()=>mn.reduce((e,t)=>wn.has(t)?e+1:e,0),[mn,wn]),gr=mn.length>0&&pr===mn.length,fr=f[ue],mr=e=>Vn[e.key]??e.width,hr=(Ht?fr:0)+$t.reduce((e,t)=>e+(mr(t)??y),0),br=$t.length>0&&$t.every(e=>void 0!==mr(e)),yr=$t.length+(Ht?1:0)+(br?1:0),vr=r.useMemo(()=>{const e=[];return $t.forEach((t,n)=>{const r=e[e.length-1];r&&void 0!==r.label&&r.label===t.group?r.span+=1:e.push({label:t.group,span:1,from:n})}),e},[$t]),kr=$t.filter(e=>e.pinned).map(e=>mr(e)??"").join(","),wr=r.useMemo(()=>{const e=new Map,t=new Map;let n=Ht?fr:0;for(const t of $t)"start"===t.pinned&&(e.set(t.key,n),n+=mr(t)??m);let r=0;for(let e=$t.length-1;e>=0;e-=1){const n=$t[e];"end"===n.pinned&&(t.set(n.key,r),r+=mr(n)??m)}return{start:e,end:t}},[$t,kr,Ht,fr]),xr=(e,t)=>re(e,wr,t),Sr=$t.some(e=>"start"===e.pinned),Cr=e=>Sr?ne("start",0,e):{},Mr=r.useMemo(()=>({padding:`0 ${_t}`,borderBottom:"1px solid var(--n-line)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}),[_t]),Rr={...Mr,height:`${Nt}px`,backgroundColor:"var(--n-panel-press)",color:"var(--n-cell-ink, var(--neba-muted-fg))"},Nr=r.useMemo(()=>new Intl.NumberFormat(Ct.number),[Ct.number]),_r=et??"pages"===Ve,Dr=_(xt.range,{start:Nr.format(0===dn?0:("pages"===Ve?pn.start:0)+1),end:Nr.format("pages"===Ve?pn.end:dn),total:Nr.format(dn)}),Tr=Pt&&wn.size>0?_(xt.selected,{count:Nr.format(wn.size)}):"",Ir=e=>{void 0===Xe&&nn(e),Ge?.(e)},Kr=`${Mt}-tick`,Ar=Pt||void 0!==Le,$r=void 0!==pt,zr=r.useMemo(()=>({columns:$t,reactId:Mt,selects:Pt,navigable:Ot,showTicks:Ht,pressable:Ar,virtualized:jn,headRows:jt,stripe:!1===be?null:"odd"===be?0:1,hoverable:ye,rowHeight:Rt,cellStyle:Mr,pinOffsets:wr,pinsStart:Sr,filler:br,edits:$r,size:ue,color:de,dateLocale:Ct.date,tickNameId:Kr,selectRowLabel:xt.selectRow}),[$t,Mt,Pt,Ot,Ht,Ar,jn,jt,be,ye,Rt,Mr,wr,Sr,br,$r,ue,de,Ct.date,Kr,xt.selectRow]),jr=r.useRef(null),Pr=(t,n)=>e(ie,{entry:t,index:n,position:fn+n,selected:wn.has(t.key),active:xn===t.key,editing:Or?.key===t.key?Or.column:null,look:zr,actions:jr,redraw:x},t.key),Er=e=>{const t=$t.map(e=>e.key);return null!==Yn&&t.indexOf(Yn)<t.indexOf(e)?"end":"start"},Hr=(r,a,o)=>{const l=r.sortable??Me,i=r.resizable??Te,s=ze&&!r.pinned,c=(u=r.key,Qt.find(e=>e.key===u));var u;const d=c?Qt.findIndex(e=>e.key===r.key)+1:0,p=r.headerAlign??r.align??"start",g=i&&a<$t.length-1,f=g||d>1?`${Mt}-head-${a}`:void 0;return t("th",{"aria-labelledby":f,ref:e=>{e?qn.current.set(r.key,e):qn.current.delete(r.key)},scope:"col",rowSpan:o,"aria-sort":c&&1===d?"asc"===c.direction?"ascending":"descending":void 0,"data-column":r.key,"data-dragging":Yn===r.key||void 0,className:E("relative font-semibold select-none",ve?"sticky z-20 [backdrop-filter:var(--neba-blur)]":"",s?Yn===r.key?"cursor-grabbing":"cursor-grab":"",s&&!l?B:"",Qn===r.key?Z[Er(r.key)]:""),style:{...Rr,...xr(r,!0),backgroundImage:Yn===r.key?"linear-gradient(var(--n-soft), var(--n-soft))":void 0,top:ve?2!==o&&zt?Nt:0:void 0,textAlign:p,color:c?"var(--n-cell-ink, var(--n-accent))":Rr.color},tabIndex:s&&!l?0:void 0,"aria-keyshortcuts":s&&!l?Y:void 0,onPointerDown:s?e=>((e,t)=>{if(0!==t.button)return;const n=t.currentTarget,r=t.clientX;let a=!1;Un.current=S({target:n,pointerId:t.pointerId,capture:!1,onMove:t=>{if(!a){if(Math.abs(t.clientX-r)<6)return;a=!0,er.current=e,Jn(e)}const n=$t.find(e=>{if(e.pinned)return!1;const n=qn.current.get(e.key);if(!n)return!1;const r=n.getBoundingClientRect();return t.clientX>=r.left&&t.clientX<=r.right});tr.current=n&&n.key!==e?n.key:null,Zn(tr.current)},onEnd:()=>{const e=er.current,t=tr.current;if(Un.current=null,er.current=null,tr.current=null,Jn(null),Zn(null),e&&t&&e!==t){const n=$t.map(e=>e.key),r=n.indexOf(e),a=n.indexOf(t);n.splice(a,0,...n.splice(r,1)),At(n)}}})})(r.key,e):void 0,onKeyDown:s?e=>((e,t)=>{if(!t.altKey||"ArrowLeft"!==t.key&&"ArrowRight"!==t.key)return;t.preventDefault();const n="rtl"===getComputedStyle(t.currentTarget).direction,r="ArrowRight"===t.key!==n?1:-1,a=$t.map(e=>e.key),o=a.indexOf(e),l=$t[o+r];l&&!l.pinned&&(a.splice(o+r,0,...a.splice(o,1)),ar.current=e,At(a))})(r.key,e):void 0,children:[l?t("button",{type:"button","aria-keyshortcuts":s?Y:void 0,className:E("group/sort flex w-full min-w-0 cursor-pointer items-center gap-1 text-inherit [outline:none] [transition:color_var(--neba-duration)_var(--neba-ease)] hover:text-(--n-accent) focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-1 [&_svg]:pointer-events-none [&_svg]:size-[1.15em] [&_svg]:shrink-0","end"===p?"justify-end":"center"===p?"justify-center":"justify-start"),onClick:e=>((e,t)=>{const n=v(Qt,e,t&&"multiple"===Re);void 0===Ne&&Jt(n),De?.(n)})(r.key,e.shiftKey),children:[e("span",{id:f,className:"min-w-0 truncate",children:r.label??r.key}),e("span",{"aria-hidden":"true",className:E("flex items-center","desc"===c?.direction?"rotate-0":"rotate-180",c?"":"text-transparent group-hover/sort:text-inherit group-focus-visible/sort:text-inherit"),children:e(A,{})}),d>1?t(n,{children:[e("span",{"aria-hidden":"true",className:"text-[0.85em] tabular-nums",children:d}),t("span",{className:L,children:[" ",_("desc"===c?.direction?xt.sortDescending:xt.sortAscending,{order:Nr.format(d)})]})]}):null]}):e("span",{id:f,className:"block truncate",children:r.label??r.key}),g?e("span",{role:"separator","aria-orientation":"vertical","aria-label":_(xt.resizeColumn,{column:"string"==typeof r.label?r.label:r.key}),"aria-valuenow":Vn[r.key]??r.width,"aria-valuemin":rr(r.key),tabIndex:0,className:"absolute inset-y-0 z-10 w-2 cursor-col-resize select-none end-0 translate-x-1/2 rtl:-translate-x-1/2 after:absolute after:inset-y-1 after:start-1/2 after:w-px after:[background:transparent] after:[transition:background_var(--neba-duration)_var(--neba-ease)] hover:after:[background:var(--n-accent)] data-[dragging]:after:[background:var(--n-accent)] focus-visible:after:[background:var(--n-accent)] [outline:0_solid_transparent] focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-0",onFocus:e=>{const t=qn.current.get(r.key);t&&!e.currentTarget.hasAttribute("aria-valuenow")&&e.currentTarget.setAttribute("aria-valuenow",String(t.offsetWidth))},onPointerDown:e=>((e,t)=>{t.preventDefault(),t.stopPropagation();const n=t.currentTarget,r=nr(),a=qn.current.get(e),o=a?C(a).x:1,l="rtl"===getComputedStyle(n).direction,i=t.clientX,s=r[e]??m,c=rr(e);Gn.current=S({target:n,pointerId:t.pointerId,onMove:t=>{const n=(t.clientX-i)/o*(l?-1:1);Xn({...r,[e]:Math.max(c,Math.round(s+n))})},onEnd:()=>{Gn.current=null}})})(r.key,e),onDoubleClick:()=>(e=>{const t={...Vn};delete t[e],Xn(t)})(r.key),onKeyDown:e=>((e,t)=>{if("ArrowLeft"!==t.key&&"ArrowRight"!==t.key)return;t.preventDefault(),t.stopPropagation();const n="rtl"===getComputedStyle(t.currentTarget).direction,r="ArrowRight"===t.key!==n,a=nr(),o=a[e]??m;Xn({...a,[e]:Math.max(rr(e),o+(r?16:-16))})})(r.key,e)}):null]},r.key)},Br=(n,r)=>{const a=ln.has(n),o=ft,l=r.map(e=>e.row),i=()=>sn(e=>{const t=new Set(e);return t.has(n)?t.delete(n):t.add(n),t}),s=t("span",{className:"flex min-w-0 items-center gap-1.5",children:[o?e("span",{"aria-hidden":"true",className:E("flex items-center text-(--neba-muted-fg)","[transition:rotate_var(--neba-duration)_var(--neba-ease)]",a?"-rotate-90 rtl:rotate-90":""),children:e(A,{})}):null,e("span",{className:"truncate font-semibold",children:""===n?xt.noGroup:n}),e("span",{className:"shrink-0 text-(--neba-muted-fg) tabular-nums",children:Nr.format(r.length)})]});return t("tr",{"data-neba-group":n,style:{height:`${Rt}px`,backgroundColor:"var(--n-soft)"},children:[Ht?e("td",{style:{...Mr,padding:0,...Cr(!1)}}):null,$t.map((t,n)=>e("td",{colSpan:1,style:{...Mr,...xr(t,!1),textAlign:0===n?"start":t.align??"start"},children:0===n?o?e("button",{type:"button","aria-expanded":!a,className:`flex w-full min-w-0 items-center text-start ${V} focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:[outline-offset:-2px]`,onClick:i,children:s}):s:t.aggregate?e("span",{className:"tabular-nums",children:t.aggregate(l)}):null},t.key)),br?e("td",{"aria-hidden":"true",style:{...Mr,padding:0}}):null]})},[Or,Fr]=r.useState(null),Lr=r.useRef(!1);function Wr(e,t){Lr.current=!1,Fr({key:e,column:t})}const Vr=(e,t)=>oe(e,t,void 0!==pt),Xr=(e,t,n)=>{Fr(null);const r=ae(t,e.row),a="number"===t.editType?Number(n):n;("number"!==t.editType||""!==n.trim()&&!Number.isNaN(a))&&String(a)!==String(r??"")&&pt?.(e.row,t,a)};jr.current={pointerDown:function(e,t){if(An.current=null,Pt){if(!t.target.closest(Q))if("touch"!==t.pointerType)if(Kn.current?.focus({preventScroll:!0}),Sn(e.key),2!==t.button){if(0===t.button)return t.shiftKey&&Et?(t.preventDefault(),void Dn(e.key,t.ctrlKey||t.metaKey)):void((t.ctrlKey||t.metaKey)&&Et?_n(e.key):(Nn(e.key),Et&&((e,t)=>{const n=Kn.current;if(cr.current||!n)return;const r=e.clientY,a=()=>{const e=cr.current,t=Tn.current;if(!e||!t||0===e.speed)return void(e&&(e.frame=null));const n=t.scrollTop;t.scrollTop=n+e.speed;const r=t.scrollTop!==n;dr.current(e.y),e.frame=r?requestAnimationFrame(a):null};let o=()=>{};const l=()=>{const e=cr.current;null!=e?.frame&&cancelAnimationFrame(e.frame),cr.current=null,o()};cr.current={y:r,speed:0,frame:null,stop:l,key:t},o=S({target:n,pointerId:e.pointerId,onMove:e=>{const t=cr.current,n=Tn.current;if(t){if(t.y=e.clientY,n&&$n){const e=n.getBoundingClientRect(),r=e.top+Rt-t.y,a=t.y-(e.bottom-Rt);t.speed=r>0?-Math.min(r,40):a>0?Math.min(a,40):0}null!==t.frame&&0!==t.speed||(dr.current(t.y),0!==t.speed&&null===t.frame&&(t.frame=requestAnimationFrame(a)))}},onEnd:l,capture:!1,mark:!1})})(t,e.key)))}else Mn.current.selectedKeys.has(e.key)||Nn(e.key);else An.current=e.key}else Ot&&!t.target.closest(Q)&&Sn(e.key)},click:(e,t,n)=>{n.target.closest(ee)||(An.current===e.key&&(An.current=null,Kn.current?.focus({preventScroll:!0}),Sn(e.key),Nn(e.key)),Le?.(e.row,t,n))},doubleClick:(e,t,n)=>{n.target.closest(ee)||We?.(e.row,t)},tick:e=>{Et?_n(e):Nn(e)},openEditor:Wr,editorBlur:(e,t,n)=>{Lr.current||Xr(e,t,n)},editorKeyDown:(e,t,n)=>{"Enter"!==n.key&&"Escape"!==n.key||(n.stopPropagation(),Lr.current=!0,"Enter"===n.key?(n.preventDefault(),Xr(e,t,n.currentTarget.value)):Fr(null),Kn.current?.focus({preventScroll:!0}))}};const qr=Et?le(e(i,{size:ue,color:de,checked:gr,indeterminate:pr>0&&!gr,"aria-label":xt.selectAll,onCheckedChange:()=>{if(gr){const e=new Set(mn);Rn([...wn].filter(t=>!e.has(t)))}else Rn([...new Set([...wn,...mn])])}})):null,Gr=br?e("th",{"aria-hidden":"true",className:E(ve?"sticky top-0 z-20 [backdrop-filter:var(--neba-blur)]":""),style:{...Rr,padding:0}}):null;return t(o,{variant:ce,size:ue,color:de,density:pe,elevation:ge,padded:!1,className:E("flex flex-col overflow-hidden",Ot?"has-[table:focus-visible,[data-neba-editor]:focus-visible]:[outline:2px_solid_var(--n-ring)] has-[table:focus-visible,[data-neba-editor]:focus-visible]:outline-offset-2":"",vt),style:{...U,...kt},...wt,children:[at||st||H(it)?t("div",{className:"flex items-center gap-2",style:{padding:`${_t} ${_t}`,borderBottom:"1px solid var(--n-line)"},children:[at?e(c,{size:ue,color:de,density:pe,variant:"outline",type:"search",className:"w-full max-w-64",startIcon:e(SearchIcon,{}),placeholder:ot??xt.search,"aria-label":ot??xt.search,value:tt??Lt,onChange:e=>{const t=e.target.value;void 0===tt&&Wt(t),Ir(1),rt?.(t)}}):null,st||H(it)?t("div",{className:"ms-auto flex items-center gap-2",children:[it,st?e(l,{size:ue,color:de,density:pe,variant:"outline",onClick:()=>{const e=$t.filter(e=>!1!==e.exportable),t=e.map(e=>"string"==typeof e.label?e.label:e.key),n=en.map(t=>e.map(e=>e.exportValue?e.exportValue(t.row):e.value?e.value(t.row):t.row[e.key])),r=j([t,...n],{escapeFormulas:dt});ut?ut(r):z(r,ct,"text/csv;charset=utf-8")},children:xt.exportCsv}):null]}):null]}):null,e("div",{ref:Tn,className:"min-h-0 flex-auto overflow-auto overscroll-contain",style:{height:W(fe),maxHeight:W(me)},onScroll:Fn,children:t("table",{ref:Kn,role:Ot?"grid":void 0,"aria-label":we,"aria-multiselectable":Et||void 0,"aria-rowcount":jn?gn.length+jt:void 0,tabIndex:Ot?0:void 0,className:E("w-full text-start [outline:none]",P[ue],"text-(--neba-fg)",Pt?"select-none":""),style:{tableLayout:"fixed",borderCollapse:"separate",borderSpacing:0,minWidth:`${hr}px`},onKeyDown:function(e){if(!Ot||e.target!==e.currentTarget)return;const t=Mn.current.paged;if(0===t.length)return;const n=null===xn?-1:Mn.current.pageIndex.get(xn)??-1,r=Tn.current,a=ve?Kn.current?.tHead?.getBoundingClientRect().height??0:0,o=r?r.clientHeight-a:0,l=Math.max(1,Math.floor((o>0?o:10*Rt)/Rt)-1);switch(e.key){case"ArrowDown":lr(n+1,e);break;case"ArrowUp":lr(-1===n?0:n-1,e);break;case"Home":ir("start",0,e);break;case"End":ir("end",t.length-1,e);break;case"PageDown":ir(l*Rt,Math.max(n,0)+l,e);break;case"PageUp":ir(-l*Rt,Math.max(n,0)-l,e);break;case" ":Pt&&-1!==n&&(e.preventDefault(),(e.ctrlKey||e.metaKey)&&Et?_n(t[n].key):Nn(t[n].key));break;case"a":case"A":Pt&&(e.ctrlKey||e.metaKey)&&Et&&(e.preventDefault(),Rn(Mn.current.pagedKeys));break;case"Escape":Pt&&(e.preventDefault(),Rn([]));break;case"Enter":-1!==n&&We&&(e.preventDefault(),We(t[n].row,fn+n));break;case"F2":{const r=t[n],a=r?$t.find(e=>Vr(e,r.row)):void 0;r&&a&&(e.preventDefault(),Wr(r.key,a.key));break}}},children:[ke?e("caption",{className:E(O[ue],"text-(--neba-muted-fg)"),style:{padding:`0.5rem ${_t}`,textAlign:"start"},children:ke}):null,t("colgroup",{children:[Ht?e("col",{style:{width:`${fr}px`}}):null,$t.map(t=>{const n=mr(t);return e("col",{style:void 0===n?void 0:{width:`${n}px`}},t.key)}),br?e("col",{}):null]}),t("thead",{children:[zt?t("tr",{"aria-rowindex":jn?1:void 0,style:{height:`${Nt}px`},children:[Ht?e("th",{scope:"col",rowSpan:2,className:E(ve?"sticky top-0 z-20 [backdrop-filter:var(--neba-blur)]":""),style:{...Rr,padding:0,overflow:"visible",...Cr(!0)},children:qr}):null,vr.map(t=>void 0===t.label?Hr($t[t.from],t.from,2):e("th",{scope:"colgroup",colSpan:t.span,className:E("font-semibold select-none",ve?"sticky top-0 z-20 [backdrop-filter:var(--neba-blur)]":""),style:{...Rr,textAlign:"center"},children:t.label},`group-${t.from}`)),br?r.cloneElement(Gr,{rowSpan:2}):null]}):null,t("tr",{"aria-rowindex":jn?jt:void 0,style:{height:`${Nt}px`},children:[Ht&&!zt?e("th",{scope:"col",className:E(ve?"sticky top-0 z-20 [backdrop-filter:var(--neba-blur)]":""),style:{...Rr,padding:0,overflow:"visible",...Cr(!0)},children:qr}):null,$t.map((e,t)=>zt&&void 0===e.group?null:Hr(e,t)),br&&!zt?Gr:null]})]}),e("tbody",{ref:In,children:e(DataTableBody,{paged:gn,pageIndex:hn,instead:0===gn.length?e("tr",{children:e("td",{colSpan:yr,style:{padding:`2rem ${_t}`,textAlign:"center",color:"var(--n-cell-ink, var(--neba-muted-fg))"},children:xe??St.title})}):cn?cn.order.map(e=>{const n=cn.byLabel.get(e)??[],a=n.filter(e=>hn.has(e.key));return 0!==a.length||ln.has(e)?t(r.Fragment,{children:[Br(e,n),a.map(e=>Pr(e,hn.get(e.key)??0))]},e||"\0"):null}):null,virtualized:jn,rowHeight:Rt,overscan:Ce,viewportHeight:Hn,scrollSinkRef:On,tableRef:Kn,columnCount:yr,editingKey:Or?.key??null,activeKey:Ot?xn:null,reactId:Mt,row:Pr})})]})}),_r?t("div",{className:E("flex flex-wrap items-center gap-3",O[ue]),style:{padding:`0.375rem ${_t}`,borderTop:"1px solid var(--n-line)"},children:[t("span",{role:"status",className:"flex flex-wrap items-center gap-3",children:[e("span",{className:"text-(--neba-muted-fg) tabular-nums",children:Dr}),Tr?e("span",{className:"text-(--n-accent) tabular-nums",children:Tr}):null]}),t("div",{className:"ms-auto flex items-center gap-2",children:["pages"===Ve&&Ze.length>0?e(u,{size:ue,color:de,density:pe,label:xt.rowsPerPage,options:Ze,value:on,onChange:e=>{void 0===Ye&&an(e),Ir(Math.floor(pn.start/e)+1),Qe?.(e)}}):null,"pages"===Ve?e(s,{size:ue,color:de,locale:yt,count:pn.pages,page:pn.page,siblingCount:0,getPageHref:Ue,onPageChange:Ir}):null]})]}):null,_r?null:t("span",{role:"status",className:L,children:[Dr,Tr?` ${Tr}`:null]}),Ht?e("span",{id:Kr,hidden:!0,children:xt.selectRow}):null]})}
@@ -0,0 +1,43 @@
1
+ import * as React from 'react';
2
+ import type { NebaColor, NebaDensity, NebaSize } from '../../types.js';
3
+ /**
4
+ * The one request for the Select's chunk, shared by every table that asks. A
5
+ * request that fails is forgotten, so the next one tries again rather than
6
+ * failing for good.
7
+ *
8
+ * An object rather than a function so a test can spy on it. Exported for that,
9
+ * and deliberately left out of the barrel.
10
+ */
11
+ export declare const rowsPerPageChunk: {
12
+ load(): Promise<{
13
+ default: React.ForwardRefExoticComponent<import("../select/Select.js").SelectProps & React.RefAttributes<HTMLButtonElement>>;
14
+ }>;
15
+ /** Whether the chunk is here, so a table mounted after it draws the Select at once. */
16
+ arrived(): boolean;
17
+ };
18
+ export interface RowsPerPageProps {
19
+ size: NebaSize;
20
+ color: NebaColor;
21
+ density: NebaDensity;
22
+ /** The control's name, which the label says. */
23
+ label: string;
24
+ options: readonly number[];
25
+ value: number;
26
+ onChange: (value: number) => void;
27
+ }
28
+ /**
29
+ * The footer's page-size control: the Select once its chunk is here, and the
30
+ * stand-in above until then.
31
+ *
32
+ * Never the Select in a server render or in the render that hydrates one, and
33
+ * no Suspense boundary around it there either. A lazy component suspends
34
+ * wherever its chunk has not loaded: `renderToString` gives up on the boundary
35
+ * around it and leaves React an error to report at hydration, and a streaming
36
+ * render sends the fallback and the content both, the second to be swapped in
37
+ * by a script. So the server sends the stand-in alone, the browser hydrates
38
+ * it, and the Select takes its place once the chunk has arrived, in a
39
+ * transition. The boundary is there from then on for a table mounted before
40
+ * React has drawn a Select from the chunk, which shows the stand-in for the
41
+ * moment that takes.
42
+ */
43
+ export declare function RowsPerPage(props: RowsPerPageProps): React.JSX.Element;
@@ -0,0 +1 @@
1
+ "use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as r from"react";import{Field as n}from"@base-ui/react/field";import{ChevronIcon as a}from"../../internal/icons.js";import{useHydrated as l}from"../../internal/media.js";import{FieldNotch as o,NotchFrame as s}from"../../internal/notch.js";import{WidthSizer as i,widestSamples as c}from"../../internal/sizer.js";import{fieldSpotlightSlot as u,glowClasses as d,trackPointer as m}from"../../internal/glow.js";import{useFieldsetDisabled as f}from"../../internal/fieldset.js";import{useStyleDefaults as p}from"../../internal/defaults.js";import{controlTextLeadingClasses as b,cx as h,disabledClasses as P,fieldHeightClasses as g,fieldRestClasses as v,fieldRingClasses as x,fieldSheetClasses as w,fieldSheetDisabledClasses as y,gapClasses as j,metaTextClasses as k,paddingXClasses as C,radiusClasses as N,selectTriggerClasses as S,stackGapClasses as R,surfaceSlots as z}from"../../internal/styles.js";let T,D=!1;export const rowsPerPageChunk={load:()=>(T??=import("../select/Select.js").then(e=>({default:e.Select})).then(e=>(D=!0,e),e=>{throw T=void 0,e}),T),arrived:()=>D};const E=r.lazy(()=>rowsPerPageChunk.load()),A=/*@__PURE__*/r.forwardRef(function RowsPerPageStandIn({size:l,color:f,density:p,label:T,options:D,value:E,labelPlacement:A,disabled:F,onPress:I},O){const $=r.useId(),_="outline",K="top"!==A&&""!==T,L=K&&"float"===A,M=c([...D.map(String),...L?[T]:[]]),U=t("button",{ref:O,type:"button",id:$,role:"combobox","aria-expanded":"false","aria-haspopup":"listbox",disabled:F,"data-neba-stand-in":"",onPointerMove:m(void 0,!F),onPointerDown:e=>{"mouse"===e.pointerType&&0===e.button&&I(e.currentTarget)},onClick:e=>I(e.currentTarget),onKeyDown:e=>{"ArrowDown"!==e.key&&"ArrowUp"!==e.key||(e.preventDefault(),I(e.currentTarget))},className:h(S,g[l],b[l],N[l],j[l],C[p][l],K?"":x,F?(K?y:P)[_]:`${(K?w:v)[_]} ${d}`,L?"neba-float-control":""),children:[t("span",{className:"flex min-w-0 flex-1 flex-col",children:[e("span",{className:"w-full truncate text-start data-[placeholder]:text-(--neba-muted-fg)",children:String(E)}),e(i,{samples:M})]}),e("span",{"aria-hidden":"true",className:"flex h-[1lh] shrink-0 items-center text-(--neba-muted-fg) [transition:rotate_var(--neba-duration)_var(--neba-ease)] data-[popup-open]:rotate-180",children:e(a,{})})]});return t(n.Root,{disabled:F,className:h("flex-col align-top",R[l],"inline-flex"),style:{...z(f,0),...F?void 0:u},children:[K?null:e(n.Label,{htmlFor:$,className:h(k[l],"font-medium",F?"text-(--neba-disabled-fg)":"text-(--neba-fg)"),children:T}),K?t(s,{label:T,size:l,density:p,variant:_,className:h(N[l],F?"cursor-not-allowed":"cursor-pointer"),children:[U,e(o,{label:T,variant:_,disabled:F,readOnly:!1,rests:L,beside:!0,htmlFor:$})]}):U]})});export function RowsPerPage(t){const{labelPlacement:n="top"}=p({},["labelPlacement"]),a=f(!1),o=l(),[s,i]=r.useState(()=>o&&rowsPerPageChunk.arrived()),[c,u]=r.useState(!1),d=r.useRef(null),m=r.useRef(!1),b=r.useRef(!1);r.useEffect(()=>{if(s)return;let e=!0;return rowsPerPageChunk.load().then(()=>{if(!e)return;m.current=null!==d.current&&document.activeElement===d.current;const t=m.current&&b.current;b.current=!1,r.startTransition(()=>{i(!0),u(t)})},()=>{}),()=>{e=!1}},[s]);const h=r.useCallback(e=>{e&&m.current&&(m.current=!1,null!==document.activeElement&&document.activeElement!==document.body||e.focus())},[]),P=e(A,{ref:d,...t,labelPlacement:n,disabled:a,onPress:e=>{e.focus(),s?(m.current=!0,u(!0)):b.current=!0}});return s?e(r.Suspense,{fallback:P,children:e(E,{ref:h,size:t.size,color:t.color,density:t.density,variant:"outline",label:t.label,items:t.options.map(e=>({value:e})),value:t.value,defaultOpen:c,onValueChange:e=>t.onChange(Number(e))})}):P}
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as a}from"react/jsx-runtime";import*as t from"react";import{Button as l}from"../button/Button.js";import{Calendar as n,usePickerLabels as o}from"../../internal/calendar.js";import{CalendarIcon as r}from"../../internal/icons.js";import{PickerFooter as i,PickerShell as s}from"../../internal/picker.js";import{displaySamples as c,formatDate as m,isUnitOutside as d,isValidDate as u,localeWeekStart as p,mergeDateAndTime as h,startOfMonth as f,startOfUnit as y,toISODate as b,toISOMonth as j,toISOYear as g,today as v,withPlaceholder as x}from"../../internal/date.js";import{cx as D}from"../../internal/styles.js";import{useStyleDefaults as O}from"../../internal/defaults.js";import{useIntlLocale as S}from"../../internal/media.js";const k={day:{dateStyle:"medium"},month:{year:"numeric",month:"long"},year:{year:"numeric"}},z={day:b,month:j,year:g};export const DatePicker=/*@__PURE__*/t.forwardRef(function DatePicker(b,j){const{value:g,defaultValue:C,onValueChange:w,open:M,defaultOpen:P,onOpenChange:V,granularity:B="day",defaultMonth:I,minDate:R,maxDate:E,shouldDisableDate:F,locale:L,weekStartsOn:N,format:T,placeholder:Y,clearable:q=!1,showTodayButton:A=!0,closeOnSelect:G=!0,labels:H,name:J,size:K="md",color:Q="primary",readOnly:U=!1,disabled:W=!1,startIcon:X,...Z}=O(b,["size","density","variant","locale","labelPlacement"]),$=o(H,L),_=S(L),ee=N??p(_),ae=T??k[B],[te,le]=t.useState(C??null),ne=void 0!==g?g:te,[oe,re]=t.useState(P??!1),ie=M??oe,[se,ce]=t.useState(()=>f(u(ne)?ne:I??v()));t.useEffect(()=>{ie&&ce(f(u(ne)?ne:I??v()))},[ie]);const me=e=>{e&&(U||W)||(void 0===M&&re(e),V?.(e))},de=e=>{void 0===g&&le(e),w?.(e)},ue=e=>{const a=y(e,B),t=u(ne)?h(a,ne):a;de(t),ce(f(t)),G&&me(!1)},pe=v(),he=y(pe,B),fe=d(pe,B,R,E)||(F?.(he)??!1),ye="year"===B?$.thisYear:"month"===B?$.thisMonth:$.today,be=A||q,je=t.useMemo(()=>x(c(_,ae),Y),[_,ae,Y]);return e(s,{...Z,size:K,color:Q,readOnly:U,disabled:W,triggerRef:j,startIcon:X??e(r,{}),display:u(ne)?m(ne,_,ae):Y??"",samples:je,empty:!u(ne),clearable:q,onClear:()=>de(null),open:ie,onOpenChange:me,clearLabel:$.clear,hiddenValues:J?[{name:J,value:u(ne)?z[B](ne):""}]:void 0,children:a("div",{className:D("flex flex-col",be&&"gap-1.5"),children:[e(n,{size:K,color:Q,locale:L,weekStartsOn:ee,month:se,onMonthChange:ce,selected:[ne],onSelect:ue,granularity:B,minDate:R,maxDate:E,shouldDisableDate:F,labels:$,autoFocus:!0}),be?a(i,{size:K,children:[q?e(l,{variant:"text",size:K,color:Q,density:"compact",onClick:()=>{de(null),me(!1)},children:$.clear}):null,A?e(l,{variant:"text",size:K,color:Q,density:"compact",disabled:fe,onClick:()=>ue(pe),children:ye}):null]}):null]})})});
1
+ "use client";import{jsx as e,jsxs as a}from"react/jsx-runtime";import*as t from"react";import{Button as l}from"../button/Button.js";import{askOnEveryRender as n,Calendar as o,usePickerLabels as r,usePickerSamples as i}from"../../internal/calendar.js";import{CalendarIcon as s}from"../../internal/icons.js";import{PickerFooter as c,PickerShell as m}from"../../internal/picker.js";import{formatDate as d,isUnitOutside as u,isValidDate as p,localeWeekStart as h,mergeDateAndTime as f,startOfMonth as y,startOfUnit as b,toISODate as j,toISOMonth as g,toISOYear as v,toMonthOf as x,today as D,withPlaceholder as O}from"../../internal/date.js";import{cx as S}from"../../internal/styles.js";import{useStyleDefaults as k}from"../../internal/defaults.js";import{useIntlLocale as z}from"../../internal/media.js";const C={day:{dateStyle:"medium"},month:{year:"numeric",month:"long"},year:{year:"numeric"}},w={day:j,month:g,year:v};export const DatePicker=/*@__PURE__*/t.forwardRef(function DatePicker(j,g){const{value:v,defaultValue:M,onValueChange:P,open:V,defaultOpen:B,onOpenChange:I,granularity:R="day",defaultMonth:E,minDate:F,maxDate:L,shouldDisableDate:N,locale:T,weekStartsOn:Y,format:q,placeholder:A,clearable:G=!1,showTodayButton:H=!0,closeOnSelect:J=!0,labels:K,name:Q,size:U="md",color:W="primary",readOnly:X=!1,disabled:Z=!1,startIcon:$,..._}=k(j,["size","density","variant","locale","labelPlacement"]),ee=r(K,T),ae=z(T),te=Y??h(ae),le=q??C[R],[ne,oe]=t.useState(M??null),re=void 0!==v?v:ne,[ie,se]=t.useState(B??!1),ce=V??ie,[me,de]=t.useState(()=>y(p(re)?re:E??D()));t.useEffect(()=>{ce&&de(x(p(re)?re:E??D()))},[ce]);const ue=e=>{e&&(X||Z)||(void 0===V&&se(e),I?.(e))},pe=e=>{void 0===v&&oe(e),P?.(e)},he=e=>{const a=b(e,R),t=p(re)?f(a,re):a;pe(t),de(x(t)),J&&ue(!1)},fe=D(),ye=b(fe,R),be=u(fe,R,F,L)||(N?.(ye)??!1),je="year"===R?ee.thisYear:"month"===R?ee.thisMonth:ee.today,ge=H||G,ve=i(T,le),xe=t.useMemo(()=>O(ve,A),[ve,A]);return e(m,{..._,size:U,color:W,readOnly:X,disabled:Z,triggerRef:g,startIcon:$??e(s,{}),display:p(re)?d(re,ae,le):A??"",samples:xe,empty:!p(re),clearable:G,onClear:()=>pe(null),open:ce,onOpenChange:ue,clearLabel:ee.clear,hiddenValues:Q?[{name:Q,value:p(re)?w[R](re):""}]:void 0,children:a("div",{className:S("flex flex-col",ge&&"gap-1.5"),children:[e(o,{size:U,color:W,locale:T,weekStartsOn:te,month:me,onMonthChange:de,selected:[re],onSelect:he,granularity:R,minDate:F,maxDate:L,shouldDisableDate:n(N),labels:ee,autoFocus:!0}),ge?a(c,{size:U,children:[G?e(l,{variant:"text",size:U,color:W,density:"compact",onClick:()=>{pe(null),ue(!1)},children:ee.clear}):null,H?e(l,{variant:"text",size:U,color:W,density:"compact",disabled:be,onClick:()=>he(fe),children:je}):null]}):null]})})});
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as l}from"react/jsx-runtime";import*as a from"react";import{Button as n}from"../button/Button.js";import{Calendar as t,usePickerLabels as r}from"../../internal/calendar.js";import{ArrowRightIcon as s,CalendarIcon as o}from"../../internal/icons.js";import{PickerFooter as i,PickerShell as c}from"../../internal/picker.js";import{WidthSizer as u}from"../../internal/sizer.js";import{addMonths as m,compareDay as d,displaySamples as p,formatDate as h,isValidDate as f,localeWeekStart as x,startOfDay as v,startOfMonth as b,toISODate as g,today as y,withPlaceholder as j}from"../../internal/date.js";import{cx as w,gapClasses as N,metaTextClasses as D}from"../../internal/styles.js";import{useStyleDefaults as S}from"../../internal/defaults.js";import{useIntlLocale as C}from"../../internal/media.js";const O={start:null,end:null};export const DateRangePicker=/*@__PURE__*/a.forwardRef(function DateRangePicker(k,z){const{value:P,defaultValue:R,onValueChange:B,open:M,defaultOpen:V,onOpenChange:E,defaultMonth:I,minDate:F,maxDate:L,shouldDisableDate:q,locale:A,weekStartsOn:G,format:H={dateStyle:"medium"},monthCount:J=2,startPlaceholder:K,endPlaceholder:Q,presets:T,clearable:U=!1,closeOnSelect:W=!0,labels:X,name:Y,size:Z="md",color:$="primary",readOnly:_=!1,disabled:ee=!1,startIcon:le,...ae}=S(k,["size","density","variant","locale","labelPlacement"]),ne=r(X,A),te=C(A),re=G??x(te),[se,oe]=a.useState(R??O),ie=void 0!==P?P??O:se,ce=f(ie.start)?ie.start:null,ue=f(ie.end)?ie.end:null,[me,de]=a.useState(V??!1),pe=M??me,[he,fe]=a.useState(null),[xe,ve]=a.useState(null),[be,ge]=a.useState(()=>b(ce??I??y()));a.useEffect(()=>{pe?ge(b(ce??I??y())):(fe(null),ve(null))},[pe]);const ye=e=>{e&&(_||ee)||(void 0===M&&de(e),E?.(e))},je=e=>{void 0===P&&oe(e),B?.(e)},we=he??ce,Ne=null!==he?xe:ue,De=(l,a)=>f(l)?h(l,te,H):e("span",{className:"text-(--neba-muted-fg)",children:a??""}),Se=m(be,1),Ce=2===J,Oe=p(te,H),ke=null!==he?ne.end:null===ce?ne.start:null,ze={size:Z,color:$,locale:A,weekStartsOn:re,selected:[ce,ue,he],rangeStart:we,rangeEnd:Ne,onSelect:e=>{const l=v(e);return null===he||d(l,he)<0?(fe(l),void ve(l)):(fe(null),ve(null),je({start:he,end:l}),void(W&&ye(!1)))},onPreviewChange:e=>{null!==he&&ve(e??he)},minDate:F,maxDate:L,shouldDisableDate:q,showOutsideDays:!1,multiselectable:!0,labels:ne};return e(c,{...ae,size:Z,color:$,readOnly:_,disabled:ee,triggerRef:z,startIcon:le??e(o,{}),display:l("span",{className:"flex min-w-0 items-center gap-1.5",children:[l("span",{className:"flex min-w-0 flex-col",children:[e("span",{className:"truncate",children:De(ce,K)}),e(u,{samples:j(Oe,K)})]}),e("span",{"aria-hidden":"true",className:"flex shrink-0 items-center text-(--neba-muted-fg) rtl:rotate-180",children:e(s,{})}),l("span",{className:"flex min-w-0 flex-col",children:[e("span",{className:"truncate",children:De(ue,Q)}),e(u,{samples:j(Oe,Q)})]})]}),empty:null===ce&&null===ue,clearable:U,onClear:()=>je(O),open:pe,onOpenChange:ye,clearLabel:ne.clear,hiddenValues:Y?[{name:Y,value:ce?g(ce):""},{name:Y,value:ue?g(ue):""}]:void 0,repeats:!0,children:l("div",{className:"flex flex-col gap-1.5",children:[l("div",{className:w("flex items-stretch",N[Z]),children:[T&&T.length>0?e("div",{className:w("flex max-h-[calc(var(--n-cell,2rem)*8)] flex-col overflow-y-auto border-e pe-1.5","[border-color:var(--n-line)]"),children:T.map((l,a)=>e(n,{variant:"text",size:Z,color:$,density:"compact",className:"justify-start whitespace-nowrap",onClick:()=>(e=>{const l="function"==typeof e.value?e.value():e.value;fe(null),ve(null),je(l),f(l.start)&&ge(b(l.start)),W&&ye(!1)})(l),children:l.label},a))}):null,e(t,{...ze,month:be,onMonthChange:ge,showNextButton:!Ce,autoFocus:!0}),Ce?e(t,{...ze,month:Se,onMonthChange:e=>ge(m(e,-1)),showPreviousButton:!1}):null]}),U||null!==ke?l(i,{size:Z,children:[null!==ke?e("span",{className:w("me-auto text-(--neba-muted-fg)",D[Z]),children:ke}):null,U?e(n,{variant:"text",size:Z,color:$,density:"compact",onClick:()=>{fe(null),ve(null),je(O),ye(!1)},children:ne.clear}):null]}):null]})})});
1
+ "use client";import{jsx as e,Fragment as a,jsxs as n}from"react/jsx-runtime";import*as l from"react";import{Button as t}from"../button/Button.js";import{Calendar as r,askOnEveryRender as s,usePickerLabels as o,usePickerSamples as c}from"../../internal/calendar.js";import{ArrowRightIcon as i,CalendarIcon as u}from"../../internal/icons.js";import{PickerFooter as d,PickerShell as m}from"../../internal/picker.js";import{WidthSizer as h}from"../../internal/sizer.js";import{addMonths as p,compareDay as f,formatDate as g,isValidDate as x,localeWeekStart as v,startOfDay as b,startOfMonth as w,toISODate as y,toMonthOf as C,today as j,withPlaceholder as N}from"../../internal/date.js";import{cx as S,gapClasses as D,metaTextClasses as P}from"../../internal/styles.js";import{useStyleDefaults as O}from"../../internal/defaults.js";import{useIntlLocale as k}from"../../internal/media.js";const z={start:null,end:null};function RangeCalendars({anchor:t,start:s,end:o,month:c,onMonthChange:i,twoUp:u,calendarProps:d}){const[m,h]=l.useState(null),f=null!==t&&m?.anchor===t?m.day:t,g=l.useMemo(()=>p(c,1),[c]),x=t??s,v=null!==t?f:o,b=e=>{null!==t&&h(null===e?null:{anchor:t,day:e})};return n(a,{children:[e(r,{...d,rangeStart:x,rangeEnd:v,onPreviewChange:b,month:c,onMonthChange:i,showNextButton:!u,autoFocus:!0}),u?e(r,{...d,rangeStart:x,rangeEnd:v,onPreviewChange:b,month:g,onMonthChange:e=>i(p(e,-1)),showPreviousButton:!1}):null]})}export const DateRangePicker=/*@__PURE__*/l.forwardRef(function DateRangePicker(a,r){const{value:p,defaultValue:M,onValueChange:R,open:B,defaultOpen:E,onOpenChange:V,defaultMonth:F,minDate:I,maxDate:U,shouldDisableDate:L,locale:q,weekStartsOn:A,format:G={dateStyle:"medium"},monthCount:H=2,startPlaceholder:J,endPlaceholder:K,presets:Q,clearable:T=!1,closeOnSelect:W=!0,labels:X,name:Y,size:Z="md",color:$="primary",readOnly:_=!1,disabled:ee=!1,startIcon:ae,...ne}=O(a,["size","density","variant","locale","labelPlacement"]),le=o(X,q),te=k(q),re=A??v(te),[se,oe]=l.useState(M??z),ce=void 0!==p?p??z:se,ie=x(ce.start)?ce.start:null,ue=x(ce.end)?ce.end:null,[de,me]=l.useState(E??!1),he=B??de,[pe,fe]=l.useState(null),[ge,xe]=l.useState(()=>w(ie??F??j()));l.useEffect(()=>{he?xe(C(ie??F??j())):fe(null)},[he]);const ve=e=>{e&&(_||ee)||(void 0===B&&me(e),V?.(e))},be=e=>{void 0===p&&oe(e),R?.(e)},we=(a,n)=>x(a)?g(a,te,G):e("span",{className:"text-(--neba-muted-fg)",children:n??""}),ye=2===H,Ce=c(q,G),je=null!==pe?le.end:null===ie?le.start:null,Ne={size:Z,color:$,locale:q,weekStartsOn:re,selected:[ie,ue,pe],onSelect:e=>{const a=b(e);null!==pe?f(a,pe)<0?fe(a):(fe(null),be({start:pe,end:a}),W&&ve(!1)):fe(a)},minDate:I,maxDate:U,shouldDisableDate:s(L),showOutsideDays:!1,multiselectable:!0,labels:le};return e(m,{...ne,size:Z,color:$,readOnly:_,disabled:ee,triggerRef:r,startIcon:ae??e(u,{}),display:n("span",{className:"flex min-w-0 items-center gap-1.5",children:[n("span",{className:"flex min-w-0 flex-col",children:[e("span",{className:"truncate",children:we(ie,J)}),e(h,{samples:N(Ce,J)})]}),e("span",{"aria-hidden":"true",className:"flex shrink-0 items-center text-(--neba-muted-fg) rtl:rotate-180",children:e(i,{})}),n("span",{className:"flex min-w-0 flex-col",children:[e("span",{className:"truncate",children:we(ue,K)}),e(h,{samples:N(Ce,K)})]})]}),empty:null===ie&&null===ue,clearable:T,onClear:()=>be(z),open:he,onOpenChange:ve,clearLabel:le.clear,hiddenValues:Y?[{name:Y,value:ie?y(ie):""},{name:Y,value:ue?y(ue):""}]:void 0,repeats:!0,children:n("div",{className:"flex flex-col gap-1.5",children:[n("div",{className:S("flex items-stretch",D[Z]),children:[Q&&Q.length>0?e("div",{className:S("flex max-h-[calc(var(--n-cell,2rem)*8)] flex-col overflow-y-auto border-e pe-1.5","[border-color:var(--n-line)]"),children:Q.map((a,n)=>e(t,{variant:"text",size:Z,color:$,density:"compact",className:"justify-start whitespace-nowrap",onClick:()=>(e=>{const a="function"==typeof e.value?e.value():e.value;fe(null),be(a),x(a.start)&&xe(C(a.start)),W&&ve(!1)})(a),children:a.label},n))}):null,e(RangeCalendars,{anchor:pe,start:ie,end:ue,month:ge,onMonthChange:xe,twoUp:ye,calendarProps:Ne})]}),T||null!==je?n(d,{size:Z,children:[null!==je?e("span",{className:S("me-auto text-(--neba-muted-fg)",P[Z]),children:je}):null,T?e(t,{variant:"text",size:Z,color:$,density:"compact",onClick:()=>{fe(null),be(z),ve(!1)},children:le.clear}):null]}):null]})})});
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as l from"react";import{Button as a}from"../button/Button.js";import{Calendar as n,TimeGrid as o,usePickerLabels as s}from"../../internal/calendar.js";import{CalendarIcon as i}from"../../internal/icons.js";import{PickerDivider as r,PickerFooter as c,PickerShell as d}from"../../internal/picker.js";import{clampDate as m,displaySamples as u,formatDate as p,isDayOutside as h,isHour12 as f,isValidDate as S,localeWeekStart as b,mergeDateAndTime as y,startOfDay as D,startOfMonth as g,timeUnitRange as v,toISODateTime as j,today as x,withPlaceholder as C,withTime as k}from"../../internal/date.js";import{cx as w,gapClasses as z}from"../../internal/styles.js";import{useStyleDefaults as O}from"../../internal/defaults.js";import{useIntlLocale as T}from"../../internal/media.js";export const DateTimePicker=/*@__PURE__*/l.forwardRef(function DateTimePicker(N,P){const{value:V,defaultValue:B,onValueChange:I,open:M,defaultOpen:R,onOpenChange:E,defaultMonth:F,minDate:L,maxDate:q,shouldDisableDate:A,shouldDisableTime:G,locale:H,weekStartsOn:J,format:K={dateStyle:"medium",timeStyle:"short"},hour12:Q,showSeconds:U=!1,hourStep:W=1,minuteStep:X=1,secondStep:Y=1,placeholder:Z,clearable:$=!1,showNowButton:_=!0,closeOnSelect:ee=!1,labels:te,name:le,size:ae="md",color:ne="primary",density:oe="default",readOnly:se=!1,disabled:ie=!1,startIcon:re,...ce}=O(N,["size","density","variant","locale","labelPlacement"]),de=s(te,H),me=T(H),ue=J??b(me),pe=Q??f(me),[he,fe]=l.useState(B??null),Se=void 0!==V?V:he,[be,ye]=l.useState(R??!1),De=M??be,[ge,ve]=l.useState(()=>g(S(Se)?Se:F??x()));l.useEffect(()=>{De&&ve(g(S(Se)?Se:F??x()))},[De]);const je=e=>{e&&(se||ie)||(void 0===M&&ye(e),E?.(e))},xe=e=>{const t=null===e?null:m(e,L,q);void 0===V&&fe(t),I?.(t)},Ce=l.useCallback((e,t)=>{const[l,a]=v(t,e);return!!(S(L)&&a.getTime()<L.getTime())||(!!(S(q)&&l.getTime()>q.getTime())||(G?.(e,t)??!1))},[L,q,G]),ke=new Date,we=k(ke,{seconds:U?ke.getSeconds():0}),ze=h(we,L,q)||(A?.(we)??!1)||Ce(we,"second"),Oe=C(u(me,K),Z);return e(d,{...ce,size:ae,color:ne,density:oe,readOnly:se,disabled:ie,triggerRef:P,startIcon:re??e(i,{}),display:S(Se)?p(Se,me,K):Z??"",samples:Oe,empty:!S(Se),clearable:$,onClear:()=>xe(null),open:De,onOpenChange:je,clearLabel:de.clear,hiddenValues:le?[{name:le,value:S(Se)?j(Se,U):""}]:void 0,children:t("div",{className:"flex flex-col gap-1.5",children:[t("div",{className:w("flex items-stretch",z[ae]),children:[e(n,{size:ae,color:ne,locale:H,weekStartsOn:ue,month:ge,onMonthChange:ve,selected:[Se],onSelect:e=>{const t=S(Se)?y(e,Se):D(e);xe(t),ve(g(t)),ee&&je(!1)},minDate:L,maxDate:q,shouldDisableDate:A,labels:de,autoFocus:!0}),e(r,{}),e(o,{size:ae,density:oe,locale:H,value:S(Se)?Se:null,referenceDate:S(Se)?Se:x(),onChange:xe,hour12:pe,showSeconds:U,hourStep:W,minuteStep:X,secondStep:Y,shouldDisableTime:Ce,labels:de})]}),t(c,{size:ae,children:[$?e(a,{variant:"text",size:ae,color:ne,density:"compact",onClick:()=>{xe(null),je(!1)},children:de.clear}):null,_?e(a,{variant:"text",size:ae,color:ne,density:"compact",disabled:ze,onClick:()=>{xe(we),ve(g(we))},children:de.now}):null,e(a,{variant:"solid",size:ae,color:ne,density:"compact",onClick:()=>je(!1),children:de.done})]})]})})});
1
+ "use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as l from"react";import{Button as a}from"../button/Button.js";import{Calendar as n,TimeGrid as o,askOnEveryRender as s,usePickerLabels as i,usePickerSamples as r}from"../../internal/calendar.js";import{CalendarIcon as c}from"../../internal/icons.js";import{PickerDivider as d,PickerFooter as m,PickerShell as u}from"../../internal/picker.js";import{clampDate as p,formatDate as h,isDayOutside as f,isHour12 as S,isValidDate as b,localeWeekStart as y,mergeDateAndTime as D,startOfDay as g,startOfMonth as v,timeUnitRange as j,toISODateTime as x,toMonthOf as C,today as k,withPlaceholder as w,withTime as z}from"../../internal/date.js";import{cx as O,gapClasses as T}from"../../internal/styles.js";import{useStyleDefaults as N}from"../../internal/defaults.js";import{useIntlLocale as P}from"../../internal/media.js";export const DateTimePicker=/*@__PURE__*/l.forwardRef(function DateTimePicker(V,B){const{value:I,defaultValue:M,onValueChange:R,open:E,defaultOpen:F,onOpenChange:L,defaultMonth:q,minDate:A,maxDate:G,shouldDisableDate:H,shouldDisableTime:J,locale:K,weekStartsOn:Q,format:U={dateStyle:"medium",timeStyle:"short"},hour12:W,showSeconds:X=!1,hourStep:Y=1,minuteStep:Z=1,secondStep:$=1,placeholder:_,clearable:ee=!1,showNowButton:te=!0,closeOnSelect:le=!1,labels:ae,name:ne,size:oe="md",color:se="primary",density:ie="default",readOnly:re=!1,disabled:ce=!1,startIcon:de,...me}=N(V,["size","density","variant","locale","labelPlacement"]),ue=i(ae,K),pe=P(K),he=Q??y(pe),fe=W??S(pe),[Se,be]=l.useState(M??null),ye=void 0!==I?I:Se,[De,ge]=l.useState(F??!1),ve=E??De,[je,xe]=l.useState(()=>v(b(ye)?ye:q??k()));l.useEffect(()=>{ve&&xe(C(b(ye)?ye:q??k()))},[ve]);const Ce=e=>{e&&(re||ce)||(void 0===E&&ge(e),L?.(e))},ke=e=>{const t=null===e?null:p(e,A,G);void 0===I&&be(t),R?.(t)},we=l.useCallback((e,t)=>{const[l,a]=j(t,e);return!!(b(A)&&a.getTime()<A.getTime())||(!!(b(G)&&l.getTime()>G.getTime())||(J?.(e,t)??!1))},[A,G,J]),ze=new Date,Oe=z(ze,{seconds:X?ze.getSeconds():0}),Te=f(Oe,A,G)||(H?.(Oe)??!1)||we(Oe,"second"),Ne=w(r(K,U),_);return e(u,{...me,size:oe,color:se,density:ie,readOnly:re,disabled:ce,triggerRef:B,startIcon:de??e(c,{}),display:b(ye)?h(ye,pe,U):_??"",samples:Ne,empty:!b(ye),clearable:ee,onClear:()=>ke(null),open:ve,onOpenChange:Ce,clearLabel:ue.clear,hiddenValues:ne?[{name:ne,value:b(ye)?x(ye,X):""}]:void 0,children:t("div",{className:"flex flex-col gap-1.5",children:[t("div",{className:O("flex items-stretch",T[oe]),children:[e(n,{size:oe,color:se,locale:K,weekStartsOn:he,month:je,onMonthChange:xe,selected:[ye],onSelect:e=>{const t=b(ye)?D(e,ye):g(e);ke(t),xe(C(t)),le&&Ce(!1)},minDate:A,maxDate:G,shouldDisableDate:s(H),labels:ue,autoFocus:!0}),e(d,{}),e(o,{size:oe,density:ie,locale:K,value:b(ye)?ye:null,referenceDate:b(ye)?ye:k(),onChange:ke,hour12:fe,showSeconds:X,hourStep:Y,minuteStep:Z,secondStep:$,shouldDisableTime:we,labels:ue})]}),t(m,{size:oe,children:[ee?e(a,{variant:"text",size:oe,color:se,density:"compact",onClick:()=>{ke(null),Ce(!1)},children:ue.clear}):null,te?e(a,{variant:"text",size:oe,color:se,density:"compact",disabled:Te,onClick:()=>{ke(Oe),xe(C(Oe))},children:ue.now}):null,e(a,{variant:"solid",size:oe,color:se,density:"compact",onClick:()=>Ce(!1),children:ue.done})]})]})})});