@tulipfarm/sprout 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +111 -0
  2. package/dist/components/agent-fanout.d.ts +46 -0
  3. package/dist/components/agent-fanout.js +228 -0
  4. package/dist/components/attachment.js +2 -2
  5. package/dist/components/brand-icon.js +4 -0
  6. package/dist/components/canvas.js +2 -2
  7. package/dist/components/chat-input.d.ts +94 -0
  8. package/dist/components/chat-input.js +279 -0
  9. package/dist/components/chat-sources.js +11 -2
  10. package/dist/components/code-block.js +2 -33
  11. package/dist/components/file-explorer.d.ts +27 -0
  12. package/dist/components/file-explorer.js +300 -0
  13. package/dist/components/file-viewer.d.ts +18 -1
  14. package/dist/components/file-viewer.js +35 -8
  15. package/dist/components/presence-cursor.d.ts +19 -0
  16. package/dist/components/presence-cursor.js +14 -0
  17. package/dist/components/questionnaire.js +2 -1
  18. package/dist/components/schema-diagram.js +5 -78
  19. package/dist/components/search-dialog.js +5 -4
  20. package/dist/components/sql-viewer.d.ts +76 -0
  21. package/dist/components/sql-viewer.js +409 -0
  22. package/dist/components/state-panel.js +2 -2
  23. package/dist/index.d.ts +5 -0
  24. package/dist/index.js +5 -0
  25. package/dist/internal/brand-glyphs.d.ts +28 -0
  26. package/dist/internal/brand-glyphs.js +24 -0
  27. package/dist/internal/code-tokens.d.ts +4 -0
  28. package/dist/internal/code-tokens.js +34 -0
  29. package/dist/internal/flow.d.ts +22 -0
  30. package/dist/internal/flow.js +82 -0
  31. package/dist/styles/accordion.css +2 -2
  32. package/dist/styles/agent-fanout.css +529 -0
  33. package/dist/styles/alert-dialog.css +2 -2
  34. package/dist/styles/alert.css +2 -2
  35. package/dist/styles/attachment.css +4 -24
  36. package/dist/styles/badge.css +2 -2
  37. package/dist/styles/brand-icon.css +2 -2
  38. package/dist/styles/breadcrumb.css +2 -2
  39. package/dist/styles/button.css +2 -2
  40. package/dist/styles/calendar.css +3 -3
  41. package/dist/styles/canvas.css +4 -18
  42. package/dist/styles/carousel.css +2 -2
  43. package/dist/styles/chart.css +2 -2
  44. package/dist/styles/chat-confirmation.css +2 -2
  45. package/dist/styles/chat-input.css +240 -0
  46. package/dist/styles/chat-sources.css +2 -2
  47. package/dist/styles/checkbox.css +2 -3
  48. package/dist/styles/choice-list.css +2 -2
  49. package/dist/styles/code-block.css +2 -2
  50. package/dist/styles/collapsible.css +2 -2
  51. package/dist/styles/combobox.css +6 -6
  52. package/dist/styles/command.css +2 -2
  53. package/dist/styles/context-menu.css +3 -3
  54. package/dist/styles/dialog.css +2 -2
  55. package/dist/styles/dropdown-menu.css +1 -1
  56. package/dist/styles/field.css +2 -3
  57. package/dist/styles/file-explorer.css +517 -0
  58. package/dist/styles/file-viewer.css +113 -16
  59. package/dist/styles/hover-card.css +2 -2
  60. package/dist/styles/index.css +9 -0
  61. package/dist/styles/input-group.css +6 -11
  62. package/dist/styles/input-otp.css +2 -2
  63. package/dist/styles/input.css +3 -4
  64. package/dist/styles/mention-list.css +1 -1
  65. package/dist/styles/menubar.css +3 -3
  66. package/dist/styles/message-response.css +4 -4
  67. package/dist/styles/message-scroller.css +2 -2
  68. package/dist/styles/message.css +5 -5
  69. package/dist/styles/navigation-menu.css +2 -2
  70. package/dist/styles/page-header.css +4 -4
  71. package/dist/styles/plan-outline.css +6 -6
  72. package/dist/styles/presence-cursor.css +68 -0
  73. package/dist/styles/prompt-list.css +2 -2
  74. package/dist/styles/questionnaire.css +2 -17
  75. package/dist/styles/radio-group.css +2 -3
  76. package/dist/styles/reasoning-effort.css +2 -2
  77. package/dist/styles/review-card.css +2 -2
  78. package/dist/styles/rich-text-editor.css +2 -2
  79. package/dist/styles/schema-diagram.css +4 -4
  80. package/dist/styles/scroll-area.css +2 -2
  81. package/dist/styles/search-dialog.css +0 -83
  82. package/dist/styles/select.css +3 -3
  83. package/dist/styles/separator.css +2 -2
  84. package/dist/styles/sheet.css +2 -2
  85. package/dist/styles/sidebar.css +2 -2
  86. package/dist/styles/slider.css +1 -1
  87. package/dist/styles/sql-viewer.css +406 -0
  88. package/dist/styles/state-panel.css +1 -10
  89. package/dist/styles/switch.css +2 -2
  90. package/dist/styles/table.css +10 -10
  91. package/dist/styles/tabs.css +4 -4
  92. package/dist/styles/textarea.css +3 -4
  93. package/dist/styles/themes/tulipfarm.css +89 -99
  94. package/dist/styles/toast.css +2 -2
  95. package/dist/styles/toggle-group.css +2 -2
  96. package/dist/styles/toggle.css +2 -2
  97. package/dist/styles/tool-activity.css +5 -5
  98. package/package.json +27 -6
