{"version":3,"file":"index.cjs","sources":["../index.js"],"sourcesContent":["/**\n * Checkbox Plus Prompt for @inquirer/prompts\n * Production-ready implementation with improved error handling and performance\n *\n * @author Mohammad Fares <faressoft.com@gmail.com>\n * @author Behnam (fork maintainer) <@behnamazimi>\n */\n\nimport {\n  createPrompt,\n  useState,\n  useKeypress,\n  usePrefix,\n  usePagination,\n  useMemo,\n  useEffect,\n  makeTheme,\n  isUpKey,\n  isDownKey,\n  isSpaceKey,\n  isEnterKey,\n  ValidationError,\n  Separator,\n} from '@inquirer/core';\nimport { cursorHide } from '@inquirer/ansi';\nimport colors from 'picocolors';\nimport figures from '@inquirer/figures';\nimport pkg from 'lodash';\nconst { isEqual } = pkg;\n\n// Constants\nconst DEFAULT_PAGE_SIZE = 7;\n\n// Theme configuration\nconst checkboxPlusTheme = {\n  icon: {\n    checked: colors.green(figures.radioOn),\n    unchecked: figures.radioOff,\n    disabled: colors.dim(figures.radioOff),\n    cursor: figures.pointer,\n  },\n  style: {\n    disabledChoice: (text) => colors.dim(text),\n    renderSelectedChoices: (selectedChoices) => selectedChoices.map((choice) => choice.short).join(', '),\n    description: (text) => colors.cyan(text),\n    keysHelpTip: (keys) => keys\n      .map(([key, action]) => `${colors.bold(key)} ${colors.dim(action)}`)\n      .join(colors.dim(' • ')),\n    highlight: (text) => colors.gray(text),\n    searching: (text) => colors.cyan(text),\n    searchHint: (text) => colors.dim(colors.cyan(text)),\n    noResults: (text) => colors.yellow(text),\n    error: (text) => colors.red(text),\n    activeItem: (text) => colors.blue(text),\n  },\n  helpMode: 'always',\n  keybindings: [],\n};\n\n// Utility functions\nconst createErrorHandler = (setError, setLoading, enableLogging = true) => (error) => {\n  const message = error?.message || 'An unexpected error occurred';\n  setError(message);\n  setLoading(false);\n  if (enableLogging) {\n    console.error('[checkbox-plus] Error:', error);\n  }\n};\n\nfunction isSelectable(item) {\n  return item && !Separator.isSeparator(item) && !item.disabled;\n}\n\nfunction toggle(item) {\n  return isSelectable(item) ? { ...item, checked: !item.checked } : item;\n}\n\nfunction normalizeChoices(choices) {\n  if (!Array.isArray(choices)) {\n    throw new Error('Choices must be an array');\n  }\n\n  return choices.map((choice, index) => {\n    if (Separator.isSeparator(choice)) {\n      return choice;\n    }\n    \n    if (typeof choice === 'string') {\n      return {\n        value: choice,\n        name: choice,\n        short: choice,\n        checkedName: choice,\n        disabled: false,\n        checked: false,\n      };\n    }\n    \n    if (typeof choice !== 'object' || choice === null) {\n      throw new Error(`Invalid choice at index ${index}: must be string, object, or separator`);\n    }\n    \n    if (choice.value === undefined || choice.value === null) {\n      throw new Error(`Choice at index ${index} must have a value property`);\n    }\n    \n    const name = choice.name ?? String(choice.value);\n    const normalizedChoice = {\n      value: choice.value,\n      name,\n      short: choice.short ?? name,\n      checkedName: choice.checkedName ?? name,\n      disabled: Boolean(choice.disabled),\n      checked: Boolean(choice.checked),\n    };\n    \n    if (choice.description) {\n      normalizedChoice.description = String(choice.description);\n    }\n    \n    return normalizedChoice;\n  });\n}\n\nfunction mergeWithExistingState(newItems, selectedItemsMap) {\n  // Merge new items with global selected state\n  return newItems.map(newItem => {\n    if (Separator.isSeparator(newItem)) {\n      return newItem;\n    }\n    \n    if (isSelectable(newItem)) {\n      // Check if this item is in our global selected state\n      const isSelected = selectedItemsMap.has(newItem.value);\n      return { ...newItem, checked: isSelected };\n    }\n    \n    return newItem;\n  });\n}\n\n/**\n * Checkbox Plus Prompt for @inquirer/prompts\n * \n * A modern checkbox prompt with search/filter capabilities, highlighting,\n * and improved UX for the latest Inquirer.js ecosystem.\n * \n * @param {Object} config - Configuration object\n * @param {string} config.message - The question to display\n * @param {Function} config.source - Async function that returns choices based on search input\n * @param {boolean} [config.searchable=false] - Whether to enable search/filtering\n * @param {boolean} [config.highlight=false] - Whether to highlight the currently selected choice\n * @param {Array} [config.default=[]] - Default selected values\n * @param {Function} [config.validate] - Validation function for selected values\n * @param {number} [config.pageSize=7] - Number of choices to show per page\n * @param {boolean} [config.loop=true] - Whether to loop through choices when navigating\n * @param {boolean} [config.required=false] - Whether at least one choice must be selected\n * @param {string|false} [config.instructions] - Custom instructions to display\n * @param {Object} [config.theme] - Custom theme overrides\n * @param {boolean} [config.enableErrorLogging=true] - Whether to enable error logging\n * @param {Object} [config.answers] - Previous answers in the prompt chain\n * @param {Function} done - Callback function to call when prompt is complete\n * @returns {void}\n * \n * @example\n * ```js\n * import checkboxPlus from 'inquirer-checkbox-plus-plus';\n * \n * const answers = await checkboxPlus({\n *   message: 'Select colors',\n *   searchable: true,\n *   source: async (answers, input) => {\n *     // Return filtered choices based on input\n *     return filteredChoices;\n *   }\n * });\n * ```\n */\nconst checkboxPlusPrompt = createPrompt((config, done) => {\n  // Input validation\n  if (!config) {\n    throw new ValidationError('[checkbox-plus prompt] Configuration is required');\n  }\n  \n  if (!config.source || typeof config.source !== 'function') {\n    throw new ValidationError('[checkbox-plus prompt] source function is required');\n  }\n\n  const {\n    instructions,\n    pageSize = DEFAULT_PAGE_SIZE,\n    loop = true,\n    required = false,\n    validate = () => true,\n    source,\n    searchable = false,\n    highlight = false,\n    default: defaultValues = [],\n  } = config;\n\n  // Validate default values\n  if (!Array.isArray(defaultValues)) {\n    throw new ValidationError('[checkbox-plus prompt] default values must be an array');\n  }\n\n  const theme = makeTheme(checkboxPlusTheme, config.theme);\n  const { keybindings } = theme;\n\n  const [status, setStatus] = useState('idle');\n  const [items, setItems] = useState([]);\n  const [searchQuery, setSearchQuery] = useState('');\n  const [loading, setLoading] = useState(false);\n  const [errorMsg, setError] = useState();\n  const [selectedItems, setSelectedItems] = useState(new Map());\n\n  const prefix = usePrefix({ status, theme });\n  \n  // Create error handler\n  const handleError = createErrorHandler(setError, setLoading, config.enableErrorLogging !== false);\n\n  // Immediate search function\n  const performSearch = async (query) => {\n    if (!source) return;\n    \n    try {\n      setLoading(true);\n      setError(undefined);\n      \n      const choices = await source(config.answers || {}, query);\n      const normalizedChoices = normalizeChoices(choices);\n      const mergedItems = mergeWithExistingState(normalizedChoices, selectedItems);\n      \n      setItems(mergedItems);\n      setLoading(false);\n    } catch (error) {\n      handleError(error);\n    }\n  };\n\n  // Initialize items from source - only run once on mount\n  useEffect(() => {\n    if (!source) return;\n    \n    const initializeItems = async () => {\n      try {\n        setLoading(true);\n        setError(undefined);\n        \n        const choices = await source(config.answers || {}, '');\n        const normalizedChoices = normalizeChoices(choices);\n        \n        // Apply default values and populate global selected state\n        const initialSelectedItems = new Map();\n        const itemsWithDefaults = normalizedChoices.map(choice => {\n          if (isSelectable(choice)) {\n            const isDefault = defaultValues.some(defaultVal => \n              isEqual(choice.value, defaultVal) || \n              (typeof defaultVal === 'object' && isEqual(choice.name, defaultVal.name))\n            );\n            const choiceWithDefault = { ...choice, checked: isDefault };\n            if (isDefault) {\n              initialSelectedItems.set(choice.value, choiceWithDefault);\n            }\n            return choiceWithDefault;\n          }\n          return choice;\n        });\n        \n        setSelectedItems(initialSelectedItems);\n        setItems(itemsWithDefaults);\n        setLoading(false);\n      } catch (error) {\n        handleError(error);\n      }\n    };\n    \n    initializeItems();\n  }, []);\n\n  const bounds = useMemo(() => {\n    const first = items.findIndex(isSelectable);\n    const last = items.findLastIndex(isSelectable);\n    if (first === -1) {\n      return { first: 0, last: 0 };\n    }\n    return { first, last };\n  }, [items]);\n\n  const [active, setActive] = useState(() => bounds.first);\n\n  useKeypress(async (key) => {\n    try {\n      // Handle special keys first (these should always work regardless of searchable mode)\n      if (isEnterKey(key)) {\n        const selection = Array.from(selectedItems.values());\n        \n        if (required && selectedItems.size === 0) {\n          setError('At least one choice must be selected');\n          return;\n        }\n        \n        try {\n          const isValid = await validate(selection.map(choice => choice.value));\n          if (isValid === true) {\n            setStatus('done');\n            done(selection.map((choice) => choice.value));\n          } else {\n            setError(isValid || 'You must select a valid value');\n          }\n        } catch (validationError) {\n          setError(validationError.message || 'Validation failed');\n        }\n        return;\n      }\n      \n      if (isUpKey(key, keybindings) || isDownKey(key, keybindings)) {\n        if (items.length === 0) return;\n        \n        if (loop ||\n            (isUpKey(key, keybindings) && active !== bounds.first) ||\n            (isDownKey(key, keybindings) && active !== bounds.last)) {\n          const offset = isUpKey(key, keybindings) ? -1 : 1;\n          let next = active;\n          do {\n            next = (next + offset + items.length) % items.length;\n          } while (next !== active && (next < 0 || next >= items.length || !isSelectable(items[next])));\n          \n          // Ensure next is within bounds before setting\n          if (next >= 0 && next < items.length) {\n            setActive(next);\n          }\n        }\n        return;\n      }\n      \n      // Handle space key for selection - ALWAYS first priority\n      const isSpace = isSpaceKey(key) || key.name === 'space' || key.name === ' ' || key.sequence === ' ';\n      if (isSpace) {\n        setError(undefined);\n        \n        const activeItem = items[active];\n        if (isSelectable(activeItem)) {\n          const toggledItem = toggle(activeItem);\n          const newSelectedItems = new Map(selectedItems);\n          \n          if (toggledItem.checked) {\n            newSelectedItems.set(activeItem.value, toggledItem);\n          } else {\n            newSelectedItems.delete(activeItem.value);\n          }\n          \n          setSelectedItems(newSelectedItems);\n          setItems(items.map((choice, i) => (i === active ? toggledItem : choice)));\n        }\n        return;\n      }\n      \n      // Handle searchable text input\n      if (searchable && key.name && key.name.length === 1 && !key.ctrl && !key.meta) {\n        if (!isSpace) {\n          setError(undefined);\n          const newQuery = searchQuery + key.name;\n          setSearchQuery(newQuery);\n          performSearch(newQuery);\n          return;\n        }\n      }\n      \n      if (searchable && key.name === 'backspace') {\n        setError(undefined);\n        const newQuery = searchQuery.slice(0, -1);\n        setSearchQuery(newQuery);\n        performSearch(newQuery);\n        return;\n      }\n    } catch (error) {\n      handleError(error);\n    }\n  });\n\n  const baseMessage = theme.style.message(config.message, status);\n  const searchIndicator = searchable && searchQuery && searchQuery.length > 0 ? theme.style.searchHint(` [searching: \"${searchQuery}\"]`) : '';\n  const message = baseMessage + searchIndicator;\n\n  let description;\n  const page = usePagination({\n    items,\n    active,\n    renderItem({ item, isActive }) {\n      if (Separator.isSeparator(item)) {\n        return ` ${item.separator}`;\n      }\n      if (item.disabled) {\n        const disabledLabel = typeof item.disabled === 'string' ? item.disabled : '(disabled)';\n        const checkbox = theme.icon.disabled;\n        const name = item.checked ? item.checkedName : item.name;\n        const cursor = isActive ? theme.icon.cursor : ' ';\n        const text = `${name} ${disabledLabel}`;\n        return `${cursor}${checkbox} ${isActive ? theme.style.activeItem(text) : theme.style.disabledChoice(text)}`;\n      }\n      if (isActive) {\n        description = item.description;\n      }\n      const checkbox = item.checked ? theme.icon.checked : theme.icon.unchecked;\n      const name = item.checked ? item.checkedName : item.name;\n      const cursor = isActive ? theme.icon.cursor : ' ';\n      const text = `${checkbox} ${name}`;\n      return isActive ? theme.style.activeItem(`${cursor}${text}`) : `${cursor}${text}`;\n    },\n    pageSize,\n    loop,\n  });\n\n  if (status === 'done') {\n    const selection = Array.from(selectedItems.values());\n    const answer = theme.style.answer(theme.style.renderSelectedChoices(selection, items));\n    return [prefix, message, answer].filter(Boolean).join(' ');\n  }\n\n  let helpLine;\n  if (theme.helpMode !== 'never' && instructions !== false) {\n    if (typeof instructions === 'string') {\n      helpLine = instructions;\n    } else {\n      // Always show navigation hints, add search info when searching\n      const keys = [\n        ['↑↓', 'navigate'],\n        ['space', 'de/select'],\n      ];\n      if (searchable) {\n        keys.push(['type', 'search']);\n      }\n      const selectedCount = selectedItems.size;\n      if (selectedCount > 0) {\n        keys.push([`${selectedCount} selected`, '']);\n      }\n      keys.push(['⏎', 'submit']);\n      helpLine = theme.style.keysHelpTip(keys);\n    }\n  }\n\n  const lines = [\n    [prefix, message].filter(Boolean).join(' '),\n    loading && searchable && searchQuery ? theme.style.searchHint(`Searching for \"${searchQuery}\"  | • ⌫ backspace`) : (loading ? theme.style.searching('Searching...') : ''),\n    errorMsg ? theme.style.error(errorMsg) : '',\n    !loading && items.length === 0 ? theme.style.noResults('No results found • ⌫ backspace') : '',\n    page,\n    ' ',\n    description ? theme.style.description(description) : '',\n    helpLine,\n  ]\n    .filter(Boolean)\n    .join('\\n')\n    .trimEnd();\n\n  return `${lines}${cursorHide}`;\n});\n\nexport default checkboxPlusPrompt;\nexport { Separator } from '@inquirer/core';"],"names":["Separator","createPrompt","ValidationError","makeTheme","useState","usePrefix","useEffect","useMemo","useKeypress","isEnterKey","isUpKey","isDownKey","isSpaceKey","usePagination","cursorHide"],"mappings":"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"}