@admin-layout/tailwind-ui 12.2.4-alpha.15 → 12.2.4-alpha.17
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/lib/components/InputToolBar/InputToolBar.d.ts +3 -4
- package/lib/components/InputToolBar/InputToolBar.d.ts.map +1 -1
- package/lib/components/InputToolBar/InputToolBar.js +206 -30
- package/lib/components/InputToolBar/InputToolBar.js.map +1 -1
- package/lib/components/InputToolBar/defaults.d.ts +1 -1
- package/lib/components/InputToolBar/defaults.d.ts.map +1 -1
- package/lib/components/InputToolBar/defaults.js +9 -4
- package/lib/components/InputToolBar/defaults.js.map +1 -1
- package/lib/components/InputToolBar/index.d.ts +1 -1
- package/lib/components/InputToolBar/index.d.ts.map +1 -1
- package/lib/components/InputToolBar/types.d.ts +72 -19
- package/lib/components/InputToolBar/types.d.ts.map +1 -1
- package/lib/components/Markdown/MarkdownBreadcrumbs.d.ts +13 -0
- package/lib/components/Markdown/MarkdownBreadcrumbs.d.ts.map +1 -0
- package/lib/components/Markdown/MarkdownBreadcrumbs.js +27 -0
- package/lib/components/Markdown/MarkdownBreadcrumbs.js.map +1 -0
- package/lib/components/Markdown/MarkdownCopyButton.d.ts +10 -0
- package/lib/components/Markdown/MarkdownCopyButton.d.ts.map +1 -0
- package/lib/components/Markdown/MarkdownCopyButton.js +200 -0
- package/lib/components/Markdown/MarkdownCopyButton.js.map +1 -0
- package/lib/components/Markdown/MarkdownHeader.d.ts +13 -0
- package/lib/components/Markdown/MarkdownHeader.d.ts.map +1 -0
- package/lib/components/Markdown/MarkdownHeader.js +29 -0
- package/lib/components/Markdown/MarkdownHeader.js.map +1 -0
- package/lib/components/Markdown/MarkdownNavigation.d.ts +15 -0
- package/lib/components/Markdown/MarkdownNavigation.d.ts.map +1 -0
- package/lib/components/Markdown/MarkdownNavigation.js +31 -0
- package/lib/components/Markdown/MarkdownNavigation.js.map +1 -0
- package/lib/components/Markdown/MarkdownPage.d.ts +41 -0
- package/lib/components/Markdown/MarkdownPage.d.ts.map +1 -0
- package/lib/components/Markdown/MarkdownPage.js +221 -0
- package/lib/components/Markdown/MarkdownPage.js.map +1 -0
- package/lib/components/Markdown/MarkdownTableOfContents.d.ts +15 -0
- package/lib/components/Markdown/MarkdownTableOfContents.d.ts.map +1 -0
- package/lib/components/Markdown/MarkdownTableOfContents.js +51 -0
- package/lib/components/Markdown/MarkdownTableOfContents.js.map +1 -0
- package/lib/components/Markdown/index.d.ts +7 -0
- package/lib/components/Markdown/index.d.ts.map +1 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/package.json +2 -2
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { InputToolBarProps } from './types';
|
|
3
3
|
/**
|
|
4
|
-
* InputToolBar –
|
|
5
|
-
*
|
|
6
|
-
* Layout: left (mode toggles + template pill), flexible middle, right (attach, capture, mic/send).
|
|
4
|
+
* InputToolBar – UI only. Renders toolbar and optional built-in textarea from props.
|
|
5
|
+
* All data (leftItems, rightItems, templateButton, inputConfig, micSendButton) and behavior (onClick, onChange, etc.) come from props.
|
|
7
6
|
*/
|
|
8
|
-
export declare function InputToolBar({ className, leftItems, rightItems, templateButton, leftCustomRender, rightCustomRender, micSendButton, children, }: InputToolBarProps): React.JSX.Element;
|
|
7
|
+
export declare function InputToolBar({ className, inputConfig, topContent, leftItems: leftItemsProp, rightItems: rightItemsProp, templateButton, templateModalConfig, templateModalRender, leftCustomRender, rightCustomRender, micSendButton, children, onContainerClick, }: InputToolBarProps): React.JSX.Element;
|
|
9
8
|
export default InputToolBar;
|
|
10
9
|
//# sourceMappingURL=InputToolBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputToolBar.d.ts","sourceRoot":"","sources":["../../../src/components/InputToolBar/InputToolBar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InputToolBar.d.ts","sourceRoot":"","sources":["../../../src/components/InputToolBar/InputToolBar.tsx"],"names":[],"mappings":"AAeA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,OAAO,KAAK,EACR,iBAAiB,EAQpB,MAAM,SAAS,CAAC;AAgajB;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EACzB,SAAS,EACT,WAAW,EACX,UAAU,EACV,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,QAAQ,EACR,gBAAgB,GACnB,EAAE,iBAAiB,qBA+EnB;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {Lightbulb,Zap,Search,Mic,Paperclip,Camera,
|
|
1
|
+
import {Lightbulb,Zap,Search,Mic,Paperclip,Image,Camera,WandSparkles,X,Layout,Check,StopCircle,ArrowUpRight}from'lucide-react';import React__default,{useState,useMemo}from'react';import'../../utils/isBrowser/index.js';import {cn}from'../../utils/util.js';import'fast-deep-equal/react.js';const iconSize = 'h-3.5 w-3.5';
|
|
2
2
|
const iconSizeRight = 'h-4 w-4';
|
|
3
3
|
const defaultLeftIconMap = {
|
|
4
4
|
search: React__default.createElement(Search, {
|
|
@@ -13,7 +13,7 @@ const defaultLeftIconMap = {
|
|
|
13
13
|
template: null // template is rendered as pill, not in icon group
|
|
14
14
|
};
|
|
15
15
|
const defaultRightIconMap = {
|
|
16
|
-
tag: React__default.createElement(
|
|
16
|
+
tag: React__default.createElement(WandSparkles, {
|
|
17
17
|
className: iconSizeRight
|
|
18
18
|
}),
|
|
19
19
|
chip: React__default.createElement("svg", {
|
|
@@ -56,6 +56,9 @@ const defaultRightIconMap = {
|
|
|
56
56
|
camera: React__default.createElement(Camera, {
|
|
57
57
|
className: iconSizeRight
|
|
58
58
|
}),
|
|
59
|
+
image: React__default.createElement(Image, {
|
|
60
|
+
className: iconSizeRight
|
|
61
|
+
}),
|
|
59
62
|
attach: React__default.createElement(Paperclip, {
|
|
60
63
|
className: iconSizeRight
|
|
61
64
|
}),
|
|
@@ -67,18 +70,25 @@ function MicSendButton({
|
|
|
67
70
|
hasContent,
|
|
68
71
|
onSend,
|
|
69
72
|
onMic,
|
|
70
|
-
disabled
|
|
73
|
+
disabled,
|
|
74
|
+
isLoading,
|
|
75
|
+
onStop
|
|
71
76
|
}) {
|
|
72
|
-
const
|
|
77
|
+
const isStop = isLoading === true;
|
|
78
|
+
const isSend = !isStop && hasContent;
|
|
73
79
|
const base = 'inline-flex h-7 w-7 items-center justify-center rounded-2xl transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary';
|
|
80
|
+
const handleClick = isStop ? onStop : isSend ? onSend : onMic;
|
|
81
|
+
const label = isStop ? 'Stop' : isSend ? 'Send' : 'Start voice input';
|
|
74
82
|
return React__default.createElement("button", {
|
|
75
83
|
type: "button",
|
|
76
|
-
"aria-label":
|
|
77
|
-
title:
|
|
78
|
-
onClick:
|
|
79
|
-
disabled: disabled,
|
|
84
|
+
"aria-label": label,
|
|
85
|
+
title: label,
|
|
86
|
+
onClick: handleClick,
|
|
87
|
+
disabled: disabled && !isStop,
|
|
80
88
|
className: base
|
|
81
|
-
},
|
|
89
|
+
}, isStop ? React__default.createElement(StopCircle, {
|
|
90
|
+
className: iconSizeRight
|
|
91
|
+
}) : isSend ? React__default.createElement(ArrowUpRight, {
|
|
82
92
|
className: iconSizeRight
|
|
83
93
|
}) : React__default.createElement(Mic, {
|
|
84
94
|
className: iconSizeRight
|
|
@@ -94,17 +104,25 @@ function ToolbarIconButton({
|
|
|
94
104
|
if (item.customButton) {
|
|
95
105
|
return React__default.createElement(React__default.Fragment, null, item.customButton);
|
|
96
106
|
}
|
|
107
|
+
const isDisabled = item.disabled === true || item.loading === true;
|
|
97
108
|
const isActive = item.active === true;
|
|
98
109
|
const base = 'inline-flex h-7 w-7 items-center justify-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:opacity-50 disabled:pointer-events-none';
|
|
99
110
|
const leftVariant = isActive ? 'rounded-full border border-primary bg-primary text-primary-foreground hover:bg-primary/90' : 'rounded-full border border-primary/50 bg-card text-primary hover:border-primary hover:text-primary';
|
|
100
|
-
const
|
|
111
|
+
const rightVariantDisabled = 'rounded-2xl text-muted-foreground/50 cursor-not-allowed disabled:pointer-events-auto';
|
|
112
|
+
const rightVariantActive = 'rounded-2xl text-primary hover:bg-secondary';
|
|
113
|
+
const rightVariantDefault = 'rounded-2xl text-muted-foreground hover:bg-secondary/70 active:bg-secondary';
|
|
114
|
+
const rightVariant = isDisabled ? rightVariantDisabled : isActive ? rightVariantActive : rightVariantDefault;
|
|
101
115
|
return React__default.createElement("button", {
|
|
102
116
|
type: "button",
|
|
103
117
|
"aria-label": item.label,
|
|
104
118
|
title: item.label,
|
|
105
119
|
onClick: item.onClick,
|
|
120
|
+
disabled: isDisabled,
|
|
106
121
|
className: cn(base, isLeftGroup ? leftVariant : rightVariant)
|
|
107
|
-
},
|
|
122
|
+
}, item.loading ? React__default.createElement("div", {
|
|
123
|
+
className: "h-4 w-4 animate-spin rounded-full border-2 border-primary border-t-transparent",
|
|
124
|
+
"aria-hidden": true
|
|
125
|
+
}) : icon);
|
|
108
126
|
}
|
|
109
127
|
function LeftSection({
|
|
110
128
|
leftItems,
|
|
@@ -136,16 +154,42 @@ function LeftSection({
|
|
|
136
154
|
})))), hasTemplate && React__default.createElement(TemplatePill, {
|
|
137
155
|
label: templateButton.label,
|
|
138
156
|
count: templateButton.count,
|
|
157
|
+
selectedLabel: templateButton.selectedLabel,
|
|
139
158
|
onClick: templateButton.onClick,
|
|
159
|
+
onClearTemplate: templateButton.onClearTemplate,
|
|
140
160
|
disabled: templateButton.disabled
|
|
141
161
|
}));
|
|
142
162
|
}
|
|
143
163
|
function TemplatePill({
|
|
144
164
|
label,
|
|
145
165
|
count,
|
|
166
|
+
selectedLabel,
|
|
146
167
|
onClick,
|
|
168
|
+
onClearTemplate,
|
|
147
169
|
disabled
|
|
148
170
|
}) {
|
|
171
|
+
if (selectedLabel) {
|
|
172
|
+
return React__default.createElement("div", {
|
|
173
|
+
className: "flex items-center gap-1 px-2 py-1 rounded-full bg-primary/10 text-primary text-xs font-medium"
|
|
174
|
+
}, React__default.createElement("span", {
|
|
175
|
+
className: "truncate max-w-[120px]",
|
|
176
|
+
title: selectedLabel
|
|
177
|
+
}, selectedLabel), React__default.createElement("button", {
|
|
178
|
+
type: "button",
|
|
179
|
+
onClick: onClearTemplate,
|
|
180
|
+
className: "ml-1 hover:bg-primary/20 rounded-full p-0.5 transition-colors",
|
|
181
|
+
"aria-label": "Remove template",
|
|
182
|
+
disabled: disabled
|
|
183
|
+
}, React__default.createElement(X, {
|
|
184
|
+
className: "h-3 w-3"
|
|
185
|
+
})), React__default.createElement("button", {
|
|
186
|
+
type: "button",
|
|
187
|
+
onClick: onClick,
|
|
188
|
+
className: "ml-1 hover:bg-primary/20 rounded-full p-0.5 transition-colors text-[10px]",
|
|
189
|
+
"aria-label": "Change template",
|
|
190
|
+
disabled: disabled
|
|
191
|
+
}, "\u25BC"));
|
|
192
|
+
}
|
|
149
193
|
const text = count != null && count > 0 ? `${label} (${count})` : label;
|
|
150
194
|
return React__default.createElement("button", {
|
|
151
195
|
type: "button",
|
|
@@ -170,7 +214,7 @@ function RightSection({
|
|
|
170
214
|
const hasRight = filteredRight.length > 0 || micSendButton != null;
|
|
171
215
|
if (!hasRight) return null;
|
|
172
216
|
return React__default.createElement("div", {
|
|
173
|
-
className: "flex flex-wrap items-center gap-
|
|
217
|
+
className: "flex flex-wrap items-center gap-2 text-muted-foreground"
|
|
174
218
|
}, filteredRight.map(item => React__default.createElement(ToolbarIconButton, {
|
|
175
219
|
key: item.id,
|
|
176
220
|
item: item,
|
|
@@ -179,40 +223,172 @@ function RightSection({
|
|
|
179
223
|
hasContent: micSendButton.hasContent,
|
|
180
224
|
onSend: micSendButton.onSend,
|
|
181
225
|
onMic: micSendButton.onMic,
|
|
182
|
-
disabled: micSendButton.disabled
|
|
226
|
+
disabled: micSendButton.disabled,
|
|
227
|
+
isLoading: micSendButton.isLoading,
|
|
228
|
+
onStop: micSendButton.onStop
|
|
183
229
|
}));
|
|
184
230
|
}
|
|
231
|
+
const defaultTextareaClassName = 'w-full outline-none border-none ring-0 focus:outline-none focus:ring-0 bg-transparent text-base text-foreground placeholder:text-muted-foreground disabled:opacity-50 resize-none overflow-y-auto max-h-[30vh] [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]';
|
|
232
|
+
function DefaultTemplateModal({
|
|
233
|
+
isOpen,
|
|
234
|
+
onClose,
|
|
235
|
+
templates,
|
|
236
|
+
selectedId,
|
|
237
|
+
onSelect,
|
|
238
|
+
suggestedId,
|
|
239
|
+
title = 'Choose Template'
|
|
240
|
+
}) {
|
|
241
|
+
const [searchQuery, setSearchQuery] = useState('');
|
|
242
|
+
const [categoryFilter, setCategoryFilter] = useState('All');
|
|
243
|
+
const categories = useMemo(() => {
|
|
244
|
+
const cats = new Set(templates.map(t => t.category || 'Other'));
|
|
245
|
+
return ['All', ...Array.from(cats).sort()];
|
|
246
|
+
}, [templates]);
|
|
247
|
+
const filteredTemplates = useMemo(() => {
|
|
248
|
+
return templates.filter(template => {
|
|
249
|
+
const searchLower = searchQuery.toLowerCase();
|
|
250
|
+
const matchesSearch = !searchQuery || template.label.toLowerCase().includes(searchLower) || (template.description || '').toLowerCase().includes(searchLower);
|
|
251
|
+
const matchesCategory = categoryFilter === 'All' || template.category === categoryFilter;
|
|
252
|
+
return matchesSearch && matchesCategory;
|
|
253
|
+
});
|
|
254
|
+
}, [templates, searchQuery, categoryFilter]);
|
|
255
|
+
if (!isOpen) return null;
|
|
256
|
+
function handleBackdropClick(e) {
|
|
257
|
+
if (e.target === e.currentTarget) onClose();
|
|
258
|
+
}
|
|
259
|
+
return React__default.createElement("div", {
|
|
260
|
+
className: "fixed inset-0 z-50 flex items-center justify-center bg-background/80 backdrop-blur-sm p-4",
|
|
261
|
+
onClick: handleBackdropClick
|
|
262
|
+
}, React__default.createElement("div", {
|
|
263
|
+
className: "bg-card w-full max-w-[720px] max-h-[80vh] rounded-xl flex flex-col overflow-hidden border border-border shadow-xl"
|
|
264
|
+
}, React__default.createElement("div", {
|
|
265
|
+
className: "h-12 px-4 border-b border-border flex items-center justify-between shrink-0"
|
|
266
|
+
}, React__default.createElement("h2", {
|
|
267
|
+
className: "text-sm font-semibold text-foreground"
|
|
268
|
+
}, title), React__default.createElement("button", {
|
|
269
|
+
type: "button",
|
|
270
|
+
onClick: onClose,
|
|
271
|
+
className: "p-1.5 rounded-lg hover:bg-accent text-muted-foreground transition-colors focus:outline-none focus:ring-2 focus:ring-ring",
|
|
272
|
+
"aria-label": "Close"
|
|
273
|
+
}, React__default.createElement(X, {
|
|
274
|
+
className: "h-4 w-4"
|
|
275
|
+
}))), React__default.createElement("div", {
|
|
276
|
+
className: "p-4 border-b border-border space-y-3"
|
|
277
|
+
}, React__default.createElement("div", {
|
|
278
|
+
className: "relative"
|
|
279
|
+
}, React__default.createElement(Search, {
|
|
280
|
+
className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"
|
|
281
|
+
}), React__default.createElement("input", {
|
|
282
|
+
type: "text",
|
|
283
|
+
placeholder: "Search templates...",
|
|
284
|
+
value: searchQuery,
|
|
285
|
+
onChange: e => setSearchQuery(e.target.value),
|
|
286
|
+
className: "w-full pl-9 pr-3 py-2 border border-border rounded-lg bg-muted text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
|
|
287
|
+
})), React__default.createElement("div", {
|
|
288
|
+
className: "flex gap-1.5 flex-wrap"
|
|
289
|
+
}, categories.map(category => React__default.createElement("button", {
|
|
290
|
+
key: category,
|
|
291
|
+
type: "button",
|
|
292
|
+
onClick: () => setCategoryFilter(category),
|
|
293
|
+
className: cn('px-2.5 py-1 rounded-md text-xs font-medium transition-colors border', categoryFilter === category ? 'bg-primary/10 text-primary border-primary/20' : 'bg-card text-muted-foreground border-border hover:bg-muted hover:text-foreground')
|
|
294
|
+
}, category)))), React__default.createElement("div", {
|
|
295
|
+
className: "flex-1 overflow-y-auto p-4 min-h-0"
|
|
296
|
+
}, React__default.createElement("div", {
|
|
297
|
+
className: "grid grid-cols-1 sm:grid-cols-2 gap-3"
|
|
298
|
+
}, filteredTemplates.map(template => {
|
|
299
|
+
const isSelected = selectedId === template.id;
|
|
300
|
+
const isSuggested = suggestedId === template.id;
|
|
301
|
+
return React__default.createElement("button", {
|
|
302
|
+
key: template.id,
|
|
303
|
+
type: "button",
|
|
304
|
+
onClick: () => {
|
|
305
|
+
onSelect(template.id);
|
|
306
|
+
onClose();
|
|
307
|
+
},
|
|
308
|
+
className: cn('text-left p-3 rounded-lg border-2 transition-all', isSelected ? 'border-primary bg-primary/10 ring-2 ring-primary/20' : 'border-border hover:border-primary/50 hover:bg-muted/50', isSuggested && !isSelected && 'border-primary/30 bg-primary/5')
|
|
309
|
+
}, React__default.createElement("div", {
|
|
310
|
+
className: "flex items-start gap-2"
|
|
311
|
+
}, React__default.createElement("div", {
|
|
312
|
+
className: cn('p-1.5 rounded-md flex-shrink-0', isSelected ? 'bg-primary' : isSuggested ? 'bg-primary/20' : 'bg-secondary')
|
|
313
|
+
}, React__default.createElement(Layout, {
|
|
314
|
+
className: cn('h-3.5 w-3.5', isSelected ? 'text-primary-foreground' : isSuggested ? 'text-primary' : 'text-foreground')
|
|
315
|
+
})), React__default.createElement("div", {
|
|
316
|
+
className: "min-w-0 flex-1"
|
|
317
|
+
}, React__default.createElement("div", {
|
|
318
|
+
className: "flex items-center gap-1.5"
|
|
319
|
+
}, React__default.createElement("span", {
|
|
320
|
+
className: "font-medium text-sm text-foreground truncate"
|
|
321
|
+
}, template.label), isSelected && React__default.createElement(Check, {
|
|
322
|
+
className: "h-3.5 w-3.5 text-primary flex-shrink-0"
|
|
323
|
+
})), template.description && React__default.createElement("p", {
|
|
324
|
+
className: "text-xs text-muted-foreground mt-0.5 line-clamp-2"
|
|
325
|
+
}, template.description))));
|
|
326
|
+
})), filteredTemplates.length === 0 && React__default.createElement("div", {
|
|
327
|
+
className: "flex flex-col items-center justify-center py-12 text-center"
|
|
328
|
+
}, React__default.createElement(Search, {
|
|
329
|
+
className: "h-10 w-10 text-muted-foreground mb-3"
|
|
330
|
+
}), React__default.createElement("p", {
|
|
331
|
+
className: "text-sm font-medium text-foreground"
|
|
332
|
+
}, "No templates found"), React__default.createElement("p", {
|
|
333
|
+
className: "text-xs text-muted-foreground mt-1"
|
|
334
|
+
}, "Try adjusting search or filters")))));
|
|
335
|
+
}
|
|
185
336
|
/**
|
|
186
|
-
* InputToolBar –
|
|
187
|
-
*
|
|
188
|
-
* Layout: left (mode toggles + template pill), flexible middle, right (attach, capture, mic/send).
|
|
337
|
+
* InputToolBar – UI only. Renders toolbar and optional built-in textarea from props.
|
|
338
|
+
* All data (leftItems, rightItems, templateButton, inputConfig, micSendButton) and behavior (onClick, onChange, etc.) come from props.
|
|
189
339
|
*/
|
|
190
340
|
function InputToolBar({
|
|
191
341
|
className,
|
|
192
|
-
|
|
193
|
-
|
|
342
|
+
inputConfig,
|
|
343
|
+
topContent,
|
|
344
|
+
leftItems: leftItemsProp,
|
|
345
|
+
rightItems: rightItemsProp,
|
|
194
346
|
templateButton,
|
|
347
|
+
templateModalConfig,
|
|
348
|
+
templateModalRender,
|
|
195
349
|
leftCustomRender,
|
|
196
350
|
rightCustomRender,
|
|
197
351
|
micSendButton,
|
|
198
|
-
children
|
|
352
|
+
children,
|
|
353
|
+
onContainerClick
|
|
199
354
|
}) {
|
|
200
|
-
const
|
|
201
|
-
|
|
202
|
-
|
|
355
|
+
const leftItems = leftItemsProp ?? [];
|
|
356
|
+
const rightItems = rightItemsProp ?? [];
|
|
357
|
+
const hasInputContent = inputConfig != null || children != null;
|
|
358
|
+
const effectiveTopContent = inputConfig != null ? topContent : null;
|
|
359
|
+
const templateModal = templateModalConfig != null && templateModalConfig.isOpen ? templateModalRender != null ? templateModalRender(templateModalConfig) : React__default.createElement(DefaultTemplateModal, templateModalConfig) : null;
|
|
360
|
+
return React__default.createElement(React__default.Fragment, null, templateModal, React__default.createElement("section", {
|
|
361
|
+
className: cn('w-full overflow-visible rounded-[24px] border border-border/70 bg-card shadow-md', hasInputContent && 'cursor-text', className),
|
|
362
|
+
onClick: hasInputContent ? onContainerClick : undefined,
|
|
363
|
+
role: hasInputContent ? 'presentation' : undefined
|
|
203
364
|
}, React__default.createElement("div", {
|
|
204
|
-
className: cn('flex px-3 py-2',
|
|
205
|
-
},
|
|
206
|
-
className: "min-w-0 flex-1"
|
|
207
|
-
},
|
|
208
|
-
|
|
365
|
+
className: cn('flex px-3 py-2', hasInputContent ? 'flex-col gap-2' : 'flex-wrap items-center gap-3')
|
|
366
|
+
}, hasInputContent && React__default.createElement("div", {
|
|
367
|
+
className: "min-w-0 flex-1 flex flex-col gap-2"
|
|
368
|
+
}, effectiveTopContent, inputConfig != null ? React__default.createElement(React__default.Fragment, null, React__default.createElement("label", {
|
|
369
|
+
htmlFor: inputConfig.id ?? 'input-toolbar-input',
|
|
370
|
+
className: "sr-only"
|
|
371
|
+
}, inputConfig.placeholder ?? 'Message'), React__default.createElement("textarea", {
|
|
372
|
+
ref: inputConfig.inputRef,
|
|
373
|
+
id: inputConfig.id ?? 'input-toolbar-input',
|
|
374
|
+
name: inputConfig.name ?? 'query',
|
|
375
|
+
value: inputConfig.value,
|
|
376
|
+
onChange: inputConfig.onChange,
|
|
377
|
+
onKeyDown: inputConfig.onKeyDown,
|
|
378
|
+
onPaste: inputConfig.onPaste,
|
|
379
|
+
placeholder: inputConfig.placeholder ?? 'Ask anything...',
|
|
380
|
+
disabled: inputConfig.disabled,
|
|
381
|
+
rows: 1,
|
|
382
|
+
className: defaultTextareaClassName
|
|
383
|
+
})) : children), React__default.createElement("div", {
|
|
384
|
+
className: cn('flex flex-wrap items-center gap-3', hasInputContent && 'pt-2')
|
|
209
385
|
}, React__default.createElement("div", {
|
|
210
|
-
className: cn('flex items-center gap-2',
|
|
386
|
+
className: cn('flex items-center gap-2', hasInputContent && 'mb-2')
|
|
211
387
|
}, React__default.createElement(LeftSection, {
|
|
212
388
|
leftItems: leftItems,
|
|
213
389
|
templateButton: templateButton,
|
|
214
390
|
leftCustomRender: leftCustomRender
|
|
215
|
-
})), !
|
|
391
|
+
})), !hasInputContent && React__default.createElement("div", {
|
|
216
392
|
className: "min-w-0 flex-1",
|
|
217
393
|
"aria-hidden": true
|
|
218
394
|
}), React__default.createElement("div", {
|
|
@@ -221,5 +397,5 @@ function InputToolBar({
|
|
|
221
397
|
rightItems: rightItems,
|
|
222
398
|
rightCustomRender: rightCustomRender,
|
|
223
399
|
micSendButton: micSendButton
|
|
224
|
-
})))));
|
|
400
|
+
}))))));
|
|
225
401
|
}export{InputToolBar,InputToolBar as default};//# sourceMappingURL=InputToolBar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputToolBar.js","sources":["../../../src/components/InputToolBar/InputToolBar.tsx"],"sourcesContent":[null],"names":["React"],"mappings":"
|
|
1
|
+
{"version":3,"file":"InputToolBar.js","sources":["../../../src/components/InputToolBar/InputToolBar.tsx"],"sourcesContent":[null],"names":["React"],"mappings":";;AA6bG,MAAA,kBAAA,GAAA;AACH,EAAA,MAAA,EAAAA,cAAA,CAAA,aAAgB,CAAA,MAAY,EAAC;AA+F7B,IAAA,SAAA,EAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -8,7 +8,7 @@ export type RightItemOverrides = Partial<Record<RightToolbarItemId, Partial<Omit
|
|
|
8
8
|
export declare function getDefaultLeftItems(overrides?: LeftItemOverrides): ToolbarItemConfig<LeftToolbarItemId>[];
|
|
9
9
|
/**
|
|
10
10
|
* Build default right toolbar items (tag, chip, camera, attach, mic). Omit or set enabled: false to hide.
|
|
11
|
-
* Override label, enabled, active, onClick, icon, customButton per id.
|
|
11
|
+
* Override label, enabled, disabled, loading, active, onClick, icon, customButton per id.
|
|
12
12
|
*/
|
|
13
13
|
export declare function getDefaultRightItems(overrides?: RightItemOverrides): ToolbarItemConfig<RightToolbarItemId>[];
|
|
14
14
|
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/components/InputToolBar/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/components/InputToolBar/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAqBxF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACnC,MAAM,CAAC,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CACvF,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,OAAO,CACpC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CACzF,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,CAezG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAe5G"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const DEFAULT_LEFT_IDS = ['search', 'zap', 'lightbulb'];
|
|
2
|
-
const DEFAULT_RIGHT_IDS = ['tag', 'chip', 'camera', 'attach', 'mic'];
|
|
2
|
+
const DEFAULT_RIGHT_IDS = ['tag', 'chip', 'camera', 'image', 'attach', 'mic'];
|
|
3
3
|
const DEFAULT_LEFT_LABELS = {
|
|
4
4
|
search: 'Chat mode',
|
|
5
5
|
zap: 'Deep Search',
|
|
@@ -7,9 +7,10 @@ const DEFAULT_LEFT_LABELS = {
|
|
|
7
7
|
template: 'Template'
|
|
8
8
|
};
|
|
9
9
|
const DEFAULT_RIGHT_LABELS = {
|
|
10
|
-
tag: '
|
|
11
|
-
chip: '
|
|
10
|
+
tag: 'Enhance your prompt with AI',
|
|
11
|
+
chip: 'Configure chat model',
|
|
12
12
|
camera: 'Capture image',
|
|
13
|
+
image: 'Insert image',
|
|
13
14
|
attach: 'Attach file',
|
|
14
15
|
mic: 'Mic / Send'
|
|
15
16
|
};
|
|
@@ -24,6 +25,8 @@ function getDefaultLeftItems(overrides) {
|
|
|
24
25
|
id,
|
|
25
26
|
label: o?.label ?? DEFAULT_LEFT_LABELS[id],
|
|
26
27
|
enabled: o?.enabled ?? true,
|
|
28
|
+
disabled: o?.disabled,
|
|
29
|
+
loading: o?.loading,
|
|
27
30
|
active: o?.active,
|
|
28
31
|
onClick: o?.onClick,
|
|
29
32
|
icon: o?.icon,
|
|
@@ -33,7 +36,7 @@ function getDefaultLeftItems(overrides) {
|
|
|
33
36
|
}
|
|
34
37
|
/**
|
|
35
38
|
* Build default right toolbar items (tag, chip, camera, attach, mic). Omit or set enabled: false to hide.
|
|
36
|
-
* Override label, enabled, active, onClick, icon, customButton per id.
|
|
39
|
+
* Override label, enabled, disabled, loading, active, onClick, icon, customButton per id.
|
|
37
40
|
*/
|
|
38
41
|
function getDefaultRightItems(overrides) {
|
|
39
42
|
return DEFAULT_RIGHT_IDS.map(id => {
|
|
@@ -42,6 +45,8 @@ function getDefaultRightItems(overrides) {
|
|
|
42
45
|
id,
|
|
43
46
|
label: o?.label ?? DEFAULT_RIGHT_LABELS[id],
|
|
44
47
|
enabled: o?.enabled ?? true,
|
|
48
|
+
disabled: o?.disabled,
|
|
49
|
+
loading: o?.loading,
|
|
45
50
|
active: o?.active,
|
|
46
51
|
onClick: o?.onClick,
|
|
47
52
|
icon: o?.icon,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sources":["../../../src/components/InputToolBar/defaults.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA,MAAA,gBAAc,GAAA,CAAA,QAAmB,EAAA,KAAA,EAAA,WAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"defaults.js","sources":["../../../src/components/InputToolBar/defaults.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA,MAAA,gBAAc,GAAA,CAAA,QAAmB,EAAA,KAAA,EAAA,WAAoB,CAAA;AAqBrD,MAAM,0BAA0B,EAAA,MAC5B,EAAA,QAAO,EAAA,OAAA,EAAA,QAAmB,EAAA;AAE9B,MAAM;AAIN,EAAA,MAAA,EAAA,WAAA;;;AAGG,EAAA,QAAA,EAAA;AACH,CAAA;AAiBA,MAAA,oBAAA,GAAA;;;AAGG,EAAA,MAAA,EAAA,eAAA;AACH,EAAA,KAAA,EAAA,cAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { InputToolBar } from './InputToolBar';
|
|
2
2
|
export { getDefaultLeftItems, getDefaultRightItems } from './defaults';
|
|
3
|
-
export type { InputToolBarProps, LeftToolbarItemId, MicSendButtonConfig, RightToolbarItemId, TemplateButtonConfig, ToolbarItemConfig, } from './types';
|
|
3
|
+
export type { InputConfig, InputToolBarProps, LeftToolbarItemId, MicSendButtonConfig, RightToolbarItemId, TemplateButtonConfig, TemplateModalConfig, TemplateModalItem, TemplateModalRender, ToolbarItemConfig, } from './types';
|
|
4
4
|
export type { LeftItemOverrides, RightItemOverrides } from './defaults';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/InputToolBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EACR,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,GACpB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/InputToolBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EACR,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GACpB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,61 +1,114 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
+
/** Data-only config for built-in textarea. When provided, InputToolBar renders the textarea with default styling. */
|
|
3
|
+
export interface InputConfig {
|
|
4
|
+
value: string;
|
|
5
|
+
onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
onKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;
|
|
9
|
+
onPaste?: (e: React.ClipboardEvent<HTMLTextAreaElement>) => void;
|
|
10
|
+
id?: string;
|
|
11
|
+
name?: string;
|
|
12
|
+
/** Optional ref for the textarea (e.g. for focus / height adjustment) */
|
|
13
|
+
inputRef?: React.RefObject<HTMLTextAreaElement | null>;
|
|
14
|
+
}
|
|
2
15
|
/** Predefined toolbar action ids for left section (mode toggles, template) */
|
|
3
16
|
export type LeftToolbarItemId = 'search' | 'zap' | 'lightbulb' | 'template';
|
|
4
|
-
/** Predefined toolbar action ids for right section
|
|
5
|
-
export type RightToolbarItemId = 'tag' | 'chip' | 'camera' | 'attach' | 'mic';
|
|
17
|
+
/** Predefined toolbar action ids for right section. tag = enhance prompt, chip = configure model; both support enabled/disable and custom label, icon, onClick for app-specific use. */
|
|
18
|
+
export type RightToolbarItemId = 'tag' | 'chip' | 'camera' | 'image' | 'attach' | 'mic';
|
|
6
19
|
/** Single toolbar button/item configuration */
|
|
7
20
|
export interface ToolbarItemConfig<TId extends string = string> {
|
|
8
21
|
/** Unique id for the item (used for enable/disable and callbacks) */
|
|
9
22
|
id: TId;
|
|
10
23
|
/** Icon (React node) or custom content for the button */
|
|
11
24
|
icon?: ReactNode;
|
|
12
|
-
/** Accessible label / title */
|
|
25
|
+
/** Accessible label / title (e.g. "Enhance your prompt with AI" when enabled, "Type something to enhance" when disabled) */
|
|
13
26
|
label: string;
|
|
14
|
-
/** Whether the item is enabled (default true) */
|
|
27
|
+
/** Whether the item is enabled (default true). When false, item is hidden. */
|
|
15
28
|
enabled?: boolean;
|
|
16
|
-
/**
|
|
29
|
+
/** When true, button is visible but disabled (greyed out, not clickable). Use for e.g. "enhance" when input is empty. */
|
|
30
|
+
disabled?: boolean;
|
|
31
|
+
/** When true, show loading spinner and treat as disabled. Use for e.g. "enhance" while request is in flight. */
|
|
32
|
+
loading?: boolean;
|
|
33
|
+
/** Whether the item is in active/selected state (e.g. primary color + hover style for right items) */
|
|
17
34
|
active?: boolean;
|
|
18
35
|
/** Click handler */
|
|
19
36
|
onClick?: () => void;
|
|
20
37
|
/** Optional custom button element; when set, icon/label are ignored and this is rendered */
|
|
21
38
|
customButton?: ReactNode;
|
|
22
39
|
}
|
|
23
|
-
/** When provided, the rightmost button shows Send
|
|
40
|
+
/** When provided, the rightmost button shows Stop when loading, Send when hasContent, else Mic. Replaces any "mic" item in rightItems. */
|
|
24
41
|
export interface MicSendButtonConfig {
|
|
25
|
-
/** True when input has content – show send icon; otherwise show mic icon */
|
|
42
|
+
/** True when input has content – show send icon; otherwise show mic icon (unless loading). */
|
|
26
43
|
hasContent: boolean;
|
|
27
44
|
onSend: () => void;
|
|
28
45
|
onMic: () => void;
|
|
29
46
|
disabled?: boolean;
|
|
47
|
+
/** When true, show stop icon and call onStop on click. */
|
|
48
|
+
isLoading?: boolean;
|
|
49
|
+
onStop?: () => void;
|
|
30
50
|
}
|
|
31
|
-
/** Configuration for the optional "+ Template (N)"
|
|
51
|
+
/** Configuration for the optional template pill: either "+ Template (N)" or selected template name with remove/change */
|
|
32
52
|
export interface TemplateButtonConfig {
|
|
33
|
-
/** Button label prefix, e.g. "+ Template" */
|
|
53
|
+
/** Button label prefix when no selection, e.g. "+ Template" */
|
|
34
54
|
label: string;
|
|
35
|
-
/** Count to show in parentheses, e.g. (1) */
|
|
55
|
+
/** Count to show in parentheses when no selection, e.g. (1) */
|
|
36
56
|
count?: number;
|
|
37
|
-
/**
|
|
57
|
+
/** When set, show selected template pill (name + remove + change) instead of "+ Template (N)" */
|
|
58
|
+
selectedLabel?: string | null;
|
|
59
|
+
/** Open template modal / change template (used for main pill click and for "change" when selected) */
|
|
38
60
|
onClick?: () => void;
|
|
61
|
+
/** When template is selected, called when user clicks remove (X) */
|
|
62
|
+
onClearTemplate?: () => void;
|
|
39
63
|
/** Disabled state */
|
|
40
64
|
disabled?: boolean;
|
|
41
65
|
}
|
|
42
|
-
/**
|
|
66
|
+
/** Minimal template item for the default template selection modal. Map your app's template type to this shape. */
|
|
67
|
+
export interface TemplateModalItem {
|
|
68
|
+
id: string;
|
|
69
|
+
label: string;
|
|
70
|
+
description?: string;
|
|
71
|
+
category?: string;
|
|
72
|
+
}
|
|
73
|
+
/** Config for the template selection modal. Pass data from props; InputToolBar renders default modal or custom via templateModalRender. */
|
|
74
|
+
export interface TemplateModalConfig {
|
|
75
|
+
isOpen: boolean;
|
|
76
|
+
onClose: () => void;
|
|
77
|
+
templates: TemplateModalItem[];
|
|
78
|
+
selectedId: string | null;
|
|
79
|
+
onSelect: (id: string) => void;
|
|
80
|
+
suggestedId?: string | null;
|
|
81
|
+
title?: string;
|
|
82
|
+
}
|
|
83
|
+
/** Render prop for custom template modal. When provided, used instead of the default modal UI. */
|
|
84
|
+
export type TemplateModalRender = (config: TemplateModalConfig) => ReactNode;
|
|
85
|
+
/** Props for the InputToolBar container. UI only: all data and behavior come from props. */
|
|
43
86
|
export interface InputToolBarProps {
|
|
44
87
|
/** Optional class name for the toolbar container */
|
|
45
88
|
className?: string;
|
|
46
|
-
/**
|
|
89
|
+
/** When provided, InputToolBar renders a built-in textarea; pass only data (value, onChange, etc.). */
|
|
90
|
+
inputConfig?: InputConfig | null;
|
|
91
|
+
/** Optional content above the input when inputConfig is set (e.g. panels, banners). */
|
|
92
|
+
topContent?: ReactNode;
|
|
93
|
+
/** Left section: items and template pill. All data (active, onClick, etc.) from parent. */
|
|
47
94
|
leftItems?: Array<ToolbarItemConfig<LeftToolbarItemId>>;
|
|
48
|
-
/** Right section:
|
|
95
|
+
/** Right section: items. All data (onClick, etc.) from parent. */
|
|
49
96
|
rightItems?: Array<ToolbarItemConfig<RightToolbarItemId>>;
|
|
50
|
-
/** Optional template pill
|
|
97
|
+
/** Optional template pill (e.g. "+ Template (1)"). Data from parent. */
|
|
51
98
|
templateButton?: TemplateButtonConfig | null;
|
|
52
|
-
/**
|
|
99
|
+
/** Template selection modal: pass data from props. When set, InputToolBar renders the modal (default UI or custom). */
|
|
100
|
+
templateModalConfig?: TemplateModalConfig | null;
|
|
101
|
+
/** When provided, used instead of the default template modal UI. Receives templateModalConfig. */
|
|
102
|
+
templateModalRender?: TemplateModalRender | null;
|
|
103
|
+
/** Custom content for the left section (overrides leftItems) */
|
|
53
104
|
leftCustomRender?: ReactNode;
|
|
54
|
-
/** Custom content
|
|
105
|
+
/** Custom content for the right section (overrides rightItems and micSendButton) */
|
|
55
106
|
rightCustomRender?: ReactNode;
|
|
56
|
-
/** When set,
|
|
107
|
+
/** When set, rightmost button: Stop/Send/Mic; all data and handlers from parent. */
|
|
57
108
|
micSendButton?: MicSendButtonConfig | null;
|
|
58
|
-
/** Optional content in the middle
|
|
109
|
+
/** Optional content in the middle when not using inputConfig */
|
|
59
110
|
children?: ReactNode;
|
|
111
|
+
/** Click on container (e.g. to focus input) */
|
|
112
|
+
onContainerClick?: (e: React.MouseEvent) => void;
|
|
60
113
|
}
|
|
61
114
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/InputToolBar/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,8EAA8E;AAC9E,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,KAAK,GAAG,WAAW,GAAG,UAAU,CAAC;AAE5E,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/InputToolBar/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,qHAAqH;AACrH,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IAClE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;IACjE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;CAC1D;AAED,8EAA8E;AAC9E,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,KAAK,GAAG,WAAW,GAAG,UAAU,CAAC;AAE5E,wLAAwL;AACxL,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExF,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM;IAC1D,qEAAqE;IACrE,EAAE,EAAE,GAAG,CAAC;IACR,yDAAyD;IACzD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,4HAA4H;IAC5H,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yHAAyH;IACzH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gHAAgH;IAChH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sGAAsG;IACtG,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,SAAS,CAAC;CAC5B;AAED,0IAA0I;AAC1I,MAAM,WAAW,mBAAmB;IAChC,8FAA8F;IAC9F,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,yHAAyH;AACzH,MAAM,WAAW,oBAAoB;IACjC,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iGAAiG;IACjG,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,sGAAsG;IACtG,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,kHAAkH;AAClH,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,2IAA2I;AAC3I,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,kGAAkG;AAClG,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,mBAAmB,KAAK,SAAS,CAAC;AAE7E,4FAA4F;AAC5F,MAAM,WAAW,iBAAiB;IAC9B,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uGAAuG;IACvG,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,uFAAuF;IACvF,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACxD,kEAAkE;IAClE,UAAU,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC1D,wEAAwE;IACxE,cAAc,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC7C,uHAAuH;IACvH,mBAAmB,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACjD,kGAAkG;IAClG,mBAAmB,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACjD,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,oFAAoF;IACpF,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,oFAAoF;IACpF,aAAa,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC3C,gEAAgE;IAChE,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CACpD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface MarkdownBreadcrumbsProps {
|
|
3
|
+
categoryId: string;
|
|
4
|
+
categoryTitle?: string;
|
|
5
|
+
markdownTitle: string;
|
|
6
|
+
className?: string;
|
|
7
|
+
getHelpCenterLink: () => string;
|
|
8
|
+
getCategoryLink: (categoryId: string) => string;
|
|
9
|
+
helpCenterLabel: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const MarkdownBreadcrumbs: React.FC<MarkdownBreadcrumbsProps>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=MarkdownBreadcrumbs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownBreadcrumbs.d.ts","sourceRoot":"","sources":["../../../src/components/Markdown/MarkdownBreadcrumbs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,wBAAwB;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAwBlE,CAAC"}
|