@datalayer/core 0.0.3 → 0.0.5

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 (332) hide show
  1. package/README.md +114 -3
  2. package/lib/App.css +2 -2
  3. package/lib/App.d.ts +1 -1
  4. package/lib/App.js +9 -9
  5. package/lib/__tests__/index.test.js +5 -5
  6. package/lib/api/DatalayerApi.d.ts +1 -1
  7. package/lib/api/DatalayerApi.js +3 -3
  8. package/lib/api/index.d.ts +3 -3
  9. package/lib/api/index.js +3 -3
  10. package/lib/api/runtimes/actions.js +22 -23
  11. package/lib/api/runtimes/settings.js +3 -3
  12. package/lib/api/runtimes/snapshots.d.ts +1 -1
  13. package/lib/api/runtimes/snapshots.js +8 -8
  14. package/lib/api/runtimes/utils.js +1 -4
  15. package/lib/collaboration/DatalayerCollaboration.d.ts +9 -0
  16. package/lib/collaboration/DatalayerCollaboration.js +28 -0
  17. package/lib/collaboration/DatalayerCollaborationProvider.d.ts +54 -0
  18. package/lib/collaboration/DatalayerCollaborationProvider.js +162 -0
  19. package/lib/collaboration/index.d.ts +2 -0
  20. package/lib/collaboration/index.js +6 -0
  21. package/lib/components/avatars/BoringAvatar.d.ts +1 -1
  22. package/lib/components/avatars/BoringAvatar.js +2 -2
  23. package/lib/components/avatars/UserProfileAvatar.js +2 -9
  24. package/lib/components/banners/NoAutomationBanner.js +4 -4
  25. package/lib/components/buttons/DownloadCSVButton.js +1 -1
  26. package/lib/components/buttons/UploadButton.js +1 -1
  27. package/lib/components/checkout/StripeCheckout.d.ts +1 -1
  28. package/lib/components/checkout/StripeCheckout.js +6 -6
  29. package/lib/components/confetti/ConfettiSuccess.js +1 -1
  30. package/lib/components/context/OrganizationSelect.js +5 -5
  31. package/lib/components/context/SpaceSelect.js +7 -7
  32. package/lib/components/display/AvatarSkeleton.js +1 -1
  33. package/lib/components/display/CenteredSpinner.js +4 -4
  34. package/lib/components/display/CodePreview.js +4 -4
  35. package/lib/components/display/DatalayerBox.js +13 -14
  36. package/lib/components/display/HorizontalCenter.d.ts +1 -1
  37. package/lib/components/display/HorizontalCenter.js +1 -1
  38. package/lib/components/display/JupyterDialog.js +17 -15
  39. package/lib/components/display/NavLink.d.ts +4 -2
  40. package/lib/components/display/NavLink.js +6 -4
  41. package/lib/components/display/NotebookSkeleton.js +2 -2
  42. package/lib/components/display/Placeholder.js +1 -1
  43. package/lib/components/display/ToTopBranded.js +1 -1
  44. package/lib/components/echarts/EChartsReact.d.ts +1 -1
  45. package/lib/components/echarts/EChartsReact.js +1 -1
  46. package/lib/components/flashes/FlashClosable.js +11 -11
  47. package/lib/components/flashes/FlashDisclaimer.js +2 -3
  48. package/lib/components/flashes/FlashGuest.js +3 -4
  49. package/lib/components/flashes/FlashSurveys.js +3 -4
  50. package/lib/components/flashes/FlashUnauthorized.js +2 -2
  51. package/lib/components/flashes/surveys/Survey2025_1.d.ts +1 -1
  52. package/lib/components/flashes/surveys/Survey2025_1.js +62 -85
  53. package/lib/components/iam/ExternalTokenSilentLogin.js +6 -4
  54. package/lib/components/icons/ArtifactIcon.d.ts +2 -2
  55. package/lib/components/icons/ArtifactIcon.js +39 -39
  56. package/lib/components/labels/VisibilityLabel.js +2 -5
  57. package/lib/components/landings/StepBlock.d.ts +1 -1
  58. package/lib/components/landings/StepBlock.js +1 -1
  59. package/lib/components/navbar/NavigationVisbilityObserver.js +2 -2
  60. package/lib/components/navbar/SubdomainNavBar.js +45 -23
  61. package/lib/components/navbar/SubdomainNavBar.module.css +33 -14
  62. package/lib/components/nbgrader/NbGradesDetails.d.ts +1 -1
  63. package/lib/components/nbgrader/NbGradesDetails.js +5 -8
  64. package/lib/components/notebooks/JupyterNotebook.js +5 -5
  65. package/lib/components/notebooks/JupyterNotebookToolbar.js +3 -3
  66. package/lib/components/primer/Helper.d.ts +1 -1
  67. package/lib/components/primer/Helper.js +5 -3
  68. package/lib/components/primer/Portals.d.ts +1 -1
  69. package/lib/components/primer/Portals.js +2 -2
  70. package/lib/components/primer/Styles.js +1 -1
  71. package/lib/components/progress/ConsumptionBar.js +2 -2
  72. package/lib/components/progress/CreditsIndicator.d.ts +1 -1
  73. package/lib/components/progress/CreditsIndicator.js +4 -7
  74. package/lib/components/progress/ProgressRing.js +2 -2
  75. package/lib/components/runtimes/RuntimeCellVariables.js +9 -9
  76. package/lib/components/runtimes/RuntimeCellVariablesDialog.js +3 -3
  77. package/lib/components/runtimes/RuntimeLauncherDialog.js +30 -34
  78. package/lib/components/runtimes/RuntimePickerBase.js +42 -31
  79. package/lib/components/runtimes/RuntimePickerCell.js +9 -12
  80. package/lib/components/runtimes/RuntimePickerNotebook.js +44 -44
  81. package/lib/components/runtimes/RuntimeReservationControl.js +10 -15
  82. package/lib/components/runtimes/RuntimeSimplePicker.js +9 -12
  83. package/lib/components/runtimes/RuntimeUtils.js +22 -12
  84. package/lib/components/runtimes/RuntimeVariables.js +7 -7
  85. package/lib/components/screenshot/ScreenCapture.js +9 -13
  86. package/lib/components/screenshot/ScreenCaptureButton.d.ts +1 -1
  87. package/lib/components/screenshot/ScreenCaptureButton.js +14 -8
  88. package/lib/components/snapshots/RuntimeSnapshotMenu.js +19 -17
  89. package/lib/components/snippets/SnippetDialog.js +5 -5
  90. package/lib/components/storage/ContentsBrowser.js +63 -56
  91. package/lib/components/storage/ContentsItems.js +10 -8
  92. package/lib/components/students/StudentItemStatus.d.ts +1 -1
  93. package/lib/components/students/StudentItemStatus.js +35 -16
  94. package/lib/components/subnav/SubNav.d.ts +1 -1
  95. package/lib/components/subnav/SubNav.js +30 -15
  96. package/lib/components/subnav/SubNav.module.css +55 -21
  97. package/lib/components/tables/DataTable.js +1 -4
  98. package/lib/components/text-reveal/TextRevealAnimation.js +7 -2
  99. package/lib/components/text-reveal/TextRevealAnimation.module.css +4 -2
  100. package/lib/components/tokens/SpaceVariantToken.d.ts +1 -1
  101. package/lib/components/tokens/SpaceVariantToken.js +5 -5
  102. package/lib/components/toolbars/AssignmentEditorToolbar.js +1 -3
  103. package/lib/components/users/PeerIndicator.d.ts +1 -1
  104. package/lib/components/users/PeerIndicator.js +5 -5
  105. package/lib/config/Configuration.d.ts +48 -0
  106. package/lib/config/Configuration.js +42 -0
  107. package/lib/config/integrations/Loom.js +3 -3
  108. package/lib/examples/CellExample.d.ts +2 -2
  109. package/lib/examples/CellExample.js +34 -3
  110. package/lib/examples/DatalayerNotebookExample.d.ts +16 -0
  111. package/lib/examples/DatalayerNotebookExample.js +75 -0
  112. package/lib/examples/NativeNavigationExample.d.ts +8 -0
  113. package/lib/examples/NativeNavigationExample.js +97 -0
  114. package/lib/examples/NotebookExample.d.ts +1 -3
  115. package/lib/examples/NotebookExample.js +9 -7
  116. package/lib/examples/NotebookMutationsKernel.d.ts +2 -0
  117. package/lib/examples/NotebookMutationsKernel.js +115 -0
  118. package/lib/examples/NotebookMutationsServiceManager.d.ts +2 -0
  119. package/lib/examples/NotebookMutationsServiceManager.js +107 -0
  120. package/lib/examples/ReactRouterExample.d.ts +6 -0
  121. package/lib/examples/ReactRouterExample.js +175 -0
  122. package/lib/examples/example-selector.d.ts +22 -0
  123. package/lib/examples/example-selector.js +45 -0
  124. package/lib/examples/index.d.ts +2 -0
  125. package/lib/examples/index.js +6 -0
  126. package/lib/examples/main.js +153 -0
  127. package/lib/examples/notebooks/IPyWidgetsExample.ipynb.json +101 -0
  128. package/lib/examples/notebooks/IPyWidgetsExampleWithState.ipynb.json +112 -0
  129. package/lib/examples/{NotebookExample1.ipynb.json → notebooks/Lite.ipynb.json} +45 -53
  130. package/lib/examples/notebooks/Matplotlib.ipynb.json +137 -0
  131. package/lib/examples/notebooks/NotebookExample1.ipynb.json +126 -0
  132. package/lib/examples/notebooks/NotebookExample2.ipynb.json +48 -0
  133. package/lib/examples/notebooks/NotebookOutputs.ipynb.json +49 -0
  134. package/lib/examples/notebooks/NotebookToCExample.ipynb.json +102 -0
  135. package/lib/examples/notebooks/OutputIPyWidgetsExample.d.ts +145 -0
  136. package/lib/examples/notebooks/OutputIPyWidgetsExample.js +153 -0
  137. package/lib/examples/notebooks/PyGWalker.ipynb.json +55 -0
  138. package/lib/hooks/assets/OutputshotPlaceholders.d.ts +10 -10
  139. package/lib/hooks/assets/OutputshotPlaceholders.js +10 -10
  140. package/lib/hooks/index.d.ts +29 -28
  141. package/lib/hooks/index.js +29 -28
  142. package/lib/hooks/layouts/LayoutBackdrop.js +3 -6
  143. package/lib/hooks/layouts/LayoutScreenshot.css +1 -1
  144. package/lib/hooks/layouts/LayoutScreenshot.js +6 -6
  145. package/lib/hooks/useAIAgents.d.ts +1 -1
  146. package/lib/hooks/useAIAgents.js +6 -6
  147. package/lib/hooks/useAuthorization.js +4 -4
  148. package/lib/hooks/useBackdrop.js +7 -7
  149. package/lib/hooks/useBackdropJupyterLab.d.ts +1 -1
  150. package/lib/hooks/useBackdropJupyterLab.js +4 -4
  151. package/lib/hooks/useCache.d.ts +6 -2
  152. package/lib/hooks/useCache.js +233 -179
  153. package/lib/hooks/useCellOutputshot.js +3 -6
  154. package/lib/hooks/useContainsFocus.js +2 -1
  155. package/lib/hooks/useDatalayer.js +5 -3
  156. package/lib/hooks/useError.d.ts +1 -1
  157. package/lib/hooks/useError.js +2 -2
  158. package/lib/hooks/useExternalScript.js +4 -4
  159. package/lib/hooks/useFocusTrap.js +2 -1
  160. package/lib/hooks/useIAM.js +4 -5
  161. package/lib/hooks/useId.js +3 -3
  162. package/lib/hooks/useJupyterLabTheme.js +3 -1
  163. package/lib/hooks/useLocation.d.ts +22 -0
  164. package/lib/hooks/useLocation.js +149 -0
  165. package/lib/hooks/useLocationHandles.d.ts +2 -2
  166. package/lib/hooks/useLocationHandles.js +6 -4
  167. package/lib/hooks/useNavigate.d.ts +5 -1
  168. package/lib/hooks/useNavigate.js +62 -7
  169. package/lib/hooks/useNotebookAIAgent.js +3 -1
  170. package/lib/hooks/useParams.d.ts +5 -0
  171. package/lib/hooks/useParams.js +112 -0
  172. package/lib/hooks/useRuntimes.js +2 -2
  173. package/lib/hooks/useScreenshot.js +5 -5
  174. package/lib/hooks/useToast.js +15 -13
  175. package/lib/hooks/useUpload.js +9 -9
  176. package/lib/hooks/useUser.js +1 -1
  177. package/lib/index.css +1 -1
  178. package/lib/index.d.ts +6 -3
  179. package/lib/index.js +7 -3
  180. package/lib/mocks/components/FlashMock.js +4 -4
  181. package/lib/mocks/hooks/rests/rests.js +15 -18
  182. package/lib/mocks/hooks/useDatalayerMock.d.ts +2 -2
  183. package/lib/mocks/hooks/useDatalayerMock.js +7 -7
  184. package/lib/mocks/models/CodeBlockMock.js +1 -1
  185. package/lib/mocks/models/CodelineMock.js +1 -1
  186. package/lib/mocks/models/CourseMock.d.ts +1 -1
  187. package/lib/mocks/models/CourseMock.js +10 -10
  188. package/lib/mocks/models/InviteMock.d.ts +1 -1
  189. package/lib/mocks/models/InviteMock.js +21 -6
  190. package/lib/mocks/models/JupyterLabUserMock.js +2 -2
  191. package/lib/mocks/models/OrganisationMock.d.ts +1 -1
  192. package/lib/mocks/models/OrganisationMock.js +11 -7
  193. package/lib/mocks/models/SchoolMock.d.ts +1 -1
  194. package/lib/mocks/models/SchoolMock.js +6 -6
  195. package/lib/mocks/models/SpaceMock.d.ts +1 -1
  196. package/lib/mocks/models/SpaceMock.js +9 -9
  197. package/lib/mocks/models/TeamMock.d.ts +1 -1
  198. package/lib/mocks/models/TeamMock.js +6 -6
  199. package/lib/mocks/models/UserMock.d.ts +1 -1
  200. package/lib/mocks/models/UserMock.js +4 -6
  201. package/lib/mocks/views/ActionMenuMock.js +1 -1
  202. package/lib/mocks/views/ChartMock.js +3 -3
  203. package/lib/mocks/views/ChartMockOptions.js +24 -24
  204. package/lib/mocks/views/DashboardMock.js +74 -74
  205. package/lib/mocks/views/FormMock.js +1 -1
  206. package/lib/mocks/views/TableMock.js +1 -1
  207. package/lib/models/Account.d.ts +2 -2
  208. package/lib/models/Assignment.d.ts +2 -2
  209. package/lib/models/Cell.d.ts +1 -1
  210. package/lib/models/CodeBlock.d.ts +1 -1
  211. package/lib/models/CodefeedBlocks.d.ts +2 -2
  212. package/lib/models/Contact.d.ts +1 -1
  213. package/lib/models/Contact.js +14 -14
  214. package/lib/models/ContactIAMProvider.js +2 -2
  215. package/lib/models/Course.d.ts +7 -7
  216. package/lib/models/Dataset.d.ts +1 -1
  217. package/lib/models/Dean.d.ts +1 -1
  218. package/lib/models/Document.d.ts +1 -1
  219. package/lib/models/Environment.d.ts +2 -2
  220. package/lib/models/Exercise.d.ts +1 -1
  221. package/lib/models/IAMProviderLinked.js +1 -1
  222. package/lib/models/Instructor.d.ts +1 -1
  223. package/lib/models/Invite.d.ts +2 -2
  224. package/lib/models/Invite.js +1 -1
  225. package/lib/models/Item.d.ts +5 -5
  226. package/lib/models/LandingRoles.js +18 -18
  227. package/lib/models/Lesson.d.ts +1 -1
  228. package/lib/models/Member.d.ts +1 -1
  229. package/lib/models/Notebook.d.ts +1 -1
  230. package/lib/models/Organization.d.ts +4 -4
  231. package/lib/models/Organization.js +2 -2
  232. package/lib/models/OrganizationMember.d.ts +2 -2
  233. package/lib/models/Page.js +4 -2
  234. package/lib/models/PageTag.d.ts +1 -1
  235. package/lib/models/PageTag.js +56 -9
  236. package/lib/models/Profile.d.ts +1 -1
  237. package/lib/models/RolesOrganization.d.ts +1 -1
  238. package/lib/models/RolesOrganization.js +4 -12
  239. package/lib/models/RolesPlatform.d.ts +1 -1
  240. package/lib/models/RolesPlatform.js +12 -34
  241. package/lib/models/RolesTeam.d.ts +1 -1
  242. package/lib/models/RolesTeam.js +3 -10
  243. package/lib/models/Runtime.js +4 -4
  244. package/lib/models/RuntimeSnapshot.js +1 -1
  245. package/lib/models/School.d.ts +4 -4
  246. package/lib/models/Space.d.ts +5 -5
  247. package/lib/models/Space.js +3 -3
  248. package/lib/models/SpaceItem.d.ts +8 -8
  249. package/lib/models/SpaceMember.d.ts +2 -2
  250. package/lib/models/Student.d.ts +2 -2
  251. package/lib/models/StudentItem.d.ts +3 -3
  252. package/lib/models/Team.d.ts +3 -3
  253. package/lib/models/Team.js +2 -2
  254. package/lib/models/TeamMember.d.ts +2 -2
  255. package/lib/models/URN.js +1 -1
  256. package/lib/models/User.d.ts +2 -2
  257. package/lib/models/User.js +5 -3
  258. package/lib/models/UserOnboarding.d.ts +1 -1
  259. package/lib/models/UserOnboarding.js +7 -7
  260. package/lib/models/UserSettings.js +2 -2
  261. package/lib/models/index.d.ts +2 -2
  262. package/lib/models/index.js +2 -2
  263. package/lib/navigation/adapters/native.d.ts +11 -0
  264. package/lib/navigation/adapters/native.js +48 -0
  265. package/lib/navigation/adapters/nextjs.d.ts +9 -0
  266. package/lib/navigation/adapters/nextjs.js +35 -0
  267. package/lib/navigation/adapters/react-router.d.ts +4 -0
  268. package/lib/navigation/adapters/react-router.js +12 -0
  269. package/lib/navigation/components.d.ts +20 -0
  270. package/lib/navigation/components.js +36 -0
  271. package/lib/navigation/index.d.ts +4 -0
  272. package/lib/navigation/index.js +12 -0
  273. package/lib/routes/index.d.ts +1 -1
  274. package/lib/routes/index.js +1 -1
  275. package/lib/services/DatalayerServiceManager.d.ts +22 -0
  276. package/lib/services/DatalayerServiceManager.js +69 -0
  277. package/lib/services/index.d.ts +4 -0
  278. package/lib/services/index.js +7 -0
  279. package/lib/services/reconnectToRuntime.d.ts +32 -0
  280. package/lib/services/reconnectToRuntime.js +59 -0
  281. package/lib/state/State.d.ts +1 -1
  282. package/lib/state/State.js +1 -1
  283. package/lib/state/index.d.ts +1 -1
  284. package/lib/state/index.js +1 -1
  285. package/lib/state/storage/IAMStorage.js +14 -2
  286. package/lib/state/storage/index.d.ts +1 -1
  287. package/lib/state/storage/index.js +1 -1
  288. package/lib/state/substates/AIAgentState.js +4 -2
  289. package/lib/state/substates/CellState.js +6 -5
  290. package/lib/state/substates/CoreState.d.ts +1 -1
  291. package/lib/state/substates/CoreState.js +26 -17
  292. package/lib/state/substates/DatasourceState.js +1 -1
  293. package/lib/state/substates/IAMState.d.ts +4 -0
  294. package/lib/state/substates/IAMState.js +39 -23
  295. package/lib/state/substates/JupyterLabState.js +1 -1
  296. package/lib/state/substates/LayoutState.d.ts +2 -2
  297. package/lib/state/substates/LayoutState.js +41 -28
  298. package/lib/state/substates/OrganizationState.js +1 -1
  299. package/lib/state/substates/RuntimesState.js +11 -6
  300. package/lib/state/substates/SpaceState.js +1 -1
  301. package/lib/state/substates/SurveysState.js +4 -4
  302. package/lib/state/substates/TeamState.js +1 -1
  303. package/lib/test-setup.js +25 -3
  304. package/lib/theme/DatalayerTheme.js +1 -1
  305. package/lib/theme/DatalayerThemeProvider.js +17 -14
  306. package/lib/theme/Palette.js +1 -1
  307. package/lib/utils/Avatar.js +2 -2
  308. package/lib/utils/Browser.js +6 -6
  309. package/lib/utils/Cells.d.ts +1 -1
  310. package/lib/utils/Cookie.js +1 -1
  311. package/lib/utils/Date.js +2 -2
  312. package/lib/utils/Download.js +5 -3
  313. package/lib/utils/DownloadFile.js +4 -2
  314. package/lib/utils/Env.js +2 -1
  315. package/lib/utils/Lazy.d.ts +1 -1
  316. package/lib/utils/Lazy.js +2 -2
  317. package/lib/utils/Name.js +10 -8
  318. package/lib/utils/Notebook.d.ts +1 -1
  319. package/lib/utils/Notebook.js +3 -3
  320. package/lib/utils/Number.js +13 -9
  321. package/lib/utils/Plots.js +4 -4
  322. package/lib/utils/Screenshot.js +1 -1
  323. package/lib/utils/Sleep.js +1 -1
  324. package/lib/utils/Snapshot.js +2 -2
  325. package/lib/utils/String.js +2 -2
  326. package/lib/utils/Uri.js +1 -1
  327. package/lib/utils/WithSuspense.js +3 -6
  328. package/lib/utils/logger.d.ts +16 -0
  329. package/lib/utils/logger.js +52 -0
  330. package/package.json +49 -5
  331. package/lib/__tests__/App.test.js +0 -17
  332. /package/lib/{__tests__/App.test.d.ts → examples/main.d.ts} +0 -0
