neba 1.18.1 → 1.19.1
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.
- package/dist/a2ui/adapter-catalog.json +1 -1
- package/dist/a2ui/catalog.json +3 -3
- package/dist/a2ui/index.d.ts +37 -16
- package/dist/a2ui/index.js +1 -1
- package/dist/a2ui/schema.d.ts +7 -0
- package/dist/a2ui/schema.js +1 -1
- package/dist/components/accordion/Accordion.js +1 -1
- package/dist/components/agent-steps/AgentSteps.js +1 -1
- package/dist/components/alert/Alert.js +1 -1
- package/dist/components/anchor/Anchor.js +1 -1
- package/dist/components/animate-counter/AnimateCounter.js +1 -1
- package/dist/components/animate-headline/AnimateHeadline.js +1 -1
- package/dist/components/animate-lighting/AnimateLighting.js +1 -1
- package/dist/components/animate-marquee/AnimateMarquee.js +1 -1
- package/dist/components/animate-scramble/AnimateScramble.js +1 -1
- package/dist/components/animate-typing/AnimateTyping.js +1 -1
- package/dist/components/app-logo/AppLogo.js +1 -1
- package/dist/components/approval/Approval.js +1 -1
- package/dist/components/aspect-ratio/AspectRatio.js +1 -1
- package/dist/components/avatar/Avatar.js +1 -1
- package/dist/components/badge/Badge.js +1 -1
- package/dist/components/bar-chart/BarChart.js +1 -1
- package/dist/components/blockquote/Blockquote.js +1 -1
- package/dist/components/bottom-navigation/BottomNavigation.js +1 -1
- package/dist/components/breadcrumb/Breadcrumb.js +1 -1
- package/dist/components/button/Button.js +1 -1
- package/dist/components/button-group/ButtonGroup.js +1 -1
- package/dist/components/calendar/Calendar.js +1 -1
- package/dist/components/carousel/Carousel.js +1 -1
- package/dist/components/chat-bubble/ChatBubble.js +1 -1
- package/dist/components/checkbox/Checkbox.js +1 -1
- package/dist/components/checkbox/index.d.ts +1 -1
- package/dist/components/checkbox-group/index.d.ts +1 -1
- package/dist/components/chip/Chip.d.ts +32 -3
- package/dist/components/chip/Chip.js +1 -1
- package/dist/components/code-block/CodeBlock.js +1 -1
- package/dist/components/collapsible/Collapsible.js +1 -1
- package/dist/components/color-picker/ColorPicker.js +1 -1
- package/dist/components/combobox/Combobox.d.ts +11 -0
- package/dist/components/combobox/Combobox.js +1 -1
- package/dist/components/combobox/index.d.ts +1 -1
- package/dist/components/command-palette/CommandPalette.d.ts +21 -5
- package/dist/components/command-palette/CommandPalette.js +1 -1
- package/dist/components/command-palette/CommandPaletteSheet.d.ts +27 -0
- package/dist/components/command-palette/CommandPaletteSheet.js +1 -0
- package/dist/components/command-palette/index.d.ts +1 -1
- package/dist/components/confirm/Confirm.d.ts +7 -5
- package/dist/components/confirm/Confirm.js +1 -1
- package/dist/components/data-list/DataList.js +1 -1
- package/dist/components/data-table/DataTable.js +1 -1
- package/dist/components/data-table/RowsPerPage.d.ts +43 -0
- package/dist/components/data-table/RowsPerPage.js +1 -0
- package/dist/components/date-picker/DatePicker.js +1 -1
- package/dist/components/date-range-picker/DateRangePicker.js +1 -1
- package/dist/components/date-time-picker/DateTimePicker.js +1 -1
- package/dist/components/dialog/Dialog.js +1 -1
- package/dist/components/dialog/index.d.ts +1 -1
- package/dist/components/drawer/Drawer.d.ts +1 -1
- package/dist/components/drawer/Drawer.js +1 -1
- package/dist/components/empty/Empty.js +1 -1
- package/dist/components/file-picker/FilePicker.js +1 -1
- package/dist/components/floating-action-button/FloatingActionButton.js +1 -1
- package/dist/components/floating-action-button/index.d.ts +1 -0
- package/dist/components/floating-bottom-navigation/FloatingBottomNavigation.js +1 -1
- package/dist/components/footer/Footer.js +1 -1
- package/dist/components/gallery/Gallery.js +1 -1
- package/dist/components/gauge-chart/GaugeChart.js +1 -1
- package/dist/components/header/Header.js +1 -1
- package/dist/components/heatmap-chart/HeatmapChart.js +1 -1
- package/dist/components/highlight/Highlight.js +1 -1
- package/dist/components/hover-card/HoverCard.js +1 -1
- package/dist/components/how-to-steps/HowToSteps.d.ts +3 -0
- package/dist/components/how-to-steps/HowToSteps.js +1 -1
- package/dist/components/image/Image.js +1 -1
- package/dist/components/inline-citation/InlineCitation.d.ts +24 -0
- package/dist/components/inline-citation/InlineCitation.js +1 -1
- package/dist/components/list/List.js +1 -1
- package/dist/components/menu/Menu.js +1 -1
- package/dist/components/menubar/Menubar.js +1 -1
- package/dist/components/meter/Meter.js +1 -1
- package/dist/components/mockup/Mockup.js +1 -1
- package/dist/components/navigation-menu/NavigationMenu.d.ts +2 -1
- package/dist/components/navigation-menu/NavigationMenu.js +1 -1
- package/dist/components/number-field/NumberField.js +1 -1
- package/dist/components/number-field/index.d.ts +1 -1
- package/dist/components/overlay/Overlay.js +1 -1
- package/dist/components/page-layout/PageLayout.js +1 -1
- package/dist/components/pagination/Pagination.js +1 -1
- package/dist/components/panes/Panes.js +1 -1
- package/dist/components/pie-chart/PieChart.js +1 -1
- package/dist/components/pill/Pill.js +1 -1
- package/dist/components/popover/Popover.js +1 -1
- package/dist/components/progress-box/ProgressBox.js +1 -1
- package/dist/components/progress-circular/ProgressCircular.js +1 -1
- package/dist/components/progress-linear/ProgressLinear.js +1 -1
- package/dist/components/prompt-input/PromptInput.js +1 -1
- package/dist/components/provider/NebaProvider.js +1 -1
- package/dist/components/radio-group/RadioGroup.js +1 -1
- package/dist/components/radio-group/index.d.ts +1 -1
- package/dist/components/rating/Rating.js +1 -1
- package/dist/components/reasoning/Reasoning.js +1 -1
- package/dist/components/scatter-chart/ScatterChart.js +1 -1
- package/dist/components/scroll-area/ScrollArea.js +1 -1
- package/dist/components/scroll-zone/ScrollZone.js +1 -1
- package/dist/components/segmented-button/SegmentedButton.js +1 -1
- package/dist/components/select/Select.d.ts +12 -0
- package/dist/components/select/Select.js +1 -1
- package/dist/components/select/index.d.ts +1 -1
- package/dist/components/shortcut/Shortcut.js +1 -1
- package/dist/components/sidebar/Sidebar.js +1 -1
- package/dist/components/sidebar/SidebarTrigger.js +1 -1
- package/dist/components/skeleton/Skeleton.js +1 -1
- package/dist/components/slider/Slider.js +1 -1
- package/dist/components/slider/index.d.ts +1 -1
- package/dist/components/sources/Sources.js +1 -1
- package/dist/components/sparkline/Sparkline.d.ts +7 -0
- package/dist/components/sparkline/Sparkline.js +1 -1
- package/dist/components/spoiler/Spoiler.js +1 -1
- package/dist/components/statistic/Statistic.js +1 -1
- package/dist/components/streaming-text/StreamingText.d.ts +10 -6
- package/dist/components/streaming-text/StreamingText.js +1 -1
- package/dist/components/switch/Switch.js +1 -1
- package/dist/components/switch/index.d.ts +1 -1
- package/dist/components/table/Table.js +1 -1
- package/dist/components/table/index.d.ts +1 -1
- package/dist/components/tabs/Tabs.js +1 -1
- package/dist/components/text-field/TextField.js +1 -1
- package/dist/components/text-field/index.d.ts +1 -1
- package/dist/components/text-link/TextLink.js +1 -1
- package/dist/components/time-picker/TimePicker.js +1 -1
- package/dist/components/timeline-chart/TimelineChart.js +1 -1
- package/dist/components/toast/Toast.d.ts +38 -5
- package/dist/components/toast/Toast.js +1 -1
- package/dist/components/toast/index.d.ts +2 -2
- package/dist/components/toast/index.js +1 -1
- package/dist/components/toggle/Toggle.js +1 -1
- package/dist/components/toggle-group/ToggleGroup.js +1 -1
- package/dist/components/tool-call/ToolCall.js +1 -1
- package/dist/components/toolbar/Toolbar.js +1 -1
- package/dist/components/tooltip/Tooltip.js +1 -1
- package/dist/components/tour/Tour.js +1 -1
- package/dist/components/tour/index.d.ts +1 -1
- package/dist/components/transfer/Transfer.d.ts +7 -0
- package/dist/components/transfer/Transfer.js +1 -1
- package/dist/components/tree-select/TreeSelect.js +1 -1
- package/dist/components/tree-view/TreeView.js +1 -1
- package/dist/components/window-pane/WindowPane.js +1 -1
- package/dist/internal/animate.d.ts +34 -2
- package/dist/internal/animate.js +1 -1
- package/dist/internal/cache.d.ts +7 -1
- package/dist/internal/cache.js +1 -1
- package/dist/internal/calendar.d.ts +40 -1
- package/dist/internal/calendar.js +1 -1
- package/dist/internal/chart-frame.d.ts +86 -8
- package/dist/internal/chart-frame.js +1 -1
- package/dist/internal/chart-line.js +1 -1
- package/dist/internal/chart.d.ts +13 -0
- package/dist/internal/chart.js +1 -1
- package/dist/internal/data-table.d.ts +7 -1
- package/dist/internal/data-table.js +1 -1
- package/dist/internal/date.d.ts +10 -0
- package/dist/internal/date.js +1 -1
- package/dist/internal/idle.d.ts +10 -0
- package/dist/internal/idle.js +1 -0
- package/dist/internal/link.d.ts +4 -3
- package/dist/internal/media.js +1 -1
- package/dist/internal/observe.d.ts +4 -0
- package/dist/internal/observe.js +1 -1
- package/dist/internal/page-layout.d.ts +30 -2
- package/dist/internal/page-layout.js +1 -1
- package/dist/internal/picker.js +1 -1
- package/dist/internal/progress.d.ts +17 -0
- package/dist/internal/progress.js +1 -1
- package/dist/internal/refs.d.ts +18 -0
- package/dist/internal/refs.js +1 -0
- package/dist/internal/run.d.ts +34 -19
- package/dist/internal/run.js +1 -1
- package/dist/internal/sizer.d.ts +9 -4
- package/dist/internal/sizer.js +1 -1
- package/dist/internal/styles.d.ts +14 -0
- package/dist/internal/styles.js +1 -1
- package/dist/internal/tile.d.ts +34 -0
- package/dist/internal/tile.js +1 -0
- package/dist/internal/wheel.d.ts +24 -1
- package/dist/internal/wheel.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind.css +366 -61
- package/dist/types.d.ts +4 -2
- package/package.json +19 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as a}from"react/jsx-runtime";import*as r from"react";import{PickerShell as l}from"../../internal/picker.js";import{CheckIcon as n}from"../../internal/icons.js";import{colorMessages as t,fillMessage as o,useMessages as s}from"../../internal/i18n.js";import{numberFormatter as i}from"../../internal/format.js";import{checkerBackground as d,clamp as c,cssColor as u,defaultSwatches as h,formatColor as f,parseColor as p,readableInk as m}from"../../internal/color.js";import{controlTextClasses as b,cx as v,focusRingClasses as g,metaTextClasses as x,radiusClasses as w,stackGapClasses as y,surfaceSlots as k,transitionClasses as C}from"../../internal/styles.js";import{useStyleDefaults as N}from"../../internal/defaults.js";import{useIntlLocale as
|
|
1
|
+
"use client";import{jsx as e,jsxs as a}from"react/jsx-runtime";import*as r from"react";import{PickerShell as l}from"../../internal/picker.js";import{CheckIcon as n}from"../../internal/icons.js";import{colorMessages as t,fillMessage as o,useMessages as s}from"../../internal/i18n.js";import{numberFormatter as i}from"../../internal/format.js";import{checkerBackground as d,clamp as c,cssColor as u,defaultSwatches as h,formatColor as f,parseColor as p,readableInk as m}from"../../internal/color.js";import{controlTextClasses as b,cx as v,focusRingClasses as g,metaTextClasses as x,radiusClasses as w,stackGapClasses as y,surfaceSlots as k,transitionClasses as C}from"../../internal/styles.js";import{useStyleDefaults as N}from"../../internal/defaults.js";import{useIntlLocale as _}from"../../internal/media.js";import{useFieldsetDisabled as P}from"../../internal/fieldset.js";const j={xs:"w-40",sm:"w-44",md:"w-52",lg:"w-60",xl:"w-72"},I={xs:"h-24",sm:"h-28",md:"h-32",lg:"h-40",xl:"h-48"},D={xs:"h-2.5",sm:"h-3",md:"h-3.5",lg:"h-4",xl:"h-5"},z={xs:"gap-1.5",sm:"gap-2",md:"gap-2.5",lg:"gap-3",xl:"gap-3.5"},A={xs:10,sm:12,md:14,lg:16,xl:18},T="relative overflow-hidden border [border-color:var(--neba-border)] [box-shadow:var(--neba-plate-glass)]",L="pointer-events-none absolute rounded-full border-2 border-white [box-shadow:0_0_0_1px_rgba(0,0,0,0.35),0_1px_3px_rgba(0,0,0,0.4)]";function O(e){const a=e.currentTarget.getBoundingClientRect();return{x:0===a.width?0:c((e.clientX-a.left)/a.width,0,1),y:0===a.height?0:c((e.clientY-a.top)/a.height,0,1)}}function ColorPanel({hsv:l,alphaValue:t,onChange:s,text:h,onTextChange:b,withAlpha:y,swatches:k,editable:N,size:P,inert:V,disabled:q,labels:M,locale:S}){const B=_(S),E=A[P],K=i(B,{style:"percent",maximumFractionDigits:0}),R=i(B,{style:"unit",unit:"degree",unitDisplay:"long",maximumFractionDigits:0}),U=-E/2,F=u({h:l.h,s:100,v:100}),$=u(l),H=r.useMemo(()=>k?k.map(e=>{const a=p(e);return{swatch:e,parsed:a,hex:a?f(a.hsv,a.alpha,"hex"):null}}):[],[k]),W=H.length>0?f(l,t,"hex"):null,X=e=>({onPointerDown:a=>{V||(a.currentTarget.setPointerCapture(a.pointerId),e(a))},onPointerMove:a=>{!V&&a.currentTarget.hasPointerCapture(a.pointerId)&&e(a)}}),Y=(e,a,r,l,n,t,o)=>({role:"slider",tabIndex:V?-1:0,"aria-label":e,"aria-valuemin":0,"aria-valuemax":l,"aria-valuenow":Math.round(r),"aria-valuetext":a,"aria-orientation":"horizontal","aria-disabled":V||void 0,onKeyDown:e=>{const a=function(e,a,r,l,n){const t=(e.shiftKey?10:1)*l;let o;switch(e.key){case"ArrowRight":case"ArrowUp":o=a+t;break;case"ArrowLeft":case"ArrowDown":o=a-t;break;case"PageUp":o=a+10*l;break;case"PageDown":o=a-10*l;break;case"Home":return 0;case"End":return r;default:return null}return n?(o%r+r)%r:c(o,0,r)}(e,r,l,n,t);V||null===a||(e.preventDefault(),o(a))}});return a("div",{className:v("flex flex-col",j[P],z[P]),children:[e("div",{...X(e=>{const{x:a,y:r}=O(e);s({hsv:{h:l.h,s:100*a,v:100*(1-r)},alpha:t})}),role:"slider",tabIndex:V?-1:0,"aria-label":M.area,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(l.s),"aria-valuetext":o(M.areaValue,{saturation:K.format(l.s/100),brightness:K.format(l.v/100)}),"aria-disabled":V||void 0,onKeyDown:e=>{const a=function(e,a,r){const l=e.shiftKey?10:1;switch(e.key){case"ArrowLeft":return{s:a-l,v:r};case"ArrowRight":return{s:a+l,v:r};case"ArrowUp":return{s:a,v:r+l};case"ArrowDown":return{s:a,v:r-l};case"PageUp":return{s:a,v:r+10};case"PageDown":return{s:a,v:r-10};case"Home":return{s:0,v:r};case"End":return{s:100,v:r};default:return null}}(e,l.s,l.v);!V&&a&&(e.preventDefault(),s({hsv:{h:l.h,s:c(a.s,0,100),v:c(a.v,0,100)},alpha:t}))},className:v(T,I[P],w[P],g,V?"cursor-default":"cursor-crosshair touch-none"),style:{backgroundColor:F,backgroundImage:"linear-gradient(to top, #000000, rgba(0, 0, 0, 0)), linear-gradient(to right, #ffffff, rgba(255, 255, 255, 0))"},children:e("span",{className:L,style:{width:E,height:E,left:`${l.s}%`,top:100-l.v+"%",marginLeft:U,marginTop:U,backgroundColor:$}})}),e("div",{...X(e=>s({hsv:{...l,h:360*O(e).x},alpha:t})),...Y(M.hue,R.format(l.h),l.h,360,2,!0,e=>s({hsv:{...l,h:e},alpha:t})),className:v(T,D[P],"rounded-full",g,V?"cursor-default":"cursor-pointer touch-none"),style:{backgroundImage:"linear-gradient(to right, #ff0000 0%, #ffff00 16.66%, #00ff00 33.33%, #00ffff 50%, #0000ff 66.66%, #ff00ff 83.33%, #ff0000 100%)"},children:e("span",{className:L,style:{width:E,height:E,left:l.h/360*100+"%",top:"50%",marginLeft:U,marginTop:U,backgroundColor:F}})}),y?a("div",{...X(e=>s({hsv:l,alpha:O(e).x})),...Y(M.alpha,K.format(t),100*t,100,1,!1,e=>s({hsv:l,alpha:e/100})),className:v(T,D[P],"rounded-full",g,V?"cursor-default":"cursor-pointer touch-none"),style:d,children:[e("span",{"aria-hidden":"true",className:"absolute inset-0",style:{backgroundImage:`linear-gradient(to right, ${u(l,0)}, ${$})`}}),e("span",{className:L,style:{width:E,height:E,left:100*t+"%",top:"50%",marginLeft:U,marginTop:U,backgroundColor:u(l,t)}})]}):null,N?a("div",{className:v("flex items-center",z[P]),children:[e("span",{"aria-hidden":"true",className:v("shrink-0 rounded-full border","[border-color:var(--neba-border)]"),style:{width:E+6,height:E+6,...d},children:e("span",{className:"block size-full rounded-full",style:{backgroundColor:u(l,t)}})}),e("input",{type:"text",value:h,readOnly:V,disabled:q,spellCheck:!1,autoComplete:"off","aria-label":M.value,onChange:e=>b(e.target.value),className:v("neba-input min-w-0 flex-1 border bg-transparent px-1.5 py-1 font-mono lowercase","[border-color:var(--neba-border)]",w.xs,x[P],"text-(--neba-fg)",C,"focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-1")})]}):null,H.length>0?e("div",{role:"group","aria-label":M.swatches,className:"grid grid-cols-8 gap-1",children:H.map(({swatch:a,parsed:r,hex:l})=>{const t=null!==r&&l===W;return e("button",{type:"button",disabled:V,"aria-label":a,"aria-pressed":t,onClick:()=>{r&&s(r)},className:v("flex aspect-square items-center justify-center rounded-full border","[border-color:color-mix(in_oklab,var(--neba-fg)_18%,transparent)]","[transition:box-shadow_var(--neba-duration)_var(--neba-ease)]",g,V?"cursor-default":"cursor-pointer hover:[box-shadow:var(--neba-shadow-1)]","[&_svg]:size-3"),style:{backgroundColor:a},children:t&&r?e("span",{style:{color:m(r.hsv)},children:e(n,{})}):null},a)})}):null]})}function V(e,a){return"hex"===e?[a?"#ffffffff":"#ffffff"]:"rgb"===e?[a?"rgba(255, 255, 255, 0.55)":"rgb(255, 255, 255)"]:[a?"hsla(360, 100%, 100%, 0.55)":"hsl(360, 100%, 100%)"]}const q={h:217,s:87,v:82};export const ColorPicker=/*@__PURE__*/r.forwardRef(function ColorPicker(n,o){const{value:i,defaultValue:c="#1a58d1",onValueChange:m,format:g="hex",alpha:w=!1,swatches:C=h,inline:_=!1,editable:j=!0,label:I,labelPlacement:D,description:z,error:A,invalid:T,required:L=!1,disabled:O,readOnly:M=!1,fullWidth:S=!1,clearable:B=!1,name:E,open:K,defaultOpen:R=!1,onOpenChange:U,locale:F,labels:$,variant:H="outline",size:W="md",color:X="primary",density:Y="default",elevation:G=0,className:J,style:Q,...Z}=N(n,["size","density","variant","locale","labelPlacement"]),ee=P(O),ae=s(t,F),re=r.useMemo(()=>({...ae,...$}),[ae,$]),[le,ne]=r.useState(c),te=i??le,[oe,se]=r.useState(R),ie=K??oe,[de,ce]=r.useState(()=>p(te)??{hsv:q,alpha:1}),[ue,he]=r.useState(()=>te||""),fe=f(de.hsv,w?de.alpha:1,g),pe=""===te;r.useEffect(()=>{const e=p(te);e?f(e.hsv,w?e.alpha:1,g)!==fe&&(he(te),ce(e)):he(te)},[te,fe,w,g]);const me=(e,a)=>{ce(e);const r=f(e.hsv,w?e.alpha:1,g);he(a??r),void 0===i&&ne(r),m?.(r)},be=ee||M,ve=r.useId(),ge=r.useId(),xe=r.useId(),we=e(ColorPanel,{hsv:de.hsv,alphaValue:de.alpha,onChange:me,text:ue,onTextChange:e=>{he(e);const a=p(e);a&&me(a,e)},withAlpha:w,swatches:C,editable:j,size:W,inert:be,disabled:Boolean(ee),labels:re,locale:F}),ye=E?e("input",{type:"hidden",name:E,value:pe?"":fe,disabled:ee}):null,ke=L&&!be?e("input",{"aria-hidden":"true",tabIndex:-1,required:!0,value:pe?"":"chosen",onChange:()=>{},onInvalid:e=>e.currentTarget.parentElement?.querySelector('[role="slider"]')?.focus(),className:"pointer-events-none absolute start-0 bottom-0 size-px overflow-hidden opacity-0 [clip-path:inset(50%)]"}):null;if(_){const r=T??Boolean(A)?"danger":X,l=[z?ge:"",A?xe:""].filter(Boolean).join(" ");return a("div",{ref:o,role:"group","aria-labelledby":I?ve:void 0,"aria-describedby":l||void 0,className:v("relative flex flex-col",y[W],J),style:{...k(r,G),...Q},...Z,children:[I?e("span",{id:ve,className:v(x[W],"font-medium",ee?"text-(--neba-disabled-fg)":"text-(--neba-fg)"),children:I}):null,we,z?e("span",{id:ge,className:v(x[W],"text-(--neba-muted-fg)"),children:z}):null,A?e("span",{id:xe,className:v(x[W],"text-(--n-accent)"),children:A}):null,ye,ke]})}return e("div",{ref:o,className:S?"w-full":"inline-block",...Z,children:e(l,{variant:H,size:W,color:X,density:Y,elevation:G,style:Q,label:I,labelPlacement:D,description:z,error:A,invalid:T,required:L,disabled:ee,readOnly:M,fullWidth:S,className:J,startIcon:e("span",{"aria-hidden":"true",className:v("block size-[1.15em] shrink-0 rounded-full border","[border-color:color-mix(in_oklab,var(--neba-fg)_18%,transparent)]"),style:d,children:e("span",{className:"block size-full rounded-full",style:{backgroundColor:pe?"transparent":u(de.hsv,w?de.alpha:1)}})}),display:pe?re.empty:fe,samples:V(g,w),empty:pe,clearable:B,onClear:()=>{void 0===i&&ne(""),he(""),m?.("")},open:ie,onOpenChange:e=>{void 0===K&&se(e),U?.(e)},clearLabel:re.clear,initialFocus:!0,hiddenValues:E?[{name:E,value:pe?"":fe}]:void 0,children:e("div",{className:b[W],children:we})})})});
|
|
@@ -144,6 +144,17 @@ export interface ComboboxProps<Multiple extends boolean | undefined = false> ext
|
|
|
144
144
|
required?: boolean;
|
|
145
145
|
/** Identifies the field when a form is submitted. */
|
|
146
146
|
name?: string;
|
|
147
|
+
/**
|
|
148
|
+
* What the browser may fill the field in with, such as `country` or
|
|
149
|
+
* `address-level2`. It is written on the hidden input that submits the
|
|
150
|
+
* value, and an autofilled value that matches an option's value or label
|
|
151
|
+
* chooses that option. A `multiple` combobox ignores autofill, since a
|
|
152
|
+
* browser fills in one value.
|
|
153
|
+
*
|
|
154
|
+
* Not the `<input>` the reader types into: that one stays `off`, so the
|
|
155
|
+
* browser's own list of past entries does not open over the combobox's.
|
|
156
|
+
*/
|
|
157
|
+
autoComplete?: string;
|
|
147
158
|
/** The popup is open. Use with `onOpenChange` for a controlled popup. */
|
|
148
159
|
open?: boolean;
|
|
149
160
|
/** Whether the popup starts open. */
|
|
@@ -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
|
|
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
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
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
|
|
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
|
|
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
|
|
80
|
-
*
|
|
81
|
-
* a
|
|
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
|
|
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=
|
|
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{
|
|
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]})})});
|