@yuva-devlab/ui 2.0.0 → 2.2.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 (71) 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/legal-footer/legal-footer.css +98 -0
  23. package/dist/components/legal-footer/legal-footer.mdx +38 -0
  24. package/dist/components/message/message.css +89 -0
  25. package/dist/components/message/message.mdx +14 -0
  26. package/dist/components/model-selector/model-selector.css +138 -0
  27. package/dist/components/model-selector/model-selector.mdx +26 -0
  28. package/dist/components/multi-select/multi-select.css +212 -0
  29. package/dist/components/multi-select/multi-select.mdx +30 -0
  30. package/dist/components/password-input/password-input.css +21 -0
  31. package/dist/components/password-input/password-input.mdx +30 -0
  32. package/dist/components/plan/plan.css +106 -0
  33. package/dist/components/plan/plan.mdx +22 -0
  34. package/dist/components/popover/popover.css +0 -5
  35. package/dist/components/prompt-input/prompt-input.css +140 -0
  36. package/dist/components/prompt-input/prompt-input.mdx +22 -0
  37. package/dist/components/queue/queue.css +76 -0
  38. package/dist/components/queue/queue.mdx +18 -0
  39. package/dist/components/search-input/search-input.css +21 -0
  40. package/dist/components/search-input/search-input.mdx +30 -0
  41. package/dist/components/select/select.css +1 -1
  42. package/dist/components/sonner/sonner.css +68 -17
  43. package/dist/components/sonner/sonner.mdx +5 -3
  44. package/dist/components/sources/sources.css +105 -0
  45. package/dist/components/sources/sources.mdx +18 -0
  46. package/dist/components/stack-trace/stack-trace.css +105 -0
  47. package/dist/components/stack-trace/stack-trace.mdx +18 -0
  48. package/dist/components/subagent/subagent.css +70 -0
  49. package/dist/components/subagent/subagent.mdx +18 -0
  50. package/dist/components/suggestion/suggestion.css +52 -0
  51. package/dist/components/suggestion/suggestion.mdx +14 -0
  52. package/dist/components/terminal/terminal.css +60 -0
  53. package/dist/components/terminal/terminal.mdx +26 -0
  54. package/dist/components/test-results/test-results.css +108 -0
  55. package/dist/components/test-results/test-results.mdx +18 -0
  56. package/dist/components/tool-call/tool-call.css +111 -0
  57. package/dist/components/tool-call/tool-call.mdx +22 -0
  58. package/dist/components/trace/trace.css +100 -0
  59. package/dist/components/trace/trace.mdx +18 -0
  60. package/dist/components.css +2716 -333
  61. package/dist/index.cjs +3605 -793
  62. package/dist/index.cjs.map +1 -1
  63. package/dist/index.d.cts +1065 -8
  64. package/dist/index.d.ts +1065 -8
  65. package/dist/index.js +3638 -842
  66. package/dist/index.js.map +1 -1
  67. package/dist/preset.css +0 -1
  68. package/dist/styles/common.css +0 -40
  69. package/dist/styles/components.css +2716 -333
  70. package/dist/styles/preset.css +0 -1
  71. package/package.json +4 -3