@@ -1,125 +1,115 @@
1
- /* TulipFarm: Neutral grays with TulipFarm green.
1
+ /* TulipFarm: The TulipFarm Cloud palette, cool neutral grays with Google green.
2
2
  *
3
3
  * One file is the whole theme: font, radius, and every color token for light
4
4
  * and dark. Import it after "@tulipfarm/sprout/styles.css", then set
5
5
  * data-sprout-theme="tulipfarm" on <html>, or on any element to theme only
6
- * that subtree.
6
+ * that subtree. The font is Inter; load it (for example with
7
+ * @fontsource-variable/inter) or the system font is used.
7
8
  */
8
9
  @layer base {
9
10
  [data-sprout-theme="tulipfarm"] {
10
- --sprout-font: ui-sans-serif, system-ui, sans-serif;
11
- --sprout-radius-control: 0.375rem;
11
+ --sprout-font:
12
+ "Inter Variable", Inter, ui-sans-serif, system-ui, sans-serif;
13
+ --sprout-radius-control: 0.5rem;
12
14
  --sprout-radius-panel: 0.75rem;
13
15
  }
14
16
 
15
17
  [data-sprout-theme="tulipfarm"],
16
18
  .light[data-sprout-theme="tulipfarm"],
17
19
  .light [data-sprout-theme="tulipfarm"] {
18
- --sprout-canvas: #f8f8f8;
19
- --sprout-surface: #fdfdfd;
20
- --sprout-hover: #eeeeee;
21
- --sprout-active: #e3e3e3;
22
- --sprout-text: #242424;
23
- --sprout-muted: #626262;
24
- --sprout-line: #e0e0e0;
25
- --sprout-border: #909090;
26
- --sprout-border-strong: #707070;
27
- --sprout-input: #d4d4d4;
28
- --sprout-primary: #286440;
29
- --sprout-primary-hover: #1e5032;
30
- --sprout-primary-active: #164027;
31
- --sprout-on-primary: #f5fbf6;
32
- --sprout-focus: #327c4e;
33
- --sprout-danger: #b32d34;
34
- --sprout-danger-hover: #98252b;
35
- --sprout-on-danger: #fff8f8;
36
- --sprout-info: #1f5fb8;
37
- --sprout-info-subtle: #ebf1fd;
38
- --sprout-danger-subtle: #fdeeef;
39
- --sprout-success: #1d6a37;
40
- --sprout-success-subtle: #e8f4eb;
20
+ --sprout-canvas: #f9f9fa;
21
+ --sprout-surface: #ffffff;
22
+ --sprout-hover: #f5f5f7;
23
+ --sprout-active: #ebebed;
24
+ --sprout-text: #1b1b1b;
25
+ --sprout-muted: #65666e;
26
+ --sprout-line: #e8e8e8;
27
+ --sprout-border: #89898e;
28
+ --sprout-border-strong: #6e6f75;
29
+ --sprout-input: #dedee0;
30
+ --sprout-primary: #188038;
31
+ --sprout-primary-hover: #146c2f;
32
+ --sprout-primary-active: #105825;
33
+ --sprout-on-primary: #ffffff;
34
+ --sprout-focus: #188038;
35
+ --sprout-danger: #b42332;
36
+ --sprout-danger-hover: #9a1d2a;
37
+ --sprout-on-danger: #ffffff;
38
+ --sprout-info: #245cba;
39
+ --sprout-info-subtle: #edf3ff;
40
+ --sprout-danger-subtle: #fff0f1;
41
+ --sprout-success: #146c2f;
42
+ --sprout-success-subtle: #e9f5ec;
41
43
  --sprout-warning: #8a4b08;
42
- --sprout-warning-subtle: #fdf1dc;
43
- --sprout-primary-subtle: color-mix(
44
- in oklab,
45
- var(--sprout-primary) 10%,
46
- var(--sprout-surface)
47
- );
48
- --sprout-secondary: #ececec;
49
- --sprout-overlay: rgb(18 18 18 / 0.35);
44
+ --sprout-warning-subtle: #fff4df;
45
+ --sprout-primary-subtle: #edf7f0;
46
+ --sprout-secondary: #f0f0f2;
47
+ --sprout-overlay: rgb(32 33 36 / 0.25);
50
48
  }
51
49
 
52
50
  .dark[data-sprout-theme="tulipfarm"],
53
51
  .dark [data-sprout-theme="tulipfarm"] {
54
- --sprout-canvas: #151515;
55
- --sprout-surface: #1d1d1d;
56
- --sprout-hover: #2b2b2b;
57
- --sprout-active: #363636;
58
- --sprout-text: #f0f0f0;
59
- --sprout-muted: #adadad;
60
- --sprout-line: #383838;
61
- --sprout-border: #808080;
62
- --sprout-border-strong: #a0a0a0;
63
- --sprout-input: #474747;
64
- --sprout-primary: #a2d8af;
65
- --sprout-primary-hover: #b8e3c1;
66
- --sprout-primary-active: #c9ecd0;
67
- --sprout-on-primary: #142e1c;
68
- --sprout-focus: #a2d8af;
69
- --sprout-danger: #ff9197;
70
- --sprout-danger-hover: #ffadb1;
71
- --sprout-on-danger: #3c1014;
72
- --sprout-info: #8fb8f5;
73
- --sprout-info-subtle: #1f2c45;
74
- --sprout-danger-subtle: #3a2124;
75
- --sprout-success: #82d29a;
76
- --sprout-success-subtle: #1c3223;
77
- --sprout-warning: #eec27e;
78
- --sprout-warning-subtle: #34291b;
79
- --sprout-primary-subtle: color-mix(
80
- in oklab,
81
- var(--sprout-primary) 16%,
82
- var(--sprout-surface)
83
- );
84
- --sprout-secondary: #2c2c2c;
85
- --sprout-overlay: rgb(8 8 8 / 0.65);
52
+ --sprout-canvas: #101113;
53
+ --sprout-surface: #16171a;
54
+ --sprout-hover: #202125;
55
+ --sprout-active: #222327;
56
+ --sprout-text: #ffffff;
57
+ --sprout-muted: #a5a6af;
58
+ --sprout-line: #2d2e31;
59
+ --sprout-border: #727277;
60
+ --sprout-border-strong: #9a9ba1;
61
+ --sprout-input: #26272b;
62
+ --sprout-primary: #75ce8e;
63
+ --sprout-primary-hover: #8fd9a3;
64
+ --sprout-primary-active: #a6e2b6;
65
+ --sprout-on-primary: #0e2615;
66
+ --sprout-focus: #75ce8e;
67
+ --sprout-danger: #ff929d;
68
+ --sprout-danger-hover: #ffadb5;
69
+ --sprout-on-danger: #3b1016;
70
+ --sprout-info: #9cbdff;
71
+ --sprout-info-subtle: #202e48;
72
+ --sprout-danger-subtle: #3b2228;
73
+ --sprout-success: #75ce8e;
74
+ --sprout-success-subtle: #1b3323;
75
+ --sprout-warning: #edc17c;
76
+ --sprout-warning-subtle: #352b1e;
77
+ --sprout-primary-subtle: #1b3323;
78
+ --sprout-secondary: #28292e;
79
+ --sprout-overlay: rgb(0 0 0 / 0.5);
86
80
  }
87
81
 
88
82
  @media (prefers-color-scheme: dark) {
89
83
  :root:not(.light):not(.dark)[data-sprout-theme="tulipfarm"],
90
84
  :root:not(.light):not(.dark) [data-sprout-theme="tulipfarm"] {
91
- --sprout-canvas: #151515;
92
- --sprout-surface: #1d1d1d;
93
- --sprout-hover: #2b2b2b;
94
- --sprout-active: #363636;
95
- --sprout-text: #f0f0f0;
96
- --sprout-muted: #adadad;
97
- --sprout-line: #383838;
98
- --sprout-border: #808080;
99
- --sprout-border-strong: #a0a0a0;
100
- --sprout-input: #474747;
101
- --sprout-primary: #a2d8af;
102
- --sprout-primary-hover: #b8e3c1;
103
- --sprout-primary-active: #c9ecd0;
104
- --sprout-on-primary: #142e1c;
105
- --sprout-focus: #a2d8af;
106
- --sprout-danger: #ff9197;
107
- --sprout-danger-hover: #ffadb1;
108
- --sprout-on-danger: #3c1014;
109
- --sprout-info: #8fb8f5;
110
- --sprout-info-subtle: #1f2c45;
111
- --sprout-danger-subtle: #3a2124;
112
- --sprout-success: #82d29a;
113
- --sprout-success-subtle: #1c3223;
114
- --sprout-warning: #eec27e;
115
- --sprout-warning-subtle: #34291b;
116
- --sprout-primary-subtle: color-mix(
117
- in oklab,
118
- var(--sprout-primary) 16%,
119
- var(--sprout-surface)
120
- );
121
- --sprout-secondary: #2c2c2c;
122
- --sprout-overlay: rgb(8 8 8 / 0.65);
85
+ --sprout-canvas: #101113;
86
+ --sprout-surface: #16171a;
87
+ --sprout-hover: #202125;
88
+ --sprout-active: #222327;
89
+ --sprout-text: #ffffff;
90
+ --sprout-muted: #a5a6af;
91
+ --sprout-line: #2d2e31;
92
+ --sprout-border: #727277;
93
+ --sprout-border-strong: #9a9ba1;
94
+ --sprout-input: #26272b;
95
+ --sprout-primary: #75ce8e;
96
+ --sprout-primary-hover: #8fd9a3;
97
+ --sprout-primary-active: #a6e2b6;
98
+ --sprout-on-primary: #0e2615;
99
+ --sprout-focus: #75ce8e;
100
+ --sprout-danger: #ff929d;
101
+ --sprout-danger-hover: #ffadb5;
102
+ --sprout-on-danger: #3b1016;
103
+ --sprout-info: #9cbdff;
104
+ --sprout-info-subtle: #202e48;
105
+ --sprout-danger-subtle: #3b2228;
106
+ --sprout-success: #75ce8e;
107
+ --sprout-success-subtle: #1b3323;
108
+ --sprout-warning: #edc17c;
109
+ --sprout-warning-subtle: #352b1e;
110
+ --sprout-primary-subtle: #1b3323;
111
+ --sprout-secondary: #28292e;
112
+ --sprout-overlay: rgb(0 0 0 / 0.5);
123
113
  }
124
114
  }
125
115
  }
