@plures/design-dojo 0.5.2 → 0.7.1

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 (250) hide show
  1. package/dist/app/CanvasBreadcrumb.svelte +146 -0
  2. package/dist/app/CanvasBreadcrumb.svelte.d.ts +19 -0
  3. package/dist/app/CanvasBreadcrumb.types.js +1 -0
  4. package/dist/app/ChatInput.svelte +296 -0
  5. package/dist/app/ChatInput.svelte.d.ts +15 -0
  6. package/dist/app/ChatView.svelte +542 -0
  7. package/dist/app/ChatView.svelte.d.ts +19 -0
  8. package/dist/app/ChatView.types.js +1 -0
  9. package/dist/app/ConversationGraph.svelte +471 -0
  10. package/dist/app/ConversationGraph.svelte.d.ts +20 -0
  11. package/dist/app/FirstRunWizard.svelte +542 -0
  12. package/dist/app/FirstRunWizard.svelte.d.ts +10 -0
  13. package/dist/app/FirstRunWizard.types.js +1 -0
  14. package/dist/app/MemorySidebar.svelte +258 -0
  15. package/dist/app/MemorySidebar.svelte.d.ts +9 -0
  16. package/dist/app/MemorySidebar.types.js +1 -0
  17. package/dist/app/PeerStatusPanel.svelte +464 -0
  18. package/dist/app/PeerStatusPanel.svelte.d.ts +16 -0
  19. package/dist/app/ProcedureCanvas.svelte +994 -0
  20. package/dist/app/ProcedureCanvas.svelte.d.ts +12 -0
  21. package/dist/app/ProcedureCanvas.types.js +1 -0
  22. package/dist/app/ProcedureEditor.svelte +494 -0
  23. package/dist/app/ProcedureEditor.svelte.d.ts +11 -0
  24. package/dist/app/ProcedureEditor.types.js +1 -0
  25. package/dist/app/ProcedureInspector.svelte +520 -0
  26. package/dist/app/ProcedureInspector.svelte.d.ts +15 -0
  27. package/dist/app/ProcedureNode.svelte +283 -0
  28. package/dist/app/ProcedureNode.svelte.d.ts +26 -0
  29. package/dist/app/Realm.types.js +1 -0
  30. package/dist/app/RealmIndicator.svelte +81 -0
  31. package/dist/app/RealmIndicator.svelte.d.ts +10 -0
  32. package/dist/app/RealmSwitcher.svelte +354 -0
  33. package/dist/app/RealmSwitcher.svelte.d.ts +16 -0
  34. package/dist/app/SemanticConversation.types.js +1 -0
  35. package/dist/app/SemanticSearchInput.svelte +630 -0
  36. package/dist/app/SemanticSearchInput.svelte.d.ts +20 -0
  37. package/dist/app/SemanticSearchInput.types.js +1 -0
  38. package/dist/app/SemanticTimeline.svelte +426 -0
  39. package/dist/app/SemanticTimeline.svelte.d.ts +13 -0
  40. package/dist/app/SettingsPanel.svelte +330 -0
  41. package/dist/app/SettingsPanel.svelte.d.ts +12 -0
  42. package/dist/app/SettingsPanel.types.js +1 -0
  43. package/dist/app/SubCanvas.svelte +457 -0
  44. package/dist/app/SubCanvas.svelte.d.ts +48 -0
  45. package/dist/app/SubCanvas.types.js +1 -0
  46. package/dist/app/Sync.types.js +1 -0
  47. package/dist/app/SyncIndicator.svelte +219 -0
  48. package/dist/app/SyncIndicator.svelte.d.ts +15 -0
  49. package/dist/app/SyncTimeline.svelte +299 -0
  50. package/dist/app/SyncTimeline.svelte.d.ts +12 -0
  51. package/dist/app/TagCloud.svelte +287 -0
  52. package/dist/app/TagCloud.svelte.d.ts +12 -0
  53. package/dist/app/WorkModeToggle.svelte +188 -0
  54. package/dist/app/WorkModeToggle.svelte.d.ts +17 -0
  55. package/dist/data/List.svelte +104 -0
  56. package/dist/data/List.svelte.d.ts +18 -0
  57. package/dist/data/ListItem.svelte +130 -0
  58. package/dist/data/ListItem.svelte.d.ts +12 -0
  59. package/dist/data/Table.svelte +241 -0
  60. package/dist/data/Table.svelte.d.ts +17 -0
  61. package/dist/data/index.d.ts +3 -0
  62. package/dist/data/index.js +3 -0
  63. package/dist/disclosure/Accordion.svelte +48 -0
  64. package/dist/disclosure/Accordion.svelte.d.ts +15 -0
  65. package/dist/feedback/Badge.svelte +60 -0
  66. package/dist/feedback/Badge.svelte.d.ts +14 -0
  67. package/dist/feedback/Callout.svelte +52 -0
  68. package/dist/feedback/Callout.svelte.d.ts +12 -0
  69. package/dist/feedback/EmptyState.svelte +47 -0
  70. package/dist/feedback/EmptyState.svelte.d.ts +12 -0
  71. package/dist/feedback/ProgressBar.svelte +95 -0
  72. package/dist/feedback/ProgressBar.svelte.d.ts +16 -0
  73. package/dist/forms/FileUpload.svelte +99 -0
  74. package/dist/forms/FileUpload.svelte.d.ts +18 -0
  75. package/dist/forms/RadioGroup.svelte +84 -0
  76. package/dist/forms/RadioGroup.svelte.d.ts +19 -0
  77. package/dist/icons/NerdFont.svelte +44 -0
  78. package/dist/icons/NerdFont.svelte.d.ts +13 -0
  79. package/dist/icons/index.d.ts +1 -0
  80. package/dist/icons/index.js +1 -0
  81. package/dist/index.d.ts +76 -0
  82. package/dist/index.js +70 -6212
  83. package/dist/layout/Box.svelte +207 -0
  84. package/dist/layout/Box.svelte.d.ts +22 -0
  85. package/dist/layout/Sidebar.svelte +210 -0
  86. package/dist/layout/Sidebar.svelte.d.ts +22 -0
  87. package/dist/layout/SplitPane.svelte +64 -0
  88. package/dist/layout/SplitPane.svelte.d.ts +12 -0
  89. package/dist/layout/StatusBar.svelte +83 -0
  90. package/dist/layout/StatusBar.svelte.d.ts +12 -0
  91. package/dist/layout/StatusBarItem.svelte +146 -0
  92. package/dist/layout/StatusBarItem.svelte.d.ts +15 -0
  93. package/dist/layout/StatusBarSpacer.svelte +38 -0
  94. package/dist/layout/StatusBarSpacer.svelte.d.ts +3 -0
  95. package/dist/layout/Tabs.svelte +254 -0
  96. package/dist/layout/Tabs.svelte.d.ts +21 -0
  97. package/dist/layout/Tabs.types.js +1 -0
  98. package/dist/layout/TitleBar.svelte +422 -0
  99. package/dist/layout/TitleBar.svelte.d.ts +22 -0
  100. package/dist/layout/index.d.ts +9 -0
  101. package/dist/layout/index.js +8 -0
  102. package/dist/motion/index.d.ts +1 -0
  103. package/dist/motion/index.js +1 -0
  104. package/dist/motion/spring.js +116 -0
  105. package/dist/overlays/ContextMenu.svelte +268 -0
  106. package/dist/overlays/ContextMenu.svelte.d.ts +17 -0
  107. package/dist/overlays/Dialog.svelte +264 -0
  108. package/dist/overlays/Dialog.svelte.d.ts +20 -0
  109. package/dist/overlays/Menu.svelte +274 -0
  110. package/dist/overlays/Menu.svelte.d.ts +26 -0
  111. package/dist/overlays/Menu.types.js +1 -0
  112. package/dist/overlays/Popover.svelte +158 -0
  113. package/dist/overlays/Popover.svelte.d.ts +21 -0
  114. package/dist/overlays/Toast.svelte +179 -0
  115. package/dist/overlays/Toast.svelte.d.ts +19 -0
  116. package/dist/overlays/Tooltip.svelte +114 -0
  117. package/dist/overlays/Tooltip.svelte.d.ts +17 -0
  118. package/dist/overlays/index.d.ts +7 -0
  119. package/dist/overlays/index.js +6 -0
  120. package/dist/primitives/Button.svelte +217 -0
  121. package/dist/primitives/Button.svelte.d.ts +13 -0
  122. package/dist/primitives/ContextMenu.svelte +242 -0
  123. package/dist/primitives/ContextMenu.svelte.d.ts +18 -0
  124. package/dist/primitives/ContextMenu.types.js +1 -0
  125. package/dist/primitives/Input.svelte +468 -0
  126. package/dist/primitives/Input.svelte.d.ts +21 -0
  127. package/dist/primitives/MarkdownEditor.svelte +781 -0
  128. package/dist/primitives/MarkdownEditor.svelte.d.ts +21 -0
  129. package/dist/primitives/MarkdownEditor.types.js +1 -0
  130. package/dist/primitives/SearchInput.svelte +623 -0
  131. package/dist/primitives/SearchInput.svelte.d.ts +24 -0
  132. package/dist/primitives/Select.svelte +336 -0
  133. package/dist/primitives/Select.svelte.d.ts +18 -0
  134. package/dist/primitives/Text.svelte +177 -0
  135. package/dist/primitives/Text.svelte.d.ts +26 -0
  136. package/dist/primitives/Toggle.svelte +138 -0
  137. package/dist/primitives/Toggle.svelte.d.ts +9 -0
  138. package/dist/primitives/index.d.ts +9 -0
  139. package/dist/primitives/index.js +7 -0
  140. package/dist/primitives/search-input-types.js +1 -0
  141. package/dist/surfaces/ChatPane.svelte +520 -0
  142. package/dist/surfaces/ChatPane.svelte.d.ts +15 -0
  143. package/dist/surfaces/ChatPane.types.js +1 -0
  144. package/dist/surfaces/GlassPanel.svelte +118 -0
  145. package/dist/surfaces/GlassPanel.svelte.d.ts +19 -0
  146. package/dist/surfaces/Pane.svelte +172 -0
  147. package/dist/surfaces/Pane.svelte.d.ts +25 -0
  148. package/dist/surfaces/index.d.ts +4 -0
  149. package/dist/surfaces/index.js +3 -0
  150. package/dist/telemetry/correlation.js +26 -0
  151. package/dist/telemetry/index.d.ts +4 -4
  152. package/dist/telemetry/index.js +20 -101
  153. package/dist/telemetry/sampling.js +58 -0
  154. package/dist/telemetry/tracer.d.ts +16 -1
  155. package/dist/telemetry/tracer.js +112 -0
  156. package/dist/tokens.css +123 -0
  157. package/dist/tui-tokens.css +36 -0
  158. package/dist/useTui.js +31 -0
  159. package/package.json +32 -22
  160. package/dist/design-dojo.css +0 -1
  161. package/dist/enforce/index.d.ts +0 -75
  162. package/dist/enforce/known-components.d.ts +0 -7
  163. package/dist/enforce/rules/no-local-components.d.ts +0 -29
  164. package/dist/enforce/rules/prefer-design-dojo-imports.d.ts +0 -27
  165. package/dist/enforce.js +0 -132
  166. package/dist/lib/app/CanvasBreadcrumb.svelte.d.ts +0 -1
  167. package/dist/lib/app/ChatInput.svelte.d.ts +0 -1
  168. package/dist/lib/app/ChatView.svelte.d.ts +0 -1
  169. package/dist/lib/app/ConversationGraph.svelte.d.ts +0 -1
  170. package/dist/lib/app/FirstRunWizard.svelte.d.ts +0 -1
  171. package/dist/lib/app/MemorySidebar.svelte.d.ts +0 -1
  172. package/dist/lib/app/PeerStatusPanel.svelte.d.ts +0 -1
  173. package/dist/lib/app/ProcedureCanvas.svelte.d.ts +0 -1
  174. package/dist/lib/app/ProcedureEditor.svelte.d.ts +0 -1
  175. package/dist/lib/app/ProcedureInspector.svelte.d.ts +0 -1
  176. package/dist/lib/app/ProcedureNode.svelte.d.ts +0 -1
  177. package/dist/lib/app/RealmIndicator.svelte.d.ts +0 -1
  178. package/dist/lib/app/RealmSwitcher.svelte.d.ts +0 -1
  179. package/dist/lib/app/SemanticSearchInput.svelte.d.ts +0 -1
  180. package/dist/lib/app/SemanticTimeline.svelte.d.ts +0 -1
  181. package/dist/lib/app/SettingsPanel.svelte.d.ts +0 -1
  182. package/dist/lib/app/SubCanvas.svelte.d.ts +0 -1
  183. package/dist/lib/app/SyncIndicator.svelte.d.ts +0 -1
  184. package/dist/lib/app/SyncTimeline.svelte.d.ts +0 -1
  185. package/dist/lib/app/TagCloud.svelte.d.ts +0 -1
  186. package/dist/lib/app/WorkModeToggle.svelte.d.ts +0 -1
  187. package/dist/lib/data/List.svelte.d.ts +0 -1
  188. package/dist/lib/data/ListItem.svelte.d.ts +0 -1
  189. package/dist/lib/data/Table.svelte.d.ts +0 -1
  190. package/dist/lib/data/index.d.ts +0 -3
  191. package/dist/lib/disclosure/Accordion.svelte.d.ts +0 -1
  192. package/dist/lib/feedback/Badge.svelte.d.ts +0 -1
  193. package/dist/lib/feedback/Callout.svelte.d.ts +0 -1
  194. package/dist/lib/feedback/EmptyState.svelte.d.ts +0 -1
  195. package/dist/lib/feedback/ProgressBar.svelte.d.ts +0 -1
  196. package/dist/lib/forms/FileUpload.svelte.d.ts +0 -1
  197. package/dist/lib/forms/RadioGroup.svelte.d.ts +0 -1
  198. package/dist/lib/icons/NerdFont.svelte.d.ts +0 -1
  199. package/dist/lib/icons/index.d.ts +0 -1
  200. package/dist/lib/index.d.ts +0 -76
  201. package/dist/lib/layout/Box.svelte.d.ts +0 -1
  202. package/dist/lib/layout/Sidebar.svelte.d.ts +0 -1
  203. package/dist/lib/layout/SplitPane.svelte.d.ts +0 -1
  204. package/dist/lib/layout/StatusBar.svelte.d.ts +0 -1
  205. package/dist/lib/layout/StatusBarItem.svelte.d.ts +0 -1
  206. package/dist/lib/layout/StatusBarSpacer.svelte.d.ts +0 -1
  207. package/dist/lib/layout/Tabs.svelte.d.ts +0 -1
  208. package/dist/lib/layout/TitleBar.svelte.d.ts +0 -1
  209. package/dist/lib/layout/index.d.ts +0 -9
  210. package/dist/lib/motion/index.d.ts +0 -1
  211. package/dist/lib/overlays/ContextMenu.svelte.d.ts +0 -1
  212. package/dist/lib/overlays/Dialog.svelte.d.ts +0 -1
  213. package/dist/lib/overlays/Menu.svelte.d.ts +0 -1
  214. package/dist/lib/overlays/Popover.svelte.d.ts +0 -1
  215. package/dist/lib/overlays/Toast.svelte.d.ts +0 -1
  216. package/dist/lib/overlays/Tooltip.svelte.d.ts +0 -1
  217. package/dist/lib/overlays/index.d.ts +0 -7
  218. package/dist/lib/primitives/Button.svelte.d.ts +0 -1
  219. package/dist/lib/primitives/ContextMenu.svelte.d.ts +0 -1
  220. package/dist/lib/primitives/Input.svelte.d.ts +0 -1
  221. package/dist/lib/primitives/MarkdownEditor.svelte.d.ts +0 -1
  222. package/dist/lib/primitives/SearchInput.svelte.d.ts +0 -1
  223. package/dist/lib/primitives/Select.svelte.d.ts +0 -1
  224. package/dist/lib/primitives/Text.svelte.d.ts +0 -1
  225. package/dist/lib/primitives/Toggle.svelte.d.ts +0 -1
  226. package/dist/lib/primitives/index.d.ts +0 -9
  227. package/dist/lib/surfaces/ChatPane.svelte.d.ts +0 -1
  228. package/dist/lib/surfaces/GlassPanel.svelte.d.ts +0 -1
  229. package/dist/lib/surfaces/Pane.svelte.d.ts +0 -1
  230. package/dist/lib/surfaces/index.d.ts +0 -4
  231. /package/dist/{lib/app → app}/CanvasBreadcrumb.types.d.ts +0 -0
  232. /package/dist/{lib/app → app}/ChatView.types.d.ts +0 -0
  233. /package/dist/{lib/app → app}/FirstRunWizard.types.d.ts +0 -0
  234. /package/dist/{lib/app → app}/MemorySidebar.types.d.ts +0 -0
  235. /package/dist/{lib/app → app}/ProcedureCanvas.types.d.ts +0 -0
  236. /package/dist/{lib/app → app}/ProcedureEditor.types.d.ts +0 -0
  237. /package/dist/{lib/app → app}/Realm.types.d.ts +0 -0
  238. /package/dist/{lib/app → app}/SemanticConversation.types.d.ts +0 -0
  239. /package/dist/{lib/app → app}/SemanticSearchInput.types.d.ts +0 -0
  240. /package/dist/{lib/app → app}/SettingsPanel.types.d.ts +0 -0
  241. /package/dist/{lib/app → app}/SubCanvas.types.d.ts +0 -0
  242. /package/dist/{lib/app → app}/Sync.types.d.ts +0 -0
  243. /package/dist/{lib/layout → layout}/Tabs.types.d.ts +0 -0
  244. /package/dist/{lib/motion → motion}/spring.d.ts +0 -0
  245. /package/dist/{lib/overlays → overlays}/Menu.types.d.ts +0 -0
  246. /package/dist/{lib/primitives → primitives}/ContextMenu.types.d.ts +0 -0
  247. /package/dist/{lib/primitives → primitives}/MarkdownEditor.types.d.ts +0 -0
  248. /package/dist/{lib/primitives → primitives}/search-input-types.d.ts +0 -0
  249. /package/dist/{lib/surfaces → surfaces}/ChatPane.types.d.ts +0 -0
  250. /package/dist/{lib/useTui.d.ts → useTui.d.ts} +0 -0
