@epicbagel/saas-kit 1.0.0 → 1.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.
- package/README.md +38 -1
- package/THIRD_PARTY_NOTICES.md +13 -7
- package/dist/chunk-2AU7ZRGX.cjs +96 -0
- package/dist/chunk-2BTDBZYN.cjs +154 -0
- package/dist/chunk-2HV2KKOE.cjs +38 -0
- package/dist/chunk-2KFZQJH5.cjs +29 -0
- package/dist/chunk-32Q4XOTU.cjs +204 -0
- package/dist/chunk-42RTTHND.js +29 -0
- package/dist/chunk-6FC65AZQ.js +38 -0
- package/dist/chunk-6V4XMQ6D.js +118 -0
- package/dist/chunk-B765DSRG.cjs +66 -0
- package/dist/chunk-ELPV44S6.cjs +44 -0
- package/dist/chunk-EOUO3ORO.cjs +244 -0
- package/dist/chunk-EZCKWTH7.js +204 -0
- package/dist/chunk-F366BHWH.js +116 -0
- package/dist/chunk-GFG2R5BZ.js +132 -0
- package/dist/chunk-HAC32ALJ.js +244 -0
- package/dist/chunk-I5UQSBBZ.cjs +118 -0
- package/dist/chunk-INNGGLMZ.js +44 -0
- package/dist/chunk-IW4ZIXXG.js +66 -0
- package/dist/chunk-JZOBIPFC.js +96 -0
- package/dist/chunk-KENBU3NV.cjs +27 -0
- package/dist/chunk-MHYAVXOE.js +159 -0
- package/dist/chunk-RIWLAMME.cjs +159 -0
- package/dist/chunk-SUB4BAYE.cjs +73 -0
- package/dist/chunk-THWIJG5C.js +73 -0
- package/dist/chunk-V4YWTRLD.cjs +116 -0
- package/dist/chunk-VY5U4VGV.js +27 -0
- package/dist/chunk-XABXUP6L.cjs +132 -0
- package/dist/chunk-Z45YKVAM.js +154 -0
- package/dist/primitives/action-dock.cjs +8 -0
- package/dist/primitives/action-dock.d.cts +10 -0
- package/dist/primitives/action-dock.d.ts +10 -0
- package/dist/primitives/action-dock.js +8 -0
- package/dist/primitives/alert.d.cts +1 -1
- package/dist/primitives/alert.d.ts +1 -1
- package/dist/primitives/attachment.cjs +25 -203
- package/dist/primitives/attachment.d.cts +1 -1
- package/dist/primitives/attachment.d.ts +1 -1
- package/dist/primitives/attachment.js +12 -190
- package/dist/primitives/badge.d.cts +1 -1
- package/dist/primitives/badge.d.ts +1 -1
- package/dist/primitives/board-view.cjs +3 -3
- package/dist/primitives/board-view.js +2 -2
- package/dist/primitives/bubble.cjs +14 -0
- package/dist/primitives/bubble.d.cts +21 -0
- package/dist/primitives/bubble.d.ts +21 -0
- package/dist/primitives/bubble.js +14 -0
- package/dist/primitives/button.d.cts +2 -2
- package/dist/primitives/button.d.ts +2 -2
- package/dist/primitives/chat.cjs +864 -0
- package/dist/primitives/chat.d.cts +326 -0
- package/dist/primitives/chat.d.ts +326 -0
- package/dist/primitives/chat.js +864 -0
- package/dist/primitives/connection.cjs +6 -6
- package/dist/primitives/connection.js +7 -7
- package/dist/primitives/file-dropzone.cjs +7 -113
- package/dist/primitives/file-dropzone.js +6 -112
- package/dist/primitives/input-group.cjs +21 -0
- package/dist/primitives/input-group.d.cts +20 -0
- package/dist/primitives/input-group.d.ts +20 -0
- package/dist/primitives/input-group.js +21 -0
- package/dist/primitives/item.cjs +197 -0
- package/dist/primitives/item.d.cts +28 -0
- package/dist/primitives/item.d.ts +28 -0
- package/dist/primitives/item.js +197 -0
- package/dist/primitives/lazy-markdown.cjs +10 -0
- package/dist/primitives/lazy-markdown.d.cts +20 -0
- package/dist/primitives/lazy-markdown.d.ts +20 -0
- package/dist/primitives/lazy-markdown.js +10 -0
- package/dist/primitives/markdown.cjs +17 -0
- package/dist/primitives/markdown.d.cts +32 -0
- package/dist/primitives/markdown.d.ts +32 -0
- package/dist/primitives/markdown.js +17 -0
- package/dist/primitives/marker.cjs +14 -0
- package/dist/primitives/marker.d.cts +15 -0
- package/dist/primitives/marker.d.ts +15 -0
- package/dist/primitives/marker.js +14 -0
- package/dist/primitives/message-scroller.cjs +26 -0
- package/dist/primitives/message-scroller.d.cts +16 -0
- package/dist/primitives/message-scroller.d.ts +16 -0
- package/dist/primitives/message-scroller.js +26 -0
- package/dist/primitives/message.cjs +7 -84
- package/dist/primitives/message.js +8 -85
- package/dist/primitives/resource-list.cjs +3 -3
- package/dist/primitives/resource-list.js +2 -2
- package/dist/primitives/rich-text.cjs +3 -38
- package/dist/primitives/rich-text.js +3 -38
- package/dist/primitives/section-header.d.cts +1 -1
- package/dist/primitives/section-header.d.ts +1 -1
- package/dist/primitives/spinner.cjs +23 -0
- package/dist/primitives/spinner.d.cts +6 -0
- package/dist/primitives/spinner.d.ts +6 -0
- package/dist/primitives/spinner.js +23 -0
- package/dist/primitives/suggestion.cjs +11 -0
- package/dist/primitives/suggestion.d.cts +19 -0
- package/dist/primitives/suggestion.d.ts +19 -0
- package/dist/primitives/suggestion.js +11 -0
- package/dist/primitives/switch-field.cjs +2 -2
- package/dist/primitives/switch-field.js +3 -3
- package/dist/primitives/textarea.cjs +4 -33
- package/dist/primitives/textarea.js +3 -32
- package/dist/primitives/toggle-group.d.cts +2 -2
- package/dist/primitives/toggle-group.d.ts +2 -2
- package/dist/primitives/toggle.d.cts +2 -2
- package/dist/primitives/toggle.d.ts +2 -2
- package/dist/primitives/trace.cjs +23 -0
- package/dist/primitives/trace.d.cts +22 -0
- package/dist/primitives/trace.d.ts +22 -0
- package/dist/primitives/trace.js +23 -0
- package/dist/primitives/voice-dictation-button.cjs +5 -239
- package/dist/primitives/voice-dictation-button.js +4 -238
- package/package.json +125 -2
- package/src/styles/components/bubble.css +81 -0
- package/src/styles/components/marker.css +27 -0
- package/src/styles/components/message-scroller.css +11 -0
- package/src/styles/components.css +3 -0
- package/src/styles/utilities.css +3 -2
- package/dist/{chunk-UGF2K6NR.js → chunk-HRLP4BHJ.js} +6 -6
- package/dist/{chunk-RWWOFWLP.cjs → chunk-IH3COANJ.cjs} +3 -3
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ npm install @epicbagel/saas-kit
|
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
Peer dependencies: `react` and `react-dom` (18 or 19), `lucide-react`
|
|
15
|
-
(`>=0.400.0 <2`), `react-icons` (5) and `tailwindcss`
|
|
15
|
+
(`>=0.400.0 <2`), `react-icons` (5) and `tailwindcss` (4.3 or later).
|
|
16
16
|
|
|
17
17
|
## Styles
|
|
18
18
|
|
|
@@ -66,6 +66,43 @@ Components ship as client modules (`"use client"`); the `lib/*` utilities are
|
|
|
66
66
|
plain modules that are safe to call from React Server Components. Both ESM and
|
|
67
67
|
CommonJS builds are included, each with type declarations.
|
|
68
68
|
|
|
69
|
+
`primitives/chat` and `primitives/message-scroller` need React 19. They are
|
|
70
|
+
built on `@shadcn/react`, which takes `ref` as a plain prop; on React 18 they
|
|
71
|
+
render, but a ref passed to them is dropped with a warning.
|
|
72
|
+
|
|
73
|
+
## Chat
|
|
74
|
+
|
|
75
|
+
`primitives/chat` composes the kit's lifts of the shadcn/ui AI Elements parts
|
|
76
|
+
(Message, Bubble, MessageScroller, Trace, Suggestion, InputGroup) into a
|
|
77
|
+
conversation with plain props: no AI SDK, no streaming renderer. It became
|
|
78
|
+
public in 1.1.0, and these were the decisions about its props then:
|
|
79
|
+
|
|
80
|
+
- **Copy.** Every piece of built-in copy can be replaced: `pendingLabel`
|
|
81
|
+
("Thinking…"), `scrollButtonLabel` ("Scroll to latest message"),
|
|
82
|
+
`uploadingLabel` ("Uploading…"), `voiceHeroLabel` ("Tap to speak"),
|
|
83
|
+
`voiceHeroSwitchLabel` ("or type instead"), `examplePromptsLabel` ("Try"),
|
|
84
|
+
`examplePromptsLoadingLabel` ("Loading suggestions…"), `addFilesLabel`,
|
|
85
|
+
`placeholder` and `activePlaceholder`. The defaults are plain English with
|
|
86
|
+
no product voice, and the empty state has no title unless you pass
|
|
87
|
+
`emptyTitle`. The icon buttons' accessible names ("Send", "Add to
|
|
88
|
+
conversation", "Remove" plus the file name) are fixed for now.
|
|
89
|
+
- **Composer height.** `ChatInput` takes a `size` token (`sm`, `md`, `lg`)
|
|
90
|
+
for the textarea's starting height; there is no class-name or `rows` prop.
|
|
91
|
+
The textarea grows with its text (`field-sizing: content`).
|
|
92
|
+
- **Example prompts.** `examplePromptsVariant` is `chips` (the default: chips
|
|
93
|
+
that wrap onto as many lines as they need), `row` (one line that scrolls
|
|
94
|
+
sideways) or `cards` (a two-column grid).
|
|
95
|
+
- **Failed sends.** When `onSend` rejects, Chat puts the text back in the
|
|
96
|
+
composer and calls `onSendError`; without one it reports the rejection
|
|
97
|
+
through `reportError`, so a failure is never silent.
|
|
98
|
+
- **Removed before 1.1.0,** having no callers: `hideExamples` (pass no
|
|
99
|
+
`examplePrompts`), `emptyFooterVisibility` (the footer always shows),
|
|
100
|
+
`voiceAlign` (the voice hero is centred) and `ChatInput`'s `rows` and
|
|
101
|
+
`minHeightClassName` (use `size`).
|
|
102
|
+
- **Kept** as they were: the `embedded`, `application` and
|
|
103
|
+
`workspace` layouts, the voice-first empty state, the file drop target,
|
|
104
|
+
`compactEmptyState`, `threadMaxHeight` and the rest.
|
|
105
|
+
|
|
69
106
|
## License
|
|
70
107
|
|
|
71
108
|
MIT. Some components and styles are adapted from shadcn/ui; see
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -11,16 +11,22 @@ licenses in their own packages.
|
|
|
11
11
|
Source: https://github.com/shadcn-ui/ui
|
|
12
12
|
|
|
13
13
|
These modules are adapted from shadcn/ui components and styles. The compiled
|
|
14
|
-
output under `dist/` includes code derived from them.
|
|
14
|
+
output under `dist/` includes code derived from them. The more recent lifts
|
|
15
|
+
name their registry item, style and sync date in a header comment.
|
|
15
16
|
|
|
16
17
|
- `primitives/`: alert, alert-dialog, aspect-ratio, attachment, avatar, badge,
|
|
17
|
-
button, calendar, card, checkbox, collapsible, dialog, drawer,
|
|
18
|
-
field, input,
|
|
19
|
-
|
|
20
|
-
toggle
|
|
18
|
+
bubble, button, calendar, card, checkbox, collapsible, dialog, drawer,
|
|
19
|
+
dropdown-menu, field, input, input-group, item, label, marker, message,
|
|
20
|
+
message-scroller, popover, progress, radio-group, scroll-area, select,
|
|
21
|
+
separator, sheet, skeleton, spinner, switch, tabs, textarea, toggle,
|
|
22
|
+
toggle-group, tooltip, trace
|
|
23
|
+
- `primitives/suggestion`, adapted from the shadcn/ui AI Elements "Suggestion"
|
|
24
|
+
pattern (https://ui.shadcn.com/docs/ai-elements)
|
|
25
|
+
- `primitives/chat`, composed after the shadcn/ui AI Elements "Chat",
|
|
26
|
+
"Message", "Prompt Input" and "Suggestion" patterns from the parts above
|
|
21
27
|
- `lib/utils` (`cn`)
|
|
22
|
-
- `src/styles/shadcn.css`, `src/styles/components
|
|
23
|
-
|
|
28
|
+
- `src/styles/shadcn.css`, and in `src/styles/components/`: attachment.css,
|
|
29
|
+
bubble.css, marker.css, message.css and message-scroller.css
|
|
24
30
|
|
|
25
31
|
```
|
|
26
32
|
MIT License
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
|
|
5
|
+
|
|
6
|
+
// src/primitives/message.tsx
|
|
7
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
8
|
+
function MessageGroup({ className, ...props }) {
|
|
9
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
10
|
+
"div",
|
|
11
|
+
{
|
|
12
|
+
"data-slot": "message-group",
|
|
13
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0, "cn-message-group flex min-w-0 flex-col", className),
|
|
14
|
+
...props
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
function Message({
|
|
19
|
+
className,
|
|
20
|
+
align = "start",
|
|
21
|
+
...props
|
|
22
|
+
}) {
|
|
23
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
24
|
+
"div",
|
|
25
|
+
{
|
|
26
|
+
"data-slot": "message",
|
|
27
|
+
"data-align": align,
|
|
28
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
29
|
+
"cn-message group/message relative flex w-full min-w-0 data-[align=end]:flex-row-reverse",
|
|
30
|
+
className
|
|
31
|
+
),
|
|
32
|
+
...props
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
function MessageAvatar({ className, ...props }) {
|
|
37
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
38
|
+
"div",
|
|
39
|
+
{
|
|
40
|
+
"data-slot": "message-avatar",
|
|
41
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
42
|
+
"cn-message-avatar flex w-fit shrink-0 items-center justify-center self-end overflow-hidden rounded-full bg-muted",
|
|
43
|
+
className
|
|
44
|
+
),
|
|
45
|
+
...props
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
function MessageContent({ className, ...props }) {
|
|
50
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
51
|
+
"div",
|
|
52
|
+
{
|
|
53
|
+
"data-slot": "message-content",
|
|
54
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
55
|
+
"cn-message-content flex w-full min-w-0 flex-col wrap-break-word",
|
|
56
|
+
className
|
|
57
|
+
),
|
|
58
|
+
...props
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
function MessageHeader({ className, ...props }) {
|
|
63
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
64
|
+
"div",
|
|
65
|
+
{
|
|
66
|
+
"data-slot": "message-header",
|
|
67
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
68
|
+
"cn-message-header flex max-w-full min-w-0 items-center",
|
|
69
|
+
className
|
|
70
|
+
),
|
|
71
|
+
...props
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
function MessageFooter({ className, ...props }) {
|
|
76
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
77
|
+
"div",
|
|
78
|
+
{
|
|
79
|
+
"data-slot": "message-footer",
|
|
80
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
81
|
+
"cn-message-footer flex max-w-full min-w-0 items-center group-data-[align=end]/message:justify-end",
|
|
82
|
+
className
|
|
83
|
+
),
|
|
84
|
+
...props
|
|
85
|
+
}
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
exports.MessageGroup = MessageGroup; exports.Message = Message; exports.MessageAvatar = MessageAvatar; exports.MessageContent = MessageContent; exports.MessageHeader = MessageHeader; exports.MessageFooter = MessageFooter;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkW5HPHEE7cjs = require('./chunk-W5HPHEE7.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
|
|
10
|
+
|
|
11
|
+
// src/primitives/trace.tsx
|
|
12
|
+
var _lucidereact = require('lucide-react');
|
|
13
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
14
|
+
function Trace({ className, ...props }) {
|
|
15
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
16
|
+
"div",
|
|
17
|
+
{
|
|
18
|
+
"data-slot": "trace",
|
|
19
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
20
|
+
"flex w-full min-w-0 flex-col gap-2 *:has-[>[data-slot=trace-line]]:flex *:has-[>[data-slot=trace-line]]:w-fit *:has-[>[data-slot=trace-line]]:max-w-full *:has-[>[data-slot=trace-line]]:min-w-0 *:has-[>[data-slot=trace-line]]:rounded-md *:has-[>[data-slot=trace-line]]:text-left *:has-[>[data-slot=trace-line]]:outline-none *:has-[>[data-slot=trace-line]]:focus-visible:ring-3 *:has-[>[data-slot=trace-line]]:focus-visible:ring-ring/50",
|
|
21
|
+
className
|
|
22
|
+
),
|
|
23
|
+
...props
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
function TraceLine({
|
|
28
|
+
className,
|
|
29
|
+
status,
|
|
30
|
+
...props
|
|
31
|
+
}) {
|
|
32
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
33
|
+
"span",
|
|
34
|
+
{
|
|
35
|
+
"data-slot": "trace-line",
|
|
36
|
+
"data-status": status,
|
|
37
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
38
|
+
"flex w-fit max-w-full min-w-0 items-center gap-2 text-sm text-muted-foreground transition-colors in-[a,button]:cursor-pointer in-[a:hover,button:hover]:text-foreground data-[status=error]:text-destructive data-[status=error]:in-[a:hover,button:hover]:text-destructive data-[status=pending]:opacity-60 data-[status=running]:*:data-[slot=trace-title]:shimmer",
|
|
39
|
+
className
|
|
40
|
+
),
|
|
41
|
+
...props
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
function TraceIcon({ className, ...props }) {
|
|
46
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
47
|
+
"span",
|
|
48
|
+
{
|
|
49
|
+
"data-slot": "trace-icon",
|
|
50
|
+
"aria-hidden": "true",
|
|
51
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
52
|
+
"flex size-4 shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [[data-slot=trace-title]~&]:-ml-1",
|
|
53
|
+
className
|
|
54
|
+
),
|
|
55
|
+
...props
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
function TraceTitle({ className, ...props }) {
|
|
60
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
61
|
+
"span",
|
|
62
|
+
{
|
|
63
|
+
"data-slot": "trace-title",
|
|
64
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0, "min-w-0 truncate motion-reduce:shimmer-none", className),
|
|
65
|
+
...props
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
function TraceDescription({
|
|
70
|
+
className,
|
|
71
|
+
...props
|
|
72
|
+
}) {
|
|
73
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
74
|
+
"span",
|
|
75
|
+
{
|
|
76
|
+
"data-slot": "trace-description",
|
|
77
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
78
|
+
"shrink-0 text-muted-foreground/70 tabular-nums",
|
|
79
|
+
className
|
|
80
|
+
),
|
|
81
|
+
...props
|
|
82
|
+
}
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
function TraceCollapsible({
|
|
86
|
+
className,
|
|
87
|
+
...props
|
|
88
|
+
}) {
|
|
89
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
90
|
+
_chunkW5HPHEE7cjs.Collapsible,
|
|
91
|
+
{
|
|
92
|
+
"data-slot": "trace-collapsible",
|
|
93
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0, "flex w-full min-w-0 flex-col", className),
|
|
94
|
+
...props
|
|
95
|
+
}
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
function TraceCollapsibleTrigger({
|
|
99
|
+
className,
|
|
100
|
+
children,
|
|
101
|
+
...props
|
|
102
|
+
}) {
|
|
103
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
104
|
+
_chunkW5HPHEE7cjs.CollapsibleTrigger,
|
|
105
|
+
{
|
|
106
|
+
"data-slot": "trace-collapsible-trigger",
|
|
107
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
108
|
+
"group/trace-collapsible-trigger flex w-fit max-w-full min-w-0 cursor-pointer items-center gap-1 rounded-md text-left text-muted-foreground transition-colors outline-none hover:text-foreground focus-visible:ring-3 focus-visible:ring-ring/50 has-[[data-status=error]]:text-destructive",
|
|
109
|
+
className
|
|
110
|
+
),
|
|
111
|
+
...props,
|
|
112
|
+
children: [
|
|
113
|
+
children,
|
|
114
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, TraceIcon, { className: "transition-transform group-aria-expanded/trace-collapsible-trigger:rotate-90", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronRight, {}) })
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
function TraceCollapsibleContent({
|
|
120
|
+
className,
|
|
121
|
+
children,
|
|
122
|
+
...props
|
|
123
|
+
}) {
|
|
124
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
125
|
+
_chunkW5HPHEE7cjs.CollapsibleContent,
|
|
126
|
+
{
|
|
127
|
+
"data-slot": "trace-collapsible-content",
|
|
128
|
+
className: "min-w-0 overflow-hidden duration-200 [--radix-accordion-content-height:var(--radix-collapsible-content-height)] data-open:animate-accordion-down data-closed:animate-accordion-up",
|
|
129
|
+
...props,
|
|
130
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
131
|
+
"div",
|
|
132
|
+
{
|
|
133
|
+
"data-slot": "trace-collapsible-content-inner",
|
|
134
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
135
|
+
"mt-2 mb-1 ml-[calc(--spacing(2)-1px)] min-w-0 border-l pr-1 pl-4 leading-relaxed wrap-break-word text-muted-foreground",
|
|
136
|
+
className
|
|
137
|
+
),
|
|
138
|
+
children
|
|
139
|
+
}
|
|
140
|
+
)
|
|
141
|
+
}
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
exports.Trace = Trace; exports.TraceLine = TraceLine; exports.TraceIcon = TraceIcon; exports.TraceTitle = TraceTitle; exports.TraceDescription = TraceDescription; exports.TraceCollapsible = TraceCollapsible; exports.TraceCollapsibleTrigger = TraceCollapsibleTrigger; exports.TraceCollapsibleContent = TraceCollapsibleContent;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
|
|
5
|
+
|
|
6
|
+
// src/primitives/textarea.tsx
|
|
7
|
+
var _react = require('react'); var React = _interopRequireWildcard(_react);
|
|
8
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
9
|
+
var Textarea = React.forwardRef(
|
|
10
|
+
({ className, textSize = "sm", resize = "vertical", grow = false, font = "sans", height = "auto", ...props }, ref) => {
|
|
11
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
12
|
+
"textarea",
|
|
13
|
+
{
|
|
14
|
+
"data-slot": "textarea",
|
|
15
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
16
|
+
"flex min-h-[80px] w-full rounded-md border bg-background px-3 py-2 ring-offset-background placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
|
17
|
+
// Entered text keeps the iOS-safe floor. The shared stylesheet sizes
|
|
18
|
+
// placeholder copy independently at the compact 14px base scale.
|
|
19
|
+
textSize === "sm" ? "text-[16px] md:text-sm" : "text-[16px] md:text-xs",
|
|
20
|
+
resize === "none" && "resize-none",
|
|
21
|
+
grow && "flex-1",
|
|
22
|
+
font === "mono" && "font-mono",
|
|
23
|
+
height === "panel" && "h-32",
|
|
24
|
+
height === "editor" && "h-72",
|
|
25
|
+
height === "editor-lg" && "h-80",
|
|
26
|
+
className
|
|
27
|
+
),
|
|
28
|
+
ref,
|
|
29
|
+
...props
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
Textarea.displayName = "Textarea";
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
exports.Textarea = Textarea;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
|
|
5
|
+
|
|
6
|
+
// src/primitives/action-dock.tsx
|
|
7
|
+
var _react = require('react');
|
|
8
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
9
|
+
var ActionDock = _react.forwardRef.call(void 0,
|
|
10
|
+
function ActionDock2({ shrink = true, className, ...props }, ref) {
|
|
11
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
12
|
+
"aside",
|
|
13
|
+
{
|
|
14
|
+
ref,
|
|
15
|
+
"data-slot": "action-dock",
|
|
16
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
17
|
+
"w-full border-t border-border bg-background/85 backdrop-blur-sm supports-backdrop-filter:bg-background/70 pb-[env(safe-area-inset-bottom)]",
|
|
18
|
+
!shrink && "shrink-0",
|
|
19
|
+
className
|
|
20
|
+
),
|
|
21
|
+
...props
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
exports.ActionDock = ActionDock;
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkL4DH72UFcjs = require('./chunk-L4DH72UF.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
|
|
8
|
+
|
|
9
|
+
// src/primitives/attachment.tsx
|
|
10
|
+
var _classvarianceauthority = require('class-variance-authority');
|
|
11
|
+
var _radixui = require('radix-ui');
|
|
12
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
13
|
+
var attachmentVariants = _classvarianceauthority.cva.call(void 0,
|
|
14
|
+
"cn-attachment group/attachment relative flex max-w-full min-w-0 shrink-0 flex-wrap border bg-card text-card-foreground transition-colors has-[>a,>button]:hover:bg-muted/50 data-[state=error]:border-destructive/30 data-[state=idle]:border-dashed",
|
|
15
|
+
{
|
|
16
|
+
variants: {
|
|
17
|
+
size: {
|
|
18
|
+
default: "cn-attachment-size-default",
|
|
19
|
+
sm: "cn-attachment-size-sm",
|
|
20
|
+
xs: "cn-attachment-size-xs"
|
|
21
|
+
},
|
|
22
|
+
orientation: {
|
|
23
|
+
horizontal: "cn-attachment-orientation-horizontal items-center",
|
|
24
|
+
vertical: "cn-attachment-orientation-vertical flex-col"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
function Attachment({
|
|
30
|
+
className,
|
|
31
|
+
state = "done",
|
|
32
|
+
size = "default",
|
|
33
|
+
orientation = "horizontal",
|
|
34
|
+
...props
|
|
35
|
+
}) {
|
|
36
|
+
const resolvedOrientation = _nullishCoalesce(orientation, () => ( "horizontal"));
|
|
37
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
38
|
+
"div",
|
|
39
|
+
{
|
|
40
|
+
"data-slot": "attachment",
|
|
41
|
+
"data-state": state,
|
|
42
|
+
"data-size": size,
|
|
43
|
+
"data-orientation": resolvedOrientation,
|
|
44
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0, attachmentVariants({ size, orientation }), className),
|
|
45
|
+
...props
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
var attachmentMediaVariants = _classvarianceauthority.cva.call(void 0,
|
|
50
|
+
"cn-attachment-media relative flex aspect-square shrink-0 items-center justify-center overflow-hidden group-data-[state=error]/attachment:bg-destructive/10 group-data-[state=error]/attachment:text-destructive [&_svg]:pointer-events-none",
|
|
51
|
+
{
|
|
52
|
+
variants: {
|
|
53
|
+
variant: {
|
|
54
|
+
icon: "cn-attachment-media-variant-icon",
|
|
55
|
+
image: "cn-attachment-media-variant-image *:[img]:aspect-square *:[img]:w-full *:[img]:object-cover"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
defaultVariants: {
|
|
59
|
+
variant: "icon"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
function AttachmentMedia({
|
|
64
|
+
className,
|
|
65
|
+
variant = "icon",
|
|
66
|
+
...props
|
|
67
|
+
}) {
|
|
68
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
69
|
+
"div",
|
|
70
|
+
{
|
|
71
|
+
"data-slot": "attachment-media",
|
|
72
|
+
"data-variant": variant,
|
|
73
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0, attachmentMediaVariants({ variant }), className),
|
|
74
|
+
...props
|
|
75
|
+
}
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
function AttachmentContent({
|
|
79
|
+
className,
|
|
80
|
+
...props
|
|
81
|
+
}) {
|
|
82
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
83
|
+
"div",
|
|
84
|
+
{
|
|
85
|
+
"data-slot": "attachment-content",
|
|
86
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
87
|
+
"cn-attachment-content max-w-full min-w-0 flex-1",
|
|
88
|
+
className
|
|
89
|
+
),
|
|
90
|
+
...props
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
function AttachmentTitle({
|
|
95
|
+
className,
|
|
96
|
+
...props
|
|
97
|
+
}) {
|
|
98
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
99
|
+
"span",
|
|
100
|
+
{
|
|
101
|
+
"data-slot": "attachment-title",
|
|
102
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
103
|
+
"cn-attachment-title block max-w-full min-w-0 truncate group-data-[state=processing]/attachment:shimmer group-data-[state=uploading]/attachment:shimmer",
|
|
104
|
+
className
|
|
105
|
+
),
|
|
106
|
+
...props
|
|
107
|
+
}
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
function AttachmentDescription({
|
|
111
|
+
className,
|
|
112
|
+
...props
|
|
113
|
+
}) {
|
|
114
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
115
|
+
"span",
|
|
116
|
+
{
|
|
117
|
+
"data-slot": "attachment-description",
|
|
118
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
119
|
+
"cn-attachment-description block min-w-0 truncate text-muted-foreground group-data-[state=error]/attachment:text-destructive/80",
|
|
120
|
+
"max-w-full",
|
|
121
|
+
className
|
|
122
|
+
),
|
|
123
|
+
...props
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
function AttachmentActions({
|
|
128
|
+
className,
|
|
129
|
+
...props
|
|
130
|
+
}) {
|
|
131
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
132
|
+
"div",
|
|
133
|
+
{
|
|
134
|
+
"data-slot": "attachment-actions",
|
|
135
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
136
|
+
"cn-attachment-actions flex shrink-0 items-center",
|
|
137
|
+
className
|
|
138
|
+
),
|
|
139
|
+
...props
|
|
140
|
+
}
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
function AttachmentAction({
|
|
144
|
+
className,
|
|
145
|
+
variant,
|
|
146
|
+
size = "icon-xs",
|
|
147
|
+
...props
|
|
148
|
+
}) {
|
|
149
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
150
|
+
_chunkL4DH72UFcjs.Button,
|
|
151
|
+
{
|
|
152
|
+
"data-slot": "attachment-action",
|
|
153
|
+
variant: _nullishCoalesce(variant, () => ( "ghost")),
|
|
154
|
+
size,
|
|
155
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0, "cn-attachment-action", className),
|
|
156
|
+
...props
|
|
157
|
+
}
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
function AttachmentTrigger({
|
|
161
|
+
className,
|
|
162
|
+
asChild = false,
|
|
163
|
+
type,
|
|
164
|
+
...props
|
|
165
|
+
}) {
|
|
166
|
+
const Comp = asChild ? _radixui.Slot.Root : "button";
|
|
167
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
168
|
+
Comp,
|
|
169
|
+
{
|
|
170
|
+
"data-slot": "attachment-trigger",
|
|
171
|
+
type: asChild ? void 0 : _nullishCoalesce(type, () => ( "button")),
|
|
172
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
173
|
+
"cn-attachment-trigger absolute inset-0 z-10 outline-none",
|
|
174
|
+
className
|
|
175
|
+
),
|
|
176
|
+
...props
|
|
177
|
+
}
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
function AttachmentGroup({ className, ...props }) {
|
|
181
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
182
|
+
"div",
|
|
183
|
+
{
|
|
184
|
+
"data-slot": "attachment-group",
|
|
185
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
186
|
+
"cn-attachment-group flex min-w-0 scroll-fade-x snap-x snap-mandatory scrollbar-none overflow-x-auto overscroll-x-contain *:data-[slot=attachment]:flex-none *:data-[slot=attachment]:snap-start",
|
|
187
|
+
className
|
|
188
|
+
),
|
|
189
|
+
...props
|
|
190
|
+
}
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
exports.Attachment = Attachment; exports.AttachmentMedia = AttachmentMedia; exports.AttachmentContent = AttachmentContent; exports.AttachmentTitle = AttachmentTitle; exports.AttachmentDescription = AttachmentDescription; exports.AttachmentActions = AttachmentActions; exports.AttachmentAction = AttachmentAction; exports.AttachmentTrigger = AttachmentTrigger; exports.AttachmentGroup = AttachmentGroup;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
cn
|
|
4
|
+
} from "./chunk-G6SRSWXB.js";
|
|
5
|
+
|
|
6
|
+
// src/primitives/action-dock.tsx
|
|
7
|
+
import { forwardRef } from "react";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
var ActionDock = forwardRef(
|
|
10
|
+
function ActionDock2({ shrink = true, className, ...props }, ref) {
|
|
11
|
+
return /* @__PURE__ */ jsx(
|
|
12
|
+
"aside",
|
|
13
|
+
{
|
|
14
|
+
ref,
|
|
15
|
+
"data-slot": "action-dock",
|
|
16
|
+
className: cn(
|
|
17
|
+
"w-full border-t border-border bg-background/85 backdrop-blur-sm supports-backdrop-filter:bg-background/70 pb-[env(safe-area-inset-bottom)]",
|
|
18
|
+
!shrink && "shrink-0",
|
|
19
|
+
className
|
|
20
|
+
),
|
|
21
|
+
...props
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
export {
|
|
28
|
+
ActionDock
|
|
29
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
cn
|
|
4
|
+
} from "./chunk-G6SRSWXB.js";
|
|
5
|
+
|
|
6
|
+
// src/primitives/textarea.tsx
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
var Textarea = React.forwardRef(
|
|
10
|
+
({ className, textSize = "sm", resize = "vertical", grow = false, font = "sans", height = "auto", ...props }, ref) => {
|
|
11
|
+
return /* @__PURE__ */ jsx(
|
|
12
|
+
"textarea",
|
|
13
|
+
{
|
|
14
|
+
"data-slot": "textarea",
|
|
15
|
+
className: cn(
|
|
16
|
+
"flex min-h-[80px] w-full rounded-md border bg-background px-3 py-2 ring-offset-background placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
|
17
|
+
// Entered text keeps the iOS-safe floor. The shared stylesheet sizes
|
|
18
|
+
// placeholder copy independently at the compact 14px base scale.
|
|
19
|
+
textSize === "sm" ? "text-[16px] md:text-sm" : "text-[16px] md:text-xs",
|
|
20
|
+
resize === "none" && "resize-none",
|
|
21
|
+
grow && "flex-1",
|
|
22
|
+
font === "mono" && "font-mono",
|
|
23
|
+
height === "panel" && "h-32",
|
|
24
|
+
height === "editor" && "h-72",
|
|
25
|
+
height === "editor-lg" && "h-80",
|
|
26
|
+
className
|
|
27
|
+
),
|
|
28
|
+
ref,
|
|
29
|
+
...props
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
Textarea.displayName = "Textarea";
|
|
35
|
+
|
|
36
|
+
export {
|
|
37
|
+
Textarea
|
|
38
|
+
};
|