@x15ventures/x15-ui-library 3.16.1 → 3.17.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 (95) hide show
  1. package/dist/cjs/autoGenerated/libraryThemes.js +12 -12
  2. package/dist/cjs/autoGenerated/libraryThemes.js.map +1 -1
  3. package/dist/cjs/autoGenerated/libraryThemes.json +12 -12
  4. package/dist/cjs/components/design/dialog/Dialog.js +3 -1
  5. package/dist/cjs/components/design/dialog/Dialog.js.map +1 -1
  6. package/dist/cjs/components/design/dialog/dialog.css +5 -0
  7. package/dist/cjs/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.js +88 -0
  8. package/dist/cjs/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.js.map +1 -0
  9. package/dist/cjs/components/design/progressIndicators/circularProgressIndicator/circularProgressIndicator.css +301 -0
  10. package/dist/cjs/components/design/tooltip/Tooltip.js +42 -5
  11. package/dist/cjs/components/design/tooltip/Tooltip.js.map +1 -1
  12. package/dist/cjs/components/design/tooltip/index.js +6 -0
  13. package/dist/cjs/components/design/tooltip/index.js.map +1 -1
  14. package/dist/cjs/components/design/tooltip/tooltip.css +18 -7
  15. package/dist/cjs/components/index.js +7 -0
  16. package/dist/cjs/components/index.js.map +1 -1
  17. package/dist/cjs/hooks/InteractiveHostFocus.js +62 -0
  18. package/dist/cjs/hooks/InteractiveHostFocus.js.map +1 -0
  19. package/dist/cjs/hooks/index.js +7 -0
  20. package/dist/cjs/hooks/index.js.map +1 -1
  21. package/dist/cjs/index.js +22 -0
  22. package/dist/cjs/index.js.map +1 -1
  23. package/dist/cjs/package.json +1 -1
  24. package/dist/cjs/widgets/index.js +14 -0
  25. package/dist/cjs/widgets/index.js.map +1 -0
  26. package/dist/cjs/widgets/processLauncher/ProcessLauncher.js +278 -0
  27. package/dist/cjs/widgets/processLauncher/ProcessLauncher.js.map +1 -0
  28. package/dist/cjs/widgets/processLauncher/index.js +13 -0
  29. package/dist/cjs/widgets/processLauncher/index.js.map +1 -0
  30. package/dist/cjs/widgets/processLauncher/processLauncher.interfaces.js +6 -0
  31. package/dist/cjs/widgets/processLauncher/processLauncher.interfaces.js.map +1 -0
  32. package/dist/components/design/dialog/Dialog.d.ts.map +1 -1
  33. package/dist/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.d.ts +17 -0
  34. package/dist/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.d.ts.map +1 -0
  35. package/dist/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.test.d.ts +5 -0
  36. package/dist/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.test.d.ts.map +1 -0
  37. package/dist/components/design/tooltip/Tooltip.d.ts +13 -0
  38. package/dist/components/design/tooltip/Tooltip.d.ts.map +1 -1
  39. package/dist/components/design/tooltip/Tooltip.test.d.ts +1 -1
  40. package/dist/components/design/tooltip/Tooltip.test.d.ts.map +1 -1
  41. package/dist/components/design/tooltip/index.d.ts +1 -1
  42. package/dist/components/design/tooltip/index.d.ts.map +1 -1
  43. package/dist/components/index.d.ts +2 -0
  44. package/dist/components/index.d.ts.map +1 -1
  45. package/dist/esm/autoGenerated/libraryThemes.js +12 -12
  46. package/dist/esm/autoGenerated/libraryThemes.js.map +1 -1
  47. package/dist/esm/autoGenerated/libraryThemes.json +12 -12
  48. package/dist/esm/components/design/dialog/Dialog.js +3 -1
  49. package/dist/esm/components/design/dialog/Dialog.js.map +1 -1
  50. package/dist/esm/components/design/dialog/dialog.css +5 -0
  51. package/dist/esm/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.js +81 -0
  52. package/dist/esm/components/design/progressIndicators/circularProgressIndicator/CircularProgressIndicator.js.map +1 -0
  53. package/dist/esm/components/design/progressIndicators/circularProgressIndicator/circularProgressIndicator.css +301 -0
  54. package/dist/esm/components/design/tooltip/Tooltip.js +40 -4
  55. package/dist/esm/components/design/tooltip/Tooltip.js.map +1 -1
  56. package/dist/esm/components/design/tooltip/index.js +1 -1
  57. package/dist/esm/components/design/tooltip/index.js.map +1 -1
  58. package/dist/esm/components/design/tooltip/tooltip.css +18 -7
  59. package/dist/esm/components/index.js +1 -0
  60. package/dist/esm/components/index.js.map +1 -1
  61. package/dist/esm/hooks/InteractiveHostFocus.js +56 -0
  62. package/dist/esm/hooks/InteractiveHostFocus.js.map +1 -0
  63. package/dist/esm/hooks/index.js +1 -0
  64. package/dist/esm/hooks/index.js.map +1 -1
  65. package/dist/esm/index.js +3 -2
  66. package/dist/esm/index.js.map +1 -1
  67. package/dist/esm/package.json +1 -1
  68. package/dist/esm/widgets/index.js +4 -0
  69. package/dist/esm/widgets/index.js.map +1 -0
  70. package/dist/esm/widgets/processLauncher/ProcessLauncher.js +269 -0
  71. package/dist/esm/widgets/processLauncher/ProcessLauncher.js.map +1 -0
  72. package/dist/esm/widgets/processLauncher/index.js +2 -0
  73. package/dist/esm/widgets/processLauncher/index.js.map +1 -0
  74. package/dist/esm/widgets/processLauncher/processLauncher.interfaces.js +2 -0
  75. package/dist/esm/widgets/processLauncher/processLauncher.interfaces.js.map +1 -0
  76. package/dist/hooks/InteractiveHostFocus.d.ts +12 -0
  77. package/dist/hooks/InteractiveHostFocus.d.ts.map +1 -0
  78. package/dist/hooks/InteractiveHostFocus.test.d.ts +5 -0
  79. package/dist/hooks/InteractiveHostFocus.test.d.ts.map +1 -0
  80. package/dist/hooks/index.d.ts +1 -0
  81. package/dist/hooks/index.d.ts.map +1 -1
  82. package/dist/index.d.ts +5 -3
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/package.json +1 -1
  85. package/dist/widgets/index.d.ts +3 -0
  86. package/dist/widgets/index.d.ts.map +1 -0
  87. package/dist/widgets/processLauncher/ProcessLauncher.d.ts +21 -0
  88. package/dist/widgets/processLauncher/ProcessLauncher.d.ts.map +1 -0
  89. package/dist/widgets/processLauncher/ProcessLauncher.test.d.ts +5 -0
  90. package/dist/widgets/processLauncher/ProcessLauncher.test.d.ts.map +1 -0
  91. package/dist/widgets/processLauncher/index.d.ts +4 -0
  92. package/dist/widgets/processLauncher/index.d.ts.map +1 -0
  93. package/dist/widgets/processLauncher/processLauncher.interfaces.d.ts +45 -0
  94. package/dist/widgets/processLauncher/processLauncher.interfaces.d.ts.map +1 -0
  95. package/package.json +1 -1
