codicent-app-sdk 0.5.5 → 0.5.7

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 (152) hide show
  1. package/dist/cjs/_virtual/_commonjsHelpers.js +1 -1
  2. package/dist/cjs/_virtual/index19.js +1 -1
  3. package/dist/cjs/_virtual/index20.js +1 -1
  4. package/dist/cjs/_virtual/index4.js +1 -1
  5. package/dist/cjs/_virtual/index5.js +1 -1
  6. package/dist/cjs/components/AiInput.js +1 -1
  7. package/dist/cjs/components/AudioIcon.js +1 -1
  8. package/dist/cjs/components/ChatInput.js +1 -1
  9. package/dist/cjs/components/ChatMessage.js +1 -1
  10. package/dist/cjs/components/CombinedPlaceholderDialog.js +1 -1
  11. package/dist/cjs/components/Footer.js +1 -1
  12. package/dist/cjs/components/GenericJsonRenderer.js +1 -1
  13. package/dist/cjs/components/Header.js +1 -1
  14. package/dist/cjs/components/HtmlView.js +1 -1
  15. package/dist/cjs/components/MessageInput.js +1 -1
  16. package/dist/cjs/components/MessageItem.js +1 -1
  17. package/dist/cjs/components/Profile.js +1 -1
  18. package/dist/cjs/components/Prompt.js +1 -1
  19. package/dist/cjs/components/SnapFooter.js +1 -1
  20. package/dist/cjs/components/TextHeader.js +1 -1
  21. package/dist/cjs/components/TypingIndicator.js +1 -1
  22. package/dist/cjs/components/UploadFile.js +1 -1
  23. package/dist/cjs/components/UrlProcessor.js +1 -1
  24. package/dist/cjs/components/VoiceIcon.js +1 -1
  25. package/dist/cjs/hooks/useAuthState.js +1 -1
  26. package/dist/cjs/hooks/useChat.js +1 -1
  27. package/dist/cjs/hooks/useCodicentState.js +1 -1
  28. package/dist/cjs/hooks/useObserveDataSchemas.js +1 -1
  29. package/dist/cjs/hooks/useTools.js +1 -1
  30. package/dist/cjs/hooks/useUserRoles.d.ts +1 -1
  31. package/dist/cjs/hooks/useUserRoles.d.ts.map +1 -1
  32. package/dist/cjs/hooks/useUserRoles.js +1 -1
  33. package/dist/cjs/node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js +1 -1
  34. package/dist/cjs/node_modules/@fast-csv/format/build/src/index.js +1 -1
  35. package/dist/cjs/node_modules/@fast-csv/format/build/src/types.js +1 -1
  36. package/dist/cjs/node_modules/@fast-csv/parse/build/src/index.js +1 -1
  37. package/dist/cjs/node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js +1 -1
  38. package/dist/cjs/node_modules/@fast-csv/parse/build/src/types.js +1 -1
  39. package/dist/cjs/node_modules/concat-map/index.js +1 -1
  40. package/dist/cjs/node_modules/exceljs/lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +1 -1
  41. package/dist/cjs/node_modules/fs.realpath/index.js +1 -1
  42. package/dist/cjs/node_modules/fs.realpath/old.js +1 -1
  43. package/dist/cjs/node_modules/glob/common.js +1 -1
  44. package/dist/cjs/node_modules/glob/glob.js +1 -1
  45. package/dist/cjs/node_modules/glob/sync.js +1 -1
  46. package/dist/cjs/node_modules/inflight/inflight.js +1 -1
  47. package/dist/cjs/node_modules/minimatch/minimatch.js +1 -1
  48. package/dist/cjs/node_modules/minimatch/node_modules/brace-expansion/index.js +1 -1
  49. package/dist/cjs/node_modules/react-is/index.js +1 -1
  50. package/dist/cjs/node_modules/safe-buffer/index.js +1 -1
  51. package/dist/cjs/node_modules/scheduler/index.js +1 -1
  52. package/dist/cjs/node_modules/style-to-js/cjs/index.js +1 -1
  53. package/dist/cjs/node_modules/style-to-object/cjs/index.js +1 -1
  54. package/dist/cjs/node_modules/unzipper/node_modules/safe-buffer/index.js +1 -1
  55. package/dist/cjs/node_modules/zip-stream/node_modules/archiver-utils/index.js +1 -1
  56. package/dist/cjs/pages/AppFrame.js +1 -1
  57. package/dist/cjs/pages/Chat.js +1 -1
  58. package/dist/cjs/pages/Compose.js +1 -1
  59. package/dist/cjs/pages/CrmPage.js +1 -1
  60. package/dist/cjs/pages/CrmPagePersistent.js +1 -1
  61. package/dist/cjs/pages/FormAccept.js +1 -1
  62. package/dist/cjs/pages/FormInvite.js +1 -1
  63. package/dist/cjs/pages/Home.js +1 -1
  64. package/dist/cjs/pages/HtmlViewer.js +1 -1
  65. package/dist/cjs/pages/ImageView.js +1 -1
  66. package/dist/cjs/pages/ListPage.js +1 -1
  67. package/dist/cjs/pages/Log.js +1 -1
  68. package/dist/cjs/pages/Login.js +1 -1
  69. package/dist/cjs/pages/Menu.js +1 -1
  70. package/dist/cjs/pages/Purchase.js +1 -1
  71. package/dist/cjs/pages/Sales.js +1 -1
  72. package/dist/cjs/pages/Search.js +1 -1
  73. package/dist/cjs/pages/Snap.js +1 -1
  74. package/dist/cjs/services/codicent.js +1 -1
  75. package/dist/cjs/utils/excelExport.js +1 -1
  76. package/dist/esm/_virtual/_commonjsHelpers.js +1 -1
  77. package/dist/esm/_virtual/index14.js +1 -1
  78. package/dist/esm/_virtual/index17.js +1 -1
  79. package/dist/esm/_virtual/index19.js +1 -1
  80. package/dist/esm/_virtual/index20.js +1 -1
  81. package/dist/esm/_virtual/index4.js +1 -1
  82. package/dist/esm/_virtual/index5.js +1 -1
  83. package/dist/esm/components/AiInput.js +1 -1
  84. package/dist/esm/components/AudioIcon.js +1 -1
  85. package/dist/esm/components/ChatInput.js +1 -1
  86. package/dist/esm/components/ChatMessage.js +1 -1
  87. package/dist/esm/components/CombinedPlaceholderDialog.js +1 -1
  88. package/dist/esm/components/Footer.js +1 -1
  89. package/dist/esm/components/GenericJsonRenderer.js +1 -1
  90. package/dist/esm/components/Header.js +1 -1
  91. package/dist/esm/components/HtmlView.js +1 -1
  92. package/dist/esm/components/MessageInput.js +1 -1
  93. package/dist/esm/components/MessageItem.js +1 -1
  94. package/dist/esm/components/Profile.js +1 -1
  95. package/dist/esm/components/Prompt.js +1 -1
  96. package/dist/esm/components/SnapFooter.js +1 -1
  97. package/dist/esm/components/TextHeader.js +1 -1
  98. package/dist/esm/components/TypingIndicator.js +1 -1
  99. package/dist/esm/components/UploadFile.js +1 -1
  100. package/dist/esm/components/UrlProcessor.js +1 -1
  101. package/dist/esm/components/VoiceIcon.js +1 -1
  102. package/dist/esm/hooks/useAuthState.js +1 -1
  103. package/dist/esm/hooks/useChat.js +1 -1
  104. package/dist/esm/hooks/useCodicentState.js +1 -1
  105. package/dist/esm/hooks/useObserveDataSchemas.js +1 -1
  106. package/dist/esm/hooks/useTools.js +1 -1
  107. package/dist/esm/hooks/useUserRoles.d.ts +1 -1
  108. package/dist/esm/hooks/useUserRoles.d.ts.map +1 -1
  109. package/dist/esm/hooks/useUserRoles.js +1 -1
  110. package/dist/esm/node_modules/@fast-csv/format/build/src/CsvFormatterStream.js +1 -1
  111. package/dist/esm/node_modules/@fast-csv/format/build/src/formatter/index.js +1 -1
  112. package/dist/esm/node_modules/@fast-csv/parse/build/src/CsvParserStream.js +1 -1
  113. package/dist/esm/node_modules/@fast-csv/parse/build/src/parser/index.js +1 -1
  114. package/dist/esm/node_modules/@fast-csv/parse/build/src/transforms/index.js +1 -1
  115. package/dist/esm/node_modules/concat-map/index.js +1 -1
  116. package/dist/esm/node_modules/exceljs/lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +1 -1
  117. package/dist/esm/node_modules/fs.realpath/index.js +1 -1
  118. package/dist/esm/node_modules/fs.realpath/old.js +1 -1
  119. package/dist/esm/node_modules/glob/common.js +1 -1
  120. package/dist/esm/node_modules/glob/glob.js +1 -1
  121. package/dist/esm/node_modules/glob/sync.js +1 -1
  122. package/dist/esm/node_modules/inflight/inflight.js +1 -1
  123. package/dist/esm/node_modules/minimatch/minimatch.js +1 -1
  124. package/dist/esm/node_modules/minimatch/node_modules/brace-expansion/index.js +1 -1
  125. package/dist/esm/node_modules/react-is/index.js +1 -1
  126. package/dist/esm/node_modules/scheduler/index.js +1 -1
  127. package/dist/esm/node_modules/style-to-js/cjs/index.js +1 -1
  128. package/dist/esm/node_modules/style-to-object/cjs/index.js +1 -1
  129. package/dist/esm/node_modules/unzipper/node_modules/safe-buffer/index.js +1 -1
  130. package/dist/esm/node_modules/zip-stream/node_modules/archiver-utils/index.js +1 -1
  131. package/dist/esm/pages/AppFrame.js +1 -1
  132. package/dist/esm/pages/Chat.js +1 -1
  133. package/dist/esm/pages/Compose.js +1 -1
  134. package/dist/esm/pages/CrmPage.js +1 -1
  135. package/dist/esm/pages/CrmPagePersistent.js +1 -1
  136. package/dist/esm/pages/FormAccept.js +1 -1
  137. package/dist/esm/pages/FormInvite.js +1 -1
  138. package/dist/esm/pages/Home.js +1 -1
  139. package/dist/esm/pages/HtmlViewer.js +1 -1
  140. package/dist/esm/pages/ImageView.js +1 -1
  141. package/dist/esm/pages/ListPage.js +1 -1
  142. package/dist/esm/pages/Log.js +1 -1
  143. package/dist/esm/pages/Login.js +1 -1
  144. package/dist/esm/pages/Menu.js +1 -1
  145. package/dist/esm/pages/Purchase.js +1 -1
  146. package/dist/esm/pages/Sales.js +1 -1
  147. package/dist/esm/pages/Search.js +1 -1
  148. package/dist/esm/pages/Snap.js +1 -1
  149. package/dist/esm/services/codicent.js +1 -1
  150. package/dist/esm/utils/excelExport.js +1 -1
  151. package/dist/index.d.ts +1 -1
  152. package/package.json +2 -2
