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.
- package/dist/components/Card.d.ts +24 -7
- package/dist/components/Cascader.d.ts +2 -0
- package/dist/components/Tag.d.ts +22 -6
- package/dist/components/Tree.d.ts +2 -0
- package/dist/components/TreeSelect.d.ts +35 -4
- package/dist/index.d.ts +5 -5
- package/dist/index.js +76 -74
- package/dist/index11.js +55 -55
- package/dist/index11.js.map +1 -1
- package/dist/index13.js +39 -39
- package/dist/index13.js.map +1 -1
- package/dist/index14.js +192 -107
- package/dist/index14.js.map +1 -1
- package/dist/index15.js +1 -1
- package/dist/index15.js.map +1 -1
- package/dist/index30.js +9 -8
- package/dist/index30.js.map +1 -1
- package/dist/index35.js +35 -36
- package/dist/index35.js.map +1 -1
- package/dist/index43.js +19 -20
- package/dist/index43.js.map +1 -1
- package/dist/index44.js +6 -7
- package/dist/index44.js.map +1 -1
- package/dist/index5.js +9 -9
- package/dist/index5.js.map +1 -1
- package/dist/index61.js +7 -7
- package/dist/index61.js.map +1 -1
- package/dist/index62.js +10 -10
- package/dist/index62.js.map +1 -1
- package/dist/index85.js +204 -92
- package/dist/index85.js.map +1 -1
- package/dist/index92.js +1 -1
- package/dist/index92.js.map +1 -1
- package/dist/index93.js.map +1 -1
- package/dist/index94.js +478 -385
- package/dist/index94.js.map +1 -1
- package/package.json +1 -1
package/dist/index62.js.map
CHANGED
|
@@ -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":"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"}
|
|
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
|
|
2
|
-
import { useState as
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
96
|
-
|
|
206
|
+
q as CheckableTag,
|
|
207
|
+
P as Tag,
|
|
208
|
+
H as TagLiveRegion
|
|
97
209
|
};
|
|
98
210
|
//# sourceMappingURL=index85.js.map
|
package/dist/index85.js.map
CHANGED
|
@@ -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
package/dist/index92.js.map
CHANGED
|
@@ -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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"}
|