@@ -0,0 +1,269 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React, { useCallback, useEffect, useRef } from 'react';
3
+ import { useFormContext } from 'react-hook-form';
4
+ import { Icon, SimpleButton, Dialog, CircularProgressIndicator } from '../../components';
5
+ /*
6
+ ProcessLauncher is a component that provides a UI for launching an process.
7
+ It displays a button that opens a modal for launching the process when the process is in the 'prelaunch' state.
8
+ It displays a CircularProgressIndicator when the process is in other states (running, complete, warning, error).
9
+ The dialog contains a form for configuring the process before launching it. The form is passed as children to the ProcessLauncher component.
10
+ */
11
+
12
+ const defaultLaunchButtonProps = {
13
+ cssClass: 'button outline icon-only processLauncherButton',
14
+ hideLabel: true,
15
+ size: 'default',
16
+ icon: /*#__PURE__*/React.createElement(Icon, {
17
+ icon: "magic-wand"
18
+ })
19
+ };
20
+ const defaultProgressIndicatorProps = {
21
+ size: 'small',
22
+ hideLabel: true,
23
+ icon: /*#__PURE__*/React.createElement(Icon, {
24
+ icon: "magic-wand"
25
+ })
26
+ };
27
+ export const ProcessLauncher = ({
28
+ initialStatus = 'idle',
29
+ statusMessage = '',
30
+ processDefinition,
31
+ launchButtonProps = {},
32
+ progressIndicatorProps = {},
33
+ onLaunch = () => {},
34
+ onCancel = () => {},
35
+ progressUpdateMode = 'fetch',
36
+ onProgressCheck,
37
+ progressSubscription,
38
+ onProgressIndicatorClick,
39
+ preRequisiteFieldIds = [],
40
+ preRequisitesDialogTitle = 'Launch Process',
41
+ children
42
+ }) => {
43
+ const {
44
+ id: processId
45
+ } = processDefinition;
46
+ const [isDialogOpen, setIsDialogOpen] = React.useState(false);
47
+ const [status, setStatus] = React.useState(initialStatus);
48
+ const [currentProgress, setCurrentProgress] = React.useState(0);
49
+ const launchAttemptRef = useRef(0);
50
+ const formContext = useFormContext();
51
+ const handleCancel = () => {
52
+ launchAttemptRef.current += 1;
53
+ setIsDialogOpen(false);
54
+ setStatus('idle');
55
+ onCancel();
56
+ };
57
+ const handlePreLaunchTriggered = () => {
58
+ launchAttemptRef.current += 1;
59
+ setStatus('prelaunch');
60
+ setIsDialogOpen(true);
61
+ };
62
+ const handleLaunch = async () => {
63
+ const launchAttempt = ++launchAttemptRef.current;
64
+ // Validate the form data here if needed before launching the process
65
+ // Get the field values from the form and pass them to the onLaunch function
66
+ // Loop through the preRequisiteFieldIds and check if they have values in the form
67
+ // Also bundle the values of the preRequisiteFieldIds and pass them to the onLaunch function
68
+ if (preRequisiteFieldIds.length === 0) {
69
+ // If there are no preRequisiteFieldIds, we can launch the process without any validation
70
+ setIsDialogOpen(false);
71
+ setStatus('running');
72
+ onLaunch({
73
+ processId,
74
+ fieldValues: {}
75
+ });
76
+ return;
77
+ }
78
+ const {
79
+ trigger,
80
+ getFieldState,
81
+ setFocus
82
+ } = formContext;
83
+ const isValid = await trigger(preRequisiteFieldIds);
84
+ if (launchAttempt !== launchAttemptRef.current) return;
85
+ if (!isValid) {
86
+ const firstInvalidFieldId = preRequisiteFieldIds.find(fieldId => getFieldState(fieldId).invalid);
87
+ if (firstInvalidFieldId) setFocus(firstInvalidFieldId);
88
+ return;
89
+ }
90
+ setIsDialogOpen(false);
91
+ setStatus('running');
92
+ setCurrentProgress(0);
93
+ const fieldValues = Object.fromEntries(preRequisiteFieldIds.map(fieldId => [fieldId, formContext.getValues(fieldId)]));
94
+ onLaunch({
95
+ processId,
96
+ fieldValues
97
+ });
98
+ };
99
+
100
+ // Ref (not a render-scoped let) so every closure clears the same interval handle
101
+ const progressCheckIntervalRef = useRef(null);
102
+ const progressUnsubscribeRef = useRef(null);
103
+ const turnOffProgressCheck = useCallback(() => {
104
+ if (progressCheckIntervalRef.current) {
105
+ clearInterval(progressCheckIntervalRef.current);
106
+ progressCheckIntervalRef.current = null;
107
+ }
108
+ }, []);
109
+ const turnOffProgressSubscription = useCallback(() => {
110
+ if (progressUnsubscribeRef.current) {
111
+ progressUnsubscribeRef.current();
112
+ progressUnsubscribeRef.current = null;
113
+ }
114
+ }, []);
115
+ const handleProgressUpdate = useCallback(({
116
+ progress: updatedProgress,
117
+ status: explicitStatus
118
+ }) => {
119
+ if (updatedProgress === undefined || updatedProgress === null) {
120
+ setStatus('error');
121
+ return;
122
+ }
123
+ setCurrentProgress(updatedProgress);
124
+
125
+ // An explicit status (e.g. warning) always wins over the value inferred from progress alone.
126
+ if (explicitStatus) {
127
+ setStatus(explicitStatus);
128
+ if (explicitStatus === 'complete' || explicitStatus === 'error') {
129
+ turnOffProgressCheck();
130
+ turnOffProgressSubscription();
131
+ }
132
+ return;
133
+ }
134
+ if (updatedProgress === 100) {
135
+ setStatus('complete');
136
+ turnOffProgressCheck();
137
+ turnOffProgressSubscription();
138
+ } else if (updatedProgress >= 0 && updatedProgress < 100) {
139
+ setStatus('running');
140
+ }
141
+ }, [setStatus, setCurrentProgress, turnOffProgressCheck, turnOffProgressSubscription]);
142
+ const turnOnProgressCheck = useCallback(() => {
143
+ turnOffProgressCheck();
144
+ let inFlight = false;
145
+ let active = true;
146
+ progressCheckIntervalRef.current = setInterval(() => {
147
+ if (inFlight || !active) return;
148
+ inFlight = true;
149
+ onProgressCheck?.().then(updatedProgress => {
150
+ if (active) handleProgressUpdate({
151
+ progress: updatedProgress
152
+ });
153
+ }).catch(e => {
154
+ if (active) {
155
+ console.error('Error getting process progress', e);
156
+ setStatus('error');
157
+ }
158
+ }).finally(() => {
159
+ inFlight = false;
160
+ });
161
+ }, 1000);
162
+ return () => {
163
+ active = false;
164
+ turnOffProgressCheck();
165
+ };
166
+ }, [turnOffProgressCheck, onProgressCheck, handleProgressUpdate]);
167
+ const turnOnProgressSubscription = useCallback(() => {
168
+ turnOffProgressSubscription();
169
+ if (!progressSubscription) {
170
+ console.error('progressUpdateMode is "subscribe" but no progressSubscription was provided');
171
+ return;
172
+ }
173
+ progressUnsubscribeRef.current = progressSubscription.subscribe(progressSubscription.eventName, {
174
+ onProgress: handleProgressUpdate,
175
+ onError: () => setStatus('error')
176
+ });
177
+ }, [turnOffProgressSubscription, progressSubscription, handleProgressUpdate]);
178
+ const handleResetLauncher = () => {
179
+ setStatus('idle');
180
+ setCurrentProgress(0);
181
+ turnOffProgressCheck();
182
+ turnOffProgressSubscription();
183
+ };
184
+
185
+ // 'warning' is a non-terminal state pushed mid-run, so treat it the same as 'running' here.
186
+ const isProgressActive = status === 'running' || status === 'warning';
187
+ useEffect(() => {
188
+ // Depending on the derived boolean (not `status` itself) avoids tearing down and
189
+ // re-establishing the poll/subscription when moving between 'running' and 'warning'.
190
+ let stopProgressCheck;
191
+ if (isProgressActive) {
192
+ if (progressUpdateMode === 'subscribe') {
193
+ turnOnProgressSubscription();
194
+ } else {
195
+ stopProgressCheck = turnOnProgressCheck();
196
+ }
197
+ } else {
198
+ turnOffProgressCheck();
199
+ turnOffProgressSubscription();
200
+ }
201
+ return () => {
202
+ stopProgressCheck?.();
203
+ turnOffProgressSubscription();
204
+ };
205
+ }, [isProgressActive, progressUpdateMode, turnOnProgressCheck, turnOnProgressSubscription, turnOffProgressCheck, turnOffProgressSubscription]);
206
+ const getLaunchButtonClassName = () => {
207
+ if (launchButtonProps.cssClass) {
208
+ return launchButtonProps.cssClass;
209
+ }
210
+ return launchButtonProps.size === 'xsmall' ? `${defaultLaunchButtonProps.cssClass} compact` : defaultLaunchButtonProps.cssClass;
211
+ };
212
+ const baseProgressIndicatorProps = {
213
+ ...defaultProgressIndicatorProps,
214
+ ...progressIndicatorProps,
215
+ statusMessage,
216
+ id: `processLauncherProgressIndicator_${processDefinition.id}`,
217
+ name: processDefinition.name,
218
+ progress: currentProgress
219
+ };
220
+ return /*#__PURE__*/React.createElement("div", {
221
+ className: `processLauncher ${launchButtonProps.size || 'default'}`
222
+ }, (status === 'idle' || status === 'prelaunch') && /*#__PURE__*/React.createElement(SimpleButton, _extends({}, defaultLaunchButtonProps, launchButtonProps, {
223
+ cssClass: getLaunchButtonClassName(),
224
+ leftIcon: {
225
+ icon: launchButtonProps.icon || defaultLaunchButtonProps.icon
226
+ },
227
+ id: `processLauncherButton_${processDefinition.id}`,
228
+ label: `Launch ${processDefinition.name}`,
229
+ onClickHandler: preRequisiteFieldIds.length > 0 ? handlePreLaunchTriggered : handleLaunch
230
+ })), status === 'prelaunch' && /*#__PURE__*/React.createElement(Dialog, {
231
+ customCssClasses: {
232
+ dialog: 'processLauncherDialog'
233
+ },
234
+ open: isDialogOpen,
235
+ id: `processLauncherDialog_${processDefinition.id}`,
236
+ size: "m",
237
+ onClose: handleCancel,
238
+ header: preRequisitesDialogTitle,
239
+ footer: /*#__PURE__*/React.createElement("div", {
240
+ className: "actionButtons"
241
+ }, /*#__PURE__*/React.createElement(SimpleButton, {
242
+ id: `processLauncherDialogCancelButton_${processDefinition.id}`,
243
+ label: "Cancel",
244
+ onClickHandler: handleCancel,
245
+ cssClass: "secondary outline"
246
+ }), /*#__PURE__*/React.createElement(SimpleButton, {
247
+ id: `processLauncherDialogLaunchButton_${processDefinition.id}`,
248
+ label: "Launch process",
249
+ onClickHandler: handleLaunch,
250
+ cssClass: "primary"
251
+ }))
252
+ }, /*#__PURE__*/React.createElement("div", {
253
+ className: "processLauncherPrerequisites"
254
+ }, children)), status === 'running' && /*#__PURE__*/React.createElement(CircularProgressIndicator, _extends({}, baseProgressIndicatorProps, {
255
+ mode: "default",
256
+ onClickHandler: onProgressIndicatorClick
257
+ })), status === 'warning' && /*#__PURE__*/React.createElement(CircularProgressIndicator, _extends({}, baseProgressIndicatorProps, {
258
+ mode: "warning",
259
+ onClickHandler: onProgressIndicatorClick
260
+ })), status === 'complete' && /*#__PURE__*/React.createElement(CircularProgressIndicator, _extends({}, baseProgressIndicatorProps, {
261
+ mode: "success",
262
+ onClickHandler: handleResetLauncher
263
+ })), status === 'error' && /*#__PURE__*/React.createElement(CircularProgressIndicator, _extends({}, baseProgressIndicatorProps, {
264
+ mode: "error",
265
+ onClickHandler: handleResetLauncher
266
+ })));
267
+ };
268
+ export default ProcessLauncher;
269
+ //# sourceMappingURL=ProcessLauncher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessLauncher.js","names":["React","useCallback","useEffect","useRef","useFormContext","Icon","SimpleButton","Dialog","CircularProgressIndicator","defaultLaunchButtonProps","cssClass","hideLabel","size","icon","createElement","defaultProgressIndicatorProps","ProcessLauncher","initialStatus","statusMessage","processDefinition","launchButtonProps","progressIndicatorProps","onLaunch","onCancel","progressUpdateMode","onProgressCheck","progressSubscription","onProgressIndicatorClick","preRequisiteFieldIds","preRequisitesDialogTitle","children","id","processId","isDialogOpen","setIsDialogOpen","useState","status","setStatus","currentProgress","setCurrentProgress","launchAttemptRef","formContext","handleCancel","current","handlePreLaunchTriggered","handleLaunch","launchAttempt","length","fieldValues","trigger","getFieldState","setFocus","isValid","firstInvalidFieldId","find","fieldId","invalid","Object","fromEntries","map","getValues","progressCheckIntervalRef","progressUnsubscribeRef","turnOffProgressCheck","clearInterval","turnOffProgressSubscription","handleProgressUpdate","progress","updatedProgress","explicitStatus","undefined","turnOnProgressCheck","inFlight","active","setInterval","then","catch","e","console","error","finally","turnOnProgressSubscription","subscribe","eventName","onProgress","onError","handleResetLauncher","isProgressActive","stopProgressCheck","getLaunchButtonClassName","baseProgressIndicatorProps","name","className","_extends","leftIcon","label","onClickHandler","customCssClasses","dialog","open","onClose","header","footer","mode"],"sources":["../../../../src/widgets/processLauncher/ProcessLauncher.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useEffect, useRef } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { Icon, SimpleButton, Dialog, CircularProgressIndicator } from '../../components';\n\nimport {\n ProcessDefinition,\n ProcessLaunchButtonProps,\n ProcessLauncherProgressProps,\n ProcessProgressIndicatorProps, ProcessProgressUpdate, ProcessStatus\n} from './processLauncher.interfaces';\n\nexport type ProcessLauncherProps = {\n initialStatus?: ProcessStatus;\n statusMessage?: string;\n processDefinition: ProcessDefinition;\n launchButtonProps?: ProcessLaunchButtonProps;\n progressIndicatorProps?: ProcessProgressIndicatorProps;\n /* eslint-disable-next-line no-unused-vars */\n onLaunch: (params: {processId: string, fieldValues: Record<string, unknown>}) => void;\n onCancel: () => void;\n onProgressIndicatorClick?: () => void;\n preRequisiteFieldIds?: string[];\n preRequisitesDialogTitle?: string;\n children: ReactNode;\n} & ProcessLauncherProgressProps;\n\n/*\n ProcessLauncher is a component that provides a UI for launching an process.\n It displays a button that opens a modal for launching the process when the process is in the 'prelaunch' state.\n It displays a CircularProgressIndicator when the process is in other states (running, complete, warning, error).\n The dialog contains a form for configuring the process before launching it. The form is passed as children to the ProcessLauncher component.\n */\n\nconst defaultLaunchButtonProps: ProcessLaunchButtonProps = {\n cssClass: 'button outline icon-only processLauncherButton',\n hideLabel: true,\n size: 'default',\n icon: <Icon icon=\"magic-wand\" />\n};\n\nconst defaultProgressIndicatorProps: ProcessProgressIndicatorProps = {\n size: 'small',\n hideLabel: true,\n icon: <Icon icon=\"magic-wand\" />\n};\n\nexport const ProcessLauncher: React.FC<ProcessLauncherProps> = (\n {\n initialStatus = 'idle',\n statusMessage = '',\n processDefinition,\n launchButtonProps = {},\n progressIndicatorProps = {},\n onLaunch = () => {},\n onCancel = () => {},\n progressUpdateMode = 'fetch',\n onProgressCheck,\n progressSubscription,\n onProgressIndicatorClick,\n preRequisiteFieldIds = [],\n preRequisitesDialogTitle = 'Launch Process',\n children\n }\n) => {\n const { id: processId } = processDefinition;\n\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\n const [status, setStatus] = React.useState<ProcessStatus>(initialStatus);\n const [currentProgress, setCurrentProgress] = React.useState<number>(0);\n const launchAttemptRef = useRef(0);\n\n const formContext = useFormContext();\n\n const handleCancel = () => {\n launchAttemptRef.current += 1;\n setIsDialogOpen(false);\n setStatus('idle');\n onCancel();\n };\n\n const handlePreLaunchTriggered = () => {\n launchAttemptRef.current += 1;\n setStatus('prelaunch');\n setIsDialogOpen(true);\n };\n\n const handleLaunch = async () => {\n const launchAttempt = ++launchAttemptRef.current;\n // Validate the form data here if needed before launching the process\n // Get the field values from the form and pass them to the onLaunch function\n // Loop through the preRequisiteFieldIds and check if they have values in the form\n // Also bundle the values of the preRequisiteFieldIds and pass them to the onLaunch function\n if (preRequisiteFieldIds.length === 0) {\n // If there are no preRequisiteFieldIds, we can launch the process without any validation\n setIsDialogOpen(false);\n setStatus('running');\n onLaunch({ processId, fieldValues: {} });\n return;\n }\n\n const { trigger, getFieldState, setFocus } = formContext;\n const isValid = await trigger(preRequisiteFieldIds);\n if (launchAttempt !== launchAttemptRef.current) return;\n\n if (!isValid) {\n const firstInvalidFieldId = preRequisiteFieldIds.find((fieldId) => getFieldState(fieldId).invalid);\n if (firstInvalidFieldId) setFocus(firstInvalidFieldId);\n return;\n }\n\n setIsDialogOpen(false);\n setStatus('running');\n setCurrentProgress(0);\n\n const fieldValues = Object.fromEntries(\n preRequisiteFieldIds.map((fieldId) => [fieldId, formContext.getValues(fieldId)])\n );\n onLaunch({ processId, fieldValues });\n };\n\n // Ref (not a render-scoped let) so every closure clears the same interval handle\n const progressCheckIntervalRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const progressUnsubscribeRef = useRef<(() => void) | null>(null);\n\n const turnOffProgressCheck = useCallback(() => {\n if (progressCheckIntervalRef.current) {\n clearInterval(progressCheckIntervalRef.current);\n progressCheckIntervalRef.current = null;\n }\n }, []);\n\n const turnOffProgressSubscription = useCallback(() => {\n if (progressUnsubscribeRef.current) {\n progressUnsubscribeRef.current();\n progressUnsubscribeRef.current = null;\n }\n }, []);\n\n const handleProgressUpdate = useCallback(({ progress: updatedProgress, status: explicitStatus }: ProcessProgressUpdate) => {\n if (updatedProgress === undefined || updatedProgress === null) {\n setStatus('error');\n return;\n }\n\n setCurrentProgress(updatedProgress);\n\n // An explicit status (e.g. warning) always wins over the value inferred from progress alone.\n if (explicitStatus) {\n setStatus(explicitStatus);\n if (explicitStatus === 'complete' || explicitStatus === 'error') {\n turnOffProgressCheck();\n turnOffProgressSubscription();\n }\n return;\n }\n\n if (updatedProgress === 100) {\n setStatus('complete');\n turnOffProgressCheck();\n turnOffProgressSubscription();\n } else if (updatedProgress >= 0 && updatedProgress < 100) {\n setStatus('running');\n }\n }, [setStatus, setCurrentProgress, turnOffProgressCheck, turnOffProgressSubscription]);\n\n const turnOnProgressCheck = useCallback(() => {\n turnOffProgressCheck();\n let inFlight = false;\n let active = true;\n progressCheckIntervalRef.current = setInterval(() => {\n if (inFlight || !active) return;\n inFlight = true;\n onProgressCheck?.().then((updatedProgress) => {\n if (active) handleProgressUpdate({ progress: updatedProgress });\n }).catch((e) => {\n if (active) {\n console.error('Error getting process progress', e);\n setStatus('error');\n }\n }).finally(() => {\n inFlight = false;\n });\n }, 1000);\n return () => {\n active = false;\n turnOffProgressCheck();\n };\n }, [turnOffProgressCheck, onProgressCheck, handleProgressUpdate]);\n\n const turnOnProgressSubscription = useCallback(() => {\n turnOffProgressSubscription();\n if (!progressSubscription) {\n console.error('progressUpdateMode is \"subscribe\" but no progressSubscription was provided');\n return;\n }\n\n progressUnsubscribeRef.current = progressSubscription.subscribe(\n progressSubscription.eventName,\n {\n onProgress: handleProgressUpdate,\n onError: () => setStatus('error')\n }\n );\n }, [turnOffProgressSubscription, progressSubscription, handleProgressUpdate]);\n\n const handleResetLauncher = () => {\n setStatus('idle');\n setCurrentProgress(0);\n turnOffProgressCheck();\n turnOffProgressSubscription();\n };\n\n // 'warning' is a non-terminal state pushed mid-run, so treat it the same as 'running' here.\n const isProgressActive = status === 'running' || status === 'warning';\n\n useEffect(() => {\n // Depending on the derived boolean (not `status` itself) avoids tearing down and\n // re-establishing the poll/subscription when moving between 'running' and 'warning'.\n let stopProgressCheck: (() => void) | undefined;\n if (isProgressActive) {\n if (progressUpdateMode === 'subscribe') {\n turnOnProgressSubscription();\n } else {\n stopProgressCheck = turnOnProgressCheck();\n }\n } else {\n turnOffProgressCheck();\n turnOffProgressSubscription();\n }\n return () => {\n stopProgressCheck?.();\n turnOffProgressSubscription();\n };\n }, [isProgressActive, progressUpdateMode, turnOnProgressCheck, turnOnProgressSubscription, turnOffProgressCheck, turnOffProgressSubscription]);\n\n const getLaunchButtonClassName = () => {\n if (launchButtonProps.cssClass) {\n return launchButtonProps.cssClass;\n }\n\n return launchButtonProps.size === 'xsmall'\n ? `${ defaultLaunchButtonProps.cssClass } compact`\n : defaultLaunchButtonProps.cssClass;\n };\n\n const baseProgressIndicatorProps = {\n ...defaultProgressIndicatorProps,\n ...progressIndicatorProps,\n statusMessage,\n id: `processLauncherProgressIndicator_${ processDefinition.id }`,\n name: processDefinition.name,\n progress: currentProgress,\n };\n\n return (\n <div className={ `processLauncher ${ launchButtonProps.size || 'default' }` }>\n {\n (status === 'idle' || status === 'prelaunch') &&\n <SimpleButton\n {\n ...{\n ...defaultLaunchButtonProps,\n ...launchButtonProps,\n }\n }\n cssClass={ getLaunchButtonClassName() }\n leftIcon={ { icon: launchButtonProps.icon || defaultLaunchButtonProps.icon } }\n id={ `processLauncherButton_${ processDefinition.id }` }\n label={ `Launch ${ processDefinition.name }` }\n onClickHandler={\n preRequisiteFieldIds.length > 0 ? handlePreLaunchTriggered : handleLaunch\n }\n />\n }\n\n {\n status === 'prelaunch' && (\n <Dialog\n customCssClasses={ { dialog: 'processLauncherDialog' } }\n open={ isDialogOpen }\n id={ `processLauncherDialog_${ processDefinition.id }` }\n size=\"m\"\n onClose={ handleCancel }\n header={ preRequisitesDialogTitle }\n footer={\n <div className=\"actionButtons\">\n <SimpleButton id={ `processLauncherDialogCancelButton_${ processDefinition.id }` } label=\"Cancel\" onClickHandler={ handleCancel } cssClass=\"secondary outline\" />\n <SimpleButton id={ `processLauncherDialogLaunchButton_${ processDefinition.id }` } label=\"Launch process\" onClickHandler={ handleLaunch } cssClass=\"primary\" />\n </div>\n }\n >\n <div className=\"processLauncherPrerequisites\">\n { children }\n </div>\n </Dialog>\n )\n }\n\n { status === 'running' && (\n <CircularProgressIndicator\n {\n ...{\n ...baseProgressIndicatorProps\n }\n }\n mode=\"default\"\n onClickHandler={ onProgressIndicatorClick }\n />\n ) }\n\n { status === 'warning' && (\n <CircularProgressIndicator\n {\n ...{\n ...baseProgressIndicatorProps\n }\n }\n mode=\"warning\"\n onClickHandler={ onProgressIndicatorClick }\n />\n ) }\n\n { status === 'complete' && (\n <CircularProgressIndicator\n {\n ...{\n ...baseProgressIndicatorProps\n }\n }\n mode=\"success\"\n onClickHandler={ handleResetLauncher }\n />\n ) }\n\n { status === 'error' && (\n <CircularProgressIndicator\n {\n ...{\n ...baseProgressIndicatorProps\n }\n }\n mode=\"error\"\n onClickHandler={ handleResetLauncher }\n />\n ) }\n </div>\n );\n};\n\nexport default ProcessLauncher;"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export { ProcessLauncher } from './ProcessLauncher';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["ProcessLauncher"],"sources":["../../../../src/widgets/processLauncher/index.ts"],"sourcesContent":["export { ProcessLauncher } from './ProcessLauncher';\n\nexport type { ProcessLauncherProps } from './ProcessLauncher';\nexport type {\n ProcessDefinition,\n ProcessLaunchButtonProps,\n ProcessProgressIndicatorProps,\n ProcessStatus,\n ProcessProgressUpdateMode,\n ProcessPushableStatus,\n ProcessProgressUpdate,\n ProcessProgressSubscriptionHandlers,\n ProcessProgressUnsubscribe,\n ProcessProgressSubscription,\n ProcessLauncherFetchProgressProps,\n ProcessLauncherSubscribeProgressProps,\n ProcessLauncherProgressProps\n} from './processLauncher.interfaces';\n"],"mappings":"AAAA,SAASA,eAAe,QAAQ,mBAAmB","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=processLauncher.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processLauncher.interfaces.js","names":[],"sources":["../../../../src/widgets/processLauncher/processLauncher.interfaces.ts"],"sourcesContent":["import { ReactElement, ReactNode } from 'react';\n\nexport type ProcessDefinition = {\n id: string;\n name: string;\n description: string;\n};\n\nexport type ProcessLaunchButtonProps = {\n cssClass?: string;\n icon?: ReactNode | ReactElement;\n hideLabel?: boolean;\n size?: 'xsmall' | 'small' | 'default' | 'large' | 'xlarge';\n};\n\nexport type ProcessProgressIndicatorProps = {\n icon?: ReactNode | ReactElement;\n hideLabel?: boolean;\n size?: 'xsmall' | 'small' | 'default' | 'large' | 'xlarge';\n};\n\nexport type ProcessStatus = 'idle' | 'prelaunch' | 'running' | 'warning' | 'complete' | 'error';\n\nexport type ProcessProgressUpdateMode = 'fetch' | 'subscribe';\n\n// Statuses a subscription message is allowed to push explicitly; 'idle'/'prelaunch' are launcher-controlled only.\nexport type ProcessPushableStatus = Extract<ProcessStatus, 'running' | 'warning' | 'complete' | 'error'>;\n\nexport type ProcessProgressUpdate = {\n progress: number;\n // Omit to let progress alone drive status (0-99 = running, 100 = complete), or set explicitly for warning/error.\n status?: ProcessPushableStatus;\n};\n\nexport type ProcessProgressSubscriptionHandlers = {\n /* eslint-disable-next-line no-unused-vars */\n onProgress: (update: ProcessProgressUpdate) => void;\n /* eslint-disable-next-line no-unused-vars */\n onError?: (error: unknown) => void;\n};\n\nexport type ProcessProgressUnsubscribe = () => void;\n\n/*\n Transport-agnostic subscription contract. Consumers wire `subscribe` to whatever\n message bus they use (EventSource, WebSocket, pub/sub client, etc.), listen for\n `eventName`, parse the raw message into a progress percentage (0-100), and invoke\n the provided `onProgress`/`onError` handlers. The returned function must unsubscribe.\n */\nexport type ProcessProgressSubscription = {\n eventName: string;\n /* eslint-disable-next-line no-unused-vars */\n subscribe: (eventName: string, handlers: ProcessProgressSubscriptionHandlers) => ProcessProgressUnsubscribe;\n};\n\nexport type ProcessLauncherFetchProgressProps = {\n progressUpdateMode?: 'fetch';\n onProgressCheck: () => Promise<number>;\n progressSubscription?: never;\n};\n\nexport type ProcessLauncherSubscribeProgressProps = {\n progressUpdateMode: 'subscribe';\n progressSubscription: ProcessProgressSubscription;\n onProgressCheck?: never;\n};\n\nexport type ProcessLauncherProgressProps =\n | ProcessLauncherFetchProgressProps\n | ProcessLauncherSubscribeProgressProps;\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ export declare const INTERACTIVE_HOST_SELECTOR = "button, a[href], [tabindex], [role=\"button\"]";
3
+ interface UseOnInteractiveHostFocusProps {
4
+ wrapperRef: React.RefObject<HTMLElement>;
5
+ setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;
6
+ enabled: boolean;
7
+ }
8
+ export declare const useOnInteractiveHostFocus: ({ wrapperRef, setIsOpen, enabled }: UseOnInteractiveHostFocusProps) => {
9
+ isDismissed: boolean;
10
+ };
11
+ export default useOnInteractiveHostFocus;
12
+ //# sourceMappingURL=InteractiveHostFocus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractiveHostFocus.d.ts","sourceRoot":"","sources":["../../src/hooks/InteractiveHostFocus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,eAAO,MAAM,yBAAyB,mDAAiD,CAAC;AAExF,UAAU,8BAA8B;IACtC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACzC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,yBAAyB,uCAOpC,8BAA8B;;CAmD/B,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+ import '@testing-library/jest-dom';
5
+ //# sourceMappingURL=InteractiveHostFocus.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractiveHostFocus.test.d.ts","sourceRoot":"","sources":["../../src/hooks/InteractiveHostFocus.test.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,2BAA2B,CAAC"}
@@ -7,4 +7,5 @@ export { useDialogOverlay } from './DialogOverlay';
7
7
  export { useEllipsisBookends } from './EllipsisBookends';