@@ -68,8 +68,8 @@
68
68
  content: "";
69
69
  }
70
70
  .sprout-toast:focus-visible {
71
- outline: 2px solid var(--sprout-focus);
72
- outline-offset: 2px;
71
+ outline: var(--sprout-focus-width) solid var(--sprout-focus-ring);
72
+ outline-offset: 0;
73
73
  }
74
74
  .sprout-toast[data-expanded] {
75
75
  height: var(--toast-height);
@@ -58,8 +58,8 @@
58
58
  }
59
59
  .sprout-toggle-group-item:focus-visible {
60
60
  z-index: 1;
61
- outline: 2px solid var(--sprout-focus);
62
- outline-offset: 2px;
61
+ outline: var(--sprout-focus-width) solid var(--sprout-focus-ring);
62
+ outline-offset: 0;
63
63
  }
64
64
  .sprout-toggle-group-item[data-disabled] {
65
65
  cursor: not-allowed;
@@ -44,8 +44,8 @@
44
44
  }
45
45
  .sprout-toggle:focus-visible {
46
46
  z-index: 1;
47
- outline: 2px solid var(--sprout-focus);
48
- outline-offset: 2px;
47
+ outline: var(--sprout-focus-width) solid var(--sprout-focus-ring);
48
+ outline-offset: 0;
49
49
  }
