{"version":3,"sources":["../src/tag/tag-input.tsx","../src/ui/input.tsx","../src/utils.ts","../src/ui/button.tsx","../src/tag/tag-popover.tsx","../src/ui/popover.tsx","../src/tag/tag-list.tsx","../src/tag/tag.tsx","../src/tag/autocomplete.tsx"],"sourcesContent":["'use client';\n\nimport React, { useMemo } from 'react';\nimport { Input } from '../ui/input';\nimport { Button } from '../ui/button';\nimport { type VariantProps } from 'class-variance-authority';\n// import { CommandInput } from '../ui/command';\nimport { TagPopover } from './tag-popover';\nimport { TagList } from './tag-list';\nimport { tagVariants } from './tag';\nimport { Autocomplete } from './autocomplete';\nimport { cn, uuid } from '../utils';\n\nexport enum Delimiter {\n  Comma = ',',\n  Enter = 'Enter',\n}\n\ntype OmittedInputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'value'>;\n\nexport type Tag = {\n  id: string;\n  text: string;\n};\n\nexport interface TagInputStyleClassesProps {\n  inlineTagsContainer?: string;\n  tagPopover?: {\n    popoverTrigger?: string;\n    popoverContent?: string;\n  };\n  tagList?: {\n    container?: string;\n    sortableList?: string;\n  };\n  autoComplete?: {\n    command?: string;\n    popoverTrigger?: string;\n    popoverContent?: string;\n    commandList?: string;\n    commandGroup?: string;\n    commandItem?: string;\n  };\n  tag?: {\n    body?: string;\n    closeButton?: string;\n  };\n  input?: string;\n  clearAllButton?: string;\n}\n\nexport interface TagInputProps extends OmittedInputProps, VariantProps<typeof tagVariants> {\n  placeholder?: string;\n  tags: Tag[];\n  setTags: React.Dispatch<React.SetStateAction<Tag[]>>;\n  enableAutocomplete?: boolean;\n  autocompleteOptions?: Tag[];\n  maxTags?: number;\n  minTags?: number;\n  readOnly?: boolean;\n  disabled?: boolean;\n  onTagAdd?: (tag: string) => void;\n  onTagRemove?: (tag: string) => void;\n  allowDuplicates?: boolean;\n  validateTag?: (tag: string) => boolean;\n  delimiter?: Delimiter;\n  showCount?: boolean;\n  placeholderWhenFull?: string;\n  sortTags?: boolean;\n  delimiterList?: string[];\n  truncate?: number;\n  minLength?: number;\n  maxLength?: number;\n  usePopoverForTags?: boolean;\n  value?: string | number | readonly string[] | { id: string; text: string }[];\n  autocompleteFilter?: (option: string) => boolean;\n  direction?: 'row' | 'column';\n  onInputChange?: (value: string) => void;\n  customTagRenderer?: (tag: Tag, isActiveTag: boolean) => React.ReactNode;\n  onFocus?: React.FocusEventHandler<HTMLInputElement>;\n  onBlur?: React.FocusEventHandler<HTMLInputElement>;\n  onTagClick?: (tag: Tag) => void;\n  draggable?: boolean;\n  inputFieldPosition?: 'bottom' | 'top';\n  clearAll?: boolean;\n  onClearAll?: () => void;\n  inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n  restrictTagsToAutocompleteOptions?: boolean;\n  inlineTags?: boolean;\n  activeTagIndex: number | null;\n  setActiveTagIndex: React.Dispatch<React.SetStateAction<number | null>>;\n  styleClasses?: TagInputStyleClassesProps;\n  usePortal?: boolean;\n  addOnPaste?: boolean;\n  addTagsOnBlur?: boolean;\n  generateTagId?: () => string;\n}\n\nconst TagInput = React.forwardRef<HTMLInputElement, TagInputProps>((props, ref) => {\n  const {\n    id,\n    placeholder,\n    tags,\n    setTags,\n    variant,\n    size,\n    shape,\n    enableAutocomplete,\n    autocompleteOptions,\n    maxTags,\n    delimiter = Delimiter.Comma,\n    onTagAdd,\n    onTagRemove,\n    allowDuplicates,\n    showCount,\n    validateTag,\n    placeholderWhenFull = 'Max tags reached',\n    sortTags,\n    delimiterList,\n    truncate,\n    autocompleteFilter,\n    borderStyle,\n    textCase,\n    interaction,\n    animation,\n    textStyle,\n    minLength,\n    maxLength,\n    direction = 'row',\n    onInputChange,\n    customTagRenderer,\n    onFocus,\n    onBlur,\n    onTagClick,\n    draggable = false,\n    inputFieldPosition = 'bottom',\n    clearAll = false,\n    onClearAll,\n    usePopoverForTags = false,\n    inputProps = {},\n    restrictTagsToAutocompleteOptions,\n    inlineTags = true,\n    addTagsOnBlur = false,\n    activeTagIndex,\n    setActiveTagIndex,\n    styleClasses = {},\n    disabled = false,\n    usePortal = false,\n    addOnPaste = false,\n    generateTagId = uuid,\n  } = props;\n\n  const [inputValue, setInputValue] = React.useState('');\n  const [tagCount, setTagCount] = React.useState(Math.max(0, tags.length));\n  const inputRef = React.useRef<HTMLInputElement>(null);\n\n  if ((maxTags !== undefined && maxTags < 0) || (props.minTags !== undefined && props.minTags < 0)) {\n    console.warn('maxTags and minTags cannot be less than 0');\n    // error\n    return null;\n  }\n\n  const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const newValue = e.target.value;\n    if (addOnPaste && newValue.includes(delimiter)) {\n      const splitValues = newValue\n        .split(delimiter)\n        .map((v) => v.trim())\n        .filter((v) => v);\n      splitValues.forEach((value) => {\n        if (!value) return; // Skip empty strings from split\n\n        const newTagText = value.trim();\n\n        // Check if the tag is in the autocomplete options if restrictTagsToAutocomplete is true\n        if (restrictTagsToAutocompleteOptions && !autocompleteOptions?.some((option) => option.text === newTagText)) {\n          console.warn('Tag not allowed as per autocomplete options');\n          return;\n        }\n\n        if (validateTag && !validateTag(newTagText)) {\n          console.warn('Invalid tag as per validateTag');\n          return;\n        }\n\n        if (minLength && newTagText.length < minLength) {\n          console.warn(`Tag \"${newTagText}\" is too short`);\n          return;\n        }\n\n        if (maxLength && newTagText.length > maxLength) {\n          console.warn(`Tag \"${newTagText}\" is too long`);\n          return;\n        }\n\n        const newTagId = generateTagId();\n\n        // Add tag if duplicates are allowed or tag does not already exist\n        if (allowDuplicates || !tags.some((tag) => tag.text === newTagText)) {\n          if (maxTags === undefined || tags.length < maxTags) {\n            // Check for maxTags limit\n            const newTag = { id: newTagId, text: newTagText };\n            setTags((prevTags) => [...prevTags, newTag]);\n            onTagAdd?.(newTagText);\n          } else {\n            console.warn('Reached the maximum number of tags allowed');\n          }\n        } else {\n          console.warn(`Duplicate tag \"${newTagText}\" not added`);\n        }\n      });\n      setInputValue('');\n    } else {\n      setInputValue(newValue);\n    }\n    onInputChange?.(newValue);\n  };\n\n  const handleInputFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n    setActiveTagIndex(null); // Reset active tag index when the input field gains focus\n    onFocus?.(event);\n  };\n\n  const handleInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n    if (addTagsOnBlur && inputValue.trim()) {\n      const newTagText = inputValue.trim();\n\n      if (validateTag && !validateTag(newTagText)) {\n        return;\n      }\n\n      if (minLength && newTagText.length < minLength) {\n        console.warn('Tag is too short');\n        return;\n      }\n\n      if (maxLength && newTagText.length > maxLength) {\n        console.warn('Tag is too long');\n        return;\n      }\n\n      if (\n        (allowDuplicates || !tags.some((tag) => tag.text === newTagText)) &&\n        (maxTags === undefined || tags.length < maxTags)\n      ) {\n        const newTagId = generateTagId();\n        setTags([...tags, { id: newTagId, text: newTagText }]);\n        onTagAdd?.(newTagText);\n        setTagCount((prevTagCount) => prevTagCount + 1);\n        setInputValue('');\n      }\n    }\n\n    onBlur?.(event);\n  };\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (delimiterList ? delimiterList.includes(e.key) : e.key === delimiter || e.key === Delimiter.Enter) {\n      e.preventDefault();\n      const newTagText = inputValue.trim();\n\n      // Check if the tag is in the autocomplete options if restrictTagsToAutocomplete is true\n      if (restrictTagsToAutocompleteOptions && !autocompleteOptions?.some((option) => option.text === newTagText)) {\n        // error\n        return;\n      }\n\n      if (validateTag && !validateTag(newTagText)) {\n        return;\n      }\n\n      if (minLength && newTagText.length < minLength) {\n        console.warn('Tag is too short');\n        // error\n        return;\n      }\n\n      // Validate maxLength\n      if (maxLength && newTagText.length > maxLength) {\n        // error\n        console.warn('Tag is too long');\n        return;\n      }\n\n      const newTagId = generateTagId();\n\n      if (\n        newTagText &&\n        (allowDuplicates || !tags.some((tag) => tag.text === newTagText)) &&\n        (maxTags === undefined || tags.length < maxTags)\n      ) {\n        setTags([...tags, { id: newTagId, text: newTagText }]);\n        onTagAdd?.(newTagText);\n        setTagCount((prevTagCount) => prevTagCount + 1);\n      }\n      setInputValue('');\n    } else {\n      switch (e.key) {\n        case 'Delete':\n          if (activeTagIndex !== null) {\n            e.preventDefault();\n            const newTags = [...tags];\n            newTags.splice(activeTagIndex, 1);\n            setTags(newTags);\n            setActiveTagIndex((prev) =>\n              newTags.length === 0 ? null : prev! >= newTags.length ? newTags.length - 1 : prev,\n            );\n            setTagCount((prevTagCount) => prevTagCount - 1);\n            onTagRemove?.(tags[activeTagIndex].text);\n          }\n          break;\n        case 'Backspace':\n          if (activeTagIndex !== null) {\n            e.preventDefault();\n            const newTags = [...tags];\n            newTags.splice(activeTagIndex, 1);\n            setTags(newTags);\n            setActiveTagIndex((prev) => (prev! === 0 ? null : prev! - 1));\n            setTagCount((prevTagCount) => prevTagCount - 1);\n            onTagRemove?.(tags[activeTagIndex].text);\n          }\n          break;\n        case 'ArrowRight':\n          e.preventDefault();\n          if (activeTagIndex === null) {\n            setActiveTagIndex(0);\n          } else {\n            setActiveTagIndex((prev) => (prev! + 1 >= tags.length ? 0 : prev! + 1));\n          }\n          break;\n        case 'ArrowLeft':\n          e.preventDefault();\n          if (activeTagIndex === null) {\n            setActiveTagIndex(tags.length - 1);\n          } else {\n            setActiveTagIndex((prev) => (prev! === 0 ? tags.length - 1 : prev! - 1));\n          }\n          break;\n        case 'Home':\n          e.preventDefault();\n          setActiveTagIndex(0);\n          break;\n        case 'End':\n          e.preventDefault();\n          setActiveTagIndex(tags.length - 1);\n          break;\n      }\n    }\n  };\n\n  const removeTag = (idToRemove: string) => {\n    setTags(tags.filter((tag) => tag.id !== idToRemove));\n    onTagRemove?.(tags.find((tag) => tag.id === idToRemove)?.text || '');\n    setTagCount((prevTagCount) => prevTagCount - 1);\n  };\n\n  const onSortEnd = (oldIndex: number, newIndex: number) => {\n    setTags((currentTags) => {\n      const newTags = [...currentTags];\n      const [removedTag] = newTags.splice(oldIndex, 1);\n      newTags.splice(newIndex, 0, removedTag);\n\n      return newTags;\n    });\n  };\n\n  const handleClearAll = () => {\n    if (!onClearAll) {\n      setActiveTagIndex(-1);\n      setTags([]);\n      return;\n    }\n    onClearAll?.();\n  };\n\n  // const filteredAutocompleteOptions = autocompleteFilter\n  //   ? autocompleteOptions?.filter((option) => autocompleteFilter(option.text))\n  //   : autocompleteOptions;\n  const filteredAutocompleteOptions = useMemo(() => {\n    return (autocompleteOptions || []).filter((option) =>\n      option.text.toLowerCase().includes(inputValue ? inputValue.toLowerCase() : ''),\n    );\n  }, [inputValue, autocompleteOptions]);\n\n  const displayedTags = sortTags ? [...tags].sort() : tags;\n\n  const truncatedTags = truncate\n    ? tags.map((tag) => ({\n        id: tag.id,\n        text: tag.text?.length > truncate ? `${tag.text.substring(0, truncate)}...` : tag.text,\n      }))\n    : displayedTags;\n\n  return (\n    <div\n      className={`w-full flex ${!inlineTags && tags.length > 0 ? 'gap-3' : ''} ${\n        inputFieldPosition === 'bottom' ? 'flex-col' : inputFieldPosition === 'top' ? 'flex-col-reverse' : 'flex-row'\n      }`}\n    >\n      {!usePopoverForTags &&\n        (!inlineTags ? (\n          <TagList\n            tags={truncatedTags}\n            customTagRenderer={customTagRenderer}\n            variant={variant}\n            size={size}\n            shape={shape}\n            borderStyle={borderStyle}\n            textCase={textCase}\n            interaction={interaction}\n            animation={animation}\n            textStyle={textStyle}\n            onTagClick={onTagClick}\n            draggable={draggable}\n            onSortEnd={onSortEnd}\n            onRemoveTag={removeTag}\n            direction={direction}\n            inlineTags={inlineTags}\n            activeTagIndex={activeTagIndex}\n            setActiveTagIndex={setActiveTagIndex}\n            classStyleProps={{\n              tagListClasses: styleClasses?.tagList,\n              tagClasses: styleClasses?.tag,\n            }}\n            disabled={disabled}\n          />\n        ) : (\n          !enableAutocomplete && (\n            <div className=\"w-full\">\n              <div\n                className={cn(\n                  `flex flex-row flex-wrap items-center gap-2 p-2 w-full rounded-md border border-input bg-background text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50`,\n                  styleClasses?.inlineTagsContainer,\n                )}\n              >\n                <TagList\n                  tags={truncatedTags}\n                  customTagRenderer={customTagRenderer}\n                  variant={variant}\n                  size={size}\n                  shape={shape}\n                  borderStyle={borderStyle}\n                  textCase={textCase}\n                  interaction={interaction}\n                  animation={animation}\n                  textStyle={textStyle}\n                  onTagClick={onTagClick}\n                  draggable={draggable}\n                  onSortEnd={onSortEnd}\n                  onRemoveTag={removeTag}\n                  direction={direction}\n                  inlineTags={inlineTags}\n                  activeTagIndex={activeTagIndex}\n                  setActiveTagIndex={setActiveTagIndex}\n                  classStyleProps={{\n                    tagListClasses: styleClasses?.tagList,\n                    tagClasses: styleClasses?.tag,\n                  }}\n                  disabled={disabled}\n                />\n                <Input\n                  ref={inputRef}\n                  id={id}\n                  type=\"text\"\n                  placeholder={maxTags !== undefined && tags.length >= maxTags ? placeholderWhenFull : placeholder}\n                  value={inputValue}\n                  onChange={handleInputChange}\n                  onKeyDown={handleKeyDown}\n                  onFocus={handleInputFocus}\n                  onBlur={handleInputBlur}\n                  {...inputProps}\n                  className={cn(\n                    'border-0 h-5 bg-transparent focus-visible:ring-0 focus-visible:ring-transparent focus-visible:ring-offset-0 flex-1 w-fit',\n                    // className,\n                    styleClasses?.input,\n                  )}\n                  autoComplete={enableAutocomplete ? 'on' : 'off'}\n                  list={enableAutocomplete ? 'autocomplete-options' : undefined}\n                  disabled={disabled || (maxTags !== undefined && tags.length >= maxTags)}\n                />\n              </div>\n            </div>\n          )\n        ))}\n      {enableAutocomplete ? (\n        <div className=\"w-full\">\n          <Autocomplete\n            tags={tags}\n            setTags={setTags}\n            setInputValue={setInputValue}\n            autocompleteOptions={filteredAutocompleteOptions as Tag[]}\n            setTagCount={setTagCount}\n            maxTags={maxTags}\n            onTagAdd={onTagAdd}\n            onTagRemove={onTagRemove}\n            allowDuplicates={allowDuplicates ?? false}\n            inlineTags={inlineTags}\n            usePortal={usePortal}\n            classStyleProps={{\n              command: styleClasses?.autoComplete?.command,\n              popoverTrigger: styleClasses?.autoComplete?.popoverTrigger,\n              popoverContent: styleClasses?.autoComplete?.popoverContent,\n              commandList: styleClasses?.autoComplete?.commandList,\n              commandGroup: styleClasses?.autoComplete?.commandGroup,\n              commandItem: styleClasses?.autoComplete?.commandItem,\n            }}\n          >\n            {!usePopoverForTags ? (\n              !inlineTags ? (\n                // <CommandInput\n                //   placeholder={maxTags !== undefined && tags.length >= maxTags ? placeholderWhenFull : placeholder}\n                //   ref={inputRef}\n                //   value={inputValue}\n                //   disabled={disabled || (maxTags !== undefined && tags.length >= maxTags)}\n                //   onChangeCapture={handleInputChange}\n                //   onKeyDown={handleKeyDown}\n                //   onFocus={handleInputFocus}\n                //   onBlur={handleInputBlur}\n                //   className={cn(\n                //     'w-full',\n                //     // className,\n                //     styleClasses?.input,\n                //   )}\n                // />\n                <Input\n                  ref={inputRef}\n                  id={id}\n                  type=\"text\"\n                  placeholder={maxTags !== undefined && tags.length >= maxTags ? placeholderWhenFull : placeholder}\n                  value={inputValue}\n                  onChange={handleInputChange}\n                  onKeyDown={handleKeyDown}\n                  onFocus={handleInputFocus}\n                  onBlur={handleInputBlur}\n                  {...inputProps}\n                  className={cn(\n                    'border-0 h-5 bg-transparent focus-visible:ring-0 focus-visible:ring-transparent focus-visible:ring-offset-0 flex-1 w-fit',\n                    // className,\n                    styleClasses?.input,\n                  )}\n                  autoComplete={enableAutocomplete ? 'on' : 'off'}\n                  list={enableAutocomplete ? 'autocomplete-options' : undefined}\n                  disabled={disabled || (maxTags !== undefined && tags.length >= maxTags)}\n                />\n              ) : (\n                <div\n                  className={cn(\n                    `flex flex-row flex-wrap items-center p-2 gap-2 h-fit w-full bg-background text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50`,\n                    styleClasses?.inlineTagsContainer,\n                  )}\n                >\n                  <TagList\n                    tags={truncatedTags}\n                    customTagRenderer={customTagRenderer}\n                    variant={variant}\n                    size={size}\n                    shape={shape}\n                    borderStyle={borderStyle}\n                    textCase={textCase}\n                    interaction={interaction}\n                    animation={animation}\n                    textStyle={textStyle}\n                    onTagClick={onTagClick}\n                    draggable={draggable}\n                    onSortEnd={onSortEnd}\n                    onRemoveTag={removeTag}\n                    direction={direction}\n                    inlineTags={inlineTags}\n                    activeTagIndex={activeTagIndex}\n                    setActiveTagIndex={setActiveTagIndex}\n                    classStyleProps={{\n                      tagListClasses: styleClasses?.tagList,\n                      tagClasses: styleClasses?.tag,\n                    }}\n                    disabled={disabled}\n                  />\n                  {/* <CommandInput\n                    placeholder={maxTags !== undefined && tags.length >= maxTags ? placeholderWhenFull : placeholder}\n                    ref={inputRef}\n                    value={inputValue}\n                    disabled={disabled || (maxTags !== undefined && tags.length >= maxTags)}\n                    onChangeCapture={handleInputChange}\n                    onKeyDown={handleKeyDown}\n                    onFocus={handleInputFocus}\n                    onBlur={handleInputBlur}\n                    inlineTags={inlineTags}\n                    className={cn(\n                      'border-0 flex-1 w-fit h-5',\n                      // className,\n                      styleClasses?.input,\n                    )}\n                  /> */}\n                  <Input\n                    ref={inputRef}\n                    id={id}\n                    type=\"text\"\n                    placeholder={maxTags !== undefined && tags.length >= maxTags ? placeholderWhenFull : placeholder}\n                    value={inputValue}\n                    onChange={handleInputChange}\n                    onKeyDown={handleKeyDown}\n                    onFocus={handleInputFocus}\n                    onBlur={handleInputBlur}\n                    {...inputProps}\n                    className={cn(\n                      'border-0 h-5 bg-transparent focus-visible:ring-0 focus-visible:ring-transparent focus-visible:ring-offset-0 flex-1 w-fit',\n                      // className,\n                      styleClasses?.input,\n                    )}\n                    autoComplete={enableAutocomplete ? 'on' : 'off'}\n                    list={enableAutocomplete ? 'autocomplete-options' : undefined}\n                    disabled={disabled || (maxTags !== undefined && tags.length >= maxTags)}\n                  />\n                </div>\n              )\n            ) : (\n              <TagPopover\n                tags={truncatedTags}\n                customTagRenderer={customTagRenderer}\n                variant={variant}\n                size={size}\n                shape={shape}\n                borderStyle={borderStyle}\n                textCase={textCase}\n                interaction={interaction}\n                animation={animation}\n                textStyle={textStyle}\n                onTagClick={onTagClick}\n                draggable={draggable}\n                onSortEnd={onSortEnd}\n                onRemoveTag={removeTag}\n                direction={direction}\n                activeTagIndex={activeTagIndex}\n                setActiveTagIndex={setActiveTagIndex}\n                classStyleProps={{\n                  popoverClasses: styleClasses?.tagPopover,\n                  tagListClasses: styleClasses?.tagList,\n                  tagClasses: styleClasses?.tag,\n                }}\n                disabled={disabled}\n              >\n                {/* <CommandInput\n                  placeholder={maxTags !== undefined && tags.length >= maxTags ? placeholderWhenFull : placeholder}\n                  ref={inputRef}\n                  value={inputValue}\n                  disabled={disabled || (maxTags !== undefined && tags.length >= maxTags)}\n                  onChangeCapture={handleInputChange}\n                  onKeyDown={handleKeyDown}\n                  onFocus={handleInputFocus}\n                  onBlur={handleInputBlur}\n                  className={cn(\n                    'w-full',\n                    // className,\n                    styleClasses?.input,\n                  )}\n                /> */}\n                <Input\n                  ref={inputRef}\n                  id={id}\n                  type=\"text\"\n                  placeholder={maxTags !== undefined && tags.length >= maxTags ? placeholderWhenFull : placeholder}\n                  value={inputValue}\n                  onChange={handleInputChange}\n                  onKeyDown={handleKeyDown}\n                  onFocus={handleInputFocus}\n                  onBlur={handleInputBlur}\n                  {...inputProps}\n                  className={cn(\n                    'border-0 h-5 bg-transparent focus-visible:ring-0 focus-visible:ring-transparent focus-visible:ring-offset-0 flex-1 w-fit',\n                    // className,\n                    styleClasses?.input,\n                  )}\n                  autoComplete={enableAutocomplete ? 'on' : 'off'}\n                  list={enableAutocomplete ? 'autocomplete-options' : undefined}\n                  disabled={disabled || (maxTags !== undefined && tags.length >= maxTags)}\n                />\n              </TagPopover>\n            )}\n          </Autocomplete>\n        </div>\n      ) : (\n        <div className=\"w-full\">\n          {!usePopoverForTags ? (\n            !inlineTags ? (\n              <Input\n                ref={inputRef}\n                id={id}\n                type=\"text\"\n                placeholder={maxTags !== undefined && tags.length >= maxTags ? placeholderWhenFull : placeholder}\n                value={inputValue}\n                onChange={handleInputChange}\n                onKeyDown={handleKeyDown}\n                onFocus={handleInputFocus}\n                onBlur={handleInputBlur}\n                {...inputProps}\n                className={cn(\n                  styleClasses?.input,\n                  // className\n                )}\n                autoComplete={enableAutocomplete ? 'on' : 'off'}\n                list={enableAutocomplete ? 'autocomplete-options' : undefined}\n                disabled={disabled || (maxTags !== undefined && tags.length >= maxTags)}\n              />\n            ) : null\n          ) : (\n            <TagPopover\n              tags={truncatedTags}\n              customTagRenderer={customTagRenderer}\n              variant={variant}\n              size={size}\n              shape={shape}\n              borderStyle={borderStyle}\n              textCase={textCase}\n              interaction={interaction}\n              animation={animation}\n              textStyle={textStyle}\n              onTagClick={onTagClick}\n              draggable={draggable}\n              onSortEnd={onSortEnd}\n              onRemoveTag={removeTag}\n              direction={direction}\n              activeTagIndex={activeTagIndex}\n              setActiveTagIndex={setActiveTagIndex}\n              classStyleProps={{\n                popoverClasses: styleClasses?.tagPopover,\n                tagListClasses: styleClasses?.tagList,\n                tagClasses: styleClasses?.tag,\n              }}\n              disabled={disabled}\n            >\n              <Input\n                ref={inputRef}\n                id={id}\n                type=\"text\"\n                placeholder={maxTags !== undefined && tags.length >= maxTags ? placeholderWhenFull : placeholder}\n                value={inputValue}\n                onChange={handleInputChange}\n                onKeyDown={handleKeyDown}\n                onFocus={handleInputFocus}\n                onBlur={handleInputBlur}\n                {...inputProps}\n                autoComplete={enableAutocomplete ? 'on' : 'off'}\n                list={enableAutocomplete ? 'autocomplete-options' : undefined}\n                disabled={disabled || (maxTags !== undefined && tags.length >= maxTags)}\n                className={cn(\n                  'border-0 w-full',\n                  styleClasses?.input,\n                  // className\n                )}\n              />\n            </TagPopover>\n          )}\n        </div>\n      )}\n\n      {showCount && maxTags && (\n        <div className=\"flex\">\n          <span className=\"text-muted-foreground text-sm mt-1 ml-auto\">\n            {`${tagCount}`}/{`${maxTags}`}\n          </span>\n        </div>\n      )}\n      {clearAll && (\n        <Button type=\"button\" onClick={handleClearAll} className={cn('mt-2', styleClasses?.clearAllButton)}>\n          Clear All\n        </Button>\n      )}\n    </div>\n  );\n});\n\nTagInput.displayName = 'TagInput';\n\nexport { TagInput };\n","import React, { forwardRef } from 'react';\nimport { cn } from '../utils';\n\nexport interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(({ className, type, ...props }, ref) => {\n  return (\n    <input\n      type={type}\n      className={cn(\n        'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\n        className,\n      )}\n      ref={ref}\n      {...props}\n    />\n  );\n});\nInput.displayName = 'Input';\n\nexport { Input };\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n\nexport function uuid() {\n  return crypto.getRandomValues(new Uint32Array(1))[0].toString();\n}\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../utils';\n\nconst buttonVariants = cva(\n  'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n  {\n    variants: {\n      variant: {\n        default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n        destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n        outline: 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n        secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n        ghost: 'hover:bg-accent hover:text-accent-foreground',\n        link: 'text-primary underline-offset-4 hover:underline',\n      },\n      size: {\n        default: 'h-9 px-4 py-2',\n        sm: 'h-8 rounded-md px-3 text-xs',\n        lg: 'h-10 rounded-md px-8',\n        icon: 'h-9 w-9',\n      },\n    },\n    defaultVariants: {\n      variant: 'default',\n      size: 'default',\n    },\n  },\n);\n\nexport interface ButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n    VariantProps<typeof buttonVariants> {\n  asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  ({ className, variant, size, asChild = false, ...props }, ref) => {\n    const Comp = asChild ? Slot : 'button';\n    return <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />;\n  },\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';\nimport { TagInputStyleClassesProps, type Tag as TagType } from './tag-input';\nimport { TagList, TagListProps } from './tag-list';\nimport { Button } from '../ui/button';\nimport { cn } from '../utils';\n\ntype TagPopoverProps = {\n  children: React.ReactNode;\n  tags: TagType[];\n  customTagRenderer?: (tag: TagType, isActiveTag: boolean) => React.ReactNode;\n  activeTagIndex?: number | null;\n  setActiveTagIndex?: (index: number | null) => void;\n  classStyleProps: {\n    popoverClasses: TagInputStyleClassesProps['tagPopover'];\n    tagListClasses: TagInputStyleClassesProps['tagList'];\n    tagClasses: TagInputStyleClassesProps['tag'];\n  };\n  disabled?: boolean;\n  usePortal?: boolean;\n} & TagListProps;\n\nexport const TagPopover: React.FC<TagPopoverProps> = ({\n  children,\n  tags,\n  customTagRenderer,\n  activeTagIndex,\n  setActiveTagIndex,\n  classStyleProps,\n  disabled,\n  usePortal,\n  ...tagProps\n}) => {\n  const triggerContainerRef = useRef<HTMLDivElement | null>(null);\n  const triggerRef = useRef<HTMLButtonElement | null>(null);\n  const popoverContentRef = useRef<HTMLDivElement | null>(null);\n  const inputRef = useRef<HTMLInputElement | null>(null);\n\n  const [popoverWidth, setPopoverWidth] = useState<number>(0);\n  const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n  const [inputFocused, setInputFocused] = useState(false);\n  const [sideOffset, setSideOffset] = useState<number>(0);\n\n  useEffect(() => {\n    const handleResize = () => {\n      if (triggerContainerRef.current && triggerRef.current) {\n        setPopoverWidth(triggerContainerRef.current.offsetWidth);\n        setSideOffset(triggerContainerRef.current.offsetWidth - triggerRef?.current?.offsetWidth);\n      }\n    };\n\n    handleResize(); // Call on mount and layout changes\n\n    window.addEventListener('resize', handleResize); // Adjust on window resize\n    return () => window.removeEventListener('resize', handleResize);\n  }, [triggerContainerRef, triggerRef]);\n\n  // Close the popover when clicking outside of it\n  useEffect(() => {\n    const handleOutsideClick = (event: MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent) => {\n      if (\n        isPopoverOpen &&\n        triggerContainerRef.current &&\n        popoverContentRef.current &&\n        !triggerContainerRef.current.contains(event.target as Node) &&\n        !popoverContentRef.current.contains(event.target as Node)\n      ) {\n        setIsPopoverOpen(false);\n      }\n    };\n\n    document.addEventListener('mousedown', handleOutsideClick);\n\n    return () => {\n      document.removeEventListener('mousedown', handleOutsideClick);\n    };\n  }, [isPopoverOpen]);\n\n  const handleOpenChange = useCallback(\n    (open: boolean) => {\n      if (open && triggerContainerRef.current) {\n        setPopoverWidth(triggerContainerRef.current.offsetWidth);\n      }\n\n      if (open) {\n        inputRef.current?.focus();\n        setIsPopoverOpen(open);\n      }\n    },\n    [inputFocused],\n  );\n\n  const handleInputFocus = (event: React.FocusEvent<HTMLInputElement> | React.FocusEvent<HTMLTextAreaElement>) => {\n    // Only set inputFocused to true if the popover is already open.\n    // This will prevent the popover from opening due to an input focus if it was initially closed.\n    if (isPopoverOpen) {\n      setInputFocused(true);\n    }\n\n    const userOnFocus = (children as React.ReactElement<any>).props.onFocus;\n    if (userOnFocus) userOnFocus(event);\n  };\n\n  const handleInputBlur = (event: React.FocusEvent<HTMLInputElement> | React.FocusEvent<HTMLTextAreaElement>) => {\n    setInputFocused(false);\n\n    // Allow the popover to close if no other interactions keep it open\n    if (!isPopoverOpen) {\n      setIsPopoverOpen(false);\n    }\n\n    const userOnBlur = (children as React.ReactElement<any>).props.onBlur;\n    if (userOnBlur) userOnBlur(event);\n  };\n\n  return (\n    <Popover open={isPopoverOpen} onOpenChange={handleOpenChange} modal={usePortal}>\n      <div\n        className=\"relative flex items-center rounded-md border border-input bg-transparent pr-3\"\n        ref={triggerContainerRef}\n      >\n        {React.cloneElement(children as React.ReactElement<any>, {\n          onFocus: handleInputFocus,\n          onBlur: handleInputBlur,\n          ref: inputRef,\n        })}\n        <PopoverTrigger asChild>\n          <Button\n            ref={triggerRef}\n            variant=\"ghost\"\n            size=\"icon\"\n            role=\"combobox\"\n            className={cn(`hover:bg-transparent`, classStyleProps?.popoverClasses?.popoverTrigger)}\n            onClick={() => setIsPopoverOpen(!isPopoverOpen)}\n          >\n            <svg\n              xmlns=\"http://www.w3.org/2000/svg\"\n              width=\"24\"\n              height=\"24\"\n              viewBox=\"0 0 24 24\"\n              fill=\"none\"\n              stroke=\"currentColor\"\n              strokeWidth=\"2\"\n              strokeLinecap=\"round\"\n              strokeLinejoin=\"round\"\n              className={`lucide lucide-chevron-down h-4 w-4 shrink-0 opacity-50 ${isPopoverOpen ? 'rotate-180' : 'rotate-0'}`}\n            >\n              <path d=\"m6 9 6 6 6-6\"></path>\n            </svg>\n          </Button>\n        </PopoverTrigger>\n      </div>\n      <PopoverContent\n        ref={popoverContentRef}\n        className={cn(`w-full space-y-3`, classStyleProps?.popoverClasses?.popoverContent)}\n        style={{\n          marginLeft: `-${sideOffset}px`,\n          width: `${popoverWidth}px`,\n        }}\n      >\n        <div className=\"space-y-1\">\n          <h4 className=\"text-sm font-medium leading-none\">Entered Tags</h4>\n          <p className=\"text-sm text-muted-foregrounsd text-left\">These are the tags you&apos;ve entered.</p>\n        </div>\n        <TagList\n          tags={tags}\n          customTagRenderer={customTagRenderer}\n          activeTagIndex={activeTagIndex}\n          setActiveTagIndex={setActiveTagIndex}\n          classStyleProps={{\n            tagListClasses: classStyleProps?.tagListClasses,\n            tagClasses: classStyleProps?.tagClasses,\n          }}\n          {...tagProps}\n          disabled={disabled}\n        />\n      </PopoverContent>\n    </Popover>\n  );\n};\n","'use client';\n\nimport * as React from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { cn } from '../utils';\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\nconst PopoverContent = React.forwardRef<\n  React.ElementRef<typeof PopoverPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (\n  <PopoverPrimitive.Portal>\n    <PopoverPrimitive.Content\n      ref={ref}\n      align={align}\n      sideOffset={sideOffset}\n      className={cn(\n        'z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n        className,\n      )}\n      {...props}\n    />\n  </PopoverPrimitive.Portal>\n));\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","import React from 'react';\nimport { TagInputStyleClassesProps, type Tag as TagType } from './tag-input';\nimport { Tag, TagProps } from './tag';\nimport SortableList, { SortableItem } from 'react-easy-sort';\nimport { cn } from '../utils';\n\nexport type TagListProps = {\n  tags: TagType[];\n  customTagRenderer?: (tag: TagType, isActiveTag: boolean) => React.ReactNode;\n  direction?: TagProps['direction'];\n  onSortEnd: (oldIndex: number, newIndex: number) => void;\n  className?: string;\n  inlineTags?: boolean;\n  activeTagIndex?: number | null;\n  setActiveTagIndex?: (index: number | null) => void;\n  classStyleProps: {\n    tagListClasses: TagInputStyleClassesProps['tagList'];\n    tagClasses: TagInputStyleClassesProps['tag'];\n  };\n  disabled?: boolean;\n} & Omit<TagProps, 'tagObj'>;\n\nconst DropTarget: React.FC = () => {\n  return <div className={cn('h-full rounded-md bg-secondary/50')} />;\n};\n\nexport const TagList: React.FC<TagListProps> = ({\n  tags,\n  customTagRenderer,\n  direction,\n  draggable,\n  onSortEnd,\n  className,\n  inlineTags,\n  activeTagIndex,\n  setActiveTagIndex,\n  classStyleProps,\n  disabled,\n  ...tagListProps\n}) => {\n  const [draggedTagId, setDraggedTagId] = React.useState<string | null>(null);\n\n  const handleMouseDown = (id: string) => {\n    setDraggedTagId(id);\n  };\n\n  const handleMouseUp = () => {\n    setDraggedTagId(null);\n  };\n\n  return (\n    <>\n      {!inlineTags ? (\n        <div\n          className={cn(\n            'rounded-md w-full',\n            // className,\n            {\n              'flex flex-wrap gap-2': direction === 'row',\n              'flex flex-col gap-2': direction === 'column',\n            },\n            classStyleProps?.tagListClasses?.container,\n          )}\n        >\n          {draggable ? (\n            <SortableList\n              onSortEnd={onSortEnd}\n              // className=\"flex flex-wrap gap-2 list\"\n              className={`flex flex-wrap gap-2 list ${classStyleProps?.tagListClasses?.sortableList}`}\n              dropTarget={<DropTarget />}\n            >\n              {tags.map((tagObj, index) => (\n                <SortableItem key={tagObj.id}>\n                  <div\n                    onMouseDown={() => handleMouseDown(tagObj.id)}\n                    onMouseLeave={handleMouseUp}\n                    className={cn(\n                      {\n                        'border border-solid border-primary rounded-md': draggedTagId === tagObj.id,\n                      },\n                      'transition-all duration-200 ease-in-out',\n                    )}\n                  >\n                    {customTagRenderer ? (\n                      customTagRenderer(tagObj, index === activeTagIndex)\n                    ) : (\n                      <Tag\n                        tagObj={tagObj}\n                        isActiveTag={index === activeTagIndex}\n                        direction={direction}\n                        draggable={draggable}\n                        tagClasses={classStyleProps?.tagClasses}\n                        {...tagListProps}\n                        disabled={disabled}\n                      />\n                    )}\n                  </div>\n                </SortableItem>\n              ))}\n            </SortableList>\n          ) : (\n            tags.map((tagObj, index) =>\n              customTagRenderer ? (\n                customTagRenderer(tagObj, index === activeTagIndex)\n              ) : (\n                <Tag\n                  key={tagObj.id}\n                  tagObj={tagObj}\n                  isActiveTag={index === activeTagIndex}\n                  direction={direction}\n                  draggable={draggable}\n                  tagClasses={classStyleProps?.tagClasses}\n                  {...tagListProps}\n                  disabled={disabled}\n                />\n              ),\n            )\n          )}\n        </div>\n      ) : (\n        <>\n          {draggable ? (\n            <SortableList onSortEnd={onSortEnd} className=\"flex flex-wrap gap-2 list\" dropTarget={<DropTarget />}>\n              {tags.map((tagObj, index) => (\n                <SortableItem key={tagObj.id}>\n                  <div\n                    onMouseDown={() => handleMouseDown(tagObj.id)}\n                    onMouseLeave={handleMouseUp}\n                    className={cn(\n                      {\n                        'border border-solid border-primary rounded-md': draggedTagId === tagObj.id,\n                      },\n                      'transition-all duration-200 ease-in-out',\n                    )}\n                  >\n                    {customTagRenderer ? (\n                      customTagRenderer(tagObj, index === activeTagIndex)\n                    ) : (\n                      <Tag\n                        tagObj={tagObj}\n                        isActiveTag={index === activeTagIndex}\n                        direction={direction}\n                        draggable={draggable}\n                        tagClasses={classStyleProps?.tagClasses}\n                        {...tagListProps}\n                        disabled={disabled}\n                      />\n                    )}\n                  </div>\n                </SortableItem>\n              ))}\n            </SortableList>\n          ) : (\n            tags.map((tagObj, index) =>\n              customTagRenderer ? (\n                customTagRenderer(tagObj, index === activeTagIndex)\n              ) : (\n                <Tag\n                  key={tagObj.id}\n                  tagObj={tagObj}\n                  isActiveTag={index === activeTagIndex}\n                  direction={direction}\n                  draggable={draggable}\n                  tagClasses={classStyleProps?.tagClasses}\n                  {...tagListProps}\n                  disabled={disabled}\n                />\n              ),\n            )\n          )}\n        </>\n      )}\n    </>\n  );\n};\n","import React from 'react';\nimport { Button } from '../ui/button';\nimport { cn } from '../utils';\nimport { TagInputProps, TagInputStyleClassesProps, type Tag as TagType } from './tag-input';\n\nimport { cva } from 'class-variance-authority';\n\nexport const tagVariants = cva('transition-all border inline-flex items-center text-sm pl-2 rounded-md', {\n  variants: {\n    variant: {\n      default:\n        'bg-secondary text-secondary-foreground hover:bg-secondary/80 disabled:cursor-not-allowed disabled:opacity-50',\n      primary:\n        'bg-primary border-primary text-primary-foreground hover:bg-primary/90 disabled:cursor-not-allowed disabled:opacity-50',\n      destructive:\n        'bg-destructive border-destructive text-destructive-foreground hover:bg-destructive/90 disabled:cursor-not-allowed disabled:opacity-50',\n    },\n    size: {\n      sm: 'text-xs h-7',\n      md: 'text-sm h-8',\n      lg: 'text-base h-9',\n      xl: 'text-lg h-10',\n    },\n    shape: {\n      default: 'rounded-sm',\n      rounded: 'rounded-lg',\n      square: 'rounded-none',\n      pill: 'rounded-full',\n    },\n    borderStyle: {\n      default: 'border-solid',\n      none: 'border-none',\n      dashed: 'border-dashed',\n      dotted: 'border-dotted',\n      double: 'border-double',\n    },\n    textCase: {\n      uppercase: 'uppercase',\n      lowercase: 'lowercase',\n      capitalize: 'capitalize',\n    },\n    interaction: {\n      clickable: 'cursor-pointer hover:shadow-md',\n      nonClickable: 'cursor-default',\n    },\n    animation: {\n      none: '',\n      fadeIn: 'animate-fadeIn',\n      slideIn: 'animate-slideIn',\n      bounce: 'animate-bounce',\n    },\n    textStyle: {\n      normal: 'font-normal',\n      bold: 'font-bold',\n      italic: 'italic',\n      underline: 'underline',\n      lineThrough: 'line-through',\n    },\n  },\n  defaultVariants: {\n    variant: 'default',\n    size: 'md',\n    shape: 'default',\n    borderStyle: 'default',\n    interaction: 'nonClickable',\n    animation: 'fadeIn',\n    textStyle: 'normal',\n  },\n});\n\nexport type TagProps = {\n  tagObj: TagType;\n  variant: TagInputProps['variant'];\n  size: TagInputProps['size'];\n  shape: TagInputProps['shape'];\n  borderStyle: TagInputProps['borderStyle'];\n  textCase: TagInputProps['textCase'];\n  interaction: TagInputProps['interaction'];\n  animation: TagInputProps['animation'];\n  textStyle: TagInputProps['textStyle'];\n  onRemoveTag: (id: string) => void;\n  isActiveTag?: boolean;\n  tagClasses?: TagInputStyleClassesProps['tag'];\n  disabled?: boolean;\n} & Pick<TagInputProps, 'direction' | 'onTagClick' | 'draggable'>;\n\nexport const Tag: React.FC<TagProps> = ({\n  tagObj,\n  direction,\n  draggable,\n  onTagClick,\n  onRemoveTag,\n  variant,\n  size,\n  shape,\n  borderStyle,\n  textCase,\n  interaction,\n  animation,\n  textStyle,\n  isActiveTag,\n  tagClasses,\n  disabled,\n}) => {\n  return (\n    <span\n      key={tagObj.id}\n      draggable={draggable}\n      className={cn(\n        tagVariants({\n          variant,\n          size,\n          shape,\n          borderStyle,\n          textCase,\n          interaction,\n          animation,\n          textStyle,\n        }),\n        {\n          'justify-between w-full': direction === 'column',\n          'cursor-pointer': draggable,\n          'ring-ring ring-offset-2 ring-2 ring-offset-background': isActiveTag,\n        },\n        tagClasses?.body,\n      )}\n      onClick={() => onTagClick?.(tagObj)}\n    >\n      {tagObj.text}\n      <Button\n        type=\"button\"\n        variant=\"ghost\"\n        onClick={(e) => {\n          e.stopPropagation(); // Prevent event from bubbling up to the tag span\n          onRemoveTag(tagObj.id);\n        }}\n        disabled={disabled}\n        className={cn(`py-1 px-3 h-full hover:bg-transparent`, tagClasses?.closeButton)}\n      >\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          width=\"14\"\n          height=\"14\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          strokeWidth=\"2\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          className=\"lucide lucide-x\"\n        >\n          <path d=\"M18 6 6 18\"></path>\n          <path d=\"m6 6 12 12\"></path>\n        </svg>\n      </Button>\n    </span>\n  );\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\n// import { Command, CommandList, CommandItem, CommandGroup, CommandEmpty } from '../ui/command';\nimport { TagInputStyleClassesProps, type Tag as TagType } from './tag-input';\nimport { cn } from '../utils';\nimport { Popover, PopoverContent, PopoverTrigger } from '../ui/popover';\nimport { Button } from '../ui/button';\n\ntype AutocompleteProps = {\n  tags: TagType[];\n  setTags: React.Dispatch<React.SetStateAction<TagType[]>>;\n  setInputValue: React.Dispatch<React.SetStateAction<string>>;\n  setTagCount: React.Dispatch<React.SetStateAction<number>>;\n  autocompleteOptions: TagType[];\n  maxTags?: number;\n  onTagAdd?: (tag: string) => void;\n  onTagRemove?: (tag: string) => void;\n  allowDuplicates: boolean;\n  children: React.ReactNode;\n  inlineTags?: boolean;\n  classStyleProps: TagInputStyleClassesProps['autoComplete'];\n  usePortal?: boolean;\n};\n\nexport const Autocomplete: React.FC<AutocompleteProps> = ({\n  tags,\n  setTags,\n  setInputValue,\n  setTagCount,\n  autocompleteOptions,\n  maxTags,\n  onTagAdd,\n  onTagRemove,\n  allowDuplicates,\n  inlineTags,\n  children,\n  classStyleProps,\n  usePortal,\n}) => {\n  const triggerContainerRef = useRef<HTMLDivElement | null>(null);\n  const triggerRef = useRef<HTMLButtonElement | null>(null);\n  const inputRef = useRef<HTMLInputElement | null>(null);\n  const popoverContentRef = useRef<HTMLDivElement | null>(null);\n\n  const [popoverWidth, setPopoverWidth] = useState<number>(0);\n  const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n  const [inputFocused, setInputFocused] = useState(false);\n  const [popooverContentTop, setPopoverContentTop] = useState<number>(0);\n  const [selectedIndex, setSelectedIndex] = useState<number>(-1);\n\n  // Dynamically calculate the top position for the popover content\n  useEffect(() => {\n    if (!triggerContainerRef.current || !triggerRef.current) return;\n    setPopoverContentTop(\n      triggerContainerRef.current?.getBoundingClientRect().bottom - triggerRef.current?.getBoundingClientRect().bottom,\n    );\n  }, [tags]);\n\n  // Close the popover when clicking outside of it\n  useEffect(() => {\n    const handleOutsideClick = (event: MouseEvent | TouchEvent | React.MouseEvent | React.TouchEvent) => {\n      if (\n        isPopoverOpen &&\n        triggerContainerRef.current &&\n        popoverContentRef.current &&\n        !triggerContainerRef.current.contains(event.target as Node) &&\n        !popoverContentRef.current.contains(event.target as Node)\n      ) {\n        setIsPopoverOpen(false);\n      }\n    };\n\n    document.addEventListener('mousedown', handleOutsideClick);\n\n    return () => {\n      document.removeEventListener('mousedown', handleOutsideClick);\n    };\n  }, [isPopoverOpen]);\n\n  const handleOpenChange = useCallback(\n    (open: boolean) => {\n      if (open && triggerContainerRef.current) {\n        const { width } = triggerContainerRef.current.getBoundingClientRect();\n        setPopoverWidth(width);\n      }\n\n      if (open) {\n        inputRef.current?.focus();\n        setIsPopoverOpen(open);\n      }\n    },\n    [inputFocused],\n  );\n\n  const handleInputFocus = (event: React.FocusEvent<HTMLInputElement> | React.FocusEvent<HTMLTextAreaElement>) => {\n    if (triggerContainerRef.current) {\n      const { width } = triggerContainerRef.current.getBoundingClientRect();\n      setPopoverWidth(width);\n      setIsPopoverOpen(true);\n    }\n\n    // Only set inputFocused to true if the popover is already open.\n    // This will prevent the popover from opening due to an input focus if it was initially closed.\n    if (isPopoverOpen) {\n      setInputFocused(true);\n    }\n\n    const userOnFocus = (children as React.ReactElement<any>).props.onFocus;\n    if (userOnFocus) userOnFocus(event);\n  };\n\n  const handleInputBlur = (event: React.FocusEvent<HTMLInputElement> | React.FocusEvent<HTMLTextAreaElement>) => {\n    setInputFocused(false);\n\n    // Allow the popover to close if no other interactions keep it open\n    if (!isPopoverOpen) {\n      setIsPopoverOpen(false);\n    }\n\n    const userOnBlur = (children as React.ReactElement<any>).props.onBlur;\n    if (userOnBlur) userOnBlur(event);\n  };\n\n  const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n    if (!isPopoverOpen) return;\n\n    switch (event.key) {\n      case 'ArrowUp':\n        event.preventDefault();\n        setSelectedIndex((prevIndex) => (prevIndex <= 0 ? autocompleteOptions.length - 1 : prevIndex - 1));\n        break;\n      case 'ArrowDown':\n        event.preventDefault();\n        setSelectedIndex((prevIndex) => (prevIndex === autocompleteOptions.length - 1 ? 0 : prevIndex + 1));\n        break;\n      case 'Enter':\n        event.preventDefault();\n        if (selectedIndex !== -1) {\n          toggleTag(autocompleteOptions[selectedIndex]);\n          setSelectedIndex(-1);\n        }\n        break;\n    }\n  };\n\n  const toggleTag = (option: TagType) => {\n    // Check if the tag already exists in the array\n    const index = tags.findIndex((tag) => tag.text === option.text);\n\n    if (index >= 0) {\n      // Tag exists, remove it\n      const newTags = tags.filter((_, i) => i !== index);\n      setTags(newTags);\n      setTagCount((prevCount) => prevCount - 1);\n      if (onTagRemove) {\n        onTagRemove(option.text);\n      }\n    } else {\n      // Tag doesn't exist, add it if allowed\n      if (!allowDuplicates && tags.some((tag) => tag.text === option.text)) {\n        // If duplicates aren't allowed and a tag with the same text exists, do nothing\n        return;\n      }\n\n      // Add the tag if it doesn't exceed max tags, if applicable\n      if (!maxTags || tags.length < maxTags) {\n        setTags([...tags, option]);\n        setTagCount((prevCount) => prevCount + 1);\n        setInputValue('');\n        if (onTagAdd) {\n          onTagAdd(option.text);\n        }\n      }\n    }\n    setSelectedIndex(-1);\n  };\n\n  const childrenWithProps = React.cloneElement(children as React.ReactElement<any>, {\n    onKeyDown: handleKeyDown,\n    onFocus: handleInputFocus,\n    onBlur: handleInputBlur,\n    ref: inputRef,\n  });\n\n  return (\n    <div\n      className={cn(\n        'flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground',\n        classStyleProps?.command,\n      )}\n    >\n      <Popover open={isPopoverOpen} onOpenChange={handleOpenChange} modal={usePortal}>\n        <div\n          className=\"relative h-full flex items-center rounded-md border bg-transparent pr-3\"\n          ref={triggerContainerRef}\n        >\n          {childrenWithProps}\n          <PopoverTrigger asChild ref={triggerRef}>\n            <Button\n              variant=\"ghost\"\n              size=\"icon\"\n              role=\"combobox\"\n              className={cn(`hover:bg-transparent ${!inlineTags ? 'ml-auto' : ''}`, classStyleProps?.popoverTrigger)}\n              onClick={() => {\n                setIsPopoverOpen(!isPopoverOpen);\n              }}\n            >\n              <svg\n                xmlns=\"http://www.w3.org/2000/svg\"\n                width=\"24\"\n                height=\"24\"\n                viewBox=\"0 0 24 24\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                strokeWidth=\"2\"\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n                className={`lucide lucide-chevron-down h-4 w-4 shrink-0 opacity-50 ${isPopoverOpen ? 'rotate-180' : 'rotate-0'}`}\n              >\n                <path d=\"m6 9 6 6 6-6\"></path>\n              </svg>\n            </Button>\n          </PopoverTrigger>\n        </div>\n        <PopoverContent\n          ref={popoverContentRef}\n          side=\"bottom\"\n          align=\"start\"\n          forceMount\n          className={cn(`p-0 relative`, classStyleProps?.popoverContent)}\n          style={{\n            top: `${popooverContentTop}px`,\n            marginLeft: `calc(-${popoverWidth}px + 36px)`,\n            width: `${popoverWidth}px`,\n            minWidth: `${popoverWidth}px`,\n            zIndex: 9999,\n          }}\n        >\n          <div\n            className={cn('max-h-[300px] overflow-y-auto overflow-x-hidden', classStyleProps?.commandList)}\n            style={{\n              minHeight: '68px',\n            }}\n            key={autocompleteOptions.length}\n          >\n            {autocompleteOptions.length > 0 ? (\n              <div\n                key={autocompleteOptions.length}\n                role=\"group\"\n                className={cn('overflow-y-auto overflow-hidden p-1 text-foreground', classStyleProps?.commandGroup)}\n                style={{\n                  minHeight: '68px',\n                }}\n              >\n                <span className=\"text-muted-foreground font-medium text-sm py-1.5 px-2 pb-2\">Suggestions</span>\n                <div role=\"separator\" className=\"py-0.5\" />\n                {autocompleteOptions.map((option, index) => {\n                  const isSelected = index === selectedIndex;\n                  return (\n                    <div\n                      key={option.id}\n                      role=\"option\"\n                      aria-selected={isSelected}\n                      className={cn(\n                        'relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 hover:bg-accent',\n                        isSelected && 'bg-accent text-accent-foreground',\n                        classStyleProps?.commandItem,\n                      )}\n                      data-value={option.text}\n                      onClick={() => toggleTag(option)}\n                    >\n                      <div className=\"w-full flex items-center gap-2\">\n                        {option.text}\n                        {tags.some((tag) => tag.text === option.text) && (\n                          <svg\n                            xmlns=\"http://www.w3.org/2000/svg\"\n                            width=\"14\"\n                            height=\"14\"\n                            viewBox=\"0 0 24 24\"\n                            fill=\"none\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"2\"\n                            strokeLinecap=\"round\"\n                            strokeLinejoin=\"round\"\n                            className=\"lucide lucide-check\"\n                          >\n                            <path d=\"M20 6 9 17l-5-5\"></path>\n                          </svg>\n                        )}\n                      </div>\n                    </div>\n                  );\n                })}\n              </div>\n            ) : (\n              <div className=\"py-6 text-center text-sm\">No results found.</div>\n            )}\n          </div>\n        </PopoverContent>\n      </Popover>\n    </div>\n  );\n};\n"],"mappings":"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","names":["React","useMemo","React","forwardRef","clsx","twMerge","cn","inputs","uuid","Input","forwardRef","className","type","props","ref","React","cn","React","Slot","cva","buttonVariants","cva","Button","className","variant","size","asChild","props","ref","Slot","cn","React","useCallback","useEffect","useRef","useState","React","PopoverPrimitive","Popover","PopoverTrigger","PopoverContent","className","align","sideOffset","props","ref","cn","React","React","cva","tagVariants","Tag","tagObj","direction","draggable","onTagClick","onRemoveTag","variant","size","shape","borderStyle","textCase","interaction","animation","textStyle","isActiveTag","tagClasses","disabled","React","cn","Button","e","SortableList","SortableItem","DropTarget","React","cn","TagList","tags","customTagRenderer","direction","draggable","onSortEnd","className","inlineTags","activeTagIndex","setActiveTagIndex","classStyleProps","disabled","tagListProps","_a","_b","draggedTagId","setDraggedTagId","handleMouseDown","id","handleMouseUp","SortableList","tagObj","index","SortableItem","Tag","TagPopover","children","tags","customTagRenderer","activeTagIndex","setActiveTagIndex","classStyleProps","disabled","usePortal","tagProps","_a","_b","triggerContainerRef","useRef","triggerRef","popoverContentRef","inputRef","popoverWidth","setPopoverWidth","useState","isPopoverOpen","setIsPopoverOpen","inputFocused","setInputFocused","sideOffset","setSideOffset","useEffect","handleResize","handleOutsideClick","event","handleOpenChange","useCallback","open","handleInputFocus","userOnFocus","handleInputBlur","userOnBlur","React","Popover","PopoverTrigger","Button","cn","PopoverContent","TagList","React","useCallback","useEffect","useRef","useState","Autocomplete","tags","setTags","setInputValue","setTagCount","autocompleteOptions","maxTags","onTagAdd","onTagRemove","allowDuplicates","inlineTags","children","classStyleProps","usePortal","triggerContainerRef","useRef","triggerRef","inputRef","popoverContentRef","popoverWidth","setPopoverWidth","useState","isPopoverOpen","setIsPopoverOpen","inputFocused","setInputFocused","popooverContentTop","setPopoverContentTop","selectedIndex","setSelectedIndex","useEffect","_a","_b","handleOutsideClick","event","handleOpenChange","useCallback","open","width","handleInputFocus","userOnFocus","handleInputBlur","userOnBlur","handleKeyDown","prevIndex","toggleTag","option","index","tag","newTags","_","i","prevCount","childrenWithProps","React","cn","Popover","PopoverTrigger","Button","PopoverContent","isSelected","Delimiter","TagInput","React","props","ref","_a","_b","_c","_d","_e","_f","id","placeholder","tags","setTags","variant","size","shape","enableAutocomplete","autocompleteOptions","maxTags","delimiter","onTagAdd","onTagRemove","allowDuplicates","showCount","validateTag","placeholderWhenFull","sortTags","delimiterList","truncate","autocompleteFilter","borderStyle","textCase","interaction","animation","textStyle","minLength","maxLength","direction","onInputChange","customTagRenderer","onFocus","onBlur","onTagClick","draggable","inputFieldPosition","clearAll","onClearAll","usePopoverForTags","inputProps","restrictTagsToAutocompleteOptions","inlineTags","addTagsOnBlur","activeTagIndex","setActiveTagIndex","styleClasses","disabled","usePortal","addOnPaste","generateTagId","uuid","inputValue","setInputValue","tagCount","setTagCount","inputRef","handleInputChange","e","newValue","v","value","newTagText","option","newTagId","tag","newTag","prevTags","handleInputFocus","event","handleInputBlur","prevTagCount","handleKeyDown","newTags","prev","removeTag","idToRemove","onSortEnd","oldIndex","newIndex","currentTags","removedTag","handleClearAll","filteredAutocompleteOptions","useMemo","displayedTags","truncatedTags","cn","TagList","Input","Autocomplete","TagPopover","Button"]}