@mcp-b/react-components 0.14.2 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AgentActivity-BNUNrP9O.d.ts +36 -0
- package/dist/{AgentChat-DQkqt82e.d.ts → AgentChat-CrlpbvQJ.d.ts} +58 -6
- package/dist/{CodeBlock-DUh9WOGo.d.ts → CodeBlock-BRajW4QU.d.ts} +1 -1
- package/dist/{CodeBlock-BUFXG8HW.js → CodeBlock-BmB4Xaqq.js} +15 -4
- package/dist/{FileTree-mpEIcfzA.js → FileTree-CkVbIMWV.js} +82 -89
- package/dist/Message-BkMdE3bS.js +375 -0
- package/dist/{ModelSelector-CPCpFAUt.js → ModelSelector-SlJNgwKY.js} +2 -2
- package/dist/{PromptInput-ClNqBiIw.d.ts → PromptInput-BWTuXMOD.d.ts} +123 -5
- package/dist/ResponsiveSidebarShell-Dd9DCcBT.d.ts +67 -0
- package/dist/{Select-Dl_vF_Bt.d.ts → Select-BeEsefzh.d.ts} +12 -2
- package/dist/{ThinkChat-BPcehdbP.js → ThinkChat-CzC-zNGA.js} +24 -36
- package/dist/{ThinkChatActivity-BmwuIigx.d.ts → ThinkChatActivity-BFQnb2ct.d.ts} +3 -10
- package/dist/ThinkChatActivitySummary-BPmu9a-c.d.ts +39 -0
- package/dist/{ThinkChatToolParts-CDEjqS6A.d.ts → ThinkChatToolParts-CSzVwMXf.d.ts} +13 -3
- package/dist/ThinkExecutionRun-ChhWhOoU.d.ts +30 -0
- package/dist/Toggle-CAAlNl-M.d.ts +69 -0
- package/dist/ToggleGroup-8hPv-b69.d.ts +73 -0
- package/dist/Workspace-D39LxGvP.d.ts +62 -0
- package/dist/WorkspaceFile-DOZkPwzu.d.ts +106 -0
- package/dist/WorkspaceFileView-rSN_yT0L.js +744 -0
- package/dist/WorkspaceLink-DIPbXrUM.js +337 -0
- package/dist/WorkspaceLink-DK1DWMHe.d.ts +89 -0
- package/dist/components/Activity.d.ts +27 -1
- package/dist/components/Activity.js +33 -15
- package/dist/components/AgentActivity.d.ts +2 -0
- package/dist/components/AgentActivity.js +45 -0
- package/dist/components/AgentActivityPreview.d.ts +46 -0
- package/dist/components/AgentActivityPreview.js +94 -0
- package/dist/components/AgentAttention.d.ts +73 -0
- package/dist/components/AgentAttention.js +85 -0
- package/dist/components/AgentChat.d.ts +2 -2
- package/dist/components/AgentChat.js +224 -200
- package/dist/components/AgentChatMessageEditor.d.ts +29 -0
- package/dist/components/AgentChatMessageEditor.js +92 -0
- package/dist/components/AgentChatTurnError.d.ts +17 -0
- package/dist/components/AgentChatTurnError.js +40 -0
- package/dist/components/AgentConnection.d.ts +12 -17
- package/dist/components/AgentConnection.js +99 -91
- package/dist/components/AppFrame.d.ts +24 -0
- package/dist/components/AppFrame.js +25 -0
- package/dist/components/AppTopBar.d.ts +71 -0
- package/dist/components/AppTopBar.js +82 -0
- package/dist/components/Artifact.js +1 -1
- package/dist/components/BrowserLiveView.js +1 -1
- package/dist/components/BrowserReplay.js +1 -1
- package/dist/components/BrowserRunPanel.js +1 -1
- package/dist/components/Card.d.ts +3 -0
- package/dist/components/Card.js +2 -1
- package/dist/components/ChainOfThought.d.ts +1 -1
- package/dist/components/ChainOfThought.js +1 -1
- package/dist/components/ChatGptSignInScreen.js +2 -2
- package/dist/components/Checkbox.js +5 -13
- package/dist/components/CheckboxGroup.d.ts +58 -2
- package/dist/components/CheckboxGroup.js +59 -1
- package/dist/components/CodeBlock.d.ts +1 -1
- package/dist/components/CodeBlock.js +1 -1
- package/dist/components/CodexModelSelector.js +1 -1
- package/dist/components/Commit.js +2 -2
- package/dist/components/ContextMenu.js +1 -1
- package/dist/components/Conversation.js +1 -1
- package/dist/components/DescriptionList.d.ts +12 -0
- package/dist/components/DescriptionList.js +11 -0
- package/dist/components/DescriptionListParts.d.ts +37 -0
- package/dist/components/DescriptionListParts.js +35 -0
- package/dist/components/EnvironmentVariables.js +2 -2
- package/dist/components/Fieldset.d.ts +13 -1
- package/dist/components/Fieldset.js +11 -2
- package/dist/components/FileTree.js +1 -1
- package/dist/components/IconButton.d.ts +33 -0
- package/dist/components/IconButton.js +27 -0
- package/dist/components/McpConnectionRequest.d.ts +44 -0
- package/dist/components/McpConnectionRequest.js +122 -0
- package/dist/components/McpServerPicker.d.ts +48 -23
- package/dist/components/McpServerPicker.js +238 -189
- package/dist/components/Menubar.js +1 -1
- package/dist/components/Message.d.ts +1 -0
- package/dist/components/Message.js +1 -285
- package/dist/components/MessageScroller.js +1 -1
- package/dist/components/ModelSelector.js +1 -1
- package/dist/components/Pricing.d.ts +37 -0
- package/dist/components/Pricing.js +17 -0
- package/dist/components/PricingBillingToggle.d.ts +23 -0
- package/dist/components/PricingBillingToggle.js +86 -0
- package/dist/components/PricingConfirmationDialog.d.ts +25 -0
- package/dist/components/PricingConfirmationDialog.js +57 -0
- package/dist/components/PricingFAQ.d.ts +18 -0
- package/dist/components/PricingFAQ.js +27 -0
- package/dist/components/PricingPage.d.ts +2 -38
- package/dist/components/PricingPage.js +39 -359
- package/dist/components/PricingPlanCard.d.ts +22 -0
- package/dist/components/PricingPlanCard.js +109 -0
- package/dist/components/PricingUsageCalculator.d.ts +22 -0
- package/dist/components/PricingUsageCalculator.js +96 -0
- package/dist/components/PromptInput.d.ts +2 -2
- package/dist/components/PromptInput.js +210 -15
- package/dist/components/Queue.js +1 -1
- package/dist/components/Reasoning.d.ts +2 -1
- package/dist/components/Reasoning.js +14 -29
- package/dist/components/ResizableSidePanel.d.ts +57 -0
- package/dist/components/ResizableSidePanel.js +151 -0
- package/dist/components/ResponsiveSidebarShell.d.ts +2 -0
- package/dist/components/ResponsiveSidebarShell.js +129 -0
- package/dist/components/Select.d.ts +2 -2
- package/dist/components/Select.js +11 -2
- package/dist/components/Slider.d.ts +13 -1
- package/dist/components/Slider.js +11 -0
- package/dist/components/Sources.js +1 -1
- package/dist/components/Stepper.d.ts +4 -0
- package/dist/components/Stepper.js +5 -3
- package/dist/components/SubagentRun.d.ts +18 -19
- package/dist/components/SubagentRun.js +25 -18
- package/dist/components/SubagentRunIndicator.d.ts +22 -0
- package/dist/components/SubagentRunIndicator.js +33 -0
- package/dist/components/SubagentRunList.d.ts +25 -0
- package/dist/components/SubagentRunList.js +26 -0
- package/dist/components/SubagentRunSelector.d.ts +47 -0
- package/dist/components/SubagentRunSelector.js +55 -0
- package/dist/components/Task.js +1 -1
- package/dist/components/Terminal.js +2 -2
- package/dist/components/TestResults.js +1 -1
- package/dist/components/Textarea.d.ts +21 -0
- package/dist/components/Textarea.js +19 -0
- package/dist/components/ThemeModeControl.d.ts +24 -0
- package/dist/components/ThemeModeControl.js +52 -0
- package/dist/components/ThemeProvider.d.ts +38 -0
- package/dist/components/ThemeProvider.js +80 -0
- package/dist/components/ThinkChat.d.ts +29 -6
- package/dist/components/ThinkChat.js +7 -4
- package/dist/components/ThinkChatActivity.d.ts +3 -2
- package/dist/components/ThinkChatActivity.js +12 -318
- package/dist/components/ThinkChatActivitySummary.d.ts +2 -0
- package/dist/components/ThinkChatActivitySummary.js +421 -0
- package/dist/components/ThinkChatToolPanels.d.ts +7 -5
- package/dist/components/ThinkChatToolPanels.js +70 -8
- package/dist/components/ThinkChatToolParts.d.ts +2 -2
- package/dist/components/ThinkChatToolParts.js +36 -10
- package/dist/components/ThinkExecutionDetail.d.ts +20 -0
- package/dist/components/ThinkExecutionDetail.js +80 -0
- package/dist/components/ThinkExecutionRun.d.ts +2 -0
- package/dist/components/ThinkExecutionRun.js +72 -0
- package/dist/components/ThinkExecutionStatus.d.ts +22 -0
- package/dist/components/ThinkExecutionStatus.js +36 -0
- package/dist/components/ThinkExecutionWorkbench.d.ts +7 -0
- package/dist/components/ThinkExecutionWorkbench.js +69 -225
- package/dist/components/ThinkFullApp.d.ts +58 -14
- package/dist/components/ThinkFullApp.js +129 -160
- package/dist/components/ThinkFullAppViewSwitch.d.ts +31 -0
- package/dist/components/ThinkFullAppViewSwitch.js +34 -0
- package/dist/components/ThinkRoutine.d.ts +36 -0
- package/dist/components/ThinkRoutine.js +15 -0
- package/dist/components/ThinkRoutineBrowser.d.ts +25 -0
- package/dist/components/ThinkRoutineBrowser.js +156 -0
- package/dist/components/ThinkRoutineDetail.d.ts +24 -0
- package/dist/components/ThinkRoutineDetail.js +102 -0
- package/dist/components/ThinkRoutineForm.d.ts +32 -0
- package/dist/components/ThinkRoutineForm.js +151 -0
- package/dist/components/ThinkRoutineLibrary.d.ts +74 -0
- package/dist/components/ThinkRoutineLibrary.js +178 -0
- package/dist/components/ThinkRoutineRuns.d.ts +24 -0
- package/dist/components/ThinkRoutineRuns.js +68 -0
- package/dist/components/ThinkThreadPicker.d.ts +18 -1
- package/dist/components/ThinkThreadPicker.js +51 -5
- package/dist/components/ThinkThreadShell.d.ts +12 -9
- package/dist/components/ThinkThreadShell.js +17 -137
- package/dist/components/Toggle.d.ts +1 -68
- package/dist/components/ToggleGroup.d.ts +1 -72
- package/dist/components/Tooltip.d.ts +3 -1
- package/dist/components/Tooltip.js +4 -2
- package/dist/components/WebPreview.js +1 -1
- package/dist/components/Workspace.d.ts +2 -0
- package/dist/components/Workspace.js +424 -0
- package/dist/components/WorkspaceBrowser.d.ts +32 -0
- package/dist/components/WorkspaceBrowser.js +103 -0
- package/dist/components/WorkspaceExplorer.d.ts +12 -79
- package/dist/components/WorkspaceExplorer.js +116 -330
- package/dist/components/WorkspaceFile.d.ts +2 -0
- package/dist/components/WorkspaceFile.js +195 -0
- package/dist/components/WorkspaceFileView.d.ts +26 -0
- package/dist/components/WorkspaceFileView.js +2 -0
- package/dist/components/WorkspaceHeader.d.ts +35 -0
- package/dist/components/WorkspaceHeader.js +51 -0
- package/dist/components/WorkspaceLink.d.ts +2 -0
- package/dist/components/WorkspaceLink.js +2 -0
- package/dist/components/icons.d.ts +2 -2
- package/dist/components/icons.js +2 -2
- package/dist/{copy-button-DUMLYdsk.js → copy-button-Dejn5heL.js} +1 -1
- package/dist/icons-CpfUer49.js +85 -0
- package/dist/{icons-CUCz_Sft.d.ts → icons-GQd1xF4e.d.ts} +51 -1
- package/dist/styles/activity-header.css +75 -0
- package/dist/styles/activity.css +49 -63
- package/dist/styles/agent-activity-preview-overlay.css +80 -0
- package/dist/styles/agent-activity-preview.css +235 -0
- package/dist/styles/agent-attention.css +122 -0
- package/dist/styles/agent-chat.css +133 -4
- package/dist/styles/app-frame.css +15 -0
- package/dist/styles/app-top-bar.css +100 -0
- package/dist/styles/avatar.css +0 -1
- package/dist/styles/browser-control-overlay.css +184 -0
- package/dist/styles/card.css +21 -0
- package/dist/styles/checkbox-group.css +69 -0
- package/dist/styles/description-list.css +50 -0
- package/dist/styles/fieldset.css +11 -0
- package/dist/styles/index.css +14 -2
- package/dist/styles/mcp-connection-request.css +60 -0
- package/dist/styles/mcp-server-picker.css +95 -68
- package/dist/styles/message.css +4 -43
- package/dist/styles/pricing-page.css +21 -27
- package/dist/styles/prompt-input.css +225 -32
- package/dist/styles/reasoning.css +1 -55
- package/dist/styles/recipes.css +23 -15
- package/dist/styles/resizable-side-panel.css +66 -0
- package/dist/styles/responsive-sidebar-shell.css +169 -0
- package/dist/styles/select.css +10 -0
- package/dist/styles/stepper.css +13 -0
- package/dist/styles/streamdown.css +0 -4
- package/dist/styles/subagent-run.css +55 -38
- package/dist/styles/textarea.css +20 -0
- package/dist/styles/theme-mode-control.css +72 -0
- package/dist/styles/think-execution-status.css +49 -0
- package/dist/styles/think-execution-workbench.css +8 -72
- package/dist/styles/think-full-app.css +104 -131
- package/dist/styles/think-routine-library.css +491 -0
- package/dist/styles/think-thread-picker.css +47 -3
- package/dist/styles/toggle-group.css +7 -0
- package/dist/styles/workspace-explorer.css +511 -64
- package/dist/utils/mcp-server-catalog.d.ts +82 -78
- package/dist/utils/mcp-server-catalog.js +64 -41
- package/dist/utils/structured-code.d.ts +1 -1
- package/dist/utils/theme.d.ts +22 -0
- package/dist/utils/theme.js +55 -0
- package/package.json +34 -28
- package/dist/icons-Ba9THQKz.js +0 -64
- package/dist/styles/think-resize-handle.css +0 -33
- package/dist/styles/think-thread-shell.css +0 -219
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { t as cx } from "../class-names-9UtZwb0J.js";
|
|
2
|
+
import { F as PlusIcon, R as SearchIcon } from "../icons-CpfUer49.js";
|
|
3
|
+
import { Button } from "./Button.js";
|
|
4
|
+
import { Tooltip } from "./Tooltip.js";
|
|
5
|
+
import { Field } from "./Field.js";
|
|
6
|
+
import { ToggleGroup } from "./ToggleGroup.js";
|
|
7
|
+
import { getThinkRoutineNextRun } from "./ThinkRoutine.js";
|
|
8
|
+
import * as React from "react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
//#region src/components/ThinkRoutineBrowser.tsx
|
|
11
|
+
function filterRoutines(routines, filter, query) {
|
|
12
|
+
const normalizedQuery = query.trim().toLocaleLowerCase();
|
|
13
|
+
return routines.filter((routine) => {
|
|
14
|
+
if (filter === "active" && !routine.enabled) return false;
|
|
15
|
+
if (filter === "paused" && routine.enabled) return false;
|
|
16
|
+
if (!normalizedQuery) return true;
|
|
17
|
+
return `${routine.name} ${routine.description ?? ""} ${routine.owner.name}`.toLocaleLowerCase().includes(normalizedQuery);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/** Searchable, filterable navigation for an app-owned collection of Think routines. */
|
|
21
|
+
function ThinkRoutineBrowser({ className, routines, selectedRoutineId, onSelectedRoutineIdChange, onCreateRoutine, ref, ...props }) {
|
|
22
|
+
const [filter, setFilter] = React.useState("all");
|
|
23
|
+
const [query, setQuery] = React.useState("");
|
|
24
|
+
const visibleRoutines = filterRoutines(routines, filter, query);
|
|
25
|
+
const retainVisibleSelection = (nextVisibleRoutines) => {
|
|
26
|
+
if (selectedRoutineId && !nextVisibleRoutines.some((routine) => routine.id === selectedRoutineId)) {
|
|
27
|
+
const nextSelectedId = nextVisibleRoutines[0]?.id;
|
|
28
|
+
if (nextSelectedId) onSelectedRoutineIdChange?.(nextSelectedId);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
return /* @__PURE__ */ jsxs("nav", {
|
|
32
|
+
ref,
|
|
33
|
+
className: cx("think-routine-browser", "think-routine-library__browser", className),
|
|
34
|
+
...props,
|
|
35
|
+
children: [
|
|
36
|
+
/* @__PURE__ */ jsx("h2", {
|
|
37
|
+
className: "think-routine-library__title",
|
|
38
|
+
children: "Schedules"
|
|
39
|
+
}),
|
|
40
|
+
/* @__PURE__ */ jsxs("div", {
|
|
41
|
+
className: "think-routine-library__browser-toolbar",
|
|
42
|
+
children: [/* @__PURE__ */ jsx(ToggleGroup.Root, {
|
|
43
|
+
className: "think-routine-library__filters",
|
|
44
|
+
size: "sm",
|
|
45
|
+
"aria-label": "Filter schedules",
|
|
46
|
+
value: [filter],
|
|
47
|
+
onValueChange: (nextValue) => {
|
|
48
|
+
const nextFilter = nextValue[0];
|
|
49
|
+
if (!nextFilter) return;
|
|
50
|
+
setFilter(nextFilter);
|
|
51
|
+
retainVisibleSelection(filterRoutines(routines, nextFilter, query));
|
|
52
|
+
},
|
|
53
|
+
children: [
|
|
54
|
+
"all",
|
|
55
|
+
"active",
|
|
56
|
+
"paused"
|
|
57
|
+
].map((value) => /* @__PURE__ */ jsx(ToggleGroup.Item, {
|
|
58
|
+
type: "button",
|
|
59
|
+
value,
|
|
60
|
+
children: value.charAt(0).toUpperCase() + value.slice(1)
|
|
61
|
+
}, value))
|
|
62
|
+
}), onCreateRoutine ? /* @__PURE__ */ jsxs(Tooltip.Root, { children: [/* @__PURE__ */ jsx(Tooltip.Trigger, {
|
|
63
|
+
render: /* @__PURE__ */ jsx(Button, {
|
|
64
|
+
type: "button",
|
|
65
|
+
variant: "ghost",
|
|
66
|
+
color: "neutral",
|
|
67
|
+
size: "icon-sm",
|
|
68
|
+
"aria-label": "New schedule",
|
|
69
|
+
onClick: onCreateRoutine
|
|
70
|
+
}),
|
|
71
|
+
children: /* @__PURE__ */ jsx(PlusIcon, {})
|
|
72
|
+
}), /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsx(Tooltip.Positioner, {
|
|
73
|
+
side: "bottom",
|
|
74
|
+
sideOffset: 4,
|
|
75
|
+
children: /* @__PURE__ */ jsx(Tooltip.Popup, { children: "Create schedule" })
|
|
76
|
+
}) })] }) : null]
|
|
77
|
+
}),
|
|
78
|
+
/* @__PURE__ */ jsxs(Field.Root, {
|
|
79
|
+
className: "think-routine-library__search",
|
|
80
|
+
name: "routine-search",
|
|
81
|
+
children: [/* @__PURE__ */ jsx(Field.Label, {
|
|
82
|
+
className: "think-routine-library__title",
|
|
83
|
+
children: "Search schedules"
|
|
84
|
+
}), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(SearchIcon, {}), /* @__PURE__ */ jsx(Field.Control, {
|
|
85
|
+
className: "think-routine-browser__search-control",
|
|
86
|
+
type: "search",
|
|
87
|
+
value: query,
|
|
88
|
+
placeholder: "Search schedules",
|
|
89
|
+
onChange: (event) => {
|
|
90
|
+
const nextQuery = event.currentTarget.value;
|
|
91
|
+
setQuery(nextQuery);
|
|
92
|
+
retainVisibleSelection(filterRoutines(routines, filter, nextQuery));
|
|
93
|
+
}
|
|
94
|
+
})] })]
|
|
95
|
+
}),
|
|
96
|
+
/* @__PURE__ */ jsxs("p", {
|
|
97
|
+
className: "think-routine-library__status",
|
|
98
|
+
role: "status",
|
|
99
|
+
"aria-atomic": "true",
|
|
100
|
+
children: [
|
|
101
|
+
visibleRoutines.length,
|
|
102
|
+
" ",
|
|
103
|
+
visibleRoutines.length === 1 ? "schedule" : "schedules",
|
|
104
|
+
" shown."
|
|
105
|
+
]
|
|
106
|
+
}),
|
|
107
|
+
visibleRoutines.length ? /* @__PURE__ */ jsx("ul", {
|
|
108
|
+
className: "think-routine-library__routine-list",
|
|
109
|
+
role: "list",
|
|
110
|
+
children: visibleRoutines.map((routine) => {
|
|
111
|
+
const selected = routine.id === selectedRoutineId;
|
|
112
|
+
return /* @__PURE__ */ jsx("li", {
|
|
113
|
+
"data-selected": selected || void 0,
|
|
114
|
+
children: /* @__PURE__ */ jsxs(Button, {
|
|
115
|
+
className: "think-routine-browser__routine",
|
|
116
|
+
type: "button",
|
|
117
|
+
variant: "ghost",
|
|
118
|
+
color: "neutral",
|
|
119
|
+
size: "sm",
|
|
120
|
+
"aria-current": selected ? "page" : void 0,
|
|
121
|
+
onClick: () => onSelectedRoutineIdChange?.(routine.id),
|
|
122
|
+
children: [
|
|
123
|
+
/* @__PURE__ */ jsx("span", {
|
|
124
|
+
className: "think-routine-library__routine-status",
|
|
125
|
+
"data-enabled": routine.enabled || void 0,
|
|
126
|
+
"aria-hidden": "true"
|
|
127
|
+
}),
|
|
128
|
+
/* @__PURE__ */ jsx("span", {
|
|
129
|
+
className: "think-routine-library__title",
|
|
130
|
+
children: routine.enabled ? "Active" : "Paused"
|
|
131
|
+
}),
|
|
132
|
+
/* @__PURE__ */ jsxs("span", {
|
|
133
|
+
className: "think-routine-library__routine-copy",
|
|
134
|
+
children: [
|
|
135
|
+
/* @__PURE__ */ jsx("strong", { children: routine.name }),
|
|
136
|
+
/* @__PURE__ */ jsx("span", { children: routine.task.schedule }),
|
|
137
|
+
/* @__PURE__ */ jsxs("small", { children: [
|
|
138
|
+
routine.owner.name,
|
|
139
|
+
" · Next ",
|
|
140
|
+
getThinkRoutineNextRun(routine)
|
|
141
|
+
] })
|
|
142
|
+
]
|
|
143
|
+
})
|
|
144
|
+
]
|
|
145
|
+
})
|
|
146
|
+
}, routine.id);
|
|
147
|
+
})
|
|
148
|
+
}) : /* @__PURE__ */ jsxs("div", {
|
|
149
|
+
className: "think-routine-library__empty-list",
|
|
150
|
+
children: [/* @__PURE__ */ jsx("strong", { children: "No matching schedules" }), /* @__PURE__ */ jsx("p", { children: "Try another search or filter." })]
|
|
151
|
+
})
|
|
152
|
+
]
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
//#endregion
|
|
156
|
+
export { ThinkRoutineBrowser };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ThinkRoutine, ThinkRoutineRunOf } from "./ThinkRoutine.js";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/components/ThinkRoutineDetail.d.ts
|
|
5
|
+
interface ThinkRoutineDetailProps<TRoutine extends ThinkRoutine = ThinkRoutine> extends React.HTMLAttributes<HTMLElement> {
|
|
6
|
+
routine: TRoutine;
|
|
7
|
+
busy?: boolean;
|
|
8
|
+
onEnabledChange?: (enabled: boolean) => void;
|
|
9
|
+
onRunSelect?: (run: ThinkRoutineRunOf<TRoutine>) => void;
|
|
10
|
+
}
|
|
11
|
+
/** Readable definition, schedule settings, and recent executions for one routine. */
|
|
12
|
+
declare function ThinkRoutineDetail<TRoutine extends ThinkRoutine = ThinkRoutine>({
|
|
13
|
+
busy,
|
|
14
|
+
className,
|
|
15
|
+
routine,
|
|
16
|
+
onEnabledChange,
|
|
17
|
+
onRunSelect,
|
|
18
|
+
ref,
|
|
19
|
+
...props
|
|
20
|
+
}: ThinkRoutineDetailProps<TRoutine> & {
|
|
21
|
+
ref?: React.Ref<HTMLElement>;
|
|
22
|
+
}): React.JSX.Element;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { ThinkRoutineDetail, ThinkRoutineDetailProps };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { t as cx } from "../class-names-9UtZwb0J.js";
|
|
2
|
+
import { Badge } from "./Badge.js";
|
|
3
|
+
import { Switch } from "./Switch.js";
|
|
4
|
+
import { getThinkRoutineNextRun } from "./ThinkRoutine.js";
|
|
5
|
+
import { ThinkRoutineRuns } from "./ThinkRoutineRuns.js";
|
|
6
|
+
import * as React from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
//#region src/components/ThinkRoutineDetail.tsx
|
|
9
|
+
function taskInstructions(routine) {
|
|
10
|
+
return typeof routine.task.prompt === "string" ? routine.task.prompt : "Runs an app-defined scheduled handler.";
|
|
11
|
+
}
|
|
12
|
+
/** Readable definition, schedule settings, and recent executions for one routine. */
|
|
13
|
+
function ThinkRoutineDetail({ busy = false, className, routine, onEnabledChange, onRunSelect, ref, ...props }) {
|
|
14
|
+
const titleId = React.useId();
|
|
15
|
+
const definitionId = React.useId();
|
|
16
|
+
const settingsId = React.useId();
|
|
17
|
+
const enabledLabelId = React.useId();
|
|
18
|
+
return /* @__PURE__ */ jsxs("article", {
|
|
19
|
+
ref,
|
|
20
|
+
className: cx("think-routine-detail", "think-routine-library__detail", className),
|
|
21
|
+
"aria-labelledby": titleId,
|
|
22
|
+
...props,
|
|
23
|
+
children: [
|
|
24
|
+
/* @__PURE__ */ jsx("header", {
|
|
25
|
+
className: "think-routine-library__detail-header",
|
|
26
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
27
|
+
className: "think-routine-library__detail-heading",
|
|
28
|
+
children: [
|
|
29
|
+
/* @__PURE__ */ jsx(Badge, {
|
|
30
|
+
className: "think-routine-library__state",
|
|
31
|
+
variant: "ghost",
|
|
32
|
+
color: routine.enabled ? "success" : "neutral",
|
|
33
|
+
size: "sm",
|
|
34
|
+
children: routine.enabled ? "Active" : "Paused"
|
|
35
|
+
}),
|
|
36
|
+
/* @__PURE__ */ jsx("h1", {
|
|
37
|
+
id: titleId,
|
|
38
|
+
children: routine.name
|
|
39
|
+
}),
|
|
40
|
+
routine.description ? /* @__PURE__ */ jsx("p", { children: routine.description }) : null
|
|
41
|
+
]
|
|
42
|
+
})
|
|
43
|
+
}),
|
|
44
|
+
/* @__PURE__ */ jsxs("div", {
|
|
45
|
+
className: "think-routine-library__detail-grid",
|
|
46
|
+
children: [/* @__PURE__ */ jsxs("section", {
|
|
47
|
+
className: "think-routine-library__definition",
|
|
48
|
+
"aria-labelledby": definitionId,
|
|
49
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
50
|
+
className: "think-routine-library__section-heading",
|
|
51
|
+
children: /* @__PURE__ */ jsx("h2", {
|
|
52
|
+
id: definitionId,
|
|
53
|
+
children: "Instructions"
|
|
54
|
+
})
|
|
55
|
+
}), /* @__PURE__ */ jsx("p", {
|
|
56
|
+
className: "think-routine-library__instructions",
|
|
57
|
+
children: taskInstructions(routine)
|
|
58
|
+
})]
|
|
59
|
+
}), /* @__PURE__ */ jsxs("aside", {
|
|
60
|
+
className: "think-routine-library__settings",
|
|
61
|
+
"aria-labelledby": settingsId,
|
|
62
|
+
children: [
|
|
63
|
+
/* @__PURE__ */ jsx("div", {
|
|
64
|
+
className: "think-routine-library__section-heading",
|
|
65
|
+
children: /* @__PURE__ */ jsx("h2", {
|
|
66
|
+
id: settingsId,
|
|
67
|
+
children: "Schedule"
|
|
68
|
+
})
|
|
69
|
+
}),
|
|
70
|
+
/* @__PURE__ */ jsxs("dl", {
|
|
71
|
+
className: "think-routine-library__facts",
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("dt", { children: "Repeats" }), /* @__PURE__ */ jsx("dd", { children: routine.task.schedule })] }),
|
|
74
|
+
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("dt", { children: "Next run" }), /* @__PURE__ */ jsx("dd", { children: getThinkRoutineNextRun(routine) })] }),
|
|
75
|
+
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("dt", { children: "Agent" }), /* @__PURE__ */ jsx("dd", { children: routine.owner.name })] })
|
|
76
|
+
]
|
|
77
|
+
}),
|
|
78
|
+
/* @__PURE__ */ jsxs("div", {
|
|
79
|
+
className: "think-routine-library__status-control",
|
|
80
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
81
|
+
id: enabledLabelId,
|
|
82
|
+
children: /* @__PURE__ */ jsx("strong", { children: "Enabled" })
|
|
83
|
+
}), onEnabledChange ? /* @__PURE__ */ jsx(Switch.Root, {
|
|
84
|
+
"aria-labelledby": enabledLabelId,
|
|
85
|
+
checked: routine.enabled,
|
|
86
|
+
disabled: busy,
|
|
87
|
+
onCheckedChange: onEnabledChange,
|
|
88
|
+
children: /* @__PURE__ */ jsx(Switch.Thumb, {})
|
|
89
|
+
}) : /* @__PURE__ */ jsx("span", { children: routine.enabled ? "On" : "Off" })]
|
|
90
|
+
})
|
|
91
|
+
]
|
|
92
|
+
})]
|
|
93
|
+
}),
|
|
94
|
+
/* @__PURE__ */ jsx(ThinkRoutineRuns, {
|
|
95
|
+
runs: routine.runs,
|
|
96
|
+
onRunSelect
|
|
97
|
+
})
|
|
98
|
+
]
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
//#endregion
|
|
102
|
+
export { ThinkRoutineDetail };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ThinkRoutineCreateRequest, ThinkRoutineOwner } from "./ThinkRoutine.js";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { ThinkScheduledTaskSchedule } from "@cloudflare/think";
|
|
4
|
+
|
|
5
|
+
//#region src/components/ThinkRoutineForm.d.ts
|
|
6
|
+
interface ThinkRoutineFormProps extends React.HTMLAttributes<HTMLElement> {
|
|
7
|
+
busy?: boolean;
|
|
8
|
+
owners: readonly ThinkRoutineOwner[];
|
|
9
|
+
/**
|
|
10
|
+
* Upstream Think schedule DSL values the host permits. Use an inline
|
|
11
|
+
* timezone for a schedule-specific wall clock, or let the agent's
|
|
12
|
+
* `getDefaultTimezone()` own wall-clock fallback behavior.
|
|
13
|
+
*/
|
|
14
|
+
schedules: readonly ThinkScheduledTaskSchedule[];
|
|
15
|
+
onCancel?: () => void;
|
|
16
|
+
onCreate: (request: ThinkRoutineCreateRequest) => void;
|
|
17
|
+
}
|
|
18
|
+
/** Authoring surface for a serializable, prompt-based Think scheduled task. */
|
|
19
|
+
declare function ThinkRoutineForm({
|
|
20
|
+
busy,
|
|
21
|
+
className,
|
|
22
|
+
owners,
|
|
23
|
+
onCancel,
|
|
24
|
+
onCreate,
|
|
25
|
+
schedules,
|
|
26
|
+
ref,
|
|
27
|
+
...props
|
|
28
|
+
}: ThinkRoutineFormProps & {
|
|
29
|
+
ref?: React.Ref<HTMLElement>;
|
|
30
|
+
}): React.JSX.Element;
|
|
31
|
+
//#endregion
|
|
32
|
+
export { ThinkRoutineForm, ThinkRoutineFormProps };
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { t as cx } from "../class-names-9UtZwb0J.js";
|
|
2
|
+
import { B as SpinnerIcon } from "../icons-CpfUer49.js";
|
|
3
|
+
import { Button } from "./Button.js";
|
|
4
|
+
import { Field } from "./Field.js";
|
|
5
|
+
import { Form } from "./Form.js";
|
|
6
|
+
import { Textarea } from "./Textarea.js";
|
|
7
|
+
import { Select } from "./Select.js";
|
|
8
|
+
import * as React from "react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
//#region src/components/ThinkRoutineForm.tsx
|
|
11
|
+
function RoutineSelect({ label, onValueChange, options, value }) {
|
|
12
|
+
return /* @__PURE__ */ jsx("div", {
|
|
13
|
+
className: "think-routine-library__select-field",
|
|
14
|
+
children: /* @__PURE__ */ jsxs(Select.Root, {
|
|
15
|
+
items: options,
|
|
16
|
+
value,
|
|
17
|
+
onValueChange: (nextValue) => {
|
|
18
|
+
if (typeof nextValue === "string") onValueChange(nextValue);
|
|
19
|
+
},
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ jsx(Select.Label, { children: label }),
|
|
22
|
+
/* @__PURE__ */ jsxs(Select.Trigger, { children: [/* @__PURE__ */ jsx(Select.Value, {}), /* @__PURE__ */ jsx(Select.Icon, {})] }),
|
|
23
|
+
/* @__PURE__ */ jsx(Select.Portal, { children: /* @__PURE__ */ jsx(Select.Positioner, {
|
|
24
|
+
sideOffset: 4,
|
|
25
|
+
children: /* @__PURE__ */ jsx(Select.Popup, { children: /* @__PURE__ */ jsx(Select.List, { children: options.map((option) => /* @__PURE__ */ jsxs(Select.Item, {
|
|
26
|
+
value: option.value,
|
|
27
|
+
children: [/* @__PURE__ */ jsx(Select.ItemText, { children: option.label }), /* @__PURE__ */ jsx(Select.ItemIndicator, {})]
|
|
28
|
+
}, option.value)) }) })
|
|
29
|
+
}) })
|
|
30
|
+
]
|
|
31
|
+
})
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/** Authoring surface for a serializable, prompt-based Think scheduled task. */
|
|
35
|
+
function ThinkRoutineForm({ busy = false, className, owners, onCancel, onCreate, schedules, ref, ...props }) {
|
|
36
|
+
const [name, setName] = React.useState("");
|
|
37
|
+
const [ownerId, setOwnerId] = React.useState(owners[0]?.id ?? "");
|
|
38
|
+
const [prompt, setPrompt] = React.useState("");
|
|
39
|
+
const [schedule, setSchedule] = React.useState(schedules[0] ?? null);
|
|
40
|
+
const titleId = React.useId();
|
|
41
|
+
return /* @__PURE__ */ jsxs("main", {
|
|
42
|
+
ref,
|
|
43
|
+
className: cx("think-routine-form", "think-routine-library__create", className),
|
|
44
|
+
"aria-labelledby": titleId,
|
|
45
|
+
...props,
|
|
46
|
+
children: [/* @__PURE__ */ jsx("header", {
|
|
47
|
+
className: "think-routine-library__create-header",
|
|
48
|
+
children: /* @__PURE__ */ jsxs("div", { children: [
|
|
49
|
+
/* @__PURE__ */ jsx("p", {
|
|
50
|
+
className: "think-routine-library__eyebrow",
|
|
51
|
+
children: "New schedule"
|
|
52
|
+
}),
|
|
53
|
+
/* @__PURE__ */ jsx("h1", {
|
|
54
|
+
id: titleId,
|
|
55
|
+
children: "What should run automatically?"
|
|
56
|
+
}),
|
|
57
|
+
/* @__PURE__ */ jsx("p", { children: "Give an agent clear instructions, then choose when Think should submit them." })
|
|
58
|
+
] })
|
|
59
|
+
}), /* @__PURE__ */ jsxs(Form, {
|
|
60
|
+
className: "think-routine-library__form",
|
|
61
|
+
onSubmit: (event) => {
|
|
62
|
+
event.preventDefault();
|
|
63
|
+
if (!name.trim() || !prompt.trim() || !ownerId || !schedule) return;
|
|
64
|
+
const task = {
|
|
65
|
+
schedule,
|
|
66
|
+
prompt: prompt.trim()
|
|
67
|
+
};
|
|
68
|
+
onCreate({
|
|
69
|
+
name: name.trim(),
|
|
70
|
+
ownerId,
|
|
71
|
+
task
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
children: [/* @__PURE__ */ jsxs(Field.Group, { children: [
|
|
75
|
+
/* @__PURE__ */ jsxs(Field.Root, {
|
|
76
|
+
name: "name",
|
|
77
|
+
children: [
|
|
78
|
+
/* @__PURE__ */ jsx(Field.Label, { children: "Name" }),
|
|
79
|
+
/* @__PURE__ */ jsx(Field.Control, {
|
|
80
|
+
name: "name",
|
|
81
|
+
value: name,
|
|
82
|
+
required: true,
|
|
83
|
+
autoComplete: "off",
|
|
84
|
+
placeholder: "Weekly project review",
|
|
85
|
+
onChange: (event) => setName(event.currentTarget.value)
|
|
86
|
+
}),
|
|
87
|
+
/* @__PURE__ */ jsx(Field.Error, {
|
|
88
|
+
match: "valueMissing",
|
|
89
|
+
children: "Name is required"
|
|
90
|
+
})
|
|
91
|
+
]
|
|
92
|
+
}),
|
|
93
|
+
/* @__PURE__ */ jsxs(Field.Root, {
|
|
94
|
+
name: "prompt",
|
|
95
|
+
children: [
|
|
96
|
+
/* @__PURE__ */ jsx(Field.Label, { children: "Instructions" }),
|
|
97
|
+
/* @__PURE__ */ jsx(Field.Description, { children: "Describe the outcome, sources, and what to do when blocked." }),
|
|
98
|
+
/* @__PURE__ */ jsx(Field.Control, {
|
|
99
|
+
render: /* @__PURE__ */ jsx(Textarea, { rows: 8 }),
|
|
100
|
+
name: "prompt",
|
|
101
|
+
value: prompt,
|
|
102
|
+
required: true,
|
|
103
|
+
placeholder: "Review open pull requests, summarize blockers, and draft a concise project update.",
|
|
104
|
+
onChange: (event) => setPrompt(event.currentTarget.value)
|
|
105
|
+
}),
|
|
106
|
+
/* @__PURE__ */ jsx(Field.Error, {
|
|
107
|
+
match: "valueMissing",
|
|
108
|
+
children: "Instructions are required"
|
|
109
|
+
})
|
|
110
|
+
]
|
|
111
|
+
}),
|
|
112
|
+
/* @__PURE__ */ jsxs("div", {
|
|
113
|
+
className: "think-routine-library__form-row",
|
|
114
|
+
children: [/* @__PURE__ */ jsx(RoutineSelect, {
|
|
115
|
+
label: "Agent",
|
|
116
|
+
value: ownerId,
|
|
117
|
+
options: owners.map((owner) => ({
|
|
118
|
+
label: owner.name,
|
|
119
|
+
value: owner.id
|
|
120
|
+
})),
|
|
121
|
+
onValueChange: setOwnerId
|
|
122
|
+
}), schedule ? /* @__PURE__ */ jsx(RoutineSelect, {
|
|
123
|
+
label: "Repeats",
|
|
124
|
+
value: schedule,
|
|
125
|
+
options: schedules.map((value) => ({
|
|
126
|
+
label: value,
|
|
127
|
+
value
|
|
128
|
+
})),
|
|
129
|
+
onValueChange: setSchedule
|
|
130
|
+
}) : /* @__PURE__ */ jsx("p", { children: "No schedules are available." })]
|
|
131
|
+
})
|
|
132
|
+
] }), /* @__PURE__ */ jsxs("footer", {
|
|
133
|
+
className: "think-routine-library__form-actions",
|
|
134
|
+
children: [onCancel ? /* @__PURE__ */ jsx(Button, {
|
|
135
|
+
type: "button",
|
|
136
|
+
variant: "ghost",
|
|
137
|
+
color: "neutral",
|
|
138
|
+
disabled: busy,
|
|
139
|
+
onClick: onCancel,
|
|
140
|
+
children: "Cancel"
|
|
141
|
+
}) : null, /* @__PURE__ */ jsxs(Button, {
|
|
142
|
+
type: "submit",
|
|
143
|
+
disabled: busy || owners.length === 0 || !schedule,
|
|
144
|
+
children: [busy ? /* @__PURE__ */ jsx(SpinnerIcon, {}) : null, " Create schedule"]
|
|
145
|
+
})]
|
|
146
|
+
})]
|
|
147
|
+
})]
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
//#endregion
|
|
151
|
+
export { ThinkRoutineForm };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { t as ThinkExecutionRun } from "../ThinkExecutionRun-ChhWhOoU.js";
|
|
2
|
+
import { ThinkRoutine, ThinkRoutineCreateRequest, ThinkRoutineOwner, ThinkRoutineRunOf } from "./ThinkRoutine.js";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { ThinkScheduledTaskSchedule } from "@cloudflare/think";
|
|
5
|
+
|
|
6
|
+
//#region src/components/ThinkRoutineLibrary.d.ts
|
|
7
|
+
interface ThinkRoutineLibraryDetailRenderProps<TRoutine extends ThinkRoutine = ThinkRoutine> {
|
|
8
|
+
/** The selected routine, including any app-owned extension fields. */
|
|
9
|
+
routine: TRoutine;
|
|
10
|
+
/** The standard upstream-first detail surface. Compose this into extensions. */
|
|
11
|
+
defaultDetail: React.ReactNode;
|
|
12
|
+
/** Custom detail surfaces must honor this while invoking the supplied actions. */
|
|
13
|
+
busy: boolean;
|
|
14
|
+
onEnabledChange?: (enabled: boolean) => void;
|
|
15
|
+
onRunSelect?: (run: ThinkRoutineRunOf<TRoutine>) => void;
|
|
16
|
+
}
|
|
17
|
+
interface ThinkRoutineLibraryProps<TRoutine extends ThinkRoutine = ThinkRoutine> extends Omit<React.HTMLAttributes<HTMLDivElement>, "onSelect"> {
|
|
18
|
+
/** App-owned routine catalog assembled from native Think and Agents records. */
|
|
19
|
+
routines: readonly TRoutine[];
|
|
20
|
+
/** Agents available as owners when authoring a routine. */
|
|
21
|
+
owners: readonly ThinkRoutineOwner[];
|
|
22
|
+
/** Upstream Think schedule DSL values offered by the composed authoring form. */
|
|
23
|
+
schedules: readonly ThinkScheduledTaskSchedule[];
|
|
24
|
+
/** Selected routine id when selection is controlled by the host app. */
|
|
25
|
+
selectedRoutineId?: string;
|
|
26
|
+
/** Initial routine id when the library owns selection state. */
|
|
27
|
+
defaultSelectedRoutineId?: string;
|
|
28
|
+
/** Called when the user selects a routine from the collection. */
|
|
29
|
+
onSelectedRoutineIdChange?: (routineId: string) => void;
|
|
30
|
+
/** Creates an app-owned routine from a whole native Think scheduled task. */
|
|
31
|
+
onCreateRoutine?: (request: ThinkRoutineCreateRequest) => void | Promise<void>;
|
|
32
|
+
/** Starts the selected routine immediately. */
|
|
33
|
+
onRunRoutine?: (routine: TRoutine) => void | Promise<void>;
|
|
34
|
+
/** Activates or pauses the selected app-owned routine. */
|
|
35
|
+
onRoutineEnabledChange?: (routine: TRoutine, enabled: boolean) => void | Promise<void>;
|
|
36
|
+
/** Permanently removes the selected app-owned routine. */
|
|
37
|
+
onDeleteRoutine?: (routine: TRoutine) => void | Promise<void>;
|
|
38
|
+
/** Opens one native Workflow or submission from the selected routine history. */
|
|
39
|
+
onRunSelect?: (routine: TRoutine, run: ThinkRoutineRunOf<TRoutine>) => void;
|
|
40
|
+
/**
|
|
41
|
+
* Replaces only the selected-routine surface while preserving the library
|
|
42
|
+
* shell, navigation, actions, async state, and upstream routine contract.
|
|
43
|
+
*/
|
|
44
|
+
renderRoutineDetail?: (props: ThinkRoutineLibraryDetailRenderProps<TRoutine>) => React.ReactNode;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Full-page, cross-agent routine library. This intentionally does not live in
|
|
48
|
+
* ThinkFullApp's per-thread workbench: the host app owns aggregation, routes,
|
|
49
|
+
* authoring callables, and the association between schedules and native runs.
|
|
50
|
+
* The application shell composes `ThinkRoutineBrowser`, `ThinkRoutineDetail`,
|
|
51
|
+
* `ThinkRoutineRuns`, and `ThinkRoutineForm`; consumers may also use those
|
|
52
|
+
* surfaces independently.
|
|
53
|
+
*/
|
|
54
|
+
declare function ThinkRoutineLibrary<TRoutine extends ThinkRoutine = ThinkRoutine>({
|
|
55
|
+
className,
|
|
56
|
+
defaultSelectedRoutineId,
|
|
57
|
+
onCreateRoutine,
|
|
58
|
+
onDeleteRoutine,
|
|
59
|
+
onRoutineEnabledChange,
|
|
60
|
+
onRunRoutine,
|
|
61
|
+
onRunSelect,
|
|
62
|
+
onSelectedRoutineIdChange,
|
|
63
|
+
owners,
|
|
64
|
+
renderRoutineDetail,
|
|
65
|
+
schedules,
|
|
66
|
+
ref,
|
|
67
|
+
routines,
|
|
68
|
+
selectedRoutineId,
|
|
69
|
+
...props
|
|
70
|
+
}: ThinkRoutineLibraryProps<TRoutine> & {
|
|
71
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
72
|
+
}): React.JSX.Element;
|
|
73
|
+
//#endregion
|
|
74
|
+
export { type ThinkRoutine, type ThinkRoutineCreateRequest, ThinkRoutineLibrary, ThinkRoutineLibraryDetailRenderProps, ThinkRoutineLibraryProps, type ThinkRoutineOwner, type ThinkExecutionRun as ThinkRoutineRun, type ThinkRoutineRunOf };
|