@yuva-devlab/ui 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/common.css +0 -40
  2. package/dist/components/badge/badge.css +31 -27
  3. package/dist/components/badge/badge.mdx +6 -4
  4. package/dist/components/chain-of-thought/chain-of-thought.css +72 -0
  5. package/dist/components/chain-of-thought/chain-of-thought.mdx +18 -0
  6. package/dist/components/checkpoint/checkpoint.css +54 -0
  7. package/dist/components/checkpoint/checkpoint.mdx +18 -0
  8. package/dist/components/code-block/code-block.css +84 -0
  9. package/dist/components/code-block/code-block.mdx +26 -0
  10. package/dist/components/confirmation/confirmation.css +75 -0
  11. package/dist/components/confirmation/confirmation.mdx +22 -0
  12. package/dist/components/context/context.css +80 -0
  13. package/dist/components/context/context.mdx +18 -0
  14. package/dist/components/data-table/data-table.css +71 -0
  15. package/dist/components/data-table/data-table.mdx +22 -0
  16. package/dist/components/file-tree/file-tree.css +58 -0
  17. package/dist/components/file-tree/file-tree.mdx +18 -0
  18. package/dist/components/input-number/input-number.css +95 -0
  19. package/dist/components/input-number/input-number.mdx +34 -0
  20. package/dist/components/kbd/kbd.css +78 -0
  21. package/dist/components/kbd/kbd.mdx +30 -0
  22. package/dist/components/message/message.css +89 -0
  23. package/dist/components/message/message.mdx +14 -0
  24. package/dist/components/model-selector/model-selector.css +138 -0
  25. package/dist/components/model-selector/model-selector.mdx +26 -0
  26. package/dist/components/multi-select/multi-select.css +212 -0
  27. package/dist/components/multi-select/multi-select.mdx +30 -0
  28. package/dist/components/password-input/password-input.css +21 -0
  29. package/dist/components/password-input/password-input.mdx +30 -0
  30. package/dist/components/plan/plan.css +106 -0
  31. package/dist/components/plan/plan.mdx +22 -0
  32. package/dist/components/popover/popover.css +0 -5
  33. package/dist/components/prompt-input/prompt-input.css +140 -0
  34. package/dist/components/prompt-input/prompt-input.mdx +22 -0
  35. package/dist/components/queue/queue.css +76 -0
  36. package/dist/components/queue/queue.mdx +18 -0
  37. package/dist/components/search-input/search-input.css +21 -0
  38. package/dist/components/search-input/search-input.mdx +30 -0
  39. package/dist/components/select/select.css +1 -1
  40. package/dist/components/sonner/sonner.css +68 -17
  41. package/dist/components/sonner/sonner.mdx +5 -3
  42. package/dist/components/sources/sources.css +105 -0
  43. package/dist/components/sources/sources.mdx +18 -0
  44. package/dist/components/stack-trace/stack-trace.css +105 -0
  45. package/dist/components/stack-trace/stack-trace.mdx +18 -0
  46. package/dist/components/subagent/subagent.css +70 -0
  47. package/dist/components/subagent/subagent.mdx +18 -0
  48. package/dist/components/suggestion/suggestion.css +52 -0
  49. package/dist/components/suggestion/suggestion.mdx +14 -0
  50. package/dist/components/terminal/terminal.css +60 -0
  51. package/dist/components/terminal/terminal.mdx +26 -0
  52. package/dist/components/test-results/test-results.css +108 -0
  53. package/dist/components/test-results/test-results.mdx +18 -0
  54. package/dist/components/tool-call/tool-call.css +111 -0
  55. package/dist/components/tool-call/tool-call.mdx +22 -0
  56. package/dist/components/trace/trace.css +100 -0
  57. package/dist/components/trace/trace.mdx +18 -0
  58. package/dist/components.css +2582 -299
  59. package/dist/index.cjs +3539 -818
  60. package/dist/index.cjs.map +1 -1
  61. package/dist/index.d.cts +1041 -8
  62. package/dist/index.d.ts +1041 -8
  63. package/dist/index.js +3570 -864
  64. package/dist/index.js.map +1 -1
  65. package/dist/preset.css +0 -1
  66. package/dist/styles/common.css +0 -40
  67. package/dist/styles/components.css +2582 -299
  68. package/dist/styles/preset.css +0 -1
  69. package/package.json +1 -1
