diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index e5ba67a85..6e9dbd172 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,9 +1,9 @@ // For format details, see https://aka.ms/devcontainer.json. For config options, see the // README at: https://github.com/devcontainers/templates/tree/main/src/python { - "name": "Python 3.12 with Node", + "name": "Python 3.11 with Node", // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - "image": "mcr.microsoft.com/devcontainers/python:1-3.12-bullseye", + "image": "mcr.microsoft.com/devcontainers/python:1-3.11-bullseye", "features": { "ghcr.io/devcontainers/features/node:1": { "nodeGypDependencies": true, diff --git a/src/streamsync/core.py b/src/streamsync/core.py index 793d570d0..879cd3fe1 100644 --- a/src/streamsync/core.py +++ b/src/streamsync/core.py @@ -674,6 +674,14 @@ def _transform_page_open(self, ev) -> str: payload = str(ev.payload) return payload + def _transform_chat_message(self, ev) -> str: + payload = str(ev.payload) + return payload + + def _transform_chat_action_click(self, ev) -> str: + payload = str(ev.payload) + return payload + def _transform_change(self, ev) -> str: payload = str(ev.payload) return payload diff --git a/ui/src/core/templateMap.ts b/ui/src/core/templateMap.ts index d6f707ac2..19373dc9d 100644 --- a/ui/src/core/templateMap.ts +++ b/ui/src/core/templateMap.ts @@ -10,6 +10,7 @@ import CorePlotlyGraph from "../core_components/content/CorePlotlyGraph.vue"; import CoreText from "../core_components/content/CoreText.vue"; import CoreVegaLiteChart from "../core_components/content/CoreVegaLiteChart.vue"; import CoreVideoPlayer from "../core_components/content/CoreVideoPlayer.vue"; +import CoreChat from "../core_components/content/CoreChat.vue"; // input import CoreCheckboxInput from "../core_components/input/CoreCheckboxInput.vue"; import CoreDateInput from "../core_components/input/CoreDateInput.vue"; @@ -22,6 +23,7 @@ import CoreSelectInput from "../core_components/input/CoreSelectInput.vue"; import CoreSliderInput from "../core_components/input/CoreSliderInput.vue"; import CoreTextInput from "../core_components/input/CoreTextInput.vue"; import CoreTextareaInput from "../core_components/input/CoreTextareaInput.vue"; +import CoreRating from "../core_components/input/CoreRatingInput.vue"; // layout import CoreColumn from "../core_components/layout/CoreColumn.vue"; import CoreColumns from "../core_components/layout/CoreColumns.vue"; @@ -32,6 +34,8 @@ import CoreSeparator from "../core_components/layout/CoreSeparator.vue"; import CoreSidebar from "../core_components/layout/CoreSidebar.vue"; import CoreTab from "../core_components/layout/CoreTab.vue"; import CoreTabs from "../core_components/layout/CoreTabs.vue"; +import CoreStep from "../core_components/layout/CoreStep.vue"; +import CoreSteps from "../core_components/layout/CoreSteps.vue"; // other import CoreButton from "../core_components/other/CoreButton.vue"; import CoreHtml from "../core_components/other/CoreHtml.vue"; @@ -95,6 +99,10 @@ const templateMap = { metric: CoreMetric, message: CoreMessage, videoplayer: CoreVideoPlayer, + chat: CoreChat, + step: CoreStep, + steps: CoreSteps, + ratinginput: CoreRating }; if (STREAMSYNC_LIVE_CCT === "yes") { diff --git a/ui/src/core_components/base/BaseMarkdown.vue b/ui/src/core_components/base/BaseMarkdown.vue new file mode 100644 index 000000000..3d115133f --- /dev/null +++ b/ui/src/core_components/base/BaseMarkdown.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/ui/src/core_components/content/CoreChat.vue b/ui/src/core_components/content/CoreChat.vue new file mode 100644 index 000000000..280eedb7a --- /dev/null +++ b/ui/src/core_components/content/CoreChat.vue @@ -0,0 +1,519 @@ + + + + + diff --git a/ui/src/core_components/content/CoreMessage.vue b/ui/src/core_components/content/CoreMessage.vue index ddaa3f375..a840625de 100644 --- a/ui/src/core_components/content/CoreMessage.vue +++ b/ui/src/core_components/content/CoreMessage.vue @@ -87,7 +87,6 @@ export default { }, previewField: "name", }, - components: { LoadingSymbol }, }; diff --git a/ui/src/core_components/input/CoreRatingInput.vue b/ui/src/core_components/input/CoreRatingInput.vue new file mode 100644 index 000000000..03a98ba60 --- /dev/null +++ b/ui/src/core_components/input/CoreRatingInput.vue @@ -0,0 +1,333 @@ + + + + + + + diff --git a/ui/src/core_components/layout/CoreStep.vue b/ui/src/core_components/layout/CoreStep.vue new file mode 100644 index 000000000..7034ede9d --- /dev/null +++ b/ui/src/core_components/layout/CoreStep.vue @@ -0,0 +1,401 @@ + + + + + + diff --git a/ui/src/core_components/layout/CoreSteps.vue b/ui/src/core_components/layout/CoreSteps.vue new file mode 100644 index 000000000..aea30fb8d --- /dev/null +++ b/ui/src/core_components/layout/CoreSteps.vue @@ -0,0 +1,111 @@ + + + + + + diff --git a/ui/src/renderer/sharedStyles.css b/ui/src/renderer/sharedStyles.css index 6616c1083..6afef58df 100644 --- a/ui/src/renderer/sharedStyles.css +++ b/ui/src/renderer/sharedStyles.css @@ -133,6 +133,7 @@ button:hover { [data-streamsync-container].crackedContainer.horizontal > [data-streamsync-slot-of-id] { animation: appearHorizontal 0.2s forwards; + align-self:center; display: block; }