codicent-app-sdk 0.3.116 → 0.3.118

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 (37) hide show
  1. package/README.md +22 -1
  2. package/dist/cjs/components/Button.d.ts +1 -1
  3. package/dist/cjs/components/Button.d.ts.map +1 -1
  4. package/dist/cjs/components/Button.js +1 -1
  5. package/dist/cjs/components/MessageItem.d.ts +2 -1
  6. package/dist/cjs/components/MessageItem.d.ts.map +1 -1
  7. package/dist/cjs/components/MessageItem.js +1 -1
  8. package/dist/cjs/index.js +1 -1
  9. package/dist/cjs/node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-1.js +1 -1
  10. package/dist/cjs/pages/CrmPage.d.ts.map +1 -1
  11. package/dist/cjs/pages/CrmPage.js +1 -1
  12. package/dist/cjs/pages/CrmPagePersistent.d.ts.map +1 -1
  13. package/dist/cjs/pages/CrmPagePersistent.js +1 -1
  14. package/dist/cjs/pages/Sales.d.ts.map +1 -1
  15. package/dist/cjs/pages/Sales.js +1 -1
  16. package/dist/cjs/services/codicent.d.ts +1 -0
  17. package/dist/cjs/services/codicent.d.ts.map +1 -1
  18. package/dist/cjs/services/codicent.js +1 -1
  19. package/dist/esm/components/Button.d.ts +1 -1
  20. package/dist/esm/components/Button.d.ts.map +1 -1
  21. package/dist/esm/components/Button.js +1 -1
  22. package/dist/esm/components/MessageItem.d.ts +2 -1
  23. package/dist/esm/components/MessageItem.d.ts.map +1 -1
  24. package/dist/esm/components/MessageItem.js +1 -1
  25. package/dist/esm/index.js +1 -1
  26. package/dist/esm/node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-1.js +1 -1
  27. package/dist/esm/pages/CrmPage.d.ts.map +1 -1
  28. package/dist/esm/pages/CrmPage.js +1 -1
  29. package/dist/esm/pages/CrmPagePersistent.d.ts.map +1 -1
  30. package/dist/esm/pages/CrmPagePersistent.js +1 -1
  31. package/dist/esm/pages/Sales.d.ts.map +1 -1
  32. package/dist/esm/pages/Sales.js +1 -1
  33. package/dist/esm/services/codicent.d.ts +1 -0
  34. package/dist/esm/services/codicent.d.ts.map +1 -1
  35. package/dist/esm/services/codicent.js +1 -1
  36. package/dist/index.d.ts +5 -3
  37. package/package.json +1 -1
