@uselets/ui 2.0.2 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +8 -0
  2. package/dist/checkbox-group-context-HDVxTNPi.js +2 -0
  3. package/dist/checkbox-group-context-HDVxTNPi.js.map +1 -0
  4. package/dist/combobox-styles-CZ0aJayc.js +2 -0
  5. package/dist/combobox-styles-CZ0aJayc.js.map +1 -0
  6. package/dist/components/autocomplete.d.ts +46 -0
  7. package/dist/components/autocomplete.js +2 -0
  8. package/dist/components/autocomplete.js.map +1 -0
  9. package/dist/components/badge.js +1 -1
  10. package/dist/components/button.js +1 -1
  11. package/dist/components/checkbox-group.d.ts +19 -0
  12. package/dist/components/checkbox-group.js +2 -0
  13. package/dist/components/checkbox-group.js.map +1 -0
  14. package/dist/components/checkbox.d.ts +2 -2
  15. package/dist/components/checkbox.js +1 -1
  16. package/dist/components/checkbox.js.map +1 -1
  17. package/dist/components/combobox.js +1 -1
  18. package/dist/components/combobox.js.map +1 -1
  19. package/dist/components/command.js +1 -1
  20. package/dist/components/data-table.js +1 -1
  21. package/dist/components/dropzone.js +1 -1
  22. package/dist/components/dropzone.js.map +1 -1
  23. package/dist/components/field.js +1 -1
  24. package/dist/components/mask-input.d.ts +1 -1
  25. package/dist/components/mask-input.js +1 -1
  26. package/dist/components/meter.d.ts +21 -0
  27. package/dist/components/meter.js +2 -0
  28. package/dist/components/meter.js.map +1 -0
  29. package/dist/components/number-field.js +1 -1
  30. package/dist/components/phone-input.js +1 -1
  31. package/dist/components/progress.js +1 -1
  32. package/dist/components/progress.js.map +1 -1
  33. package/dist/components/radio-group.js +1 -1
  34. package/dist/components/ring-progress.js +1 -1
  35. package/dist/components/sidebar.d.ts +1 -1
  36. package/dist/components/sidebar.js +1 -1
  37. package/dist/components/sidebar.js.map +1 -1
  38. package/dist/components/stepper.js +1 -1
  39. package/dist/components/stepper.js.map +1 -1
  40. package/dist/components/switch.js +1 -1
  41. package/dist/components/toggle.js +1 -1
  42. package/dist/components/toolbar.d.ts +30 -0
  43. package/dist/components/toolbar.js +2 -0
  44. package/dist/components/toolbar.js.map +1 -0
  45. package/dist/index.d.ts +20 -16
  46. package/dist/index.js +1 -1
  47. package/dist/skills/uselets-ui/SKILL.md +3 -3
  48. package/dist/skills/uselets-ui/references/component-catalog.md +14 -2
  49. package/dist/skills/uselets-ui/references/package-guide.md +3 -3
  50. package/package.json +9 -9
  51. package/skills/uselets-ui/SKILL.md +3 -3
  52. package/skills/uselets-ui/references/component-catalog.md +14 -2
  53. package/skills/uselets-ui/references/package-guide.md +3 -3
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Button as t}from"./button.js";import{Checkbox as n}from"./checkbox.js";import{Input as r}from"./input.js";import{InputGroup as i,InputGroupAddon as a,InputGroupInput as o}from"./input-group.js";import{DropdownMenu as s,DropdownMenuCheckboxItem as c,DropdownMenuContent as l,DropdownMenuGroup as u,DropdownMenuTrigger as d}from"./dropdown-menu.js";import{Select as f,SelectContent as p,SelectGroup as m,SelectItem as h,SelectTrigger as g,SelectValue as _}from"./select.js";import{Table as v,TableBody as y,TableCell as b,TableContainer as x,TableHead as S,TableHeader as C,TableRow as w}from"./table.js";import{IconArrowsSort as T,IconChevronLeft as E,IconChevronRight as D,IconChevronsLeft as ee,IconChevronsRight as te,IconColumns3 as ne,IconSortAscending as O,IconSortDescending as k}from"@tabler/icons-react";import*as A from"react";import{jsx as j,jsxs as M}from"react/jsx-runtime";import{columnFilteringFeature as N,columnVisibilityFeature as P,createFilteredRowModel as F,createPaginatedRowModel as I,createSortedRowModel as L,filterFn_arrIncludes as R,filterFn_equals as z,filterFn_inDateRange as B,filterFn_inNumberRange as V,filterFn_includesString as H,filterFn_weakEquals as U,flexRender as W,rowPaginationFeature as G,rowSelectionFeature as K,rowSortingFeature as q,sortFn_alphanumeric as J,sortFn_basic as Y,sortFn_datetime as X,sortFn_text as re,tableFeatures as ie,useTable as ae}from"@tanstack/react-table";const oe=ie({columnFilteringFeature:N,rowSortingFeature:q,rowPaginationFeature:G,rowSelectionFeature:K,columnVisibilityFeature:P,filteredRowModel:F(),sortedRowModel:L(),paginatedRowModel:I(),filterFns:{includesString:H,inNumberRange:V,equals:z,arrIncludes:R,inDateRange:B,weakEquals:U},sortFns:{alphanumeric:J,text:re,datetime:X,basic:Y}}),Z={filterPlaceholder:`Filtrar linhas...`,filterColumnSelectorLabel:`Coluna para filtrar`,emptyMessage:`Nenhum resultado.`,columnsButton:`Colunas`,rowsPerPage:`Linhas por página`,pageOf:(e,t)=>`Página ${e} de ${t}`,goToFirstPage:`Ir para a primeira página`,goToPreviousPage:`Ir para a página anterior`,goToNextPage:`Ir para a próxima página`,goToLastPage:`Ir para a última página`,selectAllRows:`Selecionar todas as linhas`,selectRow:`Selecionar linha`},Q=A.createContext(null),$=A.createContext(null);function useDataTableContext(){let e=A.useContext(Q);if(!e)throw Error(`useDataTableContext must be used within <DataTableRoot>`);return e}function useOptionalDataTableContext(){return A.useContext(Q)}function renderToolbarActions(e,t){return typeof e==`function`?e(t):e}function getColumnLabel(e){return e?e.columnDef.meta?.label??e.id:``}function useDataTable({columns:e,data:t,getRowId:n,pageSize:r=10,enableRowSelection:i=!1,enableSorting:a=!1,enablePagination:o=!1,labels:s}){let[c,l]=A.useState([]),[u,d]=A.useState([]),[f,p]=A.useState({}),[m,h]=A.useState({pageIndex:0,pageSize:r}),[g,_]=A.useState({}),[v,y]=A.useState(r);r!==v&&(y(r),h({pageIndex:0,pageSize:r}));let b=A.useMemo(()=>({...Z,...s}),[s]),x=A.useMemo(()=>!i||e.some(e=>e.id===`select`)?e:[createDataTableSelectColumn({labels:{selectAllRows:b.selectAllRows,selectRow:b.selectRow}}),...e],[e,i,b.selectAllRows,b.selectRow]);return ae({features:oe,data:t,columns:x,getRowId:n,enableRowSelection:i,enableSorting:a,manualPagination:!o,state:{sorting:c,columnFilters:u,columnVisibility:f,rowSelection:g,pagination:m},onSortingChange:l,onColumnFiltersChange:d,onColumnVisibilityChange:p,onPaginationChange:h,onRowSelectionChange:_})}function DataTableRootControlled({table:t,labels:n,className:r,children:i}){let a={table:t,labels:A.useMemo(()=>({...Z,...n}),[n])};return/* @__PURE__ */ j(Q.Provider,{value:a,children:/* @__PURE__ */ j(`div`,{className:e(`flex w-full flex-col gap-4`,r),children:i})})}function DataTableRootUncontrolled({columns:e,data:t,getRowId:n,pageSize:r,enableRowSelection:i,enableSorting:a,enablePagination:o,labels:s,className:c,children:l}){let[u,d]=A.useState(0),f=A.useCallback(()=>(d(e=>e+1),()=>d(e=>e-1)),[]),p=useDataTable({columns:e,data:t,getRowId:n,pageSize:r,enableRowSelection:i,enableSorting:a,enablePagination:o??u>0,labels:s});return/* @__PURE__ */ j($.Provider,{value:f,children:/* @__PURE__ */ j(DataTableRootControlled,{table:p,labels:s,className:c,children:l})})}function DataTableRoot(e){if(`table`in e&&e.table!==void 0){let{table:t,labels:n,className:r,children:i}=e;return/* @__PURE__ */ j(DataTableRootControlled,{table:t,labels:n,className:r,children:i})}let{columns:t,data:n,getRowId:r,pageSize:i,enableRowSelection:a,enableSorting:o,enablePagination:s,labels:c,className:l,children:u}=e;return/* @__PURE__ */ j(DataTableRootUncontrolled,{columns:t,data:n,getRowId:r,pageSize:i,enableRowSelection:a,enableSorting:o,enablePagination:s,labels:c,className:l,children:u})}function DataTableColumnHeader({column:n,title:r,className:i,...a}){if(!n.getCanSort())return/* @__PURE__ */ j(`div`,{className:e(`inline-flex items-center gap-1`,i),...a,children:r});let o=n.getIsSorted();return/* @__PURE__ */ M(`div`,{className:e(`inline-flex items-center gap-1`,i),...a,children:[r,/* @__PURE__ */ j(t,{variant:`ghost`,color:`zinc`,size:`icon-xs`,onClick:()=>{if(o===`desc`)return n.clearSorting();n.toggleSorting(o===`asc`)},children:j(o===`desc`?k:o===`asc`?O:T,{className:`size-4`,"data-icon":`inline-end`})})]})}function DataTableViewOptions({table:n,label:r,className:i,...a}){let o=useOptionalDataTableContext(),f=n??o?.table;if(!f)throw Error("DataTableViewOptions requires a `table` prop or to be rendered within <DataTableRoot>");let p=r??o?.labels.columnsButton??Z.columnsButton,m=f.getAllColumns().filter(e=>e.accessorFn!==void 0&&e.getCanHide());return m.length===0?null:/* @__PURE__ */ M(s,{children:[/* @__PURE__ */ j(d,{asChild:!0,children:/* @__PURE__ */ M(t,{type:`button`,variant:`secondary`,size:`sm`,className:e(`ml-auto`,i),...a,children:[/* @__PURE__ */ j(ne,{"data-icon":`inline-start`}),p]})}),/* @__PURE__ */ j(l,{align:`end`,className:`w-44`,children:/* @__PURE__ */ j(u,{children:m.map(e=>/* @__PURE__ */ j(c,{checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:getColumnLabel(e)},e.id))})})]})}function DataTableToolbar({filterColumns:t,showColumnVisibility:n,toolbarActions:s,labels:c,className:l}){let{table:u,labels:d}=useDataTableContext(),f=A.useMemo(()=>c?{...d,...c}:d,[d,c]),p=A.useMemo(()=>t?Array.isArray(t)?t:[t]:[],[t]),m=renderToolbarActions(s,u),h=p.length>0,[g,_]=A.useState(p[0]),v=A.useRef(p);if(A.useEffect(()=>{for(let e of v.current)p.includes(e)||u.getColumn(e)?.setFilterValue(void 0);v.current=p},[p,u]),A.useEffect(()=>{p.length===0?_(void 0):_(e=>e&&p.includes(e)?e:p[0])},[p]),!h&&!n&&!m)return null;let y=g?u.getColumn(g):void 0,b=y?.getFilterValue()??``,handleColumnChange=e=>{e!==g&&(g&&u.getColumn(g)?.setFilterValue(void 0),_(e))};return/* @__PURE__ */ M(`div`,{className:e(`flex flex-col gap-2 sm:flex-row sm:items-center`,l),children:[h&&y?p.length>1?/* @__PURE__ */ M(i,{className:`h-8 w-full sm:max-w-md`,children:[/* @__PURE__ */ j(a,{align:`inline-start`,className:`pr-0`,children:/* @__PURE__ */ j(`select`,{"aria-label":f.filterColumnSelectorLabel,value:g,onChange:e=>handleColumnChange(e.target.value),className:`cursor-pointer appearance-none border-0 bg-transparent pr-1 text-sm font-medium text-foreground outline-none focus:outline-none`,children:p.map(e=>/* @__PURE__ */ j(`option`,{value:e,children:getColumnLabel(u.getColumn(e))},e))})}),/* @__PURE__ */ j(o,{placeholder:f.filterPlaceholder,value:b,onChange:e=>y.setFilterValue(e.target.value)})]}):/* @__PURE__ */ j(r,{placeholder:f.filterPlaceholder,value:b,onChange:e=>y.setFilterValue(e.target.value),className:`h-8 w-full sm:max-w-xs`}):null,/* @__PURE__ */ M(`div`,{className:`flex flex-1 items-center justify-end gap-2`,children:[m,n?/* @__PURE__ */ j(DataTableViewOptions,{table:u,label:f.columnsButton,className:`ml-0`}):null]})]})}function DataTableHeader({className:e}={}){let{table:t}=useDataTableContext();return/* @__PURE__ */ j(C,{className:e,children:t.getHeaderGroups().map(e=>/* @__PURE__ */ j(w,{children:e.headers.map(e=>/* @__PURE__ */ j(S,{colSpan:e.colSpan,children:e.isPlaceholder?null:W(e.column.columnDef.header,e.getContext())},e.id))},e.id))})}function DataTableBody({emptyMessage:e,className:t}={}){let{table:n,labels:r}=useDataTableContext(),i=n.getRowModel().rows,a=n.getVisibleLeafColumns().length,o=e??r.emptyMessage;return/* @__PURE__ */ j(y,{className:t,children:i.length===0?/* @__PURE__ */ j(w,{children:/* @__PURE__ */ j(b,{colSpan:a,className:`h-24 text-center`,children:o})}):i.map(e=>/* @__PURE__ */ j(w,{"data-state":e.getIsSelected()?`selected`:void 0,children:e.getVisibleCells().map(e=>/* @__PURE__ */ j(b,{children:W(e.column.columnDef.cell,e.getContext())},e.id))},e.id))})}function DataTablePagination({table:n,pageSizeOptions:r=[10,20,30,40,50],labels:i,className:a,...o}){let s=useOptionalDataTableContext(),c=A.useContext($);A.useLayoutEffect(()=>c?.(),[c]);let l=n??s?.table;if(!l)throw Error("DataTablePagination requires a `table` prop or to be rendered within <DataTableRoot>");let u=A.useMemo(()=>({...Z,...s?.labels,...i}),[s?.labels,i]),d=l.getPageCount(),v=Math.max(d,1),y=l.state.pagination.pageIndex;return/* @__PURE__ */ j(`div`,{className:e(`flex items-center justify-end gap-4 px-2`,a),...o,children:/* @__PURE__ */ M(`div`,{className:`flex items-center gap-6 lg:gap-8`,children:[/* @__PURE__ */ M(`div`,{className:`hidden items-center gap-2 sm:flex`,children:[/* @__PURE__ */ j(`p`,{className:`text-sm font-medium`,children:u.rowsPerPage}),/* @__PURE__ */ M(f,{value:`${l.state.pagination.pageSize}`,onValueChange:e=>e!==null&&l.setPageSize(Number(e)),children:[/* @__PURE__ */ j(g,{size:`sm`,className:`h-8 w-20`,children:/* @__PURE__ */ j(_,{})}),/* @__PURE__ */ j(p,{side:`top`,children:/* @__PURE__ */ j(m,{children:r.map(e=>/* @__PURE__ */ j(h,{value:`${e}`,children:e},e))})})]})]}),/* @__PURE__ */ j(`div`,{className:`text-sm font-medium`,children:u.pageOf(y+1,v)}),/* @__PURE__ */ M(`div`,{className:`flex items-center gap-1`,children:[/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,className:`hidden lg:inline-flex`,onClick:()=>l.setPageIndex(0),disabled:!l.getCanPreviousPage(),"aria-label":u.goToFirstPage,children:/* @__PURE__ */ j(ee,{})}),/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,onClick:()=>l.previousPage(),disabled:!l.getCanPreviousPage(),"aria-label":u.goToPreviousPage,children:/* @__PURE__ */ j(E,{})}),/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,onClick:()=>l.nextPage(),disabled:!l.getCanNextPage(),"aria-label":u.goToNextPage,children:/* @__PURE__ */ j(D,{})}),/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,className:`hidden lg:inline-flex`,onClick:()=>l.setPageIndex(d-1),disabled:!l.getCanNextPage(),"aria-label":u.goToLastPage,children:/* @__PURE__ */ j(te,{})})]})]})})}function createDataTableSelectColumn(e){let t=e?.labels?.selectAllRows??Z.selectAllRows,r=e?.labels?.selectRow??Z.selectRow;return{id:`select`,enableSorting:!1,enableHiding:!1,header:({table:e})=>/* @__PURE__ */ j(n,{"aria-label":t,checked:e.getIsAllPageRowsSelected(),indeterminate:!e.getIsAllPageRowsSelected()&&e.getIsSomePageRowsSelected(),onCheckedChange:t=>e.toggleAllPageRowsSelected(t)}),cell:({row:e})=>/* @__PURE__ */ j(n,{"aria-label":r,checked:e.getIsSelected(),indeterminate:!e.getIsSelected()&&e.getIsSomeSelected(),disabled:!e.getCanSelect(),onCheckedChange:t=>e.toggleSelected(t)})}}function DataTable({columns:e,data:t,getRowId:n,filterColumns:r,pageSize:i=10,pageSizeOptions:a,enableRowSelection:o=!1,enableSorting:s=!1,showPagination:c=!1,showColumnVisibility:l=!1,toolbarActions:u,labels:d,className:f,tableClassName:p,variant:m}){return/* @__PURE__ */ M(DataTableRoot,{columns:e,data:t,getRowId:n,pageSize:i,enableRowSelection:o,enableSorting:s,enablePagination:c,labels:d,className:f,children:[/* @__PURE__ */ j(DataTableToolbar,{filterColumns:r,showColumnVisibility:l,toolbarActions:u}),/* @__PURE__ */ j(x,{children:/* @__PURE__ */ M(v,{className:p,variant:m,children:[/* @__PURE__ */ j(DataTableHeader,{}),/* @__PURE__ */ j(DataTableBody,{})]})}),c?/* @__PURE__ */ j(DataTablePagination,{pageSizeOptions:a}):null]})}export{DataTable,DataTableBody,DataTableColumnHeader,DataTableHeader,DataTablePagination,DataTableRoot,DataTableToolbar,DataTableViewOptions,createDataTableSelectColumn,Z as defaultDataTableLabels,useDataTable,useDataTableContext};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Button as t}from"./button.js";import{Checkbox as n}from"./checkbox.js";import{DropdownMenu as r,DropdownMenuCheckboxItem as i,DropdownMenuContent as a,DropdownMenuGroup as o,DropdownMenuTrigger as s}from"./dropdown-menu.js";import{Input as c}from"./input.js";import{InputGroup as l,InputGroupAddon as u,InputGroupInput as d}from"./input-group.js";import{Select as f,SelectContent as p,SelectGroup as m,SelectItem as h,SelectTrigger as g,SelectValue as _}from"./select.js";import{Table as v,TableBody as y,TableCell as b,TableContainer as x,TableHead as S,TableHeader as C,TableRow as w}from"./table.js";import{IconArrowsSort as T,IconChevronLeft as E,IconChevronRight as D,IconChevronsLeft as ee,IconChevronsRight as te,IconColumns3 as ne,IconSortAscending as O,IconSortDescending as k}from"@tabler/icons-react";import*as A from"react";import{jsx as j,jsxs as M}from"react/jsx-runtime";import{columnFilteringFeature as N,columnVisibilityFeature as P,createFilteredRowModel as F,createPaginatedRowModel as I,createSortedRowModel as L,filterFn_arrIncludes as R,filterFn_equals as z,filterFn_inDateRange as B,filterFn_inNumberRange as V,filterFn_includesString as H,filterFn_weakEquals as U,flexRender as W,rowPaginationFeature as G,rowSelectionFeature as K,rowSortingFeature as q,sortFn_alphanumeric as J,sortFn_basic as Y,sortFn_datetime as X,sortFn_text as re,tableFeatures as ie,useTable as ae}from"@tanstack/react-table";const oe=ie({columnFilteringFeature:N,rowSortingFeature:q,rowPaginationFeature:G,rowSelectionFeature:K,columnVisibilityFeature:P,filteredRowModel:F(),sortedRowModel:L(),paginatedRowModel:I(),filterFns:{includesString:H,inNumberRange:V,equals:z,arrIncludes:R,inDateRange:B,weakEquals:U},sortFns:{alphanumeric:J,text:re,datetime:X,basic:Y}}),Z={filterPlaceholder:`Filtrar linhas...`,filterColumnSelectorLabel:`Coluna para filtrar`,emptyMessage:`Nenhum resultado.`,columnsButton:`Colunas`,rowsPerPage:`Linhas por página`,pageOf:(e,t)=>`Página ${e} de ${t}`,goToFirstPage:`Ir para a primeira página`,goToPreviousPage:`Ir para a página anterior`,goToNextPage:`Ir para a próxima página`,goToLastPage:`Ir para a última página`,selectAllRows:`Selecionar todas as linhas`,selectRow:`Selecionar linha`},Q=A.createContext(null),$=A.createContext(null);function useDataTableContext(){let e=A.useContext(Q);if(!e)throw Error(`useDataTableContext must be used within <DataTableRoot>`);return e}function useOptionalDataTableContext(){return A.useContext(Q)}function renderToolbarActions(e,t){return typeof e==`function`?e(t):e}function getColumnLabel(e){return e?e.columnDef.meta?.label??e.id:``}function useDataTable({columns:e,data:t,getRowId:n,pageSize:r=10,enableRowSelection:i=!1,enableSorting:a=!1,enablePagination:o=!1,labels:s}){let[c,l]=A.useState([]),[u,d]=A.useState([]),[f,p]=A.useState({}),[m,h]=A.useState({pageIndex:0,pageSize:r}),[g,_]=A.useState({}),[v,y]=A.useState(r);r!==v&&(y(r),h({pageIndex:0,pageSize:r}));let b=A.useMemo(()=>({...Z,...s}),[s]),x=A.useMemo(()=>!i||e.some(e=>e.id===`select`)?e:[createDataTableSelectColumn({labels:{selectAllRows:b.selectAllRows,selectRow:b.selectRow}}),...e],[e,i,b.selectAllRows,b.selectRow]);return ae({features:oe,data:t,columns:x,getRowId:n,enableRowSelection:i,enableSorting:a,manualPagination:!o,state:{sorting:c,columnFilters:u,columnVisibility:f,rowSelection:g,pagination:m},onSortingChange:l,onColumnFiltersChange:d,onColumnVisibilityChange:p,onPaginationChange:h,onRowSelectionChange:_})}function DataTableRootControlled({table:t,labels:n,className:r,children:i}){let a={table:t,labels:A.useMemo(()=>({...Z,...n}),[n])};return/* @__PURE__ */ j(Q.Provider,{value:a,children:/* @__PURE__ */ j(`div`,{className:e(`flex w-full flex-col gap-4`,r),children:i})})}function DataTableRootUncontrolled({columns:e,data:t,getRowId:n,pageSize:r,enableRowSelection:i,enableSorting:a,enablePagination:o,labels:s,className:c,children:l}){let[u,d]=A.useState(0),f=A.useCallback(()=>(d(e=>e+1),()=>d(e=>e-1)),[]),p=useDataTable({columns:e,data:t,getRowId:n,pageSize:r,enableRowSelection:i,enableSorting:a,enablePagination:o??u>0,labels:s});return/* @__PURE__ */ j($.Provider,{value:f,children:/* @__PURE__ */ j(DataTableRootControlled,{table:p,labels:s,className:c,children:l})})}function DataTableRoot(e){if(`table`in e&&e.table!==void 0){let{table:t,labels:n,className:r,children:i}=e;return/* @__PURE__ */ j(DataTableRootControlled,{table:t,labels:n,className:r,children:i})}let{columns:t,data:n,getRowId:r,pageSize:i,enableRowSelection:a,enableSorting:o,enablePagination:s,labels:c,className:l,children:u}=e;return/* @__PURE__ */ j(DataTableRootUncontrolled,{columns:t,data:n,getRowId:r,pageSize:i,enableRowSelection:a,enableSorting:o,enablePagination:s,labels:c,className:l,children:u})}function DataTableColumnHeader({column:n,title:r,className:i,...a}){if(!n.getCanSort())return/* @__PURE__ */ j(`div`,{className:e(`inline-flex items-center gap-1`,i),...a,children:r});let o=n.getIsSorted();return/* @__PURE__ */ M(`div`,{className:e(`inline-flex items-center gap-1`,i),...a,children:[r,/* @__PURE__ */ j(t,{variant:`ghost`,color:`zinc`,size:`icon-xs`,onClick:()=>{if(o===`desc`)return n.clearSorting();n.toggleSorting(o===`asc`)},children:j(o===`desc`?k:o===`asc`?O:T,{className:`size-4`,"data-icon":`inline-end`})})]})}function DataTableViewOptions({table:n,label:c,className:l,...u}){let d=useOptionalDataTableContext(),f=n??d?.table;if(!f)throw Error("DataTableViewOptions requires a `table` prop or to be rendered within <DataTableRoot>");let p=c??d?.labels.columnsButton??Z.columnsButton,m=f.getAllColumns().filter(e=>e.accessorFn!==void 0&&e.getCanHide());return m.length===0?null:/* @__PURE__ */ M(r,{children:[/* @__PURE__ */ j(s,{asChild:!0,children:/* @__PURE__ */ M(t,{type:`button`,variant:`secondary`,size:`sm`,className:e(`ml-auto`,l),...u,children:[/* @__PURE__ */ j(ne,{"data-icon":`inline-start`}),p]})}),/* @__PURE__ */ j(a,{align:`end`,className:`w-44`,children:/* @__PURE__ */ j(o,{children:m.map(e=>/* @__PURE__ */ j(i,{checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:getColumnLabel(e)},e.id))})})]})}function DataTableToolbar({filterColumns:t,showColumnVisibility:n,toolbarActions:r,labels:i,className:a}){let{table:o,labels:s}=useDataTableContext(),f=A.useMemo(()=>i?{...s,...i}:s,[s,i]),p=A.useMemo(()=>t?Array.isArray(t)?t:[t]:[],[t]),m=renderToolbarActions(r,o),h=p.length>0,[g,_]=A.useState(p[0]),v=A.useRef(p);if(A.useEffect(()=>{for(let e of v.current)p.includes(e)||o.getColumn(e)?.setFilterValue(void 0);v.current=p},[p,o]),A.useEffect(()=>{p.length===0?_(void 0):_(e=>e&&p.includes(e)?e:p[0])},[p]),!h&&!n&&!m)return null;let y=g?o.getColumn(g):void 0,b=y?.getFilterValue()??``,handleColumnChange=e=>{e!==g&&(g&&o.getColumn(g)?.setFilterValue(void 0),_(e))};return/* @__PURE__ */ M(`div`,{className:e(`flex flex-col gap-2 sm:flex-row sm:items-center`,a),children:[h&&y?p.length>1?/* @__PURE__ */ M(l,{className:`h-8 w-full sm:max-w-md`,children:[/* @__PURE__ */ j(u,{align:`inline-start`,className:`pr-0`,children:/* @__PURE__ */ j(`select`,{"aria-label":f.filterColumnSelectorLabel,value:g,onChange:e=>handleColumnChange(e.target.value),className:`cursor-pointer appearance-none border-0 bg-transparent pr-1 text-sm font-medium text-foreground outline-none focus:outline-none`,children:p.map(e=>/* @__PURE__ */ j(`option`,{value:e,children:getColumnLabel(o.getColumn(e))},e))})}),/* @__PURE__ */ j(d,{placeholder:f.filterPlaceholder,value:b,onChange:e=>y.setFilterValue(e.target.value)})]}):/* @__PURE__ */ j(c,{placeholder:f.filterPlaceholder,value:b,onChange:e=>y.setFilterValue(e.target.value),className:`h-8 w-full sm:max-w-xs`}):null,/* @__PURE__ */ M(`div`,{className:`flex flex-1 items-center justify-end gap-2`,children:[m,n?/* @__PURE__ */ j(DataTableViewOptions,{table:o,label:f.columnsButton,className:`ml-0`}):null]})]})}function DataTableHeader({className:e}={}){let{table:t}=useDataTableContext();return/* @__PURE__ */ j(C,{className:e,children:t.getHeaderGroups().map(e=>/* @__PURE__ */ j(w,{children:e.headers.map(e=>/* @__PURE__ */ j(S,{colSpan:e.colSpan,children:e.isPlaceholder?null:W(e.column.columnDef.header,e.getContext())},e.id))},e.id))})}function DataTableBody({emptyMessage:e,className:t}={}){let{table:n,labels:r}=useDataTableContext(),i=n.getRowModel().rows,a=n.getVisibleLeafColumns().length,o=e??r.emptyMessage;return/* @__PURE__ */ j(y,{className:t,children:i.length===0?/* @__PURE__ */ j(w,{children:/* @__PURE__ */ j(b,{colSpan:a,className:`h-24 text-center`,children:o})}):i.map(e=>/* @__PURE__ */ j(w,{"data-state":e.getIsSelected()?`selected`:void 0,children:e.getVisibleCells().map(e=>/* @__PURE__ */ j(b,{children:W(e.column.columnDef.cell,e.getContext())},e.id))},e.id))})}function DataTablePagination({table:n,pageSizeOptions:r=[10,20,30,40,50],labels:i,className:a,...o}){let s=useOptionalDataTableContext(),c=A.useContext($);A.useLayoutEffect(()=>c?.(),[c]);let l=n??s?.table;if(!l)throw Error("DataTablePagination requires a `table` prop or to be rendered within <DataTableRoot>");let u=A.useMemo(()=>({...Z,...s?.labels,...i}),[s?.labels,i]),d=l.getPageCount(),v=Math.max(d,1),y=l.state.pagination.pageIndex;return/* @__PURE__ */ j(`div`,{className:e(`flex items-center justify-end gap-4 px-2`,a),...o,children:/* @__PURE__ */ M(`div`,{className:`flex items-center gap-6 lg:gap-8`,children:[/* @__PURE__ */ M(`div`,{className:`hidden items-center gap-2 sm:flex`,children:[/* @__PURE__ */ j(`p`,{className:`text-sm font-medium`,children:u.rowsPerPage}),/* @__PURE__ */ M(f,{value:`${l.state.pagination.pageSize}`,onValueChange:e=>e!==null&&l.setPageSize(Number(e)),children:[/* @__PURE__ */ j(g,{size:`sm`,className:`h-8 w-20`,children:/* @__PURE__ */ j(_,{})}),/* @__PURE__ */ j(p,{side:`top`,children:/* @__PURE__ */ j(m,{children:r.map(e=>/* @__PURE__ */ j(h,{value:`${e}`,children:e},e))})})]})]}),/* @__PURE__ */ j(`div`,{className:`text-sm font-medium`,children:u.pageOf(y+1,v)}),/* @__PURE__ */ M(`div`,{className:`flex items-center gap-1`,children:[/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,className:`hidden lg:inline-flex`,onClick:()=>l.setPageIndex(0),disabled:!l.getCanPreviousPage(),"aria-label":u.goToFirstPage,children:/* @__PURE__ */ j(ee,{})}),/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,onClick:()=>l.previousPage(),disabled:!l.getCanPreviousPage(),"aria-label":u.goToPreviousPage,children:/* @__PURE__ */ j(E,{})}),/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,onClick:()=>l.nextPage(),disabled:!l.getCanNextPage(),"aria-label":u.goToNextPage,children:/* @__PURE__ */ j(D,{})}),/* @__PURE__ */ j(t,{type:`button`,variant:`secondary`,size:`icon-sm`,className:`hidden lg:inline-flex`,onClick:()=>l.setPageIndex(d-1),disabled:!l.getCanNextPage(),"aria-label":u.goToLastPage,children:/* @__PURE__ */ j(te,{})})]})]})})}function createDataTableSelectColumn(e){let t=e?.labels?.selectAllRows??Z.selectAllRows,r=e?.labels?.selectRow??Z.selectRow;return{id:`select`,enableSorting:!1,enableHiding:!1,header:({table:e})=>/* @__PURE__ */ j(n,{"aria-label":t,checked:e.getIsAllPageRowsSelected(),indeterminate:!e.getIsAllPageRowsSelected()&&e.getIsSomePageRowsSelected(),onCheckedChange:t=>e.toggleAllPageRowsSelected(t)}),cell:({row:e})=>/* @__PURE__ */ j(n,{"aria-label":r,checked:e.getIsSelected(),indeterminate:!e.getIsSelected()&&e.getIsSomeSelected(),disabled:!e.getCanSelect(),onCheckedChange:t=>e.toggleSelected(t)})}}function DataTable({columns:e,data:t,getRowId:n,filterColumns:r,pageSize:i=10,pageSizeOptions:a,enableRowSelection:o=!1,enableSorting:s=!1,showPagination:c=!1,showColumnVisibility:l=!1,toolbarActions:u,labels:d,className:f,tableClassName:p,variant:m}){return/* @__PURE__ */ M(DataTableRoot,{columns:e,data:t,getRowId:n,pageSize:i,enableRowSelection:o,enableSorting:s,enablePagination:c,labels:d,className:f,children:[/* @__PURE__ */ j(DataTableToolbar,{filterColumns:r,showColumnVisibility:l,toolbarActions:u}),/* @__PURE__ */ j(x,{children:/* @__PURE__ */ M(v,{className:p,variant:m,children:[/* @__PURE__ */ j(DataTableHeader,{}),/* @__PURE__ */ j(DataTableBody,{})]})}),c?/* @__PURE__ */ j(DataTablePagination,{pageSizeOptions:a}):null]})}export{DataTable,DataTableBody,DataTableColumnHeader,DataTableHeader,DataTablePagination,DataTableRoot,DataTableToolbar,DataTableViewOptions,createDataTableSelectColumn,Z as defaultDataTableLabels,useDataTable,useDataTableContext};
2
2
  //# sourceMappingURL=data-table.js.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Button as t}from"./button.js";import{composeRefs as n}from"../lib/compose-refs.js";import*as r from"react";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{ErrorCode as o,useDropzone as s}from"react-dropzone";const c=[o.FileInvalidType,o.FileTooLarge,o.FileTooSmall,o.TooManyFiles],l=new Set(c),u={pending:`indeterminate`,success:`100%`,error:`error`},d=r.createContext(null),f=r.createContext(null);function fileStatusReducer(e,t){switch(t.type){case`add`:return[...e,{id:t.id,fileName:t.fileName,file:t.file,status:`pending`,tries:1}];case`remove`:return e.filter(e=>e.id!==t.id);case`update-status`:return e.map(e=>e.id===t.id?t.status===`pending`?{...e,status:`pending`,error:void 0,message:void 0,result:void 0,tries:e.tries+1}:t.status===`error`?{...e,status:`error`,error:t.error,message:t.message,result:void 0}:{...e,status:`success`,result:t.result,error:void 0,message:void 0}:e)}}function formatAcceptedTypes(e){if(!e)return;let t=Object.entries(e).flatMap(([e,t])=>t.length>0?t:[e]);return t.length>0?t.join(`, `):void 0}function getDropzoneErrorCodes(e){let t=e.flatMap(e=>e.errors.map(e=>e.code).filter(e=>l.has(e)));return Array.from(new Set(t))}function getRootError(e,t){let n=e.flatMap(e=>{switch(e){case`file-invalid-type`:{let e=formatAcceptedTypes(t.accept);return e?[`only ${e} files are allowed`]:[`this file type is not allowed`]}case`file-too-large`:return t.maxSize?[`max size is ${(t.maxSize/1048576).toFixed(2)} MB`]:[`this file is too large`];case`file-too-small`:return t.minSize?[`min size is ${(t.minSize/1048576).toFixed(2)} MB`]:[`this file is too small`];case`too-many-files`:return t.maxFiles?[`max ${t.maxFiles} files`]:[`too many files`];default:return[]}});if(n.length===0)return`Unable to add the selected files`;let[r,...i]=n;return`${r.charAt(0).toUpperCase()}${r.slice(1)}${i.length>0?`, ${i.join(`, `)}`:``}`}function getRejectionMessage(e,t){let n=getDropzoneErrorCodes(e);return n.length>0?getRootError(n,t):e[0]?.errors[0]?.message??`Unable to add the selected files`}function getUploadErrorMessage(e,t){if(t){let n=t(e);if(n!==void 0)return n}if(typeof e==`string`)return e;if(e instanceof Error)return e.message}function useDropzoneContext(){let e=r.useContext(d);if(!e)throw Error(`Dropzone components must be used within a Dropzone.`);return e}function useDropzoneFileListContext(){let e=r.useContext(f);if(!e)throw Error(`Dropzone file actions must be used within a DropzoneFileListItem.`);return e}function useDropzone(e){let{onDropFile:t,onRemoveFile:n,shapeUploadError:i,onFileUploaded:a,onFileUploadError:c,onAllUploaded:l,onRootError:u,maxRetryCount:d,autoRetry:f=!1,validation:p,shiftOnMaxFiles:m=!1}=e,h=r.useId(),g=`${h}-message`,_=`${h}-description`,[v,y]=r.useState(void 0),b=r.useCallback(e=>{y(e),u?.(e)},[u]),[x,S]=r.useReducer(fileStatusReducer,[]),C=r.useCallback(e=>`${h}-${e}-message`,[h]),w=r.useMemo(()=>v!==void 0||x.some(e=>e.status===`error`),[x,v]),T=r.useCallback(async(e,n,r=0)=>{try{let o=await t(e);if(o.status===`error`){if(f&&r<(d??1/0))return S({type:`update-status`,id:n,status:`pending`}),T(e,n,r+1);S({type:`update-status`,id:n,status:`error`,error:o.error,message:getUploadErrorMessage(o.error,i)}),c?.(o.error);return}S({type:`update-status`,id:n,status:`success`,result:o.result}),a?.(o.result)}catch(e){let t=e;S({type:`update-status`,id:n,status:`error`,error:t,message:getUploadErrorMessage(t,i)}),c?.(t)}},[f,t,d,c,a,i]),E=r.useCallback(async e=>{await n?.(e),S({type:`remove`,id:e})},[n]),D=r.useCallback(e=>{let t=x.find(t=>t.id===e);return t?.status===`error`&&t.tries<=(d??1/0)},[x,d]),O=r.useCallback(async e=>{if(!D(e))return;let t=x.find(t=>t.id===e);t?.status===`error`&&(S({type:`update-status`,id:e,status:`pending`}),await T(t.file,e))},[D,x,T]),k=s({accept:p?.accept,minSize:p?.minSize,maxSize:p?.maxSize,maxFiles:p?.maxFiles,noClick:!0,noKeyboard:!0,onDropAccepted:async e=>{b(void 0);let t=e,n=p?.maxFiles??1/0,r=Number.isFinite(n)?Math.max(x.length+e.length-n,0):0;if(r>0){if(m){let n=x.slice(0,Math.min(r,x.length));await Promise.all(n.map(e=>E(e.id)));let i=r-n.length;i>0&&(t=e.slice(i))}else{b(getRootError([o.TooManyFiles],p??{}));let r=Math.max(n-x.length,0);t=e.slice(0,r)}}t.length!==0&&(await Promise.all(t.map(async e=>{let t=crypto.randomUUID();S({type:`add`,id:t,fileName:e.name,file:e}),await T(e,t)})),l?.())},onDropRejected:e=>{b(getRejectionMessage(e,p??{}))}});return{getRootProps:k.getRootProps,getInputProps:k.getInputProps,open:k.open,onRemoveFile:E,onRetry:O,canRetry:D,fileStatuses:x,isInvalid:w,isDragActive:k.isDragActive,rootError:v,inputId:h,rootMessageId:g,rootDescriptionId:_,getFileMessageId:C}}function Dropzone({children:e,...t}){return/* @__PURE__ */ i(d.Provider,{value:t,children:e})}const p=r.forwardRef(({className:t,children:r,...o},s)=>{let c=useDropzoneContext(),l=[c.rootDescriptionId,c.isInvalid?c.rootMessageId:void 0].filter(Boolean).join(` `)||void 0,{ref:u,...d}=c.getRootProps({...o,"data-slot":`dropzone-area`,"aria-describedby":l,"aria-invalid":c.isInvalid||void 0,className:e(`flex min-h-44 flex-col items-center justify-center gap-4 rounded-xl border border-dashed border-input bg-muted/20 px-6 py-8 text-center transition-colors`,c.isDragActive&&`border-primary bg-primary/5`,c.isInvalid&&`border-destructive bg-destructive/5`,t)}),f=c.getInputProps({id:c.inputId,className:`sr-only`,"aria-describedby":l,"aria-invalid":c.isInvalid,tabIndex:-1});return/* @__PURE__ */ a(`div`,{...d,ref:n(s,u),children:[/* @__PURE__ */ i(`input`,{...f}),r]})}),m=r.forwardRef(({className:t,...n},r)=>{let a=useDropzoneContext();return/* @__PURE__ */ i(`p`,{ref:r,id:a.rootDescriptionId,"data-slot":`dropzone-description`,className:e(`text-sm text-muted-foreground`,t),...n})}),h=r.forwardRef(({className:t,...n},r)=>(useDropzoneContext(),/* @__PURE__ */ i(`ol`,{ref:r,"data-slot":`dropzone-file-list`,className:e(`space-y-3`,t),...n}))),g=r.forwardRef(({className:t,file:n,children:a,...o},s)=>{let c=useDropzoneContext(),l=c.getFileMessageId(n.id),u=n.status===`error`,d=c.canRetry(n.id),p=r.useMemo(()=>({onRemoveFile:()=>c.onRemoveFile(n.id),onRetry:()=>c.onRetry(n.id),fileStatus:n,canRetry:d,dropzoneId:c.inputId,messageId:l}),[d,c,n,l]);return/* @__PURE__ */ i(f.Provider,{value:p,children:/* @__PURE__ */ i(`li`,{ref:s,"data-slot":`dropzone-file-item`,"data-status":n.status,"aria-describedby":u?l:void 0,className:e(`rounded-xl border bg-card px-4 py-3 shadow-xs`,n.status===`error`&&`border-destructive/50`,t),...o,children:a})})}),_=r.forwardRef(({className:t,children:n,...r},a)=>{let o=useDropzoneFileListContext(),s=o.fileStatus.status===`error`?o.fileStatus.message??String(o.fileStatus.error):n;return/* @__PURE__ */ i(`p`,{ref:a,id:o.messageId,"data-slot":`dropzone-file-message`,className:e(`min-h-5 text-[0.8rem] font-medium`,o.fileStatus.status===`error`&&`text-destructive`,t),...r,children:s})}),v=r.forwardRef(({className:t,children:n,...r},a)=>{let o=useDropzoneContext(),s=o.rootError??n;return/* @__PURE__ */ i(`p`,{ref:a,id:o.rootMessageId,"data-slot":`dropzone-message`,className:e(`min-h-5 text-[0.8rem] font-medium text-destructive`,t),...r,children:s})}),y=r.forwardRef(({className:n,onClick:a,size:o=`icon-sm`,type:s=`button`,variant:c=`ghost`,...l},u)=>{let d=useDropzoneFileListContext(),f=r.useCallback(e=>{a?.(e),!e.defaultPrevented&&d.onRemoveFile()},[d,a]);return/* @__PURE__ */ i(t,{ref:u,"data-slot":`dropzone-remove-file`,className:e(n),onClick:f,size:o,type:s,variant:c,...l})}),b=r.forwardRef(({className:n,disabled:a,onClick:o,size:s=`icon-sm`,type:c=`button`,variant:l=`ghost`,...u},d)=>{let f=useDropzoneFileListContext(),p=a||!f.canRetry,m=r.useCallback(e=>{o?.(e),!(e.defaultPrevented||p)&&f.onRetry()},[f,p,o]);return/* @__PURE__ */ i(t,{ref:d,"data-slot":`dropzone-retry-file`,className:e(n),disabled:p,onClick:m,size:s,type:c,variant:l,...u})}),x=r.forwardRef(({className:n,onClick:a,size:o=`sm`,type:s=`button`,variant:c=`subtle`,...l},u)=>{let d=useDropzoneContext(),f=[d.rootDescriptionId,d.isInvalid?d.rootMessageId:void 0].filter(Boolean).join(` `)||void 0,p=r.useCallback(e=>{a?.(e),!e.defaultPrevented&&d.open()},[d,a]);return/* @__PURE__ */ i(t,{ref:u,"aria-controls":d.inputId,"aria-describedby":f,"aria-invalid":d.isInvalid||void 0,"data-slot":`dropzone-trigger`,className:e(n),onClick:p,size:o,type:s,variant:c,...l})}),S=r.forwardRef(({className:t,status:n,...r},a)=>{let o=n===`success`||n===`error`,s=n===`error`;return/* @__PURE__ */ i(`div`,{ref:a,"aria-valuemax":100,"aria-valuemin":0,"aria-valuetext":u[n],"data-slot":`dropzone-progress`,"data-status":n,role:`progressbar`,className:e(`relative h-2 w-full overflow-hidden rounded-full bg-muted`,t),...r,children:/* @__PURE__ */ i(`div`,{className:e(`h-full w-full rounded-full bg-primary transition-transform`,o?`translate-x-0`:`animate-infinite-progress`,s&&`bg-destructive`)})})});Dropzone.displayName=`Dropzone`,p.displayName=`DropzoneArea`,m.displayName=`DropzoneDescription`,h.displayName=`DropzoneFileList`,g.displayName=`DropzoneFileListItem`,_.displayName=`DropzoneFileMessage`,v.displayName=`DropzoneMessage`,y.displayName=`DropzoneRemoveFile`,b.displayName=`DropzoneRetryFile`,x.displayName=`DropzoneTrigger`,S.displayName=`InfiniteProgress`;export{Dropzone,p as DropzoneArea,m as DropzoneDescription,h as DropzoneFileList,g as DropzoneFileListItem,_ as DropzoneFileMessage,v as DropzoneMessage,y as DropzoneRemoveFile,b as DropzoneRetryFile,x as DropzoneTrigger,o as ErrorCode,S as InfiniteProgress,useDropzone};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{composeRefs as e}from"../lib/compose-refs.js";import{cn as t}from"../lib/utils.js";import{Button as n}from"./button.js";import*as r from"react";import{jsx as i,jsxs as a}from"react/jsx-runtime";import{ErrorCode as o,useDropzone as s}from"react-dropzone";const c=[o.FileInvalidType,o.FileTooLarge,o.FileTooSmall,o.TooManyFiles],l=new Set(c),u={pending:`indeterminate`,success:`100%`,error:`error`},d=r.createContext(null),f=r.createContext(null);function fileStatusReducer(e,t){switch(t.type){case`add`:return[...e,{id:t.id,fileName:t.fileName,file:t.file,status:`pending`,tries:1}];case`remove`:return e.filter(e=>e.id!==t.id);case`update-status`:return e.map(e=>e.id===t.id?t.status===`pending`?{...e,status:`pending`,error:void 0,message:void 0,result:void 0,tries:e.tries+1}:t.status===`error`?{...e,status:`error`,error:t.error,message:t.message,result:void 0}:{...e,status:`success`,result:t.result,error:void 0,message:void 0}:e)}}function formatAcceptedTypes(e){if(!e)return;let t=Object.entries(e).flatMap(([e,t])=>t.length>0?t:[e]);return t.length>0?t.join(`, `):void 0}function getDropzoneErrorCodes(e){let t=e.flatMap(e=>e.errors.map(e=>e.code).filter(e=>l.has(e)));return Array.from(new Set(t))}function getRootError(e,t){let n=e.flatMap(e=>{switch(e){case`file-invalid-type`:{let e=formatAcceptedTypes(t.accept);return e?[`only ${e} files are allowed`]:[`this file type is not allowed`]}case`file-too-large`:return t.maxSize?[`max size is ${(t.maxSize/1048576).toFixed(2)} MB`]:[`this file is too large`];case`file-too-small`:return t.minSize?[`min size is ${(t.minSize/1048576).toFixed(2)} MB`]:[`this file is too small`];case`too-many-files`:return t.maxFiles?[`max ${t.maxFiles} files`]:[`too many files`];default:return[]}});if(n.length===0)return`Unable to add the selected files`;let[r,...i]=n;return`${r.charAt(0).toUpperCase()}${r.slice(1)}${i.length>0?`, ${i.join(`, `)}`:``}`}function getRejectionMessage(e,t){let n=getDropzoneErrorCodes(e);return n.length>0?getRootError(n,t):e[0]?.errors[0]?.message??`Unable to add the selected files`}function getUploadErrorMessage(e,t){if(t){let n=t(e);if(n!==void 0)return n}if(typeof e==`string`)return e;if(e instanceof Error)return e.message}function useDropzoneContext(){let e=r.useContext(d);if(!e)throw Error(`Dropzone components must be used within a Dropzone.`);return e}function useDropzoneFileListContext(){let e=r.useContext(f);if(!e)throw Error(`Dropzone file actions must be used within a DropzoneFileListItem.`);return e}function useDropzone(e){let{onDropFile:t,onRemoveFile:n,shapeUploadError:i,onFileUploaded:a,onFileUploadError:c,onAllUploaded:l,onRootError:u,maxRetryCount:d,autoRetry:f=!1,validation:p,shiftOnMaxFiles:m=!1}=e,h=r.useId(),g=`${h}-message`,_=`${h}-description`,[v,y]=r.useState(void 0),b=r.useCallback(e=>{y(e),u?.(e)},[u]),[x,S]=r.useReducer(fileStatusReducer,[]),C=r.useCallback(e=>`${h}-${e}-message`,[h]),w=r.useMemo(()=>v!==void 0||x.some(e=>e.status===`error`),[x,v]),T=r.useCallback(async(e,n,r=0)=>{try{let o=await t(e);if(o.status===`error`){if(f&&r<(d??1/0))return S({type:`update-status`,id:n,status:`pending`}),T(e,n,r+1);S({type:`update-status`,id:n,status:`error`,error:o.error,message:getUploadErrorMessage(o.error,i)}),c?.(o.error);return}S({type:`update-status`,id:n,status:`success`,result:o.result}),a?.(o.result)}catch(e){let t=e;S({type:`update-status`,id:n,status:`error`,error:t,message:getUploadErrorMessage(t,i)}),c?.(t)}},[f,t,d,c,a,i]),E=r.useCallback(async e=>{await n?.(e),S({type:`remove`,id:e})},[n]),D=r.useCallback(e=>{let t=x.find(t=>t.id===e);return t?.status===`error`&&t.tries<=(d??1/0)},[x,d]),O=r.useCallback(async e=>{if(!D(e))return;let t=x.find(t=>t.id===e);t?.status===`error`&&(S({type:`update-status`,id:e,status:`pending`}),await T(t.file,e))},[D,x,T]),k=s({accept:p?.accept,minSize:p?.minSize,maxSize:p?.maxSize,maxFiles:p?.maxFiles,noClick:!0,noKeyboard:!0,onDropAccepted:async e=>{b(void 0);let t=e,n=p?.maxFiles??1/0,r=Number.isFinite(n)?Math.max(x.length+e.length-n,0):0;if(r>0){if(m){let n=x.slice(0,Math.min(r,x.length));await Promise.all(n.map(e=>E(e.id)));let i=r-n.length;i>0&&(t=e.slice(i))}else{b(getRootError([o.TooManyFiles],p??{}));let r=Math.max(n-x.length,0);t=e.slice(0,r)}}t.length!==0&&(await Promise.all(t.map(async e=>{let t=crypto.randomUUID();S({type:`add`,id:t,fileName:e.name,file:e}),await T(e,t)})),l?.())},onDropRejected:e=>{b(getRejectionMessage(e,p??{}))}});return{getRootProps:k.getRootProps,getInputProps:k.getInputProps,open:k.open,onRemoveFile:E,onRetry:O,canRetry:D,fileStatuses:x,isInvalid:w,isDragActive:k.isDragActive,rootError:v,inputId:h,rootMessageId:g,rootDescriptionId:_,getFileMessageId:C}}function Dropzone({children:e,...t}){return/* @__PURE__ */ i(d.Provider,{value:t,children:e})}const p=r.forwardRef(({className:n,children:r,...o},s)=>{let c=useDropzoneContext(),l=[c.rootDescriptionId,c.isInvalid?c.rootMessageId:void 0].filter(Boolean).join(` `)||void 0,{ref:u,...d}=c.getRootProps({...o,"data-slot":`dropzone-area`,"aria-describedby":l,"aria-invalid":c.isInvalid||void 0,className:t(`flex min-h-44 flex-col items-center justify-center gap-4 rounded-xl border border-dashed border-input bg-muted/20 px-6 py-8 text-center transition-colors`,c.isDragActive&&`border-primary bg-primary/5`,c.isInvalid&&`border-destructive bg-destructive/5`,n)}),f=c.getInputProps({id:c.inputId,className:`sr-only`,"aria-describedby":l,"aria-invalid":c.isInvalid,tabIndex:-1});return/* @__PURE__ */ a(`div`,{...d,ref:e(s,u),children:[/* @__PURE__ */ i(`input`,{...f}),r]})}),m=r.forwardRef(({className:e,...n},r)=>{let a=useDropzoneContext();return/* @__PURE__ */ i(`p`,{ref:r,id:a.rootDescriptionId,"data-slot":`dropzone-description`,className:t(`text-sm text-muted-foreground`,e),...n})}),h=r.forwardRef(({className:e,...n},r)=>(useDropzoneContext(),/* @__PURE__ */ i(`ol`,{ref:r,"data-slot":`dropzone-file-list`,className:t(`space-y-3`,e),...n}))),g=r.forwardRef(({className:e,file:n,children:a,...o},s)=>{let c=useDropzoneContext(),l=c.getFileMessageId(n.id),u=n.status===`error`,d=c.canRetry(n.id),p=r.useMemo(()=>({onRemoveFile:()=>c.onRemoveFile(n.id),onRetry:()=>c.onRetry(n.id),fileStatus:n,canRetry:d,dropzoneId:c.inputId,messageId:l}),[d,c,n,l]);return/* @__PURE__ */ i(f.Provider,{value:p,children:/* @__PURE__ */ i(`li`,{ref:s,"data-slot":`dropzone-file-item`,"data-status":n.status,"aria-describedby":u?l:void 0,className:t(`rounded-xl border bg-card px-4 py-3 shadow-xs`,n.status===`error`&&`border-destructive/50`,e),...o,children:a})})}),_=r.forwardRef(({className:e,children:n,...r},a)=>{let o=useDropzoneFileListContext(),s=o.fileStatus.status===`error`?o.fileStatus.message??String(o.fileStatus.error):n;return/* @__PURE__ */ i(`p`,{ref:a,id:o.messageId,"data-slot":`dropzone-file-message`,className:t(`min-h-5 text-[0.8rem] font-medium`,o.fileStatus.status===`error`&&`text-destructive`,e),...r,children:s})}),v=r.forwardRef(({className:e,children:n,...r},a)=>{let o=useDropzoneContext(),s=o.rootError??n;return/* @__PURE__ */ i(`p`,{ref:a,id:o.rootMessageId,"data-slot":`dropzone-message`,className:t(`min-h-5 text-[0.8rem] font-medium text-destructive`,e),...r,children:s})}),y=r.forwardRef(({className:e,onClick:a,size:o=`icon-sm`,type:s=`button`,variant:c=`ghost`,...l},u)=>{let d=useDropzoneFileListContext(),f=r.useCallback(e=>{a?.(e),e.defaultPrevented||d.onRemoveFile()},[d,a]);return/* @__PURE__ */ i(n,{ref:u,"data-slot":`dropzone-remove-file`,className:t(e),onClick:f,size:o,type:s,variant:c,...l})}),b=r.forwardRef(({className:e,disabled:a,onClick:o,size:s=`icon-sm`,type:c=`button`,variant:l=`ghost`,...u},d)=>{let f=useDropzoneFileListContext(),p=a||!f.canRetry,m=r.useCallback(e=>{o?.(e),e.defaultPrevented||p||f.onRetry()},[f,p,o]);return/* @__PURE__ */ i(n,{ref:d,"data-slot":`dropzone-retry-file`,className:t(e),disabled:p,onClick:m,size:s,type:c,variant:l,...u})}),x=r.forwardRef(({className:e,onClick:a,size:o=`sm`,type:s=`button`,variant:c=`subtle`,...l},u)=>{let d=useDropzoneContext(),f=[d.rootDescriptionId,d.isInvalid?d.rootMessageId:void 0].filter(Boolean).join(` `)||void 0,p=r.useCallback(e=>{a?.(e),e.defaultPrevented||d.open()},[d,a]);return/* @__PURE__ */ i(n,{ref:u,"aria-controls":d.inputId,"aria-describedby":f,"aria-invalid":d.isInvalid||void 0,"data-slot":`dropzone-trigger`,className:t(e),onClick:p,size:o,type:s,variant:c,...l})}),S=r.forwardRef(({className:e,status:n,...r},a)=>{let o=n===`success`||n===`error`,s=n===`error`;return/* @__PURE__ */ i(`div`,{ref:a,"aria-valuemax":100,"aria-valuemin":0,"aria-valuetext":u[n],"data-slot":`dropzone-progress`,"data-status":n,role:`progressbar`,className:t(`relative h-2 w-full overflow-hidden rounded-full bg-muted`,e),...r,children:/* @__PURE__ */ i(`div`,{className:t(`h-full w-full rounded-full bg-primary transition-transform`,o?`translate-x-0`:`animate-infinite-progress`,s&&`bg-destructive`)})})});Dropzone.displayName=`Dropzone`,p.displayName=`DropzoneArea`,m.displayName=`DropzoneDescription`,h.displayName=`DropzoneFileList`,g.displayName=`DropzoneFileListItem`,_.displayName=`DropzoneFileMessage`,v.displayName=`DropzoneMessage`,y.displayName=`DropzoneRemoveFile`,b.displayName=`DropzoneRetryFile`,x.displayName=`DropzoneTrigger`,S.displayName=`InfiniteProgress`;export{Dropzone,p as DropzoneArea,m as DropzoneDescription,h as DropzoneFileList,g as DropzoneFileListItem,_ as DropzoneFileMessage,v as DropzoneMessage,y as DropzoneRemoveFile,b as DropzoneRetryFile,x as DropzoneTrigger,o as ErrorCode,S as InfiniteProgress,useDropzone};
