{"version":3,"file":"useNormalizedItems.mjs","names":[],"sources":["../../src/EditorSlashMenu/useNormalizedItems.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport type { EditorSlashMenuGroup, EditorSlashMenuItems, EditorSlashMenuOption } from './type';\nimport { isGroup } from './utils';\n\nexport const useNormalizedItems = (items: EditorSlashMenuItems) => {\n  const resolvedItems = useMemo(() => {\n    const hasAnyGroup = items.some(isGroup);\n    if (!hasAnyGroup) return items as EditorSlashMenuOption[];\n\n    // Normalize: keep order, but ensure all entries are groups.\n    const groups: EditorSlashMenuGroup[] = [];\n    let buffer: EditorSlashMenuOption[] = [];\n\n    const flush = () => {\n      if (buffer.length) {\n        groups.push({ items: buffer });\n        buffer = [];\n      }\n    };\n\n    for (const entry of items) {\n      if (isGroup(entry)) {\n        flush();\n        groups.push(entry);\n      } else {\n        buffer.push(entry);\n      }\n    }\n    flush();\n\n    return groups;\n  }, [items]);\n\n  const hasAnyIcon = useMemo(() => {\n    const walk = (entry: EditorSlashMenuOption | EditorSlashMenuGroup): boolean => {\n      if (isGroup(entry)) return entry.items.some(walk as any);\n      return Boolean(entry.icon);\n    };\n    return items.some(walk as any);\n  }, [items]);\n\n  return { hasAnyIcon, resolvedItems };\n};\n"],"mappings":";;;AAKA,MAAa,sBAAsB,UAAgC;CACjE,MAAM,gBAAgB,cAAc;EAElC,IAAI,CADgB,MAAM,KAAK,OAChB,GAAG,OAAO;EAGzB,MAAM,SAAiC,CAAC;EACxC,IAAI,SAAkC,CAAC;EAEvC,MAAM,cAAc;GAClB,IAAI,OAAO,QAAQ;IACjB,OAAO,KAAK,EAAE,OAAO,OAAO,CAAC;IAC7B,SAAS,CAAC;GACZ;EACF;EAEA,KAAK,MAAM,SAAS,OAClB,IAAI,QAAQ,KAAK,GAAG;GAClB,MAAM;GACN,OAAO,KAAK,KAAK;EACnB,OACE,OAAO,KAAK,KAAK;EAGrB,MAAM;EAEN,OAAO;CACT,GAAG,CAAC,KAAK,CAAC;CAUV,OAAO;EAAE,YARU,cAAc;GAC/B,MAAM,QAAQ,UAAiE;IAC7E,IAAI,QAAQ,KAAK,GAAG,OAAO,MAAM,MAAM,KAAK,IAAW;IACvD,OAAO,QAAQ,MAAM,IAAI;GAC3B;GACA,OAAO,MAAM,KAAK,IAAW;EAC/B,GAAG,CAAC,KAAK,CAES;EAAG;CAAc;AACrC"}