{"version":3,"file":"index-CkmUXhUX.cjs","sources":["../src/shared/icons/XMarkIcon.tsx","../src/shared/inputs/ItemList/ItemRow.tsx","../src/shared/inputs/ItemList/index.tsx"],"sourcesContent":["import * as React from \"react\";\n\nexport interface XMarkIconProps {\n  svgAttrs?: SVGProps;\n}\n\nimport { SVGProps } from \"../types\";\n\nfunction XMarkIcon(props: XMarkIconProps) {\n  return (\n    <svg\n      fill=\"none\"\n      viewBox=\"0 0 24 24\"\n      stroke-width=\"1.5\"\n      stroke=\"currentColor\"\n      {...props.svgAttrs}\n    >\n      <path\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n        d=\"M6 18 18 6M6 6l12 12\"\n      />\n    </svg>\n  );\n}\n\nexport default XMarkIcon;\n","\"use client\";\nimport * as React from \"react\";\n\ntype ItemRowProps = {\n  inputType: \"text\" | \"url\" | \"number\" | \"password\";\n  item: string;\n  index: number;\n  handleItemUpdate: (newItem: string, index: number) => void;\n  handleItemDelete: (index: number) => void;\n  handleBlur: (index: number) => void;\n  isDuplicateItem?: boolean;\n  disableDelete?: boolean;\n  disabled?: boolean;\n  classNames: {\n    input: string;\n  };\n};\nimport XMarkIcon from \"../../icons/XMarkIcon\";\nimport styles from \"../index.module.css\";\nimport itemStyles from \"./index.module.css\";\n\nfunction ItemRow(props: ItemRowProps) {\n  return (\n    <div className={itemStyles.row}>\n      <input\n        name=\"item\"\n        type={props.inputType || \"text\"}\n        className={`${props.classNames.input} ${styles[\"input-sm\"]} ${itemStyles[\"input\"]}`}\n        value={props.item}\n        onChange={(event) =>\n          props.handleItemUpdate(event.target.value, props.index)\n        }\n        onBlur={(event) => props.handleBlur(props.index)}\n        required\n        disabled={props.disabled}\n      />\n      <button\n        type=\"button\"\n        onClick={(event) => props.handleItemDelete(props.index)}\n        disabled={props.disableDelete}\n      >\n        <XMarkIcon\n          svgAttrs={{\n            class: itemStyles[\"svg\"],\n          }}\n        />\n      </button>\n    </div>\n  );\n}\n\nexport default ItemRow;\n","\"use client\";\nimport * as React from \"react\";\nimport { useState } from \"react\";\n\ntype ItemListProps = {\n  label: string;\n  inputType: \"text\" | \"url\" | \"number\" | \"password\";\n  classNames?: {\n    label?: string;\n    input?: string;\n  };\n  currentlist: string | string[];\n  fieldName: string;\n  handleItemListUpdate: (fieldName: string, newList: string[]) => void;\n};\nimport ItemRow from \"./ItemRow\";\nimport styles from \"../index.module.css\";\nimport listStyles from \"./index.module.css\";\nimport cssClassAssembler from \"../../../sso/utils/cssClassAssembler\";\nimport Button from \"../../Button/index\";\nimport ExclamationTriangle from \"../../icons/ExclamationTriangle\";\n\nfunction ItemList(props: ItemListProps) {\n  const [duplicateEntryIndex, setDuplicateEntryIndex] = useState(\n    () => undefined\n  );\n\n  function list() {\n    return Array.isArray(props.currentlist)\n      ? props.currentlist\n      : [props.currentlist];\n  }\n\n  function addAnother() {\n    props.handleItemListUpdate(props.fieldName, [...list(), \"\"]);\n  }\n\n  function handleItemUpdate(newItem: string, index: number) {\n    const newList = [...list()];\n    newList[index] = newItem;\n    props.handleItemListUpdate(props.fieldName, newList);\n  }\n\n  function checkDuplicates(index: number) {\n    const _item = list()[index];\n    // search backwards\n    const _firstIndex = list().indexOf(_item);\n    if (_firstIndex !== index) {\n      setDuplicateEntryIndex(index);\n      return;\n    } else if (duplicateEntryIndex === index) {\n      setDuplicateEntryIndex(undefined);\n    }\n    // search forwards\n    const _nextIndex = list()\n      .slice(index + 1)\n      .indexOf(_item);\n    if (_nextIndex !== -1) {\n      setDuplicateEntryIndex(index);\n    } else if (duplicateEntryIndex === index) {\n      setDuplicateEntryIndex(undefined);\n    }\n  }\n\n  function handleItemDelete(index: number) {\n    const _itemToDelete = list()[index];\n    if (\n      duplicateEntryIndex !== undefined &&\n      (duplicateEntryIndex === index ||\n        _itemToDelete === list()[duplicateEntryIndex])\n    ) {\n      setDuplicateEntryIndex(undefined);\n    }\n    props.handleItemListUpdate(\n      props.fieldName,\n      list().filter((_, i) => i !== index)\n    );\n  }\n\n  function cssClass() {\n    return {\n      label: cssClassAssembler(props.classNames?.label, styles.label),\n      input: cssClassAssembler(props.classNames?.input, styles.input),\n    };\n  }\n\n  return (\n    <fieldset className={styles.fieldset}>\n      <legend className={cssClass().label}>{props.label}</legend>\n      <div className={listStyles.rowContainer}>\n        {list()?.map((item, index) => (\n          <div key={index}>\n            <ItemRow\n              inputType={props.inputType}\n              item={item}\n              index={index}\n              isDuplicateItem={duplicateEntryIndex === index}\n              handleItemUpdate={handleItemUpdate}\n              handleItemDelete={handleItemDelete}\n              disableDelete={index === 0 && list().length === 1}\n              handleBlur={checkDuplicates}\n              disabled={\n                duplicateEntryIndex !== undefined &&\n                duplicateEntryIndex !== index\n              }\n              classNames={{\n                input: cssClass().input,\n              }}\n            />\n            {duplicateEntryIndex === index ? (\n              <span className={listStyles.error}>\n                <ExclamationTriangle\n                  svgAttrs={{\n                    class: listStyles[\"svg\"],\n                    \"aria-hidden\": true,\n                  }}\n                />\n                Duplicate entries not allowed.\n              </span>\n            ) : null}\n          </div>\n        ))}\n        <div>\n          <Button\n            type=\"button\"\n            variant=\"outline\"\n            name=\"Add URL\"\n            classNames={listStyles[\"add\"]}\n            onClick={(event) => addAnother()}\n            disabled={duplicateEntryIndex !== undefined}\n          />\n        </div>\n      </div>\n    </fieldset>\n  );\n}\n\nexport default ItemList;\n"],"names":["XMarkIcon","props","jsx","ItemRow","jsxs","itemStyles","styles","event","ItemList","duplicateEntryIndex","setDuplicateEntryIndex","useState","list","addAnother","handleItemUpdate","newItem","index","newList","checkDuplicates","_item","handleItemDelete","_itemToDelete","_","i","cssClass","cssClassAssembler","_a","_b","listStyles","item","ExclamationTriangle","Button"],"mappings":"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"}