{"version":3,"file":"getHTMLCustomComponents.mjs","names":[],"sources":["../../../../src/transpiler/html/getHTMLCustomComponents.ts"],"sourcesContent":["const parseAttributes = (attributesString: string): Record<string, string> => {\n  const attributes: Record<string, string> = {};\n\n  if (!attributesString?.trim()) {\n    return attributes;\n  }\n\n  // Regex to match attribute names\n  // Matches: name=\"value\", name='value', name=value, or just name\n  const attrRegex =\n    /([a-zA-Z0-9-:_@]+)(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^>\\s]+))?/g;\n\n  const matches = [...attributesString.matchAll(attrRegex)];\n\n  matches.forEach((match) => {\n    const attrName = match[1];\n    attributes[attrName] = 'string';\n  });\n\n  return attributes;\n};\n\n/**\n * Extracts component names from an HTML string.\n * - Standard HTML tags are set to `true`.\n * - Custom components are parsed to extract their attributes/props.\n */\nexport const getHTMLCustomComponents = (\n  content: string\n): Record<string, Record<string, string> | true> => {\n  if (typeof content !== 'string') {\n    throw new Error('content must be a string');\n  }\n\n  const tagRegex = /<(\\/)?([a-zA-Z0-9.-]+)\\s*([\\s\\S]*?)(\\/?)>/g;\n  const matches = [...content.matchAll(tagRegex)];\n\n  const components: Record<string, Record<string, string> | true> = {};\n\n  matches.forEach((match) => {\n    const isClosing = !!match[1];\n    const tagName = match[2];\n    const attributesString = match[3];\n    const isSelfClosing = !!match[4];\n\n    // Matches any tag that is entirely lowercase letters and numbers (e.g., div, h1)\n    const isStandardHTMLTag = /^[a-z][a-z0-9]*$/.test(tagName);\n\n    if (isStandardHTMLTag) {\n      components[tagName] = true;\n      return;\n    }\n\n    if (!components[tagName]) {\n      components[tagName] = {};\n    }\n\n    if (components[tagName] === true) {\n      return;\n    }\n\n    if (isClosing) {\n      return;\n    }\n\n    const attributes = parseAttributes(attributesString);\n    const componentDef = components[tagName] as Record<string, string>;\n    Object.assign(componentDef, attributes);\n\n    if (!isSelfClosing) {\n      componentDef.children = 'string';\n    }\n  });\n\n  return components;\n};\n"],"mappings":";AAAA,MAAM,mBAAmB,qBAAqD;CAC5E,MAAM,aAAqC,EAAE;AAE7C,KAAI,CAAC,kBAAkB,MAAM,CAC3B,QAAO;AAUT,EAFiB,GAAG,iBAAiB,SAAS,6DAAU,CAEjD,CAAC,SAAS,UAAU;EACzB,MAAM,WAAW,MAAM;AACvB,aAAW,YAAY;GACvB;AAEF,QAAO;;;;;;;AAQT,MAAa,2BACX,YACkD;AAClD,KAAI,OAAO,YAAY,SACrB,OAAM,IAAI,MAAM,2BAA2B;CAI7C,MAAM,UAAU,CAAC,GAAG,QAAQ,SAAS,6CAAS,CAAC;CAE/C,MAAM,aAA4D,EAAE;AAEpE,SAAQ,SAAS,UAAU;EACzB,MAAM,YAAY,CAAC,CAAC,MAAM;EAC1B,MAAM,UAAU,MAAM;EACtB,MAAM,mBAAmB,MAAM;EAC/B,MAAM,gBAAgB,CAAC,CAAC,MAAM;AAK9B,MAF0B,mBAAmB,KAAK,QAE7B,EAAE;AACrB,cAAW,WAAW;AACtB;;AAGF,MAAI,CAAC,WAAW,SACd,YAAW,WAAW,EAAE;AAG1B,MAAI,WAAW,aAAa,KAC1B;AAGF,MAAI,UACF;EAGF,MAAM,aAAa,gBAAgB,iBAAiB;EACpD,MAAM,eAAe,WAAW;AAChC,SAAO,OAAO,cAAc,WAAW;AAEvC,MAAI,CAAC,cACH,cAAa,WAAW;GAE1B;AAEF,QAAO"}