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.
This commit changes the `escape` key handler to first clear the HeaderInput, calling `preventDefault()`. Then, we refactor other files to not go back if `preventDefault()` is called. I'm not sure if, in the future, we should use stopPropogation instead.
The packaged Linux application was failing to launch with a "cannot open shared object file" error because the dynamic linker could not locate the necessary Swift shared libraries (`.so` files).
This was caused by two missing runtime search paths (rpath):
1. The main `raycast-linux` executable did not have an rpath pointing to the location of `libSoulverWrapper.so`. This is fixed by adding a `-Wl,-rpath,...` linker argument in `build.rs`.
2. The `libSoulverWrapper.so` library did not have its own rpath to locate its transitive dependency, `libSoulverCoreDynamic.so`. An rpath on an executable is not inherited by the libraries it loads. This is fixed by passing `-Xlinker -rpath` flags to the `swift build` command, embedding the path into the library itself.
This commit modifies the GridItem component to utilize the ImageLike schema for the content property, enhancing type safety. Additionally, it replaces the image element with a div that incorporates the Icon component for better rendering and styling.
This commit introduces support for `Action.Style.Destructive` as outlined in the API documentation. The `Action` component and its variants now accept a `style` prop, which can be set to `'destructive'`.
This commit optimizes the data payload generation by replacing the previous slow, generic fingerprinting logic with a fast, specialized one. The previous method using `JSON.stringify` introduced a 20-50ms latency bottleneck; the new implementation uses a targeted string concatenation method to achieve the same payload reduction in about 10ms.
Implements a props templating system to the sidecar reconciler to significantly reduce the initial data payload size. The system now identifies repeating property sets, defines them as a template once, and then applies this template to multiple components, avoiding redundant data transmission. By writing the payload to a log file, we see that initial payload size for the Pokémon extension decreases from 150k to 30k lines
This commit implements zlib compression for large messages sent from the Node.js sidecar to the frontend. A threshold prevents small messages from incurring compression overhead, and a flag in the length-prefix header signals whether a payload is compressed, avoiding protocol changes. By adding a log to the sidecar service, we can measure that the rolling average from loading the Pokémon plugin decreases from 140ms to about 110ms.
Because we put the snippet inside an {#if} block, it didn't seem to register as a snippet. Switching the order ("if" inside "snippet") seems to fix it.
Previously, dropdown items were trying to register themselves as the primary and secondary actions. This would override the previous actions, leading to nothing happening when trying to trigger them.
Previously, we added a bottom margin to the inputs. However, this created a weird gap, and also didn't address the padding at the bottom. Now, instead of adding this margin in the input, we move it to the `BaseList` so it can handle both while still clipping at the input.