Commit graph

383 commits

Author SHA1 Message Date
ByteAtATime
a1103f0625
style: formatting 2025-07-09 10:33:59 -07:00
ByteAtATime
ff7217e8ea
feat(icon): make assetsPath reactive
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.
2025-07-09 10:25:43 -07:00
ByteAtATime
d4d134bc20
chore(client): fix type errors 2025-07-09 10:23:18 -07:00
ByteAtATime
9a176d6590
chore: fix type errors 2025-07-09 10:11:16 -07:00
ByteAtATime
1761ccb303
feat(grid): allow grid to support color contents.
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.
2025-07-09 10:03:24 -07:00
ByteAtATime
b8f05b2c84
refactor: remove unused onDispatch properties
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.
2025-07-09 09:58:38 -07:00
ByteAtATime
66f40dc607
refactor: move plugin list request and discovery logic to backend
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.
2025-07-09 09:54:26 -07:00
ByteAtATime
4f204b2ec9
fix(dropdown): update button border color 2025-07-08 12:41:01 -07:00
ByteAtATime
fcf4557761
feat(grid): tweak empty view spacing 2025-07-08 12:38:18 -07:00
ByteAtATime
c6b1135566
fix(detail): fix detail colors
This commit removes the background for the detail component as well as changing the color on the link.
2025-07-08 12:27:54 -07:00
ByteAtATime
3ad7c0ecbb
feat(toast): add showToast overload function
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.
2025-07-08 11:57:29 -07:00
ByteAtATime
e0f2889c0d
fix(sidecar): convert components factory to return functions
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.
2025-07-08 11:56:29 -07:00
ByteAtATime
854786f0bb
feat(grid): make grid feature-complete
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.
2025-07-08 11:01:35 -07:00
ByteAtATime
ca7c920567
feat: display icon and command title as extension default 2025-07-07 11:37:24 -07:00
ByteAtATime
b2bf4bc1a3
feat(actions): tweak spacing in ActionBar
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.
2025-07-06 18:33:01 -07:00
ByteAtATime
8232acb2af
feat(quicklinks): add quicklink icon 2025-07-06 18:28:36 -07:00
ByteAtATime
4a6f9bdef6
feat(extensions): add store command icon 2025-07-06 18:27:20 -07:00
ByteAtATime
07c279b288
feat(snippets): add snippet icon 2025-07-06 18:25:05 -07:00
ByteAtATime
7670c93210
feat(file-search): add file search command icon 2025-07-06 18:20:52 -07:00
ByteAtATime
4d7cc3d138
feat(clipboard-history): add clipboard history command icon and integrate into ClipboardHistoryView and page layout 2025-07-06 18:10:51 -07:00
ByteAtATime
a5cc1db32f
test(extensions): add tests for Extensions component 2025-07-06 18:04:02 -07:00
ByteAtATime
9aa77c0b01
test(command-palette): add keyboard navigation tests for ArrowUp and ArrowDown keys 2025-07-06 15:30:36 -07:00
ByteAtATime
25c7f21846
test(command-palette): update tests to use data-testid attributes
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.
2025-07-06 15:27:38 -07:00
ByteAtATime
a26cd8c3fe
test(frontend): add vitest for unit and component testing
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
2025-07-06 15:09:06 -07:00
ByteAtATime
4099f7dd9a
refactor(actions): unify action handling into ActionBar
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.
2025-07-06 13:53:22 -07:00
ByteAtATime
e11f912708
refactor: extract InfoList component
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.
2025-07-06 10:51:08 -07:00
ByteAtATime
40eecd78a1
refactor: make Header component reusable
This commit creates a flexible, snippet-based `<Header>` component and refactored all views (`PluginRunner`, `Extensions`, `ClipboardHistoryView`, etc.) to use it within the `MainLayout`.
2025-07-06 10:36:41 -07:00
ByteAtATime
518da848fe
feat(actions): sort keyboard shortcut modifiers 2025-07-06 10:17:46 -07:00
ByteAtATime
51805dbe7e
feat(extensions): add action bar to extensions list
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.
2025-07-06 10:16:26 -07:00
ByteAtATime
8c395f0a60
refactor: migrate views to MainLayout 2025-07-06 10:08:04 -07:00
ByteAtATime
3a11a73133
feat(extensions): update links in extension detail view to match raycast 2025-07-06 09:57:05 -07:00
ByteAtATime
e22b9892ed
style: formatting 2025-07-06 09:49:51 -07:00
ByteAtATime
0265fafce7
feat(button): add action size 2025-07-06 09:49:25 -07:00
ByteAtATime
1582f2c9c9
refactor(CommandDeeplinkConfirm): replace custom dialog with AlertDialog component 2025-07-06 09:45:52 -07:00
ByteAtATime
685985b9b3
fix(view-manager): change legacy Datum import to Extension 2025-07-06 09:41:04 -07:00
ByteAtATime
018ee79280
fix(switch): update switch 2025-07-06 09:37:28 -07:00
ByteAtATime
828be15da3
fix(extensions): load data from extension specific endpoint
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.
2025-07-06 09:35:56 -07:00
ByteAtATime
c8b4cb58e0
feat(extensions): add MacOSPathHeuristic for detecting hardcoded macOS paths
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.
2025-07-05 21:13:13 -07:00
ByteAtATime
3ee3787a05
feat(extensions): implement basic heuristic for extension incompatibility
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.
2025-07-05 20:33:12 -07:00
ByteAtATime
ba63d094cf
fix(command-palette): tweak invisible spacer sizing
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.
2025-07-05 18:54:26 -07:00
ByteAtATime
629d57bcb4
fix: remove legacy footer import 2025-07-05 18:51:25 -07:00
ByteAtATime
ef510af02a
refactor(actions): combine Footer into ActionBar
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.
2025-07-05 13:57:09 -07:00
ByteAtATime
6ed4af5ce7
refactor(components): unify accessory prop handling for UI components
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.
2025-07-04 21:25:45 -07:00
ByteAtATime
a3fe9b6df7
feat(extensions): display command list if plugin is already installed 2025-07-04 14:10:01 -07:00
ByteAtATime
9752afb3e6
feat(extensions): add "Installed" badge to installed extensions 2025-07-04 13:51:02 -07:00
ByteAtATime
faa7063948
feat(extensions): update ExtensionDetailView to match Raycast 2025-07-04 11:06:23 -07:00
ByteAtATime
24e579503d
feat(extensions): support raycast store deeplinks
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.
2025-07-04 10:03:19 -07:00
ByteAtATime
307d862b3b
chore: correctly include swift so libraries at runtime
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.
2025-07-03 14:38:00 -07:00
ByteAtATime
2b383ea8e6
refactor(rpc): migrate to generic RPC proxy for sidecar commands
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.
2025-07-03 09:43:27 -07:00
ByteAtATime
674ce27057
feat(actions): detect shortcut match by platform
This commit changes the keyEventMatches logic by making it platform-dependent. Most notably, it matches `ctrl` instead of `cmd` on non-Mac platforms.
2025-07-03 09:11:13 -07:00