{"version":3,"sources":["../components/form/multi-select.tsx"],"sourcesContent":["\"use client\";\nimport React from 'react';\nimport _isString from 'lodash-es/isString';\nimport _kebabCase from 'lodash-es/kebabCase';\n\nimport { cn } from '../../utils/ui';\nimport { Label } from '../ui/label';\nimport {\n  MultiSelector,\n  MultiSelectorInput,\n  MultiSelectorItem,\n  MultiSelectorList,\n  MultiSelectorTrigger,\n  type MultiSelectValue,\n} from '../ui/multi-select';\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';\n\nexport interface FormMultiSelectProps {\n  id?: string;\n  name: string;\n  label?: string;\n  placeholder?: string;\n  data: MultiSelectValue[] | string[];\n  value: string[];\n  onChange: (values: string[]) => void;\n  classNames?: {\n    wrapper?: string;\n    label?: string;\n    trigger?: string;\n    input?: string;\n    content?: string;\n  };\n  required?: boolean;\n  disabled?: boolean;\n  loop?: boolean;\n}\n\nexport function FormMultiSelect({\n  id,\n  name,\n  label,\n  placeholder = 'Select options...',\n  data,\n  value = [],\n  onChange,\n  classNames,\n  required,\n  disabled,\n  loop = false,\n}: FormMultiSelectProps) {\n  const options: MultiSelectValue[] = React.useMemo(() => {\n    if (!data || data.length === 0) return [];\n    if (_isString(data[0])) {\n      return (data as string[]).map((currentValue) => ({ label: currentValue, value: currentValue }));\n    }\n    return data as MultiSelectValue[];\n  }, [data]);\n\n  const selectedValues = React.useMemo(() => {\n    return value\n      .map((currentValue) => options.find((option) => option.value === currentValue))\n      .filter((option): option is MultiSelectValue => !!option);\n  }, [options, value]);\n\n  const handleValueChange = (newValues: MultiSelectValue[]) => {\n    onChange(newValues.map((currentValue) => currentValue.value));\n  };\n\n  if (!id) id = _kebabCase(name);\n\n  return (\n    <div className={cn('flex flex-col gap-2', classNames?.wrapper)}>\n      {label && (\n        <Label htmlFor={id} className={classNames?.label} required={required}>\n          {label}\n        </Label>\n      )}\n\n      <MultiSelector\n        values={selectedValues}\n        onValuesChange={handleValueChange}\n        loop={loop}\n        disabled={disabled}\n        className=\"p-0\"\n      >\n        <Popover>\n          <PopoverTrigger asChild>\n            <MultiSelectorTrigger className={cn('cursor-pointer', classNames?.trigger)}>\n              <MultiSelectorInput\n                id={id}\n                disabled={disabled}\n                placeholder={selectedValues.length === 0 ? placeholder : ''}\n                className={classNames?.input}\n              />\n            </MultiSelectorTrigger>\n          </PopoverTrigger>\n\n          <PopoverContent\n            align=\"start\"\n            className={cn('w-[var(--radix-popover-trigger-width)] p-0', classNames?.content)}\n          >\n            <MultiSelectorList className=\"static relative border-none shadow-none\">\n              {options.map((option) => (\n                <MultiSelectorItem key={option.value} value={option.value} label={option.label}>\n                  <span>{option.label}</span>\n                </MultiSelectorItem>\n              ))}\n            </MultiSelectorList>\n          </PopoverContent>\n        </Popover>\n      </MultiSelector>\n    </div>\n  );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,OAAO,WAAW;AAClB,OAAO,eAAe;AACtB,OAAO,gBAAgB;AAkChB,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA,QAAQ,CAAC;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAAyB;AACvB,QAAM,UAA8B,MAAM,QAAQ,MAAM;AACtD,QAAI,CAAC,QAAQ,KAAK,WAAW,EAAG,QAAO,CAAC;AACxC,QAAI,UAAU,KAAK,CAAC,CAAC,GAAG;AACtB,aAAQ,KAAkB,IAAI,CAAC,kBAAkB,EAAE,OAAO,cAAc,OAAO,aAAa,EAAE;AAAA,IAChG;AACA,WAAO;AAAA,EACT,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,iBAAiB,MAAM,QAAQ,MAAM;AACzC,WAAO,MACJ,IAAI,CAAC,iBAAiB,QAAQ,KAAK,CAAC,WAAW,OAAO,UAAU,YAAY,CAAC,EAC7E,OAAO,CAAC,WAAuC,CAAC,CAAC,MAAM;AAAA,EAC5D,GAAG,CAAC,SAAS,KAAK,CAAC;AAEnB,QAAM,oBAAoB,CAAC,cAAkC;AAC3D,aAAS,UAAU,IAAI,CAAC,iBAAiB,aAAa,KAAK,CAAC;AAAA,EAC9D;AAEA,MAAI,CAAC,GAAI,MAAK,WAAW,IAAI;AAE7B,SACE,oCAAC,SAAI,WAAW,GAAG,uBAAuB,yCAAY,OAAO,KAC1D,SACC,oCAAC,SAAM,SAAS,IAAI,WAAW,yCAAY,OAAO,YAC/C,KACH,GAGF;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA,WAAU;AAAA;AAAA,IAEV,oCAAC,eACC,oCAAC,kBAAe,SAAO,QACrB,oCAAC,wBAAqB,WAAW,GAAG,kBAAkB,yCAAY,OAAO,KACvE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,aAAa,eAAe,WAAW,IAAI,cAAc;AAAA,QACzD,WAAW,yCAAY;AAAA;AAAA,IACzB,CACF,CACF,GAEA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,WAAW,GAAG,8CAA8C,yCAAY,OAAO;AAAA;AAAA,MAE/E,oCAAC,qBAAkB,WAAU,6CAC1B,QAAQ,IAAI,CAAC,WACZ,oCAAC,qBAAkB,KAAK,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,SACvE,oCAAC,cAAM,OAAO,KAAM,CACtB,CACD,CACH;AAAA,IACF,CACF;AAAA,EACF,CACF;AAEJ;","names":[]}