@stephen-netu/design-system 0.2.2 → 0.5.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 (229) hide show
  1. package/dist/d0-data-viz/BarChart.test.js +53 -0
  2. package/dist/d0-data-viz/CheckpointBar.test.js +83 -0
  3. package/dist/d0-data-viz/CheckpointPill.svelte +1 -1
  4. package/dist/d0-data-viz/CheckpointPill.test.js +78 -0
  5. package/dist/d0-data-viz/ConnectionHealth.test.js +70 -0
  6. package/dist/d0-data-viz/MetricCard.test.js +57 -0
  7. package/dist/d0-data-viz/SparkLine.test.js +47 -0
  8. package/dist/d0-data-viz/StorageMap.test.js +63 -0
  9. package/dist/d0-data-viz/Timeline.test.js +62 -0
  10. package/dist/d0-data-viz/WorldLineTimeline.test.js +99 -0
  11. package/dist/d0-data-viz/checkpoint-types.js +1 -1
  12. package/dist/d0-data-viz/storage-map-types.d.ts.map +1 -1
  13. package/dist/d0-data-viz/storage-map-types.js +6 -3
  14. package/dist/d0-data-viz/theme-integration.js +1 -1
  15. package/dist/demos/AmbientPrimitivesDemo.svelte +103 -0
  16. package/dist/demos/AmbientPrimitivesDemo.svelte.d.ts +5 -0
  17. package/dist/demos/AmbientPrimitivesDemo.svelte.d.ts.map +1 -0
  18. package/dist/demos/NodepadBlocksShowcase.svelte +2 -1
  19. package/dist/demos/NodepadBlocksShowcase.svelte.d.ts.map +1 -1
  20. package/dist/demos/index.d.ts +1 -0
  21. package/dist/demos/index.d.ts.map +1 -1
  22. package/dist/demos/index.js +1 -0
  23. package/dist/editor/CodeEditor.svelte +83 -26
  24. package/dist/editor/CodeEditor.svelte.d.ts +0 -1
  25. package/dist/editor/CodeEditor.svelte.d.ts.map +1 -1
  26. package/dist/editor/ExternalChangeDialog.svelte +117 -0
  27. package/dist/editor/ExternalChangeDialog.svelte.d.ts +13 -0
  28. package/dist/editor/ExternalChangeDialog.svelte.d.ts.map +1 -0
  29. package/dist/editor/MarkdownEditor.svelte +104 -617
  30. package/dist/editor/MarkdownEditor.svelte.d.ts +1 -1
  31. package/dist/editor/MarkdownEditor.svelte.d.ts.map +1 -1
  32. package/dist/editor/codemirror-config.d.ts +36 -0
  33. package/dist/editor/codemirror-config.d.ts.map +1 -0
  34. package/dist/editor/codemirror-config.js +87 -0
  35. package/dist/editor/components/CorrectionTooltip.svelte +180 -159
  36. package/dist/editor/components/CorrectionTooltip.svelte.d.ts +7 -23
  37. package/dist/editor/components/CorrectionTooltip.svelte.d.ts.map +1 -1
  38. package/dist/editor/extensions/autocomplete.d.ts +2 -2
  39. package/dist/editor/extensions/autocomplete.d.ts.map +1 -1
  40. package/dist/editor/extensions/autocomplete.test.js +121 -0
  41. package/dist/editor/extensions/spellcheck.d.ts +21 -3
  42. package/dist/editor/extensions/spellcheck.d.ts.map +1 -1
  43. package/dist/editor/extensions/spellcheck.js +51 -9
  44. package/dist/editor/extensions/spellcheck.test.js +168 -0
  45. package/dist/editor/extensions/types.d.ts +2 -1
  46. package/dist/editor/extensions/types.d.ts.map +1 -1
  47. package/dist/editor/index.d.ts +2 -1
  48. package/dist/editor/index.d.ts.map +1 -1
  49. package/dist/editor/index.js +1 -0
  50. package/dist/editor/markdown-preview.d.ts +9 -0
  51. package/dist/editor/markdown-preview.d.ts.map +1 -0
  52. package/dist/editor/markdown-preview.js +19 -0
  53. package/dist/editor/markdown-preview.test.js +38 -0
  54. package/dist/editor/useCodeMirror.d.ts +23 -0
  55. package/dist/editor/useCodeMirror.d.ts.map +1 -0
  56. package/dist/editor/useCodeMirror.js +40 -0
  57. package/dist/editor/useFilePersistence.d.ts +32 -0
  58. package/dist/editor/useFilePersistence.d.ts.map +1 -0
  59. package/dist/editor/useFilePersistence.js +117 -0
  60. package/dist/fabric/ai/ChatPanel.svelte +61 -62
  61. package/dist/fabric/ai/ChatPanel.svelte.d.ts.map +1 -1
  62. package/dist/fabric/ai/ResearchPanel.svelte +31 -24
  63. package/dist/fabric/data/FileTree.svelte +195 -0
  64. package/dist/fabric/data/FileTree.svelte.d.ts +19 -0
  65. package/dist/fabric/data/FileTree.svelte.d.ts.map +1 -0
  66. package/dist/fabric/data/FileTree.test.js +127 -0
  67. package/dist/fabric/data/index.d.ts +5 -9
  68. package/dist/fabric/data/index.d.ts.map +1 -1
  69. package/dist/fabric/data/index.js +4 -1
  70. package/dist/fabric/index.d.ts +1 -0
  71. package/dist/fabric/index.d.ts.map +1 -1
  72. package/dist/fabric/index.js +2 -0
  73. package/dist/fabric/input/KeyboardShortcuts.svelte +23 -21
  74. package/dist/fabric/layout/CollapsiblePanel.svelte +8 -10
  75. package/dist/fabric/navigation/ActivityRail.svelte +3 -5
  76. package/dist/fabric/navigation/ActivityRail.svelte.d.ts.map +1 -1
  77. package/dist/g0-generative/components/Text.svelte +38 -0
  78. package/dist/g0-generative/components/Text.svelte.d.ts +9 -0
  79. package/dist/g0-generative/components/Text.svelte.d.ts.map +1 -0
  80. package/dist/g0-generative/index.d.ts +1 -0
  81. package/dist/g0-generative/index.d.ts.map +1 -1
  82. package/dist/g0-generative/index.js +1 -0
  83. package/dist/g0-generative/library/ComponentLibrary.d.ts +4 -0
  84. package/dist/g0-generative/library/ComponentLibrary.d.ts.map +1 -1
  85. package/dist/g0-generative/library/ComponentLibrary.js +10 -0
  86. package/dist/g0-generative/library/ComponentLibrary.test.js +135 -0
  87. package/dist/g0-generative/renderer/OpenUIRenderer.svelte +16 -56
  88. package/dist/g0-generative/renderer/OpenUIRenderer.svelte.d.ts.map +1 -1
  89. package/dist/g0-generative/renderer/OpenUIRenderer.test.js +143 -0
  90. package/dist/g0-geo/SovereignMap.svelte +13 -13
  91. package/dist/g0-geo/SovereignMap.svelte.d.ts.map +1 -1
  92. package/dist/index.d.ts +0 -1
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +3 -1
  95. package/dist/l0-layout/block-writer/BlockContent.svelte +23 -22
  96. package/dist/l0-layout/block-writer/BlockContent.svelte.d.ts.map +1 -1
  97. package/dist/l0-layout/block-writer/BlockContent.test.js +47 -0
  98. package/dist/l0-layout/block-writer/markdown.js +11 -11
  99. package/dist/l0-layout/block-writer/markdown.test.js +81 -0
  100. package/dist/l0-layout/card/StackedCard.svelte +87 -0
  101. package/dist/l0-layout/card/StackedCard.svelte.d.ts +9 -0
  102. package/dist/l0-layout/card/StackedCard.svelte.d.ts.map +1 -0
  103. package/dist/l0-layout/card/StackedCard.test.js +29 -0
  104. package/dist/l0-layout/index.d.ts +1 -0
  105. package/dist/l0-layout/index.d.ts.map +1 -1
  106. package/dist/l0-layout/index.js +1 -0
  107. package/dist/l0-layout/kanban/KanbanBoard.svelte +1 -1
  108. package/dist/l0-layout/kanban/KanbanColumn.svelte +1 -1
  109. package/dist/n1-flow-canvas/FlowCanvas.svelte +50 -6
  110. package/dist/n1-flow-canvas/FlowCanvas.svelte.d.ts.map +1 -1
  111. package/dist/n1-flow-canvas/index.d.ts +2 -0
  112. package/dist/n1-flow-canvas/index.d.ts.map +1 -1
  113. package/dist/n1-flow-canvas/index.js +1 -0
  114. package/dist/n1-flow-canvas/pipeline-adapter.d.ts +37 -0
  115. package/dist/n1-flow-canvas/pipeline-adapter.d.ts.map +1 -0
  116. package/dist/n1-flow-canvas/pipeline-adapter.js +160 -0
  117. package/dist/n2-manifold-disk/ManifoldDisk.svelte +62 -35
  118. package/dist/n2-manifold-disk/ManifoldDisk.svelte.d.ts.map +1 -1
  119. package/dist/n4-adaptive-manifold/AdaptiveManifold.svelte +23 -19
  120. package/dist/n4-adaptive-manifold/AdaptiveManifold.svelte.d.ts.map +1 -1
  121. package/dist/n4-adaptive-manifold/types.d.ts +3 -0
  122. package/dist/n4-adaptive-manifold/types.d.ts.map +1 -1
  123. package/dist/p0-primitives/ThemeProvider.svelte +28 -7
  124. package/dist/p0-primitives/ThemeProvider.svelte.d.ts +5 -0
  125. package/dist/p0-primitives/ThemeProvider.svelte.d.ts.map +1 -1
  126. package/dist/p0-primitives/canvas-theme.d.ts +21 -1
  127. package/dist/p0-primitives/canvas-theme.d.ts.map +1 -1
  128. package/dist/p0-primitives/canvas-theme.js +78 -23
  129. package/dist/p0-primitives/debug.d.ts +6 -0
  130. package/dist/p0-primitives/debug.d.ts.map +1 -0
  131. package/dist/p0-primitives/debug.js +21 -0
  132. package/dist/p0-primitives/theme.d.ts.map +1 -1
  133. package/dist/p0-primitives/theme.js +11 -31
  134. package/dist/p0-primitives/tokens/ambient.css +76 -0
  135. package/dist/p0-primitives/tokens/tokens.css +124 -29
  136. package/dist/p0-primitives/utils/index.d.ts +2 -0
  137. package/dist/p0-primitives/utils/index.d.ts.map +1 -1
  138. package/dist/p0-primitives/utils/index.js +1 -0
  139. package/dist/p0-primitives/utils/reveal.d.ts +15 -0
  140. package/dist/p0-primitives/utils/reveal.d.ts.map +1 -0
  141. package/dist/p0-primitives/utils/reveal.js +29 -0
  142. package/dist/p0-primitives/utils/reveal.test.js +95 -0
  143. package/dist/s0-state/SyncStatus.svelte +1 -1
  144. package/dist/s0-state/index.d.ts +2 -1
  145. package/dist/s0-state/index.d.ts.map +1 -1
  146. package/dist/s0-state/index.js +2 -0
  147. package/dist/s0-state/modal-stack-store.svelte.d.ts +3 -3
  148. package/dist/s0-state/modal-stack-store.svelte.js +2 -2
  149. package/dist/spatial/ForceSimulation.svelte.js +1 -1
  150. package/dist/spatial/ParticleAssembleMark.svelte +285 -0
  151. package/dist/spatial/ParticleAssembleMark.svelte.d.ts +24 -0
  152. package/dist/spatial/ParticleAssembleMark.svelte.d.ts.map +1 -0
  153. package/dist/spatial/ZoneTiler.test.js +90 -0
  154. package/dist/spatial/index.js +1 -0
  155. package/dist/spatial/particle-assemble-math.d.ts +22 -0
  156. package/dist/spatial/particle-assemble-math.d.ts.map +1 -0
  157. package/dist/spatial/particle-assemble-math.js +26 -0
  158. package/dist/spatial/particle-assemble-math.test.js +56 -0
  159. package/dist/t0-transport/substrate.svelte.d.ts.map +1 -1
  160. package/dist/t0-transport/substrate.svelte.js +10 -4
  161. package/dist/u0-primitives/LockIndicator.svelte +16 -14
  162. package/dist/u0-primitives/VerticalToolbar.svelte +24 -21
  163. package/dist/u0-primitives/accordion/Accordion.svelte +8 -7
  164. package/dist/u0-primitives/animated-icon/AnimatedIcon.svelte +3 -3
  165. package/dist/u0-primitives/animated-icon/AnimatedIcon.test.js +82 -0
  166. package/dist/u0-primitives/avatar/Avatar.svelte +14 -14
  167. package/dist/u0-primitives/avatar/Avatar.test.js +81 -0
  168. package/dist/u0-primitives/badge/Badge.svelte +6 -4
  169. package/dist/u0-primitives/badge/ValidityBadge.svelte +4 -27
  170. package/dist/u0-primitives/button/Button.svelte +15 -12
  171. package/dist/u0-primitives/card/Card.svelte +37 -15
  172. package/dist/u0-primitives/card/Card.test.js +86 -0
  173. package/dist/u0-primitives/command-palette/CommandPalette.svelte +48 -43
  174. package/dist/u0-primitives/command-palette/CommandPalette.test.js +202 -0
  175. package/dist/u0-primitives/dropdown/Dropdown.svelte +20 -25
  176. package/dist/u0-primitives/grant-badge/GrantStatusBadge.svelte +2 -2
  177. package/dist/u0-primitives/index.d.ts +6 -0
  178. package/dist/u0-primitives/index.d.ts.map +1 -1
  179. package/dist/u0-primitives/index.js +8 -0
  180. package/dist/u0-primitives/input/Input.svelte +77 -24
  181. package/dist/u0-primitives/input/Input.svelte.d.ts +2 -10
  182. package/dist/u0-primitives/input/Input.svelte.d.ts.map +1 -1
  183. package/dist/u0-primitives/input/Input.test.js +81 -1
  184. package/dist/u0-primitives/live-dot/LiveDot.svelte +56 -0
  185. package/dist/u0-primitives/live-dot/LiveDot.svelte.d.ts +11 -0
  186. package/dist/u0-primitives/live-dot/LiveDot.svelte.d.ts.map +1 -0
  187. package/dist/u0-primitives/live-dot/LiveDot.test.js +41 -0
  188. package/dist/u0-primitives/live-dot/index.d.ts +3 -0
  189. package/dist/u0-primitives/live-dot/index.d.ts.map +1 -0
  190. package/dist/u0-primitives/live-dot/index.js +1 -0
  191. package/dist/u0-primitives/modal/Modal.svelte +22 -19
  192. package/dist/u0-primitives/modal/Modal.test.js +1 -1
  193. package/dist/u0-primitives/spinner/Spinner.svelte +11 -79
  194. package/dist/u0-primitives/spinner/Spinner.svelte.d.ts.map +1 -1
  195. package/dist/u0-primitives/steps/Steps.svelte +18 -19
  196. package/dist/u0-primitives/surface-state/SurfaceState.svelte +7 -7
  197. package/dist/u0-primitives/tabs/Tabs.svelte +13 -11
  198. package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.svelte +94 -0
  199. package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.svelte.d.ts +16 -0
  200. package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.svelte.d.ts.map +1 -0
  201. package/dist/u0-primitives/theme-swatch-group/ThemeSwatchGroup.test.js +48 -0
  202. package/dist/u0-primitives/theme-swatch-group/index.d.ts +3 -0
  203. package/dist/u0-primitives/theme-swatch-group/index.d.ts.map +1 -0
  204. package/dist/u0-primitives/theme-swatch-group/index.js +1 -0
  205. package/dist/u0-primitives/toggle/Toggle.svelte +10 -11
  206. package/dist/u0-primitives/tooltip/Tooltip.svelte +9 -9
  207. package/dist/u0-primitives/web-components/button-component.d.ts +5 -1
  208. package/dist/u0-primitives/web-components/button-component.d.ts.map +1 -1
  209. package/dist/u0-primitives/web-components/button-component.js +72 -33
  210. package/dist/u0-primitives/web-components/index.d.ts +3 -0
  211. package/dist/u0-primitives/web-components/index.d.ts.map +1 -0
  212. package/dist/u0-primitives/web-components/index.js +2 -0
  213. package/dist/u0-primitives/web-components/input-component.d.ts +5 -1
  214. package/dist/u0-primitives/web-components/input-component.d.ts.map +1 -1
  215. package/dist/u0-primitives/web-components/input-component.js +56 -39
  216. package/dist/u0-primitives/web-components/web-components.test.js +96 -0
  217. package/dist/u0-primitives/window-frame/WindowFrame.svelte +87 -0
  218. package/dist/u0-primitives/window-frame/WindowFrame.svelte.d.ts +10 -0
  219. package/dist/u0-primitives/window-frame/WindowFrame.svelte.d.ts.map +1 -0
  220. package/dist/u0-primitives/window-frame/WindowFrame.test.js +31 -0
  221. package/dist/u0-primitives/window-frame/index.d.ts +3 -0
  222. package/dist/u0-primitives/window-frame/index.d.ts.map +1 -0
  223. package/dist/u0-primitives/window-frame/index.js +1 -0
  224. package/dist/x0-enchanted-blocks/components/NodepadBlock.svelte +11 -2
  225. package/dist/x0-enchanted-blocks/components/NodepadBlock.svelte.d.ts.map +1 -1
  226. package/package.json +44 -28
  227. package/src/p0-primitives/tokens/ambient.css +76 -0
  228. package/src/p0-primitives/tokens/tokens.css +124 -29
  229. package/src/p0-primitives/tokens/tokens.json +42 -24
