reactbridge-sdk 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/analytics/AnalyticsDashboard.d.ts +12 -0
- package/dist/components/analytics/AnalyticsDashboard.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +281 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +281 -0
- package/dist/index.js.map +1 -1
- package/dist/types/analytics.d.ts +1 -0
- package/dist/types/analytics.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2153,7 +2153,288 @@ const AnalyticsWidget = ({ position = 'bottom-right', theme: customTheme, onDire
|
|
|
2153
2153
|
isOpen && (React.createElement(AnalyticsDrawer, { isOpen: isOpen, onClose: () => setIsOpen(false), configs: configs, isLoading: isLoading, theme: theme, onDirectiveAction: onDirectiveAction }))));
|
|
2154
2154
|
};
|
|
2155
2155
|
|
|
2156
|
+
function AnalyticsDashboard({ onDirectiveAction, className = '', showRefresh = true, autoRefreshInterval = 0, theme: customTheme, }) {
|
|
2157
|
+
const { theme: contextTheme } = useReactBridgeContext();
|
|
2158
|
+
const theme = customTheme || contextTheme;
|
|
2159
|
+
const [selectedAnalytics, setSelectedAnalytics] = React.useState(null);
|
|
2160
|
+
const [directiveFilter, setDirectiveFilter] = React.useState('all');
|
|
2161
|
+
// Fetch analytics configurations
|
|
2162
|
+
const { configs, isLoading: configsLoading, error: configsError, refetch: refetchConfigs, } = useAnalyticsConfigs();
|
|
2163
|
+
// Fetch latest result for selected analytics
|
|
2164
|
+
const { result, isLoading: resultLoading, error: resultError, refetch: refetchResult, } = useAnalyticsResult(selectedAnalytics);
|
|
2165
|
+
// Handle directive actions
|
|
2166
|
+
const { handleAction, isProcessing } = useDirectiveAction(onDirectiveAction);
|
|
2167
|
+
// Auto-select first analytics if none selected
|
|
2168
|
+
React.useEffect(() => {
|
|
2169
|
+
if (configs && configs.length > 0 && !selectedAnalytics) {
|
|
2170
|
+
setSelectedAnalytics(configs[0].analyticsType);
|
|
2171
|
+
}
|
|
2172
|
+
}, [configs, selectedAnalytics]);
|
|
2173
|
+
// Auto-refresh
|
|
2174
|
+
React.useEffect(() => {
|
|
2175
|
+
if (autoRefreshInterval > 0) {
|
|
2176
|
+
const interval = setInterval(() => {
|
|
2177
|
+
refetchConfigs();
|
|
2178
|
+
if (selectedAnalytics) {
|
|
2179
|
+
refetchResult();
|
|
2180
|
+
}
|
|
2181
|
+
}, autoRefreshInterval * 1000);
|
|
2182
|
+
return () => clearInterval(interval);
|
|
2183
|
+
}
|
|
2184
|
+
}, [autoRefreshInterval, selectedAnalytics, refetchConfigs, refetchResult]);
|
|
2185
|
+
const handleRefresh = () => {
|
|
2186
|
+
refetchConfigs();
|
|
2187
|
+
if (selectedAnalytics) {
|
|
2188
|
+
refetchResult();
|
|
2189
|
+
}
|
|
2190
|
+
};
|
|
2191
|
+
const handleDirectiveAction = (directive, action) => __awaiter(this, void 0, void 0, function* () {
|
|
2192
|
+
yield handleAction(directive, action);
|
|
2193
|
+
// Refetch result to get updated directive statuses
|
|
2194
|
+
refetchResult();
|
|
2195
|
+
});
|
|
2196
|
+
const filteredDirectives = (result === null || result === void 0 ? void 0 : result.directives.filter(d => {
|
|
2197
|
+
if (directiveFilter === 'all')
|
|
2198
|
+
return true;
|
|
2199
|
+
return d.status === directiveFilter;
|
|
2200
|
+
})) || [];
|
|
2201
|
+
const selectedConfig = configs === null || configs === void 0 ? void 0 : configs.find(c => c.analyticsType === selectedAnalytics);
|
|
2202
|
+
const proposedCount = (result === null || result === void 0 ? void 0 : result.directives.filter(d => d.status === 'proposed').length) || 0;
|
|
2203
|
+
const executedCount = (result === null || result === void 0 ? void 0 : result.directives.filter(d => d.status === 'executed').length) || 0;
|
|
2204
|
+
const declinedCount = (result === null || result === void 0 ? void 0 : result.directives.filter(d => d.status === 'declined').length) || 0;
|
|
2205
|
+
const containerStyle = {
|
|
2206
|
+
display: 'flex',
|
|
2207
|
+
gap: theme.spacing.lg,
|
|
2208
|
+
width: '100%',
|
|
2209
|
+
minHeight: '540px',
|
|
2210
|
+
backgroundColor: theme.colors.background,
|
|
2211
|
+
color: theme.colors.text,
|
|
2212
|
+
border: `1px solid ${theme.colors.border}`,
|
|
2213
|
+
borderRadius: theme.borderRadius,
|
|
2214
|
+
boxShadow: theme.boxShadow,
|
|
2215
|
+
padding: theme.spacing.lg,
|
|
2216
|
+
};
|
|
2217
|
+
const sidebarStyle = {
|
|
2218
|
+
width: '320px',
|
|
2219
|
+
borderRight: `1px solid ${theme.colors.border}`,
|
|
2220
|
+
paddingRight: theme.spacing.lg,
|
|
2221
|
+
display: 'flex',
|
|
2222
|
+
flexDirection: 'column',
|
|
2223
|
+
gap: theme.spacing.sm,
|
|
2224
|
+
};
|
|
2225
|
+
const listItemStyle = (isActive, isDisabled) => ({
|
|
2226
|
+
width: '100%',
|
|
2227
|
+
textAlign: 'left',
|
|
2228
|
+
padding: theme.spacing.md,
|
|
2229
|
+
backgroundColor: isActive ? theme.colors.primary : theme.colors.surface,
|
|
2230
|
+
color: isActive ? '#fff' : theme.colors.text,
|
|
2231
|
+
border: `1px solid ${isActive ? theme.colors.primary : theme.colors.border}`,
|
|
2232
|
+
borderRadius: theme.borderRadius,
|
|
2233
|
+
cursor: isDisabled ? 'not-allowed' : 'pointer',
|
|
2234
|
+
opacity: isDisabled ? 0.6 : 1,
|
|
2235
|
+
transition: 'transform 0.15s ease, box-shadow 0.15s ease',
|
|
2236
|
+
boxShadow: isActive ? theme.boxShadow : 'none',
|
|
2237
|
+
});
|
|
2238
|
+
const pillStyle = (bg) => ({
|
|
2239
|
+
fontSize: theme.fontSizes.xs,
|
|
2240
|
+
padding: '2px 8px',
|
|
2241
|
+
borderRadius: '999px',
|
|
2242
|
+
backgroundColor: bg,
|
|
2243
|
+
color: '#fff',
|
|
2244
|
+
fontWeight: 600,
|
|
2245
|
+
});
|
|
2246
|
+
const placeholderStyle = {
|
|
2247
|
+
flex: 1,
|
|
2248
|
+
minHeight: '420px',
|
|
2249
|
+
display: 'flex',
|
|
2250
|
+
flexDirection: 'column',
|
|
2251
|
+
alignItems: 'center',
|
|
2252
|
+
justifyContent: 'center',
|
|
2253
|
+
gap: theme.spacing.sm,
|
|
2254
|
+
color: theme.colors.textSecondary,
|
|
2255
|
+
textAlign: 'center',
|
|
2256
|
+
};
|
|
2257
|
+
const cardStyle = {
|
|
2258
|
+
backgroundColor: theme.colors.surface,
|
|
2259
|
+
border: `1px solid ${theme.colors.border}`,
|
|
2260
|
+
borderRadius: theme.borderRadius,
|
|
2261
|
+
padding: theme.spacing.md,
|
|
2262
|
+
};
|
|
2263
|
+
const statusBadgeStyle = (status) => {
|
|
2264
|
+
const colors = {
|
|
2265
|
+
proposed: { bg: theme.colors.primary, text: '#fff' },
|
|
2266
|
+
executed: { bg: theme.colors.success, text: '#fff' },
|
|
2267
|
+
declined: { bg: theme.colors.error, text: '#fff' },
|
|
2268
|
+
ok: { bg: '#d1fae5', text: '#065f46' },
|
|
2269
|
+
warning: { bg: '#fef3c7', text: '#92400e' },
|
|
2270
|
+
critical: { bg: '#fee2e2', text: '#991b1b' },
|
|
2271
|
+
high: { bg: '#fee2e2', text: '#991b1b' },
|
|
2272
|
+
medium: { bg: '#fef3c7', text: '#92400e' },
|
|
2273
|
+
low: { bg: '#e0ecff', text: '#1e3a8a' },
|
|
2274
|
+
};
|
|
2275
|
+
const palette = colors[status] || { bg: theme.colors.surface, text: theme.colors.text };
|
|
2276
|
+
return {
|
|
2277
|
+
fontSize: theme.fontSizes.xs,
|
|
2278
|
+
padding: '2px 8px',
|
|
2279
|
+
borderRadius: '999px',
|
|
2280
|
+
backgroundColor: palette.bg,
|
|
2281
|
+
color: palette.text,
|
|
2282
|
+
fontWeight: 700,
|
|
2283
|
+
textTransform: 'capitalize',
|
|
2284
|
+
};
|
|
2285
|
+
};
|
|
2286
|
+
const directiveCardStyle = (status) => (Object.assign(Object.assign({}, cardStyle), { borderLeft: `4px solid ${status === 'executed'
|
|
2287
|
+
? theme.colors.success
|
|
2288
|
+
: status === 'declined'
|
|
2289
|
+
? theme.colors.error
|
|
2290
|
+
: theme.colors.primary}`, display: 'flex', flexDirection: 'column', gap: theme.spacing.sm }));
|
|
2291
|
+
return (React.createElement("div", { className: className, style: containerStyle },
|
|
2292
|
+
React.createElement("div", { style: sidebarStyle },
|
|
2293
|
+
React.createElement("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center' } },
|
|
2294
|
+
React.createElement("h3", { style: { margin: 0, fontSize: theme.fontSizes.lg } }, "Analytics"),
|
|
2295
|
+
showRefresh && (React.createElement("button", { type: "button", onClick: handleRefresh, disabled: configsLoading, style: {
|
|
2296
|
+
border: `1px solid ${theme.colors.border}`,
|
|
2297
|
+
backgroundColor: theme.colors.surface,
|
|
2298
|
+
color: theme.colors.text,
|
|
2299
|
+
padding: `${theme.spacing.xs} ${theme.spacing.sm}`,
|
|
2300
|
+
borderRadius: theme.borderRadius,
|
|
2301
|
+
cursor: configsLoading ? 'not-allowed' : 'pointer',
|
|
2302
|
+
} }, configsLoading ? 'Refreshing...' : 'Refresh'))),
|
|
2303
|
+
configsLoading && (React.createElement("div", { style: placeholderStyle }, "Loading analytics...")),
|
|
2304
|
+
configsError && (React.createElement("div", { style: placeholderStyle },
|
|
2305
|
+
"Error loading analytics: ",
|
|
2306
|
+
configsError.message)),
|
|
2307
|
+
configs && configs.length === 0 && (React.createElement("div", { style: placeholderStyle }, "No analytics configured. Configure analytics in your DirectivSys dashboard.")),
|
|
2308
|
+
configs && configs.length > 0 && (React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: theme.spacing.sm } }, configs.map((config) => {
|
|
2309
|
+
const isActive = selectedAnalytics === config.analyticsType;
|
|
2310
|
+
return (React.createElement("button", { key: config.configId, type: "button", onClick: () => config.isEnabled && setSelectedAnalytics(config.analyticsType), style: listItemStyle(isActive, !config.isEnabled), disabled: !config.isEnabled },
|
|
2311
|
+
React.createElement("div", { style: {
|
|
2312
|
+
display: 'flex',
|
|
2313
|
+
justifyContent: 'space-between',
|
|
2314
|
+
alignItems: 'center',
|
|
2315
|
+
marginBottom: theme.spacing.xs,
|
|
2316
|
+
width: '100%',
|
|
2317
|
+
} },
|
|
2318
|
+
React.createElement("span", { style: { fontSize: theme.fontSizes.md, fontWeight: 600 } }, config.analyticsType),
|
|
2319
|
+
!config.isEnabled && React.createElement("span", { style: pillStyle(theme.colors.textSecondary) }, "Disabled")),
|
|
2320
|
+
React.createElement("div", { style: {
|
|
2321
|
+
fontSize: theme.fontSizes.sm,
|
|
2322
|
+
color: isActive ? 'rgba(255,255,255,0.9)' : theme.colors.textSecondary,
|
|
2323
|
+
marginBottom: theme.spacing.xs,
|
|
2324
|
+
} }, config.templateDescription),
|
|
2325
|
+
React.createElement("div", { style: {
|
|
2326
|
+
display: 'flex',
|
|
2327
|
+
justifyContent: 'space-between',
|
|
2328
|
+
width: '100%',
|
|
2329
|
+
fontSize: theme.fontSizes.xs,
|
|
2330
|
+
color: isActive ? 'rgba(255,255,255,0.8)' : theme.colors.textSecondary,
|
|
2331
|
+
} },
|
|
2332
|
+
React.createElement("span", { style: { textTransform: 'capitalize' } }, config.frequency),
|
|
2333
|
+
config.lastExecutedAt && (React.createElement("span", null,
|
|
2334
|
+
"Last: ",
|
|
2335
|
+
new Date(config.lastExecutedAt).toLocaleDateString())))));
|
|
2336
|
+
})))),
|
|
2337
|
+
React.createElement("div", { style: { flex: 1, display: 'flex', flexDirection: 'column', gap: theme.spacing.lg } },
|
|
2338
|
+
!selectedAnalytics && (React.createElement("div", { style: placeholderStyle },
|
|
2339
|
+
React.createElement("h3", { style: { margin: 0, color: theme.colors.text } }, "No analytics selected"),
|
|
2340
|
+
React.createElement("p", { style: { margin: 0 } }, "Select an analytics type from the left to view results."))),
|
|
2341
|
+
selectedAnalytics && resultLoading && (React.createElement("div", { style: placeholderStyle }, "Loading results...")),
|
|
2342
|
+
selectedAnalytics && resultError && (React.createElement("div", { style: placeholderStyle },
|
|
2343
|
+
"Error loading results: ",
|
|
2344
|
+
resultError.message)),
|
|
2345
|
+
selectedAnalytics && !resultLoading && !result && (React.createElement("div", { style: placeholderStyle },
|
|
2346
|
+
React.createElement("h3", { style: { margin: 0, color: theme.colors.text } }, "No results yet"),
|
|
2347
|
+
React.createElement("p", { style: { margin: 0 } }, "This analytics has not run yet. Results will appear after the first run."))),
|
|
2348
|
+
selectedAnalytics && result && (React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: theme.spacing.lg } },
|
|
2349
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: theme.spacing.xs } },
|
|
2350
|
+
React.createElement("h2", { style: { margin: 0, fontSize: theme.fontSizes.xl, color: theme.colors.text } }, selectedConfig === null || selectedConfig === void 0 ? void 0 : selectedConfig.analyticsType),
|
|
2351
|
+
React.createElement("p", { style: { margin: 0, color: theme.colors.textSecondary, fontSize: theme.fontSizes.sm } },
|
|
2352
|
+
"Generated: ",
|
|
2353
|
+
new Date(result.createdAt).toLocaleString())),
|
|
2354
|
+
result.metrics && result.metrics.length > 0 && (React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: theme.spacing.md } },
|
|
2355
|
+
React.createElement("h3", { style: { margin: 0, fontSize: theme.fontSizes.lg } }, "Metrics"),
|
|
2356
|
+
React.createElement("div", { style: {
|
|
2357
|
+
display: 'grid',
|
|
2358
|
+
gridTemplateColumns: 'repeat(auto-fill, minmax(220px, 1fr))',
|
|
2359
|
+
gap: theme.spacing.md,
|
|
2360
|
+
} }, result.metrics.map((metric, index) => (React.createElement("div", { key: index, style: Object.assign(Object.assign({}, cardStyle), { borderLeft: `4px solid ${metric.status === 'ok'
|
|
2361
|
+
? theme.colors.success
|
|
2362
|
+
: metric.status === 'warning'
|
|
2363
|
+
? '#f59e0b'
|
|
2364
|
+
: theme.colors.error}` }) },
|
|
2365
|
+
React.createElement("div", { style: {
|
|
2366
|
+
display: 'flex',
|
|
2367
|
+
justifyContent: 'space-between',
|
|
2368
|
+
alignItems: 'center',
|
|
2369
|
+
marginBottom: theme.spacing.xs,
|
|
2370
|
+
} },
|
|
2371
|
+
React.createElement("span", { style: { fontWeight: 600 } }, metric.name),
|
|
2372
|
+
React.createElement("span", { style: statusBadgeStyle(metric.status) }, metric.status)),
|
|
2373
|
+
React.createElement("div", { style: { fontSize: theme.fontSizes.xl, fontWeight: 700 } },
|
|
2374
|
+
metric.value,
|
|
2375
|
+
" ",
|
|
2376
|
+
metric.unit),
|
|
2377
|
+
React.createElement("div", { style: { color: theme.colors.textSecondary, fontSize: theme.fontSizes.sm } }, metric.explanation))))))),
|
|
2378
|
+
result.observations && result.observations.length > 0 && (React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: theme.spacing.md } },
|
|
2379
|
+
React.createElement("h3", { style: { margin: 0, fontSize: theme.fontSizes.lg } }, "Observations"),
|
|
2380
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: theme.spacing.sm } }, result.observations.map((observation, index) => (React.createElement("div", { key: index, style: Object.assign(Object.assign({}, cardStyle), { borderLeft: `4px solid ${observation.severity === 'high'
|
|
2381
|
+
? theme.colors.error
|
|
2382
|
+
: observation.severity === 'medium'
|
|
2383
|
+
? '#f59e0b'
|
|
2384
|
+
: theme.colors.primary}`, display: 'flex', flexDirection: 'column', gap: theme.spacing.xs }) },
|
|
2385
|
+
React.createElement("div", { style: { display: 'flex', gap: theme.spacing.sm, alignItems: 'center' } },
|
|
2386
|
+
React.createElement("span", { style: statusBadgeStyle(observation.severity) }, observation.severity),
|
|
2387
|
+
React.createElement("span", { style: { color: theme.colors.textSecondary, fontSize: theme.fontSizes.sm } }, observation.scope)),
|
|
2388
|
+
React.createElement("div", { style: { color: theme.colors.text, fontSize: theme.fontSizes.sm } }, observation.text))))))),
|
|
2389
|
+
result.directives && result.directives.length > 0 && (React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: theme.spacing.md } },
|
|
2390
|
+
React.createElement("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center' } },
|
|
2391
|
+
React.createElement("h3", { style: { margin: 0, fontSize: theme.fontSizes.lg } }, "Recommended actions"),
|
|
2392
|
+
React.createElement("div", { style: { display: 'flex', gap: theme.spacing.xs } },
|
|
2393
|
+
React.createElement("button", { type: "button", onClick: () => setDirectiveFilter('all'), style: Object.assign(Object.assign({}, pillStyle(directiveFilter === 'all' ? theme.colors.primary : theme.colors.surface)), { border: `1px solid ${theme.colors.border}`, color: directiveFilter === 'all' ? '#fff' : theme.colors.text }) },
|
|
2394
|
+
"All (",
|
|
2395
|
+
result.directives.length,
|
|
2396
|
+
")"),
|
|
2397
|
+
React.createElement("button", { type: "button", onClick: () => setDirectiveFilter('proposed'), style: Object.assign(Object.assign({}, pillStyle(directiveFilter === 'proposed' ? theme.colors.primary : theme.colors.surface)), { border: `1px solid ${theme.colors.border}`, color: directiveFilter === 'proposed' ? '#fff' : theme.colors.text }) },
|
|
2398
|
+
"Proposed (",
|
|
2399
|
+
proposedCount,
|
|
2400
|
+
")"),
|
|
2401
|
+
React.createElement("button", { type: "button", onClick: () => setDirectiveFilter('executed'), style: Object.assign(Object.assign({}, pillStyle(directiveFilter === 'executed' ? theme.colors.primary : theme.colors.surface)), { border: `1px solid ${theme.colors.border}`, color: directiveFilter === 'executed' ? '#fff' : theme.colors.text }) },
|
|
2402
|
+
"Executed (",
|
|
2403
|
+
executedCount,
|
|
2404
|
+
")"),
|
|
2405
|
+
React.createElement("button", { type: "button", onClick: () => setDirectiveFilter('declined'), style: Object.assign(Object.assign({}, pillStyle(directiveFilter === 'declined' ? theme.colors.primary : theme.colors.surface)), { border: `1px solid ${theme.colors.border}`, color: directiveFilter === 'declined' ? '#fff' : theme.colors.text }) },
|
|
2406
|
+
"Declined (",
|
|
2407
|
+
declinedCount,
|
|
2408
|
+
")"))),
|
|
2409
|
+
filteredDirectives.length === 0 && (React.createElement("div", { style: placeholderStyle }, "No directives match the selected filter.")),
|
|
2410
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: theme.spacing.sm } }, filteredDirectives.map((directive) => (React.createElement("div", { key: directive.directiveId, style: directiveCardStyle(directive.status) },
|
|
2411
|
+
React.createElement("div", { style: {
|
|
2412
|
+
display: 'flex',
|
|
2413
|
+
justifyContent: 'space-between',
|
|
2414
|
+
alignItems: 'center',
|
|
2415
|
+
gap: theme.spacing.sm,
|
|
2416
|
+
flexWrap: 'wrap',
|
|
2417
|
+
} },
|
|
2418
|
+
React.createElement("div", { style: { display: 'flex', flexDirection: 'column', gap: theme.spacing.xs } },
|
|
2419
|
+
React.createElement("span", { style: { fontWeight: 700 } }, directive.action),
|
|
2420
|
+
React.createElement("span", { style: { color: theme.colors.textSecondary, fontSize: theme.fontSizes.sm } },
|
|
2421
|
+
"Priority: ",
|
|
2422
|
+
directive.priority)),
|
|
2423
|
+
React.createElement("span", { style: statusBadgeStyle(directive.status) }, directive.status)),
|
|
2424
|
+
React.createElement("div", { style: { color: theme.colors.text, fontSize: theme.fontSizes.sm } }, directive.rationale),
|
|
2425
|
+
directive.parameters && directive.parameters.length > 0 && (React.createElement("div", { style: { color: theme.colors.textSecondary, fontSize: theme.fontSizes.sm } },
|
|
2426
|
+
React.createElement("strong", { style: { color: theme.colors.text } }, "Parameters:"),
|
|
2427
|
+
React.createElement("ul", { style: { margin: `${theme.spacing.xs} 0 0 16px`, padding: 0 } }, directive.parameters.map((param, index) => (React.createElement("li", { key: index, style: { marginBottom: theme.spacing.xs } },
|
|
2428
|
+
React.createElement("code", null, param.name),
|
|
2429
|
+
": ",
|
|
2430
|
+
param.value)))))),
|
|
2431
|
+
directive.status === 'proposed' && (React.createElement("div", { style: { display: 'flex', gap: theme.spacing.sm } },
|
|
2432
|
+
React.createElement("button", { type: "button", onClick: () => handleDirectiveAction(directive, 'execute'), disabled: isProcessing, style: Object.assign(Object.assign({}, pillStyle(theme.colors.success)), { border: 'none', cursor: isProcessing ? 'not-allowed' : 'pointer' }) }, isProcessing ? 'Processing...' : 'Execute'),
|
|
2433
|
+
React.createElement("button", { type: "button", onClick: () => handleDirectiveAction(directive, 'decline'), disabled: isProcessing, style: Object.assign(Object.assign({}, pillStyle(theme.colors.error)), { border: 'none', cursor: isProcessing ? 'not-allowed' : 'pointer' }) }, "Decline"))))))))))))));
|
|
2434
|
+
}
|
|
2435
|
+
|
|
2156
2436
|
exports.AnalyticsAPI = AnalyticsAPI;
|
|
2437
|
+
exports.AnalyticsDashboard = AnalyticsDashboard;
|
|
2157
2438
|
exports.AnalyticsReport = AnalyticsReport;
|
|
2158
2439
|
exports.AnalyticsWidget = AnalyticsWidget;
|
|
2159
2440
|
exports.DirectivesPanel = DirectivesPanel;
|