@pega/cosmos-react-cs 2.0.0-dev.2.1 → 2.0.0-dev.20.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.
Files changed (162) hide show
  1. package/lib/components/Article/Article.d.ts.map +1 -1
  2. package/lib/components/Article/Article.js +4 -19
  3. package/lib/components/Article/Article.js.map +1 -1
  4. package/lib/components/Article/ArticleFooter.d.ts.map +1 -1
  5. package/lib/components/Article/ArticleFooter.js +6 -7
  6. package/lib/components/Article/ArticleFooter.js.map +1 -1
  7. package/lib/components/Article/ArticleSkeleton.d.ts.map +1 -1
  8. package/lib/components/Article/ArticleSkeleton.js +7 -8
  9. package/lib/components/Article/ArticleSkeleton.js.map +1 -1
  10. package/lib/components/ArticleList/ArticleList.d.ts.map +1 -1
  11. package/lib/components/ArticleList/ArticleList.js +6 -10
  12. package/lib/components/ArticleList/ArticleList.js.map +1 -1
  13. package/lib/components/ArticleList/ArticleListHeader.d.ts +4 -1
  14. package/lib/components/ArticleList/ArticleListHeader.d.ts.map +1 -1
  15. package/lib/components/ArticleList/ArticleListHeader.js +43 -34
  16. package/lib/components/ArticleList/ArticleListHeader.js.map +1 -1
  17. package/lib/components/ArticleList/ArticleSummary.d.ts.map +1 -1
  18. package/lib/components/ArticleList/ArticleSummary.js +10 -7
  19. package/lib/components/ArticleList/ArticleSummary.js.map +1 -1
  20. package/lib/components/ArticleList/SummarySkeleton.d.ts.map +1 -1
  21. package/lib/components/ArticleList/SummarySkeleton.js +3 -11
  22. package/lib/components/ArticleList/SummarySkeleton.js.map +1 -1
  23. package/lib/components/CSCaseView/CSCaseView.d.ts +9 -0
  24. package/lib/components/CSCaseView/CSCaseView.d.ts.map +1 -0
  25. package/lib/components/CSCaseView/CSCaseView.js +16 -0
  26. package/lib/components/CSCaseView/CSCaseView.js.map +1 -0
  27. package/lib/components/CSCaseView/index.d.ts +3 -0
  28. package/lib/components/CSCaseView/index.d.ts.map +1 -0
  29. package/lib/components/CSCaseView/index.js +2 -0
  30. package/lib/components/CSCaseView/index.js.map +1 -0
  31. package/lib/components/CallControlPanel/Call.d.ts +6 -0
  32. package/lib/components/CallControlPanel/Call.d.ts.map +1 -0
  33. package/lib/components/CallControlPanel/Call.js +145 -0
  34. package/lib/components/CallControlPanel/Call.js.map +1 -0
  35. package/lib/components/CallControlPanel/CallControlPanel.d.ts +6 -0
  36. package/lib/components/CallControlPanel/CallControlPanel.d.ts.map +1 -0
  37. package/lib/components/CallControlPanel/CallControlPanel.js +68 -0
  38. package/lib/components/CallControlPanel/CallControlPanel.js.map +1 -0
  39. package/lib/components/CallControlPanel/CallControlPanel.styles.d.ts +15 -0
  40. package/lib/components/CallControlPanel/CallControlPanel.styles.d.ts.map +1 -0
  41. package/lib/components/CallControlPanel/CallControlPanel.styles.js +118 -0
  42. package/lib/components/CallControlPanel/CallControlPanel.styles.js.map +1 -0
  43. package/lib/components/CallControlPanel/CallControlPanel.types.d.ts +112 -0
  44. package/lib/components/CallControlPanel/CallControlPanel.types.d.ts.map +1 -0
  45. package/lib/components/CallControlPanel/CallControlPanel.types.js +2 -0
  46. package/lib/components/CallControlPanel/CallControlPanel.types.js.map +1 -0
  47. package/lib/components/CallControlPanel/CallControlPanelIcon.d.ts +19 -0
  48. package/lib/components/CallControlPanel/CallControlPanelIcon.d.ts.map +1 -0
  49. package/lib/components/CallControlPanel/CallControlPanelIcon.js +74 -0
  50. package/lib/components/CallControlPanel/CallControlPanelIcon.js.map +1 -0
  51. package/lib/components/CallControlPanel/CallTransfer.d.ts +19 -0
  52. package/lib/components/CallControlPanel/CallTransfer.d.ts.map +1 -0
  53. package/lib/components/CallControlPanel/CallTransfer.js +121 -0
  54. package/lib/components/CallControlPanel/CallTransfer.js.map +1 -0
  55. package/lib/components/CallControlPanel/CalleePicker.d.ts +20 -0
  56. package/lib/components/CallControlPanel/CalleePicker.d.ts.map +1 -0
  57. package/lib/components/CallControlPanel/CalleePicker.js +61 -0
  58. package/lib/components/CallControlPanel/CalleePicker.js.map +1 -0
  59. package/lib/components/CallControlPanel/ContactsList.d.ts +23 -0
  60. package/lib/components/CallControlPanel/ContactsList.d.ts.map +1 -0
  61. package/lib/components/CallControlPanel/ContactsList.js +88 -0
  62. package/lib/components/CallControlPanel/ContactsList.js.map +1 -0
  63. package/lib/components/CallControlPanel/DTMFKeypad.d.ts +11 -0
  64. package/lib/components/CallControlPanel/DTMFKeypad.d.ts.map +1 -0
  65. package/lib/components/CallControlPanel/DTMFKeypad.js +23 -0
  66. package/lib/components/CallControlPanel/DTMFKeypad.js.map +1 -0
  67. package/lib/components/CallControlPanel/StopWatch.d.ts +9 -0
  68. package/lib/components/CallControlPanel/StopWatch.d.ts.map +1 -0
  69. package/lib/components/CallControlPanel/StopWatch.js +28 -0
  70. package/lib/components/CallControlPanel/StopWatch.js.map +1 -0
  71. package/lib/components/CallControlPanel/index.d.ts +4 -0
  72. package/lib/components/CallControlPanel/index.d.ts.map +1 -0
  73. package/lib/components/CallControlPanel/index.js +3 -0
  74. package/lib/components/CallControlPanel/index.js.map +1 -0
  75. package/lib/components/CallControlPanel/utils.d.ts +7 -0
  76. package/lib/components/CallControlPanel/utils.d.ts.map +1 -0
  77. package/lib/components/CallControlPanel/utils.js +35 -0
  78. package/lib/components/CallControlPanel/utils.js.map +1 -0
  79. package/lib/components/DialPad/DialPad.d.ts +16 -0
  80. package/lib/components/DialPad/DialPad.d.ts.map +1 -0
  81. package/lib/components/DialPad/DialPad.js +33 -0
  82. package/lib/components/DialPad/DialPad.js.map +1 -0
  83. package/lib/components/DialPad/DialPad.types.d.ts +33 -0
  84. package/lib/components/DialPad/DialPad.types.d.ts.map +1 -0
  85. package/lib/components/DialPad/DialPad.types.js +2 -0
  86. package/lib/components/DialPad/DialPad.types.js.map +1 -0
  87. package/lib/components/DialPad/DialPadKeyboard.d.ts +12 -0
  88. package/lib/components/DialPad/DialPadKeyboard.d.ts.map +1 -0
  89. package/lib/components/DialPad/DialPadKeyboard.js +87 -0
  90. package/lib/components/DialPad/DialPadKeyboard.js.map +1 -0
  91. package/lib/components/DialPad/DialPadKeyboard.styles.d.ts +5 -0
  92. package/lib/components/DialPad/DialPadKeyboard.styles.d.ts.map +1 -0
  93. package/lib/components/DialPad/DialPadKeyboard.styles.js +76 -0
  94. package/lib/components/DialPad/DialPadKeyboard.styles.js.map +1 -0
  95. package/lib/components/DialPad/KeyboardNavigation.d.ts +6 -0
  96. package/lib/components/DialPad/KeyboardNavigation.d.ts.map +1 -0
  97. package/lib/components/DialPad/KeyboardNavigation.js +156 -0
  98. package/lib/components/DialPad/KeyboardNavigation.js.map +1 -0
  99. package/lib/components/DialPad/utils.d.ts +4 -0
  100. package/lib/components/DialPad/utils.d.ts.map +1 -0
  101. package/lib/components/DialPad/utils.js +7 -0
  102. package/lib/components/DialPad/utils.js.map +1 -0
  103. package/lib/components/IntelligentGuidance/IntelligentGuidance.d.ts +6 -0
  104. package/lib/components/IntelligentGuidance/IntelligentGuidance.d.ts.map +1 -0
  105. package/lib/components/IntelligentGuidance/IntelligentGuidance.js +75 -0
  106. package/lib/components/IntelligentGuidance/IntelligentGuidance.js.map +1 -0
  107. package/lib/components/IntelligentGuidance/IntelligentGuidance.styles.d.ts +9 -0
  108. package/lib/components/IntelligentGuidance/IntelligentGuidance.styles.d.ts.map +1 -0
  109. package/lib/components/IntelligentGuidance/IntelligentGuidance.styles.js +142 -0
  110. package/lib/components/IntelligentGuidance/IntelligentGuidance.styles.js.map +1 -0
  111. package/lib/components/IntelligentGuidance/IntelligentGuidance.types.d.ts +31 -0
  112. package/lib/components/IntelligentGuidance/IntelligentGuidance.types.d.ts.map +1 -0
  113. package/lib/components/IntelligentGuidance/IntelligentGuidance.types.js +2 -0
  114. package/lib/components/IntelligentGuidance/IntelligentGuidance.types.js.map +1 -0
  115. package/lib/components/IntelligentGuidance/index.d.ts +3 -0
  116. package/lib/components/IntelligentGuidance/index.d.ts.map +1 -0
  117. package/lib/components/IntelligentGuidance/index.js +2 -0
  118. package/lib/components/IntelligentGuidance/index.js.map +1 -0
  119. package/lib/components/InteractionNotification/InteractionNotification.d.ts.map +1 -1
  120. package/lib/components/InteractionNotification/InteractionNotification.js +19 -26
  121. package/lib/components/InteractionNotification/InteractionNotification.js.map +1 -1
  122. package/lib/components/InteractionTimer/InteractionTimer.d.ts +2 -4
  123. package/lib/components/InteractionTimer/InteractionTimer.d.ts.map +1 -1
  124. package/lib/components/InteractionTimer/InteractionTimer.js +14 -11
  125. package/lib/components/InteractionTimer/InteractionTimer.js.map +1 -1
  126. package/lib/components/TaskManager/Picker/Picker.d.ts.map +1 -1
  127. package/lib/components/TaskManager/Picker/Picker.js +138 -48
  128. package/lib/components/TaskManager/Picker/Picker.js.map +1 -1
  129. package/lib/components/TaskManager/Picker/Picker.types.d.ts +11 -2
  130. package/lib/components/TaskManager/Picker/Picker.types.d.ts.map +1 -1
  131. package/lib/components/TaskManager/Picker/Picker.types.js.map +1 -1
  132. package/lib/components/TaskManager/TaskManager.context.d.ts +1 -0
  133. package/lib/components/TaskManager/TaskManager.context.d.ts.map +1 -1
  134. package/lib/components/TaskManager/TaskManager.d.ts.map +1 -1
  135. package/lib/components/TaskManager/TaskManager.js +54 -83
  136. package/lib/components/TaskManager/TaskManager.js.map +1 -1
  137. package/lib/components/TaskManager/TaskManager.styles.d.ts +15 -20
  138. package/lib/components/TaskManager/TaskManager.styles.d.ts.map +1 -1
  139. package/lib/components/TaskManager/TaskManager.styles.js +173 -166
  140. package/lib/components/TaskManager/TaskManager.styles.js.map +1 -1
  141. package/lib/components/TaskManager/TaskManager.types.d.ts +12 -6
  142. package/lib/components/TaskManager/TaskManager.types.d.ts.map +1 -1
  143. package/lib/components/TaskManager/TaskManager.types.js.map +1 -1
  144. package/lib/components/TaskManager/TaskManagerTabs.d.ts +6 -0
  145. package/lib/components/TaskManager/TaskManagerTabs.d.ts.map +1 -0
  146. package/lib/components/TaskManager/TaskManagerTabs.js +159 -0
  147. package/lib/components/TaskManager/TaskManagerTabs.js.map +1 -0
  148. package/lib/components/TaskManager/TaskView.d.ts.map +1 -1
  149. package/lib/components/TaskManager/TaskView.js +3 -6
  150. package/lib/components/TaskManager/TaskView.js.map +1 -1
  151. package/lib/components/TaskManager/index.d.ts +1 -1
  152. package/lib/components/TaskManager/index.d.ts.map +1 -1
  153. package/lib/components/TaskManager/index.js.map +1 -1
  154. package/lib/index.d.ts +6 -0
  155. package/lib/index.d.ts.map +1 -1
  156. package/lib/index.js +6 -0
  157. package/lib/index.js.map +1 -1
  158. package/package.json +14 -14
  159. package/lib/components/TaskManager/TaskDrawer.d.ts +0 -6
  160. package/lib/components/TaskManager/TaskDrawer.d.ts.map +0 -1
  161. package/lib/components/TaskManager/TaskDrawer.js +0 -84
  162. package/lib/components/TaskManager/TaskDrawer.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"InteractionTimer.js","sourceRoot":"","sources":["../../../src/components/InteractionTimer/InteractionTimer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAA2C,MAAM,OAAO,CAAC;AACnF,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAGL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,EAER,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAyBjC,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC,IAAI,CAAA,EAAE,CAAC;AAC/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,GAAG,CAAA,EAAE,CAAC;AACvD,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,IAAI,CAAA,EAAE,CAAC;AAI5D,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAC9C,CAAC,EACC,GAAG,EACH,gBAAgB,EAChB,KAAK,EAAE,EACL,UAAU,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,EAC3D,EACD,KAAK,EACN,EAAE,EAAE;IACH,OAAO,GAAG,CAAA;wBACU,KAAK,CAAC,IAAI,CAAC,OAAO;;QAElC,iCAAiC;;;;8BAIX,KAAK,CAAC,IAAI,CAAC,OAAO;UACtC,gBAAgB;QAClB,GAAG,CAAA;;;gCAGqB,qBAAqB,CAAC,wBAAwB,CAAC;;;;;;;;SAQtE;;QAED,kBAAkB;;;oBAGN,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;;;oBAG1D,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;;;QAGpE,0BAA0B;;;;;;;;;;;;;QAa1B,8BAA8B;;;KAGjC,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,sBAAsB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAEvD,MAAM,gBAAgB,GAA4D,UAAU,CAC1F,CACE,EACE,IAAI,EACJ,QAAQ,GAAG,CAAC,EACZ,gBAAgB,GAAG,KAAK,EACxB,IAAI,EACJ,GAAG,GAAG,MAAM,EACZ,SAAS,EACT,GAAG,SAAS,EAC2B,EACzC,GAAiC,EACjC,EAAE;IACF,OAAO,CACL,oBAAC,IAAI,OACC,SAAS,EACb,GAAG,EAAE,GAAG,EACR,SAAS,EAAE;YACT,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,QAAQ;SACrB,EACD,GAAG,EAAE,GAAG,EACR,gBAAgB,EAAE,gBAAgB,EAClC,EAAE,EAAE,sBAAsB,gBACd,SAAS;QAErB,oBAAC,iCAAiC;YAChC,oBAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,0BAA0B,GAAI;YACpD,oBAAC,QAAQ,IACP,OAAO,EAAC,MAAM,EACd,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,GAAG,EACb,KAAK,EAAE,QAAQ,EACf,SAAS,EAAC,QAAQ,GAClB,CACgC;QACnC,IAAI,IAAI,CACP,oBAAC,IAAI,IAAC,OAAO,EAAC,WAAW,EAAC,EAAE,EAAE,8BAA8B,IACzD,IAAI,CACA,CACR,CACI,CACR,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["import React, { forwardRef, FunctionComponent, PropsWithoutRef, Ref } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n BaseProps,\n AsProp,\n Flex,\n Icon,\n Text,\n Progress,\n ForwardProps,\n defaultThemeProp,\n StyledProgressRing,\n PropsWithDefaults\n} from '@pega/cosmos-react-core';\n\nexport interface InteractionTimerProps extends BaseProps, AsProp {\n /** Name of the icon */\n icon: string;\n /** Ref to Component */\n ref?: Ref<HTMLDivElement>;\n /** Current Sla\n * @default 'goal'\n */\n sla?: 'goal' | 'deadline' | 'past-deadline';\n /** Progress % of the current stage\n * @default 0\n */\n progress?: number;\n /** Indicates if there are any unread notifications\n * @default false\n */\n hasNotifications?: boolean;\n /** Meta info */\n meta?: string;\n /** Aria label for screen readers. */\n ariaLabel?: string;\n}\n\nexport const StyledInteractionTimerIconWrapper = styled.span``;\nexport const StyledInteractionTimerIcon = styled.svg``;\nexport const StyledInteractionTimerMetaText = styled.span``;\n\ntype InteractionTimerPropsWithDefaults = PropsWithDefaults<InteractionTimerProps, 'sla'>;\n\nexport const StyledInteractionTimer = styled.div<InteractionTimerPropsWithDefaults>(\n ({\n sla,\n hasNotifications,\n theme: {\n components: { 'interaction-timer': InteractionTimerTheme }\n },\n theme\n }) => {\n return css`\n width: calc(8 * ${theme.base.spacing});\n\n ${StyledInteractionTimerIconWrapper} {\n font-size: 2.2rem;\n position: relative;\n display: inline-flex;\n padding: calc(0.3 * ${theme.base.spacing});\n ${hasNotifications &&\n css`\n &::after {\n position: absolute;\n background-color: ${InteractionTimerTheme['notification-indicator']};\n border-radius: 50%;\n content: '';\n top: 0;\n right: 0;\n width: 0.3rem;\n height: 0.3rem;\n }\n `}\n }\n ${StyledProgressRing} {\n circle {\n stroke-width: 1;\n stroke: ${InteractionTimerTheme.sla[sla].progress['secondary-color']};\n }\n circle:nth-child(2) {\n stroke: ${InteractionTimerTheme.sla[sla].progress['primary-color']};\n }\n }\n ${StyledInteractionTimerIcon} {\n font-size: 1.5rem;\n margin: auto;\n position: absolute;\n display: inline-flex;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n width: 100%;\n align-items: center;\n justify-content: center;\n }\n ${StyledInteractionTimerMetaText} {\n color: inherit;\n }\n `;\n }\n);\n\nStyledInteractionTimer.defaultProps = defaultThemeProp;\n\nconst InteractionTimer: FunctionComponent<InteractionTimerProps & ForwardProps> = forwardRef(\n (\n {\n icon,\n progress = 0,\n hasNotifications = false,\n meta,\n sla = 'goal',\n ariaLabel,\n ...restProps\n }: PropsWithoutRef<InteractionTimerProps>,\n ref: InteractionTimerProps['ref']\n ) => {\n return (\n <Flex\n {...restProps}\n ref={ref}\n container={{\n direction: 'column',\n alignItems: 'center'\n }}\n sla={sla}\n hasNotifications={hasNotifications}\n as={StyledInteractionTimer}\n aria-label={ariaLabel}\n >\n <StyledInteractionTimerIconWrapper>\n <Icon name={icon} as={StyledInteractionTimerIcon} />\n <Progress\n variant='ring'\n minValue={0}\n maxValue={100}\n value={progress}\n placement='inline'\n />\n </StyledInteractionTimerIconWrapper>\n {meta && (\n <Text variant='secondary' as={StyledInteractionTimerMetaText}>\n {meta}\n </Text>\n )}\n </Flex>\n );\n }\n);\n\nexport default InteractionTimer;\n"]}
