From fe974ad8c798ba9fd77cfd2e6ba4d2ec2e6f0b25 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Mon, 26 Jan 2026 17:43:40 -0600
Subject: [PATCH 01/22] HLD updates for message type
---
.../src/chat/specs/README.md | 68 +++++++++++++------
1 file changed, 46 insertions(+), 22 deletions(-)
diff --git a/packages/spright-components/src/chat/specs/README.md b/packages/spright-components/src/chat/specs/README.md
index 503e6f260e..618f3cb2fa 100644
--- a/packages/spright-components/src/chat/specs/README.md
+++ b/packages/spright-components/src/chat/specs/README.md
@@ -5,7 +5,10 @@
This spec describes a set of components that can be used to compose a chat interface. This includes:
- chat input: a text input, button, and related components for users to compose and send new messages
-- chat message: a single entry in a chat conversation, including some content and metadata about the message
+- chat messages: each a single entry in a chat conversation, including some content and metadata about the message
+ - inbound
+ - system
+ - outbound
- chat conversation: a layout component that allows slotting messages and an input
### Background
@@ -40,12 +43,24 @@ The message component will allow slotting arbitrary content, but any efforts to
#### Chat message
-The `spright-chat-message` has the following slot elements.
+##### Common features
+
+The all Spright chat messages have the following slot elements.
1. `default` slot displays arbitrary slotted content. For example: text, rich text, buttons, images, or a spinner.
+
+The components also contains the following features:
+
+1. Layout content to the right, center, or left of parent container depending on the type of the message
+1. Size based on content size with maximum width (but not height) based on parent's width.
+1. Change the styling of the message depending on the type of message. For example: render outbound messages in a bubble with the tail pointing to the right but render system messages with no styling.
+
+##### Inbound message additional features
+
+In addition, inbound messages will add support these slots:
+
1. `footer-actions` slot which is used to add action buttons below the main content.
1. `end` slot which is used to add text buttons. They are below any action buttons.
-
Nimble will set the height of the action buttons to `$ni-nimble-control-slim-height`. All action buttons must meet the following criteria
1. They are `nimble-button`s or any other button variant (toggle button, menu button, etc)
@@ -59,12 +74,6 @@ All end text buttons must meet the following criteria
1. The `apperance` attribute is set to `block`
1. The buttons only have text
-The component also contains the following features:
-
-1. Layout content to the right, center, or left of parent container depending on metadata about who sent the message.
-1. Size based on content size with maximum width (but not height) based on parent's width.
-1. Change the styling of the message depending on metadata about who sent the message. For example: render user messages in a bubble with the tail pointing to the right but render system messages with no styling.
-
#### Chat conversation
1. Lays out messages vertically based on their order.
@@ -118,15 +127,15 @@ These components are competing against possible implementations within applicati
```html
-
+
Hi, how can I help?
-
-
+
+
I need to analyze my data to find anomalies.
-
-
+
+
-
+
+
-
+
```
@@ -150,10 +159,10 @@ richText.markdown = 'Welcome **Homer**, how can I help?';
```html
-
+
Help with my taxes
Provide me some life advice
-
+
```
@@ -165,11 +174,18 @@ richText.markdown = 'Welcome **Homer**, how can I help?';
### API
-#### Message
+#### Messages
+
+Message components will be created with the following names:
+- `spright-chat-message-inbound`
+- `spright-chat-message-outbound`
+- `spright-chat-message-system`
+
+##### Messages common API
+
+All message types will share the following API:
-- _Component Name_ `spright-chat-message`
- _Props/Attrs_
- - `message-type = "inbound" | "outbound" | "system"`
- _Methods_
- _Events_
- _CSS Classes and CSS Custom Properties that affect the component_
@@ -185,6 +201,14 @@ richText.markdown = 'Welcome **Homer**, how can I help?';
- `(default)`
- arbitrary content can be added to the default slot to be displayed within the message
+##### Inbound message additional API
+
+- _Slots_
+ - `footer-actions`
+ - Action buttons to display after the main content.
+ - `end`
+ - Buttons with text that are displayed at the bottom after any action buttons.
+
#### Conversation
- _Component Name_ `spright-chat-conversation`
From 12b05d5dcfa04855cb0c76686d05103f0c3c2807 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Mon, 26 Jan 2026 18:20:51 -0600
Subject: [PATCH 02/22] spright-components changes
---
.../src/chat/message/base/index.ts | 9 +++
.../src/chat/message/inbound/index.ts | 53 ++++++++++++++
.../src/chat/message/inbound/styles.ts | 73 +++++++++++++++++++
.../src/chat/message/inbound/template.ts | 21 ++++++
.../src/chat/message/outbound/index.ts | 27 +++++++
.../src/chat/message/outbound/styles.ts | 45 ++++++++++++
.../src/chat/message/outbound/template.ts | 15 ++++
.../src/chat/message/system/index.ts | 27 +++++++
.../src/chat/message/system/styles.ts | 34 +++++++++
.../src/chat/message/system/template.ts | 15 ++++
10 files changed, 319 insertions(+)
create mode 100644 packages/spright-components/src/chat/message/base/index.ts
create mode 100644 packages/spright-components/src/chat/message/inbound/index.ts
create mode 100644 packages/spright-components/src/chat/message/inbound/styles.ts
create mode 100644 packages/spright-components/src/chat/message/inbound/template.ts
create mode 100644 packages/spright-components/src/chat/message/outbound/index.ts
create mode 100644 packages/spright-components/src/chat/message/outbound/styles.ts
create mode 100644 packages/spright-components/src/chat/message/outbound/template.ts
create mode 100644 packages/spright-components/src/chat/message/system/index.ts
create mode 100644 packages/spright-components/src/chat/message/system/styles.ts
create mode 100644 packages/spright-components/src/chat/message/system/template.ts
diff --git a/packages/spright-components/src/chat/message/base/index.ts b/packages/spright-components/src/chat/message/base/index.ts
new file mode 100644
index 0000000000..d92bd765e7
--- /dev/null
+++ b/packages/spright-components/src/chat/message/base/index.ts
@@ -0,0 +1,9 @@
+import {
+ FoundationElement,
+} from '@ni/fast-foundation';
+
+/**
+ * A Spright component base class for displaying a chat message
+ */
+export abstract class ChatMessageBase extends FoundationElement {
+}
diff --git a/packages/spright-components/src/chat/message/inbound/index.ts b/packages/spright-components/src/chat/message/inbound/index.ts
new file mode 100644
index 0000000000..08a66ac1c1
--- /dev/null
+++ b/packages/spright-components/src/chat/message/inbound/index.ts
@@ -0,0 +1,53 @@
+import { observable } from '@ni/fast-element';
+import {
+ applyMixins,
+ DesignSystem,
+ FoundationElement,
+ StartEnd,
+ type FoundationElementDefinition,
+ type StartEndOptions
+} from '@ni/fast-foundation';
+import { styles } from './styles';
+import { template } from './template';
+
+declare global {
+ interface HTMLElementTagNameMap {
+ 'spright-chat-message-inbound': ChatMessageInbound;
+ }
+}
+
+/**
+ * SprightChatMessageInbound configuration options
+ * @public
+ */
+export type ChatMessageInboundOptions = FoundationElementDefinition & StartEndOptions;
+
+/**
+ * A Spright component for displaying a chat message
+ */
+export class ChatMessageInbound extends FoundationElement {
+ /** @internal */
+ @observable
+ public footerActionsIsEmpty = true;
+
+ /** @internal */
+ @observable
+ public readonly slottedFooterActionsElements?: HTMLElement[];
+
+ public slottedFooterActionsElementsChanged(
+ _prev: HTMLElement[] | undefined,
+ next: HTMLElement[] | undefined
+ ): void {
+ this.footerActionsIsEmpty = !next?.length;
+ }
+}
+applyMixins(ChatMessageInbound, StartEnd);
+
+const sprightChatMessageInbound = ChatMessageInbound.compose({
+ baseName: 'chat-message-inbound',
+ template,
+ styles
+});
+
+DesignSystem.getOrCreate().withPrefix('spright').register(sprightChatMessageInbound());
+export const chatMessageInboundTag = 'spright-chat-message-inbound';
diff --git a/packages/spright-components/src/chat/message/inbound/styles.ts b/packages/spright-components/src/chat/message/inbound/styles.ts
new file mode 100644
index 0000000000..d1b90b7e8d
--- /dev/null
+++ b/packages/spright-components/src/chat/message/inbound/styles.ts
@@ -0,0 +1,73 @@
+import { css } from '@ni/fast-element';
+import { anchorButtonTag } from '@ni/nimble-components/dist/esm/anchor-button';
+import { buttonTag } from '@ni/nimble-components/dist/esm/button';
+import { menuButtonTag } from '@ni/nimble-components/dist/esm/menu-button';
+import { toggleButtonTag } from '@ni/nimble-components/dist/esm/toggle-button';
+
+import {
+ bodyFont,
+ bodyFontColor,
+ controlSlimHeight,
+ largePadding,
+ mediumPadding,
+ standardPadding
+} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';
+import { display } from '../../../utilities/style/display';
+
+export const styles = css`
+ ${display('flex')}
+
+ :host {
+ min-width: 16px;
+ min-height: 16px;
+
+ flex-direction: row;
+ justify-content: flex-start;
+ flex-shrink: 0;
+ font: ${bodyFont};
+ color: ${bodyFontColor};
+ }
+
+ .container {
+ display: flex;
+ flex-direction: column;
+ max-width: calc(90%);
+ }
+
+ [part='start'] {
+ display: none;
+ }
+
+ .message-content {
+ width: fit-content;
+ height: fit-content;
+ overflow-x: auto;
+ }
+
+ .footer-actions {
+ display: none;
+ }
+
+ :host .footer-actions.has-content {
+ display: flex;
+ column-gap: ${standardPadding};
+ margin-top: ${mediumPadding};
+ }
+
+ .footer-actions ::slotted(${buttonTag}),
+ .footer-actions ::slotted(${toggleButtonTag}),
+ .footer-actions ::slotted(${anchorButtonTag}),
+ .footer-actions ::slotted(${menuButtonTag}) {
+ height: ${controlSlimHeight};
+ }
+
+ .end {
+ display: none;
+ }
+
+ :host .end {
+ display: flex;
+ column-gap: ${standardPadding};
+ margin-top: ${largePadding};
+ }
+`;
diff --git a/packages/spright-components/src/chat/message/inbound/template.ts b/packages/spright-components/src/chat/message/inbound/template.ts
new file mode 100644
index 0000000000..3a4b5fdde3
--- /dev/null
+++ b/packages/spright-components/src/chat/message/inbound/template.ts
@@ -0,0 +1,21 @@
+import { html, slotted, ViewTemplate } from '@ni/fast-element';
+import {
+ type FoundationElementTemplate
+} from '@ni/fast-foundation';
+import type { ChatMessageInbound } from '.';
+
+export const template: FoundationElementTemplate<
+ViewTemplate
+> = () => html`
+
+
+
+
+`;
diff --git a/packages/spright-components/src/chat/message/outbound/index.ts b/packages/spright-components/src/chat/message/outbound/index.ts
new file mode 100644
index 0000000000..ed7ea5342a
--- /dev/null
+++ b/packages/spright-components/src/chat/message/outbound/index.ts
@@ -0,0 +1,27 @@
+import {
+ DesignSystem,
+} from '@ni/fast-foundation';
+import { styles } from './styles';
+import { template } from './template';
+import { ChatMessageBase } from '../base';
+
+declare global {
+ interface HTMLElementTagNameMap {
+ 'spright-chat-message-outbound': ChatMessageOutbound;
+ }
+}
+
+/**
+ * A Spright component for displaying an outbound chat message
+ */
+export class ChatMessageOutbound extends ChatMessageBase {
+}
+
+const sprightChatMessageOutbound = ChatMessageOutbound.compose({
+ baseName: 'chat-message-outbound',
+ template,
+ styles
+});
+
+DesignSystem.getOrCreate().withPrefix('spright').register(sprightChatMessageOutbound());
+export const chatMessageOutboundTag = 'spright-chat-message-outbound';
diff --git a/packages/spright-components/src/chat/message/outbound/styles.ts b/packages/spright-components/src/chat/message/outbound/styles.ts
new file mode 100644
index 0000000000..d8dff145e2
--- /dev/null
+++ b/packages/spright-components/src/chat/message/outbound/styles.ts
@@ -0,0 +1,45 @@
+import { css } from '@ni/fast-element';
+
+import {
+ bodyFont,
+ bodyFontColor,
+ borderHoverColor,
+ borderWidth,
+ fillSelectedColor,
+ mediumPadding,
+} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';
+import { display } from '../../../utilities/style/display';
+
+export const styles = css`
+ ${display('flex')}
+
+ :host {
+ min-width: 16px;
+ min-height: 16px;
+
+ flex-direction: row;
+ justify-content: flex-end;
+ flex-shrink: 0;
+ font: ${bodyFont};
+ color: ${bodyFontColor};
+ }
+
+ .container {
+ display: flex;
+ flex-direction: column;
+ max-width: calc(90%);
+ }
+
+ .message-content {
+ width: fit-content;
+ height: fit-content;
+ overflow-x: auto;
+ }
+
+ :host .message-content {
+ background: ${fillSelectedColor};
+ border: ${borderWidth} solid ${borderHoverColor};
+ border-radius: ${mediumPadding} ${mediumPadding} 0px ${mediumPadding};
+ padding: ${mediumPadding};
+ }
+`;
diff --git a/packages/spright-components/src/chat/message/outbound/template.ts b/packages/spright-components/src/chat/message/outbound/template.ts
new file mode 100644
index 0000000000..59452b860a
--- /dev/null
+++ b/packages/spright-components/src/chat/message/outbound/template.ts
@@ -0,0 +1,15 @@
+import { html, ViewTemplate } from '@ni/fast-element';
+import {
+ type FoundationElementTemplate
+} from '@ni/fast-foundation';
+import type { ChatMessageOutbound } from '.';
+
+export const template: FoundationElementTemplate<
+ViewTemplate
+> = () => html`
+
+
+
+`;
diff --git a/packages/spright-components/src/chat/message/system/index.ts b/packages/spright-components/src/chat/message/system/index.ts
new file mode 100644
index 0000000000..06c5d8f182
--- /dev/null
+++ b/packages/spright-components/src/chat/message/system/index.ts
@@ -0,0 +1,27 @@
+import {
+ DesignSystem,
+} from '@ni/fast-foundation';
+import { styles } from './styles';
+import { template } from './template';
+import { ChatMessageBase } from '../base';
+
+declare global {
+ interface HTMLElementTagNameMap {
+ 'spright-chat-message-system': ChatMessageSystem;
+ }
+}
+
+/**
+ * A Spright component for displaying an system chat message
+ */
+export class ChatMessageSystem extends ChatMessageBase {
+}
+
+const sprightChatMessageSystem = ChatMessageSystem.compose({
+ baseName: 'chat-message-system',
+ template,
+ styles
+});
+
+DesignSystem.getOrCreate().withPrefix('spright').register(sprightChatMessageSystem());
+export const chatMessageSystemTag = 'spright-chat-message-system';
diff --git a/packages/spright-components/src/chat/message/system/styles.ts b/packages/spright-components/src/chat/message/system/styles.ts
new file mode 100644
index 0000000000..697bab64c2
--- /dev/null
+++ b/packages/spright-components/src/chat/message/system/styles.ts
@@ -0,0 +1,34 @@
+import { css } from '@ni/fast-element';
+
+import {
+ bodyFont,
+ bodyFontColor,
+} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';
+import { display } from '../../../utilities/style/display';
+
+export const styles = css`
+ ${display('flex')}
+
+ :host {
+ min-width: 16px;
+ min-height: 16px;
+
+ flex-direction: row;
+ justify-content: center;
+ flex-shrink: 0;
+ font: ${bodyFont};
+ color: ${bodyFontColor};
+ }
+
+ .container {
+ display: flex;
+ flex-direction: column;
+ max-width: calc(90%);
+ }
+
+ .message-content {
+ width: fit-content;
+ height: fit-content;
+ overflow-x: auto;
+ }
+`;
diff --git a/packages/spright-components/src/chat/message/system/template.ts b/packages/spright-components/src/chat/message/system/template.ts
new file mode 100644
index 0000000000..5f9fe81c9f
--- /dev/null
+++ b/packages/spright-components/src/chat/message/system/template.ts
@@ -0,0 +1,15 @@
+import { html, ViewTemplate } from '@ni/fast-element';
+import {
+ type FoundationElementTemplate
+} from '@ni/fast-foundation';
+import type { ChatMessageSystem } from '.';
+
+export const template: FoundationElementTemplate<
+ViewTemplate
+> = () => html`
+
+
+
+`;
From f058079b0451a52a85b6cd9729af48f65530236a Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Mon, 26 Jan 2026 18:20:59 -0600
Subject: [PATCH 03/22] react wrappers
---
.../spright-react/src/chat/message/inbound/index.ts | 4 ++++
.../spright-react/src/chat/message/outbound/index.ts | 4 ++++
.../spright-react/src/chat/message/system/index.ts | 4 ++++
3 files changed, 12 insertions(+)
create mode 100644 packages/react-workspace/spright-react/src/chat/message/inbound/index.ts
create mode 100644 packages/react-workspace/spright-react/src/chat/message/outbound/index.ts
create mode 100644 packages/react-workspace/spright-react/src/chat/message/system/index.ts
diff --git a/packages/react-workspace/spright-react/src/chat/message/inbound/index.ts b/packages/react-workspace/spright-react/src/chat/message/inbound/index.ts
new file mode 100644
index 0000000000..ca4eb54492
--- /dev/null
+++ b/packages/react-workspace/spright-react/src/chat/message/inbound/index.ts
@@ -0,0 +1,4 @@
+import { ChatMessageInbound } from '@ni/spright-components/dist/esm/chat/message/inbound';
+import { wrap } from '../../../utilities/react-wrapper';
+
+export const SprightChatMessageInbound = wrap(ChatMessageInbound);
diff --git a/packages/react-workspace/spright-react/src/chat/message/outbound/index.ts b/packages/react-workspace/spright-react/src/chat/message/outbound/index.ts
new file mode 100644
index 0000000000..4e57115e69
--- /dev/null
+++ b/packages/react-workspace/spright-react/src/chat/message/outbound/index.ts
@@ -0,0 +1,4 @@
+import { ChatMessageOutbound } from '@ni/spright-components/dist/esm/chat/message/outbound';
+import { wrap } from '../../../utilities/react-wrapper';
+
+export const SprightChatMessageOutbound = wrap(ChatMessageOutbound);
diff --git a/packages/react-workspace/spright-react/src/chat/message/system/index.ts b/packages/react-workspace/spright-react/src/chat/message/system/index.ts
new file mode 100644
index 0000000000..b87fa32e8a
--- /dev/null
+++ b/packages/react-workspace/spright-react/src/chat/message/system/index.ts
@@ -0,0 +1,4 @@
+import { ChatMessageSystem } from '@ni/spright-components/dist/esm/chat/message/system';
+import { wrap } from '../../../utilities/react-wrapper';
+
+export const SprightChatMessageSystem = wrap(ChatMessageSystem);
From 7650e3adb7519586d140bf8f67d63e5726c8074f Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Mon, 26 Jan 2026 18:38:43 -0600
Subject: [PATCH 04/22] storybook
---
.../chat/conversation/chat-conversation.mdx | 41 ++++++---
.../chat/message/chat-message.stories.ts | 89 ++++---------------
2 files changed, 45 insertions(+), 85 deletions(-)
diff --git a/packages/storybook/src/spright/chat/conversation/chat-conversation.mdx b/packages/storybook/src/spright/chat/conversation/chat-conversation.mdx
index cde5ee5858..14e15afde4 100644
--- a/packages/storybook/src/spright/chat/conversation/chat-conversation.mdx
+++ b/packages/storybook/src/spright/chat/conversation/chat-conversation.mdx
@@ -5,7 +5,9 @@ import * as inputStories from '../input/chat-input.stories';
import ComponentApisLink from '../../../docs/component-apis-link.mdx';
import { chatConversationTag } from '@ni/spright-components/dist/esm/chat/conversation';
import { chatInputTag } from '@ni/spright-components/dist/esm/chat/input';
-import { chatMessageTag } from '@ni/spright-components/dist/esm/chat/message';
+import { chatMessageInboundTag } from '@ni/spright-components/dist/esm/chat/message/inbound';
+import { chatMessageOutboundTag } from '@ni/spright-components/dist/esm/chat/message/outbound';
+import { chatMessageSystemTag } from '@ni/spright-components/dist/esm/chat/message/system';
@@ -29,31 +31,42 @@ components, like the input.
-### Chat message
+### Chat messages
-Use the element to display content in a message.
-Clients can place any HTML content within the message.
+Use one of the message types below to display chat messages. Clients can place any HTML content within the message.
-#### Text message content
+#### Inbound message
-
-
+Use the element to display content in an inbound message.
-#### Rich text message content
+##### Rich text inbound message content
-#### Spinner message content
-
-
-
-
-#### Image message content
+##### Image inbound message content
+#### Outbound message
+
+Use the element to display content in an outbound message.
+
+##### Text outbound message content
+
+
+
+
+#### System message
+
+Use the element to display content in a system message.
+
+##### Spinner system message content
+
+
+
+
### Chat input
Use the element to allow the user to create and send
diff --git a/packages/storybook/src/spright/chat/message/chat-message.stories.ts b/packages/storybook/src/spright/chat/message/chat-message.stories.ts
index f3731c8458..8a14638643 100644
--- a/packages/storybook/src/spright/chat/message/chat-message.stories.ts
+++ b/packages/storybook/src/spright/chat/message/chat-message.stories.ts
@@ -2,8 +2,9 @@ import { html, when } from '@ni/fast-element';
import type { Meta, StoryObj } from '@storybook/html-vite';
import { buttonTag } from '@ni/nimble-components/dist/esm/button';
-import { chatMessageTag } from '@ni/spright-components/dist/esm/chat/message';
-import { ChatMessageType } from '@ni/spright-components/dist/esm/chat/message/types';
+import { chatMessageInboundTag } from '@ni/spright-components/dist/esm/chat/message/inbound';
+import { chatMessageOutboundTag } from '@ni/spright-components/dist/esm/chat/message/outbound';
+import { chatMessageSystemTag } from '@ni/spright-components/dist/esm/chat/message/system';
import { richTextViewerTag } from '@ni/nimble-components/dist/esm/rich-text/viewer';
import { spinnerTag } from '@ni/nimble-components/dist/esm/spinner';
import { SpinnerAppearance } from '@ni/nimble-components/dist/esm/spinner/types';
@@ -26,22 +27,14 @@ Nimble will set the height of the buttons to \`$ni-nimble-control-slim-height\`.
const endButtonDescription = 'Place 0 or more buttons with text. They appear below any action buttons. End buttons should only be added to inbound messages.';
-interface ChatMessageArgs {
- messageType: keyof typeof ChatMessageType;
+interface ChatMessageInboundArgs {
footerActions: boolean;
endButtons: boolean;
}
-const metadata: Meta = {
+const metadata: Meta = {
title: 'Internal/Chat Message',
argTypes: {
- messageType: {
- name: 'message-type',
- options: Object.keys(ChatMessageType),
- control: { type: 'radio' },
- description: 'The type of the chat message.',
- table: { category: apiCategory.attributes }
- },
footerActions: {
name: 'footer-actions',
description: footerActionsDescription,
@@ -60,33 +53,15 @@ const metadata: Meta = {
export default metadata;
-interface ChatMessageTextArgs extends ChatMessageArgs {
+interface ChatMessageTextArgs {
text: string;
}
export const chatMessageText: StoryObj = {
render: createUserSelectedThemeStory(html`
- <${chatMessageTag} message-type="${x => ChatMessageType[x.messageType]}">
+ <${chatMessageOutboundTag}>
${x => x.text}
- ${when(x => x.footerActions, html`
- <${buttonTag} slot="footer-actions" appearance="ghost" title="Like" content-hidden>
- <${iconThumbUpTag} slot="start">${iconThumbUpTag}>
- Like
- ${buttonTag}>
- <${buttonTag} slot="footer-actions" appearance="ghost" title="Dislike" content-hidden>
- <${iconThumbDownTag} slot="start">${iconThumbDownTag}>
- Dislike
- ${buttonTag}>
- `)}
- ${when(x => x.endButtons, html`
- <${buttonTag} slot="end" appearance="block">
- Order a tab
- ${buttonTag}>
- <${buttonTag} slot="end" appearance="block">
- Check core temperature
- ${buttonTag}>
- `)}
- ${chatMessageTag}>
+ ${chatMessageInboundTag}>
`),
argTypes: {
text: {
@@ -97,19 +72,16 @@ export const chatMessageText: StoryObj = {
},
args: {
text: 'Aurora Borealis? At this time of year? At this time of day? In this part of the country? Localized entirely within your kitchen?',
- messageType: 'outbound',
- footerActions: false,
- endButtons: false
}
};
-interface ChatMessageRichTextArgs extends ChatMessageArgs {
+interface ChatMessageRichTextArgs extends ChatMessageInboundArgs {
markdown: string;
}
export const chatMessageRichText: StoryObj = {
render: createUserSelectedThemeStory(html`
- <${chatMessageTag} message-type="${x => ChatMessageType[x.messageType]}">
+ <${chatMessageInboundTag}>
<${richTextViewerTag} markdown="${x => x.markdown}">${richTextViewerTag}>
${when(x => x.footerActions, html`
<${buttonTag} slot="footer-actions" appearance="ghost" title="Like" content-hidden>
@@ -129,7 +101,7 @@ export const chatMessageRichText: StoryObj = {
Check core temperature
${buttonTag}>
`)}
- ${chatMessageTag}>
+ ${chatMessageInboundTag}>
`),
argTypes: {
markdown: {
@@ -139,49 +111,25 @@ export const chatMessageRichText: StoryObj = {
},
args: {
markdown: markdownExample,
- messageType: 'outbound',
footerActions: false,
endButtons: false
}
};
-export const chatMessageSpinner: StoryObj = {
+export const chatMessageSpinner: StoryObj = {
render: createUserSelectedThemeStory(html`
- <${chatMessageTag} message-type="${x => ChatMessageType[x.messageType]}">
+ <${chatMessageSystemTag}>
<${spinnerTag}
style="${isChromatic() ? '--ni-private-spinner-animation-play-state:paused' : ''}"
appearance="${() => SpinnerAppearance.accent}"
>${spinnerTag}>
- ${when(x => x.footerActions, html`
- <${buttonTag} slot="footer-actions" appearance="ghost" title="Like" content-hidden>
- <${iconThumbUpTag} slot="start">${iconThumbUpTag}>
- Like
- ${buttonTag}>
- <${buttonTag} slot="footer-actions" appearance="ghost" title="Dislike" content-hidden>
- <${iconThumbDownTag} slot="start">${iconThumbDownTag}>
- Dislike
- ${buttonTag}>
- `)}
- ${when(x => x.endButtons, html`
- <${buttonTag} slot="end" appearance="block">
- Order a tab
- ${buttonTag}>
- <${buttonTag} slot="end" appearance="block">
- Check core temperature
- ${buttonTag}>
- `)}
- ${chatMessageTag}>
- `),
- args: {
- messageType: 'system',
- footerActions: false,
- endButtons: false
- }
+ ${chatMessageSystemTag}>
+ `)
};
-export const chatMessageImage: StoryObj = {
+export const chatMessageImage: StoryObj = {
render: createUserSelectedThemeStory(html`
- <${chatMessageTag} message-type="${x => ChatMessageType[x.messageType]}">
+ <${chatMessageInboundTag}>
${when(x => x.footerActions, html`
<${buttonTag} slot="footer-actions" appearance="ghost" title="Like" content-hidden>
@@ -201,10 +149,9 @@ export const chatMessageImage: StoryObj = {
Check core temperature
${buttonTag}>
`)}
- ${chatMessageTag}>
+ ${chatMessageInboundTag}>
`),
args: {
- messageType: 'inbound',
footerActions: false,
endButtons: false
}
From 2a0ee7ee01be832894bb1673d9cbb48579b7ac73 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Tue, 27 Jan 2026 08:51:19 -0600
Subject: [PATCH 05/22] Angular wrappers
---
package-lock.json | 375 +++++++++++++-----
.../chat/message/inbound/ng-package.json | 6 +
.../chat/message/inbound/public-api.ts | 2 +
.../spright-chat-message-inbound.directive.ts | 16 +
.../spright-chat-message-inbound.module.ts | 16 +
...ght-chat-message-inbound.directive.spec.ts | 16 +
.../chat/message/outbound/ng-package.json | 6 +
.../chat/message/outbound/public-api.ts | 2 +
...spright-chat-message-outbound.directive.ts | 16 +
.../spright-chat-message-outbound.module.ts | 16 +
...ht-chat-message-outbound.directive.spec.ts | 16 +
.../chat/message/system/ng-package.json | 6 +
.../chat/message/system/public-api.ts | 2 +
.../spright-chat-message-system.directive.ts | 16 +
.../spright-chat-message-system.module.ts | 16 +
...ight-chat-message-system.directive.spec.ts | 16 +
16 files changed, 441 insertions(+), 102 deletions(-)
create mode 100644 packages/angular-workspace/spright-angular/chat/message/inbound/ng-package.json
create mode 100644 packages/angular-workspace/spright-angular/chat/message/inbound/public-api.ts
create mode 100644 packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.directive.ts
create mode 100644 packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.module.ts
create mode 100644 packages/angular-workspace/spright-angular/chat/message/inbound/tests/spright-chat-message-inbound.directive.spec.ts
create mode 100644 packages/angular-workspace/spright-angular/chat/message/outbound/ng-package.json
create mode 100644 packages/angular-workspace/spright-angular/chat/message/outbound/public-api.ts
create mode 100644 packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.directive.ts
create mode 100644 packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.module.ts
create mode 100644 packages/angular-workspace/spright-angular/chat/message/outbound/tests/spright-chat-message-outbound.directive.spec.ts
create mode 100644 packages/angular-workspace/spright-angular/chat/message/system/ng-package.json
create mode 100644 packages/angular-workspace/spright-angular/chat/message/system/public-api.ts
create mode 100644 packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.directive.ts
create mode 100644 packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.module.ts
create mode 100644 packages/angular-workspace/spright-angular/chat/message/system/tests/spright-chat-message-system.directive.spec.ts
diff --git a/package-lock.json b/package-lock.json
index 1741932312..4a081bffe1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -235,6 +235,7 @@
"os": [
"darwin"
],
+ "peer": true,
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
@@ -316,6 +317,7 @@
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.4.4",
@@ -405,6 +407,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -524,6 +527,7 @@
"resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-19.8.1.tgz",
"integrity": "sha512-NOMkw0xgDoDVCLkL5nkkvdd3ouDYkOGqtEmabTR7N4/kQnk1R4coOTWGCqAgMXCFdxlyjuxquDwuJ+yni81pRg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@angular-devkit/architect": ">= 0.1900.0 < 0.2000.0",
"@angular-devkit/core": ">= 19.0.0 < 20.0.0"
@@ -537,13 +541,15 @@
"version": "19.8.1",
"resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.8.1.tgz",
"integrity": "sha512-WXi1YbSs7SIQo48u+fCcc5Nt14/T4QzYQPLZUnjtsUXPgQG7ZoahhcGf7PPQ+n0V3pSopHOlSHwqK+tSsYK87A==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@angular-eslint/eslint-plugin": {
"version": "19.8.1",
"resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-19.8.1.tgz",
"integrity": "sha512-wZEBMPwD2TRhifG751hcj137EMIEaFmsxRB2EI+vfINCgPnFGSGGOHXqi8aInn9fXqHs7VbXkAzXYdBsvy1m4Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@angular-eslint/bundled-angular-compiler": "19.8.1",
"@angular-eslint/utils": "19.8.1"
@@ -559,6 +565,7 @@
"resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-19.8.1.tgz",
"integrity": "sha512-0ZVQldndLrDfB0tzFe/uIwvkUcakw8qGxvkEU0l7kSbv/ngNQ/qrkRi7P64otB15inIDUNZI2jtmVat52dqSfQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@angular-eslint/bundled-angular-compiler": "19.8.1",
"@angular-eslint/utils": "19.8.1",
@@ -578,6 +585,7 @@
"resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-19.8.1.tgz",
"integrity": "sha512-MKzfO3puOCuQFgP8XDUkEr5eaqcCQLAdYLLMcywEO/iRs1eRHL46+rkW+SjDp1cUqlxKtu+rLiTYr0T/O4fi9Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@angular-devkit/core": ">= 19.0.0 < 20.0.0",
"@angular-devkit/schematics": ">= 19.0.0 < 20.0.0",
@@ -593,6 +601,7 @@
"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
"integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 4"
}
@@ -602,6 +611,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"license": "ISC",
+ "peer": true,
"bin": {
"semver": "bin/semver.js"
},
@@ -629,6 +639,7 @@
"resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.8.1.tgz",
"integrity": "sha512-gVDKYWmAjeTPtaYmddT/HS03fCebXJtrk8G1MouQIviZbHqLjap6TbVlzlkBigRzaF0WnFnrDduQslkJzEdceA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@angular-eslint/bundled-angular-compiler": "19.8.1"
},
@@ -643,7 +654,6 @@
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.18.tgz",
"integrity": "sha512-c76x1t+OiSstPsvJdHmV8Q4taF+8SxWKqiY750fOjpd01it4jJbU6YQqIroC6Xie7154zZIxOTHH2uTj+nm5qA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
@@ -1109,7 +1119,6 @@
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.4.4",
@@ -1627,7 +1636,6 @@
"resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.18.tgz",
"integrity": "sha512-CrV02Omzw/QtfjlEVXVPJVXipdx83NuA+qSASZYrxrhKFusUZyK3P/Zznqg+wiAeNDbedQwMUVqoAARHf0xQrw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
@@ -1644,7 +1652,6 @@
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.18.tgz",
"integrity": "sha512-3MscvODxRVxc3Cs0ZlHI5Pk5rEvE80otfvxZTMksOZuPlv1B+S8MjWfc3X3jk9SbyUEzODBEH55iCaBHD48V3g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
@@ -1657,7 +1664,6 @@
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.18.tgz",
"integrity": "sha512-N4TMtLfImJIoMaRL6mx7885UBeQidywptHH6ACZj71Ar6++DBc1mMlcwuvbeJCd3r3y8MQ5nLv5PZSN/tHr13w==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/core": "7.26.9",
"@jridgewell/sourcemap-codec": "^1.4.14",
@@ -1731,7 +1737,6 @@
"resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.18.tgz",
"integrity": "sha512-+QRrf0Igt8ccUWXHA+7doK5W6ODyhHdqVyblSlcQ8OciwkzIIGGEYNZom5OZyWMh+oI54lcSeyV2O3xaDepSrQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
@@ -1748,7 +1753,6 @@
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.18.tgz",
"integrity": "sha512-pe40934jWhoS7DyGl7jyZdoj1gvBgur2t1zrJD+csEkTitYnW14+La2Pv6SW1pNX5nIzFsgsS9Nex1KcH5S6Tw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
@@ -1767,7 +1771,6 @@
"resolved": "https://registry.npmjs.org/@angular/localize/-/localize-19.2.18.tgz",
"integrity": "sha512-FEZLbpFgCyoRB5Qv30msDb1tJYpwwmkrQTOUUdcB6j0RjHDiSe9jEsArC2Qy0glofjzu9cPoBOcdxY5UocBvdg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/core": "7.26.9",
"@types/babel__core": "7.20.5",
@@ -1837,7 +1840,6 @@
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.18.tgz",
"integrity": "sha512-eahtsHPyXTYLARs9YOlXhnXGgzw0wcyOcDkBvNWK/3lA0NHIgIHmQgXAmBo+cJ+g9skiEQTD2OmSrrwbFKWJkw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
@@ -1878,7 +1880,6 @@
"resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.18.tgz",
"integrity": "sha512-7cimxtPODSwokFQ0TRYzX0ad8Yjrl0MJfzaDCJejd1n/q7RZ7KZmHd0DS/LkDNXVMEh4swr00fK+3YWG/Szsrg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
@@ -1920,7 +1921,6 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz",
"integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.26.2",
@@ -4061,6 +4061,7 @@
"integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==",
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
"@emnapi/wasi-threads": "1.1.0",
"tslib": "^2.4.0"
@@ -4072,6 +4073,7 @@
"integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==",
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.4.0"
}
@@ -4082,6 +4084,7 @@
"integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.4.0"
}
@@ -4097,6 +4100,7 @@
"resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.71.0.tgz",
"integrity": "sha512-2p9+dXWNQnp5Kq/V0XVWZiVAabzlX6rUW8vXXvtX8Yc1CkKgD93IPDEnv1sYZFkkS6HMvg6H0RMZfob/Co0YXA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/estree": "^1.0.8",
"@typescript-eslint/types": "^8.46.0",
@@ -4530,6 +4534,7 @@
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
"integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"eslint-visitor-keys": "^3.4.3"
},
@@ -4548,6 +4553,7 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
@@ -4560,6 +4566,7 @@
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
"integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
@@ -4569,6 +4576,7 @@
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz",
"integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==",
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"@eslint/object-schema": "^2.1.7",
"debug": "^4.3.1",
@@ -4583,6 +4591,7 @@
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
"integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"@eslint/core": "^0.17.0"
},
@@ -4595,6 +4604,7 @@
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
"integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"@types/json-schema": "^7.0.15"
},
@@ -4607,6 +4617,7 @@
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz",
"integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
@@ -4630,6 +4641,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -4646,6 +4658,7 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -4658,6 +4671,7 @@
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"acorn": "^8.15.0",
"acorn-jsx": "^5.3.2",
@@ -4674,13 +4688,15 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@eslint/js": {
"version": "9.39.2",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz",
"integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -4717,6 +4733,7 @@
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
"integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
@@ -4726,6 +4743,7 @@
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
"integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"@eslint/core": "^0.17.0",
"levn": "^0.4.1"
@@ -4795,6 +4813,7 @@
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
"integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": ">=18.18.0"
}
@@ -4804,6 +4823,7 @@
"resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz",
"integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"@humanfs/core": "^0.19.1",
"@humanwhocodes/retry": "^0.4.0"
@@ -4817,6 +4837,7 @@
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": ">=12.22"
},
@@ -4830,6 +4851,7 @@
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
"integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": ">=18.18"
},
@@ -5164,7 +5186,6 @@
"integrity": "sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@inquirer/checkbox": "^4.1.2",
"@inquirer/confirm": "^5.1.6",
@@ -6077,6 +6098,7 @@
"resolved": "https://registry.npmjs.org/@mdit-vue/shared/-/shared-3.0.2.tgz",
"integrity": "sha512-anFGls154h0iVzUt5O43EaqYvPwzfUxQ34QpNQsUQML7pbEJMhcgkRNvYw9hZBspab+/TP45agdPw5joh6/BBA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@mdit-vue/types": "3.0.2",
"@types/markdown-it": "^14.1.2",
@@ -6091,6 +6113,7 @@
"resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-3.0.2.tgz",
"integrity": "sha512-00aAZ0F0NLik6I6Yba2emGbHLxv+QYrPH00qQ5dFKXlAo1Ll2RHDXwY7nN2WAfrx2pP+WrvSRFTGFCNGdzBDHw==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=20.0.0"
}
@@ -6526,6 +6549,7 @@
"integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
"@emnapi/core": "^1.4.3",
"@emnapi/runtime": "^1.4.3",
@@ -6593,7 +6617,6 @@
"resolved": "https://registry.npmjs.org/@ni/eslint-config-angular/-/eslint-config-angular-11.0.1.tgz",
"integrity": "sha512-722/NeHcTrTCJUTAB00LnH0/McggEQewbPvXl7DYT5KfXsuzA83D2XTSouUM6CMe7dajSBW50S1rQpcZA8tb/Q==",
"license": "MIT",
- "peer": true,
"peerDependencies": {
"@ni/eslint-config-javascript": "^5.1.4",
"@ni/eslint-config-typescript": "^5.0.5",
@@ -6605,7 +6628,6 @@
"resolved": "https://registry.npmjs.org/@ni/eslint-config-javascript/-/eslint-config-javascript-5.1.4.tgz",
"integrity": "sha512-UvWMiPlRmTqS4GH4efxP/M6R2Mw2IEBpibgVSMU/0vrPqhs32BBKoIyewTPrMcxNEA0EAMYZETQqK+g5WrskgQ==",
"license": "MIT",
- "peer": true,
"peerDependencies": {
"@stylistic/eslint-plugin": "^5.4.0",
"eslint": "^9.36.0",
@@ -7114,6 +7136,7 @@
"hasInstallScript": true,
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
"detect-libc": "^2.0.3",
"is-glob": "^4.0.3",
@@ -7156,6 +7179,7 @@
"os": [
"android"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7177,6 +7201,7 @@
"os": [
"darwin"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7198,6 +7223,7 @@
"os": [
"darwin"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7219,6 +7245,7 @@
"os": [
"freebsd"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7240,6 +7267,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7261,6 +7289,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7282,6 +7311,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7303,6 +7333,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7324,6 +7355,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7345,6 +7377,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7366,6 +7399,7 @@
"os": [
"win32"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7387,6 +7421,7 @@
"os": [
"win32"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7408,6 +7443,7 @@
"os": [
"win32"
],
+ "peer": true,
"engines": {
"node": ">= 10.0.0"
},
@@ -7422,7 +7458,8 @@
"integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
"dev": true,
"license": "MIT",
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/@paulirish/trace_engine": {
"version": "0.0.53",
@@ -7451,6 +7488,7 @@
"resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
"integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
},
@@ -7484,7 +7522,8 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz",
"integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@rolldown/pluginutils": {
"version": "1.0.0-beta.47",
@@ -8036,7 +8075,8 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
"integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@schematics/angular": {
"version": "19.2.19",
@@ -8986,6 +9026,7 @@
"resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz",
"integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5",
@@ -9005,6 +9046,7 @@
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
"integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"dequal": "^2.0.3"
}
@@ -9052,7 +9094,6 @@
"resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.15.3.tgz",
"integrity": "sha512-bmXydIHfm2rEtGju39FiQNfzkFx9CDvJe+xem1dgEZ2P6Dj7nQX9LnA1ZscW7TuzbBRkL5p3dwuBIi3f62A66A==",
"license": "MIT",
- "peer": true,
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
@@ -9235,7 +9276,6 @@
"resolved": "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-3.15.3.tgz",
"integrity": "sha512-+CbaHhPfKUe+fNpUIQaOPhh6xI+xL5jbK1zw++U+CZIRrVAAmHRhO+D0O2HdiE1RK7596y8bRqMiB2CRHF7emA==",
"license": "MIT",
- "peer": true,
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
@@ -9328,6 +9368,7 @@
"integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
"tslib": "^2.4.0"
}
@@ -9336,7 +9377,8 @@
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
"integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@types/babel__core": {
"version": "7.20.5",
@@ -9414,13 +9456,15 @@
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz",
"integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@types/command-line-usage": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz",
"integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@types/connect": {
"version": "3.4.38",
@@ -9633,13 +9677,15 @@
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@types/katex": {
"version": "0.16.8",
"resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz",
"integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@types/linkify-it": {
"version": "5.0.0",
@@ -9698,7 +9744,6 @@
"integrity": "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
@@ -9760,7 +9805,6 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.8.tgz",
"integrity": "sha512-3MbSL37jEchWZz2p2mjntRZtPt837ij10ApxKfgmXCTuHWagYg7iA5bqPw6C8BMPfwidlvfPI/fxOc42HLhcyg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"csstype": "^3.2.2"
}
@@ -9898,6 +9942,7 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.0.tgz",
"integrity": "sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@eslint-community/regexpp": "^4.12.2",
"@typescript-eslint/scope-manager": "8.53.0",
@@ -9926,6 +9971,7 @@
"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
"integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 4"
}
@@ -9960,6 +10006,7 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.0.tgz",
"integrity": "sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@typescript-eslint/tsconfig-utils": "^8.53.0",
"@typescript-eslint/types": "^8.53.0",
@@ -9981,6 +10028,7 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.0.tgz",
"integrity": "sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@typescript-eslint/types": "8.53.0",
"@typescript-eslint/visitor-keys": "8.53.0"
@@ -9998,6 +10046,7 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.0.tgz",
"integrity": "sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -10014,6 +10063,7 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.0.tgz",
"integrity": "sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@typescript-eslint/types": "8.53.0",
"@typescript-eslint/typescript-estree": "8.53.0",
@@ -10052,6 +10102,7 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.0.tgz",
"integrity": "sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@typescript-eslint/project-service": "8.53.0",
"@typescript-eslint/tsconfig-utils": "8.53.0",
@@ -10079,6 +10130,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
@@ -10088,6 +10140,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"license": "ISC",
+ "peer": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -10127,6 +10180,7 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.0.tgz",
"integrity": "sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@typescript-eslint/types": "8.53.0",
"eslint-visitor-keys": "^4.2.1"
@@ -10144,6 +10198,7 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -10162,7 +10217,8 @@
"optional": true,
"os": [
"android"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-android-arm64": {
"version": "1.11.1",
@@ -10175,7 +10231,8 @@
"optional": true,
"os": [
"android"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-darwin-arm64": {
"version": "1.11.1",
@@ -10188,7 +10245,8 @@
"optional": true,
"os": [
"darwin"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-darwin-x64": {
"version": "1.11.1",
@@ -10201,7 +10259,8 @@
"optional": true,
"os": [
"darwin"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-freebsd-x64": {
"version": "1.11.1",
@@ -10214,7 +10273,8 @@
"optional": true,
"os": [
"freebsd"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
"version": "1.11.1",
@@ -10227,7 +10287,8 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
"version": "1.11.1",
@@ -10240,7 +10301,8 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
"version": "1.11.1",
@@ -10253,7 +10315,8 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-linux-arm64-musl": {
"version": "1.11.1",
@@ -10266,7 +10329,8 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
"version": "1.11.1",
@@ -10279,7 +10343,8 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
"version": "1.11.1",
@@ -10292,7 +10357,8 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
"version": "1.11.1",
@@ -10305,7 +10371,8 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
"version": "1.11.1",
@@ -10318,7 +10385,8 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-linux-x64-gnu": {
"version": "1.11.1",
@@ -10331,7 +10399,8 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-linux-x64-musl": {
"version": "1.11.1",
@@ -10344,7 +10413,8 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-wasm32-wasi": {
"version": "1.11.1",
@@ -10355,6 +10425,7 @@
],
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
"@napi-rs/wasm-runtime": "^0.2.11"
},
@@ -10373,7 +10444,8 @@
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
"version": "1.11.1",
@@ -10386,7 +10458,8 @@
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "peer": true
},
"node_modules/@unrs/resolver-binding-win32-x64-msvc": {
"version": "1.11.1",
@@ -10399,7 +10472,8 @@
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "peer": true
},
"node_modules/@vitejs/plugin-react-swc": {
"version": "4.2.2",
@@ -10742,7 +10816,6 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -10755,6 +10828,7 @@
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"license": "MIT",
+ "peer": true,
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
@@ -10833,7 +10907,6 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -10990,6 +11063,7 @@
"resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-21.1.0.tgz",
"integrity": "sha512-kQrYLxhC+NTVVZ4CCzGF6L/uPVOzJmD1T3XgbiUnP7oTeVFOFgEUu6IKNwCDkpFoBVqDKQivlX4RUFqqnWFlEA==",
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"@swc/helpers": "^0.5.11",
"@types/command-line-args": "^5.2.3",
@@ -11010,6 +11084,7 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz",
"integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"undici-types": "~7.16.0"
}
@@ -11019,6 +11094,7 @@
"resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
"integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=14"
}
@@ -11043,6 +11119,7 @@
"resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz",
"integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12.17"
}
@@ -11128,6 +11205,7 @@
"resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
"integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"call-bind": "^1.0.8",
"call-bound": "^1.0.4",
@@ -11331,6 +11409,7 @@
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
"integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": ">= 0.4"
}
@@ -11794,7 +11873,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
@@ -12042,6 +12120,7 @@
"resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz",
"integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"chalk": "^4.1.2"
},
@@ -12526,6 +12605,7 @@
"resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz",
"integrity": "sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"array-back": "^6.2.2",
"find-replace": "^5.0.2",
@@ -12549,6 +12629,7 @@
"resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz",
"integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"array-back": "^6.2.2",
"chalk-template": "^0.4.0",
@@ -12574,6 +12655,7 @@
"resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz",
"integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 12.0.0"
}
@@ -13109,14 +13191,14 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
"integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/cross-env": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz",
"integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@epic-web/invariant": "^1.0.0",
"cross-spawn": "^7.0.6"
@@ -13411,7 +13493,6 @@
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
"license": "ISC",
- "peer": true,
"engines": {
"node": ">=12"
}
@@ -13615,7 +13696,8 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/deepmerge": {
"version": "4.3.1",
@@ -13804,8 +13886,7 @@
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1467305.tgz",
"integrity": "sha512-LxwMLqBoPPGpMdRL4NkLFRNy3QLp6Uqa7GNp1v6JaBheop2QrB9Q7q0A/q/CYYP9sBfZdHOyszVx4gc9zyk7ow==",
"dev": true,
- "license": "BSD-3-Clause",
- "peer": true
+ "license": "BSD-3-Clause"
},
"node_modules/di": {
"version": "0.0.1",
@@ -13819,6 +13900,7 @@
"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
"integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
@@ -13865,7 +13947,8 @@
"version": "0.5.16",
"resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
"integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/dom-serialize": {
"version": "2.2.1",
@@ -14053,6 +14136,7 @@
"resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-2.0.1.tgz",
"integrity": "sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=10.0.0"
}
@@ -14267,6 +14351,7 @@
"dev": true,
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
"prr": "~1.0.1"
},
@@ -14649,6 +14734,7 @@
"resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz",
"integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"get-tsconfig": "^4.10.1",
"stable-hash-x": "^0.2.0"
@@ -14673,6 +14759,7 @@
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
"integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"debug": "^3.2.7",
"is-core-module": "^2.13.0",
@@ -14684,6 +14771,7 @@
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"ms": "^2.1.1"
}
@@ -14728,6 +14816,7 @@
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz",
"integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"debug": "^3.2.7"
},
@@ -14745,6 +14834,7 @@
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"ms": "^2.1.1"
}
@@ -14788,6 +14878,7 @@
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"ms": "^2.1.1"
}
@@ -14797,6 +14888,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"license": "ISC",
+ "peer": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -14806,6 +14898,7 @@
"resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-60.8.3.tgz",
"integrity": "sha512-4191bTMvnd5WUtopCdzNhQchvv/MxtPD86ZGl3vem8Ibm22xJhKuIyClmgSxw+YERtorVc/NhG+bGjfFVa6+VQ==",
"license": "BSD-3-Clause",
+ "peer": true,
"dependencies": {
"@es-joy/jsdoccomment": "~0.71.0",
"are-docs-informative": "^0.0.2",
@@ -14832,6 +14925,7 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -14844,6 +14938,7 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -14856,6 +14951,7 @@
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"acorn": "^8.15.0",
"acorn-jsx": "^5.3.2",
@@ -14873,6 +14969,7 @@
"resolved": "https://registry.npmjs.org/eslint-plugin-markdown-links/-/eslint-plugin-markdown-links-0.7.1.tgz",
"integrity": "sha512-c6HAhdS3GmNLOzEuauGZ1+kkr20ruAHuF5rzwT48PdfZLTvPLeXa1Mb6HLdG8koLvwiLaIsXd8CntO/dt6UZug==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@mdit-vue/shared": "^3.0.2",
"entities": "^7.0.0",
@@ -14898,6 +14995,7 @@
"resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz",
"integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==",
"license": "BSD-2-Clause",
+ "peer": true,
"engines": {
"node": ">=0.12"
},
@@ -14910,6 +15008,7 @@
"resolved": "https://registry.npmjs.org/eslint-plugin-markdown-preferences/-/eslint-plugin-markdown-preferences-0.38.0.tgz",
"integrity": "sha512-7DQ60sgg/y7xXghkrNIrTHIiwNcMKWiAXTygwWgtgIb8tHL0zrDCDNEJwUOEgIilOCNRUYQUEj7dKYWjw4rjrQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"diff-sequences": "^29.6.3",
"emoji-regex-xs": "^2.0.1",
@@ -14941,6 +15040,7 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz",
"integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"get-east-asian-width": "^1.3.0",
"strip-ansi": "^7.1.0"
@@ -15062,6 +15162,7 @@
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
"integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
@@ -15078,6 +15179,7 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz",
"integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==",
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": "^20.19.0 || ^22.13.0 || >=24"
},
@@ -15090,6 +15192,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -15106,6 +15209,7 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -15118,6 +15222,7 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
@@ -15130,6 +15235,7 @@
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"acorn": "^8.15.0",
"acorn-jsx": "^5.3.2",
@@ -15147,6 +15253,7 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"license": "ISC",
+ "peer": true,
"dependencies": {
"is-glob": "^4.0.3"
},
@@ -15158,13 +15265,15 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/espree": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-11.0.0.tgz",
"integrity": "sha512-+gMeWRrIh/NsG+3NaLeWHuyeyk70p2tbvZIWBYcqQ4/7Xvars6GYTZNhF1sIeLcc6Wb11He5ffz3hsHyXFrw5A==",
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"acorn": "^8.15.0",
"acorn-jsx": "^5.3.2",
@@ -15195,6 +15304,7 @@
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
"integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
"license": "BSD-3-Clause",
+ "peer": true,
"dependencies": {
"estraverse": "^5.1.0"
},
@@ -15483,7 +15593,8 @@
"url": "https://opencollective.com/fastify"
}
],
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
@@ -15518,13 +15629,15 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/fast-uri": {
"version": "3.1.0",
@@ -15556,6 +15669,7 @@
"resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz",
"integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"format": "^0.2.0"
},
@@ -15622,6 +15736,7 @@
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
"integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"flat-cache": "^4.0.0"
},
@@ -15709,6 +15824,7 @@
"resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz",
"integrity": "sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=14"
},
@@ -15726,6 +15842,7 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
@@ -15762,6 +15879,7 @@
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
"integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"flatted": "^3.2.9",
"keyv": "^4.5.4"
@@ -15774,7 +15892,8 @@
"version": "25.9.23",
"resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-25.9.23.tgz",
"integrity": "sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==",
- "license": "Apache-2.0"
+ "license": "Apache-2.0",
+ "peer": true
},
"node_modules/flatted": {
"version": "3.3.3",
@@ -16119,6 +16238,7 @@
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz",
"integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"resolve-pkg-maps": "^1.0.0"
},
@@ -16166,7 +16286,8 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
"integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/glob": {
"version": "10.5.0",
@@ -16266,7 +16387,6 @@
"resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=18"
},
@@ -16580,7 +16700,8 @@
"url": "https://patreon.com/mdevils"
}
],
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/html-escaper": {
"version": "2.0.2",
@@ -16867,6 +16988,7 @@
"dev": true,
"license": "MIT",
"optional": true,
+ "peer": true,
"bin": {
"image-size": "bin/image-size.js"
},
@@ -17355,6 +17477,7 @@
"resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
"integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"semver": "^7.7.1"
}
@@ -18093,7 +18216,6 @@
"integrity": "sha512-oLCXIhEb5e0zzjn9GyuvcuisvLBwUjmgz7a0RNGWKwQtJCDld4m+vwKUpAIJVLB5vbmQFdtKhT86/tIZlJ5gYw==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"glob": "^10.2.2",
"jasmine-core": "~5.13.0"
@@ -18107,8 +18229,7 @@
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.13.0.tgz",
"integrity": "sha512-vsYjfh7lyqvZX5QgqKc4YH8phs7g96Z8bsdIFNEU3VqXhlHaq+vov/Fgn/sr6MiUczdZkyXRC3TX369Ll4Nzbw==",
"dev": true,
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/jest-worker": {
"version": "27.5.1",
@@ -18147,7 +18268,6 @@
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
"devOptional": true,
"license": "MIT",
- "peer": true,
"bin": {
"jiti": "bin/jiti.js"
}
@@ -18271,6 +18391,7 @@
"resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-6.6.0.tgz",
"integrity": "sha512-3hSD14nXx66Rspx1RMnz1Pj4JacrMBAsC0CrF9lZYO/Qsp5/oIr6KqujVUNhQu94B6mMip2ukki8MpEWZwyhKA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=20.0.0"
}
@@ -18291,6 +18412,7 @@
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz",
"integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==",
+ "peer": true,
"engines": {
"node": ">=0.8"
}
@@ -18299,7 +18421,8 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
@@ -18338,7 +18461,8 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/json5": {
"version": "2.2.3",
@@ -18413,7 +18537,6 @@
"integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@colors/colors": "1.5.0",
"body-parser": "^1.19.0",
@@ -18548,7 +18671,6 @@
"integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"jasmine-core": "^4.1.0"
},
@@ -18888,6 +19010,7 @@
"https://github.com/sponsors/katex"
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"commander": "^8.3.0"
},
@@ -18900,6 +19023,7 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
"integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 12"
}
@@ -18909,6 +19033,7 @@
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"json-buffer": "3.0.1"
}
@@ -18967,7 +19092,6 @@
"integrity": "sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg==",
"dev": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"copy-anything": "^2.0.1",
"parse-node-version": "^1.0.1",
@@ -19023,6 +19147,7 @@
"dev": true,
"license": "MIT",
"optional": true,
+ "peer": true,
"bin": {
"mime": "cli.js"
},
@@ -19037,6 +19162,7 @@
"dev": true,
"license": "BSD-3-Clause",
"optional": true,
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -19046,6 +19172,7 @@
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
@@ -19425,6 +19552,7 @@
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"p-locate": "^5.0.0"
},
@@ -19473,7 +19601,8 @@
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/lodash.snakecase": {
"version": "4.1.1",
@@ -19782,6 +19911,7 @@
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
"integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
"license": "MIT",
+ "peer": true,
"bin": {
"lz-string": "bin/bin.js"
}
@@ -19946,6 +20076,7 @@
"resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz",
"integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/mdast": "^4.0.0",
"devlop": "^1.0.0",
@@ -19964,6 +20095,7 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
"integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -20077,6 +20209,7 @@
"resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz",
"integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/hast": "^3.0.0",
"@types/mdast": "^4.0.0",
@@ -20298,6 +20431,7 @@
"resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz",
"integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"fault": "^2.0.0",
"micromark-util-character": "^2.0.0",
@@ -20435,6 +20569,7 @@
"resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz",
"integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/katex": "^0.16.0",
"devlop": "^1.0.0",
@@ -21284,6 +21419,7 @@
"resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
"integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
"license": "MIT",
+ "peer": true,
"bin": {
"napi-postinstall": "lib/cli.js"
},
@@ -21298,7 +21434,8 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/needle": {
"version": "3.3.1",
@@ -21307,6 +21444,7 @@
"dev": true,
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
"iconv-lite": "^0.6.3",
"sax": "^1.2.4"
@@ -21351,7 +21489,6 @@
"integrity": "sha512-dFuwFsDJMBSd1YtmLLcX5bNNUCQUlRqgf34aXA+79PmkOP+0eF8GP2949wq3+jMjmFTNm80Oo8IUYiSLwklKCQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@rollup/plugin-json": "^6.1.0",
"@rollup/wasm-node": "^4.24.0",
@@ -22139,6 +22276,7 @@
"resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-1.0.5.tgz",
"integrity": "sha512-3DioFgOzetbxbeUq8pB2NunXo8V0n4EvqsWM/cJoI6IA9zghd7cl/2pBOuWRf4dlvA+fcg5ugFMZaN2/RuoaGg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"type-fest": "4.2.0"
}
@@ -22240,6 +22378,7 @@
"resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
"integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
@@ -22344,6 +22483,7 @@
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
@@ -22493,6 +22633,7 @@
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"p-limit": "^3.0.2"
},
@@ -23021,6 +23162,7 @@
"resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz",
"integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"parse-statements": "1.0.11"
}
@@ -23068,7 +23210,8 @@
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz",
"integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/parse-url": {
"version": "9.2.0",
@@ -23517,7 +23660,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"nanoid": "^3.3.8",
"picocolors": "^1.1.1",
@@ -23655,6 +23797,7 @@
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 0.8.0"
}
@@ -23680,6 +23823,7 @@
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
"integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
@@ -23694,6 +23838,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -23703,6 +23848,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -23714,7 +23860,8 @@
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/prismjs": {
"version": "1.30.0",
@@ -23819,6 +23966,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz",
"integrity": "sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prosemirror-transform": "^1.0.0"
}
@@ -23828,6 +23976,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz",
"integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prosemirror-state": "^1.0.0"
}
@@ -23837,6 +23986,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz",
"integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prosemirror-model": "^1.0.0",
"prosemirror-state": "^1.0.0",
@@ -23848,6 +23998,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz",
"integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.1.0",
@@ -23859,6 +24010,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.0.tgz",
"integrity": "sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prosemirror-keymap": "^1.0.0",
"prosemirror-model": "^1.0.0",
@@ -23871,6 +24023,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.0.tgz",
"integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prosemirror-state": "^1.2.2",
"prosemirror-transform": "^1.0.0",
@@ -23883,6 +24036,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz",
"integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.0.0"
@@ -23893,6 +24047,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz",
"integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prosemirror-state": "^1.0.0",
"w3c-keyname": "^2.2.0"
@@ -23914,6 +24069,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.5.tgz",
"integrity": "sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"crelt": "^1.0.0",
"prosemirror-commands": "^1.0.0",
@@ -23926,7 +24082,6 @@
"resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.4.tgz",
"integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"orderedmap": "^2.0.0"
}
@@ -23936,6 +24091,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz",
"integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prosemirror-model": "^1.25.0"
}
@@ -23945,6 +24101,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz",
"integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prosemirror-model": "^1.0.0",
"prosemirror-state": "^1.0.0",
@@ -23956,7 +24113,6 @@
"resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.4.tgz",
"integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"prosemirror-model": "^1.0.0",
"prosemirror-transform": "^1.0.0",
@@ -23968,6 +24124,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.8.5.tgz",
"integrity": "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prosemirror-keymap": "^1.2.3",
"prosemirror-model": "^1.25.4",
@@ -23981,6 +24138,7 @@
"resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz",
"integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@remirror/core-constants": "3.0.0",
"escape-string-regexp": "^4.0.0"
@@ -23996,6 +24154,7 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -24017,7 +24176,6 @@
"resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.5.tgz",
"integrity": "sha512-UDQbIPnDrjE8tqUBbPmCOZgtd75htE6W3r0JCmY9bL6W1iemDM37MZEKC49d+tdQ0v/CKx4gjxLoLsfkD2NiZA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"prosemirror-model": "^1.20.0",
"prosemirror-state": "^1.0.0",
@@ -24138,7 +24296,8 @@
"integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
"dev": true,
"license": "MIT",
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/pump": {
"version": "3.0.3",
@@ -24315,7 +24474,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz",
"integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -24325,7 +24483,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz",
"integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
@@ -24702,6 +24859,7 @@
"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
"license": "MIT",
+ "peer": true,
"funding": {
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
}
@@ -24837,6 +24995,7 @@
"resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz",
"integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==",
"license": "BlueOak-1.0.0",
+ "peer": true,
"dependencies": {
"minimatch": "^10.1.1",
"minipass": "^7.1.2",
@@ -24854,6 +25013,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz",
"integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==",
"license": "BlueOak-1.0.0",
+ "peer": true,
"engines": {
"node": "20 || >=22"
}
@@ -24863,6 +25023,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz",
"integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
"license": "BlueOak-1.0.0",
+ "peer": true,
"dependencies": {
"@isaacs/brace-expansion": "^5.0.0"
},
@@ -24878,6 +25039,7 @@
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"license": "ISC",
+ "peer": true,
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -24887,6 +25049,7 @@
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz",
"integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==",
"license": "BlueOak-1.0.0",
+ "peer": true,
"dependencies": {
"lru-cache": "^11.0.0",
"minipass": "^7.1.2"
@@ -24914,7 +25077,6 @@
"integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
@@ -25003,7 +25165,8 @@
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz",
"integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/run-applescript": {
"version": "7.1.0",
@@ -25055,7 +25218,6 @@
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
"integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"tslib": "^2.1.0"
}
@@ -25145,7 +25307,6 @@
"integrity": "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"chokidar": "^4.0.0",
"immutable": "^5.0.2",
@@ -25260,6 +25421,7 @@
"resolved": "https://registry.npmjs.org/sdbm/-/sdbm-3.0.0.tgz",
"integrity": "sha512-9FHNk9qJKuRxkUeQQdRp8WLCFaL4hvPtYz/2xNAOkuZzQ3ZqMMkZ1CrkKPDA4lxbenMml0JRKHGyTyucK/JBBg==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=20"
},
@@ -25961,6 +26123,7 @@
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
"integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
@@ -26054,6 +26217,7 @@
"resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz",
"integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12.0.0"
}
@@ -26086,7 +26250,6 @@
"resolved": "https://registry.npmjs.org/storybook/-/storybook-10.1.11.tgz",
"integrity": "sha512-pKP5jXJYM4OjvNklGuHKO53wOCAwfx79KvZyOWHoi9zXUH5WVMFUe/ZfWyxXG/GTcj0maRgHGUjq/0I43r0dDQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@storybook/global": "^5.0.0",
"@storybook/icons": "^2.0.0",
@@ -26454,6 +26617,7 @@
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
"integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=4"
}
@@ -26485,6 +26649,7 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=8"
},
@@ -26730,6 +26895,7 @@
"resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz",
"integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@pkgr/core": "^0.2.9"
},
@@ -26751,6 +26917,7 @@
"resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz",
"integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"array-back": "^6.2.2",
"wordwrapjs": "^5.1.0"
@@ -26899,7 +27066,6 @@
"integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==",
"dev": true,
"license": "BSD-2-Clause",
- "peer": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
@@ -27193,6 +27359,7 @@
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz",
"integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=18.12"
},
@@ -27215,6 +27382,7 @@
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
"integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/json5": "^0.0.29",
"json5": "^1.0.2",
@@ -27227,6 +27395,7 @@
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"minimist": "^1.2.0"
},
@@ -27238,8 +27407,7 @@
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "peer": true
+ "license": "0BSD"
},
"node_modules/tuf-js": {
"version": "3.1.0",
@@ -27593,6 +27761,7 @@
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"prelude-ls": "^1.2.1"
},
@@ -27605,6 +27774,7 @@
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.2.0.tgz",
"integrity": "sha512-5zknd7Dss75pMSED270A1RQS3KloqRJA9XbXLe0eCxyw7xXFb3rd+9B0UQ/0E+LQT6lnrLviEolYORlRWamn4w==",
"license": "(MIT OR CC0-1.0)",
+ "peer": true,
"engines": {
"node": ">=16"
},
@@ -27729,7 +27899,6 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"license": "Apache-2.0",
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -27767,6 +27936,7 @@
"resolved": "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz",
"integrity": "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12.17"
}
@@ -27827,6 +27997,7 @@
"resolved": "https://registry.npmjs.org/undici/-/undici-7.18.2.tgz",
"integrity": "sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=20.18.1"
}
@@ -27971,6 +28142,7 @@
"resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
"integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/unist": "^3.0.0",
"unist-util-visit": "^5.0.0"
@@ -28128,6 +28300,7 @@
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"punycode": "^2.1.0"
}
@@ -28137,6 +28310,7 @@
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -28282,7 +28456,6 @@
"integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"esbuild": "^0.27.0",
"fdir": "^6.5.0",
@@ -29000,7 +29173,8 @@
"version": "2.2.8",
"resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
"integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/watchpack": {
"version": "2.4.2",
@@ -29063,7 +29237,6 @@
"integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.6",
@@ -29141,7 +29314,6 @@
"integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/bonjour": "^3.5.13",
"@types/connect-history-api-fallback": "^1.5.4",
@@ -29574,6 +29746,7 @@
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -29583,6 +29756,7 @@
"resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.1.tgz",
"integrity": "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12.17"
}
@@ -29822,7 +29996,6 @@
"integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
"dev": true,
"license": "ISC",
- "peer": true,
"bin": {
"yaml": "bin.mjs"
},
@@ -29943,7 +30116,6 @@
"integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==",
"dev": true,
"license": "MIT",
- "peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
@@ -29965,8 +30137,7 @@
"version": "0.15.1",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.1.tgz",
"integrity": "sha512-XE96n56IQpJM7NAoXswY3XRLcWFW83xe0BiAOeMD7K5k5xecOeul3Qcpx6GqEeeHNkW5DWL5zOyTbEfB4eti8w==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/zwitch": {
"version": "2.0.4",
diff --git a/packages/angular-workspace/spright-angular/chat/message/inbound/ng-package.json b/packages/angular-workspace/spright-angular/chat/message/inbound/ng-package.json
new file mode 100644
index 0000000000..39cd55ac3e
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/inbound/ng-package.json
@@ -0,0 +1,6 @@
+{
+ "$schema": "../../../../../../node_modules/ng-packagr/ng-package.schema.json",
+ "lib": {
+ "entryFile": "public-api.ts"
+ }
+}
diff --git a/packages/angular-workspace/spright-angular/chat/message/inbound/public-api.ts b/packages/angular-workspace/spright-angular/chat/message/inbound/public-api.ts
new file mode 100644
index 0000000000..6fd3ca1925
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/inbound/public-api.ts
@@ -0,0 +1,2 @@
+export * from './spright-chat-message-inbound.directive';
+export * from './spright-chat-message-inbound.module';
diff --git a/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.directive.ts b/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.directive.ts
new file mode 100644
index 0000000000..a3604e48f7
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.directive.ts
@@ -0,0 +1,16 @@
+import { Directive, ElementRef, Renderer2 } from '@angular/core';
+import { type ChatMessageInbound, chatMessageInboundTag } from '@ni/spright-components/dist/esm/chat/message/inbound';
+
+export type { ChatMessageInbound };
+export { chatMessageInboundTag };
+
+/**
+ * Directive to provide Angular integration for the chat inbound message.
+ */
+@Directive({
+ selector: 'spright-chat-message',
+ standalone: false
+})
+export class SprightChatMessageInboundDirective {
+ public constructor(private readonly renderer: Renderer2, private readonly elementRef: ElementRef) {}
+}
diff --git a/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.module.ts b/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.module.ts
new file mode 100644
index 0000000000..2f9899777a
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.module.ts
@@ -0,0 +1,16 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { SprightChatMessageInboundDirective } from './spright-chat-message-inbound.directive';
+
+import '@ni/spright-components/dist/esm/chat/message/inbound';
+
+@NgModule({
+ declarations: [
+ SprightChatMessageInboundDirective
+ ],
+ imports: [CommonModule],
+ exports: [
+ SprightChatMessageInboundDirective
+ ]
+})
+export class SprightChatMessageInboundModule { }
diff --git a/packages/angular-workspace/spright-angular/chat/message/inbound/tests/spright-chat-message-inbound.directive.spec.ts b/packages/angular-workspace/spright-angular/chat/message/inbound/tests/spright-chat-message-inbound.directive.spec.ts
new file mode 100644
index 0000000000..cc2abef909
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/inbound/tests/spright-chat-message-inbound.directive.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+import { SprightChatMessageInboundModule } from '../spright-chat-message-inbound.module';
+
+describe('Spright chat message inbound', () => {
+ describe('module', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [SprightChatMessageInboundModule]
+ });
+ });
+
+ it('custom element is defined', () => {
+ expect(customElements.get('spright-chat-message-inbound')).not.toBeUndefined();
+ });
+ });
+});
diff --git a/packages/angular-workspace/spright-angular/chat/message/outbound/ng-package.json b/packages/angular-workspace/spright-angular/chat/message/outbound/ng-package.json
new file mode 100644
index 0000000000..39cd55ac3e
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/outbound/ng-package.json
@@ -0,0 +1,6 @@
+{
+ "$schema": "../../../../../../node_modules/ng-packagr/ng-package.schema.json",
+ "lib": {
+ "entryFile": "public-api.ts"
+ }
+}
diff --git a/packages/angular-workspace/spright-angular/chat/message/outbound/public-api.ts b/packages/angular-workspace/spright-angular/chat/message/outbound/public-api.ts
new file mode 100644
index 0000000000..999ce64c9f
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/outbound/public-api.ts
@@ -0,0 +1,2 @@
+export * from './spright-chat-message-outbound.directive';
+export * from './spright-chat-message-outbound.module';
diff --git a/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.directive.ts b/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.directive.ts
new file mode 100644
index 0000000000..8704effee3
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.directive.ts
@@ -0,0 +1,16 @@
+import { Directive, ElementRef, Renderer2 } from '@angular/core';
+import { type ChatMessageOutbound, chatMessageOutboundTag } from '@ni/spright-components/dist/esm/chat/message/outbound';
+
+export type { ChatMessageOutbound };
+export { chatMessageOutboundTag };
+
+/**
+ * Directive to provide Angular integration for the chat outbound message.
+ */
+@Directive({
+ selector: 'spright-chat-message',
+ standalone: false
+})
+export class SprightChatMessageOutboundDirective {
+ public constructor(private readonly renderer: Renderer2, private readonly elementRef: ElementRef) {}
+}
diff --git a/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.module.ts b/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.module.ts
new file mode 100644
index 0000000000..40aad2bbc6
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.module.ts
@@ -0,0 +1,16 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { SprightChatMessageOutboundDirective } from './spright-chat-message-outbound.directive';
+
+import '@ni/spright-components/dist/esm/chat/message/outbound';
+
+@NgModule({
+ declarations: [
+ SprightChatMessageOutboundDirective
+ ],
+ imports: [CommonModule],
+ exports: [
+ SprightChatMessageOutboundDirective
+ ]
+})
+export class SprightChatMessageOutboundModule { }
diff --git a/packages/angular-workspace/spright-angular/chat/message/outbound/tests/spright-chat-message-outbound.directive.spec.ts b/packages/angular-workspace/spright-angular/chat/message/outbound/tests/spright-chat-message-outbound.directive.spec.ts
new file mode 100644
index 0000000000..01bfab0889
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/outbound/tests/spright-chat-message-outbound.directive.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+import { SprightChatMessageOutboundModule } from '../spright-chat-message-outbound.module';
+
+describe('Spright chat message outbound', () => {
+ describe('module', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [SprightChatMessageOutboundModule]
+ });
+ });
+
+ it('custom element is defined', () => {
+ expect(customElements.get('spright-chat-message-outbound')).not.toBeUndefined();
+ });
+ });
+});
diff --git a/packages/angular-workspace/spright-angular/chat/message/system/ng-package.json b/packages/angular-workspace/spright-angular/chat/message/system/ng-package.json
new file mode 100644
index 0000000000..39cd55ac3e
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/system/ng-package.json
@@ -0,0 +1,6 @@
+{
+ "$schema": "../../../../../../node_modules/ng-packagr/ng-package.schema.json",
+ "lib": {
+ "entryFile": "public-api.ts"
+ }
+}
diff --git a/packages/angular-workspace/spright-angular/chat/message/system/public-api.ts b/packages/angular-workspace/spright-angular/chat/message/system/public-api.ts
new file mode 100644
index 0000000000..5555d7ee22
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/system/public-api.ts
@@ -0,0 +1,2 @@
+export * from './spright-chat-message-system.directive';
+export * from './spright-chat-message-system.module';
diff --git a/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.directive.ts b/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.directive.ts
new file mode 100644
index 0000000000..e4d0612fac
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.directive.ts
@@ -0,0 +1,16 @@
+import { Directive, ElementRef, Renderer2 } from '@angular/core';
+import { type ChatMessageSystem, chatMessageSystemTag } from '@ni/spright-components/dist/esm/chat/message/system';
+
+export type { ChatMessageSystem };
+export { chatMessageSystemTag };
+
+/**
+ * Directive to provide Angular integration for the chat system message.
+ */
+@Directive({
+ selector: 'spright-chat-message',
+ standalone: false
+})
+export class SprightChatMessageSystemDirective {
+ public constructor(private readonly renderer: Renderer2, private readonly elementRef: ElementRef) {}
+}
diff --git a/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.module.ts b/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.module.ts
new file mode 100644
index 0000000000..9896c52f87
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.module.ts
@@ -0,0 +1,16 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { SprightChatMessageSystemDirective } from './spright-chat-message-system.directive';
+
+import '@ni/spright-components/dist/esm/chat/message/system';
+
+@NgModule({
+ declarations: [
+ SprightChatMessageSystemDirective
+ ],
+ imports: [CommonModule],
+ exports: [
+ SprightChatMessageSystemDirective
+ ]
+})
+export class SprightChatMessageSystemModule { }
diff --git a/packages/angular-workspace/spright-angular/chat/message/system/tests/spright-chat-message-system.directive.spec.ts b/packages/angular-workspace/spright-angular/chat/message/system/tests/spright-chat-message-system.directive.spec.ts
new file mode 100644
index 0000000000..b63860a256
--- /dev/null
+++ b/packages/angular-workspace/spright-angular/chat/message/system/tests/spright-chat-message-system.directive.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+import { SprightChatMessageSystemModule } from '../spright-chat-message-system.module';
+
+describe('Spright chat message system', () => {
+ describe('module', () => {
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ imports: [SprightChatMessageSystemModule]
+ });
+ });
+
+ it('custom element is defined', () => {
+ expect(customElements.get('spright-chat-message-system')).not.toBeUndefined();
+ });
+ });
+});
From d3c62286766c9945ef56c84ddbcefd7da1f1dea6 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Tue, 27 Jan 2026 13:12:14 -0600
Subject: [PATCH 06/22] Angular example app
---
.../example-client-app/src/app/app.module.ts | 8 ++++++--
.../src/app/customapp/customapp.component.html | 14 +++++++-------
.../spright-chat-message-inbound.directive.ts | 2 +-
.../spright-chat-message-outbound.directive.ts | 2 +-
.../spright-chat-message-system.directive.ts | 2 +-
5 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/packages/angular-workspace/example-client-app/src/app/app.module.ts b/packages/angular-workspace/example-client-app/src/app/app.module.ts
index c3742ceb2d..eebeec029d 100644
--- a/packages/angular-workspace/example-client-app/src/app/app.module.ts
+++ b/packages/angular-workspace/example-client-app/src/app/app.module.ts
@@ -35,7 +35,9 @@ import { NimbleRichTextMentionUsersModule } from '@ni/nimble-angular/rich-text-m
import { OkButtonModule } from 'ok-angular/button/ok-button.module';
import { SprightChatConversationModule } from '@ni/spright-angular/chat/conversation';
import { SprightChatInputModule } from '@ni/spright-angular/chat/input';
-import { SprightChatMessageModule } from '@ni/spright-angular/chat/message';
+import { SprightChatMessageInboundModule } from '@ni/spright-angular/chat/message/inbound';
+import { SprightChatMessageOutboundModule } from '@ni/spright-angular/chat/message/outbound';
+import { SprightChatMessageSystemModule } from '@ni/spright-angular/chat/message/system';
import { SprightRectangleModule } from '@ni/spright-angular/rectangle';
import { AppComponent } from './app.component';
import { CustomAppComponent } from './customapp/customapp.component';
@@ -116,7 +118,9 @@ import { CustomAppComponent } from './customapp/customapp.component';
OkButtonModule,
SprightChatConversationModule,
SprightChatInputModule,
- SprightChatMessageModule,
+ SprightChatMessageInboundModule,
+ SprightChatMessageOutboundModule,
+ SprightChatMessageSystemModule,
SprightRectangleModule,
RouterModule.forRoot(
[
diff --git a/packages/angular-workspace/example-client-app/src/app/customapp/customapp.component.html b/packages/angular-workspace/example-client-app/src/app/customapp/customapp.component.html
index 735eedaa49..f6e504bbf5 100644
--- a/packages/angular-workspace/example-client-app/src/app/customapp/customapp.component.html
+++ b/packages/angular-workspace/example-client-app/src/app/customapp/customapp.component.html
@@ -471,12 +471,12 @@
Chat Conversation and Messages (Spright)
- To start, press any key.
- Where is the Any key?
-
+ To start, press any key.
+ Where is the Any key?
+
-
-
+
+
Copy
@@ -486,8 +486,8 @@
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Order a tab
Check core temperature
-
- {{message}}
+
+ {{message}}
diff --git a/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.directive.ts b/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.directive.ts
index a3604e48f7..cd3c2b0c31 100644
--- a/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.directive.ts
+++ b/packages/angular-workspace/spright-angular/chat/message/inbound/spright-chat-message-inbound.directive.ts
@@ -8,7 +8,7 @@ export { chatMessageInboundTag };
* Directive to provide Angular integration for the chat inbound message.
*/
@Directive({
- selector: 'spright-chat-message',
+ selector: 'spright-chat-message-inbound',
standalone: false
})
export class SprightChatMessageInboundDirective {
diff --git a/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.directive.ts b/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.directive.ts
index 8704effee3..cb70d04fe7 100644
--- a/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.directive.ts
+++ b/packages/angular-workspace/spright-angular/chat/message/outbound/spright-chat-message-outbound.directive.ts
@@ -8,7 +8,7 @@ export { chatMessageOutboundTag };
* Directive to provide Angular integration for the chat outbound message.
*/
@Directive({
- selector: 'spright-chat-message',
+ selector: 'spright-chat-message-outbound',
standalone: false
})
export class SprightChatMessageOutboundDirective {
diff --git a/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.directive.ts b/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.directive.ts
index e4d0612fac..a39abbf632 100644
--- a/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.directive.ts
+++ b/packages/angular-workspace/spright-angular/chat/message/system/spright-chat-message-system.directive.ts
@@ -8,7 +8,7 @@ export { chatMessageSystemTag };
* Directive to provide Angular integration for the chat system message.
*/
@Directive({
- selector: 'spright-chat-message',
+ selector: 'spright-chat-message-system',
standalone: false
})
export class SprightChatMessageSystemDirective {
From 08cf0bbd206efa53cd5fe856d6a989dde11abf97 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Tue, 27 Jan 2026 13:28:55 -0600
Subject: [PATCH 07/22] Blazor
---
.../Demo.Shared/Pages/ComponentsDemo.razor | 20 +++++-----
.../SprightChatMessageInbound.razor | 5 +++
.../SprightChatMessageInbound.razor.cs | 18 +++++++++
.../SprightChatMessageOutbound.razor | 5 +++
.../SprightChatMessageOutbound.razor.cs | 18 +++++++++
.../Components/SprightChatMessageSystem.cs | 18 +++++++++
.../Components/SprightChatMessageSystem.razor | 5 +++
.../SprightChatMessageInboundTests.cs | 40 +++++++++++++++++++
.../SprightChatMessageOutboundTests.cs | 40 +++++++++++++++++++
.../SprightChatMessageSystemTests.cs | 40 +++++++++++++++++++
10 files changed, 199 insertions(+), 10 deletions(-)
create mode 100644 packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor
create mode 100644 packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor.cs
create mode 100644 packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor
create mode 100644 packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor.cs
create mode 100644 packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.cs
create mode 100644 packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.razor
create mode 100644 packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageInboundTests.cs
create mode 100644 packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageOutboundTests.cs
create mode 100644 packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageSystemTests.cs
diff --git a/packages/blazor-workspace/Examples/Demo.Shared/Pages/ComponentsDemo.razor b/packages/blazor-workspace/Examples/Demo.Shared/Pages/ComponentsDemo.razor
index 8d9fcaa690..029c47227c 100644
--- a/packages/blazor-workspace/Examples/Demo.Shared/Pages/ComponentsDemo.razor
+++ b/packages/blazor-workspace/Examples/Demo.Shared/Pages/ComponentsDemo.razor
@@ -435,16 +435,16 @@
Chat Conversation and Messages (Spright)
-
+
To start, press any key.
-
-
+
+
Where is the Any key?
-
-
+
+
-
-
+
+
Copy
@@ -458,12 +458,12 @@
Check core temperature
-
+
@foreach(var message in _userMessages)
{
-
+
@message
-
+
}
diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor
new file mode 100644
index 0000000000..98bd13cbeb
--- /dev/null
+++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor
@@ -0,0 +1,5 @@
+@namespace SprightBlazor
+
+ @ChildContent
+
diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor.cs b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor.cs
new file mode 100644
index 0000000000..531e24da51
--- /dev/null
+++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageInbound.razor.cs
@@ -0,0 +1,18 @@
+using Microsoft.AspNetCore.Components;
+
+namespace SprightBlazor;
+
+public partial class SprightChatMessageInbound : ComponentBase
+{
+ ///
+ /// The child content of the element.
+ ///
+ [Parameter]
+ public RenderFragment? ChildContent { get; set; }
+
+ ///
+ /// Any additional attributes that did not match known properties.
+ ///
+ [Parameter(CaptureUnmatchedValues = true)]
+ public IDictionary
? AdditionalAttributes { get; set; }
+}
diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor
new file mode 100644
index 0000000000..0e63f5a181
--- /dev/null
+++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor
@@ -0,0 +1,5 @@
+@namespace SprightBlazor
+
+ @ChildContent
+
diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor.cs b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor.cs
new file mode 100644
index 0000000000..2fd8e80623
--- /dev/null
+++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageOutbound.razor.cs
@@ -0,0 +1,18 @@
+using Microsoft.AspNetCore.Components;
+
+namespace SprightBlazor;
+
+public partial class SprightChatMessageOutbound : ComponentBase
+{
+ ///
+ /// The child content of the element.
+ ///
+ [Parameter]
+ public RenderFragment? ChildContent { get; set; }
+
+ ///
+ /// Any additional attributes that did not match known properties.
+ ///
+ [Parameter(CaptureUnmatchedValues = true)]
+ public IDictionary? AdditionalAttributes { get; set; }
+}
diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.cs b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.cs
new file mode 100644
index 0000000000..17323ff131
--- /dev/null
+++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.cs
@@ -0,0 +1,18 @@
+using Microsoft.AspNetCore.Components;
+
+namespace SprightBlazor;
+
+public partial class SprightChatMessageSystem : ComponentBase
+{
+ ///
+ /// The child content of the element.
+ ///
+ [Parameter]
+ public RenderFragment? ChildContent { get; set; }
+
+ ///
+ /// Any additional attributes that did not match known properties.
+ ///
+ [Parameter(CaptureUnmatchedValues = true)]
+ public IDictionary? AdditionalAttributes { get; set; }
+}
diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.razor b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.razor
new file mode 100644
index 0000000000..37629390a7
--- /dev/null
+++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessageSystem.razor
@@ -0,0 +1,5 @@
+@namespace SprightBlazor
+
+ @ChildContent
+
diff --git a/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageInboundTests.cs b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageInboundTests.cs
new file mode 100644
index 0000000000..ffe5e171af
--- /dev/null
+++ b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageInboundTests.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Linq.Expressions;
+using Bunit;
+using Xunit;
+
+namespace SprightBlazor.Tests.Unit.Components;
+
+///
+/// Test for .
+///
+public class SprightChatMessageInboundTests
+{
+ [Fact]
+ public void SprightChatMessageInbound_Render_HasChatMessageMarkup()
+ {
+ var context = new TestContext();
+ context.JSInterop.Mode = JSRuntimeMode.Loose;
+ var expectedMarkup = "spright-chat-message-inbound";
+
+ var component = context.RenderComponent();
+
+ Assert.Contains(expectedMarkup, component.Markup);
+ }
+
+ [Fact]
+ public void SprightChatMessageInbound_SupportsAdditionalAttributes()
+ {
+ var context = new TestContext();
+ context.JSInterop.Mode = JSRuntimeMode.Loose;
+ var exception = Record.Exception(() => context.RenderComponent(ComponentParameter.CreateParameter("class", "foo")));
+ Assert.Null(exception);
+ }
+
+ private IRenderedComponent RenderWithPropertySet(Expression> propertyGetter, TProperty propertyValue)
+ {
+ var context = new TestContext();
+ context.JSInterop.Mode = JSRuntimeMode.Loose;
+ return context.RenderComponent(p => p.Add(propertyGetter, propertyValue));
+ }
+}
diff --git a/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageOutboundTests.cs b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageOutboundTests.cs
new file mode 100644
index 0000000000..26a8f7611b
--- /dev/null
+++ b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageOutboundTests.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Linq.Expressions;
+using Bunit;
+using Xunit;
+
+namespace SprightBlazor.Tests.Unit.Components;
+
+///
+/// Test for .
+///
+public class SprightChatMessageOutboundTests
+{
+ [Fact]
+ public void SprightChatMessageOutbound_Render_HasChatMessageMarkup()
+ {
+ var context = new TestContext();
+ context.JSInterop.Mode = JSRuntimeMode.Loose;
+ var expectedMarkup = "spright-chat-message-outbound";
+
+ var component = context.RenderComponent();
+
+ Assert.Contains(expectedMarkup, component.Markup);
+ }
+
+ [Fact]
+ public void SprightChatMessageOutbound_SupportsAdditionalAttributes()
+ {
+ var context = new TestContext();
+ context.JSInterop.Mode = JSRuntimeMode.Loose;
+ var exception = Record.Exception(() => context.RenderComponent(ComponentParameter.CreateParameter("class", "foo")));
+ Assert.Null(exception);
+ }
+
+ private IRenderedComponent RenderWithPropertySet(Expression> propertyGetter, TProperty propertyValue)
+ {
+ var context = new TestContext();
+ context.JSInterop.Mode = JSRuntimeMode.Loose;
+ return context.RenderComponent(p => p.Add(propertyGetter, propertyValue));
+ }
+}
diff --git a/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageSystemTests.cs b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageSystemTests.cs
new file mode 100644
index 0000000000..e21bf4f530
--- /dev/null
+++ b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageSystemTests.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Linq.Expressions;
+using Bunit;
+using Xunit;
+
+namespace SprightBlazor.Tests.Unit.Components;
+
+///
+/// Test for .
+///
+public class SprightChatMessageSystemTests
+{
+ [Fact]
+ public void SprightChatMessageSystem_Render_HasChatMessageMarkup()
+ {
+ var context = new TestContext();
+ context.JSInterop.Mode = JSRuntimeMode.Loose;
+ var expectedMarkup = "spright-chat-message-system";
+
+ var component = context.RenderComponent();
+
+ Assert.Contains(expectedMarkup, component.Markup);
+ }
+
+ [Fact]
+ public void SprightChatMessageSystem_SupportsAdditionalAttributes()
+ {
+ var context = new TestContext();
+ context.JSInterop.Mode = JSRuntimeMode.Loose;
+ var exception = Record.Exception(() => context.RenderComponent(ComponentParameter.CreateParameter("class", "foo")));
+ Assert.Null(exception);
+ }
+
+ private IRenderedComponent RenderWithPropertySet(Expression> propertyGetter, TProperty propertyValue)
+ {
+ var context = new TestContext();
+ context.JSInterop.Mode = JSRuntimeMode.Loose;
+ return context.RenderComponent(p => p.Add(propertyGetter, propertyValue));
+ }
+}
From fc53d45ed46d088fb22ac0224e114456c71605b6 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Tue, 27 Jan 2026 14:02:04 -0600
Subject: [PATCH 08/22] React app
---
.../react-client-app/src/components/App.tsx | 20 ++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/packages/react-workspace/react-client-app/src/components/App.tsx b/packages/react-workspace/react-client-app/src/components/App.tsx
index 7c923fa814..a14c98fd53 100644
--- a/packages/react-workspace/react-client-app/src/components/App.tsx
+++ b/packages/react-workspace/react-client-app/src/components/App.tsx
@@ -58,7 +58,9 @@ import { NimbleMappingUser } from '@ni/nimble-react/mapping/user';
import { NimbleRichTextViewer } from '@ni/nimble-react/rich-text/viewer';
import { SprightChatConversation } from '@ni/spright-react/chat/conversation';
import { SprightChatInput } from '@ni/spright-react/chat/input';
-import { SprightChatMessage } from '@ni/spright-react/chat/message';
+import { SprightChatMessageInbound } from '@ni/spright-react/chat/message/inbound';
+import { SprightChatMessageOutbound } from '@ni/spright-react/chat/message/outbound';
+import { SprightChatMessageSystem } from '@ni/spright-react/chat/message/system';
import { NimbleIconCopyText } from '@ni/nimble-react/icons/copy-text';
import { NimbleIconWebviCustom } from '@ni/nimble-react/icons/webvi-custom';
@@ -1161,12 +1163,12 @@ export function App(): React.JSX.Element {
Chat Conversation and Messages (Spright)
- To start, press any key.
- Where is the Any key?
-
+ To start, press any key.
+ Where is the Any key?
+
-
-
+
+
Copy
@@ -1176,11 +1178,11 @@ export function App(): React.JSX.Element {
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Order a tab
Check core temperature
-
+
{chatUserMessages.map((message, index) => (
-
+
{message}
-
+
))}
Date: Tue, 27 Jan 2026 14:07:02 -0600
Subject: [PATCH 09/22] Mark old message as deprecated
---
.../chat/message/spright-chat-message.directive.ts | 1 +
.../SprightBlazor/Components/SprightChatMessage.razor.cs | 1 +
packages/spright-components/src/chat/message/index.ts | 1 +
packages/spright-components/src/chat/message/types.ts | 1 +
4 files changed, 4 insertions(+)
diff --git a/packages/angular-workspace/spright-angular/chat/message/spright-chat-message.directive.ts b/packages/angular-workspace/spright-angular/chat/message/spright-chat-message.directive.ts
index dba9a2bb47..3d1b7241f3 100644
--- a/packages/angular-workspace/spright-angular/chat/message/spright-chat-message.directive.ts
+++ b/packages/angular-workspace/spright-angular/chat/message/spright-chat-message.directive.ts
@@ -8,6 +8,7 @@ export { chatMessageTag };
/**
* Directive to provide Angular integration for the chat message.
+ * @deprecated Use specific message component types instead
*/
@Directive({
selector: 'spright-chat-message',
diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessage.razor.cs b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessage.razor.cs
index ecebd30af3..ae14501acb 100644
--- a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessage.razor.cs
+++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessage.razor.cs
@@ -2,6 +2,7 @@
namespace SprightBlazor;
+[Obsolete("Use specific message component types instead")]
public partial class SprightChatMessage : ComponentBase
{
///
diff --git a/packages/spright-components/src/chat/message/index.ts b/packages/spright-components/src/chat/message/index.ts
index eee80ed989..0ba315a586 100644
--- a/packages/spright-components/src/chat/message/index.ts
+++ b/packages/spright-components/src/chat/message/index.ts
@@ -25,6 +25,7 @@ export type ChatMessageOptions = FoundationElementDefinition & StartEndOptions;
/**
* A Spright component for displaying a chat message
+ * @deprecated Use specific message component types instead
*/
export class ChatMessage extends FoundationElement {
/**
diff --git a/packages/spright-components/src/chat/message/types.ts b/packages/spright-components/src/chat/message/types.ts
index f4f93e0ba8..6e6d1101ee 100644
--- a/packages/spright-components/src/chat/message/types.ts
+++ b/packages/spright-components/src/chat/message/types.ts
@@ -1,6 +1,7 @@
/**
* A message type in a chat conversation.
* @public
+ * @deprecated Use specific message component types instead
*/
export const ChatMessageType = {
system: undefined,
From 5104b6dfde0c2e9fdb3710af3e6ffe7130336d13 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Tue, 27 Jan 2026 14:09:17 -0600
Subject: [PATCH 10/22] Change files
---
...right-angular-31b29e46-9695-49c8-9525-c7e1fb7513ac.json | 7 +++++++
...pright-blazor-879621d4-9813-47ca-9a37-46b18fbec175.json | 7 +++++++
...ht-components-0983404e-2334-4d3f-94cf-6e96e6d643a8.json | 7 +++++++
...spright-react-d00d1016-6e7f-4584-bd00-1209e4781ffa.json | 7 +++++++
4 files changed, 28 insertions(+)
create mode 100644 change/@ni-spright-angular-31b29e46-9695-49c8-9525-c7e1fb7513ac.json
create mode 100644 change/@ni-spright-blazor-879621d4-9813-47ca-9a37-46b18fbec175.json
create mode 100644 change/@ni-spright-components-0983404e-2334-4d3f-94cf-6e96e6d643a8.json
create mode 100644 change/@ni-spright-react-d00d1016-6e7f-4584-bd00-1209e4781ffa.json
diff --git a/change/@ni-spright-angular-31b29e46-9695-49c8-9525-c7e1fb7513ac.json b/change/@ni-spright-angular-31b29e46-9695-49c8-9525-c7e1fb7513ac.json
new file mode 100644
index 0000000000..8055e27fde
--- /dev/null
+++ b/change/@ni-spright-angular-31b29e46-9695-49c8-9525-c7e1fb7513ac.json
@@ -0,0 +1,7 @@
+{
+ "type": "minor",
+ "comment": "Add dedicated chat message components for inbound, outbound, and system messages. The original chat message component is deprecated and will be removed in a future release.",
+ "packageName": "@ni/spright-angular",
+ "email": "jattasNI@users.noreply.github.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@ni-spright-blazor-879621d4-9813-47ca-9a37-46b18fbec175.json b/change/@ni-spright-blazor-879621d4-9813-47ca-9a37-46b18fbec175.json
new file mode 100644
index 0000000000..9c00f4f560
--- /dev/null
+++ b/change/@ni-spright-blazor-879621d4-9813-47ca-9a37-46b18fbec175.json
@@ -0,0 +1,7 @@
+{
+ "type": "minor",
+ "comment": "Add dedicated chat message components for inbound, outbound, and system messages. The original chat message component is deprecated and will be removed in a future release.",
+ "packageName": "@ni/spright-blazor",
+ "email": "jattasNI@users.noreply.github.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@ni-spright-components-0983404e-2334-4d3f-94cf-6e96e6d643a8.json b/change/@ni-spright-components-0983404e-2334-4d3f-94cf-6e96e6d643a8.json
new file mode 100644
index 0000000000..d9510408dc
--- /dev/null
+++ b/change/@ni-spright-components-0983404e-2334-4d3f-94cf-6e96e6d643a8.json
@@ -0,0 +1,7 @@
+{
+ "type": "minor",
+ "comment": "Add dedicated chat message components for inbound, outbound, and system messages. The original chat message component is deprecated and will be removed in a future release.",
+ "packageName": "@ni/spright-components",
+ "email": "jattasNI@users.noreply.github.com",
+ "dependentChangeType": "patch"
+}
diff --git a/change/@ni-spright-react-d00d1016-6e7f-4584-bd00-1209e4781ffa.json b/change/@ni-spright-react-d00d1016-6e7f-4584-bd00-1209e4781ffa.json
new file mode 100644
index 0000000000..f5efda3dba
--- /dev/null
+++ b/change/@ni-spright-react-d00d1016-6e7f-4584-bd00-1209e4781ffa.json
@@ -0,0 +1,7 @@
+{
+ "type": "minor",
+ "comment": "Add dedicated chat message components for inbound, outbound, and system messages. The original chat message component is deprecated and will be removed in a future release.",
+ "packageName": "@ni/spright-react",
+ "email": "jattasNI@users.noreply.github.com",
+ "dependentChangeType": "patch"
+}
From 982f0ccf319e365caac075377d24331eb1bbc474 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Tue, 27 Jan 2026 15:10:59 -0600
Subject: [PATCH 11/22] Don't use [Obsolete] tag, it causes errors
---
.../SprightBlazor/Components/SprightChatMessage.razor.cs | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessage.razor.cs b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessage.razor.cs
index ae14501acb..5b89566781 100644
--- a/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessage.razor.cs
+++ b/packages/blazor-workspace/SprightBlazor/Components/SprightChatMessage.razor.cs
@@ -2,7 +2,9 @@
namespace SprightBlazor;
-[Obsolete("Use specific message component types instead")]
+///
+/// SprightChatMessage is deprecated. Use specific message component types instead.
+///
public partial class SprightChatMessage : ComponentBase
{
///
From befc5f145680a1b0a9247ed954c372eba4abc70e Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Tue, 27 Jan 2026 15:12:17 -0600
Subject: [PATCH 12/22] delete unused
---
.../Unit/Components/SprightChatMessageInboundTests.cs | 7 -------
.../Unit/Components/SprightChatMessageOutboundTests.cs | 7 -------
.../Unit/Components/SprightChatMessageSystemTests.cs | 9 +--------
3 files changed, 1 insertion(+), 22 deletions(-)
diff --git a/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageInboundTests.cs b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageInboundTests.cs
index ffe5e171af..c89f18a1a5 100644
--- a/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageInboundTests.cs
+++ b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageInboundTests.cs
@@ -30,11 +30,4 @@ public void SprightChatMessageInbound_SupportsAdditionalAttributes()
var exception = Record.Exception(() => context.RenderComponent(ComponentParameter.CreateParameter("class", "foo")));
Assert.Null(exception);
}
-
- private IRenderedComponent RenderWithPropertySet(Expression> propertyGetter, TProperty propertyValue)
- {
- var context = new TestContext();
- context.JSInterop.Mode = JSRuntimeMode.Loose;
- return context.RenderComponent(p => p.Add(propertyGetter, propertyValue));
- }
}
diff --git a/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageOutboundTests.cs b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageOutboundTests.cs
index 26a8f7611b..769347f650 100644
--- a/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageOutboundTests.cs
+++ b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageOutboundTests.cs
@@ -30,11 +30,4 @@ public void SprightChatMessageOutbound_SupportsAdditionalAttributes()
var exception = Record.Exception(() => context.RenderComponent(ComponentParameter.CreateParameter("class", "foo")));
Assert.Null(exception);
}
-
- private IRenderedComponent RenderWithPropertySet(Expression> propertyGetter, TProperty propertyValue)
- {
- var context = new TestContext();
- context.JSInterop.Mode = JSRuntimeMode.Loose;
- return context.RenderComponent(p => p.Add(propertyGetter, propertyValue));
- }
}
diff --git a/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageSystemTests.cs b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageSystemTests.cs
index e21bf4f530..8dac4dd8f1 100644
--- a/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageSystemTests.cs
+++ b/packages/blazor-workspace/Tests/SprightBlazor.Tests/Unit/Components/SprightChatMessageSystemTests.cs
@@ -30,11 +30,4 @@ public void SprightChatMessageSystem_SupportsAdditionalAttributes()
var exception = Record.Exception(() => context.RenderComponent(ComponentParameter.CreateParameter("class", "foo")));
Assert.Null(exception);
}
-
- private IRenderedComponent RenderWithPropertySet(Expression> propertyGetter, TProperty propertyValue)
- {
- var context = new TestContext();
- context.JSInterop.Mode = JSRuntimeMode.Loose;
- return context.RenderComponent(p => p.Add(propertyGetter, propertyValue));
- }
-}
+}
\ No newline at end of file
From d465fa7b08191c602c87142d5938747ee66e8a4e Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Tue, 27 Jan 2026 15:56:31 -0600
Subject: [PATCH 13/22] all-components
---
packages/spright-components/src/all-components.ts | 3 +++
1 file changed, 3 insertions(+)
diff --git a/packages/spright-components/src/all-components.ts b/packages/spright-components/src/all-components.ts
index bb4833f10c..911c43293f 100644
--- a/packages/spright-components/src/all-components.ts
+++ b/packages/spright-components/src/all-components.ts
@@ -9,4 +9,7 @@ import '@ni/nimble-components/dist/esm/all-components';
import './chat/conversation';
import './chat/input';
import './chat/message';
+import './chat/message/inbound';
+import './chat/message/outbound';
+import './chat/message/system';
import './rectangle';
From b8e5d7b88984859d5d7a28c99e7590046c8e086a Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Tue, 27 Jan 2026 22:46:02 -0600
Subject: [PATCH 14/22] remove base class
---
.../spright-components/src/chat/message/base/index.ts | 9 ---------
.../src/chat/message/outbound/index.ts | 4 ++--
.../spright-components/src/chat/message/system/index.ts | 4 ++--
3 files changed, 4 insertions(+), 13 deletions(-)
delete mode 100644 packages/spright-components/src/chat/message/base/index.ts
diff --git a/packages/spright-components/src/chat/message/base/index.ts b/packages/spright-components/src/chat/message/base/index.ts
deleted file mode 100644
index d92bd765e7..0000000000
--- a/packages/spright-components/src/chat/message/base/index.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import {
- FoundationElement,
-} from '@ni/fast-foundation';
-
-/**
- * A Spright component base class for displaying a chat message
- */
-export abstract class ChatMessageBase extends FoundationElement {
-}
diff --git a/packages/spright-components/src/chat/message/outbound/index.ts b/packages/spright-components/src/chat/message/outbound/index.ts
index ed7ea5342a..30eb9e1818 100644
--- a/packages/spright-components/src/chat/message/outbound/index.ts
+++ b/packages/spright-components/src/chat/message/outbound/index.ts
@@ -1,9 +1,9 @@
import {
DesignSystem,
+ FoundationElement,
} from '@ni/fast-foundation';
import { styles } from './styles';
import { template } from './template';
-import { ChatMessageBase } from '../base';
declare global {
interface HTMLElementTagNameMap {
@@ -14,7 +14,7 @@ declare global {
/**
* A Spright component for displaying an outbound chat message
*/
-export class ChatMessageOutbound extends ChatMessageBase {
+export class ChatMessageOutbound extends FoundationElement {
}
const sprightChatMessageOutbound = ChatMessageOutbound.compose({
diff --git a/packages/spright-components/src/chat/message/system/index.ts b/packages/spright-components/src/chat/message/system/index.ts
index 06c5d8f182..cde64f992f 100644
--- a/packages/spright-components/src/chat/message/system/index.ts
+++ b/packages/spright-components/src/chat/message/system/index.ts
@@ -1,9 +1,9 @@
import {
DesignSystem,
+ FoundationElement,
} from '@ni/fast-foundation';
import { styles } from './styles';
import { template } from './template';
-import { ChatMessageBase } from '../base';
declare global {
interface HTMLElementTagNameMap {
@@ -14,7 +14,7 @@ declare global {
/**
* A Spright component for displaying an system chat message
*/
-export class ChatMessageSystem extends ChatMessageBase {
+export class ChatMessageSystem extends FoundationElement {
}
const sprightChatMessageSystem = ChatMessageSystem.compose({
From 64ebc2cec2834f46c5680b841fb57e7c2cb26d1c Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Tue, 27 Jan 2026 23:07:29 -0600
Subject: [PATCH 15/22] hidden and text customized stories
---
.../message/chat-message-matrix.stories.ts | 43 ++++++++++++++++++-
1 file changed, 41 insertions(+), 2 deletions(-)
diff --git a/packages/storybook/src/spright/chat/message/chat-message-matrix.stories.ts b/packages/storybook/src/spright/chat/message/chat-message-matrix.stories.ts
index 8c23b7c650..06fc7a851f 100644
--- a/packages/storybook/src/spright/chat/message/chat-message-matrix.stories.ts
+++ b/packages/storybook/src/spright/chat/message/chat-message-matrix.stories.ts
@@ -1,6 +1,9 @@
import type { StoryFn, Meta } from '@storybook/html-vite';
import { html } from '@ni/fast-element';
import { chatMessageTag } from '@ni/spright-components/dist/esm/chat/message';
+import { chatMessageInboundTag } from '@ni/spright-components/dist/esm/chat/message/inbound';
+import { chatMessageOutboundTag } from '@ni/spright-components/dist/esm/chat/message/outbound';
+import { chatMessageSystemTag } from '@ni/spright-components/dist/esm/chat/message/system';
import {
sharedMatrixParameters,
createMatrixThemeStory
@@ -18,14 +21,50 @@ const metadata: Meta = {
export default metadata;
-export const hidden: StoryFn = createStory(
+export const messageHidden: StoryFn = createStory(
hiddenWrapper(
html`<${chatMessageTag} hidden>Hidden Chat Message${chatMessageTag}>`
)
);
-export const textCustomized: StoryFn = createMatrixThemeStory(
+export const messageTextCustomized: StoryFn = createMatrixThemeStory(
textCustomizationWrapper(
html`<${chatMessageTag}>Message${chatMessageTag}>`
)
);
+
+export const messageInboundHidden: StoryFn = createStory(
+ hiddenWrapper(
+ html`<${chatMessageInboundTag} hidden>Hidden Chat Inbound Message${chatMessageInboundTag}>`
+ )
+);
+
+export const messageInboundTextCustomized: StoryFn = createMatrixThemeStory(
+ textCustomizationWrapper(
+ html`<${chatMessageInboundTag}>Inbound Message${chatMessageInboundTag}>`
+ )
+);
+
+export const messageOutboundHidden: StoryFn = createStory(
+ hiddenWrapper(
+ html`<${chatMessageOutboundTag} hidden>Hidden Chat Outbound Message${chatMessageOutboundTag}>`
+ )
+);
+
+export const messageOutboundTextCustomized: StoryFn = createMatrixThemeStory(
+ textCustomizationWrapper(
+ html`<${chatMessageOutboundTag}>Outbound Message${chatMessageOutboundTag}>`
+ )
+);
+
+export const messageSystemHidden: StoryFn = createStory(
+ hiddenWrapper(
+ html`<${chatMessageSystemTag} hidden>Hidden Chat System Message${chatMessageSystemTag}>`
+ )
+);
+
+export const messageSystemTextCustomized: StoryFn = createMatrixThemeStory(
+ textCustomizationWrapper(
+ html`<${chatMessageSystemTag}>System Message${chatMessageSystemTag}>`
+ )
+);
From 4f1a8c8fb6a1d7d5841dadb6262971a89829ed06 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Tue, 27 Jan 2026 23:27:42 -0600
Subject: [PATCH 16/22] conversation matrix test uses new message components
---
.../chat-conversation-matrix.stories.ts | 165 +++++++++++++++---
1 file changed, 145 insertions(+), 20 deletions(-)
diff --git a/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts b/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts
index 73c7b1e7ca..095fdaab7b 100644
--- a/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts
+++ b/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts
@@ -2,6 +2,9 @@ import type { StoryFn, Meta } from '@storybook/html-vite';
import { html, repeat, ViewTemplate } from '@ni/fast-element';
import { chatInputTag } from '@ni/spright-components/dist/esm/chat/input';
import { chatMessageTag } from '@ni/spright-components/dist/esm/chat/message';
+import { chatMessageInboundTag } from '@ni/spright-components/dist/esm/chat/message/inbound';
+import { chatMessageOutboundTag } from '@ni/spright-components/dist/esm/chat/message/outbound';
+import { chatMessageSystemTag } from '@ni/spright-components/dist/esm/chat/message/system';
import { ChatMessageType } from '@ni/spright-components/dist/esm/chat/message/types';
import { chatConversationTag } from '@ni/spright-components/dist/esm/chat/conversation';
import {
@@ -25,9 +28,19 @@ const messageTypeStates = [
['system', ChatMessageType.system]
] as const;
type MessageTypeStates = (typeof messageTypeStates)[number];
-const outboundState = messageTypeStates[0];
-const inboundState = messageTypeStates[1];
-const systemState = messageTypeStates[2];
+const outboundTypeState = messageTypeStates[0];
+const inboundTypeState = messageTypeStates[1];
+const systemTypeState = messageTypeStates[2];
+
+const messageComponentStates = [
+ ['outbound', chatMessageOutboundTag],
+ ['inbound', chatMessageInboundTag],
+ ['system', chatMessageSystemTag]
+] as const;
+type MessageComponentStates = (typeof messageComponentStates)[number];
+const outboundComponentState = messageComponentStates[0];
+const inboundComponentState = messageComponentStates[1];
+const systemComponentState = messageComponentStates[2];
const metadata: Meta = {
title: 'Tests Spright/Chat Conversation',
@@ -64,7 +77,7 @@ const appearanceStates = [
] as const;
type AppearanceStates = (typeof appearanceStates)[number];
-const componentSizing = (
+const messageTypeSizing = (
[_messageTypeLabel, messageType]: MessageTypeStates,
[viewportLabel, viewportWidth, viewportHeight]: ViewportStates,
[contentWidthLabel, contentWidth]: ContentWidthStates,
@@ -102,8 +115,8 @@ const componentSizing = (
`;
export const outboundSizing: StoryFn = createStory(html`
- ${createMatrix(componentSizing, [
- [outboundState],
+ ${createMatrix(messageTypeSizing, [
+ [outboundTypeState],
viewportStates,
contentWidthStates,
contentHeightStates
@@ -111,8 +124,8 @@ export const outboundSizing: StoryFn = createStory(html`
`);
export const inboundSizing: StoryFn = createStory(html`
- ${createMatrix(componentSizing, [
- [inboundState],
+ ${createMatrix(messageTypeSizing, [
+ [inboundTypeState],
viewportStates,
contentWidthStates,
contentHeightStates
@@ -120,8 +133,72 @@ export const inboundSizing: StoryFn = createStory(html`
`);
export const systemSizing: StoryFn = createStory(html`
- ${createMatrix(componentSizing, [
- [systemState],
+ ${createMatrix(messageTypeSizing, [
+ [systemTypeState],
+ viewportStates,
+ contentWidthStates,
+ contentHeightStates
+ ])}
+`);
+
+const messageComponentSizing = (
+ [_messageTypeLabel, messageComponentType]: MessageComponentStates,
+ [viewportLabel, viewportWidth, viewportHeight]: ViewportStates,
+ [contentWidthLabel, contentWidth]: ContentWidthStates,
+ [contentHeightLabel, contentHeight]: ContentHeightStates
+): ViewTemplate => html`
+
+ viewport:${() => viewportLabel}, content:${() => contentWidthLabel},${() => contentHeightLabel}
+
+
+ <${chatConversationTag} style="
+ width: 100%;
+ height: 100%;
+ ">
+ <${() => messageComponentType}>
+
+ ${() => messageComponentType}>
+ ${chatConversationTag}>
+
+`;
+
+export const outboundMessageSizing: StoryFn = createStory(html`
+ ${createMatrix(messageComponentSizing, [
+ [outboundComponentState],
+ viewportStates,
+ contentWidthStates,
+ contentHeightStates
+ ])}
+`);
+
+export const inboundMessageSizing: StoryFn = createStory(html`
+ ${createMatrix(messageComponentSizing, [
+ [inboundComponentState],
+ viewportStates,
+ contentWidthStates,
+ contentHeightStates
+ ])}
+`);
+
+export const systemMessageSizing: StoryFn = createStory(html`
+ ${createMatrix(messageComponentSizing, [
+ [systemComponentState],
viewportStates,
contentWidthStates,
contentHeightStates
@@ -144,7 +221,7 @@ const endButtonStates = [
] as const;
type EndButtonStates = (typeof endButtonStates)[number];
-const slottedButtons = (
+const slottedButtonsMessageTypes = (
[_messageTypeLabel, messageType]: MessageTypeStates,
[footerActionsLabel, footerActions]: FooterActionsStates,
[endButtonsLabel, endButtons]: EndButtonStates
@@ -187,13 +264,61 @@ const slottedButtons = (
`;
export const slottedButtonsSizing: StoryFn = createMatrixThemeStory(html`
- ${createMatrix(slottedButtons, [
+ ${createMatrix(slottedButtonsMessageTypes, [
messageTypeStates,
footerActionsStates,
endButtonStates
])}
`);
+const slottedButtonsInboundMessageComponent = (
+ [footerActionsLabel, footerActions]: FooterActionsStates,
+ [endButtonsLabel, endButtons]: EndButtonStates
+): ViewTemplate => html`
+
+ footer-actions:${() => footerActionsLabel}, end:${() => endButtonsLabel}
+
+
+ <${chatConversationTag} style="
+ width: 100%;
+ height: 100%;
+ ">
+ <${chatMessageInboundTag}">
+
Placeholder text
+ ${repeat(() => footerActions, html
`
+ <${buttonTag} content-hidden slot="footer-actions" appearance="ghost">
+ <${iconThumbUpTag} slot="start">${iconThumbUpTag}>
+ ${x => x}
+ ${buttonTag}>
+ `)}
+ ${repeat(() => endButtons, html`
+ <${buttonTag} slot="end" appearance="block">
+ ${x => x}
+ ${buttonTag}>
+ `)}
+ ${chatMessageInboundTag}>
+ ${chatConversationTag}>
+
+`;
+
+export const slottedButtonsInboundMessageSizing: StoryFn = createMatrixThemeStory(html`
+ ${createMatrix(slottedButtonsInboundMessageComponent, [
+ footerActionsStates,
+ endButtonStates
+ ])}
+`);
+
const heightStates = [
['shorter', '200px'],
['taller', '300px']
@@ -208,12 +333,12 @@ const conversationWithInput = (
width: 100%;
height: ${height};
">
- <${chatMessageTag} message-type="inbound">
+ <${chatMessageInboundTag}>
Conversation is ${heightLabel} than the height of the messages.
- ${chatMessageTag}>
- <${chatMessageTag} message-type="outbound">
+ ${chatMessageInboundTag}>
+ <${chatMessageOutboundTag} message-type="outbound">
Conversation is ${heightLabel} than the height of the messages.
- ${chatMessageTag}>
+ ${chatMessageOutboundTag}>
<${chatInputTag} slot='input'>${chatInputTag}>
${chatConversationTag}>
@@ -237,12 +362,12 @@ const conversationWithAppearance = ([
appearance: ${() => appearanceLabel}
<${chatConversationTag} appearance="${() => appearance}">
- <${chatMessageTag} message-type="inbound">
+ <${chatMessageInboundTag}>
Hello.
- ${chatMessageTag}>
- <${chatMessageTag} message-type="outbound">
+ ${chatMessageInboundTag}>
+ <${chatMessageOutboundTag}>
Greetings!
- ${chatMessageTag}>
+ ${chatMessageOutboundTag}>
<${chatInputTag} slot='input'>${chatInputTag}>
${chatConversationTag}>
`;
From 93e4f0192004f21cd8917c3fc3ebf596f4c567a0 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Sun, 1 Feb 2026 22:51:47 +0200
Subject: [PATCH 17/22] Use standardPadding for message min width and height
---
.../spright-components/src/chat/message/inbound/styles.ts | 4 ++--
.../spright-components/src/chat/message/outbound/styles.ts | 5 +++--
packages/spright-components/src/chat/message/styles.ts | 4 ++--
.../spright-components/src/chat/message/system/styles.ts | 5 +++--
4 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/packages/spright-components/src/chat/message/inbound/styles.ts b/packages/spright-components/src/chat/message/inbound/styles.ts
index d1b90b7e8d..90f202ebeb 100644
--- a/packages/spright-components/src/chat/message/inbound/styles.ts
+++ b/packages/spright-components/src/chat/message/inbound/styles.ts
@@ -18,8 +18,8 @@ export const styles = css`
${display('flex')}
:host {
- min-width: 16px;
- min-height: 16px;
+ min-width: ${standardPadding};
+ min-height: ${standardPadding};
flex-direction: row;
justify-content: flex-start;
diff --git a/packages/spright-components/src/chat/message/outbound/styles.ts b/packages/spright-components/src/chat/message/outbound/styles.ts
index d8dff145e2..412c3b0667 100644
--- a/packages/spright-components/src/chat/message/outbound/styles.ts
+++ b/packages/spright-components/src/chat/message/outbound/styles.ts
@@ -7,6 +7,7 @@ import {
borderWidth,
fillSelectedColor,
mediumPadding,
+ standardPadding,
} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';
import { display } from '../../../utilities/style/display';
@@ -14,8 +15,8 @@ export const styles = css`
${display('flex')}
:host {
- min-width: 16px;
- min-height: 16px;
+ min-width: ${standardPadding};
+ min-height: ${standardPadding};
flex-direction: row;
justify-content: flex-end;
diff --git a/packages/spright-components/src/chat/message/styles.ts b/packages/spright-components/src/chat/message/styles.ts
index e68c8c3a86..4c9c38362e 100644
--- a/packages/spright-components/src/chat/message/styles.ts
+++ b/packages/spright-components/src/chat/message/styles.ts
@@ -22,8 +22,8 @@ export const styles = css`
${display('flex')}
:host {
- min-width: 16px;
- min-height: 16px;
+ min-width: ${standardPadding}};
+ min-height: ${standardPadding};
flex-direction: row;
justify-content: center;
diff --git a/packages/spright-components/src/chat/message/system/styles.ts b/packages/spright-components/src/chat/message/system/styles.ts
index 697bab64c2..30126d0d32 100644
--- a/packages/spright-components/src/chat/message/system/styles.ts
+++ b/packages/spright-components/src/chat/message/system/styles.ts
@@ -3,6 +3,7 @@ import { css } from '@ni/fast-element';
import {
bodyFont,
bodyFontColor,
+ standardPadding,
} from '@ni/nimble-components/dist/esm/theme-provider/design-tokens';
import { display } from '../../../utilities/style/display';
@@ -10,8 +11,8 @@ export const styles = css`
${display('flex')}
:host {
- min-width: 16px;
- min-height: 16px;
+ min-width: ${standardPadding};
+ min-height: ${standardPadding};
flex-direction: row;
justify-content: center;
From 66203987d1799b1eddd418581f4c3e86a2098b17 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Sun, 1 Feb 2026 23:14:18 +0200
Subject: [PATCH 18/22] Fix misaligned messages in tests
---
.../chat-conversation-matrix.stories.ts | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts b/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts
index 095fdaab7b..495be5fec0 100644
--- a/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts
+++ b/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts
@@ -165,15 +165,15 @@ const messageComponentSizing = (
width: 100%;
height: 100%;
">
- <${() => messageComponentType}>
-
- ${() => messageComponentType}>
+ <${messageComponentType}>
+
+ ${messageComponentType}>
${chatConversationTag}>
`;
From a43d6baeb8838ef0f63e3b7db701ede7ebe929c5 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Mon, 2 Feb 2026 07:46:41 +0200
Subject: [PATCH 19/22] Add start and end slot to inbound message template
---
.../src/chat/message/inbound/template.ts | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/packages/spright-components/src/chat/message/inbound/template.ts b/packages/spright-components/src/chat/message/inbound/template.ts
index 3a4b5fdde3..f50a0de330 100644
--- a/packages/spright-components/src/chat/message/inbound/template.ts
+++ b/packages/spright-components/src/chat/message/inbound/template.ts
@@ -1,13 +1,16 @@
import { html, slotted, ViewTemplate } from '@ni/fast-element';
import {
+ endSlotTemplate,
+ startSlotTemplate,
type FoundationElementTemplate
} from '@ni/fast-foundation';
-import type { ChatMessageInbound } from '.';
+import type { ChatMessageInbound, ChatMessageInboundOptions } from '.';
export const template: FoundationElementTemplate<
-ViewTemplate
-> = () => html`
+ViewTemplate,
+ChatMessageInboundOptions> = (context, definition) => html`
+ ${startSlotTemplate(context, definition)}
@@ -17,5 +20,6 @@ ViewTemplate
${slotted({ property: 'slottedFooterActionsElements' })}
>
+ ${endSlotTemplate(context, definition)}
`;
From 58a9373799085fa8724b87b6d88e77dd81af8ea8 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Mon, 2 Feb 2026 07:53:11 +0200
Subject: [PATCH 20/22] typo that broke all the styles
---
packages/spright-components/src/chat/message/styles.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/spright-components/src/chat/message/styles.ts b/packages/spright-components/src/chat/message/styles.ts
index 4c9c38362e..ffa78b65c8 100644
--- a/packages/spright-components/src/chat/message/styles.ts
+++ b/packages/spright-components/src/chat/message/styles.ts
@@ -22,7 +22,7 @@ export const styles = css`
${display('flex')}
:host {
- min-width: ${standardPadding}};
+ min-width: ${standardPadding};
min-height: ${standardPadding};
flex-direction: row;
From 2051de02b938adfa40a56093cc8e137c371bada6 Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Mon, 2 Feb 2026 07:54:08 +0200
Subject: [PATCH 21/22] Use new messages in story
---
.../conversation/chat-conversation.stories.ts | 28 +++++++++----------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/packages/storybook/src/spright/chat/conversation/chat-conversation.stories.ts b/packages/storybook/src/spright/chat/conversation/chat-conversation.stories.ts
index 7eca6ccccf..c6e70e78b0 100644
--- a/packages/storybook/src/spright/chat/conversation/chat-conversation.stories.ts
+++ b/packages/storybook/src/spright/chat/conversation/chat-conversation.stories.ts
@@ -14,8 +14,9 @@ import {
chatInputTag
} from '@ni/spright-components/dist/esm/chat/input';
import type { ChatInputSendEventDetail } from '@ni/spright-components/dist/esm/chat/input/types';
-import { ChatMessageType } from '@ni/spright-components/dist/esm/chat/message/types';
-import { chatMessageTag } from '@ni/spright-components/dist/esm/chat/message';
+import { chatMessageInboundTag } from '@ni/spright-components/dist/esm/chat/message/inbound';
+import { chatMessageOutboundTag } from '@ni/spright-components/dist/esm/chat/message/outbound';
+import { chatMessageSystemTag } from '@ni/spright-components/dist/esm/chat/message/system';
import { richTextViewerTag } from '@ni/nimble-components/dist/esm/rich-text/viewer';
import { spinnerTag } from '@ni/nimble-components/dist/esm/spinner';
import { iconCopyTextTag } from '@ni/nimble-components/dist/esm/icons/copy-text';
@@ -59,22 +60,22 @@ export const chatConversation: StoryObj = {
}
<${chatConversationTag} ${ref('conversationRef')} appearance="${x => x.appearance}">
- <${chatMessageTag} message-type="${() => ChatMessageType.system}">
+ <${chatMessageSystemTag}>
To start, press any key.
- ${chatMessageTag}>
- <${chatMessageTag} message-type="${() => ChatMessageType.outbound}">
+ ${chatMessageSystemTag}>
+ <${chatMessageOutboundTag}>
Where is the Any key?
- ${chatMessageTag}>
- <${chatMessageTag} message-type="${() => ChatMessageType.outbound}">
+ ${chatMessageOutboundTag}>
+ <${chatMessageOutboundTag}>
<${richTextViewerTag} markdown="${() => markdownExample}">${richTextViewerTag}>
- ${chatMessageTag}>
- <${chatMessageTag} message-type="${() => ChatMessageType.system}">
+ ${chatMessageOutboundTag}>
+ <${chatMessageSystemTag}>
<${spinnerTag}
style="${isChromatic() ? '--ni-private-spinner-animation-play-state:paused' : ''}"
appearance="${() => SpinnerAppearance.accent}"
>${spinnerTag}>
- ${chatMessageTag}>
- <${chatMessageTag} message-type="${() => ChatMessageType.inbound}">
+ ${chatMessageSystemTag}>
+ <${chatMessageInboundTag}>
<${buttonTag} slot='footer-actions' appearance='ghost' title='Copy' content-hidden>
<${iconCopyTextTag} slot='start'>${iconCopyTextTag}>
Copy
@@ -107,7 +108,7 @@ export const chatConversation: StoryObj = {
<${buttonTag} slot='end' appearance='block'>
Check core temperature
${buttonTag}>
- ${chatMessageTag}>
+ ${chatMessageInboundTag}>
${when(x => x.input, html`
<${chatInputTag} slot='input' placeholder='Type a message' send-button-label='Send'
@send="${(x2, c2) => x2.sendMessage(c2.event as CustomEvent, x2.conversationRef)}"
@@ -140,8 +141,7 @@ export const chatConversation: StoryObj = {
appearance: 'default',
input: true,
sendMessage: (event, conversationRef) => {
- const message = document.createElement(chatMessageTag);
- message.messageType = ChatMessageType.outbound;
+ const message = document.createElement(chatMessageOutboundTag);
const span = document.createElement('span');
span.textContent = event.detail.text;
// Preserves new lines and trailing spaces that the user entered
From bff86fcc0aa6e18f3589bf4c0ee9b5bc52605b3d Mon Sep 17 00:00:00 2001
From: Jesse Attas
Date: Mon, 2 Feb 2026 14:22:37 +0200
Subject: [PATCH 22/22] Fix typo in slotted story
---
.../chat/conversation/chat-conversation-matrix.stories.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts b/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts
index 495be5fec0..02b07ce688 100644
--- a/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts
+++ b/packages/storybook/src/spright/chat/conversation/chat-conversation-matrix.stories.ts
@@ -289,7 +289,7 @@ const slottedButtonsInboundMessageComponent = (
width: 100%;
height: 100%;
">
- <${chatMessageInboundTag}">
+ <${chatMessageInboundTag}>