{ "$schema": "https://shadcn-svelte.com/schema/registry.json", "name": "open-slack", "homepage": "https://open-slack.web.app", "aliases": { "lib": "$lib", "ui": "$lib/components/ui", "components": "$lib/components", "utils": "$lib/utils" }, "items": [ { "name": "open-slack-theme", "type": "registry:file", "title": "Open Slack theme", "description": "Tailwind v4 @theme token system (dark + light) powering Open Slack's utility classes. Import it from your app.css.", "files": [ { "path": "registry-theme.css", "type": "registry:file", "target": "src/open-slack-theme.css" } ], "registryDependencies": [], "dependencies": [] }, { "name": "open-slack-core", "type": "registry:lib", "title": "Open Slack core", "description": "Headless engine: typed WebSocket SlackClient, reactive state classes, shared types, shell/plugin config.", "dependencies": ["clsx", "tailwind-merge"], "files": [ { "path": "src/lib/core/client.ts", "type": "registry:lib", "target": "core/client.ts" }, { "path": "src/lib/core/index.ts", "type": "registry:lib", "target": "core/index.ts" }, { "path": "src/lib/core/plugin.svelte.ts", "type": "registry:lib", "target": "core/plugin.svelte.ts" }, { "path": "src/lib/core/state.svelte.ts", "type": "registry:lib", "target": "core/state.svelte.ts" }, { "path": "src/lib/core/types.ts", "type": "registry:lib", "target": "core/types.ts" }, { "path": "src/lib/state/app.svelte.ts", "type": "registry:lib", "target": "state/app.svelte.ts" }, { "path": "src/lib/state/preferences.svelte.ts", "type": "registry:lib", "target": "state/preferences.svelte.ts" }, { "path": "src/lib/types.ts", "type": "registry:lib", "target": "types.ts" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "utils.ts" } ], "registryDependencies": [] }, { "name": "open-slack-message", "type": "registry:block", "title": "Open Slack — messages", "description": "Message list, chat message, renderer, and action bar.", "registryDependencies": [ "avatar", "tooltip", "scroll-area", "https://open-slack.web.app/r/open-slack-core.json" ], "dependencies": ["marked", "isomorphic-dompurify", "@lucide/svelte"], "files": [ { "path": "src/lib/components/message/ChatMessage.svelte", "type": "registry:component", "target": "message/ChatMessage.svelte" }, { "path": "src/lib/components/message/MessageActionBar.svelte", "type": "registry:component", "target": "message/MessageActionBar.svelte" }, { "path": "src/lib/components/message/MessageInput.svelte", "type": "registry:component", "target": "message/MessageInput.svelte" }, { "path": "src/lib/components/message/MessageList.svelte", "type": "registry:component", "target": "message/MessageList.svelte" }, { "path": "src/lib/components/message/MessageRenderer.svelte", "type": "registry:component", "target": "message/MessageRenderer.svelte" }, { "path": "src/lib/components/message/TypingIndicator.svelte", "type": "registry:component", "target": "message/TypingIndicator.svelte" } ] }, { "name": "open-slack-composer", "type": "registry:block", "title": "Open Slack — composer", "description": "Message composer with emoji picker and @mention autocomplete.", "registryDependencies": ["button", "https://open-slack.web.app/r/open-slack-core.json"], "dependencies": ["@lucide/svelte"], "files": [ { "path": "src/lib/components/composer/ComposerAttachments.svelte", "type": "registry:component", "target": "composer/ComposerAttachments.svelte" }, { "path": "src/lib/components/composer/ComposerLinkModal.svelte", "type": "registry:component", "target": "composer/ComposerLinkModal.svelte" }, { "path": "src/lib/components/composer/ComposerToolbar.svelte", "type": "registry:component", "target": "composer/ComposerToolbar.svelte" }, { "path": "src/lib/components/composer/ComposerVoiceRecorder.svelte", "type": "registry:component", "target": "composer/ComposerVoiceRecorder.svelte" }, { "path": "src/lib/components/composer/EmojiPicker.svelte", "type": "registry:component", "target": "composer/EmojiPicker.svelte" }, { "path": "src/lib/components/composer/MentionAutocomplete.svelte", "type": "registry:component", "target": "composer/MentionAutocomplete.svelte" } ] }, { "name": "open-slack-channel", "type": "registry:block", "title": "Open Slack — channels", "description": "Channel header, sidebar, and management dialogs.", "registryDependencies": [ "dialog", "badge", "separator", "https://open-slack.web.app/r/open-slack-core.json" ], "dependencies": ["@lucide/svelte"], "files": [ { "path": "src/lib/components/channel/AddChannelMembersDialog.svelte", "type": "registry:component", "target": "channel/AddChannelMembersDialog.svelte" }, { "path": "src/lib/components/channel/ChannelDetailsDialog.svelte", "type": "registry:component", "target": "channel/ChannelDetailsDialog.svelte" }, { "path": "src/lib/components/channel/ChannelHeader.svelte", "type": "registry:component", "target": "channel/ChannelHeader.svelte" }, { "path": "src/lib/components/channel/ChannelSearch.svelte", "type": "registry:component", "target": "channel/ChannelSearch.svelte" }, { "path": "src/lib/components/channel/ChannelSidebar.svelte", "type": "registry:component", "target": "channel/ChannelSidebar.svelte" } ] }, { "name": "open-slack-panes", "type": "registry:block", "title": "Open Slack — panes", "description": "Home, Activity, and Logs panes.", "registryDependencies": ["https://open-slack.web.app/r/open-slack-core.json"], "dependencies": ["@lucide/svelte"], "files": [ { "path": "src/lib/components/panes/ActivityPane.svelte", "type": "registry:component", "target": "panes/ActivityPane.svelte" }, { "path": "src/lib/components/panes/HomePane.svelte", "type": "registry:component", "target": "panes/HomePane.svelte" }, { "path": "src/lib/components/panes/LogsPane.svelte", "type": "registry:component", "target": "panes/LogsPane.svelte" } ] }, { "name": "open-slack", "type": "registry:block", "title": "Open Slack", "description": "The complete headless Slack-style collaboration UI — core engine, state, all components, and the in-browser mock backend. Wire it to any WebSocket backend speaking the os: protocol.", "registryDependencies": [ "avatar", "badge", "button", "dialog", "scroll-area", "sonner", "tooltip", "https://open-slack.web.app/r/open-slack-theme.json" ], "dependencies": [ "clsx", "tailwind-merge", "tailwind-variants", "marked", "isomorphic-dompurify", "mode-watcher", "svelte-sonner", "@lucide/svelte", "bits-ui", "tw-animate-css" ], "files": [ { "path": "src/lib/components/Avatar.svelte", "type": "registry:component", "target": "Avatar.svelte" }, { "path": "src/lib/components/ConfirmDialog.svelte", "type": "registry:component", "target": "ConfirmDialog.svelte" }, { "path": "src/lib/components/ConnectionStatus.svelte", "type": "registry:component", "target": "ConnectionStatus.svelte" }, { "path": "src/lib/components/ProfileMenu.svelte", "type": "registry:component", "target": "ProfileMenu.svelte" }, { "path": "src/lib/components/RailButton.svelte", "type": "registry:component", "target": "RailButton.svelte" }, { "path": "src/lib/components/SetStatusModal.svelte", "type": "registry:component", "target": "SetStatusModal.svelte" }, { "path": "src/lib/components/Toolbar.svelte", "type": "registry:component", "target": "Toolbar.svelte" }, { "path": "src/lib/components/WorkspaceSwitcher.svelte", "type": "registry:component", "target": "WorkspaceSwitcher.svelte" }, { "path": "src/lib/components/channel/AddChannelMembersDialog.svelte", "type": "registry:component", "target": "channel/AddChannelMembersDialog.svelte" }, { "path": "src/lib/components/channel/ChannelDetailsDialog.svelte", "type": "registry:component", "target": "channel/ChannelDetailsDialog.svelte" }, { "path": "src/lib/components/channel/ChannelHeader.svelte", "type": "registry:component", "target": "channel/ChannelHeader.svelte" }, { "path": "src/lib/components/channel/ChannelSearch.svelte", "type": "registry:component", "target": "channel/ChannelSearch.svelte" }, { "path": "src/lib/components/channel/ChannelSidebar.svelte", "type": "registry:component", "target": "channel/ChannelSidebar.svelte" }, { "path": "src/lib/components/composer/ComposerAttachments.svelte", "type": "registry:component", "target": "composer/ComposerAttachments.svelte" }, { "path": "src/lib/components/composer/ComposerLinkModal.svelte", "type": "registry:component", "target": "composer/ComposerLinkModal.svelte" }, { "path": "src/lib/components/composer/ComposerToolbar.svelte", "type": "registry:component", "target": "composer/ComposerToolbar.svelte" }, { "path": "src/lib/components/composer/ComposerVoiceRecorder.svelte", "type": "registry:component", "target": "composer/ComposerVoiceRecorder.svelte" }, { "path": "src/lib/components/composer/EmojiPicker.svelte", "type": "registry:component", "target": "composer/EmojiPicker.svelte" }, { "path": "src/lib/components/composer/MentionAutocomplete.svelte", "type": "registry:component", "target": "composer/MentionAutocomplete.svelte" }, { "path": "src/lib/components/message/ChatMessage.svelte", "type": "registry:component", "target": "message/ChatMessage.svelte" }, { "path": "src/lib/components/message/MessageActionBar.svelte", "type": "registry:component", "target": "message/MessageActionBar.svelte" }, { "path": "src/lib/components/message/MessageInput.svelte", "type": "registry:component", "target": "message/MessageInput.svelte" }, { "path": "src/lib/components/message/MessageList.svelte", "type": "registry:component", "target": "message/MessageList.svelte" }, { "path": "src/lib/components/message/MessageRenderer.svelte", "type": "registry:component", "target": "message/MessageRenderer.svelte" }, { "path": "src/lib/components/message/TypingIndicator.svelte", "type": "registry:component", "target": "message/TypingIndicator.svelte" }, { "path": "src/lib/components/panes/ActivityPane.svelte", "type": "registry:component", "target": "panes/ActivityPane.svelte" }, { "path": "src/lib/components/panes/HomePane.svelte", "type": "registry:component", "target": "panes/HomePane.svelte" }, { "path": "src/lib/components/panes/LogsPane.svelte", "type": "registry:component", "target": "panes/LogsPane.svelte" }, { "path": "src/lib/components/settings/SettingsNav.svelte", "type": "registry:component", "target": "settings/SettingsNav.svelte" }, { "path": "src/lib/components/settings/ThemeToggle.svelte", "type": "registry:component", "target": "settings/ThemeToggle.svelte" }, { "path": "src/lib/core/client.ts", "type": "registry:lib", "target": "core/client.ts" }, { "path": "src/lib/core/index.ts", "type": "registry:lib", "target": "core/index.ts" }, { "path": "src/lib/core/plugin.svelte.ts", "type": "registry:lib", "target": "core/plugin.svelte.ts" }, { "path": "src/lib/core/state.svelte.ts", "type": "registry:lib", "target": "core/state.svelte.ts" }, { "path": "src/lib/core/types.ts", "type": "registry:lib", "target": "core/types.ts" }, { "path": "src/lib/index.ts", "type": "registry:lib", "target": "index.ts" }, { "path": "src/lib/mock/demo-backend.ts", "type": "registry:lib", "target": "mock/demo-backend.ts" }, { "path": "src/lib/state/app.svelte.ts", "type": "registry:lib", "target": "state/app.svelte.ts" }, { "path": "src/lib/state/preferences.svelte.ts", "type": "registry:lib", "target": "state/preferences.svelte.ts" }, { "path": "src/lib/types.ts", "type": "registry:lib", "target": "types.ts" }, { "path": "src/lib/utils.ts", "type": "registry:lib", "target": "utils.ts" } ] } ] }