@pega/cosmos-react-build 10.0.0-build.4.2 → 10.0.0-build.4.20
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/lib/components/AppShell/Header/AppHeader.d.ts.map +1 -1
- package/lib/components/AppShell/Header/AppHeader.js +1 -1
- package/lib/components/AppShell/Header/AppHeader.js.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.js +76 -13
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.js.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.js +0 -6
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.js.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.d.ts +9 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/CodeEditor.types.js.map +1 -1
- package/lib/components/ExpressionBuilder/CodeEditor/formatCSS.d.ts +3 -0
- package/lib/components/ExpressionBuilder/CodeEditor/formatCSS.d.ts.map +1 -0
- package/lib/components/ExpressionBuilder/CodeEditor/formatCSS.js +30 -0
- package/lib/components/ExpressionBuilder/CodeEditor/formatCSS.js.map +1 -0
- package/lib/components/ExpressionBuilder/ExpressionBuilder.styles.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/index.d.ts +1 -0
- package/lib/components/ExpressionBuilder/index.d.ts.map +1 -1
- package/lib/components/ExpressionBuilder/index.js +1 -0
- package/lib/components/ExpressionBuilder/index.js.map +1 -1
- package/lib/components/FieldReference/FieldReference.styles.d.ts.map +1 -1
- package/lib/components/FieldReference/FieldReferenceInput.d.ts.map +1 -1
- package/lib/components/FieldReference/FieldReferenceInput.js +6 -1
- package/lib/components/FieldReference/FieldReferenceInput.js.map +1 -1
- package/lib/components/LifeCycle/LifeCycle.types.d.ts +11 -0
- package/lib/components/LifeCycle/LifeCycle.types.d.ts.map +1 -1
- package/package.json +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppHeader.d.ts","sourceRoot":"","sources":["../../../../src/components/AppShell/Header/AppHeader.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,+BAA+B,EAAoB,MAAM,yBAAyB,CAAC;AAmBjG,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"AppHeader.d.ts","sourceRoot":"","sources":["../../../../src/components/AppShell/Header/AppHeader.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,+BAA+B,EAAoB,MAAM,yBAAyB,CAAC;AAmBjG,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,mBAAmB,CAAC;AAkJ/E,QAAA,MAAM,SAAS,EAAE,+BAA+B,CAAC,cAAc,CAkG7D,CAAC;AAEH,eAAe,SAAS,CAAC"}
|
|
@@ -33,7 +33,7 @@ const AppHeaderSearch = ({ showSearchButton, setShowSearchButton, ...restProps }
|
|
|
33
33
|
node.focus();
|
|
34
34
|
}
|
|
35
35
|
}, []);
|
|
36
|
-
return isMediumOrAbove || !showSearchButton ? (_jsxs(Flex, { as: StyledAppHeaderSearch, item: { shrink: 0, grow: 1 }, md: { item: { grow: 0, shrink: 1 } }, container: { justify: 'between', alignItems: 'center', gap: 1 }, children: [_jsx(StyledAppHeaderSearchForm, { role: 'search', "aria-label": t('sitewide'), onSubmit: e => e.preventDefault(),
|
|
36
|
+
return isMediumOrAbove || !showSearchButton ? (_jsxs(Flex, { as: StyledAppHeaderSearch, item: { shrink: 0, grow: 1 }, md: { item: { grow: 0, shrink: 1 } }, container: { justify: 'between', alignItems: 'center', gap: 1 }, children: [_jsx(StyledAppHeaderSearchForm, { role: 'search', "aria-label": t('sitewide'), onSubmit: e => e.preventDefault(), children: _jsx(SearchInput, { ...restProps, ref: searchInputRef }) }), _jsx(Button, { variant: 'simple', icon: true, onClick: () => {
|
|
37
37
|
setShowSearchButton(true);
|
|
38
38
|
focusSearchBtn.current = true;
|
|
39
39
|
}, label: t('collapse_search'), children: _jsx(Icon, { name: 'times' }) })] })) : (_jsx(Button, { variant: 'simple', icon: true, onClick: () => setShowSearchButton(false), ref: searchButtonRef, label: t('expand_search'), children: _jsx(Icon, { name: 'search' }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppHeader.js","sourceRoot":"","sources":["../../../../src/components/AppShell/Header/AppHeader.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useCallback, useEffect, useState, useRef } from 'react';\nimport type { MouseEvent, FC, PropsWithoutRef, Dispatch, SetStateAction } from 'react';\n\nimport {\n ContextSwitcher,\n Flex,\n SearchInput,\n useBreakpoint,\n Button,\n Icon,\n useI18n,\n Tooltip,\n useElement,\n Avatar\n} from '@pega/cosmos-react-core';\nimport type { ForwardRefForwardPropsComponent, SearchInputProps } from '@pega/cosmos-react-core';\nimport AppShellOperator from '@pega/cosmos-react-core/lib/components/AppShell/Operator';\nimport {\n StyledAppHeaderSearchForm,\n StyledAppHeaderOperator\n} from '@pega/cosmos-react-core/lib/components/AppShell/AppHeader.styles';\n\nimport {\n StyledAppHeader,\n StyledTabs,\n StyledUtilsContainer,\n StyledBrandContainer,\n StyledAppHeaderSearch,\n StyledAppName,\n StyledAppVersion,\n StyledBrandButton,\n StyledBrandImage,\n StyledContext\n} from './AppHeader.styles';\nimport type { AppHeaderProps, LinkProps, UtilsProps } from './AppHeader.types';\nimport BranchButton from './BranchButton';\n\nconst Links: FC<{ links: LinkProps[] }> = ({ links }) => {\n const [currentTabId, setCurrentTabId] = useState(links[0].id);\n\n useEffect(() => {\n setCurrentTabId(links[0].id);\n }, [links]);\n\n const handleTabClick = useCallback(\n (id: string, e?: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n const newActiveTab = links.find(item => item.id === id);\n if (newActiveTab) {\n newActiveTab.onClick?.(id, e);\n setCurrentTabId(newActiveTab.id);\n }\n },\n [links]\n );\n\n return <StyledTabs tabs={links} currentTabId={currentTabId} onTabClick={handleTabClick} />;\n};\n\nconst AppHeaderSearch: FC<\n SearchInputProps & {\n showSearchButton: boolean;\n setShowSearchButton: Dispatch<SetStateAction<boolean>>;\n }\n> = ({ showSearchButton, setShowSearchButton, ...restProps }) => {\n const isMediumOrAbove = useBreakpoint('md');\n const t = useI18n();\n\n const searchInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n if (!showSearchButton && node) {\n node.focus();\n }\n },\n [showSearchButton]\n );\n const focusSearchBtn = useRef(false);\n const searchButtonRef = useCallback((node: HTMLButtonElement | null) => {\n if (node && focusSearchBtn.current) {\n node.focus();\n }\n }, []);\n\n return isMediumOrAbove || !showSearchButton ? (\n <Flex\n as={StyledAppHeaderSearch}\n item={{ shrink: 0, grow: 1 }}\n md={{ item: { grow: 0, shrink: 1 } }}\n container={{ justify: 'between', alignItems: 'center', gap: 1 }}\n >\n <StyledAppHeaderSearchForm\n role='search'\n aria-label={t('sitewide')}\n onSubmit={e => e.preventDefault()}\n isMediumOrAbove={isMediumOrAbove}\n >\n <SearchInput {...restProps} ref={searchInputRef} />\n </StyledAppHeaderSearchForm>\n <Button\n variant='simple'\n icon\n onClick={() => {\n setShowSearchButton(true);\n focusSearchBtn.current = true;\n }}\n label={t('collapse_search')}\n >\n <Icon name='times' />\n </Button>\n </Flex>\n ) : (\n <Button\n variant='simple'\n icon\n onClick={() => setShowSearchButton(false)}\n ref={searchButtonRef}\n label={t('expand_search')}\n >\n <Icon name='search' />\n </Button>\n );\n};\n\nconst Utils: FC<UtilsProps> = ({ operator, branch, action, appInfo }) => {\n const isMediumOrAbove = useBreakpoint('md');\n const isSmallOrAbove = useBreakpoint('sm');\n const [appInfoEl, setAppInfoEl] = useElement(null);\n\n return (\n <Flex\n container={{ justify: 'between', alignItems: 'center' }}\n md={{ container: { justify: 'end' } }}\n item={{ shrink: 1 }}\n as={StyledUtilsContainer}\n >\n {appInfo && (\n <Flex\n container={{ justify: 'between', alignItems: 'center', gap: 0.5 }}\n item={{ shrink: 1 }}\n ref={setAppInfoEl}\n >\n <Flex as={StyledAppName} item={{ shrink: 1 }}>\n {appInfo.name}\n </Flex>\n <StyledAppVersion>{appInfo.version}</StyledAppVersion>\n <Tooltip target={appInfoEl} hideDelay='none'>\n {`${appInfo.name} ${appInfo.version}`}\n </Tooltip>\n </Flex>\n )}\n <Flex container={{ alignItems: 'center' }}>\n {branch && <BranchButton {...branch} compact={isSmallOrAbove ? branch.compact : true} />}\n {action && (\n <Flex\n container={{ justify: 'between', alignItems: 'center', gap: 0.5 }}\n item={{ shrink: 0 }}\n as={Button}\n variant='secondary'\n icon={!isMediumOrAbove}\n label={isMediumOrAbove ? undefined : action.text}\n onClick={(e: MouseEvent<HTMLButtonElement>) => action.onClick?.(action.id, e)}\n disabled={action.disabled}\n >\n {action.icon && <Icon name={action.icon} />}\n {isMediumOrAbove && action.text}\n </Flex>\n )}\n </Flex>\n {isMediumOrAbove && (\n <AppShellOperator\n as={StyledAppHeaderOperator}\n actions={operator.actions}\n popover={{ placement: 'bottom-end' }}\n name={operator.name}\n >\n <Avatar {...operator.avatar} />\n </AppShellOperator>\n )}\n </Flex>\n );\n};\n\nconst AppHeader: ForwardRefForwardPropsComponent<AppHeaderProps> = forwardRef(function AppHeader(\n {\n contextSwitcher: { contexts, onContextClick, label: contextSwitcherLabel } = {},\n brand,\n utils,\n links\n }: PropsWithoutRef<AppHeaderProps>,\n ref: AppHeaderProps['ref']\n) {\n const selectedContext = contexts?.length > 1 ? contexts.find(ctx => ctx.selected)! : contexts[0];\n\n const isMediumOrAbove = useBreakpoint('md');\n const [showSearchButton, setShowSearchButton] = useState(true);\n\n useEffect(() => {\n if (isMediumOrAbove && !showSearchButton) {\n setShowSearchButton(true);\n }\n }, [isMediumOrAbove]);\n\n return (\n <Flex\n as={StyledAppHeader}\n container={{\n justify: 'between',\n alignItems: 'center',\n colGap: 2,\n wrap: 'wrap',\n pad: [0, 1]\n }}\n md={{ container: { wrap: 'nowrap' } }}\n ref={ref}\n >\n {showSearchButton && (\n <Flex\n as={StyledBrandContainer}\n container={{\n justify: 'between',\n alignItems: 'center',\n gap: 1\n }}\n item={{ shrink: 0, alignSelf: 'stretch' }}\n >\n {contexts && onContextClick && contexts.length > 1 && (\n <ContextSwitcher\n contexts={contexts}\n onContextClick={onContextClick}\n label={contextSwitcherLabel}\n />\n )}\n <Flex\n as={brand.onClick || brand.href ? StyledBrandButton : 'div'}\n variant='simple'\n container={{ alignItems: 'center', justify: 'between', gap: 2, pad: 1 }}\n aria-label={`${brand.label} - ${selectedContext.primary}`}\n onClick={brand.onClick}\n href={brand.href}\n >\n <Flex item={{ shrink: 0 }} as={StyledBrandImage} src={brand.logo} alt={brand.label} />\n <Flex container={{ justify: 'between', alignItems: 'center', gap: 1 }}>\n {selectedContext.visual}\n <StyledContext>{selectedContext.primary}</StyledContext>\n </Flex>\n </Flex>\n </Flex>\n )}\n {links && links.length > 0 && <Links links={links} />}\n\n <Flex\n container={{\n gap: 1,\n justify: 'center',\n alignItems: 'center'\n }}\n item={{ grow: showSearchButton ? 0 : 1 }}\n md={{ item: { grow: showSearchButton ? 1 : 0 } }}\n >\n {utils?.search && (\n <AppHeaderSearch\n {...utils.search}\n showSearchButton={showSearchButton}\n setShowSearchButton={setShowSearchButton}\n />\n )}\n {showSearchButton && !isMediumOrAbove && utils?.operator && (\n <AppShellOperator\n as={StyledAppHeaderOperator}\n actions={utils.operator.actions}\n popover={{ placement: 'bottom-start' }}\n name={utils.operator.name}\n >\n <Avatar {...utils.operator.avatar} />\n </AppShellOperator>\n )}\n </Flex>\n {utils && <Utils {...utils} />}\n </Flex>\n );\n});\n\nexport default AppHeader;\n"]}
|
|
1
|
+
{"version":3,"file":"AppHeader.js","sourceRoot":"","sources":["../../../../src/components/AppShell/Header/AppHeader.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useCallback, useEffect, useState, useRef } from 'react';\nimport type { MouseEvent, FC, PropsWithoutRef, Dispatch, SetStateAction } from 'react';\n\nimport {\n ContextSwitcher,\n Flex,\n SearchInput,\n useBreakpoint,\n Button,\n Icon,\n useI18n,\n Tooltip,\n useElement,\n Avatar\n} from '@pega/cosmos-react-core';\nimport type { ForwardRefForwardPropsComponent, SearchInputProps } from '@pega/cosmos-react-core';\nimport AppShellOperator from '@pega/cosmos-react-core/lib/components/AppShell/Operator';\nimport {\n StyledAppHeaderSearchForm,\n StyledAppHeaderOperator\n} from '@pega/cosmos-react-core/lib/components/AppShell/AppHeader.styles';\n\nimport {\n StyledAppHeader,\n StyledTabs,\n StyledUtilsContainer,\n StyledBrandContainer,\n StyledAppHeaderSearch,\n StyledAppName,\n StyledAppVersion,\n StyledBrandButton,\n StyledBrandImage,\n StyledContext\n} from './AppHeader.styles';\nimport type { AppHeaderProps, LinkProps, UtilsProps } from './AppHeader.types';\nimport BranchButton from './BranchButton';\n\nconst Links: FC<{ links: LinkProps[] }> = ({ links }) => {\n const [currentTabId, setCurrentTabId] = useState(links[0].id);\n\n useEffect(() => {\n setCurrentTabId(links[0].id);\n }, [links]);\n\n const handleTabClick = useCallback(\n (id: string, e?: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => {\n const newActiveTab = links.find(item => item.id === id);\n if (newActiveTab) {\n newActiveTab.onClick?.(id, e);\n setCurrentTabId(newActiveTab.id);\n }\n },\n [links]\n );\n\n return <StyledTabs tabs={links} currentTabId={currentTabId} onTabClick={handleTabClick} />;\n};\n\nconst AppHeaderSearch: FC<\n SearchInputProps & {\n showSearchButton: boolean;\n setShowSearchButton: Dispatch<SetStateAction<boolean>>;\n }\n> = ({ showSearchButton, setShowSearchButton, ...restProps }) => {\n const isMediumOrAbove = useBreakpoint('md');\n const t = useI18n();\n\n const searchInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n if (!showSearchButton && node) {\n node.focus();\n }\n },\n [showSearchButton]\n );\n const focusSearchBtn = useRef(false);\n const searchButtonRef = useCallback((node: HTMLButtonElement | null) => {\n if (node && focusSearchBtn.current) {\n node.focus();\n }\n }, []);\n\n return isMediumOrAbove || !showSearchButton ? (\n <Flex\n as={StyledAppHeaderSearch}\n item={{ shrink: 0, grow: 1 }}\n md={{ item: { grow: 0, shrink: 1 } }}\n container={{ justify: 'between', alignItems: 'center', gap: 1 }}\n >\n <StyledAppHeaderSearchForm\n role='search'\n aria-label={t('sitewide')}\n onSubmit={e => e.preventDefault()}\n >\n <SearchInput {...restProps} ref={searchInputRef} />\n </StyledAppHeaderSearchForm>\n <Button\n variant='simple'\n icon\n onClick={() => {\n setShowSearchButton(true);\n focusSearchBtn.current = true;\n }}\n label={t('collapse_search')}\n >\n <Icon name='times' />\n </Button>\n </Flex>\n ) : (\n <Button\n variant='simple'\n icon\n onClick={() => setShowSearchButton(false)}\n ref={searchButtonRef}\n label={t('expand_search')}\n >\n <Icon name='search' />\n </Button>\n );\n};\n\nconst Utils: FC<UtilsProps> = ({ operator, branch, action, appInfo }) => {\n const isMediumOrAbove = useBreakpoint('md');\n const isSmallOrAbove = useBreakpoint('sm');\n const [appInfoEl, setAppInfoEl] = useElement(null);\n\n return (\n <Flex\n container={{ justify: 'between', alignItems: 'center' }}\n md={{ container: { justify: 'end' } }}\n item={{ shrink: 1 }}\n as={StyledUtilsContainer}\n >\n {appInfo && (\n <Flex\n container={{ justify: 'between', alignItems: 'center', gap: 0.5 }}\n item={{ shrink: 1 }}\n ref={setAppInfoEl}\n >\n <Flex as={StyledAppName} item={{ shrink: 1 }}>\n {appInfo.name}\n </Flex>\n <StyledAppVersion>{appInfo.version}</StyledAppVersion>\n <Tooltip target={appInfoEl} hideDelay='none'>\n {`${appInfo.name} ${appInfo.version}`}\n </Tooltip>\n </Flex>\n )}\n <Flex container={{ alignItems: 'center' }}>\n {branch && <BranchButton {...branch} compact={isSmallOrAbove ? branch.compact : true} />}\n {action && (\n <Flex\n container={{ justify: 'between', alignItems: 'center', gap: 0.5 }}\n item={{ shrink: 0 }}\n as={Button}\n variant='secondary'\n icon={!isMediumOrAbove}\n label={isMediumOrAbove ? undefined : action.text}\n onClick={(e: MouseEvent<HTMLButtonElement>) => action.onClick?.(action.id, e)}\n disabled={action.disabled}\n >\n {action.icon && <Icon name={action.icon} />}\n {isMediumOrAbove && action.text}\n </Flex>\n )}\n </Flex>\n {isMediumOrAbove && (\n <AppShellOperator\n as={StyledAppHeaderOperator}\n actions={operator.actions}\n popover={{ placement: 'bottom-end' }}\n name={operator.name}\n >\n <Avatar {...operator.avatar} />\n </AppShellOperator>\n )}\n </Flex>\n );\n};\n\nconst AppHeader: ForwardRefForwardPropsComponent<AppHeaderProps> = forwardRef(function AppHeader(\n {\n contextSwitcher: { contexts, onContextClick, label: contextSwitcherLabel } = {},\n brand,\n utils,\n links\n }: PropsWithoutRef<AppHeaderProps>,\n ref: AppHeaderProps['ref']\n) {\n const selectedContext = contexts?.length > 1 ? contexts.find(ctx => ctx.selected)! : contexts[0];\n\n const isMediumOrAbove = useBreakpoint('md');\n const [showSearchButton, setShowSearchButton] = useState(true);\n\n useEffect(() => {\n if (isMediumOrAbove && !showSearchButton) {\n setShowSearchButton(true);\n }\n }, [isMediumOrAbove]);\n\n return (\n <Flex\n as={StyledAppHeader}\n container={{\n justify: 'between',\n alignItems: 'center',\n colGap: 2,\n wrap: 'wrap',\n pad: [0, 1]\n }}\n md={{ container: { wrap: 'nowrap' } }}\n ref={ref}\n >\n {showSearchButton && (\n <Flex\n as={StyledBrandContainer}\n container={{\n justify: 'between',\n alignItems: 'center',\n gap: 1\n }}\n item={{ shrink: 0, alignSelf: 'stretch' }}\n >\n {contexts && onContextClick && contexts.length > 1 && (\n <ContextSwitcher\n contexts={contexts}\n onContextClick={onContextClick}\n label={contextSwitcherLabel}\n />\n )}\n <Flex\n as={brand.onClick || brand.href ? StyledBrandButton : 'div'}\n variant='simple'\n container={{ alignItems: 'center', justify: 'between', gap: 2, pad: 1 }}\n aria-label={`${brand.label} - ${selectedContext.primary}`}\n onClick={brand.onClick}\n href={brand.href}\n >\n <Flex item={{ shrink: 0 }} as={StyledBrandImage} src={brand.logo} alt={brand.label} />\n <Flex container={{ justify: 'between', alignItems: 'center', gap: 1 }}>\n {selectedContext.visual}\n <StyledContext>{selectedContext.primary}</StyledContext>\n </Flex>\n </Flex>\n </Flex>\n )}\n {links && links.length > 0 && <Links links={links} />}\n\n <Flex\n container={{\n gap: 1,\n justify: 'center',\n alignItems: 'center'\n }}\n item={{ grow: showSearchButton ? 0 : 1 }}\n md={{ item: { grow: showSearchButton ? 1 : 0 } }}\n >\n {utils?.search && (\n <AppHeaderSearch\n {...utils.search}\n showSearchButton={showSearchButton}\n setShowSearchButton={setShowSearchButton}\n />\n )}\n {showSearchButton && !isMediumOrAbove && utils?.operator && (\n <AppShellOperator\n as={StyledAppHeaderOperator}\n actions={utils.operator.actions}\n popover={{ placement: 'bottom-start' }}\n name={utils.operator.name}\n >\n <Avatar {...utils.operator.avatar} />\n </AppShellOperator>\n )}\n </Flex>\n {utils && <Utils {...utils} />}\n </Flex>\n );\n});\n\nexport default AppHeader;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeEditor.d.ts","sourceRoot":"","sources":["../../../../src/components/ExpressionBuilder/CodeEditor/CodeEditor.tsx"],"names":[],"mappings":"AAIA,OAAO,oCAAoC,CAAC;AAC5C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"CodeEditor.d.ts","sourceRoot":"","sources":["../../../../src/components/ExpressionBuilder/CodeEditor/CodeEditor.tsx"],"names":[],"mappings":"AAIA,OAAO,oCAAoC,CAAC;AAC5C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,qCAAqC,CAAC;AA0B7C,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAG/E,OAAO,KAAK,EAEV,eAAe,EAIhB,MAAM,oBAAoB,CAAC;;;;AAk2B5B,wBAA0D"}
|
|
@@ -6,7 +6,7 @@ import 'codemirror/addon/hint/show-hint.js';
|
|
|
6
6
|
import 'codemirror/addon/edit/closebrackets';
|
|
7
7
|
import 'codemirror/addon/edit/matchbrackets';
|
|
8
8
|
import { Pass, showHint, defineMode, registerHelper } from 'codemirror';
|
|
9
|
-
import { useTheme, Popover, Text, UnorderedList, Flex, useI18n, useTestIds, withTestIds, useUID, debounce } from '@pega/cosmos-react-core';
|
|
9
|
+
import { useTheme, Popover, Text, UnorderedList, Flex, Button, Icon, useI18n, useTestIds, withTestIds, useUID, debounce, Actions } from '@pega/cosmos-react-core';
|
|
10
10
|
import { StyledFormFieldInfo } from '@pega/cosmos-react-core/lib/components/FormField/FormField';
|
|
11
11
|
import { StyledSuggestions, StyledCodeEditor, StyledPopover, StyledList, StyledWarnIcon } from './CodeEditor.styles';
|
|
12
12
|
import getCodeSuggestions from './getCodeSuggestions';
|
|
@@ -14,7 +14,8 @@ import { getEditorsTestIds } from './CodeEditor.test-ids';
|
|
|
14
14
|
import { lint as jsonLint } from './mode/jsonLinter';
|
|
15
15
|
const contextText = 'ex-context';
|
|
16
16
|
const commentText = 'ex-comment';
|
|
17
|
-
const
|
|
17
|
+
const javaScriptLanguages = ['json', 'javascript'];
|
|
18
|
+
const modesWithEclipseTheme = ['json', 'javascript', 'css'];
|
|
18
19
|
const additionalOperators = ['and', 'or', 'when', 'otherwise', 'isA', 'asA', 'define', 'isNone'];
|
|
19
20
|
defineMode('expression', (config, parserConfig) => {
|
|
20
21
|
const isSingleLine = parserConfig.isSingleLine;
|
|
@@ -121,7 +122,7 @@ defineMode('expression', (config, parserConfig) => {
|
|
|
121
122
|
}
|
|
122
123
|
};
|
|
123
124
|
});
|
|
124
|
-
const CodeEditor = forwardRef(({ testId, fetchSuggestions, autoCompleteTriggers, editorConfigProps, codeEditorHandle, defaultValue = '', loading = false, readOnly, isSingleLine = false, errors, onChange, onBlur, inLineErrors, 'aria-describedby': ariaDescribedBy, ...restProps }, ref) => {
|
|
125
|
+
const CodeEditor = forwardRef(({ testId, fetchSuggestions, autoCompleteTriggers, editorConfigProps, codeEditorHandle, defaultValue = '', value: controlledValue, loading = false, readOnly, isSingleLine = false, errors, onChange, onBlur, inLineErrors, 'aria-describedby': ariaDescribedBy, onFormat, actions, label, ...restProps }, ref) => {
|
|
125
126
|
const t = useI18n();
|
|
126
127
|
const [value, setCode] = useState(defaultValue);
|
|
127
128
|
const [showEditor, setShowEditor] = useState(false);
|
|
@@ -201,16 +202,62 @@ const CodeEditor = forwardRef(({ testId, fetchSuggestions, autoCompleteTriggers,
|
|
|
201
202
|
useEffect(() => {
|
|
202
203
|
onBlurRef.current = onBlur;
|
|
203
204
|
}, [onBlur]);
|
|
205
|
+
useEffect(() => {
|
|
206
|
+
if (typeof controlledValue === 'string') {
|
|
207
|
+
setCode(prevValue => (controlledValue !== prevValue ? controlledValue : prevValue));
|
|
208
|
+
}
|
|
209
|
+
}, [controlledValue]);
|
|
210
|
+
useEffect(() => {
|
|
211
|
+
if (!codeMirror)
|
|
212
|
+
return;
|
|
213
|
+
const refreshEditor = () => {
|
|
214
|
+
codeMirror.refresh();
|
|
215
|
+
};
|
|
216
|
+
let frameA = 0;
|
|
217
|
+
let frameB = 0;
|
|
218
|
+
const scheduleRefresh = () => {
|
|
219
|
+
cancelAnimationFrame(frameA);
|
|
220
|
+
cancelAnimationFrame(frameB);
|
|
221
|
+
frameA = requestAnimationFrame(() => {
|
|
222
|
+
refreshEditor();
|
|
223
|
+
frameB = requestAnimationFrame(refreshEditor);
|
|
224
|
+
});
|
|
225
|
+
};
|
|
226
|
+
scheduleRefresh();
|
|
227
|
+
const codeMirrorWrapper = codeMirror.getWrapperElement();
|
|
228
|
+
const resizeObserver = new ResizeObserver(entries => {
|
|
229
|
+
const [entry] = entries;
|
|
230
|
+
if (!entry)
|
|
231
|
+
return;
|
|
232
|
+
const { width, height } = entry.contentRect;
|
|
233
|
+
if (width > 0 && height > 0) {
|
|
234
|
+
scheduleRefresh();
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
resizeObserver.observe(codeMirrorWrapper);
|
|
238
|
+
return () => {
|
|
239
|
+
cancelAnimationFrame(frameA);
|
|
240
|
+
cancelAnimationFrame(frameB);
|
|
241
|
+
resizeObserver.disconnect();
|
|
242
|
+
};
|
|
243
|
+
}, [codeMirror]);
|
|
204
244
|
const onBlurHandler = (editor) => {
|
|
205
245
|
if (onBlurRef.current) {
|
|
206
246
|
onBlurRef.current(editor.getDoc().getValue());
|
|
207
247
|
}
|
|
208
248
|
};
|
|
209
249
|
const onBeforeChange = async (editor, _data, textvalue) => {
|
|
210
|
-
const
|
|
250
|
+
const normalizedTextValue = textvalue.replaceAll(/\r\n?/g, '\n');
|
|
251
|
+
const updatedTextValue = isSingleLine
|
|
252
|
+
? normalizedTextValue.replaceAll(/\n/g, '')
|
|
253
|
+
: normalizedTextValue;
|
|
211
254
|
setCode(updatedTextValue);
|
|
212
255
|
/** _data.origin is a flag from codemirror that tells from where the change was made in the code editor input */
|
|
213
256
|
onChange?.(updatedTextValue, errorHandler(updatedTextValue), _data.origin);
|
|
257
|
+
if (_data.origin === 'paste') {
|
|
258
|
+
// Recalculate layout/gutters right after paste so line indices render correctly.
|
|
259
|
+
requestAnimationFrame(() => editor.refresh());
|
|
260
|
+
}
|
|
214
261
|
const currentCursor = editor.getCursor();
|
|
215
262
|
const currentCharacter = editor
|
|
216
263
|
.getTokenAt(currentCursor)
|
|
@@ -442,11 +489,20 @@ const CodeEditor = forwardRef(({ testId, fetchSuggestions, autoCompleteTriggers,
|
|
|
442
489
|
};
|
|
443
490
|
useEffect(() => {
|
|
444
491
|
(async () => {
|
|
492
|
+
const mode = typeof editorConfigProps?.mode === 'string'
|
|
493
|
+
? editorConfigProps.mode
|
|
494
|
+
: editorConfigProps?.mode?.name;
|
|
445
495
|
if (editorConfigProps?.placeholder) {
|
|
446
496
|
await import('codemirror/addon/display/placeholder');
|
|
447
497
|
}
|
|
448
|
-
if (
|
|
498
|
+
if (mode && javaScriptLanguages.includes(mode)) {
|
|
449
499
|
await import('codemirror/mode/javascript/javascript');
|
|
500
|
+
}
|
|
501
|
+
if (mode === 'css') {
|
|
502
|
+
await import('codemirror/mode/css/css');
|
|
503
|
+
await import('codemirror/addon/hint/css-hint');
|
|
504
|
+
}
|
|
505
|
+
if (mode && modesWithEclipseTheme.includes(mode)) {
|
|
450
506
|
await import('codemirror/theme/eclipse.css');
|
|
451
507
|
}
|
|
452
508
|
if (editorConfigProps?.foldGutter && !isSingleLine) {
|
|
@@ -459,7 +515,7 @@ const CodeEditor = forwardRef(({ testId, fetchSuggestions, autoCompleteTriggers,
|
|
|
459
515
|
if (editorConfigProps?.lint) {
|
|
460
516
|
await import('codemirror/addon/lint/lint.css');
|
|
461
517
|
await import('codemirror/addon/lint/lint');
|
|
462
|
-
if (
|
|
518
|
+
if (mode === 'json') {
|
|
463
519
|
await import('codemirror/addon/lint/json-lint');
|
|
464
520
|
registerHelper('lint', 'json', jsonLint);
|
|
465
521
|
}
|
|
@@ -468,9 +524,13 @@ const CodeEditor = forwardRef(({ testId, fetchSuggestions, autoCompleteTriggers,
|
|
|
468
524
|
})();
|
|
469
525
|
}, [editorConfigProps]);
|
|
470
526
|
const updatedEditorConfig = useMemo(() => {
|
|
527
|
+
const modeName = typeof editorConfigProps?.mode === 'string'
|
|
528
|
+
? editorConfigProps.mode
|
|
529
|
+
: editorConfigProps?.mode?.name;
|
|
471
530
|
const mode = extendModeWithSingleLine(editorConfigProps?.mode || 'expression', isSingleLine);
|
|
472
531
|
return {
|
|
473
532
|
...editorConfigProps,
|
|
533
|
+
readOnly: readOnly ? 'nocursor' : false,
|
|
474
534
|
lineWrapping: !isSingleLine,
|
|
475
535
|
smartIndent: true,
|
|
476
536
|
autoCloseBrackets: true,
|
|
@@ -487,7 +547,7 @@ const CodeEditor = forwardRef(({ testId, fetchSuggestions, autoCompleteTriggers,
|
|
|
487
547
|
...(isSingleLine ? { Enter: () => { } } : {})
|
|
488
548
|
},
|
|
489
549
|
mode,
|
|
490
|
-
...(
|
|
550
|
+
...(modeName && modesWithEclipseTheme.includes(modeName) ? { theme: 'eclipse' } : {}),
|
|
491
551
|
...(editorConfigProps?.foldGutter && !isSingleLine
|
|
492
552
|
? {
|
|
493
553
|
foldGutter: true,
|
|
@@ -501,14 +561,14 @@ const CodeEditor = forwardRef(({ testId, fetchSuggestions, autoCompleteTriggers,
|
|
|
501
561
|
})()
|
|
502
562
|
}
|
|
503
563
|
: {}),
|
|
504
|
-
...(
|
|
564
|
+
...(modeName === 'json'
|
|
505
565
|
? {
|
|
506
566
|
mode: 'application/json',
|
|
507
|
-
lint: editorConfigProps
|
|
567
|
+
lint: editorConfigProps?.lint
|
|
508
568
|
}
|
|
509
569
|
: {})
|
|
510
570
|
};
|
|
511
|
-
}, [isSingleLine, editorConfigProps]);
|
|
571
|
+
}, [isSingleLine, editorConfigProps, readOnly]);
|
|
512
572
|
const handlePaste = (editor, event) => {
|
|
513
573
|
if (isSingleLine) {
|
|
514
574
|
const doc = editor.getDoc();
|
|
@@ -564,12 +624,14 @@ const CodeEditor = forwardRef(({ testId, fetchSuggestions, autoCompleteTriggers,
|
|
|
564
624
|
textArea.removeAttribute('aria-describedby');
|
|
565
625
|
}
|
|
566
626
|
}, [codeMirror, errors, ariaDescribedBy]);
|
|
627
|
+
const showToolbar = !!(onFormat || actions || label);
|
|
567
628
|
return (_jsxs(_Fragment, { children: [_jsx(StyledSuggestions, { isLoading: loading, suggestions: suggestions, theme: theme }), _jsxs(StyledCodeEditor, { ...restProps, "data-testid": testIds.root, container: {
|
|
568
629
|
direction: 'column',
|
|
569
|
-
justify: '
|
|
630
|
+
justify: 'start',
|
|
631
|
+
gap: 1
|
|
570
632
|
}, item: {
|
|
571
633
|
grow: 1
|
|
572
|
-
}, ref: ref, errors: errors, readOnly: readOnly, isLoading: loading, suggestions: suggestions, isSingleLine: isSingleLine, editorConfigProps: updatedEditorConfig, children: [showEditor && (_jsx(ReactCodeMirror, { value: value, onBeforeChange: onBeforeChange, onChange: onChangeMirror, options: updatedEditorConfig, editorDidMount: editor => {
|
|
634
|
+
}, ref: ref, errors: errors, readOnly: readOnly, isLoading: loading, suggestions: suggestions, isSingleLine: isSingleLine, editorConfigProps: updatedEditorConfig, children: [showToolbar && (_jsxs(Flex, { container: { justify: 'between', alignItems: 'center', gap: 0.5 }, item: { shrink: 0 }, children: [label && (_jsx(Text, { as: 'span', variant: 'h4', children: label })), (onFormat || actions) && (_jsxs("div", { children: [onFormat && (_jsx(Button, { variant: 'simple', icon: true, onClick: () => onFormat(), disabled: readOnly || !value.trim(), label: t('format'), children: _jsx(Icon, { name: 'expression', set: 'streamline' }) })), actions && _jsx(Actions, { items: actions, iconOnly: true })] }))] })), showEditor && (_jsx(ReactCodeMirror, { value: value, onBeforeChange: onBeforeChange, onChange: onChangeMirror, options: updatedEditorConfig, editorDidMount: editor => {
|
|
573
635
|
editor.setSize('100%', '100%');
|
|
574
636
|
setCodeMirror(editor);
|
|
575
637
|
editorRef.current = editor;
|
|
@@ -578,7 +640,8 @@ const CodeEditor = forwardRef(({ testId, fetchSuggestions, autoCompleteTriggers,
|
|
|
578
640
|
if (onBlur) {
|
|
579
641
|
onBlurHandler(editor);
|
|
580
642
|
}
|
|
581
|
-
}, onFocus:
|
|
643
|
+
}, onFocus: editor => {
|
|
644
|
+
editor.refresh();
|
|
582
645
|
setIsFocused(true);
|
|
583
646
|
} })), popoverInfo.errorMessages.length > 0 && popoverInfo.targetElement !== null && (_jsx(Popover, { as: StyledPopover, show: show, target: popoverInfo.targetElement, placement: 'bottom-start', "data-testid": testIds.errorPopover, children: _jsxs(Flex, { container: { direction: 'column', gap: 1 }, children: [_jsxs(Flex, { container: { gap: 1 }, children: [_jsx(StyledWarnIcon, { name: 'warn-solid' }), _jsx(Text, { variant: 'h4', children: t('errors', [], {
|
|
584
647
|
count: popoverInfo.errorMessages.length === 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeEditor.js","sourceRoot":"","sources":["../../../../src/components/ExpressionBuilder/CodeEditor/CodeEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["// cspell:words unfocus\nimport { forwardRef, useRef, useState, useEffect, useImperativeHandle, useMemo } from 'react';\nimport type { PropsWithoutRef } from 'react';\nimport { Controlled as ReactCodeMirror } from 'react-codemirror2';\nimport 'codemirror/addon/hint/show-hint.js';\nimport 'codemirror/addon/edit/closebrackets';\nimport 'codemirror/addon/edit/matchbrackets';\nimport { Pass, showHint, defineMode, registerHelper } from 'codemirror';\nimport type {\n Editor,\n Position,\n EditorChange,\n EditorConfiguration,\n MarkerRange,\n TextMarker\n} from 'codemirror';\n\nimport {\n useTheme,\n Popover,\n Text,\n UnorderedList,\n Flex,\n useI18n,\n useTestIds,\n withTestIds,\n useUID,\n debounce\n} from '@pega/cosmos-react-core';\nimport type { ForwardRefForwardPropsComponent } from '@pega/cosmos-react-core';\nimport { StyledFormFieldInfo } from '@pega/cosmos-react-core/lib/components/FormField/FormField';\n\nimport type {\n AutoCompleteTriggerChar,\n CodeEditorProps,\n EditorHintOptions,\n SuggestionType,\n CustomPositionProps\n} from './CodeEditor.types';\nimport {\n StyledSuggestions,\n StyledCodeEditor,\n StyledPopover,\n StyledList,\n StyledWarnIcon\n} from './CodeEditor.styles';\nimport getCodeSuggestions from './getCodeSuggestions';\nimport { getEditorsTestIds } from './CodeEditor.test-ids';\nimport { lint as jsonLint } from './mode/jsonLinter';\n\nconst contextText = 'ex-context';\nconst commentText = 'ex-comment';\nconst languages = ['json', 'javascript'];\n\nconst additionalOperators = ['and', 'or', 'when', 'otherwise', 'isA', 'asA', 'define', 'isNone'];\n\ninterface ExpressionModeState {\n inString: false | '\"' | \"'\";\n inMultiLineComment: boolean;\n}\n\ndefineMode('expression', (config, parserConfig) => {\n const isSingleLine = parserConfig.isSingleLine;\n\n const tokens = [\n // Below regex is used to identify the context\n { token: /\\w+@/, style: contextText },\n // Below regex is used to identify the RuleType\n { token: /\\w+:/, style: contextText },\n // Below regex is used to identify the RuleName\n { token: /\\w+[(]/, style: 'ex-ruleName' },\n // Below regex is used to identify the delimeters\n { token: /[:.(),[\\]]/, style: 'ex-delimeter' },\n // Below regex is used to identify the operators\n { token: /[-+\\\\/*=<>@#]+/, style: 'ex-operator' },\n // Below regex is used to identify the spaces\n { token: / /, style: 'ex-space' }\n ];\n\n return {\n startState(): ExpressionModeState {\n return { inString: false, inMultiLineComment: false };\n },\n token(stream, state: ExpressionModeState) {\n /** Additional operator highlighting */\n for (let i = 0; i < additionalOperators.length; i += 1) {\n const keyword = additionalOperators[i];\n const len = keyword.length;\n const currentPos = stream.pos;\n\n if (stream.match(keyword, true)) {\n const before = currentPos === 0 ? null : stream.string.charAt(currentPos - 1);\n const after = stream.eol() ? null : stream.peek();\n\n const isWordChar = (char: string) => char.includes(' ');\n\n if ((!before || isWordChar(before)) && (!after || isWordChar(after))) {\n return 'ex-additional-operators';\n }\n stream.backUp(len);\n }\n }\n\n /* Highlights single and multi line comments - only if not inside a string */\n if (!state.inString) {\n if (state.inMultiLineComment && !isSingleLine) {\n if (stream.match(/.*?\\*\\//)) {\n state.inMultiLineComment = false;\n } else {\n stream.skipToEnd();\n }\n return commentText;\n }\n\n if (stream.match(/\\/\\*/) && !isSingleLine) {\n state.inMultiLineComment = true;\n return commentText;\n }\n\n if (stream.match(/\\/\\//) && !isSingleLine) {\n stream.skipToEnd();\n return commentText;\n }\n }\n\n // Used to identify the constants in the expression\n if (!state.inMultiLineComment) {\n // Check if we're starting a string\n if (!state.inString) {\n const nextChar = stream.peek();\n if (nextChar === \"'\" || nextChar === '\"') {\n state.inString = nextChar; // Store which quote type we're in\n stream.next(); // Skip opening quote\n }\n }\n\n // Process string content\n if (state.inString) {\n const quoteChar = state.inString;\n let escaped = false;\n\n while (!stream.eol()) {\n const char = stream.next();\n\n if (escaped) {\n // Previous char was backslash, this char is escaped\n escaped = false;\n } else if (char === '\\\\') {\n // Start escape sequence\n escaped = true;\n } else if (char === quoteChar) {\n // Found unescaped closing quote\n state.inString = false;\n return quoteChar === '\"' ? 'ex-constant' : contextText;\n }\n }\n\n // Reached end of line while still in string\n return quoteChar === '\"' ? 'ex-constant' : contextText;\n }\n\n // Used to match the regex in the expression\n for (const element of tokens) {\n const match = stream.match(element.token, false);\n if (match) {\n if (stream.pos === stream.start) {\n stream.next();\n }\n return element.style;\n }\n }\n }\n stream.next();\n return null;\n }\n };\n});\n\nconst CodeEditor: ForwardRefForwardPropsComponent<CodeEditorProps> = forwardRef(\n (\n {\n testId,\n fetchSuggestions,\n autoCompleteTriggers,\n editorConfigProps,\n codeEditorHandle,\n defaultValue = '',\n loading = false,\n readOnly,\n isSingleLine = false,\n errors,\n onChange,\n onBlur,\n inLineErrors,\n 'aria-describedby': ariaDescribedBy,\n ...restProps\n }: PropsWithoutRef<CodeEditorProps>,\n ref: CodeEditorProps['ref']\n ) => {\n const t = useI18n();\n const [value, setCode] = useState<string>(defaultValue);\n const [showEditor, setShowEditor] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [suggestions, setSuggestions] = useState<SuggestionType[]>([]);\n const [codeMirror, setCodeMirror] = useState<Editor | null>(null);\n const [suggestionTrigger, setSuggestionTrigger] = useState<{\n character: AutoCompleteTriggerChar;\n cursorPosition: Position;\n } | null>(null);\n const [popover, showPopover] = useState(false);\n const mounted = useRef(false);\n const testIds = useTestIds(testId, getEditorsTestIds);\n const editorRef = useRef<Editor | null>(null);\n const uId = useUID();\n const errorDescId = `${uId}-description`;\n const onBlurRef = useRef(onBlur);\n const hasSuggestionRef = useRef(true);\n const isFetchingRef = useRef(false);\n const fetchAbortRef = useRef<AbortController | null>(null);\n const suggestionTriggerRef = useRef<{\n character: AutoCompleteTriggerChar;\n cursorPosition: Position;\n } | null>(null);\n\n const isReplacingHintRef = useRef(false);\n const debouncedShowHintRef = useRef(\n debounce((codeEditor: Editor, hintOptions: EditorHintOptions) => {\n isReplacingHintRef.current = true;\n try {\n codeEditor.closeHint();\n showHint(codeEditor, getCodeSuggestions, hintOptions);\n } finally {\n isReplacingHintRef.current = false;\n }\n }, 200)\n );\n const theme = useTheme();\n\n useImperativeHandle(\n codeEditorHandle,\n () => ({\n insertText: (\n text: string,\n resetContent?: boolean,\n customPosition?: CustomPositionProps\n ) => {\n if (editorRef.current) {\n if (editorRef.current.getSelection()) {\n editorRef.current.replaceSelection(text);\n } else if (customPosition?.start && customPosition?.end) {\n editorRef.current.replaceRange(\n text,\n { ...customPosition.start },\n { ...customPosition.end }\n );\n } else {\n const cur: Position = editorRef.current.getCursor();\n const doc = editorRef.current.getDoc();\n const lastLine = doc.lastLine(); // Get the index of the last line\n const lastCharIndex = doc.getLine(lastLine).length;\n editorRef.current.replaceRange(\n text,\n resetContent ? { ch: lastCharIndex, line: lastLine } : cur,\n resetContent ? { ch: 0, line: 0 } : undefined\n );\n }\n }\n },\n getValue: () => {\n return editorRef.current?.getValue();\n }\n }),\n []\n );\n\n const autoComplete = (codeEditor: Editor) => {\n const hintOptions = {\n completeSingle: false,\n completeOnSingleClick: true,\n closeOnUnfocus: true,\n suggestions,\n loading: loading || isFetchingRef.current,\n triggerCharacterCursorPos: suggestionTrigger?.cursorPosition,\n theme\n };\n\n debouncedShowHintRef.current(codeEditor, hintOptions);\n };\n\n const errorHandler = (val: string) => {\n if (!editorConfigProps?.lint) return;\n const mode = editorConfigProps?.mode;\n switch (mode) {\n case 'json':\n return jsonLint(val);\n case 'expression':\n default:\n return undefined;\n }\n };\n\n useEffect(() => {\n onBlurRef.current = onBlur;\n }, [onBlur]);\n\n const onBlurHandler = (editor: Editor) => {\n if (onBlurRef.current) {\n onBlurRef.current(editor.getDoc().getValue());\n }\n };\n\n const onBeforeChange = async (editor: Editor, _data: EditorChange, textvalue: string) => {\n const updatedTextValue = isSingleLine ? textvalue.replaceAll(/\\n/g, '') : textvalue;\n setCode(updatedTextValue);\n /** _data.origin is a flag from codemirror that tells from where the change was made in the code editor input */\n onChange?.(updatedTextValue, errorHandler(updatedTextValue), _data.origin);\n const currentCursor = editor.getCursor();\n const currentCharacter = editor\n .getTokenAt(currentCursor)\n .string.trim() as AutoCompleteTriggerChar;\n let newSuggestions: SuggestionType[] = [];\n\n if (autoCompleteTriggers?.includes(currentCharacter) && fetchSuggestions) {\n fetchAbortRef.current?.abort();\n const abortController = new AbortController();\n fetchAbortRef.current = abortController;\n\n isFetchingRef.current = true;\n suggestionTriggerRef.current = {\n character: currentCharacter,\n cursorPosition: currentCursor\n };\n setSuggestionTrigger({\n character: currentCharacter,\n cursorPosition: currentCursor\n });\n setSuggestions([]);\n let suggestionData;\n try {\n suggestionData = await fetchSuggestions(currentCharacter, {\n line: currentCursor.line,\n ch: currentCursor.ch\n });\n } catch {\n isFetchingRef.current = false;\n fetchAbortRef.current = null;\n return;\n }\n\n if (abortController.signal.aborted) {\n return;\n }\n\n isFetchingRef.current = false;\n fetchAbortRef.current = null;\n\n if (suggestionData === undefined) {\n hasSuggestionRef.current = false;\n suggestionTriggerRef.current = null;\n setSuggestionTrigger(null);\n return;\n }\n\n hasSuggestionRef.current = true;\n newSuggestions = [...suggestionData];\n if (mounted.current) {\n setSuggestions(newSuggestions);\n }\n }\n };\n\n const onChangeMirror = (editor: Editor) => {\n const trigger = suggestionTriggerRef.current;\n if (!trigger) return;\n const line = editor.getLine(trigger.cursorPosition.line);\n if (line?.[trigger.cursorPosition.ch - 1] !== trigger.character) {\n debouncedShowHintRef.current.cancel();\n fetchAbortRef.current?.abort();\n isFetchingRef.current = false;\n fetchAbortRef.current = null;\n suggestionTriggerRef.current = null;\n setSuggestionTrigger(null);\n setSuggestions([]);\n editor.closeHint();\n showPopover(false);\n }\n };\n\n useEffect(() => {\n if (!popover) {\n return;\n }\n const isSuggestionTriggerPresent =\n suggestionTrigger &&\n codeMirror\n ?.getTokenAt(suggestionTrigger.cursorPosition)\n .string.includes(suggestionTrigger.character);\n\n if (!isSuggestionTriggerPresent) {\n codeMirror?.closeHint();\n showPopover(false);\n setSuggestionTrigger(null);\n }\n }, [onBeforeChange]);\n\n useEffect(() => {\n if (codeMirror && isFocused && hasSuggestionRef.current && suggestionTrigger) {\n autoComplete(codeMirror);\n showPopover(true);\n } else {\n codeMirror?.closeHint();\n setSuggestionTrigger(null);\n showPopover(false);\n }\n }, [suggestions, loading, suggestionTrigger, codeMirror]);\n\n // endCompletion fires whenever CodeMirror closes the hint widget for any reason:\n // clicking outside, pressing Escape, or selecting an item. Clear trigger state\n // so the useEffect above does not immediately re-open the hint.\n useEffect(() => {\n if (!codeMirror) return;\n const handleEndCompletion = () => {\n // Ignore endCompletion fired by showHint replacing an existing hint widget\n if (isReplacingHintRef.current) return;\n suggestionTriggerRef.current = null;\n setSuggestionTrigger(null);\n setSuggestions([]);\n showPopover(false);\n };\n codeMirror.on('endCompletion', handleEndCompletion);\n return () => {\n codeMirror.off('endCompletion', handleEndCompletion);\n };\n }, [codeMirror]);\n\n const [popoverInfo, setPopoverInfo] = useState<{\n targetElement: Element | null;\n errorMessages: string[];\n }>({ targetElement: null, errorMessages: [] });\n\n const [show, setShow] = useState(false);\n const [errorMapping, setErrorMapping] = useState<string[][]>([]);\n const [textMarkerList, setTextMarkerList] = useState<TextMarker<MarkerRange>[]>([]);\n\n const removeInLineErrors = () => {\n if (textMarkerList.length) {\n textMarkerList.forEach(item => item.clear());\n }\n };\n\n useEffect(() => {\n removeInLineErrors();\n if (inLineErrors?.length && codeMirror) {\n const markerList: TextMarker<MarkerRange>[] = [];\n const errorMessageMap = inLineErrors?.map(({ start, end, messages }, index) => {\n if (messages.length) {\n markerList.push(\n codeMirror.markText(start, end, {\n className: `cm-ex-underline-error error-${index}`\n })\n );\n return messages;\n }\n return [];\n });\n setTextMarkerList(markerList);\n setErrorMapping(errorMessageMap);\n } else {\n setErrorMapping([]);\n }\n }, [inLineErrors, codeMirror]);\n\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n fetchAbortRef.current?.abort();\n debouncedShowHintRef.current.cancel();\n editorRef.current?.closeHint();\n };\n }, []);\n\n const getErrors = (target: Element) => {\n const errorMessages: string[] = [];\n if (target) {\n errorMapping.forEach((item, index) => {\n if (target.classList.contains(`error-${index}`)) {\n errorMessages.push(...item);\n }\n });\n }\n\n return errorMessages;\n };\n\n const onMouseMove = (event: Event | null, type?: string) => {\n if (codeMirror && errorMapping.length) {\n let target: Element | null;\n\n if (type === 'cursor') {\n const coords = codeMirror.getCursor();\n const charCoords = codeMirror.charCoords(coords, 'window');\n target = document.elementFromPoint(charCoords.left, charCoords.top);\n } else {\n target = event?.target instanceof Element ? event.target : null;\n }\n\n if (target) {\n const errorMessages = getErrors(target);\n if (errorMessages.length) {\n setPopoverInfo(() => {\n return {\n targetElement: target,\n errorMessages\n };\n });\n setShow(true);\n } else {\n setShow(false);\n }\n }\n }\n };\n\n const onMouseLeave = () => {\n setShow(false);\n };\n\n const hidePopover = (e: KeyboardEvent) => {\n if (e.shiftKey && (e.metaKey || e.ctrlKey) && e.key === ' ') {\n onMouseMove(null, 'cursor');\n } else {\n setShow(false);\n }\n };\n\n useEffect(() => {\n if (codeMirror && inLineErrors?.length && errorMapping.length) {\n const codeMirrorWrapper = codeMirror.getWrapperElement();\n\n codeMirrorWrapper.addEventListener('keydown', hidePopover);\n codeMirrorWrapper.addEventListener('mousedown', onMouseLeave);\n\n const elementsWithClassName = Array.from(\n codeMirrorWrapper.getElementsByClassName('cm-ex-underline-error')\n );\n\n elementsWithClassName.forEach(element => {\n element.addEventListener('mouseenter', onMouseMove);\n element.addEventListener('mouseleave', onMouseLeave);\n });\n\n return () => {\n codeMirrorWrapper.removeEventListener('keydown', hidePopover);\n codeMirrorWrapper.removeEventListener('mousedown', onMouseLeave);\n\n elementsWithClassName.forEach(element => {\n element.removeEventListener('mouseenter', onMouseMove);\n element.removeEventListener('mouseleave', onMouseLeave);\n });\n };\n }\n return undefined;\n }, [value, inLineErrors, errorMapping, codeMirror]);\n\n const extendModeWithSingleLine = (\n mode: EditorConfiguration['mode'],\n singleLineEditor: boolean\n ) => {\n if (typeof mode === 'string' || (mode && typeof mode.name === 'string')) {\n return {\n name: typeof mode === 'string' ? mode : mode.name,\n isSingleLine: singleLineEditor\n };\n }\n return mode;\n };\n\n useEffect(() => {\n (async () => {\n if (editorConfigProps?.placeholder) {\n await import('codemirror/addon/display/placeholder');\n }\n\n if (languages.includes(editorConfigProps?.mode as string)) {\n await import('codemirror/mode/javascript/javascript');\n await import('codemirror/theme/eclipse.css');\n }\n\n if (editorConfigProps?.foldGutter && !isSingleLine) {\n await import('codemirror/addon/fold/foldcode');\n await import('codemirror/addon/fold/foldgutter');\n await import('codemirror/addon/fold/brace-fold');\n await import('codemirror/addon/fold/comment-fold');\n await import('codemirror/addon/fold/foldgutter.css');\n }\n\n if (editorConfigProps?.lint) {\n await import('codemirror/addon/lint/lint.css');\n await import('codemirror/addon/lint/lint');\n\n if (editorConfigProps.mode === 'json') {\n await import('codemirror/addon/lint/json-lint');\n registerHelper('lint', 'json', jsonLint);\n }\n }\n setShowEditor(true);\n })();\n }, [editorConfigProps]);\n\n const updatedEditorConfig: EditorConfiguration = useMemo(() => {\n const mode = extendModeWithSingleLine(editorConfigProps?.mode || 'expression', isSingleLine);\n return {\n ...editorConfigProps,\n lineWrapping: !isSingleLine,\n smartIndent: true,\n autoCloseBrackets: true,\n matchBrackets: true,\n lineNumbers: !isSingleLine && editorConfigProps?.lineNumbers,\n placeholder: editorConfigProps?.placeholder,\n extraKeys: {\n /** default tab and shift tab behavior\n * https://codemirror.net/5/\n * https://discuss.codemirror.net/t/does-tab-key-work-in-codemirror-6/2705\n */\n Tab: isSingleLine ? false : () => Pass,\n 'Shift-Tab': isSingleLine ? false : () => Pass,\n ...(isSingleLine ? { Enter: () => {} } : {})\n },\n mode,\n ...(languages.includes(editorConfigProps?.mode as string) ? { theme: 'eclipse' } : {}),\n ...(editorConfigProps?.foldGutter && !isSingleLine\n ? {\n foldGutter: true,\n gutters: (() => {\n const guttersArr: string[] = [];\n if (editorConfigProps?.lint) guttersArr.push('CodeMirror-lint-markers');\n if (editorConfigProps?.lineNumbers) guttersArr.push('CodeMirror-linenumbers');\n return [...guttersArr, 'CodeMirror-foldgutter'];\n })()\n }\n : {}),\n ...(editorConfigProps?.mode === 'json'\n ? {\n mode: 'application/json',\n lint: editorConfigProps.lint\n }\n : {})\n };\n }, [isSingleLine, editorConfigProps]);\n\n const handlePaste = (editor: Editor, event: ClipboardEvent) => {\n if (isSingleLine) {\n const doc = editor.getDoc();\n const pastedContent = event.clipboardData?.getData('text/plain').trim();\n const singleLineContent = pastedContent?.replace(/\\r?\\n|\\r/g, ' ') || '';\n\n if (doc && doc.getSelection()) {\n doc.replaceSelection(singleLineContent);\n } else {\n const cursor: Position = doc.getCursor();\n doc.replaceRange(singleLineContent, cursor);\n }\n const cursor: Position = doc.getCursor();\n doc.setCursor(cursor);\n event.preventDefault();\n }\n };\n\n useEffect(() => {\n const editor = editorRef.current;\n if (editor && isSingleLine) {\n editor.on('paste', handlePaste);\n }\n return () => {\n if (editor) {\n editor.off('paste', handlePaste);\n }\n };\n }, [isSingleLine]);\n\n useEffect(() => {\n const textArea = codeMirror?.getInputField();\n if (!textArea) return;\n\n let describedBy = textArea.getAttribute('aria-describedby') || '';\n const ids = new Set(describedBy.split(' ').filter(item => item));\n\n if (ariaDescribedBy && !ids.has(ariaDescribedBy)) {\n ids.add(ariaDescribedBy);\n }\n\n if (errors && !ids.has(errorDescId)) {\n ids.add(errorDescId);\n } else if (!errors && ids.has(errorDescId)) {\n ids.delete(errorDescId);\n }\n\n if (!ariaDescribedBy) {\n describedBy = ids.has(errorDescId) ? errorDescId : '';\n } else describedBy = Array.from(ids).join(' ').trim();\n\n if (describedBy) {\n textArea.setAttribute('aria-describedby', describedBy);\n } else {\n textArea.removeAttribute('aria-describedby');\n }\n }, [codeMirror, errors, ariaDescribedBy]);\n\n return (\n <>\n <StyledSuggestions isLoading={loading} suggestions={suggestions} theme={theme} />\n <StyledCodeEditor\n {...restProps}\n data-testid={testIds.root}\n container={{\n direction: 'column',\n justify: 'between'\n }}\n item={{\n grow: 1\n }}\n ref={ref}\n errors={errors}\n readOnly={readOnly}\n isLoading={loading}\n suggestions={suggestions}\n isSingleLine={isSingleLine}\n editorConfigProps={updatedEditorConfig}\n >\n {showEditor && (\n <ReactCodeMirror\n value={value}\n onBeforeChange={onBeforeChange}\n onChange={onChangeMirror}\n options={updatedEditorConfig}\n editorDidMount={editor => {\n editor.setSize('100%', '100%');\n setCodeMirror(editor);\n editorRef.current = editor;\n }}\n onBlur={editor => {\n setIsFocused(false);\n if (onBlur) {\n onBlurHandler(editor);\n }\n }}\n onFocus={() => {\n setIsFocused(true);\n }}\n />\n )}\n {popoverInfo.errorMessages.length > 0 && popoverInfo.targetElement !== null && (\n <Popover\n as={StyledPopover}\n show={show}\n target={popoverInfo.targetElement}\n placement='bottom-start'\n data-testid={testIds.errorPopover}\n >\n <Flex container={{ direction: 'column', gap: 1 }}>\n <Flex container={{ gap: 1 }}>\n <StyledWarnIcon name='warn-solid' />\n <Text variant='h4'>\n {t('errors', [], {\n count:\n popoverInfo.errorMessages.length === 1\n ? 1\n : // Using NaN to always select \"other\" pluralization form\n NaN\n })}\n </Text>\n </Flex>\n {popoverInfo.errorMessages.length > 1 ? (\n <UnorderedList as={StyledList} items={popoverInfo.errorMessages} />\n ) : (\n <Text>{popoverInfo.errorMessages}</Text>\n )}\n </Flex>\n </Popover>\n )}\n {errors && (\n <StyledFormFieldInfo id={errorDescId} status='error' data-testid={testIds.errorMessage}>\n {errors}\n </StyledFormFieldInfo>\n )}\n </StyledCodeEditor>\n </>\n );\n }\n);\n\nexport default withTestIds(CodeEditor, getEditorsTestIds);\n"]}
|
|
1
|
+
{"version":3,"file":"CodeEditor.js","sourceRoot":"","sources":["../../../../src/components/ExpressionBuilder/CodeEditor/CodeEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["// cspell:words unfocus\nimport { forwardRef, useRef, useState, useEffect, useImperativeHandle, useMemo } from 'react';\nimport type { PropsWithoutRef } from 'react';\nimport { Controlled as ReactCodeMirror } from 'react-codemirror2';\nimport 'codemirror/addon/hint/show-hint.js';\nimport 'codemirror/addon/edit/closebrackets';\nimport 'codemirror/addon/edit/matchbrackets';\nimport { Pass, showHint, defineMode, registerHelper } from 'codemirror';\nimport type {\n Editor,\n Position,\n EditorChange,\n EditorConfiguration,\n MarkerRange,\n TextMarker\n} from 'codemirror';\n\nimport {\n useTheme,\n Popover,\n Text,\n UnorderedList,\n Flex,\n Button,\n Icon,\n useI18n,\n useTestIds,\n withTestIds,\n useUID,\n debounce,\n Actions\n} from '@pega/cosmos-react-core';\nimport type { ForwardRefForwardPropsComponent } from '@pega/cosmos-react-core';\nimport { StyledFormFieldInfo } from '@pega/cosmos-react-core/lib/components/FormField/FormField';\n\nimport type {\n AutoCompleteTriggerChar,\n CodeEditorProps,\n EditorHintOptions,\n SuggestionType,\n CustomPositionProps\n} from './CodeEditor.types';\nimport {\n StyledSuggestions,\n StyledCodeEditor,\n StyledPopover,\n StyledList,\n StyledWarnIcon\n} from './CodeEditor.styles';\nimport getCodeSuggestions from './getCodeSuggestions';\nimport { getEditorsTestIds } from './CodeEditor.test-ids';\nimport { lint as jsonLint } from './mode/jsonLinter';\n\nconst contextText = 'ex-context';\nconst commentText = 'ex-comment';\nconst javaScriptLanguages = ['json', 'javascript'];\nconst modesWithEclipseTheme = ['json', 'javascript', 'css'];\n\nconst additionalOperators = ['and', 'or', 'when', 'otherwise', 'isA', 'asA', 'define', 'isNone'];\n\ninterface ExpressionModeState {\n inString: false | '\"' | \"'\";\n inMultiLineComment: boolean;\n}\n\ndefineMode('expression', (config, parserConfig) => {\n const isSingleLine = parserConfig.isSingleLine;\n\n const tokens = [\n // Below regex is used to identify the context\n { token: /\\w+@/, style: contextText },\n // Below regex is used to identify the RuleType\n { token: /\\w+:/, style: contextText },\n // Below regex is used to identify the RuleName\n { token: /\\w+[(]/, style: 'ex-ruleName' },\n // Below regex is used to identify the delimeters\n { token: /[:.(),[\\]]/, style: 'ex-delimeter' },\n // Below regex is used to identify the operators\n { token: /[-+\\\\/*=<>@#]+/, style: 'ex-operator' },\n // Below regex is used to identify the spaces\n { token: / /, style: 'ex-space' }\n ];\n\n return {\n startState(): ExpressionModeState {\n return { inString: false, inMultiLineComment: false };\n },\n token(stream, state: ExpressionModeState) {\n /** Additional operator highlighting */\n for (let i = 0; i < additionalOperators.length; i += 1) {\n const keyword = additionalOperators[i];\n const len = keyword.length;\n const currentPos = stream.pos;\n\n if (stream.match(keyword, true)) {\n const before = currentPos === 0 ? null : stream.string.charAt(currentPos - 1);\n const after = stream.eol() ? null : stream.peek();\n\n const isWordChar = (char: string) => char.includes(' ');\n\n if ((!before || isWordChar(before)) && (!after || isWordChar(after))) {\n return 'ex-additional-operators';\n }\n stream.backUp(len);\n }\n }\n\n /* Highlights single and multi line comments - only if not inside a string */\n if (!state.inString) {\n if (state.inMultiLineComment && !isSingleLine) {\n if (stream.match(/.*?\\*\\//)) {\n state.inMultiLineComment = false;\n } else {\n stream.skipToEnd();\n }\n return commentText;\n }\n\n if (stream.match(/\\/\\*/) && !isSingleLine) {\n state.inMultiLineComment = true;\n return commentText;\n }\n\n if (stream.match(/\\/\\//) && !isSingleLine) {\n stream.skipToEnd();\n return commentText;\n }\n }\n\n // Used to identify the constants in the expression\n if (!state.inMultiLineComment) {\n // Check if we're starting a string\n if (!state.inString) {\n const nextChar = stream.peek();\n if (nextChar === \"'\" || nextChar === '\"') {\n state.inString = nextChar; // Store which quote type we're in\n stream.next(); // Skip opening quote\n }\n }\n\n // Process string content\n if (state.inString) {\n const quoteChar = state.inString;\n let escaped = false;\n\n while (!stream.eol()) {\n const char = stream.next();\n\n if (escaped) {\n // Previous char was backslash, this char is escaped\n escaped = false;\n } else if (char === '\\\\') {\n // Start escape sequence\n escaped = true;\n } else if (char === quoteChar) {\n // Found unescaped closing quote\n state.inString = false;\n return quoteChar === '\"' ? 'ex-constant' : contextText;\n }\n }\n\n // Reached end of line while still in string\n return quoteChar === '\"' ? 'ex-constant' : contextText;\n }\n\n // Used to match the regex in the expression\n for (const element of tokens) {\n const match = stream.match(element.token, false);\n if (match) {\n if (stream.pos === stream.start) {\n stream.next();\n }\n return element.style;\n }\n }\n }\n stream.next();\n return null;\n }\n };\n});\n\nconst CodeEditor: ForwardRefForwardPropsComponent<CodeEditorProps> = forwardRef(\n (\n {\n testId,\n fetchSuggestions,\n autoCompleteTriggers,\n editorConfigProps,\n codeEditorHandle,\n defaultValue = '',\n value: controlledValue,\n loading = false,\n readOnly,\n isSingleLine = false,\n errors,\n onChange,\n onBlur,\n inLineErrors,\n 'aria-describedby': ariaDescribedBy,\n onFormat,\n actions,\n label,\n ...restProps\n }: PropsWithoutRef<CodeEditorProps>,\n ref: CodeEditorProps['ref']\n ) => {\n const t = useI18n();\n const [value, setCode] = useState<string>(defaultValue);\n const [showEditor, setShowEditor] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const [suggestions, setSuggestions] = useState<SuggestionType[]>([]);\n const [codeMirror, setCodeMirror] = useState<Editor | null>(null);\n const [suggestionTrigger, setSuggestionTrigger] = useState<{\n character: AutoCompleteTriggerChar;\n cursorPosition: Position;\n } | null>(null);\n const [popover, showPopover] = useState(false);\n const mounted = useRef(false);\n const testIds = useTestIds(testId, getEditorsTestIds);\n const editorRef = useRef<Editor | null>(null);\n const uId = useUID();\n const errorDescId = `${uId}-description`;\n const onBlurRef = useRef(onBlur);\n const hasSuggestionRef = useRef(true);\n const isFetchingRef = useRef(false);\n const fetchAbortRef = useRef<AbortController | null>(null);\n const suggestionTriggerRef = useRef<{\n character: AutoCompleteTriggerChar;\n cursorPosition: Position;\n } | null>(null);\n\n const isReplacingHintRef = useRef(false);\n const debouncedShowHintRef = useRef(\n debounce((codeEditor: Editor, hintOptions: EditorHintOptions) => {\n isReplacingHintRef.current = true;\n try {\n codeEditor.closeHint();\n showHint(codeEditor, getCodeSuggestions, hintOptions);\n } finally {\n isReplacingHintRef.current = false;\n }\n }, 200)\n );\n const theme = useTheme();\n\n useImperativeHandle(\n codeEditorHandle,\n () => ({\n insertText: (\n text: string,\n resetContent?: boolean,\n customPosition?: CustomPositionProps\n ) => {\n if (editorRef.current) {\n if (editorRef.current.getSelection()) {\n editorRef.current.replaceSelection(text);\n } else if (customPosition?.start && customPosition?.end) {\n editorRef.current.replaceRange(\n text,\n { ...customPosition.start },\n { ...customPosition.end }\n );\n } else {\n const cur: Position = editorRef.current.getCursor();\n const doc = editorRef.current.getDoc();\n const lastLine = doc.lastLine(); // Get the index of the last line\n const lastCharIndex = doc.getLine(lastLine).length;\n editorRef.current.replaceRange(\n text,\n resetContent ? { ch: lastCharIndex, line: lastLine } : cur,\n resetContent ? { ch: 0, line: 0 } : undefined\n );\n }\n }\n },\n getValue: () => {\n return editorRef.current?.getValue();\n }\n }),\n []\n );\n\n const autoComplete = (codeEditor: Editor) => {\n const hintOptions = {\n completeSingle: false,\n completeOnSingleClick: true,\n closeOnUnfocus: true,\n suggestions,\n loading: loading || isFetchingRef.current,\n triggerCharacterCursorPos: suggestionTrigger?.cursorPosition,\n theme\n };\n\n debouncedShowHintRef.current(codeEditor, hintOptions);\n };\n\n const errorHandler = (val: string) => {\n if (!editorConfigProps?.lint) return;\n const mode = editorConfigProps?.mode;\n switch (mode) {\n case 'json':\n return jsonLint(val);\n case 'expression':\n default:\n return undefined;\n }\n };\n\n useEffect(() => {\n onBlurRef.current = onBlur;\n }, [onBlur]);\n\n useEffect(() => {\n if (typeof controlledValue === 'string') {\n setCode(prevValue => (controlledValue !== prevValue ? controlledValue : prevValue));\n }\n }, [controlledValue]);\n\n useEffect(() => {\n if (!codeMirror) return;\n\n const refreshEditor = () => {\n codeMirror.refresh();\n };\n\n let frameA = 0;\n let frameB = 0;\n\n const scheduleRefresh = () => {\n cancelAnimationFrame(frameA);\n cancelAnimationFrame(frameB);\n\n frameA = requestAnimationFrame(() => {\n refreshEditor();\n frameB = requestAnimationFrame(refreshEditor);\n });\n };\n\n scheduleRefresh();\n\n const codeMirrorWrapper = codeMirror.getWrapperElement();\n const resizeObserver = new ResizeObserver(entries => {\n const [entry] = entries;\n if (!entry) return;\n\n const { width, height } = entry.contentRect;\n if (width > 0 && height > 0) {\n scheduleRefresh();\n }\n });\n\n resizeObserver.observe(codeMirrorWrapper);\n\n return () => {\n cancelAnimationFrame(frameA);\n cancelAnimationFrame(frameB);\n resizeObserver.disconnect();\n };\n }, [codeMirror]);\n\n const onBlurHandler = (editor: Editor) => {\n if (onBlurRef.current) {\n onBlurRef.current(editor.getDoc().getValue());\n }\n };\n\n const onBeforeChange = async (editor: Editor, _data: EditorChange, textvalue: string) => {\n const normalizedTextValue = textvalue.replaceAll(/\\r\\n?/g, '\\n');\n const updatedTextValue = isSingleLine\n ? normalizedTextValue.replaceAll(/\\n/g, '')\n : normalizedTextValue;\n setCode(updatedTextValue);\n /** _data.origin is a flag from codemirror that tells from where the change was made in the code editor input */\n onChange?.(updatedTextValue, errorHandler(updatedTextValue), _data.origin);\n\n if (_data.origin === 'paste') {\n // Recalculate layout/gutters right after paste so line indices render correctly.\n requestAnimationFrame(() => editor.refresh());\n }\n\n const currentCursor = editor.getCursor();\n const currentCharacter = editor\n .getTokenAt(currentCursor)\n .string.trim() as AutoCompleteTriggerChar;\n let newSuggestions: SuggestionType[] = [];\n\n if (autoCompleteTriggers?.includes(currentCharacter) && fetchSuggestions) {\n fetchAbortRef.current?.abort();\n const abortController = new AbortController();\n fetchAbortRef.current = abortController;\n\n isFetchingRef.current = true;\n suggestionTriggerRef.current = {\n character: currentCharacter,\n cursorPosition: currentCursor\n };\n setSuggestionTrigger({\n character: currentCharacter,\n cursorPosition: currentCursor\n });\n setSuggestions([]);\n let suggestionData;\n try {\n suggestionData = await fetchSuggestions(currentCharacter, {\n line: currentCursor.line,\n ch: currentCursor.ch\n });\n } catch {\n isFetchingRef.current = false;\n fetchAbortRef.current = null;\n return;\n }\n\n if (abortController.signal.aborted) {\n return;\n }\n\n isFetchingRef.current = false;\n fetchAbortRef.current = null;\n\n if (suggestionData === undefined) {\n hasSuggestionRef.current = false;\n suggestionTriggerRef.current = null;\n setSuggestionTrigger(null);\n return;\n }\n\n hasSuggestionRef.current = true;\n newSuggestions = [...suggestionData];\n if (mounted.current) {\n setSuggestions(newSuggestions);\n }\n }\n };\n\n const onChangeMirror = (editor: Editor) => {\n const trigger = suggestionTriggerRef.current;\n if (!trigger) return;\n const line = editor.getLine(trigger.cursorPosition.line);\n if (line?.[trigger.cursorPosition.ch - 1] !== trigger.character) {\n debouncedShowHintRef.current.cancel();\n fetchAbortRef.current?.abort();\n isFetchingRef.current = false;\n fetchAbortRef.current = null;\n suggestionTriggerRef.current = null;\n setSuggestionTrigger(null);\n setSuggestions([]);\n editor.closeHint();\n showPopover(false);\n }\n };\n\n useEffect(() => {\n if (!popover) {\n return;\n }\n const isSuggestionTriggerPresent =\n suggestionTrigger &&\n codeMirror\n ?.getTokenAt(suggestionTrigger.cursorPosition)\n .string.includes(suggestionTrigger.character);\n\n if (!isSuggestionTriggerPresent) {\n codeMirror?.closeHint();\n showPopover(false);\n setSuggestionTrigger(null);\n }\n }, [onBeforeChange]);\n\n useEffect(() => {\n if (codeMirror && isFocused && hasSuggestionRef.current && suggestionTrigger) {\n autoComplete(codeMirror);\n showPopover(true);\n } else {\n codeMirror?.closeHint();\n setSuggestionTrigger(null);\n showPopover(false);\n }\n }, [suggestions, loading, suggestionTrigger, codeMirror]);\n\n // endCompletion fires whenever CodeMirror closes the hint widget for any reason:\n // clicking outside, pressing Escape, or selecting an item. Clear trigger state\n // so the useEffect above does not immediately re-open the hint.\n useEffect(() => {\n if (!codeMirror) return;\n const handleEndCompletion = () => {\n // Ignore endCompletion fired by showHint replacing an existing hint widget\n if (isReplacingHintRef.current) return;\n suggestionTriggerRef.current = null;\n setSuggestionTrigger(null);\n setSuggestions([]);\n showPopover(false);\n };\n codeMirror.on('endCompletion', handleEndCompletion);\n return () => {\n codeMirror.off('endCompletion', handleEndCompletion);\n };\n }, [codeMirror]);\n\n const [popoverInfo, setPopoverInfo] = useState<{\n targetElement: Element | null;\n errorMessages: string[];\n }>({ targetElement: null, errorMessages: [] });\n\n const [show, setShow] = useState(false);\n const [errorMapping, setErrorMapping] = useState<string[][]>([]);\n const [textMarkerList, setTextMarkerList] = useState<TextMarker<MarkerRange>[]>([]);\n\n const removeInLineErrors = () => {\n if (textMarkerList.length) {\n textMarkerList.forEach(item => item.clear());\n }\n };\n\n useEffect(() => {\n removeInLineErrors();\n if (inLineErrors?.length && codeMirror) {\n const markerList: TextMarker<MarkerRange>[] = [];\n const errorMessageMap = inLineErrors?.map(({ start, end, messages }, index) => {\n if (messages.length) {\n markerList.push(\n codeMirror.markText(start, end, {\n className: `cm-ex-underline-error error-${index}`\n })\n );\n return messages;\n }\n return [];\n });\n setTextMarkerList(markerList);\n setErrorMapping(errorMessageMap);\n } else {\n setErrorMapping([]);\n }\n }, [inLineErrors, codeMirror]);\n\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n fetchAbortRef.current?.abort();\n debouncedShowHintRef.current.cancel();\n editorRef.current?.closeHint();\n };\n }, []);\n\n const getErrors = (target: Element) => {\n const errorMessages: string[] = [];\n if (target) {\n errorMapping.forEach((item, index) => {\n if (target.classList.contains(`error-${index}`)) {\n errorMessages.push(...item);\n }\n });\n }\n\n return errorMessages;\n };\n\n const onMouseMove = (event: Event | null, type?: string) => {\n if (codeMirror && errorMapping.length) {\n let target: Element | null;\n\n if (type === 'cursor') {\n const coords = codeMirror.getCursor();\n const charCoords = codeMirror.charCoords(coords, 'window');\n target = document.elementFromPoint(charCoords.left, charCoords.top);\n } else {\n target = event?.target instanceof Element ? event.target : null;\n }\n\n if (target) {\n const errorMessages = getErrors(target);\n if (errorMessages.length) {\n setPopoverInfo(() => {\n return {\n targetElement: target,\n errorMessages\n };\n });\n setShow(true);\n } else {\n setShow(false);\n }\n }\n }\n };\n\n const onMouseLeave = () => {\n setShow(false);\n };\n\n const hidePopover = (e: KeyboardEvent) => {\n if (e.shiftKey && (e.metaKey || e.ctrlKey) && e.key === ' ') {\n onMouseMove(null, 'cursor');\n } else {\n setShow(false);\n }\n };\n\n useEffect(() => {\n if (codeMirror && inLineErrors?.length && errorMapping.length) {\n const codeMirrorWrapper = codeMirror.getWrapperElement();\n\n codeMirrorWrapper.addEventListener('keydown', hidePopover);\n codeMirrorWrapper.addEventListener('mousedown', onMouseLeave);\n\n const elementsWithClassName = Array.from(\n codeMirrorWrapper.getElementsByClassName('cm-ex-underline-error')\n );\n\n elementsWithClassName.forEach(element => {\n element.addEventListener('mouseenter', onMouseMove);\n element.addEventListener('mouseleave', onMouseLeave);\n });\n\n return () => {\n codeMirrorWrapper.removeEventListener('keydown', hidePopover);\n codeMirrorWrapper.removeEventListener('mousedown', onMouseLeave);\n\n elementsWithClassName.forEach(element => {\n element.removeEventListener('mouseenter', onMouseMove);\n element.removeEventListener('mouseleave', onMouseLeave);\n });\n };\n }\n return undefined;\n }, [value, inLineErrors, errorMapping, codeMirror]);\n\n const extendModeWithSingleLine = (\n mode: EditorConfiguration['mode'],\n singleLineEditor: boolean\n ) => {\n if (typeof mode === 'string' || (mode && typeof mode.name === 'string')) {\n return {\n name: typeof mode === 'string' ? mode : mode.name,\n isSingleLine: singleLineEditor\n };\n }\n return mode;\n };\n\n useEffect(() => {\n (async () => {\n const mode =\n typeof editorConfigProps?.mode === 'string'\n ? editorConfigProps.mode\n : editorConfigProps?.mode?.name;\n\n if (editorConfigProps?.placeholder) {\n await import('codemirror/addon/display/placeholder');\n }\n\n if (mode && javaScriptLanguages.includes(mode)) {\n await import('codemirror/mode/javascript/javascript');\n }\n\n if (mode === 'css') {\n await import('codemirror/mode/css/css');\n await import('codemirror/addon/hint/css-hint');\n }\n\n if (mode && modesWithEclipseTheme.includes(mode)) {\n await import('codemirror/theme/eclipse.css');\n }\n\n if (editorConfigProps?.foldGutter && !isSingleLine) {\n await import('codemirror/addon/fold/foldcode');\n await import('codemirror/addon/fold/foldgutter');\n await import('codemirror/addon/fold/brace-fold');\n await import('codemirror/addon/fold/comment-fold');\n await import('codemirror/addon/fold/foldgutter.css');\n }\n\n if (editorConfigProps?.lint) {\n await import('codemirror/addon/lint/lint.css');\n await import('codemirror/addon/lint/lint');\n\n if (mode === 'json') {\n await import('codemirror/addon/lint/json-lint');\n registerHelper('lint', 'json', jsonLint);\n }\n }\n setShowEditor(true);\n })();\n }, [editorConfigProps]);\n\n const updatedEditorConfig: EditorConfiguration = useMemo(() => {\n const modeName =\n typeof editorConfigProps?.mode === 'string'\n ? editorConfigProps.mode\n : editorConfigProps?.mode?.name;\n const mode = extendModeWithSingleLine(editorConfigProps?.mode || 'expression', isSingleLine);\n return {\n ...editorConfigProps,\n readOnly: readOnly ? 'nocursor' : false,\n lineWrapping: !isSingleLine,\n smartIndent: true,\n autoCloseBrackets: true,\n matchBrackets: true,\n lineNumbers: !isSingleLine && editorConfigProps?.lineNumbers,\n placeholder: editorConfigProps?.placeholder,\n extraKeys: {\n /** default tab and shift tab behavior\n * https://codemirror.net/5/\n * https://discuss.codemirror.net/t/does-tab-key-work-in-codemirror-6/2705\n */\n Tab: isSingleLine ? false : () => Pass,\n 'Shift-Tab': isSingleLine ? false : () => Pass,\n ...(isSingleLine ? { Enter: () => {} } : {})\n },\n mode,\n ...(modeName && modesWithEclipseTheme.includes(modeName) ? { theme: 'eclipse' } : {}),\n ...(editorConfigProps?.foldGutter && !isSingleLine\n ? {\n foldGutter: true,\n gutters: (() => {\n const guttersArr: string[] = [];\n if (editorConfigProps?.lint) guttersArr.push('CodeMirror-lint-markers');\n if (editorConfigProps?.lineNumbers) guttersArr.push('CodeMirror-linenumbers');\n return [...guttersArr, 'CodeMirror-foldgutter'];\n })()\n }\n : {}),\n ...(modeName === 'json'\n ? {\n mode: 'application/json',\n lint: editorConfigProps?.lint\n }\n : {})\n };\n }, [isSingleLine, editorConfigProps, readOnly]);\n\n const handlePaste = (editor: Editor, event: ClipboardEvent) => {\n if (isSingleLine) {\n const doc = editor.getDoc();\n const pastedContent = event.clipboardData?.getData('text/plain').trim();\n const singleLineContent = pastedContent?.replace(/\\r?\\n|\\r/g, ' ') || '';\n\n if (doc && doc.getSelection()) {\n doc.replaceSelection(singleLineContent);\n } else {\n const cursor: Position = doc.getCursor();\n doc.replaceRange(singleLineContent, cursor);\n }\n const cursor: Position = doc.getCursor();\n doc.setCursor(cursor);\n event.preventDefault();\n }\n };\n\n useEffect(() => {\n const editor = editorRef.current;\n if (editor && isSingleLine) {\n editor.on('paste', handlePaste);\n }\n return () => {\n if (editor) {\n editor.off('paste', handlePaste);\n }\n };\n }, [isSingleLine]);\n\n useEffect(() => {\n const textArea = codeMirror?.getInputField();\n if (!textArea) return;\n\n let describedBy = textArea.getAttribute('aria-describedby') || '';\n const ids = new Set(describedBy.split(' ').filter(item => item));\n\n if (ariaDescribedBy && !ids.has(ariaDescribedBy)) {\n ids.add(ariaDescribedBy);\n }\n\n if (errors && !ids.has(errorDescId)) {\n ids.add(errorDescId);\n } else if (!errors && ids.has(errorDescId)) {\n ids.delete(errorDescId);\n }\n\n if (!ariaDescribedBy) {\n describedBy = ids.has(errorDescId) ? errorDescId : '';\n } else describedBy = Array.from(ids).join(' ').trim();\n\n if (describedBy) {\n textArea.setAttribute('aria-describedby', describedBy);\n } else {\n textArea.removeAttribute('aria-describedby');\n }\n }, [codeMirror, errors, ariaDescribedBy]);\n\n const showToolbar = !!(onFormat || actions || label);\n\n return (\n <>\n <StyledSuggestions isLoading={loading} suggestions={suggestions} theme={theme} />\n <StyledCodeEditor\n {...restProps}\n data-testid={testIds.root}\n container={{\n direction: 'column',\n justify: 'start',\n gap: 1\n }}\n item={{\n grow: 1\n }}\n ref={ref}\n errors={errors}\n readOnly={readOnly}\n isLoading={loading}\n suggestions={suggestions}\n isSingleLine={isSingleLine}\n editorConfigProps={updatedEditorConfig}\n >\n {showToolbar && (\n <Flex\n container={{ justify: 'between', alignItems: 'center', gap: 0.5 }}\n item={{ shrink: 0 }}\n >\n {label && (\n <Text as='span' variant='h4'>\n {label}\n </Text>\n )}\n {(onFormat || actions) && (\n <div>\n {onFormat && (\n <Button\n variant='simple'\n icon\n onClick={() => onFormat()}\n disabled={readOnly || !value.trim()}\n label={t('format')}\n >\n <Icon name='expression' set='streamline' />\n </Button>\n )}\n {actions && <Actions items={actions} iconOnly />}\n </div>\n )}\n </Flex>\n )}\n {showEditor && (\n <ReactCodeMirror\n value={value}\n onBeforeChange={onBeforeChange}\n onChange={onChangeMirror}\n options={updatedEditorConfig}\n editorDidMount={editor => {\n editor.setSize('100%', '100%');\n setCodeMirror(editor);\n editorRef.current = editor;\n }}\n onBlur={editor => {\n setIsFocused(false);\n if (onBlur) {\n onBlurHandler(editor);\n }\n }}\n onFocus={editor => {\n editor.refresh();\n setIsFocused(true);\n }}\n />\n )}\n {popoverInfo.errorMessages.length > 0 && popoverInfo.targetElement !== null && (\n <Popover\n as={StyledPopover}\n show={show}\n target={popoverInfo.targetElement}\n placement='bottom-start'\n data-testid={testIds.errorPopover}\n >\n <Flex container={{ direction: 'column', gap: 1 }}>\n <Flex container={{ gap: 1 }}>\n <StyledWarnIcon name='warn-solid' />\n <Text variant='h4'>\n {t('errors', [], {\n count:\n popoverInfo.errorMessages.length === 1\n ? 1\n : // Using NaN to always select \"other\" pluralization form\n NaN\n })}\n </Text>\n </Flex>\n {popoverInfo.errorMessages.length > 1 ? (\n <UnorderedList as={StyledList} items={popoverInfo.errorMessages} />\n ) : (\n <Text>{popoverInfo.errorMessages}</Text>\n )}\n </Flex>\n </Popover>\n )}\n {errors && (\n <StyledFormFieldInfo id={errorDescId} status='error' data-testid={testIds.errorMessage}>\n {errors}\n </StyledFormFieldInfo>\n )}\n </StyledCodeEditor>\n </>\n );\n }\n);\n\nexport default withTestIds(CodeEditor, getEditorsTestIds);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodeEditor.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAK1E,eAAO,MAAM,aAAa,6NAEzB,CAAC;AAEF,eAAO,MAAM,cAAc,kaAIzB,CAAC;AAIH,eAAO,MAAM,aAAa,6NAWxB,CAAC;AAIH,eAAO,MAAM,UAAU,6NAIrB,CAAC;AAGH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAEb,OAAO;aACV,MAAM;eACJ,OAAO;iBACL,cAAc,EAAE;
|
|
1
|
+
{"version":3,"file":"CodeEditor.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/ExpressionBuilder/CodeEditor/CodeEditor.styles.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAK1E,eAAO,MAAM,aAAa,6NAEzB,CAAC;AAEF,eAAO,MAAM,cAAc,kaAIzB,CAAC;AAIH,eAAO,MAAM,aAAa,6NAWxB,CAAC;AAIH,eAAO,MAAM,UAAU,6NAIrB,CAAC;AAGH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAEb,OAAO;aACV,MAAM;eACJ,OAAO;iBACL,cAAc,EAAE;kLAkjB/B,CAAC;AAIH,eAAO,MAAM,iBAAiB;gBAChB,OAAO;iBACN,cAAc,EAAE;EA+C7B,CAAC"}
|
|
@@ -32,7 +32,6 @@ export const StyledList = styled.div(({ theme }) => {
|
|
|
32
32
|
});
|
|
33
33
|
StyledList.defaultProps = defaultThemeProp;
|
|
34
34
|
export const StyledCodeEditor = styled(Flex)(({ theme: { base, components: { 'form-control': { 'background-color': formControlBgColor, ':read-only': { 'background-color': readOnlyBackgroundColor } }, 'form-field': { error: { 'status-color': errorBackground } }, input } }, errors, readOnly, showEditorOnly, editorConfigProps, isSingleLine = false }) => {
|
|
35
|
-
const jsonMode = editorConfigProps?.mode === 'application/json';
|
|
36
35
|
return css `
|
|
37
36
|
width: 100%;
|
|
38
37
|
${showEditorOnly &&
|
|
@@ -67,11 +66,6 @@ export const StyledCodeEditor = styled(Flex)(({ theme: { base, components: { 'fo
|
|
|
67
66
|
min-height: 3.75rem;
|
|
68
67
|
`}
|
|
69
68
|
overflow-y: auto;
|
|
70
|
-
${readOnly &&
|
|
71
|
-
!jsonMode &&
|
|
72
|
-
css `
|
|
73
|
-
max-height: 5.625rem;
|
|
74
|
-
`}
|
|
75
69
|
}
|
|
76
70
|
|
|
77
71
|
.CodeMirror-placeholder {
|