diff --git a/packages/components/src/__tests__/complex-disclosure-renderers.test.tsx b/packages/components/src/__tests__/complex-disclosure-renderers.test.tsx index 5c483111..9db428fa 100644 --- a/packages/components/src/__tests__/complex-disclosure-renderers.test.tsx +++ b/packages/components/src/__tests__/complex-disclosure-renderers.test.tsx @@ -101,45 +101,6 @@ describe('Disclosure Renderers - Display Issue Detection', () => { * Comprehensive tests for complex renderer components */ describe('Complex Renderers - Display Issue Detection', () => { - describe('Timeline Renderer', () => { - it('should be properly registered', () => { - const validation = validateComponentRegistration('timeline'); - expect(validation.isRegistered).toBe(true); - }); - - it('should render timeline with events', () => { - const { container } = renderComponent({ - type: 'timeline', - items: [ - { - title: 'Event 1', - description: 'Description 1', - time: '2024-01-01', - }, - { - title: 'Event 2', - description: 'Description 2', - time: '2024-01-02', - }, - ], - }); - - expect(container.textContent).toContain('Event 1'); - expect(container.textContent).toContain('Event 2'); - }); - - it('should handle empty timeline', () => { - const { container } = renderComponent({ - type: 'timeline', - items: [], - }); - - const domCheck = checkDOMStructure(container); - // Empty timeline is acceptable - expect(domCheck).toBeDefined(); - }); - }); - describe('Data Table Renderer', () => { it('should be properly registered', () => { const validation = validateComponentRegistration('data-table'); @@ -188,36 +149,6 @@ describe('Complex Renderers - Display Issue Detection', () => { }); }); - describe('Chatbot Renderer', () => { - it('should be properly registered', () => { - const validation = validateComponentRegistration('chatbot'); - expect(validation.isRegistered).toBe(true); - }); - - it('should render chatbot interface', () => { - const { container } = renderComponent({ - type: 'chatbot', - messages: [ - { role: 'user', content: 'Hello' }, - { role: 'assistant', content: 'Hi there!' }, - ], - }); - - expect(container.textContent).toContain('Hello'); - expect(container.textContent).toContain('Hi there!'); - }); - - it('should handle empty messages', () => { - const { container } = renderComponent({ - type: 'chatbot', - messages: [], - }); - - const domCheck = checkDOMStructure(container); - expect(domCheck).toBeDefined(); - }); - }); - describe('Carousel Renderer', () => { it('should be properly registered', () => { const validation = validateComponentRegistration('carousel'); diff --git a/packages/components/src/new-components.test.ts b/packages/components/src/new-components.test.ts index 11d46251..b0e6ef28 100644 --- a/packages/components/src/new-components.test.ts +++ b/packages/components/src/new-components.test.ts @@ -70,13 +70,4 @@ describe('New Components Registration', () => { expect(component?.label).toBe('Loading'); }); }); - - describe('Complex Components', () => { - it('should register timeline component', () => { - const component = ComponentRegistry.getConfig('timeline'); - expect(component).toBeDefined(); - expect(component?.label).toBe('Timeline'); - expect(component?.category).toBe('data-display'); - }); - }); }); diff --git a/packages/components/src/renderers/complex/chatbot.test.ts b/packages/components/src/renderers/complex/chatbot.test.ts deleted file mode 100644 index 37f7aa3a..00000000 --- a/packages/components/src/renderers/complex/chatbot.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -/** - * ObjectUI - * Copyright (c) 2024-present ObjectStack Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -import { describe, it, expect, beforeAll } from 'vitest'; -import { ComponentRegistry } from '@object-ui/core'; - -describe('Chatbot Component', () => { - // Import all renderers to register them - beforeAll(async () => { - await import('./index'); - }); - - it('should be registered in ComponentRegistry', () => { - const chatbotRenderer = ComponentRegistry.get('chatbot'); - expect(chatbotRenderer).toBeDefined(); - }); - - it('should have proper metadata', () => { - const config = ComponentRegistry.getConfig('chatbot'); - expect(config).toBeDefined(); - expect(config?.label).toBe('Chatbot'); - expect(config?.inputs).toBeDefined(); - expect(config?.defaultProps).toBeDefined(); - }); - - it('should have expected inputs', () => { - const config = ComponentRegistry.getConfig('chatbot'); - const inputNames = config?.inputs?.map((input: any) => input.name) || []; - - expect(inputNames).toContain('messages'); - expect(inputNames).toContain('placeholder'); - expect(inputNames).toContain('showTimestamp'); - expect(inputNames).toContain('userAvatarUrl'); - expect(inputNames).toContain('assistantAvatarUrl'); - }); - - it('should have sensible default props', () => { - const config = ComponentRegistry.getConfig('chatbot'); - const defaults = config?.defaultProps; - - expect(defaults).toBeDefined(); - expect(defaults?.placeholder).toBe('Type your message...'); - expect(defaults?.showTimestamp).toBe(false); - expect(defaults?.messages).toBeDefined(); - expect(Array.isArray(defaults?.messages)).toBe(true); - }); -}); diff --git a/packages/components/src/renderers/complex/index.ts b/packages/components/src/renderers/complex/index.ts index 1219aa08..5f6e6eac 100644 --- a/packages/components/src/renderers/complex/index.ts +++ b/packages/components/src/renderers/complex/index.ts @@ -12,7 +12,6 @@ import './filter-builder'; import './scroll-area'; import './resizable'; import './table'; -import './chatbot'; import './data-table'; -import './timeline'; + diff --git a/packages/components/src/ui/index.ts b/packages/components/src/ui/index.ts index 7ae8593a..d944826a 100644 --- a/packages/components/src/ui/index.ts +++ b/packages/components/src/ui/index.ts @@ -19,7 +19,6 @@ export * from './calendar'; export * from './calendar-view'; export * from './card'; export * from './carousel'; -export * from './chatbot'; export * from './checkbox'; export * from './collapsible'; export * from './combobox'; @@ -60,7 +59,6 @@ export * from './switch'; export * from './table'; export * from './tabs'; export * from './textarea'; -export * from './timeline'; export * from './toast'; export { Toaster as ToastNotifier } from './toaster'; export * from './toggle-group'; diff --git a/packages/plugin-chatbot/README.md b/packages/plugin-chatbot/README.md new file mode 100644 index 00000000..0f76636b --- /dev/null +++ b/packages/plugin-chatbot/README.md @@ -0,0 +1,63 @@ +# @object-ui/plugin-chatbot + +Chatbot interface plugin for Object UI. + +## Installation + +```bash +npm install @object-ui/plugin-chatbot +``` + +## Usage + +```tsx +import { Chatbot } from '@object-ui/plugin-chatbot'; + +function App() { + const [messages, setMessages] = useState([ + { + id: '1', + role: 'assistant', + content: 'Hello! How can I help you today?' + } + ]); + + const handleSend = (content: string) => { + const newMessage = { + id: Date.now().toString(), + role: 'user', + content + }; + setMessages([...messages, newMessage]); + }; + + return ( + + ); +} +``` + +## Schema-Driven Usage + +This plugin automatically registers with ObjectUI's component registry when imported: + +```tsx +import '@object-ui/plugin-chatbot'; + +const schema = { + component: 'chatbot', + messages: [ + { id: '1', role: 'assistant', content: 'Hello!' } + ], + placeholder: 'Type your message...', + autoResponse: true +}; +``` + +## License + +MIT © ObjectStack Inc. diff --git a/packages/plugin-chatbot/package.json b/packages/plugin-chatbot/package.json new file mode 100644 index 00000000..219bf06d --- /dev/null +++ b/packages/plugin-chatbot/package.json @@ -0,0 +1,52 @@ +{ + "name": "@object-ui/plugin-chatbot", + "version": "0.3.0", + "type": "module", + "license": "MIT", + "description": "Chatbot interface plugin for Object UI", + "homepage": "https://www.objectui.org", + "repository": { + "type": "git", + "url": "https://github.com/objectstack-ai/objectui.git", + "directory": "packages/plugin-chatbot" + }, + "bugs": { + "url": "https://github.com/objectstack-ai/objectui/issues" + }, + "main": "dist/index.umd.cjs", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.umd.cjs" + } + }, + "scripts": { + "build": "vite build", + "test": "vitest run", + "test:watch": "vitest", + "type-check": "tsc --noEmit", + "lint": "eslint ." + }, + "dependencies": { + "@object-ui/components": "workspace:*", + "@object-ui/core": "workspace:*", + "@object-ui/react": "workspace:*", + "@object-ui/types": "workspace:*", + "lucide-react": "^0.468.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "devDependencies": { + "@types/react": "^19.0.6", + "@types/react-dom": "^19.0.3", + "@vitejs/plugin-react": "^4.2.1", + "typescript": "^5.9.3", + "vite": "^7.3.1", + "vite-plugin-dts": "^4.5.4" + } +} diff --git a/packages/components/src/ui/chatbot.tsx b/packages/plugin-chatbot/src/index.tsx similarity index 96% rename from packages/components/src/ui/chatbot.tsx rename to packages/plugin-chatbot/src/index.tsx index cc58c879..7b4daeaf 100644 --- a/packages/components/src/ui/chatbot.tsx +++ b/packages/plugin-chatbot/src/index.tsx @@ -7,11 +7,8 @@ */ import * as React from "react" -import { cn } from "../lib/utils" -import { Button } from "./button" -import { Input } from "./input" -import { ScrollArea } from "./scroll-area" -import { Avatar, AvatarFallback, AvatarImage } from "./avatar" +import { cn } from "@object-ui/components" +import { Button, Input, ScrollArea, Avatar, AvatarFallback, AvatarImage } from "@object-ui/components" import { Send } from "lucide-react" // Message type definition @@ -246,3 +243,6 @@ const TypingIndicator = React.forwardRef( TypingIndicator.displayName = "TypingIndicator" export { Chatbot, TypingIndicator } + +// Export renderer to register the component with ObjectUI +export * from './renderer'; diff --git a/packages/components/src/renderers/complex/chatbot.tsx b/packages/plugin-chatbot/src/renderer.tsx similarity index 96% rename from packages/components/src/renderers/complex/chatbot.tsx rename to packages/plugin-chatbot/src/renderer.tsx index 03d0550c..989725ce 100644 --- a/packages/components/src/renderers/complex/chatbot.tsx +++ b/packages/plugin-chatbot/src/renderer.tsx @@ -8,7 +8,7 @@ import { ComponentRegistry } from '@object-ui/core'; import type { ChatbotSchema, ChatMessage } from '@object-ui/types'; -import { Chatbot } from '../../ui'; +import { Chatbot } from './index'; import { useState } from 'react'; /** @@ -41,7 +41,7 @@ ComponentRegistry.register('chatbot', const handleSendMessage = (content: string) => { // Create user message with robust ID generation const userMessage: ChatMessage = { - id: crypto.randomUUID(), + id: crypto?.randomUUID?.() || `msg-${Date.now()}-${Math.random().toString(36).slice(2)}`, role: 'user', content, timestamp: schema.showTimestamp ? new Date().toLocaleTimeString() : undefined, @@ -59,7 +59,7 @@ ComponentRegistry.register('chatbot', if (schema.autoResponse) { setTimeout(() => { const assistantMessage: ChatMessage = { - id: crypto.randomUUID(), + id: crypto?.randomUUID?.() || `msg-${Date.now()}-${Math.random().toString(36).slice(2)}`, role: 'assistant', content: schema.autoResponseText || 'Thank you for your message!', timestamp: schema.showTimestamp ? new Date().toLocaleTimeString() : undefined, diff --git a/packages/plugin-chatbot/tsconfig.json b/packages/plugin-chatbot/tsconfig.json new file mode 100644 index 00000000..22195355 --- /dev/null +++ b/packages/plugin-chatbot/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "jsx": "react-jsx", + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + }, + "noEmit": false, + "declaration": true, + "composite": true, + "declarationMap": true, + "skipLibCheck": true + }, + "include": ["src"], + "exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.test.tsx"] +} diff --git a/packages/plugin-chatbot/vite.config.ts b/packages/plugin-chatbot/vite.config.ts new file mode 100644 index 00000000..2fc9f061 --- /dev/null +++ b/packages/plugin-chatbot/vite.config.ts @@ -0,0 +1,49 @@ +/** + * ObjectUI + * Copyright (c) 2024-present ObjectStack Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import dts from 'vite-plugin-dts'; +import { resolve } from 'path'; + +export default defineConfig({ + plugins: [ + react(), + dts({ + insertTypesEntry: true, + include: ['src'], + exclude: ['**/*.test.ts', '**/*.test.tsx', 'node_modules'], + skipDiagnostics: true, + }), + ], + resolve: { + alias: { + '@': resolve(__dirname, './src'), + }, + }, + build: { + lib: { + entry: resolve(__dirname, 'src/index.tsx'), + name: 'ObjectUIPluginChatbot', + fileName: 'index', + }, + rollupOptions: { + external: ['react', 'react-dom', '@object-ui/components', '@object-ui/core', '@object-ui/react', 'lucide-react'], + output: { + globals: { + react: 'React', + 'react-dom': 'ReactDOM', + '@object-ui/components': 'ObjectUIComponents', + '@object-ui/core': 'ObjectUICore', + '@object-ui/react': 'ObjectUIReact', + 'lucide-react': 'LucideReact', + }, + }, + }, + }, +}); diff --git a/packages/plugin-timeline/README.md b/packages/plugin-timeline/README.md new file mode 100644 index 00000000..9da4081b --- /dev/null +++ b/packages/plugin-timeline/README.md @@ -0,0 +1,80 @@ +# @object-ui/plugin-timeline + +Timeline component plugin for Object UI with support for vertical, horizontal, and Gantt-style timelines. + +## Installation + +```bash +npm install @object-ui/plugin-timeline +``` + +## Usage + +### Vertical Timeline + +```tsx +import { + Timeline, + TimelineItem, + TimelineMarker, + TimelineContent, + TimelineTitle, + TimelineTime, + TimelineDescription +} from '@object-ui/plugin-timeline'; + +function App() { + return ( + + + + + 2024-01-15 + Project Started + + Kickoff meeting and initial planning + + + + + ); +} +``` + +### Gantt Timeline + +```tsx +import { + TimelineGantt, + TimelineGanttHeader, + TimelineGanttRow, + TimelineGanttBar +} from '@object-ui/plugin-timeline'; + +// See examples in the source code for Gantt usage +``` + +## Schema-Driven Usage + +This plugin automatically registers with ObjectUI's component registry when imported: + +```tsx +import '@object-ui/plugin-timeline'; + +const schema = { + component: 'timeline', + variant: 'vertical', + items: [ + { + time: '2024-01-15', + title: 'Project Started', + description: 'Kickoff meeting', + variant: 'success' + } + ] +}; +``` + +## License + +MIT © ObjectStack Inc. diff --git a/packages/plugin-timeline/package.json b/packages/plugin-timeline/package.json new file mode 100644 index 00000000..d8b125a7 --- /dev/null +++ b/packages/plugin-timeline/package.json @@ -0,0 +1,51 @@ +{ + "name": "@object-ui/plugin-timeline", + "version": "0.3.0", + "type": "module", + "license": "MIT", + "description": "Timeline component plugin for Object UI", + "homepage": "https://www.objectui.org", + "repository": { + "type": "git", + "url": "https://github.com/objectstack-ai/objectui.git", + "directory": "packages/plugin-timeline" + }, + "bugs": { + "url": "https://github.com/objectstack-ai/objectui/issues" + }, + "main": "dist/index.umd.cjs", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.umd.cjs" + } + }, + "scripts": { + "build": "vite build", + "test": "vitest run", + "test:watch": "vitest", + "type-check": "tsc --noEmit", + "lint": "eslint ." + }, + "dependencies": { + "@object-ui/components": "workspace:*", + "@object-ui/core": "workspace:*", + "@object-ui/react": "workspace:*", + "@object-ui/types": "workspace:*" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "devDependencies": { + "@types/react": "^19.0.6", + "@types/react-dom": "^19.0.3", + "@vitejs/plugin-react": "^4.2.1", + "typescript": "^5.9.3", + "vite": "^7.3.1", + "vite-plugin-dts": "^4.5.4" + } +} diff --git a/packages/components/src/ui/timeline.tsx b/packages/plugin-timeline/src/index.tsx similarity index 98% rename from packages/components/src/ui/timeline.tsx rename to packages/plugin-timeline/src/index.tsx index 38aa846b..9e8f5c53 100644 --- a/packages/components/src/ui/timeline.tsx +++ b/packages/plugin-timeline/src/index.tsx @@ -7,7 +7,7 @@ */ import * as React from "react" -import { cn } from "../lib/utils" +import { cn } from "@object-ui/components" const Timeline = React.forwardRef< HTMLOListElement, @@ -272,3 +272,6 @@ export { TimelineGanttBar, TimelineGanttBarContent, } + +// Export renderer to register the component with ObjectUI +export * from './renderer'; diff --git a/packages/components/src/renderers/complex/timeline.tsx b/packages/plugin-timeline/src/renderer.tsx similarity index 99% rename from packages/components/src/renderers/complex/timeline.tsx rename to packages/plugin-timeline/src/renderer.tsx index 756a1d6f..813c382c 100644 --- a/packages/components/src/renderers/complex/timeline.tsx +++ b/packages/plugin-timeline/src/renderer.tsx @@ -26,8 +26,8 @@ import { TimelineGanttLabel, TimelineGanttBar, TimelineGanttBarContent, -} from '../../ui'; -import { renderChildren } from '../../lib/utils'; +} from './index'; +import { renderChildren } from '@object-ui/components'; // Constants const MILLISECONDS_PER_WEEK = 7 * 24 * 60 * 60 * 1000; diff --git a/packages/plugin-timeline/tsconfig.json b/packages/plugin-timeline/tsconfig.json new file mode 100644 index 00000000..22195355 --- /dev/null +++ b/packages/plugin-timeline/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "jsx": "react-jsx", + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + }, + "noEmit": false, + "declaration": true, + "composite": true, + "declarationMap": true, + "skipLibCheck": true + }, + "include": ["src"], + "exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.test.tsx"] +} diff --git a/packages/plugin-timeline/vite.config.ts b/packages/plugin-timeline/vite.config.ts new file mode 100644 index 00000000..b2a0cd66 --- /dev/null +++ b/packages/plugin-timeline/vite.config.ts @@ -0,0 +1,48 @@ +/** + * ObjectUI + * Copyright (c) 2024-present ObjectStack Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +import dts from 'vite-plugin-dts'; +import { resolve } from 'path'; + +export default defineConfig({ + plugins: [ + react(), + dts({ + insertTypesEntry: true, + include: ['src'], + exclude: ['**/*.test.ts', '**/*.test.tsx', 'node_modules'], + skipDiagnostics: true, + }), + ], + resolve: { + alias: { + '@': resolve(__dirname, './src'), + }, + }, + build: { + lib: { + entry: resolve(__dirname, 'src/index.tsx'), + name: 'ObjectUIPluginTimeline', + fileName: 'index', + }, + rollupOptions: { + external: ['react', 'react-dom', '@object-ui/components', '@object-ui/core', '@object-ui/react'], + output: { + globals: { + react: 'React', + 'react-dom': 'ReactDOM', + '@object-ui/components': 'ObjectUIComponents', + '@object-ui/core': 'ObjectUICore', + '@object-ui/react': 'ObjectUIReact', + }, + }, + }, + }, +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 370ca8a6..4cbf5992 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -532,6 +532,49 @@ importers: specifier: ^4.5.4 version: 4.5.4(@types/node@25.0.10)(rollup@4.55.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) + packages/plugin-chatbot: + dependencies: + '@object-ui/components': + specifier: workspace:* + version: link:../components + '@object-ui/core': + specifier: workspace:* + version: link:../core + '@object-ui/react': + specifier: workspace:* + version: link:../react + '@object-ui/types': + specifier: workspace:* + version: link:../types + lucide-react: + specifier: ^0.468.0 + version: 0.468.0(react@19.2.3) + react: + specifier: 19.2.3 + version: 19.2.3 + react-dom: + specifier: 19.2.3 + version: 19.2.3(react@19.2.3) + devDependencies: + '@types/react': + specifier: 19.0.6 + version: 19.0.6 + '@types/react-dom': + specifier: 19.0.3 + version: 19.0.3(@types/react@19.0.6) + '@vitejs/plugin-react': + specifier: ^4.2.1 + version: 4.7.0(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vite: + specifier: ^7.3.1 + version: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) + vite-plugin-dts: + specifier: ^4.5.4 + version: 4.5.4(@types/node@25.0.10)(rollup@4.55.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) + packages/plugin-editor: dependencies: '@monaco-editor/react': @@ -673,6 +716,46 @@ importers: specifier: ^4.5.4 version: 4.5.4(@types/node@25.0.10)(rollup@4.55.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) + packages/plugin-timeline: + dependencies: + '@object-ui/components': + specifier: workspace:* + version: link:../components + '@object-ui/core': + specifier: workspace:* + version: link:../core + '@object-ui/react': + specifier: workspace:* + version: link:../react + '@object-ui/types': + specifier: workspace:* + version: link:../types + react: + specifier: 19.2.3 + version: 19.2.3 + react-dom: + specifier: 19.2.3 + version: 19.2.3(react@19.2.3) + devDependencies: + '@types/react': + specifier: 19.0.6 + version: 19.0.6 + '@types/react-dom': + specifier: 19.0.3 + version: 19.0.3(@types/react@19.0.6) + '@vitejs/plugin-react': + specifier: ^4.2.1 + version: 4.7.0(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vite: + specifier: ^7.3.1 + version: 7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2) + vite-plugin-dts: + specifier: ^4.5.4 + version: 4.5.4(@types/node@25.0.10)(rollup@4.55.1)(typescript@5.9.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) + packages/react: dependencies: '@object-ui/core': @@ -4701,6 +4784,11 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + lucide-react@0.468.0: + resolution: {integrity: sha512-6koYRhnM2N0GGZIdXzSeiNwguv1gt/FAjZOiPl76roBi3xKEXa4WmfpxgQwTTL4KipXjefrnf3oV4IsYhi4JFA==} + peerDependencies: + react: 19.2.3 + lucide-react@0.562.0: resolution: {integrity: sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==} peerDependencies: @@ -10499,6 +10587,10 @@ snapshots: dependencies: yallist: 4.0.0 + lucide-react@0.468.0(react@19.2.3): + dependencies: + react: 19.2.3 + lucide-react@0.562.0(react@19.2.3): dependencies: react: 19.2.3