@oceanum/oceanumlab 4.6.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 (83) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +116 -0
  3. package/lib/DatameshUI.d.ts +5 -0
  4. package/lib/DatameshUI.js +8 -0
  5. package/lib/DatameshUI.js.map +1 -0
  6. package/lib/DatameshWidget.d.ts +59 -0
  7. package/lib/DatameshWidget.js +573 -0
  8. package/lib/DatameshWidget.js.map +1 -0
  9. package/lib/DatasourceItem.d.ts +12 -0
  10. package/lib/DatasourceItem.js +47 -0
  11. package/lib/DatasourceItem.js.map +1 -0
  12. package/lib/aiLoop.d.ts +60 -0
  13. package/lib/aiLoop.js +85 -0
  14. package/lib/aiLoop.js.map +1 -0
  15. package/lib/chatRouter.d.ts +64 -0
  16. package/lib/chatRouter.js +225 -0
  17. package/lib/chatRouter.js.map +1 -0
  18. package/lib/constants.d.ts +14 -0
  19. package/lib/constants.js +15 -0
  20. package/lib/constants.js.map +1 -0
  21. package/lib/conversationPin.d.ts +68 -0
  22. package/lib/conversationPin.js +120 -0
  23. package/lib/conversationPin.js.map +1 -0
  24. package/lib/handler.d.ts +8 -0
  25. package/lib/handler.js +36 -0
  26. package/lib/handler.js.map +1 -0
  27. package/lib/index.d.ts +16 -0
  28. package/lib/index.js +273 -0
  29. package/lib/index.js.map +1 -0
  30. package/lib/kernelHandoff.d.ts +61 -0
  31. package/lib/kernelHandoff.js +236 -0
  32. package/lib/kernelHandoff.js.map +1 -0
  33. package/lib/notebookContext.d.ts +48 -0
  34. package/lib/notebookContext.js +118 -0
  35. package/lib/notebookContext.js.map +1 -0
  36. package/lib/notebookHost.d.ts +6 -0
  37. package/lib/notebookHost.js +72 -0
  38. package/lib/notebookHost.js.map +1 -0
  39. package/lib/notebookRun.d.ts +37 -0
  40. package/lib/notebookRun.js +70 -0
  41. package/lib/notebookRun.js.map +1 -0
  42. package/lib/progress.d.ts +43 -0
  43. package/lib/progress.js +103 -0
  44. package/lib/progress.js.map +1 -0
  45. package/lib/sse.d.ts +26 -0
  46. package/lib/sse.js +112 -0
  47. package/lib/sse.js.map +1 -0
  48. package/package.json +151 -0
  49. package/schema/datamesh-connect.json +35 -0
  50. package/src/DatameshUI.tsx +15 -0
  51. package/src/DatameshWidget.tsx +909 -0
  52. package/src/DatasourceItem.tsx +124 -0
  53. package/src/__tests__/aiLoop.spec.ts +304 -0
  54. package/src/__tests__/chatRouter.spec.ts +315 -0
  55. package/src/__tests__/conversationPin.spec.ts +236 -0
  56. package/src/__tests__/kernelHandoff.spec.ts +106 -0
  57. package/src/__tests__/notebookContext.spec.ts +97 -0
  58. package/src/__tests__/notebookHost.spec.ts +195 -0
  59. package/src/__tests__/notebookRun.spec.ts +95 -0
  60. package/src/__tests__/notebookSnapshot.spec.ts +62 -0
  61. package/src/__tests__/oceanumlab.spec.ts +9 -0
  62. package/src/__tests__/sse.spec.ts +304 -0
  63. package/src/aiLoop.ts +140 -0
  64. package/src/chatRouter.ts +329 -0
  65. package/src/constants.ts +16 -0
  66. package/src/conversationPin.ts +148 -0
  67. package/src/global.d.ts +5 -0
  68. package/src/handler.ts +46 -0
  69. package/src/index.ts +327 -0
  70. package/src/kernelHandoff.ts +284 -0
  71. package/src/notebookContext.ts +144 -0
  72. package/src/notebookHost.ts +97 -0
  73. package/src/notebookRun.ts +104 -0
  74. package/src/progress.ts +121 -0
  75. package/src/sse.ts +127 -0
  76. package/src/svg.d.ts +4 -0
  77. package/style/base.css +5 -0
  78. package/style/icons/oceanum-dark.svg +1 -0
  79. package/style/icons/oceanum-light.svg +1 -0
  80. package/style/icons/oceanum.png +0 -0
  81. package/style/icons/oceanum.svg +1 -0
  82. package/style/index.css +477 -0
  83. package/style/index.js +1 -0