@@ -1 +1 @@
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}from"react";import{makeStyles as s,shorthands as a,tokens as m}from"@fluentui/react-components";import{useSearchParams as p,useNavigate as l}from"react-router-dom";import{getConfigValue as c}from"../config/index.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import d 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"@fluentui/react-icons";import{CodicentService as g}from"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/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{getGpsLocation as j}from"../utils/device.js";import"../node_modules/exceljs/excel.js";import"./AppFrame.js";import"./Canvas.js";import"./Chat.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 u}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 f from"../hooks/useToaster.js";import S from"../components/MessageInput.js";import C from"../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 P=s({main:{flexGrow:1,...a.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},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:m.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"}}),v=({state:s})=>{const a=P(),{t:m}=h(),[v,_]=t(!1),x=n(null),I=n(null),b=n(null),[M,U]=t(null),[w,F]=t([]),{service:A}=s,[L,E]=p(),[O,T]=t(void 0),[y,k]=t(),$=f(),B=l(),D=i((o=>{for(const e of o)A.getFileInfo(e).then((o=>{F((e=>[...e,o]))}))}),[A,F]),H=i((o=>{const e=new FormData;e.append("file",o),A.uploadFile(o.name,e).then((o=>{D([o])})).catch((()=>{$.notify(m("Error"),m("Error uploading pasted image"),"")}))}),[A,D,$,m]),R=o=>{_(o)};r((()=>{const o=L.get("text"),e=L.get("url"),t=L.get("parentId");o&&(T(o),L.delete("text")),t&&(k(t),L.delete("parentId")),e&&(L.delete("url"),T(((o||"")+" "+e).trim())),E(L,{replace:!0})}),[L,E,T,A,D]),r((()=>{c("COMPOSE_AUTO_LOCATION")&&j().then((o=>{o&&U(`#gps(${o.coords.latitude},${o.coords.longitude})`)}))}),[]);return o(u,{hideHeader:!0,children:e("div",{className:a.container,style:{backgroundImage:`url(${c("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[o(d,{title:c("APP_SAVE_TITLE")?m(c("APP_SAVE_TITLE")):m("Spara")}),o(S,{disableSend:!0,defaultText:O,onSend:o=>{o=`${o}${M?" "+M:""}${w.length>0?"\n":""}${w.map((o=>`#file:${o.id}`)).join(" ")}`,A.sendMessage(o,y).then((()=>{$.notify(m("Meddelande"),m("Meddelandet är sparat."),""),y&&(k(void 0),B(-1))}))},files:w,onFilesChange:F,isUploading:v,onHandleDefaultFiles:D,onUploadFile:()=>{x.current?.triggerUpload(),console.log("attach-file")},onUploadImage:c("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{I.current?.triggerUpload(),console.log("attach-image")},onUploadCamera:c("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{b.current?.triggerUpload(),console.log("attach-camera")},getImageUrl:g.getImageUrl,onLocationChange:c("COMPOSE_HIDE_LOCATION")?void 0:o=>{o?(async()=>{console.log("attach-location");const o=await j();o?($.notify(m("Position"),m("Position tillagd."),""),U(`#gps(${o.coords.latitude},${o.coords.longitude})`)):console.log("Failed to get GPS location")})():(U(null),$.notify(m("Position"),m("Position borttagen."),""),console.log("clear-location"))},hasLocation:!!M,onImagePasted:H}),o(C,{ref:x,onFileUploaded:D,onUploading:R,multiple:!0,codicentService:A}),o(C,{codicentService:A,ref:I,onFileUploaded:D,onUploading:R,multiple:!0,accept:"image/*"}),o(C,{codicentService:A,ref:b,onFileUploaded:D,onUploading:R,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{v as Compose,v as default};
1
+ import{jsx as o,jsxs as e}from"react/jsx-runtime";import{useState as t,useRef as i,useCallback as n,useEffect as r}from"react";import{makeStyles as s,shorthands as a,tokens as m}from"@fluentui/react-components";import{useSearchParams as p,useNavigate as l}from"react-router-dom";import{getConfigValue as c}from"../config/index.js";import"../components/Markdown.js";import"../components/Textarea.js";import"../components/Button.js";import"../components/CompoundButton.js";import"../components/Spinner.js";import d 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"@fluentui/react-icons";import{CodicentService as g}from"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/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{getGpsLocation as j}from"../utils/device.js";import"exceljs";import"./AppFrame.js";import"./Canvas.js";import"./Chat.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 u}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 f from"../hooks/useToaster.js";import S from"../components/MessageInput.js";import C from"../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 P=s({main:{flexGrow:1,...a.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},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:m.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"}}),v=({state:s})=>{const a=P(),{t:m}=h(),[v,I]=t(!1),_=i(null),x=i(null),b=i(null),[M,U]=t(null),[w,F]=t([]),{service:A}=s,[L,E]=p(),[O,T]=t(void 0),[y,k]=t(),$=f(),B=l(),D=n((o=>{for(const e of o)A.getFileInfo(e).then((o=>{F((e=>[...e,o]))}))}),[A,F]),H=n((o=>{const e=new FormData;e.append("file",o),A.uploadFile(o.name,e).then((o=>{D([o])})).catch((()=>{$.notify(m("Error"),m("Error uploading pasted image"),"")}))}),[A,D,$,m]),R=o=>{I(o)};r((()=>{const o=L.get("text"),e=L.get("url"),t=L.get("parentId");o&&(T(o),L.delete("text")),t&&(k(t),L.delete("parentId")),e&&(L.delete("url"),T(((o||"")+" "+e).trim())),E(L,{replace:!0})}),[L,E,T,A,D]),r((()=>{c("COMPOSE_AUTO_LOCATION")&&j().then((o=>{o&&U(`#gps(${o.coords.latitude},${o.coords.longitude})`)}))}),[]);return o(u,{hideHeader:!0,children:e("div",{className:a.container,style:{backgroundImage:`url(${c("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[o(d,{title:c("APP_SAVE_TITLE")?m(c("APP_SAVE_TITLE")):m("Spara")}),o(S,{disableSend:!0,defaultText:O,onSend:o=>{o=`${o}${M?" "+M:""}${w.length>0?"\n":""}${w.map((o=>`#file:${o.id}`)).join(" ")}`,A.sendMessage(o,y).then((()=>{$.notify(m("Meddelande"),m("Meddelandet är sparat."),""),y&&(k(void 0),B(-1))}))},files:w,onFilesChange:F,isUploading:v,onHandleDefaultFiles:D,onUploadFile:()=>{_.current?.triggerUpload(),console.log("attach-file")},onUploadImage:c("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{x.current?.triggerUpload(),console.log("attach-image")},onUploadCamera:c("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{b.current?.triggerUpload(),console.log("attach-camera")},getImageUrl:g.getImageUrl,onLocationChange:c("COMPOSE_HIDE_LOCATION")?void 0:o=>{o?(async()=>{console.log("attach-location");const o=await j();o?($.notify(m("Position"),m("Position tillagd."),""),U(`#gps(${o.coords.latitude},${o.coords.longitude})`)):console.log("Failed to get GPS location")})():(U(null),$.notify(m("Position"),m("Position borttagen."),""),console.log("clear-location"))},hasLocation:!!M,onImagePasted:H}),o(C,{ref:_,onFileUploaded:D,onUploading:R,multiple:!0,codicentService:A}),o(C,{codicentService:A,ref:x,onFileUploaded:D,onUploading:R,multiple:!0,accept:"image/*"}),o(C,{codicentService:A,ref:b,onFileUploaded:D,onUploading:R,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{v as Compose,v 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 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"../node_modules/exceljs/excel.js";import"../components/FileThumbnail.js";import k from"../components/MessageInput.js";import x 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 S}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 _=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"}}),U=({state:s,voice:m})=>{const p=_(),{t:U}=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(U("Error"),U("Error uploading pasted image"),"")}))}),[O,X,G,U]),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(U("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(U(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(S,{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:U("Tillbaka")})}),e(g,{title:v("APP_SAVE_TITLE")?U(v("APP_SAVE_TITLE")):U("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(U("Meddelande"),U("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:U("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:U("Analys")}),e(l,{intent:J,layout:"multiline",children:e(d,{children:U(W)})})]}),e(x,{ref:B,onFileUploaded:X,onUploading:q,multiple:!0,codicentService:O}),e(x,{codicentService:O,ref:T,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*"}),e(x,{codicentService:O,ref:F,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{U as CrmPage,U as default};
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 +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"../node_modules/exceljs/excel.js";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"}}),_=({state:s,voice:l})=>{const m=D(),{t:_}=M(),U=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(_("Error"),_("Error uploading pasted image"),"")}))}),[R,ie,Y,_]),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(_("Error"),_("Failed to load CRM messages"),"","error")}finally{ne(!1)}}),[R,Y,_]);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(_("Meddelande"),_("Meddelandet är sparat."),""),le(),Q(""),X(void 0)}))},pe=r((async e=>{if(!e||e.length<10)return;X(_("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(_(4===t?"Allt är med":o.shortSummary||"Något saknas")),Z(4===t?"success":"warning")}catch{X("Error: "+e.content),Z("error")}}}),[R,_]),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?_("Just now"):r<60?`${r} ${_("minutes ago")}`:i<24?`${i} ${_("hours ago")}`:a<7?`${a} ${_("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:_("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:_("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:()=>U(-1),children:_("Tillbaka")})}),e(x,{title:y("APP_SAVE_TITLE")?_(y("APP_SAVE_TITLE")):_("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:_("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:_("Analys")}),e(g,{intent:q,layout:"multiline",children:e(h,{children:_(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{_ as CrmPagePersistent,_ as default};
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 +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 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"../node_modules/exceljs/excel.js";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=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"}}),k=()=>{const{t:n,tAsync:k}=g(),[C]=j(),M=d(),_=C.get("id"),v=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(_||"")))}})()}),[k,_]),o(h,{hideFooter:!0,hideHeader:!0,children:o("div",{className:v.container,style:{backgroundImage:`url(${c("FORM_BACKGROUND_IMAGE_URL")})`},children:t(u,{children:[P&&o(s,{children:n("Översätter...")}),c("FORM_ACCEPT_MARKDOWN")&&b&&!P&&o(r,{content:b}),!c("FORM_ACCEPT_MARKDOWN")&&t(e,{children:[o(i,{children:n("Din kod för formuläret")}),o("p",{className:v.instructionParagraph,children:n("Instruktioner:")}),t("ol",{className:v.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:l(_||"")})]}),_&&o(m,{appearance:"primary",onClick:()=>M(`/chat?fid=${_}`),children:n("Starta")})]})})})};export{k as default};
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 +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"../node_modules/exceljs/excel.js";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,_]=n(!1),[B,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:!B,onClick:()=>{const o=S.find((o=>o.name===B));o?.url?b.sendMessage(`#ss-link #${B}`).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 #${B}`).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),_(!0),setTimeout((()=>{_(!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 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 +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"../node_modules/exceljs/excel.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"./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 _ 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 B}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}=_(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(B,{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(B,{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 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 +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"../node_modules/exceljs/excel.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"./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 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 +1 @@
1
- import{jsxs as e,jsx as t,Fragment as o}from"react/jsx-runtime";import{makeStyles as n,Button as r,Image as i}from"@fluentui/react-components";import{Dismiss24Regular as s}from"@fluentui/react-icons";import{useState as a,useEffect as l}from"react";import{useSearchParams as c,useNavigate as d}from"react-router-dom";import m 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"../node_modules/exceljs/excel.js";import{CodicentService as u}from"../services/codicent.js";const p=n({image:{zIndex:900,transition:"transform 0.1s ease-out",cursor:"grab","&:active":{cursor:"grabbing"}},transparent:{color:"transparent",backgroundColor:"transparent"},next:{cursor:"pointer",position:"absolute",top:"50%",width:"auto",marginTop:"-22px",padding:"16px",color:"white",fontWeight:"bold",fontSize:"18px",transition:"0.6s ease",userSelect:"none",right:0,borderRadius:"3px 0 0 3px",zIndex:1e3,backgroundColor:"#A0A0A080","&:hover":{backgroundColor:"#A0A0A0"}},prev:{cursor:"pointer",position:"absolute",top:"50%",width:"auto",marginTop:"-22px",padding:"16px",color:"white",fontWeight:"bold",fontSize:"18px",transition:"0.6s ease",borderRadius:"0 3px 3px 0",userSelect:"none",left:0,zIndex:1e3,backgroundColor:"#A0A0A080","&:hover":{backgroundColor:"#A0A0A0"}},content:{position:"fixed",top:0,left:0,bottom:0,right:0,display:"flex",justifyContent:"center",alignItems:"center"},closeButton:{position:"absolute",top:"10px",right:"10px",zIndex:1001,backgroundColor:"rgba(0, 0, 0, 0.5)",color:"white","&:hover":{backgroundColor:"rgba(0, 0, 0, 0.7)"}}}),v=({state:n})=>{const v=p(),[g]=c(),h=d(),[w,x]=a([]),[f,b]=a(0),[y,E]=a(),[L,j]=a(null),[k,C]=a(null),{service:A}=n,[I,_]=a(1),[z,M]=a({x:0,y:0}),[N,S]=a(!1),[X,$]=a({x:0,y:0});l((()=>{const e=e=>{"Escape"===e.key&&h(-1)},t=e=>{j(e.touches[0].clientX)},o=e=>{C(e.touches[0].clientX)},n=()=>{if(null!==L&&null!==k){const e=L-k;e>50?F(1):e<-50&&F(-1)}j(null),C(null)};return window.addEventListener("keydown",e),window.addEventListener("touchstart",t),window.addEventListener("touchmove",o),window.addEventListener("touchend",n),()=>{window.removeEventListener("keydown",e),window.removeEventListener("touchstart",t),window.removeEventListener("touchmove",o),window.removeEventListener("touchend",n)}}),[h,L,k]),l((()=>{E(u.getFileUrl(w[f]))}),[w,f]),l((()=>{const e=g.get("id"),t=g.get("file");e&&t&&A.getMessageContent(e).then((e=>{const o=m.findFileIds(e.content);Promise.all(o.map((e=>A.getFileInfo(e)))).then((e=>{x(e.filter((e=>e.contentType.startsWith("image"))).map((e=>e.id)));const o=w.indexOf(t);o>=0&&b(o)}))})).catch((()=>{}))}),[g,A]),l((()=>{_(1),M({x:0,y:0})}),[f]),l((()=>{const e=e=>{e.preventDefault();const t=-.01*e.deltaY;_((e=>Math.min(Math.max(1,e+t),5)))},t=e=>{const t=e;I>1&&(S(!0),$({x:t.clientX-z.x,y:t.clientY-z.y}))},o=e=>{const t=e;N&&M({x:t.clientX-X.x,y:t.clientY-X.y})},n=()=>{S(!1)},r=document.querySelector(`.${v.image}`);return r&&(r.addEventListener("wheel",e),r.addEventListener("mousedown",t),window.addEventListener("mousemove",o),window.addEventListener("mouseup",n)),()=>{r&&(r.removeEventListener("wheel",e),r.removeEventListener("mousedown",t),window.removeEventListener("mousemove",o),window.removeEventListener("mouseup",n))}}),[I,z,N,X,v.image]);const F=e=>{if(f+e<0||f+e>=w.length)return;const t=(f+e+w.length)%w.length;b(t)};return e("div",{className:v.content,children:[t(r,{icon:t(s,{}),className:v.closeButton,onClick:()=>h(-1)}),t(i,{className:v.image,src:y,alt:"Codicent Image",fit:"contain",width:"100%",height:"100%",style:{transform:`translate(${z.x}px, ${z.y}px) scale(${I})`,touchAction:"none"}}),w.length>1&&e(o,{children:[0!==f&&t("a",{className:v.prev,onClick:()=>F(-1),children:"❮"}),f<w.length-1&&t("a",{className:v.next,onClick:()=>F(1),children:"❯"})]})]})};export{v as default};
1
+ import{jsxs as e,jsx as t,Fragment as o}from"react/jsx-runtime";import{makeStyles as n,Button as r,Image as i}from"@fluentui/react-components";import{Dismiss24Regular as s}from"@fluentui/react-icons";import{useState as a,useEffect as l}from"react";import{useSearchParams as c,useNavigate as d}from"react-router-dom";import m 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"exceljs";import{CodicentService as u}from"../services/codicent.js";const p=n({image:{zIndex:900,transition:"transform 0.1s ease-out",cursor:"grab","&:active":{cursor:"grabbing"}},transparent:{color:"transparent",backgroundColor:"transparent"},next:{cursor:"pointer",position:"absolute",top:"50%",width:"auto",marginTop:"-22px",padding:"16px",color:"white",fontWeight:"bold",fontSize:"18px",transition:"0.6s ease",userSelect:"none",right:0,borderRadius:"3px 0 0 3px",zIndex:1e3,backgroundColor:"#A0A0A080","&:hover":{backgroundColor:"#A0A0A0"}},prev:{cursor:"pointer",position:"absolute",top:"50%",width:"auto",marginTop:"-22px",padding:"16px",color:"white",fontWeight:"bold",fontSize:"18px",transition:"0.6s ease",borderRadius:"0 3px 3px 0",userSelect:"none",left:0,zIndex:1e3,backgroundColor:"#A0A0A080","&:hover":{backgroundColor:"#A0A0A0"}},content:{position:"fixed",top:0,left:0,bottom:0,right:0,display:"flex",justifyContent:"center",alignItems:"center"},closeButton:{position:"absolute",top:"10px",right:"10px",zIndex:1001,backgroundColor:"rgba(0, 0, 0, 0.5)",color:"white","&:hover":{backgroundColor:"rgba(0, 0, 0, 0.7)"}}}),v=({state:n})=>{const v=p(),[g]=c(),h=d(),[w,x]=a([]),[f,b]=a(0),[y,E]=a(),[L,k]=a(null),[C,j]=a(null),{service:A}=n,[I,_]=a(1),[z,M]=a({x:0,y:0}),[N,S]=a(!1),[X,$]=a({x:0,y:0});l((()=>{const e=e=>{"Escape"===e.key&&h(-1)},t=e=>{k(e.touches[0].clientX)},o=e=>{j(e.touches[0].clientX)},n=()=>{if(null!==L&&null!==C){const e=L-C;e>50?F(1):e<-50&&F(-1)}k(null),j(null)};return window.addEventListener("keydown",e),window.addEventListener("touchstart",t),window.addEventListener("touchmove",o),window.addEventListener("touchend",n),()=>{window.removeEventListener("keydown",e),window.removeEventListener("touchstart",t),window.removeEventListener("touchmove",o),window.removeEventListener("touchend",n)}}),[h,L,C]),l((()=>{E(u.getFileUrl(w[f]))}),[w,f]),l((()=>{const e=g.get("id"),t=g.get("file");e&&t&&A.getMessageContent(e).then((e=>{const o=m.findFileIds(e.content);Promise.all(o.map((e=>A.getFileInfo(e)))).then((e=>{x(e.filter((e=>e.contentType.startsWith("image"))).map((e=>e.id)));const o=w.indexOf(t);o>=0&&b(o)}))})).catch((()=>{}))}),[g,A]),l((()=>{_(1),M({x:0,y:0})}),[f]),l((()=>{const e=e=>{e.preventDefault();const t=-.01*e.deltaY;_((e=>Math.min(Math.max(1,e+t),5)))},t=e=>{const t=e;I>1&&(S(!0),$({x:t.clientX-z.x,y:t.clientY-z.y}))},o=e=>{const t=e;N&&M({x:t.clientX-X.x,y:t.clientY-X.y})},n=()=>{S(!1)},r=document.querySelector(`.${v.image}`);return r&&(r.addEventListener("wheel",e),r.addEventListener("mousedown",t),window.addEventListener("mousemove",o),window.addEventListener("mouseup",n)),()=>{r&&(r.removeEventListener("wheel",e),r.removeEventListener("mousedown",t),window.removeEventListener("mousemove",o),window.removeEventListener("mouseup",n))}}),[I,z,N,X,v.image]);const F=e=>{if(f+e<0||f+e>=w.length)return;const t=(f+e+w.length)%w.length;b(t)};return e("div",{className:v.content,children:[t(r,{icon:t(s,{}),className:v.closeButton,onClick:()=>h(-1)}),t(i,{className:v.image,src:y,alt:"Codicent Image",fit:"contain",width:"100%",height:"100%",style:{transform:`translate(${z.x}px, ${z.y}px) scale(${I})`,touchAction:"none"}}),w.length>1&&e(o,{children:[0!==f&&t("a",{className:v.prev,onClick:()=>F(-1),children:"❮"}),f<w.length-1&&t("a",{className:v.next,onClick:()=>F(1),children:"❯"})]})]})};export{v 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 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,s.context.selectedApp),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 +1 @@
1
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import{useState as o,useRef as r,useEffect as n}from"react";import i 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"../node_modules/exceljs/excel.js";import{getTimeString as s}from"../utils/helpers.js";import a from"../components/TextHeader.js";import l from"../components/MessageItem.js";import{Page as c}from"../components/Page.js";import m from"../components/HtmlView.js";import d from"../components/SearchBox.js";import p from"../hooks/useLocalization.js";import u from"../hooks/useStateWithLocalStorage.js";import{makeStyles as g}from"@fluentui/react-components";import{useSearchParams as h,useNavigate as f}from"react-router-dom";const w=g({container:{width:"100%",flex:1,maxWidth:"800px",height:"100%",backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},"@media (max-width: 480px)":{},touchAction:"pan-y",paddingLeft:"10px",paddingRight:"10px"},search_results:{overflowY:"auto",height:"calc(100vh - 200px)",marginTop:"10px"}}),v=({state:g,tags:v=["log"],tagDefinitions:x,publicFlowCodicent:j,title:S,messageItemHeight:b})=>{const[y,I]=h(),[_,L]=o(y.get("q")||""),{service:T}=g,{selectedApp:k}=g.context,[A,E]=u(`messages-${k}`,[]),[C,q]=o(!1),D=r(null),F=r(null),H=r(!0),M=w(),R=r(null),{t:$}=p(),P=f(),[W,z]=o(),B=Array.isArray(v)?v:v.split(",").map((e=>e.trim())).filter(Boolean);return n((()=>{const e=y.get("q")||"";L(e)}),[y]),n((()=>{localStorage.setItem("logbook-last-seen-at",(new Date).toISOString()),localStorage.removeItem("logbook-has-notification"),window.dispatchEvent(new CustomEvent("logbook-notification-changed"))}),[]),n((()=>{let e=!0;return D.current&&clearTimeout(D.current),D.current=setTimeout((()=>{void 0!==_?(I(_?{q:_}:{},{replace:!0}),q(!0),T.getMessagesFast(B,void 0,100,j).then((t=>{if(!e)return void q(!1);const o=t.filter((e=>e.content.toLowerCase().includes(_.toLowerCase())));0!==o.length&&0!==A.length&&o[0].id===A[0].id||E(o)})).catch((e=>{console.warn(e)})).finally((()=>q(!1)))):L("")}),500),()=>{e=!1,D.current&&clearTimeout(D.current)}}),[_,T,E,I]),n((()=>{const e=F.current;if(!e)return;const t=()=>{requestAnimationFrame((()=>{sessionStorage.setItem("log-scroll-pos-"+k,e.scrollTop.toString())}))};return e.addEventListener("scroll",t),()=>e.removeEventListener("scroll",t)}),[]),n((()=>{if(!H.current)return;const e=sessionStorage.getItem("log-scroll-pos-"+k);e&&F.current&&requestAnimationFrame((()=>{F.current&&(F.current.scrollTop=parseInt(e))})),H.current=!1}),[A,k]),n((()=>{H.current||F.current&&(F.current.scrollTop=0,sessionStorage.removeItem("log-scroll-pos-"+k))}),[_,k]),n((()=>{const e=F.current;if(!e)return;R.current=new ResizeObserver((()=>{const t=sessionStorage.getItem(`log-scroll-pos-${k}`);t&&(e.scrollTop=parseInt(t))}));e.querySelectorAll(".message-item").forEach((e=>{R.current?.observe(e)}));return e.querySelectorAll("img").forEach((t=>{if(!t.complete){const o=e.scrollTop;t.addEventListener("load",(()=>{e.scrollTop=o}),{once:!0})}})),()=>{R.current?.disconnect()}}),[A,k]),n((()=>{if(!W)return;const e=()=>{z(void 0)};return window.addEventListener("popstate",e),()=>{window.removeEventListener("popstate",e)}}),[W]),W?e(m,{html:W,onDismiss:()=>z(void 0)}):e(c,{hideHeader:!0,hideFooter:!!W,children:t("div",{className:M.container,children:[e(a,{title:S||$("Loggbok")}),e(d,{placeholder:$("Sök")+"...",value:_,onChange:e=>{L(e)}}),t("div",{className:M.search_results,ref:F,children:[C&&e("p",{children:$("Söker")+"..."}),A.map((t=>{const o=new i(t.content);let r=$(x?x[o.tags[0]]?.name||o.tags[0]||(o.files.length>0?x.file?.name:""):o.tags[0]),n=o.content;if(o.tags.includes("chat_title")){r=$(x?.chat_title?.name||"Chatt");try{const e=o.data;n='<a style="color: inherit !important; text-decoration: none !important;" href="./#/chat?id='+e.conversation_id+'">'+e.title+"</a>"}catch(e){console.warn("Failed to parse chat title content:",e)}}return e(l,{id:t.id,header:r,description:"",timestamp:s(new Date(t.createdAt)),timestampTitle:new Date(t.createdAt).toLocaleString(),text:n,tags:o.tags,image:"",fileIds:o.files,codicentService:T,maxHeightPx:b,onEdit:()=>{P(`/new/?text=${encodeURIComponent(t.content)}&parentId=${t.id}`)},onShowHtmlPreview:e=>{window.history.pushState({html:e},"",window.location.href),z(e)}},t.id)}))]})]})})};export{v as Log,v as default};
1
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";import{useState as o,useRef as r,useEffect as n}from"react";import i 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"exceljs";import{getTimeString as s}from"../utils/helpers.js";import a from"../components/TextHeader.js";import l from"../components/MessageItem.js";import{Page as c}from"../components/Page.js";import m from"../components/HtmlView.js";import d from"../components/SearchBox.js";import p from"../hooks/useLocalization.js";import u from"../hooks/useStateWithLocalStorage.js";import{makeStyles as g}from"@fluentui/react-components";import{useSearchParams as h,useNavigate as f}from"react-router-dom";const w=g({container:{width:"100%",flex:1,maxWidth:"800px",height:"100%",backgroundColor:"#ffffff",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},"@media (max-width: 480px)":{},touchAction:"pan-y",paddingLeft:"10px",paddingRight:"10px"},search_results:{overflowY:"auto",height:"calc(100vh - 200px)",marginTop:"10px"}}),v=({state:g,tags:v=["log"],tagDefinitions:x,publicFlowCodicent:S,title:j,messageItemHeight:b})=>{const[y,I]=h(),[L,T]=o(y.get("q")||""),{service:_}=g,{selectedApp:k}=g.context,[A,E]=u(`messages-${k}`,[]),[C,q]=o(!1),D=r(null),F=r(null),H=r(!0),M=w(),R=r(null),{t:$}=p(),P=f(),[W,z]=o(),B=Array.isArray(v)?v:v.split(",").map((e=>e.trim())).filter(Boolean);return n((()=>{const e=y.get("q")||"";T(e)}),[y]),n((()=>{localStorage.setItem("logbook-last-seen-at",(new Date).toISOString()),localStorage.removeItem("logbook-has-notification"),window.dispatchEvent(new CustomEvent("logbook-notification-changed"))}),[]),n((()=>{let e=!0;return D.current&&clearTimeout(D.current),D.current=setTimeout((()=>{void 0!==L?(I(L?{q:L}:{},{replace:!0}),q(!0),_.getMessagesFast(B,void 0,100,S).then((t=>{if(!e)return void q(!1);const o=t.filter((e=>e.content.toLowerCase().includes(L.toLowerCase())));0!==o.length&&0!==A.length&&o[0].id===A[0].id||E(o)})).catch((e=>{console.warn(e)})).finally((()=>q(!1)))):T("")}),500),()=>{e=!1,D.current&&clearTimeout(D.current)}}),[L,_,E,I]),n((()=>{const e=F.current;if(!e)return;const t=()=>{requestAnimationFrame((()=>{sessionStorage.setItem("log-scroll-pos-"+k,e.scrollTop.toString())}))};return e.addEventListener("scroll",t),()=>e.removeEventListener("scroll",t)}),[]),n((()=>{if(!H.current)return;const e=sessionStorage.getItem("log-scroll-pos-"+k);e&&F.current&&requestAnimationFrame((()=>{F.current&&(F.current.scrollTop=parseInt(e))})),H.current=!1}),[A,k]),n((()=>{H.current||F.current&&(F.current.scrollTop=0,sessionStorage.removeItem("log-scroll-pos-"+k))}),[L,k]),n((()=>{const e=F.current;if(!e)return;R.current=new ResizeObserver((()=>{const t=sessionStorage.getItem(`log-scroll-pos-${k}`);t&&(e.scrollTop=parseInt(t))}));e.querySelectorAll(".message-item").forEach((e=>{R.current?.observe(e)}));return e.querySelectorAll("img").forEach((t=>{if(!t.complete){const o=e.scrollTop;t.addEventListener("load",(()=>{e.scrollTop=o}),{once:!0})}})),()=>{R.current?.disconnect()}}),[A,k]),n((()=>{if(!W)return;const e=()=>{z(void 0)};return window.addEventListener("popstate",e),()=>{window.removeEventListener("popstate",e)}}),[W]),W?e(m,{html:W,onDismiss:()=>z(void 0)}):e(c,{hideHeader:!0,hideFooter:!!W,children:t("div",{className:M.container,children:[e(a,{title:j||$("Loggbok")}),e(d,{placeholder:$("Sök")+"...",value:L,onChange:e=>{T(e)}}),t("div",{className:M.search_results,ref:F,children:[C&&e("p",{children:$("Söker")+"..."}),A.map((t=>{const o=new i(t.content);let r=$(x?x[o.tags[0]]?.name||o.tags[0]||(o.files.length>0?x.file?.name:""):o.tags[0]),n=o.content;if(o.tags.includes("chat_title")){r=$(x?.chat_title?.name||"Chatt");try{const e=o.data;n='<a style="color: inherit !important; text-decoration: none !important;" href="./#/chat?id='+e.conversation_id+'">'+e.title+"</a>"}catch(e){console.warn("Failed to parse chat title content:",e)}}return e(l,{id:t.id,header:r,description:"",timestamp:s(new Date(t.createdAt)),timestampTitle:new Date(t.createdAt).toLocaleString(),text:n,tags:o.tags,image:"",fileIds:o.files,codicentService:_,maxHeightPx:b,onEdit:()=>{P(`/new/?text=${encodeURIComponent(t.content)}&parentId=${t.id}`)},onShowHtmlPreview:e=>{window.history.pushState({html:e},"",window.location.href),z(e)}},t.id)}))]})]})})};export{v as Log,v 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"../node_modules/exceljs/excel.js";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 d 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 g 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=g(),{t:E}=d(),[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 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 +1 @@
1
- import{jsx as o,jsxs as t,Fragment as e}from"react/jsx-runtime";import{makeStyles as n,Image as i}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"../node_modules/exceljs/excel.js";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=n({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:n,title:g,aboutText:h,version:f,backgroundImageUrl:v,showHelpButton:x,showLogbookButton:b,stripeCustomerPortal:C,showAppSelector:k=!0})=>{const w=r(),S=l(),B=u(),{auth:P}=n,{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:n}),o(j,{}),o("hr",{}),o(p,{icon:"ChevronRightFilled",size:"large",className:S.menuButton,onClick:()=>{P.logout(),n.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&&n.context.apps&&n.context.apps.length>1&&t(e,{children:[o("h3",{children:M("Mina codicents")}),n.context.apps.map((t=>o(p,{className:B.appButton,image:t.logo?o(i,{src:t.logo,height:"24px"}):void 0,onClick:()=>n.stateMachine.setSelectedApp(t.id),title:t.title||t.id,children:t.title||t.id},t.id)))]}),b&&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}),x&&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 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 +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"../node_modules/exceljs/excel.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"./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,u]=i(!1),{service:g,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{u(!0),await g.redirectToCheckout(l("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(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 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};