Fix: action panel (#83)

* fix: change action trigger hotkey on win and linux from control + k to alt + k

* chore: Update macOS build matrix to use macos-13 instead of macos-12

* feat: improve action panel, disable actions vimBindings
This commit is contained in:
Huakun Shen 2025-01-29 18:56:16 -05:00 committed by GitHub
parent 0bb59e4f66
commit 33e4451be2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 317 additions and 374 deletions

View File

@ -91,7 +91,7 @@ jobs:
run: | run: |
matrix="" matrix=""
if [ "${{ github.event_name }}" == "schedule" ]; then if [ "${{ github.event_name }}" == "schedule" ]; then
matrix="\"windows-latest\",\"ubuntu-22.04\",\"macos-14\",\"macos-12\"" matrix="\"windows-latest\",\"ubuntu-22.04\",\"macos-14\",\"macos-13\""
build_mode="" build_mode=""
build_path="release" build_path="release"
retention_days='1' retention_days='1'
@ -106,7 +106,7 @@ jobs:
matrix="${matrix}\"macos-14\"," matrix="${matrix}\"macos-14\","
fi fi
if [ "${{ inputs.platform_macos_x86_64 }}" == "true" ]; then if [ "${{ inputs.platform_macos_x86_64 }}" == "true" ]; then
matrix="${matrix}\"macos-12\"," matrix="${matrix}\"macos-13\","
fi fi
if [ -z "${matrix}" ]; then if [ -z "${matrix}" ]; then
matrix="\"windows-latest\"," matrix="\"windows-latest\","
@ -217,7 +217,7 @@ jobs:
run: mv target/${{ env.BUILD_PATH }}/bundle/dmg/*.dmg target/${{ env.BUILD_PATH }}/bundle/dmg/${{ env.FILE_PREFIX }}-aarch64.dmg run: mv target/${{ env.BUILD_PATH }}/bundle/dmg/*.dmg target/${{ env.BUILD_PATH }}/bundle/dmg/${{ env.FILE_PREFIX }}-aarch64.dmg
- name: Rename macos-x86_64 - name: Rename macos-x86_64
if: matrix.os == 'macos-12' if: matrix.os == 'macos-13'
run: mv target/${{ env.BUILD_PATH }}/bundle/dmg/*.dmg target/${{ env.BUILD_PATH }}/bundle/dmg/${{ env.FILE_PREFIX }}-amd64.dmg run: mv target/${{ env.BUILD_PATH }}/bundle/dmg/*.dmg target/${{ env.BUILD_PATH }}/bundle/dmg/${{ env.FILE_PREFIX }}-amd64.dmg
- name: Rename windows - name: Rename windows

View File

@ -273,8 +273,14 @@
keySet.has(_platform === "macos" ? "Meta" : "Control") && keySet.has(_platform === "macos" ? "Meta" : "Control") &&
keySet.has("k") keySet.has("k")
) { ) {
console.log("open action panel") // actionPanelOpen = true
actionPanelOpen = true setTimeout(() => {
console.log("toggle action panel")
actionPanelOpen = !actionPanelOpen
if (!actionPanelOpen) {
onActionPanelBlur()
}
}, 100)
} }
}) })

View File

@ -50,68 +50,11 @@ class ExtensionTemplate extends WorkerExtension {
} }
async load() { async load() {
clipboard.readText().then((text) => {
console.log("Clipboard text:", text)
})
kv.exists("test").then((exists) => {
console.log("KV exists:", exists)
})
kv.set("test", Math.random().toString()).then(() => {
return kv.get("test").then((value) => {
console.log("KV value:", value)
})
})
// console.log("Check screen capture permission:", await security.mac.checkScreenCapturePermission())
// await security.mac.revealSecurityPane("AllFiles")
// console.log(await security.mac.verifyFingerprint())
ui.setSearchBarPlaceholder("Search for items") ui.setSearchBarPlaceholder("Search for items")
ui.showLoadingBar(true) ui.showLoadingBar(true)
setTimeout(() => { setTimeout(() => {
ui.showLoadingBar(false) ui.showLoadingBar(false)
}, 2000) }, 2000)
const { rpcChannel, process, command } = await shell.createDenoRpcChannel<
{},
{
add(a: number, b: number): Promise<number>
subtract(a: number, b: number): Promise<number>
readImageMetadata(path: string): Promise<any>
batchReadImageMetadata: (paths: string[]) => Promise<any[]>
}
>(
"$EXTENSION/deno-src/rpc.ts",
[],
{
// allowEnv: ["npm_package_config_libvips"],
allowAllEnv: true,
// allowFfi: ["*sharp-darwin-arm64.node"],
allowAllFfi: true,
allowAllRead: true,
allowAllSys: true,
// allowRun: ["*exiftool"]
allowAllRun: true
},
{}
)
// const child = new Child(process.pid)
command.stdout.on("data", (data) => {
console.log("stdout", data.toString())
})
command.stderr.on("data", (data) => {
console.log("stderr", data.toString())
})
// await api
// .readImageMetadata("/Users/hacker/Pictures/3D-Image/pics/IMG_0767.jpeg")
// .then((data) => {
// console.log("metadata", data)
// })
// .catch((err) => {
// console.error("error", err)
// })
// await api.add(1, 2).then(console.log)
// await api.subtract(1, 2).then(console.log)
await process.kill()
const extPath = await path.extensionDir() const extPath = await path.extensionDir()
// console.log("Extension path:", extPath) // console.log("Extension path:", extPath)
const tagList = new List.ItemDetailMetadataTagList({ const tagList = new List.ItemDetailMetadataTagList({

View File

@ -1,325 +1,311 @@
export type Json = export type Json = string | number | boolean | null | { [key: string]: Json | undefined } | Json[]
| string
| number
| boolean
| null
| { [key: string]: Json | undefined }
| Json[]
export type Database = { export type Database = {
public: { public: {
Tables: { Tables: {
events: { events: {
Row: { Row: {
created_at: string created_at: string
data: Json | null data: Json | null
event_type: Database["public"]["Enums"]["event_type"] event_type: Database["public"]["Enums"]["event_type"]
id: number id: number
ip: string ip: string
} }
Insert: { Insert: {
created_at?: string created_at?: string
data?: Json | null data?: Json | null
event_type: Database["public"]["Enums"]["event_type"] event_type: Database["public"]["Enums"]["event_type"]
id?: number id?: number
ip: string ip: string
} }
Update: { Update: {
created_at?: string created_at?: string
data?: Json | null data?: Json | null
event_type?: Database["public"]["Enums"]["event_type"] event_type?: Database["public"]["Enums"]["event_type"]
id?: number id?: number
ip?: string ip?: string
} }
Relationships: [] Relationships: []
} }
ext_images: { ext_images: {
Row: { Row: {
created_at: string created_at: string
image_path: string image_path: string
sha512: string sha512: string
} }
Insert: { Insert: {
created_at?: string created_at?: string
image_path: string image_path: string
sha512: string sha512: string
} }
Update: { Update: {
created_at?: string created_at?: string
image_path?: string image_path?: string
sha512?: string sha512?: string
} }
Relationships: [] Relationships: []
} }
ext_publish: { ext_publish: {
Row: { Row: {
api_version: string | null api_version: string | null
cmd_count: number cmd_count: number
created_at: string created_at: string
demo_images: string[] demo_images: string[]
downloads: number downloads: number
extension_state: Database["public"]["Enums"]["extension_state"] extension_state: Database["public"]["Enums"]["extension_state"]
id: number id: number
identifier: string identifier: string
manifest: Json manifest: Json
metadata: Json | null metadata: Json | null
name: string name: string
package_json: Json | null package_json: Json | null
readme: string | null readme: string | null
shasum: string shasum: string
tarball_path: string tarball_path: string
tarball_size: number tarball_size: number
unpacked_size: number | null unpacked_size: number | null
version: string version: string
} }
Insert: { Insert: {
api_version?: string | null api_version?: string | null
cmd_count: number cmd_count: number
created_at?: string created_at?: string
demo_images: string[] demo_images: string[]
downloads: number downloads: number
extension_state?: Database["public"]["Enums"]["extension_state"] extension_state?: Database["public"]["Enums"]["extension_state"]
id?: number id?: number
identifier: string identifier: string
manifest: Json manifest: Json
metadata?: Json | null metadata?: Json | null
name: string name: string
package_json?: Json | null package_json?: Json | null
readme?: string | null readme?: string | null
shasum: string shasum: string
tarball_path: string tarball_path: string
tarball_size: number tarball_size: number
unpacked_size?: number | null unpacked_size?: number | null
version: string version: string
} }
Update: { Update: {
api_version?: string | null api_version?: string | null
cmd_count?: number cmd_count?: number
created_at?: string created_at?: string
demo_images?: string[] demo_images?: string[]
downloads?: number downloads?: number
extension_state?: Database["public"]["Enums"]["extension_state"] extension_state?: Database["public"]["Enums"]["extension_state"]
id?: number id?: number
identifier?: string identifier?: string
manifest?: Json manifest?: Json
metadata?: Json | null metadata?: Json | null
name?: string name?: string
package_json?: Json | null package_json?: Json | null
readme?: string | null readme?: string | null
shasum?: string shasum?: string
tarball_path?: string tarball_path?: string
tarball_size?: number tarball_size?: number
unpacked_size?: number | null unpacked_size?: number | null
version?: string version?: string
} }
Relationships: [ Relationships: [
{ {
foreignKeyName: "ext_publish_identifier_fkey" foreignKeyName: "ext_publish_identifier_fkey"
columns: ["identifier"] columns: ["identifier"]
isOneToOne: false isOneToOne: false
referencedRelation: "extensions" referencedRelation: "extensions"
referencedColumns: ["identifier"] referencedColumns: ["identifier"]
}, }
] ]
} }
extensions: { extensions: {
Row: { Row: {
api_version: string api_version: string
author_id: string | null author_id: string | null
created_at: string created_at: string
downloads: number downloads: number
icon: Json | null icon: Json | null
identifier: string identifier: string
long_description: string | null long_description: string | null
name: string name: string
readme: string | null readme: string | null
short_description: string short_description: string
tarball_size: number | null tarball_size: number | null
version: string version: string
} }
Insert: { Insert: {
api_version: string api_version: string
author_id?: string | null author_id?: string | null
created_at?: string created_at?: string
downloads: number downloads: number
icon?: Json | null icon?: Json | null
identifier: string identifier: string
long_description?: string | null long_description?: string | null
name: string name: string
readme?: string | null readme?: string | null
short_description: string short_description: string
tarball_size?: number | null tarball_size?: number | null
version: string version: string
} }
Update: { Update: {
api_version?: string api_version?: string
author_id?: string | null author_id?: string | null
created_at?: string created_at?: string
downloads?: number downloads?: number
icon?: Json | null icon?: Json | null
identifier?: string identifier?: string
long_description?: string | null long_description?: string | null
name?: string name?: string
readme?: string | null readme?: string | null
short_description?: string short_description?: string
tarball_size?: number | null tarball_size?: number | null
version?: string version?: string
} }
Relationships: [] Relationships: []
} }
stargazers: { stargazers: {
Row: { Row: {
created_at: string created_at: string
id: number id: number
star_date: string star_date: string
username: string username: string
} }
Insert: { Insert: {
created_at?: string created_at?: string
id?: number id?: number
star_date: string star_date: string
username: string username: string
} }
Update: { Update: {
created_at?: string created_at?: string
id?: number id?: number
star_date?: string star_date?: string
username?: string username?: string
} }
Relationships: [] Relationships: []
} }
} }
Views: { Views: {
[_ in never]: never [_ in never]: never
} }
Functions: { Functions: {
get_aggregated_downloads: { get_aggregated_downloads: {
Args: Record<PropertyKey, never> Args: Record<PropertyKey, never>
Returns: { Returns: {
identifier: string identifier: string
total_downloads: number total_downloads: number
}[] }[]
} }
get_aggregated_downloads_with_details: { get_aggregated_downloads_with_details: {
Args: Record<PropertyKey, never> Args: Record<PropertyKey, never>
Returns: { Returns: {
identifier: string identifier: string
total_downloads: number total_downloads: number
name: string name: string
short_description: string short_description: string
}[] }[]
} }
increment_downloads: { increment_downloads: {
Args: { Args: {
t_identifier: string t_identifier: string
t_version: string t_version: string
} }
Returns: number Returns: number
} }
} }
Enums: { Enums: {
event_type: "download" | "updater" | "schema" | "nightly_schema" event_type: "download" | "updater" | "schema" | "nightly_schema"
extension_state: "public" | "pending" | "under_review" | "private" extension_state: "public" | "pending" | "under_review" | "private"
} }
CompositeTypes: { CompositeTypes: {
[_ in never]: never [_ in never]: never
} }
} }
} }
type PublicSchema = Database[Extract<keyof Database, "public">] type PublicSchema = Database[Extract<keyof Database, "public">]
export type Tables< export type Tables<
PublicTableNameOrOptions extends PublicTableNameOrOptions extends
| keyof (PublicSchema["Tables"] & PublicSchema["Views"]) | keyof (PublicSchema["Tables"] & PublicSchema["Views"])
| { schema: keyof Database }, | { schema: keyof Database },
TableName extends PublicTableNameOrOptions extends { schema: keyof Database } TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
? keyof (Database[PublicTableNameOrOptions["schema"]]["Tables"] & ? keyof (Database[PublicTableNameOrOptions["schema"]]["Tables"] &
Database[PublicTableNameOrOptions["schema"]]["Views"]) Database[PublicTableNameOrOptions["schema"]]["Views"])
: never = never, : never = never
> = PublicTableNameOrOptions extends { schema: keyof Database } > = PublicTableNameOrOptions extends { schema: keyof Database }
? (Database[PublicTableNameOrOptions["schema"]]["Tables"] & ? (Database[PublicTableNameOrOptions["schema"]]["Tables"] &
Database[PublicTableNameOrOptions["schema"]]["Views"])[TableName] extends { Database[PublicTableNameOrOptions["schema"]]["Views"])[TableName] extends {
Row: infer R Row: infer R
} }
? R ? R
: never : never
: PublicTableNameOrOptions extends keyof (PublicSchema["Tables"] & : PublicTableNameOrOptions extends keyof (PublicSchema["Tables"] & PublicSchema["Views"])
PublicSchema["Views"]) ? (PublicSchema["Tables"] & PublicSchema["Views"])[PublicTableNameOrOptions] extends {
? (PublicSchema["Tables"] & Row: infer R
PublicSchema["Views"])[PublicTableNameOrOptions] extends { }
Row: infer R ? R
} : never
? R : never
: never
: never
export type TablesInsert< export type TablesInsert<
PublicTableNameOrOptions extends PublicTableNameOrOptions extends keyof PublicSchema["Tables"] | { schema: keyof Database },
| keyof PublicSchema["Tables"] TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
| { schema: keyof Database }, ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
TableName extends PublicTableNameOrOptions extends { schema: keyof Database } : never = never
? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
: never = never,
> = PublicTableNameOrOptions extends { schema: keyof Database } > = PublicTableNameOrOptions extends { schema: keyof Database }
? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends { ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends {
Insert: infer I Insert: infer I
} }
? I ? I
: never : never
: PublicTableNameOrOptions extends keyof PublicSchema["Tables"] : PublicTableNameOrOptions extends keyof PublicSchema["Tables"]
? PublicSchema["Tables"][PublicTableNameOrOptions] extends { ? PublicSchema["Tables"][PublicTableNameOrOptions] extends {
Insert: infer I Insert: infer I
} }
? I ? I
: never : never
: never : never
export type TablesUpdate< export type TablesUpdate<
PublicTableNameOrOptions extends PublicTableNameOrOptions extends keyof PublicSchema["Tables"] | { schema: keyof Database },
| keyof PublicSchema["Tables"] TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
| { schema: keyof Database }, ? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
TableName extends PublicTableNameOrOptions extends { schema: keyof Database } : never = never
? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
: never = never,
> = PublicTableNameOrOptions extends { schema: keyof Database } > = PublicTableNameOrOptions extends { schema: keyof Database }
? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends { ? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends {
Update: infer U Update: infer U
} }
? U ? U
: never : never
: PublicTableNameOrOptions extends keyof PublicSchema["Tables"] : PublicTableNameOrOptions extends keyof PublicSchema["Tables"]
? PublicSchema["Tables"][PublicTableNameOrOptions] extends { ? PublicSchema["Tables"][PublicTableNameOrOptions] extends {
Update: infer U Update: infer U
} }
? U ? U
: never : never
: never : never
export type Enums< export type Enums<
PublicEnumNameOrOptions extends PublicEnumNameOrOptions extends keyof PublicSchema["Enums"] | { schema: keyof Database },
| keyof PublicSchema["Enums"] EnumName extends PublicEnumNameOrOptions extends { schema: keyof Database }
| { schema: keyof Database }, ? keyof Database[PublicEnumNameOrOptions["schema"]]["Enums"]
EnumName extends PublicEnumNameOrOptions extends { schema: keyof Database } : never = never
? keyof Database[PublicEnumNameOrOptions["schema"]]["Enums"]
: never = never,
> = PublicEnumNameOrOptions extends { schema: keyof Database } > = PublicEnumNameOrOptions extends { schema: keyof Database }
? Database[PublicEnumNameOrOptions["schema"]]["Enums"][EnumName] ? Database[PublicEnumNameOrOptions["schema"]]["Enums"][EnumName]
: PublicEnumNameOrOptions extends keyof PublicSchema["Enums"] : PublicEnumNameOrOptions extends keyof PublicSchema["Enums"]
? PublicSchema["Enums"][PublicEnumNameOrOptions] ? PublicSchema["Enums"][PublicEnumNameOrOptions]
: never : never
export type CompositeTypes< export type CompositeTypes<
PublicCompositeTypeNameOrOptions extends PublicCompositeTypeNameOrOptions extends
| keyof PublicSchema["CompositeTypes"] | keyof PublicSchema["CompositeTypes"]
| { schema: keyof Database }, | { schema: keyof Database },
CompositeTypeName extends PublicCompositeTypeNameOrOptions extends { CompositeTypeName extends PublicCompositeTypeNameOrOptions extends {
schema: keyof Database schema: keyof Database
} }
? keyof Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"] ? keyof Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"]
: never = never, : never = never
> = PublicCompositeTypeNameOrOptions extends { schema: keyof Database } > = PublicCompositeTypeNameOrOptions extends { schema: keyof Database }
? Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName] ? Database[PublicCompositeTypeNameOrOptions["schema"]]["CompositeTypes"][CompositeTypeName]
: PublicCompositeTypeNameOrOptions extends keyof PublicSchema["CompositeTypes"] : PublicCompositeTypeNameOrOptions extends keyof PublicSchema["CompositeTypes"]
? PublicSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions] ? PublicSchema["CompositeTypes"][PublicCompositeTypeNameOrOptions]
: never : never

View File

@ -1,4 +1,3 @@
## Permission Table ## Permission Table
<table> <table>
@ -7,7 +6,6 @@
<th>Description</th> <th>Description</th>
</tr> </tr>
<tr> <tr>
<td> <td>

View File

@ -286,7 +286,7 @@
<Separator class="my-3" /> <Separator class="my-3" />
<h2 class="text-lg font-bold">README</h2> <h2 class="text-lg font-bold">README</h2>
{#if extPublish?.readme} {#if extPublish?.readme}
<Markdown markdown={extPublish.readme} class="bg-secondary p-4 max-w-full rounded-md" /> <Markdown markdown={extPublish.readme} class="bg-secondary max-w-full rounded-md p-4" />
{/if} {/if}
</ScrollArea> </ScrollArea>

View File

@ -90,6 +90,7 @@
</script> </script>
<Command.Root <Command.Root
vimBindings={false}
class="h-screen w-full rounded-lg border shadow-md" class="h-screen w-full rounded-lg border shadow-md"
shouldFilter={listViewContent.filter !== "none"} shouldFilter={listViewContent.filter !== "none"}
bind:value={highlightedValue} bind:value={highlightedValue}

View File

@ -7,6 +7,8 @@
import { tick } from "svelte" import { tick } from "svelte"
import Kbd from "../common/Kbd.svelte" import Kbd from "../common/Kbd.svelte"
const isMac = navigator.platform.toLowerCase().includes("mac")
let { let {
actionPanel, actionPanel,
open = $bindable(false), open = $bindable(false),
@ -42,15 +44,22 @@
<Button variant="ghost" class="" {...props} role="combobox" aria-expanded={open}> <Button variant="ghost" class="" {...props} role="combobox" aria-expanded={open}>
Actions Actions
<span class="flex items-center gap-0.5" data-tauri-drag-region> <span class="flex items-center gap-0.5" data-tauri-drag-region>
<Kbd><Icon icon="ph-command" class="h-4 w-4 shrink-0" /></Kbd> <Kbd class="w-fit">
<Kbd>K</Kbd> {#if isMac}
<Icon icon="ph-command" class="h-4 w-4 shrink-0" />
{:else}
Ctl
{/if}
</Kbd>
+
<Kbd><Icon icon="mynaui:letter-k-solid" class="h-4 w-4 shrink-0" /></Kbd>
</span> </span>
<ChevronsUpDown class="ml-2 size-4 shrink-0 opacity-50" /> <ChevronsUpDown class="ml-2 size-4 shrink-0 opacity-50" />
</Button> </Button>
{/snippet} {/snippet}
</Popover.Trigger> </Popover.Trigger>
<Popover.Content class="w-64 p-0"> <Popover.Content class="w-64 p-0">
<Command.Root> <Command.Root vimBindings={false}>
<Command.Input <Command.Input
placeholder="Select an Action" placeholder="Select an Action"
onkeydown={(e) => { onkeydown={(e) => {

View File

@ -40,7 +40,7 @@
{#if defaultAction} {#if defaultAction}
<Button size="default" class="h-full" variant="ghost" onclick={onDefaultActionSelected}> <Button size="default" class="h-full" variant="ghost" onclick={onDefaultActionSelected}>
{defaultAction} {defaultAction}
<Kbd><Icon icon="tdesign:enter" /></Kbd> <Kbd><Icon icon="uil:enter" /></Kbd>
</Button> </Button>
{/if} {/if}
{#if actionPanel} {#if actionPanel}