@@ -0,0 +1,140 @@
1
+ .dl-prompt-input {
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 100%;
5
+ border-radius: var(--radius-lg, 0.5rem);
6
+ border: 1px solid var(--border);
7
+ background-color: var(--card, var(--background));
8
+ box-shadow: 0 2px 8px rgb(0 0 0 / 0.05);
9
+ transition:
10
+ border-color 0.15s ease,
11
+ box-shadow 0.15s ease;
12
+ overflow: hidden;
13
+ }
14
+
15
+ .dl-prompt-input:focus-within {
16
+ border-color: var(--ring);
17
+ box-shadow: 0 0 0 1px var(--ring);
18
+ }
19
+
20
+ .dl-prompt-input--disabled {
21
+ opacity: 0.5;
22
+ cursor: not-allowed;
23
+ }
24
+
25
+ .dl-prompt-input__attachments {
26
+ display: flex;
27
+ flex-wrap: wrap;
28
+ gap: 0.375rem;
29
+ padding: 0.5rem 0.75rem 0;
30
+ }
31
+
32
+ .dl-prompt-input__chip {
33
+ display: inline-flex;
34
+ align-items: center;
35
+ gap: 0.375rem;
36
+ padding: 0.1875rem 0.5rem;
37
+ border-radius: var(--radius-sm, 0.25rem);
38
+ background-color: var(--secondary);
39
+ color: var(--secondary-foreground);
40
+ font-size: 0.75rem;
41
+ border: 1px solid var(--border);
42
+ }
43
+
44
+ .dl-prompt-input__chip-name {
45
+ max-width: 10rem;
46
+ overflow: hidden;
47
+ text-overflow: ellipsis;
48
+ white-space: nowrap;
49
+ }
50
+
51
+ .dl-prompt-input__chip-remove {
52
+ background: transparent;
53
+ border: none;
54
+ cursor: pointer;
55
+ padding: 0;
56
+ color: var(--muted-foreground);
57
+ display: inline-flex;
58
+ align-items: center;
59
+ }
60
+
61
+ .dl-prompt-input__chip-remove:hover {
62
+ color: var(--foreground);
63
+ }
64
+
65
+ .dl-prompt-input__textarea {
66
+ width: 100%;
67
+ min-height: 3.5rem;
68
+ max-height: 14rem;
69
+ padding: 0.75rem 0.875rem;
70
+ border: none;
71
+ background: transparent;
72
+ color: var(--foreground);
73
+ font-family: inherit;
74
+ font-size: 0.875rem;
75
+ line-height: 1.4;
76
+ resize: none;
77
+ outline: none;
78
+ box-sizing: border-box;
79
+ }
80
+
81
+ .dl-prompt-input__textarea::placeholder {
82
+ color: var(--muted-foreground);
83
+ }
84
+
85
+ .dl-prompt-input__toolbar {
86
+ display: flex;
87
+ align-items: center;
88
+ justify-content: space-between;
89
+ padding: 0.375rem 0.75rem 0.625rem;
90
+ gap: 0.5rem;
91
+ }
92
+
93
+ .dl-prompt-input__left-actions,
94
+ .dl-prompt-input__right-actions {
95
+ display: flex;
96
+ align-items: center;
97
+ gap: 0.375rem;
98
+ }
99
+
100
+ .dl-prompt-input__btn {
101
+ display: inline-flex;
102
+ align-items: center;
103
+ justify-content: center;
104
+ width: 1.875rem;
105
+ height: 1.875rem;
106
+ border-radius: 9999px;
107
+ border: 1px solid var(--border);
108
+ background-color: transparent;
109
+ color: var(--muted-foreground);
110
+ cursor: pointer;
111
+ transition: all 0.15s ease;
112
+ }
113
+
114
+ .dl-prompt-input__btn:hover:not(:disabled) {
115
+ background-color: var(--accent);
116
+ color: var(--foreground);
117
+ }
118
+
119
+ .dl-prompt-input__btn:disabled {
120
+ opacity: 0.4;
121
+ cursor: not-allowed;
122
+ }
123
+
124
+ .dl-prompt-input__btn--send {
125
+ background-color: var(--primary);
126
+ color: var(--primary-foreground);
127
+ border-color: var(--primary);
128
+ }
129
+
130
+ .dl-prompt-input__btn--send:hover:not(:disabled) {
131
+ opacity: 0.9;
132
+ background-color: var(--primary);
133
+ color: var(--primary-foreground);
134
+ }
135
+
136
+ .dl-prompt-input__btn--stop {
137
+ background-color: var(--destructive);
138
+ color: var(--destructive-foreground);
139
+ border-color: var(--destructive);
140
+ }
@@ -0,0 +1,22 @@
1
+ import { Meta, Title, Description, Canvas } from "@storybook/blocks";
2
+ import * as PromptInputStories from "./prompt-input.stories";
3
+
4
+ <Meta of={PromptInputStories} />
5
+
6
+ <Title />
7
+
8
+ # Prompt Input
9
+
10
+ Comprehensive message composition control for conversational AI, with auto-resizing textarea, Enter submission, file attachments, model selectors, and stop generation controls.
11
+
12
+ ## Default Input
13
+
14
+ <Canvas of={PromptInputStories.Default} />
15
+
16
+ ## With Files and Model Tag
17
+
18
+ <Canvas of={PromptInputStories.WithAttachmentsAndModel} />
19
+
20
+ ## Generation / Streaming State
21
+
22
+ <Canvas of={PromptInputStories.StreamingState} />
@@ -0,0 +1,76 @@
1
+ .dl-queue {
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-queue__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
+ font-weight: 600;
20
+ color: var(--foreground);
21
+ }
22
+
23
+ .dl-queue__list {
24
+ display: flex;
25
+ flex-direction: column;
26
+ divide-y: 1px solid var(--border);
27
+ }
28
+
29
+ .dl-queue-item {
30
+ display: flex;
31
+ align-items: center;
32
+ justify-content: space-between;
33
+ padding: 0.5rem 0.75rem;
34
+ gap: 0.5rem;
35
+ transition: background-color 0.12s ease;
36
+ }
37
+
38
+ .dl-queue-item:hover {
39
+ background-color: var(--accent);
40
+ }
41
+
42
+ .dl-queue-item__info {
43
+ display: flex;
44
+ align-items: center;
45
+ gap: 0.5rem;
46
+ min-width: 0;
47
+ }
48
+
49
+ .dl-queue-item__index {
50
+ display: inline-flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+ width: 1.25rem;
54
+ height: 1.25rem;
55
+ border-radius: 9999px;
56
+ background-color: var(--muted);
57
+ font-size: 0.6875rem;
58
+ font-weight: 600;
59
+ color: var(--muted-foreground);
60
+ shrink: 0;
61
+ }
62
+
63
+ .dl-queue-item__title {
64
+ overflow: hidden;
65
+ text-overflow: ellipsis;
66
+ white-space: nowrap;
67
+ font-weight: 500;
68
+ color: var(--foreground);
69
+ }
70
+
71
+ .dl-queue-item__actions {
72
+ display: flex;
73
+ align-items: center;
74
+ gap: 0.5rem;
75
+ shrink: 0;
76
+ }
@@ -0,0 +1,18 @@
1
+ import { Meta, Title, Description, Canvas, Controls } from "@storybook/blocks";
2
+ import * as QueueStories from "./queue.stories";
3
+
4
+ <Meta of={QueueStories} />
5
+
6
+ <Title />
7
+
8
+ # Queue
9
+
10
+ Agent task execution queue container tracking scheduled, running, and queued jobs with priority indicators.
11
+
12
+ ## Default
13
+
14
+ <Canvas of={QueueStories.Default} />
15
+
16
+ ## Component Properties
17
+
18
+ <Controls />
@@ -0,0 +1,21 @@
1
+ .dl-search-clear-btn {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ background: transparent;
6
+ border: none;
7
+ cursor: pointer;
8
+ padding: 0;
9
+ color: var(--muted-foreground);
10
+ transition: color 0.15s ease;
11
+ }
12
+
13
+ .dl-search-clear-btn:hover {
14
+ color: var(--foreground);
15
+ }
16
+
17
+ .dl-search-clear-btn:focus-visible {
18
+ outline: 2px solid var(--ring);
19
+ outline-offset: 2px;
20
+ border-radius: var(--radius-sm, 0.25rem);
21
+ }
@@ -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 />