neba 1.17.1 → 1.18.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 +2 -2
- package/dist/a2ui/index.d.ts +2 -0
- package/dist/a2ui/schema.d.ts +11 -1
- package/dist/a2ui/schema.js +1 -1
- package/dist/components/alert/Alert.js +1 -1
- package/dist/components/animate-counter/AnimateCounter.d.ts +6 -0
- package/dist/components/animate-counter/AnimateCounter.js +1 -1
- package/dist/components/animate-headline/AnimateHeadline.js +1 -1
- package/dist/components/animate-scramble/AnimateScramble.d.ts +9 -3
- package/dist/components/animate-scramble/AnimateScramble.js +1 -1
- package/dist/components/animate-split/AnimateSplit.d.ts +7 -1
- package/dist/components/animate-split/AnimateSplit.js +1 -1
- package/dist/components/animate-typing/AnimateTyping.d.ts +6 -0
- 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/breadcrumb/Breadcrumb.d.ts +16 -0
- package/dist/components/breadcrumb/Breadcrumb.js +1 -1
- package/dist/components/calendar/Calendar.js +1 -1
- package/dist/components/card/Card.js +1 -1
- package/dist/components/carousel/Carousel.d.ts +3 -2
- package/dist/components/carousel/Carousel.js +1 -1
- package/dist/components/chat-bubble/ChatBubble.d.ts +6 -0
- package/dist/components/chat-bubble/ChatBubble.js +1 -1
- package/dist/components/checkbox/Checkbox.js +1 -1
- package/dist/components/checkbox-group/CheckboxGroup.d.ts +84 -0
- package/dist/components/checkbox-group/CheckboxGroup.js +1 -0
- package/dist/components/checkbox-group/index.d.ts +2 -0
- package/dist/components/checkbox-group/index.js +1 -0
- package/dist/components/code-block/CodeBlock.d.ts +2 -2
- package/dist/components/code-block/CodeBlock.js +1 -1
- package/dist/components/code-block/index.d.ts +2 -1
- package/dist/components/code-block/index.js +1 -1
- package/dist/components/color-picker/ColorPicker.js +1 -1
- package/dist/components/combobox/Combobox.js +1 -1
- package/dist/components/context-window/ContextWindow.js +1 -1
- package/dist/components/data-table/DataTable.d.ts +13 -1
- package/dist/components/data-table/DataTable.js +1 -1
- 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/drawer/Drawer.d.ts +21 -0
- package/dist/components/drawer/Drawer.js +1 -1
- package/dist/components/empty/Empty.js +1 -1
- package/dist/components/fieldset/Fieldset.d.ts +12 -1
- package/dist/components/fieldset/Fieldset.js +1 -1
- package/dist/components/file-picker/FilePicker.d.ts +0 -8
- package/dist/components/file-picker/FilePicker.js +1 -1
- package/dist/components/file-picker/formatFileSize.d.ts +8 -0
- package/dist/components/file-picker/formatFileSize.js +1 -0
- package/dist/components/file-picker/index.d.ts +2 -1
- package/dist/components/file-picker/index.js +1 -1
- package/dist/components/floating-bottom-navigation/FloatingBottomNavigation.js +1 -1
- package/dist/components/form/Form.d.ts +8 -2
- package/dist/components/form/Form.js +1 -1
- package/dist/components/gallery/Gallery.d.ts +45 -3
- package/dist/components/gallery/Gallery.js +1 -1
- package/dist/components/gallery/GalleryViewer.js +1 -1
- package/dist/components/gauge-chart/GaugeChart.js +1 -1
- package/dist/components/heatmap-chart/HeatmapChart.js +1 -1
- package/dist/components/how-to-steps/HowToSteps.d.ts +14 -0
- package/dist/components/how-to-steps/HowToSteps.js +1 -1
- package/dist/components/image/Image.d.ts +31 -6
- package/dist/components/image/Image.js +1 -1
- package/dist/components/list/List.d.ts +9 -0
- package/dist/components/list/List.js +1 -1
- package/dist/components/menu/Menu.d.ts +17 -0
- package/dist/components/menu/Menu.js +1 -1
- package/dist/components/meter/Meter.js +1 -1
- package/dist/components/mockup/Mockup.js +1 -1
- package/dist/components/number-field/NumberField.js +1 -1
- package/dist/components/page-layout/PageLayout.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/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.d.ts +3 -22
- package/dist/components/provider/NebaProvider.js +1 -1
- package/dist/components/provider/colorSchemeScript.d.ts +23 -0
- package/dist/components/provider/colorSchemeScript.js +1 -0
- package/dist/components/provider/index.d.ts +2 -1
- package/dist/components/provider/index.js +1 -1
- package/dist/components/radio-group/RadioGroup.d.ts +13 -0
- package/dist/components/radio-group/RadioGroup.js +1 -1
- package/dist/components/reasoning/Reasoning.d.ts +21 -0
- package/dist/components/reasoning/Reasoning.js +1 -1
- package/dist/components/scatter-chart/ScatterChart.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.js +1 -1
- package/dist/components/sidebar/Sidebar.d.ts +13 -0
- package/dist/components/sidebar/Sidebar.js +1 -1
- package/dist/components/slider/Slider.js +1 -1
- package/dist/components/sources/Sources.d.ts +11 -0
- package/dist/components/sources/Sources.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 +22 -11
- package/dist/components/streaming-text/StreamingText.js +1 -1
- package/dist/components/tabs/Tabs.d.ts +12 -1
- package/dist/components/tabs/Tabs.js +1 -1
- package/dist/components/text-link/TextLink.d.ts +7 -0
- 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.js +1 -1
- package/dist/components/tool-call/ToolCall.d.ts +11 -0
- package/dist/components/tool-call/ToolCall.js +1 -1
- package/dist/components/tour/Tour.js +1 -1
- package/dist/components/tree-view/TreeView.d.ts +13 -1
- package/dist/components/tree-view/TreeView.js +1 -1
- package/dist/components/typography/Typography.d.ts +7 -0
- package/dist/components/typography/Typography.js +1 -1
- package/dist/components/window-pane/WindowPane.js +1 -1
- package/dist/hooks/useElementSize.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/internal/animate.js +1 -1
- package/dist/internal/calendar.d.ts +2 -2
- package/dist/internal/calendar.js +1 -1
- package/dist/internal/chart-frame.d.ts +59 -2
- package/dist/internal/chart-frame.js +1 -1
- package/dist/internal/chart-line.js +1 -1
- package/dist/internal/checkbox-group.d.ts +29 -0
- package/dist/internal/checkbox-group.js +1 -0
- package/dist/internal/defaults.d.ts +14 -2
- package/dist/internal/format.d.ts +7 -0
- package/dist/internal/format.js +1 -1
- package/dist/internal/highlight.d.ts +9 -0
- package/dist/internal/highlight.js +1 -1
- package/dist/internal/layout-effect.d.ts +17 -0
- package/dist/internal/layout-effect.js +1 -0
- package/dist/internal/media.d.ts +20 -0
- package/dist/internal/media.js +1 -1
- package/dist/internal/menu.d.ts +5 -0
- package/dist/internal/observe.d.ts +4 -1
- package/dist/internal/observe.js +1 -1
- package/dist/internal/overrides.d.ts +55 -0
- package/dist/internal/overrides.js +1 -0
- package/dist/internal/page-layout.d.ts +26 -1
- package/dist/internal/page-layout.js +1 -1
- package/dist/internal/run.d.ts +6 -1
- package/dist/internal/run.js +1 -1
- package/dist/internal/sizer.d.ts +10 -0
- package/dist/internal/sizer.js +1 -1
- package/dist/internal/styles.d.ts +41 -3
- package/dist/internal/styles.js +1 -1
- package/dist/internal/text.d.ts +25 -3
- package/dist/internal/text.js +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind.css +94 -73
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as t,Fragment as n}from"react/jsx-runtime";import*as r from"react";import{Box as a}from"../box/Box.js";import{Button as o}from"../button/Button.js";import{Checkbox as l}from"../checkbox/Checkbox.js";import{Pagination as i}from"../pagination/Pagination.js";import{Select as s}from"../select/Select.js";import{TextField as c}from"../text-field/TextField.js";import{compareValues as u,dataHeaderHeights as d,dataRowHeights as p,dataTickWidths as f,defaultColumnWidth as g,isEmptyValue as m,keysBetween as h,minColumnWidth as y,nextSort as b,pageBounds as v,sortRows as k,virtualWindow as w}from"../../internal/data-table.js";import{beginPointerDrag as x,drawnScale as S}from"../../internal/drag.js";import{dateFormatter as C}from"../../internal/format.js";import{emptyMessages as M,fillMessage as N,tableMessages as _,useMessages as R}from"../../internal/i18n.js";import{searchHaystack as K,searchText as A}from"../../internal/search.js";import{ChevronIcon as $}from"../../internal/icons.js";import{observeResize as T}from"../../internal/observe.js";import{downloadText as D,toCsv as z}from"../../internal/csv.js";import{controlTextLeadingClasses as j,cx as I,hasContent as E,insetRingClasses as P,metaTextClasses as B,paddingXValues as F,srOnlyClasses as H,toLength as O,transitionClasses as W}from"../../internal/styles.js";import{useStyleDefaults as L}from"../../internal/defaults.js";const V=["[--n-row:transparent]","[transition:background-color_var(--neba-duration)_var(--neba-ease)]"].join(" "),X={"--n-stripe":"color-mix(in oklab, var(--neba-fg) 4%, transparent)"},q=["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(" "),G="Alt+ArrowLeft Alt+ArrowRight";function U(e){const t=e.currentTarget;t.scrollWidth>t.clientWidth?t.title=t.textContent??"":t.removeAttribute("title")}const Y='button, a, input, select, textarea, label, [role="button"], [role="checkbox"], [role="switch"], [role="radio"]',J={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)]"},Q='[data-neba-tick] [role="checkbox"], [data-neba-editor]';function Z(e,t){return"boolean"==typeof e?String(e):e instanceof Date?Number.isNaN(e.getTime())?"":C(t,{dateStyle:"medium"}).format(e):e}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"})]})}export function DataTable(C){const{headers:ee,items:te,getRowKey:ne,variant:re="outline",size:ae="sm",color:oe="primary",density:le="compact",elevation:ie=0,height:se,maxHeight:ce,rowHeight:ue,striped:de=!1,hoverable:pe=!0,stickyHeader:fe=!0,caption:ge,label:me,empty:he,virtual:ye=!0,overscan:be=8,sortable:ve=!1,sortMode:ke="single",sort:we,defaultSort:xe,onSortChange:Se,resizable:Ce=!1,columnWidths:Me,columnOrder:Ne,defaultColumnOrder:_e,onColumnOrderChange:Re,reorderable:Ke=!1,defaultColumnWidths:Ae,onColumnWidthsChange:$e,selectionMode:Te="none",selected:De,defaultSelected:ze,onSelectedChange:je,checkboxes:Ie=!1,onRowClick:Ee,onRowActivate:Pe,paging:Be="scroll",page:Fe,defaultPage:He=1,onPageChange:Oe,pageSize:We,defaultPageSize:Le=25,onPageSizeChange:Ve,pageSizeOptions:Xe=[10,25,50,100],footer:qe,search:Ge,defaultSearch:Ue,onSearchChange:Ye,searchable:Je=!1,searchPlaceholder:Qe,filter:Ze,toolbar:et,exportable:tt=!1,exportFileName:nt="table.csv",onExport:rt,exportEscapeFormulas:at=!0,onCellEdit:ot,groupBy:lt,collapsibleGroups:it=!0,defaultCollapsedGroups:st,manual:ct=!1,rowCount:ut,locale:dt,className:pt,style:ft,...gt}=L(C,["size","density","variant","locale"]),mt=R(_,dt),ht=R(M,dt),yt=r.useId(),bt=ue??p[le][ae],vt=d[le][ae],kt=F[le][ae],wt=r.useMemo(()=>new Set(!0===ct?["sort","filter","pages"]:ct||[]),[ct]),[xt,St]=r.useState(()=>_e??[]),Ct=Ne??xt,Mt=e=>{void 0===Ne&&St(e),Re?.(e)},Nt=r.useMemo(()=>{const e=ee.filter(e=>!e.hidden),t=Ct.map(t=>e.find(e=>e.key===t)).filter(e=>void 0!==e),n=e.filter(e=>!Ct.includes(e.key)),r=0===Ct.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)},[ee,Ct]),_t=Nt.some(e=>void 0!==e.group),Rt=_t?2:1,Kt="none"!==Te,At="multiple"===Te,$t=Kt&&Ie,Tt=void 0!==ot&&Nt.some(e=>void 0!==e.editable),Dt=Kt||void 0!==Pe||Tt,zt=r.useMemo(()=>te.map((e,t)=>{const n=ne?ne(e,t):t;return{row:e,identity:n,key:String(n),origin:t}}),[te,ne]),[jt,It]=r.useState(Ue??""),Et=(Ge??jt).trim(),Pt=r.useMemo(()=>Nt.filter(e=>!1!==e.searchable),[Nt]),Bt=r.useMemo(()=>{let e=null;return()=>e??=zt.map(e=>K(Pt.map(t=>t.value?t.value(e.row):e.row[t.key])))},[zt,Pt]),Ft=r.useMemo(()=>{if(wt.has("filter"))return zt;const e=A(Et);let t=zt;if(""!==e&&Pt.length>0){const n=Bt();t=zt.filter(t=>n[t.origin].includes(e))}return Ze?t.filter(e=>Ze(e.row,e.origin)):t},[zt,Et,Ze,wt,Pt,Bt]),Ht=r.useMemo(()=>new Intl.Collator(dt,{numeric:!0,sensitivity:"base"}),[dt]),[Ot,Wt]=r.useState(xe??[]),Lt=we??Ot,Vt=r.useMemo(()=>wt.has("sort")?Ft:k(Ft,Lt,e=>{const t=Nt.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)=>u(n(e.row),n(t.row),Ht),isEmpty:e=>m(n(e.row))}}),[Ft,Lt,Nt,Ht,wt]),[Xt,qt]=r.useState(He),[Gt,Ut]=r.useState(Le),Yt=We??Gt,[Jt,Qt]=r.useState(()=>new Set(st??[])),Zt=r.useMemo(()=>{if(!lt)return null;const e=[],t=new Map;for(const n of Vt){const r=lt(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}},[Vt,lt]),en=r.useMemo(()=>Zt?Zt.order.flatMap(e=>Jt.has(e)?[]:Zt.byLabel.get(e)??[]):Vt,[Zt,Jt,Vt]),tn=wt.has("pages")?ut??en.length:en.length,nn=v(tn,Fe??Xt,Yt),rn=r.useMemo(()=>"pages"!==Be||wt.has("pages")?en:en.slice(nn.start,nn.end),[en,Be,wt,nn.start,nn.end]),an="pages"===Be?nn.start:0,on=r.useMemo(()=>rn.map(e=>e.key),[rn]),ln=r.useMemo(()=>new Map(on.map((e,t)=>[e,t])),[on]),sn=r.useMemo(()=>new Map(zt.map(e=>[e.key,e])),[zt]),[cn,un]=r.useState(ze??[]),dn=De??cn,pn=r.useMemo(()=>new Set(dn.map(String)),[dn]),[fn,gn]=r.useState(null),mn=r.useRef(null),hn=r.useRef({paged:rn,pagedKeys:on,byKey:sn,selectedKeys:pn,selectedValues:dn,multiple:At});hn.current={paged:rn,pagedKeys:on,byKey:sn,selectedKeys:pn,selectedValues:dn,multiple:At};const yn=r.useCallback(e=>{const t=[],n=[],r=wt.has("pages")?new Map(hn.current.selectedValues.map(e=>[String(e),e])):null;for(const a of e){const e=hn.current.byKey.get(a);e?(t.push(e.identity),n.push(e.row)):r?.has(a)&&t.push(r.get(a))}void 0===De&&un(t),je?.(t,n)},[De,je,wt]),bn=r.useCallback(e=>{mn.current=e,yn([e])},[yn]),vn=r.useCallback(e=>{const t=hn.current.selectedKeys,n=new Set(t);n.has(e)?n.delete(e):n.add(e),mn.current=e,yn([...n])},[yn]),kn=r.useCallback((e,t)=>{const n=hn.current.pagedKeys,r=mn.current??n[0];if(void 0===r)return;const a=h(n,r,e);0!==a.length?yn(t?[...new Set([...hn.current.selectedKeys,...a])]:a):n.includes(e)&&(mn.current=e,yn(t?[...new Set([...hn.current.selectedKeys,e])]:[e]))},[yn]),wn=r.useRef(null),xn=r.useRef(null),Sn=r.useRef(null),Cn=r.useRef(null),[Mn,Nn]=r.useState(0),[_n,Rn]=r.useState(0),Kn=void 0!==se||void 0!==ce,An=void 0!==lt,$n=ye&&Kn&&rn.length>0&&!lt;r.useLayoutEffect(()=>{const e=wn.current;if(e&&$n)return Nn(e.clientHeight),T(e,e=>Nn(e.contentRect.height))},[$n]);const Tn=r.useCallback(e=>{if(!$n)return;const t=Math.floor(e.currentTarget.scrollTop/bt)*bt;Rn(e=>e===t?e:t)},[$n,bt]),Dn=$n?w(_n,Mn,bt,rn.length,be):{start:0,end:rn.length,before:0,after:0},zn=rn.slice(Dn.start,Dn.end),jn=Dt&&null!==fn&&zn.some(e=>e.key===fn),[In,En]=r.useState(Ae??{}),Pn=Me??In,Bn=r.useCallback(e=>{void 0===Me&&En(e),$e?.(e)},[Me,$e]),Fn=r.useRef(new Map),Hn=r.useRef(null),On=r.useRef(null),[Wn,Ln]=r.useState(null),[Vn,Xn]=r.useState(null),qn=r.useRef(null),Gn=r.useRef(null);r.useEffect(()=>()=>{Hn.current?.(),On.current?.()},[]);const Un=()=>{const e={...Pn};for(const t of Nt){const n=Fn.current.get(t.key);n&&void 0===e[t.key]&&(e[t.key]=n.offsetWidth)}return e},Yn=e=>Nt.find(t=>t.key===e)?.minWidth??y,Jn=r.useRef(null);r.useLayoutEffect(()=>{const e=Jn.current;if(null===e)return;Jn.current=null;const t=Fn.current.get(e),n=t?.querySelector("button")??t;n&&n!==document.activeElement&&n.focus()});const Qn=r.useCallback((e,t)=>{const n=wn.current,r=xn.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(!Kn)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*bt),s=i+(a?l.height:bt),c=fe?Sn.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))},[Kn,fe,bt]),Zn=(e,t,n=!0)=>{const r=hn.current.paged,a=Math.min(Math.max(e,0),r.length-1),o=r[a];o&&(t.preventDefault(),gn(o.key),Qn(o.key,a),Kt&&(t.shiftKey&&hn.current.multiple?kn(o.key,!1):!n||t.ctrlKey||t.metaKey||bn(o.key)))},er=(e,t,n)=>{const r=wn.current;if(!r||!Kn)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),Zn(t,n,!1)};const tr=r.useCallback(e=>{const t=xn.current,n=hn.current.paged;if(!t||0===n.length)return null;if(An){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)/bt);return Math.min(Math.max(a,0),n.length-1)},[bt,An]),nr=r.useRef(null),rr=r.useCallback(e=>{const t=tr(e),n=null===t?void 0:hn.current.paged[t],r=nr.current;!n||r&&r.key===n.key||(r&&(r.key=n.key),gn(n.key),kn(n.key,!1))},[tr,kn]),ar=r.useRef(rr);ar.current=rr;function or(e,t){if(Cn.current=null,Kt){if(!t.target.closest(Y))if("touch"!==t.pointerType)if(Sn.current?.focus({preventScroll:!0}),gn(e.key),2!==t.button){if(0===t.button)return t.shiftKey&&At?(t.preventDefault(),void kn(e.key,t.ctrlKey||t.metaKey)):void((t.ctrlKey||t.metaKey)&&At?vn(e.key):(bn(e.key),At&&((e,t)=>{const n=Sn.current;if(nr.current||!n)return;const r=e.clientY,a=()=>{const e=nr.current,t=wn.current;e&&t&&0!==e.speed?(t.scrollTop+=e.speed,ar.current(e.y),e.frame=requestAnimationFrame(a)):e&&(e.frame=null)};let o=()=>{};const l=()=>{const e=nr.current;null!=e?.frame&&cancelAnimationFrame(e.frame),nr.current=null,o()};nr.current={y:r,speed:0,frame:null,stop:l,key:t},o=x({target:n,pointerId:e.pointerId,onMove:e=>{const t=nr.current,n=wn.current;if(!t)return;if(t.y=e.clientY,ar.current(t.y),!n||!Kn)return;const r=n.getBoundingClientRect(),o=r.top+bt-t.y,l=t.y-(r.bottom-bt);t.speed=o>0?-Math.min(o,40):l>0?Math.min(l,40):0,0!==t.speed&&null===t.frame&&(t.frame=requestAnimationFrame(a))},onEnd:l,capture:!1,mark:!1})})(t,e.key)))}else hn.current.selectedKeys.has(e.key)||bn(e.key);else Cn.current=e.key}else Dt&&!t.target.closest(Y)&&gn(e.key)}r.useEffect(()=>()=>nr.current?.stop(),[]);const lr=r.useMemo(()=>on.reduce((e,t)=>pn.has(t)?e+1:e,0),[on,pn]),ir=on.length>0&&lr===on.length,sr=f[ae],cr=e=>Pn[e.key]??e.width,ur=($t?sr:0)+Nt.reduce((e,t)=>e+(cr(t)??y),0),dr=Nt.length>0&&Nt.every(e=>void 0!==cr(e)),pr=Nt.length+($t?1:0)+(dr?1:0),fr=r.useMemo(()=>{const e=[];return Nt.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},[Nt]),gr=r.useMemo(()=>{const e=new Map,t=new Map;let n=$t?sr:0;for(const t of Nt)"start"===t.pinned&&(e.set(t.key,n),n+=cr(t)??g);let r=0;for(let e=Nt.length-1;e>=0;e-=1){const n=Nt[e];"end"===n.pinned&&(t.set(n.key,r),r+=cr(n)??g)}return{start:e,end:t}},[Nt,Pn,$t,sr]),mr=(e,t,n)=>({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))"}),hr=(e,t)=>{if(!e.pinned)return{};const n="start"===e.pinned?gr.start.get(e.key):gr.end.get(e.key);return mr(e.pinned,n??0,t)},yr=Nt.some(e=>"start"===e.pinned),br=e=>yr?mr("start",0,e):{},vr={padding:`0 ${kt}`,borderBottom:"1px solid var(--n-line)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},kr={...vr,height:`${vt}px`,backgroundColor:"var(--n-panel-press)",color:"var(--n-cell-ink, var(--neba-muted-fg))"},wr="odd"===de?0:1,xr=r.useMemo(()=>new Intl.NumberFormat(dt),[dt]),Sr=qe??"pages"===Be,Cr=N(mt.range,{start:xr.format(0===tn?0:("pages"===Be?nn.start:0)+1),end:xr.format("pages"===Be?nn.end:tn),total:xr.format(tn)}),Mr=Kt&&pn.size>0?N(mt.selected,{count:xr.format(pn.size)}):"",Nr=e=>{void 0===Fe&&qt(e),Oe?.(e)},_r=(n,r)=>{const a=pn.has(n.key),o=fn===n.key;return t("tr",{id:`${yt}-${n.key}`,"aria-selected":Kt?a:void 0,"aria-rowindex":$n?r+Rt+1:void 0,"data-neba-row":n.key,className:I(V,a?"[--n-row:var(--n-soft-press)]":!1!==de&&r%2===wr?"[--n-row:var(--n-stripe)]":"",!a&&pe?"hover:[--n-row:var(--n-soft)]":"",o&&Dt?"[box-shadow:inset_0_0_0_1px_var(--n-ring)]":"",Kt||Ee?"cursor-default":""),style:{height:`${bt}px`,backgroundColor:"var(--n-row)"},onPointerDown:e=>or(n,e),onClick:e=>{e.target.closest(Q)||(Cn.current===n.key&&(Cn.current=null,Sn.current?.focus({preventScroll:!0}),gn(n.key),bn(n.key)),Ee?.(n.row,an+r,e))},onDoubleClick:e=>{e.target.closest(Q)||Pe?.(n.row,an+r)},children:[$t?Fr(n):null,Nt.map((t,a)=>{const o=jr(t,n.row),l=$r?.key===n.key&&$r.column===t.key;return e("td",{id:$t&&0===a?Br(n):void 0,role:Dt?"gridcell":void 0,style:{...vr,...hr(t,!1),textAlign:t.align??"start",cursor:o&&!l?"cell":void 0},onPointerEnter:t.render||l?void 0:U,onDoubleClick:o?e=>{e.stopPropagation(),zr(n.key,t.key)}:void 0,children:l?Ir(n,t):t.render?t.render(n.row,an+r):Z(n.row[t.key],dt)},t.key)}),dr?e("td",{"aria-hidden":"true",style:{...vr,padding:0}}):null]},n.key)},Rr=e=>{const t=Nt.map(e=>e.key);return null!==Wn&&t.indexOf(Wn)<t.indexOf(e)?"end":"start"},Kr=(r,a,o)=>{const l=r.sortable??ve,i=r.resizable??Ce,s=Ke&&!r.pinned,c=(u=r.key,Lt.find(e=>e.key===u));var u;const d=c?Lt.findIndex(e=>e.key===r.key)+1:0,p=r.headerAlign??r.align??"start",f=i&&a<Nt.length-1,m=f||d>1?`${yt}-head-${a}`:void 0;return t("th",{"aria-labelledby":m,ref:e=>{e?Fn.current.set(r.key,e):Fn.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":Wn===r.key||void 0,className:I("relative font-semibold select-none",fe?"sticky z-20 [backdrop-filter:var(--neba-blur)]":"",s?Wn===r.key?"cursor-grabbing":"cursor-grab":"",s&&!l?P:"",Vn===r.key?J[Rr(r.key)]:""),style:{...kr,...hr(r,!0),backgroundImage:Wn===r.key?"linear-gradient(var(--n-soft), var(--n-soft))":void 0,top:fe?2!==o&&_t?vt:0:void 0,textAlign:p,color:c?"var(--n-cell-ink, var(--n-accent))":kr.color},tabIndex:s&&!l?0:void 0,"aria-keyshortcuts":s&&!l?G:void 0,onPointerDown:s?e=>((e,t)=>{if(0!==t.button)return;const n=t.currentTarget,r=t.clientX;let a=!1;On.current=x({target:n,pointerId:t.pointerId,capture:!1,onMove:t=>{if(!a){if(Math.abs(t.clientX-r)<6)return;a=!0,qn.current=e,Ln(e)}const n=Nt.find(e=>{if(e.pinned)return!1;const n=Fn.current.get(e.key);if(!n)return!1;const r=n.getBoundingClientRect();return t.clientX>=r.left&&t.clientX<=r.right});Gn.current=n&&n.key!==e?n.key:null,Xn(Gn.current)},onEnd:()=>{const e=qn.current,t=Gn.current;if(On.current=null,qn.current=null,Gn.current=null,Ln(null),Xn(null),e&&t&&e!==t){const n=Nt.map(e=>e.key),r=n.indexOf(e),a=n.indexOf(t);n.splice(a,0,...n.splice(r,1)),Mt(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=Nt.map(e=>e.key),o=a.indexOf(e),l=Nt[o+r];l&&!l.pinned&&(a.splice(o+r,0,...a.splice(o,1)),Jn.current=e,Mt(a))})(r.key,e):void 0,children:[l?t("button",{type:"button","aria-keyshortcuts":s?G:void 0,className:I(q,"end"===p?"justify-end":"center"===p?"justify-center":"justify-start"),onClick:e=>((e,t)=>{const n=b(Lt,e,t&&"multiple"===ke);void 0===we&&Wt(n),Se?.(n)})(r.key,e.shiftKey),children:[e("span",{id:m,className:"min-w-0 truncate",children:r.label??r.key}),e("span",{"aria-hidden":"true",className:I("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(n,{children:[e("span",{"aria-hidden":"true",className:"text-[0.85em] tabular-nums",children:d}),t("span",{className:H,children:[" ",N("desc"===c?.direction?mt.sortDescending:mt.sortAscending,{order:xr.format(d)})]})]}):null]}):e("span",{id:m,className:"block truncate",children:r.label??r.key}),f?e("span",{role:"separator","aria-orientation":"vertical","aria-label":N(mt.resizeColumn,{column:"string"==typeof r.label?r.label:r.key}),"aria-valuenow":Pn[r.key]??r.width,"aria-valuemin":Yn(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=Fn.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=Un(),a=Fn.current.get(e),o=a?S(a).x:1,l="rtl"===getComputedStyle(n).direction,i=t.clientX,s=r[e]??g,c=Yn(e);Hn.current=x({target:n,pointerId:t.pointerId,onMove:t=>{const n=(t.clientX-i)/o*(l?-1:1);Bn({...r,[e]:Math.max(c,Math.round(s+n))})},onEnd:()=>{Hn.current=null}})})(r.key,e),onDoubleClick:()=>(e=>{const t={...Pn};delete t[e],Bn(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=Un(),o=a[e]??g;Bn({...a,[e]:Math.max(Yn(e),o+(r?16:-16))})})(r.key,e)}):null]},r.key)},Ar=(n,r)=>{const a=Jt.has(n),o=it,l=r.map(e=>e.row),i=()=>Qt(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:I("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:""===n?mt.noGroup:n}),e("span",{className:"shrink-0 text-(--neba-muted-fg) tabular-nums",children:xr.format(r.length)})]});return t("tr",{"data-neba-group":n,style:{height:`${bt}px`,backgroundColor:"var(--n-soft)"},children:[$t?e("td",{style:{...vr,padding:0,...br(!1)}}):null,Nt.map((t,n)=>e("td",{colSpan:1,style:{...vr,...hr(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 ${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)),dr?e("td",{"aria-hidden":"true",style:{...vr,padding:0}}):null]})},[$r,Tr]=r.useState(null),Dr=r.useRef(!1);function zr(e,t){Dr.current=!1,Tr({key:e,column:t})}const jr=(e,t)=>void 0!==ot&&("function"==typeof e.editable?e.editable(t):Boolean(e.editable)),Ir=(t,n)=>{const r=n.value?n.value(t.row):t.row[n.key],a=e=>{Tr(null);const a="number"===n.editType?Number(e):e;("number"!==n.editType||""!==e.trim()&&!Number.isNaN(a))&&String(a)!==String(r??"")&&ot?.(t.row,n,a)};return e("input",{autoFocus:!0,"data-neba-editor":"",type:"number"===n.editType?"number":"text",defaultValue:null==r?"":String(r),"aria-label":"string"==typeof n.label?n.label:n.key,className:"neba-input w-full bg-transparent [font:inherit] text-inherit [outline:none]",style:{textAlign:n.align??"start"},onPointerDown:e=>e.stopPropagation(),onBlur:e=>{Dr.current||a(e.currentTarget.value)},onKeyDown:e=>{"Enter"!==e.key&&"Escape"!==e.key||(e.stopPropagation(),Dr.current=!0,"Enter"===e.key?(e.preventDefault(),a(e.currentTarget.value)):Tr(null),Sn.current?.focus({preventScroll:!0}))}})},Er=t=>e("span",{className:"flex items-center justify-center",children:t}),Pr=`${yt}-tick`,Br=e=>`${yt}-first-${e.origin}`,Fr=t=>e("td",{"data-neba-tick":"",role:Kt?"gridcell":void 0,style:{...vr,padding:0,overflow:"visible",...br(!1)},children:Er(e(l,{size:ae,color:oe,checked:pn.has(t.key),tabIndex:-1,"aria-labelledby":Nt.length>0?`${Pr} ${Br(t)}`:void 0,"aria-label":Nt.length>0?void 0:mt.selectRow,onCheckedChange:()=>{At?vn(t.key):bn(t.key)}}))}),Hr=At?Er(e(l,{size:ae,color:oe,checked:ir,indeterminate:lr>0&&!ir,"aria-label":mt.selectAll,onCheckedChange:()=>{if(ir){const e=new Set(on);yn([...pn].filter(t=>!e.has(t)))}else yn([...new Set([...pn,...on])])}})):null,Or=dr?e("th",{"aria-hidden":"true",className:I(fe?"sticky top-0 z-20 [backdrop-filter:var(--neba-blur)]":""),style:{...kr,padding:0}}):null,Wr=(t,n)=>n>0?e("tr",{"aria-hidden":"true",style:{height:`${n}px`},children:e("td",{colSpan:pr,style:{padding:0,border:0}})},t):null;return t(a,{variant:re,size:ae,color:oe,density:le,elevation:ie,padded:!1,className:I("flex flex-col overflow-hidden",Dt?"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":"",pt),style:{...X,...ft},...gt,children:[Je||tt||E(et)?t("div",{className:"flex items-center gap-2",style:{padding:`${kt} ${kt}`,borderBottom:"1px solid var(--n-line)"},children:[Je?e(c,{size:ae,color:oe,density:le,variant:"outline",type:"search",className:"w-full max-w-64",startIcon:e(SearchIcon,{}),placeholder:Qe??mt.search,"aria-label":Qe??mt.search,value:Ge??jt,onChange:e=>{const t=e.target.value;void 0===Ge&&It(t),Nr(1),Ye?.(t)}}):null,tt||E(et)?t("div",{className:"ms-auto flex items-center gap-2",children:[et,tt?e(o,{size:ae,color:oe,density:le,variant:"outline",onClick:()=>{const e=Nt.filter(e=>!1!==e.exportable),t=e.map(e=>"string"==typeof e.label?e.label:e.key),n=Vt.map(t=>e.map(e=>e.exportValue?e.exportValue(t.row):e.value?e.value(t.row):t.row[e.key])),r=z([t,...n],{escapeFormulas:at});rt?rt(r):D(r,nt,"text/csv;charset=utf-8")},children:mt.exportCsv}):null]}):null]}):null,e("div",{ref:wn,className:"min-h-0 flex-auto overflow-auto overscroll-contain",style:{height:O(se),maxHeight:O(ce)},onScroll:Tn,children:t("table",{ref:Sn,role:Dt?"grid":void 0,"aria-label":me,"aria-multiselectable":At||void 0,"aria-rowcount":$n?rn.length+Rt:void 0,"aria-activedescendant":jn?`${yt}-${fn}`:void 0,tabIndex:Dt?0:void 0,className:I("w-full text-start [outline:none]",j[ae],"text-(--neba-fg)",Kt?"select-none":""),style:{tableLayout:"fixed",borderCollapse:"separate",borderSpacing:0,minWidth:`${ur}px`},onKeyDown:function(e){if(!Dt||e.target!==e.currentTarget)return;const t=hn.current.paged;if(0===t.length)return;const n=null===fn?-1:hn.current.pagedKeys.indexOf(fn),r=wn.current,a=fe?Sn.current?.tHead?.getBoundingClientRect().height??0:0,o=r?r.clientHeight-a:0,l=Math.max(1,Math.floor((o>0?o:10*bt)/bt)-1);switch(e.key){case"ArrowDown":Zn(n+1,e);break;case"ArrowUp":Zn(-1===n?0:n-1,e);break;case"Home":er("start",0,e);break;case"End":er("end",t.length-1,e);break;case"PageDown":er(l*bt,Math.max(n,0)+l,e);break;case"PageUp":er(-l*bt,Math.max(n,0)-l,e);break;case" ":Kt&&-1!==n&&(e.preventDefault(),(e.ctrlKey||e.metaKey)&&At?vn(t[n].key):bn(t[n].key));break;case"a":case"A":Kt&&(e.ctrlKey||e.metaKey)&&At&&(e.preventDefault(),yn(hn.current.pagedKeys));break;case"Escape":Kt&&(e.preventDefault(),yn([]));break;case"Enter":-1!==n&&Pe&&(e.preventDefault(),Pe(t[n].row,an+n));break;case"F2":{const r=t[n],a=r?Nt.find(e=>jr(e,r.row)):void 0;r&&a&&(e.preventDefault(),zr(r.key,a.key));break}}},children:[ge?e("caption",{className:I(B[ae],"text-(--neba-muted-fg)"),style:{padding:`0.5rem ${kt}`,textAlign:"start"},children:ge}):null,t("colgroup",{children:[$t?e("col",{style:{width:`${sr}px`}}):null,Nt.map(t=>{const n=cr(t);return e("col",{style:void 0===n?void 0:{width:`${n}px`}},t.key)}),dr?e("col",{}):null]}),t("thead",{children:[_t?t("tr",{"aria-rowindex":$n?1:void 0,style:{height:`${vt}px`},children:[$t?e("th",{scope:"col",rowSpan:2,className:I(fe?"sticky top-0 z-20 [backdrop-filter:var(--neba-blur)]":""),style:{...kr,padding:0,overflow:"visible",...br(!0)},children:Hr}):null,fr.map(t=>void 0===t.label?Kr(Nt[t.from],t.from,2):e("th",{scope:"colgroup",colSpan:t.span,className:I("font-semibold select-none",fe?"sticky top-0 z-20 [backdrop-filter:var(--neba-blur)]":""),style:{...kr,textAlign:"center"},children:t.label},`group-${t.from}`)),dr?r.cloneElement(Or,{rowSpan:2}):null]}):null,t("tr",{"aria-rowindex":$n?Rt:void 0,style:{height:`${vt}px`},children:[$t&&!_t?e("th",{scope:"col",className:I(fe?"sticky top-0 z-20 [backdrop-filter:var(--neba-blur)]":""),style:{...kr,padding:0,overflow:"visible",...br(!0)},children:Hr}):null,Nt.map((e,t)=>_t&&void 0===e.group?null:Kr(e,t)),dr&&!_t?Or:null]})]}),e("tbody",{ref:xn,children:0===rn.length?e("tr",{children:e("td",{colSpan:pr,style:{padding:`2rem ${kt}`,textAlign:"center",color:"var(--n-cell-ink, var(--neba-muted-fg))"},children:he??ht.title})}):e(n,{children:Zt?Zt.order.map(e=>{const n=Zt.byLabel.get(e)??[],a=n.filter(e=>ln.has(e.key));return 0!==a.length||Jt.has(e)?t(r.Fragment,{children:[Ar(e,n),a.map(e=>_r(e,ln.get(e.key)??0))]},e||"\0"):null}):(()=>{const e=$r?rn.findIndex(e=>e.key===$r.key):-1,t=-1!==e&&e<Dn.start,n=-1!==e&&e>=Dn.end;return[...t?[Wr("before",e*bt),_r(rn[e],e),Wr("before-rest",Dn.before-(e+1)*bt)]:[Wr("before",Dn.before)],...zn.map((e,t)=>_r(e,Dn.start+t)),...n?[Wr("after-rest",(e-Dn.end)*bt),_r(rn[e],e),Wr("after",Dn.after-(e-Dn.end+1)*bt)]:[Wr("after",Dn.after)]]})()})})]})}),Sr?t("div",{className:I("flex flex-wrap items-center gap-3",B[ae]),style:{padding:`0.375rem ${kt}`,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:Cr}),Mr?e("span",{className:"text-(--n-accent) tabular-nums",children:Mr}):null]}),t("div",{className:"ms-auto flex items-center gap-2",children:["pages"===Be&&Xe.length>0?e(n,{children:e(s,{size:ae,color:oe,density:le,variant:"outline",label:mt.rowsPerPage,items:Xe.map(e=>({value:e})),value:Yt,onValueChange:e=>{const t=Number(e);void 0===We&&Ut(t),Nr(Math.floor(nn.start/t)+1),Ve?.(t)}})}):null,"pages"===Be?e(i,{size:ae,color:oe,count:nn.pages,page:nn.page,siblingCount:0,onPageChange:Nr}):null]})]}):null,Sr?null:t("span",{role:"status",className:H,children:[Cr,Mr?` ${Mr}`:null]}),$t?e("span",{id:Pr,hidden:!0,children:mt.selectRow}):null]})}
|
|
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 +1 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as a}from"react/jsx-runtime";import*as t from"react";import{Button as l}from"../button/Button.js";import{Calendar as n,usePickerLabels as o}from"../../internal/calendar.js";import{CalendarIcon as r}from"../../internal/icons.js";import{PickerFooter as i,PickerShell as s}from"../../internal/picker.js";import{displaySamples as c,formatDate as m,isUnitOutside as d,isValidDate as u,localeWeekStart as
|
|
1
|
+
"use client";import{jsx as e,jsxs as a}from"react/jsx-runtime";import*as t from"react";import{Button as l}from"../button/Button.js";import{Calendar as n,usePickerLabels as o}from"../../internal/calendar.js";import{CalendarIcon as r}from"../../internal/icons.js";import{PickerFooter as i,PickerShell as s}from"../../internal/picker.js";import{displaySamples as c,formatDate as m,isUnitOutside as d,isValidDate as u,localeWeekStart as p,mergeDateAndTime as h,startOfMonth as f,startOfUnit as y,toISODate as b,toISOMonth as j,toISOYear as g,today as v,withPlaceholder as x}from"../../internal/date.js";import{cx as D}from"../../internal/styles.js";import{useStyleDefaults as O}from"../../internal/defaults.js";import{useIntlLocale as S}from"../../internal/media.js";const k={day:{dateStyle:"medium"},month:{year:"numeric",month:"long"},year:{year:"numeric"}},z={day:b,month:j,year:g};export const DatePicker=/*@__PURE__*/t.forwardRef(function DatePicker(b,j){const{value:g,defaultValue:C,onValueChange:w,open:M,defaultOpen:P,onOpenChange:V,granularity:B="day",defaultMonth:I,minDate:R,maxDate:E,shouldDisableDate:F,locale:L,weekStartsOn:N,format:T,placeholder:Y,clearable:q=!1,showTodayButton:A=!0,closeOnSelect:G=!0,labels:H,name:J,size:K="md",color:Q="primary",readOnly:U=!1,disabled:W=!1,startIcon:X,...Z}=O(b,["size","density","variant","locale","labelPlacement"]),$=o(H,L),_=S(L),ee=N??p(_),ae=T??k[B],[te,le]=t.useState(C??null),ne=void 0!==g?g:te,[oe,re]=t.useState(P??!1),ie=M??oe,[se,ce]=t.useState(()=>f(u(ne)?ne:I??v()));t.useEffect(()=>{ie&&ce(f(u(ne)?ne:I??v()))},[ie]);const me=e=>{e&&(U||W)||(void 0===M&&re(e),V?.(e))},de=e=>{void 0===g&&le(e),w?.(e)},ue=e=>{const a=y(e,B),t=u(ne)?h(a,ne):a;de(t),ce(f(t)),G&&me(!1)},pe=v(),he=y(pe,B),fe=d(pe,B,R,E)||(F?.(he)??!1),ye="year"===B?$.thisYear:"month"===B?$.thisMonth:$.today,be=A||q,je=t.useMemo(()=>x(c(_,ae),Y),[_,ae,Y]);return e(s,{...Z,size:K,color:Q,readOnly:U,disabled:W,triggerRef:j,startIcon:X??e(r,{}),display:u(ne)?m(ne,_,ae):Y??"",samples:je,empty:!u(ne),clearable:q,onClear:()=>de(null),open:ie,onOpenChange:me,clearLabel:$.clear,hiddenValues:J?[{name:J,value:u(ne)?z[B](ne):""}]:void 0,children:a("div",{className:D("flex flex-col",be&&"gap-1.5"),children:[e(n,{size:K,color:Q,locale:L,weekStartsOn:ee,month:se,onMonthChange:ce,selected:[ne],onSelect:ue,granularity:B,minDate:R,maxDate:E,shouldDisableDate:F,labels:$,autoFocus:!0}),be?a(i,{size:K,children:[q?e(l,{variant:"text",size:K,color:Q,density:"compact",onClick:()=>{de(null),me(!1)},children:$.clear}):null,A?e(l,{variant:"text",size:K,color:Q,density:"compact",disabled:fe,onClick:()=>ue(pe),children:ye}):null]}):null]})})});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as l}from"react/jsx-runtime";import*as a from"react";import{Button as n}from"../button/Button.js";import{Calendar as t,usePickerLabels as
|
|
1
|
+
"use client";import{jsx as e,jsxs as l}from"react/jsx-runtime";import*as a from"react";import{Button as n}from"../button/Button.js";import{Calendar as t,usePickerLabels as r}from"../../internal/calendar.js";import{ArrowRightIcon as s,CalendarIcon as o}from"../../internal/icons.js";import{PickerFooter as i,PickerShell as c}from"../../internal/picker.js";import{WidthSizer as u}from"../../internal/sizer.js";import{addMonths as m,compareDay as d,displaySamples as p,formatDate as h,isValidDate as f,localeWeekStart as x,startOfDay as v,startOfMonth as b,toISODate as g,today as y,withPlaceholder as j}from"../../internal/date.js";import{cx as w,gapClasses as N,metaTextClasses as D}from"../../internal/styles.js";import{useStyleDefaults as S}from"../../internal/defaults.js";import{useIntlLocale as C}from"../../internal/media.js";const O={start:null,end:null};export const DateRangePicker=/*@__PURE__*/a.forwardRef(function DateRangePicker(k,z){const{value:P,defaultValue:R,onValueChange:B,open:M,defaultOpen:V,onOpenChange:E,defaultMonth:I,minDate:F,maxDate:L,shouldDisableDate:q,locale:A,weekStartsOn:G,format:H={dateStyle:"medium"},monthCount:J=2,startPlaceholder:K,endPlaceholder:Q,presets:T,clearable:U=!1,closeOnSelect:W=!0,labels:X,name:Y,size:Z="md",color:$="primary",readOnly:_=!1,disabled:ee=!1,startIcon:le,...ae}=S(k,["size","density","variant","locale","labelPlacement"]),ne=r(X,A),te=C(A),re=G??x(te),[se,oe]=a.useState(R??O),ie=void 0!==P?P??O:se,ce=f(ie.start)?ie.start:null,ue=f(ie.end)?ie.end:null,[me,de]=a.useState(V??!1),pe=M??me,[he,fe]=a.useState(null),[xe,ve]=a.useState(null),[be,ge]=a.useState(()=>b(ce??I??y()));a.useEffect(()=>{pe?ge(b(ce??I??y())):(fe(null),ve(null))},[pe]);const ye=e=>{e&&(_||ee)||(void 0===M&&de(e),E?.(e))},je=e=>{void 0===P&&oe(e),B?.(e)},we=he??ce,Ne=null!==he?xe:ue,De=(l,a)=>f(l)?h(l,te,H):e("span",{className:"text-(--neba-muted-fg)",children:a??""}),Se=m(be,1),Ce=2===J,Oe=p(te,H),ke=null!==he?ne.end:null===ce?ne.start:null,ze={size:Z,color:$,locale:A,weekStartsOn:re,selected:[ce,ue,he],rangeStart:we,rangeEnd:Ne,onSelect:e=>{const l=v(e);return null===he||d(l,he)<0?(fe(l),void ve(l)):(fe(null),ve(null),je({start:he,end:l}),void(W&&ye(!1)))},onPreviewChange:e=>{null!==he&&ve(e??he)},minDate:F,maxDate:L,shouldDisableDate:q,showOutsideDays:!1,multiselectable:!0,labels:ne};return e(c,{...ae,size:Z,color:$,readOnly:_,disabled:ee,triggerRef:z,startIcon:le??e(o,{}),display:l("span",{className:"flex min-w-0 items-center gap-1.5",children:[l("span",{className:"flex min-w-0 flex-col",children:[e("span",{className:"truncate",children:De(ce,K)}),e(u,{samples:j(Oe,K)})]}),e("span",{"aria-hidden":"true",className:"flex shrink-0 items-center text-(--neba-muted-fg) rtl:rotate-180",children:e(s,{})}),l("span",{className:"flex min-w-0 flex-col",children:[e("span",{className:"truncate",children:De(ue,Q)}),e(u,{samples:j(Oe,Q)})]})]}),empty:null===ce&&null===ue,clearable:U,onClear:()=>je(O),open:pe,onOpenChange:ye,clearLabel:ne.clear,hiddenValues:Y?[{name:Y,value:ce?g(ce):""},{name:Y,value:ue?g(ue):""}]:void 0,repeats:!0,children:l("div",{className:"flex flex-col gap-1.5",children:[l("div",{className:w("flex items-stretch",N[Z]),children:[T&&T.length>0?e("div",{className:w("flex max-h-[calc(var(--n-cell,2rem)*8)] flex-col overflow-y-auto border-e pe-1.5","[border-color:var(--n-line)]"),children:T.map((l,a)=>e(n,{variant:"text",size:Z,color:$,density:"compact",className:"justify-start whitespace-nowrap",onClick:()=>(e=>{const l="function"==typeof e.value?e.value():e.value;fe(null),ve(null),je(l),f(l.start)&&ge(b(l.start)),W&&ye(!1)})(l),children:l.label},a))}):null,e(t,{...ze,month:be,onMonthChange:ge,showNextButton:!Ce,autoFocus:!0}),Ce?e(t,{...ze,month:Se,onMonthChange:e=>ge(m(e,-1)),showPreviousButton:!1}):null]}),U||null!==ke?l(i,{size:Z,children:[null!==ke?e("span",{className:w("me-auto text-(--neba-muted-fg)",D[Z]),children:ke}):null,U?e(n,{variant:"text",size:Z,color:$,density:"compact",onClick:()=>{fe(null),ve(null),je(O),ye(!1)},children:ne.clear}):null]}):null]})})});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as l from"react";import{Button as a}from"../button/Button.js";import{Calendar as n,TimeGrid as o,usePickerLabels as s}from"../../internal/calendar.js";import{CalendarIcon as i}from"../../internal/icons.js";import{PickerDivider as r,PickerFooter as c,PickerShell as d}from"../../internal/picker.js";import{clampDate as m,displaySamples as u,formatDate as p,isDayOutside as h,isHour12 as f,isValidDate as S,localeWeekStart as b,mergeDateAndTime as y,startOfDay as D,startOfMonth as g,timeUnitRange as v,toISODateTime as
|
|
1
|
+
"use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as l from"react";import{Button as a}from"../button/Button.js";import{Calendar as n,TimeGrid as o,usePickerLabels as s}from"../../internal/calendar.js";import{CalendarIcon as i}from"../../internal/icons.js";import{PickerDivider as r,PickerFooter as c,PickerShell as d}from"../../internal/picker.js";import{clampDate as m,displaySamples as u,formatDate as p,isDayOutside as h,isHour12 as f,isValidDate as S,localeWeekStart as b,mergeDateAndTime as y,startOfDay as D,startOfMonth as g,timeUnitRange as v,toISODateTime as j,today as x,withPlaceholder as C,withTime as k}from"../../internal/date.js";import{cx as w,gapClasses as z}from"../../internal/styles.js";import{useStyleDefaults as O}from"../../internal/defaults.js";import{useIntlLocale as T}from"../../internal/media.js";export const DateTimePicker=/*@__PURE__*/l.forwardRef(function DateTimePicker(N,P){const{value:V,defaultValue:B,onValueChange:I,open:M,defaultOpen:R,onOpenChange:E,defaultMonth:F,minDate:L,maxDate:q,shouldDisableDate:A,shouldDisableTime:G,locale:H,weekStartsOn:J,format:K={dateStyle:"medium",timeStyle:"short"},hour12:Q,showSeconds:U=!1,hourStep:W=1,minuteStep:X=1,secondStep:Y=1,placeholder:Z,clearable:$=!1,showNowButton:_=!0,closeOnSelect:ee=!1,labels:te,name:le,size:ae="md",color:ne="primary",density:oe="default",readOnly:se=!1,disabled:ie=!1,startIcon:re,...ce}=O(N,["size","density","variant","locale","labelPlacement"]),de=s(te,H),me=T(H),ue=J??b(me),pe=Q??f(me),[he,fe]=l.useState(B??null),Se=void 0!==V?V:he,[be,ye]=l.useState(R??!1),De=M??be,[ge,ve]=l.useState(()=>g(S(Se)?Se:F??x()));l.useEffect(()=>{De&&ve(g(S(Se)?Se:F??x()))},[De]);const je=e=>{e&&(se||ie)||(void 0===M&&ye(e),E?.(e))},xe=e=>{const t=null===e?null:m(e,L,q);void 0===V&&fe(t),I?.(t)},Ce=l.useCallback((e,t)=>{const[l,a]=v(t,e);return!!(S(L)&&a.getTime()<L.getTime())||(!!(S(q)&&l.getTime()>q.getTime())||(G?.(e,t)??!1))},[L,q,G]),ke=new Date,we=k(ke,{seconds:U?ke.getSeconds():0}),ze=h(we,L,q)||(A?.(we)??!1)||Ce(we,"second"),Oe=C(u(me,K),Z);return e(d,{...ce,size:ae,color:ne,density:oe,readOnly:se,disabled:ie,triggerRef:P,startIcon:re??e(i,{}),display:S(Se)?p(Se,me,K):Z??"",samples:Oe,empty:!S(Se),clearable:$,onClear:()=>xe(null),open:De,onOpenChange:je,clearLabel:de.clear,hiddenValues:le?[{name:le,value:S(Se)?j(Se,U):""}]:void 0,children:t("div",{className:"flex flex-col gap-1.5",children:[t("div",{className:w("flex items-stretch",z[ae]),children:[e(n,{size:ae,color:ne,locale:H,weekStartsOn:ue,month:ge,onMonthChange:ve,selected:[Se],onSelect:e=>{const t=S(Se)?y(e,Se):D(e);xe(t),ve(g(t)),ee&&je(!1)},minDate:L,maxDate:q,shouldDisableDate:A,labels:de,autoFocus:!0}),e(r,{}),e(o,{size:ae,density:oe,locale:H,value:S(Se)?Se:null,referenceDate:S(Se)?Se:x(),onChange:xe,hour12:pe,showSeconds:U,hourStep:W,minuteStep:X,secondStep:Y,shouldDisableTime:Ce,labels:de})]}),t(c,{size:ae,children:[$?e(a,{variant:"text",size:ae,color:ne,density:"compact",onClick:()=>{xe(null),je(!1)},children:de.clear}):null,_?e(a,{variant:"text",size:ae,color:ne,density:"compact",disabled:ze,onClick:()=>{xe(we),ve(g(we))},children:de.now}):null,e(a,{variant:"solid",size:ae,color:ne,density:"compact",onClick:()=>je(!1),children:de.done})]})]})})});
|
|
@@ -54,6 +54,15 @@ export interface DrawerProps extends Pick<NebaStyleProps, 'size' | 'color' | 'de
|
|
|
54
54
|
trigger?: React.ReactElement;
|
|
55
55
|
/** The heading. Rendered as the element that names the drawer. */
|
|
56
56
|
title?: React.ReactNode;
|
|
57
|
+
/**
|
|
58
|
+
* Which heading the title is, in the page's own outline. An `inline` drawer
|
|
59
|
+
* is part of the page, so its heading is too: one beside an `<h1>` wants `2`,
|
|
60
|
+
* and one inside a section headed `<h2>` wants `3`. An `overlay` drawer is a
|
|
61
|
+
* dialog and starts an outline of its own, where the default is what it
|
|
62
|
+
* wants.
|
|
63
|
+
* @default 2
|
|
64
|
+
*/
|
|
65
|
+
headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
57
66
|
/** A line under the title, and the drawer's accessible description. */
|
|
58
67
|
description?: React.ReactNode;
|
|
59
68
|
/**
|
|
@@ -122,6 +131,18 @@ export interface DrawerProps extends Pick<NebaStyleProps, 'size' | 'color' | 'de
|
|
|
122
131
|
* @default true
|
|
123
132
|
*/
|
|
124
133
|
safeArea?: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Keeps the panel and its contents in the DOM while the drawer is closed,
|
|
136
|
+
* hidden, rather than building them each time it opens.
|
|
137
|
+
*
|
|
138
|
+
* For a drawer of links that should be in the page a crawler renders — the
|
|
139
|
+
* navigation a Sidebar becomes on a narrow screen above all. An `overlay`
|
|
140
|
+
* drawer is portalled, and a portal has nowhere to go until there is a
|
|
141
|
+
* document, so its contents arrive once the page has hydrated rather than in
|
|
142
|
+
* the server's HTML. An `inline` one is in the server's HTML as well.
|
|
143
|
+
* @default false
|
|
144
|
+
*/
|
|
145
|
+
keepMounted?: boolean;
|
|
125
146
|
/** The body. */
|
|
126
147
|
children?: React.ReactNode;
|
|
127
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as a,Fragment as r}from"react/jsx-runtime";import*as
|
|
1
|
+
"use client";import{jsx as e,jsxs as a,Fragment as r}from"react/jsx-runtime";import*as n from"react";import{Dialog as t}from"@base-ui/react/dialog";import{boxPaddingXClasses as l,boxPaddingYClasses as s}from"../box/Box.js";import{actionMessages as o,useMessages as d}from"../../internal/i18n.js";import{CloseIcon as i}from"../../internal/icons.js";import{cx as b,hasContent as m,headingTitleClasses as u,metaTextClasses as c,popupFadeClasses as f,sheetBodyClasses as p,sheetCloseClasses as h,sheetHeaderGapClasses as x,sheetSectionGapClasses as g,surfaceClasses as v,surfaceSlots as y}from"../../internal/styles.js";import{useStyleDefaults as w}from"../../internal/defaults.js";const j={xs:"w-56",sm:"w-64",md:"w-80",lg:"w-96",xl:"w-[28rem]"},N={left:{xs:"rounded-r-(--neba-radius-xs)",sm:"rounded-r-(--neba-radius-sm)",md:"rounded-r-(--neba-radius-md)",lg:"rounded-r-(--neba-radius-lg)",xl:"rounded-r-(--neba-radius-xl)"},right:{xs:"rounded-l-(--neba-radius-xs)",sm:"rounded-l-(--neba-radius-sm)",md:"rounded-l-(--neba-radius-md)",lg:"rounded-l-(--neba-radius-lg)",xl:"rounded-l-(--neba-radius-xl)"},top:{xs:"rounded-b-(--neba-radius-xs)",sm:"rounded-b-(--neba-radius-sm)",md:"rounded-b-(--neba-radius-md)",lg:"rounded-b-(--neba-radius-lg)",xl:"rounded-b-(--neba-radius-xl)"},bottom:{xs:"rounded-t-(--neba-radius-xs)",sm:"rounded-t-(--neba-radius-sm)",md:"rounded-t-(--neba-radius-md)",lg:"rounded-t-(--neba-radius-lg)",xl:"rounded-t-(--neba-radius-xl)"}},$={left:"border-r",right:"border-l",top:"border-b",bottom:"border-t"},_={left:"data-[starting-style]:[translate:-100%_0] data-[ending-style]:[translate:-100%_0]",right:"data-[starting-style]:[translate:100%_0] data-[ending-style]:[translate:100%_0]",top:"data-[starting-style]:[translate:0_-100%] data-[ending-style]:[translate:0_-100%]",bottom:"data-[starting-style]:[translate:0_100%] data-[ending-style]:[translate:0_100%]"},k={left:"flex-row justify-start",right:"flex-row justify-end",top:"flex-col justify-start",bottom:"flex-col justify-end"},C=[v,"relative flex flex-col overflow-hidden","[&[hidden]]:hidden","text-(--neba-fg) bg-(--n-panel-press)","[border-color:var(--n-line)]","[outline:none]"].join(" "),z=["fixed inset-0 z-(--neba-z-portal) bg-(--neba-scrim)","[backdrop-filter:blur(2px)]",f].join(" "),B="env(safe-area-inset-top) solid transparent",D="env(safe-area-inset-bottom) solid transparent",L="env(safe-area-inset-left) solid transparent",T="env(safe-area-inset-right) solid transparent",O={top:{borderTop:B,borderLeft:L,borderRight:T},bottom:{borderBottom:D,borderLeft:L,borderRight:T},left:{borderTop:B,borderBottom:D,borderLeft:L},right:{borderTop:B,borderBottom:D,borderRight:T}},R="border-t [border-color:var(--n-line)]";export const DrawerClose=t.Close;export function Drawer(f){const{side:v="left",mode:B="overlay",size:D="md",color:L="primary",density:T="default",open:P,defaultOpen:E,onOpenChange:M,trigger:A,title:F,headingLevel:S=2,description:V,actions:q,dividers:G=!1,showClose:H,locale:I,closeLabel:J,extent:K,rounded:Q=!0,modal:U=!0,dismissible:W=!0,safeArea:X=!0,keepMounted:Y=!1,className:Z,style:ee,children:ae,...re}=w(f,["size","density","locale"]),ne=d(o,I),te="overlay"===B,le="left"===v||"right"===v,se=H??te,[oe,de]=n.useState(E??!0),ie=l[T][D],be=s[T][D],me=G?`${ie} ${be}`:ie,ue=m(F)||m(V),ce=m(q),fe=void 0===K?null:{[le?"width":"height"]:"number"==typeof K?`${K}px`:K},pe=b(C,p[D],$[v],Q?N[v][D]:"",te?"[box-shadow:var(--neba-shadow-3),var(--neba-plate-glass)]":"[box-shadow:var(--neba-plate-glass)]",te?`[transition:translate_var(--neba-duration)_var(--neba-ease)] ${_[v]}`:"",le?`h-full max-w-full ${void 0===K?j[D]:""}`:"w-full "+(void 0===K?"max-h-[85%]":""),G?"":`${be} ${g[D]}`,Z??""),he=`h${S}`,xe=te?t.Description:"p",ge=b("neba-heading","[&.neba-heading]:m-0 [&.neba-heading]:font-semibold [&.neba-heading]:text-inherit",u[D]),ve=a(r,{children:[ue||se?a("div",{className:`flex shrink-0 items-start gap-3 ${me}`,children:[a("div",{className:`flex min-w-0 flex-1 flex-col ${x[D]}`,children:[m(F)?te?e(t.Title,{render:n.createElement(he),className:ge,children:F}):n.createElement(he,{className:ge},F):null,m(V)?e(xe,{className:`m-0 text-(--neba-muted-fg) ${c[D]}`,children:V}):null]}),se?te?e(t.Close,{"aria-label":J??ne.close,className:h,children:e(i,{})}):e("button",{type:"button","aria-label":J??ne.close,className:h,onClick:()=>{void 0===P&&de(!1),M?.(!1)},children:e(i,{})}):null]}):null,m(ae)?e("div",{className:b("min-h-0 flex-1 overflow-y-auto overscroll-contain",me,G&&(ue||se)?R:"",G?"":"py-1 -my-1"),children:ae}):null,ce?e("div",{className:b("flex shrink-0 flex-wrap items-center justify-end gap-2",me,G?R:""),children:q}):null]});if(!te){const a=P??oe;return a||Y?e("div",{hidden:!a||void 0,className:pe,style:{...y(L,0),...fe,...ee},...re,children:ve}):null}return a(t.Root,{open:P,defaultOpen:E,modal:U,disablePointerDismissal:!W,onOpenChange:(e,a)=>{W||e||"escape-key"!==a.reason?M?.(e):a.cancel()},children:[A?e(t.Trigger,{render:A}):null,a(t.Portal,{keepMounted:Y,children:[e(t.Backdrop,{className:b("neba-portal",z,!0===U?"":"pointer-events-none")}),e(t.Viewport,{className:b("neba-portal fixed inset-0 z-(--neba-z-portal) flex [&[hidden]]:hidden",k[v],!0===U?"":"pointer-events-none"),children:e(t.Popup,{className:b(pe,!0===U?"":"pointer-events-auto"),style:{...y(L,3),...fe,...X?O[v]:null,...ee},...re,children:ve})})]})]})}
|
|
@@ -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{useRender as l}from"@base-ui/react/use-render";import{boxPaddingXClasses as a}from"../box/Box.js";import{transitionProps as s}from"../../internal/animate.js";import{emptyMessages as o,useMessages as i}from"../../internal/i18n.js";import{cx as m,hasContent as c,iconClasses as d,radiusClasses as p,sheetBodyClasses as x,sheetHeaderGapClasses as f,sheetSectionGapClasses as u,sheetTitleClasses as y,
|
|
1
|
+
"use client";import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import*as n from"react";import{useRender as l}from"@base-ui/react/use-render";import{boxPaddingXClasses as a}from"../box/Box.js";import{transitionProps as s}from"../../internal/animate.js";import{emptyMessages as o,useMessages as i}from"../../internal/i18n.js";import{cx as m,hasContent as c,iconClasses as d,radiusClasses as p,sheetBodyClasses as x,sheetHeaderGapClasses as f,sheetSectionGapClasses as u,sheetTitleClasses as y,sheetTitleHeadingClasses as h,surfaceClasses as v,surfaceSlots as b,transitionClasses as g}from"../../internal/styles.js";import{useStyleDefaults as j}from"../../internal/defaults.js";const N={default:{xs:"py-5",sm:"py-6",md:"py-8",lg:"py-10",xl:"py-12"},compact:{xs:"py-3",sm:"py-3.5",md:"py-4",lg:"py-5",xl:"py-6"}},k={xs:"text-[1.25rem]",sm:"text-[1.5rem]",md:"text-[1.75rem]",lg:"text-[2.125rem]",xl:"text-[2.5rem]"},w={solid:[v,"text-(--neba-fg) bg-(--n-panel-hover)","[box-shadow:var(--n-elev),var(--neba-plate-solid)]"].join(" "),outline:[v,"border text-(--neba-fg) bg-(--n-panel)","[border-color:var(--n-line)]","[box-shadow:var(--n-elev),var(--neba-plate-glass)]"].join(" "),text:"text-(--neba-fg) bg-transparent"};function TrayIcon(){return t("svg",{viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[e("path",{d:"M1.75 9.75h3l.9 1.6h4.7l.9-1.6h3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),e("path",{d:"m1.75 9.75 2.1-6a1.5 1.5 0 0 1 1.42-1h5.46a1.5 1.5 0 0 1 1.42 1l2.1 6v2a1.5 1.5 0 0 1-1.5 1.5h-9.5a1.5 1.5 0 0 1-1.5-1.5Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinejoin:"round"})]})}export const Empty=/*@__PURE__*/n.forwardRef(function Empty(v,$){const{variant:E="text",size:L="md",color:z="secondary",density:B="default",elevation:C=0,title:I,icon:T,action:W,locale:F,transition:M,render:R,className:V,style:Z,children:q,...A}=j(v,["size","density","variant","locale"]),D=i(o,F),G=void 0===I?D.title:I,H=void 0===T?e(TrayIcon,{}):T,J=s(M),K=c(G),O=n.isValidElement(R)&&("td"===R.type||"th"===R.type),{role:P,...Q}=A,S="role"in A?P:"status",U=m("flex w-full flex-col items-center justify-center text-center",a[B][L],N[B][L],p[L],u[L],g,w[E],J.className),X={...b(z,C),...J.style},Y=t(r,{children:[c(H)?e("span",{className:`flex items-center text-(--neba-muted-fg) ${k[L]} ${d}`,children:H}):null,K||c(q)?t("div",{className:`flex max-w-prose flex-col items-center ${f[L]}`,children:[K?e("div",{className:`${h} font-semibold ${y[L]}`,children:G}):null,c(q)?e("div",{className:`${x[L]} ${K?"text-(--neba-muted-fg)":""}`,children:q}):null]}):null,c(W)?e("div",{className:"flex flex-wrap items-center justify-center gap-2",children:W}):null]});return l({render:R,ref:$,props:O?{className:V,style:Z,children:e("div",{role:S,className:U,style:X,children:Y}),...Q}:{role:S,className:m(U,V??""),style:{...X,...Z},children:Y,...Q}})});
|
|
@@ -11,8 +11,19 @@ export interface FieldsetProps extends Omit<React.ComponentPropsWithoutRef<'fiel
|
|
|
11
11
|
description?: React.ReactNode;
|
|
12
12
|
/** Disables every control inside at once, the way a `<fieldset>` always has. */
|
|
13
13
|
disabled?: boolean;
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* The type scale of the legend, and the gap between the controls when
|
|
16
|
+
* `spacing` is not given.
|
|
17
|
+
* @default 'md'
|
|
18
|
+
*/
|
|
15
19
|
size?: NebaSize;
|
|
20
|
+
/**
|
|
21
|
+
* The gap between the controls as an exact length, on Tailwind's spacing
|
|
22
|
+
* scale: `5` is `1.25rem`, the same step `gap-5` is. Takes over from the gap
|
|
23
|
+
* `size` picks, leaves the legend's type scale alone, and a `NebaProvider` can
|
|
24
|
+
* set it for every Fieldset.
|
|
25
|
+
*/
|
|
26
|
+
spacing?: number;
|
|
16
27
|
children?: React.ReactNode;
|
|
17
28
|
}
|
|
18
29
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as i}from"react/jsx-runtime";import*as s from"react";import{Fieldset as
|
|
1
|
+
"use client";import{jsx as e,jsxs as i}from"react/jsx-runtime";import*as s from"react";import{Fieldset as r}from"@base-ui/react/fieldset";import{cx as l,hasContent as a,metaTextClasses as d,sheetHeaderGapClasses as t,sheetSectionGapClasses as n,sheetTitleClasses as o}from"../../internal/styles.js";import{spacingValue as m}from"../../internal/grid.js";import{useStyleDefaults as c}from"../../internal/defaults.js";import{FieldsetDisabledContext as f,useFieldsetDisabled as p}from"../../internal/fieldset.js";export const Fieldset=/*@__PURE__*/s.forwardRef(function Fieldset(u,b){const{legend:x,description:j,disabled:g,size:v="md",spacing:h,className:y,style:N,children:w,"aria-describedby":F,...$}=c(u,["size","spacing"]),z=p(g),R=s.useId(),B=a(x),I=a(j);return e(f.Provider,{value:z,children:i(r.Root,{ref:b,disabled:z,className:l("m-0 flex min-w-0 flex-col border-0 p-0",void 0===h?n[v]:"",y??""),style:void 0===h?N:{gap:m(h),...N},"aria-describedby":[F,I?R:void 0].filter(Boolean).join(" ")||void 0,...$,children:[B||I?i("div",{className:`flex min-w-0 flex-col ${t[v]}`,children:[B?e(r.Legend,{className:`p-0 font-semibold ${o[v]}`,children:x}):null,I?e("span",{id:R,className:`text-(--neba-muted-fg) ${d[v]}`,children:j}):null]}):null,w]})})});
|
|
@@ -82,14 +82,6 @@ export interface FilePickerProps extends NebaStyleProps, Omit<React.ComponentPro
|
|
|
82
82
|
*/
|
|
83
83
|
id?: string;
|
|
84
84
|
}
|
|
85
|
-
/**
|
|
86
|
-
* `1.4 MB`, in the units a person reading a file list expects.
|
|
87
|
-
*
|
|
88
|
-
* Base 1000 rather than 1024, and `MB` rather than `MiB`: it is the number every
|
|
89
|
-
* operating system's file browser shows, and a picker that disagrees with the
|
|
90
|
-
* Finder about how big the file is has picked a fight it cannot win.
|
|
91
|
-
*/
|
|
92
|
-
export declare function formatFileSize(bytes: number): string;
|
|
93
85
|
/**
|
|
94
86
|
* A box you drop files on, or click to open the file dialog.
|
|
95
87
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as n}from"react/jsx-runtime";import*as
|
|
1
|
+
"use client";import{jsx as e,jsxs as n}from"react/jsx-runtime";import*as r from"react";import{formatFileSize as t}from"./formatFileSize.js";import{useLayoutEffectOnClient as l}from"../../internal/layout-effect.js";import{useDropZone as a}from"../../internal/drop.js";import{glowClasses as o,spotlightSlot as i,trackPointer as s}from"../../internal/glow.js";import{CloseIcon as c}from"../../internal/icons.js";import{fileMessages as d,fillMessage as u,useMessages as f}from"../../internal/i18n.js";import{controlTextLeadingClasses as m,cx as p,disabledClasses as b,gapClasses as h,hasContent as v,hitAreaClasses as x,iconClasses as g,metaTextClasses as y,radiusClasses as j,readOnlyFilterClasses as k,sheetTitleClasses as N,stackGapClasses as $,surfaceClasses as w,surfaceSlots as z,transitionClasses as C}from"../../internal/styles.js";import{useStyleDefaults as I}from"../../internal/defaults.js";import{useFieldsetDisabled as _}from"../../internal/fieldset.js";const L={default:{xs:"p-4",sm:"p-5",md:"p-6",lg:"p-8",xl:"p-10"},compact:{xs:"p-2",sm:"p-3",md:"p-4",lg:"p-5",xl:"p-6"}},M={solid:[w,"border-2 border-dashed text-(--neba-fg) bg-(--n-panel-hover)","[border-color:var(--n-line)]","[box-shadow:var(--n-elev),var(--neba-plate-glass)]"].join(" "),outline:[w,"border-2 border-dashed text-(--neba-fg) bg-(--n-panel)","[border-color:var(--n-line)]","[box-shadow:var(--n-elev),var(--neba-plate-glass)]"].join(" "),text:"border-2 border-dashed text-(--neba-fg) bg-transparent [border-color:var(--n-line)]"},W={solid:"hover:bg-(--n-panel-press) hover:[border-color:var(--n-line-hover)]",outline:"hover:bg-(--n-panel-hover) hover:[border-color:var(--n-line-hover)]",text:"hover:bg-(--n-soft) hover:[border-color:var(--n-line-hover)]"};function UploadIcon(){return n("svg",{viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[e("path",{d:"M8 10.5V2.75m0 0L5.25 5.5M8 2.75 10.75 5.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),e("path",{d:"M2.75 9.75v1.75a1.75 1.75 0 0 0 1.75 1.75h7a1.75 1.75 0 0 0 1.75-1.75V9.75",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function E(e,n){const r=e.name.toLowerCase(),t=e.type.toLowerCase();return n.split(",").map(e=>e.trim().toLowerCase()).filter(Boolean).some(e=>e.startsWith(".")?r.endsWith(e):e.endsWith("/*")?t.startsWith(`${e.slice(0,-1)}`):t===e)}export const FilePicker=/*@__PURE__*/r.forwardRef(function FilePicker(w,F){const{variant:R="outline",size:S="md",color:T="primary",density:P="default",elevation:V=0,accept:q,multiple:A=!1,maxSize:B,maxFiles:D,value:O,defaultValue:U,onFilesChange:H,onReject:Y,label:G,description:J,error:K,invalid:Q,title:X,hint:Z,icon:ee,showList:ne=!0,removeLabel:re,fullWidth:te=!0,disabled:le,readOnly:ae=!1,required:oe=!1,name:ie,id:se,locale:ce,className:de,style:ue,...fe}=I(w,["size","density","variant","locale"]),me=_(le),pe=f(d,ce),be=re??(e=>u(pe.remove,{name:e})),he=r.useRef(null);r.useImperativeHandle(F,()=>he.current);const[ve,xe]=r.useState(()=>[...U??[]]),ge=r.useMemo(()=>O?[...O]:ve,[O,ve]),ye=v(K),je=Q??ye,ke=je?"danger":T,Ne=me||ae,$e=r.useId(),we=r.useId(),ze=r.useId(),Ce=se??ze,Ie=r.useCallback(e=>{O||xe(e),H?.(e)},[H,O]),_e=r.useCallback(e=>{const n=[],r=[],t=A?D??Number.POSITIVE_INFINITY:1,l=A?ge.length:0;for(const a of e)q&&!E(a,q)?r.push({file:a,reason:"type"}):void 0!==B&&a.size>B?r.push({file:a,reason:"size"}):l+n.length>=t?r.push({file:a,reason:"count"}):n.push(a);return{kept:n,rejections:r}},[q,ge.length,D,B,A]),Le=r.useCallback(e=>{const{kept:n,rejections:r}=_e(e);r.length>0&&Y?.(r),n.length>0&&Ie(A?[...ge,...n]:n)},[_e,Ie,ge,A,Y]),{over:Me,handlers:We}=a(Ne?void 0:Le),Ee=r.useRef(null),Fe=r.useRef(null),Re=r.useRef(null);l(()=>{const e=Re.current;if(null===e)return;Re.current=null;const n=Fe.current?.querySelectorAll("li button")??[],r=n[Math.min(e,n.length-1)]??Ee.current;r?.focus()},[ge]);const Se=r.useCallback(()=>{const e=he.current;if(e&&"undefined"!=typeof DataTransfer)try{const n=new DataTransfer;ge.forEach(e=>n.items.add(e)),e.files=n.files}catch{}},[ge]);r.useEffect(()=>{Se();const e=he.current;return e?.addEventListener("cancel",Se),()=>e?.removeEventListener("cancel",Se)},[Se]);const Te=p("flex w-full flex-col items-center justify-center text-center","cursor-pointer select-none",L[P][S],j[S],h[S],C,g,"focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-2",me?`${b[R]} border-2 border-dashed`:ae?`${M[R]} ${k} cursor-default`:M[R],Ne?"":`${W[R]} ${o}`,Me&&!Ne?"bg-(--n-soft-press) [border-color:var(--n-ring)]":"");return n("div",{className:p("flex-col align-top",$[S],te?"flex w-full":"inline-flex",de??""),style:{...z(ke,V),...Ne?void 0:i,...ue},...fe,children:[v(G)?e("span",{id:we,className:[y[S],"font-medium",me?"text-(--neba-disabled-fg)":"text-(--neba-fg)"].join(" "),children:G}):null,n("div",{className:"flex w-full flex-col",...We,children:[n("button",{ref:Ee,onPointerMove:s(void 0,!Ne),type:"button",id:Ce,disabled:me,"aria-labelledby":v(G)?`${we} ${Ce}`:void 0,"aria-describedby":v(J)||ye?$e:void 0,"aria-invalid":je||void 0,className:Te,onClick:()=>{Ne||he.current&&(he.current.value="",he.current.click())},children:[void 0===ee?e("span",{className:"flex items-center text-(--n-accent) [&_svg]:size-[1.8em]",children:e(UploadIcon,{})}):v(ee)?e("span",{className:"flex items-center text-(--n-accent) [&_svg]:size-[1.8em]",children:ee}):null,e("span",{className:`font-medium ${N[S]}`,children:X??pe.title}),v(Z)?e("span",{className:`text-(--neba-muted-fg) ${y[S]}`,children:Z}):null]}),e("input",{ref:he,type:"file",name:ie,accept:q,multiple:A,required:oe&&0===ge.length,disabled:me,tabIndex:-1,"aria-hidden":"true",className:"absolute size-px overflow-hidden opacity-0 [clip-path:inset(50%)]",onChange:e=>Le(Array.from(e.target.files??[]))})]}),ne&&ge.length>0?e("ul",{ref:Fe,role:"list",className:`flex w-full flex-col ${$[S]} m-0 list-none p-0`,children:ge.map((r,l)=>n("li",{className:["flex w-full items-center gap-2 px-2 py-1.5",j.xs,m[S],"bg-(--n-soft) text-(--neba-fg)"].join(" "),children:[e("span",{className:"min-w-0 flex-1 truncate",children:r.name}),e("span",{className:`shrink-0 text-(--neba-muted-fg) tabular-nums ${y[S]}`,children:t(r.size)}),Ne?null:e("button",{type:"button","aria-label":be(r.name),className:["relative inline-flex shrink-0 cursor-pointer items-center justify-center rounded-full",x,"size-[1.3em] text-(--neba-muted-fg) opacity-70","[transition:opacity_var(--neba-duration)_var(--neba-ease),color_var(--neba-duration)_var(--neba-ease)]","[&_svg]:size-[0.9em]","hover:text-(--neba-fg) hover:opacity-100 focus-visible:opacity-100","focus-visible:[outline:2px_solid_var(--n-ring)] focus-visible:outline-offset-1"].join(" "),onClick:e=>{Re.current=e.currentTarget===document.activeElement?l:null,Ie(ge.filter((e,n)=>n!==l))},children:e(c,{})})]},`${r.name}-${r.size}-${r.lastModified}-${l}`))}):null,v(J)&&!ye?e("span",{id:$e,className:`${y[S]} text-(--neba-muted-fg)`,children:J}):null,ye?e("span",{id:$e,className:`${y[S]} text-(--n-accent)`,children:K}):null]})});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `1.4 MB`, in the units a person reading a file list expects.
|
|
3
|
+
*
|
|
4
|
+
* Base 1000 rather than 1024, and `MB` rather than `MiB`: it is the number every
|
|
5
|
+
* operating system's file browser shows, and a picker that disagrees with the
|
|
6
|
+
* Finder about how big the file is has picked a fight it cannot win.
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatFileSize(bytes: number): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function formatFileSize(e){if(e<1e3)return`${e} B`;const t=["kB","MB","GB","TB"];let r=e/1e3,n=0;for(;r>=1e3&&n<t.length-1;)r/=1e3,n+=1;return`${r<10?r.toFixed(1):Math.round(r)} ${t[n]}`}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{FilePicker
|
|
1
|
+
export{FilePicker}from"./FilePicker.js";export{formatFileSize}from"./formatFileSize.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as a from"react";import{
|
|
1
|
+
"use client";import{jsx as e,jsxs as t}from"react/jsx-runtime";import*as a from"react";import{useLayoutEffectOnClient as n}from"../../internal/layout-effect.js";import{useRender as r}from"@base-ui/react/use-render";import{barMinHeightClasses as o,BottomNavigationContext as s}from"../../internal/bottom-navigation.js";import{observeResize as i}from"../../internal/observe.js";import{cx as l,surfaceClasses as d,surfaceSlots as f,transitionClasses as u}from"../../internal/styles.js";import{useStyleDefaults as p}from"../../internal/defaults.js";const m={solid:[d,"text-(--neba-fg) bg-(--n-panel-press)","[box-shadow:var(--n-elev),var(--neba-plate-solid)]"].join(" "),outline:[d,"border text-(--neba-fg) bg-(--n-panel-hover)","[border-color:var(--n-line)]","[box-shadow:var(--n-elev),var(--neba-plate-glass)]"].join(" "),text:"text-(--neba-fg) bg-transparent"},v={static:"relative mx-auto w-fit",absolute:"absolute inset-x-0 bottom-(--n-nav-offset) z-30 mx-auto w-fit",sticky:"sticky bottom-(--n-nav-offset) z-30 mx-auto w-fit",fixed:"fixed inset-x-0 bottom-(--n-nav-offset) z-40 mx-auto w-fit"},c={default:{xs:"p-1",sm:"p-1",md:"p-1.5",lg:"p-1.5",xl:"p-2"},compact:{xs:"p-0.5",sm:"p-0.5",md:"p-1",lg:"p-1",xl:"p-1"}},b={solid:`${d} bg-(--n-panel-hover) [box-shadow:var(--neba-shadow-1),var(--neba-plate-glass)]`,outline:`${d} bg-(--n-soft-hover) [box-shadow:var(--neba-shadow-1),var(--neba-plate-glass)]`,text:"bg-(--n-soft-hover)"},x={xs:"gap-0.5",sm:"gap-0.5",md:"gap-1",lg:"gap-1",xl:"gap-1.5"};export const FloatingBottomNavigation=/*@__PURE__*/a.forwardRef(function FloatingBottomNavigation(d,g){const{variant:y="outline",size:h="md",color:w="primary",density:j="default",elevation:$=2,value:z,defaultValue:N=null,onValueChange:k,position:A="fixed",offset:P=16,labels:C="selected",safeArea:E=!0,disabled:L=!1,label:R,render:B,className:F,style:S,children:V,...W}=p(d,["size","density","variant"]),[q,H]=a.useState(N),M=void 0!==z,T=M?z:q,D=a.useCallback(e=>{M||H(e),k?.(e)},[M,k]),G=a.useMemo(()=>({value:T??null,change:D,size:h,density:j,labels:C,disabled:L,floating:!0}),[T,D,h,j,C,L]),I=a.useRef(null),J=a.useRef(null),K=a.useCallback(e=>{I.current=e,"function"==typeof g?g(e):g&&(g.current=e)},[g]),O=a.useCallback(e=>{const t=I.current,a=J.current;if(!t||!a)return;const n=t.querySelector("[data-nav-item][aria-current]");if(a.hidden=!n,!n)return void a.removeAttribute("data-ready");const r=!e||!a.hasAttribute("data-ready");r&&a.removeAttribute("data-ready"),a.style.setProperty("--n-nav-x",`${n.offsetLeft}px`),a.style.setProperty("--n-nav-y",`${n.offsetTop}px`),a.style.setProperty("--n-nav-w",`${n.offsetWidth}px`),a.style.setProperty("--n-nav-h",`${n.offsetHeight}px`),r&&a.offsetWidth,a.setAttribute("data-ready","")},[]);n(()=>{O(!0)},[O,T,y,h,j,C,V]),a.useEffect(()=>{const e=I.current;if(!e)return;const t=e=>{"grid-template-columns"===e.propertyName&&O(!0)},a=i(e,()=>O(!1));return e.addEventListener("transitionend",t),()=>{a(),e.removeEventListener("transitionend",t)}},[O]);const Q="number"==typeof P?`${P}px`:P,U=l("flex max-w-full min-w-0 items-center rounded-full",o[h],c[j][h],x[h],m[y],v[A],u,F);return r({render:B??e("nav",{}),ref:K,props:{"aria-label":R,className:U,style:{...f(w,$),"--n-nav-offset":E?`calc(${Q} + env(safe-area-inset-bottom))`:Q,...S},children:t(s.Provider,{value:G,children:[null!=T?e("span",{ref:J,"aria-hidden":"true",className:l("pointer-events-none absolute rounded-full","top-(--n-nav-y) left-(--n-nav-x) h-(--n-nav-h) w-(--n-nav-w)",b[y],"[transition-property:left,top,width,height]","[transition-timing-function:var(--neba-ease)]","[transition-duration:0ms] data-[ready]:[transition-duration:var(--neba-duration)]","motion-reduce:[transition-duration:0ms]")}):null,V]}),...W}})});
|
|
@@ -36,11 +36,17 @@ export interface FormProps extends Omit<React.ComponentPropsWithoutRef<'form'>,
|
|
|
36
36
|
*/
|
|
37
37
|
onSubmit?: (values: Record<string, unknown>) => void;
|
|
38
38
|
/**
|
|
39
|
-
* The gap between the form's children
|
|
40
|
-
* rung of the ladder it stacks on.
|
|
39
|
+
* The gap between the form's children, when `spacing` is not given. A form is
|
|
40
|
+
* a stack, and this is which rung of the ladder it stacks on.
|
|
41
41
|
* @default 'md'
|
|
42
42
|
*/
|
|
43
43
|
size?: NebaSize;
|
|
44
|
+
/**
|
|
45
|
+
* The gap between the form's children as an exact length, on Tailwind's
|
|
46
|
+
* spacing scale: `5` is `1.25rem`, the same step `gap-5` is. Takes over from
|
|
47
|
+
* the gap `size` picks, and a `NebaProvider` can set it for every Form.
|
|
48
|
+
*/
|
|
49
|
+
spacing?: number;
|
|
44
50
|
children?: React.ReactNode;
|
|
45
51
|
}
|
|
46
52
|
export declare const Form: React.ForwardRefExoticComponent<FormProps & React.RefAttributes<HTMLFormElement>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as e}from"react/jsx-runtime";import*as r from"react";import{Form as t}from"@base-ui/react/form";import{cx as o,sheetSectionGapClasses as n}from"../../internal/styles.js";import{useStyleDefaults as a}from"../../internal/defaults.js";export const Form=/*@__PURE__*/r.forwardRef(function Form(r,
|
|
1
|
+
"use client";import{jsx as e}from"react/jsx-runtime";import*as r from"react";import{Form as t}from"@base-ui/react/form";import{cx as o,sheetSectionGapClasses as n}from"../../internal/styles.js";import{spacingValue as i}from"../../internal/grid.js";import{useStyleDefaults as a}from"../../internal/defaults.js";export const Form=/*@__PURE__*/r.forwardRef(function Form(r,s){const{validationMode:m="onSubmit",errors:l,onSubmit:c,size:f="md",spacing:d,className:u,style:p,children:g,...b}=a(r,["size","spacing"]);return e(t,{ref:s,validationMode:m,errors:l,onFormSubmit:c?(e,r)=>c(function(e,r){if(!(r instanceof HTMLFormElement))return e;const t=r.querySelectorAll("input[data-neba-repeats][name]:not(:disabled)");if(0===t.length)return e;const o=new FormData(r),n={...e};for(const e of t)n[e.name]=o.getAll(e.name);return n}(e,r.event.target)):void 0,className:o("flex flex-col",void 0===d?n[f]:"",u??""),style:void 0===d?p:{gap:i(d),...p},...b,children:g})});
|