@@ -0,0 +1,330 @@
1
+ <!--
2
+ SettingsPanel — Agent settings form: model config and channel setup.
3
+
4
+ Features:
5
+ - Provider URL, API key (masked), model name inputs
6
+ - Channel type selector with token + channel ID inputs
7
+ - Save / Reset buttons
8
+ - onsave callback emits AgentSettings
9
+ -->
10
+ <script lang="ts">
11
+ import { untrack } from "svelte";
12
+ import type { AgentSettings, ChannelType, ModelConfig, ChannelConfig } from "./SettingsPanel.types.js";
13
+
14
+ interface Props {
15
+ /** Initial settings to populate the form. */
16
+ settings?: AgentSettings;
17
+ /** Custom CSS class. */
18
+ class?: string;
19
+ /** Fired when the user saves. */
20
+ onsave?: (settings: AgentSettings) => void;
21
+ }
22
+
23
+ const DEFAULT_MODEL: ModelConfig = { providerUrl: "", apiKey: "", modelName: "" };
24
+ const DEFAULT_CHANNEL: ChannelConfig = { type: "none", token: "", channelId: "" };
25
+
26
+ let { settings, class: className = "", onsave }: Props = $props();
27
+
28
+ // untrack() tells Svelte these are intentional one-time captures of the
29
+ // initial prop value — this is a form that manages its own local state.
30
+ let providerUrl = $state(untrack(() => settings?.model.providerUrl ?? ""));
31
+ let apiKey = $state(untrack(() => settings?.model.apiKey ?? ""));
32
+ let modelName = $state(untrack(() => settings?.model.modelName ?? ""));
33
+
34
+ let channelType = $state<ChannelType>(untrack(() => settings?.channel.type ?? "none"));
35
+ let channelToken = $state(untrack(() => settings?.channel.token ?? ""));
36
+ let channelId = $state(untrack(() => settings?.channel.channelId ?? ""));
37
+
38
+ let showApiKey = $state(false);
39
+
40
+ const CHANNEL_OPTIONS: { value: ChannelType; label: string }[] = [
41
+ { value: "none", label: "None" },
42
+ { value: "discord", label: "Discord" },
43
+ { value: "telegram", label: "Telegram" },
44
+ { value: "slack", label: "Slack" },
45
+ { value: "matrix", label: "Matrix" },
46
+ ];
47
+
48
+ const channelNeedsId = $derived(
49
+ channelType === "discord" || channelType === "slack" || channelType === "matrix",
50
+ );
51
+
52
+ function handleSave() {
53
+ onsave?.({
54
+ model: { providerUrl, apiKey, modelName },
55
+ channel: { type: channelType, token: channelToken, channelId },
56
+ });
57
+ }
58
+
59
+ function handleReset() {
60
+ const r = settings ?? { model: DEFAULT_MODEL, channel: DEFAULT_CHANNEL };
61
+ providerUrl = r.model.providerUrl;
62
+ apiKey = r.model.apiKey;
63
+ modelName = r.model.modelName;
64
+ channelType = r.channel.type;
65
+ channelToken = r.channel.token;
66
+ channelId = r.channel.channelId;
67
+ }
68
+ </script>
69
+
70
+ <section class="settings-panel {className}" aria-label="Agent settings">
71
+ <!-- ── Model Config ── -->
72
+ <div class="settings-panel__section">
73
+ <h3 class="settings-panel__section-title">Model</h3>
74
+
75
+ <label class="settings-panel__field">
76
+ <span class="settings-panel__label">Provider URL</span>
77
+ <input
78
+ class="settings-panel__input"
79
+ type="url"
80
+ placeholder="http://localhost:11434"
81
+ bind:value={providerUrl}
82
+ autocomplete="off"
83
+ spellcheck="false"
84
+ />
85
+ </label>
86
+
87
+ <label class="settings-panel__field">
88
+ <span class="settings-panel__label">API Key</span>
89
+ <div class="settings-panel__input-row">
90
+ <input
91
+ class="settings-panel__input"
92
+ type={showApiKey ? "text" : "password"}
93
+ placeholder="sk-…"
94
+ bind:value={apiKey}
95
+ autocomplete="off"
96
+ />
97
+ <button
98
+ class="settings-panel__toggle-btn"
99
+ type="button"
100
+ onclick={() => (showApiKey = !showApiKey)}
101
+ aria-label={showApiKey ? "Hide API key" : "Show API key"}
102
+ >{showApiKey ? "🙈" : "👁"}</button>
103
+ </div>
104
+ </label>
105
+
106
+ <label class="settings-panel__field">
107
+ <span class="settings-panel__label">Model Name</span>
108
+ <input
109
+ class="settings-panel__input"
110
+ type="text"
111
+ placeholder="llama3.2"
112
+ bind:value={modelName}
113
+ autocomplete="off"
114
+ spellcheck="false"
115
+ />
116
+ </label>
117
+ </div>
118
+
119
+ <!-- ── Channel Setup ── -->
120
+ <div class="settings-panel__section">
121
+ <h3 class="settings-panel__section-title">Channel</h3>
122
+
123
+ <label class="settings-panel__field">
124
+ <span class="settings-panel__label">Type</span>
125
+ <select class="settings-panel__select" bind:value={channelType}>
126
+ {#each CHANNEL_OPTIONS as opt}
127
+ <option value={opt.value}>{opt.label}</option>
128
+ {/each}
129
+ </select>
130
+ </label>
131
+
132
+ {#if channelType !== "none"}
133
+ <label class="settings-panel__field">
134
+ <span class="settings-panel__label">Bot Token</span>
135
+ <input
136
+ class="settings-panel__input"
137
+ type="password"
138
+ placeholder="Token…"
139
+ bind:value={channelToken}
140
+ autocomplete="off"
141
+ />
142
+ </label>
143
+
144
+ {#if channelNeedsId}
145
+ <label class="settings-panel__field">
146
+ <span class="settings-panel__label">Channel ID</span>
147
+ <input
148
+ class="settings-panel__input"
149
+ type="text"
150
+ placeholder="Channel / room ID"
151
+ bind:value={channelId}
152
+ autocomplete="off"
153
+ spellcheck="false"
154
+ />
155
+ </label>
156
+ {/if}
157
+ {/if}
158
+ </div>
159
+
160
+ <!-- ── Actions ── -->
161
+ <div class="settings-panel__actions">
162
+ <button class="settings-panel__btn settings-panel__btn--ghost" type="button" onclick={handleReset}>
163
+ Reset
164
+ </button>
165
+ <button class="settings-panel__btn settings-panel__btn--solid" type="button" onclick={handleSave}>
166
+ Save Settings
167
+ </button>
168
+ </div>
169
+ </section>
170
+
171
+ <style>
172
+ .settings-panel {
173
+ display: flex;
174
+ flex-direction: column;
175
+ gap: var(--space-6, 24px);
176
+ padding: var(--space-6, 24px);
177
+ background: var(--surface-1, #141414);
178
+ color: var(--color-text, #e8e8e8);
179
+ height: 100%;
180
+ overflow-y: auto;
181
+ box-sizing: border-box;
182
+ }
183
+
184
+ /* ── Section ── */
185
+ .settings-panel__section {
186
+ display: flex;
187
+ flex-direction: column;
188
+ gap: var(--space-3, 12px);
189
+ }
190
+
191
+ .settings-panel__section-title {
192
+ margin: 0;
193
+ font-size: var(--text-xs, 12px);
194
+ font-weight: 700;
195
+ text-transform: uppercase;
196
+ letter-spacing: 0.07em;
197
+ color: var(--color-text-muted, #888);
198
+ padding-bottom: var(--space-2, 8px);
199
+ border-bottom: 1px solid var(--color-border, #2a2a2a);
200
+ }
201
+
202
+ /* ── Field ── */
203
+ .settings-panel__field {
204
+ display: flex;
205
+ flex-direction: column;
206
+ gap: var(--space-1, 4px);
207
+ }
208
+
209
+ .settings-panel__label {
210
+ font-size: var(--text-sm, 14px);
211
+ color: var(--color-text-muted, #888);
212
+ font-weight: 500;
213
+ }
214
+
215
+ .settings-panel__input-row {
216
+ display: flex;
217
+ gap: var(--space-2, 8px);
218
+ align-items: center;
219
+ }
220
+
221
+ /* ── Inputs ── */
222
+ .settings-panel__input {
223
+ width: 100%;
224
+ box-sizing: border-box;
225
+ padding: var(--space-2, 8px) var(--space-3, 12px);
226
+ background: var(--surface-2, #1e1e1e);
227
+ border: 1.5px solid var(--color-border, #2a2a2a);
228
+ border-radius: var(--radius-md, 10px);
229
+ color: var(--color-text, #e8e8e8);
230
+ font-family: inherit;
231
+ font-size: var(--text-sm, 14px);
232
+ outline: none;
233
+ transition: border-color 0.15s;
234
+ }
235
+
236
+ .settings-panel__input:focus {
237
+ border-color: var(--color-accent, #6366f1);
238
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-accent, #6366f1) 15%, transparent);
239
+ }
240
+
241
+ .settings-panel__input::placeholder {
242
+ color: var(--color-text-subtle, #555);
243
+ }
244
+
245
+ /* ── Select ── */
246
+ .settings-panel__select {
247
+ width: 100%;
248
+ padding: var(--space-2, 8px) var(--space-3, 12px);
249
+ background: var(--surface-2, #1e1e1e);
250
+ border: 1.5px solid var(--color-border, #2a2a2a);
251
+ border-radius: var(--radius-md, 10px);
252
+ color: var(--color-text, #e8e8e8);
253
+ font-family: inherit;
254
+ font-size: var(--text-sm, 14px);
255
+ outline: none;
256
+ cursor: pointer;
257
+ appearance: none;
258
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1L6 7L11 1' stroke='%23888' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
259
+ background-repeat: no-repeat;
260
+ background-position: right var(--space-3, 12px) center;
261
+ padding-right: 36px;
262
+ transition: border-color 0.15s;
263
+ }
264
+
265
+ .settings-panel__select:focus {
266
+ border-color: var(--color-accent, #6366f1);
267
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-accent, #6366f1) 15%, transparent);
268
+ }
269
+
270
+ .settings-panel__select option {
271
+ background: var(--surface-2, #1e1e1e);
272
+ color: var(--color-text, #e8e8e8);
273
+ }
274
+
275
+ /* ── Toggle show/hide key ── */
276
+ .settings-panel__toggle-btn {
277
+ background: none;
278
+ border: 1.5px solid var(--color-border, #2a2a2a);
279
+ border-radius: var(--radius-md, 10px);
280
+ padding: var(--space-2, 8px) var(--space-2, 8px);
281
+ cursor: pointer;
282
+ font-size: 16px;
283
+ line-height: 1;
284
+ color: var(--color-text-muted, #888);
285
+ transition: border-color 0.15s;
286
+ flex-shrink: 0;
287
+ }
288
+
289
+ .settings-panel__toggle-btn:hover {
290
+ border-color: var(--color-accent, #6366f1);
291
+ }
292
+
293
+ /* ── Actions ── */
294
+ .settings-panel__actions {
295
+ display: flex;
296
+ justify-content: flex-end;
297
+ gap: var(--space-3, 12px);
298
+ padding-top: var(--space-2, 8px);
299
+ border-top: 1px solid var(--color-border, #2a2a2a);
300
+ }
301
+
302
+ .settings-panel__btn {
303
+ padding: var(--space-2, 8px) var(--space-4, 16px);
304
+ border-radius: var(--radius-md, 10px);
305
+ font-family: inherit;
306
+ font-size: var(--text-sm, 14px);
307
+ font-weight: 600;
308
+ cursor: pointer;
309
+ transition: background 0.15s, opacity 0.15s;
310
+ border: none;
311
+ }
312
+
313
+ .settings-panel__btn--solid {
314
+ background: var(--color-accent, #6366f1);
315
+ color: white;
316
+ }
317
+
318
+ .settings-panel__btn--solid:hover { background: var(--color-accent-hover, #818cf8); }
319
+
320
+ .settings-panel__btn--ghost {
321
+ background: transparent;
322
+ color: var(--color-text-muted, #888);
323
+ border: 1.5px solid var(--color-border, #2a2a2a);
324
+ }
325
+
326
+ .settings-panel__btn--ghost:hover {
327
+ background: var(--alpha-10, rgba(255,255,255,0.1));
328
+ color: var(--color-text, #e8e8e8);
329
+ }
330
+ </style>
@@ -0,0 +1,12 @@
1
+ import type { AgentSettings } from "./SettingsPanel.types.js";
2
+ interface Props {
3
+ /** Initial settings to populate the form. */
4
+ settings?: AgentSettings;
5
+ /** Custom CSS class. */
6
+ class?: string;
7
+ /** Fired when the user saves. */
8
+ onsave?: (settings: AgentSettings) => void;
9
+ }
10
+ declare const SettingsPanel: import("svelte").Component<Props, {}, "">;
11
+ type SettingsPanel = ReturnType<typeof SettingsPanel>;
12
+ export default SettingsPanel;
@@ -0,0 +1 @@
1
+ export {};