@@ -0,0 +1,117 @@
1
+ import { getMtimeMs, isTauri, readTextFile, writeTextFile } from '../t0-transport/fs';
2
+ export function useFilePersistence(options) {
3
+ const persistenceAvailable = isTauri();
4
+ let interval = null;
5
+ let focusHandler = null;
6
+ async function refreshLastKnownMtime() {
7
+ const filePath = options.getFilePath();
8
+ if (!filePath || !persistenceAvailable)
9
+ return;
10
+ try {
11
+ options.setLastKnownMtimeMs(await getMtimeMs(filePath));
12
+ }
13
+ catch {
14
+ return;
15
+ }
16
+ }
17
+ async function checkExternalChanges() {
18
+ const filePath = options.getFilePath();
19
+ if (!filePath || !persistenceAvailable || options.getIsCheckingExternalChanges() || options.getShowExternalChangeDialog() || !options.getIsDirty()) {
20
+ return;
21
+ }
22
+ options.setIsCheckingExternalChanges(true);
23
+ try {
24
+ const mtime = await getMtimeMs(filePath);
25
+ const lastKnownMtimeMs = options.getLastKnownMtimeMs();
26
+ if (mtime !== null && lastKnownMtimeMs !== null && mtime > lastKnownMtimeMs) {
27
+ options.setShowExternalChangeDialog(true);
28
+ }
29
+ }
30
+ catch (err) {
31
+ console.debug('External change check failed:', err);
32
+ }
33
+ finally {
34
+ options.setIsCheckingExternalChanges(false);
35
+ }
36
+ }
37
+ async function saveContent() {
38
+ const filePath = options.getFilePath();
39
+ if (!options.getIsDirty() || options.getIsSaving() || !filePath || !persistenceAvailable)
40
+ return;
41
+ options.setIsSaving(true);
42
+ options.setSaveError(null);
43
+ try {
44
+ await writeTextFile(filePath, options.getContent());
45
+ options.setIsDirty(false);
46
+ options.onSave?.();
47
+ await refreshLastKnownMtime();
48
+ }
49
+ catch (err) {
50
+ options.setSaveError(err instanceof Error ? err.message : String(err));
51
+ console.error('Failed to save file:', err);
52
+ }
53
+ finally {
54
+ options.setIsSaving(false);
55
+ }
56
+ }
57
+ async function reloadFromDisk() {
58
+ const filePath = options.getFilePath();
59
+ if (!filePath)
60
+ return;
61
+ try {
62
+ const newContent = await readTextFile(filePath);
63
+ const view = options.getEditorView();
64
+ if (view) {
65
+ view.dispatch({ changes: { from: 0, to: view.state.doc.length, insert: newContent } });
66
+ }
67
+ options.setContent(newContent);
68
+ options.setIsDirty(false);
69
+ options.setSaveError(null);
70
+ options.onExternalChange?.(newContent);
71
+ options.onChange?.(newContent);
72
+ await refreshLastKnownMtime();
73
+ }
74
+ catch (err) {
75
+ console.error('Failed to reload file:', err);
76
+ options.setSaveError(err instanceof Error ? err.message : 'Failed to reload file');
77
+ }
78
+ finally {
79
+ options.setShowExternalChangeDialog(false);
80
+ }
81
+ }
82
+ function keepCurrent() {
83
+ options.setShowExternalChangeDialog(false);
84
+ options.setIsDirty(true);
85
+ }
86
+ function startExternalChangeMonitoring() {
87
+ if (!persistenceAvailable)
88
+ return () => { };
89
+ const filePath = options.getFilePath();
90
+ if (filePath) {
91
+ getMtimeMs(filePath).then((m) => options.setLastKnownMtimeMs(m)).catch(() => { });
92
+ }
93
+ interval = setInterval(() => { void checkExternalChanges(); }, 2000);
94
+ focusHandler = () => { void checkExternalChanges(); };
95
+ window.addEventListener('focus', focusHandler);
96
+ return stopExternalChangeMonitoring;
97
+ }
98
+ function stopExternalChangeMonitoring() {
99
+ if (interval) {
100
+ clearInterval(interval);
101
+ interval = null;
102
+ }
103
+ if (focusHandler) {
104
+ window.removeEventListener('focus', focusHandler);
105
+ focusHandler = null;
106
+ }
107
+ }
108
+ return {
109
+ persistenceAvailable,
110
+ startExternalChangeMonitoring,
111
+ stopExternalChangeMonitoring,
112
+ checkExternalChanges,
113
+ saveContent,
114
+ reloadFromDisk,
115
+ keepCurrent
116
+ };
117
+ }
@@ -260,7 +260,8 @@
260
260
  </div>
