diff --git a/CHANGELOG.md b/CHANGELOG.md index 50f80354f77..866e507b9f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -197,6 +197,9 @@ visualization size by dragging its right and bottom borders. Visualization width also follows the node's width, and visualizations are aligned to the left side of the node. +- [Help chat][7151]. The link to the Discord server is replaced with a chat + bridge to the Discord server. This is intended to have the chat visible at the + same time as the IDE, so that help can be much more interactive. [5910]: https://github.com/enso-org/enso/pull/5910 [6279]: https://github.com/enso-org/enso/pull/6279 @@ -215,6 +218,7 @@ [7028]: https://github.com/enso-org/enso/pull/7028 [7014]: https://github.com/enso-org/enso/pull/7014 [7146]: https://github.com/enso-org/enso/pull/7146 +[7151]: https://github.com/enso-org/enso/pull/7151 [7164]: https://github.com/enso-org/enso/pull/7164 #### EnsoGL (rendering engine) diff --git a/app/ide-desktop/eslint.config.js b/app/ide-desktop/eslint.config.js index be4aa78ec6b..12108e0f8cc 100644 --- a/app/ide-desktop/eslint.config.js +++ b/app/ide-desktop/eslint.config.js @@ -40,7 +40,7 @@ const STRING_LITERAL = ':matches(Literal[raw=/^["\']/], TemplateLiteral)' const JSX = ':matches(JSXElement, JSXFragment)' const NOT_PASCAL_CASE = '/^(?!_?([A-Z][a-z0-9]*)+$)/' const NOT_CAMEL_CASE = '/^(?!_?[a-z][a-z0-9*]*([A-Z0-9][a-z0-9]*)*$)(?!React$)/' -const WHITELISTED_CONSTANTS = 'logger|.+Context' +const WHITELISTED_CONSTANTS = 'logger|.+Context|interpolationFunction.+' const NOT_CONSTANT_CASE = `/^(?!${WHITELISTED_CONSTANTS}$|_?[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$)/` // ======================================= diff --git a/app/ide-desktop/lib/assets/close_large.svg b/app/ide-desktop/lib/assets/close_large.svg new file mode 100644 index 00000000000..03e9a809df1 --- /dev/null +++ b/app/ide-desktop/lib/assets/close_large.svg @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/app/ide-desktop/lib/assets/triangle_down.svg b/app/ide-desktop/lib/assets/triangle_down.svg new file mode 100644 index 00000000000..1e84ce1e4d3 --- /dev/null +++ b/app/ide-desktop/lib/assets/triangle_down.svg @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/app/ide-desktop/lib/content/src/index.html b/app/ide-desktop/lib/content/src/index.html index 0799963293a..87bdfb12d80 100644 --- a/app/ide-desktop/lib/content/src/index.html +++ b/app/ide-desktop/lib/content/src/index.html @@ -38,10 +38,16 @@ +
+ diff --git a/app/ide-desktop/lib/dashboard/package.json b/app/ide-desktop/lib/dashboard/package.json index 612efd50f8a..c098dc61dbb 100644 --- a/app/ide-desktop/lib/dashboard/package.json +++ b/app/ide-desktop/lib/dashboard/package.json @@ -26,6 +26,7 @@ "@typescript-eslint/eslint-plugin": "^5.49.0", "@typescript-eslint/parser": "^5.49.0", "enso-authentication": "^1.0.0", + "enso-chat": "git://github.com/enso-org/enso-bot#wip/sb/initial-implementation", "enso-content": "^1.0.0", "eslint": "^8.32.0", "eslint-plugin-jsdoc": "^39.6.8", diff --git a/app/ide-desktop/lib/dashboard/src/authentication/src/animations.tsx b/app/ide-desktop/lib/dashboard/src/authentication/src/animations.tsx new file mode 100644 index 00000000000..41607153b76 --- /dev/null +++ b/app/ide-desktop/lib/dashboard/src/authentication/src/animations.tsx @@ -0,0 +1,171 @@ +/** @file Functions to manually animate values over time. + * This is useful if the values need to be known before paint. + * + * See MDN for information on the easing functions defined in this module: + * https://developer.mozilla.org/en-US/docs/Web/CSS/easing-function */ +import * as react from 'react' + +// ================= +// === Constants === +// ================= +/** The number of times the segment from 0 to 1 will be bisected to find the x-value for + * a cubic bezier curve. */ +const CUBIC_BEZIER_BISECTIONS = 10 + +/** Accepts a parameter containing the actual progress as a fraction between 0 and 1 inclusive, + * and returns the fraction. */ +export type InterpolationFunction = (progress: number) => number + +/** Interpolates between two values over time */ +export function useInterpolateOverTime( + interpolationFunction: InterpolationFunction, + durationMs: number, + initialValue = 0 +): [value: number, setTargetValue: react.Dispatch