Previously, the assetsPath context would only store the value. Now, we store it as a function, allowing the $derived to become reactive. It has also been moved to use $derived.by to automatically call the function.
This commit updates the GridItem component to conditionally render a background color based on the content's properties. If the content is an object with a color attribute, it applies the appropriate color based on the current mode (dark or light). It also fixes the invalid `style` property passed to icon, removing it in favor for Tailwind classes.
This commit removes the onDispatch callback passed to PluginRunner, as it declares its own. It also removes the function in the page. Lastly, it removes the prop passed to Grid but adds the one passed to List.
This commit removes the `sendPluginList` function and its associated calls from the frontend. The plugin discovery logic is now handled directly in the Tauri backend, which is the first step in moving the sidecar to purely be about running plugins.
This commit updates the showToast function to support multiple calling signatures, allowing for both an options object and individual parameters for style, title, and message. The latter is not officially documented, but is present in the type definitions of @raycast/api.
This commit updates the component factory utilities in the sidecar to address a compatibility issue with Raycast extensions. Many extensions invoke UI components as direct function calls (e.g., `List(props)`) instead of using JSX syntax, which caused a `TypeError` because our components were objects returned by `React.forwardRef`. This change modifies `createWrapperComponent` and `createSlottedComponent` to return simple factory functions that produce the required React elements, making them callable and resolving the runtime error.
This commit finishes the basic implementation of Grid by implementing the `Grid.EmptyView` component and updating its props. I've expanded the Grid API to support loading states, pagination, and empty views, bringing it more in line with the native Raycast API. To accommodate these new features, this commit rewrites the `useGridView` hook. It now handles complex 2D keyboard navigation, programmatic selection, and the logic for pagination and filtering. The `Grid.Item` component was also updated to support more complex content, including accessories and tooltips, and layout options like `aspectRatio` and `fit`.
Although there are still some bugs to iron out, this commit adds all the basic features in Grid.
This commit updatesthe ActionBar styles by adding 4px margin on the left side and increasing the icon-to-title gap from 8 to 10px. These are the values used by Raycast.
This commit modifies the CommandPalette component to include a data-testid attribute for the content container. Corresponding updates are made in the test file to utilize this attribute for selecting elements, replacing the previously brittle class name selections.
This commit introduces a complete testing setup using Vitest. It's configured it to handle both unit tests in a Node environment and component tests using JSDOM. The `vite.config.js` now defines two separate test projects ('client' and 'server') to manage these different environments. Lastly, to ensure the testing environment is setup correctly, it adds tests for the CommandPalette extension
This commit refactors action and keyboard event handling across the application. It moves all key listeners for primary and secondary actions (Enter, Ctrl+Enter, and other shortcuts) into a new, centralized `ActionBar` component. This new approach uses a declarative `actions` prop, which simplifies each view's logic by removing scattered, imperative keydown handlers and the global `actionBus`. It decreases code duplication, allowing each file to simply specify its actions, without needing to worry about adding keydown listeners. Previously, each file had to handle its own actions, so some pages didn't have these actions at all.
Many views contain a detail pane that has a list of data-value pairs. This commit extracts that into a separate component, giving it a height of 150 pixels.
This commit creates a flexible, snippet-based `<Header>` component and refactored all views (`PluginRunner`, `Extensions`, `ClipboardHistoryView`, etc.) to use it within the `MainLayout`.
This commit adds an action bar to the extensions list, roughly mirroring Raycast's actions menu. It also migrates the Extensions view to the MainLayout.
Originally, we were directly using the data provided by the paginated endoint. This was incorrect, as the endpoint did not provide a list of metadata files. This commit fixes that, as well as updating the store response schema to match.
This commit introduces a new heuristic, MacOSPathHeuristic, which checks for potential hardcoded macOS paths in file content. The heuristic is added to the existing list of checks in the run_heuristic_checks function, enhancing the compatibility checks for extensions.
This commit introduces a confirmation dialog for users when installing extensions that may have compatibility issues. It adds a new `ExtensionInstallConfirm` component to display potential violations and allows users to proceed with or cancel the installation. The Rust module has been updated to add these checks and return appropriate results based on user confirmation.
Because many Raycast extensions are built with MacOS in mind, they use Mac APIs not available on other platforms.
Previously, we had changed the padding and font size of HeaderInput.svelte without updating the invisible spacer used for the placeholder. This commit addresses the issue.
Previously, the two components did basically the same thing. This commit removes Footer in favor of ActionBar. It also extracts a Toast.svelte component, which is now used to render the toast and dropdown in ActionBar.
This refactoring introduces a new `createSlottedComponent` factory to abstract the repetitive logic for handling "accessory" props like `actions`, `detail`, and `searchBarAccessory`. It replacs the manual, boilerplate implementations in `List`, `Grid`, `Form`, and `Detail` components with a single call to this new factory.
This commit adds support for deeplinks in the format of `raycast://extensions/author/slug`. It moves the currently selected extension logic into the view manager, which the Extensions component now imports.
This commit changes the build process to include Swift shared object files, allowing users to not need to include them at runtime. However, this requires the files to be present in src-tauri/SoulverWrapper/Vendor/SoulverCore-linux at build time.
This commit replaces the specific, one-off message types for each native function (e.g., clipboard, system) with a single generic `invoke_command` message. The frontend `SidecarService` now acts as a simple proxy, dynamically invoking the specified Rust command from the message payload without needing to know its implementation details. This change significantly reduces boilerplate and decouples the frontend from the backend's RPC interface.