From ff01901eddf646fa8eaa2f6a739049bd854cd8c4 Mon Sep 17 00:00:00 2001
From: Airike Jaska <95303654+airikej@users.noreply.github.com>
Date: Wed, 13 May 2026 13:28:41 +0300
Subject: [PATCH 1/3] feat(text-group): add TextGroupList feature #81
---
.../components/content/text-group/index.ts | 2 +
.../text-group-list/text-group-list.tsx | 134 ++++++++++++++++++
.../content/text-group/text-group.module.scss | 18 +++
.../content/text-group/text-group.spec.tsx | 99 +++++++++++++
.../content/text-group/text-group.stories.tsx | 66 +++++++++
.../content/text-group/text-group.tsx | 21 ++-
src/tedi/index.ts | 2 +-
7 files changed, 337 insertions(+), 5 deletions(-)
create mode 100644 src/tedi/components/content/text-group/index.ts
create mode 100644 src/tedi/components/content/text-group/text-group-list/text-group-list.tsx
diff --git a/src/tedi/components/content/text-group/index.ts b/src/tedi/components/content/text-group/index.ts
new file mode 100644
index 000000000..db9a2801f
--- /dev/null
+++ b/src/tedi/components/content/text-group/index.ts
@@ -0,0 +1,2 @@
+export * from './text-group';
+export * from './text-group-list/text-group-list';
diff --git a/src/tedi/components/content/text-group/text-group-list/text-group-list.tsx b/src/tedi/components/content/text-group/text-group-list/text-group-list.tsx
new file mode 100644
index 000000000..92730b661
--- /dev/null
+++ b/src/tedi/components/content/text-group/text-group-list/text-group-list.tsx
@@ -0,0 +1,134 @@
+import cn from 'classnames';
+import React from 'react';
+
+import { BreakpointSupport, useBreakpointProps } from '../../../../helpers';
+import { Label } from '../../label/label';
+import styles from '../text-group.module.scss';
+
+type TextAlign = 'left' | 'right';
+
+type TextGroupListBreakpointProps =
+ | {
+ /**
+ * Type of text group layout.
+ */
+ type?: 'horizontal';
+ /**
+ * Alignment for the label text.
+ * @default 'left'
+ */
+ labelAlign?: TextAlign;
+ /**
+ * Width for the label column (e.g., `'200px'`, `'30%'`, or a `number`
+ * interpreted as a percent).
+ * @default 'auto'
+ */
+ labelWidth?: string | number;
+ }
+ | {
+ /**
+ * Type of text group layout.
+ */
+ type: 'vertical';
+ /**
+ * Alignment for the label text. Vertical layout only supports left
+ * alignment — pass `'right'` only with `type: 'horizontal'`.
+ * @default 'left'
+ */
+ labelAlign?: 'left';
+ /**
+ * Width for the label column (e.g., `'200px'`, `'30%'`, or a `number`
+ * interpreted as a percent).
+ * @default 'auto'
+ */
+ labelWidth?: string | number;
+ };
+
+export interface TextGroupListItem {
+ /**
+ * Label rendered as the `
` for this row. Strings are auto-wrapped in
+ * `