{"version":3,"sources":["../src/form/input-group/input-group.tsx"],"sourcesContent":["import { useId, forwardRef, Children, isValidElement, cloneElement } from \"react\";\nimport type { LabelHTMLAttributes, ReactNode, CSSProperties } from \"react\";\nimport { clsx } from \"@postenbring/hedwig-css/typed-classname\";\nimport { ErrorMessage, type ErrorMessageProps } from \"../error-message\";\n\ninterface InputProps {\n  \"aria-describedby\"?: string;\n  \"aria-invalid\"?: boolean;\n  id?: string;\n  className?: string;\n}\n\nexport interface InputGroupProps {\n  id?: string;\n  className?: string;\n  style?: CSSProperties;\n  variant?: \"default\" | \"white\";\n  errorMessage?: ReactNode;\n  errorMessageProps?: Partial<ErrorMessageProps>;\n  labelProps?: LabelHTMLAttributes<HTMLLabelElement>;\n  label: ReactNode;\n  disabled?: boolean;\n  readOnly?: boolean;\n  /**\n   * `children` must be either a single input element or a render function.\n   *\n   * If you use a render function, make sure you spread the input props to the appropriate element.\n   */\n  children: Exclude<ReactNode, Iterable<ReactNode>> | ((inputProps: InputProps) => ReactNode);\n}\n\nexport const InputGroup = forwardRef<HTMLDivElement, InputGroupProps>(function InputGroup(\n  {\n    id,\n    className,\n    style,\n    variant = \"default\",\n    errorMessage,\n    errorMessageProps,\n    labelProps: { className: labelClassName, ...labelProps } = {},\n    label,\n    disabled,\n    readOnly,\n    children,\n    ...rest\n  },\n  ref,\n) {\n  const errorMessageId = useId();\n  const inputId = useId();\n\n  const renderInput = () => {\n    const inputProps: InputProps = {\n      \"aria-describedby\": errorMessage ? errorMessageId : undefined,\n      \"aria-invalid\": errorMessage ? true : undefined,\n      id: id ?? inputId,\n      className: clsx(\"hds-input-group__input\"),\n    };\n\n    if (typeof children === \"function\") {\n      return children(inputProps);\n    }\n\n    const input: ReactNode = Children.toArray(children)[0];\n\n    if (!isValidElement<InputProps>(input)) {\n      return;\n    }\n\n    return cloneElement<InputProps>(input, {\n      ...inputProps,\n      ...input.props,\n      className: `${inputProps.className} ${input.props.className ?? \"\"}`,\n    });\n  };\n\n  return (\n    <div\n      className={clsx(\n        \"hds-input-group\",\n        {\n          [`hds-input-group--${variant}`]: variant,\n          \"hds-input-group--error\": errorMessage,\n        },\n        className as undefined,\n      )}\n      ref={ref}\n      style={style}\n      {...rest}\n    >\n      <label\n        className={clsx(\"hds-input-group__label\", labelClassName as undefined)}\n        {...labelProps}\n        htmlFor={id ?? inputId}\n      >\n        {label}\n      </label>\n      <div\n        className={clsx(\"hds-input-group__input-wrapper\")}\n        data-disabled={disabled}\n        data-readonly={readOnly}\n      >\n        {renderInput()}\n      </div>\n      <ErrorMessage id={errorMessageId} {...errorMessageProps}>\n        {errorMessage}\n      </ErrorMessage>\n    </div>\n  );\n});\n"],"mappings":";;;;;;;;;;AAAA,SAAS,OAAO,YAAY,UAAU,gBAAgB,oBAAoB;AAE1E,SAAS,YAAY;AA2EjB,SAaE,KAbF;AA9CG,IAAM,aAAa,WAA4C,SAASA,YAC7E,IAcA,KACA;AAfA,eAOc;AAAA,IANZ;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,YAAY,KAA+C,CAAC;AAAA,EAvChE,IAgCE,IAOc,SAAE,aAAW,eAvC7B,IAuCgB,IAAgC,uBAAhC,IAAgC,CAA9B,eAPhB,SAQE;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EA3CJ,IAgCE,IAYK,iBAZL,IAYK;AAAA,IAXH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAKF,QAAM,iBAAiB,MAAM;AAC7B,QAAM,UAAU,MAAM;AAEtB,QAAM,cAAc,MAAM;AAnD5B,QAAAC;AAoDI,UAAM,aAAyB;AAAA,MAC7B,oBAAoB,eAAe,iBAAiB;AAAA,MACpD,gBAAgB,eAAe,OAAO;AAAA,MACtC,IAAI,kBAAM;AAAA,MACV,WAAW,KAAK,wBAAwB;AAAA,IAC1C;AAEA,QAAI,OAAO,aAAa,YAAY;AAClC,aAAO,SAAS,UAAU;AAAA,IAC5B;AAEA,UAAM,QAAmB,SAAS,QAAQ,QAAQ,EAAE,CAAC;AAErD,QAAI,CAAC,eAA2B,KAAK,GAAG;AACtC;AAAA,IACF;AAEA,WAAO,aAAyB,OAAO,gDAClC,aACA,MAAM,QAF4B;AAAA,MAGrC,WAAW,GAAG,WAAW,SAAS,KAAIA,MAAA,MAAM,MAAM,cAAZ,OAAAA,MAAyB,EAAE;AAAA,IACnE,EAAC;AAAA,EACH;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,UACE,CAAC,oBAAoB,OAAO,EAAE,GAAG;AAAA,UACjC,0BAA0B;AAAA,QAC5B;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,OACI,OAXL;AAAA,MAaC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,KAAK,0BAA0B,cAA2B;AAAA,aACjE,aAFL;AAAA,YAGC,SAAS,kBAAM;AAAA,YAEd;AAAA;AAAA,QACH;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,KAAK,gCAAgC;AAAA,YAChD,iBAAe;AAAA,YACf,iBAAe;AAAA,YAEd,sBAAY;AAAA;AAAA,QACf;AAAA,QACA,oBAAC,6CAAa,IAAI,kBAAoB,oBAArC,EACE,yBACH;AAAA;AAAA;AAAA,EACF;AAEJ,CAAC;","names":["InputGroup","_a"]}