@pega/cosmos-react-core 9.0.0-build.25.5 → 9.0.0-build.26.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/lib/components/AIRewrite/AIRewrite.d.ts +1 -9
- package/lib/components/AIRewrite/AIRewrite.d.ts.map +1 -1
- package/lib/components/AIRewrite/AIRewrite.js +16 -29
- package/lib/components/AIRewrite/AIRewrite.js.map +1 -1
- package/lib/components/AIRewrite/AIRewrite.styles.d.ts +24 -0
- package/lib/components/AIRewrite/AIRewrite.styles.d.ts.map +1 -0
- package/lib/components/AIRewrite/AIRewrite.styles.js +24 -0
- package/lib/components/AIRewrite/AIRewrite.styles.js.map +1 -0
- package/lib/components/AIRewrite/AIRewrite.test-ids.d.ts +1 -1
- package/lib/components/AIRewrite/AIRewrite.test-ids.d.ts.map +1 -1
- package/lib/components/AIRewrite/AIRewrite.test-ids.js +1 -1
- package/lib/components/AIRewrite/AIRewrite.test-ids.js.map +1 -1
- package/lib/components/AIRewrite/AIRewrite.types.d.ts +12 -11
- package/lib/components/AIRewrite/AIRewrite.types.d.ts.map +1 -1
- package/lib/components/AIRewrite/AIRewrite.types.js.map +1 -1
- package/lib/components/AppShell/AppShell.d.ts +1 -0
- package/lib/components/AppShell/AppShell.d.ts.map +1 -1
- package/lib/components/AppShell/AppShell.js +4 -1
- package/lib/components/AppShell/AppShell.js.map +1 -1
- package/lib/components/AppShell/AppShell.styles.d.ts.map +1 -1
- package/lib/components/AppShell/AppShell.styles.js +17 -6
- package/lib/components/AppShell/AppShell.styles.js.map +1 -1
- package/lib/components/Backdrop/Backdrop.d.ts.map +1 -1
- package/lib/components/Backdrop/Backdrop.js +3 -4
- package/lib/components/Backdrop/Backdrop.js.map +1 -1
- package/lib/components/ClassificationMarking/ClassificationMarking.d.ts +6 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.d.ts.map +1 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.js +11 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.js.map +1 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.styles.d.ts +19 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.styles.d.ts.map +1 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.styles.js +69 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.styles.js.map +1 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.test-ids.d.ts +2 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.test-ids.d.ts.map +1 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.test-ids.js +7 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.test-ids.js.map +1 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.types.d.ts +19 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.types.d.ts.map +1 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.types.js +2 -0
- package/lib/components/ClassificationMarking/ClassificationMarking.types.js.map +1 -0
- package/lib/components/ClassificationMarking/index.d.ts +3 -0
- package/lib/components/ClassificationMarking/index.d.ts.map +1 -0
- package/lib/components/ClassificationMarking/index.js +2 -0
- package/lib/components/ClassificationMarking/index.js.map +1 -0
- package/lib/components/DateTime/Input/DateInput.d.ts.map +1 -1
- package/lib/components/DateTime/Input/DateInput.js +1 -1
- package/lib/components/DateTime/Input/DateInput.js.map +1 -1
- package/lib/components/DateTime/Input/DateRangeInput.d.ts.map +1 -1
- package/lib/components/DateTime/Input/DateRangeInput.js +1 -1
- package/lib/components/DateTime/Input/DateRangeInput.js.map +1 -1
- package/lib/components/DateTime/Input/DateTimeInput.d.ts.map +1 -1
- package/lib/components/DateTime/Input/DateTimeInput.js +1 -1
- package/lib/components/DateTime/Input/DateTimeInput.js.map +1 -1
- package/lib/components/DateTime/Input/Duration/DurationInput.d.ts.map +1 -1
- package/lib/components/DateTime/Input/Duration/DurationInput.js +1 -1
- package/lib/components/DateTime/Input/Duration/DurationInput.js.map +1 -1
- package/lib/components/DateTime/Input/MonthInput.d.ts.map +1 -1
- package/lib/components/DateTime/Input/MonthInput.js +1 -1
- package/lib/components/DateTime/Input/MonthInput.js.map +1 -1
- package/lib/components/DateTime/Input/QuarterInput.d.ts.map +1 -1
- package/lib/components/DateTime/Input/QuarterInput.js +1 -1
- package/lib/components/DateTime/Input/QuarterInput.js.map +1 -1
- package/lib/components/DateTime/Input/TimeInput.d.ts.map +1 -1
- package/lib/components/DateTime/Input/TimeInput.js +1 -1
- package/lib/components/DateTime/Input/TimeInput.js.map +1 -1
- package/lib/components/DateTime/Input/TimeRangeInput.d.ts.map +1 -1
- package/lib/components/DateTime/Input/TimeRangeInput.js +1 -1
- package/lib/components/DateTime/Input/TimeRangeInput.js.map +1 -1
- package/lib/components/DateTime/Input/WeekInput.d.ts.map +1 -1
- package/lib/components/DateTime/Input/WeekInput.js +1 -1
- package/lib/components/DateTime/Input/WeekInput.js.map +1 -1
- package/lib/components/Dialog/Dialog.styles.d.ts.map +1 -1
- package/lib/components/Dialog/Dialog.styles.js +7 -0
- package/lib/components/Dialog/Dialog.styles.js.map +1 -1
- package/lib/components/Dialog/FormDialog.d.ts.map +1 -1
- package/lib/components/Dialog/FormDialog.js +13 -14
- package/lib/components/Dialog/FormDialog.js.map +1 -1
- package/lib/components/Dialog/InfoDialog.d.ts.map +1 -1
- package/lib/components/Dialog/InfoDialog.js +14 -14
- package/lib/components/Dialog/InfoDialog.js.map +1 -1
- package/lib/components/File/FileInput.d.ts.map +1 -1
- package/lib/components/File/FileInput.js +10 -19
- package/lib/components/File/FileInput.js.map +1 -1
- package/lib/components/File/FileInput.styles.d.ts +6 -2
- package/lib/components/File/FileInput.styles.d.ts.map +1 -1
- package/lib/components/File/FileInput.styles.js +16 -18
- package/lib/components/File/FileInput.styles.js.map +1 -1
- package/lib/components/FormField/FormField.d.ts +1 -1
- package/lib/components/FormField/FormField.d.ts.map +1 -1
- package/lib/components/FormField/FormField.js +28 -30
- package/lib/components/FormField/FormField.js.map +1 -1
- package/lib/components/Fullscreen/Fullscreen.d.ts.map +1 -1
- package/lib/components/Fullscreen/Fullscreen.js +6 -2
- package/lib/components/Fullscreen/Fullscreen.js.map +1 -1
- package/lib/components/Label/Label.d.ts +1 -1
- package/lib/components/Label/Label.d.ts.map +1 -1
- package/lib/components/Label/Label.js.map +1 -1
- package/lib/components/ListToolbar/ListToolbar.d.ts.map +1 -1
- package/lib/components/ListToolbar/ListToolbar.js +2 -2
- package/lib/components/ListToolbar/ListToolbar.js.map +1 -1
- package/lib/components/ListToolbar/ListToolbar.styles.d.ts +1 -0
- package/lib/components/ListToolbar/ListToolbar.styles.d.ts.map +1 -1
- package/lib/components/ListToolbar/ListToolbar.styles.js +40 -27
- package/lib/components/ListToolbar/ListToolbar.styles.js.map +1 -1
- package/lib/components/ListToolbar/ListToolbar.types.d.ts +5 -0
- package/lib/components/ListToolbar/ListToolbar.types.d.ts.map +1 -1
- package/lib/components/ListToolbar/ListToolbar.types.js.map +1 -1
- package/lib/components/Modal/Modal.d.ts.map +1 -1
- package/lib/components/Modal/Modal.js +10 -13
- package/lib/components/Modal/Modal.js.map +1 -1
- package/lib/components/Modal/Modal.styles.d.ts.map +1 -1
- package/lib/components/Modal/Modal.styles.js +7 -0
- package/lib/components/Modal/Modal.styles.js.map +1 -1
- package/lib/components/Number/NumberRangeInput.d.ts.map +1 -1
- package/lib/components/Number/NumberRangeInput.js +1 -1
- package/lib/components/Number/NumberRangeInput.js.map +1 -1
- package/lib/components/Phone/PhoneInput.d.ts.map +1 -1
- package/lib/components/Phone/PhoneInput.js +1 -1
- package/lib/components/Phone/PhoneInput.js.map +1 -1
- package/lib/components/Preview/PreviewPanel.js +3 -3
- package/lib/components/Preview/PreviewPanel.js.map +1 -1
- package/lib/components/RadioCheckGroup/RadioCheckGroup.d.ts.map +1 -1
- package/lib/components/RadioCheckGroup/RadioCheckGroup.js +1 -1
- package/lib/components/RadioCheckGroup/RadioCheckGroup.js.map +1 -1
- package/lib/hooks/useI18n.d.ts +4 -2
- package/lib/hooks/useI18n.d.ts.map +1 -1
- package/lib/i18n/default.d.ts +4 -2
- package/lib/i18n/default.d.ts.map +1 -1
- package/lib/i18n/default.js +7 -5
- package/lib/i18n/default.js.map +1 -1
- package/lib/i18n/i18n.d.ts +4 -2
- package/lib/i18n/i18n.d.ts.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/styles/GlobalStyle.d.ts.map +1 -1
- package/lib/styles/GlobalStyle.js +3 -1
- package/lib/styles/GlobalStyle.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
import type { AIRewriteProps } from './AIRewrite.types';
|
|
2
|
-
|
|
3
|
-
* AIRewrite - A popover dialog for AI-powered text rewriting
|
|
4
|
-
*
|
|
5
|
-
* Renders in three modes:
|
|
6
|
-
* 1. Form mode (default) — collects rewrite action + optional instructions
|
|
7
|
-
* 2. Loading mode (isLoading=true) — shows progress while the AI processes
|
|
8
|
-
* 3. Review mode (rewrittenText is set) — editable text area with Apply / Back
|
|
9
|
-
*/
|
|
10
|
-
declare const AIRewrite: ({ target, testId, onSubmit, onCancel, isLoading, rewrittenText, onApply, onBack }: AIRewriteProps) => import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
declare const AIRewrite: ({ target, testId, onGenerate, onSubmit, onCancel, isGenerating, suggestion, suggestionEditor }: AIRewriteProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
3
|
export default AIRewrite;
|
|
12
4
|
//# sourceMappingURL=AIRewrite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIRewrite.d.ts","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AIRewrite.d.ts","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,mBAAmB,CAAC;AAQlE,QAAA,MAAM,SAAS,GAAI,gGAShB,cAAc,4CA+GhB,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -1,27 +1,19 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import Button from '../Button';
|
|
4
|
+
import Flex from '../Flex';
|
|
5
|
+
import RadioButton from '../RadioButton';
|
|
6
|
+
import RadioButtonGroup from '../RadioButtonGroup';
|
|
7
|
+
import Text from '../Text';
|
|
8
|
+
import TextArea from '../TextArea';
|
|
9
|
+
import { useI18n, useTestIds } from '../../hooks';
|
|
4
10
|
import { getAIRewriteTestIds } from './AIRewrite.test-ids';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
* Renders in three modes:
|
|
9
|
-
* 1. Form mode (default) — collects rewrite action + optional instructions
|
|
10
|
-
* 2. Loading mode (isLoading=true) — shows progress while the AI processes
|
|
11
|
-
* 3. Review mode (rewrittenText is set) — editable text area with Apply / Back
|
|
12
|
-
*/
|
|
13
|
-
const AIRewrite = ({ target, testId, onSubmit, onCancel, isLoading, rewrittenText, onApply, onBack }) => {
|
|
11
|
+
import { StyledAIRewriteDialog, StyledFormSection, StyledInstructionsWrapper } from './AIRewrite.styles';
|
|
12
|
+
const AIRewrite = ({ target, testId, onGenerate, onSubmit, onCancel, isGenerating, suggestion, suggestionEditor }) => {
|
|
14
13
|
const t = useI18n();
|
|
15
14
|
const testIds = useTestIds(testId, getAIRewriteTestIds);
|
|
16
15
|
const [selectedAction, setSelectedAction] = useState('improve');
|
|
17
16
|
const [additionalInstructions, setAdditionalInstructions] = useState('');
|
|
18
|
-
const [editableRewrittenText, setEditableRewrittenText] = useState(rewrittenText ?? '');
|
|
19
|
-
// Sync editable text whenever a new AI result arrives
|
|
20
|
-
useEffect(() => {
|
|
21
|
-
if (rewrittenText !== undefined) {
|
|
22
|
-
setEditableRewrittenText(rewrittenText);
|
|
23
|
-
}
|
|
24
|
-
}, [rewrittenText]);
|
|
25
17
|
const handleActionChange = (e) => {
|
|
26
18
|
const newAction = e.target.value;
|
|
27
19
|
if (newAction === 'improve' ||
|
|
@@ -31,22 +23,17 @@ const AIRewrite = ({ target, testId, onSubmit, onCancel, isLoading, rewrittenTex
|
|
|
31
23
|
setSelectedAction(newAction);
|
|
32
24
|
}
|
|
33
25
|
};
|
|
34
|
-
const
|
|
35
|
-
|
|
26
|
+
const handleGenerate = () => {
|
|
27
|
+
onGenerate(selectedAction, additionalInstructions);
|
|
36
28
|
};
|
|
37
29
|
const handleCancel = () => {
|
|
38
30
|
target.focus();
|
|
39
31
|
onCancel();
|
|
40
32
|
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
// Form mode (default or loading)
|
|
46
|
-
return (_jsx(FormDialog, { target: target, heading: t('ai_rewrite_title'), progress: isLoading, onCancel: handleCancel, onSubmit: {
|
|
47
|
-
disabled: isLoading,
|
|
48
|
-
handler: handleSubmit
|
|
49
|
-
}, children: _jsxs(Flex, { container: { direction: 'column', rowGap: 2 }, children: [_jsxs(RadioButtonGroup, { name: 'aiAction', label: t('ai_rewrite_label'), required: true, children: [_jsx(RadioButton, { value: 'improve', label: t('ai_rewrite_improve'), checked: selectedAction === 'improve', onChange: handleActionChange, "data-testid": testIds.radioClearer }), _jsx(RadioButton, { value: 'shorter', label: t('ai_rewrite_shorter'), checked: selectedAction === 'shorter', onChange: handleActionChange, "data-testid": testIds.radioShorter }), _jsx(RadioButton, { value: 'professional', label: t('ai_rewrite_professional'), checked: selectedAction === 'professional', onChange: handleActionChange, "data-testid": testIds.radioProfessional }), _jsx(RadioButton, { value: 'friendly', label: t('ai_rewrite_friendly'), checked: selectedAction === 'friendly', onChange: handleActionChange, "data-testid": testIds.radioFriendly })] }), _jsx(TextArea, { label: t('ai_rewrite_instructions_label'), info: t('ai_rewrite_instructions_info'), value: additionalInstructions, onChange: e => setAdditionalInstructions(e.target.value), maxLength: 200, "data-testid": testIds.instructionsInput })] }) }));
|
|
33
|
+
return (_jsx(StyledAIRewriteDialog, { target: target, heading: t('ai_rewrite_title'), onCancel: handleCancel, onSubmit: {
|
|
34
|
+
disabled: !suggestion?.trim() || isGenerating,
|
|
35
|
+
handler: onSubmit
|
|
36
|
+
}, children: _jsxs(Flex, { container: { direction: 'column', rowGap: 2 }, children: [_jsx(StyledFormSection, { children: _jsxs(Flex, { container: { direction: 'column', rowGap: 2 }, children: [_jsxs(RadioButtonGroup, { name: 'aiAction', label: t('ai_rewrite_label'), required: true, inline: true, children: [_jsx(RadioButton, { value: 'improve', label: t('ai_rewrite_improve'), checked: selectedAction === 'improve', onChange: handleActionChange, "data-testid": testIds.radioClearer }), _jsx(RadioButton, { value: 'shorter', label: t('ai_rewrite_shorter'), checked: selectedAction === 'shorter', onChange: handleActionChange, "data-testid": testIds.radioShorter }), _jsx(RadioButton, { value: 'professional', label: t('ai_rewrite_professional'), checked: selectedAction === 'professional', onChange: handleActionChange, "data-testid": testIds.radioProfessional }), _jsx(RadioButton, { value: 'friendly', label: t('ai_rewrite_friendly'), checked: selectedAction === 'friendly', onChange: handleActionChange, "data-testid": testIds.radioFriendly })] }), _jsx(StyledInstructionsWrapper, { children: _jsx(TextArea, { label: t('ai_rewrite_instructions_label'), info: t('ai_rewrite_instructions_info'), value: additionalInstructions, onChange: e => setAdditionalInstructions(e.target.value), maxLength: 200, rows: 1, autoResize: false, "data-testid": testIds.instructionsInput }) }), _jsx("div", { children: _jsx(Button, { type: 'button', onClick: handleGenerate, disabled: isGenerating, "data-testid": testIds.generateButton, children: t('ai_rewrite_generate') }) })] }) }), _jsxs(Flex, { container: { direction: 'column', rowGap: 0.5 }, children: [_jsx(Text, { variant: 'h4', children: t('ai_rewrite_result_label') }), suggestionEditor ?? (_jsx(TextArea, { label: t('ai_rewrite_result_label'), labelHidden: true, value: suggestion ?? '', readOnly: true, disabled: !suggestion }))] })] }) }));
|
|
50
37
|
};
|
|
51
38
|
export default AIRewrite;
|
|
52
39
|
//# sourceMappingURL=AIRewrite.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIRewrite.js","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"AIRewrite.js","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState } from 'react';\nimport type { ChangeEvent } from 'react';\n\nimport Button from '../Button';\nimport Flex from '../Flex';\nimport RadioButton from '../RadioButton';\nimport RadioButtonGroup from '../RadioButtonGroup';\nimport Text from '../Text';\nimport TextArea from '../TextArea';\nimport { useI18n, useTestIds } from '../../hooks';\n\nimport type { AIRewriteProps, AIAction } from './AIRewrite.types';\nimport { getAIRewriteTestIds } from './AIRewrite.test-ids';\nimport {\n StyledAIRewriteDialog,\n StyledFormSection,\n StyledInstructionsWrapper\n} from './AIRewrite.styles';\n\nconst AIRewrite = ({\n target,\n testId,\n onGenerate,\n onSubmit,\n onCancel,\n isGenerating,\n suggestion,\n suggestionEditor\n}: AIRewriteProps) => {\n const t = useI18n();\n const testIds = useTestIds(testId, getAIRewriteTestIds);\n const [selectedAction, setSelectedAction] = useState<AIAction>('improve');\n const [additionalInstructions, setAdditionalInstructions] = useState('');\n\n const handleActionChange = (e: ChangeEvent<HTMLInputElement>) => {\n const newAction = e.target.value;\n if (\n newAction === 'improve' ||\n newAction === 'shorter' ||\n newAction === 'professional' ||\n newAction === 'friendly'\n ) {\n setSelectedAction(newAction);\n }\n };\n\n const handleGenerate = () => {\n onGenerate(selectedAction, additionalInstructions);\n };\n\n const handleCancel = () => {\n target.focus();\n onCancel();\n };\n\n return (\n <StyledAIRewriteDialog\n target={target}\n heading={t('ai_rewrite_title')}\n onCancel={handleCancel}\n onSubmit={{\n disabled: !suggestion?.trim() || isGenerating,\n handler: onSubmit\n }}\n >\n <Flex container={{ direction: 'column', rowGap: 2 }}>\n <StyledFormSection>\n <Flex container={{ direction: 'column', rowGap: 2 }}>\n <RadioButtonGroup name='aiAction' label={t('ai_rewrite_label')} required inline>\n <RadioButton\n value='improve'\n label={t('ai_rewrite_improve')}\n checked={selectedAction === 'improve'}\n onChange={handleActionChange}\n data-testid={testIds.radioClearer}\n />\n <RadioButton\n value='shorter'\n label={t('ai_rewrite_shorter')}\n checked={selectedAction === 'shorter'}\n onChange={handleActionChange}\n data-testid={testIds.radioShorter}\n />\n <RadioButton\n value='professional'\n label={t('ai_rewrite_professional')}\n checked={selectedAction === 'professional'}\n onChange={handleActionChange}\n data-testid={testIds.radioProfessional}\n />\n <RadioButton\n value='friendly'\n label={t('ai_rewrite_friendly')}\n checked={selectedAction === 'friendly'}\n onChange={handleActionChange}\n data-testid={testIds.radioFriendly}\n />\n </RadioButtonGroup>\n\n <StyledInstructionsWrapper>\n <TextArea\n label={t('ai_rewrite_instructions_label')}\n info={t('ai_rewrite_instructions_info')}\n value={additionalInstructions}\n onChange={e => setAdditionalInstructions(e.target.value)}\n maxLength={200}\n rows={1}\n autoResize={false}\n data-testid={testIds.instructionsInput}\n />\n </StyledInstructionsWrapper>\n <div>\n <Button\n type='button'\n onClick={handleGenerate}\n disabled={isGenerating}\n data-testid={testIds.generateButton}\n >\n {t('ai_rewrite_generate')}\n </Button>\n </div>\n </Flex>\n </StyledFormSection>\n\n <Flex container={{ direction: 'column', rowGap: 0.5 }}>\n <Text variant='h4'>{t('ai_rewrite_result_label')}</Text>\n {suggestionEditor ?? (\n <TextArea\n label={t('ai_rewrite_result_label')}\n labelHidden\n value={suggestion ?? ''}\n readOnly\n disabled={!suggestion}\n />\n )}\n </Flex>\n </Flex>\n </StyledAIRewriteDialog>\n );\n};\n\nexport default AIRewrite;\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const StyledAIRewriteDialog: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<(Omit<Omit<import("../Dialog/Dialog.types").BaseDialogProps & {
|
|
2
|
+
onDismiss?: () => void;
|
|
3
|
+
onCancel: import("../Dialog/Dialog.types").FormAction;
|
|
4
|
+
onSubmit: import("../Dialog/Dialog.types").FormAction;
|
|
5
|
+
} & {
|
|
6
|
+
heading: string;
|
|
7
|
+
additionalInfo?: import("../AdditionalInfo").AdditionalInfoProps;
|
|
8
|
+
'aria-label'?: never;
|
|
9
|
+
} & Omit<import("../..").Attributes<"div">, "aria-label" | "onSubmit" | "onCancel" | "heading" | "onDismiss" | keyof import("../Dialog/Dialog.types").BaseDialogProps | "additionalInfo">, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
|
|
10
|
+
ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
|
|
11
|
+
}) | (Omit<Omit<import("../Dialog/Dialog.types").BaseDialogProps & {
|
|
12
|
+
onDismiss?: () => void;
|
|
13
|
+
onCancel: import("../Dialog/Dialog.types").FormAction;
|
|
14
|
+
onSubmit: import("../Dialog/Dialog.types").FormAction;
|
|
15
|
+
} & {
|
|
16
|
+
heading?: never;
|
|
17
|
+
'aria-label': string;
|
|
18
|
+
additionalInfo?: never;
|
|
19
|
+
} & Omit<import("../..").Attributes<"div">, "aria-label" | "onSubmit" | "onCancel" | "heading" | "onDismiss" | keyof import("../Dialog/Dialog.types").BaseDialogProps | "additionalInfo">, "ref"> & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
|
|
20
|
+
ref?: ((instance: HTMLDivElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLDivElement> | null | undefined;
|
|
21
|
+
}), import("styled-components/dist/types").BaseObject>> & string & Omit<import("react").ForwardRefExoticComponent<import("react").PropsWithoutRef<import("../Dialog").FormDialogProps> & import("react").RefAttributes<HTMLDivElement>>, keyof import("react").Component<any, {}, any>>;
|
|
22
|
+
export declare const StyledFormSection: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
23
|
+
export declare const StyledInstructionsWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
|
|
24
|
+
//# sourceMappingURL=AIRewrite.styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIRewrite.styles.d.ts","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.styles.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;uRAIhC,CAAC;AAIH,eAAO,MAAM,iBAAiB,6NAM5B,CAAC;AAIH,eAAO,MAAM,yBAAyB,6NAIrC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import styled, { css } from 'styled-components';
|
|
2
|
+
import { defaultThemeProp } from '../../theme';
|
|
3
|
+
import FormDialog from '../Dialog/FormDialog';
|
|
4
|
+
export const StyledAIRewriteDialog = styled(FormDialog)(({ theme }) => {
|
|
5
|
+
return css `
|
|
6
|
+
min-width: min(${theme.base['content-width'].xl}, calc(100vw - 2rem));
|
|
7
|
+
`;
|
|
8
|
+
});
|
|
9
|
+
StyledAIRewriteDialog.defaultProps = defaultThemeProp;
|
|
10
|
+
export const StyledFormSection = styled.div(({ theme }) => {
|
|
11
|
+
return css `
|
|
12
|
+
background: ${theme.base.palette['secondary-background']};
|
|
13
|
+
border-radius: ${theme.base['border-radius']};
|
|
14
|
+
padding: calc(2 * ${theme.base.spacing});
|
|
15
|
+
`;
|
|
16
|
+
});
|
|
17
|
+
StyledFormSection.defaultProps = defaultThemeProp;
|
|
18
|
+
export const StyledInstructionsWrapper = styled.div `
|
|
19
|
+
textarea {
|
|
20
|
+
min-height: unset;
|
|
21
|
+
}
|
|
22
|
+
`;
|
|
23
|
+
StyledInstructionsWrapper.defaultProps = defaultThemeProp;
|
|
24
|
+
//# sourceMappingURL=AIRewrite.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIRewrite.styles.js","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.styles.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAE9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACpE,OAAO,GAAG,CAAA;qBACS,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE;GAChD,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,qBAAqB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACxD,OAAO,GAAG,CAAA;kBACM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;qBACvC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;wBACxB,KAAK,CAAC,IAAI,CAAC,OAAO;GACvC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,iBAAiB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;CAIlD,CAAC;AAEF,yBAAyB,CAAC,YAAY,GAAG,gBAAgB,CAAC","sourcesContent":["import styled, { css } from 'styled-components';\n\nimport { defaultThemeProp } from '../../theme';\nimport FormDialog from '../Dialog/FormDialog';\n\nexport const StyledAIRewriteDialog = styled(FormDialog)(({ theme }) => {\n return css`\n min-width: min(${theme.base['content-width'].xl}, calc(100vw - 2rem));\n `;\n});\n\nStyledAIRewriteDialog.defaultProps = defaultThemeProp;\n\nexport const StyledFormSection = styled.div(({ theme }) => {\n return css`\n background: ${theme.base.palette['secondary-background']};\n border-radius: ${theme.base['border-radius']};\n padding: calc(2 * ${theme.base.spacing});\n `;\n});\n\nStyledFormSection.defaultProps = defaultThemeProp;\n\nexport const StyledInstructionsWrapper = styled.div`\n textarea {\n min-height: unset;\n }\n`;\n\nStyledInstructionsWrapper.defaultProps = defaultThemeProp;\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const getAIRewriteTestIds: (testIdProp?: import("../..").TestIdProp["testId"]) => import("../..").TestIdsRecord<readonly ["radio-clearer", "radio-shorter", "radio-professional", "radio-friendly", "instructions-input", "
|
|
1
|
+
export declare const getAIRewriteTestIds: (testIdProp?: import("../..").TestIdProp["testId"]) => import("../..").TestIdsRecord<readonly ["radio-clearer", "radio-shorter", "radio-professional", "radio-friendly", "instructions-input", "generate-button"]>;
|
|
2
2
|
//# sourceMappingURL=AIRewrite.test-ids.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIRewrite.test-ids.d.ts","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.test-ids.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"AIRewrite.test-ids.d.ts","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.test-ids.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,oNAOrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIRewrite.test-ids.js","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.test-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAC,oBAAoB,EAAE;IACrE,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,oBAAoB;IACpB,
|
|
1
|
+
{"version":3,"file":"AIRewrite.test-ids.js","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.test-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAAC,oBAAoB,EAAE;IACrE,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,gBAAgB;IAChB,oBAAoB;IACpB,iBAAiB;CACT,CAAC,CAAC","sourcesContent":["import { createTestIds } from '../../utils';\n\nexport const getAIRewriteTestIds = createTestIds('ai-rewrite-popover', [\n 'radio-clearer',\n 'radio-shorter',\n 'radio-professional',\n 'radio-friendly',\n 'instructions-input',\n 'generate-button'\n] as const);\n"]}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
1
2
|
import type { TestIdProp } from '../../types';
|
|
2
3
|
/** AI rewrite action types */
|
|
3
4
|
export type AIAction = 'improve' | 'shorter' | 'professional' | 'friendly';
|
|
4
5
|
export interface AIRewriteProps extends TestIdProp {
|
|
5
6
|
/** The button element that triggered the popover */
|
|
6
7
|
target: HTMLElement;
|
|
7
|
-
/**
|
|
8
|
-
|
|
9
|
-
/**
|
|
8
|
+
/** Called when the user clicks the Generate button to request an AI rewrite */
|
|
9
|
+
onGenerate: (rewriteAction: AIAction, additionalInstructions: string) => void;
|
|
10
|
+
/** Called when the user clicks Submit to apply the suggestion */
|
|
11
|
+
onSubmit: () => void;
|
|
12
|
+
/** Called when the user cancels or dismisses the popover */
|
|
10
13
|
onCancel: () => void;
|
|
11
|
-
/** When true,
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
/** Called when the user clicks Back in the review step to return to the form */
|
|
18
|
-
onBack?: () => void;
|
|
14
|
+
/** When true, the AI is generating a suggestion. Disables the Generate button. */
|
|
15
|
+
isGenerating?: boolean;
|
|
16
|
+
/** The AI-generated suggestion text. When provided, Submit is enabled. */
|
|
17
|
+
suggestion?: string;
|
|
18
|
+
/** Custom editor to render in the suggestion area. When not provided, the raw suggestion text is shown read-only. */
|
|
19
|
+
suggestionEditor?: ReactNode;
|
|
19
20
|
}
|
|
20
21
|
//# sourceMappingURL=AIRewrite.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIRewrite.types.d.ts","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,8BAA8B;AAC9B,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,UAAU,CAAC;AAE3E,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,oDAAoD;IACpD,MAAM,EAAE,WAAW,CAAC;IAEpB
|
|
1
|
+
{"version":3,"file":"AIRewrite.types.d.ts","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,8BAA8B;AAC9B,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,UAAU,CAAC;AAE3E,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,oDAAoD;IACpD,MAAM,EAAE,WAAW,CAAC;IAEpB,+EAA+E;IAC/E,UAAU,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,KAAK,IAAI,CAAC;IAE9E,iEAAiE;IACjE,QAAQ,EAAE,MAAM,IAAI,CAAC;IAErB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,IAAI,CAAC;IAErB,kFAAkF;IAClF,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,qHAAqH;IACrH,gBAAgB,CAAC,EAAE,SAAS,CAAC;CAC9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIRewrite.types.js","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { TestIdProp } from '../../types';\n\n/** AI rewrite action types */\nexport type AIAction = 'improve' | 'shorter' | 'professional' | 'friendly';\n\nexport interface AIRewriteProps extends TestIdProp {\n /** The button element that triggered the popover */\n target: HTMLElement;\n\n /**
|
|
1
|
+
{"version":3,"file":"AIRewrite.types.js","sourceRoot":"","sources":["../../../src/components/AIRewrite/AIRewrite.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ReactNode } from 'react';\n\nimport type { TestIdProp } from '../../types';\n\n/** AI rewrite action types */\nexport type AIAction = 'improve' | 'shorter' | 'professional' | 'friendly';\n\nexport interface AIRewriteProps extends TestIdProp {\n /** The button element that triggered the popover */\n target: HTMLElement;\n\n /** Called when the user clicks the Generate button to request an AI rewrite */\n onGenerate: (rewriteAction: AIAction, additionalInstructions: string) => void;\n\n /** Called when the user clicks Submit to apply the suggestion */\n onSubmit: () => void;\n\n /** Called when the user cancels or dismisses the popover */\n onCancel: () => void;\n\n /** When true, the AI is generating a suggestion. Disables the Generate button. */\n isGenerating?: boolean;\n\n /** The AI-generated suggestion text. When provided, Submit is enabled. */\n suggestion?: string;\n\n /** Custom editor to render in the suggestion area. When not provided, the raw suggestion text is shown read-only. */\n suggestionEditor?: ReactNode;\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AppShellProps } from './AppShell.types';
|
|
2
2
|
export declare const appShellBottomOffsetCSSVar = "--appshell-bottom-offset";
|
|
3
|
+
export declare const appShellHardBottomOffsetCSSVar = "--appshell-hard-bottom-offset";
|
|
3
4
|
declare const AppShell: import("react").ForwardRefExoticComponent<AppShellProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
4
5
|
export default AppShell;
|
|
5
6
|
//# sourceMappingURL=AppShell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../src/components/AppShell/AppShell.tsx"],"names":[],"mappings":"AAkEA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,kBAAkB,CAAC;AAwBrE,eAAO,MAAM,0BAA0B,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../src/components/AppShell/AppShell.tsx"],"names":[],"mappings":"AAkEA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,kBAAkB,CAAC;AAwBrE,eAAO,MAAM,0BAA0B,6BAA6B,CAAC;AACrE,eAAO,MAAM,8BAA8B,kCAAkC,CAAC;AAE9E,QAAA,MAAM,QAAQ,0GAyhBZ,CAAC;AAEH,eAAe,QAAQ,CAAC"}
|
|
@@ -34,6 +34,7 @@ import NavigationList from './NavigationList';
|
|
|
34
34
|
registerIcon(timesIcon, plusIcon, caseSolidIcon, barsIcon, caretRightIcon, caretLeftIcon, moreIcon, sunIcon, moonIcon, circleMixedLeftIcon, shareIcon);
|
|
35
35
|
registerAction({ id: 'NextRegion', defaultKeyBinding: 'F9' }, { id: 'PrevRegion', defaultKeyBinding: 'Shift+F9' }, { id: 'KeyboardCommands', defaultKeyBinding: 'CommandOrControl+/' });
|
|
36
36
|
export const appShellBottomOffsetCSSVar = '--appshell-bottom-offset';
|
|
37
|
+
export const appShellHardBottomOffsetCSSVar = '--appshell-hard-bottom-offset';
|
|
37
38
|
const AppShell = forwardRef(function AppShell(props, ref) {
|
|
38
39
|
const t = useI18n();
|
|
39
40
|
const { appInfo, contextSwitcher, searchInput, appHeader, searchPage, searchLabel = t('sitewide'), caseTypes, links, agent, banners, progress, main, operator, utils, headerUtils, helpMenu, cases, defaultExpanded = false, collapsedHoverMenus = false, shareApp, ...restProps } = props;
|
|
@@ -125,7 +126,8 @@ const AppShell = forwardRef(function AppShell(props, ref) {
|
|
|
125
126
|
useLayoutEffect(() => {
|
|
126
127
|
if (!mobileHeaderEl)
|
|
127
128
|
return;
|
|
128
|
-
document.body.style.setProperty(appShellBottomOffsetCSSVar, mobileHeaderHeight);
|
|
129
|
+
document.body.style.setProperty(appShellBottomOffsetCSSVar, `calc(${mobileHeaderHeight} + var(--marking-height, 0rem))`);
|
|
130
|
+
document.body.style.setProperty(appShellHardBottomOffsetCSSVar, 'var(--marking-height, 0rem)');
|
|
129
131
|
const resizeObserver = new ResizeObserver(debounce(() => {
|
|
130
132
|
const mobileHeaderWidth = mobileHeaderEl?.offsetWidth ?? 0;
|
|
131
133
|
const regionsPaddingInlinePixels = mobileHeaderEl
|
|
@@ -140,6 +142,7 @@ const AppShell = forwardRef(function AppShell(props, ref) {
|
|
|
140
142
|
resizeObserver.observe(mobileHeaderEl);
|
|
141
143
|
return () => {
|
|
142
144
|
document.body.style.removeProperty(appShellBottomOffsetCSSVar);
|
|
145
|
+
document.body.style.removeProperty(appShellHardBottomOffsetCSSVar);
|
|
143
146
|
resizeObserver.disconnect();
|
|
144
147
|
};
|
|
145
148
|
}, [mobileHeaderEl, caseTypes?.length]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../src/components/AppShell/AppShell.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n useState,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useLayoutEffect\n} from 'react';\nimport type { PropsWithoutRef, Ref } from 'react';\n\nimport { Alert } from '../Badges';\nimport Flex from '../Flex';\nimport Icon, { registerIcon } from '../Icon';\nimport * as timesIcon from '../Icon/icons/times.icon';\nimport * as plusIcon from '../Icon/icons/plus.icon';\nimport * as caseSolidIcon from '../Icon/icons/case-solid.icon';\nimport * as barsIcon from '../Icon/icons/bars.icon';\nimport * as caretLeftIcon from '../Icon/icons/caret-left.icon';\nimport * as caretRightIcon from '../Icon/icons/caret-right.icon';\nimport * as moreIcon from '../Icon/icons/more.icon';\nimport * as sunIcon from '../Icon/icons/sun.icon';\nimport * as moonIcon from '../Icon/icons/moon.icon';\nimport * as circleMixedLeftIcon from '../Icon/icons/circle-mixed-left.icon';\nimport * as shareIcon from '../Icon/icons/share.icon';\nimport {\n useI18n,\n useBreakpoint,\n useConsolidatedRef,\n useElement,\n useTransitionState,\n useEvent,\n useOuterEvent,\n useScrollToggle,\n useTheme,\n useUID,\n usePreviewManager,\n useDirection\n} from '../../hooks';\nimport { openCloseStates } from '../../hooks/useTransitionState';\nimport SkipLinks from '../SkipLinks';\nimport type { SkipLinksProps } from '../SkipLinks';\nimport Progress from '../Progress';\nimport { registerAction } from '../ShortcutManager';\nimport useShortcut from '../../hooks/useShortcut';\nimport { debounce, getChildOfRootNode, isValidElement } from '../../utils';\nimport useKeyboardCommands from '../KeyboardCommands';\nimport Tooltip from '../Tooltip';\nimport Drawer from '../Drawer';\nimport useThemeMode from '../../hooks/useThemeMode';\n\nimport AppShellContext from './AppShellContext';\nimport AppHeader from './AppHeader';\nimport {\n StyledAppMain,\n StyledBannerRegion,\n StyledMobileNav,\n mobileHeaderHeight,\n StyledMobileMoreMenuButton,\n menuButtonWidth,\n StyledMobileMoreMenu,\n StyledAppShellToggleButton,\n StyledAppShellTooltip,\n StyledSidebarNav,\n headerHeight\n} from './AppShell.styles';\nimport type { AppShellProps, UtilItemProps } from './AppShell.types';\nimport { followingNodes, focusRegion } from './utils';\nimport AppNavigationPanel, { CaseTypes, Links } from './AppNavigationPanel';\nimport NavigationList from './NavigationList';\n\nregisterIcon(\n timesIcon,\n plusIcon,\n caseSolidIcon,\n barsIcon,\n caretRightIcon,\n caretLeftIcon,\n moreIcon,\n sunIcon,\n moonIcon,\n circleMixedLeftIcon,\n shareIcon\n);\nregisterAction(\n { id: 'NextRegion', defaultKeyBinding: 'F9' },\n { id: 'PrevRegion', defaultKeyBinding: 'Shift+F9' },\n { id: 'KeyboardCommands', defaultKeyBinding: 'CommandOrControl+/' }\n);\n\nexport const appShellBottomOffsetCSSVar = '--appshell-bottom-offset';\n\nconst AppShell = forwardRef(function AppShell(\n props: PropsWithoutRef<AppShellProps>,\n ref: Ref<HTMLDivElement>\n) {\n const t = useI18n();\n\n const {\n appInfo,\n contextSwitcher,\n searchInput,\n appHeader,\n searchPage,\n searchLabel = t('sitewide'),\n caseTypes,\n links,\n agent,\n banners,\n progress,\n main,\n operator,\n utils,\n headerUtils,\n helpMenu,\n cases,\n defaultExpanded = false,\n collapsedHoverMenus = false,\n shareApp,\n ...restProps\n } = props;\n\n const { disableScroll, enableScroll } = useScrollToggle();\n const navRef = useConsolidatedRef(ref);\n const mobileButtonRef = useRef<HTMLButtonElement>(null);\n const navId = useUID();\n const [expandCollapseEl, setExpandCollapseEl] = useElement<HTMLButtonElement>();\n\n const [mobileNavOpen, setMobileNavOpen] = useState(false);\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [mobileNavLinksCount, setMobileNavLinksCount] = useState(0);\n\n const { previewActive, setPreviewActive } = usePreviewManager();\n\n const focusedImperatively = useRef(false);\n const [headerEl, setHeaderEl] = useElement<HTMLDivElement>();\n const [mobileHeaderEl, setMobileHeaderEl] = useElement<HTMLDivElement>();\n\n const isSmallOrAbove = useBreakpoint('sm');\n\n const showAppHeader = !!appHeader && isSmallOrAbove;\n const showMainContent = showAppHeader ? !!(headerEl || mobileHeaderEl) : true;\n\n const openNavTimeoutId = useRef<ReturnType<typeof setTimeout>>();\n const closeNavTimeoutId = useRef<ReturnType<typeof setTimeout>>();\n\n const [searchContainerEl, setSearchContainerEl] = useState<HTMLElement | null>(null);\n\n const openKeyboardCommands = useKeyboardCommands();\n\n const theme = useTheme();\n\n const { state: sidebarNavState, set: setSidebarNavState } = useTransitionState({\n ref: navRef,\n property: 'width',\n states: openCloseStates,\n defaultState: defaultExpanded ? 'open' : 'closed'\n });\n\n const skipLinks: SkipLinksProps['items'] = useMemo(\n () => [\n {\n label: t('go_to_main_content'),\n target: { ariaLabel: t('main_content'), selector: 'main' }\n }\n ],\n [t]\n );\n\n const openNav = useCallback((delay: number = 0) => {\n if (closeNavTimeoutId.current) clearTimeout(closeNavTimeoutId.current);\n openNavTimeoutId.current = setTimeout(() => {\n setSidebarNavState('open');\n }, delay);\n }, []);\n\n const closeNav = useCallback((delay: number = 0) => {\n if (openNavTimeoutId.current) clearTimeout(openNavTimeoutId.current);\n closeNavTimeoutId.current = setTimeout(() => {\n setSidebarNavState('closed');\n }, delay);\n }, []);\n\n const onFocus = useCallback(() => {\n focusedImperatively.current = false;\n }, []);\n\n const mobileNavRef = useRef<HTMLDivElement>(null);\n\n useOuterEvent('focusin', [mobileNavRef, mobileButtonRef], () => setMobileNavOpen(false));\n\n useEffect(() => {\n if (mobileNavOpen) {\n disableScroll();\n } else {\n enableScroll();\n }\n }, [mobileNavOpen]);\n\n useEffect(() => {\n if (!navRef.current) return;\n const targetNode = getChildOfRootNode(navRef);\n if (!targetNode) return;\n if (!targetNode.style.getPropertyValue('--app-header-height')) {\n targetNode.style.setProperty('--app-header-height', showAppHeader ? headerHeight : '0');\n }\n }, [showAppHeader]);\n\n useEffect(() => {\n if (mobileNavOpen) {\n const onKeyDown = ({ key }: KeyboardEvent) => {\n if (key === 'Escape') setMobileNavOpen(false);\n };\n\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n };\n }\n }, [mobileNavOpen]);\n\n useEffect(() => {\n if (isSmallOrAbove && mobileNavOpen) setMobileNavOpen(false);\n }, [isSmallOrAbove, mobileNavOpen]);\n\n useLayoutEffect(() => {\n if (!mobileHeaderEl) return;\n\n document.body.style.setProperty(appShellBottomOffsetCSSVar, mobileHeaderHeight);\n\n const resizeObserver = new ResizeObserver(\n debounce(() => {\n const mobileHeaderWidth = mobileHeaderEl?.offsetWidth ?? 0;\n const regionsPaddingInlinePixels = mobileHeaderEl\n ? 2 *\n Number.parseInt(\n window.getComputedStyle(mobileHeaderEl).getPropertyValue('padding-inline-start'),\n 10\n )\n : 0;\n const mobileNavButton = mobileHeaderEl?.lastElementChild;\n if (mobileNavButton instanceof HTMLElement) {\n setMobileNavLinksCount(\n Math.max(\n Math.floor(\n mobileHeaderWidth / (menuButtonWidth(theme) + regionsPaddingInlinePixels)\n ) - (caseTypes?.length ? 2 : 1),\n 0\n )\n );\n }\n }, 0)\n );\n\n resizeObserver.observe(mobileHeaderEl);\n\n return () => {\n document.body.style.removeProperty(appShellBottomOffsetCSSVar);\n resizeObserver.disconnect();\n };\n }, [mobileHeaderEl, caseTypes?.length]);\n\n const activatedEl = useRef<Element>(document.body);\n useEvent('click', e => {\n activatedEl.current = document.elementFromPoint(e.clientX, e.clientY) ?? document.body;\n });\n\n useShortcut('NextRegion', () => {\n const activeElement =\n document.activeElement && document.activeElement !== document.body\n ? document.activeElement\n : activatedEl.current;\n const regionEls = followingNodes<HTMLElement>(\n document.createNodeIterator(document.body, NodeFilter.SHOW_ELEMENT, node =>\n // safe to treat as Element, as we requested to give us only elements\n (node as Element).hasAttribute('data-app-region') || node === activeElement\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP\n ),\n activeElement\n );\n // try to focus first visibleregion\n const focusedNode = regionEls.find(node => focusRegion(node));\n if (!focusedNode) (activeElement as HTMLElement).focus();\n });\n\n useShortcut('PrevRegion', () => {\n const activeElement =\n document.activeElement && document.activeElement !== document.body\n ? document.activeElement\n : activatedEl.current;\n const regionEls = followingNodes<HTMLElement>(\n document.createNodeIterator(document.body, NodeFilter.SHOW_ELEMENT, node =>\n // safe to treat as Element, as we requested to give us only elements\n (node as Element).hasAttribute('data-app-region') || node === activeElement\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP\n ),\n activeElement\n );\n regionEls.reverse();\n\n // removing active element parent from the list to avoid focusing back to the same region\n // but only if element is not region himself - in that case we want to keep its parent on the list\n // as it is different focusable region\n if (regionEls[0].contains(activeElement) && !activeElement.hasAttribute('data-app-region'))\n regionEls.splice(0, 1);\n const focusedNode = regionEls.find(node => focusRegion(node));\n if (!focusedNode) (activeElement as HTMLElement).focus();\n });\n\n useShortcut('KeyboardCommands', () => {\n openKeyboardCommands();\n });\n\n const contextSwitcherUtilItem: UtilItemProps | undefined = useMemo(() => {\n const {\n contexts,\n onContextClick,\n label: contextSwitcherLabel = t('switch_to')\n } = contextSwitcher ?? {};\n if (!showAppHeader && contexts && contexts?.length > 1 && !!onContextClick) {\n return {\n name: contextSwitcherLabel,\n primary: contextSwitcherLabel,\n visual: <Icon name='dot-9-solid' />,\n drawerView: (\n <NavigationList\n items={contexts!.map(context => ({\n ...context,\n primary: context.primary,\n 'aria-current': !!context.selected,\n visual: context.visual,\n onClick: e => {\n onContextClick(context.id, e);\n }\n }))}\n singleSelect\n />\n )\n };\n }\n }, [\n showAppHeader,\n contextSwitcher?.contexts,\n contextSwitcher?.label,\n contextSwitcher?.onContextClick\n ]);\n\n const shareLabel = shareApp?.label ?? t('app_shell_share');\n\n const shareApplicationUtilItem: UtilItemProps | undefined = useMemo(() => {\n if (!showAppHeader && shareApp) {\n return {\n name: shareLabel,\n primary: shareLabel,\n visual: <Icon name='share' />,\n onClick: shareApp.onClick\n };\n }\n }, [showAppHeader, shareApp, shareLabel]);\n\n const operatorInfoUtilItem: UtilItemProps | undefined = useMemo(() => {\n if (!showAppHeader && operator) {\n return {\n name: operator.name,\n primary: t('app_shell_user_account'),\n visual: operator.avatar,\n items: operator.actions\n };\n }\n }, [showAppHeader, operator]);\n\n const { themeMode, onThemeModeChange } = useThemeMode();\n\n const themeSwitcherUtilItem: UtilItemProps | undefined = useMemo(() => {\n if (!showAppHeader && onThemeModeChange) {\n let currentThemeIcon = 'circle-mixed-left'; // default for system\n if (themeMode === 'dark') {\n currentThemeIcon = 'moon';\n } else if (themeMode === 'light') {\n currentThemeIcon = 'sun';\n }\n\n return {\n name: t('theme_mode'),\n primary: t('theme_mode'),\n visual: <Icon name={currentThemeIcon} />,\n items: [\n {\n id: 'light',\n primary: t('theme_light'),\n visual: <Icon name='sun' />,\n onClick: () => onThemeModeChange('light')\n },\n {\n id: 'dark',\n primary: t('theme_dark'),\n visual: <Icon name='moon' />,\n onClick: () => onThemeModeChange('dark')\n },\n {\n id: 'system',\n primary: t('theme_system'),\n visual: <Icon name='circle-mixed-left' />,\n onClick: () => onThemeModeChange('system')\n }\n ]\n };\n }\n }, [showAppHeader, onThemeModeChange, themeMode]);\n\n const { start, end } = useDirection();\n\n const utilsList = [\n ...(utils ?? []),\n ...(contextSwitcherUtilItem ? [contextSwitcherUtilItem] : []),\n ...(shareApplicationUtilItem ? [shareApplicationUtilItem] : []),\n ...(operatorInfoUtilItem ? [operatorInfoUtilItem] : []),\n ...(themeSwitcherUtilItem ? [themeSwitcherUtilItem] : [])\n ];\n\n return (\n <AppShellContext.Provider\n value={useMemo(\n () => ({\n navOpen: sidebarNavState === 'open' || sidebarNavState === 'opening' || mobileNavOpen,\n drawerOpen,\n setDrawerOpen,\n collapsedHoverMenus,\n navState: sidebarNavState,\n focusedImperatively,\n headerEl: headerEl || mobileHeaderEl,\n searchContainerEl,\n setSearchContainerEl,\n isMobileNav: !isSmallOrAbove,\n previewActive,\n setPreviewActive\n }),\n [\n sidebarNavState,\n drawerOpen,\n mobileNavOpen,\n isSmallOrAbove,\n headerEl,\n mobileHeaderEl,\n searchContainerEl,\n previewActive\n ]\n )}\n >\n <SkipLinks items={skipLinks} />\n {showAppHeader && (\n <AppHeader\n {...appInfo}\n contextSwitcher={contextSwitcher}\n searchInput={searchInput}\n searchLabel={searchLabel}\n operator={operator}\n headerUtils={headerUtils}\n helpMenu={helpMenu}\n searchPage={searchPage}\n shareApp={shareApp}\n ref={setHeaderEl}\n />\n )}\n {isSmallOrAbove ? (\n <Flex\n {...restProps}\n container={{\n direction: 'column',\n justify: 'between'\n }}\n id={navId}\n as={StyledSidebarNav}\n withAppHeader={showAppHeader}\n portalAgent={!!agent}\n ref={navRef}\n data-app-region\n onFocus={onFocus}\n aria-label={t('app_shell_main_navigation_label')}\n >\n <AppNavigationPanel\n navState={sidebarNavState}\n appInfo={!showAppHeader ? appInfo : undefined}\n searchInput={!showAppHeader ? searchInput : undefined}\n searchLabel={searchLabel}\n caseTypes={caseTypes}\n links={links}\n cases={cases}\n contextSwitcher={!showAppHeader ? contextSwitcher : undefined}\n operator={!showAppHeader ? operator : undefined}\n utils={utilsList}\n onClick={() => {\n if (['closing', 'closed'].includes(sidebarNavState)) {\n openNav(0);\n } else {\n closeNav(0);\n }\n }}\n agent={agent}\n />\n <Flex container={{ justify: 'center' }}>\n <StyledAppShellToggleButton\n icon\n ref={setExpandCollapseEl}\n compact\n variant='simple'\n onClick={() => {\n setSidebarNavState(sidebarNavState === 'closed' ? 'open' : 'closed');\n }}\n aria-label={\n sidebarNavState === 'closed' ? t('expand_navigation') : t('collapse_navigation')\n }\n aria-expanded={sidebarNavState === 'open' || sidebarNavState === 'opening'}\n aria-controls={navId}\n >\n {['closed', 'closing'].includes(sidebarNavState) ? (\n <Icon name={`arrow-micro-${end}`} />\n ) : (\n <Icon name={`arrow-micro-${start}`} />\n )}\n </StyledAppShellToggleButton>\n\n {['open', 'closed'].includes(sidebarNavState) && (\n <Tooltip\n target={expandCollapseEl}\n placement='right'\n as={StyledAppShellTooltip}\n showDelay='none'\n hideDelay='none'\n >\n {sidebarNavState === 'closed' ? t('expand_navigation') : t('collapse_navigation')}\n </Tooltip>\n )}\n </Flex>\n </Flex>\n ) : (\n <>\n <Flex\n as={StyledMobileNav}\n container={{ alignItems: 'center', justify: 'stretch', gap: 0.25 }}\n ref={setMobileHeaderEl}\n data-app-region\n >\n {caseTypes && caseTypes.length > 0 && <CaseTypes caseTypes={caseTypes} mobileNavBar />}\n {links && <Links links={links.slice(0, mobileNavLinksCount)} mobileNavBar />}\n <StyledMobileMoreMenuButton\n ref={mobileButtonRef}\n variant='simple'\n onClick={() => setMobileNavOpen(prev => !prev)}\n label={t('app_shell_more')}\n icon\n aria-expanded={mobileNavOpen}\n aria-controls={navId}\n >\n <Icon name='more' />\n {!mobileNavOpen &&\n utils?.some(item => (isValidElement(item) ? false : !!item.count)) && (\n <Alert variant='urgent' />\n )}\n <span>{t('app_shell_more')}</span>\n </StyledMobileMoreMenuButton>\n </Flex>\n <Drawer\n open={mobileNavOpen}\n ref={mobileNavRef}\n onAfterClose={() => {\n setMobileNavOpen(false);\n }}\n position='fixed'\n placement='bottom'\n size={`calc(100dvh - ${mobileHeaderHeight})`}\n nullWhenClosed\n >\n <Flex\n {...restProps}\n container={{\n direction: 'column',\n justify: 'between'\n }}\n id={navId}\n as={StyledMobileMoreMenu}\n ref={ref}\n aria-label={t('app_shell_main_navigation_label')}\n >\n <AppNavigationPanel\n appInfo={appInfo}\n navState='open'\n searchInput={searchInput}\n searchLabel={searchLabel}\n links={links?.slice(mobileNavLinksCount)}\n cases={cases}\n contextSwitcher={contextSwitcher}\n operator={operator}\n utils={utilsList}\n agent={agent}\n />\n </Flex>\n </Drawer>\n </>\n )}\n {showMainContent && (\n <StyledAppMain\n appHeader={showAppHeader}\n mobileNav={!isSmallOrAbove}\n previewActive={previewActive}\n headerOffset={isSmallOrAbove ? headerEl?.offsetHeight : undefined}\n navOpen={['open', 'opening'].includes(sidebarNavState)}\n aria-busy={!!progress}\n data-app-region\n >\n <Progress\n visible={!!progress}\n placement='local'\n message={typeof progress === 'string' ? progress : t('loading')}\n />\n\n {banners && <StyledBannerRegion>{banners}</StyledBannerRegion>}\n {main}\n </StyledAppMain>\n )}\n </AppShellContext.Provider>\n );\n});\n\nexport default AppShell;\n"]}
|
|
1
|
+
{"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../../../src/components/AppShell/AppShell.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n useState,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useLayoutEffect\n} from 'react';\nimport type { PropsWithoutRef, Ref } from 'react';\n\nimport { Alert } from '../Badges';\nimport Flex from '../Flex';\nimport Icon, { registerIcon } from '../Icon';\nimport * as timesIcon from '../Icon/icons/times.icon';\nimport * as plusIcon from '../Icon/icons/plus.icon';\nimport * as caseSolidIcon from '../Icon/icons/case-solid.icon';\nimport * as barsIcon from '../Icon/icons/bars.icon';\nimport * as caretLeftIcon from '../Icon/icons/caret-left.icon';\nimport * as caretRightIcon from '../Icon/icons/caret-right.icon';\nimport * as moreIcon from '../Icon/icons/more.icon';\nimport * as sunIcon from '../Icon/icons/sun.icon';\nimport * as moonIcon from '../Icon/icons/moon.icon';\nimport * as circleMixedLeftIcon from '../Icon/icons/circle-mixed-left.icon';\nimport * as shareIcon from '../Icon/icons/share.icon';\nimport {\n useI18n,\n useBreakpoint,\n useConsolidatedRef,\n useElement,\n useTransitionState,\n useEvent,\n useOuterEvent,\n useScrollToggle,\n useTheme,\n useUID,\n usePreviewManager,\n useDirection\n} from '../../hooks';\nimport { openCloseStates } from '../../hooks/useTransitionState';\nimport SkipLinks from '../SkipLinks';\nimport type { SkipLinksProps } from '../SkipLinks';\nimport Progress from '../Progress';\nimport { registerAction } from '../ShortcutManager';\nimport useShortcut from '../../hooks/useShortcut';\nimport { debounce, getChildOfRootNode, isValidElement } from '../../utils';\nimport useKeyboardCommands from '../KeyboardCommands';\nimport Tooltip from '../Tooltip';\nimport Drawer from '../Drawer';\nimport useThemeMode from '../../hooks/useThemeMode';\n\nimport AppShellContext from './AppShellContext';\nimport AppHeader from './AppHeader';\nimport {\n StyledAppMain,\n StyledBannerRegion,\n StyledMobileNav,\n mobileHeaderHeight,\n StyledMobileMoreMenuButton,\n menuButtonWidth,\n StyledMobileMoreMenu,\n StyledAppShellToggleButton,\n StyledAppShellTooltip,\n StyledSidebarNav,\n headerHeight\n} from './AppShell.styles';\nimport type { AppShellProps, UtilItemProps } from './AppShell.types';\nimport { followingNodes, focusRegion } from './utils';\nimport AppNavigationPanel, { CaseTypes, Links } from './AppNavigationPanel';\nimport NavigationList from './NavigationList';\n\nregisterIcon(\n timesIcon,\n plusIcon,\n caseSolidIcon,\n barsIcon,\n caretRightIcon,\n caretLeftIcon,\n moreIcon,\n sunIcon,\n moonIcon,\n circleMixedLeftIcon,\n shareIcon\n);\nregisterAction(\n { id: 'NextRegion', defaultKeyBinding: 'F9' },\n { id: 'PrevRegion', defaultKeyBinding: 'Shift+F9' },\n { id: 'KeyboardCommands', defaultKeyBinding: 'CommandOrControl+/' }\n);\n\nexport const appShellBottomOffsetCSSVar = '--appshell-bottom-offset';\nexport const appShellHardBottomOffsetCSSVar = '--appshell-hard-bottom-offset';\n\nconst AppShell = forwardRef(function AppShell(\n props: PropsWithoutRef<AppShellProps>,\n ref: Ref<HTMLDivElement>\n) {\n const t = useI18n();\n\n const {\n appInfo,\n contextSwitcher,\n searchInput,\n appHeader,\n searchPage,\n searchLabel = t('sitewide'),\n caseTypes,\n links,\n agent,\n banners,\n progress,\n main,\n operator,\n utils,\n headerUtils,\n helpMenu,\n cases,\n defaultExpanded = false,\n collapsedHoverMenus = false,\n shareApp,\n ...restProps\n } = props;\n\n const { disableScroll, enableScroll } = useScrollToggle();\n const navRef = useConsolidatedRef(ref);\n const mobileButtonRef = useRef<HTMLButtonElement>(null);\n const navId = useUID();\n const [expandCollapseEl, setExpandCollapseEl] = useElement<HTMLButtonElement>();\n\n const [mobileNavOpen, setMobileNavOpen] = useState(false);\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [mobileNavLinksCount, setMobileNavLinksCount] = useState(0);\n\n const { previewActive, setPreviewActive } = usePreviewManager();\n\n const focusedImperatively = useRef(false);\n const [headerEl, setHeaderEl] = useElement<HTMLDivElement>();\n const [mobileHeaderEl, setMobileHeaderEl] = useElement<HTMLDivElement>();\n\n const isSmallOrAbove = useBreakpoint('sm');\n\n const showAppHeader = !!appHeader && isSmallOrAbove;\n const showMainContent = showAppHeader ? !!(headerEl || mobileHeaderEl) : true;\n\n const openNavTimeoutId = useRef<ReturnType<typeof setTimeout>>();\n const closeNavTimeoutId = useRef<ReturnType<typeof setTimeout>>();\n\n const [searchContainerEl, setSearchContainerEl] = useState<HTMLElement | null>(null);\n\n const openKeyboardCommands = useKeyboardCommands();\n\n const theme = useTheme();\n\n const { state: sidebarNavState, set: setSidebarNavState } = useTransitionState({\n ref: navRef,\n property: 'width',\n states: openCloseStates,\n defaultState: defaultExpanded ? 'open' : 'closed'\n });\n\n const skipLinks: SkipLinksProps['items'] = useMemo(\n () => [\n {\n label: t('go_to_main_content'),\n target: { ariaLabel: t('main_content'), selector: 'main' }\n }\n ],\n [t]\n );\n\n const openNav = useCallback((delay: number = 0) => {\n if (closeNavTimeoutId.current) clearTimeout(closeNavTimeoutId.current);\n openNavTimeoutId.current = setTimeout(() => {\n setSidebarNavState('open');\n }, delay);\n }, []);\n\n const closeNav = useCallback((delay: number = 0) => {\n if (openNavTimeoutId.current) clearTimeout(openNavTimeoutId.current);\n closeNavTimeoutId.current = setTimeout(() => {\n setSidebarNavState('closed');\n }, delay);\n }, []);\n\n const onFocus = useCallback(() => {\n focusedImperatively.current = false;\n }, []);\n\n const mobileNavRef = useRef<HTMLDivElement>(null);\n\n useOuterEvent('focusin', [mobileNavRef, mobileButtonRef], () => setMobileNavOpen(false));\n\n useEffect(() => {\n if (mobileNavOpen) {\n disableScroll();\n } else {\n enableScroll();\n }\n }, [mobileNavOpen]);\n\n useEffect(() => {\n if (!navRef.current) return;\n const targetNode = getChildOfRootNode(navRef);\n if (!targetNode) return;\n if (!targetNode.style.getPropertyValue('--app-header-height')) {\n targetNode.style.setProperty('--app-header-height', showAppHeader ? headerHeight : '0');\n }\n }, [showAppHeader]);\n\n useEffect(() => {\n if (mobileNavOpen) {\n const onKeyDown = ({ key }: KeyboardEvent) => {\n if (key === 'Escape') setMobileNavOpen(false);\n };\n\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n };\n }\n }, [mobileNavOpen]);\n\n useEffect(() => {\n if (isSmallOrAbove && mobileNavOpen) setMobileNavOpen(false);\n }, [isSmallOrAbove, mobileNavOpen]);\n\n useLayoutEffect(() => {\n if (!mobileHeaderEl) return;\n\n document.body.style.setProperty(\n appShellBottomOffsetCSSVar,\n `calc(${mobileHeaderHeight} + var(--marking-height, 0rem))`\n );\n document.body.style.setProperty(appShellHardBottomOffsetCSSVar, 'var(--marking-height, 0rem)');\n\n const resizeObserver = new ResizeObserver(\n debounce(() => {\n const mobileHeaderWidth = mobileHeaderEl?.offsetWidth ?? 0;\n const regionsPaddingInlinePixels = mobileHeaderEl\n ? 2 *\n Number.parseInt(\n window.getComputedStyle(mobileHeaderEl).getPropertyValue('padding-inline-start'),\n 10\n )\n : 0;\n const mobileNavButton = mobileHeaderEl?.lastElementChild;\n if (mobileNavButton instanceof HTMLElement) {\n setMobileNavLinksCount(\n Math.max(\n Math.floor(\n mobileHeaderWidth / (menuButtonWidth(theme) + regionsPaddingInlinePixels)\n ) - (caseTypes?.length ? 2 : 1),\n 0\n )\n );\n }\n }, 0)\n );\n\n resizeObserver.observe(mobileHeaderEl);\n\n return () => {\n document.body.style.removeProperty(appShellBottomOffsetCSSVar);\n document.body.style.removeProperty(appShellHardBottomOffsetCSSVar);\n resizeObserver.disconnect();\n };\n }, [mobileHeaderEl, caseTypes?.length]);\n\n const activatedEl = useRef<Element>(document.body);\n useEvent('click', e => {\n activatedEl.current = document.elementFromPoint(e.clientX, e.clientY) ?? document.body;\n });\n\n useShortcut('NextRegion', () => {\n const activeElement =\n document.activeElement && document.activeElement !== document.body\n ? document.activeElement\n : activatedEl.current;\n const regionEls = followingNodes<HTMLElement>(\n document.createNodeIterator(document.body, NodeFilter.SHOW_ELEMENT, node =>\n // safe to treat as Element, as we requested to give us only elements\n (node as Element).hasAttribute('data-app-region') || node === activeElement\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP\n ),\n activeElement\n );\n // try to focus first visibleregion\n const focusedNode = regionEls.find(node => focusRegion(node));\n if (!focusedNode) (activeElement as HTMLElement).focus();\n });\n\n useShortcut('PrevRegion', () => {\n const activeElement =\n document.activeElement && document.activeElement !== document.body\n ? document.activeElement\n : activatedEl.current;\n const regionEls = followingNodes<HTMLElement>(\n document.createNodeIterator(document.body, NodeFilter.SHOW_ELEMENT, node =>\n // safe to treat as Element, as we requested to give us only elements\n (node as Element).hasAttribute('data-app-region') || node === activeElement\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_SKIP\n ),\n activeElement\n );\n regionEls.reverse();\n\n // removing active element parent from the list to avoid focusing back to the same region\n // but only if element is not region himself - in that case we want to keep its parent on the list\n // as it is different focusable region\n if (regionEls[0].contains(activeElement) && !activeElement.hasAttribute('data-app-region'))\n regionEls.splice(0, 1);\n const focusedNode = regionEls.find(node => focusRegion(node));\n if (!focusedNode) (activeElement as HTMLElement).focus();\n });\n\n useShortcut('KeyboardCommands', () => {\n openKeyboardCommands();\n });\n\n const contextSwitcherUtilItem: UtilItemProps | undefined = useMemo(() => {\n const {\n contexts,\n onContextClick,\n label: contextSwitcherLabel = t('switch_to')\n } = contextSwitcher ?? {};\n if (!showAppHeader && contexts && contexts?.length > 1 && !!onContextClick) {\n return {\n name: contextSwitcherLabel,\n primary: contextSwitcherLabel,\n visual: <Icon name='dot-9-solid' />,\n drawerView: (\n <NavigationList\n items={contexts!.map(context => ({\n ...context,\n primary: context.primary,\n 'aria-current': !!context.selected,\n visual: context.visual,\n onClick: e => {\n onContextClick(context.id, e);\n }\n }))}\n singleSelect\n />\n )\n };\n }\n }, [\n showAppHeader,\n contextSwitcher?.contexts,\n contextSwitcher?.label,\n contextSwitcher?.onContextClick\n ]);\n\n const shareLabel = shareApp?.label ?? t('app_shell_share');\n\n const shareApplicationUtilItem: UtilItemProps | undefined = useMemo(() => {\n if (!showAppHeader && shareApp) {\n return {\n name: shareLabel,\n primary: shareLabel,\n visual: <Icon name='share' />,\n onClick: shareApp.onClick\n };\n }\n }, [showAppHeader, shareApp, shareLabel]);\n\n const operatorInfoUtilItem: UtilItemProps | undefined = useMemo(() => {\n if (!showAppHeader && operator) {\n return {\n name: operator.name,\n primary: t('app_shell_user_account'),\n visual: operator.avatar,\n items: operator.actions\n };\n }\n }, [showAppHeader, operator]);\n\n const { themeMode, onThemeModeChange } = useThemeMode();\n\n const themeSwitcherUtilItem: UtilItemProps | undefined = useMemo(() => {\n if (!showAppHeader && onThemeModeChange) {\n let currentThemeIcon = 'circle-mixed-left'; // default for system\n if (themeMode === 'dark') {\n currentThemeIcon = 'moon';\n } else if (themeMode === 'light') {\n currentThemeIcon = 'sun';\n }\n\n return {\n name: t('theme_mode'),\n primary: t('theme_mode'),\n visual: <Icon name={currentThemeIcon} />,\n items: [\n {\n id: 'light',\n primary: t('theme_light'),\n visual: <Icon name='sun' />,\n onClick: () => onThemeModeChange('light')\n },\n {\n id: 'dark',\n primary: t('theme_dark'),\n visual: <Icon name='moon' />,\n onClick: () => onThemeModeChange('dark')\n },\n {\n id: 'system',\n primary: t('theme_system'),\n visual: <Icon name='circle-mixed-left' />,\n onClick: () => onThemeModeChange('system')\n }\n ]\n };\n }\n }, [showAppHeader, onThemeModeChange, themeMode]);\n\n const { start, end } = useDirection();\n\n const utilsList = [\n ...(utils ?? []),\n ...(contextSwitcherUtilItem ? [contextSwitcherUtilItem] : []),\n ...(shareApplicationUtilItem ? [shareApplicationUtilItem] : []),\n ...(operatorInfoUtilItem ? [operatorInfoUtilItem] : []),\n ...(themeSwitcherUtilItem ? [themeSwitcherUtilItem] : [])\n ];\n\n return (\n <AppShellContext.Provider\n value={useMemo(\n () => ({\n navOpen: sidebarNavState === 'open' || sidebarNavState === 'opening' || mobileNavOpen,\n drawerOpen,\n setDrawerOpen,\n collapsedHoverMenus,\n navState: sidebarNavState,\n focusedImperatively,\n headerEl: headerEl || mobileHeaderEl,\n searchContainerEl,\n setSearchContainerEl,\n isMobileNav: !isSmallOrAbove,\n previewActive,\n setPreviewActive\n }),\n [\n sidebarNavState,\n drawerOpen,\n mobileNavOpen,\n isSmallOrAbove,\n headerEl,\n mobileHeaderEl,\n searchContainerEl,\n previewActive\n ]\n )}\n >\n <SkipLinks items={skipLinks} />\n {showAppHeader && (\n <AppHeader\n {...appInfo}\n contextSwitcher={contextSwitcher}\n searchInput={searchInput}\n searchLabel={searchLabel}\n operator={operator}\n headerUtils={headerUtils}\n helpMenu={helpMenu}\n searchPage={searchPage}\n shareApp={shareApp}\n ref={setHeaderEl}\n />\n )}\n {isSmallOrAbove ? (\n <Flex\n {...restProps}\n container={{\n direction: 'column',\n justify: 'between'\n }}\n id={navId}\n as={StyledSidebarNav}\n withAppHeader={showAppHeader}\n portalAgent={!!agent}\n ref={navRef}\n data-app-region\n onFocus={onFocus}\n aria-label={t('app_shell_main_navigation_label')}\n >\n <AppNavigationPanel\n navState={sidebarNavState}\n appInfo={!showAppHeader ? appInfo : undefined}\n searchInput={!showAppHeader ? searchInput : undefined}\n searchLabel={searchLabel}\n caseTypes={caseTypes}\n links={links}\n cases={cases}\n contextSwitcher={!showAppHeader ? contextSwitcher : undefined}\n operator={!showAppHeader ? operator : undefined}\n utils={utilsList}\n onClick={() => {\n if (['closing', 'closed'].includes(sidebarNavState)) {\n openNav(0);\n } else {\n closeNav(0);\n }\n }}\n agent={agent}\n />\n <Flex container={{ justify: 'center' }}>\n <StyledAppShellToggleButton\n icon\n ref={setExpandCollapseEl}\n compact\n variant='simple'\n onClick={() => {\n setSidebarNavState(sidebarNavState === 'closed' ? 'open' : 'closed');\n }}\n aria-label={\n sidebarNavState === 'closed' ? t('expand_navigation') : t('collapse_navigation')\n }\n aria-expanded={sidebarNavState === 'open' || sidebarNavState === 'opening'}\n aria-controls={navId}\n >\n {['closed', 'closing'].includes(sidebarNavState) ? (\n <Icon name={`arrow-micro-${end}`} />\n ) : (\n <Icon name={`arrow-micro-${start}`} />\n )}\n </StyledAppShellToggleButton>\n\n {['open', 'closed'].includes(sidebarNavState) && (\n <Tooltip\n target={expandCollapseEl}\n placement='right'\n as={StyledAppShellTooltip}\n showDelay='none'\n hideDelay='none'\n >\n {sidebarNavState === 'closed' ? t('expand_navigation') : t('collapse_navigation')}\n </Tooltip>\n )}\n </Flex>\n </Flex>\n ) : (\n <>\n <Flex\n as={StyledMobileNav}\n container={{ alignItems: 'center', justify: 'stretch', gap: 0.25 }}\n ref={setMobileHeaderEl}\n data-app-region\n >\n {caseTypes && caseTypes.length > 0 && <CaseTypes caseTypes={caseTypes} mobileNavBar />}\n {links && <Links links={links.slice(0, mobileNavLinksCount)} mobileNavBar />}\n <StyledMobileMoreMenuButton\n ref={mobileButtonRef}\n variant='simple'\n onClick={() => setMobileNavOpen(prev => !prev)}\n label={t('app_shell_more')}\n icon\n aria-expanded={mobileNavOpen}\n aria-controls={navId}\n >\n <Icon name='more' />\n {!mobileNavOpen &&\n utils?.some(item => (isValidElement(item) ? false : !!item.count)) && (\n <Alert variant='urgent' />\n )}\n <span>{t('app_shell_more')}</span>\n </StyledMobileMoreMenuButton>\n </Flex>\n <Drawer\n open={mobileNavOpen}\n ref={mobileNavRef}\n onAfterClose={() => {\n setMobileNavOpen(false);\n }}\n position='fixed'\n placement='bottom'\n size={`calc(100dvh - ${mobileHeaderHeight})`}\n nullWhenClosed\n >\n <Flex\n {...restProps}\n container={{\n direction: 'column',\n justify: 'between'\n }}\n id={navId}\n as={StyledMobileMoreMenu}\n ref={ref}\n aria-label={t('app_shell_main_navigation_label')}\n >\n <AppNavigationPanel\n appInfo={appInfo}\n navState='open'\n searchInput={searchInput}\n searchLabel={searchLabel}\n links={links?.slice(mobileNavLinksCount)}\n cases={cases}\n contextSwitcher={contextSwitcher}\n operator={operator}\n utils={utilsList}\n agent={agent}\n />\n </Flex>\n </Drawer>\n </>\n )}\n {showMainContent && (\n <StyledAppMain\n appHeader={showAppHeader}\n mobileNav={!isSmallOrAbove}\n previewActive={previewActive}\n headerOffset={isSmallOrAbove ? headerEl?.offsetHeight : undefined}\n navOpen={['open', 'opening'].includes(sidebarNavState)}\n aria-busy={!!progress}\n data-app-region\n >\n <Progress\n visible={!!progress}\n placement='local'\n message={typeof progress === 'string' ? progress : t('loading')}\n />\n\n {banners && <StyledBannerRegion>{banners}</StyledBannerRegion>}\n {main}\n </StyledAppMain>\n )}\n </AppShellContext.Provider>\n );\n});\n\nexport default AppShell;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.styles.d.ts","sourceRoot":"","sources":["../../../src/components/AppShell/AppShell.styles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAmCtD,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,YAAY,aAAa,CAAC;AACvC,eAAO,MAAM,YAAY,SAAS,CAAC;AACnC,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAI5C,eAAO,MAAM,eAAe,GAAI,OAAO,YAAY,WAQhD,CAAC;AAEJ,eAAO,MAAM,aAAa,yOA8CxB,CAAC;AAIH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oMAS3B,CAAC;AAIH,eAAO,MAAM,oBAAoB;cAA0B,OAAO;YAkBhE,CAAC;AAIH,eAAO,MAAM,eAAe;;;;iDAK3B,CAAC;AAIF,eAAO,MAAM,yBAAyB,+NAOpC,CAAC;AAIH,eAAO,MAAM,+BAA+B,kYAAiB,CAAC;AAE9D,eAAO,MAAM,+BAA+B,kYAoB1C,CAAC;AAIH,eAAO,MAAM,mBAAmB,+NAE/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,+NAgB/B,CAAC;AAwCH,eAAO,MAAM,gBAAgB;;;mBACZ,OAAO;kBACR,OAAO;YA8BrB,CAAC;AAIH,eAAO,MAAM,eAAe,yOAAkB,CAAC;AAE/C,eAAO,MAAM,gCAAgC;eAChC,OAAO;aACT,OAAO;YAqCjB,CAAC;AAIF,eAAO,MAAM,iBAAiB;yBACP,OAAO;kBACd,OAAO;YA0MrB,CAAC;AAIH,eAAO,MAAM,aAAa,iOAexB,CAAC;AAGH,eAAO,MAAM,kBAAkB,6NAQ7B,CAAC;AAIH,eAAO,MAAM,mBAAmB;;mBAiE9B,CAAC;AAIH,eAAO,MAAM,eAAe,6NA2B1B,CAAC;AAIH,eAAO,MAAM,WAAW,6NAUtB,CAAC;AAIH,eAAO,MAAM,oBAAoB;;mBAIhC,CAAC;AAIF,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"AppShell.styles.d.ts","sourceRoot":"","sources":["../../../src/components/AppShell/AppShell.styles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAmCtD,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,YAAY,aAAa,CAAC;AACvC,eAAO,MAAM,YAAY,SAAS,CAAC;AACnC,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAI5C,eAAO,MAAM,eAAe,GAAI,OAAO,YAAY,WAQhD,CAAC;AAEJ,eAAO,MAAM,aAAa,yOA8CxB,CAAC;AAIH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oMAS3B,CAAC;AAIH,eAAO,MAAM,oBAAoB;cAA0B,OAAO;YAkBhE,CAAC;AAIH,eAAO,MAAM,eAAe;;;;iDAK3B,CAAC;AAIF,eAAO,MAAM,yBAAyB,+NAOpC,CAAC;AAIH,eAAO,MAAM,+BAA+B,kYAAiB,CAAC;AAE9D,eAAO,MAAM,+BAA+B,kYAoB1C,CAAC;AAIH,eAAO,MAAM,mBAAmB,+NAE/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,+NAgB/B,CAAC;AAwCH,eAAO,MAAM,gBAAgB;;;mBACZ,OAAO;kBACR,OAAO;YA8BrB,CAAC;AAIH,eAAO,MAAM,eAAe,yOAAkB,CAAC;AAE/C,eAAO,MAAM,gCAAgC;eAChC,OAAO;aACT,OAAO;YAqCjB,CAAC;AAIF,eAAO,MAAM,iBAAiB;yBACP,OAAO;kBACd,OAAO;YA0MrB,CAAC;AAIH,eAAO,MAAM,aAAa,iOAexB,CAAC;AAGH,eAAO,MAAM,kBAAkB,6NAQ7B,CAAC;AAIH,eAAO,MAAM,mBAAmB;;mBAiE9B,CAAC;AAIH,eAAO,MAAM,eAAe,6NA2B1B,CAAC;AAIH,eAAO,MAAM,WAAW,6NAUtB,CAAC;AAIH,eAAO,MAAM,oBAAoB;;mBAIhC,CAAC;AAIF,eAAO,MAAM,eAAe,uNAqF1B,CAAC;AAIH,eAAO,MAAM,0BAA0B;;2JAiDrC,CAAC;AAIH,eAAO,MAAM,aAAa,6NAEzB,CAAC;AAEF,eAAO,MAAM,aAAa;eACb,OAAO;eACP,OAAO;aACT,OAAO;mBACD,OAAO;mBACP,MAAM;YAuErB,CAAC;AAIH,eAAO,MAAM,kBAAkB,6NAI7B,CAAC;AAIH,eAAO,MAAM,qBAAqB;;mBAwBhC,CAAC;AAIH,eAAO,MAAM,0BAA0B;;2JAkCrC,CAAC;AAIH,eAAO,MAAM,kBAAkB,6NAU9B,CAAC;AAIF,eAAO,MAAM,iBAAiB,6NAwG5B,CAAC"}
|
|
@@ -574,17 +574,23 @@ export const StyledMobileNav = styled.header(({ theme }) => {
|
|
|
574
574
|
color: ${foreground};
|
|
575
575
|
padding: calc(0.25 * ${theme.base.spacing});
|
|
576
576
|
position: fixed;
|
|
577
|
-
|
|
577
|
+
/* stylelint-disable-next-line unit-allowed-list */
|
|
578
|
+
inset-block-start: calc(100dvh - var(--appshell-bottom-offset, ${mobileHeaderHeight}));
|
|
578
579
|
|
|
579
580
|
& + ${StyledDrawer}, & + ${StyledDrawer} ${StyledDrawer} {
|
|
580
|
-
bottom: ${mobileHeaderHeight};
|
|
581
|
+
bottom: var(--appshell-bottom-offset, ${mobileHeaderHeight});
|
|
581
582
|
width: 100%;
|
|
582
583
|
/* stylelint-disable-next-line unit-allowed-list */
|
|
583
|
-
height: calc(
|
|
584
|
+
height: calc(
|
|
585
|
+
100dvh - var(--appshell-bottom-offset, ${mobileHeaderHeight}) - var(
|
|
586
|
+
--appshell-top-offset,
|
|
587
|
+
0rem
|
|
588
|
+
)
|
|
589
|
+
);
|
|
584
590
|
}
|
|
585
591
|
|
|
586
592
|
> div:has(> ${StyledNavList}),
|
|
587
|
-
> div:has(> ${StyledNavList}) > ${StyledNavList} {
|
|
593
|
+
> div:has(> ${StyledNavList}) > ${StyledNavList}, > ${StyledNavList} {
|
|
588
594
|
display: contents;
|
|
589
595
|
|
|
590
596
|
${StyledNavListItem} {
|
|
@@ -698,8 +704,13 @@ export const StyledAppMain = styled.main(({ appHeader, mobileNav, navOpen, previ
|
|
|
698
704
|
|
|
699
705
|
${mobileNav &&
|
|
700
706
|
css `
|
|
701
|
-
|
|
702
|
-
|
|
707
|
+
position: fixed;
|
|
708
|
+
inset-inline: 0;
|
|
709
|
+
/* stylelint-disable-next-line length-zero-no-unit */
|
|
710
|
+
inset-block-start: var(--appshell-top-offset, 0rem);
|
|
711
|
+
inset-block-end: var(--appshell-bottom-offset, ${mobileHeaderHeight});
|
|
712
|
+
height: auto;
|
|
713
|
+
min-height: unset;
|
|
703
714
|
overflow: auto;
|
|
704
715
|
`}
|
|
705
716
|
${navOpen &&
|