{"version":3,"sources":["../src/components/Nav/NavCategoryItem/useNavCategoryItem.ts"],"sourcesContent":["'use client';\n\nimport type * as React from 'react';\nimport { getIntrinsicElementProps, mergeCallbacks, slot, useEventCallback } from '@fluentui/react-utilities';\nimport { useNavContext_unstable, useNavCategoryContext_unstable, type OnNavItemSelectData } from '@fluentui/react-nav';\n\nimport type { NavCategoryItemProps, NavCategoryItemState } from './NavCategoryItem.types';\nimport { stringifyDataAttribute } from '../../../utils';\n\n/**\n * Create the state required to render NavCategoryItem.\n *\n * Headless version — no motion, no default expand icon.\n *\n * @param props - props from this instance of NavCategoryItem\n * @param ref - reference to root HTMLButtonElement of NavCategoryItem\n */\nexport const useNavCategoryItem = (\n  props: NavCategoryItemProps,\n  ref: React.Ref<HTMLButtonElement>,\n): NavCategoryItemState => {\n  const { onClick, expandIcon, icon } = props;\n\n  const { open, value } = useNavCategoryContext_unstable();\n\n  const { onRequestNavCategoryItemToggle, selectedCategoryValue } = useNavContext_unstable();\n\n  const onNavCategoryItemClick = useEventCallback(\n    mergeCallbacks(onClick, event =>\n      // Category toggles emit no `value` so consumers can distinguish them from item selection.\n      onRequestNavCategoryItemToggle(event, { type: 'click', event, categoryValue: value } as OnNavItemSelectData),\n    ),\n  );\n\n  const selected = selectedCategoryValue === value && !open;\n  const validAriaCurrent: 'page' | 'false' = selected ? 'page' : 'false';\n\n  const state: NavCategoryItemState = {\n    open,\n    value,\n    selected,\n    root: slot.always(\n      getIntrinsicElementProps('button', {\n        ref,\n        ...props,\n        'aria-current': validAriaCurrent,\n        'aria-expanded': open,\n        onClick: onNavCategoryItemClick,\n      }),\n      { elementType: 'button' },\n    ),\n    icon: slot.optional(icon, {\n      elementType: 'span',\n    }),\n    expandIcon: slot.optional(expandIcon, {\n      elementType: 'span',\n    }),\n    components: {\n      root: 'button',\n      icon: 'span',\n      expandIcon: 'span',\n    },\n  };\n\n  state.root['data-open'] = stringifyDataAttribute(state.open);\n  state.root['data-selected'] = stringifyDataAttribute(state.selected);\n\n  return state;\n};\n"],"names":["useNavCategoryItem","props","ref","onClick","expandIcon","icon","open","value","useNavCategoryContext_unstable","onRequestNavCategoryItemToggle","selectedCategoryValue","useNavContext_unstable","onNavCategoryItemClick","useEventCallback","mergeCallbacks","event","type","categoryValue","selected","validAriaCurrent","state","root","slot","always","getIntrinsicElementProps","elementType","optional","components","stringifyDataAttribute"],"mappings":"AAAA;;;;;+BAiBaA;;;eAAAA;;;gCAdoE;0BACgB;uBAG1D;AAUhC,MAAMA,qBAAqB,CAChCC,OACAC;IAEA,MAAM,EAAEC,OAAO,EAAEC,UAAU,EAAEC,IAAI,EAAE,GAAGJ;IAEtC,MAAM,EAAEK,IAAI,EAAEC,KAAK,EAAE,GAAGC,IAAAA,wCAA8B;IAEtD,MAAM,EAAEC,8BAA8B,EAAEC,qBAAqB,EAAE,GAAGC,IAAAA,gCAAsB;IAExF,MAAMC,yBAAyBC,IAAAA,gCAAgB,EAC7CC,IAAAA,8BAAc,EAACX,SAASY,CAAAA,QACtB,0FAA0F;QAC1FN,+BAA+BM,OAAO;YAAEC,MAAM;YAASD;YAAOE,eAAeV;QAAM;IAIvF,MAAMW,WAAWR,0BAA0BH,SAAS,CAACD;IACrD,MAAMa,mBAAqCD,WAAW,SAAS;IAE/D,MAAME,QAA8B;QAClCd;QACAC;QACAW;QACAG,MAAMC,oBAAI,CAACC,MAAM,CACfC,IAAAA,wCAAwB,EAAC,UAAU;YACjCtB;YACA,GAAGD,KAAK;YACR,gBAAgBkB;YAChB,iBAAiBb;YACjBH,SAASS;QACX,IACA;YAAEa,aAAa;QAAS;QAE1BpB,MAAMiB,oBAAI,CAACI,QAAQ,CAACrB,MAAM;YACxBoB,aAAa;QACf;QACArB,YAAYkB,oBAAI,CAACI,QAAQ,CAACtB,YAAY;YACpCqB,aAAa;QACf;QACAE,YAAY;YACVN,MAAM;YACNhB,MAAM;YACND,YAAY;QACd;IACF;IAEAgB,MAAMC,IAAI,CAAC,YAAY,GAAGO,IAAAA,6BAAsB,EAACR,MAAMd,IAAI;IAC3Dc,MAAMC,IAAI,CAAC,gBAAgB,GAAGO,IAAAA,6BAAsB,EAACR,MAAMF,QAAQ;IAEnE,OAAOE;AACT"}