@@ -0,0 +1,477 @@
1
+ .datasource-drag-image {
2
+ border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);
3
+ width: var(--jp-private-notebook-dragImage-width);
4
+ height: var(--jp-private-notebook-dragImage-height);
5
+ color: var(--jp-ui-font-color1);
6
+ background: var(--jp-layout-color1);
7
+ }
8
+
9
+ .datamesh-iframe {
10
+ width: 98%;
11
+ height: 98%;
12
+ padding: 5px;
13
+ }
14
+
15
+ /* The sidebar panel: a flex column. */
16
+ .datamesh-connect {
17
+ display: flex;
18
+ flex-direction: column;
19
+ height: 100%;
20
+ overflow: hidden;
21
+ color: var(--jp-ui-font-color1);
22
+ background: var(--jp-layout-color1);
23
+ }
24
+
25
+ .datamesh-connect a {
26
+ color: var(--jp-content-link-color);
27
+ }
28
+
29
+ /* Top-level Oceanum.io header */
30
+ .oceanum-sidebar-header {
31
+ display: flex;
32
+ align-items: center;
33
+ gap: 8px;
34
+ padding: 10px 12px;
35
+ background: var(--jp-layout-color2);
36
+ border-bottom: 1px solid var(--jp-border-color1);
37
+ }
38
+
39
+ .oceanum-sidebar-title {
40
+ font-weight: 600;
41
+ font-size: var(--jp-ui-font-size1);
42
+ letter-spacing: 0.5px;
43
+ color: var(--jp-ui-font-color1);
44
+ }
45
+
46
+ /* Datamesh Workspace section header */
47
+ .datamesh-workspace-header {
48
+ display: flex;
49
+ align-items: center;
50
+ justify-content: space-between;
51
+ padding: 8px 12px;
52
+ font-weight: 600;
53
+ font-size: var(--jp-ui-font-size0);
54
+ color: var(--jp-ui-font-color2);
55
+ background: var(--jp-layout-color1);
56
+ letter-spacing: 0.5px;
57
+ }
58
+
59
+ .add-connection {
60
+ border-radius: 4px;
61
+ }
62
+
63
+ .add-connection :hover {
64
+ background-color: #ddd;
65
+ }
66
+
67
+ .datasource-list-item {
68
+ border-bottom: var(--jp-border-width) solid var(--jp-border-color2);
69
+ display: flex;
70
+ flex-direction: column;
71
+ margin: 0;
72
+ padding: 0;
73
+ }
74
+
75
+ .open-datamesh-ui {
76
+ cursor: pointer;
77
+ }
78
+
79
+ .datamesh-workspace-name {
80
+ flex: 0 0 auto;
81
+ font-weight: 600;
82
+ text-transform: uppercase;
83
+ letter-spacing: 1px;
84
+ padding: 8px 8px 8px 12px;
85
+ margin: 0;
86
+ margin-bottom: 10px;
87
+ font-size: var(--jp-ui-font-size1);
88
+ }
89
+
90
+ .datasource-item-expand,
91
+ .datasource-item-action,
92
+ .datasource-item-expand.jp-mod-styled {
93
+ background-color: transparent;
94
+ vertical-align: middle;
95
+ padding: 0;
96
+ width: 20px;
97
+ border: none;
98
+ }
99
+
100
+ .datasource-item-expand:hover {
101
+ cursor: pointer;
102
+ }
103
+
104
+ .datasource-item-details {
105
+ overflow: auto;
106
+ display: block;
107
+ padding: 5px;
108
+ margin: 5px;
109
+ border: 1px solid var(--jp-border-color2);
110
+ border-radius: 2px;
111
+ color: var(--jp-ui-font-color1);
112
+ background-color: var(--jp-layout-color1);
113
+ }
114
+
115
+ .datasource-item-details textarea {
116
+ color: var(--jp-ui-font-color1);
117
+ }
118
+
119
+ .datasource-item-action {
120
+ display: inline-flex;
121
+ align-self: flex-end;
122
+ align-items: center;
123
+ height: 100%;
124
+ border: none;
125
+ }
126
+
127
+ .datasource-item-name {
128
+ flex-grow: 1;
129
+ font-size: var(--jp-ui-font-size1);
130
+ white-space: nowrap;
131
+ overflow: hidden;
132
+ text-overflow: ellipsis;
133
+ padding: 4px 0 4px 2px;
134
+ line-height: 28px;
135
+ }
136
+
137
+ .datasource-item-action:hover,
138
+ .datasource-item-name:hover {
139
+ cursor: pointer;
140
+ }
141
+
142
+ .datasource-item-title {
143
+ align-items: center;
144
+ display: flex;
145
+ flex-direction: row;
146
+ padding: 0 4px;
147
+ height: 36px;
148
+ }
149
+
150
+ .datasource-item-title:hover {
151
+ background-color: var(--jp-layout-color2);
152
+ }
153
+
154
+ .datasource-query-field span {
155
+ margin-left: 5px;
156
+ white-space: nowrap;
157
+ font-size: var(--jp-ui-font-size0);
158
+ }
159
+
160
+ .expanded {
161
+ background-color: var(--jp-layout-color2);
162
+ padding: 2px;
163
+ }
164
+
165
+ .datamesh-connect-workspace {
166
+ flex: 1 1 auto;
167
+ overflow-y: auto;
168
+ min-height: 80px;
169
+ }
170
+
171
+ .datamesh-connect-divider {
172
+ flex: 0 0 1px;
173
+ background: var(--jp-border-color2);
174
+ margin: 0;
175
+ }
176
+
177
+ .oceanum-text-empty {
178
+ color: var(--jp-ui-font-color2);
179
+ font-size: var(--jp-ui-font-size0);
180
+ font-style: italic;
181
+ padding: 8px 4px;
182
+ }
183
+
184
+ .oceanum-text-empty a {
185
+ color: var(--jp-content-link-color);
186
+ cursor: pointer;
187
+ text-decoration: none;
188
+ }
189
+
190
+ .oceanum-text-empty a:hover {
191
+ text-decoration: underline;
192
+ cursor: pointer;
193
+ }
194
+
195
+ .oceanum-token-config {
196
+ color: var(--jp-ui-font-color2);
197
+ font-size: var(--jp-ui-font-size0);
198
+ padding: 12px;
199
+ background: var(--jp-layout-color2);
200
+ border-top: 1px solid var(--jp-border-color2);
201
+ }
202
+
203
+ .oceanum-token-config a {
204
+ color: var(--jp-content-link-color);
205
+ cursor: pointer;
206
+ text-decoration: none;
207
+ }
208
+
209
+ .oceanum-token-config a:hover {
210
+ text-decoration: underline;
211
+ }
212
+
213
+ /* AI Chat panel */
214
+ .oceanum-ai-chat {
215
+ flex: 2 1 auto;
216
+ display: flex;
217
+ flex-direction: column;
218
+ min-height: 180px;
219
+ overflow: hidden;
220
+ }
221
+
222
+ .oceanum-ai-chat-header {
223
+ flex: 0 0 auto;
224
+ display: flex;
225
+ align-items: center;
226
+ gap: 8px;
227
+ font-weight: bold;
228
+ font-size: var(--jp-ui-font-size1);
229
+ padding: 6px 10px;
230
+ color: var(--jp-ui-font-color1);
231
+ background: var(--jp-layout-color2);
232
+ letter-spacing: 0.5px;
233
+ }
234
+
235
+ .oceanum-ai-chat-title {
236
+ flex: 1 1 auto;
237
+ }
238
+
239
+ .oceanum-ai-chat-new {
240
+ flex: 0 0 auto;
241
+ padding: 2px 10px;
242
+ font-size: var(--jp-ui-font-size0);
243
+ font-weight: normal;
244
+ letter-spacing: normal;
245
+ cursor: pointer;
246
+ }
247
+
248
+ .oceanum-ai-chat-context {
249
+ flex: 0 0 auto;
250
+ padding: 2px 10px;
251
+ font-size: var(--jp-ui-font-size0);
252
+ color: var(--jp-ui-font-color2);
253
+ background: var(--jp-layout-color2);
254
+ border-bottom: 1px solid var(--jp-border-color2);
255
+ overflow: hidden;
256
+ text-overflow: ellipsis;
257
+ white-space: nowrap;
258
+ }
259
+
260
+ .oceanum-ai-chat-messages {
261
+ flex: 1 1 auto;
262
+ overflow-y: auto;
263
+ padding: 6px 8px;
264
+ display: flex;
265
+ flex-direction: column;
266
+ gap: 6px;
267
+ }
268
+
269
+ .oceanum-ai-chat-message {
270
+ display: flex;
271
+ flex-direction: column;
272
+ gap: 2px;
273
+ }
274
+
275
+ .oceanum-ai-chat-role {
276
+ font-size: var(--jp-ui-font-size0);
277
+ font-weight: 600;
278
+ color: var(--jp-ui-font-color2);
279
+ text-transform: uppercase;
280
+ letter-spacing: 0.5px;
281
+ }
282
+
283
+ .oceanum-ai-chat-message--user .oceanum-ai-chat-role {
284
+ color: var(--jp-brand-color1);
285
+ }
286
+
287
+ .oceanum-ai-chat-content {
288
+ margin: 0;
289
+ font-family: var(--jp-ui-font-family);
290
+ font-size: var(--jp-ui-font-size1);
291
+ color: var(--jp-ui-font-color1);
292
+ white-space: pre-wrap;
293
+ overflow-wrap: anywhere;
294
+ background: var(--jp-layout-color2);
295
+ padding: 6px 8px;
296
+ border-radius: 4px;
297
+ border-left: 2px solid var(--jp-border-color2);
298
+ }
299
+
300
+ .oceanum-ai-chat-message--user .oceanum-ai-chat-content {
301
+ background: var(--jp-layout-color3);
302
+ border-left-color: var(--jp-brand-color1);
303
+ }
304
+
305
+ .oceanum-ai-chat-loading {
306
+ color: var(--jp-ui-font-color2);
307
+ font-style: italic;
308
+ font-size: var(--jp-ui-font-size1);
309
+ padding: 4px 8px;
310
+ }
311
+
312
+ .oceanum-ai-chat-error {
313
+ color: var(--jp-error-color1);
314
+ font-size: var(--jp-ui-font-size0);
315
+ padding: 4px 8px;
316
+ background: var(--jp-error-color3, rgb(244 67 54 / 10%));
317
+ border-radius: 4px;
318
+ }
319
+
320
+ .oceanum-ai-chat-disabled {
321
+ display: flex;
322
+ flex-direction: column;
323
+ align-items: center;
324
+ justify-content: center;
325
+ text-align: center;
326
+ padding: 24px 16px;
327
+ color: var(--jp-ui-font-color2);
328
+ font-size: var(--jp-ui-font-size1);
329
+ }
330
+
331
+ .oceanum-ai-chat-disabled p {
332
+ margin: 0 0 8px;
333
+ }
334
+
335
+ .oceanum-ai-chat-disabled a {
336
+ color: var(--jp-content-link-color);
337
+ text-decoration: none;
338
+ cursor: pointer;
339
+ }
340
+
341
+ .oceanum-ai-chat-disabled a:hover {
342
+ text-decoration: underline;
343
+ }
344
+
345
+ .oceanum-ai-chat-disabled-hint {
346
+ font-size: var(--jp-ui-font-size0);
347
+ margin-top: 8px;
348
+ }
349
+
350
+ .oceanum-ai-chat-input-area {
351
+ flex: 0 0 auto;
352
+ display: flex;
353
+ flex-direction: column;
354
+ gap: 4px;
355
+ padding: 6px 8px;
356
+ border-top: 1px solid var(--jp-border-color2);
357
+ background: var(--jp-layout-color1);
358
+ }
359
+
360
+ .oceanum-ai-chat-input {
361
+ width: 100%;
362
+ resize: none;
363
+ font-family: var(--jp-ui-font-family);
364
+ font-size: var(--jp-ui-font-size1);
365
+ color: var(--jp-ui-font-color1);
366
+ background: var(--jp-layout-color2);
367
+ border: 1px solid var(--jp-border-color2);
368
+ border-radius: 4px;
369
+ padding: 6px 8px;
370
+ box-sizing: border-box;
371
+ outline: none;
372
+ }
373
+
374
+ .oceanum-ai-chat-input:focus {
375
+ border-color: var(--jp-brand-color1);
376
+ }
377
+
378
+ .oceanum-ai-chat-input:disabled {
379
+ opacity: 0.6;
380
+ }
381
+
382
+ .oceanum-ai-chat-send {
383
+ align-self: flex-end;
384
+ padding: 4px 16px;
385
+ font-size: var(--jp-ui-font-size1);
386
+ cursor: pointer;
387
+ }
388
+
389
+ .oceanum-ai-chat-send:disabled {
390
+ opacity: 0.5;
391
+ cursor: default;
392
+ }
393
+
394
+ /* Markdown rendering in AI chat messages */
395
+ .oceanum-ai-markdown {
396
+ white-space: normal;
397
+ }
398
+
399
+ .oceanum-ai-markdown p {
400
+ margin: 0 0 0.5em;
401
+ }
402
+
403
+ .oceanum-ai-markdown p:last-child {
404
+ margin-bottom: 0;
405
+ }
406
+
407
+ .oceanum-ai-markdown h1,
408
+ .oceanum-ai-markdown h2,
409
+ .oceanum-ai-markdown h3,
410
+ .oceanum-ai-markdown h4 {
411
+ margin: 0.5em 0 0.25em;
412
+ font-weight: 600;
413
+ }
414
+
415
+ .oceanum-ai-markdown h1 {
416
+ font-size: 1.3em;
417
+ }
418
+
419
+ .oceanum-ai-markdown h2 {
420
+ font-size: 1.2em;
421
+ }
422
+
423
+ .oceanum-ai-markdown h3 {
424
+ font-size: 1.1em;
425
+ }
426
+
427
+ .oceanum-ai-markdown ul,
428
+ .oceanum-ai-markdown ol {
429
+ margin: 0.25em 0;
430
+ padding-left: 1.5em;
431
+ }
432
+
433
+ .oceanum-ai-markdown li {
434
+ margin: 0.15em 0;
435
+ }
436
+
437
+ .oceanum-ai-markdown code {
438
+ font-family: var(--jp-code-font-family);
439
+ font-size: 0.9em;
440
+ background: var(--jp-layout-color3);
441
+ padding: 0.1em 0.3em;
442
+ border-radius: 3px;
443
+ }
444
+
445
+ .oceanum-ai-markdown pre {
446
+ margin: 0.5em 0;
447
+ padding: 0.5em;
448
+ background: var(--jp-layout-color3);
449
+ border-radius: 4px;
450
+ overflow-x: auto;
451
+ }
452
+
453
+ .oceanum-ai-markdown pre code {
454
+ background: none;
455
+ padding: 0;
456
+ }
457
+
458
+ .oceanum-ai-markdown a {
459
+ color: var(--jp-content-link-color);
460
+ }
461
+
462
+ .oceanum-ai-markdown blockquote {
463
+ margin: 0.5em 0;
464
+ padding: 0.25em 0.75em;
465
+ border-left: 3px solid var(--jp-border-color1);
466
+ color: var(--jp-ui-font-color2);
467
+ }
468
+
469
+ .oceanum-ai-markdown strong {
470
+ font-weight: 600;
471
+ }
472
+
473
+ .oceanum-ai-markdown hr {
474
+ border: none;
475
+ border-top: 1px solid var(--jp-border-color2);
476
+ margin: 0.5em 0;
477
+ }
package/style/index.js ADDED
@@ -0,0 +1 @@
1
+ import './base.css';