8
8
  export { useFocusTrap } from './FocusTrap';
9
9
  export { useInertAttribute } from './InertAttribute';
10
+ export { useOnInteractiveHostFocus } from './InteractiveHostFocus';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  import './styles/index.scss';
2
2
  import './icons/style.scss';
3
- export { Accordion, Chip, Pill, Badge, Dialog, HeaderBar, Icon, NotificationIcon, VentureLogo, CreditSavvyLogo, HomeInLogo, KitLogo, DoshiiLogo, TruyuLogo, SidePanel, Skeleton, Spinner, StatusIconButton, StatusLight, StatusLightsBar, Tabs, Tooltip, EllipsisTooltip, RevealMore, CopyText, Paginator, PageBanner, Banner, Alert, SimpleButton, Button, FormField, InputCheckbox, CheckboxInput, StyledRadioGroup, StyledRadioInput, StyledRadioLabel, HookFormWrapper, TextInput, EmailInput, FileInput, SearchInput, NumberInput, PhoneInput, UrlInput, PasswordInput, PasswordInputSignup, SelectDropdown, Select, Combobox, Textarea, InputDate, DateInput, Card, ReportFooter, MainHeader, ThemeLoader, DevToolbar, ThemeSwitch, LoremIpsum, GlobalDashboard, Menu, PopupMenu, SearchPanelMenu, Link, TemplateForm, TemplateLoading, TemplateDashboard, TemplatePage } from './components';
4
- export type { PageBannerProps, FormComponentProps, DropdownSelectProps, PasswordInputProps, StyledRadioGroupProps, SkeletonProps, ThemeStructure, MenuItemPropTypes, MenuButtonPropTypes, MenuItemIconStates, TemplateFormProps, TemplateLoadingProps, TemplateDashboardProps, TemplatePageProps } from './components';
5
- export { useOnClickOutside, usePopupKeys, useOnEdgeProximityDetect, useFirstCapital, useTabbableInputGroup, useDialogOverlay, useEllipsisBookends, useFocusTrap, useInertAttribute } from './hooks';
3
+ export { Accordion, Chip, Pill, Badge, Dialog, HeaderBar, Icon, NotificationIcon, VentureLogo, CreditSavvyLogo, HomeInLogo, KitLogo, DoshiiLogo, TruyuLogo, SidePanel, Skeleton, Spinner, StatusIconButton, StatusLight, StatusLightsBar, CircularProgressIndicator, Tabs, Tooltip, EllipsisTooltip, RevealMore, CopyText, Paginator, PageBanner, Banner, Alert, SimpleButton, Button, FormField, InputCheckbox, CheckboxInput, StyledRadioGroup, StyledRadioInput, StyledRadioLabel, HookFormWrapper, TextInput, EmailInput, FileInput, SearchInput, NumberInput, PhoneInput, UrlInput, PasswordInput, PasswordInputSignup, SelectDropdown, Select, Combobox, Textarea, InputDate, DateInput, Card, ReportFooter, MainHeader, ThemeLoader, DevToolbar, ThemeSwitch, LoremIpsum, GlobalDashboard, Menu, PopupMenu, SearchPanelMenu, Link, TemplateForm, TemplateLoading, TemplateDashboard, TemplatePage } from './components';
4
+ export { ProcessLauncher } from './widgets';
5
+ export type { ProcessLauncherProps, ProcessDefinition, ProcessLaunchButtonProps, ProcessProgressIndicatorProps, ProcessStatus, ProcessProgressUpdateMode, ProcessPushableStatus, ProcessProgressUpdate, ProcessProgressSubscriptionHandlers, ProcessProgressUnsubscribe, ProcessProgressSubscription, ProcessLauncherFetchProgressProps, ProcessLauncherSubscribeProgressProps, ProcessLauncherProgressProps } from './widgets';
6
+ export type { PageBannerProps, FormComponentProps, DropdownSelectProps, PasswordInputProps, StyledRadioGroupProps, SkeletonProps, ThemeStructure, MenuItemPropTypes, MenuButtonPropTypes, MenuItemIconStates, TemplateFormProps, TemplateLoadingProps, TemplateDashboardProps, TemplatePageProps, CircularProgressIndicatorProps } from './components';
7
+ export { useOnClickOutside, usePopupKeys, useOnEdgeProximityDetect, useFirstCapital, useTabbableInputGroup, useDialogOverlay, useEllipsisBookends, useFocusTrap, useInertAttribute, useOnInteractiveHostFocus } from './hooks';
6
8
  export * from './interfaces';
