@alneas/appkit-react 0.3.0 → 0.3.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.
Files changed (33) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/consumer-ai/api-index.json +10 -42
  3. package/consumer-ai/package-context.json +2 -2
  4. package/dist/ai/generative-ui/GenerativeUIRenderer.cjs.map +1 -1
  5. package/dist/ai/generative-ui/GenerativeUIRenderer.d.cts +5 -5
  6. package/dist/ai/generative-ui/GenerativeUIRenderer.d.ts +5 -5
  7. package/dist/ai/generative-ui/GenerativeUIRenderer.js.map +1 -1
  8. package/dist/consumer-ai/api-index.json +10 -42
  9. package/dist/consumer-ai/package-context.json +2 -2
  10. package/dist/tools/components/data-table/data-table.cjs +1 -1
  11. package/dist/tools/components/data-table/data-table.cjs.map +1 -1
  12. package/dist/tools/components/data-table/data-table.js +241 -240
  13. package/dist/tools/components/data-table/data-table.js.map +1 -1
  14. package/dist/tools/components/kanban/kanban-primitives.cjs +1 -1
  15. package/dist/tools/components/kanban/kanban-primitives.cjs.map +1 -1
  16. package/dist/tools/components/kanban/kanban-primitives.d.cts +2 -2
  17. package/dist/tools/components/kanban/kanban-primitives.d.ts +2 -2
  18. package/dist/tools/components/kanban/kanban-primitives.js +49 -48
  19. package/dist/tools/components/kanban/kanban-primitives.js.map +1 -1
  20. package/dist/tools/components/ui/dnd/Draggable.cjs +1 -1
  21. package/dist/tools/components/ui/dnd/Draggable.cjs.map +1 -1
  22. package/dist/tools/components/ui/dnd/Draggable.js +14 -13
  23. package/dist/tools/components/ui/dnd/Draggable.js.map +1 -1
  24. package/dist/tools/components/ui/dnd/use-accessible-drag-ref.cjs +2 -0
  25. package/dist/tools/components/ui/dnd/use-accessible-drag-ref.cjs.map +1 -0
  26. package/dist/tools/components/ui/dnd/use-accessible-drag-ref.d.cts +8 -0
  27. package/dist/tools/components/ui/dnd/use-accessible-drag-ref.d.ts +8 -0
  28. package/dist/tools/components/ui/dnd/use-accessible-drag-ref.js +27 -0
  29. package/dist/tools/components/ui/dnd/use-accessible-drag-ref.js.map +1 -0
  30. package/docs/migration.md +24 -4
  31. package/docs/tools.md +8 -0
  32. package/llms-full.txt +32 -4
  33. package/package.json +2 -2
