This is an automated email from the ASF dual-hosted git repository.

voidmatcha pushed a commit to branch 
branch-voidmatcha-assistant-integration-temp
in repository https://gitbox.apache.org/repos/asf/zeppelin.git

commit 5783b38d0f6949b3410ceae5e443d5cc23a8e6d4
Author: kimyenac <[email protected]>
AuthorDate: Tue Oct 13 16:24:11 2026 +0900

    [ZEPPELIN-6746] Add AI Assistant composer stories
---
 .../assistant/ui/AssistantComposer.stories.tsx     | 64 ++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git 
a/zeppelin-web-angular/projects/zeppelin-react/src/entities/assistant/ui/AssistantComposer.stories.tsx
 
b/zeppelin-web-angular/projects/zeppelin-react/src/entities/assistant/ui/AssistantComposer.stories.tsx
new file mode 100644
index 0000000000..46448d5541
--- /dev/null
+++ 
b/zeppelin-web-angular/projects/zeppelin-react/src/entities/assistant/ui/AssistantComposer.stories.tsx
@@ -0,0 +1,64 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import type { Meta, StoryObj } from '@storybook/react-vite';
+import { useState } from 'react';
+import { fn } from 'storybook/test';
+import { AssistantComposer } from './AssistantComposer';
+
+const meta = {
+  title: 'Assistant/Composer',
+  component: AssistantComposer,
+  args: { value: '', onChange: fn(), onSubmit: fn() }
+} satisfies Meta<typeof AssistantComposer>;
+
+export default meta;
+type Story = StoryObj<typeof meta>;
+
+export const Empty: Story = {};
+
+export const Draft: Story = {
+  args: { value: 'Explain how this notebook calculates revenue.' }
+};
+
+export const WhitespaceOnly: Story = {
+  args: { value: '   \n  ' }
+};
+
+export const Sending: Story = {
+  args: { value: 'Explain how this notebook calculates revenue.', sending: 
true }
+};
+
+export const ReadOnly: Story = {
+  args: { readOnly: true, readOnlyReason: 'This conversation belongs to 
another user.' }
+};
+
+/** Type and send: the question is logged in the Actions panel and the input 
is cleared, as a parent would do. */
+export const Playground: Story = {
+  render: function Render(args) {
+    const [value, setValue] = useState(args.value);
+    return (
+      <AssistantComposer
+        {...args}
+        value={value}
+        onChange={next => {
+          setValue(next);
+          args.onChange(next);
+        }}
+        onSubmit={question => {
+          args.onSubmit(question);
+          setValue('');
+        }}
+      />
+    );
+  }
+};

Reply via email to