@admin-layout/tailwind-ui 12.2.4-alpha.17 → 12.2.4-alpha.21
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 +1 -1
- package/lib/components/InputToolBar/InputToolBar.d.ts.map +1 -1
- package/lib/components/InputToolBar/InputToolBar.js +45 -24
- package/lib/components/InputToolBar/InputToolBar.js.map +1 -1
- package/lib/components/InputToolBar/defaults.d.ts +2 -1
- package/lib/components/InputToolBar/defaults.d.ts.map +1 -1
- package/lib/components/InputToolBar/defaults.js +6 -3
- 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 +40 -3
- package/lib/components/InputToolBar/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -4,6 +4,6 @@ import type { InputToolBarProps } from './types';
|
|
|
4
4
|
* InputToolBar – UI only. Renders toolbar and optional built-in textarea from props.
|
|
5
5
|
* All data (leftItems, rightItems, templateButton, inputConfig, micSendButton) and behavior (onClick, onChange, etc.) come from props.
|
|
6
6
|
*/
|
|
7
|
-
export declare function InputToolBar({ className, inputConfig, topContent, leftItems: leftItemsProp, rightItems: rightItemsProp, templateButton, templateModalConfig, templateModalRender, leftCustomRender, rightCustomRender, micSendButton, children, onContainerClick, }: InputToolBarProps): React.JSX.Element;
|
|
7
|
+
export declare function InputToolBar({ className, classNames, inputConfig, topContent, leftItems: leftItemsProp, rightItems: rightItemsProp, templateButton, templateModalConfig, templateModalRender, projectSettingsModalOpen, onProjectSettingsModalClose, projectSettingsModalRender, leftCustomRender, rightCustomRender, micSendButton, children, onContainerClick, }: InputToolBarProps): React.JSX.Element;
|
|
8
8
|
export default InputToolBar;
|
|
9
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":"AAgBA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,OAAO,KAAK,EAER,iBAAiB,EAQpB,MAAM,SAAS,CAAC;AAwcjB;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EACzB,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,QAAQ,EACR,gBAAgB,GACnB,EAAE,iBAAiB,qBAwFnB;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
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';
|
|
1
|
+
import {Lightbulb,Zap,Search,Mic,Paperclip,Image,Camera,WandSparkles,Settings,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,6 +13,9 @@ const defaultLeftIconMap = {
|
|
|
13
13
|
template: null // template is rendered as pill, not in icon group
|
|
14
14
|
};
|
|
15
15
|
const defaultRightIconMap = {
|
|
16
|
+
projectSettings: React__default.createElement(Settings, {
|
|
17
|
+
className: iconSizeRight
|
|
18
|
+
}),
|
|
16
19
|
tag: React__default.createElement(WandSparkles, {
|
|
17
20
|
className: iconSizeRight
|
|
18
21
|
}),
|
|
@@ -72,11 +75,12 @@ function MicSendButton({
|
|
|
72
75
|
onMic,
|
|
73
76
|
disabled,
|
|
74
77
|
isLoading,
|
|
75
|
-
onStop
|
|
78
|
+
onStop,
|
|
79
|
+
className
|
|
76
80
|
}) {
|
|
77
81
|
const isStop = isLoading === true;
|
|
78
82
|
const isSend = !isStop && hasContent;
|
|
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';
|
|
83
|
+
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 border border-primary';
|
|
80
84
|
const handleClick = isStop ? onStop : isSend ? onSend : onMic;
|
|
81
85
|
const label = isStop ? 'Stop' : isSend ? 'Send' : 'Start voice input';
|
|
82
86
|
return React__default.createElement("button", {
|
|
@@ -85,7 +89,7 @@ function MicSendButton({
|
|
|
85
89
|
title: label,
|
|
86
90
|
onClick: handleClick,
|
|
87
91
|
disabled: disabled && !isStop,
|
|
88
|
-
className: base
|
|
92
|
+
className: cn(base, className)
|
|
89
93
|
}, isStop ? React__default.createElement(StopCircle, {
|
|
90
94
|
className: iconSizeRight
|
|
91
95
|
}) : isSend ? React__default.createElement(ArrowUpRight, {
|
|
@@ -97,7 +101,8 @@ function MicSendButton({
|
|
|
97
101
|
function ToolbarIconButton({
|
|
98
102
|
item,
|
|
99
103
|
getDefaultIcon,
|
|
100
|
-
isLeftGroup
|
|
104
|
+
isLeftGroup,
|
|
105
|
+
classNames
|
|
101
106
|
}) {
|
|
102
107
|
if (item.enabled === false) return null;
|
|
103
108
|
const icon = item.customButton ?? item.icon ?? getDefaultIcon(item.id);
|
|
@@ -107,10 +112,10 @@ function ToolbarIconButton({
|
|
|
107
112
|
const isDisabled = item.disabled === true || item.loading === true;
|
|
108
113
|
const isActive = item.active === true;
|
|
109
114
|
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';
|
|
110
|
-
const leftVariant = isActive ? 'rounded-full border border-primary bg-primary text-primary-foreground hover:bg-primary/90' : 'rounded-full border border-
|
|
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';
|
|
115
|
+
const leftVariant = isActive ? cn('rounded-full border border-primary bg-primary text-primary-foreground hover:bg-primary/90', classNames?.leftButtonActive) : cn('rounded-full border border-border bg-muted/50 text-foreground hover:border-primary hover:bg-muted hover:text-primary', classNames?.leftButtonInactive);
|
|
116
|
+
const rightVariantDisabled = cn('rounded-2xl text-muted-foreground/50 cursor-not-allowed disabled:pointer-events-auto', classNames?.rightButtonDisabled);
|
|
117
|
+
const rightVariantActive = cn('rounded-2xl text-primary hover:bg-secondary border border-transparent', classNames?.rightButtonActive);
|
|
118
|
+
const rightVariantDefault = cn('rounded-2xl text-muted-foreground hover:bg-secondary/70 active:bg-secondary border border-transparent', classNames?.rightButton);
|
|
114
119
|
const rightVariant = isDisabled ? rightVariantDisabled : isActive ? rightVariantActive : rightVariantDefault;
|
|
115
120
|
return React__default.createElement("button", {
|
|
116
121
|
type: "button",
|
|
@@ -127,11 +132,12 @@ function ToolbarIconButton({
|
|
|
127
132
|
function LeftSection({
|
|
128
133
|
leftItems,
|
|
129
134
|
templateButton,
|
|
130
|
-
leftCustomRender
|
|
135
|
+
leftCustomRender,
|
|
136
|
+
classNames
|
|
131
137
|
}) {
|
|
132
138
|
if (leftCustomRender != null) {
|
|
133
139
|
return React__default.createElement("div", {
|
|
134
|
-
className:
|
|
140
|
+
className: cn('flex items-center gap-2', classNames?.leftGroup)
|
|
135
141
|
}, leftCustomRender);
|
|
136
142
|
}
|
|
137
143
|
const left = leftItems ?? [];
|
|
@@ -139,7 +145,7 @@ function LeftSection({
|
|
|
139
145
|
const hasLeft = left.length > 0 || hasTemplate;
|
|
140
146
|
if (!hasLeft) return null;
|
|
141
147
|
return React__default.createElement("div", {
|
|
142
|
-
className:
|
|
148
|
+
className: cn('flex items-center gap-2', classNames?.leftGroup)
|
|
143
149
|
}, left.length > 0 && React__default.createElement("div", {
|
|
144
150
|
className: "flex items-center gap-1 rounded-full bg-secondary px-2 py-1"
|
|
145
151
|
}, left.map((item, index) => React__default.createElement(React__default.Fragment, {
|
|
@@ -147,7 +153,8 @@ function LeftSection({
|
|
|
147
153
|
}, React__default.createElement(ToolbarIconButton, {
|
|
148
154
|
item: item,
|
|
149
155
|
getDefaultIcon: id => defaultLeftIconMap[id] ?? null,
|
|
150
|
-
isLeftGroup: true
|
|
156
|
+
isLeftGroup: true,
|
|
157
|
+
classNames: classNames
|
|
151
158
|
}), index < left.length - 1 && React__default.createElement("span", {
|
|
152
159
|
"aria-hidden": "true",
|
|
153
160
|
className: "mx-1 h-5 w-px bg-border/70"
|
|
@@ -157,7 +164,8 @@ function LeftSection({
|
|
|
157
164
|
selectedLabel: templateButton.selectedLabel,
|
|
158
165
|
onClick: templateButton.onClick,
|
|
159
166
|
onClearTemplate: templateButton.onClearTemplate,
|
|
160
|
-
disabled: templateButton.disabled
|
|
167
|
+
disabled: templateButton.disabled,
|
|
168
|
+
classNames: classNames
|
|
161
169
|
}));
|
|
162
170
|
}
|
|
163
171
|
function TemplatePill({
|
|
@@ -166,11 +174,12 @@ function TemplatePill({
|
|
|
166
174
|
selectedLabel,
|
|
167
175
|
onClick,
|
|
168
176
|
onClearTemplate,
|
|
169
|
-
disabled
|
|
177
|
+
disabled,
|
|
178
|
+
classNames
|
|
170
179
|
}) {
|
|
171
180
|
if (selectedLabel) {
|
|
172
181
|
return React__default.createElement("div", {
|
|
173
|
-
className:
|
|
182
|
+
className: cn('flex items-center gap-1 px-2 py-1 rounded-full bg-primary/10 text-primary text-xs font-medium border border-primary/20', classNames?.templatePillSelected)
|
|
174
183
|
}, React__default.createElement("span", {
|
|
175
184
|
className: "truncate max-w-[120px]",
|
|
176
185
|
title: selectedLabel
|
|
@@ -195,14 +204,15 @@ function TemplatePill({
|
|
|
195
204
|
type: "button",
|
|
196
205
|
onClick: onClick,
|
|
197
206
|
disabled: disabled,
|
|
198
|
-
className: cn('flex items-center gap-1 rounded-full border border-border bg-
|
|
207
|
+
className: cn('flex items-center gap-1 rounded-full border border-border bg-muted/50 px-2 py-1 text-xs font-medium text-foreground transition-colors hover:border-primary hover:bg-primary/5', disabled && 'opacity-50 cursor-not-allowed' || '', classNames?.templatePill),
|
|
199
208
|
"aria-label": "Select template"
|
|
200
209
|
}, text);
|
|
201
210
|
}
|
|
202
211
|
function RightSection({
|
|
203
212
|
rightItems,
|
|
204
213
|
rightCustomRender,
|
|
205
|
-
micSendButton
|
|
214
|
+
micSendButton,
|
|
215
|
+
classNames
|
|
206
216
|
}) {
|
|
207
217
|
if (rightCustomRender != null) {
|
|
208
218
|
return React__default.createElement("div", {
|
|
@@ -218,14 +228,16 @@ function RightSection({
|
|
|
218
228
|
}, filteredRight.map(item => React__default.createElement(ToolbarIconButton, {
|
|
219
229
|
key: item.id,
|
|
220
230
|
item: item,
|
|
221
|
-
getDefaultIcon: id => defaultRightIconMap[id] ?? null
|
|
231
|
+
getDefaultIcon: id => defaultRightIconMap[id] ?? null,
|
|
232
|
+
classNames: classNames
|
|
222
233
|
})), micSendButton != null && React__default.createElement(MicSendButton, {
|
|
223
234
|
hasContent: micSendButton.hasContent,
|
|
224
235
|
onSend: micSendButton.onSend,
|
|
225
236
|
onMic: micSendButton.onMic,
|
|
226
237
|
disabled: micSendButton.disabled,
|
|
227
238
|
isLoading: micSendButton.isLoading,
|
|
228
|
-
onStop: micSendButton.onStop
|
|
239
|
+
onStop: micSendButton.onStop,
|
|
240
|
+
className: classNames?.micSendButton
|
|
229
241
|
}));
|
|
230
242
|
}
|
|
231
243
|
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]';
|
|
@@ -339,6 +351,7 @@ function DefaultTemplateModal({
|
|
|
339
351
|
*/
|
|
340
352
|
function InputToolBar({
|
|
341
353
|
className,
|
|
354
|
+
classNames,
|
|
342
355
|
inputConfig,
|
|
343
356
|
topContent,
|
|
344
357
|
leftItems: leftItemsProp,
|
|
@@ -346,6 +359,9 @@ function InputToolBar({
|
|
|
346
359
|
templateButton,
|
|
347
360
|
templateModalConfig,
|
|
348
361
|
templateModalRender,
|
|
362
|
+
projectSettingsModalOpen,
|
|
363
|
+
onProjectSettingsModalClose,
|
|
364
|
+
projectSettingsModalRender,
|
|
349
365
|
leftCustomRender,
|
|
350
366
|
rightCustomRender,
|
|
351
367
|
micSendButton,
|
|
@@ -357,8 +373,11 @@ function InputToolBar({
|
|
|
357
373
|
const hasInputContent = inputConfig != null || children != null;
|
|
358
374
|
const effectiveTopContent = inputConfig != null ? topContent : null;
|
|
359
375
|
const templateModal = templateModalConfig != null && templateModalConfig.isOpen ? templateModalRender != null ? templateModalRender(templateModalConfig) : React__default.createElement(DefaultTemplateModal, templateModalConfig) : null;
|
|
360
|
-
|
|
361
|
-
|
|
376
|
+
const projectSettingsModal = projectSettingsModalOpen === true && onProjectSettingsModalClose != null && projectSettingsModalRender != null ? projectSettingsModalRender({
|
|
377
|
+
onClose: onProjectSettingsModalClose
|
|
378
|
+
}) : null;
|
|
379
|
+
return React__default.createElement(React__default.Fragment, null, templateModal, projectSettingsModal, React__default.createElement("section", {
|
|
380
|
+
className: cn('w-full overflow-visible rounded-[24px] border border-border/70 bg-card shadow-md', hasInputContent && 'cursor-text', classNames?.container, className),
|
|
362
381
|
onClick: hasInputContent ? onContainerClick : undefined,
|
|
363
382
|
role: hasInputContent ? 'presentation' : undefined
|
|
364
383
|
}, React__default.createElement("div", {
|
|
@@ -387,7 +406,8 @@ function InputToolBar({
|
|
|
387
406
|
}, React__default.createElement(LeftSection, {
|
|
388
407
|
leftItems: leftItems,
|
|
389
408
|
templateButton: templateButton,
|
|
390
|
-
leftCustomRender: leftCustomRender
|
|
409
|
+
leftCustomRender: leftCustomRender,
|
|
410
|
+
classNames: classNames
|
|
391
411
|
})), !hasInputContent && React__default.createElement("div", {
|
|
392
412
|
className: "min-w-0 flex-1",
|
|
393
413
|
"aria-hidden": true
|
|
@@ -396,6 +416,7 @@ function InputToolBar({
|
|
|
396
416
|
}, React__default.createElement(RightSection, {
|
|
397
417
|
rightItems: rightItems,
|
|
398
418
|
rightCustomRender: rightCustomRender,
|
|
399
|
-
micSendButton: micSendButton
|
|
419
|
+
micSendButton: micSendButton,
|
|
420
|
+
classNames: classNames
|
|
400
421
|
}))))));
|
|
401
422
|
}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":";;AAueG,MAAA,kBAAA,GAAA;AACH,EAAA,MAAA,EAAAA,cAAA,CAAA,oBAA4B,EAAC;AA4G7B,IAAA,SAAA,EAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -7,7 +7,8 @@ export type RightItemOverrides = Partial<Record<RightToolbarItemId, Partial<Omit
|
|
|
7
7
|
*/
|
|
8
8
|
export declare function getDefaultLeftItems(overrides?: LeftItemOverrides): ToolbarItemConfig<LeftToolbarItemId>[];
|
|
9
9
|
/**
|
|
10
|
-
* Build default right toolbar items (tag, chip, camera, attach, mic).
|
|
10
|
+
* Build default right toolbar items (projectSettings, tag, chip, camera, image, attach, mic).
|
|
11
|
+
* projectSettings is disabled by default; pass projectSettings: { enabled: true, onClick } to show.
|
|
11
12
|
* Override label, enabled, disabled, loading, active, onClick, icon, customButton per id.
|
|
12
13
|
*/
|
|
13
14
|
export declare function getDefaultRightItems(overrides?: RightItemOverrides): ToolbarItemConfig<RightToolbarItemId>[];
|
|
@@ -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;AAsBxF,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;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAgB5G"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const DEFAULT_LEFT_IDS = ['search', 'zap', 'lightbulb'];
|
|
2
|
-
const DEFAULT_RIGHT_IDS = ['tag', 'chip', 'camera', 'image', 'attach', 'mic'];
|
|
2
|
+
const DEFAULT_RIGHT_IDS = ['projectSettings', 'tag', 'chip', 'camera', 'image', 'attach', 'mic'];
|
|
3
3
|
const DEFAULT_LEFT_LABELS = {
|
|
4
4
|
search: 'Chat mode',
|
|
5
5
|
zap: 'Deep Search',
|
|
@@ -7,6 +7,7 @@ const DEFAULT_LEFT_LABELS = {
|
|
|
7
7
|
template: 'Template'
|
|
8
8
|
};
|
|
9
9
|
const DEFAULT_RIGHT_LABELS = {
|
|
10
|
+
projectSettings: 'Project settings',
|
|
10
11
|
tag: 'Enhance your prompt with AI',
|
|
11
12
|
chip: 'Configure chat model',
|
|
12
13
|
camera: 'Capture image',
|
|
@@ -35,16 +36,18 @@ function getDefaultLeftItems(overrides) {
|
|
|
35
36
|
});
|
|
36
37
|
}
|
|
37
38
|
/**
|
|
38
|
-
* Build default right toolbar items (tag, chip, camera, attach, mic).
|
|
39
|
+
* Build default right toolbar items (projectSettings, tag, chip, camera, image, attach, mic).
|
|
40
|
+
* projectSettings is disabled by default; pass projectSettings: { enabled: true, onClick } to show.
|
|
39
41
|
* Override label, enabled, disabled, loading, active, onClick, icon, customButton per id.
|
|
40
42
|
*/
|
|
41
43
|
function getDefaultRightItems(overrides) {
|
|
42
44
|
return DEFAULT_RIGHT_IDS.map(id => {
|
|
43
45
|
const o = overrides?.[id];
|
|
46
|
+
const defaultEnabled = id === 'projectSettings' ? false : true;
|
|
44
47
|
return {
|
|
45
48
|
id,
|
|
46
49
|
label: o?.label ?? DEFAULT_RIGHT_LABELS[id],
|
|
47
|
-
enabled: o?.enabled ??
|
|
50
|
+
enabled: o?.enabled ?? defaultEnabled,
|
|
48
51
|
disabled: o?.disabled,
|
|
49
52
|
loading: o?.loading,
|
|
50
53
|
active: o?.active,
|
|
@@ -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;AAsBrD,MAAM,sCACF,EAAM,KAAC,EAAA,MAAA,EAAA,QAAmB,EAAA,OAAY,EAAC,QAAA,EAAA,KAAA,CAAiB;AAE5D,MAAM;AAIN,EAAA,MAAA,EAAA,WAAA;;;AAGG,EAAA,QAAA,EAAA;AACH,CAAA;AAiBA,MAAA,oBAAA,GAAA;;;;AAIG,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 { InputConfig, InputToolBarProps, LeftToolbarItemId, MicSendButtonConfig, RightToolbarItemId, TemplateButtonConfig, TemplateModalConfig, TemplateModalItem, TemplateModalRender, ToolbarItemConfig, } from './types';
|
|
3
|
+
export type { InputConfig, InputToolBarClassNames, InputToolBarProps, LeftToolbarItemId, MicSendButtonConfig, ProjectSettingsModalRender, ProjectSettingsModalRenderProps, 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,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
|
+
{"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,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,0BAA0B,EAC1B,+BAA+B,EAC/B,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"}
|
|
@@ -14,8 +14,8 @@ export interface InputConfig {
|
|
|
14
14
|
}
|
|
15
15
|
/** Predefined toolbar action ids for left section (mode toggles, template) */
|
|
16
16
|
export type LeftToolbarItemId = 'search' | 'zap' | 'lightbulb' | 'template';
|
|
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';
|
|
17
|
+
/** Predefined toolbar action ids for right section. projectSettings = first item, disabled by default; enable via overrides. tag = enhance prompt, chip = configure model; both support enabled/disable and custom label, icon, onClick for app-specific use. */
|
|
18
|
+
export type RightToolbarItemId = 'projectSettings' | 'tag' | 'chip' | 'camera' | 'image' | 'attach' | 'mic';
|
|
19
19
|
/** Single toolbar button/item configuration */
|
|
20
20
|
export interface ToolbarItemConfig<TId extends string = string> {
|
|
21
21
|
/** Unique id for the item (used for enable/disable and callbacks) */
|
|
@@ -82,10 +82,41 @@ export interface TemplateModalConfig {
|
|
|
82
82
|
}
|
|
83
83
|
/** Render prop for custom template modal. When provided, used instead of the default modal UI. */
|
|
84
84
|
export type TemplateModalRender = (config: TemplateModalConfig) => ReactNode;
|
|
85
|
+
/** Props passed to the project settings modal render function. Values are updated via the parent's callback (e.g. onModelConfigChange). */
|
|
86
|
+
export interface ProjectSettingsModalRenderProps {
|
|
87
|
+
onClose: () => void;
|
|
88
|
+
}
|
|
89
|
+
/** Render prop for project settings modal content. When projectSettings is clicked, parent opens modal (sets projectSettingsModalOpen). Modal content receives onClose; parent passes config and onChange from props so values update via parent. */
|
|
90
|
+
export type ProjectSettingsModalRender = (props: ProjectSettingsModalRenderProps) => ReactNode;
|
|
91
|
+
/** Optional class overrides for InputToolBar sections. Use to adapt to light/dark theme or custom styling. */
|
|
92
|
+
export interface InputToolBarClassNames {
|
|
93
|
+
/** Root section (default: rounded border bg-card shadow) */
|
|
94
|
+
container?: string;
|
|
95
|
+
/** Left toolbar group wrapper */
|
|
96
|
+
leftGroup?: string;
|
|
97
|
+
/** Template pill when no selection (e.g. "+ Template (N)") */
|
|
98
|
+
templatePill?: string;
|
|
99
|
+
/** Template pill when selected/suggested (name + remove + change) */
|
|
100
|
+
templatePillSelected?: string;
|
|
101
|
+
/** Left mode buttons – active state (filled) */
|
|
102
|
+
leftButtonActive?: string;
|
|
103
|
+
/** Left mode buttons – inactive state (outline) */
|
|
104
|
+
leftButtonInactive?: string;
|
|
105
|
+
/** Right toolbar buttons – default state */
|
|
106
|
+
rightButton?: string;
|
|
107
|
+
/** Right toolbar buttons – active state */
|
|
108
|
+
rightButtonActive?: string;
|
|
109
|
+
/** Right toolbar buttons – disabled state */
|
|
110
|
+
rightButtonDisabled?: string;
|
|
111
|
+
/** Mic/Send button (primary action) */
|
|
112
|
+
micSendButton?: string;
|
|
113
|
+
}
|
|
85
114
|
/** Props for the InputToolBar container. UI only: all data and behavior come from props. */
|
|
86
115
|
export interface InputToolBarProps {
|
|
87
|
-
/** Optional class name for the toolbar container */
|
|
116
|
+
/** Optional class name for the toolbar container (merged with container in classNames) */
|
|
88
117
|
className?: string;
|
|
118
|
+
/** Optional class overrides for toolbar sections (works in both light and dark theme) */
|
|
119
|
+
classNames?: InputToolBarClassNames;
|
|
89
120
|
/** When provided, InputToolBar renders a built-in textarea; pass only data (value, onChange, etc.). */
|
|
90
121
|
inputConfig?: InputConfig | null;
|
|
91
122
|
/** Optional content above the input when inputConfig is set (e.g. panels, banners). */
|
|
@@ -106,6 +137,12 @@ export interface InputToolBarProps {
|
|
|
106
137
|
rightCustomRender?: ReactNode;
|
|
107
138
|
/** When set, rightmost button: Stop/Send/Mic; all data and handlers from parent. */
|
|
108
139
|
micSendButton?: MicSendButtonConfig | null;
|
|
140
|
+
/** When true, the project settings modal (from projectSettingsModalRender) is shown. Set by parent when projectSettings is clicked. */
|
|
141
|
+
projectSettingsModalOpen?: boolean;
|
|
142
|
+
/** Called when the project settings modal should close (e.g. overlay click or close button). */
|
|
143
|
+
onProjectSettingsModalClose?: () => void;
|
|
144
|
+
/** Renders the project settings modal content (e.g. Configuration / Other Settings / Secret tabs). Parent passes config and onChange so values update via parent (same pattern as ModelConfigPanel). */
|
|
145
|
+
projectSettingsModalRender?: ProjectSettingsModalRender | null;
|
|
109
146
|
/** Optional content in the middle when not using inputConfig */
|
|
110
147
|
children?: ReactNode;
|
|
111
148
|
/** Click on container (e.g. to focus input) */
|
|
@@ -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,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,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/InputToolBar/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@admin-layout/tailwind-ui",
|
|
3
|
-
"version": "12.2.4-alpha.
|
|
3
|
+
"version": "12.2.4-alpha.21",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -90,5 +90,5 @@
|
|
|
90
90
|
"typescript": {
|
|
91
91
|
"definition": "lib/index.d.ts"
|
|
92
92
|
},
|
|
93
|
-
"gitHead": "
|
|
93
|
+
"gitHead": "c17eccf18dc6a1f3f764c448ed2c65261dd240b8"
|
|
94
94
|
}
|