codicent-app-sdk 0.5.6 → 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 (250) 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/hooks/useUserRoles.d.ts +1 -1
  94. package/dist/cjs/hooks/useUserRoles.d.ts.map +1 -1
  95. package/dist/cjs/hooks/useUserRoles.js +1 -1
  96. package/dist/cjs/index.js +1 -1
  97. package/dist/cjs/pages/AppFrame.js +1 -1
  98. package/dist/cjs/pages/Chat.js +1 -1
  99. package/dist/cjs/pages/Compose.js +1 -1
  100. package/dist/cjs/pages/CrmPage.js +1 -1
  101. package/dist/cjs/pages/CrmPagePersistent.js +1 -1
  102. package/dist/cjs/pages/FormAccept.js +1 -1
  103. package/dist/cjs/pages/FormInvite.js +1 -1
  104. package/dist/cjs/pages/Home.js +1 -1
  105. package/dist/cjs/pages/HtmlViewer.js +1 -1
  106. package/dist/cjs/pages/ListPage.js +1 -1
  107. package/dist/cjs/pages/Login.js +1 -1
  108. package/dist/cjs/pages/Menu.js +1 -1
  109. package/dist/cjs/pages/Purchase.js +1 -1
  110. package/dist/cjs/pages/Sales.js +1 -1
  111. package/dist/cjs/pages/Search.js +1 -1
  112. package/dist/cjs/pages/Snap.js +1 -1
  113. package/dist/cjs/types/audit.d.ts +358 -0
  114. package/dist/cjs/types/audit.d.ts.map +1 -0
  115. package/dist/cjs/types/index.d.ts +1 -0
  116. package/dist/cjs/types/index.d.ts.map +1 -1
  117. package/dist/cjs/utils/auditExport.d.ts +37 -0
  118. package/dist/cjs/utils/auditExport.d.ts.map +1 -0
  119. package/dist/cjs/utils/auditExport.js +1 -0
  120. package/dist/cjs/utils/auditUtils.d.ts +59 -0
  121. package/dist/cjs/utils/auditUtils.d.ts.map +1 -0
  122. package/dist/cjs/utils/auditUtils.js +1 -0
  123. package/dist/cjs/utils/index.d.ts +2 -0
  124. package/dist/cjs/utils/index.d.ts.map +1 -1
  125. package/dist/esm/components/AiInput.js +1 -1
  126. package/dist/esm/components/AudioIcon.js +1 -1
  127. package/dist/esm/components/ChatInput.js +1 -1
  128. package/dist/esm/components/ChatMessage.js +1 -1
  129. package/dist/esm/components/CombinedPlaceholderDialog.js +1 -1
  130. package/dist/esm/components/Footer.js +1 -1
  131. package/dist/esm/components/Header.js +1 -1
  132. package/dist/esm/components/HtmlView.js +1 -1
  133. package/dist/esm/components/MessageInput.js +1 -1
  134. package/dist/esm/components/MessageItem.js +1 -1
  135. package/dist/esm/components/Profile.js +1 -1
  136. package/dist/esm/components/Prompt.js +1 -1
  137. package/dist/esm/components/SnapFooter.js +1 -1
  138. package/dist/esm/components/TextHeader.js +1 -1
  139. package/dist/esm/components/TypingIndicator.js +1 -1
  140. package/dist/esm/components/UploadFile.js +1 -1
  141. package/dist/esm/components/UrlProcessor.js +1 -1
  142. package/dist/esm/components/VoiceIcon.js +1 -1
  143. package/dist/esm/components/audit/AuditAnswerCell.d.ts +15 -0
  144. package/dist/esm/components/audit/AuditAnswerCell.d.ts.map +1 -0
  145. package/dist/esm/components/audit/AuditAnswerCell.js +1 -0
  146. package/dist/esm/components/audit/AuditBulkExportDialog.d.ts +16 -0
  147. package/dist/esm/components/audit/AuditBulkExportDialog.d.ts.map +1 -0
  148. package/dist/esm/components/audit/AuditBulkExportDialog.js +1 -0
  149. package/dist/esm/components/audit/AuditBulkUploadDialog.d.ts +15 -0
  150. package/dist/esm/components/audit/AuditBulkUploadDialog.d.ts.map +1 -0
  151. package/dist/esm/components/audit/AuditBulkUploadDialog.js +1 -0
  152. package/dist/esm/components/audit/AuditCircularProgress.d.ts +15 -0
  153. package/dist/esm/components/audit/AuditCircularProgress.d.ts.map +1 -0
  154. package/dist/esm/components/audit/AuditCircularProgress.js +1 -0
  155. package/dist/esm/components/audit/AuditFilterBar.d.ts +15 -0
  156. package/dist/esm/components/audit/AuditFilterBar.d.ts.map +1 -0
  157. package/dist/esm/components/audit/AuditFilterBar.js +1 -0
  158. package/dist/esm/components/audit/AuditFilterChips.d.ts +17 -0
  159. package/dist/esm/components/audit/AuditFilterChips.d.ts.map +1 -0
  160. package/dist/esm/components/audit/AuditFilterChips.js +1 -0
  161. package/dist/esm/components/audit/AuditGroupsProgress.d.ts +12 -0
  162. package/dist/esm/components/audit/AuditGroupsProgress.d.ts.map +1 -0
  163. package/dist/esm/components/audit/AuditGroupsProgress.js +1 -0
  164. package/dist/esm/components/audit/AuditHorizontalProgress.d.ts +16 -0
  165. package/dist/esm/components/audit/AuditHorizontalProgress.d.ts.map +1 -0
  166. package/dist/esm/components/audit/AuditHorizontalProgress.js +1 -0
  167. package/dist/esm/components/audit/AuditRequirementDialog.d.ts +16 -0
  168. package/dist/esm/components/audit/AuditRequirementDialog.d.ts.map +1 -0
  169. package/dist/esm/components/audit/AuditRequirementDialog.js +1 -0
  170. package/dist/esm/components/audit/AuditRoleIndicator.d.ts +13 -0
  171. package/dist/esm/components/audit/AuditRoleIndicator.d.ts.map +1 -0
  172. package/dist/esm/components/audit/AuditRoleIndicator.js +1 -0
  173. package/dist/esm/components/audit/AuditSearchBar.d.ts +13 -0
  174. package/dist/esm/components/audit/AuditSearchBar.d.ts.map +1 -0
  175. package/dist/esm/components/audit/AuditSearchBar.js +1 -0
  176. package/dist/esm/components/audit/AuditSortPresets.d.ts +12 -0
  177. package/dist/esm/components/audit/AuditSortPresets.d.ts.map +1 -0
  178. package/dist/esm/components/audit/AuditSortPresets.js +1 -0
  179. package/dist/esm/components/audit/AuditSummaryDashboard.d.ts +13 -0
  180. package/dist/esm/components/audit/AuditSummaryDashboard.d.ts.map +1 -0
  181. package/dist/esm/components/audit/AuditSummaryDashboard.js +1 -0
  182. package/dist/esm/components/audit/AuditUnitExportDialog.d.ts +18 -0
  183. package/dist/esm/components/audit/AuditUnitExportDialog.d.ts.map +1 -0
  184. package/dist/esm/components/audit/AuditUnitExportDialog.js +1 -0
  185. package/dist/esm/components/audit/AuditUnitImportDialog.d.ts +13 -0
  186. package/dist/esm/components/audit/AuditUnitImportDialog.d.ts.map +1 -0
  187. package/dist/esm/components/audit/AuditUnitImportDialog.js +1 -0
  188. package/dist/esm/components/audit/AuditUnitSwitcher.d.ts +20 -0
  189. package/dist/esm/components/audit/AuditUnitSwitcher.d.ts.map +1 -0
  190. package/dist/esm/components/audit/AuditUnitSwitcher.js +1 -0
  191. package/dist/esm/components/audit/index.d.ts +20 -0
  192. package/dist/esm/components/audit/index.d.ts.map +1 -0
  193. package/dist/esm/components/index.d.ts +1 -0
  194. package/dist/esm/components/index.d.ts.map +1 -1
  195. package/dist/esm/hooks/index.d.ts +12 -0
  196. package/dist/esm/hooks/index.d.ts.map +1 -1
  197. package/dist/esm/hooks/useAuditFilters.d.ts +17 -0
  198. package/dist/esm/hooks/useAuditFilters.d.ts.map +1 -0
  199. package/dist/esm/hooks/useAuditFilters.js +1 -0
  200. package/dist/esm/hooks/useAuditManagerData.d.ts +25 -0
  201. package/dist/esm/hooks/useAuditManagerData.d.ts.map +1 -0
  202. package/dist/esm/hooks/useAuditManagerData.js +1 -0
  203. package/dist/esm/hooks/useAuditManagerFilters.d.ts +16 -0
  204. package/dist/esm/hooks/useAuditManagerFilters.d.ts.map +1 -0
  205. package/dist/esm/hooks/useAuditManagerFilters.js +1 -0
  206. package/dist/esm/hooks/useAuditRequirementsFilters.d.ts +17 -0
  207. package/dist/esm/hooks/useAuditRequirementsFilters.d.ts.map +1 -0
  208. package/dist/esm/hooks/useAuditRequirementsFilters.js +1 -0
  209. package/dist/esm/hooks/useAuditRoleCheck.d.ts +26 -0
  210. package/dist/esm/hooks/useAuditRoleCheck.d.ts.map +1 -0
  211. package/dist/esm/hooks/useAuditRoleCheck.js +1 -0
  212. package/dist/esm/hooks/useAuditState.d.ts +34 -0
  213. package/dist/esm/hooks/useAuditState.d.ts.map +1 -0
  214. package/dist/esm/hooks/useAuditState.js +1 -0
  215. package/dist/esm/hooks/useAuthState.js +1 -1
  216. package/dist/esm/hooks/useCodicentState.js +1 -1
  217. package/dist/esm/hooks/useUserRoles.d.ts +1 -1
  218. package/dist/esm/hooks/useUserRoles.d.ts.map +1 -1
  219. package/dist/esm/hooks/useUserRoles.js +1 -1
  220. package/dist/esm/index.js +1 -1
  221. package/dist/esm/pages/AppFrame.js +1 -1
  222. package/dist/esm/pages/Chat.js +1 -1
  223. package/dist/esm/pages/Compose.js +1 -1
  224. package/dist/esm/pages/CrmPage.js +1 -1
  225. package/dist/esm/pages/CrmPagePersistent.js +1 -1
  226. package/dist/esm/pages/FormAccept.js +1 -1
  227. package/dist/esm/pages/FormInvite.js +1 -1
  228. package/dist/esm/pages/Home.js +1 -1
  229. package/dist/esm/pages/HtmlViewer.js +1 -1
  230. package/dist/esm/pages/ListPage.js +1 -1
  231. package/dist/esm/pages/Login.js +1 -1
  232. package/dist/esm/pages/Menu.js +1 -1
  233. package/dist/esm/pages/Purchase.js +1 -1
  234. package/dist/esm/pages/Sales.js +1 -1
  235. package/dist/esm/pages/Search.js +1 -1
  236. package/dist/esm/pages/Snap.js +1 -1
  237. package/dist/esm/types/audit.d.ts +358 -0
  238. package/dist/esm/types/audit.d.ts.map +1 -0
  239. package/dist/esm/types/index.d.ts +1 -0
  240. package/dist/esm/types/index.d.ts.map +1 -1
  241. package/dist/esm/utils/auditExport.d.ts +37 -0
  242. package/dist/esm/utils/auditExport.d.ts.map +1 -0
  243. package/dist/esm/utils/auditExport.js +1 -0
  244. package/dist/esm/utils/auditUtils.d.ts +59 -0
  245. package/dist/esm/utils/auditUtils.d.ts.map +1 -0
  246. package/dist/esm/utils/auditUtils.js +1 -0
  247. package/dist/esm/utils/index.d.ts +2 -0
  248. package/dist/esm/utils/index.d.ts.map +1 -1
  249. package/dist/index.d.ts +800 -2
  250. package/package.json +1 -1