@@ -1,4 +1,4 @@
1
- import { ComponentType } from "react";
1
+ import { ComponentType } from 'react';
2
2
  export type PreloadableComponent<T extends ComponentType<any>> = T & {
3
3
  preload: () => Promise<void>;
4
4
  };
package/lib/utils/Lazy.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) 2023-2025 Datalayer, Inc.
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
- import { createElement, forwardRef, lazy as reactLazy } from "react";
5
+ import { createElement, forwardRef, lazy as reactLazy, } from 'react';
6
6
  export function lazyWithPreload(factory) {
7
7
  const LazyComponent = reactLazy(factory);
8
8
  let factoryPromise;
@@ -12,7 +12,7 @@ export function lazyWithPreload(factory) {
12
12
  });
13
13
  Component.preload = () => {
14
14
  if (!factoryPromise) {
15
- factoryPromise = factory().then((module) => {
15
+ factoryPromise = factory().then(module => {
16
16
  LoadedComponent = module.default;
17
17
  });
18
18
  }
package/lib/utils/Name.js CHANGED
@@ -3,22 +3,24 @@
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
5
  export const asDisplayName = (givenName, familyName) => {
6
- return givenName ?
7
- familyName ?
8
- (givenName + ' ' + familyName) : givenName
9
- :
10
- familyName ?? '';
6
+ return givenName
7
+ ? familyName
8
+ ? givenName + ' ' + familyName
9
+ : givenName
10
+ : (familyName ?? '');
11
11
  };
12
12
  export const nameAsInitials = (name) => {
13
13
  return name
14
14
  .replace(/\s+/, ' ')
15
15
  .split(' ')
16
16
  .slice(0, 2)
17
- .map((v) => v && v[0].toUpperCase())
17
+ .map(v => v && v[0].toUpperCase())
18
18
  .join('');
19
19
  };
20
20
  export const namesAsInitials = (firstName, lastName) => {
21
- return ((firstName || ' ').charAt(0) + (lastName || ' ').charAt(0)).toLocaleUpperCase().trim();
21
+ return ((firstName || ' ').charAt(0) + (lastName || ' ').charAt(0))
22
+ .toLocaleUpperCase()
23
+ .trim();
22
24
  };
23
25
  /**
24
26
  * Convert first and last names to a friendly name.
@@ -30,5 +32,5 @@ export const toFriendlyName = (firstName, lastName) => {
30
32
  if (lastName) {
31
33
  return lastName;
32
34
  }
33
- return "";
35
+ return '';
34
36
  };
@@ -6,7 +6,7 @@ import { JupyterLab } from '@jupyterlab/application';
6
6
  * @param name Notebook name
7
7
  * @param url Notebook content URL
8
8
  */
9
- export declare const createNotebook: ({ app, name, url, options }: {
9
+ export declare const createNotebook: ({ app, name, url, options, }: {
10
10
  app: JupyterLab;
11
11
  name?: string;
12
12
  url?: string;
@@ -9,7 +9,7 @@
9
9
  * @param name Notebook name
10
10
  * @param url Notebook content URL
11
11
  */
12
- export const createNotebook = async ({ app, name, url, options }) => {
12
+ export const createNotebook = async ({ app, name, url, options, }) => {
13
13
  const notebook = await app.commands.execute('notebook:create-new', options);
14
14
  /*
15
15
  if (name) {
@@ -22,7 +22,7 @@ export const createNotebook = async ({ app, name, url, options }) => {
22
22
  const text = nbmodelText.replaceAll('\n', `
23
23
  `);
24
24
  notebook.context.model.fromJSON({
25
- ...JSON.parse(text)
25
+ ...JSON.parse(text),
26
26
  });
27
27
  }
28
28
  };
@@ -32,6 +32,6 @@ export const createNotebookVariant = async (app, name, url) => {
32
32
  const nbmodel = await fetch(url);
33
33
  const text = (await nbmodel.text()).replaceAll('\\n', '');
34
34
  notebook.context.model.fromJSON({
35
- ...JSON.parse(text)
35
+ ...JSON.parse(text),
36
36
  });
37
37
  };
@@ -3,19 +3,23 @@
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
5
  const LOOKUP_VALUE_SYMBOL = [
6
- { value: 1, symbol: "" },
7
- { value: 1e3, symbol: "K" },
8
- { value: 1e6, symbol: "M" },
9
- { value: 1e9, symbol: "G" },
10
- { value: 1e12, symbol: "T" },
11
- { value: 1e15, symbol: "P" },
12
- { value: 1e18, symbol: "E" },
6
+ { value: 1, symbol: '' },
7
+ { value: 1e3, symbol: 'K' },
8
+ { value: 1e6, symbol: 'M' },
9
+ { value: 1e9, symbol: 'G' },
10
+ { value: 1e12, symbol: 'T' },
11
+ { value: 1e15, symbol: 'P' },
12
+ { value: 1e18, symbol: 'E' },
13
13
  ];
14
14
  // https://stackoverflow.com/questions/9461621/format-a-number-as-2-5k-if-a-thousand-or-more-otherwise-900
15
15
  export function numberFormatter(num, digits = 1) {
16
16
  const rx = /\.0+$|(\.[0-9]*[1-9])0+$/;
17
- const item = LOOKUP_VALUE_SYMBOL.slice().reverse().find(function (item) {
17
+ const item = LOOKUP_VALUE_SYMBOL.slice()
18
+ .reverse()
19
+ .find(function (item) {
18
20
  return num >= item.value;
19
21
  });
20
- return item ? (num / item.value).toFixed(digits).replace(rx, "$1") + item.symbol : "0";
22
+ return item
23
+ ? (num / item.value).toFixed(digits).replace(rx, '$1') + item.symbol
24
+ : '0';
21
25
  }
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) 2023-2025 Datalayer, Inc.
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
- import { getDate, getDaysInMonth, getMonth, isSameMonth, isSameYear } from 'date-fns';
5
+ import { getDate, getDaysInMonth, getMonth, isSameMonth, isSameYear, } from 'date-fns';
6
6
  /**
7
7
  * Compute the data for plotting the usage histogram.
8
8
  *
@@ -26,7 +26,7 @@ export function createHistogram(usages, interval, range) {
26
26
  ? c.credits
27
27
  : ((end - start.getTime()) * c.burningRate) / 1000,
28
28
  // getDate is 1-based but getMonth is 0-based
29
- category: interval === 0 ? getDate(start) - 1 : getMonth(start)
29
+ category: interval === 0 ? getDate(start) - 1 : getMonth(start),
30
30
  };
31
31
  })
32
32
  .reduce((agg, d) => {
@@ -49,8 +49,8 @@ export function createHistogram(usages, interval, range) {
49
49
  'Sep',
50
50
  'Oct',
51
51
  'Nov',
52
- 'Dec'
52
+ 'Dec',
53
53
  ],
54
- y: credits
54
+ y: credits,
55
55
  };
56
56
  }
@@ -8,7 +8,7 @@ export const takeHTMLNodeScreenshot = async (node) => {
8
8
  width: node.getBoundingClientRect().width,
9
9
  height: node.getBoundingClientRect().height,
10
10
  });
11
- return sc.then((canvas) => {
11
+ return sc.then(canvas => {
12
12
  const croppedCanvas = document.createElement('canvas');
13
13
  const croppedCanvasContext = croppedCanvas.getContext('2d');
14
14
  const top = 0;
@@ -3,6 +3,6 @@
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
5
  export const sleep = async (ms) => {
6
- return new Promise((resolve) => setTimeout(resolve, ms));
6
+ return new Promise(resolve => setTimeout(resolve, ms));
7
7
  };
8
8
  export default sleep;
@@ -2,13 +2,13 @@
2
2
  * Copyright (c) 2023-2025 Datalayer, Inc.
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
- import { adjectives, animals, uniqueNamesGenerator } from 'unique-names-generator';
5
+ import { adjectives, animals, uniqueNamesGenerator, } from 'unique-names-generator';
6
6
  /**
7
7
  * Kernel snapshot description configuration.
8
8
  */
9
9
  const KERNEL_SNAPSHOT_DESCRIPTION_CONFIGURATION = {
10
10
  dictionaries: [adjectives, animals],
11
- separator: '-'
11
+ separator: '-',
12
12
  };
13
13
  /**
14
14
  * Create an unique human readable kernel snapshot name.
@@ -4,10 +4,10 @@
4
4
  */
5
5
  export const strip = (s, max = 50) => {
6
6
  if (!s) {
7
- return "";
7
+ return '';
8
8
  }
9
9
  if (s.length > max) {
10
- return s.substring(0, max) + "";
10
+ return s.substring(0, max) + '';
11
11
  }
12
12
  return s;
13
13
  };
package/lib/utils/Uri.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
5
  export const currentUri = () => {
6
- return window.location.protocol + "//" + window.location.host;
6
+ return window.location.protocol + '//' + window.location.host;
7
7
  };
8
8
  // https://stackoverflow.com/questions/12168909/blob-from-dataurl
9
9
  export const dataURItoBlob = (dataURI) => {
@@ -3,14 +3,11 @@ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  * Copyright (c) 2023-2025 Datalayer, Inc.
4
4
  * Distributed under the terms of the Modified BSD License.
5
5
  */
6
- import { Suspense } from "react";
7
- import { SkeletonBox } from "@primer/react/experimental";
6
+ import { Suspense } from 'react';
7
+ import { SkeletonBox } from '@primer/react/experimental';
8
8
  const Loading = (props) => {
9
9
  const { skeleton } = props;
10
- return (skeleton ?
11
- _jsx(_Fragment, { children: _jsx(SkeletonBox, { height: "100px" }) })
12
- :
13
- _jsx(_Fragment, {}));
10
+ return skeleton ? (_jsx(_Fragment, { children: _jsx(SkeletonBox, { height: "100px" }) })) : (_jsx(_Fragment, {}));
14
11
  };
15
12
  export const WithSuspense = (Component, preload = true, skeleton = false) => (props) => {
16
13
  if (preload) {
@@ -0,0 +1,16 @@
1
+ declare class Logger {
2
+ private scope;
3
+ private isDevelopment;
4
+ constructor(scope: string);
5
+ private log;
6
+ debug(message: string, ...args: any[]): void;
7
+ info(message: string, ...args: any[]): void;
8
+ warn(message: string, ...args: any[]): void;
9
+ error(message: string, ...args: any[]): void;
10
+ }
11
+ export declare function createLogger(scope: string): Logger;
12
+ export declare const coreLogger: Logger;
13
+ export declare const apiLogger: Logger;
14
+ export declare const stateLogger: Logger;
15
+ export declare const configLogger: Logger;
16
+ export {};
@@ -0,0 +1,52 @@
1
+ /*
2
+ * Copyright (c) 2023-2025 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ class Logger {
6
+ scope;
7
+ isDevelopment;
8
+ constructor(scope) {
9
+ this.scope = scope;
10
+ this.isDevelopment = process.env.NODE_ENV === 'development';
11
+ }
12
+ log(level, message, ...args) {
13
+ if (!this.isDevelopment && level === 'debug') {
14
+ return;
15
+ }
16
+ const timestamp = new Date().toISOString();
17
+ const prefix = `[${timestamp}] [${this.scope}] [${level.toUpperCase()}]`;
18
+ switch (level) {
19
+ case 'debug':
20
+ console.debug(prefix, message, ...args);
21
+ break;
22
+ case 'info':
23
+ console.info(prefix, message, ...args);
24
+ break;
25
+ case 'warn':
26
+ console.warn(prefix, message, ...args);
27
+ break;
28
+ case 'error':
29
+ console.error(prefix, message, ...args);
30
+ break;
31
+ }
32
+ }
33
+ debug(message, ...args) {
34
+ this.log('debug', message, ...args);
35
+ }
36
+ info(message, ...args) {
37
+ this.log('info', message, ...args);
38
+ }
39
+ warn(message, ...args) {
40
+ this.log('warn', message, ...args);
41
+ }
42
+ error(message, ...args) {
43
+ this.log('error', message, ...args);
44
+ }
45
+ }
46
+ export function createLogger(scope) {
47
+ return new Logger(scope);
48
+ }
49
+ export const coreLogger = createLogger('core');
50
+ export const apiLogger = createLogger('api');
51
+ export const stateLogger = createLogger('state');
52
+ export const configLogger = createLogger('config');
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "@datalayer/core",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "type": "module",
5
+ "workspaces": [
6
+ ".",
7
+ "examples/*"
8
+ ],
5
9
  "author": {
6
10
  "name": "Datalayer",
7
11
  "email": "info@datalayer.io"
@@ -43,7 +47,20 @@
43
47
  "dev": "vite",
44
48
  "build": "gulp resources-to-lib && tsc -b && vite build",
45
49
  "build:lib": "gulp resources-to-lib && tsc -b",
46
- "lint": "eslint .",
50
+ "build:nextjs": "npm run build --workspace=nextjs-notebook-example",
51
+ "build:electron": "npm run build --workspace=@datalayer/electron-example",
52
+ "build:examples": "npm run build:nextjs && npm run build:electron",
53
+ "build:all": "npm run build && npm run build:examples",
54
+ "lint": "eslint . --quiet",
55
+ "lint:fix": "eslint . --fix",
56
+ "lint:all": "npm run lint && npm run lint --workspaces --if-present",
57
+ "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,css,json,md}\" \"examples/**/*.{js,jsx,ts,tsx,css,json,md,mjs}\"",
58
+ "format:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx,css,json,md}\" \"examples/**/*.{js,jsx,ts,tsx,css,json,md,mjs}\"",
59
+ "format:all": "npm run format && npm run format --workspaces --if-present",
60
+ "type-check": "tsc --noEmit",
61
+ "type-check:all": "npm run type-check && npm run type-check --workspaces --if-present",
62
+ "check": "npm run format:check && npm run lint:all && npm run type-check:all",
63
+ "check:fix": "npm run format:all && npm run lint:fix && npm run type-check:all",
47
64
  "preview": "vite preview",
48
65
  "start": "vite",
49
66
  "clean": "rimraf lib tsconfig.tsbuildinfo",
@@ -57,11 +74,15 @@
57
74
  "typedoc": "typedoc --options typedoc.json --out docs/docs/typescript_api",
58
75
  "watch:lib": "run-p 'watch:lib:*'",
59
76
  "watch:lib:res": "gulp resources-to-lib-watch",
60
- "watch:lib:src": "tsc -b -w"
77
+ "watch:lib:src": "tsc -b -w",
78
+ "example": "vite --config vite.examples.config.ts",
79
+ "example:nextjs": "npm run dev --workspace=nextjs-notebook-example",
80
+ "example:electron": "cd examples/electron && npm run dev",
81
+ "prepare": "husky"
61
82
  },
62
83
  "dependencies": {
63
84
  "@datalayer/icons-react": "^1.0.6",
64
- "@datalayer/jupyter-react": "^1.0.5",
85
+ "@datalayer/jupyter-react": "^1.1.0",
65
86
  "@datalayer/primer-addons": "^1.0.3",
66
87
  "@datalayer/primer-rjsf": "^1.0.1",
67
88
  "@jupyterlab/coreutils": "^6.0.0",
@@ -89,7 +110,6 @@
89
110
  "react": "18.3.1",
90
111
  "react-confetti": "^6.4.0",
91
112
  "react-dom": "18.3.1",
92
- "react-router-dom": "^6.22.3",
93
113
  "tus-js-client": "^4.2.3",
94
114
  "ulid": "^2.3.0",
95
115
  "unique-names-generator": "^4.7.1",
@@ -97,9 +117,18 @@
97
117
  "validator": "^13.7.0",
98
118
  "zustand": "^4.4.1"
99
119
  },
120
+ "peerDependencies": {
121
+ "react-router-dom": "^6.0.0"
122
+ },
123
+ "peerDependenciesMeta": {
124
+ "react-router-dom": {
125
+ "optional": true
126
+ }
127
+ },
100
128
  "devDependencies": {
101
129
  "@chromatic-com/storybook": "^4.1.0",
102
130
  "@eslint/js": "^9.29.0",
131
+ "react-router-dom": "^6.22.3",
103
132
  "@storybook/addon-a11y": "^9.1.1",
104
133
  "@storybook/addon-docs": "^9.1.1",
105
134
  "@storybook/addon-onboarding": "^9.1.1",
@@ -114,6 +143,9 @@
114
143
  "@vitest/coverage-v8": "^3.2.4",
115
144
  "crypto-browserify": "^3.12.1",
116
145
  "eslint": "^9.29.0",
146
+ "eslint-config-prettier": "^10.1.8",
147
+ "eslint-plugin-prettier": "^5.5.4",
148
+ "eslint-plugin-react": "^7.37.5",
117
149
  "eslint-plugin-react-hooks": "^5.2.0",
118
150
  "eslint-plugin-react-refresh": "^0.4.20",
119
151
  "eslint-plugin-storybook": "^9.1.1",
@@ -122,9 +154,12 @@
122
154
  "gulp-append-prepend": "^1.0.8",
123
155
  "gulp-filter": "^6.0.0",
124
156
  "gulp-watch": "^5.0.1",
157
+ "husky": "^9.1.7",
125
158
  "jsdom": "^26.0.0",
159
+ "lint-staged": "^16.1.5",
126
160
  "npm-run-all": "^4.1.5",
127
161
  "playwright": "^1.53.2",
162
+ "prettier": "^3.6.2",
128
163
  "rimraf": "^6.0.1",
129
164
  "storybook": "^9.1.1",
130
165
  "typedoc-plugin-markdown": "^4.0.0",
@@ -148,5 +183,14 @@
148
183
  "react": "18.3.1",
149
184
  "react-dom": "18.3.1",
150
185
  "typescript": "^5.8.3"
186
+ },
187
+ "lint-staged": {
188
+ "src/**/*.{js,jsx,ts,tsx}": [
189
+ "prettier --write",
190
+ "eslint --fix"
191
+ ],
192
+ "src/**/*.{css,json,md}": [
193
+ "prettier --write"
194
+ ]
151
195
  }
152
196
  }
@@ -1,17 +0,0 @@
1
- /*
2
- * Copyright (c) 2023-2025 Datalayer, Inc.
3
- * Distributed under the terms of the Modified BSD License.
4
- */
5
- import { describe, it, expect } from 'vitest';
6
- import { App } from '../App';
7
- describe('App Component', () => {
8
- it('should be a function component', () => {
9
- expect(typeof App).toBe('function');
10
- });
11
- it('should be defined', () => {
12
- expect(App).toBeDefined();
13
- });
14
- it('component name should be App', () => {
15
- expect(App.name).toBe('App');
16
- });
17
- });