indas-ui 0.1.0 → 0.1.1
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/dist/cjs/components/chat/index.js +19 -0
- package/dist/cjs/components/chat/multimodal-input.js +3 -1
- package/dist/cjs/components/forms/date-picker/DatePicker.js +2 -2
- package/dist/cjs/components/forms/file-attachment/FileAttachment.js +1 -1
- package/dist/cjs/components/layout/index.js +3 -1
- package/dist/cjs/components/layout/sidebar.js +1 -1
- package/dist/components/chat/index.d.ts +5 -0
- package/dist/components/chat/index.js +13 -0
- package/dist/components/chat/multimodal-input.js +4 -2
- package/dist/components/forms/date-picker/DatePicker.d.ts +5 -1
- package/dist/components/forms/date-picker/DatePicker.js +2 -2
- package/dist/components/layout/index.d.ts +2 -0
- package/dist/components/layout/index.js +1 -0
- package/package.json +6 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
// Chat Components - Centralized exports
|
|
4
|
+
//
|
|
5
|
+
// Only the backend-agnostic pieces are exported. `Chat` itself is deliberately left out: it is
|
|
6
|
+
// bound to Estimo's stack (next-auth's useSession, the /api/synthia endpoints in lib/api/ai/chat,
|
|
7
|
+
// and Estimo's alert and language contexts), so a host app on a different backend cannot use it.
|
|
8
|
+
// `Messages` and `MultimodalInput` take everything they render as props and so travel anywhere.
|
|
9
|
+
//
|
|
10
|
+
// Hosts that want the full assembly compose it themselves: SidePanel (from 'indas-ui/layout') for
|
|
11
|
+
// the conversation rail, Messages for the transcript, MultimodalInput for the composer.
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.ChatPromptNavigator = exports.MultimodalInput = exports.Messages = void 0;
|
|
14
|
+
var ai_messages_1 = require("./ai-messages.js");
|
|
15
|
+
Object.defineProperty(exports, "Messages", { enumerable: true, get: function () { return ai_messages_1.Messages; } });
|
|
16
|
+
var multimodal_input_1 = require("./multimodal-input.js");
|
|
17
|
+
Object.defineProperty(exports, "MultimodalInput", { enumerable: true, get: function () { return multimodal_input_1.MultimodalInput; } });
|
|
18
|
+
var chat_prompt_navigator_1 = require("./chat-prompt-navigator.js");
|
|
19
|
+
Object.defineProperty(exports, "ChatPromptNavigator", { enumerable: true, get: function () { return chat_prompt_navigator_1.ChatPromptNavigator; } });
|
|
@@ -12,7 +12,9 @@ const lucide_react_1 = require("lucide-react");
|
|
|
12
12
|
const utils_1 = require("../../lib/utils.js");
|
|
13
13
|
const LanguageContext_1 = require("../../contexts/LanguageContext.js");
|
|
14
14
|
function MultimodalInput({ onSubmit, onStop, isLoading = false, placeholder = 'Send a message...', allowFileUpload = true, compact = false, disabled = false, disabledReason }) {
|
|
15
|
-
|
|
15
|
+
// Optional: the composer is exported for host apps that have no LanguageProvider, and falls
|
|
16
|
+
// back to the English source text rather than throwing.
|
|
17
|
+
const { t } = (0, LanguageContext_1.useOptionalLanguage)();
|
|
16
18
|
const [input, setInput] = (0, react_1.useState)('');
|
|
17
19
|
const [files, setFiles] = (0, react_1.useState)([]);
|
|
18
20
|
const [isListening, setIsListening] = (0, react_1.useState)(false);
|
|
@@ -48,7 +48,7 @@ const shared_utils_1 = require("./shared-utils.js");
|
|
|
48
48
|
// ============================================
|
|
49
49
|
// DatePicker Component (Single/Range dates without time)
|
|
50
50
|
// ============================================
|
|
51
|
-
function DatePicker({ value, onChange, mode = 'single', placeholder = 'Select date...', label, error, disabled = false, minDate, maxDate, className, showTime = false, showFromTo = false, returnFormat = 'date', inline = false, iconOnly = false, popoverAlign, presets }) {
|
|
51
|
+
function DatePicker({ id, 'aria-label': ariaLabel, value, onChange, mode = 'single', placeholder = 'Select date...', label, error, disabled = false, minDate, maxDate, className, showTime = false, showFromTo = false, returnFormat = 'date', inline = false, iconOnly = false, popoverAlign, presets }) {
|
|
52
52
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
53
53
|
const [currentMonth, setCurrentMonth] = React.useState(new Date());
|
|
54
54
|
const [secondMonth, setSecondMonth] = React.useState(() => {
|
|
@@ -703,7 +703,7 @@ function DatePicker({ value, onChange, mode = 'single', placeholder = 'Select da
|
|
|
703
703
|
? `Date filter: ${selectedRange.from ? new Date(selectedRange.from).toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' }) : ''}${selectedRange.to ? ` – ${new Date(selectedRange.to).toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' })}` : ''}`
|
|
704
704
|
: 'Select date range', children: [(0, jsx_runtime_1.jsx)(lucide_react_1.CalendarDays, { className: "h-3.5 w-3.5 flex-shrink-0" }), (0, jsx_runtime_1.jsx)("span", { className: "hidden sm:inline text-xs", children: selectedRange.from || selectedRange.to
|
|
705
705
|
? `${selectedRange.from ? new Date(selectedRange.from).toLocaleDateString('en-GB', { day: '2-digit', month: 'short' }) : ''}${selectedRange.to ? ` – ${new Date(selectedRange.to).toLocaleDateString('en-GB', { day: '2-digit', month: 'short' })}` : ''}`
|
|
706
|
-
: 'Date' }), (selectedRange.from || selectedRange.to) && ((0, jsx_runtime_1.jsx)("span", { className: "absolute -top-0.5 -right-0.5 h-1.5 w-1.5 rounded-full bg-[rgb(var(--color-primary))] ring-1 ring-[rgb(var(--bg-surface))]" }))] })) : ((0, jsx_runtime_1.jsx)("div", { className: "relative", ref: inputWrapperRef, children: (0, jsx_runtime_1.jsx)(ui_2.Input, { value: inputValue, onChange: handleInputChange, onBlur: handleInputBlur, onKeyDown: handleInputKeyDown, placeholder: getPlaceholder(), disabled: disabled, error: error, className: (0, utils_1.cn)('pl-2 pr-9 text-xs w-full', error && 'border-red-300'), onFocus: () => !disabled && setIsOpen(true), rightIcon: lucide_react_1.Calendar, onRightIconClick: () => !disabled && setIsOpen(!isOpen) }) })) }), (0, jsx_runtime_1.jsx)(Popover.Portal, { container: typeof document !== 'undefined' ? document.body : undefined, children: (0, jsx_runtime_1.jsxs)(Popover.Content, { ref: calendarRef, className: (0, utils_1.cn)("z-[300] bg-[rgb(var(--bg-surface))] rounded-xl shadow-2xl border border-[rgb(var(--bd-default))] backdrop-blur-sm", "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95", "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2", mode === 'range' ? 'w-[95vw] sm:w-auto sm:min-w-[580px] p-2' : 'w-[95vw] sm:w-auto sm:min-w-[280px] p-3', 'max-w-[calc(100vw-2rem)]'), side: "bottom", align: popoverAlign ?? (mode === 'range' ? 'end' : 'start'), sideOffset: 8, avoidCollisions: true, collisionPadding: 16, sticky: "always", onOpenAutoFocus: (e) => e.preventDefault(), onKeyDown: handleCalendarKeyDown, tabIndex: -1, onInteractOutside: (e) => {
|
|
706
|
+
: 'Date' }), (selectedRange.from || selectedRange.to) && ((0, jsx_runtime_1.jsx)("span", { className: "absolute -top-0.5 -right-0.5 h-1.5 w-1.5 rounded-full bg-[rgb(var(--color-primary))] ring-1 ring-[rgb(var(--bg-surface))]" }))] })) : ((0, jsx_runtime_1.jsx)("div", { className: "relative", ref: inputWrapperRef, onClick: (e) => e.preventDefault(), children: (0, jsx_runtime_1.jsx)(ui_2.Input, { id: id, "aria-label": ariaLabel, value: inputValue, onChange: handleInputChange, onBlur: handleInputBlur, onKeyDown: handleInputKeyDown, placeholder: getPlaceholder(), disabled: disabled, error: error, className: (0, utils_1.cn)('pl-2 pr-9 text-xs w-full', error && 'border-red-300'), onFocus: () => !disabled && setIsOpen(true), rightIcon: lucide_react_1.Calendar, onRightIconClick: () => !disabled && setIsOpen(!isOpen) }) })) }), (0, jsx_runtime_1.jsx)(Popover.Portal, { container: typeof document !== 'undefined' ? document.body : undefined, children: (0, jsx_runtime_1.jsxs)(Popover.Content, { ref: calendarRef, className: (0, utils_1.cn)("z-[300] bg-[rgb(var(--bg-surface))] rounded-xl shadow-2xl border border-[rgb(var(--bd-default))] backdrop-blur-sm", "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95", "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2", mode === 'range' ? 'w-[95vw] sm:w-auto sm:min-w-[580px] p-2' : 'w-[95vw] sm:w-auto sm:min-w-[280px] p-3', 'max-w-[calc(100vw-2rem)]'), side: "bottom", align: popoverAlign ?? (mode === 'range' ? 'end' : 'start'), sideOffset: 8, avoidCollisions: true, collisionPadding: 16, sticky: "always", onOpenAutoFocus: (e) => e.preventDefault(), onKeyDown: handleCalendarKeyDown, tabIndex: -1, onInteractOutside: (e) => {
|
|
707
707
|
// Prevent closing when interacting with nested Radix portals (like Dropdowns)
|
|
708
708
|
const target = e.target;
|
|
709
709
|
if (target?.closest('[data-radix-popper-content-wrapper]')) {
|
|
@@ -40,7 +40,7 @@ const React = __importStar(require("react"));
|
|
|
40
40
|
const react_dom_1 = require("react-dom");
|
|
41
41
|
const framer_motion_1 = require("framer-motion");
|
|
42
42
|
const react_image_crop_1 = __importStar(require("react-image-crop"));
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
const lucide_react_1 = require("lucide-react");
|
|
45
45
|
const utils_1 = require("../../../lib/utils.js");
|
|
46
46
|
const ui_1 = require("../../ui/index.js");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.FloatingActionButton = exports.Grid = exports.Page = exports.AppShell = exports.CompactFooter = exports.Footer = exports.DynamicSidebar = void 0;
|
|
4
|
+
exports.SidePanel = exports.FloatingActionButton = exports.Grid = exports.Page = exports.AppShell = exports.CompactFooter = exports.Footer = exports.DynamicSidebar = void 0;
|
|
5
5
|
// Layout Components - Centralized exports
|
|
6
6
|
var sidebar_1 = require("./sidebar.js");
|
|
7
7
|
Object.defineProperty(exports, "DynamicSidebar", { enumerable: true, get: function () { return sidebar_1.DynamicSidebar; } });
|
|
@@ -14,3 +14,5 @@ Object.defineProperty(exports, "Page", { enumerable: true, get: function () { re
|
|
|
14
14
|
Object.defineProperty(exports, "Grid", { enumerable: true, get: function () { return app_shell_1.Grid; } });
|
|
15
15
|
var floating_action_button_1 = require("./floating-action-button.js");
|
|
16
16
|
Object.defineProperty(exports, "FloatingActionButton", { enumerable: true, get: function () { return floating_action_button_1.FloatingActionButton; } });
|
|
17
|
+
var side_panel_1 = require("./side-panel.js");
|
|
18
|
+
Object.defineProperty(exports, "SidePanel", { enumerable: true, get: function () { return side_panel_1.SidePanel; } });
|
|
@@ -48,7 +48,7 @@ const useTranslation_1 = require("../../hooks/useTranslation.js");
|
|
|
48
48
|
const ui_1 = require("../ui/index.js");
|
|
49
49
|
const api_1 = require("../../lib/api/index.js");
|
|
50
50
|
const utils_2 = require("../../lib/utils.js");
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
const react_dom_1 = require("react-dom");
|
|
53
53
|
const SidebarContextMenu_1 = require("./SidebarContextMenu.js");
|
|
54
54
|
const SidebarPreferencesContext_1 = require("../../contexts/SidebarPreferencesContext.js");
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { Messages } from './ai-messages.js';
|
|
2
|
+
export type { SelectableItem } from './ai-messages.js';
|
|
3
|
+
export { MultimodalInput } from './multimodal-input.js';
|
|
4
|
+
export { ChatPromptNavigator } from './chat-prompt-navigator.js';
|
|
5
|
+
export type { Message, Conversation, UIDataEntry, UIDataItem, TokenUsage } from '../../lib/api/ai/types.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
// Chat Components - Centralized exports
|
|
3
|
+
//
|
|
4
|
+
// Only the backend-agnostic pieces are exported. `Chat` itself is deliberately left out: it is
|
|
5
|
+
// bound to Estimo's stack (next-auth's useSession, the /api/synthia endpoints in lib/api/ai/chat,
|
|
6
|
+
// and Estimo's alert and language contexts), so a host app on a different backend cannot use it.
|
|
7
|
+
// `Messages` and `MultimodalInput` take everything they render as props and so travel anywhere.
|
|
8
|
+
//
|
|
9
|
+
// Hosts that want the full assembly compose it themselves: SidePanel (from 'indas-ui/layout') for
|
|
10
|
+
// the conversation rail, Messages for the transcript, MultimodalInput for the composer.
|
|
11
|
+
export { Messages } from './ai-messages.js';
|
|
12
|
+
export { MultimodalInput } from './multimodal-input.js';
|
|
13
|
+
export { ChatPromptNavigator } from './chat-prompt-navigator.js';
|
|
@@ -7,9 +7,11 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
7
7
|
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
8
8
|
import { Send, Paperclip, Mic, MicOff, X, FileIcon, Image as ImageIcon } from 'lucide-react';
|
|
9
9
|
import { cn } from '../../lib/utils.js';
|
|
10
|
-
import {
|
|
10
|
+
import { useOptionalLanguage } from '../../contexts/LanguageContext.js';
|
|
11
11
|
export function MultimodalInput({ onSubmit, onStop, isLoading = false, placeholder = 'Send a message...', allowFileUpload = true, compact = false, disabled = false, disabledReason }) {
|
|
12
|
-
|
|
12
|
+
// Optional: the composer is exported for host apps that have no LanguageProvider, and falls
|
|
13
|
+
// back to the English source text rather than throwing.
|
|
14
|
+
const { t } = useOptionalLanguage();
|
|
13
15
|
const [input, setInput] = useState('');
|
|
14
16
|
const [files, setFiles] = useState([]);
|
|
15
17
|
const [isListening, setIsListening] = useState(false);
|
|
@@ -4,6 +4,10 @@ export interface DateRange {
|
|
|
4
4
|
to?: Date;
|
|
5
5
|
}
|
|
6
6
|
export interface DatePickerProps {
|
|
7
|
+
/** Forwarded to the text input so a <label htmlFor> can target it. */
|
|
8
|
+
id?: string;
|
|
9
|
+
/** Accessible name for the input when no visible label is rendered. */
|
|
10
|
+
'aria-label'?: string;
|
|
7
11
|
value?: Date | DateRange | string;
|
|
8
12
|
onChange?: (date: Date | DateRange | string | undefined) => void;
|
|
9
13
|
mode?: 'single' | 'range';
|
|
@@ -28,4 +32,4 @@ export interface DatePickerProps {
|
|
|
28
32
|
value: Date | DateRange;
|
|
29
33
|
}>;
|
|
30
34
|
}
|
|
31
|
-
export declare function DatePicker({ value, onChange, mode, placeholder, label, error, disabled, minDate, maxDate, className, showTime, showFromTo, returnFormat, inline, iconOnly, popoverAlign, presets }: DatePickerProps): React.JSX.Element;
|
|
35
|
+
export declare function DatePicker({ id, 'aria-label': ariaLabel, value, onChange, mode, placeholder, label, error, disabled, minDate, maxDate, className, showTime, showFromTo, returnFormat, inline, iconOnly, popoverAlign, presets }: DatePickerProps): React.JSX.Element;
|
|
@@ -12,7 +12,7 @@ import { MONTHS, WEEKDAYS, PERIOD_OPTIONS, TIME_OPTIONS, getDaysInMonth, getFirs
|
|
|
12
12
|
// ============================================
|
|
13
13
|
// DatePicker Component (Single/Range dates without time)
|
|
14
14
|
// ============================================
|
|
15
|
-
export function DatePicker({ value, onChange, mode = 'single', placeholder = 'Select date...', label, error, disabled = false, minDate, maxDate, className, showTime = false, showFromTo = false, returnFormat = 'date', inline = false, iconOnly = false, popoverAlign, presets }) {
|
|
15
|
+
export function DatePicker({ id, 'aria-label': ariaLabel, value, onChange, mode = 'single', placeholder = 'Select date...', label, error, disabled = false, minDate, maxDate, className, showTime = false, showFromTo = false, returnFormat = 'date', inline = false, iconOnly = false, popoverAlign, presets }) {
|
|
16
16
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
17
17
|
const [currentMonth, setCurrentMonth] = React.useState(new Date());
|
|
18
18
|
const [secondMonth, setSecondMonth] = React.useState(() => {
|
|
@@ -667,7 +667,7 @@ export function DatePicker({ value, onChange, mode = 'single', placeholder = 'Se
|
|
|
667
667
|
? `Date filter: ${selectedRange.from ? new Date(selectedRange.from).toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' }) : ''}${selectedRange.to ? ` – ${new Date(selectedRange.to).toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' })}` : ''}`
|
|
668
668
|
: 'Select date range', children: [_jsx(CalendarDays, { className: "h-3.5 w-3.5 flex-shrink-0" }), _jsx("span", { className: "hidden sm:inline text-xs", children: selectedRange.from || selectedRange.to
|
|
669
669
|
? `${selectedRange.from ? new Date(selectedRange.from).toLocaleDateString('en-GB', { day: '2-digit', month: 'short' }) : ''}${selectedRange.to ? ` – ${new Date(selectedRange.to).toLocaleDateString('en-GB', { day: '2-digit', month: 'short' })}` : ''}`
|
|
670
|
-
: 'Date' }), (selectedRange.from || selectedRange.to) && (_jsx("span", { className: "absolute -top-0.5 -right-0.5 h-1.5 w-1.5 rounded-full bg-[rgb(var(--color-primary))] ring-1 ring-[rgb(var(--bg-surface))]" }))] })) : (_jsx("div", { className: "relative", ref: inputWrapperRef, children: _jsx(Input, { value: inputValue, onChange: handleInputChange, onBlur: handleInputBlur, onKeyDown: handleInputKeyDown, placeholder: getPlaceholder(), disabled: disabled, error: error, className: cn('pl-2 pr-9 text-xs w-full', error && 'border-red-300'), onFocus: () => !disabled && setIsOpen(true), rightIcon: Calendar, onRightIconClick: () => !disabled && setIsOpen(!isOpen) }) })) }), _jsx(Popover.Portal, { container: typeof document !== 'undefined' ? document.body : undefined, children: _jsxs(Popover.Content, { ref: calendarRef, className: cn("z-[300] bg-[rgb(var(--bg-surface))] rounded-xl shadow-2xl border border-[rgb(var(--bd-default))] backdrop-blur-sm", "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95", "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2", mode === 'range' ? 'w-[95vw] sm:w-auto sm:min-w-[580px] p-2' : 'w-[95vw] sm:w-auto sm:min-w-[280px] p-3', 'max-w-[calc(100vw-2rem)]'), side: "bottom", align: popoverAlign ?? (mode === 'range' ? 'end' : 'start'), sideOffset: 8, avoidCollisions: true, collisionPadding: 16, sticky: "always", onOpenAutoFocus: (e) => e.preventDefault(), onKeyDown: handleCalendarKeyDown, tabIndex: -1, onInteractOutside: (e) => {
|
|
670
|
+
: 'Date' }), (selectedRange.from || selectedRange.to) && (_jsx("span", { className: "absolute -top-0.5 -right-0.5 h-1.5 w-1.5 rounded-full bg-[rgb(var(--color-primary))] ring-1 ring-[rgb(var(--bg-surface))]" }))] })) : (_jsx("div", { className: "relative", ref: inputWrapperRef, onClick: (e) => e.preventDefault(), children: _jsx(Input, { id: id, "aria-label": ariaLabel, value: inputValue, onChange: handleInputChange, onBlur: handleInputBlur, onKeyDown: handleInputKeyDown, placeholder: getPlaceholder(), disabled: disabled, error: error, className: cn('pl-2 pr-9 text-xs w-full', error && 'border-red-300'), onFocus: () => !disabled && setIsOpen(true), rightIcon: Calendar, onRightIconClick: () => !disabled && setIsOpen(!isOpen) }) })) }), _jsx(Popover.Portal, { container: typeof document !== 'undefined' ? document.body : undefined, children: _jsxs(Popover.Content, { ref: calendarRef, className: cn("z-[300] bg-[rgb(var(--bg-surface))] rounded-xl shadow-2xl border border-[rgb(var(--bd-default))] backdrop-blur-sm", "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95", "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2", mode === 'range' ? 'w-[95vw] sm:w-auto sm:min-w-[580px] p-2' : 'w-[95vw] sm:w-auto sm:min-w-[280px] p-3', 'max-w-[calc(100vw-2rem)]'), side: "bottom", align: popoverAlign ?? (mode === 'range' ? 'end' : 'start'), sideOffset: 8, avoidCollisions: true, collisionPadding: 16, sticky: "always", onOpenAutoFocus: (e) => e.preventDefault(), onKeyDown: handleCalendarKeyDown, tabIndex: -1, onInteractOutside: (e) => {
|
|
671
671
|
// Prevent closing when interacting with nested Radix portals (like Dropdowns)
|
|
672
672
|
const target = e.target;
|
|
673
673
|
if (target?.closest('[data-radix-popper-content-wrapper]')) {
|
|
@@ -6,3 +6,5 @@ export { AppShell, Page, Grid } from './app-shell.js';
|
|
|
6
6
|
export type { AppShellProps, PageProps, GridProps } from './app-shell.js';
|
|
7
7
|
export { FloatingActionButton } from './floating-action-button.js';
|
|
8
8
|
export type { FABAction } from './floating-action-button.js';
|
|
9
|
+
export { SidePanel } from './side-panel.js';
|
|
10
|
+
export type { SidePanelProps, SidePanelCategory, SidePanelItem } from './side-panel.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "indas-ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Indas UI — React component library for business apps: Tailwind design tokens, Radix primitives, Lucide icons, DataGrid, dashboards and charts.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Indas Analytics Pvt Ltd",
|
|
@@ -64,6 +64,11 @@
|
|
|
64
64
|
"import": "./dist/components/forms/index.js",
|
|
65
65
|
"require": "./dist/cjs/components/forms/index.js"
|
|
66
66
|
},
|
|
67
|
+
"./chat": {
|
|
68
|
+
"types": "./dist/components/chat/index.d.ts",
|
|
69
|
+
"import": "./dist/components/chat/index.js",
|
|
70
|
+
"require": "./dist/cjs/components/chat/index.js"
|
|
71
|
+
},
|
|
67
72
|
"./providers": {
|
|
68
73
|
"types": "./dist/providers.d.ts",
|
|
69
74
|
"import": "./dist/providers.js",
|