@razorpay/blade 12.91.0 → 12.92.0
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.
- package/build/lib/web/development/_virtual/cloneDeep.js +1 -1
- package/build/lib/web/development/_virtual/cloneDeep3.js +1 -1
- package/build/lib/web/development/components/ChatInput/ChatInput.web.js +17 -11
- package/build/lib/web/development/components/ChatInput/ChatInput.web.js.map +1 -1
- package/build/lib/web/development/components/ChatInput/useChatInput.js +12 -1
- package/build/lib/web/development/components/ChatInput/useChatInput.js.map +1 -1
- package/build/lib/web/development/components/ChatMessage/SelfMessageBubble.web.js +1 -1
- package/build/lib/web/development/components/ChatMessage/SelfMessageBubble.web.js.map +1 -1
- package/build/lib/web/development/components/SideNav/SideNav.web.js +143 -53
- package/build/lib/web/development/components/SideNav/SideNav.web.js.map +1 -1
- package/build/lib/web/development/components/SideNav/SideNavItems/SideNavLink.web.js +33 -18
- package/build/lib/web/development/components/SideNav/SideNavItems/SideNavLink.web.js.map +1 -1
- package/build/lib/web/development/node_modules/es-toolkit/dist/compat/object/cloneDeep.js +1 -1
- package/build/lib/web/development/node_modules/es-toolkit/dist/compat/predicate/matches.js +2 -2
- package/build/lib/web/development/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js +2 -2
- package/build/lib/web/development/node_modules/es-toolkit/dist/object/cloneDeep.js +1 -1
- package/build/lib/web/production/_virtual/cloneDeep.js +1 -1
- package/build/lib/web/production/_virtual/cloneDeep3.js +1 -1
- package/build/lib/web/production/_virtual/flatten.js +1 -1
- package/build/lib/web/production/_virtual/flatten3.js +1 -1
- package/build/lib/web/production/components/ChatInput/ChatInput.web.js +17 -11
- package/build/lib/web/production/components/ChatInput/ChatInput.web.js.map +1 -1
- package/build/lib/web/production/components/ChatInput/useChatInput.js +12 -1
- package/build/lib/web/production/components/ChatInput/useChatInput.js.map +1 -1
- package/build/lib/web/production/components/ChatMessage/SelfMessageBubble.web.js +1 -1
- package/build/lib/web/production/components/ChatMessage/SelfMessageBubble.web.js.map +1 -1
- package/build/lib/web/production/components/SideNav/SideNav.web.js +143 -53
- package/build/lib/web/production/components/SideNav/SideNav.web.js.map +1 -1
- package/build/lib/web/production/components/SideNav/SideNavItems/SideNavLink.web.js +33 -18
- package/build/lib/web/production/components/SideNav/SideNavItems/SideNavLink.web.js.map +1 -1
- package/build/lib/web/production/node_modules/es-toolkit/dist/array/flatten.js +1 -1
- package/build/lib/web/production/node_modules/es-toolkit/dist/compat/array/flatten.js +1 -1
- package/build/lib/web/production/node_modules/es-toolkit/dist/compat/array/sortBy.js +2 -2
- package/build/lib/web/production/node_modules/es-toolkit/dist/compat/object/cloneDeep.js +1 -1
- package/build/lib/web/production/node_modules/es-toolkit/dist/compat/object/omit.js +2 -2
- package/build/lib/web/production/node_modules/es-toolkit/dist/compat/predicate/matches.js +2 -2
- package/build/lib/web/production/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js +2 -2
- package/build/lib/web/production/node_modules/es-toolkit/dist/object/cloneDeep.js +1 -1
- package/build/types/components/index.d.ts +123 -74
- package/build/types/components/index.native.d.ts +79 -40
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChatInput.js","sources":["../../../../../../src/components/ChatInput/useChatInput.ts"],"sourcesContent":["import React from 'react';\nimport type { ChatInputProps } from './types';\nimport { chatInputMaxTextAreaHeight } from './chatInputTokens';\nimport type { BladeElementRef } from '~utils/types';\nimport type { BladeFile, BladeFileList } from '~components/FileUpload/types';\nimport { isFileAccepted } from '~components/FileUpload/isFileAccepted';\nimport { useControllableState } from '~utils/useControllable';\nimport { useIsMobile } from '~utils/useIsMobile';\nimport { useMergeRefs } from '~utils/useMergeRefs';\n\ntype UseChatInputProps = Pick<\n ChatInputProps,\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'onSubmit'\n | 'isDisabled'\n | 'isGenerating'\n | 'onStop'\n | 'fileList'\n | 'onFileChange'\n | 'onFileRemove'\n | 'accept'\n | 'suggestions'\n | 'onSuggestionAccept'\n>;\n\nconst useChatInput = (\n {\n value: controlledValue,\n defaultValue,\n onChange,\n onSubmit,\n fileList: controlledFileList,\n onFileChange,\n onFileRemove,\n accept,\n suggestions,\n onSuggestionAccept,\n }: UseChatInputProps,\n ref: React.ForwardedRef<BladeElementRef>,\n): {\n fileInputRef: React.RefObject<HTMLInputElement>;\n mergedRef: React.RefCallback<BladeElementRef>;\n textValue: string;\n files: BladeFileList;\n activeSuggestionIndex: number;\n setActiveSuggestionIndex: React.Dispatch<React.SetStateAction<number>>;\n hasText: boolean;\n hasFiles: boolean;\n isSubmitDisabled: boolean;\n showGhostSuggestion: boolean;\n handleTextChange: (args: { name?: string; value?: string }) => void;\n handleSubmit: () => void;\n handleKeyDown: (args: {\n name?: string;\n key?: string;\n code?: string;\n event: React.KeyboardEvent<HTMLInputElement>;\n }) => void;\n handleUploadClick: () => void;\n handleFileInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n handleFileRemove: (file: BladeFile) => void;\n handlePaste: (event: React.ClipboardEvent<HTMLInputElement>) => void;\n} => {\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n const textareaRef = React.useRef<BladeElementRef>(null);\n const mergedRef = useMergeRefs(ref, textareaRef);\n\n const [textValue, setTextValue] = useControllableState({\n value: controlledValue,\n defaultValue: defaultValue ?? '',\n onChange: (newValue) => {\n onChange?.({ value: newValue });\n },\n });\n\n const [files, setFiles] = useControllableState<BladeFileList>({\n value: controlledFileList,\n defaultValue: controlledFileList ?? [],\n });\n\n const [activeSuggestionIndex, setActiveSuggestionIndex] = React.useState(0);\n\n const isMobile = useIsMobile();\n\n const hasText = textValue.trim().length > 0;\n const hasFiles = files.length > 0;\n const isSubmitDisabled = !hasText && !hasFiles;\n const showGhostSuggestion = !hasText && Boolean(suggestions?.length) && !isMobile;\n\n const adjustTextareaHeight = React.useCallback(() => {\n const textarea = textareaRef.current;\n if (textarea && textarea instanceof HTMLTextAreaElement) {\n textarea.style.height = 'auto';\n textarea.style.height = `${Math.min(textarea.scrollHeight, chatInputMaxTextAreaHeight)}px`;\n }\n }, []);\n\n React.useEffect(() => {\n adjustTextareaHeight();\n }, [textValue, adjustTextareaHeight]);\n\n const handleTextChange = React.useCallback(\n ({ value: newValue }: { name?: string; value?: string }) => {\n setTextValue(() => newValue ?? '');\n },\n [setTextValue],\n );\n\n const handleSubmit = React.useCallback(() => {\n if (isSubmitDisabled) return;\n onSubmit?.({ value: textValue, fileList: files });\n }, [isSubmitDisabled, onSubmit, textValue, files]);\n\n const handleKeyDown = React.useCallback(\n ({\n event,\n }: {\n name?: string;\n key?: string;\n code?: string;\n event: React.KeyboardEvent<HTMLInputElement>;\n }) => {\n if (!event) return;\n\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n handleSubmit();\n return;\n }\n\n if (event.key === 'Tab' && showGhostSuggestion && suggestions?.length) {\n event.preventDefault();\n const currentSuggestion = suggestions[activeSuggestionIndex];\n setTextValue(() => currentSuggestion);\n onSuggestionAccept?.({ suggestion: currentSuggestion });\n }\n },\n [\n handleSubmit,\n showGhostSuggestion,\n suggestions,\n activeSuggestionIndex,\n setTextValue,\n onSuggestionAccept,\n ],\n );\n\n const handleUploadClick = React.useCallback(() => {\n fileInputRef.current?.click();\n }, []);\n\n const handleFileInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const inputFiles = Array.from(event.target.files ?? []) as BladeFileList;\n\n const validFiles = inputFiles.filter((file) => {\n if (accept && !isFileAccepted(file, accept)) return false;\n return true;\n });\n\n for (const file of validFiles) {\n if (!file.id) {\n file.id = `${Date.now()}${Math.floor(Math.random() * 1000000)}`;\n }\n }\n\n if (validFiles.length > 0) {\n const newFileList = [...files, ...validFiles];\n setFiles(() => newFileList);\n onFileChange?.({ fileList: newFileList });\n }\n\n event.target.value = '';\n },\n [accept, files, setFiles, onFileChange],\n );\n\n const handleFileRemove = React.useCallback(\n (file: BladeFile) => {\n const newFileList = files.filter((f) => f.id !== file.id);\n setFiles(() => newFileList);\n onFileRemove?.({ file });\n },\n [files, setFiles, onFileRemove],\n );\n\n const handlePaste = React.useCallback(\n (event: React.ClipboardEvent<HTMLInputElement>) => {\n const clipboardFiles = Array.from(event.clipboardData?.files ?? []);\n if (clipboardFiles.length === 0) return;\n\n event.preventDefault();\n\n for (const file of clipboardFiles) {\n if (!(file as BladeFile).id) {\n (file as BladeFile).id = `${Date.now()}${Math.floor(Math.random() * 1000000)}`;\n }\n }\n\n if (clipboardFiles.length > 0) {\n const newFileList = [...files, ...clipboardFiles] as BladeFileList;\n setFiles(() => newFileList);\n onFileChange?.({ fileList: newFileList });\n }\n },\n [files, setFiles, onFileChange],\n );\n\n return {\n fileInputRef,\n mergedRef,\n textValue,\n files,\n activeSuggestionIndex,\n setActiveSuggestionIndex,\n hasText,\n hasFiles,\n isSubmitDisabled,\n showGhostSuggestion,\n handleTextChange,\n handleSubmit,\n handleKeyDown,\n handleUploadClick,\n handleFileInputChange,\n handleFileRemove,\n handlePaste,\n };\n};\n\nexport { useChatInput };\nexport type { UseChatInputProps };\n"],"names":["useChatInput","_ref","ref","controlledValue","value","defaultValue","onChange","onSubmit","controlledFileList","fileList","onFileChange","onFileRemove","accept","suggestions","onSuggestionAccept","fileInputRef","React","useRef","textareaRef","mergedRef","useMergeRefs","_useControllableState","useControllableState","newValue","_useControllableState2","_slicedToArray","textValue","setTextValue","_useControllableState3","_useControllableState4","files","setFiles","_React$useState","useState","_React$useState2","activeSuggestionIndex","setActiveSuggestionIndex","isMobile","useIsMobile","hasText","trim","length","hasFiles","isSubmitDisabled","showGhostSuggestion","Boolean","adjustTextareaHeight","useCallback","textarea","current","HTMLTextAreaElement","style","height","concat","Math","min","scrollHeight","chatInputMaxTextAreaHeight","useEffect","handleTextChange","_ref2","handleSubmit","handleKeyDown","_ref3","event","key","shiftKey","preventDefault","currentSuggestion","suggestion","handleUploadClick","_fileInputRef$current","click","handleFileInputChange","_event$target$files","inputFiles","Array","from","target","validFiles","filter","file","isFileAccepted","_iterator","_createForOfIteratorHelper","_step","s","n","done","id","Date","now","floor","random","err","e","f","newFileList","_toConsumableArray","handleFileRemove","handlePaste","_event$clipboardData$","_event$clipboardData","clipboardFiles","clipboardData","_i","_clipboardFiles"],"mappings":";;;;;;;;;;;;AA2BMA,IAAAA,YAAY,GAAG,SAAfA,YAAYA,CAAAC,IAAA,EAahBC,GAAwC,EAwBrC;AAAA,EAAA,IAnCMC,eAAe,GAAAF,IAAA,CAAtBG,KAAK;IACLC,YAAY,GAAAJ,IAAA,CAAZI,YAAY;IACZC,SAAQ,GAAAL,IAAA,CAARK,QAAQ;IACRC,QAAQ,GAAAN,IAAA,CAARM,QAAQ;IACEC,kBAAkB,GAAAP,IAAA,CAA5BQ,QAAQ;IACRC,YAAY,GAAAT,IAAA,CAAZS,YAAY;IACZC,YAAY,GAAAV,IAAA,CAAZU,YAAY;IACZC,MAAM,GAAAX,IAAA,CAANW,MAAM;IACNC,WAAW,GAAAZ,IAAA,CAAXY,WAAW;IACXC,kBAAkB,GAAAb,IAAA,CAAlBa,kBAAkB,CAAA;AA2BpB,EAAA,IAAMC,YAAY,GAAGC,cAAK,CAACC,MAAM,CAAmB,IAAI,CAAC,CAAA;AACzD,EAAA,IAAMC,WAAW,GAAGF,cAAK,CAACC,MAAM,CAAkB,IAAI,CAAC,CAAA;AACvD,EAAA,IAAME,SAAS,GAAGC,YAAY,CAAClB,GAAG,EAAEgB,WAAW,CAAC,CAAA;EAEhD,IAAAG,qBAAA,GAAkCC,oBAAoB,CAAC;AACrDlB,MAAAA,KAAK,EAAED,eAAe;AACtBE,MAAAA,YAAY,EAAEA,YAAY,KAAA,IAAA,IAAZA,YAAY,KAAZA,KAAAA,CAAAA,GAAAA,YAAY,GAAI,EAAE;AAChCC,MAAAA,QAAQ,EAAE,SAAVA,QAAQA,CAAGiB,QAAQ,EAAK;AACtBjB,QAAAA,SAAQ,KAARA,IAAAA,IAAAA,SAAQ,KAARA,KAAAA,CAAAA,IAAAA,SAAQ,CAAG;AAAEF,UAAAA,KAAK,EAAEmB,QAAAA;AAAS,SAAC,CAAC,CAAA;AACjC,OAAA;AACF,KAAC,CAAC;IAAAC,sBAAA,GAAAC,cAAA,CAAAJ,qBAAA,EAAA,CAAA,CAAA;AANKK,IAAAA,SAAS,GAAAF,sBAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,YAAY,GAAAH,sBAAA,CAAA,CAAA,CAAA,CAAA;EAQ9B,IAAAI,sBAAA,GAA0BN,oBAAoB,CAAgB;AAC5DlB,MAAAA,KAAK,EAAEI,kBAAkB;AACzBH,MAAAA,YAAY,EAAEG,kBAAkB,KAAA,IAAA,IAAlBA,kBAAkB,KAAA,KAAA,CAAA,GAAlBA,kBAAkB,GAAI,EAAA;AACtC,KAAC,CAAC;IAAAqB,sBAAA,GAAAJ,cAAA,CAAAG,sBAAA,EAAA,CAAA,CAAA;AAHKE,IAAAA,KAAK,GAAAD,sBAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,QAAQ,GAAAF,sBAAA,CAAA,CAAA,CAAA,CAAA;AAKtB,EAAA,IAAAG,eAAA,GAA0DhB,cAAK,CAACiB,QAAQ,CAAC,CAAC,CAAC;IAAAC,gBAAA,GAAAT,cAAA,CAAAO,eAAA,EAAA,CAAA,CAAA;AAApEG,IAAAA,qBAAqB,GAAAD,gBAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,wBAAwB,GAAAF,gBAAA,CAAA,CAAA,CAAA,CAAA;AAEtD,EAAA,IAAMG,QAAQ,GAAGC,WAAW,EAAE,CAAA;EAE9B,IAAMC,OAAO,GAAGb,SAAS,CAACc,IAAI,EAAE,CAACC,MAAM,GAAG,CAAC,CAAA;AAC3C,EAAA,IAAMC,QAAQ,GAAGZ,KAAK,CAACW,MAAM,GAAG,CAAC,CAAA;AACjC,EAAA,IAAME,gBAAgB,GAAG,CAACJ,OAAO,IAAI,CAACG,QAAQ,CAAA;AAC9C,EAAA,IAAME,mBAAmB,GAAG,CAACL,OAAO,IAAIM,OAAO,CAAChC,WAAW,KAAXA,IAAAA,IAAAA,WAAW,uBAAXA,WAAW,CAAE4B,MAAM,CAAC,IAAI,CAACJ,QAAQ,CAAA;AAEjF,EAAA,IAAMS,oBAAoB,GAAG9B,cAAK,CAAC+B,WAAW,CAAC,YAAM;AACnD,IAAA,IAAMC,QAAQ,GAAG9B,WAAW,CAAC+B,OAAO,CAAA;AACpC,IAAA,IAAID,QAAQ,IAAIA,QAAQ,YAAYE,mBAAmB,EAAE;AACvDF,MAAAA,QAAQ,CAACG,KAAK,CAACC,MAAM,GAAG,MAAM,CAAA;AAC9BJ,MAAAA,QAAQ,CAACG,KAAK,CAACC,MAAM,GAAA,EAAA,CAAAC,MAAA,CAAMC,IAAI,CAACC,GAAG,CAACP,QAAQ,CAACQ,YAAY,EAAEC,0BAA0B,CAAC,EAAI,IAAA,CAAA,CAAA;AAC5F,KAAA;GACD,EAAE,EAAE,CAAC,CAAA;EAENzC,cAAK,CAAC0C,SAAS,CAAC,YAAM;AACpBZ,IAAAA,oBAAoB,EAAE,CAAA;AACxB,GAAC,EAAE,CAACpB,SAAS,EAAEoB,oBAAoB,CAAC,CAAC,CAAA;EAErC,IAAMa,gBAAgB,GAAG3C,cAAK,CAAC+B,WAAW,CACxC,UAAAa,KAAA,EAA4D;AAAA,IAAA,IAAlDrC,QAAQ,GAAAqC,KAAA,CAAfxD,KAAK,CAAA;AACNuB,IAAAA,YAAY,CAAC,YAAA;AAAA,MAAA,OAAMJ,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,QAAQ,GAAI,EAAE,CAAA;KAAC,CAAA,CAAA;AACpC,GAAC,EACD,CAACI,YAAY,CACf,CAAC,CAAA;AAED,EAAA,IAAMkC,YAAY,GAAG7C,cAAK,CAAC+B,WAAW,CAAC,YAAM;AAC3C,IAAA,IAAIJ,gBAAgB,EAAE,OAAA;AACtBpC,IAAAA,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,IAAAA,QAAQ,CAAG;AAAEH,MAAAA,KAAK,EAAEsB,SAAS;AAAEjB,MAAAA,QAAQ,EAAEqB,KAAAA;AAAM,KAAC,CAAC,CAAA;GAClD,EAAE,CAACa,gBAAgB,EAAEpC,QAAQ,EAAEmB,SAAS,EAAEI,KAAK,CAAC,CAAC,CAAA;EAElD,IAAMgC,aAAa,GAAG9C,cAAK,CAAC+B,WAAW,CACrC,UAAAgB,KAAA,EAOM;AAAA,IAAA,IANJC,KAAK,GAAAD,KAAA,CAALC,KAAK,CAAA;IAOL,IAAI,CAACA,KAAK,EAAE,OAAA;IAEZ,IAAIA,KAAK,CAACC,GAAG,KAAK,OAAO,IAAI,CAACD,KAAK,CAACE,QAAQ,EAAE;MAC5CF,KAAK,CAACG,cAAc,EAAE,CAAA;AACtBN,MAAAA,YAAY,EAAE,CAAA;AACd,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAIG,KAAK,CAACC,GAAG,KAAK,KAAK,IAAIrB,mBAAmB,IAAI/B,WAAW,aAAXA,WAAW,KAAA,KAAA,CAAA,IAAXA,WAAW,CAAE4B,MAAM,EAAE;MACrEuB,KAAK,CAACG,cAAc,EAAE,CAAA;AACtB,MAAA,IAAMC,iBAAiB,GAAGvD,WAAW,CAACsB,qBAAqB,CAAC,CAAA;AAC5DR,MAAAA,YAAY,CAAC,YAAA;AAAA,QAAA,OAAMyC,iBAAiB,CAAA;OAAC,CAAA,CAAA;AACrCtD,MAAAA,kBAAkB,KAAlBA,IAAAA,IAAAA,kBAAkB,KAAlBA,KAAAA,CAAAA,IAAAA,kBAAkB,CAAG;AAAEuD,QAAAA,UAAU,EAAED,iBAAAA;AAAkB,OAAC,CAAC,CAAA;AACzD,KAAA;AACF,GAAC,EACD,CACEP,YAAY,EACZjB,mBAAmB,EACnB/B,WAAW,EACXsB,qBAAqB,EACrBR,YAAY,EACZb,kBAAkB,CAEtB,CAAC,CAAA;AAED,EAAA,IAAMwD,iBAAiB,GAAGtD,cAAK,CAAC+B,WAAW,CAAC,YAAM;AAAA,IAAA,IAAAwB,qBAAA,CAAA;AAChD,IAAA,CAAAA,qBAAA,GAAAxD,YAAY,CAACkC,OAAO,MAAA,IAAA,IAAAsB,qBAAA,KAAA,KAAA,CAAA,IAApBA,qBAAA,CAAsBC,KAAK,EAAE,CAAA;GAC9B,EAAE,EAAE,CAAC,CAAA;EAEN,IAAMC,qBAAqB,GAAGzD,cAAK,CAAC+B,WAAW,CAC7C,UAACiB,KAA0C,EAAK;AAAA,IAAA,IAAAU,mBAAA,CAAA;AAC9C,IAAA,IAAMC,UAAU,GAAGC,KAAK,CAACC,IAAI,CAAA,CAAAH,mBAAA,GAACV,KAAK,CAACc,MAAM,CAAChD,KAAK,MAAA4C,IAAAA,IAAAA,mBAAA,cAAAA,mBAAA,GAAI,EAAE,CAAkB,CAAA;IAExE,IAAMK,UAAU,GAAGJ,UAAU,CAACK,MAAM,CAAC,UAACC,IAAI,EAAK;MAC7C,IAAIrE,MAAM,IAAI,CAACsE,cAAc,CAACD,IAAI,EAAErE,MAAM,CAAC,EAAE,OAAO,KAAK,CAAA;AACzD,MAAA,OAAO,IAAI,CAAA;AACb,KAAC,CAAC,CAAA;AAAC,IAAA,IAAAuE,SAAA,GAAAC,0BAAA,CAEgBL,UAAU,CAAA;MAAAM,KAAA,CAAA;AAAA,IAAA,IAAA;MAA7B,KAAAF,SAAA,CAAAG,CAAA,EAAAD,EAAAA,CAAAA,CAAAA,KAAA,GAAAF,SAAA,CAAAI,CAAA,EAAAC,EAAAA,IAAA,GAA+B;AAAA,QAAA,IAApBP,IAAI,GAAAI,KAAA,CAAAjF,KAAA,CAAA;AACb,QAAA,IAAI,CAAC6E,IAAI,CAACQ,EAAE,EAAE;UACZR,IAAI,CAACQ,EAAE,GAAA,EAAA,CAAApC,MAAA,CAAMqC,IAAI,CAACC,GAAG,EAAE,CAAAtC,CAAAA,MAAA,CAAGC,IAAI,CAACsC,KAAK,CAACtC,IAAI,CAACuC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAE,CAAA;AACjE,SAAA;AACF,OAAA;AAAC,KAAA,CAAA,OAAAC,GAAA,EAAA;MAAAX,SAAA,CAAAY,CAAA,CAAAD,GAAA,CAAA,CAAA;AAAA,KAAA,SAAA;AAAAX,MAAAA,SAAA,CAAAa,CAAA,EAAA,CAAA;AAAA,KAAA;AAED,IAAA,IAAIjB,UAAU,CAACtC,MAAM,GAAG,CAAC,EAAE;MACzB,IAAMwD,WAAW,GAAA5C,EAAAA,CAAAA,MAAA,CAAA6C,kBAAA,CAAOpE,KAAK,CAAAoE,EAAAA,kBAAA,CAAKnB,UAAU,CAAC,CAAA,CAAA;AAC7ChD,MAAAA,QAAQ,CAAC,YAAA;AAAA,QAAA,OAAMkE,WAAW,CAAA;OAAC,CAAA,CAAA;AAC3BvF,MAAAA,YAAY,KAAZA,IAAAA,IAAAA,YAAY,KAAZA,KAAAA,CAAAA,IAAAA,YAAY,CAAG;AAAED,QAAAA,QAAQ,EAAEwF,WAAAA;AAAY,OAAC,CAAC,CAAA;AAC3C,KAAA;AAEAjC,IAAAA,KAAK,CAACc,MAAM,CAAC1E,KAAK,GAAG,EAAE,CAAA;GACxB,EACD,CAACQ,MAAM,EAAEkB,KAAK,EAAEC,QAAQ,EAAErB,YAAY,CACxC,CAAC,CAAA;EAED,IAAMyF,gBAAgB,GAAGnF,cAAK,CAAC+B,WAAW,CACxC,UAACkC,IAAe,EAAK;AACnB,IAAA,IAAMgB,WAAW,GAAGnE,KAAK,CAACkD,MAAM,CAAC,UAACgB,CAAC,EAAA;AAAA,MAAA,OAAKA,CAAC,CAACP,EAAE,KAAKR,IAAI,CAACQ,EAAE,CAAA;KAAC,CAAA,CAAA;AACzD1D,IAAAA,QAAQ,CAAC,YAAA;AAAA,MAAA,OAAMkE,WAAW,CAAA;KAAC,CAAA,CAAA;AAC3BtF,IAAAA,YAAY,KAAZA,IAAAA,IAAAA,YAAY,KAAZA,KAAAA,CAAAA,IAAAA,YAAY,CAAG;AAAEsE,MAAAA,IAAI,EAAJA,IAAAA;AAAK,KAAC,CAAC,CAAA;GACzB,EACD,CAACnD,KAAK,EAAEC,QAAQ,EAAEpB,YAAY,CAChC,CAAC,CAAA;EAED,IAAMyF,WAAW,GAAGpF,cAAK,CAAC+B,WAAW,CACnC,UAACiB,KAA6C,EAAK;IAAA,IAAAqC,qBAAA,EAAAC,oBAAA,CAAA;IACjD,IAAMC,cAAc,GAAG3B,KAAK,CAACC,IAAI,EAAAwB,qBAAA,GAAA,CAAAC,oBAAA,GAACtC,KAAK,CAACwC,aAAa,MAAAF,IAAAA,IAAAA,oBAAA,KAAnBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,oBAAA,CAAqBxE,KAAK,MAAAuE,IAAAA,IAAAA,qBAAA,KAAAA,KAAAA,CAAAA,GAAAA,qBAAA,GAAI,EAAE,CAAC,CAAA;AACnE,IAAA,IAAIE,cAAc,CAAC9D,MAAM,KAAK,CAAC,EAAE,OAAA;IAEjCuB,KAAK,CAACG,cAAc,EAAE,CAAA;AAEtB,IAAA,KAAA,IAAAsC,EAAA,GAAA,CAAA,EAAAC,eAAA,GAAmBH,cAAc,EAAAE,EAAA,GAAAC,eAAA,CAAAjE,MAAA,EAAAgE,EAAA,EAAE,EAAA;AAA9B,MAAA,IAAMxB,IAAI,GAAAyB,eAAA,CAAAD,EAAA,CAAA,CAAA;AACb,MAAA,IAAI,CAAExB,IAAI,CAAeQ,EAAE,EAAE;QAC1BR,IAAI,CAAeQ,EAAE,GAAA,EAAA,CAAApC,MAAA,CAAMqC,IAAI,CAACC,GAAG,EAAE,CAAAtC,CAAAA,MAAA,CAAGC,IAAI,CAACsC,KAAK,CAACtC,IAAI,CAACuC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAE,CAAA;AAChF,OAAA;AACF,KAAA;AAEA,IAAA,IAAIU,cAAc,CAAC9D,MAAM,GAAG,CAAC,EAAE;MAC7B,IAAMwD,WAAW,MAAA5C,MAAA,CAAA6C,kBAAA,CAAOpE,KAAK,CAAKyE,EAAAA,cAAc,CAAkB,CAAA;AAClExE,MAAAA,QAAQ,CAAC,YAAA;AAAA,QAAA,OAAMkE,WAAW,CAAA;OAAC,CAAA,CAAA;AAC3BvF,MAAAA,YAAY,KAAZA,IAAAA,IAAAA,YAAY,KAAZA,KAAAA,CAAAA,IAAAA,YAAY,CAAG;AAAED,QAAAA,QAAQ,EAAEwF,WAAAA;AAAY,OAAC,CAAC,CAAA;AAC3C,KAAA;GACD,EACD,CAACnE,KAAK,EAAEC,QAAQ,EAAErB,YAAY,CAChC,CAAC,CAAA;EAED,OAAO;AACLK,IAAAA,YAAY,EAAZA,YAAY;AACZI,IAAAA,SAAS,EAATA,SAAS;AACTO,IAAAA,SAAS,EAATA,SAAS;AACTI,IAAAA,KAAK,EAALA,KAAK;AACLK,IAAAA,qBAAqB,EAArBA,qBAAqB;AACrBC,IAAAA,wBAAwB,EAAxBA,wBAAwB;AACxBG,IAAAA,OAAO,EAAPA,OAAO;AACPG,IAAAA,QAAQ,EAARA,QAAQ;AACRC,IAAAA,gBAAgB,EAAhBA,gBAAgB;AAChBC,IAAAA,mBAAmB,EAAnBA,mBAAmB;AACnBe,IAAAA,gBAAgB,EAAhBA,gBAAgB;AAChBE,IAAAA,YAAY,EAAZA,YAAY;AACZC,IAAAA,aAAa,EAAbA,aAAa;AACbQ,IAAAA,iBAAiB,EAAjBA,iBAAiB;AACjBG,IAAAA,qBAAqB,EAArBA,qBAAqB;AACrB0B,IAAAA,gBAAgB,EAAhBA,gBAAgB;AAChBC,IAAAA,WAAW,EAAXA,WAAAA;GACD,CAAA;AACH;;;;"}
|
|
1
|
+
{"version":3,"file":"useChatInput.js","sources":["../../../../../../src/components/ChatInput/useChatInput.ts"],"sourcesContent":["import React from 'react';\nimport type { ChatInputProps } from './types';\nimport { chatInputMaxTextAreaHeight } from './chatInputTokens';\nimport type { BladeElementRef } from '~utils/types';\nimport type { BladeFile, BladeFileList } from '~components/FileUpload/types';\nimport { isFileAccepted } from '~components/FileUpload/isFileAccepted';\nimport { useControllableState } from '~utils/useControllable';\nimport { useIsMobile } from '~utils/useIsMobile';\nimport { useMergeRefs } from '~utils/useMergeRefs';\n\ntype UseChatInputProps = Pick<\n ChatInputProps,\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'onSubmit'\n | 'isDisabled'\n | 'isGenerating'\n | 'onStop'\n | 'fileList'\n | 'onFileChange'\n | 'onFileRemove'\n | 'accept'\n | 'suggestions'\n | 'onSuggestionAccept'\n>;\n\nconst useChatInput = (\n {\n value: controlledValue,\n defaultValue,\n onChange,\n onSubmit,\n fileList: controlledFileList,\n onFileChange,\n onFileRemove,\n accept,\n suggestions,\n onSuggestionAccept,\n }: UseChatInputProps,\n ref: React.ForwardedRef<BladeElementRef>,\n): {\n fileInputRef: React.RefObject<HTMLInputElement>;\n mergedRef: React.RefCallback<BladeElementRef>;\n textValue: string;\n files: BladeFileList;\n activeSuggestionIndex: number;\n setActiveSuggestionIndex: React.Dispatch<React.SetStateAction<number>>;\n hasText: boolean;\n hasFiles: boolean;\n isSubmitDisabled: boolean;\n showGhostSuggestion: boolean;\n handleTextChange: (args: { name?: string; value?: string }) => void;\n handleSubmit: () => void;\n handleKeyDown: (args: {\n name?: string;\n key?: string;\n code?: string;\n event: React.KeyboardEvent<HTMLInputElement>;\n }) => void;\n handleUploadClick: () => void;\n handleFileInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n handleFileRemove: (file: BladeFile) => void;\n handlePaste: (event: React.ClipboardEvent<HTMLInputElement>) => void;\n handleInnerMouseDownCapture: (event: React.MouseEvent) => void;\n} => {\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n const textareaRef = React.useRef<BladeElementRef>(null);\n const mergedRef = useMergeRefs(ref, textareaRef);\n\n const [textValue, setTextValue] = useControllableState({\n value: controlledValue,\n defaultValue: defaultValue ?? '',\n onChange: (newValue) => {\n onChange?.({ value: newValue });\n },\n });\n\n const [files, setFiles] = useControllableState<BladeFileList>({\n value: controlledFileList,\n defaultValue: controlledFileList ?? [],\n });\n\n const [activeSuggestionIndex, setActiveSuggestionIndex] = React.useState(0);\n\n const isMobile = useIsMobile();\n\n const hasText = textValue.trim().length > 0;\n const hasFiles = files.length > 0;\n const isSubmitDisabled = !hasText && !hasFiles;\n const showGhostSuggestion = !hasText && Boolean(suggestions?.length) && !isMobile;\n\n const adjustTextareaHeight = React.useCallback(() => {\n const textarea = textareaRef.current;\n if (textarea && textarea instanceof HTMLTextAreaElement) {\n textarea.style.height = 'auto';\n textarea.style.height = `${Math.min(textarea.scrollHeight, chatInputMaxTextAreaHeight)}px`;\n }\n }, []);\n\n React.useEffect(() => {\n adjustTextareaHeight();\n }, [textValue, adjustTextareaHeight]);\n\n const handleTextChange = React.useCallback(\n ({ value: newValue }: { name?: string; value?: string }) => {\n setTextValue(() => newValue ?? '');\n },\n [setTextValue],\n );\n\n const handleSubmit = React.useCallback(() => {\n if (isSubmitDisabled) return;\n onSubmit?.({ value: textValue, fileList: files });\n }, [isSubmitDisabled, onSubmit, textValue, files]);\n\n const handleKeyDown = React.useCallback(\n ({\n event,\n }: {\n name?: string;\n key?: string;\n code?: string;\n event: React.KeyboardEvent<HTMLInputElement>;\n }) => {\n if (!event) return;\n\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n handleSubmit();\n return;\n }\n\n if (event.key === 'Tab' && showGhostSuggestion && suggestions?.length) {\n event.preventDefault();\n const currentSuggestion = suggestions[activeSuggestionIndex];\n setTextValue(() => currentSuggestion);\n onSuggestionAccept?.({ suggestion: currentSuggestion });\n }\n },\n [\n handleSubmit,\n showGhostSuggestion,\n suggestions,\n activeSuggestionIndex,\n setTextValue,\n onSuggestionAccept,\n ],\n );\n\n const handleUploadClick = React.useCallback(() => {\n fileInputRef.current?.click();\n }, []);\n\n const handleFileInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const inputFiles = Array.from(event.target.files ?? []) as BladeFileList;\n\n const validFiles = inputFiles.filter((file) => {\n if (accept && !isFileAccepted(file, accept)) return false;\n return true;\n });\n\n for (const file of validFiles) {\n if (!file.id) {\n file.id = `${Date.now()}${Math.floor(Math.random() * 1000000)}`;\n }\n }\n\n if (validFiles.length > 0) {\n const newFileList = [...files, ...validFiles];\n setFiles(() => newFileList);\n onFileChange?.({ fileList: newFileList });\n }\n\n event.target.value = '';\n },\n [accept, files, setFiles, onFileChange],\n );\n\n const handleFileRemove = React.useCallback(\n (file: BladeFile) => {\n const newFileList = files.filter((f) => f.id !== file.id);\n setFiles(() => newFileList);\n onFileRemove?.({ file });\n },\n [files, setFiles, onFileRemove],\n );\n\n const handlePaste = React.useCallback(\n (event: React.ClipboardEvent<HTMLInputElement>) => {\n const clipboardFiles = Array.from(event.clipboardData?.files ?? []);\n if (clipboardFiles.length === 0) return;\n\n event.preventDefault();\n\n for (const file of clipboardFiles) {\n if (!(file as BladeFile).id) {\n (file as BladeFile).id = `${Date.now()}${Math.floor(Math.random() * 1000000)}`;\n }\n }\n\n if (clipboardFiles.length > 0) {\n const newFileList = [...files, ...clipboardFiles] as BladeFileList;\n setFiles(() => newFileList);\n onFileChange?.({ fileList: newFileList });\n }\n },\n [files, setFiles, onFileChange],\n );\n\n const handleInnerMouseDownCapture = React.useCallback((event: React.MouseEvent): void => {\n const target = event.target as HTMLElement | null;\n if (!target) return;\n\n // Allow normal behavior when clicking directly inside textarea.\n if (target.closest('textarea')) return;\n\n // Prevent focus from moving to internal controls (submit/upload/file actions).\n event.preventDefault();\n }, []);\n\n return {\n fileInputRef,\n mergedRef,\n textValue,\n files,\n activeSuggestionIndex,\n setActiveSuggestionIndex,\n hasText,\n hasFiles,\n isSubmitDisabled,\n showGhostSuggestion,\n handleTextChange,\n handleSubmit,\n handleKeyDown,\n handleUploadClick,\n handleFileInputChange,\n handleFileRemove,\n handlePaste,\n handleInnerMouseDownCapture,\n };\n};\n\nexport { useChatInput };\nexport type { UseChatInputProps };\n"],"names":["useChatInput","_ref","ref","controlledValue","value","defaultValue","onChange","onSubmit","controlledFileList","fileList","onFileChange","onFileRemove","accept","suggestions","onSuggestionAccept","fileInputRef","React","useRef","textareaRef","mergedRef","useMergeRefs","_useControllableState","useControllableState","newValue","_useControllableState2","_slicedToArray","textValue","setTextValue","_useControllableState3","_useControllableState4","files","setFiles","_React$useState","useState","_React$useState2","activeSuggestionIndex","setActiveSuggestionIndex","isMobile","useIsMobile","hasText","trim","length","hasFiles","isSubmitDisabled","showGhostSuggestion","Boolean","adjustTextareaHeight","useCallback","textarea","current","HTMLTextAreaElement","style","height","concat","Math","min","scrollHeight","chatInputMaxTextAreaHeight","useEffect","handleTextChange","_ref2","handleSubmit","handleKeyDown","_ref3","event","key","shiftKey","preventDefault","currentSuggestion","suggestion","handleUploadClick","_fileInputRef$current","click","handleFileInputChange","_event$target$files","inputFiles","Array","from","target","validFiles","filter","file","isFileAccepted","_iterator","_createForOfIteratorHelper","_step","s","n","done","id","Date","now","floor","random","err","e","f","newFileList","_toConsumableArray","handleFileRemove","handlePaste","_event$clipboardData$","_event$clipboardData","clipboardFiles","clipboardData","_i","_clipboardFiles","handleInnerMouseDownCapture","closest"],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ var SelfMessageBubble = function SelfMessageBubble(_ref) {
|
|
|
29
29
|
flexDirection: "column",
|
|
30
30
|
children: [/*#__PURE__*/jsx(StyledSelfMessageBubble, {
|
|
31
31
|
backgroundColor: chatMessageToken.self.backgroundColor["default"],
|
|
32
|
-
padding: isChildText ? 'spacing.
|
|
32
|
+
padding: isChildText ? 'spacing.4' : 'spacing.0',
|
|
33
33
|
borderRadius: "large",
|
|
34
34
|
width: "fit-content",
|
|
35
35
|
height: "auto",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelfMessageBubble.web.js","sources":["../../../../../../src/components/ChatMessage/SelfMessageBubble.web.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport type { CommonChatMessageProps } from './types';\nimport { chatMessageToken } from './token';\nimport { getMessageBubbleBoxShadow } from './utils';\nimport BaseBox from '~components/Box/BaseBox';\nimport { FormHint } from '~components/Form/FormHint';\nimport { useTheme } from '~utils';\n\nconst StyledSelfMessageBubble = styled(BaseBox)(() => {\n const { colorScheme } = useTheme();\n return getMessageBubbleBoxShadow(colorScheme);\n});\n\nconst SelfMessageBubble = ({\n children,\n validationState,\n errorText = 'Message not sent. Tap to retry.',\n isChildText,\n}: Pick<CommonChatMessageProps, 'children' | 'validationState' | 'errorText'> & {\n // is child is text then only add padding otherwise no need to add padding\n isChildText: boolean;\n}): React.ReactElement => {\n const isError = validationState === 'error';\n\n return (\n <BaseBox display=\"flex\" flexDirection=\"column\">\n <StyledSelfMessageBubble\n backgroundColor={chatMessageToken.self.backgroundColor.default}\n padding={isChildText ? 'spacing.
|
|
1
|
+
{"version":3,"file":"SelfMessageBubble.web.js","sources":["../../../../../../src/components/ChatMessage/SelfMessageBubble.web.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport type { CommonChatMessageProps } from './types';\nimport { chatMessageToken } from './token';\nimport { getMessageBubbleBoxShadow } from './utils';\nimport BaseBox from '~components/Box/BaseBox';\nimport { FormHint } from '~components/Form/FormHint';\nimport { useTheme } from '~utils';\n\nconst StyledSelfMessageBubble = styled(BaseBox)(() => {\n const { colorScheme } = useTheme();\n return getMessageBubbleBoxShadow(colorScheme);\n});\n\nconst SelfMessageBubble = ({\n children,\n validationState,\n errorText = 'Message not sent. Tap to retry.',\n isChildText,\n}: Pick<CommonChatMessageProps, 'children' | 'validationState' | 'errorText'> & {\n // is child is text then only add padding otherwise no need to add padding\n isChildText: boolean;\n}): React.ReactElement => {\n const isError = validationState === 'error';\n\n return (\n <BaseBox display=\"flex\" flexDirection=\"column\">\n <StyledSelfMessageBubble\n backgroundColor={chatMessageToken.self.backgroundColor.default}\n padding={isChildText ? 'spacing.4' : 'spacing.0'}\n borderRadius=\"large\"\n width=\"fit-content\"\n height=\"auto\"\n alignSelf=\"flex-end\"\n border=\"thin\"\n borderColor=\"surface.border.gray.muted\"\n >\n {children}\n </StyledSelfMessageBubble>\n <BaseBox alignSelf=\"flex-end\">\n {isError && <FormHint type=\"error\" errorText={errorText} size=\"small\" />}\n </BaseBox>\n </BaseBox>\n );\n};\n\nexport { SelfMessageBubble };\n"],"names":["StyledSelfMessageBubble","styled","BaseBox","withConfig","displayName","componentId","_useTheme","useTheme","colorScheme","getMessageBubbleBoxShadow","SelfMessageBubble","_ref","children","validationState","_ref$errorText","errorText","isChildText","isError","_jsxs","display","flexDirection","_jsx","backgroundColor","chatMessageToken","self","padding","borderRadius","width","height","alignSelf","border","borderColor","FormHint","type","size"],"mappings":";;;;;;;;;;;AASA,IAAMA,uBAAuB,gBAAGC,MAAM,CAACC,OAAO,CAAC,CAAAC,UAAA,CAAA;EAAAC,WAAA,EAAA,+CAAA;EAAAC,WAAA,EAAA,cAAA;AAAA,CAAA,CAAA,CAAC,YAAM;AACpD,EAAA,IAAAC,SAAA,GAAwBC,QAAQ,EAAE;IAA1BC,WAAW,GAAAF,SAAA,CAAXE,WAAW,CAAA;EACnB,OAAOC,yBAAyB,CAACD,WAAW,CAAC,CAAA;AAC/C,CAAC,CAAC,CAAA;AAEF,IAAME,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAAC,IAAA,EAQG;AAAA,EAAA,IAPxBC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRC,eAAe,GAAAF,IAAA,CAAfE,eAAe;IAAAC,cAAA,GAAAH,IAAA,CACfI,SAAS;AAATA,IAAAA,SAAS,GAAAD,cAAA,KAAG,KAAA,CAAA,GAAA,iCAAiC,GAAAA,cAAA;IAC7CE,WAAW,GAAAL,IAAA,CAAXK,WAAW,CAAA;AAKX,EAAA,IAAMC,OAAO,GAAGJ,eAAe,KAAK,OAAO,CAAA;EAE3C,oBACEK,IAAA,CAAChB,OAAO,EAAA;AAACiB,IAAAA,OAAO,EAAC,MAAM;AAACC,IAAAA,aAAa,EAAC,QAAQ;IAAAR,QAAA,EAAA,cAC5CS,GAAA,CAACrB,uBAAuB,EAAA;AACtBsB,MAAAA,eAAe,EAAEC,gBAAgB,CAACC,IAAI,CAACF,eAAe,CAAS,SAAA,CAAA;AAC/DG,MAAAA,OAAO,EAAET,WAAW,GAAG,WAAW,GAAG,WAAY;AACjDU,MAAAA,YAAY,EAAC,OAAO;AACpBC,MAAAA,KAAK,EAAC,aAAa;AACnBC,MAAAA,MAAM,EAAC,MAAM;AACbC,MAAAA,SAAS,EAAC,UAAU;AACpBC,MAAAA,MAAM,EAAC,MAAM;AACbC,MAAAA,WAAW,EAAC,2BAA2B;AAAAnB,MAAAA,QAAA,EAEtCA,QAAAA;AAAQ,KACc,CAAC,eAC1BS,GAAA,CAACnB,OAAO,EAAA;AAAC2B,MAAAA,SAAS,EAAC,UAAU;AAAAjB,MAAAA,QAAA,EAC1BK,OAAO,iBAAII,GAAA,CAACW,QAAQ,EAAA;AAACC,QAAAA,IAAI,EAAC,OAAO;AAAClB,QAAAA,SAAS,EAAEA,SAAU;AAACmB,QAAAA,IAAI,EAAC,OAAA;OAAS,CAAA;AAAC,KACjE,CAAC,CAAA;AAAA,GACH,CAAC,CAAA;AAEd;;;;"}
|
|
@@ -4,21 +4,21 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
|
4
4
|
import React__default from 'react';
|
|
5
5
|
import styled from 'styled-components';
|
|
6
6
|
import { SideNavContext } from './SideNavContext.js';
|
|
7
|
-
import { classes, COLLAPSED_L1_WIDTH,
|
|
8
|
-
import '
|
|
7
|
+
import { classes, COLLAPSED_L1_WIDTH, SIDE_NAV_EXPANDED_L1_WIDTH_BASE, SIDE_NAV_EXPANDED_L1_WIDTH_XL, TRANSITION_CLEANUP_DELAY, HOVER_AGAIN_DELAY, L1_EXIT_HOVER_DELAY, SKIP_NAV_ID } from './tokens.js';
|
|
8
|
+
import '../../tokens/global/index.js';
|
|
9
9
|
import '../../utils/index.js';
|
|
10
|
-
import '
|
|
11
|
-
import
|
|
10
|
+
import '../../utils/makeAnalyticsAttribute/index.js';
|
|
11
|
+
import '../../utils/metaAttribute/index.js';
|
|
12
12
|
import { useIsMobile } from '../../utils/useIsMobile.js';
|
|
13
|
+
import '../Box/BaseBox/index.js';
|
|
13
14
|
import '../Box/styledProps/index.js';
|
|
14
|
-
import '
|
|
15
|
-
import '
|
|
16
|
-
import '../../tokens/global/index.js';
|
|
15
|
+
import '../Drawer/index.js';
|
|
16
|
+
import { SkipNavLink, SkipNavContent } from '../SkipNav/SkipNav.web.js';
|
|
17
17
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
18
18
|
import { BaseBox } from '../Box/BaseBox/BaseBox.web.js';
|
|
19
19
|
import { makeMotionTime } from '../../utils/makeMotionTime/makeMotionTime.web.js';
|
|
20
|
-
import { makeSpace } from '../../utils/makeSpace/makeSpace.js';
|
|
21
20
|
import { makeSize } from '../../utils/makeSize/makeSize.js';
|
|
21
|
+
import { makeSpace } from '../../utils/makeSpace/makeSpace.js';
|
|
22
22
|
import { makeBorderSize } from '../../utils/makeBorderSize/makeBorderSize.js';
|
|
23
23
|
import { size } from '../../tokens/global/size.js';
|
|
24
24
|
import { Drawer } from '../Drawer/Drawer.web.js';
|
|
@@ -28,12 +28,12 @@ import { MetaConstants } from '../../utils/metaAttribute/metaConstants.js';
|
|
|
28
28
|
import { getStyledProps } from '../Box/styledProps/getStyledProps.js';
|
|
29
29
|
import { makeAnalyticsAttribute } from '../../utils/makeAnalyticsAttribute/makeAnalyticsAttribute.js';
|
|
30
30
|
|
|
31
|
-
var _excluded = ["children", "isOpen", "onDismiss", "onVisibleLevelChange", "banner", "testID"];
|
|
32
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
33
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
31
|
+
var _excluded = ["children", "isOpen", "onDismiss", "onVisibleLevelChange", "onExpandChange", "onExpandTransitionEnd", "banner", "backgroundColor", "testID", "isExpanded"];
|
|
34
32
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
35
33
|
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
36
34
|
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
35
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
36
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
37
37
|
var COLLAPSED = classes.COLLAPSED,
|
|
38
38
|
SHOW_WHEN_COLLAPSED = classes.SHOW_WHEN_COLLAPSED,
|
|
39
39
|
HIDE_WHEN_COLLAPSED = classes.HIDE_WHEN_COLLAPSED,
|
|
@@ -56,12 +56,7 @@ var StyledL1Menu = /*#__PURE__*/styled(BaseBox).withConfig({
|
|
|
56
56
|
var easing = props.theme.motion.easing;
|
|
57
57
|
var l1Expand = "width ".concat(xmoderate, " ").concat(easing.entrance);
|
|
58
58
|
var l1Collapse = "width ".concat(quick, " ").concat(easing.exit);
|
|
59
|
-
|
|
60
|
-
width: '100%',
|
|
61
|
-
transition: l1Expand
|
|
62
|
-
}, "& > .".concat(L1_ITEM_WRAPPER), {
|
|
63
|
-
padding: makeSpace(props.theme.spacing[3])
|
|
64
|
-
}), ".".concat(SHOW_WHEN_COLLAPSED), {
|
|
59
|
+
var textVisibilityProps = props.$isSideNavExpandable ? {} : _defineProperty(_defineProperty({}, ".".concat(SHOW_WHEN_COLLAPSED), {
|
|
65
60
|
display: 'none'
|
|
66
61
|
}), "&.".concat(COLLAPSED), _defineProperty(_defineProperty(_defineProperty({
|
|
67
62
|
width: makeSize(COLLAPSED_L1_WIDTH),
|
|
@@ -73,10 +68,52 @@ var StyledL1Menu = /*#__PURE__*/styled(BaseBox).withConfig({
|
|
|
73
68
|
}), "&:not(.".concat(TRANSITIONING, ") .").concat(SHOW_WHEN_COLLAPSED), {
|
|
74
69
|
display: 'initial'
|
|
75
70
|
}));
|
|
71
|
+
return _objectSpread(_defineProperty({
|
|
72
|
+
width: '100%',
|
|
73
|
+
// the overall sidenav expands and collapses in this case. No need transition here
|
|
74
|
+
transition: props.$isSideNavExpandable ? 'none' : l1Expand
|
|
75
|
+
}, "& > .".concat(L1_ITEM_WRAPPER), {
|
|
76
|
+
padding: makeSpace(props.theme.spacing[3])
|
|
77
|
+
}), textVisibilityProps);
|
|
78
|
+
});
|
|
79
|
+
var StyledSideNavContainer = /*#__PURE__*/styled(BaseBox).withConfig({
|
|
80
|
+
displayName: "SideNavweb__StyledSideNavContainer",
|
|
81
|
+
componentId: "sc-1obm5ij-2"
|
|
82
|
+
})(function (props) {
|
|
83
|
+
var quick = makeMotionTime(props.theme.motion.duration.quick);
|
|
84
|
+
var xmoderate = makeMotionTime(props.theme.motion.duration.xmoderate);
|
|
85
|
+
var easing = props.theme.motion.easing;
|
|
86
|
+
var sideNavExpand = "width ".concat(xmoderate, " ").concat(easing.entrance);
|
|
87
|
+
var sideNavCollapse = "width ".concat(quick, " ").concat(easing.exit);
|
|
88
|
+
if (!props.$isSideNavExpandable) {
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
return _defineProperty(_defineProperty(_defineProperty({
|
|
92
|
+
transition: sideNavExpand
|
|
93
|
+
}, "&.".concat(COLLAPSED), _defineProperty(_defineProperty({
|
|
94
|
+
width: makeSize(COLLAPSED_L1_WIDTH),
|
|
95
|
+
transition: sideNavCollapse
|
|
96
|
+
}, "&:not(.".concat(TRANSITIONING, ") .").concat(HIDE_WHEN_COLLAPSED), {
|
|
97
|
+
opacity: '0',
|
|
98
|
+
pointerEvents: 'none',
|
|
99
|
+
transition: "opacity ".concat(quick, " ").concat(easing.exit)
|
|
100
|
+
}), "&:not(.".concat(TRANSITIONING, ") .").concat(SHOW_WHEN_COLLAPSED), {
|
|
101
|
+
opacity: '1',
|
|
102
|
+
pointerEvents: 'auto',
|
|
103
|
+
transition: "opacity ".concat(quick, " ").concat(easing.entrance)
|
|
104
|
+
})), ".".concat(SHOW_WHEN_COLLAPSED), {
|
|
105
|
+
opacity: '0',
|
|
106
|
+
pointerEvents: 'none',
|
|
107
|
+
transition: "opacity ".concat(quick, " ").concat(easing.exit)
|
|
108
|
+
}), ".".concat(HIDE_WHEN_COLLAPSED), {
|
|
109
|
+
opacity: '1',
|
|
110
|
+
pointerEvents: 'auto',
|
|
111
|
+
transition: "opacity ".concat(quick, " ").concat(easing.entrance)
|
|
112
|
+
});
|
|
76
113
|
});
|
|
77
114
|
var StyledL2PortalContainer = /*#__PURE__*/styled(BaseBox).withConfig({
|
|
78
115
|
displayName: "SideNavweb__StyledL2PortalContainer",
|
|
79
|
-
componentId: "sc-1obm5ij-
|
|
116
|
+
componentId: "sc-1obm5ij-3"
|
|
80
117
|
})(function () {
|
|
81
118
|
return {
|
|
82
119
|
// This ensures that the portal node has 100% height when it has items
|
|
@@ -85,10 +122,10 @@ var StyledL2PortalContainer = /*#__PURE__*/styled(BaseBox).withConfig({
|
|
|
85
122
|
}
|
|
86
123
|
};
|
|
87
124
|
});
|
|
88
|
-
var getL1MenuClassName = function getL1MenuClassName(
|
|
89
|
-
var isL1Collapsed =
|
|
90
|
-
isL1Hovered =
|
|
91
|
-
isTransitioning =
|
|
125
|
+
var getL1MenuClassName = function getL1MenuClassName(_ref4) {
|
|
126
|
+
var isL1Collapsed = _ref4.isL1Collapsed,
|
|
127
|
+
isL1Hovered = _ref4.isL1Hovered,
|
|
128
|
+
isTransitioning = _ref4.isTransitioning;
|
|
92
129
|
var isMenuCollapsed = isL1Collapsed && !isL1Hovered;
|
|
93
130
|
if (isMenuCollapsed) {
|
|
94
131
|
if (isTransitioning) {
|
|
@@ -100,7 +137,7 @@ var getL1MenuClassName = function getL1MenuClassName(_ref3) {
|
|
|
100
137
|
};
|
|
101
138
|
var BannerContainer = /*#__PURE__*/styled(BaseBox).withConfig({
|
|
102
139
|
displayName: "SideNavweb__BannerContainer",
|
|
103
|
-
componentId: "sc-1obm5ij-
|
|
140
|
+
componentId: "sc-1obm5ij-4"
|
|
104
141
|
})(function (props) {
|
|
105
142
|
return {
|
|
106
143
|
'&:not(:empty)': {
|
|
@@ -129,18 +166,24 @@ var BannerContainer = /*#__PURE__*/styled(BaseBox).withConfig({
|
|
|
129
166
|
* SideNav requires handling active state with React Router, Checkout Usage with React Router v6 at - [SideNav Documentation](https://blade.razorpay.com/?path=/docs/components-sidenav--docs)
|
|
130
167
|
*
|
|
131
168
|
*/
|
|
132
|
-
var _SideNav = function _SideNav(
|
|
133
|
-
var children =
|
|
134
|
-
isOpen =
|
|
135
|
-
onDismiss =
|
|
136
|
-
onVisibleLevelChange =
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
169
|
+
var _SideNav = function _SideNav(_ref5, ref) {
|
|
170
|
+
var children = _ref5.children,
|
|
171
|
+
isOpen = _ref5.isOpen,
|
|
172
|
+
onDismiss = _ref5.onDismiss,
|
|
173
|
+
onVisibleLevelChange = _ref5.onVisibleLevelChange,
|
|
174
|
+
onExpandChange = _ref5.onExpandChange,
|
|
175
|
+
onExpandTransitionEnd = _ref5.onExpandTransitionEnd,
|
|
176
|
+
banner = _ref5.banner,
|
|
177
|
+
_ref5$backgroundColor = _ref5.backgroundColor,
|
|
178
|
+
backgroundColor = _ref5$backgroundColor === void 0 ? 'surface.background.gray.moderate' : _ref5$backgroundColor,
|
|
179
|
+
testID = _ref5.testID,
|
|
180
|
+
_isExpanded = _ref5.isExpanded,
|
|
181
|
+
rest = _objectWithoutProperties(_ref5, _excluded);
|
|
140
182
|
var l2PortalContainerRef = React__default.useRef(null);
|
|
141
183
|
var l1ContainerRef = React__default.useRef(null);
|
|
142
184
|
var timeoutIdsRef = React__default.useRef([]);
|
|
143
185
|
var mouseOverTimeoutRef = React__default.useRef();
|
|
186
|
+
var prevIsSideNavFullyCollapsedRef = React__default.useRef();
|
|
144
187
|
var _React$useState = React__default.useState(false),
|
|
145
188
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
146
189
|
isL1Collapsed = _React$useState2[0],
|
|
@@ -166,6 +209,13 @@ var _SideNav = function _SideNav(_ref4, ref) {
|
|
|
166
209
|
l2DrawerTitle = _React$useState10[0],
|
|
167
210
|
setL2DrawerTitle = _React$useState10[1];
|
|
168
211
|
var isMobile = useIsMobile();
|
|
212
|
+
var isSideNavFullyCollapsed = _isExpanded === false;
|
|
213
|
+
var effectiveIsL1Collapsed = isMobile ? isMobileL2Open : isSideNavFullyCollapsed || isL1Collapsed;
|
|
214
|
+
var effectiveIsL1Hovered = isSideNavFullyCollapsed ? false : isL1Hovered;
|
|
215
|
+
var sideNavWidth = isSideNavFullyCollapsed ? makeSize(COLLAPSED_L1_WIDTH) : {
|
|
216
|
+
base: makeSize(SIDE_NAV_EXPANDED_L1_WIDTH_BASE),
|
|
217
|
+
xl: makeSize(SIDE_NAV_EXPANDED_L1_WIDTH_XL)
|
|
218
|
+
};
|
|
169
219
|
var closeMobileNav = function closeMobileNav() {
|
|
170
220
|
if (isMobile) {
|
|
171
221
|
setIsMobileL2Open(false);
|
|
@@ -175,14 +225,18 @@ var _SideNav = function _SideNav(_ref4, ref) {
|
|
|
175
225
|
});
|
|
176
226
|
}
|
|
177
227
|
};
|
|
178
|
-
var cleanupTransition = function
|
|
228
|
+
var cleanupTransition = React__default.useCallback(function () {
|
|
179
229
|
var clearTransitionTimeout = setTimeout(function () {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
230
|
+
setIsTransitioning(function (isCurrentlyTransitioning) {
|
|
231
|
+
return isCurrentlyTransitioning ? false : isCurrentlyTransitioning;
|
|
232
|
+
});
|
|
183
233
|
}, TRANSITION_CLEANUP_DELAY);
|
|
184
234
|
timeoutIdsRef.current.push(clearTransitionTimeout);
|
|
185
|
-
};
|
|
235
|
+
}, []);
|
|
236
|
+
var startL1Transition = React__default.useCallback(function () {
|
|
237
|
+
setIsTransitioning(true);
|
|
238
|
+
cleanupTransition();
|
|
239
|
+
}, [cleanupTransition]);
|
|
186
240
|
var collapseL1 = function collapseL1(title) {
|
|
187
241
|
if (isMobile) {
|
|
188
242
|
setL2DrawerTitle(title);
|
|
@@ -207,6 +261,10 @@ var _SideNav = function _SideNav(_ref4, ref) {
|
|
|
207
261
|
});
|
|
208
262
|
return;
|
|
209
263
|
}
|
|
264
|
+
if (isSideNavFullyCollapsed) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
|
|
210
268
|
// Ensures that if Normal L1 item is clicked, the L1 stays expanded
|
|
211
269
|
if (isL1Collapsed) {
|
|
212
270
|
setIsL1Collapsed(false);
|
|
@@ -231,8 +289,7 @@ var _SideNav = function _SideNav(_ref4, ref) {
|
|
|
231
289
|
|
|
232
290
|
// `args.isFirstRender` checks if the item that triggered this change, triggered it during first render or during subsequent change
|
|
233
291
|
if (!args.isFirstRender) {
|
|
234
|
-
|
|
235
|
-
cleanupTransition();
|
|
292
|
+
startL1Transition();
|
|
236
293
|
setIsL1Hovered(false);
|
|
237
294
|
setIsHoverAgainEnabled(false);
|
|
238
295
|
// For some delay, we disable hover to expand behaviour to avoid buggy flicker when cursor is on L1 while its trying to close
|
|
@@ -252,13 +309,14 @@ var _SideNav = function _SideNav(_ref4, ref) {
|
|
|
252
309
|
l2PortalContainerRef: l2PortalContainerRef,
|
|
253
310
|
onLinkActiveChange: onLinkActiveChange,
|
|
254
311
|
closeMobileNav: closeMobileNav,
|
|
255
|
-
isL1Collapsed:
|
|
312
|
+
isL1Collapsed: effectiveIsL1Collapsed,
|
|
256
313
|
setIsL1Collapsed: setIsL1Collapsed,
|
|
257
|
-
isL1Hovered:
|
|
314
|
+
isL1Hovered: effectiveIsL1Hovered,
|
|
315
|
+
isSideNavFullyCollapsed: isSideNavFullyCollapsed
|
|
258
316
|
};
|
|
259
317
|
},
|
|
260
318
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
261
|
-
[
|
|
319
|
+
[effectiveIsL1Collapsed, effectiveIsL1Hovered, isSideNavFullyCollapsed]);
|
|
262
320
|
React__default.useEffect(function () {
|
|
263
321
|
return function () {
|
|
264
322
|
var _iterator = _createForOfIteratorHelper(timeoutIdsRef.current),
|
|
@@ -276,6 +334,24 @@ var _SideNav = function _SideNav(_ref4, ref) {
|
|
|
276
334
|
timeoutIdsRef.current = [];
|
|
277
335
|
};
|
|
278
336
|
}, []);
|
|
337
|
+
React__default.useEffect(function () {
|
|
338
|
+
if (!isMobile && isSideNavFullyCollapsed && isL1Hovered) {
|
|
339
|
+
setIsL1Hovered(false);
|
|
340
|
+
}
|
|
341
|
+
}, [isMobile, isSideNavFullyCollapsed, isL1Hovered]);
|
|
342
|
+
React__default.useEffect(function () {
|
|
343
|
+
var prevIsSideNavFullyCollapsed = prevIsSideNavFullyCollapsedRef.current;
|
|
344
|
+
prevIsSideNavFullyCollapsedRef.current = isSideNavFullyCollapsed;
|
|
345
|
+
if (isMobile || prevIsSideNavFullyCollapsed === undefined) {
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
if (prevIsSideNavFullyCollapsed !== isSideNavFullyCollapsed) {
|
|
349
|
+
startL1Transition();
|
|
350
|
+
onExpandChange === null || onExpandChange === void 0 || onExpandChange({
|
|
351
|
+
isExpanded: !isSideNavFullyCollapsed
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
}, [isMobile, isSideNavFullyCollapsed, onExpandChange, startL1Transition]);
|
|
279
355
|
return /*#__PURE__*/jsx(SideNavContext.Provider, {
|
|
280
356
|
value: contextValue,
|
|
281
357
|
children: isMobile && onDismiss ? /*#__PURE__*/jsxs(Fragment, {
|
|
@@ -312,10 +388,12 @@ var _SideNav = function _SideNav(_ref4, ref) {
|
|
|
312
388
|
})
|
|
313
389
|
})]
|
|
314
390
|
})]
|
|
315
|
-
}) : /*#__PURE__*/jsxs(
|
|
391
|
+
}) : /*#__PURE__*/jsxs(StyledSideNavContainer, _objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
392
|
+
$isSideNavExpandable: typeof _isExpanded !== 'undefined',
|
|
316
393
|
ref: ref,
|
|
394
|
+
className: isSideNavFullyCollapsed ? COLLAPSED : '',
|
|
317
395
|
position: "fixed",
|
|
318
|
-
backgroundColor:
|
|
396
|
+
backgroundColor: backgroundColor,
|
|
319
397
|
height: "100%",
|
|
320
398
|
top: "spacing.0",
|
|
321
399
|
left: "spacing.0",
|
|
@@ -324,15 +402,20 @@ var _SideNav = function _SideNav(_ref4, ref) {
|
|
|
324
402
|
m: 'flex'
|
|
325
403
|
},
|
|
326
404
|
flexDirection: "column",
|
|
327
|
-
width:
|
|
328
|
-
base: makeSize(SIDE_NAV_EXPANDED_L1_WIDTH_BASE),
|
|
329
|
-
xl: makeSize(SIDE_NAV_EXPANDED_L1_WIDTH_XL)
|
|
330
|
-
},
|
|
405
|
+
width: sideNavWidth,
|
|
331
406
|
as: "nav"
|
|
332
407
|
}, metaAttribute({
|
|
333
408
|
name: MetaConstants.SideNav,
|
|
334
409
|
testID: testID
|
|
335
410
|
})), getStyledProps(rest)), makeAnalyticsAttribute(rest)), {}, {
|
|
411
|
+
onTransitionEnd: function onTransitionEnd(e) {
|
|
412
|
+
if (e.target !== e.currentTarget || e.propertyName !== 'width' || isMobile) {
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
onExpandTransitionEnd === null || onExpandTransitionEnd === void 0 || onExpandTransitionEnd({
|
|
416
|
+
isExpanded: !isSideNavFullyCollapsed
|
|
417
|
+
});
|
|
418
|
+
},
|
|
336
419
|
children: [banner ? /*#__PURE__*/jsx(BannerContainer, {
|
|
337
420
|
children: banner
|
|
338
421
|
}) : null, /*#__PURE__*/jsxs(BaseBox, {
|
|
@@ -342,7 +425,8 @@ var _SideNav = function _SideNav(_ref4, ref) {
|
|
|
342
425
|
width: "100%",
|
|
343
426
|
children: [/*#__PURE__*/jsx(StyledL2PortalContainer, {
|
|
344
427
|
position: "absolute",
|
|
345
|
-
|
|
428
|
+
display: isSideNavFullyCollapsed ? 'none' : 'block',
|
|
429
|
+
backgroundColor: backgroundColor,
|
|
346
430
|
height: "100%",
|
|
347
431
|
width: "100%",
|
|
348
432
|
top: "spacing.0",
|
|
@@ -355,15 +439,16 @@ var _SideNav = function _SideNav(_ref4, ref) {
|
|
|
355
439
|
ref: l1ContainerRef,
|
|
356
440
|
id: "blade-sidenav-l1",
|
|
357
441
|
className: getL1MenuClassName({
|
|
358
|
-
isL1Collapsed:
|
|
359
|
-
isL1Hovered:
|
|
442
|
+
isL1Collapsed: effectiveIsL1Collapsed,
|
|
443
|
+
isL1Hovered: effectiveIsL1Hovered,
|
|
360
444
|
isTransitioning: isTransitioning
|
|
361
445
|
}),
|
|
446
|
+
$isSideNavExpandable: typeof _isExpanded !== 'undefined',
|
|
362
447
|
position: "absolute",
|
|
363
448
|
display: "flex",
|
|
364
449
|
flexDirection: "column",
|
|
365
450
|
justifyContent: "space-between",
|
|
366
|
-
backgroundColor:
|
|
451
|
+
backgroundColor: backgroundColor,
|
|
367
452
|
height: "100%",
|
|
368
453
|
overflow: "hidden",
|
|
369
454
|
top: "spacing.0",
|
|
@@ -389,6 +474,9 @@ var _SideNav = function _SideNav(_ref4, ref) {
|
|
|
389
474
|
// 6. But in case of unhover/leave, we don't want to trigger mouseOut for all child components individually. We want 1 hover out of L1 menu. Thus we use `onMouseLeave`
|
|
390
475
|
,
|
|
391
476
|
onMouseOver: function onMouseOver() {
|
|
477
|
+
if (!isMobile && isSideNavFullyCollapsed) {
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
392
480
|
if (mouseOverTimeoutRef.current) {
|
|
393
481
|
clearTimeout(mouseOverTimeoutRef.current);
|
|
394
482
|
}
|
|
@@ -400,11 +488,13 @@ var _SideNav = function _SideNav(_ref4, ref) {
|
|
|
400
488
|
}
|
|
401
489
|
},
|
|
402
490
|
onMouseLeave: function onMouseLeave() {
|
|
491
|
+
if (!isMobile && isSideNavFullyCollapsed) {
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
403
494
|
if (isL1Collapsed && isL1Hovered) {
|
|
404
495
|
mouseOverTimeoutRef.current = setTimeout(function () {
|
|
405
496
|
setIsL1Hovered(false);
|
|
406
|
-
|
|
407
|
-
cleanupTransition();
|
|
497
|
+
startL1Transition();
|
|
408
498
|
onVisibleLevelChange === null || onVisibleLevelChange === void 0 || onVisibleLevelChange({
|
|
409
499
|
visibleLevel: 2
|
|
410
500
|
});
|