7
9
  export { getMinAge, getMaxAge, getMinAndMaxAges, validateBirthdate, isDateEntryComplete, getAgeInWeeks, getAgeInYears } from './helpers/ageHelpers';
8
10
  export { binaryFindInArray, addAndSortArray, moveItemInArrayMutate, moveItemInArrayCopy, getRandomItemFromArray, getItemIndexWithinArray, getRoundedMedian, getMostOccurringBoolean, cssClassesArrayToString } from './helpers/arrayHelpers';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/package.json CHANGED
@@ -137,7 +137,7 @@
137
137
  "files": [
138
138
  "dist"
139
139
  ],
140
- "version": "3.16.0",
140
+ "version": "3.16.1",
141
141
  "devEngines": {
142
142
  "runtime": {
143
143
  "name": "node",
@@ -0,0 +1,3 @@
1
+ export { ProcessLauncher } from './processLauncher';
2
+ export type { ProcessLauncherProps, ProcessDefinition, ProcessLaunchButtonProps, ProcessProgressIndicatorProps, ProcessStatus, ProcessProgressUpdateMode, ProcessPushableStatus, ProcessProgressUpdate, ProcessProgressSubscriptionHandlers, ProcessProgressUnsubscribe, ProcessProgressSubscription, ProcessLauncherFetchProgressProps, ProcessLauncherSubscribeProgressProps, ProcessLauncherProgressProps } from './processLauncher';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/widgets/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EACxB,6BAA6B,EAC7B,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,mCAAmC,EACnC,0BAA0B,EAC1B,2BAA2B,EAC3B,iCAAiC,EACjC,qCAAqC,EACrC,4BAA4B,EAC7B,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import React, { ReactNode } from 'react';
2
+ import { ProcessDefinition, ProcessLaunchButtonProps, ProcessLauncherProgressProps, ProcessProgressIndicatorProps, ProcessStatus } from './processLauncher.interfaces';
3
+ export type ProcessLauncherProps = {
4
+ initialStatus?: ProcessStatus;
5
+ statusMessage?: string;
6
+ processDefinition: ProcessDefinition;
7
+ launchButtonProps?: ProcessLaunchButtonProps;
8
+ progressIndicatorProps?: ProcessProgressIndicatorProps;
9
+ onLaunch: (params: {
10
+ processId: string;
11
+ fieldValues: Record<string, unknown>;
12
+ }) => void;
13
+ onCancel: () => void;
14
+ onProgressIndicatorClick?: () => void;
15
+ preRequisiteFieldIds?: string[];
16
+ preRequisitesDialogTitle?: string;
17
+ children: ReactNode;
18
+ } & ProcessLauncherProgressProps;
19
+ export declare const ProcessLauncher: React.FC<ProcessLauncherProps>;
20
+ export default ProcessLauncher;
21
+ //# sourceMappingURL=ProcessLauncher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessLauncher.d.ts","sourceRoot":"","sources":["../../../src/widgets/processLauncher/ProcessLauncher.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAkC,MAAM,OAAO,CAAC;AAIzE,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,4BAA4B,EAC5B,6BAA6B,EAAyB,aAAa,EACpE,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,sBAAsB,CAAC,EAAE,6BAA6B,CAAC;IAEvD,QAAQ,EAAE,CAAC,MAAM,EAAE;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAC,KAAK,IAAI,CAAC;IACtF,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,4BAA4B,CAAC;AAsBjC,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA6S1D,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+ import '@testing-library/jest-dom';
5
+ //# sourceMappingURL=ProcessLauncher.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProcessLauncher.test.d.ts","sourceRoot":"","sources":["../../../src/widgets/processLauncher/ProcessLauncher.test.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,2BAA2B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { ProcessLauncher } from './ProcessLauncher';
2
+ export type { ProcessLauncherProps } from './ProcessLauncher';
3
+ export type { ProcessDefinition, ProcessLaunchButtonProps, ProcessProgressIndicatorProps, ProcessStatus, ProcessProgressUpdateMode, ProcessPushableStatus, ProcessProgressUpdate, ProcessProgressSubscriptionHandlers, ProcessProgressUnsubscribe, ProcessProgressSubscription, ProcessLauncherFetchProgressProps, ProcessLauncherSubscribeProgressProps, ProcessLauncherProgressProps } from './processLauncher.interfaces';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/widgets/processLauncher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,YAAY,EACV,iBAAiB,EACjB,wBAAwB,EACxB,6BAA6B,EAC7B,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,mCAAmC,EACnC,0BAA0B,EAC1B,2BAA2B,EAC3B,iCAAiC,EACjC,qCAAqC,EACrC,4BAA4B,EAC7B,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { ReactElement, ReactNode } from 'react';
2
+ export type ProcessDefinition = {
3
+ id: string;
4
+ name: string;
5
+ description: string;
6
+ };
7
+ export type ProcessLaunchButtonProps = {
8
+ cssClass?: string;
9
+ icon?: ReactNode | ReactElement;
10
+ hideLabel?: boolean;
11
+ size?: 'xsmall' | 'small' | 'default' | 'large' | 'xlarge';
12
+ };
13
+ export type ProcessProgressIndicatorProps = {
14
+ icon?: ReactNode | ReactElement;
15
+ hideLabel?: boolean;
16
+ size?: 'xsmall' | 'small' | 'default' | 'large' | 'xlarge';
17
+ };
18
+ export type ProcessStatus = 'idle' | 'prelaunch' | 'running' | 'warning' | 'complete' | 'error';
19
+ export type ProcessProgressUpdateMode = 'fetch' | 'subscribe';
20
+ export type ProcessPushableStatus = Extract<ProcessStatus, 'running' | 'warning' | 'complete' | 'error'>;
21
+ export type ProcessProgressUpdate = {
22
+ progress: number;
23
+ status?: ProcessPushableStatus;
24
+ };
25
+ export type ProcessProgressSubscriptionHandlers = {
26
+ onProgress: (update: ProcessProgressUpdate) => void;
27
+ onError?: (error: unknown) => void;
28
+ };
29
+ export type ProcessProgressUnsubscribe = () => void;
30
+ export type ProcessProgressSubscription = {
31
+ eventName: string;
32
+ subscribe: (eventName: string, handlers: ProcessProgressSubscriptionHandlers) => ProcessProgressUnsubscribe;
33
+ };
34
+ export type ProcessLauncherFetchProgressProps = {
35
+ progressUpdateMode?: 'fetch';
36
+ onProgressCheck: () => Promise<number>;
37
+ progressSubscription?: never;
38
+ };
39
+ export type ProcessLauncherSubscribeProgressProps = {
40
+ progressUpdateMode: 'subscribe';
41
+ progressSubscription: ProcessProgressSubscription;
42
+ onProgressCheck?: never;
43
+ };
44
+ export type ProcessLauncherProgressProps = ProcessLauncherFetchProgressProps | ProcessLauncherSubscribeProgressProps;
45
+ //# sourceMappingURL=processLauncher.interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processLauncher.interfaces.d.ts","sourceRoot":"","sources":["../../../src/widgets/processLauncher/processLauncher.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEhD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAEhG,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,WAAW,CAAC;AAG9D,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,aAAa,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,CAAC;AAEzG,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IAEjB,MAAM,CAAC,EAAE,qBAAqB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAEhD,UAAU,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAEpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,MAAM,IAAI,CAAC;AAQpD,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,MAAM,CAAC;IAElB,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,mCAAmC,KAAK,0BAA0B,CAAC;CAC7G,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,oBAAoB,CAAC,EAAE,KAAK,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAAG;IAClD,kBAAkB,EAAE,WAAW,CAAC;IAChC,oBAAoB,EAAE,2BAA2B,CAAC;IAClD,eAAe,CAAC,EAAE,KAAK,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GACpC,iCAAiC,GACjC,qCAAqC,CAAC"}
package/package.json CHANGED
@@ -137,7 +137,7 @@
137
137
  "files": [
138
138
  "dist"
139
139
  ],
140
- "version": "3.16.1",
140
+ "version": "3.17.0",
141
141
  "devEngines": {
142
142
  "runtime": {
143
143
  "name": "node",