asterui 0.12.24 → 0.12.26

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index62.js","sources":["../src/components/Pagination.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface PaginationProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n current?: number\n defaultCurrent?: number\n total: number\n pageSize?: number\n defaultPageSize?: number\n pageSizeOptions?: number[]\n onChange?: (page: number, pageSize: number) => void\n onShowSizeChange?: (current: number, size: number) => void\n showSizeChanger?: boolean\n showQuickJumper?: boolean\n showTotal?: boolean | ((total: number, range: [number, number]) => React.ReactNode)\n simple?: boolean\n size?: 'xs' | 'sm' | 'md' | 'lg'\n disabled?: boolean\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n current: controlledCurrent,\n defaultCurrent = 1,\n total,\n pageSize: controlledPageSize,\n defaultPageSize = 10,\n pageSizeOptions = [10, 20, 50, 100],\n onChange,\n onShowSizeChange,\n showSizeChanger = false,\n showQuickJumper = false,\n showTotal = false,\n simple = false,\n size = 'md',\n disabled = false,\n className = '',\n ...rest\n}) => {\n const [internalCurrent, setInternalCurrent] = React.useState(defaultCurrent)\n const [internalPageSize, setInternalPageSize] = React.useState(defaultPageSize)\n const [jumpPage, setJumpPage] = React.useState('')\n\n const current = controlledCurrent !== undefined ? controlledCurrent : internalCurrent\n const pageSize = controlledPageSize !== undefined ? controlledPageSize : internalPageSize\n const totalPages = Math.ceil(total / pageSize)\n\n const handlePageChange = (page: number) => {\n if (page < 1 || page > totalPages || disabled) return\n\n if (controlledCurrent === undefined) {\n setInternalCurrent(page)\n }\n onChange?.(page, pageSize)\n }\n\n const handlePageSizeChange = (newSize: number) => {\n const newTotalPages = Math.ceil(total / newSize)\n const newCurrent = current > newTotalPages ? newTotalPages : current\n\n if (controlledPageSize === undefined) {\n setInternalPageSize(newSize)\n }\n if (controlledCurrent === undefined && newCurrent !== current) {\n setInternalCurrent(newCurrent)\n }\n\n onShowSizeChange?.(newCurrent, newSize)\n onChange?.(newCurrent, newSize)\n }\n\n const handleJumpPage = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n const page = parseInt(jumpPage)\n if (!isNaN(page) && page >= 1 && page <= totalPages) {\n handlePageChange(page)\n setJumpPage('')\n }\n }\n }\n\n const getPageNumbers = (): (number | 'ellipsis')[] => {\n const pages: (number | 'ellipsis')[] = []\n const showPages = 7\n\n if (totalPages <= showPages) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i)\n }\n } else {\n if (current <= 3) {\n for (let i = 1; i <= 5; i++) {\n pages.push(i)\n }\n pages.push('ellipsis')\n pages.push(totalPages)\n } else if (current >= totalPages - 2) {\n pages.push(1)\n pages.push('ellipsis')\n for (let i = totalPages - 4; i <= totalPages; i++) {\n pages.push(i)\n }\n } else {\n pages.push(1)\n pages.push('ellipsis')\n for (let i = current - 1; i <= current + 1; i++) {\n pages.push(i)\n }\n pages.push('ellipsis')\n pages.push(totalPages)\n }\n }\n\n return pages\n }\n\n const sizeClass = {\n xs: 'btn-xs',\n sm: 'btn-sm',\n md: '',\n lg: 'btn-lg',\n }[size]\n\n const range: [number, number] = [\n (current - 1) * pageSize + 1,\n Math.min(current * pageSize, total),\n ]\n\n if (simple) {\n return (\n <div className={`flex items-center gap-2 ${className}`} {...rest}>\n <button\n className={`btn btn-ghost ${sizeClass}`}\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current === 1}\n >\n ‹\n </button>\n <span className=\"text-sm\">\n {current} / {totalPages}\n </span>\n <button\n className={`btn btn-ghost ${sizeClass}`}\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current === totalPages}\n >\n ›\n </button>\n </div>\n )\n }\n\n return (\n <div className={`flex flex-wrap items-center gap-4 ${className}`} {...rest}>\n {/* Total */}\n {showTotal && (\n <div className=\"text-sm text-base-content/70\">\n {typeof showTotal === 'function'\n ? showTotal(total, range)\n : `Total ${total} items`}\n </div>\n )}\n\n {/* Page Size Changer */}\n {showSizeChanger && (\n <select\n className={`select select-bordered ${sizeClass}`}\n value={pageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n disabled={disabled}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size} / page\n </option>\n ))}\n </select>\n )}\n\n {/* Pagination Controls */}\n <div className=\"join\">\n {/* First */}\n <button\n className={`join-item btn ${sizeClass}`}\n onClick={() => handlePageChange(1)}\n disabled={disabled || current === 1}\n title=\"First page\"\n >\n «\n </button>\n\n {/* Previous */}\n <button\n className={`join-item btn ${sizeClass}`}\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current === 1}\n title=\"Previous page\"\n >\n ‹\n </button>\n\n {/* Page Numbers */}\n {getPageNumbers().map((page, index) => {\n if (page === 'ellipsis') {\n return (\n <button key={`ellipsis-${index}`} className={`join-item btn btn-disabled ${sizeClass}`}>\n ...\n </button>\n )\n }\n\n return (\n <button\n key={page}\n className={`join-item btn ${sizeClass} ${current === page ? 'btn-active' : ''}`}\n onClick={() => handlePageChange(page)}\n disabled={disabled}\n >\n {page}\n </button>\n )\n })}\n\n {/* Next */}\n <button\n className={`join-item btn ${sizeClass}`}\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current === totalPages}\n title=\"Next page\"\n >\n ›\n </button>\n\n {/* Last */}\n <button\n className={`join-item btn ${sizeClass}`}\n onClick={() => handlePageChange(totalPages)}\n disabled={disabled || current === totalPages}\n title=\"Last page\"\n >\n »\n </button>\n </div>\n\n {/* Quick Jumper */}\n {showQuickJumper && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">Go to</span>\n <input\n type=\"number\"\n className={`input input-bordered w-16 ${sizeClass}`}\n min={1}\n max={totalPages}\n value={jumpPage}\n onChange={(e) => setJumpPage(e.target.value)}\n onKeyDown={handleJumpPage}\n disabled={disabled}\n placeholder={String(current)}\n />\n </div>\n )}\n </div>\n )\n}\n"],"names":["Pagination","controlledCurrent","defaultCurrent","total","controlledPageSize","defaultPageSize","pageSizeOptions","onChange","onShowSizeChange","showSizeChanger","showQuickJumper","showTotal","simple","size","disabled","className","rest","internalCurrent","setInternalCurrent","React","internalPageSize","setInternalPageSize","jumpPage","setJumpPage","current","pageSize","totalPages","handlePageChange","page","handlePageSizeChange","newSize","newTotalPages","newCurrent","handleJumpPage","getPageNumbers","pages","i","sizeClass","range","jsx","jsxs","index"],"mappings":";;AAmBO,MAAMA,IAAwC,CAAC;AAAA,EACpD,SAASC;AAAA,EACT,gBAAAC,IAAiB;AAAA,EACjB,OAAAC;AAAA,EACA,UAAUC;AAAA,EACV,iBAAAC,IAAkB;AAAA,EAClB,iBAAAC,IAAkB,CAAC,IAAI,IAAI,IAAI,GAAG;AAAA,EAClC,UAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,iBAAAC,IAAkB;AAAA,EAClB,WAAAC,IAAY;AAAA,EACZ,QAAAC,IAAS;AAAA,EACT,MAAAC,IAAO;AAAA,EACP,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAM,CAACC,GAAiBC,CAAkB,IAAIC,EAAM,SAASjB,CAAc,GACrE,CAACkB,GAAkBC,CAAmB,IAAIF,EAAM,SAASd,CAAe,GACxE,CAACiB,GAAUC,CAAW,IAAIJ,EAAM,SAAS,EAAE,GAE3CK,IAAUvB,MAAsB,SAAYA,IAAoBgB,GAChEQ,IAAWrB,MAAuB,SAAYA,IAAqBgB,GACnEM,IAAa,KAAK,KAAKvB,IAAQsB,CAAQ,GAEvCE,IAAmB,CAACC,MAAiB;AACzC,IAAIA,IAAO,KAAKA,IAAOF,KAAcZ,MAEjCb,MAAsB,UACxBiB,EAAmBU,CAAI,GAEzBrB,IAAWqB,GAAMH,CAAQ;AAAA,EAC3B,GAEMI,IAAuB,CAACC,MAAoB;AAChD,UAAMC,IAAgB,KAAK,KAAK5B,IAAQ2B,CAAO,GACzCE,IAAaR,IAAUO,IAAgBA,IAAgBP;AAE7D,IAAIpB,MAAuB,UACzBiB,EAAoBS,CAAO,GAEzB7B,MAAsB,UAAa+B,MAAeR,KACpDN,EAAmBc,CAAU,GAG/BxB,IAAmBwB,GAAYF,CAAO,GACtCvB,IAAWyB,GAAYF,CAAO;AAAA,EAChC,GAEMG,IAAiB,CAAC,MAA6C;AACnE,QAAI,EAAE,QAAQ,SAAS;AACrB,YAAML,IAAO,SAASN,CAAQ;AAC9B,MAAI,CAAC,MAAMM,CAAI,KAAKA,KAAQ,KAAKA,KAAQF,MACvCC,EAAiBC,CAAI,GACrBL,EAAY,EAAE;AAAA,IAElB;AAAA,EACF,GAEMW,IAAiB,MAA+B;AACpD,UAAMC,IAAiC,CAAA;AAGvC,QAAIT,KAAc;AAChB,eAASU,IAAI,GAAGA,KAAKV,GAAYU;AAC/B,QAAAD,EAAM,KAAKC,CAAC;AAAA,aAGVZ,KAAW,GAAG;AAChB,eAASY,IAAI,GAAGA,KAAK,GAAGA;AACtB,QAAAD,EAAM,KAAKC,CAAC;AAEd,MAAAD,EAAM,KAAK,UAAU,GACrBA,EAAM,KAAKT,CAAU;AAAA,IACvB,WAAWF,KAAWE,IAAa,GAAG;AACpC,MAAAS,EAAM,KAAK,CAAC,GACZA,EAAM,KAAK,UAAU;AACrB,eAASC,IAAIV,IAAa,GAAGU,KAAKV,GAAYU;AAC5C,QAAAD,EAAM,KAAKC,CAAC;AAAA,IAEhB,OAAO;AACL,MAAAD,EAAM,KAAK,CAAC,GACZA,EAAM,KAAK,UAAU;AACrB,eAASC,IAAIZ,IAAU,GAAGY,KAAKZ,IAAU,GAAGY;AAC1C,QAAAD,EAAM,KAAKC,CAAC;AAEd,MAAAD,EAAM,KAAK,UAAU,GACrBA,EAAM,KAAKT,CAAU;AAAA,IACvB;AAGF,WAAOS;AAAA,EACT,GAEME,IAAY;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,EACJxB,CAAI,GAEAyB,IAA0B;AAAA,KAC7Bd,IAAU,KAAKC,IAAW;AAAA,IAC3B,KAAK,IAAID,IAAUC,GAAUtB,CAAK;AAAA,EAAA;AAGpC,SAAIS,sBAEC,OAAA,EAAI,WAAW,2BAA2BG,CAAS,IAAK,GAAGC,GAC1D,UAAA;AAAA,IAAA,gBAAAuB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,iBAAiBF,CAAS;AAAA,QACrC,SAAS,MAAMV,EAAiBH,IAAU,CAAC;AAAA,QAC3C,UAAUV,KAAYU,MAAY;AAAA,QACnC,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGD,gBAAAgB,EAAC,QAAA,EAAK,WAAU,WACb,UAAA;AAAA,MAAAhB;AAAA,MAAQ;AAAA,MAAIE;AAAA,IAAA,GACf;AAAA,IACA,gBAAAa;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,iBAAiBF,CAAS;AAAA,QACrC,SAAS,MAAMV,EAAiBH,IAAU,CAAC;AAAA,QAC3C,UAAUV,KAAYU,MAAYE;AAAA,QACnC,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAED,GACF,sBAKD,OAAA,EAAI,WAAW,qCAAqCX,CAAS,IAAK,GAAGC,GAEnE,UAAA;AAAA,IAAAL,KACC,gBAAA4B,EAAC,OAAA,EAAI,WAAU,gCACZ,UAAA,OAAO5B,KAAc,aAClBA,EAAUR,GAAOmC,CAAK,IACtB,SAASnC,CAAK,UACpB;AAAA,IAIDM,KACC,gBAAA8B;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,0BAA0BF,CAAS;AAAA,QAC9C,OAAOZ;AAAA,QACP,UAAU,CAAC,MAAMI,EAAqB,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,QAC5D,UAAAf;AAAA,QAEC,YAAgB,IAAI,CAACD,MACpB,gBAAA2B,EAAC,UAAA,EAAkB,OAAO3B,GACvB,UAAA;AAAA,UAAAA;AAAAA,UAAK;AAAA,QAAA,EAAA,GADKA,CAEb,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,IAKL,gBAAA2B,EAAC,OAAA,EAAI,WAAU,QAEb,UAAA;AAAA,MAAA,gBAAAD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW,iBAAiBF,CAAS;AAAA,UACrC,SAAS,MAAMV,EAAiB,CAAC;AAAA,UACjC,UAAUb,KAAYU,MAAY;AAAA,UAClC,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAKD,gBAAAe;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW,iBAAiBF,CAAS;AAAA,UACrC,SAAS,MAAMV,EAAiBH,IAAU,CAAC;AAAA,UAC3C,UAAUV,KAAYU,MAAY;AAAA,UAClC,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAKAU,IAAiB,IAAI,CAACN,GAAMa,MACvBb,MAAS,aAET,gBAAAW,EAAC,YAAiC,WAAW,8BAA8BF,CAAS,IAAI,UAAA,MAAA,GAA3E,YAAYI,CAAK,EAE9B,IAKF,gBAAAF;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAW,iBAAiBF,CAAS,IAAIb,MAAYI,IAAO,eAAe,EAAE;AAAA,UAC7E,SAAS,MAAMD,EAAiBC,CAAI;AAAA,UACpC,UAAAd;AAAA,UAEC,UAAAc;AAAA,QAAA;AAAA,QALIA;AAAA,MAAA,CAQV;AAAA,MAGD,gBAAAW;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW,iBAAiBF,CAAS;AAAA,UACrC,SAAS,MAAMV,EAAiBH,IAAU,CAAC;AAAA,UAC3C,UAAUV,KAAYU,MAAYE;AAAA,UAClC,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAKD,gBAAAa;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW,iBAAiBF,CAAS;AAAA,UACrC,SAAS,MAAMV,EAAiBD,CAAU;AAAA,UAC1C,UAAUZ,KAAYU,MAAYE;AAAA,UAClC,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,GACF;AAAA,IAGChB,KACC,gBAAA8B,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,MAAA,gBAAAD,EAAC,QAAA,EAAK,WAAU,WAAU,UAAA,SAAK;AAAA,MAC/B,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAW,6BAA6BF,CAAS;AAAA,UACjD,KAAK;AAAA,UACL,KAAKX;AAAA,UACL,OAAOJ;AAAA,UACP,UAAU,CAAC,MAAMC,EAAY,EAAE,OAAO,KAAK;AAAA,UAC3C,WAAWU;AAAA,UACX,UAAAnB;AAAA,UACA,aAAa,OAAOU,CAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAC7B,EAAA,CACF;AAAA,EAAA,GAEJ;AAEJ;"}
1
+ {"version":3,"file":"index62.js","sources":["../src/components/Pagination.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface PaginationProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n current?: number\n defaultCurrent?: number\n total: number\n pageSize?: number\n defaultPageSize?: number\n pageSizeOptions?: number[]\n onChange?: (page: number, pageSize: number) => void\n onShowSizeChange?: (current: number, size: number) => void\n showSizeChanger?: boolean\n showQuickJumper?: boolean\n showTotal?: boolean | ((total: number, range: [number, number]) => React.ReactNode)\n simple?: boolean\n size?: 'xs' | 'sm' | 'md' | 'lg'\n disabled?: boolean\n}\n\nexport const Pagination: React.FC<PaginationProps> = ({\n current: controlledCurrent,\n defaultCurrent = 1,\n total,\n pageSize: controlledPageSize,\n defaultPageSize = 10,\n pageSizeOptions = [10, 20, 50, 100],\n onChange,\n onShowSizeChange,\n showSizeChanger = false,\n showQuickJumper = false,\n showTotal = false,\n simple = false,\n size = 'md',\n disabled = false,\n className = '',\n ...rest\n}) => {\n const [internalCurrent, setInternalCurrent] = React.useState(defaultCurrent)\n const [internalPageSize, setInternalPageSize] = React.useState(defaultPageSize)\n const [jumpPage, setJumpPage] = React.useState('')\n\n const current = controlledCurrent !== undefined ? controlledCurrent : internalCurrent\n const pageSize = controlledPageSize !== undefined ? controlledPageSize : internalPageSize\n const totalPages = Math.ceil(total / pageSize)\n\n const handlePageChange = (page: number) => {\n if (page < 1 || page > totalPages || disabled) return\n\n if (controlledCurrent === undefined) {\n setInternalCurrent(page)\n }\n onChange?.(page, pageSize)\n }\n\n const handlePageSizeChange = (newSize: number) => {\n const newTotalPages = Math.ceil(total / newSize)\n const newCurrent = current > newTotalPages ? newTotalPages : current\n\n if (controlledPageSize === undefined) {\n setInternalPageSize(newSize)\n }\n if (controlledCurrent === undefined && newCurrent !== current) {\n setInternalCurrent(newCurrent)\n }\n\n onShowSizeChange?.(newCurrent, newSize)\n onChange?.(newCurrent, newSize)\n }\n\n const handleJumpPage = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n const page = parseInt(jumpPage)\n if (!isNaN(page) && page >= 1 && page <= totalPages) {\n handlePageChange(page)\n setJumpPage('')\n }\n }\n }\n\n const getPageNumbers = (): (number | 'ellipsis')[] => {\n const pages: (number | 'ellipsis')[] = []\n const showPages = 7\n\n if (totalPages <= showPages) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i)\n }\n } else {\n if (current <= 3) {\n for (let i = 1; i <= 5; i++) {\n pages.push(i)\n }\n pages.push('ellipsis')\n pages.push(totalPages)\n } else if (current >= totalPages - 2) {\n pages.push(1)\n pages.push('ellipsis')\n for (let i = totalPages - 4; i <= totalPages; i++) {\n pages.push(i)\n }\n } else {\n pages.push(1)\n pages.push('ellipsis')\n for (let i = current - 1; i <= current + 1; i++) {\n pages.push(i)\n }\n pages.push('ellipsis')\n pages.push(totalPages)\n }\n }\n\n return pages\n }\n\n const sizeClass = {\n xs: 'btn-xs',\n sm: 'btn-sm',\n md: '',\n lg: 'btn-lg',\n }[size]\n\n const range: [number, number] = [\n (current - 1) * pageSize + 1,\n Math.min(current * pageSize, total),\n ]\n\n if (simple) {\n return (\n <div className={`flex items-center gap-2 ${className}`} {...rest}>\n <button\n className={`btn btn-ghost ${sizeClass}`}\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current === 1}\n >\n ‹\n </button>\n <span className=\"text-sm\">\n {current} / {totalPages}\n </span>\n <button\n className={`btn btn-ghost ${sizeClass}`}\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current === totalPages}\n >\n ›\n </button>\n </div>\n )\n }\n\n return (\n <div className={`flex flex-wrap items-center gap-4 ${className}`} {...rest}>\n {/* Total */}\n {showTotal && (\n <div className=\"text-sm text-base-content/70\">\n {typeof showTotal === 'function'\n ? showTotal(total, range)\n : `Total ${total} items`}\n </div>\n )}\n\n {/* Page Size Changer */}\n {showSizeChanger && (\n <select\n className={`select select-bordered ${sizeClass}`}\n value={pageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n disabled={disabled}\n >\n {pageSizeOptions.map((size) => (\n <option key={size} value={size}>\n {size} / page\n </option>\n ))}\n </select>\n )}\n\n {/* Pagination Controls */}\n <div className=\"join\">\n {/* First */}\n <button\n className={`join-item btn ${sizeClass}`}\n onClick={() => handlePageChange(1)}\n disabled={disabled || current === 1}\n title=\"First page\"\n >\n «\n </button>\n\n {/* Previous */}\n <button\n className={`join-item btn ${sizeClass}`}\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current === 1}\n title=\"Previous page\"\n >\n ‹\n </button>\n\n {/* Page Numbers */}\n {getPageNumbers().map((page, index) => {\n if (page === 'ellipsis') {\n return (\n <button key={`ellipsis-${index}`} className={`join-item btn btn-disabled ${sizeClass}`}>\n ...\n </button>\n )\n }\n\n return (\n <button\n key={page}\n className={`join-item btn ${sizeClass} ${current === page ? 'btn-active' : ''}`}\n onClick={() => handlePageChange(page)}\n disabled={disabled}\n >\n {page}\n </button>\n )\n })}\n\n {/* Next */}\n <button\n className={`join-item btn ${sizeClass}`}\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current === totalPages}\n title=\"Next page\"\n >\n ›\n </button>\n\n {/* Last */}\n <button\n className={`join-item btn ${sizeClass}`}\n onClick={() => handlePageChange(totalPages)}\n disabled={disabled || current === totalPages}\n title=\"Last page\"\n >\n »\n </button>\n </div>\n\n {/* Quick Jumper */}\n {showQuickJumper && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">Go to</span>\n <input\n type=\"number\"\n className={`input w-16 ${sizeClass}`}\n min={1}\n max={totalPages}\n value={jumpPage}\n onChange={(e) => setJumpPage(e.target.value)}\n onKeyDown={handleJumpPage}\n disabled={disabled}\n placeholder={String(current)}\n />\n </div>\n )}\n </div>\n )\n}\n"],"names":["Pagination","controlledCurrent","defaultCurrent","total","controlledPageSize","defaultPageSize","pageSizeOptions","onChange","onShowSizeChange","showSizeChanger","showQuickJumper","showTotal","simple","size","disabled","className","rest","internalCurrent","setInternalCurrent","React","internalPageSize","setInternalPageSize","jumpPage","setJumpPage","current","pageSize","totalPages","handlePageChange","page","handlePageSizeChange","newSize","newTotalPages","newCurrent","handleJumpPage","getPageNumbers","pages","i","sizeClass","range","jsx","jsxs","index"],"mappings":"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"}
package/dist/index85.js CHANGED
@@ -1,98 +1,210 @@
1
- import { jsxs as g, jsx as a } from "react/jsx-runtime";
2
- import { useState as C } from "react";
3
- const v = ({
4
- closable: s = !1,
5
- closeIcon: t,
6
- onClose: n,
7
- color: e,
8
- icon: r,
9
- size: o = "md",
10
- children: l,
11
- className: i = "",
12
- ...b
13
- }) => {
14
- const [m, u] = C(!0), h = () => {
15
- u(!1), n?.();
16
- };
17
- if (!m) return null;
18
- const d = () => {
19
- if (!e) return "";
20
- const c = {
21
- primary: "badge-primary",
22
- secondary: "badge-secondary",
23
- accent: "badge-accent",
24
- neutral: "badge-neutral",
25
- info: "badge-info",
26
- success: "badge-success",
27
- warning: "badge-warning",
28
- error: "badge-error",
29
- ghost: "badge-ghost"
1
+ import { jsx as n, jsxs as j, Fragment as $ } from "react/jsx-runtime";
2
+ import { forwardRef as I, useState as M } from "react";
3
+ const p = {
4
+ primary: "badge-primary",
5
+ secondary: "badge-secondary",
6
+ accent: "badge-accent",
7
+ neutral: "badge-neutral",
8
+ info: "badge-info",
9
+ success: "badge-success",
10
+ warning: "badge-warning",
11
+ error: "badge-error",
12
+ ghost: "badge-ghost"
13
+ }, L = {
14
+ xs: "badge-xs text-xs",
15
+ sm: "badge-sm text-sm",
16
+ md: "badge-md",
17
+ lg: "badge-lg text-lg",
18
+ xl: "badge-xl text-xl"
19
+ }, z = {
20
+ filled: "",
21
+ outlined: "badge-outline",
22
+ soft: "badge-soft",
23
+ dash: "badge-dash"
24
+ }, H = () => /* @__PURE__ */ n(
25
+ "div",
26
+ {
27
+ id: "tag-live-region",
28
+ role: "status",
29
+ "aria-live": "polite",
30
+ "aria-atomic": "true",
31
+ className: "sr-only",
32
+ style: { position: "absolute", width: 1, height: 1, padding: 0, margin: -1, overflow: "hidden", clip: "rect(0, 0, 0, 0)", whiteSpace: "nowrap", border: 0 }
33
+ }
34
+ ), F = (t) => {
35
+ const s = document.getElementById("tag-live-region");
36
+ s && (s.textContent = `${t} removed`, setTimeout(() => {
37
+ s.textContent = "";
38
+ }, 1e3));
39
+ }, P = I(
40
+ ({
41
+ closable: t = !1,
42
+ closeIcon: s,
43
+ onClose: c,
44
+ color: a,
45
+ icon: i,
46
+ size: o = "md",
47
+ variant: h = "filled",
48
+ visible: u,
49
+ disabled: e = !1,
50
+ href: l,
51
+ target: v,
52
+ children: d,
53
+ className: b = "",
54
+ "data-testid": f,
55
+ "aria-label": g,
56
+ ...y
57
+ }, C) => {
58
+ const [B, R] = M(!0), x = u !== void 0, E = x ? u : B, m = f ?? "tag", k = g ?? (typeof d == "string" ? d : "tag"), w = (r) => {
59
+ r.stopPropagation(), r.preventDefault(), !e && (x || R(!1), F(k), c?.());
60
+ }, K = (r) => {
61
+ (r.key === "Enter" || r.key === " ") && (r.preventDefault(), w(r));
30
62
  };
31
- return c[e] ? c[e] : "";
32
- }, p = {
33
- xs: "badge-xs text-xs",
34
- sm: "badge-sm text-sm",
35
- md: "badge-md",
36
- lg: "badge-lg text-lg"
37
- }, f = [
38
- "badge gap-1 inline-flex items-center",
39
- d(),
40
- p[o],
41
- i
42
- ].filter(Boolean).join(" "), x = e && !d() ? { backgroundColor: e, borderColor: e } : void 0;
43
- return /* @__PURE__ */ g("span", { className: f, style: x, ...b, children: [
44
- r && /* @__PURE__ */ a("span", { className: "inline-flex", children: r }),
45
- l,
46
- s && /* @__PURE__ */ a(
47
- "button",
63
+ if (!E) return null;
64
+ const S = a && p[a] ? p[a] : "", N = a && !p[a] ? { backgroundColor: a, borderColor: a } : void 0, T = [
65
+ "badge gap-1 inline-flex items-center",
66
+ S,
67
+ L[o],
68
+ z[h],
69
+ e && "opacity-50 cursor-not-allowed",
70
+ l && !e && "cursor-pointer hover:opacity-80",
71
+ b
72
+ ].filter(Boolean).join(" "), D = /* @__PURE__ */ j($, { children: [
73
+ i && /* @__PURE__ */ n("span", { className: "inline-flex", children: i }),
74
+ d,
75
+ t && /* @__PURE__ */ n(
76
+ "button",
77
+ {
78
+ type: "button",
79
+ onClick: w,
80
+ onKeyDown: K,
81
+ disabled: e,
82
+ className: "btn btn-ghost btn-xs p-0 min-h-0 h-auto hover:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-current focus-visible:ring-offset-1 rounded",
83
+ "aria-label": `Remove ${k}`,
84
+ "data-testid": `${m}-close`,
85
+ children: s || /* @__PURE__ */ n(
86
+ "svg",
87
+ {
88
+ className: "w-3 h-3",
89
+ fill: "none",
90
+ stroke: "currentColor",
91
+ viewBox: "0 0 24 24",
92
+ "aria-hidden": "true",
93
+ children: /* @__PURE__ */ n(
94
+ "path",
95
+ {
96
+ strokeLinecap: "round",
97
+ strokeLinejoin: "round",
98
+ strokeWidth: 2,
99
+ d: "M6 18L18 6M6 6l12 12"
100
+ }
101
+ )
102
+ }
103
+ )
104
+ }
105
+ )
106
+ ] });
107
+ return l && !e ? /* @__PURE__ */ n(
108
+ "a",
48
109
  {
49
- type: "button",
50
- onClick: h,
51
- className: "btn btn-ghost btn-xs p-0 min-h-0 h-auto hover:bg-transparent",
52
- "aria-label": "Close",
53
- children: t || /* @__PURE__ */ a(
54
- "svg",
55
- {
56
- className: "w-3 h-3",
57
- fill: "none",
58
- stroke: "currentColor",
59
- viewBox: "0 0 24 24",
60
- children: /* @__PURE__ */ a(
61
- "path",
62
- {
63
- strokeLinecap: "round",
64
- strokeLinejoin: "round",
65
- strokeWidth: 2,
66
- d: "M6 18L18 6M6 6l12 12"
67
- }
68
- )
69
- }
70
- )
110
+ ref: C,
111
+ href: l,
112
+ target: v,
113
+ className: T,
114
+ style: N,
115
+ "data-testid": m,
116
+ "data-disabled": e || void 0,
117
+ ...y,
118
+ children: D
71
119
  }
72
- )
73
- ] });
74
- }, N = ({
75
- checked: s = !1,
76
- onChange: t,
77
- icon: n,
78
- children: e,
79
- className: r = "",
80
- ...o
81
- }) => {
82
- const l = () => {
83
- t?.(!s);
84
- }, i = [
85
- "badge badge-md gap-1 cursor-pointer transition-colors",
86
- s ? "badge-primary" : "badge-outline hover:badge-primary hover:badge-outline",
87
- r
88
- ].filter(Boolean).join(" ");
89
- return /* @__PURE__ */ g("span", { className: i, onClick: l, role: "checkbox", "aria-checked": s, ...o, children: [
90
- n && /* @__PURE__ */ a("span", { className: "inline-flex", children: n }),
91
- e
92
- ] });
93
- };
120
+ ) : /* @__PURE__ */ n(
121
+ "span",
122
+ {
123
+ ref: C,
124
+ className: T,
125
+ style: N,
126
+ "data-testid": m,
127
+ "data-disabled": e || void 0,
128
+ "aria-disabled": e || void 0,
129
+ ...y,
130
+ children: D
131
+ }
132
+ );
133
+ }
134
+ );
135
+ P.displayName = "Tag";
136
+ const V = {
137
+ primary: "badge-primary",
138
+ secondary: "badge-secondary",
139
+ accent: "badge-accent",
140
+ neutral: "badge-neutral",
141
+ info: "badge-info",
142
+ success: "badge-success",
143
+ warning: "badge-warning",
144
+ error: "badge-error",
145
+ ghost: "badge-ghost"
146
+ }, W = {
147
+ primary: "badge-outline hover:badge-primary hover:badge-outline",
148
+ secondary: "badge-outline hover:badge-secondary hover:badge-outline",
149
+ accent: "badge-outline hover:badge-accent hover:badge-outline",
150
+ neutral: "badge-outline hover:badge-neutral hover:badge-outline",
151
+ info: "badge-outline hover:badge-info hover:badge-outline",
152
+ success: "badge-outline hover:badge-success hover:badge-outline",
153
+ warning: "badge-outline hover:badge-warning hover:badge-outline",
154
+ error: "badge-outline hover:badge-error hover:badge-outline",
155
+ ghost: "badge-outline hover:badge-ghost hover:badge-outline"
156
+ }, q = I(
157
+ ({
158
+ checked: t = !1,
159
+ onChange: s,
160
+ icon: c,
161
+ size: a = "md",
162
+ color: i = "primary",
163
+ disabled: o = !1,
164
+ children: h,
165
+ className: u = "",
166
+ "data-testid": e,
167
+ ...l
168
+ }, v) => {
169
+ const d = e ?? "checkable-tag", b = () => {
170
+ o || s?.(!t);
171
+ }, f = [
172
+ "badge gap-1 cursor-pointer transition-colors",
173
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-current focus-visible:ring-offset-2",
174
+ L[a],
175
+ t ? V[i] : W[i],
176
+ o && "opacity-50 cursor-not-allowed",
177
+ u
178
+ ].filter(Boolean).join(" ");
179
+ return /* @__PURE__ */ j(
180
+ "span",
181
+ {
182
+ ref: v,
183
+ className: f,
184
+ onClick: b,
185
+ role: "checkbox",
186
+ "aria-checked": t,
187
+ "aria-disabled": o || void 0,
188
+ tabIndex: o ? -1 : 0,
189
+ onKeyDown: (g) => {
190
+ o || (g.key === "Enter" || g.key === " ") && (g.preventDefault(), b());
191
+ },
192
+ "data-testid": d,
193
+ "data-state": t ? "checked" : "unchecked",
194
+ "data-disabled": o || void 0,
195
+ ...l,
196
+ children: [
197
+ c && /* @__PURE__ */ n("span", { className: "inline-flex", children: c }),
198
+ h
199
+ ]
200
+ }
201
+ );
202
+ }
203
+ );
204
+ q.displayName = "CheckableTag";
94
205
  export {
95
- N as CheckableTag,
96
- v as Tag
206
+ q as CheckableTag,
207
+ P as Tag,
208
+ H as TagLiveRegion
97
209
  };
98
210
  //# sourceMappingURL=index85.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index85.js","sources":["../src/components/Tag.tsx"],"sourcesContent":["import React, { useState } from 'react'\n\nexport interface TagProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'color'> {\n closable?: boolean\n closeIcon?: React.ReactNode\n onClose?: () => void\n color?: string\n icon?: React.ReactNode\n size?: 'xs' | 'sm' | 'md' | 'lg'\n children?: React.ReactNode\n}\n\nexport interface CheckableTagProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'onChange'> {\n checked?: boolean\n onChange?: (checked: boolean) => void\n icon?: React.ReactNode\n children?: React.ReactNode\n}\n\nexport const Tag: React.FC<TagProps> = ({\n closable = false,\n closeIcon,\n onClose,\n color,\n icon,\n size = 'md',\n children,\n className = '',\n ...rest\n}) => {\n const [visible, setVisible] = useState(true)\n\n const handleClose = () => {\n setVisible(false)\n onClose?.()\n }\n\n if (!visible) return null\n\n // Map color to daisyUI badge classes\n const getColorClass = () => {\n if (!color) return ''\n\n const colorMap: Record<string, string> = {\n primary: 'badge-primary',\n secondary: 'badge-secondary',\n accent: 'badge-accent',\n neutral: 'badge-neutral',\n info: 'badge-info',\n success: 'badge-success',\n warning: 'badge-warning',\n error: 'badge-error',\n ghost: 'badge-ghost',\n }\n\n // Check if it's a preset color\n if (colorMap[color]) {\n return colorMap[color]\n }\n\n // Assume it's a custom hex/color\n return ''\n }\n\n const sizeClasses = {\n xs: 'badge-xs text-xs',\n sm: 'badge-sm text-sm',\n md: 'badge-md',\n lg: 'badge-lg text-lg',\n }\n\n const tagClasses = [\n 'badge gap-1 inline-flex items-center',\n getColorClass(),\n sizeClasses[size],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const customColorStyle = color && !getColorClass() ? { backgroundColor: color, borderColor: color } : undefined\n\n return (\n <span className={tagClasses} style={customColorStyle} {...rest}>\n {icon && <span className=\"inline-flex\">{icon}</span>}\n {children}\n {closable && (\n <button\n type=\"button\"\n onClick={handleClose}\n className=\"btn btn-ghost btn-xs p-0 min-h-0 h-auto hover:bg-transparent\"\n aria-label=\"Close\"\n >\n {closeIcon || (\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n )}\n </button>\n )}\n </span>\n )\n}\n\nexport const CheckableTag: React.FC<CheckableTagProps> = ({\n checked = false,\n onChange,\n icon,\n children,\n className = '',\n ...rest\n}) => {\n const handleClick = () => {\n onChange?.(!checked)\n }\n\n const tagClasses = [\n 'badge badge-md gap-1 cursor-pointer transition-colors',\n checked ? 'badge-primary' : 'badge-outline hover:badge-primary hover:badge-outline',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <span className={tagClasses} onClick={handleClick} role=\"checkbox\" aria-checked={checked} {...rest}>\n {icon && <span className=\"inline-flex\">{icon}</span>}\n {children}\n </span>\n )\n}\n"],"names":["Tag","closable","closeIcon","onClose","color","icon","size","children","className","rest","visible","setVisible","useState","handleClose","getColorClass","colorMap","sizeClasses","tagClasses","customColorStyle","jsx","CheckableTag","checked","onChange","handleClick","jsxs"],"mappings":";;AAmBO,MAAMA,IAA0B,CAAC;AAAA,EACtC,UAAAC,IAAW;AAAA,EACX,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAS,EAAI,GAErCC,IAAc,MAAM;AACxB,IAAAF,EAAW,EAAK,GAChBR,IAAA;AAAA,EACF;AAEA,MAAI,CAACO,EAAS,QAAO;AAGrB,QAAMI,IAAgB,MAAM;AAC1B,QAAI,CAACV,EAAO,QAAO;AAEnB,UAAMW,IAAmC;AAAA,MACvC,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,IAAA;AAIT,WAAIA,EAASX,CAAK,IACTW,EAASX,CAAK,IAIhB;AAAA,EACT,GAEMY,IAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAC,IAAa;AAAA,IACjB;AAAA,IACAH,EAAA;AAAA,IACAE,EAAYV,CAAI;AAAA,IAChBE;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELU,IAAmBd,KAAS,CAACU,EAAA,IAAkB,EAAE,iBAAiBV,GAAO,aAAaA,EAAA,IAAU;AAEtG,2BACG,QAAA,EAAK,WAAWa,GAAY,OAAOC,GAAmB,GAAGT,GACvD,UAAA;AAAA,IAAAJ,KAAQ,gBAAAc,EAAC,QAAA,EAAK,WAAU,eAAe,UAAAd,GAAK;AAAA,IAC5CE;AAAA,IACAN,KACC,gBAAAkB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAASN;AAAA,QACT,WAAU;AAAA,QACV,cAAW;AAAA,QAEV,UAAAX,KACC,gBAAAiB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,QAAO;AAAA,YACP,SAAQ;AAAA,YAER,UAAA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,eAAc;AAAA,gBACd,gBAAe;AAAA,gBACf,aAAa;AAAA,gBACb,GAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UACJ;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ,GAEJ;AAEJ,GAEaC,IAA4C,CAAC;AAAA,EACxD,SAAAC,IAAU;AAAA,EACV,UAAAC;AAAA,EACA,MAAAjB;AAAA,EACA,UAAAE;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMc,IAAc,MAAM;AACxB,IAAAD,IAAW,CAACD,CAAO;AAAA,EACrB,GAEMJ,IAAa;AAAA,IACjB;AAAA,IACAI,IAAU,kBAAkB;AAAA,IAC5Bb;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAgB,EAAC,QAAA,EAAK,WAAWP,GAAY,SAASM,GAAa,MAAK,YAAW,gBAAcF,GAAU,GAAGZ,GAC3F,UAAA;AAAA,IAAAJ,KAAQ,gBAAAc,EAAC,QAAA,EAAK,WAAU,eAAe,UAAAd,GAAK;AAAA,IAC5CE;AAAA,EAAA,GACH;AAEJ;"}
1
+ {"version":3,"file":"index85.js","sources":["../src/components/Tag.tsx"],"sourcesContent":["import React, { useState, forwardRef } from 'react'\n\nexport type TagSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\nexport type TagColor =\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'neutral'\n | 'info'\n | 'success'\n | 'warning'\n | 'error'\n | 'ghost'\n\nexport type TagVariant = 'filled' | 'outlined' | 'soft' | 'dash'\n\nexport interface TagProps extends Omit<React.HTMLAttributes<HTMLElement>, 'color'> {\n closable?: boolean\n closeIcon?: React.ReactNode\n onClose?: () => void\n color?: TagColor | string\n icon?: React.ReactNode\n size?: TagSize\n variant?: TagVariant\n visible?: boolean\n disabled?: boolean\n href?: string\n target?: string\n children?: React.ReactNode\n 'data-testid'?: string\n 'aria-label'?: string\n}\n\nexport interface CheckableTagProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'onChange' | 'color'> {\n checked?: boolean\n onChange?: (checked: boolean) => void\n icon?: React.ReactNode\n size?: TagSize\n color?: TagColor\n disabled?: boolean\n children?: React.ReactNode\n 'data-testid'?: string\n}\n\nconst colorClasses: Record<string, string> = {\n primary: 'badge-primary',\n secondary: 'badge-secondary',\n accent: 'badge-accent',\n neutral: 'badge-neutral',\n info: 'badge-info',\n success: 'badge-success',\n warning: 'badge-warning',\n error: 'badge-error',\n ghost: 'badge-ghost',\n}\n\nconst sizeClasses: Record<TagSize, string> = {\n xs: 'badge-xs text-xs',\n sm: 'badge-sm text-sm',\n md: 'badge-md',\n lg: 'badge-lg text-lg',\n xl: 'badge-xl text-xl',\n}\n\nconst variantClasses: Record<TagVariant, string> = {\n filled: '',\n outlined: 'badge-outline',\n soft: 'badge-soft',\n dash: 'badge-dash',\n}\n\nconst TagLiveRegion: React.FC = () => (\n <div\n id=\"tag-live-region\"\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"sr-only\"\n style={{ position: 'absolute', width: 1, height: 1, padding: 0, margin: -1, overflow: 'hidden', clip: 'rect(0, 0, 0, 0)', whiteSpace: 'nowrap', border: 0 }}\n />\n)\n\nconst announceTagRemoval = (label: string) => {\n const region = document.getElementById('tag-live-region')\n if (region) {\n region.textContent = `${label} removed`\n setTimeout(() => {\n region.textContent = ''\n }, 1000)\n }\n}\n\nexport const Tag = forwardRef<HTMLElement, TagProps>(\n (\n {\n closable = false,\n closeIcon,\n onClose,\n color,\n icon,\n size = 'md',\n variant = 'filled',\n visible: controlledVisible,\n disabled = false,\n href,\n target,\n children,\n className = '',\n 'data-testid': testId,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref\n ) => {\n const [internalVisible, setInternalVisible] = useState(true)\n const isControlled = controlledVisible !== undefined\n const visible = isControlled ? controlledVisible : internalVisible\n const baseTestId = testId ?? 'tag'\n const tagLabel = ariaLabel ?? (typeof children === 'string' ? children : 'tag')\n\n const handleClose = (e: React.MouseEvent) => {\n e.stopPropagation()\n e.preventDefault()\n if (disabled) return\n if (!isControlled) {\n setInternalVisible(false)\n }\n announceTagRemoval(tagLabel)\n onClose?.()\n }\n\n const handleCloseKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClose(e as unknown as React.MouseEvent)\n }\n }\n\n if (!visible) return null\n\n const colorClass = color && colorClasses[color] ? colorClasses[color] : ''\n const customColorStyle =\n color && !colorClasses[color] ? { backgroundColor: color, borderColor: color } : undefined\n\n const tagClasses = [\n 'badge gap-1 inline-flex items-center',\n colorClass,\n sizeClasses[size],\n variantClasses[variant],\n disabled && 'opacity-50 cursor-not-allowed',\n href && !disabled && 'cursor-pointer hover:opacity-80',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const content = (\n <>\n {icon && <span className=\"inline-flex\">{icon}</span>}\n {children}\n {closable && (\n <button\n type=\"button\"\n onClick={handleClose}\n onKeyDown={handleCloseKeyDown}\n disabled={disabled}\n className=\"btn btn-ghost btn-xs p-0 min-h-0 h-auto hover:bg-transparent focus:outline-none focus-visible:ring-2 focus-visible:ring-current focus-visible:ring-offset-1 rounded\"\n aria-label={`Remove ${tagLabel}`}\n data-testid={`${baseTestId}-close`}\n >\n {closeIcon || (\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n )}\n </button>\n )}\n </>\n )\n\n if (href && !disabled) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n target={target}\n className={tagClasses}\n style={customColorStyle}\n data-testid={baseTestId}\n data-disabled={disabled || undefined}\n {...rest}\n >\n {content}\n </a>\n )\n }\n\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={tagClasses}\n style={customColorStyle}\n data-testid={baseTestId}\n data-disabled={disabled || undefined}\n aria-disabled={disabled || undefined}\n {...rest}\n >\n {content}\n </span>\n )\n }\n)\n\nTag.displayName = 'Tag'\n\nconst checkedColorClasses: Record<TagColor, string> = {\n primary: 'badge-primary',\n secondary: 'badge-secondary',\n accent: 'badge-accent',\n neutral: 'badge-neutral',\n info: 'badge-info',\n success: 'badge-success',\n warning: 'badge-warning',\n error: 'badge-error',\n ghost: 'badge-ghost',\n}\n\nconst uncheckedColorClasses: Record<TagColor, string> = {\n primary: 'badge-outline hover:badge-primary hover:badge-outline',\n secondary: 'badge-outline hover:badge-secondary hover:badge-outline',\n accent: 'badge-outline hover:badge-accent hover:badge-outline',\n neutral: 'badge-outline hover:badge-neutral hover:badge-outline',\n info: 'badge-outline hover:badge-info hover:badge-outline',\n success: 'badge-outline hover:badge-success hover:badge-outline',\n warning: 'badge-outline hover:badge-warning hover:badge-outline',\n error: 'badge-outline hover:badge-error hover:badge-outline',\n ghost: 'badge-outline hover:badge-ghost hover:badge-outline',\n}\n\nexport const CheckableTag = forwardRef<HTMLSpanElement, CheckableTagProps>(\n (\n {\n checked = false,\n onChange,\n icon,\n size = 'md',\n color = 'primary',\n disabled = false,\n children,\n className = '',\n 'data-testid': testId,\n ...rest\n },\n ref\n ) => {\n const baseTestId = testId ?? 'checkable-tag'\n\n const handleClick = () => {\n if (disabled) return\n onChange?.(!checked)\n }\n\n const tagClasses = [\n 'badge gap-1 cursor-pointer transition-colors',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-current focus-visible:ring-offset-2',\n sizeClasses[size],\n checked ? checkedColorClasses[color] : uncheckedColorClasses[color],\n disabled && 'opacity-50 cursor-not-allowed',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <span\n ref={ref}\n className={tagClasses}\n onClick={handleClick}\n role=\"checkbox\"\n aria-checked={checked}\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={(e) => {\n if (disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n data-testid={baseTestId}\n data-state={checked ? 'checked' : 'unchecked'}\n data-disabled={disabled || undefined}\n {...rest}\n >\n {icon && <span className=\"inline-flex\">{icon}</span>}\n {children}\n </span>\n )\n }\n)\n\nCheckableTag.displayName = 'CheckableTag'\n\nexport { TagLiveRegion }\n"],"names":["colorClasses","sizeClasses","variantClasses","TagLiveRegion","jsx","announceTagRemoval","label","region","Tag","forwardRef","closable","closeIcon","onClose","color","icon","size","variant","controlledVisible","disabled","href","target","children","className","testId","ariaLabel","rest","ref","internalVisible","setInternalVisible","useState","isControlled","visible","baseTestId","tagLabel","handleClose","e","handleCloseKeyDown","colorClass","customColorStyle","tagClasses","content","jsxs","Fragment","checkedColorClasses","uncheckedColorClasses","CheckableTag","checked","onChange","handleClick"],"mappings":"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"}
package/dist/index92.js CHANGED
@@ -54,7 +54,7 @@ function B({
54
54
  "input",
55
55
  {
56
56
  type: "text",
57
- className: "input input-bordered input-sm w-full",
57
+ className: "input input-sm w-full",
58
58
  placeholder: "Search...",
59
59
  value: l,
60
60
  onChange: (e) => L(e.target.value),
@@ -1 +1 @@
1
- {"version":3,"file":"index92.js","sources":["../src/components/Transfer.tsx"],"sourcesContent":["import React, { useState, useCallback, useMemo } from 'react'\n\nexport interface TransferItem {\n key: string\n title: React.ReactNode\n description?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface TransferProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n dataSource: TransferItem[]\n targetKeys?: string[]\n defaultTargetKeys?: string[]\n onChange?: (targetKeys: string[], direction: 'left' | 'right', moveKeys: string[]) => void\n onSelectChange?: (sourceSelectedKeys: string[], targetSelectedKeys: string[]) => void\n titles?: [React.ReactNode, React.ReactNode]\n render?: (item: TransferItem) => React.ReactNode\n showSearch?: boolean\n filterOption?: (inputValue: string, item: TransferItem) => boolean\n showSelectAll?: boolean\n disabled?: boolean\n listStyle?: React.CSSProperties\n}\n\ninterface TransferListProps {\n items: TransferItem[]\n selectedKeys: string[]\n onSelectChange: (keys: string[]) => void\n title: React.ReactNode\n showSearch: boolean\n filterOption: (inputValue: string, item: TransferItem) => boolean\n render: (item: TransferItem) => React.ReactNode\n showSelectAll: boolean\n disabled: boolean\n listStyle?: React.CSSProperties\n direction: 'left' | 'right'\n}\n\nfunction TransferList({\n items,\n selectedKeys,\n onSelectChange,\n title,\n showSearch,\n filterOption,\n render,\n showSelectAll,\n disabled,\n listStyle,\n}: TransferListProps) {\n const [searchValue, setSearchValue] = useState('')\n\n const filteredItems = useMemo(() => {\n if (!searchValue) return items\n return items.filter((item) => filterOption(searchValue, item))\n }, [items, searchValue, filterOption])\n\n const enabledItems = filteredItems.filter((item) => !item.disabled)\n const allSelected = enabledItems.length > 0 && enabledItems.every((item) => selectedKeys.includes(item.key))\n const someSelected = enabledItems.some((item) => selectedKeys.includes(item.key))\n\n const handleSelectAll = () => {\n if (disabled) return\n\n if (allSelected) {\n // Deselect all enabled items\n onSelectChange(selectedKeys.filter((key) => !enabledItems.some((item) => item.key === key)))\n } else {\n // Select all enabled items\n const enabledKeys = enabledItems.map((item) => item.key)\n const newKeys = [...new Set([...selectedKeys, ...enabledKeys])]\n onSelectChange(newKeys)\n }\n }\n\n const handleSelectItem = (key: string, itemDisabled: boolean) => {\n if (disabled || itemDisabled) return\n\n if (selectedKeys.includes(key)) {\n onSelectChange(selectedKeys.filter((k) => k !== key))\n } else {\n onSelectChange([...selectedKeys, key])\n }\n }\n\n return (\n <div\n className=\"flex flex-col border border-base-300 rounded-lg bg-base-100 overflow-hidden\"\n style={{ width: 200, height: 300, ...listStyle }}\n >\n {/* Header */}\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-base-300 bg-base-200\">\n {showSelectAll && (\n <input\n type=\"checkbox\"\n className=\"checkbox checkbox-sm checkbox-primary\"\n checked={allSelected}\n ref={(el) => {\n if (el) el.indeterminate = someSelected && !allSelected\n }}\n onChange={handleSelectAll}\n disabled={disabled || enabledItems.length === 0}\n />\n )}\n <span className=\"flex-1 font-medium text-sm truncate\">{title}</span>\n <span className=\"text-xs text-base-content/50\">\n {selectedKeys.filter((k) => filteredItems.some((item) => item.key === k)).length}/\n {filteredItems.length}\n </span>\n </div>\n\n {/* Search */}\n {showSearch && (\n <div className=\"px-2 py-2 border-b border-base-300\">\n <input\n type=\"text\"\n className=\"input input-bordered input-sm w-full\"\n placeholder=\"Search...\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n disabled={disabled}\n />\n </div>\n )}\n\n {/* List */}\n <div className=\"flex-1 overflow-auto\">\n {filteredItems.length > 0 ? (\n filteredItems.map((item) => (\n <div\n key={item.key}\n className={[\n 'flex items-center gap-2 px-3 py-2 cursor-pointer hover:bg-base-200 transition-colors',\n selectedKeys.includes(item.key) && 'bg-primary/10',\n (disabled || item.disabled) && 'opacity-50 cursor-not-allowed',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => handleSelectItem(item.key, !!item.disabled)}\n >\n <input\n type=\"checkbox\"\n className=\"checkbox checkbox-sm checkbox-primary\"\n checked={selectedKeys.includes(item.key)}\n disabled={disabled || item.disabled}\n onChange={() => {}}\n />\n <span className=\"flex-1 truncate text-sm\">{render(item)}</span>\n </div>\n ))\n ) : (\n <div className=\"flex items-center justify-center h-full text-base-content/50 text-sm\">\n No data\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport function Transfer({\n dataSource,\n targetKeys: controlledTargetKeys,\n defaultTargetKeys = [],\n onChange,\n onSelectChange,\n titles = ['Source', 'Target'],\n render = (item) => item.title,\n showSearch = false,\n filterOption = (inputValue, item) => {\n const title = typeof item.title === 'string' ? item.title : String(item.title)\n return title.toLowerCase().includes(inputValue.toLowerCase())\n },\n showSelectAll = true,\n disabled = false,\n listStyle,\n className = '',\n ...rest\n}: TransferProps) {\n const [internalTargetKeys, setInternalTargetKeys] = useState<string[]>(defaultTargetKeys)\n const [sourceSelectedKeys, setSourceSelectedKeys] = useState<string[]>([])\n const [targetSelectedKeys, setTargetSelectedKeys] = useState<string[]>([])\n\n const targetKeys = controlledTargetKeys ?? internalTargetKeys\n\n // Split items into source and target\n const sourceItems = useMemo(\n () => dataSource.filter((item) => !targetKeys.includes(item.key)),\n [dataSource, targetKeys]\n )\n\n const targetItems = useMemo(\n () => dataSource.filter((item) => targetKeys.includes(item.key)),\n [dataSource, targetKeys]\n )\n\n const handleSourceSelectChange = useCallback(\n (keys: string[]) => {\n setSourceSelectedKeys(keys)\n onSelectChange?.(keys, targetSelectedKeys)\n },\n [targetSelectedKeys, onSelectChange]\n )\n\n const handleTargetSelectChange = useCallback(\n (keys: string[]) => {\n setTargetSelectedKeys(keys)\n onSelectChange?.(sourceSelectedKeys, keys)\n },\n [sourceSelectedKeys, onSelectChange]\n )\n\n const moveToTarget = useCallback(() => {\n if (disabled || sourceSelectedKeys.length === 0) return\n\n // Filter out disabled items\n const movableKeys = sourceSelectedKeys.filter((key) => {\n const item = dataSource.find((i) => i.key === key)\n return item && !item.disabled\n })\n\n if (movableKeys.length === 0) return\n\n const newTargetKeys = [...targetKeys, ...movableKeys]\n\n if (controlledTargetKeys === undefined) {\n setInternalTargetKeys(newTargetKeys)\n }\n\n setSourceSelectedKeys([])\n onChange?.(newTargetKeys, 'right', movableKeys)\n }, [disabled, sourceSelectedKeys, targetKeys, controlledTargetKeys, onChange, dataSource])\n\n const moveToSource = useCallback(() => {\n if (disabled || targetSelectedKeys.length === 0) return\n\n // Filter out disabled items\n const movableKeys = targetSelectedKeys.filter((key) => {\n const item = dataSource.find((i) => i.key === key)\n return item && !item.disabled\n })\n\n if (movableKeys.length === 0) return\n\n const newTargetKeys = targetKeys.filter((key) => !movableKeys.includes(key))\n\n if (controlledTargetKeys === undefined) {\n setInternalTargetKeys(newTargetKeys)\n }\n\n setTargetSelectedKeys([])\n onChange?.(newTargetKeys, 'left', movableKeys)\n }, [disabled, targetSelectedKeys, targetKeys, controlledTargetKeys, onChange, dataSource])\n\n const canMoveToTarget = sourceSelectedKeys.some((key) => {\n const item = dataSource.find((i) => i.key === key)\n return item && !item.disabled\n })\n\n const canMoveToSource = targetSelectedKeys.some((key) => {\n const item = dataSource.find((i) => i.key === key)\n return item && !item.disabled\n })\n\n return (\n <div className={`flex items-center gap-4 ${className}`} {...rest}>\n {/* Source list */}\n <TransferList\n items={sourceItems}\n selectedKeys={sourceSelectedKeys}\n onSelectChange={handleSourceSelectChange}\n title={titles[0]}\n showSearch={showSearch}\n filterOption={filterOption}\n render={render}\n showSelectAll={showSelectAll}\n disabled={disabled}\n listStyle={listStyle}\n direction=\"left\"\n />\n\n {/* Actions */}\n <div className=\"flex flex-col gap-2\">\n <button\n type=\"button\"\n className=\"btn btn-sm btn-outline\"\n onClick={moveToTarget}\n disabled={disabled || !canMoveToTarget}\n aria-label=\"Move to target\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-sm btn-outline\"\n onClick={moveToSource}\n disabled={disabled || !canMoveToSource}\n aria-label=\"Move to source\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n </div>\n\n {/* Target list */}\n <TransferList\n items={targetItems}\n selectedKeys={targetSelectedKeys}\n onSelectChange={handleTargetSelectChange}\n title={titles[1]}\n showSearch={showSearch}\n filterOption={filterOption}\n render={render}\n showSelectAll={showSelectAll}\n disabled={disabled}\n listStyle={listStyle}\n direction=\"right\"\n />\n </div>\n )\n}\n"],"names":["TransferList","items","selectedKeys","onSelectChange","title","showSearch","filterOption","render","showSelectAll","disabled","listStyle","searchValue","setSearchValue","useState","filteredItems","useMemo","item","enabledItems","allSelected","someSelected","handleSelectAll","key","enabledKeys","newKeys","handleSelectItem","itemDisabled","k","jsxs","jsx","el","Transfer","dataSource","controlledTargetKeys","defaultTargetKeys","onChange","titles","inputValue","className","rest","internalTargetKeys","setInternalTargetKeys","sourceSelectedKeys","setSourceSelectedKeys","targetSelectedKeys","setTargetSelectedKeys","targetKeys","sourceItems","targetItems","handleSourceSelectChange","useCallback","keys","handleTargetSelectChange","moveToTarget","movableKeys","i","newTargetKeys","moveToSource","canMoveToTarget","canMoveToSource"],"mappings":"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"}
1
+ {"version":3,"file":"index92.js","sources":["../src/components/Transfer.tsx"],"sourcesContent":["import React, { useState, useCallback, useMemo } from 'react'\n\nexport interface TransferItem {\n key: string\n title: React.ReactNode\n description?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface TransferProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n dataSource: TransferItem[]\n targetKeys?: string[]\n defaultTargetKeys?: string[]\n onChange?: (targetKeys: string[], direction: 'left' | 'right', moveKeys: string[]) => void\n onSelectChange?: (sourceSelectedKeys: string[], targetSelectedKeys: string[]) => void\n titles?: [React.ReactNode, React.ReactNode]\n render?: (item: TransferItem) => React.ReactNode\n showSearch?: boolean\n filterOption?: (inputValue: string, item: TransferItem) => boolean\n showSelectAll?: boolean\n disabled?: boolean\n listStyle?: React.CSSProperties\n}\n\ninterface TransferListProps {\n items: TransferItem[]\n selectedKeys: string[]\n onSelectChange: (keys: string[]) => void\n title: React.ReactNode\n showSearch: boolean\n filterOption: (inputValue: string, item: TransferItem) => boolean\n render: (item: TransferItem) => React.ReactNode\n showSelectAll: boolean\n disabled: boolean\n listStyle?: React.CSSProperties\n direction: 'left' | 'right'\n}\n\nfunction TransferList({\n items,\n selectedKeys,\n onSelectChange,\n title,\n showSearch,\n filterOption,\n render,\n showSelectAll,\n disabled,\n listStyle,\n}: TransferListProps) {\n const [searchValue, setSearchValue] = useState('')\n\n const filteredItems = useMemo(() => {\n if (!searchValue) return items\n return items.filter((item) => filterOption(searchValue, item))\n }, [items, searchValue, filterOption])\n\n const enabledItems = filteredItems.filter((item) => !item.disabled)\n const allSelected = enabledItems.length > 0 && enabledItems.every((item) => selectedKeys.includes(item.key))\n const someSelected = enabledItems.some((item) => selectedKeys.includes(item.key))\n\n const handleSelectAll = () => {\n if (disabled) return\n\n if (allSelected) {\n // Deselect all enabled items\n onSelectChange(selectedKeys.filter((key) => !enabledItems.some((item) => item.key === key)))\n } else {\n // Select all enabled items\n const enabledKeys = enabledItems.map((item) => item.key)\n const newKeys = [...new Set([...selectedKeys, ...enabledKeys])]\n onSelectChange(newKeys)\n }\n }\n\n const handleSelectItem = (key: string, itemDisabled: boolean) => {\n if (disabled || itemDisabled) return\n\n if (selectedKeys.includes(key)) {\n onSelectChange(selectedKeys.filter((k) => k !== key))\n } else {\n onSelectChange([...selectedKeys, key])\n }\n }\n\n return (\n <div\n className=\"flex flex-col border border-base-300 rounded-lg bg-base-100 overflow-hidden\"\n style={{ width: 200, height: 300, ...listStyle }}\n >\n {/* Header */}\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-base-300 bg-base-200\">\n {showSelectAll && (\n <input\n type=\"checkbox\"\n className=\"checkbox checkbox-sm checkbox-primary\"\n checked={allSelected}\n ref={(el) => {\n if (el) el.indeterminate = someSelected && !allSelected\n }}\n onChange={handleSelectAll}\n disabled={disabled || enabledItems.length === 0}\n />\n )}\n <span className=\"flex-1 font-medium text-sm truncate\">{title}</span>\n <span className=\"text-xs text-base-content/50\">\n {selectedKeys.filter((k) => filteredItems.some((item) => item.key === k)).length}/\n {filteredItems.length}\n </span>\n </div>\n\n {/* Search */}\n {showSearch && (\n <div className=\"px-2 py-2 border-b border-base-300\">\n <input\n type=\"text\"\n className=\"input input-sm w-full\"\n placeholder=\"Search...\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n disabled={disabled}\n />\n </div>\n )}\n\n {/* List */}\n <div className=\"flex-1 overflow-auto\">\n {filteredItems.length > 0 ? (\n filteredItems.map((item) => (\n <div\n key={item.key}\n className={[\n 'flex items-center gap-2 px-3 py-2 cursor-pointer hover:bg-base-200 transition-colors',\n selectedKeys.includes(item.key) && 'bg-primary/10',\n (disabled || item.disabled) && 'opacity-50 cursor-not-allowed',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => handleSelectItem(item.key, !!item.disabled)}\n >\n <input\n type=\"checkbox\"\n className=\"checkbox checkbox-sm checkbox-primary\"\n checked={selectedKeys.includes(item.key)}\n disabled={disabled || item.disabled}\n onChange={() => {}}\n />\n <span className=\"flex-1 truncate text-sm\">{render(item)}</span>\n </div>\n ))\n ) : (\n <div className=\"flex items-center justify-center h-full text-base-content/50 text-sm\">\n No data\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport function Transfer({\n dataSource,\n targetKeys: controlledTargetKeys,\n defaultTargetKeys = [],\n onChange,\n onSelectChange,\n titles = ['Source', 'Target'],\n render = (item) => item.title,\n showSearch = false,\n filterOption = (inputValue, item) => {\n const title = typeof item.title === 'string' ? item.title : String(item.title)\n return title.toLowerCase().includes(inputValue.toLowerCase())\n },\n showSelectAll = true,\n disabled = false,\n listStyle,\n className = '',\n ...rest\n}: TransferProps) {\n const [internalTargetKeys, setInternalTargetKeys] = useState<string[]>(defaultTargetKeys)\n const [sourceSelectedKeys, setSourceSelectedKeys] = useState<string[]>([])\n const [targetSelectedKeys, setTargetSelectedKeys] = useState<string[]>([])\n\n const targetKeys = controlledTargetKeys ?? internalTargetKeys\n\n // Split items into source and target\n const sourceItems = useMemo(\n () => dataSource.filter((item) => !targetKeys.includes(item.key)),\n [dataSource, targetKeys]\n )\n\n const targetItems = useMemo(\n () => dataSource.filter((item) => targetKeys.includes(item.key)),\n [dataSource, targetKeys]\n )\n\n const handleSourceSelectChange = useCallback(\n (keys: string[]) => {\n setSourceSelectedKeys(keys)\n onSelectChange?.(keys, targetSelectedKeys)\n },\n [targetSelectedKeys, onSelectChange]\n )\n\n const handleTargetSelectChange = useCallback(\n (keys: string[]) => {\n setTargetSelectedKeys(keys)\n onSelectChange?.(sourceSelectedKeys, keys)\n },\n [sourceSelectedKeys, onSelectChange]\n )\n\n const moveToTarget = useCallback(() => {\n if (disabled || sourceSelectedKeys.length === 0) return\n\n // Filter out disabled items\n const movableKeys = sourceSelectedKeys.filter((key) => {\n const item = dataSource.find((i) => i.key === key)\n return item && !item.disabled\n })\n\n if (movableKeys.length === 0) return\n\n const newTargetKeys = [...targetKeys, ...movableKeys]\n\n if (controlledTargetKeys === undefined) {\n setInternalTargetKeys(newTargetKeys)\n }\n\n setSourceSelectedKeys([])\n onChange?.(newTargetKeys, 'right', movableKeys)\n }, [disabled, sourceSelectedKeys, targetKeys, controlledTargetKeys, onChange, dataSource])\n\n const moveToSource = useCallback(() => {\n if (disabled || targetSelectedKeys.length === 0) return\n\n // Filter out disabled items\n const movableKeys = targetSelectedKeys.filter((key) => {\n const item = dataSource.find((i) => i.key === key)\n return item && !item.disabled\n })\n\n if (movableKeys.length === 0) return\n\n const newTargetKeys = targetKeys.filter((key) => !movableKeys.includes(key))\n\n if (controlledTargetKeys === undefined) {\n setInternalTargetKeys(newTargetKeys)\n }\n\n setTargetSelectedKeys([])\n onChange?.(newTargetKeys, 'left', movableKeys)\n }, [disabled, targetSelectedKeys, targetKeys, controlledTargetKeys, onChange, dataSource])\n\n const canMoveToTarget = sourceSelectedKeys.some((key) => {\n const item = dataSource.find((i) => i.key === key)\n return item && !item.disabled\n })\n\n const canMoveToSource = targetSelectedKeys.some((key) => {\n const item = dataSource.find((i) => i.key === key)\n return item && !item.disabled\n })\n\n return (\n <div className={`flex items-center gap-4 ${className}`} {...rest}>\n {/* Source list */}\n <TransferList\n items={sourceItems}\n selectedKeys={sourceSelectedKeys}\n onSelectChange={handleSourceSelectChange}\n title={titles[0]}\n showSearch={showSearch}\n filterOption={filterOption}\n render={render}\n showSelectAll={showSelectAll}\n disabled={disabled}\n listStyle={listStyle}\n direction=\"left\"\n />\n\n {/* Actions */}\n <div className=\"flex flex-col gap-2\">\n <button\n type=\"button\"\n className=\"btn btn-sm btn-outline\"\n onClick={moveToTarget}\n disabled={disabled || !canMoveToTarget}\n aria-label=\"Move to target\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n </button>\n <button\n type=\"button\"\n className=\"btn btn-sm btn-outline\"\n onClick={moveToSource}\n disabled={disabled || !canMoveToSource}\n aria-label=\"Move to source\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n </div>\n\n {/* Target list */}\n <TransferList\n items={targetItems}\n selectedKeys={targetSelectedKeys}\n onSelectChange={handleTargetSelectChange}\n title={titles[1]}\n showSearch={showSearch}\n filterOption={filterOption}\n render={render}\n showSelectAll={showSelectAll}\n disabled={disabled}\n listStyle={listStyle}\n direction=\"right\"\n />\n </div>\n )\n}\n"],"names":["TransferList","items","selectedKeys","onSelectChange","title","showSearch","filterOption","render","showSelectAll","disabled","listStyle","searchValue","setSearchValue","useState","filteredItems","useMemo","item","enabledItems","allSelected","someSelected","handleSelectAll","key","enabledKeys","newKeys","handleSelectItem","itemDisabled","k","jsxs","jsx","el","Transfer","dataSource","controlledTargetKeys","defaultTargetKeys","onChange","titles","inputValue","className","rest","internalTargetKeys","setInternalTargetKeys","sourceSelectedKeys","setSourceSelectedKeys","targetSelectedKeys","setTargetSelectedKeys","targetKeys","sourceItems","targetItems","handleSourceSelectChange","useCallback","keys","handleTargetSelectChange","moveToTarget","movableKeys","i","newTargetKeys","moveToSource","canMoveToTarget","canMoveToSource"],"mappings":"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"}