@@ -0,0 +1,30 @@
1
+ import { Meta, Title, Description, Canvas, Controls } from "@storybook/blocks";
2
+ import * as SearchInputStories from "./search-input.stories";
3
+
4
+ <Meta of={SearchInputStories} />
5
+
6
+ <Title />
7
+
8
+ # Search Input
9
+
10
+ Standardized search field equipped with a persistent search icon, an instant-clear action, and an asynchronous loading spinner.
11
+
12
+ ## Default
13
+
14
+ <Canvas of={SearchInputStories.Default} />
15
+
16
+ ## With Query & Clear Action
17
+
18
+ <Canvas of={SearchInputStories.WithValue} />
19
+
20
+ ## Background Loading State
21
+
22
+ <Canvas of={SearchInputStories.LoadingState} />
23
+
24
+ ## Disabled State
25
+
26
+ <Canvas of={SearchInputStories.Disabled} />
27
+
28
+ ## Component Properties
29
+
30
+ <Controls />
@@ -70,7 +70,7 @@
70
70
  max-height: 24rem;
71
71
  min-width: var(--radix-select-trigger-width, 8rem);
72
72
  width: var(--radix-select-trigger-width, max-content);
73
- max-width: var(--radix-select-content-available-width, 100vw);
73
+ max-width: max-content;
74
74
  overflow: hidden;
75
75
  border-radius: var(--radius-md, 0.375rem);
76
76
  border: 1px solid var(--border);
@@ -1,33 +1,33 @@
1
1
  .dl-toaster {
2
2
  font-family: inherit;
3
- --normal-bg: var(--card, var(--background));
4
- --normal-text: var(--card-foreground, var(--foreground));
5
- --normal-border: var(--border);
3
+ --normal-bg: var(--toast-bg, var(--card, var(--background)));
4
+ --normal-text: var(--toast-fg, var(--card-foreground, var(--foreground)));
5
+ --normal-border: var(--toast-border, var(--border));
6
6
  }
7
7
 
8
8
  [data-sonner-toaster][data-sonner-theme="dark"],
9
9
  .dark [data-sonner-toaster],
10
10
  [data-theme*="dark"] [data-sonner-toaster] {
11
- --normal-bg: var(--card, var(--background));
12
- --normal-text: var(--card-foreground, var(--foreground));
13
- --normal-border: var(--border);
11
+ --normal-bg: var(--toast-bg, var(--card, var(--background)));
12
+ --normal-text: var(--toast-fg, var(--card-foreground, var(--foreground)));
13
+ --normal-border: var(--toast-border, var(--border));
14
14
  }
15
15
 
16
16
  [data-sonner-toaster][data-sonner-theme="light"],
17
17
  .light [data-sonner-toaster],
18
18
  [data-theme*="light"] [data-sonner-toaster] {
19
- --normal-bg: var(--card, var(--background));
20
- --normal-text: var(--card-foreground, var(--foreground));
21
- --normal-border: var(--border);
19
+ --normal-bg: var(--toast-bg, var(--card, var(--background)));
20
+ --normal-text: var(--toast-fg, var(--card-foreground, var(--foreground)));
21
+ --normal-border: var(--toast-border, var(--border));
22
22
  }
23
23
 
24
24
  .dl-toaster .dl-toast,
