@pega/cosmos-react-demos 4.0.0-dev.18.0 → 4.0.0-dev.18.2
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/jsx/core/AIButton/AIButton.stories.d.ts +5 -1
- package/jsx/core/AIButton/AIButton.stories.d.ts.map +1 -1
- package/jsx/core/AIButton/AIButton.stories.jsx +55 -28
- package/jsx/core/AIButton/AIButton.stories.jsx.map +1 -1
- package/jsx/core/AppShell/AppShell.stories.d.ts.map +1 -1
- package/jsx/core/AppShell/AppShell.stories.jsx +8 -54
- package/jsx/core/AppShell/AppShell.stories.jsx.map +1 -1
- package/jsx/core/Banner/Banner.stories.d.ts.map +1 -1
- package/jsx/core/Banner/Banner.stories.jsx +17 -11
- package/jsx/core/Banner/Banner.stories.jsx.map +1 -1
- package/jsx/core/Dialog/FormDialog.mocks.d.ts.map +1 -1
- package/jsx/core/Dialog/FormDialog.mocks.jsx +4 -2
- package/jsx/core/Dialog/FormDialog.mocks.jsx.map +1 -1
- package/jsx/core/Dialog/InfoDialog.mocks.d.ts.map +1 -1
- package/jsx/core/Dialog/InfoDialog.mocks.jsx +2 -1
- package/jsx/core/Dialog/InfoDialog.mocks.jsx.map +1 -1
- package/jsx/core/Modal/Modal.stories.d.ts.map +1 -1
- package/jsx/core/Modal/Modal.stories.jsx +2 -1
- package/jsx/core/Modal/Modal.stories.jsx.map +1 -1
- package/jsx/core/MultiStepForm/MultiStepForm.mocks.d.ts +36 -3
- package/jsx/core/MultiStepForm/MultiStepForm.mocks.d.ts.map +1 -1
- package/jsx/core/MultiStepForm/MultiStepForm.mocks.jsx +294 -39
- package/jsx/core/MultiStepForm/MultiStepForm.mocks.jsx.map +1 -1
- package/jsx/core/MultiStepForm/MultiStepForm.stories.d.ts +2 -5
- package/jsx/core/MultiStepForm/MultiStepForm.stories.d.ts.map +1 -1
- package/jsx/core/MultiStepForm/MultiStepForm.stories.jsx +59 -172
- package/jsx/core/MultiStepForm/MultiStepForm.stories.jsx.map +1 -1
- package/jsx/core/Progress/Progress.mocks.d.ts +2 -0
- package/jsx/core/Progress/Progress.mocks.d.ts.map +1 -0
- package/jsx/core/Progress/Progress.mocks.js +2 -0
- package/jsx/core/Progress/Progress.mocks.js.map +1 -0
- package/jsx/core/Progress/Progress.stories.d.ts.map +1 -1
- package/jsx/core/Progress/Progress.stories.jsx +2 -2
- package/jsx/core/Progress/Progress.stories.jsx.map +1 -1
- package/jsx/core/Tooltip/Tooltip.stories.d.ts +1 -0
- package/jsx/core/Tooltip/Tooltip.stories.d.ts.map +1 -1
- package/jsx/core/Tooltip/Tooltip.stories.jsx +21 -1
- package/jsx/core/Tooltip/Tooltip.stories.jsx.map +1 -1
- package/jsx/core/Tooltip/Tooltip.styles.d.ts +2 -0
- package/jsx/core/Tooltip/Tooltip.styles.d.ts.map +1 -0
- package/jsx/core/Tooltip/Tooltip.styles.js +23 -0
- package/jsx/core/Tooltip/Tooltip.styles.js.map +1 -0
- package/jsx/work/Assignments/Assignments.stories.d.ts.map +1 -1
- package/jsx/work/Assignments/Assignments.stories.jsx +3 -29
- package/jsx/work/Assignments/Assignments.stories.jsx.map +1 -1
- package/jsx/work/CaseView/Attachments.mocks.d.ts.map +1 -1
- package/jsx/work/CaseView/Attachments.mocks.jsx +62 -60
- package/jsx/work/CaseView/Attachments.mocks.jsx.map +1 -1
- package/jsx/work/CaseView/CaseView.mocks.d.ts.map +1 -1
- package/jsx/work/CaseView/CaseView.mocks.jsx +97 -9
- package/jsx/work/CaseView/CaseView.mocks.jsx.map +1 -1
- package/jsx/work/CaseView/CaseView.stories.d.ts +2 -2
- package/jsx/work/CaseView/CaseView.stories.d.ts.map +1 -1
- package/jsx/work/CaseView/CaseView.stories.jsx +2 -2
- package/jsx/work/CaseView/CaseView.stories.jsx.map +1 -1
- package/jsx/work/CaseView/FileService.mock.d.ts.map +1 -1
- package/jsx/work/CaseView/FileService.mock.jsx +2 -6
- package/jsx/work/CaseView/FileService.mock.jsx.map +1 -1
- package/jsx/work/Tasks/Tasks.stories.d.ts.map +1 -1
- package/jsx/work/Tasks/Tasks.stories.jsx +3 -29
- package/jsx/work/Tasks/Tasks.stories.jsx.map +1 -1
- package/lib/core/AIButton/AIButton.stories.d.ts +5 -1
- package/lib/core/AIButton/AIButton.stories.d.ts.map +1 -1
- package/lib/core/AIButton/AIButton.stories.js +57 -29
- package/lib/core/AIButton/AIButton.stories.js.map +1 -1
- package/lib/core/AppShell/AppShell.stories.d.ts.map +1 -1
- package/lib/core/AppShell/AppShell.stories.js +9 -21
- package/lib/core/AppShell/AppShell.stories.js.map +1 -1
- package/lib/core/Banner/Banner.stories.d.ts.map +1 -1
- package/lib/core/Banner/Banner.stories.js +17 -11
- package/lib/core/Banner/Banner.stories.js.map +1 -1
- package/lib/core/Dialog/FormDialog.mocks.d.ts.map +1 -1
- package/lib/core/Dialog/FormDialog.mocks.js +4 -2
- package/lib/core/Dialog/FormDialog.mocks.js.map +1 -1
- package/lib/core/Dialog/InfoDialog.mocks.d.ts.map +1 -1
- package/lib/core/Dialog/InfoDialog.mocks.js +2 -1
- package/lib/core/Dialog/InfoDialog.mocks.js.map +1 -1
- package/lib/core/Modal/Modal.stories.d.ts.map +1 -1
- package/lib/core/Modal/Modal.stories.js +2 -1
- package/lib/core/Modal/Modal.stories.js.map +1 -1
- package/lib/core/MultiStepForm/MultiStepForm.mocks.d.ts +36 -3
- package/lib/core/MultiStepForm/MultiStepForm.mocks.d.ts.map +1 -1
- package/lib/core/MultiStepForm/MultiStepForm.mocks.js +269 -31
- package/lib/core/MultiStepForm/MultiStepForm.mocks.js.map +1 -1
- package/lib/core/MultiStepForm/MultiStepForm.stories.d.ts +2 -5
- package/lib/core/MultiStepForm/MultiStepForm.stories.d.ts.map +1 -1
- package/lib/core/MultiStepForm/MultiStepForm.stories.js +54 -170
- package/lib/core/MultiStepForm/MultiStepForm.stories.js.map +1 -1
- package/lib/core/Progress/Progress.mocks.d.ts +2 -0
- package/lib/core/Progress/Progress.mocks.d.ts.map +1 -0
- package/lib/core/Progress/Progress.mocks.js +2 -0
- package/lib/core/Progress/Progress.mocks.js.map +1 -0
- package/lib/core/Progress/Progress.stories.d.ts.map +1 -1
- package/lib/core/Progress/Progress.stories.js +2 -2
- package/lib/core/Progress/Progress.stories.js.map +1 -1
- package/lib/core/Tooltip/Tooltip.stories.d.ts +1 -0
- package/lib/core/Tooltip/Tooltip.stories.d.ts.map +1 -1
- package/lib/core/Tooltip/Tooltip.stories.js +9 -1
- package/lib/core/Tooltip/Tooltip.stories.js.map +1 -1
- package/lib/core/Tooltip/Tooltip.styles.d.ts +2 -0
- package/lib/core/Tooltip/Tooltip.styles.d.ts.map +1 -0
- package/lib/core/Tooltip/Tooltip.styles.js +23 -0
- package/lib/core/Tooltip/Tooltip.styles.js.map +1 -0
- package/lib/work/Assignments/Assignments.stories.d.ts.map +1 -1
- package/lib/work/Assignments/Assignments.stories.js +4 -10
- package/lib/work/Assignments/Assignments.stories.js.map +1 -1
- package/lib/work/CaseView/Attachments.mocks.d.ts.map +1 -1
- package/lib/work/CaseView/Attachments.mocks.js +77 -70
- package/lib/work/CaseView/Attachments.mocks.js.map +1 -1
- package/lib/work/CaseView/CaseView.mocks.d.ts.map +1 -1
- package/lib/work/CaseView/CaseView.mocks.js +61 -9
- package/lib/work/CaseView/CaseView.mocks.js.map +1 -1
- package/lib/work/CaseView/CaseView.stories.d.ts +2 -2
- package/lib/work/CaseView/CaseView.stories.d.ts.map +1 -1
- package/lib/work/CaseView/CaseView.stories.js +2 -2
- package/lib/work/CaseView/CaseView.stories.js.map +1 -1
- package/lib/work/CaseView/FileService.mock.d.ts.map +1 -1
- package/lib/work/CaseView/FileService.mock.js +2 -6
- package/lib/work/CaseView/FileService.mock.js.map +1 -1
- package/lib/work/Tasks/Tasks.stories.d.ts.map +1 -1
- package/lib/work/Tasks/Tasks.stories.js +4 -10
- package/lib/work/Tasks/Tasks.stories.js.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Progress.stories.jsx","sourceRoot":"","sources":["../../../src/core/Progress/Progress.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAiB,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAe;IACb,KAAK,EAAE,eAAe;IACtB,SAAS,EAAE,QAAQ;IACnB,cAAc,EAAE,CAAC,sBAAsB,CAAC;IACxC,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,KAAK;QAClB,KAAK,EAAE,EAAE;QACT,cAAc,EAAE,KAAK;QACrB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,MAAM;KAClB;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAC9E,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAC3F,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QACtC,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;QAChD,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;QAC7C,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QACtC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;QACzC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;QAC1C,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;KAC7F;CACM,CAAC;AASV,MAAM,CAAC,MAAM,YAAY,GAA6B,CAAC,IAAuB,EAAE,EAAE;IAChF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC;IAC1C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,yBAAyB,EAAE,mBAAmB,CAAC,CAAC;IAC9F,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAChC,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC/B;QAED,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;YAC9B,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;SAC3B;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAEjC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAChC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC1B;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM;YAAE,OAAO;QAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,QAAQ,IAAI,CAAC,SAAS,EAAE;gBACtB,KAAK,SAAS,CAAC,CAAC;oBACd,IAAI,YAAY,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC;wBAAE,eAAe,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;;wBACrE,eAAe,CAAC,CAAC,CAAC,CAAC;oBACxB,MAAM;iBACP;gBACD,KAAK,OAAO,CAAC,CAAC;oBACZ,IAAI,KAAK,GAAG,GAAG;wBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;;wBAChD,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACjB,MAAM;iBACP;gBACD,KAAK,SAAS,CAAC,CAAC;oBACd,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC;oBACrB,MAAM;iBACP;gBACD;oBACE,MAAM;aACT;QACH,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEb,IAAI,CAAC,OAAO,EAAE;YACZ,YAAY,CAAC,OAAO,CAAC,CAAC;SACvB;QAED,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvD,OAAO,CACL,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAC/C;MAAA,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAErC;;MAAA,CAAC,cAAc,CACb;QAAA,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,CACpD,CAAC,IAAI,CACH;;;;;;;UAMF,EAAE,IAAI,CAAC,CACR,CACD;QAAA,CAAC,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAC3D;QAAA,CAAC,QAAQ,CACP,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CACtB,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAC1E,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,cAAc,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CACpC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAExE;MAAA,EAAE,cAAc,CAClB;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,oBAAoB,GAAqC,CACpE,IAA+B,EAC/B,EAAE;IACF,OAAO,CACL,CAAC,aAAa,CACZ,KAAK,CAAC,CAAC;YACL,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,gBAAgB,EAAE,IAAI,CAAC,aAAa;iBACrC;aACF;SACF,CAAC,CAEF;MAAA,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAC/E;QAAA,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAC9E;MAAA,EAAE,IAAI,CACR;IAAA,EAAE,aAAa,CAAC,CACjB,CAAC;AACJ,CAAC,CAAC;AAEF,oBAAoB,CAAC,IAAI,GAAG;IAC1B,aAAa,EAAE,SAAS;CACzB,CAAC;AAEF,oBAAoB,CAAC,QAAQ,GAAG;IAC9B,aAAa,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC7C,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACvC,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;CACtC,CAAC","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport { Meta, Story } from '@storybook/react';\n\nimport { Configuration, Flex, Progress, ProgressProps, Text } from '@pega/cosmos-react-core';\n\nimport { StyledDemoWrap } from './Progress.styles';\n\nexport default {\n title: 'Core/Progress',\n component: Progress,\n excludeStories: ['ConfigurableProgress'],\n args: {\n variant: 'ring',\n placement: 'local',\n message: '',\n determinate: false,\n value: 67,\n focusOnVisible: false,\n visible: true,\n announce: false,\n cycleProp: 'none'\n },\n argTypes: {\n variant: { options: ['ring', 'bar', 'ellipsis'], control: { type: 'select' } },\n placement: { options: ['local', 'global', 'block', 'inline'], control: { type: 'select' } },\n message: { control: { type: 'text' } },\n focusOnVisible: { control: { type: 'boolean' } },\n determinate: { control: { type: 'boolean' } },\n value: { control: { type: 'number' } },\n visible: { control: { type: 'boolean' } },\n announce: { control: { type: 'boolean' } },\n cycleProp: { control: { type: 'select' }, options: ['none', 'value', 'message', 'visible'] }\n }\n} as Meta;\n\ninterface ProgressDemoProps extends ProgressProps {\n announce?: boolean;\n determinate?: boolean;\n focusOnVisible?: boolean;\n cycleProp?: 'none' | 'value' | 'message' | 'visible';\n}\n\nexport const ProgressDemo: Story<ProgressDemoProps> = (args: ProgressDemoProps) => {\n const cycling = args.cycleProp !== 'none';\n const [visible, setVisible] = useState(args.visible);\n const [value, setValue] = useState(args.value ?? 0);\n const messages = ['Loading', 'Getting ready', 'Working on your request', 'Resolving content'];\n const [messageIndex, setMessageIndex] = useState(0);\n const message = useMemo(() => {\n if (args.cycleProp === 'message') {\n return messages[messageIndex];\n }\n\n return args.message;\n }, [args.cycleProp, args.message, messageIndex]);\n\n useEffect(() => {\n if (args.cycleProp !== 'value') {\n setValue(args.value ?? 0);\n }\n }, [args.cycleProp, args.value]);\n\n useEffect(() => {\n if (args.cycleProp !== 'visible') {\n setVisible(args.visible);\n }\n }, [args.cycleProp, args.visible]);\n\n useEffect(() => {\n if (args.cycleProp === 'none') return;\n\n const duration = args.cycleProp === 'value' ? 2000 : 3000;\n const timeout = setTimeout(() => {\n switch (args.cycleProp) {\n case 'message': {\n if (messageIndex < messages.length - 1) setMessageIndex(messageIndex + 1);\n else setMessageIndex(0);\n break;\n }\n case 'value': {\n if (value < 100) setValue(Math.min(value + 10, 100));\n else setValue(0);\n break;\n }\n case 'visible': {\n setVisible(!visible);\n break;\n }\n default:\n break;\n }\n }, duration);\n\n if (!cycling) {\n clearTimeout(timeout);\n }\n\n return () => clearTimeout(timeout);\n }, [args.cycleProp, message, visible, value, cycling]);\n\n return (\n <Flex container={{ direction: 'column', gap: 1 }}>\n <Text variant='h1'>Demo Content</Text>\n\n <StyledDemoWrap>\n {['block', 'local'].includes(args.placement || '') && (\n <Text>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor\n incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud\n exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure\n dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt\n mollit anim id est laborum.\n </Text>\n )}\n {args.placement === 'inline' && <Text>Progress demo </Text>}\n <Progress\n variant={args.variant}\n placement={args.placement}\n message={message}\n value={args.determinate || args.cycleProp === 'value' ? value : undefined}\n visible={visible}\n focusOnVisible={args.focusOnVisible}\n liveConfig={args.announce ? { contextualLabel: 'Demo' } : undefined}\n />\n </StyledDemoWrap>\n </Flex>\n );\n};\n\ninterface ConfigurableProgressProps extends ProgressProps {\n progressColor?: string;\n}\n\nexport const ConfigurableProgress: Story<ConfigurableProgressProps> = (\n args: ConfigurableProgressProps\n) => {\n return (\n <Configuration\n theme={{\n components: {\n progress: {\n 'progress-color': args.progressColor\n }\n }\n }}\n >\n <Flex container={{ justify: 'center', alignItems: 'center' }} as={StyledDemoWrap}>\n <Progress variant={args.variant} placement='local' message='Loading' visible />\n </Flex>\n </Configuration>\n );\n};\n\nConfigurableProgress.args = {\n progressColor: '#076bc9'\n};\n\nConfigurableProgress.argTypes = {\n progressColor: { control: { type: 'color' } },\n placement: { table: { disable: true } },\n message: { table: { disable: true } }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Progress.stories.jsx","sourceRoot":"","sources":["../../../src/core/Progress/Progress.stories.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport { Meta, Story } from '@storybook/react';\n\nimport { Configuration, Flex, Progress, ProgressProps, Text } from '@pega/cosmos-react-core';\n\nimport { StyledDemoWrap } from './Progress.styles';\nimport { loadingTimeoutMS } from './Progress.mocks';\n\nexport default {\n title: 'Core/Progress',\n component: Progress,\n excludeStories: ['ConfigurableProgress'],\n args: {\n variant: 'ring',\n placement: 'local',\n message: '',\n determinate: false,\n value: 67,\n focusOnVisible: false,\n visible: true,\n announce: false,\n cycleProp: 'none'\n },\n argTypes: {\n variant: { options: ['ring', 'bar', 'ellipsis'], control: { type: 'select' } },\n placement: { options: ['local', 'global', 'block', 'inline'], control: { type: 'select' } },\n message: { control: { type: 'text' } },\n focusOnVisible: { control: { type: 'boolean' } },\n determinate: { control: { type: 'boolean' } },\n value: { control: { type: 'number' } },\n visible: { control: { type: 'boolean' } },\n announce: { control: { type: 'boolean' } },\n cycleProp: { control: { type: 'select' }, options: ['none', 'value', 'message', 'visible'] }\n }\n} as Meta;\n\ninterface ProgressDemoProps extends ProgressProps {\n announce?: boolean;\n determinate?: boolean;\n focusOnVisible?: boolean;\n cycleProp?: 'none' | 'value' | 'message' | 'visible';\n}\n\nexport const ProgressDemo: Story<ProgressDemoProps> = (args: ProgressDemoProps) => {\n const cycling = args.cycleProp !== 'none';\n const [visible, setVisible] = useState(args.visible);\n const [value, setValue] = useState(args.value ?? 0);\n const messages = ['Loading', 'Getting ready', 'Working on your request', 'Resolving content'];\n const [messageIndex, setMessageIndex] = useState(0);\n const message = useMemo(() => {\n if (args.cycleProp === 'message') {\n return messages[messageIndex];\n }\n\n return args.message;\n }, [args.cycleProp, args.message, messageIndex]);\n\n useEffect(() => {\n if (args.cycleProp !== 'value') {\n setValue(args.value ?? 0);\n }\n }, [args.cycleProp, args.value]);\n\n useEffect(() => {\n if (args.cycleProp !== 'visible') {\n setVisible(args.visible);\n }\n }, [args.cycleProp, args.visible]);\n\n useEffect(() => {\n if (args.cycleProp === 'none') return;\n\n const timeout = setTimeout(() => {\n switch (args.cycleProp) {\n case 'message': {\n if (messageIndex < messages.length - 1) setMessageIndex(messageIndex + 1);\n else setMessageIndex(0);\n break;\n }\n case 'value': {\n if (value < 100) setValue(Math.min(value + 10, 100));\n else setValue(0);\n break;\n }\n case 'visible': {\n setVisible(!visible);\n break;\n }\n default:\n break;\n }\n }, loadingTimeoutMS);\n\n if (!cycling) {\n clearTimeout(timeout);\n }\n\n return () => clearTimeout(timeout);\n }, [args.cycleProp, message, visible, value, cycling]);\n\n return (\n <Flex container={{ direction: 'column', gap: 1 }}>\n <Text variant='h1'>Demo Content</Text>\n\n <StyledDemoWrap>\n {['block', 'local'].includes(args.placement || '') && (\n <Text>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor\n incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud\n exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure\n dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt\n mollit anim id est laborum.\n </Text>\n )}\n {args.placement === 'inline' && <Text>Progress demo </Text>}\n <Progress\n variant={args.variant}\n placement={args.placement}\n message={message}\n value={args.determinate || args.cycleProp === 'value' ? value : undefined}\n visible={visible}\n focusOnVisible={args.focusOnVisible}\n liveConfig={args.announce ? { contextualLabel: 'Demo' } : undefined}\n />\n </StyledDemoWrap>\n </Flex>\n );\n};\n\ninterface ConfigurableProgressProps extends ProgressProps {\n progressColor?: string;\n}\n\nexport const ConfigurableProgress: Story<ConfigurableProgressProps> = (\n args: ConfigurableProgressProps\n) => {\n return (\n <Configuration\n theme={{\n components: {\n progress: {\n 'progress-color': args.progressColor\n }\n }\n }}\n >\n <Flex container={{ justify: 'center', alignItems: 'center' }} as={StyledDemoWrap}>\n <Progress variant={args.variant} placement='local' message='Loading' visible />\n </Flex>\n </Configuration>\n );\n};\n\nConfigurableProgress.args = {\n progressColor: '#076bc9'\n};\n\nConfigurableProgress.argTypes = {\n progressColor: { control: { type: 'color' } },\n placement: { table: { disable: true } },\n message: { table: { disable: true } }\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.stories.d.ts","sourceRoot":"","sources":["../../../src/core/Tooltip/Tooltip.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;;
|
|
1
|
+
{"version":3,"file":"Tooltip.stories.d.ts","sourceRoot":"","sources":["../../../src/core/Tooltip/Tooltip.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;;AAM/C,wBAIU;AAEV,eAAO,MAAM,WAAW,EAAE,KAgBzB,CAAC;AAEF,UAAU,wBAAwB;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,wBAAwB,CA2B/D,CAAC;AAYF,eAAO,MAAM,YAAY,EAAE,KAyB1B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Button, Configuration, Tooltip, useElement } from '@pega/cosmos-react-core';
|
|
1
|
+
import { Button, Configuration, Flex, Tooltip, useElement } from '@pega/cosmos-react-core';
|
|
2
|
+
import { ResizeableEl } from './Tooltip.styles';
|
|
2
3
|
export default {
|
|
3
4
|
title: 'Core/Tooltip',
|
|
4
5
|
component: Tooltip,
|
|
@@ -43,4 +44,23 @@ ConfigurableTooltip.argTypes = {
|
|
|
43
44
|
foregroundColor: { control: { type: 'color' } },
|
|
44
45
|
backgroundColor: { control: { type: 'color' } }
|
|
45
46
|
};
|
|
47
|
+
export const SmartTooltip = () => {
|
|
48
|
+
const [el1, setEl1] = useElement();
|
|
49
|
+
const [el2, setEl2] = useElement();
|
|
50
|
+
const textContent1 = 'Resize me and hover: Lorem ipsum dolor sit amet';
|
|
51
|
+
const textContent2 = 'Hover or focus me: Lorem ipsum dolor sit amet';
|
|
52
|
+
return (<Flex container={{ direction: 'column', gap: 4 }}>
|
|
53
|
+
<ResizeableEl ref={setEl1}>{textContent1}</ResizeableEl>
|
|
54
|
+
{el1 && (<Tooltip target={el1} smart showDelay='none' hideDelay='none'>
|
|
55
|
+
{textContent1}
|
|
56
|
+
</Tooltip>)}
|
|
57
|
+
|
|
58
|
+
<Button as={ResizeableEl} variant='link' ref={setEl2}>
|
|
59
|
+
{textContent2}
|
|
60
|
+
</Button>
|
|
61
|
+
{el2 && (<Tooltip target={el2} smart showDelay='none' hideDelay='none'>
|
|
62
|
+
{textContent2}
|
|
63
|
+
</Tooltip>)}
|
|
64
|
+
</Flex>);
|
|
65
|
+
};
|
|
46
66
|
//# sourceMappingURL=Tooltip.stories.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.stories.jsx","sourceRoot":"","sources":["../../../src/core/Tooltip/Tooltip.stories.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"Tooltip.stories.jsx","sourceRoot":"","sources":["../../../src/core/Tooltip/Tooltip.stories.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Meta, Story } from '@storybook/react';\n\nimport { Button, Configuration, Flex, Tooltip, useElement } from '@pega/cosmos-react-core';\n\nimport { ResizeableEl } from './Tooltip.styles';\n\nexport default {\n title: 'Core/Tooltip',\n component: Tooltip,\n excludeStories: ['ConfigurableTooltip']\n} as Meta;\n\nexport const TooltipDemo: Story = () => {\n const [el, setEl] = useElement();\n\n return (\n <>\n <Button ref={setEl}>Hover me</Button>\n\n {el && (\n <Tooltip target={el}>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur finibus scelerisque\n viverra. Fusce consequat, justo at laoreet lobortis, mauris ipsum aliquet arcu, non\n convallis nisl elit id erat. Pellentesque posuere sagittis velit a molestie.\n </Tooltip>\n )}\n </>\n );\n};\n\ninterface ConfigurableTooltipProps {\n foregroundColor?: string;\n backgroundColor?: string;\n}\n\nexport const ConfigurableTooltip: Story<ConfigurableTooltipProps> = (\n args: ConfigurableTooltipProps\n) => {\n const [el, setEl] = useElement();\n\n return (\n <Configuration\n theme={{\n components: {\n tooltip: {\n 'foreground-color': args.foregroundColor,\n 'background-color': args.backgroundColor\n }\n }\n }}\n >\n <Button ref={setEl}>Hover me</Button>\n\n {el && (\n <Tooltip target={el}>\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur finibus scelerisque\n viverra. Fusce consequat, justo at laoreet lobortis, mauris ipsum aliquet arcu, non\n convallis nisl elit id erat. Pellentesque posuere sagittis velit a molestie.\n </Tooltip>\n )}\n </Configuration>\n );\n};\n\nConfigurableTooltip.args = {\n foregroundColor: '#f5f5f5',\n backgroundColor: '#3f3f3f'\n};\n\nConfigurableTooltip.argTypes = {\n foregroundColor: { control: { type: 'color' } },\n backgroundColor: { control: { type: 'color' } }\n};\n\nexport const SmartTooltip: Story = () => {\n const [el1, setEl1] = useElement();\n const [el2, setEl2] = useElement();\n const textContent1 = 'Resize me and hover: Lorem ipsum dolor sit amet';\n const textContent2 = 'Hover or focus me: Lorem ipsum dolor sit amet';\n\n return (\n <Flex container={{ direction: 'column', gap: 4 }}>\n <ResizeableEl ref={setEl1}>{textContent1}</ResizeableEl>\n {el1 && (\n <Tooltip target={el1} smart showDelay='none' hideDelay='none'>\n {textContent1}\n </Tooltip>\n )}\n\n <Button as={ResizeableEl} variant='link' ref={setEl2}>\n {textContent2}\n </Button>\n {el2 && (\n <Tooltip target={el2} smart showDelay='none' hideDelay='none'>\n {textContent2}\n </Tooltip>\n )}\n </Flex>\n );\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.styles.d.ts","sourceRoot":"","sources":["../../../src/core/Tooltip/Tooltip.styles.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,yGAkBvB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import styled, { css } from 'styled-components';
|
|
2
|
+
import { defaultThemeProp } from '@pega/cosmos-react-core/lib/theme';
|
|
3
|
+
export const ResizeableEl = styled.div(({ theme }) => {
|
|
4
|
+
return css `
|
|
5
|
+
position: relative;
|
|
6
|
+
display: inline-block;
|
|
7
|
+
resize: horizontal;
|
|
8
|
+
width: 26ch;
|
|
9
|
+
overflow: hidden;
|
|
10
|
+
white-space: nowrap;
|
|
11
|
+
text-overflow: ellipsis;
|
|
12
|
+
|
|
13
|
+
&::after {
|
|
14
|
+
content: '';
|
|
15
|
+
display: block;
|
|
16
|
+
position: absolute;
|
|
17
|
+
inset: 0;
|
|
18
|
+
border: 0.0625rem dashed ${theme.base.palette['border-line']};
|
|
19
|
+
}
|
|
20
|
+
`;
|
|
21
|
+
});
|
|
22
|
+
ResizeableEl.defaultProps = defaultThemeProp;
|
|
23
|
+
//# sourceMappingURL=Tooltip.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.styles.js","sourceRoot":"","sources":["../../../src/core/Tooltip/Tooltip.styles.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACnD,OAAO,GAAG,CAAA;;;;;;;;;;;;;;iCAcqB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;;GAE/D,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,YAAY,CAAC,YAAY,GAAG,gBAAgB,CAAC","sourcesContent":["import styled, { css } from 'styled-components';\n\nimport { defaultThemeProp } from '@pega/cosmos-react-core/lib/theme';\n\nexport const ResizeableEl = styled.div(({ theme }) => {\n return css`\n position: relative;\n display: inline-block;\n resize: horizontal;\n width: 26ch;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n\n &::after {\n content: '';\n display: block;\n position: absolute;\n inset: 0;\n border: 0.0625rem dashed ${theme.base.palette['border-line']};\n }\n `;\n});\n\nResizeableEl.defaultProps = defaultThemeProp;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Assignments.stories.d.ts","sourceRoot":"","sources":["../../../src/work/Assignments/Assignments.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Assignments.stories.d.ts","sourceRoot":"","sources":["../../../src/work/Assignments/Assignments.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAI/C,OAAO,EAEL,gBAAgB,EAGjB,MAAM,yBAAyB,CAAC;;AAKjC,wBAGU;AAEV,UAAU,qBAAqB;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,qBAAqB,CAqExD,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useState } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { MetaList, Text, Link, DateTimeDisplay, Avatar } from '@pega/cosmos-react-core';
|
|
3
3
|
import { Assignments, tasksHelpers as helpers } from '@pega/cosmos-react-work';
|
|
4
|
+
import { AIButtonFormDemo } from '../../core/AIButton/AIButton.stories';
|
|
4
5
|
import viewGroups from '../Tasks/Tasks.mocks';
|
|
5
6
|
export default {
|
|
6
7
|
title: 'Work/Assignments',
|
|
@@ -9,29 +10,6 @@ export default {
|
|
|
9
10
|
export const AssignmentsDemo = (args) => {
|
|
10
11
|
const [hasOpenTask, setHasOpenTask] = useState(false);
|
|
11
12
|
const [open, setOpen] = useState(true);
|
|
12
|
-
const DemoTaskForm = ({ onSubmit, onCancel }) => {
|
|
13
|
-
return (<Form actions={<>
|
|
14
|
-
<Button onClick={onCancel}>Cancel</Button>
|
|
15
|
-
<Button variant='primary' onClick={onSubmit}>
|
|
16
|
-
Submit
|
|
17
|
-
</Button>
|
|
18
|
-
</>}>
|
|
19
|
-
<Flex container={{ direction: 'column', itemGap: 2 }}>
|
|
20
|
-
<Input label='Text field 1' required/>
|
|
21
|
-
<Input label='Text field 2'/>
|
|
22
|
-
<NumberInput onChange={() => { }} label='Number field'/>
|
|
23
|
-
<Checkbox label='Boolean field' required/>
|
|
24
|
-
<RadioCheckGroup label='Picklist options' name='picklist-1'>
|
|
25
|
-
<RadioButton label='option 1' defaultChecked/>
|
|
26
|
-
<RadioButton label='option 2'/>
|
|
27
|
-
<RadioButton label='option 3'/>
|
|
28
|
-
</RadioCheckGroup>
|
|
29
|
-
<TextArea label='Text paragraph field' required/>
|
|
30
|
-
<FileInput label='File field'/>
|
|
31
|
-
<DateInput label='Datetime field'/>
|
|
32
|
-
</Flex>
|
|
33
|
-
</Form>);
|
|
34
|
-
};
|
|
35
13
|
const activeView = helpers.getSelectedView(viewGroups);
|
|
36
14
|
const activeViewTaskCount = args.count ?? activeView?.count ?? 0;
|
|
37
15
|
const taskArray = Array.from({
|
|
@@ -64,11 +42,7 @@ export const AssignmentsDemo = (args) => {
|
|
|
64
42
|
setHasOpenTask(true);
|
|
65
43
|
}
|
|
66
44
|
: undefined,
|
|
67
|
-
content: hasOpenTask ? (<
|
|
68
|
-
setHasOpenTask(false);
|
|
69
|
-
}} onCancel={() => {
|
|
70
|
-
setHasOpenTask(false);
|
|
71
|
-
}}/>) : null
|
|
45
|
+
content: hasOpenTask ? (<AIButtonFormDemo onCancel={() => setHasOpenTask(false)} onSubmit={() => setHasOpenTask(false)}/>) : null
|
|
72
46
|
};
|
|
73
47
|
});
|
|
74
48
|
return (<Assignments count={activeViewTaskCount} items={taskArray} collapsed={args.collapsed !== false ? open : undefined} onToggleCollapsed={args.collapsed !== false
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Assignments.stories.jsx","sourceRoot":"","sources":["../../../src/work/Assignments/Assignments.stories.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,
|
|
1
|
+
{"version":3,"file":"Assignments.stories.jsx","sourceRoot":"","sources":["../../../src/work/Assignments/Assignments.stories.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Meta, Story } from '@storybook/react';\nimport { useState } from 'react';\n\nimport { MetaList, Text, Link, DateTimeDisplay, Avatar } from '@pega/cosmos-react-core';\nimport {\n Assignments,\n AssignmentsProps,\n TaskItemProps,\n tasksHelpers as helpers\n} from '@pega/cosmos-react-work';\n\nimport { AIButtonFormDemo } from '../../core/AIButton/AIButton.stories';\nimport viewGroups from '../Tasks/Tasks.mocks';\n\nexport default {\n title: 'Work/Assignments',\n component: Assignments\n} as Meta;\n\ninterface AssignmentsStoryProps {\n collapsed?: boolean;\n count?: AssignmentsProps['count'];\n openableTasks?: boolean;\n}\n\nexport const AssignmentsDemo: Story<AssignmentsStoryProps> = (args: AssignmentsStoryProps) => {\n const [hasOpenTask, setHasOpenTask] = useState(false);\n const [open, setOpen] = useState(true);\n\n const activeView = helpers.getSelectedView(viewGroups);\n const activeViewTaskCount = args.count ?? activeView?.count ?? 0;\n\n const taskArray: TaskItemProps[] = Array.from(\n {\n length: args.count ?? activeViewTaskCount\n },\n (_, i) => {\n const dueIn = 86400000 * i;\n\n return {\n id: `${i}`,\n name: `Task ${i + 1}`,\n processName: i % 2 ? 'Demo process' : undefined,\n avatar: !hasOpenTask && <Avatar name='James Gregory' />,\n meta: !hasOpenTask && (\n <MetaList\n items={[\n <Text variant='secondary'>\n Due <DateTimeDisplay variant='relative' value={Date.now() + dueIn} />\n </Text>,\n <Link href='#demo'>Parent case link</Link>\n ]}\n />\n ),\n additionalActions: [\n {\n id: '1',\n text: 'Action 1'\n },\n {\n id: '2',\n text: 'Action 2'\n }\n ],\n onOpen:\n args.openableTasks !== false\n ? () => {\n setHasOpenTask(true);\n }\n : undefined,\n content: hasOpenTask ? (\n <AIButtonFormDemo\n onCancel={() => setHasOpenTask(false)}\n onSubmit={() => setHasOpenTask(false)}\n />\n ) : null\n };\n }\n );\n\n return (\n <Assignments\n count={activeViewTaskCount}\n items={taskArray}\n collapsed={args.collapsed !== false ? open : undefined}\n onToggleCollapsed={\n args.collapsed !== false\n ? () => {\n setOpen(cur => !cur);\n }\n : undefined\n }\n />\n );\n};\n\nAssignmentsDemo.args = {\n openableTasks: true,\n count: undefined,\n collapsed: true\n};\n\nAssignmentsDemo.argTypes = {\n count: { control: { type: 'number' } },\n openableTasks: { control: { type: 'boolean' } },\n collapsed: { control: { type: 'boolean' } }\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Attachments.mocks.d.ts","sourceRoot":"","sources":["../../../src/work/CaseView/Attachments.mocks.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Attachments.mocks.d.ts","sourceRoot":"","sources":["../../../src/work/CaseView/Attachments.mocks.tsx"],"names":[],"mappings":";AAkgBA,eAAO,MAAM,eAAe,mBAiI3B,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useState, useCallback, useContext, useEffect, useRef, useMemo, forwardRef } from 'react';
|
|
2
|
-
import { Button, FileInput, FileVisual, Progress, Modal, Text, SummaryList, ViewAll, getKindFromMimeType, getMimeTypeFromFile,
|
|
2
|
+
import { Button, FileInput, FileVisual, Progress, Modal, Text, SummaryList, ViewAll, getKindFromMimeType, getMimeTypeFromFile, Flex, Input, ComboBox, createUID, useModalManager, useModalContext, useToaster, DateTimeDisplay, MetaList, FormDialog } from '@pega/cosmos-react-core';
|
|
3
|
+
import { loadingTimeoutMS } from '../../core/Progress/Progress.mocks';
|
|
3
4
|
import { FileServiceContext, mockAttachmentListRequest, mockCategories } from './FileService.mock';
|
|
4
5
|
const getSummaryListItemProps = ({ ref, file, editFile, cancelFile, deleteFile }) => {
|
|
5
6
|
let actions;
|
|
@@ -62,9 +63,10 @@ const getSummaryListItemProps = ({ ref, file, editFile, cancelFile, deleteFile }
|
|
|
62
63
|
actions
|
|
63
64
|
};
|
|
64
65
|
};
|
|
65
|
-
const
|
|
66
|
+
const EditDialog = forwardRef(({ file, target, onSubmit, onCancel }, ref) => {
|
|
66
67
|
const [name, setName] = useState(file.name);
|
|
67
68
|
const [error, setError] = useState('');
|
|
69
|
+
const [loading, setLoading] = useState(false);
|
|
68
70
|
const [categories, setCategories] = useState(() => {
|
|
69
71
|
return [
|
|
70
72
|
{ id: createUID(), primary: 'No category', selected: false },
|
|
@@ -88,12 +90,22 @@ const EditPopover = forwardRef(({ file, target, onSubmit, onCancel }, ref) => {
|
|
|
88
90
|
}
|
|
89
91
|
: undefined;
|
|
90
92
|
}, [categories]);
|
|
91
|
-
return (<
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
return (<FormDialog ref={ref} heading='Edit attachment' target={target} progress={loading ? 'Updating attachment...' : undefined} placement='bottom-start' onCancel={onCancel} onSubmit={() => {
|
|
94
|
+
if (error)
|
|
95
|
+
return;
|
|
96
|
+
setLoading(true);
|
|
97
|
+
setTimeout(() => {
|
|
98
|
+
onSubmit({
|
|
99
|
+
name,
|
|
100
|
+
category: !selectedCategory || selectedCategory.items.text === 'No category'
|
|
101
|
+
? ''
|
|
102
|
+
: selectedCategory.items.text
|
|
103
|
+
});
|
|
104
|
+
setLoading(false);
|
|
105
|
+
}, loadingTimeoutMS);
|
|
106
|
+
}}>
|
|
107
|
+
<Flex container={{ direction: 'column', gap: 2 }}>
|
|
108
|
+
<Input label='Name' placeholder='Enter name…' value={name} info={error} status={error ? 'error' : undefined} autoFocus required onChange={(e) => {
|
|
97
109
|
setName(e.target.value);
|
|
98
110
|
if (error && e.target.value) {
|
|
99
111
|
setError('');
|
|
@@ -103,7 +115,7 @@ const EditPopover = forwardRef(({ file, target, onSubmit, onCancel }, ref) => {
|
|
|
103
115
|
setError('Name is required.');
|
|
104
116
|
}
|
|
105
117
|
}}/>
|
|
106
|
-
|
|
118
|
+
<ComboBox label='Category' placeholder='Choose…' selected={selectedCategory} menu={{
|
|
107
119
|
mode: 'single-select',
|
|
108
120
|
items: categories,
|
|
109
121
|
onItemClick: id => {
|
|
@@ -117,25 +129,8 @@ const EditPopover = forwardRef(({ file, target, onSubmit, onCancel }, ref) => {
|
|
|
117
129
|
});
|
|
118
130
|
}
|
|
119
131
|
}}/>
|
|
120
|
-
</Flex>
|
|
121
|
-
|
|
122
|
-
<Flex container={{ justify: 'between' }}>
|
|
123
|
-
<Button onClick={onCancel}>Cancel</Button>
|
|
124
|
-
<Button variant='primary' onClick={() => {
|
|
125
|
-
if (error)
|
|
126
|
-
return;
|
|
127
|
-
onSubmit({
|
|
128
|
-
name,
|
|
129
|
-
category: !selectedCategory || selectedCategory.items.text === 'No category'
|
|
130
|
-
? ''
|
|
131
|
-
: selectedCategory.items.text
|
|
132
|
-
});
|
|
133
|
-
}}>
|
|
134
|
-
Submit
|
|
135
|
-
</Button>
|
|
136
|
-
</Flex>
|
|
137
132
|
</Flex>
|
|
138
|
-
</
|
|
133
|
+
</FormDialog>);
|
|
139
134
|
});
|
|
140
135
|
const AttachmentsModal = ({ defaultMode }) => {
|
|
141
136
|
const [mode, setMode] = useState(defaultMode);
|
|
@@ -143,7 +138,8 @@ const AttachmentsModal = ({ defaultMode }) => {
|
|
|
143
138
|
const { dismiss } = useModalContext();
|
|
144
139
|
const { files, setFiles, cancelFile, attachFile, deleteFile } = useContext(FileServiceContext);
|
|
145
140
|
const [search, setSearch] = useState('');
|
|
146
|
-
const [
|
|
141
|
+
const [viewAllLoading, setViewAllLoading] = useState(true);
|
|
142
|
+
const [addNewLoading, setAddNewLoading] = useState(false);
|
|
147
143
|
const [newFiles, setNewFiles] = useState([]);
|
|
148
144
|
const attachSelected = useCallback(() => {
|
|
149
145
|
newFiles.forEach(attachFile);
|
|
@@ -151,29 +147,28 @@ const AttachmentsModal = ({ defaultMode }) => {
|
|
|
151
147
|
}, [newFiles, attachFile]);
|
|
152
148
|
const listItemEls = useRef([]);
|
|
153
149
|
const [editFileIndex, setEditFileIndex] = useState(-1);
|
|
154
|
-
const
|
|
150
|
+
const editDialogTargetLi = useMemo(() => {
|
|
155
151
|
return editFileIndex !== undefined ? listItemEls.current[editFileIndex] : undefined;
|
|
156
152
|
}, [editFileIndex, listItemEls]);
|
|
157
|
-
const menuButton = useMemo(() =>
|
|
158
|
-
?
|
|
159
|
-
: null, [
|
|
160
|
-
const
|
|
161
|
-
if (!
|
|
153
|
+
const menuButton = useMemo(() => editDialogTargetLi
|
|
154
|
+
? editDialogTargetLi.querySelector('button[aria-haspopup="menu"]')
|
|
155
|
+
: null, [editDialogTargetLi]);
|
|
156
|
+
const handleDialogClose = useCallback(() => {
|
|
157
|
+
if (!editDialogTargetLi)
|
|
162
158
|
return;
|
|
163
159
|
setEditFileIndex(-1);
|
|
164
160
|
menuButton?.focus();
|
|
165
|
-
}, [menuButton,
|
|
161
|
+
}, [menuButton, editDialogTargetLi]);
|
|
166
162
|
const handleKeydown = useCallback((e) => {
|
|
167
163
|
if (e.key === 'Escape') {
|
|
168
164
|
setEditFileIndex(-1);
|
|
169
165
|
}
|
|
170
166
|
}, []);
|
|
171
|
-
const
|
|
172
|
-
useOuterEvent('mousedown', [editPopoverRef], handlePopoverClose);
|
|
167
|
+
const editDialogRef = useRef(null);
|
|
173
168
|
useEffect(() => {
|
|
174
169
|
if (mode === 'viewAll') {
|
|
175
170
|
const timeout = setTimeout(() => {
|
|
176
|
-
|
|
171
|
+
setViewAllLoading(false);
|
|
177
172
|
}, 1000);
|
|
178
173
|
return () => {
|
|
179
174
|
clearTimeout(timeout);
|
|
@@ -181,13 +176,13 @@ const AttachmentsModal = ({ defaultMode }) => {
|
|
|
181
176
|
}
|
|
182
177
|
}, [mode]);
|
|
183
178
|
useEffect(() => {
|
|
184
|
-
if (!
|
|
179
|
+
if (!editDialogTargetLi)
|
|
185
180
|
return;
|
|
186
181
|
document.addEventListener('keydown', handleKeydown);
|
|
187
182
|
return () => {
|
|
188
183
|
document.removeEventListener('keydown', handleKeydown);
|
|
189
184
|
};
|
|
190
|
-
}, [
|
|
185
|
+
}, [editDialogTargetLi]);
|
|
191
186
|
useEffect(() => {
|
|
192
187
|
listItemEls.current = [];
|
|
193
188
|
}, [mode]);
|
|
@@ -215,12 +210,20 @@ const AttachmentsModal = ({ defaultMode }) => {
|
|
|
215
210
|
]);
|
|
216
211
|
}, [files]);
|
|
217
212
|
const actions = mode === 'addNew' ? (<>
|
|
218
|
-
<Button onClick={dismiss}>
|
|
219
|
-
|
|
213
|
+
<Button onClick={dismiss} disabled={addNewLoading}>
|
|
214
|
+
Cancel
|
|
215
|
+
</Button>
|
|
216
|
+
<Button type='submit' variant='primary' onClick={() => {
|
|
217
|
+
setAddNewLoading(true);
|
|
218
|
+
setTimeout(() => {
|
|
219
|
+
attachSelected();
|
|
220
|
+
setAddNewLoading(false);
|
|
221
|
+
}, loadingTimeoutMS);
|
|
222
|
+
}} disabled={newFiles.length === 0 || addNewLoading}>
|
|
220
223
|
Upload files
|
|
221
224
|
</Button>
|
|
222
225
|
</>) : null;
|
|
223
|
-
const content = mode === 'addNew' ? (<FileInput multiple label='Select files to upload' onFilesAdded={onFilesAdded} files={newFiles.map(f => ({ ...f, meta: f.category || undefined }))}/>) : (<ViewAll loading={
|
|
226
|
+
const content = mode === 'addNew' ? (<FileInput multiple label='Select files to upload' onFilesAdded={onFilesAdded} files={newFiles.map(f => ({ ...f, meta: f.category || undefined }))}/>) : (<ViewAll loading={viewAllLoading} items={(search ? files.filter(f => f.name.includes(search)) : files).map((file, i) => {
|
|
224
227
|
return getSummaryListItemProps({
|
|
225
228
|
ref: (el) => {
|
|
226
229
|
listItemEls.current[i] = el;
|
|
@@ -256,8 +259,8 @@ const AttachmentsModal = ({ defaultMode }) => {
|
|
|
256
259
|
}
|
|
257
260
|
}
|
|
258
261
|
]} searchInputProps={{ onSearchChange: value => setSearch(value) }}/>);
|
|
259
|
-
return (<Modal as={mode === 'addNew' ? 'form' : undefined} heading={mode === 'addNew' ? 'Add attachments' : 'Attachments'} actions={actions} onRequestDismiss={() => {
|
|
260
|
-
return !
|
|
262
|
+
return (<Modal as={mode === 'addNew' ? 'form' : undefined} heading={mode === 'addNew' ? 'Add attachments' : 'Attachments'} actions={actions} progress={addNewLoading ? { message: 'Adding attachments...' } : undefined} onRequestDismiss={() => {
|
|
263
|
+
return !editDialogTargetLi;
|
|
261
264
|
}} onSubmit={mode === 'addNew'
|
|
262
265
|
? (e) => {
|
|
263
266
|
e.preventDefault();
|
|
@@ -265,8 +268,8 @@ const AttachmentsModal = ({ defaultMode }) => {
|
|
|
265
268
|
: undefined}>
|
|
266
269
|
<>
|
|
267
270
|
{content}
|
|
268
|
-
{
|
|
269
|
-
|
|
271
|
+
{editDialogTargetLi && menuButton && (<EditDialog ref={editDialogRef} target={menuButton} file={mode === 'addNew' ? newFiles[editFileIndex] : files[editFileIndex]} onCancel={handleDialogClose} onSubmit={({ name, category }) => {
|
|
272
|
+
handleDialogClose();
|
|
270
273
|
if (mode === 'addNew') {
|
|
271
274
|
setNewFiles(cur => {
|
|
272
275
|
return cur.map((file, i) => {
|
|
@@ -304,25 +307,24 @@ export const AttachmentsMock = () => {
|
|
|
304
307
|
const { files, setFiles, cancelFile, deleteFile } = useContext(FileServiceContext);
|
|
305
308
|
const listItemEls = useRef([]);
|
|
306
309
|
const [editFileIndex, setEditFileIndex] = useState(-1);
|
|
307
|
-
const
|
|
310
|
+
const editDialogTargetLi = useMemo(() => {
|
|
308
311
|
return editFileIndex !== undefined ? listItemEls.current[editFileIndex] : undefined;
|
|
309
312
|
}, [editFileIndex, listItemEls]);
|
|
310
|
-
const menuButton = useMemo(() =>
|
|
311
|
-
?
|
|
312
|
-
: null, [
|
|
313
|
-
const
|
|
314
|
-
if (!
|
|
313
|
+
const menuButton = useMemo(() => editDialogTargetLi
|
|
314
|
+
? editDialogTargetLi.querySelector('button[aria-haspopup="menu"]')
|
|
315
|
+
: null, [editDialogTargetLi]);
|
|
316
|
+
const handleDialogClose = useCallback(() => {
|
|
317
|
+
if (!editDialogTargetLi)
|
|
315
318
|
return;
|
|
316
319
|
setEditFileIndex(-1);
|
|
317
320
|
menuButton?.focus();
|
|
318
|
-
}, [menuButton,
|
|
321
|
+
}, [menuButton, editDialogTargetLi]);
|
|
319
322
|
const handleKeydown = useCallback((e) => {
|
|
320
323
|
if (e.key === 'Escape') {
|
|
321
324
|
setEditFileIndex(-1);
|
|
322
325
|
}
|
|
323
326
|
}, []);
|
|
324
|
-
const
|
|
325
|
-
useOuterEvent('mousedown', [editPopoverRef], handlePopoverClose);
|
|
327
|
+
const editDialogRef = useRef(null);
|
|
326
328
|
useEffect(() => {
|
|
327
329
|
let mounted = true;
|
|
328
330
|
(async () => {
|
|
@@ -337,13 +339,13 @@ export const AttachmentsMock = () => {
|
|
|
337
339
|
};
|
|
338
340
|
}, []);
|
|
339
341
|
useEffect(() => {
|
|
340
|
-
if (!
|
|
342
|
+
if (!editDialogTargetLi)
|
|
341
343
|
return;
|
|
342
344
|
document.addEventListener('keydown', handleKeydown);
|
|
343
345
|
return () => {
|
|
344
346
|
document.removeEventListener('keydown', handleKeydown);
|
|
345
347
|
};
|
|
346
|
-
}, [
|
|
348
|
+
}, [editDialogTargetLi]);
|
|
347
349
|
return (<>
|
|
348
350
|
<SummaryList icon='paper-clip' name='Attachments' loading={loading} count={!loading && Array.isArray(files) ? files.length : undefined} actions={[
|
|
349
351
|
{
|
|
@@ -377,8 +379,8 @@ export const AttachmentsMock = () => {
|
|
|
377
379
|
})} onViewAll={() => {
|
|
378
380
|
createModal(AttachmentsModal, { defaultMode: 'viewAll' });
|
|
379
381
|
}}/>
|
|
380
|
-
{
|
|
381
|
-
|
|
382
|
+
{editDialogTargetLi && menuButton && (<EditDialog ref={editDialogRef} target={menuButton} file={files[editFileIndex]} onCancel={handleDialogClose} onSubmit={({ name, category }) => {
|
|
383
|
+
handleDialogClose();
|
|
382
384
|
setFiles(cur => cur.map((file, i) => {
|
|
383
385
|
if (i === editFileIndex) {
|
|
384
386
|
return {
|