inconel 0.1.37 → 0.1.39
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/Button/Button.cjs.map +1 -1
- package/dist/cjs/components/MultiSelectCheckBox/MultiSelectCheckBox.cjs +1 -1
- package/dist/cjs/components/MultiSelectCheckBox/MultiSelectCheckBox.cjs.map +1 -1
- package/dist/components/Button/Button.d.ts +1 -1
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/MultiSelectCheckBox/MultiSelectCheckBox.d.ts +1 -1
- package/dist/components/MultiSelectCheckBox/MultiSelectCheckBox.d.ts.map +1 -1
- package/dist/components/MultiSelectCheckBox/MultiSelectCheckBox.js +159 -153
- package/dist/components/MultiSelectCheckBox/MultiSelectCheckBox.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.cjs","sources":["../../../../src/components/Button/Button.tsx"],"sourcesContent":["import {\n useEffect,\n useMemo,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport '../shared/sizes.css'\nimport type { ControlSize } from '../shared/types'\nimport { Svg } from '../Svg'\nimport {\n BUTTON_TYPE_CLASS_NAMES,\n type ButtonType,\n} from './constants'\nimport './styles.css'\nimport { createDebouncedCallback } from './utils'\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n label?: ReactNode\n buttonType?: ButtonType\n icon?: string | null\n iconClassName?: string\n iconWidth?: number | null\n iconHeight?: number | null\n iconRight?: boolean\n render?: boolean\n debounceTime?: number | null\n isActive?: boolean | null\n onChange?: ButtonHTMLAttributes<HTMLButtonElement>['onChange']\n loading?: boolean\n fullWidth?: boolean\n variant?: 'primary' | 'secondary' | 'danger' | 'ghost' | 'warning' | 'dark'\n size?: ControlSize\n fixedHeight?: boolean\n height?: number | string\n pill?: boolean\n count?: ReactNode\n progress?: number | null\n progressColor?: string | null\n}\n\nexport function Button({\n loading = false,\n fullWidth = false,\n variant = 'primary',\n label,\n buttonType,\n icon,\n iconClassName,\n iconWidth,\n iconHeight,\n iconRight = false,\n render = true,\n debounceTime,\n isActive,\n onClick,\n disabled,\n className,\n children,\n size = 'md',\n fixedHeight = true,\n height,\n pill = false,\n count,\n progress,\n progressColor,\n style,\n ...props\n}: ButtonProps) {\n const resolvedType = buttonType ?? variant\n const resolvedStyle = !fixedHeight && height !== undefined\n ? { ...style, '--inconel-control-height': typeof height === 'number' ? `${height}px` : height } as typeof style\n : style\n const debouncedClick = useMemo(\n () => createDebouncedCallback(onClick, debounceTime ?? 0),\n [onClick, debounceTime],\n )\n\n useEffect(() => () => debouncedClick.cancel(), [debouncedClick])\n\n if (!render) return null\n\n const content = label ?? children\n const progressWidth =\n typeof progress === 'number' ? Math.max(0, Math.min(100, progress)) : null\n const iconNode = typeof icon === 'string' && icon ? (\n <span\n className={classNames(\n 'inconel-button__icon',\n iconRight\n ? 'inconel-button__icon--right'\n : 'inconel-button__icon--left',\n iconClassName,\n )}\n style={{ width: iconWidth ?? undefined, height: iconHeight ?? undefined }}\n aria-hidden=\"true\"\n >\n <Svg\n src={icon}\n renumerateIRIElements={false}\n loading={() => null}\n fallback={() => null}\n beforeInjection={(svg) => {\n if (iconWidth) svg.setAttribute('width', String(iconWidth))\n if (iconHeight) svg.setAttribute('height', String(iconHeight))\n svg.setAttribute('preserveAspectRatio', 'xMidYMid meet')\n }}\n />\n </span>\n ) : null\n\n return (\n <button\n {...props}\n style={resolvedStyle}\n disabled={disabled || loading}\n aria-pressed={\n typeof isActive === 'boolean' ? isActive : props['aria-pressed']\n }\n onClick={disabled || loading ? undefined : debouncedClick}\n className={classNames(\n 'inconel-button',\n `inconel-size-${size}`,\n BUTTON_TYPE_CLASS_NAMES[resolvedType],\n fullWidth && 'inconel-button--full-width',\n progressWidth !== null && 'inconel-button--has-progress',\n pill && 'inconel-button--pill',\n loading && 'inconel-is-loading',\n disabled && 'inconel-is-disabled',\n isActive && 'inconel-is-active',\n className,\n )}\n >\n {progressWidth !== null && (\n <span\n className=\"inconel-button__progress\"\n style={{\n width: `${progressWidth}%`,\n background: progressColor ?? undefined,\n }}\n />\n )}\n {loading && <span className=\"inconel-button__spinner\" aria-hidden=\"true\" />}\n {!iconRight && iconNode}\n {content !== undefined && (\n <span className=\"inconel-button__title\">{content}</span>\n )}\n {iconRight && iconNode}\n {count != null && <span className=\"inconel-button__count\">{count}</span>}\n </button>\n )\n}\n"],"names":["Button","loading","fullWidth","variant","label","buttonType","icon","iconClassName","iconWidth","iconHeight","iconRight","render","debounceTime","isActive","onClick","disabled","className","children","size","fixedHeight","height","pill","count","progress","progressColor","style","props","resolvedType","resolvedStyle","debouncedClick","useMemo","createDebouncedCallback","useEffect","content","progressWidth","iconNode","jsx","classNames","Svg","svg","jsxs","BUTTON_TYPE_CLASS_NAMES"],"mappings":"2UA2CO,SAASA,EAAO,CACrB,QAAAC,EAAU,GACV,UAAAC,EAAY,GACZ,QAAAC,EAAU,UACV,MAAAC,EACA,WAAAC,EACA,KAAAC,EACA,cAAAC,EACA,UAAAC,EACA,WAAAC,EACA,UAAAC,EAAY,GACZ,OAAAC,EAAS,GACT,aAAAC,EACA,SAAAC,EACA,QAAAC,EACA,SAAAC,EACA,UAAAC,EACA,SAAAC,EACA,KAAAC,EAAO,KACP,YAAAC,EAAc,GACd,OAAAC,EACA,KAAAC,EAAO,GACP,MAAAC,EACA,SAAAC,EACA,cAAAC,EACA,MAAAC,EACA,GAAGC,CACL,EAAgB,CACd,MAAMC,EAAetB,GAAcF,EAC7ByB,EAAgB,CAACT,GAAeC,IAAW,OAC7C,CAAE,GAAGK,EAAO,2BAA4B,OAAOL,GAAW,SAAW,GAAGA,CAAM,KAAOA,GACrFK,EACEI,EAAiBC,EAAAA,QACrB,IAAMC,0BAAwBjB,EAASF,GAAgB,CAAC,EACxD,CAACE,EAASF,CAAY,CAAA,EAKxB,GAFAoB,EAAAA,UAAU,IAAM,IAAMH,EAAe,SAAU,CAACA,CAAc,CAAC,EAE3D,CAAClB,EAAQ,OAAO,KAEpB,MAAMsB,EAAU7B,GAASa,EACnBiB,EACJ,OAAOX,GAAa,SAAW,KAAK,IAAI,EAAG,KAAK,IAAI,IAAKA,CAAQ,CAAC,EAAI,KAClEY,EAAW,OAAO7B,GAAS,UAAYA,EAC3C8B,EAAAA,IAAC,OAAA,CACC,UAAWC,EAAAA,WACT,uBACA3B,EACI,8BACA,6BACJH,CAAA,EAEF,MAAO,CAAE,MAAOC,GAAa,OAAW,OAAQC,GAAc,MAAA,EAC9D,cAAY,OAEZ,SAAA2B,EAAAA,IAACE,EAAAA,QAAA,CACC,IAAKhC,EACL,sBAAuB,GACvB,QAAS,IAAM,KACf,SAAU,IAAM,KAChB,gBAAkBiC,GAAQ,CACpB/B,GAAW+B,EAAI,aAAa,QAAS,OAAO/B,CAAS,CAAC,EACtDC,GAAY8B,EAAI,aAAa,SAAU,OAAO9B,CAAU,CAAC,EAC7D8B,EAAI,aAAa,sBAAuB,eAAe,CACzD,CAAA,CAAA,CACF,CAAA,EAEA,KAEJ,OACEC,EAAAA,KAAC,SAAA,CACE,GAAGd,EACJ,MAAOE,EACP,SAAUb,GAAYd,EACtB,eACE,OAAOY,GAAa,UAAYA,EAAWa,EAAM,cAAc,EAEjE,QAASX,GAAYd,EAAU,OAAY4B,EAC3C,UAAWQ,EAAAA,WACT,iBACA,gBAAgBnB,CAAI,GACpBuB,EAAAA,wBAAwBd,CAAY,EACpCzB,GAAa,6BACbgC,IAAkB,MAAQ,+BAC1Bb,GAAQ,uBACRpB,GAAW,qBACXc,GAAY,sBACZF,GAAY,oBACZG,CAAA,EAGD,SAAA,CAAAkB,IAAkB,MACjBE,EAAAA,IAAC,OAAA,CACC,UAAU,2BACV,MAAO,CACL,MAAO,GAAGF,CAAa,IACvB,WAAYV,GAAiB,MAAA,CAC/B,CAAA,EAGHvB,GAAWmC,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA0B,cAAY,OAAO,EACxE,CAAC1B,GAAayB,EACdF,IAAY,QACXG,EAAAA,IAAC,OAAA,CAAK,UAAU,wBAAyB,SAAAH,EAAQ,EAElDvB,GAAayB,EACbb,GAAS,MAAQc,EAAAA,IAAC,OAAA,CAAK,UAAU,wBAAyB,SAAAd,CAAA,CAAM,CAAA,CAAA,CAAA,CAGvE"}
|
|
1
|
+
{"version":3,"file":"Button.cjs","sources":["../../../../src/components/Button/Button.tsx"],"sourcesContent":["import {\n useEffect,\n useMemo,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport '../shared/sizes.css'\nimport type { ControlSize } from '../shared/types'\nimport { Svg } from '../Svg'\nimport {\n BUTTON_TYPE_CLASS_NAMES,\n type ButtonType,\n} from './constants'\nimport './styles.css'\nimport { createDebouncedCallback } from './utils'\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n label?: ReactNode\n buttonType?: ButtonType\n icon?: string | null\n iconClassName?: string\n iconWidth?: number | null\n iconHeight?: number | null\n iconRight?: boolean\n render?: boolean\n debounceTime?: number | null\n isActive?: boolean | null\n onChange?: ButtonHTMLAttributes<HTMLButtonElement>['onChange']\n loading?: boolean\n fullWidth?: boolean\n variant?: 'primary' | 'secondary' | 'danger' | 'ghost' | 'warning' | 'dark' | 'success'\n size?: ControlSize\n fixedHeight?: boolean\n height?: number | string\n pill?: boolean\n count?: ReactNode\n progress?: number | null\n progressColor?: string | null\n}\n\nexport function Button({\n loading = false,\n fullWidth = false,\n variant = 'primary',\n label,\n buttonType,\n icon,\n iconClassName,\n iconWidth,\n iconHeight,\n iconRight = false,\n render = true,\n debounceTime,\n isActive,\n onClick,\n disabled,\n className,\n children,\n size = 'md',\n fixedHeight = true,\n height,\n pill = false,\n count,\n progress,\n progressColor,\n style,\n ...props\n}: ButtonProps) {\n const resolvedType = buttonType ?? variant\n const resolvedStyle = !fixedHeight && height !== undefined\n ? { ...style, '--inconel-control-height': typeof height === 'number' ? `${height}px` : height } as typeof style\n : style\n const debouncedClick = useMemo(\n () => createDebouncedCallback(onClick, debounceTime ?? 0),\n [onClick, debounceTime],\n )\n\n useEffect(() => () => debouncedClick.cancel(), [debouncedClick])\n\n if (!render) return null\n\n const content = label ?? children\n const progressWidth =\n typeof progress === 'number' ? Math.max(0, Math.min(100, progress)) : null\n const iconNode = typeof icon === 'string' && icon ? (\n <span\n className={classNames(\n 'inconel-button__icon',\n iconRight\n ? 'inconel-button__icon--right'\n : 'inconel-button__icon--left',\n iconClassName,\n )}\n style={{ width: iconWidth ?? undefined, height: iconHeight ?? undefined }}\n aria-hidden=\"true\"\n >\n <Svg\n src={icon}\n renumerateIRIElements={false}\n loading={() => null}\n fallback={() => null}\n beforeInjection={(svg) => {\n if (iconWidth) svg.setAttribute('width', String(iconWidth))\n if (iconHeight) svg.setAttribute('height', String(iconHeight))\n svg.setAttribute('preserveAspectRatio', 'xMidYMid meet')\n }}\n />\n </span>\n ) : null\n\n return (\n <button\n {...props}\n style={resolvedStyle}\n disabled={disabled || loading}\n aria-pressed={\n typeof isActive === 'boolean' ? isActive : props['aria-pressed']\n }\n onClick={disabled || loading ? undefined : debouncedClick}\n className={classNames(\n 'inconel-button',\n `inconel-size-${size}`,\n BUTTON_TYPE_CLASS_NAMES[resolvedType],\n fullWidth && 'inconel-button--full-width',\n progressWidth !== null && 'inconel-button--has-progress',\n pill && 'inconel-button--pill',\n loading && 'inconel-is-loading',\n disabled && 'inconel-is-disabled',\n isActive && 'inconel-is-active',\n className,\n )}\n >\n {progressWidth !== null && (\n <span\n className=\"inconel-button__progress\"\n style={{\n width: `${progressWidth}%`,\n background: progressColor ?? undefined,\n }}\n />\n )}\n {loading && <span className=\"inconel-button__spinner\" aria-hidden=\"true\" />}\n {!iconRight && iconNode}\n {content !== undefined && (\n <span className=\"inconel-button__title\">{content}</span>\n )}\n {iconRight && iconNode}\n {count != null && <span className=\"inconel-button__count\">{count}</span>}\n </button>\n )\n}\n"],"names":["Button","loading","fullWidth","variant","label","buttonType","icon","iconClassName","iconWidth","iconHeight","iconRight","render","debounceTime","isActive","onClick","disabled","className","children","size","fixedHeight","height","pill","count","progress","progressColor","style","props","resolvedType","resolvedStyle","debouncedClick","useMemo","createDebouncedCallback","useEffect","content","progressWidth","iconNode","jsx","classNames","Svg","svg","jsxs","BUTTON_TYPE_CLASS_NAMES"],"mappings":"2UA2CO,SAASA,EAAO,CACrB,QAAAC,EAAU,GACV,UAAAC,EAAY,GACZ,QAAAC,EAAU,UACV,MAAAC,EACA,WAAAC,EACA,KAAAC,EACA,cAAAC,EACA,UAAAC,EACA,WAAAC,EACA,UAAAC,EAAY,GACZ,OAAAC,EAAS,GACT,aAAAC,EACA,SAAAC,EACA,QAAAC,EACA,SAAAC,EACA,UAAAC,EACA,SAAAC,EACA,KAAAC,EAAO,KACP,YAAAC,EAAc,GACd,OAAAC,EACA,KAAAC,EAAO,GACP,MAAAC,EACA,SAAAC,EACA,cAAAC,EACA,MAAAC,EACA,GAAGC,CACL,EAAgB,CACd,MAAMC,EAAetB,GAAcF,EAC7ByB,EAAgB,CAACT,GAAeC,IAAW,OAC7C,CAAE,GAAGK,EAAO,2BAA4B,OAAOL,GAAW,SAAW,GAAGA,CAAM,KAAOA,GACrFK,EACEI,EAAiBC,EAAAA,QACrB,IAAMC,0BAAwBjB,EAASF,GAAgB,CAAC,EACxD,CAACE,EAASF,CAAY,CAAA,EAKxB,GAFAoB,EAAAA,UAAU,IAAM,IAAMH,EAAe,SAAU,CAACA,CAAc,CAAC,EAE3D,CAAClB,EAAQ,OAAO,KAEpB,MAAMsB,EAAU7B,GAASa,EACnBiB,EACJ,OAAOX,GAAa,SAAW,KAAK,IAAI,EAAG,KAAK,IAAI,IAAKA,CAAQ,CAAC,EAAI,KAClEY,EAAW,OAAO7B,GAAS,UAAYA,EAC3C8B,EAAAA,IAAC,OAAA,CACC,UAAWC,EAAAA,WACT,uBACA3B,EACI,8BACA,6BACJH,CAAA,EAEF,MAAO,CAAE,MAAOC,GAAa,OAAW,OAAQC,GAAc,MAAA,EAC9D,cAAY,OAEZ,SAAA2B,EAAAA,IAACE,EAAAA,QAAA,CACC,IAAKhC,EACL,sBAAuB,GACvB,QAAS,IAAM,KACf,SAAU,IAAM,KAChB,gBAAkBiC,GAAQ,CACpB/B,GAAW+B,EAAI,aAAa,QAAS,OAAO/B,CAAS,CAAC,EACtDC,GAAY8B,EAAI,aAAa,SAAU,OAAO9B,CAAU,CAAC,EAC7D8B,EAAI,aAAa,sBAAuB,eAAe,CACzD,CAAA,CAAA,CACF,CAAA,EAEA,KAEJ,OACEC,EAAAA,KAAC,SAAA,CACE,GAAGd,EACJ,MAAOE,EACP,SAAUb,GAAYd,EACtB,eACE,OAAOY,GAAa,UAAYA,EAAWa,EAAM,cAAc,EAEjE,QAASX,GAAYd,EAAU,OAAY4B,EAC3C,UAAWQ,EAAAA,WACT,iBACA,gBAAgBnB,CAAI,GACpBuB,EAAAA,wBAAwBd,CAAY,EACpCzB,GAAa,6BACbgC,IAAkB,MAAQ,+BAC1Bb,GAAQ,uBACRpB,GAAW,qBACXc,GAAY,sBACZF,GAAY,oBACZG,CAAA,EAGD,SAAA,CAAAkB,IAAkB,MACjBE,EAAAA,IAAC,OAAA,CACC,UAAU,2BACV,MAAO,CACL,MAAO,GAAGF,CAAa,IACvB,WAAYV,GAAiB,MAAA,CAC/B,CAAA,EAGHvB,GAAWmC,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA0B,cAAY,OAAO,EACxE,CAAC1B,GAAayB,EACdF,IAAY,QACXG,EAAAA,IAAC,OAAA,CAAK,UAAU,wBAAyB,SAAAH,EAAQ,EAElDvB,GAAayB,EACbb,GAAS,MAAQc,EAAAA,IAAC,OAAA,CAAK,UAAU,wBAAyB,SAAAd,CAAA,CAAM,CAAA,CAAA,CAAA,CAGvE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),t=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),t=require("react"),Ne=require("react-dom"),m=require("../shared/classNames.cjs");;/* empty css */const je=require("../DotLoader/DotLoader.cjs"),T=[];function se(r){return Array.isArray(r)?r:r&&typeof r=="object"?[r]:T}function O(r,_,v){return Array.isArray(r)?r.some(R=>R?.[v]===_?.[v]):!1}function we({id:r=null,label:_=null,className:v=null,labelClassName:R=null,inputClassName:ce=null,optionsClassName:le=null,optionItemClassName:M=null,searchableInputClassName:oe=null,options:$=T,defaultSelectedOptions:B=T,optionLabel:g="label",optionValue:l="value",onChange:z,placeholder:F="Seçiniz",selectedInputMessage:H,itemSelectedText:I="öğe seçili",selectAllText:ie="Tümünü Seç",searchPlaceholder:re="Ara",noDataMessage:ue="Veri bulunamadı",errorMessage:y="",errorPlace:K="out",isSearchable:L=!1,isLoading:ae=!1,isDisabled:b=!1,reactPortal:o=!1,windowPosition:P=!1,windowHeight:W=800,windowClose:Y,isScrollEnd:G,getOptionTooltip:de=h=>typeof h?.tooltip=="string"?h.tooltip:void 0,limit:me=null,selectionLimit:he=null}){const h=t.useMemo(()=>se($),[$]),S=t.useMemo(()=>se(B),[B]),J=t.useRef(null),N=t.useRef(null),Q=t.useRef(null),[u,U]=t.useState(!1),[s,X]=t.useState(S),[j,Z]=t.useState(null),[A,V]=t.useState(""),[fe,pe]=t.useState(null),[xe,ee]=t.useState(!1),a=Number(me??he),f=Number.isFinite(a)&&a>0,w=t.useCallback(()=>{if(P){Z(Number(W)<800?"top":"bottom");return}const e=N.current;if(!e)return;const c=e.getBoundingClientRect(),i=window.innerHeight-c.bottom,d=c.top,x=240+(L?46:0)+40;Z(i<x&&d>i?"top":"bottom")},[L,W,P]),C=t.useCallback(()=>{if(!o||!N.current)return;const e=N.current.getBoundingClientRect();pe({position:"fixed",left:e.left,top:j==="top"?e.top:e.bottom,width:e.width,zIndex:9999}),ee(!0)},[o,j]);t.useEffect(()=>{const e=f?S.slice(0,a):S;X(e)},[S,f,a]),t.useEffect(()=>{u||(Y?.(!0),V(""))},[u,Y]),t.useEffect(()=>{if(!u)return;const e=J.current,c=Q.current,i=d=>{const x=d.target,E=e?.contains(x),Se=c?.contains(x);!E&&!Se&&U(!1)};return document.addEventListener("pointerdown",i,!0),()=>document.removeEventListener("pointerdown",i,!0)},[u]),t.useLayoutEffect(()=>{if(!u){ee(!1);return}w()},[u,w]),t.useLayoutEffect(()=>{!u||!o||C()},[u,o,C]),t.useEffect(()=>{if(!u)return;const e=()=>{w(),o&&C()};return window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[u,o,w,C]);const k=t.useCallback(e=>{X(e),z?.(e)},[z]),be=t.useCallback(e=>{const c=e.currentTarget;c.scrollHeight-c.scrollTop<=c.clientHeight+1&&G?.(!0)},[G]),ke=t.useCallback(e=>{if(O(s,e,l)){k(s.filter(c=>c?.[l]!==e?.[l]));return}f&&s.length>=a||k([...s,e])},[f,a,l,s,k]),p=t.useMemo(()=>{const e=A.trim().toLocaleLowerCase();return e?h.filter(c=>String(c?.[g]??"").toLocaleLowerCase().includes(e)):h},[h,g,A]),ge=t.useMemo(()=>s.length===0?"":s.length===1?String(s[0]?.[g]??""):`${s.length} ${H||I}`,[I,g,H,s]),_e=K==="in"&&y||F,te=t.useCallback(()=>{b||U(e=>!e)},[b]),ve=e=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),te())},q=t.useMemo(()=>p.length>0&&p.every(e=>O(s,e,l)),[p,l,s]),ye=t.useCallback(()=>{if(q){k(s.filter(i=>!p.some(d=>i?.[l]===d?.[l])));return}const e=p.filter(i=>!O(s,i,l)),c=f?e.slice(0,Math.max(a-s.length,0)):e;k([...s,...c])},[q,p,f,a,l,s,k]),D=r||"inconel-multi-select-checkbox",ne=n.jsx("div",{ref:o?Q:void 0,className:m.classNames("inconel-multi-select-checkbox__panel-wrap",o&&"inconel-multi-select-checkbox__panel-wrap--portal",j==="top"&&"inconel-is-open-top"),style:o?{...fe??{},visibility:xe?"visible":"hidden"}:void 0,onPointerDown:e=>e.stopPropagation(),children:n.jsxs("div",{className:m.classNames("inconel-multi-select-checkbox__options",o&&"inconel-multi-select-checkbox__options--portal",le),onScroll:be,children:[L&&n.jsx("div",{className:"inconel-multi-select-checkbox__search",children:n.jsx("input",{type:"text",placeholder:re,className:m.classNames("inconel-multi-select-checkbox__search-input",oe),value:A,onChange:e=>V(e.target.value),disabled:b})}),n.jsxs("div",{className:m.classNames("inconel-multi-select-checkbox__option-item",M),children:[n.jsx("input",{id:`${D}-select-all`,type:"checkbox",checked:q,onChange:ye,disabled:b}),n.jsx("label",{htmlFor:`${D}-select-all`,children:ie})]}),p.map((e,c)=>{const i=e?.[l]??c,d=O(s,e,l),x=b||!d&&f&&s.length>=a,E=`${D}-${String(i)}`;return n.jsxs("div",{className:m.classNames("inconel-multi-select-checkbox__option-item",d&&"inconel-is-selected",x&&"inconel-is-disabled",M),title:de(e),children:[n.jsx("input",{id:E,type:"checkbox",checked:d,onChange:()=>ke(e),disabled:x}),n.jsx("label",{htmlFor:E,children:String(e?.[g]??"")})]},String(i))})]})});return n.jsxs("div",{ref:J,id:r??void 0,className:m.classNames("inconel-multi-select-checkbox",y&&"inconel-is-error",b&&"inconel-is-disabled",j==="top"&&!o&&"inconel-is-open-top",v),children:[_&&n.jsx("span",{className:m.classNames("inconel-multi-select-checkbox__label",R),children:_}),n.jsxs("div",{className:"inconel-multi-select-checkbox__input-wrap",children:[ae&&n.jsx("div",{className:"inconel-multi-select-checkbox__loader-cover",children:n.jsx(je.DotLoader,{})}),n.jsxs("div",{ref:N,role:"button",tabIndex:0,className:"inconel-multi-select-checkbox__input-container",onClick:te,onKeyDown:ve,children:[n.jsx("input",{type:"text",className:m.classNames("inconel-multi-select-checkbox__input",ce),placeholder:_e,readOnly:!0,value:ge}),n.jsx("span",{className:"inconel-multi-select-checkbox__indicator","aria-hidden":"true"})]})]}),u&&(h.length>0?o?Ne.createPortal(ne,document.body):ne:n.jsx("div",{className:"inconel-multi-select-checkbox__nodata",children:n.jsx("span",{children:ue})})),K!=="in"&&y&&n.jsx("span",{className:"inconel-multi-select-checkbox__error",children:y})]})}exports.MultiSelectCheckBox=we;
|
|
2
2
|
//# sourceMappingURL=MultiSelectCheckBox.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelectCheckBox.cjs","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 recomputeOpenDirection = useCallback(() => {\n if (windowPosition) {\n setOpenDirection(Number(windowHeight) < 800 ? 'top' : 'bottom')\n return\n }\n const anchor = anchorRef.current\n if (!anchor) return\n const rect = anchor.getBoundingClientRect()\n const spaceBelow = window.innerHeight - rect.bottom\n const spaceAbove = rect.top\n const estimatedPanelHeight = 240 + (isSearchable ? 46 : 0) + 40\n setOpenDirection(\n spaceBelow < estimatedPanelHeight && spaceAbove > spaceBelow\n ? 'top'\n : 'bottom',\n )\n }, [isSearchable, windowHeight, windowPosition])\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: openDirection === 'top' ? rect.top : rect.bottom,\n width: rect.width,\n zIndex: 9999,\n })\n setPortalReady(true)\n }, [reactPortal, openDirection])\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 recomputeOpenDirection()\n }, [showOptions, recomputeOpenDirection])\n\n useLayoutEffect(() => {\n if (!showOptions || !reactPortal) return\n recomputePortalPosition()\n }, [showOptions, reactPortal, recomputePortalPosition])\n\n useEffect(() => {\n if (!showOptions) return undefined\n\n const handleReposition = () => {\n recomputeOpenDirection()\n if (reactPortal) recomputePortalPosition()\n }\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, recomputeOpenDirection, recomputePortalPosition])\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","recomputeOpenDirection","useCallback","anchor","rect","spaceBelow","spaceAbove","estimatedPanelHeight","recomputePortalPosition","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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"}
|
|
1
|
+
{"version":3,"file":"MultiSelectCheckBox.cjs","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 toOptionArray<T>(value: unknown): T[] {\n if (Array.isArray(value)) return value as T[]\n if (value && typeof value === 'object') return [value as T]\n return EMPTY_OPTIONS\n}\n\nfunction isOptionSelected<T extends MultiSelectCheckBoxOption>(\n selected: T[],\n option: T,\n optionValue: string,\n) {\n if (!Array.isArray(selected)) return false\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: rawOptions = EMPTY_OPTIONS,\n defaultSelectedOptions: rawDefaultSelectedOptions = 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 options = useMemo(() => toOptionArray<T>(rawOptions), [rawOptions])\n const defaultSelectedOptions = useMemo(\n () => toOptionArray<T>(rawDefaultSelectedOptions),\n [rawDefaultSelectedOptions],\n )\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 recomputeOpenDirection = useCallback(() => {\n if (windowPosition) {\n setOpenDirection(Number(windowHeight) < 800 ? 'top' : 'bottom')\n return\n }\n const anchor = anchorRef.current\n if (!anchor) return\n const rect = anchor.getBoundingClientRect()\n const spaceBelow = window.innerHeight - rect.bottom\n const spaceAbove = rect.top\n const estimatedPanelHeight = 240 + (isSearchable ? 46 : 0) + 40\n setOpenDirection(\n spaceBelow < estimatedPanelHeight && spaceAbove > spaceBelow\n ? 'top'\n : 'bottom',\n )\n }, [isSearchable, windowHeight, windowPosition])\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: openDirection === 'top' ? rect.top : rect.bottom,\n width: rect.width,\n zIndex: 9999,\n })\n setPortalReady(true)\n }, [reactPortal, openDirection])\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 recomputeOpenDirection()\n }, [showOptions, recomputeOpenDirection])\n\n useLayoutEffect(() => {\n if (!showOptions || !reactPortal) return\n recomputePortalPosition()\n }, [showOptions, reactPortal, recomputePortalPosition])\n\n useEffect(() => {\n if (!showOptions) return undefined\n\n const handleReposition = () => {\n recomputeOpenDirection()\n if (reactPortal) recomputePortalPosition()\n }\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, recomputeOpenDirection, recomputePortalPosition])\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","toOptionArray","value","isOptionSelected","selected","option","optionValue","item","MultiSelectCheckBox","id","label","className","labelClassName","inputClassName","optionsClassName","optionItemClassName","searchableInputClassName","rawOptions","rawDefaultSelectedOptions","optionLabel","onChange","placeholder","selectedInputMessage","itemSelectedText","selectAllText","searchPlaceholder","noDataMessage","errorMessage","errorPlace","isSearchable","isLoading","isDisabled","reactPortal","windowPosition","windowHeight","windowClose","isScrollEnd","getOptionTooltip","limit","selectionLimit","options","useMemo","defaultSelectedOptions","rootRef","useRef","anchorRef","portalWrapRef","showOptions","setShowOptions","useState","selectedOptions","setSelectedOptions","openDirection","setOpenDirection","searchValue","setSearchValue","portalStyle","setPortalStyle","portalReady","setPortalReady","maxSelectionCount","hasSelectionLimit","recomputeOpenDirection","useCallback","anchor","rect","spaceBelow","spaceAbove","estimatedPanelHeight","recomputePortalPosition","useEffect","next","rootEl","portalEl","handlePointerDown","event","target","inRoot","inPortal","useLayoutEffect","handleReposition","updateSelection","handleScroll","toggleOption","filteredOptions","query","inputValue","inputPlaceholder","toggleDropdown","prev","handleTriggerKeyDown","allFilteredSelected","handleSelectAll","toAdd","limitedToAdd","baseId","optionsPanel","jsx","classNames","jsxs","index","checked","optionDisabled","inputId","DotLoader","createPortal"],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement
|
|
|
15
15
|
onChange?: ButtonHTMLAttributes<HTMLButtonElement>['onChange'];
|
|
16
16
|
loading?: boolean;
|
|
17
17
|
fullWidth?: boolean;
|
|
18
|
-
variant?: 'primary' | 'secondary' | 'danger' | 'ghost' | 'warning' | 'dark';
|
|
18
|
+
variant?: 'primary' | 'secondary' | 'danger' | 'ghost' | 'warning' | 'dark' | 'success';
|
|
19
19
|
size?: ControlSize;
|
|
20
20
|
fixedHeight?: boolean;
|
|
21
21
|
height?: number | string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAGd,OAAO,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AACpB,OAAO,cAAc,CAAA;AAGrB,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IACjE,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,CAAA;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAGd,OAAO,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAA;AACpB,OAAO,cAAc,CAAA;AAGrB,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IACjE,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,CAAA;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;IACvF,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,wBAAgB,MAAM,CAAC,EACrB,OAAe,EACf,SAAiB,EACjB,OAAmB,EACnB,KAAK,EACL,UAAU,EACV,IAAI,EACJ,aAAa,EACb,SAAS,EACT,UAAU,EACV,SAAiB,EACjB,MAAa,EACb,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,IAAW,EACX,WAAkB,EAClB,MAAM,EACN,IAAY,EACZ,KAAK,EACL,QAAQ,EACR,aAAa,EACb,KAAK,EACL,GAAG,KAAK,EACT,EAAE,WAAW,sCAmFb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["import {\n useEffect,\n useMemo,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport '../shared/sizes.css'\nimport type { ControlSize } from '../shared/types'\nimport { Svg } from '../Svg'\nimport {\n BUTTON_TYPE_CLASS_NAMES,\n type ButtonType,\n} from './constants'\nimport './styles.css'\nimport { createDebouncedCallback } from './utils'\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n label?: ReactNode\n buttonType?: ButtonType\n icon?: string | null\n iconClassName?: string\n iconWidth?: number | null\n iconHeight?: number | null\n iconRight?: boolean\n render?: boolean\n debounceTime?: number | null\n isActive?: boolean | null\n onChange?: ButtonHTMLAttributes<HTMLButtonElement>['onChange']\n loading?: boolean\n fullWidth?: boolean\n variant?: 'primary' | 'secondary' | 'danger' | 'ghost' | 'warning' | 'dark'\n size?: ControlSize\n fixedHeight?: boolean\n height?: number | string\n pill?: boolean\n count?: ReactNode\n progress?: number | null\n progressColor?: string | null\n}\n\nexport function Button({\n loading = false,\n fullWidth = false,\n variant = 'primary',\n label,\n buttonType,\n icon,\n iconClassName,\n iconWidth,\n iconHeight,\n iconRight = false,\n render = true,\n debounceTime,\n isActive,\n onClick,\n disabled,\n className,\n children,\n size = 'md',\n fixedHeight = true,\n height,\n pill = false,\n count,\n progress,\n progressColor,\n style,\n ...props\n}: ButtonProps) {\n const resolvedType = buttonType ?? variant\n const resolvedStyle = !fixedHeight && height !== undefined\n ? { ...style, '--inconel-control-height': typeof height === 'number' ? `${height}px` : height } as typeof style\n : style\n const debouncedClick = useMemo(\n () => createDebouncedCallback(onClick, debounceTime ?? 0),\n [onClick, debounceTime],\n )\n\n useEffect(() => () => debouncedClick.cancel(), [debouncedClick])\n\n if (!render) return null\n\n const content = label ?? children\n const progressWidth =\n typeof progress === 'number' ? Math.max(0, Math.min(100, progress)) : null\n const iconNode = typeof icon === 'string' && icon ? (\n <span\n className={classNames(\n 'inconel-button__icon',\n iconRight\n ? 'inconel-button__icon--right'\n : 'inconel-button__icon--left',\n iconClassName,\n )}\n style={{ width: iconWidth ?? undefined, height: iconHeight ?? undefined }}\n aria-hidden=\"true\"\n >\n <Svg\n src={icon}\n renumerateIRIElements={false}\n loading={() => null}\n fallback={() => null}\n beforeInjection={(svg) => {\n if (iconWidth) svg.setAttribute('width', String(iconWidth))\n if (iconHeight) svg.setAttribute('height', String(iconHeight))\n svg.setAttribute('preserveAspectRatio', 'xMidYMid meet')\n }}\n />\n </span>\n ) : null\n\n return (\n <button\n {...props}\n style={resolvedStyle}\n disabled={disabled || loading}\n aria-pressed={\n typeof isActive === 'boolean' ? isActive : props['aria-pressed']\n }\n onClick={disabled || loading ? undefined : debouncedClick}\n className={classNames(\n 'inconel-button',\n `inconel-size-${size}`,\n BUTTON_TYPE_CLASS_NAMES[resolvedType],\n fullWidth && 'inconel-button--full-width',\n progressWidth !== null && 'inconel-button--has-progress',\n pill && 'inconel-button--pill',\n loading && 'inconel-is-loading',\n disabled && 'inconel-is-disabled',\n isActive && 'inconel-is-active',\n className,\n )}\n >\n {progressWidth !== null && (\n <span\n className=\"inconel-button__progress\"\n style={{\n width: `${progressWidth}%`,\n background: progressColor ?? undefined,\n }}\n />\n )}\n {loading && <span className=\"inconel-button__spinner\" aria-hidden=\"true\" />}\n {!iconRight && iconNode}\n {content !== undefined && (\n <span className=\"inconel-button__title\">{content}</span>\n )}\n {iconRight && iconNode}\n {count != null && <span className=\"inconel-button__count\">{count}</span>}\n </button>\n )\n}\n"],"names":["Button","loading","fullWidth","variant","label","buttonType","icon","iconClassName","iconWidth","iconHeight","iconRight","render","debounceTime","isActive","onClick","disabled","className","children","size","fixedHeight","height","pill","count","progress","progressColor","style","props","resolvedType","resolvedStyle","debouncedClick","useMemo","createDebouncedCallback","useEffect","content","progressWidth","iconNode","jsx","classNames","Svg","svg","jsxs","BUTTON_TYPE_CLASS_NAMES"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../../src/components/Button/Button.tsx"],"sourcesContent":["import {\n useEffect,\n useMemo,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport '../shared/sizes.css'\nimport type { ControlSize } from '../shared/types'\nimport { Svg } from '../Svg'\nimport {\n BUTTON_TYPE_CLASS_NAMES,\n type ButtonType,\n} from './constants'\nimport './styles.css'\nimport { createDebouncedCallback } from './utils'\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n label?: ReactNode\n buttonType?: ButtonType\n icon?: string | null\n iconClassName?: string\n iconWidth?: number | null\n iconHeight?: number | null\n iconRight?: boolean\n render?: boolean\n debounceTime?: number | null\n isActive?: boolean | null\n onChange?: ButtonHTMLAttributes<HTMLButtonElement>['onChange']\n loading?: boolean\n fullWidth?: boolean\n variant?: 'primary' | 'secondary' | 'danger' | 'ghost' | 'warning' | 'dark' | 'success'\n size?: ControlSize\n fixedHeight?: boolean\n height?: number | string\n pill?: boolean\n count?: ReactNode\n progress?: number | null\n progressColor?: string | null\n}\n\nexport function Button({\n loading = false,\n fullWidth = false,\n variant = 'primary',\n label,\n buttonType,\n icon,\n iconClassName,\n iconWidth,\n iconHeight,\n iconRight = false,\n render = true,\n debounceTime,\n isActive,\n onClick,\n disabled,\n className,\n children,\n size = 'md',\n fixedHeight = true,\n height,\n pill = false,\n count,\n progress,\n progressColor,\n style,\n ...props\n}: ButtonProps) {\n const resolvedType = buttonType ?? variant\n const resolvedStyle = !fixedHeight && height !== undefined\n ? { ...style, '--inconel-control-height': typeof height === 'number' ? `${height}px` : height } as typeof style\n : style\n const debouncedClick = useMemo(\n () => createDebouncedCallback(onClick, debounceTime ?? 0),\n [onClick, debounceTime],\n )\n\n useEffect(() => () => debouncedClick.cancel(), [debouncedClick])\n\n if (!render) return null\n\n const content = label ?? children\n const progressWidth =\n typeof progress === 'number' ? Math.max(0, Math.min(100, progress)) : null\n const iconNode = typeof icon === 'string' && icon ? (\n <span\n className={classNames(\n 'inconel-button__icon',\n iconRight\n ? 'inconel-button__icon--right'\n : 'inconel-button__icon--left',\n iconClassName,\n )}\n style={{ width: iconWidth ?? undefined, height: iconHeight ?? undefined }}\n aria-hidden=\"true\"\n >\n <Svg\n src={icon}\n renumerateIRIElements={false}\n loading={() => null}\n fallback={() => null}\n beforeInjection={(svg) => {\n if (iconWidth) svg.setAttribute('width', String(iconWidth))\n if (iconHeight) svg.setAttribute('height', String(iconHeight))\n svg.setAttribute('preserveAspectRatio', 'xMidYMid meet')\n }}\n />\n </span>\n ) : null\n\n return (\n <button\n {...props}\n style={resolvedStyle}\n disabled={disabled || loading}\n aria-pressed={\n typeof isActive === 'boolean' ? isActive : props['aria-pressed']\n }\n onClick={disabled || loading ? undefined : debouncedClick}\n className={classNames(\n 'inconel-button',\n `inconel-size-${size}`,\n BUTTON_TYPE_CLASS_NAMES[resolvedType],\n fullWidth && 'inconel-button--full-width',\n progressWidth !== null && 'inconel-button--has-progress',\n pill && 'inconel-button--pill',\n loading && 'inconel-is-loading',\n disabled && 'inconel-is-disabled',\n isActive && 'inconel-is-active',\n className,\n )}\n >\n {progressWidth !== null && (\n <span\n className=\"inconel-button__progress\"\n style={{\n width: `${progressWidth}%`,\n background: progressColor ?? undefined,\n }}\n />\n )}\n {loading && <span className=\"inconel-button__spinner\" aria-hidden=\"true\" />}\n {!iconRight && iconNode}\n {content !== undefined && (\n <span className=\"inconel-button__title\">{content}</span>\n )}\n {iconRight && iconNode}\n {count != null && <span className=\"inconel-button__count\">{count}</span>}\n </button>\n )\n}\n"],"names":["Button","loading","fullWidth","variant","label","buttonType","icon","iconClassName","iconWidth","iconHeight","iconRight","render","debounceTime","isActive","onClick","disabled","className","children","size","fixedHeight","height","pill","count","progress","progressColor","style","props","resolvedType","resolvedStyle","debouncedClick","useMemo","createDebouncedCallback","useEffect","content","progressWidth","iconNode","jsx","classNames","Svg","svg","jsxs","BUTTON_TYPE_CLASS_NAMES"],"mappings":"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"}
|
|
@@ -36,5 +36,5 @@ export interface MultiSelectCheckBoxProps<T extends MultiSelectCheckBoxOption =
|
|
|
36
36
|
limit?: number | null;
|
|
37
37
|
selectionLimit?: number | null;
|
|
38
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;
|
|
39
|
+
export declare function MultiSelectCheckBox<T extends MultiSelectCheckBoxOption = MultiSelectCheckBoxOption>({ id, label, className, labelClassName, inputClassName, optionsClassName, optionItemClassName, searchableInputClassName, options: rawOptions, defaultSelectedOptions: rawDefaultSelectedOptions, 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
40
|
//# sourceMappingURL=MultiSelectCheckBox.d.ts.map
|
|
@@ -1 +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;
|
|
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;AAqBD,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,OAAO,EAAE,UAA0B,EACnC,sBAAsB,EAAE,yBAAyC,EACjE,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,+BAiZ7B"}
|
|
@@ -1,204 +1,210 @@
|
|
|
1
1
|
import { jsx as c, jsxs as v } from "react/jsx-runtime";
|
|
2
|
-
import { useRef as
|
|
3
|
-
import { createPortal as
|
|
2
|
+
import { useMemo as y, useRef as H, useState as x, useCallback as b, useEffect as T, useLayoutEffect as se } from "react";
|
|
3
|
+
import { createPortal as Re } from "react-dom";
|
|
4
4
|
import { classNames as a } from "../shared/classNames.js";
|
|
5
5
|
/* empty css */
|
|
6
|
-
import { DotLoader as
|
|
7
|
-
const
|
|
8
|
-
function
|
|
9
|
-
return
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
import { DotLoader as Ce } from "../DotLoader/DotLoader.js";
|
|
7
|
+
const I = [];
|
|
8
|
+
function ue(r) {
|
|
9
|
+
return Array.isArray(r) ? r : r && typeof r == "object" ? [r] : I;
|
|
10
|
+
}
|
|
11
|
+
function $(r, S, w) {
|
|
12
|
+
return Array.isArray(r) ? r.some(
|
|
13
|
+
(D) => D?.[w] === S?.[w]
|
|
14
|
+
) : !1;
|
|
12
15
|
}
|
|
13
|
-
function
|
|
14
|
-
id:
|
|
15
|
-
label:
|
|
16
|
-
className:
|
|
17
|
-
labelClassName:
|
|
18
|
-
inputClassName:
|
|
19
|
-
optionsClassName:
|
|
16
|
+
function He({
|
|
17
|
+
id: r = null,
|
|
18
|
+
label: S = null,
|
|
19
|
+
className: w = null,
|
|
20
|
+
labelClassName: D = null,
|
|
21
|
+
inputClassName: de = null,
|
|
22
|
+
optionsClassName: ae = null,
|
|
20
23
|
optionItemClassName: K = null,
|
|
21
|
-
searchableInputClassName:
|
|
22
|
-
options:
|
|
23
|
-
defaultSelectedOptions:
|
|
24
|
-
optionLabel:
|
|
24
|
+
searchableInputClassName: me = null,
|
|
25
|
+
options: q = I,
|
|
26
|
+
defaultSelectedOptions: P = I,
|
|
27
|
+
optionLabel: k = "label",
|
|
25
28
|
optionValue: l = "value",
|
|
26
|
-
onChange:
|
|
27
|
-
placeholder:
|
|
28
|
-
selectedInputMessage:
|
|
29
|
-
itemSelectedText:
|
|
30
|
-
selectAllText:
|
|
31
|
-
searchPlaceholder:
|
|
32
|
-
noDataMessage:
|
|
33
|
-
errorMessage:
|
|
34
|
-
errorPlace:
|
|
29
|
+
onChange: W,
|
|
30
|
+
placeholder: Y = "Seçiniz",
|
|
31
|
+
selectedInputMessage: G,
|
|
32
|
+
itemSelectedText: J = "öğe seçili",
|
|
33
|
+
selectAllText: he = "Tümünü Seç",
|
|
34
|
+
searchPlaceholder: pe = "Ara",
|
|
35
|
+
noDataMessage: fe = "Veri bulunamadı",
|
|
36
|
+
errorMessage: N = "",
|
|
37
|
+
errorPlace: M = "out",
|
|
35
38
|
isSearchable: z = !1,
|
|
36
|
-
isLoading:
|
|
37
|
-
isDisabled:
|
|
38
|
-
reactPortal:
|
|
39
|
-
windowPosition:
|
|
40
|
-
windowHeight:
|
|
41
|
-
windowClose:
|
|
42
|
-
isScrollEnd:
|
|
43
|
-
getOptionTooltip:
|
|
44
|
-
limit:
|
|
45
|
-
selectionLimit:
|
|
39
|
+
isLoading: be = !1,
|
|
40
|
+
isDisabled: _ = !1,
|
|
41
|
+
reactPortal: o = !1,
|
|
42
|
+
windowPosition: Q = !1,
|
|
43
|
+
windowHeight: U = 800,
|
|
44
|
+
windowClose: X,
|
|
45
|
+
isScrollEnd: Z,
|
|
46
|
+
getOptionTooltip: _e = (m) => typeof m?.tooltip == "string" ? m.tooltip : void 0,
|
|
47
|
+
limit: ge = null,
|
|
48
|
+
selectionLimit: ve = null
|
|
46
49
|
}) {
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
const m = y(() => ue(q), [q]), O = y(
|
|
51
|
+
() => ue(P),
|
|
52
|
+
[P]
|
|
53
|
+
), V = H(null), E = H(null), ee = H(null), [s, te] = x(!1), [t, ne] = x(
|
|
54
|
+
O
|
|
55
|
+
), [L, ce] = x(
|
|
50
56
|
null
|
|
51
|
-
), [B,
|
|
52
|
-
if (
|
|
53
|
-
|
|
57
|
+
), [B, le] = x(""), [xe, ke] = x(null), [ye, oe] = x(!1), u = Number(ge ?? ve), h = Number.isFinite(u) && u > 0, A = b(() => {
|
|
58
|
+
if (Q) {
|
|
59
|
+
ce(Number(U) < 800 ? "top" : "bottom");
|
|
54
60
|
return;
|
|
55
61
|
}
|
|
56
|
-
const e =
|
|
62
|
+
const e = E.current;
|
|
57
63
|
if (!e) return;
|
|
58
|
-
const n = e.getBoundingClientRect(),
|
|
59
|
-
|
|
60
|
-
|
|
64
|
+
const n = e.getBoundingClientRect(), i = window.innerHeight - n.bottom, d = n.top, f = 240 + (z ? 46 : 0) + 40;
|
|
65
|
+
ce(
|
|
66
|
+
i < f && d > i ? "top" : "bottom"
|
|
61
67
|
);
|
|
62
|
-
}, [z,
|
|
63
|
-
if (!
|
|
64
|
-
const e =
|
|
65
|
-
|
|
68
|
+
}, [z, U, Q]), R = b(() => {
|
|
69
|
+
if (!o || !E.current) return;
|
|
70
|
+
const e = E.current.getBoundingClientRect();
|
|
71
|
+
ke({
|
|
66
72
|
position: "fixed",
|
|
67
73
|
left: e.left,
|
|
68
|
-
top:
|
|
74
|
+
top: L === "top" ? e.top : e.bottom,
|
|
69
75
|
width: e.width,
|
|
70
76
|
zIndex: 9999
|
|
71
|
-
}),
|
|
72
|
-
}, [
|
|
77
|
+
}), oe(!0);
|
|
78
|
+
}, [o, L]);
|
|
73
79
|
T(() => {
|
|
74
|
-
const e =
|
|
75
|
-
|
|
76
|
-
}, [
|
|
77
|
-
s || (
|
|
78
|
-
}, [s,
|
|
80
|
+
const e = h ? O.slice(0, u) : O;
|
|
81
|
+
ne(e);
|
|
82
|
+
}, [O, h, u]), T(() => {
|
|
83
|
+
s || (X?.(!0), le(""));
|
|
84
|
+
}, [s, X]), T(() => {
|
|
79
85
|
if (!s) return;
|
|
80
|
-
const e =
|
|
81
|
-
const
|
|
82
|
-
!
|
|
86
|
+
const e = V.current, n = ee.current, i = (d) => {
|
|
87
|
+
const f = d.target, C = e?.contains(f), Ae = n?.contains(f);
|
|
88
|
+
!C && !Ae && te(!1);
|
|
83
89
|
};
|
|
84
|
-
return document.addEventListener("pointerdown",
|
|
85
|
-
}, [s]),
|
|
90
|
+
return document.addEventListener("pointerdown", i, !0), () => document.removeEventListener("pointerdown", i, !0);
|
|
91
|
+
}, [s]), se(() => {
|
|
86
92
|
if (!s) {
|
|
87
|
-
|
|
93
|
+
oe(!1);
|
|
88
94
|
return;
|
|
89
95
|
}
|
|
90
|
-
|
|
91
|
-
}, [s,
|
|
92
|
-
!s || !
|
|
93
|
-
}, [s,
|
|
96
|
+
A();
|
|
97
|
+
}, [s, A]), se(() => {
|
|
98
|
+
!s || !o || R();
|
|
99
|
+
}, [s, o, R]), T(() => {
|
|
94
100
|
if (!s) return;
|
|
95
101
|
const e = () => {
|
|
96
|
-
|
|
102
|
+
A(), o && R();
|
|
97
103
|
};
|
|
98
104
|
return window.addEventListener("resize", e), window.addEventListener("scroll", e, !0), () => {
|
|
99
105
|
window.removeEventListener("resize", e), window.removeEventListener("scroll", e, !0);
|
|
100
106
|
};
|
|
101
|
-
}, [s,
|
|
102
|
-
const
|
|
107
|
+
}, [s, o, A, R]);
|
|
108
|
+
const g = b(
|
|
103
109
|
(e) => {
|
|
104
|
-
|
|
110
|
+
ne(e), W?.(e);
|
|
105
111
|
},
|
|
106
|
-
[
|
|
107
|
-
),
|
|
112
|
+
[W]
|
|
113
|
+
), Se = b(
|
|
108
114
|
(e) => {
|
|
109
115
|
const n = e.currentTarget;
|
|
110
|
-
n.scrollHeight - n.scrollTop <= n.clientHeight + 1 &&
|
|
116
|
+
n.scrollHeight - n.scrollTop <= n.clientHeight + 1 && Z?.(!0);
|
|
111
117
|
},
|
|
112
|
-
[
|
|
113
|
-
),
|
|
118
|
+
[Z]
|
|
119
|
+
), we = b(
|
|
114
120
|
(e) => {
|
|
115
121
|
if ($(t, e, l)) {
|
|
116
|
-
|
|
122
|
+
g(
|
|
117
123
|
t.filter(
|
|
118
124
|
(n) => n?.[l] !== e?.[l]
|
|
119
125
|
)
|
|
120
126
|
);
|
|
121
127
|
return;
|
|
122
128
|
}
|
|
123
|
-
|
|
129
|
+
h && t.length >= u || g([...t, e]);
|
|
124
130
|
},
|
|
125
131
|
[
|
|
126
|
-
|
|
127
|
-
|
|
132
|
+
h,
|
|
133
|
+
u,
|
|
128
134
|
l,
|
|
129
135
|
t,
|
|
130
|
-
|
|
136
|
+
g
|
|
131
137
|
]
|
|
132
|
-
),
|
|
138
|
+
), p = y(() => {
|
|
133
139
|
const e = B.trim().toLocaleLowerCase();
|
|
134
|
-
return e ?
|
|
135
|
-
(n) => String(n?.[
|
|
136
|
-
) :
|
|
137
|
-
}, [
|
|
138
|
-
|
|
139
|
-
}, [
|
|
140
|
-
(e.key === "Enter" || e.key === " ") && (e.preventDefault(),
|
|
141
|
-
}, F =
|
|
142
|
-
() =>
|
|
140
|
+
return e ? m.filter(
|
|
141
|
+
(n) => String(n?.[k] ?? "").toLocaleLowerCase().includes(e)
|
|
142
|
+
) : m;
|
|
143
|
+
}, [m, k, B]), Ne = y(() => t.length === 0 ? "" : t.length === 1 ? String(t[0]?.[k] ?? "") : `${t.length} ${G || J}`, [J, k, G, t]), Oe = M === "in" && N || Y, ie = b(() => {
|
|
144
|
+
_ || te((e) => !e);
|
|
145
|
+
}, [_]), Ee = (e) => {
|
|
146
|
+
(e.key === "Enter" || e.key === " ") && (e.preventDefault(), ie());
|
|
147
|
+
}, F = y(
|
|
148
|
+
() => p.length > 0 && p.every(
|
|
143
149
|
(e) => $(t, e, l)
|
|
144
150
|
),
|
|
145
|
-
[
|
|
146
|
-
),
|
|
151
|
+
[p, l, t]
|
|
152
|
+
), Le = b(() => {
|
|
147
153
|
if (F) {
|
|
148
|
-
|
|
154
|
+
g(
|
|
149
155
|
t.filter(
|
|
150
|
-
(
|
|
151
|
-
(
|
|
156
|
+
(i) => !p.some(
|
|
157
|
+
(d) => i?.[l] === d?.[l]
|
|
152
158
|
)
|
|
153
159
|
)
|
|
154
160
|
);
|
|
155
161
|
return;
|
|
156
162
|
}
|
|
157
|
-
const e =
|
|
158
|
-
(
|
|
159
|
-
), n =
|
|
160
|
-
|
|
163
|
+
const e = p.filter(
|
|
164
|
+
(i) => !$(t, i, l)
|
|
165
|
+
), n = h ? e.slice(0, Math.max(u - t.length, 0)) : e;
|
|
166
|
+
g([...t, ...n]);
|
|
161
167
|
}, [
|
|
162
168
|
F,
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
169
|
+
p,
|
|
170
|
+
h,
|
|
171
|
+
u,
|
|
166
172
|
l,
|
|
167
173
|
t,
|
|
168
|
-
|
|
169
|
-
]),
|
|
174
|
+
g
|
|
175
|
+
]), j = r || "inconel-multi-select-checkbox", re = /* @__PURE__ */ c(
|
|
170
176
|
"div",
|
|
171
177
|
{
|
|
172
|
-
ref:
|
|
178
|
+
ref: o ? ee : void 0,
|
|
173
179
|
className: a(
|
|
174
180
|
"inconel-multi-select-checkbox__panel-wrap",
|
|
175
|
-
|
|
176
|
-
|
|
181
|
+
o && "inconel-multi-select-checkbox__panel-wrap--portal",
|
|
182
|
+
L === "top" && "inconel-is-open-top"
|
|
177
183
|
),
|
|
178
|
-
style:
|
|
184
|
+
style: o ? { ...xe ?? {}, visibility: ye ? "visible" : "hidden" } : void 0,
|
|
179
185
|
onPointerDown: (e) => e.stopPropagation(),
|
|
180
186
|
children: /* @__PURE__ */ v(
|
|
181
187
|
"div",
|
|
182
188
|
{
|
|
183
189
|
className: a(
|
|
184
190
|
"inconel-multi-select-checkbox__options",
|
|
185
|
-
|
|
186
|
-
|
|
191
|
+
o && "inconel-multi-select-checkbox__options--portal",
|
|
192
|
+
ae
|
|
187
193
|
),
|
|
188
|
-
onScroll:
|
|
194
|
+
onScroll: Se,
|
|
189
195
|
children: [
|
|
190
196
|
z && /* @__PURE__ */ c("div", { className: "inconel-multi-select-checkbox__search", children: /* @__PURE__ */ c(
|
|
191
197
|
"input",
|
|
192
198
|
{
|
|
193
199
|
type: "text",
|
|
194
|
-
placeholder:
|
|
200
|
+
placeholder: pe,
|
|
195
201
|
className: a(
|
|
196
202
|
"inconel-multi-select-checkbox__search-input",
|
|
197
|
-
|
|
203
|
+
me
|
|
198
204
|
),
|
|
199
205
|
value: B,
|
|
200
|
-
onChange: (e) =>
|
|
201
|
-
disabled:
|
|
206
|
+
onChange: (e) => le(e.target.value),
|
|
207
|
+
disabled: _
|
|
202
208
|
}
|
|
203
209
|
) }),
|
|
204
210
|
/* @__PURE__ */ v(
|
|
@@ -212,44 +218,44 @@ function Be({
|
|
|
212
218
|
/* @__PURE__ */ c(
|
|
213
219
|
"input",
|
|
214
220
|
{
|
|
215
|
-
id: `${
|
|
221
|
+
id: `${j}-select-all`,
|
|
216
222
|
type: "checkbox",
|
|
217
223
|
checked: F,
|
|
218
|
-
onChange:
|
|
219
|
-
disabled:
|
|
224
|
+
onChange: Le,
|
|
225
|
+
disabled: _
|
|
220
226
|
}
|
|
221
227
|
),
|
|
222
|
-
/* @__PURE__ */ c("label", { htmlFor: `${
|
|
228
|
+
/* @__PURE__ */ c("label", { htmlFor: `${j}-select-all`, children: he })
|
|
223
229
|
]
|
|
224
230
|
}
|
|
225
231
|
),
|
|
226
|
-
|
|
227
|
-
const
|
|
232
|
+
p.map((e, n) => {
|
|
233
|
+
const i = e?.[l] ?? n, d = $(t, e, l), f = _ || !d && h && t.length >= u, C = `${j}-${String(i)}`;
|
|
228
234
|
return /* @__PURE__ */ v(
|
|
229
235
|
"div",
|
|
230
236
|
{
|
|
231
237
|
className: a(
|
|
232
238
|
"inconel-multi-select-checkbox__option-item",
|
|
233
|
-
|
|
234
|
-
|
|
239
|
+
d && "inconel-is-selected",
|
|
240
|
+
f && "inconel-is-disabled",
|
|
235
241
|
K
|
|
236
242
|
),
|
|
237
|
-
title:
|
|
243
|
+
title: _e(e),
|
|
238
244
|
children: [
|
|
239
245
|
/* @__PURE__ */ c(
|
|
240
246
|
"input",
|
|
241
247
|
{
|
|
242
|
-
id:
|
|
248
|
+
id: C,
|
|
243
249
|
type: "checkbox",
|
|
244
|
-
checked:
|
|
245
|
-
onChange: () =>
|
|
246
|
-
disabled:
|
|
250
|
+
checked: d,
|
|
251
|
+
onChange: () => we(e),
|
|
252
|
+
disabled: f
|
|
247
253
|
}
|
|
248
254
|
),
|
|
249
|
-
/* @__PURE__ */ c("label", { htmlFor:
|
|
255
|
+
/* @__PURE__ */ c("label", { htmlFor: C, children: String(e?.[k] ?? "") })
|
|
250
256
|
]
|
|
251
257
|
},
|
|
252
|
-
String(
|
|
258
|
+
String(i)
|
|
253
259
|
);
|
|
254
260
|
})
|
|
255
261
|
]
|
|
@@ -260,37 +266,37 @@ function Be({
|
|
|
260
266
|
return /* @__PURE__ */ v(
|
|
261
267
|
"div",
|
|
262
268
|
{
|
|
263
|
-
ref:
|
|
264
|
-
id:
|
|
269
|
+
ref: V,
|
|
270
|
+
id: r ?? void 0,
|
|
265
271
|
className: a(
|
|
266
272
|
"inconel-multi-select-checkbox",
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
273
|
+
N && "inconel-is-error",
|
|
274
|
+
_ && "inconel-is-disabled",
|
|
275
|
+
L === "top" && !o && "inconel-is-open-top",
|
|
276
|
+
w
|
|
271
277
|
),
|
|
272
278
|
children: [
|
|
273
|
-
|
|
279
|
+
S && /* @__PURE__ */ c(
|
|
274
280
|
"span",
|
|
275
281
|
{
|
|
276
282
|
className: a(
|
|
277
283
|
"inconel-multi-select-checkbox__label",
|
|
278
|
-
|
|
284
|
+
D
|
|
279
285
|
),
|
|
280
|
-
children:
|
|
286
|
+
children: S
|
|
281
287
|
}
|
|
282
288
|
),
|
|
283
289
|
/* @__PURE__ */ v("div", { className: "inconel-multi-select-checkbox__input-wrap", children: [
|
|
284
|
-
|
|
290
|
+
be && /* @__PURE__ */ c("div", { className: "inconel-multi-select-checkbox__loader-cover", children: /* @__PURE__ */ c(Ce, {}) }),
|
|
285
291
|
/* @__PURE__ */ v(
|
|
286
292
|
"div",
|
|
287
293
|
{
|
|
288
|
-
ref:
|
|
294
|
+
ref: E,
|
|
289
295
|
role: "button",
|
|
290
296
|
tabIndex: 0,
|
|
291
297
|
className: "inconel-multi-select-checkbox__input-container",
|
|
292
|
-
onClick:
|
|
293
|
-
onKeyDown:
|
|
298
|
+
onClick: ie,
|
|
299
|
+
onKeyDown: Ee,
|
|
294
300
|
children: [
|
|
295
301
|
/* @__PURE__ */ c(
|
|
296
302
|
"input",
|
|
@@ -298,11 +304,11 @@ function Be({
|
|
|
298
304
|
type: "text",
|
|
299
305
|
className: a(
|
|
300
306
|
"inconel-multi-select-checkbox__input",
|
|
301
|
-
|
|
307
|
+
de
|
|
302
308
|
),
|
|
303
|
-
placeholder:
|
|
309
|
+
placeholder: Oe,
|
|
304
310
|
readOnly: !0,
|
|
305
|
-
value:
|
|
311
|
+
value: Ne
|
|
306
312
|
}
|
|
307
313
|
),
|
|
308
314
|
/* @__PURE__ */ c(
|
|
@@ -316,13 +322,13 @@ function Be({
|
|
|
316
322
|
}
|
|
317
323
|
)
|
|
318
324
|
] }),
|
|
319
|
-
s && (
|
|
320
|
-
|
|
325
|
+
s && (m.length > 0 ? o ? Re(re, document.body) : re : /* @__PURE__ */ c("div", { className: "inconel-multi-select-checkbox__nodata", children: /* @__PURE__ */ c("span", { children: fe }) })),
|
|
326
|
+
M !== "in" && N && /* @__PURE__ */ c("span", { className: "inconel-multi-select-checkbox__error", children: N })
|
|
321
327
|
]
|
|
322
328
|
}
|
|
323
329
|
);
|
|
324
330
|
}
|
|
325
331
|
export {
|
|
326
|
-
|
|
332
|
+
He as MultiSelectCheckBox
|
|
327
333
|
};
|
|
328
334
|
//# sourceMappingURL=MultiSelectCheckBox.js.map
|
|
@@ -1 +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 recomputeOpenDirection = useCallback(() => {\n if (windowPosition) {\n setOpenDirection(Number(windowHeight) < 800 ? 'top' : 'bottom')\n return\n }\n const anchor = anchorRef.current\n if (!anchor) return\n const rect = anchor.getBoundingClientRect()\n const spaceBelow = window.innerHeight - rect.bottom\n const spaceAbove = rect.top\n const estimatedPanelHeight = 240 + (isSearchable ? 46 : 0) + 40\n setOpenDirection(\n spaceBelow < estimatedPanelHeight && spaceAbove > spaceBelow\n ? 'top'\n : 'bottom',\n )\n }, [isSearchable, windowHeight, windowPosition])\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: openDirection === 'top' ? rect.top : rect.bottom,\n width: rect.width,\n zIndex: 9999,\n })\n setPortalReady(true)\n }, [reactPortal, openDirection])\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 recomputeOpenDirection()\n }, [showOptions, recomputeOpenDirection])\n\n useLayoutEffect(() => {\n if (!showOptions || !reactPortal) return\n recomputePortalPosition()\n }, [showOptions, reactPortal, recomputePortalPosition])\n\n useEffect(() => {\n if (!showOptions) return undefined\n\n const handleReposition = () => {\n recomputeOpenDirection()\n if (reactPortal) recomputePortalPosition()\n }\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, recomputeOpenDirection, recomputePortalPosition])\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","recomputeOpenDirection","useCallback","anchor","rect","spaceBelow","spaceAbove","estimatedPanelHeight","recomputePortalPosition","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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"}
|
|
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 toOptionArray<T>(value: unknown): T[] {\n if (Array.isArray(value)) return value as T[]\n if (value && typeof value === 'object') return [value as T]\n return EMPTY_OPTIONS\n}\n\nfunction isOptionSelected<T extends MultiSelectCheckBoxOption>(\n selected: T[],\n option: T,\n optionValue: string,\n) {\n if (!Array.isArray(selected)) return false\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: rawOptions = EMPTY_OPTIONS,\n defaultSelectedOptions: rawDefaultSelectedOptions = 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 options = useMemo(() => toOptionArray<T>(rawOptions), [rawOptions])\n const defaultSelectedOptions = useMemo(\n () => toOptionArray<T>(rawDefaultSelectedOptions),\n [rawDefaultSelectedOptions],\n )\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 recomputeOpenDirection = useCallback(() => {\n if (windowPosition) {\n setOpenDirection(Number(windowHeight) < 800 ? 'top' : 'bottom')\n return\n }\n const anchor = anchorRef.current\n if (!anchor) return\n const rect = anchor.getBoundingClientRect()\n const spaceBelow = window.innerHeight - rect.bottom\n const spaceAbove = rect.top\n const estimatedPanelHeight = 240 + (isSearchable ? 46 : 0) + 40\n setOpenDirection(\n spaceBelow < estimatedPanelHeight && spaceAbove > spaceBelow\n ? 'top'\n : 'bottom',\n )\n }, [isSearchable, windowHeight, windowPosition])\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: openDirection === 'top' ? rect.top : rect.bottom,\n width: rect.width,\n zIndex: 9999,\n })\n setPortalReady(true)\n }, [reactPortal, openDirection])\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 recomputeOpenDirection()\n }, [showOptions, recomputeOpenDirection])\n\n useLayoutEffect(() => {\n if (!showOptions || !reactPortal) return\n recomputePortalPosition()\n }, [showOptions, reactPortal, recomputePortalPosition])\n\n useEffect(() => {\n if (!showOptions) return undefined\n\n const handleReposition = () => {\n recomputeOpenDirection()\n if (reactPortal) recomputePortalPosition()\n }\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, recomputeOpenDirection, recomputePortalPosition])\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","toOptionArray","value","isOptionSelected","selected","option","optionValue","item","MultiSelectCheckBox","id","label","className","labelClassName","inputClassName","optionsClassName","optionItemClassName","searchableInputClassName","rawOptions","rawDefaultSelectedOptions","optionLabel","onChange","placeholder","selectedInputMessage","itemSelectedText","selectAllText","searchPlaceholder","noDataMessage","errorMessage","errorPlace","isSearchable","isLoading","isDisabled","reactPortal","windowPosition","windowHeight","windowClose","isScrollEnd","getOptionTooltip","limit","selectionLimit","options","useMemo","defaultSelectedOptions","rootRef","useRef","anchorRef","portalWrapRef","showOptions","setShowOptions","useState","selectedOptions","setSelectedOptions","openDirection","setOpenDirection","searchValue","setSearchValue","portalStyle","setPortalStyle","portalReady","setPortalReady","maxSelectionCount","hasSelectionLimit","recomputeOpenDirection","useCallback","anchor","rect","spaceBelow","spaceAbove","estimatedPanelHeight","recomputePortalPosition","useEffect","next","rootEl","portalEl","handlePointerDown","event","target","inRoot","inPortal","useLayoutEffect","handleReposition","updateSelection","handleScroll","toggleOption","filteredOptions","query","inputValue","inputPlaceholder","toggleDropdown","prev","handleTriggerKeyDown","allFilteredSelected","handleSelectAll","toAdd","limitedToAdd","baseId","optionsPanel","jsx","classNames","jsxs","index","checked","optionDisabled","inputId","DotLoader","createPortal"],"mappings":"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"}
|