25
25
  [data-sonner-toaster] [data-sonner-toast][data-styled="true"] {
26
- border-radius: var(--radius-md, 0.375rem);
27
- border: 1px solid var(--border);
28
- background-color: var(--card, var(--background));
29
- color: var(--card-foreground, var(--foreground));
30
- box-shadow: 0 8px 32px rgb(0 0 0 / 0.15);
26
+ border-radius: var(--toast-radius, var(--radius-md, 0.375rem));
27
+ border: 1px solid var(--toast-border, var(--border));
28
+ background-color: var(--toast-bg, var(--card, var(--background)));
29
+ color: var(--toast-fg, var(--card-foreground, var(--foreground)));
30
+ box-shadow: var(--toast-shadow, 0 8px 32px rgb(0 0 0 / 0.15));
31
31
  }
32
32
 
33
33
  .dl-toaster .dl-toast__desc,
@@ -48,7 +48,58 @@
48
48
  }
49
49
 
50
50
  [data-sonner-toaster] [data-sonner-toast] [data-close-button] {
51
- background-color: var(--card, var(--background));
52
- border-color: var(--border);
53
- color: var(--card-foreground, var(--foreground));
51
+ background-color: var(--toast-bg, var(--card, var(--background)));
52
+ border-color: var(--toast-border, var(--border));
53
+ color: var(--toast-fg, var(--card-foreground, var(--foreground)));
54
+ }
55
+
56
+ /* ── FinAI Semantic Feedback (Text & Icon Colors, Subtle Borders via CSS Variables) ── */
57
+ [data-sonner-toaster] [data-sonner-toast][data-type="success"] {
58
+ border-color: color-mix(
59
+ in oklch,
60
+ var(--toast-success, var(--success)) 35%,
61
+ transparent
62
+ );
63
+ }
64
+
65
+ [data-sonner-toaster] [data-sonner-toast][data-type="success"] [data-icon] {
66
+ color: var(--toast-success, var(--success));
67
+ }
68
+
69
+ [data-sonner-toaster] [data-sonner-toast][data-type="error"],
70
+ [data-sonner-toaster] [data-sonner-toast][data-type="destructive"] {
71
+ border-color: color-mix(
72
+ in oklch,
73
+ var(--toast-destructive, var(--destructive)) 35%,
74
+ transparent
75
+ );
76
+ }
77
+
78
+ [data-sonner-toaster] [data-sonner-toast][data-type="error"] [data-icon],
79
+ [data-sonner-toaster] [data-sonner-toast][data-type="destructive"] [data-icon] {
80
+ color: var(--toast-destructive, var(--destructive));
81
+ }
82
+
83
+ [data-sonner-toaster] [data-sonner-toast][data-type="warning"] {
84
+ border-color: color-mix(
85
+ in oklch,
86
+ var(--toast-warning, var(--warning)) 35%,
87
+ transparent
88
+ );
89
+ }
90
+
91
+ [data-sonner-toaster] [data-sonner-toast][data-type="warning"] [data-icon] {
92
+ color: var(--toast-warning, var(--warning));
93
+ }
94
+
95
+ [data-sonner-toaster] [data-sonner-toast][data-type="info"] {
96
+ border-color: color-mix(
97
+ in oklch,
98
+ var(--toast-info, var(--info)) 35%,
99
+ transparent
100
+ );
101
+ }
102
+
103
+ [data-sonner-toaster] [data-sonner-toast][data-type="info"] [data-icon] {
104
+ color: var(--toast-info, var(--info));
54
105
  }
@@ -1,5 +1,5 @@
1
- import { Meta, Title, Description, Canvas, Controls } from "@storybook/blocks";
2
- import * as SonnerStories from "./sonner.stories";
1
+ pimport { Meta, Title, Description, Canvas, Controls } from "@storybook/blocks";
2
+ import \* as SonnerStories from "./sonner.stories";
3
3
 
4
4
  <Meta of={SonnerStories} />
5
5
 
@@ -7,7 +7,9 @@ import * as SonnerStories from "./sonner.stories";
7
7
 
8
8
  # Toaster / Toast
9
9
 