@@ -1,2 +1,2 @@
1
- "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../ui/lib/utils.cjs"),n=require("../../../ui/components/ui/button-variants.cjs"),r=require("../../../ui/components/ui/button-components.cjs"),i=require("../../../ui/components/ui/input.cjs"),a=require("../../../ui/components/ui/dropdown-menu.cjs"),o=require("../../../ui/components/ui/table.cjs"),s=require("../../paraglide/messages/datatable_filterplaceholder2.cjs"),c=require("../../paraglide/messages/datatable_gotofirstpage4.cjs"),l=require("../../paraglide/messages/datatable_gotolastpage4.cjs"),u=require("../../paraglide/messages/datatable_gotonextpage4.cjs"),d=require("../../paraglide/messages/datatable_gotopreviouspage4.cjs"),f=require("../../paraglide/messages/datatable_items1.cjs"),p=require("../../paraglide/messages/datatable_noresults2.cjs"),m=require("../../paraglide/messages/datatable_page1.cjs"),h=require("../../paraglide/messages/datatable_rowsperpage3.cjs"),g=require("../../paraglide/messages/datatable_rowsselected2.cjs"),_=require("../../paraglide/messages/datatable_togglecolumns2.cjs"),ee=require("../../paraglide/messages/datatable_view1.cjs"),te=require("./table-engine.cjs"),v=require("./column-order.cjs"),y=require("./table-store.cjs");let b=require("react/jsx-runtime"),x=require("react");x=e.__toESM(x,1);let S=require("lucide-react"),ne=require("@dnd-kit/react"),C=require("@dnd-kit/dom"),re=require("@dnd-kit/collision"),ie=require("@dnd-kit/react/sortable"),w=require("@tanstack/react-table");function ae({header:e,enableColumnOrdering:n=!0,enableMultiSort:r=!1,sortIndex:i,sortableIndex:a,sortableGroup:s,registeredIds:c}){let l=n&&!e.isPlaceholder&&e.column.columns.length===0,{ref:u,handleRef:d,isDragging:f}=(0,ie.useSortable)({id:e.id,index:a,group:s,type:s,accept:s,data:{columnId:e.column.id,groupId:s,columnIds:c},disabled:!l,collisionDetector:re.closestCenter}),p=e.column.getCanSort(),m=e.column.getIsSorted(),h=m!==!1,g=p&&typeof e.column.columnDef.header!=`function`?`button`:`span`,_=n?{opacity:f?.8:1,zIndex:+!!f,position:`relative`,cursor:`move`}:{};return(0,b.jsxs)(o.TableHead,{ref:l?u:void 0,colSpan:e.colSpan,"aria-hidden":e.isPlaceholder||void 0,style:_,"aria-sort":p?m===`asc`?`ascending`:m===`desc`?`descending`:`none`:void 0,className:t.cn(`bg-primary/10 text-primary font-bold border-b border-primary/20`,p&&`cursor-pointer select-none hover:bg-primary/20 transition-colors`),onClick:p?t=>{p&&!t.target.closest(`button, input, select, [role=checkbox]`)&&(r&&t.shiftKey?e.column.toggleSorting(void 0,!0):e.column.toggleSorting())}:void 0,children:[l&&(0,b.jsx)(`button`,{type:`button`,ref:d,"aria-label":`Reorder column ${e.column.id}`,className:`inline-flex h-6 w-6 items-center justify-center cursor-grab`,children:(0,b.jsx)(S.GripVertical,{className:`h-3 w-3`,"aria-hidden":`true`})}),e.isPlaceholder?null:(0,b.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,b.jsx)(g,{className:t.cn(h&&`font-semibold`),...g===`button`?{type:`button`,onClick:t=>{t.stopPropagation(),e.column.toggleSorting(void 0,r&&t.shiftKey)}}:{},children:(0,w.flexRender)(e.column.columnDef.header,e.getContext())}),h&&(0,b.jsxs)(`span`,{className:`inline-flex items-center text-xs`,children:[m===`asc`?(0,b.jsx)(S.ChevronUp,{className:`h-3.5 w-3.5`}):(0,b.jsx)(S.ChevronDown,{className:`h-3.5 w-3.5`}),r&&i!==void 0&&i>=0&&(0,b.jsx)(`span`,{className:`text-[10px] ml-0.5`,children:i+1})]})]})]})}function oe({columns:e,data:n,variant:a=`default`,filterContent:c,storageKey:l,enableSortingByDefault:u=!0,enableMultiSort:d=!1,showRowNumber:m=!1,itemCount:h,onAdd:g,pageCount:_,rowCount:ee,onPaginationChange:re,onSortingChange:oe,onColumnFiltersChange:le,onRowClick:E,onSelectionChange:D,rowIdField:O=`id`,manualPagination:k=!1,manualSorting:ue=!1,manualFiltering:de=!1,filterColumn:A,sorting:j,pagination:M,enableColumnOrdering:N=!0,containerClassName:P,tableClassName:F,pageSizeOptions:I=[10,20,30,50,100],filterLayout:L=`inline`,defaultFilterOpen:fe=!1,activeFiltersContent:R}){"use no memo";let pe=y.useDataTableStore(e=>e.getTableSettings),me=y.useDataTableStore(e=>e.setTableSettings),z=y.useDataTableStore(e=>e._hasHydrated),B=x.useSyncExternalStore(x.useCallback(()=>()=>{},[]),()=>!0,()=>!1),[V,he]=x.useState(fe),[ge,_e]=x.useState(j||[]),[H,ve]=x.useState([]),[U,ye]=x.useState({}),[be,xe]=x.useState({}),[Se,Ce]=x.useState(M||{pageIndex:0,pageSize:10}),[W,G]=x.useState(v.getLeafColumnIds(e)),we=M!==void 0,K=j??ge,q=M??Se,Te=e=>{let t=typeof e==`function`?e(K):e;j===void 0&&_e(t),oe?.(t)},Ee=e=>{let t=typeof e==`function`?e(q):e;M===void 0&&Ce(t),re?.(t)},[J,De]=x.useState(null),Y=x.useMemo(()=>JSON.stringify([...m?[`rowNumber`]:[],...v.getLeafColumnIds(e)]),[e,m]),X=x.useMemo(()=>new Set(JSON.parse(Y)),[Y]),Z=l?JSON.stringify([l,Y,!!j,!!M]):null;if(z&&l&&J!==Z){De(Z);let e=pe(l);if(e){if(!j&&e.sorting&&e.sorting.length>0){let t=e.sorting.filter(e=>X.has(e.id));t.length>0&&_e(t)}if(e.columnVisibility&&Object.keys(e.columnVisibility).length>0){let t={};for(let[n,r]of Object.entries(e.columnVisibility))X.has(n)&&(t[n]=r);Object.keys(t).length>0&&ye(t)}if(!M&&e.pageSize&&e.pageSize!==10&&Ce(t=>({...t,pageSize:e.pageSize})),e.columnOrder&&e.columnOrder.length>0){let t=e.columnOrder.filter(e=>X.has(e)),n=new Set(t),r=Array.from(X).filter(e=>!n.has(e)),i=[...t,...r];i.length>0&&G(i)}}}let Oe=x.useMemo(()=>({id:`rowNumber`,header:`No`,enableSorting:!1,cell:({row:e,table:t})=>{let n=t.store.state.pagination;return n?n.pageIndex*n.pageSize+e.index+1:e.index+1}}),[]),ke=x.useMemo(()=>{let t=m?[Oe,...e]:e;return u?t.map(e=>({...e,enableSorting:e.enableSorting!==!1})):t},[m,e,Oe,u]),Ae=x.useCallback(e=>{if(O)return O.split(`_`).reduce((e,t)=>{if(e&&typeof e==`object`&&t!==`__proto__`&&t!==`constructor`&&t!==`prototype`&&Object.prototype.hasOwnProperty.call(e,t))return e[t]},e)},[O]);x.useEffect(()=>{l&&z&&J===Z&&me(l,{columnOrder:W,columnVisibility:U,sorting:K,pageSize:q.pageSize})},[l,W,U,K,q.pageSize,me,z,J,Z]),x.useEffect(()=>{de&&le&&le(H)},[H,de,le]);let Q=(0,w.useTable)({features:te.dataTableFeatures,data:n,columns:ke,pageCount:k?_:void 0,rowCount:k?ee:void 0,getRowId:O?(e,t)=>{let n=O.split(`_`).reduce((e,t)=>{if(e&&typeof e==`object`&&t in e)return e[t]},e);return String(n===void 0?t:n)}:void 0,state:{sorting:K,columnFilters:H,columnVisibility:U,rowSelection:be,pagination:q,columnOrder:W},enableRowSelection:!0,enableMultiSort:d,onRowSelectionChange:xe,onSortingChange:Te,onColumnFiltersChange:ve,onColumnVisibilityChange:ye,onPaginationChange:Ee,onColumnOrderChange:G,autoResetPageIndex:k||we?!1:void 0,manualPagination:k,manualSorting:ue,manualFiltering:de});x.useEffect(()=>{D&&D(Q.getFilteredSelectedRowModel().rows.map(e=>e.original))},[be,Q,D]);let je=x.useRef(null),Me=x.useCallback(e=>{let t=e.operation.source;t&&Array.isArray(t.data.columnIds)&&(je.current={sourceId:String(t.id),groupId:t.data.groupId,ids:[...t.data.columnIds],leafIds:Q.getAllLeafColumns().map(e=>e.id),order:[...W]})},[Q,W]),Ne=x.useCallback(e=>{let t=je.current;je.current=null;let{source:n,target:r}=e.operation;if(e.canceled||!N||!t||!r||!(0,ie.isSortable)(n)||String(n.id)!==t.sourceId)return;let i=Q.getAllLeafColumns().map(e=>e.id),a=Q.getHeaderGroups().find(e=>e.id===t.groupId)?.headers.filter(e=>!e.isPlaceholder&&e.column.columns.length===0).map(e=>e.column.id);a&&JSON.stringify(a)===JSON.stringify(t.ids)&&JSON.stringify(i)===JSON.stringify(t.leafIds)&&JSON.stringify(W)===JSON.stringify(t.order)&&G(e=>v.reorderVisibleColumns(e,i,t.ids,n.data.columnId,n.initialIndex,n.index))},[Q,W,N]),Pe=x.useCallback(e=>K.findIndex(t=>t.id===e),[K]),Fe=x.useCallback(()=>(0,b.jsx)(ne.DragDropProvider,{sensors:e=>[...e.filter(e=>e!==C.PointerSensor),C.PointerSensor.configure({activationConstraints:[new C.PointerActivationConstraints.Distance({value:8})]})],plugins:e=>[...e,C.Feedback.configure({feedback:`clone`,dropAnimation:{duration:0}})],onDragStart:Me,onDragEnd:Ne,children:(0,b.jsx)(`div`,{className:t.cn(`rounded-md border`,F),children:(0,b.jsxs)(o.Table,{children:[(0,b.jsx)(o.TableHeader,{children:Q.getHeaderGroups().map(e=>{let t=e.headers.filter(e=>!e.isPlaceholder&&e.column.columns.length===0).map(e=>e.column.id);return(0,b.jsx)(o.TableRow,{children:e.headers.map(n=>(0,b.jsx)(ae,{header:n,enableColumnOrdering:N,enableMultiSort:d,sortIndex:Pe(n.column.id),sortableIndex:t.indexOf(n.column.id),sortableGroup:e.id,registeredIds:t},n.id))},e.id)})}),(0,b.jsx)(o.TableBody,{children:Q.getRowModel().rows?.length?Q.getRowModel().rows.map(e=>(0,b.jsx)(o.TableRow,{"data-state":e.getIsSelected()&&`selected`,onClick:()=>E&&E(Ae(e.original)),className:E?`cursor-pointer hover:bg-muted/50`:void 0,children:e.getVisibleCells().map(e=>(0,b.jsx)(o.TableCell,{children:(0,w.flexRender)(e.column.columnDef.cell,e.getContext())},e.id))},e.id)):(0,b.jsx)(o.TableRow,{children:(0,b.jsx)(o.TableCell,{colSpan:ke.length,className:`h-24 text-center`,children:p.dataTable_noResults()})})})]})})}),[Me,Ne,Q,ke,W,N,d,Pe,E,Ae,F]),$=()=>(0,b.jsx)(`div`,{className:t.cn(`rounded-md border`,F),children:(0,b.jsx)(o.Table,{children:(0,b.jsx)(o.TableBody,{children:(0,b.jsx)(o.TableRow,{children:(0,b.jsx)(o.TableCell,{className:`h-24 text-center`,children:(0,b.jsx)(`div`,{className:`text-muted-foreground`,children:`Loading...`})})})})})});return a===`minimal`?(0,b.jsxs)(`div`,{className:t.cn(`space-y-4`,P),children:[B?Fe():$(),(0,b.jsx)(se,{table:Q,pageSizeOptions:I})]}):a===`toolbar`?(0,b.jsxs)(`div`,{className:t.cn(`relative h-full`,P),children:[g&&(0,b.jsx)(`div`,{className:`absolute left-0 top-0 w-full h-full z-10 pointer-events-none`,children:(0,b.jsx)(`div`,{className:`fixed right-4 bottom-10 pointer-events-auto`,children:(0,b.jsx)(r.Button,{type:`button`,size:`icon`,"aria-label":`Add row`,onClick:g,className:`w-12 h-12 rounded-full shadow-lg`,children:(0,b.jsx)(S.Plus,{className:`w-6 h-6`})})})}),(0,b.jsxs)(`div`,{className:`relative h-full flex flex-col`,children:[(0,b.jsxs)(`div`,{className:`bg-muted p-2 rounded-t-md grid grid-cols-1 sm:grid-cols-[1fr_minmax(0,auto)_1fr] items-center gap-2`,children:[(0,b.jsxs)(`div`,{className:`flex flex-wrap justify-center items-center gap-2 sm:col-start-2 sm:col-end-3`,children:[(0,b.jsx)(T,{table:Q}),c&&L===`inline`&&c,c&&L===`panel`&&(0,b.jsxs)(r.Button,{type:`button`,variant:V?`default`:`outline`,size:`sm`,onClick:()=>he(!V),className:`h-8 gap-1.5`,children:[(0,b.jsx)(S.Filter,{className:`h-4 w-4`}),(0,b.jsx)(`span`,{children:`フィルター`})]})]}),(0,b.jsxs)(`div`,{className:`flex items-center gap-3 justify-center sm:justify-end sm:col-start-3 sm:col-end-4`,children:[(0,b.jsx)(ce,{table:Q,pageSizeOptions:I}),typeof h==`number`&&(0,b.jsx)(`span`,{className:`text-sm text-muted-foreground whitespace-nowrap`,children:`${h.toLocaleString()} ${f.dataTable_items()}`})]})]}),c&&L===`panel`&&(0,b.jsx)(`div`,{className:t.cn(`border-b transition-all duration-200 ease-in-out overflow-hidden bg-background`,V?`max-h-[500px] p-4`:`max-h-0 p-0 border-none`),children:c}),R&&(0,b.jsx)(`div`,{className:`bg-background px-4 py-1.5 border-b`,children:R}),(0,b.jsx)(`div`,{className:`flex-1 overflow-auto`,children:B?Fe():$()})]})]}):(0,b.jsxs)(`div`,{className:t.cn(`space-y-4`,P),children:[(0,b.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,b.jsx)(`div`,{className:`flex items-center py-4`,children:A&&(0,b.jsx)(i.Input,{placeholder:s.dataTable_filterPlaceholder({column:A}),value:Q.getColumn(A)?.getFilterValue()??``,onChange:e=>Q.getColumn(A)?.setFilterValue(e.target.value),className:`max-w-sm`})}),(0,b.jsx)(T,{table:Q})]}),R&&(0,b.jsx)(`div`,{className:`border rounded-md bg-background px-3 py-1`,children:R}),B?Fe():$(),(0,b.jsx)(se,{table:Q,pageSizeOptions:I}),g&&(0,b.jsx)(`div`,{className:`fixed right-4 bottom-10 z-10`,children:(0,b.jsx)(r.Button,{type:`button`,size:`icon`,onClick:g,className:`w-12 h-12 rounded-full shadow-lg`,children:(0,b.jsx)(S.Plus,{className:`w-6 h-6`})})})]})}function T({table:e}){return(0,b.jsxs)(a.DropdownMenu,{children:[(0,b.jsxs)(a.DropdownMenuTrigger,{className:n.buttonVariants({variant:`default`,size:`sm`,className:`h-8`}),children:[(0,b.jsx)(S.Settings2,{className:`mr-2 h-4 w-4`}),ee.dataTable_view()]}),(0,b.jsx)(a.DropdownMenuContent,{align:`end`,className:`w-40`,children:(0,b.jsxs)(a.DropdownMenuGroup,{children:[(0,b.jsx)(a.DropdownMenuLabel,{children:_.dataTable_toggleColumns()}),(0,b.jsx)(a.DropdownMenuSeparator,{}),e.getAllColumns().filter(e=>e.accessorFn!==void 0&&e.getCanHide()).map(e=>(0,b.jsx)(a.DropdownMenuCheckboxItem,{className:`capitalize`,checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:typeof e.columnDef.header==`string`?e.columnDef.header:e.id},e.id))]})})]})}function se({table:e,pageSizeOptions:t=[10,20,30,50,100]}){return(0,b.jsxs)(`div`,{className:`flex items-center justify-between px-2`,children:[(0,b.jsx)(`div`,{className:`flex-1 text-sm text-muted-foreground`,children:g.dataTable_rowsSelected({selected:e.getFilteredSelectedRowModel().rows.length,total:e.getFilteredRowModel().rows.length})}),(0,b.jsxs)(`div`,{className:`flex items-center space-x-6 lg:space-x-8`,children:[(0,b.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,b.jsx)(`p`,{className:`text-sm font-medium`,children:h.dataTable_rowsPerPage()}),(0,b.jsx)(`select`,{"aria-label":h.dataTable_rowsPerPage(),value:`${e.store.state.pagination.pageSize}`,onChange:t=>{e.setPageSize(Number(t.target.value))},className:`h-8 w-fit min-w-16 rounded-md border border-input bg-background px-2 py-1 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,children:t.map(e=>(0,b.jsx)(`option`,{value:`${e}`,children:e},e))})]}),(0,b.jsx)(`div`,{className:`flex w-24 items-center justify-center text-sm font-medium`,children:m.dataTable_page({current:e.store.state.pagination.pageIndex+1,total:e.getPageCount()})}),(0,b.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,b.jsxs)(r.Button,{variant:`default`,size:`icon`,className:`hidden h-8 w-8 lg:flex hover:bg-primary/90`,"aria-label":c.dataTable_goToFirstPage(),onClick:()=>e.setPageIndex(0),disabled:!e.getCanPreviousPage(),children:[(0,b.jsx)(`span`,{className:`sr-only`,children:c.dataTable_goToFirstPage()}),(0,b.jsx)(S.ChevronsLeft,{className:`h-4 w-4`})]}),(0,b.jsxs)(r.Button,{variant:`default`,size:`icon`,className:`h-8 w-8 hover:bg-primary/90`,"aria-label":d.dataTable_goToPreviousPage(),onClick:()=>e.previousPage(),disabled:!e.getCanPreviousPage(),children:[(0,b.jsx)(`span`,{className:`sr-only`,children:d.dataTable_goToPreviousPage()}),(0,b.jsx)(S.ChevronLeft,{className:`h-4 w-4`})]}),(0,b.jsxs)(r.Button,{variant:`default`,size:`icon`,className:`h-8 w-8 hover:bg-primary/90`,"aria-label":u.dataTable_goToNextPage(),onClick:()=>e.nextPage(),disabled:!e.getCanNextPage(),children:[(0,b.jsx)(`span`,{className:`sr-only`,children:u.dataTable_goToNextPage()}),(0,b.jsx)(S.ChevronRight,{className:`h-4 w-4`})]}),(0,b.jsxs)(r.Button,{variant:`default`,size:`icon`,className:`hidden h-8 w-8 lg:flex hover:bg-primary/90`,"aria-label":l.dataTable_goToLastPage(),onClick:()=>e.setPageIndex(e.getPageCount()-1),disabled:!e.getCanNextPage(),children:[(0,b.jsx)(`span`,{className:`sr-only`,children:l.dataTable_goToLastPage()}),(0,b.jsx)(S.ChevronsRight,{className:`h-4 w-4`})]})]})]})]})}function ce({table:e,pageSizeOptions:t=[10,20,30,50,100]}){let n=e.getPageCount();return(0,b.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,b.jsx)(`select`,{"aria-label":h.dataTable_rowsPerPage(),value:`${e.store.state.pagination.pageSize}`,onChange:t=>{e.setPageSize(Number(t.target.value))},className:`h-8 w-fit min-w-16 rounded-md border border-input bg-background px-2 py-1 text-sm`,children:t.map(e=>(0,b.jsx)(`option`,{value:`${e}`,children:e},e))}),n>1&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(r.Button,{variant:`default`,size:`icon`,className:`h-8 w-8 hover:bg-primary/90`,"aria-label":c.dataTable_goToFirstPage(),onClick:()=>e.setPageIndex(0),disabled:e.store.state.pagination.pageIndex===0,children:(0,b.jsx)(S.ChevronsLeft,{className:`h-4 w-4`})}),(0,b.jsx)(r.Button,{variant:`default`,size:`icon`,className:`h-8 w-8 hover:bg-primary/90`,"aria-label":d.dataTable_goToPreviousPage(),onClick:()=>e.previousPage(),disabled:!e.getCanPreviousPage(),children:(0,b.jsx)(S.ChevronLeft,{className:`h-4 w-4`})}),(0,b.jsxs)(`span`,{className:`text-sm text-muted-foreground whitespace-nowrap px-1`,children:[e.store.state.pagination.pageIndex+1,` / `,n]}),(0,b.jsx)(r.Button,{variant:`default`,size:`icon`,className:`h-8 w-8 hover:bg-primary/90`,"aria-label":u.dataTable_goToNextPage(),onClick:()=>e.nextPage(),disabled:!e.getCanNextPage(),children:(0,b.jsx)(S.ChevronRight,{className:`h-4 w-4`})}),(0,b.jsx)(r.Button,{variant:`default`,size:`icon`,className:`h-8 w-8 hover:bg-primary/90`,"aria-label":l.dataTable_goToLastPage(),onClick:()=>e.setPageIndex(n-1),disabled:e.store.state.pagination.pageIndex===n-1,children:(0,b.jsx)(S.ChevronsRight,{className:`h-4 w-4`})})]})]})}exports.DataTable=oe,exports.DataTablePagination=se,exports.DataTablePaginationCompact=ce,exports.DataTableViewOptions=T;
1
+ "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../ui/lib/utils.cjs"),n=require("../../../ui/components/ui/button-variants.cjs"),r=require("../../../ui/components/ui/button-components.cjs"),i=require("../../../ui/components/ui/input.cjs"),a=require("../../../ui/components/ui/dropdown-menu.cjs"),o=require("../../../ui/components/ui/table.cjs"),s=require("../ui/dnd/use-accessible-drag-ref.cjs"),c=require("../../paraglide/messages/datatable_filterplaceholder2.cjs"),l=require("../../paraglide/messages/datatable_gotofirstpage4.cjs"),u=require("../../paraglide/messages/datatable_gotolastpage4.cjs"),d=require("../../paraglide/messages/datatable_gotonextpage4.cjs"),f=require("../../paraglide/messages/datatable_gotopreviouspage4.cjs"),p=require("../../paraglide/messages/datatable_items1.cjs"),ee=require("../../paraglide/messages/datatable_noresults2.cjs"),m=require("../../paraglide/messages/datatable_page1.cjs"),h=require("../../paraglide/messages/datatable_rowsperpage3.cjs"),g=require("../../paraglide/messages/datatable_rowsselected2.cjs"),_=require("../../paraglide/messages/datatable_togglecolumns2.cjs"),v=require("../../paraglide/messages/datatable_view1.cjs"),te=require("./table-engine.cjs"),y=require("./column-order.cjs"),b=require("./table-store.cjs");let x=require("react/jsx-runtime"),S=require("react");S=e.__toESM(S,1);let C=require("lucide-react"),ne=require("@dnd-kit/react"),w=require("@dnd-kit/dom"),re=require("@dnd-kit/collision"),ie=require("@dnd-kit/react/sortable"),ae=require("@tanstack/react-table");function oe({header:e,enableColumnOrdering:n=!0,enableMultiSort:r=!1,sortIndex:i,sortableIndex:a,sortableGroup:c,registeredIds:l}){let u=n&&!e.isPlaceholder&&e.column.columns.length===0,{ref:d,handleRef:f,isDragging:p}=(0,ie.useSortable)({id:e.id,index:a,group:c,type:c,accept:c,data:{columnId:e.column.id,groupId:c,columnIds:l},disabled:!u,collisionDetector:re.closestCenter}),ee=s.useAccessibleDragRef(f),m=e.column.getCanSort(),h=e.column.getIsSorted(),g=h!==!1,_=m&&typeof e.column.columnDef.header!=`function`?`button`:`span`,v=n?{opacity:p?.8:1,zIndex:+!!p,position:`relative`,cursor:`move`}:{};return(0,x.jsxs)(o.TableHead,{ref:u?d:void 0,colSpan:e.colSpan,"aria-hidden":e.isPlaceholder||void 0,style:v,"aria-sort":m?h===`asc`?`ascending`:h===`desc`?`descending`:`none`:void 0,className:t.cn(`bg-primary/10 text-primary font-bold border-b border-primary/20`,m&&`cursor-pointer select-none hover:bg-primary/20 transition-colors`),onClick:m?t=>{m&&!t.target.closest(`button, input, select, [role=checkbox]`)&&(r&&t.shiftKey?e.column.toggleSorting(void 0,!0):e.column.toggleSorting())}:void 0,children:[u&&(0,x.jsx)(`button`,{type:`button`,ref:ee,"aria-label":`Reorder column ${e.column.id}`,className:`inline-flex h-6 w-6 items-center justify-center cursor-grab`,children:(0,x.jsx)(C.GripVertical,{className:`h-3 w-3`,"aria-hidden":`true`})}),e.isPlaceholder?null:(0,x.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,x.jsx)(_,{className:t.cn(g&&`font-semibold`),..._===`button`?{type:`button`,onClick:t=>{t.stopPropagation(),e.column.toggleSorting(void 0,r&&t.shiftKey)}}:{},children:(0,ae.flexRender)(e.column.columnDef.header,e.getContext())}),g&&(0,x.jsxs)(`span`,{className:`inline-flex items-center text-xs`,children:[h===`asc`?(0,x.jsx)(C.ChevronUp,{className:`h-3.5 w-3.5`}):(0,x.jsx)(C.ChevronDown,{className:`h-3.5 w-3.5`}),r&&i!==void 0&&i>=0&&(0,x.jsx)(`span`,{className:`text-[10px] ml-0.5`,children:i+1})]})]})]})}function T({columns:e,data:n,variant:a=`default`,filterContent:s,storageKey:l,enableSortingByDefault:u=!0,enableMultiSort:d=!1,showRowNumber:f=!1,itemCount:m,onAdd:h,pageCount:g,rowCount:_,onPaginationChange:v,onSortingChange:re,onColumnFiltersChange:T,onRowClick:O,onSelectionChange:ce,rowIdField:k=`id`,manualPagination:A=!1,manualSorting:le=!1,manualFiltering:j=!1,filterColumn:M,sorting:N,pagination:P,enableColumnOrdering:F=!0,containerClassName:I,tableClassName:L,pageSizeOptions:R=[10,20,30,50,100],filterLayout:z=`inline`,defaultFilterOpen:ue=!1,activeFiltersContent:B}){"use no memo";let de=b.useDataTableStore(e=>e.getTableSettings),fe=b.useDataTableStore(e=>e.setTableSettings),V=b.useDataTableStore(e=>e._hasHydrated),H=S.useSyncExternalStore(S.useCallback(()=>()=>{},[]),()=>!0,()=>!1),[U,pe]=S.useState(ue),[me,he]=S.useState(N||[]),[W,ge]=S.useState([]),[G,_e]=S.useState({}),[ve,ye]=S.useState({}),[be,xe]=S.useState(P||{pageIndex:0,pageSize:10}),[K,q]=S.useState(y.getLeafColumnIds(e)),Se=P!==void 0,J=N??me,Y=P??be,Ce=e=>{let t=typeof e==`function`?e(J):e;N===void 0&&he(t),re?.(t)},we=e=>{let t=typeof e==`function`?e(Y):e;P===void 0&&xe(t),v?.(t)},[Te,Ee]=S.useState(null),De=S.useMemo(()=>JSON.stringify([...f?[`rowNumber`]:[],...y.getLeafColumnIds(e)]),[e,f]),X=S.useMemo(()=>new Set(JSON.parse(De)),[De]),Z=l?JSON.stringify([l,De,!!N,!!P]):null;if(V&&l&&Te!==Z){Ee(Z);let e=de(l);if(e){if(!N&&e.sorting&&e.sorting.length>0){let t=e.sorting.filter(e=>X.has(e.id));t.length>0&&he(t)}if(e.columnVisibility&&Object.keys(e.columnVisibility).length>0){let t={};for(let[n,r]of Object.entries(e.columnVisibility))X.has(n)&&(t[n]=r);Object.keys(t).length>0&&_e(t)}if(!P&&e.pageSize&&e.pageSize!==10&&xe(t=>({...t,pageSize:e.pageSize})),e.columnOrder&&e.columnOrder.length>0){let t=e.columnOrder.filter(e=>X.has(e)),n=new Set(t),r=Array.from(X).filter(e=>!n.has(e)),i=[...t,...r];i.length>0&&q(i)}}}let Oe=S.useMemo(()=>({id:`rowNumber`,header:`No`,enableSorting:!1,cell:({row:e,table:t})=>{let n=t.store.state.pagination;return n?n.pageIndex*n.pageSize+e.index+1:e.index+1}}),[]),Q=S.useMemo(()=>{let t=f?[Oe,...e]:e;return u?t.map(e=>({...e,enableSorting:e.enableSorting!==!1})):t},[f,e,Oe,u]),ke=S.useCallback(e=>{if(k)return k.split(`_`).reduce((e,t)=>{if(e&&typeof e==`object`&&t!==`__proto__`&&t!==`constructor`&&t!==`prototype`&&Object.prototype.hasOwnProperty.call(e,t))return e[t]},e)},[k]);S.useEffect(()=>{l&&V&&Te===Z&&fe(l,{columnOrder:K,columnVisibility:G,sorting:J,pageSize:Y.pageSize})},[l,K,G,J,Y.pageSize,fe,V,Te,Z]),S.useEffect(()=>{j&&T&&T(W)},[W,j,T]);let $=(0,ae.useTable)({features:te.dataTableFeatures,data:n,columns:Q,pageCount:A?g:void 0,rowCount:A?_:void 0,getRowId:k?(e,t)=>{let n=k.split(`_`).reduce((e,t)=>{if(e&&typeof e==`object`&&t in e)return e[t]},e);return String(n===void 0?t:n)}:void 0,state:{sorting:J,columnFilters:W,columnVisibility:G,rowSelection:ve,pagination:Y,columnOrder:K},enableRowSelection:!0,enableMultiSort:d,onRowSelectionChange:ye,onSortingChange:Ce,onColumnFiltersChange:ge,onColumnVisibilityChange:_e,onPaginationChange:we,onColumnOrderChange:q,autoResetPageIndex:A||Se?!1:void 0,manualPagination:A,manualSorting:le,manualFiltering:j});S.useEffect(()=>{ce&&ce($.getFilteredSelectedRowModel().rows.map(e=>e.original))},[ve,$,ce]);let Ae=S.useRef(null),je=S.useCallback(e=>{let t=e.operation.source;t&&Array.isArray(t.data.columnIds)&&(Ae.current={sourceId:String(t.id),groupId:t.data.groupId,ids:[...t.data.columnIds],leafIds:$.getAllLeafColumns().map(e=>e.id),order:[...K]})},[$,K]),Me=S.useCallback(e=>{let t=Ae.current;Ae.current=null;let{source:n,target:r}=e.operation;if(e.canceled||!F||!t||!r||!(0,ie.isSortable)(n)||String(n.id)!==t.sourceId)return;let i=$.getAllLeafColumns().map(e=>e.id),a=$.getHeaderGroups().find(e=>e.id===t.groupId)?.headers.filter(e=>!e.isPlaceholder&&e.column.columns.length===0).map(e=>e.column.id);a&&JSON.stringify(a)===JSON.stringify(t.ids)&&JSON.stringify(i)===JSON.stringify(t.leafIds)&&JSON.stringify(K)===JSON.stringify(t.order)&&q(e=>y.reorderVisibleColumns(e,i,t.ids,n.data.columnId,n.initialIndex,n.index))},[$,K,F]),Ne=S.useCallback(e=>J.findIndex(t=>t.id===e),[J]),Pe=S.useCallback(()=>(0,x.jsx)(ne.DragDropProvider,{sensors:e=>[...e.filter(e=>e!==w.PointerSensor),w.PointerSensor.configure({activationConstraints:[new w.PointerActivationConstraints.Distance({value:8})]})],plugins:e=>[...e,w.Feedback.configure({feedback:`clone`,dropAnimation:{duration:0}})],onDragStart:je,onDragEnd:Me,children:(0,x.jsx)(`div`,{className:t.cn(`rounded-md border`,L),children:(0,x.jsxs)(o.Table,{children:[(0,x.jsx)(o.TableHeader,{children:$.getHeaderGroups().map(e=>{let t=e.headers.filter(e=>!e.isPlaceholder&&e.column.columns.length===0).map(e=>e.column.id);return(0,x.jsx)(o.TableRow,{children:e.headers.map(n=>(0,x.jsx)(oe,{header:n,enableColumnOrdering:F,enableMultiSort:d,sortIndex:Ne(n.column.id),sortableIndex:t.indexOf(n.column.id),sortableGroup:e.id,registeredIds:t},n.id))},e.id)})}),(0,x.jsx)(o.TableBody,{children:$.getRowModel().rows?.length?$.getRowModel().rows.map(e=>(0,x.jsx)(o.TableRow,{"data-state":e.getIsSelected()&&`selected`,onClick:()=>O&&O(ke(e.original)),className:O?`cursor-pointer hover:bg-muted/50`:void 0,children:e.getVisibleCells().map(e=>(0,x.jsx)(o.TableCell,{children:(0,ae.flexRender)(e.column.columnDef.cell,e.getContext())},e.id))},e.id)):(0,x.jsx)(o.TableRow,{children:(0,x.jsx)(o.TableCell,{colSpan:Q.length,className:`h-24 text-center`,children:ee.dataTable_noResults()})})})]})})}),[je,Me,$,Q,K,F,d,Ne,O,ke,L]),Fe=()=>(0,x.jsx)(`div`,{className:t.cn(`rounded-md border`,L),children:(0,x.jsx)(o.Table,{children:(0,x.jsx)(o.TableBody,{children:(0,x.jsx)(o.TableRow,{children:(0,x.jsx)(o.TableCell,{className:`h-24 text-center`,children:(0,x.jsx)(`div`,{className:`text-muted-foreground`,children:`Loading...`})})})})})});return a===`minimal`?(0,x.jsxs)(`div`,{className:t.cn(`space-y-4`,I),children:[H?Pe():Fe(),(0,x.jsx)(D,{table:$,pageSizeOptions:R})]}):a===`toolbar`?(0,x.jsxs)(`div`,{className:t.cn(`relative h-full`,I),children:[h&&(0,x.jsx)(`div`,{className:`absolute left-0 top-0 w-full h-full z-10 pointer-events-none`,children:(0,x.jsx)(`div`,{className:`fixed right-4 bottom-10 pointer-events-auto`,children:(0,x.jsx)(r.Button,{type:`button`,size:`icon`,"aria-label":`Add row`,onClick:h,className:`w-12 h-12 rounded-full shadow-lg`,children:(0,x.jsx)(C.Plus,{className:`w-6 h-6`})})})}),(0,x.jsxs)(`div`,{className:`relative h-full flex flex-col`,children:[(0,x.jsxs)(`div`,{className:`bg-muted p-2 rounded-t-md grid grid-cols-1 sm:grid-cols-[1fr_minmax(0,auto)_1fr] items-center gap-2`,children:[(0,x.jsxs)(`div`,{className:`flex flex-wrap justify-center items-center gap-2 sm:col-start-2 sm:col-end-3`,children:[(0,x.jsx)(E,{table:$}),s&&z===`inline`&&s,s&&z===`panel`&&(0,x.jsxs)(r.Button,{type:`button`,variant:U?`default`:`outline`,size:`sm`,onClick:()=>pe(!U),className:`h-8 gap-1.5`,children:[(0,x.jsx)(C.Filter,{className:`h-4 w-4`}),(0,x.jsx)(`span`,{children:`フィルター`})]})]}),(0,x.jsxs)(`div`,{className:`flex items-center gap-3 justify-center sm:justify-end sm:col-start-3 sm:col-end-4`,children:[(0,x.jsx)(se,{table:$,pageSizeOptions:R}),typeof m==`number`&&(0,x.jsx)(`span`,{className:`text-sm text-muted-foreground whitespace-nowrap`,children:`${m.toLocaleString()} ${p.dataTable_items()}`})]})]}),s&&z===`panel`&&(0,x.jsx)(`div`,{className:t.cn(`border-b transition-all duration-200 ease-in-out overflow-hidden bg-background`,U?`max-h-[500px] p-4`:`max-h-0 p-0 border-none`),children:s}),B&&(0,x.jsx)(`div`,{className:`bg-background px-4 py-1.5 border-b`,children:B}),(0,x.jsx)(`div`,{className:`flex-1 overflow-auto`,children:H?Pe():Fe()})]})]}):(0,x.jsxs)(`div`,{className:t.cn(`space-y-4`,I),children:[(0,x.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,x.jsx)(`div`,{className:`flex items-center py-4`,children:M&&(0,x.jsx)(i.Input,{placeholder:c.dataTable_filterPlaceholder({column:M}),value:$.getColumn(M)?.getFilterValue()??``,onChange:e=>$.getColumn(M)?.setFilterValue(e.target.value),className:`max-w-sm`})}),(0,x.jsx)(E,{table:$})]}),B&&(0,x.jsx)(`div`,{className:`border rounded-md bg-background px-3 py-1`,children:B}),H?Pe():Fe(),(0,x.jsx)(D,{table:$,pageSizeOptions:R}),h&&(0,x.jsx)(`div`,{className:`fixed right-4 bottom-10 z-10`,children:(0,x.jsx)(r.Button,{type:`button`,size:`icon`,onClick:h,className:`w-12 h-12 rounded-full shadow-lg`,children:(0,x.jsx)(C.Plus,{className:`w-6 h-6`})})})]})}function E({table:e}){return(0,x.jsxs)(a.DropdownMenu,{children:[(0,x.jsxs)(a.DropdownMenuTrigger,{className:n.buttonVariants({variant:`default`,size:`sm`,className:`h-8`}),children:[(0,x.jsx)(C.Settings2,{className:`mr-2 h-4 w-4`}),v.dataTable_view()]}),(0,x.jsx)(a.DropdownMenuContent,{align:`end`,className:`w-40`,children:(0,x.jsxs)(a.DropdownMenuGroup,{children:[(0,x.jsx)(a.DropdownMenuLabel,{children:_.dataTable_toggleColumns()}),(0,x.jsx)(a.DropdownMenuSeparator,{}),e.getAllColumns().filter(e=>e.accessorFn!==void 0&&e.getCanHide()).map(e=>(0,x.jsx)(a.DropdownMenuCheckboxItem,{className:`capitalize`,checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:typeof e.columnDef.header==`string`?e.columnDef.header:e.id},e.id))]})})]})}function D({table:e,pageSizeOptions:t=[10,20,30,50,100]}){return(0,x.jsxs)(`div`,{className:`flex items-center justify-between px-2`,children:[(0,x.jsx)(`div`,{className:`flex-1 text-sm text-muted-foreground`,children:g.dataTable_rowsSelected({selected:e.getFilteredSelectedRowModel().rows.length,total:e.getFilteredRowModel().rows.length})}),(0,x.jsxs)(`div`,{className:`flex items-center space-x-6 lg:space-x-8`,children:[(0,x.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,x.jsx)(`p`,{className:`text-sm font-medium`,children:h.dataTable_rowsPerPage()}),(0,x.jsx)(`select`,{"aria-label":h.dataTable_rowsPerPage(),value:`${e.store.state.pagination.pageSize}`,onChange:t=>{e.setPageSize(Number(t.target.value))},className:`h-8 w-fit min-w-16 rounded-md border border-input bg-background px-2 py-1 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,children:t.map(e=>(0,x.jsx)(`option`,{value:`${e}`,children:e},e))})]}),(0,x.jsx)(`div`,{className:`flex w-24 items-center justify-center text-sm font-medium`,children:m.dataTable_page({current:e.store.state.pagination.pageIndex+1,total:e.getPageCount()})}),(0,x.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,x.jsxs)(r.Button,{variant:`default`,size:`icon`,className:`hidden h-8 w-8 lg:flex hover:bg-primary/90`,"aria-label":l.dataTable_goToFirstPage(),onClick:()=>e.setPageIndex(0),disabled:!e.getCanPreviousPage(),children:[(0,x.jsx)(`span`,{className:`sr-only`,children:l.dataTable_goToFirstPage()}),(0,x.jsx)(C.ChevronsLeft,{className:`h-4 w-4`})]}),(0,x.jsxs)(r.Button,{variant:`default`,size:`icon`,className:`h-8 w-8 hover:bg-primary/90`,"aria-label":f.dataTable_goToPreviousPage(),onClick:()=>e.previousPage(),disabled:!e.getCanPreviousPage(),children:[(0,x.jsx)(`span`,{className:`sr-only`,children:f.dataTable_goToPreviousPage()}),(0,x.jsx)(C.ChevronLeft,{className:`h-4 w-4`})]}),(0,x.jsxs)(r.Button,{variant:`default`,size:`icon`,className:`h-8 w-8 hover:bg-primary/90`,"aria-label":d.dataTable_goToNextPage(),onClick:()=>e.nextPage(),disabled:!e.getCanNextPage(),children:[(0,x.jsx)(`span`,{className:`sr-only`,children:d.dataTable_goToNextPage()}),(0,x.jsx)(C.ChevronRight,{className:`h-4 w-4`})]}),(0,x.jsxs)(r.Button,{variant:`default`,size:`icon`,className:`hidden h-8 w-8 lg:flex hover:bg-primary/90`,"aria-label":u.dataTable_goToLastPage(),onClick:()=>e.setPageIndex(e.getPageCount()-1),disabled:!e.getCanNextPage(),children:[(0,x.jsx)(`span`,{className:`sr-only`,children:u.dataTable_goToLastPage()}),(0,x.jsx)(C.ChevronsRight,{className:`h-4 w-4`})]})]})]})]})}function se({table:e,pageSizeOptions:t=[10,20,30,50,100]}){let n=e.getPageCount();return(0,x.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,x.jsx)(`select`,{"aria-label":h.dataTable_rowsPerPage(),value:`${e.store.state.pagination.pageSize}`,onChange:t=>{e.setPageSize(Number(t.target.value))},className:`h-8 w-fit min-w-16 rounded-md border border-input bg-background px-2 py-1 text-sm`,children:t.map(e=>(0,x.jsx)(`option`,{value:`${e}`,children:e},e))}),n>1&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(r.Button,{variant:`default`,size:`icon`,className:`h-8 w-8 hover:bg-primary/90`,"aria-label":l.dataTable_goToFirstPage(),onClick:()=>e.setPageIndex(0),disabled:e.store.state.pagination.pageIndex===0,children:(0,x.jsx)(C.ChevronsLeft,{className:`h-4 w-4`})}),(0,x.jsx)(r.Button,{variant:`default`,size:`icon`,className:`h-8 w-8 hover:bg-primary/90`,"aria-label":f.dataTable_goToPreviousPage(),onClick:()=>e.previousPage(),disabled:!e.getCanPreviousPage(),children:(0,x.jsx)(C.ChevronLeft,{className:`h-4 w-4`})}),(0,x.jsxs)(`span`,{className:`text-sm text-muted-foreground whitespace-nowrap px-1`,children:[e.store.state.pagination.pageIndex+1,` / `,n]}),(0,x.jsx)(r.Button,{variant:`default`,size:`icon`,className:`h-8 w-8 hover:bg-primary/90`,"aria-label":d.dataTable_goToNextPage(),onClick:()=>e.nextPage(),disabled:!e.getCanNextPage(),children:(0,x.jsx)(C.ChevronRight,{className:`h-4 w-4`})}),(0,x.jsx)(r.Button,{variant:`default`,size:`icon`,className:`h-8 w-8 hover:bg-primary/90`,"aria-label":u.dataTable_goToLastPage(),onClick:()=>e.setPageIndex(n-1),disabled:e.store.state.pagination.pageIndex===n-1,children:(0,x.jsx)(C.ChevronsRight,{className:`h-4 w-4`})})]})]})}exports.DataTable=T,exports.DataTablePagination=D,exports.DataTablePaginationCompact=se,exports.DataTableViewOptions=E;
2
2
  //# sourceMappingURL=data-table.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.cjs","names":["useSortable","closestCenter","TableHead","cn","GripVertical","flexRender","ChevronUp","ChevronDown","useDataTableStore","React","getLeafColumnIds","useTable","dataTableFeatures","isSortable","reorderVisibleColumns","DragDropProvider","PointerSensor","PointerActivationConstraints","Feedback","Table","TableHeader","TableRow","TableBody","TableCell","Button","Plus","FilterIcon","Input","DropdownMenu","DropdownMenuTrigger","buttonVariants","Settings2","DropdownMenuContent","DropdownMenuGroup","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuCheckboxItem","ChevronsLeft","ChevronLeft","ChevronRight","ChevronsRight","_Fragment","require_runtime","require_ui_lib_utils","require_ui_components_ui_button_variants","require_ui_components_ui_button_components","require_ui_components_ui_input","require_ui_components_ui_dropdown_menu","require_ui_components_ui_table","require_datatable_filterplaceholder2","require_datatable_gotofirstpage4","require_datatable_gotolastpage4","require_datatable_gotonextpage4","require_datatable_gotopreviouspage4","require_datatable_items1","require_datatable_noresults2","require_datatable_page1","require_datatable_rowsperpage3","require_datatable_rowsselected2","require_datatable_togglecolumns2","require_datatable_view1","require_tools_components_data_table_table_engine","require_tools_components_data_table_column_order","require_tools_components_data_table_table_store","react_jsx_runtime","react","lucide_react","_dnd_kit_react","_dnd_kit_dom","_dnd_kit_collision","_dnd_kit_react_sortable","_tanstack_react_table","DataTableColumnHeader","canReorder","enableColumnOrdering","header","sortableIndex","sortableGroup","registeredIds","canSort","sortDirection","isSorted","SortLabel","style","isDragging","ref","enableMultiSort","e","handleRef","event","sortIndex","DataTable","controlledSorting","controlledPagination","getTableSettings","state","setTableSettings","hasHydrated","mounted","filterOpen","setFilterOpen","defaultFilterOpen","localSorting","setLocalSorting","columnFilters","setColumnFilters","columnVisibility","setColumnVisibility","rowSelection","setRowSelection","localPagination","setLocalPagination","columnOrder","setColumnOrder","columns","isPaginationControlled","sorting","pagination","setSorting","next","updater","onSortingChange","setPagination","onPaginationChange","settingsLoaded","setSettingsLoaded","columnIdListKey","showRowNumber","validColumnIds","loadKey","storageKey","storedSettings","validSorting","s","validVisibility","key","value","prev","validStoredOrder","id","storedOrderSet","newColumns","mergedOrder","rowNumberColumn","tableInstance","paginationState","row","columnsWithRowNumber","cols","enableSortingByDefault","col","getRowId","rowIdField","obj","originalRow","manualFiltering","onColumnFiltersChange","table","manualPagination","pageCount","rowCount","index","onSelectionChange","dragSnapshot","handleDragStart","source","column","handleDragEnd","snapshot","target","leafIds","group","order","getSortIndex","columnId","renderTable","defaults","sensor","tableClassName","headerGroup","onRowClick","cell","renderLoadingTable","variant","containerClassName","DataTablePagination","onAdd","DataTableViewOptions","filterContent","filterLayout","DataTablePaginationCompact","itemCount","activeFiltersContent","filterColumn","pageSizeOptions","pageSize","totalPages"],"sources":["../../../../src/tools/components/data-table/data-table.tsx"],"sourcesContent":["/**\n * @fileoverview DataTable component with sorting, pagination, and persistence\n *\n * A feature-rich data table built on TanStack Table with:\n * - Three layout variants: default, toolbar, minimal\n * - Single and multi-column sorting\n * - Column reordering via drag-and-drop\n * - Column visibility toggle\n * - Settings persistence via Zustand store\n * - Row selection and click handling\n * - Server-side pagination/sorting support\n *\n * @module data-table/data-table\n */\n\nimport * as React from 'react';\nimport {\n ColumnDef,\n ColumnFiltersState,\n SortingState,\n VisibilityState,\n ColumnOrderState,\n PaginationState,\n flexRender,\n useTable,\n dataTableFeatures,\n Table as TableInstance,\n Header,\n} from './table-engine';\nimport * as m from '../../paraglide/messages.js';\n\nimport { DragDropProvider, type DragStartEvent, type DragEndEvent } from '@dnd-kit/react';\nimport { useSortable, isSortable } from '@dnd-kit/react/sortable';\nimport { PointerSensor, PointerActivationConstraints, Feedback } from '@dnd-kit/dom';\nimport { closestCenter } from '@dnd-kit/collision';\nimport { reorderVisibleColumns, getLeafColumnIds } from './column-order';\n\nimport { cn } from \"../../lib/utils\";\nimport { Button, buttonVariants } from '../ui/button';\nimport { Input } from '../ui/input';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../ui/table';\n\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n Settings2,\n GripVertical,\n Plus,\n ChevronUp,\n ChevronDown,\n Filter as FilterIcon,\n} from 'lucide-react';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuTrigger,\n DropdownMenuSeparator,\n DropdownMenuLabel,\n DropdownMenuGroup,\n} from '../ui/dropdown-menu';\n\nimport { useDataTableStore } from './table-store';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * テーブルレイアウトのバリアント\n * Table layout variants\n */\nexport type DataTableVariant = 'default' | 'toolbar' | 'minimal';\n\n// =============================================================================\n// Sortable Header Component\n// =============================================================================\n\ninterface DataTableColumnHeaderProps<\n TData extends object,\n TValue,\n> extends React.HTMLAttributes<HTMLTableCellElement> {\n header: Header<TData, TValue>;\n enableColumnOrdering?: boolean;\n enableMultiSort?: boolean;\n sortIndex?: number;\n sortableIndex: number;\n sortableGroup: string;\n registeredIds: string[];\n}\n\nfunction DataTableColumnHeader<TData extends object, TValue>({\n header,\n enableColumnOrdering = true,\n enableMultiSort = false,\n sortIndex,\n sortableIndex, sortableGroup, registeredIds,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n const canReorder = enableColumnOrdering && !header.isPlaceholder && header.column.columns.length === 0;\n const { ref, handleRef, isDragging } = useSortable({\n id: header.id,\n index: sortableIndex,\n group: sortableGroup,\n type: sortableGroup,\n accept: sortableGroup,\n data: {columnId: header.column.id, groupId: sortableGroup, columnIds: registeredIds},\n disabled: !canReorder,\n collisionDetector: closestCenter,\n });\n\n const canSort = header.column.getCanSort();\n const sortDirection = header.column.getIsSorted();\n const isSorted = sortDirection !== false;\n const SortLabel = canSort && typeof header.column.columnDef.header !== 'function' ? 'button' : 'span';\n\n const style: React.CSSProperties = enableColumnOrdering\n ? {\n opacity: isDragging ? 0.8 : 1,\n zIndex: isDragging ? 1 : 0,\n position: 'relative',\n cursor: 'move',\n }\n : {};\n\n const handleSort = (e: React.MouseEvent) => {\n if (!canSort || (e.target as HTMLElement).closest('button, input, select, [role=checkbox]')) return;\n if (enableMultiSort && e.shiftKey) {\n header.column.toggleSorting(undefined, true);\n } else {\n header.column.toggleSorting();\n }\n };\n\n return (\n <TableHead\n ref={canReorder ? ref : undefined}\n colSpan={header.colSpan}\n aria-hidden={header.isPlaceholder || undefined}\n style={style}\n aria-sort={canSort ? (sortDirection === 'asc' ? 'ascending' : sortDirection === 'desc' ? 'descending' : 'none') : undefined}\n className={cn(\n 'bg-primary/10 text-primary font-bold border-b border-primary/20',\n canSort && 'cursor-pointer select-none hover:bg-primary/20 transition-colors',\n )}\n onClick={canSort ? handleSort : undefined}\n >\n {canReorder && <button\n type='button' ref={handleRef}\n aria-label={`Reorder column ${header.column.id}`}\n className='inline-flex h-6 w-6 items-center justify-center cursor-grab'\n ><GripVertical className='h-3 w-3' aria-hidden='true' /></button>}\n {header.isPlaceholder ? null : (\n <span className='inline-flex items-center gap-1'>\n <SortLabel className={cn(isSorted && 'font-semibold')}\n {...(SortLabel === 'button' ? { type: 'button' as const, onClick: (event: React.MouseEvent) => {\n event.stopPropagation();\n header.column.toggleSorting(undefined, enableMultiSort && event.shiftKey);\n } } : {})}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n </SortLabel>\n {/* Only show sort indicator when column is actively sorted */}\n {isSorted && (\n <span className='inline-flex items-center text-xs'>\n {sortDirection === 'asc' ? (\n <ChevronUp className='h-3.5 w-3.5' />\n ) : (\n <ChevronDown className='h-3.5 w-3.5' />\n )}\n {enableMultiSort && sortIndex !== undefined && sortIndex >= 0 && (\n <span className='text-[10px] ml-0.5'>{sortIndex + 1}</span>\n )}\n </span>\n )}\n </span>\n )}\n </TableHead>\n );\n}\n\n// =============================================================================\n// DataTable Props\n// =============================================================================\n\n/**\n * DataTableProps\n * DataTableのプロップス\n *\n * ## AI/Automation Features\n * - `testId`: Container element\n * - Pattern: `{testId}`, rows: `{testId}-row-{id}`, pagination: `{testId}-pagination`\n */\nexport interface DataTableProps<TData extends object, TValue> {\n /** AI/E2E Test用の安定ID / Stable test identifier */\n testId?: string;\n /** 列定義 / Column definitions */\n columns: ColumnDef<TData, TValue>[];\n /** データ配列 / Data array */\n data: TData[];\n /** テーブルレイアウトのバリアント / Table layout variant */\n variant?: DataTableVariant;\n /** ツールバー用カスタムフィルターコンテンツ / Custom filter content for toolbar */\n filterContent?: React.ReactNode;\n /** 設定永続化用キー(Zustandストアで使用) / Storage key for persisting settings */\n storageKey?: string;\n /** 全カラムをデフォルトでソート可能にする / Enable sorting on all columns by default */\n enableSortingByDefault?: boolean;\n /** 複数カラムソートを有効化 / Enable multi-column sorting */\n enableMultiSort?: boolean;\n /** 行番号カラムを表示 / Show row number column */\n showRowNumber?: boolean;\n /** アイテム総数(表示用) / Total item count for display */\n itemCount?: number;\n /** 追加ボタンのコールバック / Callback for floating add button */\n onAdd?: () => void;\n /** 総ページ数(手動ページネーション時) / Total page count for manual pagination */\n pageCount?: number;\n /** 総行数(手動ページネーション時) / Total row count for manual pagination */\n rowCount?: number;\n /**\n * ページ変更時のコールバック / Pagination change callback\n * 操作による変更要求時に通知。初期マウント・props同期では通知しません。\n */\n onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void;\n /** ソートの変更要求時のコールバック(初期マウント・props同期では通知しない) / Requested sorting change */\n onSortingChange?: (sorting: SortingState) => void;\n /** フィルタ変更時のコールバック / Filter change callback */\n onColumnFiltersChange?: (filters: ColumnFiltersState) => void;\n /** 行クリック時のコールバック / Row click callback */\n onRowClick?: (rowId: string | number) => void;\n /** 選択変更時のコールバック / Selection change callback */\n onSelectionChange?: (selectedRows: TData[]) => void;\n /** 行ID用フィールド名 / Row ID field name */\n rowIdField?: string;\n /** サーバーサイドページネーション / Server-side pagination */\n manualPagination?: boolean;\n /** サーバーサイドソート / Server-side sorting */\n manualSorting?: boolean;\n /** サーバーサイドフィルタ / Server-side filtering */\n manualFiltering?: boolean;\n /** フィルタ対象カラム / Filter column name */\n filterColumn?: string;\n /** ページサイズのオプション / Page size options */\n pageSizeOptions?: number[];\n /** ソート推移のオプション(外部制御用) / Sorting state for controlled mode */\n sorting?: SortingState;\n /**\n * 現在のページネーション(外部制御用) / Pagination state for controlled mode\n * 指定時はページ自動リセット(autoResetPageIndex)を無効化します。\n */\n pagination?: PaginationState;\n /** 列の並べ替え有効化 / Enable column reordering */\n enableColumnOrdering?: boolean;\n /** コンテナのクラス名 / Container class name */\n containerClassName?: string;\n /** テーブルのクラス名 / Table class name */\n tableClassName?: string;\n /** フィルターのレイアウトモード / Filter layout mode */\n filterLayout?: 'inline' | 'panel';\n /** フィルターパネルの初期開閉状態 / Default open state of the filter panel */\n defaultFilterOpen?: boolean;\n /** アクティブフィルター表示用のコンテンツ / Custom active filters component or node */\n activeFiltersContent?: React.ReactNode;\n}\n\n// =============================================================================\n// DataTable Component\n// =============================================================================\n\n/**\n * Render a sortable/filterable table with host-controlled or local state.\n * @typeParam TData - Object shape of each data row.\n * @typeParam TValue - Column cell-value type shared by the supplied column definitions.\n * @param props - Columns, data, presentation and feature/state options. Native leaf\n * reordering is enabled by default; sort and reorder buttons remain separate.\n * @returns The table with its configured toolbar, pagination and interaction surfaces.\n * @remarks Hidden/grouped columns retain stable persisted slots; changing current\n * columns or visibility invalidates an active reorder snapshot. Controlled sorting\n * and pagination remain host-owned. Supplying pagination notifies onPaginationChange\n * even without manualPagination and disables automatic page-index reset on data updates.\n * Import Appkit CSS once; this component owns its native drag provider.\n * @example\n * ```tsx\n * import {DataTable} from '@alneas/appkit-react/tools/data-table';\n * import '@alneas/appkit-react/styles';\n * export function ReviewTable() {\n * return <DataTable data={[{id: 'one', title: 'Review'}]}\n * columns={[{accessorKey: 'title', header: 'Title'}]} />;\n * }\n * ```\n */\nexport function DataTable<TData extends object, TValue>({\n columns,\n data,\n variant = 'default',\n filterContent,\n storageKey,\n enableSortingByDefault = true,\n enableMultiSort = false,\n showRowNumber = false,\n itemCount,\n onAdd,\n pageCount,\n rowCount,\n onPaginationChange,\n onSortingChange,\n onColumnFiltersChange,\n onRowClick,\n onSelectionChange,\n rowIdField = 'id',\n manualPagination = false,\n manualSorting = false,\n manualFiltering = false,\n filterColumn,\n sorting: controlledSorting,\n pagination: controlledPagination,\n enableColumnOrdering = true,\n containerClassName,\n tableClassName,\n pageSizeOptions = [10, 20, 30, 50, 100],\n filterLayout = 'inline',\n defaultFilterOpen = false,\n activeFiltersContent,\n}: DataTableProps<TData, TValue>) {\n 'use no memo';\n\n // Get persisted settings from store (must be called before any early returns)\n const getTableSettings = useDataTableStore((state) => state.getTableSettings);\n const setTableSettings = useDataTableStore((state) => state.setTableSettings);\n const hasHydrated = useDataTableStore((state) => state._hasHydrated);\n\n // SSR safety: Only render on client\n // useSyncExternalStore ensures we have a consistent value during hydration\n const mounted = React.useSyncExternalStore(\n React.useCallback(() => () => {}, []),\n () => true,\n () => false,\n );\n const [filterOpen, setFilterOpen] = React.useState(defaultFilterOpen);\n\n // Initialize state with default values (SSR-safe)\n const [localSorting, setLocalSorting] = React.useState<SortingState>(controlledSorting || []);\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([]);\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({});\n const [rowSelection, setRowSelection] = React.useState({});\n const [localPagination, setLocalPagination] = React.useState<PaginationState>(\n controlledPagination || {\n pageIndex: 0,\n pageSize: 10,\n },\n );\n const [columnOrder, setColumnOrder] = React.useState<ColumnOrderState>(\n getLeafColumnIds(columns),\n );\n const isPaginationControlled = controlledPagination !== undefined;\n const sorting = controlledSorting ?? localSorting;\n const pagination = controlledPagination ?? localPagination;\n const setSorting: React.Dispatch<React.SetStateAction<SortingState>> = (updater) => {\n const next = typeof updater === 'function' ? updater(sorting) : updater;\n if (controlledSorting === undefined) setLocalSorting(next);\n onSortingChange?.(next);\n };\n const setPagination: React.Dispatch<React.SetStateAction<PaginationState>> = (updater) => {\n const next = typeof updater === 'function' ? updater(pagination) : updater;\n if (controlledPagination === undefined) setLocalPagination(next);\n onPaginationChange?.(next);\n };\n const [settingsLoaded, setSettingsLoaded] = React.useState<string | null>(null);\n const columnIdListKey = React.useMemo(\n () => JSON.stringify([...(showRowNumber ? ['rowNumber'] : []), ...getLeafColumnIds(columns)]),\n [columns, showRowNumber],\n );\n const validColumnIds = React.useMemo(\n () => new Set<string>(JSON.parse(columnIdListKey)),\n [columnIdListKey],\n );\n\n // Guarded render-time hydration, avoiding a stale-state effect render.\n const loadKey = storageKey ? JSON.stringify([storageKey, columnIdListKey, Boolean(controlledSorting), Boolean(controlledPagination)]) : null;\n if (hasHydrated && storageKey && settingsLoaded !== loadKey) {\n setSettingsLoaded(loadKey);\n const storedSettings = getTableSettings(storageKey);\n if (storedSettings) {\n if (!controlledSorting && storedSettings.sorting && storedSettings.sorting.length > 0) {\n // Filter out sorting for columns that no longer exist\n const validSorting = storedSettings.sorting.filter((s) => validColumnIds.has(s.id));\n if (validSorting.length > 0) {\n setLocalSorting(validSorting);\n }\n }\n if (\n storedSettings.columnVisibility &&\n Object.keys(storedSettings.columnVisibility).length > 0\n ) {\n // Filter out visibility for columns that no longer exist\n const validVisibility: Record<string, boolean> = {};\n for (const [key, value] of Object.entries(storedSettings.columnVisibility)) {\n if (validColumnIds.has(key)) {\n validVisibility[key] = value;\n }\n }\n if (Object.keys(validVisibility).length > 0) {\n setColumnVisibility(validVisibility);\n }\n }\n if (!controlledPagination && storedSettings.pageSize && storedSettings.pageSize !== 10) {\n setLocalPagination((prev) => ({ ...prev, pageSize: storedSettings.pageSize }));\n }\n if (storedSettings.columnOrder && storedSettings.columnOrder.length > 0) {\n // Filter out columns that no longer exist and add new columns\n const validStoredOrder = storedSettings.columnOrder.filter((id) => validColumnIds.has(id));\n const storedOrderSet = new Set(validStoredOrder);\n const newColumns = Array.from(validColumnIds).filter((id) => !storedOrderSet.has(id));\n const mergedOrder = [...validStoredOrder, ...newColumns];\n if (mergedOrder.length > 0) {\n setColumnOrder(mergedOrder);\n }\n }\n }\n }\n\n // Row number column definition (MUST be called before early return)\n const rowNumberColumn: ColumnDef<TData, TValue> = React.useMemo(\n () => ({\n id: 'rowNumber',\n header: 'No',\n enableSorting: false,\n cell: ({ row, table: tableInstance }) => {\n const paginationState = tableInstance.store.state.pagination;\n if (paginationState) {\n return paginationState.pageIndex * paginationState.pageSize + row.index + 1;\n }\n return row.index + 1;\n },\n }),\n [],\n );\n\n // Add row number column if requested (MUST be called before early return)\n const columnsWithRowNumber = React.useMemo(() => {\n const cols = showRowNumber ? [rowNumberColumn, ...columns] : columns;\n // Apply enableSortingByDefault to all columns that don't explicitly disable sorting\n if (enableSortingByDefault) {\n return cols.map((col) => ({\n ...col,\n enableSorting: col.enableSorting !== false,\n }));\n }\n return cols;\n }, [showRowNumber, columns, rowNumberColumn, enableSortingByDefault]);\n\n // Helper to extract nested ID safely (MUST be called before early return)\n const getRowId = React.useCallback(\n (originalRow: TData) => {\n if (!rowIdField) return undefined;\n // Simple dot notation support for id field\n\n return rowIdField.split('_').reduce<unknown>((obj, key) => {\n if (\n obj &&\n typeof obj === 'object' &&\n key !== '__proto__' &&\n key !== 'constructor' &&\n key !== 'prototype' &&\n Object.prototype.hasOwnProperty.call(obj, key)\n ) {\n return (obj as Record<string, unknown>)[key];\n }\n return undefined;\n }, originalRow as unknown);\n },\n [rowIdField],\n );\n\n // Persist settings to store (MUST be called before early return)\n React.useEffect(() => {\n if (storageKey && hasHydrated && settingsLoaded === loadKey) {\n setTableSettings(storageKey, {\n columnOrder,\n columnVisibility,\n sorting,\n pageSize: pagination.pageSize,\n });\n }\n }, [storageKey, columnOrder, columnVisibility, sorting, pagination.pageSize, setTableSettings, hasHydrated, settingsLoaded, loadKey]);\n\n React.useEffect(() => {\n if (manualFiltering && onColumnFiltersChange) {\n onColumnFiltersChange(columnFilters);\n }\n }, [columnFilters, manualFiltering, onColumnFiltersChange]);\n\n // Create table instance (MUST be called before early return)\n const table = useTable({\n features: dataTableFeatures,\n data,\n // Table 9 erases heterogeneous cell values to unknown at the table boundary.\n columns: columnsWithRowNumber as ColumnDef<TData>[],\n pageCount: manualPagination ? pageCount : undefined,\n rowCount: manualPagination ? rowCount : undefined,\n getRowId: rowIdField\n ? (originalRow, index) => {\n const id = rowIdField.split('_').reduce<unknown>((obj, key) => {\n if (obj && typeof obj === 'object' && key in (obj as Record<string, unknown>)) {\n return (obj as Record<string, unknown>)[key];\n }\n return undefined;\n }, originalRow as unknown);\n return id !== undefined ? String(id) : String(index);\n }\n : undefined,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n pagination,\n columnOrder,\n },\n enableRowSelection: true,\n enableMultiSort,\n onRowSelectionChange: setRowSelection,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onPaginationChange: setPagination,\n onColumnOrderChange: setColumnOrder,\n autoResetPageIndex: manualPagination || isPaginationControlled ? false : undefined,\n manualPagination,\n manualSorting,\n manualFiltering,\n });\n\n // Sync selection to parent (MUST be called before early return)\n React.useEffect(() => {\n if (onSelectionChange) {\n const selectedRows = table.getFilteredSelectedRowModel().rows.map((row) => row.original);\n onSelectionChange(selectedRows);\n }\n }, [rowSelection, table, onSelectionChange]);\n\n // A drag captures the registered leaf subset. Hidden/changed columns never use stale indices.\n const dragSnapshot = React.useRef<{\n sourceId: string; groupId: string; ids: string[]; leafIds: string[]; order: string[];\n } | null>(null);\n const handleDragStart = React.useCallback((event: DragStartEvent) => {\n const source = event.operation.source;\n if (!source || !Array.isArray(source.data.columnIds)) return;\n dragSnapshot.current = {\n sourceId: String(source.id), groupId: source.data.groupId,\n ids: [...source.data.columnIds], leafIds: table.getAllLeafColumns().map(column => column.id),\n order: [...columnOrder],\n };\n }, [table, columnOrder]);\n const handleDragEnd = React.useCallback((event: DragEndEvent) => {\n const snapshot = dragSnapshot.current;\n dragSnapshot.current = null;\n const {source, target} = event.operation;\n if (event.canceled || !enableColumnOrdering || !snapshot || !target || !isSortable(source) || String(source.id) !== snapshot.sourceId) return;\n const leafIds = table.getAllLeafColumns().map(column => column.id);\n const group = table.getHeaderGroups().find(group => group.id === snapshot.groupId);\n const registeredIds = group?.headers.filter(header => !header.isPlaceholder && header.column.columns.length === 0).map(header => header.column.id);\n if (!registeredIds || JSON.stringify(registeredIds) !== JSON.stringify(snapshot.ids) ||\n JSON.stringify(leafIds) !== JSON.stringify(snapshot.leafIds) || JSON.stringify(columnOrder) !== JSON.stringify(snapshot.order)) return;\n setColumnOrder(order => reorderVisibleColumns(order, leafIds, snapshot.ids, source.data.columnId, source.initialIndex, source.index));\n }, [table, columnOrder, enableColumnOrdering]);\n\n // Get sort index for multi-sort display (MUST be called before early return)\n const getSortIndex = React.useCallback(\n (columnId: string): number => {\n return sorting.findIndex((s) => s.id === columnId);\n },\n [sorting],\n );\n\n // Render table content (MUST be called before early return)\n const renderTable = React.useCallback(\n () => (\n <DragDropProvider\n sensors={defaults => [...defaults.filter(sensor => sensor !== PointerSensor), PointerSensor.configure({activationConstraints: [new PointerActivationConstraints.Distance({value: 8})]})]}\n plugins={defaults => [...defaults, Feedback.configure({feedback: 'clone', dropAnimation: {duration: 0}})]}\n onDragStart={handleDragStart} onDragEnd={handleDragEnd}\n >\n <div className={cn('rounded-md border', tableClassName)}>\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map(headerGroup => {\n const registeredIds = headerGroup.headers.filter(header => !header.isPlaceholder && header.column.columns.length === 0).map(header => header.column.id);\n return <TableRow key={headerGroup.id}>\n {headerGroup.headers.map(header => <DataTableColumnHeader\n key={header.id} header={header} enableColumnOrdering={enableColumnOrdering}\n enableMultiSort={enableMultiSort} sortIndex={getSortIndex(header.column.id)}\n sortableIndex={registeredIds.indexOf(header.column.id)} sortableGroup={headerGroup.id}\n registeredIds={registeredIds}\n />)}\n </TableRow>;\n })}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && 'selected'}\n onClick={() =>\n onRowClick && onRowClick(getRowId(row.original) as string | number)\n }\n className={onRowClick ? 'cursor-pointer hover:bg-muted/50' : undefined}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={columnsWithRowNumber.length} className='h-24 text-center'>\n {m.dataTable_noResults()}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n </DragDropProvider>\n ),\n [\n handleDragStart,\n handleDragEnd,\n table,\n columnsWithRowNumber,\n columnOrder,\n enableColumnOrdering,\n enableMultiSort,\n getSortIndex,\n onRowClick,\n getRowId,\n tableClassName,\n ],\n );\n\n // Render loading table during SSR - simple version to avoid hydration issues\n const renderLoadingTable = () => (\n <div className={cn('rounded-md border', tableClassName)}>\n <Table>\n <TableBody>\n <TableRow>\n <TableCell className='h-24 text-center'>\n <div className='text-muted-foreground'>Loading...</div>\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </div>\n );\n\n // Variant: minimal - just table with pagination\n if (variant === 'minimal') {\n return (\n <div className={cn('space-y-4', containerClassName)}>\n {mounted ? renderTable() : renderLoadingTable()}\n <DataTablePagination table={table} pageSizeOptions={pageSizeOptions} />\n </div>\n );\n }\n\n // Variant: toolbar - setagaya-front style with toolbar above table\n if (variant === 'toolbar') {\n return (\n <div className={cn('relative h-full', containerClassName)}>\n {onAdd && (\n <div className='absolute left-0 top-0 w-full h-full z-10 pointer-events-none'>\n <div className='fixed right-4 bottom-10 pointer-events-auto'>\n <Button\n type='button'\n size='icon'\n aria-label='Add row'\n onClick={onAdd}\n className='w-12 h-12 rounded-full shadow-lg'\n >\n <Plus className='w-6 h-6' />\n </Button>\n </div>\n </div>\n )}\n <div className='relative h-full flex flex-col'>\n {/* Toolbar */}\n <div className='bg-muted p-2 rounded-t-md grid grid-cols-1 sm:grid-cols-[1fr_minmax(0,auto)_1fr] items-center gap-2'>\n {/* Center: Column settings + filter content */}\n <div className='flex flex-wrap justify-center items-center gap-2 sm:col-start-2 sm:col-end-3'>\n <DataTableViewOptions table={table} />\n {filterContent && filterLayout === 'inline' && filterContent}\n {filterContent && filterLayout === 'panel' && (\n <Button\n type='button'\n variant={filterOpen ? 'default' : 'outline'}\n size='sm'\n onClick={() => setFilterOpen(!filterOpen)}\n className='h-8 gap-1.5'\n >\n <FilterIcon className='h-4 w-4' />\n <span>フィルター</span>\n </Button>\n )}\n </div>\n {/* Right: Pagination + count */}\n <div className='flex items-center gap-3 justify-center sm:justify-end sm:col-start-3 sm:col-end-4'>\n <DataTablePaginationCompact table={table} pageSizeOptions={pageSizeOptions} />\n {typeof itemCount === 'number' && (\n <span className='text-sm text-muted-foreground whitespace-nowrap'>\n {`${itemCount.toLocaleString()} ${m.dataTable_items()}`}\n </span>\n )}\n </div>\n </div>\n {/* Filter Panel (Collapsible) */}\n {filterContent && filterLayout === 'panel' && (\n <div\n className={cn(\n 'border-b transition-all duration-200 ease-in-out overflow-hidden bg-background',\n filterOpen ? 'max-h-[500px] p-4' : 'max-h-0 p-0 border-none',\n )}\n >\n {filterContent}\n </div>\n )}\n {/* Active Filters Display */}\n {activeFiltersContent && (\n <div className='bg-background px-4 py-1.5 border-b'>{activeFiltersContent}</div>\n )}\n {/* Table */}\n <div className='flex-1 overflow-auto'>\n {mounted ? renderTable() : renderLoadingTable()}\n </div>\n </div>\n </div>\n );\n }\n\n // Variant: default - current behavior\n return (\n <div className={cn('space-y-4', containerClassName)}>\n <div className='flex items-center justify-between'>\n <div className='flex items-center py-4'>\n {filterColumn && (\n <Input\n placeholder={m.dataTable_filterPlaceholder({ column: filterColumn })}\n value={(table.getColumn(filterColumn)?.getFilterValue() as string) ?? ''}\n onChange={(event) =>\n table.getColumn(filterColumn)?.setFilterValue(event.target.value)\n }\n className='max-w-sm'\n />\n )}\n </div>\n <DataTableViewOptions table={table} />\n </div>\n {activeFiltersContent && (\n <div className='border rounded-md bg-background px-3 py-1'>{activeFiltersContent}</div>\n )}\n {mounted ? renderTable() : renderLoadingTable()}\n <DataTablePagination table={table} pageSizeOptions={pageSizeOptions} />\n {onAdd && (\n <div className='fixed right-4 bottom-10 z-10'>\n <Button\n type='button'\n size='icon'\n onClick={onAdd}\n className='w-12 h-12 rounded-full shadow-lg'\n >\n <Plus className='w-6 h-6' />\n </Button>\n </div>\n )}\n </div>\n );\n}\n\n// =============================================================================\n// View Options Component\n// =============================================================================\n\ninterface DataTableViewOptionsProps<TData extends object> {\n table: TableInstance<TData>;\n}\n\n/**\n * テーブルの表示列を切り替える設定ドロップダウンメニューコンポーネント\n */\nexport function DataTableViewOptions<TData extends object>({ table }: DataTableViewOptionsProps<TData>) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n className={buttonVariants({ variant: 'default', size: 'sm', className: 'h-8' })}\n >\n <Settings2 className='mr-2 h-4 w-4' />\n {m.dataTable_view()}\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-40'>\n <DropdownMenuGroup>\n <DropdownMenuLabel>{m.dataTable_toggleColumns()}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n className='capitalize'\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\n// =============================================================================\n// Pagination Component (Full)\n// =============================================================================\n\ninterface DataTablePaginationProps<TData extends object> {\n table: TableInstance<TData>;\n pageSizeOptions?: number[];\n}\n\n/**\n * テーブルの標準的なページネーションコントロールコンポーネント\n */\nexport function DataTablePagination<TData extends object>({\n table,\n pageSizeOptions = [10, 20, 30, 50, 100],\n}: DataTablePaginationProps<TData>) {\n return (\n <div className='flex items-center justify-between px-2'>\n <div className='flex-1 text-sm text-muted-foreground'>\n {m.dataTable_rowsSelected({\n selected: table.getFilteredSelectedRowModel().rows.length,\n total: table.getFilteredRowModel().rows.length,\n })}\n </div>\n <div className='flex items-center space-x-6 lg:space-x-8'>\n <div className='flex items-center space-x-2'>\n <p className='text-sm font-medium'>{m.dataTable_rowsPerPage()}</p>\n <select\n aria-label={m.dataTable_rowsPerPage()}\n value={`${table.store.state.pagination.pageSize}`}\n onChange={(e) => {\n table.setPageSize(Number(e.target.value));\n }}\n className='h-8 w-fit min-w-16 rounded-md border border-input bg-background px-2 py-1 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2'\n >\n {pageSizeOptions.map((pageSize) => (\n <option key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </option>\n ))}\n </select>\n </div>\n <div className='flex w-24 items-center justify-center text-sm font-medium'>\n {m.dataTable_page({\n current: table.store.state.pagination.pageIndex + 1,\n total: table.getPageCount(),\n })}\n </div>\n <div className='flex items-center space-x-2'>\n <Button\n variant='default'\n size='icon'\n className='hidden h-8 w-8 lg:flex hover:bg-primary/90'\n aria-label={m.dataTable_goToFirstPage()}\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n >\n <span className='sr-only'>{m.dataTable_goToFirstPage()}</span>\n <ChevronsLeft className='h-4 w-4' />\n </Button>\n <Button\n variant='default'\n size='icon'\n className='h-8 w-8 hover:bg-primary/90'\n aria-label={m.dataTable_goToPreviousPage()}\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <span className='sr-only'>{m.dataTable_goToPreviousPage()}</span>\n <ChevronLeft className='h-4 w-4' />\n </Button>\n <Button\n variant='default'\n size='icon'\n className='h-8 w-8 hover:bg-primary/90'\n aria-label={m.dataTable_goToNextPage()}\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n <span className='sr-only'>{m.dataTable_goToNextPage()}</span>\n <ChevronRight className='h-4 w-4' />\n </Button>\n <Button\n variant='default'\n size='icon'\n className='hidden h-8 w-8 lg:flex hover:bg-primary/90'\n aria-label={m.dataTable_goToLastPage()}\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!table.getCanNextPage()}\n >\n <span className='sr-only'>{m.dataTable_goToLastPage()}</span>\n <ChevronsRight className='h-4 w-4' />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n\n// =============================================================================\n// Pagination Component (Compact - for toolbar variant)\n// =============================================================================\n\ninterface DataTablePaginationCompactProps<TData extends object> {\n table: TableInstance<TData>;\n pageSizeOptions?: number[];\n}\n\n/**\n * ツールバー等に配置するコンパクトなページネーションコントロールコンポーネント\n */\nexport function DataTablePaginationCompact<TData extends object>({\n table,\n pageSizeOptions = [10, 20, 30, 50, 100],\n}: DataTablePaginationCompactProps<TData>) {\n const totalPages = table.getPageCount();\n\n return (\n <div className='flex items-center gap-1'>\n <select\n aria-label={m.dataTable_rowsPerPage()}\n value={`${table.store.state.pagination.pageSize}`}\n onChange={(e) => {\n table.setPageSize(Number(e.target.value));\n }}\n className='h-8 w-fit min-w-16 rounded-md border border-input bg-background px-2 py-1 text-sm'\n >\n {pageSizeOptions.map((pageSize) => (\n <option key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </option>\n ))}\n </select>\n {totalPages > 1 && (\n <>\n <Button\n variant='default'\n size='icon'\n className='h-8 w-8 hover:bg-primary/90'\n aria-label={m.dataTable_goToFirstPage()}\n onClick={() => table.setPageIndex(0)}\n disabled={table.store.state.pagination.pageIndex === 0}\n >\n <ChevronsLeft className='h-4 w-4' />\n </Button>\n <Button\n variant='default'\n size='icon'\n className='h-8 w-8 hover:bg-primary/90'\n aria-label={m.dataTable_goToPreviousPage()}\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <ChevronLeft className='h-4 w-4' />\n </Button>\n <span className='text-sm text-muted-foreground whitespace-nowrap px-1'>\n {table.store.state.pagination.pageIndex + 1} / {totalPages}\n </span>\n <Button\n variant='default'\n size='icon'\n className='h-8 w-8 hover:bg-primary/90'\n aria-label={m.dataTable_goToNextPage()}\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n <ChevronRight className='h-4 w-4' />\n </Button>\n <Button\n variant='default'\n size='icon'\n className='h-8 w-8 hover:bg-primary/90'\n aria-label={m.dataTable_goToLastPage()}\n onClick={() => table.setPageIndex(totalPages - 1)}\n disabled={table.store.state.pagination.pageIndex === totalPages - 1}\n >\n <ChevronsRight className='h-4 w-4' />\n </Button>\n </>\n )}\n </div>\n );\n}\n"],"mappings":"A,ojDA6FA,SAASwE,GAAoD,CAC3D,SACA,uBAAuB,GACvB,kBAAkB,GAClB,YACA,gBAAe,gBAAe,iBACc,CAC5C,IAAMC,EAAaC,GAAwB,CAACC,EAAO,eAAiBA,EAAO,OAAO,QAAQ,SAAW,EAC/F,CAAE,MAAK,YAAW,eAAA,EAAe3E,GAAAA,YAAAA,CAAY,CACjD,GAAI2E,EAAO,GACX,MAAOC,EACP,MAAOC,EACP,KAAMA,EACN,OAAQA,EACR,KAAM,CAAC,SAAUF,EAAO,OAAO,GAAI,QAASE,EAAe,UAAWC,CAAa,EACnF,SAAU,CAACL,EACX,kBAAmBxE,GAAAA,aACrB,CAAC,EAEK8E,EAAUJ,EAAO,OAAO,WAAW,EACnCK,EAAgBL,EAAO,OAAO,YAAY,EAC1CM,EAAWD,IAAkB,GAC7BE,EAAYH,GAAW,OAAOJ,EAAO,OAAO,UAAU,QAAW,WAAa,SAAW,OAEzFQ,EAA6BT,EAC/B,CACE,QAASU,EAAa,GAAM,EAC5B,OAAQ,KACR,SAAU,WACV,OAAQ,MACV,EACA,CAAC,EAWL,OACE,EAAApB,EAAA,KAAA,CAAC9D,EAAAA,UAAD,CACE,IAAKuE,EAAaY,EAAM,IAAA,GACxB,QAASV,EAAO,QAChB,cAAaA,EAAO,eAAiB,IAAA,GAC9B,QACP,YAAWI,EAAWC,IAAkB,MAAQ,YAAcA,IAAkB,OAAS,aAAe,OAAU,IAAA,GAClH,UAAW7E,EAAAA,GACT,kEACA4E,GAAW,kEACb,EACA,QAASA,EApBO,GAAwB,CACrCA,GAAY,GAAE,OAAuB,QAAQ,wCAAwC,IACtFO,GAAmBC,EAAE,SACvBZ,EAAO,OAAO,cAAc,IAAA,GAAW,EAAI,EAE3CA,EAAO,OAAO,cAAc,EAEhC,EAaoC,IAAA,GAVlC,SAAA,CAYGF,IAAc,EAAAT,EAAA,IAAA,CAAC,SAAD,CACb,KAAK,SAAS,IAAKwB,EACnB,aAAY,kBAAkBb,EAAO,OAAO,KAC5C,UAAU,8DACX,UAAA,EAAAX,EAAA,IAAA,CAAC5D,EAAAA,aAAD,CAAc,UAAU,UAAU,cAAY,MAAQ,CAAA,CAAS,CAAA,EAC/DuE,EAAO,cAAgB,MACtB,EAAAX,EAAA,KAAA,CAAC,OAAD,CAAM,UAAU,iCAAhB,SAAA,EACE,EAAAA,EAAA,IAAA,CAACkB,EAAD,CAAW,UAAW/E,EAAAA,GAAG8E,GAAY,eAAe,EAClD,GAAKC,IAAc,SAAW,CAAE,KAAM,SAAmB,QAAU,GAA4B,CAC7FO,EAAM,gBAAgB,EACtBd,EAAO,OAAO,cAAc,IAAA,GAAWW,GAAmBG,EAAM,QAAQ,CAC1E,CAAE,EAAI,CAAC,EAEN,UAAA,EAAApF,EAAAA,WAAAA,CAAWsE,EAAO,OAAO,UAAU,OAAQA,EAAO,WAAW,CAAC,CACtD,CAAA,EAEVM,IACC,EAAAjB,EAAA,KAAA,CAAC,OAAD,CAAM,UAAU,mCAAhB,SAAA,CACGgB,IAAkB,OACjB,EAAAhB,EAAA,IAAA,CAAC1D,EAAAA,UAAD,CAAW,UAAU,aAAe,CAAA,GAEpC,EAAA0D,EAAA,IAAA,CAACzD,EAAAA,YAAD,CAAa,UAAU,aAAe,CAAA,EAEvC+E,GAAmBI,IAAc,IAAA,IAAaA,GAAa,IAC1D,EAAA1B,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,qBAAsB,SAAA0B,EAAY,CAAQ,CAAA,CAExD,CAEJ,CAAA,CAAA,CAEC,CAAA,CAAA,C,EAEf,CAiHA,SAAgBC,GAAwC,CACtD,UACA,OACA,UAAU,UACV,gBACA,aACA,yBAAyB,GACzB,kBAAkB,GAClB,gBAAgB,GAChB,YACA,QACA,YACA,YACA,sBACA,mBACA,yBACA,aACA,oBACA,aAAa,KACb,mBAAmB,GACnB,iBAAgB,GAChB,mBAAkB,GAClB,eACA,QAASC,EACT,WAAYC,EACZ,uBAAuB,GACvB,qBACA,iBACA,kBAAkB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAG,EACtC,eAAe,SACf,qBAAoB,GACpB,wBACgC,CAChC,cAGA,IAAMC,GAAmBtF,EAAAA,kBAAmB,GAAUuF,EAAM,gBAAgB,EACtEC,GAAmBxF,EAAAA,kBAAmB,GAAUuF,EAAM,gBAAgB,EACtEE,EAAczF,EAAAA,kBAAmB,GAAUuF,EAAM,YAAY,EAI7DG,EAAUzF,EAAM,qBACpBA,EAAM,oBAAwB,CAAC,EAAG,CAAC,CAAC,MAC9B,OACA,EACR,EACM,CAAC0F,EAAYC,IAAiB3F,EAAM,SAAS4F,EAAiB,EAG9D,CAACC,GAAcC,IAAmB9F,EAAM,SAAuBmF,GAAqB,CAAC,CAAC,EACtF,CAACY,EAAeC,IAAoBhG,EAAM,SAA6B,CAAC,CAAC,EACzE,CAACiG,EAAkBC,IAAuBlG,EAAM,SAA0B,CAAC,CAAC,EAC5E,CAACmG,GAAcC,IAAmBpG,EAAM,SAAS,CAAC,CAAC,EACnD,CAACqG,GAAiBC,IAAsBtG,EAAM,SAClDoF,GAAwB,CACtB,UAAW,EACX,SAAU,EACZ,CACF,EACM,CAACmB,EAAaC,GAAkBxG,EAAM,SAC1CC,EAAAA,iBAAiBwG,CAAO,CAC1B,EACMC,GAAyBtB,IAAyB,IAAA,GAClDuB,EAAUxB,GAAqBU,GAC/Be,EAAaxB,GAAwBiB,GACrCQ,GAAkE,GAAY,CAClF,IAAMC,EAAO,OAAOC,GAAY,WAAaA,EAAQJ,CAAO,EAAII,EAC5D5B,IAAsB,IAAA,IAAWW,GAAgBgB,CAAI,EACzDE,KAAkBF,CAAI,CACxB,EACMG,GAAwE,GAAY,CACxF,IAAMH,EAAO,OAAOC,GAAY,WAAaA,EAAQH,CAAU,EAAIG,EAC/D3B,IAAyB,IAAA,IAAWkB,GAAmBQ,CAAI,EAC/DI,KAAqBJ,CAAI,CAC3B,EACM,CAACK,EAAgBC,IAAqBpH,EAAM,SAAwB,IAAI,EACxEqH,EAAkBrH,EAAM,YACtB,KAAK,UAAU,CAAC,GAAIsH,EAAgB,CAAC,WAAW,EAAI,CAAC,EAAI,GAAGrH,EAAAA,iBAAiBwG,CAAO,CAAC,CAAC,EAC5F,CAACA,EAASa,CAAa,CACzB,EACMC,EAAiBvH,EAAM,YACrB,IAAI,IAAY,KAAK,MAAMqH,CAAe,CAAC,EACjD,CAACA,CAAe,CAClB,EAGMG,EAAUC,EAAa,KAAK,UAAU,CAACA,EAAYJ,EAAiB,EAAQlC,EAAoB,EAAQC,CAAqB,CAAC,EAAI,KACxI,GAAII,GAAeiC,GAAcN,IAAmBK,EAAS,CAC3DJ,GAAkBI,CAAO,EACzB,IAAME,EAAiBrC,GAAiBoC,CAAU,EAClD,GAAIC,EAAgB,CAClB,GAAI,CAACvC,GAAqBuC,EAAe,SAAWA,EAAe,QAAQ,OAAS,EAAG,CAErF,IAAMC,EAAeD,EAAe,QAAQ,OAAQ,GAAMH,EAAe,IAAIK,EAAE,EAAE,CAAC,EAC9ED,EAAa,OAAS,GACxB7B,GAAgB6B,CAAY,CAEhC,CACA,GACED,EAAe,kBACf,OAAO,KAAKA,EAAe,gBAAgB,CAAC,CAAC,OAAS,EACtD,CAEA,IAAMG,EAA2C,CAAC,EAClD,IAAK,GAAM,CAACC,EAAKC,KAAU,OAAO,QAAQL,EAAe,gBAAgB,EACnEH,EAAe,IAAIO,CAAG,IACxB,EAAgBA,GAAOC,GAGvB,OAAO,KAAKF,CAAe,CAAC,CAAC,OAAS,GACxC3B,GAAoB2B,CAAe,CAEvC,CAIA,GAHI,CAACzC,GAAwBsC,EAAe,UAAYA,EAAe,WAAa,IAClFpB,GAAoB,IAAU,CAAE,GAAG0B,EAAM,SAAUN,EAAe,QAAS,EAAE,EAE3EA,EAAe,aAAeA,EAAe,YAAY,OAAS,EAAG,CAEvE,IAAMO,EAAmBP,EAAe,YAAY,OAAQ,GAAOH,EAAe,IAAIW,CAAE,CAAC,EACnFC,EAAiB,IAAI,IAAIF,CAAgB,EACzCG,EAAa,MAAM,KAAKb,CAAc,CAAC,CAAC,OAAQ,GAAO,CAACY,EAAe,IAAID,CAAE,CAAC,EAC9EG,EAAc,CAAC,GAAGJ,EAAkB,GAAGG,CAAU,EACnDC,EAAY,OAAS,GACvB7B,EAAe6B,CAAW,CAE9B,CACF,CACF,CAGA,IAAMC,GAA4CtI,EAAM,aAC/C,CACL,GAAI,YACJ,OAAQ,KACR,cAAe,GACf,MAAO,CAAE,MAAK,MAAOuI,KAAoB,CACvC,IAAMC,EAAkBD,EAAc,MAAM,MAAM,WAIlD,OAHIC,EACKA,EAAgB,UAAYA,EAAgB,SAAWC,EAAI,MAAQ,EAErEA,EAAI,MAAQ,CACrB,CACF,GACA,CAAC,CACH,EAGMC,GAAuB1I,EAAM,YAAc,CAC/C,IAAM2I,EAAOrB,EAAgB,CAACgB,GAAiB,GAAG7B,CAAO,EAAIA,EAQ7D,OANImC,EACKD,EAAK,IAAK,IAAS,CACxB,GAAGE,EACH,cAAeA,EAAI,gBAAkB,EACvC,EAAE,EAEGF,CACT,EAAG,CAACrB,EAAeb,EAAS6B,GAAiBM,CAAsB,CAAC,EAG9DE,GAAW9I,EAAM,YACpB,GAAuB,CACtB,GAAK+I,EAGL,OAAOA,EAAW,MAAM,GAAG,CAAC,CAAC,QAAiB,EAAK,IAAQ,CACzD,GACEC,GACA,OAAOA,GAAQ,UACflB,IAAQ,aACRA,IAAQ,eACRA,IAAQ,aACR,OAAO,UAAU,eAAe,KAAKkB,EAAKlB,CAAG,EAE7C,OAAQkB,EAAgClB,EAG5C,EAAGmB,CAAsB,CAC3B,EACA,CAACF,CAAU,CACb,EAGAvF,EAAM,cAAgB,CAChBiE,GAAcjC,GAAe2B,IAAmBK,GAClDjC,GAAiBkC,EAAY,CAC3B,cACA,mBACA,UACA,SAAUb,EAAW,QACvB,CAAC,CAEL,EAAG,CAACa,EAAYlB,EAAaN,EAAkBU,EAASC,EAAW,SAAUrB,GAAkBC,EAAa2B,EAAgBK,CAAO,CAAC,EAEpIhE,EAAM,cAAgB,CAChB0F,IAAmBC,IACrBA,GAAsBpD,CAAa,CAEvC,EAAG,CAACA,EAAemD,GAAiBC,EAAqB,CAAC,EAG1D,IAAMC,GAAA,EAAQlJ,EAAAA,SAAAA,CAAS,CACrB,SAAUC,GAAAA,kBACV,OAEA,QAASuI,GACT,UAAWW,EAAmBC,EAAY,IAAA,GAC1C,SAAUD,EAAmBE,GAAW,IAAA,GACxC,SAAUR,GACL,EAAa,IAAU,CACtB,IAAMb,EAAKa,EAAW,MAAM,GAAG,CAAC,CAAC,QAAiB,EAAK,IAAQ,CAC7D,GAAIC,GAAO,OAAOA,GAAQ,UAAYlB,KAAQkB,EAC5C,OAAQA,EAAgClB,EAG5C,EAAGmB,CAAsB,EACzB,OAAuC,OAAhCf,IAAO,IAAA,GAAgCsB,EAAbtB,CAAkB,CACrD,EACA,IAAA,GACJ,MAAO,CACL,UACA,gBACA,mBACA,gBACA,aACA,aACF,EACA,mBAAoB,GACpB,kBACA,qBAAsB9B,GACtB,gBAAiBS,GACjB,sBAAuBb,GACvB,yBAA0BE,GAC1B,mBAAoBe,GACpB,oBAAqBT,EACrB,mBAAoB6C,GAAoB3C,GAAyB,GAAQ,IAAA,GACzE,mBACA,iBACA,kBACF,CAAC,EAGDlD,EAAM,cAAgB,CAChBiG,GAEFA,EADqBL,EAAM,4BAA4B,CAAC,CAAC,KAAK,IAAK,GAAQX,EAAI,QAC7D,CAAY,CAElC,EAAG,CAACtC,GAAciD,EAAOK,CAAiB,CAAC,EAG3C,IAAMC,GAAe1J,EAAM,OAEjB,IAAI,EACR2J,GAAkB3J,EAAM,YAAa,GAA0B,CACnE,IAAM4J,EAAS5E,EAAM,UAAU,OAC1B4E,GAAW,MAAM,QAAQA,EAAO,KAAK,SAAS,IACnD,GAAa,QAAU,CACrB,SAAU,OAAOA,EAAO,EAAE,EAAG,QAASA,EAAO,KAAK,QAClD,IAAK,CAAC,GAAGA,EAAO,KAAK,SAAS,EAAG,QAASR,EAAM,kBAAkB,CAAC,CAAC,IAAI,GAAUS,EAAO,EAAE,EAC3F,MAAO,CAAC,GAAGtD,CAAW,CACxB,EACF,EAAG,CAAC6C,EAAO7C,CAAW,CAAC,EACjBuD,GAAgB9J,EAAM,YAAa,GAAwB,CAC/D,IAAM+J,EAAWL,GAAa,QAC9B,GAAa,QAAU,KACvB,GAAM,CAAC,SAAQ,UAAU1E,EAAM,UAC/B,GAAIA,EAAM,UAAY,CAACf,GAAwB,CAAC8F,GAAY,CAACC,GAAU,EAAA,EAAC5J,GAAAA,WAAAA,CAAWwJ,CAAM,GAAK,OAAOA,EAAO,EAAE,IAAMG,EAAS,SAAU,OACvI,IAAME,EAAUb,EAAM,kBAAkB,CAAC,CAAC,IAAI,GAAUS,EAAO,EAAE,EAE3DxF,EADQ+E,EAAM,gBAAgB,CAAC,CAAC,KAAK,GAASc,EAAM,KAAOH,EAAS,OACpD,CAAA,EAAO,QAAQ,OAAO,GAAU,CAAC7F,EAAO,eAAiBA,EAAO,OAAO,QAAQ,SAAW,CAAC,CAAC,CAAC,IAAI,GAAUA,EAAO,OAAO,EAAE,EAC5IG,GAAiB,KAAK,UAAUA,CAAa,IAAM,KAAK,UAAU0F,EAAS,GAAG,GACjF,KAAK,UAAUE,CAAO,IAAM,KAAK,UAAUF,EAAS,OAAO,GAAK,KAAK,UAAUxD,CAAW,IAAM,KAAK,UAAUwD,EAAS,KAAK,GAC/HvD,EAAe,GAASnG,EAAAA,sBAAsB8J,EAAOF,EAASF,EAAS,IAAKH,EAAO,KAAK,SAAUA,EAAO,aAAcA,EAAO,KAAK,CAAC,CACtI,EAAG,CAACR,EAAO7C,EAAatC,CAAoB,CAAC,EAGvCmG,GAAepK,EAAM,YACxB,GACQ2G,EAAQ,UAAW,GAAMiB,EAAE,KAAOyC,CAAQ,EAEnD,CAAC1D,CAAO,CACV,EAGM2D,GAActK,EAAM,iBAEtB,EAAAuD,EAAA,IAAA,CAACjD,GAAAA,iBAAD,CACE,QAAS,GAAY,CAAC,GAAGiK,EAAS,OAAO,GAAUC,IAAWjK,EAAAA,aAAa,EAAGA,EAAAA,cAAc,UAAU,CAAC,sBAAuB,CAAC,IAAIC,EAAAA,6BAA6B,SAAS,CAAC,MAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACvL,QAAS,GAAY,CAAC,GAAG+J,EAAU9J,EAAAA,SAAS,UAAU,CAAC,SAAU,QAAS,cAAe,CAAC,SAAU,CAAC,CAAC,CAAC,CAAC,EACxG,YAAakJ,GAAiB,UAAWG,GAEzC,UAAA,EAAAvG,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW7D,EAAAA,GAAG,oBAAqB+K,CAAc,EACpD,UAAA,EAAAlH,EAAA,KAAA,CAAC7C,EAAAA,MAAD,CAAA,SAAA,EACE,EAAA6C,EAAA,IAAA,CAAC5C,EAAAA,YAAD,CAAA,SACGyI,EAAM,gBAAgB,CAAC,CAAC,IAAI,GAAe,CAC1C,IAAM/E,EAAgBqG,EAAY,QAAQ,OAAO,GAAU,CAACxG,EAAO,eAAiBA,EAAO,OAAO,QAAQ,SAAW,CAAC,CAAC,CAAC,IAAI,GAAUA,EAAO,OAAO,EAAE,EACtJ,OAAO,EAAAX,EAAA,IAAA,CAAC3C,EAAAA,SAAD,CAAA,SACJ8J,EAAY,QAAQ,IAAI,IAAU,EAAAnH,EAAA,IAAA,CAACQ,GAAD,CACT,SAA8B,uBACrC,kBAAiB,UAAWqG,GAAalG,EAAO,OAAO,EAAE,EAC1E,cAAeG,EAAc,QAAQH,EAAO,OAAO,EAAE,EAAG,cAAewG,EAAY,GACpE,eAChB,EAJMxG,EAAO,EAIb,CAAC,CACM,EAPYwG,EAAY,EAOxB,CACZ,CAAC,CACU,CAAA,GACb,EAAAnH,EAAA,IAAA,CAAC1C,EAAAA,UAAD,CAAA,SACGuI,EAAM,YAAY,CAAC,CAAC,MAAM,OACzBA,EAAM,YAAY,CAAC,CAAC,KAAK,IAAK,IAC5B,EAAA7F,EAAA,IAAA,CAAC3C,EAAAA,SAAD,CAEE,aAAY6H,EAAI,cAAc,GAAK,WACnC,YACEkC,GAAcA,EAAW7B,GAASL,EAAI,QAAQ,CAAoB,EAEpE,UAAWkC,EAAa,mCAAqC,IAAA,GAE5D,SAAAlC,EAAI,gBAAgB,CAAC,CAAC,IAAK,IAC1B,EAAAlF,EAAA,IAAA,CAACzC,EAAAA,UAAD,CAAA,UAAA,EACGlB,EAAAA,WAAAA,CAAWgL,EAAK,OAAO,UAAU,KAAMA,EAAK,WAAW,CAAC,CAChD,EAFKA,EAAK,EAEV,CACZ,CACO,EAZHnC,EAAI,EAYD,CACX,GAED,EAAAlF,EAAA,IAAA,CAAC3C,EAAAA,SAAD,CAAA,UACE,EAAA2C,EAAA,IAAA,CAACzC,EAAAA,UAAD,CAAW,QAAS4H,GAAqB,OAAQ,UAAU,mBACxD,SAAA5F,EAAA,oBAAsB,CACd,CAAA,CACH,CAAA,CAEH,CAAA,CACN,CAAA,CAAA,CACJ,CAAA,CACW,CAAA,EAEpB,CACE6G,GACAG,GACAV,EACAV,GACAnC,EACAtC,EACAY,EACAuF,GACAO,EACA7B,GACA2B,CACF,CACF,EAGMI,OACJ,EAAAtH,EAAA,IAAA,CAAC,MAAD,CAAK,UAAW7D,EAAAA,GAAG,oBAAqB+K,CAAc,EACpD,UAAA,EAAAlH,EAAA,IAAA,CAAC7C,EAAAA,MAAD,CAAA,UACE,EAAA6C,EAAA,IAAA,CAAC1C,EAAAA,UAAD,CAAA,UACE,EAAA0C,EAAA,IAAA,CAAC3C,EAAAA,SAAD,CAAA,UACE,EAAA2C,EAAA,IAAA,CAACzC,EAAAA,UAAD,CAAW,UAAU,mBACnB,UAAA,EAAAyC,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,wBAAwB,SAAA,YAAe,CAAA,CAC7C,CAAA,CACH,CAAA,CACD,CAAA,CACN,CAAA,CACJ,CAAA,EAuFP,OAnFIuH,IAAY,WAEZ,EAAAvH,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW7D,EAAAA,GAAG,YAAaqL,CAAkB,EAAlD,SAAA,CACGtF,EAAU6E,GAAY,EAAIO,EAAmB,GAC9C,EAAAtH,EAAA,IAAA,CAACyH,GAAD,CAA4B,QAAwB,iBAAkB,CAAA,CACnE,C,GAKLF,IAAY,WAEZ,EAAAvH,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW7D,EAAAA,GAAG,kBAAmBqL,CAAkB,EAAxD,SAAA,CACGE,IACC,EAAA1H,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,+DACb,UAAA,EAAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,8CACb,UAAA,EAAAA,EAAA,IAAA,CAACxC,EAAAA,OAAD,CACE,KAAK,SACL,KAAK,OACL,aAAW,UACX,QAASkK,EACT,UAAU,mCAEV,UAAA,EAAA1H,EAAA,IAAA,CAACvC,EAAAA,KAAD,CAAM,UAAU,SAAW,CAAA,CACrB,CAAA,CACL,CAAA,CACF,CAAA,GAEP,EAAAuC,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,gCAAf,SAAA,EAEE,EAAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,sGAAf,SAAA,EAEE,EAAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,+EAAf,SAAA,EACE,EAAAA,EAAA,IAAA,CAAC2H,EAAD,CAA6B,OAAQ,CAAA,EACpCC,GAAiBC,IAAiB,UAAYD,EAC9CA,GAAiBC,IAAiB,UACjC,EAAA7H,EAAA,KAAA,CAACxC,EAAAA,OAAD,CACE,KAAK,SACL,QAAS2E,EAAa,UAAY,UAClC,KAAK,KACL,YAAeC,GAAc,CAACD,CAAU,EACxC,UAAU,cALZ,SAAA,EAOE,EAAAnC,EAAA,IAAA,CAACtC,EAAAA,OAAD,CAAY,UAAU,SAAW,CAAA,GACjC,EAAAsC,EAAA,IAAA,CAAC,OAAD,CAAA,SAAM,OAAW,CAAA,CACX,C,EAEP,CAEL,CAAA,GAAA,EAAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,oFAAf,SAAA,EACE,EAAAA,EAAA,IAAA,CAAC8H,GAAD,CAAmC,QAAwB,iBAAkB,CAAA,EAC5E,OAAOC,GAAc,WACpB,EAAA/H,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,kDACb,SAAA,GAAG+H,EAAU,eAAe,EAAE,GAAAzI,EAAA,gBAAqB,GAChD,CAAA,CAEL,CACF,CAAA,CAAA,C,GAEJsI,GAAiBC,IAAiB,UACjC,EAAA7H,EAAA,IAAA,CAAC,MAAD,CACE,UAAW7D,EAAAA,GACT,iFACAgG,EAAa,oBAAsB,yBACrC,EAEC,SAAAyF,CACE,CAAA,EAGNI,IACC,EAAAhI,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,qCAAsC,SAAAgI,CAA0B,CAAA,GAGjF,EAAAhI,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,uBACZ,SAAAkC,EAAU6E,GAAY,EAAIO,EAAmB,CAC3C,CAAA,CACF,CACF,CAAA,CAAA,C,IAMP,EAAAtH,EAAA,KAAA,CAAC,MAAD,CAAK,UAAW7D,EAAAA,GAAG,YAAaqL,CAAkB,EAAlD,SAAA,EACE,EAAAxH,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,oCAAf,SAAA,EACE,EAAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,yBACZ,SAAAiI,IACC,EAAAjI,EAAA,IAAA,CAACrC,EAAAA,MAAD,CACE,YAAAsB,EAAA,4BAA2C,CAAE,OAAQgJ,CAAa,CAAC,EACnE,MAAQpC,EAAM,UAAUoC,CAAY,CAAC,EAAE,eAAe,GAAgB,GACtE,SAAW,GACTpC,EAAM,UAAUoC,CAAY,CAAC,EAAE,eAAexG,EAAM,OAAO,KAAK,EAElE,UAAU,UACX,CAAA,CAEA,CAAA,GACL,EAAAzB,EAAA,IAAA,CAAC2H,EAAD,CAA6B,OAAQ,CAAA,CAClC,C,GACJK,IACC,EAAAhI,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4CAA6C,SAAAgI,CAA0B,CAAA,EAEvF9F,EAAU6E,GAAY,EAAIO,EAAmB,GAC9C,EAAAtH,EAAA,IAAA,CAACyH,GAAD,CAA4B,QAAwB,iBAAkB,CAAA,EACrEC,IACC,EAAA1H,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,+BACb,UAAA,EAAAA,EAAA,IAAA,CAACxC,EAAAA,OAAD,CACE,KAAK,SACL,KAAK,OACL,QAASkK,EACT,UAAU,mCAEV,UAAA,EAAA1H,EAAA,IAAA,CAACvC,EAAAA,KAAD,CAAM,UAAU,SAAW,CAAA,CACrB,CAAA,CACL,CAAA,CAEJ,C,EAET,CAaA,SAAgBkK,EAA2C,CAAE,SAA2C,CACtG,OACE,EAAA3H,EAAA,KAAA,CAACpC,EAAAA,aAAD,CAAA,SAAA,EACE,EAAAoC,EAAA,KAAA,CAACnC,EAAAA,oBAAD,CACE,UAAWC,EAAAA,eAAe,CAAE,QAAS,UAAW,KAAM,KAAM,UAAW,KAAM,CAAC,EADhF,SAAA,EAGE,EAAAkC,EAAA,IAAA,CAACjC,EAAAA,UAAD,CAAW,UAAU,cAAgB,CAAA,EAAA6B,GAAA,eACnB,CACC,CACrB,CAAA,GAAA,EAAAI,EAAA,IAAA,CAAChC,EAAAA,oBAAD,CAAqB,MAAM,MAAM,UAAU,OACzC,UAAA,EAAAgC,EAAA,KAAA,CAAC/B,EAAAA,kBAAD,CAAA,SAAA,EACE,EAAA+B,EAAA,IAAA,CAAC9B,EAAAA,kBAAD,CAAA,SAAAyB,EAAA,wBAA8C,CAAqB,CAAA,GACnE,EAAAK,EAAA,IAAA,CAAC7B,EAAAA,sBAAD,CAAwB,CAAA,EACvB0H,EACE,cAAc,CAAC,CACf,OAAQ,GAAkBS,EAAO,aAAe,QAAeA,EAAO,WAAW,CAAC,CAAC,CACnF,IAAK,IAEF,EAAAtG,EAAA,IAAA,CAAC5B,EAAAA,yBAAD,CAEE,UAAU,aACV,QAASkI,EAAO,aAAa,EAC7B,gBAAkB,GAAUA,EAAO,iBAAiB,CAAC,CAAC9B,CAAK,EAE1D,SAAA,OAAO8B,EAAO,UAAU,QAAW,SAChCA,EAAO,UAAU,OACjBA,EAAO,EACa,EARnBA,EAAO,EAQY,CAE7B,CACc,CAAA,CAAA,CACA,CAAA,CACT,CAAA,CAAA,CAElB,CAcA,SAAgBmB,GAA0C,CACxD,QACA,kBAAkB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAG,GACJ,CAClC,OACE,EAAAzH,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,yCAAf,SAAA,EACE,EAAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,uCACZ,SAAAN,EAAA,uBAAyB,CACxB,SAAUmG,EAAM,4BAA4B,CAAC,CAAC,KAAK,OACnD,MAAOA,EAAM,oBAAoB,CAAC,CAAC,KAAK,MAC1C,CAAC,CACE,CAAA,GACL,EAAA7F,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,2CAAf,SAAA,EACE,EAAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,8BAAf,SAAA,EACE,EAAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,sBAAuB,SAAAP,EAAA,sBAAwB,CAAK,CAAA,GACjE,EAAAO,EAAA,IAAA,CAAC,SAAD,CACE,aAAAP,EAAA,sBAAoC,EACpC,MAAO,GAAGoG,EAAM,MAAM,MAAM,WAAW,WACvC,SAAW,GAAM,CACfA,EAAM,YAAY,OAAOtE,EAAE,OAAO,KAAK,CAAC,CAC1C,EACA,UAAU,+MAET,SAAA2G,EAAgB,IAAK,IACpB,EAAAlI,EAAA,IAAA,CAAC,SAAD,CAAuB,MAAO,GAAGmI,IAC9B,SAAAA,CACK,EAFKA,CAEL,CACT,CACK,CAAA,CACL,C,IACL,EAAAnI,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,4DACZ,SAAAR,EAAA,eAAiB,CAChB,QAASqG,EAAM,MAAM,MAAM,WAAW,UAAY,EAClD,MAAOA,EAAM,aAAa,CAC5B,CAAC,CACE,CAAA,GACL,EAAA7F,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,8BAAf,SAAA,EACE,EAAAA,EAAA,KAAA,CAACxC,EAAAA,OAAD,CACE,QAAQ,UACR,KAAK,OACL,UAAU,6CACV,aAAA0B,EAAA,wBAAsC,EACtC,YAAe2G,EAAM,aAAa,CAAC,EACnC,SAAU,CAACA,EAAM,mBAAmB,EANtC,SAAA,EAQE,EAAA7F,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,UAAW,SAAAd,EAAA,wBAA0B,CAAQ,CAAA,GAC7D,EAAAc,EAAA,IAAA,CAAC3B,EAAAA,aAAD,CAAc,UAAU,SAAW,CAAA,CAC7B,C,IACR,EAAA2B,EAAA,KAAA,CAACxC,EAAAA,OAAD,CACE,QAAQ,UACR,KAAK,OACL,UAAU,8BACV,aAAA6B,EAAA,2BAAyC,EACzC,YAAewG,EAAM,aAAa,EAClC,SAAU,CAACA,EAAM,mBAAmB,EANtC,SAAA,EAQE,EAAA7F,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,UAAW,SAAAX,EAAA,2BAA6B,CAAQ,CAAA,GAChE,EAAAW,EAAA,IAAA,CAAC1B,EAAAA,YAAD,CAAa,UAAU,SAAW,CAAA,CAC5B,C,IACR,EAAA0B,EAAA,KAAA,CAACxC,EAAAA,OAAD,CACE,QAAQ,UACR,KAAK,OACL,UAAU,8BACV,aAAA4B,EAAA,uBAAqC,EACrC,YAAeyG,EAAM,SAAS,EAC9B,SAAU,CAACA,EAAM,eAAe,EANlC,SAAA,EAQE,EAAA7F,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,UAAW,SAAAZ,EAAA,uBAAyB,CAAQ,CAAA,GAC5D,EAAAY,EAAA,IAAA,CAACzB,EAAAA,aAAD,CAAc,UAAU,SAAW,CAAA,CAC7B,C,IACR,EAAAyB,EAAA,KAAA,CAACxC,EAAAA,OAAD,CACE,QAAQ,UACR,KAAK,OACL,UAAU,6CACV,aAAA2B,EAAA,uBAAqC,EACrC,YAAe0G,EAAM,aAAaA,EAAM,aAAa,EAAI,CAAC,EAC1D,SAAU,CAACA,EAAM,eAAe,EANlC,SAAA,EAQE,EAAA7F,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,UAAW,SAAAb,EAAA,uBAAyB,CAAQ,CAAA,GAC5D,EAAAa,EAAA,IAAA,CAACxB,EAAAA,cAAD,CAAe,UAAU,SAAW,CAAA,CAC9B,C,EACL,C,EACF,CACF,CAAA,CAAA,C,EAET,CAcA,SAAgBsJ,GAAiD,CAC/D,QACA,kBAAkB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAG,GACG,CACzC,IAAMM,EAAavC,EAAM,aAAa,EAEtC,OACE,EAAA7F,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,0BAAf,SAAA,EACE,EAAAA,EAAA,IAAA,CAAC,SAAD,CACM,aAAAP,EAAA,sBAAoC,EACxC,MAAO,GAAGoG,EAAM,MAAM,MAAM,WAAW,WACvC,SAAW,GAAM,CACfA,EAAM,YAAY,OAAOtE,EAAE,OAAO,KAAK,CAAC,CAC1C,EACA,UAAU,oFAET,SAAA2G,EAAgB,IAAK,IACpB,EAAAlI,EAAA,IAAA,CAAC,SAAD,CAAuB,MAAO,GAAGmI,IAC9B,SAAAA,CACK,EAFKA,CAEL,CACT,CACK,CAAA,EACPC,EAAa,IACZ,EAAApI,EAAA,KAAA,CAAAvB,EAAAA,SAAA,CAAA,SAAA,EACE,EAAAuB,EAAA,IAAA,CAACxC,EAAAA,OAAD,CACE,QAAQ,UACR,KAAK,OACL,UAAU,8BACV,aAAA0B,EAAA,wBAAsC,EACtC,YAAe2G,EAAM,aAAa,CAAC,EACnC,SAAUA,EAAM,MAAM,MAAM,WAAW,YAAc,EAErD,UAAA,EAAA7F,EAAA,IAAA,CAAC3B,EAAAA,aAAD,CAAc,UAAU,SAAW,CAAA,CAC7B,CAAA,GACR,EAAA2B,EAAA,IAAA,CAACxC,EAAAA,OAAD,CACE,QAAQ,UACR,KAAK,OACL,UAAU,8BACV,aAAA6B,EAAA,2BAAyC,EACzC,YAAewG,EAAM,aAAa,EAClC,SAAU,CAACA,EAAM,mBAAmB,EAEpC,UAAA,EAAA7F,EAAA,IAAA,CAAC1B,EAAAA,YAAD,CAAa,UAAU,SAAW,CAAA,CAC5B,CAAA,GACR,EAAA0B,EAAA,KAAA,CAAC,OAAD,CAAM,UAAU,uDAAhB,SAAA,CACG6F,EAAM,MAAM,MAAM,WAAW,UAAY,EAAE,MAAIuC,CAC5C,C,IACN,EAAApI,EAAA,IAAA,CAACxC,EAAAA,OAAD,CACE,QAAQ,UACR,KAAK,OACL,UAAU,8BACV,aAAA4B,EAAA,uBAAqC,EACrC,YAAeyG,EAAM,SAAS,EAC9B,SAAU,CAACA,EAAM,eAAe,EAEhC,UAAA,EAAA7F,EAAA,IAAA,CAACzB,EAAAA,aAAD,CAAc,UAAU,SAAW,CAAA,CAC7B,CAAA,GACR,EAAAyB,EAAA,IAAA,CAACxC,EAAAA,OAAD,CACE,QAAQ,UACR,KAAK,OACL,UAAU,8BACV,aAAA2B,EAAA,uBAAqC,EACrC,YAAe0G,EAAM,aAAauC,EAAa,CAAC,EAChD,SAAUvC,EAAM,MAAM,MAAM,WAAW,YAAcuC,EAAa,EAElE,UAAA,EAAApI,EAAA,IAAA,CAACxB,EAAAA,cAAD,CAAe,UAAU,SAAW,CAAA,CAC9B,CAAA,CACR,CAAA,CAAA,CAED,C,EAET,C"}