50
50
  .sprout-toggle:disabled,
51
51
  .sprout-toggle[data-disabled] {
@@ -87,8 +87,8 @@
87
87
  display: none;
88
88
  }
89
89
  .sprout-activity-panel-viewport:focus-visible {
90
- outline: 2px solid var(--sprout-focus);
91
- outline-offset: -2px;
90
+ outline: var(--sprout-focus-width) solid var(--sprout-focus-ring);
91
+ outline-offset: -1px;
92
92
  }
93
93
 
94
94
  .sprout-tool-activity {
@@ -114,7 +114,7 @@
114
114
  color: var(--sprout-text);
115
115
  }
116
116
  .sprout-tool-activity-trigger:focus-visible {
117
- outline-offset: 1px;
117
+ outline-offset: 0;
118
118
  }
119
119
  .sprout-tool-activity-trigger > svg {
120
120
  flex-shrink: 0;
@@ -262,8 +262,8 @@
262
262
  background: var(--sprout-active);
263
263
  }
264
264
  .sprout-tool-activity-source-chip:focus-visible {
265
- outline: 2px solid var(--sprout-focus);
266
- outline-offset: 2px;
265
+ outline: var(--sprout-focus-width) solid var(--sprout-focus-ring);
266
+ outline-offset: 0;
267
267
  }
