{"version":3,"file":"BrowserItem.cjs","sources":["../../../src/components/Browser/BrowserItem.tsx"],"sourcesContent":["import { type ChangeEvent, type FC, type KeyboardEventHandler, memo, useMemo } from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { FaAngleRightIcon } from '../Icon'\nimport { Cluster } from '../Layout'\nimport { Text } from '../Text'\n\nimport { getElementIdFromNode } from './utils'\n\nimport type { ItemNode } from './models'\n\nconst classNameGenerator = tv({\n  slots: {\n    label: [\n      'shr-block shr-rounded-m shr-px-1 shr-py-0.5',\n      'hover:shr-bg-white-darken',\n      'has-[:focus-visible]:shr-focus-indicator',\n    ],\n    input: 'shr-sr-only',\n  },\n  variants: {\n    selected: {\n      true: {\n        label: ['shr-bg-white-darken shr-font-bold', 'hover:shr-bg-column-darken'],\n      },\n      false: {},\n    },\n    hasChildren: {\n      true: {},\n      false: {},\n    },\n  },\n  compoundVariants: [\n    {\n      selected: true,\n      hasChildren: false,\n      className: {\n        label: [\n          'shr-bg-main shr-text-white',\n          'hover:shr-bg-main-darken',\n          'forced-colors:shr-bg-[Highlight]',\n          'has-[:focus-visible]:shr-focus-indicator',\n        ],\n      },\n    },\n  ],\n})\n\ntype Props = {\n  selected: boolean\n  itemValue: ItemNode['value']\n  itemLabel: ItemNode['label']\n  itemHasChildren: boolean\n  tabIndex: 0 | -1\n  columnIndex: number\n  onChangeInput?: (e: ChangeEvent<HTMLInputElement>) => void\n}\n\nconst KEYDOWN_REGEX = /^((Arrow(Right|Left|Up|Down))|Enter| )$/\nconst HANDLE_KEYDOWN: KeyboardEventHandler = (e) => {\n  if (KEYDOWN_REGEX.test(e.key)) {\n    e.preventDefault()\n  }\n}\n\nexport const BrowserItem: FC<Props> = ({\n  selected,\n  itemValue,\n  itemLabel,\n  itemHasChildren,\n  tabIndex,\n  columnIndex,\n  onChangeInput,\n}) => {\n  const inputId = useMemo(() => getElementIdFromNode(itemValue), [itemValue])\n  const classNames = useMemo(() => {\n    const { label, input } = classNameGenerator({ selected, hasChildren: itemHasChildren })\n    return {\n      label: label(),\n      input: input(),\n    }\n  }, [selected, itemHasChildren])\n\n  return (\n    <label htmlFor={inputId} className={classNames.label}>\n      <input\n        className={classNames.input}\n        type=\"radio\"\n        id={inputId}\n        name={`column-${columnIndex}`}\n        value={itemValue}\n        tabIndex={tabIndex}\n        onKeyDown={HANDLE_KEYDOWN}\n        onChange={onChangeInput}\n        checked={selected}\n      />\n      <BodyCluster label={itemLabel} hasChildren={itemHasChildren} />\n    </label>\n  )\n}\n\nconst BodyCluster = memo<{ label: string; hasChildren: boolean }>(({ label, hasChildren }) => (\n  <Cluster align=\"center\" justify=\"space-between\" as=\"span\">\n    <Text>{label}</Text>\n    {hasChildren && <FaAngleRightIcon />}\n  </Cluster>\n))\n"],"names":["tv","useMemo","getElementIdFromNode","_jsxs","_jsx","memo","Cluster","Text","FaAngleRightIcon"],"mappings":";;;;;;;;;;;;;;;;;AAWA,MAAM,kBAAkB,GAAGA,QAAE,CAAC;AAC5B,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE;YACL,6CAA6C;YAC7C,2BAA2B;YAC3B,0CAA0C;AAC3C,SAAA;AACD,QAAA,KAAK,EAAE,aAAa;AACrB,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,CAAC,mCAAmC,EAAE,4BAA4B,CAAC;AAC3E,aAAA;AACD,YAAA,KAAK,EAAE,EAAE;AACV,SAAA;AACD,QAAA,WAAW,EAAE;AACX,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE,EAAE;AACV,SAAA;AACF,KAAA;AACD,IAAA,gBAAgB,EAAE;AAChB,QAAA;AACE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,SAAS,EAAE;AACT,gBAAA,KAAK,EAAE;oBACL,4BAA4B;oBAC5B,0BAA0B;oBAC1B,kCAAkC;oBAClC,0CAA0C;AAC3C,iBAAA;AACF,aAAA;AACF,SAAA;AACF,KAAA;AACF,CAAA,CAAC;AAYF,MAAM,aAAa,GAAG,yCAAyC;AAC/D,MAAM,cAAc,GAAyB,CAAC,CAAC,KAAI;IACjD,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;QAC7B,CAAC,CAAC,cAAc,EAAE;IACpB;AACF,CAAC;MAEY,WAAW,GAAc,CAAC,EACrC,QAAQ,EACR,SAAS,EACT,SAAS,EACT,eAAe,EACf,QAAQ,EACR,WAAW,EACX,aAAa,GACd,KAAI;AACH,IAAA,MAAM,OAAO,GAAGC,aAAO,CAAC,MAAMC,6CAAoB,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAC3E,IAAA,MAAM,UAAU,GAAGD,aAAO,CAAC,MAAK;AAC9B,QAAA,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;QACvF,OAAO;YACL,KAAK,EAAE,KAAK,EAAE;YACd,KAAK,EAAE,KAAK,EAAE;SACf;AACH,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAE/B,IAAA,QACEE,eAAA,CAAA,OAAA,EAAA,EAAO,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,KAAK,EAAA,QAAA,EAAA,CAClDC,0BACE,SAAS,EAAE,UAAU,CAAC,KAAK,EAC3B,IAAI,EAAC,OAAO,EACZ,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,CAAA,OAAA,EAAU,WAAW,CAAA,CAAE,EAC7B,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,cAAc,EACzB,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,QAAQ,EAAA,CACjB,EACFA,cAAA,CAAC,WAAW,EAAA,EAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAA,CAAI,CAAA,EAAA,CACzD;AAEZ;AAEA,MAAM,WAAW,GAAGC,UAAI,CAA0C,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MACvFF,eAAA,CAACG,yCAAO,EAAA,EAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,eAAe,EAAC,EAAE,EAAC,MAAM,EAAA,QAAA,EAAA,CACvDF,cAAA,CAACG,yBAAI,EAAA,EAAA,QAAA,EAAE,KAAK,GAAQ,EACnB,WAAW,IAAIH,cAAA,CAACI,uCAAgB,KAAG,CAAA,EAAA,CAC5B,CACX,CAAC;;;;"}