@solace-health/ui 0.10.540 → 0.10.542
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-45WK3XAH.js +2 -0
- package/dist/{chunk-N2GXHZUY.js.map → chunk-45WK3XAH.js.map} +1 -1
- package/dist/chunk-CZDRX7IX.cjs +2 -0
- package/dist/chunk-CZDRX7IX.cjs.map +1 -0
- package/dist/{chunk-LCPAJKAL.js → chunk-GUCWI5OR.js} +2 -2
- package/dist/{chunk-LCPAJKAL.js.map → chunk-GUCWI5OR.js.map} +1 -1
- package/dist/{chunk-QQLW7HXZ.cjs → chunk-HG3JDJUD.cjs} +2 -2
- package/dist/{chunk-QQLW7HXZ.cjs.map → chunk-HG3JDJUD.cjs.map} +1 -1
- package/dist/chunk-O7F2Q7UO.cjs +2 -0
- package/dist/{chunk-RQS7G3ER.cjs.map → chunk-O7F2Q7UO.cjs.map} +1 -1
- package/dist/chunk-OJLMWCZK.js +2 -0
- package/dist/chunk-OJLMWCZK.js.map +1 -0
- package/dist/{chunk-WEGGMVJT.js → chunk-QLO5JTEM.js} +2 -2
- package/dist/{chunk-WEGGMVJT.js.map → chunk-QLO5JTEM.js.map} +1 -1
- package/dist/{chunk-JTMWMZTR.cjs → chunk-WZVQDUUS.cjs} +2 -2
- package/dist/{chunk-JTMWMZTR.cjs.map → chunk-WZVQDUUS.cjs.map} +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/v2/badge/badge.cjs +1 -1
- package/dist/v2/badge/badge.js +1 -1
- package/dist/v2/index.cjs +1 -1
- package/dist/v2/index.d.ts +1 -0
- package/dist/v2/index.js +1 -1
- package/dist/v2/multiselect/multiselect.cjs +1 -1
- package/dist/v2/multiselect/multiselect.js +1 -1
- package/dist/v2/navigation-menu/navigation-menu.cjs +2 -0
- package/dist/v2/navigation-menu/navigation-menu.cjs.map +1 -0
- package/dist/v2/navigation-menu/navigation-menu.d.ts +23 -0
- package/dist/v2/navigation-menu/navigation-menu.js +2 -0
- package/dist/v2/navigation-menu/navigation-menu.js.map +1 -0
- package/dist/v2/navigation-menu/navigation-menu.stories.d.ts +6 -0
- package/dist/v2/time-select/time-select.cjs +1 -1
- package/dist/v2/time-select/time-select.js +1 -1
- package/package.json +2 -1
- package/dist/chunk-N2GXHZUY.js +0 -2
- package/dist/chunk-RQS7G3ER.cjs +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a,d,c,g,i}from'./chunk-YIOPQQWU.js';import {a as a$1}from'./chunk-YTIIAU4W.js';import {DateTime,Duration}from'luxon';import {useMemo}from'react';import {jsxs,jsx}from'react/jsx-runtime';var v="00:00",C="24:00",S=r=>DateTime.fromFormat(r,"HH:mm").isValid,D=({startTime:r=v,endTime:t=C,interval:d$1=30,onChange:T=void 0,className:b="",size:w="default",portal:M=true,...h})=>{S(r)||(console.error(`Invalid startTime: ${r}`),r=v),S(t)||(console.error(`Invalid endTime: ${t}`),t=C);let f=useMemo(()=>{let o=DateTime.fromFormat(t,"HH:mm"),a=Duration.fromObject({minutes:d$1}),n=[],e=DateTime.fromFormat(r,"HH:mm");for(;e<=o;){let i=e.toFormat("HH:mm");i==="00:00"&&e.equals(o)&&(i="24:00"),n.push({label:e.toFormat("h:mm a"),value:{hour:e.toFormat("HH"),min:e.toFormat("mm"),raw:i,formatted:e.toFormat("h:mm a")}}),e=e.plus(a);}return n},[r,t,d$1]),F=f.map(o=>({label:o.label,value:o.value.raw}));return jsxs(a,{onValueChange:o=>{let a=f.find(n=>n.value.raw===o);a&&T?.(a);},...h,children:[jsx(d,{className:a$1("max-w-[240px] md:w-[150px]",b),size:w,children:jsx(c,{placeholder:"Select one"})}),jsx(g,{position:"popper",className:"max-h-90",portal:M,children:F.map(o=>jsx(i,{className:"h-10",value:o.value,children:o.label},o.value))})]})},kr=D;export{D as a,kr as b};//# sourceMappingURL=chunk-45WK3XAH.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-45WK3XAH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/v2/time-select/time-select.tsx"],"names":["START_TIME_DEFAULT","END_TIME_DEFAULT","isValidTime","time","DateTime","TimeSelect","startTime","endTime","interval","onChange","className","size","portal","inputProps","intervals","useMemo","dtEnd","durationInterval","Duration","res","i","raw","options","jsxs","Select","e","jsx","SelectTrigger","cn","SelectValue","SelectContent","option","SelectItem","time_select_default"],"mappings":"kMA0BA,IAAMA,CAAqB,CAAA,OAAA,CACrBC,CAAmB,CAAA,OAAA,CAEnBC,CAAeC,CAAAA,CAAAA,EACRC,QAAS,CAAA,UAAA,CAAWD,CAAM,CAAA,OAAO,CAClC,CAAA,OAAA,CAGCE,CAAa,CAAA,CAAC,CACzB,SAAA,CAAAC,CAAYN,CAAAA,CAAAA,CACZ,OAAAO,CAAAA,CAAAA,CAAUN,CACV,CAAA,QAAA,CAAAO,
|
|
1
|
+
{"version":3,"sources":["../src/v2/time-select/time-select.tsx"],"names":["START_TIME_DEFAULT","END_TIME_DEFAULT","isValidTime","time","DateTime","TimeSelect","startTime","endTime","interval","onChange","className","size","portal","inputProps","intervals","useMemo","dtEnd","durationInterval","Duration","res","i","raw","options","jsxs","Select","e","jsx","SelectTrigger","cn","SelectValue","SelectContent","option","SelectItem","time_select_default"],"mappings":"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","file":"chunk-45WK3XAH.js","sourcesContent":["import { DateTime, Duration } from 'luxon';\nimport { useMemo } from 'react';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/v2';\nimport { cn } from '@/lib/utils';\n\nexport type Interval = {\n label: string;\n value: {\n hour: string;\n min: string;\n raw: string;\n formatted: string;\n };\n};\n\ntype Props = {\n startTime?: string;\n endTime?: string;\n interval?: number;\n onChange?: (e: Interval) => void;\n className?: string;\n size?: 'default' | 'sm';\n portal?: boolean;\n [inputProps: string]: unknown;\n};\n\nconst START_TIME_DEFAULT = '00:00';\nconst END_TIME_DEFAULT = '24:00';\n\nconst isValidTime = (time: string) => {\n const dt = DateTime.fromFormat(time, 'HH:mm');\n return dt.isValid;\n};\n\nexport const TimeSelect = ({\n startTime = START_TIME_DEFAULT,\n endTime = END_TIME_DEFAULT,\n interval = 30,\n onChange = undefined,\n className = '',\n size = 'default',\n portal = true,\n ...inputProps\n}: Props) => {\n if (!isValidTime(startTime)) {\n console.error(`Invalid startTime: ${startTime}`);\n // eslint-disable-next-line no-param-reassign\n startTime = START_TIME_DEFAULT;\n }\n if (!isValidTime(endTime)) {\n console.error(`Invalid endTime: ${endTime}`);\n // eslint-disable-next-line no-param-reassign\n endTime = END_TIME_DEFAULT;\n }\n\n const intervals = useMemo((): Interval[] => {\n const dtEnd = DateTime.fromFormat(endTime, 'HH:mm');\n const durationInterval = Duration.fromObject({ minutes: interval });\n const res = [];\n let i = DateTime.fromFormat(startTime, 'HH:mm');\n while (i <= dtEnd) {\n let raw = i.toFormat('HH:mm');\n // Avoid duplicate keys for \"00:00\" and \"00:00\" (end of day)\n if (raw === '00:00' && i.equals(dtEnd)) raw = '24:00';\n\n res.push({\n label: i.toFormat('h:mm a'),\n value: {\n hour: i.toFormat('HH'),\n min: i.toFormat('mm'),\n raw,\n formatted: i.toFormat('h:mm a'),\n },\n });\n i = i.plus(durationInterval);\n }\n\n return res;\n }, [startTime, endTime, interval]);\n\n const options = intervals.map((time) => ({\n label: time.label,\n value: time.value.raw,\n }));\n\n const handleOnSelect = (e: unknown) => {\n const interval = intervals.find((time) => time.value.raw === e);\n\n if (!interval) return;\n\n onChange?.(interval);\n };\n\n return (\n <Select onValueChange={handleOnSelect} {...inputProps}>\n <SelectTrigger className={cn('max-w-[240px] md:w-[150px]', className)} size={size}>\n <SelectValue placeholder=\"Select one\" />\n </SelectTrigger>\n <SelectContent position=\"popper\" className=\"max-h-90\" portal={portal}>\n {options.map((option) => (\n // Note that labels and values here may appear to be duplicates\n // For example, \"00:00\" and \"24:00\" will both have the same value \"00:00\"\n <SelectItem className=\"h-10\" key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n};\n\nexport default TimeSelect;\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),n=require('react'),t=require('@radix-ui/react-navigation-menu'),classVarianceAuthority=require('class-variance-authority'),lu=require('react-icons/lu'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var n__namespace=/*#__PURE__*/_interopNamespace(n);var t__namespace=/*#__PURE__*/_interopNamespace(t);var p=classVarianceAuthority.cva("group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-base font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1",{variants:{variant:{default:"",appNavigation:chunkQRO22BPZ_cjs.a("bg-transparent hover:bg-green-800 focus:bg-green-800 data-[state=open]:bg-green-800/50 data-[state=open]:hover:bg-green-800 data-[state=open]:focus:bg-green-800","text-lg text-white hover:text-white focus:text-white data-[state=open]:text-white")}}}),g=n__namespace.createContext({variant:"default"});function c({className:e,...a}){return jsxRuntime.jsx("div",{className:chunkQRO22BPZ_cjs.a("absolute top-full left-0 isolate z-50 flex justify-center"),children:jsxRuntime.jsx(t__namespace.Viewport,{"data-slot":"navigation-menu-viewport",className:chunkQRO22BPZ_cjs.a("origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]",e),...a})})}function x({className:e,children:a,viewport:r=false,variant:s="default",...u}){let d=n__namespace.useMemo(()=>({variant:s}),[s]);return jsxRuntime.jsx(g.Provider,{value:d,children:jsxRuntime.jsxs(t__namespace.Root,{"data-slot":"navigation-menu","data-viewport":r,className:chunkQRO22BPZ_cjs.a("group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",e),...u,children:[a,r&&jsxRuntime.jsx(c,{})]})})}function h({className:e,...a}){return jsxRuntime.jsx(t__namespace.List,{"data-slot":"navigation-menu-list",className:chunkQRO22BPZ_cjs.a("group flex flex-1 list-none items-center justify-center gap-1",e),...a})}function M({className:e,...a}){return jsxRuntime.jsx(t__namespace.Item,{"data-slot":"navigation-menu-item",className:chunkQRO22BPZ_cjs.a("relative",e),...a})}function P({className:e,children:a,highlighted:r=false,...s}){let{variant:u}=n__namespace.useContext(g);return jsxRuntime.jsxs(t__namespace.Trigger,{"data-slot":"navigation-menu-trigger",className:chunkQRO22BPZ_cjs.a(p({variant:u}),"group",e,u==="appNavigation"&&r&&"bg-white/20 font-semibold"),...s,children:[a," ",jsxRuntime.jsx(lu.LuChevronDown,{className:"relative top-[1px] ml-1 size-4 transition duration-300 group-data-[state=open]:rotate-180","aria-hidden":"true"})]})}function y({className:e,...a}){return jsxRuntime.jsx(t__namespace.Content,{"data-slot":"navigation-menu-content",className:chunkQRO22BPZ_cjs.a("data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full min-w-56 p-3 md:absolute md:w-auto","group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none","flex flex-col gap-2",e),...a})}function C({className:e,highlighted:a=false,selected:r=false,...s}){let{variant:u}=n__namespace.useContext(g);return jsxRuntime.jsx(t__namespace.Link,{"data-slot":"navigation-menu-link",className:chunkQRO22BPZ_cjs.a("data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-dark-green flex items-center gap-3 rounded-sm p-2 text-base transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-5",e,u==="appNavigation"&&a&&"bg-white/20",r&&"bg-gray-400/20 font-semibold"),...s})}function R({className:e,...a}){return jsxRuntime.jsx(t__namespace.Indicator,{"data-slot":"navigation-menu-indicator",className:chunkQRO22BPZ_cjs.a("data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden",e),...a,children:jsxRuntime.jsx("div",{className:"bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md"})})}exports.a=p;exports.b=c;exports.c=x;exports.d=h;exports.e=M;exports.f=P;exports.g=y;exports.h=C;exports.i=R;//# sourceMappingURL=chunk-CZDRX7IX.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-CZDRX7IX.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/v2/navigation-menu/navigation-menu.tsx"],"names":["navigationMenuTriggerStyle","cva","cn","NavigationMenuContext","n","NavigationMenuViewport","className","props","jsx","t","NavigationMenu","children","viewport","variant","contextValue","jsxs","NavigationMenuList","NavigationMenuItem","NavigationMenuTrigger","highlighted","LuChevronDown","NavigationMenuContent","NavigationMenuLink","selected","NavigationMenuIndicator"],"mappings":"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","file":"chunk-CZDRX7IX.cjs","sourcesContent":["import * as React from 'react';\nimport * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport { LuChevronDown } from 'react-icons/lu';\nimport { cn } from '@/lib/utils';\n\nconst navigationMenuTriggerStyle = cva(\n 'group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-base font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1',\n {\n variants: {\n variant: {\n default: '',\n appNavigation: cn(\n // background\n 'bg-transparent hover:bg-green-800 focus:bg-green-800 data-[state=open]:bg-green-800/50 data-[state=open]:hover:bg-green-800 data-[state=open]:focus:bg-green-800',\n\n // text\n 'text-lg text-white hover:text-white focus:text-white data-[state=open]:text-white',\n ),\n },\n },\n },\n);\n\nconst NavigationMenuContext = React.createContext<VariantProps<typeof navigationMenuTriggerStyle>>({\n variant: 'default',\n});\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div className={cn('absolute top-full left-0 isolate z-50 flex justify-center')}>\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn(\n 'origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\ntype NavigationMenuProps = React.ComponentProps<typeof NavigationMenuPrimitive.Root> &\n VariantProps<typeof navigationMenuTriggerStyle> & {\n viewport?: boolean;\n };\n\nfunction NavigationMenu({\n className,\n children,\n viewport = false,\n variant = 'default',\n ...props\n}: NavigationMenuProps) {\n const contextValue = React.useMemo(() => ({ variant }), [variant]);\n return (\n <NavigationMenuContext.Provider value={contextValue}>\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n data-viewport={viewport}\n className={cn(\n 'group/navigation-menu relative flex max-w-max flex-1 items-center justify-center',\n className,\n )}\n {...props}\n >\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n </NavigationMenuContext.Provider>\n );\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return (\n <NavigationMenuPrimitive.List\n data-slot=\"navigation-menu-list\"\n className={cn('group flex flex-1 list-none items-center justify-center gap-1', className)}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return (\n <NavigationMenuPrimitive.Item\n data-slot=\"navigation-menu-item\"\n className={cn('relative', className)}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuTrigger({\n className,\n children,\n highlighted = false,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger> & { highlighted?: boolean }) {\n const { variant } = React.useContext(NavigationMenuContext);\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(\n navigationMenuTriggerStyle({ variant }),\n 'group',\n className,\n variant === 'appNavigation' && highlighted && 'bg-white/20 font-semibold',\n )}\n {...props}\n >\n {children}{' '}\n <LuChevronDown\n className=\"relative top-[1px] ml-1 size-4 transition duration-300 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n 'data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full min-w-56 p-3 md:absolute md:w-auto',\n 'group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none',\n 'flex flex-col gap-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuLink({\n className,\n highlighted = false,\n selected = false,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Link> & {\n highlighted?: boolean;\n selected?: boolean;\n}) {\n const { variant } = React.useContext(NavigationMenuContext);\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-dark-green flex items-center gap-3 rounded-sm p-2 text-base transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-5\",\n className,\n variant === 'appNavigation' && highlighted && 'bg-white/20',\n selected && 'bg-gray-400/20 font-semibold',\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n 'data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden',\n className,\n )}\n {...props}\n >\n <div className=\"bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md\" />\n </NavigationMenuPrimitive.Indicator>\n );\n}\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuTriggerStyle,\n};\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {h,a as a$1,d,f}from'./chunk-5WNZSPRY.js';import {b}from'./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {h,a as a$1,d,f}from'./chunk-5WNZSPRY.js';import {b}from'./chunk-QLO5JTEM.js';import {a}from'./chunk-YTIIAU4W.js';import {useCommandState,Command}from'cmdk';import {LuX,LuChevronUp,LuChevronDown,LuCheck}from'react-icons/lu';import {forwardRef,useRef,useState,useImperativeHandle,useCallback,useEffect}from'react';import {jsx,jsxs,Fragment}from'react/jsx-runtime';function he(r,i){let[l,f]=useState(r);return useEffect(()=>{let s=setTimeout(()=>f(r),i||500);return ()=>{clearTimeout(s);}},[r,i]),l}function D(r,i){if(r.length===0)return {};if(!i)return {"":r};let l={};return r.forEach(f=>{let s=f[i]||"";l[s]||(l[s]=[]),l[s].push(f);}),l}var Q=forwardRef(({className:r,...i},l)=>useCommandState(s=>s.filtered.count===0)?jsx("div",{ref:l,className:a("py-6 text-center text-sm",r),role:"presentation",...i}):null);Q.displayName="CommandEmpty";var we=forwardRef(({value:r,onChange:i,placeholder:l,defaultOptions:f$1=[],options:s,delay:Z,onSearch:b$1,onSearchSync:K,loadingIndicator:_,emptyIndicator:k,maxSelected:S=0,onMaxSelected:j,hidePlaceholderWhenSelected:F=true,disabled:g,groupBy:v,className:$,badgeWrapperClassName:ee,badgeClassName:te,getBadgeClassName:ne=()=>"",selectFirstItem:oe=true,triggerSearchOnFocus:M=false,commandProps:m,inputProps:O},re)=>{let d$1=useRef(null),[c,I]=useState(false),[ae,P]=useState(false),[se,W]=useState(false),V=useRef(null),[n,H]=useState(r||[]),[E,G]=useState(D(f$1,v)),[z,U]=useState(""),x=he(z,Z||500),ie=c?LuChevronUp:LuChevronDown;useImperativeHandle(re,()=>({selectedValue:[...n],input:d$1.current,focus:()=>d$1?.current?.focus(),reset:()=>H([])}),[n]);let C=e=>{V.current&&!V.current.contains(e.target)&&d$1.current&&!d$1.current.contains(e.target)&&(I(false),d$1.current.blur());},L=useCallback(e=>{let o=n.some(p=>p.value===e.value),t=!o&&!!S&&n.length>=S;U("");let h=o?n.filter(p=>p.value!==e.value):[...n,e];t&&(h=h.slice(1)),H(h),i?.(h),t&&j?.(n.length);},[S,i,j,n]),le=useCallback(e=>{let o=d$1.current;if(o){if((e.key==="Delete"||e.key==="Backspace")&&o.value===""&&n.length>0){let t=n[n.length-1];t&&!t.fixed&&L(t);}e.key==="Escape"&&o.blur();}},[L,n]);useEffect(()=>(c?(document.addEventListener("mousedown",C),document.addEventListener("touchend",C)):(document.removeEventListener("mousedown",C),document.removeEventListener("touchend",C)),()=>{document.removeEventListener("mousedown",C),document.removeEventListener("touchend",C);}),[c]),useEffect(()=>{r&&H(r);},[r]),useEffect(()=>{if(!s||b$1)return;let e=D(s||[],v);Object.entries(e).length!==Object.entries(E).length&&G(e);},[f$1,s,v,b$1,E]),useEffect(()=>{let e=()=>{let t=K?.(x);G(D(t||[],v));};(async()=>{!K||!c||(M&&e(),x&&e());})();},[x,v,c,M]),useEffect(()=>{let e=async()=>{W(true);let t=await b$1?.(x);G(D(t||[],v)),W(false);};(async()=>{!b$1||!c||(M&&await e(),x&&await e());})();},[x,v,c,M]);let ue=useCallback(()=>{if(k)return b$1&&Object.keys(E).length===0?jsx(h,{value:"-",disabled:true,children:k}):jsx(Q,{children:k})},[k,b$1,E]),de=useCallback(()=>{if(m?.filter)return m.filter},[m?.filter]);return jsxs(a$1,{ref:V,...m,onKeyDown:e=>{le(e),m?.onKeyDown?.(e);},className:a("h-auto overflow-visible bg-transparent",m?.className),shouldFilter:m?.shouldFilter!==void 0?m.shouldFilter:!b$1,filter:de(),children:[jsxs("button",{type:"button",className:a("items-center justify-between gap-2 p-3 whitespace-nowrap","border-input rounded-md border bg-white",c&&"border-dark-green","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40","disabled:cursor-not-allowed disabled:bg-gray-200","hover:not-disabled:border-dark-green","transition-all outline-none",{"cursor-text":!g&&n.length!==0},"flex w-full",$),onClick:()=>{g||d$1?.current?.focus();},disabled:g,children:[jsxs("div",{className:a("relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0",ee),children:[n.map(e=>jsxs(b,{className:a("data-[disabled]:text-secondary data-[disabled]:bg-transparent","data-[fixed]:bg-muted-foreground data-[fixed]:text-muted data-[fixed]:hover:bg-muted-foreground",te,ne(e),"py-0"),color:"green",rounded:true,"data-fixed":e.fixed,"data-disabled":g||void 0,children:[e?.selectedLabel??e.label,jsx("button",{type:"button",className:a("ring-offset-background focus:ring-ring ml-1 rounded-full outline-none focus:ring-2 focus:ring-offset-2",(g||e.fixed)&&"hidden"),onKeyDown:o=>{o.key==="Enter"&&L(e);},onMouseDown:o=>{o.preventDefault(),o.stopPropagation();},onClick:()=>L(e),children:jsx(LuX,{className:"text-muted-foreground hover:text-foreground h-3 w-3"})})]},e.value)),jsx(Command.Input,{...O,ref:d$1,value:z,disabled:g,onValueChange:e=>{U(e),O?.onValueChange?.(e);},onBlur:e=>{ae||I(false),O?.onBlur?.(e);},onFocus:e=>{I(true),O?.onFocus?.(e);},placeholder:F&&n.length!==0?"":l,className:a("placeholder:text-secondary flex-1 self-baseline bg-transparent outline-none",{"w-full":F,"ml-1":n.length!==0},O?.className)})]}),jsx(ie,{className:a("size-5 min-w-5 cursor-pointer",g&&"text-gray-600")})]}),jsx("div",{className:"relative",children:c&&jsx(d,{className:"bg-popover text-popover-foreground animate-in absolute top-1 z-10 w-full rounded-md border shadow-xs outline-none",onMouseLeave:()=>{P(false);},onMouseEnter:()=>{P(true);},onMouseUp:()=>{d$1?.current?.focus();},children:se?_:jsxs(Fragment,{children:[ue(),!oe&&jsx(h,{value:"-",className:"hidden"}),Object.entries(E).map(([e,o])=>jsx(f,{heading:e,className:"h-full overflow-auto",children:jsx("div",{className:"flex flex-col gap-1",children:o.map(t=>{let h$1=n.some(p=>p.value===t.value);return jsxs(h,{value:t.value,keywords:typeof t.label=="string"?[t.label]:void 0,disabled:t.disable,onMouseDown:p=>{p.preventDefault(),p.stopPropagation();},onSelect:()=>L(t),className:a("flex cursor-pointer items-center justify-between p-3 hover:bg-green-100 data-[selected=true]:bg-green-100",t.disable&&"text-muted-foreground cursor-default",h$1&&"bg-green-100"),children:[t.label,h$1&&jsx(LuCheck,{className:"h-4 w-4 text-green-800"})]},t.value)})})},e))]})})})]})});we.displayName="MultiSelect";export{he as a,we as b};//# sourceMappingURL=chunk-GUCWI5OR.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-GUCWI5OR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/v2/multiselect/multiselect.tsx"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","timer","transToGroupOption","options","groupBy","groupOption","option","key","CommandEmpty","forwardRef","className","props","forwardedRef","useCommandState","state","jsx","cn","MultiSelect","onChange","placeholder","arrayDefaultOptions","arrayOptions","onSearch","onSearchSync","loadingIndicator","emptyIndicator","maxSelected","onMaxSelected","hidePlaceholderWhenSelected","disabled","badgeWrapperClassName","badgeClassName","getBadgeClassName","selectFirstItem","triggerSearchOnFocus","commandProps","inputProps","ref","inputRef","useRef","open","setOpen","onScrollbar","setOnScrollbar","isLoading","setIsLoading","dropdownRef","selected","setSelected","setOptions","inputValue","setInputValue","debouncedSearchTerm","ChevronIcon","LuChevronUp","LuChevronDown","useImperativeHandle","handleClickOutside","event","toggleOption","useCallback","optionSelected","s","hitMaximum","newOptions","handleKeyDown","input","lastSelectOption","doSearchSync","res","doSearch","EmptyItem","CommandItem","commandFilter","jsxs","Command","Badge","e","LuX","CommandPrimitive","CommandList","Fragment","dropdowns","CommandGroup","LuCheck"],"mappings":"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","file":"chunk-LCPAJKAL.js","sourcesContent":["import { Command as CommandPrimitive, useCommandState } from 'cmdk';\nimport { LuCheck, LuChevronDown, LuChevronUp, LuX } from 'react-icons/lu';\nimport {\n ComponentProps,\n ComponentPropsWithoutRef,\n forwardRef,\n KeyboardEvent,\n ReactNode,\n Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\n\nimport { Badge } from '@/v2/badge/badge';\nimport { Command, CommandGroup, CommandItem, CommandList } from '@/v2/command/command';\nimport { cn } from '@/lib/utils';\n\nexport type Option = {\n value: string;\n label: string | ReactNode;\n selectedLabel?: string | ReactNode;\n disable?: boolean;\n /** fixed option that can't be removed. */\n fixed?: boolean;\n /** Group the options by providing key. */\n [key: string]: string | boolean | ReactNode | undefined;\n};\n\ninterface GroupOption {\n [key: string]: Option[];\n}\n\ninterface MultiSelectProps {\n value?: Option[];\n defaultOptions?: Option[];\n /** manually controlled options */\n options?: Option[];\n placeholder?: string;\n /** Loading component. */\n loadingIndicator?: ReactNode;\n /** Empty component. */\n emptyIndicator?: ReactNode;\n /** Debounce time for async search. Only work with `onSearch`. */\n delay?: number;\n /**\n * Only work with `onSearch` prop. Trigger search when `onFocus`.\n * For example, when user click on the input, it will trigger the search to get initial options.\n * */\n triggerSearchOnFocus?: boolean;\n /** async search */\n onSearch?: (value: string) => Promise<Option[]>;\n /**\n * sync search. This search will not show loadingIndicator.\n * The rest props are the same as async search.\n * i.e.: groupBy, delay.\n * */\n onSearchSync?: (value: string) => Option[];\n onChange?: (options: Option[]) => void;\n /** Limit the maximum number of selected options. */\n maxSelected?: number;\n /** When the number of selected options exceeds the limit, the onMaxSelected will be called. */\n onMaxSelected?: (maxLimit: number) => void;\n /** Hide the placeholder when there are options selected. */\n hidePlaceholderWhenSelected?: boolean;\n disabled?: boolean;\n /** Group the options base on provided key. */\n groupBy?: string;\n className?: string;\n badgeWrapperClassName?: string;\n badgeClassName?: string;\n getBadgeClassName?: (option: Option) => string;\n /**\n *\n * @reference: https://github.com/pacocoursey/cmdk/issues/171\n */\n selectFirstItem?: boolean;\n /** Props of `Command` */\n commandProps?: ComponentPropsWithoutRef<typeof Command>;\n /** Props of `CommandInput` */\n inputProps?: Omit<\n ComponentPropsWithoutRef<typeof CommandPrimitive.Input>,\n 'value' | 'placeholder' | 'disabled'\n >;\n}\n\nexport interface MultiSelectRef {\n selectedValue: Option[];\n input: HTMLInputElement;\n focus: () => void;\n reset: () => void;\n}\n\nexport function useDebounce<T>(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nfunction transToGroupOption(options: Option[], groupBy?: string) {\n if (options.length === 0) {\n return {};\n }\n if (!groupBy) {\n return {\n '': options,\n };\n }\n\n const groupOption: GroupOption = {};\n options.forEach((option) => {\n const key = (option[groupBy] as string) || '';\n if (!groupOption[key]) {\n groupOption[key] = [];\n }\n groupOption[key].push(option);\n });\n return groupOption;\n}\n\n/**\n * The `CommandEmpty` of shadcn/ui will cause the cmdk empty not rendering correctly.\n * So we create one and copy the `Empty` implementation from `cmdk`.\n *\n * @reference: https://github.com/hsuanyi-chou/shadcn-ui-expansions/issues/34#issuecomment-1949561607\n * */\nconst CommandEmpty = forwardRef<HTMLDivElement, ComponentProps<typeof CommandPrimitive.Empty>>(\n ({ className, ...props }, forwardedRef) => {\n const render = useCommandState((state) => state.filtered.count === 0);\n\n if (!render) return null;\n\n return (\n <div\n ref={forwardedRef}\n className={cn('py-6 text-center text-sm', className)}\n role=\"presentation\"\n {...props}\n />\n );\n },\n);\n\nCommandEmpty.displayName = 'CommandEmpty';\n\nexport const MultiSelect = forwardRef<MultiSelectRef, MultiSelectProps>(\n (\n {\n value,\n onChange,\n placeholder,\n defaultOptions: arrayDefaultOptions = [],\n options: arrayOptions,\n delay,\n onSearch,\n onSearchSync,\n loadingIndicator,\n emptyIndicator,\n maxSelected = 0,\n onMaxSelected,\n hidePlaceholderWhenSelected = true,\n disabled,\n groupBy,\n className,\n badgeWrapperClassName,\n badgeClassName,\n getBadgeClassName = () => '',\n selectFirstItem = true,\n triggerSearchOnFocus = false,\n commandProps,\n inputProps,\n }: MultiSelectProps,\n ref: Ref<MultiSelectRef>,\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [onScrollbar, setOnScrollbar] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const [selected, setSelected] = useState<Option[]>(value || []);\n const [options, setOptions] = useState<GroupOption>(\n transToGroupOption(arrayDefaultOptions, groupBy),\n );\n const [inputValue, setInputValue] = useState('');\n const debouncedSearchTerm = useDebounce(inputValue, delay || 500);\n\n const ChevronIcon = open ? LuChevronUp : LuChevronDown;\n\n useImperativeHandle(\n ref,\n () => ({\n selectedValue: [...selected],\n input: inputRef.current as HTMLInputElement,\n focus: () => inputRef?.current?.focus(),\n reset: () => setSelected([]),\n }),\n [selected],\n );\n\n const handleClickOutside = (event: MouseEvent | TouchEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n inputRef.current.blur();\n }\n };\n\n const toggleOption = useCallback(\n (option: Option) => {\n const optionSelected = selected.some((s) => s.value === option.value);\n const hitMaximum = !optionSelected && !!maxSelected && selected.length >= maxSelected;\n\n setInputValue('');\n\n let newOptions = optionSelected\n ? selected.filter((s) => s.value !== option.value)\n : [...selected, option];\n\n if (hitMaximum) newOptions = newOptions.slice(1); // Remove the first item if hit maximum\n\n setSelected(newOptions);\n onChange?.(newOptions);\n if (hitMaximum) onMaxSelected?.(selected.length);\n },\n [maxSelected, onChange, onMaxSelected, selected],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n const input = inputRef.current;\n if (input) {\n if (e.key === 'Delete' || e.key === 'Backspace') {\n if (input.value === '' && selected.length > 0) {\n const lastSelectOption = selected[selected.length - 1];\n // If there is a last item and it is not fixed, we can remove it.\n if (lastSelectOption && !lastSelectOption.fixed) {\n toggleOption(lastSelectOption);\n }\n }\n }\n // This is not a default behavior of the <input /> field\n if (e.key === 'Escape') {\n input.blur();\n }\n }\n },\n [toggleOption, selected],\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('touchend', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('touchend', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('touchend', handleClickOutside);\n };\n }, [open]);\n\n useEffect(() => {\n if (value) {\n setSelected(value);\n }\n }, [value]);\n\n useEffect(() => {\n /** If `onSearch` is provided, do not trigger options updated. */\n if (!arrayOptions || onSearch) {\n return;\n }\n const newOptions = transToGroupOption(arrayOptions || [], groupBy);\n\n if (Object.entries(newOptions).length !== Object.entries(options).length) {\n setOptions(newOptions);\n }\n }, [arrayDefaultOptions, arrayOptions, groupBy, onSearch, options]);\n\n useEffect(() => {\n /** sync search */\n\n const doSearchSync = () => {\n const res = onSearchSync?.(debouncedSearchTerm);\n setOptions(transToGroupOption(res || [], groupBy));\n };\n\n const exec = async () => {\n if (!onSearchSync || !open) return;\n\n if (triggerSearchOnFocus) {\n doSearchSync();\n }\n\n if (debouncedSearchTerm) {\n doSearchSync();\n }\n };\n\n exec();\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus]);\n\n useEffect(() => {\n /** async search */\n\n const doSearch = async () => {\n setIsLoading(true);\n const res = await onSearch?.(debouncedSearchTerm);\n setOptions(transToGroupOption(res || [], groupBy));\n setIsLoading(false);\n };\n\n const exec = async () => {\n if (!onSearch || !open) return;\n\n if (triggerSearchOnFocus) {\n await doSearch();\n }\n\n if (debouncedSearchTerm) {\n await doSearch();\n }\n };\n\n exec();\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus]);\n\n const EmptyItem = useCallback(() => {\n if (!emptyIndicator) return undefined;\n\n // For async search that showing emptyIndicator\n if (onSearch && Object.keys(options).length === 0) {\n return (\n <CommandItem value=\"-\" disabled>\n {emptyIndicator}\n </CommandItem>\n );\n }\n\n return <CommandEmpty>{emptyIndicator}</CommandEmpty>;\n }, [emptyIndicator, onSearch, options]);\n\n const commandFilter = useCallback(() => {\n if (commandProps?.filter) {\n return commandProps.filter;\n }\n\n // Using default filter in `cmdk`. We don't have to provide it.\n return undefined;\n }, [commandProps?.filter]);\n\n return (\n <Command\n ref={dropdownRef}\n {...commandProps}\n onKeyDown={(e) => {\n handleKeyDown(e);\n commandProps?.onKeyDown?.(e);\n }}\n className={cn('h-auto overflow-visible bg-transparent', commandProps?.className)}\n shouldFilter={\n commandProps?.shouldFilter !== undefined ? commandProps.shouldFilter : !onSearch\n } // When onSearch is provided, we don't want to filter the options. You can still override it.\n filter={commandFilter()}\n >\n <button\n type=\"button\"\n className={cn(\n 'items-center justify-between gap-2 p-3 whitespace-nowrap',\n\n // Border & ring\n 'border-input rounded-md border bg-white',\n open && 'border-dark-green', // conditional green border when open\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n\n // States\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',\n 'disabled:cursor-not-allowed disabled:bg-gray-200',\n 'hover:not-disabled:border-dark-green',\n\n // Shadow & transitions\n 'transition-all outline-none',\n {\n 'cursor-text': !disabled && selected.length !== 0,\n },\n 'flex w-full',\n className,\n )}\n onClick={() => {\n if (disabled) return;\n inputRef?.current?.focus();\n }}\n disabled={disabled}\n >\n <div\n className={cn(\n 'relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0',\n badgeWrapperClassName,\n )}\n >\n {selected.map((option) => {\n return (\n <Badge\n key={option.value}\n className={cn(\n 'data-[disabled]:text-secondary data-[disabled]:bg-transparent',\n 'data-[fixed]:bg-muted-foreground data-[fixed]:text-muted data-[fixed]:hover:bg-muted-foreground',\n badgeClassName,\n getBadgeClassName(option),\n 'py-0',\n )}\n color=\"green\"\n rounded\n data-fixed={option.fixed}\n data-disabled={disabled || undefined}\n >\n {option?.selectedLabel ?? option.label}\n <button\n type=\"button\"\n className={cn(\n 'ring-offset-background focus:ring-ring ml-1 rounded-full outline-none focus:ring-2 focus:ring-offset-2',\n (disabled || option.fixed) && 'hidden',\n )}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n toggleOption(option);\n }\n }}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onClick={() => toggleOption(option)}\n >\n <LuX className=\"text-muted-foreground hover:text-foreground h-3 w-3\" />\n </button>\n </Badge>\n );\n })}\n <CommandPrimitive.Input\n {...inputProps}\n ref={inputRef}\n value={inputValue}\n disabled={disabled}\n onValueChange={(value) => {\n setInputValue(value);\n inputProps?.onValueChange?.(value);\n }}\n onBlur={(event) => {\n if (!onScrollbar) {\n setOpen(false);\n }\n inputProps?.onBlur?.(event);\n }}\n onFocus={(event) => {\n setOpen(true);\n inputProps?.onFocus?.(event);\n }}\n placeholder={hidePlaceholderWhenSelected && selected.length !== 0 ? '' : placeholder}\n className={cn(\n 'placeholder:text-secondary flex-1 self-baseline bg-transparent outline-none',\n {\n 'w-full': hidePlaceholderWhenSelected,\n 'ml-1': selected.length !== 0,\n },\n inputProps?.className,\n )}\n />\n </div>\n <ChevronIcon\n className={cn('size-5 min-w-5 cursor-pointer', disabled && 'text-gray-600')}\n />\n </button>\n <div className=\"relative\">\n {open && (\n <CommandList\n className=\"bg-popover text-popover-foreground animate-in absolute top-1 z-10 w-full rounded-md border shadow-xs outline-none\"\n onMouseLeave={() => {\n setOnScrollbar(false);\n }}\n onMouseEnter={() => {\n setOnScrollbar(true);\n }}\n onMouseUp={() => {\n inputRef?.current?.focus();\n }}\n >\n {isLoading ? (\n loadingIndicator\n ) : (\n <>\n {EmptyItem()}\n {!selectFirstItem && <CommandItem value=\"-\" className=\"hidden\" />}\n {Object.entries(options).map(([key, dropdowns]) => (\n <CommandGroup key={key} heading={key} className=\"h-full overflow-auto\">\n <div className=\"flex flex-col gap-1\">\n {dropdowns.map((option) => {\n const optionSelected = selected.some((s) => s.value === option.value);\n return (\n <CommandItem\n key={option.value}\n value={option.value}\n keywords={\n typeof option.label === 'string' ? [option.label] : undefined\n }\n disabled={option.disable}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onSelect={() => toggleOption(option)}\n className={cn(\n 'flex cursor-pointer items-center justify-between p-3 hover:bg-green-100 data-[selected=true]:bg-green-100',\n option.disable && 'text-muted-foreground cursor-default',\n optionSelected && 'bg-green-100',\n )}\n >\n {option.label}\n {optionSelected && <LuCheck className=\"h-4 w-4 text-green-800\" />}\n </CommandItem>\n );\n })}\n </div>\n </CommandGroup>\n ))}\n </>\n )}\n </CommandList>\n )}\n </div>\n </Command>\n );\n },\n);\n\nMultiSelect.displayName = 'MultiSelect';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/v2/multiselect/multiselect.tsx"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","timer","transToGroupOption","options","groupBy","groupOption","option","key","CommandEmpty","forwardRef","className","props","forwardedRef","useCommandState","state","jsx","cn","MultiSelect","onChange","placeholder","arrayDefaultOptions","arrayOptions","onSearch","onSearchSync","loadingIndicator","emptyIndicator","maxSelected","onMaxSelected","hidePlaceholderWhenSelected","disabled","badgeWrapperClassName","badgeClassName","getBadgeClassName","selectFirstItem","triggerSearchOnFocus","commandProps","inputProps","ref","inputRef","useRef","open","setOpen","onScrollbar","setOnScrollbar","isLoading","setIsLoading","dropdownRef","selected","setSelected","setOptions","inputValue","setInputValue","debouncedSearchTerm","ChevronIcon","LuChevronUp","LuChevronDown","useImperativeHandle","handleClickOutside","event","toggleOption","useCallback","optionSelected","s","hitMaximum","newOptions","handleKeyDown","input","lastSelectOption","doSearchSync","res","doSearch","EmptyItem","CommandItem","commandFilter","jsxs","Command","Badge","e","LuX","CommandPrimitive","CommandList","Fragment","dropdowns","CommandGroup","LuCheck"],"mappings":"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","file":"chunk-GUCWI5OR.js","sourcesContent":["import { Command as CommandPrimitive, useCommandState } from 'cmdk';\nimport { LuCheck, LuChevronDown, LuChevronUp, LuX } from 'react-icons/lu';\nimport {\n ComponentProps,\n ComponentPropsWithoutRef,\n forwardRef,\n KeyboardEvent,\n ReactNode,\n Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\n\nimport { Badge } from '@/v2/badge/badge';\nimport { Command, CommandGroup, CommandItem, CommandList } from '@/v2/command/command';\nimport { cn } from '@/lib/utils';\n\nexport type Option = {\n value: string;\n label: string | ReactNode;\n selectedLabel?: string | ReactNode;\n disable?: boolean;\n /** fixed option that can't be removed. */\n fixed?: boolean;\n /** Group the options by providing key. */\n [key: string]: string | boolean | ReactNode | undefined;\n};\n\ninterface GroupOption {\n [key: string]: Option[];\n}\n\ninterface MultiSelectProps {\n value?: Option[];\n defaultOptions?: Option[];\n /** manually controlled options */\n options?: Option[];\n placeholder?: string;\n /** Loading component. */\n loadingIndicator?: ReactNode;\n /** Empty component. */\n emptyIndicator?: ReactNode;\n /** Debounce time for async search. Only work with `onSearch`. */\n delay?: number;\n /**\n * Only work with `onSearch` prop. Trigger search when `onFocus`.\n * For example, when user click on the input, it will trigger the search to get initial options.\n * */\n triggerSearchOnFocus?: boolean;\n /** async search */\n onSearch?: (value: string) => Promise<Option[]>;\n /**\n * sync search. This search will not show loadingIndicator.\n * The rest props are the same as async search.\n * i.e.: groupBy, delay.\n * */\n onSearchSync?: (value: string) => Option[];\n onChange?: (options: Option[]) => void;\n /** Limit the maximum number of selected options. */\n maxSelected?: number;\n /** When the number of selected options exceeds the limit, the onMaxSelected will be called. */\n onMaxSelected?: (maxLimit: number) => void;\n /** Hide the placeholder when there are options selected. */\n hidePlaceholderWhenSelected?: boolean;\n disabled?: boolean;\n /** Group the options base on provided key. */\n groupBy?: string;\n className?: string;\n badgeWrapperClassName?: string;\n badgeClassName?: string;\n getBadgeClassName?: (option: Option) => string;\n /**\n *\n * @reference: https://github.com/pacocoursey/cmdk/issues/171\n */\n selectFirstItem?: boolean;\n /** Props of `Command` */\n commandProps?: ComponentPropsWithoutRef<typeof Command>;\n /** Props of `CommandInput` */\n inputProps?: Omit<\n ComponentPropsWithoutRef<typeof CommandPrimitive.Input>,\n 'value' | 'placeholder' | 'disabled'\n >;\n}\n\nexport interface MultiSelectRef {\n selectedValue: Option[];\n input: HTMLInputElement;\n focus: () => void;\n reset: () => void;\n}\n\nexport function useDebounce<T>(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nfunction transToGroupOption(options: Option[], groupBy?: string) {\n if (options.length === 0) {\n return {};\n }\n if (!groupBy) {\n return {\n '': options,\n };\n }\n\n const groupOption: GroupOption = {};\n options.forEach((option) => {\n const key = (option[groupBy] as string) || '';\n if (!groupOption[key]) {\n groupOption[key] = [];\n }\n groupOption[key].push(option);\n });\n return groupOption;\n}\n\n/**\n * The `CommandEmpty` of shadcn/ui will cause the cmdk empty not rendering correctly.\n * So we create one and copy the `Empty` implementation from `cmdk`.\n *\n * @reference: https://github.com/hsuanyi-chou/shadcn-ui-expansions/issues/34#issuecomment-1949561607\n * */\nconst CommandEmpty = forwardRef<HTMLDivElement, ComponentProps<typeof CommandPrimitive.Empty>>(\n ({ className, ...props }, forwardedRef) => {\n const render = useCommandState((state) => state.filtered.count === 0);\n\n if (!render) return null;\n\n return (\n <div\n ref={forwardedRef}\n className={cn('py-6 text-center text-sm', className)}\n role=\"presentation\"\n {...props}\n />\n );\n },\n);\n\nCommandEmpty.displayName = 'CommandEmpty';\n\nexport const MultiSelect = forwardRef<MultiSelectRef, MultiSelectProps>(\n (\n {\n value,\n onChange,\n placeholder,\n defaultOptions: arrayDefaultOptions = [],\n options: arrayOptions,\n delay,\n onSearch,\n onSearchSync,\n loadingIndicator,\n emptyIndicator,\n maxSelected = 0,\n onMaxSelected,\n hidePlaceholderWhenSelected = true,\n disabled,\n groupBy,\n className,\n badgeWrapperClassName,\n badgeClassName,\n getBadgeClassName = () => '',\n selectFirstItem = true,\n triggerSearchOnFocus = false,\n commandProps,\n inputProps,\n }: MultiSelectProps,\n ref: Ref<MultiSelectRef>,\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [open, setOpen] = useState(false);\n const [onScrollbar, setOnScrollbar] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const [selected, setSelected] = useState<Option[]>(value || []);\n const [options, setOptions] = useState<GroupOption>(\n transToGroupOption(arrayDefaultOptions, groupBy),\n );\n const [inputValue, setInputValue] = useState('');\n const debouncedSearchTerm = useDebounce(inputValue, delay || 500);\n\n const ChevronIcon = open ? LuChevronUp : LuChevronDown;\n\n useImperativeHandle(\n ref,\n () => ({\n selectedValue: [...selected],\n input: inputRef.current as HTMLInputElement,\n focus: () => inputRef?.current?.focus(),\n reset: () => setSelected([]),\n }),\n [selected],\n );\n\n const handleClickOutside = (event: MouseEvent | TouchEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n inputRef.current &&\n !inputRef.current.contains(event.target as Node)\n ) {\n setOpen(false);\n inputRef.current.blur();\n }\n };\n\n const toggleOption = useCallback(\n (option: Option) => {\n const optionSelected = selected.some((s) => s.value === option.value);\n const hitMaximum = !optionSelected && !!maxSelected && selected.length >= maxSelected;\n\n setInputValue('');\n\n let newOptions = optionSelected\n ? selected.filter((s) => s.value !== option.value)\n : [...selected, option];\n\n if (hitMaximum) newOptions = newOptions.slice(1); // Remove the first item if hit maximum\n\n setSelected(newOptions);\n onChange?.(newOptions);\n if (hitMaximum) onMaxSelected?.(selected.length);\n },\n [maxSelected, onChange, onMaxSelected, selected],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n const input = inputRef.current;\n if (input) {\n if (e.key === 'Delete' || e.key === 'Backspace') {\n if (input.value === '' && selected.length > 0) {\n const lastSelectOption = selected[selected.length - 1];\n // If there is a last item and it is not fixed, we can remove it.\n if (lastSelectOption && !lastSelectOption.fixed) {\n toggleOption(lastSelectOption);\n }\n }\n }\n // This is not a default behavior of the <input /> field\n if (e.key === 'Escape') {\n input.blur();\n }\n }\n },\n [toggleOption, selected],\n );\n\n useEffect(() => {\n if (open) {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('touchend', handleClickOutside);\n } else {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('touchend', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('touchend', handleClickOutside);\n };\n }, [open]);\n\n useEffect(() => {\n if (value) {\n setSelected(value);\n }\n }, [value]);\n\n useEffect(() => {\n /** If `onSearch` is provided, do not trigger options updated. */\n if (!arrayOptions || onSearch) {\n return;\n }\n const newOptions = transToGroupOption(arrayOptions || [], groupBy);\n\n if (Object.entries(newOptions).length !== Object.entries(options).length) {\n setOptions(newOptions);\n }\n }, [arrayDefaultOptions, arrayOptions, groupBy, onSearch, options]);\n\n useEffect(() => {\n /** sync search */\n\n const doSearchSync = () => {\n const res = onSearchSync?.(debouncedSearchTerm);\n setOptions(transToGroupOption(res || [], groupBy));\n };\n\n const exec = async () => {\n if (!onSearchSync || !open) return;\n\n if (triggerSearchOnFocus) {\n doSearchSync();\n }\n\n if (debouncedSearchTerm) {\n doSearchSync();\n }\n };\n\n exec();\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus]);\n\n useEffect(() => {\n /** async search */\n\n const doSearch = async () => {\n setIsLoading(true);\n const res = await onSearch?.(debouncedSearchTerm);\n setOptions(transToGroupOption(res || [], groupBy));\n setIsLoading(false);\n };\n\n const exec = async () => {\n if (!onSearch || !open) return;\n\n if (triggerSearchOnFocus) {\n await doSearch();\n }\n\n if (debouncedSearchTerm) {\n await doSearch();\n }\n };\n\n exec();\n }, [debouncedSearchTerm, groupBy, open, triggerSearchOnFocus]);\n\n const EmptyItem = useCallback(() => {\n if (!emptyIndicator) return undefined;\n\n // For async search that showing emptyIndicator\n if (onSearch && Object.keys(options).length === 0) {\n return (\n <CommandItem value=\"-\" disabled>\n {emptyIndicator}\n </CommandItem>\n );\n }\n\n return <CommandEmpty>{emptyIndicator}</CommandEmpty>;\n }, [emptyIndicator, onSearch, options]);\n\n const commandFilter = useCallback(() => {\n if (commandProps?.filter) {\n return commandProps.filter;\n }\n\n // Using default filter in `cmdk`. We don't have to provide it.\n return undefined;\n }, [commandProps?.filter]);\n\n return (\n <Command\n ref={dropdownRef}\n {...commandProps}\n onKeyDown={(e) => {\n handleKeyDown(e);\n commandProps?.onKeyDown?.(e);\n }}\n className={cn('h-auto overflow-visible bg-transparent', commandProps?.className)}\n shouldFilter={\n commandProps?.shouldFilter !== undefined ? commandProps.shouldFilter : !onSearch\n } // When onSearch is provided, we don't want to filter the options. You can still override it.\n filter={commandFilter()}\n >\n <button\n type=\"button\"\n className={cn(\n 'items-center justify-between gap-2 p-3 whitespace-nowrap',\n\n // Border & ring\n 'border-input rounded-md border bg-white',\n open && 'border-dark-green', // conditional green border when open\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n\n // States\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',\n 'disabled:cursor-not-allowed disabled:bg-gray-200',\n 'hover:not-disabled:border-dark-green',\n\n // Shadow & transitions\n 'transition-all outline-none',\n {\n 'cursor-text': !disabled && selected.length !== 0,\n },\n 'flex w-full',\n className,\n )}\n onClick={() => {\n if (disabled) return;\n inputRef?.current?.focus();\n }}\n disabled={disabled}\n >\n <div\n className={cn(\n 'relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0',\n badgeWrapperClassName,\n )}\n >\n {selected.map((option) => {\n return (\n <Badge\n key={option.value}\n className={cn(\n 'data-[disabled]:text-secondary data-[disabled]:bg-transparent',\n 'data-[fixed]:bg-muted-foreground data-[fixed]:text-muted data-[fixed]:hover:bg-muted-foreground',\n badgeClassName,\n getBadgeClassName(option),\n 'py-0',\n )}\n color=\"green\"\n rounded\n data-fixed={option.fixed}\n data-disabled={disabled || undefined}\n >\n {option?.selectedLabel ?? option.label}\n <button\n type=\"button\"\n className={cn(\n 'ring-offset-background focus:ring-ring ml-1 rounded-full outline-none focus:ring-2 focus:ring-offset-2',\n (disabled || option.fixed) && 'hidden',\n )}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n toggleOption(option);\n }\n }}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onClick={() => toggleOption(option)}\n >\n <LuX className=\"text-muted-foreground hover:text-foreground h-3 w-3\" />\n </button>\n </Badge>\n );\n })}\n <CommandPrimitive.Input\n {...inputProps}\n ref={inputRef}\n value={inputValue}\n disabled={disabled}\n onValueChange={(value) => {\n setInputValue(value);\n inputProps?.onValueChange?.(value);\n }}\n onBlur={(event) => {\n if (!onScrollbar) {\n setOpen(false);\n }\n inputProps?.onBlur?.(event);\n }}\n onFocus={(event) => {\n setOpen(true);\n inputProps?.onFocus?.(event);\n }}\n placeholder={hidePlaceholderWhenSelected && selected.length !== 0 ? '' : placeholder}\n className={cn(\n 'placeholder:text-secondary flex-1 self-baseline bg-transparent outline-none',\n {\n 'w-full': hidePlaceholderWhenSelected,\n 'ml-1': selected.length !== 0,\n },\n inputProps?.className,\n )}\n />\n </div>\n <ChevronIcon\n className={cn('size-5 min-w-5 cursor-pointer', disabled && 'text-gray-600')}\n />\n </button>\n <div className=\"relative\">\n {open && (\n <CommandList\n className=\"bg-popover text-popover-foreground animate-in absolute top-1 z-10 w-full rounded-md border shadow-xs outline-none\"\n onMouseLeave={() => {\n setOnScrollbar(false);\n }}\n onMouseEnter={() => {\n setOnScrollbar(true);\n }}\n onMouseUp={() => {\n inputRef?.current?.focus();\n }}\n >\n {isLoading ? (\n loadingIndicator\n ) : (\n <>\n {EmptyItem()}\n {!selectFirstItem && <CommandItem value=\"-\" className=\"hidden\" />}\n {Object.entries(options).map(([key, dropdowns]) => (\n <CommandGroup key={key} heading={key} className=\"h-full overflow-auto\">\n <div className=\"flex flex-col gap-1\">\n {dropdowns.map((option) => {\n const optionSelected = selected.some((s) => s.value === option.value);\n return (\n <CommandItem\n key={option.value}\n value={option.value}\n keywords={\n typeof option.label === 'string' ? [option.label] : undefined\n }\n disabled={option.disable}\n onMouseDown={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n onSelect={() => toggleOption(option)}\n className={cn(\n 'flex cursor-pointer items-center justify-between p-3 hover:bg-green-100 data-[selected=true]:bg-green-100',\n option.disable && 'text-muted-foreground cursor-default',\n optionSelected && 'bg-green-100',\n )}\n >\n {option.label}\n {optionSelected && <LuCheck className=\"h-4 w-4 text-green-800\" />}\n </CommandItem>\n );\n })}\n </div>\n </CommandGroup>\n ))}\n </>\n )}\n </CommandList>\n )}\n </div>\n </Command>\n );\n },\n);\n\nMultiSelect.displayName = 'MultiSelect';\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),l=require('react'),lu=require('react-icons/lu'),reactSlot=require('@radix-ui/react-slot'),classVarianceAuthority=require('class-variance-authority'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var l__namespace=/*#__PURE__*/_interopNamespace(l);var y=classVarianceAuthority.cva("inline-flex items-center justify-center border px-2 font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-4 gap-1 [&>svg]:pointer-events-none overflow-hidden",{variants:{variant:{default:"border-transparent",heavy:"border-transparent",outlined:"bg-white"},color:{gold:"[&>button]:bg-gold-200 [&>button]:text-gold-500",green:"[&>button]:bg-green-300 [&>button]:text-green-900",grey:"[&>button]:bg-gray-200 [&>button]:text-gray-500",purple:"[&>button]:bg-purple-200 [&>button]:text-purple-500",red:"[&>button]:bg-red-200 [&>button]:text-red-400"},size:{default:"py-0.5 text-sm",large:"py-1 text-base"}},compoundVariants:[{variant:"default",color:"gold",className:"bg-gold-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),l=require('react'),lu=require('react-icons/lu'),reactSlot=require('@radix-ui/react-slot'),classVarianceAuthority=require('class-variance-authority'),jsxRuntime=require('react/jsx-runtime');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var l__namespace=/*#__PURE__*/_interopNamespace(l);var y=classVarianceAuthority.cva("inline-flex items-center justify-center border px-2 font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-4 gap-1 [&>svg]:pointer-events-none overflow-hidden",{variants:{variant:{default:"border-transparent",heavy:"border-transparent",outlined:"bg-white"},color:{gold:"[&>button]:bg-gold-200 [&>button]:text-gold-500",green:"[&>button]:bg-green-300 [&>button]:text-green-900",grey:"[&>button]:bg-gray-200 [&>button]:text-gray-500",purple:"[&>button]:bg-purple-200 [&>button]:text-purple-500",red:"[&>button]:bg-red-200 [&>button]:text-red-400"},size:{default:"py-0.5 text-sm",large:"py-1 text-base"}},compoundVariants:[{variant:"default",color:"gold",className:"bg-gold-200 text-primary [&>svg]:text-gold-400"},{variant:"default",color:"green",className:"bg-green-200 text-green-800 [&>svg]:text-green-800"},{variant:"default",color:"grey",className:"bg-gray-200 text-gray-700 [&>svg]:text-gray-700"},{variant:"default",color:"purple",className:"bg-purple-100 text-purple-500 [&>svg]:text-purple-500"},{variant:"default",color:"red",className:"bg-red-100 text-primary [&>svg]:text-red-500"},{variant:"heavy",color:"gold",className:"bg-gold-300 text-primary [&>svg]:text-black"},{variant:"heavy",color:"green",className:"bg-green-700 text-white [&>svg]:text-white"},{variant:"heavy",color:"grey",className:"bg-gray-300 text-primary [&>svg]:text-black"},{variant:"heavy",color:"purple",className:"bg-purple-400 text-white [&>svg]:text-white"},{variant:"heavy",color:"red",className:"bg-red-500 text-white [&>svg]:text-white"},{variant:"outlined",color:"gold",className:"border-gold-500 text-primary [&>svg]:text-gold-500"},{variant:"outlined",color:"green",className:"border-green-800 text-green-800 [&>svg]:text-green-800"},{variant:"outlined",color:"grey",className:"border-gray-300 text-gray-700 [&>svg]:text-gray-700"},{variant:"outlined",color:"purple",className:"border-purple-500 text-purple-500 [&>svg]:text-purple-500"},{variant:"outlined",color:"red",className:"border-red-500 text-primary [&>svg]:text-red-500"}],defaultVariants:{variant:"default"}});function R({className:n,variant:s,color:g="grey",size:d="default",rounded:i=false,removable:p=false,asChild:t=false,children:r,onRemove:u,...a}){let c=t?reactSlot.Slot:"span",b=l__namespace.useId();return jsxRuntime.jsx(c,{"data-slot":"badge",className:chunkQRO22BPZ_cjs.a(y({variant:s,color:g,size:d}),i?"rounded-xl":"rounded-sm",n),id:a.id??b,...a,children:t?r:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[r,p&&jsxRuntime.jsx("button",{type:"button",className:"flex size-3.5 items-center justify-center rounded-full",onClick:u,"aria-label":"Remove",children:jsxRuntime.jsx(lu.LuX,{className:"size-2.5"})})]})})}exports.a=y;exports.b=R;//# sourceMappingURL=chunk-HG3JDJUD.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-HG3JDJUD.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/v2/badge/badge.tsx"],"names":["badgeVariants","cva","Badge","className","variant","color","size","rounded","removable","asChild","children","onRemove","props","Comp","Slot","id","l","jsx","cn","jsxs","Fragment","LuX"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/v2/badge/badge.tsx"],"names":["badgeVariants","cva","Badge","className","variant","color","size","rounded","removable","asChild","children","onRemove","props","Comp","Slot","id","l","jsx","cn","jsxs","Fragment","LuX"],"mappings":"0mBAMMA,CAAgBC,CAAAA,0BAAAA,CACpB,mKACA,CAAA,CACE,QAAU,CAAA,CACR,OAAS,CAAA,CACP,QAAS,oBACT,CAAA,KAAA,CAAO,oBACP,CAAA,QAAA,CAAU,UACZ,CAAA,CACA,KAAO,CAAA,CACL,KAAM,iDACN,CAAA,KAAA,CAAO,mDACP,CAAA,IAAA,CAAM,iDACN,CAAA,MAAA,CAAQ,qDACR,CAAA,GAAA,CAAK,+CACP,CACA,CAAA,IAAA,CAAM,CACJ,OAAA,CAAS,gBACT,CAAA,KAAA,CAAO,gBACT,CACF,EACA,gBAAkB,CAAA,CAEhB,CACE,OAAA,CAAS,SACT,CAAA,KAAA,CAAO,MACP,CAAA,SAAA,CAAW,gDACb,CACA,CAAA,CACE,OAAS,CAAA,SAAA,CACT,KAAO,CAAA,OAAA,CACP,SAAW,CAAA,oDACb,EACA,CACE,OAAA,CAAS,SACT,CAAA,KAAA,CAAO,MACP,CAAA,SAAA,CAAW,iDACb,CAAA,CACA,CACE,OAAS,CAAA,SAAA,CACT,KAAO,CAAA,QAAA,CACP,SAAW,CAAA,uDACb,CACA,CAAA,CACE,QAAS,SACT,CAAA,KAAA,CAAO,KACP,CAAA,SAAA,CAAW,8CACb,CAAA,CAEA,CACE,OAAA,CAAS,QACT,KAAO,CAAA,MAAA,CACP,SAAW,CAAA,6CACb,CACA,CAAA,CACE,OAAS,CAAA,OAAA,CACT,MAAO,OACP,CAAA,SAAA,CAAW,4CACb,CAAA,CACA,CACE,OAAA,CAAS,OACT,CAAA,KAAA,CAAO,OACP,SAAW,CAAA,6CACb,CACA,CAAA,CACE,OAAS,CAAA,OAAA,CACT,KAAO,CAAA,QAAA,CACP,UAAW,6CACb,CAAA,CACA,CACE,OAAA,CAAS,OACT,CAAA,KAAA,CAAO,KACP,CAAA,SAAA,CAAW,0CACb,CAEA,CAAA,CACE,OAAS,CAAA,UAAA,CACT,KAAO,CAAA,MAAA,CACP,SAAW,CAAA,oDACb,EACA,CACE,OAAA,CAAS,UACT,CAAA,KAAA,CAAO,OACP,CAAA,SAAA,CAAW,wDACb,CAAA,CACA,CACE,OAAS,CAAA,UAAA,CACT,KAAO,CAAA,MAAA,CACP,SAAW,CAAA,qDACb,CACA,CAAA,CACE,QAAS,UACT,CAAA,KAAA,CAAO,QACP,CAAA,SAAA,CAAW,2DACb,CAAA,CACA,CACE,OAAA,CAAS,WACT,KAAO,CAAA,KAAA,CACP,SAAW,CAAA,kDACb,CACF,CAAA,CACA,eAAiB,CAAA,CACf,QAAS,SACX,CACF,CACF,EAEA,SAASC,CAAAA,CAAM,CACb,SAAA,CAAAC,EACA,OAAAC,CAAAA,CAAAA,CACA,KAAAC,CAAAA,CAAAA,CAAQ,MACR,CAAA,IAAA,CAAAC,CAAO,CAAA,SAAA,CACP,QAAAC,CAAU,CAAA,KAAA,CACV,SAAAC,CAAAA,CAAAA,CAAY,KACZ,CAAA,OAAA,CAAAC,CAAU,CAAA,KAAA,CACV,SAAAC,CACA,CAAA,QAAA,CAAAC,CACA,CAAA,GAAGC,CACL,CAAA,CAQK,CACH,IAAMC,EAAOJ,CAAUK,CAAAA,cAAAA,CAAO,MACxBC,CAAAA,CAAAA,CAAWC,YAAM,CAAA,KAAA,EAAA,CAEvB,OACEC,cAAAA,CAACJ,EAAA,CACC,WAAA,CAAU,OACV,CAAA,SAAA,CAAWK,mBACTlB,CAAAA,CAAAA,CAAc,CAAE,OAAA,CAAAI,EAAS,KAAAC,CAAAA,CAAAA,CAAO,IAAAC,CAAAA,CAAK,CAAC,CAAA,CACtCC,CAAU,CAAA,YAAA,CAAe,aACzBJ,CACF,CAAA,CACA,EAAIS,CAAAA,CAAAA,CAAM,EAAMG,EAAAA,CAAAA,CACf,GAAGH,CAAAA,CAEH,SAAAH,CACCC,CAAAA,CAAAA,CAEAS,eAAAC,CAAAA,mBAAAA,CAAA,CACG,QAAA,CAAA,CAAAV,CACAF,CAAAA,CAAAA,EACCS,eAAC,QACC,CAAA,CAAA,IAAA,CAAK,QACL,CAAA,SAAA,CAAU,wDACV,CAAA,OAAA,CAASN,CACT,CAAA,YAAA,CAAW,SAEX,QAAAM,CAAAA,cAAAA,CAACI,MAAA,CAAA,CAAI,SAAU,CAAA,UAAA,CAAW,CAC5B,CAAA,CAAA,CAAA,CAEJ,EAEJ,CAEJ","file":"chunk-HG3JDJUD.cjs","sourcesContent":["import * as React from 'react';\nimport { LuX } from 'react-icons/lu';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\n\nconst badgeVariants = cva(\n 'inline-flex items-center justify-center border px-2 font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-4 gap-1 [&>svg]:pointer-events-none overflow-hidden',\n {\n variants: {\n variant: {\n default: 'border-transparent',\n heavy: 'border-transparent',\n outlined: 'bg-white',\n },\n color: {\n gold: '[&>button]:bg-gold-200 [&>button]:text-gold-500',\n green: '[&>button]:bg-green-300 [&>button]:text-green-900',\n grey: '[&>button]:bg-gray-200 [&>button]:text-gray-500',\n purple: '[&>button]:bg-purple-200 [&>button]:text-purple-500',\n red: '[&>button]:bg-red-200 [&>button]:text-red-400',\n },\n size: {\n default: 'py-0.5 text-sm',\n large: 'py-1 text-base',\n },\n },\n compoundVariants: [\n // Default variants\n {\n variant: 'default',\n color: 'gold',\n className: 'bg-gold-200 text-primary [&>svg]:text-gold-400',\n },\n {\n variant: 'default',\n color: 'green',\n className: 'bg-green-200 text-green-800 [&>svg]:text-green-800',\n },\n {\n variant: 'default',\n color: 'grey',\n className: 'bg-gray-200 text-gray-700 [&>svg]:text-gray-700',\n },\n {\n variant: 'default',\n color: 'purple',\n className: 'bg-purple-100 text-purple-500 [&>svg]:text-purple-500',\n },\n {\n variant: 'default',\n color: 'red',\n className: 'bg-red-100 text-primary [&>svg]:text-red-500',\n },\n // Heavy variants\n {\n variant: 'heavy',\n color: 'gold',\n className: 'bg-gold-300 text-primary [&>svg]:text-black',\n },\n {\n variant: 'heavy',\n color: 'green',\n className: 'bg-green-700 text-white [&>svg]:text-white',\n },\n {\n variant: 'heavy',\n color: 'grey',\n className: 'bg-gray-300 text-primary [&>svg]:text-black',\n },\n {\n variant: 'heavy',\n color: 'purple',\n className: 'bg-purple-400 text-white [&>svg]:text-white',\n },\n {\n variant: 'heavy',\n color: 'red',\n className: 'bg-red-500 text-white [&>svg]:text-white',\n },\n // Outlined variants\n {\n variant: 'outlined',\n color: 'gold',\n className: 'border-gold-500 text-primary [&>svg]:text-gold-500',\n },\n {\n variant: 'outlined',\n color: 'green',\n className: 'border-green-800 text-green-800 [&>svg]:text-green-800',\n },\n {\n variant: 'outlined',\n color: 'grey',\n className: 'border-gray-300 text-gray-700 [&>svg]:text-gray-700',\n },\n {\n variant: 'outlined',\n color: 'purple',\n className: 'border-purple-500 text-purple-500 [&>svg]:text-purple-500',\n },\n {\n variant: 'outlined',\n color: 'red',\n className: 'border-red-500 text-primary [&>svg]:text-red-500',\n },\n ],\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction Badge({\n className,\n variant,\n color = 'grey',\n size = 'default',\n rounded = false,\n removable = false,\n asChild = false,\n children,\n onRemove,\n ...props\n}: React.ComponentProps<'span'> &\n VariantProps<typeof badgeVariants> & {\n color?: 'gold' | 'green' | 'grey' | 'purple' | 'red';\n size?: 'default' | 'large';\n rounded?: boolean;\n removable?: boolean;\n asChild?: boolean;\n onRemove?: () => void;\n }) {\n const Comp = asChild ? Slot : 'span';\n const id = React.useId();\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(\n badgeVariants({ variant, color, size }),\n rounded ? 'rounded-xl' : 'rounded-sm',\n className,\n )}\n id={props.id ?? id}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {children}\n {removable && (\n <button\n type=\"button\"\n className=\"flex size-3.5 items-center justify-center rounded-full\"\n onClick={onRemove}\n aria-label=\"Remove\"\n >\n <LuX className=\"size-2.5\" />\n </button>\n )}\n </>\n )}\n </Comp>\n );\n}\n\nexport { Badge, badgeVariants };\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunk75JCLU5T_cjs=require('./chunk-75JCLU5T.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),luxon=require('luxon'),react=require('react'),jsxRuntime=require('react/jsx-runtime');var v="00:00",C="24:00",S=r=>luxon.DateTime.fromFormat(r,"HH:mm").isValid,D=({startTime:r=v,endTime:t=C,interval:d=30,onChange:T=void 0,className:b="",size:w="default",portal:M=true,...h})=>{S(r)||(console.error(`Invalid startTime: ${r}`),r=v),S(t)||(console.error(`Invalid endTime: ${t}`),t=C);let f=react.useMemo(()=>{let o=luxon.DateTime.fromFormat(t,"HH:mm"),a=luxon.Duration.fromObject({minutes:d}),n=[],e=luxon.DateTime.fromFormat(r,"HH:mm");for(;e<=o;){let i=e.toFormat("HH:mm");i==="00:00"&&e.equals(o)&&(i="24:00"),n.push({label:e.toFormat("h:mm a"),value:{hour:e.toFormat("HH"),min:e.toFormat("mm"),raw:i,formatted:e.toFormat("h:mm a")}}),e=e.plus(a);}return n},[r,t,d]),F=f.map(o=>({label:o.label,value:o.value.raw}));return jsxRuntime.jsxs(chunk75JCLU5T_cjs.a,{onValueChange:o=>{let a=f.find(n=>n.value.raw===o);a&&T?.(a);},...h,children:[jsxRuntime.jsx(chunk75JCLU5T_cjs.d,{className:chunkQRO22BPZ_cjs.a("max-w-[240px] md:w-[150px]",b),size:w,children:jsxRuntime.jsx(chunk75JCLU5T_cjs.c,{placeholder:"Select one"})}),jsxRuntime.jsx(chunk75JCLU5T_cjs.g,{position:"popper",className:"max-h-90",portal:M,children:F.map(o=>jsxRuntime.jsx(chunk75JCLU5T_cjs.i,{className:"h-10",value:o.value,children:o.label},o.value))})]})},kr=D;exports.a=D;exports.b=kr;//# sourceMappingURL=chunk-O7F2Q7UO.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-O7F2Q7UO.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/v2/time-select/time-select.tsx"],"names":["START_TIME_DEFAULT","END_TIME_DEFAULT","isValidTime","time","DateTime","TimeSelect","startTime","endTime","interval","onChange","className","size","portal","inputProps","intervals","useMemo","dtEnd","durationInterval","Duration","res","i","raw","options","jsxs","Select","e","jsx","SelectTrigger","cn","SelectValue","SelectContent","option","SelectItem","time_select_default"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/v2/time-select/time-select.tsx"],"names":["START_TIME_DEFAULT","END_TIME_DEFAULT","isValidTime","time","DateTime","TimeSelect","startTime","endTime","interval","onChange","className","size","portal","inputProps","intervals","useMemo","dtEnd","durationInterval","Duration","res","i","raw","options","jsxs","Select","e","jsx","SelectTrigger","cn","SelectValue","SelectContent","option","SelectItem","time_select_default"],"mappings":"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","file":"chunk-O7F2Q7UO.cjs","sourcesContent":["import { DateTime, Duration } from 'luxon';\nimport { useMemo } from 'react';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/v2';\nimport { cn } from '@/lib/utils';\n\nexport type Interval = {\n label: string;\n value: {\n hour: string;\n min: string;\n raw: string;\n formatted: string;\n };\n};\n\ntype Props = {\n startTime?: string;\n endTime?: string;\n interval?: number;\n onChange?: (e: Interval) => void;\n className?: string;\n size?: 'default' | 'sm';\n portal?: boolean;\n [inputProps: string]: unknown;\n};\n\nconst START_TIME_DEFAULT = '00:00';\nconst END_TIME_DEFAULT = '24:00';\n\nconst isValidTime = (time: string) => {\n const dt = DateTime.fromFormat(time, 'HH:mm');\n return dt.isValid;\n};\n\nexport const TimeSelect = ({\n startTime = START_TIME_DEFAULT,\n endTime = END_TIME_DEFAULT,\n interval = 30,\n onChange = undefined,\n className = '',\n size = 'default',\n portal = true,\n ...inputProps\n}: Props) => {\n if (!isValidTime(startTime)) {\n console.error(`Invalid startTime: ${startTime}`);\n // eslint-disable-next-line no-param-reassign\n startTime = START_TIME_DEFAULT;\n }\n if (!isValidTime(endTime)) {\n console.error(`Invalid endTime: ${endTime}`);\n // eslint-disable-next-line no-param-reassign\n endTime = END_TIME_DEFAULT;\n }\n\n const intervals = useMemo((): Interval[] => {\n const dtEnd = DateTime.fromFormat(endTime, 'HH:mm');\n const durationInterval = Duration.fromObject({ minutes: interval });\n const res = [];\n let i = DateTime.fromFormat(startTime, 'HH:mm');\n while (i <= dtEnd) {\n let raw = i.toFormat('HH:mm');\n // Avoid duplicate keys for \"00:00\" and \"00:00\" (end of day)\n if (raw === '00:00' && i.equals(dtEnd)) raw = '24:00';\n\n res.push({\n label: i.toFormat('h:mm a'),\n value: {\n hour: i.toFormat('HH'),\n min: i.toFormat('mm'),\n raw,\n formatted: i.toFormat('h:mm a'),\n },\n });\n i = i.plus(durationInterval);\n }\n\n return res;\n }, [startTime, endTime, interval]);\n\n const options = intervals.map((time) => ({\n label: time.label,\n value: time.value.raw,\n }));\n\n const handleOnSelect = (e: unknown) => {\n const interval = intervals.find((time) => time.value.raw === e);\n\n if (!interval) return;\n\n onChange?.(interval);\n };\n\n return (\n <Select onValueChange={handleOnSelect} {...inputProps}>\n <SelectTrigger className={cn('max-w-[240px] md:w-[150px]', className)} size={size}>\n <SelectValue placeholder=\"Select one\" />\n </SelectTrigger>\n <SelectContent position=\"popper\" className=\"max-h-90\" portal={portal}>\n {options.map((option) => (\n // Note that labels and values here may appear to be duplicates\n // For example, \"00:00\" and \"24:00\" will both have the same value \"00:00\"\n <SelectItem className=\"h-10\" key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n};\n\nexport default TimeSelect;\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a}from'./chunk-YTIIAU4W.js';import*as n from'react';import*as t from'@radix-ui/react-navigation-menu';import {cva}from'class-variance-authority';import {LuChevronDown}from'react-icons/lu';import {jsx,jsxs}from'react/jsx-runtime';var p=cva("group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-base font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1",{variants:{variant:{default:"",appNavigation:a("bg-transparent hover:bg-green-800 focus:bg-green-800 data-[state=open]:bg-green-800/50 data-[state=open]:hover:bg-green-800 data-[state=open]:focus:bg-green-800","text-lg text-white hover:text-white focus:text-white data-[state=open]:text-white")}}}),g=n.createContext({variant:"default"});function c({className:e,...a$1}){return jsx("div",{className:a("absolute top-full left-0 isolate z-50 flex justify-center"),children:jsx(t.Viewport,{"data-slot":"navigation-menu-viewport",className:a("origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]",e),...a$1})})}function x({className:e,children:a$1,viewport:r=false,variant:s="default",...u}){let d=n.useMemo(()=>({variant:s}),[s]);return jsx(g.Provider,{value:d,children:jsxs(t.Root,{"data-slot":"navigation-menu","data-viewport":r,className:a("group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",e),...u,children:[a$1,r&&jsx(c,{})]})})}function h({className:e,...a$1}){return jsx(t.List,{"data-slot":"navigation-menu-list",className:a("group flex flex-1 list-none items-center justify-center gap-1",e),...a$1})}function M({className:e,...a$1}){return jsx(t.Item,{"data-slot":"navigation-menu-item",className:a("relative",e),...a$1})}function P({className:e,children:a$1,highlighted:r=false,...s}){let{variant:u}=n.useContext(g);return jsxs(t.Trigger,{"data-slot":"navigation-menu-trigger",className:a(p({variant:u}),"group",e,u==="appNavigation"&&r&&"bg-white/20 font-semibold"),...s,children:[a$1," ",jsx(LuChevronDown,{className:"relative top-[1px] ml-1 size-4 transition duration-300 group-data-[state=open]:rotate-180","aria-hidden":"true"})]})}function y({className:e,...a$1}){return jsx(t.Content,{"data-slot":"navigation-menu-content",className:a("data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full min-w-56 p-3 md:absolute md:w-auto","group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none","flex flex-col gap-2",e),...a$1})}function C({className:e,highlighted:a$1=false,selected:r=false,...s}){let{variant:u}=n.useContext(g);return jsx(t.Link,{"data-slot":"navigation-menu-link",className:a("data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-dark-green flex items-center gap-3 rounded-sm p-2 text-base transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-5",e,u==="appNavigation"&&a$1&&"bg-white/20",r&&"bg-gray-400/20 font-semibold"),...s})}function R({className:e,...a$1}){return jsx(t.Indicator,{"data-slot":"navigation-menu-indicator",className:a("data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden",e),...a$1,children:jsx("div",{className:"bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md"})})}export{p as a,c as b,x as c,h as d,M as e,P as f,y as g,C as h,R as i};//# sourceMappingURL=chunk-OJLMWCZK.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-OJLMWCZK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/v2/navigation-menu/navigation-menu.tsx"],"names":["navigationMenuTriggerStyle","cva","cn","NavigationMenuContext","NavigationMenuViewport","className","props","jsx","NavigationMenu","children","viewport","variant","contextValue","jsxs","NavigationMenuList","NavigationMenuItem","NavigationMenuTrigger","highlighted","LuChevronDown","NavigationMenuContent","NavigationMenuLink","selected","NavigationMenuIndicator"],"mappings":"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","file":"chunk-OJLMWCZK.js","sourcesContent":["import * as React from 'react';\nimport * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport { LuChevronDown } from 'react-icons/lu';\nimport { cn } from '@/lib/utils';\n\nconst navigationMenuTriggerStyle = cva(\n 'group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-base font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1',\n {\n variants: {\n variant: {\n default: '',\n appNavigation: cn(\n // background\n 'bg-transparent hover:bg-green-800 focus:bg-green-800 data-[state=open]:bg-green-800/50 data-[state=open]:hover:bg-green-800 data-[state=open]:focus:bg-green-800',\n\n // text\n 'text-lg text-white hover:text-white focus:text-white data-[state=open]:text-white',\n ),\n },\n },\n },\n);\n\nconst NavigationMenuContext = React.createContext<VariantProps<typeof navigationMenuTriggerStyle>>({\n variant: 'default',\n});\n\nfunction NavigationMenuViewport({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {\n return (\n <div className={cn('absolute top-full left-0 isolate z-50 flex justify-center')}>\n <NavigationMenuPrimitive.Viewport\n data-slot=\"navigation-menu-viewport\"\n className={cn(\n 'origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\ntype NavigationMenuProps = React.ComponentProps<typeof NavigationMenuPrimitive.Root> &\n VariantProps<typeof navigationMenuTriggerStyle> & {\n viewport?: boolean;\n };\n\nfunction NavigationMenu({\n className,\n children,\n viewport = false,\n variant = 'default',\n ...props\n}: NavigationMenuProps) {\n const contextValue = React.useMemo(() => ({ variant }), [variant]);\n return (\n <NavigationMenuContext.Provider value={contextValue}>\n <NavigationMenuPrimitive.Root\n data-slot=\"navigation-menu\"\n data-viewport={viewport}\n className={cn(\n 'group/navigation-menu relative flex max-w-max flex-1 items-center justify-center',\n className,\n )}\n {...props}\n >\n {children}\n {viewport && <NavigationMenuViewport />}\n </NavigationMenuPrimitive.Root>\n </NavigationMenuContext.Provider>\n );\n}\n\nfunction NavigationMenuList({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {\n return (\n <NavigationMenuPrimitive.List\n data-slot=\"navigation-menu-list\"\n className={cn('group flex flex-1 list-none items-center justify-center gap-1', className)}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuItem({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {\n return (\n <NavigationMenuPrimitive.Item\n data-slot=\"navigation-menu-item\"\n className={cn('relative', className)}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuTrigger({\n className,\n children,\n highlighted = false,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger> & { highlighted?: boolean }) {\n const { variant } = React.useContext(NavigationMenuContext);\n return (\n <NavigationMenuPrimitive.Trigger\n data-slot=\"navigation-menu-trigger\"\n className={cn(\n navigationMenuTriggerStyle({ variant }),\n 'group',\n className,\n variant === 'appNavigation' && highlighted && 'bg-white/20 font-semibold',\n )}\n {...props}\n >\n {children}{' '}\n <LuChevronDown\n className=\"relative top-[1px] ml-1 size-4 transition duration-300 group-data-[state=open]:rotate-180\"\n aria-hidden=\"true\"\n />\n </NavigationMenuPrimitive.Trigger>\n );\n}\n\nfunction NavigationMenuContent({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {\n return (\n <NavigationMenuPrimitive.Content\n data-slot=\"navigation-menu-content\"\n className={cn(\n 'data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full min-w-56 p-3 md:absolute md:w-auto',\n 'group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none',\n 'flex flex-col gap-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuLink({\n className,\n highlighted = false,\n selected = false,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Link> & {\n highlighted?: boolean;\n selected?: boolean;\n}) {\n const { variant } = React.useContext(NavigationMenuContext);\n return (\n <NavigationMenuPrimitive.Link\n data-slot=\"navigation-menu-link\"\n className={cn(\n \"data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-dark-green flex items-center gap-3 rounded-sm p-2 text-base transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-5\",\n className,\n variant === 'appNavigation' && highlighted && 'bg-white/20',\n selected && 'bg-gray-400/20 font-semibold',\n )}\n {...props}\n />\n );\n}\n\nfunction NavigationMenuIndicator({\n className,\n ...props\n}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {\n return (\n <NavigationMenuPrimitive.Indicator\n data-slot=\"navigation-menu-indicator\"\n className={cn(\n 'data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden',\n className,\n )}\n {...props}\n >\n <div className=\"bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md\" />\n </NavigationMenuPrimitive.Indicator>\n );\n}\n\nexport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n navigationMenuTriggerStyle,\n};\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {a}from'./chunk-YTIIAU4W.js';import*as l from'react';import {LuX}from'react-icons/lu';import {Slot}from'@radix-ui/react-slot';import {cva}from'class-variance-authority';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var y=cva("inline-flex items-center justify-center border px-2 font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-4 gap-1 [&>svg]:pointer-events-none overflow-hidden",{variants:{variant:{default:"border-transparent",heavy:"border-transparent",outlined:"bg-white"},color:{gold:"[&>button]:bg-gold-200 [&>button]:text-gold-500",green:"[&>button]:bg-green-300 [&>button]:text-green-900",grey:"[&>button]:bg-gray-200 [&>button]:text-gray-500",purple:"[&>button]:bg-purple-200 [&>button]:text-purple-500",red:"[&>button]:bg-red-200 [&>button]:text-red-400"},size:{default:"py-0.5 text-sm",large:"py-1 text-base"}},compoundVariants:[{variant:"default",color:"gold",className:"bg-gold-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import {a}from'./chunk-YTIIAU4W.js';import*as l from'react';import {LuX}from'react-icons/lu';import {Slot}from'@radix-ui/react-slot';import {cva}from'class-variance-authority';import {jsx,jsxs,Fragment}from'react/jsx-runtime';var y=cva("inline-flex items-center justify-center border px-2 font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-4 gap-1 [&>svg]:pointer-events-none overflow-hidden",{variants:{variant:{default:"border-transparent",heavy:"border-transparent",outlined:"bg-white"},color:{gold:"[&>button]:bg-gold-200 [&>button]:text-gold-500",green:"[&>button]:bg-green-300 [&>button]:text-green-900",grey:"[&>button]:bg-gray-200 [&>button]:text-gray-500",purple:"[&>button]:bg-purple-200 [&>button]:text-purple-500",red:"[&>button]:bg-red-200 [&>button]:text-red-400"},size:{default:"py-0.5 text-sm",large:"py-1 text-base"}},compoundVariants:[{variant:"default",color:"gold",className:"bg-gold-200 text-primary [&>svg]:text-gold-400"},{variant:"default",color:"green",className:"bg-green-200 text-green-800 [&>svg]:text-green-800"},{variant:"default",color:"grey",className:"bg-gray-200 text-gray-700 [&>svg]:text-gray-700"},{variant:"default",color:"purple",className:"bg-purple-100 text-purple-500 [&>svg]:text-purple-500"},{variant:"default",color:"red",className:"bg-red-100 text-primary [&>svg]:text-red-500"},{variant:"heavy",color:"gold",className:"bg-gold-300 text-primary [&>svg]:text-black"},{variant:"heavy",color:"green",className:"bg-green-700 text-white [&>svg]:text-white"},{variant:"heavy",color:"grey",className:"bg-gray-300 text-primary [&>svg]:text-black"},{variant:"heavy",color:"purple",className:"bg-purple-400 text-white [&>svg]:text-white"},{variant:"heavy",color:"red",className:"bg-red-500 text-white [&>svg]:text-white"},{variant:"outlined",color:"gold",className:"border-gold-500 text-primary [&>svg]:text-gold-500"},{variant:"outlined",color:"green",className:"border-green-800 text-green-800 [&>svg]:text-green-800"},{variant:"outlined",color:"grey",className:"border-gray-300 text-gray-700 [&>svg]:text-gray-700"},{variant:"outlined",color:"purple",className:"border-purple-500 text-purple-500 [&>svg]:text-purple-500"},{variant:"outlined",color:"red",className:"border-red-500 text-primary [&>svg]:text-red-500"}],defaultVariants:{variant:"default"}});function R({className:n,variant:s,color:g="grey",size:d="default",rounded:i=false,removable:p=false,asChild:t=false,children:r,onRemove:u,...a$1}){let c=t?Slot:"span",b=l.useId();return jsx(c,{"data-slot":"badge",className:a(y({variant:s,color:g,size:d}),i?"rounded-xl":"rounded-sm",n),id:a$1.id??b,...a$1,children:t?r:jsxs(Fragment,{children:[r,p&&jsx("button",{type:"button",className:"flex size-3.5 items-center justify-center rounded-full",onClick:u,"aria-label":"Remove",children:jsx(LuX,{className:"size-2.5"})})]})})}export{y as a,R as b};//# sourceMappingURL=chunk-QLO5JTEM.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-QLO5JTEM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/v2/badge/badge.tsx"],"names":["badgeVariants","cva","Badge","className","variant","color","size","rounded","removable","asChild","children","onRemove","props","Comp","Slot","id","jsx","cn","jsxs","Fragment","LuX"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/v2/badge/badge.tsx"],"names":["badgeVariants","cva","Badge","className","variant","color","size","rounded","removable","asChild","children","onRemove","props","Comp","Slot","id","jsx","cn","jsxs","Fragment","LuX"],"mappings":"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","file":"chunk-QLO5JTEM.js","sourcesContent":["import * as React from 'react';\nimport { LuX } from 'react-icons/lu';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '@/lib/utils';\n\nconst badgeVariants = cva(\n 'inline-flex items-center justify-center border px-2 font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-4 gap-1 [&>svg]:pointer-events-none overflow-hidden',\n {\n variants: {\n variant: {\n default: 'border-transparent',\n heavy: 'border-transparent',\n outlined: 'bg-white',\n },\n color: {\n gold: '[&>button]:bg-gold-200 [&>button]:text-gold-500',\n green: '[&>button]:bg-green-300 [&>button]:text-green-900',\n grey: '[&>button]:bg-gray-200 [&>button]:text-gray-500',\n purple: '[&>button]:bg-purple-200 [&>button]:text-purple-500',\n red: '[&>button]:bg-red-200 [&>button]:text-red-400',\n },\n size: {\n default: 'py-0.5 text-sm',\n large: 'py-1 text-base',\n },\n },\n compoundVariants: [\n // Default variants\n {\n variant: 'default',\n color: 'gold',\n className: 'bg-gold-200 text-primary [&>svg]:text-gold-400',\n },\n {\n variant: 'default',\n color: 'green',\n className: 'bg-green-200 text-green-800 [&>svg]:text-green-800',\n },\n {\n variant: 'default',\n color: 'grey',\n className: 'bg-gray-200 text-gray-700 [&>svg]:text-gray-700',\n },\n {\n variant: 'default',\n color: 'purple',\n className: 'bg-purple-100 text-purple-500 [&>svg]:text-purple-500',\n },\n {\n variant: 'default',\n color: 'red',\n className: 'bg-red-100 text-primary [&>svg]:text-red-500',\n },\n // Heavy variants\n {\n variant: 'heavy',\n color: 'gold',\n className: 'bg-gold-300 text-primary [&>svg]:text-black',\n },\n {\n variant: 'heavy',\n color: 'green',\n className: 'bg-green-700 text-white [&>svg]:text-white',\n },\n {\n variant: 'heavy',\n color: 'grey',\n className: 'bg-gray-300 text-primary [&>svg]:text-black',\n },\n {\n variant: 'heavy',\n color: 'purple',\n className: 'bg-purple-400 text-white [&>svg]:text-white',\n },\n {\n variant: 'heavy',\n color: 'red',\n className: 'bg-red-500 text-white [&>svg]:text-white',\n },\n // Outlined variants\n {\n variant: 'outlined',\n color: 'gold',\n className: 'border-gold-500 text-primary [&>svg]:text-gold-500',\n },\n {\n variant: 'outlined',\n color: 'green',\n className: 'border-green-800 text-green-800 [&>svg]:text-green-800',\n },\n {\n variant: 'outlined',\n color: 'grey',\n className: 'border-gray-300 text-gray-700 [&>svg]:text-gray-700',\n },\n {\n variant: 'outlined',\n color: 'purple',\n className: 'border-purple-500 text-purple-500 [&>svg]:text-purple-500',\n },\n {\n variant: 'outlined',\n color: 'red',\n className: 'border-red-500 text-primary [&>svg]:text-red-500',\n },\n ],\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction Badge({\n className,\n variant,\n color = 'grey',\n size = 'default',\n rounded = false,\n removable = false,\n asChild = false,\n children,\n onRemove,\n ...props\n}: React.ComponentProps<'span'> &\n VariantProps<typeof badgeVariants> & {\n color?: 'gold' | 'green' | 'grey' | 'purple' | 'red';\n size?: 'default' | 'large';\n rounded?: boolean;\n removable?: boolean;\n asChild?: boolean;\n onRemove?: () => void;\n }) {\n const Comp = asChild ? Slot : 'span';\n const id = React.useId();\n\n return (\n <Comp\n data-slot=\"badge\"\n className={cn(\n badgeVariants({ variant, color, size }),\n rounded ? 'rounded-xl' : 'rounded-sm',\n className,\n )}\n id={props.id ?? id}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <>\n {children}\n {removable && (\n <button\n type=\"button\"\n className=\"flex size-3.5 items-center justify-center rounded-full\"\n onClick={onRemove}\n aria-label=\"Remove\"\n >\n <LuX className=\"size-2.5\" />\n </button>\n )}\n </>\n )}\n </Comp>\n );\n}\n\nexport { Badge, badgeVariants };\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var chunkVDWYY353_cjs=require('./chunk-VDWYY353.cjs'),
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkVDWYY353_cjs=require('./chunk-VDWYY353.cjs'),chunkHG3JDJUD_cjs=require('./chunk-HG3JDJUD.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),cmdk=require('cmdk'),lu=require('react-icons/lu'),react=require('react'),jsxRuntime=require('react/jsx-runtime');function he(r,i){let[l,f]=react.useState(r);return react.useEffect(()=>{let s=setTimeout(()=>f(r),i||500);return ()=>{clearTimeout(s);}},[r,i]),l}function D(r,i){if(r.length===0)return {};if(!i)return {"":r};let l={};return r.forEach(f=>{let s=f[i]||"";l[s]||(l[s]=[]),l[s].push(f);}),l}var Q=react.forwardRef(({className:r,...i},l)=>cmdk.useCommandState(s=>s.filtered.count===0)?jsxRuntime.jsx("div",{ref:l,className:chunkQRO22BPZ_cjs.a("py-6 text-center text-sm",r),role:"presentation",...i}):null);Q.displayName="CommandEmpty";var we=react.forwardRef(({value:r,onChange:i,placeholder:l,defaultOptions:f=[],options:s,delay:Z,onSearch:b,onSearchSync:K,loadingIndicator:_,emptyIndicator:k,maxSelected:S=0,onMaxSelected:j,hidePlaceholderWhenSelected:F=true,disabled:g,groupBy:v,className:$,badgeWrapperClassName:ee,badgeClassName:te,getBadgeClassName:ne=()=>"",selectFirstItem:oe=true,triggerSearchOnFocus:M=false,commandProps:m,inputProps:O},re)=>{let d=react.useRef(null),[c,I]=react.useState(false),[ae,P]=react.useState(false),[se,W]=react.useState(false),V=react.useRef(null),[n,H]=react.useState(r||[]),[E,G]=react.useState(D(f,v)),[z,U]=react.useState(""),x=he(z,Z||500),ie=c?lu.LuChevronUp:lu.LuChevronDown;react.useImperativeHandle(re,()=>({selectedValue:[...n],input:d.current,focus:()=>d?.current?.focus(),reset:()=>H([])}),[n]);let C=e=>{V.current&&!V.current.contains(e.target)&&d.current&&!d.current.contains(e.target)&&(I(false),d.current.blur());},L=react.useCallback(e=>{let o=n.some(p=>p.value===e.value),t=!o&&!!S&&n.length>=S;U("");let h=o?n.filter(p=>p.value!==e.value):[...n,e];t&&(h=h.slice(1)),H(h),i?.(h),t&&j?.(n.length);},[S,i,j,n]),le=react.useCallback(e=>{let o=d.current;if(o){if((e.key==="Delete"||e.key==="Backspace")&&o.value===""&&n.length>0){let t=n[n.length-1];t&&!t.fixed&&L(t);}e.key==="Escape"&&o.blur();}},[L,n]);react.useEffect(()=>(c?(document.addEventListener("mousedown",C),document.addEventListener("touchend",C)):(document.removeEventListener("mousedown",C),document.removeEventListener("touchend",C)),()=>{document.removeEventListener("mousedown",C),document.removeEventListener("touchend",C);}),[c]),react.useEffect(()=>{r&&H(r);},[r]),react.useEffect(()=>{if(!s||b)return;let e=D(s||[],v);Object.entries(e).length!==Object.entries(E).length&&G(e);},[f,s,v,b,E]),react.useEffect(()=>{let e=()=>{let t=K?.(x);G(D(t||[],v));};(async()=>{!K||!c||(M&&e(),x&&e());})();},[x,v,c,M]),react.useEffect(()=>{let e=async()=>{W(true);let t=await b?.(x);G(D(t||[],v)),W(false);};(async()=>{!b||!c||(M&&await e(),x&&await e());})();},[x,v,c,M]);let ue=react.useCallback(()=>{if(k)return b&&Object.keys(E).length===0?jsxRuntime.jsx(chunkVDWYY353_cjs.h,{value:"-",disabled:true,children:k}):jsxRuntime.jsx(Q,{children:k})},[k,b,E]),de=react.useCallback(()=>{if(m?.filter)return m.filter},[m?.filter]);return jsxRuntime.jsxs(chunkVDWYY353_cjs.a,{ref:V,...m,onKeyDown:e=>{le(e),m?.onKeyDown?.(e);},className:chunkQRO22BPZ_cjs.a("h-auto overflow-visible bg-transparent",m?.className),shouldFilter:m?.shouldFilter!==void 0?m.shouldFilter:!b,filter:de(),children:[jsxRuntime.jsxs("button",{type:"button",className:chunkQRO22BPZ_cjs.a("items-center justify-between gap-2 p-3 whitespace-nowrap","border-input rounded-md border bg-white",c&&"border-dark-green","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40","disabled:cursor-not-allowed disabled:bg-gray-200","hover:not-disabled:border-dark-green","transition-all outline-none",{"cursor-text":!g&&n.length!==0},"flex w-full",$),onClick:()=>{g||d?.current?.focus();},disabled:g,children:[jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0",ee),children:[n.map(e=>jsxRuntime.jsxs(chunkHG3JDJUD_cjs.b,{className:chunkQRO22BPZ_cjs.a("data-[disabled]:text-secondary data-[disabled]:bg-transparent","data-[fixed]:bg-muted-foreground data-[fixed]:text-muted data-[fixed]:hover:bg-muted-foreground",te,ne(e),"py-0"),color:"green",rounded:true,"data-fixed":e.fixed,"data-disabled":g||void 0,children:[e?.selectedLabel??e.label,jsxRuntime.jsx("button",{type:"button",className:chunkQRO22BPZ_cjs.a("ring-offset-background focus:ring-ring ml-1 rounded-full outline-none focus:ring-2 focus:ring-offset-2",(g||e.fixed)&&"hidden"),onKeyDown:o=>{o.key==="Enter"&&L(e);},onMouseDown:o=>{o.preventDefault(),o.stopPropagation();},onClick:()=>L(e),children:jsxRuntime.jsx(lu.LuX,{className:"text-muted-foreground hover:text-foreground h-3 w-3"})})]},e.value)),jsxRuntime.jsx(cmdk.Command.Input,{...O,ref:d,value:z,disabled:g,onValueChange:e=>{U(e),O?.onValueChange?.(e);},onBlur:e=>{ae||I(false),O?.onBlur?.(e);},onFocus:e=>{I(true),O?.onFocus?.(e);},placeholder:F&&n.length!==0?"":l,className:chunkQRO22BPZ_cjs.a("placeholder:text-secondary flex-1 self-baseline bg-transparent outline-none",{"w-full":F,"ml-1":n.length!==0},O?.className)})]}),jsxRuntime.jsx(ie,{className:chunkQRO22BPZ_cjs.a("size-5 min-w-5 cursor-pointer",g&&"text-gray-600")})]}),jsxRuntime.jsx("div",{className:"relative",children:c&&jsxRuntime.jsx(chunkVDWYY353_cjs.d,{className:"bg-popover text-popover-foreground animate-in absolute top-1 z-10 w-full rounded-md border shadow-xs outline-none",onMouseLeave:()=>{P(false);},onMouseEnter:()=>{P(true);},onMouseUp:()=>{d?.current?.focus();},children:se?_:jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[ue(),!oe&&jsxRuntime.jsx(chunkVDWYY353_cjs.h,{value:"-",className:"hidden"}),Object.entries(E).map(([e,o])=>jsxRuntime.jsx(chunkVDWYY353_cjs.f,{heading:e,className:"h-full overflow-auto",children:jsxRuntime.jsx("div",{className:"flex flex-col gap-1",children:o.map(t=>{let h=n.some(p=>p.value===t.value);return jsxRuntime.jsxs(chunkVDWYY353_cjs.h,{value:t.value,keywords:typeof t.label=="string"?[t.label]:void 0,disabled:t.disable,onMouseDown:p=>{p.preventDefault(),p.stopPropagation();},onSelect:()=>L(t),className:chunkQRO22BPZ_cjs.a("flex cursor-pointer items-center justify-between p-3 hover:bg-green-100 data-[selected=true]:bg-green-100",t.disable&&"text-muted-foreground cursor-default",h&&"bg-green-100"),children:[t.label,h&&jsxRuntime.jsx(lu.LuCheck,{className:"h-4 w-4 text-green-800"})]},t.value)})})},e))]})})})]})});we.displayName="MultiSelect";exports.a=he;exports.b=we;//# sourceMappingURL=chunk-WZVQDUUS.cjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-WZVQDUUS.cjs.map
|