268
268
  .sprout-tool-activity-favicon {
269
269
  position: relative;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tulipfarm/sprout",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Considered React controls. Built with Base UI and Tailwind CSS.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -36,6 +36,10 @@
36
36
  "types": "./dist/components/accordion.d.ts",
37
37
  "import": "./dist/components/accordion.js"
38
38
  },
39
+ "./agent-fanout": {
40
+ "types": "./dist/components/agent-fanout.d.ts",
41
+ "import": "./dist/components/agent-fanout.js"
42
+ },
39
43
  "./alert": {
40
44
  "types": "./dist/components/alert.d.ts",
41
45
  "import": "./dist/components/alert.js"
@@ -108,6 +112,10 @@
108
112
  "types": "./dist/components/chat-sources.d.ts",
109
113
  "import": "./dist/components/chat-sources.js"
110
114
  },
115
+ "./chat-input": {
116
+ "types": "./dist/components/chat-input.d.ts",
117
+ "import": "./dist/components/chat-input.js"
118
+ },
111
119
  "./checkbox": {
112
120
  "types": "./dist/components/checkbox.d.ts",
113
121
  "import": "./dist/components/checkbox.js"
@@ -152,6 +160,10 @@
152
160
  "types": "./dist/components/field.d.ts",
153
161
  "import": "./dist/components/field.js"
154
162
  },
163
+ "./file-explorer": {
164
+ "types": "./dist/components/file-explorer.d.ts",
165
+ "import": "./dist/components/file-explorer.js"
166
+ },
155
167
  "./file-viewer": {
156
168
  "types": "./dist/components/file-viewer.d.ts",
157
169
  "import": "./dist/components/file-viewer.js"
@@ -244,6 +256,10 @@
244
256
  "types": "./dist/components/popover.d.ts",
245
257
  "import": "./dist/components/popover.js"
246
258
  },
259
+ "./presence-cursor": {
260
+ "types": "./dist/components/presence-cursor.d.ts",
261
+ "import": "./dist/components/presence-cursor.js"
262
+ },
247
263
  "./progress": {
248
264
  "types": "./dist/components/progress.d.ts",
249
265
  "import": "./dist/components/progress.js"
@@ -284,6 +300,10 @@
284
300
  "types": "./dist/components/schema-diagram.d.ts",
285
301
  "import": "./dist/components/schema-diagram.js"
286
302
  },
303
+ "./sql-viewer": {
304
+ "types": "./dist/components/sql-viewer.d.ts",
305
+ "import": "./dist/components/sql-viewer.js"
306
+ },
287
307
  "./scroll-area": {
288
308
  "types": "./dist/components/scroll-area.d.ts",
289
309
  "import": "./dist/components/scroll-area.js"
@@ -413,11 +433,12 @@
413
433
  "@dnd-kit/utilities": "3.2.2",
414
434
  "@tanstack/react-table": "9.3.1",
415
435
  "@tanstack/react-virtual": "3.14.21",
416
- "@tiptap/core": "3.31.4",
417
- "@tiptap/extension-placeholder": "3.31.4",
418
- "@tiptap/pm": "3.31.4",
419
- "@tiptap/react": "3.31.4",
420
- "@tiptap/starter-kit": "3.31.4",
436
+ "@tiptap/core": "3.32.0",
437
+ "@tiptap/extension-placeholder": "3.32.0",
438
+ "@tiptap/pm": "3.32.0",
439
+ "@tiptap/react": "3.32.0",
440
+ "@tiptap/starter-kit": "3.32.0",
441
+ "@tiptap/suggestion": "3.32.0",
421
442
  "@xyflow/react": "12.12.0",
422
443
  "clsx": "^2.1.1",
423
444
  "react-day-picker": "10.0.1",