@@ -1 +1 @@
1
- import{jsxs as o,jsx as t}from"react/jsx-runtime";import{makeStyles as s}from"@fluentui/react-components";import"react";import"../services/codicent.js";import"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import{Text as r}from"./Text.js";import{Spinner as i}from"./Spinner.js";import"./TextHeader.js";import"./Dialog.js";import"./ChatInput.js";import"./CombinedPlaceholderDialog.js";import"./ChatMessage.js";import"./Header.js";import"@fluentui/react-icons";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"exceljs";import"./FileThumbnail.js";import"./MessageInput.js";import"./UploadFile.js";import"./SnapFooter.js";import"./Profile.js";import"./MessageItem.js";import"./Content.js";import"./AiInput.js";import"./SearchBox.js";import"./DataMessagePicker.js";import"./HtmlView.js";import"./Footer.js";import"./Page.js";import"./QrCodeDialog.js";import"./QrScanner.js";import e from"../hooks/useLocalization.js";import"./OfflineMessage.js";import"./LanguageSelector.js";import"./ListView.js";import"./RecordModal.js";import"./BulkUploadDialog.js";import"./CookieBanner.js";import"../pages/AppFrame.js";import"../pages/Canvas.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Menu.js";import"../pages/Log.js";import"../pages/Login.js";import"../pages/Home.js";import"../pages/ListPage.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"react-router-dom";import"../pages/Purchase.js";import"../pages/QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";const p=s({typingContainer:{display:"flex",gap:"8px"}}),a=()=>{const s=p(),{t:a}=e();return o("div",{className:s.typingContainer,children:[t(i,{size:"extra-small"}),t(r,{size:400,children:a("Tänker...")})]})};export{a as default};
1
+ import{jsxs as t,jsx as i}from"react/jsx-runtime";import{makeStyles as o}from"@fluentui/react-components";import"react";import"../services/codicent.js";import"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import{Text as r}from"./Text.js";import{Spinner as s}from"./Spinner.js";import"./TextHeader.js";import"./Dialog.js";import"./ChatInput.js";import"./CombinedPlaceholderDialog.js";import"./ChatMessage.js";import"./Header.js";import"@fluentui/react-icons";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"exceljs";import"./FileThumbnail.js";import"./MessageInput.js";import"./UploadFile.js";import"./SnapFooter.js";import"./Profile.js";import"./MessageItem.js";import"./Content.js";import"./AiInput.js";import"./SearchBox.js";import"./DataMessagePicker.js";import"./HtmlView.js";import"./Footer.js";import"./Page.js";import"./QrCodeDialog.js";import"./QrScanner.js";import e from"../hooks/useLocalization.js";import"./OfflineMessage.js";import"./LanguageSelector.js";import"./ListView.js";import"./RecordModal.js";import"./BulkUploadDialog.js";import"./CookieBanner.js";import"./audit/AuditCircularProgress.js";import"./audit/AuditHorizontalProgress.js";import"./audit/AuditRoleIndicator.js";import"./audit/AuditUnitSwitcher.js";import"./audit/AuditAnswerCell.js";import"./audit/AuditSearchBar.js";import"./audit/AuditFilterChips.js";import"./audit/AuditFilterBar.js";import"./audit/AuditGroupsProgress.js";import"./audit/AuditSummaryDashboard.js";import"./audit/AuditRequirementDialog.js";import"./audit/AuditUnitExportDialog.js";import"./audit/AuditUnitImportDialog.js";import"./audit/AuditBulkExportDialog.js";import"./audit/AuditBulkUploadDialog.js";import"./audit/AuditSortPresets.js";import"../pages/AppFrame.js";import"../pages/Canvas.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Menu.js";import"../pages/Log.js";import"../pages/Login.js";import"../pages/Home.js";import"../pages/ListPage.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"react-router-dom";import"../pages/Purchase.js";import"../pages/QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";const p=o({typingContainer:{display:"flex",gap:"8px"}}),a=()=>{const o=p(),{t:a}=e();return t("div",{className:o.typingContainer,children:[i(s,{size:"extra-small"}),i(r,{size:400,children:a("Tänker...")})]})};export{a as default};
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{forwardRef as e,useState as t,useRef as s,useEffect as r,useImperativeHandle as i}from"react";import{makeStyles as a}from"@fluentui/react-components";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{isMobileDevice as p}from"../utils/device.js";import"exceljs";import"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import{Spinner as m}from"./Spinner.js";import"./TextHeader.js";import"./TypingIndicator.js";import"./Dialog.js";import"./ChatInput.js";import"./CombinedPlaceholderDialog.js";import"./ChatMessage.js";import"./Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../pages/AppFrame.js";import"../pages/Canvas.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Menu.js";import"../pages/Log.js";import"../pages/Login.js";import"../pages/Home.js";import"../pages/ListPage.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"react-router-dom";import"../pages/Purchase.js";import"./Content.js";import"./Page.js";import"../pages/QrScan.js";import"../hooks/useLocalization.js";import"./FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"./MessageInput.js";import"./SnapFooter.js";import"./Profile.js";import"./MessageItem.js";import"./AiInput.js";import"./SearchBox.js";import"./DataMessagePicker.js";import"./HtmlView.js";import"./Footer.js";import"./QrCodeDialog.js";import"./QrScanner.js";import"./OfflineMessage.js";import"./LanguageSelector.js";import"./ListView.js";import"./RecordModal.js";import"./BulkUploadDialog.js";import"./CookieBanner.js";const n=a({imageUpload:{display:"none"},spinner:{marginTop:"10px"}}),l=e((({onFileUploaded:e,accept:a,capture:l,multiple:c=!1,onUploading:j,className:g,id:u,codicentService:d},f)=>{const h=n(),[v,w]=t(!1),C=s(null);r((()=>{j(v)}),[v,j]);const y=async(o,e)=>{const t=new FormData;t.append("file",e),w(!0);try{const e=await d.uploadFile(o,t);return w(!1),e}catch(e){return console.error("Upload failed for file:",o,e),w(!1),null}},b=()=>{C.current?.click()};i(f,(()=>({triggerUpload:b})));const S=l&&p();return o("div",{id:u,className:g,children:v?o(m,{"aria-label":"Uploading...",className:h.spinner}):o("input",{ref:C,type:"file",className:h.imageUpload,onChange:async()=>{try{const o=C.current;if(o&&o.files){const t=[];for(let e=0;e<o.files.length;e++){const s=o.files[e],r=s.name.split("\\").pop()||s.name,i=await y(r,s);i&&t.push(i)}t.length>0&&e(t)}}catch(o){console.error("Error uploading files:",o)}},accept:a,multiple:c,...S?{capture:l}:{}})})}));export{l as default};
1
+ import{jsx as t}from"react/jsx-runtime";import{forwardRef as i,useState as o,useRef as r,useEffect as s,useImperativeHandle as e}from"react";import{makeStyles as a}from"@fluentui/react-components";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import{isMobileDevice as p}from"../utils/device.js";import"exceljs";import"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import{Spinner as m}from"./Spinner.js";import"./TextHeader.js";import"./TypingIndicator.js";import"./Dialog.js";import"./ChatInput.js";import"./CombinedPlaceholderDialog.js";import"./ChatMessage.js";import"./Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../pages/AppFrame.js";import"../pages/Canvas.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Menu.js";import"../pages/Log.js";import"../pages/Login.js";import"../pages/Home.js";import"../pages/ListPage.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"react-router-dom";import"../pages/Purchase.js";import"./Content.js";import"./Page.js";import"../pages/QrScan.js";import"../hooks/useLocalization.js";import"./FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"./MessageInput.js";import"./SnapFooter.js";import"./Profile.js";import"./MessageItem.js";import"./AiInput.js";import"./SearchBox.js";import"./DataMessagePicker.js";import"./HtmlView.js";import"./Footer.js";import"./QrCodeDialog.js";import"./QrScanner.js";import"./OfflineMessage.js";import"./LanguageSelector.js";import"./ListView.js";import"./RecordModal.js";import"./BulkUploadDialog.js";import"./CookieBanner.js";import"./audit/AuditCircularProgress.js";import"./audit/AuditHorizontalProgress.js";import"./audit/AuditRoleIndicator.js";import"./audit/AuditUnitSwitcher.js";import"./audit/AuditAnswerCell.js";import"./audit/AuditSearchBar.js";import"./audit/AuditFilterChips.js";import"./audit/AuditFilterBar.js";import"./audit/AuditGroupsProgress.js";import"./audit/AuditSummaryDashboard.js";import"./audit/AuditRequirementDialog.js";import"./audit/AuditUnitExportDialog.js";import"./audit/AuditUnitImportDialog.js";import"./audit/AuditBulkExportDialog.js";import"./audit/AuditBulkUploadDialog.js";import"./audit/AuditSortPresets.js";const l=a({imageUpload:{display:"none"},spinner:{marginTop:"10px"}}),n=i((({onFileUploaded:i,accept:a,capture:n,multiple:j=!1,onUploading:u,className:d,id:c,codicentService:g},h)=>{const f=l(),[A,C]=o(!1),w=r(null);s((()=>{u(A)}),[A,u]);const S=async(t,i)=>{const o=new FormData;o.append("file",i),C(!0);try{const i=await g.uploadFile(t,o);return C(!1),i}catch(i){return console.error("Upload failed for file:",t,i),C(!1),null}},v=()=>{w.current?.click()};e(h,(()=>({triggerUpload:v})));const y=n&&p();return t("div",{id:c,className:d,children:A?t(m,{"aria-label":"Uploading...",className:f.spinner}):t("input",{ref:w,type:"file",className:f.imageUpload,onChange:async()=>{try{const t=w.current;if(t&&t.files){const o=[];for(let i=0;i<t.files.length;i++){const r=t.files[i],s=r.name.split("\\").pop()||r.name,e=await S(s,r);e&&o.push(e)}o.length>0&&i(o)}}catch(t){console.error("Error uploading files:",t)}},accept:a,multiple:j,...y?{capture:n}:{}})})}));export{n as default};
@@ -1 +1 @@
1
- import{jsxs as e,Fragment as o,jsx as t}from"react/jsx-runtime";import{useState as i}from"react";import{CombinedPlaceholderDialog as r}from"./CombinedPlaceholderDialog.js";import"../services/codicent.js";import"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import"@fluentui/react-components";import"./Spinner.js";import"./TextHeader.js";import"./TypingIndicator.js";import"./Dialog.js";import"./ChatInput.js";import"./ChatMessage.js";import"./Header.js";import"@fluentui/react-icons";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"exceljs";import"./FileThumbnail.js";import"./MessageInput.js";import"./UploadFile.js";import"./SnapFooter.js";import"./Profile.js";import"./MessageItem.js";import"./Content.js";import"./AiInput.js";import"./SearchBox.js";import"./DataMessagePicker.js";import"./HtmlView.js";import"./Footer.js";import"./Page.js";import"./QrCodeDialog.js";import"./QrScanner.js";import"../hooks/useLocalization.js";import"./OfflineMessage.js";import"./LanguageSelector.js";import"./ListView.js";import"./RecordModal.js";import"./BulkUploadDialog.js";import"./CookieBanner.js";import"../pages/AppFrame.js";import"../pages/Canvas.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Menu.js";import"../pages/Log.js";import"../pages/Login.js";import"../pages/Home.js";import"../pages/ListPage.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"react-router-dom";import"../pages/Purchase.js";import"../pages/QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import{useTemplateVariables as s}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.js";const a=({service:a,children:p})=>{const[l,m]=i(!1),[n,j]=i([]),[c,g]=i([]),[d,u]=i(null),{extractTemplateVariables:h,extractFilePlaceholders:f,replaceTemplateVariables:C,replaceFilePlaceholders:w}=s(a.uploadFile);return e(o,{children:[p((async e=>{u(e);const o=f(e),t=h(e);0!==o.length||0!==t.length?(g(o),j(t),m(!0)):window.location.href=e})),t(r,{open:l,templateVariables:n,filePlaceholders:c,onTemplateVariablesChange:j,onFilePlaceholdersChange:g,onConfirm:async()=>{if(d)try{let e=d;if(c.length>0){c.filter((e=>e.fileId)).length!==c.length&&console.warn("Some file placeholders are missing fileIds:",c.filter((e=>!e.fileId)).map((e=>e.description))),e=w(e,c)}n.length>0&&(e=C(e,n)),m(!1),window.location.href=e}catch(e){console.error("Failed to process URL:",e)}finally{u(null)}},onCancel:()=>{m(!1),u(null),j([]),g([])},uploadFile:a.uploadFile})]})};export{a as UrlProcessor,a as default};
1
+ import{jsxs as t,Fragment as i,jsx as o}from"react/jsx-runtime";import{useState as e}from"react";import{CombinedPlaceholderDialog as r}from"./CombinedPlaceholderDialog.js";import"../services/codicent.js";import"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import"@fluentui/react-components";import"./Spinner.js";import"./TextHeader.js";import"./TypingIndicator.js";import"./Dialog.js";import"./ChatInput.js";import"./ChatMessage.js";import"./Header.js";import"@fluentui/react-icons";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"exceljs";import"./FileThumbnail.js";import"./MessageInput.js";import"./UploadFile.js";import"./SnapFooter.js";import"./Profile.js";import"./MessageItem.js";import"./Content.js";import"./AiInput.js";import"./SearchBox.js";import"./DataMessagePicker.js";import"./HtmlView.js";import"./Footer.js";import"./Page.js";import"./QrCodeDialog.js";import"./QrScanner.js";import"../hooks/useLocalization.js";import"./OfflineMessage.js";import"./LanguageSelector.js";import"./ListView.js";import"./RecordModal.js";import"./BulkUploadDialog.js";import"./CookieBanner.js";import"./audit/AuditCircularProgress.js";import"./audit/AuditHorizontalProgress.js";import"./audit/AuditRoleIndicator.js";import"./audit/AuditUnitSwitcher.js";import"./audit/AuditAnswerCell.js";import"./audit/AuditSearchBar.js";import"./audit/AuditFilterChips.js";import"./audit/AuditFilterBar.js";import"./audit/AuditGroupsProgress.js";import"./audit/AuditSummaryDashboard.js";import"./audit/AuditRequirementDialog.js";import"./audit/AuditUnitExportDialog.js";import"./audit/AuditUnitImportDialog.js";import"./audit/AuditBulkExportDialog.js";import"./audit/AuditBulkUploadDialog.js";import"./audit/AuditSortPresets.js";import"../pages/AppFrame.js";import"../pages/Canvas.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Menu.js";import"../pages/Log.js";import"../pages/Login.js";import"../pages/Home.js";import"../pages/ListPage.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"react-router-dom";import"../pages/Purchase.js";import"../pages/QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import{useTemplateVariables as s}from"../hooks/useTemplateVariables.js";import"../hooks/useAppStyles.js";const a=({service:a,children:p})=>{const[m,l]=e(!1),[n,j]=e([]),[d,u]=e([]),[c,g]=e(null),{extractTemplateVariables:h,extractFilePlaceholders:f,replaceTemplateVariables:A,replaceFilePlaceholders:C}=s(a.uploadFile);return t(i,{children:[p((async t=>{g(t);const i=f(t),o=h(t);0!==i.length||0!==o.length?(u(i),j(o),l(!0)):window.location.href=t})),o(r,{open:m,templateVariables:n,filePlaceholders:d,onTemplateVariablesChange:j,onFilePlaceholdersChange:u,onConfirm:async()=>{if(c)try{let t=c;if(d.length>0){d.filter((t=>t.fileId)).length!==d.length&&console.warn("Some file placeholders are missing fileIds:",d.filter((t=>!t.fileId)).map((t=>t.description))),t=C(t,d)}n.length>0&&(t=A(t,n)),l(!1),window.location.href=t}catch(t){console.error("Failed to process URL:",t)}finally{g(null)}},onCancel:()=>{l(!1),g(null),j([]),u([])},uploadFile:a.uploadFile})]})};export{a as UrlProcessor,a as default};
@@ -1 +1 @@
1
- import{jsx as o,Fragment as t}from"react/jsx-runtime";import{useMemo as s}from"react";import{MicSparkle24Regular as i,MicSparkle24Filled as e}from"@fluentui/react-icons";import"../services/codicent.js";import"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import"@fluentui/react-components";import"./Spinner.js";import"./TextHeader.js";import"./TypingIndicator.js";import"./Dialog.js";import"./ChatInput.js";import"./CombinedPlaceholderDialog.js";import"./ChatMessage.js";import"./Header.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import r from"../utils/withWakeLock.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"exceljs";import"./FileThumbnail.js";import"./MessageInput.js";import"./UploadFile.js";import"./SnapFooter.js";import"./Profile.js";import"./MessageItem.js";import"./Content.js";import"./AiInput.js";import"./SearchBox.js";import"./DataMessagePicker.js";import"./HtmlView.js";import"./Footer.js";import"./Page.js";import"./QrCodeDialog.js";import"./QrScanner.js";import"../hooks/useLocalization.js";import"./OfflineMessage.js";import"./LanguageSelector.js";import"./ListView.js";import"./RecordModal.js";import"./BulkUploadDialog.js";import"./CookieBanner.js";import"../pages/AppFrame.js";import"../pages/Canvas.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Menu.js";import"../pages/Log.js";import"../pages/Login.js";import"../pages/Home.js";import"../pages/ListPage.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"react-router-dom";import"../pages/Purchase.js";import"../pages/QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import p from"../hooks/useAppStyles.js";const a=r(e),m=({voice:e,disabled:m,instructions:n,connectedIcon:j,disconnectedIcon:c,disabledIcon:l})=>{const{isConnected:g,connectConversation:u,disconnectConversation:d,updateInstructions:C}=e,{pointer:f}=p(),h=s((()=>j?r(j):a),[j]),v=c||i,w=async()=>{n&&C(n),await u()};if(m){if(null==l)return o(i,{});if("function"==typeof l){return o(l,{})}return o(t,{children:l})}return g?o(h,{onClick:d,className:f}):o(v,{onClick:w,className:f})};export{m as default};
1
+ import{jsx as t,Fragment as i}from"react/jsx-runtime";import{useMemo as o}from"react";import{MicSparkle24Regular as r,MicSparkle24Filled as s}from"@fluentui/react-icons";import"../services/codicent.js";import"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import"@fluentui/react-components";import"./Spinner.js";import"./TextHeader.js";import"./TypingIndicator.js";import"./Dialog.js";import"./ChatInput.js";import"./CombinedPlaceholderDialog.js";import"./ChatMessage.js";import"./Header.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import e from"../utils/withWakeLock.js";import"../_virtual/index.js";import"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"exceljs";import"./FileThumbnail.js";import"./MessageInput.js";import"./UploadFile.js";import"./SnapFooter.js";import"./Profile.js";import"./MessageItem.js";import"./Content.js";import"./AiInput.js";import"./SearchBox.js";import"./DataMessagePicker.js";import"./HtmlView.js";import"./Footer.js";import"./Page.js";import"./QrCodeDialog.js";import"./QrScanner.js";import"../hooks/useLocalization.js";import"./OfflineMessage.js";import"./LanguageSelector.js";import"./ListView.js";import"./RecordModal.js";import"./BulkUploadDialog.js";import"./CookieBanner.js";import"./audit/AuditCircularProgress.js";import"./audit/AuditHorizontalProgress.js";import"./audit/AuditRoleIndicator.js";import"./audit/AuditUnitSwitcher.js";import"./audit/AuditAnswerCell.js";import"./audit/AuditSearchBar.js";import"./audit/AuditFilterChips.js";import"./audit/AuditFilterBar.js";import"./audit/AuditGroupsProgress.js";import"./audit/AuditSummaryDashboard.js";import"./audit/AuditRequirementDialog.js";import"./audit/AuditUnitExportDialog.js";import"./audit/AuditUnitImportDialog.js";import"./audit/AuditBulkExportDialog.js";import"./audit/AuditBulkUploadDialog.js";import"./audit/AuditSortPresets.js";import"../pages/AppFrame.js";import"../pages/Canvas.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Menu.js";import"../pages/Log.js";import"../pages/Login.js";import"../pages/Home.js";import"../pages/ListPage.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"react-router-dom";import"../pages/Purchase.js";import"../pages/QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import a from"../hooks/useAppStyles.js";const p=e(s),m=({voice:s,disabled:m,instructions:n,connectedIcon:j,disconnectedIcon:u,disabledIcon:l})=>{const{isConnected:d,connectConversation:c,disconnectConversation:g,updateInstructions:A}=s,{pointer:C}=a(),h=o((()=>j?e(j):p),[j]),f=u||r,w=async()=>{n&&A(n),await c()};if(m){if(null==l)return t(r,{});if("function"==typeof l){return t(l,{})}return t(i,{children:l})}return d?t(h,{onClick:g,className:C}):t(f,{onClick:w,className:C})};export{m as default};
@@ -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
+ import{jsx as e,jsxs as l}from"react/jsx-runtime";import{useCallback as n}from"react";import{makeStyles as i,tokens as r,Checkbox as t,Select as a,Tooltip as o}from"@fluentui/react-components";import{getEffectiveAnswerOptions as d,calculateAuditTimeRemaining as s,getAuditUrgencyColor as c,isAnswerCompliant as u}from"../../utils/auditUtils.js";const m=i({cell:{display:"flex",flexDirection:"column",gap:"4px"},expiryBadge:{display:"inline-block",fontSize:r.fontSizeBase100,fontWeight:r.fontWeightSemibold,padding:"2px 6px",borderRadius:r.borderRadiusMedium,whiteSpace:"nowrap"},select:{minWidth:"130px"}}),p=({answer:i,config:r,readonly:p=!1,onUpdate:h})=>{const b=m(),g=d(r),x=n(((e,l)=>{if(p||!h)return;const n=!0===l.checked?"yes":"";h(i.requirementId,n)}),[i.requirementId,p,h]),f=n((e=>{!p&&h&&h(i.requirementId,e.target.value)}),[i.requirementId,p,h]),v=s(i.validUntil),y=v?c(v):null,w="checkbox"===r.answerMode?e(t,{checked:u(i.answer,r),onChange:x,disabled:p,label:""}):l(a,{className:b.select,value:i.answer??"",onChange:f,disabled:p,size:"small",children:[e("option",{value:"",children:"—"}),g.map((l=>e("option",{value:l.value,children:l.label},l.value)))]}),k=y&&i.validUntil?e(o,{content:`Valid until: ${new Date(i.validUntil).toLocaleDateString()}`,relationship:"label",children:e("span",{className:b.expiryBadge,style:{backgroundColor:y.background,color:y.text,border:`1px solid ${y.border}`},children:v?.isExpired?"EXPIRED":v?.isUrgent?`${v.days}d`:null!=v?.months&&v.months<=6?`${v.months}mo`:null})}):null;return l("div",{className:b.cell,children:[w,k]})};export{p as AuditAnswerCell};
@@ -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
+ import{jsx as e,jsxs as n}from"react/jsx-runtime";import{useState as i}from"react";import{makeStyles as a,tokens as l,Dialog as t,DialogSurface as r,DialogBody as o,DialogTitle as c,DialogContent as s,Button as p,Text as d,Checkbox as m,Divider as u,RadioGroup as h,Radio as g,DialogActions as f,Spinner as x}from"@fluentui/react-components";const y=a({unitList:{display:"flex",flexDirection:"column",gap:"4px",maxHeight:"240px",overflowY:"auto",padding:`${l.spacingVerticalXS} 0`},formatGroup:{marginTop:l.spacingVerticalS},selectionActions:{display:"flex",gap:l.spacingHorizontalS,marginBottom:l.spacingVerticalXS}}),S=({open:a,units:S,config:v,onDismiss:C,onExport:k})=>{const z=y(),[b,w]=i(new Set(S.map((e=>e.unitId)))),[N,$]=i("html"),[A,I]=i(!1);return e(t,{open:a,onOpenChange:(e,n)=>{n.open||C()},children:e(r,{style:{maxWidth:"480px"},children:n(o,{children:[e(c,{children:"Bulk Export Audits"}),n(s,{children:[n("div",{className:z.selectionActions,children:[e(p,{size:"small",appearance:"subtle",onClick:()=>w(new Set(S.map((e=>e.unitId)))),children:"Select all"}),e(p,{size:"small",appearance:"subtle",onClick:()=>w(new Set),children:"Deselect all"})]}),n(d,{size:200,style:{color:l.colorNeutralForeground2},children:[b.size," of ",S.length," ",v.terminology.unit.toLowerCase(),"s selected"]}),e("div",{className:z.unitList,children:S.map((n=>e(m,{label:`${n.unitName}${n.marketArea?` (${n.marketArea})`:""}`,checked:b.has(n.unitId),onChange:()=>{return e=n.unitId,w((n=>{const i=new Set(n);return i.has(e)?i.delete(e):i.add(e),i}));var e}},n.unitId)))}),e(u,{style:{margin:`${l.spacingVerticalS} 0`}}),n(h,{className:z.formatGroup,value:N,onChange:(e,n)=>$(n.value),children:[e(g,{value:"html",label:"Offline HTML"}),e(g,{value:"json",label:"JSON"})]})]}),n(f,{children:[e(p,{appearance:"secondary",onClick:C,disabled:A,children:"Cancel"}),e(p,{appearance:"primary",onClick:async()=>{try{I(!0),await k([...b],N),C()}finally{I(!1)}},disabled:0===b.size||A,icon:A?e(x,{size:"tiny"}):void 0,children:A?"Exporting…":`Export ${b.size}`})]})]})})})};export{S as AuditBulkExportDialog};
@@ -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
+ import{jsx as e,jsxs as r}from"react/jsx-runtime";import{useState as n,useRef as o}from"react";import{makeStyles as l,tokens as a,Dialog as i,DialogSurface as t,DialogBody as c,DialogTitle as d,DialogContent as s,Text as p,MessageBar as u,MessageBarBody as f,DialogActions as m,Button as h,Spinner as g}from"@fluentui/react-components";import{ArrowUploadRegular as S}from"@fluentui/react-icons";const N=l({dropZone:{border:`2px dashed ${a.colorNeutralStroke1}`,borderRadius:a.borderRadiusMedium,padding:a.spacingVerticalXL,textAlign:"center",cursor:"pointer",backgroundColor:a.colorNeutralBackground2,":hover":{backgroundColor:a.colorNeutralBackground3}},hidden:{display:"none"},hint:{fontSize:a.fontSizeBase200,color:a.colorNeutralForeground3,marginTop:a.spacingVerticalXS},fileName:{marginTop:a.spacingVerticalS,fontSize:a.fontSizeBase200,color:a.colorNeutralForeground2}}),y=({open:l,onDismiss:y,onUpload:k,title:v="Bulk Upload Requirements",description:C})=>{const b=N(),[x,V]=n(null),[z,B]=n(null),[D,O]=n(null),[T,F]=n(null),[U,j]=n(!1),R=o(null),w=e=>{V(e.name),F(null),B(null),O(null);let r=null;if(e.name.endsWith(".csv"))r="csv";else{if(!e.name.endsWith(".json"))return void F("Only CSV and JSON files are supported.");r="json"}const n=new FileReader;n.onload=e=>{B(e.target?.result),O(r)},n.onerror=()=>F("Failed to read file."),n.readAsText(e)};return e(i,{open:l,onOpenChange:(e,r)=>{r.open||y()},children:e(t,{style:{maxWidth:"440px"},children:r(c,{children:[e(d,{children:v}),r(s,{children:[C&&e(p,{style:{marginBottom:a.spacingVerticalS,display:"block"},children:C}),r("div",{className:b.dropZone,onDragOver:e=>e.preventDefault(),onDrop:e=>{e.preventDefault(),e.dataTransfer.files[0]&&w(e.dataTransfer.files[0])},onClick:()=>R.current?.click(),children:[e(S,{style:{fontSize:32,color:a.colorNeutralForeground3}}),e("br",{}),e(p,{children:"Drop a CSV or JSON file here, or click to browse"}),e("input",{ref:R,type:"file",accept:".csv,.json",className:b.hidden,onChange:e=>{e.target.files?.[0]&&w(e.target.files[0]),e.target.value=""}})]}),x&&r(p,{className:b.fileName,children:[x," ",z?"✓":""]}),e(p,{className:b.hint,children:"Supported formats: CSV, JSON"}),T&&e(u,{intent:"error",style:{marginTop:8},children:e(f,{children:T})})]}),r(m,{children:[e(h,{appearance:"secondary",onClick:y,disabled:U,children:"Cancel"}),e(h,{appearance:"primary",onClick:async()=>{if(z&&D)try{j(!0),await k(z,D),y()}catch(e){F(e instanceof Error?e.message:"Upload failed.")}finally{j(!1)}},disabled:!z||U,icon:U?e(g,{size:"tiny"}):void 0,children:U?"Uploading…":"Upload"})]})]})})})};export{y as AuditBulkUploadDialog};
@@ -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
+ import{jsxs as e,jsx as t}from"react/jsx-runtime";import{makeStyles as o,tokens as r,Text as l}from"@fluentui/react-components";const i=o({root:{display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative"},label:{position:"absolute",fontWeight:r.fontWeightSemibold,fontSize:r.fontSizeBase200,color:r.colorNeutralForeground1}}),n=({value:o,size:n=64,showLabel:s=!0})=>{const a=i(),c=(n-8)/2,h=2*Math.PI*c,d=Math.max(0,Math.min(100,o)),f=h-d/100*h;let u=r.colorPaletteRedBackground3;return d>=100?u=r.colorPaletteGreenBackground3:d>=75&&(u=r.colorPaletteYellowBackground3),e("div",{className:a.root,style:{width:n,height:n},children:[e("svg",{width:n,height:n,style:{transform:"rotate(-90deg)"},children:[t("circle",{cx:n/2,cy:n/2,r:c,stroke:r.colorNeutralBackground4,strokeWidth:8,fill:"none"}),t("circle",{cx:n/2,cy:n/2,r:c,stroke:u,strokeWidth:8,fill:"none",strokeDasharray:h,strokeDashoffset:f,strokeLinecap:"round",style:{transition:"stroke-dashoffset 0.5s ease"}})]}),s&&e(l,{className:a.label,size:200,children:[d,"%"]})]})};export{n as AuditCircularProgress};
@@ -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
+ import{jsxs as e,jsx as i,Fragment as a}from"react/jsx-runtime";import{makeStyles as c,tokens as s,Popover as t,PopoverTrigger as n,Button as l,PopoverSurface as o,Text as r,Checkbox as d,Divider as m}from"@fluentui/react-components";import{FilterRegular as h}from"@fluentui/react-icons";import{getEffectiveAnswerOptions as u}from"../../utils/auditUtils.js";const p=c({surface:{display:"flex",flexDirection:"column",gap:s.spacingVerticalS,padding:s.spacingVerticalM,minWidth:"240px"},section:{display:"flex",flexDirection:"column",gap:"4px"},sectionLabel:{fontWeight:s.fontWeightSemibold,fontSize:s.fontSizeBase200,color:s.colorNeutralForeground2,textTransform:"uppercase",letterSpacing:"0.06em"},checkboxGroup:{display:"flex",flexDirection:"column",gap:"2px",paddingLeft:s.spacingHorizontalS}});function g(e,i){return e.includes(i)?e.filter((e=>e!==i)):[...e,i]}const f=({filters:c,availableGroups:s,availableCategories:f,config:b,onUpdateFilters:x})=>{const v=p(),N=u(b),S=c.groups.length+c.categories.length+c.complianceStatuses.length+c.validityStatuses.length+(c.withComments?1:0)+(c.withPhotos?1:0);return e(t,{trapFocus:!0,positioning:"below-start",children:[i(n,{disableButtonEnhancement:!0,children:e(l,{icon:i(h,{}),appearance:S>0?"primary":"secondary",size:"medium",children:["Filter",S>0?` (${S})`:""]})}),i(o,{children:e("div",{className:v.surface,children:[s.length>0&&e("div",{className:v.section,children:[i(r,{className:v.sectionLabel,children:b.terminology.group}),i("div",{className:v.checkboxGroup,children:s.map((e=>i(d,{label:e,checked:c.groups.includes(e),onChange:()=>x({groups:g(c.groups,e)}),size:"medium"},e)))})]}),f.length>0&&e(a,{children:[i(m,{}),e("div",{className:v.section,children:[i(r,{className:v.sectionLabel,children:b.terminology.category}),i("div",{className:v.checkboxGroup,children:f.map((e=>i(d,{label:e,checked:c.categories.includes(e),onChange:()=>x({categories:g(c.categories,e)}),size:"medium"},e)))})]})]}),i(m,{}),e("div",{className:v.section,children:[i(r,{className:v.sectionLabel,children:"Status"}),i("div",{className:v.checkboxGroup,children:N.map((e=>i(d,{label:e.label,checked:c.complianceStatuses.includes(e.value),onChange:()=>x({complianceStatuses:g(c.complianceStatuses,e.value)}),size:"medium"},e.value)))})]}),i(m,{}),e("div",{className:v.section,children:[i(r,{className:v.sectionLabel,children:"Validity"}),i("div",{className:v.checkboxGroup,children:["valid","expiring-soon","urgent","expired"].map((e=>i(d,{label:"valid"===e?"Valid":"expiring-soon"===e?"Expiring soon":"urgent"===e?"Urgent (≤30 days)":"Expired",checked:c.validityStatuses.includes(e),onChange:()=>x({validityStatuses:g(c.validityStatuses,e)}),size:"medium"},e)))})]}),i(m,{}),e("div",{className:v.checkboxGroup,children:[i(d,{label:"Has comments",checked:c.withComments,onChange:(e,i)=>x({withComments:!0===i.checked})}),i(d,{label:"Has photos",checked:c.withPhotos,onChange:(e,i)=>x({withPhotos:!0===i.checked})})]})]})})]})};export{f as AuditFilterBar};
@@ -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
+ import{jsxs as e,jsx as i}from"react/jsx-runtime";import{makeStyles as a,tokens as l,TagGroup as s,Tag as o,Button as r}from"@fluentui/react-components";import{DismissRegular as t}from"@fluentui/react-icons";const c=a({root:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:l.spacingHorizontalXS},clearBtn:{marginLeft:l.spacingHorizontalS}}),n=({filters:a,config:l,onRemoveGroup:n,onRemoveCategory:m,onRemoveComplianceStatus:p,onRemoveValidityStatus:u,onClearAll:g})=>{const d=c();return a.groups.length>0||a.categories.length>0||a.complianceStatuses.length>0||a.validityStatuses.length>0?e("div",{className:d.root,children:[e(s,{onDismiss:(e,i)=>{const[a,l]=i.value.split(":",2);"group"===a&&n?n(l):"category"===a&&m?m(l):"compliance"===a&&p?p(l):"validity"===a&&u&&u(l)},"aria-label":"Active filters",children:[a.groups.map((a=>e(o,{value:`group:${a}`,dismissible:!0,dismissIcon:i(t,{}),shape:"circular",size:"small",children:[l.terminology.group,": ",a]},`group:${a}`))),a.categories.map((a=>e(o,{value:`category:${a}`,dismissible:!0,dismissIcon:i(t,{}),shape:"circular",size:"small",children:[l.terminology.category,": ",a]},`category:${a}`))),a.complianceStatuses.map((e=>i(o,{value:`compliance:${e}`,dismissible:!0,dismissIcon:i(t,{}),shape:"circular",size:"small",children:e},`compliance:${e}`))),a.validityStatuses.map((e=>i(o,{value:`validity:${e}`,dismissible:!0,dismissIcon:i(t,{}),shape:"circular",size:"small",children:e},`validity:${e}`)))]}),i(r,{size:"small",appearance:"subtle",className:d.clearBtn,onClick:g,children:"Clear all"})]}):null};export{n as AuditFilterChips};
@@ -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
+ import{jsxs as t,jsx as o}from"react/jsx-runtime";import{useMemo as e}from"react";import{makeStyles as r,tokens as a,Text as n}from"@fluentui/react-components";import{isAnswerCompliant as i}from"../../utils/auditUtils.js";import{AuditHorizontalProgress as l}from"./AuditHorizontalProgress.js";const s=r({root:{display:"flex",flexDirection:"column",gap:a.spacingVerticalS},groupRow:{display:"flex",flexDirection:"column",gap:"4px"},header:{fontWeight:a.fontWeightSemibold,fontSize:a.fontSizeBase300,marginBottom:a.spacingVerticalXS}}),m=({answers:r,config:a})=>{const m=s(),c=e((()=>{const t=new Map;for(const o of r){const e=o.group||"(no group)",r=t.get(e)??{total:0,compliant:0};r.total++,i(o.answer,a)&&r.compliant++,t.set(e,r)}return[...t.entries()].map((([t,o])=>({name:t,...o,rate:o.total>0?Math.round(o.compliant/o.total*100):0}))).sort(((t,o)=>t.rate-o.rate))}),[r,a]);return 0===c.length?null:t("div",{className:m.root,children:[t(n,{className:m.header,children:[a.terminology.group," Progress"]}),c.map((t=>o("div",{className:m.groupRow,children:o(l,{value:t.rate,label:t.name,sublabel:`${t.compliant}/${t.total}`})},t.name)))]})};export{m as AuditGroupsProgress};
@@ -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
+ import{jsxs as e,jsx as r}from"react/jsx-runtime";import{makeStyles as l,tokens as o,Text as a}from"@fluentui/react-components";const t=l({root:{display:"flex",flexDirection:"column",gap:"4px",width:"100%"},track:{width:"100%",backgroundColor:o.colorNeutralBackground4,borderRadius:o.borderRadiusCircular,overflow:"hidden"},fill:{borderRadius:o.borderRadiusCircular,transition:"width 0.4s ease"},header:{display:"flex",justifyContent:"space-between",alignItems:"baseline"}}),i=({value:l,label:i,sublabel:d,height:c=8})=>{const s=t(),n=Math.max(0,Math.min(100,l));let u=o.colorPaletteRedBackground3;return n>=100?u=o.colorPaletteGreenBackground3:n>=75&&(u=o.colorPaletteYellowBackground3),e("div",{className:s.root,children:[(i||d)&&e("div",{className:s.header,children:[i&&r(a,{size:200,weight:"semibold",children:i}),d&&r(a,{size:100,style:{color:o.colorNeutralForeground3},children:d})]}),r("div",{className:s.track,style:{height:c},children:r("div",{className:s.fill,style:{width:`${n}%`,height:c,backgroundColor:u}})})]})};export{i as AuditHorizontalProgress};
@@ -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
+ import{jsx as e,jsxs as i}from"react/jsx-runtime";import l,{useState as n,useCallback as r}from"react";import{makeStyles as a,tokens as o,Dialog as c,DialogSurface as t,DialogBody as s,DialogTitle as d,Button as p,DialogContent as m,Badge as h,Text as u,Divider as f,Field as v,Textarea as g,DialogActions as w}from"@fluentui/react-components";import{DismissFilled as y}from"@fluentui/react-icons";import{AuditAnswerCell as C}from"./AuditAnswerCell.js";import{calculateAuditTimeRemaining as x,isAnswerCompliant as S,formatValidityPeriod as z}from"../../utils/auditUtils.js";const b=a({content:{display:"flex",flexDirection:"column",gap:o.spacingVerticalM},metaRow:{display:"flex",flexWrap:"wrap",gap:o.spacingHorizontalS,alignItems:"center"},description:{color:o.colorNeutralForeground2,whiteSpace:"pre-wrap"},answerSection:{display:"flex",flexDirection:"column",gap:o.spacingVerticalXS},validityInfo:{fontSize:o.fontSizeBase200,color:o.colorNeutralForeground3}}),N=({open:a,answer:o,config:N,readonly:U=!1,onDismiss:D,onSave:I})=>{const R=b(),[A,E]=n(""),[L,P]=n(""),[V,j]=n(""),[k,q]=n(!1);l.useEffect((()=>{a&&o&&(E(o.answer??""),P(o.comment??""),j(o.photos??""))}),[a,o]);const F=r((async()=>{if(o&&I)try{q(!0),await I(o.requirementId,A,L,V),D()}finally{q(!1)}}),[o,A,L,V,I,D]);if(!o)return null;const M=x(o.validUntil),W=S(A,N);return e(c,{open:a,onOpenChange:(e,i)=>{i.open||D()},children:e(t,{style:{maxWidth:"560px"},children:i(s,{children:[e(d,{action:e(p,{appearance:"subtle",icon:e(y,{}),onClick:D,"aria-label":"Close"}),children:o.title}),e(m,{children:i("div",{className:R.content,children:[i("div",{className:R.metaRow,children:[o.group&&e(h,{appearance:"tint",color:"informative",size:"medium",children:o.group}),o.category&&e(h,{appearance:"tint",color:"subtle",size:"medium",children:o.category}),null!=o.level&&o.level>0&&i(h,{appearance:"outline",size:"medium",children:["Level ",o.level]})]}),o.description&&e(u,{className:R.description,children:o.description}),e(f,{}),i("div",{className:R.answerSection,children:[e(v,{label:"Answer",required:!0,children:U?i(u,{children:[A||"—"," ",e(h,W?{color:"success",size:"small",children:"Compliant"}:{color:"danger",size:"small",children:"Non-compliant"})]}):e(C,{answer:{...o,answer:A},config:N,onUpdate:(e,i)=>E(i)})}),i(u,{className:R.validityInfo,children:["Validity period: ",z(o.validityPeriodMonths),o.validUntil&&` · Valid until: ${new Date(o.validUntil).toLocaleDateString()}`,M?.isExpired&&" · EXPIRED"]})]}),!U&&e(v,{label:"Comment",children:e(g,{value:L,onChange:(e,i)=>P(i.value),resize:"vertical",rows:3,placeholder:"Add a comment…"})}),U&&L&&e(v,{label:"Comment",children:e(u,{children:L})}),!U&&e(v,{label:"Photo URL(s)",hint:"Comma-separated URLs",children:e(g,{value:V,onChange:(e,i)=>j(i.value),resize:"vertical",rows:2,placeholder:"https://…"})}),U&&V&&e(v,{label:"Photos",children:e(u,{children:V})})]})}),i(w,{children:[e(p,{appearance:"secondary",onClick:D,children:U?"Close":"Cancel"}),!U&&e(p,{appearance:"primary",onClick:F,disabled:k,children:k?"Saving…":"Save"})]})]})})})};export{N as AuditRequirementDialog};
@@ -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
+ import{jsx as r}from"react/jsx-runtime";import{makeStyles as e,tokens as n,Badge as o}from"@fluentui/react-components";import{ShieldPersonFilled as a,PersonStarFilled as i,PersonFilled as t}from"@fluentui/react-icons";const l=e({root:{display:"inline-flex",alignItems:"center",gap:n.spacingHorizontalXS}}),c={Admin:r(a,{}),Manager:r(i,{}),Auditor:r(t,{})},m={Admin:"brand",Manager:"informative",Auditor:"subtle"},s=({role:e,config:n,showLabel:a=!0})=>{const i=l(),t="Admin"===e?n.roleLabels.admin:"Manager"===e?n.roleLabels.manager:n.roleLabels.auditor;return r("span",{className:i.root,children:r(o,{color:m[e],icon:c[e],appearance:"tint",children:a?t:null})})};export{s as AuditRoleIndicator};
@@ -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
+ import{jsx as e}from"react/jsx-runtime";import r,{useState as t,useCallback as o}from"react";import{makeStyles as c,SearchBox as n}from"@fluentui/react-components";const u=c({root:{width:"100%",maxWidth:"400px"}}),a=({value:c,onChange:a,placeholder:m="Search…",debounceMs:l=200})=>{const i=u(),[s,p]=t(c),h=r.useRef(null),d=o(((e,r)=>{const t=r.value;p(t),h.current&&clearTimeout(h.current),h.current=setTimeout((()=>a(t)),l)}),[a,l]);return o((()=>{p(""),h.current&&clearTimeout(h.current),a("")}),[a]),e(n,{className:i.root,value:s,onChange:d,placeholder:m,size:"medium"})};export{a as AuditSearchBar};
@@ -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
+ import{jsx as e}from"react/jsx-runtime";import{makeStyles as l,tokens as a,Button as i}from"@fluentui/react-components";import{ArrowSortUpRegular as r,ArrowSortDownRegular as n,ClockRegular as o,ErrorCircleRegular as c}from"@fluentui/react-icons";const t=[{value:"compliance-asc",label:"Worst first",icon:e(r,{})},{value:"compliance-desc",label:"Best first",icon:e(n,{})},{value:"expiry-asc",label:"Expiring soon",icon:e(o,{})},{value:"expiry-urgent",label:"Urgent",icon:e(c,{})}],s=l({root:{display:"flex",flexWrap:"wrap",gap:a.spacingHorizontalXS,alignItems:"center"}}),p=({active:l,onSelect:a})=>{const r=s();return e("div",{className:r.root,children:t.map((r=>e(i,{size:"small",appearance:l===r.value?"primary":"subtle",icon:r.icon,onClick:()=>a(l===r.value?null:r.value),children:r.label},r.value)))})};export{p as AuditSortPresets};
@@ -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
+ import{jsxs as e,jsx as i}from"react/jsx-runtime";import{useMemo as l}from"react";import{makeStyles as r,tokens as a,Card as n,Text as t,Badge as o}from"@fluentui/react-components";import{getAuditComplianceRate as c,isAnswerCompliant as s,calculateAuditTimeRemaining as d}from"../../utils/auditUtils.js";import{AuditCircularProgress as m}from"./AuditCircularProgress.js";const p=r({root:{display:"flex",flexWrap:"wrap",gap:a.spacingHorizontalM,alignItems:"flex-start"},card:{flex:"1",minWidth:"140px",maxWidth:"200px"},cardBody:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:a.spacingVerticalXS,padding:a.spacingVerticalS},bigNumber:{fontSize:a.fontSizeHero800,fontWeight:a.fontWeightBold,lineHeight:"1"},label:{fontSize:a.fontSizeBase200,color:a.colorNeutralForeground2,textAlign:"center"}}),g=({answers:r,config:g,unitName:f})=>{const h=p(),x=l((()=>{const e=r.length,i=c(r,g),l=r.filter((e=>s(e.answer,g))).length;let a=0,n=0;for(const e of r){if(!e.validUntil)continue;const i=d(e.validUntil);i?.isExpired?n++:(i?.isUrgent||i?.isExpiringSoon)&&a++}return{total:e,compliant:l,complianceRate:i,expiring:a,expired:n}}),[r,g]);return e("div",{className:h.root,children:[i(n,{className:h.card,children:e("div",{className:h.cardBody,children:[i(m,{value:x.complianceRate,size:72}),i(t,{className:h.label,children:f??`${g.terminology.unit} Compliance`})]})}),i(n,{className:h.card,children:e("div",{className:h.cardBody,children:[i(t,{className:h.bigNumber,style:{color:a.colorPaletteGreenForeground1},children:x.compliant}),i(t,{className:h.label,children:"Compliant"})]})}),i(n,{className:h.card,children:e("div",{className:h.cardBody,children:[i(t,{className:h.bigNumber,style:{color:a.colorPaletteRedForeground1},children:x.total-x.compliant}),i(t,{className:h.label,children:"Non-compliant"})]})}),(x.expiring>0||x.expired>0)&&i(n,{className:h.card,children:e("div",{className:h.cardBody,children:[e("div",{style:{display:"flex",gap:"8px",alignItems:"center"},children:[x.expired>0&&e(o,{color:"danger",size:"large",children:[x.expired," exp."]}),x.expiring>0&&e(o,{color:"warning",size:"large",children:[x.expiring," soon"]})]}),i(t,{className:h.label,children:"Validity"})]})})]})};export{g as AuditSummaryDashboard};
@@ -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
+ import{jsx as e,jsxs as n}from"react/jsx-runtime";import{useState as t}from"react";import{makeStyles as r,tokens as o,Dialog as i,DialogSurface as a,DialogBody as l,DialogTitle as c,DialogContent as s,Text as p,RadioGroup as d,Radio as m,DialogActions as u,Button as h}from"@fluentui/react-components";import{buildAuditPackage as f,exportAuditPackageAsJson as g,exportAuditPackageAsHtml as x}from"../../utils/auditExport.js";const S=r({description:{color:o.colorNeutralForeground2,fontSize:o.fontSizeBase200,marginBottom:o.spacingVerticalS},radioGroup:{marginTop:o.spacingVerticalS}}),j=({open:r,unitId:o,unitName:j,unitData:b,requirements:O,answers:v,config:w,onDismiss:C})=>{const E=S(),[L,N]=t("html");return e(i,{open:r,onOpenChange:(e,n)=>{n.open||C()},children:e(a,{style:{maxWidth:"420px"},children:n(l,{children:[e(c,{children:"Export Audit"}),n(s,{children:[n(p,{className:E.description,children:["Export audit data for ",e("strong",{children:j})," as a portable file."]}),n(d,{className:E.radioGroup,value:L,onChange:(e,n)=>N(n.value),children:[e(m,{value:"html",label:"Offline HTML (self-contained, can be filled without internet)"}),e(m,{value:"json",label:"JSON (for import or archiving)"})]})]}),n(u,{children:[e(h,{appearance:"secondary",onClick:C,children:"Cancel"}),e(h,{appearance:"primary",onClick:()=>{const e=f({id:o,name:j,...b},O,v,w);let n,t,r;"json"===L?(n=g(e),t=`audit_${o}_${(new Date).toISOString().slice(0,10)}.json`,r="application/json"):(n=x(e),t=`audit_${o}_${(new Date).toISOString().slice(0,10)}.html`,r="text/html");const i=new Blob([n],{type:r}),a=URL.createObjectURL(i),l=document.createElement("a");l.href=a,l.download=t,l.click(),URL.revokeObjectURL(a),C()},children:"Export"})]})]})})})};export{j as AuditUnitExportDialog};
@@ -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
+ import{jsx as e,jsxs as r}from"react/jsx-runtime";import{useState as o,useRef as n}from"react";import{makeStyles as l,tokens as t,Dialog as a,DialogSurface as i,DialogBody as c,DialogTitle as d,DialogContent as s,Text as p,MessageBar as u,MessageBarBody as m,DialogActions as f,Button as h}from"@fluentui/react-components";import{ArrowUploadRegular as g}from"@fluentui/react-icons";import{importAuditPackageFromHtml as N,importAuditPackageFromJson as k}from"../../utils/auditExport.js";const b=l({dropZone:{border:`2px dashed ${t.colorNeutralStroke1}`,borderRadius:t.borderRadiusMedium,padding:t.spacingVerticalXL,textAlign:"center",cursor:"pointer",backgroundColor:t.colorNeutralBackground2,":hover":{backgroundColor:t.colorNeutralBackground3}},hidden:{display:"none"},fileName:{marginTop:t.spacingVerticalS,fontSize:t.fontSizeBase200,color:t.colorNeutralForeground2}}),x=({open:l,onDismiss:x,onImport:y})=>{const C=b(),[S,D]=o(null),[T,v]=o(null),[F,j]=o(null),z=n(null),A=e=>{D(e.name),j(null),v(null);const r=new FileReader;r.onload=r=>{try{const o=r.target?.result,n=e.name.endsWith(".html")?N(o):k(o);v(n)}catch(e){j(e instanceof Error?e.message:"Failed to parse file")}},r.readAsText(e)};return e(a,{open:l,onOpenChange:(e,r)=>{r.open||x()},children:e(i,{style:{maxWidth:"420px"},children:r(c,{children:[e(d,{children:"Import Audit"}),r(s,{children:[r("div",{className:C.dropZone,onDragOver:e=>e.preventDefault(),onDrop:e=>{e.preventDefault(),e.dataTransfer.files[0]&&A(e.dataTransfer.files[0])},onClick:()=>z.current?.click(),children:[e(g,{style:{fontSize:32,color:t.colorNeutralForeground3}}),e("br",{}),e(p,{children:"Drop a JSON or HTML audit file here, or click to browse"}),e("input",{ref:z,type:"file",accept:".json,.html",className:C.hidden,onChange:e=>{e.target.files?.[0]&&A(e.target.files[0])}})]}),S&&r(p,{className:C.fileName,children:["Selected: ",S,T&&" ✓"]}),F&&e(u,{intent:"error",style:{marginTop:8},children:e(m,{children:F})})]}),r(f,{children:[e(h,{appearance:"secondary",onClick:x,children:"Cancel"}),e(h,{appearance:"primary",onClick:()=>{T&&(y(T),x())},disabled:!T,children:"Import"})]})]})})})};export{x as AuditUnitImportDialog};
@@ -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
+ import{jsxs as e,jsx as i}from"react/jsx-runtime";import{makeStyles as t,tokens as o,Label as n,Combobox as r,Option as l}from"@fluentui/react-components";const a=t({root:{display:"flex",flexDirection:"column",gap:o.spacingVerticalXS,minWidth:"200px"},combobox:{width:"100%"}}),c=({units:t,selectedUnitId:o,onSelect:c,config:d,disabled:m=!1})=>{const s=a(),u=t.find((e=>e.id===o));return e("div",{className:s.root,children:[i(n,{size:"small",htmlFor:"audit-unit-switcher",children:d.terminology.unit}),i(r,{id:"audit-unit-switcher",className:s.combobox,value:u?.name??"",selectedOptions:o?[o]:[],onOptionSelect:(e,i)=>{i.optionValue&&c(i.optionValue)},placeholder:`Select ${d.terminology.unit.toLowerCase()}…`,disabled:m,freeform:!1,children:t.map((e=>i(l,{value:e.id,children:e.marketArea?`${e.name} (${e.marketArea})`:e.name},e.id)))})]})};export{c as AuditUnitSwitcher};
@@ -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