2
2
  //# sourceMappingURL=dropzone.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropzone.js","names":["useReactDropzone","React","useDropzone$1","dropzoneErrorCodes","ErrorCode","dropzoneErrorCodeSet","valueTextMap","DropzoneContext","DropzoneFileListContext","action","state","fileStatus","accept","acceptedTypes","mimeType","extensions","errorCodes","fileRejections","rejection","error","errorCode","errors","limits","firstError","restErrors","shapeUploadError","message","context","handleDropFile","handleRemoveFile","props","inputId","rootMessageId","rootDescriptionId","rootError","setRootErrorState","setRootError","onRootError","fileStatuses","dispatch","getFileMessageId","id","isInvalid","uploadFile","result","file","autoRetry","retryCount","maxRetryCount","onFileUploadError","onFileUploaded","uploadError","onRemoveFile","canRetry","item","onRetry","dropzone","validation","nextFiles","acceptedFiles","maxFiles","overflow","shiftOnMaxFiles","filesToRemove","remainingOverflow","availableSlots","onAllUploaded","DropzoneArea","describedBy","rootRef","rootProps","cn","className","inputProps","composeRefs","forwardedRef","children","DropzoneDescription","DropzoneFileList","DropzoneFileListItem","messageId","value","DropzoneFileMessage","body","DropzoneMessage","DropzoneRemoveFile","handleClick","onClick","event","Button","DropzoneRetryFile","isDisabled","disabled","DropzoneTrigger","InfiniteProgress","done","status","isError"],"sources":["../../src/components/dropzone.tsx"],"sourcesContent":["import * as React from 'react'\nimport {\n type Accept,\n ErrorCode,\n type FileError,\n type FileRejection,\n useDropzone as useReactDropzone\n} from 'react-dropzone'\n\nimport { composeRefs } from '../lib/compose-refs'\nimport { cn } from '../lib/utils'\nimport { Button, type ButtonProps } from './button'\n\nconst dropzoneErrorCodes = [\n ErrorCode.FileInvalidType,\n ErrorCode.FileTooLarge,\n ErrorCode.FileTooSmall,\n ErrorCode.TooManyFiles\n]\n\ntype DropzoneAction<TUploadResult, TUploadError> =\n | {\n type: 'add'\n id: string\n fileName: string\n file: File\n }\n | {\n type: 'remove'\n id: string\n }\n | {\n type: 'update-status'\n id: string\n status: 'pending'\n }\n | {\n type: 'update-status'\n id: string\n status: 'error'\n error: TUploadError\n message?: string\n }\n | {\n type: 'update-status'\n id: string\n status: 'success'\n result: TUploadResult\n }\n\nexport type DropzoneUploadResult<TUploadResult, TUploadError> =\n | {\n status: 'error'\n error: TUploadError\n }\n | {\n status: 'success'\n result: TUploadResult\n }\n\nexport type DropzoneFileStatus<TUploadResult, TUploadError> = {\n id: string\n fileName: string\n file: File\n tries: number\n} & (\n | {\n status: 'pending'\n error?: undefined\n message?: undefined\n result?: undefined\n }\n | {\n status: 'error'\n error: TUploadError\n message?: string\n result?: undefined\n }\n | {\n status: 'success'\n result: TUploadResult\n error?: undefined\n message?: undefined\n }\n)\n\nexport type FileStatus<TUploadResult, TUploadError> = DropzoneFileStatus<TUploadResult, TUploadError>\n\nexport type DropzoneValidation = {\n accept?: Accept\n minSize?: number\n maxSize?: number\n maxFiles?: number\n}\n\nexport type UseDropzoneProps<TUploadResult, TUploadError = string> = {\n /** Uploads one file. Resolve to `{ status: 'success', result }` or `{ status: 'error', error }`. */\n onDropFile: (file: File) => Promise<DropzoneUploadResult<TUploadResult, TUploadError>>\n /** Called when a file is removed, with its id. */\n onRemoveFile?: (id: string) => void | Promise<void>\n /** Called with the result of each successful upload. */\n onFileUploaded?: (result: TUploadResult) => void\n /** Called with the error of each failed upload. */\n onFileUploadError?: (error: TUploadError) => void\n /** Called when every pending upload has finished. */\n onAllUploaded?: () => void\n /** Called with the validation message when dropped files are rejected, or `undefined` when cleared. */\n onRootError?: (error: string | undefined) => void\n /** Turns an upload error into the message shown for the file. */\n shapeUploadError?: (error: TUploadError) => string | undefined\n /** Maximum number of retries per file. Unlimited when omitted. */\n maxRetryCount?: number\n /**\n * Retries failed uploads automatically, up to `maxRetryCount`.\n * @default false\n */\n autoRetry?: boolean\n /** File rules: `accept`, `minSize`, `maxSize` (bytes) and `maxFiles`. */\n validation?: DropzoneValidation\n /**\n * Removes the oldest files when new ones exceed `maxFiles`, instead of rejecting them.\n * @default false\n */\n shiftOnMaxFiles?: boolean\n}\n\nexport interface UseDropzoneReturn<TUploadResult, TUploadError> {\n getRootProps: ReturnType<typeof useReactDropzone>['getRootProps']\n getInputProps: ReturnType<typeof useReactDropzone>['getInputProps']\n open: () => void\n onRemoveFile: (id: string) => Promise<void>\n onRetry: (id: string) => Promise<void>\n canRetry: (id: string) => boolean\n fileStatuses: DropzoneFileStatus<TUploadResult, TUploadError>[]\n isInvalid: boolean\n isDragActive: boolean\n rootError: string | undefined\n inputId: string\n rootMessageId: string\n rootDescriptionId: string\n getFileMessageId: (id: string) => string\n}\n\nexport type DropzoneProps<TUploadResult, TUploadError> = React.PropsWithChildren<\n UseDropzoneReturn<TUploadResult, TUploadError>\n>\n\nexport type DropzoneAreaProps = React.ComponentProps<'div'>\n\nexport type DropzoneDescriptionProps = React.ComponentProps<'p'>\n\nexport type DropzoneFileListProps = React.ComponentProps<'ol'>\n\nexport type DropzoneFileListItemProps<TUploadResult, TUploadError> = React.ComponentProps<'li'> & {\n /** File status from `fileStatuses`, used by the parts inside the item. */\n file: DropzoneFileStatus<TUploadResult, TUploadError>\n}\n\nexport type DropzoneFileMessageProps = React.ComponentProps<'p'>\n\nexport type DropzoneMessageProps = React.ComponentProps<'p'>\n\nexport type DropzoneRemoveFileProps = ButtonProps\n\nexport type DropzoneRetryFileProps = ButtonProps\n\nexport type DropzoneTriggerProps = ButtonProps\n\nexport type InfiniteProgressProps = React.ComponentProps<'div'> & {\n /** Upload status shown by the bar. */\n status: 'pending' | 'success' | 'error'\n}\n\ntype DropzoneFileListContextValue<TUploadResult, TUploadError> = {\n onRemoveFile: () => Promise<void>\n onRetry: () => Promise<void>\n fileStatus: DropzoneFileStatus<TUploadResult, TUploadError>\n canRetry: boolean\n dropzoneId: string\n messageId: string\n}\n\nconst dropzoneErrorCodeSet = new Set<ErrorCode>(dropzoneErrorCodes)\n\nconst valueTextMap = {\n pending: 'indeterminate',\n success: '100%',\n error: 'error'\n} as const\n\nconst DropzoneContext = React.createContext<UseDropzoneReturn<unknown, unknown> | null>(null)\n\nconst DropzoneFileListContext = React.createContext<DropzoneFileListContextValue<unknown, unknown> | null>(null)\n\nfunction fileStatusReducer<TUploadResult, TUploadError>(\n state: DropzoneFileStatus<TUploadResult, TUploadError>[],\n action: DropzoneAction<TUploadResult, TUploadError>\n): DropzoneFileStatus<TUploadResult, TUploadError>[] {\n switch (action.type) {\n case 'add':\n return [\n ...state,\n {\n id: action.id,\n fileName: action.fileName,\n file: action.file,\n status: 'pending',\n tries: 1\n }\n ]\n case 'remove':\n return state.filter((fileStatus) => fileStatus.id !== action.id)\n case 'update-status':\n return state.map((fileStatus) => {\n if (fileStatus.id !== action.id) {\n return fileStatus\n }\n\n if (action.status === 'pending') {\n return {\n ...fileStatus,\n status: 'pending',\n error: undefined,\n message: undefined,\n result: undefined,\n tries: fileStatus.tries + 1\n }\n }\n\n if (action.status === 'error') {\n return {\n ...fileStatus,\n status: 'error',\n error: action.error,\n message: action.message,\n result: undefined\n }\n }\n\n return {\n ...fileStatus,\n status: 'success',\n result: action.result,\n error: undefined,\n message: undefined\n }\n })\n }\n}\n\nfunction formatAcceptedTypes(accept?: Accept) {\n if (!accept) {\n return undefined\n }\n\n const acceptedTypes = Object.entries(accept).flatMap(([mimeType, extensions]) => {\n return extensions.length > 0 ? extensions : [mimeType]\n })\n\n return acceptedTypes.length > 0 ? acceptedTypes.join(', ') : undefined\n}\n\nfunction getDropzoneErrorCodes(fileRejections: FileRejection[]) {\n const errorCodes = fileRejections.flatMap((rejection) =>\n rejection.errors.map((error) => error.code as ErrorCode).filter((errorCode) => dropzoneErrorCodeSet.has(errorCode))\n )\n\n return Array.from(new Set(errorCodes))\n}\n\nfunction getRootError(errorCodes: ErrorCode[], limits: DropzoneValidation) {\n const errors = errorCodes.flatMap((errorCode) => {\n switch (errorCode) {\n case 'file-invalid-type': {\n const acceptedTypes = formatAcceptedTypes(limits.accept)\n return acceptedTypes ? [`only ${acceptedTypes} files are allowed`] : ['this file type is not allowed']\n }\n case 'file-too-large': {\n if (!limits.maxSize) {\n return ['this file is too large']\n }\n\n return [`max size is ${(limits.maxSize / (1024 * 1024)).toFixed(2)} MB`]\n }\n case 'file-too-small': {\n if (!limits.minSize) {\n return ['this file is too small']\n }\n\n return [`min size is ${(limits.minSize / (1024 * 1024)).toFixed(2)} MB`]\n }\n case 'too-many-files':\n return limits.maxFiles ? [`max ${limits.maxFiles} files`] : ['too many files']\n default:\n return []\n }\n })\n\n if (errors.length === 0) {\n return 'Unable to add the selected files'\n }\n\n const [firstError, ...restErrors] = errors as [string, ...string[]]\n return `${firstError.charAt(0).toUpperCase()}${firstError.slice(1)}${restErrors.length > 0 ? `, ${restErrors.join(', ')}` : ''}`\n}\n\nfunction getRejectionMessage(fileRejections: FileRejection[], limits: DropzoneValidation) {\n const errorCodes = getDropzoneErrorCodes(fileRejections)\n\n if (errorCodes.length > 0) {\n return getRootError(errorCodes, limits)\n }\n\n return fileRejections[0]?.errors[0]?.message ?? 'Unable to add the selected files'\n}\n\nfunction getUploadErrorMessage<TUploadError>(\n error: TUploadError,\n shapeUploadError?: (error: TUploadError) => string | undefined\n) {\n if (shapeUploadError) {\n const message = shapeUploadError(error)\n if (message !== undefined) {\n return message\n }\n }\n\n if (typeof error === 'string') {\n return error\n }\n\n if (error instanceof Error) {\n return error.message\n }\n\n return undefined\n}\n\nfunction useDropzoneContext<TUploadResult, TUploadError>() {\n const context = React.useContext(DropzoneContext)\n\n if (!context) {\n throw new Error('Dropzone components must be used within a Dropzone.')\n }\n\n return context as UseDropzoneReturn<TUploadResult, TUploadError>\n}\n\nfunction useDropzoneFileListContext<TUploadResult, TUploadError>() {\n const context = React.useContext(DropzoneFileListContext)\n\n if (!context) {\n throw new Error('Dropzone file actions must be used within a DropzoneFileListItem.')\n }\n\n return context as DropzoneFileListContextValue<TUploadResult, TUploadError>\n}\n\nfunction useDropzone<TUploadResult, TUploadError = string>(\n props: UseDropzoneProps<TUploadResult, TUploadError>\n): UseDropzoneReturn<TUploadResult, TUploadError> {\n const {\n onDropFile: handleDropFile,\n onRemoveFile: handleRemoveFile,\n shapeUploadError,\n onFileUploaded,\n onFileUploadError,\n onAllUploaded,\n onRootError,\n maxRetryCount,\n autoRetry = false,\n validation,\n shiftOnMaxFiles = false\n } = props\n\n const inputId = React.useId()\n const rootMessageId = `${inputId}-message`\n const rootDescriptionId = `${inputId}-description`\n const [rootError, setRootErrorState] = React.useState<string | undefined>(undefined)\n\n const setRootError = React.useCallback(\n (error: string | undefined) => {\n setRootErrorState(error)\n onRootError?.(error)\n },\n [onRootError]\n )\n\n const [fileStatuses, dispatch] = React.useReducer(\n fileStatusReducer<TUploadResult, TUploadError>,\n [] as DropzoneFileStatus<TUploadResult, TUploadError>[]\n )\n\n const getFileMessageId = React.useCallback((id: string) => `${inputId}-${id}-message`, [inputId])\n\n const isInvalid = React.useMemo(() => {\n return rootError !== undefined || fileStatuses.some((fileStatus) => fileStatus.status === 'error')\n }, [fileStatuses, rootError])\n\n const uploadFile = React.useCallback(\n async (file: File, id: string, retryCount = 0) => {\n try {\n const result = await handleDropFile(file)\n\n if (result.status === 'error') {\n if (autoRetry && retryCount < (maxRetryCount ?? Number.POSITIVE_INFINITY)) {\n dispatch({ type: 'update-status', id, status: 'pending' })\n return uploadFile(file, id, retryCount + 1)\n }\n\n dispatch({\n type: 'update-status',\n id,\n status: 'error',\n error: result.error,\n message: getUploadErrorMessage(result.error, shapeUploadError)\n })\n onFileUploadError?.(result.error)\n return\n }\n\n dispatch({\n type: 'update-status',\n id,\n status: 'success',\n result: result.result\n })\n onFileUploaded?.(result.result)\n } catch (error) {\n const uploadError = error as TUploadError\n\n dispatch({\n type: 'update-status',\n id,\n status: 'error',\n error: uploadError,\n message: getUploadErrorMessage(uploadError, shapeUploadError)\n })\n onFileUploadError?.(uploadError)\n }\n },\n [autoRetry, handleDropFile, maxRetryCount, onFileUploadError, onFileUploaded, shapeUploadError]\n )\n\n const onRemoveFile = React.useCallback(\n async (id: string) => {\n await handleRemoveFile?.(id)\n dispatch({ type: 'remove', id })\n },\n [handleRemoveFile]\n )\n\n const canRetry = React.useCallback(\n (id: string) => {\n const fileStatus = fileStatuses.find((item) => item.id === id)\n\n return fileStatus?.status === 'error' && fileStatus.tries <= (maxRetryCount ?? Number.POSITIVE_INFINITY)\n },\n [fileStatuses, maxRetryCount]\n )\n\n const onRetry = React.useCallback(\n async (id: string) => {\n if (!canRetry(id)) {\n return\n }\n\n const fileStatus = fileStatuses.find((item) => item.id === id)\n\n if (fileStatus?.status !== 'error') {\n return\n }\n\n dispatch({ type: 'update-status', id, status: 'pending' })\n await uploadFile(fileStatus.file, id)\n },\n [canRetry, fileStatuses, uploadFile]\n )\n\n const dropzone = useReactDropzone({\n accept: validation?.accept,\n minSize: validation?.minSize,\n maxSize: validation?.maxSize,\n maxFiles: validation?.maxFiles,\n noClick: true,\n noKeyboard: true,\n onDropAccepted: async (acceptedFiles) => {\n setRootError(undefined)\n\n let nextFiles = acceptedFiles\n const maxFiles = validation?.maxFiles ?? Number.POSITIVE_INFINITY\n const overflow = Number.isFinite(maxFiles)\n ? Math.max(fileStatuses.length + acceptedFiles.length - maxFiles, 0)\n : 0\n\n if (overflow > 0) {\n if (shiftOnMaxFiles) {\n const filesToRemove = fileStatuses.slice(0, Math.min(overflow, fileStatuses.length))\n\n await Promise.all(filesToRemove.map((fileStatus) => onRemoveFile(fileStatus.id)))\n\n const remainingOverflow = overflow - filesToRemove.length\n if (remainingOverflow > 0) {\n nextFiles = acceptedFiles.slice(remainingOverflow)\n }\n } else {\n setRootError(getRootError([ErrorCode.TooManyFiles], validation ?? {}))\n const availableSlots = Math.max(maxFiles - fileStatuses.length, 0)\n nextFiles = acceptedFiles.slice(0, availableSlots)\n }\n }\n\n if (nextFiles.length === 0) {\n return\n }\n\n await Promise.all(\n nextFiles.map(async (file) => {\n const id = crypto.randomUUID()\n dispatch({ type: 'add', id, fileName: file.name, file })\n await uploadFile(file, id)\n })\n )\n\n onAllUploaded?.()\n },\n onDropRejected: (fileRejections) => {\n setRootError(getRejectionMessage(fileRejections, validation ?? {}))\n }\n })\n\n return {\n getRootProps: dropzone.getRootProps,\n getInputProps: dropzone.getInputProps,\n open: dropzone.open,\n onRemoveFile,\n onRetry,\n canRetry,\n fileStatuses,\n isInvalid,\n isDragActive: dropzone.isDragActive,\n rootError,\n inputId,\n rootMessageId,\n rootDescriptionId,\n getFileMessageId\n }\n}\n\nfunction Dropzone<TUploadResult, TUploadError>({ children, ...dropzone }: DropzoneProps<TUploadResult, TUploadError>) {\n return <DropzoneContext.Provider value={dropzone}>{children}</DropzoneContext.Provider>\n}\n\nconst DropzoneArea = React.forwardRef<HTMLDivElement, DropzoneAreaProps>(\n ({ className, children, ...props }, forwardedRef) => {\n const context = useDropzoneContext()\n const describedBy =\n [context.rootDescriptionId, context.isInvalid ? context.rootMessageId : undefined].filter(Boolean).join(' ') ||\n undefined\n\n const { ref: rootRef, ...rootProps } = context.getRootProps({\n ...props,\n 'data-slot': 'dropzone-area',\n 'aria-describedby': describedBy,\n 'aria-invalid': context.isInvalid || undefined,\n className: cn(\n 'flex min-h-44 flex-col items-center justify-center gap-4 rounded-xl border border-dashed border-input bg-muted/20 px-6 py-8 text-center transition-colors',\n context.isDragActive && 'border-primary bg-primary/5',\n context.isInvalid && 'border-destructive bg-destructive/5',\n className\n )\n }) as React.HTMLAttributes<HTMLDivElement> & {\n ref?: React.Ref<HTMLDivElement>\n }\n\n const inputProps = context.getInputProps({\n id: context.inputId,\n className: 'sr-only',\n 'aria-describedby': describedBy,\n 'aria-invalid': context.isInvalid,\n tabIndex: -1\n })\n\n return (\n <div {...rootProps} ref={composeRefs(forwardedRef, rootRef)}>\n <input {...inputProps} />\n {children}\n </div>\n )\n }\n)\n\nconst DropzoneDescription = React.forwardRef<HTMLParagraphElement, DropzoneDescriptionProps>(\n ({ className, ...props }, ref) => {\n const context = useDropzoneContext()\n\n return (\n <p\n ref={ref}\n id={context.rootDescriptionId}\n data-slot=\"dropzone-description\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n )\n }\n)\n\nconst DropzoneFileList = React.forwardRef<HTMLOListElement, DropzoneFileListProps>(({ className, ...props }, ref) => {\n useDropzoneContext()\n\n return <ol ref={ref} data-slot=\"dropzone-file-list\" className={cn('space-y-3', className)} {...props} />\n})\n\nconst DropzoneFileListItem = React.forwardRef<HTMLLIElement, DropzoneFileListItemProps<unknown, unknown>>(\n ({ className, file, children, ...props }, ref) => {\n const context = useDropzoneContext()\n const messageId = context.getFileMessageId(file.id)\n const isInvalid = file.status === 'error'\n const canRetry = context.canRetry(file.id)\n\n const value = React.useMemo<DropzoneFileListContextValue<unknown, unknown>>(\n () => ({\n onRemoveFile: () => context.onRemoveFile(file.id),\n onRetry: () => context.onRetry(file.id),\n fileStatus: file,\n canRetry,\n dropzoneId: context.inputId,\n messageId\n }),\n [canRetry, context, file, messageId]\n )\n\n return (\n <DropzoneFileListContext.Provider value={value}>\n <li\n ref={ref}\n data-slot=\"dropzone-file-item\"\n data-status={file.status}\n aria-describedby={isInvalid ? messageId : undefined}\n className={cn(\n 'rounded-xl border bg-card px-4 py-3 shadow-xs',\n file.status === 'error' && 'border-destructive/50',\n className\n )}\n {...props}\n >\n {children}\n </li>\n </DropzoneFileListContext.Provider>\n )\n }\n)\n\nconst DropzoneFileMessage = React.forwardRef<HTMLParagraphElement, DropzoneFileMessageProps>(\n ({ className, children, ...props }, ref) => {\n const context = useDropzoneFileListContext()\n const body =\n context.fileStatus.status === 'error'\n ? (context.fileStatus.message ?? String(context.fileStatus.error))\n : children\n\n return (\n <p\n ref={ref}\n id={context.messageId}\n data-slot=\"dropzone-file-message\"\n className={cn(\n 'min-h-5 text-[0.8rem] font-medium',\n context.fileStatus.status === 'error' && 'text-destructive',\n className\n )}\n {...props}\n >\n {body}\n </p>\n )\n }\n)\n\nconst DropzoneMessage = React.forwardRef<HTMLParagraphElement, DropzoneMessageProps>(\n ({ className, children, ...props }, ref) => {\n const context = useDropzoneContext()\n const body = context.rootError ?? children\n\n return (\n <p\n ref={ref}\n id={context.rootMessageId}\n data-slot=\"dropzone-message\"\n className={cn('min-h-5 text-[0.8rem] font-medium text-destructive', className)}\n {...props}\n >\n {body}\n </p>\n )\n }\n)\n\nconst DropzoneRemoveFile = React.forwardRef<HTMLButtonElement, DropzoneRemoveFileProps>(\n ({ className, onClick, size = 'icon-sm', type = 'button', variant = 'ghost', ...props }, ref) => {\n const context = useDropzoneFileListContext()\n\n const handleClick = React.useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n (event) => {\n onClick?.(event)\n if (event.defaultPrevented) {\n return\n }\n\n void context.onRemoveFile()\n },\n [context, onClick]\n )\n\n return (\n <Button\n ref={ref}\n data-slot=\"dropzone-remove-file\"\n className={cn(className)}\n onClick={handleClick}\n size={size}\n type={type}\n variant={variant}\n {...props}\n />\n )\n }\n)\n\nconst DropzoneRetryFile = React.forwardRef<HTMLButtonElement, DropzoneRetryFileProps>(\n ({ className, disabled, onClick, size = 'icon-sm', type = 'button', variant = 'ghost', ...props }, ref) => {\n const context = useDropzoneFileListContext()\n const isDisabled = disabled || !context.canRetry\n\n const handleClick = React.useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n (event) => {\n onClick?.(event)\n if (event.defaultPrevented || isDisabled) {\n return\n }\n\n void context.onRetry()\n },\n [context, isDisabled, onClick]\n )\n\n return (\n <Button\n ref={ref}\n data-slot=\"dropzone-retry-file\"\n className={cn(className)}\n disabled={isDisabled}\n onClick={handleClick}\n size={size}\n type={type}\n variant={variant}\n {...props}\n />\n )\n }\n)\n\nconst DropzoneTrigger = React.forwardRef<HTMLButtonElement, DropzoneTriggerProps>(\n ({ className, onClick, size = 'sm', type = 'button', variant = 'subtle', ...props }, ref) => {\n const context = useDropzoneContext()\n const describedBy =\n [context.rootDescriptionId, context.isInvalid ? context.rootMessageId : undefined].filter(Boolean).join(' ') ||\n undefined\n\n const handleClick = React.useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n (event) => {\n onClick?.(event)\n if (event.defaultPrevented) {\n return\n }\n\n context.open()\n },\n [context, onClick]\n )\n\n return (\n <Button\n ref={ref}\n aria-controls={context.inputId}\n aria-describedby={describedBy}\n aria-invalid={context.isInvalid || undefined}\n data-slot=\"dropzone-trigger\"\n className={cn(className)}\n onClick={handleClick}\n size={size}\n type={type}\n variant={variant}\n {...props}\n />\n )\n }\n)\n\nconst InfiniteProgress = React.forwardRef<HTMLDivElement, InfiniteProgressProps>(\n ({ className, status, ...props }, ref) => {\n const done = status === 'success' || status === 'error'\n const isError = status === 'error'\n\n return (\n <div\n ref={ref}\n aria-valuemax={100}\n aria-valuemin={0}\n aria-valuetext={valueTextMap[status]}\n data-slot=\"dropzone-progress\"\n data-status={status}\n role=\"progressbar\"\n className={cn('relative h-2 w-full overflow-hidden rounded-full bg-muted', className)}\n {...props}\n >\n <div\n className={cn(\n 'h-full w-full rounded-full bg-primary transition-transform',\n done ? 'translate-x-0' : 'animate-infinite-progress',\n isError && 'bg-destructive'\n )}\n />\n </div>\n )\n }\n)\n\nDropzone.displayName = 'Dropzone'\nDropzoneArea.displayName = 'DropzoneArea'\nDropzoneDescription.displayName = 'DropzoneDescription'\nDropzoneFileList.displayName = 'DropzoneFileList'\nDropzoneFileListItem.displayName = 'DropzoneFileListItem'\nDropzoneFileMessage.displayName = 'DropzoneFileMessage'\nDropzoneMessage.displayName = 'DropzoneMessage'\nDropzoneRemoveFile.displayName = 'DropzoneRemoveFile'\nDropzoneRetryFile.displayName = 'DropzoneRetryFile'\nDropzoneTrigger.displayName = 'DropzoneTrigger'\nInfiniteProgress.displayName = 'InfiniteProgress'\n\nexport {\n Dropzone,\n DropzoneArea,\n DropzoneDescription,\n DropzoneFileList,\n DropzoneFileListItem,\n DropzoneFileMessage,\n DropzoneMessage,\n DropzoneRemoveFile,\n DropzoneRetryFile,\n DropzoneTrigger,\n ErrorCode,\n type FileError,\n InfiniteProgress,\n useDropzone\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dropzone.js","names":["useReactDropzone","React","useDropzone$1","dropzoneErrorCodes","ErrorCode","dropzoneErrorCodeSet","valueTextMap","DropzoneContext","DropzoneFileListContext","action","state","fileStatus","accept","acceptedTypes","mimeType","extensions","errorCodes","fileRejections","rejection","error","errorCode","errors","limits","firstError","restErrors","shapeUploadError","message","context","handleDropFile","handleRemoveFile","props","inputId","rootMessageId","rootDescriptionId","rootError","setRootErrorState","setRootError","onRootError","fileStatuses","dispatch","getFileMessageId","id","isInvalid","uploadFile","result","file","autoRetry","retryCount","maxRetryCount","onFileUploadError","onFileUploaded","uploadError","onRemoveFile","canRetry","item","onRetry","dropzone","validation","nextFiles","acceptedFiles","maxFiles","overflow","shiftOnMaxFiles","filesToRemove","remainingOverflow","availableSlots","onAllUploaded","DropzoneArea","describedBy","rootRef","rootProps","cn","className","inputProps","composeRefs","forwardedRef","children","DropzoneDescription","DropzoneFileList","DropzoneFileListItem","messageId","value","DropzoneFileMessage","body","DropzoneMessage","DropzoneRemoveFile","handleClick","onClick","event","Button","DropzoneRetryFile","isDisabled","disabled","DropzoneTrigger","InfiniteProgress","done","status","isError"],"sources":["../../src/components/dropzone.tsx"],"sourcesContent":["import * as React from 'react'\nimport {\n type Accept,\n ErrorCode,\n type FileError,\n type FileRejection,\n useDropzone as useReactDropzone\n} from 'react-dropzone'\n\nimport { composeRefs } from '../lib/compose-refs'\nimport { cn } from '../lib/utils'\nimport { Button, type ButtonProps } from './button'\n\nconst dropzoneErrorCodes = [\n ErrorCode.FileInvalidType,\n ErrorCode.FileTooLarge,\n ErrorCode.FileTooSmall,\n ErrorCode.TooManyFiles\n]\n\ntype DropzoneAction<TUploadResult, TUploadError> =\n | {\n type: 'add'\n id: string\n fileName: string\n file: File\n }\n | {\n type: 'remove'\n id: string\n }\n | {\n type: 'update-status'\n id: string\n status: 'pending'\n }\n | {\n type: 'update-status'\n id: string\n status: 'error'\n error: TUploadError\n message?: string\n }\n | {\n type: 'update-status'\n id: string\n status: 'success'\n result: TUploadResult\n }\n\nexport type DropzoneUploadResult<TUploadResult, TUploadError> =\n | {\n status: 'error'\n error: TUploadError\n }\n | {\n status: 'success'\n result: TUploadResult\n }\n\nexport type DropzoneFileStatus<TUploadResult, TUploadError> = {\n id: string\n fileName: string\n file: File\n tries: number\n} & (\n | {\n status: 'pending'\n error?: undefined\n message?: undefined\n result?: undefined\n }\n | {\n status: 'error'\n error: TUploadError\n message?: string\n result?: undefined\n }\n | {\n status: 'success'\n result: TUploadResult\n error?: undefined\n message?: undefined\n }\n)\n\nexport type FileStatus<TUploadResult, TUploadError> = DropzoneFileStatus<TUploadResult, TUploadError>\n\nexport type DropzoneValidation = {\n accept?: Accept\n minSize?: number\n maxSize?: number\n maxFiles?: number\n}\n\nexport type UseDropzoneProps<TUploadResult, TUploadError = string> = {\n /** Uploads one file. Resolve to `{ status: 'success', result }` or `{ status: 'error', error }`. */\n onDropFile: (file: File) => Promise<DropzoneUploadResult<TUploadResult, TUploadError>>\n /** Called when a file is removed, with its id. */\n onRemoveFile?: (id: string) => void | Promise<void>\n /** Called with the result of each successful upload. */\n onFileUploaded?: (result: TUploadResult) => void\n /** Called with the error of each failed upload. */\n onFileUploadError?: (error: TUploadError) => void\n /** Called when every pending upload has finished. */\n onAllUploaded?: () => void\n /** Called with the validation message when dropped files are rejected, or `undefined` when cleared. */\n onRootError?: (error: string | undefined) => void\n /** Turns an upload error into the message shown for the file. */\n shapeUploadError?: (error: TUploadError) => string | undefined\n /** Maximum number of retries per file. Unlimited when omitted. */\n maxRetryCount?: number\n /**\n * Retries failed uploads automatically, up to `maxRetryCount`.\n * @default false\n */\n autoRetry?: boolean\n /** File rules: `accept`, `minSize`, `maxSize` (bytes) and `maxFiles`. */\n validation?: DropzoneValidation\n /**\n * Removes the oldest files when new ones exceed `maxFiles`, instead of rejecting them.\n * @default false\n */\n shiftOnMaxFiles?: boolean\n}\n\nexport interface UseDropzoneReturn<TUploadResult, TUploadError> {\n getRootProps: ReturnType<typeof useReactDropzone>['getRootProps']\n getInputProps: ReturnType<typeof useReactDropzone>['getInputProps']\n open: () => void\n onRemoveFile: (id: string) => Promise<void>\n onRetry: (id: string) => Promise<void>\n canRetry: (id: string) => boolean\n fileStatuses: DropzoneFileStatus<TUploadResult, TUploadError>[]\n isInvalid: boolean\n isDragActive: boolean\n rootError: string | undefined\n inputId: string\n rootMessageId: string\n rootDescriptionId: string\n getFileMessageId: (id: string) => string\n}\n\nexport type DropzoneProps<TUploadResult, TUploadError> = React.PropsWithChildren<\n UseDropzoneReturn<TUploadResult, TUploadError>\n>\n\nexport type DropzoneAreaProps = React.ComponentProps<'div'>\n\nexport type DropzoneDescriptionProps = React.ComponentProps<'p'>\n\nexport type DropzoneFileListProps = React.ComponentProps<'ol'>\n\nexport type DropzoneFileListItemProps<TUploadResult, TUploadError> = React.ComponentProps<'li'> & {\n /** File status from `fileStatuses`, used by the parts inside the item. */\n file: DropzoneFileStatus<TUploadResult, TUploadError>\n}\n\nexport type DropzoneFileMessageProps = React.ComponentProps<'p'>\n\nexport type DropzoneMessageProps = React.ComponentProps<'p'>\n\nexport type DropzoneRemoveFileProps = ButtonProps\n\nexport type DropzoneRetryFileProps = ButtonProps\n\nexport type DropzoneTriggerProps = ButtonProps\n\nexport type InfiniteProgressProps = React.ComponentProps<'div'> & {\n /** Upload status shown by the bar. */\n status: 'pending' | 'success' | 'error'\n}\n\ntype DropzoneFileListContextValue<TUploadResult, TUploadError> = {\n onRemoveFile: () => Promise<void>\n onRetry: () => Promise<void>\n fileStatus: DropzoneFileStatus<TUploadResult, TUploadError>\n canRetry: boolean\n dropzoneId: string\n messageId: string\n}\n\nconst dropzoneErrorCodeSet = new Set<ErrorCode>(dropzoneErrorCodes)\n\nconst valueTextMap = {\n pending: 'indeterminate',\n success: '100%',\n error: 'error'\n} as const\n\nconst DropzoneContext = React.createContext<UseDropzoneReturn<unknown, unknown> | null>(null)\n\nconst DropzoneFileListContext = React.createContext<DropzoneFileListContextValue<unknown, unknown> | null>(null)\n\nfunction fileStatusReducer<TUploadResult, TUploadError>(\n state: DropzoneFileStatus<TUploadResult, TUploadError>[],\n action: DropzoneAction<TUploadResult, TUploadError>\n): DropzoneFileStatus<TUploadResult, TUploadError>[] {\n switch (action.type) {\n case 'add':\n return [\n ...state,\n {\n id: action.id,\n fileName: action.fileName,\n file: action.file,\n status: 'pending',\n tries: 1\n }\n ]\n case 'remove':\n return state.filter((fileStatus) => fileStatus.id !== action.id)\n case 'update-status':\n return state.map((fileStatus) => {\n if (fileStatus.id !== action.id) {\n return fileStatus\n }\n\n if (action.status === 'pending') {\n return {\n ...fileStatus,\n status: 'pending',\n error: undefined,\n message: undefined,\n result: undefined,\n tries: fileStatus.tries + 1\n }\n }\n\n if (action.status === 'error') {\n return {\n ...fileStatus,\n status: 'error',\n error: action.error,\n message: action.message,\n result: undefined\n }\n }\n\n return {\n ...fileStatus,\n status: 'success',\n result: action.result,\n error: undefined,\n message: undefined\n }\n })\n }\n}\n\nfunction formatAcceptedTypes(accept?: Accept) {\n if (!accept) {\n return undefined\n }\n\n const acceptedTypes = Object.entries(accept).flatMap(([mimeType, extensions]) => {\n return extensions.length > 0 ? extensions : [mimeType]\n })\n\n return acceptedTypes.length > 0 ? acceptedTypes.join(', ') : undefined\n}\n\nfunction getDropzoneErrorCodes(fileRejections: FileRejection[]) {\n const errorCodes = fileRejections.flatMap((rejection) =>\n rejection.errors.map((error) => error.code as ErrorCode).filter((errorCode) => dropzoneErrorCodeSet.has(errorCode))\n )\n\n return Array.from(new Set(errorCodes))\n}\n\nfunction getRootError(errorCodes: ErrorCode[], limits: DropzoneValidation) {\n const errors = errorCodes.flatMap((errorCode) => {\n switch (errorCode) {\n case 'file-invalid-type': {\n const acceptedTypes = formatAcceptedTypes(limits.accept)\n return acceptedTypes ? [`only ${acceptedTypes} files are allowed`] : ['this file type is not allowed']\n }\n case 'file-too-large': {\n if (!limits.maxSize) {\n return ['this file is too large']\n }\n\n return [`max size is ${(limits.maxSize / (1024 * 1024)).toFixed(2)} MB`]\n }\n case 'file-too-small': {\n if (!limits.minSize) {\n return ['this file is too small']\n }\n\n return [`min size is ${(limits.minSize / (1024 * 1024)).toFixed(2)} MB`]\n }\n case 'too-many-files':\n return limits.maxFiles ? [`max ${limits.maxFiles} files`] : ['too many files']\n default:\n return []\n }\n })\n\n if (errors.length === 0) {\n return 'Unable to add the selected files'\n }\n\n const [firstError, ...restErrors] = errors as [string, ...string[]]\n return `${firstError.charAt(0).toUpperCase()}${firstError.slice(1)}${restErrors.length > 0 ? `, ${restErrors.join(', ')}` : ''}`\n}\n\nfunction getRejectionMessage(fileRejections: FileRejection[], limits: DropzoneValidation) {\n const errorCodes = getDropzoneErrorCodes(fileRejections)\n\n if (errorCodes.length > 0) {\n return getRootError(errorCodes, limits)\n }\n\n return fileRejections[0]?.errors[0]?.message ?? 'Unable to add the selected files'\n}\n\nfunction getUploadErrorMessage<TUploadError>(\n error: TUploadError,\n shapeUploadError?: (error: TUploadError) => string | undefined\n) {\n if (shapeUploadError) {\n const message = shapeUploadError(error)\n if (message !== undefined) {\n return message\n }\n }\n\n if (typeof error === 'string') {\n return error\n }\n\n if (error instanceof Error) {\n return error.message\n }\n\n return undefined\n}\n\nfunction useDropzoneContext<TUploadResult, TUploadError>() {\n const context = React.useContext(DropzoneContext)\n\n if (!context) {\n throw new Error('Dropzone components must be used within a Dropzone.')\n }\n\n return context as UseDropzoneReturn<TUploadResult, TUploadError>\n}\n\nfunction useDropzoneFileListContext<TUploadResult, TUploadError>() {\n const context = React.useContext(DropzoneFileListContext)\n\n if (!context) {\n throw new Error('Dropzone file actions must be used within a DropzoneFileListItem.')\n }\n\n return context as DropzoneFileListContextValue<TUploadResult, TUploadError>\n}\n\nfunction useDropzone<TUploadResult, TUploadError = string>(\n props: UseDropzoneProps<TUploadResult, TUploadError>\n): UseDropzoneReturn<TUploadResult, TUploadError> {\n const {\n onDropFile: handleDropFile,\n onRemoveFile: handleRemoveFile,\n shapeUploadError,\n onFileUploaded,\n onFileUploadError,\n onAllUploaded,\n onRootError,\n maxRetryCount,\n autoRetry = false,\n validation,\n shiftOnMaxFiles = false\n } = props\n\n const inputId = React.useId()\n const rootMessageId = `${inputId}-message`\n const rootDescriptionId = `${inputId}-description`\n const [rootError, setRootErrorState] = React.useState<string | undefined>(undefined)\n\n const setRootError = React.useCallback(\n (error: string | undefined) => {\n setRootErrorState(error)\n onRootError?.(error)\n },\n [onRootError]\n )\n\n const [fileStatuses, dispatch] = React.useReducer(\n fileStatusReducer<TUploadResult, TUploadError>,\n [] as DropzoneFileStatus<TUploadResult, TUploadError>[]\n )\n\n const getFileMessageId = React.useCallback((id: string) => `${inputId}-${id}-message`, [inputId])\n\n const isInvalid = React.useMemo(() => {\n return rootError !== undefined || fileStatuses.some((fileStatus) => fileStatus.status === 'error')\n }, [fileStatuses, rootError])\n\n const uploadFile = React.useCallback(\n async (file: File, id: string, retryCount = 0) => {\n try {\n const result = await handleDropFile(file)\n\n if (result.status === 'error') {\n if (autoRetry && retryCount < (maxRetryCount ?? Number.POSITIVE_INFINITY)) {\n dispatch({ type: 'update-status', id, status: 'pending' })\n return uploadFile(file, id, retryCount + 1)\n }\n\n dispatch({\n type: 'update-status',\n id,\n status: 'error',\n error: result.error,\n message: getUploadErrorMessage(result.error, shapeUploadError)\n })\n onFileUploadError?.(result.error)\n return\n }\n\n dispatch({\n type: 'update-status',\n id,\n status: 'success',\n result: result.result\n })\n onFileUploaded?.(result.result)\n } catch (error) {\n const uploadError = error as TUploadError\n\n dispatch({\n type: 'update-status',\n id,\n status: 'error',\n error: uploadError,\n message: getUploadErrorMessage(uploadError, shapeUploadError)\n })\n onFileUploadError?.(uploadError)\n }\n },\n [autoRetry, handleDropFile, maxRetryCount, onFileUploadError, onFileUploaded, shapeUploadError]\n )\n\n const onRemoveFile = React.useCallback(\n async (id: string) => {\n await handleRemoveFile?.(id)\n dispatch({ type: 'remove', id })\n },\n [handleRemoveFile]\n )\n\n const canRetry = React.useCallback(\n (id: string) => {\n const fileStatus = fileStatuses.find((item) => item.id === id)\n\n return fileStatus?.status === 'error' && fileStatus.tries <= (maxRetryCount ?? Number.POSITIVE_INFINITY)\n },\n [fileStatuses, maxRetryCount]\n )\n\n const onRetry = React.useCallback(\n async (id: string) => {\n if (!canRetry(id)) {\n return\n }\n\n const fileStatus = fileStatuses.find((item) => item.id === id)\n\n if (fileStatus?.status !== 'error') {\n return\n }\n\n dispatch({ type: 'update-status', id, status: 'pending' })\n await uploadFile(fileStatus.file, id)\n },\n [canRetry, fileStatuses, uploadFile]\n )\n\n const dropzone = useReactDropzone({\n accept: validation?.accept,\n minSize: validation?.minSize,\n maxSize: validation?.maxSize,\n maxFiles: validation?.maxFiles,\n noClick: true,\n noKeyboard: true,\n onDropAccepted: async (acceptedFiles) => {\n setRootError(undefined)\n\n let nextFiles = acceptedFiles\n const maxFiles = validation?.maxFiles ?? Number.POSITIVE_INFINITY\n const overflow = Number.isFinite(maxFiles)\n ? Math.max(fileStatuses.length + acceptedFiles.length - maxFiles, 0)\n : 0\n\n if (overflow > 0) {\n if (shiftOnMaxFiles) {\n const filesToRemove = fileStatuses.slice(0, Math.min(overflow, fileStatuses.length))\n\n await Promise.all(filesToRemove.map((fileStatus) => onRemoveFile(fileStatus.id)))\n\n const remainingOverflow = overflow - filesToRemove.length\n if (remainingOverflow > 0) {\n nextFiles = acceptedFiles.slice(remainingOverflow)\n }\n } else {\n setRootError(getRootError([ErrorCode.TooManyFiles], validation ?? {}))\n const availableSlots = Math.max(maxFiles - fileStatuses.length, 0)\n nextFiles = acceptedFiles.slice(0, availableSlots)\n }\n }\n\n if (nextFiles.length === 0) {\n return\n }\n\n await Promise.all(\n nextFiles.map(async (file) => {\n const id = crypto.randomUUID()\n dispatch({ type: 'add', id, fileName: file.name, file })\n await uploadFile(file, id)\n })\n )\n\n onAllUploaded?.()\n },\n onDropRejected: (fileRejections) => {\n setRootError(getRejectionMessage(fileRejections, validation ?? {}))\n }\n })\n\n return {\n getRootProps: dropzone.getRootProps,\n getInputProps: dropzone.getInputProps,\n open: dropzone.open,\n onRemoveFile,\n onRetry,\n canRetry,\n fileStatuses,\n isInvalid,\n isDragActive: dropzone.isDragActive,\n rootError,\n inputId,\n rootMessageId,\n rootDescriptionId,\n getFileMessageId\n }\n}\n\nfunction Dropzone<TUploadResult, TUploadError>({ children, ...dropzone }: DropzoneProps<TUploadResult, TUploadError>) {\n return <DropzoneContext.Provider value={dropzone}>{children}</DropzoneContext.Provider>\n}\n\nconst DropzoneArea = React.forwardRef<HTMLDivElement, DropzoneAreaProps>(\n ({ className, children, ...props }, forwardedRef) => {\n const context = useDropzoneContext()\n const describedBy =\n [context.rootDescriptionId, context.isInvalid ? context.rootMessageId : undefined].filter(Boolean).join(' ') ||\n undefined\n\n const { ref: rootRef, ...rootProps } = context.getRootProps({\n ...props,\n 'data-slot': 'dropzone-area',\n 'aria-describedby': describedBy,\n 'aria-invalid': context.isInvalid || undefined,\n className: cn(\n 'flex min-h-44 flex-col items-center justify-center gap-4 rounded-xl border border-dashed border-input bg-muted/20 px-6 py-8 text-center transition-colors',\n context.isDragActive && 'border-primary bg-primary/5',\n context.isInvalid && 'border-destructive bg-destructive/5',\n className\n )\n }) as React.HTMLAttributes<HTMLDivElement> & {\n ref?: React.Ref<HTMLDivElement>\n }\n\n const inputProps = context.getInputProps({\n id: context.inputId,\n className: 'sr-only',\n 'aria-describedby': describedBy,\n 'aria-invalid': context.isInvalid,\n tabIndex: -1\n })\n\n return (\n <div {...rootProps} ref={composeRefs(forwardedRef, rootRef)}>\n <input {...inputProps} />\n {children}\n </div>\n )\n }\n)\n\nconst DropzoneDescription = React.forwardRef<HTMLParagraphElement, DropzoneDescriptionProps>(\n ({ className, ...props }, ref) => {\n const context = useDropzoneContext()\n\n return (\n <p\n ref={ref}\n id={context.rootDescriptionId}\n data-slot=\"dropzone-description\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n )\n }\n)\n\nconst DropzoneFileList = React.forwardRef<HTMLOListElement, DropzoneFileListProps>(({ className, ...props }, ref) => {\n useDropzoneContext()\n\n return <ol ref={ref} data-slot=\"dropzone-file-list\" className={cn('space-y-3', className)} {...props} />\n})\n\nconst DropzoneFileListItem = React.forwardRef<HTMLLIElement, DropzoneFileListItemProps<unknown, unknown>>(\n ({ className, file, children, ...props }, ref) => {\n const context = useDropzoneContext()\n const messageId = context.getFileMessageId(file.id)\n const isInvalid = file.status === 'error'\n const canRetry = context.canRetry(file.id)\n\n const value = React.useMemo<DropzoneFileListContextValue<unknown, unknown>>(\n () => ({\n onRemoveFile: () => context.onRemoveFile(file.id),\n onRetry: () => context.onRetry(file.id),\n fileStatus: file,\n canRetry,\n dropzoneId: context.inputId,\n messageId\n }),\n [canRetry, context, file, messageId]\n )\n\n return (\n <DropzoneFileListContext.Provider value={value}>\n <li\n ref={ref}\n data-slot=\"dropzone-file-item\"\n data-status={file.status}\n aria-describedby={isInvalid ? messageId : undefined}\n className={cn(\n 'rounded-xl border bg-card px-4 py-3 shadow-xs',\n file.status === 'error' && 'border-destructive/50',\n className\n )}\n {...props}\n >\n {children}\n </li>\n </DropzoneFileListContext.Provider>\n )\n }\n)\n\nconst DropzoneFileMessage = React.forwardRef<HTMLParagraphElement, DropzoneFileMessageProps>(\n ({ className, children, ...props }, ref) => {\n const context = useDropzoneFileListContext()\n const body =\n context.fileStatus.status === 'error'\n ? (context.fileStatus.message ?? String(context.fileStatus.error))\n : children\n\n return (\n <p\n ref={ref}\n id={context.messageId}\n data-slot=\"dropzone-file-message\"\n className={cn(\n 'min-h-5 text-[0.8rem] font-medium',\n context.fileStatus.status === 'error' && 'text-destructive',\n className\n )}\n {...props}\n >\n {body}\n </p>\n )\n }\n)\n\nconst DropzoneMessage = React.forwardRef<HTMLParagraphElement, DropzoneMessageProps>(\n ({ className, children, ...props }, ref) => {\n const context = useDropzoneContext()\n const body = context.rootError ?? children\n\n return (\n <p\n ref={ref}\n id={context.rootMessageId}\n data-slot=\"dropzone-message\"\n className={cn('min-h-5 text-[0.8rem] font-medium text-destructive', className)}\n {...props}\n >\n {body}\n </p>\n )\n }\n)\n\nconst DropzoneRemoveFile = React.forwardRef<HTMLButtonElement, DropzoneRemoveFileProps>(\n ({ className, onClick, size = 'icon-sm', type = 'button', variant = 'ghost', ...props }, ref) => {\n const context = useDropzoneFileListContext()\n\n const handleClick = React.useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n (event) => {\n onClick?.(event)\n if (event.defaultPrevented) {\n return\n }\n\n void context.onRemoveFile()\n },\n [context, onClick]\n )\n\n return (\n <Button\n ref={ref}\n data-slot=\"dropzone-remove-file\"\n className={cn(className)}\n onClick={handleClick}\n size={size}\n type={type}\n variant={variant}\n {...props}\n />\n )\n }\n)\n\nconst DropzoneRetryFile = React.forwardRef<HTMLButtonElement, DropzoneRetryFileProps>(\n ({ className, disabled, onClick, size = 'icon-sm', type = 'button', variant = 'ghost', ...props }, ref) => {\n const context = useDropzoneFileListContext()\n const isDisabled = disabled || !context.canRetry\n\n const handleClick = React.useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n (event) => {\n onClick?.(event)\n if (event.defaultPrevented || isDisabled) {\n return\n }\n\n void context.onRetry()\n },\n [context, isDisabled, onClick]\n )\n\n return (\n <Button\n ref={ref}\n data-slot=\"dropzone-retry-file\"\n className={cn(className)}\n disabled={isDisabled}\n onClick={handleClick}\n size={size}\n type={type}\n variant={variant}\n {...props}\n />\n )\n }\n)\n\nconst DropzoneTrigger = React.forwardRef<HTMLButtonElement, DropzoneTriggerProps>(\n ({ className, onClick, size = 'sm', type = 'button', variant = 'subtle', ...props }, ref) => {\n const context = useDropzoneContext()\n const describedBy =\n [context.rootDescriptionId, context.isInvalid ? context.rootMessageId : undefined].filter(Boolean).join(' ') ||\n undefined\n\n const handleClick = React.useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n (event) => {\n onClick?.(event)\n if (event.defaultPrevented) {\n return\n }\n\n context.open()\n },\n [context, onClick]\n )\n\n return (\n <Button\n ref={ref}\n aria-controls={context.inputId}\n aria-describedby={describedBy}\n aria-invalid={context.isInvalid || undefined}\n data-slot=\"dropzone-trigger\"\n className={cn(className)}\n onClick={handleClick}\n size={size}\n type={type}\n variant={variant}\n {...props}\n />\n )\n }\n)\n\nconst InfiniteProgress = React.forwardRef<HTMLDivElement, InfiniteProgressProps>(\n ({ className, status, ...props }, ref) => {\n const done = status === 'success' || status === 'error'\n const isError = status === 'error'\n\n return (\n <div\n ref={ref}\n aria-valuemax={100}\n aria-valuemin={0}\n aria-valuetext={valueTextMap[status]}\n data-slot=\"dropzone-progress\"\n data-status={status}\n role=\"progressbar\"\n className={cn('relative h-2 w-full overflow-hidden rounded-full bg-muted', className)}\n {...props}\n >\n <div\n className={cn(\n 'h-full w-full rounded-full bg-primary transition-transform',\n done ? 'translate-x-0' : 'animate-infinite-progress',\n isError && 'bg-destructive'\n )}\n />\n </div>\n )\n }\n)\n\nDropzone.displayName = 'Dropzone'\nDropzoneArea.displayName = 'DropzoneArea'\nDropzoneDescription.displayName = 'DropzoneDescription'\nDropzoneFileList.displayName = 'DropzoneFileList'\nDropzoneFileListItem.displayName = 'DropzoneFileListItem'\nDropzoneFileMessage.displayName = 'DropzoneFileMessage'\nDropzoneMessage.displayName = 'DropzoneMessage'\nDropzoneRemoveFile.displayName = 'DropzoneRemoveFile'\nDropzoneRetryFile.displayName = 'DropzoneRetryFile'\nDropzoneTrigger.displayName = 'DropzoneTrigger'\nInfiniteProgress.displayName = 'InfiniteProgress'\n\nexport {\n Dropzone,\n DropzoneArea,\n DropzoneDescription,\n DropzoneFileList,\n DropzoneFileListItem,\n DropzoneFileMessage,\n DropzoneMessage,\n DropzoneRemoveFile,\n DropzoneRetryFile,\n DropzoneTrigger,\n ErrorCode,\n type FileError,\n InfiniteProgress,\n useDropzone\n}\n"],"mappings":"A,6SAaA,MAAMG,EAAqB,CACzBC,EAAU,gBACVA,EAAU,aACVA,EAAU,aACVA,EAAU,YACZ,EAoKMC,EAAuB,IAAI,IAAeF,CAAkB,EAE5DG,EAAe,CACnB,QAAS,gBACT,QAAS,OACT,MAAO,OACT,EAEMC,EAAkBN,EAAM,cAA0D,IAAI,EAEtFO,EAA0BP,EAAM,cAAqE,IAAI,EAE/G,SAAS,kBACP,EACA,EACmD,CACnD,OAAQQ,EAAO,KAAf,CACE,IAAK,MACH,MAAO,CACL,GAAGC,EACH,CACE,GAAID,EAAO,GACX,SAAUA,EAAO,SACjB,KAAMA,EAAO,KACb,OAAQ,UACR,MAAO,CACT,CACF,EACF,IAAK,SACH,OAAOC,EAAM,OAAQ,GAAeC,EAAW,KAAOF,EAAO,EAAE,EACjE,IAAK,gBACH,OAAOC,EAAM,IAAK,GACZC,EAAW,KAAOF,EAAO,GAIzBA,EAAO,SAAW,UACb,CACL,GAAGE,EACH,OAAQ,UACR,MAAO,IAAA,GACP,QAAS,IAAA,GACT,OAAQ,IAAA,GACR,MAAOA,EAAW,MAAQ,CAC5B,EAGEF,EAAO,SAAW,QACb,CACL,GAAGE,EACH,OAAQ,QACR,MAAOF,EAAO,MACd,QAASA,EAAO,QAChB,OAAQ,IAAA,EACV,EAGK,CACL,GAAGE,EACH,OAAQ,UACR,OAAQF,EAAO,OACf,MAAO,IAAA,GACP,QAAS,IAAA,EACX,EA9BSE,CA+BV,CACL,CACF,CAEA,SAAS,oBAAoB,EAAiB,CAC5C,GAAI,CAACC,EACH,OAGF,IAAMC,EAAgB,OAAO,QAAQD,CAAM,CAAC,CAAC,SAAS,CAACE,EAAUC,KACxDA,EAAW,OAAS,EAAIA,EAAa,CAACD,CAAQ,CACtD,EAED,OAAOD,EAAc,OAAS,EAAIA,EAAc,KAAK,IAAI,EAAI,IAAA,EAC/D,CAEA,SAAS,sBAAsB,EAAiC,CAC9D,IAAMG,EAAaC,EAAe,QAAS,GACzCC,EAAU,OAAO,IAAK,GAAUC,EAAM,IAAiB,CAAC,CAAC,OAAQ,GAAcd,EAAqB,IAAIe,CAAS,CAAC,CACpH,EAEA,OAAO,MAAM,KAAK,IAAI,IAAIJ,CAAU,CAAC,CACvC,CAEA,SAAS,aAAa,EAAyB,EAA4B,CACzE,IAAMK,EAASL,EAAW,QAAS,GAAc,CAC/C,OAAQI,EAAR,CACE,IAAK,oBAAqB,CACxB,IAAMP,EAAgB,oBAAoBS,EAAO,MAAM,EACvD,OAAOT,EAAgB,CAAC,QAAQA,EAAc,mBAAmB,EAAI,CAAC,+BAA+B,CACvG,CACA,IAAK,iBAKH,OAJKS,EAAO,QAIL,CAAC,gBAAgBA,EAAO,QAAW,QAAA,CAAc,QAAQ,CAAC,EAAE,IAAI,EAH9D,CAAC,wBAAwB,EAKpC,IAAK,iBAKH,OAJKA,EAAO,QAIL,CAAC,gBAAgBA,EAAO,QAAW,QAAA,CAAc,QAAQ,CAAC,EAAE,IAAI,EAH9D,CAAC,wBAAwB,EAKpC,IAAK,iBACH,OAAOA,EAAO,SAAW,CAAC,OAAOA,EAAO,SAAS,OAAO,EAAI,CAAC,gBAAgB,EAC/E,QACE,MAAO,CAAC,CACZ,CACF,CAAC,EAED,GAAID,EAAO,SAAW,EACpB,MAAO,mCAGT,GAAM,CAACE,EAAY,GAAGC,GAAcH,EACpC,MAAO,GAAGE,EAAW,OAAO,CAAC,CAAC,CAAC,YAAY,IAAIA,EAAW,MAAM,CAAC,IAAIC,EAAW,OAAS,EAAI,KAAKA,EAAW,KAAK,IAAI,IAAM,IAC9H,CAEA,SAAS,oBAAoB,EAAiC,EAA4B,CACxF,IAAMR,EAAa,sBAAsBC,CAAc,EAMvD,OAJID,EAAW,OAAS,EACf,aAAaA,EAAYM,CAAM,EAGjCL,EAAe,EAAE,EAAE,OAAO,EAAE,EAAE,SAAW,kCAClD,CAEA,SAAS,sBACP,EACA,EACA,CACA,GAAIQ,EAAkB,CACpB,IAAMC,EAAUD,EAAiBN,CAAK,EACtC,GAAIO,IAAY,IAAA,GACd,OAAOA,CAEX,CAEA,GAAI,OAAOP,GAAU,SACnB,OAAOA,EAGT,GAAIA,aAAiB,MACnB,OAAOA,EAAM,OAIjB,CAEA,SAAS,oBAAkD,CACzD,IAAMQ,EAAU1B,EAAM,WAAWM,CAAe,EAEhD,GAAI,CAACoB,EACH,MAAU,MAAM,qDAAqD,EAGvE,OAAOA,CACT,CAEA,SAAS,4BAA0D,CACjE,IAAMA,EAAU1B,EAAM,WAAWO,CAAuB,EAExD,GAAI,CAACmB,EACH,MAAU,MAAM,mEAAmE,EAGrF,OAAOA,CACT,CAEA,SAAS,YACP,EACgD,CAChD,GAAM,CACJ,WAAYC,EACZ,aAAcC,EACd,mBACA,iBACA,oBACA,gBACA,cACA,gBACA,YAAY,GACZ,aACA,kBAAkB,IAChBC,EAEEC,EAAU9B,EAAM,MAAM,EACtB+B,EAAgB,GAAGD,EAAQ,UAC3BE,EAAoB,GAAGF,EAAQ,cAC/B,CAACG,EAAWC,GAAqBlC,EAAM,SAA6B,IAAA,EAAS,EAE7EmC,EAAenC,EAAM,YACxB,GAA8B,CAC7BkC,EAAkBhB,CAAK,EACvBkB,IAAclB,CAAK,CACrB,EACA,CAACkB,CAAW,CACd,EAEM,CAACC,EAAcC,GAAYtC,EAAM,WACrC,kBACA,CAAC,CACH,EAEMuC,EAAmBvC,EAAM,YAAa,GAAe,GAAG8B,EAAQ,GAAGU,EAAG,UAAW,CAACV,CAAO,CAAC,EAE1FW,EAAYzC,EAAM,YACfiC,IAAc,IAAA,IAAaI,EAAa,KAAM,GAAe3B,EAAW,SAAW,OAAO,EAChG,CAAC2B,EAAcJ,CAAS,CAAC,EAEtBS,EAAa1C,EAAM,YACvB,MAAO,EAAY,EAAY,EAAa,IAAM,CAChD,GAAI,CACF,IAAM2C,EAAS,MAAMhB,EAAeiB,CAAI,EAExC,GAAID,EAAO,SAAW,QAAS,CAC7B,GAAIE,GAAaC,GAAcC,GAAiB,KAE9C,OADAT,EAAS,CAAE,KAAM,gBAAiB,KAAI,OAAQ,SAAU,CAAC,EAClDI,EAAWE,EAAMJ,EAAIM,EAAa,CAAC,EAG5CR,EAAS,CACP,KAAM,gBACN,KACA,OAAQ,QACR,MAAOK,EAAO,MACd,QAAS,sBAAsBA,EAAO,MAAOnB,CAAgB,CAC/D,CAAC,EACDwB,IAAoBL,EAAO,KAAK,EAChC,MACF,CAEAL,EAAS,CACP,KAAM,gBACN,KACA,OAAQ,UACR,OAAQK,EAAO,MACjB,CAAC,EACDM,IAAiBN,EAAO,MAAM,CAChC,OAASzB,EAAO,CACd,IAAMgC,EAAchC,EAEpBoB,EAAS,CACP,KAAM,gBACN,KACA,OAAQ,QACR,MAAOY,EACP,QAAS,sBAAsBA,EAAa1B,CAAgB,CAC9D,CAAC,EACDwB,IAAoBE,CAAW,CACjC,CACF,EACA,CAACL,EAAWlB,EAAgBoB,EAAeC,EAAmBC,EAAgBzB,CAAgB,CAChG,EAEM2B,EAAenD,EAAM,YACzB,KAAO,IAAe,CACpB,MAAM4B,IAAmBY,CAAE,EAC3BF,EAAS,CAAE,KAAM,SAAU,IAAG,CAAC,CACjC,EACA,CAACV,CAAgB,CACnB,EAEMwB,EAAWpD,EAAM,YACpB,GAAe,CACd,IAAMU,EAAa2B,EAAa,KAAM,GAASgB,EAAK,KAAOb,CAAE,EAE7D,OAAO9B,GAAY,SAAW,SAAWA,EAAW,QAAUqC,GAAiB,IACjF,EACA,CAACV,EAAcU,CAAa,CAC9B,EAEMO,EAAUtD,EAAM,YACpB,KAAO,IAAe,CACpB,GAAI,CAACoD,EAASZ,CAAE,EACd,OAGF,IAAM9B,EAAa2B,EAAa,KAAM,GAASgB,EAAK,KAAOb,CAAE,EAEzD9B,GAAY,SAAW,UAI3B4B,EAAS,CAAE,KAAM,gBAAiB,KAAI,OAAQ,SAAU,CAAC,EACzD,MAAMI,EAAWhC,EAAW,KAAM8B,CAAE,EACtC,EACA,CAACY,EAAUf,EAAcK,CAAU,CACrC,EAEMa,EAAWxD,EAAiB,CAChC,OAAQyD,GAAY,OACpB,QAASA,GAAY,QACrB,QAASA,GAAY,QACrB,SAAUA,GAAY,SACtB,QAAS,GACT,WAAY,GACZ,eAAgB,KAAO,IAAkB,CACvCrB,EAAa,IAAA,EAAS,EAEtB,IAAIsB,EAAYC,EACVC,EAAWH,GAAY,UAAY,IACnCI,EAAW,OAAO,SAASD,CAAQ,EACrC,KAAK,IAAItB,EAAa,OAASqB,EAAc,OAASC,EAAU,CAAC,EACjE,EAEJ,GAAIC,EAAW,EAAG,CAChB,GAAIC,EAAiB,CACnB,IAAMC,EAAgBzB,EAAa,MAAM,EAAG,KAAK,IAAIuB,EAAUvB,EAAa,MAAM,CAAC,EAEnF,MAAM,QAAQ,IAAIyB,EAAc,IAAK,GAAeX,EAAazC,EAAW,EAAE,CAAC,CAAC,EAEhF,IAAMqD,EAAoBH,EAAWE,EAAc,OAC/CC,EAAoB,IACtB,EAAYL,EAAc,MAAMK,CAAiB,EAErD,KAAO,CACL5B,EAAa,aAAa,CAAChC,EAAU,YAAY,EAAGqD,GAAc,CAAC,CAAC,CAAC,EACrE,IAAMQ,EAAiB,KAAK,IAAIL,EAAWtB,EAAa,OAAQ,CAAC,EACjE,EAAYqB,EAAc,MAAM,EAAGM,CAAc,CACnD,CACF,CAEIP,EAAU,SAAW,IAIzB,MAAM,QAAQ,IACZA,EAAU,IAAI,KAAO,IAAS,CAC5B,IAAMjB,EAAK,OAAO,WAAW,EAC7BF,EAAS,CAAE,KAAM,MAAO,KAAI,SAAUM,EAAK,KAAM,MAAK,CAAC,EACvD,MAAMF,EAAWE,EAAMJ,CAAE,CAC3B,CAAC,CACH,EAEAyB,IAAgB,EAClB,EACA,eAAiB,GAAmB,CAClC9B,EAAa,oBAAoBnB,EAAgBwC,GAAc,CAAC,CAAC,CAAC,CACpE,CACF,CAAC,EAED,MAAO,CACL,aAAcD,EAAS,aACvB,cAAeA,EAAS,cACxB,KAAMA,EAAS,KACf,eACA,UACA,WACA,eACA,YACA,aAAcA,EAAS,aACvB,YACA,UACA,gBACA,oBACA,kBACF,CACF,CAEA,SAAS,SAAsC,CAAE,WAAU,GAAGA,GAAwD,CACpH,MAAO,kBAACjD,EAAgB,SAAjB,CAA0B,MAAOiD,EAAW,UAAmC,CAAA,CACxF,CAEA,MAAMW,EAAelE,EAAM,YACxB,CAAE,YAAW,WAAU,GAAG6B,GAAS,IAAiB,CACnD,IAAMH,EAAU,mBAAmB,EAC7ByC,EACJ,CAACzC,EAAQ,kBAAmBA,EAAQ,UAAYA,EAAQ,cAAgB,IAAA,EAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,GAC3G,IAAA,GAEI,CAAE,IAAK0C,EAAS,GAAGC,GAAc3C,EAAQ,aAAa,CAC1D,GAAGG,EACH,YAAa,gBACb,mBAAoBsC,EACpB,eAAgBzC,EAAQ,WAAa,IAAA,GACrC,UAAW4C,EACT,4JACA5C,EAAQ,cAAgB,8BACxBA,EAAQ,WAAa,sCACrB6C,CACF,CACF,CAAC,EAIKC,EAAa9C,EAAQ,cAAc,CACvC,GAAIA,EAAQ,QACZ,UAAW,UACX,mBAAoByC,EACpB,eAAgBzC,EAAQ,UACxB,SAAU,EACZ,CAAC,EAED,MACE,kBAAC,MAAD,CAAK,GAAI2C,EAAW,IAAKI,EAAYC,EAAcN,CAAO,EAA1D,SAAA,CACE,kBAAC,QAAD,CAAO,GAAII,CAAa,CAAA,EACvBG,CACE,C,EAET,CACF,EAEMC,EAAsB5E,EAAM,YAC/B,CAAE,YAAW,GAAG6B,GAAS,IAAQ,CAChC,IAAMH,EAAU,mBAAmB,EAEnC,MACE,kBAAC,IAAD,CACO,MACL,GAAIA,EAAQ,kBACZ,YAAU,uBACV,UAAW4C,EAAG,gCAAiCC,CAAS,EACxD,GAAI1C,CACL,CAAA,CAEL,CACF,EAEMgD,EAAmB7E,EAAM,YAAqD,CAAE,YAAW,GAAG6B,GAAS,KAC3G,mBAAmB,EAEZ,kBAAC,KAAD,CAAS,MAAK,YAAU,qBAAqB,UAAWyC,EAAG,YAAaC,CAAS,EAAG,GAAI1C,CAAQ,CAAA,EACxG,EAEKiD,EAAuB9E,EAAM,YAChC,CAAE,YAAW,OAAM,WAAU,GAAG6B,GAAS,IAAQ,CAChD,IAAMH,EAAU,mBAAmB,EAC7BqD,EAAYrD,EAAQ,iBAAiBkB,EAAK,EAAE,EAC5CH,EAAYG,EAAK,SAAW,QAC5BQ,EAAW1B,EAAQ,SAASkB,EAAK,EAAE,EAEnCoC,EAAQhF,EAAM,aACX,CACL,iBAAoB0B,EAAQ,aAAakB,EAAK,EAAE,EAChD,YAAelB,EAAQ,QAAQkB,EAAK,EAAE,EACtC,WAAYA,EACZ,WACA,WAAYlB,EAAQ,QACpB,WACF,GACA,CAAC0B,EAAU1B,EAASkB,EAAMmC,CAAS,CACrC,EAEA,MACE,kBAACxE,EAAwB,SAAzB,CAAyC,QACvC,SAAA,kBAAC,KAAD,CACO,MACL,YAAU,qBACV,cAAaqC,EAAK,OAClB,mBAAkBH,EAAYsC,EAAY,IAAA,GAC1C,UAAWT,EACT,gDACA1B,EAAK,SAAW,SAAW,wBAC3B2B,CACF,EACA,GAAI1C,EAEH,UACC,CAAA,CAC4B,CAAA,CAEtC,CACF,EAEMoD,EAAsBjF,EAAM,YAC/B,CAAE,YAAW,WAAU,GAAG6B,GAAS,IAAQ,CAC1C,IAAMH,EAAU,2BAA2B,EACrCwD,EACJxD,EAAQ,WAAW,SAAW,QACzBA,EAAQ,WAAW,SAAW,OAAOA,EAAQ,WAAW,KAAK,EAC9DiD,EAEN,MACE,kBAAC,IAAD,CACO,MACL,GAAIjD,EAAQ,UACZ,YAAU,wBACV,UAAW4C,EACT,oCACA5C,EAAQ,WAAW,SAAW,SAAW,mBACzC6C,CACF,EACA,GAAI1C,EAEH,SAAAqD,CACA,CAAA,CAEP,CACF,EAEMC,EAAkBnF,EAAM,YAC3B,CAAE,YAAW,WAAU,GAAG6B,GAAS,IAAQ,CAC1C,IAAMH,EAAU,mBAAmB,EAC7BwD,EAAOxD,EAAQ,WAAaiD,EAElC,MACE,kBAAC,IAAD,CACO,MACL,GAAIjD,EAAQ,cACZ,YAAU,mBACV,UAAW4C,EAAG,qDAAsDC,CAAS,EAC7E,GAAI1C,EAEH,SAAAqD,CACA,CAAA,CAEP,CACF,EAEME,EAAqBpF,EAAM,YAC9B,CAAE,YAAW,UAAS,OAAO,UAAW,OAAO,SAAU,UAAU,QAAS,GAAG6B,GAAS,IAAQ,CAC/F,IAAMH,EAAU,2BAA2B,EAErC2D,EAAcrF,EAAM,YACvB,GAAU,CACTsF,IAAUC,CAAK,EACXA,EAAM,kBAIV7D,EAAa,aAAa,CAC5B,EACA,CAACA,EAAS4D,CAAO,CACnB,EAEA,MACE,kBAACE,EAAD,CACO,MACL,YAAU,uBACV,UAAWlB,EAAGC,CAAS,EACvB,QAASc,EACH,OACA,OACG,UACT,GAAIxD,CACL,CAAA,CAEL,CACF,EAEM4D,EAAoBzF,EAAM,YAC7B,CAAE,YAAW,WAAU,UAAS,OAAO,UAAW,OAAO,SAAU,UAAU,QAAS,GAAG6B,GAAS,IAAQ,CACzG,IAAMH,EAAU,2BAA2B,EACrCgE,EAAaC,GAAY,CAACjE,EAAQ,SAElC2D,EAAcrF,EAAM,YACvB,GAAU,CACTsF,IAAUC,CAAK,EACXA,EAAM,kBAAoBG,GAI9BhE,EAAa,QAAQ,CACvB,EACA,CAACA,EAASgE,EAAYJ,CAAO,CAC/B,EAEA,MACE,kBAACE,EAAD,CACO,MACL,YAAU,sBACV,UAAWlB,EAAGC,CAAS,EACvB,SAAUmB,EACV,QAASL,EACH,OACA,OACG,UACT,GAAIxD,CACL,CAAA,CAEL,CACF,EAEM+D,EAAkB5F,EAAM,YAC3B,CAAE,YAAW,UAAS,OAAO,KAAM,OAAO,SAAU,UAAU,SAAU,GAAG6B,GAAS,IAAQ,CAC3F,IAAMH,EAAU,mBAAmB,EAC7ByC,EACJ,CAACzC,EAAQ,kBAAmBA,EAAQ,UAAYA,EAAQ,cAAgB,IAAA,EAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,GAC3G,IAAA,GAEI2D,EAAcrF,EAAM,YACvB,GAAU,CACTsF,IAAUC,CAAK,EACXA,EAAM,kBAIV7D,EAAQ,KAAK,CACf,EACA,CAACA,EAAS4D,CAAO,CACnB,EAEA,MACE,kBAACE,EAAD,CACO,MACL,gBAAe9D,EAAQ,QACvB,mBAAkByC,EAClB,eAAczC,EAAQ,WAAa,IAAA,GACnC,YAAU,mBACV,UAAW4C,EAAGC,CAAS,EACvB,QAASc,EACH,OACA,OACG,UACT,GAAIxD,CACL,CAAA,CAEL,CACF,EAEMgE,EAAmB7F,EAAM,YAC5B,CAAE,YAAW,SAAQ,GAAG6B,GAAS,IAAQ,CACxC,IAAMiE,EAAOC,IAAW,WAAaA,IAAW,QAC1CC,EAAUD,IAAW,QAE3B,MACE,kBAAC,MAAD,CACO,MACL,gBAAe,IACf,gBAAe,EACf,iBAAgB1F,EAAa0F,GAC7B,YAAU,oBACV,cAAaA,EACb,KAAK,cACL,UAAWzB,EAAG,4DAA6DC,CAAS,EACpF,GAAI1C,EAEJ,SAAA,kBAAC,MAAD,CACE,UAAWyC,EACT,6DACAwB,EAAO,gBAAkB,4BACzBE,GAAW,gBACb,CACD,CAAA,CACE,CAAA,CAET,CACF,EAEA,SAAS,YAAc,WACvB,EAAa,YAAc,eAC3B,EAAoB,YAAc,sBAClC,EAAiB,YAAc,mBAC/B,EAAqB,YAAc,uBACnC,EAAoB,YAAc,sBAClC,EAAgB,YAAc,kBAC9B,EAAmB,YAAc,qBACjC,EAAkB,YAAc,oBAChC,EAAgB,YAAc,kBAC9B,EAAiB,YAAc,mB"}
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Separator as t}from"./separator.js";import{Label as n}from"./label.js";import{createContext as r,useContext as i,useId as a,useMemo as o}from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";import{cva as l}from"class-variance-authority";const u=r(null);function useFieldControlId(e){let t=i(u);return e??t?.controlId}function useFieldLabelId(){return i(u)?.labelId}function useFieldInvalid(e){let t=i(u)?.invalid;return e??(t?!0:void 0)}function FieldSet({className:t,...n}){return/* @__PURE__ */ s(`fieldset`,{"data-slot":`field-set`,className:e(`flex flex-col gap-4`,`has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3`,t),...n})}function FieldLegend({className:t,variant:n=`legend`,...r}){return/* @__PURE__ */ s(`legend`,{"data-slot":`field-legend`,"data-variant":n,className:e(`mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base`,t),...r})}function FieldGroup({className:t,...n}){return/* @__PURE__ */ s(`div`,{"data-slot":`field-group`,className:e(`group/field-group @container/field-group flex w-full flex-col gap-5`,`data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4`,t),...n})}const d=l(`data-[invalid=true]:text-destructive gap-1 group/field flex w-full`,{variants:{orientation:{vertical:`flex-col *:w-full [&>.sr-only]:w-auto`,horizontal:`flex-row items-center *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`,responsive:`flex-col *:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:*:data-[slot=field-label]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`}},defaultVariants:{orientation:`vertical`}});function Field({className:t,orientation:n=`vertical`,invalid:r,"data-invalid":i,...c}){let l=a(),f=a(),p=r??(i===!0||i===`true`),m=o(()=>({controlId:l,labelId:f,invalid:p}),[l,f,p]);return/* @__PURE__ */ s(u.Provider,{value:m,children:/* @__PURE__ */ s(`div`,{"data-slot":`field`,"data-orientation":n,"data-invalid":p?`true`:void 0,className:e(d({orientation:n}),t),...c})})}function FieldContent({className:t,...n}){return/* @__PURE__ */ s(`div`,{"data-slot":`field-content`,className:e(`gap-0.5 group/field-content flex flex-1 flex-col leading-snug`,t),...n})}function FieldLabel({className:t,htmlFor:r,id:i,...a}){let o=useFieldControlId(r),c=useFieldLabelId();return/* @__PURE__ */ s(n,{"data-slot":`field-label`,id:i??c,htmlFor:o,className:e(`group/field-label peer/field-label flex w-fit gap-2 leading-snug`,`has-data-checked:bg-primary/5 has-data-checked:border-primary/30 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10`,`has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5`,`group-data-[disabled=true]/field:opacity-50`,t),...a})}function FieldTitle({className:t,...n}){return/* @__PURE__ */ s(`div`,{"data-slot":`field-label`,className:e(`gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50 flex w-fit items-center leading-snug`,t),...n})}function FieldDescription({className:t,...n}){return/* @__PURE__ */ s(`p`,{"data-slot":`field-description`,className:e(`text-muted-foreground text-left text-xs leading-normal font-normal`,`[[data-variant=legend]+&]:-mt-1.5 group-has-data-horizontal/field:text-balance last:mt-0 nth-last-2:-mt-1`,`[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary`,t),...n})}function FieldSeparator({children:n,className:r,...i}){return/* @__PURE__ */ c(`div`,{"data-slot":`field-separator`,"data-content":!!n,className:e(`-my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2 relative`,r),...i,children:[/* @__PURE__ */ s(t,{className:`absolute inset-0 top-1/2`}),n&&/* @__PURE__ */ s(`span`,{className:`text-muted-foreground px-2 bg-background relative mx-auto block w-fit`,"data-slot":`field-separator-content`,children:n})]})}function FieldError({className:t,children:n,errors:r,...i}){let a=o(()=>{if(n)return n;if(!r?.length)return null;let e=[...new Map(r.map(e=>[e?.message,e])).values()];return e?.length===1?e[0]?.message:/* @__PURE__ */ s(`ul`,{className:`ml-4 flex list-disc flex-col gap-1`,children:e.map(e=>e?.message&&/* @__PURE__ */ s(`li`,{children:e.message},e.message))})},[n,r]);return a?/* @__PURE__ */ s(`div`,{role:`alert`,"data-slot":`field-error`,className:e(`text-destructive text-sm font-normal`,t),...i,children:a}):null}export{Field,FieldContent,FieldDescription,FieldError,FieldGroup,FieldLabel,FieldLegend,FieldSeparator,FieldSet,FieldTitle,useFieldControlId,useFieldInvalid,useFieldLabelId};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Label as t}from"./label.js";import{Separator as n}from"./separator.js";import{createContext as r,useContext as i,useId as a,useMemo as o}from"react";import{jsx as s,jsxs as c}from"react/jsx-runtime";import{cva as l}from"class-variance-authority";const u=r(null);function useFieldControlId(e){let t=i(u);return e??t?.controlId}function useFieldLabelId(){return i(u)?.labelId}function useFieldInvalid(e){let t=i(u)?.invalid;return e??(t?!0:void 0)}function FieldSet({className:t,...n}){return/* @__PURE__ */ s(`fieldset`,{"data-slot":`field-set`,className:e(`flex flex-col gap-4`,`has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3`,t),...n})}function FieldLegend({className:t,variant:n=`legend`,...r}){return/* @__PURE__ */ s(`legend`,{"data-slot":`field-legend`,"data-variant":n,className:e(`mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base`,t),...r})}function FieldGroup({className:t,...n}){return/* @__PURE__ */ s(`div`,{"data-slot":`field-group`,className:e(`group/field-group @container/field-group flex w-full flex-col gap-5`,`data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4`,t),...n})}const d=l(`data-[invalid=true]:text-destructive gap-1 group/field flex w-full`,{variants:{orientation:{vertical:`flex-col *:w-full [&>.sr-only]:w-auto`,horizontal:`flex-row items-center *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`,responsive:`flex-col *:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:*:data-[slot=field-label]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px`}},defaultVariants:{orientation:`vertical`}});function Field({className:t,orientation:n=`vertical`,invalid:r,"data-invalid":i,...c}){let l=a(),f=a(),p=r??(i===!0||i===`true`),m=o(()=>({controlId:l,labelId:f,invalid:p}),[l,f,p]);return/* @__PURE__ */ s(u.Provider,{value:m,children:/* @__PURE__ */ s(`div`,{"data-slot":`field`,"data-orientation":n,"data-invalid":p?`true`:void 0,className:e(d({orientation:n}),t),...c})})}function FieldContent({className:t,...n}){return/* @__PURE__ */ s(`div`,{"data-slot":`field-content`,className:e(`gap-0.5 group/field-content flex flex-1 flex-col leading-snug`,t),...n})}function FieldLabel({className:n,htmlFor:r,id:i,...a}){let o=useFieldControlId(r),c=useFieldLabelId();return/* @__PURE__ */ s(t,{"data-slot":`field-label`,id:i??c,htmlFor:o,className:e(`group/field-label peer/field-label flex w-fit gap-2 leading-snug`,`has-data-checked:bg-primary/5 has-data-checked:border-primary/30 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10`,`has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5`,`group-data-[disabled=true]/field:opacity-50`,n),...a})}function FieldTitle({className:t,...n}){return/* @__PURE__ */ s(`div`,{"data-slot":`field-label`,className:e(`gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50 flex w-fit items-center leading-snug`,t),...n})}function FieldDescription({className:t,...n}){return/* @__PURE__ */ s(`p`,{"data-slot":`field-description`,className:e(`text-muted-foreground text-left text-xs leading-normal font-normal`,`[[data-variant=legend]+&]:-mt-1.5 group-has-data-horizontal/field:text-balance last:mt-0 nth-last-2:-mt-1`,`[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary`,t),...n})}function FieldSeparator({children:t,className:r,...i}){return/* @__PURE__ */ c(`div`,{"data-slot":`field-separator`,"data-content":!!t,className:e(`-my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2 relative`,r),...i,children:[/* @__PURE__ */ s(n,{className:`absolute inset-0 top-1/2`}),t&&/* @__PURE__ */ s(`span`,{className:`text-muted-foreground px-2 bg-background relative mx-auto block w-fit`,"data-slot":`field-separator-content`,children:t})]})}function FieldError({className:t,children:n,errors:r,...i}){let a=o(()=>{if(n)return n;if(!r?.length)return null;let e=[...new Map(r.map(e=>[e?.message,e])).values()];return e?.length===1?e[0]?.message:/* @__PURE__ */ s(`ul`,{className:`ml-4 flex list-disc flex-col gap-1`,children:e.map(e=>e?.message&&/* @__PURE__ */ s(`li`,{children:e.message},e.message))})},[n,r]);return a?/* @__PURE__ */ s(`div`,{role:`alert`,"data-slot":`field-error`,className:e(`text-destructive text-sm font-normal`,t),...i,children:a}):null}export{Field,FieldContent,FieldDescription,FieldError,FieldGroup,FieldLabel,FieldLegend,FieldSeparator,FieldSet,FieldTitle,useFieldControlId,useFieldInvalid,useFieldLabelId};
2
2
  //# sourceMappingURL=field.js.map
