@xploreu/components 0.4.11 → 0.4.13
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/chunk-3QGG35QR.js +2 -0
- package/dist/chunk-3QGG35QR.js.map +1 -0
- package/dist/chunk-7YSKM6DP.js +2 -0
- package/dist/{chunk-34QGQHPC.js.map → chunk-7YSKM6DP.js.map} +1 -1
- package/dist/chunk-AGTMOMFO.js +2 -0
- package/dist/chunk-AGTMOMFO.js.map +1 -0
- package/dist/chunk-C3FYXQCF.js +2 -0
- package/dist/chunk-C3FYXQCF.js.map +1 -0
- package/dist/chunk-DNO5M44I.js +2 -0
- package/dist/{chunk-BIFRDHOB.js.map → chunk-DNO5M44I.js.map} +1 -1
- package/dist/chunk-FDXCGFD2.js +2 -0
- package/dist/{chunk-44LMOSRI.js.map → chunk-FDXCGFD2.js.map} +1 -1
- package/dist/chunk-KKE76CHJ.js +2 -0
- package/dist/{chunk-CXTKXMUH.js.map → chunk-KKE76CHJ.js.map} +1 -1
- package/dist/{chunk-T2PMDMOY.js → chunk-RSLKHDFJ.js} +2 -2
- package/dist/{chunk-T2PMDMOY.js.map → chunk-RSLKHDFJ.js.map} +1 -1
- package/dist/chunk-SFMNEY3D.js +2 -0
- package/dist/{chunk-RBTN73H3.js.map → chunk-SFMNEY3D.js.map} +1 -1
- package/dist/chunk-WCAQIMAH.js +2 -0
- package/dist/{chunk-WMEGATWF.js.map → chunk-WCAQIMAH.js.map} +1 -1
- package/dist/chunk-ZZWSZRER.js +2 -0
- package/dist/chunk-ZZWSZRER.js.map +1 -0
- package/dist/composites/combobox-chip-outside.d.ts +1 -0
- package/dist/composites/combobox-chip-outside.js +1 -1
- package/dist/composites/combobox-chip.d.ts +1 -0
- package/dist/composites/combobox-chip.js +1 -1
- package/dist/composites/combobox-simple.d.ts +1 -0
- package/dist/composites/combobox-simple.js +1 -1
- package/dist/composites/filter-combobox.d.ts +1 -0
- package/dist/composites/filter-combobox.js +1 -1
- package/dist/composites/index.d.ts +1 -0
- package/dist/composites/index.js +1 -1
- package/dist/composites/phone-input.js +1 -1
- package/dist/composites/profile-avatar.d.ts +1 -1
- package/dist/composites/profile-avatar.js +1 -1
- package/dist/form/form-input.js +1 -1
- package/dist/form/index.js +1 -1
- package/dist/icons/index.js +1 -1
- package/dist/primitives/combobox.d.ts +77 -0
- package/dist/primitives/combobox.js +2 -0
- package/dist/primitives/combobox.js.map +1 -0
- package/dist/primitives/index.d.ts +3 -1
- package/dist/primitives/index.js +1 -1
- package/dist/ui/combobox.d.ts +4 -34
- package/dist/ui/combobox.js +1 -1
- package/dist/ui/date-multiple-picker.js +1 -1
- package/dist/ui/date-picker.js +1 -1
- package/dist/ui/date-range-picker.js +1 -1
- package/dist/ui/index.d.ts +1 -0
- package/dist/ui/index.js +1 -1
- package/dist/ui/input.js +1 -1
- package/dist/ui/pagination.js +1 -1
- package/dist/ui/table.js +1 -1
- package/dist/ui/tabs.d.ts +5 -3
- package/dist/ui/tabs.js +1 -1
- package/dist/ui/toast.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-34QGQHPC.js +0 -2
- package/dist/chunk-44LMOSRI.js +0 -2
- package/dist/chunk-BIFRDHOB.js +0 -2
- package/dist/chunk-CXTKXMUH.js +0 -2
- package/dist/chunk-I57X26R2.js +0 -2
- package/dist/chunk-I57X26R2.js.map +0 -1
- package/dist/chunk-NVQMVFSP.js +0 -2
- package/dist/chunk-NVQMVFSP.js.map +0 -1
- package/dist/chunk-RBTN73H3.js +0 -2
- package/dist/chunk-WIUYDPXB.js +0 -2
- package/dist/chunk-WIUYDPXB.js.map +0 -1
- package/dist/chunk-WMEGATWF.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {d,e,b,c,f,g,h,i,j,a,l}from'./chunk-4IAMLCAM.js';import {b as b$1}from'./chunk-VNAMAKPG.js';import {a as a$1}from'./chunk-WI5V5Z76.js';import {b as b$3}from'./chunk-QWCYJC3T.js';import {b as b$4}from'./chunk-4WDDWMBW.js';import {b as b$2}from'./chunk-ZQWDYX2E.js';import'react';import {cn}from'@xploreu/lib/cn';import {XIcon,Loader2Icon}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';function k({...t}){return jsx(d,{...t})}var D={"top-right":"fixed top-4 inset-x-4 sm:inset-x-auto sm:top-4 sm:right-4 sm:left-auto sm:w-full sm:max-w-sm","top-left":"fixed top-4 inset-x-4 sm:inset-x-auto sm:top-4 sm:left-4 sm:right-auto sm:w-full sm:max-w-sm","top-center":"fixed top-4 left-1/2 -translate-x-1/2 w-[calc(100%-2rem)] sm:w-full sm:max-w-sm","bottom-right":"fixed bottom-4 inset-x-4 sm:inset-x-auto sm:bottom-4 sm:right-4 sm:left-auto sm:w-full sm:max-w-sm","bottom-left":"fixed bottom-4 inset-x-4 sm:inset-x-auto sm:bottom-4 sm:left-4 sm:right-auto sm:w-full sm:max-w-sm","bottom-center":"fixed bottom-4 left-1/2 -translate-x-1/2 w-[calc(100%-2rem)] sm:w-full sm:max-w-sm"};function z({className:t,position:o="top-right",...e$1}){return jsx(e,{className:cn("group/viewport pointer-events-none z-[1000] mx-auto outline-none",D[o],t),...e$1})}function A(t){return jsx(b,{...t})}function V({className:t,children:o,style:e,...i}){return jsxs(c,{style:e,className:cn("group/toast pointer-events-auto absolute right-0 z-[calc(1000-var(--toast-index))] w-full shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-focus-ring","bottom-0 origin-bottom rounded-l-[10.4px] rounded-r-lg","data-[position^=top]:top-0 data-[position^=top]:bottom-auto data-[position^=top]:origin-top","[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc((var(--toast-index)*(var(--height)+var(--gap))*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]","data-[position^=top]:[--offset-y:calc((var(--toast-index)*(var(--height)+var(--gap)))+var(--toast-swipe-movement-y))]","h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]","data-[position^=top]:[transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)+(var(--toast-index)*var(--peek))+(var(--shrink)*var(--height))))_scale(var(--scale))]","after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']","group-hover/viewport:data-expanded:h-(--toast-height) group-hover/viewport:data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]","group-focus-within/viewport:data-expanded:h-(--toast-height) group-focus-within/viewport:data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]","data-limited:opacity-0 data-limited:pointer-events-none data-limited:invisible data-starting-style:[transform:translateY(150%)]","data-[position^=top]:data-starting-style:[transform:translateY(-150%)]","[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]","data-[position^=top]:[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(-150%)]","data-ending-style:opacity-0","data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]","data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]","data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]","data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]","group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]","group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]","group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]","group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]","group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]","group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]","group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]","group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]",t),...i,children:[jsx("div",{className:cn("absolute left-0 inset-y-0 w-[10.4px] rounded-l-[10.4px] bg-[linear-gradient(180deg,#377DFA_0%,#185BC2_80%)]","group-data-[type=warning]/toast:bg-[linear-gradient(180deg,#F79009_0%,#B54708_80%)]","group-data-[type=info]/toast:bg-[linear-gradient(180deg,#068BEE_0%,#175BCC_80%)]","group-data-[type=success]/toast:bg-[linear-gradient(180deg,#17B26A_0%,#067647_80%)]","group-data-[type=error]/toast:bg-[linear-gradient(180deg,#F04438_0%,#B42318_80%)]")}),jsx("div",{className:cn("relative border border-border-secondary rounded-lg ml-[2.4px] bg-bg-primary z-10 bg-radial-[100%_200%_at_0%_0%] to-bg-primary","from-modal-dialog-stop-0","group-data-[type=warning]/toast:from-utility-warning-50","group-data-[type=info]/toast:from-utility-blue-50","group-data-[type=success]/toast:from-utility-success-50","group-data-[type=error]/toast:from-utility-error-50"),children:o})]})}function X({className:t,...o}){return jsx(f,{className:cn("flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-behind/toast:opacity-0 group-hover/viewport:group-data-expanded/toast:opacity-100 group-focus-within/viewport:group-data-expanded/toast:opacity-100",t),...o})}function I({className:t,...o}){return jsx(g,{className:cn("text-label-semibold-2 text-text-primary","group-data-[type=warning]/toast:text-text-warning-primary","group-data-[type=info]/toast:text-text-info-primary","group-data-[type=success]/toast:text-text-success-primary","group-data-[type=error]/toast:text-text-error-primary",t),...o})}function B({className:t,...o}){return jsx(h,{className:cn("text-body-regular-2 text-text-secondary",t),...o})}function S({className:t,render:o=jsx(b$1,{size:"sm",variant:"secondary"}),...e}){return jsx(i,{render:o,className:cn("shrink-0",t),...e})}function R({className:t,children:o,...e}){return jsx(j,{"aria-label":"Close toast",className:cn("relative shrink-0 text-fg-quaternary after:absolute after:-inset-2 after:content-[''] hover:text-text-error-primary size-6 inline-flex items-center justify-center [&_svg:not([class*='size-'])]:size-3.5",t),...e,children:o??jsx(XIcon,{"aria-hidden":"true"})})}function q({type:t}){let o=null;return t==="success"&&(o=jsx(b$2,{className:"text-fg-success-primary"})),t==="info"&&(o=jsx(a$1,{className:"text-fg-info-primary"})),t==="warning"&&(o=jsx(b$3,{className:"text-fg-warning-primary"})),t==="error"&&(o=jsx(b$4,{className:"text-fg-error-primary"})),t==="loading"&&(o=jsx(Loader2Icon,{className:"animate-spin","aria-hidden":"true"})),o?jsx("span",{"data-slot":"toast-icon",className:"shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-6",children:o}):null}var F=["top-right","top-left","top-center","bottom-right","bottom-left","bottom-center"];function M({defaultPosition:t,position:o,limit:e=3}){let{toasts:i}=l();return i.filter(s=>(s.position??t)===o).map((s,p)=>jsx(V,{toast:s,"data-position":o,"data-behind":p>0?"":void 0,"data-limited":e!==void 0&&p>=e?"":void 0,style:{"--toast-index":p},children:jsxs(X,{children:[jsx(q,{type:s.type}),jsxs("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:[jsx(I,{}),jsx(B,{})]}),jsx(S,{}),jsx(R,{})]})},s.id))}function K({children:t,position:o="top-right",limit:e=3,toastManager:i=a,...l}){return jsxs(A,{toastManager:i,limit:e,...l,children:[t,jsx(k,{children:F.map(s=>jsx(z,{position:s,children:jsx(M,{defaultPosition:o,position:s,limit:e})},s))})]})}export{k as a,z as b,A as c,V as d,X as e,I as f,B as g,S as h,R as i,K as j};//# sourceMappingURL=chunk-3QGG35QR.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-3QGG35QR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/toast.tsx"],"names":["ToastPortal","props","jsx","positionVariants","ToastViewport","className","position","cn","ToastProvider","Toast","children","style","jsxs","ToastContent","ToastTitle","ToastDescription","ToastAction","render","Button","ToastClose","XIcon","ToastIcon","type","icon","check_square_icon_default","info_square_icon_default","danger_triangle_icon_default","close_square_icon_default","Loader2Icon","POSITIONS","ToastList","defaultPosition","limit","toasts","useToastManager","item","toastItem","index","Toaster","toastManager","toast","pos"],"mappings":"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","file":"chunk-3QGG35QR.js","sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport {\r\n ToastPortal as ToastPortalPrimitive,\r\n ToastViewport as ToastViewportPrimitive,\r\n ToastProvider as ToastProviderPrimitive,\r\n Toast as ToastPrimitive,\r\n ToastContent as ToastContentPrimitive,\r\n ToastTitle as ToastTitlePrimitive,\r\n ToastDescription as ToastDescriptionPrimitive,\r\n ToastAction as ToastActionPrimitive,\r\n ToastClose as ToastClosePrimitive,\r\n toast,\r\n createToastManager,\r\n useToastManager,\r\n type ToastPortalProps as ToastPortalPrimitiveProps,\r\n type ToastViewportProps as ToastViewportPrimitiveProps,\r\n type ToastProviderProps as ToastProviderPrimitiveProps,\r\n type ToastProps as ToastPrimitiveProps,\r\n type ToastContentProps as ToastContentPrimitiveProps,\r\n type ToastTitleProps as ToastTitlePrimitiveProps,\r\n type ToastDescriptionProps as ToastDescriptionPrimitiveProps,\r\n type ToastActionProps as ToastActionPrimitiveProps,\r\n type ToastCloseProps as ToastClosePrimitiveProps,\r\n} from \"../primitives/toast\";\r\nimport { cn } from \"@xploreu/lib/cn\";\r\nimport {\r\n InfoSquareIcon,\r\n CheckSquareIcon,\r\n CloseSquareIcon,\r\n DangerTriangleIcon,\r\n} from \"../icons\";\r\nimport { Button } from \"./button\";\r\nimport {\r\n XIcon,\r\n Loader2Icon\r\n} from \"lucide-react\"\r\n\r\ntype ToastPortalProps = ToastPortalPrimitiveProps;\r\n\r\nfunction ToastPortal({ ...props }: ToastPortalProps) {\r\n return <ToastPortalPrimitive {...props} />;\r\n}\r\n\r\nexport type ToastPosition =\r\n | \"top-right\"\r\n | \"top-left\"\r\n | \"top-center\"\r\n | \"bottom-right\"\r\n | \"bottom-left\"\r\n | \"bottom-center\";\r\n\r\ndeclare module \"@base-ui/react/toast\" {\r\n interface ToastObject<Data extends object> {\r\n position?: ToastPosition;\r\n }\r\n}\r\n\r\ntype ToastViewportProps = ToastViewportPrimitiveProps & {\r\n position?: ToastPosition;\r\n};\r\n\r\nconst positionVariants: Record<ToastPosition, string> = {\r\n \"top-right\":\r\n \"fixed top-4 inset-x-4 sm:inset-x-auto sm:top-4 sm:right-4 sm:left-auto sm:w-full sm:max-w-sm\",\r\n \"top-left\":\r\n \"fixed top-4 inset-x-4 sm:inset-x-auto sm:top-4 sm:left-4 sm:right-auto sm:w-full sm:max-w-sm\",\r\n \"top-center\":\r\n \"fixed top-4 left-1/2 -translate-x-1/2 w-[calc(100%-2rem)] sm:w-full sm:max-w-sm\",\r\n \"bottom-right\":\r\n \"fixed bottom-4 inset-x-4 sm:inset-x-auto sm:bottom-4 sm:right-4 sm:left-auto sm:w-full sm:max-w-sm\",\r\n \"bottom-left\":\r\n \"fixed bottom-4 inset-x-4 sm:inset-x-auto sm:bottom-4 sm:left-4 sm:right-auto sm:w-full sm:max-w-sm\",\r\n \"bottom-center\":\r\n \"fixed bottom-4 left-1/2 -translate-x-1/2 w-[calc(100%-2rem)] sm:w-full sm:max-w-sm\",\r\n};\r\n\r\nfunction ToastViewport({\r\n className,\r\n position = \"top-right\",\r\n ...props\r\n}: ToastViewportProps) {\r\n return (\r\n <ToastViewportPrimitive\r\n className={cn(\r\n \"group/viewport pointer-events-none z-[1000] mx-auto outline-none\",\r\n positionVariants[position],\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ToastProviderProps = ToastProviderPrimitiveProps;\r\n\r\nfunction ToastProvider(props: ToastProviderProps) {\r\n return <ToastProviderPrimitive {...props} />;\r\n}\r\n\r\ntype ToastProps = ToastPrimitiveProps\r\n\r\nfunction Toast({\r\n className,\r\n children,\r\n style,\r\n ...props\r\n}: ToastProps) {\r\n return (\r\n <ToastPrimitive\r\n style={style}\r\n className={cn(\r\n \"group/toast pointer-events-auto absolute right-0 z-[calc(1000-var(--toast-index))] w-full shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-focus-ring\",\r\n \"bottom-0 origin-bottom rounded-l-[10.4px] rounded-r-lg\",\r\n \"data-[position^=top]:top-0 data-[position^=top]:bottom-auto data-[position^=top]:origin-top\",\r\n \"[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc((var(--toast-index)*(var(--height)+var(--gap))*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]\",\r\n \"data-[position^=top]:[--offset-y:calc((var(--toast-index)*(var(--height)+var(--gap)))+var(--toast-swipe-movement-y))]\",\r\n \"h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]\",\r\n \"data-[position^=top]:[transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)+(var(--toast-index)*var(--peek))+(var(--shrink)*var(--height))))_scale(var(--scale))]\",\r\n \"after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']\",\r\n \"group-hover/viewport:data-expanded:h-(--toast-height) group-hover/viewport:data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]\",\r\n \"group-focus-within/viewport:data-expanded:h-(--toast-height) group-focus-within/viewport:data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]\",\r\n \"data-limited:opacity-0 data-limited:pointer-events-none data-limited:invisible data-starting-style:[transform:translateY(150%)]\",\r\n \"data-[position^=top]:data-starting-style:[transform:translateY(-150%)]\",\r\n \"[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]\",\r\n \"data-[position^=top]:[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(-150%)]\",\r\n \"data-ending-style:opacity-0\",\r\n \"data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\r\n \"data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\r\n \"data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\r\n \"data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\r\n \"group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\r\n \"group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\r\n \"group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\r\n \"group-hover/viewport:data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\r\n \"group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]\",\r\n \"group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]\",\r\n \"group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]\",\r\n \"group-focus-within/viewport:data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n <div className={cn(\r\n \"absolute left-0 inset-y-0 w-[10.4px] rounded-l-[10.4px] bg-[linear-gradient(180deg,#377DFA_0%,#185BC2_80%)]\",\r\n \"group-data-[type=warning]/toast:bg-[linear-gradient(180deg,#F79009_0%,#B54708_80%)]\",\r\n \"group-data-[type=info]/toast:bg-[linear-gradient(180deg,#068BEE_0%,#175BCC_80%)]\",\r\n \"group-data-[type=success]/toast:bg-[linear-gradient(180deg,#17B26A_0%,#067647_80%)]\",\r\n \"group-data-[type=error]/toast:bg-[linear-gradient(180deg,#F04438_0%,#B42318_80%)]\",\r\n )} />\r\n <div className={cn(\r\n \"relative border border-border-secondary rounded-lg ml-[2.4px] bg-bg-primary z-10 bg-radial-[100%_200%_at_0%_0%] to-bg-primary\",\r\n \"from-modal-dialog-stop-0\",\r\n \"group-data-[type=warning]/toast:from-utility-warning-50\",\r\n \"group-data-[type=info]/toast:from-utility-blue-50\",\r\n \"group-data-[type=success]/toast:from-utility-success-50\",\r\n \"group-data-[type=error]/toast:from-utility-error-50\",\r\n )}>\r\n {children}\r\n </div>\r\n </ToastPrimitive>\r\n );\r\n}\r\n\r\ntype ToastContentProps = ToastContentPrimitiveProps;\r\n\r\nfunction ToastContent({ className, ...props }: ToastContentProps) {\r\n return (\r\n <ToastContentPrimitive\r\n className={cn(\r\n \"flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-behind/toast:opacity-0 group-hover/viewport:group-data-expanded/toast:opacity-100 group-focus-within/viewport:group-data-expanded/toast:opacity-100\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ToastTitleProps = ToastTitlePrimitiveProps;\r\n\r\nfunction ToastTitle({ className, ...props }: ToastTitleProps) {\r\n return (\r\n <ToastTitlePrimitive\r\n className={cn(\r\n \"text-label-semibold-2 text-text-primary\",\r\n \"group-data-[type=warning]/toast:text-text-warning-primary\",\r\n \"group-data-[type=info]/toast:text-text-info-primary\",\r\n \"group-data-[type=success]/toast:text-text-success-primary\",\r\n \"group-data-[type=error]/toast:text-text-error-primary\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ToastDescriptionProps = ToastDescriptionPrimitiveProps;\r\n\r\nfunction ToastDescription({ className, ...props }: ToastDescriptionProps) {\r\n return (\r\n <ToastDescriptionPrimitive\r\n className={cn(\"text-body-regular-2 text-text-secondary\", className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype ToastActionProps = ToastActionPrimitiveProps;\r\n\r\nfunction ToastAction({\r\n className,\r\n render = <Button size=\"sm\" variant=\"secondary\" />,\r\n ...props\r\n}: ToastActionProps) {\r\n return (\r\n <ToastActionPrimitive\r\n render={render}\r\n className={cn(\"shrink-0\", className)}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype ToastCloseProps = ToastClosePrimitiveProps;\r\n\r\nfunction ToastClose({ className, children, ...props }: ToastCloseProps) {\r\n return (\r\n <ToastClosePrimitive\r\n aria-label=\"Close toast\"\r\n className={cn(\r\n \"relative shrink-0 text-fg-quaternary after:absolute after:-inset-2 after:content-[''] hover:text-text-error-primary size-6 inline-flex items-center justify-center [&_svg:not([class*='size-'])]:size-3.5\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children ?? <XIcon aria-hidden=\"true\" />}\r\n </ToastClosePrimitive>\r\n );\r\n}\r\n\r\ntype ToastIconProps = { type: string | undefined }\r\n\r\nfunction ToastIcon({ type }: ToastIconProps) {\r\n let icon: React.ReactNode = null;\r\n\r\n if (type === \"success\") {\r\n icon = <CheckSquareIcon className=\"text-fg-success-primary\" />;\r\n }\r\n\r\n if (type === \"info\") {\r\n icon = <InfoSquareIcon className=\"text-fg-info-primary\" />;\r\n }\r\n\r\n if (type === \"warning\") {\r\n icon = <DangerTriangleIcon className=\"text-fg-warning-primary\" />;\r\n }\r\n\r\n if (type === \"error\") {\r\n icon = <CloseSquareIcon className=\"text-fg-error-primary\" />;\r\n }\r\n\r\n if (type === \"loading\") {\r\n icon = <Loader2Icon className=\"animate-spin\" aria-hidden=\"true\" />\r\n }\r\n\r\n if (!icon) return null;\r\n\r\n return (\r\n <span\r\n data-slot=\"toast-icon\"\r\n className=\"shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-6\"\r\n >\r\n {icon}\r\n </span>\r\n );\r\n}\r\n\r\nconst POSITIONS: ToastPosition[] = [\r\n \"top-right\",\r\n \"top-left\",\r\n \"top-center\",\r\n \"bottom-right\",\r\n \"bottom-left\",\r\n \"bottom-center\",\r\n];\r\n\r\nfunction ToastList({\r\n defaultPosition,\r\n position,\r\n limit = 3,\r\n}: {\r\n defaultPosition: ToastPosition;\r\n position: ToastPosition;\r\n limit?: number;\r\n}) {\r\n const { toasts } = useToastManager();\r\n const matchingToasts = toasts.filter(\r\n (item) => (item.position ?? defaultPosition) === position\r\n );\r\n\r\n return matchingToasts.map((toastItem, index) => (\r\n <Toast\r\n key={toastItem.id}\r\n toast={toastItem}\r\n data-position={position}\r\n data-behind={index > 0 ? \"\" : undefined}\r\n data-limited={limit !== undefined && index >= limit ? \"\" : undefined}\r\n style={\r\n {\r\n \"--toast-index\": index,\r\n } as React.CSSProperties\r\n }\r\n >\r\n <ToastContent>\r\n <ToastIcon type={toastItem.type} />\r\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\r\n <ToastTitle />\r\n <ToastDescription />\r\n </div>\r\n <ToastAction />\r\n <ToastClose />\r\n </ToastContent>\r\n </Toast>\r\n ));\r\n}\r\n\r\ntype ToasterProps = ToastProviderPrimitiveProps & {\r\n position?: ToastPosition;\r\n limit?: number;\r\n};\r\n\r\nfunction Toaster({\r\n children,\r\n position = \"top-right\",\r\n limit = 3,\r\n toastManager = toast,\r\n ...props\r\n}: ToasterProps) {\r\n return (\r\n <ToastProvider toastManager={toastManager} limit={limit} {...props}>\r\n {children}\r\n <ToastPortal>\r\n {POSITIONS.map((pos) => (\r\n <ToastViewport key={pos} position={pos}>\r\n <ToastList defaultPosition={position} position={pos} limit={limit} />\r\n </ToastViewport>\r\n ))}\r\n </ToastPortal>\r\n </ToastProvider>\r\n );\r\n}\r\n\r\nexport {\r\n Toaster,\r\n Toast,\r\n ToastProvider,\r\n ToastAction,\r\n ToastClose,\r\n ToastContent,\r\n ToastDescription,\r\n ToastPortal,\r\n ToastTitle,\r\n ToastViewport,\r\n toast,\r\n createToastManager,\r\n useToastManager,\r\n type ToasterProps,\r\n type ToastProps,\r\n type ToastProviderProps,\r\n type ToastActionProps,\r\n type ToastCloseProps,\r\n type ToastContentProps,\r\n type ToastDescriptionProps,\r\n type ToastPortalProps,\r\n type ToastTitleProps,\r\n type ToastViewportProps,\r\n};\r\n\r\n\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a,b,i,m,q,s,w,x,F}from'./chunk-ZZWSZRER.js';import {a as a$1}from'./chunk-JH6RZ3QH.js';import'react';import {ChevronDownIcon}from'lucide-react';import'class-variance-authority';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx}from'react/jsx-runtime';function B({items:t,value:f,defaultValue:g,onValueChange:d,placeholder:I="Select",icon:l,container:S,isPending:y,className:P,triggerClassName:V,contentClassName:v,disabled:N,size:h="md",infiniteScroll:R}){return jsxs(a,{items:t,value:f,defaultValue:g,onValueChange:d,isItemEqualToValue:(e,T)=>e.value===T.value,disabled:N,children:[jsxs(b,{className:cn(a$1({size:h}),"group flex cursor-pointer items-center gap-2 pr-3 text-left",V,P),children:[l&&jsx("span",{className:"size-4.5 shrink-0 text-fg-quaternary",children:l}),jsx("span",{className:"flex-1 truncate",children:jsx(i,{children:e=>jsx("span",{className:e?"text-text-primary":"text-text-placeholder",children:e?.label??I})})}),jsx(ChevronDownIcon,{className:"size-4 shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180"})]}),jsxs(m,{container:S,className:cn("w-72",v),align:"start",sideOffset:8,children:[jsx(q,{status:y||t===void 0?"pending":t.length===0?"empty":null}),jsxs(s,{children:[t?.map(e=>jsx(w,{value:e,children:jsx(x,{children:e.label})},e.value)),jsx(F,{...R})]})]})]})}export{B as a};//# sourceMappingURL=chunk-7YSKM6DP.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-7YSKM6DP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composites/combobox-simple.tsx"],"names":["ComboboxSimple","items","value","defaultValue","onValueChange","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","size","infiniteScroll","jsxs","Combobox","a","b","ComboboxTrigger","cn","inputVariants","jsx","ComboboxValue","item","ChevronDownIcon","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/composites/combobox-simple.tsx"],"names":["ComboboxSimple","items","value","defaultValue","onValueChange","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","size","infiniteScroll","jsxs","Combobox","a","b","ComboboxTrigger","cn","inputVariants","jsx","ComboboxValue","item","ChevronDownIcon","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll"],"mappings":"mQA8CA,SAASA,CAAAA,CAAe,CACtB,KAAA,CAAAC,CAAAA,CACA,MAAAC,CAAAA,CACA,YAAA,CAAAC,EACA,aAAA,CAAAC,CAAAA,CACA,YAAAC,CAAAA,CAAc,QAAA,CACd,KAAAC,CAAAA,CACA,SAAA,CAAAC,EACA,SAAA,CAAAC,CAAAA,CACA,UAAAC,CAAAA,CACA,gBAAA,CAAAC,EACA,gBAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,IAAA,CAAAC,EAAO,IAAA,CACP,cAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,OACEC,IAAAA,CAACC,CAAAA,CAAA,CACC,KAAA,CAAOf,CAAAA,CACP,MAAOC,CAAAA,CACP,YAAA,CAAcC,EACd,aAAA,CAAeC,CAAAA,CACf,mBAAoB,CAACa,CAAAA,CAAGC,IAAMD,CAAAA,CAAE,KAAA,GAAUC,EAAE,KAAA,CAC5C,QAAA,CAAUN,EAEV,QAAA,CAAA,CAAAG,IAAAA,CAACI,EAAA,CACC,SAAA,CAAWC,GACTC,GAAAA,CAAc,CAAE,KAAAR,CAAK,CAAC,EACtB,6DAAA,CACAH,CAAAA,CACAD,CACF,CAAA,CAEC,QAAA,CAAA,CAAAH,CAAAA,EACCgB,GAAAA,CAAC,MAAA,CAAA,CAAK,SAAA,CAAU,uCAAwC,QAAA,CAAAhB,CAAAA,CAAK,EAE/DgB,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,iBAAA,CACd,QAAA,CAAAA,IAACC,CAAAA,CAAA,CACE,SAACC,CAAAA,EACAF,GAAAA,CAAC,QAAK,SAAA,CAAWE,CAAAA,CAAO,oBAAsB,uBAAA,CAC3C,QAAA,CAAAA,GAAM,KAAA,EAASnB,CAAAA,CAClB,EAEJ,CAAA,CACF,CAAA,CACAiB,IAACG,eAAAA,CAAA,CACC,UAAU,4FAAA,CACZ,CAAA,CAAA,CACF,EAEAV,IAAAA,CAACW,CAAAA,CAAA,CACC,SAAA,CAAWnB,CAAAA,CACX,UAAWa,EAAAA,CAAG,MAAA,CAAQT,CAAgB,CAAA,CACtC,KAAA,CAAM,QACN,UAAA,CAAY,CAAA,CAEZ,UAAAW,GAAAA,CAACK,CAAAA,CAAA,CACC,MAAA,CACEnB,CAAAA,EAAaP,IAAU,MAAA,CACnB,SAAA,CACAA,EAAM,MAAA,GAAW,CAAA,CACf,QACA,IAAA,CAEV,CAAA,CACAc,KAACa,CAAAA,CAAA,CACE,UAAA3B,CAAAA,EAAO,GAAA,CAAKuB,GACXF,GAAAA,CAACO,CAAAA,CAAA,CAA8B,KAAA,CAAOL,CAAAA,CACpC,SAAAF,GAAAA,CAACQ,CAAAA,CAAA,CACE,QAAA,CAAAN,CAAAA,CAAK,MACR,CAAA,CAAA,CAHiBA,CAAAA,CAAK,KAIxB,CACD,CAAA,CACDF,IAACS,CAAAA,CAAA,CAAwB,GAAGjB,CAAAA,CAAgB,CAAA,CAAA,CAC9C,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ","file":"chunk-7YSKM6DP.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { ChevronDownIcon } from \"lucide-react\"\r\nimport { type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { inputVariants } from \"../ui/input\"\r\nimport { ComboboxItem, ComboboxItemTitle } from \"../ui/combobox\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n ComboboxValue,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type ComboboxSimpleItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\nexport type ComboboxSimpleProps = {\r\n items: ComboboxSimpleItem[] | undefined\r\n value?: ComboboxSimpleItem | null\r\n defaultValue?: ComboboxSimpleItem | null\r\n onValueChange?: (value: ComboboxSimpleItem | null) => void\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n size?: VariantProps<typeof inputVariants>[\"size\"]\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\n// ─── Component ───\r\n\r\nfunction ComboboxSimple({\r\n items,\r\n value,\r\n defaultValue,\r\n onValueChange,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n size = \"md\",\r\n infiniteScroll,\r\n}: ComboboxSimpleProps) {\r\n return (\r\n <Combobox\r\n items={items}\r\n value={value}\r\n defaultValue={defaultValue}\r\n onValueChange={onValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n inputVariants({ size }),\r\n \"group flex cursor-pointer items-center gap-2 pr-3 text-left\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span className=\"size-4.5 shrink-0 text-fg-quaternary\">{icon}</span>\r\n )}\r\n <span className=\"flex-1 truncate\">\r\n <ComboboxValue>\r\n {(item) => (\r\n <span className={item ? \"text-text-primary\" : \"text-text-placeholder\"}>\r\n {item?.label ?? placeholder}\r\n </span>\r\n )}\r\n </ComboboxValue>\r\n </span>\r\n <ChevronDownIcon\r\n className=\"size-4 shrink-0 text-fg-quaternary transition-transform group-data-[popup-open]:rotate-180\"\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { ComboboxSimple }\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a,b,c as c$1,d,e,g,f as f$1}from'./chunk-MMCL4HWD.js';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs}from'react/jsx-runtime';function c({className:a$1,variant:t="default",...e}){return jsx(a,{className:cn("group/tabs flex flex-col gap-2",a$1),"data-variant":t,...e})}function T({className:a,highlightClassName:t,...e}){return jsx(b,{className:cn("absolute z-0","group-data-[variant=default]/tabs:inset-0 group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:bg-bg-primary-solid","group-data-[variant=underline]/tabs:bottom-0 group-data-[variant=underline]/tabs:h-0.5 group-data-[variant=underline]/tabs:w-full group-data-[variant=underline]/tabs:rounded-none group-data-[variant=underline]/tabs:bg-fg-brand-secondary","group-data-[variant=attract]/tabs:bottom-0 group-data-[variant=attract]/tabs:h-[3px] group-data-[variant=attract]/tabs:w-full group-data-[variant=attract]/tabs:rounded-t-full group-data-[variant=attract]/tabs:bg-gradient-to-r group-data-[variant=attract]/tabs:from-[var(--color-brand-light-500)] group-data-[variant=attract]/tabs:to-[var(--color-brand-light-700)]",t),children:jsx(c$1,{className:cn("inline-flex w-fit items-center justify-center","group-data-[variant=default]/tabs:bg-bg-tertiary group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:p-0.5 group-data-[variant=default]/tabs:gap-1 group-data-[variant=default]/tabs:border group-data-[variant=default]/tabs:border-border-primary","group-data-[variant=underline]/tabs:gap-7","group-data-[variant=attract]/tabs:w-full group-data-[variant=attract]/tabs:justify-start group-data-[variant=attract]/tabs:gap-6 group-data-[variant=attract]/tabs:border-b group-data-[variant=attract]/tabs:border-border-secondary group-data-[variant=attract]/tabs:px-6",a),...e})})}function m({className:a,count:t,children:e$1,...i}){return jsx(d,{value:i.value,className:"flex-1 group-data-[variant=attract]/tabs:flex-none",children:jsxs(e,{className:cn("group/tabs-trigger data-[active=true]:text-text-brand-tertiary-alt focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-text-primary inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md w-full text-label-semibold-2 whitespace-nowrap transition-colors duration-500 ease-in-out focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4","group-data-[variant=default]/tabs:px-3 group-data-[variant=default]/tabs:py-2 group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:text-text-quaternary group-data-[variant=default]/tabs:data-[active=true]:text-text-white","group-data-[variant=underline]/tabs:h-8.5 group-data-[variant=underline]/tabs:px-3","group-data-[variant=attract]/tabs:h-auto group-data-[variant=attract]/tabs:py-3 group-data-[variant=attract]/tabs:px-0 group-data-[variant=attract]/tabs:gap-2 group-data-[variant=attract]/tabs:rounded-none group-data-[variant=attract]/tabs:text-label-medium-2 group-data-[variant=attract]/tabs:text-text-quaternary group-data-[variant=attract]/tabs:data-[active=true]:text-text-brand-tertiary group-data-[variant=attract]/tabs:data-[active=true]:text-label-semibold-2",a),...i,children:[e$1,t!==void 0&&jsx("span",{className:"inline-flex items-center justify-center rounded-xp-card-base-xs bg-bg-quaternary px-0.5 py-px text-label-medium-4 text-text-quaternary transition-colors duration-300 group-data-[active=true]/tabs-trigger:bg-bg-brand-solid group-data-[active=true]/tabs-trigger:text-text-primary-on-brand",children:t})]})})}function f(a){return jsx(g,{...a})}function x({className:a,...t}){return jsx(f$1,{className:cn("flex-1 outline-none",a),...t})}export{c as a,T as b,m as c,f as d,x as e};//# sourceMappingURL=chunk-AGTMOMFO.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-AGTMOMFO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/tabs.tsx"],"names":["Tabs","className","variant","props","jsx","cn","TabsList","highlightClassName","TabsHighlight","TabsTab","count","children","TabsHighlightItem","jsxs","TabsPanels","TabsPanel"],"mappings":"wIAoBA,SAASA,CAAAA,CAAK,CAAE,SAAA,CAAAC,GAAAA,CAAW,OAAA,CAAAC,CAAAA,CAAU,UAAW,GAAGC,CAAM,CAAA,CAAc,CACrE,OACEC,GAAAA,CAACJ,CAAAA,CAAA,CACC,SAAA,CAAWK,GAAG,gCAAA,CAAkCJ,GAAS,CAAA,CACzD,cAAA,CAAcC,EACb,GAAGC,CAAAA,CACN,CAEJ,CAMA,SAASG,CAAAA,CAAS,CAAE,SAAA,CAAAL,CAAAA,CAAW,mBAAAM,CAAAA,CAAoB,GAAGJ,CAAM,CAAA,CAAkB,CAC5E,OACEC,GAAAA,CAACI,CAAAA,CAAA,CACC,UAAWH,EAAAA,CACT,cAAA,CACA,8IAAA,CACA,8OAAA,CACA,8WACAE,CACF,CAAA,CAEA,QAAA,CAAAH,GAAAA,CAACE,IAAA,CACC,SAAA,CAAWD,EAAAA,CACT,+CAAA,CACA,iRACA,2CAAA,CACA,8QAAA,CACAJ,CACF,CAAA,CACC,GAAGE,CAAAA,CACN,CAAA,CACF,CAEJ,CAMA,SAASM,CAAAA,CAAQ,CAAE,SAAA,CAAAR,CAAAA,CAAW,MAAAS,CAAAA,CAAO,QAAA,CAAAC,GAAAA,CAAU,GAAGR,CAAM,CAAA,CAAiB,CACvE,OACEC,GAAAA,CAACQ,EAAA,CAA2B,KAAA,CAAOT,CAAAA,CAAM,KAAA,CAAO,UAAU,oDAAA,CACxD,QAAA,CAAAU,IAAAA,CAACJ,CAAAA,CAAA,CACC,SAAA,CAAWJ,EAAAA,CACT,ygBAAA,CACA,wPAAA,CACA,qFACA,qdAAA,CACAJ,CACF,CAAA,CACC,GAAGE,EAEH,QAAA,CAAA,CAAAQ,GAAAA,CACAD,CAAAA,GAAU,MAAA,EACTN,IAAC,MAAA,CAAA,CAAK,SAAA,CAAU,gSAAA,CACb,QAAA,CAAAM,EACH,CAAA,CAAA,CAEJ,CAAA,CACF,CAEJ,CAIA,SAASI,CAAAA,CAAWX,CAAAA,CAAwB,CAC1C,OAAOC,IAACU,CAAAA,CAAA,CAAqB,GAAGX,CAAAA,CAAO,CACzC,CAIA,SAASY,CAAAA,CAAU,CAAE,UAAAd,CAAAA,CAAW,GAAGE,CAAM,CAAA,CAAmB,CAC1D,OACEC,GAAAA,CAACW,GAAAA,CAAA,CACC,UAAWV,EAAAA,CAAG,qBAAA,CAAuBJ,CAAS,CAAA,CAC7C,GAAGE,EACN,CAEJ","file":"chunk-AGTMOMFO.js","sourcesContent":["import {\r\n Tabs as TabsPrimitive,\r\n TabsList as TabsListPrimitive,\r\n TabsTab as TabsTabPrimitive,\r\n TabsPanel as TabsPanelPrimitive,\r\n TabsPanels as TabsPanelsPrimitive,\r\n TabsHighlight as TabsHighlightPrimitive,\r\n TabsHighlightItem as TabsHighlightItemPrimitive,\r\n type TabsProps as TabsPrimitiveProps,\r\n type TabsListProps as TabsListPrimitiveProps,\r\n type TabsTabProps as TabsTabPrimitiveProps,\r\n type TabsPanelProps as TabsPanelPrimitiveProps,\r\n type TabsPanelsProps as TabsPanelsPrimitiveProps,\r\n} from '../primitives/tabs';\r\nimport { cn } from '@xploreu/lib/cn';\r\n\r\ntype TabsProps = TabsPrimitiveProps & {\r\n variant?: \"default\" | \"underline\" | \"attract\";\r\n};\r\n\r\nfunction Tabs({ className, variant = \"default\", ...props }: TabsProps) {\r\n return (\r\n <TabsPrimitive\r\n className={cn('group/tabs flex flex-col gap-2', className)}\r\n data-variant={variant}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\ntype TabsListProps = TabsListPrimitiveProps & {\r\n highlightClassName?: string;\r\n};\r\n\r\nfunction TabsList({ className, highlightClassName, ...props }: TabsListProps) {\r\n return (\r\n <TabsHighlightPrimitive\r\n className={cn(\r\n \"absolute z-0\",\r\n \"group-data-[variant=default]/tabs:inset-0 group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:bg-bg-primary-solid\",\r\n \"group-data-[variant=underline]/tabs:bottom-0 group-data-[variant=underline]/tabs:h-0.5 group-data-[variant=underline]/tabs:w-full group-data-[variant=underline]/tabs:rounded-none group-data-[variant=underline]/tabs:bg-fg-brand-secondary\",\r\n \"group-data-[variant=attract]/tabs:bottom-0 group-data-[variant=attract]/tabs:h-[3px] group-data-[variant=attract]/tabs:w-full group-data-[variant=attract]/tabs:rounded-t-full group-data-[variant=attract]/tabs:bg-gradient-to-r group-data-[variant=attract]/tabs:from-[var(--color-brand-light-500)] group-data-[variant=attract]/tabs:to-[var(--color-brand-light-700)]\",\r\n highlightClassName\r\n )}\r\n >\r\n <TabsListPrimitive\r\n className={cn(\r\n \"inline-flex w-fit items-center justify-center\",\r\n \"group-data-[variant=default]/tabs:bg-bg-tertiary group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:p-0.5 group-data-[variant=default]/tabs:gap-1 group-data-[variant=default]/tabs:border group-data-[variant=default]/tabs:border-border-primary\",\r\n \"group-data-[variant=underline]/tabs:gap-7\",\r\n \"group-data-[variant=attract]/tabs:w-full group-data-[variant=attract]/tabs:justify-start group-data-[variant=attract]/tabs:gap-6 group-data-[variant=attract]/tabs:border-b group-data-[variant=attract]/tabs:border-border-secondary group-data-[variant=attract]/tabs:px-6\",\r\n className,\r\n )}\r\n {...props}\r\n />\r\n </TabsHighlightPrimitive>\r\n );\r\n}\r\n\r\ntype TabsTabProps = TabsTabPrimitiveProps & {\r\n count?: number | string;\r\n};\r\n\r\nfunction TabsTab({ className, count, children, ...props }: TabsTabProps) {\r\n return (\r\n <TabsHighlightItemPrimitive value={props.value} className=\"flex-1 group-data-[variant=attract]/tabs:flex-none\">\r\n <TabsTabPrimitive\r\n className={cn(\r\n \"group/tabs-trigger data-[active=true]:text-text-brand-tertiary-alt focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-text-primary inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md w-full text-label-semibold-2 whitespace-nowrap transition-colors duration-500 ease-in-out focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\r\n \"group-data-[variant=default]/tabs:px-3 group-data-[variant=default]/tabs:py-2 group-data-[variant=default]/tabs:rounded-lg group-data-[variant=default]/tabs:text-text-quaternary group-data-[variant=default]/tabs:data-[active=true]:text-text-white\",\r\n \"group-data-[variant=underline]/tabs:h-8.5 group-data-[variant=underline]/tabs:px-3\",\r\n \"group-data-[variant=attract]/tabs:h-auto group-data-[variant=attract]/tabs:py-3 group-data-[variant=attract]/tabs:px-0 group-data-[variant=attract]/tabs:gap-2 group-data-[variant=attract]/tabs:rounded-none group-data-[variant=attract]/tabs:text-label-medium-2 group-data-[variant=attract]/tabs:text-text-quaternary group-data-[variant=attract]/tabs:data-[active=true]:text-text-brand-tertiary group-data-[variant=attract]/tabs:data-[active=true]:text-label-semibold-2\",\r\n className,\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n {count !== undefined && (\r\n <span className=\"inline-flex items-center justify-center rounded-xp-card-base-xs bg-bg-quaternary px-0.5 py-px text-label-medium-4 text-text-quaternary transition-colors duration-300 group-data-[active=true]/tabs-trigger:bg-bg-brand-solid group-data-[active=true]/tabs-trigger:text-text-primary-on-brand\">\r\n {count}\r\n </span>\r\n )}\r\n </TabsTabPrimitive>\r\n </TabsHighlightItemPrimitive>\r\n );\r\n}\r\n\r\ntype TabsPanelsProps = TabsPanelsPrimitiveProps;\r\n\r\nfunction TabsPanels(props: TabsPanelsProps) {\r\n return <TabsPanelsPrimitive {...props} />;\r\n}\r\n\r\ntype TabsPanelProps = TabsPanelPrimitiveProps;\r\n\r\nfunction TabsPanel({ className, ...props }: TabsPanelProps) {\r\n return (\r\n <TabsPanelPrimitive\r\n className={cn('flex-1 outline-none', className)}\r\n {...props}\r\n />\r\n );\r\n}\r\n\r\nexport {\r\n Tabs,\r\n TabsList,\r\n TabsTab,\r\n TabsPanels,\r\n TabsPanel,\r\n type TabsProps,\r\n type TabsListProps,\r\n type TabsTabProps,\r\n type TabsPanelsProps,\r\n type TabsPanelProps,\r\n};"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {b,c as c$1}from'./chunk-KYD4ATTG.js';import*as x from'react';import {Combobox}from'@base-ui/react/combobox';import {AnimatePresence,motion}from'motion/react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {useDataState}from'@xploreu/hooks/use-data-state';import {getStrictContext}from'@xploreu/lib/get-strict-context';import {jsx}from'react/jsx-runtime';var [V,L]=getStrictContext("ComboboxContext"),[H,c]=getStrictContext("ComboboxActiveValueContext");function M({behavior:o="default",...b}){let[p,i]=useControlledState({value:b?.open,defaultValue:b?.defaultOpen,onChange:b?.onOpenChange}),[a,m]=useControlledState({value:b?.inputValue?.toString(),defaultValue:b?.defaultInputValue?.toString(),onChange:b?.onInputValueChange}),[n,h]=x.useState(null),g=(s,r)=>{if(r.reason==="input-clear")return r.cancel();m(s,r);},d=(s,r)=>{let y=r.trigger?.dataset;if(o==="chip-outside"&&(r.reason==="trigger-press"&&y?.slot==="combobox-clear-input"&&!s||r.reason==="item-press"))return r.cancel();i(s,r);};return jsx(H,{value:{highlightedValue:n,setHighlightedValue:h},children:jsx(V,{value:{open:p,setOpen:i,inputValue:a,setInputValue:m},children:jsx(Combobox.Root,{"data-slot":"combobox",...b,onInputValueChange:g,onOpenChange:d})})})}function k(o){return jsx(Combobox.Trigger,{"data-slot":"combobox-trigger",...o})}function E(o){return jsx(Combobox.Label,{"data-slot":"combobox-label",...o})}function O(o){return jsx(Combobox.InputGroup,{"data-slot":"combobox-input-group",...o})}function B(o){return jsx(Combobox.Input,{"data-slot":"combobox-input",...o})}function F(o){return jsx(Combobox.Icon,{"data-slot":"combobox-icon",...o})}function q(o){return jsx(Combobox.Clear,{"data-slot":"combobox-clear",...o})}function z(o){return jsx(Combobox.Value,{"data-slot":"combobox-value",...o})}function J(o){return jsx(Combobox.Chips,{"data-slot":"combobox-chips",...o})}function K(o){return jsx(Combobox.Chip,{"data-slot":"combobox-chip",...o})}function N(o){return jsx(Combobox.ChipRemove,{"data-slot":"combobox-chip-remove",...o})}function Q(o){let{open:b}=L();return jsx(AnimatePresence,{children:b&&jsx(Combobox.Portal,{"data-slot":"combobox-portal",keepMounted:true,...o})})}function U(o){return jsx(Combobox.Positioner,{"data-slot":"combobox-positioner",...o})}function W({initialFocus:o,finalFocus:b,transition:p={type:"spring",stiffness:300,damping:25},...i}){return jsx(Combobox.Popup,{finalFocus:b,initialFocus:o,render:jsx(motion.div,{animate:{opacity:1,scale:1},"data-slot":"combobox-popup",exit:{opacity:0,scale:.5},initial:{opacity:0,scale:.5},transition:p,...i},"combobox-popup")})}function X(o){return jsx(Combobox.Backdrop,{"data-slot":"combobox-backdrop",...o})}function Y(o){return jsx(Combobox.Status,{"data-slot":"combobox-status",...o})}function Z(o){return jsx(Combobox.Empty,{"data-slot":"combobox-empty",...o})}function _(o){return jsx(Combobox.List,{"data-slot":"combobox-list",...o})}function $({transition:o={type:"spring",stiffness:350,damping:35},...b$1}){let{highlightedValue:p}=c();return jsx(b,{click:false,controlledItems:true,"data-slot":"combobox-highlight",transition:o,value:p,...b$1})}function j(o){return jsx(c$1,{"data-slot":"combobox-highlight-item",...o})}function D(o){return jsx(Combobox.Row,{"data-slot":"combobox-row",...o})}function oo(o){let{setHighlightedValue:b}=c(),[,p]=useDataState("highlighted",void 0,(i,a)=>{if(i===true){let m=a.current,n=m?.dataset.value||m?.id||null;n&&b(n);}});return jsx(Combobox.Item,{ref:p,"data-slot":"combobox-item",...o})}function to(o){return jsx(Combobox.ItemIndicator,{"data-slot":"combobox-item-indicator",...o})}function eo(o){return jsx(Combobox.Separator,{"data-slot":"combobox-separator",...o})}function bo(o){return jsx(Combobox.Group,{"data-slot":"combobox-group",...o})}function ro(o){return jsx(Combobox.GroupLabel,{"data-slot":"combobox-group-label",...o})}function po(o){return jsx(Combobox.Collection,{"data-slot":"combobox-collection",...o})}function io(o){return jsx(Combobox.Arrow,{"data-slot":"combobox-arrow",...o})}export{bo as A,ro as B,po as C,io as D,L as a,c as b,M as c,k as d,E as e,O as f,B as g,F as h,q as i,z as j,J as k,K as l,N as m,Q as n,U as o,W as p,X as q,Y as r,Z as s,_ as t,$ as u,j as v,D as w,oo as x,to as y,eo as z};//# sourceMappingURL=chunk-C3FYXQCF.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-C3FYXQCF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/primitives/combobox.tsx"],"names":["ComboboxProvider","useCombobox","getStrictContext","ComboboxActiveValueProvider","useComboboxActiveValue","Combobox","behavior","props","open","setOpen","useControlledState","inputValue","setInputValue","highlightedValue","setHighlightedValue","handleInputValueChange","eventDetails","handleOpenChange","dataSet","jsx","ComboboxPrimitive","ComboboxTrigger","ComboboxLabel","ComboboxInputGroup","ComboboxInput","ComboboxIcon","ComboboxClear","ComboboxValue","ComboboxChips","ComboboxChip","ComboboxChipRemove","ComboboxPortal","AnimatePresence","ComboboxPositioner","ComboboxPopup","initialFocus","finalFocus","transition","motion","ComboboxBackdrop","ComboboxStatus","ComboboxEmpty","ComboboxList","ComboboxHighlight","Highlight","ComboboxHighlightItem","HighlightItem","ComboboxRow","ComboboxItem","highlightedRef","useDataState","value","ref","el","v","ComboboxItemIndicator","ComboboxSeparator","ComboboxGroup","ComboboxGroupLabel","ComboboxCollection","ComboboxArrow"],"mappings":"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","file":"chunk-C3FYXQCF.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\n\r\nimport { Combobox as ComboboxPrimitive } from \"@base-ui/react/combobox\"\r\nimport {\r\n AnimatePresence,\r\n type HTMLMotionProps,\r\n motion\r\n} from \"motion/react\"\r\n\r\nimport {\r\n Highlight,\r\n HighlightItem,\r\n type HighlightItemProps,\r\n type HighlightProps,\r\n} from \"../effects/highlight\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\nimport { useDataState } from \"@xploreu/hooks/use-data-state\"\r\nimport { getStrictContext } from \"@xploreu/lib/get-strict-context\"\r\n\r\ntype ComboboxContextType = {\r\n open: boolean;\r\n setOpen: (open: boolean, eventDetails: ComboboxPrimitive.Root.ChangeEventDetails) => void;\r\n inputValue: string;\r\n setInputValue: (inputValue: string, eventDetails: ComboboxPrimitive.Root.ChangeEventDetails) => void;\r\n}\r\n\r\ntype ComboboxActiveValueContextType = {\r\n highlightedValue: string | null;\r\n setHighlightedValue: (value: string | null) => void;\r\n}\r\n\r\nconst [ComboboxProvider, useCombobox] =\r\n getStrictContext<ComboboxContextType>(\"ComboboxContext\")\r\n\r\nconst [ComboboxActiveValueProvider, useComboboxActiveValue] =\r\n getStrictContext<ComboboxActiveValueContextType>(\"ComboboxActiveValueContext\")\r\n\r\ntype ComboboxProps<Value, Multiple extends boolean | undefined = false> = ComboboxPrimitive.Root.Props<Value, Multiple> & {\r\n behavior?: \"default\" | \"chip-outside\";\r\n}\r\n\r\nfunction Combobox<Value, Multiple extends boolean | undefined = false>({\r\n behavior = \"default\",\r\n ...props\r\n}: ComboboxProps<Value, Multiple>) {\r\n const [open, setOpen] = useControlledState({\r\n value: props?.open,\r\n defaultValue: props?.defaultOpen,\r\n onChange: props?.onOpenChange,\r\n })\r\n\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n const [highlightedValue, setHighlightedValue] = React.useState<string | null>(null)\r\n\r\n const handleInputValueChange: ComboboxProps<Value, Multiple>[\"onInputValueChange\"] = (inputValue, eventDetails) => {\r\n // if the input is cleared, we want to cancel the event to prevent resetting the input value.\r\n if (eventDetails.reason === \"input-clear\") return eventDetails.cancel()\r\n\r\n setInputValue(inputValue, eventDetails)\r\n }\r\n\r\n const handleOpenChange: ComboboxProps<Value, Multiple>[\"onOpenChange\"] = (open, eventDetails) => {\r\n const dataSet = (eventDetails.trigger as HTMLElement)?.dataset\r\n\r\n\r\n if (behavior === \"chip-outside\") {\r\n if (\r\n eventDetails.reason === \"trigger-press\" &&\r\n dataSet?.slot === \"combobox-clear-input\" &&\r\n !open\r\n ) {\r\n return eventDetails.cancel()\r\n }\r\n\r\n if (eventDetails.reason === \"item-press\") {\r\n return eventDetails.cancel()\r\n }\r\n }\r\n\r\n setOpen(open, eventDetails)\r\n }\r\n\r\n return (\r\n <ComboboxActiveValueProvider value={{ highlightedValue, setHighlightedValue }}>\r\n <ComboboxProvider value={{ open, setOpen, inputValue, setInputValue }}>\r\n <ComboboxPrimitive.Root\r\n data-slot=\"combobox\"\r\n {...props}\r\n onInputValueChange={handleInputValueChange}\r\n onOpenChange={handleOpenChange}\r\n />\r\n </ComboboxProvider>\r\n </ComboboxActiveValueProvider>\r\n )\r\n}\r\n\r\ntype ComboboxTriggerProps = ComboboxPrimitive.Trigger.Props\r\n\r\nfunction ComboboxTrigger(props: ComboboxTriggerProps) {\r\n return <ComboboxPrimitive.Trigger\r\n data-slot=\"combobox-trigger\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxLabelProps = ComboboxPrimitive.Label.Props\r\n\r\nfunction ComboboxLabel(props: ComboboxLabelProps) {\r\n return <ComboboxPrimitive.Label\r\n data-slot=\"combobox-label\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxInputGroupProps = ComboboxPrimitive.InputGroup.Props\r\n\r\nfunction ComboboxInputGroup(props: ComboboxInputGroupProps) {\r\n return <ComboboxPrimitive.InputGroup\r\n data-slot=\"combobox-input-group\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxInputProps = ComboboxPrimitive.Input.Props\r\n\r\nfunction ComboboxInput(props: ComboboxInputProps) {\r\n return <ComboboxPrimitive.Input\r\n data-slot=\"combobox-input\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxIconProps = ComboboxPrimitive.Icon.Props\r\n\r\nfunction ComboboxIcon(props: ComboboxIconProps) {\r\n return <ComboboxPrimitive.Icon\r\n data-slot=\"combobox-icon\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxClearProps = ComboboxPrimitive.Clear.Props\r\n\r\nfunction ComboboxClear(props: ComboboxClearProps) {\r\n return <ComboboxPrimitive.Clear\r\n data-slot=\"combobox-clear\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxValueProps = ComboboxPrimitive.Value.Props\r\n\r\nfunction ComboboxValue(props: ComboboxValueProps) {\r\n return <ComboboxPrimitive.Value\r\n data-slot=\"combobox-value\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxChipsProps = ComboboxPrimitive.Chips.Props\r\n\r\nfunction ComboboxChips(props: ComboboxChipsProps) {\r\n return <ComboboxPrimitive.Chips\r\n data-slot=\"combobox-chips\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxChipProps = ComboboxPrimitive.Chip.Props\r\n\r\nfunction ComboboxChip(props: ComboboxChipProps) {\r\n return <ComboboxPrimitive.Chip\r\n data-slot=\"combobox-chip\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxChipRemoveProps = ComboboxPrimitive.ChipRemove.Props\r\n\r\nfunction ComboboxChipRemove(props: ComboboxChipRemoveProps) {\r\n return <ComboboxPrimitive.ChipRemove\r\n data-slot=\"combobox-chip-remove\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxPortalProps = Omit<\r\n ComboboxPrimitive.Portal.Props,\r\n \"keepMounted\"\r\n>\r\n\r\nfunction ComboboxPortal(props: ComboboxPortalProps) {\r\n const { open } = useCombobox()\r\n\r\n return (\r\n <AnimatePresence>\r\n {open && (\r\n <ComboboxPrimitive.Portal\r\n data-slot=\"combobox-portal\"\r\n keepMounted\r\n {...props}\r\n />\r\n )}\r\n </AnimatePresence>\r\n )\r\n}\r\n\r\ntype ComboboxPositionerProps = ComboboxPrimitive.Positioner.Props\r\n\r\nfunction ComboboxPositioner(props: ComboboxPositionerProps) {\r\n return (\r\n <ComboboxPrimitive.Positioner\r\n data-slot=\"combobox-positioner\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype ComboboxPopupProps = Omit<\r\n ComboboxPrimitive.Popup.Props,\r\n \"render\"\r\n> &\r\n HTMLMotionProps<\"div\">\r\n\r\nfunction ComboboxPopup({\r\n initialFocus,\r\n finalFocus,\r\n transition = { type: \"spring\", stiffness: 300, damping: 25 },\r\n ...props\r\n}: ComboboxPopupProps) {\r\n return (\r\n <ComboboxPrimitive.Popup\r\n finalFocus={finalFocus}\r\n initialFocus={initialFocus}\r\n render={\r\n <motion.div\r\n key=\"combobox-popup\"\r\n animate={{ opacity: 1, scale: 1 }}\r\n data-slot=\"combobox-popup\"\r\n exit={{ opacity: 0, scale: 0.5 }}\r\n initial={{ opacity: 0, scale: 0.5 }}\r\n transition={transition}\r\n {...props}\r\n />\r\n }\r\n />\r\n )\r\n}\r\n\r\ntype ComboboxBackdropProps = ComboboxPrimitive.Backdrop.Props\r\n\r\nfunction ComboboxBackdrop(props: ComboboxBackdropProps) {\r\n return <ComboboxPrimitive.Backdrop\r\n data-slot=\"combobox-backdrop\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxStatusProps = ComboboxPrimitive.Status.Props\r\n\r\nfunction ComboboxStatus(props: ComboboxStatusProps) {\r\n return <ComboboxPrimitive.Status\r\n data-slot=\"combobox-status\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxEmptyProps = ComboboxPrimitive.Empty.Props\r\n\r\nfunction ComboboxEmpty(props: ComboboxEmptyProps) {\r\n return <ComboboxPrimitive.Empty\r\n data-slot=\"combobox-empty\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxListProps = ComboboxPrimitive.List.Props\r\n\r\nfunction ComboboxList(props: ComboboxListProps) {\r\n return <ComboboxPrimitive.List\r\n data-slot=\"combobox-list\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxHighlightProps = Omit<\r\n HighlightProps,\r\n \"controlledItems\" | \"enabled\" | \"hover\"\r\n>\r\n\r\nfunction ComboboxHighlight({\r\n transition = { type: \"spring\", stiffness: 350, damping: 35 },\r\n ...props\r\n}: ComboboxHighlightProps) {\r\n const { highlightedValue } = useComboboxActiveValue()\r\n\r\n return (\r\n <Highlight\r\n click={false}\r\n controlledItems\r\n data-slot=\"combobox-highlight\"\r\n transition={transition}\r\n value={highlightedValue}\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype ComboboxHighlightItemProps = HighlightItemProps\r\n\r\nfunction ComboboxHighlightItem(props: ComboboxHighlightItemProps) {\r\n return (\r\n <HighlightItem\r\n data-slot=\"combobox-highlight-item\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ntype ComboboxRowProps = ComboboxPrimitive.Row.Props\r\n\r\nfunction ComboboxRow(props: ComboboxRowProps) {\r\n return <ComboboxPrimitive.Row\r\n data-slot=\"combobox-row\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxItemProps = ComboboxPrimitive.Item.Props\r\n\r\nfunction ComboboxItem(props: ComboboxItemProps) {\r\n const { setHighlightedValue } = useComboboxActiveValue()\r\n const [, highlightedRef] = useDataState<HTMLDivElement>(\r\n \"highlighted\",\r\n undefined,\r\n (value, ref) => {\r\n if (value === true) {\r\n const el = ref.current\r\n const v = el?.dataset.value || el?.id || null\r\n if (v) setHighlightedValue(v)\r\n }\r\n },\r\n )\r\n\r\n return <ComboboxPrimitive.Item\r\n ref={highlightedRef}\r\n data-slot=\"combobox-item\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxItemIndicatorProps = ComboboxPrimitive.ItemIndicator.Props\r\n\r\nfunction ComboboxItemIndicator(props: ComboboxItemIndicatorProps) {\r\n return <ComboboxPrimitive.ItemIndicator\r\n data-slot=\"combobox-item-indicator\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxSeparatorProps = ComboboxPrimitive.Separator.Props\r\n\r\nfunction ComboboxSeparator(props: ComboboxSeparatorProps) {\r\n return <ComboboxPrimitive.Separator\r\n data-slot=\"combobox-separator\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxGroupProps = ComboboxPrimitive.Group.Props\r\n\r\nfunction ComboboxGroup(props: ComboboxGroupProps) {\r\n return <ComboboxPrimitive.Group\r\n data-slot=\"combobox-group\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxGroupLabelProps = ComboboxPrimitive.GroupLabel.Props\r\n\r\nfunction ComboboxGroupLabel(props: ComboboxGroupLabelProps) {\r\n return <ComboboxPrimitive.GroupLabel\r\n data-slot=\"combobox-group-label\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxCollectionProps = ComboboxPrimitive.Collection.Props\r\n\r\nfunction ComboboxCollection(props: ComboboxCollectionProps) {\r\n return <ComboboxPrimitive.Collection\r\n data-slot=\"combobox-collection\"\r\n {...props}\r\n />\r\n}\r\n\r\ntype ComboboxArrowProps = ComboboxPrimitive.Arrow.Props\r\n\r\nfunction ComboboxArrow(props: ComboboxArrowProps) {\r\n return <ComboboxPrimitive.Arrow\r\n data-slot=\"combobox-arrow\"\r\n {...props}\r\n />\r\n}\r\n\r\nexport {\r\n Combobox,\r\n type ComboboxActiveValueContextType,\r\n ComboboxArrow,\r\n type ComboboxArrowProps,\r\n ComboboxBackdrop,\r\n type ComboboxBackdropProps,\r\n ComboboxChip,\r\n type ComboboxChipProps,\r\n ComboboxChipRemove,\r\n type ComboboxChipRemoveProps,\r\n ComboboxChips,\r\n type ComboboxChipsProps,\r\n ComboboxClear,\r\n type ComboboxClearProps,\r\n ComboboxCollection,\r\n type ComboboxCollectionProps,\r\n type ComboboxContextType,\r\n ComboboxEmpty,\r\n type ComboboxEmptyProps,\r\n ComboboxGroup,\r\n ComboboxGroupLabel,\r\n type ComboboxGroupLabelProps,\r\n type ComboboxGroupProps,\r\n ComboboxHighlight,\r\n ComboboxHighlightItem,\r\n type ComboboxHighlightItemProps,\r\n type ComboboxHighlightProps,\r\n ComboboxIcon,\r\n type ComboboxIconProps,\r\n ComboboxInput,\r\n ComboboxInputGroup,\r\n type ComboboxInputGroupProps,\r\n type ComboboxInputProps,\r\n ComboboxItem,\r\n ComboboxItemIndicator,\r\n type ComboboxItemIndicatorProps,\r\n type ComboboxItemProps,\r\n ComboboxLabel,\r\n type ComboboxLabelProps,\r\n ComboboxList,\r\n type ComboboxListProps,\r\n ComboboxPopup,\r\n type ComboboxPopupProps,\r\n ComboboxPortal,\r\n type ComboboxPortalProps,\r\n ComboboxPositioner,\r\n type ComboboxPositionerProps,\r\n type ComboboxProps,\r\n ComboboxRow,\r\n type ComboboxRowProps,\r\n ComboboxSeparator,\r\n type ComboboxSeparatorProps,\r\n ComboboxStatus,\r\n type ComboboxStatusProps,\r\n ComboboxTrigger,\r\n type ComboboxTriggerProps,\r\n ComboboxValue,\r\n type ComboboxValueProps,\r\n useCombobox,\r\n useComboboxActiveValue,\r\n}"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a,b as b$1,j as j$1,i,k,l,m,q,s,w,F}from'./chunk-ZZWSZRER.js';import {b}from'./chunk-JH6RZ3QH.js';import {g}from'./chunk-C3FYXQCF.js';import*as r from'react';import {cn}from'@xploreu/lib/cn';import {SearchIcon,XIcon}from'lucide-react';import {useControlledState}from'@xploreu/hooks/use-controlled-state';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function j({multiple:z=true,inputPlaceholder:B="Search...",container:q$1,items:u,infiniteScroll:A,isPending:H,taggable:c=false,maxVisible:i$1,...m$1}){let[h,g$1]=useControlledState({value:m$1?.inputValue?.toString(),defaultValue:m$1?.defaultInputValue?.toString(),onChange:m$1?.onInputValueChange}),[b$2,x]=useControlledState({value:m$1?.value??[],defaultValue:m$1?.defaultValue??[],onChange:m$1?.onValueChange}),[v,I]=r.useState([]),d=r.useRef(new Set);r.useEffect(()=>{let e=new Set(b$2.map(t=>t.value));I(t=>{let l=t.filter(a=>e.has(a.value));return l.length===t.length?t:(d.current=new Set(l.map(a=>a.value)),l)});},[b$2]);let n=h?.toString().trim()??"",U=r.useMemo(()=>n?b$2.some(e=>e.value.toLowerCase()===n.toLowerCase()):false,[n,b$2]),p=r.useMemo(()=>!c||!n?false:!u?.some(e=>e.label.toLowerCase()===n.toLowerCase()),[c,n,u]),X=r.useMemo(()=>{let e=[...u??[],...v];if(p){let t={label:n,value:n,tag:true};return [...e,t]}return e},[u,v,p,n]);return jsxs(a,{...m$1,behavior:"chip-outside",multiple:true,items:c?X:u,isItemEqualToValue:(e,t)=>e.value===t.value,onValueChange:(e,t)=>{if(c){let l=e.filter(a=>a?.tag===true&&!d.current.has(a.value));if(l.length>0){for(let a of l)d.current.add(a.value);I(a=>[...a,...l]);}}x(z?e:[e[e.length-1]],t);},onInputValueChange:g$1,children:[jsxs("div",{className:"flex flex-col gap-2",children:[jsx(g,{render:jsx(b,{className:"h-9 text-body-regular-3 pl-9 pr-7",endContent:jsx(b$1,{nativeButton:false,render:jsx(XIcon,{className:"!size-5 !right-1.5 data-[hidden=true]:opacity-0 opacity-100 transition-opacity duration-300 cursor-pointer","data-hidden":!h,"data-slot":"combobox-clear-input",onClick:e=>{g$1("",{reason:"none",event:e.nativeEvent,cancel:()=>{},allowPropagation:()=>{},isCanceled:false,isPropagationAllowed:true,trigger:void 0});}})}),placeholder:B,startContent:jsx(SearchIcon,{className:"!size-4 !text-fg-tertiary-hover"}),wrapperClassName:"w-full"})}),jsx(j$1,{className:cn(i$1!==void 0&&"flex-nowrap overflow-hidden"),onMouseDown:e=>e.preventBaseUIHandler(),children:jsx(i,{children:e=>{let t=i$1!==void 0?e.slice(0,i$1):e,l$1=i$1!==void 0?e.length-i$1:0;return jsxs(Fragment,{children:[t?.map(a=>jsxs(k,{className:cn(i$1!==void 0&&"min-w-0 shrink"),children:[i$1!==void 0?jsx("span",{className:"truncate",children:a?.label||""}):a?.label||"",jsx(l,{})]},a?.value||"")),l$1>0&&jsxs(k,{className:"shrink-0",children:["+",l$1]})]})}})})]}),jsxs(m,{container:q$1,children:[jsx(q,{status:H||u===void 0?"pending":u?.length===0&&!p?"empty":null}),jsxs(s,{children:[u?.map(e=>jsx(w,{value:{label:e.label,value:e.value},children:jsx("div",{className:"flex items-center gap-2 w-full min-w-0",children:jsx("span",{className:"truncate",children:e.label})})},e.value)),p&&jsx(w,{value:{label:n,value:n,tag:true},children:jsxs("div",{className:"flex items-center gap-1.5 w-full min-w-0",children:[!U&&jsx("span",{className:"text-text-secondary",children:"Create:"}),jsx("span",{className:"font-medium text-text-primary truncate",children:n})]})}),jsx(F,{...A})]})]})]})}export{j as a};//# sourceMappingURL=chunk-DNO5M44I.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-DNO5M44I.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composites/combobox-chip-outside.tsx"],"names":["ComboboxChipOutside","multiple","inputPlaceholder","container","items","infiniteScroll","isPending","taggable","maxVisible","props","inputValue","setInputValue","useControlledState","value","setValue","createdItems","setCreatedItems","createdValuesRef","currentValues","v","prev","next","item","trimmedInput","isInputSelected","isCreatingItem","combinedItems","base","createItem","jsxs","Combobox","a","b","eventDetails","newTags","tag","jsx","ComboboxInput","Input","ComboboxTrigger","XIcon","event","SearchIcon","ComboboxChips","cn","ComboboxValue","visible","overflow","Fragment","ComboboxChip","ComboboxChipRemove","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxInfiniteScroll"],"mappings":"iUA4CA,SAASA,CAAAA,CAAgF,CACvF,QAAA,CAAAC,EAAW,IAAA,CACX,gBAAA,CAAAC,CAAAA,CAAmB,WAAA,CACnB,UAAAC,CAAAA,CACA,KAAA,CAAAC,GAAAA,CACA,cAAA,CAAAC,CAAAA,CACA,SAAA,CAAAC,GAAAA,CACA,QAAA,CAAAC,IAAW,KAAA,CACX,UAAA,CAAAC,CAAAA,CACA,GAAGC,GACL,CAAA,CAAoC,CAClC,GAAM,CAACC,EAAYC,CAAa,CAAA,CAAIC,kBAAAA,CAAmB,CACrD,MAAOH,GAAAA,EAAO,UAAA,EAAY,QAAA,EAAS,CACnC,aAAcA,GAAAA,EAAO,iBAAA,EAAmB,QAAA,EAAS,CACjD,SAAUA,GAAAA,EAAO,kBACnB,CAAC,CAAA,CAEK,CAACI,GAAAA,CAAOC,CAAQ,CAAA,CAAIF,kBAAAA,CAAmB,CAC3C,KAAA,CAAOH,GAAAA,EAAO,KAAA,EAAS,EAAC,CACxB,YAAA,CAAcA,GAAAA,EAAO,YAAA,EAAgB,EAAC,CACtC,QAAA,CAAUA,GAAAA,EAAO,aACnB,CAAC,CAAA,CAIK,CAACM,CAAAA,CAAcC,CAAe,EAAU,CAAA,CAAA,QAAA,CAAkB,EAAE,CAAA,CAC5DC,IAAyB,CAAA,CAAA,MAAA,CAAoB,IAAI,GAAK,CAAA,CAEtD,YAAU,IAAM,CACpB,IAAMC,CAAAA,CAAgB,IAAI,GAAA,CAAIL,GAAAA,CAAM,GAAA,CAAKM,CAAAA,EAAMA,CAAAA,CAAE,KAAK,CAAC,CAAA,CACvDH,EAAiBI,CAAAA,EAAS,CACxB,IAAMC,CAAAA,CAAOD,EAAK,MAAA,CAAQE,CAAAA,EAASJ,CAAAA,CAAc,GAAA,CAAII,EAAK,KAAK,CAAC,CAAA,CAChE,OAAID,EAAK,MAAA,GAAWD,CAAAA,CAAK,MAAA,CAAeA,CAAAA,EACxCH,IAAiB,OAAA,CAAU,IAAI,GAAA,CAAII,CAAAA,CAAK,IAAKF,CAAAA,EAAMA,CAAAA,CAAE,KAAK,CAAC,EACpDE,CAAAA,CACT,CAAC,EACH,CAAA,CAAG,CAACR,GAAK,CAAC,CAAA,CAGV,IAAMU,GAAAA,CAAeb,CAAAA,EAAY,QAAA,EAAS,CAAE,MAAK,EAAK,EAAA,CAChDc,CAAAA,CAAwB,CAAA,CAAA,OAAA,CAAQ,IAC/BD,GAAAA,CACEV,GAAAA,CAAM,IAAA,CACVS,CAAAA,EAASA,CAAAA,CAAK,KAAA,CAAM,WAAA,EAAY,GAAMC,IAAa,WAAA,EACtD,CAAA,CAH0B,KAAA,CAIzB,CAACA,GAAAA,CAAcV,GAAK,CAAC,CAAA,CAElBY,EAAuB,CAAA,CAAA,OAAA,CAAQ,IAC/B,CAAClB,GAAAA,EAAY,CAACgB,GAAAA,CAAqB,KAAA,CAChC,CAACnB,KAAO,IAAA,CACZkB,CAAAA,EAASA,CAAAA,CAAK,KAAA,CAAM,aAAY,GAAMC,GAAAA,CAAa,WAAA,EACtD,EACC,CAAChB,GAAAA,CAAUgB,GAAAA,CAAcnB,GAAK,CAAC,CAAA,CAG5BsB,CAAAA,CAAsB,CAAA,CAAA,OAAA,CAAQ,IAAM,CACxC,IAAMC,CAAAA,CAAgB,CACpB,GAAGvB,KAAS,EAAC,CACb,GAAGW,CACL,EAEA,GAAIU,CAAAA,CAAgB,CAClB,IAAMG,CAAAA,CAAa,CACjB,KAAA,CAAOL,GAAAA,CACP,MAAOA,GAAAA,CACP,GAAA,CAAK,IACP,CAAA,CACA,OAAO,CAAC,GAAGI,CAAAA,CAAMC,CAAU,CAC7B,CAEA,OAAOD,CACT,CAAA,CAAG,CAACvB,GAAAA,CAAOW,CAAAA,CAAcU,CAAAA,CAAgBF,GAAY,CAAC,CAAA,CAyBtD,OACEM,IAAAA,CAACC,CAAAA,CAAA,CACE,GAAGrB,GAAAA,CACJ,QAAA,CAAS,cAAA,CACT,SAAQ,IAAA,CACR,KAAA,CAAOF,GAAAA,CAAWmB,CAAAA,CAAgBtB,GAAAA,CAClC,kBAAA,CAAoB,CAAC2B,CAAAA,CAAGC,IAAMD,CAAAA,CAAE,KAAA,GAAUC,CAAAA,CAAE,KAAA,CAC5C,cA9BmE,CAACnB,CAAAA,CAAOoB,CAAAA,GAAiB,CAE9F,GAAI1B,GAAAA,CAAU,CACZ,IAAM2B,CAAAA,CAAUrB,EAAM,MAAA,CACnBM,CAAAA,EAAMA,CAAAA,EAAG,GAAA,GAAQ,MACb,CAACF,GAAAA,CAAiB,OAAA,CAAQ,GAAA,CAAIE,EAAE,KAAK,CAC5C,CAAA,CACA,GAAIe,EAAQ,MAAA,CAAS,CAAA,CAAG,CACtB,IAAA,IAAWC,CAAAA,IAAOD,CAAAA,CAChBjB,GAAAA,CAAiB,OAAA,CAAQ,IAAIkB,CAAAA,CAAI,KAAK,CAAA,CAExCnB,CAAAA,CAAiBI,GAAS,CAAC,GAAGA,CAAAA,CAAM,GAAGc,CAAO,CAAC,EACjD,CACF,CAMEpB,CAAAA,CAHGb,CAAAA,CAGMY,CAAAA,CAFA,CAACA,EAAMA,CAAAA,CAAM,MAAA,CAAS,CAAC,CAAC,EAEjBoB,CAAY,EAEhC,CAAA,CAUI,kBAAA,CAAoBtB,EAEpB,QAAA,CAAA,CAAAkB,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,qBAAA,CACb,QAAA,CAAA,CAAAO,GAAAA,CAACC,CAAAA,CAAA,CACC,MAAA,CACED,GAAAA,CAACE,GAAAA,CAAA,CACC,UAAU,mCAAA,CACV,UAAA,CACEF,GAAAA,CAACG,CAAAA,CAAA,CACC,YAAA,CAAc,KAAA,CACd,MAAA,CACEH,GAAAA,CAACI,MAAA,CACC,SAAA,CAAU,4GAAA,CACV,aAAA,CAAa,CAAC9B,CAAAA,CACd,WAAA,CAAU,sBAAA,CACV,OAAA,CAAU+B,GAAU,CAClB9B,CAAAA,CAAc,EAAA,CAAI,CAChB,OAAQ,MAAA,CACR,KAAA,CAAO8B,CAAAA,CAAM,WAAA,CACb,MAAA,CAAQ,IAAM,CAAE,CAAA,CAChB,iBAAkB,IAAM,CAAE,CAAA,CAC1B,UAAA,CAAY,MACZ,oBAAA,CAAsB,IAAA,CACtB,OAAA,CAAS,MACX,CAAC,EACH,CAAA,CACF,CAAA,CAEJ,CAAA,CAEF,YAAavC,CAAAA,CACb,YAAA,CAAckC,GAAAA,CAACM,UAAAA,CAAA,CAAW,SAAA,CAAU,iCAAA,CAAkC,CAAA,CACtE,gBAAA,CAAiB,SACnB,CAAA,CAEJ,CAAA,CACAN,GAAAA,CAACO,CAAAA,CAAA,CACC,SAAA,CAAWC,EAAAA,CAAGpC,CAAAA,GAAe,MAAA,EAAa,6BAA6B,CAAA,CACvE,WAAA,CAAc,CAAA,EAAM,EAAE,oBAAA,EAAqB,CAE3C,QAAA,CAAA4B,GAAAA,CAACS,EAAA,CACE,QAAA,CAAChC,CAAAA,EAAmB,CACnB,IAAMiC,CAAAA,CAAUtC,CAAAA,GAAe,MAAA,CAAYK,CAAAA,CAAM,MAAM,CAAA,CAAGL,CAAU,CAAA,CAAIK,CAAAA,CAClEkC,EAAWvC,CAAAA,GAAe,MAAA,CAAYK,CAAAA,CAAM,MAAA,CAASL,EAAa,CAAA,CACxE,OACEqB,IAAAA,CAAAmB,QAAAA,CAAA,CACG,QAAA,CAAA,CAAAF,CAAAA,EAAS,GAAA,CAAKxB,CAAAA,EACbO,IAAAA,CAACoB,CAAAA,CAAA,CAEC,SAAA,CAAWL,GAAGpC,CAAAA,GAAe,MAAA,EAAa,gBAAgB,CAAA,CAEzD,UAAAA,CAAAA,GAAe,MAAA,CACZ4B,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,UAAA,CAAY,QAAA,CAAAd,CAAAA,EAAM,KAAA,EAAS,EAAA,CAAG,CAAA,CAC7CA,CAAAA,EAAM,KAAA,EAAS,GAEpBc,GAAAA,CAACc,CAAAA,CAAA,EAAmB,CAAA,CAAA,CAAA,CAPf5B,GAAM,KAAA,EAAS,EAQtB,CACD,CAAA,CACAyB,EAAW,CAAA,EACVlB,IAAAA,CAACoB,CAAAA,CAAA,CAAa,SAAA,CAAU,UAAA,CAAW,QAAA,CAAA,CAAA,GAAA,CAC/BF,CAAAA,CAAAA,CACJ,GAEJ,CAEJ,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,EACAlB,IAAAA,CAACsB,CAAAA,CAAA,CAAc,SAAA,CAAWhD,EACxB,QAAA,CAAA,CAAAiC,GAAAA,CAACgB,CAAAA,CAAA,CACC,OACE9C,GAAAA,EAAaF,GAAAA,GAAU,MAAA,CACnB,SAAA,CACAA,KAAO,MAAA,GAAW,CAAA,EAAK,CAACqB,CAAAA,CACtB,QACA,IAAA,CAEV,CAAA,CACAI,IAAAA,CAACwB,CAAAA,CAAA,CACE,QAAA,CAAA,CAAAjD,GAAAA,EAAO,GAAA,CAAKkB,CAAAA,EACXc,GAAAA,CAACkB,CAAAA,CAAA,CAEC,KAAA,CAAO,CAAE,KAAA,CAAOhC,CAAAA,CAAK,KAAA,CAAO,KAAA,CAAOA,EAAK,KAAM,CAAA,CAE9C,QAAA,CAAAc,GAAAA,CAAC,OAAI,SAAA,CAAU,wCAAA,CACb,QAAA,CAAAA,GAAAA,CAAC,QAAK,SAAA,CAAU,UAAA,CACb,QAAA,CAAAd,CAAAA,CAAK,MACR,CAAA,CACF,CAAA,CAAA,CAPKA,CAAAA,CAAK,KAQZ,CACD,CAAA,CACAG,CAAAA,EACCW,GAAAA,CAACkB,CAAAA,CAAA,CACC,KAAA,CAAO,CAAE,KAAA,CAAO/B,GAAAA,CAAc,KAAA,CAAOA,GAAAA,CAAc,GAAA,CAAK,IAAK,EAE7D,QAAA,CAAAM,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,2CACZ,QAAA,CAAA,CAAA,CAACL,CAAAA,EACAY,GAAAA,CAAC,MAAA,CAAA,CAAK,UAAU,qBAAA,CAAsB,QAAA,CAAA,SAAA,CAAO,CAAA,CAE/CA,GAAAA,CAAC,QAAK,SAAA,CAAU,wCAAA,CACb,QAAA,CAAAb,GAAAA,CACH,GACF,CAAA,CACF,CAAA,CAEFa,GAAAA,CAACmB,CAAAA,CAAA,CAAwB,GAAGlD,CAAAA,CAAgB,CAAA,CAAA,CAC9C,CAAA,CAAA,CACF,GACF,CAEJ","file":"chunk-BIFRDHOB.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { ComboboxInput as ComboboxInputPrimitive } from \"../primitives/combobox\"\r\nimport { Input } from \"../ui\"\r\nimport {\r\n Combobox,\r\n ComboboxChip,\r\n ComboboxChipRemove,\r\n ComboboxChips,\r\n ComboboxInfiniteScroll,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPortal,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n ComboboxValue,\r\n type ComboboxProps\r\n} from \"../ui/combobox\"\r\nimport { SearchIcon, XIcon } from \"lucide-react\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\n\r\ntype ComboboxChipOutsideProps<Value> = Omit<ComboboxProps<Value, true>, \"multiple\"> & {\r\n multiple?: boolean\r\n inputPlaceholder?: string\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n items: ({ label: string; value: string }[]) | undefined\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n isPending?: boolean\r\n /**\r\n * When true, enables creatable / taggable mode.\r\n * If the typed value has no exact match in the current item list,\r\n * a \"Create \\\"…\\\"\" option is shown at the top of the dropdown.\r\n * Created items are appended to the value with `{ label, value, tag: true }`.\r\n */\r\n taggable?: boolean\r\n /**\r\n * Maximum number of chips to show before collapsing the rest into a \"+N\" chip.\r\n * When undefined, all chips are shown.\r\n */\r\n maxVisible?: number\r\n}\r\n\r\nfunction ComboboxChipOutside<Value extends { label: string; value: string; tag?: true }>({\r\n multiple = true,\r\n inputPlaceholder = \"Search...\",\r\n container,\r\n items,\r\n infiniteScroll,\r\n isPending,\r\n taggable = false,\r\n maxVisible,\r\n ...props\r\n}: ComboboxChipOutsideProps<Value>) {\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n const [value, setValue] = useControlledState({\r\n value: props?.value ?? [],\r\n defaultValue: props?.defaultValue ?? [],\r\n onChange: props?.onValueChange,\r\n })\r\n\r\n // Track items created via taggable mode\r\n // Sync with value to avoid stale tags when controlled value is reset from outside\r\n const [createdItems, setCreatedItems] = React.useState<Value[]>([])\r\n const createdValuesRef = React.useRef<Set<string>>(new Set())\r\n\r\n React.useEffect(() => {\r\n const currentValues = new Set(value.map((v) => v.value))\r\n setCreatedItems((prev) => {\r\n const next = prev.filter((item) => currentValues.has(item.value))\r\n if (next.length === prev.length) return prev\r\n createdValuesRef.current = new Set(next.map((v) => v.value))\r\n return next\r\n })\r\n }, [value])\r\n\r\n // Determine if the current input has no exact match in existing items\r\n const trimmedInput = inputValue?.toString().trim() ?? \"\"\r\n const isInputSelected = React.useMemo(() => {\r\n if (!trimmedInput) return false\r\n return value.some(\r\n (item) => item.value.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [trimmedInput, value])\r\n // true = show the taggable item in dropdown (either as \"Create:\" or as checked item)\r\n const isCreatingItem = React.useMemo(() => {\r\n if (!taggable || !trimmedInput) return false\r\n return !items?.some(\r\n (item) => item.label.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [taggable, trimmedInput, items])\r\n\r\n // Merge server items with locally created tags + the \"Create\" placeholder\r\n const combinedItems = React.useMemo(() => {\r\n const base: Value[] = [\r\n ...items ?? [],\r\n ...createdItems,\r\n ]\r\n\r\n if (isCreatingItem) {\r\n const createItem = {\r\n label: trimmedInput,\r\n value: trimmedInput,\r\n tag: true,\r\n }\r\n return [...base, createItem]\r\n }\r\n\r\n return base\r\n }, [items, createdItems, isCreatingItem, trimmedInput])\r\n\r\n const handleValueChange: ComboboxProps<Value, true>[\"onValueChange\"] = (value, eventDetails) => {\r\n // Capture newly created taggable items internally\r\n if (taggable) {\r\n const newTags = value.filter(\r\n (v) => v?.tag === true\r\n && !createdValuesRef.current.has(v.value)\r\n )\r\n if (newTags.length > 0) {\r\n for (const tag of newTags) {\r\n createdValuesRef.current.add(tag.value)\r\n }\r\n setCreatedItems((prev) => [...prev, ...newTags])\r\n }\r\n }\r\n\r\n // if multiple is false, we need to replace the value with the new value instead of adding to it\r\n if (!multiple) {\r\n setValue([value[value.length - 1]], eventDetails)\r\n } else {\r\n setValue(value, eventDetails)\r\n }\r\n }\r\n\r\n return (\r\n <Combobox\r\n {...props}\r\n behavior=\"chip-outside\"\r\n multiple\r\n items={taggable ? combinedItems : items}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n >\r\n <div className=\"flex flex-col gap-2\">\r\n <ComboboxInputPrimitive\r\n render={\r\n <Input\r\n className=\"h-9 text-body-regular-3 pl-9 pr-7\"\r\n endContent={\r\n <ComboboxTrigger\r\n nativeButton={false}\r\n render={(\r\n <XIcon\r\n className=\"!size-5 !right-1.5 data-[hidden=true]:opacity-0 opacity-100 transition-opacity duration-300 cursor-pointer\"\r\n data-hidden={!inputValue}\r\n data-slot=\"combobox-clear-input\"\r\n onClick={(event) => {\r\n setInputValue(\"\", {\r\n reason: \"none\",\r\n event: event.nativeEvent,\r\n cancel: () => { },\r\n allowPropagation: () => { },\r\n isCanceled: false,\r\n isPropagationAllowed: true,\r\n trigger: undefined,\r\n })\r\n }}\r\n />\r\n )}\r\n />\r\n }\r\n placeholder={inputPlaceholder}\r\n startContent={<SearchIcon className=\"!size-4 !text-fg-tertiary-hover\" />}\r\n wrapperClassName=\"w-full\"\r\n />\r\n }\r\n />\r\n <ComboboxChips\r\n className={cn(maxVisible !== undefined && \"flex-nowrap overflow-hidden\")}\r\n onMouseDown={(e) => e.preventBaseUIHandler()}\r\n >\r\n <ComboboxValue>\r\n {(value: Value[]) => {\r\n const visible = maxVisible !== undefined ? value.slice(0, maxVisible) : value\r\n const overflow = maxVisible !== undefined ? value.length - maxVisible : 0\r\n return (\r\n <>\r\n {visible?.map((item) => (\r\n <ComboboxChip\r\n key={item?.value || \"\"}\r\n className={cn(maxVisible !== undefined && \"min-w-0 shrink\")}\r\n >\r\n {maxVisible !== undefined\r\n ? <span className=\"truncate\">{item?.label || \"\"}</span>\r\n : (item?.label || \"\")\r\n }\r\n <ComboboxChipRemove />\r\n </ComboboxChip>\r\n ))}\r\n {overflow > 0 && (\r\n <ComboboxChip className=\"shrink-0\">\r\n +{overflow}\r\n </ComboboxChip>\r\n )}\r\n </>\r\n )\r\n }}\r\n </ComboboxValue>\r\n </ComboboxChips>\r\n </div>\r\n <ComboboxPopup container={container}>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0 && !isCreatingItem\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem\r\n key={item.value}\r\n value={{ label: item.label, value: item.value }}\r\n >\r\n <div className=\"flex items-center gap-2 w-full min-w-0\">\r\n <span className=\"truncate\">\r\n {item.label}\r\n </span>\r\n </div>\r\n </ComboboxItem>\r\n ))}\r\n {isCreatingItem && (\r\n <ComboboxItem\r\n value={{ label: trimmedInput, value: trimmedInput, tag: true }}\r\n >\r\n <div className=\"flex items-center gap-1.5 w-full min-w-0\">\r\n {!isInputSelected && (\r\n <span className=\"text-text-secondary\">Create:</span>\r\n )}\r\n <span className=\"font-medium text-text-primary truncate\">\r\n {trimmedInput}\r\n </span>\r\n </div>\r\n </ComboboxItem>\r\n )}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { ComboboxChipOutside }"]}
|
|
1
|
+
{"version":3,"sources":["../src/composites/combobox-chip-outside.tsx"],"names":["ComboboxChipOutside","multiple","inputPlaceholder","container","items","infiniteScroll","isPending","taggable","maxVisible","props","inputValue","setInputValue","useControlledState","value","setValue","createdItems","setCreatedItems","createdValuesRef","currentValues","v","prev","next","item","trimmedInput","isInputSelected","isCreatingItem","combinedItems","base","createItem","jsxs","Combobox","a","b","eventDetails","newTags","tag","jsx","ComboboxInput","Input","ComboboxTrigger","XIcon","event","SearchIcon","ComboboxChips","cn","ComboboxValue","visible","overflow","Fragment","ComboboxChip","ComboboxChipRemove","ComboboxPopup","ComboboxStatus","ComboboxList","ComboboxItem","ComboboxInfiniteScroll"],"mappings":"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","file":"chunk-DNO5M44I.js","sourcesContent":["import * as React from \"react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { ComboboxInput as ComboboxInputPrimitive } from \"../primitives/combobox\"\r\nimport { Input } from \"../ui\"\r\nimport {\r\n Combobox,\r\n ComboboxChip,\r\n ComboboxChipRemove,\r\n ComboboxChips,\r\n ComboboxInfiniteScroll,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPortal,\r\n ComboboxPopup,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n ComboboxValue,\r\n type ComboboxProps\r\n} from \"../ui/combobox\"\r\nimport { SearchIcon, XIcon } from \"lucide-react\"\r\nimport { useControlledState } from \"@xploreu/hooks/use-controlled-state\"\r\n\r\ntype ComboboxChipOutsideProps<Value> = Omit<ComboboxProps<Value, true>, \"multiple\"> & {\r\n multiple?: boolean\r\n inputPlaceholder?: string\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n items: ({ label: string; value: string }[]) | undefined\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n isPending?: boolean\r\n /**\r\n * When true, enables creatable / taggable mode.\r\n * If the typed value has no exact match in the current item list,\r\n * a \"Create \\\"…\\\"\" option is shown at the top of the dropdown.\r\n * Created items are appended to the value with `{ label, value, tag: true }`.\r\n */\r\n taggable?: boolean\r\n /**\r\n * Maximum number of chips to show before collapsing the rest into a \"+N\" chip.\r\n * When undefined, all chips are shown.\r\n */\r\n maxVisible?: number\r\n}\r\n\r\nfunction ComboboxChipOutside<Value extends { label: string; value: string; tag?: true }>({\r\n multiple = true,\r\n inputPlaceholder = \"Search...\",\r\n container,\r\n items,\r\n infiniteScroll,\r\n isPending,\r\n taggable = false,\r\n maxVisible,\r\n ...props\r\n}: ComboboxChipOutsideProps<Value>) {\r\n const [inputValue, setInputValue] = useControlledState({\r\n value: props?.inputValue?.toString(),\r\n defaultValue: props?.defaultInputValue?.toString(),\r\n onChange: props?.onInputValueChange,\r\n })\r\n\r\n const [value, setValue] = useControlledState({\r\n value: props?.value ?? [],\r\n defaultValue: props?.defaultValue ?? [],\r\n onChange: props?.onValueChange,\r\n })\r\n\r\n // Track items created via taggable mode\r\n // Sync with value to avoid stale tags when controlled value is reset from outside\r\n const [createdItems, setCreatedItems] = React.useState<Value[]>([])\r\n const createdValuesRef = React.useRef<Set<string>>(new Set())\r\n\r\n React.useEffect(() => {\r\n const currentValues = new Set(value.map((v) => v.value))\r\n setCreatedItems((prev) => {\r\n const next = prev.filter((item) => currentValues.has(item.value))\r\n if (next.length === prev.length) return prev\r\n createdValuesRef.current = new Set(next.map((v) => v.value))\r\n return next\r\n })\r\n }, [value])\r\n\r\n // Determine if the current input has no exact match in existing items\r\n const trimmedInput = inputValue?.toString().trim() ?? \"\"\r\n const isInputSelected = React.useMemo(() => {\r\n if (!trimmedInput) return false\r\n return value.some(\r\n (item) => item.value.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [trimmedInput, value])\r\n // true = show the taggable item in dropdown (either as \"Create:\" or as checked item)\r\n const isCreatingItem = React.useMemo(() => {\r\n if (!taggable || !trimmedInput) return false\r\n return !items?.some(\r\n (item) => item.label.toLowerCase() === trimmedInput.toLowerCase()\r\n )\r\n }, [taggable, trimmedInput, items])\r\n\r\n // Merge server items with locally created tags + the \"Create\" placeholder\r\n const combinedItems = React.useMemo(() => {\r\n const base: Value[] = [\r\n ...items ?? [],\r\n ...createdItems,\r\n ]\r\n\r\n if (isCreatingItem) {\r\n const createItem = {\r\n label: trimmedInput,\r\n value: trimmedInput,\r\n tag: true,\r\n }\r\n return [...base, createItem]\r\n }\r\n\r\n return base\r\n }, [items, createdItems, isCreatingItem, trimmedInput])\r\n\r\n const handleValueChange: ComboboxProps<Value, true>[\"onValueChange\"] = (value, eventDetails) => {\r\n // Capture newly created taggable items internally\r\n if (taggable) {\r\n const newTags = value.filter(\r\n (v) => v?.tag === true\r\n && !createdValuesRef.current.has(v.value)\r\n )\r\n if (newTags.length > 0) {\r\n for (const tag of newTags) {\r\n createdValuesRef.current.add(tag.value)\r\n }\r\n setCreatedItems((prev) => [...prev, ...newTags])\r\n }\r\n }\r\n\r\n // if multiple is false, we need to replace the value with the new value instead of adding to it\r\n if (!multiple) {\r\n setValue([value[value.length - 1]], eventDetails)\r\n } else {\r\n setValue(value, eventDetails)\r\n }\r\n }\r\n\r\n return (\r\n <Combobox\r\n {...props}\r\n behavior=\"chip-outside\"\r\n multiple\r\n items={taggable ? combinedItems : items}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n onValueChange={handleValueChange}\r\n onInputValueChange={setInputValue}\r\n >\r\n <div className=\"flex flex-col gap-2\">\r\n <ComboboxInputPrimitive\r\n render={\r\n <Input\r\n className=\"h-9 text-body-regular-3 pl-9 pr-7\"\r\n endContent={\r\n <ComboboxTrigger\r\n nativeButton={false}\r\n render={(\r\n <XIcon\r\n className=\"!size-5 !right-1.5 data-[hidden=true]:opacity-0 opacity-100 transition-opacity duration-300 cursor-pointer\"\r\n data-hidden={!inputValue}\r\n data-slot=\"combobox-clear-input\"\r\n onClick={(event) => {\r\n setInputValue(\"\", {\r\n reason: \"none\",\r\n event: event.nativeEvent,\r\n cancel: () => { },\r\n allowPropagation: () => { },\r\n isCanceled: false,\r\n isPropagationAllowed: true,\r\n trigger: undefined,\r\n })\r\n }}\r\n />\r\n )}\r\n />\r\n }\r\n placeholder={inputPlaceholder}\r\n startContent={<SearchIcon className=\"!size-4 !text-fg-tertiary-hover\" />}\r\n wrapperClassName=\"w-full\"\r\n />\r\n }\r\n />\r\n <ComboboxChips\r\n className={cn(maxVisible !== undefined && \"flex-nowrap overflow-hidden\")}\r\n onMouseDown={(e) => e.preventBaseUIHandler()}\r\n >\r\n <ComboboxValue>\r\n {(value: Value[]) => {\r\n const visible = maxVisible !== undefined ? value.slice(0, maxVisible) : value\r\n const overflow = maxVisible !== undefined ? value.length - maxVisible : 0\r\n return (\r\n <>\r\n {visible?.map((item) => (\r\n <ComboboxChip\r\n key={item?.value || \"\"}\r\n className={cn(maxVisible !== undefined && \"min-w-0 shrink\")}\r\n >\r\n {maxVisible !== undefined\r\n ? <span className=\"truncate\">{item?.label || \"\"}</span>\r\n : (item?.label || \"\")\r\n }\r\n <ComboboxChipRemove />\r\n </ComboboxChip>\r\n ))}\r\n {overflow > 0 && (\r\n <ComboboxChip className=\"shrink-0\">\r\n +{overflow}\r\n </ComboboxChip>\r\n )}\r\n </>\r\n )\r\n }}\r\n </ComboboxValue>\r\n </ComboboxChips>\r\n </div>\r\n <ComboboxPopup container={container}>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0 && !isCreatingItem\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem\r\n key={item.value}\r\n value={{ label: item.label, value: item.value }}\r\n >\r\n <div className=\"flex items-center gap-2 w-full min-w-0\">\r\n <span className=\"truncate\">\r\n {item.label}\r\n </span>\r\n </div>\r\n </ComboboxItem>\r\n ))}\r\n {isCreatingItem && (\r\n <ComboboxItem\r\n value={{ label: trimmedInput, value: trimmedInput, tag: true }}\r\n >\r\n <div className=\"flex items-center gap-1.5 w-full min-w-0\">\r\n {!isInputSelected && (\r\n <span className=\"text-text-secondary\">Create:</span>\r\n )}\r\n <span className=\"font-medium text-text-primary truncate\">\r\n {trimmedInput}\r\n </span>\r\n </div>\r\n </ComboboxItem>\r\n )}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { ComboboxChipOutside }"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a,b,m,e,q,s,w,x,F}from'./chunk-ZZWSZRER.js';import*as r from'react';import {ChevronDownIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsxs,jsx,Fragment}from'react/jsx-runtime';function Y(o){let{items:n,placeholder:b$1="Select",icon:I,container:R,isPending:v,className:w$1,triggerClassName:L,contentClassName:k,disabled:T,infiniteScroll:P}=o,a$1=o.multiple===true,u=r.useMemo(()=>{if(a$1)return o.value;let e=o.value;return e?[e]:[]},[a$1,o.value,o.value]),$=r.useMemo(()=>{if(a$1)return o.defaultValue??[];let e=o.defaultValue;return e?[e]:[]},[a$1,o.defaultValue,o.defaultValue]),[q$1,c]=r.useState(()=>(u!==void 0?u:$)??[]);r.useEffect(()=>{u!==void 0&&c(u);},[u]);let m$1=q$1??[],s$1=m$1.length>0,[p,z]=r.useState(""),S=r.useMemo(()=>{if(!p.trim())return n;let e=p.toLowerCase();return n?.filter(l=>l.label.toLowerCase().includes(e)||l.value.toLowerCase().includes(e))},[n,p]),A=e=>{let l=e;if(a$1)c(l),o.onValueChange?.(l);else {let x=l.length>0?l[l.length-1]:null;c(x?[x]:[]),o.onValueChange?.(x);}},B=()=>{c([]),a$1?o.onValueChange?.([]):o.onValueChange?.(null);},E=r.useMemo(()=>s$1?a$1?`${b$1} (${m$1.length})`:m$1[0]?.label??b$1:a$1?`All ${b$1}`:b$1,[s$1,a$1,b$1,m$1]);return jsxs(a,{multiple:true,items:n,value:m$1,onValueChange:A,isItemEqualToValue:(e,l)=>e.value===l.value,disabled:T,children:[jsxs(b,{className:cn("group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors","border-border-primary text-text-secondary hover:bg-bg-primary-hover",s$1&&"border-border-brand bg-bg-brand-primary text-text-brand-secondary","disabled:pointer-events-none disabled:opacity-50","data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary",L,w$1),children:[I&&jsx("span",{className:cn("size-4 shrink-0",s$1?"text-fg-brand-primary":"text-fg-quaternary"),children:I}),jsx("span",{className:"truncate",children:E}),jsx(ChevronDownIcon,{className:cn("size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180",s$1?"text-fg-brand-primary":"text-fg-quaternary")})]}),jsx(m,{container:R,className:cn("w-72",k),align:"start",sideOffset:8,children:a$1?jsxs("div",{className:"flex flex-col",children:[jsxs("div",{className:"flex items-center justify-between px-3 py-2 border-b border-border-primary",children:[jsx("span",{className:"text-label-semibold-3 text-text-primary",children:b$1}),jsxs("button",{type:"button",disabled:!s$1,onClick:B,className:cn("text-body-medium-3 transition-colors",s$1?"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover":"cursor-not-allowed text-text-disabled"),children:["Clear",s$1?` (${m$1.length})`:""]})]}),jsx(e,{value:p,onChange:e=>z(e.target.value),placeholder:`Search ${b$1.toLowerCase()}...`}),jsx(q,{status:v||n===void 0?"pending":S?.length===0?"empty":null}),jsxs(s,{children:[S?.map(e=>jsx(w,{indicator:"checkbox",value:e,children:jsx(x,{children:e.label})},e.value)),jsx(F,{...P})]})]}):jsxs(Fragment,{children:[jsx(q,{status:v||n===void 0?"pending":n?.length===0?"empty":null}),jsxs(s,{children:[n?.map(e=>jsx(w,{value:e,children:jsx(x,{children:e.label})},e.value)),jsx(F,{...P})]})]})})]})}export{Y as a};//# sourceMappingURL=chunk-FDXCGFD2.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-FDXCGFD2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/composites/filter-combobox.tsx"],"names":["FilterCombobox","props","items","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","infiniteScroll","isMultiple","controlledArray","single","defaultArray","internalValue","setInternalValue","valueArray","hasValue","search","setSearch","filteredItems","q","it","handleValueChange","next","arr","handleClear","triggerLabel","jsxs","Combobox","a","b","ComboboxTrigger","cn","jsx","ChevronDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","item","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll","Fragment"],"mappings":"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","file":"chunk-44LMOSRI.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckCircle2Icon, ChevronDownIcon, SearchIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxItemIndicator as ComboboxItemIndicatorPrimitive\r\n} from \"../primitives/combobox\"\r\nimport { ComboboxHighlightItem, ComboboxItem, ComboboxItemTitle } from \"../ui/combobox\"\r\nimport { Input } from \"../ui/input\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxInput,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n type ComboboxProps,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type FilterComboboxItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\ntype BaseProps = {\r\n items: FilterComboboxItem[] | undefined\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\ntype SingleProps = BaseProps & {\r\n multiple?: false\r\n value?: FilterComboboxItem | null\r\n defaultValue?: FilterComboboxItem | null\r\n onValueChange?: (value: FilterComboboxItem | null) => void\r\n}\r\n\r\ntype MultipleProps = BaseProps & {\r\n multiple: true\r\n value?: FilterComboboxItem[]\r\n defaultValue?: FilterComboboxItem[]\r\n onValueChange?: (value: FilterComboboxItem[]) => void\r\n}\r\n\r\nexport type FilterComboboxProps = SingleProps | MultipleProps\r\n\r\n// ─── Component ───\r\n\r\nfunction FilterCombobox(props: FilterComboboxProps) {\r\n const {\r\n items,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n infiniteScroll,\r\n } = props\r\n\r\n const isMultiple = props.multiple === true\r\n\r\n // Normalize controlled value to array for internal combobox (always multiple=true internally)\r\n const controlledArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).value\r\n }\r\n const single = (props as SingleProps).value\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).value, (props as MultipleProps).value])\r\n\r\n const defaultArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).defaultValue ?? []\r\n }\r\n const single = (props as SingleProps).defaultValue\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).defaultValue, (props as MultipleProps).defaultValue])\r\n\r\n const [internalValue, setInternalValue] = React.useState<FilterComboboxItem[]>(\r\n () =>\r\n (controlledArray !== undefined\r\n ? (controlledArray as FilterComboboxItem[])\r\n : (defaultArray as FilterComboboxItem[])) ?? []\r\n )\r\n\r\n // Sync when controlled value changes externally\r\n React.useEffect(() => {\r\n if (controlledArray !== undefined) {\r\n setInternalValue(controlledArray as FilterComboboxItem[])\r\n }\r\n }, [controlledArray])\r\n\r\n const valueArray = internalValue ?? []\r\n const hasValue = valueArray.length > 0\r\n\r\n // Search for multiple variant\r\n const [search, setSearch] = React.useState(\"\")\r\n\r\n const filteredItems = React.useMemo(() => {\r\n if (!search.trim()) return items\r\n const q = search.toLowerCase()\r\n return items?.filter(\r\n (it) => it.label.toLowerCase().includes(q) || it.value.toLowerCase().includes(q)\r\n )\r\n }, [items, search])\r\n\r\n const handleValueChange: ComboboxProps<FilterComboboxItem, boolean>[\"onValueChange\"] = (\r\n next\r\n ) => {\r\n const arr = next as FilterComboboxItem[]\r\n if (isMultiple) {\r\n setInternalValue(arr)\r\n ; (props as MultipleProps).onValueChange?.(arr)\r\n } else {\r\n // single: take last selected (base-ui gives array)\r\n const single = arr.length > 0 ? arr[arr.length - 1] : null\r\n const normalized = single ? [single] : []\r\n setInternalValue(normalized)\r\n ; (props as SingleProps).onValueChange?.(single)\r\n }\r\n }\r\n\r\n const handleClear = () => {\r\n setInternalValue([])\r\n if (isMultiple) {\r\n ; (props as MultipleProps).onValueChange?.([])\r\n } else {\r\n ; (props as SingleProps).onValueChange?.(null)\r\n }\r\n }\r\n\r\n // Trigger label\r\n const triggerLabel = React.useMemo(() => {\r\n if (!hasValue) {\r\n return isMultiple ? `All ${placeholder}` : placeholder\r\n }\r\n if (isMultiple) {\r\n return `${placeholder} (${valueArray.length})`\r\n }\r\n return valueArray[0]?.label ?? placeholder\r\n }, [hasValue, isMultiple, placeholder, valueArray])\r\n\r\n return (\r\n <Combobox\r\n multiple\r\n items={items}\r\n value={valueArray}\r\n onValueChange={handleValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n \"group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue && \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n >\r\n {icon}\r\n </span>\r\n )}\r\n <span className=\"truncate\">{triggerLabel}</span>\r\n <ChevronDownIcon\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n {isMultiple ? (\r\n <div className=\"flex flex-col\">\r\n {/* Header: title + Clear (n) */}\r\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-border-primary\">\r\n <span className=\"text-label-semibold-3 text-text-primary\">{placeholder}</span>\r\n <button\r\n type=\"button\"\r\n disabled={!hasValue}\r\n onClick={handleClear}\r\n className={cn(\r\n \"text-body-medium-3 transition-colors\",\r\n hasValue\r\n ? \"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover\"\r\n : \"cursor-not-allowed text-text-disabled\"\r\n )}\r\n >\r\n Clear{hasValue ? ` (${valueArray.length})` : \"\"}\r\n </button>\r\n </div>\r\n\r\n {/* Search */}\r\n <ComboboxInput\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n placeholder={`Search ${placeholder.toLowerCase()}...`}\r\n />\r\n\r\n {/* List */}\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : filteredItems?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {filteredItems?.map((item) => (\r\n <ComboboxItem indicator=\"checkbox\" key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n )\r\n )}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </div>\r\n ) : (\r\n <>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </>\r\n )}\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { FilterCombobox }\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/composites/filter-combobox.tsx"],"names":["FilterCombobox","props","items","placeholder","icon","container","isPending","className","triggerClassName","contentClassName","disabled","infiniteScroll","isMultiple","controlledArray","single","defaultArray","internalValue","setInternalValue","valueArray","hasValue","search","setSearch","filteredItems","q","it","handleValueChange","next","arr","handleClear","triggerLabel","jsxs","Combobox","a","b","ComboboxTrigger","cn","jsx","ChevronDownIcon","ComboboxPopup","ComboboxInput","ComboboxStatus","ComboboxList","item","ComboboxItem","ComboboxItemTitle","ComboboxInfiniteScroll","Fragment"],"mappings":"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","file":"chunk-FDXCGFD2.js","sourcesContent":["\"use client\"\r\n\r\nimport * as React from \"react\"\r\nimport { CheckCircle2Icon, ChevronDownIcon, SearchIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n ComboboxItemIndicator as ComboboxItemIndicatorPrimitive\r\n} from \"../primitives/combobox\"\r\nimport { ComboboxHighlightItem, ComboboxItem, ComboboxItemTitle } from \"../ui/combobox\"\r\nimport { Input } from \"../ui/input\"\r\nimport {\r\n Combobox,\r\n ComboboxInfiniteScroll,\r\n ComboboxInput,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxPortal,\r\n ComboboxStatus,\r\n ComboboxTrigger,\r\n type ComboboxProps,\r\n} from \"../ui/combobox\"\r\n\r\n// ─── Types ───\r\n\r\nexport type FilterComboboxItem = {\r\n label: string\r\n value: string\r\n}\r\n\r\ntype BaseProps = {\r\n items: FilterComboboxItem[] | undefined\r\n placeholder?: string\r\n icon?: React.ReactNode\r\n container?: React.ComponentProps<typeof ComboboxPortal>[\"container\"]\r\n isPending?: boolean\r\n className?: string\r\n triggerClassName?: string\r\n contentClassName?: string\r\n disabled?: boolean\r\n infiniteScroll?: React.ComponentProps<typeof ComboboxInfiniteScroll>\r\n}\r\n\r\ntype SingleProps = BaseProps & {\r\n multiple?: false\r\n value?: FilterComboboxItem | null\r\n defaultValue?: FilterComboboxItem | null\r\n onValueChange?: (value: FilterComboboxItem | null) => void\r\n}\r\n\r\ntype MultipleProps = BaseProps & {\r\n multiple: true\r\n value?: FilterComboboxItem[]\r\n defaultValue?: FilterComboboxItem[]\r\n onValueChange?: (value: FilterComboboxItem[]) => void\r\n}\r\n\r\nexport type FilterComboboxProps = SingleProps | MultipleProps\r\n\r\n// ─── Component ───\r\n\r\nfunction FilterCombobox(props: FilterComboboxProps) {\r\n const {\r\n items,\r\n placeholder = \"Select\",\r\n icon,\r\n container,\r\n isPending,\r\n className,\r\n triggerClassName,\r\n contentClassName,\r\n disabled,\r\n infiniteScroll,\r\n } = props\r\n\r\n const isMultiple = props.multiple === true\r\n\r\n // Normalize controlled value to array for internal combobox (always multiple=true internally)\r\n const controlledArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).value\r\n }\r\n const single = (props as SingleProps).value\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).value, (props as MultipleProps).value])\r\n\r\n const defaultArray = React.useMemo(() => {\r\n if (isMultiple) {\r\n return (props as MultipleProps).defaultValue ?? []\r\n }\r\n const single = (props as SingleProps).defaultValue\r\n return single ? [single] : []\r\n }, [isMultiple, (props as SingleProps).defaultValue, (props as MultipleProps).defaultValue])\r\n\r\n const [internalValue, setInternalValue] = React.useState<FilterComboboxItem[]>(\r\n () =>\r\n (controlledArray !== undefined\r\n ? (controlledArray as FilterComboboxItem[])\r\n : (defaultArray as FilterComboboxItem[])) ?? []\r\n )\r\n\r\n // Sync when controlled value changes externally\r\n React.useEffect(() => {\r\n if (controlledArray !== undefined) {\r\n setInternalValue(controlledArray as FilterComboboxItem[])\r\n }\r\n }, [controlledArray])\r\n\r\n const valueArray = internalValue ?? []\r\n const hasValue = valueArray.length > 0\r\n\r\n // Search for multiple variant\r\n const [search, setSearch] = React.useState(\"\")\r\n\r\n const filteredItems = React.useMemo(() => {\r\n if (!search.trim()) return items\r\n const q = search.toLowerCase()\r\n return items?.filter(\r\n (it) => it.label.toLowerCase().includes(q) || it.value.toLowerCase().includes(q)\r\n )\r\n }, [items, search])\r\n\r\n const handleValueChange: ComboboxProps<FilterComboboxItem, boolean>[\"onValueChange\"] = (\r\n next\r\n ) => {\r\n const arr = next as FilterComboboxItem[]\r\n if (isMultiple) {\r\n setInternalValue(arr)\r\n ; (props as MultipleProps).onValueChange?.(arr)\r\n } else {\r\n // single: take last selected (base-ui gives array)\r\n const single = arr.length > 0 ? arr[arr.length - 1] : null\r\n const normalized = single ? [single] : []\r\n setInternalValue(normalized)\r\n ; (props as SingleProps).onValueChange?.(single)\r\n }\r\n }\r\n\r\n const handleClear = () => {\r\n setInternalValue([])\r\n if (isMultiple) {\r\n ; (props as MultipleProps).onValueChange?.([])\r\n } else {\r\n ; (props as SingleProps).onValueChange?.(null)\r\n }\r\n }\r\n\r\n // Trigger label\r\n const triggerLabel = React.useMemo(() => {\r\n if (!hasValue) {\r\n return isMultiple ? `All ${placeholder}` : placeholder\r\n }\r\n if (isMultiple) {\r\n return `${placeholder} (${valueArray.length})`\r\n }\r\n return valueArray[0]?.label ?? placeholder\r\n }, [hasValue, isMultiple, placeholder, valueArray])\r\n\r\n return (\r\n <Combobox\r\n multiple\r\n items={items}\r\n value={valueArray}\r\n onValueChange={handleValueChange}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n disabled={disabled}\r\n >\r\n <ComboboxTrigger\r\n className={cn(\r\n \"group flex h-9 w-fit max-w-[220px] items-center gap-2 rounded-xp-card-base border bg-bg-primary px-3 text-body-medium-3 transition-colors\",\r\n \"border-border-primary text-text-secondary hover:bg-bg-primary-hover\",\r\n hasValue && \"border-border-brand bg-bg-brand-primary text-text-brand-secondary\",\r\n \"disabled:pointer-events-none disabled:opacity-50\",\r\n \"data-[popup-open]:border-border-brand data-[popup-open]:bg-bg-brand-primary data-[popup-open]:text-text-brand-secondary\",\r\n triggerClassName,\r\n className\r\n )}\r\n >\r\n {icon && (\r\n <span\r\n className={cn(\r\n \"size-4 shrink-0\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n >\r\n {icon}\r\n </span>\r\n )}\r\n <span className=\"truncate\">{triggerLabel}</span>\r\n <ChevronDownIcon\r\n className={cn(\r\n \"size-4 shrink-0 transition-transform group-data-[popup-open]:rotate-180\",\r\n hasValue ? \"text-fg-brand-primary\" : \"text-fg-quaternary\"\r\n )}\r\n />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup\r\n container={container}\r\n className={cn(\"w-72\", contentClassName)}\r\n align=\"start\"\r\n sideOffset={8}\r\n >\r\n {isMultiple ? (\r\n <div className=\"flex flex-col\">\r\n {/* Header: title + Clear (n) */}\r\n <div className=\"flex items-center justify-between px-3 py-2 border-b border-border-primary\">\r\n <span className=\"text-label-semibold-3 text-text-primary\">{placeholder}</span>\r\n <button\r\n type=\"button\"\r\n disabled={!hasValue}\r\n onClick={handleClear}\r\n className={cn(\r\n \"text-body-medium-3 transition-colors\",\r\n hasValue\r\n ? \"cursor-pointer text-text-brand-secondary hover:text-text-brand-secondary-hover\"\r\n : \"cursor-not-allowed text-text-disabled\"\r\n )}\r\n >\r\n Clear{hasValue ? ` (${valueArray.length})` : \"\"}\r\n </button>\r\n </div>\r\n\r\n {/* Search */}\r\n <ComboboxInput\r\n value={search}\r\n onChange={(e) => setSearch(e.target.value)}\r\n placeholder={`Search ${placeholder.toLowerCase()}...`}\r\n />\r\n\r\n {/* List */}\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : filteredItems?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {filteredItems?.map((item) => (\r\n <ComboboxItem indicator=\"checkbox\" key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n )\r\n )}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </div>\r\n ) : (\r\n <>\r\n <ComboboxStatus\r\n status={\r\n isPending || items === undefined\r\n ? \"pending\"\r\n : items?.length === 0\r\n ? \"empty\"\r\n : null\r\n }\r\n />\r\n <ComboboxList>\r\n {items?.map((item) => (\r\n <ComboboxItem key={item.value} value={item}>\r\n <ComboboxItemTitle>\r\n {item.label}\r\n </ComboboxItemTitle>\r\n </ComboboxItem>\r\n ))}\r\n <ComboboxInfiniteScroll {...infiniteScroll} />\r\n </ComboboxList>\r\n </>\r\n )}\r\n </ComboboxPopup>\r\n </Combobox>\r\n )\r\n}\r\n\r\nexport { FilterCombobox }\r\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a,b,i,m,s,w}from'./chunk-ZZWSZRER.js';import*as l from'react';import {ChevronDownIcon,ChevronLeftIcon,ChevronRightIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsxs,Fragment,jsx}from'react/jsx-runtime';function j({page:r,pageSize:a$1,total:i$1,onPageChange:b$1,onPageSizeChange:n,pageSizeOptions:m$1=[10,20,50,100],showPageSize:c=true,showRange:d=true,className:C,...N}){let u=Math.max(1,Math.ceil(i$1/a$1)),h=i$1===0?0:(r-1)*a$1+1,P=Math.min(r*a$1,i$1),s$1=l.useMemo(()=>m$1.map(e=>({label:String(e),value:e})),[m$1]),I=l.useMemo(()=>s$1.find(e=>e.value===a$1)??s$1[0],[s$1,a$1]);return jsxs("div",{className:cn("flex w-full flex-col-reverse gap-3 mt-4 sm:flex-row sm:items-center sm:justify-between border-t border-border-primary pt-3 text-body-regular-2 text-text-secondary",C),"data-slot":"pagination",...N,children:[jsxs("div",{className:"flex items-center gap-2",children:[c&&n&&jsxs(Fragment,{children:[jsx("span",{className:"text-label-regular-3 text-text-tertiary",children:"Rows per page"}),jsxs(a,{items:s$1,value:I,onValueChange:e=>{e&&n&&n(e.value);},isItemEqualToValue:(e,w)=>e.value===w.value,children:[jsxs(b,{className:"h-8 gap-2 rounded-lg border border-border-primary bg-bg-primary px-3 text-label-semibold-3 text-text-primary hover:bg-bg-secondary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border-brand-primary","aria-label":"Rows per page",children:[jsx(i,{children:e=>e?e.label:String(a$1)}),jsx(ChevronDownIcon,{className:"size-3.5 text-text-tertiary"})]}),jsx(m,{className:"w-24",children:jsx(s,{children:s$1.map(e=>jsx(w,{value:e,children:e.label},e.value))})})]})]}),c&&d&&jsx("span",{className:"text-text-tertiary",children:"\xB7"}),d&&jsxs("span",{className:"text-label-regular-3 text-text-tertiary",children:[h,"\u2013",P," of ",i$1]})]}),jsxs("div",{className:"flex items-center gap-1",children:[jsx("button",{type:"button",disabled:r<=1,onClick:()=>b$1(r-1),className:"inline-flex size-8 cursor-pointer items-center justify-center rounded-lg border border-border-primary bg-bg-primary text-text-secondary transition-colors hover:bg-bg-secondary hover:text-text-primary disabled:cursor-not-allowed disabled:opacity-40","aria-label":"Previous page",children:jsx(ChevronLeftIcon,{className:"size-4"})}),jsxs("span",{className:"px-2 text-label-semibold-3 text-text-primary",children:["Page ",r," / ",u]}),jsx("button",{type:"button",disabled:r>=u,onClick:()=>b$1(r+1),className:"inline-flex size-8 cursor-pointer items-center justify-center rounded-lg border border-border-primary bg-bg-primary text-text-secondary transition-colors hover:bg-bg-secondary hover:text-text-primary disabled:cursor-not-allowed disabled:opacity-40","aria-label":"Next page",children:jsx(ChevronRightIcon,{className:"size-4"})})]})]})}export{j as a};//# sourceMappingURL=chunk-KKE76CHJ.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-KKE76CHJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/pagination.tsx"],"names":["Pagination","page","pageSize","total","onPageChange","onPageSizeChange","pageSizeOptions","showPageSize","showRange","className","props","totalPages","startItem","endItem","items","opt","selectedItem","item","jsxs","cn","Fragment","jsx","Combobox","a","b","ComboboxTrigger","ComboboxValue","val","ChevronDownIcon","ComboboxPopup","ComboboxList","ComboboxItem","ChevronLeftIcon","ChevronRightIcon"],"mappings":"qOA6BO,SAASA,CAAAA,CAAW,CACzB,KAAAC,CAAAA,CACA,QAAA,CAAAC,
|
|
1
|
+
{"version":3,"sources":["../src/ui/pagination.tsx"],"names":["Pagination","page","pageSize","total","onPageChange","onPageSizeChange","pageSizeOptions","showPageSize","showRange","className","props","totalPages","startItem","endItem","items","opt","selectedItem","item","jsxs","cn","Fragment","jsx","Combobox","a","b","ComboboxTrigger","ComboboxValue","val","ChevronDownIcon","ComboboxPopup","ComboboxList","ComboboxItem","ChevronLeftIcon","ChevronRightIcon"],"mappings":"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","file":"chunk-KKE76CHJ.js","sourcesContent":["import * as React from \"react\"\r\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport {\r\n Combobox,\r\n ComboboxItem,\r\n ComboboxList,\r\n ComboboxPopup,\r\n ComboboxTrigger,\r\n ComboboxValue,\r\n} from \"./combobox\"\r\n\r\nexport interface PaginationProps extends React.ComponentProps<\"div\"> {\r\n page: number\r\n pageSize: number\r\n total: number\r\n onPageChange: (page: number) => void\r\n onPageSizeChange?: (pageSize: number) => void\r\n pageSizeOptions?: number[]\r\n showPageSize?: boolean\r\n showRange?: boolean\r\n}\r\n\r\ntype PageSizeOptionItem = {\r\n label: string\r\n value: number\r\n}\r\n\r\nexport function Pagination({\r\n page,\r\n pageSize,\r\n total,\r\n onPageChange,\r\n onPageSizeChange,\r\n pageSizeOptions = [10, 20, 50, 100],\r\n showPageSize = true,\r\n showRange = true,\r\n className,\r\n ...props\r\n}: PaginationProps) {\r\n const totalPages = Math.max(1, Math.ceil(total / pageSize))\r\n const startItem = total === 0 ? 0 : (page - 1) * pageSize + 1\r\n const endItem = Math.min(page * pageSize, total)\r\n\r\n const items: PageSizeOptionItem[] = React.useMemo(\r\n () => pageSizeOptions.map((opt) => ({ label: String(opt), value: opt })),\r\n [pageSizeOptions]\r\n )\r\n\r\n const selectedItem = React.useMemo(\r\n () => items.find((item) => item.value === pageSize) ?? items[0],\r\n [items, pageSize]\r\n )\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"flex w-full flex-col-reverse gap-3 mt-4 sm:flex-row sm:items-center sm:justify-between border-t border-border-primary pt-3 text-body-regular-2 text-text-secondary\",\r\n className\r\n )}\r\n data-slot=\"pagination\"\r\n {...props}\r\n >\r\n {/* Left: Rows per page & range */}\r\n <div className=\"flex items-center gap-2\">\r\n {showPageSize && onPageSizeChange && (\r\n <>\r\n <span className=\"text-label-regular-3 text-text-tertiary\">\r\n Rows per page\r\n </span>\r\n <Combobox<PageSizeOptionItem>\r\n items={items}\r\n value={selectedItem}\r\n onValueChange={(item) => {\r\n if (item && onPageSizeChange) {\r\n onPageSizeChange(item.value)\r\n }\r\n }}\r\n isItemEqualToValue={(a, b) => a.value === b.value}\r\n >\r\n <ComboboxTrigger\r\n className=\"h-8 gap-2 rounded-lg border border-border-primary bg-bg-primary px-3 text-label-semibold-3 text-text-primary hover:bg-bg-secondary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border-brand-primary\"\r\n aria-label=\"Rows per page\"\r\n >\r\n <ComboboxValue>\r\n {(val) => (val ? val.label : String(pageSize))}\r\n </ComboboxValue>\r\n <ChevronDownIcon className=\"size-3.5 text-text-tertiary\" />\r\n </ComboboxTrigger>\r\n\r\n <ComboboxPopup className=\"w-24\">\r\n <ComboboxList>\r\n {items.map((item) => (\r\n <ComboboxItem\r\n key={item.value}\r\n value={item}\r\n >\r\n {item.label}\r\n </ComboboxItem>\r\n ))}\r\n </ComboboxList>\r\n </ComboboxPopup>\r\n </Combobox>\r\n </>\r\n )}\r\n\r\n {showPageSize && showRange && (\r\n <span className=\"text-text-tertiary\">·</span>\r\n )}\r\n\r\n {showRange && (\r\n <span className=\"text-label-regular-3 text-text-tertiary\">\r\n {startItem}–{endItem} of {total}\r\n </span>\r\n )}\r\n </div>\r\n\r\n {/* Right: Page controls */}\r\n <div className=\"flex items-center gap-1\">\r\n <button\r\n type=\"button\"\r\n disabled={page <= 1}\r\n onClick={() => onPageChange(page - 1)}\r\n className=\"inline-flex size-8 cursor-pointer items-center justify-center rounded-lg border border-border-primary bg-bg-primary text-text-secondary transition-colors hover:bg-bg-secondary hover:text-text-primary disabled:cursor-not-allowed disabled:opacity-40\"\r\n aria-label=\"Previous page\"\r\n >\r\n <ChevronLeftIcon className=\"size-4\" />\r\n </button>\r\n\r\n <span className=\"px-2 text-label-semibold-3 text-text-primary\">\r\n Page {page} / {totalPages}\r\n </span>\r\n\r\n <button\r\n type=\"button\"\r\n disabled={page >= totalPages}\r\n onClick={() => onPageChange(page + 1)}\r\n className=\"inline-flex size-8 cursor-pointer items-center justify-center rounded-lg border border-border-primary bg-bg-primary text-text-secondary transition-colors hover:bg-bg-secondary hover:text-text-primary disabled:cursor-not-allowed disabled:opacity-40\"\r\n aria-label=\"Next page\"\r\n >\r\n <ChevronRightIcon className=\"size-4\" />\r\n </button>\r\n </div>\r\n </div>\r\n )\r\n}\r\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a,b,c,d,e}from'./chunk-P2DJG2OD.js';import {a as a$
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a,b,c,d,e}from'./chunk-P2DJG2OD.js';import {a as a$3}from'./chunk-5ETIHFSE.js';import {a as a$2}from'./chunk-XJTOYNCA.js';import {a as a$1}from'./chunk-UCCQUPMT.js';import'react';import {InfoIcon}from'lucide-react';import {cn}from'@xploreu/lib/cn';import {jsx,jsxs,Fragment}from'react/jsx-runtime';function A({className:t,...o}){return jsx("div",{className:"relative w-full overflow-x-auto rounded-xl border border-border-primary bg-bg-primary","data-slot":"table-container",children:jsx("table",{className:cn("w-full caption-bottom text-body-regular-2",t),"data-slot":"table",...o})})}function j({className:t,...o}){return jsx("thead",{className:cn("bg-bg-secondary [&_tr]:border-border-tertiary",t),"data-slot":"table-header",...o})}function q({className:t,...o}){return jsx("tbody",{className:cn("[&_tr:last-child]:border-0",t),"data-slot":"table-body",...o})}function B({className:t,...o}){return jsx("tfoot",{className:cn("border-t border-border-primary bg-bg-secondary font-medium [&>tr]:last:border-b-0",t),"data-slot":"table-footer",...o})}function D({className:t,...o}){return jsx("tr",{className:cn("border-b border-border-secondary transition-colors hover:bg-bg-secondary data-[state=selected]:bg-bg-brand-primary/40",t),"data-slot":"table-row",...o})}function O({className:t,align:o,variant:c$1="string",tooltip:n,sortable:a$4,sortDirection:p,onSort:b$1,children:C,...R}){let s=o||(c$1==="number"?"end":"start"),i=!!(n||a$4),w=s==="end",m=n?jsxs(a,{children:[jsx(b,{render:jsx("button",{type:"button",className:"inline-flex items-center justify-center text-fg-quaternary hover:text-text-primary"}),children:jsx(InfoIcon,{className:"size-3.5"})}),jsx(c,{children:jsx(d,{side:"top",children:jsx(e,{children:n})})})]}):null,u=a$4?jsx("button",{type:"button",onClick:b$1,className:"inline-flex items-center text-fg-quaternary hover:text-text-primary focus:outline-none","aria-label":"Sort column",children:p==="asc"?jsx(a$1,{size:12}):p==="desc"?jsx(a$2,{size:12}):jsx(a$3,{size:12})}):null,d$1=jsx("span",{className:cn("truncate",a$4&&"cursor-pointer select-none"),onClick:a$4?b$1:void 0,children:C});return jsx("th",{className:cn("text-label-bold-3 text-text-tertiary h-10 px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",!i&&s==="end"&&"text-right",!i&&s==="start"&&"text-left",!i&&s==="center"&&"text-center",t),"data-slot":"table-head",...R,children:i?jsx("div",{className:"flex w-full items-center justify-between gap-2",children:w?jsxs(Fragment,{children:[jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[m,u]}),jsx("div",{className:"flex items-center shrink-0 justify-end",children:d$1})]}):jsxs(Fragment,{children:[d$1,jsxs("div",{className:"flex items-center gap-1.5 shrink-0",children:[m,u]})]})}):d$1})}function _({className:t,align:o,variant:c="string",...n}){let a=o||(c==="number"?"end":"start");return jsx("td",{className:cn("text-text-primary px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",a==="end"&&"text-right",a==="start"&&"text-left",a==="center"&&"text-center",t),"data-slot":"table-cell",...n})}function F({className:t,...o}){return jsx("caption",{className:cn("text-text-secondary mt-4 text-body-regular-2",t),"data-slot":"table-caption",...o})}export{A as a,j as b,q as c,B as d,D as e,O as f,_ as g,F as h};//# sourceMappingURL=chunk-RSLKHDFJ.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-RSLKHDFJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/table.tsx"],"names":["Table","className","props","jsx","cn","TableHeader","TableBody","TableFooter","TableRow","TableHead","align","variant","tooltip","sortable","sortDirection","onSort","children","effectiveAlign","hasControls","isEnd","tooltipElement","jsxs","Tooltip","TooltipTrigger","InfoIcon","TooltipPortal","TooltipPositioner","TooltipPopup","sortElement","sort_ascending_icon_default","sort_descending_icon_default","sort_default_icon_default","titleElement","Fragment","TableCell","TableCaption"],"mappings":"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","file":"chunk-T2PMDMOY.js","sourcesContent":["import * as React from \"react\"\r\nimport { InfoIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { SortAscendingIcon, SortDefaultIcon, SortDescendingIcon } from \"../icons\"\r\nimport {\r\n Tooltip,\r\n TooltipPopup,\r\n TooltipPortal,\r\n TooltipPositioner,\r\n TooltipTrigger,\r\n} from \"./tooltip\"\r\n\r\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\r\n return (\r\n <div\r\n className=\"relative w-full overflow-x-auto rounded-xl border border-border-primary bg-bg-primary\"\r\n data-slot=\"table-container\"\r\n >\r\n <table\r\n className={cn(\"w-full caption-bottom text-body-regular-2\", className)}\r\n data-slot=\"table\"\r\n {...props}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\r\n return (\r\n <thead\r\n className={cn(\r\n \"bg-bg-secondary [&_tr]:border-border-tertiary\",\r\n className\r\n )}\r\n data-slot=\"table-header\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\r\n return (\r\n <tbody\r\n className={cn(\"[&_tr:last-child]:border-0\", className)}\r\n data-slot=\"table-body\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\r\n return (\r\n <tfoot\r\n className={cn(\r\n \"border-t border-border-primary bg-bg-secondary font-medium [&>tr]:last:border-b-0\",\r\n className\r\n )}\r\n data-slot=\"table-footer\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\r\n return (\r\n <tr\r\n className={cn(\r\n \"border-b border-border-secondary transition-colors hover:bg-bg-secondary data-[state=selected]:bg-bg-brand-primary/40\",\r\n className\r\n )}\r\n data-slot=\"table-row\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ninterface TableHeadProps extends Omit<React.ComponentProps<\"th\">, \"align\"> {\r\n align?: \"start\" | \"end\" | \"center\"\r\n variant?: \"string\" | \"number\"\r\n tooltip?: React.ReactNode\r\n sortable?: boolean\r\n sortDirection?: \"asc\" | \"desc\" | false | null\r\n onSort?: () => void\r\n}\r\n\r\nfunction TableHead({\r\n className,\r\n align,\r\n variant = \"string\",\r\n tooltip,\r\n sortable,\r\n sortDirection,\r\n onSort,\r\n children,\r\n ...props\r\n}: TableHeadProps) {\r\n const effectiveAlign = align || (variant === \"number\" ? \"end\" : \"start\")\r\n const hasControls = Boolean(tooltip || sortable)\r\n const isEnd = effectiveAlign === \"end\"\r\n\r\n const tooltipElement = tooltip ? (\r\n <Tooltip>\r\n <TooltipTrigger\r\n render={\r\n <button\r\n type=\"button\"\r\n className=\"inline-flex items-center justify-center text-fg-quaternary hover:text-text-primary\"\r\n />\r\n }\r\n >\r\n <InfoIcon className=\"size-3.5\" />\r\n </TooltipTrigger>\r\n <TooltipPortal>\r\n <TooltipPositioner side=\"top\">\r\n <TooltipPopup>{tooltip}</TooltipPopup>\r\n </TooltipPositioner>\r\n </TooltipPortal>\r\n </Tooltip>\r\n ) : null\r\n\r\n const sortElement = sortable ? (\r\n <button\r\n type=\"button\"\r\n onClick={onSort}\r\n className=\"inline-flex items-center text-fg-quaternary hover:text-text-primary focus:outline-none\"\r\n aria-label=\"Sort column\"\r\n >\r\n {sortDirection === \"asc\" ? (\r\n <SortAscendingIcon size={12} />\r\n ) : sortDirection === \"desc\" ? (\r\n <SortDescendingIcon size={12} />\r\n ) : (\r\n <SortDefaultIcon size={12} />\r\n )}\r\n </button>\r\n ) : null\r\n\r\n const titleElement = (\r\n <span\r\n className={cn(\"truncate\", sortable && \"cursor-pointer select-none\")}\r\n onClick={sortable ? onSort : undefined}\r\n >\r\n {children}\r\n </span>\r\n )\r\n\r\n return (\r\n <th\r\n className={cn(\r\n \"text-label-bold-3 text-text-tertiary h-10 px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\r\n !hasControls && effectiveAlign === \"end\" && \"text-right\",\r\n !hasControls && effectiveAlign === \"start\" && \"text-left\",\r\n !hasControls && effectiveAlign === \"center\" && \"text-center\",\r\n className\r\n )}\r\n data-slot=\"table-head\"\r\n {...props}\r\n >\r\n {hasControls ? (\r\n <div className=\"flex w-full items-center justify-between gap-2\">\r\n {isEnd ? (\r\n <>\r\n <div className=\"flex items-center gap-1.5 shrink-0\">\r\n {tooltipElement}\r\n {sortElement}\r\n </div>\r\n <div className=\"flex items-center shrink-0 justify-end\">\r\n {titleElement}\r\n </div>\r\n </>\r\n ) : (\r\n <>\r\n {titleElement}\r\n <div className=\"flex items-center gap-1.5 shrink-0\">\r\n {tooltipElement}\r\n {sortElement}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n ) : (\r\n titleElement\r\n )}\r\n </th>\r\n )\r\n}\r\n\r\ninterface TableCellProps extends Omit<React.ComponentProps<\"td\">, \"align\"> {\r\n align?: \"start\" | \"end\" | \"center\"\r\n variant?: \"string\" | \"number\"\r\n}\r\n\r\nfunction TableCell({\r\n className,\r\n align,\r\n variant = \"string\",\r\n ...props\r\n}: TableCellProps) {\r\n const effectiveAlign = align || (variant === \"number\" ? \"end\" : \"start\")\r\n\r\n return (\r\n <td\r\n className={cn(\r\n \"text-text-primary px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\r\n effectiveAlign === \"end\" && \"text-right\",\r\n effectiveAlign === \"start\" && \"text-left\",\r\n effectiveAlign === \"center\" && \"text-center\",\r\n className\r\n )}\r\n data-slot=\"table-cell\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableCaption({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"caption\">) {\r\n return (\r\n <caption\r\n className={cn(\"text-text-secondary mt-4 text-body-regular-2\", className)}\r\n data-slot=\"table-caption\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Table,\r\n TableBody,\r\n TableCaption,\r\n TableCell,\r\n TableFooter,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n type TableCellProps,\r\n type TableHeadProps,\r\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/ui/table.tsx"],"names":["Table","className","props","jsx","cn","TableHeader","TableBody","TableFooter","TableRow","TableHead","align","variant","tooltip","sortable","sortDirection","onSort","children","effectiveAlign","hasControls","isEnd","tooltipElement","jsxs","Tooltip","TooltipTrigger","InfoIcon","TooltipPortal","TooltipPositioner","TooltipPopup","sortElement","sort_ascending_icon_default","sort_descending_icon_default","sort_default_icon_default","titleElement","Fragment","TableCell","TableCaption"],"mappings":"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","file":"chunk-RSLKHDFJ.js","sourcesContent":["import * as React from \"react\"\r\nimport { InfoIcon } from \"lucide-react\"\r\n\r\nimport { cn } from \"@xploreu/lib/cn\"\r\nimport { SortAscendingIcon, SortDefaultIcon, SortDescendingIcon } from \"../icons\"\r\nimport {\r\n Tooltip,\r\n TooltipPopup,\r\n TooltipPortal,\r\n TooltipPositioner,\r\n TooltipTrigger,\r\n} from \"./tooltip\"\r\n\r\nfunction Table({ className, ...props }: React.ComponentProps<\"table\">) {\r\n return (\r\n <div\r\n className=\"relative w-full overflow-x-auto rounded-xl border border-border-primary bg-bg-primary\"\r\n data-slot=\"table-container\"\r\n >\r\n <table\r\n className={cn(\"w-full caption-bottom text-body-regular-2\", className)}\r\n data-slot=\"table\"\r\n {...props}\r\n />\r\n </div>\r\n )\r\n}\r\n\r\nfunction TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\r\n return (\r\n <thead\r\n className={cn(\r\n \"bg-bg-secondary [&_tr]:border-border-tertiary\",\r\n className\r\n )}\r\n data-slot=\"table-header\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\r\n return (\r\n <tbody\r\n className={cn(\"[&_tr:last-child]:border-0\", className)}\r\n data-slot=\"table-body\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\r\n return (\r\n <tfoot\r\n className={cn(\r\n \"border-t border-border-primary bg-bg-secondary font-medium [&>tr]:last:border-b-0\",\r\n className\r\n )}\r\n data-slot=\"table-footer\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\r\n return (\r\n <tr\r\n className={cn(\r\n \"border-b border-border-secondary transition-colors hover:bg-bg-secondary data-[state=selected]:bg-bg-brand-primary/40\",\r\n className\r\n )}\r\n data-slot=\"table-row\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\ninterface TableHeadProps extends Omit<React.ComponentProps<\"th\">, \"align\"> {\r\n align?: \"start\" | \"end\" | \"center\"\r\n variant?: \"string\" | \"number\"\r\n tooltip?: React.ReactNode\r\n sortable?: boolean\r\n sortDirection?: \"asc\" | \"desc\" | false | null\r\n onSort?: () => void\r\n}\r\n\r\nfunction TableHead({\r\n className,\r\n align,\r\n variant = \"string\",\r\n tooltip,\r\n sortable,\r\n sortDirection,\r\n onSort,\r\n children,\r\n ...props\r\n}: TableHeadProps) {\r\n const effectiveAlign = align || (variant === \"number\" ? \"end\" : \"start\")\r\n const hasControls = Boolean(tooltip || sortable)\r\n const isEnd = effectiveAlign === \"end\"\r\n\r\n const tooltipElement = tooltip ? (\r\n <Tooltip>\r\n <TooltipTrigger\r\n render={\r\n <button\r\n type=\"button\"\r\n className=\"inline-flex items-center justify-center text-fg-quaternary hover:text-text-primary\"\r\n />\r\n }\r\n >\r\n <InfoIcon className=\"size-3.5\" />\r\n </TooltipTrigger>\r\n <TooltipPortal>\r\n <TooltipPositioner side=\"top\">\r\n <TooltipPopup>{tooltip}</TooltipPopup>\r\n </TooltipPositioner>\r\n </TooltipPortal>\r\n </Tooltip>\r\n ) : null\r\n\r\n const sortElement = sortable ? (\r\n <button\r\n type=\"button\"\r\n onClick={onSort}\r\n className=\"inline-flex items-center text-fg-quaternary hover:text-text-primary focus:outline-none\"\r\n aria-label=\"Sort column\"\r\n >\r\n {sortDirection === \"asc\" ? (\r\n <SortAscendingIcon size={12} />\r\n ) : sortDirection === \"desc\" ? (\r\n <SortDescendingIcon size={12} />\r\n ) : (\r\n <SortDefaultIcon size={12} />\r\n )}\r\n </button>\r\n ) : null\r\n\r\n const titleElement = (\r\n <span\r\n className={cn(\"truncate\", sortable && \"cursor-pointer select-none\")}\r\n onClick={sortable ? onSort : undefined}\r\n >\r\n {children}\r\n </span>\r\n )\r\n\r\n return (\r\n <th\r\n className={cn(\r\n \"text-label-bold-3 text-text-tertiary h-10 px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\r\n !hasControls && effectiveAlign === \"end\" && \"text-right\",\r\n !hasControls && effectiveAlign === \"start\" && \"text-left\",\r\n !hasControls && effectiveAlign === \"center\" && \"text-center\",\r\n className\r\n )}\r\n data-slot=\"table-head\"\r\n {...props}\r\n >\r\n {hasControls ? (\r\n <div className=\"flex w-full items-center justify-between gap-2\">\r\n {isEnd ? (\r\n <>\r\n <div className=\"flex items-center gap-1.5 shrink-0\">\r\n {tooltipElement}\r\n {sortElement}\r\n </div>\r\n <div className=\"flex items-center shrink-0 justify-end\">\r\n {titleElement}\r\n </div>\r\n </>\r\n ) : (\r\n <>\r\n {titleElement}\r\n <div className=\"flex items-center gap-1.5 shrink-0\">\r\n {tooltipElement}\r\n {sortElement}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n ) : (\r\n titleElement\r\n )}\r\n </th>\r\n )\r\n}\r\n\r\ninterface TableCellProps extends Omit<React.ComponentProps<\"td\">, \"align\"> {\r\n align?: \"start\" | \"end\" | \"center\"\r\n variant?: \"string\" | \"number\"\r\n}\r\n\r\nfunction TableCell({\r\n className,\r\n align,\r\n variant = \"string\",\r\n ...props\r\n}: TableCellProps) {\r\n const effectiveAlign = align || (variant === \"number\" ? \"end\" : \"start\")\r\n\r\n return (\r\n <td\r\n className={cn(\r\n \"text-text-primary px-4 py-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0\",\r\n effectiveAlign === \"end\" && \"text-right\",\r\n effectiveAlign === \"start\" && \"text-left\",\r\n effectiveAlign === \"center\" && \"text-center\",\r\n className\r\n )}\r\n data-slot=\"table-cell\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nfunction TableCaption({\r\n className,\r\n ...props\r\n}: React.ComponentProps<\"caption\">) {\r\n return (\r\n <caption\r\n className={cn(\"text-text-secondary mt-4 text-body-regular-2\", className)}\r\n data-slot=\"table-caption\"\r\n {...props}\r\n />\r\n )\r\n}\r\n\r\nexport {\r\n Table,\r\n TableBody,\r\n TableCaption,\r\n TableCell,\r\n TableFooter,\r\n TableHead,\r\n TableHeader,\r\n TableRow,\r\n type TableCellProps,\r\n type TableHeadProps,\r\n}"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a as a$1,b,m,e,q,s,w}from'./chunk-ZZWSZRER.js';import {a}from'./chunk-JH6RZ3QH.js';import*as t from'react';import*as C from'react-phone-number-input';import Y from'react-phone-number-input/flags';import {cn}from'@xploreu/lib/cn';import'@base-ui/react/combobox';import {ChevronsUpDownIcon}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';var R=({country:l,countryName:o})=>{let s=l?Y[l]:void 0;return jsx("span",{className:"flex h-4 w-6 shrink-0 overflow-hidden rounded-sm bg-fg-quaternary/20 [&_svg:not([class*='size-'])]:size-full",children:s&&jsx(s,{title:o})})},d=44,k=288,H=6;function D({disabled:l,value:o,options:s$1,onChange:i}){let[c,r]=t.useState(false),[b$1,g]=t.useState(""),[y,N]=t.useState(0),v=t.useRef(null),m$1=t.useMemo(()=>s$1.filter(e=>!!e.value),[s$1]),u=t.useMemo(()=>{let e=b$1.trim().toLowerCase();return e?m$1.filter(a=>{let f=C.getCountryCallingCode(a.value);return a.label.toLowerCase().includes(e)||a.value.toLowerCase().includes(e)||f.includes(e.replace(/^\+/,""))}):m$1},[b$1,m$1]),_=t.useMemo(()=>m$1.find(e=>e.value===o)??null,[m$1,o]);t.useEffect(()=>{N(0),v.current&&(v.current.scrollTop=0);},[b$1]);let z=Math.min(u.length*d,k),h=t.useMemo(()=>{let e=Math.floor(y/d),a=Math.max(0,e-H),f=Math.ceil(k/d),P=Math.min(u.length,e+f+H);return {startIndex:a,endIndex:P,items:u.slice(a,P)}},[u,y]),F=h.startIndex*d,U=Math.max(0,(u.length-h.endIndex)*d),q$1=t.useCallback(e=>{e?.value&&(i(e.value),g(""),r(false));},[i]);return jsxs(a$1,{behavior:"default",disabled:l,inputValue:b$1,items:u,open:c,value:_,virtualized:true,filter:null,isItemEqualToValue:(e,a)=>e.value===a.value,openOnInputClick:false,onValueChange:q$1,onInputValueChange:g,onOpenChange:e=>{r(e),e||g("");},children:[jsx(b,{render:jsxs("button",{type:"button",className:cn(a(),"h-11 w-18 shrink-0 justify-between gap-1 rounded-r-none border-r-0 px-3","hover:bg-bg-primary-hover focus-visible:z-10 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand","disabled:pointer-events-none disabled:opacity-50"),disabled:l,children:[jsxs("span",{className:"flex items-center gap-1.5 overflow-hidden",children:[jsx(R,{country:o,countryName:o}),o&&jsx("span",{className:"text-body-medium-3 text-text-primary",children:o})]}),jsx(ChevronsUpDownIcon,{className:"size-3.5 shrink-0 text-fg-quaternary"})]})}),jsxs(m,{className:"w-72",children:[jsx(e,{placeholder:"Search country...","aria-label":"Search country"}),jsx(q,{status:u.length===0?"empty":null}),jsx(s,{ref:v,className:"relative gap-0",style:{height:z},onScroll:e=>N(e.currentTarget.scrollTop),children:jsx("div",{className:"flex w-full shrink-0 flex-col",style:{paddingTop:F,paddingBottom:U},children:h.items.map((e,a)=>{let f=h.startIndex+a;return jsx(w,{index:f,value:e,children:jsxs("div",{className:"flex items-center gap-2 w-full min-w-0",children:[jsx(R,{country:e.value,countryName:e.label}),jsx("span",{className:"flex-1 text-sm truncate",children:e.label}),jsxs("span",{className:"text-sm text-text-tertiary shrink-0",children:["+",C.getCountryCallingCode(e.value)]})]})},e.value)})})})]})]})}var L=t.forwardRef(({className:l,onChange:o,...s},i)=>{let c=t.useCallback(r=>{r.currentTarget.value==="+"&&(r.currentTarget.value=""),o?.(r);},[o]);return jsx("input",{className:cn(a(),"h-11 flex-1 rounded-l-none text-body-regular-2",l),ref:i,type:"tel",onChange:c,...s})});L.displayName="InputComponent";var G=t.forwardRef(({className:l,onChange:o,value:s,...i},c)=>jsx(C.default,{ref:c,className:cn("flex w-full min-w-0 items-center",l),flagComponent:R,countrySelectComponent:D,inputComponent:L,smartCaret:false,value:s||void 0,onChange:r=>o?.(r||""),...i}));G.displayName="PhoneInput";export{G as a};//# sourceMappingURL=chunk-SFMNEY3D.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-SFMNEY3D.js.map
|