261
261
  </div>
262
262
 
263
- <style>
263
+ <!-- svelte-ignore css_unused_selector -->
264
+ <style>
264
265
  .chat-panel {
265
266
  display: flex;
266
267
  flex-direction: column;
@@ -292,15 +293,15 @@
292
293
  padding: 6px;
293
294
  background: transparent;
294
295
  border: none;
295
- border-radius: var(--radius-sm, 4px);
296
+ border-radius: 0;
296
297
  color: var(--color-text-tertiary, #6b6b6b);
297
298
  cursor: pointer;
298
- transition: all 0.15s ease;
299
+ transition: color var(--transition-fast, 110ms) linear, background var(--transition-fast, 110ms) linear;
299
300
  }
300
301
 
301
302
  .clear-btn:hover {
302
- background: var(--border-subtle, #2a2a2a);
303
- color: var(--color-error, #ef4444);
303
+ background: var(--border-subtle, #262b30);
304
+ color: var(--color-error, #c14a4a);
304
305
  }
305
306
 
306
307
  .messages-container {
@@ -353,58 +354,59 @@
353
354
  }
354
355
 
355
356
  .message-bubble {
356
- padding: 10px 14px;
357
- border-radius: var(--radius-xl, 12px);
358
- font-size: 13px;
359
- line-height: 1.5;
357
+ padding: var(--ui-pad-y, 5px) var(--ui-pad-x, 8px);
358
+ font-size: var(--ui-font, 13px);
359
+ line-height: var(--ui-leading, 1.35);
360
360
  }
361
361
 
362
+ /* User bubble: accent-subtle bg + live edge. Accent fill (subtle) justified:
363
+ this is a sender-identity readout, same logic as toggle thumb. */
362
364
  .message.user .message-bubble {
363
- background: var(--color-accent);
364
- color: white;
365
- border-bottom-right-radius: 4px;
365
+ background: var(--color-accent-subtle);
366
+ color: var(--color-text-primary);
367
+ box-shadow: inset -2px 0 0 var(--color-accent);
366
368
  }
367
369
 
368
370
  .message.assistant .message-bubble {
369
- background: var(--color-bg-panel-elevated, #252525);
370
- color: var(--color-text-primary, #e0e0e0);
371
- border: 1px solid var(--border-subtle, #2a2a2a);
372
- border-bottom-left-radius: 4px;
371
+ background: var(--color-bg-panel-elevated, #1c2024);
372
+ color: var(--color-text-primary);
373
+ border: 1px solid var(--border-default, #262b30);
374
+ box-shadow: inset 2px 0 0 var(--border-default);
373
375
  }
374
376
 
375
- .message-content :global(h1),
376
- .message-content :global(h2),
377
- .message-content :global(h3) {
377
+ .message-content h1,
378
+ .message-content h2,
379
+ .message-content h3 {
378
380
  font-size: 14px;
379
381
  margin: 8px 0 4px 0;
380
382
  }
381
383
 
382
- .message-content :global(p) {
384
+ .message-content p {
383
385
  margin: 0 0 4px 0;
384
386
  }
385
387
 
386
- .message-content :global(code) {
388
+ .message-content code {
387
389
  background: rgba(0, 0, 0, 0.2);
388
390
  padding: 2px 4px;
389
- border-radius: var(--radius-sm, 3px);
391
+ border-radius: 0;
390
392
  font-family: var(--font-mono, 'JetBrains Mono', monospace);
391
393
  font-size: 0.9em;
392
394
  }
393
395
 
394
- .message-content :global(pre) {
396
+ .message-content pre {
395
397
  background: rgba(0, 0, 0, 0.3);
396
398
  padding: 8px;
397
- border-radius: var(--radius-md, 6px);
399
+ border-radius: 0;
398
400
  overflow-x: auto;
399
401
  margin: 4px 0;
400
402
  }
401
403
 
402
- .message-content :global(pre code) {
404
+ .message-content pre code {
403
405
  background: none;
404
406
  padding: 0;
405
407
  }
406
408
 
407
- .message-content :global(ul) {
409
+ .message-content ul {
408
410
  margin: 4px 0;
409
411
  padding-left: 20px;
410
412
  }
@@ -437,20 +439,21 @@
437
439
  display: inline-flex;
438
440
  align-items: center;
439
441
  gap: var(--space-1);
440
- padding: 4px 8px;
442
+ padding: 2px 6px;
441
443
  background: var(--color-accent-subtle);
442
- border: 1px solid var(--color-accent);
443
- border-radius: var(--radius-xl, 12px);
444
+ border: 1px solid var(--color-accent-muted);
444
445
  color: var(--color-accent);
445
- font-size: 11px;
446
+ font-family: var(--font-mono);
447
+ font-size: var(--ui-label, 9px);
448
+ letter-spacing: 0.05em;
446
449
  cursor: pointer;
447
- transition: all 0.15s ease;
450
+ transition: background var(--transition-fast, 110ms) linear, box-shadow var(--transition-fast, 110ms) linear;
448
451
  max-width: 150px;
449
452
  }
450
453
 
451
454
  .citation-chip:hover {
452
- background: var(--color-accent);
453
- color: white;
455
+ background: var(--color-accent-muted);
456
+ box-shadow: inset 2px 0 0 var(--color-accent);
454
457
  }
455
458
 
456
459
  .citation-source {
@@ -467,28 +470,26 @@
467
470
  .citation-popover {
468
471
  display: none;
469
472
  position: absolute;
470
- bottom: calc(100% + 8px);
473
+ bottom: calc(100% + 6px);
471
474
  left: 50%;
472
475
  transform: translateX(-50%);
473
476
  width: 220px;
474
- padding: 10px 12px;
475
- background: var(--color-bg-panel-elevated, #252525);
476
- border: 1px solid var(--border-subtle, #2a2a2a);
477
- border-left: 3px solid var(--color-accent);
478
- border-radius: var(--radius-md, 6px);
479
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
477
+ padding: var(--ui-pad-y, 5px) var(--ui-pad-x, 8px);
478
+ background: var(--color-bg-panel-elevated, #1c2024);
479
+ border: 1px solid var(--border-default, #262b30);
480
+ border-left: 2px solid var(--color-accent);
480
481
  z-index: 10;
481
482
  pointer-events: none;
482
483
  }
483
484
 
484
485
  .citation-wrapper:hover .citation-popover {
485
486
  display: block;
486
- animation: popover-fade 0.15s ease-out;
487
+ animation: popover-fade var(--transition-fast, 110ms) linear;
487
488
  }
488
489
 
489
490
  @keyframes popover-fade {
490
- from { opacity: 0; transform: translateX(-50%) translateY(4px); }
491
- to { opacity: 1; transform: translateX(-50%) translateY(0); }
491
+ from { opacity: 0; }
492
+ to { opacity: 1; }
492
493
  }
493
494
 
494
495
  .citation-snippet {
@@ -506,13 +507,12 @@
506
507
  }
507
508
 
508
509
  .error-message {
509
- padding: 10px 14px;
510
- background: var(--color-error-bg, rgba(239, 68, 68, 0.1));
511
- border: 1px solid var(--color-error, #ef4444);
512
- border-radius: var(--radius-lg, 8px);
513
- color: var(--color-error, #ef4444);
514
- font-size: 13px;
515
- margin-top: 8px;
510
+ padding: var(--ui-pad-y, 5px) var(--ui-pad-x, 8px);
511
+ background: var(--color-error-bg, rgba(193, 74, 74, 0.1));
512
+ border: 1px solid var(--color-error, #c14a4a);
513
+ color: var(--color-error, #c14a4a);
514
+ font-size: var(--ui-font, 13px);
515
+ margin-top: 6px;
516
516
  }
517
517
 
518
518
  .input-container {
@@ -532,7 +532,7 @@
532
532
  padding: 10px 14px;
533
533
  background: var(--color-bg-panel-elevated, #252525);
534
534
  border: 1px solid var(--border-subtle, #2a2a2a);
535
- border-radius: var(--radius-xl, 20px);
535
+ border-radius: 0;
536
536
  color: var(--color-text-primary, #e0e0e0);
537
537
  font-size: 13px;
538
538
  outline: none;
@@ -552,25 +552,24 @@
552
552
  cursor: not-allowed;
553
553
  }
554
554
 
555
+ /* Send button: accent fill justified — submit = functional state (action, not decoration) */
555
556
  .send-btn {
556
557
  display: flex;
557
558
  align-items: center;
558
559
  justify-content: center;
559
- width: 36px;
560
- height: 36px;
560
+ width: var(--ui-control-h, 24px);
561
+ height: var(--ui-control-h, 24px);
561
562
  padding: 0;
562
563
  background: var(--color-accent);
563
564
  border: none;
564
- border-radius: 50%;
565
- color: white;
565
+ color: var(--color-bg-app, #0a0b0c);
566
566
  cursor: pointer;
567
- transition: all 0.15s ease;
567
+ transition: background var(--transition-fast, 110ms) linear;
568
568
  flex-shrink: 0;
569
569
  }
570
570
 
571
571
  .send-btn:hover:not(:disabled) {
572
- background: var(--color-accent-hover, #c9894f);
573
- transform: scale(1.05);
572
+ background: var(--color-accent-hover);
574
573
  }
575
574
 
576
575
  .send-btn:disabled {
@@ -634,15 +633,15 @@
634
633
  padding: 4px;
635
634
  background: transparent;
636
635
  border: none;
637
- border-radius: var(--radius-sm, 4px);
636
+ border-radius: 0;
638
637
  color: var(--color-text-tertiary, #6b6b6b);
639
638
  cursor: pointer;
640
- transition: all 0.15s ease;
639
+ transition: color var(--transition-fast, 110ms) linear, background var(--transition-fast, 110ms) linear;
641
640
  flex-shrink: 0;
642
641
  }
643
642
 
644
643
  .clear-context-btn:hover {
645
- background: var(--border-subtle, #2a2a2a);
646
- color: var(--color-error, #ef4444);
644
+ background: var(--border-subtle, #262b30);
645
+ color: var(--color-error, #c14a4a);
647
646
  }
648
647
  </style>
@@ -1 +1 @@
1
- {"version":3,"file":"ChatPanel.svelte.d.ts","sourceRoot":"","sources":["../../../src/fabric/ai/ChatPanel.svelte.ts"],"names":[],"mappings":"AAgBE,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,UAAU,KAAK;IAEb,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAGrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAG3C,WAAW,CAAC,EAAE,OAAO,QAAQ,EAAE,OAAO,CAAC;IAGvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA0LH,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"ChatPanel.svelte.d.ts","sourceRoot":"","sources":["../../../src/fabric/ai/ChatPanel.svelte.ts"],"names":[],"mappings":"AAgBE,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,UAAU,KAAK;IAEb,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAGrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAG3C,WAAW,CAAC,EAAE,OAAO,QAAQ,EAAE,OAAO,CAAC;IAGvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA2LH,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -298,9 +298,8 @@
298
298
  display: flex;
299
299
  flex-direction: column;
300
300
  height: 100%;
301
- background: var(--color-bg-panel, #222222);
302
- border: 1px solid var(--border-subtle, rgba(255,255,255,0.06));
303
- border-radius: var(--radius-md, 0.5rem);
301
+ background: var(--color-bg-panel, #181c20);
302
+ border: 1px solid var(--border-default, #262b30);
304
303
  overflow: hidden;
305
304
  }
306
305
 
@@ -324,7 +323,7 @@
324
323
  gap: var(--space-1);
325
324
  background: var(--color-bg-canvas, #1a1a1a);
326
325
  padding: 2px;
327
- border-radius: var(--radius-sm, 0.25rem);
326
+ border-radius: 0;
328
327
  }
329
328
 
330
329
  .mode-btn {
@@ -334,13 +333,15 @@
334
333
  border: none;
335
334
  color: var(--color-text-secondary, #a09880);
336
335
  cursor: pointer;
337
- border-radius: var(--radius-sm, 0.25rem);
338
- transition: all 0.15s;
336
+ border-radius: 0;
337
+ transition: background var(--transition-fast, 110ms) linear, color var(--transition-fast, 110ms) linear;
339
338
  }
340
339
 
340
+ /* Active mode fill justified — mode selection is a functional state readout */
341
341
  .mode-btn.active {
342
- background: var(--color-accent, var(--color-accent));
343
- color: var(--color-text-primary, #f2efe9);
342
+ background: var(--color-accent-subtle);
343
+ color: var(--color-text-primary);
344
+ box-shadow: inset 0 -2px 0 var(--color-accent);
344
345
  }
345
346
 
346
347
  .query-form {
@@ -356,7 +357,7 @@
356
357
  padding: 8px 12px;
357
358
  background: var(--color-bg-canvas, #1a1a1a);
358
359
  border: 1px solid var(--border-subtle, rgba(255,255,255,0.06));
359
- border-radius: var(--radius-sm, 0.25rem);
360
+ border-radius: 0;
360
361
  color: var(--color-text-primary, #f2efe9);
361
362
  font-size: 14px;
362
363
  outline: none;
@@ -387,7 +388,7 @@
387
388
  border: none;
388
389
  color: var(--color-text-secondary, #a09880);
389
390
  cursor: pointer;
390
- border-radius: var(--radius-sm, 0.25rem);
391
+ border-radius: 0;
391
392
  }
392
393
 
393
394
  .clear-btn:hover {
@@ -404,7 +405,7 @@
404
405
  .result-card {
405
406
  padding: 12px;
406
407
  background: var(--color-bg-canvas, #1a1a1a);
407
- border-radius: var(--radius-sm, 0.25rem);
408
+ border-radius: 0;
408
409
  }
409
410
 
410
411
  .result-header {
@@ -456,19 +457,22 @@
456
457
 
457
458
  .credibility {
458
459
  padding: 1px 6px;
459
- border-radius: var(--radius-sm, 0.25rem);
460
- background: rgba(229, 57, 53, 0.2);
461
- color: #e53935;
460
+ font-family: var(--font-mono);
461
+ font-size: var(--ui-label, 9px);
462
+ letter-spacing: 0.06em;
463
+ text-transform: uppercase;
464
+ background: color-mix(in srgb, var(--color-error) 12%, transparent);
465
+ color: var(--color-error);
462
466
  }
463
467
 
464
468
  .credibility.medium {
465
- background: rgba(255, 152, 0, 0.2);
466
- color: #ff9800;
469
+ background: color-mix(in srgb, var(--color-warning) 12%, transparent);
470
+ color: var(--color-warning);
467
471
  }
468
472
 
469
473
  .credibility.high {
470
- background: rgba(76, 175, 80, 0.2);
471
- color: #4caf50;
474
+ background: color-mix(in srgb, var(--color-success) 12%, transparent);
475
+ color: var(--color-success);
472
476
  }
473
477
 
474
478
  .empty-state {
@@ -491,16 +495,19 @@
491
495
  display: flex;
492
496
  align-items: center;
493
497
  gap: var(--space-15);
494
- padding: 6px 16px;
498
+ padding: 4px 12px;
495
499
  background: none;
496
- border: 1px solid var(--color-error, #e53935);
497
- border-radius: var(--radius-sm, 0.25rem);
498
- color: var(--color-error, #e53935);
499
- font-size: 12px;
500
+ border: 1px solid color-mix(in srgb, var(--color-error) 55%, transparent);
501
+ color: var(--color-error);
502
+ font-family: var(--font-mono);
503
+ font-size: var(--ui-label, 10px);
504
+ letter-spacing: 0.06em;
505
+ text-transform: uppercase;
500
506
  cursor: pointer;
507
+ transition: background var(--transition-fast, 110ms) linear;
501
508
  }
502
509
 
503
510
  .cancel-btn:hover {
504
- background: rgba(229, 57, 53, 0.1);
511
+ background: color-mix(in srgb, var(--color-error) 12%, transparent);
505
512
  }
506
513
  </style>