react-native-srschat 0.1.55 → 0.1.57

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 (38) hide show
  1. package/lib/commonjs/components/email.js +112 -3
  2. package/lib/commonjs/components/email.js.map +1 -1
  3. package/lib/commonjs/components/productCard.js +91 -39
  4. package/lib/commonjs/components/productCard.js.map +1 -1
  5. package/lib/commonjs/components/testProductCard.js +60 -0
  6. package/lib/commonjs/components/testProductCard.js.map +1 -0
  7. package/lib/commonjs/components/testing.js +35 -8
  8. package/lib/commonjs/components/testing.js.map +1 -1
  9. package/lib/commonjs/contexts/AppContext.js +17 -1
  10. package/lib/commonjs/contexts/AppContext.js.map +1 -1
  11. package/lib/commonjs/layout/window.js +12 -5
  12. package/lib/commonjs/layout/window.js.map +1 -1
  13. package/lib/module/components/email.js +112 -3
  14. package/lib/module/components/email.js.map +1 -1
  15. package/lib/module/components/productCard.js +91 -39
  16. package/lib/module/components/productCard.js.map +1 -1
  17. package/lib/module/components/testProductCard.js +52 -0
  18. package/lib/module/components/testProductCard.js.map +1 -0
  19. package/lib/module/components/testing.js +36 -9
  20. package/lib/module/components/testing.js.map +1 -1
  21. package/lib/module/contexts/AppContext.js +17 -1
  22. package/lib/module/contexts/AppContext.js.map +1 -1
  23. package/lib/module/layout/window.js +12 -5
  24. package/lib/module/layout/window.js.map +1 -1
  25. package/lib/typescript/components/email.d.ts.map +1 -1
  26. package/lib/typescript/components/productCard.d.ts.map +1 -1
  27. package/lib/typescript/components/testProductCard.d.ts +3 -0
  28. package/lib/typescript/components/testProductCard.d.ts.map +1 -0
  29. package/lib/typescript/components/testing.d.ts.map +1 -1
  30. package/lib/typescript/contexts/AppContext.d.ts.map +1 -1
  31. package/lib/typescript/layout/window.d.ts.map +1 -1
  32. package/package.json +1 -1
  33. package/src/components/email.js +108 -2
  34. package/src/components/productCard.js +91 -42
  35. package/src/components/testProductCard.js +55 -0
  36. package/src/components/testing.js +45 -14
  37. package/src/contexts/AppContext.js +20 -1
  38. package/src/layout/window.js +11 -5
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","useEffect","useContext","useRef","Text","StyleSheet","View","TextInput","TouchableOpacity","Platform","KeyboardAvoidingView","Keyboard","Animated","Linking","Button","Header","AppContext","Ionicons","KeyboardAwareScrollView","Testing","ChatInput","useWebSocketMessage","ProductCard","Markdown","Feedback","ProgressCircle","ChatWindow","panHandlers","handleSend","messages","input","setInput","ghostMessage","handleButtonClick","onProductCardClick","onAddToCartClick","uiConfig","ghostCard","typingIndicator","feedbackOpen","setFeedbackOpen","scrollViewRef","fadeAnim","Value","current","messageCount","setMessageCount","length","timeoutId","setTimeout","scrollToEnd","animated","clearTimeout","loop","sequence","timing","toValue","duration","useNativeDriver","start","openLink","url","openURL","createElement","style","styles","container","ref","contentContainerStyle","messagesContent","enableOnAndroid","enableOnIOS","contentInsetAdjustmentBehavior","automaticallyAdjustContentInsets","contentInset","bottom","keyboardShouldPersistTaps","showsVerticalScrollIndicator","extraScrollHeight","onContentSizeChange","contentWidth","contentHeight","currentLength","_scrollViewRef$curren","isAnyFeedbackOpen","Object","values","some","isOpen","_scrollViewRef$curren2","keyboardDismissMode","bounces","enableResetScrollToCoords","keyboardOpeningTime","map","msg","i","key","messageWrapper","type","messageBubble","userMessage","aiMessage","body","color","fontSize","lineHeight","text","String","message_id","message","messageId","middleMessageBubble","middleMessage","name","size","marginRight","products","prod","index","productCardWrapper","resource","resource_type","resourceButton","onPress","resourceText","icon","suggested_questions","Array","isArray","questions","question","suggestedQuestionButton","suggestedQuestionText","ghostMessageContainer","ghostBar","ghostBarShort","opacity","ghostBarLong","ghostBarMedium","ghostCardContainer","ghostSquare","ghostBarsContainer","behavior","OS","keyboardVerticalOffset","width","testButtons","create","flex","padding","justifyContent","paddingBottom","marginBottom","paddingHorizontal","borderRadius","alignSelf","backgroundColor","borderTopRightRadius","marginTop","borderWidth","borderColor","paddingVertical","textAlign","borderTopLeftRadius","marginVertical","height","flexDirection","alignItems","aspectRatio","paddingLeft"],"sourceRoot":"../../../src","sources":["layout/window.js"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,SAAS,EAAEC,UAAU,EAAEC,MAAM,QAAQ,OAAO;AACtE,SAASC,IAAI,EAAEC,UAAU,EAAEC,IAAI,EAAEC,SAAS,EAAEC,gBAAgB,EAAEC,QAAQ,EAAEC,oBAAoB,EAC1FC,QAAQ,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAC3D,SAASC,MAAM,QAAQ,sBAAsB;AAC7C,SAASC,UAAU,QAAQ,wBAAwB;AACnD,OAAOC,QAAQ,MAAM,oCAAoC;AACzD,SAASC,uBAAuB,QAAQ,yCAAyC;AACjF,SAASC,OAAO,QAAQ,uBAAuB;AAC/C,SAASC,SAAS,QAAQ,qBAAqB;AAC/C,SAASC,mBAAmB,QAAQ,iBAAiB;AACrD,SAASC,WAAW,QAAQ,2BAA2B;AACvD,OAAOC,QAAQ,MAAM,+BAA+B;AACpD,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,SAASC,cAAc,QAAQ,8BAA8B;AAE7D,OAAO,MAAMC,UAAU,GAAGA,CAAC;EAAEC;AAAY,CAAC,KAAK;EAC7C,MAAM;IAAEC,UAAU;IAAEC,QAAQ;IAAEC,KAAK;IAAEC,QAAQ;IAAEC,YAAY;IAAEC,iBAAiB;IAC5EC,kBAAkB;IAAEC,gBAAgB;IAAEC,QAAQ;IAAEC,SAAS;IAAEC,eAAe;IAAEC,YAAY;IAAEC;EAC3F,CAAC,GAAGtC,UAAU,CAACc,UAAU,CAAC;EAE3B,MAAMyB,aAAa,GAAGtC,MAAM,CAAC,IAAI,CAAC;EAClC,MAAMuC,QAAQ,GAAGvC,MAAM,CAAC,IAAIS,QAAQ,CAAC+B,KAAK,CAAC,GAAG,CAAC,CAAC,CAACC,OAAO;EACxD,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAG9C,QAAQ,CAAC6B,QAAQ,CAACkB,MAAM,CAAC;EAGjE9C,SAAS,CAAC,MAAM;IACd,IAAIwC,aAAa,CAACG,OAAO,EAAE;MACzB,MAAMI,SAAS,GAAGC,UAAU,CAAC,MAAM;QACjC,IAAIR,aAAa,CAACG,OAAO,EAAE;UACzBH,aAAa,CAACG,OAAO,CAACM,WAAW,CAAC;YAAEC,QAAQ,EAAE;UAAM,CAAC,CAAC;QACxD;MACF,CAAC,EAAE,GAAG,CAAC;MAEP,OAAO,MAAMC,YAAY,CAACJ,SAAS,CAAC;IACtC;EACF,CAAC,EAAE,EAAE,CAAC;EAEN/C,SAAS,CAAC,MAAM;IACd,IAAI+B,YAAY,EAAE;MAChBpB,QAAQ,CAACyC,IAAI,CACXzC,QAAQ,CAAC0C,QAAQ,CAAC,CAChB1C,QAAQ,CAAC2C,MAAM,CAACb,QAAQ,EAAE;QAAEc,OAAO,EAAE,CAAC;QAAEC,QAAQ,EAAE,GAAG;QAAEC,eAAe,EAAE;MAAM,CAAC,CAAC,EAChF9C,QAAQ,CAAC2C,MAAM,CAACb,QAAQ,EAAE;QAAEc,OAAO,EAAE,GAAG;QAAEC,QAAQ,EAAE,GAAG;QAAEC,eAAe,EAAE;MAAM,CAAC,CAAC,CACnF,CACH,CAAC,CAACC,KAAK,CAAC,CAAC;IACX;EACF,CAAC,EAAE,CAAC3B,YAAY,CAAC,CAAC;EAElBX,mBAAmB,CAAC,CAAC;EAErB,MAAMuC,QAAQ,GAAIC,GAAG,IAAK;IACxBhD,OAAO,CAACiD,OAAO,CAACD,GAAG,CAAC;EACtB,CAAC;EAED,oBACE9D,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAEC,MAAM,CAACC;EAAU,gBAC5BnE,KAAA,CAAAgE,aAAA,CAACzD,IAAI,qBACHP,KAAA,CAAAgE,aAAA,CAAChD,MAAM,MAAE,CACL,CAAC,eAGPhB,KAAA,CAAAgE,aAAA,CAAC7C,uBAAuB;IACtBiD,GAAG,EAAE1B,aAAc;IACnB2B,qBAAqB,EAAEH,MAAM,CAACI,eAAgB;IAC9CC,eAAe;IACfC,WAAW;IACXC,8BAA8B,EAAC,OAAO;IACtCC,gCAAgC,EAAE,KAAM;IACxCC,YAAY,EAAE;MAAEC,MAAM,EAAE;IAAE,CAAE;IAC5BC,yBAAyB,EAAC,SAAS;IACnCC,4BAA4B,EAAE,KAAM;IACpCC,iBAAiB,EAAE,GAAI;IACvBC,mBAAmB,EAAEA,CAACC,YAAY,EAAEC,aAAa,KAAK;MACpD,MAAMC,aAAa,GAAGrD,QAAQ,CAACkB,MAAM;MAErC,IAAImC,aAAa,GAAGrC,YAAY,EAAE;QAAA,IAAAsC,qBAAA;QAChC,CAAAA,qBAAA,GAAA1C,aAAa,CAACG,OAAO,cAAAuC,qBAAA,eAArBA,qBAAA,CAAuBjC,WAAW,CAAC;UAAEC,QAAQ,EAAE;QAAK,CAAC,CAAC;QAEtDL,eAAe,CAACoC,aAAa,CAAC;MAChC,CAAC,MAAM,IAAIA,aAAa,IAAIrC,YAAY,EAAE;QACxC;QACA,MAAMuC,iBAAiB,GAAGC,MAAM,CAACC,MAAM,CAAC/C,YAAY,CAAC,CAACgD,IAAI,CAACC,MAAM,IAAIA,MAAM,KAAK,IAAI,CAAC;QAErF,IAAIJ,iBAAiB,EAAE;UACrB;UACA;QAAA,CACD,MAAM;UACL;UACA,IAAI9C,eAAe,EAAE;YAAA,IAAAmD,sBAAA;YACnB,CAAAA,sBAAA,GAAAhD,aAAa,CAACG,OAAO,cAAA6C,sBAAA,eAArBA,sBAAA,CAAuBvC,WAAW,CAAC;cAAEC,QAAQ,EAAE;YAAK,CAAC,CAAC;UACxD;QACF;QACA;QACAL,eAAe,CAACoC,aAAa,CAAC,CAAC,CAAC;MAElC,CAAC,MAAM,IAAIA,aAAa,GAAGrC,YAAY,EAAE;QACvCC,eAAe,CAACoC,aAAa,CAAC;MAChC;IACF,CAAE;IACFQ,mBAAmB,EAAC,MAAM;IAC1BC,OAAO,EAAE,KAAM;IACfC,yBAAyB,EAAE,KAAM;IACjCC,mBAAmB,EAAE;EAAE,GAEtBhE,QAAQ,CAACiE,GAAG,CAAC,CAACC,GAAG,EAAEC,CAAC,kBAEnBjG,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC2F,GAAG,EAAED,CAAE;IAAChC,KAAK,EAAEC,MAAM,CAACiC;EAAe,GACxCH,GAAG,CAACI,IAAI,KAAK,QAAQ,iBAClBpG,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAE,CAAEC,MAAM,CAACmC,aAAa,EAAEL,GAAG,CAACI,IAAI,KAAK,MAAM,GAAGlC,MAAM,CAACoC,WAAW,GAAGpC,MAAM,CAACqC,SAAS;EAAG,gBACjGvG,KAAA,CAAAgE,aAAA,CAACxC,QAAQ;IAACyC,KAAK,EAAE;MAAEuC,IAAI,EAAE;QAAEC,KAAK,EAAET,GAAG,CAACI,IAAI,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS;QAACM,QAAQ,EAAE,EAAE;QAAEC,UAAU,EAAE;MAAG;IAAC;EAAE,GAC3G,OAAOX,GAAG,CAACY,IAAI,KAAK,QAAQ,GAAGZ,GAAG,CAACY,IAAI,GAAGC,MAAM,CAACb,GAAG,CAACY,IAAI,IAAI,EAAE,CACxD,CAAC,EACTZ,GAAG,CAACI,IAAI,IAAI,IAAI,IAAIH,CAAC,IAAI,CAAC,IAAID,GAAG,CAACc,UAAU,iBAC5C9G,KAAA,CAAAgE,aAAA,CAACvC,QAAQ;IAACsF,OAAO,EAAEf,GAAI;IAACgB,SAAS,EAAEhB,GAAG,CAACc;EAAW,CAAC,CAEjD,CACT,EAEAd,GAAG,CAACI,IAAI,IAAI,QAAQ,iBACnBpG,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAAC+C,mBAAmB,EAAE/C,MAAM,CAACgD,aAAa;EAAE,gBAC9DlH,KAAA,CAAAgE,aAAA,CAAC9C,QAAQ;IAACiG,IAAI,EAAC,kBAAkB;IAACC,IAAI,EAAE,EAAG;IAACnD,KAAK,EAAE;MAACoD,WAAW,EAAE;IAAE;EAAE,CAAC,CAAC,eACvErH,KAAA,CAAAgE,aAAA,CAACxC,QAAQ;IAACyC,KAAK,EAAE;MAAEuC,IAAI,EAAE;QAAEC,KAAK,EAAET,GAAG,CAACI,IAAI,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS;QAACM,QAAQ,EAAE,EAAE;QAAEC,UAAU,EAAE;MAAG;IAAC;EAAE,GAC7G,OAAOX,GAAG,CAACY,IAAI,KAAK,QAAQ,GAAGZ,GAAG,CAACY,IAAI,GAAGC,MAAM,CAACb,GAAG,CAACY,IAAI,IAAI,EAAE,CACtD,CACN,CACP,EAEAZ,GAAG,CAACsB,QAAQ,IAAItB,GAAG,CAACsB,QAAQ,CAACtE,MAAM,GAAG,CAAC,IACtCgD,GAAG,CAACsB,QAAQ,CAACvB,GAAG,CAAC,CAACwB,IAAI,EAAEC,KAAK,kBAC3BxH,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC2F,GAAG,EAAEsB,KAAM;IAACvD,KAAK,EAAEC,MAAM,CAACuD;EAAmB,gBACjDzH,KAAA,CAAAgE,aAAA,CAACzC,WAAW;IAACgG,IAAI,EAAEA,IAAK;IAACP,SAAS,EAAEhB,GAAG,CAACc;EAAW,CAAE,CACjD,CACT,CAAC,EAEDd,GAAG,CAAC0B,QAAQ,IAAI1B,GAAG,CAAC0B,QAAQ,CAAC1E,MAAM,GAAG,CAAC,IAAIgD,GAAG,CAAC2B,aAAa,IAAI,OAAO,iBACtE3H,KAAA,CAAAgE,aAAA,CAACvD,gBAAgB;IAACwD,KAAK,EAAEC,MAAM,CAAC0D,cAAe;IAACC,OAAO,EAAEA,CAAA,KAAMhE,QAAQ,CAACmC,GAAG,CAAC0B,QAAQ;EAAE,gBACpF1H,KAAA,CAAAgE,aAAA,CAAC3D,IAAI;IAAC4D,KAAK,EAAEC,MAAM,CAAC4D;EAAa,GAAC,aAAiB,CAAC,eACpD9H,KAAA,CAAAgE,aAAA,CAAC9C,QAAQ;IAACiG,IAAI,EAAC,MAAM;IAACC,IAAI,EAAE,EAAG;IAACX,KAAK,EAAC,OAAO;IAACxC,KAAK,EAAEC,MAAM,CAAC6D;EAAK,CAAE,CACnD,CAAC,EAGpB/B,GAAG,CAACgC,mBAAmB,IAAIC,KAAK,CAACC,OAAO,CAAClC,GAAG,CAACmC,SAAS,CAAC,IAAInC,GAAG,CAACmC,SAAS,CAACnF,MAAM,GAAG,CAAC,IAClFgD,GAAG,CAACmC,SAAS,CAACpC,GAAG,CAAC,CAACqC,QAAQ,EAAEZ,KAAK,kBAChCxH,KAAA,CAAAgE,aAAA,CAACvD,gBAAgB;IAACyF,GAAG,EAAEsB,KAAM;IAACvD,KAAK,EAAEC,MAAM,CAACmE,uBAAwB;IAClER,OAAO,EAAEA,CAAA,KAAM3F,iBAAiB,CAACkG,QAAQ;EAAE,gBAC3CpI,KAAA,CAAAgE,aAAA,CAAC3D,IAAI;IAAC4D,KAAK,EAAEC,MAAM,CAACoE;EAAsB,GAAEF,QAAe,CAC3C,CACrB,CAAC,EAEDnG,YAAY,IAAIgE,CAAC,KAAKnE,QAAQ,CAACkB,MAAM,GAAG,CAAC,iBACxChD,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAEC,MAAM,CAACqE;EAAsB,gBACxCvI,KAAA,CAAAgE,aAAA,CAACnD,QAAQ,CAACN,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAACsE,QAAQ,EAAEtE,MAAM,CAACuE,aAAa,EAAE;MAAEC,OAAO,EAAE/F;IAAS,CAAC;EAAE,CAAE,CAAC,eACxF3C,KAAA,CAAAgE,aAAA,CAACnD,QAAQ,CAACN,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAACsE,QAAQ,EAAEtE,MAAM,CAACyE,YAAY,EAAE;MAAED,OAAO,EAAE/F;IAAS,CAAC;EAAE,CAAE,CAAC,eACvF3C,KAAA,CAAAgE,aAAA,CAACnD,QAAQ,CAACN,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAACsE,QAAQ,EAAEtE,MAAM,CAAC0E,cAAc,EAAE;MAAEF,OAAO,EAAE/F;IAAS,CAAC;EAAE,CAAE,CACpF,CACP,EAEAL,SAAS,IAAI2D,CAAC,KAAKnE,QAAQ,CAACkB,MAAM,GAAG,CAAC,iBACrChD,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAEC,MAAM,CAAC2E;EAAmB,gBACrC7I,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAEC,MAAM,CAAC4E;EAAY,CAAE,CAAC,eACnC9I,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAEC,MAAM,CAAC6E;EAAmB,gBACrC/I,KAAA,CAAAgE,aAAA,CAACnD,QAAQ,CAACN,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAACsE,QAAQ,EAAEtE,MAAM,CAACuE,aAAa,EAAE;MAAEC,OAAO,EAAE/F;IAAS,CAAC;EAAE,CAAE,CAAC,eACxF3C,KAAA,CAAAgE,aAAA,CAACnD,QAAQ,CAACN,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAACsE,QAAQ,EAAEtE,MAAM,CAACyE,YAAY,EAAE;MAAED,OAAO,EAAE/F;IAAS,CAAC;EAAE,CAAE,CAAC,eACvF3C,KAAA,CAAAgE,aAAA,CAACnD,QAAQ,CAACN,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAACsE,QAAQ,EAAEtE,MAAM,CAAC0E,cAAc,EAAE;MAAEF,OAAO,EAAE/F;IAAS,CAAC;EAAE,CAAE,CACpF,CACF,CAGJ,CACP,CACsB,CAAC,eAE1B3C,KAAA,CAAAgE,aAAA,CAACrD,oBAAoB;IACnBqI,QAAQ,EAAEtI,QAAQ,CAACuI,EAAE,KAAK,KAAK,GAAG,SAAS,GAAG,QAAS;IACvDC,sBAAsB,EAAExI,QAAQ,CAACuI,EAAE,KAAK,KAAK,GAAG,EAAE,GAAG,CAAE;IACvDhF,KAAK,EAAE;MAAEkF,KAAK,EAAE;IAAO;EAAE,GAExB9G,QAAQ,CAAC+G,WAAW,iBACnBpJ,KAAA,CAAAgE,aAAA,CAAC5C,OAAO;IACNe,kBAAkB,EAAEA,kBAAmB;IACvCC,gBAAgB,EAAEA;EAAiB,CACpC,CAAC,EAEH,CAACG,eAAe,gBACfvC,KAAA,CAAAgE,aAAA,CAAC3C,SAAS,MAAC,CAAC,gBACZrB,KAAA,CAAAgE,aAAA,CAACtC,cAAc,MAAE,CAEC,CAClB,CAAC;AAEX,CAAC;AAED,MAAMwC,MAAM,GAAG5D,UAAU,CAAC+I,MAAM,CAAC;EAC/BlF,SAAS,EAAE;IACTmF,IAAI,EAAE;EACR,CAAC;EACDhF,eAAe,EAAE;IACfiF,OAAO,EAAE,EAAE;IACXC,cAAc,EAAE,UAAU;IAC1BC,aAAa,EAAE;EACjB,CAAC;EACDtD,cAAc,EAAE;IACduD,YAAY,EAAE;EAChB,CAAC;EACDrD,aAAa,EAAE;IACbkD,OAAO,EAAE,CAAC;IACVI,iBAAiB,EAAE,EAAE;IACrBC,YAAY,EAAE,EAAE;IAChBF,YAAY,EAAE;EAChB,CAAC;EACDpD,WAAW,EAAE;IACXuD,SAAS,EAAE,UAAU;IACrBC,eAAe,EAAE,SAAS;IAC1BrD,KAAK,EAAE,SAAS;IAChBsD,oBAAoB,EAAE;EACxB,CAAC;EACDxD,SAAS,EAAE;IACTsD,SAAS,EAAE,YAAY;IACvBC,eAAe,EAAE,SAAS;IAC1BX,KAAK,EAAE;EACT,CAAC;EACD1B,kBAAkB,EAAE;IAClBuC,SAAS,EAAE;EACb,CAAC;EACD3B,uBAAuB,EAAE;IACvByB,eAAe,EAAE,OAAO;IACxBG,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE,SAAS;IACtBN,YAAY,EAAE,EAAE;IAChBO,eAAe,EAAE,EAAE;IACnBR,iBAAiB,EAAE,EAAE;IACrBD,YAAY,EAAE,CAAC;IACfG,SAAS,EAAE;EACb,CAAC;EACDvB,qBAAqB,EAAE;IACrB7B,KAAK,EAAE,SAAS;IAChBC,QAAQ,EAAE,EAAE;IACZ0D,SAAS,EAAE;EACb,CAAC;EACD7B,qBAAqB,EAAE;IACrBsB,SAAS,EAAE,YAAY;IACvBV,KAAK,EAAE,MAAM;IACbW,eAAe,EAAE,SAAS;IAC1BF,YAAY,EAAE,EAAE;IAChBS,mBAAmB,EAAE,CAAC;IACtBd,OAAO,EAAE,EAAE;IACXe,cAAc,EAAE;EAClB,CAAC;EACD9B,QAAQ,EAAE;IACR+B,MAAM,EAAE,EAAE;IACVX,YAAY,EAAE,EAAE;IAChBE,eAAe,EAAE,SAAS;IAC1BQ,cAAc,EAAE;EAClB,CAAC;EACD7B,aAAa,EAAE;IACbU,KAAK,EAAE;EACT,CAAC;EACDP,cAAc,EAAE;IACdO,KAAK,EAAE;EACT,CAAC;EACDR,YAAY,EAAE;IACZQ,KAAK,EAAE;EACT,CAAC;EACDN,kBAAkB,EAAE;IAClB2B,aAAa,EAAE,KAAK;IAAE;IACtBC,UAAU,EAAE,QAAQ;IAAE;IACtBtB,KAAK,EAAE,MAAM;IACbW,eAAe,EAAE,SAAS;IAC1BF,YAAY,EAAE,EAAE;IAChBS,mBAAmB,EAAE,CAAC;IACtBd,OAAO,EAAE,EAAE;IACXe,cAAc,EAAE;EAClB,CAAC;EACDxB,WAAW,EAAE;IACXK,KAAK,EAAE,KAAK;IAAE;IACduB,WAAW,EAAE,CAAC;IAAE;IAChBZ,eAAe,EAAE,SAAS;IAAE;IAC5BF,YAAY,EAAE;EAChB,CAAC;EACDb,kBAAkB,EAAE;IAClBI,KAAK,EAAE,KAAK;IAAE;IACdwB,WAAW,EAAE,EAAE,CAAE;EACnB,CAAC;EACD/C,cAAc,EAAE;IACd4C,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBX,eAAe,EAAE,SAAS;IAC1BK,eAAe,EAAE,EAAE;IACnBR,iBAAiB,EAAE,EAAE;IACrBD,YAAY,EAAE,CAAC;IACfE,YAAY,EAAE,CAAC;IACfC,SAAS,EAAE;EACb,CAAC;EACD/B,YAAY,EAAE;IACVrB,KAAK,EAAE,OAAO;IACdC,QAAQ,EAAE,EAAE;IACZW,WAAW,EAAE;EACjB,CAAC;EACDJ,mBAAmB,EAAC;IAClBsC,OAAO,EAAE,CAAC;IACVI,iBAAiB,EAAE,EAAE;IACrBC,YAAY,EAAE,EAAE;IAChBF,YAAY,EAAE,CAAC;IACfc,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE;EACd,CAAC;EACDvD,aAAa,EAAC;IACZT,KAAK,EAAE,SAAS;IAChBoD,SAAS,EAAE,YAAY;IACvBC,eAAe,EAAE,SAAS;IAAE;IAC5BX,KAAK,EAAE;EACT;AACF,CAAC,CAAC;AAEF,CAAC;AACD;AACA;AACA,MAHC","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","useEffect","useContext","useRef","Text","StyleSheet","View","TextInput","TouchableOpacity","Platform","KeyboardAvoidingView","Keyboard","Animated","Linking","Button","Header","AppContext","Ionicons","KeyboardAwareScrollView","Testing","ChatInput","useWebSocketMessage","ProductCard","Markdown","Feedback","ProgressCircle","ChatWindow","panHandlers","handleSend","messages","input","setInput","ghostMessage","handleButtonClick","onProductCardClick","onAddToCartClick","uiConfig","ghostCard","typingIndicator","feedbackOpen","setFeedbackOpen","scrollViewRef","fadeAnim","Value","current","messageCount","setMessageCount","length","timeoutId","setTimeout","scrollToEnd","animated","clearTimeout","loop","sequence","timing","toValue","duration","useNativeDriver","start","openLink","url","openURL","createElement","style","styles","container","ref","contentContainerStyle","messagesContent","enableOnAndroid","enableOnIOS","contentInsetAdjustmentBehavior","automaticallyAdjustContentInsets","contentInset","bottom","keyboardShouldPersistTaps","showsVerticalScrollIndicator","extraScrollHeight","onContentSizeChange","contentWidth","contentHeight","currentLength","_scrollViewRef$curren","isAnyFeedbackOpen","Object","values","some","isOpen","_scrollViewRef$curren2","keyboardDismissMode","bounces","enableResetScrollToCoords","keyboardOpeningTime","map","msg","i","key","messageWrapper","type","messageBubble","userMessage","aiMessage","body","color","fontSize","lineHeight","text","String","message_id","message","messageId","middleMessageBubble","middleMessage","name","size","marginRight","marginTop","middleMessageText","products","prod","index","productCardWrapper","resource","resource_type","resourceButton","onPress","resourceText","icon","suggested_questions","Array","isArray","questions","question","suggestedQuestionButton","suggestedQuestionText","ghostMessageContainer","ghostBar","ghostBarShort","opacity","ghostBarLong","ghostBarMedium","ghostCardContainer","ghostSquare","ghostBarsContainer","behavior","OS","keyboardVerticalOffset","width","testButtons","create","flex","padding","justifyContent","paddingBottom","marginBottom","paddingHorizontal","borderRadius","alignSelf","backgroundColor","borderTopRightRadius","borderWidth","borderColor","paddingVertical","textAlign","borderTopLeftRadius","marginVertical","height","flexDirection","alignItems","aspectRatio","paddingLeft","flexShrink"],"sourceRoot":"../../../src","sources":["layout/window.js"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,SAAS,EAAEC,UAAU,EAAEC,MAAM,QAAQ,OAAO;AACtE,SAASC,IAAI,EAAEC,UAAU,EAAEC,IAAI,EAAEC,SAAS,EAAEC,gBAAgB,EAAEC,QAAQ,EAAEC,oBAAoB,EAC1FC,QAAQ,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,MAAM,QAAQ,cAAc;AAC3D,SAASC,MAAM,QAAQ,sBAAsB;AAC7C,SAASC,UAAU,QAAQ,wBAAwB;AACnD,OAAOC,QAAQ,MAAM,oCAAoC;AACzD,SAASC,uBAAuB,QAAQ,yCAAyC;AACjF,SAASC,OAAO,QAAQ,uBAAuB;AAC/C,SAASC,SAAS,QAAQ,qBAAqB;AAC/C,SAASC,mBAAmB,QAAQ,iBAAiB;AACrD,SAASC,WAAW,QAAQ,2BAA2B;AACvD,OAAOC,QAAQ,MAAM,+BAA+B;AACpD,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,SAASC,cAAc,QAAQ,8BAA8B;AAE7D,OAAO,MAAMC,UAAU,GAAGA,CAAC;EAAEC;AAAY,CAAC,KAAK;EAC7C,MAAM;IAAEC,UAAU;IAAEC,QAAQ;IAAEC,KAAK;IAAEC,QAAQ;IAAEC,YAAY;IAAEC,iBAAiB;IAC5EC,kBAAkB;IAAEC,gBAAgB;IAAEC,QAAQ;IAAEC,SAAS;IAAEC,eAAe;IAAEC,YAAY;IAAEC;EAC3F,CAAC,GAAGtC,UAAU,CAACc,UAAU,CAAC;EAE3B,MAAMyB,aAAa,GAAGtC,MAAM,CAAC,IAAI,CAAC;EAClC,MAAMuC,QAAQ,GAAGvC,MAAM,CAAC,IAAIS,QAAQ,CAAC+B,KAAK,CAAC,GAAG,CAAC,CAAC,CAACC,OAAO;EACxD,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAG9C,QAAQ,CAAC6B,QAAQ,CAACkB,MAAM,CAAC;EAGjE9C,SAAS,CAAC,MAAM;IACd,IAAIwC,aAAa,CAACG,OAAO,EAAE;MACzB,MAAMI,SAAS,GAAGC,UAAU,CAAC,MAAM;QACjC,IAAIR,aAAa,CAACG,OAAO,EAAE;UACzBH,aAAa,CAACG,OAAO,CAACM,WAAW,CAAC;YAAEC,QAAQ,EAAE;UAAM,CAAC,CAAC;QACxD;MACF,CAAC,EAAE,GAAG,CAAC;MAEP,OAAO,MAAMC,YAAY,CAACJ,SAAS,CAAC;IACtC;EACF,CAAC,EAAE,EAAE,CAAC;EAEN/C,SAAS,CAAC,MAAM;IACd,IAAI+B,YAAY,EAAE;MAChBpB,QAAQ,CAACyC,IAAI,CACXzC,QAAQ,CAAC0C,QAAQ,CAAC,CAChB1C,QAAQ,CAAC2C,MAAM,CAACb,QAAQ,EAAE;QAAEc,OAAO,EAAE,CAAC;QAAEC,QAAQ,EAAE,GAAG;QAAEC,eAAe,EAAE;MAAM,CAAC,CAAC,EAChF9C,QAAQ,CAAC2C,MAAM,CAACb,QAAQ,EAAE;QAAEc,OAAO,EAAE,GAAG;QAAEC,QAAQ,EAAE,GAAG;QAAEC,eAAe,EAAE;MAAM,CAAC,CAAC,CACnF,CACH,CAAC,CAACC,KAAK,CAAC,CAAC;IACX;EACF,CAAC,EAAE,CAAC3B,YAAY,CAAC,CAAC;EAElBX,mBAAmB,CAAC,CAAC;EAErB,MAAMuC,QAAQ,GAAIC,GAAG,IAAK;IACxBhD,OAAO,CAACiD,OAAO,CAACD,GAAG,CAAC;EACtB,CAAC;EAED,oBACE9D,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAEC,MAAM,CAACC;EAAU,gBAC5BnE,KAAA,CAAAgE,aAAA,CAACzD,IAAI,qBACHP,KAAA,CAAAgE,aAAA,CAAChD,MAAM,MAAE,CACL,CAAC,eAGPhB,KAAA,CAAAgE,aAAA,CAAC7C,uBAAuB;IACtBiD,GAAG,EAAE1B,aAAc;IACnB2B,qBAAqB,EAAEH,MAAM,CAACI,eAAgB;IAC9CC,eAAe;IACfC,WAAW;IACXC,8BAA8B,EAAC,OAAO;IACtCC,gCAAgC,EAAE,KAAM;IACxCC,YAAY,EAAE;MAAEC,MAAM,EAAE;IAAE,CAAE;IAC5BC,yBAAyB,EAAC,SAAS;IACnCC,4BAA4B,EAAE,KAAM;IACpCC,iBAAiB,EAAE,GAAI;IACvBC,mBAAmB,EAAEA,CAACC,YAAY,EAAEC,aAAa,KAAK;MACpD,MAAMC,aAAa,GAAGrD,QAAQ,CAACkB,MAAM;MAErC,IAAImC,aAAa,GAAGrC,YAAY,EAAE;QAAA,IAAAsC,qBAAA;QAChC,CAAAA,qBAAA,GAAA1C,aAAa,CAACG,OAAO,cAAAuC,qBAAA,eAArBA,qBAAA,CAAuBjC,WAAW,CAAC;UAAEC,QAAQ,EAAE;QAAK,CAAC,CAAC;QAEtDL,eAAe,CAACoC,aAAa,CAAC;MAChC,CAAC,MAAM,IAAIA,aAAa,IAAIrC,YAAY,EAAE;QACxC;QACA,MAAMuC,iBAAiB,GAAGC,MAAM,CAACC,MAAM,CAAC/C,YAAY,CAAC,CAACgD,IAAI,CAACC,MAAM,IAAIA,MAAM,KAAK,IAAI,CAAC;QAErF,IAAIJ,iBAAiB,EAAE;UACrB;UACA;QAAA,CACD,MAAM;UACL;UACA,IAAI9C,eAAe,EAAE;YAAA,IAAAmD,sBAAA;YACnB,CAAAA,sBAAA,GAAAhD,aAAa,CAACG,OAAO,cAAA6C,sBAAA,eAArBA,sBAAA,CAAuBvC,WAAW,CAAC;cAAEC,QAAQ,EAAE;YAAK,CAAC,CAAC;UACxD;QACF;QACA;QACAL,eAAe,CAACoC,aAAa,CAAC,CAAC,CAAC;MAElC,CAAC,MAAM,IAAIA,aAAa,GAAGrC,YAAY,EAAE;QACvCC,eAAe,CAACoC,aAAa,CAAC;MAChC;IACF,CAAE;IACFQ,mBAAmB,EAAC,MAAM;IAC1BC,OAAO,EAAE,KAAM;IACfC,yBAAyB,EAAE,KAAM;IACjCC,mBAAmB,EAAE;EAAE,GAEtBhE,QAAQ,CAACiE,GAAG,CAAC,CAACC,GAAG,EAAEC,CAAC,kBAEnBjG,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC2F,GAAG,EAAED,CAAE;IAAChC,KAAK,EAAEC,MAAM,CAACiC;EAAe,GACxCH,GAAG,CAACI,IAAI,KAAK,QAAQ,iBAClBpG,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAE,CAAEC,MAAM,CAACmC,aAAa,EAAEL,GAAG,CAACI,IAAI,KAAK,MAAM,GAAGlC,MAAM,CAACoC,WAAW,GAAGpC,MAAM,CAACqC,SAAS;EAAG,gBACjGvG,KAAA,CAAAgE,aAAA,CAACxC,QAAQ;IAACyC,KAAK,EAAE;MAAEuC,IAAI,EAAE;QAAEC,KAAK,EAAET,GAAG,CAACI,IAAI,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS;QAACM,QAAQ,EAAE,EAAE;QAAEC,UAAU,EAAE;MAAG;IAAC;EAAE,GAC3G,OAAOX,GAAG,CAACY,IAAI,KAAK,QAAQ,GAAGZ,GAAG,CAACY,IAAI,GAAGC,MAAM,CAACb,GAAG,CAACY,IAAI,IAAI,EAAE,CACxD,CAAC,EACTZ,GAAG,CAACI,IAAI,IAAI,IAAI,IAAIH,CAAC,IAAI,CAAC,IAAID,GAAG,CAACc,UAAU,iBAC5C9G,KAAA,CAAAgE,aAAA,CAACvC,QAAQ;IAACsF,OAAO,EAAEf,GAAI;IAACgB,SAAS,EAAEhB,GAAG,CAACc;EAAW,CAAC,CAEjD,CACT,EAEAd,GAAG,CAACI,IAAI,IAAI,QAAQ,iBACnBpG,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAAC+C,mBAAmB,EAAE/C,MAAM,CAACgD,aAAa;EAAE,gBAC9DlH,KAAA,CAAAgE,aAAA,CAAC9C,QAAQ;IAACiG,IAAI,EAAC,kBAAkB;IAACC,IAAI,EAAE,EAAG;IAACnD,KAAK,EAAE;MAACoD,WAAW,EAAE,EAAE;MAAEC,SAAS,EAAE;IAAE;EAAE,CAAC,CAAC,eACtFtH,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAEC,MAAM,CAACqD;EAAkB,gBACpCvH,KAAA,CAAAgE,aAAA,CAACxC,QAAQ;IAACyC,KAAK,EAAE;MAAEuC,IAAI,EAAE;QAAEC,KAAK,EAAET,GAAG,CAACI,IAAI,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS;QAACM,QAAQ,EAAE,EAAE;QAAEC,UAAU,EAAE;MAAG;IAAC;EAAE,GAC7G,OAAOX,GAAG,CAACY,IAAI,KAAK,QAAQ,GAAGZ,GAAG,CAACY,IAAI,GAAGC,MAAM,CAACb,GAAG,CAACY,IAAI,IAAI,EAAE,CACtD,CACN,CACF,CACP,EAEAZ,GAAG,CAACwB,QAAQ,IAAIxB,GAAG,CAACwB,QAAQ,CAACxE,MAAM,GAAG,CAAC,IACtCgD,GAAG,CAACwB,QAAQ,CAACzB,GAAG,CAAC,CAAC0B,IAAI,EAAEC,KAAK,kBAC3B1H,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC2F,GAAG,EAAEwB,KAAM;IAACzD,KAAK,EAAEC,MAAM,CAACyD;EAAmB,gBACjD3H,KAAA,CAAAgE,aAAA,CAACzC,WAAW;IAACkG,IAAI,EAAEA,IAAK;IAACT,SAAS,EAAEhB,GAAG,CAACc;EAAW,CAAE,CACjD,CACT,CAAC,EAEDd,GAAG,CAAC4B,QAAQ,IAAI5B,GAAG,CAAC4B,QAAQ,CAAC5E,MAAM,GAAG,CAAC,IAAIgD,GAAG,CAAC6B,aAAa,IAAI,OAAO,iBACtE7H,KAAA,CAAAgE,aAAA,CAACvD,gBAAgB;IAACwD,KAAK,EAAEC,MAAM,CAAC4D,cAAe;IAACC,OAAO,EAAEA,CAAA,KAAMlE,QAAQ,CAACmC,GAAG,CAAC4B,QAAQ;EAAE,gBACpF5H,KAAA,CAAAgE,aAAA,CAAC3D,IAAI;IAAC4D,KAAK,EAAEC,MAAM,CAAC8D;EAAa,GAAC,aAAiB,CAAC,eACpDhI,KAAA,CAAAgE,aAAA,CAAC9C,QAAQ;IAACiG,IAAI,EAAC,MAAM;IAACC,IAAI,EAAE,EAAG;IAACX,KAAK,EAAC,OAAO;IAACxC,KAAK,EAAEC,MAAM,CAAC+D;EAAK,CAAE,CACnD,CAAC,EAGpBjC,GAAG,CAACkC,mBAAmB,IAAIC,KAAK,CAACC,OAAO,CAACpC,GAAG,CAACqC,SAAS,CAAC,IAAIrC,GAAG,CAACqC,SAAS,CAACrF,MAAM,GAAG,CAAC,IAClFgD,GAAG,CAACqC,SAAS,CAACtC,GAAG,CAAC,CAACuC,QAAQ,EAAEZ,KAAK,kBAChC1H,KAAA,CAAAgE,aAAA,CAACvD,gBAAgB;IAACyF,GAAG,EAAEwB,KAAM;IAACzD,KAAK,EAAEC,MAAM,CAACqE,uBAAwB;IAClER,OAAO,EAAEA,CAAA,KAAM7F,iBAAiB,CAACoG,QAAQ;EAAE,gBAC3CtI,KAAA,CAAAgE,aAAA,CAAC3D,IAAI;IAAC4D,KAAK,EAAEC,MAAM,CAACsE;EAAsB,GAAEF,QAAe,CAC3C,CACrB,CAAC,EAEDrG,YAAY,IAAIgE,CAAC,KAAKnE,QAAQ,CAACkB,MAAM,GAAG,CAAC,iBACxChD,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAEC,MAAM,CAACuE;EAAsB,gBACxCzI,KAAA,CAAAgE,aAAA,CAACnD,QAAQ,CAACN,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAACwE,QAAQ,EAAExE,MAAM,CAACyE,aAAa,EAAE;MAAEC,OAAO,EAAEjG;IAAS,CAAC;EAAE,CAAE,CAAC,eACxF3C,KAAA,CAAAgE,aAAA,CAACnD,QAAQ,CAACN,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAACwE,QAAQ,EAAExE,MAAM,CAAC2E,YAAY,EAAE;MAAED,OAAO,EAAEjG;IAAS,CAAC;EAAE,CAAE,CAAC,eACvF3C,KAAA,CAAAgE,aAAA,CAACnD,QAAQ,CAACN,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAACwE,QAAQ,EAAExE,MAAM,CAAC4E,cAAc,EAAE;MAAEF,OAAO,EAAEjG;IAAS,CAAC;EAAE,CAAE,CACpF,CACP,EAEAL,SAAS,IAAI2D,CAAC,KAAKnE,QAAQ,CAACkB,MAAM,GAAG,CAAC,iBACrChD,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAEC,MAAM,CAAC6E;EAAmB,gBACrC/I,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAEC,MAAM,CAAC8E;EAAY,CAAE,CAAC,eACnChJ,KAAA,CAAAgE,aAAA,CAACzD,IAAI;IAAC0D,KAAK,EAAEC,MAAM,CAAC+E;EAAmB,gBACrCjJ,KAAA,CAAAgE,aAAA,CAACnD,QAAQ,CAACN,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAACwE,QAAQ,EAAExE,MAAM,CAACyE,aAAa,EAAE;MAAEC,OAAO,EAAEjG;IAAS,CAAC;EAAE,CAAE,CAAC,eACxF3C,KAAA,CAAAgE,aAAA,CAACnD,QAAQ,CAACN,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAACwE,QAAQ,EAAExE,MAAM,CAAC2E,YAAY,EAAE;MAAED,OAAO,EAAEjG;IAAS,CAAC;EAAE,CAAE,CAAC,eACvF3C,KAAA,CAAAgE,aAAA,CAACnD,QAAQ,CAACN,IAAI;IAAC0D,KAAK,EAAE,CAACC,MAAM,CAACwE,QAAQ,EAAExE,MAAM,CAAC4E,cAAc,EAAE;MAAEF,OAAO,EAAEjG;IAAS,CAAC;EAAE,CAAE,CACpF,CACF,CAGJ,CACP,CACsB,CAAC,eAE1B3C,KAAA,CAAAgE,aAAA,CAACrD,oBAAoB;IACnBuI,QAAQ,EAAExI,QAAQ,CAACyI,EAAE,KAAK,KAAK,GAAG,SAAS,GAAG,QAAS;IACvDC,sBAAsB,EAAE1I,QAAQ,CAACyI,EAAE,KAAK,KAAK,GAAG,EAAE,GAAG,CAAE;IACvDlF,KAAK,EAAE;MAAEoF,KAAK,EAAE;IAAO;EAAE,GAExBhH,QAAQ,CAACiH,WAAW,iBACnBtJ,KAAA,CAAAgE,aAAA,CAAC5C,OAAO;IACNe,kBAAkB,EAAEA,kBAAmB;IACvCC,gBAAgB,EAAEA;EAAiB,CACpC,CAAC,EAEH,CAACG,eAAe,gBACfvC,KAAA,CAAAgE,aAAA,CAAC3C,SAAS,MAAC,CAAC,gBACZrB,KAAA,CAAAgE,aAAA,CAACtC,cAAc,MAAE,CAEC,CAClB,CAAC;AAEX,CAAC;AAED,MAAMwC,MAAM,GAAG5D,UAAU,CAACiJ,MAAM,CAAC;EAC/BpF,SAAS,EAAE;IACTqF,IAAI,EAAE;EACR,CAAC;EACDlF,eAAe,EAAE;IACfmF,OAAO,EAAE,EAAE;IACXC,cAAc,EAAE,UAAU;IAC1BC,aAAa,EAAE;EACjB,CAAC;EACDxD,cAAc,EAAE;IACdyD,YAAY,EAAE;EAChB,CAAC;EACDvD,aAAa,EAAE;IACboD,OAAO,EAAE,CAAC;IACVI,iBAAiB,EAAE,EAAE;IACrBC,YAAY,EAAE,EAAE;IAChBF,YAAY,EAAE;EAChB,CAAC;EACDtD,WAAW,EAAE;IACXyD,SAAS,EAAE,UAAU;IACrBC,eAAe,EAAE,SAAS;IAC1BvD,KAAK,EAAE,SAAS;IAChBwD,oBAAoB,EAAE;EACxB,CAAC;EACD1D,SAAS,EAAE;IACTwD,SAAS,EAAE,YAAY;IACvBC,eAAe,EAAE,SAAS;IAC1BX,KAAK,EAAE;EACT,CAAC;EACD1B,kBAAkB,EAAE;IAClBL,SAAS,EAAE;EACb,CAAC;EACDiB,uBAAuB,EAAE;IACvByB,eAAe,EAAE,OAAO;IACxBE,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE,SAAS;IACtBL,YAAY,EAAE,EAAE;IAChBM,eAAe,EAAE,EAAE;IACnBP,iBAAiB,EAAE,EAAE;IACrBD,YAAY,EAAE,CAAC;IACfG,SAAS,EAAE;EACb,CAAC;EACDvB,qBAAqB,EAAE;IACrB/B,KAAK,EAAE,SAAS;IAChBC,QAAQ,EAAE,EAAE;IACZ2D,SAAS,EAAE;EACb,CAAC;EACD5B,qBAAqB,EAAE;IACrBsB,SAAS,EAAE,YAAY;IACvBV,KAAK,EAAE,MAAM;IACbW,eAAe,EAAE,SAAS;IAC1BF,YAAY,EAAE,EAAE;IAChBQ,mBAAmB,EAAE,CAAC;IACtBb,OAAO,EAAE,EAAE;IACXc,cAAc,EAAE;EAClB,CAAC;EACD7B,QAAQ,EAAE;IACR8B,MAAM,EAAE,EAAE;IACVV,YAAY,EAAE,EAAE;IAChBE,eAAe,EAAE,SAAS;IAC1BO,cAAc,EAAE;EAClB,CAAC;EACD5B,aAAa,EAAE;IACbU,KAAK,EAAE;EACT,CAAC;EACDP,cAAc,EAAE;IACdO,KAAK,EAAE;EACT,CAAC;EACDR,YAAY,EAAE;IACZQ,KAAK,EAAE;EACT,CAAC;EACDN,kBAAkB,EAAE;IAClB0B,aAAa,EAAE,KAAK;IAAE;IACtBC,UAAU,EAAE,QAAQ;IAAE;IACtBrB,KAAK,EAAE,MAAM;IACbW,eAAe,EAAE,SAAS;IAC1BF,YAAY,EAAE,EAAE;IAChBQ,mBAAmB,EAAE,CAAC;IACtBb,OAAO,EAAE,EAAE;IACXc,cAAc,EAAE;EAClB,CAAC;EACDvB,WAAW,EAAE;IACXK,KAAK,EAAE,KAAK;IAAE;IACdsB,WAAW,EAAE,CAAC;IAAE;IAChBX,eAAe,EAAE,SAAS;IAAE;IAC5BF,YAAY,EAAE;EAChB,CAAC;EACDb,kBAAkB,EAAE;IAClBI,KAAK,EAAE,KAAK;IAAE;IACduB,WAAW,EAAE,EAAE,CAAE;EACnB,CAAC;EACD9C,cAAc,EAAE;IACd2C,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBV,eAAe,EAAE,SAAS;IAC1BI,eAAe,EAAE,EAAE;IACnBP,iBAAiB,EAAE,EAAE;IACrBD,YAAY,EAAE,CAAC;IACfE,YAAY,EAAE,CAAC;IACfC,SAAS,EAAE;EACb,CAAC;EACD/B,YAAY,EAAE;IACVvB,KAAK,EAAE,OAAO;IACdC,QAAQ,EAAE,EAAE;IACZW,WAAW,EAAE;EACjB,CAAC;EACDJ,mBAAmB,EAAC;IAClBwC,OAAO,EAAE,CAAC;IACVI,iBAAiB,EAAE,EAAE;IACrBC,YAAY,EAAE,EAAE;IAChBF,YAAY,EAAE,CAAC;IACfa,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE;EACd,CAAC;EACDxD,aAAa,EAAC;IACZT,KAAK,EAAE,SAAS;IAChBsD,SAAS,EAAE,YAAY;IACvBC,eAAe,EAAE,SAAS;IAAE;IAC5BX,KAAK,EAAE;EACT,CAAC;EACD9B,iBAAiB,EAAE;IACjBiC,IAAI,EAAE,CAAC;IACPqB,UAAU,EAAE;EACd;AACF,CAAC,CAAC;AAEF,CAAC;AACD;AACA;AACA,MAHC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/components/email.js"],"names":[],"mappings":"AAiBO;;sBA8MN;;kBA/N8D,OAAO"}
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/components/email.js"],"names":[],"mappings":"AAiBO;;sBAuTN;;kBAxU8D,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"productCard.d.ts","sourceRoot":"","sources":["../../../src/components/productCard.js"],"names":[],"mappings":"AAOO;;;;sBAkaN;kBAzasD,OAAO"}
1
+ {"version":3,"file":"productCard.d.ts","sourceRoot":"","sources":["../../../src/components/productCard.js"],"names":[],"mappings":"AAOO;;;;sBAmdN;kBA1dsD,OAAO"}
@@ -0,0 +1,3 @@
1
+ export function TestProductCard(): React.JSX.Element;
2
+ import React from 'react';
3
+ //# sourceMappingURL=testProductCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testProductCard.d.ts","sourceRoot":"","sources":["../../../src/components/testProductCard.js"],"names":[],"mappings":"AA6BO,qDAWN;kBAxCiB,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/components/testing.js"],"names":[],"mappings":"AAGO;;;sBAoCN;kBAvCiB,OAAO"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/components/testing.js"],"names":[],"mappings":"AAIO;;;sBAmDN;kBAvDiB,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"AppContext.d.ts","sourceRoot":"","sources":["../../../src/contexts/AppContext.js"],"names":[],"mappings":"AAMA,4CAA0C;AAEnC;;;;;;sBAyVN;kBAjW6E,OAAO"}
1
+ {"version":3,"file":"AppContext.d.ts","sourceRoot":"","sources":["../../../src/contexts/AppContext.js"],"names":[],"mappings":"AAMA,4CAA0C;AAEnC;;;;;;sBA4WN;kBApX6E,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/layout/window.js"],"names":[],"mappings":"AAeO;;sBA+KN;kBA9L8D,OAAO"}
1
+ {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../../src/layout/window.js"],"names":[],"mappings":"AAeO;;sBAiLN;kBAhM8D,OAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-srschat",
3
- "version": "0.1.55",
3
+ "version": "0.1.57",
4
4
  "private": false,
5
5
  "description": "A modern, sophisticated chat interface for React Native",
6
6
  "main": "lib/commonjs/index",
@@ -32,21 +32,118 @@ export const EmailForm = ({ panHandlers }) => {
32
32
  const messageInputRef = useRef(null);
33
33
  const emailInputRef = useRef(null);
34
34
 
35
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
35
+ // Industry-standard email validation following RFC 5322 guidelines
36
+ const validateEmailFormat = (email) => {
37
+ // More comprehensive regex that handles most valid email formats
38
+ // This regex covers:
39
+ // - Alphanumeric characters, dots, hyphens, underscores, plus signs
40
+ // - Quoted strings in local part
41
+ // - IP addresses in domain part
42
+ // - International domain names
43
+ const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
44
+
45
+ // Length validation (RFC 5321 limits)
46
+ const MAX_EMAIL_LENGTH = 254;
47
+ const MAX_LOCAL_LENGTH = 64;
48
+ const MAX_DOMAIN_LENGTH = 253;
49
+
50
+ if (email.length > MAX_EMAIL_LENGTH) {
51
+ return false;
52
+ }
53
+
54
+ const [localPart, domainPart] = email.split('@');
55
+
56
+ if (!localPart || !domainPart) {
57
+ return false;
58
+ }
59
+
60
+ if (localPart.length > MAX_LOCAL_LENGTH || domainPart.length > MAX_DOMAIN_LENGTH) {
61
+ return false;
62
+ }
63
+
64
+ return emailRegex.test(email);
65
+ };
66
+
67
+ const validateEmailDomain = (email) => {
68
+ const domainPart = email.split('@')[1];
69
+ if (!domainPart) return false;
70
+
71
+ // Common domain validation checks
72
+ const commonIssues = [
73
+ // Missing or invalid TLD
74
+ /\.(com|org|net|edu|gov|mil|int|co|io|ly|me|tv|info|biz|name|mobi|travel|museum|aero|coop|pro|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$/i,
75
+ ];
76
+
77
+ // Check for valid TLD
78
+ const hasValidTLD = commonIssues[0].test(domainPart);
79
+
80
+ // Check for common typos in popular domains
81
+ const commonDomainTypos = {
82
+ 'gmial.com': 'gmail.com',
83
+ 'gmail.co': 'gmail.com',
84
+ 'gmai.com': 'gmail.com',
85
+ 'yahooo.com': 'yahoo.com',
86
+ 'yaho.com': 'yahoo.com',
87
+ 'hotmial.com': 'hotmail.com',
88
+ 'hotmai.com': 'hotmail.com',
89
+ 'outlok.com': 'outlook.com',
90
+ 'outloo.com': 'outlook.com'
91
+ };
92
+
93
+ const suggestion = commonDomainTypos[domainPart.toLowerCase()];
94
+
95
+ return {
96
+ isValid: hasValidTLD && !suggestion,
97
+ suggestion: suggestion
98
+ };
99
+ };
36
100
 
37
101
  const validateEmail = (email) => {
38
102
  if (!email) {
39
103
  return "Email address is required";
40
104
  }
41
- if (!emailRegex.test(email)) {
105
+
106
+ // Trim whitespace
107
+ email = email.trim();
108
+
109
+ // Basic format validation
110
+ if (!validateEmailFormat(email)) {
42
111
  return "Please enter a valid email address";
43
112
  }
113
+
114
+ // Domain validation with suggestions
115
+ const domainValidation = validateEmailDomain(email);
116
+ if (!domainValidation.isValid) {
117
+ if (domainValidation.suggestion) {
118
+ return `Did you mean ${email.split('@')[0]}@${domainValidation.suggestion}?`;
119
+ }
120
+ return "Please enter a valid email address";
121
+ }
122
+
123
+ // Additional checks for common formatting errors
124
+ const commonFormatIssues = [
125
+ { pattern: /\.\./, message: "Email address cannot contain consecutive dots" },
126
+ { pattern: /^\./, message: "Email address cannot start with a dot" },
127
+ { pattern: /\.$/, message: "Email address cannot end with a dot" },
128
+ { pattern: /@\./, message: "Invalid format after @ symbol" },
129
+ { pattern: /\.@/, message: "Invalid format before @ symbol" },
130
+ { pattern: /\s/, message: "Email address cannot contain spaces" },
131
+ { pattern: /@.*@/, message: "Email address can only contain one @ symbol" }
132
+ ];
133
+
134
+ for (const issue of commonFormatIssues) {
135
+ if (issue.pattern.test(email)) {
136
+ return issue.message;
137
+ }
138
+ }
139
+
44
140
  return "";
45
141
  };
46
142
 
47
143
  const handleComposeEmail = async () => {
48
144
  setIsComposing(true);
49
145
  setError("");
146
+ setSuccess(false);
50
147
 
51
148
  try {
52
149
  const chatHistory = formatChatHistory();
@@ -65,6 +162,7 @@ export const EmailForm = ({ panHandlers }) => {
65
162
  setSubject(response.data.subject || "");
66
163
  } catch (error) {
67
164
  setError(error.response?.data?.message || "Failed to compose email");
165
+ setSuccess(false);
68
166
  } finally {
69
167
  setIsComposing(false);
70
168
  }
@@ -74,14 +172,18 @@ export const EmailForm = ({ panHandlers }) => {
74
172
  const emailError = validateEmail(userEmail);
75
173
  if (emailError) {
76
174
  setError(emailError);
175
+ setSuccess(false);
77
176
  return;
78
177
  }
79
178
  if (!subject || !message) {
80
179
  setError("Please fill in all fields");
180
+ setSuccess(false);
81
181
  return;
82
182
  }
83
183
 
84
184
  setIsLoading(true);
185
+ setError("");
186
+ setSuccess(false);
85
187
 
86
188
  try {
87
189
  const chatHistory = formatChatHistory();
@@ -96,12 +198,14 @@ export const EmailForm = ({ panHandlers }) => {
96
198
  });
97
199
 
98
200
  setSuccess(true);
201
+ setError("");
99
202
  setTimeout(() => {
100
203
  setSuccess(false);
101
204
  setShowModal("ChatWindow");
102
205
  }, 2000);
103
206
  } catch (error) {
104
207
  setError(error.response?.data?.message || "Failed to send email");
208
+ setSuccess(false);
105
209
  } finally {
106
210
  setIsLoading(false);
107
211
  }
@@ -156,6 +260,7 @@ export const EmailForm = ({ panHandlers }) => {
156
260
  const emailValidationError = validateEmail(text);
157
261
  if (emailValidationError) {
158
262
  setError(emailValidationError);
263
+ setSuccess(false);
159
264
  } else if (error === "Please enter a valid email address" || error === "Email address is required") {
160
265
  setError("");
161
266
  }
@@ -247,6 +352,7 @@ const styles = StyleSheet.create({
247
352
  fontSize: 18,
248
353
  fontWeight: "500",
249
354
  marginLeft: 12,
355
+ color: "#000",
250
356
  },
251
357
  infoText: {
252
358
  textAlign: "left",
@@ -24,7 +24,8 @@ export const ProductCard = ({ prod, onFocusQuantityInput, messageId }) => {
24
24
  if (minPackStr) {
25
25
  const minPackNum = parseFloat(minPackStr);
26
26
  if (!isNaN(minPackNum) && minPackNum > 1.0) {
27
- return minPackNum;
27
+ // Round to 2 decimal places for decimal min pack quantities
28
+ return Math.round(minPackNum * 100) / 100;
28
29
  }
29
30
  }
30
31
  return 1; // Default min pack quantity for individual purchase
@@ -50,6 +51,7 @@ export const ProductCard = ({ prod, onFocusQuantityInput, messageId }) => {
50
51
  const currentMinPackQtyForSelectedUom = getMinPackQtyForUom(selectedUom);
51
52
 
52
53
  const [quantity, setQuantity] = useState(0);
54
+ const [quantityText, setQuantityText] = useState("0"); // Track the text input separately
53
55
 
54
56
  // Add keyboard listeners to detect when keyboard appears/disappears
55
57
  useEffect(() => {
@@ -80,49 +82,67 @@ export const ProductCard = ({ prod, onFocusQuantityInput, messageId }) => {
80
82
  // Called on every keystroke in the quantity input
81
83
  const handleQuantityChange = (text) => {
82
84
  const rawValue = text.trim();
85
+
86
+ // Update the text display immediately
87
+ setQuantityText(rawValue);
88
+
89
+ // Handle empty input
83
90
  if (rawValue === "") {
84
91
  setQuantity(0);
85
92
  return;
86
93
  }
87
- const numericValue = parseInt(rawValue, 10);
94
+
95
+ // Allow partial decimal inputs like "." or "1."
96
+ if (rawValue === "." || rawValue.endsWith(".")) {
97
+ // Don't update quantity state for partial decimal inputs, just keep the text
98
+ return;
99
+ }
100
+
101
+ const numericValue = parseFloat(rawValue);
88
102
  if (!isNaN(numericValue) && numericValue >= 0) {
89
- setQuantity(numericValue);
103
+ // Round to 2 decimal places to handle decimal min pack quantities
104
+ setQuantity(Math.round(numericValue * 100) / 100);
90
105
  } else {
91
- setQuantity(0);
106
+ // Invalid input, reset quantity but keep the text for user feedback
107
+ setQuantity(0);
92
108
  }
93
109
  };
94
110
 
95
111
  // Called when the quantity input loses focus (onEndEditing)
96
112
  const handleQuantityBlur = () => {
97
- const currentQuantityFromState = quantity;
98
- const uom = selectedUom;
99
- const minPack = getMinPackQtyForUom(uom);
100
113
  const isProdValid = prod.inventory_info?.is_valid || false;
101
114
 
102
- if (!isProdValid) {
103
- if (quantity !== 0) setQuantity(0);
104
- return;
115
+ // Parse the final text input
116
+ const rawValue = quantityText.trim();
117
+ let finalQuantity = 0;
118
+
119
+ if (rawValue !== "") {
120
+ const numericValue = parseFloat(rawValue);
121
+ if (!isNaN(numericValue) && numericValue >= 0) {
122
+ finalQuantity = Math.round(numericValue * 100) / 100;
123
+ }
105
124
  }
106
125
 
107
- if (currentQuantityFromState === 0) {
108
- if (quantity !== 0) setQuantity(0);
126
+ // Only basic validation - don't auto-correct to min pack quantities
127
+ if (!isProdValid) {
128
+ setQuantity(0);
129
+ setQuantityText("0");
109
130
  return;
110
131
  }
111
132
 
112
- let adjustedValue;
113
- if (minPack <= 1) {
114
- adjustedValue = currentQuantityFromState;
115
- } else {
116
- adjustedValue = Math.round(currentQuantityFromState / minPack) * minPack;
117
- if (currentQuantityFromState > 0 && adjustedValue === 0) {
118
- adjustedValue = minPack;
119
- }
133
+ // Just ensure quantity is not negative, but allow any positive decimal value
134
+ if (finalQuantity < 0) {
135
+ setQuantity(0);
136
+ setQuantityText("0");
137
+ return;
120
138
  }
121
139
 
122
- const finalQuantity = Math.max(0, adjustedValue);
123
- if (quantity !== finalQuantity) {
124
- setQuantity(finalQuantity);
125
- }
140
+ // Update both states with the final parsed value
141
+ setQuantity(finalQuantity);
142
+ setQuantityText(finalQuantity.toString());
143
+
144
+ // Keep the user's input as-is for valid products
145
+ // Validation and alerts will happen in handleAddToCart
126
146
  };
127
147
 
128
148
  const incrementQuantity = () => {
@@ -131,13 +151,28 @@ export const ProductCard = ({ prod, onFocusQuantityInput, messageId }) => {
131
151
 
132
152
  setQuantity(prevQuantity => {
133
153
  let newQuantity;
134
- if (prevQuantity === 0 && minPackForUom > 0) {
154
+
155
+ if (prevQuantity === 0) {
156
+ // If starting from 0, go to first min pack
135
157
  newQuantity = minPackForUom;
136
- } else {
158
+ } else if (minPackForUom <= 1) {
159
+ // If min pack is 1 or less, just increment by min pack
137
160
  newQuantity = prevQuantity + minPackForUom;
161
+ } else {
162
+ // Find the next valid multiple of min pack quantity
163
+ const nextMultiple = Math.ceil(prevQuantity / minPackForUom) * minPackForUom;
164
+ // If current quantity is already a perfect multiple, go to next multiple
165
+ if (Math.abs(prevQuantity % minPackForUom) < 0.01) {
166
+ newQuantity = prevQuantity + minPackForUom;
167
+ } else {
168
+ newQuantity = nextMultiple;
169
+ }
138
170
  }
139
171
 
140
- return newQuantity;
172
+ // Round to 2 decimal places to handle decimal min pack quantities
173
+ const finalQuantity = Math.round(newQuantity * 100) / 100;
174
+ setQuantityText(finalQuantity.toString());
175
+ return finalQuantity;
141
176
  });
142
177
  };
143
178
 
@@ -146,21 +181,33 @@ export const ProductCard = ({ prod, onFocusQuantityInput, messageId }) => {
146
181
  const minPackForUom = getMinPackQtyForUom(uomForCalc);
147
182
 
148
183
  setQuantity(prevQuantity => {
149
- if (prevQuantity === 0) return 0; // Cannot go below 0
150
-
151
- let newQuantity = prevQuantity - minPackForUom;
152
-
153
- if (newQuantity < 0) {
154
- newQuantity = 0;
184
+ if (prevQuantity === 0) {
185
+ setQuantityText("0");
186
+ return 0; // Cannot go below 0
155
187
  }
188
+
189
+ let newQuantity;
156
190
 
157
- // If new quantity is positive but less than minPackForUom, it should be 0
158
- // (as any purchase must be in multiples of minPackForUom or 0)
159
- if (newQuantity > 0 && newQuantity < minPackForUom) {
160
- newQuantity = 0;
191
+ if (minPackForUom <= 1) {
192
+ // If min pack is 1 or less, just decrement by min pack
193
+ newQuantity = Math.max(0, prevQuantity - minPackForUom);
194
+ } else {
195
+ // Find the previous valid multiple of min pack quantity
196
+ const prevMultiple = Math.floor(prevQuantity / minPackForUom) * minPackForUom;
197
+
198
+ // If current quantity is already a perfect multiple, go to previous multiple
199
+ if (Math.abs(prevQuantity % minPackForUom) < 0.01) {
200
+ newQuantity = Math.max(0, prevQuantity - minPackForUom);
201
+ } else {
202
+ // If not a perfect multiple, go to the lower multiple
203
+ newQuantity = prevMultiple;
204
+ }
161
205
  }
162
206
 
163
- return newQuantity;
207
+ // Round to 2 decimal places to handle decimal min pack quantities
208
+ const finalQuantity = Math.round(newQuantity * 100) / 100;
209
+ setQuantityText(finalQuantity.toString());
210
+ return finalQuantity;
164
211
  });
165
212
  };
166
213
 
@@ -201,8 +248,9 @@ export const ProductCard = ({ prod, onFocusQuantityInput, messageId }) => {
201
248
  });
202
249
  };
203
250
 
204
- if (currentMinPackQtyForSelectedUom > 1 && quantity % currentMinPackQtyForSelectedUom !== 0) {
205
- const roundedResult = Math.ceil(quantity / currentMinPackQtyForSelectedUom) * currentMinPackQtyForSelectedUom;
251
+ // Check if quantity is valid for min pack requirements
252
+ if (currentMinPackQtyForSelectedUom > 1 && Math.abs(quantity % currentMinPackQtyForSelectedUom) > 0.01) {
253
+ const roundedResult = Math.round(Math.ceil(quantity / currentMinPackQtyForSelectedUom) * currentMinPackQtyForSelectedUom * 100) / 100;
206
254
 
207
255
  Alert.alert(
208
256
  `Item #${prod.part_number} is sold in multiples of ${currentMinPackQtyForSelectedUom} ${selectedUom}`,
@@ -211,7 +259,7 @@ export const ProductCard = ({ prod, onFocusQuantityInput, messageId }) => {
211
259
  {
212
260
  text: 'Cancel',
213
261
  onPress: () => {
214
- setQuantity(0); // Reset quantity to 0
262
+ // Keep the user's input, don't reset to 0
215
263
  },
216
264
  style: 'cancel',
217
265
  },
@@ -246,6 +294,7 @@ export const ProductCard = ({ prod, onFocusQuantityInput, messageId }) => {
246
294
 
247
295
  // Always set quantity to 0 when UOM changes
248
296
  setQuantity(0);
297
+ setQuantityText("0");
249
298
  };
250
299
 
251
300
  const openUomPicker = () => {
@@ -376,7 +425,7 @@ export const ProductCard = ({ prod, onFocusQuantityInput, messageId }) => {
376
425
  </TouchableOpacity>
377
426
 
378
427
  <TextInput
379
- value={quantity.toString()}
428
+ value={quantityText}
380
429
  onChangeText={handleQuantityChange}
381
430
  onEndEditing={handleQuantityBlur}
382
431
  keyboardType="numeric"
@@ -0,0 +1,55 @@
1
+ import React from 'react';
2
+ import { View, ScrollView, StyleSheet, Text } from 'react-native';
3
+ import { ProductCard } from './productCard';
4
+
5
+ const mockProduct = {
6
+ "part_number": "AEQO177",
7
+ "inventory_info": {
8
+ "default_uom": "EA",
9
+ "is_valid": true,
10
+ "info_by_uom": {
11
+ "EA": {
12
+ "gross_price": 7.83,
13
+ "net_price": 7.83,
14
+ "is_on_sale": false,
15
+ "quantity_available": 0,
16
+ "discounts": null,
17
+ "min_pack_qty": 1.5
18
+ }
19
+ }
20
+ },
21
+ "product_details": {
22
+ "product_name": "Aladdin Hayward SPX1600S SuperPump Lid Gasket | O-177-2",
23
+ "part_number": "AEQO177",
24
+ "manufacturer_id": "O-177-2",
25
+ "heritage_link": "https://www.heritagepoolplus.com/aeqo177-aladdin-o-ring-o-177-o-177-2-o-177-2",
26
+ "image_url": "https://media.heritageplus.com/image/upload/v1668157956/image/AEQO177_0.jpg"
27
+ }
28
+ };
29
+
30
+ export const TestProductCard = () => {
31
+ return (
32
+ <ScrollView style={styles.container}>
33
+ <Text style={styles.title}>Test Product Card</Text>
34
+ <ProductCard
35
+ prod={mockProduct}
36
+ onFocusQuantityInput={(partNumber) => console.log('Focus on:', partNumber)}
37
+ messageId="test-message-123"
38
+ />
39
+ </ScrollView>
40
+ );
41
+ };
42
+
43
+ const styles = StyleSheet.create({
44
+ container: {
45
+ flex: 1,
46
+ backgroundColor: '#f6f6f6',
47
+ padding: 16,
48
+ },
49
+ title: {
50
+ fontSize: 18,
51
+ fontWeight: 'bold',
52
+ marginBottom: 16,
53
+ textAlign: 'center',
54
+ },
55
+ });
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
- import { View, Button, StyleSheet, TouchableOpacity, Text } from 'react-native';
2
+ import { View, Button, StyleSheet, TouchableOpacity, Text, ScrollView } from 'react-native';
3
+ import { ProductCard } from './productCard';
3
4
 
4
5
  export const Testing = ({ onProductCardClick, onAddToCartClick }) => {
5
6
 
@@ -14,7 +15,8 @@ export const Testing = ({ onProductCardClick, onAddToCartClick }) => {
14
15
  "net_price": 7.83,
15
16
  "is_on_sale": false,
16
17
  "quantity_available": 0,
17
- "discounts": null
18
+ "discounts": null,
19
+ "min_pack_qty": 1.5
18
20
  }
19
21
  }
20
22
  },
@@ -28,25 +30,52 @@ export const Testing = ({ onProductCardClick, onAddToCartClick }) => {
28
30
  }
29
31
 
30
32
  return (
31
- <View style={styles.container}>
32
- <TouchableOpacity style={styles.button} onPress={() => onProductCardClick(product)}>
33
- <Text style={styles.buttonText}>Product Card Click</Text>
34
- </TouchableOpacity>
35
- <TouchableOpacity style={styles.button} onPress={() => onAddToCartClick({"quantity":1,"product":product})}>
36
- <Text style={styles.buttonText}>Add to Cart</Text>
37
- </TouchableOpacity>
38
- </View>
33
+ <ScrollView style={styles.container}>
34
+ <Text style={styles.title}>Test Product Card</Text>
35
+
36
+ {/* Display the actual product card */}
37
+ <View style={styles.productCardContainer}>
38
+ <ProductCard
39
+ prod={product}
40
+ onFocusQuantityInput={(partNumber) => console.log('Focus on:', partNumber)}
41
+ messageId="test-message-123"
42
+ />
43
+ </View>
44
+
45
+ {/* Test buttons */}
46
+ <View style={styles.buttonContainer}>
47
+ <TouchableOpacity style={styles.button} onPress={() => onProductCardClick(product)}>
48
+ <Text style={styles.buttonText}>Product Card Click</Text>
49
+ </TouchableOpacity>
50
+ <TouchableOpacity style={styles.button} onPress={() => onAddToCartClick({"quantity":1,"product":product})}>
51
+ <Text style={styles.buttonText}>Add to Cart</Text>
52
+ </TouchableOpacity>
53
+ </View>
54
+ </ScrollView>
39
55
  );
40
56
  };
41
57
 
42
58
  const styles = StyleSheet.create({
43
59
  container: {
60
+ backgroundColor: '#f6f6f6',
61
+ borderTopWidth: 1,
62
+ borderTopColor: '#DDD',
63
+ },
64
+ title: {
65
+ fontSize: 18,
66
+ fontWeight: 'bold',
67
+ textAlign: 'center',
68
+ padding: 16,
69
+ },
70
+ productCardContainer: {
71
+ paddingHorizontal: 16,
72
+ },
73
+ buttonContainer: {
44
74
  flexDirection: 'row',
45
75
  alignItems: 'center',
46
76
  justifyContent: 'space-evenly',
47
77
  paddingHorizontal: 16,
48
- borderTopWidth: 1,
49
- borderTopColor: '#DDD',
78
+ paddingVertical: 20,
50
79
  },
51
80
  button: {
52
81
  backgroundColor: "#d4d4d4",
@@ -54,7 +83,9 @@ const styles = StyleSheet.create({
54
83
  paddingHorizontal: 12,
55
84
  borderRadius: 5,
56
85
  alignItems: "center",
57
- marginBottom: 10,
58
- marginTop: 10,
86
+ },
87
+ buttonText: {
88
+ fontSize: 14,
89
+ fontWeight: 'bold',
59
90
  },
60
91
  });