1
+ {"version":3,"file":"data-table.cjs","names":["useSortable","closestCenter","useAccessibleDragRef","TableHead","cn","GripVertical","flexRender","ChevronUp","ChevronDown","useDataTableStore","React","getLeafColumnIds","useTable","dataTableFeatures","isSortable","reorderVisibleColumns","DragDropProvider","PointerSensor","PointerActivationConstraints","Feedback","Table","TableHeader","TableRow","TableBody","TableCell","Button","Plus","FilterIcon","Input","DropdownMenu","DropdownMenuTrigger","buttonVariants","Settings2","DropdownMenuContent","DropdownMenuGroup","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuCheckboxItem","ChevronsLeft","ChevronLeft","ChevronRight","ChevronsRight","_Fragment","require_runtime","require_ui_lib_utils","require_ui_components_ui_button_variants","require_ui_components_ui_button_components","require_ui_components_ui_input","require_ui_components_ui_dropdown_menu","require_ui_components_ui_table","require_tools_components_ui_dnd_use_accessible_drag_ref","require_datatable_filterplaceholder2","require_datatable_gotofirstpage4","require_datatable_gotolastpage4","require_datatable_gotonextpage4","require_datatable_gotopreviouspage4","require_datatable_items1","require_datatable_noresults2","require_datatable_page1","require_datatable_rowsperpage3","require_datatable_rowsselected2","require_datatable_togglecolumns2","require_datatable_view1","require_tools_components_data_table_table_engine","require_tools_components_data_table_column_order","require_tools_components_data_table_table_store","react_jsx_runtime","react","lucide_react","_dnd_kit_react","_dnd_kit_dom","_dnd_kit_collision","_dnd_kit_react_sortable","_tanstack_react_table","DataTableColumnHeader","canReorder","enableColumnOrdering","header","sortableIndex","sortableGroup","registeredIds","columnHandleRef","handleRef","canSort","sortDirection","isSorted","SortLabel","style","isDragging","ref","enableMultiSort","e","event","sortIndex","DataTable","controlledSorting","controlledPagination","getTableSettings","state","setTableSettings","hasHydrated","mounted","filterOpen","setFilterOpen","defaultFilterOpen","localSorting","setLocalSorting","columnFilters","setColumnFilters","columnVisibility","setColumnVisibility","rowSelection","setRowSelection","localPagination","setLocalPagination","columnOrder","setColumnOrder","columns","isPaginationControlled","sorting","pagination","setSorting","next","updater","onSortingChange","setPagination","onPaginationChange","settingsLoaded","setSettingsLoaded","columnIdListKey","showRowNumber","validColumnIds","loadKey","storageKey","storedSettings","validSorting","s","validVisibility","key","value","prev","validStoredOrder","id","storedOrderSet","newColumns","mergedOrder","rowNumberColumn","tableInstance","paginationState","row","columnsWithRowNumber","cols","enableSortingByDefault","col","getRowId","rowIdField","obj","originalRow","manualFiltering","onColumnFiltersChange","table","manualPagination","pageCount","rowCount","index","onSelectionChange","dragSnapshot","handleDragStart","source","column","handleDragEnd","snapshot","target","leafIds","group","order","getSortIndex","columnId","renderTable","defaults","sensor","tableClassName","headerGroup","onRowClick","cell","renderLoadingTable","variant","containerClassName","DataTablePagination","onAdd","DataTableViewOptions","filterContent","filterLayout","DataTablePaginationCompact","itemCount","activeFiltersContent","filterColumn","pageSizeOptions","pageSize","totalPages"],"sources":["../../../../src/tools/components/data-table/data-table.tsx"],"sourcesContent":["/**\n * @fileoverview DataTable component with sorting, pagination, and persistence\n *\n * A feature-rich data table built on TanStack Table with:\n * - Three layout variants: default, toolbar, minimal\n * - Single and multi-column sorting\n * - Column reordering via drag-and-drop\n * - Column visibility toggle\n * - Settings persistence via Zustand store\n * - Row selection and click handling\n * - Server-side pagination/sorting support\n *\n * @module data-table/data-table\n */\n\nimport * as React from 'react';\nimport {\n ColumnDef,\n ColumnFiltersState,\n SortingState,\n VisibilityState,\n ColumnOrderState,\n PaginationState,\n flexRender,\n useTable,\n dataTableFeatures,\n Table as TableInstance,\n Header,\n} from './table-engine';\nimport * as m from '../../paraglide/messages.js';\n\nimport { DragDropProvider, type DragStartEvent, type DragEndEvent } from '@dnd-kit/react';\nimport { useSortable, isSortable } from '@dnd-kit/react/sortable';\nimport { PointerSensor, PointerActivationConstraints, Feedback } from '@dnd-kit/dom';\nimport { closestCenter } from '@dnd-kit/collision';\nimport { reorderVisibleColumns, getLeafColumnIds } from './column-order';\n\nimport { cn } from \"../../lib/utils\";\nimport { Button, buttonVariants } from '../ui/button';\nimport { Input } from '../ui/input';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../ui/table';\n\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n Settings2,\n GripVertical,\n Plus,\n ChevronUp,\n ChevronDown,\n Filter as FilterIcon,\n} from 'lucide-react';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuTrigger,\n DropdownMenuSeparator,\n DropdownMenuLabel,\n DropdownMenuGroup,\n} from '../ui/dropdown-menu';\n\nimport { useDataTableStore } from './table-store';\nimport { useAccessibleDragRef } from '../ui/dnd/use-accessible-drag-ref';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * テーブルレイアウトのバリアント\n * Table layout variants\n */\nexport type DataTableVariant = 'default' | 'toolbar' | 'minimal';\n\n// =============================================================================\n// Sortable Header Component\n// =============================================================================\n\ninterface DataTableColumnHeaderProps<\n TData extends object,\n TValue,\n> extends React.HTMLAttributes<HTMLTableCellElement> {\n header: Header<TData, TValue>;\n enableColumnOrdering?: boolean;\n enableMultiSort?: boolean;\n sortIndex?: number;\n sortableIndex: number;\n sortableGroup: string;\n registeredIds: string[];\n}\n\nfunction DataTableColumnHeader<TData extends object, TValue>({\n header,\n enableColumnOrdering = true,\n enableMultiSort = false,\n sortIndex,\n sortableIndex, sortableGroup, registeredIds,\n}: DataTableColumnHeaderProps<TData, TValue>) {\n const canReorder = enableColumnOrdering && !header.isPlaceholder && header.column.columns.length === 0;\n const { ref, handleRef, isDragging } = useSortable({\n id: header.id,\n index: sortableIndex,\n group: sortableGroup,\n type: sortableGroup,\n accept: sortableGroup,\n data: {columnId: header.column.id, groupId: sortableGroup, columnIds: registeredIds},\n disabled: !canReorder,\n collisionDetector: closestCenter,\n });\n\n const columnHandleRef = useAccessibleDragRef(handleRef);\n\n const canSort = header.column.getCanSort();\n const sortDirection = header.column.getIsSorted();\n const isSorted = sortDirection !== false;\n const SortLabel = canSort && typeof header.column.columnDef.header !== 'function' ? 'button' : 'span';\n\n const style: React.CSSProperties = enableColumnOrdering\n ? {\n opacity: isDragging ? 0.8 : 1,\n zIndex: isDragging ? 1 : 0,\n position: 'relative',\n cursor: 'move',\n }\n : {};\n\n const handleSort = (e: React.MouseEvent) => {\n if (!canSort || (e.target as HTMLElement).closest('button, input, select, [role=checkbox]')) return;\n if (enableMultiSort && e.shiftKey) {\n header.column.toggleSorting(undefined, true);\n } else {\n header.column.toggleSorting();\n }\n };\n\n return (\n <TableHead\n ref={canReorder ? ref : undefined}\n colSpan={header.colSpan}\n aria-hidden={header.isPlaceholder || undefined}\n style={style}\n aria-sort={canSort ? (sortDirection === 'asc' ? 'ascending' : sortDirection === 'desc' ? 'descending' : 'none') : undefined}\n className={cn(\n 'bg-primary/10 text-primary font-bold border-b border-primary/20',\n canSort && 'cursor-pointer select-none hover:bg-primary/20 transition-colors',\n )}\n onClick={canSort ? handleSort : undefined}\n >\n {canReorder && <button\n type='button' ref={columnHandleRef}\n aria-label={`Reorder column ${header.column.id}`}\n className='inline-flex h-6 w-6 items-center justify-center cursor-grab'\n ><GripVertical className='h-3 w-3' aria-hidden='true' /></button>}\n {header.isPlaceholder ? null : (\n <span className='inline-flex items-center gap-1'>\n <SortLabel className={cn(isSorted && 'font-semibold')}\n {...(SortLabel === 'button' ? { type: 'button' as const, onClick: (event: React.MouseEvent) => {\n event.stopPropagation();\n header.column.toggleSorting(undefined, enableMultiSort && event.shiftKey);\n } } : {})}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n </SortLabel>\n {/* Only show sort indicator when column is actively sorted */}\n {isSorted && (\n <span className='inline-flex items-center text-xs'>\n {sortDirection === 'asc' ? (\n <ChevronUp className='h-3.5 w-3.5' />\n ) : (\n <ChevronDown className='h-3.5 w-3.5' />\n )}\n {enableMultiSort && sortIndex !== undefined && sortIndex >= 0 && (\n <span className='text-[10px] ml-0.5'>{sortIndex + 1}</span>\n )}\n </span>\n )}\n </span>\n )}\n </TableHead>\n );\n}\n\n// =============================================================================\n// DataTable Props\n// =============================================================================\n\n/**\n * DataTableProps\n * DataTableのプロップス\n *\n * ## AI/Automation Features\n * - `testId`: Container element\n * - Pattern: `{testId}`, rows: `{testId}-row-{id}`, pagination: `{testId}-pagination`\n */\nexport interface DataTableProps<TData extends object, TValue> {\n /** AI/E2E Test用の安定ID / Stable test identifier */\n testId?: string;\n /** 列定義 / Column definitions */\n columns: ColumnDef<TData, TValue>[];\n /** データ配列 / Data array */\n data: TData[];\n /** テーブルレイアウトのバリアント / Table layout variant */\n variant?: DataTableVariant;\n /** ツールバー用カスタムフィルターコンテンツ / Custom filter content for toolbar */\n filterContent?: React.ReactNode;\n /** 設定永続化用キー(Zustandストアで使用) / Storage key for persisting settings */\n storageKey?: string;\n /** 全カラムをデフォルトでソート可能にする / Enable sorting on all columns by default */\n enableSortingByDefault?: boolean;\n /** 複数カラムソートを有効化 / Enable multi-column sorting */\n enableMultiSort?: boolean;\n /** 行番号カラムを表示 / Show row number column */\n showRowNumber?: boolean;\n /** アイテム総数(表示用) / Total item count for display */\n itemCount?: number;\n /** 追加ボタンのコールバック / Callback for floating add button */\n onAdd?: () => void;\n /** 総ページ数(手動ページネーション時) / Total page count for manual pagination */\n pageCount?: number;\n /** 総行数(手動ページネーション時) / Total row count for manual pagination */\n rowCount?: number;\n /**\n * ページ変更時のコールバック / Pagination change callback\n * 操作による変更要求時に通知。初期マウント・props同期では通知しません。\n */\n onPaginationChange?: (pagination: { pageIndex: number; pageSize: number }) => void;\n /** ソートの変更要求時のコールバック(初期マウント・props同期では通知しない) / Requested sorting change */\n onSortingChange?: (sorting: SortingState) => void;\n /** フィルタ変更時のコールバック / Filter change callback */\n onColumnFiltersChange?: (filters: ColumnFiltersState) => void;\n /** 行クリック時のコールバック / Row click callback */\n onRowClick?: (rowId: string | number) => void;\n /** 選択変更時のコールバック / Selection change callback */\n onSelectionChange?: (selectedRows: TData[]) => void;\n /** 行ID用フィールド名 / Row ID field name */\n rowIdField?: string;\n /** サーバーサイドページネーション / Server-side pagination */\n manualPagination?: boolean;\n /** サーバーサイドソート / Server-side sorting */\n manualSorting?: boolean;\n /** サーバーサイドフィルタ / Server-side filtering */\n manualFiltering?: boolean;\n /** フィルタ対象カラム / Filter column name */\n filterColumn?: string;\n /** ページサイズのオプション / Page size options */\n pageSizeOptions?: number[];\n /** ソート推移のオプション(外部制御用) / Sorting state for controlled mode */\n sorting?: SortingState;\n /**\n * 現在のページネーション(外部制御用) / Pagination state for controlled mode\n * 指定時はページ自動リセット(autoResetPageIndex)を無効化します。\n */\n pagination?: PaginationState;\n /** 列の並べ替え有効化 / Enable column reordering */\n enableColumnOrdering?: boolean;\n /** コンテナのクラス名 / Container class name */\n containerClassName?: string;\n /** テーブルのクラス名 / Table class name */\n tableClassName?: string;\n /** フィルターのレイアウトモード / Filter layout mode */\n filterLayout?: 'inline' | 'panel';\n /** フィルターパネルの初期開閉状態 / Default open state of the filter panel */\n defaultFilterOpen?: boolean;\n /** アクティブフィルター表示用のコンテンツ / Custom active filters component or node */\n activeFiltersContent?: React.ReactNode;\n}\n\n// =============================================================================\n// DataTable Component\n// =============================================================================\n\n/**\n * Render a sortable/filterable table with host-controlled or local state.\n * @typeParam TData - Object shape of each data row.\n * @typeParam TValue - Column cell-value type shared by the supplied column definitions.\n * @param props - Columns, data, presentation and feature/state options. Native leaf\n * reordering is enabled by default; sort and reorder buttons remain separate.\n * @returns The table with its configured toolbar, pagination and interaction surfaces.\n * @remarks Hidden/grouped columns retain stable persisted slots; changing current\n * columns or visibility invalidates an active reorder snapshot. Controlled sorting\n * and pagination remain host-owned. Supplying pagination notifies onPaginationChange\n * even without manualPagination and disables automatic page-index reset on data updates.\n * Import Appkit CSS once; this component owns its native drag provider.\n * @example\n * ```tsx\n * import {DataTable} from '@alneas/appkit-react/tools/data-table';\n * import '@alneas/appkit-react/styles';\n * export function ReviewTable() {\n * return <DataTable data={[{id: 'one', title: 'Review'}]}\n * columns={[{accessorKey: 'title', header: 'Title'}]} />;\n * }\n * ```\n */\nexport function DataTable<TData extends object, TValue>({\n columns,\n data,\n variant = 'default',\n filterContent,\n storageKey,\n enableSortingByDefault = true,\n enableMultiSort = false,\n showRowNumber = false,\n itemCount,\n onAdd,\n pageCount,\n rowCount,\n onPaginationChange,\n onSortingChange,\n onColumnFiltersChange,\n onRowClick,\n onSelectionChange,\n rowIdField = 'id',\n manualPagination = false,\n manualSorting = false,\n manualFiltering = false,\n filterColumn,\n sorting: controlledSorting,\n pagination: controlledPagination,\n enableColumnOrdering = true,\n containerClassName,\n tableClassName,\n pageSizeOptions = [10, 20, 30, 50, 100],\n filterLayout = 'inline',\n defaultFilterOpen = false,\n activeFiltersContent,\n}: DataTableProps<TData, TValue>) {\n 'use no memo';\n\n // Get persisted settings from store (must be called before any early returns)\n const getTableSettings = useDataTableStore((state) => state.getTableSettings);\n const setTableSettings = useDataTableStore((state) => state.setTableSettings);\n const hasHydrated = useDataTableStore((state) => state._hasHydrated);\n\n // SSR safety: Only render on client\n // useSyncExternalStore ensures we have a consistent value during hydration\n const mounted = React.useSyncExternalStore(\n React.useCallback(() => () => {}, []),\n () => true,\n () => false,\n );\n const [filterOpen, setFilterOpen] = React.useState(defaultFilterOpen);\n\n // Initialize state with default values (SSR-safe)\n const [localSorting, setLocalSorting] = React.useState<SortingState>(controlledSorting || []);\n const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([]);\n const [columnVisibility, setColumnVisibility] = React.useState<VisibilityState>({});\n const [rowSelection, setRowSelection] = React.useState({});\n const [localPagination, setLocalPagination] = React.useState<PaginationState>(\n controlledPagination || {\n pageIndex: 0,\n pageSize: 10,\n },\n );\n const [columnOrder, setColumnOrder] = React.useState<ColumnOrderState>(\n getLeafColumnIds(columns),\n );\n const isPaginationControlled = controlledPagination !== undefined;\n const sorting = controlledSorting ?? localSorting;\n const pagination = controlledPagination ?? localPagination;\n const setSorting: React.Dispatch<React.SetStateAction<SortingState>> = (updater) => {\n const next = typeof updater === 'function' ? updater(sorting) : updater;\n if (controlledSorting === undefined) setLocalSorting(next);\n onSortingChange?.(next);\n };\n const setPagination: React.Dispatch<React.SetStateAction<PaginationState>> = (updater) => {\n const next = typeof updater === 'function' ? updater(pagination) : updater;\n if (controlledPagination === undefined) setLocalPagination(next);\n onPaginationChange?.(next);\n };\n const [settingsLoaded, setSettingsLoaded] = React.useState<string | null>(null);\n const columnIdListKey = React.useMemo(\n () => JSON.stringify([...(showRowNumber ? ['rowNumber'] : []), ...getLeafColumnIds(columns)]),\n [columns, showRowNumber],\n );\n const validColumnIds = React.useMemo(\n () => new Set<string>(JSON.parse(columnIdListKey)),\n [columnIdListKey],\n );\n\n // Guarded render-time hydration, avoiding a stale-state effect render.\n const loadKey = storageKey ? JSON.stringify([storageKey, columnIdListKey, Boolean(controlledSorting), Boolean(controlledPagination)]) : null;\n if (hasHydrated && storageKey && settingsLoaded !== loadKey) {\n setSettingsLoaded(loadKey);\n const storedSettings = getTableSettings(storageKey);\n if (storedSettings) {\n if (!controlledSorting && storedSettings.sorting && storedSettings.sorting.length > 0) {\n // Filter out sorting for columns that no longer exist\n const validSorting = storedSettings.sorting.filter((s) => validColumnIds.has(s.id));\n if (validSorting.length > 0) {\n setLocalSorting(validSorting);\n }\n }\n if (\n storedSettings.columnVisibility &&\n Object.keys(storedSettings.columnVisibility).length > 0\n ) {\n // Filter out visibility for columns that no longer exist\n const validVisibility: Record<string, boolean> = {};\n for (const [key, value] of Object.entries(storedSettings.columnVisibility)) {\n if (validColumnIds.has(key)) {\n validVisibility[key] = value;\n }\n }\n if (Object.keys(validVisibility).length > 0) {\n setColumnVisibility(validVisibility);\n }\n }\n if (!controlledPagination && storedSettings.pageSize && storedSettings.pageSize !== 10) {\n setLocalPagination((prev) => ({ ...prev, pageSize: storedSettings.pageSize }));\n }\n if (storedSettings.columnOrder && storedSettings.columnOrder.length > 0) {\n // Filter out columns that no longer exist and add new columns\n const validStoredOrder = storedSettings.columnOrder.filter((id) => validColumnIds.has(id));\n const storedOrderSet = new Set(validStoredOrder);\n const newColumns = Array.from(validColumnIds).filter((id) => !storedOrderSet.has(id));\n const mergedOrder = [...validStoredOrder, ...newColumns];\n if (mergedOrder.length > 0) {\n setColumnOrder(mergedOrder);\n }\n }\n }\n }\n\n // Row number column definition (MUST be called before early return)\n const rowNumberColumn: ColumnDef<TData, TValue> = React.useMemo(\n () => ({\n id: 'rowNumber',\n header: 'No',\n enableSorting: false,\n cell: ({ row, table: tableInstance }) => {\n const paginationState = tableInstance.store.state.pagination;\n if (paginationState) {\n return paginationState.pageIndex * paginationState.pageSize + row.index + 1;\n }\n return row.index + 1;\n },\n }),\n [],\n );\n\n // Add row number column if requested (MUST be called before early return)\n const columnsWithRowNumber = React.useMemo(() => {\n const cols = showRowNumber ? [rowNumberColumn, ...columns] : columns;\n // Apply enableSortingByDefault to all columns that don't explicitly disable sorting\n if (enableSortingByDefault) {\n return cols.map((col) => ({\n ...col,\n enableSorting: col.enableSorting !== false,\n }));\n }\n return cols;\n }, [showRowNumber, columns, rowNumberColumn, enableSortingByDefault]);\n\n // Helper to extract nested ID safely (MUST be called before early return)\n const getRowId = React.useCallback(\n (originalRow: TData) => {\n if (!rowIdField) return undefined;\n // Simple dot notation support for id field\n\n return rowIdField.split('_').reduce<unknown>((obj, key) => {\n if (\n obj &&\n typeof obj === 'object' &&\n key !== '__proto__' &&\n key !== 'constructor' &&\n key !== 'prototype' &&\n Object.prototype.hasOwnProperty.call(obj, key)\n ) {\n return (obj as Record<string, unknown>)[key];\n }\n return undefined;\n }, originalRow as unknown);\n },\n [rowIdField],\n );\n\n // Persist settings to store (MUST be called before early return)\n React.useEffect(() => {\n if (storageKey && hasHydrated && settingsLoaded === loadKey) {\n setTableSettings(storageKey, {\n columnOrder,\n columnVisibility,\n sorting,\n pageSize: pagination.pageSize,\n });\n }\n }, [storageKey, columnOrder, columnVisibility, sorting, pagination.pageSize, setTableSettings, hasHydrated, settingsLoaded, loadKey]);\n\n React.useEffect(() => {\n if (manualFiltering && onColumnFiltersChange) {\n onColumnFiltersChange(columnFilters);\n }\n }, [columnFilters, manualFiltering, onColumnFiltersChange]);\n\n // Create table instance (MUST be called before early return)\n const table = useTable({\n features: dataTableFeatures,\n data,\n // Table 9 erases heterogeneous cell values to unknown at the table boundary.\n columns: columnsWithRowNumber as ColumnDef<TData>[],\n pageCount: manualPagination ? pageCount : undefined,\n rowCount: manualPagination ? rowCount : undefined,\n getRowId: rowIdField\n ? (originalRow, index) => {\n const id = rowIdField.split('_').reduce<unknown>((obj, key) => {\n if (obj && typeof obj === 'object' && key in (obj as Record<string, unknown>)) {\n return (obj as Record<string, unknown>)[key];\n }\n return undefined;\n }, originalRow as unknown);\n return id !== undefined ? String(id) : String(index);\n }\n : undefined,\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n rowSelection,\n pagination,\n columnOrder,\n },\n enableRowSelection: true,\n enableMultiSort,\n onRowSelectionChange: setRowSelection,\n onSortingChange: setSorting,\n onColumnFiltersChange: setColumnFilters,\n onColumnVisibilityChange: setColumnVisibility,\n onPaginationChange: setPagination,\n onColumnOrderChange: setColumnOrder,\n autoResetPageIndex: manualPagination || isPaginationControlled ? false : undefined,\n manualPagination,\n manualSorting,\n manualFiltering,\n });\n\n // Sync selection to parent (MUST be called before early return)\n React.useEffect(() => {\n if (onSelectionChange) {\n const selectedRows = table.getFilteredSelectedRowModel().rows.map((row) => row.original);\n onSelectionChange(selectedRows);\n }\n }, [rowSelection, table, onSelectionChange]);\n\n // A drag captures the registered leaf subset. Hidden/changed columns never use stale indices.\n const dragSnapshot = React.useRef<{\n sourceId: string; groupId: string; ids: string[]; leafIds: string[]; order: string[];\n } | null>(null);\n const handleDragStart = React.useCallback((event: DragStartEvent) => {\n const source = event.operation.source;\n if (!source || !Array.isArray(source.data.columnIds)) return;\n dragSnapshot.current = {\n sourceId: String(source.id), groupId: source.data.groupId,\n ids: [...source.data.columnIds], leafIds: table.getAllLeafColumns().map(column => column.id),\n order: [...columnOrder],\n };\n }, [table, columnOrder]);\n const handleDragEnd = React.useCallback((event: DragEndEvent) => {\n const snapshot = dragSnapshot.current;\n dragSnapshot.current = null;\n const {source, target} = event.operation;\n if (event.canceled || !enableColumnOrdering || !snapshot || !target || !isSortable(source) || String(source.id) !== snapshot.sourceId) return;\n const leafIds = table.getAllLeafColumns().map(column => column.id);\n const group = table.getHeaderGroups().find(group => group.id === snapshot.groupId);\n const registeredIds = group?.headers.filter(header => !header.isPlaceholder && header.column.columns.length === 0).map(header => header.column.id);\n if (!registeredIds || JSON.stringify(registeredIds) !== JSON.stringify(snapshot.ids) ||\n JSON.stringify(leafIds) !== JSON.stringify(snapshot.leafIds) || JSON.stringify(columnOrder) !== JSON.stringify(snapshot.order)) return;\n setColumnOrder(order => reorderVisibleColumns(order, leafIds, snapshot.ids, source.data.columnId, source.initialIndex, source.index));\n }, [table, columnOrder, enableColumnOrdering]);\n\n // Get sort index for multi-sort display (MUST be called before early return)\n const getSortIndex = React.useCallback(\n (columnId: string): number => {\n return sorting.findIndex((s) => s.id === columnId);\n },\n [sorting],\n );\n\n // Render table content (MUST be called before early return)\n const renderTable = React.useCallback(\n () => (\n <DragDropProvider\n sensors={defaults => [...defaults.filter(sensor => sensor !== PointerSensor), PointerSensor.configure({activationConstraints: [new PointerActivationConstraints.Distance({value: 8})]})]}\n plugins={defaults => [...defaults, Feedback.configure({feedback: 'clone', dropAnimation: {duration: 0}})]}\n onDragStart={handleDragStart} onDragEnd={handleDragEnd}\n >\n <div className={cn('rounded-md border', tableClassName)}>\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map(headerGroup => {\n const registeredIds = headerGroup.headers.filter(header => !header.isPlaceholder && header.column.columns.length === 0).map(header => header.column.id);\n return <TableRow key={headerGroup.id}>\n {headerGroup.headers.map(header => <DataTableColumnHeader\n key={header.id} header={header} enableColumnOrdering={enableColumnOrdering}\n enableMultiSort={enableMultiSort} sortIndex={getSortIndex(header.column.id)}\n sortableIndex={registeredIds.indexOf(header.column.id)} sortableGroup={headerGroup.id}\n registeredIds={registeredIds}\n />)}\n </TableRow>;\n })}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && 'selected'}\n onClick={() =>\n onRowClick && onRowClick(getRowId(row.original) as string | number)\n }\n className={onRowClick ? 'cursor-pointer hover:bg-muted/50' : undefined}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell colSpan={columnsWithRowNumber.length} className='h-24 text-center'>\n {m.dataTable_noResults()}\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n </DragDropProvider>\n ),\n [\n handleDragStart,\n handleDragEnd,\n table,\n columnsWithRowNumber,\n columnOrder,\n enableColumnOrdering,\n enableMultiSort,\n getSortIndex,\n onRowClick,\n getRowId,\n tableClassName,\n ],\n );\n\n // Render loading table during SSR - simple version to avoid hydration issues\n const renderLoadingTable = () => (\n <div className={cn('rounded-md border', tableClassName)}>\n <Table>\n <TableBody>\n <TableRow>\n <TableCell className='h-24 text-center'>\n <div className='text-muted-foreground'>Loading...</div>\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </div>\n );\n\n // Variant: minimal - just table with pagination\n if (variant === 'minimal') {\n return (\n <div className={cn('space-y-4', containerClassName)}>\n {mounted ? renderTable() : renderLoadingTable()}\n <DataTablePagination table={table} pageSizeOptions={pageSizeOptions} />\n </div>\n );\n }\n\n // Variant: toolbar - setagaya-front style with toolbar above table\n if (variant === 'toolbar') {\n return (\n <div className={cn('relative h-full', containerClassName)}>\n {onAdd && (\n <div className='absolute left-0 top-0 w-full h-full z-10 pointer-events-none'>\n <div className='fixed right-4 bottom-10 pointer-events-auto'>\n <Button\n type='button'\n size='icon'\n aria-label='Add row'\n onClick={onAdd}\n className='w-12 h-12 rounded-full shadow-lg'\n >\n <Plus className='w-6 h-6' />\n </Button>\n </div>\n </div>\n )}\n <div className='relative h-full flex flex-col'>\n {/* Toolbar */}\n <div className='bg-muted p-2 rounded-t-md grid grid-cols-1 sm:grid-cols-[1fr_minmax(0,auto)_1fr] items-center gap-2'>\n {/* Center: Column settings + filter content */}\n <div className='flex flex-wrap justify-center items-center gap-2 sm:col-start-2 sm:col-end-3'>\n <DataTableViewOptions table={table} />\n {filterContent && filterLayout === 'inline' && filterContent}\n {filterContent && filterLayout === 'panel' && (\n <Button\n type='button'\n variant={filterOpen ? 'default' : 'outline'}\n size='sm'\n onClick={() => setFilterOpen(!filterOpen)}\n className='h-8 gap-1.5'\n >\n <FilterIcon className='h-4 w-4' />\n <span>フィルター</span>\n </Button>\n )}\n </div>\n {/* Right: Pagination + count */}\n <div className='flex items-center gap-3 justify-center sm:justify-end sm:col-start-3 sm:col-end-4'>\n <DataTablePaginationCompact table={table} pageSizeOptions={pageSizeOptions} />\n {typeof itemCount === 'number' && (\n <span className='text-sm text-muted-foreground whitespace-nowrap'>\n {`${itemCount.toLocaleString()} ${m.dataTable_items()}`}\n </span>\n )}\n </div>\n </div>\n {/* Filter Panel (Collapsible) */}\n {filterContent && filterLayout === 'panel' && (\n <div\n className={cn(\n 'border-b transition-all duration-200 ease-in-out overflow-hidden bg-background',\n filterOpen ? 'max-h-[500px] p-4' : 'max-h-0 p-0 border-none',\n )}\n >\n {filterContent}\n </div>\n )}\n {/* Active Filters Display */}\n {activeFiltersContent && (\n <div className='bg-background px-4 py-1.5 border-b'>{activeFiltersContent}</div>\n )}\n {/* Table */}\n <div className='flex-1 overflow-auto'>\n {mounted ? renderTable() : renderLoadingTable()}\n </div>\n </div>\n </div>\n );\n }\n\n // Variant: default - current behavior\n return (\n <div className={cn('space-y-4', containerClassName)}>\n <div className='flex items-center justify-between'>\n <div className='flex items-center py-4'>\n {filterColumn && (\n <Input\n placeholder={m.dataTable_filterPlaceholder({ column: filterColumn })}\n value={(table.getColumn(filterColumn)?.getFilterValue() as string) ?? ''}\n onChange={(event) =>\n table.getColumn(filterColumn)?.setFilterValue(event.target.value)\n }\n className='max-w-sm'\n />\n )}\n </div>\n <DataTableViewOptions table={table} />\n </div>\n {activeFiltersContent && (\n <div className='border rounded-md bg-background px-3 py-1'>{activeFiltersContent}</div>\n )}\n {mounted ? renderTable() : renderLoadingTable()}\n <DataTablePagination table={table} pageSizeOptions={pageSizeOptions} />\n {onAdd && (\n <div className='fixed right-4 bottom-10 z-10'>\n <Button\n type='button'\n size='icon'\n onClick={onAdd}\n className='w-12 h-12 rounded-full shadow-lg'\n >\n <Plus className='w-6 h-6' />\n </Button>\n </div>\n )}\n </div>\n );\n}\n\n// =============================================================================\n// View Options Component\n// =============================================================================\n\ninterface DataTableViewOptionsProps<TData extends object> {\n table: TableInstance<TData>;\n}\n\n/**\n * テーブルの表示列を切り替える設定ドロップダウンメニューコンポーネント\n */\nexport function DataTableViewOptions<TData extends object>({ table }: DataTableViewOptionsProps<TData>) {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n className={buttonVariants({ variant: 'default', size: 'sm', className: 'h-8' })}\n >\n <Settings2 className='mr-2 h-4 w-4' />\n {m.dataTable_view()}\n </DropdownMenuTrigger>\n <DropdownMenuContent align='end' className='w-40'>\n <DropdownMenuGroup>\n <DropdownMenuLabel>{m.dataTable_toggleColumns()}</DropdownMenuLabel>\n <DropdownMenuSeparator />\n {table\n .getAllColumns()\n .filter((column) => typeof column.accessorFn !== 'undefined' && column.getCanHide())\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n className='capitalize'\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {typeof column.columnDef.header === 'string'\n ? column.columnDef.header\n : column.id}\n </DropdownMenuCheckboxItem>\n );\n })}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\n// =============================================================================\n// Pagination Component (Full)\n// =============================================================================\n\ninterface DataTablePaginationProps<TData extends object> {\n table: TableInstance<TData>;\n pageSizeOptions?: number[];\n}\n\n/**\n * テーブルの標準的なページネーションコントロールコンポーネント\n */\nexport function DataTablePagination<TData extends object>({\n table,\n pageSizeOptions = [10, 20, 30, 50, 100],\n}: DataTablePaginationProps<TData>) {\n return (\n <div className='flex items-center justify-between px-2'>\n <div className='flex-1 text-sm text-muted-foreground'>\n {m.dataTable_rowsSelected({\n selected: table.getFilteredSelectedRowModel().rows.length,\n total: table.getFilteredRowModel().rows.length,\n })}\n </div>\n <div className='flex items-center space-x-6 lg:space-x-8'>\n <div className='flex items-center space-x-2'>\n <p className='text-sm font-medium'>{m.dataTable_rowsPerPage()}</p>\n <select\n aria-label={m.dataTable_rowsPerPage()}\n value={`${table.store.state.pagination.pageSize}`}\n onChange={(e) => {\n table.setPageSize(Number(e.target.value));\n }}\n className='h-8 w-fit min-w-16 rounded-md border border-input bg-background px-2 py-1 text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2'\n >\n {pageSizeOptions.map((pageSize) => (\n <option key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </option>\n ))}\n </select>\n </div>\n <div className='flex w-24 items-center justify-center text-sm font-medium'>\n {m.dataTable_page({\n current: table.store.state.pagination.pageIndex + 1,\n total: table.getPageCount(),\n })}\n </div>\n <div className='flex items-center space-x-2'>\n <Button\n variant='default'\n size='icon'\n className='hidden h-8 w-8 lg:flex hover:bg-primary/90'\n aria-label={m.dataTable_goToFirstPage()}\n onClick={() => table.setPageIndex(0)}\n disabled={!table.getCanPreviousPage()}\n >\n <span className='sr-only'>{m.dataTable_goToFirstPage()}</span>\n <ChevronsLeft className='h-4 w-4' />\n </Button>\n <Button\n variant='default'\n size='icon'\n className='h-8 w-8 hover:bg-primary/90'\n aria-label={m.dataTable_goToPreviousPage()}\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <span className='sr-only'>{m.dataTable_goToPreviousPage()}</span>\n <ChevronLeft className='h-4 w-4' />\n </Button>\n <Button\n variant='default'\n size='icon'\n className='h-8 w-8 hover:bg-primary/90'\n aria-label={m.dataTable_goToNextPage()}\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n <span className='sr-only'>{m.dataTable_goToNextPage()}</span>\n <ChevronRight className='h-4 w-4' />\n </Button>\n <Button\n variant='default'\n size='icon'\n className='hidden h-8 w-8 lg:flex hover:bg-primary/90'\n aria-label={m.dataTable_goToLastPage()}\n onClick={() => table.setPageIndex(table.getPageCount() - 1)}\n disabled={!table.getCanNextPage()}\n >\n <span className='sr-only'>{m.dataTable_goToLastPage()}</span>\n <ChevronsRight className='h-4 w-4' />\n </Button>\n </div>\n </div>\n </div>\n );\n}\n\n// =============================================================================\n// Pagination Component (Compact - for toolbar variant)\n// =============================================================================\n\ninterface DataTablePaginationCompactProps<TData extends object> {\n table: TableInstance<TData>;\n pageSizeOptions?: number[];\n}\n\n/**\n * ツールバー等に配置するコンパクトなページネーションコントロールコンポーネント\n */\nexport function DataTablePaginationCompact<TData extends object>({\n table,\n pageSizeOptions = [10, 20, 30, 50, 100],\n}: DataTablePaginationCompactProps<TData>) {\n const totalPages = table.getPageCount();\n\n return (\n <div className='flex items-center gap-1'>\n <select\n aria-label={m.dataTable_rowsPerPage()}\n value={`${table.store.state.pagination.pageSize}`}\n onChange={(e) => {\n table.setPageSize(Number(e.target.value));\n }}\n className='h-8 w-fit min-w-16 rounded-md border border-input bg-background px-2 py-1 text-sm'\n >\n {pageSizeOptions.map((pageSize) => (\n <option key={pageSize} value={`${pageSize}`}>\n {pageSize}\n </option>\n ))}\n </select>\n {totalPages > 1 && (\n <>\n <Button\n variant='default'\n size='icon'\n className='h-8 w-8 hover:bg-primary/90'\n aria-label={m.dataTable_goToFirstPage()}\n onClick={() => table.setPageIndex(0)}\n disabled={table.store.state.pagination.pageIndex === 0}\n >\n <ChevronsLeft className='h-4 w-4' />\n </Button>\n <Button\n variant='default'\n size='icon'\n className='h-8 w-8 hover:bg-primary/90'\n aria-label={m.dataTable_goToPreviousPage()}\n onClick={() => table.previousPage()}\n disabled={!table.getCanPreviousPage()}\n >\n <ChevronLeft className='h-4 w-4' />\n </Button>\n <span className='text-sm text-muted-foreground whitespace-nowrap px-1'>\n {table.store.state.pagination.pageIndex + 1} / {totalPages}\n </span>\n <Button\n variant='default'\n size='icon'\n className='h-8 w-8 hover:bg-primary/90'\n aria-label={m.dataTable_goToNextPage()}\n onClick={() => table.nextPage()}\n disabled={!table.getCanNextPage()}\n >\n <ChevronRight className='h-4 w-4' />\n </Button>\n <Button\n variant='default'\n size='icon'\n className='h-8 w-8 hover:bg-primary/90'\n aria-label={m.dataTable_goToLastPage()}\n onClick={() => table.setPageIndex(totalPages - 1)}\n disabled={table.store.state.pagination.pageIndex === totalPages - 1}\n >\n <ChevronsRight className='h-4 w-4' />\n </Button>\n </>\n )}\n </div>\n );\n}\n"],"mappings":"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"}