inconel 0.1.17 → 0.1.18
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/cjs/components/FloatingPanel/FloatingPanel.cjs +2 -0
- package/dist/cjs/components/FloatingPanel/FloatingPanel.cjs.map +1 -0
- package/dist/cjs/components/MultiSelectCheckBox/MultiSelectCheckBox.cjs +2 -0
- package/dist/cjs/components/MultiSelectCheckBox/MultiSelectCheckBox.cjs.map +1 -0
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/styles.css +1 -1
- package/dist/components/FloatingPanel/FloatingPanel.d.ts +29 -0
- package/dist/components/FloatingPanel/FloatingPanel.d.ts.map +1 -0
- package/dist/components/FloatingPanel/FloatingPanel.js +180 -0
- package/dist/components/FloatingPanel/FloatingPanel.js.map +1 -0
- package/dist/components/FloatingPanel/index.d.ts +3 -0
- package/dist/components/FloatingPanel/index.d.ts.map +1 -0
- package/dist/components/MultiSelectCheckBox/MultiSelectCheckBox.d.ts +40 -0
- package/dist/components/MultiSelectCheckBox/MultiSelectCheckBox.d.ts.map +1 -0
- package/dist/components/MultiSelectCheckBox/MultiSelectCheckBox.js +315 -0
- package/dist/components/MultiSelectCheckBox/MultiSelectCheckBox.js.map +1 -0
- package/dist/components/MultiSelectCheckBox/index.d.ts +3 -0
- package/dist/components/MultiSelectCheckBox/index.d.ts.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/index.js +60 -56
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { jsx as M, jsxs as te } from "react/jsx-runtime";
|
|
2
|
+
import { useState as ne, useRef as m, useCallback as d, useEffect as y } from "react";
|
|
3
|
+
import { createPortal as re } from "react-dom";
|
|
4
|
+
import { classNames as oe } from "../shared/classNames.js";
|
|
5
|
+
/* empty css */
|
|
6
|
+
const a = 10, s = 5;
|
|
7
|
+
function k(p) {
|
|
8
|
+
return p != null && !Number.isNaN(p);
|
|
9
|
+
}
|
|
10
|
+
function ue({
|
|
11
|
+
id: p = null,
|
|
12
|
+
className: q,
|
|
13
|
+
target: u = null,
|
|
14
|
+
watchTarget: z = !0,
|
|
15
|
+
trianglePosition: g = "top-left",
|
|
16
|
+
triangleShow: G = !0,
|
|
17
|
+
windowCenterToPage: v = !1,
|
|
18
|
+
closeButtonShow: K = !0,
|
|
19
|
+
onClosed: f,
|
|
20
|
+
onOutsideClick: W,
|
|
21
|
+
closeOnScroll: S = !1,
|
|
22
|
+
transition: j = "slide",
|
|
23
|
+
draggable: w = !1,
|
|
24
|
+
defaultPositionX: L = null,
|
|
25
|
+
defaultPositionY: R = null,
|
|
26
|
+
onPositionChange: C,
|
|
27
|
+
render: N = !0,
|
|
28
|
+
children: U,
|
|
29
|
+
portalTarget: J
|
|
30
|
+
}) {
|
|
31
|
+
const [Q, O] = ne(!1), c = m(null), V = m(null), X = m(null), $ = m({ x: null, y: null }), E = m(
|
|
32
|
+
void 0
|
|
33
|
+
), I = m(!1), _ = J ?? (typeof document < "u" ? document.body : null), B = N && _ !== null, Y = !w && z && B, D = d(() => {
|
|
34
|
+
const t = c.current;
|
|
35
|
+
if (!t) return;
|
|
36
|
+
const { width: i, height: l } = t.getBoundingClientRect(), n = window.innerWidth / 2, e = window.innerHeight / 2;
|
|
37
|
+
t.style.transform = `translate(${n - i / 2}px, ${e - l / 2}px)`;
|
|
38
|
+
}, []), F = d(() => {
|
|
39
|
+
const t = c.current;
|
|
40
|
+
if (!t || !u) return;
|
|
41
|
+
const i = window.innerWidth, l = window.innerHeight, n = t.getBoundingClientRect(), e = u.getBoundingClientRect(), h = a * 1.5;
|
|
42
|
+
let r = 0, o = 0;
|
|
43
|
+
switch (g) {
|
|
44
|
+
case "top-left":
|
|
45
|
+
r = e.left + e.width / 2 - h, o = e.top + e.height + s;
|
|
46
|
+
break;
|
|
47
|
+
case "top-center":
|
|
48
|
+
r = e.left + e.width / 2 - n.width / 2, o = e.top + e.height + s;
|
|
49
|
+
break;
|
|
50
|
+
case "top-right":
|
|
51
|
+
r = e.left + e.width / 2 - n.width + h, o = e.top + e.height + s;
|
|
52
|
+
break;
|
|
53
|
+
case "bottom-left":
|
|
54
|
+
r = e.left + e.width / 2 - h, o = e.top - n.height - s;
|
|
55
|
+
break;
|
|
56
|
+
case "bottom-center":
|
|
57
|
+
r = e.left + e.width / 2 - n.width / 2, o = e.top - n.height - s;
|
|
58
|
+
break;
|
|
59
|
+
case "bottom-right":
|
|
60
|
+
r = e.left + e.width / 2 - n.width + h, o = e.top - n.height - s;
|
|
61
|
+
break;
|
|
62
|
+
case "left-top":
|
|
63
|
+
r = e.left + e.width + s, o = e.top + e.height / 2 - h;
|
|
64
|
+
break;
|
|
65
|
+
case "left-center":
|
|
66
|
+
r = e.left + e.width + s, o = e.top + e.height / 2 - n.height / 2;
|
|
67
|
+
break;
|
|
68
|
+
case "left-bottom":
|
|
69
|
+
r = e.left + e.width + s, o = e.top + e.height / 2 - n.height + h;
|
|
70
|
+
break;
|
|
71
|
+
case "right-top":
|
|
72
|
+
r = e.left - n.width - s, o = e.top + e.height / 2 - h;
|
|
73
|
+
break;
|
|
74
|
+
case "right-center":
|
|
75
|
+
r = e.left - n.width - s, o = e.top + e.height / 2 - n.height / 2;
|
|
76
|
+
break;
|
|
77
|
+
case "right-bottom":
|
|
78
|
+
r = e.left - n.width - s, o = e.top + e.height / 2 - n.height + h;
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
r = r < a ? a : r, r = r + n.width + a > i ? i - (n.width + a) : r, o = o < a ? a : o, o = o + n.height + a > l ? l - (n.height + a) : o, t.style.transform = `translate(${r}px, ${o}px)`;
|
|
82
|
+
}, [u, g]), T = d(
|
|
83
|
+
(t) => {
|
|
84
|
+
const i = c.current;
|
|
85
|
+
i && !i.contains(t.target) && f();
|
|
86
|
+
},
|
|
87
|
+
[f]
|
|
88
|
+
), b = d(
|
|
89
|
+
(t) => {
|
|
90
|
+
const i = c.current;
|
|
91
|
+
i && !i.contains(t.target) && W?.(t);
|
|
92
|
+
},
|
|
93
|
+
[W]
|
|
94
|
+
), Z = d(() => {
|
|
95
|
+
Y && (v ? D() : F()), u && !document.body.contains(u) && (clearInterval(E.current), f());
|
|
96
|
+
}, [f, D, F, u, Y, v]), x = d((t) => {
|
|
97
|
+
t.preventDefault();
|
|
98
|
+
const i = X.current, l = c.current;
|
|
99
|
+
if (!i || !l) return;
|
|
100
|
+
const n = t.pageX - i.x, e = t.pageY - i.y;
|
|
101
|
+
$.current = { x: n, y: e }, I.current && requestAnimationFrame(() => {
|
|
102
|
+
l.style.transform = `translate(${n}px, ${e}px)`;
|
|
103
|
+
}), O(!0);
|
|
104
|
+
}, []), H = d(() => {
|
|
105
|
+
document.removeEventListener("mouseup", H), document.removeEventListener("mousemove", x), I.current = !1, C?.({
|
|
106
|
+
x: $.current.x,
|
|
107
|
+
y: $.current.y
|
|
108
|
+
}), O(!1);
|
|
109
|
+
}, [x, C]), A = d(
|
|
110
|
+
(t) => {
|
|
111
|
+
t.preventDefault();
|
|
112
|
+
const i = c.current;
|
|
113
|
+
if (!i) return;
|
|
114
|
+
const { left: l, top: n } = i.getBoundingClientRect();
|
|
115
|
+
X.current = { x: t.clientX - l, y: t.clientY - n }, I.current = !0, document.addEventListener("mouseup", H), document.addEventListener("mousemove", x);
|
|
116
|
+
},
|
|
117
|
+
[x, H]
|
|
118
|
+
);
|
|
119
|
+
if (y(() => {
|
|
120
|
+
document.removeEventListener("mousedown", b), clearInterval(E.current), !k(L) && !k(R) && (v ? D() : F()), B && document.addEventListener("mousedown", b);
|
|
121
|
+
let t;
|
|
122
|
+
return u && (E.current = setInterval(Z, 100), t = setTimeout(() => {
|
|
123
|
+
c.current?.classList.add("inconel-is-watched");
|
|
124
|
+
}, 500)), () => {
|
|
125
|
+
document.removeEventListener("mousedown", b), clearInterval(E.current), clearTimeout(t);
|
|
126
|
+
};
|
|
127
|
+
}, [N, u, b, v, w]), y(() => {
|
|
128
|
+
if (S)
|
|
129
|
+
return window.addEventListener("scroll", T, !0), () => window.removeEventListener("scroll", T, !0);
|
|
130
|
+
}, [S, T]), y(() => {
|
|
131
|
+
const t = V.current;
|
|
132
|
+
if (!(!t || !w))
|
|
133
|
+
return t.addEventListener("mousedown", A), () => t.removeEventListener("mousedown", A);
|
|
134
|
+
}, [w, A, N]), y(() => {
|
|
135
|
+
k(L) && k(R) && c.current?.style.setProperty(
|
|
136
|
+
"transform",
|
|
137
|
+
`translate(${L}px, ${R}px)`
|
|
138
|
+
);
|
|
139
|
+
}, []), !B || !_) return null;
|
|
140
|
+
const P = G ? g : "inconel-triangle-off", ee = j === "slide" ? `inconel-is-animated-${g.split("-")[0]}` : j === "fade" ? "inconel-is-animation-fade" : void 0;
|
|
141
|
+
return re(
|
|
142
|
+
/* @__PURE__ */ M(
|
|
143
|
+
"div",
|
|
144
|
+
{
|
|
145
|
+
id: p ?? void 0,
|
|
146
|
+
className: oe(
|
|
147
|
+
"inconel-floating-panel",
|
|
148
|
+
P,
|
|
149
|
+
ee,
|
|
150
|
+
Q && "inconel-is-holding",
|
|
151
|
+
q
|
|
152
|
+
),
|
|
153
|
+
ref: c,
|
|
154
|
+
style: { transform: "translate(-1000px, 0px)" },
|
|
155
|
+
children: /* @__PURE__ */ te("div", { className: "inconel-floating-panel__content", children: [
|
|
156
|
+
w && /* @__PURE__ */ M("div", { className: "inconel-floating-panel__drag-bg", ref: V }),
|
|
157
|
+
U,
|
|
158
|
+
K && /* @__PURE__ */ M(
|
|
159
|
+
"div",
|
|
160
|
+
{
|
|
161
|
+
className: "inconel-floating-panel__close",
|
|
162
|
+
role: "button",
|
|
163
|
+
tabIndex: 0,
|
|
164
|
+
onClick: () => f(),
|
|
165
|
+
onKeyDown: (t) => {
|
|
166
|
+
(t.key === "Enter" || t.key === " ") && f();
|
|
167
|
+
},
|
|
168
|
+
children: "×"
|
|
169
|
+
}
|
|
170
|
+
)
|
|
171
|
+
] })
|
|
172
|
+
}
|
|
173
|
+
),
|
|
174
|
+
_
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
export {
|
|
178
|
+
ue as FloatingPanel
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=FloatingPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingPanel.js","sources":["../../../src/components/FloatingPanel/FloatingPanel.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport type FloatingPanelTrianglePosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right'\n | 'left-top'\n | 'left-center'\n | 'left-bottom'\n | 'right-top'\n | 'right-center'\n | 'right-bottom'\n\nexport interface FloatingPanelPosition {\n x: number | null\n y: number | null\n}\n\nexport interface FloatingPanelProps {\n id?: string | null\n className?: string\n target?: HTMLElement | null\n watchTarget?: boolean\n trianglePosition?: FloatingPanelTrianglePosition\n triangleShow?: boolean\n windowCenterToPage?: boolean\n closeButtonShow?: boolean\n onClosed: () => void\n onOutsideClick?: (event: MouseEvent) => void\n closeOnScroll?: boolean\n transition?: 'slide' | 'fade' | 'off'\n draggable?: boolean\n defaultPositionX?: number | null\n defaultPositionY?: number | null\n onPositionChange?: (position: FloatingPanelPosition) => void\n render?: boolean\n children?: ReactNode\n portalTarget?: Element | null\n}\n\nconst TRIANGLE_OFFSET = 10\nconst VERTICAL_OFFSET = 5\n\nfunction isValidNumber(value: number | null | undefined): value is number {\n return value !== null && value !== undefined && !Number.isNaN(value)\n}\n\nexport function FloatingPanel({\n id = null,\n className,\n target = null,\n watchTarget = true,\n trianglePosition = 'top-left',\n triangleShow = true,\n windowCenterToPage = false,\n closeButtonShow = true,\n onClosed,\n onOutsideClick,\n closeOnScroll = false,\n transition = 'slide',\n draggable = false,\n defaultPositionX = null,\n defaultPositionY = null,\n onPositionChange,\n render = true,\n children,\n portalTarget,\n}: FloatingPanelProps) {\n const [holding, setHolding] = useState(false)\n const panelRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const referencePosition = useRef<{ x: number; y: number } | null>(null)\n const lastDragPosition = useRef<FloatingPanelPosition>({ x: null, y: null })\n const watchIntervalRef = useRef<ReturnType<typeof setInterval> | undefined>(\n undefined,\n )\n const isDraggingRef = useRef(false)\n\n const resolvedPortalTarget =\n portalTarget ?? (typeof document !== 'undefined' ? document.body : null)\n const show = render && resolvedPortalTarget !== null\n const watchTargetActive = !draggable && watchTarget && show\n\n const setCenter = useCallback(() => {\n const panelElement = panelRef.current\n if (!panelElement) return\n const { width, height } = panelElement.getBoundingClientRect()\n const halfBrowserWidth = window.innerWidth / 2\n const halfBrowserHeight = window.innerHeight / 2\n panelElement.style.transform = `translate(${halfBrowserWidth - width / 2}px, ${\n halfBrowserHeight - height / 2\n }px)`\n }, [])\n\n const setPosition = useCallback(() => {\n const panelElement = panelRef.current\n if (!panelElement || !target) return\n\n const winWidth = window.innerWidth\n const winHeight = window.innerHeight\n const panelRect = panelElement.getBoundingClientRect()\n const targetRect = target.getBoundingClientRect()\n const horizontalOffset = TRIANGLE_OFFSET * 1.5\n\n let posX = 0\n let posY = 0\n\n switch (trianglePosition) {\n case 'top-left':\n posX = targetRect.left + targetRect.width / 2 - horizontalOffset\n posY = targetRect.top + targetRect.height + VERTICAL_OFFSET\n break\n case 'top-center':\n posX = targetRect.left + targetRect.width / 2 - panelRect.width / 2\n posY = targetRect.top + targetRect.height + VERTICAL_OFFSET\n break\n case 'top-right':\n posX =\n targetRect.left + targetRect.width / 2 - panelRect.width + horizontalOffset\n posY = targetRect.top + targetRect.height + VERTICAL_OFFSET\n break\n case 'bottom-left':\n posX = targetRect.left + targetRect.width / 2 - horizontalOffset\n posY = targetRect.top - panelRect.height - VERTICAL_OFFSET\n break\n case 'bottom-center':\n posX = targetRect.left + targetRect.width / 2 - panelRect.width / 2\n posY = targetRect.top - panelRect.height - VERTICAL_OFFSET\n break\n case 'bottom-right':\n posX =\n targetRect.left + targetRect.width / 2 - panelRect.width + horizontalOffset\n posY = targetRect.top - panelRect.height - VERTICAL_OFFSET\n break\n case 'left-top':\n posX = targetRect.left + targetRect.width + VERTICAL_OFFSET\n posY = targetRect.top + targetRect.height / 2 - horizontalOffset\n break\n case 'left-center':\n posX = targetRect.left + targetRect.width + VERTICAL_OFFSET\n posY = targetRect.top + targetRect.height / 2 - panelRect.height / 2\n break\n case 'left-bottom':\n posX = targetRect.left + targetRect.width + VERTICAL_OFFSET\n posY =\n targetRect.top + targetRect.height / 2 - panelRect.height + horizontalOffset\n break\n case 'right-top':\n posX = targetRect.left - panelRect.width - VERTICAL_OFFSET\n posY = targetRect.top + targetRect.height / 2 - horizontalOffset\n break\n case 'right-center':\n posX = targetRect.left - panelRect.width - VERTICAL_OFFSET\n posY = targetRect.top + targetRect.height / 2 - panelRect.height / 2\n break\n case 'right-bottom':\n posX = targetRect.left - panelRect.width - VERTICAL_OFFSET\n posY =\n targetRect.top + targetRect.height / 2 - panelRect.height + horizontalOffset\n break\n default:\n break\n }\n\n posX = posX < TRIANGLE_OFFSET ? TRIANGLE_OFFSET : posX\n posX =\n posX + panelRect.width + TRIANGLE_OFFSET > winWidth\n ? winWidth - (panelRect.width + TRIANGLE_OFFSET)\n : posX\n\n posY = posY < TRIANGLE_OFFSET ? TRIANGLE_OFFSET : posY\n posY =\n posY + panelRect.height + TRIANGLE_OFFSET > winHeight\n ? winHeight - (panelRect.height + TRIANGLE_OFFSET)\n : posY\n\n panelElement.style.transform = `translate(${posX}px, ${posY}px)`\n }, [target, trianglePosition])\n\n const handleScroll = useCallback(\n (event: Event) => {\n const panelElement = panelRef.current\n if (panelElement && !panelElement.contains(event.target as Node)) {\n onClosed()\n }\n },\n [onClosed],\n )\n\n const handleOutsideClick = useCallback(\n (event: MouseEvent) => {\n const panelElement = panelRef.current\n if (panelElement && !panelElement.contains(event.target as Node)) {\n onOutsideClick?.(event)\n }\n },\n [onOutsideClick],\n )\n\n const watchComponent = useCallback(() => {\n if (watchTargetActive) {\n if (windowCenterToPage) setCenter()\n else setPosition()\n }\n\n if (target && !document.body.contains(target)) {\n clearInterval(watchIntervalRef.current)\n onClosed()\n }\n }, [onClosed, setCenter, setPosition, target, watchTargetActive, windowCenterToPage])\n\n const handleMouseMove = useCallback((event: MouseEvent) => {\n event.preventDefault()\n const reference = referencePosition.current\n const panelElement = panelRef.current\n if (!reference || !panelElement) return\n\n const posX = event.pageX - reference.x\n const posY = event.pageY - reference.y\n lastDragPosition.current = { x: posX, y: posY }\n\n if (isDraggingRef.current) {\n requestAnimationFrame(() => {\n panelElement.style.transform = `translate(${posX}px, ${posY}px)`\n })\n }\n setHolding(true)\n }, [])\n\n const handleMouseUp = useCallback(() => {\n document.removeEventListener('mouseup', handleMouseUp)\n document.removeEventListener('mousemove', handleMouseMove)\n isDraggingRef.current = false\n onPositionChange?.({\n x: lastDragPosition.current.x,\n y: lastDragPosition.current.y,\n })\n setHolding(false)\n }, [handleMouseMove, onPositionChange])\n\n const handlePanelMouseDown = useCallback(\n (event: MouseEvent) => {\n event.preventDefault()\n const panelElement = panelRef.current\n if (!panelElement) return\n const { left, top } = panelElement.getBoundingClientRect()\n referencePosition.current = { x: event.clientX - left, y: event.clientY - top }\n isDraggingRef.current = true\n document.addEventListener('mouseup', handleMouseUp)\n document.addEventListener('mousemove', handleMouseMove)\n },\n [handleMouseMove, handleMouseUp],\n )\n\n useEffect(() => {\n document.removeEventListener('mousedown', handleOutsideClick)\n clearInterval(watchIntervalRef.current)\n\n if (!isValidNumber(defaultPositionX) && !isValidNumber(defaultPositionY)) {\n if (windowCenterToPage) setCenter()\n else setPosition()\n }\n\n if (show) {\n document.addEventListener('mousedown', handleOutsideClick)\n }\n\n let watchedTimeout: ReturnType<typeof setTimeout> | undefined\n if (target) {\n watchIntervalRef.current = setInterval(watchComponent, 100)\n watchedTimeout = setTimeout(() => {\n panelRef.current?.classList.add('inconel-is-watched')\n }, 500)\n }\n\n return () => {\n document.removeEventListener('mousedown', handleOutsideClick)\n clearInterval(watchIntervalRef.current)\n clearTimeout(watchedTimeout)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [render, target, handleOutsideClick, windowCenterToPage, draggable])\n\n useEffect(() => {\n if (!closeOnScroll) return undefined\n window.addEventListener('scroll', handleScroll, true)\n return () => window.removeEventListener('scroll', handleScroll, true)\n }, [closeOnScroll, handleScroll])\n\n useEffect(() => {\n const contentElement = contentRef.current\n if (!contentElement || !draggable) return undefined\n contentElement.addEventListener('mousedown', handlePanelMouseDown)\n return () =>\n contentElement.removeEventListener('mousedown', handlePanelMouseDown)\n }, [draggable, handlePanelMouseDown, render])\n\n useEffect(() => {\n if (isValidNumber(defaultPositionX) && isValidNumber(defaultPositionY)) {\n panelRef.current?.style.setProperty(\n 'transform',\n `translate(${defaultPositionX}px, ${defaultPositionY}px)`,\n )\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n if (!show || !resolvedPortalTarget) return null\n\n const triangleClass = triangleShow ? trianglePosition : 'inconel-triangle-off'\n const transitionClass =\n transition === 'slide'\n ? `inconel-is-animated-${trianglePosition.split('-')[0]}`\n : transition === 'fade'\n ? 'inconel-is-animation-fade'\n : undefined\n\n return createPortal(\n <div\n id={id ?? undefined}\n className={classNames(\n 'inconel-floating-panel',\n triangleClass,\n transitionClass,\n holding && 'inconel-is-holding',\n className,\n )}\n ref={panelRef}\n style={{ transform: 'translate(-1000px, 0px)' }}\n >\n <div className=\"inconel-floating-panel__content\">\n {draggable && (\n <div className=\"inconel-floating-panel__drag-bg\" ref={contentRef} />\n )}\n {children}\n {closeButtonShow && (\n <div\n className=\"inconel-floating-panel__close\"\n role=\"button\"\n tabIndex={0}\n onClick={() => onClosed()}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') onClosed()\n }}\n >\n ×\n </div>\n )}\n </div>\n </div>,\n resolvedPortalTarget,\n )\n}\n"],"names":["TRIANGLE_OFFSET","VERTICAL_OFFSET","isValidNumber","value","FloatingPanel","id","className","target","watchTarget","trianglePosition","triangleShow","windowCenterToPage","closeButtonShow","onClosed","onOutsideClick","closeOnScroll","transition","draggable","defaultPositionX","defaultPositionY","onPositionChange","render","children","portalTarget","holding","setHolding","useState","panelRef","useRef","contentRef","referencePosition","lastDragPosition","watchIntervalRef","isDraggingRef","resolvedPortalTarget","show","watchTargetActive","setCenter","useCallback","panelElement","width","height","halfBrowserWidth","halfBrowserHeight","setPosition","winWidth","winHeight","panelRect","targetRect","horizontalOffset","posX","posY","handleScroll","event","handleOutsideClick","watchComponent","handleMouseMove","reference","handleMouseUp","handlePanelMouseDown","left","top","useEffect","watchedTimeout","contentElement","triangleClass","transitionClass","createPortal","jsx","classNames","jsxs"],"mappings":";;;;;AA+CA,MAAMA,IAAkB,IAClBC,IAAkB;AAExB,SAASC,EAAcC,GAAmD;AACxE,SAAOA,KAAU,QAA+B,CAAC,OAAO,MAAMA,CAAK;AACrE;AAEO,SAASC,GAAc;AAAA,EAC5B,IAAAC,IAAK;AAAA,EACL,WAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,aAAAC,IAAc;AAAA,EACd,kBAAAC,IAAmB;AAAA,EACnB,cAAAC,IAAe;AAAA,EACf,oBAAAC,IAAqB;AAAA,EACrB,iBAAAC,IAAkB;AAAA,EAClB,UAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,YAAAC,IAAa;AAAA,EACb,WAAAC,IAAY;AAAA,EACZ,kBAAAC,IAAmB;AAAA,EACnB,kBAAAC,IAAmB;AAAA,EACnB,kBAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,UAAAC;AAAA,EACA,cAAAC;AACF,GAAuB;AACrB,QAAM,CAACC,GAASC,CAAU,IAAIC,GAAS,EAAK,GACtCC,IAAWC,EAAuB,IAAI,GACtCC,IAAaD,EAAuB,IAAI,GACxCE,IAAoBF,EAAwC,IAAI,GAChEG,IAAmBH,EAA8B,EAAE,GAAG,MAAM,GAAG,MAAM,GACrEI,IAAmBJ;AAAA,IACvB;AAAA,EAAA,GAEIK,IAAgBL,EAAO,EAAK,GAE5BM,IACJX,MAAiB,OAAO,WAAa,MAAc,SAAS,OAAO,OAC/DY,IAAOd,KAAUa,MAAyB,MAC1CE,IAAoB,CAACnB,KAAaT,KAAe2B,GAEjDE,IAAYC,EAAY,MAAM;AAClC,UAAMC,IAAeZ,EAAS;AAC9B,QAAI,CAACY,EAAc;AACnB,UAAM,EAAE,OAAAC,GAAO,QAAAC,MAAWF,EAAa,sBAAA,GACjCG,IAAmB,OAAO,aAAa,GACvCC,IAAoB,OAAO,cAAc;AAC/C,IAAAJ,EAAa,MAAM,YAAY,aAAaG,IAAmBF,IAAQ,CAAC,OACtEG,IAAoBF,IAAS,CAC/B;AAAA,EACF,GAAG,CAAA,CAAE,GAECG,IAAcN,EAAY,MAAM;AACpC,UAAMC,IAAeZ,EAAS;AAC9B,QAAI,CAACY,KAAgB,CAAChC,EAAQ;AAE9B,UAAMsC,IAAW,OAAO,YAClBC,IAAY,OAAO,aACnBC,IAAYR,EAAa,sBAAA,GACzBS,IAAazC,EAAO,sBAAA,GACpB0C,IAAmBjD,IAAkB;AAE3C,QAAIkD,IAAO,GACPC,IAAO;AAEX,YAAQ1C,GAAA;AAAA,MACN,KAAK;AACH,QAAAyC,IAAOF,EAAW,OAAOA,EAAW,QAAQ,IAAIC,GAChDE,IAAOH,EAAW,MAAMA,EAAW,SAAS/C;AAC5C;AAAA,MACF,KAAK;AACH,QAAAiD,IAAOF,EAAW,OAAOA,EAAW,QAAQ,IAAID,EAAU,QAAQ,GAClEI,IAAOH,EAAW,MAAMA,EAAW,SAAS/C;AAC5C;AAAA,MACF,KAAK;AACH,QAAAiD,IACEF,EAAW,OAAOA,EAAW,QAAQ,IAAID,EAAU,QAAQE,GAC7DE,IAAOH,EAAW,MAAMA,EAAW,SAAS/C;AAC5C;AAAA,MACF,KAAK;AACH,QAAAiD,IAAOF,EAAW,OAAOA,EAAW,QAAQ,IAAIC,GAChDE,IAAOH,EAAW,MAAMD,EAAU,SAAS9C;AAC3C;AAAA,MACF,KAAK;AACH,QAAAiD,IAAOF,EAAW,OAAOA,EAAW,QAAQ,IAAID,EAAU,QAAQ,GAClEI,IAAOH,EAAW,MAAMD,EAAU,SAAS9C;AAC3C;AAAA,MACF,KAAK;AACH,QAAAiD,IACEF,EAAW,OAAOA,EAAW,QAAQ,IAAID,EAAU,QAAQE,GAC7DE,IAAOH,EAAW,MAAMD,EAAU,SAAS9C;AAC3C;AAAA,MACF,KAAK;AACH,QAAAiD,IAAOF,EAAW,OAAOA,EAAW,QAAQ/C,GAC5CkD,IAAOH,EAAW,MAAMA,EAAW,SAAS,IAAIC;AAChD;AAAA,MACF,KAAK;AACH,QAAAC,IAAOF,EAAW,OAAOA,EAAW,QAAQ/C,GAC5CkD,IAAOH,EAAW,MAAMA,EAAW,SAAS,IAAID,EAAU,SAAS;AACnE;AAAA,MACF,KAAK;AACH,QAAAG,IAAOF,EAAW,OAAOA,EAAW,QAAQ/C,GAC5CkD,IACEH,EAAW,MAAMA,EAAW,SAAS,IAAID,EAAU,SAASE;AAC9D;AAAA,MACF,KAAK;AACH,QAAAC,IAAOF,EAAW,OAAOD,EAAU,QAAQ9C,GAC3CkD,IAAOH,EAAW,MAAMA,EAAW,SAAS,IAAIC;AAChD;AAAA,MACF,KAAK;AACH,QAAAC,IAAOF,EAAW,OAAOD,EAAU,QAAQ9C,GAC3CkD,IAAOH,EAAW,MAAMA,EAAW,SAAS,IAAID,EAAU,SAAS;AACnE;AAAA,MACF,KAAK;AACH,QAAAG,IAAOF,EAAW,OAAOD,EAAU,QAAQ9C,GAC3CkD,IACEH,EAAW,MAAMA,EAAW,SAAS,IAAID,EAAU,SAASE;AAC9D;AAAA,IAEA;AAGJ,IAAAC,IAAOA,IAAOlD,IAAkBA,IAAkBkD,GAClDA,IACEA,IAAOH,EAAU,QAAQ/C,IAAkB6C,IACvCA,KAAYE,EAAU,QAAQ/C,KAC9BkD,GAENC,IAAOA,IAAOnD,IAAkBA,IAAkBmD,GAClDA,IACEA,IAAOJ,EAAU,SAAS/C,IAAkB8C,IACxCA,KAAaC,EAAU,SAAS/C,KAChCmD,GAENZ,EAAa,MAAM,YAAY,aAAaW,CAAI,OAAOC,CAAI;AAAA,EAC7D,GAAG,CAAC5C,GAAQE,CAAgB,CAAC,GAEvB2C,IAAed;AAAA,IACnB,CAACe,MAAiB;AAChB,YAAMd,IAAeZ,EAAS;AAC9B,MAAIY,KAAgB,CAACA,EAAa,SAASc,EAAM,MAAc,KAC7DxC,EAAA;AAAA,IAEJ;AAAA,IACA,CAACA,CAAQ;AAAA,EAAA,GAGLyC,IAAqBhB;AAAA,IACzB,CAACe,MAAsB;AACrB,YAAMd,IAAeZ,EAAS;AAC9B,MAAIY,KAAgB,CAACA,EAAa,SAASc,EAAM,MAAc,KAC7DvC,IAAiBuC,CAAK;AAAA,IAE1B;AAAA,IACA,CAACvC,CAAc;AAAA,EAAA,GAGXyC,IAAiBjB,EAAY,MAAM;AACvC,IAAIF,MACEzB,IAAoB0B,EAAA,IACnBO,EAAA,IAGHrC,KAAU,CAAC,SAAS,KAAK,SAASA,CAAM,MAC1C,cAAcyB,EAAiB,OAAO,GACtCnB,EAAA;AAAA,EAEJ,GAAG,CAACA,GAAUwB,GAAWO,GAAarC,GAAQ6B,GAAmBzB,CAAkB,CAAC,GAE9E6C,IAAkBlB,EAAY,CAACe,MAAsB;AACzD,IAAAA,EAAM,eAAA;AACN,UAAMI,IAAY3B,EAAkB,SAC9BS,IAAeZ,EAAS;AAC9B,QAAI,CAAC8B,KAAa,CAAClB,EAAc;AAEjC,UAAMW,IAAOG,EAAM,QAAQI,EAAU,GAC/BN,IAAOE,EAAM,QAAQI,EAAU;AACrC,IAAA1B,EAAiB,UAAU,EAAE,GAAGmB,GAAM,GAAGC,EAAA,GAErClB,EAAc,WAChB,sBAAsB,MAAM;AAC1B,MAAAM,EAAa,MAAM,YAAY,aAAaW,CAAI,OAAOC,CAAI;AAAA,IAC7D,CAAC,GAEH1B,EAAW,EAAI;AAAA,EACjB,GAAG,CAAA,CAAE,GAECiC,IAAgBpB,EAAY,MAAM;AACtC,aAAS,oBAAoB,WAAWoB,CAAa,GACrD,SAAS,oBAAoB,aAAaF,CAAe,GACzDvB,EAAc,UAAU,IACxBb,IAAmB;AAAA,MACjB,GAAGW,EAAiB,QAAQ;AAAA,MAC5B,GAAGA,EAAiB,QAAQ;AAAA,IAAA,CAC7B,GACDN,EAAW,EAAK;AAAA,EAClB,GAAG,CAAC+B,GAAiBpC,CAAgB,CAAC,GAEhCuC,IAAuBrB;AAAA,IAC3B,CAACe,MAAsB;AACrB,MAAAA,EAAM,eAAA;AACN,YAAMd,IAAeZ,EAAS;AAC9B,UAAI,CAACY,EAAc;AACnB,YAAM,EAAE,MAAAqB,GAAM,KAAAC,MAAQtB,EAAa,sBAAA;AACnC,MAAAT,EAAkB,UAAU,EAAE,GAAGuB,EAAM,UAAUO,GAAM,GAAGP,EAAM,UAAUQ,EAAA,GAC1E5B,EAAc,UAAU,IACxB,SAAS,iBAAiB,WAAWyB,CAAa,GAClD,SAAS,iBAAiB,aAAaF,CAAe;AAAA,IACxD;AAAA,IACA,CAACA,GAAiBE,CAAa;AAAA,EAAA;AAwDjC,MArDAI,EAAU,MAAM;AACd,aAAS,oBAAoB,aAAaR,CAAkB,GAC5D,cAActB,EAAiB,OAAO,GAElC,CAAC9B,EAAcgB,CAAgB,KAAK,CAAChB,EAAciB,CAAgB,MACjER,IAAoB0B,EAAA,IACnBO,EAAA,IAGHT,KACF,SAAS,iBAAiB,aAAamB,CAAkB;AAG3D,QAAIS;AACJ,WAAIxD,MACFyB,EAAiB,UAAU,YAAYuB,GAAgB,GAAG,GAC1DQ,IAAiB,WAAW,MAAM;AAChC,MAAApC,EAAS,SAAS,UAAU,IAAI,oBAAoB;AAAA,IACtD,GAAG,GAAG,IAGD,MAAM;AACX,eAAS,oBAAoB,aAAa2B,CAAkB,GAC5D,cAActB,EAAiB,OAAO,GACtC,aAAa+B,CAAc;AAAA,IAC7B;AAAA,EAEF,GAAG,CAAC1C,GAAQd,GAAQ+C,GAAoB3C,GAAoBM,CAAS,CAAC,GAEtE6C,EAAU,MAAM;AACd,QAAK/C;AACL,oBAAO,iBAAiB,UAAUqC,GAAc,EAAI,GAC7C,MAAM,OAAO,oBAAoB,UAAUA,GAAc,EAAI;AAAA,EACtE,GAAG,CAACrC,GAAeqC,CAAY,CAAC,GAEhCU,EAAU,MAAM;AACd,UAAME,IAAiBnC,EAAW;AAClC,QAAI,GAACmC,KAAkB,CAAC/C;AACxB,aAAA+C,EAAe,iBAAiB,aAAaL,CAAoB,GAC1D,MACLK,EAAe,oBAAoB,aAAaL,CAAoB;AAAA,EACxE,GAAG,CAAC1C,GAAW0C,GAAsBtC,CAAM,CAAC,GAE5CyC,EAAU,MAAM;AACd,IAAI5D,EAAcgB,CAAgB,KAAKhB,EAAciB,CAAgB,KACnEQ,EAAS,SAAS,MAAM;AAAA,MACtB;AAAA,MACA,aAAaT,CAAgB,OAAOC,CAAgB;AAAA,IAAA;AAAA,EAI1D,GAAG,CAAA,CAAE,GAED,CAACgB,KAAQ,CAACD,EAAsB,QAAO;AAE3C,QAAM+B,IAAgBvD,IAAeD,IAAmB,wBAClDyD,KACJlD,MAAe,UACX,uBAAuBP,EAAiB,MAAM,GAAG,EAAE,CAAC,CAAC,KACrDO,MAAe,SACb,8BACA;AAER,SAAOmD;AAAA,IACL,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAI/D,KAAM;AAAA,QACV,WAAWgE;AAAA,UACT;AAAA,UACAJ;AAAA,UACAC;AAAA,UACA1C,KAAW;AAAA,UACXlB;AAAA,QAAA;AAAA,QAEF,KAAKqB;AAAA,QACL,OAAO,EAAE,WAAW,0BAAA;AAAA,QAEpB,UAAA,gBAAA2C,GAAC,OAAA,EAAI,WAAU,mCACZ,UAAA;AAAA,UAAArD,KACC,gBAAAmD,EAAC,OAAA,EAAI,WAAU,mCAAkC,KAAKvC,GAAY;AAAA,UAEnEP;AAAA,UACAV,KACC,gBAAAwD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,UAAU;AAAA,cACV,SAAS,MAAMvD,EAAA;AAAA,cACf,WAAW,CAACwC,MAAU;AACpB,iBAAIA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,QAAKxC,EAAA;AAAA,cAClD;AAAA,cACD,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEFqB;AAAA,EAAA;AAEJ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FloatingPanel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface MultiSelectCheckBoxOption {
|
|
3
|
+
[key: string]: unknown;
|
|
4
|
+
}
|
|
5
|
+
export interface MultiSelectCheckBoxProps<T extends MultiSelectCheckBoxOption = MultiSelectCheckBoxOption> {
|
|
6
|
+
id?: string | null;
|
|
7
|
+
label?: ReactNode;
|
|
8
|
+
className?: string | null;
|
|
9
|
+
labelClassName?: string | null;
|
|
10
|
+
inputClassName?: string | null;
|
|
11
|
+
optionsClassName?: string | null;
|
|
12
|
+
optionItemClassName?: string | null;
|
|
13
|
+
searchableInputClassName?: string | null;
|
|
14
|
+
options?: T[];
|
|
15
|
+
defaultSelectedOptions?: T[];
|
|
16
|
+
optionLabel?: string;
|
|
17
|
+
optionValue?: string;
|
|
18
|
+
onChange?: (selected: T[]) => void;
|
|
19
|
+
placeholder?: string;
|
|
20
|
+
selectedInputMessage?: string;
|
|
21
|
+
itemSelectedText?: string;
|
|
22
|
+
selectAllText?: string;
|
|
23
|
+
searchPlaceholder?: string;
|
|
24
|
+
noDataMessage?: string;
|
|
25
|
+
errorMessage?: string;
|
|
26
|
+
errorPlace?: 'in' | 'out';
|
|
27
|
+
isSearchable?: boolean;
|
|
28
|
+
isLoading?: boolean;
|
|
29
|
+
isDisabled?: boolean;
|
|
30
|
+
reactPortal?: boolean;
|
|
31
|
+
windowPosition?: boolean;
|
|
32
|
+
windowHeight?: number;
|
|
33
|
+
windowClose?: (closed: boolean) => void;
|
|
34
|
+
isScrollEnd?: (end: boolean) => void;
|
|
35
|
+
getOptionTooltip?: (option: T) => string | undefined;
|
|
36
|
+
limit?: number | null;
|
|
37
|
+
selectionLimit?: number | null;
|
|
38
|
+
}
|
|
39
|
+
export declare function MultiSelectCheckBox<T extends MultiSelectCheckBoxOption = MultiSelectCheckBoxOption>({ id, label, className, labelClassName, inputClassName, optionsClassName, optionItemClassName, searchableInputClassName, options, defaultSelectedOptions, optionLabel, optionValue, onChange, placeholder, selectedInputMessage, itemSelectedText, selectAllText, searchPlaceholder, noDataMessage, errorMessage, errorPlace, isSearchable, isLoading, isDisabled, reactPortal, windowPosition, windowHeight, windowClose, isScrollEnd, getOptionTooltip, limit, selectionLimit, }: MultiSelectCheckBoxProps<T>): import("react").JSX.Element;
|
|
40
|
+
//# sourceMappingURL=MultiSelectCheckBox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiSelectCheckBox.d.ts","sourceRoot":"","sources":["../../../src/components/MultiSelectCheckBox/MultiSelectCheckBox.tsx"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAA;AAKd,OAAO,cAAc,CAAA;AAErB,MAAM,WAAW,yBAAyB;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,wBAAwB,CACvC,CAAC,SAAS,yBAAyB,GAAG,yBAAyB;IAE/D,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,wBAAwB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAA;IACb,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,CAAA;IACzB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IACvC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;IACpC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,CAAA;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAcD,wBAAgB,mBAAmB,CACjC,CAAC,SAAS,yBAAyB,GAAG,yBAAyB,EAC/D,EACA,EAAS,EACT,KAAY,EACZ,SAAgB,EAChB,cAAqB,EACrB,cAAqB,EACrB,gBAAuB,EACvB,mBAA0B,EAC1B,wBAA+B,EAC/B,OAAuB,EACvB,sBAAsC,EACtC,WAAqB,EACrB,WAAqB,EACrB,QAAQ,EACR,WAAuB,EACvB,oBAAoB,EACpB,gBAA+B,EAC/B,aAA4B,EAC5B,iBAAyB,EACzB,aAAiC,EACjC,YAAiB,EACjB,UAAkB,EAClB,YAAoB,EACpB,SAAiB,EACjB,UAAkB,EAClB,WAAmB,EACnB,cAAsB,EACtB,YAAkB,EAClB,WAAW,EACX,WAAW,EACX,gBACkE,EAClE,KAAY,EACZ,cAAqB,GACtB,EAAE,wBAAwB,CAAC,CAAC,CAAC,+BAwX7B"}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { jsx as t, jsxs as p } from "react/jsx-runtime";
|
|
2
|
+
import { useRef as F, useState as b, useCallback as v, useEffect as k, useLayoutEffect as Se, useMemo as I } from "react";
|
|
3
|
+
import { createPortal as Ee } from "react-dom";
|
|
4
|
+
import { classNames as u } from "../shared/classNames.js";
|
|
5
|
+
/* empty css */
|
|
6
|
+
import { DotLoader as Le } from "../DotLoader/DotLoader.js";
|
|
7
|
+
const te = [];
|
|
8
|
+
function C(y, N, w) {
|
|
9
|
+
return y.some(
|
|
10
|
+
(T) => T?.[w] === N?.[w]
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
function Ae({
|
|
14
|
+
id: y = null,
|
|
15
|
+
label: N = null,
|
|
16
|
+
className: w = null,
|
|
17
|
+
labelClassName: T = null,
|
|
18
|
+
inputClassName: le = null,
|
|
19
|
+
optionsClassName: ce = null,
|
|
20
|
+
optionItemClassName: j = null,
|
|
21
|
+
searchableInputClassName: ie = null,
|
|
22
|
+
options: S = te,
|
|
23
|
+
defaultSelectedOptions: E = te,
|
|
24
|
+
optionLabel: _ = "label",
|
|
25
|
+
optionValue: c = "value",
|
|
26
|
+
onChange: B,
|
|
27
|
+
placeholder: K = "Seçiniz",
|
|
28
|
+
selectedInputMessage: q,
|
|
29
|
+
itemSelectedText: H = "öğe seçili",
|
|
30
|
+
selectAllText: oe = "Tümünü Seç",
|
|
31
|
+
searchPlaceholder: se = "Ara",
|
|
32
|
+
noDataMessage: re = "Veri bulunamadı",
|
|
33
|
+
errorMessage: L = "",
|
|
34
|
+
errorPlace: W = "out",
|
|
35
|
+
isSearchable: ue = !1,
|
|
36
|
+
isLoading: ae = !1,
|
|
37
|
+
isDisabled: m = !1,
|
|
38
|
+
reactPortal: i = !1,
|
|
39
|
+
windowPosition: Y = !1,
|
|
40
|
+
windowHeight: G = 800,
|
|
41
|
+
windowClose: J,
|
|
42
|
+
isScrollEnd: M,
|
|
43
|
+
getOptionTooltip: de = (x) => typeof x?.tooltip == "string" ? x.tooltip : void 0,
|
|
44
|
+
limit: he = null,
|
|
45
|
+
selectionLimit: me = null
|
|
46
|
+
}) {
|
|
47
|
+
const x = F(null), $ = F(null), P = F(null), [o, Q] = b(!1), [n, U] = b(
|
|
48
|
+
E
|
|
49
|
+
), [X, fe] = b(
|
|
50
|
+
null
|
|
51
|
+
), [D, Z] = b(""), [pe, be] = b(null), [ve, V] = b(!1), s = Number(he ?? me), a = Number.isFinite(s) && s > 0, R = v(() => {
|
|
52
|
+
if (!i || !$.current) return;
|
|
53
|
+
const e = $.current.getBoundingClientRect();
|
|
54
|
+
be({
|
|
55
|
+
position: "fixed",
|
|
56
|
+
left: e.left,
|
|
57
|
+
top: e.bottom,
|
|
58
|
+
width: e.width,
|
|
59
|
+
zIndex: 9999
|
|
60
|
+
}), V(!0);
|
|
61
|
+
}, [i]);
|
|
62
|
+
k(() => {
|
|
63
|
+
const e = a ? E.slice(0, s) : E;
|
|
64
|
+
U(e);
|
|
65
|
+
}, [E, a, s]), k(() => {
|
|
66
|
+
o || (J?.(!0), Z(""));
|
|
67
|
+
}, [o, J]), k(() => {
|
|
68
|
+
if (!o) return;
|
|
69
|
+
const e = x.current, l = P.current, r = (h) => {
|
|
70
|
+
const g = h.target, O = e?.contains(g), we = l?.contains(g);
|
|
71
|
+
!O && !we && Q(!1);
|
|
72
|
+
};
|
|
73
|
+
return document.addEventListener("pointerdown", r, !0), () => document.removeEventListener("pointerdown", r, !0);
|
|
74
|
+
}, [o]), Se(() => {
|
|
75
|
+
if (!o) {
|
|
76
|
+
V(!1);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
i && R();
|
|
80
|
+
}, [o, i, R]), k(() => {
|
|
81
|
+
if (!o || !i) return;
|
|
82
|
+
const e = () => R();
|
|
83
|
+
return window.addEventListener("resize", e), window.addEventListener("scroll", e, !0), () => {
|
|
84
|
+
window.removeEventListener("resize", e), window.removeEventListener("scroll", e, !0);
|
|
85
|
+
};
|
|
86
|
+
}, [o, i, R]), k(() => {
|
|
87
|
+
Y && fe(Number(G) < 800 ? "top" : "bottom");
|
|
88
|
+
}, [G, Y]);
|
|
89
|
+
const f = v(
|
|
90
|
+
(e) => {
|
|
91
|
+
U(e), B?.(e);
|
|
92
|
+
},
|
|
93
|
+
[B]
|
|
94
|
+
), _e = v(
|
|
95
|
+
(e) => {
|
|
96
|
+
const l = e.currentTarget;
|
|
97
|
+
l.scrollHeight - l.scrollTop <= l.clientHeight + 1 && M?.(!0);
|
|
98
|
+
},
|
|
99
|
+
[M]
|
|
100
|
+
), xe = v(
|
|
101
|
+
(e) => {
|
|
102
|
+
if (C(n, e, c)) {
|
|
103
|
+
f(
|
|
104
|
+
n.filter(
|
|
105
|
+
(l) => l?.[c] !== e?.[c]
|
|
106
|
+
)
|
|
107
|
+
);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
a && n.length >= s || f([...n, e]);
|
|
111
|
+
},
|
|
112
|
+
[
|
|
113
|
+
a,
|
|
114
|
+
s,
|
|
115
|
+
c,
|
|
116
|
+
n,
|
|
117
|
+
f
|
|
118
|
+
]
|
|
119
|
+
), d = I(() => {
|
|
120
|
+
const e = D.trim().toLocaleLowerCase();
|
|
121
|
+
return e ? S.filter(
|
|
122
|
+
(l) => String(l?.[_] ?? "").toLocaleLowerCase().includes(e)
|
|
123
|
+
) : S;
|
|
124
|
+
}, [S, _, D]), ge = I(() => n.length === 0 ? "" : n.length === 1 ? String(n[0]?.[_] ?? "") : `${n.length} ${q || H}`, [H, _, q, n]), ke = W === "in" && L || K, ee = v(() => {
|
|
125
|
+
m || Q((e) => !e);
|
|
126
|
+
}, [m]), ye = (e) => {
|
|
127
|
+
(e.key === "Enter" || e.key === " ") && (e.preventDefault(), ee());
|
|
128
|
+
}, z = I(
|
|
129
|
+
() => d.length > 0 && d.every(
|
|
130
|
+
(e) => C(n, e, c)
|
|
131
|
+
),
|
|
132
|
+
[d, c, n]
|
|
133
|
+
), Ne = v(() => {
|
|
134
|
+
if (z) {
|
|
135
|
+
f(
|
|
136
|
+
n.filter(
|
|
137
|
+
(r) => !d.some(
|
|
138
|
+
(h) => r?.[c] === h?.[c]
|
|
139
|
+
)
|
|
140
|
+
)
|
|
141
|
+
);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const e = d.filter(
|
|
145
|
+
(r) => !C(n, r, c)
|
|
146
|
+
), l = a ? e.slice(0, Math.max(s - n.length, 0)) : e;
|
|
147
|
+
f([...n, ...l]);
|
|
148
|
+
}, [
|
|
149
|
+
z,
|
|
150
|
+
d,
|
|
151
|
+
a,
|
|
152
|
+
s,
|
|
153
|
+
c,
|
|
154
|
+
n,
|
|
155
|
+
f
|
|
156
|
+
]), A = y || "inconel-multi-select-checkbox", ne = /* @__PURE__ */ t(
|
|
157
|
+
"div",
|
|
158
|
+
{
|
|
159
|
+
ref: i ? P : void 0,
|
|
160
|
+
className: u(
|
|
161
|
+
"inconel-multi-select-checkbox__panel-wrap",
|
|
162
|
+
i && "inconel-multi-select-checkbox__panel-wrap--portal",
|
|
163
|
+
X === "top" && "inconel-is-open-top"
|
|
164
|
+
),
|
|
165
|
+
style: i ? { ...pe ?? {}, visibility: ve ? "visible" : "hidden" } : void 0,
|
|
166
|
+
onPointerDown: (e) => e.stopPropagation(),
|
|
167
|
+
children: /* @__PURE__ */ p(
|
|
168
|
+
"div",
|
|
169
|
+
{
|
|
170
|
+
className: u(
|
|
171
|
+
"inconel-multi-select-checkbox__options",
|
|
172
|
+
i && "inconel-multi-select-checkbox__options--portal",
|
|
173
|
+
ce
|
|
174
|
+
),
|
|
175
|
+
onScroll: _e,
|
|
176
|
+
children: [
|
|
177
|
+
ue && /* @__PURE__ */ t("div", { className: "inconel-multi-select-checkbox__search", children: /* @__PURE__ */ t(
|
|
178
|
+
"input",
|
|
179
|
+
{
|
|
180
|
+
type: "text",
|
|
181
|
+
placeholder: se,
|
|
182
|
+
className: u(
|
|
183
|
+
"inconel-multi-select-checkbox__search-input",
|
|
184
|
+
ie
|
|
185
|
+
),
|
|
186
|
+
value: D,
|
|
187
|
+
onChange: (e) => Z(e.target.value),
|
|
188
|
+
disabled: m
|
|
189
|
+
}
|
|
190
|
+
) }),
|
|
191
|
+
/* @__PURE__ */ p(
|
|
192
|
+
"div",
|
|
193
|
+
{
|
|
194
|
+
className: u(
|
|
195
|
+
"inconel-multi-select-checkbox__option-item",
|
|
196
|
+
j
|
|
197
|
+
),
|
|
198
|
+
children: [
|
|
199
|
+
/* @__PURE__ */ t(
|
|
200
|
+
"input",
|
|
201
|
+
{
|
|
202
|
+
id: `${A}-select-all`,
|
|
203
|
+
type: "checkbox",
|
|
204
|
+
checked: z,
|
|
205
|
+
onChange: Ne,
|
|
206
|
+
disabled: m
|
|
207
|
+
}
|
|
208
|
+
),
|
|
209
|
+
/* @__PURE__ */ t("label", { htmlFor: `${A}-select-all`, children: oe })
|
|
210
|
+
]
|
|
211
|
+
}
|
|
212
|
+
),
|
|
213
|
+
d.map((e, l) => {
|
|
214
|
+
const r = e?.[c] ?? l, h = C(n, e, c), g = m || !h && a && n.length >= s, O = `${A}-${String(r)}`;
|
|
215
|
+
return /* @__PURE__ */ p(
|
|
216
|
+
"div",
|
|
217
|
+
{
|
|
218
|
+
className: u(
|
|
219
|
+
"inconel-multi-select-checkbox__option-item",
|
|
220
|
+
h && "inconel-is-selected",
|
|
221
|
+
g && "inconel-is-disabled",
|
|
222
|
+
j
|
|
223
|
+
),
|
|
224
|
+
title: de(e),
|
|
225
|
+
children: [
|
|
226
|
+
/* @__PURE__ */ t(
|
|
227
|
+
"input",
|
|
228
|
+
{
|
|
229
|
+
id: O,
|
|
230
|
+
type: "checkbox",
|
|
231
|
+
checked: h,
|
|
232
|
+
onChange: () => xe(e),
|
|
233
|
+
disabled: g
|
|
234
|
+
}
|
|
235
|
+
),
|
|
236
|
+
/* @__PURE__ */ t("label", { htmlFor: O, children: String(e?.[_] ?? "") })
|
|
237
|
+
]
|
|
238
|
+
},
|
|
239
|
+
String(r)
|
|
240
|
+
);
|
|
241
|
+
})
|
|
242
|
+
]
|
|
243
|
+
}
|
|
244
|
+
)
|
|
245
|
+
}
|
|
246
|
+
);
|
|
247
|
+
return /* @__PURE__ */ p(
|
|
248
|
+
"div",
|
|
249
|
+
{
|
|
250
|
+
ref: x,
|
|
251
|
+
id: y ?? void 0,
|
|
252
|
+
className: u(
|
|
253
|
+
"inconel-multi-select-checkbox",
|
|
254
|
+
L && "inconel-is-error",
|
|
255
|
+
m && "inconel-is-disabled",
|
|
256
|
+
X === "top" && !i && "inconel-is-open-top",
|
|
257
|
+
w
|
|
258
|
+
),
|
|
259
|
+
children: [
|
|
260
|
+
N && /* @__PURE__ */ t(
|
|
261
|
+
"span",
|
|
262
|
+
{
|
|
263
|
+
className: u(
|
|
264
|
+
"inconel-multi-select-checkbox__label",
|
|
265
|
+
T
|
|
266
|
+
),
|
|
267
|
+
children: N
|
|
268
|
+
}
|
|
269
|
+
),
|
|
270
|
+
/* @__PURE__ */ p("div", { className: "inconel-multi-select-checkbox__input-wrap", children: [
|
|
271
|
+
ae && /* @__PURE__ */ t("div", { className: "inconel-multi-select-checkbox__loader-cover", children: /* @__PURE__ */ t(Le, {}) }),
|
|
272
|
+
/* @__PURE__ */ p(
|
|
273
|
+
"div",
|
|
274
|
+
{
|
|
275
|
+
ref: $,
|
|
276
|
+
role: "button",
|
|
277
|
+
tabIndex: 0,
|
|
278
|
+
className: "inconel-multi-select-checkbox__input-container",
|
|
279
|
+
onClick: ee,
|
|
280
|
+
onKeyDown: ye,
|
|
281
|
+
children: [
|
|
282
|
+
/* @__PURE__ */ t(
|
|
283
|
+
"input",
|
|
284
|
+
{
|
|
285
|
+
type: "text",
|
|
286
|
+
className: u(
|
|
287
|
+
"inconel-multi-select-checkbox__input",
|
|
288
|
+
le
|
|
289
|
+
),
|
|
290
|
+
placeholder: ke,
|
|
291
|
+
readOnly: !0,
|
|
292
|
+
value: ge
|
|
293
|
+
}
|
|
294
|
+
),
|
|
295
|
+
/* @__PURE__ */ t(
|
|
296
|
+
"span",
|
|
297
|
+
{
|
|
298
|
+
className: "inconel-multi-select-checkbox__indicator",
|
|
299
|
+
"aria-hidden": "true"
|
|
300
|
+
}
|
|
301
|
+
)
|
|
302
|
+
]
|
|
303
|
+
}
|
|
304
|
+
)
|
|
305
|
+
] }),
|
|
306
|
+
o && (S.length > 0 ? i ? Ee(ne, document.body) : ne : /* @__PURE__ */ t("div", { className: "inconel-multi-select-checkbox__nodata", children: /* @__PURE__ */ t("span", { children: re }) })),
|
|
307
|
+
W !== "in" && L && /* @__PURE__ */ t("span", { className: "inconel-multi-select-checkbox__error", children: L })
|
|
308
|
+
]
|
|
309
|
+
}
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
export {
|
|
313
|
+
Ae as MultiSelectCheckBox
|
|
314
|
+
};
|
|
315
|
+
//# sourceMappingURL=MultiSelectCheckBox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiSelectCheckBox.js","sources":["../../../src/components/MultiSelectCheckBox/MultiSelectCheckBox.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type CSSProperties,\n type KeyboardEvent,\n type ReactNode,\n type UIEvent,\n} from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { DotLoader } from '../DotLoader'\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface MultiSelectCheckBoxOption {\n [key: string]: unknown\n}\n\nexport interface MultiSelectCheckBoxProps<\n T extends MultiSelectCheckBoxOption = MultiSelectCheckBoxOption,\n> {\n id?: string | null\n label?: ReactNode\n className?: string | null\n labelClassName?: string | null\n inputClassName?: string | null\n optionsClassName?: string | null\n optionItemClassName?: string | null\n searchableInputClassName?: string | null\n options?: T[]\n defaultSelectedOptions?: T[]\n optionLabel?: string\n optionValue?: string\n onChange?: (selected: T[]) => void\n placeholder?: string\n selectedInputMessage?: string\n itemSelectedText?: string\n selectAllText?: string\n searchPlaceholder?: string\n noDataMessage?: string\n errorMessage?: string\n errorPlace?: 'in' | 'out'\n isSearchable?: boolean\n isLoading?: boolean\n isDisabled?: boolean\n reactPortal?: boolean\n windowPosition?: boolean\n windowHeight?: number\n windowClose?: (closed: boolean) => void\n isScrollEnd?: (end: boolean) => void\n getOptionTooltip?: (option: T) => string | undefined\n limit?: number | null\n selectionLimit?: number | null\n}\n\nconst EMPTY_OPTIONS: never[] = []\n\nfunction isOptionSelected<T extends MultiSelectCheckBoxOption>(\n selected: T[],\n option: T,\n optionValue: string,\n) {\n return selected.some(\n (item) => item?.[optionValue] === option?.[optionValue],\n )\n}\n\nexport function MultiSelectCheckBox<\n T extends MultiSelectCheckBoxOption = MultiSelectCheckBoxOption,\n>({\n id = null,\n label = null,\n className = null,\n labelClassName = null,\n inputClassName = null,\n optionsClassName = null,\n optionItemClassName = null,\n searchableInputClassName = null,\n options = EMPTY_OPTIONS,\n defaultSelectedOptions = EMPTY_OPTIONS,\n optionLabel = 'label',\n optionValue = 'value',\n onChange,\n placeholder = 'Seçiniz',\n selectedInputMessage,\n itemSelectedText = 'öğe seçili',\n selectAllText = 'Tümünü Seç',\n searchPlaceholder = 'Ara',\n noDataMessage = 'Veri bulunamadı',\n errorMessage = '',\n errorPlace = 'out',\n isSearchable = false,\n isLoading = false,\n isDisabled = false,\n reactPortal = false,\n windowPosition = false,\n windowHeight = 800,\n windowClose,\n isScrollEnd,\n getOptionTooltip = (option: T) =>\n typeof option?.tooltip === 'string' ? option.tooltip : undefined,\n limit = null,\n selectionLimit = null,\n}: MultiSelectCheckBoxProps<T>) {\n const rootRef = useRef<HTMLDivElement>(null)\n const anchorRef = useRef<HTMLDivElement>(null)\n const portalWrapRef = useRef<HTMLDivElement>(null)\n\n const [showOptions, setShowOptions] = useState(false)\n const [selectedOptions, setSelectedOptions] = useState<T[]>(\n defaultSelectedOptions,\n )\n const [openDirection, setOpenDirection] = useState<'top' | 'bottom' | null>(\n null,\n )\n const [searchValue, setSearchValue] = useState('')\n const [portalStyle, setPortalStyle] = useState<CSSProperties | null>(null)\n const [portalReady, setPortalReady] = useState(false)\n\n const selectionLimitValue = limit ?? selectionLimit\n const maxSelectionCount = Number(selectionLimitValue)\n const hasSelectionLimit =\n Number.isFinite(maxSelectionCount) && maxSelectionCount > 0\n\n const recomputePortalPosition = useCallback(() => {\n if (!reactPortal || !anchorRef.current) return\n const rect = anchorRef.current.getBoundingClientRect()\n setPortalStyle({\n position: 'fixed',\n left: rect.left,\n top: rect.bottom,\n width: rect.width,\n zIndex: 9999,\n })\n setPortalReady(true)\n }, [reactPortal])\n\n useEffect(() => {\n const next = hasSelectionLimit\n ? defaultSelectedOptions.slice(0, maxSelectionCount)\n : defaultSelectedOptions\n setSelectedOptions(next)\n }, [defaultSelectedOptions, hasSelectionLimit, maxSelectionCount])\n\n useEffect(() => {\n if (!showOptions) {\n windowClose?.(true)\n setSearchValue('')\n }\n }, [showOptions, windowClose])\n\n useEffect(() => {\n if (!showOptions) return undefined\n\n const rootEl = rootRef.current\n const portalEl = portalWrapRef.current\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target as Node\n const inRoot = rootEl?.contains(target)\n const inPortal = portalEl?.contains(target)\n if (!inRoot && !inPortal) setShowOptions(false)\n }\n\n document.addEventListener('pointerdown', handlePointerDown, true)\n return () =>\n document.removeEventListener('pointerdown', handlePointerDown, true)\n }, [showOptions])\n\n useLayoutEffect(() => {\n if (!showOptions) {\n setPortalReady(false)\n return\n }\n if (!reactPortal) return\n recomputePortalPosition()\n }, [showOptions, reactPortal, recomputePortalPosition])\n\n useEffect(() => {\n if (!showOptions || !reactPortal) return undefined\n\n const handleReposition = () => recomputePortalPosition()\n window.addEventListener('resize', handleReposition)\n window.addEventListener('scroll', handleReposition, true)\n\n return () => {\n window.removeEventListener('resize', handleReposition)\n window.removeEventListener('scroll', handleReposition, true)\n }\n }, [showOptions, reactPortal, recomputePortalPosition])\n\n useEffect(() => {\n if (!windowPosition) return\n setOpenDirection(Number(windowHeight) < 800 ? 'top' : 'bottom')\n }, [windowHeight, windowPosition])\n\n const updateSelection = useCallback(\n (next: T[]) => {\n setSelectedOptions(next)\n onChange?.(next)\n },\n [onChange],\n )\n\n const handleScroll = useCallback(\n (event: UIEvent<HTMLDivElement>) => {\n const target = event.currentTarget\n if (target.scrollHeight - target.scrollTop <= target.clientHeight + 1) {\n isScrollEnd?.(true)\n }\n },\n [isScrollEnd],\n )\n\n const toggleOption = useCallback(\n (option: T) => {\n if (isOptionSelected(selectedOptions, option, optionValue)) {\n updateSelection(\n selectedOptions.filter(\n (item) => item?.[optionValue] !== option?.[optionValue],\n ),\n )\n return\n }\n if (hasSelectionLimit && selectedOptions.length >= maxSelectionCount) {\n return\n }\n updateSelection([...selectedOptions, option])\n },\n [\n hasSelectionLimit,\n maxSelectionCount,\n optionValue,\n selectedOptions,\n updateSelection,\n ],\n )\n\n const filteredOptions = useMemo(() => {\n const query = searchValue.trim().toLocaleLowerCase()\n if (!query) return options\n return options.filter((option) =>\n String(option?.[optionLabel] ?? '')\n .toLocaleLowerCase()\n .includes(query),\n )\n }, [options, optionLabel, searchValue])\n\n const inputValue = useMemo(() => {\n if (selectedOptions.length === 0) return ''\n if (selectedOptions.length === 1) {\n return String(selectedOptions[0]?.[optionLabel] ?? '')\n }\n return `${selectedOptions.length} ${selectedInputMessage || itemSelectedText}`\n }, [itemSelectedText, optionLabel, selectedInputMessage, selectedOptions])\n\n const inputPlaceholder =\n errorPlace === 'in' ? errorMessage || placeholder : placeholder\n\n const toggleDropdown = useCallback(() => {\n if (isDisabled) return\n setShowOptions((prev) => !prev)\n }, [isDisabled])\n\n const handleTriggerKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n toggleDropdown()\n }\n }\n\n const allFilteredSelected = useMemo(\n () =>\n filteredOptions.length > 0 &&\n filteredOptions.every((option) =>\n isOptionSelected(selectedOptions, option, optionValue),\n ),\n [filteredOptions, optionValue, selectedOptions],\n )\n\n const handleSelectAll = useCallback(() => {\n if (allFilteredSelected) {\n updateSelection(\n selectedOptions.filter(\n (selected) =>\n !filteredOptions.some(\n (option) => selected?.[optionValue] === option?.[optionValue],\n ),\n ),\n )\n return\n }\n const toAdd = filteredOptions.filter(\n (option) => !isOptionSelected(selectedOptions, option, optionValue),\n )\n const limitedToAdd = hasSelectionLimit\n ? toAdd.slice(0, Math.max(maxSelectionCount - selectedOptions.length, 0))\n : toAdd\n updateSelection([...selectedOptions, ...limitedToAdd])\n }, [\n allFilteredSelected,\n filteredOptions,\n hasSelectionLimit,\n maxSelectionCount,\n optionValue,\n selectedOptions,\n updateSelection,\n ])\n\n const baseId = id || 'inconel-multi-select-checkbox'\n\n const optionsPanel = (\n <div\n ref={reactPortal ? portalWrapRef : undefined}\n className={classNames(\n 'inconel-multi-select-checkbox__panel-wrap',\n reactPortal && 'inconel-multi-select-checkbox__panel-wrap--portal',\n openDirection === 'top' && 'inconel-is-open-top',\n )}\n style={\n reactPortal\n ? { ...(portalStyle ?? {}), visibility: portalReady ? 'visible' : 'hidden' }\n : undefined\n }\n onPointerDown={(event) => event.stopPropagation()}\n >\n <div\n className={classNames(\n 'inconel-multi-select-checkbox__options',\n reactPortal && 'inconel-multi-select-checkbox__options--portal',\n optionsClassName,\n )}\n onScroll={handleScroll}\n >\n {isSearchable && (\n <div className=\"inconel-multi-select-checkbox__search\">\n <input\n type=\"text\"\n placeholder={searchPlaceholder}\n className={classNames(\n 'inconel-multi-select-checkbox__search-input',\n searchableInputClassName,\n )}\n value={searchValue}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n setSearchValue(event.target.value)\n }\n disabled={isDisabled}\n />\n </div>\n )}\n\n <div\n className={classNames(\n 'inconel-multi-select-checkbox__option-item',\n optionItemClassName,\n )}\n >\n <input\n id={`${baseId}-select-all`}\n type=\"checkbox\"\n checked={allFilteredSelected}\n onChange={handleSelectAll}\n disabled={isDisabled}\n />\n <label htmlFor={`${baseId}-select-all`}>{selectAllText}</label>\n </div>\n\n {filteredOptions.map((option, index) => {\n const value = option?.[optionValue] ?? index\n const checked = isOptionSelected(selectedOptions, option, optionValue)\n const optionDisabled =\n isDisabled ||\n (!checked && hasSelectionLimit && selectedOptions.length >= maxSelectionCount)\n const inputId = `${baseId}-${String(value)}`\n\n return (\n <div\n key={String(value)}\n className={classNames(\n 'inconel-multi-select-checkbox__option-item',\n checked && 'inconel-is-selected',\n optionDisabled && 'inconel-is-disabled',\n optionItemClassName,\n )}\n title={getOptionTooltip(option)}\n >\n <input\n id={inputId}\n type=\"checkbox\"\n checked={checked}\n onChange={() => toggleOption(option)}\n disabled={optionDisabled}\n />\n <label htmlFor={inputId}>\n {String(option?.[optionLabel] ?? '')}\n </label>\n </div>\n )\n })}\n </div>\n </div>\n )\n\n return (\n <div\n ref={rootRef}\n id={id ?? undefined}\n className={classNames(\n 'inconel-multi-select-checkbox',\n errorMessage && 'inconel-is-error',\n isDisabled && 'inconel-is-disabled',\n openDirection === 'top' && !reactPortal && 'inconel-is-open-top',\n className,\n )}\n >\n {label && (\n <span\n className={classNames(\n 'inconel-multi-select-checkbox__label',\n labelClassName,\n )}\n >\n {label}\n </span>\n )}\n\n <div className=\"inconel-multi-select-checkbox__input-wrap\">\n {isLoading && (\n <div className=\"inconel-multi-select-checkbox__loader-cover\">\n <DotLoader />\n </div>\n )}\n\n <div\n ref={anchorRef}\n role=\"button\"\n tabIndex={0}\n className=\"inconel-multi-select-checkbox__input-container\"\n onClick={toggleDropdown}\n onKeyDown={handleTriggerKeyDown}\n >\n <input\n type=\"text\"\n className={classNames(\n 'inconel-multi-select-checkbox__input',\n inputClassName,\n )}\n placeholder={inputPlaceholder}\n readOnly\n value={inputValue}\n />\n <span\n className=\"inconel-multi-select-checkbox__indicator\"\n aria-hidden=\"true\"\n />\n </div>\n </div>\n\n {showOptions &&\n (options.length > 0 ? (\n reactPortal ? (\n createPortal(optionsPanel, document.body)\n ) : (\n optionsPanel\n )\n ) : (\n <div className=\"inconel-multi-select-checkbox__nodata\">\n <span>{noDataMessage}</span>\n </div>\n ))}\n\n {errorPlace !== 'in' && errorMessage && (\n <span className=\"inconel-multi-select-checkbox__error\">\n {errorMessage}\n </span>\n )}\n </div>\n )\n}\n"],"names":["EMPTY_OPTIONS","isOptionSelected","selected","option","optionValue","item","MultiSelectCheckBox","id","label","className","labelClassName","inputClassName","optionsClassName","optionItemClassName","searchableInputClassName","options","defaultSelectedOptions","optionLabel","onChange","placeholder","selectedInputMessage","itemSelectedText","selectAllText","searchPlaceholder","noDataMessage","errorMessage","errorPlace","isSearchable","isLoading","isDisabled","reactPortal","windowPosition","windowHeight","windowClose","isScrollEnd","getOptionTooltip","limit","selectionLimit","rootRef","useRef","anchorRef","portalWrapRef","showOptions","setShowOptions","useState","selectedOptions","setSelectedOptions","openDirection","setOpenDirection","searchValue","setSearchValue","portalStyle","setPortalStyle","portalReady","setPortalReady","maxSelectionCount","hasSelectionLimit","recomputePortalPosition","useCallback","rect","useEffect","next","rootEl","portalEl","handlePointerDown","event","target","inRoot","inPortal","useLayoutEffect","handleReposition","updateSelection","handleScroll","toggleOption","filteredOptions","useMemo","query","inputValue","inputPlaceholder","toggleDropdown","prev","handleTriggerKeyDown","allFilteredSelected","handleSelectAll","toAdd","limitedToAdd","baseId","optionsPanel","jsx","classNames","jsxs","index","value","checked","optionDisabled","inputId","DotLoader","createPortal"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/MultiSelectCheckBox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,YAAY,EACV,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAA"}
|