{"version":3,"file":"IconSelector.cjs","sources":["../../src/IconSelector.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo, useCallback, useRef } from 'react';\nimport { Icon } from '@iconify/react';\nimport { \n  Dialog, \n  DialogTitle, \n  DialogContent, \n  TextField, \n  IconButton,\n  Typography,\n  Box,\n  Select,\n  MenuItem,\n  FormControl,\n  InputLabel,\n  CircularProgress,\n  debounce\n} from '@mui/material';\nimport * as MuiIcons from '@mui/icons-material';\nimport iconListJson from './iconList.json';\n\n// Types and interfaces\ninterface IconList {\n  [setName: string]: IconSet;\n}\n\ninterface IconCategory {\n  [categoryName: string]: string[];\n}\n\ninterface IconSet {\n  prefix: string;\n  categories: IconCategory;\n}\n\n// Props interface for the IconSelector component\nexport interface IconSelectorProps {\n  open: boolean;\n  onClose: () => void;\n  onSelect: (iconName: string) => void;\n  currentIcon?: string;\n}\n\n// Type assertion for the imported icon list\nconst iconList = iconListJson as IconList;\n\n// Simple Dutch translations\nconst translations = {\n  title: \"Kies een icoon\",\n  iconSet: \"Icon Set\",\n  category: \"Categorie\",\n  searchPlaceholder: \"Zoek in alle icon sets en categorieën...\",\n  searching: \"Zoeken...\",\n  noResults: \"Geen iconen gevonden voor\",\n  clearSearch: \"zoekopdracht wissen\"\n};\n\n// Replace individual icon imports with references from MuiIcons\nconst SearchIcon = MuiIcons.Search;\nconst ClearIcon = MuiIcons.Clear;\n\nfunction IconSelector({ \n  open, \n  onClose, \n  onSelect, \n  currentIcon,\n}: IconSelectorProps) {\n  const [searchTerm, setSearchTerm] = useState('');\n  const [selectedIconSet, setSelectedIconSet] = useState('');\n  const [selectedCategory, setSelectedCategory] = useState('');\n  const [loading, setLoading] = useState(true);\n  const [isSearching, setIsSearching] = useState(false);\n  const [debouncedSearchResults, setDebouncedSearchResults] = useState<string[]>([]);\n  const [displaySearchTerm, setDisplaySearchTerm] = useState('');\n  const searchInputRef = useRef<HTMLInputElement>(null);\n\n  // Initialize selected icon set\n  useEffect(() => {\n    if (open && !selectedIconSet && Object.keys(iconList).length > 0) {\n      setSelectedIconSet(Object.keys(iconList)[0]);\n      setLoading(false);\n    }\n  }, [open, selectedIconSet]);\n\n  // Get sorted categories for current icon set (with \"Other\" at the bottom)\n  const categories = useMemo(() => {\n    if (!selectedIconSet) return [];\n    \n    const allCategories = Object.keys(iconList[selectedIconSet].categories);\n    return allCategories\n      .filter(cat => cat !== 'Other')\n      .sort()\n      .concat(['Other']);\n  }, [selectedIconSet]);\n\n  // Initialize selected category when icon set changes\n  useEffect(() => {\n    if (selectedIconSet && categories.length > 0) {\n      setSelectedCategory(categories[0]);\n    }\n  }, [selectedIconSet, categories]);\n\n  // Debounced search function with async processing\n  const debouncedSearch = useCallback(\n    debounce((searchTerm: string) => {\n      if (!searchTerm) {\n        setDebouncedSearchResults([]);\n        setIsSearching(false);\n        return;\n      }\n\n      // Use requestAnimationFrame to prevent UI blocking\n      requestAnimationFrame(() => {\n        // Break up the search into chunks using setTimeout\n        const searchTermLower = searchTerm.toLowerCase();\n        const results: string[] = [];\n        const iconSets = Object.entries(iconList);\n        let currentSetIndex = 0;\n\n        function processNextIconSet() {\n          if (currentSetIndex >= iconSets.length) {\n            // All sets processed\n            setDebouncedSearchResults(results);\n            setIsSearching(false);\n            return;\n          }\n\n          const [, setData] = iconSets[currentSetIndex];\n          Object.entries(setData.categories).forEach(([, icons]) => {\n            const matchingIcons = icons.filter(icon => \n              icon.toLowerCase().includes(searchTermLower)\n            );\n            results.push(...matchingIcons);\n          });\n\n          currentSetIndex++;\n          setTimeout(processNextIconSet, 0);\n        }\n\n        processNextIconSet();\n      });\n    }, 500),\n    []\n  );\n\n  // Handle search input\n  const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    const value = e.target.value;\n    setDisplaySearchTerm(value);\n    if (value) {\n      setIsSearching(true);\n      setSearchTerm(value);\n      debouncedSearch(value);\n    } else {\n      setIsSearching(false);\n      setSearchTerm('');\n      setDebouncedSearchResults([]);\n    }\n  };\n\n  // Get filtered icons based on search term or current selection\n  const filteredIcons = useMemo(() => {\n    if (searchTerm) {\n      return debouncedSearchResults;\n    } else if (selectedIconSet && selectedCategory) {\n      return iconList[selectedIconSet].categories[selectedCategory] || [];\n    }\n    return [];\n  }, [searchTerm, selectedIconSet, selectedCategory, debouncedSearchResults]);\n\n  const handleIconSelect = (iconName: string) => {\n    onSelect(iconName);\n    onClose();\n  };\n\n  // Get icon set and category for an icon (for displaying in search results)\n  const getIconMetadata = (iconName: string) => {\n    for (const [setName, setData] of Object.entries(iconList)) {\n      for (const [categoryName, icons] of Object.entries(setData.categories)) {\n        if (icons.includes(iconName)) {\n          return { setName, categoryName };\n        }\n      }\n    }\n    return { setName: '', categoryName: '' };\n  };\n\n  // Add event listener for keypress\n  useEffect(() => {\n    if (!open) return;\n\n    const handleKeyPress = (e: KeyboardEvent) => {\n      const target = e.target as HTMLElement;\n      if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {\n        return;\n      }\n      \n      // Ignore special keys like Control, Alt, etc.\n      if (e.ctrlKey || e.altKey || e.metaKey) {\n        return;\n      }\n\n      // Focus the search input and start typing\n      if (searchInputRef.current) {\n        searchInputRef.current.focus();\n      }\n    };\n\n    window.addEventListener('keydown', handleKeyPress);\n    return () => window.removeEventListener('keydown', handleKeyPress);\n  }, [open]);\n\n  if (loading) {\n    return (\n      <Dialog open={open} onClose={onClose}>\n        <DialogContent>\n          <Box display=\"flex\" justifyContent=\"center\" alignItems=\"center\" p={4}>\n            <CircularProgress />\n          </Box>\n        </DialogContent>\n      </Dialog>\n    );\n  }\n\n  return (\n    <Dialog \n      open={open} \n      onClose={onClose}\n      maxWidth=\"md\"\n      fullWidth\n    >\n      <DialogTitle>\n        {translations.title}\n      </DialogTitle>\n      <DialogContent>\n        <Box sx={{ mb: 2 }}>\n          <Box display=\"grid\" gridTemplateColumns={{ xs: '1fr', md: '1fr 1fr' }} gap={2}>\n            <Box>\n              <FormControl fullWidth margin=\"normal\">\n                <InputLabel>{translations.iconSet}</InputLabel>\n                <Select\n                  value={selectedIconSet}\n                  onChange={(e) => {\n                    setSelectedIconSet(e.target.value);\n                    setSelectedCategory('');\n                  }}\n                  label={translations.iconSet}\n                  disabled={!!searchTerm}\n                >\n                  {Object.keys(iconList).map((set) => (\n                    <MenuItem key={set} value={set}>{set}</MenuItem>\n                  ))}\n                </Select>\n              </FormControl>\n            </Box>\n            <Box>\n              <FormControl fullWidth margin=\"normal\">\n                <InputLabel>{translations.category}</InputLabel>\n                <Select\n                  value={selectedCategory}\n                  onChange={(e) => setSelectedCategory(e.target.value)}\n                  label={translations.category}\n                  disabled={!!searchTerm}\n                >\n                  {categories.map((category) => (\n                    <MenuItem \n                      key={category} \n                      value={category}\n                      sx={category === 'Other' ? {\n                        borderTop: '1px solid',\n                        borderColor: 'divider',\n                        marginTop: 1,\n                        paddingTop: 1\n                      } : {}}\n                    >\n                      {category}\n                    </MenuItem>\n                  ))}\n                </Select>\n              </FormControl>\n            </Box>\n          </Box>\n          <TextField\n            inputRef={searchInputRef}\n            fullWidth\n            placeholder={translations.searchPlaceholder}\n            value={displaySearchTerm}\n            onChange={handleSearchChange}\n            margin=\"normal\"\n            InputProps={{\n              startAdornment: (\n                <SearchIcon />\n              ),\n              endAdornment: isSearching ? (\n                <CircularProgress size={20} />\n              ) : displaySearchTerm && (\n                <IconButton\n                  size=\"small\"\n                  onClick={() => {\n                    setDisplaySearchTerm('');\n                    setSearchTerm('');\n                    setDebouncedSearchResults([]);\n                    setIsSearching(false);\n                  }}\n                  edge=\"end\"\n                  aria-label={translations.clearSearch}\n                >\n                  <ClearIcon fontSize=\"small\" />\n                </IconButton>\n              )\n            }}\n          />\n        </Box>\n\n        {isSearching ? (\n          <Box sx={{ display: 'flex', justifyContent: 'center', p: 4 }}>\n            <Typography color=\"text.secondary\">\n              {translations.searching}\n            </Typography>\n          </Box>\n        ) : (\n          <>\n            <Box \n              display=\"grid\" \n              gridTemplateColumns={{\n                xs: 'repeat(2, 1fr)',\n                sm: 'repeat(3, 1fr)',\n                md: 'repeat(6, 1fr)'\n              }}\n              gap={1}\n            >\n              {filteredIcons.map((iconName) => (\n                <IconButton \n                  key={iconName}\n                  onClick={() => handleIconSelect(iconName)}\n                  sx={{\n                    flexDirection: 'column',\n                    width: '100%',\n                    height: '80px',\n                    '&:hover': {\n                      backgroundColor: 'action.hover',\n                    },\n                    ...(currentIcon === iconName && {\n                      backgroundColor: 'action.selected',\n                    }),\n                  }}\n                >\n                  <Icon \n                    icon={iconName} \n                    width=\"24\" \n                    height=\"24\" \n                    style={{ \n                      color: 'primary.main',\n                    }}\n                  />\n                  <Typography \n                    variant=\"caption\" \n                    sx={{ \n                      mt: 1, \n                      textAlign: 'center',\n                      maxWidth: '100%',\n                      overflow: 'hidden',\n                      textOverflow: 'ellipsis',\n                      whiteSpace: 'nowrap'\n                    }}\n                  >\n                    {iconName.split(':')[1]}\n                  </Typography>\n                  {searchTerm && (\n                    <Box sx={{ mt: 0.5, display: 'flex', gap: 0.5, flexWrap: 'wrap', justifyContent: 'center' }}>\n                      <Typography variant=\"caption\" color=\"text.secondary\" sx={{ fontSize: '0.7rem' }}>\n                        {getIconMetadata(iconName).setName}\n                      </Typography>\n                    </Box>\n                  )}\n                </IconButton>\n              ))}\n            </Box>\n\n            {searchTerm && filteredIcons.length === 0 && (\n              <Box sx={{ mt: 4, textAlign: 'center' }}>\n                <Typography color=\"text.secondary\">\n                  {translations.noResults} \"{searchTerm}\"\n                </Typography>\n              </Box>\n            )}\n          </>\n        )}\n      </DialogContent>\n    </Dialog>\n  );\n}\n\nexport default IconSelector;"],"names":["iconListJson","MuiIcons","useState","useRef","useEffect","useMemo","useCallback","debounce","_jsx","Dialog","DialogContent","Box","CircularProgress","_jsxs","DialogTitle","FormControl","InputLabel","Select","MenuItem","TextField","IconButton","Typography","_Fragment","Icon"],"mappings":"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"}