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{jsx as e,jsxs as o}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as r,useEffect as i,useMemo as a}from"react";import{makeStyles as s,shorthands as m,tokens as p,Button as c,MessageBar as l,MessageBarBody as d}from"@fluentui/react-components";import{ArrowLeft24Regular as u}from"@fluentui/react-icons";import{CodicentService as j}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import g from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import h from"../components/VoiceIcon.js";import f from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as v}from"../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"../components/FileThumbnail.js";import k from"../components/MessageInput.js";import S from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as x}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import b from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import{useNavigate as w,useSearchParams as C}from"react-router-dom";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import I from"../hooks/useToaster.js";import{l as y}from"../node_modules/lodash/lodash.js";const U=s({main:{flexGrow:1,...m.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%",position:"relative"},root:{height:"100%"},item:{height:"auto",width:"auto",flexShrink:1,marginBottom:"1rem"},chat:{flexGrow:1,boxSizing:"border-box",overflow:"hidden",border:"none"},attachmentBar:{display:"none"},iconButton:{width:"24px",height:"24px"},imageCard:{alignContent:"center",borderRadius:p.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"},review:{padding:"10px",wordBreak:"break-word",whiteSpace:"pre-line",maxWidth:"100%",overflowWrap:"break-word"},voiceIcon:{position:"absolute",top:"20px",right:"12px",zIndex:1001,cursor:"pointer"},backButton:{marginBottom:"10px"}}),_=({state:s,voice:m})=>{const p=U(),{t:_}=b(),M=w(),[P,A]=t(!1),B=n(null),T=n(null),F=n(null),[N]=t(null),[E,L]=t([]),{service:O}=s,[R,$]=C(),[V,D]=t(""),[H,z]=t(void 0),G=I(),[W,Q]=t(void 0),[J,K]=t("info"),X=r((e=>{for(const o of e)O.getFileInfo(o).then((e=>{L((o=>[...o,e]))}))}),[O,L]),Y=r((e=>{const o=new FormData;o.append("file",e),O.uploadFile(e.name,o).then((e=>{X([e])})).catch((()=>{G.notify(_("Error"),_("Error uploading pasted image"),"")}))}),[O,X,G,_]),q=e=>{A(e)};i((()=>{const e=R.get("text"),o=R.get("url");e&&(D(e),R.delete("text")),o&&(R.delete("url"),D(((e||"")+" "+o).trim())),$(R,{replace:!0})}),[R,$,D,O,X]);const Z=r((async e=>{if(!e||e.length<10)return;Q(_("Analyserar...")),K("info");const o=await O.chat((e=>`Skapa kort ja/nej-status över hur CRM-aktiviteten som följer, givet dessa punkter: \n1. Namn på kunden finns med? ja/nej \n2. Syftet med mötet finns (varför träffar du kunden, kan täckas av 3 nedan) ja/nej\n3. Vad som framkommer under mötet (viktiga punkter och diskussioner) ja/nej\n4. Nästa steg finns med (hur ni kommer att träffas igen, och om något har sålts) ja/nej. \n\nSvara endast med ja/nej för varje punkt, ett svar per rad i följande exempel i JSON-format:\n{\n "customerName": "true",\n "purpose": "false",\n "meetingNotes": "true",\n "nextSteps": "false",\n "shortSummary": "Syfte med mötet och nästa steg saknas."\n}\n\n---\nTEXT:\n\n${e}`)(e));if(o){const e=new f(o.content);try{const o=JSON.parse(e.content);console.log("json",o);let t=0;for(const e in o)"true"===o[e]&&t++;Q(_(4===t?"Allt är med":o.shortSummary||"Något saknas")),K(4===t?"success":"warning")}catch{Q("Error: "+e.content),K("error")}}}),[O]),ee=a((()=>y.debounce(Z,2e3)),[Z]);return i((()=>()=>{ee.cancel()}),[ee]),e(x,{hideHeader:!0,children:o("div",{className:p.container,style:{backgroundImage:`url(${v("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[m&&v("SHOW_VOICE_BUTTON")&&e("div",{className:p.voiceIcon,children:e(h,{voice:m})}),e("div",{className:p.backButton,children:e(c,{appearance:"subtle",icon:e(u,{}),onClick:()=>M(-1),children:_("Tillbaka")})}),e(g,{title:v("APP_SAVE_TITLE")?_(v("APP_SAVE_TITLE")):_("Spara")}),e(k,{defaultText:V,onSend:e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${N?" "+N:""}${E.length>0?"\n":""}${E.map((e=>`#file:${e.id}`)).join(" ")}`,O.sendMessage(e).then((()=>{G.notify(_("Meddelande"),_("Meddelandet är sparat."),"")}))},files:E,onFilesChange:L,isUploading:P,onUploadImage:()=>{T.current?.triggerUpload()},onUploadCamera:()=>{F.current?.triggerUpload()},getImageUrl:j.getImageUrl,hasLocation:!!N,disableSend:!0,rows:9,placeholder:_("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==H&&(z(e),e&&e.trim().length>0?ee(e):(Q(void 0),ee.cancel()))},onImagePasted:Y}),W&&o("div",{className:p.review,children:[e("h3",{children:_("Analys")}),e(l,{intent:J,layout:"multiline",children:e(d,{children:_(W)})})]}),e(S,{ref:B,onFileUploaded:X,onUploading:q,multiple:!0,codicentService:O}),e(S,{codicentService:O,ref:T,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*"}),e(S,{codicentService:O,ref:F,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{_ as CrmPage,_ as default};
1
+ import{jsx as o,jsxs as t}from"react/jsx-runtime";import{useState as e,useRef as n,useCallback as r,useEffect as i,useMemo as s}from"react";import{makeStyles as a,shorthands as m,tokens as p,Button as c,MessageBar as l,MessageBarBody as d}from"@fluentui/react-components";import{ArrowLeft24Regular as u}from"@fluentui/react-icons";import{CodicentService as j}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import g from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import h from"../components/VoiceIcon.js";import f from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as v}from"../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"../components/FileThumbnail.js";import k from"../components/MessageInput.js";import S from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as x}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import A from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import{useNavigate as w,useSearchParams as b}from"react-router-dom";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import C from"../hooks/useToaster.js";import{l as I}from"../node_modules/lodash/lodash.js";const U=a({main:{flexGrow:1,...m.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%",position:"relative"},root:{height:"100%"},item:{height:"auto",width:"auto",flexShrink:1,marginBottom:"1rem"},chat:{flexGrow:1,boxSizing:"border-box",overflow:"hidden",border:"none"},attachmentBar:{display:"none"},iconButton:{width:"24px",height:"24px"},imageCard:{alignContent:"center",borderRadius:p.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"},review:{padding:"10px",wordBreak:"break-word",whiteSpace:"pre-line",maxWidth:"100%",overflowWrap:"break-word"},voiceIcon:{position:"absolute",top:"20px",right:"12px",zIndex:1001,cursor:"pointer"},backButton:{marginBottom:"10px"}}),y=({state:a,voice:m})=>{const p=U(),{t:y}=A(),P=w(),[B,_]=e(!1),M=n(null),F=n(null),E=n(null),[T]=e(null),[N,D]=e([]),{service:L}=a,[R,O]=b(),[$,V]=e(""),[H,z]=e(void 0),G=C(),[W,Q]=e(void 0),[J,q]=e("info"),K=r((o=>{for(const t of o)L.getFileInfo(t).then((o=>{D((t=>[...t,o]))}))}),[L,D]),X=r((o=>{const t=new FormData;t.append("file",o),L.uploadFile(o.name,t).then((o=>{K([o])})).catch((()=>{G.notify(y("Error"),y("Error uploading pasted image"),"")}))}),[L,K,G,y]),Y=o=>{_(o)};i((()=>{const o=R.get("text"),t=R.get("url");o&&(V(o),R.delete("text")),t&&(R.delete("url"),V(((o||"")+" "+t).trim())),O(R,{replace:!0})}),[R,O,V,L,K]);const Z=r((async o=>{if(!o||o.length<10)return;Q(y("Analyserar...")),q("info");const t=await L.chat((o=>`Skapa kort ja/nej-status över hur CRM-aktiviteten som följer, givet dessa punkter: \n1. Namn på kunden finns med? ja/nej \n2. Syftet med mötet finns (varför träffar du kunden, kan täckas av 3 nedan) ja/nej\n3. Vad som framkommer under mötet (viktiga punkter och diskussioner) ja/nej\n4. Nästa steg finns med (hur ni kommer att träffas igen, och om något har sålts) ja/nej. \n\nSvara endast med ja/nej för varje punkt, ett svar per rad i följande exempel i JSON-format:\n{\n "customerName": "true",\n "purpose": "false",\n "meetingNotes": "true",\n "nextSteps": "false",\n "shortSummary": "Syfte med mötet och nästa steg saknas."\n}\n\n---\nTEXT:\n\n${o}`)(o));if(t){const o=new f(t.content);try{const t=JSON.parse(o.content);console.log("json",t);let e=0;for(const o in t)"true"===t[o]&&e++;Q(y(4===e?"Allt är med":t.shortSummary||"Något saknas")),q(4===e?"success":"warning")}catch{Q("Error: "+o.content),q("error")}}}),[L]),oo=s((()=>I.debounce(Z,2e3)),[Z]);return i((()=>()=>{oo.cancel()}),[oo]),o(x,{hideHeader:!0,children:t("div",{className:p.container,style:{backgroundImage:`url(${v("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[m&&v("SHOW_VOICE_BUTTON")&&o("div",{className:p.voiceIcon,children:o(h,{voice:m})}),o("div",{className:p.backButton,children:o(c,{appearance:"subtle",icon:o(u,{}),onClick:()=>P(-1),children:y("Tillbaka")})}),o(g,{title:v("APP_SAVE_TITLE")?y(v("APP_SAVE_TITLE")):y("Spara")}),o(k,{defaultText:$,onSend:o=>{o=`${o=`#crm\n${o.replace("#log ","")}\nSALESPERSON: ${a.context.name||a.context.user?.email||a.context.nickname||"-"}`}${T?" "+T:""}${N.length>0?"\n":""}${N.map((o=>`#file:${o.id}`)).join(" ")}`,L.sendMessage(o).then((()=>{G.notify(y("Meddelande"),y("Meddelandet är sparat."),"")}))},files:N,onFilesChange:D,isUploading:B,onUploadImage:()=>{F.current?.triggerUpload()},onUploadCamera:()=>{E.current?.triggerUpload()},getImageUrl:j.getImageUrl,hasLocation:!!T,disableSend:!0,rows:9,placeholder:y("Beskriv CRM-aktivitet här..."),onChange:o=>{o!==H&&(z(o),o&&o.trim().length>0?oo(o):(Q(void 0),oo.cancel()))},onImagePasted:X}),W&&t("div",{className:p.review,children:[o("h3",{children:y("Analys")}),o(l,{intent:J,layout:"multiline",children:o(d,{children:y(W)})})]}),o(S,{ref:M,onFileUploaded:K,onUploading:Y,multiple:!0,codicentService:L}),o(S,{codicentService:L,ref:F,onFileUploaded:K,onUploading:Y,multiple:!0,accept:"image/*"}),o(S,{codicentService:L,ref:E,onFileUploaded:K,onUploading:Y,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{y as CrmPage,y as default};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as o}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as r,useEffect as i,useMemo as a}from"react";import{makeStyles as s,shorthands as l,tokens as m,Text as p,Spinner as c,Card as d,Button as u,MessageBar as g,MessageBarBody as h}from"@fluentui/react-components";import{ArrowLeft24Regular as f}from"@fluentui/react-icons";import{CodicentService as j}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import x from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import v from"../components/VoiceIcon.js";import S from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as y}from"../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 k}from"../utils/device.js";import"exceljs";import"../components/FileThumbnail.js";import w from"../components/MessageInput.js";import b from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as C}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import M from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import{useNavigate as N,useSearchParams as I}from"react-router-dom";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import T from"../hooks/useToaster.js";import{l as B}from"../node_modules/lodash/lodash.js";const D=s({main:{flexGrow:1,...l.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...l.gap("16px"),...l.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...l.gap("16px"),...l.padding("10px")},inputSection:{display:"flex",flexDirection:"column",flexGrow:1,maxWidth:"640px",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",position:"relative"},inputSectionMobile:{display:"flex",flexDirection:"column",width:"100%",position:"relative"},historySection:{flexBasis:"300px",flexShrink:0,display:"flex",flexDirection:"column",...l.gap("8px"),overflowY:"auto",...l.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...l.gap("8px"),overflowY:"auto",...l.padding("8px"),maxHeight:"300px"},historyCard:{...l.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:m.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...l.gap("4px")},historyDate:{fontSize:m.fontSizeBase200,color:m.colorNeutralForeground3},historyText:{fontSize:m.fontSizeBase300,wordBreak:"break-word",whiteSpace:"pre-wrap",maxHeight:"100px",overflow:"hidden",textOverflow:"ellipsis"},review:{padding:"10px",wordBreak:"break-word",whiteSpace:"pre-line",maxWidth:"100%",overflowWrap:"break-word"},voiceIcon:{position:"absolute",top:"20px",right:"12px",zIndex:1001,cursor:"pointer"},historyTitle:{fontSize:m.fontSizeBase400,fontWeight:m.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:m.colorNeutralForeground3,padding:"20px"},backButton:{marginBottom:"10px"}}),U=({state:s,voice:l})=>{const m=D(),{t:U}=M(),_=N(),[A,E]=t(!1),F=n(null),P=n(null),$=n(null),[L]=t(null),[O,z]=t([]),{service:R}=s,[H,V]=I(),[W,G]=t(""),[J,Q]=t(void 0),Y=T(),[K,X]=t(void 0),[q,Z]=t("info"),[ee,oe]=t([]),[te,ne]=t(!1),re=k(),ie=r((e=>{for(const o of e)R.getFileInfo(o).then((e=>{z((o=>[...o,e]))}))}),[R,z]),ae=r((e=>{const o=new FormData;o.append("file",e),R.uploadFile(e.name,o).then((e=>{ie([e])})).catch((()=>{Y.notify(U("Error"),U("Error uploading pasted image"),"")}))}),[R,ie,Y,U]),se=e=>{E(e)},le=r((async()=>{ne(!0);try{const e=await R.getMessages(["crm"]);oe(e)}catch(e){console.error("Error loading CRM messages:",e),Y.notify(U("Error"),U("Failed to load CRM messages"),"","error")}finally{ne(!1)}}),[R,Y,U]);i((()=>{le()}),[le]),i((()=>{const e=H.get("text"),o=H.get("url");e&&(G(e),H.delete("text")),o&&(H.delete("url"),G(((e||"")+" "+o).trim())),V(H,{replace:!0})}),[H,V,G,R,ie]);const me=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${L?" "+L:""}${O.length>0?"\n":""}${O.map((e=>`#file:${e.id}`)).join(" ")}`,R.sendMessage(e).then((()=>{Y.notify(U("Meddelande"),U("Meddelandet är sparat."),""),le(),Q(""),X(void 0)}))},pe=r((async e=>{if(!e||e.length<10)return;X(U("Analyserar...")),Z("info");const o=await R.chat((e=>`Skapa kort ja/nej-status över hur CRM-aktiviteten som följer, givet dessa punkter: \n1. Namn på kunden finns med? ja/nej \n2. Syftet med mötet finns (varför träffar du kunden, kan täckas av 3 nedan) ja/nej\n3. Vad som framkommer under mötet (viktiga punkter och diskussioner) ja/nej\n4. Nästa steg finns med (hur ni kommer att träffas igen, och om något har sålts) ja/nej. \n\nSvara endast med ja/nej för varje punkt, ett svar per rad i följande exempel i JSON-format:\n{\n "customerName": "true",\n "purpose": "false",\n "meetingNotes": "true",\n "nextSteps": "false",\n "shortSummary": "Syfte med mötet och nästa steg saknas."\n}\n\n---\nTEXT:\n\n${e}`)(e));if(o){const e=new S(o.content);try{const o=JSON.parse(e.content);console.log("json",o);let t=0;for(const e in o)"true"===o[e]&&t++;X(U(4===t?"Allt är med":o.shortSummary||"Något saknas")),Z(4===t?"success":"warning")}catch{X("Error: "+e.content),Z("error")}}}),[R,U]),ce=a((()=>B.debounce(pe,2e3)),[pe]);i((()=>()=>{ce.cancel()}),[ce]);const de=e=>{const o=new Date,t=new Date(e),n=o.getTime()-t.getTime(),r=Math.floor(n/6e4),i=Math.floor(n/36e5),a=Math.floor(n/864e5);return r<1?U("Just now"):r<60?`${r} ${U("minutes ago")}`:i<24?`${i} ${U("hours ago")}`:a<7?`${a} ${U("days ago")}`:t.toLocaleDateString()},ue=e=>{const o=e.split("\n").filter((e=>!e.startsWith("#")&&!e.startsWith("SALESPERSON:")&&e.trim().length>0)).join("\n");return o.substring(0,150)+(o.length>150?"...":"")},ge=()=>o("div",{className:re?m.historySectionMobile:m.historySection,children:[e(p,{className:m.historyTitle,children:U("Tidigare sparade")}),te?e("div",{className:m.emptyState,children:e(c,{size:"small"})}):0===ee.length?e("div",{className:m.emptyState,children:e(p,{children:U("Inga sparade meddelanden än")})}):ee.map((t=>e(d,{className:m.historyCard,onClick:()=>(e=>{const o=ue(e.content);Q(o)})(t),children:o("div",{className:m.historyCardContent,children:[e(p,{className:m.historyDate,children:de(t.createdAt)}),e(p,{className:m.historyText,children:ue(t.content)})]})},t.id)))]});return e(C,{hideHeader:!0,children:o("div",{className:re?m.containerMobile:m.container,children:[!re&&ge(),o("div",{className:re?m.inputSectionMobile:m.inputSection,style:re?void 0:{backgroundImage:`url(${y("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[l&&y("SHOW_VOICE_BUTTON")&&e("div",{className:m.voiceIcon,children:e(v,{voice:l})}),e("div",{className:m.backButton,children:e(u,{appearance:"subtle",icon:e(f,{}),onClick:()=>_(-1),children:U("Tillbaka")})}),e(x,{title:y("APP_SAVE_TITLE")?U(y("APP_SAVE_TITLE")):U("Spara")}),e(w,{defaultText:W,onSend:me,files:O,onFilesChange:z,isUploading:A,onUploadImage:()=>{P.current?.triggerUpload()},onUploadCamera:()=>{$.current?.triggerUpload()},getImageUrl:j.getImageUrl,hasLocation:!!L,disableSend:!0,rows:9,placeholder:U("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==J&&(Q(e),e&&e.trim().length>0?ce(e):(X(void 0),ce.cancel()))},onImagePasted:ae}),K&&o("div",{className:m.review,children:[e("h3",{children:U("Analys")}),e(g,{intent:q,layout:"multiline",children:e(h,{children:U(K)})})]}),e(b,{ref:F,onFileUploaded:ie,onUploading:se,multiple:!0,codicentService:R}),e(b,{codicentService:R,ref:P,onFileUploaded:ie,onUploading:se,multiple:!0,accept:"image/*"}),e(b,{codicentService:R,ref:$,onFileUploaded:ie,onUploading:se,multiple:!0,accept:"image/*",capture:"environment"})]}),re&&ge()]})})};export{U as CrmPagePersistent,U as default};
1
+ import{jsx as o,jsxs as e}from"react/jsx-runtime";import{useState as t,useRef as n,useCallback as i,useEffect as r,useMemo as a}from"react";import{makeStyles as s,shorthands as m,tokens as p,Text as l,Spinner as c,Card as d,Button as u,MessageBar as g,MessageBarBody as h}from"@fluentui/react-components";import{ArrowLeft24Regular as j}from"@fluentui/react-icons";import{CodicentService as f}from"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import x from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import S from"../components/VoiceIcon.js";import v from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as y}from"../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 k}from"../utils/device.js";import"exceljs";import"../components/FileThumbnail.js";import w from"../components/MessageInput.js";import b from"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{Page as A}from"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import C from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import{useNavigate as M,useSearchParams as N}from"react-router-dom";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import D from"../hooks/useToaster.js";import{l as I}from"../node_modules/lodash/lodash.js";const B=s({main:{flexGrow:1,...m.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...m.gap("16px"),...m.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...m.gap("16px"),...m.padding("10px")},inputSection:{display:"flex",flexDirection:"column",flexGrow:1,maxWidth:"640px",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",position:"relative"},inputSectionMobile:{display:"flex",flexDirection:"column",width:"100%",position:"relative"},historySection:{flexBasis:"300px",flexShrink:0,display:"flex",flexDirection:"column",...m.gap("8px"),overflowY:"auto",...m.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...m.gap("8px"),overflowY:"auto",...m.padding("8px"),maxHeight:"300px"},historyCard:{...m.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:p.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...m.gap("4px")},historyDate:{fontSize:p.fontSizeBase200,color:p.colorNeutralForeground3},historyText:{fontSize:p.fontSizeBase300,wordBreak:"break-word",whiteSpace:"pre-wrap",maxHeight:"100px",overflow:"hidden",textOverflow:"ellipsis"},review:{padding:"10px",wordBreak:"break-word",whiteSpace:"pre-line",maxWidth:"100%",overflowWrap:"break-word"},voiceIcon:{position:"absolute",top:"20px",right:"12px",zIndex:1001,cursor:"pointer"},historyTitle:{fontSize:p.fontSizeBase400,fontWeight:p.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:p.colorNeutralForeground3,padding:"20px"},backButton:{marginBottom:"10px"}}),T=({state:s,voice:m})=>{const p=B(),{t:T}=C(),U=M(),[P,E]=t(!1),F=n(null),_=n(null),$=n(null),[L]=t(null),[O,R]=t([]),{service:z}=s,[H,V]=N(),[W,G]=t(""),[J,Q]=t(void 0),Y=D(),[q,K]=t(void 0),[X,Z]=t("info"),[oo,eo]=t([]),[to,no]=t(!1),io=k(),ro=i((o=>{for(const e of o)z.getFileInfo(e).then((o=>{R((e=>[...e,o]))}))}),[z,R]),ao=i((o=>{const e=new FormData;e.append("file",o),z.uploadFile(o.name,e).then((o=>{ro([o])})).catch((()=>{Y.notify(T("Error"),T("Error uploading pasted image"),"")}))}),[z,ro,Y,T]),so=o=>{E(o)},mo=i((async()=>{no(!0);try{const o=await z.getMessages(["crm"]);eo(o)}catch(o){console.error("Error loading CRM messages:",o),Y.notify(T("Error"),T("Failed to load CRM messages"),"","error")}finally{no(!1)}}),[z,Y,T]);r((()=>{mo()}),[mo]),r((()=>{const o=H.get("text"),e=H.get("url");o&&(G(o),H.delete("text")),e&&(H.delete("url"),G(((o||"")+" "+e).trim())),V(H,{replace:!0})}),[H,V,G,z,ro]);const po=o=>{o=`${o=`#crm\n${o.replace("#log ","")}\nSALESPERSON: ${s.context.name||s.context.user?.email||s.context.nickname||"-"}`}${L?" "+L:""}${O.length>0?"\n":""}${O.map((o=>`#file:${o.id}`)).join(" ")}`,z.sendMessage(o).then((()=>{Y.notify(T("Meddelande"),T("Meddelandet är sparat."),""),mo(),Q(""),K(void 0)}))},lo=i((async o=>{if(!o||o.length<10)return;K(T("Analyserar...")),Z("info");const e=await z.chat((o=>`Skapa kort ja/nej-status över hur CRM-aktiviteten som följer, givet dessa punkter: \n1. Namn på kunden finns med? ja/nej \n2. Syftet med mötet finns (varför träffar du kunden, kan täckas av 3 nedan) ja/nej\n3. Vad som framkommer under mötet (viktiga punkter och diskussioner) ja/nej\n4. Nästa steg finns med (hur ni kommer att träffas igen, och om något har sålts) ja/nej. \n\nSvara endast med ja/nej för varje punkt, ett svar per rad i följande exempel i JSON-format:\n{\n "customerName": "true",\n "purpose": "false",\n "meetingNotes": "true",\n "nextSteps": "false",\n "shortSummary": "Syfte med mötet och nästa steg saknas."\n}\n\n---\nTEXT:\n\n${o}`)(o));if(e){const o=new v(e.content);try{const e=JSON.parse(o.content);console.log("json",e);let t=0;for(const o in e)"true"===e[o]&&t++;K(T(4===t?"Allt är med":e.shortSummary||"Något saknas")),Z(4===t?"success":"warning")}catch{K("Error: "+o.content),Z("error")}}}),[z,T]),co=a((()=>I.debounce(lo,2e3)),[lo]);r((()=>()=>{co.cancel()}),[co]);const uo=o=>{const e=new Date,t=new Date(o),n=e.getTime()-t.getTime(),i=Math.floor(n/6e4),r=Math.floor(n/36e5),a=Math.floor(n/864e5);return i<1?T("Just now"):i<60?`${i} ${T("minutes ago")}`:r<24?`${r} ${T("hours ago")}`:a<7?`${a} ${T("days ago")}`:t.toLocaleDateString()},go=o=>{const e=o.split("\n").filter((o=>!o.startsWith("#")&&!o.startsWith("SALESPERSON:")&&o.trim().length>0)).join("\n");return e.substring(0,150)+(e.length>150?"...":"")},ho=()=>e("div",{className:io?p.historySectionMobile:p.historySection,children:[o(l,{className:p.historyTitle,children:T("Tidigare sparade")}),to?o("div",{className:p.emptyState,children:o(c,{size:"small"})}):0===oo.length?o("div",{className:p.emptyState,children:o(l,{children:T("Inga sparade meddelanden än")})}):oo.map((t=>o(d,{className:p.historyCard,onClick:()=>(o=>{const e=go(o.content);Q(e)})(t),children:e("div",{className:p.historyCardContent,children:[o(l,{className:p.historyDate,children:uo(t.createdAt)}),o(l,{className:p.historyText,children:go(t.content)})]})},t.id)))]});return o(A,{hideHeader:!0,children:e("div",{className:io?p.containerMobile:p.container,children:[!io&&ho(),e("div",{className:io?p.inputSectionMobile:p.inputSection,style:io?void 0:{backgroundImage:`url(${y("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[m&&y("SHOW_VOICE_BUTTON")&&o("div",{className:p.voiceIcon,children:o(S,{voice:m})}),o("div",{className:p.backButton,children:o(u,{appearance:"subtle",icon:o(j,{}),onClick:()=>U(-1),children:T("Tillbaka")})}),o(x,{title:y("APP_SAVE_TITLE")?T(y("APP_SAVE_TITLE")):T("Spara")}),o(w,{defaultText:W,onSend:po,files:O,onFilesChange:R,isUploading:P,onUploadImage:()=>{_.current?.triggerUpload()},onUploadCamera:()=>{$.current?.triggerUpload()},getImageUrl:f.getImageUrl,hasLocation:!!L,disableSend:!0,rows:9,placeholder:T("Beskriv CRM-aktivitet här..."),onChange:o=>{o!==J&&(Q(o),o&&o.trim().length>0?co(o):(K(void 0),co.cancel()))},onImagePasted:ao}),q&&e("div",{className:p.review,children:[o("h3",{children:T("Analys")}),o(g,{intent:X,layout:"multiline",children:o(h,{children:T(q)})})]}),o(b,{ref:F,onFileUploaded:ro,onUploading:so,multiple:!0,codicentService:z}),o(b,{codicentService:z,ref:_,onFileUploaded:ro,onUploading:so,multiple:!0,accept:"image/*"}),o(b,{codicentService:z,ref:$,onFileUploaded:ro,onUploading:so,multiple:!0,accept:"image/*",capture:"environment"})]}),io&&ho()]})})};export{T as CrmPagePersistent,T as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as t,Fragment as e}from"react/jsx-runtime";import r from"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Title as i}from"../components/Title.js";import{Text as n}from"../components/Text.js";import"../components/Spinner.js";import{makeStyles as s,Button as m}from"@fluentui/react-components";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import{useState as p,useEffect as a}from"react";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as c}from"../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{formatGuidToShorterReadableCode as l}from"../utils/helpers.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./Sales.js";import{useSearchParams as j,useNavigate as d}from"react-router-dom";import"./Purchase.js";import u from"../components/Content.js";import{Page as h}from"../components/Page.js";import"./QrScan.js";import g from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const f=s({container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},instructionParagraph:{fontWeight:"bold",marginBottom:"1em"},orderedList:{marginLeft:"20px",marginBottom:"1em",fontSize:"1.3em"}}),k=()=>{const{t:s,tAsync:k}=g(),[C]=j(),M=d(),v=C.get("id"),_=f(),[b,S]=p(""),[P,x]=p(!1);return a((()=>{(async()=>{const o=c("FORM_ACCEPT_MARKDOWN");if(o){x(!0);const t=await k(o);x(!1),S(t.replace("{{code}}",l(v||"")))}})()}),[k,v]),o(h,{hideFooter:!0,hideHeader:!0,children:o("div",{className:_.container,style:{backgroundImage:`url(${c("FORM_BACKGROUND_IMAGE_URL")})`},children:t(u,{children:[P&&o(n,{children:s("Översätter...")}),c("FORM_ACCEPT_MARKDOWN")&&b&&!P&&o(r,{content:b}),!c("FORM_ACCEPT_MARKDOWN")&&t(e,{children:[o(i,{children:s("Din kod för formuläret")}),o("p",{className:_.instructionParagraph,children:s("Instruktioner:")}),t("ol",{className:_.orderedList,children:[o("li",{children:s("Skriv ner eller kopiera den kod som visas nedan, du behöver den för att identifiera din session.")}),o("li",{children:s("Klicka på 'Starta' för att komma igång med chatten.")})]}),o(n,{size:500,children:s("Din kod är (skriv ner den):")}),o(n,{size:600,style:{userSelect:"all"},children:l(v||"")})]}),v&&o(m,{appearance:"primary",onClick:()=>M(`/chat?fid=${v}`),children:s("Starta")})]})})})};export{k as default};
1
+ import{jsx as o,jsxs as t,Fragment as i}from"react/jsx-runtime";import e from"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Title as r}from"../components/Title.js";import{Text as s}from"../components/Text.js";import"../components/Spinner.js";import{makeStyles as n,Button as m}from"@fluentui/react-components";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import{useState as p,useEffect as a}from"react";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as c}from"../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{formatGuidToShorterReadableCode as d}from"../utils/helpers.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./Sales.js";import{useSearchParams as l,useNavigate as j}from"react-router-dom";import"./Purchase.js";import u from"../components/Content.js";import{Page as g}from"../components/Page.js";import"./QrScan.js";import h from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";const f=n({container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},instructionParagraph:{fontWeight:"bold",marginBottom:"1em"},orderedList:{marginLeft:"20px",marginBottom:"1em",fontSize:"1.3em"}}),A=()=>{const{t:n,tAsync:A}=h(),[C]=l(),k=j(),S=C.get("id"),P=f(),[M,b]=p(""),[v,D]=p(!1);return a((()=>{(async()=>{const o=c("FORM_ACCEPT_MARKDOWN");if(o){D(!0);const t=await A(o);D(!1),b(t.replace("{{code}}",d(S||"")))}})()}),[A,S]),o(g,{hideFooter:!0,hideHeader:!0,children:o("div",{className:P.container,style:{backgroundImage:`url(${c("FORM_BACKGROUND_IMAGE_URL")})`},children:t(u,{children:[v&&o(s,{children:n("Översätter...")}),c("FORM_ACCEPT_MARKDOWN")&&M&&!v&&o(e,{content:M}),!c("FORM_ACCEPT_MARKDOWN")&&t(i,{children:[o(r,{children:n("Din kod för formuläret")}),o("p",{className:P.instructionParagraph,children:n("Instruktioner:")}),t("ol",{className:P.orderedList,children:[o("li",{children:n("Skriv ner eller kopiera den kod som visas nedan, du behöver den för att identifiera din session.")}),o("li",{children:n("Klicka på 'Starta' för att komma igång med chatten.")})]}),o(s,{size:500,children:n("Din kod är (skriv ner den):")}),o(s,{size:600,style:{userSelect:"all"},children:d(S||"")})]}),S&&o(m,{appearance:"primary",onClick:()=>k(`/chat?fid=${S}`),children:n("Starta")})]})})})};export{A as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as e,Fragment as t}from"react/jsx-runtime";import{useState as n,useEffect as r}from"react";import{makeStyles as i,useId as a,Dropdown as s,Option as m}from"@fluentui/react-components";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as l}from"../components/Title.js";import"../components/Spinner.js";import{Label as c}from"../components/Label.js";import{Input as d}from"../components/Input.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import u from"../hooks/useStateWithLocalStorage.js";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as j}from"../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{formatGuidToShorterReadableCode as h}from"../utils/helpers.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormAccept.js";import"./Sales.js";import"react-router-dom";import"./Purchase.js";import k from"../components/Content.js";import{Page as g}from"../components/Page.js";import"./QrScan.js";import f from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const v=i({inputAndButton:{display:"flex",gap:"10px"},input:{minWidth:"90%"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},generatedLinkTitle:{marginBottom:"0.5em",fontWeight:"bold"},orderedList:{marginLeft:"20px",marginBottom:"1em"},instructionParagraph:{marginBottom:"1em",fontWeight:"bold"}}),w=({state:i})=>{const w=v(),{service:b}=i,{t:C}=f(),[S,x]=u(i.context.selectedApp+"_forms",[]),[y,L]=n(),[$,M]=n(),[P,B]=n(!1),[_,A]=n(),D=a("form-dropdown");r((()=>{b.getForms().then((o=>{o.sort(((o,e)=>o.name.localeCompare(e.name))),x(o)}))}),[b,C,x]);const T=void 0!==navigator.share;return o(g,{children:o("div",{className:w.container,style:{backgroundImage:`url(${j("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:e(k,{children:[o(l,{children:C("Skapa länk till formulär")}),o("p",{className:w.instructionParagraph,children:C("Instruktioner")}),e("ol",{className:w.orderedList,children:[o("li",{children:C("Välj ett formulär från rullgardinsmenyn nedan. Detta formulär kommer att användas för den genererade länken.")}),o("li",{children:C("Klicka på 'Skapa länk' för att generera en unik länk. Länken visar var aktiv och kan användas för att svara på formuläret.")}),o("li",{children:C("När länken visas, kan du klicka på kopiera-ikonen för att kopiera länken till ditt urklipp.")}),o("li",{children:C("Om din enhet stödjer det, kan du även använda dela-knappen för att dela länken direkt.")}),o("li",{children:C("Kom ihåg att spara (skriva ner) koden")})]}),o("label",{id:D,className:w.instructionParagraph,children:C("Välj formulär")}),o(s,{"aria-labelledby":D,placeholder:"-",onOptionSelect:(o,e)=>A(e.optionValue),children:S.map((o=>e(m,{value:o.name,text:`${o.title} (${o.name})`,children:[`${o.title} (${o.name})`," "]},o.name)))}),o(p,{appearance:"primary",disabled:!_,onClick:()=>{const o=S.find((o=>o.name===_));o?.url?b.sendMessage(`#ss-link #${_}`).then((e=>{const t=new Date(Date.now()+2592e5);b.generateApiToken(t).then((t=>{const n=o.url.includes("?")?"&":"?",r=`${o.url}${n}token=${t}`;L(r);const i=h(e);M(i)}))})):b.sendMessage(`#ss-link #${_}`).then((o=>{const e=`${window.location.protocol}//${window.location.hostname}${window.location.port?":"+window.location.port:""}${window.location.pathname}`;L(`${e}#/formaccept?id=${o}`);const t=h(o);M(t)}))},children:C("Skapa länk")}),y&&e(t,{children:[o("p",{className:w.generatedLinkTitle,children:C("Här är din genererade länk (du kan kopiera eller dela den):")}),o("div",{className:w.inputAndButton,children:o(d,{className:w.input,value:y,readOnly:!0,onFocus:o=>o.target.select()})}),o("br",{}),e("div",{className:w.inputAndButton,children:[o(p,{appearance:"primary",title:C("Kopiera länk"),icon:"CopyRegular",onClick:()=>{y&&(navigator.clipboard.writeText(y),B(!0),setTimeout((()=>{B(!1),L(void 0)}),2e3))},children:C("Kopiera")}),T&&o(p,{appearance:"primary",title:C("Dela länk"),icon:"ShareRegular",onClick:()=>{y&&(navigator.share({url:y}),setTimeout((()=>{L(void 0)}),2e3))},children:C("Dela")})]}),P&&o(c,{children:C("Länk kopierad!")})]})]})})})};export{w as default};
1
+ import{jsx as o,jsxs as t,Fragment as e}from"react/jsx-runtime";import{useState as n,useEffect as i}from"react";import{makeStyles as r,useId as a,Dropdown as s,Option as m}from"@fluentui/react-components";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as l}from"../components/Title.js";import"../components/Spinner.js";import{Label as c}from"../components/Label.js";import{Input as d}from"../components/Input.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import u from"../hooks/useStateWithLocalStorage.js";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as j}from"../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{formatGuidToShorterReadableCode as g}from"../utils/helpers.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormAccept.js";import"./Sales.js";import"react-router-dom";import"./Purchase.js";import h from"../components/Content.js";import{Page as k}from"../components/Page.js";import"./QrScan.js";import f from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";const v=r({inputAndButton:{display:"flex",gap:"10px"},input:{minWidth:"90%"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},generatedLinkTitle:{marginBottom:"0.5em",fontWeight:"bold"},orderedList:{marginLeft:"20px",marginBottom:"1em"},instructionParagraph:{marginBottom:"1em",fontWeight:"bold"}}),A=({state:r})=>{const A=v(),{service:w}=r,{t:b}=f(),[C,S]=u(r.context.selectedApp+"_forms",[]),[x,P]=n(),[y,D]=n(),[B,L]=n(!1),[$,M]=n(),I=a("form-dropdown");i((()=>{w.getForms().then((o=>{o.sort(((o,t)=>o.name.localeCompare(t.name))),S(o)}))}),[w,b,S]);const _=void 0!==navigator.share;return o(k,{children:o("div",{className:A.container,style:{backgroundImage:`url(${j("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:t(h,{children:[o(l,{children:b("Skapa länk till formulär")}),o("p",{className:A.instructionParagraph,children:b("Instruktioner")}),t("ol",{className:A.orderedList,children:[o("li",{children:b("Välj ett formulär från rullgardinsmenyn nedan. Detta formulär kommer att användas för den genererade länken.")}),o("li",{children:b("Klicka på 'Skapa länk' för att generera en unik länk. Länken visar var aktiv och kan användas för att svara på formuläret.")}),o("li",{children:b("När länken visas, kan du klicka på kopiera-ikonen för att kopiera länken till ditt urklipp.")}),o("li",{children:b("Om din enhet stödjer det, kan du även använda dela-knappen för att dela länken direkt.")}),o("li",{children:b("Kom ihåg att spara (skriva ner) koden")})]}),o("label",{id:I,className:A.instructionParagraph,children:b("Välj formulär")}),o(s,{"aria-labelledby":I,placeholder:"-",onOptionSelect:(o,t)=>M(t.optionValue),children:C.map((o=>t(m,{value:o.name,text:`${o.title} (${o.name})`,children:[`${o.title} (${o.name})`," "]},o.name)))}),o(p,{appearance:"primary",disabled:!$,onClick:()=>{const o=C.find((o=>o.name===$));o?.url?w.sendMessage(`#ss-link #${$}`).then((t=>{const e=new Date(Date.now()+2592e5);w.generateApiToken(e).then((e=>{const n=o.url.includes("?")?"&":"?",i=`${o.url}${n}token=${e}`;P(i);const r=g(t);D(r)}))})):w.sendMessage(`#ss-link #${$}`).then((o=>{const t=`${window.location.protocol}//${window.location.hostname}${window.location.port?":"+window.location.port:""}${window.location.pathname}`;P(`${t}#/formaccept?id=${o}`);const e=g(o);D(e)}))},children:b("Skapa länk")}),x&&t(e,{children:[o("p",{className:A.generatedLinkTitle,children:b("Här är din genererade länk (du kan kopiera eller dela den):")}),o("div",{className:A.inputAndButton,children:o(d,{className:A.input,value:x,readOnly:!0,onFocus:o=>o.target.select()})}),o("br",{}),t("div",{className:A.inputAndButton,children:[o(p,{appearance:"primary",title:b("Kopiera länk"),icon:"CopyRegular",onClick:()=>{x&&(navigator.clipboard.writeText(x),L(!0),setTimeout((()=>{L(!1),P(void 0)}),2e3))},children:b("Kopiera")}),_&&o(p,{appearance:"primary",title:b("Dela länk"),icon:"ShareRegular",onClick:()=>{x&&(navigator.share({url:x}),setTimeout((()=>{P(void 0)}),2e3))},children:b("Dela")})]}),B&&o(c,{children:b("Länk kopierad!")})]})]})})})};export{A as default};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as t,Fragment as o}from"react/jsx-runtime";import{useState as n,useEffect as i}from"react";import{makeStyles as r,shorthands as a,Tooltip as s,Button as l,Image as c,Menu as p,MenuTrigger as m,MenuButton as d,MenuPopover as u,MenuList as h,MenuItem as g}from"@fluentui/react-components";import*as f from"@fluentui/react-icons";import{Edit24Regular as b,Chat24Regular as v,Target24Regular as j,Database24Regular as x,Sparkle24Regular as k,Briefcase24Regular as C,Rocket24Regular as w}from"@fluentui/react-icons";import{Link as y}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as S}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as I}from"../components/Title.js";import{Text as A}from"../components/Text.js";import{Spinner as N}from"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import D from"../hooks/useStateWithLocalStorage.js";import"../services/codicent.js";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"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import z from"../components/Content.js";import{Page as M}from"../components/Page.js";import"./QrScan.js";import P from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import B from"../hooks/useCodicentState.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{UrlProcessor as _}from"../components/UrlProcessor.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import T from"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const W=t=>{if(!t)return null;const o=f[t];if(o&&("function"==typeof o||"object"==typeof o))try{return e(o,{})}catch{return null}return null},L=t=>{switch(t){case"Start Your CV AI Assistant":return e(w,{});case"Smart CV Matching":return e(C,{});case"Enhance & Optimize CVs":return e(k,{});case"View CV Database":return e(x,{});case"Create Job Requirements":return e(j,{});case"Chat with CV AI":return e(v,{});default:return null}},$=r({main:{flexGrow:1,...a.padding("10px"),overflowY:"auto",touchAction:"pan-y"},editButton:{position:"absolute",top:"80px",right:"16px",zIndex:10,background:"transparent",boxShadow:"none",border:"none",cursor:"pointer",padding:0,pointerEvents:"auto"},root:{height:"100%",backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y",pointerEvents:"none"},item:{height:"auto",width:"auto",flexShrink:1},buttonsList:{display:"flex",flexWrap:"wrap",justifyContent:"space-between",flexDirection:"column",alignItems:"center",gap:"1.5rem",...a.padding("10px"),paddingTop:"30px",pointerEvents:"auto"},buttonContent:{display:"flex",alignItems:"center",gap:"8px"},buttonContentColumn:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"4px",width:"100%"},buttonContentRow:{display:"flex",alignItems:"center",gap:"8px","& > svg":{flexShrink:0,width:"24px"}},buttonSubtitle:{fontSize:"0.85em",opacity:.75,fontWeight:"normal",marginTop:"2px",paddingLeft:"32px"},menuPopover:{minWidth:"16rem",borderRadius:"12px",...a.padding("6px"),boxShadow:"0 8px 32px rgba(0,0,0,0.18), 0 2px 8px rgba(0,0,0,0.10)"},menuItemIconBadge:{display:"flex",alignItems:"center",justifyContent:"center",width:"32px",height:"32px",borderRadius:"8px",backgroundColor:"var(--colorBrandBackground2)",color:"var(--colorBrandForeground2)",flexShrink:0},menuItemTitle:{fontWeight:"500",fontSize:"0.95em"},menuItemSubtitle:{fontSize:"0.78em",opacity:.6,paddingLeft:"42px"},welcomeInfo:{display:"flex",flexDirection:"column",gap:"8px",alignItems:"center",textAlign:"center",maxWidth:"20rem",pointerEvents:"auto"},scrollableContent:{overflowY:"auto"}}),E=({state:r,audio:a,voice:f,buttons:v,backgroundImageUrl:j,welcomeText:x,slogan:k,indexTitle:C,developerMode:w,onEditClick:E,buttonStyles:F={},appName:V})=>{const{selectedApp:R,nickname:H,apps:U,name:O}=r.context,{service:Q,error:Y,stateMachine:q,currentStateName:K,fixAppUrl:G}=r,J=$(),[X,Z]=D("app-buttons_"+R,[]),[ee,te]=n(!1),[oe,ne]=n(!1),[ie,re]=n([]),[ae,se]=n(""),[le,ce]=n(""),[pe,me]=n(""),[de,ue]=n(new Set),{updating:he,welcomeStatusText:ge}=B(q),{t:fe}=P();i((()=>{void 0!==v?Z(v):R&&Q.getAppButtons().then((e=>Z(e))).catch(console.warn)}),[Q,Z,R,v]);const be=e=>{e.preventDefault(),e.stopPropagation()},ve=!R||"hasAccess"!==K,je=!R||"hasAccess"!==K,xe=R&&"hasAccess"===K,ke=!R&&"hasAccess"===K&&U.length>1,Ce=!Y&&!R&&!V,we="noAccess"===K&&(1===U.length||!!V),ye=R&&"hasAccess"===K;return e(M,{hideHeader:ve,hideFooter:je,audio:a,voice:f,children:t("div",{className:J.root,style:{backgroundImage:j?`url(${j})`:void 0},children:[w&&E&&"hasAccess"===K&&e("div",{className:J.editButton,children:e(s,{content:fe("Edit settings")||"Edit settings",relationship:"label",children:e(l,{appearance:"subtle",icon:e(b,{}),"aria-label":fe("Edit settings")||"Edit settings",onClick:E,size:"small"})})}),e("div",{className:J.item,children:e("div",{className:J.item,children:t("div",{className:J.buttonsList,children:[ke&&t(o,{children:[e(I,{children:fe("Välkommen, vart vill du gå?")}),U.map(((o,n)=>e("div",{children:e(S,{size:"large",appearance:"primary",onClick:()=>q.setSelectedApp(o.id),children:t("div",{className:J.buttonContent,children:[o.logo&&e(c,{src:o.logo,height:24}),o.title||o.id]})})},"codicent_button_"+n)))]}),Ce&&t(o,{children:[e(I,{children:fe("Skapa ny?")}),e(A,{size:400,children:fe("Här går du vidare för att skapa din egna privata digitala assistent.")}),e(S,{size:"large",appearance:"primary",onClick:()=>q.update(),children:fe("Kör!")})]}),we&&e("div",{children:t(z,{children:[e(I,{children:`${fe("Välkommen till")} ${C}`}),!ee&&e(A,{size:400,children:fe("Du är inte medlem än. Skicka begäran för att komma in!")}),!ee&&e(S,{size:"large",appearance:"primary",onClick:async()=>{if(te(!0),!V)return console.error("appName prop not provided."),alert("appName not defined."),void te(!1);await Q.requestInvite(H,V)?alert(fe("Begäran skickad! Du får åtkomst när ägaren godkänner.")):(te(!1),alert(fe("Misslyckades att skicka begäran. Försök igen senare.")))},children:fe("Skicka begäran")}),!ee&&t(A,{size:300,children:[fe("Har du redan ett abonnemang? Då kanske har du loggat in med fel konto.")," ",e(y,{to:"/logout",children:fe("Logga ut")})," ",fe("och sedan in igen för att komma igång.")]}),ee&&e(A,{size:400,children:fe("Begäran skickad till ägaren.")}),ee&&e(S,{size:"large",onClick:()=>{window.location.href="./"},children:fe("Kontrollera åtkomst")})]})}),ye&&t("div",{className:J.welcomeInfo,children:[e(A,{weight:"semibold",size:500,align:"center",children:x?x.replace("{{username}}",O||H||""):fe("Välkommen")}),k&&e(A,{weight:"semibold",italic:!0,size:400,align:"center",children:k}),he&&e(N,{}),!he&&ge&&e(A,{size:400,align:"center",children:fe(ge)})]}),xe&&X.map(((o,n)=>{const i="file_drop"===o.type,r="multi_option"===o.type,a=o.options&&Array.isArray(o.options)?o.options:[],s=e=>{const t=e.replace("upload:","").split(":");if(t.length>=4){se(t[0]?.trim()||""),ce(t[1]?.trim()||""),me(t[2]?.trim()||"");const e=t[3]?.trim()||"";re(e?e.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[])}else{se(""),ce(""),me("");const e=t[0]?.trim()||"";re(e?e.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[])}ne(!0)},l=(e,t)=>{if(e.startsWith("voice:")){const t=e.replace("voice:","").trim();t&&f?.updateInstructions(t),f?.connectConversation()}else e.startsWith("upload:")?s(e):e.startsWith("app:")?t(e.replace("app:",G("/app/index.html?token={token}&app={app}&nickname={nickname}")).trim()):t(e)};return e("div",{children:i?e("div",{className:`${J.item} ${de.has(n)?"dragActive":""}`,style:{width:"16rem",minWidth:"15rem",border:`2px dashed ${F.textColor||"#ccc"}`,backgroundColor:de.has(n)?F.activeColor||void 0:F.backgroundColor||void 0,color:F.textColor||void 0,borderRadius:"8px",padding:"1.2rem 1rem",textAlign:"center",cursor:"pointer"},onDragEnter:e=>((e,t)=>{e.preventDefault(),e.stopPropagation(),ue((e=>new Set(e.add(t))))})(e,n),onDragLeave:e=>((e,t)=>{e.preventDefault(),e.stopPropagation(),ue((e=>{const o=new Set(e);return o.delete(t),o}))})(e,n),onDragOver:be,onDrop:e=>(async(e,t,o)=>{e.preventDefault(),e.stopPropagation(),ue((e=>{const t=new Set(e);return t.delete(o),t}));const n=Array.from(e.dataTransfer.files);if(0===n.length)return;let i=[];if(t.url.startsWith("upload:")){const e=t.url.replace("upload:","").split(":"),o=(e.length>=4?e[3]:e[0])?.trim()||"";i=o?o.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[]}for(const e of n)try{const t=new FormData;t.append("file",e);const o=await Q.uploadFile(e.name,t);if(!o)continue;const n=i.length>0?i.map((e=>`#${e}`)).join(" "):"#index #summarize";await Q.sendMessage(`@${R} ${n}\n\n${e.name}\n#file:${o}\n`)}catch(t){console.error("Error processing file:",e.name,t)}})(e,o,n),onClick:()=>o.url.startsWith("upload:")&&s(o.url),children:t("div",{className:J.buttonContentColumn,children:[t("div",{className:J.buttonContentRow,children:[W(o.icon)||L(o.title),e("span",{children:fe(o.title)})]}),e("div",{className:J.buttonSubtitle,children:de.has(n)?fe("Drop files here..."):fe("Drag files here or click")})]})}):r?t(p,{children:[e(m,{children:e(d,{size:"large",appearance:"primary",style:{width:"16rem",minWidth:"15rem",border:"none",backgroundColor:F.backgroundColor||void 0,color:F.textColor||void 0,padding:"1.2rem 1rem"},children:t("div",{className:J.buttonContentColumn,children:[t("div",{className:J.buttonContentRow,children:[W(o.icon)||L(o.title),e("span",{children:fe(o.title)})]}),o.subtitle&&e("div",{className:J.buttonSubtitle,children:fe(o.subtitle)})]})})}),e(u,{className:J.menuPopover,children:e(h,{children:a.map(((o,i)=>e(_,{service:Q,children:n=>e(g,{onClick:()=>l(o.url,n),children:t("div",{children:[t("div",{style:{display:"flex",alignItems:"center",gap:"10px"},children:[W(o.icon)&&e("div",{className:J.menuItemIconBadge,children:W(o.icon)}),e("span",{className:J.menuItemTitle,children:fe(o.title)})]}),o.subtitle&&e("div",{className:J.menuItemSubtitle,children:fe(o.subtitle)})]})})},`option_${n}_${i}`)))})})]}):e(_,{service:Q,children:n=>e(S,{size:"large",appearance:"primary",style:{width:"16rem",minWidth:"15rem",border:"none",backgroundColor:F.backgroundColor||void 0,color:F.textColor||void 0,padding:"1.2rem 1rem"},onClick:()=>l(o.url,n),children:t("div",{className:J.buttonContentColumn,children:[t("div",{className:J.buttonContentRow,children:[W(o.icon)||L(o.title),e("span",{children:fe(o.title)})]}),o.subtitle&&e("div",{className:J.buttonSubtitle,children:fe(o.subtitle)})]})})})},"button_"+n)}))]})})}),Y&&e("div",{className:"error",children:Y}),e(T,{project:R||"",hidden:!oe,onDismiss:()=>{ne(!1),se(""),ce(""),me(""),re([])},sendMessage:async e=>{try{return await Q.sendMessage(e)}catch{return}},onUploaded:()=>{ne(!1),se(""),ce(""),me(""),re([])},service:Q,tags:ie,title:ae,description:le,dropText:pe})]})})};export{E as Home,E as default};
1
+ import{jsx as e,jsxs as t,Fragment as o}from"react/jsx-runtime";import{useState as n,useEffect as i}from"react";import{makeStyles as r,shorthands as a,Tooltip as s,Button as l,Image as c,Menu as p,MenuTrigger as m,MenuButton as d,MenuPopover as u,MenuList as h,MenuItem as g}from"@fluentui/react-components";import*as f from"@fluentui/react-icons";import{Edit24Regular as j,Chat24Regular as b,Target24Regular as v,Database24Regular as x,Sparkle24Regular as k,Briefcase24Regular as C,Rocket24Regular as w}from"@fluentui/react-icons";import{Link as y}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as S}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as A}from"../components/Title.js";import{Text as I}from"../components/Text.js";import{Spinner as D}from"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import N from"../hooks/useStateWithLocalStorage.js";import"../services/codicent.js";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"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import z from"../components/Content.js";import{Page as P}from"../components/Page.js";import"./QrScan.js";import B from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import M from"../hooks/useCodicentState.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{UrlProcessor as _}from"../components/UrlProcessor.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import T from"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";const E=t=>{if(!t)return null;const o=f[t];if(o&&("function"==typeof o||"object"==typeof o))try{return e(o,{})}catch{return null}return null},F=t=>{switch(t){case"Start Your CV AI Assistant":return e(w,{});case"Smart CV Matching":return e(C,{});case"Enhance & Optimize CVs":return e(k,{});case"View CV Database":return e(x,{});case"Create Job Requirements":return e(v,{});case"Chat with CV AI":return e(b,{});default:return null}},W=r({main:{flexGrow:1,...a.padding("10px"),overflowY:"auto",touchAction:"pan-y"},editButton:{position:"absolute",top:"80px",right:"16px",zIndex:10,background:"transparent",boxShadow:"none",border:"none",cursor:"pointer",padding:0,pointerEvents:"auto"},root:{height:"100%",backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y",pointerEvents:"none"},item:{height:"auto",width:"auto",flexShrink:1},buttonsList:{display:"flex",flexWrap:"wrap",justifyContent:"space-between",flexDirection:"column",alignItems:"center",gap:"1.5rem",...a.padding("10px"),paddingTop:"30px",pointerEvents:"auto"},buttonContent:{display:"flex",alignItems:"center",gap:"8px"},buttonContentColumn:{display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"4px",width:"100%"},buttonContentRow:{display:"flex",alignItems:"center",gap:"8px","& > svg":{flexShrink:0,width:"24px"}},buttonSubtitle:{fontSize:"0.85em",opacity:.75,fontWeight:"normal",marginTop:"2px",paddingLeft:"32px"},menuPopover:{minWidth:"16rem",borderRadius:"12px",...a.padding("6px"),boxShadow:"0 8px 32px rgba(0,0,0,0.18), 0 2px 8px rgba(0,0,0,0.10)"},menuItemIconBadge:{display:"flex",alignItems:"center",justifyContent:"center",width:"32px",height:"32px",borderRadius:"8px",backgroundColor:"var(--colorBrandBackground2)",color:"var(--colorBrandForeground2)",flexShrink:0},menuItemTitle:{fontWeight:"500",fontSize:"0.95em"},menuItemSubtitle:{fontSize:"0.78em",opacity:.6,paddingLeft:"42px"},welcomeInfo:{display:"flex",flexDirection:"column",gap:"8px",alignItems:"center",textAlign:"center",maxWidth:"20rem",pointerEvents:"auto"},scrollableContent:{overflowY:"auto"}}),L=({state:r,audio:a,voice:f,buttons:b,backgroundImageUrl:v,welcomeText:x,slogan:k,indexTitle:C,developerMode:w,onEditClick:L,buttonStyles:$={},appName:R})=>{const{selectedApp:V,nickname:U,apps:H,name:q}=r.context,{service:O,error:Q,stateMachine:Y,currentStateName:G,fixAppUrl:K}=r,J=W(),[X,Z]=N("app-buttons_"+V,[]),[ee,te]=n(!1),[oe,ne]=n(!1),[ie,re]=n([]),[ae,se]=n(""),[le,ce]=n(""),[pe,me]=n(""),[de,ue]=n(new Set),{updating:he,welcomeStatusText:ge}=M(Y),{t:fe}=B();i((()=>{void 0!==b?Z(b):V&&O.getAppButtons().then((e=>Z(e))).catch(console.warn)}),[O,Z,V,b]);const je=e=>{e.preventDefault(),e.stopPropagation()},be=!V||"hasAccess"!==G,ve=!V||"hasAccess"!==G,xe=V&&"hasAccess"===G,ke=!V&&"hasAccess"===G&&H.length>1,Ce=!Q&&!V&&!R,we="noAccess"===G&&(1===H.length||!!R),ye=V&&"hasAccess"===G;return e(P,{hideHeader:be,hideFooter:ve,audio:a,voice:f,children:t("div",{className:J.root,style:{backgroundImage:v?`url(${v})`:void 0},children:[w&&L&&"hasAccess"===G&&e("div",{className:J.editButton,children:e(s,{content:fe("Edit settings")||"Edit settings",relationship:"label",children:e(l,{appearance:"subtle",icon:e(j,{}),"aria-label":fe("Edit settings")||"Edit settings",onClick:L,size:"small"})})}),e("div",{className:J.item,children:e("div",{className:J.item,children:t("div",{className:J.buttonsList,children:[ke&&t(o,{children:[e(A,{children:fe("Välkommen, vart vill du gå?")}),H.map(((o,n)=>e("div",{children:e(S,{size:"large",appearance:"primary",onClick:()=>Y.setSelectedApp(o.id),children:t("div",{className:J.buttonContent,children:[o.logo&&e(c,{src:o.logo,height:24}),o.title||o.id]})})},"codicent_button_"+n)))]}),Ce&&t(o,{children:[e(A,{children:fe("Skapa ny?")}),e(I,{size:400,children:fe("Här går du vidare för att skapa din egna privata digitala assistent.")}),e(S,{size:"large",appearance:"primary",onClick:()=>Y.update(),children:fe("Kör!")})]}),we&&e("div",{children:t(z,{children:[e(A,{children:`${fe("Välkommen till")} ${C}`}),!ee&&e(I,{size:400,children:fe("Du är inte medlem än. Skicka begäran för att komma in!")}),!ee&&e(S,{size:"large",appearance:"primary",onClick:async()=>{if(te(!0),!R)return console.error("appName prop not provided."),alert("appName not defined."),void te(!1);await O.requestInvite(U,R)?alert(fe("Begäran skickad! Du får åtkomst när ägaren godkänner.")):(te(!1),alert(fe("Misslyckades att skicka begäran. Försök igen senare.")))},children:fe("Skicka begäran")}),!ee&&t(I,{size:300,children:[fe("Har du redan ett abonnemang? Då kanske har du loggat in med fel konto.")," ",e(y,{to:"/logout",children:fe("Logga ut")})," ",fe("och sedan in igen för att komma igång.")]}),ee&&e(I,{size:400,children:fe("Begäran skickad till ägaren.")}),ee&&e(S,{size:"large",onClick:()=>{window.location.href="./"},children:fe("Kontrollera åtkomst")})]})}),ye&&t("div",{className:J.welcomeInfo,children:[e(I,{weight:"semibold",size:500,align:"center",children:x?x.replace("{{username}}",q||U||""):fe("Välkommen")}),k&&e(I,{weight:"semibold",italic:!0,size:400,align:"center",children:k}),he&&e(D,{}),!he&&ge&&e(I,{size:400,align:"center",children:fe(ge)})]}),xe&&X.map(((o,n)=>{const i="file_drop"===o.type,r="multi_option"===o.type,a=o.options&&Array.isArray(o.options)?o.options:[],s=e=>{const t=e.replace("upload:","").split(":");if(t.length>=4){se(t[0]?.trim()||""),ce(t[1]?.trim()||""),me(t[2]?.trim()||"");const e=t[3]?.trim()||"";re(e?e.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[])}else{se(""),ce(""),me("");const e=t[0]?.trim()||"";re(e?e.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[])}ne(!0)},l=(e,t)=>{if(e.startsWith("voice:")){const t=e.replace("voice:","").trim();t&&f?.updateInstructions(t),f?.connectConversation()}else e.startsWith("upload:")?s(e):e.startsWith("app:")?t(e.replace("app:",K("/app/index.html?token={token}&app={app}&nickname={nickname}")).trim()):t(e)};return e("div",{children:i?e("div",{className:`${J.item} ${de.has(n)?"dragActive":""}`,style:{width:"16rem",minWidth:"15rem",border:`2px dashed ${$.textColor||"#ccc"}`,backgroundColor:de.has(n)?$.activeColor||void 0:$.backgroundColor||void 0,color:$.textColor||void 0,borderRadius:"8px",padding:"1.2rem 1rem",textAlign:"center",cursor:"pointer"},onDragEnter:e=>((e,t)=>{e.preventDefault(),e.stopPropagation(),ue((e=>new Set(e.add(t))))})(e,n),onDragLeave:e=>((e,t)=>{e.preventDefault(),e.stopPropagation(),ue((e=>{const o=new Set(e);return o.delete(t),o}))})(e,n),onDragOver:je,onDrop:e=>(async(e,t,o)=>{e.preventDefault(),e.stopPropagation(),ue((e=>{const t=new Set(e);return t.delete(o),t}));const n=Array.from(e.dataTransfer.files);if(0===n.length)return;let i=[];if(t.url.startsWith("upload:")){const e=t.url.replace("upload:","").split(":"),o=(e.length>=4?e[3]:e[0])?.trim()||"";i=o?o.split(",").map((e=>e.trim())).filter((e=>e.length>0)):[]}for(const e of n)try{const t=new FormData;t.append("file",e);const o=await O.uploadFile(e.name,t);if(!o)continue;const n=i.length>0?i.map((e=>`#${e}`)).join(" "):"#index #summarize";await O.sendMessage(`@${V} ${n}\n\n${e.name}\n#file:${o}\n`)}catch(t){console.error("Error processing file:",e.name,t)}})(e,o,n),onClick:()=>o.url.startsWith("upload:")&&s(o.url),children:t("div",{className:J.buttonContentColumn,children:[t("div",{className:J.buttonContentRow,children:[E(o.icon)||F(o.title),e("span",{children:fe(o.title)})]}),e("div",{className:J.buttonSubtitle,children:de.has(n)?fe("Drop files here..."):fe("Drag files here or click")})]})}):r?t(p,{children:[e(m,{children:e(d,{size:"large",appearance:"primary",style:{width:"16rem",minWidth:"15rem",border:"none",backgroundColor:$.backgroundColor||void 0,color:$.textColor||void 0,padding:"1.2rem 1rem"},children:t("div",{className:J.buttonContentColumn,children:[t("div",{className:J.buttonContentRow,children:[E(o.icon)||F(o.title),e("span",{children:fe(o.title)})]}),o.subtitle&&e("div",{className:J.buttonSubtitle,children:fe(o.subtitle)})]})})}),e(u,{className:J.menuPopover,children:e(h,{children:a.map(((o,i)=>e(_,{service:O,children:n=>e(g,{onClick:()=>l(o.url,n),children:t("div",{children:[t("div",{style:{display:"flex",alignItems:"center",gap:"10px"},children:[E(o.icon)&&e("div",{className:J.menuItemIconBadge,children:E(o.icon)}),e("span",{className:J.menuItemTitle,children:fe(o.title)})]}),o.subtitle&&e("div",{className:J.menuItemSubtitle,children:fe(o.subtitle)})]})})},`option_${n}_${i}`)))})})]}):e(_,{service:O,children:n=>e(S,{size:"large",appearance:"primary",style:{width:"16rem",minWidth:"15rem",border:"none",backgroundColor:$.backgroundColor||void 0,color:$.textColor||void 0,padding:"1.2rem 1rem"},onClick:()=>l(o.url,n),children:t("div",{className:J.buttonContentColumn,children:[t("div",{className:J.buttonContentRow,children:[E(o.icon)||F(o.title),e("span",{children:fe(o.title)})]}),o.subtitle&&e("div",{className:J.buttonSubtitle,children:fe(o.subtitle)})]})})})},"button_"+n)}))]})})}),Q&&e("div",{className:"error",children:Q}),e(T,{project:V||"",hidden:!oe,onDismiss:()=>{ne(!1),se(""),ce(""),me(""),re([])},sendMessage:async e=>{try{return await O.sendMessage(e)}catch{return}},onUploaded:()=>{ne(!1),se(""),ce(""),me(""),re([])},service:O,tags:ie,title:ae,description:le,dropText:pe})]})})};export{L as Home,L as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as t}from"react/jsx-runtime";import{Spinner as e}from"@fluentui/react-components";import{useState as s,useEffect as i}from"react";import{useNavigate as n}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Text as r}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";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"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as m}from"../components/Page.js";import"./QrScan.js";import"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import p from"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const c=({state:c})=>{const a=window.location.hash.match(/^#\/html\/(.+)$/),l=a?decodeURIComponent(a[1]):"",d=n(),[j,h]=s(),[u,g]=s(!1),[f,v]=s(),{service:y}=c;return i((()=>{l&&y?(g(!0),v(void 0),y.getMessagesFast([l],void 0,1).then((o=>{if(0===o.length)return void v(`No messages found with tag: ${l}`);const t=o[0].content;h((o=>{const t=o.indexOf("```html");if(-1!==t){const e=o.indexOf("```",t+7);return-1===e?o.substring(t+7):o.substring(t+7,e)}const e=[/<!DOCTYPE[^>]*>[\s\S]*?<\/html>/i,/<html[^>]*>[\s\S]*?<\/html>/i,/<div[^>]*>[\s\S]*?<\/div>/i,/<body[^>]*>[\s\S]*?<\/body>/i,/<article[^>]*>[\s\S]*?<\/article>/i,/<section[^>]*>[\s\S]*?<\/section>/i];for(const t of e){const e=o.match(t);if(e)return e[0]}if(o.includes("<html")||o.includes("<!DOCTYPE")||o.includes("<div")||o.includes("<p>")||o.includes("<span")){const t=["<!DOCTYPE","<html","<div","<body","<article","<section"];let e=-1;for(const s of t){const t=o.indexOf(s);-1!==t&&(-1===e||t<e)&&(e=t)}if(-1!==e){let t=o.substring(e);const s=["</html>","</body>","</div>"];for(const o of s){const e=t.lastIndexOf(o);if(-1!==e){t=t.substring(0,e+o.length);break}}return t}return o}return o})(t))})).catch((o=>{console.error("Error fetching message:",o),v(`Error fetching message: ${o.message||"Unknown error"}`)})).finally((()=>{g(!1)}))):v("No tag provided or service unavailable")}),[l,y]),u?o(m,{hideHeader:!0,hideFooter:!0,children:o("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:o(e,{})})}):f?o(m,{hideHeader:!0,hideFooter:!0,children:t("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",flexDirection:"column",gap:"20px"},children:[o(r,{children:f}),t(r,{children:["Tag: ",l]})]})}):j?o("div",{style:{height:"100%",display:"flex",flexDirection:"column",overflow:"hidden"},children:o(p,{html:j,onDismiss:()=>d(-1)})}):o(m,{hideHeader:!0,hideFooter:!0,children:o("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:o(r,{children:"No HTML content available"})})})};export{c as default};
1
+ import{jsx as o,jsxs as t}from"react/jsx-runtime";import{Spinner as e}from"@fluentui/react-components";import{useState as i,useEffect as s}from"react";import{useNavigate as n}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{Text as r}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";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"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as m}from"../components/Page.js";import"./QrScan.js";import"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import p from"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";const a=({state:a})=>{const c=window.location.hash.match(/^#\/html\/(.+)$/),l=c?decodeURIComponent(c[1]):"",d=n(),[u,j]=i(),[h,g]=i(!1),[f,v]=i(),{service:y}=a;return s((()=>{l&&y?(g(!0),v(void 0),y.getMessagesFast([l],void 0,1).then((o=>{if(0===o.length)return void v(`No messages found with tag: ${l}`);const t=o[0].content;j((o=>{const t=o.indexOf("```html");if(-1!==t){const e=o.indexOf("```",t+7);return-1===e?o.substring(t+7):o.substring(t+7,e)}const e=[/<!DOCTYPE[^>]*>[\s\S]*?<\/html>/i,/<html[^>]*>[\s\S]*?<\/html>/i,/<div[^>]*>[\s\S]*?<\/div>/i,/<body[^>]*>[\s\S]*?<\/body>/i,/<article[^>]*>[\s\S]*?<\/article>/i,/<section[^>]*>[\s\S]*?<\/section>/i];for(const t of e){const e=o.match(t);if(e)return e[0]}if(o.includes("<html")||o.includes("<!DOCTYPE")||o.includes("<div")||o.includes("<p>")||o.includes("<span")){const t=["<!DOCTYPE","<html","<div","<body","<article","<section"];let e=-1;for(const i of t){const t=o.indexOf(i);-1!==t&&(-1===e||t<e)&&(e=t)}if(-1!==e){let t=o.substring(e);const i=["</html>","</body>","</div>"];for(const o of i){const e=t.lastIndexOf(o);if(-1!==e){t=t.substring(0,e+o.length);break}}return t}return o}return o})(t))})).catch((o=>{console.error("Error fetching message:",o),v(`Error fetching message: ${o.message||"Unknown error"}`)})).finally((()=>{g(!1)}))):v("No tag provided or service unavailable")}),[l,y]),h?o(m,{hideHeader:!0,hideFooter:!0,children:o("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:o(e,{})})}):f?o(m,{hideHeader:!0,hideFooter:!0,children:t("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",flexDirection:"column",gap:"20px"},children:[o(r,{children:f}),t(r,{children:["Tag: ",l]})]})}):u?o("div",{style:{height:"100%",display:"flex",flexDirection:"column",overflow:"hidden"},children:o(p,{html:u,onDismiss:()=>d(-1)})}):o(m,{hideHeader:!0,hideFooter:!0,children:o("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:o(r,{children:"No HTML content available"})})})};export{a as default};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import{useState as o,useRef as n,useMemo as r,useEffect as a,useCallback as i}from"react";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{makeStyles as s,Button as c,Dialog as l,DialogSurface as m,DialogBody as d,DialogTitle as p,DialogContent as u,DialogActions as g}from"@fluentui/react-components";import"../components/Spinner.js";import f from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import{ArrowLeft24Regular as h,ArrowClockwise24Regular as j,ArrowDownload24Regular as x,Add24Regular as w}from"@fluentui/react-icons";import"../services/codicent.js";import{dataCache as y}from"../services/dataCache.js";import C from"../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{exportToExcel as S}from"../utils/excelExport.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import{useSearchParams as v,useNavigate as b}from"react-router-dom";import"./Purchase.js";import"../components/Content.js";import{Page as k}from"../components/Page.js";import"./QrScan.js";import A from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import{useUserRoles as M}from"../hooks/useUserRoles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import D from"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import I from"../components/ListView.js";import{RecordModal as T}from"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import{l as $}from"../node_modules/lodash/lodash.js";const _=s({container:{width:"100%",flex:1,maxWidth:"100%",height:"100%",minHeight:0,backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},touchAction:"pan-y",paddingLeft:"0",paddingRight:"0"},listContainer:{overflow:"hidden",flex:1,minHeight:0,marginTop:"10px"},headerRow:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:"10px",flexWrap:"wrap"},buttonGroup:{display:"flex",gap:"8px",flexWrap:"wrap"},addButton:{minWidth:"auto",whiteSpace:"nowrap"},recordsCount:{fontSize:"14px",color:"#666",marginTop:"8px"},backButton:{marginBottom:"10px"},searchBox:{marginTop:"8px"},loadMoreContainer:{display:"flex",justifyContent:"center",padding:"16px 0",borderTop:"1px solid #e0e0e0",marginTop:"4px"}}),N=500,E=({state:s,getColumnDefs:E,filterData:P})=>{const[R,B]=v(),L=R.get("tag")||"logbook",F=R.get("title")||"",O=R.get("contentTitle"),H="true"===R.get("loadAll"),U="true"===R.get("canAdd"),W="true"===R.get("canEdit"),q="false"!==R.get("canExport"),V=R.get("addUrl")||"",z=R.get("q")||"",[J,Q]=o(z),[G,K]=o(z),{service:X}=s,[Y,Z]=o([]),[ee,te]=o(!1),[oe,ne]=o(!1),[re,ae]=o(!1),ie=n(null),se=n(z),ce=n(""),le=n(!0),[me,de]=o(0),[pe,ue]=o(null),ge=_(),{t:fe}=A(),he=b(),{getCurrentUserName:je}=M(X,s.context.nickname),xe=r((()=>(O?[{key:O,title:O,maxWidth:250}]:E?E(L):[]).map((e=>({...e,title:e.title?fe(e.title):void 0})))),[O,L,fe,E]),[we,ye]=o(!1),[Ce,Se]=o(null),[ve,be]=o(!1),[ke,Ae]=o(null),Me=r((()=>`listpage_searches_${L}`),[L]),De=e=>{try{const t=localStorage.getItem(e);return t?JSON.parse(t):[]}catch{return[]}},[Ie,Te]=o((()=>De(Me)));a((()=>{Te(De(Me))}),[Me]);const $e=i((e=>{const t=e.trim();t&&Te((e=>{const o=[t,...e.filter((e=>e!==t))].slice(0,20);try{localStorage.setItem(Me,JSON.stringify(o))}catch{}return o}))}),[Me]),_e=i((e=>{Te((t=>{const o=t.filter((t=>t!==e));try{localStorage.setItem(Me,JSON.stringify(o))}catch{}return o}))}),[Me]),Ne=r((()=>$.debounce((e=>K(e)),500)),[K]);a((()=>()=>{Ne.cancel()}),[Ne]);const Ee=i((e=>{Q(e),Ne(e)}),[Ne]),Pe=i((e=>{$e(e)}),[$e]);a((()=>{if(!R.get("q")){const e=R.get(`filter_${L}`);if(e){let t=e;if("%USERNAME%"===t){const e=je();if(!e)return;t=e}Q(t),K(t),se.current=t}}}),[L,R,je]),a((()=>{const e=R.get("q")||"";e!==se.current&&(Q(e),K(e),se.current=e,ce.current="")}),[R]),a((()=>(ie.current&&clearTimeout(ie.current),ie.current=setTimeout((()=>{if(se.current!==J){const e={title:F,tag:L};O&&(e.contentTitle=O),J&&(e.q=J),H&&(e.loadAll="true"),B(e,{replace:!0}),se.current=J}}),500),()=>{ie.current&&clearTimeout(ie.current)})),[J,L,F,O,H,B]),a((()=>{le.current=!0;const e=`${L}-${O}-${H}-${me}-${G}`;if(e===ce.current)return;ce.current=e;const t=O?`${L}-${G}-${O}`:`${L}-${G||"all"}`,o=y.get(t);if(!o){if(ne(!1),te(!0),O)X.getMessagesFast([L],G).then((e=>{if(!le.current)return void te(!1);const o=e.map((e=>{const t=new Date(e.createdAt).toLocaleString();return{id:e.id,data:{[O]:new C(e.content).content,createdAt:t},fileId:null,fileIds:[],tags:[L],mentions:[X.codicent],createdAt:t}}));y.set(t,o),le.current&&Z(o)})).catch(console.warn).finally((()=>te(!1)));else{const e=G||"",o=H||e?void 0:N;X.readDataMessages(L,e,void 0,0,o).then((o=>{y.set(t,o),le.current?(Z(o),ne(!H&&!e&&o.length===N)):te(!1)})).catch(console.warn).finally((()=>te(!1)))}return()=>{le.current=!1}}if(Z(o),ne(!H&&!O&&o.length>=N),!O&&!G&&o.length>0){const e=o.reduce(((e,t)=>t.createdAt>e?t.createdAt:e),o[0].createdAt);X.readDataMessages(L,"",void 0,void 0,void 0,e).then((e=>{le.current&&Z((o=>{const n=new Set(o.map((e=>e.id))),r=e.filter((e=>!n.has(e.id)));if(0===r.length)return o;const a=[...r,...o];return y.set(t,a),a}))})).catch(console.warn)}}),[X,L,O,H,G,me]);const Re=r((()=>{const e={};R.forEach(((t,o)=>{o.startsWith("filter_")&&(e[o.replace("filter_","")]=t)}));let t=Y.map(((e,t)=>({item:e,index:t})));for(const[o,n]of Object.entries(e)){const e=n.replace("%USERNAME%",je()),r=s.context.nickname||"";t=t.filter((({item:t})=>{const n=t.data[o];return null!=n&&(String(n).includes(e)||String(n).includes(r))}))}if(P){const e=P(t.map((({item:e})=>e)),L),o=new Set(e.map((e=>e.id)));t=t.filter((({item:e})=>o.has(e.id)))}return t.map((({item:e,index:t})=>({...e.data,createdAt:e.createdAt,_id:e.id,originalMessageId:e.originalMessageId||e.id,_index:t})))}),[Y,R,s.context.nickname,je,P,L]),Be=r((()=>{const e=(J||"").trim().toLowerCase();if(!e)return Re;const t=xe.filter((e=>!e.hidden)).map((e=>e.key));return Re.filter((o=>{for(const n of t)if(Array.isArray(n))for(const t of n){const n=o[t];if(null!=n&&String(n).toLowerCase().includes(e))return!0}else{const t=o[n];if(null!=t&&String(t).toLowerCase().includes(e))return!0}return!1}))}),[Re,J,xe]),Le=i((()=>{y.clearPattern(L),ce.current="",de((e=>e+1))}),[L]),Fe=i((async()=>{ae(!0);try{const e=await X.readDataMessages(L,"",void 0,Y.length,N),t=[...Y,...e];Z(t),y.set(`${L}-all`,t),ne(e.length===N)}catch(e){console.warn(e)}finally{ae(!1)}}),[Y,X,L]),Oe=i((e=>{ue(e)}),[]),He=()=>{be(!1),Ae(null)},Ue=i((async()=>{const e=`${L}_${(new Date).toISOString().split("T")[0]}`.replace(/[/\\:*?"<>|]/g,"_");const t=null!==pe?pe:Be;await S(t,xe,e,fe)||console.warn("No data to export")}),[pe,Be,xe,L,fe]),We=r((()=>null!==pe?pe.length:Be.length),[pe,Be]);return e(k,{hideHeader:!0,children:t("div",{className:ge.container,children:[e("div",{className:ge.backButton,children:e(c,{appearance:"subtle",icon:e(h,{}),onClick:()=>he(-1),children:fe("Tillbaka")})}),t("div",{className:ge.headerRow,children:[e(f,{title:fe(F||"Loggbok")}),t("div",{className:ge.buttonGroup,children:[e(c,{appearance:"subtle",icon:e(j,{}),onClick:Le,title:fe("Refresh"),children:fe("Refresh")}),q&&e(c,{appearance:"subtle",icon:e(x,{}),onClick:Ue,title:fe("Export to Excel"),children:fe("Export to Excel")}),(U||V)&&e(c,{appearance:"primary",icon:e(w,{}),onClick:U?()=>{Se(null),ye(!0)}:()=>window.open(V,"_blank"),className:ge.addButton,children:fe("Add Record")})]})]}),e("div",{className:ge.searchBox,children:e(D,{placeholder:fe("Sök")+"...",value:J,onChange:Ee,recentSearches:Ie,onCommitSearch:Pe,onRemoveRecentSearch:_e})}),!ee&&t("div",{className:ge.recordsCount,children:[fe("Total"),": ",We," ",fe("records"),We!==Y.length&&` (${fe("filtered from")} ${Y.length})`]}),t("div",{className:ge.listContainer,children:[ee&&e("p",{children:fe("Söker")+"..."}),!ee&&e(I,{data:Be,columns:xe,canEdit:W,onEdit:(e,t)=>{const o=Y[t];o&&(Se({data:{...o.data},index:t}),ye(!0))},onDelete:(e,t)=>{const o=Y[t];o&&(Ae({index:t,id:o.id}),be(!0))},onToggleCheckbox:async(e,t,o,n)=>{const r=Y[n];if(r){const e=Array.isArray(t)?t[0]:t,a={...r.data,[e]:String(o)},i=await X.updateDataMessage(r.id,a);Z((e=>{const t=[...e];return t[n]={...r,id:i,data:a},t})),y.clearPattern(L)}},onEnumChange:async(e,t,o,n)=>{const r=Y[n];if(r){const e=Array.isArray(t)?t[0]:t,a={...r.data,[e]:o},i=await X.updateDataMessage(r.id,a);Z((e=>{const t=[...e];return t[n]={...r,id:i,data:a},t})),y.clearPattern(L)}},onFilteredDataChange:Oe})]}),oe&&!J.trim()&&e("div",{className:ge.loadMoreContainer,children:e(c,{appearance:"primary",size:"medium",onClick:Fe,disabled:re,children:re?fe("Laddar..."):fe("Visa fler")+` (${Y.length} ${fe("laddade")})`})}),e(T,{open:we,onClose:()=>ye(!1),onSave:async e=>{if(Ce){const t=Y[Ce.index];if(t){const o={};for(const t in e){const n=e[t];o[t]=null==n?"":String(n)}const n=await X.updateDataMessage(t.id,o);Z((e=>{const r=[...e];return r[Ce.index]={...t,id:n,data:o},r})),y.clearPattern(L)}}else{const t={};for(const o in e){const n=e[o];t[o]=null==n?"":String(n)}const o={id:await X.createDataMessage(L,t),data:t,createdAt:(new Date).toISOString(),fileId:null,fileIds:[],tags:[L],mentions:[X.codicent]};Z((e=>[o,...e])),y.clearPattern(L)}},columns:xe,initialData:Ce?.data}),e(l,{open:ve,onOpenChange:(e,t)=>!t.open&&He(),children:e(m,{children:t(d,{children:[e(p,{children:fe("Confirm Delete")}),e(u,{children:fe("Are you sure you want to delete this record? This action cannot be undone.")}),t(g,{children:[e(c,{appearance:"secondary",onClick:He,children:fe("Cancel")}),e(c,{appearance:"primary",onClick:async()=>{if(ke)try{await X.deleteDataMessage(ke.id),Z((e=>e.filter(((e,t)=>t!==ke.index)))),y.clearPattern(L)}catch(e){console.error("Failed to delete record:",e)}finally{be(!1),Ae(null)}},children:fe("Delete")})]})]})})})]})})};export{E as ListPage,E as default};
1
+ import{jsx as t,jsxs as e}from"react/jsx-runtime";import{useState as o,useRef as n,useMemo as r,useEffect as i,useCallback as a}from"react";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import{makeStyles as s,Button as c,Dialog as l,DialogSurface as m,DialogBody as p,DialogTitle as d,DialogContent as u,DialogActions as g}from"@fluentui/react-components";import"../components/Spinner.js";import h from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import{ArrowLeft24Regular as f,ArrowClockwise24Regular as j,ArrowDownload24Regular as x,Add24Regular as w}from"@fluentui/react-icons";import"../services/codicent.js";import{dataCache as C}from"../services/dataCache.js";import y from"../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{exportToExcel as A}from"../utils/excelExport.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import{useSearchParams as S,useNavigate as v}from"react-router-dom";import"./Purchase.js";import"../components/Content.js";import{Page as k}from"../components/Page.js";import"./QrScan.js";import b from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import{useUserRoles as D}from"../hooks/useUserRoles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import M from"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import I from"../components/ListView.js";import{RecordModal as T}from"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";import{l as $}from"../node_modules/lodash/lodash.js";const _=s({container:{width:"100%",flex:1,maxWidth:"100%",height:"100%",minHeight:0,backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},touchAction:"pan-y",paddingLeft:"0",paddingRight:"0"},listContainer:{overflow:"hidden",flex:1,minHeight:0,marginTop:"10px"},headerRow:{display:"flex",justifyContent:"space-between",alignItems:"center",gap:"10px",flexWrap:"wrap"},buttonGroup:{display:"flex",gap:"8px",flexWrap:"wrap"},addButton:{minWidth:"auto",whiteSpace:"nowrap"},recordsCount:{fontSize:"14px",color:"#666",marginTop:"8px"},backButton:{marginBottom:"10px"},searchBox:{marginTop:"8px"},loadMoreContainer:{display:"flex",justifyContent:"center",padding:"16px 0",borderTop:"1px solid #e0e0e0",marginTop:"4px"}}),P=500,E=({state:s,getColumnDefs:E,filterData:B})=>{const[N,R]=S(),F=N.get("tag")||"logbook",L=N.get("title")||"",U=N.get("contentTitle"),H="true"===N.get("loadAll"),O="true"===N.get("canAdd"),W="true"===N.get("canEdit"),q="false"!==N.get("canExport"),z=N.get("addUrl")||"",V=N.get("q")||"",[G,J]=o(V),[Q,K]=o(V),{service:X}=s,[Y,Z]=o([]),[tt,et]=o(!1),[ot,nt]=o(!1),[rt,it]=o(!1),at=n(null),st=n(V),ct=n(""),lt=n(!0),[mt,pt]=o(0),[dt,ut]=o(null),gt=_(),{t:ht}=b(),ft=v(),{getCurrentUserName:jt}=D(X,s.context.nickname,s.context.selectedApp),xt=r((()=>(U?[{key:U,title:U,maxWidth:250}]:E?E(F):[]).map((t=>({...t,title:t.title?ht(t.title):void 0})))),[U,F,ht,E]),[wt,Ct]=o(!1),[yt,At]=o(null),[St,vt]=o(!1),[kt,bt]=o(null),Dt=r((()=>`listpage_searches_${F}`),[F]),Mt=t=>{try{const e=localStorage.getItem(t);return e?JSON.parse(e):[]}catch{return[]}},[It,Tt]=o((()=>Mt(Dt)));i((()=>{Tt(Mt(Dt))}),[Dt]);const $t=a((t=>{const e=t.trim();e&&Tt((t=>{const o=[e,...t.filter((t=>t!==e))].slice(0,20);try{localStorage.setItem(Dt,JSON.stringify(o))}catch{}return o}))}),[Dt]),_t=a((t=>{Tt((e=>{const o=e.filter((e=>e!==t));try{localStorage.setItem(Dt,JSON.stringify(o))}catch{}return o}))}),[Dt]),Pt=r((()=>$.debounce((t=>K(t)),500)),[K]);i((()=>()=>{Pt.cancel()}),[Pt]);const Et=a((t=>{J(t),Pt(t)}),[Pt]),Bt=a((t=>{$t(t)}),[$t]);i((()=>{if(!N.get("q")){const t=N.get(`filter_${F}`);if(t){let e=t;if("%USERNAME%"===e){const t=jt();if(!t)return;e=t}J(e),K(e),st.current=e}}}),[F,N,jt]),i((()=>{const t=N.get("q")||"";t!==st.current&&(J(t),K(t),st.current=t,ct.current="")}),[N]),i((()=>(at.current&&clearTimeout(at.current),at.current=setTimeout((()=>{if(st.current!==G){const t={title:L,tag:F};U&&(t.contentTitle=U),G&&(t.q=G),H&&(t.loadAll="true"),R(t,{replace:!0}),st.current=G}}),500),()=>{at.current&&clearTimeout(at.current)})),[G,F,L,U,H,R]),i((()=>{lt.current=!0;const t=`${F}-${U}-${H}-${mt}-${Q}`;if(t===ct.current)return;ct.current=t;const e=U?`${F}-${Q}-${U}`:`${F}-${Q||"all"}`,o=C.get(e);if(!o){if(nt(!1),et(!0),U)X.getMessagesFast([F],Q).then((t=>{if(!lt.current)return void et(!1);const o=t.map((t=>{const e=new Date(t.createdAt).toLocaleString();return{id:t.id,data:{[U]:new y(t.content).content,createdAt:e},fileId:null,fileIds:[],tags:[F],mentions:[X.codicent],createdAt:e}}));C.set(e,o),lt.current&&Z(o)})).catch(console.warn).finally((()=>et(!1)));else{const t=Q||"",o=H||t?void 0:P;X.readDataMessages(F,t,void 0,0,o).then((o=>{C.set(e,o),lt.current?(Z(o),nt(!H&&!t&&o.length===P)):et(!1)})).catch(console.warn).finally((()=>et(!1)))}return()=>{lt.current=!1}}if(Z(o),nt(!H&&!U&&o.length>=P),!U&&!Q&&o.length>0){const t=o.reduce(((t,e)=>e.createdAt>t?e.createdAt:t),o[0].createdAt);X.readDataMessages(F,"",void 0,void 0,void 0,t).then((t=>{lt.current&&Z((o=>{const n=new Set(o.map((t=>t.id))),r=t.filter((t=>!n.has(t.id)));if(0===r.length)return o;const i=[...r,...o];return C.set(e,i),i}))})).catch(console.warn)}}),[X,F,U,H,Q,mt]);const Nt=r((()=>{const t={};N.forEach(((e,o)=>{o.startsWith("filter_")&&(t[o.replace("filter_","")]=e)}));let e=Y.map(((t,e)=>({item:t,index:e})));for(const[o,n]of Object.entries(t)){const t=n.replace("%USERNAME%",jt()),r=s.context.nickname||"";e=e.filter((({item:e})=>{const n=e.data[o];return null!=n&&(String(n).includes(t)||String(n).includes(r))}))}if(B){const t=B(e.map((({item:t})=>t)),F),o=new Set(t.map((t=>t.id)));e=e.filter((({item:t})=>o.has(t.id)))}return e.map((({item:t,index:e})=>({...t.data,createdAt:t.createdAt,_id:t.id,originalMessageId:t.originalMessageId||t.id,_index:e})))}),[Y,N,s.context.nickname,jt,B,F]),Rt=r((()=>{const t=(G||"").trim().toLowerCase();if(!t)return Nt;const e=xt.filter((t=>!t.hidden)).map((t=>t.key));return Nt.filter((o=>{for(const n of e)if(Array.isArray(n))for(const e of n){const n=o[e];if(null!=n&&String(n).toLowerCase().includes(t))return!0}else{const e=o[n];if(null!=e&&String(e).toLowerCase().includes(t))return!0}return!1}))}),[Nt,G,xt]),Ft=a((()=>{C.clearPattern(F),ct.current="",pt((t=>t+1))}),[F]),Lt=a((async()=>{it(!0);try{const t=await X.readDataMessages(F,"",void 0,Y.length,P),e=[...Y,...t];Z(e),C.set(`${F}-all`,e),nt(t.length===P)}catch(t){console.warn(t)}finally{it(!1)}}),[Y,X,F]),Ut=a((t=>{ut(t)}),[]),Ht=()=>{vt(!1),bt(null)},Ot=a((async()=>{const t=`${F}_${(new Date).toISOString().split("T")[0]}`.replace(/[/\\:*?"<>|]/g,"_");const e=null!==dt?dt:Rt;await A(e,xt,t,ht)||console.warn("No data to export")}),[dt,Rt,xt,F,ht]),Wt=r((()=>null!==dt?dt.length:Rt.length),[dt,Rt]);return t(k,{hideHeader:!0,children:e("div",{className:gt.container,children:[t("div",{className:gt.backButton,children:t(c,{appearance:"subtle",icon:t(f,{}),onClick:()=>ft(-1),children:ht("Tillbaka")})}),e("div",{className:gt.headerRow,children:[t(h,{title:ht(L||"Loggbok")}),e("div",{className:gt.buttonGroup,children:[t(c,{appearance:"subtle",icon:t(j,{}),onClick:Ft,title:ht("Refresh"),children:ht("Refresh")}),q&&t(c,{appearance:"subtle",icon:t(x,{}),onClick:Ot,title:ht("Export to Excel"),children:ht("Export to Excel")}),(O||z)&&t(c,{appearance:"primary",icon:t(w,{}),onClick:O?()=>{At(null),Ct(!0)}:()=>window.open(z,"_blank"),className:gt.addButton,children:ht("Add Record")})]})]}),t("div",{className:gt.searchBox,children:t(M,{placeholder:ht("Sök")+"...",value:G,onChange:Et,recentSearches:It,onCommitSearch:Bt,onRemoveRecentSearch:_t})}),!tt&&e("div",{className:gt.recordsCount,children:[ht("Total"),": ",Wt," ",ht("records"),Wt!==Y.length&&` (${ht("filtered from")} ${Y.length})`]}),e("div",{className:gt.listContainer,children:[tt&&t("p",{children:ht("Söker")+"..."}),!tt&&t(I,{data:Rt,columns:xt,canEdit:W,onEdit:(t,e)=>{const o=Y[e];o&&(At({data:{...o.data},index:e}),Ct(!0))},onDelete:(t,e)=>{const o=Y[e];o&&(bt({index:e,id:o.id}),vt(!0))},onToggleCheckbox:async(t,e,o,n)=>{const r=Y[n];if(r){const t=Array.isArray(e)?e[0]:e,i={...r.data,[t]:String(o)},a=await X.updateDataMessage(r.id,i);Z((t=>{const e=[...t];return e[n]={...r,id:a,data:i},e})),C.clearPattern(F)}},onEnumChange:async(t,e,o,n)=>{const r=Y[n];if(r){const t=Array.isArray(e)?e[0]:e,i={...r.data,[t]:o},a=await X.updateDataMessage(r.id,i);Z((t=>{const e=[...t];return e[n]={...r,id:a,data:i},e})),C.clearPattern(F)}},onFilteredDataChange:Ut})]}),ot&&!G.trim()&&t("div",{className:gt.loadMoreContainer,children:t(c,{appearance:"primary",size:"medium",onClick:Lt,disabled:rt,children:rt?ht("Laddar..."):ht("Visa fler")+` (${Y.length} ${ht("laddade")})`})}),t(T,{open:wt,onClose:()=>Ct(!1),onSave:async t=>{if(yt){const e=Y[yt.index];if(e){const o={};for(const e in t){const n=t[e];o[e]=null==n?"":String(n)}const n=await X.updateDataMessage(e.id,o);Z((t=>{const r=[...t];return r[yt.index]={...e,id:n,data:o},r})),C.clearPattern(F)}}else{const e={};for(const o in t){const n=t[o];e[o]=null==n?"":String(n)}const o={id:await X.createDataMessage(F,e),data:e,createdAt:(new Date).toISOString(),fileId:null,fileIds:[],tags:[F],mentions:[X.codicent]};Z((t=>[o,...t])),C.clearPattern(F)}},columns:xt,initialData:yt?.data}),t(l,{open:St,onOpenChange:(t,e)=>!e.open&&Ht(),children:t(m,{children:e(p,{children:[t(d,{children:ht("Confirm Delete")}),t(u,{children:ht("Are you sure you want to delete this record? This action cannot be undone.")}),e(g,{children:[t(c,{appearance:"secondary",onClick:Ht,children:ht("Cancel")}),t(c,{appearance:"primary",onClick:async()=>{if(kt)try{await X.deleteDataMessage(kt.id),Z((t=>t.filter(((t,e)=>e!==kt.index)))),C.clearPattern(F)}catch(t){console.error("Failed to delete record:",t)}finally{vt(!1),bt(null)}},children:ht("Delete")})]})]})})})]})})};export{E as ListPage,E as default};
@@ -1 +1 @@
1
- import{jsxs as o,jsx as t,Fragment as e}from"react/jsx-runtime";import i,{useState as n}from"react";import{makeStyles as r,Image as s,Input as m,mergeClasses as a}from"@fluentui/react-components";import"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as c}from"../components/Title.js";import{Text as l}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as j}from"../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"../components/FileThumbnail.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import g from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"react-router-dom";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import d from"../hooks/useAppStyles.js";const u=r({container:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",backgroundPosition:"calc(50% - 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",gap:"20px",padding:"0 20px"},button:{minWidth:"15rem"},input:{minWidth:"15rem",marginBottom:"10px"},image:{maxHeight:"200px"}}),h=({state:r})=>{const{loginWithRedirect:h,loginPasswordless:_}=r.auth,I=u(),f=d(),{t:E}=g(),[L,b]=n(""),[k,C]=n(!1),N=j("LOGIN_REDIRECT"),O=j("AUTH0_PASSWORDLESS_ENABLED");i.useEffect((()=>{N&&h()}),[N]);return o("div",N?{className:I.container,style:{backgroundImage:`url(${j("HOME_BACKGROUND_IMAGE_URL")})`},children:[t(c,{children:`${E("Välkommen till")} ${j("INDEX_TITLE")}!`}),t(l,{size:400,children:E("Omdirigerar till inloggning...")})]}:{className:I.container,style:{backgroundImage:`url(${j("HOME_BACKGROUND_IMAGE_URL")})`},children:[j("LOGIN_LOGO_URL")&&t(s,{src:j("LOGIN_LOGO_URL"),alt:j("INDEX_TITLE"),className:I.image}),!j("LOGIN_HIDE_WELCOME")&&t(c,{children:`${E("Välkommen till")} ${j("INDEX_TITLE")}!`}),t(l,{size:400,children:E(j("LOGIN_WELCOME_TEXT")||"Logga in, eller registrera ett konto, för att komma igång.")}),o(e,O?{children:[t(m,{className:I.input,type:"email",placeholder:E("Ange din e-postadress"),value:L,onChange:o=>b(o.target.value),disabled:k}),t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:async()=>{if(L.trim()){C(!0);try{await _(L)}catch(o){console.error("Passwordless login failed:",o)}finally{C(!1)}}},disabled:!L.trim()||k,children:E(k?"Skickar...":"Skicka inloggningslänk")})]}:{children:[t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:()=>h(),children:E("Logga in")}),!j("HIDE_REGISTER_BUTTON")&&t(p,{className:a(f.button,I.button),size:"large",appearance:"primary",onClick:()=>h({authorizationParams:{screen_hint:"signup"}}),children:E("Registrera")})]})]})};export{h as default};
1
+ import{jsxs as o,jsx as t,Fragment as i}from"react/jsx-runtime";import e,{useState as r}from"react";import{makeStyles as s,Image as n,Input as m,mergeClasses as a}from"@fluentui/react-components";import"../services/codicent.js";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as c}from"../components/Title.js";import{Text as l}from"../components/Text.js";import"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as d}from"../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"../components/FileThumbnail.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/Content.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/Page.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import u from"../hooks/useLocalization.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"react-router-dom";import"./Purchase.js";import"./QrScan.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import j from"../hooks/useAppStyles.js";const g=s({container:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",backgroundPosition:"calc(50% - 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",gap:"20px",padding:"0 20px"},button:{minWidth:"15rem"},input:{minWidth:"15rem",marginBottom:"10px"},image:{maxHeight:"200px"}}),h=({state:s})=>{const{loginWithRedirect:h,loginPasswordless:_}=s.auth,A=g(),I=j(),{t:E}=u(),[k,C]=r(""),[b,f]=r(!1),L=d("LOGIN_REDIRECT"),D=d("AUTH0_PASSWORDLESS_ENABLED");e.useEffect((()=>{L&&h()}),[L]);return o("div",L?{className:A.container,style:{backgroundImage:`url(${d("HOME_BACKGROUND_IMAGE_URL")})`},children:[t(c,{children:`${E("Välkommen till")} ${d("INDEX_TITLE")}!`}),t(l,{size:400,children:E("Omdirigerar till inloggning...")})]}:{className:A.container,style:{backgroundImage:`url(${d("HOME_BACKGROUND_IMAGE_URL")})`},children:[d("LOGIN_LOGO_URL")&&t(n,{src:d("LOGIN_LOGO_URL"),alt:d("INDEX_TITLE"),className:A.image}),!d("LOGIN_HIDE_WELCOME")&&t(c,{children:`${E("Välkommen till")} ${d("INDEX_TITLE")}!`}),t(l,{size:400,children:E(d("LOGIN_WELCOME_TEXT")||"Logga in, eller registrera ett konto, för att komma igång.")}),o(i,D?{children:[t(m,{className:A.input,type:"email",placeholder:E("Ange din e-postadress"),value:k,onChange:o=>C(o.target.value),disabled:b}),t(p,{className:a(I.button,A.button),size:"large",appearance:"primary",onClick:async()=>{if(k.trim()){f(!0);try{await _(k)}catch(o){console.error("Passwordless login failed:",o)}finally{f(!1)}}},disabled:!k.trim()||b,children:E(b?"Skickar...":"Skicka inloggningslänk")})]}:{children:[t(p,{className:a(I.button,A.button),size:"large",appearance:"primary",onClick:()=>h(),children:E("Logga in")}),!d("HIDE_REGISTER_BUTTON")&&t(p,{className:a(I.button,A.button),size:"large",appearance:"primary",onClick:()=>h({authorizationParams:{screen_hint:"signup"}}),children:E("Registrera")})]})]})};export{h as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as t,Fragment as e}from"react/jsx-runtime";import{makeStyles as i,Image as n}from"@fluentui/react-components";import{useNavigate as r}from"react-router-dom";import s from"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import a from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"react";import"@fluentui/react-icons";import"../services/codicent.js";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"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as m}from"../components/Page.js";import"./QrScan.js";import c from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import l from"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import d from"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import{LanguageSelector as j}from"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const u=i({container:{backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%",touchAction:"pan-y",margin:"0 auto",maxWidth:"800px"},menu_items:{overflowY:"auto",height:"calc(100vh - 130px)",paddingLeft:"10px",paddingRight:"10px"},divider:{fontSize:"20px",fontWeight:"bold",marginTop:"32px",marginBottom:"20px"},appButton:{margin:"2px"}}),g=({state:i,title:g,aboutText:h,version:f,backgroundImageUrl:v,showHelpButton:b,showLogbookButton:x,stripeCustomerPortal:C,showAppSelector:k=!0})=>{const w=r(),S=l(),B=u(),{auth:P}=i,{t:M}=c(),y=h?h.replace("{{version}}",(()=>{const o=new Date,t=o.toISOString().split("T")[0],e=o.getHours().toString().padStart(2,"0");return f||`v${t}.${e}`})()):void 0;return o(m,{hideHeader:!0,children:t("div",{className:B.container,style:{backgroundImage:v?`url(${v})`:void 0},children:[o(a,{title:g||M("Meny")}),t("div",{className:B.menu_items,children:[o(d,{state:i}),o(j,{}),o("hr",{}),o(p,{icon:"ChevronRightFilled",size:"large",className:S.menuButton,onClick:()=>{P.logout(),i.stateMachine.logout()},iconPosition:"after",appearance:"transparent",children:M("Logga ut")}),C&&o(p,{icon:"Payment24Regular",size:"large",className:S.menuButton,onClick:()=>window.location.href=C,iconPosition:"after",appearance:"transparent",children:M("Abonnemang")}),k&&i.context.apps&&i.context.apps.length>1&&t(e,{children:[o("h3",{children:M("Mina codicents")}),i.context.apps.map((t=>o(p,{className:B.appButton,image:t.logo?o(n,{src:t.logo,height:"24px"}):void 0,onClick:()=>i.stateMachine.setSelectedApp(t.id),title:t.title||t.id,children:t.title||t.id},t.id)))]}),x&&t(e,{children:[o("hr",{}),o(p,{className:S.menuButton,icon:"ChevronRightFilled",size:"large",appearance:"subtle",iconPosition:"after",onClick:()=>w("/log"),children:M("Loggboken")})]}),o("hr",{}),y&&o(s,{content:y}),b&&t(e,{children:[o("h3",{children:M("Behöver du hjälp?")}),o(p,{icon:"QuestionCircle24Regular",className:S.button,size:"large",appearance:"subtle",onClick:()=>w("/help"),children:M("Visa hjälp")})]})]})]})})};export{g as Menu,g as default};
1
+ import{jsx as o,jsxs as t,Fragment as e}from"react/jsx-runtime";import{makeStyles as i,Image as n}from"@fluentui/react-components";import{useNavigate as r}from"react-router-dom";import s from"../components/Markdown.js";import"../components/Textarea.js";import{Button as p}from"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import m from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"react";import"@fluentui/react-icons";import"../services/codicent.js";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"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import"../components/Content.js";import{Page as a}from"../components/Page.js";import"./QrScan.js";import c from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import l from"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import d from"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import{LanguageSelector as u}from"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";const j=i({container:{backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%",touchAction:"pan-y",margin:"0 auto",maxWidth:"800px"},menu_items:{overflowY:"auto",height:"calc(100vh - 130px)",paddingLeft:"10px",paddingRight:"10px"},divider:{fontSize:"20px",fontWeight:"bold",marginTop:"32px",marginBottom:"20px"},appButton:{margin:"2px"}}),g=({state:i,title:g,aboutText:h,version:f,backgroundImageUrl:v,showHelpButton:A,showLogbookButton:C,stripeCustomerPortal:x,showAppSelector:b=!0})=>{const S=r(),k=l(),w=j(),{auth:B}=i,{t:P}=c(),M=h?h.replace("{{version}}",(()=>{const o=new Date,t=o.toISOString().split("T")[0],e=o.getHours().toString().padStart(2,"0");return f||`v${t}.${e}`})()):void 0;return o(a,{hideHeader:!0,children:t("div",{className:w.container,style:{backgroundImage:v?`url(${v})`:void 0},children:[o(m,{title:g||P("Meny")}),t("div",{className:w.menu_items,children:[o(d,{state:i}),o(u,{}),o("hr",{}),o(p,{icon:"ChevronRightFilled",size:"large",className:k.menuButton,onClick:()=>{B.logout(),i.stateMachine.logout()},iconPosition:"after",appearance:"transparent",children:P("Logga ut")}),x&&o(p,{icon:"Payment24Regular",size:"large",className:k.menuButton,onClick:()=>window.location.href=x,iconPosition:"after",appearance:"transparent",children:P("Abonnemang")}),b&&i.context.apps&&i.context.apps.length>1&&t(e,{children:[o("h3",{children:P("Mina codicents")}),i.context.apps.map((t=>o(p,{className:w.appButton,image:t.logo?o(n,{src:t.logo,height:"24px"}):void 0,onClick:()=>i.stateMachine.setSelectedApp(t.id),title:t.title||t.id,children:t.title||t.id},t.id)))]}),C&&t(e,{children:[o("hr",{}),o(p,{className:k.menuButton,icon:"ChevronRightFilled",size:"large",appearance:"subtle",iconPosition:"after",onClick:()=>S("/log"),children:P("Loggboken")})]}),o("hr",{}),M&&o(s,{content:M}),A&&t(e,{children:[o("h3",{children:P("Behöver du hjälp?")}),o(p,{icon:"QuestionCircle24Regular",className:k.button,size:"large",appearance:"subtle",onClick:()=>S("/help"),children:P("Visa hjälp")})]})]})]})})};export{g as Menu,g as default};
@@ -1 +1 @@
1
- import{jsxs as o,jsx as t}from"react/jsx-runtime";import{makeStyles as e,tokens as r}from"@fluentui/react-components";import{useState as i,useEffect as n}from"react";import{Link as s}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as m}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as p}from"../components/Title.js";import{Text as a}from"../components/Text.js";import{Spinner as c}from"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as l}from"../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"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"../components/Content.js";import"../components/Page.js";import"./QrScan.js";import"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const d=e({container:{display:"flex",flexDirection:"column",alignItems:"center",gap:"20px",padding:"20px"},pricing:{padding:"20px",paddingLeft:"30px",border:"1px solid #ccc",borderRadius:"8px",backgroundColor:r.colorNeutralBackground1}}),j=({state:e})=>{const r=d(),[j,g]=i(!1),{service:u,stateMachine:h}=e,{updateContext:f}=h;n((()=>{new URLSearchParams(window.location.search).get("session_id")&&f({hasValidPurchase:void 0})}),[]);return o("div",{className:r.container,children:[t(p,{children:"Starta ditt abonnemang"}),t("div",{className:r.pricing,children:o("ul",{children:[t("li",{children:t(a,{size:400,children:"Kreditkort krävs inte"})}),t("li",{children:t(a,{size:400,children:"Gratis de 2 första månaderna"})}),t("li",{children:t(a,{size:400,children:"Därefter 89 kr/månad"})})]})}),t(m,{appearance:"primary",onClick:async()=>{try{g(!0),await u.redirectToCheckout(l("STRIPE_PRICE_ID"))}catch(o){console.error("Purchase error:",o)}finally{g(!1)}},disabled:j,children:j?t(c,{size:"tiny"}):"Starta abonnemang"}),t("div",{children:o(a,{size:400,children:["Har du redan ett abonnemang? Kanske har du loggat in med fel konto. ",t(s,{to:"/logout",children:"Logga ut"})," och sedan in igen för att komma igång."]})})]})};export{j as Purchase,j as default};
1
+ import{jsxs as o,jsx as t}from"react/jsx-runtime";import{makeStyles as i,tokens as e}from"@fluentui/react-components";import{useState as r,useEffect as s}from"react";import{Link as n}from"react-router-dom";import"../components/Markdown.js";import"../components/Textarea.js";import{Button as m}from"../components/Button.js";import"../components/CompoundButton.js";import{Title as p}from"../components/Title.js";import{Text as a}from"../components/Text.js";import{Spinner as c}from"../components/Spinner.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as d}from"../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"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"../components/Content.js";import"../components/Page.js";import"./QrScan.js";import"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";const l=i({container:{display:"flex",flexDirection:"column",alignItems:"center",gap:"20px",padding:"20px"},pricing:{padding:"20px",paddingLeft:"30px",border:"1px solid #ccc",borderRadius:"8px",backgroundColor:e.colorNeutralBackground1}}),j=({state:i})=>{const e=l(),[j,u]=r(!1),{service:g,stateMachine:h}=i,{updateContext:f}=h;s((()=>{new URLSearchParams(window.location.search).get("session_id")&&f({hasValidPurchase:void 0})}),[]);return o("div",{className:e.container,children:[t(p,{children:"Starta ditt abonnemang"}),t("div",{className:e.pricing,children:o("ul",{children:[t("li",{children:t(a,{size:400,children:"Kreditkort krävs inte"})}),t("li",{children:t(a,{size:400,children:"Gratis de 2 första månaderna"})}),t("li",{children:t(a,{size:400,children:"Därefter 89 kr/månad"})})]})}),t(m,{appearance:"primary",onClick:async()=>{try{u(!0),await g.redirectToCheckout(d("STRIPE_PRICE_ID"))}catch(o){console.error("Purchase error:",o)}finally{u(!1)}},disabled:j,children:j?t(c,{size:"tiny"}):"Starta abonnemang"}),t("div",{children:o(a,{size:400,children:["Har du redan ett abonnemang? Kanske har du loggat in med fel konto. ",t(n,{to:"/logout",children:"Logga ut"})," och sedan in igen för att komma igång."]})})]})};export{j as Purchase,j as default};
@@ -1 +1 @@
1
- import{jsx as o,jsxs as e,Fragment as t}from"react/jsx-runtime";import{useState as n,useCallback as i,useEffect as r}from"react";import{makeStyles as s,tokens as a,shorthands as c,Image as p,mergeClasses as l}from"@fluentui/react-components";import{useNavigate as m}from"react-router-dom";import"../components/Markdown.js";import{Textarea as d}from"../components/Textarea.js";import{Button as h}from"../components/Button.js";import"../components/CompoundButton.js";import{Text as g}from"../components/Text.js";import"../components/Spinner.js";import{Input as u}from"../components/Input.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import{Dialog as j,DialogTitle as f,DialogContent as x,DialogActions as C}from"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as k}from"../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"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Purchase.js";import"../components/Content.js";import{Page as b}from"../components/Page.js";import"./QrScan.js";import v from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{QrCodeDialog as w}from"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";const _=s({root:{display:"flex",flexDirection:"column",height:"100%",touchAction:"pan-y"},header:{display:"flex",justifyContent:"space-between",alignItems:"center",color:a.colorNeutralForegroundOnBrand,...c.padding("10px","20px")},logo:{maxWidth:"100px",maxHeight:"50px",height:"auto",cursor:"pointer"},inputContainer:{display:"flex",justifyContent:"flex-end",alignItems:"center",maxWidth:"300px",width:"200px",paddingLeft:"10px"},dashboard:{display:"flex",justifyContent:"space-around",width:"100%",marginTop:"20px"},statBox:{...c.padding("10px"),...c.borderRadius("12px"),minWidth:"50px",textAlign:"center",color:"white"},buttonContainer:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",gap:"30px",alignItems:"center",...c.padding("20px")},actionButton:{width:"14rem",minWidth:"15rem",height:"3rem"},textAreaContainer:{display:"flex",flexDirection:"column",gap:"10px"},opened:{backgroundColor:"#1a5614"},not_home:{backgroundColor:"#f44336"},sales:{backgroundColor:"#2196F3"},call_back:{backgroundColor:"#FF9800"},backButton:{position:"absolute",top:"10px",left:"10px",zIndex:1e3}}),y={opened:"#1a5614",not_home:"#f44336",sales:"#2196F3",call_back:"#FF9800"},I=()=>{const s=_(),{t:c}=v(),I=m(),[P,A]=n(""),[F,B]=n(),[M,$]=n({opened:0,not_home:0,sales:0,call_back:0}),[N,D]=n([]),[S,L]=n(!1),[O,H]=n(""),[T,z]=n(""),[R,U]=n(""),[E,G]=n(!1),[W,Q]=n(!1),[V,K]=n(!1),q={backgroundColor:k("APP_HEADER_COLOR")||a.colorBrandBackground},J=i((()=>new Promise((o=>{navigator.geolocation?navigator.geolocation.getCurrentPosition((e=>{const t=`#position (${e.coords.latitude},${e.coords.longitude})`;o(t)})):o(void 0)}))),[B]);r((()=>{window.Codicent.getDataMessages({codicent:k("APP_NAME"),tags:["sales_code"]}).then((o=>{o=o.filter((o=>"1"!==o.data.inactive)),D(o)})).catch(console.error),J()}),[]);const X=async()=>{if(!P)return;const o=["not_home","sales","call_back","opened"],e=new Date;e.setHours(0,0,0,0);const t={...M};for(const n of o){const o=await window.Codicent.getMessages({search:`#${n} #sales_code_${P}`,afterTimestamp:e,length:1e4});t[n]=o.filter((o=>o.content.includes(`#${n} `)&&o.content.includes(`#sales_code_${P}`))).length}$(t)},Y=async(o,e="")=>{const t=await J();console.log("Got position",t);const n=`@${k("APP_NAME")} #sales_code_${P} #${o} ${t||""} ${e.trim().length>0?"#comment ":""}${e}`.trim();await window.Codicent.postMessage({message:n}),X()};return o(b,{hideHeader:!0,children:e("div",{className:s.root,children:[o("div",{className:s.backButton,children:o(h,{appearance:"subtle",icon:"ArrowLeft24Regular",onClick:()=>I(-1),children:c("Tillbaka")})}),e("div",{className:s.header,style:q,children:[o(p,{src:T||k("APP_ICON_URL")||"https://via.placeholder.com/100",className:s.logo,onClick:()=>{T?K(!0):R&&Q(!0)}}),o("div",{className:s.inputContainer,children:o(u,{value:P,onChange:o=>A(o.target.value),onBlur:()=>{const o=N.find((o=>o.data.code===P));if(o)z(`https://codicent.com/app/GetImage?fileId=${o.fileId}&width=100`),U(o.data.link),G(!0),X();else{const o=N.find((o=>o.data.code2===P.toUpperCase()));o?(z(`https://codicent.com/app/GetImage?fileId=${o.fileIds&&o.fileIds.length>1?o.fileIds[1]:o.fileId}&width=100`),U(o.data.link2),G(!0),X()):(G(!1),alert(c("Fel försäljningskod!")))}},placeholder:c("Fyll i försäljningskod"),maxLength:16,size:"large"})})]}),E&&e(t,{children:[o("div",{className:s.dashboard,children:Object.keys(M).map((e=>{return o("div",{className:(t=e,l(s.statBox,s[t])),children:o(g,{weight:"bold",size:400,children:M[e]})},e);var t}))}),o("div",{className:s.buttonContainer,children:Object.entries(y).map((([e,t])=>o(h,{size:"large",className:s.actionButton,style:{backgroundColor:t,color:"white"},onClick:()=>{Y(e),"opened"===e&&L(!0),"sales"===e&&Q(!0)},children:e.charAt(0).toUpperCase()+e.slice(1).replace("_"," ")},e)))}),e(j,{open:S,children:[o(f,{children:c("Skriv in avvikelse")}),o(x,{children:o("div",{className:s.textAreaContainer,children:o(d,{value:O,onChange:o=>H(o.target.value),placeholder:c("Skriv din text här..."),rows:4,size:"large"})})}),o(C,{children:o(h,{appearance:"primary",onClick:()=>{Y("anomaly",`\n${O}`),L(!1),H("")},children:c("Spara")})})]}),e(j,{open:W,children:[o(f,{children:c("Godkännande")}),o(x,{children:c("Är kunden över 23 år?")}),e(C,{children:[o(h,{appearance:"primary",onClick:()=>window.open(R,"_blank"),children:c("OK")}),o(h,{appearance:"secondary",onClick:()=>Q(!1),children:c("Avbryt")})]})]})]}),o(w,{isOpen:V,onDismiss:()=>K(!1),imageUrl:T})]})})};export{I as Sales,I as default};
1
+ import{jsx as o,jsxs as t,Fragment as e}from"react/jsx-runtime";import{useState as i,useCallback as n,useEffect as s}from"react";import{makeStyles as r,tokens as a,shorthands as p,Image as c,mergeClasses as m}from"@fluentui/react-components";import{useNavigate as l}from"react-router-dom";import"../components/Markdown.js";import{Textarea as d}from"../components/Textarea.js";import{Button as u}from"../components/Button.js";import"../components/CompoundButton.js";import{Text as j}from"../components/Text.js";import"../components/Spinner.js";import{Input as h}from"../components/Input.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import{Dialog as g,DialogTitle as f,DialogContent as x,DialogActions as C}from"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"@fluentui/react-icons";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as k}from"../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"./AppFrame.js";import"./Canvas.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Menu.js";import"./Log.js";import"./Login.js";import"./Home.js";import"./ListPage.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Purchase.js";import"../components/Content.js";import{Page as b}from"../components/Page.js";import"./QrScan.js";import w from"../hooks/useLocalization.js";import"../components/FileThumbnail.js";import"react-dom/client";import"../node_modules/@auth0/auth0-react/dist/auth0-react.esm.js";import"../hooks/useAppStyles.js";import"../components/MessageInput.js";import"../components/UploadFile.js";import"../components/SnapFooter.js";import"../components/Profile.js";import"../components/MessageItem.js";import"../components/AiInput.js";import"../components/SearchBox.js";import"../components/DataMessagePicker.js";import"../components/HtmlView.js";import"../components/Footer.js";import{QrCodeDialog as v}from"../components/QrCodeDialog.js";import"../components/QrScanner.js";import"../components/OfflineMessage.js";import"../components/LanguageSelector.js";import"../components/ListView.js";import"../components/RecordModal.js";import"../components/BulkUploadDialog.js";import"../components/CookieBanner.js";import"../components/audit/AuditCircularProgress.js";import"../components/audit/AuditHorizontalProgress.js";import"../components/audit/AuditRoleIndicator.js";import"../components/audit/AuditUnitSwitcher.js";import"../components/audit/AuditAnswerCell.js";import"../components/audit/AuditSearchBar.js";import"../components/audit/AuditFilterChips.js";import"../components/audit/AuditFilterBar.js";import"../components/audit/AuditGroupsProgress.js";import"../components/audit/AuditSummaryDashboard.js";import"../components/audit/AuditRequirementDialog.js";import"../components/audit/AuditUnitExportDialog.js";import"../components/audit/AuditUnitImportDialog.js";import"../components/audit/AuditBulkExportDialog.js";import"../components/audit/AuditBulkUploadDialog.js";import"../components/audit/AuditSortPresets.js";const A=r({root:{display:"flex",flexDirection:"column",height:"100%",touchAction:"pan-y"},header:{display:"flex",justifyContent:"space-between",alignItems:"center",color:a.colorNeutralForegroundOnBrand,...p.padding("10px","20px")},logo:{maxWidth:"100px",maxHeight:"50px",height:"auto",cursor:"pointer"},inputContainer:{display:"flex",justifyContent:"flex-end",alignItems:"center",maxWidth:"300px",width:"200px",paddingLeft:"10px"},dashboard:{display:"flex",justifyContent:"space-around",width:"100%",marginTop:"20px"},statBox:{...p.padding("10px"),...p.borderRadius("12px"),minWidth:"50px",textAlign:"center",color:"white"},buttonContainer:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",gap:"30px",alignItems:"center",...p.padding("20px")},actionButton:{width:"14rem",minWidth:"15rem",height:"3rem"},textAreaContainer:{display:"flex",flexDirection:"column",gap:"10px"},opened:{backgroundColor:"#1a5614"},not_home:{backgroundColor:"#f44336"},sales:{backgroundColor:"#2196F3"},call_back:{backgroundColor:"#FF9800"},backButton:{position:"absolute",top:"10px",left:"10px",zIndex:1e3}}),_={opened:"#1a5614",not_home:"#f44336",sales:"#2196F3",call_back:"#FF9800"},y=()=>{const r=A(),{t:p}=w(),y=l(),[I,P]=i(""),[B,D]=i(),[F,S]=i({opened:0,not_home:0,sales:0,call_back:0}),[M,$]=i([]),[N,L]=i(!1),[U,H]=i(""),[O,R]=i(""),[T,z]=i(""),[E,G]=i(!1),[W,Q]=i(!1),[V,q]=i(!1),K={backgroundColor:k("APP_HEADER_COLOR")||a.colorBrandBackground},J=n((()=>new Promise((o=>{navigator.geolocation?navigator.geolocation.getCurrentPosition((t=>{const e=`#position (${t.coords.latitude},${t.coords.longitude})`;o(e)})):o(void 0)}))),[D]);s((()=>{window.Codicent.getDataMessages({codicent:k("APP_NAME"),tags:["sales_code"]}).then((o=>{o=o.filter((o=>"1"!==o.data.inactive)),$(o)})).catch(console.error),J()}),[]);const X=async()=>{if(!I)return;const o=["not_home","sales","call_back","opened"],t=new Date;t.setHours(0,0,0,0);const e={...F};for(const i of o){const o=await window.Codicent.getMessages({search:`#${i} #sales_code_${I}`,afterTimestamp:t,length:1e4});e[i]=o.filter((o=>o.content.includes(`#${i} `)&&o.content.includes(`#sales_code_${I}`))).length}S(e)},Y=async(o,t="")=>{const e=await J();console.log("Got position",e);const i=`@${k("APP_NAME")} #sales_code_${I} #${o} ${e||""} ${t.trim().length>0?"#comment ":""}${t}`.trim();await window.Codicent.postMessage({message:i}),X()};return o(b,{hideHeader:!0,children:t("div",{className:r.root,children:[o("div",{className:r.backButton,children:o(u,{appearance:"subtle",icon:"ArrowLeft24Regular",onClick:()=>y(-1),children:p("Tillbaka")})}),t("div",{className:r.header,style:K,children:[o(c,{src:O||k("APP_ICON_URL")||"https://via.placeholder.com/100",className:r.logo,onClick:()=>{O?q(!0):T&&Q(!0)}}),o("div",{className:r.inputContainer,children:o(h,{value:I,onChange:o=>P(o.target.value),onBlur:()=>{const o=M.find((o=>o.data.code===I));if(o)R(`https://codicent.com/app/GetImage?fileId=${o.fileId}&width=100`),z(o.data.link),G(!0),X();else{const o=M.find((o=>o.data.code2===I.toUpperCase()));o?(R(`https://codicent.com/app/GetImage?fileId=${o.fileIds&&o.fileIds.length>1?o.fileIds[1]:o.fileId}&width=100`),z(o.data.link2),G(!0),X()):(G(!1),alert(p("Fel försäljningskod!")))}},placeholder:p("Fyll i försäljningskod"),maxLength:16,size:"large"})})]}),E&&t(e,{children:[o("div",{className:r.dashboard,children:Object.keys(F).map((t=>{return o("div",{className:(e=t,m(r.statBox,r[e])),children:o(j,{weight:"bold",size:400,children:F[t]})},t);var e}))}),o("div",{className:r.buttonContainer,children:Object.entries(_).map((([t,e])=>o(u,{size:"large",className:r.actionButton,style:{backgroundColor:e,color:"white"},onClick:()=>{Y(t),"opened"===t&&L(!0),"sales"===t&&Q(!0)},children:t.charAt(0).toUpperCase()+t.slice(1).replace("_"," ")},t)))}),t(g,{open:N,children:[o(f,{children:p("Skriv in avvikelse")}),o(x,{children:o("div",{className:r.textAreaContainer,children:o(d,{value:U,onChange:o=>H(o.target.value),placeholder:p("Skriv din text här..."),rows:4,size:"large"})})}),o(C,{children:o(u,{appearance:"primary",onClick:()=>{Y("anomaly",`\n${U}`),L(!1),H("")},children:p("Spara")})})]}),t(g,{open:W,children:[o(f,{children:p("Godkännande")}),o(x,{children:p("Är kunden över 23 år?")}),t(C,{children:[o(u,{appearance:"primary",onClick:()=>window.open(T,"_blank"),children:p("OK")}),o(u,{appearance:"secondary",onClick:()=>Q(!1),children:p("Avbryt")})]})]})]}),o(v,{isOpen:V,onDismiss:()=>q(!1),imageUrl:O})]})})};export{y as Sales,y as default};