@@ -1,6 +1,6 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
- import { InputProps } from "./input.js";
3
2
  import { Modify, Replacement, Track } from "../hooks/use-mask.js";
3
+ import { InputProps } from "./input.js";
4
4
  export type MaskInputProps = InputProps & {
5
5
  /** Mask pattern. `_` is a digit, `#` a letter, `*` any character; everything else is fixed. */
6
6
  mask: string;
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{Input as e}from"./input.js";import{composeRefs as t}from"../lib/compose-refs.js";import{useMask as n}from"../hooks/use-mask.js";import{jsx as r}from"react/jsx-runtime";function MaskInput({ref:i,mask:a,replacement:o,showMask:s,separate:c,track:l,modify:u,...d}){let f=n({mask:a,replacement:o,showMask:s,separate:c,track:l,modify:u});return/* @__PURE__ */ r(e,{"data-slot":`mask-input`,...d,ref:t(i,f)})}export{MaskInput};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{useMask as e}from"../hooks/use-mask.js";import{composeRefs as t}from"../lib/compose-refs.js";import{Input as n}from"./input.js";import{jsx as r}from"react/jsx-runtime";function MaskInput({ref:i,mask:a,replacement:o,showMask:s,separate:c,track:l,modify:u,...d}){let f=e({mask:a,replacement:o,showMask:s,separate:c,track:l,modify:u});return/* @__PURE__ */ r(n,{"data-slot":`mask-input`,...d,ref:t(i,f)})}export{MaskInput};
2
2
  //# sourceMappingURL=mask-input.js.map
@@ -0,0 +1,21 @@
1
+ import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
+ import * as React from "react";
3
+ import { ReactNode } from "react";
4
+ import { VariantProps } from "class-variance-authority";
5
+ import { Meter as Meter$1 } from "@base-ui/react/meter";
6
+ declare const meterVariants: (props?: ({
7
+ size?: "lg" | "md" | "sm" | null | undefined;
8
+ color?: "blue" | "brand" | "gray" | "green" | "indigo" | "pink" | "primary" | "red" | "yellow" | "zinc" | null | undefined;
9
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
10
+ export type MeterProps = Omit<React.ComponentProps<typeof Meter$1.Root>, 'render'> & VariantProps<typeof meterVariants> & {
11
+ /** Label rendered above the bar; it also names the meter for assistive technology. */
12
+ label?: ReactNode;
13
+ /**
14
+ * Shows the formatted value above the bar, at the end of the label row.
15
+ * @default false
16
+ */
17
+ showValue?: boolean;
18
+ };
19
+ declare function Meter({ className, size, color, label, showValue, children, ...props }: MeterProps): React.JSX.Element;
20
+ export { Meter, meterVariants };
21
+ //# sourceMappingURL=meter.d.ts.map
@@ -0,0 +1,2 @@
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{progressColorVariants as e}from"../lib/progress.js";import{cn as t}from"../lib/utils.js";import{t as n}from"../resolve-class-name-BurP8ngI.js";import{jsx as r,jsxs as i}from"react/jsx-runtime";import{cva as a}from"class-variance-authority";import{Meter as o}from"@base-ui/react/meter";const s=a(`relative flex w-full items-center overflow-x-hidden rounded-full bg-muted`,{variants:{size:{sm:`h-0.5`,md:`h-1`,lg:`h-1.5`},color:e},defaultVariants:{size:`md`,color:`primary`}});function Meter({className:e,size:a=`md`,color:c=`primary`,label:l,showValue:u=!1,children:d,...f}){let p=l!==void 0||u;return/* @__PURE__ */ i(o.Root,{"data-slot":`meter`,"data-size":a,"data-color":c,className:`flex w-full flex-col gap-1.5`,...f,children:[p&&/* @__PURE__ */ i(`div`,{"data-slot":`meter-header`,className:`flex items-center justify-between gap-2 text-sm`,children:[l!==void 0&&/* @__PURE__ */ r(o.Label,{"data-slot":`meter-label`,className:`font-medium`,children:l}),u&&/* @__PURE__ */ r(o.Value,{"data-slot":`meter-value`,className:`ml-auto text-muted-foreground tabular-nums`})]}),/* @__PURE__ */ r(o.Track,{"data-slot":`meter-track`,className:r=>t(s({size:a,color:c}),n(e,r)),children:/* @__PURE__ */ r(o.Indicator,{"data-slot":`meter-indicator`,className:`h-full bg-(--progress-color) transition-all`})}),d]})}export{Meter,s as meterVariants};
2
+ //# sourceMappingURL=meter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meter.js","names":["MeterPrimitive","resolveClassName","Meter$1","meterVariants","cva","progressColorVariants","props","hasHeader","label","showValue","size","color","cn","className","state","children"],"sources":["../../src/components/meter.tsx"],"sourcesContent":["import type * as React from 'react'\nimport type { ReactNode } from 'react'\n\nimport { Meter as MeterPrimitive } from '@base-ui/react/meter'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { progressColorVariants } from '../lib/progress'\nimport { cn } from '../lib/utils'\nimport { resolveClassName } from '../utils/resolve-class-name'\n\nconst meterVariants = cva('relative flex w-full items-center overflow-x-hidden rounded-full bg-muted', {\n variants: {\n size: {\n sm: 'h-0.5',\n md: 'h-1',\n lg: 'h-1.5'\n },\n color: progressColorVariants\n },\n defaultVariants: {\n size: 'md',\n color: 'primary'\n }\n})\n\nexport type MeterProps = Omit<React.ComponentProps<typeof MeterPrimitive.Root>, 'render'> &\n VariantProps<typeof meterVariants> & {\n /** Label rendered above the bar; it also names the meter for assistive technology. */\n label?: ReactNode\n /**\n * Shows the formatted value above the bar, at the end of the label row.\n * @default false\n */\n showValue?: boolean\n }\n\nfunction Meter({\n className,\n size = 'md',\n color = 'primary',\n label,\n showValue = false,\n children,\n ...props\n}: MeterProps) {\n const hasHeader = label !== undefined || showValue\n\n return (\n <MeterPrimitive.Root\n data-slot=\"meter\"\n data-size={size}\n data-color={color}\n className=\"flex w-full flex-col gap-1.5\"\n {...props}\n >\n {hasHeader && (\n <div data-slot=\"meter-header\" className=\"flex items-center justify-between gap-2 text-sm\">\n {label !== undefined && (\n <MeterPrimitive.Label data-slot=\"meter-label\" className=\"font-medium\">\n {label}\n </MeterPrimitive.Label>\n )}\n {showValue && (\n <MeterPrimitive.Value data-slot=\"meter-value\" className=\"ml-auto text-muted-foreground tabular-nums\" />\n )}\n </div>\n )}\n <MeterPrimitive.Track\n data-slot=\"meter-track\"\n className={(state) => cn(meterVariants({ size, color }), resolveClassName(className, state))}\n >\n <MeterPrimitive.Indicator data-slot=\"meter-indicator\" className=\"h-full bg-(--progress-color) transition-all\" />\n </MeterPrimitive.Track>\n {children}\n </MeterPrimitive.Root>\n )\n}\n\nexport { Meter, meterVariants }\n"],"mappings":"A,4UAUA,MAAMG,EAAgBC,EAAI,4EAA6E,CACrG,SAAU,CACR,KAAM,CACJ,GAAI,QACJ,GAAI,MACJ,GAAI,OACN,EACA,MAAOC,CACT,EACA,gBAAiB,CACf,KAAM,KACN,MAAO,SACT,CACF,CAAC,EAaD,SAAS,MAAM,CACb,YACA,OAAO,KACP,QAAQ,UACR,QACA,YAAY,GACZ,WACA,GAAGC,GACU,CACb,IAAMC,EAAYC,IAAU,IAAA,IAAaC,EAEzC,MACE,kBAACT,EAAe,KAAhB,CACE,YAAU,QACV,YAAWU,EACX,aAAYC,EACZ,UAAU,+BACV,GAAIL,EALN,SAAA,CAOGC,GACC,kBAAC,MAAD,CAAK,YAAU,eAAe,UAAU,kDAAxC,SAAA,CACGC,IAAU,IAAA,IACT,kBAACR,EAAe,MAAhB,CAAsB,YAAU,cAAc,UAAU,cACrD,SAAAQ,CACmB,CAAA,EAEvBC,GACC,kBAACT,EAAe,MAAhB,CAAsB,YAAU,cAAc,UAAU,4CAA8C,CAAA,CAErG,C,GAEP,kBAACA,EAAe,MAAhB,CACE,YAAU,cACV,UAAY,GAAUY,EAAGT,EAAc,CAAE,OAAM,OAAM,CAAC,EAAGF,EAAiBY,EAAWC,CAAK,CAAC,EAE3F,SAAA,kBAACd,EAAe,UAAhB,CAA0B,YAAU,kBAAkB,UAAU,6CAA+C,CAAA,CAC3F,CAAA,EACrBe,CACkB,C,EAEzB,C"}
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{toAsChildRenderProps as e}from"../lib/as-child.js";import{cn as t}from"../lib/utils.js";import{t as n}from"../resolve-class-name-BurP8ngI.js";import{Label as r}from"./label.js";import{useFieldControlId as i,useFieldInvalid as a}from"./field.js";import{IconMinus as o,IconPlus as s}from"@tabler/icons-react";import{createContext as c,useContext as l,useId as u}from"react";import{jsx as d,jsxs as f}from"react/jsx-runtime";import{cva as p}from"class-variance-authority";import{NumberField as m}from"@base-ui/react/number-field";const h=c(null),g=p([`relative flex w-full justify-between rounded-lg border border-input bg-transparent transition-colors dark:bg-input/30`,`data-disabled:pointer-events-none data-disabled:opacity-50`,`focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50`,`has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40`],{variants:{size:{sm:`h-7 text-sm`,md:`h-8 text-sm`,lg:`h-9 text-sm`}},defaultVariants:{size:`md`}}),_=p(`relative flex shrink-0 cursor-pointer items-center justify-center transition-colors pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 hover:bg-accent`,{variants:{size:{sm:`px-1.5 [&_svg:not([class*='size-'])]:size-3.5`,md:`px-2 [&_svg:not([class*='size-'])]:size-4`,lg:`px-2.5 [&_svg:not([class*='size-'])]:size-4`}},defaultVariants:{size:`md`}}),v=p(`w-full min-w-0 flex-1 bg-transparent text-center tabular-nums outline-none`,{variants:{size:{sm:`px-2 py-0.5`,md:`px-2.5 py-1`,lg:`px-2.5 py-1.5`}},defaultVariants:{size:`md`}});function NumberField({id:e,className:r,size:o=`md`,"aria-invalid":s,...c}){let l=u(),f=i(e),p=a(s),g=f??l,_=o??`md`;return/* @__PURE__ */ d(h.Provider,{value:{fieldId:g,size:_,invalid:p},children:/* @__PURE__ */ d(m.Root,{className:e=>t(`flex w-full flex-col items-start gap-2`,n(r,e)),"data-size":_,"data-slot":`number-field`,...c})})}function NumberFieldGroup({className:r,size:i,asChild:a,children:o,...s}){let c=l(h);if(!c)throw Error(`NumberFieldGroup must be used within a NumberField component.`);let u=i??c.size;return/* @__PURE__ */ d(m.Group,{className:e=>t(g({size:u}),n(r,e)),"data-slot":`number-field-group`,...s,...e(a,o)})}function NumberFieldDecrement({className:r,size:i,children:a,asChild:s,...c}){let u=l(h);if(!u)throw Error(`NumberFieldDecrement must be used within a NumberField component.`);let f=i??u.size;return/* @__PURE__ */ d(m.Decrement,{className:e=>t(_({size:f}),`rounded-s-lg border-e-0`,n(r,e)),"data-slot":`number-field-decrement`,...c,...e(s,a),children:!s&&(a??/* @__PURE__ */ d(o,{}))})}function NumberFieldIncrement({className:r,size:i,children:a,asChild:o,...c}){let u=l(h);if(!u)throw Error(`NumberFieldIncrement must be used within a NumberField component.`);let f=i??u.size;return/* @__PURE__ */ d(m.Increment,{className:e=>t(_({size:f}),`rounded-e-lg border-s-0`,n(r,e)),"data-slot":`number-field-increment`,...c,...e(o,a),children:!o&&(a??/* @__PURE__ */ d(s,{}))})}function NumberFieldInput({id:e,className:r,size:i,...a}){let o=l(h);if(!o)throw Error(`NumberFieldInput must be used within a NumberField component.`);let s=i??o.size;return/* @__PURE__ */ d(m.Input,{id:e??o.fieldId,"aria-invalid":o.invalid,className:e=>t(v({size:s}),n(r,e)),"data-slot":`number-field-input`,...a})}function NumberFieldScrubArea({className:e,label:i,...a}){let o=l(h);if(!o)throw Error(`NumberFieldScrubArea must be used within a NumberField component for accessibility.`);return/* @__PURE__ */ f(m.ScrubArea,{className:r=>t(`flex cursor-ew-resize`,n(e,r)),"data-slot":`number-field-scrub-area`,...a,children:[/* @__PURE__ */ d(r,{className:`cursor-ew-resize`,htmlFor:o.fieldId,children:i}),/* @__PURE__ */ d(m.ScrubAreaCursor,{className:`drop-shadow-[0_1px_1px_#0008] filter`,children:/* @__PURE__ */ d(CursorGrowIcon,{})})]})}function CursorGrowIcon(e){return/* @__PURE__ */ d(`svg`,{"aria-hidden":`true`,fill:`black`,height:`14`,stroke:`white`,viewBox:`0 0 24 14`,width:`26`,xmlns:`http://www.w3.org/2000/svg`,...e,children:/* @__PURE__ */ d(`path`,{d:`M19.5 5.5L6.49737 5.51844V2L1 6.9999L6.5 12L6.49737 8.5L19.5 8.5V12L25 6.9999L19.5 2V5.5Z`})})}export{NumberField,NumberFieldDecrement,NumberFieldGroup,NumberFieldIncrement,NumberFieldInput,NumberFieldScrubArea};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{toAsChildRenderProps as e}from"../lib/as-child.js";import{cn as t}from"../lib/utils.js";import{t as n}from"../resolve-class-name-BurP8ngI.js";import{useFieldControlId as r,useFieldInvalid as i}from"./field.js";import{Label as a}from"./label.js";import{IconMinus as o,IconPlus as s}from"@tabler/icons-react";import{createContext as c,useContext as l,useId as u}from"react";import{jsx as d,jsxs as f}from"react/jsx-runtime";import{cva as p}from"class-variance-authority";import{NumberField as m}from"@base-ui/react/number-field";const h=c(null),g=p([`relative flex w-full justify-between rounded-lg border border-input bg-transparent transition-colors dark:bg-input/30`,`data-disabled:pointer-events-none data-disabled:opacity-50`,`focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50`,`has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40`],{variants:{size:{sm:`h-7 text-sm`,md:`h-8 text-sm`,lg:`h-9 text-sm`}},defaultVariants:{size:`md`}}),_=p(`relative flex shrink-0 cursor-pointer items-center justify-center transition-colors pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 hover:bg-accent`,{variants:{size:{sm:`px-1.5 [&_svg:not([class*='size-'])]:size-3.5`,md:`px-2 [&_svg:not([class*='size-'])]:size-4`,lg:`px-2.5 [&_svg:not([class*='size-'])]:size-4`}},defaultVariants:{size:`md`}}),v=p(`w-full min-w-0 flex-1 bg-transparent text-center tabular-nums outline-none`,{variants:{size:{sm:`px-2 py-0.5`,md:`px-2.5 py-1`,lg:`px-2.5 py-1.5`}},defaultVariants:{size:`md`}});function NumberField({id:e,className:a,size:o=`md`,"aria-invalid":s,...c}){let l=u(),f=r(e),p=i(s),g=f??l,_=o??`md`;return/* @__PURE__ */ d(h.Provider,{value:{fieldId:g,size:_,invalid:p},children:/* @__PURE__ */ d(m.Root,{className:e=>t(`flex w-full flex-col items-start gap-2`,n(a,e)),"data-size":_,"data-slot":`number-field`,...c})})}function NumberFieldGroup({className:r,size:i,asChild:a,children:o,...s}){let c=l(h);if(!c)throw Error(`NumberFieldGroup must be used within a NumberField component.`);let u=i??c.size;return/* @__PURE__ */ d(m.Group,{className:e=>t(g({size:u}),n(r,e)),"data-slot":`number-field-group`,...s,...e(a,o)})}function NumberFieldDecrement({className:r,size:i,children:a,asChild:s,...c}){let u=l(h);if(!u)throw Error(`NumberFieldDecrement must be used within a NumberField component.`);let f=i??u.size;return/* @__PURE__ */ d(m.Decrement,{className:e=>t(_({size:f}),`rounded-s-lg border-e-0`,n(r,e)),"data-slot":`number-field-decrement`,...c,...e(s,a),children:!s&&(a??/* @__PURE__ */ d(o,{}))})}function NumberFieldIncrement({className:r,size:i,children:a,asChild:o,...c}){let u=l(h);if(!u)throw Error(`NumberFieldIncrement must be used within a NumberField component.`);let f=i??u.size;return/* @__PURE__ */ d(m.Increment,{className:e=>t(_({size:f}),`rounded-e-lg border-s-0`,n(r,e)),"data-slot":`number-field-increment`,...c,...e(o,a),children:!o&&(a??/* @__PURE__ */ d(s,{}))})}function NumberFieldInput({id:e,className:r,size:i,...a}){let o=l(h);if(!o)throw Error(`NumberFieldInput must be used within a NumberField component.`);let s=i??o.size;return/* @__PURE__ */ d(m.Input,{id:e??o.fieldId,"aria-invalid":o.invalid,className:e=>t(v({size:s}),n(r,e)),"data-slot":`number-field-input`,...a})}function NumberFieldScrubArea({className:e,label:r,...i}){let o=l(h);if(!o)throw Error(`NumberFieldScrubArea must be used within a NumberField component for accessibility.`);return/* @__PURE__ */ f(m.ScrubArea,{className:r=>t(`flex cursor-ew-resize`,n(e,r)),"data-slot":`number-field-scrub-area`,...i,children:[/* @__PURE__ */ d(a,{className:`cursor-ew-resize`,htmlFor:o.fieldId,children:r}),/* @__PURE__ */ d(m.ScrubAreaCursor,{className:`drop-shadow-[0_1px_1px_#0008] filter`,children:/* @__PURE__ */ d(CursorGrowIcon,{})})]})}function CursorGrowIcon(e){return/* @__PURE__ */ d(`svg`,{"aria-hidden":`true`,fill:`black`,height:`14`,stroke:`white`,viewBox:`0 0 24 14`,width:`26`,xmlns:`http://www.w3.org/2000/svg`,...e,children:/* @__PURE__ */ d(`path`,{d:`M19.5 5.5L6.49737 5.51844V2L1 6.9999L6.5 12L6.49737 8.5L19.5 8.5V12L25 6.9999L19.5 2V5.5Z`})})}export{NumberField,NumberFieldDecrement,NumberFieldGroup,NumberFieldIncrement,NumberFieldInput,NumberFieldScrubArea};
2
2
  //# sourceMappingURL=number-field.js.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Button as t}from"./button.js";import{useFieldInvalid as n}from"./field.js";import{Input as r}from"./input.js";import{Combobox as i,ComboboxContent as a,ComboboxEmpty as o,ComboboxInput as s,ComboboxItem as c,ComboboxList as l,ComboboxSeparator as u,ComboboxTrigger as d,ComboboxValue as f}from"./combobox.js";import{ScrollArea as p}from"./scroll-area.js";import{IconWorld as m}from"@tabler/icons-react";import{createContext as h,useContext as g,useMemo as _,useState as v}from"react";import{jsx as y,jsxs as b}from"react/jsx-runtime";import*as x from"react-phone-number-input";import S from"react-phone-number-input/flags";const C=h({popupClassName:void 0,scrollAreaClassName:void 0});function PhoneInput({className:t,popupClassName:r,scrollAreaClassName:i,onChange:a,value:o,...s}){let c=n(s[`aria-invalid`]);return/* @__PURE__ */ y(C.Provider,{value:{popupClassName:r,scrollAreaClassName:i},children:/* @__PURE__ */ y(x.default,{className:e(`flex`,c&&c!==`false`&&`[&_*[data-slot=combobox-trigger]]:border-destructive [&_*[data-slot=combobox-trigger]]:ring-destructive/50`,t),flagComponent:FlagComponent,countrySelectComponent:CountrySelect,inputComponent:InputComponent,smartCaret:!1,defaultCountry:`BR`,value:o||void 0,onChange:e=>a?.(e||``),...s})})}function InputComponent({className:t,...n}){return/* @__PURE__ */ y(r,{className:e(`rounded-s-none focus:z-1`,t),...n})}function CountrySelect({disabled:n,value:r,options:m,onChange:h}){let{popupClassName:S}=g(C),[w,T]=v(``),E=_(()=>w?m.filter(({label:e})=>e.toLowerCase().includes(w.toLowerCase())):m,[m,w]);return/* @__PURE__ */ b(i,{items:E,value:r||``,onValueChange:e=>{e&&h(e)},children:[/* @__PURE__ */ y(d,{asChild:!0,children:/* @__PURE__ */ b(t,{variant:`outline`,color:`zinc`,className:e(`flex h-8 items-center gap-1 rounded-s-lg rounded-e-none border-e-0 border-input px-2.5 py-0 leading-none dark:bg-input/30`,`hover:bg-transparent focus:z-10 data-pressed:bg-transparent`,n&&`opacity-50`),disabled:n,children:[/* @__PURE__ */ y(`span`,{className:`sr-only`,children:/* @__PURE__ */ y(f,{})}),/* @__PURE__ */ y(FlagComponent,{country:r,countryName:r})]})}),/* @__PURE__ */ b(a,{className:e(`w-xs *:data-[slot=input-group]:bg-transparent`,S),children:[/* @__PURE__ */ y(s,{placeholder:`e.g. United States`,value:w,onChange:e=>T(e.target.value),showTrigger:!1,className:`border-input focus-visible:border-border rounded-none border-0 px-0 py-2.5 shadow-none ring-0! outline-none! focus-visible:ring-0 focus-visible:ring-offset-0`}),/* @__PURE__ */ y(u,{}),/* @__PURE__ */ y(o,{className:`px-4 py-2.5 text-sm`,children:`Nenhum país encontrado.`}),/* @__PURE__ */ y(l,{className:`max-h-none overflow-visible`,children:/* @__PURE__ */ y(`div`,{className:`relative flex max-h-full`,children:/* @__PURE__ */ y(`div`,{className:`flex max-h-[min(calc(var(--available-height)-(--spacing(9))),24rem)] w-full scroll-pt-2 scroll-pb-2 flex-col overscroll-contain`,children:/* @__PURE__ */ y(p,{className:`size-full min-h-0 **:data-[slot=scroll-area-scrollbar]:m-0 **:data-[slot=scroll-area-viewport]:h-full **:data-[slot=scroll-area-viewport]:overscroll-contain`,children:E.map(e=>e.value?/* @__PURE__ */ b(c,{value:e.value,className:`flex items-center gap-2`,children:[/* @__PURE__ */ y(FlagComponent,{country:e.value,countryName:e.label}),/* @__PURE__ */ y(`span`,{className:`flex-1 text-sm`,children:e.label}),/* @__PURE__ */ y(`span`,{className:`text-foreground/50 text-sm`,children:`+${x.getCountryCallingCode(e.value)}`})]},e.value):null)})})})})]})]})}function FlagComponent({country:e,countryName:t}){let n=S[e];return/* @__PURE__ */ y(`span`,{className:`flex h-4 w-4 items-center justify-center [&_svg:not([class*='size-'])]:size-full! [&_svg:not([class*='size-'])]:rounded-[5px]`,children:n?/* @__PURE__ */ y(n,{title:t}):/* @__PURE__ */ y(m,{className:`size-4 opacity-60`})})}export{PhoneInput};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{Button as t}from"./button.js";import{Combobox as n,ComboboxContent as r,ComboboxEmpty as i,ComboboxInput as a,ComboboxItem as o,ComboboxList as s,ComboboxSeparator as c,ComboboxTrigger as l,ComboboxValue as u}from"./combobox.js";import{useFieldInvalid as d}from"./field.js";import{Input as f}from"./input.js";import{ScrollArea as p}from"./scroll-area.js";import{IconWorld as m}from"@tabler/icons-react";import{createContext as h,useContext as g,useMemo as _,useState as v}from"react";import{jsx as y,jsxs as b}from"react/jsx-runtime";import*as x from"react-phone-number-input";import S from"react-phone-number-input/flags";const C=h({popupClassName:void 0,scrollAreaClassName:void 0});function PhoneInput({className:t,popupClassName:n,scrollAreaClassName:r,onChange:i,value:a,...o}){let s=d(o[`aria-invalid`]);return/* @__PURE__ */ y(C.Provider,{value:{popupClassName:n,scrollAreaClassName:r},children:/* @__PURE__ */ y(x.default,{className:e(`flex`,s&&s!==`false`&&`[&_*[data-slot=combobox-trigger]]:border-destructive [&_*[data-slot=combobox-trigger]]:ring-destructive/50`,t),flagComponent:FlagComponent,countrySelectComponent:CountrySelect,inputComponent:InputComponent,smartCaret:!1,defaultCountry:`BR`,value:a||void 0,onChange:e=>i?.(e||``),...o})})}function InputComponent({className:t,...n}){return/* @__PURE__ */ y(f,{className:e(`rounded-s-none focus:z-1`,t),...n})}function CountrySelect({disabled:d,value:f,options:m,onChange:h}){let{popupClassName:S}=g(C),[w,T]=v(``),E=_(()=>w?m.filter(({label:e})=>e.toLowerCase().includes(w.toLowerCase())):m,[m,w]);return/* @__PURE__ */ b(n,{items:E,value:f||``,onValueChange:e=>{e&&h(e)},children:[/* @__PURE__ */ y(l,{asChild:!0,children:/* @__PURE__ */ b(t,{variant:`outline`,color:`zinc`,className:e(`flex h-8 items-center gap-1 rounded-s-lg rounded-e-none border-e-0 border-input px-2.5 py-0 leading-none dark:bg-input/30`,`hover:bg-transparent focus:z-10 data-pressed:bg-transparent`,d&&`opacity-50`),disabled:d,children:[/* @__PURE__ */ y(`span`,{className:`sr-only`,children:/* @__PURE__ */ y(u,{})}),/* @__PURE__ */ y(FlagComponent,{country:f,countryName:f})]})}),/* @__PURE__ */ b(r,{className:e(`w-xs *:data-[slot=input-group]:bg-transparent`,S),children:[/* @__PURE__ */ y(a,{placeholder:`e.g. United States`,value:w,onChange:e=>T(e.target.value),showTrigger:!1,className:`border-input focus-visible:border-border rounded-none border-0 px-0 py-2.5 shadow-none ring-0! outline-none! focus-visible:ring-0 focus-visible:ring-offset-0`}),/* @__PURE__ */ y(c,{}),/* @__PURE__ */ y(i,{className:`px-4 py-2.5 text-sm`,children:`Nenhum país encontrado.`}),/* @__PURE__ */ y(s,{className:`max-h-none overflow-visible`,children:/* @__PURE__ */ y(`div`,{className:`relative flex max-h-full`,children:/* @__PURE__ */ y(`div`,{className:`flex max-h-[min(calc(var(--available-height)-(--spacing(9))),24rem)] w-full scroll-pt-2 scroll-pb-2 flex-col overscroll-contain`,children:/* @__PURE__ */ y(p,{className:`size-full min-h-0 **:data-[slot=scroll-area-scrollbar]:m-0 **:data-[slot=scroll-area-viewport]:h-full **:data-[slot=scroll-area-viewport]:overscroll-contain`,children:E.map(e=>e.value?/* @__PURE__ */ b(o,{value:e.value,className:`flex items-center gap-2`,children:[/* @__PURE__ */ y(FlagComponent,{country:e.value,countryName:e.label}),/* @__PURE__ */ y(`span`,{className:`flex-1 text-sm`,children:e.label}),/* @__PURE__ */ y(`span`,{className:`text-foreground/50 text-sm`,children:`+${x.getCountryCallingCode(e.value)}`})]},e.value):null)})})})})]})]})}function FlagComponent({country:e,countryName:t}){let n=S[e];return/* @__PURE__ */ y(`span`,{className:`flex h-4 w-4 items-center justify-center [&_svg:not([class*='size-'])]:size-full! [&_svg:not([class*='size-'])]:rounded-[5px]`,children:n?/* @__PURE__ */ y(n,{title:t}):/* @__PURE__ */ y(m,{className:`size-4 opacity-60`})})}export{PhoneInput};
2
2
  //# sourceMappingURL=phone-input.js.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{t}from"../resolve-class-name-BurP8ngI.js";import{progressColorVariants as n}from"../lib/progress.js";import{jsx as r}from"react/jsx-runtime";import{cva as i}from"class-variance-authority";import{Progress as a}from"@base-ui/react/progress";const o=i(`relative flex w-full items-center overflow-x-hidden rounded-full bg-muted`,{variants:{size:{sm:`h-0.5`,md:`h-1`,lg:`h-1.5`},color:n},defaultVariants:{size:`md`,color:`primary`}});function Progress({className:n,value:i=null,size:s=`md`,color:c=`primary`,...l}){return/* @__PURE__ */ r(a.Root,{"data-slot":`progress`,"data-size":s,"data-color":c,value:i,...l,children:/* @__PURE__ */ r(a.Track,{"data-slot":`progress-track`,className:r=>e(o({size:s,color:c}),t(n,r)),children:/* @__PURE__ */ r(a.Indicator,{"data-slot":`progress-indicator`,className:`h-full bg-(--progress-color) transition-all`})})})}export{Progress,o as progressVariants};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{progressColorVariants as e}from"../lib/progress.js";import{cn as t}from"../lib/utils.js";import{t as n}from"../resolve-class-name-BurP8ngI.js";import{jsx as r}from"react/jsx-runtime";import{cva as i}from"class-variance-authority";import{Progress as a}from"@base-ui/react/progress";const o=i(`relative flex w-full items-center overflow-x-hidden rounded-full bg-muted`,{variants:{size:{sm:`h-0.5`,md:`h-1`,lg:`h-1.5`},color:e},defaultVariants:{size:`md`,color:`primary`}});function Progress({className:e,value:i=null,size:s=`md`,color:c=`primary`,...l}){return/* @__PURE__ */ r(a.Root,{"data-slot":`progress`,"data-size":s,"data-color":c,value:i,...l,children:/* @__PURE__ */ r(a.Track,{"data-slot":`progress-track`,className:r=>t(o({size:s,color:c}),n(e,r)),children:/* @__PURE__ */ r(a.Indicator,{"data-slot":`progress-indicator`,className:`h-full bg-(--progress-color) transition-all`})})})}export{Progress,o as progressVariants};
2
2
  //# sourceMappingURL=progress.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","names":["ProgressPrimitive","Progress$1","progressVariants","cva","progressColorVariants","props","size","color","cn","resolveClassName","className","state"],"sources":["../../src/components/progress.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { Progress as ProgressPrimitive } from '@base-ui/react/progress'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { progressColorVariants } from '../lib/progress'\nimport { cn } from '../lib/utils'\nimport { resolveClassName } from '../utils/resolve-class-name'\n\nconst progressVariants = cva('relative flex w-full items-center overflow-x-hidden rounded-full bg-muted', {\n variants: {\n size: {\n sm: 'h-0.5',\n md: 'h-1',\n lg: 'h-1.5'\n },\n color: progressColorVariants\n },\n defaultVariants: {\n size: 'md',\n color: 'primary'\n }\n})\n\nexport type ProgressProps = Omit<React.ComponentProps<typeof ProgressPrimitive.Root>, 'render' | 'value'> &\n VariantProps<typeof progressVariants> & {\n /**\n * Progress from `0` to `100`. `null` renders an indeterminate bar.\n * @default null\n */\n value?: number | null\n }\n\nfunction Progress({ className, value = null, size = 'md', color = 'primary', ...props }: ProgressProps) {\n return (\n <ProgressPrimitive.Root data-slot=\"progress\" data-size={size} data-color={color} value={value} {...props}>\n <ProgressPrimitive.Track\n data-slot=\"progress-track\"\n className={(state) => cn(progressVariants({ size, color }), resolveClassName(className, state))}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"h-full bg-(--progress-color) transition-all\"\n />\n </ProgressPrimitive.Track>\n </ProgressPrimitive.Root>\n )\n}\n\nexport { Progress, progressVariants }\n"],"mappings":"A,mUASA,MAAME,EAAmBC,EAAI,4EAA6E,CACxG,SAAU,CACR,KAAM,CACJ,GAAI,QACJ,GAAI,MACJ,GAAI,OACN,EACA,MAAOC,CACT,EACA,gBAAiB,CACf,KAAM,KACN,MAAO,SACT,CACF,CAAC,EAWD,SAAS,SAAS,CAAE,YAAW,QAAQ,KAAM,OAAO,KAAM,QAAQ,UAAW,GAAGC,GAAwB,CACtG,MACE,kBAACL,EAAkB,KAAnB,CAAwB,YAAU,WAAW,YAAWM,EAAM,aAAYC,EAAc,QAAO,GAAIF,EACjG,SAAA,kBAACL,EAAkB,MAAnB,CACE,YAAU,iBACV,UAAY,GAAUQ,EAAGN,EAAiB,CAAE,OAAM,OAAM,CAAC,EAAGO,EAAiBC,EAAWC,CAAK,CAAC,EAE9F,SAAA,kBAACX,EAAkB,UAAnB,CACE,YAAU,qBACV,UAAU,6CACX,CAAA,CACsB,CAAA,CACH,CAAA,CAE5B,C"}
1
+ {"version":3,"file":"progress.js","names":["ProgressPrimitive","resolveClassName","Progress$1","progressVariants","cva","progressColorVariants","props","size","color","cn","className","state"],"sources":["../../src/components/progress.tsx"],"sourcesContent":["import type * as React from 'react'\n\nimport { Progress as ProgressPrimitive } from '@base-ui/react/progress'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { progressColorVariants } from '../lib/progress'\nimport { cn } from '../lib/utils'\nimport { resolveClassName } from '../utils/resolve-class-name'\n\nconst progressVariants = cva('relative flex w-full items-center overflow-x-hidden rounded-full bg-muted', {\n variants: {\n size: {\n sm: 'h-0.5',\n md: 'h-1',\n lg: 'h-1.5'\n },\n color: progressColorVariants\n },\n defaultVariants: {\n size: 'md',\n color: 'primary'\n }\n})\n\nexport type ProgressProps = Omit<React.ComponentProps<typeof ProgressPrimitive.Root>, 'render' | 'value'> &\n VariantProps<typeof progressVariants> & {\n /**\n * Progress from `0` to `100`. `null` renders an indeterminate bar.\n * @default null\n */\n value?: number | null\n }\n\nfunction Progress({ className, value = null, size = 'md', color = 'primary', ...props }: ProgressProps) {\n return (\n <ProgressPrimitive.Root data-slot=\"progress\" data-size={size} data-color={color} value={value} {...props}>\n <ProgressPrimitive.Track\n data-slot=\"progress-track\"\n className={(state) => cn(progressVariants({ size, color }), resolveClassName(className, state))}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"h-full bg-(--progress-color) transition-all\"\n />\n </ProgressPrimitive.Track>\n </ProgressPrimitive.Root>\n )\n}\n\nexport { Progress, progressVariants }\n"],"mappings":"A,wUASA,MAAMG,EAAmBC,EAAI,4EAA6E,CACxG,SAAU,CACR,KAAM,CACJ,GAAI,QACJ,GAAI,MACJ,GAAI,OACN,EACA,MAAOC,CACT,EACA,gBAAiB,CACf,KAAM,KACN,MAAO,SACT,CACF,CAAC,EAWD,SAAS,SAAS,CAAE,YAAW,QAAQ,KAAM,OAAO,KAAM,QAAQ,UAAW,GAAGC,GAAwB,CACtG,MACE,kBAACN,EAAkB,KAAnB,CAAwB,YAAU,WAAW,YAAWO,EAAM,aAAYC,EAAc,QAAO,GAAIF,EACjG,SAAA,kBAACN,EAAkB,MAAnB,CACE,YAAU,iBACV,UAAY,GAAUS,EAAGN,EAAiB,CAAE,OAAM,OAAM,CAAC,EAAGF,EAAiBS,EAAWC,CAAK,CAAC,EAE9F,SAAA,kBAACX,EAAkB,UAAnB,CACE,YAAU,qBACV,UAAU,6CACX,CAAA,CACsB,CAAA,CACH,CAAA,CAE5B,C"}
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{toAsChildRenderProps as e}from"../lib/as-child.js";import{cn as t}from"../lib/utils.js";import{t as n}from"../resolve-class-name-BurP8ngI.js";import{selectionControlColorVariants as r}from"../lib/color.js";import{Label as i}from"./label.js";import{useFieldControlId as a,useFieldInvalid as o,useFieldLabelId as s}from"./field.js";import{createContext as c,useContext as l,useId as u}from"react";import{jsx as d,jsxs as f}from"react/jsx-runtime";import{cva as p}from"class-variance-authority";import{Radio as m}from"@base-ui/react/radio";import{RadioGroup as h}from"@base-ui/react/radio-group";const g=p([`group/radio-group-item peer relative flex aspect-square shrink-0 rounded-full border border-input outline-none`,`after:absolute after:-inset-x-3 after:-inset-y-2`,`focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50`,`data-disabled:cursor-not-allowed data-disabled:opacity-50`,`dark:data-unchecked:bg-input/30`,`data-checked:border-(--selection-control) data-checked:bg-(--selection-control) data-checked:text-(--selection-control-foreground)`],{variants:{color:r,size:{sm:`size-4`,md:`size-4.5`,lg:`size-5.5`}},defaultVariants:{size:`md`}}),_=p(`flex items-center justify-center`,{variants:{size:{sm:`size-4`,md:`size-4.5`,lg:`size-5.5`}},defaultVariants:{size:`md`}}),v=p(`absolute top-1/2 left-1/2 rounded-full bg-primary-foreground`,{variants:{size:{sm:`size-1.5`,md:`size-2`,lg:`size-2.5`}},defaultVariants:{size:`md`}}),y=p(``,{variants:{size:{sm:`text-xs`,md:`text-sm`,lg:`text-lg`}},defaultVariants:{size:`md`}}),b=p(`text-muted-foreground text-left leading-normal font-normal [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary`,{variants:{size:{sm:`text-xs`,md:`text-xs`,lg:`text-sm`}},defaultVariants:{size:`md`}}),x=c(void 0);function RadioGroup({className:i,color:c=`primary`,asChild:l,children:u,"aria-invalid":f,...p}){let m=a(),g=s(),_=o(f);return/* @__PURE__ */ d(x.Provider,{value:m,children:/* @__PURE__ */ d(h,{"data-slot":`radio-group`,"data-color":c,"aria-labelledby":g,"aria-invalid":_,className:e=>t(`grid w-full gap-2`,r[c],n(i,e)),...p,...e(l,u)})})}function RadioGroupItem({className:e,color:r,id:o,label:s,labelProps:c,description:p,descriptionProps:h,size:S=`md`,...C}){let w=u(),T=a(o),E=l(x),D=s!==void 0,O=(o===void 0&&T===E?void 0:T)??(D?w:void 0),{className:k,...A}=c??{},j=u(),M=p!==void 0,{className:N,...P}=h??{},F=M?P.id??j:void 0,I=/* @__PURE__ */ d(m.Root,{"data-slot":`radio-group-item`,"data-color":r,"data-size":S,id:O,"aria-describedby":F,className:i=>t(g({color:r,size:S}),n(e,i)),...C,children:/* @__PURE__ */ d(m.Indicator,{"data-slot":`radio-group-indicator`,className:t(_({size:S})),children:/* @__PURE__ */ d(`span`,{className:t(v({size:S}),`-translate-x-1/2 -translate-y-1/2`)})})});return!D&&!M?I:/* @__PURE__ */ f(`div`,{"data-slot":`radio-group-item-field`,className:`grid grid-cols-[auto_1fr] items-center justify-items-start gap-x-2 gap-y-0.5`,children:[I,D&&/* @__PURE__ */ d(i,{...A,htmlFor:O,className:t(y({size:S}),k),children:s}),M&&/* @__PURE__ */ d(`p`,{"data-slot":`radio-group-item-description`,...P,id:F,className:t(`col-start-2`,b({size:S}),N),children:p})]})}export{RadioGroup,RadioGroupItem};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{toAsChildRenderProps as e}from"../lib/as-child.js";import{selectionControlColorVariants as t}from"../lib/color.js";import{cn as n}from"../lib/utils.js";import{t as r}from"../resolve-class-name-BurP8ngI.js";import{useFieldControlId as i,useFieldInvalid as a,useFieldLabelId as o}from"./field.js";import{Label as s}from"./label.js";import{createContext as c,useContext as l,useId as u}from"react";import{jsx as d,jsxs as f}from"react/jsx-runtime";import{cva as p}from"class-variance-authority";import{Radio as m}from"@base-ui/react/radio";import{RadioGroup as h}from"@base-ui/react/radio-group";const g=p([`group/radio-group-item peer relative flex aspect-square shrink-0 rounded-full border border-input outline-none`,`after:absolute after:-inset-x-3 after:-inset-y-2`,`focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50`,`data-disabled:cursor-not-allowed data-disabled:opacity-50`,`dark:data-unchecked:bg-input/30`,`data-checked:border-(--selection-control) data-checked:bg-(--selection-control) data-checked:text-(--selection-control-foreground)`],{variants:{color:t,size:{sm:`size-4`,md:`size-4.5`,lg:`size-5.5`}},defaultVariants:{size:`md`}}),_=p(`flex items-center justify-center`,{variants:{size:{sm:`size-4`,md:`size-4.5`,lg:`size-5.5`}},defaultVariants:{size:`md`}}),v=p(`absolute top-1/2 left-1/2 rounded-full bg-primary-foreground`,{variants:{size:{sm:`size-1.5`,md:`size-2`,lg:`size-2.5`}},defaultVariants:{size:`md`}}),y=p(``,{variants:{size:{sm:`text-xs`,md:`text-sm`,lg:`text-lg`}},defaultVariants:{size:`md`}}),b=p(`text-muted-foreground text-left leading-normal font-normal [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary`,{variants:{size:{sm:`text-xs`,md:`text-xs`,lg:`text-sm`}},defaultVariants:{size:`md`}}),x=c(void 0);function RadioGroup({className:s,color:c=`primary`,asChild:l,children:u,"aria-invalid":f,...p}){let m=i(),g=o(),_=a(f);return/* @__PURE__ */ d(x.Provider,{value:m,children:/* @__PURE__ */ d(h,{"data-slot":`radio-group`,"data-color":c,"aria-labelledby":g,"aria-invalid":_,className:e=>n(`grid w-full gap-2`,t[c],r(s,e)),...p,...e(l,u)})})}function RadioGroupItem({className:e,color:t,id:a,label:o,labelProps:c,description:p,descriptionProps:h,size:S=`md`,...C}){let w=u(),T=i(a),E=l(x),D=o!==void 0,O=(a===void 0&&T===E?void 0:T)??(D?w:void 0),{className:k,...A}=c??{},j=u(),M=p!==void 0,{className:N,...P}=h??{},F=M?P.id??j:void 0,I=/* @__PURE__ */ d(m.Root,{"data-slot":`radio-group-item`,"data-color":t,"data-size":S,id:O,"aria-describedby":F,className:i=>n(g({color:t,size:S}),r(e,i)),...C,children:/* @__PURE__ */ d(m.Indicator,{"data-slot":`radio-group-indicator`,className:n(_({size:S})),children:/* @__PURE__ */ d(`span`,{className:n(v({size:S}),`-translate-x-1/2 -translate-y-1/2`)})})});return!D&&!M?I:/* @__PURE__ */ f(`div`,{"data-slot":`radio-group-item-field`,className:`grid grid-cols-[auto_1fr] items-center justify-items-start gap-x-2 gap-y-0.5`,children:[I,D&&/* @__PURE__ */ d(s,{...A,htmlFor:O,className:n(y({size:S}),k),children:o}),M&&/* @__PURE__ */ d(`p`,{"data-slot":`radio-group-item-description`,...P,id:F,className:n(`col-start-2`,b({size:S}),N),children:p})]})}export{RadioGroup,RadioGroupItem};
2
2
  //# sourceMappingURL=radio-group.js.map
@@ -1,2 +1,2 @@
1
- import"../rolldown-runtime-BhWHdk3m.js";import{cn as e}from"../lib/utils.js";import{progressColorVariants as t}from"../lib/progress.js";import{jsx as n,jsxs as r}from"react/jsx-runtime";import{cva as i}from"class-variance-authority";const a=i(`shrink-0`,{variants:{size:{sm:`size-8`,md:`size-10`,lg:`size-12`},color:t},defaultVariants:{size:`md`,color:`primary`}}),o={thin:8,md:12,thick:16};function RingProgress({className:t,value:i=0,size:s=`md`,color:c=`primary`,thickness:l=`md`,...u}){let d=o[l],f=(100-d)/2,p=2*Math.PI*f,m=Math.min(100,Math.max(0,i)),h=p*(1-m/100);return/* @__PURE__ */ r(`svg`,{"data-slot":`ring-progress`,"data-size":s,"data-color":c,"data-thickness":l,role:`progressbar`,"aria-valuenow":m,"aria-valuemin":0,"aria-valuemax":100,viewBox:`0 0 100 100`,className:e(a({size:s,color:c}),t),...u,children:[/* @__PURE__ */ n(`circle`,{cx:`50`,cy:`50`,r:f,fill:`none`,strokeWidth:d,className:`stroke-muted`}),/* @__PURE__ */ n(`circle`,{cx:`50`,cy:`50`,r:f,fill:`none`,strokeWidth:d,strokeLinecap:`round`,strokeDasharray:p,strokeDashoffset:h,transform:`rotate(-90 50 50)`,className:`stroke-(--progress-color) transition-all`})]})}export{RingProgress,a as ringProgressVariants};
1
+ import"../rolldown-runtime-BhWHdk3m.js";import{progressColorVariants as e}from"../lib/progress.js";import{cn as t}from"../lib/utils.js";import{jsx as n,jsxs as r}from"react/jsx-runtime";import{cva as i}from"class-variance-authority";const a=i(`shrink-0`,{variants:{size:{sm:`size-8`,md:`size-10`,lg:`size-12`},color:e},defaultVariants:{size:`md`,color:`primary`}}),o={thin:8,md:12,thick:16};function RingProgress({className:e,value:i=0,size:s=`md`,color:c=`primary`,thickness:l=`md`,...u}){let d=o[l],f=(100-d)/2,p=2*Math.PI*f,m=Math.min(100,Math.max(0,i)),h=p*(1-m/100);return/* @__PURE__ */ r(`svg`,{"data-slot":`ring-progress`,"data-size":s,"data-color":c,"data-thickness":l,role:`progressbar`,"aria-valuenow":m,"aria-valuemin":0,"aria-valuemax":100,viewBox:`0 0 100 100`,className:t(a({size:s,color:c}),e),...u,children:[/* @__PURE__ */ n(`circle`,{cx:`50`,cy:`50`,r:f,fill:`none`,strokeWidth:d,className:`stroke-muted`}),/* @__PURE__ */ n(`circle`,{cx:`50`,cy:`50`,r:f,fill:`none`,strokeWidth:d,strokeLinecap:`round`,strokeDasharray:p,strokeDashoffset:h,transform:`rotate(-90 50 50)`,className:`stroke-(--progress-color) transition-all`})]})}export{RingProgress,a as ringProgressVariants};
2
2
  //# sourceMappingURL=ring-progress.js.map
@@ -1,8 +1,8 @@
1
1
  import { t as __name } from "../rolldown-runtime-BhWHdk3m.js";
2
2
  import { n as AsChildProps } from "../as-child-T9W73ZYU.js";
3
3
  import { Button } from "./button.js";
4
- import { Separator } from "./separator.js";
5
4
  import { Input } from "./input.js";
5
+ import { Separator } from "./separator.js";
6
6
  import { TooltipContent } from "./tooltip.js";
7
7
  import * as React from "react";
8
8
  import { VariantProps } from "class-variance-authority";