10
- An opinionated, elegant toast notification component built upon Sonner and styled with `@yuva-devlab/ui` design system tokens.
10
+ An opinionated, elegant toast notification component built upon Sonner and fully integrated with `@yuva-devlab/tokens` CSS variables.
11
+
12
+ Defaults to `bottom-right` positioning with a subtle dark/light card surface and isolated semantic feedback icons (`success`, `error`, `warning`, `info`).
11
13
 
12
14
  ## Default
13
15
 
@@ -0,0 +1,105 @@
1
+ .dl-citation {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ min-width: 1.125rem;
6
+ height: 1.125rem;
7
+ padding: 0 0.25rem;
8
+ margin: 0 0.125rem;
9
+ font-size: 0.6875rem;
10
+ font-weight: 600;
11
+ line-height: 1;
12
+ border-radius: var(--radius-sm, 0.25rem);
13
+ background-color: var(--muted);
14
+ color: var(--primary);
15
+ border: 1px solid var(--border);
16
+ cursor: pointer;
17
+ vertical-align: baseline;
18
+ transition: all 0.12s ease;
19
+ text-decoration: none;
20
+ }
21
+
22
+ .dl-citation:hover {
23
+ background-color: var(--accent);
24
+ color: var(--accent-foreground);
25
+ border-color: var(--ring);
26
+ }
27
+
28
+ .dl-sources {
29
+ display: flex;
30
+ flex-direction: column;
31
+ gap: 0.5rem;
32
+ width: 100%;
33
+ margin-top: 0.75rem;
34
+ }
35
+
36
+ .dl-sources__header {
37
+ display: flex;
38
+ align-items: center;
39
+ gap: 0.375rem;
40
+ font-size: 0.75rem;
41
+ font-weight: 600;
42
+ text-transform: uppercase;
43
+ letter-spacing: 0.05em;
44
+ color: var(--muted-foreground);
45
+ }
46
+
47
+ .dl-sources__grid {
48
+ display: grid;
49
+ grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr));
50
+ gap: 0.5rem;
51
+ }
52
+
53
+ .dl-source-card {
54
+ display: flex;
55
+ flex-direction: column;
56
+ padding: 0.5rem 0.625rem;
57
+ border-radius: var(--radius-md, 0.375rem);
58
+ border: 1px solid var(--border);
59
+ background-color: var(--card, var(--background));
60
+ text-decoration: none;
61
+ color: var(--foreground);
62
+ transition: all 0.15s ease;
63
+ }
64
+
65
+ .dl-source-card:hover {
66
+ border-color: var(--ring);
67
+ background-color: var(--accent);
68
+ }
69
+
70
+ .dl-source-card__meta {
71
+ display: flex;
72
+ align-items: center;
73
+ gap: 0.375rem;
74
+ font-size: 0.6875rem;
75
+ color: var(--muted-foreground);
76
+ }
77
+
78
+ .dl-source-card__index {
79
+ display: inline-flex;
80
+ align-items: center;
81
+ justify-content: center;
82
+ width: 0.875rem;
83
+ height: 0.875rem;
84
+ border-radius: 9999px;
85
+ background-color: var(--muted);
86
+ font-weight: 600;
87
+ font-size: 0.625rem;
88
+ }
89
+
90
+ .dl-source-card__domain {
91
+ overflow: hidden;
92
+ text-overflow: ellipsis;
93
+ white-space: nowrap;
94
+ }
95
+
96
+ .dl-source-card__title {
97
+ margin-top: 0.25rem;
98
+ font-size: 0.75rem;
99
+ font-weight: 500;
100
+ line-height: 1.3;
101
+ display: -webkit-box;
102
+ -webkit-line-clamp: 2;
103
+ -webkit-box-orient: vertical;
104
+ overflow: hidden;
105
+ }
@@ -0,0 +1,18 @@
1
+ import { Meta, Title, Description, Canvas, Controls } from "@storybook/blocks";
2
+ import * as SourcesStories from "./sources.stories";
3
+
4
+ <Meta of={SourcesStories} />
5
+
6
+ <Title />
7
+
8
+ # Sources & Inline Citation
9
+
10
+ Components for displaying AI ground-truth search sources, web references, and clickable inline citation badges.
11
+
12
+ ## Default
13
+
14
+ <Canvas of={SourcesStories.Default} />
15
+
16
+ ## Component Properties
17
+
18
+ <Controls />
@@ -0,0 +1,105 @@
1
+ .dl-stack-trace {
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 100%;
5
+ border-radius: var(--radius-md, 0.375rem);
6
+ border: 1px solid var(--border);
7
+ background-color: var(--card, var(--background));
8
+ overflow: hidden;
9
+ font-family: var(--font-mono, ui-monospace, SFMono-Regular, monospace);
10
+ font-size: 0.8125rem;
11
+ }
12
+
13
+ .dl-stack-trace__header {
14
+ display: flex;
15
+ align-items: flex-start;
16
+ justify-content: space-between;
17
+ padding: 0.625rem 0.875rem;
18
+ background-color: color-mix(
19
+ in oklch,
20
+ var(--destructive) 10%,
21
+ var(--background)
22
+ );
23
+ border-bottom: 1px solid var(--border);
24
+ gap: 0.75rem;
25
+ }
26
+
27
+ .dl-stack-trace__title {
28
+ display: flex;
29
+ flex-direction: column;
30
+ gap: 0.125rem;
31
+ }
32
+
33
+ .dl-stack-trace__error-type {
34
+ font-weight: 700;
35
+ color: var(--destructive);
36
+ font-size: 0.875rem;
37
+ }
38
+
39
+ .dl-stack-trace__message {
40
+ color: var(--foreground);
41
+ font-size: 0.8125rem;
42
+ line-height: 1.4;
43
+ word-break: break-word;
44
+ }
45
+
46
+ .dl-stack-trace__frames {
47
+ display: flex;
48
+ flex-direction: column;
49
+ divide-y: 1px solid var(--border);
50
+ max-height: 22rem;
51
+ overflow-y: auto;
52
+ }
53
+
54
+ .dl-stack-frame {
55
+ display: flex;
56
+ flex-direction: column;
57
+ padding: 0.5rem 0.875rem;
58
+ border-bottom: 1px solid var(--border);
59
+ transition: background-color 0.12s ease;
60
+ }
61
+
62
+ .dl-stack-frame:last-child {
63
+ border-bottom: none;
64
+ }
65
+
66
+ .dl-stack-frame:hover {
67
+ background-color: var(--accent);
68
+ }
69
+
70
+ .dl-stack-frame--internal {
71
+ opacity: 0.65;
72
+ }
73
+
74
+ .dl-stack-frame__header {
75
+ display: flex;
76
+ align-items: baseline;
77
+ justify-content: space-between;
78
+ gap: 0.5rem;
79
+ cursor: pointer;
80
+ user-select: none;
81
+ }
82
+
83
+ .dl-stack-frame__fn {
84
+ font-weight: 600;
85
+ color: var(--primary);
86
+ }
87
+
88
+ .dl-stack-frame__location {
89
+ color: var(--muted-foreground);
90
+ font-size: 0.75rem;
91
+ overflow: hidden;
92
+ text-overflow: ellipsis;
93
+ white-space: nowrap;
94
+ }
95
+
96
+ .dl-stack-frame__snippet {
97
+ margin-top: 0.375rem;
98
+ padding: 0.375rem 0.5rem;
99
+ background-color: var(--muted);
100
+ border-radius: var(--radius-sm, 0.25rem);
101
+ font-size: 0.75rem;
102
+ line-height: 1.4;
103
+ white-space: pre-wrap;
104
+ color: var(--foreground);
105
+ }
@@ -0,0 +1,18 @@
1
+ import { Meta, Title, Description, Canvas, Controls } from "@storybook/blocks";
2
+ import * as StackTraceStories from "./stack-trace.stories";
3
+
4
+ <Meta of={StackTraceStories} />
5
+
6
+ <Title />
7
+
8
+ # Stack Trace
9
+
10
+ Formatted exception and error trace presentation container highlighting error messages, source file frames, and code excerpts.
11
+
12
+ ## Default
13
+
14
+ <Canvas of={StackTraceStories.Default} />
15
+
16
+ ## Component Properties
17
+
18
+ <Controls />
@@ -0,0 +1,70 @@
1
+ .dl-subagent {
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 100%;
5
+ border-radius: var(--radius-md, 0.375rem);
6
+ border: 1px solid var(--border);
7
+ background-color: var(--card, var(--background));
8
+ overflow: hidden;
9
+ font-size: 0.8125rem;
10
+ }
11
+
12
+ .dl-subagent__header {
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: space-between;
16
+ padding: 0.5rem 0.75rem;
17
+ background-color: var(--muted);
18
+ border-bottom: 1px solid var(--border);
19
+ cursor: pointer;
20
+ user-select: none;
21
+ }
22
+
23
+ .dl-subagent__title-area {
24
+ display: flex;
25
+ align-items: center;
26
+ gap: 0.5rem;
27
+ }
28
+
29
+ .dl-subagent__avatar {
30
+ display: flex;
31
+ align-items: center;
32
+ justify-content: center;
33
+ width: 1.5rem;
34
+ height: 1.5rem;
35
+ border-radius: 9999px;
36
+ background-color: var(--primary);
37
+ color: var(--primary-foreground);
38
+ font-size: 0.6875rem;
39
+ font-weight: 700;
40
+ }
41
+
42
+ .dl-subagent__meta {
43
+ display: flex;
44
+ flex-direction: column;
45
+ }
46
+
47
+ .dl-subagent__name {
48
+ font-weight: 600;
49
+ color: var(--foreground);
50
+ line-height: 1.2;
51
+ }
52
+
53
+ .dl-subagent__role {
54
+ font-size: 0.6875rem;
55
+ color: var(--muted-foreground);
56
+ }
57
+
58
+ .dl-subagent__badges {
59
+ display: flex;
60
+ align-items: center;
61
+ gap: 0.375rem;
62
+ }
63
+
64
+ .dl-subagent__content {
65
+ padding: 0.75rem;
66
+ background-color: var(--background);
67
+ font-size: 0.75rem;
68
+ line-height: 1.5;
69
+ color: var(--foreground);
70
+ }
@@ -0,0 +1,18 @@
1
+ import { Meta, Title, Description, Canvas, Controls } from "@storybook/blocks";
2
+ import * as SubagentStories from "./subagent.stories";
3
+
4
+ <Meta of={SubagentStories} />
5
+
6
+ <Title />
7
+
8
+ # Subagent
9
+
10
+ Lifecycle and activity card for delegated subagent tasks, showing status, conversation ID, model, and message stream.
11
+
12
+ ## Default
13
+
14
+ <Canvas of={SubagentStories.Default} />
15
+
16
+ ## Component Properties
17
+
18
+ <Controls />
@@ -0,0 +1,52 @@
1
+ .dl-suggestion-list {
2
+ display: flex;
3
+ gap: 0.5rem;
4
+ width: 100%;
5
+ }
6
+
7
+ .dl-suggestion-list--wrap {
8
+ flex-wrap: wrap;
9
+ }
10
+
11
+ .dl-suggestion-list--scroll {
12
+ overflow-x: auto;
13
+ padding-bottom: 0.25rem;
14
+ }
15
+
16
+ .dl-suggestion {
17
+ display: inline-flex;
18
+ align-items: center;
19
+ gap: 0.375rem;
20
+ padding: 0.375rem 0.75rem;
21
+ border-radius: 9999px;
22
+ border: 1px solid var(--border);
23
+ background-color: var(--secondary, var(--background));
24
+ color: var(--foreground);
25
+ font-size: 0.75rem;
26
+ font-weight: 500;
27
+ cursor: pointer;
28
+ text-align: left;
29
+ transition: all 0.15s ease;
30
+ white-space: nowrap;
31
+ }
32
+
33
+ .dl-suggestion:hover {
34
+ background-color: var(--accent);
35
+ border-color: color-mix(in oklch, var(--primary) 30%, var(--border));
36
+ }
37
+
38
+ .dl-suggestion__icon {
39
+ display: inline-flex;
40
+ align-items: center;
41
+ justify-content: center;
42
+ color: var(--muted-foreground);
43
+ }
44
+
45
+ .dl-suggestion:hover .dl-suggestion__icon {
46
+ color: var(--primary);
47
+ }
48
+
49
+ .dl-suggestion__description {
50
+ color: var(--muted-foreground);
51
+ font-weight: 400;
52
+ }
@@ -0,0 +1,14 @@
1
+ import { Meta, Title, Description, Canvas } from "@storybook/blocks";
2
+ import * as SuggestionStories from "./suggestion.stories";
3
+
4
+ <Meta of={SuggestionStories} />
5
+
6
+ <Title />
7
+
8
+ # Suggestion
9
+
10
+ Clickable starter prompt and follow-up query pills designed for empty state conversations or smart follow-up suggestions.
11
+
12
+ ## Suggestion Pills List
13
+
14
+ <Canvas of={SuggestionStories.Default} />
@@ -0,0 +1,60 @@
1
+ .dl-terminal {
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 100%;
5
+ border-radius: var(--radius-md, 0.375rem);
6
+ border: 1px solid var(--border);
7
+ background-color: var(--secondary, #0d1117);
8
+ color: var(--foreground);
9
+ font-family: var(--font-mono, ui-monospace, SFMono-Regular, monospace);
10
+ font-size: 0.8125rem;
11
+ overflow: hidden;
12
+ }
13
+
14
+ .dl-terminal__header {
15
+ display: flex;
16
+ align-items: center;
17
+ justify-content: space-between;
18
+ padding: 0.375rem 0.75rem;
19
+ border-bottom: 1px solid var(--border);
20
+ background-color: var(--background);
21
+ font-size: 0.75rem;
22
+ }
23
+
24
+ .dl-terminal__dots {
25
+ display: flex;
26
+ align-items: center;
27
+ gap: 0.375rem;
28
+ }
29
+
30
+ .dl-terminal__dot {
31
+ width: 0.625rem;
32
+ height: 0.625rem;
33
+ border-radius: 9999px;
34
+ background-color: var(--muted-foreground);
35
+ opacity: 0.4;
36
+ }
37
+
38
+ .dl-terminal__title {
39
+ display: flex;
40
+ align-items: center;
41
+ gap: 0.375rem;
42
+ font-weight: 500;
43
+ color: var(--muted-foreground);
44
+ }
45
+
46
+ .dl-terminal__output {
47
+ margin: 0;
48
+ padding: 0.75rem 1rem;
49
+ overflow-y: auto;
50
+ line-height: 1.5;
51
+ white-space: pre-wrap;
52
+ word-break: break-all;
53
+ color: var(--foreground);
54
+ }
55
+
56
+ .dl-terminal__prompt-line {
57
+ color: var(--primary);
58
+ font-weight: 600;
59
+ margin-bottom: 0.25rem;
60
+ }
@@ -0,0 +1,26 @@
1
+ import { Meta, Title, Description, Canvas, Controls } from "@storybook/blocks";
2
+ import * as TerminalStories from "./terminal.stories";
3
+
4
+ <Meta of={TerminalStories} />
5
+
6
+ <Title />
7
+
8
+ # Terminal
9
+
10
+ Shell command execution container mimicking native terminal output with prompt indicator, window dots, and copy action.
11
+
12
+ ## Default
13
+
14
+ <Canvas of={TerminalStories.Default} />
15
+
16
+ ## Streaming Output
17
+
18
+ <Canvas of={TerminalStories.StreamingLogs} />
19
+
20
+ ## Custom Composition
21
+
22
+ <Canvas of={TerminalStories.CustomComposition} />
23
+
24
+ ## Component Properties
25
+
26
+ <Controls />