package/README.md CHANGED
@@ -76,7 +76,7 @@ initCodicentApp({
76
76
 
77
77
  **Required:**
78
78
  ```js
79
- API_BASE_URL: string // e.g. 'https://codicent.com/'
79
+ API_BASE_URL: string // e.g. 'https://codicent.com/' or 'https://api.yourdomain.com/' (custom domains supported)
80
80
  APP_NAME: string // e.g. 'my-app'
81
81
  APP_PREFIX: string // e.g. 'myapp'
82
82
  USER_PREFIX: string // e.g. 'users'
@@ -95,6 +95,27 @@ USE_REALTIME_SESSION_ENDPOINT: boolean // Use secure session endpoint (default:
95
95
 
96
96
  For AI voice configuration and security, see the [Voice Upgrade Guide](VOICE_UPGRADE_GUIDE.md).
97
97
 
98
+ #### Using Custom Domains
99
+
100
+ The SDK fully supports custom domains for self-hosted or white-label deployments. Simply configure your custom API base URL:
101
+
102
+ ```tsx
103
+ import { initCodicentApp } from 'codicent-app-sdk';
104
+
105
+ // Using a custom domain
106
+ initCodicentApp({
107
+ API_BASE_URL: 'https://api.yourdomain.com/', // Your custom API endpoint
108
+ APP_NAME: 'my-app',
109
+ APP_PREFIX: 'myapp',
110
+ USER_PREFIX: 'users',
111
+ // ... other config
112
+ });
113
+ ```
114
+
115
+ All API calls, including authentication, chat, file uploads, and data operations, will automatically route to your custom domain. Both the SDK and the underlying codicentjs library support custom base URLs.
116
+
117
+ 📄 **For complete custom domain setup, see the [Custom Domain Configuration Guide](docs/CUSTOM_DOMAIN_GUIDE.md)**
118
+
98
119
  ### CRUD Operations
99
120
 
100
121
  The SDK provides comprehensive CRUD (Create, Read, Update, Delete) methods for managing structured data. For detailed documentation and examples, see:
@@ -5,7 +5,7 @@ export interface ButtonProps {
5
5
  appearance?: "primary" | "secondary" | "transparent" | "subtle";
6
6
  size?: "small" | "medium" | "large";
7
7
  className?: string;
8
- icon?: undefined | "DismissRegular" | "CopyRegular" | "ShareRegular" | "SignOut24Regular" | "Payment24Regular" | "SlideText24Regular" | "QuestionCircle24Regular" | "SendFilled" | "AttachRegular" | "ImageRegular" | "CameraRegular" | "LocationRegular" | "LocationFilled" | "AddRegular" | "ChevronRightFilled" | "ArrowClockwiseRegular" | "WandRegular";
8
+ icon?: undefined | "DismissRegular" | "CopyRegular" | "ShareRegular" | "SignOut24Regular" | "Payment24Regular" | "SlideText24Regular" | "QuestionCircle24Regular" | "SendFilled" | "AttachRegular" | "ImageRegular" | "CameraRegular" | "LocationRegular" | "LocationFilled" | "AddRegular" | "ChevronRightFilled" | "ArrowClockwiseRegular" | "WandRegular" | "ArrowLeft24Regular";
9
9
  disabled?: boolean;
10
10
  title?: string;
11
11
  image?: React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA6B/B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAC;IAChE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EACD,SAAS,GACT,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,yBAAyB,GACzB,YAAY,GACZ,eAAe,GACf,cAAc,GACd,eAAe,GACf,iBAAiB,GACjB,gBAAgB,GAChB,YAAY,GACZ,oBAAoB,GACpB,uBAAuB,GACvB,aAAa,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;CACtC;AAsBD,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAWxC,CAAC"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA8B/B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAC;IAChE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EACD,SAAS,GACT,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,yBAAyB,GACzB,YAAY,GACZ,eAAe,GACf,cAAc,GACd,eAAe,GACf,iBAAiB,GACjB,gBAAgB,GAChB,YAAY,GACZ,oBAAoB,GACpB,uBAAuB,GACvB,aAAa,GACb,oBAAoB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;CACtC;AAuBD,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAWxC,CAAC"}
@@ -1 +1 @@
1
- "use strict";var e=require("react/jsx-runtime"),u=require("../node_modules/@griffel/react/makeStyles.esm.js"),s=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-1.js"),r=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-4.js"),l=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-14.js"),i=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-11.js"),n=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-13.js"),o=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-3.js"),a=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-0.js"),t=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-2.js"),c=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-5.js"),d=require("../node_modules/@fluentui/react-button/lib/components/Button/Button.js"),g=require("../node_modules/@griffel/core/mergeClasses.esm.js");const j=u.makeStyles({button:{}}),m={DismissRegular:e.jsx(s.DismissRegular,{}),CopyRegular:e.jsx(s.CopyRegular,{}),ShareRegular:e.jsx(r.ShareRegular,{}),SignOut24Regular:e.jsx(l.SignOut24Regular,{}),Payment24Regular:e.jsx(i.Payment24Regular,{}),SlideText24Regular:e.jsx(l.SlideText24Regular,{}),QuestionCircle24Regular:e.jsx(n.QuestionCircle24Regular,{}),SendFilled:e.jsx(o.SendFilled,{}),AttachRegular:e.jsx(a.AttachRegular,{}),ImageRegular:e.jsx(t.ImageRegular,{}),CameraRegular:e.jsx(a.CameraRegular,{}),LocationRegular:e.jsx(t.LocationRegular,{}),LocationFilled:e.jsx(t.LocationFilled,{}),AddRegular:e.jsx(a.AddRegular,{}),ChevronRightFilled:e.jsx(s.ChevronRightFilled,{}),ArrowClockwiseRegular:e.jsx(a.ArrowClockwiseRegular,{}),WandRegular:e.jsx(c.WandRegular,{})};exports.Button=({children:u,className:s,icon:r,image:l,...i})=>{const n=j();return e.jsx(d.Button,{className:g.mergeClasses(s,n.button),icon:r?{children:m[r]}:l?{children:l}:void 0,...i,children:u})};
1
+ "use strict";var e=require("react/jsx-runtime"),u=require("../node_modules/@griffel/react/makeStyles.esm.js"),r=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-1.js"),s=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-4.js"),l=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-14.js"),i=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-11.js"),n=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-13.js"),o=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-3.js"),a=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-0.js"),t=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-2.js"),c=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-5.js"),d=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-1.js"),g=require("../node_modules/@fluentui/react-button/lib/components/Button/Button.js"),j=require("../node_modules/@griffel/core/mergeClasses.esm.js");const m=u.makeStyles({button:{}}),R={DismissRegular:e.jsx(r.DismissRegular,{}),CopyRegular:e.jsx(r.CopyRegular,{}),ShareRegular:e.jsx(s.ShareRegular,{}),SignOut24Regular:e.jsx(l.SignOut24Regular,{}),Payment24Regular:e.jsx(i.Payment24Regular,{}),SlideText24Regular:e.jsx(l.SlideText24Regular,{}),QuestionCircle24Regular:e.jsx(n.QuestionCircle24Regular,{}),SendFilled:e.jsx(o.SendFilled,{}),AttachRegular:e.jsx(a.AttachRegular,{}),ImageRegular:e.jsx(t.ImageRegular,{}),CameraRegular:e.jsx(a.CameraRegular,{}),LocationRegular:e.jsx(t.LocationRegular,{}),LocationFilled:e.jsx(t.LocationFilled,{}),AddRegular:e.jsx(a.AddRegular,{}),ChevronRightFilled:e.jsx(r.ChevronRightFilled,{}),ArrowClockwiseRegular:e.jsx(a.ArrowClockwiseRegular,{}),WandRegular:e.jsx(c.WandRegular,{}),ArrowLeft24Regular:e.jsx(d.ArrowLeft24Regular,{})};exports.Button=({children:u,className:r,icon:s,image:l,...i})=>{const n=m();return e.jsx(g.Button,{className:j.mergeClasses(r,n.button),icon:s?{children:R[s]}:l?{children:l}:void 0,...i,children:u})};
@@ -1,5 +1,5 @@
1
1
  import { CodicentService } from "../services";
2
- declare const MessageItem: ({ header, description, timestamp, text, image, tags, id, fileIds, codicentService, busy, onEdit, onShowHtmlPreview, }: {
2
+ declare const MessageItem: ({ header, description, timestamp, text, image, tags, id, fileIds, codicentService, busy, onEdit, onShowHtmlPreview, maxHeightPx, }: {
3
3
  id: string;
4
4
  header: string;
5
5
  description: string;
@@ -12,6 +12,7 @@ declare const MessageItem: ({ header, description, timestamp, text, image, tags,
12
12
  onShowHtmlPreview?: (html: string) => void;
13
13
  onEdit?: () => void;
14
14
  timestamp?: string;
15
+ maxHeightPx?: number;
15
16
  }) => import("react/jsx-runtime").JSX.Element;
16
17
  export default MessageItem;
17
18
  //# sourceMappingURL=MessageItem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MessageItem.d.ts","sourceRoot":"","sources":["../../../src/components/MessageItem.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA2H9C,QAAA,MAAM,WAAW,0HAad;IACD,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,4CA+QA,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"MessageItem.d.ts","sourceRoot":"","sources":["../../../src/components/MessageItem.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA2H9C,QAAA,MAAM,WAAW,uIAcd;IACD,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,4CAqRA,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("react-router-dom"),i=require("../services/codicent.js"),s=require("./Markdown.js");require("./Textarea.js"),require("./Button.js"),require("./CompoundButton.js");var o=require("./Text.js");require("./Spinner.js"),require("./TextHeader.js"),require("./TypingIndicator.js"),require("./Dialog.js"),require("./ChatInput.js"),require("./CombinedPlaceholderDialog.js"),require("./ChatMessage.js"),require("./Header.js");var n=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var a=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("../pages/AppFrame.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Login.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("../pages/Purchase.js");var l=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var u=require("./FileThumbnail.js");require("./MessageInput.js"),require("./UploadFile.js"),require("./SnapFooter.js"),require("./Profile.js"),require("./Content.js"),require("./AiInput.js"),require("./SearchBox.js"),require("./HtmlView.js"),require("./Footer.js"),require("./Page.js"),require("./QrCodeDialog.js");var d=require("../node_modules/@griffel/react/makeStyles.esm.js"),c=require("../node_modules/@fluentui/react-card/lib/components/Card/Card.js"),m=require("../node_modules/@fluentui/react-switch/lib/components/Switch/Switch.js"),g=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-2.js"),p=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-0.js"),h=require("../node_modules/@fluentui/react-card/lib/components/CardHeader/CardHeader.js"),j=require("../node_modules/@fluentui/react-skeleton/lib/components/Skeleton/Skeleton.js"),f=require("../node_modules/@fluentui/react-skeleton/lib/components/SkeletonItem/SkeletonItem.js"),x=require("../node_modules/@fluentui/react-text/lib/components/presets/Caption1/Caption1.js"),S=require("../node_modules/@fluentui/tokens/lib/tokens.js"),q=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-7.js");const b=d.makeStyles({iframe:{border:"none",width:"100%",height:"100%"},main:{gap:"36px",display:"flex",flexDirection:"column",flexWrap:"wrap"},card:{minWidth:"300px",maxWidth:"100%",height:"fit-content",marginBottom:"1em",paddingLeft:"1em",maxHeight:"11em",borderRadius:"10px",position:"relative"},expandedCard:{minWidth:"320px",maxWidth:"100%",height:"fit-content",marginBottom:"1em",paddingLeft:"1em",borderRadius:"10px",position:"relative"},text:{margin:"0.5em",whiteSpace:"normal",fontSize:"larger"},caption:{color:S.tokens.colorNeutralForeground3},headerImage:{borderRadius:"4px",maxWidth:"44px",maxHeight:"44px"},rectangle:{margin:0,top:"-5px",left:"-2px",width:"5px",position:"absolute",height:"100%"},fileList:{display:"flex",overflowX:"auto",overflowY:"hidden",scrollbarWidth:"thin",msOverflowStyle:"none",padding:"4px",margin:"0 -4px",maxWidth:"100%",boxSizing:"border-box","&::-webkit-scrollbar":{height:"6px"},"&::-webkit-scrollbar-track":{background:"transparent"},"&::-webkit-scrollbar-thumb":{backgroundColor:S.tokens.colorNeutralStroke1,borderRadius:"3px"}},htmlButton:{fontSize:"1.5em",cursor:"pointer",marginLeft:"0.5em"},headerButton:{fontSize:"1.5em",cursor:"pointer",marginLeft:"0.5em"},iconButtonRow:{position:"absolute",top:"0.5em",right:"0.5em",display:"flex",alignItems:"center",gap:"0.5em",zIndex:2},content:{overflow:"hidden",transition:"max-height 0.3s ease-out",userSelect:"text"},truncated:{maxHeight:"10em"},header:{display:"flex",flexDirection:"row",gap:"0.5em",alignItems:"center"},todoSwitch:{transform:"scale(0.8)","& .fui-Switch__label":{fontSize:"0.75rem"}}});exports.default=({header:d,description:S,timestamp:k,text:w,image:C,tags:I,id:_,fileIds:v,codicentService:O,busy:E,onEdit:N,onShowHtmlPreview:T})=>{const y=b(),A=r.useNavigate(),[R,F]=t.useState(!1),[B,L]=t.useState(!1),[P,H]=t.useState("unknown"),[D,G]=t.useState(!1),M=t.useRef(null),z=Object.keys(a.getConfigValue("LOGBOOK_TAG_DEFINITIONS")),V=z.find((e=>I.includes(e)))||(v.length>0?z.find((e=>"file"===e)):void 0),[K,W]=t.useState([]),$=I.includes("todo"),{t:U}=l.default(),Y=["TYPE","CUSTOMER","CONTACT","SALESPERSON","MESSAGE","COMPANY","PHONE","EMAIL","WEBSITE","INFO","FÖRETAG","ROLE","KONTAKT"],Q=[U("Typ"),U("Kund"),U("Kontakt"),U("Säljare"),U("Meddelande"),U("Företag"),U("Telefon"),U("E-post"),U("Hemsida"),U("Info"),U("Företag"),U("Roll"),U("Kontakt")];t.useEffect((()=>{Promise.all(v.map((e=>O.getFileInfo(e)))).then((e=>{W(e)}))}),[O,W,v]),t.useEffect((()=>{const e=()=>{if(M.current){const e=M.current.scrollHeight>100+(K.length>0?-72:0);L(e)}};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)}),[w,K]),t.useEffect((()=>{if($){(async()=>{try{const e=await O.getTodoStatus(_);H(e)}catch(e){console.error("Error loading todo status:",e),H("unknown")}})()}}),[$,_,O]);const X=()=>F(!R),J=I.includes("chat")&&(w.includes("#function_result")||w.includes("#finish_reason_function_call")),Z=e=>{const t=e.indexOf("```html");if(-1===t)return e;const r=e.indexOf("```",t+7);if(-1===r)return e.substring(t+7);return e.substring(t+7,r)},ee=new n.default(w).data,te=V&&a.getConfigValue("LOGBOOK_TAG_DEFINITIONS")[V].editable,re=V&&a.getConfigValue("LOGBOOK_TAG_DEFINITIONS")[V].imageSize||void 0;return e.jsxs(c.Card,{className:R?y.expandedCard:y.card,style:{backgroundColor:a.getConfigValue("MESSAGE_HIDE_BAR")?V?a.getConfigValue("LOGBOOK_TAG_DEFINITIONS")[V].color:a.getConfigValue("APP_HEADER_COLOR")||"#eee":"#eee"},onClick:I.includes("chat")?e=>{I.includes("chat")&&(e&&e.stopPropagation(),A("/chat?id="+_))}:void 0,children:[!a.getConfigValue("MESSAGE_HIDE_BAR")&&e.jsx("div",{className:y.rectangle,style:{backgroundColor:V?a.getConfigValue("LOGBOOK_TAG_DEFINITIONS")[V].color:a.getConfigValue("APP_HEADER_COLOR")||void 0}}),e.jsxs("div",{className:y.iconButtonRow,children:[$&&e.jsx(m.Switch,{className:y.todoSwitch,checked:"done"===P,onChange:(e,t)=>(async e=>{if(!D){G(!0);try{const t=e?"done":"undone";await O.updateTodoStatus(_,t)&&H(t)}catch(e){console.error("Error updating todo status:",e)}finally{G(!1)}}})(t.checked),disabled:D||"unknown"===P,label:U("done"===P?"Done":"Todo")}),te&&N&&e.jsx(q.Edit20Regular,{className:y.htmlButton,onClick:()=>N()}),T&&!te&&I.includes("html")&&e.jsx(g.FullScreenMaximizeRegular,{className:y.htmlButton,onClick:e=>{e.stopPropagation(),T(Z(w))}}),B&&!I.includes("chat")&&R&&e.jsx(p.ArrowCollapseAllRegular,{className:y.headerButton,onClick:X}),B&&!I.includes("chat")&&!R&&e.jsx(p.ArrowExpandAllRegular,{className:y.headerButton,onClick:X})]}),e.jsx(h.CardHeader,{image:C?e.jsx("img",{className:y.headerImage,src:"app_logo.svg",alt:"User"}):null,header:E?e.jsx(j.Skeleton,{style:{width:"50%"},children:e.jsx(f.SkeletonItem,{})}):e.jsxs("div",{className:y.header,children:[e.jsx(o.Text,{weight:"semibold",children:d}),k&&e.jsx(o.Text,{weight:"regular",children:k})]}),description:e.jsx(x.Caption1,{className:y.caption,children:S})}),e.jsxs("div",{ref:M,className:`${y.content} ${R?"":y.truncated}`,children:[K.length>0&&e.jsx("div",{className:y.fileList,children:K.map((t=>e.jsx(u.FileThumbnail,{file:t,thumbnailSize:re,getImageUrl:i.CodicentService.getImageUrl,onClick:()=>{t.contentType.startsWith("image")?A(`/image?id=${_}&file=${t.id}`):i.CodicentService.downloadFile(t)}},t.id)))}),E?e.jsxs(j.Skeleton,{style:{width:"100%"},children:[e.jsx(f.SkeletonItem,{}),e.jsx(f.SkeletonItem,{}),e.jsx(f.SkeletonItem,{}),e.jsx(f.SkeletonItem,{}),e.jsx(f.SkeletonItem,{})]}):e.jsx("div",{className:y.text,children:I.includes("html")?e.jsx("iframe",{className:y.iframe,title:"html",srcDoc:Z(w),sandbox:"allow-same-origin allow-scripts"}):I.includes("crm")&&0===Object.keys(ee).length?e.jsx(s.default,{content:J?"*"+U("Tänker")+"...*":ee?(()=>{const e=new RegExp(`(${Y.join("|")})\\s*:\\s*`,"gi"),t=w.replace(e,((e,t)=>{const r=Y.indexOf(t.toUpperCase());-1===r&&console.log("Field not found:",t);return`\n**${-1!==r?Q[r]:t}:** `}));return t.trim()})():w}):e.jsx(s.default,{content:J?"*"+U("Tänker")+"...*":ee&&ee&&Object.keys(ee).length>0?Object.keys(ee).map((e=>{const t=Y.indexOf(e.toUpperCase());return`**${-1!==t?Q[t]:e}:** ${ee[e]}\n`})).join("\n"):w})})]})]})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("react-router-dom"),i=require("../services/codicent.js"),s=require("./Markdown.js");require("./Textarea.js"),require("./Button.js"),require("./CompoundButton.js");var o=require("./Text.js");require("./Spinner.js"),require("./TextHeader.js"),require("./TypingIndicator.js"),require("./Dialog.js"),require("./ChatInput.js"),require("./CombinedPlaceholderDialog.js"),require("./ChatMessage.js"),require("./Header.js");var n=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var a=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("../pages/AppFrame.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Login.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("../pages/Purchase.js");var l=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var u=require("./FileThumbnail.js");require("./MessageInput.js"),require("./UploadFile.js"),require("./SnapFooter.js"),require("./Profile.js"),require("./Content.js"),require("./AiInput.js"),require("./SearchBox.js"),require("./HtmlView.js"),require("./Footer.js"),require("./Page.js"),require("./QrCodeDialog.js");var d=require("../node_modules/@griffel/react/makeStyles.esm.js"),c=require("../node_modules/@fluentui/react-card/lib/components/Card/Card.js"),m=require("../node_modules/@fluentui/react-switch/lib/components/Switch/Switch.js"),g=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-2.js"),p=require("../node_modules/@fluentui/react-icons/lib/icons/chunk-0.js"),h=require("../node_modules/@fluentui/react-card/lib/components/CardHeader/CardHeader.js"),j=require("../node_modules/@fluentui/react-skeleton/lib/components/Skeleton/Skeleton.js"),x=require("../node_modules/@fluentui/react-skeleton/lib/components/SkeletonItem/SkeletonItem.js"),f=require("../node_modules/@fluentui/react-text/lib/components/presets/Caption1/Caption1.js"),S=require("../node_modules/@fluentui/tokens/lib/tokens.js"),q=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-7.js");const b=d.makeStyles({iframe:{border:"none",width:"100%",height:"100%"},main:{gap:"36px",display:"flex",flexDirection:"column",flexWrap:"wrap"},card:{minWidth:"300px",maxWidth:"100%",height:"fit-content",marginBottom:"1em",paddingLeft:"1em",maxHeight:"11em",borderRadius:"10px",position:"relative"},expandedCard:{minWidth:"320px",maxWidth:"100%",height:"fit-content",marginBottom:"1em",paddingLeft:"1em",borderRadius:"10px",position:"relative"},text:{margin:"0.5em",whiteSpace:"normal",fontSize:"larger"},caption:{color:S.tokens.colorNeutralForeground3},headerImage:{borderRadius:"4px",maxWidth:"44px",maxHeight:"44px"},rectangle:{margin:0,top:"-5px",left:"-2px",width:"5px",position:"absolute",height:"100%"},fileList:{display:"flex",overflowX:"auto",overflowY:"hidden",scrollbarWidth:"thin",msOverflowStyle:"none",padding:"4px",margin:"0 -4px",maxWidth:"100%",boxSizing:"border-box","&::-webkit-scrollbar":{height:"6px"},"&::-webkit-scrollbar-track":{background:"transparent"},"&::-webkit-scrollbar-thumb":{backgroundColor:S.tokens.colorNeutralStroke1,borderRadius:"3px"}},htmlButton:{fontSize:"1.5em",cursor:"pointer",marginLeft:"0.5em"},headerButton:{fontSize:"1.5em",cursor:"pointer",marginLeft:"0.5em"},iconButtonRow:{position:"absolute",top:"0.5em",right:"0.5em",display:"flex",alignItems:"center",gap:"0.5em",zIndex:2},content:{overflow:"hidden",transition:"max-height 0.3s ease-out",userSelect:"text"},truncated:{maxHeight:"10em"},header:{display:"flex",flexDirection:"row",gap:"0.5em",alignItems:"center"},todoSwitch:{transform:"scale(0.8)","& .fui-Switch__label":{fontSize:"0.75rem"}}});exports.default=({header:d,description:S,timestamp:k,text:w,image:C,tags:v,id:I,fileIds:_,codicentService:O,busy:E,onEdit:N,onShowHtmlPreview:T,maxHeightPx:y})=>{const A=b(),R=r.useNavigate(),[F,B]=t.useState(!1),[P,H]=t.useState(!1),[L,D]=t.useState("unknown"),[G,M]=t.useState(!1),z=t.useRef(null),V=Object.keys(a.getConfigValue("LOGBOOK_TAG_DEFINITIONS")),K=V.find((e=>v.includes(e)))||(_.length>0?V.find((e=>"file"===e)):void 0),[W,$]=t.useState([]),U=v.includes("todo"),{t:Y}=l.default(),Q=["TYPE","CUSTOMER","CONTACT","SALESPERSON","MESSAGE","COMPANY","PHONE","EMAIL","WEBSITE","INFO","FÖRETAG","ROLE","KONTAKT"],X=[Y("Typ"),Y("Kund"),Y("Kontakt"),Y("Säljare"),Y("Meddelande"),Y("Företag"),Y("Telefon"),Y("E-post"),Y("Hemsida"),Y("Info"),Y("Företag"),Y("Roll"),Y("Kontakt")];t.useEffect((()=>{Promise.all(_.map((e=>O.getFileInfo(e)))).then((e=>{$(e)}))}),[O,$,_]),t.useEffect((()=>{const e=()=>{if(z.current){const e=y??100,t=z.current.scrollHeight>e+(W.length>0?-72:0);H(t)}};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)}),[w,W,y]),t.useEffect((()=>{if(U){(async()=>{try{const e=await O.getTodoStatus(I);D(e)}catch(e){console.error("Error loading todo status:",e),D("unknown")}})()}}),[U,I,O]);const J=()=>B(!F),Z=v.includes("chat")&&(w.includes("#function_result")||w.includes("#finish_reason_function_call")),ee=e=>{const t=e.indexOf("```html");if(-1===t)return e;const r=e.indexOf("```",t+7);if(-1===r)return e.substring(t+7);return e.substring(t+7,r)},te=new n.default(w).data,re=K&&a.getConfigValue("LOGBOOK_TAG_DEFINITIONS")[K].editable,ie=K&&a.getConfigValue("LOGBOOK_TAG_DEFINITIONS")[K].imageSize||void 0;return e.jsxs(c.Card,{className:F?A.expandedCard:A.card,style:{backgroundColor:a.getConfigValue("MESSAGE_HIDE_BAR")?K?a.getConfigValue("LOGBOOK_TAG_DEFINITIONS")[K].color:a.getConfigValue("APP_HEADER_COLOR")||"#eee":"#eee",maxHeight:y?`${y}px`:void 0},onClick:v.includes("chat")?e=>{v.includes("chat")&&(e&&e.stopPropagation(),R("/chat?id="+I))}:void 0,children:[!a.getConfigValue("MESSAGE_HIDE_BAR")&&e.jsx("div",{className:A.rectangle,style:{backgroundColor:K?a.getConfigValue("LOGBOOK_TAG_DEFINITIONS")[K].color:a.getConfigValue("APP_HEADER_COLOR")||void 0}}),e.jsxs("div",{className:A.iconButtonRow,children:[U&&e.jsx(m.Switch,{className:A.todoSwitch,checked:"done"===L,onChange:(e,t)=>(async e=>{if(!G){M(!0);try{const t=e?"done":"undone";await O.updateTodoStatus(I,t)&&D(t)}catch(e){console.error("Error updating todo status:",e)}finally{M(!1)}}})(t.checked),disabled:G||"unknown"===L,label:Y("done"===L?"Done":"Todo")}),re&&N&&e.jsx(q.Edit20Regular,{className:A.htmlButton,onClick:()=>N()}),T&&!re&&v.includes("html")&&e.jsx(g.FullScreenMaximizeRegular,{className:A.htmlButton,onClick:e=>{e.stopPropagation(),T(ee(w))}}),P&&!v.includes("chat")&&F&&e.jsx(p.ArrowCollapseAllRegular,{className:A.headerButton,onClick:J}),P&&!v.includes("chat")&&!F&&e.jsx(p.ArrowExpandAllRegular,{className:A.headerButton,onClick:J})]}),e.jsx(h.CardHeader,{image:C?e.jsx("img",{className:A.headerImage,src:"app_logo.svg",alt:"User"}):null,header:E?e.jsx(j.Skeleton,{style:{width:"50%"},children:e.jsx(x.SkeletonItem,{})}):e.jsxs("div",{className:A.header,children:[e.jsx(o.Text,{weight:"semibold",children:d}),k&&e.jsx(o.Text,{weight:"regular",children:k})]}),description:e.jsx(f.Caption1,{className:A.caption,children:S})}),e.jsxs("div",{ref:z,className:`${A.content} ${F?"":A.truncated}`,style:{maxHeight:!F&&y?`${y}px`:void 0},children:[W.length>0&&e.jsx("div",{className:A.fileList,children:W.map((t=>e.jsx(u.FileThumbnail,{file:t,thumbnailSize:ie,getImageUrl:i.CodicentService.getImageUrl,onClick:()=>{t.contentType.startsWith("image")?R(`/image?id=${I}&file=${t.id}`):i.CodicentService.downloadFile(t)}},t.id)))}),E?e.jsxs(j.Skeleton,{style:{width:"100%"},children:[e.jsx(x.SkeletonItem,{}),e.jsx(x.SkeletonItem,{}),e.jsx(x.SkeletonItem,{}),e.jsx(x.SkeletonItem,{}),e.jsx(x.SkeletonItem,{})]}):e.jsx("div",{className:A.text,children:v.includes("html")?e.jsx("iframe",{className:A.iframe,title:"html",srcDoc:ee(w),sandbox:"allow-same-origin allow-scripts"}):v.includes("crm")&&0===Object.keys(te).length?e.jsx(s.default,{content:Z?"*"+Y("Tänker")+"...*":te?(()=>{const e=new RegExp(`(${Q.join("|")})\\s*:\\s*`,"gi"),t=w.replace(e,((e,t)=>{const r=Q.indexOf(t.toUpperCase());-1===r&&console.log("Field not found:",t);return`\n**${-1!==r?X[r]:t}:** `}));return t.trim()})():w}):e.jsx(s.default,{content:Z?"*"+Y("Tänker")+"...*":te&&te&&Object.keys(te).length>0?Object.keys(te).map((e=>{const t=Q.indexOf(e.toUpperCase());return`**${-1!==t?X[t]:e}:** ${te[e]}\n`})).join("\n"):w})})]})]})};
package/dist/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("./services/codicent.js"),r=require("./components/Markdown.js"),t=require("./components/Textarea.js"),o=require("./components/Button.js"),s=require("./components/CompoundButton.js"),a=require("./components/Title.js"),i=require("./components/Text.js"),p=require("./components/Spinner.js"),u=require("./components/Label.js"),n=require("./components/Input.js"),l=require("./components/TextHeader.js"),c=require("./components/TypingIndicator.js"),x=require("./components/Prompt.js"),d=require("./components/ChatInput.js"),m=require("./components/CombinedPlaceholderDialog.js"),j=require("./components/ChatMessage.js"),q=require("./components/Header.js"),g=require("./components/VoiceIcon.js"),h=require("./components/AudioIcon.js"),C=require("./components/FileThumbnail.js"),f=require("./components/MessageInput.js"),S=require("./components/UploadFile.js"),P=require("./components/SnapFooter.js"),k=require("./components/Profile.js"),A=require("./components/MessageItem.js"),T=require("./components/Content.js"),M=require("./components/AiInput.js"),I=require("./components/SearchBox.js"),b=require("./components/HtmlView.js"),v=require("./components/Footer.js"),w=require("./components/Page.js"),F=require("./components/UrlProcessor.js"),L=require("./components/DatePicker.js"),V=require("./components/ColorPicker.js"),D=require("./components/TimePicker.js"),y=require("./components/QrCodeDialog.js"),B=require("./hooks/useStateWithLocalStorage.js"),H=require("./hooks/useAuthState.js"),W=require("./hooks/useChat.js"),R=require("./hooks/useCodicentState.js"),_=require("./hooks/useAudioRecorder.js"),U=require("./hooks/useTools.js"),Q=require("./hooks/useRealtimeVoiceAI.js"),z=require("./hooks/useLocalization.js"),G=require("./hooks/useTemplateVariables.js"),E=require("./hooks/useCodicentApp.js"),J=require("./hooks/useAppStyles.js"),K=require("./hooks/useToaster.js"),N=require("./utils/MessageContent.js"),O=require("./utils/theme.js"),X=require("./utils/logging.js"),Y=require("./utils/withWakeLock.js"),Z=require("./utils/appState.js"),$=require("./_virtual/index.js");require("./lib/wavtools/lib/wav_packer.js"),require("./lib/wavtools/lib/analysis/audio_analysis.js");var ee=require("./lib/wavtools/lib/wav_stream_player.js"),re=require("./lib/wavtools/lib/wav_recorder.js"),te=require("./utils/device.js"),oe=require("./utils/helpers.js"),se=require("./utils/cacheManager.js"),ae=require("./config/index.js"),ie=require("./pages/AppFrame.js"),pe=require("./pages/Chat.js"),ue=require("./pages/Compose.js"),ne=require("./pages/Snap.js"),le=require("./pages/Search.js"),ce=require("./pages/Login.js"),xe=require("./pages/Logout.js"),de=require("./pages/CrmPage.js"),me=require("./pages/CrmPagePersistent.js"),je=require("./pages/ImageView.js"),qe=require("./pages/FormInvite.js"),ge=require("./pages/FormAccept.js"),he=require("./pages/Sales.js"),Ce=require("./pages/HtmlViewer.js"),fe=require("./pages/Purchase.js");exports.CodicentService=e.CodicentService,exports.Markdown=r.default,exports.Textarea=t.Textarea,exports.Button=o.Button,exports.CompoundButton=s.CompoundButton,exports.Title=a.Title,exports.Text=i.Text,exports.Spinner=p.Spinner,exports.Label=u.Label,exports.Input=n.Input,exports.TextHeader=l.default,exports.TypingIndicator=c.default,exports.Prompt=x.default,exports.ChatInput=d.default,exports.CombinedPlaceholderDialog=m.CombinedPlaceholderDialog,exports.ChatMessage=j.default,exports.Header=q.Header,exports.VoiceIcon=g.default,exports.AudioIcon=h.default,exports.FileThumbnail=C.FileThumbnail,exports.MessageInput=f.default,exports.UploadFile=S.default,exports.SnapFooter=P.default,exports.Profile=k.default,exports.MessageItem=A.default,exports.Content=T.default,exports.AiInput=M.default,exports.SearchBox=I.default,exports.HtmlView=b.default,exports.Footer=v.Footer,exports.Page=w.Page,exports.UrlProcessor=F.UrlProcessor,exports.DatePicker=L.DatePicker,exports.ColorPicker=V.ColorPicker,exports.TimePicker=D.TimePicker,exports.QrCodeDialog=y.QrCodeDialog,exports.useStateWithLocalStorage=B.default,exports.useAuthState=H.default,exports.useChat=W.useChat,exports.useCodicentState=R.default,exports.useAudioRecorder=_.useAudioRecorder,exports.useTools=U.default,exports.useRealtimeVoiceAI=Q.default,exports.useLocalization=z.default,exports.useTemplateVariables=G.useTemplateVariables,exports.useCodicentApp=E.useCodicentApp,exports.useAppStyles=J.default,exports.useToaster=K.default,exports.MessageContent=N.default,exports.generateBrandVariants=O.default,exports.log=X.default,exports.withWakeLock=Y.default,exports.AppStateMachine=Z.AppStateMachine,exports.createAppStateMachine=Z.createAppStateMachine,exports.WavStreamPlayer=ee.WavStreamPlayer,exports.WavRecorder=re.WavRecorder,exports.getGpsLocation=te.getGpsLocation,exports.isMobileDevice=te.isMobileDevice,exports.getTimeString=oe.getTimeString,exports.CacheManager=se.CacheManager,exports.stateMachineCacheManager=se.stateMachineCacheManager,exports.AppConfig=ae.AppConfig,exports.getConfigValue=ae.getConfigValue,exports.initCodicentApp=ae.initCodicentApp,exports.AppFrame=ie.default,exports.Chat=pe.default,exports.Compose=ue.Compose,exports.Snap=ne.default,exports.Search=le.default,exports.Login=ce.default,exports.Logout=xe.Logout,exports.CrmPage=de.CrmPage,exports.CrmPagePersistent=me.CrmPagePersistent,exports.ImageView=je.default,exports.FormInvite=qe.default,exports.FormAccept=ge.default,exports.Sales=he.Sales,exports.HtmlViewer=Ce.default,exports.Purchase=fe.Purchase,exports.StateMachine=$.distExports.StateMachine;
1
+ "use strict";var e=require("./services/codicent.js"),r=require("./components/Markdown.js"),t=require("./components/Textarea.js"),s=require("./components/Button.js"),o=require("./components/CompoundButton.js"),a=require("./components/Title.js"),i=require("./components/Text.js"),p=require("./components/Spinner.js"),u=require("./components/Label.js"),n=require("./components/Input.js"),l=require("./components/TextHeader.js"),c=require("./components/TypingIndicator.js"),x=require("./components/Prompt.js"),d=require("./components/ChatInput.js"),m=require("./components/CombinedPlaceholderDialog.js"),j=require("./components/ChatMessage.js"),q=require("./components/Header.js"),g=require("./components/VoiceIcon.js"),h=require("./components/AudioIcon.js"),C=require("./components/FileThumbnail.js"),f=require("./components/MessageInput.js"),S=require("./components/UploadFile.js"),P=require("./components/SnapFooter.js"),k=require("./components/Profile.js"),A=require("./components/MessageItem.js"),T=require("./components/Content.js"),M=require("./components/AiInput.js"),I=require("./components/SearchBox.js"),b=require("./components/HtmlView.js"),v=require("./components/Footer.js"),w=require("./components/Page.js"),F=require("./components/UrlProcessor.js"),L=require("./components/DatePicker.js"),V=require("./components/ColorPicker.js"),B=require("./components/TimePicker.js"),D=require("./components/QrCodeDialog.js"),y=require("./hooks/useStateWithLocalStorage.js"),H=require("./hooks/useAuthState.js"),W=require("./hooks/useChat.js"),R=require("./hooks/useCodicentState.js"),U=require("./hooks/useAudioRecorder.js"),_=require("./hooks/useTools.js"),Q=require("./hooks/useRealtimeVoiceAI.js"),z=require("./hooks/useLocalization.js"),G=require("./hooks/useTemplateVariables.js"),E=require("./hooks/useCodicentApp.js"),J=require("./hooks/useAppStyles.js"),K=require("./hooks/useToaster.js"),N=require("./utils/MessageContent.js"),O=require("./utils/theme.js"),X=require("./utils/logging.js"),Y=require("./utils/withWakeLock.js"),Z=require("./utils/appState.js"),$=require("./_virtual/index.js");require("./lib/wavtools/lib/wav_packer.js"),require("./lib/wavtools/lib/analysis/audio_analysis.js");var ee=require("./lib/wavtools/lib/wav_stream_player.js"),re=require("./lib/wavtools/lib/wav_recorder.js"),te=require("./utils/device.js"),se=require("./utils/helpers.js"),oe=require("./utils/cacheManager.js"),ae=require("./config/index.js"),ie=require("./pages/AppFrame.js"),pe=require("./pages/Chat.js"),ue=require("./pages/Compose.js"),ne=require("./pages/Snap.js"),le=require("./pages/Search.js"),ce=require("./pages/Login.js"),xe=require("./pages/Logout.js"),de=require("./pages/CrmPage.js"),me=require("./pages/CrmPagePersistent.js"),je=require("./pages/ImageView.js"),qe=require("./pages/FormInvite.js"),ge=require("./pages/FormAccept.js"),he=require("./pages/Sales.js"),Ce=require("./pages/HtmlViewer.js"),fe=require("./pages/Purchase.js");exports.CodicentService=e.CodicentService,exports.setBaseUrl=e.setBaseUrl,exports.Markdown=r.default,exports.Textarea=t.Textarea,exports.Button=s.Button,exports.CompoundButton=o.CompoundButton,exports.Title=a.Title,exports.Text=i.Text,exports.Spinner=p.Spinner,exports.Label=u.Label,exports.Input=n.Input,exports.TextHeader=l.default,exports.TypingIndicator=c.default,exports.Prompt=x.default,exports.ChatInput=d.default,exports.CombinedPlaceholderDialog=m.CombinedPlaceholderDialog,exports.ChatMessage=j.default,exports.Header=q.Header,exports.VoiceIcon=g.default,exports.AudioIcon=h.default,exports.FileThumbnail=C.FileThumbnail,exports.MessageInput=f.default,exports.UploadFile=S.default,exports.SnapFooter=P.default,exports.Profile=k.default,exports.MessageItem=A.default,exports.Content=T.default,exports.AiInput=M.default,exports.SearchBox=I.default,exports.HtmlView=b.default,exports.Footer=v.Footer,exports.Page=w.Page,exports.UrlProcessor=F.UrlProcessor,exports.DatePicker=L.DatePicker,exports.ColorPicker=V.ColorPicker,exports.TimePicker=B.TimePicker,exports.QrCodeDialog=D.QrCodeDialog,exports.useStateWithLocalStorage=y.default,exports.useAuthState=H.default,exports.useChat=W.useChat,exports.useCodicentState=R.default,exports.useAudioRecorder=U.useAudioRecorder,exports.useTools=_.default,exports.useRealtimeVoiceAI=Q.default,exports.useLocalization=z.default,exports.useTemplateVariables=G.useTemplateVariables,exports.useCodicentApp=E.useCodicentApp,exports.useAppStyles=J.default,exports.useToaster=K.default,exports.MessageContent=N.default,exports.generateBrandVariants=O.default,exports.log=X.default,exports.withWakeLock=Y.default,exports.AppStateMachine=Z.AppStateMachine,exports.createAppStateMachine=Z.createAppStateMachine,exports.WavStreamPlayer=ee.WavStreamPlayer,exports.WavRecorder=re.WavRecorder,exports.getGpsLocation=te.getGpsLocation,exports.isMobileDevice=te.isMobileDevice,exports.getTimeString=se.getTimeString,exports.CacheManager=oe.CacheManager,exports.stateMachineCacheManager=oe.stateMachineCacheManager,exports.AppConfig=ae.AppConfig,exports.getConfigValue=ae.getConfigValue,exports.initCodicentApp=ae.initCodicentApp,exports.AppFrame=ie.default,exports.Chat=pe.default,exports.Compose=ue.Compose,exports.Snap=ne.default,exports.Search=le.default,exports.Login=ce.default,exports.Logout=xe.Logout,exports.CrmPage=de.CrmPage,exports.CrmPagePersistent=me.CrmPagePersistent,exports.ImageView=je.default,exports.FormInvite=qe.default,exports.FormAccept=ge.default,exports.Sales=he.Sales,exports.HtmlViewer=Ce.default,exports.Purchase=fe.Purchase,exports.StateMachine=$.distExports.StateMachine;
@@ -1 +1 @@
1
- "use strict";const e=require("../utils/createFluentIcon.js").createFluentIcon("ArrowUndo20Regular","20",["M5 2.5a.5.5 0 0 0-1 0v4.9c0 .33.27.6.6.6h4.9a.5.5 0 0 0 0-1H5.9l3.48-3.02a4 4 0 0 1 5.25 6.04l-8.17 7.1a.5.5 0 0 0 .65.76l8.17-7.1a5 5 0 0 0-6.56-7.55L5 6.46V2.5Z"],{flipInRtl:!0});exports.ArrowUndo20Regular=e;
1
+ "use strict";var r=require("../utils/createFluentIcon.js");const e=r.createFluentIcon("ArrowLeft24Regular","24",["M10.73 19.8a.75.75 0 0 0 1.04-1.1l-6.25-5.95h14.73a.75.75 0 0 0 0-1.5H5.52l6.25-5.95a.75.75 0 0 0-1.04-1.1l-7.42 7.08a1 1 0 0 0 0 1.44l7.42 7.07Z"]),a=r.createFluentIcon("ArrowUndo20Regular","20",["M5 2.5a.5.5 0 0 0-1 0v4.9c0 .33.27.6.6.6h4.9a.5.5 0 0 0 0-1H5.9l3.48-3.02a4 4 0 0 1 5.25 6.04l-8.17 7.1a.5.5 0 0 0 .65.76l8.17-7.1a5 5 0 0 0-6.56-7.55L5 6.46V2.5Z"],{flipInRtl:!0});exports.ArrowLeft24Regular=e,exports.ArrowUndo20Regular=a;
@@ -1 +1 @@
1
- {"version":3,"file":"CrmPage.d.ts","sourceRoot":"","sources":["../../../src/pages/CrmPage.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA4D,MAAM,OAAO,CAAC;AASjF,OAAO,EAAE,gBAAgB,EAA+B,aAAa,EAAE,MAAM,UAAU,CAAC;AAsExF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,CA+VhF,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"CrmPage.d.ts","sourceRoot":"","sources":["../../../src/pages/CrmPage.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAWjF,OAAO,EAAE,gBAAgB,EAA+B,aAAa,EAAE,MAAM,UAAU,CAAC;AAyExF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,CAqWhF,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),n=require("../services/codicent.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var t=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var o=require("../components/VoiceIcon.js"),s=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var a=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("../components/FileThumbnail.js");var i=require("../components/MessageInput.js"),u=require("../components/UploadFile.js");require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var l=require("../components/Page.js");require("../components/QrCodeDialog.js"),require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js");var c=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var d=require("../hooks/useToaster.js"),m=require("react-router-dom"),p=require("../node_modules/lodash/lodash.js"),g=require("../node_modules/@griffel/react/makeStyles.esm.js"),j=require("../node_modules/@griffel/core/index.esm.js"),f=require("../node_modules/@fluentui/tokens/lib/tokens.js"),h=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js"),q=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js");const v=g.makeStyles({main:{flexGrow:1,...j.shorthands.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:f.tokens.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"}}),x=({state:g,voice:j})=>{const f=v(),{t:x}=c.default(),[S,k]=r.useState(!1),b=r.useRef(null),C=r.useRef(null),w=r.useRef(null),[y]=r.useState(null),[_,I]=r.useState([]),{service:M}=g,[B,P]=m.useSearchParams(),[U,E]=r.useState(""),[A,F]=r.useState(void 0),T=d.default(),[N,R]=r.useState(void 0),[V,O]=r.useState("info"),$=r.useCallback((e=>{for(const r of e)M.getFileInfo(r).then((e=>{I((r=>[...r,e]))}))}),[M,I]),L=r.useCallback((e=>{const r=new FormData;r.append("file",e),M.uploadFile(e.name,r).then((e=>{$([e])})).catch((()=>{T.notify(x("Error"),x("Error uploading pasted image"),"")}))}),[M,$,T,x]),D=e=>{k(e)};r.useEffect((()=>{const e=B.get("text"),r=B.get("url");e&&(E(e),B.delete("text")),r&&(B.delete("url"),E(((e||"")+" "+r).trim())),P(B,{replace:!0})}),[B,P,E,M,$]);const H=r.useCallback((async e=>{if(!e||e.length<10)return;R(x("Analyserar...")),O("info");const r=await M.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(r){const e=new s.default(r.content);try{const r=JSON.parse(e.content);console.log("json",r);let n=0;for(const e in r)"true"===r[e]&&n++;R(x(4===n?"Allt är med":r.shortSummary||"Något saknas")),O(4===n?"success":"warning")}catch{R("Error: "+e.content),O("error")}}}),[M]),z=r.useMemo((()=>p.lodashExports.debounce(H,2e3)),[H]);return r.useEffect((()=>()=>{z.cancel()}),[z]),e.jsx(l.Page,{hideHeader:!0,children:e.jsxs("div",{className:f.container,style:{backgroundImage:`url(${a.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[j&&a.getConfigValue("SHOW_VOICE_BUTTON")&&e.jsx("div",{className:f.voiceIcon,children:e.jsx(o.default,{voice:j})}),e.jsx(t.default,{title:a.getConfigValue("APP_SAVE_TITLE")?x(a.getConfigValue("APP_SAVE_TITLE")):x("Spara")}),e.jsx(i.default,{defaultText:U,onSend:e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${g.context.name||g.context.user?.email||g.context.nickname||"-"}`}${y?" "+y:""}${_.length>0?"\n":""}${_.map((e=>`#file:${e.id}`)).join(" ")}`,M.sendMessage(e).then((()=>{T.notify(x("Meddelande"),x("Meddelandet är sparat."),"")}))},files:_,onFilesChange:I,isUploading:S,onUploadImage:()=>{C.current?.triggerUpload()},onUploadCamera:()=>{w.current?.triggerUpload()},getImageUrl:n.CodicentService.getImageUrl,hasLocation:!!y,disableSend:!0,rows:9,placeholder:x("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==A&&(F(e),e&&e.trim().length>0?z(e):(R(void 0),z.cancel()))},onImagePasted:L}),N&&e.jsxs("div",{className:f.review,children:[e.jsx("h3",{children:x("Analys")}),e.jsx(h.MessageBar,{intent:V,layout:"multiline",children:e.jsx(q.MessageBarBody,{children:x(N)})})]}),e.jsx(u.default,{ref:b,onFileUploaded:$,onUploading:D,multiple:!0,codicentService:M}),e.jsx(u.default,{codicentService:M,ref:C,onFileUploaded:$,onUploading:D,multiple:!0,accept:"image/*"}),e.jsx(u.default,{codicentService:M,ref:w,onFileUploaded:$,onUploading:D,multiple:!0,accept:"image/*",capture:"environment"})]})})};exports.CrmPage=x,exports.default=x;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),n=require("../services/codicent.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var t=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var o=require("../components/VoiceIcon.js"),s=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var a=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("../components/FileThumbnail.js");var i=require("../components/MessageInput.js"),u=require("../components/UploadFile.js");require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var l=require("../components/Page.js");require("../components/QrCodeDialog.js"),require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js");var c=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var d=require("../hooks/useToaster.js"),m=require("react-router-dom"),p=require("../node_modules/lodash/lodash.js"),g=require("../node_modules/@griffel/react/makeStyles.esm.js"),j=require("../node_modules/@griffel/core/index.esm.js"),f=require("../node_modules/@fluentui/tokens/lib/tokens.js"),h=require("../node_modules/@fluentui/react-button/lib/components/Button/Button.js"),q=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js"),v=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js"),x=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-1.js");const k=g.makeStyles({main:{flexGrow:1,...j.shorthands.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:f.tokens.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"}}),S=({state:g,voice:j})=>{const f=k(),{t:S}=c.default(),b=m.useNavigate(),[C,w]=r.useState(!1),y=r.useRef(null),_=r.useRef(null),B=r.useRef(null),[I]=r.useState(null),[M,P]=r.useState([]),{service:U}=g,[A,E]=m.useSearchParams(),[N,T]=r.useState(""),[F,R]=r.useState(void 0),V=d.default(),[O,L]=r.useState(void 0),[$,z]=r.useState("info"),D=r.useCallback((e=>{for(const r of e)U.getFileInfo(r).then((e=>{P((r=>[...r,e]))}))}),[U,P]),H=r.useCallback((e=>{const r=new FormData;r.append("file",e),U.uploadFile(e.name,r).then((e=>{D([e])})).catch((()=>{V.notify(S("Error"),S("Error uploading pasted image"),"")}))}),[U,D,V,S]),G=e=>{w(e)};r.useEffect((()=>{const e=A.get("text"),r=A.get("url");e&&(T(e),A.delete("text")),r&&(A.delete("url"),T(((e||"")+" "+r).trim())),E(A,{replace:!0})}),[A,E,T,U,D]);const W=r.useCallback((async e=>{if(!e||e.length<10)return;L(S("Analyserar...")),z("info");const r=await U.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(r){const e=new s.default(r.content);try{const r=JSON.parse(e.content);console.log("json",r);let n=0;for(const e in r)"true"===r[e]&&n++;L(S(4===n?"Allt är med":r.shortSummary||"Något saknas")),z(4===n?"success":"warning")}catch{L("Error: "+e.content),z("error")}}}),[U]),J=r.useMemo((()=>p.lodashExports.debounce(W,2e3)),[W]);return r.useEffect((()=>()=>{J.cancel()}),[J]),e.jsx(l.Page,{hideHeader:!0,children:e.jsxs("div",{className:f.container,style:{backgroundImage:`url(${a.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[j&&a.getConfigValue("SHOW_VOICE_BUTTON")&&e.jsx("div",{className:f.voiceIcon,children:e.jsx(o.default,{voice:j})}),e.jsx("div",{className:f.backButton,children:e.jsx(h.Button,{appearance:"subtle",icon:e.jsx(x.ArrowLeft24Regular,{}),onClick:()=>b(-1),children:S("Tillbaka")})}),e.jsx(t.default,{title:a.getConfigValue("APP_SAVE_TITLE")?S(a.getConfigValue("APP_SAVE_TITLE")):S("Spara")}),e.jsx(i.default,{defaultText:N,onSend:e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${g.context.name||g.context.user?.email||g.context.nickname||"-"}`}${I?" "+I:""}${M.length>0?"\n":""}${M.map((e=>`#file:${e.id}`)).join(" ")}`,U.sendMessage(e).then((()=>{V.notify(S("Meddelande"),S("Meddelandet är sparat."),"")}))},files:M,onFilesChange:P,isUploading:C,onUploadImage:()=>{_.current?.triggerUpload()},onUploadCamera:()=>{B.current?.triggerUpload()},getImageUrl:n.CodicentService.getImageUrl,hasLocation:!!I,disableSend:!0,rows:9,placeholder:S("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==F&&(R(e),e&&e.trim().length>0?J(e):(L(void 0),J.cancel()))},onImagePasted:H}),O&&e.jsxs("div",{className:f.review,children:[e.jsx("h3",{children:S("Analys")}),e.jsx(q.MessageBar,{intent:$,layout:"multiline",children:e.jsx(v.MessageBarBody,{children:S(O)})})]}),e.jsx(u.default,{ref:y,onFileUploaded:D,onUploading:G,multiple:!0,codicentService:U}),e.jsx(u.default,{codicentService:U,ref:_,onFileUploaded:D,onUploading:G,multiple:!0,accept:"image/*"}),e.jsx(u.default,{codicentService:U,ref:B,onFileUploaded:D,onUploading:G,multiple:!0,accept:"image/*",capture:"environment"})]})})};exports.CrmPage=S,exports.default=S;
@@ -1 +1 @@
1
- {"version":3,"file":"CrmPagePersistent.d.ts","sourceRoot":"","sources":["../../../src/pages/CrmPagePersistent.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAWjF,OAAO,EAAE,gBAAgB,EAA+B,aAAa,EAAE,MAAM,UAAU,CAAC;AAiHxF,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,CAqT1F,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"CrmPagePersistent.d.ts","sourceRoot":"","sources":["../../../src/pages/CrmPagePersistent.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAajF,OAAO,EAAE,gBAAgB,EAA+B,aAAa,EAAE,MAAM,UAAU,CAAC;AAoHxF,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,CA2T1F,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),t=require("../services/codicent.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var o=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var n=require("../components/VoiceIcon.js"),s=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var a=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var i=require("../utils/device.js");require("../components/FileThumbnail.js");var l=require("../components/MessageInput.js"),c=require("../components/UploadFile.js");require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var d=require("../components/Page.js");require("../components/QrCodeDialog.js"),require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js");var u=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var p=require("../hooks/useToaster.js"),m=require("react-router-dom"),g=require("../node_modules/lodash/lodash.js"),h=require("../node_modules/@griffel/react/makeStyles.esm.js"),f=require("../node_modules/@griffel/core/index.esm.js"),j=require("../node_modules/@fluentui/tokens/lib/tokens.js"),x=require("../node_modules/@fluentui/react-text/lib/components/Text/Text.js"),S=require("../node_modules/@fluentui/react-spinner/lib/components/Spinner/Spinner.js"),v=require("../node_modules/@fluentui/react-card/lib/components/Card/Card.js"),q=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js"),y=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js");const k=h.makeStyles({main:{flexGrow:1,...f.shorthands.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...f.shorthands.gap("16px"),...f.shorthands.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...f.shorthands.gap("16px"),...f.shorthands.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",...f.shorthands.gap("8px"),overflowY:"auto",...f.shorthands.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...f.shorthands.gap("8px"),overflowY:"auto",...f.shorthands.padding("8px"),maxHeight:"300px"},historyCard:{...f.shorthands.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:j.tokens.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...f.shorthands.gap("4px")},historyDate:{fontSize:j.tokens.fontSizeBase200,color:j.tokens.colorNeutralForeground3},historyText:{fontSize:j.tokens.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:j.tokens.fontSizeBase400,fontWeight:j.tokens.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:j.tokens.colorNeutralForeground3,padding:"20px"}}),b=({state:h,voice:f})=>{const j=k(),{t:b}=u.default(),[C,w]=r.useState(!1),M=r.useRef(null),T=r.useRef(null),_=r.useRef(null),[N]=r.useState(null),[B,I]=r.useState([]),{service:E}=h,[P,D]=m.useSearchParams(),[A,F]=r.useState(""),[U,$]=r.useState(void 0),O=p.default(),[R,V]=r.useState(void 0),[z,L]=r.useState("info"),[H,W]=r.useState([]),[G,J]=r.useState(!1),Y=i.isMobileDevice(),K=r.useCallback((e=>{for(const r of e)E.getFileInfo(r).then((e=>{I((r=>[...r,e]))}))}),[E,I]),Q=r.useCallback((e=>{const r=new FormData;r.append("file",e),E.uploadFile(e.name,r).then((e=>{K([e])})).catch((()=>{O.notify(b("Error"),b("Error uploading pasted image"),"")}))}),[E,K,O,b]),X=e=>{w(e)},Z=r.useCallback((async()=>{J(!0);try{const e=await E.getMessages(["crm"]);W(e)}catch(e){console.error("Error loading CRM messages:",e),O.notify(b("Error"),b("Failed to load CRM messages"),"","error")}finally{J(!1)}}),[E,O,b]);r.useEffect((()=>{Z()}),[Z]),r.useEffect((()=>{const e=P.get("text"),r=P.get("url");e&&(F(e),P.delete("text")),r&&(P.delete("url"),F(((e||"")+" "+r).trim())),D(P,{replace:!0})}),[P,D,F,E,K]);const ee=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${h.context.name||h.context.user?.email||h.context.nickname||"-"}`}${N?" "+N:""}${B.length>0?"\n":""}${B.map((e=>`#file:${e.id}`)).join(" ")}`,E.sendMessage(e).then((()=>{O.notify(b("Meddelande"),b("Meddelandet är sparat."),""),Z(),$(""),V(void 0)}))},re=r.useCallback((async e=>{if(!e||e.length<10)return;V(b("Analyserar...")),L("info");const r=await E.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(r){const e=new s.default(r.content);try{const r=JSON.parse(e.content);console.log("json",r);let t=0;for(const e in r)"true"===r[e]&&t++;V(b(4===t?"Allt är med":r.shortSummary||"Något saknas")),L(4===t?"success":"warning")}catch{V("Error: "+e.content),L("error")}}}),[E,b]),te=r.useMemo((()=>g.lodashExports.debounce(re,2e3)),[re]);r.useEffect((()=>()=>{te.cancel()}),[te]);const oe=e=>{const r=new Date,t=new Date(e),o=r.getTime()-t.getTime(),n=Math.floor(o/6e4),s=Math.floor(o/36e5),a=Math.floor(o/864e5);return n<1?b("Just now"):n<60?`${n} ${b("minutes ago")}`:s<24?`${s} ${b("hours ago")}`:a<7?`${a} ${b("days ago")}`:t.toLocaleDateString()},ne=e=>{const r=e.split("\n").filter((e=>!e.startsWith("#")&&!e.startsWith("SALESPERSON:")&&e.trim().length>0)).join("\n");return r.substring(0,150)+(r.length>150?"...":"")},se=()=>e.jsxs("div",{className:Y?j.historySectionMobile:j.historySection,children:[e.jsx(x.Text,{className:j.historyTitle,children:b("Tidigare sparade")}),G?e.jsx("div",{className:j.emptyState,children:e.jsx(S.Spinner,{size:"small"})}):0===H.length?e.jsx("div",{className:j.emptyState,children:e.jsx(x.Text,{children:b("Inga sparade meddelanden än")})}):H.map((r=>e.jsx(v.Card,{className:j.historyCard,onClick:()=>(e=>{const r=ne(e.content);$(r)})(r),children:e.jsxs("div",{className:j.historyCardContent,children:[e.jsx(x.Text,{className:j.historyDate,children:oe(r.createdAt)}),e.jsx(x.Text,{className:j.historyText,children:ne(r.content)})]})},r.id)))]});return e.jsx(d.Page,{hideHeader:!0,children:e.jsxs("div",{className:Y?j.containerMobile:j.container,children:[!Y&&se(),e.jsxs("div",{className:Y?j.inputSectionMobile:j.inputSection,style:Y?void 0:{backgroundImage:`url(${a.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[f&&a.getConfigValue("SHOW_VOICE_BUTTON")&&e.jsx("div",{className:j.voiceIcon,children:e.jsx(n.default,{voice:f})}),e.jsx(o.default,{title:a.getConfigValue("APP_SAVE_TITLE")?b(a.getConfigValue("APP_SAVE_TITLE")):b("Spara")}),e.jsx(l.default,{defaultText:A,onSend:ee,files:B,onFilesChange:I,isUploading:C,onUploadImage:()=>{T.current?.triggerUpload()},onUploadCamera:()=>{_.current?.triggerUpload()},getImageUrl:t.CodicentService.getImageUrl,hasLocation:!!N,disableSend:!0,rows:9,placeholder:b("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==U&&($(e),e&&e.trim().length>0?te(e):(V(void 0),te.cancel()))},onImagePasted:Q}),R&&e.jsxs("div",{className:j.review,children:[e.jsx("h3",{children:b("Analys")}),e.jsx(q.MessageBar,{intent:z,layout:"multiline",children:e.jsx(y.MessageBarBody,{children:b(R)})})]}),e.jsx(c.default,{ref:M,onFileUploaded:K,onUploading:X,multiple:!0,codicentService:E}),e.jsx(c.default,{codicentService:E,ref:T,onFileUploaded:K,onUploading:X,multiple:!0,accept:"image/*"}),e.jsx(c.default,{codicentService:E,ref:_,onFileUploaded:K,onUploading:X,multiple:!0,accept:"image/*",capture:"environment"})]}),Y&&se()]})})};exports.CrmPagePersistent=b,exports.default=b;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),t=require("../services/codicent.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var n=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var o=require("../components/VoiceIcon.js"),s=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var a=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var i=require("../utils/device.js");require("../components/FileThumbnail.js");var l=require("../components/MessageInput.js"),c=require("../components/UploadFile.js");require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var u=require("../components/Page.js");require("../components/QrCodeDialog.js"),require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js");var d=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var p=require("../hooks/useToaster.js"),m=require("react-router-dom"),g=require("../node_modules/lodash/lodash.js"),h=require("../node_modules/@griffel/react/makeStyles.esm.js"),f=require("../node_modules/@griffel/core/index.esm.js"),j=require("../node_modules/@fluentui/tokens/lib/tokens.js"),x=require("../node_modules/@fluentui/react-text/lib/components/Text/Text.js"),S=require("../node_modules/@fluentui/react-spinner/lib/components/Spinner/Spinner.js"),v=require("../node_modules/@fluentui/react-card/lib/components/Card/Card.js"),q=require("../node_modules/@fluentui/react-button/lib/components/Button/Button.js"),k=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js"),y=require("../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js"),b=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-1.js");const C=h.makeStyles({main:{flexGrow:1,...f.shorthands.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...f.shorthands.gap("16px"),...f.shorthands.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...f.shorthands.gap("16px"),...f.shorthands.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",...f.shorthands.gap("8px"),overflowY:"auto",...f.shorthands.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...f.shorthands.gap("8px"),overflowY:"auto",...f.shorthands.padding("8px"),maxHeight:"300px"},historyCard:{...f.shorthands.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:j.tokens.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...f.shorthands.gap("4px")},historyDate:{fontSize:j.tokens.fontSizeBase200,color:j.tokens.colorNeutralForeground3},historyText:{fontSize:j.tokens.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:j.tokens.fontSizeBase400,fontWeight:j.tokens.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:j.tokens.colorNeutralForeground3,padding:"20px"},backButton:{marginBottom:"10px"}}),w=({state:h,voice:f})=>{const j=C(),{t:w}=d.default(),M=m.useNavigate(),[B,_]=r.useState(!1),N=r.useRef(null),T=r.useRef(null),I=r.useRef(null),[E]=r.useState(null),[P,A]=r.useState([]),{service:D}=h,[F,U]=m.useSearchParams(),[$,R]=r.useState(""),[O,z]=r.useState(void 0),V=p.default(),[L,H]=r.useState(void 0),[W,G]=r.useState("info"),[J,Y]=r.useState([]),[K,Q]=r.useState(!1),X=i.isMobileDevice(),Z=r.useCallback((e=>{for(const r of e)D.getFileInfo(r).then((e=>{A((r=>[...r,e]))}))}),[D,A]),ee=r.useCallback((e=>{const r=new FormData;r.append("file",e),D.uploadFile(e.name,r).then((e=>{Z([e])})).catch((()=>{V.notify(w("Error"),w("Error uploading pasted image"),"")}))}),[D,Z,V,w]),re=e=>{_(e)},te=r.useCallback((async()=>{Q(!0);try{const e=await D.getMessages(["crm"]);Y(e)}catch(e){console.error("Error loading CRM messages:",e),V.notify(w("Error"),w("Failed to load CRM messages"),"","error")}finally{Q(!1)}}),[D,V,w]);r.useEffect((()=>{te()}),[te]),r.useEffect((()=>{const e=F.get("text"),r=F.get("url");e&&(R(e),F.delete("text")),r&&(F.delete("url"),R(((e||"")+" "+r).trim())),U(F,{replace:!0})}),[F,U,R,D,Z]);const ne=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${h.context.name||h.context.user?.email||h.context.nickname||"-"}`}${E?" "+E:""}${P.length>0?"\n":""}${P.map((e=>`#file:${e.id}`)).join(" ")}`,D.sendMessage(e).then((()=>{V.notify(w("Meddelande"),w("Meddelandet är sparat."),""),te(),z(""),H(void 0)}))},oe=r.useCallback((async e=>{if(!e||e.length<10)return;H(w("Analyserar...")),G("info");const r=await D.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(r){const e=new s.default(r.content);try{const r=JSON.parse(e.content);console.log("json",r);let t=0;for(const e in r)"true"===r[e]&&t++;H(w(4===t?"Allt är med":r.shortSummary||"Något saknas")),G(4===t?"success":"warning")}catch{H("Error: "+e.content),G("error")}}}),[D,w]),se=r.useMemo((()=>g.lodashExports.debounce(oe,2e3)),[oe]);r.useEffect((()=>()=>{se.cancel()}),[se]);const ae=e=>{const r=new Date,t=new Date(e),n=r.getTime()-t.getTime(),o=Math.floor(n/6e4),s=Math.floor(n/36e5),a=Math.floor(n/864e5);return o<1?w("Just now"):o<60?`${o} ${w("minutes ago")}`:s<24?`${s} ${w("hours ago")}`:a<7?`${a} ${w("days ago")}`:t.toLocaleDateString()},ie=e=>{const r=e.split("\n").filter((e=>!e.startsWith("#")&&!e.startsWith("SALESPERSON:")&&e.trim().length>0)).join("\n");return r.substring(0,150)+(r.length>150?"...":"")},le=()=>e.jsxs("div",{className:X?j.historySectionMobile:j.historySection,children:[e.jsx(x.Text,{className:j.historyTitle,children:w("Tidigare sparade")}),K?e.jsx("div",{className:j.emptyState,children:e.jsx(S.Spinner,{size:"small"})}):0===J.length?e.jsx("div",{className:j.emptyState,children:e.jsx(x.Text,{children:w("Inga sparade meddelanden än")})}):J.map((r=>e.jsx(v.Card,{className:j.historyCard,onClick:()=>(e=>{const r=ie(e.content);z(r)})(r),children:e.jsxs("div",{className:j.historyCardContent,children:[e.jsx(x.Text,{className:j.historyDate,children:ae(r.createdAt)}),e.jsx(x.Text,{className:j.historyText,children:ie(r.content)})]})},r.id)))]});return e.jsx(u.Page,{hideHeader:!0,children:e.jsxs("div",{className:X?j.containerMobile:j.container,children:[!X&&le(),e.jsxs("div",{className:X?j.inputSectionMobile:j.inputSection,style:X?void 0:{backgroundImage:`url(${a.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[f&&a.getConfigValue("SHOW_VOICE_BUTTON")&&e.jsx("div",{className:j.voiceIcon,children:e.jsx(o.default,{voice:f})}),e.jsx("div",{className:j.backButton,children:e.jsx(q.Button,{appearance:"subtle",icon:e.jsx(b.ArrowLeft24Regular,{}),onClick:()=>M(-1),children:w("Tillbaka")})}),e.jsx(n.default,{title:a.getConfigValue("APP_SAVE_TITLE")?w(a.getConfigValue("APP_SAVE_TITLE")):w("Spara")}),e.jsx(l.default,{defaultText:$,onSend:ne,files:P,onFilesChange:A,isUploading:B,onUploadImage:()=>{T.current?.triggerUpload()},onUploadCamera:()=>{I.current?.triggerUpload()},getImageUrl:t.CodicentService.getImageUrl,hasLocation:!!E,disableSend:!0,rows:9,placeholder:w("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==O&&(z(e),e&&e.trim().length>0?se(e):(H(void 0),se.cancel()))},onImagePasted:ee}),L&&e.jsxs("div",{className:j.review,children:[e.jsx("h3",{children:w("Analys")}),e.jsx(k.MessageBar,{intent:W,layout:"multiline",children:e.jsx(y.MessageBarBody,{children:w(L)})})]}),e.jsx(c.default,{ref:N,onFileUploaded:Z,onUploading:re,multiple:!0,codicentService:D}),e.jsx(c.default,{codicentService:D,ref:T,onFileUploaded:Z,onUploading:re,multiple:!0,accept:"image/*"}),e.jsx(c.default,{codicentService:D,ref:I,onFileUploaded:Z,onUploading:re,multiple:!0,accept:"image/*",capture:"environment"})]}),X&&le()]})})};exports.CrmPagePersistent=w,exports.default=w;
@@ -1 +1 @@
1
- {"version":3,"file":"Sales.d.ts","sourceRoot":"","sources":["../../../src/pages/Sales.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAmB,MAAM,UAAU,CAAC;AAyF7D,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAkNvD,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Sales.d.ts","sourceRoot":"","sources":["../../../src/pages/Sales.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAKhE,OAAO,EAAE,gBAAgB,EAAmB,MAAM,UAAU,CAAC;AA+F7D,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAoNvD,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),o=require("react");require("../components/Markdown.js");var s=require("../components/Textarea.js"),r=require("../components/Button.js");require("../components/CompoundButton.js");var t=require("../components/Text.js");require("../components/Spinner.js");var n=require("../components/Input.js");require("../components/TextHeader.js"),require("../components/TypingIndicator.js");var i=require("../components/Dialog.js");require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js"),require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var a=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Purchase.js");var l=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var c=require("../components/Page.js"),d=require("../components/QrCodeDialog.js"),u=require("../node_modules/@griffel/react/makeStyles.esm.js"),p=require("../node_modules/@fluentui/tokens/lib/tokens.js"),m=require("../node_modules/@griffel/core/index.esm.js"),g=require("../node_modules/@fluentui/react-image/lib/components/Image/Image.js"),j=require("../node_modules/@griffel/core/mergeClasses.esm.js");const h=u.makeStyles({root:{display:"flex",flexDirection:"column",height:"100%",touchAction:"pan-y"},header:{display:"flex",justifyContent:"space-between",alignItems:"center",color:p.tokens.colorNeutralForegroundOnBrand,...m.shorthands.padding("10px","20px")},logo:{maxWidth:"100px",maxHeight:"50px",height:"auto",cursor:"pointer"},inputContainer:{display:"flex",justifyContent:"flex-end",alignItems:"center",maxWidth:"300px",width:"200px",paddingLeft:"10px"},dashboard:{display:"flex",justifyContent:"space-around",width:"100%",marginTop:"20px"},statBox:{...m.shorthands.padding("10px"),...m.shorthands.borderRadius("12px"),minWidth:"50px",textAlign:"center",color:"white"},buttonContainer:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",gap:"30px",alignItems:"center",...m.shorthands.padding("20px")},actionButton:{width:"14rem",minWidth:"15rem",height:"3rem"},textAreaContainer:{display:"flex",flexDirection:"column",gap:"10px"},opened:{backgroundColor:"#1a5614"},not_home:{backgroundColor:"#f44336"},sales:{backgroundColor:"#2196F3"},call_back:{backgroundColor:"#FF9800"}}),x={opened:"#1a5614",not_home:"#f44336",sales:"#2196F3",call_back:"#FF9800"},q=()=>{const u=h(),{t:m}=l.default(),[q,f]=o.useState(""),[C,v]=o.useState(),[k,_]=o.useState({opened:0,not_home:0,sales:0,call_back:0}),[b,w]=o.useState([]),[y,I]=o.useState(!1),[S,A]=o.useState(""),[D,P]=o.useState(""),[F,B]=o.useState(""),[$,N]=o.useState(!1),[M,T]=o.useState(!1),[O,H]=o.useState(!1),L={backgroundColor:a.getConfigValue("APP_HEADER_COLOR")||p.tokens.colorBrandBackground},V=o.useCallback((()=>new Promise((e=>{navigator.geolocation?navigator.geolocation.getCurrentPosition((o=>{const s=`#position (${o.coords.latitude},${o.coords.longitude})`;e(s)})):e(void 0)}))),[v]);o.useEffect((()=>{window.Codicent.getDataMessages({codicent:a.getConfigValue("APP_NAME"),tags:["sales_code"]}).then((e=>{e=e.filter((e=>"1"!==e.data.inactive)),w(e)})).catch(console.error),V()}),[]);const z=async()=>{if(!q)return;const e=["not_home","sales","call_back","opened"],o=new Date;o.setHours(0,0,0,0);const s={...k};for(const r of e){const e=await window.Codicent.getMessages({search:`#${r} #sales_code_${q}`,afterTimestamp:o,length:1e4});s[r]=e.filter((e=>e.content.includes(`#${r} `)&&e.content.includes(`#sales_code_${q}`))).length}_(s)},E=async(e,o="")=>{const s=await V();console.log("Got position",s);const r=`@${a.getConfigValue("APP_NAME")} #sales_code_${q} #${e} ${s||""} ${o.trim().length>0?"#comment ":""}${o}`.trim();await window.Codicent.postMessage({message:r}),z()};return e.jsx(c.Page,{hideHeader:!0,children:e.jsxs("div",{className:u.root,children:[e.jsxs("div",{className:u.header,style:L,children:[e.jsx(g.Image,{src:D||a.getConfigValue("APP_ICON_URL")||"https://via.placeholder.com/100",className:u.logo,onClick:()=>{D?H(!0):F&&T(!0)}}),e.jsx("div",{className:u.inputContainer,children:e.jsx(n.Input,{value:q,onChange:e=>f(e.target.value),onBlur:()=>{const e=b.find((e=>e.data.code===q));if(e)P(`https://codicent.com/app/GetImage?fileId=${e.fileId}&width=100`),B(e.data.link),N(!0),z();else{const e=b.find((e=>e.data.code2===q.toUpperCase()));e?(P(`https://codicent.com/app/GetImage?fileId=${e.fileIds&&e.fileIds.length>1?e.fileIds[1]:e.fileId}&width=100`),B(e.data.link2),N(!0),z()):(N(!1),alert(m("Fel försäljningskod!")))}},placeholder:m("Fyll i försäljningskod"),maxLength:16,size:"large"})})]}),$&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:u.dashboard,children:Object.keys(k).map((o=>{return e.jsx("div",{className:(s=o,j.mergeClasses(u.statBox,u[s])),children:e.jsx(t.Text,{weight:"bold",size:400,children:k[o]})},o);var s}))}),e.jsx("div",{className:u.buttonContainer,children:Object.entries(x).map((([o,s])=>e.jsx(r.Button,{size:"large",className:u.actionButton,style:{backgroundColor:s,color:"white"},onClick:()=>{E(o),"opened"===o&&I(!0),"sales"===o&&T(!0)},children:o.charAt(0).toUpperCase()+o.slice(1).replace("_"," ")},o)))}),e.jsxs(i.Dialog,{open:y,children:[e.jsx(i.DialogTitle,{children:m("Skriv in avvikelse")}),e.jsx(i.DialogContent,{children:e.jsx("div",{className:u.textAreaContainer,children:e.jsx(s.Textarea,{value:S,onChange:e=>A(e.target.value),placeholder:m("Skriv din text här..."),rows:4,size:"large"})})}),e.jsx(i.DialogActions,{children:e.jsx(r.Button,{appearance:"primary",onClick:()=>{E("anomaly",`\n${S}`),I(!1),A("")},children:m("Spara")})})]}),e.jsxs(i.Dialog,{open:M,children:[e.jsx(i.DialogTitle,{children:m("Godkännande")}),e.jsx(i.DialogContent,{children:m("Är kunden över 23 år?")}),e.jsxs(i.DialogActions,{children:[e.jsx(r.Button,{appearance:"primary",onClick:()=>window.open(F,"_blank"),children:m("OK")}),e.jsx(r.Button,{appearance:"secondary",onClick:()=>T(!1),children:m("Avbryt")})]})]})]}),e.jsx(d.QrCodeDialog,{isOpen:O,onDismiss:()=>H(!1),imageUrl:D})]})})};exports.Sales=q,exports.default=q;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),o=require("react"),s=require("react-router-dom");require("../components/Markdown.js");var r=require("../components/Textarea.js"),t=require("../components/Button.js");require("../components/CompoundButton.js");var n=require("../components/Text.js");require("../components/Spinner.js");var a=require("../components/Input.js");require("../components/TextHeader.js"),require("../components/TypingIndicator.js");var i=require("../components/Dialog.js");require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js"),require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var l=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./AppFrame.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Purchase.js");var c=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var d=require("../components/Page.js"),u=require("../components/QrCodeDialog.js"),p=require("../node_modules/@griffel/react/makeStyles.esm.js"),m=require("../node_modules/@fluentui/tokens/lib/tokens.js"),g=require("../node_modules/@griffel/core/index.esm.js"),j=require("../node_modules/@fluentui/react-image/lib/components/Image/Image.js"),h=require("../node_modules/@griffel/core/mergeClasses.esm.js");const x=p.makeStyles({root:{display:"flex",flexDirection:"column",height:"100%",touchAction:"pan-y"},header:{display:"flex",justifyContent:"space-between",alignItems:"center",color:m.tokens.colorNeutralForegroundOnBrand,...g.shorthands.padding("10px","20px")},logo:{maxWidth:"100px",maxHeight:"50px",height:"auto",cursor:"pointer"},inputContainer:{display:"flex",justifyContent:"flex-end",alignItems:"center",maxWidth:"300px",width:"200px",paddingLeft:"10px"},dashboard:{display:"flex",justifyContent:"space-around",width:"100%",marginTop:"20px"},statBox:{...g.shorthands.padding("10px"),...g.shorthands.borderRadius("12px"),minWidth:"50px",textAlign:"center",color:"white"},buttonContainer:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",gap:"30px",alignItems:"center",...g.shorthands.padding("20px")},actionButton:{width:"14rem",minWidth:"15rem",height:"3rem"},textAreaContainer:{display:"flex",flexDirection:"column",gap:"10px"},opened:{backgroundColor:"#1a5614"},not_home:{backgroundColor:"#f44336"},sales:{backgroundColor:"#2196F3"},call_back:{backgroundColor:"#FF9800"},backButton:{position:"absolute",top:"10px",left:"10px",zIndex:1e3}}),q={opened:"#1a5614",not_home:"#f44336",sales:"#2196F3",call_back:"#FF9800"},f=()=>{const p=x(),{t:g}=c.default(),f=s.useNavigate(),[C,v]=o.useState(""),[k,b]=o.useState(),[_,w]=o.useState({opened:0,not_home:0,sales:0,call_back:0}),[y,I]=o.useState([]),[S,A]=o.useState(!1),[D,P]=o.useState(""),[B,F]=o.useState(""),[N,$]=o.useState(""),[M,T]=o.useState(!1),[O,H]=o.useState(!1),[L,z]=o.useState(!1),V={backgroundColor:l.getConfigValue("APP_HEADER_COLOR")||m.tokens.colorBrandBackground},E=o.useCallback((()=>new Promise((e=>{navigator.geolocation?navigator.geolocation.getCurrentPosition((o=>{const s=`#position (${o.coords.latitude},${o.coords.longitude})`;e(s)})):e(void 0)}))),[b]);o.useEffect((()=>{window.Codicent.getDataMessages({codicent:l.getConfigValue("APP_NAME"),tags:["sales_code"]}).then((e=>{e=e.filter((e=>"1"!==e.data.inactive)),I(e)})).catch(console.error),E()}),[]);const R=async()=>{if(!C)return;const e=["not_home","sales","call_back","opened"],o=new Date;o.setHours(0,0,0,0);const s={..._};for(const r of e){const e=await window.Codicent.getMessages({search:`#${r} #sales_code_${C}`,afterTimestamp:o,length:1e4});s[r]=e.filter((e=>e.content.includes(`#${r} `)&&e.content.includes(`#sales_code_${C}`))).length}w(s)},U=async(e,o="")=>{const s=await E();console.log("Got position",s);const r=`@${l.getConfigValue("APP_NAME")} #sales_code_${C} #${e} ${s||""} ${o.trim().length>0?"#comment ":""}${o}`.trim();await window.Codicent.postMessage({message:r}),R()};return e.jsx(d.Page,{hideHeader:!0,children:e.jsxs("div",{className:p.root,children:[e.jsx("div",{className:p.backButton,children:e.jsx(t.Button,{appearance:"subtle",icon:"ArrowLeft24Regular",onClick:()=>f(-1),children:g("Tillbaka")})}),e.jsxs("div",{className:p.header,style:V,children:[e.jsx(j.Image,{src:B||l.getConfigValue("APP_ICON_URL")||"https://via.placeholder.com/100",className:p.logo,onClick:()=>{B?z(!0):N&&H(!0)}}),e.jsx("div",{className:p.inputContainer,children:e.jsx(a.Input,{value:C,onChange:e=>v(e.target.value),onBlur:()=>{const e=y.find((e=>e.data.code===C));if(e)F(`https://codicent.com/app/GetImage?fileId=${e.fileId}&width=100`),$(e.data.link),T(!0),R();else{const e=y.find((e=>e.data.code2===C.toUpperCase()));e?(F(`https://codicent.com/app/GetImage?fileId=${e.fileIds&&e.fileIds.length>1?e.fileIds[1]:e.fileId}&width=100`),$(e.data.link2),T(!0),R()):(T(!1),alert(g("Fel försäljningskod!")))}},placeholder:g("Fyll i försäljningskod"),maxLength:16,size:"large"})})]}),M&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:p.dashboard,children:Object.keys(_).map((o=>{return e.jsx("div",{className:(s=o,h.mergeClasses(p.statBox,p[s])),children:e.jsx(n.Text,{weight:"bold",size:400,children:_[o]})},o);var s}))}),e.jsx("div",{className:p.buttonContainer,children:Object.entries(q).map((([o,s])=>e.jsx(t.Button,{size:"large",className:p.actionButton,style:{backgroundColor:s,color:"white"},onClick:()=>{U(o),"opened"===o&&A(!0),"sales"===o&&H(!0)},children:o.charAt(0).toUpperCase()+o.slice(1).replace("_"," ")},o)))}),e.jsxs(i.Dialog,{open:S,children:[e.jsx(i.DialogTitle,{children:g("Skriv in avvikelse")}),e.jsx(i.DialogContent,{children:e.jsx("div",{className:p.textAreaContainer,children:e.jsx(r.Textarea,{value:D,onChange:e=>P(e.target.value),placeholder:g("Skriv din text här..."),rows:4,size:"large"})})}),e.jsx(i.DialogActions,{children:e.jsx(t.Button,{appearance:"primary",onClick:()=>{U("anomaly",`\n${D}`),A(!1),P("")},children:g("Spara")})})]}),e.jsxs(i.Dialog,{open:O,children:[e.jsx(i.DialogTitle,{children:g("Godkännande")}),e.jsx(i.DialogContent,{children:g("Är kunden över 23 år?")}),e.jsxs(i.DialogActions,{children:[e.jsx(t.Button,{appearance:"primary",onClick:()=>window.open(N,"_blank"),children:g("OK")}),e.jsx(t.Button,{appearance:"secondary",onClick:()=>H(!1),children:g("Avbryt")})]})]})]}),e.jsx(u.QrCodeDialog,{isOpen:L,onDismiss:()=>z(!1),imageUrl:B})]})})};exports.Sales=f,exports.default=f;
@@ -1,3 +1,4 @@
1
+ export declare const setBaseUrl: (url: string) => void;
1
2
  export interface UserInfo {
2
3
  nickname: string;
3
4
  email: string;
@@ -1 +1 @@
1
- {"version":3,"file":"codicent.d.ts","sourceRoot":"","sources":["../../../src/services/codicent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codicent.d.ts","sourceRoot":"","sources":["../../../src/services/codicent.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,UAAU,QAAS,MAAM,SAerC,CAAC;AA8BF,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,eAAe;IAE1B,iBAAiB,QAAe,MAAM,QAAQ,MAAM,aAAa,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAOvF;IAEF,gBAAgB,QACT,MAAM,WACF,MAAM,aACJ,MAAM,UACT,MAAM,WACL,MAAM,KACd,OAAO,CAAC,WAAW,EAAE,CAAC,CASvB;IAEF,kBAAkB,OAAc,MAAM,KAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAGlE;IAEF,iBAAiB,OAAc,MAAM,QAAQ,MAAM,aAAa,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAOtF;IAEF,iBAAiB,OAAc,MAAM,aAAa,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAGxE;IACK,QAAQ,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,OAAO,CAAyB;IACjC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;gBAEvB,OAAO,EAAE,sBAAsB;IAO3C,WAAW,oCAYT;IAEF,aAAa,+BASX;IAEF,WAAW;YAaa,MAAM;eAAS,MAAM;iBAAW,MAAM;SAC5D;IAEF,aAAa;;;SAOX;IAEF,UAAU,aAAoB,MAAM,YAAY,QAAQ,qBAEtD;IAEF,WAAW,WAAkB,MAAM,uBAEjC;IAEF,MAAM,CAAC,WAAW,WAAY,MAAM,SAAS,MAAM,YAA8D;IAEjH,MAAM,CAAC,UAAU,WAAY,MAAM,cAAc,MAAM,YAErD;IAEF,gBAAgB,aAAoB,IAAI,oBAAoB,MAAM,qBAsBhE;IAIF,WAAW,YAAa,MAAM,aAAa,MAAM,aAAa,MAAM,qBAK/D;IAEL,IAAI,YAAa,MAAM,cAAc,MAAM,aAAa,MAAM,+BAKzD;IAEL;;;;;OAKG;YACW,OAAO;IAyBrB,eAAe,SACP,MAAM,EAAE,WACL,MAAM,WACP,MAAM,mBACE,MAAM,GAAG,SAAS,aACvB,MAAM,UACV,MAAM,wBAsBb;IAEF,WAAW,SAAgB,MAAM,EAAE,aAAa,MAAM,WAAU,MAAM,wBAgCpE;IAEF,YAAY,aAAoB,MAAM,SAAS,MAAM,UAAU,MAAM,eAAe,MAAM,qBAkBxF;IAEF,SAAS,WAAkB,MAAM,eAAe,MAAM,4BAqCpD;IAEF,cAAc,aAAoB,MAAM,sBAYtC;IAIF,MAAM,aAIJ;IAEF,YAAY,gBAA4D;IAExE,OAAO,kCA2BL;IAEF,WAAW,aAAoB,MAAM,oBAAoB,MAAM,sBAuB7D;IAEF,YAAY,YAAmB,MAAM,cAAc,MAAM,sBAkEvD;IAEF,WAAW,wBA2BT;IAEF,mBAAmB,wBAcjB;IAEF,sBAAsB,iBAAwB,MAAM,mBA4BlD;IAEF,WAAW,aAAoB,MAAM,wCA4BnC;IAEF,cAAc,wCAKX;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,uBAoBC;IAEF,aAAa,oBAA2B,MAAM,qBAAqB,MAAM,sBAevE;IAEF,cAAc,aA/EiB,MAAM,wCA+EH;IAElC,mBAAmB,aAAoB,MAAM,WAAW,MAAM,EAAE,sBAe9D;IAEF,gBAAgB,aAAoB,MAAM,uBAIxC;IAEF,aAAa,oBAA2B,MAAM,kBAAkB,MAAM,yBAyBpE;IAEF,QAAQ,aAAc,MAAM,UAK1B;IAEF,OAAO,CAAC,QAAQ,CAAe;IAE/B,mBAAmB,QAAa,OAAO,CAAC,OAAO,CAAC,CAe9C;IAEF,uBAAuB,QAAa,OAAO,CAAC,MAAM,CAAC,CAsBjD;IAEF,qBAAqB,YAAmB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAoB9D;IAEF,kBAAkB,YAAmB,MAAM,mBAUzC;IAEF,cAAc,OAAc,MAAM,wBAehC;IAEF,aAAa,aAAoB,MAAM,wBAgBrC;IAEF,iBAAiB,OAAc,MAAM;;;OAcnC;IAEF,SAAS,YAAmB,MAAM,YAAY,MAAM,qBAqBlD;IAEF,SAAS,+BAqCP;IAEF,YAAY,+BAeV;IAEF,MAAM,CAAC,YAAY,SAAgB,QAAQ,mBAyBzC;IAEF,MAAM,CAAC,mBAAmB,YAAmB,MAAM,YAAW,MAAM,cAAgC,MAAM,iCA+BxG;IAEF;;;;;;;;OAQG;IACH,MAAM,CAAC,gBAAgB,YACZ,MAAM,YACN,MAAM,cACH,MAAM,mBACF,MAAM,oBACL,MAAM,KACtB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA+E5B;IAEF,QAAQ,QAAa,OAAO,CAAC,IAAI,EAAE,CAAC,CAMlC;IAEF,WAAW,OAAc,MAAM,mBAO7B;IAGF,OAAO,CAAC,kBAAkB;IAM1B,aAAa,cAAqB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,CAiB/E;IAEF,gBAAgB,cAAqB,MAAM,UAAU,MAAM,GAAG,QAAQ,sBAcpE;IAEI,uBAAuB,CAAC,KAAK,GAAE,MAAgB,EAAE,QAAQ,GAAE,MAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAsB9F,iBAAiB,CAAC,QAAQ,GAAE,MAAiB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAoBzG;;;;;;OAMG;IACH,MAAM,CAAC,eAAe,SACd,MAAM,kBACI,MAAM,YACb,MAAM,KACd,OAAO,CAAC,mBAAmB,CAAC,CAsB7B;CACH"}
@@ -1 +1 @@
1
- "use strict";var t,e=require("../node_modules/@stripe/stripe-js/dist/index.js"),o=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("react/jsx-runtime"),require("react"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");let a="https://codicent.com/",n="-";const s=()=>void 0!==window.Codicent&&(window.Codicent.handleMessage=function(t){const e=new CustomEvent("codicent-log",{detail:{message:t}});window.dispatchEvent(e)},window.Codicent.init({token:n,baseUrl:a}),!0);let i=s();if(!i){const t=setInterval((()=>{i=s(),i&&clearInterval(t)}),100)}class r{constructor(t){this.createDataMessage=async(t,e,o)=>await window.Codicent.data.create({codicent:o||this.codicent,tag:t,data:e}),this.readDataMessages=async(t,e,o,a,n)=>await window.Codicent.data.read({codicent:o||this.codicent,tag:t,search:e,start:a,length:n}),this.readOneDataMessage=async t=>await window.Codicent.data.readOne(t),this.updateDataMessage=async(t,e,o)=>await window.Codicent.data.update({id:t,data:e,codicent:o||this.codicent}),this.deleteDataMessage=async(t,e)=>await window.Codicent.data.delete({id:t,codicent:e||this.codicent}),this.getAppTheme=async()=>{try{const t=await window.Codicent.getDataMessages({tags:["app-theme"],codicent:this.codicent});return t.length>0?t[0].data:null}catch(t){return console.error("Error fetching app theme:",t),null}},this.getAppButtons=async()=>{const t=(await window.Codicent.getDataMessages({tags:[this.options.BUTTON_TAG],codicent:this.codicent})).map((t=>t.data));return t.sort(((t,e)=>t.title>e.title?1:-1)),t},this.getAppTasks=async()=>(await window.Codicent.getMessages({search:`@${this.codicent} #app-task`,length:50})).map((t=>{const e=new o.default(t.content).content.split("\n"),a=e[0],n=e.slice(1).join("\n");return{id:t.id,title:a,content:n}})),this.getAppPrompts=async()=>(await window.Codicent.getDataMessages({tags:["chatprompt"],codicent:this.codicent})).map((t=>t.data)).map((({title:t,prompt:e})=>({title:t,prompt:e}))),this.uploadFile=async(t,e)=>await window.Codicent.upload(e,t),this.getFileInfo=async t=>await window.Codicent.getFileInfo(t),this.generateApiToken=async(t,e)=>{const o=await fetch(`${a}api/GenerateApiToken?project=${this.codicent}${t?`&expires=${t.toISOString()}`:""}${e?`&forUserNickname=${e}`:""}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText}`);return await o.text()},this.sendMessage=(t,e,o)=>window.Codicent.postMessage({message:`@${o||this.codicent} ${t}`,type:"text",parentId:e}),this.chat=(t,e,o)=>window.Codicent.getChatReply4({message:t,codicent:o||this.codicent,messageId:e}),this.getMessagesFast=async(t,e,o=100,n=void 0,s,i=0)=>{const r=await this.request(`${a}app/AppGetMessages`,"POST",{headers:[["Authorization",`Bearer ${this.getToken()}`],["Content-Type","application/json; charset=utf-8"]],body:JSON.stringify({tags:t,codicent:s||this.codicent,search:e,start:i,length:o})});let c=await r.json();if(c.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),n){const t=await this.getPublicFlow(n);c=c.concat(t),c.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime()))}return c},this.getMessages=async(t,e,o=10)=>{let a=[];const n=t.map((async t=>{const e=await window.Codicent.getMessages({search:`@${this.codicent} #${t}`,length:o});return"chat"===t&&e.forEach((t=>t.content=`#chat\n${t.content}`)),e}));if((await Promise.all(n)).forEach((t=>{a=a.concat(t)})),e)try{const t=await this.getPublicFlow(e);a=a.concat(t)}catch(t){console.warn("Error fetching public flow, PUBLIC_TAG missing in codicent?",t)}return a=a.filter(((t,e,o)=>e===o.findIndex((e=>e.id===t.id)))),a.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime())),a},this.registerUser=async(t,e,o,n)=>{const s=await fetch(`${a}app/RegisterAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${n}`]],body:JSON.stringify({nickname:t,email:e,userId:o})});if(!s.ok)return"";const i=await s.text();return window.Codicent.init({token:n,baseUrl:a}),i},this.loginUser=async(t,e)=>{try{const o=await fetch(`${a}app/LoginAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${e}`]],body:JSON.stringify({userId:t})});if(!o.ok)return 404===o.status||400===o.status?null:401===o.status?(this.handleUnauthorized(),null):"";const n=await o.text();return this.setToken(n),n}catch(t){return console.warn("Error logging in user:",t),""}},this.nicknameExists=async t=>{const e=await fetch(`${a}app/NicknameExists?nickname=${encodeURIComponent(t)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"]]});if(!e.ok)return!1;return await e.json()},this.logout=()=>{this.setToken("")},this.isRegistered=()=>null!==localStorage.getItem("codicent_nickname"),this.getApps=async()=>{try{const t=await fetch(`${a}app/AppGetApps`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!t.ok)throw t.status,new Error(`${t.statusText}`);const e=(await t.json()).filter(((t,e,o)=>e===o.findIndex((e=>e.id===t.id))&&(this.options.APP_NAME||t.id.startsWith(this.options.APP_PREFIX))));return e}catch(t){return console.warn("Error fetching apps:",t),null}},this.addFollower=async(t,e)=>{const o=await fetch(`${a}app/AddFollower?nickname=${t}&followerNickname=${e}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText||"Failed to add follower!"}`);return await o.json()},this.cloneProject=async(t,e)=>{const o=await fetch(`${a}app/CloneProject?project=${t}&newProject=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText}`);let n=await o.json();if(n){const t='#data #app-theme \n{\n "textcolor": "#212121",\n "backgroundcolor": "#273044",\n "color": "#ffffff",\n "logo": "https://codicent.com/logo512.png",\n "title": "",\n "themeColor": "#581d71",\n "buttonColor": "#c0c0c0",\n "buttonTextColor": "#000000",\n "font": "Montserrat",\n "welcome": "Hej {{username}}!",\n "chatPlaceholder": "Tjena, Loociz här! Vad vill du?",\n "textPlaceholder": "Skriv det du vill spara, så tar jag (Loociz alltså) hand om det!",\n "transcriptionInstructions": "Tryck på knappen för att start och sedan stoppa ljudinspelning."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(n=!1)}catch{n=!1}if(n){const t='#data #app-button\n{\n "title": "Ta fram företagsinfo",\n "url": "/#/chat?text=Hej!%20Jag%20vill%20spara%20f%C3%B6retagsinfo.%20Guida%20mig%20steg%20f%C3%B6r%20steg%2C%20ett%20i%20taget%2C%20tills%20vi%20har%20all%20info%20om%20mitt%20f%C3%B6retag.%20Exempel%20p%C3%A5%20data%3A%20f%C3%B6retagsnamn%20eller%20id%C3%A9namn%2C%20org.nr.%2C%20%C3%A4gare%2C%20kontaktinformation%2C%20vision%2C%20aff%C3%A4rsid%C3%A9%2C%20mm."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(n=!1)}catch{n=!1}}}return n},this.getNickname=async()=>{try{const t=n.split(".")[1],e=atob(t),o=JSON.parse(e),s=o.sub||o.userId,i=await fetch(`${a}app/GetNickname?userId=${s}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!i.ok)throw 401===i.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${i.statusText}`);return await i.text()}catch{return""}},this.getChatInstructions=async()=>{try{const t=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:1});if(t.length>0)return t[0].content}catch{console.warn("Error fetching chat instructions")}return""},this.updateChatInstructions=async t=>{try{const e=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:100}),o=`@${this.codicent} #instructions\n${t}`;e.length>0?e[0].content!==o&&(console.log("updating instructions",o),await window.Codicent.postMessage({message:o,type:"text",parentId:e[0].id})):(console.log("new instructions",o),await window.Codicent.postMessage({message:o,type:"text"}))}catch{console.warn("Error updating chat instructions")}},this.getUserInfo=async(t,e=!1)=>{const o=await fetch(`${a}app/GetUserInfo?nickname=${t}${e?"&t="+Date.now():""}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);const n=await o.json(),{email:s,picture:i,description:r,followers:c,properties:h,owner:d}=n;return{nickname:t,email:s,name:r,picture:i,followers:c,properties:h,owner:d}},this.updateUserInfo=async({nickname:t,email:e,name:o,picture:n})=>{const s=await fetch(`${a}app/AddOrUpdateUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]],body:JSON.stringify({nickname:t,email:e,name:o,picture:n,description:""})});if(!s.ok)throw s.status,new Error(`${s.statusText}`);return await this.getUserInfo(t,!0)},this.requestInvite=async(t,e)=>{const o=await fetch(`${a}app/CreateInvitationOrRequest?forUserNickname=${t}&toProjectNickname=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return!!o.ok||(console.warn(`requestInvite() => ${o.statusText}`),!1)},this.getProjectInfo=this.getUserInfo,this.updateMembersAccess=async(t,e)=>{const o=await fetch(`${a}app/AddOrUpdateProjectProperty?project=${t}&key=APP_EDITORS&value=${e.join(",")}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return!!o.ok||(console.warn(`updateMembersAccess() => ${o.statusText}`),!1)},this.getMembersAccess=async t=>{const e=(await this.getProjectInfo(t,!0)).properties.find((t=>"APP_EDITORS"===t.name));return e&&e.value?e.value.split(","):[]},this.getMemberInfo=async(t,e)=>{const o=await fetch(`${a}app/GetMemberInfo?projectNickname=${encodeURIComponent(t)}&memberNickname=${encodeURIComponent(e)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);return await o.json()},this.setToken=t=>{n=t,n&&window.Codicent.init({token:n,baseUrl:a})},this.getToken=()=>n,this.checkPurchaseStatus=async()=>{const t=await fetch(`${a}payments/GetPaymentStatus`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!t.ok)throw new Error("Failed to check purchase status");const{isPaid:e}=await t.json();return e},this.checkSubscriptionStatus=async()=>{if(!this.options.SUBSCRIPTION_NEEDED)return"active";const t=await fetch(`${a}payments/GetSubscriptionStatus?t=${Date.now()}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`],["Cache-Control","no-cache, no-store, must-revalidate"],["Pragma","no-cache"],["Expires","0"]]});if(!t.ok)throw new Error("Failed to check subscription status");const{status:e}=await t.json();return e},this.createCheckoutSession=async t=>{const e=await fetch(`${a}payments/CreateCheckoutSession`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]],body:JSON.stringify({priceId:t,successUrl:window.location.href,cancelUrl:window.location.href})});if(!e.ok)throw new Error("Failed to create checkout session");const{id:o}=await e.json();return o},this.redirectToCheckout=async t=>{const o=await e.loadStripe(this.options.STRIPE_PUBLIC_KEY);if(!o)throw new Error("Stripe failed to load");const a=await this.createCheckoutSession(t),{error:n}=await o.redirectToCheckout({sessionId:a});if(n)throw new Error(n.message)},this.getChatHistory=async t=>{const e=await fetch(`${a}api/GetMessageHistory?messageId=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!e.ok)throw new Error("Failed to get chat history");let o=await e.json();return o=o.filter((t=>!t.content.includes("#function_result")&&!t.content.includes("#finish_reason_function_call"))),o},this.getPublicFlow=async t=>{const e=await fetch(`${a}app/GetPublicFlow?codicent=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!e.ok)throw new Error("Failed to get public flow");const o=await e.json();return o.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),o},this.getMessageContent=async t=>{const e=await fetch(`${a}app/GetMessageContent?id=${t}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(e.ok){const t=await e.json();return{content:t.content,url:t.url}}return{content:"",url:""}},this.logAction=async(t,e)=>{if(!this.options.APP_LOG_CODICENT)return"";const o={content:`@${this.options.APP_LOG_CODICENT} #debug #${e}\n${t}`,type:"text"},n=await fetch(`${a}app/AddChatMessage`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.options.APP_LOG_TOKEN}`]],body:JSON.stringify(o)});if(!n.ok)throw new Error(`${n.statusText||"Failed to post log message!"}`);return(await n.json()).id},this.createApp=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.APP_PREFIX}${t}`;if(!await this.nicknameExists(e)){if(await this.cloneProject(this.options.APP_TEMPLATE,e)){if(this.options.ANONYMOUS_TOKEN)try{const t=this.options.ANONYMOUS_TOKEN.split(".")[1],o=atob(t),a=JSON.parse(o).nickname;if(!await this.addFollower(e,a))throw new Error("Failed to add follower: "+a)}catch(t){console.error("Error extracting adding anonymous follower:",t)}return e}}}}catch(t){console.error("Error creating app:",t)}return null},this.findUsername=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.USER_PREFIX}${t}`;if(!await this.nicknameExists(e))return e}}catch(t){console.warn("Error finding username:",t)}return null},this.getForms=async()=>{const t=await this.request(`${a}app/GetForms?codicent=${this.codicent}`,"GET",{headers:[["Authorization",`Bearer ${this.getToken()}`]]});return await t.json()},this.getFormById=async t=>{const e=await fetch(`${a}app/GetFormById?id=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return await e.json()},this.getTodoStatus=async t=>{const e=await fetch(`${a}app/GetTodoStatus?messageId=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return e.ok?await e.text():(e.status,console.warn(`getTodoStatus() => ${e.statusText}`),"unknown")},this.updateTodoStatus=async(t,e)=>{const o=await fetch(`${a}app/UpdateTodoStatus?messageId=${t}&status=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)return console.warn(`updateTodoStatus() => ${o.statusText}`),!1;return await o.json()},this.codicent="",this.options=t}async request(t,e,o={}){const a={};o.headers&&o.headers.forEach((([t,e])=>{a[t]=e}));const n=await fetch(t,{...o,method:e,headers:a});if(!n.ok)throw 401===n.status&&this.handleUnauthorized(),new Error(`${n.statusText}`);return n}handleUnauthorized(){this.onUnauthorized&&this.onUnauthorized()}async getRealtimeSessionToken(t="alloy",e="openai"){const o=`${a}realtime/session?voice=${t}&provider=${e}`,n=await fetch(o,{headers:{Authorization:`Bearer ${this.getToken()}`}});if(!n.ok)throw new Error(`Failed to fetch session token: ${n.statusText}`);const s=await n.json(),i=s.client_secret?.value;if(!i)throw new Error("No ephemeral key returned from session endpoint");return i}async getRealtimeConfig(t="openai"){try{const e=`${a}realtime/config?provider=${t}`,o=await fetch(e,{method:"GET",headers:{Authorization:`Bearer ${this.getToken()}`}});return o.ok?await o.json():null}catch(t){return console.warn("Failed to fetch realtime config:",t),null}}}t=r,r.getImageUrl=(t,e)=>`${a}app/GetImage?fileId=${t}&width=${e}`,r.getFileUrl=(t,e)=>`${a}app/DownloadFile?fileId=${t}${e?`&extension=${e}`:""}`,r.downloadFile=async e=>{fetch(t.getFileUrl(e.id)).then((t=>{if(t.headers.forEach(((t,e)=>{console.log(`${e}: ${t}`)})),t.ok)return t.blob();throw new Error("Network response was not ok.")})).then((t=>{const o=window.URL.createObjectURL(t),a=document.createElement("a");a.style.display="none",a.href=o,a.download=e.filename,document.body.appendChild(a),a.click(),window.URL.revokeObjectURL(o)})).catch((t=>{console.error("There was a problem with the fetch operation:",t)}))},r.getMiniChatReplyOld=async(t,e="codicent-mini",o)=>{let s={project:e,message:t};o&&(s.messageId=o);const i=await fetch(`${a}app/GetAi2ChatReply`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${n}`]],body:JSON.stringify(s)});if(!i.ok)return void i.status;return(await i.json()).content.replace("@codicent-mini","").trim()},r.getMiniChatReply=async(t,e="codicent-mini",o,s=3e5,i=2e3)=>{const r={project:e,message:t};let c;o&&(r.messageId=o);try{const t=await fetch(`${a}app/StartAi2ChatAsync`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${n}`]],body:JSON.stringify(r)});if(!t.ok)return t.status,void console.error(`Failed to start AI chat: ${t.status}`);if(c=(await t.json()).promptMessageId,!c)return void console.error("No promptMessageId returned from server")}catch(t){return void console.error("Error starting AI chat:",t)}const h=Date.now();for(;Date.now()-h<s;)try{const t=await fetch(`${a}app/GetAi2ChatReplyStatus?promptMessageId=${c}`,{method:"GET",headers:[["Authorization",`Bearer ${n}`]]});if(202===t.status){await new Promise((t=>setTimeout(t,i)));continue}if(!t.ok)return void console.error(`Error polling AI chat status: ${t.status}`);const o=await t.json();return o.content.replace(`@${e}`,"").replace("@codicent-mini","").trim()}catch(t){return void console.error("Error polling AI chat status:",t)}console.error("Polling timeout reached for AI chat")},r.getTranslations=async(t,e,o="codicent-mini")=>{const s=await fetch(`${a}app/GetTranslations`,{method:"POST",headers:{"Content-Type":"application/json; charset=utf-8",Authorization:`Bearer ${n}`},body:JSON.stringify({project:o,text:t,targetLanguage:e})});if(!s.ok)throw s.status,new Error(`Failed to get translations: ${s.statusText}`);return await s.json()},exports.CodicentService=r;
1
+ "use strict";var t,e=require("../node_modules/@stripe/stripe-js/dist/index.js"),o=require("../utils/MessageContent.js");require("../node_modules/tinycolor2/esm/tinycolor.js"),require("react/jsx-runtime"),require("react"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");let a="https://codicent.com/",n="-";const s=t=>{t&&"string"==typeof t?(a=t.endsWith("/")?t:t+"/","undefined"!=typeof window&&void 0!==window.Codicent&&"function"==typeof window.Codicent.init&&window.Codicent.init({token:n,baseUrl:a})):console.warn("Invalid base URL provided, using default")},i=()=>void 0!==window.Codicent&&(window.Codicent.handleMessage=function(t){const e=new CustomEvent("codicent-log",{detail:{message:t}});window.dispatchEvent(e)},window.Codicent.init({token:n,baseUrl:a}),!0);let r=i();if(!r){const t=setInterval((()=>{r=i(),r&&clearInterval(t)}),100)}class c{constructor(t){this.createDataMessage=async(t,e,o)=>await window.Codicent.data.create({codicent:o||this.codicent,tag:t,data:e}),this.readDataMessages=async(t,e,o,a,n)=>await window.Codicent.data.read({codicent:o||this.codicent,tag:t,search:e,start:a,length:n}),this.readOneDataMessage=async t=>await window.Codicent.data.readOne(t),this.updateDataMessage=async(t,e,o)=>await window.Codicent.data.update({id:t,data:e,codicent:o||this.codicent}),this.deleteDataMessage=async(t,e)=>await window.Codicent.data.delete({id:t,codicent:e||this.codicent}),this.getAppTheme=async()=>{try{const t=await window.Codicent.getDataMessages({tags:["app-theme"],codicent:this.codicent});return t.length>0?t[0].data:null}catch(t){return console.error("Error fetching app theme:",t),null}},this.getAppButtons=async()=>{const t=(await window.Codicent.getDataMessages({tags:[this.options.BUTTON_TAG],codicent:this.codicent})).map((t=>t.data));return t.sort(((t,e)=>t.title>e.title?1:-1)),t},this.getAppTasks=async()=>(await window.Codicent.getMessages({search:`@${this.codicent} #app-task`,length:50})).map((t=>{const e=new o.default(t.content).content.split("\n"),a=e[0],n=e.slice(1).join("\n");return{id:t.id,title:a,content:n}})),this.getAppPrompts=async()=>(await window.Codicent.getDataMessages({tags:["chatprompt"],codicent:this.codicent})).map((t=>t.data)).map((({title:t,prompt:e})=>({title:t,prompt:e}))),this.uploadFile=async(t,e)=>await window.Codicent.upload(e,t),this.getFileInfo=async t=>await window.Codicent.getFileInfo(t),this.generateApiToken=async(t,e)=>{const o=await fetch(`${a}api/GenerateApiToken?project=${this.codicent}${t?`&expires=${t.toISOString()}`:""}${e?`&forUserNickname=${e}`:""}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText}`);return await o.text()},this.sendMessage=(t,e,o)=>window.Codicent.postMessage({message:`@${o||this.codicent} ${t}`,type:"text",parentId:e}),this.chat=(t,e,o)=>window.Codicent.getChatReply4({message:t,codicent:o||this.codicent,messageId:e}),this.getMessagesFast=async(t,e,o=100,n=void 0,s,i=0)=>{const r=await this.request(`${a}app/AppGetMessages`,"POST",{headers:[["Authorization",`Bearer ${this.getToken()}`],["Content-Type","application/json; charset=utf-8"]],body:JSON.stringify({tags:t,codicent:s||this.codicent,search:e,start:i,length:o})});let c=await r.json();if(c.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),n){const t=await this.getPublicFlow(n);c=c.concat(t),c.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime()))}return c},this.getMessages=async(t,e,o=10)=>{let a=[];const n=t.map((async t=>{const e=await window.Codicent.getMessages({search:`@${this.codicent} #${t}`,length:o});return"chat"===t&&e.forEach((t=>t.content=`#chat\n${t.content}`)),e}));if((await Promise.all(n)).forEach((t=>{a=a.concat(t)})),e)try{const t=await this.getPublicFlow(e);a=a.concat(t)}catch(t){console.warn("Error fetching public flow, PUBLIC_TAG missing in codicent?",t)}return a=a.filter(((t,e,o)=>e===o.findIndex((e=>e.id===t.id)))),a.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime())),a},this.registerUser=async(t,e,o,n)=>{const s=await fetch(`${a}app/RegisterAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${n}`]],body:JSON.stringify({nickname:t,email:e,userId:o})});if(!s.ok)return"";const i=await s.text();return window.Codicent.init({token:n,baseUrl:a}),i},this.loginUser=async(t,e)=>{try{const o=await fetch(`${a}app/LoginAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${e}`]],body:JSON.stringify({userId:t})});if(!o.ok)return 404===o.status||400===o.status?null:401===o.status?(this.handleUnauthorized(),null):"";const n=await o.text();return this.setToken(n),n}catch(t){return console.warn("Error logging in user:",t),""}},this.nicknameExists=async t=>{const e=await fetch(`${a}app/NicknameExists?nickname=${encodeURIComponent(t)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"]]});if(!e.ok)return!1;return await e.json()},this.logout=()=>{this.setToken("")},this.isRegistered=()=>null!==localStorage.getItem("codicent_nickname"),this.getApps=async()=>{try{const t=await fetch(`${a}app/AppGetApps`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!t.ok)throw t.status,new Error(`${t.statusText}`);const e=(await t.json()).filter(((t,e,o)=>e===o.findIndex((e=>e.id===t.id))&&(this.options.APP_NAME||t.id.startsWith(this.options.APP_PREFIX))));return e}catch(t){return console.warn("Error fetching apps:",t),null}},this.addFollower=async(t,e)=>{const o=await fetch(`${a}app/AddFollower?nickname=${t}&followerNickname=${e}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText||"Failed to add follower!"}`);return await o.json()},this.cloneProject=async(t,e)=>{const o=await fetch(`${a}app/CloneProject?project=${t}&newProject=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText}`);let n=await o.json();if(n){const t='#data #app-theme \n{\n "textcolor": "#212121",\n "backgroundcolor": "#273044",\n "color": "#ffffff",\n "logo": "https://codicent.com/logo512.png",\n "title": "",\n "themeColor": "#581d71",\n "buttonColor": "#c0c0c0",\n "buttonTextColor": "#000000",\n "font": "Montserrat",\n "welcome": "Hej {{username}}!",\n "chatPlaceholder": "Tjena, Loociz här! Vad vill du?",\n "textPlaceholder": "Skriv det du vill spara, så tar jag (Loociz alltså) hand om det!",\n "transcriptionInstructions": "Tryck på knappen för att start och sedan stoppa ljudinspelning."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(n=!1)}catch{n=!1}if(n){const t='#data #app-button\n{\n "title": "Ta fram företagsinfo",\n "url": "/#/chat?text=Hej!%20Jag%20vill%20spara%20f%C3%B6retagsinfo.%20Guida%20mig%20steg%20f%C3%B6r%20steg%2C%20ett%20i%20taget%2C%20tills%20vi%20har%20all%20info%20om%20mitt%20f%C3%B6retag.%20Exempel%20p%C3%A5%20data%3A%20f%C3%B6retagsnamn%20eller%20id%C3%A9namn%2C%20org.nr.%2C%20%C3%A4gare%2C%20kontaktinformation%2C%20vision%2C%20aff%C3%A4rsid%C3%A9%2C%20mm."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(n=!1)}catch{n=!1}}}return n},this.getNickname=async()=>{try{const t=n.split(".")[1],e=atob(t),o=JSON.parse(e),s=o.sub||o.userId,i=await fetch(`${a}app/GetNickname?userId=${s}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!i.ok)throw 401===i.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${i.statusText}`);return await i.text()}catch{return""}},this.getChatInstructions=async()=>{try{const t=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:1});if(t.length>0)return t[0].content}catch{console.warn("Error fetching chat instructions")}return""},this.updateChatInstructions=async t=>{try{const e=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:100}),o=`@${this.codicent} #instructions\n${t}`;e.length>0?e[0].content!==o&&(console.log("updating instructions",o),await window.Codicent.postMessage({message:o,type:"text",parentId:e[0].id})):(console.log("new instructions",o),await window.Codicent.postMessage({message:o,type:"text"}))}catch{console.warn("Error updating chat instructions")}},this.getUserInfo=async(t,e=!1)=>{const o=await fetch(`${a}app/GetUserInfo?nickname=${t}${e?"&t="+Date.now():""}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);const n=await o.json(),{email:s,picture:i,description:r,followers:c,properties:h,owner:d}=n;return{nickname:t,email:s,name:r,picture:i,followers:c,properties:h,owner:d}},this.updateUserInfo=async({nickname:t,email:e,name:o,picture:n})=>{const s=await fetch(`${a}app/AddOrUpdateUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]],body:JSON.stringify({nickname:t,email:e,name:o,picture:n,description:""})});if(!s.ok)throw s.status,new Error(`${s.statusText}`);return await this.getUserInfo(t,!0)},this.requestInvite=async(t,e)=>{const o=await fetch(`${a}app/CreateInvitationOrRequest?forUserNickname=${t}&toProjectNickname=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return!!o.ok||(console.warn(`requestInvite() => ${o.statusText}`),!1)},this.getProjectInfo=this.getUserInfo,this.updateMembersAccess=async(t,e)=>{const o=await fetch(`${a}app/AddOrUpdateProjectProperty?project=${t}&key=APP_EDITORS&value=${e.join(",")}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return!!o.ok||(console.warn(`updateMembersAccess() => ${o.statusText}`),!1)},this.getMembersAccess=async t=>{const e=(await this.getProjectInfo(t,!0)).properties.find((t=>"APP_EDITORS"===t.name));return e&&e.value?e.value.split(","):[]},this.getMemberInfo=async(t,e)=>{const o=await fetch(`${a}app/GetMemberInfo?projectNickname=${encodeURIComponent(t)}&memberNickname=${encodeURIComponent(e)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);return await o.json()},this.setToken=t=>{n=t,n&&window.Codicent.init({token:n,baseUrl:a})},this.getToken=()=>n,this.checkPurchaseStatus=async()=>{const t=await fetch(`${a}payments/GetPaymentStatus`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!t.ok)throw new Error("Failed to check purchase status");const{isPaid:e}=await t.json();return e},this.checkSubscriptionStatus=async()=>{if(!this.options.SUBSCRIPTION_NEEDED)return"active";const t=await fetch(`${a}payments/GetSubscriptionStatus?t=${Date.now()}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`],["Cache-Control","no-cache, no-store, must-revalidate"],["Pragma","no-cache"],["Expires","0"]]});if(!t.ok)throw new Error("Failed to check subscription status");const{status:e}=await t.json();return e},this.createCheckoutSession=async t=>{const e=await fetch(`${a}payments/CreateCheckoutSession`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]],body:JSON.stringify({priceId:t,successUrl:window.location.href,cancelUrl:window.location.href})});if(!e.ok)throw new Error("Failed to create checkout session");const{id:o}=await e.json();return o},this.redirectToCheckout=async t=>{const o=await e.loadStripe(this.options.STRIPE_PUBLIC_KEY);if(!o)throw new Error("Stripe failed to load");const a=await this.createCheckoutSession(t),{error:n}=await o.redirectToCheckout({sessionId:a});if(n)throw new Error(n.message)},this.getChatHistory=async t=>{const e=await fetch(`${a}api/GetMessageHistory?messageId=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!e.ok)throw new Error("Failed to get chat history");let o=await e.json();return o=o.filter((t=>!t.content.includes("#function_result")&&!t.content.includes("#finish_reason_function_call"))),o},this.getPublicFlow=async t=>{const e=await fetch(`${a}app/GetPublicFlow?codicent=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!e.ok)throw new Error("Failed to get public flow");const o=await e.json();return o.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),o},this.getMessageContent=async t=>{const e=await fetch(`${a}app/GetMessageContent?id=${t}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(e.ok){const t=await e.json();return{content:t.content,url:t.url}}return{content:"",url:""}},this.logAction=async(t,e)=>{if(!this.options.APP_LOG_CODICENT)return"";const o={content:`@${this.options.APP_LOG_CODICENT} #debug #${e}\n${t}`,type:"text"},n=await fetch(`${a}app/AddChatMessage`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.options.APP_LOG_TOKEN}`]],body:JSON.stringify(o)});if(!n.ok)throw new Error(`${n.statusText||"Failed to post log message!"}`);return(await n.json()).id},this.createApp=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.APP_PREFIX}${t}`;if(!await this.nicknameExists(e)){if(await this.cloneProject(this.options.APP_TEMPLATE,e)){if(this.options.ANONYMOUS_TOKEN)try{const t=this.options.ANONYMOUS_TOKEN.split(".")[1],o=atob(t),a=JSON.parse(o).nickname;if(!await this.addFollower(e,a))throw new Error("Failed to add follower: "+a)}catch(t){console.error("Error extracting adding anonymous follower:",t)}return e}}}}catch(t){console.error("Error creating app:",t)}return null},this.findUsername=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.USER_PREFIX}${t}`;if(!await this.nicknameExists(e))return e}}catch(t){console.warn("Error finding username:",t)}return null},this.getForms=async()=>{const t=await this.request(`${a}app/GetForms?codicent=${this.codicent}`,"GET",{headers:[["Authorization",`Bearer ${this.getToken()}`]]});return await t.json()},this.getFormById=async t=>{const e=await fetch(`${a}app/GetFormById?id=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return await e.json()},this.getTodoStatus=async t=>{const e=await fetch(`${a}app/GetTodoStatus?messageId=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return e.ok?await e.text():(e.status,console.warn(`getTodoStatus() => ${e.statusText}`),"unknown")},this.updateTodoStatus=async(t,e)=>{const o=await fetch(`${a}app/UpdateTodoStatus?messageId=${t}&status=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)return console.warn(`updateTodoStatus() => ${o.statusText}`),!1;return await o.json()},this.codicent="",this.options=t,s(t.API_BASE_URL)}async request(t,e,o={}){const a={};o.headers&&o.headers.forEach((([t,e])=>{a[t]=e}));const n=await fetch(t,{...o,method:e,headers:a});if(!n.ok)throw 401===n.status&&this.handleUnauthorized(),new Error(`${n.statusText}`);return n}handleUnauthorized(){this.onUnauthorized&&this.onUnauthorized()}async getRealtimeSessionToken(t="alloy",e="openai"){const o=`${a}realtime/session?voice=${t}&provider=${e}`,n=await fetch(o,{headers:{Authorization:`Bearer ${this.getToken()}`}});if(!n.ok)throw new Error(`Failed to fetch session token: ${n.statusText}`);const s=await n.json(),i=s.client_secret?.value;if(!i)throw new Error("No ephemeral key returned from session endpoint");return i}async getRealtimeConfig(t="openai"){try{const e=`${a}realtime/config?provider=${t}`,o=await fetch(e,{method:"GET",headers:{Authorization:`Bearer ${this.getToken()}`}});return o.ok?await o.json():null}catch(t){return console.warn("Failed to fetch realtime config:",t),null}}}t=c,c.getImageUrl=(t,e)=>`${a}app/GetImage?fileId=${t}&width=${e}`,c.getFileUrl=(t,e)=>`${a}app/DownloadFile?fileId=${t}${e?`&extension=${e}`:""}`,c.downloadFile=async e=>{fetch(t.getFileUrl(e.id)).then((t=>{if(t.headers.forEach(((t,e)=>{console.log(`${e}: ${t}`)})),t.ok)return t.blob();throw new Error("Network response was not ok.")})).then((t=>{const o=window.URL.createObjectURL(t),a=document.createElement("a");a.style.display="none",a.href=o,a.download=e.filename,document.body.appendChild(a),a.click(),window.URL.revokeObjectURL(o)})).catch((t=>{console.error("There was a problem with the fetch operation:",t)}))},c.getMiniChatReplyOld=async(t,e="codicent-mini",o)=>{let s={project:e,message:t};o&&(s.messageId=o);const i=await fetch(`${a}app/GetAi2ChatReply`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${n}`]],body:JSON.stringify(s)});if(!i.ok)return void i.status;return(await i.json()).content.replace("@codicent-mini","").trim()},c.getMiniChatReply=async(t,e="codicent-mini",o,s=3e5,i=2e3)=>{const r={project:e,message:t};let c;o&&(r.messageId=o);try{const t=await fetch(`${a}app/StartAi2ChatAsync`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${n}`]],body:JSON.stringify(r)});if(!t.ok)return t.status,void console.error(`Failed to start AI chat: ${t.status}`);if(c=(await t.json()).promptMessageId,!c)return void console.error("No promptMessageId returned from server")}catch(t){return void console.error("Error starting AI chat:",t)}const h=Date.now();for(;Date.now()-h<s;)try{const t=await fetch(`${a}app/GetAi2ChatReplyStatus?promptMessageId=${c}`,{method:"GET",headers:[["Authorization",`Bearer ${n}`]]});if(202===t.status){await new Promise((t=>setTimeout(t,i)));continue}if(!t.ok)return void console.error(`Error polling AI chat status: ${t.status}`);const o=await t.json();return o.content.replace(`@${e}`,"").replace("@codicent-mini","").trim()}catch(t){return void console.error("Error polling AI chat status:",t)}console.error("Polling timeout reached for AI chat")},c.getTranslations=async(t,e,o="codicent-mini")=>{const s=await fetch(`${a}app/GetTranslations`,{method:"POST",headers:{"Content-Type":"application/json; charset=utf-8",Authorization:`Bearer ${n}`},body:JSON.stringify({project:o,text:t,targetLanguage:e})});if(!s.ok)throw s.status,new Error(`Failed to get translations: ${s.statusText}`);return await s.json()},exports.CodicentService=c,exports.setBaseUrl=s;
@@ -5,7 +5,7 @@ export interface ButtonProps {
5
5
  appearance?: "primary" | "secondary" | "transparent" | "subtle";
6
6
  size?: "small" | "medium" | "large";
7
7
  className?: string;
8
- icon?: undefined | "DismissRegular" | "CopyRegular" | "ShareRegular" | "SignOut24Regular" | "Payment24Regular" | "SlideText24Regular" | "QuestionCircle24Regular" | "SendFilled" | "AttachRegular" | "ImageRegular" | "CameraRegular" | "LocationRegular" | "LocationFilled" | "AddRegular" | "ChevronRightFilled" | "ArrowClockwiseRegular" | "WandRegular";
8
+ icon?: undefined | "DismissRegular" | "CopyRegular" | "ShareRegular" | "SignOut24Regular" | "Payment24Regular" | "SlideText24Regular" | "QuestionCircle24Regular" | "SendFilled" | "AttachRegular" | "ImageRegular" | "CameraRegular" | "LocationRegular" | "LocationFilled" | "AddRegular" | "ChevronRightFilled" | "ArrowClockwiseRegular" | "WandRegular" | "ArrowLeft24Regular";
9
9
  disabled?: boolean;
10
10
  title?: string;
11
11
  image?: React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA6B/B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAC;IAChE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EACD,SAAS,GACT,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,yBAAyB,GACzB,YAAY,GACZ,eAAe,GACf,cAAc,GACd,eAAe,GACf,iBAAiB,GACjB,gBAAgB,GAChB,YAAY,GACZ,oBAAoB,GACpB,uBAAuB,GACvB,aAAa,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;CACtC;AAsBD,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAWxC,CAAC"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA8B/B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAC;IAChE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EACD,SAAS,GACT,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,kBAAkB,GAClB,kBAAkB,GAClB,oBAAoB,GACpB,yBAAyB,GACzB,YAAY,GACZ,eAAe,GACf,cAAc,GACd,eAAe,GACf,iBAAiB,GACjB,gBAAgB,GAChB,YAAY,GACZ,oBAAoB,GACpB,uBAAuB,GACvB,aAAa,GACb,oBAAoB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;CACtC;AAuBD,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAWxC,CAAC"}
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{makeStyles as o}from"../node_modules/@griffel/react/makeStyles.esm.js";import{DismissRegular as i,CopyRegular as n,ChevronRightFilled as r}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-1.js";import{ShareRegular as l}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-4.js";import{SignOut24Regular as s,SlideText24Regular as u}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-14.js";import{Payment24Regular as t}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-11.js";import{QuestionCircle24Regular as c}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-13.js";import{SendFilled as m}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-3.js";import{AttachRegular as a,CameraRegular as d,AddRegular as f,ArrowClockwiseRegular as g}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-0.js";import{ImageRegular as h,LocationRegular as p,LocationFilled as R}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-2.js";import{WandRegular as b}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-5.js";import{Button as j}from"../node_modules/@fluentui/react-button/lib/components/Button/Button.js";import{mergeClasses as _}from"../node_modules/@griffel/core/mergeClasses.esm.js";const k=o({button:{}}),C={DismissRegular:e(i,{}),CopyRegular:e(n,{}),ShareRegular:e(l,{}),SignOut24Regular:e(s,{}),Payment24Regular:e(t,{}),SlideText24Regular:e(u,{}),QuestionCircle24Regular:e(c,{}),SendFilled:e(m,{}),AttachRegular:e(a,{}),ImageRegular:e(h,{}),CameraRegular:e(d,{}),LocationRegular:e(p,{}),LocationFilled:e(R,{}),AddRegular:e(f,{}),ChevronRightFilled:e(r,{}),ArrowClockwiseRegular:e(g,{}),WandRegular:e(b,{})},S=({children:o,className:i,icon:n,image:r,...l})=>{const s=k();return e(j,{className:_(i,s.button),icon:n?{children:C[n]}:r?{children:r}:void 0,...l,children:o})};export{S as Button};
1
+ import{jsx as e}from"react/jsx-runtime";import{makeStyles as o}from"../node_modules/@griffel/react/makeStyles.esm.js";import{DismissRegular as i,CopyRegular as n,ChevronRightFilled as r}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-1.js";import{ShareRegular as s}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-4.js";import{SignOut24Regular as u,SlideText24Regular as l}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-14.js";import{Payment24Regular as t}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-11.js";import{QuestionCircle24Regular as c}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-13.js";import{SendFilled as m}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-3.js";import{AttachRegular as a,CameraRegular as d,AddRegular as f,ArrowClockwiseRegular as g}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-0.js";import{ImageRegular as h,LocationRegular as p,LocationFilled as R}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-2.js";import{WandRegular as b}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-5.js";import{ArrowLeft24Regular as j}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-1.js";import{Button as _}from"../node_modules/@fluentui/react-button/lib/components/Button/Button.js";import{mergeClasses as k}from"../node_modules/@griffel/core/mergeClasses.esm.js";const C=o({button:{}}),I={DismissRegular:e(i,{}),CopyRegular:e(n,{}),ShareRegular:e(s,{}),SignOut24Regular:e(u,{}),Payment24Regular:e(t,{}),SlideText24Regular:e(l,{}),QuestionCircle24Regular:e(c,{}),SendFilled:e(m,{}),AttachRegular:e(a,{}),ImageRegular:e(h,{}),CameraRegular:e(d,{}),LocationRegular:e(p,{}),LocationFilled:e(R,{}),AddRegular:e(f,{}),ChevronRightFilled:e(r,{}),ArrowClockwiseRegular:e(g,{}),WandRegular:e(b,{}),ArrowLeft24Regular:e(j,{})},S=({children:o,className:i,icon:n,image:r,...s})=>{const u=C();return e(_,{className:k(i,u.button),icon:n?{children:I[n]}:r?{children:r}:void 0,...s,children:o})};export{S as Button};
@@ -1,5 +1,5 @@
1
1
  import { CodicentService } from "../services";
2
- declare const MessageItem: ({ header, description, timestamp, text, image, tags, id, fileIds, codicentService, busy, onEdit, onShowHtmlPreview, }: {
2
+ declare const MessageItem: ({ header, description, timestamp, text, image, tags, id, fileIds, codicentService, busy, onEdit, onShowHtmlPreview, maxHeightPx, }: {
3
3
  id: string;
4
4
  header: string;
5
5
  description: string;
@@ -12,6 +12,7 @@ declare const MessageItem: ({ header, description, timestamp, text, image, tags,
12
12
  onShowHtmlPreview?: (html: string) => void;
13
13
  onEdit?: () => void;
14
14
  timestamp?: string;
15
+ maxHeightPx?: number;
15
16
  }) => import("react/jsx-runtime").JSX.Element;
16
17
  export default MessageItem;
17
18
  //# sourceMappingURL=MessageItem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MessageItem.d.ts","sourceRoot":"","sources":["../../../src/components/MessageItem.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA2H9C,QAAA,MAAM,WAAW,0HAad;IACD,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,4CA+QA,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"MessageItem.d.ts","sourceRoot":"","sources":["../../../src/components/MessageItem.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA2H9C,QAAA,MAAM,WAAW,uIAcd;IACD,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,4CAqRA,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1 +1 @@
1
- import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useState as o,useRef as i,useEffect as r}from"react";import{useNavigate as n}from"react-router-dom";import{CodicentService as s}from"../services/codicent.js";import a from"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import{Text as l}from"./Text.js";import"./Spinner.js";import"./TextHeader.js";import"./TypingIndicator.js";import"./Dialog.js";import"./ChatInput.js";import"./CombinedPlaceholderDialog.js";import"./ChatMessage.js";import"./Header.js";import m from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as d}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"../pages/AppFrame.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Login.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"../pages/Purchase.js";import c from"../hooks/useLocalization.js";import"../hooks/useAppStyles.js";import{FileThumbnail as p}from"./FileThumbnail.js";import"./MessageInput.js";import"./UploadFile.js";import"./SnapFooter.js";import"./Profile.js";import"./Content.js";import"./AiInput.js";import"./SearchBox.js";import"./HtmlView.js";import"./Footer.js";import"./Page.js";import"./QrCodeDialog.js";import{makeStyles as u}from"../node_modules/@griffel/react/makeStyles.esm.js";import{Card as h}from"../node_modules/@fluentui/react-card/lib/components/Card/Card.js";import{Switch as g}from"../node_modules/@fluentui/react-switch/lib/components/Switch/Switch.js";import{FullScreenMaximizeRegular as f}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-2.js";import{ArrowCollapseAllRegular as j,ArrowExpandAllRegular as b}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-0.js";import{CardHeader as x}from"../node_modules/@fluentui/react-card/lib/components/CardHeader/CardHeader.js";import{Skeleton as w}from"../node_modules/@fluentui/react-skeleton/lib/components/Skeleton/Skeleton.js";import{SkeletonItem as S}from"../node_modules/@fluentui/react-skeleton/lib/components/SkeletonItem/SkeletonItem.js";import{Caption1 as k}from"../node_modules/@fluentui/react-text/lib/components/presets/Caption1/Caption1.js";import{tokens as _}from"../node_modules/@fluentui/tokens/lib/tokens.js";import{Edit20Regular as O}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-7.js";const I=u({iframe:{border:"none",width:"100%",height:"100%"},main:{gap:"36px",display:"flex",flexDirection:"column",flexWrap:"wrap"},card:{minWidth:"300px",maxWidth:"100%",height:"fit-content",marginBottom:"1em",paddingLeft:"1em",maxHeight:"11em",borderRadius:"10px",position:"relative"},expandedCard:{minWidth:"320px",maxWidth:"100%",height:"fit-content",marginBottom:"1em",paddingLeft:"1em",borderRadius:"10px",position:"relative"},text:{margin:"0.5em",whiteSpace:"normal",fontSize:"larger"},caption:{color:_.colorNeutralForeground3},headerImage:{borderRadius:"4px",maxWidth:"44px",maxHeight:"44px"},rectangle:{margin:0,top:"-5px",left:"-2px",width:"5px",position:"absolute",height:"100%"},fileList:{display:"flex",overflowX:"auto",overflowY:"hidden",scrollbarWidth:"thin",msOverflowStyle:"none",padding:"4px",margin:"0 -4px",maxWidth:"100%",boxSizing:"border-box","&::-webkit-scrollbar":{height:"6px"},"&::-webkit-scrollbar-track":{background:"transparent"},"&::-webkit-scrollbar-thumb":{backgroundColor:_.colorNeutralStroke1,borderRadius:"3px"}},htmlButton:{fontSize:"1.5em",cursor:"pointer",marginLeft:"0.5em"},headerButton:{fontSize:"1.5em",cursor:"pointer",marginLeft:"0.5em"},iconButtonRow:{position:"absolute",top:"0.5em",right:"0.5em",display:"flex",alignItems:"center",gap:"0.5em",zIndex:2},content:{overflow:"hidden",transition:"max-height 0.3s ease-out",userSelect:"text"},truncated:{maxHeight:"10em"},header:{display:"flex",flexDirection:"row",gap:"0.5em",alignItems:"center"},todoSwitch:{transform:"scale(0.8)","& .fui-Switch__label":{fontSize:"0.75rem"}}}),C=({header:u,description:_,timestamp:C,text:E,image:N,tags:v,id:T,fileIds:y,codicentService:A,busy:B,onEdit:F,onShowHtmlPreview:L})=>{const P=I(),R=n(),[D,H]=o(!1),[G,z]=o(!1),[M,K]=o("unknown"),[W,$]=o(!1),U=i(null),Y=Object.keys(d("LOGBOOK_TAG_DEFINITIONS")),V=Y.find((e=>v.includes(e)))||(y.length>0?Y.find((e=>"file"===e)):void 0),[Q,X]=o([]),q=v.includes("todo"),{t:J}=c(),Z=["TYPE","CUSTOMER","CONTACT","SALESPERSON","MESSAGE","COMPANY","PHONE","EMAIL","WEBSITE","INFO","FÖRETAG","ROLE","KONTAKT"],ee=[J("Typ"),J("Kund"),J("Kontakt"),J("Säljare"),J("Meddelande"),J("Företag"),J("Telefon"),J("E-post"),J("Hemsida"),J("Info"),J("Företag"),J("Roll"),J("Kontakt")];r((()=>{Promise.all(y.map((e=>A.getFileInfo(e)))).then((e=>{X(e)}))}),[A,X,y]),r((()=>{const e=()=>{if(U.current){const e=U.current.scrollHeight>100+(Q.length>0?-72:0);z(e)}};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)}),[E,Q]),r((()=>{if(q){(async()=>{try{const e=await A.getTodoStatus(T);K(e)}catch(e){console.error("Error loading todo status:",e),K("unknown")}})()}}),[q,T,A]);const te=()=>H(!D),oe=v.includes("chat")&&(E.includes("#function_result")||E.includes("#finish_reason_function_call")),ie=e=>{const t=e.indexOf("```html");if(-1===t)return e;const o=e.indexOf("```",t+7);if(-1===o)return e.substring(t+7);return e.substring(t+7,o)},re=new m(E).data,ne=V&&d("LOGBOOK_TAG_DEFINITIONS")[V].editable,se=V&&d("LOGBOOK_TAG_DEFINITIONS")[V].imageSize||void 0;return e(h,{className:D?P.expandedCard:P.card,style:{backgroundColor:d("MESSAGE_HIDE_BAR")?V?d("LOGBOOK_TAG_DEFINITIONS")[V].color:d("APP_HEADER_COLOR")||"#eee":"#eee"},onClick:v.includes("chat")?e=>{v.includes("chat")&&(e&&e.stopPropagation(),R("/chat?id="+T))}:void 0,children:[!d("MESSAGE_HIDE_BAR")&&t("div",{className:P.rectangle,style:{backgroundColor:V?d("LOGBOOK_TAG_DEFINITIONS")[V].color:d("APP_HEADER_COLOR")||void 0}}),e("div",{className:P.iconButtonRow,children:[q&&t(g,{className:P.todoSwitch,checked:"done"===M,onChange:(e,t)=>(async e=>{if(!W){$(!0);try{const t=e?"done":"undone";await A.updateTodoStatus(T,t)&&K(t)}catch(e){console.error("Error updating todo status:",e)}finally{$(!1)}}})(t.checked),disabled:W||"unknown"===M,label:J("done"===M?"Done":"Todo")}),ne&&F&&t(O,{className:P.htmlButton,onClick:()=>F()}),L&&!ne&&v.includes("html")&&t(f,{className:P.htmlButton,onClick:e=>{e.stopPropagation(),L(ie(E))}}),G&&!v.includes("chat")&&D&&t(j,{className:P.headerButton,onClick:te}),G&&!v.includes("chat")&&!D&&t(b,{className:P.headerButton,onClick:te})]}),t(x,{image:N?t("img",{className:P.headerImage,src:"app_logo.svg",alt:"User"}):null,header:B?t(w,{style:{width:"50%"},children:t(S,{})}):e("div",{className:P.header,children:[t(l,{weight:"semibold",children:u}),C&&t(l,{weight:"regular",children:C})]}),description:t(k,{className:P.caption,children:_})}),e("div",{ref:U,className:`${P.content} ${D?"":P.truncated}`,children:[Q.length>0&&t("div",{className:P.fileList,children:Q.map((e=>t(p,{file:e,thumbnailSize:se,getImageUrl:s.getImageUrl,onClick:()=>{e.contentType.startsWith("image")?R(`/image?id=${T}&file=${e.id}`):s.downloadFile(e)}},e.id)))}),B?e(w,{style:{width:"100%"},children:[t(S,{}),t(S,{}),t(S,{}),t(S,{}),t(S,{})]}):t("div",{className:P.text,children:v.includes("html")?t("iframe",{className:P.iframe,title:"html",srcDoc:ie(E),sandbox:"allow-same-origin allow-scripts"}):v.includes("crm")&&0===Object.keys(re).length?t(a,{content:oe?"*"+J("Tänker")+"...*":re?(()=>{const e=new RegExp(`(${Z.join("|")})\\s*:\\s*`,"gi");return E.replace(e,((e,t)=>{const o=Z.indexOf(t.toUpperCase());-1===o&&console.log("Field not found:",t);return`\n**${-1!==o?ee[o]:t}:** `})).trim()})():E}):t(a,{content:oe?"*"+J("Tänker")+"...*":re&&re&&Object.keys(re).length>0?Object.keys(re).map((e=>{const t=Z.indexOf(e.toUpperCase());return`**${-1!==t?ee[t]:e}:** ${re[e]}\n`})).join("\n"):E})})]})]})};export{C as default};
1
+ import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useState as o,useRef as i,useEffect as r}from"react";import{useNavigate as n}from"react-router-dom";import{CodicentService as s}from"../services/codicent.js";import a from"./Markdown.js";import"./Textarea.js";import"./Button.js";import"./CompoundButton.js";import{Text as l}from"./Text.js";import"./Spinner.js";import"./TextHeader.js";import"./TypingIndicator.js";import"./Dialog.js";import"./ChatInput.js";import"./CombinedPlaceholderDialog.js";import"./ChatMessage.js";import"./Header.js";import m from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as d}from"../config/index.js";import"../utils/cacheManager.js";import"../lib/wavtools/lib/wav_packer.js";import"../lib/wavtools/lib/analysis/audio_analysis.js";import"../lib/wavtools/lib/wav_stream_player.js";import"../lib/wavtools/lib/wav_recorder.js";import"../pages/AppFrame.js";import"../pages/Chat.js";import"../pages/Compose.js";import"../pages/Snap.js";import"../pages/Search.js";import"../pages/Login.js";import"../pages/CrmPage.js";import"../pages/CrmPagePersistent.js";import"../pages/ImageView.js";import"../pages/FormInvite.js";import"../pages/FormAccept.js";import"../pages/Sales.js";import"../pages/Purchase.js";import c from"../hooks/useLocalization.js";import"../hooks/useAppStyles.js";import{FileThumbnail as p}from"./FileThumbnail.js";import"./MessageInput.js";import"./UploadFile.js";import"./SnapFooter.js";import"./Profile.js";import"./Content.js";import"./AiInput.js";import"./SearchBox.js";import"./HtmlView.js";import"./Footer.js";import"./Page.js";import"./QrCodeDialog.js";import{makeStyles as u}from"../node_modules/@griffel/react/makeStyles.esm.js";import{Card as h}from"../node_modules/@fluentui/react-card/lib/components/Card/Card.js";import{Switch as g}from"../node_modules/@fluentui/react-switch/lib/components/Switch/Switch.js";import{FullScreenMaximizeRegular as f}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-2.js";import{ArrowCollapseAllRegular as j,ArrowExpandAllRegular as x}from"../node_modules/@fluentui/react-icons/lib/icons/chunk-0.js";import{CardHeader as b}from"../node_modules/@fluentui/react-card/lib/components/CardHeader/CardHeader.js";import{Skeleton as w}from"../node_modules/@fluentui/react-skeleton/lib/components/Skeleton/Skeleton.js";import{SkeletonItem as S}from"../node_modules/@fluentui/react-skeleton/lib/components/SkeletonItem/SkeletonItem.js";import{Caption1 as k}from"../node_modules/@fluentui/react-text/lib/components/presets/Caption1/Caption1.js";import{tokens as _}from"../node_modules/@fluentui/tokens/lib/tokens.js";import{Edit20Regular as O}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-7.js";const I=u({iframe:{border:"none",width:"100%",height:"100%"},main:{gap:"36px",display:"flex",flexDirection:"column",flexWrap:"wrap"},card:{minWidth:"300px",maxWidth:"100%",height:"fit-content",marginBottom:"1em",paddingLeft:"1em",maxHeight:"11em",borderRadius:"10px",position:"relative"},expandedCard:{minWidth:"320px",maxWidth:"100%",height:"fit-content",marginBottom:"1em",paddingLeft:"1em",borderRadius:"10px",position:"relative"},text:{margin:"0.5em",whiteSpace:"normal",fontSize:"larger"},caption:{color:_.colorNeutralForeground3},headerImage:{borderRadius:"4px",maxWidth:"44px",maxHeight:"44px"},rectangle:{margin:0,top:"-5px",left:"-2px",width:"5px",position:"absolute",height:"100%"},fileList:{display:"flex",overflowX:"auto",overflowY:"hidden",scrollbarWidth:"thin",msOverflowStyle:"none",padding:"4px",margin:"0 -4px",maxWidth:"100%",boxSizing:"border-box","&::-webkit-scrollbar":{height:"6px"},"&::-webkit-scrollbar-track":{background:"transparent"},"&::-webkit-scrollbar-thumb":{backgroundColor:_.colorNeutralStroke1,borderRadius:"3px"}},htmlButton:{fontSize:"1.5em",cursor:"pointer",marginLeft:"0.5em"},headerButton:{fontSize:"1.5em",cursor:"pointer",marginLeft:"0.5em"},iconButtonRow:{position:"absolute",top:"0.5em",right:"0.5em",display:"flex",alignItems:"center",gap:"0.5em",zIndex:2},content:{overflow:"hidden",transition:"max-height 0.3s ease-out",userSelect:"text"},truncated:{maxHeight:"10em"},header:{display:"flex",flexDirection:"row",gap:"0.5em",alignItems:"center"},todoSwitch:{transform:"scale(0.8)","& .fui-Switch__label":{fontSize:"0.75rem"}}}),C=({header:u,description:_,timestamp:C,text:v,image:E,tags:N,id:T,fileIds:y,codicentService:A,busy:B,onEdit:F,onShowHtmlPreview:L,maxHeightPx:P})=>{const H=I(),R=n(),[D,G]=o(!1),[z,M]=o(!1),[K,W]=o("unknown"),[$,U]=o(!1),Y=i(null),V=Object.keys(d("LOGBOOK_TAG_DEFINITIONS")),Q=V.find((e=>N.includes(e)))||(y.length>0?V.find((e=>"file"===e)):void 0),[X,q]=o([]),J=N.includes("todo"),{t:Z}=c(),ee=["TYPE","CUSTOMER","CONTACT","SALESPERSON","MESSAGE","COMPANY","PHONE","EMAIL","WEBSITE","INFO","FÖRETAG","ROLE","KONTAKT"],te=[Z("Typ"),Z("Kund"),Z("Kontakt"),Z("Säljare"),Z("Meddelande"),Z("Företag"),Z("Telefon"),Z("E-post"),Z("Hemsida"),Z("Info"),Z("Företag"),Z("Roll"),Z("Kontakt")];r((()=>{Promise.all(y.map((e=>A.getFileInfo(e)))).then((e=>{q(e)}))}),[A,q,y]),r((()=>{const e=()=>{if(Y.current){const e=P??100,t=Y.current.scrollHeight>e+(X.length>0?-72:0);M(t)}};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)}),[v,X,P]),r((()=>{if(J){(async()=>{try{const e=await A.getTodoStatus(T);W(e)}catch(e){console.error("Error loading todo status:",e),W("unknown")}})()}}),[J,T,A]);const oe=()=>G(!D),ie=N.includes("chat")&&(v.includes("#function_result")||v.includes("#finish_reason_function_call")),re=e=>{const t=e.indexOf("```html");if(-1===t)return e;const o=e.indexOf("```",t+7);if(-1===o)return e.substring(t+7);return e.substring(t+7,o)},ne=new m(v).data,se=Q&&d("LOGBOOK_TAG_DEFINITIONS")[Q].editable,ae=Q&&d("LOGBOOK_TAG_DEFINITIONS")[Q].imageSize||void 0;return e(h,{className:D?H.expandedCard:H.card,style:{backgroundColor:d("MESSAGE_HIDE_BAR")?Q?d("LOGBOOK_TAG_DEFINITIONS")[Q].color:d("APP_HEADER_COLOR")||"#eee":"#eee",maxHeight:P?`${P}px`:void 0},onClick:N.includes("chat")?e=>{N.includes("chat")&&(e&&e.stopPropagation(),R("/chat?id="+T))}:void 0,children:[!d("MESSAGE_HIDE_BAR")&&t("div",{className:H.rectangle,style:{backgroundColor:Q?d("LOGBOOK_TAG_DEFINITIONS")[Q].color:d("APP_HEADER_COLOR")||void 0}}),e("div",{className:H.iconButtonRow,children:[J&&t(g,{className:H.todoSwitch,checked:"done"===K,onChange:(e,t)=>(async e=>{if(!$){U(!0);try{const t=e?"done":"undone";await A.updateTodoStatus(T,t)&&W(t)}catch(e){console.error("Error updating todo status:",e)}finally{U(!1)}}})(t.checked),disabled:$||"unknown"===K,label:Z("done"===K?"Done":"Todo")}),se&&F&&t(O,{className:H.htmlButton,onClick:()=>F()}),L&&!se&&N.includes("html")&&t(f,{className:H.htmlButton,onClick:e=>{e.stopPropagation(),L(re(v))}}),z&&!N.includes("chat")&&D&&t(j,{className:H.headerButton,onClick:oe}),z&&!N.includes("chat")&&!D&&t(x,{className:H.headerButton,onClick:oe})]}),t(b,{image:E?t("img",{className:H.headerImage,src:"app_logo.svg",alt:"User"}):null,header:B?t(w,{style:{width:"50%"},children:t(S,{})}):e("div",{className:H.header,children:[t(l,{weight:"semibold",children:u}),C&&t(l,{weight:"regular",children:C})]}),description:t(k,{className:H.caption,children:_})}),e("div",{ref:Y,className:`${H.content} ${D?"":H.truncated}`,style:{maxHeight:!D&&P?`${P}px`:void 0},children:[X.length>0&&t("div",{className:H.fileList,children:X.map((e=>t(p,{file:e,thumbnailSize:ae,getImageUrl:s.getImageUrl,onClick:()=>{e.contentType.startsWith("image")?R(`/image?id=${T}&file=${e.id}`):s.downloadFile(e)}},e.id)))}),B?e(w,{style:{width:"100%"},children:[t(S,{}),t(S,{}),t(S,{}),t(S,{}),t(S,{})]}):t("div",{className:H.text,children:N.includes("html")?t("iframe",{className:H.iframe,title:"html",srcDoc:re(v),sandbox:"allow-same-origin allow-scripts"}):N.includes("crm")&&0===Object.keys(ne).length?t(a,{content:ie?"*"+Z("Tänker")+"...*":ne?(()=>{const e=new RegExp(`(${ee.join("|")})\\s*:\\s*`,"gi");return v.replace(e,((e,t)=>{const o=ee.indexOf(t.toUpperCase());-1===o&&console.log("Field not found:",t);return`\n**${-1!==o?te[o]:t}:** `})).trim()})():v}):t(a,{content:ie?"*"+Z("Tänker")+"...*":ne&&ne&&Object.keys(ne).length>0?Object.keys(ne).map((e=>{const t=ee.indexOf(e.toUpperCase());return`**${-1!==t?te[t]:e}:** ${ne[e]}\n`})).join("\n"):v})})]})]})};export{C as default};
package/dist/esm/index.js CHANGED
@@ -1 +1 @@
1
- export{CodicentService}from"./services/codicent.js";export{default as Markdown}from"./components/Markdown.js";export{Textarea}from"./components/Textarea.js";export{Button}from"./components/Button.js";export{CompoundButton}from"./components/CompoundButton.js";export{Title}from"./components/Title.js";export{Text}from"./components/Text.js";export{Spinner}from"./components/Spinner.js";export{Label}from"./components/Label.js";export{Input}from"./components/Input.js";export{default as TextHeader}from"./components/TextHeader.js";export{default as TypingIndicator}from"./components/TypingIndicator.js";export{default as Prompt}from"./components/Prompt.js";export{default as ChatInput}from"./components/ChatInput.js";export{CombinedPlaceholderDialog}from"./components/CombinedPlaceholderDialog.js";export{default as ChatMessage}from"./components/ChatMessage.js";export{Header}from"./components/Header.js";export{default as VoiceIcon}from"./components/VoiceIcon.js";export{default as AudioIcon}from"./components/AudioIcon.js";export{FileThumbnail}from"./components/FileThumbnail.js";export{default as MessageInput}from"./components/MessageInput.js";export{default as UploadFile}from"./components/UploadFile.js";export{default as SnapFooter}from"./components/SnapFooter.js";export{default as Profile}from"./components/Profile.js";export{default as MessageItem}from"./components/MessageItem.js";export{default as Content}from"./components/Content.js";export{default as AiInput}from"./components/AiInput.js";export{default as SearchBox}from"./components/SearchBox.js";export{default as HtmlView}from"./components/HtmlView.js";export{Footer}from"./components/Footer.js";export{Page}from"./components/Page.js";export{UrlProcessor}from"./components/UrlProcessor.js";export{DatePicker}from"./components/DatePicker.js";export{ColorPicker}from"./components/ColorPicker.js";export{TimePicker}from"./components/TimePicker.js";export{QrCodeDialog}from"./components/QrCodeDialog.js";export{default as useStateWithLocalStorage}from"./hooks/useStateWithLocalStorage.js";export{default as useAuthState}from"./hooks/useAuthState.js";export{useChat}from"./hooks/useChat.js";export{default as useCodicentState}from"./hooks/useCodicentState.js";export{useAudioRecorder}from"./hooks/useAudioRecorder.js";export{default as useTools}from"./hooks/useTools.js";export{default as useRealtimeVoiceAI}from"./hooks/useRealtimeVoiceAI.js";export{default as useLocalization}from"./hooks/useLocalization.js";export{useTemplateVariables}from"./hooks/useTemplateVariables.js";export{useCodicentApp}from"./hooks/useCodicentApp.js";export{default as useAppStyles}from"./hooks/useAppStyles.js";export{default as useToaster}from"./hooks/useToaster.js";export{default as MessageContent}from"./utils/MessageContent.js";export{default as generateBrandVariants}from"./utils/theme.js";export{default as log}from"./utils/logging.js";export{default as withWakeLock}from"./utils/withWakeLock.js";export{AppStateMachine,createAppStateMachine}from"./utils/appState.js";import{d as e}from"./_virtual/index.js";import"./lib/wavtools/lib/wav_packer.js";import"./lib/wavtools/lib/analysis/audio_analysis.js";export{WavStreamPlayer}from"./lib/wavtools/lib/wav_stream_player.js";export{WavRecorder}from"./lib/wavtools/lib/wav_recorder.js";export{getGpsLocation,isMobileDevice}from"./utils/device.js";export{getTimeString}from"./utils/helpers.js";export{CacheManager,stateMachineCacheManager}from"./utils/cacheManager.js";export{AppConfig,getConfigValue,initCodicentApp}from"./config/index.js";export{default as AppFrame}from"./pages/AppFrame.js";export{default as Chat}from"./pages/Chat.js";export{Compose}from"./pages/Compose.js";export{default as Snap}from"./pages/Snap.js";export{default as Search}from"./pages/Search.js";export{default as Login}from"./pages/Login.js";export{Logout}from"./pages/Logout.js";export{CrmPage}from"./pages/CrmPage.js";export{CrmPagePersistent}from"./pages/CrmPagePersistent.js";export{default as ImageView}from"./pages/ImageView.js";export{default as FormInvite}from"./pages/FormInvite.js";export{default as FormAccept}from"./pages/FormAccept.js";export{Sales}from"./pages/Sales.js";export{default as HtmlViewer}from"./pages/HtmlViewer.js";export{Purchase}from"./pages/Purchase.js";var o=e.StateMachine;export{o as StateMachine};
1
+ export{CodicentService,setBaseUrl}from"./services/codicent.js";export{default as Markdown}from"./components/Markdown.js";export{Textarea}from"./components/Textarea.js";export{Button}from"./components/Button.js";export{CompoundButton}from"./components/CompoundButton.js";export{Title}from"./components/Title.js";export{Text}from"./components/Text.js";export{Spinner}from"./components/Spinner.js";export{Label}from"./components/Label.js";export{Input}from"./components/Input.js";export{default as TextHeader}from"./components/TextHeader.js";export{default as TypingIndicator}from"./components/TypingIndicator.js";export{default as Prompt}from"./components/Prompt.js";export{default as ChatInput}from"./components/ChatInput.js";export{CombinedPlaceholderDialog}from"./components/CombinedPlaceholderDialog.js";export{default as ChatMessage}from"./components/ChatMessage.js";export{Header}from"./components/Header.js";export{default as VoiceIcon}from"./components/VoiceIcon.js";export{default as AudioIcon}from"./components/AudioIcon.js";export{FileThumbnail}from"./components/FileThumbnail.js";export{default as MessageInput}from"./components/MessageInput.js";export{default as UploadFile}from"./components/UploadFile.js";export{default as SnapFooter}from"./components/SnapFooter.js";export{default as Profile}from"./components/Profile.js";export{default as MessageItem}from"./components/MessageItem.js";export{default as Content}from"./components/Content.js";export{default as AiInput}from"./components/AiInput.js";export{default as SearchBox}from"./components/SearchBox.js";export{default as HtmlView}from"./components/HtmlView.js";export{Footer}from"./components/Footer.js";export{Page}from"./components/Page.js";export{UrlProcessor}from"./components/UrlProcessor.js";export{DatePicker}from"./components/DatePicker.js";export{ColorPicker}from"./components/ColorPicker.js";export{TimePicker}from"./components/TimePicker.js";export{QrCodeDialog}from"./components/QrCodeDialog.js";export{default as useStateWithLocalStorage}from"./hooks/useStateWithLocalStorage.js";export{default as useAuthState}from"./hooks/useAuthState.js";export{useChat}from"./hooks/useChat.js";export{default as useCodicentState}from"./hooks/useCodicentState.js";export{useAudioRecorder}from"./hooks/useAudioRecorder.js";export{default as useTools}from"./hooks/useTools.js";export{default as useRealtimeVoiceAI}from"./hooks/useRealtimeVoiceAI.js";export{default as useLocalization}from"./hooks/useLocalization.js";export{useTemplateVariables}from"./hooks/useTemplateVariables.js";export{useCodicentApp}from"./hooks/useCodicentApp.js";export{default as useAppStyles}from"./hooks/useAppStyles.js";export{default as useToaster}from"./hooks/useToaster.js";export{default as MessageContent}from"./utils/MessageContent.js";export{default as generateBrandVariants}from"./utils/theme.js";export{default as log}from"./utils/logging.js";export{default as withWakeLock}from"./utils/withWakeLock.js";export{AppStateMachine,createAppStateMachine}from"./utils/appState.js";import{d as e}from"./_virtual/index.js";import"./lib/wavtools/lib/wav_packer.js";import"./lib/wavtools/lib/analysis/audio_analysis.js";export{WavStreamPlayer}from"./lib/wavtools/lib/wav_stream_player.js";export{WavRecorder}from"./lib/wavtools/lib/wav_recorder.js";export{getGpsLocation,isMobileDevice}from"./utils/device.js";export{getTimeString}from"./utils/helpers.js";export{CacheManager,stateMachineCacheManager}from"./utils/cacheManager.js";export{AppConfig,getConfigValue,initCodicentApp}from"./config/index.js";export{default as AppFrame}from"./pages/AppFrame.js";export{default as Chat}from"./pages/Chat.js";export{Compose}from"./pages/Compose.js";export{default as Snap}from"./pages/Snap.js";export{default as Search}from"./pages/Search.js";export{default as Login}from"./pages/Login.js";export{Logout}from"./pages/Logout.js";export{CrmPage}from"./pages/CrmPage.js";export{CrmPagePersistent}from"./pages/CrmPagePersistent.js";export{default as ImageView}from"./pages/ImageView.js";export{default as FormInvite}from"./pages/FormInvite.js";export{default as FormAccept}from"./pages/FormAccept.js";export{Sales}from"./pages/Sales.js";export{default as HtmlViewer}from"./pages/HtmlViewer.js";export{Purchase}from"./pages/Purchase.js";var o=e.StateMachine;export{o as StateMachine};
@@ -1 +1 @@
1
- import{createFluentIcon as l}from"../utils/createFluentIcon.js";const a=l("ArrowUndo20Regular","20",["M5 2.5a.5.5 0 0 0-1 0v4.9c0 .33.27.6.6.6h4.9a.5.5 0 0 0 0-1H5.9l3.48-3.02a4 4 0 0 1 5.25 6.04l-8.17 7.1a.5.5 0 0 0 .65.76l8.17-7.1a5 5 0 0 0-6.56-7.55L5 6.46V2.5Z"],{flipInRtl:!0});export{a as ArrowUndo20Regular};
1
+ import{createFluentIcon as l}from"../utils/createFluentIcon.js";const a=l("ArrowLeft24Regular","24",["M10.73 19.8a.75.75 0 0 0 1.04-1.1l-6.25-5.95h14.73a.75.75 0 0 0 0-1.5H5.52l6.25-5.95a.75.75 0 0 0-1.04-1.1l-7.42 7.08a1 1 0 0 0 0 1.44l7.42 7.07Z"]),r=l("ArrowUndo20Regular","20",["M5 2.5a.5.5 0 0 0-1 0v4.9c0 .33.27.6.6.6h4.9a.5.5 0 0 0 0-1H5.9l3.48-3.02a4 4 0 0 1 5.25 6.04l-8.17 7.1a.5.5 0 0 0 .65.76l8.17-7.1a5 5 0 0 0-6.56-7.55L5 6.46V2.5Z"],{flipInRtl:!0});export{a as ArrowLeft24Regular,r as ArrowUndo20Regular};
@@ -1 +1 @@
1
- {"version":3,"file":"CrmPage.d.ts","sourceRoot":"","sources":["../../../src/pages/CrmPage.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA4D,MAAM,OAAO,CAAC;AASjF,OAAO,EAAE,gBAAgB,EAA+B,aAAa,EAAE,MAAM,UAAU,CAAC;AAsExF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,CA+VhF,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"CrmPage.d.ts","sourceRoot":"","sources":["../../../src/pages/CrmPage.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAWjF,OAAO,EAAE,gBAAgB,EAA+B,aAAa,EAAE,MAAM,UAAU,CAAC;AAyExF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,CAqWhF,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -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 s}from"react";import{CodicentService as a}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 m from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import p from"../components/VoiceIcon.js";import l from"../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"../components/FileThumbnail.js";import d from"../components/MessageInput.js";import u 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/HtmlView.js";import"../components/Footer.js";import{Page as g}from"../components/Page.js";import"../components/QrCodeDialog.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import j from"../hooks/useLocalization.js";import"../hooks/useAppStyles.js";import f from"../hooks/useToaster.js";import{useSearchParams as h}from"react-router-dom";import{l as v}from"../node_modules/lodash/lodash.js";import{makeStyles as k}from"../node_modules/@griffel/react/makeStyles.esm.js";import{shorthands as x}from"../node_modules/@griffel/core/index.esm.js";import{tokens as S}from"../node_modules/@fluentui/tokens/lib/tokens.js";import{MessageBar as b}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js";import{MessageBarBody as w}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js";const y=k({main:{flexGrow:1,...x.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:S.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"}}),_=({state:k,voice:x})=>{const S=y(),{t:_}=j(),[I,C]=t(!1),M=n(null),U=n(null),B=n(null),[A]=t(null),[F,P]=t([]),{service:T}=k,[E,N]=h(),[O,$]=t(""),[L,R]=t(void 0),V=f(),[D,H]=t(void 0),[z,G]=t("info"),W=r((e=>{for(const o of e)T.getFileInfo(o).then((e=>{P((o=>[...o,e]))}))}),[T,P]),J=r((e=>{const o=new FormData;o.append("file",e),T.uploadFile(e.name,o).then((e=>{W([e])})).catch((()=>{V.notify(_("Error"),_("Error uploading pasted image"),"")}))}),[T,W,V,_]),K=e=>{C(e)};i((()=>{const e=E.get("text"),o=E.get("url");e&&($(e),E.delete("text")),o&&(E.delete("url"),$(((e||"")+" "+o).trim())),N(E,{replace:!0})}),[E,N,$,T,W]);const Q=r((async e=>{if(!e||e.length<10)return;H(_("Analyserar...")),G("info");const o=await T.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 l(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++;H(_(4===t?"Allt är med":o.shortSummary||"Något saknas")),G(4===t?"success":"warning")}catch{H("Error: "+e.content),G("error")}}}),[T]),X=s((()=>v.debounce(Q,2e3)),[Q]);return i((()=>()=>{X.cancel()}),[X]),e(g,{hideHeader:!0,children:o("div",{className:S.container,style:{backgroundImage:`url(${c("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[x&&c("SHOW_VOICE_BUTTON")&&e("div",{className:S.voiceIcon,children:e(p,{voice:x})}),e(m,{title:c("APP_SAVE_TITLE")?_(c("APP_SAVE_TITLE")):_("Spara")}),e(d,{defaultText:O,onSend:e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${k.context.name||k.context.user?.email||k.context.nickname||"-"}`}${A?" "+A:""}${F.length>0?"\n":""}${F.map((e=>`#file:${e.id}`)).join(" ")}`,T.sendMessage(e).then((()=>{V.notify(_("Meddelande"),_("Meddelandet är sparat."),"")}))},files:F,onFilesChange:P,isUploading:I,onUploadImage:()=>{U.current?.triggerUpload()},onUploadCamera:()=>{B.current?.triggerUpload()},getImageUrl:a.getImageUrl,hasLocation:!!A,disableSend:!0,rows:9,placeholder:_("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==L&&(R(e),e&&e.trim().length>0?X(e):(H(void 0),X.cancel()))},onImagePasted:J}),D&&o("div",{className:S.review,children:[e("h3",{children:_("Analys")}),e(b,{intent:z,layout:"multiline",children:e(w,{children:_(D)})})]}),e(u,{ref:M,onFileUploaded:W,onUploading:K,multiple:!0,codicentService:T}),e(u,{codicentService:T,ref:U,onFileUploaded:W,onUploading:K,multiple:!0,accept:"image/*"}),e(u,{codicentService:T,ref:B,onFileUploaded:W,onUploading:K,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{_ as CrmPage,_ 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{CodicentService as s}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 m from"../components/TextHeader.js";import"../components/TypingIndicator.js";import"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import p from"../components/VoiceIcon.js";import l from"../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"../components/FileThumbnail.js";import d from"../components/MessageInput.js";import u 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/HtmlView.js";import"../components/Footer.js";import{Page as g}from"../components/Page.js";import"../components/QrCodeDialog.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import j from"../hooks/useLocalization.js";import"../hooks/useAppStyles.js";import f from"../hooks/useToaster.js";import{useNavigate as h,useSearchParams as v}from"react-router-dom";import{l as k}from"../node_modules/lodash/lodash.js";import{makeStyles as b}from"../node_modules/@griffel/react/makeStyles.esm.js";import{shorthands as x}from"../node_modules/@griffel/core/index.esm.js";import{tokens as S}from"../node_modules/@fluentui/tokens/lib/tokens.js";import{Button as w}from"../node_modules/@fluentui/react-button/lib/components/Button/Button.js";import{MessageBar as _}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js";import{MessageBarBody as y}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js";import{ArrowLeft24Regular as I}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-1.js";const B=b({main:{flexGrow:1,...x.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:S.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"}}),C=({state:b,voice:x})=>{const S=B(),{t:C}=j(),M=h(),[U,A]=t(!1),T=n(null),F=n(null),N=n(null),[P]=t(null),[E,O]=t([]),{service:$}=b,[L,R]=v(),[V,z]=t(""),[D,H]=t(void 0),G=f(),[W,J]=t(void 0),[K,Q]=t("info"),X=r((e=>{for(const o of e)$.getFileInfo(o).then((e=>{O((o=>[...o,e]))}))}),[$,O]),Y=r((e=>{const o=new FormData;o.append("file",e),$.uploadFile(e.name,o).then((e=>{X([e])})).catch((()=>{G.notify(C("Error"),C("Error uploading pasted image"),"")}))}),[$,X,G,C]),q=e=>{A(e)};i((()=>{const e=L.get("text"),o=L.get("url");e&&(z(e),L.delete("text")),o&&(L.delete("url"),z(((e||"")+" "+o).trim())),R(L,{replace:!0})}),[L,R,z,$,X]);const Z=r((async e=>{if(!e||e.length<10)return;J(C("Analyserar...")),Q("info");const o=await $.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 l(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++;J(C(4===t?"Allt är med":o.shortSummary||"Något saknas")),Q(4===t?"success":"warning")}catch{J("Error: "+e.content),Q("error")}}}),[$]),ee=a((()=>k.debounce(Z,2e3)),[Z]);return i((()=>()=>{ee.cancel()}),[ee]),e(g,{hideHeader:!0,children:o("div",{className:S.container,style:{backgroundImage:`url(${c("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[x&&c("SHOW_VOICE_BUTTON")&&e("div",{className:S.voiceIcon,children:e(p,{voice:x})}),e("div",{className:S.backButton,children:e(w,{appearance:"subtle",icon:e(I,{}),onClick:()=>M(-1),children:C("Tillbaka")})}),e(m,{title:c("APP_SAVE_TITLE")?C(c("APP_SAVE_TITLE")):C("Spara")}),e(d,{defaultText:V,onSend:e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${b.context.name||b.context.user?.email||b.context.nickname||"-"}`}${P?" "+P:""}${E.length>0?"\n":""}${E.map((e=>`#file:${e.id}`)).join(" ")}`,$.sendMessage(e).then((()=>{G.notify(C("Meddelande"),C("Meddelandet är sparat."),"")}))},files:E,onFilesChange:O,isUploading:U,onUploadImage:()=>{F.current?.triggerUpload()},onUploadCamera:()=>{N.current?.triggerUpload()},getImageUrl:s.getImageUrl,hasLocation:!!P,disableSend:!0,rows:9,placeholder:C("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==D&&(H(e),e&&e.trim().length>0?ee(e):(J(void 0),ee.cancel()))},onImagePasted:Y}),W&&o("div",{className:S.review,children:[e("h3",{children:C("Analys")}),e(_,{intent:K,layout:"multiline",children:e(y,{children:C(W)})})]}),e(u,{ref:T,onFileUploaded:X,onUploading:q,multiple:!0,codicentService:$}),e(u,{codicentService:$,ref:F,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*"}),e(u,{codicentService:$,ref:N,onFileUploaded:X,onUploading:q,multiple:!0,accept:"image/*",capture:"environment"})]})})};export{C as CrmPage,C as default};
@@ -1 +1 @@
1
- {"version":3,"file":"CrmPagePersistent.d.ts","sourceRoot":"","sources":["../../../src/pages/CrmPagePersistent.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAWjF,OAAO,EAAE,gBAAgB,EAA+B,aAAa,EAAE,MAAM,UAAU,CAAC;AAiHxF,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,CAqT1F,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"CrmPagePersistent.d.ts","sourceRoot":"","sources":["../../../src/pages/CrmPagePersistent.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAajF,OAAO,EAAE,gBAAgB,EAA+B,aAAa,EAAE,MAAM,UAAU,CAAC;AAoHxF,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAA;CAAE,CA2T1F,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -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{CodicentService as s}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 l 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 m from"../components/VoiceIcon.js";import p from"../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{isMobileDevice as d}from"../utils/device.js";import"../components/FileThumbnail.js";import u from"../components/MessageInput.js";import f 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/HtmlView.js";import"../components/Footer.js";import{Page as g}from"../components/Page.js";import"../components/QrCodeDialog.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import h from"../hooks/useLocalization.js";import"../hooks/useAppStyles.js";import j from"../hooks/useToaster.js";import{useSearchParams as x}from"react-router-dom";import{l as S}from"../node_modules/lodash/lodash.js";import{makeStyles as v}from"../node_modules/@griffel/react/makeStyles.esm.js";import{shorthands as y}from"../node_modules/@griffel/core/index.esm.js";import{tokens as k}from"../node_modules/@fluentui/tokens/lib/tokens.js";import{Text as w}from"../node_modules/@fluentui/react-text/lib/components/Text/Text.js";import{Spinner as b}from"../node_modules/@fluentui/react-spinner/lib/components/Spinner/Spinner.js";import{Card as C}from"../node_modules/@fluentui/react-card/lib/components/Card/Card.js";import{MessageBar as M}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js";import{MessageBarBody as N}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js";const _=v({main:{flexGrow:1,...y.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...y.gap("16px"),...y.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...y.gap("16px"),...y.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",...y.gap("8px"),overflowY:"auto",...y.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...y.gap("8px"),overflowY:"auto",...y.padding("8px"),maxHeight:"300px"},historyCard:{...y.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:k.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...y.gap("4px")},historyDate:{fontSize:k.fontSizeBase200,color:k.colorNeutralForeground3},historyText:{fontSize:k.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:k.fontSizeBase400,fontWeight:k.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:k.colorNeutralForeground3,padding:"20px"}}),T=({state:v,voice:y})=>{const k=_(),{t:T}=h(),[I,B]=t(!1),A=n(null),D=n(null),E=n(null),[F]=t(null),[U,$]=t([]),{service:P}=v,[O,z]=x(),[L,R]=t(""),[H,W]=t(void 0),V=j(),[G,J]=t(void 0),[Y,K]=t("info"),[Q,X]=t([]),[q,Z]=t(!1),ee=d(),oe=r((e=>{for(const o of e)P.getFileInfo(o).then((e=>{$((o=>[...o,e]))}))}),[P,$]),te=r((e=>{const o=new FormData;o.append("file",e),P.uploadFile(e.name,o).then((e=>{oe([e])})).catch((()=>{V.notify(T("Error"),T("Error uploading pasted image"),"")}))}),[P,oe,V,T]),ne=e=>{B(e)},re=r((async()=>{Z(!0);try{const e=await P.getMessages(["crm"]);X(e)}catch(e){console.error("Error loading CRM messages:",e),V.notify(T("Error"),T("Failed to load CRM messages"),"","error")}finally{Z(!1)}}),[P,V,T]);i((()=>{re()}),[re]),i((()=>{const e=O.get("text"),o=O.get("url");e&&(R(e),O.delete("text")),o&&(O.delete("url"),R(((e||"")+" "+o).trim())),z(O,{replace:!0})}),[O,z,R,P,oe]);const ie=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${v.context.name||v.context.user?.email||v.context.nickname||"-"}`}${F?" "+F:""}${U.length>0?"\n":""}${U.map((e=>`#file:${e.id}`)).join(" ")}`,P.sendMessage(e).then((()=>{V.notify(T("Meddelande"),T("Meddelandet är sparat."),""),re(),W(""),J(void 0)}))},ae=r((async e=>{if(!e||e.length<10)return;J(T("Analyserar...")),K("info");const o=await P.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 p(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++;J(T(4===t?"Allt är med":o.shortSummary||"Något saknas")),K(4===t?"success":"warning")}catch{J("Error: "+e.content),K("error")}}}),[P,T]),se=a((()=>S.debounce(ae,2e3)),[ae]);i((()=>()=>{se.cancel()}),[se]);const le=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?T("Just now"):r<60?`${r} ${T("minutes ago")}`:i<24?`${i} ${T("hours ago")}`:a<7?`${a} ${T("days ago")}`:t.toLocaleDateString()},me=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?"...":"")},pe=()=>o("div",{className:ee?k.historySectionMobile:k.historySection,children:[e(w,{className:k.historyTitle,children:T("Tidigare sparade")}),q?e("div",{className:k.emptyState,children:e(b,{size:"small"})}):0===Q.length?e("div",{className:k.emptyState,children:e(w,{children:T("Inga sparade meddelanden än")})}):Q.map((t=>e(C,{className:k.historyCard,onClick:()=>(e=>{const o=me(e.content);W(o)})(t),children:o("div",{className:k.historyCardContent,children:[e(w,{className:k.historyDate,children:le(t.createdAt)}),e(w,{className:k.historyText,children:me(t.content)})]})},t.id)))]});return e(g,{hideHeader:!0,children:o("div",{className:ee?k.containerMobile:k.container,children:[!ee&&pe(),o("div",{className:ee?k.inputSectionMobile:k.inputSection,style:ee?void 0:{backgroundImage:`url(${c("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[y&&c("SHOW_VOICE_BUTTON")&&e("div",{className:k.voiceIcon,children:e(m,{voice:y})}),e(l,{title:c("APP_SAVE_TITLE")?T(c("APP_SAVE_TITLE")):T("Spara")}),e(u,{defaultText:L,onSend:ie,files:U,onFilesChange:$,isUploading:I,onUploadImage:()=>{D.current?.triggerUpload()},onUploadCamera:()=>{E.current?.triggerUpload()},getImageUrl:s.getImageUrl,hasLocation:!!F,disableSend:!0,rows:9,placeholder:T("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==H&&(W(e),e&&e.trim().length>0?se(e):(J(void 0),se.cancel()))},onImagePasted:te}),G&&o("div",{className:k.review,children:[e("h3",{children:T("Analys")}),e(M,{intent:Y,layout:"multiline",children:e(N,{children:T(G)})})]}),e(f,{ref:A,onFileUploaded:oe,onUploading:ne,multiple:!0,codicentService:P}),e(f,{codicentService:P,ref:D,onFileUploaded:oe,onUploading:ne,multiple:!0,accept:"image/*"}),e(f,{codicentService:P,ref:E,onFileUploaded:oe,onUploading:ne,multiple:!0,accept:"image/*",capture:"environment"})]}),ee&&pe()]})})};export{T as CrmPagePersistent,T 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{CodicentService as s}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 l 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 m from"../components/VoiceIcon.js";import c from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as p}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 d}from"../utils/device.js";import"../components/FileThumbnail.js";import u from"../components/MessageInput.js";import f 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/HtmlView.js";import"../components/Footer.js";import{Page as g}from"../components/Page.js";import"../components/QrCodeDialog.js";import"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Sales.js";import"./Purchase.js";import h from"../hooks/useLocalization.js";import"../hooks/useAppStyles.js";import j from"../hooks/useToaster.js";import{useNavigate as x,useSearchParams as S}from"react-router-dom";import{l as v}from"../node_modules/lodash/lodash.js";import{makeStyles as y}from"../node_modules/@griffel/react/makeStyles.esm.js";import{shorthands as k}from"../node_modules/@griffel/core/index.esm.js";import{tokens as b}from"../node_modules/@fluentui/tokens/lib/tokens.js";import{Text as w}from"../node_modules/@fluentui/react-text/lib/components/Text/Text.js";import{Spinner as C}from"../node_modules/@fluentui/react-spinner/lib/components/Spinner/Spinner.js";import{Card as M}from"../node_modules/@fluentui/react-card/lib/components/Card/Card.js";import{Button as N}from"../node_modules/@fluentui/react-button/lib/components/Button/Button.js";import{MessageBar as _}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBar/MessageBar.js";import{MessageBarBody as B}from"../node_modules/@fluentui/react-message-bar/lib/components/MessageBarBody/MessageBarBody.js";import{ArrowLeft24Regular as T}from"../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-1.js";const I=y({main:{flexGrow:1,...k.padding("10px"),overflowY:"auto"},container:{display:"flex",flexDirection:"row",height:"100%",...k.gap("16px"),...k.padding("10px")},containerMobile:{display:"flex",flexDirection:"column",height:"100%",...k.gap("16px"),...k.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",...k.gap("8px"),overflowY:"auto",...k.padding("8px")},historySectionMobile:{display:"flex",flexDirection:"column",...k.gap("8px"),overflowY:"auto",...k.padding("8px"),maxHeight:"300px"},historyCard:{...k.padding("12px"),cursor:"pointer","&:hover":{backgroundColor:b.colorNeutralBackground1Hover}},historyCardContent:{display:"flex",flexDirection:"column",...k.gap("4px")},historyDate:{fontSize:b.fontSizeBase200,color:b.colorNeutralForeground3},historyText:{fontSize:b.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:b.fontSizeBase400,fontWeight:b.fontWeightSemibold,marginBottom:"8px"},emptyState:{textAlign:"center",color:b.colorNeutralForeground3,padding:"20px"},backButton:{marginBottom:"10px"}}),A=({state:y,voice:k})=>{const b=I(),{t:A}=h(),D=x(),[E,F]=t(!1),U=n(null),$=n(null),P=n(null),[z]=t(null),[O,L]=t([]),{service:R}=y,[H,W]=S(),[V,G]=t(""),[J,Y]=t(void 0),K=j(),[Q,X]=t(void 0),[q,Z]=t("info"),[ee,oe]=t([]),[te,ne]=t(!1),re=d(),ie=r((e=>{for(const o of e)R.getFileInfo(o).then((e=>{L((o=>[...o,e]))}))}),[R,L]),ae=r((e=>{const o=new FormData;o.append("file",e),R.uploadFile(e.name,o).then((e=>{ie([e])})).catch((()=>{K.notify(A("Error"),A("Error uploading pasted image"),"")}))}),[R,ie,K,A]),se=e=>{F(e)},le=r((async()=>{ne(!0);try{const e=await R.getMessages(["crm"]);oe(e)}catch(e){console.error("Error loading CRM messages:",e),K.notify(A("Error"),A("Failed to load CRM messages"),"","error")}finally{ne(!1)}}),[R,K,A]);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())),W(H,{replace:!0})}),[H,W,G,R,ie]);const me=e=>{e=`${e=`#crm\n${e.replace("#log ","")}\nSALESPERSON: ${y.context.name||y.context.user?.email||y.context.nickname||"-"}`}${z?" "+z:""}${O.length>0?"\n":""}${O.map((e=>`#file:${e.id}`)).join(" ")}`,R.sendMessage(e).then((()=>{K.notify(A("Meddelande"),A("Meddelandet är sparat."),""),le(),Y(""),X(void 0)}))},ce=r((async e=>{if(!e||e.length<10)return;X(A("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 c(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(A(4===t?"Allt är med":o.shortSummary||"Något saknas")),Z(4===t?"success":"warning")}catch{X("Error: "+e.content),Z("error")}}}),[R,A]),pe=a((()=>v.debounce(ce,2e3)),[ce]);i((()=>()=>{pe.cancel()}),[pe]);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?A("Just now"):r<60?`${r} ${A("minutes ago")}`:i<24?`${i} ${A("hours ago")}`:a<7?`${a} ${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?"...":"")},fe=()=>o("div",{className:re?b.historySectionMobile:b.historySection,children:[e(w,{className:b.historyTitle,children:A("Tidigare sparade")}),te?e("div",{className:b.emptyState,children:e(C,{size:"small"})}):0===ee.length?e("div",{className:b.emptyState,children:e(w,{children:A("Inga sparade meddelanden än")})}):ee.map((t=>e(M,{className:b.historyCard,onClick:()=>(e=>{const o=ue(e.content);Y(o)})(t),children:o("div",{className:b.historyCardContent,children:[e(w,{className:b.historyDate,children:de(t.createdAt)}),e(w,{className:b.historyText,children:ue(t.content)})]})},t.id)))]});return e(g,{hideHeader:!0,children:o("div",{className:re?b.containerMobile:b.container,children:[!re&&fe(),o("div",{className:re?b.inputSectionMobile:b.inputSection,style:re?void 0:{backgroundImage:`url(${p("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[k&&p("SHOW_VOICE_BUTTON")&&e("div",{className:b.voiceIcon,children:e(m,{voice:k})}),e("div",{className:b.backButton,children:e(N,{appearance:"subtle",icon:e(T,{}),onClick:()=>D(-1),children:A("Tillbaka")})}),e(l,{title:p("APP_SAVE_TITLE")?A(p("APP_SAVE_TITLE")):A("Spara")}),e(u,{defaultText:V,onSend:me,files:O,onFilesChange:L,isUploading:E,onUploadImage:()=>{$.current?.triggerUpload()},onUploadCamera:()=>{P.current?.triggerUpload()},getImageUrl:s.getImageUrl,hasLocation:!!z,disableSend:!0,rows:9,placeholder:A("Beskriv CRM-aktivitet här..."),onChange:e=>{e!==J&&(Y(e),e&&e.trim().length>0?pe(e):(X(void 0),pe.cancel()))},onImagePasted:ae}),Q&&o("div",{className:b.review,children:[e("h3",{children:A("Analys")}),e(_,{intent:q,layout:"multiline",children:e(B,{children:A(Q)})})]}),e(f,{ref:U,onFileUploaded:ie,onUploading:se,multiple:!0,codicentService:R}),e(f,{codicentService:R,ref:$,onFileUploaded:ie,onUploading:se,multiple:!0,accept:"image/*"}),e(f,{codicentService:R,ref:P,onFileUploaded:ie,onUploading:se,multiple:!0,accept:"image/*",capture:"environment"})]}),re&&fe()]})})};export{A as CrmPagePersistent,A as default};
@@ -1 +1 @@
1
- {"version":3,"file":"Sales.d.ts","sourceRoot":"","sources":["../../../src/pages/Sales.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAmB,MAAM,UAAU,CAAC;AAyF7D,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAkNvD,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Sales.d.ts","sourceRoot":"","sources":["../../../src/pages/Sales.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAKhE,OAAO,EAAE,gBAAgB,EAAmB,MAAM,UAAU,CAAC;AA+F7D,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAoNvD,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1 +1 @@
1
- import{jsx as e,jsxs as o,Fragment as t}from"react/jsx-runtime";import{useState as n,useCallback as i,useEffect as s}from"react";import"../components/Markdown.js";import{Textarea as r}from"../components/Textarea.js";import{Button as a}from"../components/Button.js";import"../components/CompoundButton.js";import{Text as l}from"../components/Text.js";import"../components/Spinner.js";import{Input as c}from"../components/Input.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import{Dialog as m,DialogTitle as p,DialogContent as d,DialogActions as h}from"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as g}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"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Purchase.js";import u from"../hooks/useLocalization.js";import"../hooks/useAppStyles.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/HtmlView.js";import"../components/Footer.js";import{Page as j}from"../components/Page.js";import{QrCodeDialog as f}from"../components/QrCodeDialog.js";import{makeStyles as x}from"../node_modules/@griffel/react/makeStyles.esm.js";import{tokens as C}from"../node_modules/@fluentui/tokens/lib/tokens.js";import{shorthands as _}from"../node_modules/@griffel/core/index.esm.js";import{Image as k}from"../node_modules/@fluentui/react-image/lib/components/Image/Image.js";import{mergeClasses as b}from"../node_modules/@griffel/core/mergeClasses.esm.js";const v=x({root:{display:"flex",flexDirection:"column",height:"100%",touchAction:"pan-y"},header:{display:"flex",justifyContent:"space-between",alignItems:"center",color:C.colorNeutralForegroundOnBrand,..._.padding("10px","20px")},logo:{maxWidth:"100px",maxHeight:"50px",height:"auto",cursor:"pointer"},inputContainer:{display:"flex",justifyContent:"flex-end",alignItems:"center",maxWidth:"300px",width:"200px",paddingLeft:"10px"},dashboard:{display:"flex",justifyContent:"space-around",width:"100%",marginTop:"20px"},statBox:{..._.padding("10px"),..._.borderRadius("12px"),minWidth:"50px",textAlign:"center",color:"white"},buttonContainer:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",gap:"30px",alignItems:"center",..._.padding("20px")},actionButton:{width:"14rem",minWidth:"15rem",height:"3rem"},textAreaContainer:{display:"flex",flexDirection:"column",gap:"10px"},opened:{backgroundColor:"#1a5614"},not_home:{backgroundColor:"#f44336"},sales:{backgroundColor:"#2196F3"},call_back:{backgroundColor:"#FF9800"}}),w={opened:"#1a5614",not_home:"#f44336",sales:"#2196F3",call_back:"#FF9800"},y=()=>{const x=v(),{t:_}=u(),[y,I]=n(""),[A,P]=n(),[F,$]=n({opened:0,not_home:0,sales:0,call_back:0}),[N,B]=n([]),[M,D]=n(!1),[S,O]=n(""),[H,T]=n(""),[L,z]=n(""),[U,E]=n(!1),[G,R]=n(!1),[W,V]=n(!1),K={backgroundColor:g("APP_HEADER_COLOR")||C.colorBrandBackground},Q=i((()=>new Promise((e=>{navigator.geolocation?navigator.geolocation.getCurrentPosition((o=>{const t=`#position (${o.coords.latitude},${o.coords.longitude})`;e(t)})):e(void 0)}))),[P]);s((()=>{window.Codicent.getDataMessages({codicent:g("APP_NAME"),tags:["sales_code"]}).then((e=>{e=e.filter((e=>"1"!==e.data.inactive)),B(e)})).catch(console.error),Q()}),[]);const q=async()=>{if(!y)return;const e=["not_home","sales","call_back","opened"],o=new Date;o.setHours(0,0,0,0);const t={...F};for(const n of e){const e=await window.Codicent.getMessages({search:`#${n} #sales_code_${y}`,afterTimestamp:o,length:1e4});t[n]=e.filter((e=>e.content.includes(`#${n} `)&&e.content.includes(`#sales_code_${y}`))).length}$(t)},J=async(e,o="")=>{const t=await Q();console.log("Got position",t);const n=`@${g("APP_NAME")} #sales_code_${y} #${e} ${t||""} ${o.trim().length>0?"#comment ":""}${o}`.trim();await window.Codicent.postMessage({message:n}),q()};return e(j,{hideHeader:!0,children:o("div",{className:x.root,children:[o("div",{className:x.header,style:K,children:[e(k,{src:H||g("APP_ICON_URL")||"https://via.placeholder.com/100",className:x.logo,onClick:()=>{H?V(!0):L&&R(!0)}}),e("div",{className:x.inputContainer,children:e(c,{value:y,onChange:e=>I(e.target.value),onBlur:()=>{const e=N.find((e=>e.data.code===y));if(e)T(`https://codicent.com/app/GetImage?fileId=${e.fileId}&width=100`),z(e.data.link),E(!0),q();else{const e=N.find((e=>e.data.code2===y.toUpperCase()));e?(T(`https://codicent.com/app/GetImage?fileId=${e.fileIds&&e.fileIds.length>1?e.fileIds[1]:e.fileId}&width=100`),z(e.data.link2),E(!0),q()):(E(!1),alert(_("Fel försäljningskod!")))}},placeholder:_("Fyll i försäljningskod"),maxLength:16,size:"large"})})]}),U&&o(t,{children:[e("div",{className:x.dashboard,children:Object.keys(F).map((o=>{return e("div",{className:(t=o,b(x.statBox,x[t])),children:e(l,{weight:"bold",size:400,children:F[o]})},o);var t}))}),e("div",{className:x.buttonContainer,children:Object.entries(w).map((([o,t])=>e(a,{size:"large",className:x.actionButton,style:{backgroundColor:t,color:"white"},onClick:()=>{J(o),"opened"===o&&D(!0),"sales"===o&&R(!0)},children:o.charAt(0).toUpperCase()+o.slice(1).replace("_"," ")},o)))}),o(m,{open:M,children:[e(p,{children:_("Skriv in avvikelse")}),e(d,{children:e("div",{className:x.textAreaContainer,children:e(r,{value:S,onChange:e=>O(e.target.value),placeholder:_("Skriv din text här..."),rows:4,size:"large"})})}),e(h,{children:e(a,{appearance:"primary",onClick:()=>{J("anomaly",`\n${S}`),D(!1),O("")},children:_("Spara")})})]}),o(m,{open:G,children:[e(p,{children:_("Godkännande")}),e(d,{children:_("Är kunden över 23 år?")}),o(h,{children:[e(a,{appearance:"primary",onClick:()=>window.open(L,"_blank"),children:_("OK")}),e(a,{appearance:"secondary",onClick:()=>R(!1),children:_("Avbryt")})]})]})]}),e(f,{isOpen:W,onDismiss:()=>V(!1),imageUrl:H})]})})};export{y as Sales,y as default};
1
+ import{jsx as e,jsxs as o,Fragment as t}from"react/jsx-runtime";import{useState as n,useCallback as i,useEffect as r}from"react";import{useNavigate as s}from"react-router-dom";import"../components/Markdown.js";import{Textarea as a}from"../components/Textarea.js";import{Button as l}from"../components/Button.js";import"../components/CompoundButton.js";import{Text as c}from"../components/Text.js";import"../components/Spinner.js";import{Input as m}from"../components/Input.js";import"../components/TextHeader.js";import"../components/TypingIndicator.js";import{Dialog as p,DialogTitle as d,DialogContent as h,DialogActions as g}from"../components/Dialog.js";import"../components/ChatInput.js";import"../components/CombinedPlaceholderDialog.js";import"../components/ChatMessage.js";import"../components/Header.js";import"../services/codicent.js";import"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"../_virtual/index.js";import{getConfigValue as u}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"./AppFrame.js";import"./Chat.js";import"./Compose.js";import"./Snap.js";import"./Search.js";import"./Login.js";import"./CrmPage.js";import"./CrmPagePersistent.js";import"./ImageView.js";import"./FormInvite.js";import"./FormAccept.js";import"./Purchase.js";import f from"../hooks/useLocalization.js";import"../hooks/useAppStyles.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/HtmlView.js";import"../components/Footer.js";import{Page as j}from"../components/Page.js";import{QrCodeDialog as x}from"../components/QrCodeDialog.js";import{makeStyles as C}from"../node_modules/@griffel/react/makeStyles.esm.js";import{tokens as b}from"../node_modules/@fluentui/tokens/lib/tokens.js";import{shorthands as k}from"../node_modules/@griffel/core/index.esm.js";import{Image as _}from"../node_modules/@fluentui/react-image/lib/components/Image/Image.js";import{mergeClasses as v}from"../node_modules/@griffel/core/mergeClasses.esm.js";const w=C({root:{display:"flex",flexDirection:"column",height:"100%",touchAction:"pan-y"},header:{display:"flex",justifyContent:"space-between",alignItems:"center",color:b.colorNeutralForegroundOnBrand,...k.padding("10px","20px")},logo:{maxWidth:"100px",maxHeight:"50px",height:"auto",cursor:"pointer"},inputContainer:{display:"flex",justifyContent:"flex-end",alignItems:"center",maxWidth:"300px",width:"200px",paddingLeft:"10px"},dashboard:{display:"flex",justifyContent:"space-around",width:"100%",marginTop:"20px"},statBox:{...k.padding("10px"),...k.borderRadius("12px"),minWidth:"50px",textAlign:"center",color:"white"},buttonContainer:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"center",gap:"30px",alignItems:"center",...k.padding("20px")},actionButton:{width:"14rem",minWidth:"15rem",height:"3rem"},textAreaContainer:{display:"flex",flexDirection:"column",gap:"10px"},opened:{backgroundColor:"#1a5614"},not_home:{backgroundColor:"#f44336"},sales:{backgroundColor:"#2196F3"},call_back:{backgroundColor:"#FF9800"},backButton:{position:"absolute",top:"10px",left:"10px",zIndex:1e3}}),y={opened:"#1a5614",not_home:"#f44336",sales:"#2196F3",call_back:"#FF9800"},I=()=>{const C=w(),{t:k}=f(),I=s(),[A,P]=n(""),[F,$]=n(),[N,B]=n({opened:0,not_home:0,sales:0,call_back:0}),[M,D]=n([]),[S,O]=n(!1),[T,H]=n(""),[L,z]=n(""),[R,U]=n(""),[E,G]=n(!1),[W,V]=n(!1),[K,Q]=n(!1),q={backgroundColor:u("APP_HEADER_COLOR")||b.colorBrandBackground},J=i((()=>new Promise((e=>{navigator.geolocation?navigator.geolocation.getCurrentPosition((o=>{const t=`#position (${o.coords.latitude},${o.coords.longitude})`;e(t)})):e(void 0)}))),[$]);r((()=>{window.Codicent.getDataMessages({codicent:u("APP_NAME"),tags:["sales_code"]}).then((e=>{e=e.filter((e=>"1"!==e.data.inactive)),D(e)})).catch(console.error),J()}),[]);const X=async()=>{if(!A)return;const e=["not_home","sales","call_back","opened"],o=new Date;o.setHours(0,0,0,0);const t={...N};for(const n of e){const e=await window.Codicent.getMessages({search:`#${n} #sales_code_${A}`,afterTimestamp:o,length:1e4});t[n]=e.filter((e=>e.content.includes(`#${n} `)&&e.content.includes(`#sales_code_${A}`))).length}B(t)},Y=async(e,o="")=>{const t=await J();console.log("Got position",t);const n=`@${u("APP_NAME")} #sales_code_${A} #${e} ${t||""} ${o.trim().length>0?"#comment ":""}${o}`.trim();await window.Codicent.postMessage({message:n}),X()};return e(j,{hideHeader:!0,children:o("div",{className:C.root,children:[e("div",{className:C.backButton,children:e(l,{appearance:"subtle",icon:"ArrowLeft24Regular",onClick:()=>I(-1),children:k("Tillbaka")})}),o("div",{className:C.header,style:q,children:[e(_,{src:L||u("APP_ICON_URL")||"https://via.placeholder.com/100",className:C.logo,onClick:()=>{L?Q(!0):R&&V(!0)}}),e("div",{className:C.inputContainer,children:e(m,{value:A,onChange:e=>P(e.target.value),onBlur:()=>{const e=M.find((e=>e.data.code===A));if(e)z(`https://codicent.com/app/GetImage?fileId=${e.fileId}&width=100`),U(e.data.link),G(!0),X();else{const e=M.find((e=>e.data.code2===A.toUpperCase()));e?(z(`https://codicent.com/app/GetImage?fileId=${e.fileIds&&e.fileIds.length>1?e.fileIds[1]:e.fileId}&width=100`),U(e.data.link2),G(!0),X()):(G(!1),alert(k("Fel försäljningskod!")))}},placeholder:k("Fyll i försäljningskod"),maxLength:16,size:"large"})})]}),E&&o(t,{children:[e("div",{className:C.dashboard,children:Object.keys(N).map((o=>{return e("div",{className:(t=o,v(C.statBox,C[t])),children:e(c,{weight:"bold",size:400,children:N[o]})},o);var t}))}),e("div",{className:C.buttonContainer,children:Object.entries(y).map((([o,t])=>e(l,{size:"large",className:C.actionButton,style:{backgroundColor:t,color:"white"},onClick:()=>{Y(o),"opened"===o&&O(!0),"sales"===o&&V(!0)},children:o.charAt(0).toUpperCase()+o.slice(1).replace("_"," ")},o)))}),o(p,{open:S,children:[e(d,{children:k("Skriv in avvikelse")}),e(h,{children:e("div",{className:C.textAreaContainer,children:e(a,{value:T,onChange:e=>H(e.target.value),placeholder:k("Skriv din text här..."),rows:4,size:"large"})})}),e(g,{children:e(l,{appearance:"primary",onClick:()=>{Y("anomaly",`\n${T}`),O(!1),H("")},children:k("Spara")})})]}),o(p,{open:W,children:[e(d,{children:k("Godkännande")}),e(h,{children:k("Är kunden över 23 år?")}),o(g,{children:[e(l,{appearance:"primary",onClick:()=>window.open(R,"_blank"),children:k("OK")}),e(l,{appearance:"secondary",onClick:()=>V(!1),children:k("Avbryt")})]})]})]}),e(x,{isOpen:K,onDismiss:()=>Q(!1),imageUrl:L})]})})};export{I as Sales,I as default};
@@ -1,3 +1,4 @@
1
+ export declare const setBaseUrl: (url: string) => void;
1
2
  export interface UserInfo {
2
3
  nickname: string;
3
4
  email: string;
@@ -1 +1 @@
1
- {"version":3,"file":"codicent.d.ts","sourceRoot":"","sources":["../../../src/services/codicent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codicent.d.ts","sourceRoot":"","sources":["../../../src/services/codicent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{loadStripe as t}from"../node_modules/@stripe/stripe-js/dist/index.js";import e from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"react/jsx-runtime";import"react";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";var o;let a="https://codicent.com/",n="-";const s=()=>void 0!==window.Codicent&&(window.Codicent.handleMessage=function(t){const e=new CustomEvent("codicent-log",{detail:{message:t}});window.dispatchEvent(e)},window.Codicent.init({token:n,baseUrl:a}),!0);let i=s();if(!i){const t=setInterval((()=>{i=s(),i&&clearInterval(t)}),100)}class r{constructor(o){this.createDataMessage=async(t,e,o)=>await window.Codicent.data.create({codicent:o||this.codicent,tag:t,data:e}),this.readDataMessages=async(t,e,o,a,n)=>await window.Codicent.data.read({codicent:o||this.codicent,tag:t,search:e,start:a,length:n}),this.readOneDataMessage=async t=>await window.Codicent.data.readOne(t),this.updateDataMessage=async(t,e,o)=>await window.Codicent.data.update({id:t,data:e,codicent:o||this.codicent}),this.deleteDataMessage=async(t,e)=>await window.Codicent.data.delete({id:t,codicent:e||this.codicent}),this.getAppTheme=async()=>{try{const t=await window.Codicent.getDataMessages({tags:["app-theme"],codicent:this.codicent});return t.length>0?t[0].data:null}catch(t){return console.error("Error fetching app theme:",t),null}},this.getAppButtons=async()=>{const t=(await window.Codicent.getDataMessages({tags:[this.options.BUTTON_TAG],codicent:this.codicent})).map((t=>t.data));return t.sort(((t,e)=>t.title>e.title?1:-1)),t},this.getAppTasks=async()=>(await window.Codicent.getMessages({search:`@${this.codicent} #app-task`,length:50})).map((t=>{const o=new e(t.content).content.split("\n"),a=o[0],n=o.slice(1).join("\n");return{id:t.id,title:a,content:n}})),this.getAppPrompts=async()=>(await window.Codicent.getDataMessages({tags:["chatprompt"],codicent:this.codicent})).map((t=>t.data)).map((({title:t,prompt:e})=>({title:t,prompt:e}))),this.uploadFile=async(t,e)=>await window.Codicent.upload(e,t),this.getFileInfo=async t=>await window.Codicent.getFileInfo(t),this.generateApiToken=async(t,e)=>{const o=await fetch(`${a}api/GenerateApiToken?project=${this.codicent}${t?`&expires=${t.toISOString()}`:""}${e?`&forUserNickname=${e}`:""}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText}`);return await o.text()},this.sendMessage=(t,e,o)=>window.Codicent.postMessage({message:`@${o||this.codicent} ${t}`,type:"text",parentId:e}),this.chat=(t,e,o)=>window.Codicent.getChatReply4({message:t,codicent:o||this.codicent,messageId:e}),this.getMessagesFast=async(t,e,o=100,n=void 0,s,i=0)=>{const r=await this.request(`${a}app/AppGetMessages`,"POST",{headers:[["Authorization",`Bearer ${this.getToken()}`],["Content-Type","application/json; charset=utf-8"]],body:JSON.stringify({tags:t,codicent:s||this.codicent,search:e,start:i,length:o})});let c=await r.json();if(c.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),n){const t=await this.getPublicFlow(n);c=c.concat(t),c.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime()))}return c},this.getMessages=async(t,e,o=10)=>{let a=[];const n=t.map((async t=>{const e=await window.Codicent.getMessages({search:`@${this.codicent} #${t}`,length:o});return"chat"===t&&e.forEach((t=>t.content=`#chat\n${t.content}`)),e}));if((await Promise.all(n)).forEach((t=>{a=a.concat(t)})),e)try{const t=await this.getPublicFlow(e);a=a.concat(t)}catch(t){console.warn("Error fetching public flow, PUBLIC_TAG missing in codicent?",t)}return a=a.filter(((t,e,o)=>e===o.findIndex((e=>e.id===t.id)))),a.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime())),a},this.registerUser=async(t,e,o,n)=>{const s=await fetch(`${a}app/RegisterAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${n}`]],body:JSON.stringify({nickname:t,email:e,userId:o})});if(!s.ok)return"";const i=await s.text();return window.Codicent.init({token:n,baseUrl:a}),i},this.loginUser=async(t,e)=>{try{const o=await fetch(`${a}app/LoginAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${e}`]],body:JSON.stringify({userId:t})});if(!o.ok)return 404===o.status||400===o.status?null:401===o.status?(this.handleUnauthorized(),null):"";const n=await o.text();return this.setToken(n),n}catch(t){return console.warn("Error logging in user:",t),""}},this.nicknameExists=async t=>{const e=await fetch(`${a}app/NicknameExists?nickname=${encodeURIComponent(t)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"]]});if(!e.ok)return!1;return await e.json()},this.logout=()=>{this.setToken("")},this.isRegistered=()=>null!==localStorage.getItem("codicent_nickname"),this.getApps=async()=>{try{const t=await fetch(`${a}app/AppGetApps`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!t.ok)throw t.status,new Error(`${t.statusText}`);const e=await t.json();return e.filter(((t,e,o)=>e===o.findIndex((e=>e.id===t.id))&&(this.options.APP_NAME||t.id.startsWith(this.options.APP_PREFIX))))}catch(t){return console.warn("Error fetching apps:",t),null}},this.addFollower=async(t,e)=>{const o=await fetch(`${a}app/AddFollower?nickname=${t}&followerNickname=${e}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText||"Failed to add follower!"}`);return await o.json()},this.cloneProject=async(t,e)=>{const o=await fetch(`${a}app/CloneProject?project=${t}&newProject=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText}`);let n=await o.json();if(n){const t='#data #app-theme \n{\n "textcolor": "#212121",\n "backgroundcolor": "#273044",\n "color": "#ffffff",\n "logo": "https://codicent.com/logo512.png",\n "title": "",\n "themeColor": "#581d71",\n "buttonColor": "#c0c0c0",\n "buttonTextColor": "#000000",\n "font": "Montserrat",\n "welcome": "Hej {{username}}!",\n "chatPlaceholder": "Tjena, Loociz här! Vad vill du?",\n "textPlaceholder": "Skriv det du vill spara, så tar jag (Loociz alltså) hand om det!",\n "transcriptionInstructions": "Tryck på knappen för att start och sedan stoppa ljudinspelning."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(n=!1)}catch{n=!1}if(n){const t='#data #app-button\n{\n "title": "Ta fram företagsinfo",\n "url": "/#/chat?text=Hej!%20Jag%20vill%20spara%20f%C3%B6retagsinfo.%20Guida%20mig%20steg%20f%C3%B6r%20steg%2C%20ett%20i%20taget%2C%20tills%20vi%20har%20all%20info%20om%20mitt%20f%C3%B6retag.%20Exempel%20p%C3%A5%20data%3A%20f%C3%B6retagsnamn%20eller%20id%C3%A9namn%2C%20org.nr.%2C%20%C3%A4gare%2C%20kontaktinformation%2C%20vision%2C%20aff%C3%A4rsid%C3%A9%2C%20mm."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(n=!1)}catch{n=!1}}}return n},this.getNickname=async()=>{try{const t=n.split(".")[1],e=atob(t),o=JSON.parse(e),s=o.sub||o.userId,i=await fetch(`${a}app/GetNickname?userId=${s}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!i.ok)throw 401===i.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${i.statusText}`);return await i.text()}catch{return""}},this.getChatInstructions=async()=>{try{const t=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:1});if(t.length>0)return t[0].content}catch{console.warn("Error fetching chat instructions")}return""},this.updateChatInstructions=async t=>{try{const e=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:100}),o=`@${this.codicent} #instructions\n${t}`;e.length>0?e[0].content!==o&&(console.log("updating instructions",o),await window.Codicent.postMessage({message:o,type:"text",parentId:e[0].id})):(console.log("new instructions",o),await window.Codicent.postMessage({message:o,type:"text"}))}catch{console.warn("Error updating chat instructions")}},this.getUserInfo=async(t,e=!1)=>{const o=await fetch(`${a}app/GetUserInfo?nickname=${t}${e?"&t="+Date.now():""}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);const n=await o.json(),{email:s,picture:i,description:r,followers:c,properties:h,owner:d}=n;return{nickname:t,email:s,name:r,picture:i,followers:c,properties:h,owner:d}},this.updateUserInfo=async({nickname:t,email:e,name:o,picture:n})=>{const s=await fetch(`${a}app/AddOrUpdateUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]],body:JSON.stringify({nickname:t,email:e,name:o,picture:n,description:""})});if(!s.ok)throw s.status,new Error(`${s.statusText}`);return await this.getUserInfo(t,!0)},this.requestInvite=async(t,e)=>{const o=await fetch(`${a}app/CreateInvitationOrRequest?forUserNickname=${t}&toProjectNickname=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return!!o.ok||(console.warn(`requestInvite() => ${o.statusText}`),!1)},this.getProjectInfo=this.getUserInfo,this.updateMembersAccess=async(t,e)=>{const o=await fetch(`${a}app/AddOrUpdateProjectProperty?project=${t}&key=APP_EDITORS&value=${e.join(",")}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return!!o.ok||(console.warn(`updateMembersAccess() => ${o.statusText}`),!1)},this.getMembersAccess=async t=>{const e=(await this.getProjectInfo(t,!0)).properties.find((t=>"APP_EDITORS"===t.name));return e&&e.value?e.value.split(","):[]},this.getMemberInfo=async(t,e)=>{const o=await fetch(`${a}app/GetMemberInfo?projectNickname=${encodeURIComponent(t)}&memberNickname=${encodeURIComponent(e)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);return await o.json()},this.setToken=t=>{n=t,n&&window.Codicent.init({token:n,baseUrl:a})},this.getToken=()=>n,this.checkPurchaseStatus=async()=>{const t=await fetch(`${a}payments/GetPaymentStatus`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!t.ok)throw new Error("Failed to check purchase status");const{isPaid:e}=await t.json();return e},this.checkSubscriptionStatus=async()=>{if(!this.options.SUBSCRIPTION_NEEDED)return"active";const t=await fetch(`${a}payments/GetSubscriptionStatus?t=${Date.now()}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`],["Cache-Control","no-cache, no-store, must-revalidate"],["Pragma","no-cache"],["Expires","0"]]});if(!t.ok)throw new Error("Failed to check subscription status");const{status:e}=await t.json();return e},this.createCheckoutSession=async t=>{const e=await fetch(`${a}payments/CreateCheckoutSession`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]],body:JSON.stringify({priceId:t,successUrl:window.location.href,cancelUrl:window.location.href})});if(!e.ok)throw new Error("Failed to create checkout session");const{id:o}=await e.json();return o},this.redirectToCheckout=async e=>{const o=await t(this.options.STRIPE_PUBLIC_KEY);if(!o)throw new Error("Stripe failed to load");const a=await this.createCheckoutSession(e),{error:n}=await o.redirectToCheckout({sessionId:a});if(n)throw new Error(n.message)},this.getChatHistory=async t=>{const e=await fetch(`${a}api/GetMessageHistory?messageId=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!e.ok)throw new Error("Failed to get chat history");let o=await e.json();return o=o.filter((t=>!t.content.includes("#function_result")&&!t.content.includes("#finish_reason_function_call"))),o},this.getPublicFlow=async t=>{const e=await fetch(`${a}app/GetPublicFlow?codicent=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!e.ok)throw new Error("Failed to get public flow");const o=await e.json();return o.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),o},this.getMessageContent=async t=>{const e=await fetch(`${a}app/GetMessageContent?id=${t}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(e.ok){const t=await e.json();return{content:t.content,url:t.url}}return{content:"",url:""}},this.logAction=async(t,e)=>{if(!this.options.APP_LOG_CODICENT)return"";const o={content:`@${this.options.APP_LOG_CODICENT} #debug #${e}\n${t}`,type:"text"},n=await fetch(`${a}app/AddChatMessage`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.options.APP_LOG_TOKEN}`]],body:JSON.stringify(o)});if(!n.ok)throw new Error(`${n.statusText||"Failed to post log message!"}`);return(await n.json()).id},this.createApp=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.APP_PREFIX}${t}`;if(!await this.nicknameExists(e)){if(await this.cloneProject(this.options.APP_TEMPLATE,e)){if(this.options.ANONYMOUS_TOKEN)try{const t=this.options.ANONYMOUS_TOKEN.split(".")[1],o=atob(t),a=JSON.parse(o).nickname;if(!await this.addFollower(e,a))throw new Error("Failed to add follower: "+a)}catch(t){console.error("Error extracting adding anonymous follower:",t)}return e}}}}catch(t){console.error("Error creating app:",t)}return null},this.findUsername=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.USER_PREFIX}${t}`;if(!await this.nicknameExists(e))return e}}catch(t){console.warn("Error finding username:",t)}return null},this.getForms=async()=>{const t=await this.request(`${a}app/GetForms?codicent=${this.codicent}`,"GET",{headers:[["Authorization",`Bearer ${this.getToken()}`]]});return await t.json()},this.getFormById=async t=>{const e=await fetch(`${a}app/GetFormById?id=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return await e.json()},this.getTodoStatus=async t=>{const e=await fetch(`${a}app/GetTodoStatus?messageId=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return e.ok?await e.text():(e.status,console.warn(`getTodoStatus() => ${e.statusText}`),"unknown")},this.updateTodoStatus=async(t,e)=>{const o=await fetch(`${a}app/UpdateTodoStatus?messageId=${t}&status=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)return console.warn(`updateTodoStatus() => ${o.statusText}`),!1;return await o.json()},this.codicent="",this.options=o}async request(t,e,o={}){const a={};o.headers&&o.headers.forEach((([t,e])=>{a[t]=e}));const n=await fetch(t,{...o,method:e,headers:a});if(!n.ok)throw 401===n.status&&this.handleUnauthorized(),new Error(`${n.statusText}`);return n}handleUnauthorized(){this.onUnauthorized&&this.onUnauthorized()}async getRealtimeSessionToken(t="alloy",e="openai"){const o=`${a}realtime/session?voice=${t}&provider=${e}`,n=await fetch(o,{headers:{Authorization:`Bearer ${this.getToken()}`}});if(!n.ok)throw new Error(`Failed to fetch session token: ${n.statusText}`);const s=await n.json(),i=s.client_secret?.value;if(!i)throw new Error("No ephemeral key returned from session endpoint");return i}async getRealtimeConfig(t="openai"){try{const e=`${a}realtime/config?provider=${t}`,o=await fetch(e,{method:"GET",headers:{Authorization:`Bearer ${this.getToken()}`}});return o.ok?await o.json():null}catch(t){return console.warn("Failed to fetch realtime config:",t),null}}}o=r,r.getImageUrl=(t,e)=>`${a}app/GetImage?fileId=${t}&width=${e}`,r.getFileUrl=(t,e)=>`${a}app/DownloadFile?fileId=${t}${e?`&extension=${e}`:""}`,r.downloadFile=async t=>{fetch(o.getFileUrl(t.id)).then((t=>{if(t.headers.forEach(((t,e)=>{console.log(`${e}: ${t}`)})),t.ok)return t.blob();throw new Error("Network response was not ok.")})).then((e=>{const o=window.URL.createObjectURL(e),a=document.createElement("a");a.style.display="none",a.href=o,a.download=t.filename,document.body.appendChild(a),a.click(),window.URL.revokeObjectURL(o)})).catch((t=>{console.error("There was a problem with the fetch operation:",t)}))},r.getMiniChatReplyOld=async(t,e="codicent-mini",o)=>{let s={project:e,message:t};o&&(s.messageId=o);const i=await fetch(`${a}app/GetAi2ChatReply`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${n}`]],body:JSON.stringify(s)});if(!i.ok)return void i.status;return(await i.json()).content.replace("@codicent-mini","").trim()},r.getMiniChatReply=async(t,e="codicent-mini",o,s=3e5,i=2e3)=>{const r={project:e,message:t};let c;o&&(r.messageId=o);try{const t=await fetch(`${a}app/StartAi2ChatAsync`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${n}`]],body:JSON.stringify(r)});if(!t.ok)return t.status,void console.error(`Failed to start AI chat: ${t.status}`);if(c=(await t.json()).promptMessageId,!c)return void console.error("No promptMessageId returned from server")}catch(t){return void console.error("Error starting AI chat:",t)}const h=Date.now();for(;Date.now()-h<s;)try{const t=await fetch(`${a}app/GetAi2ChatReplyStatus?promptMessageId=${c}`,{method:"GET",headers:[["Authorization",`Bearer ${n}`]]});if(202===t.status){await new Promise((t=>setTimeout(t,i)));continue}if(!t.ok)return void console.error(`Error polling AI chat status: ${t.status}`);const o=await t.json();return o.content.replace(`@${e}`,"").replace("@codicent-mini","").trim()}catch(t){return void console.error("Error polling AI chat status:",t)}console.error("Polling timeout reached for AI chat")},r.getTranslations=async(t,e,o="codicent-mini")=>{const s=await fetch(`${a}app/GetTranslations`,{method:"POST",headers:{"Content-Type":"application/json; charset=utf-8",Authorization:`Bearer ${n}`},body:JSON.stringify({project:o,text:t,targetLanguage:e})});if(!s.ok)throw s.status,new Error(`Failed to get translations: ${s.statusText}`);return await s.json()};export{r as CodicentService};
1
+ import{loadStripe as t}from"../node_modules/@stripe/stripe-js/dist/index.js";import e from"../utils/MessageContent.js";import"../node_modules/tinycolor2/esm/tinycolor.js";import"react/jsx-runtime";import"react";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";var o;let a="https://codicent.com/",n="-";const s=t=>{t&&"string"==typeof t?(a=t.endsWith("/")?t:t+"/","undefined"!=typeof window&&void 0!==window.Codicent&&"function"==typeof window.Codicent.init&&window.Codicent.init({token:n,baseUrl:a})):console.warn("Invalid base URL provided, using default")},i=()=>void 0!==window.Codicent&&(window.Codicent.handleMessage=function(t){const e=new CustomEvent("codicent-log",{detail:{message:t}});window.dispatchEvent(e)},window.Codicent.init({token:n,baseUrl:a}),!0);let r=i();if(!r){const t=setInterval((()=>{r=i(),r&&clearInterval(t)}),100)}class c{constructor(o){this.createDataMessage=async(t,e,o)=>await window.Codicent.data.create({codicent:o||this.codicent,tag:t,data:e}),this.readDataMessages=async(t,e,o,a,n)=>await window.Codicent.data.read({codicent:o||this.codicent,tag:t,search:e,start:a,length:n}),this.readOneDataMessage=async t=>await window.Codicent.data.readOne(t),this.updateDataMessage=async(t,e,o)=>await window.Codicent.data.update({id:t,data:e,codicent:o||this.codicent}),this.deleteDataMessage=async(t,e)=>await window.Codicent.data.delete({id:t,codicent:e||this.codicent}),this.getAppTheme=async()=>{try{const t=await window.Codicent.getDataMessages({tags:["app-theme"],codicent:this.codicent});return t.length>0?t[0].data:null}catch(t){return console.error("Error fetching app theme:",t),null}},this.getAppButtons=async()=>{const t=(await window.Codicent.getDataMessages({tags:[this.options.BUTTON_TAG],codicent:this.codicent})).map((t=>t.data));return t.sort(((t,e)=>t.title>e.title?1:-1)),t},this.getAppTasks=async()=>(await window.Codicent.getMessages({search:`@${this.codicent} #app-task`,length:50})).map((t=>{const o=new e(t.content).content.split("\n"),a=o[0],n=o.slice(1).join("\n");return{id:t.id,title:a,content:n}})),this.getAppPrompts=async()=>(await window.Codicent.getDataMessages({tags:["chatprompt"],codicent:this.codicent})).map((t=>t.data)).map((({title:t,prompt:e})=>({title:t,prompt:e}))),this.uploadFile=async(t,e)=>await window.Codicent.upload(e,t),this.getFileInfo=async t=>await window.Codicent.getFileInfo(t),this.generateApiToken=async(t,e)=>{const o=await fetch(`${a}api/GenerateApiToken?project=${this.codicent}${t?`&expires=${t.toISOString()}`:""}${e?`&forUserNickname=${e}`:""}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText}`);return await o.text()},this.sendMessage=(t,e,o)=>window.Codicent.postMessage({message:`@${o||this.codicent} ${t}`,type:"text",parentId:e}),this.chat=(t,e,o)=>window.Codicent.getChatReply4({message:t,codicent:o||this.codicent,messageId:e}),this.getMessagesFast=async(t,e,o=100,n=void 0,s,i=0)=>{const r=await this.request(`${a}app/AppGetMessages`,"POST",{headers:[["Authorization",`Bearer ${this.getToken()}`],["Content-Type","application/json; charset=utf-8"]],body:JSON.stringify({tags:t,codicent:s||this.codicent,search:e,start:i,length:o})});let c=await r.json();if(c.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),n){const t=await this.getPublicFlow(n);c=c.concat(t),c.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime()))}return c},this.getMessages=async(t,e,o=10)=>{let a=[];const n=t.map((async t=>{const e=await window.Codicent.getMessages({search:`@${this.codicent} #${t}`,length:o});return"chat"===t&&e.forEach((t=>t.content=`#chat\n${t.content}`)),e}));if((await Promise.all(n)).forEach((t=>{a=a.concat(t)})),e)try{const t=await this.getPublicFlow(e);a=a.concat(t)}catch(t){console.warn("Error fetching public flow, PUBLIC_TAG missing in codicent?",t)}return a=a.filter(((t,e,o)=>e===o.findIndex((e=>e.id===t.id)))),a.sort(((t,e)=>e.createdAt.getTime()-t.createdAt.getTime())),a},this.registerUser=async(t,e,o,n)=>{const s=await fetch(`${a}app/RegisterAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${n}`]],body:JSON.stringify({nickname:t,email:e,userId:o})});if(!s.ok)return"";const i=await s.text();return window.Codicent.init({token:n,baseUrl:a}),i},this.loginUser=async(t,e)=>{try{const o=await fetch(`${a}app/LoginAuth0User`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${e}`]],body:JSON.stringify({userId:t})});if(!o.ok)return 404===o.status||400===o.status?null:401===o.status?(this.handleUnauthorized(),null):"";const n=await o.text();return this.setToken(n),n}catch(t){return console.warn("Error logging in user:",t),""}},this.nicknameExists=async t=>{const e=await fetch(`${a}app/NicknameExists?nickname=${encodeURIComponent(t)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"]]});if(!e.ok)return!1;return await e.json()},this.logout=()=>{this.setToken("")},this.isRegistered=()=>null!==localStorage.getItem("codicent_nickname"),this.getApps=async()=>{try{const t=await fetch(`${a}app/AppGetApps`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!t.ok)throw t.status,new Error(`${t.statusText}`);const e=await t.json();return e.filter(((t,e,o)=>e===o.findIndex((e=>e.id===t.id))&&(this.options.APP_NAME||t.id.startsWith(this.options.APP_PREFIX))))}catch(t){return console.warn("Error fetching apps:",t),null}},this.addFollower=async(t,e)=>{const o=await fetch(`${a}app/AddFollower?nickname=${t}&followerNickname=${e}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText||"Failed to add follower!"}`);return await o.json()},this.cloneProject=async(t,e)=>{const o=await fetch(`${a}app/CloneProject?project=${t}&newProject=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw o.status,new Error(`${o.statusText}`);let n=await o.json();if(n){const t='#data #app-theme \n{\n "textcolor": "#212121",\n "backgroundcolor": "#273044",\n "color": "#ffffff",\n "logo": "https://codicent.com/logo512.png",\n "title": "",\n "themeColor": "#581d71",\n "buttonColor": "#c0c0c0",\n "buttonTextColor": "#000000",\n "font": "Montserrat",\n "welcome": "Hej {{username}}!",\n "chatPlaceholder": "Tjena, Loociz här! Vad vill du?",\n "textPlaceholder": "Skriv det du vill spara, så tar jag (Loociz alltså) hand om det!",\n "transcriptionInstructions": "Tryck på knappen för att start och sedan stoppa ljudinspelning."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(n=!1)}catch{n=!1}if(n){const t='#data #app-button\n{\n "title": "Ta fram företagsinfo",\n "url": "/#/chat?text=Hej!%20Jag%20vill%20spara%20f%C3%B6retagsinfo.%20Guida%20mig%20steg%20f%C3%B6r%20steg%2C%20ett%20i%20taget%2C%20tills%20vi%20har%20all%20info%20om%20mitt%20f%C3%B6retag.%20Exempel%20p%C3%A5%20data%3A%20f%C3%B6retagsnamn%20eller%20id%C3%A9namn%2C%20org.nr.%2C%20%C3%A4gare%2C%20kontaktinformation%2C%20vision%2C%20aff%C3%A4rsid%C3%A9%2C%20mm."\n}';try{await window.Codicent.postMessage({message:`@${e} ${t}`,type:"text"})||(n=!1)}catch{n=!1}}}return n},this.getNickname=async()=>{try{const t=n.split(".")[1],e=atob(t),o=JSON.parse(e),s=o.sub||o.userId,i=await fetch(`${a}app/GetNickname?userId=${s}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!i.ok)throw 401===i.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${i.statusText}`);return await i.text()}catch{return""}},this.getChatInstructions=async()=>{try{const t=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:1});if(t.length>0)return t[0].content}catch{console.warn("Error fetching chat instructions")}return""},this.updateChatInstructions=async t=>{try{const e=await window.Codicent.getMessages({search:`@${this.codicent} #instructions`,length:100}),o=`@${this.codicent} #instructions\n${t}`;e.length>0?e[0].content!==o&&(console.log("updating instructions",o),await window.Codicent.postMessage({message:o,type:"text",parentId:e[0].id})):(console.log("new instructions",o),await window.Codicent.postMessage({message:o,type:"text"}))}catch{console.warn("Error updating chat instructions")}},this.getUserInfo=async(t,e=!1)=>{const o=await fetch(`${a}app/GetUserInfo?nickname=${t}${e?"&t="+Date.now():""}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);const n=await o.json(),{email:s,picture:i,description:r,followers:c,properties:h,owner:d}=n;return{nickname:t,email:s,name:r,picture:i,followers:c,properties:h,owner:d}},this.updateUserInfo=async({nickname:t,email:e,name:o,picture:n})=>{const s=await fetch(`${a}app/AddOrUpdateUser`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]],body:JSON.stringify({nickname:t,email:e,name:o,picture:n,description:""})});if(!s.ok)throw s.status,new Error(`${s.statusText}`);return await this.getUserInfo(t,!0)},this.requestInvite=async(t,e)=>{const o=await fetch(`${a}app/CreateInvitationOrRequest?forUserNickname=${t}&toProjectNickname=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return!!o.ok||(console.warn(`requestInvite() => ${o.statusText}`),!1)},this.getProjectInfo=this.getUserInfo,this.updateMembersAccess=async(t,e)=>{const o=await fetch(`${a}app/AddOrUpdateProjectProperty?project=${t}&key=APP_EDITORS&value=${e.join(",")}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return!!o.ok||(console.warn(`updateMembersAccess() => ${o.statusText}`),!1)},this.getMembersAccess=async t=>{const e=(await this.getProjectInfo(t,!0)).properties.find((t=>"APP_EDITORS"===t.name));return e&&e.value?e.value.split(","):[]},this.getMemberInfo=async(t,e)=>{const o=await fetch(`${a}app/GetMemberInfo?projectNickname=${encodeURIComponent(t)}&memberNickname=${encodeURIComponent(e)}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)throw 401===o.status?(this.handleUnauthorized(),new Error("Unauthorized")):new Error(`${o.statusText}`);return await o.json()},this.setToken=t=>{n=t,n&&window.Codicent.init({token:n,baseUrl:a})},this.getToken=()=>n,this.checkPurchaseStatus=async()=>{const t=await fetch(`${a}payments/GetPaymentStatus`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(!t.ok)throw new Error("Failed to check purchase status");const{isPaid:e}=await t.json();return e},this.checkSubscriptionStatus=async()=>{if(!this.options.SUBSCRIPTION_NEEDED)return"active";const t=await fetch(`${a}payments/GetSubscriptionStatus?t=${Date.now()}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`],["Cache-Control","no-cache, no-store, must-revalidate"],["Pragma","no-cache"],["Expires","0"]]});if(!t.ok)throw new Error("Failed to check subscription status");const{status:e}=await t.json();return e},this.createCheckoutSession=async t=>{const e=await fetch(`${a}payments/CreateCheckoutSession`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]],body:JSON.stringify({priceId:t,successUrl:window.location.href,cancelUrl:window.location.href})});if(!e.ok)throw new Error("Failed to create checkout session");const{id:o}=await e.json();return o},this.redirectToCheckout=async e=>{const o=await t(this.options.STRIPE_PUBLIC_KEY);if(!o)throw new Error("Stripe failed to load");const a=await this.createCheckoutSession(e),{error:n}=await o.redirectToCheckout({sessionId:a});if(n)throw new Error(n.message)},this.getChatHistory=async t=>{const e=await fetch(`${a}api/GetMessageHistory?messageId=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!e.ok)throw new Error("Failed to get chat history");let o=await e.json();return o=o.filter((t=>!t.content.includes("#function_result")&&!t.content.includes("#finish_reason_function_call"))),o},this.getPublicFlow=async t=>{const e=await fetch(`${a}app/GetPublicFlow?codicent=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!e.ok)throw new Error("Failed to get public flow");const o=await e.json();return o.forEach((t=>{t.createdAt=new Date(Date.parse(t.createdAt))})),o},this.getMessageContent=async t=>{const e=await fetch(`${a}app/GetMessageContent?id=${t}`,{method:"GET",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.getToken()}`]]});if(e.ok){const t=await e.json();return{content:t.content,url:t.url}}return{content:"",url:""}},this.logAction=async(t,e)=>{if(!this.options.APP_LOG_CODICENT)return"";const o={content:`@${this.options.APP_LOG_CODICENT} #debug #${e}\n${t}`,type:"text"},n=await fetch(`${a}app/AddChatMessage`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${this.options.APP_LOG_TOKEN}`]],body:JSON.stringify(o)});if(!n.ok)throw new Error(`${n.statusText||"Failed to post log message!"}`);return(await n.json()).id},this.createApp=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.APP_PREFIX}${t}`;if(!await this.nicknameExists(e)){if(await this.cloneProject(this.options.APP_TEMPLATE,e)){if(this.options.ANONYMOUS_TOKEN)try{const t=this.options.ANONYMOUS_TOKEN.split(".")[1],o=atob(t),a=JSON.parse(o).nickname;if(!await this.addFollower(e,a))throw new Error("Failed to add follower: "+a)}catch(t){console.error("Error extracting adding anonymous follower:",t)}return e}}}}catch(t){console.error("Error creating app:",t)}return null},this.findUsername=async()=>{try{for(let t=0;t<50;t++){const t=Math.floor(99999*Math.random())+1,e=`${this.options.USER_PREFIX}${t}`;if(!await this.nicknameExists(e))return e}}catch(t){console.warn("Error finding username:",t)}return null},this.getForms=async()=>{const t=await this.request(`${a}app/GetForms?codicent=${this.codicent}`,"GET",{headers:[["Authorization",`Bearer ${this.getToken()}`]]});return await t.json()},this.getFormById=async t=>{const e=await fetch(`${a}app/GetFormById?id=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return await e.json()},this.getTodoStatus=async t=>{const e=await fetch(`${a}app/GetTodoStatus?messageId=${t}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});return e.ok?await e.text():(e.status,console.warn(`getTodoStatus() => ${e.statusText}`),"unknown")},this.updateTodoStatus=async(t,e)=>{const o=await fetch(`${a}app/UpdateTodoStatus?messageId=${t}&status=${e}`,{method:"GET",headers:[["Authorization",`Bearer ${this.getToken()}`]]});if(!o.ok)return console.warn(`updateTodoStatus() => ${o.statusText}`),!1;return await o.json()},this.codicent="",this.options=o,s(o.API_BASE_URL)}async request(t,e,o={}){const a={};o.headers&&o.headers.forEach((([t,e])=>{a[t]=e}));const n=await fetch(t,{...o,method:e,headers:a});if(!n.ok)throw 401===n.status&&this.handleUnauthorized(),new Error(`${n.statusText}`);return n}handleUnauthorized(){this.onUnauthorized&&this.onUnauthorized()}async getRealtimeSessionToken(t="alloy",e="openai"){const o=`${a}realtime/session?voice=${t}&provider=${e}`,n=await fetch(o,{headers:{Authorization:`Bearer ${this.getToken()}`}});if(!n.ok)throw new Error(`Failed to fetch session token: ${n.statusText}`);const s=await n.json(),i=s.client_secret?.value;if(!i)throw new Error("No ephemeral key returned from session endpoint");return i}async getRealtimeConfig(t="openai"){try{const e=`${a}realtime/config?provider=${t}`,o=await fetch(e,{method:"GET",headers:{Authorization:`Bearer ${this.getToken()}`}});return o.ok?await o.json():null}catch(t){return console.warn("Failed to fetch realtime config:",t),null}}}o=c,c.getImageUrl=(t,e)=>`${a}app/GetImage?fileId=${t}&width=${e}`,c.getFileUrl=(t,e)=>`${a}app/DownloadFile?fileId=${t}${e?`&extension=${e}`:""}`,c.downloadFile=async t=>{fetch(o.getFileUrl(t.id)).then((t=>{if(t.headers.forEach(((t,e)=>{console.log(`${e}: ${t}`)})),t.ok)return t.blob();throw new Error("Network response was not ok.")})).then((e=>{const o=window.URL.createObjectURL(e),a=document.createElement("a");a.style.display="none",a.href=o,a.download=t.filename,document.body.appendChild(a),a.click(),window.URL.revokeObjectURL(o)})).catch((t=>{console.error("There was a problem with the fetch operation:",t)}))},c.getMiniChatReplyOld=async(t,e="codicent-mini",o)=>{let s={project:e,message:t};o&&(s.messageId=o);const i=await fetch(`${a}app/GetAi2ChatReply`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${n}`]],body:JSON.stringify(s)});if(!i.ok)return void i.status;return(await i.json()).content.replace("@codicent-mini","").trim()},c.getMiniChatReply=async(t,e="codicent-mini",o,s=3e5,i=2e3)=>{const r={project:e,message:t};let c;o&&(r.messageId=o);try{const t=await fetch(`${a}app/StartAi2ChatAsync`,{method:"POST",headers:[["Content-Type","application/json; charset=utf-8"],["Authorization",`Bearer ${n}`]],body:JSON.stringify(r)});if(!t.ok)return t.status,void console.error(`Failed to start AI chat: ${t.status}`);if(c=(await t.json()).promptMessageId,!c)return void console.error("No promptMessageId returned from server")}catch(t){return void console.error("Error starting AI chat:",t)}const h=Date.now();for(;Date.now()-h<s;)try{const t=await fetch(`${a}app/GetAi2ChatReplyStatus?promptMessageId=${c}`,{method:"GET",headers:[["Authorization",`Bearer ${n}`]]});if(202===t.status){await new Promise((t=>setTimeout(t,i)));continue}if(!t.ok)return void console.error(`Error polling AI chat status: ${t.status}`);const o=await t.json();return o.content.replace(`@${e}`,"").replace("@codicent-mini","").trim()}catch(t){return void console.error("Error polling AI chat status:",t)}console.error("Polling timeout reached for AI chat")},c.getTranslations=async(t,e,o="codicent-mini")=>{const s=await fetch(`${a}app/GetTranslations`,{method:"POST",headers:{"Content-Type":"application/json; charset=utf-8",Authorization:`Bearer ${n}`},body:JSON.stringify({project:o,text:t,targetLanguage:e})});if(!s.ok)throw s.status,new Error(`Failed to get translations: ${s.statusText}`);return await s.json()};export{c as CodicentService,s as setBaseUrl};
package/dist/index.d.ts CHANGED
@@ -10,6 +10,7 @@ import { IColorPickerProps } from '@fluentui/react';
10
10
  import { TimePickerProps } from '@fluentui/react-timepicker-compat';
11
11
  import { BrandVariants, ToastIntent } from '@fluentui/react-components';
12
12
 
13
+ declare const setBaseUrl: (url: string) => void;
13
14
  interface UserInfo {
14
15
  nickname: string;
15
16
  email: string;
@@ -194,7 +195,7 @@ interface ButtonProps {
194
195
  appearance?: "primary" | "secondary" | "transparent" | "subtle";
195
196
  size?: "small" | "medium" | "large";
196
197
  className?: string;
197
- icon?: undefined | "DismissRegular" | "CopyRegular" | "ShareRegular" | "SignOut24Regular" | "Payment24Regular" | "SlideText24Regular" | "QuestionCircle24Regular" | "SendFilled" | "AttachRegular" | "ImageRegular" | "CameraRegular" | "LocationRegular" | "LocationFilled" | "AddRegular" | "ChevronRightFilled" | "ArrowClockwiseRegular" | "WandRegular";
198
+ icon?: undefined | "DismissRegular" | "CopyRegular" | "ShareRegular" | "SignOut24Regular" | "Payment24Regular" | "SlideText24Regular" | "QuestionCircle24Regular" | "SendFilled" | "AttachRegular" | "ImageRegular" | "CameraRegular" | "LocationRegular" | "LocationFilled" | "AddRegular" | "ChevronRightFilled" | "ArrowClockwiseRegular" | "WandRegular" | "ArrowLeft24Regular";
198
199
  disabled?: boolean;
199
200
  title?: string;
200
201
  image?: React$1.ReactNode;
@@ -868,7 +869,7 @@ declare const Profile: React.FC<{
868
869
  state: CodicentAppState;
869
870
  }>;
870
871
 
871
- declare const MessageItem: ({ header, description, timestamp, text, image, tags, id, fileIds, codicentService, busy, onEdit, onShowHtmlPreview, }: {
872
+ declare const MessageItem: ({ header, description, timestamp, text, image, tags, id, fileIds, codicentService, busy, onEdit, onShowHtmlPreview, maxHeightPx, }: {
872
873
  id: string;
873
874
  header: string;
874
875
  description: string;
@@ -881,6 +882,7 @@ declare const MessageItem: ({ header, description, timestamp, text, image, tags,
881
882
  onShowHtmlPreview?: (html: string) => void;
882
883
  onEdit?: () => void;
883
884
  timestamp?: string;
885
+ maxHeightPx?: number;
884
886
  }) => react_jsx_runtime.JSX.Element;
885
887
 
886
888
  declare const Content: React.FC<{
@@ -1172,4 +1174,4 @@ declare const Purchase: ({ state }: {
1172
1174
  state: CodicentAppState;
1173
1175
  }) => react_jsx_runtime.JSX.Element;
1174
1176
 
1175
- export { AiInput, AppConfig, AppConfigOptions, AppFrame, AppInfo, AppStateDefinition, AppStateMachine, AudioIcon, AudioRecorder, AudioRecorderState, Button, CacheEntry, CacheManager, CachedUserSession, Chat, ChatInput, ChatMessage, CodicentAppState, CodicentService, CodicentServiceOptions, ColorPicker, CombinedPlaceholderDialog, Compose, CompoundButton, Content, CrmPage, CrmPagePersistent, DatePicker, FilePlaceholder, FileThumbnail, Footer, Form, FormAccept, FormInvite, Header, HtmlView, HtmlViewer, ImageViewer as ImageView, Input, ItemType, Label, Login, Logout, Markdown, MemberInfo, Message$1 as Message, Content$1 as MessageContent, MessageInput, MessageItem, Page, Profile, Prompt, Purchase, QrCodeDialog, RealtimeVoice, Sales, Search, SearchBox, Snap, SnapFooter, Spinner, StateContext, TemplateVariable, Text, TextHeader, Textarea, TimePicker, Title, Tool, ToolMergeStrategy, ToolsConfig, TranslationResponse, TypingIndicator, UploadFile, UploadFileProps, UploadFileRef, UrlProcessor, UseAuthState, UseCodicentAppOptions, UserInfo, VoiceIcon, VoiceIconProps, WavRecorder, WavStreamPlayer, createAppStateMachine, generateBrandVariants, getConfigValue, getGpsLocation, getTimeString, initCodicentApp, isMobileDevice, log, stateMachineCacheManager, useAppStyles, useAudioRecorder, useAuthState, useChat, useCodicentApp, useCodicentState, useLocalization, useRealtimeVoiceAI, useStateWithLocalStorage, useTemplateVariables, useToaster, useTools, withWakeLock };
1177
+ export { AiInput, AppConfig, AppConfigOptions, AppFrame, AppInfo, AppStateDefinition, AppStateMachine, AudioIcon, AudioRecorder, AudioRecorderState, Button, CacheEntry, CacheManager, CachedUserSession, Chat, ChatInput, ChatMessage, CodicentAppState, CodicentService, CodicentServiceOptions, ColorPicker, CombinedPlaceholderDialog, Compose, CompoundButton, Content, CrmPage, CrmPagePersistent, DatePicker, FilePlaceholder, FileThumbnail, Footer, Form, FormAccept, FormInvite, Header, HtmlView, HtmlViewer, ImageViewer as ImageView, Input, ItemType, Label, Login, Logout, Markdown, MemberInfo, Message$1 as Message, Content$1 as MessageContent, MessageInput, MessageItem, Page, Profile, Prompt, Purchase, QrCodeDialog, RealtimeVoice, Sales, Search, SearchBox, Snap, SnapFooter, Spinner, StateContext, TemplateVariable, Text, TextHeader, Textarea, TimePicker, Title, Tool, ToolMergeStrategy, ToolsConfig, TranslationResponse, TypingIndicator, UploadFile, UploadFileProps, UploadFileRef, UrlProcessor, UseAuthState, UseCodicentAppOptions, UserInfo, VoiceIcon, VoiceIconProps, WavRecorder, WavStreamPlayer, createAppStateMachine, generateBrandVariants, getConfigValue, getGpsLocation, getTimeString, initCodicentApp, isMobileDevice, log, setBaseUrl, stateMachineCacheManager, useAppStyles, useAudioRecorder, useAuthState, useChat, useCodicentApp, useCodicentState, useLocalization, useRealtimeVoiceAI, useStateWithLocalStorage, useTemplateVariables, useToaster, useTools, withWakeLock };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codicent-app-sdk",
3
- "version": "0.3.116",
3
+ "version": "0.3.118",
4
4
  "description": "SDK for building AI-powered applications with Codicent",
5
5
  "type": "module",
6
6
  "main": "dist/cjs/index.js",