mirror of
https://github.com/kunkunsh/kunkun.git
synced 2025-04-03 22:26:43 +00:00
Improve Icon Multiplexer (#31)
* feat: improve IconMultiplexer * feat: add built-in command "reload extensions" * bump package version * feat: replace @gcornut/valibot-json-schema with @valibot/to-json-schema * fix: some icon bug * fix: import path * ci: debug
This commit is contained in:
parent
b7724a25ee
commit
84b82f47a4
@ -1,11 +1,18 @@
|
||||
{
|
||||
"$schema": "https://unpkg.com/@changesets/config@3.0.3/schema.json",
|
||||
"changelog": "@changesets/cli/changelog",
|
||||
"commit": false,
|
||||
"fixed": [],
|
||||
"linked": [],
|
||||
"access": "restricted",
|
||||
"baseBranch": "main",
|
||||
"updateInternalDependencies": "patch",
|
||||
"ignore": []
|
||||
"$schema": "https://unpkg.com/@changesets/config@3.0.3/schema.json",
|
||||
"changelog": "@changesets/cli/changelog",
|
||||
"commit": false,
|
||||
"fixed": [],
|
||||
"linked": [],
|
||||
"access": "restricted",
|
||||
"baseBranch": "develop",
|
||||
"updateInternalDependencies": "patch",
|
||||
"ignore": [
|
||||
"@kksh/desktop",
|
||||
"@kksh/supabase",
|
||||
"@kksh/utils",
|
||||
"@kksh/extension",
|
||||
"@kksh/schema",
|
||||
"@kksh/supabase"
|
||||
]
|
||||
}
|
||||
|
@ -1,5 +1,12 @@
|
||||
# kksh
|
||||
|
||||
## 0.0.25
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @kksh/api@0.0.43
|
||||
|
||||
## 0.0.22
|
||||
|
||||
### Patch Changes
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "kksh",
|
||||
"module": "dist/cli.js",
|
||||
"version": "0.0.24",
|
||||
"version": "0.0.25",
|
||||
"type": "module",
|
||||
"bin": {
|
||||
"kksh": "./dist/cli.js",
|
||||
|
@ -1,5 +1,12 @@
|
||||
# create-kunkun
|
||||
|
||||
## 0.1.35
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies
|
||||
- @kksh/api@0.0.43
|
||||
|
||||
## 0.1.30
|
||||
|
||||
### Patch Changes
|
||||
|
@ -31,6 +31,7 @@ fs.emptyDirSync(tmpDistTemplatesPath)
|
||||
console.log(getRootDir())
|
||||
|
||||
const templatesPath = path.join(getRootDir(), "../..", "packages/templates")
|
||||
console.log(`Copy from ${templatesPath} to ${tmpDistTemplatesPath}`)
|
||||
fs.copySync(templatesPath, tmpDistTemplatesPath, { dereference: os.platform() === "win32" })
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "create-kunkun",
|
||||
"type": "module",
|
||||
"version": "0.1.34",
|
||||
"version": "0.1.35",
|
||||
"bin": {
|
||||
"create-kunkun": "dist/index.mjs"
|
||||
},
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { appConfig, appState, auth } from "@/stores"
|
||||
import { appConfig, appState, auth, extensions } from "@/stores"
|
||||
import { checkUpdateAndInstall } from "@/utils/updater"
|
||||
import { IconEnum } from "@kksh/api/models"
|
||||
import type { BuiltinCmd } from "@kksh/ui/types"
|
||||
import { getVersion } from "@tauri-apps/api/app"
|
||||
import { WebviewWindow } from "@tauri-apps/api/webviewWindow"
|
||||
@ -10,11 +11,15 @@ import { toast } from "svelte-sonner"
|
||||
import { derived } from "svelte/store"
|
||||
import * as clipboard from "tauri-plugin-clipboard-api"
|
||||
import { v4 as uuidv4 } from "uuid"
|
||||
import { hexColor } from "valibot"
|
||||
|
||||
export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
{
|
||||
name: "Store",
|
||||
iconifyIcon: "streamline:store-2-solid",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "streamline:store-2-solid"
|
||||
},
|
||||
description: "Go to Extension Store",
|
||||
function: async () => {
|
||||
appState.clearSearchTerm()
|
||||
@ -23,7 +28,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Sign In",
|
||||
iconifyIcon: "mdi:login-variant",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "mdi:login-variant"
|
||||
},
|
||||
description: "",
|
||||
function: async () => {
|
||||
goto("/auth")
|
||||
@ -31,7 +39,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Sign Out",
|
||||
iconifyIcon: "mdi:logout-variant",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "mdi:logout-variant"
|
||||
},
|
||||
description: "",
|
||||
function: async () => {
|
||||
auth
|
||||
@ -42,7 +53,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Show Draggable Area",
|
||||
iconifyIcon: "mingcute:move-fill",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "mingcute:move-fill"
|
||||
},
|
||||
description: "",
|
||||
function: async () => {
|
||||
// select all html elements with attribute data-tauri-drag-region
|
||||
@ -59,7 +73,11 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Add Dev Extension",
|
||||
iconifyIcon: "lineicons:dev",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "lineicons:dev",
|
||||
hexColor: "#0f0"
|
||||
},
|
||||
description: "",
|
||||
function: async () => {
|
||||
appState.clearSearchTerm()
|
||||
@ -68,7 +86,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Kunkun Version",
|
||||
iconifyIcon: "stash:version-solid",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "stash:version-solid"
|
||||
},
|
||||
description: "",
|
||||
function: async () => {
|
||||
toast.success(`Kunkun Version: ${await getVersion()}`)
|
||||
@ -76,7 +97,11 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Set Dev Extension Path",
|
||||
iconifyIcon: "lineicons:dev",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "lineicons:dev",
|
||||
hexColor: "#0f0"
|
||||
},
|
||||
description: "",
|
||||
function: async () => {
|
||||
// const appStateStore = useAppStateStore()
|
||||
@ -86,7 +111,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Extension Window Troubleshooter",
|
||||
iconifyIcon: "material-symbols:window-outline",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "material-symbols:window-outline"
|
||||
},
|
||||
description: "",
|
||||
function: async () => {
|
||||
appState.clearSearchTerm()
|
||||
@ -102,7 +130,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Extension Permission Inspector",
|
||||
iconifyIcon: "hugeicons:inspect-code",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "hugeicons:inspect-code"
|
||||
},
|
||||
description: "",
|
||||
function: async () => {
|
||||
appState.clearSearchTerm()
|
||||
@ -112,7 +143,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Extension Loading Troubleshooter",
|
||||
iconifyIcon: "material-symbols:troubleshoot",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "material-symbols:troubleshoot"
|
||||
},
|
||||
description: "",
|
||||
function: async () => {
|
||||
appState.clearSearchTerm()
|
||||
@ -122,7 +156,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Create Quicklink",
|
||||
iconifyIcon: "material-symbols:link",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "material-symbols:link"
|
||||
},
|
||||
description: "Create a Quicklink",
|
||||
function: async () => {
|
||||
appState.clearSearchTerm()
|
||||
@ -131,7 +168,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Settings",
|
||||
iconifyIcon: "solar:settings-linear",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "solar:settings-linear"
|
||||
},
|
||||
description: "Open Settings",
|
||||
function: async () => {
|
||||
goto("/settings")
|
||||
@ -140,7 +180,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Check Update",
|
||||
iconifyIcon: "material-symbols:update",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "material-symbols:update"
|
||||
},
|
||||
description: "Check for updates",
|
||||
function: async () => {
|
||||
checkUpdateAndInstall()
|
||||
@ -149,7 +192,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Check Beta Update",
|
||||
iconifyIcon: "material-symbols:update",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "material-symbols:update"
|
||||
},
|
||||
description: "Check for Beta updates",
|
||||
function: async () => {
|
||||
checkUpdateAndInstall({ beta: true })
|
||||
@ -158,15 +204,34 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Reload",
|
||||
iconifyIcon: "tabler:reload",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "tabler:reload"
|
||||
},
|
||||
description: "Reload this page",
|
||||
function: async () => {
|
||||
location.reload()
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Reload Extensions",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "tabler:reload"
|
||||
},
|
||||
description: "Reload Extensions",
|
||||
function: async () => {
|
||||
extensions.init().then(() => {
|
||||
appState.clearSearchTerm()
|
||||
})
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "Dance",
|
||||
iconifyIcon: "mdi:dance-pole",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "mdi:dance-pole"
|
||||
},
|
||||
description: "Dance",
|
||||
function: async () => {
|
||||
goto("/dance")
|
||||
@ -174,7 +239,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Quit Kunkun",
|
||||
iconifyIcon: "emojione:cross-mark-button",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "emojione:cross-mark-button"
|
||||
},
|
||||
description: "Quit Kunkun",
|
||||
function: async () => {
|
||||
exit(0)
|
||||
@ -182,7 +250,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Toggle Dev Extension HMR",
|
||||
iconifyIcon: "ri:toggle-line",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "ri:toggle-line"
|
||||
},
|
||||
description: "Load dev extensions from their dev server URLs",
|
||||
function: async () => {
|
||||
appConfig.update((config) => {
|
||||
@ -197,7 +268,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Pin Current Screenshot",
|
||||
iconifyIcon: "material-symbols:screenshot-monitor-outline",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "material-symbols:screenshot-monitor-outline"
|
||||
},
|
||||
description: "Pin the current screenshot",
|
||||
function: async () => {
|
||||
appState.clearSearchTerm()
|
||||
@ -220,7 +294,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "MDNS Debugger",
|
||||
iconifyIcon: "material-symbols:wifi-find",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "material-symbols:wifi-find"
|
||||
},
|
||||
description: "MDNS Debugger",
|
||||
function: async () => {
|
||||
goto("/troubleshooters/mdns-debugger")
|
||||
@ -232,7 +309,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Toggle Hide On Blur",
|
||||
iconifyIcon: "ri:toggle-line",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "ri:toggle-line"
|
||||
},
|
||||
description: "Toggle Hide On Blur",
|
||||
function: async () => {
|
||||
appConfig.update((config) => {
|
||||
@ -247,7 +327,10 @@ export const rawBuiltinCmds: BuiltinCmd[] = [
|
||||
},
|
||||
{
|
||||
name: "Toggle Developer Mode",
|
||||
iconifyIcon: "hugeicons:developer",
|
||||
icon: {
|
||||
type: IconEnum.Iconify,
|
||||
value: "hugeicons:developer"
|
||||
},
|
||||
description: "Toggle Developer Mode",
|
||||
function: async () => {
|
||||
appConfig.update((config) => {
|
||||
|
@ -102,7 +102,6 @@
|
||||
if (!selected) {
|
||||
return toast.warning("No File Selected")
|
||||
}
|
||||
console.log(selected)
|
||||
for (const tarballPath of selected) {
|
||||
await extensions.installTarball(tarballPath, $appConfig.devExtensionPath)
|
||||
}
|
||||
@ -129,7 +128,10 @@
|
||||
<Card.Root
|
||||
class={cn("h-36 w-96", dragging ? "border-lime-400/30" : "text-white hover:text-blue-200")}
|
||||
>
|
||||
<div class="flex h-full cursor-pointer items-center justify-center">
|
||||
<button
|
||||
class="flex h-full w-full cursor-pointer items-center justify-center"
|
||||
onclick={pickExtFolders}
|
||||
>
|
||||
<div class={cn("flex flex-col items-center", dragging ? "text-lime-400/70" : "")}>
|
||||
<IconMultiplexer
|
||||
icon={{ value: "mdi:folder-cog-outline", type: IconEnum.Iconify }}
|
||||
@ -138,7 +140,7 @@
|
||||
<small class="select-none font-mono text-xs">Drag and Drop</small>
|
||||
<small class="select-none font-mono text-xs">Extension Folder or Tarball</small>
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
</Card.Root>
|
||||
</DragNDrop>
|
||||
</Layouts.Center>
|
||||
|
@ -63,9 +63,6 @@
|
||||
.fixPathEnv()
|
||||
.then(() => {
|
||||
info("fixed path env")
|
||||
shellx.hasCommand("ffprobe").then((res) => {
|
||||
console.log("has ffprobe:", res)
|
||||
})
|
||||
})
|
||||
.catch(error)
|
||||
|
||||
|
@ -21,7 +21,7 @@
|
||||
"turbo": "^2.3.0",
|
||||
"typescript": "5.6.3"
|
||||
},
|
||||
"packageManager": "pnpm@9.14.1",
|
||||
"packageManager": "pnpm@9.14.2",
|
||||
"engines": {
|
||||
"node": ">=22"
|
||||
},
|
||||
|
7
packages/api/CHANGELOG.md
Normal file
7
packages/api/CHANGELOG.md
Normal file
@ -0,0 +1,7 @@
|
||||
# @kksh/api
|
||||
|
||||
## 0.0.43
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- More Icon Options
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@kksh/api",
|
||||
"version": "0.0.41",
|
||||
"version": "0.0.43",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
".": "./src/index.ts",
|
||||
|
@ -1,9 +1,9 @@
|
||||
export * from "./apps"
|
||||
export * from "./fs"
|
||||
export * from "./server"
|
||||
export * from "./system"
|
||||
export * from "./tools"
|
||||
export * from "./extension"
|
||||
export * from "./system"
|
||||
export * from "./store"
|
||||
export * as db from "./db"
|
||||
export { JarvisExtDB } from "./db"
|
||||
@ -12,3 +12,4 @@ export * from "./fileSearch"
|
||||
export * from "./utils"
|
||||
export * as macSecurity from "./mac-security"
|
||||
export * from "./mdns"
|
||||
export * from "./common"
|
||||
|
@ -1,8 +1,8 @@
|
||||
import { generateJarvisPluginCommand } from "@kksh/api/commands"
|
||||
import { AppInfo, IconEnum, SysCommand } from "@kksh/api/models"
|
||||
import { invoke } from "@tauri-apps/api/core"
|
||||
import { platform } from "@tauri-apps/plugin-os"
|
||||
import { parse } from "valibot"
|
||||
import { AppInfo, IconEnum, SysCommand } from "../models"
|
||||
import { generateJarvisPluginCommand } from "./common"
|
||||
|
||||
export function openTrash(): Promise<void> {
|
||||
return invoke(generateJarvisPluginCommand("open_trash"))
|
||||
@ -119,56 +119,80 @@ export function getSelectedFilesInFileExplorer(): Promise<string[]> {
|
||||
export const rawSystemCommands = [
|
||||
{
|
||||
name: "Open Trash",
|
||||
icon: "uil:trash",
|
||||
icon: {
|
||||
value: "uil:trash",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: openTrash,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Empty Trash",
|
||||
icon: "uil:trash",
|
||||
icon: {
|
||||
value: "uil:trash",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: true,
|
||||
function: emptyTrash,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Shutdown",
|
||||
icon: "mdi:shutdown",
|
||||
icon: {
|
||||
value: "mdi:shutdown",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: true,
|
||||
function: shutdown,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Reboot",
|
||||
icon: "mdi:restart",
|
||||
icon: {
|
||||
value: "mdi:restart",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: true,
|
||||
function: reboot,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Sleep",
|
||||
icon: "carbon:asleep",
|
||||
icon: {
|
||||
value: "carbon:asleep",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: sleep,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Toggle System Appearance",
|
||||
icon: "line-md:light-dark",
|
||||
icon: {
|
||||
value: "line-md:light-dark",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: toggleSystemAppearance,
|
||||
platforms: ["macos"]
|
||||
},
|
||||
{
|
||||
name: "Show Desktop",
|
||||
icon: "bi:window-desktop",
|
||||
icon: {
|
||||
value: "bi:window-desktop",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: showDesktop,
|
||||
platforms: ["macos"]
|
||||
},
|
||||
{
|
||||
name: "Quit App",
|
||||
icon: "charm:cross",
|
||||
icon: {
|
||||
value: "charm:cross",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: quitAllApps,
|
||||
platforms: []
|
||||
@ -176,119 +200,170 @@ export const rawSystemCommands = [
|
||||
},
|
||||
{
|
||||
name: "Sleep Displays",
|
||||
icon: "solar:display-broken",
|
||||
icon: {
|
||||
value: "solar:display-broken",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: sleepDisplays,
|
||||
platforms: ["macos"]
|
||||
},
|
||||
{
|
||||
name: "Set Volume to 0%",
|
||||
icon: "flowbite:volume-mute-outline",
|
||||
icon: {
|
||||
value: "flowbite:volume-mute-outline",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: setVolumeTo0,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Set Volume to 25%",
|
||||
icon: "flowbite:volume-down-solid",
|
||||
icon: {
|
||||
value: "flowbite:volume-down-solid",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: setVolumeTo25,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Set Volume to 50%",
|
||||
icon: "flowbite:volume-down-solid",
|
||||
icon: {
|
||||
value: "flowbite:volume-down-solid",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: setVolumeTo50,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Set Volume to 75%",
|
||||
icon: "flowbite:volume-down-solid",
|
||||
icon: {
|
||||
value: "flowbite:volume-down-solid",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: setVolumeTo75,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Set Volume to 100%",
|
||||
icon: "flowbite:volume-up-solid",
|
||||
icon: {
|
||||
value: "flowbite:volume-up-solid",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: setVolumeTo100,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Turn Volume Up",
|
||||
icon: "flowbite:volume-down-solid",
|
||||
icon: {
|
||||
value: "flowbite:volume-up-solid",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: turnVolumeUp,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Turn Volume Down",
|
||||
icon: "flowbite:volume-down-outline",
|
||||
icon: {
|
||||
value: "flowbite:volume-down-outline",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: turnVolumeDown,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Toggle Mute",
|
||||
icon: "flowbite:volume-down-outline",
|
||||
icon: {
|
||||
value: "flowbite:volume-down-outline",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: toggleMute,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Mute",
|
||||
icon: "flowbite:volume-mute-solid",
|
||||
icon: {
|
||||
value: "flowbite:volume-mute-solid",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: mute,
|
||||
platforms: ["macos", "linux"]
|
||||
},
|
||||
{
|
||||
name: "Unmute",
|
||||
icon: "flowbite:volume-mute-solid",
|
||||
icon: {
|
||||
value: "flowbite:volume-mute-solid",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: unmute,
|
||||
platforms: ["macos", "linux"]
|
||||
},
|
||||
{
|
||||
name: "Toggle Stage Manager",
|
||||
icon: "material-symbols:dashboard",
|
||||
icon: {
|
||||
value: "material-symbols:dashboard",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: toggleStageManager,
|
||||
platforms: []
|
||||
},
|
||||
{
|
||||
name: "Toggle Bluetooth",
|
||||
icon: "material-symbols:bluetooth",
|
||||
icon: {
|
||||
value: "material-symbols:bluetooth",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: toggleBluetooth,
|
||||
platforms: []
|
||||
},
|
||||
{
|
||||
name: "Toggle Hidden Files",
|
||||
icon: "mdi:hide",
|
||||
icon: {
|
||||
value: "mdi:hide",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: toggleHiddenFiles,
|
||||
platforms: []
|
||||
},
|
||||
{
|
||||
name: "Eject All Disks",
|
||||
icon: "ph:eject-fill",
|
||||
icon: {
|
||||
value: "ph:eject-fill",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: true,
|
||||
function: ejectAllDisks,
|
||||
platforms: ["macos"]
|
||||
},
|
||||
{
|
||||
name: "Log Out User",
|
||||
icon: "ic:baseline-logout",
|
||||
icon: {
|
||||
value: "ic:baseline-logout",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: logoutUser,
|
||||
platforms: ["macos", "linux", "windows"]
|
||||
},
|
||||
{
|
||||
name: "Hide All Apps Except Frontmost",
|
||||
icon: "mdi:hide",
|
||||
icon: {
|
||||
value: "mdi:hide",
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
confirmRequired: false,
|
||||
function: hideAllAppsExceptFrontmost,
|
||||
platforms: []
|
||||
@ -301,10 +376,7 @@ export function getSystemCommands(): SysCommand[] {
|
||||
.map((cmd) => ({
|
||||
name: cmd.name,
|
||||
value: "system-cmd" + cmd.name.split(" ").join("-").toLowerCase(),
|
||||
icon: {
|
||||
value: cmd.icon,
|
||||
type: IconEnum.Iconify
|
||||
},
|
||||
icon: cmd.icon,
|
||||
keywords: cmd.name.split(" "),
|
||||
function: cmd.function,
|
||||
confirmRequired: cmd.confirmRequired
|
||||
|
@ -1,13 +1,4 @@
|
||||
import {
|
||||
boolean,
|
||||
enum_,
|
||||
literal,
|
||||
nullable,
|
||||
object,
|
||||
optional,
|
||||
string,
|
||||
type InferOutput
|
||||
} from "valibot"
|
||||
import * as v from "valibot"
|
||||
import { NodeName, NodeNameEnum } from "./constants"
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
@ -20,17 +11,39 @@ export enum IconEnum {
|
||||
Base64PNG = "base64-png",
|
||||
Text = "text"
|
||||
}
|
||||
export const IconType = enum_(IconEnum)
|
||||
export type IconType = InferOutput<typeof IconType>
|
||||
export const IconType = v.enum_(IconEnum)
|
||||
export type IconType = v.InferOutput<typeof IconType>
|
||||
|
||||
export const Icon = object({
|
||||
export type Icon = {
|
||||
type: IconType
|
||||
value: string
|
||||
invert?: boolean
|
||||
darkInvert?: boolean
|
||||
hexColor?: string
|
||||
bgColor?: string
|
||||
fallback?: Icon
|
||||
}
|
||||
|
||||
export const BaseIcon = v.object({
|
||||
type: IconType,
|
||||
value: string(),
|
||||
invert: optional(boolean())
|
||||
value: v.string(),
|
||||
invert: v.optional(v.boolean()),
|
||||
darkInvert: v.optional(v.boolean()),
|
||||
hexColor: v.optional(v.string()),
|
||||
bgColor: v.optional(v.string())
|
||||
// hexColor: v.optional(v.pipe(v.string(), v.hexColor("The hex color is badly formatted."))),
|
||||
// bgColor: v.optional(v.pipe(v.string(), v.hexColor("The hex color is badly formatted.")))
|
||||
})
|
||||
export type Icon = InferOutput<typeof Icon>
|
||||
export const IconNode = object({
|
||||
|
||||
export const Icon: v.GenericSchema<Icon> = v.object({
|
||||
...BaseIcon.entries,
|
||||
fallback: v.optional(v.lazy(() => Icon))
|
||||
})
|
||||
|
||||
export const IconNode = v.object({
|
||||
...BaseIcon.entries,
|
||||
nodeName: NodeName,
|
||||
...Icon.entries
|
||||
fallback: v.optional(v.lazy(() => Icon))
|
||||
})
|
||||
export type IconNode = InferOutput<typeof IconNode>
|
||||
|
||||
export type IconNode = v.InferOutput<typeof IconNode>
|
||||
|
@ -255,8 +255,6 @@ export async function verifyDenoCmdPermission(
|
||||
|
||||
// now we have command requested permissions, we need to compare with permissions defined in manifest
|
||||
/* ----------------------- Check Allow All Permissions ---------------------- */
|
||||
console.log("config: ", config)
|
||||
console.log("allowAllEnv: ", allowAllEnv)
|
||||
|
||||
if (config.allowAllEnv && !allowAllEnv) {
|
||||
throw new Error("allowAllEnv is not allowed")
|
||||
@ -280,26 +278,40 @@ export async function verifyDenoCmdPermission(
|
||||
throw new Error("allowAllSys is not allowed")
|
||||
}
|
||||
|
||||
if (!allowAllEnv && difference(config.allowEnv, allowEnv).length > 0) {
|
||||
throw new Error(`allowEnv is not allowed: ${difference(config.allowEnv, allowEnv)}`)
|
||||
function isSubsetOf<T>(subset: T[] | undefined, superset: T[]): boolean {
|
||||
if (!subset) {
|
||||
// if subset is undefined, this means extension didn't request this permission
|
||||
return true
|
||||
}
|
||||
return subset.every((item) => superset.includes(item))
|
||||
}
|
||||
if (!allowAllNet && difference(config.allowNet, allowNet).length > 0) {
|
||||
throw new Error(`allowNet is not allowed: ${difference(config.allowNet, allowNet)}`)
|
||||
|
||||
function getDisallowed(allowEnv: string[], userAllow: string[]): string[] {
|
||||
return userAllow.filter((env) => !allowEnv?.includes(env))
|
||||
}
|
||||
if (!allowAllRead && difference(config.allowRead, allowRead).length > 0) {
|
||||
throw new Error(`allowRead is not allowed: ${difference(config.allowRead, allowRead)}`)
|
||||
|
||||
if (!allowAllEnv && !isSubsetOf(config.allowEnv, allowEnv)) {
|
||||
throw new Error(`allowEnv is not allowed: ${getDisallowed(allowEnv, config.allowEnv ?? [])}`)
|
||||
}
|
||||
if (!allowAllWrite && difference(config.allowWrite, allowWrite).length > 0) {
|
||||
throw new Error(`allowWrite is not allowed: ${difference(config.allowWrite, allowWrite)}`)
|
||||
if (!allowAllNet && !isSubsetOf(config.allowNet, allowNet)) {
|
||||
throw new Error(`allowNet is not allowed: ${getDisallowed(allowNet, config.allowNet ?? [])}`)
|
||||
}
|
||||
if (!allowAllRun && difference(config.allowRun, allowRun).length > 0) {
|
||||
throw new Error(`allowRun is not allowed: ${difference(config.allowRun, allowRun)}`)
|
||||
if (!allowAllRead && !isSubsetOf(config.allowRead, allowRead)) {
|
||||
throw new Error(`allowRead is not allowed: ${getDisallowed(allowRead, config.allowRead ?? [])}`)
|
||||
}
|
||||
if (!allowAllFfi && difference(config.allowFfi, allowFfi).length > 0) {
|
||||
throw new Error(`allowFfi is not allowed: ${difference(config.allowFfi, allowFfi)}`)
|
||||
if (!allowAllWrite && !isSubsetOf(config.allowWrite, allowWrite)) {
|
||||
throw new Error(
|
||||
`allowWrite is not allowed: ${getDisallowed(allowWrite, config.allowWrite ?? [])}`
|
||||
)
|
||||
}
|
||||
if (!allowAllSys && difference(config.allowSys, allowSys).length > 0) {
|
||||
throw new Error(`allowSys is not allowed: ${difference(config.allowSys, allowSys)}`)
|
||||
if (!allowAllRun && !isSubsetOf(config.allowRun, allowRun)) {
|
||||
throw new Error(`allowRun is not allowed: ${getDisallowed(allowRun, config.allowRun ?? [])}`)
|
||||
}
|
||||
if (!allowAllFfi && !isSubsetOf(config.allowFfi, allowFfi)) {
|
||||
throw new Error(`allowFfi is not allowed: ${getDisallowed(allowFfi, config.allowFfi ?? [])}`)
|
||||
}
|
||||
if (!allowAllSys && !isSubsetOf(config.allowSys, allowSys)) {
|
||||
throw new Error(`allowSys is not allowed: ${getDisallowed(allowSys, config.allowSys ?? [])}`)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,17 +6,29 @@ export class Icon implements IconNode, IComponent<IconNode> {
|
||||
nodeName: NodeName = NodeNameEnum.Icon
|
||||
type: IconType
|
||||
value: string
|
||||
invert?: boolean
|
||||
darkInvert?: boolean
|
||||
hexColor?: string
|
||||
bgColor?: string
|
||||
|
||||
constructor(model: TIcon) {
|
||||
this.type = model.type
|
||||
this.value = model.value
|
||||
this.invert = model.invert
|
||||
this.darkInvert = model.darkInvert
|
||||
this.hexColor = model.hexColor
|
||||
this.bgColor = model.bgColor
|
||||
}
|
||||
|
||||
toModel(): IconNode {
|
||||
return {
|
||||
nodeName: this.nodeName,
|
||||
type: this.type,
|
||||
value: this.value
|
||||
value: this.value,
|
||||
invert: this.invert,
|
||||
darkInvert: this.darkInvert,
|
||||
hexColor: this.hexColor,
|
||||
bgColor: this.bgColor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ export const breakingChangesVersionCheckpoints = [
|
||||
const checkpointVersions = breakingChangesVersionCheckpoints.map((c) => c.version)
|
||||
const sortedCheckpointVersions = sort(checkpointVersions)
|
||||
|
||||
export const version = "0.0.41"
|
||||
export const version = "0.0.43"
|
||||
|
||||
export function isVersionBetween(v: string, start: string, end: string) {
|
||||
const vCleaned = clean(v)
|
||||
|
@ -14,8 +14,8 @@
|
||||
"print-schema": "bun scripts/print-schema.ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@gcornut/valibot-json-schema": "^0.42.0",
|
||||
"@types/bun": "latest"
|
||||
"@types/bun": "latest",
|
||||
"@valibot/to-json-schema": "1.0.0-beta.3"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@kksh/supabase": "workspace:*",
|
||||
|
@ -1,5 +1,5 @@
|
||||
import { toJSONSchema } from "@gcornut/valibot-json-schema"
|
||||
import { toJsonSchema } from "@valibot/to-json-schema"
|
||||
|
||||
export function getJsonSchema(schema: any) {
|
||||
return JSON.stringify(toJSONSchema({ schema }), null, 2)
|
||||
return JSON.stringify(toJsonSchema(schema), null, 2)
|
||||
}
|
||||
|
@ -3,6 +3,10 @@
|
||||
import { IconEnum, IconType, Icon as TIcon } from "@kksh/api/models"
|
||||
import { Button } from "@kksh/svelte5"
|
||||
import { cn } from "@kksh/ui/utils"
|
||||
import * as v from "valibot"
|
||||
import { styleObjectToString } from "../../utils/style"
|
||||
|
||||
const hexColorValidator = v.pipe(v.string(), v.hexColor("The hex color is badly formatted."))
|
||||
|
||||
const {
|
||||
icon,
|
||||
@ -11,15 +15,35 @@
|
||||
}: { icon: TIcon; class?: string; [key: string]: any } = $props()
|
||||
|
||||
let remoteIconError = $state(false)
|
||||
|
||||
function fillHexColor(style: Record<string, string>, key: string, value?: string) {
|
||||
if (!value) return
|
||||
const parseRes = v.safeParse(hexColorValidator, value)
|
||||
if (!parseRes.success) {
|
||||
console.error(v.flatten(parseRes.issues))
|
||||
return
|
||||
}
|
||||
if (parseRes.output) style[key] = parseRes.output
|
||||
}
|
||||
|
||||
let customStyle = $derived.by(() => {
|
||||
const style: Record<string, string> = {}
|
||||
fillHexColor(style, "color", icon.hexColor)
|
||||
fillHexColor(style, "background-color", icon.bgColor)
|
||||
return style
|
||||
})
|
||||
|
||||
let style = $derived(styleObjectToString(customStyle))
|
||||
</script>
|
||||
|
||||
{#if icon.type === IconEnum.RemoteUrl}
|
||||
{#if !remoteIconError}
|
||||
<img
|
||||
loading="lazy"
|
||||
class={cn("", className, { invert: icon.invert })}
|
||||
class={cn("dark-invert", className, { invert: icon.invert, "dark:invert": icon.darkInvert })}
|
||||
src={icon.value}
|
||||
alt=""
|
||||
{style}
|
||||
onerror={() => {
|
||||
remoteIconError = true
|
||||
}}
|
||||
@ -28,34 +52,50 @@
|
||||
{:else}
|
||||
<Icon
|
||||
icon="carbon:unknown-filled"
|
||||
class={cn("", className, { invert: icon.invert })}
|
||||
class={cn("", className, { invert: icon.invert, "dark:invert": icon.darkInvert })}
|
||||
{style}
|
||||
{...restProps}
|
||||
/>
|
||||
{/if}
|
||||
{:else if icon.type === IconEnum.Iconify}
|
||||
<Icon icon={icon.value} class={cn("", className, { invert: icon.invert })} {...restProps} />
|
||||
<Icon
|
||||
icon={icon.value}
|
||||
class={cn("", className, { invert: icon.invert, "dark:invert": icon.darkInvert })}
|
||||
{style}
|
||||
{...restProps}
|
||||
/>
|
||||
{:else if icon.type === IconEnum.Base64PNG}
|
||||
<img
|
||||
class={cn(className, { invert: icon.invert })}
|
||||
class={cn(className, { invert: icon.invert, "dark:invert": icon.darkInvert })}
|
||||
loading="lazy"
|
||||
src="data:image/png;base64, {icon.value}"
|
||||
alt=""
|
||||
{style}
|
||||
{...restProps}
|
||||
/>
|
||||
{:else if icon.type === IconEnum.Text}
|
||||
<Button
|
||||
class={cn("shrink-0 text-center", className, { invert: icon.invert })}
|
||||
class={cn("shrink-0 text-center", className, {
|
||||
invert: icon.invert,
|
||||
"dark:invert": icon.darkInvert
|
||||
})}
|
||||
{style}
|
||||
size="icon"
|
||||
{...restProps}
|
||||
>
|
||||
{icon.value}
|
||||
</Button>
|
||||
{:else if icon.type === IconEnum.Svg}
|
||||
<span {...restProps} class={cn(className, { invert: icon.invert })}>{@html icon.value}</span>
|
||||
<span
|
||||
{...restProps}
|
||||
class={cn(className, { invert: icon.invert, "dark:invert": icon.darkInvert })}
|
||||
{style}>{@html icon.value}</span
|
||||
>
|
||||
{:else}
|
||||
<Icon
|
||||
icon="mingcute:appstore-fill"
|
||||
class={cn("", className, { invert: icon.invert })}
|
||||
{style}
|
||||
class={cn("", className, { invert: icon.invert, "dark:invert": icon.darkInvert })}
|
||||
{...restProps}
|
||||
/>
|
||||
{/if}
|
||||
|
@ -59,10 +59,6 @@
|
||||
highlightedValue = value
|
||||
}
|
||||
|
||||
$effect(() => {
|
||||
console.log("onListItemSelected", onListItemSelected)
|
||||
})
|
||||
|
||||
$effect(() => {
|
||||
if (highlightedValue.startsWith("{")) {
|
||||
onHighlightedItemChanged?.(JSON.parse(highlightedValue).value)
|
||||
|
@ -22,15 +22,8 @@
|
||||
keywords={cmd.keywords}
|
||||
>
|
||||
<span class="flex gap-2">
|
||||
<IconMultiplexer
|
||||
icon={{ value: cmd.iconifyIcon, type: IconEnum.Iconify }}
|
||||
class="!h-5 !w-5 shrink-0"
|
||||
/>
|
||||
<IconMultiplexer icon={cmd.icon} class="!h-5 !w-5 shrink-0" />
|
||||
<span>{cmd.name}</span>
|
||||
<!-- <pre>{JSON.stringify({
|
||||
cmdName: cmd.name,
|
||||
cmdType: CmdTypeEnum.Builtin
|
||||
})}</pre> -->
|
||||
</span>
|
||||
</Command.Item>
|
||||
{/each}
|
||||
|
@ -2,6 +2,7 @@
|
||||
import { CmdTypeEnum, IconEnum, SysCommand } from "@kksh/api/models"
|
||||
import { Command } from "@kksh/svelte5"
|
||||
import { IconMultiplexer } from "@kksh/ui"
|
||||
import { confirm } from "@tauri-apps/plugin-dialog"
|
||||
import { DraggableCommandGroup } from "../custom"
|
||||
import { CmdValue } from "./types"
|
||||
|
||||
@ -12,8 +13,13 @@
|
||||
{#each systemCommands as cmd}
|
||||
<Command.Item
|
||||
class="flex justify-between"
|
||||
onSelect={() => {
|
||||
cmd.function()
|
||||
onSelect={async () => {
|
||||
if (cmd.confirmRequired) {
|
||||
const confirmed = await confirm(`Are you sure you want to run ${cmd.name}?`)
|
||||
if (confirmed) {
|
||||
cmd.function()
|
||||
}
|
||||
}
|
||||
}}
|
||||
value={JSON.stringify({
|
||||
cmdName: cmd.name,
|
||||
|
@ -11,7 +11,7 @@ export type BuiltinCmd = {
|
||||
id: string
|
||||
name: string
|
||||
description: string
|
||||
iconifyIcon: string
|
||||
icon: Icon
|
||||
keywords?: string[]
|
||||
function: () => Promise<void>
|
||||
flags?: {
|
||||
|
5
packages/ui/src/utils/style.ts
Normal file
5
packages/ui/src/utils/style.ts
Normal file
@ -0,0 +1,5 @@
|
||||
export function styleObjectToString(style: Record<string, string>) {
|
||||
return Object.entries(style)
|
||||
.map(([key, value]) => `${key}: ${value};`)
|
||||
.join("")
|
||||
}
|
45
pnpm-lock.yaml
generated
45
pnpm-lock.yaml
generated
@ -629,17 +629,17 @@ importers:
|
||||
version: link:../supabase
|
||||
typescript:
|
||||
specifier: ^5.0.0
|
||||
version: 5.5.4
|
||||
version: 5.6.3
|
||||
valibot:
|
||||
specifier: ^0.40.0
|
||||
version: 0.40.0(typescript@5.5.4)
|
||||
version: 0.40.0(typescript@5.6.3)
|
||||
devDependencies:
|
||||
'@gcornut/valibot-json-schema':
|
||||
specifier: ^0.42.0
|
||||
version: 0.42.0(esbuild@0.24.0)(typescript@5.5.4)
|
||||
'@types/bun':
|
||||
specifier: latest
|
||||
version: 1.1.13
|
||||
'@valibot/to-json-schema':
|
||||
specifier: 1.0.0-beta.3
|
||||
version: 1.0.0-beta.3(valibot@0.40.0(typescript@5.6.3))
|
||||
|
||||
packages/supabase:
|
||||
dependencies:
|
||||
@ -1960,10 +1960,6 @@ packages:
|
||||
resolution: {integrity: sha512-3xGptCurm23e7nuPQkdrE5rEs1FeTPHhAUsBuwwqG4/YeZLwJOoYZv+fmsppUEfo5y9lzUwNQrNqLS/q7HMc7g==}
|
||||
hasBin: true
|
||||
|
||||
'@gcornut/valibot-json-schema@0.42.0':
|
||||
resolution: {integrity: sha512-4Et4AN6wmqeA0PfU5Clkv/IS27wiefsWf6TemAZrb75uzkClYEFavim7SboeKwbll9Nbsn2Iv0LT/HS5H7orZg==}
|
||||
hasBin: true
|
||||
|
||||
'@hapi/hoek@9.3.0':
|
||||
resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
|
||||
|
||||
@ -4396,6 +4392,11 @@ packages:
|
||||
'@unovis/ts': 1.4.4
|
||||
vue: ^3
|
||||
|
||||
'@valibot/to-json-schema@1.0.0-beta.3':
|
||||
resolution: {integrity: sha512-20XQh1u5sOLwS3NOB7oHCo3clQ9h4GlavXgLKMux2PYpHowb7P97cND0dg8T3+fE1WoKVACcLppvzAPpSx0F+Q==}
|
||||
peerDependencies:
|
||||
valibot: ^1.0.0 || ^1.0.0-beta.5 || ^1.0.0-rc
|
||||
|
||||
'@vee-validate/zod@4.14.7':
|
||||
resolution: {integrity: sha512-UD0Tfyz1cKKd7BinnUztqKL+oeMjg/T4ZEguN/uZV4DsR9z7gdrD0lOuOU7aVl9UpVK6NM7MhDka35Lj7b/DTw==}
|
||||
|
||||
@ -9486,14 +9487,6 @@ packages:
|
||||
typescript:
|
||||
optional: true
|
||||
|
||||
valibot@0.42.1:
|
||||
resolution: {integrity: sha512-3keXV29Ar5b//Hqi4MbSdV7lfVp6zuYLZuA9V1PvQUsXqogr+u5lvLPLk3A4f74VUXDnf/JfWMN6sB+koJ/FFw==}
|
||||
peerDependencies:
|
||||
typescript: '>=5'
|
||||
peerDependenciesMeta:
|
||||
typescript:
|
||||
optional: true
|
||||
|
||||
valibot@1.0.0-beta.7:
|
||||
resolution: {integrity: sha512-8CsDu3tqyg7quEHMzCOYdQ/d9NlmVQKtd4AlFje6oJpvqo70EIZjSakKIeWltJyNAiUtdtLe0LAk4625gavoeQ==}
|
||||
peerDependencies:
|
||||
@ -11129,16 +11122,6 @@ snapshots:
|
||||
esbuild-runner: 2.2.2(esbuild@0.24.0)
|
||||
optional: true
|
||||
|
||||
'@gcornut/valibot-json-schema@0.42.0(esbuild@0.24.0)(typescript@5.5.4)':
|
||||
dependencies:
|
||||
valibot: 0.42.1(typescript@5.5.4)
|
||||
optionalDependencies:
|
||||
'@types/json-schema': 7.0.15
|
||||
esbuild-runner: 2.2.2(esbuild@0.24.0)
|
||||
transitivePeerDependencies:
|
||||
- esbuild
|
||||
- typescript
|
||||
|
||||
'@hapi/hoek@9.3.0':
|
||||
optional: true
|
||||
|
||||
@ -14312,6 +14295,10 @@ snapshots:
|
||||
'@unovis/ts': 1.4.4
|
||||
vue: 3.5.13(typescript@5.6.3)
|
||||
|
||||
'@valibot/to-json-schema@1.0.0-beta.3(valibot@0.40.0(typescript@5.6.3))':
|
||||
dependencies:
|
||||
valibot: 0.40.0(typescript@5.6.3)
|
||||
|
||||
'@vee-validate/zod@4.14.7(vue@3.5.13(typescript@5.6.3))':
|
||||
dependencies:
|
||||
type-fest: 4.27.0
|
||||
@ -20363,10 +20350,6 @@ snapshots:
|
||||
optionalDependencies:
|
||||
typescript: 5.6.3
|
||||
|
||||
valibot@0.42.1(typescript@5.5.4):
|
||||
optionalDependencies:
|
||||
typescript: 5.5.4
|
||||
|
||||
valibot@1.0.0-beta.7(typescript@5.6.3):
|
||||
optionalDependencies:
|
||||
typescript: 5.6.3
|
||||
|
Loading…
x
Reference in New Issue
Block a user