1
+ {"version":3,"file":"InteractionTimer.js","sourceRoot":"","sources":["../../../src/components/InteractionTimer/InteractionTimer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAA2C,MAAM,OAAO,CAAC;AAC5E,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAGL,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,EAER,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,yBAAyB,CAAC;AAuBjC,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC,IAAI,CAAA,EAAE,CAAC;AAC/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,GAAG,CAAA,EAAE,CAAC;AACvD,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,IAAI,CAAA,EAAE,CAAC;AAI5D,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAC9C,CAAC,EACC,GAAG,EACH,gBAAgB,EAChB,KAAK,EAAE,EACL,UAAU,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,EAC3D,EACD,KAAK,EACN,EAAE,EAAE;IACH,OAAO,GAAG,CAAA;wBACU,KAAK,CAAC,IAAI,CAAC,OAAO;;;QAGlC,iCAAiC;;;;8BAIX,KAAK,CAAC,IAAI,CAAC,OAAO;UACtC,gBAAgB;QAClB,GAAG,CAAA;;;gCAGqB,qBAAqB,CAAC,wBAAwB,CAAC;;;;;;;;SAQtE;;;QAGD,kBAAkB;;;oBAGN,GAAG;QACX,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC5D,CAAC,CAAC,cAAc;;;oBAGR,GAAG;QACX,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1D,CAAC,CAAC,cAAc;;;QAGpB,0BAA0B;;;;;;;;;;;;;QAa1B,8BAA8B;;;KAGjC,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,sBAAsB,CAAC,YAAY,GAAG,gBAAgB,CAAC;AAEvD,MAAM,gBAAgB,GAA4D,UAAU,CAC1F,CACE,EACE,IAAI,EACJ,QAAQ,GAAG,CAAC,EACZ,gBAAgB,GAAG,KAAK,EACxB,IAAI,EACJ,GAAG,EACH,SAAS,EACT,GAAG,SAAS,EAC2B,EACzC,GAAiC,EACjC,EAAE;IACF,OAAO,CACL,MAAC,IAAI,OACC,SAAS,EACb,GAAG,EAAE,GAAG,EACR,SAAS,EAAE;YACT,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,QAAQ;SACrB,EACD,GAAG,EAAE,GAAG,EACR,gBAAgB,EAAE,gBAAgB,EAClC,EAAE,EAAE,sBAAsB,gBACd,SAAS,aAErB,MAAC,iCAAiC,eAChC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,0BAA0B,WAAI,EACpD,KAAC,QAAQ,IACP,OAAO,EAAC,MAAM,EACd,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,GAAG,EACb,KAAK,EAAE,QAAQ,EACf,SAAS,EAAC,QAAQ,WAClB,YACgC,EACnC,IAAI,IAAI,CACP,KAAC,IAAI,IAAC,OAAO,EAAC,WAAW,EAAC,EAAE,EAAE,8BAA8B,YACzD,IAAI,WACA,CACR,YACI,CACR,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["import { forwardRef, FunctionComponent, PropsWithoutRef, Ref } from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n BaseProps,\n AsProp,\n Flex,\n Icon,\n Text,\n Progress,\n ForwardProps,\n defaultThemeProp,\n StyledProgressRing,\n PropsWithDefaults\n} from '@pega/cosmos-react-core';\n\nexport interface InteractionTimerProps extends BaseProps, AsProp {\n /** Name of the icon */\n icon: string;\n /** Ref to Component */\n ref?: Ref<HTMLDivElement>;\n /** Current Sla. This is used to display progress ring color. */\n sla?: 'goal' | 'deadline' | 'past-deadline';\n /** Progress % of the current stage\n * @default 0\n */\n progress?: number;\n /** Indicates if there are any unread notifications\n * @default false\n */\n hasNotifications?: boolean;\n /** Meta info */\n meta?: string;\n /** Aria label for screen readers. */\n ariaLabel?: string;\n}\n\nexport const StyledInteractionTimerIconWrapper = styled.span``;\nexport const StyledInteractionTimerIcon = styled.svg``;\nexport const StyledInteractionTimerMetaText = styled.span``;\n\ntype InteractionTimerPropsWithDefaults = PropsWithDefaults<InteractionTimerProps, 'sla'>;\n\nexport const StyledInteractionTimer = styled.div<InteractionTimerPropsWithDefaults>(\n ({\n sla,\n hasNotifications,\n theme: {\n components: { 'interaction-timer': InteractionTimerTheme }\n },\n theme\n }) => {\n return css`\n width: calc(8 * ${theme.base.spacing});\n flex-shrink: 0;\n\n ${StyledInteractionTimerIconWrapper} {\n font-size: 2.2rem;\n position: relative;\n display: inline-flex;\n padding: calc(0.3 * ${theme.base.spacing});\n ${hasNotifications &&\n css`\n &::after {\n position: absolute;\n background-color: ${InteractionTimerTheme['notification-indicator']};\n border-radius: 50%;\n content: '';\n top: 0;\n right: 0;\n width: 0.3rem;\n height: 0.3rem;\n }\n `}\n }\n\n ${StyledProgressRing} {\n circle {\n stroke-width: 1;\n stroke: ${sla\n ? InteractionTimerTheme.sla[sla].progress['secondary-color']\n : 'currentcolor'};\n }\n circle + circle {\n stroke: ${sla\n ? InteractionTimerTheme.sla[sla].progress['primary-color']\n : 'currentcolor'};\n }\n }\n ${StyledInteractionTimerIcon} {\n font-size: 1.5rem;\n margin: auto;\n position: absolute;\n display: inline-flex;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n width: 100%;\n align-items: center;\n justify-content: center;\n }\n ${StyledInteractionTimerMetaText} {\n color: inherit;\n }\n `;\n }\n);\n\nStyledInteractionTimer.defaultProps = defaultThemeProp;\n\nconst InteractionTimer: FunctionComponent<InteractionTimerProps & ForwardProps> = forwardRef(\n (\n {\n icon,\n progress = 0,\n hasNotifications = false,\n meta,\n sla,\n ariaLabel,\n ...restProps\n }: PropsWithoutRef<InteractionTimerProps>,\n ref: InteractionTimerProps['ref']\n ) => {\n return (\n <Flex\n {...restProps}\n ref={ref}\n container={{\n direction: 'column',\n alignItems: 'center'\n }}\n sla={sla}\n hasNotifications={hasNotifications}\n as={StyledInteractionTimer}\n aria-label={ariaLabel}\n >\n <StyledInteractionTimerIconWrapper>\n <Icon name={icon} as={StyledInteractionTimerIcon} />\n <Progress\n variant='ring'\n minValue={0}\n maxValue={100}\n value={progress}\n placement='inline'\n />\n </StyledInteractionTimerIconWrapper>\n {meta && (\n <Text variant='secondary' as={StyledInteractionTimerMetaText}>\n {meta}\n </Text>\n )}\n </Flex>\n );\n }\n);\n\nexport default InteractionTimer;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Picker.d.ts","sourceRoot":"","sources":["../../../../src/components/TaskManager/Picker/Picker.tsx"],"names":[],"mappings":"AAAA,OAAc,EAGZ,iBAAiB,EAKlB,MAAM,OAAO,CAAC;AAGf,OAAO,EAKL,YAAY,EAKb,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAmB7C,QAAA,MAAM,MAAM,EAAE,iBAAiB,CAAC,WAAW,GAAG,YAAY,CA2HzD,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Picker.d.ts","sourceRoot":"","sources":["../../../../src/components/TaskManager/Picker/Picker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EAOlB,MAAM,OAAO,CAAC;AAGf,OAAO,EAML,YAAY,EASb,MAAM,yBAAyB,CAAC;AAOjC,OAAO,EAA8B,WAAW,EAAqB,MAAM,gBAAgB,CAAC;AAmI5F,QAAA,MAAM,MAAM,EAAE,iBAAiB,CAAC,WAAW,GAAG,YAAY,CAiLzD,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -1,33 +1,114 @@
1
- import React, { forwardRef, useEffect, useMemo, useState } from 'react';
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
3
  import styled, { css } from 'styled-components';
3
- import { Button, Count, defaultThemeProp, Flex, Menu, menuHelpers, Text, useI18n } from '@pega/cosmos-react-core';
4
- import MultiSelectInput from '@pega/cosmos-react-core/lib/components/ComboBox/MultiSelectInput/MultiSelectInput';
5
- const StyledPicker = styled.div ``;
6
- const StyledMultiSelectInput = styled(MultiSelectInput)(props => {
7
- const { theme } = props;
4
+ import { Button, Count, defaultThemeProp, Flex, registerIcon, Icon, Menu, menuHelpers, EmptyState, SearchInput, SummaryItem, Text, useI18n } from '@pega/cosmos-react-core';
5
+ import { DragDropList, DragDropManager } from '@pega/cosmos-react-dnd';
6
+ import * as timesIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/times.icon';
7
+ import * as dragIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/drag.icon';
8
+ import * as trashIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/trash.icon';
9
+ registerIcon(timesIcon, dragIcon, trashIcon);
10
+ const StyledPickerHeader = styled.div(({ theme }) => {
8
11
  return css `
9
- border-radius: calc(2 * ${theme.base['border-radius']});
12
+ padding-inline-start: calc(2 * ${theme.base.spacing});
10
13
  `;
11
14
  });
12
- StyledPicker.defaultProps = defaultThemeProp;
15
+ StyledPickerHeader.defaultProps = defaultThemeProp;
16
+ const StyledAddTasks = styled.div(({ theme }) => {
17
+ return css `
18
+ /* temporary remove height once list is replaced with flat list */
19
+ height: calc(45 * 0.5rem);
20
+ flex-basis: 50%;
21
+ padding: 0 ${theme.base.spacing} ${theme.base.spacing};
22
+ header {
23
+ padding-top: 0;
24
+ border-bottom: none;
25
+ }
26
+ `;
27
+ });
28
+ StyledAddTasks.defaultProps = defaultThemeProp;
29
+ const StyledSelectedTasks = styled.div(({ theme }) => {
30
+ return css `
31
+ flex-basis: 50%;
32
+ padding: 0 ${theme.base.spacing} ${theme.base.spacing};
33
+ border-inline-start: 0.0625rem solid ${theme.base.palette['border-line']};
34
+ > h3 {
35
+ padding: 0 0 ${theme.base.spacing} ${theme.base.spacing};
36
+ }
37
+ `;
38
+ });
39
+ StyledSelectedTasks.defaultProps = defaultThemeProp;
40
+ const StyledSummaryItem = styled(SummaryItem)(({ theme }) => {
41
+ return css `
42
+ padding: ${theme.base.spacing} 0;
43
+ &:not(:last-child) {
44
+ border-bottom: 0.0625rem solid ${theme.base.palette['border-line']};
45
+ }
46
+ `;
47
+ });
48
+ StyledSummaryItem.defaultProps = defaultThemeProp;
49
+ const StyledPickerFooter = styled.div(({ theme }) => {
50
+ return css `
51
+ border-top: 0.0625rem solid ${theme.base.palette['border-line']};
52
+ padding: ${theme.base.spacing};
53
+ `;
54
+ });
55
+ StyledPickerFooter.defaultProps = defaultThemeProp;
56
+ const StyledDDList = styled.ul `
57
+ height: 20rem;
58
+ overflow-y: auto;
59
+ `;
60
+ const StyledPicker = styled.div `
61
+ height: 100%;
62
+ `;
63
+ const StyledDragHandle = styled.div `
64
+ cursor: move;
65
+ > svg {
66
+ display: block;
67
+ }
68
+ `;
13
69
  const StyledCount = styled(Count)(({ theme }) => {
14
70
  return css `
15
71
  margin-inline-start: calc(0.5 * ${theme.base.spacing});
16
72
  `;
17
73
  });
18
74
  StyledCount.defaultProps = defaultThemeProp;
75
+ const SelectedItemRenderer = ({ dragRef, previewRef, data }) => {
76
+ const t = useI18n();
77
+ return (_jsx(StyledSummaryItem, { ref: previewRef, visual: _jsx(StyledDragHandle, { ref: dragRef, children: _jsx(Icon, { name: 'drag' }, void 0) }, void 0), primary: data?.primary, secondary: data?.secondary, actions: _jsx(Button, { variant: 'simple', icon: true, label: t('task_manager_delete_task'), onClick: () => data?.onRemoveItem(data.id), children: _jsx(Icon, { name: 'trash' }, void 0) }, void 0) }, void 0));
78
+ };
79
+ const DraggableSelectedList = ({ selectedItems, onChange, itemRenderer }) => {
80
+ return (_jsx(DragDropManager, { children: _jsx(DragDropList, { as: StyledDDList, accept: 'string', items: selectedItems.map(item => ({
81
+ id: item.id,
82
+ type: 'string',
83
+ data: item
84
+ })), itemRenderer: itemRenderer, onChange: onChange }, void 0) }, void 0));
85
+ };
19
86
  const Picker = forwardRef(({ id, items, emptyText, title, placeholder, onAdd, onCancel, ...restProps }, ref) => {
20
87
  const t = useI18n();
21
88
  const [initialItems, setItems] = useState(items);
89
+ const [searchInput, setSearchInput] = useState('');
90
+ const filterRegex = new RegExp(searchInput.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'), 'i');
91
+ const [selections, setSelections] = useState([]);
92
+ const searchEleRef = useRef(null);
22
93
  useEffect(() => {
23
94
  setItems(items);
24
95
  }, [items]);
25
- const [searchInput, setSearchInput] = useState('');
26
- const filterRegex = new RegExp(searchInput.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'), 'i');
96
+ const onKeydown = useCallback(({ key }) => {
97
+ if (key === 'Escape')
98
+ onCancel?.();
99
+ }, [onCancel]);
100
+ useEffect(() => {
101
+ document.addEventListener('keydown', onKeydown);
102
+ return () => {
103
+ document.removeEventListener('keydown', onKeydown);
104
+ };
105
+ }, []);
27
106
  const renderItems = useMemo(() => {
28
107
  return menuHelpers.mapTree(searchInput
29
- ? menuHelpers.flatten(initialItems).filter(({ primary }) => {
30
- return filterRegex.test(primary);
108
+ ? menuHelpers
109
+ .flatten(initialItems)
110
+ .filter(({ primary, items: childItems }) => {
111
+ return filterRegex.test(primary) && !childItems?.length;
31
112
  })
32
113
  : initialItems, item => {
33
114
  let selectable = false;
@@ -40,42 +121,51 @@ const Picker = forwardRef(({ id, items, emptyText, title, placeholder, onAdd, on
40
121
  };
41
122
  });
42
123
  }, [searchInput, initialItems, filterRegex]);
43
- const [selections, setSelections] = useState([]);
44
- const selectedArray = selections.map(item => ({
45
- text: item.primary,
46
- id: item.id
47
- }));
48
- return (React.createElement(StyledPicker, { ref: ref, id: id },
49
- React.createElement(Menu, { items: renderItems, onItemClick: (uid) => {
50
- const clickedItem = menuHelpers.getItem(renderItems, uid);
51
- if (clickedItem) {
52
- setItems((cur) => menuHelpers.toggleSelected(cur, uid, 'multi-select'));
53
- if (selections.find(item => item.id === uid)) {
54
- setSelections(cur => cur.filter(item => item.id !== (clickedItem === null || clickedItem === void 0 ? void 0 : clickedItem.id)));
55
- }
56
- else {
57
- setSelections(cur => [...cur, clickedItem]);
58
- }
59
- setSearchInput('');
60
- }
61
- }, emptyText: emptyText || t('no_items'), accent: filterRegex, ...restProps, mode: 'multi-select', header: React.createElement(Flex, { container: { direction: 'column', itemGap: 1 } },
62
- title && React.createElement(Text, { variant: 'h4' }, title),
63
- React.createElement(StyledMultiSelectInput, { value: searchInput, onChange: (ev) => {
64
- setSearchInput(ev.target.value);
65
- }, selected: selectedArray, onRemove: (uid) => {
66
- setItems((cur) => menuHelpers.toggleSelected(cur, uid, 'multi-select'));
67
- setSelections(cur => {
68
- const itemToRemove = menuHelpers.getItem(cur, uid);
69
- return cur.filter(item => item.id !== (itemToRemove === null || itemToRemove === void 0 ? void 0 : itemToRemove.id));
70
- });
71
- }, placeholder: selectedArray.length < 1 && (placeholder || t('search_placeholder_default')), autoFocus: true })), footer: React.createElement(Flex, { container: { justify: 'between' } },
72
- React.createElement(Button, { onClick: onCancel, "aria-label": t('cancel') }, "Cancel"),
73
- React.createElement(Button, { variant: 'primary', disabled: !selectedArray.length, onClick: () => {
74
- onAdd === null || onAdd === void 0 ? void 0 : onAdd(selections);
75
- setItems(initialItems);
76
- }, "aria-label": t('task_manager_picker_add_label', selectedArray === null || selectedArray === void 0 ? void 0 : selectedArray.length) },
77
- t('add'),
78
- !!(selectedArray === null || selectedArray === void 0 ? void 0 : selectedArray.length) && React.createElement(StyledCount, null, selectedArray.length))) })));
124
+ const removeTasks = useCallback((uid) => {
125
+ setItems((cur) => menuHelpers.toggleSelected(cur, uid, 'multi-select'));
126
+ setSelections(cur => {
127
+ const itemToRemove = menuHelpers.getItem(cur, uid);
128
+ return cur.filter(item => item.id !== itemToRemove?.id);
129
+ });
130
+ }, []);
131
+ return (_jsxs(Flex, { as: StyledPicker, container: { direction: 'column' }, ref: ref, id: id, children: [_jsxs(Flex, { as: StyledPickerHeader, container: { justify: 'between', alignItems: 'center', pad: 1 }, children: [_jsx(Text, { variant: 'h3', children: t('add_tasks') }, void 0), _jsx(Button, { variant: 'simple', onClick: onCancel, "aria-label": t('task_picker_close'), icon: true, children: _jsx(Icon, { name: 'times' }, void 0) }, void 0)] }, void 0), _jsxs(Flex, { container: true, children: [_jsx(Flex, { as: StyledAddTasks, children: _jsx(Menu, { items: renderItems, onItemClick: (uid) => {
132
+ const clickedItem = menuHelpers.getItem(renderItems, uid);
133
+ const parentItem = menuHelpers.getParentItem(renderItems, uid);
134
+ if (clickedItem) {
135
+ setItems((cur) => menuHelpers.toggleSelected(cur, uid, 'multi-select'));
136
+ if (selections.find(item => item.id === uid)) {
137
+ setSelections(cur => cur.filter(item => item.id !== clickedItem?.id));
138
+ }
139
+ else {
140
+ setSelections(cur => {
141
+ let secondary;
142
+ if (parentItem)
143
+ secondary = menuHelpers.isItem(parentItem)
144
+ ? parentItem.primary
145
+ : parentItem.label;
146
+ return [
147
+ ...cur,
148
+ {
149
+ ...clickedItem,
150
+ secondary,
151
+ onRemoveItem: removeTasks
152
+ }
153
+ ];
154
+ });
155
+ }
156
+ setSearchInput('');
157
+ }
158
+ }, focusControlEl: searchEleRef.current || undefined, emptyText: emptyText || t('no_items'), accent: filterRegex, ...restProps, mode: 'multi-select', header: _jsx(Flex, { container: { direction: 'column', gap: 1 }, children: _jsx(SearchInput, { ref: searchEleRef, value: searchInput, onSearchChange: setSearchInput, placeholder: placeholder || t('search_placeholder_default'), autoFocus: true }, void 0) }, void 0) }, void 0) }, void 0), _jsxs(Flex, { as: StyledSelectedTasks, container: { direction: 'column' }, children: [_jsx(Text, { variant: 'h3', children: t('selected_tasks') }, void 0), selections.length > 0 ? (_jsx(DraggableSelectedList, { selectedItems: selections, onChange: newItems => {
159
+ setSelections(newItems.map(({ type, data }) => ({
160
+ ...data,
161
+ type
162
+ })));
163
+ }, itemRenderer: SelectedItemRenderer }, void 0)) : (_jsx(EmptyState, { message: t('no_selected_tasks') }, void 0))] }, void 0)] }, void 0), _jsxs(Flex, { as: StyledPickerFooter, container: { justify: 'between' }, children: [_jsx(Button, { onClick: onCancel, "aria-label": t('cancel'), children: "Cancel" }, void 0), _jsxs(Button, { variant: 'primary', disabled: !selections.length, onClick: () => {
164
+ onAdd?.(selections);
165
+ setItems(initialItems);
166
+ }, "aria-label": t('task_manager_picker_add_label', [selections?.length], {
167
+ count: selections?.length
168
+ }), children: [t('add'), !!selections?.length && _jsx(StyledCount, { children: selections.length }, void 0)] }, void 0)] }, void 0)] }, void 0));
79
169
  });
80
170
  export default Picker;
81
171
  //# sourceMappingURL=Picker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Picker.js","sourceRoot":"","sources":["../../../../src/components/TaskManager/Picker/Picker.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {\n ChangeEvent,\n forwardRef,\n FunctionComponent,\n PropsWithoutRef,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n Button,\n Count,\n defaultThemeProp,\n Flex,\n ForwardProps,\n Menu,\n menuHelpers,\n Text,\n useI18n\n} from '@pega/cosmos-react-core';\nimport MultiSelectInput from '@pega/cosmos-react-core/lib/components/ComboBox/MultiSelectInput/MultiSelectInput';\nimport { Selected } from '@pega/cosmos-react-core/lib/components/ComboBox/ComboBox.types';\nimport { MenuItemProps } from '@pega/cosmos-react-core/lib/components/Menu/Menu.types';\n\nimport { PickerProps } from './Picker.types';\n\nconst StyledPicker = styled.div``;\nconst StyledMultiSelectInput = styled(MultiSelectInput)(props => {\n const { theme } = props;\n return css`\n border-radius: calc(2 * ${theme.base['border-radius']});\n `;\n});\nStyledPicker.defaultProps = defaultThemeProp;\n\nconst StyledCount = styled(Count)(({ theme }) => {\n return css`\n margin-inline-start: calc(0.5 * ${theme.base.spacing});\n `;\n});\n\nStyledCount.defaultProps = defaultThemeProp;\n\nconst Picker: FunctionComponent<PickerProps & ForwardProps> = forwardRef(\n (\n {\n id,\n items,\n emptyText,\n title,\n placeholder,\n onAdd,\n onCancel,\n ...restProps\n }: PropsWithoutRef<PickerProps>,\n ref: PickerProps['ref']\n ) => {\n const t = useI18n();\n\n const [initialItems, setItems] = useState<PickerProps['items']>(items);\n\n useEffect(() => {\n setItems(items);\n }, [items]);\n\n const [searchInput, setSearchInput] = useState('');\n\n const filterRegex = new RegExp(searchInput.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, '\\\\$&'), 'i');\n\n const renderItems = useMemo(() => {\n return menuHelpers.mapTree(\n searchInput\n ? menuHelpers.flatten(initialItems).filter(({ primary }: MenuItemProps) => {\n return filterRegex.test(primary);\n })\n : initialItems,\n item => {\n let selectable = false;\n if (!item.items) {\n selectable = true;\n }\n return {\n ...item,\n selected: selectable ? !!item.selected : undefined\n };\n }\n );\n }, [searchInput, initialItems, filterRegex]);\n\n const [selections, setSelections] = useState<MenuItemProps[]>([]);\n\n const selectedArray: Selected[] = selections.map(item => ({\n text: item.primary,\n id: item.id\n }));\n\n return (\n <StyledPicker ref={ref} id={id}>\n <Menu\n items={renderItems}\n onItemClick={(uid: string) => {\n const clickedItem = menuHelpers.getItem(renderItems, uid);\n if (clickedItem) {\n setItems((cur: PickerProps['items']) =>\n menuHelpers.toggleSelected(cur, uid, 'multi-select')\n );\n if (selections.find(item => item.id === uid)) {\n setSelections(cur => cur.filter(item => item.id !== clickedItem?.id));\n } else {\n setSelections(cur => [...cur, clickedItem]);\n }\n setSearchInput('');\n }\n }}\n emptyText={emptyText || t('no_items')}\n accent={filterRegex}\n {...restProps}\n mode='multi-select'\n header={\n <Flex container={{ direction: 'column', itemGap: 1 }}>\n {title && <Text variant='h4'>{title}</Text>}\n <StyledMultiSelectInput\n value={searchInput}\n onChange={(ev: ChangeEvent<HTMLInputElement>) => {\n setSearchInput(ev.target.value);\n }}\n selected={selectedArray}\n onRemove={(uid: string) => {\n setItems((cur: PickerProps['items']) =>\n menuHelpers.toggleSelected(cur, uid, 'multi-select')\n );\n setSelections(cur => {\n const itemToRemove = menuHelpers.getItem(cur, uid);\n return cur.filter(item => item.id !== itemToRemove?.id);\n });\n }}\n placeholder={\n selectedArray.length < 1 && (placeholder || t('search_placeholder_default'))\n }\n autoFocus\n />\n </Flex>\n }\n footer={\n <Flex container={{ justify: 'between' }}>\n <Button onClick={onCancel} aria-label={t('cancel')}>\n Cancel\n </Button>\n <Button\n variant='primary'\n disabled={!selectedArray.length}\n onClick={() => {\n onAdd?.(selections);\n setItems(initialItems);\n }}\n aria-label={t('task_manager_picker_add_label', selectedArray?.length)}\n >\n {t('add')}\n {!!selectedArray?.length && <StyledCount>{selectedArray.length}</StyledCount>}\n </Button>\n </Flex>\n }\n />\n </StyledPicker>\n );\n }\n);\n\nexport default Picker;\n"]}
1
+ {"version":3,"file":"Picker.js","sourceRoot":"","sources":["../../../../src/components/TaskManager/Picker/Picker.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n forwardRef,\n FunctionComponent,\n PropsWithoutRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n Button,\n Count,\n defaultThemeProp,\n Flex,\n registerIcon,\n ForwardProps,\n Icon,\n Menu,\n menuHelpers,\n EmptyState,\n SearchInput,\n SummaryItem,\n Text,\n useI18n\n} from '@pega/cosmos-react-core';\nimport { MenuItemProps } from '@pega/cosmos-react-core/lib/components/Menu/Menu.types';\nimport { DragDropList, DragDropManager, ItemRendererProps } from '@pega/cosmos-react-dnd';\nimport * as timesIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/times.icon';\nimport * as dragIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/drag.icon';\nimport * as trashIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/trash.icon';\n\nimport { DraggableSelectedListProps, PickerProps, SelectedItemProps } from './Picker.types';\n\nregisterIcon(timesIcon, dragIcon, trashIcon);\n\nconst StyledPickerHeader = styled.div(({ theme }) => {\n return css`\n padding-inline-start: calc(2 * ${theme.base.spacing});\n `;\n});\nStyledPickerHeader.defaultProps = defaultThemeProp;\n\nconst StyledAddTasks = styled.div(({ theme }) => {\n return css`\n /* temporary remove height once list is replaced with flat list */\n height: calc(45 * 0.5rem);\n flex-basis: 50%;\n padding: 0 ${theme.base.spacing} ${theme.base.spacing};\n header {\n padding-top: 0;\n border-bottom: none;\n }\n `;\n});\nStyledAddTasks.defaultProps = defaultThemeProp;\n\nconst StyledSelectedTasks = styled.div(({ theme }) => {\n return css`\n flex-basis: 50%;\n padding: 0 ${theme.base.spacing} ${theme.base.spacing};\n border-inline-start: 0.0625rem solid ${theme.base.palette['border-line']};\n > h3 {\n padding: 0 0 ${theme.base.spacing} ${theme.base.spacing};\n }\n `;\n});\nStyledSelectedTasks.defaultProps = defaultThemeProp;\n\nconst StyledSummaryItem = styled(SummaryItem)(({ theme }) => {\n return css`\n padding: ${theme.base.spacing} 0;\n &:not(:last-child) {\n border-bottom: 0.0625rem solid ${theme.base.palette['border-line']};\n }\n `;\n});\nStyledSummaryItem.defaultProps = defaultThemeProp;\n\nconst StyledPickerFooter = styled.div(({ theme }) => {\n return css`\n border-top: 0.0625rem solid ${theme.base.palette['border-line']};\n padding: ${theme.base.spacing};\n `;\n});\nStyledPickerFooter.defaultProps = defaultThemeProp;\n\nconst StyledDDList = styled.ul`\n height: 20rem;\n overflow-y: auto;\n`;\n\nconst StyledPicker = styled.div`\n height: 100%;\n`;\n\nconst StyledDragHandle = styled.div`\n cursor: move;\n > svg {\n display: block;\n }\n`;\n\nconst StyledCount = styled(Count)(({ theme }) => {\n return css`\n margin-inline-start: calc(0.5 * ${theme.base.spacing});\n `;\n});\n\nStyledCount.defaultProps = defaultThemeProp;\n\nconst SelectedItemRenderer = ({\n dragRef,\n previewRef,\n data\n}: ItemRendererProps<SelectedItemProps>) => {\n const t = useI18n();\n return (\n <StyledSummaryItem\n ref={previewRef}\n visual={\n <StyledDragHandle ref={dragRef}>\n <Icon name='drag' />\n </StyledDragHandle>\n }\n primary={data?.primary}\n secondary={data?.secondary}\n actions={\n <Button\n variant='simple'\n icon\n label={t('task_manager_delete_task')}\n onClick={() => data?.onRemoveItem(data.id)}\n >\n <Icon name='trash' />\n </Button>\n }\n />\n );\n};\n\nconst DraggableSelectedList = ({\n selectedItems,\n onChange,\n itemRenderer\n}: DraggableSelectedListProps) => {\n return (\n <DragDropManager>\n <DragDropList\n as={StyledDDList}\n accept='string'\n items={selectedItems.map(item => ({\n id: item.id,\n type: 'string',\n data: item\n }))}\n itemRenderer={itemRenderer}\n onChange={onChange}\n />\n </DragDropManager>\n );\n};\n\nconst Picker: FunctionComponent<PickerProps & ForwardProps> = forwardRef(\n (\n {\n id,\n items,\n emptyText,\n title,\n placeholder,\n onAdd,\n onCancel,\n ...restProps\n }: PropsWithoutRef<PickerProps>,\n ref: PickerProps['ref']\n ) => {\n const t = useI18n();\n\n const [initialItems, setItems] = useState<PickerProps['items']>(items);\n\n const [searchInput, setSearchInput] = useState('');\n\n const filterRegex = new RegExp(searchInput.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, '\\\\$&'), 'i');\n const [selections, setSelections] = useState<SelectedItemProps[]>([]);\n const searchEleRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n setItems(items);\n }, [items]);\n\n const onKeydown = useCallback(\n ({ key }: KeyboardEvent) => {\n if (key === 'Escape') onCancel?.();\n },\n [onCancel]\n );\n\n useEffect(() => {\n document.addEventListener('keydown', onKeydown);\n return () => {\n document.removeEventListener('keydown', onKeydown);\n };\n }, []);\n\n const renderItems = useMemo(() => {\n return menuHelpers.mapTree(\n searchInput\n ? menuHelpers\n .flatten(initialItems)\n .filter(({ primary, items: childItems }: MenuItemProps) => {\n return filterRegex.test(primary) && !childItems?.length;\n })\n : initialItems,\n item => {\n let selectable = false;\n if (!item.items) {\n selectable = true;\n }\n return {\n ...item,\n selected: selectable ? !!item.selected : undefined\n };\n }\n );\n }, [searchInput, initialItems, filterRegex]);\n\n const removeTasks = useCallback((uid: string) => {\n setItems((cur: PickerProps['items']) => menuHelpers.toggleSelected(cur, uid, 'multi-select'));\n setSelections(cur => {\n const itemToRemove = menuHelpers.getItem(cur, uid);\n return cur.filter(item => item.id !== itemToRemove?.id);\n });\n }, []);\n\n return (\n <Flex as={StyledPicker} container={{ direction: 'column' }} ref={ref} id={id}>\n <Flex\n as={StyledPickerHeader}\n container={{ justify: 'between', alignItems: 'center', pad: 1 }}\n >\n <Text variant='h3'>{t('add_tasks')}</Text>\n <Button variant='simple' onClick={onCancel} aria-label={t('task_picker_close')} icon>\n <Icon name='times' />\n </Button>\n </Flex>\n <Flex container>\n <Flex as={StyledAddTasks}>\n <Menu\n items={renderItems}\n onItemClick={(uid: string) => {\n const clickedItem = menuHelpers.getItem(renderItems, uid);\n const parentItem = menuHelpers.getParentItem(renderItems, uid);\n if (clickedItem) {\n setItems((cur: PickerProps['items']) =>\n menuHelpers.toggleSelected(cur, uid, 'multi-select')\n );\n if (selections.find(item => item.id === uid)) {\n setSelections(cur => cur.filter(item => item.id !== clickedItem?.id));\n } else {\n setSelections(cur => {\n let secondary;\n if (parentItem)\n secondary = menuHelpers.isItem(parentItem)\n ? parentItem.primary\n : parentItem.label;\n return [\n ...cur,\n {\n ...clickedItem,\n secondary,\n onRemoveItem: removeTasks\n } as SelectedItemProps\n ];\n });\n }\n setSearchInput('');\n }\n }}\n focusControlEl={searchEleRef.current || undefined}\n emptyText={emptyText || t('no_items')}\n accent={filterRegex}\n {...restProps}\n mode='multi-select'\n header={\n <Flex container={{ direction: 'column', gap: 1 }}>\n <SearchInput\n ref={searchEleRef}\n value={searchInput}\n onSearchChange={setSearchInput}\n placeholder={placeholder || t('search_placeholder_default')}\n autoFocus\n />\n </Flex>\n }\n />\n </Flex>\n <Flex as={StyledSelectedTasks} container={{ direction: 'column' }}>\n <Text variant='h3'>{t('selected_tasks')}</Text>\n\n {selections.length > 0 ? (\n <DraggableSelectedList\n selectedItems={selections}\n onChange={newItems => {\n setSelections(\n newItems.map(({ type, data }) => ({\n ...data,\n type\n })) as SelectedItemProps[]\n );\n }}\n itemRenderer={SelectedItemRenderer}\n />\n ) : (\n <EmptyState message={t('no_selected_tasks')} />\n )}\n </Flex>\n </Flex>\n <Flex as={StyledPickerFooter} container={{ justify: 'between' }}>\n <Button onClick={onCancel} aria-label={t('cancel')}>\n Cancel\n </Button>\n <Button\n variant='primary'\n disabled={!selections.length}\n onClick={() => {\n onAdd?.(selections);\n setItems(initialItems);\n }}\n aria-label={t('task_manager_picker_add_label', [selections?.length], {\n count: selections?.length\n })}\n >\n {t('add')}\n {!!selections?.length && <StyledCount>{selections.length}</StyledCount>}\n </Button>\n </Flex>\n </Flex>\n );\n }\n);\n\nexport default Picker;\n"]}
@@ -1,6 +1,7 @@
1
- import { Ref } from 'react';
1
+ import { ComponentType, Ref } from 'react';
2
2
  import { BaseProps, MenuProps } from '@pega/cosmos-react-core';
3
3
  import { MenuItemProps } from '@pega/cosmos-react-core/lib/components/Menu/Menu.types';
4
+ import { DraggableItem, ItemRendererProps } from '@pega/cosmos-react-dnd';
4
5
  export interface PickerProps extends BaseProps, MenuProps {
5
6
  /** Unique id for picker */
6
7
  id?: string;
@@ -9,10 +10,18 @@ export interface PickerProps extends BaseProps, MenuProps {
9
10
  /** Callback when cancel button is clicked */
10
11
  onCancel?: () => void;
11
12
  /** Callback when add button is clicked */
12
- onAdd: (selections: MenuItemProps[]) => void;
13
+ onAdd: (selections: SelectedItemProps[]) => void;
13
14
  /** Picker reference . */
14
15
  ref?: Ref<HTMLDivElement>;
15
16
  /** Title for the picker */
16
17
  title?: string;
17
18
  }
19
+ export interface DraggableSelectedListProps {
20
+ selectedItems: SelectedItemProps[];
21
+ onChange: (items: DraggableItem<SelectedItemProps>[]) => void;
22
+ itemRenderer: ComponentType<ItemRendererProps<SelectedItemProps>>;
23
+ }
24
+ export interface SelectedItemProps extends MenuItemProps {
25
+ onRemoveItem: (id: MenuItemProps['id']) => void;
26
+ }
18
27
  //# sourceMappingURL=Picker.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Picker.types.d.ts","sourceRoot":"","sources":["../../../../src/components/TaskManager/Picker/Picker.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,wDAAwD,CAAC;AAEvF,MAAM,WAAW,WAAY,SAAQ,SAAS,EAAE,SAAS;IACvD,2BAA2B;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,0CAA0C;IAC1C,KAAK,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IAC7C,yBAAyB;IACzB,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"Picker.types.d.ts","sourceRoot":"","sources":["../../../../src/components/TaskManager/Picker/Picker.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,wDAAwD,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE1E,MAAM,WAAW,WAAY,SAAQ,SAAS,EAAE,SAAS;IACvD,2BAA2B;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,0CAA0C;IAC1C,KAAK,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACjD,yBAAyB;IACzB,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,iBAAiB,CAAC,EAAE,KAAK,IAAI,CAAC;IAC9D,YAAY,EAAE,aAAa,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAC;CACnE;AACD,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,YAAY,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;CACjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"Picker.types.js","sourceRoot":"","sources":["../../../../src/components/TaskManager/Picker/Picker.types.ts"],"names":[],"mappings":"","sourcesContent":["import { Ref } from 'react';\n\nimport { BaseProps, MenuProps } from '@pega/cosmos-react-core';\nimport { MenuItemProps } from '@pega/cosmos-react-core/lib/components/Menu/Menu.types';\n\nexport interface PickerProps extends BaseProps, MenuProps {\n /** Unique id for picker */\n id?: string;\n /** Placeholder text */\n placeholder?: string;\n /** Callback when cancel button is clicked */\n onCancel?: () => void;\n /** Callback when add button is clicked */\n onAdd: (selections: MenuItemProps[]) => void;\n /** Picker reference . */\n ref?: Ref<HTMLDivElement>;\n /** Title for the picker */\n title?: string;\n}\n"]}
1
+ {"version":3,"file":"Picker.types.js","sourceRoot":"","sources":["../../../../src/components/TaskManager/Picker/Picker.types.ts"],"names":[],"mappings":"","sourcesContent":["import { ComponentType, Ref } from 'react';\n\nimport { BaseProps, MenuProps } from '@pega/cosmos-react-core';\nimport { MenuItemProps } from '@pega/cosmos-react-core/lib/components/Menu/Menu.types';\nimport { DraggableItem, ItemRendererProps } from '@pega/cosmos-react-dnd';\n\nexport interface PickerProps extends BaseProps, MenuProps {\n /** Unique id for picker */\n id?: string;\n /** Placeholder text */\n placeholder?: string;\n /** Callback when cancel button is clicked */\n onCancel?: () => void;\n /** Callback when add button is clicked */\n onAdd: (selections: SelectedItemProps[]) => void;\n /** Picker reference . */\n ref?: Ref<HTMLDivElement>;\n /** Title for the picker */\n title?: string;\n}\nexport interface DraggableSelectedListProps {\n selectedItems: SelectedItemProps[];\n onChange: (items: DraggableItem<SelectedItemProps>[]) => void;\n itemRenderer: ComponentType<ItemRendererProps<SelectedItemProps>>;\n}\nexport interface SelectedItemProps extends MenuItemProps {\n onRemoveItem: (id: MenuItemProps['id']) => void;\n}\n"]}
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { TaskManagerContextProps } from './TaskManager.types';
2
3
  declare const _default: import("react").Context<TaskManagerContextProps>;
3
4
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"TaskManager.context.d.ts","sourceRoot":"","sources":["../../../src/components/TaskManager/TaskManager.context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;;AAE9D,wBAA0D"}
1
+ {"version":3,"file":"TaskManager.context.d.ts","sourceRoot":"","sources":["../../../src/components/TaskManager/TaskManager.context.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;;AAE9D,wBAA0D"}
@@ -1 +1 @@
1
- {"version":3,"file":"TaskManager.d.ts","sourceRoot":"","sources":["../../../src/components/TaskManager/TaskManager.tsx"],"names":[],"mappings":"AAAA,OAAc,EACZ,iBAAiB,EAMlB,MAAM,OAAO,CAAC;AAGf,OAAO,EAeL,YAAY,EACb,MAAM,yBAAyB,CAAC;AAWjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAKvD,QAAA,MAAM,WAAW,EAAE,iBAAiB,CAAC,gBAAgB,GAAG,YAAY,CAsOnE,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"TaskManager.d.ts","sourceRoot":"","sources":["../../../src/components/TaskManager/TaskManager.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA4D,MAAM,OAAO,CAAC;AAGpG,OAAO,EAeL,YAAY,EACb,MAAM,yBAAyB,CAAC;AAajC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAOvD,QAAA,MAAM,WAAW,EAAE,iBAAiB,CAAC,gBAAgB,GAAG,YAAY,CA+NnE,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,105 +1,76 @@
1
- import React, { forwardRef, useRef, useEffect, useState } from 'react';
1
+ import { createElement as _createElement } from "react";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { forwardRef, useRef, useEffect, useState } from 'react';
2
4
  import { remToPx, stripUnit } from 'polished';
3
- import { Flex, Icon, Text, Status, useI18n, useConsolidatedRef, useElement, Button, Grid, SummaryItem, useOuterEvent, NoItems, useTheme, tryCatch } from '@pega/cosmos-react-core';
4
- import { StyledTaskManager, StyledTaskIcon, StyledTaskManagerBanner, StyledTaskSummaryItem, StyledPopover } from './TaskManager.styles';
5
+ import { Flex, Icon, registerIcon, Text, Status, useI18n, useConsolidatedRef, useElement, Button, Grid, SummaryItem, EmptyState, useTheme, tryCatch } from '@pega/cosmos-react-core';
6
+ import * as flagFinishIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/flag-finish.icon';
7
+ import * as plusIcon from '@pega/cosmos-react-core/lib/components/Icon/icons/plus.icon';
8
+ import { StyledTaskManager, StyledTaskManagerBanner, StyledTaskSummaryItem, StyledPopover, StyledTaskMain } from './TaskManager.styles';
5
9
  import TaskManagerContext from './TaskManager.context';
6
- import TaskDrawer from './TaskDrawer';
10
+ import TaskManagerTabs from './TaskManagerTabs';
7
11
  import TaskView from './TaskView';
8
12
  import Picker from './Picker/Picker';
13
+ registerIcon(plusIcon, flagFinishIcon);
9
14
  const TaskManager = forwardRef((props, ref) => {
10
- const { tasks = [], emptyText, onLaunchTask, onDismissTask, addTask, wrapUp, main, banner, ...restProps } = props;
15
+ const { tasks = [], emptyText, onTaskLaunch, onTaskDismiss, addTask, wrapUp, main, banner, ...restProps } = props;
11
16
  const t = useI18n();
12
- const taskDrawerRef = useRef(null);
17
+ const TaskManagerTabsRef = useRef(null);
13
18
  const consolidatedRef = useConsolidatedRef(ref);
14
- const hasDrawer = tasks.filter(task => task.active).length > 0 || !!(wrapUp === null || wrapUp === void 0 ? void 0 : wrapUp.active);
19
+ const hasDrawer = tasks.filter(task => task.active).length > 0 || !!wrapUp?.active;
15
20
  const [showPicker, setShowPicker] = useState(false);
16
21
  const [addTaskEl, setAddTaskEl] = useElement(null);
17
- const [popoverEl, setPopoverEl] = useElement(null);
18
22
  const theme = useTheme();
19
23
  useEffect(() => {
20
- if (taskDrawerRef.current && consolidatedRef.current) {
21
- consolidatedRef.current.style.minHeight = `${taskDrawerRef.current.scrollHeight}px`;
24
+ if (TaskManagerTabsRef.current && consolidatedRef.current) {
25
+ consolidatedRef.current.style.minHeight = `${TaskManagerTabsRef.current.scrollHeight}px`;
22
26
  }
23
27
  else if (consolidatedRef.current) {
24
28
  consolidatedRef.current.style.minHeight = '0';
25
29
  }
26
30
  }, [tasks, addTask]);
27
- useOuterEvent('mousedown', [popoverEl, addTaskEl], () => {
28
- setShowPicker(false);
29
- });
30
- return (React.createElement(TaskManagerContext.Provider, { value: {
31
+ return (_jsx(TaskManagerContext.Provider, { value: {
31
32
  addTask,
32
33
  wrapUp,
33
34
  tasks,
34
- onLaunchTask
35
- } },
36
- React.createElement("div", null,
37
- banner && (React.createElement(Flex, { as: StyledTaskManagerBanner, container: {
38
- alignItems: 'center'
39
- }, "aria-live": 'polite' },
40
- React.createElement(StyledTaskIcon, { variant: 'banner' },
41
- React.createElement(Icon, { name: banner.icon })),
42
- React.createElement(Text, { variant: 'h4' }, banner.content))),
43
- React.createElement(StyledTaskManager, { ...restProps, ref: consolidatedRef, hasDrawer: hasDrawer },
44
- hasDrawer && React.createElement(TaskDrawer, { ref: taskDrawerRef, addTask: addTask }),
45
- hasDrawer && main,
46
- !hasDrawer && (React.createElement(TaskView, { header: React.createElement(Text, { variant: 'h2' }, t('task_manager_tasks')), actions: React.createElement(Flex, { container: {
47
- itemGap: 1
48
- } },
49
- wrapUp && (React.createElement(Button, { variant: 'secondary', onClick: wrapUp.onWrapUp },
50
- React.createElement(Flex, { container: {
51
- itemGap: 1,
52
- alignItems: 'center'
53
- } },
54
- React.createElement(Icon, { name: 'flag-finish' }),
55
- React.createElement("span", null, t('task_manager_wrap_up'))))),
56
- addTask && (React.createElement(React.Fragment, null,
57
- React.createElement(Button, { variant: 'primary', onClick: () => setShowPicker(cur => !cur), ref: setAddTaskEl },
58
- React.createElement(Flex, { container: {
59
- itemGap: 1,
60
- alignItems: 'center'
61
- } },
62
- React.createElement(Icon, { name: 'plus' }),
63
- React.createElement("span", null, t('task_manager_add_task')))),
64
- React.createElement(StyledPopover, { show: showPicker, ref: setPopoverEl, target: addTaskEl, placement: 'bottom-end', modifiers: [
65
- {
66
- name: 'offset',
67
- options: {
68
- offset: [
69
- tryCatch(() => stripUnit(remToPx(theme.base.spacing)), () => 8),
70
- tryCatch(() => stripUnit(remToPx(theme.base.spacing)), () => 8)
71
- ]
72
- }
73
- }
74
- ] },
75
- React.createElement(Picker, { scrollAt: 10, emptyText: t('task_manager_search_results_empty_text'), items: addTask === null || addTask === void 0 ? void 0 : addTask.items, onAdd: (selectedItems) => {
76
- if (addTask.onAdd) {
77
- addTask === null || addTask === void 0 ? void 0 : addTask.onAdd(selectedItems);
78
- }
79
- setShowPicker(false);
80
- }, onCancel: () => {
81
- setShowPicker(false);
82
- }, ref: addTask.ref }))))) },
83
- React.createElement(Grid, { as: 'ul', container: true },
84
- tasks.map(({ name, id, status, variant = 'in-progress', meta, icon, ...restTaskProps }) => {
85
- return (React.createElement(SummaryItem, { ...restTaskProps, key: id, as: StyledTaskSummaryItem, variant: variant, primary: React.createElement(Text, { variant: 'h4' }, name), secondary: React.createElement(React.Fragment, null,
86
- !status && meta && React.createElement(Text, { variant: 'secondary' }, meta),
87
- status && React.createElement(Status, { variant: status.variant }, status.text)), visual: React.createElement(Icon, { name: icon }), actions: React.createElement(Flex, { container: { itemGap: 1 } },
88
- (variant === 'queued' || variant === 'suggested') && (React.createElement(React.Fragment, null,
89
- React.createElement(Button, { variant: 'simple', "aria-label": t('dismiss_label_a11y', name), onClick: () => {
90
- onDismissTask === null || onDismissTask === void 0 ? void 0 : onDismissTask(id);
91
- } }, t('dismiss')),
92
- React.createElement(Button, { variant: 'secondary', "aria-label": t('go_label_a11y', name), onClick: () => {
93
- onLaunchTask === null || onLaunchTask === void 0 ? void 0 : onLaunchTask(id);
94
- } }, t('go')))),
95
- variant === 'in-progress' && (React.createElement(Button, { variant: 'secondary', "aria-label": t('continue_label_a11y', name), onClick: () => {
96
- onLaunchTask === null || onLaunchTask === void 0 ? void 0 : onLaunchTask(id);
97
- } }, t('continue'))),
98
- variant === 'resolved' && (React.createElement(Button, { variant: 'secondary', "aria-label": t('review_label_a11y', name), onClick: () => {
99
- onLaunchTask === null || onLaunchTask === void 0 ? void 0 : onLaunchTask(id);
100
- } }, t('review')))) }));
101
- }),
102
- tasks.length === 0 && React.createElement(NoItems, { message: emptyText }))))))));
35
+ onTaskLaunch
36
+ }, children: _jsxs("div", { children: [banner && (_jsxs(Flex, { as: StyledTaskManagerBanner, container: {
37
+ alignItems: 'center'
38
+ }, "aria-live": 'polite', children: [_jsx(Icon, { name: banner.icon }, void 0), _jsx(Text, { variant: 'h4', children: banner.content }, void 0)] }, void 0)), _jsx(StyledTaskManager, { ...restProps, ref: consolidatedRef, hasDrawer: hasDrawer, children: _jsxs(TaskView, { header: _jsx(Text, { variant: 'h2', children: t('task_manager_tasks') }, void 0), actions: _jsxs(Flex, { container: {
39
+ itemGap: 1
40
+ }, children: [wrapUp && (_jsx(Button, { variant: 'secondary', onClick: wrapUp.onWrapUp, children: _jsxs(Flex, { container: {
41
+ itemGap: 1,
42
+ alignItems: 'center'
43
+ }, children: [_jsx(Icon, { name: 'flag-finish' }, void 0), _jsx("span", { children: t('task_manager_wrap_up') }, void 0)] }, void 0) }, void 0)), addTask && (_jsxs(_Fragment, { children: [_jsx(Button, { variant: 'primary', onClick: () => setShowPicker(cur => !cur), ref: setAddTaskEl, children: _jsxs(Flex, { container: {
44
+ gap: 1,
45
+ alignItems: 'center'
46
+ }, children: [_jsx(Icon, { name: 'plus' }, void 0), _jsx("span", { children: t('task_manager_add_task') }, void 0)] }, void 0) }, void 0), _jsx(StyledPopover, { show: showPicker, target: addTaskEl, placement: 'bottom-end', modifiers: [
47
+ {
48
+ name: 'offset',
49
+ options: {
50
+ offset: [
51
+ tryCatch(() => stripUnit(remToPx(theme.base.spacing)), () => 8),
52
+ tryCatch(() => stripUnit(remToPx(theme.base.spacing)), () => 8)
53
+ ]
54
+ }
55
+ }
56
+ ], children: _jsx(Picker, { scrollAt: 10, emptyText: t('task_manager_search_results_empty_text'), items: addTask?.items, onAdd: (selectedItems) => {
57
+ if (addTask.onAdd) {
58
+ addTask?.onAdd(selectedItems);
59
+ }
60
+ setShowPicker(false);
61
+ }, onCancel: () => {
62
+ setShowPicker(false);
63
+ }, ref: addTask.ref, placeholder: t('search_tasks') }, void 0) }, void 0)] }, void 0))] }, void 0), children: [hasDrawer && _jsx(TaskManagerTabs, { ref: TaskManagerTabsRef }, void 0), hasDrawer && _jsx(StyledTaskMain, { children: main }, void 0), !hasDrawer && (_jsxs(Grid, { as: 'ul', container: true, children: [tasks.map(({ name, id, status, variant = 'in-progress', meta, icon, ...restTaskProps }) => {
64
+ return (_createElement(SummaryItem, { ...restTaskProps, key: id, as: StyledTaskSummaryItem, variant: variant, primary: _jsx(Text, { variant: 'h4', children: name }, void 0), secondary: _jsxs(_Fragment, { children: [!status && meta && _jsx(Text, { variant: 'secondary', children: meta }, void 0), status && _jsx(Status, { variant: status.variant, children: status.text }, void 0)] }, void 0), visual: _jsx(Icon, { name: icon }, void 0), actions: _jsxs(Flex, { container: { gap: 1 }, children: [(variant === 'queued' || variant === 'suggested') && (_jsxs(_Fragment, { children: [_jsx(Button, { variant: 'simple', "aria-label": t('dismiss_label_a11y', [name]), onClick: () => {
65
+ onTaskDismiss?.(id);
66
+ }, children: t('dismiss') }, void 0), _jsx(Button, { variant: 'secondary', "aria-label": t('go_label_a11y', [name]), onClick: () => {
67
+ onTaskLaunch?.(id);
68
+ }, children: t('go') }, void 0)] }, void 0)), variant === 'in-progress' && (_jsx(Button, { variant: 'secondary', "aria-label": t('continue_label_a11y', [name]), onClick: () => {
69
+ onTaskLaunch?.(id);
70
+ }, children: t('continue') }, void 0)), variant === 'resolved' && (_jsx(Button, { variant: 'secondary', "aria-label": t('review_label_a11y', [name]), onClick: () => {
71
+ onTaskLaunch?.(id);
72
+ }, children: t('review') }, void 0))] }, void 0) }));
73
+ }), tasks.length === 0 && _jsx(EmptyState, { message: emptyText }, void 0)] }, void 0))] }, void 0) }, void 0)] }, void 0) }, void 0));
103
74
  });
104
75
  export default TaskManager;
105
76
  //# sourceMappingURL=TaskManager.js.map