{"version":3,"file":"FormStructureTree.mjs","names":["React","useMemo","UdpTree","UdpText","getFieldTypeIcon","buildNodes","groups","nodes","forEach","section","items","si","push","id","kind","label","title","name","order","question","fieldTypeId","answered","parentId","questionText","icon","FormStructureTree","t0","$","_c","selectedQuestionId","onSelect","t1","length","t2","Symbol","for","color","padding","undefined","t3","e","node","detail","t4","_temp","_temp2","_temp3","_temp4","_temp5","n","n_0","String","padStart","n_1","n_2","content","appearance","shape","n_3"],"sources":["../../../../src/udp/pages/UdpQuestionFormOverviewPage/FormStructureTree.jsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { UdpTree, UdpText } from '../../../UI/fluent-web-components';\nimport { getFieldTypeIcon } from './questionInsights';\n\n// Form Structure rail — the master pane of the Questions tab's master/detail\n// view. Mirrors the builder's outline (sections as numbered group headers,\n// questions as type-icon rows with an answered-count badge).\n//\n// Built on udp-tree's data-driven `treeItems` API (not slotted children) so the\n// rows render inside udp-tree's shadow, where its own row chrome (height, inset\n// pill, hover, brand selected state — interaction=\"button\") styles them. The\n// type icon and count badge are declared as data (itemIcon / itemBadge); udp-tree\n// renders them. No consumer-side CSS.\n//\n// `groups` is the already-filtered structure:\n//   [{ section, items: [{ question, fieldTypeId, answered }] }]\n\nconst buildNodes = (groups) => {\n  const nodes = [];\n  groups.forEach(({ section, items }, si) => {\n    nodes.push({\n      id: section.id,\n      kind: 'section',\n      label: section.title || section.name || 'Untitled section',\n      order: si + 1,\n    });\n    items.forEach(({ question, fieldTypeId, answered }) => {\n      nodes.push({\n        id: question.id,\n        parentId: section.id,\n        kind: 'question',\n        label: question.questionText || question.name || 'Untitled',\n        icon: getFieldTypeIcon(fieldTypeId),\n        answered,\n      });\n    });\n  });\n  return nodes;\n};\n\nexport const FormStructureTree = ({ groups, selectedQuestionId, onSelect }) => {\n  const nodes = useMemo(() => buildNodes(groups), [groups]);\n\n  if (nodes.length === 0) {\n    return (\n      <UdpText\n        variant='caption1'\n        block\n        style={{ color: 'var(--colorNeutralForeground3)', padding: '8px 12px' }}\n      >\n        No questions match the current filters.\n      </UdpText>\n    );\n  }\n\n  return (\n    <UdpTree\n      size='small'\n      interaction='button'\n      collapsible\n      treeItems={nodes}\n      itemContent={(n) => n.label}\n      itemStart={(n) => (n.kind === 'section' ? String(n.order).padStart(2, '0') : undefined)}\n      itemIcon={(n) => (n.kind === 'question' ? n.icon : undefined)}\n      itemBadge={(n) =>\n        n.kind === 'question'\n          ? { content: n.answered, color: 'informative', appearance: 'tint', shape: 'circular' }\n          : undefined\n      }\n      itemExpanded={(n) => n.kind === 'section'}\n      selectedId={selectedQuestionId ?? undefined}\n      onItemClick={(e) => {\n        const node = e?.detail ?? e;\n        if (node?.kind === 'question') onSelect?.(node.id);\n      }}\n    />\n  );\n};\n"],"mappings":";;;;;;AAiBA,MAAMK,cAAcC,WAAW;CAC7B,MAAMC,QAAQ,EAAE;AAChBD,QAAOE,SAAS,EAAEC,SAASC,SAASC,OAAO;AACzCJ,QAAMK,KAAK;GACTC,IAAIJ,QAAQI;GACZC,MAAM;GACNC,OAAON,QAAQO,SAASP,QAAQQ,QAAQ;GACxCC,OAAOP,KAAK;GACb,CAAC;AACFD,QAAMF,SAAS,EAAEW,UAAUC,aAAaC,eAAe;AACrDd,SAAMK,KAAK;IACTC,IAAIM,SAASN;IACbS,UAAUb,QAAQI;IAClBC,MAAM;IACNC,OAAOI,SAASI,gBAAgBJ,SAASF,QAAQ;IACjDO,MAAMpB,iBAAiBgB,YAAY;IACnCC;IACD,CAAC;IACF;GACF;AACF,QAAOd;;AAGT,MAAakB,qBAAoBC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAtB,QAAAuB,oBAAAC,aAAAJ;CAAwC,IAAAK;AAAA,KAAAJ,EAAA,OAAArB,QAAA;AAC5CyB,OAAA1B,WAAWC,OAAO;AAAAqB,IAAA,KAAArB;AAAAqB,IAAA,KAAAI;OAAAA,MAAAJ,EAAA;CAA9C,MAAApB,QAA4BwB;AAE5B,KAAIxB,MAAKyB,WAAY,GAAC;EAAA,IAAAC;AAAA,MAAAN,EAAA,OAAAO,OAAAC,IAAA,4BAAA,EAAA;AAElBF,QAAA,sBAAA,cAAC,SAAD;IACU,SAAA;IACR,OAAA;IACO,OAAA;KAAAG,OAAS;KAAgCC,SAAW;KAAW;IAG9D,EAFT,0CAES;AAAAV,KAAA,KAAAM;QAAAA,MAAAN,EAAA;AAAA,SANVM;;CAyBY,MAAAA,KAAAJ,sBAAAS,KAAAA;CAA+B,IAAAC;AAAA,KAAAZ,EAAA,OAAAG,UAAA;AAC9BS,QAAAC,MAAA;GACX,MAAAC,OAAaD,GAACE,UAADF;AACb,OAAIC,MAAI3B,SAAW,WAAYgB,YAAWW,KAAI5B,GAAI;;AACnDc,IAAA,KAAAG;AAAAH,IAAA,KAAAY;OAAAA,MAAAZ,EAAA;CAAA,IAAAgB;AAAA,KAAAhB,EAAA,OAAApB,SAAAoB,EAAA,OAAAM,MAAAN,EAAA,OAAAY,IAAA;AAlBHI,OAAA,sBAAA,cAAC,SAAD;GACO,MAAA;GACO,aAAA;GACZ,aAAA;GACWpC,WAAAA;GACE,aAAAqC;GACF,WAAAC;GACD,UAAAC;GACC,WAAAC;GAKG,cAAAC;GACF,YAAAf;GACC,aAAAM;GAIb,CAAA;AAAAZ,IAAA,KAAApB;AAAAoB,IAAA,KAAAM;AAAAN,IAAA,KAAAY;AAAAZ,IAAA,KAAAgB;OAAAA,MAAAhB,EAAA;AAAA,QAnBFgB;;AAhB6B,SAAAC,MAAAK,GAAA;AAAA,QAqBPA,EAAClC;;AArBM,SAAA8B,OAAAK,KAAA;AAAA,QAsBRD,IAACnC,SAAU,YAAYqC,OAAOF,IAAC/B,MAAO,CAAAkC,SAAU,GAAG,IAAgB,GAAnEd,KAAAA;;AAtBQ,SAAAQ,OAAAO,KAAA;AAAA,QAuBTJ,IAACnC,SAAU,aAAamC,IAACzB,OAAzBc,KAAAA;;AAvBS,SAAAS,OAAAO,KAAA;AAAA,QAyBzBL,IAACnC,SAAU,aAAX;EAAAyC,SACeN,IAAC5B;EAASe,OAAS;EAAaoB,YAAc;EAAMC,OAAS;EAC/D,GAFbnB,KAAAA;;AAzByB,SAAAU,OAAAU,KAAA;AAAA,QA6BNT,IAACnC,SAAU"}