codicent-app-sdk 0.5.7 → 0.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/dist/cjs/components/AiInput.js +1 -1
  2. package/dist/cjs/components/AudioIcon.js +1 -1
  3. package/dist/cjs/components/ChatInput.js +1 -1
  4. package/dist/cjs/components/ChatMessage.js +1 -1
  5. package/dist/cjs/components/CombinedPlaceholderDialog.js +1 -1
  6. package/dist/cjs/components/Footer.js +1 -1
  7. package/dist/cjs/components/Header.js +1 -1
  8. package/dist/cjs/components/HtmlView.js +1 -1
  9. package/dist/cjs/components/MessageInput.js +1 -1
  10. package/dist/cjs/components/MessageItem.js +1 -1
  11. package/dist/cjs/components/Profile.js +1 -1
  12. package/dist/cjs/components/Prompt.js +1 -1
  13. package/dist/cjs/components/SnapFooter.js +1 -1
  14. package/dist/cjs/components/TextHeader.js +1 -1
  15. package/dist/cjs/components/TypingIndicator.js +1 -1
  16. package/dist/cjs/components/UploadFile.js +1 -1
  17. package/dist/cjs/components/UrlProcessor.js +1 -1
  18. package/dist/cjs/components/VoiceIcon.js +1 -1
  19. package/dist/cjs/components/audit/AuditAnswerCell.d.ts +15 -0
  20. package/dist/cjs/components/audit/AuditAnswerCell.d.ts.map +1 -0
  21. package/dist/cjs/components/audit/AuditAnswerCell.js +1 -0
  22. package/dist/cjs/components/audit/AuditBulkExportDialog.d.ts +16 -0
  23. package/dist/cjs/components/audit/AuditBulkExportDialog.d.ts.map +1 -0
  24. package/dist/cjs/components/audit/AuditBulkExportDialog.js +1 -0
  25. package/dist/cjs/components/audit/AuditBulkUploadDialog.d.ts +15 -0
  26. package/dist/cjs/components/audit/AuditBulkUploadDialog.d.ts.map +1 -0
  27. package/dist/cjs/components/audit/AuditBulkUploadDialog.js +1 -0
  28. package/dist/cjs/components/audit/AuditCircularProgress.d.ts +15 -0
  29. package/dist/cjs/components/audit/AuditCircularProgress.d.ts.map +1 -0
  30. package/dist/cjs/components/audit/AuditCircularProgress.js +1 -0
  31. package/dist/cjs/components/audit/AuditFilterBar.d.ts +15 -0
  32. package/dist/cjs/components/audit/AuditFilterBar.d.ts.map +1 -0
  33. package/dist/cjs/components/audit/AuditFilterBar.js +1 -0
  34. package/dist/cjs/components/audit/AuditFilterChips.d.ts +17 -0
  35. package/dist/cjs/components/audit/AuditFilterChips.d.ts.map +1 -0
  36. package/dist/cjs/components/audit/AuditFilterChips.js +1 -0
  37. package/dist/cjs/components/audit/AuditGroupsProgress.d.ts +12 -0
  38. package/dist/cjs/components/audit/AuditGroupsProgress.d.ts.map +1 -0
  39. package/dist/cjs/components/audit/AuditGroupsProgress.js +1 -0
  40. package/dist/cjs/components/audit/AuditHorizontalProgress.d.ts +16 -0
  41. package/dist/cjs/components/audit/AuditHorizontalProgress.d.ts.map +1 -0
  42. package/dist/cjs/components/audit/AuditHorizontalProgress.js +1 -0
  43. package/dist/cjs/components/audit/AuditRequirementDialog.d.ts +16 -0
  44. package/dist/cjs/components/audit/AuditRequirementDialog.d.ts.map +1 -0
  45. package/dist/cjs/components/audit/AuditRequirementDialog.js +1 -0
  46. package/dist/cjs/components/audit/AuditRoleIndicator.d.ts +13 -0
  47. package/dist/cjs/components/audit/AuditRoleIndicator.d.ts.map +1 -0
  48. package/dist/cjs/components/audit/AuditRoleIndicator.js +1 -0
  49. package/dist/cjs/components/audit/AuditSearchBar.d.ts +13 -0
  50. package/dist/cjs/components/audit/AuditSearchBar.d.ts.map +1 -0
  51. package/dist/cjs/components/audit/AuditSearchBar.js +1 -0
  52. package/dist/cjs/components/audit/AuditSortPresets.d.ts +12 -0
  53. package/dist/cjs/components/audit/AuditSortPresets.d.ts.map +1 -0
  54. package/dist/cjs/components/audit/AuditSortPresets.js +1 -0
  55. package/dist/cjs/components/audit/AuditSummaryDashboard.d.ts +13 -0
  56. package/dist/cjs/components/audit/AuditSummaryDashboard.d.ts.map +1 -0
  57. package/dist/cjs/components/audit/AuditSummaryDashboard.js +1 -0
  58. package/dist/cjs/components/audit/AuditUnitExportDialog.d.ts +18 -0
  59. package/dist/cjs/components/audit/AuditUnitExportDialog.d.ts.map +1 -0
  60. package/dist/cjs/components/audit/AuditUnitExportDialog.js +1 -0
  61. package/dist/cjs/components/audit/AuditUnitImportDialog.d.ts +13 -0
  62. package/dist/cjs/components/audit/AuditUnitImportDialog.d.ts.map +1 -0
  63. package/dist/cjs/components/audit/AuditUnitImportDialog.js +1 -0
  64. package/dist/cjs/components/audit/AuditUnitSwitcher.d.ts +20 -0
  65. package/dist/cjs/components/audit/AuditUnitSwitcher.d.ts.map +1 -0
  66. package/dist/cjs/components/audit/AuditUnitSwitcher.js +1 -0
  67. package/dist/cjs/components/audit/index.d.ts +20 -0
  68. package/dist/cjs/components/audit/index.d.ts.map +1 -0
  69. package/dist/cjs/components/index.d.ts +1 -0
  70. package/dist/cjs/components/index.d.ts.map +1 -1
  71. package/dist/cjs/hooks/index.d.ts +12 -0
  72. package/dist/cjs/hooks/index.d.ts.map +1 -1
  73. package/dist/cjs/hooks/useAuditFilters.d.ts +17 -0
  74. package/dist/cjs/hooks/useAuditFilters.d.ts.map +1 -0
  75. package/dist/cjs/hooks/useAuditFilters.js +1 -0
  76. package/dist/cjs/hooks/useAuditManagerData.d.ts +25 -0
  77. package/dist/cjs/hooks/useAuditManagerData.d.ts.map +1 -0
  78. package/dist/cjs/hooks/useAuditManagerData.js +1 -0
  79. package/dist/cjs/hooks/useAuditManagerFilters.d.ts +16 -0
  80. package/dist/cjs/hooks/useAuditManagerFilters.d.ts.map +1 -0
  81. package/dist/cjs/hooks/useAuditManagerFilters.js +1 -0
  82. package/dist/cjs/hooks/useAuditRequirementsFilters.d.ts +17 -0
  83. package/dist/cjs/hooks/useAuditRequirementsFilters.d.ts.map +1 -0
  84. package/dist/cjs/hooks/useAuditRequirementsFilters.js +1 -0
  85. package/dist/cjs/hooks/useAuditRoleCheck.d.ts +26 -0
  86. package/dist/cjs/hooks/useAuditRoleCheck.d.ts.map +1 -0
  87. package/dist/cjs/hooks/useAuditRoleCheck.js +1 -0
  88. package/dist/cjs/hooks/useAuditState.d.ts +34 -0
  89. package/dist/cjs/hooks/useAuditState.d.ts.map +1 -0
  90. package/dist/cjs/hooks/useAuditState.js +1 -0
  91. package/dist/cjs/hooks/useAuthState.js +1 -1
  92. package/dist/cjs/hooks/useCodicentState.js +1 -1
  93. package/dist/cjs/index.js +1 -1
  94. package/dist/cjs/pages/AppFrame.js +1 -1
  95. package/dist/cjs/pages/Chat.js +1 -1
  96. package/dist/cjs/pages/Compose.js +1 -1
  97. package/dist/cjs/pages/CrmPage.js +1 -1
  98. package/dist/cjs/pages/CrmPagePersistent.js +1 -1
  99. package/dist/cjs/pages/FormAccept.js +1 -1
  100. package/dist/cjs/pages/FormInvite.js +1 -1
  101. package/dist/cjs/pages/Home.js +1 -1
  102. package/dist/cjs/pages/HtmlViewer.js +1 -1
  103. package/dist/cjs/pages/ListPage.js +1 -1
  104. package/dist/cjs/pages/Login.js +1 -1
  105. package/dist/cjs/pages/Menu.js +1 -1
  106. package/dist/cjs/pages/Purchase.js +1 -1
  107. package/dist/cjs/pages/Sales.js +1 -1
  108. package/dist/cjs/pages/Search.js +1 -1
  109. package/dist/cjs/pages/Snap.js +1 -1
  110. package/dist/cjs/types/audit.d.ts +358 -0
  111. package/dist/cjs/types/audit.d.ts.map +1 -0
  112. package/dist/cjs/types/index.d.ts +1 -0
  113. package/dist/cjs/types/index.d.ts.map +1 -1
  114. package/dist/cjs/utils/auditExport.d.ts +37 -0
  115. package/dist/cjs/utils/auditExport.d.ts.map +1 -0
  116. package/dist/cjs/utils/auditExport.js +1 -0
  117. package/dist/cjs/utils/auditUtils.d.ts +59 -0
  118. package/dist/cjs/utils/auditUtils.d.ts.map +1 -0
  119. package/dist/cjs/utils/auditUtils.js +1 -0
  120. package/dist/cjs/utils/index.d.ts +2 -0
  121. package/dist/cjs/utils/index.d.ts.map +1 -1
  122. package/dist/esm/components/AiInput.js +1 -1
  123. package/dist/esm/components/AudioIcon.js +1 -1
  124. package/dist/esm/components/ChatInput.js +1 -1
  125. package/dist/esm/components/ChatMessage.js +1 -1
  126. package/dist/esm/components/CombinedPlaceholderDialog.js +1 -1
  127. package/dist/esm/components/Footer.js +1 -1
  128. package/dist/esm/components/Header.js +1 -1
  129. package/dist/esm/components/HtmlView.js +1 -1
  130. package/dist/esm/components/MessageInput.js +1 -1
  131. package/dist/esm/components/MessageItem.js +1 -1
  132. package/dist/esm/components/Profile.js +1 -1
  133. package/dist/esm/components/Prompt.js +1 -1
  134. package/dist/esm/components/SnapFooter.js +1 -1
  135. package/dist/esm/components/TextHeader.js +1 -1
  136. package/dist/esm/components/TypingIndicator.js +1 -1
  137. package/dist/esm/components/UploadFile.js +1 -1
  138. package/dist/esm/components/UrlProcessor.js +1 -1
  139. package/dist/esm/components/VoiceIcon.js +1 -1
  140. package/dist/esm/components/audit/AuditAnswerCell.d.ts +15 -0
  141. package/dist/esm/components/audit/AuditAnswerCell.d.ts.map +1 -0
  142. package/dist/esm/components/audit/AuditAnswerCell.js +1 -0
  143. package/dist/esm/components/audit/AuditBulkExportDialog.d.ts +16 -0
  144. package/dist/esm/components/audit/AuditBulkExportDialog.d.ts.map +1 -0
  145. package/dist/esm/components/audit/AuditBulkExportDialog.js +1 -0
  146. package/dist/esm/components/audit/AuditBulkUploadDialog.d.ts +15 -0
  147. package/dist/esm/components/audit/AuditBulkUploadDialog.d.ts.map +1 -0
  148. package/dist/esm/components/audit/AuditBulkUploadDialog.js +1 -0
  149. package/dist/esm/components/audit/AuditCircularProgress.d.ts +15 -0
  150. package/dist/esm/components/audit/AuditCircularProgress.d.ts.map +1 -0
  151. package/dist/esm/components/audit/AuditCircularProgress.js +1 -0
  152. package/dist/esm/components/audit/AuditFilterBar.d.ts +15 -0
  153. package/dist/esm/components/audit/AuditFilterBar.d.ts.map +1 -0
  154. package/dist/esm/components/audit/AuditFilterBar.js +1 -0
  155. package/dist/esm/components/audit/AuditFilterChips.d.ts +17 -0
  156. package/dist/esm/components/audit/AuditFilterChips.d.ts.map +1 -0
  157. package/dist/esm/components/audit/AuditFilterChips.js +1 -0
  158. package/dist/esm/components/audit/AuditGroupsProgress.d.ts +12 -0
  159. package/dist/esm/components/audit/AuditGroupsProgress.d.ts.map +1 -0
  160. package/dist/esm/components/audit/AuditGroupsProgress.js +1 -0
  161. package/dist/esm/components/audit/AuditHorizontalProgress.d.ts +16 -0
  162. package/dist/esm/components/audit/AuditHorizontalProgress.d.ts.map +1 -0
  163. package/dist/esm/components/audit/AuditHorizontalProgress.js +1 -0
  164. package/dist/esm/components/audit/AuditRequirementDialog.d.ts +16 -0
  165. package/dist/esm/components/audit/AuditRequirementDialog.d.ts.map +1 -0
  166. package/dist/esm/components/audit/AuditRequirementDialog.js +1 -0
  167. package/dist/esm/components/audit/AuditRoleIndicator.d.ts +13 -0
  168. package/dist/esm/components/audit/AuditRoleIndicator.d.ts.map +1 -0
  169. package/dist/esm/components/audit/AuditRoleIndicator.js +1 -0
  170. package/dist/esm/components/audit/AuditSearchBar.d.ts +13 -0
  171. package/dist/esm/components/audit/AuditSearchBar.d.ts.map +1 -0
  172. package/dist/esm/components/audit/AuditSearchBar.js +1 -0
  173. package/dist/esm/components/audit/AuditSortPresets.d.ts +12 -0
  174. package/dist/esm/components/audit/AuditSortPresets.d.ts.map +1 -0
  175. package/dist/esm/components/audit/AuditSortPresets.js +1 -0
  176. package/dist/esm/components/audit/AuditSummaryDashboard.d.ts +13 -0
  177. package/dist/esm/components/audit/AuditSummaryDashboard.d.ts.map +1 -0
  178. package/dist/esm/components/audit/AuditSummaryDashboard.js +1 -0
  179. package/dist/esm/components/audit/AuditUnitExportDialog.d.ts +18 -0
  180. package/dist/esm/components/audit/AuditUnitExportDialog.d.ts.map +1 -0
  181. package/dist/esm/components/audit/AuditUnitExportDialog.js +1 -0
  182. package/dist/esm/components/audit/AuditUnitImportDialog.d.ts +13 -0
  183. package/dist/esm/components/audit/AuditUnitImportDialog.d.ts.map +1 -0
  184. package/dist/esm/components/audit/AuditUnitImportDialog.js +1 -0
  185. package/dist/esm/components/audit/AuditUnitSwitcher.d.ts +20 -0
  186. package/dist/esm/components/audit/AuditUnitSwitcher.d.ts.map +1 -0
  187. package/dist/esm/components/audit/AuditUnitSwitcher.js +1 -0
  188. package/dist/esm/components/audit/index.d.ts +20 -0
  189. package/dist/esm/components/audit/index.d.ts.map +1 -0
  190. package/dist/esm/components/index.d.ts +1 -0
  191. package/dist/esm/components/index.d.ts.map +1 -1
  192. package/dist/esm/hooks/index.d.ts +12 -0
  193. package/dist/esm/hooks/index.d.ts.map +1 -1
  194. package/dist/esm/hooks/useAuditFilters.d.ts +17 -0
  195. package/dist/esm/hooks/useAuditFilters.d.ts.map +1 -0
  196. package/dist/esm/hooks/useAuditFilters.js +1 -0
  197. package/dist/esm/hooks/useAuditManagerData.d.ts +25 -0
  198. package/dist/esm/hooks/useAuditManagerData.d.ts.map +1 -0
  199. package/dist/esm/hooks/useAuditManagerData.js +1 -0
  200. package/dist/esm/hooks/useAuditManagerFilters.d.ts +16 -0
  201. package/dist/esm/hooks/useAuditManagerFilters.d.ts.map +1 -0
  202. package/dist/esm/hooks/useAuditManagerFilters.js +1 -0
  203. package/dist/esm/hooks/useAuditRequirementsFilters.d.ts +17 -0
  204. package/dist/esm/hooks/useAuditRequirementsFilters.d.ts.map +1 -0
  205. package/dist/esm/hooks/useAuditRequirementsFilters.js +1 -0
  206. package/dist/esm/hooks/useAuditRoleCheck.d.ts +26 -0
  207. package/dist/esm/hooks/useAuditRoleCheck.d.ts.map +1 -0
  208. package/dist/esm/hooks/useAuditRoleCheck.js +1 -0
  209. package/dist/esm/hooks/useAuditState.d.ts +34 -0
  210. package/dist/esm/hooks/useAuditState.d.ts.map +1 -0
  211. package/dist/esm/hooks/useAuditState.js +1 -0
  212. package/dist/esm/hooks/useAuthState.js +1 -1
  213. package/dist/esm/hooks/useCodicentState.js +1 -1
  214. package/dist/esm/index.js +1 -1
  215. package/dist/esm/pages/AppFrame.js +1 -1
  216. package/dist/esm/pages/Chat.js +1 -1
  217. package/dist/esm/pages/Compose.js +1 -1
  218. package/dist/esm/pages/CrmPage.js +1 -1
  219. package/dist/esm/pages/CrmPagePersistent.js +1 -1
  220. package/dist/esm/pages/FormAccept.js +1 -1
  221. package/dist/esm/pages/FormInvite.js +1 -1
  222. package/dist/esm/pages/Home.js +1 -1
  223. package/dist/esm/pages/HtmlViewer.js +1 -1
  224. package/dist/esm/pages/ListPage.js +1 -1
  225. package/dist/esm/pages/Login.js +1 -1
  226. package/dist/esm/pages/Menu.js +1 -1
  227. package/dist/esm/pages/Purchase.js +1 -1
  228. package/dist/esm/pages/Sales.js +1 -1
  229. package/dist/esm/pages/Search.js +1 -1
  230. package/dist/esm/pages/Snap.js +1 -1
  231. package/dist/esm/types/audit.d.ts +358 -0
  232. package/dist/esm/types/audit.d.ts.map +1 -0
  233. package/dist/esm/types/index.d.ts +1 -0
  234. package/dist/esm/types/index.d.ts.map +1 -1
  235. package/dist/esm/utils/auditExport.d.ts +37 -0
  236. package/dist/esm/utils/auditExport.d.ts.map +1 -0
  237. package/dist/esm/utils/auditExport.js +1 -0
  238. package/dist/esm/utils/auditUtils.d.ts +59 -0
  239. package/dist/esm/utils/auditUtils.d.ts.map +1 -0
  240. package/dist/esm/utils/auditUtils.js +1 -0
  241. package/dist/esm/utils/index.d.ts +2 -0
  242. package/dist/esm/utils/index.d.ts.map +1 -1
  243. package/dist/index.d.ts +799 -1
  244. package/package.json +1 -1
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),s=require("@fluentui/react-components");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var i=require("../utils/device.js");require("exceljs"),require("./Markdown.js"),require("./Textarea.js"),require("./Button.js"),require("./CompoundButton.js");var a=require("./Spinner.js");require("./TextHeader.js"),require("./TypingIndicator.js"),require("./Dialog.js"),require("./ChatInput.js"),require("./CombinedPlaceholderDialog.js"),require("./ChatMessage.js"),require("./Header.js"),require("@fluentui/react-icons"),require("../services/codicent.js"),require("../pages/AppFrame.js"),require("../pages/Canvas.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Menu.js"),require("../pages/Log.js"),require("../pages/Login.js"),require("../pages/Home.js"),require("../pages/ListPage.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("react-router-dom"),require("../pages/Purchase.js"),require("./Content.js"),require("./Page.js"),require("../pages/QrScan.js"),require("../hooks/useLocalization.js"),require("./FileThumbnail.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js"),require("../hooks/useAppStyles.js"),require("./MessageInput.js"),require("./SnapFooter.js"),require("./Profile.js"),require("./MessageItem.js"),require("./AiInput.js"),require("./SearchBox.js"),require("./DataMessagePicker.js"),require("./HtmlView.js"),require("./Footer.js"),require("./QrCodeDialog.js"),require("./QrScanner.js"),require("./OfflineMessage.js"),require("./LanguageSelector.js"),require("./ListView.js"),require("./RecordModal.js"),require("./BulkUploadDialog.js"),require("./CookieBanner.js");const u=s.makeStyles({imageUpload:{display:"none"},spinner:{marginTop:"10px"}}),t=r.forwardRef((({onFileUploaded:s,accept:t,capture:o,multiple:n=!1,onUploading:l,className:c,id:q,codicentService:j},p)=>{const g=u(),[d,m]=r.useState(!1),f=r.useRef(null);r.useEffect((()=>{l(d)}),[d,l]);const h=async(e,r)=>{const s=new FormData;s.append("file",r),m(!0);try{const r=await j.uploadFile(e,s);return m(!1),r}catch(r){return console.error("Upload failed for file:",e,r),m(!1),null}},v=()=>{f.current?.click()};r.useImperativeHandle(p,(()=>({triggerUpload:v})));const w=o&&i.isMobileDevice();return e.jsx("div",{id:q,className:c,children:d?e.jsx(a.Spinner,{"aria-label":"Uploading...",className:g.spinner}):e.jsx("input",{ref:f,type:"file",className:g.imageUpload,onChange:async()=>{try{const e=f.current;if(e&&e.files){const r=[];for(let s=0;s<e.files.length;s++){const i=e.files[s],a=i.name.split("\\").pop()||i.name,u=await h(a,i);u&&r.push(u)}r.length>0&&s(r)}}catch(e){console.error("Error uploading files:",e)}},accept:t,multiple:n,...w?{capture:o}:{}})})}));exports.default=t;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),i=require("@fluentui/react-components");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var s=require("../utils/device.js");require("exceljs"),require("./Markdown.js"),require("./Textarea.js"),require("./Button.js"),require("./CompoundButton.js");var a=require("./Spinner.js");require("./TextHeader.js"),require("./TypingIndicator.js"),require("./Dialog.js"),require("./ChatInput.js"),require("./CombinedPlaceholderDialog.js"),require("./ChatMessage.js"),require("./Header.js"),require("@fluentui/react-icons"),require("../services/codicent.js"),require("../pages/AppFrame.js"),require("../pages/Canvas.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Menu.js"),require("../pages/Log.js"),require("../pages/Login.js"),require("../pages/Home.js"),require("../pages/ListPage.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("react-router-dom"),require("../pages/Purchase.js"),require("./Content.js"),require("./Page.js"),require("../pages/QrScan.js"),require("../hooks/useLocalization.js"),require("./FileThumbnail.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js"),require("../hooks/useAppStyles.js"),require("./MessageInput.js"),require("./SnapFooter.js"),require("./Profile.js"),require("./MessageItem.js"),require("./AiInput.js"),require("./SearchBox.js"),require("./DataMessagePicker.js"),require("./HtmlView.js"),require("./Footer.js"),require("./QrCodeDialog.js"),require("./QrScanner.js"),require("./OfflineMessage.js"),require("./LanguageSelector.js"),require("./ListView.js"),require("./RecordModal.js"),require("./BulkUploadDialog.js"),require("./CookieBanner.js"),require("./audit/AuditCircularProgress.js"),require("./audit/AuditHorizontalProgress.js"),require("./audit/AuditRoleIndicator.js"),require("./audit/AuditUnitSwitcher.js"),require("./audit/AuditAnswerCell.js"),require("./audit/AuditSearchBar.js"),require("./audit/AuditFilterChips.js"),require("./audit/AuditFilterBar.js"),require("./audit/AuditGroupsProgress.js"),require("./audit/AuditSummaryDashboard.js"),require("./audit/AuditRequirementDialog.js"),require("./audit/AuditUnitExportDialog.js"),require("./audit/AuditUnitImportDialog.js"),require("./audit/AuditBulkExportDialog.js"),require("./audit/AuditBulkUploadDialog.js"),require("./audit/AuditSortPresets.js");const u=i.makeStyles({imageUpload:{display:"none"},spinner:{marginTop:"10px"}}),t=r.forwardRef((({onFileUploaded:i,accept:t,capture:o,multiple:l=!1,onUploading:n,className:q,id:j,codicentService:d},c)=>{const p=u(),[g,m]=r.useState(!1),f=r.useRef(null);r.useEffect((()=>{n(g)}),[g,n]);const h=async(e,r)=>{const i=new FormData;i.append("file",r),m(!0);try{const r=await d.uploadFile(e,i);return m(!1),r}catch(r){return console.error("Upload failed for file:",e,r),m(!1),null}},A=()=>{f.current?.click()};r.useImperativeHandle(c,(()=>({triggerUpload:A})));const v=o&&s.isMobileDevice();return e.jsx("div",{id:j,className:q,children:g?e.jsx(a.Spinner,{"aria-label":"Uploading...",className:p.spinner}):e.jsx("input",{ref:f,type:"file",className:p.imageUpload,onChange:async()=>{try{const e=f.current;if(e&&e.files){const r=[];for(let i=0;i<e.files.length;i++){const s=e.files[i],a=s.name.split("\\").pop()||s.name,u=await h(a,s);u&&r.push(u)}r.length>0&&i(r)}}catch(e){console.error("Error uploading files:",e)}},accept:t,multiple:l,...v?{capture:o}:{}})})}));exports.default=t;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),s=require("./CombinedPlaceholderDialog.js");require("../services/codicent.js"),require("./Markdown.js"),require("./Textarea.js"),require("./Button.js"),require("./CompoundButton.js"),require("@fluentui/react-components"),require("./Spinner.js"),require("./TextHeader.js"),require("./TypingIndicator.js"),require("./Dialog.js"),require("./ChatInput.js"),require("./ChatMessage.js"),require("./Header.js"),require("@fluentui/react-icons"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("exceljs"),require("./FileThumbnail.js"),require("./MessageInput.js"),require("./UploadFile.js"),require("./SnapFooter.js"),require("./Profile.js"),require("./MessageItem.js"),require("./Content.js"),require("./AiInput.js"),require("./SearchBox.js"),require("./DataMessagePicker.js"),require("./HtmlView.js"),require("./Footer.js"),require("./Page.js"),require("./QrCodeDialog.js"),require("./QrScanner.js"),require("../hooks/useLocalization.js"),require("./OfflineMessage.js"),require("./LanguageSelector.js"),require("./ListView.js"),require("./RecordModal.js"),require("./BulkUploadDialog.js"),require("./CookieBanner.js"),require("../pages/AppFrame.js"),require("../pages/Canvas.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Menu.js"),require("../pages/Log.js"),require("../pages/Login.js"),require("../pages/Home.js"),require("../pages/ListPage.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("react-router-dom"),require("../pages/Purchase.js"),require("../pages/QrScan.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js");var i=require("../hooks/useTemplateVariables.js");require("../hooks/useAppStyles.js");const a=({service:a,children:u})=>{const[l,o]=r.useState(!1),[t,n]=r.useState([]),[q,j]=r.useState([]),[c,p]=r.useState(null),{extractTemplateVariables:g,extractFilePlaceholders:d,replaceTemplateVariables:h,replaceFilePlaceholders:m}=i.useTemplateVariables(a.uploadFile);return e.jsxs(e.Fragment,{children:[u((async e=>{p(e);const r=d(e),s=g(e);0!==r.length||0!==s.length?(j(r),n(s),o(!0)):window.location.href=e})),e.jsx(s.CombinedPlaceholderDialog,{open:l,templateVariables:t,filePlaceholders:q,onTemplateVariablesChange:n,onFilePlaceholdersChange:j,onConfirm:async()=>{if(c)try{let e=c;if(q.length>0){q.filter((e=>e.fileId)).length!==q.length&&console.warn("Some file placeholders are missing fileIds:",q.filter((e=>!e.fileId)).map((e=>e.description))),e=m(e,q)}t.length>0&&(e=h(e,t)),o(!1),window.location.href=e}catch(e){console.error("Failed to process URL:",e)}finally{p(null)}},onCancel:()=>{o(!1),p(null),n([]),j([])},uploadFile:a.uploadFile})]})};exports.UrlProcessor=a,exports.default=a;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),i=require("./CombinedPlaceholderDialog.js");require("../services/codicent.js"),require("./Markdown.js"),require("./Textarea.js"),require("./Button.js"),require("./CompoundButton.js"),require("@fluentui/react-components"),require("./Spinner.js"),require("./TextHeader.js"),require("./TypingIndicator.js"),require("./Dialog.js"),require("./ChatInput.js"),require("./ChatMessage.js"),require("./Header.js"),require("@fluentui/react-icons"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("exceljs"),require("./FileThumbnail.js"),require("./MessageInput.js"),require("./UploadFile.js"),require("./SnapFooter.js"),require("./Profile.js"),require("./MessageItem.js"),require("./Content.js"),require("./AiInput.js"),require("./SearchBox.js"),require("./DataMessagePicker.js"),require("./HtmlView.js"),require("./Footer.js"),require("./Page.js"),require("./QrCodeDialog.js"),require("./QrScanner.js"),require("../hooks/useLocalization.js"),require("./OfflineMessage.js"),require("./LanguageSelector.js"),require("./ListView.js"),require("./RecordModal.js"),require("./BulkUploadDialog.js"),require("./CookieBanner.js"),require("./audit/AuditCircularProgress.js"),require("./audit/AuditHorizontalProgress.js"),require("./audit/AuditRoleIndicator.js"),require("./audit/AuditUnitSwitcher.js"),require("./audit/AuditAnswerCell.js"),require("./audit/AuditSearchBar.js"),require("./audit/AuditFilterChips.js"),require("./audit/AuditFilterBar.js"),require("./audit/AuditGroupsProgress.js"),require("./audit/AuditSummaryDashboard.js"),require("./audit/AuditRequirementDialog.js"),require("./audit/AuditUnitExportDialog.js"),require("./audit/AuditUnitImportDialog.js"),require("./audit/AuditBulkExportDialog.js"),require("./audit/AuditBulkUploadDialog.js"),require("./audit/AuditSortPresets.js"),require("../pages/AppFrame.js"),require("../pages/Canvas.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Menu.js"),require("../pages/Log.js"),require("../pages/Login.js"),require("../pages/Home.js"),require("../pages/ListPage.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("react-router-dom"),require("../pages/Purchase.js"),require("../pages/QrScan.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js");var s=require("../hooks/useTemplateVariables.js");require("../hooks/useAppStyles.js");const a=({service:a,children:u})=>{const[t,l]=r.useState(!1),[o,n]=r.useState([]),[q,j]=r.useState([]),[d,c]=r.useState(null),{extractTemplateVariables:p,extractFilePlaceholders:g,replaceTemplateVariables:h,replaceFilePlaceholders:m}=s.useTemplateVariables(a.uploadFile);return e.jsxs(e.Fragment,{children:[u((async e=>{c(e);const r=g(e),i=p(e);0!==r.length||0!==i.length?(j(r),n(i),l(!0)):window.location.href=e})),e.jsx(i.CombinedPlaceholderDialog,{open:t,templateVariables:o,filePlaceholders:q,onTemplateVariablesChange:n,onFilePlaceholdersChange:j,onConfirm:async()=>{if(d)try{let e=d;if(q.length>0){q.filter((e=>e.fileId)).length!==q.length&&console.warn("Some file placeholders are missing fileIds:",q.filter((e=>!e.fileId)).map((e=>e.description))),e=m(e,q)}o.length>0&&(e=h(e,o)),l(!1),window.location.href=e}catch(e){console.error("Failed to process URL:",e)}finally{c(null)}},onCancel:()=>{l(!1),c(null),n([]),j([])},uploadFile:a.uploadFile})]})};exports.UrlProcessor=a,exports.default=a;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),s=require("@fluentui/react-icons");require("../services/codicent.js"),require("./Markdown.js"),require("./Textarea.js"),require("./Button.js"),require("./CompoundButton.js"),require("@fluentui/react-components"),require("./Spinner.js"),require("./TextHeader.js"),require("./TypingIndicator.js"),require("./Dialog.js"),require("./ChatInput.js"),require("./CombinedPlaceholderDialog.js"),require("./ChatMessage.js"),require("./Header.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js");var i=require("../utils/withWakeLock.js");require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("exceljs"),require("./FileThumbnail.js"),require("./MessageInput.js"),require("./UploadFile.js"),require("./SnapFooter.js"),require("./Profile.js"),require("./MessageItem.js"),require("./Content.js"),require("./AiInput.js"),require("./SearchBox.js"),require("./DataMessagePicker.js"),require("./HtmlView.js"),require("./Footer.js"),require("./Page.js"),require("./QrCodeDialog.js"),require("./QrScanner.js"),require("../hooks/useLocalization.js"),require("./OfflineMessage.js"),require("./LanguageSelector.js"),require("./ListView.js"),require("./RecordModal.js"),require("./BulkUploadDialog.js"),require("./CookieBanner.js"),require("../pages/AppFrame.js"),require("../pages/Canvas.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Menu.js"),require("../pages/Log.js"),require("../pages/Login.js"),require("../pages/Home.js"),require("../pages/ListPage.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("react-router-dom"),require("../pages/Purchase.js"),require("../pages/QrScan.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js");var a=require("../hooks/useAppStyles.js");const u=i.default(s.MicSparkle24Filled);exports.default=({voice:o,disabled:t,instructions:n,connectedIcon:j,disconnectedIcon:q,disabledIcon:l})=>{const{isConnected:c,connectConversation:p,disconnectConversation:g,updateInstructions:d}=o,{pointer:m}=a.default(),v=r.useMemo((()=>j?i.default(j):u),[j]),C=q||s.MicSparkle24Regular,f=async()=>{n&&d(n),await p()};if(t){if(null==l)return e.jsx(s.MicSparkle24Regular,{});if("function"==typeof l){const r=l;return e.jsx(r,{})}return e.jsx(e.Fragment,{children:l})}return c?e.jsx(v,{onClick:g,className:m}):e.jsx(C,{onClick:f,className:m})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),i=require("@fluentui/react-icons");require("../services/codicent.js"),require("./Markdown.js"),require("./Textarea.js"),require("./Button.js"),require("./CompoundButton.js"),require("@fluentui/react-components"),require("./Spinner.js"),require("./TextHeader.js"),require("./TypingIndicator.js"),require("./Dialog.js"),require("./ChatInput.js"),require("./CombinedPlaceholderDialog.js"),require("./ChatMessage.js"),require("./Header.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js");var s=require("../utils/withWakeLock.js");require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("exceljs"),require("./FileThumbnail.js"),require("./MessageInput.js"),require("./UploadFile.js"),require("./SnapFooter.js"),require("./Profile.js"),require("./MessageItem.js"),require("./Content.js"),require("./AiInput.js"),require("./SearchBox.js"),require("./DataMessagePicker.js"),require("./HtmlView.js"),require("./Footer.js"),require("./Page.js"),require("./QrCodeDialog.js"),require("./QrScanner.js"),require("../hooks/useLocalization.js"),require("./OfflineMessage.js"),require("./LanguageSelector.js"),require("./ListView.js"),require("./RecordModal.js"),require("./BulkUploadDialog.js"),require("./CookieBanner.js"),require("./audit/AuditCircularProgress.js"),require("./audit/AuditHorizontalProgress.js"),require("./audit/AuditRoleIndicator.js"),require("./audit/AuditUnitSwitcher.js"),require("./audit/AuditAnswerCell.js"),require("./audit/AuditSearchBar.js"),require("./audit/AuditFilterChips.js"),require("./audit/AuditFilterBar.js"),require("./audit/AuditGroupsProgress.js"),require("./audit/AuditSummaryDashboard.js"),require("./audit/AuditRequirementDialog.js"),require("./audit/AuditUnitExportDialog.js"),require("./audit/AuditUnitImportDialog.js"),require("./audit/AuditBulkExportDialog.js"),require("./audit/AuditBulkUploadDialog.js"),require("./audit/AuditSortPresets.js"),require("../pages/AppFrame.js"),require("../pages/Canvas.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Menu.js"),require("../pages/Log.js"),require("../pages/Login.js"),require("../pages/Home.js"),require("../pages/ListPage.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("react-router-dom"),require("../pages/Purchase.js"),require("../pages/QrScan.js"),require("react-dom/client"),require("../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js");var u=require("../hooks/useAppStyles.js");const a=s.default(i.MicSparkle24Filled);exports.default=({voice:t,disabled:o,instructions:n,connectedIcon:j,disconnectedIcon:q,disabledIcon:l})=>{const{isConnected:d,connectConversation:c,disconnectConversation:p,updateInstructions:g}=t,{pointer:m}=u.default(),A=r.useMemo((()=>j?s.default(j):a),[j]),C=q||i.MicSparkle24Regular,h=async()=>{n&&g(n),await c()};if(o){if(null==l)return e.jsx(i.MicSparkle24Regular,{});if("function"==typeof l){const r=l;return e.jsx(r,{})}return e.jsx(e.Fragment,{children:l})}return d?e.jsx(A,{onClick:p,className:m}):e.jsx(C,{onClick:h,className:m})};
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Inline cell component for rendering and editing an audit answer.
3
+ * Supports both "checkbox" mode (toggle) and "enum" mode (dropdown select).
4
+ */
5
+ import React from "react";
6
+ import type { AuditAnswer, ResolvedAuditConfig } from "../../types/audit";
7
+ interface AuditAnswerCellProps {
8
+ answer: AuditAnswer;
9
+ config: ResolvedAuditConfig;
10
+ readonly?: boolean;
11
+ onUpdate?: (requirementId: string, newAnswer: string) => void;
12
+ }
13
+ export declare const AuditAnswerCell: React.FC<AuditAnswerCellProps>;
14
+ export {};
15
+ //# sourceMappingURL=AuditAnswerCell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditAnswerCell.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditAnswerCell.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAsB,MAAM,OAAO,CAAC;AAQ3C,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAQ1E,UAAU,oBAAoB;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/D;AAqBD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAsF1D,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),l=require("react"),i=require("@fluentui/react-components"),n=require("../../utils/auditUtils.js");const t=i.makeStyles({cell:{display:"flex",flexDirection:"column",gap:"4px"},expiryBadge:{display:"inline-block",fontSize:i.tokens.fontSizeBase100,fontWeight:i.tokens.fontWeightSemibold,padding:"2px 6px",borderRadius:i.tokens.borderRadiusMedium,whiteSpace:"nowrap"},select:{minWidth:"130px"}});exports.AuditAnswerCell=({answer:a,config:r,readonly:s=!1,onUpdate:o})=>{const d=t(),c=n.getEffectiveAnswerOptions(r),u=l.useCallback(((e,l)=>{if(s||!o)return;const i=!0===l.checked?"yes":"";o(a.requirementId,i)}),[a.requirementId,s,o]),p=l.useCallback((e=>{!s&&o&&o(a.requirementId,e.target.value)}),[a.requirementId,s,o]),m=n.calculateAuditTimeRemaining(a.validUntil),x=m?n.getAuditUrgencyColor(m):null,h="checkbox"===r.answerMode?e.jsx(i.Checkbox,{checked:n.isAnswerCompliant(a.answer,r),onChange:u,disabled:s,label:""}):e.jsxs(i.Select,{className:d.select,value:a.answer??"",onChange:p,disabled:s,size:"small",children:[e.jsx("option",{value:"",children:"—"}),c.map((l=>e.jsx("option",{value:l.value,children:l.label},l.value)))]}),g=x&&a.validUntil?e.jsx(i.Tooltip,{content:`Valid until: ${new Date(a.validUntil).toLocaleDateString()}`,relationship:"label",children:e.jsx("span",{className:d.expiryBadge,style:{backgroundColor:x.background,color:x.text,border:`1px solid ${x.border}`},children:m?.isExpired?"EXPIRED":m?.isUrgent?`${m.days}d`:null!=m?.months&&m.months<=6?`${m.months}mo`:null})}):null;return e.jsxs("div",{className:d.cell,children:[h,g]})};
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Dialog to bulk-export audit packages for multiple units from the manager view.
3
+ */
4
+ import React from "react";
5
+ import type { AuditUnitStats, ResolvedAuditConfig } from "../../types/audit";
6
+ interface AuditBulkExportDialogProps {
7
+ open: boolean;
8
+ units: AuditUnitStats[];
9
+ config: ResolvedAuditConfig;
10
+ onDismiss: () => void;
11
+ /** Called with selected unitIds and format */
12
+ onExport: (unitIds: string[], format: "json" | "html") => Promise<void>;
13
+ }
14
+ export declare const AuditBulkExportDialog: React.FC<AuditBulkExportDialogProps>;
15
+ export {};
16
+ //# sourceMappingURL=AuditBulkExportDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditBulkExportDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditBulkExportDialog.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAkBxC,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7E,UAAU,0BAA0B;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,8CAA8C;IAC9C,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE;AAqBD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CA8FtE,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),n=require("react"),t=require("@fluentui/react-components");const i=t.makeStyles({unitList:{display:"flex",flexDirection:"column",gap:"4px",maxHeight:"240px",overflowY:"auto",padding:`${t.tokens.spacingVerticalXS} 0`},formatGroup:{marginTop:t.tokens.spacingVerticalS},selectionActions:{display:"flex",gap:t.tokens.spacingHorizontalS,marginBottom:t.tokens.spacingVerticalXS}});exports.AuditBulkExportDialog=({open:a,units:s,config:l,onDismiss:o,onExport:r})=>{const c=i(),[d,u]=n.useState(new Set(s.map((e=>e.unitId)))),[p,x]=n.useState("html"),[m,g]=n.useState(!1);return e.jsx(t.Dialog,{open:a,onOpenChange:(e,n)=>{n.open||o()},children:e.jsx(t.DialogSurface,{style:{maxWidth:"480px"},children:e.jsxs(t.DialogBody,{children:[e.jsx(t.DialogTitle,{children:"Bulk Export Audits"}),e.jsxs(t.DialogContent,{children:[e.jsxs("div",{className:c.selectionActions,children:[e.jsx(t.Button,{size:"small",appearance:"subtle",onClick:()=>u(new Set(s.map((e=>e.unitId)))),children:"Select all"}),e.jsx(t.Button,{size:"small",appearance:"subtle",onClick:()=>u(new Set),children:"Deselect all"})]}),e.jsxs(t.Text,{size:200,style:{color:t.tokens.colorNeutralForeground2},children:[d.size," of ",s.length," ",l.terminology.unit.toLowerCase(),"s selected"]}),e.jsx("div",{className:c.unitList,children:s.map((n=>e.jsx(t.Checkbox,{label:`${n.unitName}${n.marketArea?` (${n.marketArea})`:""}`,checked:d.has(n.unitId),onChange:()=>{return e=n.unitId,u((n=>{const t=new Set(n);return t.has(e)?t.delete(e):t.add(e),t}));var e}},n.unitId)))}),e.jsx(t.Divider,{style:{margin:`${t.tokens.spacingVerticalS} 0`}}),e.jsxs(t.RadioGroup,{className:c.formatGroup,value:p,onChange:(e,n)=>x(n.value),children:[e.jsx(t.Radio,{value:"html",label:"Offline HTML"}),e.jsx(t.Radio,{value:"json",label:"JSON"})]})]}),e.jsxs(t.DialogActions,{children:[e.jsx(t.Button,{appearance:"secondary",onClick:o,disabled:m,children:"Cancel"}),e.jsx(t.Button,{appearance:"primary",onClick:async()=>{try{g(!0),await r([...d],p),o()}finally{g(!1)}},disabled:0===d.size||m,icon:m?e.jsx(t.Spinner,{size:"tiny"}):void 0,children:m?"Exporting…":`Export ${d.size}`})]})]})})})};
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Dialog for bulk uploading requirements from a CSV/JSON file.
3
+ */
4
+ import React from "react";
5
+ interface AuditBulkUploadDialogProps {
6
+ open: boolean;
7
+ onDismiss: () => void;
8
+ /** Called with raw file text content and detected format */
9
+ onUpload: (content: string, format: "csv" | "json") => Promise<void>;
10
+ title?: string;
11
+ description?: string;
12
+ }
13
+ export declare const AuditBulkUploadDialog: React.FC<AuditBulkUploadDialogProps>;
14
+ export {};
15
+ //# sourceMappingURL=AuditBulkUploadDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditBulkUploadDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditBulkUploadDialog.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAA2B,MAAM,OAAO,CAAC;AAkBhD,UAAU,0BAA0B;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,4DAA4D;IAC5D,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6BD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAoHtE,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),r=require("react"),n=require("@fluentui/react-components"),o=require("@fluentui/react-icons");const t=n.makeStyles({dropZone:{border:`2px dashed ${n.tokens.colorNeutralStroke1}`,borderRadius:n.tokens.borderRadiusMedium,padding:n.tokens.spacingVerticalXL,textAlign:"center",cursor:"pointer",backgroundColor:n.tokens.colorNeutralBackground2,":hover":{backgroundColor:n.tokens.colorNeutralBackground3}},hidden:{display:"none"},hint:{fontSize:n.tokens.fontSizeBase200,color:n.tokens.colorNeutralForeground3,marginTop:n.tokens.spacingVerticalXS},fileName:{marginTop:n.tokens.spacingVerticalS,fontSize:n.tokens.fontSizeBase200,color:n.tokens.colorNeutralForeground2}});exports.AuditBulkUploadDialog=({open:a,onDismiss:l,onUpload:s,title:i="Bulk Upload Requirements",description:c})=>{const d=t(),[u,p]=r.useState(null),[g,f]=r.useState(null),[x,h]=r.useState(null),[k,m]=r.useState(null),[S,j]=r.useState(!1),y=r.useRef(null),N=e=>{p(e.name),m(null),f(null),h(null);let r=null;if(e.name.endsWith(".csv"))r="csv";else{if(!e.name.endsWith(".json"))return void m("Only CSV and JSON files are supported.");r="json"}const n=new FileReader;n.onload=e=>{f(e.target?.result),h(r)},n.onerror=()=>m("Failed to read file."),n.readAsText(e)};return e.jsx(n.Dialog,{open:a,onOpenChange:(e,r)=>{r.open||l()},children:e.jsx(n.DialogSurface,{style:{maxWidth:"440px"},children:e.jsxs(n.DialogBody,{children:[e.jsx(n.DialogTitle,{children:i}),e.jsxs(n.DialogContent,{children:[c&&e.jsx(n.Text,{style:{marginBottom:n.tokens.spacingVerticalS,display:"block"},children:c}),e.jsxs("div",{className:d.dropZone,onDragOver:e=>e.preventDefault(),onDrop:e=>{e.preventDefault(),e.dataTransfer.files[0]&&N(e.dataTransfer.files[0])},onClick:()=>y.current?.click(),children:[e.jsx(o.ArrowUploadRegular,{style:{fontSize:32,color:n.tokens.colorNeutralForeground3}}),e.jsx("br",{}),e.jsx(n.Text,{children:"Drop a CSV or JSON file here, or click to browse"}),e.jsx("input",{ref:y,type:"file",accept:".csv,.json",className:d.hidden,onChange:e=>{e.target.files?.[0]&&N(e.target.files[0]),e.target.value=""}})]}),u&&e.jsxs(n.Text,{className:d.fileName,children:[u," ",g?"✓":""]}),e.jsx(n.Text,{className:d.hint,children:"Supported formats: CSV, JSON"}),k&&e.jsx(n.MessageBar,{intent:"error",style:{marginTop:8},children:e.jsx(n.MessageBarBody,{children:k})})]}),e.jsxs(n.DialogActions,{children:[e.jsx(n.Button,{appearance:"secondary",onClick:l,disabled:S,children:"Cancel"}),e.jsx(n.Button,{appearance:"primary",onClick:async()=>{if(g&&x)try{j(!0),await s(g,x),l()}catch(e){m(e instanceof Error?e.message:"Upload failed.")}finally{j(!1)}},disabled:!g||S,icon:S?e.jsx(n.Spinner,{size:"tiny"}):void 0,children:S?"Uploading…":"Upload"})]})]})})})};
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Circular progress ring showing audit compliance rate.
3
+ */
4
+ import React from "react";
5
+ interface AuditCircularProgressProps {
6
+ /** 0–100 */
7
+ value: number;
8
+ /** Display size in pixels */
9
+ size?: number;
10
+ /** Show numeric percentage label in center */
11
+ showLabel?: boolean;
12
+ }
13
+ export declare const AuditCircularProgress: React.FC<AuditCircularProgressProps>;
14
+ export {};
15
+ //# sourceMappingURL=AuditCircularProgress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditCircularProgress.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditCircularProgress.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,0BAA0B;IAClC,YAAY;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAmBD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CA+CtE,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),t=require("@fluentui/react-components");const o=t.makeStyles({root:{display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative"},label:{position:"absolute",fontWeight:t.tokens.fontWeightSemibold,fontSize:t.tokens.fontSizeBase200,color:t.tokens.colorNeutralForeground1}});exports.AuditCircularProgress=({value:s,size:r=64,showLabel:n=!0})=>{const l=o(),i=(r-8)/2,a=2*Math.PI*i,c=Math.max(0,Math.min(100,s)),d=a-c/100*a;let h=t.tokens.colorPaletteRedBackground3;return c>=100?h=t.tokens.colorPaletteGreenBackground3:c>=75&&(h=t.tokens.colorPaletteYellowBackground3),e.jsxs("div",{className:l.root,style:{width:r,height:r},children:[e.jsxs("svg",{width:r,height:r,style:{transform:"rotate(-90deg)"},children:[e.jsx("circle",{cx:r/2,cy:r/2,r:i,stroke:t.tokens.colorNeutralBackground4,strokeWidth:8,fill:"none"}),e.jsx("circle",{cx:r/2,cy:r/2,r:i,stroke:h,strokeWidth:8,fill:"none",strokeDasharray:a,strokeDashoffset:d,strokeLinecap:"round",style:{transition:"stroke-dashoffset 0.5s ease"}})]}),n&&e.jsxs(t.Text,{className:l.label,size:200,children:[c,"%"]})]})};
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Collapsible filter panel with group, category, and compliance status dropdowns.
3
+ */
4
+ import React from "react";
5
+ import type { AuditFilterState, ResolvedAuditConfig } from "../../types/audit";
6
+ interface AuditFilterBarProps {
7
+ filters: AuditFilterState;
8
+ availableGroups: string[];
9
+ availableCategories: string[];
10
+ config: ResolvedAuditConfig;
11
+ onUpdateFilters: (patch: Partial<AuditFilterState>) => void;
12
+ }
13
+ export declare const AuditFilterBar: React.FC<AuditFilterBarProps>;
14
+ export {};
15
+ //# sourceMappingURL=AuditFilterBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditFilterBar.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditFilterBar.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAaxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG/E,UAAU,mBAAmB;IAC3B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CAC7D;AAkCD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAyIxD,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),s=require("@fluentui/react-components"),i=require("@fluentui/react-icons"),t=require("../../utils/auditUtils.js");const a=s.makeStyles({surface:{display:"flex",flexDirection:"column",gap:s.tokens.spacingVerticalS,padding:s.tokens.spacingVerticalM,minWidth:"240px"},section:{display:"flex",flexDirection:"column",gap:"4px"},sectionLabel:{fontWeight:s.tokens.fontWeightSemibold,fontSize:s.tokens.fontSizeBase200,color:s.tokens.colorNeutralForeground2,textTransform:"uppercase",letterSpacing:"0.06em"},checkboxGroup:{display:"flex",flexDirection:"column",gap:"2px",paddingLeft:s.tokens.spacingHorizontalS}});function c(e,s){return e.includes(s)?e.filter((e=>e!==s)):[...e,s]}exports.AuditFilterBar=({filters:n,availableGroups:o,availableCategories:l,config:r,onUpdateFilters:d})=>{const h=a(),u=t.getEffectiveAnswerOptions(r),x=n.groups.length+n.categories.length+n.complianceStatuses.length+n.validityStatuses.length+(n.withComments?1:0)+(n.withPhotos?1:0);return e.jsxs(s.Popover,{trapFocus:!0,positioning:"below-start",children:[e.jsx(s.PopoverTrigger,{disableButtonEnhancement:!0,children:e.jsxs(s.Button,{icon:e.jsx(i.FilterRegular,{}),appearance:x>0?"primary":"secondary",size:"medium",children:["Filter",x>0?` (${x})`:""]})}),e.jsx(s.PopoverSurface,{children:e.jsxs("div",{className:h.surface,children:[o.length>0&&e.jsxs("div",{className:h.section,children:[e.jsx(s.Text,{className:h.sectionLabel,children:r.terminology.group}),e.jsx("div",{className:h.checkboxGroup,children:o.map((i=>e.jsx(s.Checkbox,{label:i,checked:n.groups.includes(i),onChange:()=>d({groups:c(n.groups,i)}),size:"medium"},i)))})]}),l.length>0&&e.jsxs(e.Fragment,{children:[e.jsx(s.Divider,{}),e.jsxs("div",{className:h.section,children:[e.jsx(s.Text,{className:h.sectionLabel,children:r.terminology.category}),e.jsx("div",{className:h.checkboxGroup,children:l.map((i=>e.jsx(s.Checkbox,{label:i,checked:n.categories.includes(i),onChange:()=>d({categories:c(n.categories,i)}),size:"medium"},i)))})]})]}),e.jsx(s.Divider,{}),e.jsxs("div",{className:h.section,children:[e.jsx(s.Text,{className:h.sectionLabel,children:"Status"}),e.jsx("div",{className:h.checkboxGroup,children:u.map((i=>e.jsx(s.Checkbox,{label:i.label,checked:n.complianceStatuses.includes(i.value),onChange:()=>d({complianceStatuses:c(n.complianceStatuses,i.value)}),size:"medium"},i.value)))})]}),e.jsx(s.Divider,{}),e.jsxs("div",{className:h.section,children:[e.jsx(s.Text,{className:h.sectionLabel,children:"Validity"}),e.jsx("div",{className:h.checkboxGroup,children:["valid","expiring-soon","urgent","expired"].map((i=>e.jsx(s.Checkbox,{label:"valid"===i?"Valid":"expiring-soon"===i?"Expiring soon":"urgent"===i?"Urgent (≤30 days)":"Expired",checked:n.validityStatuses.includes(i),onChange:()=>d({validityStatuses:c(n.validityStatuses,i)}),size:"medium"},i)))})]}),e.jsx(s.Divider,{}),e.jsxs("div",{className:h.checkboxGroup,children:[e.jsx(s.Checkbox,{label:"Has comments",checked:n.withComments,onChange:(e,s)=>d({withComments:!0===s.checked})}),e.jsx(s.Checkbox,{label:"Has photos",checked:n.withPhotos,onChange:(e,s)=>d({withPhotos:!0===s.checked})})]})]})})]})};
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Chip strip showing currently active filter tags with remove buttons.
3
+ */
4
+ import React from "react";
5
+ import type { AuditFilterState, ResolvedAuditConfig } from "../../types/audit";
6
+ interface AuditFilterChipsProps {
7
+ filters: AuditFilterState;
8
+ config: ResolvedAuditConfig;
9
+ onRemoveGroup?: (group: string) => void;
10
+ onRemoveCategory?: (category: string) => void;
11
+ onRemoveComplianceStatus?: (status: string) => void;
12
+ onRemoveValidityStatus?: (status: string) => void;
13
+ onClearAll: () => void;
14
+ }
15
+ export declare const AuditFilterChips: React.FC<AuditFilterChipsProps>;
16
+ export {};
17
+ //# sourceMappingURL=AuditFilterChips.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditFilterChips.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditFilterChips.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE/E,UAAU,qBAAqB;IAC7B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,wBAAwB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAcD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA0F5D,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var s=require("react/jsx-runtime"),e=require("@fluentui/react-components"),i=require("@fluentui/react-icons");const a=e.makeStyles({root:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:e.tokens.spacingHorizontalXS},clearBtn:{marginLeft:e.tokens.spacingHorizontalS}});exports.AuditFilterChips=({filters:l,config:r,onRemoveGroup:t,onRemoveCategory:o,onRemoveComplianceStatus:c,onRemoveValidityStatus:n,onClearAll:m})=>{const u=a();return l.groups.length>0||l.categories.length>0||l.complianceStatuses.length>0||l.validityStatuses.length>0?s.jsxs("div",{className:u.root,children:[s.jsxs(e.TagGroup,{onDismiss:(s,e)=>{const[i,a]=e.value.split(":",2);"group"===i&&t?t(a):"category"===i&&o?o(a):"compliance"===i&&c?c(a):"validity"===i&&n&&n(a)},"aria-label":"Active filters",children:[l.groups.map((a=>s.jsxs(e.Tag,{value:`group:${a}`,dismissible:!0,dismissIcon:s.jsx(i.DismissRegular,{}),shape:"circular",size:"small",children:[r.terminology.group,": ",a]},`group:${a}`))),l.categories.map((a=>s.jsxs(e.Tag,{value:`category:${a}`,dismissible:!0,dismissIcon:s.jsx(i.DismissRegular,{}),shape:"circular",size:"small",children:[r.terminology.category,": ",a]},`category:${a}`))),l.complianceStatuses.map((a=>s.jsx(e.Tag,{value:`compliance:${a}`,dismissible:!0,dismissIcon:s.jsx(i.DismissRegular,{}),shape:"circular",size:"small",children:a},`compliance:${a}`))),l.validityStatuses.map((a=>s.jsx(e.Tag,{value:`validity:${a}`,dismissible:!0,dismissIcon:s.jsx(i.DismissRegular,{}),shape:"circular",size:"small",children:a},`validity:${a}`)))]}),s.jsx(e.Button,{size:"small",appearance:"subtle",className:u.clearBtn,onClick:m,children:"Clear all"})]}):null};
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Breakdown of compliance progress per group (e.g. per Standard or Area).
3
+ */
4
+ import React from "react";
5
+ import type { AuditAnswer, ResolvedAuditConfig } from "../../types/audit";
6
+ interface AuditGroupsProgressProps {
7
+ answers: AuditAnswer[];
8
+ config: ResolvedAuditConfig;
9
+ }
10
+ export declare const AuditGroupsProgress: React.FC<AuditGroupsProgressProps>;
11
+ export {};
12
+ //# sourceMappingURL=AuditGroupsProgress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditGroupsProgress.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditGroupsProgress.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAI1E,UAAU,wBAAwB;IAChC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAoBD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAwClE,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),t=require("react"),o=require("@fluentui/react-components"),r=require("../../utils/auditUtils.js"),s=require("./AuditHorizontalProgress.js");const a=o.makeStyles({root:{display:"flex",flexDirection:"column",gap:o.tokens.spacingVerticalS},groupRow:{display:"flex",flexDirection:"column",gap:"4px"},header:{fontWeight:o.tokens.fontWeightSemibold,fontSize:o.tokens.fontSizeBase300,marginBottom:o.tokens.spacingVerticalXS}});exports.AuditGroupsProgress=({answers:n,config:i})=>{const l=a(),c=t.useMemo((()=>{const e=new Map;for(const t of n){const o=t.group||"(no group)",s=e.get(o)??{total:0,compliant:0};s.total++,r.isAnswerCompliant(t.answer,i)&&s.compliant++,e.set(o,s)}return[...e.entries()].map((([e,t])=>({name:e,...t,rate:t.total>0?Math.round(t.compliant/t.total*100):0}))).sort(((e,t)=>e.rate-t.rate))}),[n,i]);return 0===c.length?null:e.jsxs("div",{className:l.root,children:[e.jsxs(o.Text,{className:l.header,children:[i.terminology.group," Progress"]}),c.map((t=>e.jsx("div",{className:l.groupRow,children:e.jsx(s.AuditHorizontalProgress,{value:t.rate,label:t.name,sublabel:`${t.compliant}/${t.total}`})},t.name)))]})};
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Horizontal progress bar for showing group / overall compliance progress.
3
+ */
4
+ import React from "react";
5
+ interface AuditHorizontalProgressProps {
6
+ /** 0–100 */
7
+ value: number;
8
+ /** Optional label shown above */
9
+ label?: string;
10
+ /** Optional sub-label (e.g. "12/16") shown below */
11
+ sublabel?: string;
12
+ height?: number;
13
+ }
14
+ export declare const AuditHorizontalProgress: React.FC<AuditHorizontalProgressProps>;
15
+ export {};
16
+ //# sourceMappingURL=AuditHorizontalProgress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditHorizontalProgress.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditHorizontalProgress.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,4BAA4B;IACpC,YAAY;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA0BD,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAyC1E,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),r=require("@fluentui/react-components");const t=r.makeStyles({root:{display:"flex",flexDirection:"column",gap:"4px",width:"100%"},track:{width:"100%",backgroundColor:r.tokens.colorNeutralBackground4,borderRadius:r.tokens.borderRadiusCircular,overflow:"hidden"},fill:{borderRadius:r.tokens.borderRadiusCircular,transition:"width 0.4s ease"},header:{display:"flex",justifyContent:"space-between",alignItems:"baseline"}});exports.AuditHorizontalProgress=({value:o,label:s,sublabel:l,height:a=8})=>{const i=t(),n=Math.max(0,Math.min(100,o));let d=r.tokens.colorPaletteRedBackground3;return n>=100?d=r.tokens.colorPaletteGreenBackground3:n>=75&&(d=r.tokens.colorPaletteYellowBackground3),e.jsxs("div",{className:i.root,children:[(s||l)&&e.jsxs("div",{className:i.header,children:[s&&e.jsx(r.Text,{size:200,weight:"semibold",children:s}),l&&e.jsx(r.Text,{size:100,style:{color:r.tokens.colorNeutralForeground3},children:l})]}),e.jsx("div",{className:i.track,style:{height:a},children:e.jsx("div",{className:i.fill,style:{width:`${n}%`,height:a,backgroundColor:d}})})]})};
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Detail dialog for a single audit requirement — shows description, answer, comment, photos, and expiry.
3
+ * Both view-only and edit modes.
4
+ */
5
+ import React from "react";
6
+ import type { AuditAnswer, ResolvedAuditConfig } from "../../types/audit";
7
+ export interface AuditRequirementDialogProps {
8
+ open: boolean;
9
+ answer: AuditAnswer | null;
10
+ config: ResolvedAuditConfig;
11
+ readonly?: boolean;
12
+ onDismiss: () => void;
13
+ onSave?: (requirementId: string, answerValue: string, comment: string, photos: string, complianceDate?: string) => Promise<void>;
14
+ }
15
+ export declare const AuditRequirementDialog: React.FC<AuditRequirementDialogProps>;
16
+ //# sourceMappingURL=AuditRequirementDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditRequirementDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditRequirementDialog.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAgC,MAAM,OAAO,CAAC;AAkBrD,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAQ1E,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,CACP,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,MAAM,KACpB,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB;AA6BD,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAwKxE,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),i=require("react"),l=require("@fluentui/react-components"),a=require("@fluentui/react-icons"),n=require("./AuditAnswerCell.js"),s=require("../../utils/auditUtils.js");const t=l.makeStyles({content:{display:"flex",flexDirection:"column",gap:l.tokens.spacingVerticalM},metaRow:{display:"flex",flexWrap:"wrap",gap:l.tokens.spacingHorizontalS,alignItems:"center"},description:{color:l.tokens.colorNeutralForeground2,whiteSpace:"pre-wrap"},answerSection:{display:"flex",flexDirection:"column",gap:l.tokens.spacingVerticalXS},validityInfo:{fontSize:l.tokens.fontSizeBase200,color:l.tokens.colorNeutralForeground3}});exports.AuditRequirementDialog=({open:r,answer:o,config:c,readonly:d=!1,onDismiss:u,onSave:p})=>{const x=t(),[m,h]=i.useState(""),[j,g]=i.useState(""),[v,f]=i.useState(""),[w,y]=i.useState(!1);i.useEffect((()=>{r&&o&&(h(o.answer??""),g(o.comment??""),f(o.photos??""))}),[r,o]);const C=i.useCallback((async()=>{if(o&&p)try{y(!0),await p(o.requirementId,m,j,v),u()}finally{y(!1)}}),[o,m,j,v,p,u]);if(!o)return null;const S=s.calculateAuditTimeRemaining(o.validUntil),D=s.isAnswerCompliant(m,c);return e.jsx(l.Dialog,{open:r,onOpenChange:(e,i)=>{i.open||u()},children:e.jsx(l.DialogSurface,{style:{maxWidth:"560px"},children:e.jsxs(l.DialogBody,{children:[e.jsx(l.DialogTitle,{action:e.jsx(l.Button,{appearance:"subtle",icon:e.jsx(a.DismissFilled,{}),onClick:u,"aria-label":"Close"}),children:o.title}),e.jsx(l.DialogContent,{children:e.jsxs("div",{className:x.content,children:[e.jsxs("div",{className:x.metaRow,children:[o.group&&e.jsx(l.Badge,{appearance:"tint",color:"informative",size:"medium",children:o.group}),o.category&&e.jsx(l.Badge,{appearance:"tint",color:"subtle",size:"medium",children:o.category}),null!=o.level&&o.level>0&&e.jsxs(l.Badge,{appearance:"outline",size:"medium",children:["Level ",o.level]})]}),o.description&&e.jsx(l.Text,{className:x.description,children:o.description}),e.jsx(l.Divider,{}),e.jsxs("div",{className:x.answerSection,children:[e.jsx(l.Field,{label:"Answer",required:!0,children:d?e.jsxs(l.Text,{children:[m||"—"," ",D?e.jsx(l.Badge,{color:"success",size:"small",children:"Compliant"}):e.jsx(l.Badge,{color:"danger",size:"small",children:"Non-compliant"})]}):e.jsx(n.AuditAnswerCell,{answer:{...o,answer:m},config:c,onUpdate:(e,i)=>h(i)})}),e.jsxs(l.Text,{className:x.validityInfo,children:["Validity period: ",s.formatValidityPeriod(o.validityPeriodMonths),o.validUntil&&` · Valid until: ${new Date(o.validUntil).toLocaleDateString()}`,S?.isExpired&&" · EXPIRED"]})]}),!d&&e.jsx(l.Field,{label:"Comment",children:e.jsx(l.Textarea,{value:j,onChange:(e,i)=>g(i.value),resize:"vertical",rows:3,placeholder:"Add a comment…"})}),d&&j&&e.jsx(l.Field,{label:"Comment",children:e.jsx(l.Text,{children:j})}),!d&&e.jsx(l.Field,{label:"Photo URL(s)",hint:"Comma-separated URLs",children:e.jsx(l.Textarea,{value:v,onChange:(e,i)=>f(i.value),resize:"vertical",rows:2,placeholder:"https://…"})}),d&&v&&e.jsx(l.Field,{label:"Photos",children:e.jsx(l.Text,{children:v})})]})}),e.jsxs(l.DialogActions,{children:[e.jsx(l.Button,{appearance:"secondary",onClick:u,children:d?"Close":"Cancel"}),!d&&e.jsx(l.Button,{appearance:"primary",onClick:C,disabled:w,children:w?"Saving…":"Save"})]})]})})})};
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Displays the current user's audit role (Admin / Manager / Auditor) as a badge.
3
+ */
4
+ import React from "react";
5
+ import type { AuditRole, ResolvedAuditConfig } from "../../types/audit";
6
+ interface AuditRoleIndicatorProps {
7
+ role: AuditRole;
8
+ config: ResolvedAuditConfig;
9
+ showLabel?: boolean;
10
+ }
11
+ export declare const AuditRoleIndicator: React.FC<AuditRoleIndicatorProps>;
12
+ export {};
13
+ //# sourceMappingURL=AuditRoleIndicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditRoleIndicator.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditRoleIndicator.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExE,UAAU,uBAAuB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAsBD,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAyBhE,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),r=require("@fluentui/react-components"),n=require("@fluentui/react-icons");const a=r.makeStyles({root:{display:"inline-flex",alignItems:"center",gap:r.tokens.spacingHorizontalXS}}),i={Admin:e.jsx(n.ShieldPersonFilled,{}),Manager:e.jsx(n.PersonStarFilled,{}),Auditor:e.jsx(n.PersonFilled,{})},l={Admin:"brand",Manager:"informative",Auditor:"subtle"};exports.AuditRoleIndicator=({role:n,config:o,showLabel:t=!0})=>{const s=a(),c="Admin"===n?o.roleLabels.admin:"Manager"===n?o.roleLabels.manager:o.roleLabels.auditor;return e.jsx("span",{className:s.root,children:e.jsx(r.Badge,{color:l[n],icon:i[n],appearance:"tint",children:t?c:null})})};
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Search bar with debounced input for filtering audit requirements.
3
+ */
4
+ import React from "react";
5
+ interface AuditSearchBarProps {
6
+ value: string;
7
+ onChange: (value: string) => void;
8
+ placeholder?: string;
9
+ debounceMs?: number;
10
+ }
11
+ export declare const AuditSearchBar: React.FC<AuditSearchBarProps>;
12
+ export {};
13
+ //# sourceMappingURL=AuditSearchBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditSearchBar.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditSearchBar.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAgC,MAAM,OAAO,CAAC;AAMrD,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AASD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAmCxD,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),r=require("react"),t=require("@fluentui/react-components");const u=t.makeStyles({root:{width:"100%",maxWidth:"400px"}});exports.AuditSearchBar=({value:a,onChange:c,placeholder:n="Search…",debounceMs:o=200})=>{const s=u(),[l,i]=r.useState(a),m=r.useRef(null),h=r.useCallback(((e,r)=>{const t=r.value;i(t),m.current&&clearTimeout(m.current),m.current=setTimeout((()=>c(t)),o)}),[c,o]);return r.useCallback((()=>{i(""),m.current&&clearTimeout(m.current),c("")}),[c]),e.jsx(t.SearchBox,{className:s.root,value:l,onChange:h,placeholder:n,size:"medium"})};
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Sort preset buttons for rapidly ordering audits by compliance, expiry, etc.
3
+ */
4
+ import React from "react";
5
+ export type AuditSortPreset = "compliance-asc" | "compliance-desc" | "expiry-asc" | "expiry-urgent";
6
+ interface AuditSortPresetsProps {
7
+ active: AuditSortPreset | null;
8
+ onSelect: (preset: AuditSortPreset | null) => void;
9
+ }
10
+ export declare const AuditSortPresets: React.FC<AuditSortPresetsProps>;
11
+ export {};
12
+ //# sourceMappingURL=AuditSortPresets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditSortPresets.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditSortPresets.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,YAAY,GAAG,eAAe,CAAC;AAEpG,UAAU,qBAAqB;IAC7B,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;CACpD;AAkBD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAkB5D,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),r=require("@fluentui/react-components"),l=require("@fluentui/react-icons");const a=[{value:"compliance-asc",label:"Worst first",icon:e.jsx(l.ArrowSortUpRegular,{})},{value:"compliance-desc",label:"Best first",icon:e.jsx(l.ArrowSortDownRegular,{})},{value:"expiry-asc",label:"Expiring soon",icon:e.jsx(l.ClockRegular,{})},{value:"expiry-urgent",label:"Urgent",icon:e.jsx(l.ErrorCircleRegular,{})}],t=r.makeStyles({root:{display:"flex",flexWrap:"wrap",gap:r.tokens.spacingHorizontalXS,alignItems:"center"}});exports.AuditSortPresets=({active:l,onSelect:i})=>{const o=t();return e.jsx("div",{className:o.root,children:a.map((a=>e.jsx(r.Button,{size:"small",appearance:l===a.value?"primary":"subtle",icon:a.icon,onClick:()=>i(l===a.value?null:a.value),children:a.label},a.value)))})};
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Top-level dashboard widget showing key audit summary numbers in card tiles.
3
+ */
4
+ import React from "react";
5
+ import type { AuditAnswer, ResolvedAuditConfig } from "../../types/audit";
6
+ interface AuditSummaryDashboardProps {
7
+ answers: AuditAnswer[];
8
+ config: ResolvedAuditConfig;
9
+ unitName?: string;
10
+ }
11
+ export declare const AuditSummaryDashboard: React.FC<AuditSummaryDashboardProps>;
12
+ export {};
13
+ //# sourceMappingURL=AuditSummaryDashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditSummaryDashboard.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditSummaryDashboard.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAkB,MAAM,OAAO,CAAC;AASvC,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAQ1E,UAAU,0BAA0B;IAClC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAkCD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CA8EtE,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),i=require("react"),r=require("@fluentui/react-components"),a=require("../../utils/auditUtils.js"),s=require("./AuditCircularProgress.js");const l=r.makeStyles({root:{display:"flex",flexWrap:"wrap",gap:r.tokens.spacingHorizontalM,alignItems:"flex-start"},card:{flex:"1",minWidth:"140px",maxWidth:"200px"},cardBody:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:r.tokens.spacingVerticalXS,padding:r.tokens.spacingVerticalS},bigNumber:{fontSize:r.tokens.fontSizeHero800,fontWeight:r.tokens.fontWeightBold,lineHeight:"1"},label:{fontSize:r.tokens.fontSizeBase200,color:r.tokens.colorNeutralForeground2,textAlign:"center"}});exports.AuditSummaryDashboard=({answers:t,config:n,unitName:c})=>{const o=l(),d=i.useMemo((()=>{const e=t.length,i=a.getAuditComplianceRate(t,n),r=t.filter((e=>a.isAnswerCompliant(e.answer,n))).length;let s=0,l=0;for(const e of t){if(!e.validUntil)continue;const i=a.calculateAuditTimeRemaining(e.validUntil);i?.isExpired?l++:(i?.isUrgent||i?.isExpiringSoon)&&s++}return{total:e,compliant:r,complianceRate:i,expiring:s,expired:l}}),[t,n]);return e.jsxs("div",{className:o.root,children:[e.jsx(r.Card,{className:o.card,children:e.jsxs("div",{className:o.cardBody,children:[e.jsx(s.AuditCircularProgress,{value:d.complianceRate,size:72}),e.jsx(r.Text,{className:o.label,children:c??`${n.terminology.unit} Compliance`})]})}),e.jsx(r.Card,{className:o.card,children:e.jsxs("div",{className:o.cardBody,children:[e.jsx(r.Text,{className:o.bigNumber,style:{color:r.tokens.colorPaletteGreenForeground1},children:d.compliant}),e.jsx(r.Text,{className:o.label,children:"Compliant"})]})}),e.jsx(r.Card,{className:o.card,children:e.jsxs("div",{className:o.cardBody,children:[e.jsx(r.Text,{className:o.bigNumber,style:{color:r.tokens.colorPaletteRedForeground1},children:d.total-d.compliant}),e.jsx(r.Text,{className:o.label,children:"Non-compliant"})]})}),(d.expiring>0||d.expired>0)&&e.jsx(r.Card,{className:o.card,children:e.jsxs("div",{className:o.cardBody,children:[e.jsxs("div",{style:{display:"flex",gap:"8px",alignItems:"center"},children:[d.expired>0&&e.jsxs(r.Badge,{color:"danger",size:"large",children:[d.expired," exp."]}),d.expiring>0&&e.jsxs(r.Badge,{color:"warning",size:"large",children:[d.expiring," soon"]})]}),e.jsx(r.Text,{className:o.label,children:"Validity"})]})})]})};
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Dialog to export a single unit's audit package (JSON or offline HTML).
3
+ */
4
+ import React from "react";
5
+ import type { AuditAnswer, AuditRequirement, ResolvedAuditConfig } from "../../types/audit";
6
+ interface AuditUnitExportDialogProps {
7
+ open: boolean;
8
+ unitId: string;
9
+ unitName: string;
10
+ unitData: Record<string, unknown> | null;
11
+ requirements: AuditRequirement[];
12
+ answers: AuditAnswer[];
13
+ config: ResolvedAuditConfig;
14
+ onDismiss: () => void;
15
+ }
16
+ export declare const AuditUnitExportDialog: React.FC<AuditUnitExportDialogProps>;
17
+ export {};
18
+ //# sourceMappingURL=AuditUnitExportDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditUnitExportDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditUnitExportDialog.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAexC,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAO5F,UAAU,0BAA0B;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAaD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CA8EtE,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),t=require("react"),i=require("@fluentui/react-components"),n=require("../../utils/auditExport.js");const o=i.makeStyles({description:{color:i.tokens.colorNeutralForeground2,fontSize:i.tokens.fontSizeBase200,marginBottom:i.tokens.spacingVerticalS},radioGroup:{marginTop:i.tokens.spacingVerticalS}});exports.AuditUnitExportDialog=({open:a,unitId:r,unitName:s,unitData:l,requirements:c,answers:d,config:u,onDismiss:p})=>{const x=o(),[g,m]=t.useState("html");return e.jsx(i.Dialog,{open:a,onOpenChange:(e,t)=>{t.open||p()},children:e.jsx(i.DialogSurface,{style:{maxWidth:"420px"},children:e.jsxs(i.DialogBody,{children:[e.jsx(i.DialogTitle,{children:"Export Audit"}),e.jsxs(i.DialogContent,{children:[e.jsxs(i.Text,{className:x.description,children:["Export audit data for ",e.jsx("strong",{children:s})," as a portable file."]}),e.jsxs(i.RadioGroup,{className:x.radioGroup,value:g,onChange:(e,t)=>m(t.value),children:[e.jsx(i.Radio,{value:"html",label:"Offline HTML (self-contained, can be filled without internet)"}),e.jsx(i.Radio,{value:"json",label:"JSON (for import or archiving)"})]})]}),e.jsxs(i.DialogActions,{children:[e.jsx(i.Button,{appearance:"secondary",onClick:p,children:"Cancel"}),e.jsx(i.Button,{appearance:"primary",onClick:()=>{const e=n.buildAuditPackage({id:r,name:s,...l},c,d,u);let t,i,o;"json"===g?(t=n.exportAuditPackageAsJson(e),i=`audit_${r}_${(new Date).toISOString().slice(0,10)}.json`,o="application/json"):(t=n.exportAuditPackageAsHtml(e),i=`audit_${r}_${(new Date).toISOString().slice(0,10)}.html`,o="text/html");const a=new Blob([t],{type:o}),x=URL.createObjectURL(a),m=document.createElement("a");m.href=x,m.download=i,m.click(),URL.revokeObjectURL(x),p()},children:"Export"})]})]})})})};
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Dialog to import an audit package from a previously exported JSON or HTML file.
3
+ */
4
+ import React from "react";
5
+ import type { AuditPackage } from "../../types/audit";
6
+ interface AuditUnitImportDialogProps {
7
+ open: boolean;
8
+ onDismiss: () => void;
9
+ onImport: (pkg: AuditPackage) => void;
10
+ }
11
+ export declare const AuditUnitImportDialog: React.FC<AuditUnitImportDialogProps>;
12
+ export {};
13
+ //# sourceMappingURL=AuditUnitImportDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditUnitImportDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditUnitImportDialog.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAA2B,MAAM,OAAO,CAAC;AAgBhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,UAAU,0BAA0B;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAC;CACvC;AAwBD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CA6FtE,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),r=require("react"),o=require("@fluentui/react-components"),t=require("@fluentui/react-icons"),n=require("../../utils/auditExport.js");const a=o.makeStyles({dropZone:{border:`2px dashed ${o.tokens.colorNeutralStroke1}`,borderRadius:o.tokens.borderRadiusMedium,padding:o.tokens.spacingVerticalXL,textAlign:"center",cursor:"pointer",backgroundColor:o.tokens.colorNeutralBackground2,":hover":{backgroundColor:o.tokens.colorNeutralBackground3}},hidden:{display:"none"},fileName:{marginTop:o.tokens.spacingVerticalS,fontSize:o.tokens.fontSizeBase200,color:o.tokens.colorNeutralForeground2}});exports.AuditUnitImportDialog=({open:s,onDismiss:l,onImport:i})=>{const c=a(),[d,u]=r.useState(null),[p,g]=r.useState(null),[m,x]=r.useState(null),h=r.useRef(null),f=e=>{u(e.name),x(null),g(null);const r=new FileReader;r.onload=r=>{try{const o=r.target?.result,t=e.name.endsWith(".html")?n.importAuditPackageFromHtml(o):n.importAuditPackageFromJson(o);g(t)}catch(e){x(e instanceof Error?e.message:"Failed to parse file")}},r.readAsText(e)};return e.jsx(o.Dialog,{open:s,onOpenChange:(e,r)=>{r.open||l()},children:e.jsx(o.DialogSurface,{style:{maxWidth:"420px"},children:e.jsxs(o.DialogBody,{children:[e.jsx(o.DialogTitle,{children:"Import Audit"}),e.jsxs(o.DialogContent,{children:[e.jsxs("div",{className:c.dropZone,onDragOver:e=>e.preventDefault(),onDrop:e=>{e.preventDefault(),e.dataTransfer.files[0]&&f(e.dataTransfer.files[0])},onClick:()=>h.current?.click(),children:[e.jsx(t.ArrowUploadRegular,{style:{fontSize:32,color:o.tokens.colorNeutralForeground3}}),e.jsx("br",{}),e.jsx(o.Text,{children:"Drop a JSON or HTML audit file here, or click to browse"}),e.jsx("input",{ref:h,type:"file",accept:".json,.html",className:c.hidden,onChange:e=>{e.target.files?.[0]&&f(e.target.files[0])}})]}),d&&e.jsxs(o.Text,{className:c.fileName,children:["Selected: ",d,p&&" ✓"]}),m&&e.jsx(o.MessageBar,{intent:"error",style:{marginTop:8},children:e.jsx(o.MessageBarBody,{children:m})})]}),e.jsxs(o.DialogActions,{children:[e.jsx(o.Button,{appearance:"secondary",onClick:l,children:"Cancel"}),e.jsx(o.Button,{appearance:"primary",onClick:()=>{p&&(i(p),l())},disabled:!p,children:"Import"})]})]})})})};
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Dropdown or search-enabled combobox to let admin/manager switch between auditable units.
3
+ */
4
+ import React from "react";
5
+ import type { ResolvedAuditConfig } from "../../types/audit";
6
+ export interface AuditUnitOption {
7
+ id: string;
8
+ name: string;
9
+ marketArea?: string;
10
+ }
11
+ interface AuditUnitSwitcherProps {
12
+ units: AuditUnitOption[];
13
+ selectedUnitId: string | null;
14
+ onSelect: (unitId: string) => void;
15
+ config: ResolvedAuditConfig;
16
+ disabled?: boolean;
17
+ }
18
+ export declare const AuditUnitSwitcher: React.FC<AuditUnitSwitcherProps>;
19
+ export {};
20
+ //# sourceMappingURL=AuditUnitSwitcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditUnitSwitcher.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/AuditUnitSwitcher.tsx"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,sBAAsB;IAC9B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAcD,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAmC9D,CAAC"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("react/jsx-runtime"),t=require("@fluentui/react-components");const i=t.makeStyles({root:{display:"flex",flexDirection:"column",gap:t.tokens.spacingVerticalXS,minWidth:"200px"},combobox:{width:"100%"}});exports.AuditUnitSwitcher=({units:o,selectedUnitId:n,onSelect:r,config:a,disabled:l=!1})=>{const s=i(),c=o.find((e=>e.id===n));return e.jsxs("div",{className:s.root,children:[e.jsx(t.Label,{size:"small",htmlFor:"audit-unit-switcher",children:a.terminology.unit}),e.jsx(t.Combobox,{id:"audit-unit-switcher",className:s.combobox,value:c?.name??"",selectedOptions:n?[n]:[],onOptionSelect:(e,t)=>{t.optionValue&&r(t.optionValue)},placeholder:`Select ${a.terminology.unit.toLowerCase()}…`,disabled:l,freeform:!1,children:o.map((i=>e.jsx(t.Option,{value:i.id,children:i.marketArea?`${i.name} (${i.marketArea})`:i.name},i.id)))})]})};
@@ -0,0 +1,20 @@
1
+ export { AuditCircularProgress } from "./AuditCircularProgress";
2
+ export { AuditHorizontalProgress } from "./AuditHorizontalProgress";
3
+ export { AuditRoleIndicator } from "./AuditRoleIndicator";
4
+ export { AuditUnitSwitcher } from "./AuditUnitSwitcher";
5
+ export type { AuditUnitOption } from "./AuditUnitSwitcher";
6
+ export { AuditAnswerCell } from "./AuditAnswerCell";
7
+ export { AuditSearchBar } from "./AuditSearchBar";
8
+ export { AuditFilterChips } from "./AuditFilterChips";
9
+ export { AuditFilterBar } from "./AuditFilterBar";
10
+ export { AuditGroupsProgress } from "./AuditGroupsProgress";
11
+ export { AuditSummaryDashboard } from "./AuditSummaryDashboard";
12
+ export { AuditRequirementDialog } from "./AuditRequirementDialog";
13
+ export type { AuditRequirementDialogProps } from "./AuditRequirementDialog";
14
+ export { AuditUnitExportDialog } from "./AuditUnitExportDialog";
15
+ export { AuditUnitImportDialog } from "./AuditUnitImportDialog";
16
+ export { AuditBulkExportDialog } from "./AuditBulkExportDialog";
17
+ export { AuditBulkUploadDialog } from "./AuditBulkUploadDialog";
18
+ export { AuditSortPresets } from "./AuditSortPresets";
19
+ export type { AuditSortPreset } from "./AuditSortPresets";
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/audit/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,YAAY,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
@@ -50,4 +50,5 @@ export type { RecordModalProps } from "./RecordModal";
50
50
  export { default as BulkUploadDialog } from "./BulkUploadDialog";
51
51
  export { CookieBanner } from "./CookieBanner";
52
52
  export type { CookieBannerProps } from "./CookieBanner";
53
+ export * from "./audit";
53
54
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"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"}