{"version":3,"file":"getUserControlledFields.mjs","sources":[""],"sourcesContent":["import type { RefObject } from \"react\";\r\nimport { getElRefHelper } from \"./react/getElRefHelper\";\r\n\r\ntype TFormEl = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | HTMLButtonElement | HTMLFieldSetElement;\r\n\r\nconst isReadOnly = (\r\n  el: TFormEl\r\n): el is HTMLInputElement | HTMLTextAreaElement => {\r\n  return (\r\n    el instanceof HTMLInputElement ||\r\n    el instanceof HTMLTextAreaElement\r\n  );\r\n};\r\n\r\n/**\n * Получает список полей формы, доступных для редактирования пользователем\n * @param formRef{HTMLFormElement | null}\n * @returns {HTMLElement[]} Возвращает массив доступных пользователю полей формы (без `hidden`, `file`, `button`, `disabled` и `readonly`).\n * @example\n * import { getUserControlledFields } from \"@delement/ui/utils\";\n *\n * const form = document.querySelector(\"form\");\n * const fields = getUserControlledFields(form as HTMLFormElement);\n */\nexport const getUserControlledFields = (formRef: RefObject<HTMLFormElement> | HTMLFormElement | null): HTMLElement[] => {\n  const form = getElRefHelper(formRef) as HTMLFormElement | null;\n  if (form) {\n    const elements = [ ...form.elements ] as TFormEl[];\n    const defaultFields = elements\n      .filter((el) => {\n        const {\n          type,\n          tagName,\n          disabled,\n          hidden,\n        } = el;\n        const readOnly = isReadOnly(el) ? el.readOnly : false;\n\n        return type !== \"hidden\" &&\n          type !== \"file\" &&\n          tagName.toLowerCase() !== \"button\" &&\n          !disabled &&\n          !readOnly &&\n          !hidden;\n      });\n    const customFields = elements.filter((el) => {\n      const input = el as TFormEl;\n      const readOnly = isReadOnly(input) ? input.readOnly : false;\n      return input.hasAttribute(\"data-js-component-input\") &&\n        !input.disabled && !readOnly;\n    });\n\n    return [ ...new Set([ ...defaultFields, ...customFields ]) ];\n  } else {\n    return [];\n  }\n};\n"],"names":["isReadOnly","el","HTMLInputElement","HTMLTextAreaElement","getUserControlledFields","formRef","form","getElRefHelper","elements","defaultFields","filter","type","tagName","disabled","hidden","readOnly","toLowerCase","customFields","input","hasAttribute","Set"],"mappings":"uDAKA,MAAMA,WACJC,IAGEA,cAAcC,kBACdD,cAAcE;;;;;;;;;;GAcX,MAAMC,wBAA2BC,UACtC,MAAMC,KAAOC,eAAeF,SAC5B,GAAIC,KAAM,CACR,MAAME,SAAW,IAAKF,KAAKE,UAC3B,MAAMC,cAAgBD,SACnBE,OAAQT,KACP,MAAMU,KACJA,KAAIC,QACJA,QAAOC,SACPA,SAAQC,OACRA,QACEb,GACJ,MAAMc,SAAWf,WAAWC,IAAMA,GAAGc,SAAW,MAEhD,OAAOJ,OAAS,UACdA,OAAS,QACTC,QAAQI,gBAAkB,WACzBH,WACAE,WACAD,SAEP,MAAMG,aAAeT,SAASE,OAAQT,KACpC,MAAMiB,MAAQjB,GACd,MAAMc,SAAWf,WAAWkB,OAASA,MAAMH,SAAW,MACtD,OAAOG,MAAMC,aAAa,6BACvBD,MAAML,WAAaE,WAGxB,MAAO,IAAK,IAAIK,IAAI,IAAKX,iBAAkBQ,eAC7C,MACE,MAAO"}