From e2c91d4103a11ebed9fff058c9c3d9daea90dbc7 Mon Sep 17 00:00:00 2001 From: Richard Ward Date: Wed, 31 Dec 2025 02:07:14 +0000 Subject: [PATCH] config: packages,metadata,json (23 files) --- packages/code_editor/seed/metadata.json | 144 +++--- packages/codegen_studio/seed/metadata.json | 160 +++--- packages/config_summary/seed/metadata.json | 122 ++--- packages/dbal_demo/seed/metadata.json | 223 ++++----- packages/github_tools/seed/metadata.json | 124 ++--- packages/lua_test/seed/metadata.json | 100 ++-- packages/media_center/seed/metadata.json | 464 +++++++++--------- .../notification_center/seed/metadata.json | 152 +++--- packages/package_validator/seed/metadata.json | 156 +++--- packages/quick_guide/seed/metadata.json | 114 ++--- packages/role_editor/seed/metadata.json | 146 +++--- packages/schema_editor/seed/metadata.json | 154 +++--- .../screenshot_analyzer/seed/metadata.json | 162 +++--- packages/smtp_config/seed/metadata.json | 130 ++--- packages/stats_grid/seed/metadata.json | 122 ++--- packages/ui_auth/seed/metadata.json | 126 ++--- packages/ui_dialogs/seed/metadata.json | 132 ++--- packages/ui_intro/seed/metadata.json | 112 ++--- packages/ui_level6/seed/metadata.json | 166 +++---- packages/ui_login/seed/metadata.json | 130 ++--- packages/ui_permissions/seed/metadata.json | 114 ++--- packages/user_manager/seed/metadata.json | 158 +++--- packages/workflow_editor/seed/metadata.json | 154 +++--- 23 files changed, 1804 insertions(+), 1761 deletions(-) diff --git a/packages/code_editor/seed/metadata.json b/packages/code_editor/seed/metadata.json index 825c0a7c8..3a39612a2 100644 --- a/packages/code_editor/seed/metadata.json +++ b/packages/code_editor/seed/metadata.json @@ -1,71 +1,73 @@ -{ - "packageId": "code_editor", - "name": "Code Editor", - "version": "1.0.0", - "description": "Code editor components for JSON, Lua, and themes", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "editors", - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "scripts": [ - "json", - "lua", - "theme" - ], - "components": [ - "CodeEditor", - "JsonEditor", - "LuaEditor", - "ThemeEditor" - ] - }, - "tests": { - "scripts": [ - "tests/metadata.test.lua", - "tests/components.test.lua", - "tests/editor.test.lua", - "tests/theme.test.lua", - "tests/json.test.lua", - "tests/lua.test.lua", - "tests/init.test.lua" - ], - "cases": [ - "tests/editor.cases.json" - ] - }, - "minLevel": 5, - "primary": false, - "permissions": { - "editor.theme.apply": { - "minLevel": 5, - "description": "Apply editor themes" - }, - "editor.code.edit": { - "minLevel": 5, - "description": "Edit code in editor" - }, - "editor.code.view": { - "minLevel": 5, - "description": "View code in editor" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "code_editor", + "name": "Code Editor", + "version": "1.0.0", + "description": "Code editor components for JSON, Lua, and themes", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "editors", + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "scripts": [ + "json", + "lua", + "theme" + ], + "components": [ + "CodeEditor", + "JsonEditor", + "LuaEditor", + "ThemeEditor" + ] + }, + "tests": { + "scripts": [ + "tests/metadata.test.lua", + "tests/components.test.lua", + "tests/editor.test.lua", + "tests/theme.test.lua", + "tests/json.test.lua", + "tests/lua.test.lua", + "tests/init.test.lua" + ], + "cases": [ + "tests/editor.cases.json" + ] + }, + "minLevel": 5, + "primary": false, + "permissions": { + "editor.theme.apply": { + "minLevel": 5, + "description": "Apply editor themes" + }, + "editor.code.edit": { + "minLevel": 5, + "description": "Edit code in editor" + }, + "editor.code.view": { + "minLevel": 5, + "description": "View code in editor", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Code_Editor", + "render": "json" + } + ] + } +} diff --git a/packages/codegen_studio/seed/metadata.json b/packages/codegen_studio/seed/metadata.json index 0df4fc8f7..596e54ea9 100644 --- a/packages/codegen_studio/seed/metadata.json +++ b/packages/codegen_studio/seed/metadata.json @@ -1,79 +1,81 @@ -{ - "packageId": "codegen_studio", - "name": "Codegen Studio", - "version": "1.1.0", - "description": "Generate Next.js, React, CLI starters, and MetaBuilder packages from configurable templates.", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "tools", - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [ - "CodegenStudio", - "TemplateSelector", - "PackageGenerator" - ], - "scripts": [ - "init", - "blueprint", - "package_template", - "package_template.generator", - "package_template.templates", - "package_template.cli" - ] - }, - "tests": { - "scripts": [ - "tests/metadata.test.lua", - "tests/components.test.lua", - "package_template/tests/generator.test.lua" - ], - "cases": [ - "tests/metadata.cases.json", - "tests/components.cases.json", - "package_template/tests/generator.cases.json" - ] - }, - "minLevel": 5, - "primary": true, - "permissions": { - "codegen.templates.view": { - "minLevel": 5, - "description": "View available code templates" - }, - "codegen.templates.create": { - "minLevel": 5, - "description": "Create custom templates" - }, - "codegen.generate": { - "minLevel": 5, - "description": "Generate code from templates" - }, - "codegen.package.create": { - "minLevel": 5, - "description": "Create new MetaBuilder packages" - }, - "codegen.package.scaffold": { - "minLevel": 5, - "description": "Generate package scaffolding" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "codegen_studio", + "name": "Codegen Studio", + "version": "1.1.0", + "description": "Generate Next.js, React, CLI starters, and MetaBuilder packages from configurable templates.", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "tools", + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [ + "CodegenStudio", + "TemplateSelector", + "PackageGenerator" + ], + "scripts": [ + "init", + "blueprint", + "package_template", + "package_template.generator", + "package_template.templates", + "package_template.cli" + ] + }, + "tests": { + "scripts": [ + "tests/metadata.test.lua", + "tests/components.test.lua", + "package_template/tests/generator.test.lua" + ], + "cases": [ + "tests/metadata.cases.json", + "tests/components.cases.json", + "package_template/tests/generator.cases.json" + ] + }, + "minLevel": 5, + "primary": true, + "permissions": { + "codegen.templates.view": { + "minLevel": 5, + "description": "View available code templates" + }, + "codegen.templates.create": { + "minLevel": 5, + "description": "Create custom templates" + }, + "codegen.generate": { + "minLevel": 5, + "description": "Generate code from templates" + }, + "codegen.package.create": { + "minLevel": 5, + "description": "Create new MetaBuilder packages" + }, + "codegen.package.scaffold": { + "minLevel": 5, + "description": "Generate package scaffolding", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Codegen_Studio", + "render": "init" + } + ] + } +} diff --git a/packages/config_summary/seed/metadata.json b/packages/config_summary/seed/metadata.json index f33a5d545..fc637d06b 100644 --- a/packages/config_summary/seed/metadata.json +++ b/packages/config_summary/seed/metadata.json @@ -1,60 +1,62 @@ -{ - "packageId": "config_summary", - "name": "Config Summary", - "version": "1.0.0", - "description": "Configuration summary panels for displaying system stats and metadata", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "ui", - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [ - "ConfigSummary", - "SummaryRow" - ], - "scripts": [ - "summary", - "aggregators" - ] - }, - "tests": { - "scripts": [ - "tests/summary.test.lua", - "tests/aggregators.test.lua" - ], - "cases": [ - "tests/summary.cases.json", - "tests/aggregators.cases.json" - ] - }, - "minLevel": 4, - "primary": false, - "permissions": { - "config.summary.export": { - "minLevel": 4, - "description": "Export configuration data" - }, - "config.summary.view": { - "minLevel": 4, - "description": "View configuration summaries" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "config_summary", + "name": "Config Summary", + "version": "1.0.0", + "description": "Configuration summary panels for displaying system stats and metadata", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "ui", + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [ + "ConfigSummary", + "SummaryRow" + ], + "scripts": [ + "summary", + "aggregators" + ] + }, + "tests": { + "scripts": [ + "tests/summary.test.lua", + "tests/aggregators.test.lua" + ], + "cases": [ + "tests/summary.cases.json", + "tests/aggregators.cases.json" + ] + }, + "minLevel": 4, + "primary": false, + "permissions": { + "config.summary.export": { + "minLevel": 4, + "description": "Export configuration data" + }, + "config.summary.view": { + "minLevel": 4, + "description": "View configuration summaries", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Config_Summary", + "render": "summary" + } + ] + } +} diff --git a/packages/dbal_demo/seed/metadata.json b/packages/dbal_demo/seed/metadata.json index 729da1bf3..d383ca3fd 100644 --- a/packages/dbal_demo/seed/metadata.json +++ b/packages/dbal_demo/seed/metadata.json @@ -1,111 +1,112 @@ -{ - "packageId": "dbal_demo", - "name": "DBAL Demo", - "version": "1.0.0", - "description": "DBAL Integration Demo - Demonstrates TypeScript DBAL client with MetaBuilder", - "author": "MetaBuilder", - "license": "MIT", - "minLevel": 3, - "category": "demo", - "tags": [ - "dbal", - "demo", - "kv-store", - "blob-storage", - "cache" - ], - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [ - "DBALDemo", - "KVStorePanel", - "BlobStoragePanel", - "CachedDataPanel" - ], - "scripts": [ - "init", - "kv_operations", - "blob_operations", - "cache_operations" - ] - }, - "tests": { - "scripts": [ - "tests/kv_operations.test.lua", - "tests/cache_operations.test.lua", - "tests/blob_operations.test.lua" - ], - "cases": [ - "tests/kv_operations.cases.json", - "tests/cache_operations.cases.json", - "tests/blob_operations.cases.json" - ] - }, - "bindings": { - "dbal": true, - "browser": false - }, - "requiredHooks": [ - "dbal", - "kv_store", - "blob_storage", - "cached_data" - ], - "layout": "layout.json", - "permissions": { - "enabled": true, - "minLevel": 3, - "databaseRequired": true, - "components": { - "DBALDemo": { - "enabled": true, - "minLevel": 3, - "requireDatabase": true - }, - "KVStorePanel": { - "enabled": true, - "minLevel": 3, - "requireDatabase": true, - "featureFlags": [ - "kv_store_enabled" - ] - }, - "BlobStoragePanel": { - "enabled": true, - "minLevel": 4, - "requireDatabase": true, - "featureFlags": [ - "blob_storage_enabled" - ] - }, - "CachedDataPanel": { - "enabled": true, - "minLevel": 3, - "requireDatabase": true - , - "storybook": { - "stories": [] - } -} - , - "storybook": { - "stories": [] - } -} - }, - "primary": true, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "dbal_demo", + "name": "DBAL Demo", + "version": "1.0.0", + "description": "DBAL Integration Demo - Demonstrates TypeScript DBAL client with MetaBuilder", + "author": "MetaBuilder", + "license": "MIT", + "minLevel": 3, + "category": "demo", + "tags": [ + "dbal", + "demo", + "kv-store", + "blob-storage", + "cache" + ], + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [ + "DBALDemo", + "KVStorePanel", + "BlobStoragePanel", + "CachedDataPanel" + ], + "scripts": [ + "init", + "kv_operations", + "blob_operations", + "cache_operations" + ] + }, + "tests": { + "scripts": [ + "tests/kv_operations.test.lua", + "tests/cache_operations.test.lua", + "tests/blob_operations.test.lua" + ], + "cases": [ + "tests/kv_operations.cases.json", + "tests/cache_operations.cases.json", + "tests/blob_operations.cases.json" + ] + }, + "bindings": { + "dbal": true, + "browser": false + }, + "requiredHooks": [ + "dbal", + "kv_store", + "blob_storage", + "cached_data" + ], + "layout": "layout.json", + "permissions": { + "enabled": true, + "minLevel": 3, + "databaseRequired": true, + "components": { + "DBALDemo": { + "enabled": true, + "minLevel": 3, + "requireDatabase": true + }, + "KVStorePanel": { + "enabled": true, + "minLevel": 3, + "requireDatabase": true, + "featureFlags": [ + "kv_store_enabled" + ] + }, + "BlobStoragePanel": { + "enabled": true, + "minLevel": 4, + "requireDatabase": true, + "featureFlags": [ + "blob_storage_enabled" + ] + }, + "CachedDataPanel": { + "enabled": true, + "minLevel": 3, + "requireDatabase": true, + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [] + } + } + }, + "primary": true, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "DBAL_Demo", + "render": "init" + } + ] + } +} diff --git a/packages/github_tools/seed/metadata.json b/packages/github_tools/seed/metadata.json index 7a69f26e5..2eff0dfcb 100644 --- a/packages/github_tools/seed/metadata.json +++ b/packages/github_tools/seed/metadata.json @@ -1,61 +1,63 @@ -{ - "packageId": "github_tools", - "name": "GitHub Tools", - "description": "GitHub integration tools including Actions viewer, run analysis, and workflow management", - "version": "1.0.0", - "author": "MetaBuilder", - "minLevel": 2, - "category": "development", - "tags": [ - "github", - "ci-cd", - "workflow", - "actions" - ], - "dependencies": [], - "exports": { - "components": [ - "GitHubViewer", - "RunList", - "RunDetails", - "AnalysisPanel", - "RunFilters" - ], - "scripts": [ - "fetch_runs", - "analyze", - "filter", - "status" - ] - }, - "primary": true, - "permissions": { - "github.runs.view": { - "minLevel": 2, - "description": "View GitHub Actions runs" - }, - "github.runs.analyze": { - "minLevel": 2, - "description": "Analyze GitHub Actions runs" - }, - "github.workflow.trigger": { - "minLevel": 3, - "description": "Trigger workflow runs" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "github_tools", + "name": "GitHub Tools", + "description": "GitHub integration tools including Actions viewer, run analysis, and workflow management", + "version": "1.0.0", + "author": "MetaBuilder", + "minLevel": 2, + "category": "development", + "tags": [ + "github", + "ci-cd", + "workflow", + "actions" + ], + "dependencies": [], + "exports": { + "components": [ + "GitHubViewer", + "RunList", + "RunDetails", + "AnalysisPanel", + "RunFilters" + ], + "scripts": [ + "fetch_runs", + "analyze", + "filter", + "status" + ] + }, + "primary": true, + "permissions": { + "github.runs.view": { + "minLevel": 2, + "description": "View GitHub Actions runs" + }, + "github.runs.analyze": { + "minLevel": 2, + "description": "Analyze GitHub Actions runs" + }, + "github.workflow.trigger": { + "minLevel": 3, + "description": "Trigger workflow runs", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "GitHub_Tools", + "render": "fetch_runs" + } + ] + } +} diff --git a/packages/lua_test/seed/metadata.json b/packages/lua_test/seed/metadata.json index 7af579bf2..4c07638df 100644 --- a/packages/lua_test/seed/metadata.json +++ b/packages/lua_test/seed/metadata.json @@ -1,49 +1,51 @@ -{ - "packageId": "lua_test", - "name": "Lua Test", - "version": "1.0.0", - "description": "Unit testing framework for Lua scripts in MetaBuilder packages", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "tools", - "dependencies": [], - "exports": { - "components": [ - "TestRunner", - "TestResults" - ], - "scripts": [ - "framework", - "runner", - "assertions", - "mocks" - ] - }, - "minLevel": 3, - "primary": false, - "permissions": { - "lua.test.run": { - "minLevel": 3, - "description": "Run Lua tests" - }, - "lua.test.view": { - "minLevel": 3, - "description": "View test results" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "lua_test", + "name": "Lua Test", + "version": "1.0.0", + "description": "Unit testing framework for Lua scripts in MetaBuilder packages", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "tools", + "dependencies": [], + "exports": { + "components": [ + "TestRunner", + "TestResults" + ], + "scripts": [ + "framework", + "runner", + "assertions", + "mocks" + ] + }, + "minLevel": 3, + "primary": false, + "permissions": { + "lua.test.run": { + "minLevel": 3, + "description": "Run Lua tests" + }, + "lua.test.view": { + "minLevel": 3, + "description": "View test results", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Lua_Test", + "render": "framework" + } + ] + } +} diff --git a/packages/media_center/seed/metadata.json b/packages/media_center/seed/metadata.json index 9af8ad1c3..4af130f73 100644 --- a/packages/media_center/seed/metadata.json +++ b/packages/media_center/seed/metadata.json @@ -1,232 +1,232 @@ -{ - "packageId": "media_center", - "name": "Media Center", - "version": "1.1.0", - "description": "Media processing dashboard with job queue, radio, TV, document conversion, and retro gaming", - "author": "MetaBuilder", - "category": "media", - "minLevel": 3, - "tags": [ - "media", - "streaming", - "radio", - "tv", - "transcoding", - "documents", - "pdf", - "retro", - "gaming", - "emulation" - ], - "dependencies": [ - "notification_center", - "data_table" - ], - "schema": { - "entities": [ - "MediaAsset", - "MediaJob" - ], - "path": "schema/entities.yaml" - }, - "exports": { - "components": [ - "MediaDashboard", - "JobQueue", - "JobSubmitForm", - "RadioChannelList", - "RadioChannelEditor", - "RadioPlayer", - "TvChannelList", - "TvChannelEditor", - "TvScheduleEditor", - "TvEpgViewer", - "MediaPlayer", - "DocumentConverter", - "QuickConvertButtons", - "RetroGameLauncher", - "RetroGamePlayer", - "SaveStateManager", - "ActiveSessionsList" - ], - "pages": [ - "MediaOverviewPage", - "JobsPage", - "RadioPage", - "TvPage", - "DocumentsPage", - "RetroPage" - ], - "scripts": [ - "media_api", - "job_helpers", - "radio_helpers", - "tv_helpers", - "document_helpers", - "retro_helpers" - ] - }, - "routes": [ - { - "path": "/media", - "component": "MediaOverviewPage", - "title": "Media Center", - "icon": "VideoLibrary", - "minLevel": 3 - }, - { - "path": "/media/jobs", - "component": "JobsPage", - "title": "Job Queue", - "icon": "Queue", - "minLevel": 2 - }, - { - "path": "/media/radio", - "component": "RadioPage", - "title": "Radio Channels", - "icon": "Radio", - "minLevel": 3 - }, - { - "path": "/media/tv", - "component": "TvPage", - "title": "TV Channels", - "icon": "Tv", - "minLevel": 3 - }, - { - "path": "/media/retro", - "component": "RetroPage", - "title": "Retro Gaming", - "icon": "SportsEsports", - "minLevel": 2 - }, - { - "path": "/media/retro/:sessionId", - "component": "RetroGamePlayer", - "title": "Now Playing", - "icon": "SportsEsports", - "minLevel": 2 - , - "storybook": { - "stories": [] - } -} - ], - "permissions": { - "media.jobs.submit": { - "minLevel": 1, - "description": "Submit media processing jobs" - }, - "media.jobs.view": { - "minLevel": 1, - "description": "View own jobs" - }, - "media.jobs.view_all": { - "minLevel": 2, - "description": "View all jobs" - }, - "media.jobs.cancel": { - "minLevel": 2, - "description": "Cancel jobs" - }, - "media.radio.view": { - "minLevel": 0, - "description": "View radio channels" - }, - "media.radio.manage": { - "minLevel": 3, - "description": "Create/edit radio channels" - }, - "media.tv.view": { - "minLevel": 0, - "description": "View TV channels" - }, - "media.tv.manage": { - "minLevel": 3, - "description": "Create/edit TV channels" - }, - "media.tv.schedule": { - "minLevel": 3, - "description": "Manage TV schedule" - }, - "media.retro.play": { - "minLevel": 2, - "description": "Play retro games" - }, - "media.retro.stream": { - "minLevel": 3, - "description": "Stream retro gameplay" - }, - "media.retro.manage_cores": { - "minLevel": 4, - "description": "Install/remove emulator cores" - , - "storybook": { - "stories": [] - } -} - }, - "settings": { - "media_daemon_url": { - "type": "string", - "default": "http://localhost:8090", - "description": "Media daemon API URL" - }, - "auto_refresh_interval": { - "type": "number", - "default": 5000, - "description": "Auto-refresh interval in milliseconds" - }, - "default_video_quality": { - "type": "select", - "options": [ - "auto", - "1080p", - "720p", - "480p" - ], - "default": "auto", - "description": "Default video playback quality" - }, - "default_audio_quality": { - "type": "select", - "options": [ - "auto", - "320", - "192", - "128", - "64" - ], - "default": "auto", - "description": "Default audio streaming quality (kbps)" - , - "storybook": { - "stories": [] - } -} - }, - "tests": { - "unit": [ - "media_api.test.lua", - "job_helpers.test.lua" - ], - "integration": [ - "job_submission.test.lua", - "radio_streaming.test.lua" - ] - }, - "primary": true, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "media_center", + "name": "Media Center", + "version": "1.1.0", + "description": "Media processing dashboard with job queue, radio, TV, document conversion, and retro gaming", + "author": "MetaBuilder", + "category": "media", + "minLevel": 3, + "tags": [ + "media", + "streaming", + "radio", + "tv", + "transcoding", + "documents", + "pdf", + "retro", + "gaming", + "emulation" + ], + "dependencies": [ + "notification_center", + "data_table" + ], + "schema": { + "entities": [ + "MediaAsset", + "MediaJob" + ], + "path": "schema/entities.yaml" + }, + "exports": { + "components": [ + "MediaDashboard", + "JobQueue", + "JobSubmitForm", + "RadioChannelList", + "RadioChannelEditor", + "RadioPlayer", + "TvChannelList", + "TvChannelEditor", + "TvScheduleEditor", + "TvEpgViewer", + "MediaPlayer", + "DocumentConverter", + "QuickConvertButtons", + "RetroGameLauncher", + "RetroGamePlayer", + "SaveStateManager", + "ActiveSessionsList" + ], + "pages": [ + "MediaOverviewPage", + "JobsPage", + "RadioPage", + "TvPage", + "DocumentsPage", + "RetroPage" + ], + "scripts": [ + "media_api", + "job_helpers", + "radio_helpers", + "tv_helpers", + "document_helpers", + "retro_helpers" + ] + }, + "routes": [ + { + "path": "/media", + "component": "MediaOverviewPage", + "title": "Media Center", + "icon": "VideoLibrary", + "minLevel": 3 + }, + { + "path": "/media/jobs", + "component": "JobsPage", + "title": "Job Queue", + "icon": "Queue", + "minLevel": 2 + }, + { + "path": "/media/radio", + "component": "RadioPage", + "title": "Radio Channels", + "icon": "Radio", + "minLevel": 3 + }, + { + "path": "/media/tv", + "component": "TvPage", + "title": "TV Channels", + "icon": "Tv", + "minLevel": 3 + }, + { + "path": "/media/retro", + "component": "RetroPage", + "title": "Retro Gaming", + "icon": "SportsEsports", + "minLevel": 2 + }, + { + "path": "/media/retro/:sessionId", + "component": "RetroGamePlayer", + "title": "Now Playing", + "icon": "SportsEsports", + "minLevel": 2, + "storybook": { + "stories": [] + } + } + ], + "permissions": { + "media.jobs.submit": { + "minLevel": 1, + "description": "Submit media processing jobs" + }, + "media.jobs.view": { + "minLevel": 1, + "description": "View own jobs" + }, + "media.jobs.view_all": { + "minLevel": 2, + "description": "View all jobs" + }, + "media.jobs.cancel": { + "minLevel": 2, + "description": "Cancel jobs" + }, + "media.radio.view": { + "minLevel": 0, + "description": "View radio channels" + }, + "media.radio.manage": { + "minLevel": 3, + "description": "Create/edit radio channels" + }, + "media.tv.view": { + "minLevel": 0, + "description": "View TV channels" + }, + "media.tv.manage": { + "minLevel": 3, + "description": "Create/edit TV channels" + }, + "media.tv.schedule": { + "minLevel": 3, + "description": "Manage TV schedule" + }, + "media.retro.play": { + "minLevel": 2, + "description": "Play retro games" + }, + "media.retro.stream": { + "minLevel": 3, + "description": "Stream retro gameplay" + }, + "media.retro.manage_cores": { + "minLevel": 4, + "description": "Install/remove emulator cores", + "storybook": { + "stories": [] + } + } + }, + "settings": { + "media_daemon_url": { + "type": "string", + "default": "http://localhost:8090", + "description": "Media daemon API URL" + }, + "auto_refresh_interval": { + "type": "number", + "default": 5000, + "description": "Auto-refresh interval in milliseconds" + }, + "default_video_quality": { + "type": "select", + "options": [ + "auto", + "1080p", + "720p", + "480p" + ], + "default": "auto", + "description": "Default video playback quality" + }, + "default_audio_quality": { + "type": "select", + "options": [ + "auto", + "320", + "192", + "128", + "64" + ], + "default": "auto", + "description": "Default audio streaming quality (kbps)", + "storybook": { + "stories": [] + } + } + }, + "tests": { + "unit": [ + "media_api.test.lua", + "job_helpers.test.lua" + ], + "integration": [ + "job_submission.test.lua", + "radio_streaming.test.lua" + ] + }, + "primary": true, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Media_Center", + "render": "media_api" + } + ] + } +} diff --git a/packages/notification_center/seed/metadata.json b/packages/notification_center/seed/metadata.json index 21d83b5f6..7a6484609 100644 --- a/packages/notification_center/seed/metadata.json +++ b/packages/notification_center/seed/metadata.json @@ -1,75 +1,77 @@ -{ - "packageId": "notification_center", - "name": "Notification Center", - "version": "1.0.0", - "description": "Notification center components and summary cards", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "ui", - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [ - "NotificationSummary" - ], - "scripts": [ - "init", - "toast", - "list", - "summary" - ] - }, - "tests": { - "scripts": [ - "tests/metadata.test.lua", - "tests/components.test.lua" - ], - "cases": [ - "tests/metadata.cases.json", - "tests/components.cases.json" - ] - }, - "minLevel": 1, - "schema": { - "entities": [ - "Notification" - ], - "path": "schema/entities.yaml" - }, - "primary": false, - "permissions": { - "notifications.view": { - "minLevel": 1, - "description": "View notifications" - }, - "notifications.dismiss": { - "minLevel": 1, - "description": "Dismiss notifications" - }, - "notifications.send": { - "minLevel": 3, - "description": "Send notifications to users" - }, - "notifications.broadcast": { - "minLevel": 4, - "description": "Broadcast notifications" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "notification_center", + "name": "Notification Center", + "version": "1.0.0", + "description": "Notification center components and summary cards", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "ui", + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [ + "NotificationSummary" + ], + "scripts": [ + "init", + "toast", + "list", + "summary" + ] + }, + "tests": { + "scripts": [ + "tests/metadata.test.lua", + "tests/components.test.lua" + ], + "cases": [ + "tests/metadata.cases.json", + "tests/components.cases.json" + ] + }, + "minLevel": 1, + "schema": { + "entities": [ + "Notification" + ], + "path": "schema/entities.yaml" + }, + "primary": false, + "permissions": { + "notifications.view": { + "minLevel": 1, + "description": "View notifications" + }, + "notifications.dismiss": { + "minLevel": 1, + "description": "Dismiss notifications" + }, + "notifications.send": { + "minLevel": 3, + "description": "Send notifications to users" + }, + "notifications.broadcast": { + "minLevel": 4, + "description": "Broadcast notifications", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Notification_Center", + "render": "init" + } + ] + } +} diff --git a/packages/package_validator/seed/metadata.json b/packages/package_validator/seed/metadata.json index 5d00dc4de..78237bdb1 100644 --- a/packages/package_validator/seed/metadata.json +++ b/packages/package_validator/seed/metadata.json @@ -1,77 +1,79 @@ -{ - "packageId": "package_validator", - "name": "Package Validator", - "version": "1.0.0", - "description": "Validates package structure including JSON schemas, Lua files, and folder organization", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "tools", - "primary": true, - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [], - "scripts": [ - "validate", - "metadata_schema", - "component_schema", - "lua_validator", - "structure_validator", - "cli" - ] - }, - "tests": { - "scripts": [ - "tests/metadata.test.lua", - "tests/component.test.lua", - "tests/validate.test.lua", - "tests/lua_validator.test.lua", - "tests/structure_validator.test.lua", - "tests/devdependencies.test.lua", - "tests/parameterized.test.lua" - ], - "cases": [ - "tests/cases.json" - ] - }, - "minLevel": 5, - "permissions": { - "package.validate": { - "minLevel": 5, - "description": "Run package validation checks" - }, - "package.validate.metadata": { - "minLevel": 5, - "description": "Validate metadata.json schemas" - }, - "package.validate.lua": { - "minLevel": 5, - "description": "Validate Lua script syntax" - }, - "package.validate.structure": { - "minLevel": 5, - "description": "Validate package folder structure" - }, - "package.validate.components": { - "minLevel": 5, - "description": "Validate component definitions" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "package_validator", + "name": "Package Validator", + "version": "1.0.0", + "description": "Validates package structure including JSON schemas, Lua files, and folder organization", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "tools", + "primary": true, + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [], + "scripts": [ + "validate", + "metadata_schema", + "component_schema", + "lua_validator", + "structure_validator", + "cli" + ] + }, + "tests": { + "scripts": [ + "tests/metadata.test.lua", + "tests/component.test.lua", + "tests/validate.test.lua", + "tests/lua_validator.test.lua", + "tests/structure_validator.test.lua", + "tests/devdependencies.test.lua", + "tests/parameterized.test.lua" + ], + "cases": [ + "tests/cases.json" + ] + }, + "minLevel": 5, + "permissions": { + "package.validate": { + "minLevel": 5, + "description": "Run package validation checks" + }, + "package.validate.metadata": { + "minLevel": 5, + "description": "Validate metadata.json schemas" + }, + "package.validate.lua": { + "minLevel": 5, + "description": "Validate Lua script syntax" + }, + "package.validate.structure": { + "minLevel": 5, + "description": "Validate package folder structure" + }, + "package.validate.components": { + "minLevel": 5, + "description": "Validate component definitions", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Package_Validator", + "render": "validate" + } + ] + } +} diff --git a/packages/quick_guide/seed/metadata.json b/packages/quick_guide/seed/metadata.json index c1b7439b3..179a8a8ce 100644 --- a/packages/quick_guide/seed/metadata.json +++ b/packages/quick_guide/seed/metadata.json @@ -1,56 +1,58 @@ -{ - "packageId": "quick_guide", - "name": "Quick Guide", - "version": "1.0.0", - "description": "Quick guide builder with steps and media management", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "ui", - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [ - "StepsEditor", - "MediaPane", - "QuickGuideBuilder" - ], - "scripts": [ - "init", - "steps", - "media" - ] - }, - "minLevel": 2, - "primary": true, - "permissions": { - "guide.edit": { - "minLevel": 3, - "description": "Edit quick guides" - }, - "guide.view": { - "minLevel": 2, - "description": "View quick guides" - }, - "guide.create": { - "minLevel": 3, - "description": "Create quick guides" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "quick_guide", + "name": "Quick Guide", + "version": "1.0.0", + "description": "Quick guide builder with steps and media management", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "ui", + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [ + "StepsEditor", + "MediaPane", + "QuickGuideBuilder" + ], + "scripts": [ + "init", + "steps", + "media" + ] + }, + "minLevel": 2, + "primary": true, + "permissions": { + "guide.edit": { + "minLevel": 3, + "description": "Edit quick guides" + }, + "guide.view": { + "minLevel": 2, + "description": "View quick guides" + }, + "guide.create": { + "minLevel": 3, + "description": "Create quick guides", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "QuickGuide", + "render": "init" + } + ] + } +} diff --git a/packages/role_editor/seed/metadata.json b/packages/role_editor/seed/metadata.json index f099e3270..129f3959b 100644 --- a/packages/role_editor/seed/metadata.json +++ b/packages/role_editor/seed/metadata.json @@ -1,72 +1,74 @@ -{ - "packageId": "role_editor", - "name": "Role Editor", - "version": "1.0.0", - "description": "User role management and permission configuration UI", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "ui", - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [ - "RoleEditor", - "RoleCard" - ], - "scripts": [ - "role", - "config" - ] - }, - "tests": { - "scripts": [ - "tests/role.test.lua", - "tests/config.test.lua" - ], - "cases": [ - "tests/role.cases.json", - "tests/config.cases.json" - ] - }, - "minLevel": 3, - "primary": true, - "permissions": { - "role.delete": { - "minLevel": 5, - "description": "Delete roles" - }, - "role.assign": { - "minLevel": 4, - "description": "Assign roles to users" - }, - "role.create": { - "minLevel": 4, - "description": "Create roles" - }, - "role.view": { - "minLevel": 3, - "description": "View roles" - }, - "role.edit": { - "minLevel": 4, - "description": "Edit roles" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "role_editor", + "name": "Role Editor", + "version": "1.0.0", + "description": "User role management and permission configuration UI", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "ui", + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [ + "RoleEditor", + "RoleCard" + ], + "scripts": [ + "role", + "config" + ] + }, + "tests": { + "scripts": [ + "tests/role.test.lua", + "tests/config.test.lua" + ], + "cases": [ + "tests/role.cases.json", + "tests/config.cases.json" + ] + }, + "minLevel": 3, + "primary": true, + "permissions": { + "role.delete": { + "minLevel": 5, + "description": "Delete roles" + }, + "role.assign": { + "minLevel": 4, + "description": "Assign roles to users" + }, + "role.create": { + "minLevel": 4, + "description": "Create roles" + }, + "role.view": { + "minLevel": 3, + "description": "View roles" + }, + "role.edit": { + "minLevel": 4, + "description": "Edit roles", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Role_Editor", + "render": "role" + } + ] + } +} diff --git a/packages/schema_editor/seed/metadata.json b/packages/schema_editor/seed/metadata.json index def618ab7..d5ab78c1f 100644 --- a/packages/schema_editor/seed/metadata.json +++ b/packages/schema_editor/seed/metadata.json @@ -1,76 +1,78 @@ -{ - "packageId": "schema_editor", - "name": "Schema Editor", - "version": "1.0.0", - "description": "Database schema editor components", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "editors", - "dependencies": [ - "form_builder" - ], - "devDependencies": [ - "lua_test" - ], - "exports": { - "scripts": [ - "fields", - "tables", - "relations" - ], - "components": [ - "SchemaEditor", - "TableEditor", - "FieldEditor" - ] - }, - "tests": { - "scripts": [ - "tests/metadata.test.lua", - "tests/components.test.lua", - "tests/field_definitions.test.lua", - "tests/table_operations.test.lua" - ], - "cases": [ - "tests/metadata.cases.json", - "tests/components.cases.json", - "tests/field_definitions.cases.json", - "tests/table_operations.cases.json" - ] - }, - "minLevel": 5, - "primary": true, - "permissions": { - "schema.view": { - "minLevel": 5, - "description": "View database schemas" - }, - "schema.create": { - "minLevel": 5, - "description": "Create new schemas" - }, - "schema.edit": { - "minLevel": 5, - "description": "Edit database schemas" - }, - "schema.migrate": { - "minLevel": 5, - "description": "Run schema migrations" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "schema_editor", + "name": "Schema Editor", + "version": "1.0.0", + "description": "Database schema editor components", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "editors", + "dependencies": [ + "form_builder" + ], + "devDependencies": [ + "lua_test" + ], + "exports": { + "scripts": [ + "fields", + "tables", + "relations" + ], + "components": [ + "SchemaEditor", + "TableEditor", + "FieldEditor" + ] + }, + "tests": { + "scripts": [ + "tests/metadata.test.lua", + "tests/components.test.lua", + "tests/field_definitions.test.lua", + "tests/table_operations.test.lua" + ], + "cases": [ + "tests/metadata.cases.json", + "tests/components.cases.json", + "tests/field_definitions.cases.json", + "tests/table_operations.cases.json" + ] + }, + "minLevel": 5, + "primary": true, + "permissions": { + "schema.view": { + "minLevel": 5, + "description": "View database schemas" + }, + "schema.create": { + "minLevel": 5, + "description": "Create new schemas" + }, + "schema.edit": { + "minLevel": 5, + "description": "Edit database schemas" + }, + "schema.migrate": { + "minLevel": 5, + "description": "Run schema migrations", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "SchemaEditor", + "render": "fields" + } + ] + } +} diff --git a/packages/screenshot_analyzer/seed/metadata.json b/packages/screenshot_analyzer/seed/metadata.json index be79d49bd..ad543997d 100644 --- a/packages/screenshot_analyzer/seed/metadata.json +++ b/packages/screenshot_analyzer/seed/metadata.json @@ -1,80 +1,82 @@ -{ - "packageId": "screenshot_analyzer", - "name": "Screenshot Analyzer", - "version": "1.0.0", - "description": "Screenshot Analyzer - Capture and analyze the current page", - "author": "MetaBuilder", - "license": "MIT", - "minLevel": 5, - "category": "demo", - "tags": [ - "screenshot", - "analysis", - "browser", - "dom" - ], - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [ - "ScreenshotAnalyzer", - "UploadSection", - "ResultPanel", - "PageInfo" - ], - "scripts": [ - "init", - "capture", - "analyze", - "page_info" - ] - }, - "tests": { - "scripts": [ - "tests/metadata.test.lua", - "tests/components.test.lua" - ], - "cases": [ - "tests/metadata.cases.json", - "tests/components.cases.json" - ] - }, - "bindings": { - "dbal": false, - "browser": true - }, - "requiredHooks": [], - "layout": "layout.json", - "primary": true, - "permissions": { - "screenshot.upload": { - "minLevel": 5, - "description": "Upload screenshots" - }, - "screenshot.analyze": { - "minLevel": 5, - "description": "Analyze screenshots" - }, - "screenshot.capture": { - "minLevel": 5, - "description": "Capture screenshots" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "screenshot_analyzer", + "name": "Screenshot Analyzer", + "version": "1.0.0", + "description": "Screenshot Analyzer - Capture and analyze the current page", + "author": "MetaBuilder", + "license": "MIT", + "minLevel": 5, + "category": "demo", + "tags": [ + "screenshot", + "analysis", + "browser", + "dom" + ], + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [ + "ScreenshotAnalyzer", + "UploadSection", + "ResultPanel", + "PageInfo" + ], + "scripts": [ + "init", + "capture", + "analyze", + "page_info" + ] + }, + "tests": { + "scripts": [ + "tests/metadata.test.lua", + "tests/components.test.lua" + ], + "cases": [ + "tests/metadata.cases.json", + "tests/components.cases.json" + ] + }, + "bindings": { + "dbal": false, + "browser": true + }, + "requiredHooks": [], + "layout": "layout.json", + "primary": true, + "permissions": { + "screenshot.upload": { + "minLevel": 5, + "description": "Upload screenshots" + }, + "screenshot.analyze": { + "minLevel": 5, + "description": "Analyze screenshots" + }, + "screenshot.capture": { + "minLevel": 5, + "description": "Capture screenshots", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Screenshot_Analyzer", + "render": "init" + } + ] + } +} diff --git a/packages/smtp_config/seed/metadata.json b/packages/smtp_config/seed/metadata.json index 95d983b65..b61f06931 100644 --- a/packages/smtp_config/seed/metadata.json +++ b/packages/smtp_config/seed/metadata.json @@ -1,64 +1,66 @@ -{ - "packageId": "smtp_config", - "name": "SMTP Config", - "version": "1.0.0", - "description": "SMTP configuration editor for email settings", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "config", - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [ - "SMTPConfigEditor", - "SMTPTestPanel" - ], - "scripts": [ - "smtp", - "validate" - ] - }, - "tests": { - "scripts": [ - "tests/smtp.test.lua", - "tests/validate.test.lua" - ], - "cases": [ - "tests/smtp.cases.json", - "tests/validate.cases.json" - ] - }, - "minLevel": 5, - "primary": true, - "permissions": { - "smtp.config.view": { - "minLevel": 5, - "description": "View SMTP configuration" - }, - "smtp.config.edit": { - "minLevel": 5, - "description": "Edit SMTP configuration" - }, - "smtp.test": { - "minLevel": 5, - "description": "Test SMTP connection" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "smtp_config", + "name": "SMTP Config", + "version": "1.0.0", + "description": "SMTP configuration editor for email settings", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "config", + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [ + "SMTPConfigEditor", + "SMTPTestPanel" + ], + "scripts": [ + "smtp", + "validate" + ] + }, + "tests": { + "scripts": [ + "tests/smtp.test.lua", + "tests/validate.test.lua" + ], + "cases": [ + "tests/smtp.cases.json", + "tests/validate.cases.json" + ] + }, + "minLevel": 5, + "primary": true, + "permissions": { + "smtp.config.view": { + "minLevel": 5, + "description": "View SMTP configuration" + }, + "smtp.config.edit": { + "minLevel": 5, + "description": "Edit SMTP configuration" + }, + "smtp.test": { + "minLevel": 5, + "description": "Test SMTP connection", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "SMTP_Config", + "render": "smtp" + } + ] + } +} diff --git a/packages/stats_grid/seed/metadata.json b/packages/stats_grid/seed/metadata.json index 278059f5a..6a5fd0db5 100644 --- a/packages/stats_grid/seed/metadata.json +++ b/packages/stats_grid/seed/metadata.json @@ -1,60 +1,62 @@ -{ - "packageId": "stats_grid", - "name": "Stats Grid", - "version": "1.0.0", - "description": "Configurable statistics grid display for dashboards and monitoring", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "ui", - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [ - "StatsGrid", - "StatCard" - ], - "scripts": [ - "stats", - "formatters" - ] - }, - "tests": { - "scripts": [ - "tests/stats.test.lua", - "tests/formatters.test.lua" - ], - "cases": [ - "tests/stats.cases.json", - "tests/formatters.cases.json" - ] - }, - "minLevel": 2, - "primary": false, - "permissions": { - "stats.grid.view": { - "minLevel": 2, - "description": "View stats grids" - }, - "stats.grid.configure": { - "minLevel": 3, - "description": "Configure stats grids" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "stats_grid", + "name": "Stats Grid", + "version": "1.0.0", + "description": "Configurable statistics grid display for dashboards and monitoring", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "ui", + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [ + "StatsGrid", + "StatCard" + ], + "scripts": [ + "stats", + "formatters" + ] + }, + "tests": { + "scripts": [ + "tests/stats.test.lua", + "tests/formatters.test.lua" + ], + "cases": [ + "tests/stats.cases.json", + "tests/formatters.cases.json" + ] + }, + "minLevel": 2, + "primary": false, + "permissions": { + "stats.grid.view": { + "minLevel": 2, + "description": "View stats grids" + }, + "stats.grid.configure": { + "minLevel": 3, + "description": "Configure stats grids", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Stats_Grid", + "render": "stats" + } + ] + } +} diff --git a/packages/ui_auth/seed/metadata.json b/packages/ui_auth/seed/metadata.json index 3d8a9347f..751327758 100644 --- a/packages/ui_auth/seed/metadata.json +++ b/packages/ui_auth/seed/metadata.json @@ -1,62 +1,64 @@ -{ - "packageId": "ui_auth", - "name": "Auth UI", - "version": "1.0.0", - "description": "Access denied, auth gate, and loading states", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "ui", - "dependencies": [ - "ui_permissions" - ], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [ - "AccessDenied", - "AuthGate", - "PageLoader" - ], - "scripts": [ - "denied", - "gate" - ] - }, - "tests": { - "scripts": [ - "tests/metadata.test.lua", - "tests/components.test.lua", - "tests/gate.check.test.lua", - "tests/gate.wrap.test.lua" - ], - "cases": [ - "tests/metadata.cases.json", - "tests/components.cases.json", - "tests/gate.cases.json" - ] - }, - "minLevel": 2, - "primary": false, - "permissions": { - "auth.gate.access": { - "minLevel": 2, - "description": "Access auth-gated content" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "ui_auth", + "name": "Auth UI", + "version": "1.0.0", + "description": "Access denied, auth gate, and loading states", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "ui", + "dependencies": [ + "ui_permissions" + ], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [ + "AccessDenied", + "AuthGate", + "PageLoader" + ], + "scripts": [ + "denied", + "gate" + ] + }, + "tests": { + "scripts": [ + "tests/metadata.test.lua", + "tests/components.test.lua", + "tests/gate.check.test.lua", + "tests/gate.wrap.test.lua" + ], + "cases": [ + "tests/metadata.cases.json", + "tests/components.cases.json", + "tests/gate.cases.json" + ] + }, + "minLevel": 2, + "primary": false, + "permissions": { + "auth.gate.access": { + "minLevel": 2, + "description": "Access auth-gated content", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Auth_UI", + "render": "denied" + } + ] + } +} diff --git a/packages/ui_dialogs/seed/metadata.json b/packages/ui_dialogs/seed/metadata.json index e71dd0655..f8584e285 100644 --- a/packages/ui_dialogs/seed/metadata.json +++ b/packages/ui_dialogs/seed/metadata.json @@ -1,65 +1,67 @@ -{ - "packageId": "ui_dialogs", - "name": "UI Dialogs", - "version": "1.0.0", - "description": "Confirmation, alert, and form dialogs", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "ui", - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [ - "ConfirmDialog", - "AlertDialog", - "FormDialog" - ], - "scripts": [ - "confirm", - "alert" - ] - }, - "tests": { - "scripts": [ - "tests/metadata.test.lua", - "tests/components.test.lua" - ], - "cases": [ - "tests/metadata.cases.json", - "tests/components.cases.json" - ] - }, - "minLevel": 1, - "primary": false, - "permissions": { - "dialog.confirm": { - "minLevel": 1, - "description": "Use confirmation dialogs" - }, - "dialog.alert": { - "minLevel": 1, - "description": "Use alert dialogs" - }, - "dialog.form": { - "minLevel": 1, - "description": "Use form dialogs" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "ui_dialogs", + "name": "UI Dialogs", + "version": "1.0.0", + "description": "Confirmation, alert, and form dialogs", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "ui", + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [ + "ConfirmDialog", + "AlertDialog", + "FormDialog" + ], + "scripts": [ + "confirm", + "alert" + ] + }, + "tests": { + "scripts": [ + "tests/metadata.test.lua", + "tests/components.test.lua" + ], + "cases": [ + "tests/metadata.cases.json", + "tests/components.cases.json" + ] + }, + "minLevel": 1, + "primary": false, + "permissions": { + "dialog.confirm": { + "minLevel": 1, + "description": "Use confirmation dialogs" + }, + "dialog.alert": { + "minLevel": 1, + "description": "Use alert dialogs" + }, + "dialog.form": { + "minLevel": 1, + "description": "Use form dialogs", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "ConfirmDialog", + "render": "confirm" + } + ] + } +} diff --git a/packages/ui_intro/seed/metadata.json b/packages/ui_intro/seed/metadata.json index 09af4ab65..3676d7575 100644 --- a/packages/ui_intro/seed/metadata.json +++ b/packages/ui_intro/seed/metadata.json @@ -1,55 +1,57 @@ -{ - "packageId": "ui_intro", - "name": "Intro Section", - "version": "1.0.0", - "description": "Page intro with eyebrow, title, and description", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "ui", - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "components": [ - "IntroSection" - ], - "scripts": [ - "intro" - ], - "pages": [] - }, - "tests": { - "scripts": [ - "tests/metadata.test.lua", - "tests/components.test.lua" - ], - "cases": [ - "tests/metadata.cases.json", - "tests/components.cases.json" - ] - }, - "minLevel": 1, - "primary": false, - "permissions": { - "intro.view": { - "minLevel": 1, - "description": "View intro sections" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "ui_intro", + "name": "Intro Section", + "version": "1.0.0", + "description": "Page intro with eyebrow, title, and description", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "ui", + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "components": [ + "IntroSection" + ], + "scripts": [ + "intro" + ], + "pages": [] + }, + "tests": { + "scripts": [ + "tests/metadata.test.lua", + "tests/components.test.lua" + ], + "cases": [ + "tests/metadata.cases.json", + "tests/components.cases.json" + ] + }, + "minLevel": 1, + "primary": false, + "permissions": { + "intro.view": { + "minLevel": 1, + "description": "View intro sections", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Intro_Section", + "render": "intro" + } + ] + } +} diff --git a/packages/ui_level6/seed/metadata.json b/packages/ui_level6/seed/metadata.json index bdb5b4b0b..0f801c61e 100644 --- a/packages/ui_level6/seed/metadata.json +++ b/packages/ui_level6/seed/metadata.json @@ -1,82 +1,84 @@ -{ - "packageId": "ui_level6", - "name": "Level 6 - Supergod Panel", - "version": "1.0.0", - "description": "Supergod panel for tenant management and system administration", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "ui", - "minLevel": 6, - "dependencies": [ - "ui_permissions", - "ui_header", - "ui_intro" - ], - "devDependencies": [ - "lua_test" - ], - "exports": { - "pages": [ - "level6" - ], - "scripts": [ - "layout", - "tenants", - "transfer", - "system" - ], - "components": [] - }, - "tests": { - "scripts": [ - "tests/metadata.test.lua", - "tests/components.test.lua", - "tests/transfer.test.lua" - ], - "cases": [ - "tests/transfer.cases.json" - ] - }, - "primary": true, - "permissions": { - "level6.tenants.create": { - "minLevel": 6, - "description": "Create tenants" - }, - "level6.ownership.transfer": { - "minLevel": 6, - "description": "Transfer ownership" - }, - "level6.tenants.manage": { - "minLevel": 6, - "description": "Manage tenants" - }, - "level6.panel.view": { - "minLevel": 6, - "description": "View Supergod panel" - }, - "level6.tenants.delete": { - "minLevel": 6, - "description": "Delete tenants" - }, - "level6.system.admin": { - "minLevel": 6, - "description": "System administration" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "ui_level6", + "name": "Level 6 - Supergod Panel", + "version": "1.0.0", + "description": "Supergod panel for tenant management and system administration", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "ui", + "minLevel": 6, + "dependencies": [ + "ui_permissions", + "ui_header", + "ui_intro" + ], + "devDependencies": [ + "lua_test" + ], + "exports": { + "pages": [ + "level6" + ], + "scripts": [ + "layout", + "tenants", + "transfer", + "system" + ], + "components": [] + }, + "tests": { + "scripts": [ + "tests/metadata.test.lua", + "tests/components.test.lua", + "tests/transfer.test.lua" + ], + "cases": [ + "tests/transfer.cases.json" + ] + }, + "primary": true, + "permissions": { + "level6.tenants.create": { + "minLevel": 6, + "description": "Create tenants" + }, + "level6.ownership.transfer": { + "minLevel": 6, + "description": "Transfer ownership" + }, + "level6.tenants.manage": { + "minLevel": 6, + "description": "Manage tenants" + }, + "level6.panel.view": { + "minLevel": 6, + "description": "View Supergod panel" + }, + "level6.tenants.delete": { + "minLevel": 6, + "description": "Delete tenants" + }, + "level6.system.admin": { + "minLevel": 6, + "description": "System administration", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Level_6", + "render": "layout" + } + ] + } +} diff --git a/packages/ui_login/seed/metadata.json b/packages/ui_login/seed/metadata.json index 2cac4e80f..ef0149707 100644 --- a/packages/ui_login/seed/metadata.json +++ b/packages/ui_login/seed/metadata.json @@ -1,64 +1,66 @@ -{ - "packageId": "ui_login", - "name": "Login Page", - "version": "1.0.0", - "description": "Login and registration page with form validation", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "ui", - "dependencies": [ - "ui_permissions" - ], - "devDependencies": [ - "lua_test" - ], - "exports": { - "pages": [ - "login" - ], - "scripts": [ - "login_ui", - "login_actions" - ], - "components": [] - }, - "tests": { - "scripts": [ - "tests/validate.test.lua" - ], - "cases": [ - "tests/validate.cases.json" - ] - }, - "minLevel": 1, - "primary": true, - "permissions": { - "register.submit": { - "minLevel": 1, - "description": "Submit registration" - }, - "login.submit": { - "minLevel": 1, - "description": "Submit login credentials" - }, - "login.view": { - "minLevel": 1, - "description": "View login page" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "ui_login", + "name": "Login Page", + "version": "1.0.0", + "description": "Login and registration page with form validation", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "ui", + "dependencies": [ + "ui_permissions" + ], + "devDependencies": [ + "lua_test" + ], + "exports": { + "pages": [ + "login" + ], + "scripts": [ + "login_ui", + "login_actions" + ], + "components": [] + }, + "tests": { + "scripts": [ + "tests/validate.test.lua" + ], + "cases": [ + "tests/validate.cases.json" + ] + }, + "minLevel": 1, + "primary": true, + "permissions": { + "register.submit": { + "minLevel": 1, + "description": "Submit registration" + }, + "login.submit": { + "minLevel": 1, + "description": "Submit login credentials" + }, + "login.view": { + "minLevel": 1, + "description": "View login page", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "Login_Page", + "render": "login_ui" + } + ] + } +} diff --git a/packages/ui_permissions/seed/metadata.json b/packages/ui_permissions/seed/metadata.json index 1deaddb01..9a64eb15a 100644 --- a/packages/ui_permissions/seed/metadata.json +++ b/packages/ui_permissions/seed/metadata.json @@ -1,56 +1,58 @@ -{ - "packageId": "ui_permissions", - "name": "UI Permissions", - "version": "1.0.0", - "description": "Shared permission utilities for page access control", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "ui", - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "scripts": [ - "permissions" - ], - "components": [] - }, - "tests": { - "scripts": [ - "tests/check.test.lua", - "tests/levels.test.lua" - ], - "cases": [ - "tests/check.cases.json", - "tests/levels.cases.json" - ] - }, - "minLevel": 1, - "primary": false, - "permissions": { - "permissions.check": { - "minLevel": 1, - "description": "Check user permissions" - }, - "permissions.level.read": { - "minLevel": 1, - "description": "Read permission levels" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "ui_permissions", + "name": "UI Permissions", + "version": "1.0.0", + "description": "Shared permission utilities for page access control", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "ui", + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "scripts": [ + "permissions" + ], + "components": [] + }, + "tests": { + "scripts": [ + "tests/check.test.lua", + "tests/levels.test.lua" + ], + "cases": [ + "tests/check.cases.json", + "tests/levels.cases.json" + ] + }, + "minLevel": 1, + "primary": false, + "permissions": { + "permissions.check": { + "minLevel": 1, + "description": "Check user permissions" + }, + "permissions.level.read": { + "minLevel": 1, + "description": "Read permission levels", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "UI_Permissions", + "render": "permissions" + } + ] + } +} diff --git a/packages/user_manager/seed/metadata.json b/packages/user_manager/seed/metadata.json index 1e32f376d..6b4d03096 100644 --- a/packages/user_manager/seed/metadata.json +++ b/packages/user_manager/seed/metadata.json @@ -1,78 +1,80 @@ -{ - "packageId": "user_manager", - "name": "User Manager", - "version": "1.0.0", - "description": "User management components and actions", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "managers", - "dependencies": [ - "ui_permissions", - "data_table" - ], - "devDependencies": [ - "lua_test" - ], - "exports": { - "scripts": [ - "list", - "actions" - ], - "components": [ - "UserManagement", - "UserList", - "UserActions" - ] - }, - "tests": { - "scripts": [ - "tests/actions.test.lua" - ], - "cases": [ - "tests/actions.cases.json" - ] - }, - "minLevel": 4, - "primary": true, - "permissions": { - "users.delete": { - "minLevel": 5, - "description": "Delete users" - }, - "users.create": { - "minLevel": 4, - "description": "Create new users" - }, - "users.edit": { - "minLevel": 4, - "description": "Edit user profiles" - }, - "users.view": { - "minLevel": 4, - "description": "View user details" - }, - "users.level.change": { - "minLevel": 5, - "description": "Change user access levels" - }, - "users.list": { - "minLevel": 4, - "description": "List all users" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "user_manager", + "name": "User Manager", + "version": "1.0.0", + "description": "User management components and actions", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "managers", + "dependencies": [ + "ui_permissions", + "data_table" + ], + "devDependencies": [ + "lua_test" + ], + "exports": { + "scripts": [ + "list", + "actions" + ], + "components": [ + "UserManagement", + "UserList", + "UserActions" + ] + }, + "tests": { + "scripts": [ + "tests/actions.test.lua" + ], + "cases": [ + "tests/actions.cases.json" + ] + }, + "minLevel": 4, + "primary": true, + "permissions": { + "users.delete": { + "minLevel": 5, + "description": "Delete users" + }, + "users.create": { + "minLevel": 4, + "description": "Create new users" + }, + "users.edit": { + "minLevel": 4, + "description": "Edit user profiles" + }, + "users.view": { + "minLevel": 4, + "description": "View user details" + }, + "users.level.change": { + "minLevel": 5, + "description": "Change user access levels" + }, + "users.list": { + "minLevel": 4, + "description": "List all users", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "UserManagement", + "render": "list" + } + ] + } +} diff --git a/packages/workflow_editor/seed/metadata.json b/packages/workflow_editor/seed/metadata.json index ed477d285..4e3fa2248 100644 --- a/packages/workflow_editor/seed/metadata.json +++ b/packages/workflow_editor/seed/metadata.json @@ -1,76 +1,78 @@ -{ - "packageId": "workflow_editor", - "name": "Workflow Editor", - "version": "1.0.0", - "description": "Workflow editor and run status components", - "icon": "static_content/icon.svg", - "author": "MetaBuilder", - "category": "editors", - "dependencies": [], - "devDependencies": [ - "lua_test" - ], - "exports": { - "scripts": [ - "editor", - "status", - "run" - ], - "components": [ - "WorkflowEditor", - "WorkflowRunCard", - "WorkflowRunStatus" - ] - }, - "tests": { - "scripts": [ - "tests/status.test.lua", - "tests/editor.test.lua", - "tests/run.test.lua" - ], - "cases": [ - "tests/status.cases.json", - "tests/editor.cases.json", - "tests/run.cases.json" - ] - }, - "minLevel": 5, - "primary": true, - "permissions": { - "workflow.view": { - "minLevel": 5, - "description": "View workflows" - }, - "workflow.create": { - "minLevel": 5, - "description": "Create workflows" - }, - "workflow.delete": { - "minLevel": 5, - "description": "Delete workflows" - }, - "workflow.run": { - "minLevel": 5, - "description": "Run workflows" - }, - "workflow.edit": { - "minLevel": 5, - "description": "Edit workflows" - , - "storybook": { - "stories": [] - } -} - }, - "seed": { - "styles": "seed/styles.json" - , - "storybook": { - "stories": [] - } -} -, - "storybook": { - "stories": [] - } -} +{ + "packageId": "workflow_editor", + "name": "Workflow Editor", + "version": "1.0.0", + "description": "Workflow editor and run status components", + "icon": "static_content/icon.svg", + "author": "MetaBuilder", + "category": "editors", + "dependencies": [], + "devDependencies": [ + "lua_test" + ], + "exports": { + "scripts": [ + "editor", + "status", + "run" + ], + "components": [ + "WorkflowEditor", + "WorkflowRunCard", + "WorkflowRunStatus" + ] + }, + "tests": { + "scripts": [ + "tests/status.test.lua", + "tests/editor.test.lua", + "tests/run.test.lua" + ], + "cases": [ + "tests/status.cases.json", + "tests/editor.cases.json", + "tests/run.cases.json" + ] + }, + "minLevel": 5, + "primary": true, + "permissions": { + "workflow.view": { + "minLevel": 5, + "description": "View workflows" + }, + "workflow.create": { + "minLevel": 5, + "description": "Create workflows" + }, + "workflow.delete": { + "minLevel": 5, + "description": "Delete workflows" + }, + "workflow.run": { + "minLevel": 5, + "description": "Run workflows" + }, + "workflow.edit": { + "minLevel": 5, + "description": "Edit workflows", + "storybook": { + "stories": [] + } + } + }, + "seed": { + "styles": "seed/styles.json", + "storybook": { + "stories": [] + } + }, + "storybook": { + "stories": [ + { + "name": "WorkflowEditor", + "render": "editor" + } + ] + } +}