From 8440aaf05c64c4f07d8466c05c872d31270162b5 Mon Sep 17 00:00:00 2001 From: 0xzion <0xzion.penx@gmail.com> Date: Sat, 29 Jun 2024 16:46:26 +0800 Subject: [PATCH] feat: support FormApp --- .prettierrc | 6 +- apps/desktop/.env | 4 +- apps/desktop/package.json | 1 + apps/desktop/src/App.tsx | 3 + .../CommandPalette/CommandApp/CommandApp.tsx | 9 +- .../CommandApp/DatabaseApp/DatabaseDetail.tsx | 5 +- .../CommandApp/FormApp/FormApp.tsx | 46 ++++++ .../CommandApp/ListApp/Accessory.tsx | 39 +++++ .../CommandApp/ListApp/ListApp.tsx | 30 ++-- .../CommandApp/ListApp/ListItemUI.tsx | 76 +++++++++ .../ListApp/domains/ListItem.domain.ts | 44 ++++++ .../CommandPalette/CommandItemUI.tsx | 71 +++++++++ .../CommandPalette/CommandPalette.tsx | 10 +- .../CommandPalette/CommandPaletteFooter.tsx | 1 - .../components/CommandPalette/ListItemUI.tsx | 124 --------------- .../SearchBar/ActionPopover.tsx | 3 + .../SearchBar/CommandAppActions.tsx | 32 +++- apps/desktop/src/custom-types.ts | 17 ++ apps/desktop/src/fomir-uikit/Form.tsx | 26 ++++ apps/desktop/src/fomir-uikit/FormField.tsx | 80 ++++++++++ apps/desktop/src/fomir-uikit/fields/Box.tsx | 13 ++ .../src/fomir-uikit/fields/Checkbox.tsx | 19 +++ .../src/fomir-uikit/fields/CheckboxGroup.tsx | 21 +++ .../src/fomir-uikit/fields/CounterInput.tsx | 40 +++++ apps/desktop/src/fomir-uikit/fields/Input.tsx | 54 +++++++ .../src/fomir-uikit/fields/NumberInput.tsx | 20 +++ .../src/fomir-uikit/fields/PasswordInput.tsx | 39 +++++ .../src/fomir-uikit/fields/RadioGroup.tsx | 21 +++ apps/desktop/src/fomir-uikit/fields/Reset.tsx | 15 ++ .../desktop/src/fomir-uikit/fields/Select.tsx | 15 ++ .../desktop/src/fomir-uikit/fields/Submit.tsx | 15 ++ .../desktop/src/fomir-uikit/fields/Switch.tsx | 20 +++ .../src/fomir-uikit/fields/Textarea.tsx | 19 +++ .../src/fomir-uikit/fomir-uikit-node.ts | 91 +++++++++++ apps/desktop/src/fomir-uikit/index.ts | 40 +++++ .../preset-ui/developer/.gitignore | 4 + .../preset-ui/developer/.prettierrc | 7 + .../preset-ui/developer/README.md | 1 + .../preset-ui/developer/assets/logo.svg | 1 + .../preset-ui/developer/manifest.json | 20 +++ .../preset-ui/developer/package.json | 15 ++ .../developer/src/create-extension.command.ts | 27 ++++ .../preset-ui/developer/tsconfig.json | 17 ++ .../preset-ui/src/components/FormApp.ts | 88 +++++++++++ .../preset-ui/src/components/ListApp.ts | 15 +- external-packages/preset-ui/src/index.ts | 1 + external-packages/preset-ui/src/types.ts | 12 +- .../react/src/components/actions/Action.ts | 2 + .../src/components/actions/OpenInBrowser.tsx | 1 - .../src/components/actions/SubmitForm.tsx | 24 +++ packages/icons/src/IconCloseSolid.tsx | 13 ++ packages/icons/src/index.ts | 1 + packages/model/src/Command.ts | 5 - packages/uikit/src/select/Select.tsx | 87 +++++------ packages/uikit/src/select/SelectTrigger.tsx | 60 ++++--- pnpm-lock.yaml | 146 ++++++++++++------ 56 files changed, 1326 insertions(+), 290 deletions(-) create mode 100644 apps/desktop/src/components/CommandPalette/CommandApp/FormApp/FormApp.tsx create mode 100644 apps/desktop/src/components/CommandPalette/CommandApp/ListApp/Accessory.tsx create mode 100644 apps/desktop/src/components/CommandPalette/CommandApp/ListApp/ListItemUI.tsx create mode 100644 apps/desktop/src/components/CommandPalette/CommandApp/ListApp/domains/ListItem.domain.ts create mode 100644 apps/desktop/src/components/CommandPalette/CommandItemUI.tsx delete mode 100644 apps/desktop/src/components/CommandPalette/ListItemUI.tsx create mode 100644 apps/desktop/src/custom-types.ts create mode 100644 apps/desktop/src/fomir-uikit/Form.tsx create mode 100644 apps/desktop/src/fomir-uikit/FormField.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/Box.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/Checkbox.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/CheckboxGroup.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/CounterInput.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/Input.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/NumberInput.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/PasswordInput.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/RadioGroup.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/Reset.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/Select.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/Submit.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/Switch.tsx create mode 100644 apps/desktop/src/fomir-uikit/fields/Textarea.tsx create mode 100644 apps/desktop/src/fomir-uikit/fomir-uikit-node.ts create mode 100644 apps/desktop/src/fomir-uikit/index.ts create mode 100644 extension-samples/preset-ui/developer/.gitignore create mode 100644 extension-samples/preset-ui/developer/.prettierrc create mode 100644 extension-samples/preset-ui/developer/README.md create mode 100644 extension-samples/preset-ui/developer/assets/logo.svg create mode 100644 extension-samples/preset-ui/developer/manifest.json create mode 100644 extension-samples/preset-ui/developer/package.json create mode 100644 extension-samples/preset-ui/developer/src/create-extension.command.ts create mode 100644 extension-samples/preset-ui/developer/tsconfig.json create mode 100644 external-packages/preset-ui/src/components/FormApp.ts create mode 100644 external-packages/react/src/components/actions/SubmitForm.tsx create mode 100644 packages/icons/src/IconCloseSolid.tsx diff --git a/.prettierrc b/.prettierrc index 412f31d74..e10492961 100644 --- a/.prettierrc +++ b/.prettierrc @@ -4,7 +4,9 @@ "singleQuote": true, "trailingComma": "all", "printWidth": 100, - "plugins": ["@ianvs/prettier-plugin-sort-imports"], + "plugins": [ + "@ianvs/prettier-plugin-sort-imports" + ], "importOrder": [ "^react", "", @@ -14,4 +16,4 @@ "^~(.*)$", "^[./]" ] -} +} \ No newline at end of file diff --git a/apps/desktop/.env b/apps/desktop/.env index 5c8d27e2d..f4077a02d 100644 --- a/apps/desktop/.env +++ b/apps/desktop/.env @@ -1,5 +1,5 @@ -# VITE_API_URL=https://app.penx.io -VITE_API_URL=http://localhost:3000 +VITE_API_URL=https://app.penx.io +# VITE_API_URL=http://localhost:3000 NEXT_PUBLIC_PLATFORM=DESKTOP diff --git a/apps/desktop/package.json b/apps/desktop/package.json index f136c5dfc..acc53dbb5 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -58,6 +58,7 @@ "add": "^2.0.6", "clsx": "^2.1.0", "cmdk": "^1.0.0", + "fomir": "^0.22.0", "idb-keyval": "^6.2.1", "jotai": "^2.6.0", "ky": "^1.1.3", diff --git a/apps/desktop/src/App.tsx b/apps/desktop/src/App.tsx index e05436979..6fcb54ddf 100644 --- a/apps/desktop/src/App.tsx +++ b/apps/desktop/src/App.tsx @@ -5,6 +5,7 @@ import { appEmitter } from '@penx/event' import { StoreProvider } from '@penx/store' import { TrpcProvider } from '@penx/trpc-client' import '@glideapps/glide-data-grid/dist/index.css' +import { Fomir } from 'fomir' import { fixPathEnv } from 'tauri-plugin-shellx-api' import { registerDefaultAppHotkey } from '@penx/app' import { handleEscape } from './common/handleEscape' @@ -18,9 +19,11 @@ import { useInitThemeMode } from './hooks/useInitThemeMode' import { MainApp } from './MainApp' import '~/styles/globals.css' import '~/styles/command.scss' +import FomirUIkit from './fomir-uikit' import { config } from './config' initFower() +Fomir.use(FomirUIkit) async function init() { handleEscape() diff --git a/apps/desktop/src/components/CommandPalette/CommandApp/CommandApp.tsx b/apps/desktop/src/components/CommandPalette/CommandApp/CommandApp.tsx index 5c8c78f52..7e6469fe3 100644 --- a/apps/desktop/src/components/CommandPalette/CommandApp/CommandApp.tsx +++ b/apps/desktop/src/components/CommandPalette/CommandApp/CommandApp.tsx @@ -1,7 +1,7 @@ import { memo, useEffect } from 'react' import isEqual from 'react-fast-compare' import { Box } from '@fower/react' -import { IListItem, isListApp, isMarkdownJSON } from '@penxio/preset-ui' +import { isFormApp, isListApp, isMarkdownJSON } from '@penxio/preset-ui' import { Spinner } from 'uikit' import { Command } from '@penx/model' import { store } from '@penx/store' @@ -11,6 +11,7 @@ import { CommandAppUI } from '~/hooks/useCommandAppUI' import { AboutApp } from './AboutApp' import { ClipboardHistoryApp } from './ClipboardHistoryApp' import { DatabaseApp } from './DatabaseApp/DatabaseApp' +import { FormApp } from './FormApp/FormApp' import { GeneralSettings } from './GeneralSettings/GeneralSettings' import { InstalledExtensionsApp } from './InstalledExtensionsApp/InstalledExtensionsApp' import { ListApp } from './ListApp/ListApp' @@ -68,6 +69,8 @@ export const CommandApp = memo( if (ui.type === 'render') { const component = ui.component as any + console.log('=======component:', component) + if (isMarkdownJSON(component)) { return } @@ -75,6 +78,10 @@ export const CommandApp = memo( if (isListApp(component)) { return } + + if (isFormApp(component)) { + return + } } return null diff --git a/apps/desktop/src/components/CommandPalette/CommandApp/DatabaseApp/DatabaseDetail.tsx b/apps/desktop/src/components/CommandPalette/CommandApp/DatabaseApp/DatabaseDetail.tsx index f816cb997..3609b6033 100644 --- a/apps/desktop/src/components/CommandPalette/CommandApp/DatabaseApp/DatabaseDetail.tsx +++ b/apps/desktop/src/components/CommandPalette/CommandApp/DatabaseApp/DatabaseDetail.tsx @@ -11,10 +11,9 @@ import { IViewNode, } from '@penx/model-types' import { mappedByKey } from '@penx/shared' -import { ICommandItem } from '~/common/types' import { useValue } from '~/hooks/useValue' import { StyledCommandEmpty, StyledCommandGroup } from '../../CommandComponents' -import { ListItemUI } from '../../ListItemUI' +import { CommandItemUI } from '../../CommandItemUI' import { RowForm } from './RowForm' interface Props { @@ -92,7 +91,7 @@ export function DatabaseDetail(props: Props) { value: item.row.id, } as any - return + return })} diff --git a/apps/desktop/src/components/CommandPalette/CommandApp/FormApp/FormApp.tsx b/apps/desktop/src/components/CommandPalette/CommandApp/FormApp/FormApp.tsx new file mode 100644 index 000000000..57f15c80c --- /dev/null +++ b/apps/desktop/src/components/CommandPalette/CommandApp/FormApp/FormApp.tsx @@ -0,0 +1,46 @@ +import { memo } from 'react' +import { Box } from '@fower/react' +import { FormJSON } from '@penxio/preset-ui' +import { Form, useForm } from 'fomir' + +interface FormAppProps { + component: FormJSON +} + +export const FormApp = memo(function FormApp({ component }: FormAppProps) { + console.log('=========component:', component) + + const form = useForm({ + onSubmit(values) { + alert(JSON.stringify(values, null, 2)) + console.log('values', values) + }, + children: [ + ...component.fields, + // { + // label: 'First Name', + // name: 'firstName', + // component: 'Input', + // value: '', + // validators: { + // required: 'First Name is requiredFirst Name is required', + // }, + // }, + // { + // label: 'Last Name', + // name: 'lastName', + // component: 'Input', + // value: '', + // validators: { + // required: 'First Name is required', + // }, + // }, + ], + }) + + return ( + +
+ + ) +}) diff --git a/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/Accessory.tsx b/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/Accessory.tsx new file mode 100644 index 000000000..66889b60d --- /dev/null +++ b/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/Accessory.tsx @@ -0,0 +1,39 @@ +import { ReactNode, useMemo } from 'react' +import { Box } from '@fower/react' +import { IAccessory, isAccessoryObjectText } from '@penxio/preset-ui' +import { useCurrentCommand } from '~/hooks/useCurrentCommand' +import { ListItemIcon } from '../../ListItemIcon' + +interface AccessoryProps { + item: IAccessory +} + +export function Accessory({ item }: AccessoryProps) { + const { currentCommand } = useCurrentCommand() + const assets = currentCommand?.extension?.assets || {} + + let text: ReactNode = useMemo(() => { + if (typeof item.text === 'string' || typeof item.text === 'number') { + return {item.text} + } + if (isAccessoryObjectText(item.text)) { + return {item.text?.value || ''} + } + return null + }, [item.text]) + let tag: ReactNode = item.tag ? ( + + {item.tag.value} + + ) : null + + let icon: ReactNode = item.icon ? : null + + return ( + + {icon} + {text} + {tag} + + ) +} diff --git a/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/ListApp.tsx b/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/ListApp.tsx index 3e3e1832a..48961cd97 100644 --- a/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/ListApp.tsx +++ b/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/ListApp.tsx @@ -8,8 +8,9 @@ import { workerStore } from '~/common/workerStore' import { useSearch } from '~/hooks/useSearch' import { useValue } from '~/hooks/useValue' import { StyledCommandGroup } from '../../CommandComponents' -import { ListItemUI } from '../../ListItemUI' import { Detail } from './Detail' +import { ListItem } from './domains/ListItem.domain' +import { ListItemUI } from './ListItemUI' interface ListAppProps { component: ListJSON @@ -23,17 +24,20 @@ export const ListApp = memo(function ListApp({ component }: ListAppProps) { const filteredItems = !filtering ? items - : items.filter((item) => { - return item.title.toString().toLowerCase().includes(search.toLowerCase()) + : items.filter((item, index) => { + const listItem = new ListItem(item, index) + return listItem.title.toLowerCase().includes(search.toLowerCase()) }) useEffect(() => { - const find = component.items.find((item) => item.title === value) + if (!items.length) return + const find = items.find((_, index) => String(index) === value) + if (!find) { - const firstItem = component.items.find((item) => !item.type) - firstItem && setValue(firstItem.title as string) + const firstItem = new ListItem(items[0], 0) + firstItem && setValue(firstItem.value) } - }, [component, value, setValue]) + }, [items, value, setValue]) useEffect(() => { if (value && isShowingDetail && items.length) { @@ -61,17 +65,17 @@ export const ListApp = memo(function ListApp({ component }: ListAppProps) { scrollPaddingBlockStart: 8, }} > - {filteredItems.sort().map((item, index) => { + {filteredItems.sort().map((raw, index) => { + const item = new ListItem(raw, index) return ( { - if (item.actions?.[0]) { - const defaultAction = item.actions?.[0] + if (raw.actions?.[0]) { + const defaultAction = raw.actions?.[0] if (defaultAction.type === 'OpenInBrowser') { open(defaultAction.url) const appWindow = getCurrent() diff --git a/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/ListItemUI.tsx b/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/ListItemUI.tsx new file mode 100644 index 000000000..b697b6569 --- /dev/null +++ b/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/ListItemUI.tsx @@ -0,0 +1,76 @@ +import { Box, FowerHTMLProps } from '@fower/react' +import { useCurrentCommand } from '~/hooks/useCurrentCommand' +import { StyledCommandItem } from '../../CommandComponents' +import { ListItemIcon } from '../../ListItemIcon' +import { Accessory } from './Accessory' +import { ListItem } from './domains/ListItem.domain' + +interface ListItemUIProps extends Omit, 'onSelect'> { + index: number + item: ListItem + titleLayout?: 'column' | 'row' + onSelect?: () => Promise +} + +export const ListItemUI = ({ + item, + index, + titleLayout = 'row', + onSelect, + ...rest +}: ListItemUIProps) => { + const { currentCommand } = useCurrentCommand() + + // if (item.type === 'list-heading') { + // return ( + // 0}> + // {title} + // + // ) + // } + + function select() { + if (onSelect) { + onSelect() + } else { + // TODO:... + // commandService.handleSelect() + } + } + + return ( + + + + + {item.title} + + {item.subtitle} + + + + {item?.extra && ( + + {item.extra.map((extra, index) => ( + + ))} + + )} + + ) +} diff --git a/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/domains/ListItem.domain.ts b/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/domains/ListItem.domain.ts new file mode 100644 index 000000000..7257cca72 --- /dev/null +++ b/apps/desktop/src/components/CommandPalette/CommandApp/ListApp/domains/ListItem.domain.ts @@ -0,0 +1,44 @@ +import { IListItem, isTooltipValue } from '@penxio/preset-ui' + +export class ListItem { + constructor( + public raw: IListItem, + public index: number, + ) {} + + get title() { + if (isTooltipValue(this.raw.title)) { + return this.raw.title.value + } + if (typeof this.raw.title === 'string') { + return this.raw.title + } + return '' + } + + get subtitle() { + if (isTooltipValue(this.raw.subtitle)) { + return this.raw.subtitle.value + } + if (typeof this.raw.subtitle === 'string') { + return this.raw.subtitle + } + return '' + } + + get value() { + return this.index.toString() + } + + get icon() { + return this.raw.icon + } + + get keywords() { + return [this.title, this.subtitle] + } + + get extra() { + return this.raw.extra + } +} diff --git a/apps/desktop/src/components/CommandPalette/CommandItemUI.tsx b/apps/desktop/src/components/CommandPalette/CommandItemUI.tsx new file mode 100644 index 000000000..3d3ded31c --- /dev/null +++ b/apps/desktop/src/components/CommandPalette/CommandItemUI.tsx @@ -0,0 +1,71 @@ +import { Box, FowerHTMLProps } from '@fower/react' +import { Command } from '@penx/model' +import { CommandService } from '~/services/CommandService' +import { StyledCommandItem } from './CommandComponents' +import { ListItemIcon } from './ListItemIcon' + +interface CommandItemUIProps extends Omit, 'onSelect'> { + index: number + item: Command + titleLayout?: 'column' | 'row' + showIcon?: boolean + onSelect?: () => Promise +} + +export const CommandItemUI = ({ + item, + index, + titleLayout = 'row', + showIcon = true, + onSelect, + ...rest +}: CommandItemUIProps) => { + const commandService = new CommandService(item) + + function select() { + if (onSelect) { + onSelect() + } else { + commandService.handleSelect() + } + } + + return ( + + + {showIcon && } + + {item.title} + + {item.subtitle} + + {item?.alias && ( + + {item.alias} + + )} + + + {!!item?.typeName && ( + + {item?.typeName} + + )} + + ) +} diff --git a/apps/desktop/src/components/CommandPalette/CommandPalette.tsx b/apps/desktop/src/components/CommandPalette/CommandPalette.tsx index 248547cdd..52cb2b04f 100644 --- a/apps/desktop/src/components/CommandPalette/CommandPalette.tsx +++ b/apps/desktop/src/components/CommandPalette/CommandPalette.tsx @@ -11,9 +11,10 @@ import { useOnWindowMessage } from '~/hooks/useOnWindowMessage' import { useReset } from '~/hooks/useReset' import { useValue } from '~/hooks/useValue' import { CommandApp } from './CommandApp/CommandApp' +import { ListItemUI } from './CommandApp/ListApp/ListItemUI' import { StyledCommand, StyledCommandGroup, StyledCommandList } from './CommandComponents' +import { CommandItemUI } from './CommandItemUI' import { CommandPaletteFooter } from './CommandPaletteFooter' -import { ListItemUI } from './ListItemUI' import { BackRootButton } from './SearchBar/BackRootButton' import { SearchBar } from './SearchBar/SearchBar' @@ -44,7 +45,7 @@ export const CommandPalette = () => { if ($prerender && !isLoading) $prerender.style.display = 'none' }, [isLoading]) - // if (isLoading || !commandItems.length) return null + if (isLoading || !commandItems.length) return null return ( { // loop value={value} onValueChange={(v) => { + console.log('v=====:', v) setValue(v) }} // shouldFilter={false} @@ -139,7 +141,7 @@ export const CommandPalette = () => { {developingItems.length > 0 && ( {developingItems.map((item, index) => { - return + return })} )} @@ -170,7 +172,7 @@ function ListGroup({ heading, items }: ListGroupProps) { return ( {items.map((item, index) => { - return + return })} ) diff --git a/apps/desktop/src/components/CommandPalette/CommandPaletteFooter.tsx b/apps/desktop/src/components/CommandPalette/CommandPaletteFooter.tsx index 1fe787973..c08a3eac0 100644 --- a/apps/desktop/src/components/CommandPalette/CommandPaletteFooter.tsx +++ b/apps/desktop/src/components/CommandPalette/CommandPaletteFooter.tsx @@ -1,4 +1,3 @@ -import { useState } from 'react' import { Box } from '@fower/react' import { appEmitter } from '@penx/event' import { IconLogo } from '@penx/icons' diff --git a/apps/desktop/src/components/CommandPalette/ListItemUI.tsx b/apps/desktop/src/components/CommandPalette/ListItemUI.tsx deleted file mode 100644 index 0592328d9..000000000 --- a/apps/desktop/src/components/CommandPalette/ListItemUI.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import { ReactNode, useMemo } from 'react' -import { Box, css, FowerHTMLProps } from '@fower/react' -import { IAccessory, isAccessoryObjectText } from '@penxio/preset-ui' -import { Command } from '@penx/model' -import { useCurrentCommand } from '~/hooks/useCurrentCommand' -import { CommandService } from '~/services/CommandService' -import { StyledCommandItem } from './CommandComponents' -import { ListItemIcon } from './ListItemIcon' - -interface ListItemUIProps extends Omit, 'onSelect'> { - index: number - item: Command - titleLayout?: 'column' | 'row' - showIcon?: boolean - onSelect?: () => Promise -} - -export const ListItemUI = ({ - item, - index, - titleLayout = 'row', - showIcon = true, - onSelect, - ...rest -}: ListItemUIProps) => { - const { currentCommand } = useCurrentCommand() - - // if (item.type === 'list-heading') { - // return ( - // 0}> - // {title} - // - // ) - // } - - const commandService = new CommandService(item) - - function select() { - if (onSelect) { - onSelect() - } else { - commandService.handleSelect() - } - } - - return ( - - - {showIcon && } - - {item.title} - - {item.subtitle} - - {item?.alias && ( - - {item.alias} - - )} - - - {!!item?.typeName && ( - - {item?.typeName} - - )} - {item?.extra && ( - - {item.extra.map((extra, index) => ( - - ))} - - )} - - ) -} - -interface AccessoryProps { - item: IAccessory -} -function Accessory({ item }: AccessoryProps) { - const { currentCommand } = useCurrentCommand() - const assets = currentCommand?.extension?.assets || {} - - let text: ReactNode = useMemo(() => { - if (typeof item.text === 'string' || typeof item.text === 'number') { - return {item.text} - } - if (isAccessoryObjectText(item.text)) { - return {item.text?.value || ''} - } - return null - }, [item.text]) - let tag: ReactNode = item.tag ? ( - - {item.tag.value} - - ) : null - - let icon: ReactNode = item.icon ? : null - - return ( - - {icon} - {text} - {tag} - - ) -} diff --git a/apps/desktop/src/components/CommandPalette/SearchBar/ActionPopover.tsx b/apps/desktop/src/components/CommandPalette/SearchBar/ActionPopover.tsx index 9dab5756c..92d6eceb9 100644 --- a/apps/desktop/src/components/CommandPalette/SearchBar/ActionPopover.tsx +++ b/apps/desktop/src/components/CommandPalette/SearchBar/ActionPopover.tsx @@ -1,5 +1,6 @@ import { useEffect, useState } from 'react' import { Box } from '@fower/react' +import { getCurrent } from '@tauri-apps/api/webviewWindow' import { Kbd, Popover, PopoverContent, PopoverTrigger } from 'uikit' import { appEmitter } from '@penx/event' import { useCommandAppUI } from '~/hooks/useCommandAppUI' @@ -107,6 +108,8 @@ export const ActionPopover = ({}: Props) => { { setOpen(false) + const appWindow = getCurrent() + appWindow.hide() }} /> )} diff --git a/apps/desktop/src/components/CommandPalette/SearchBar/CommandAppActions.tsx b/apps/desktop/src/components/CommandPalette/SearchBar/CommandAppActions.tsx index bb93481a0..df2f4ff40 100644 --- a/apps/desktop/src/components/CommandPalette/SearchBar/CommandAppActions.tsx +++ b/apps/desktop/src/components/CommandPalette/SearchBar/CommandAppActions.tsx @@ -1,7 +1,15 @@ import { useEffect, useMemo, useRef } from 'react' import { Box } from '@fower/react' import * as Comlink from '@huakunshen/comlink' -import { isCopyToClipboard, isCustomAction, isListApp, isOpenInBrowser } from '@penxio/preset-ui' +import { + isCopyToClipboard, + isCustomAction, + isFormApp, + isListApp, + isOpenInBrowser, + isSubmitForm, +} from '@penxio/preset-ui' +import { open } from '@tauri-apps/plugin-shell' import { DoorOpenIcon } from 'lucide-react' import { workerStore } from '~/common/workerStore' import { useCommandAppUI } from '~/hooks/useCommandAppUI' @@ -29,6 +37,11 @@ export const CommandAppActions = ({ onSelect }: Props) => { if (!item?.actions?.length) return [] return item.actions } + + if (isFormApp(ui.component)) { + return ui.component.actions || [] + } + return [] }, [ui, value]) @@ -39,6 +52,19 @@ export const CommandAppActions = ({ onSelect }: Props) => { key={index} shortcut="↵" onSelect={async () => { + if (isOpenInBrowser(item)) { + open(item.url) + } + + if (isCopyToClipboard(item)) { + // + } + + if (isSubmitForm(item)) { + // + console.log('submit form...') + } + if (isCustomAction(item)) { workerStore.currentWorker!.postMessage({ type: 'customAction', @@ -70,5 +96,9 @@ function getDefaultTitle(item: any) { if (isCopyToClipboard(item)) { return 'Copy to clipboard' } + + if (isSubmitForm(item)) { + return 'Submit form' + } return 'TODO:' } diff --git a/apps/desktop/src/custom-types.ts b/apps/desktop/src/custom-types.ts new file mode 100644 index 000000000..fa0ed9893 --- /dev/null +++ b/apps/desktop/src/custom-types.ts @@ -0,0 +1,17 @@ +import { FieldNode } from 'fomir' +import { FomirUIkitNode } from './fomir-uikit/fomir-uikit-node' + +type CustomNode = FomirUIkitNode + +declare module 'fomir' { + interface CustomTypes { + Node: CustomNode & { updatable?: boolean } + // | { + // component: CustomNode['component'] | ({} & string) + // [key: string]: any + // } + } + interface Validators { + moreThan?: [string, string] + } +} diff --git a/apps/desktop/src/fomir-uikit/Form.tsx b/apps/desktop/src/fomir-uikit/Form.tsx new file mode 100644 index 000000000..050042d46 --- /dev/null +++ b/apps/desktop/src/fomir-uikit/Form.tsx @@ -0,0 +1,26 @@ +import React, { FC, forwardRef, PropsWithChildren } from 'react' +import { Box } from '@fower/react' +import { FormRegisterProps, useFormContext } from 'fomir' + +export const Form: FC> = forwardRef< + HTMLFormElement, + PropsWithChildren +>(function FormNode({ children, submitForm }, ref) { + const form = useFormContext() + const { layout = 'vertical' } = form.schema + + return ( + + {children} + + ) +}) diff --git a/apps/desktop/src/fomir-uikit/FormField.tsx b/apps/desktop/src/fomir-uikit/FormField.tsx new file mode 100644 index 000000000..88c882a56 --- /dev/null +++ b/apps/desktop/src/fomir-uikit/FormField.tsx @@ -0,0 +1,80 @@ +import React, { FC, forwardRef, ReactNode } from 'react' +import type { SVGProps } from 'react' +import { Box, FowerHTMLProps } from '@fower/react' +import { Node, useFormContext } from 'fomir' +import { Info } from 'lucide-react' +import { Tooltip, TooltipContent, TooltipTrigger } from 'uikit' + +export interface FormFieldProps extends FowerHTMLProps<'div'> { + showLabel?: boolean + node: Node + renderLabel?: () => ReactNode +} + +export const FormField: FC = forwardRef(function FormFieldComp( + props: FormFieldProps, + ref, +) { + const { children, node, showLabel = true, renderLabel, ...rest } = props + const { schema } = useFormContext() + const { layout = 'horizontal' } = schema + const { error, label, description, touched, wrapper } = node || {} + + if (!wrapper) return <>{children} + return ( + + ) +}) diff --git a/apps/desktop/src/fomir-uikit/fields/Box.tsx b/apps/desktop/src/fomir-uikit/fields/Box.tsx new file mode 100644 index 000000000..2924c764e --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/Box.tsx @@ -0,0 +1,13 @@ +import { css, Box as FowerBox } from '@fower/react' +import { NodeProps } from 'fomir' +import type { BoxNode } from '../fomir-uikit-node' + +export const Box = ({ node }: NodeProps) => { + if (!node.visible) return null + + return ( + + {node.text ? node.text : node.renderChildren?.(node)} + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fields/Checkbox.tsx b/apps/desktop/src/fomir-uikit/fields/Checkbox.tsx new file mode 100644 index 000000000..b2294aa87 --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/Checkbox.tsx @@ -0,0 +1,19 @@ +import React, { FC } from 'react' +import { NodeProps } from 'fomir' +import { CheckboxNode } from '../fomir-uikit-node' +import { Checkbox as BoneCheckbox } from 'uikit' +import { FormField } from '../FormField' + +export const Checkbox: FC> = (props) => { + const { value } = props.node + + function handleChange(e: any) { + props.handler.handleChange(e.target.checked) + } + + return ( + + + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fields/CheckboxGroup.tsx b/apps/desktop/src/fomir-uikit/fields/CheckboxGroup.tsx new file mode 100644 index 000000000..392a64a1f --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/CheckboxGroup.tsx @@ -0,0 +1,21 @@ +import React, { FC } from 'react' +import { NodeProps } from 'fomir' +import { CheckboxGroupNode } from '../fomir-uikit-node' +import { CheckboxGroup as BoneCheckboxGroup, Checkbox } from 'uikit' +import { FormField } from '../FormField' + +export const CheckboxGroup: FC> = (props) => { + const { value, options = [] } = props.node + + return ( + + + {options.map((item: any) => ( + + {item.label} + + ))} + + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fields/CounterInput.tsx b/apps/desktop/src/fomir-uikit/fields/CounterInput.tsx new file mode 100644 index 000000000..7e8403cba --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/CounterInput.tsx @@ -0,0 +1,40 @@ +import { FC } from 'react' +import { NodeProps } from 'fomir' +import { Minus, Plus } from 'lucide-react' +import { CounterInputNode } from '../fomir-uikit-node' +import { Input as BoneInput, InputElement, InputGroup } from 'uikit' +import { FormField } from '../FormField' + +export const CounterInput: FC> = (props) => { + const { value, disabled, componentProps } = props.node + + return ( + + + { + if (componentProps?.min === Number(value)) return + props.handler.handleChange(Number(value) - 1) + }} + > + + + + + + props.handler.handleChange(Number(value) + 1)}> + + + + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fields/Input.tsx b/apps/desktop/src/fomir-uikit/fields/Input.tsx new file mode 100644 index 000000000..3fa6d7fd9 --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/Input.tsx @@ -0,0 +1,54 @@ +import { FC, useRef } from 'react' +import { Box } from '@fower/react' +import { NodeProps, useFormContext } from 'fomir' +import { InputNode } from '../fomir-uikit-node' +import { Input as BoneInput, InputElement, InputGroup } from 'uikit' +import { IconCloseSolid } from '@penx/icons' +import { FormField } from '../FormField' + +export const Input: FC> = (props) => { + const form = useFormContext() + const { value = '', focused, error, disabled, name, componentProps } = props.node + const ref = useRef(null) + const { w = '100p' } = componentProps || {} + + return ( + + + { + form.setFieldState(name, { focused: true }) + }} + onBlur={() => { + form.setFieldState(name, { focused: false }) + }} + onChange={props.handler.handleChange} + {...componentProps} + /> + {!!value?.length && focused && ( + + { + props.handler.handleChange('') + ref.current?.focus() + }} + > + + + + )} + + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fields/NumberInput.tsx b/apps/desktop/src/fomir-uikit/fields/NumberInput.tsx new file mode 100644 index 000000000..325b0325f --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/NumberInput.tsx @@ -0,0 +1,20 @@ +import { FC } from 'react' +import { NodeProps } from 'fomir' +import { NumberInputNode } from '../fomir-uikit-node' +import { Input as BoneInput } from 'uikit' +import { FormField } from '../FormField' + +export const NumberInput: FC> = (props) => { + const { value, disabled, componentProps } = props.node + return ( + + + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fields/PasswordInput.tsx b/apps/desktop/src/fomir-uikit/fields/PasswordInput.tsx new file mode 100644 index 000000000..9df79105b --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/PasswordInput.tsx @@ -0,0 +1,39 @@ +import React, { FC, useState } from 'react' +import { Box } from '@fower/react' +import { NodeProps } from 'fomir' +import { Eye, EyeOff } from 'lucide-react' +import { InputNode } from '../fomir-uikit-node' +import { Input as BoneInput, InputElement, InputGroup } from 'uikit' +import { FormField } from '../FormField' + +export const PasswordInput: FC> = (props) => { + const { value, disabled, componentProps } = props.node + const [type, setType] = useState<'password' | 'text'>('password') + + return ( + + + + + {type === 'password' && ( + + setType('text')} /> + + )} + + {type === 'text' && ( + + setType('password')} /> + + )} + + + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fields/RadioGroup.tsx b/apps/desktop/src/fomir-uikit/fields/RadioGroup.tsx new file mode 100644 index 000000000..fb4223182 --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/RadioGroup.tsx @@ -0,0 +1,21 @@ +import React, { FC } from 'react' +import { NodeProps } from 'fomir' +import { RadioGroupNode } from '../fomir-uikit-node' +import { RadioGroup as BoneRadioGroup, Radio } from 'uikit' +import { FormField } from '../FormField' + +export const RadioGroup: FC> = (props) => { + const { value, options = [], componentProps } = props.node + + return ( + + + {options.map((item) => ( + + {item.label} + + ))} + + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fields/Reset.tsx b/apps/desktop/src/fomir-uikit/fields/Reset.tsx new file mode 100644 index 000000000..65997edf6 --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/Reset.tsx @@ -0,0 +1,15 @@ +import { NodeProps, useFormContext } from 'fomir' +import { Button } from 'uikit' +import { FormField } from '../FormField' + +export const Reset = ({ node }: NodeProps) => { + const { text, componentProps } = node + const form = useFormContext() + return ( + + + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fields/Select.tsx b/apps/desktop/src/fomir-uikit/fields/Select.tsx new file mode 100644 index 000000000..cd23af2c7 --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/Select.tsx @@ -0,0 +1,15 @@ +import { FC } from 'react' +import { NodeProps } from 'fomir' +import { SelectNode } from '../fomir-uikit-node' +import { Select as BoneSelect } from 'uikit' +import { FormField } from '../FormField' + +export const Select: FC> = (props) => { + const { value, componentProps, options = [], display, wrapper } = props.node + + return ( + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fields/Submit.tsx b/apps/desktop/src/fomir-uikit/fields/Submit.tsx new file mode 100644 index 000000000..01422268c --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/Submit.tsx @@ -0,0 +1,15 @@ +import { NodeProps } from 'fomir' +import { SubmitNode } from '../fomir-uikit-node' +import { Button } from 'uikit' +import { FormField } from '../FormField' + +export const Submit = ({ node }: NodeProps) => { + const { text, componentProps } = node + return ( + + + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fields/Switch.tsx b/apps/desktop/src/fomir-uikit/fields/Switch.tsx new file mode 100644 index 000000000..0202ecc99 --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/Switch.tsx @@ -0,0 +1,20 @@ +import React, { ChangeEvent, FC } from 'react' +import { NodeProps } from 'fomir' +import { Switch as BoneSwitch } from 'uikit' +import { FormField } from '../FormField' + +export const Switch: FC> = (props) => { + const { value, label, componentProps } = props.node + + function handleChange(e: ChangeEvent) { + props.handler.handleChange(e.target.checked) + } + + return ( + + + {label} + + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fields/Textarea.tsx b/apps/desktop/src/fomir-uikit/fields/Textarea.tsx new file mode 100644 index 000000000..95a6d05ec --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fields/Textarea.tsx @@ -0,0 +1,19 @@ +import React, { FC } from 'react' +import { NodeProps } from 'fomir' +import { TextareaNode } from '../fomir-uikit-node' +import { Textarea as BoneTextarea } from 'uikit' +import { FormField } from '../FormField' + +export const Textarea: FC> = (props) => { + const { value, componentProps } = props.node + + return ( + + + + ) +} diff --git a/apps/desktop/src/fomir-uikit/fomir-uikit-node.ts b/apps/desktop/src/fomir-uikit/fomir-uikit-node.ts new file mode 100644 index 000000000..25145026e --- /dev/null +++ b/apps/desktop/src/fomir-uikit/fomir-uikit-node.ts @@ -0,0 +1,91 @@ +import { InputHTMLAttributes } from 'react' +import { AtomicProps } from '@fower/atomic-props' +import { BaseNode, FieldNode, Node } from 'fomir' +import { ButtonProps, InputProps, RadioGroupProps, SelectProps, SwitchProps } from 'uikit' + +export interface InputNode extends FieldNode { + component: 'Input' + value?: string | null + componentProps?: InputProps +} + +export interface NumberInputNode extends FieldNode { + component: 'NumberInput' + value?: number + componentProps?: InputProps +} + +export interface CounterInputNode extends FieldNode { + component: 'CounterInput' + value?: number + componentProps?: InputProps +} + +export interface PasswordInputNode extends FieldNode { + component: 'PasswordInput' + value?: string + componentProps?: InputProps +} + +export interface SelectNode extends FieldNode { + component: 'Select' + componentProps?: SelectProps +} + +export interface CheckboxNode extends FieldNode { + component: 'Checkbox' + componentProps?: InputHTMLAttributes +} + +export interface CheckboxGroupNode extends FieldNode { + component: 'CheckboxGroup' +} + +export interface RadioGroupNode extends FieldNode { + component: 'RadioGroup' + componentProps?: RadioGroupProps +} + +export interface TextareaNode extends FieldNode { + component: 'Textarea' +} + +export interface SwitchNode extends FieldNode { + component: 'Switch' + componentProps?: SwitchProps & AtomicProps +} + +export interface ResetNode extends BaseNode { + component: 'Reset' + text: string + componentProps?: ButtonProps & AtomicProps +} + +export interface SubmitNode extends BaseNode { + component: 'Submit' + text: string + componentProps?: ButtonProps & Omit +} + +export interface BoxNode extends BaseNode { + component: 'Box' + id?: string + css?: string + text?: string + children?: Node[] +} + +export type FomirUIkitNode = + | InputNode + | PasswordInputNode + | NumberInputNode + | SelectNode + | CheckboxNode + | CheckboxGroupNode + | RadioGroupNode + | TextareaNode + | SwitchNode + | ResetNode + | SubmitNode + | BoxNode + | CounterInputNode diff --git a/apps/desktop/src/fomir-uikit/index.ts b/apps/desktop/src/fomir-uikit/index.ts new file mode 100644 index 000000000..3c0262144 --- /dev/null +++ b/apps/desktop/src/fomir-uikit/index.ts @@ -0,0 +1,40 @@ +import { FomirPlugin } from 'fomir' +import { Box } from './fields/Box' +import { Checkbox } from './fields/Checkbox' +import { CheckboxGroup } from './fields/CheckboxGroup' +import { CounterInput } from './fields/CounterInput' +import { Input } from './fields/Input' +import { NumberInput } from './fields/NumberInput' +import { PasswordInput } from './fields/PasswordInput' +import { RadioGroup } from './fields/RadioGroup' +import { Reset } from './fields/Reset' +import { Select } from './fields/Select' +import { Submit } from './fields/Submit' +import { Switch } from './fields/Switch' +import { Textarea } from './fields/Textarea' +import { Form } from './Form' + +export { FormField } from './FormField' + +export type { FomirUIkitNode as BoneUINode } from './fomir-uikit-node' + +export const FomirBoneUI: FomirPlugin = { + components: { + Form, + Input, + PasswordInput, + NumberInput, + CounterInput, + Checkbox, + Switch, + RadioGroup, + CheckboxGroup, + Textarea, + Select, + Reset, + Submit, + Box, + }, +} + +export default FomirBoneUI diff --git a/extension-samples/preset-ui/developer/.gitignore b/extension-samples/preset-ui/developer/.gitignore new file mode 100644 index 000000000..0e1a8353b --- /dev/null +++ b/extension-samples/preset-ui/developer/.gitignore @@ -0,0 +1,4 @@ +node_modules +.DS_Store +dist +*.log \ No newline at end of file diff --git a/extension-samples/preset-ui/developer/.prettierrc b/extension-samples/preset-ui/developer/.prettierrc new file mode 100644 index 000000000..fa295cd75 --- /dev/null +++ b/extension-samples/preset-ui/developer/.prettierrc @@ -0,0 +1,7 @@ +{ + "semi": false, + "tabWidth": 2, + "singleQuote": true, + "trailingComma": "all", + "printWidth": 80 +} \ No newline at end of file diff --git a/extension-samples/preset-ui/developer/README.md b/extension-samples/preset-ui/developer/README.md new file mode 100644 index 000000000..f2f553c64 --- /dev/null +++ b/extension-samples/preset-ui/developer/README.md @@ -0,0 +1 @@ +# Counter diff --git a/extension-samples/preset-ui/developer/assets/logo.svg b/extension-samples/preset-ui/developer/assets/logo.svg new file mode 100644 index 000000000..2e8e722e3 --- /dev/null +++ b/extension-samples/preset-ui/developer/assets/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/extension-samples/preset-ui/developer/manifest.json b/extension-samples/preset-ui/developer/manifest.json new file mode 100644 index 000000000..e1e1ae0ac --- /dev/null +++ b/extension-samples/preset-ui/developer/manifest.json @@ -0,0 +1,20 @@ +{ + "name": "developer", + "title": "Developer", + "description": "PenX Developer Tools", + "icon": { + "name": "lucide--braces" + }, + "commands": [ + { + "name": "create-extension", + "title": "Create Extension", + "subtitle": "", + "description": "", + "icon": { + "name": "lucide--braces" + }, + "mode": "preset-ui" + } + ] +} diff --git a/extension-samples/preset-ui/developer/package.json b/extension-samples/preset-ui/developer/package.json new file mode 100644 index 000000000..abed824d8 --- /dev/null +++ b/extension-samples/preset-ui/developer/package.json @@ -0,0 +1,15 @@ +{ + "name": "developer", + "private": true, + "scripts": { + "dev": "penx dev", + "release": "penx release" + }, + "devDependencies": { + "@penxio/preset-ui": "workspace:*", + "@penxio/api": "workspace:*", + "penx-cli": "workspace:*", + "prettier": "^3.2.5", + "typescript": "^5.3.2" + } +} diff --git a/extension-samples/preset-ui/developer/src/create-extension.command.ts b/extension-samples/preset-ui/developer/src/create-extension.command.ts new file mode 100644 index 000000000..2710d0960 --- /dev/null +++ b/extension-samples/preset-ui/developer/src/create-extension.command.ts @@ -0,0 +1,27 @@ +import { FormApp } from '@penxio/preset-ui' + +export function main() { + const app = new FormApp({ + fields: [ + { + label: 'First Name', + name: 'firstName', + component: 'Input', + }, + { + label: 'Last Name', + name: 'lastName', + component: 'Input', + }, + ], + actions: [ + { + type: 'SubmitForm', + onSubmit: async (values) => { + console.log('======values:', values) + // + }, + }, + ], + }).run() +} diff --git a/extension-samples/preset-ui/developer/tsconfig.json b/extension-samples/preset-ui/developer/tsconfig.json new file mode 100644 index 000000000..562c94951 --- /dev/null +++ b/extension-samples/preset-ui/developer/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "esnext", + "strict": true, + "lib": ["ESNext", "DOM"], + "esModuleInterop": true, + "moduleResolution": "node", + "skipLibCheck": true, + "noUnusedLocals": true, + "noImplicitAny": true, + "allowJs": true, + "noEmit": true, + "outDir": "dist", + "resolveJsonModule": true + } +} diff --git a/external-packages/preset-ui/src/components/FormApp.ts b/external-packages/preset-ui/src/components/FormApp.ts new file mode 100644 index 000000000..5a8fc7ba3 --- /dev/null +++ b/external-packages/preset-ui/src/components/FormApp.ts @@ -0,0 +1,88 @@ +import { EventType } from '../constants' +import { ActionItem, isCustomAction, isSubmitForm } from '../types' +import { isCustomActionPayload } from './ListApp' + +interface IField { + label: string + name: string + component: 'Input' + value?: any +} + +interface State { + isLoading: boolean + fields: IField[] + actions?: ActionItem[] +} + +export interface FormJSON extends State { + type: 'form' +} + +export function isFormApp(json: any): json is FormJSON { + return json.type === 'form' +} + +export class FormApp { + state: State + + constructor(initialState: Partial) { + this.state = { + fields: [], + isLoading: false, + ...initialState, + } as State + } + + setState = (nextState: Partial) => { + this.state = { + ...this.state, + ...nextState, + } + this.render() + } + + run = () => { + this.render() + + self.addEventListener('message', async (event) => { + if (isCustomActionPayload(event.data)) { + // const action = this.state.actions![event.data] + // isCustomAction(action) && action.onClick?.() + } + + console.log('========event.data:', event.data) + + // handle function detail + }) + return this + } + + private formatState(state: State) { + const newActions = state.actions?.map((action) => { + if (isSubmitForm(action)) { + const { onSubmit, ...rest } = action + return rest + } + + if (isCustomAction(action)) { + const { onClick, ...rest } = action + return rest + } + return action + }) + + return { ...this.state, actions: newActions } + } + + private render = () => { + postMessage({ + type: EventType.Render, + payload: { + type: 'form', + ...this.state, + ...this.formatState(this.state), + }, + }) + } +} diff --git a/external-packages/preset-ui/src/components/ListApp.ts b/external-packages/preset-ui/src/components/ListApp.ts index d5095ad4a..3b3abdb00 100644 --- a/external-packages/preset-ui/src/components/ListApp.ts +++ b/external-packages/preset-ui/src/components/ListApp.ts @@ -28,14 +28,14 @@ export interface IListItem { | string | { value: string - tooltip?: string | null + tooltip?: string } subtitle?: | string | { - value?: string | null - tooltip?: string | null + value?: string + tooltip?: string } icon?: ImageLike | ObjectIcon @@ -49,6 +49,15 @@ export interface IListItem { data?: any } +interface TooltipValue { + value: string + tooltip?: string +} + +export function isTooltipValue(value: any): value is TooltipValue { + return typeof value === 'object' && Reflect.has(value, 'value') +} + export function isObjectIcon(icon: any): icon is ObjectIcon { return typeof icon === 'object' && icon?.value !== undefined } diff --git a/external-packages/preset-ui/src/index.ts b/external-packages/preset-ui/src/index.ts index fd1202c64..cded459fb 100644 --- a/external-packages/preset-ui/src/index.ts +++ b/external-packages/preset-ui/src/index.ts @@ -7,3 +7,4 @@ export * from './onFilterChange' export * from './components/MarkdownApp' export * from './components/ListApp' +export * from './components/FormApp' diff --git a/external-packages/preset-ui/src/types.ts b/external-packages/preset-ui/src/types.ts index 1eb2b7249..6b4333386 100644 --- a/external-packages/preset-ui/src/types.ts +++ b/external-packages/preset-ui/src/types.ts @@ -44,6 +44,16 @@ export function isCopyToClipboard(obj: any): obj is CopyToClipboard { return obj.type === 'CopyToClipboard' } +export type SubmitForm = { + type: 'SubmitForm' + title?: string + onSubmit: (values: any) => Promise | void +} + +export function isSubmitForm(obj: any): obj is SubmitForm { + return obj.type === 'SubmitForm' +} + export type CustomAction = { type: 'CustomAction' title?: string @@ -54,4 +64,4 @@ export function isCustomAction(obj: any): obj is CustomAction { return obj.type === 'CustomAction' } -export type ActionItem = OpenInBrowser | CopyToClipboard | CustomAction +export type ActionItem = OpenInBrowser | CopyToClipboard | SubmitForm | CustomAction diff --git a/external-packages/react/src/components/actions/Action.ts b/external-packages/react/src/components/actions/Action.ts index 2b087e128..f50afde88 100644 --- a/external-packages/react/src/components/actions/Action.ts +++ b/external-packages/react/src/components/actions/Action.ts @@ -1,9 +1,11 @@ import { CopyToClipboard } from './CopyToClipboard' import { Item } from './Item' import { OpenInBrowser } from './OpenInBrowser' +import { SubmitForm } from './SubmitForm' export const Action = { CopyToClipboard, OpenInBrowser, + SubmitForm, Item, } diff --git a/external-packages/react/src/components/actions/OpenInBrowser.tsx b/external-packages/react/src/components/actions/OpenInBrowser.tsx index 25fa6084a..936f7eba4 100644 --- a/external-packages/react/src/components/actions/OpenInBrowser.tsx +++ b/external-packages/react/src/components/actions/OpenInBrowser.tsx @@ -1,4 +1,3 @@ -import { ReactNode } from 'react' import { shell } from '@penxio/api' import { BaseActionProps } from '../../types' import { ListActionItem } from './ListActionItem' diff --git a/external-packages/react/src/components/actions/SubmitForm.tsx b/external-packages/react/src/components/actions/SubmitForm.tsx new file mode 100644 index 000000000..699ece0f6 --- /dev/null +++ b/external-packages/react/src/components/actions/SubmitForm.tsx @@ -0,0 +1,24 @@ +import { BaseActionProps } from '../../types' +import { ListActionItem } from './ListActionItem' + +interface SubmitFormProps extends BaseActionProps { + onSubmit: (values: any) => Promise | void +} +export function SubmitForm({ + title = 'Open in Browser', + shortcut, + icon = { name: 'lucide--globe' }, + onSubmit, +}: SubmitFormProps) { + return ( + { + onSubmit({ foo: 'bar' }) + }} + > + {title} + + ) +} diff --git a/packages/icons/src/IconCloseSolid.tsx b/packages/icons/src/IconCloseSolid.tsx new file mode 100644 index 000000000..ec9b473ab --- /dev/null +++ b/packages/icons/src/IconCloseSolid.tsx @@ -0,0 +1,13 @@ +import { iconify } from 'uikit' + +export const IconCloseSolid = iconify({ + displayName: 'IconCloseSolid', + viewBox: '0 0 24 24', + atomicProps: { + neutral500: true, + }, + pathProps: { + fill: 'currentColor', + }, + d: 'M12 2c5.53 0 10 4.47 10 10s-4.47 10-10 10S2 17.53 2 12S6.47 2 12 2m3.59 5L12 10.59L8.41 7L7 8.41L10.59 12L7 15.59L8.41 17L12 13.41L15.59 17L17 15.59L13.41 12L17 8.41z', +}) diff --git a/packages/icons/src/index.ts b/packages/icons/src/index.ts index 2381f3b08..a5e6acc97 100644 --- a/packages/icons/src/index.ts +++ b/packages/icons/src/index.ts @@ -35,3 +35,4 @@ export * from './IconImage' export * from './IconSwap' export * from './IconDiscord' export * from './IconWalletConnect' +export * from './IconCloseSolid' diff --git a/packages/model/src/Command.ts b/packages/model/src/Command.ts index 32b6907c8..b42a88eb0 100644 --- a/packages/model/src/Command.ts +++ b/packages/model/src/Command.ts @@ -87,11 +87,6 @@ export class Command { return this.name || '' } - // TODO: - get extra(): any[] | null { - return null as any - } - get filters() { return this.commandRaw.filters } diff --git a/packages/uikit/src/select/Select.tsx b/packages/uikit/src/select/Select.tsx index 07e2f8a9b..03027242c 100644 --- a/packages/uikit/src/select/Select.tsx +++ b/packages/uikit/src/select/Select.tsx @@ -10,53 +10,44 @@ const sizes: Record = { lg: 48, } -export const Select = forwardRef( - function Select(props, ref) { - const { - children, - onChange, - value, - size = 'md', - placement = 'bottom', - portal, - } = props - - const [selectedValue, setSelectedValue] = useState(value) - const [selectedItem, setSelectedItem] = useState('') - - useEffect(() => { - if (selectedValue !== value) { - setSelectedValue(value) - } - }, [value, setSelectedValue, selectedValue]) - - function setValue(value: any) { - setSelectedValue(value) - onChange && onChange(value) - } +export const Select = forwardRef(function Select(props, ref) { + const { children, onChange, value, size = 'md', placement = 'bottom', portal } = props - const ctxValue = { - value: selectedValue, - setValue, - } + const [selectedValue, setSelectedValue] = useState(value) + const [selectedItem, setSelectedItem] = useState('') - const height: any = sizes[size] || size - - return ( - - - - {children} - - - - ) - }, -) + useEffect(() => { + if (selectedValue !== value) { + setSelectedValue(value) + } + }, [value, setSelectedValue, selectedValue]) + + function setValue(value: any) { + setSelectedValue(value) + onChange && onChange(value) + } + + const ctxValue = { + value: selectedValue, + setValue, + } + + const height: any = sizes[size] || size + + return ( + + + + {children} + + + + ) +}) diff --git a/packages/uikit/src/select/SelectTrigger.tsx b/packages/uikit/src/select/SelectTrigger.tsx index 304a93e8b..e23ec6722 100644 --- a/packages/uikit/src/select/SelectTrigger.tsx +++ b/packages/uikit/src/select/SelectTrigger.tsx @@ -8,36 +8,34 @@ export interface SelectTriggerProps extends FowerHTMLProps<'div'> { } export const SelectTrigger = memo( - forwardRef( - function SelectTrigger(props, ref) { - const { height } = useSelectContext() - const { loading, ...rest } = props - const { selectedItem } = useSelectContext() + forwardRef(function SelectTrigger(props, ref) { + const { height } = useSelectContext() + const { loading, ...rest } = props + const { selectedItem } = useSelectContext() - return ( - - {({ isOpen }) => { - return ( - - {props.children} - - ) - }} - - ) - }, - ), + return ( + + {({ isOpen }) => { + return ( + + {props.children} + + ) + }} + + ) + }), ) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8af0b1113..7c2a96efd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -186,6 +186,9 @@ importers: cmdk: specifier: ^1.0.0 version: 1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + fomir: + specifier: ^0.22.0 + version: 0.22.0 idb-keyval: specifier: ^6.2.1 version: 6.2.1 @@ -589,7 +592,7 @@ importers: version: 3.2.1 plasmo: specifier: ^0.84.1 - version: 0.84.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)(cssnano@6.1.2(postcss@8.4.38))(handlebars@4.7.8)(lodash@4.17.21)(postcss@8.4.38)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(srcset@4.0.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.2.2))(underscore@1.13.6) + version: 0.84.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)(babel-core@7.0.0-bridge.0(@babel/core@7.24.7))(cssnano@6.1.2(postcss@8.4.38))(handlebars@4.7.8)(lodash@4.17.21)(postcss@8.4.38)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(srcset@4.0.0)(terser@5.31.1)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.2.2))(underscore@1.13.6) prismjs: specifier: ^1.29.0 version: 1.29.0 @@ -1114,6 +1117,24 @@ importers: specifier: ^5.3.2 version: 5.5.2 + extension-samples/preset-ui/developer: + devDependencies: + '@penxio/api': + specifier: workspace:* + version: link:../../../external-packages/api + '@penxio/preset-ui': + specifier: workspace:* + version: link:../../../external-packages/preset-ui + penx-cli: + specifier: workspace:* + version: link:../../../external-packages/cli + prettier: + specifier: ^3.2.5 + version: 3.3.2 + typescript: + specifier: ^5.3.2 + version: 5.5.2 + extension-samples/preset-ui/github-trending: devDependencies: '@penxio/api': @@ -1950,7 +1971,7 @@ importers: dependencies: '@udecode/plate-common': specifier: 24.3.1 - version: 24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + version: 24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -2555,7 +2576,7 @@ importers: version: link:../unique-id '@udecode/plate-common': specifier: ^24.5.2 - version: 24.5.2(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + version: 24.5.2(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) date-fns: specifier: ^2.30.0 version: 2.30.0 @@ -2968,7 +2989,7 @@ importers: version: link:../../store '@udecode/plate-common': specifier: ^24.5.2 - version: 24.5.2(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + version: 24.5.2(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -3181,7 +3202,7 @@ importers: version: link:../../slate-lists '@udecode/plate-common': specifier: ^24.5.2 - version: 24.5.2(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + version: 24.5.2(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) lucide-react: specifier: ^0.344.0 version: 0.344.0(react@18.3.1) @@ -3338,7 +3359,7 @@ importers: version: 5.48.0(react@18.3.1) '@udecode/plate-common': specifier: ^25.0.1 - version: 25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + version: 25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) classnames: specifier: ^2.3.2 version: 2.5.1 @@ -12234,6 +12255,10 @@ packages: resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} + array-move@3.0.1: + resolution: {integrity: sha512-H3Of6NIn2nNU1gsVDqDnYKY/LCdWvCMMOWifNGhKcVQgiZ6nOek39aESOvro6zmueP07exSl93YLvkN4fZOkSg==} + engines: {node: '>=10'} + array-move@4.0.0: resolution: {integrity: sha512-+RY54S8OuVvg94THpneQvFRmqWdAHeqtMzgMW6JNurHxe8rsS07cHQdfGkXnTUXiBcyZ0j3SiDIxxj0RPiqCkQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -14424,6 +14449,10 @@ packages: debug: optional: true + fomir@0.22.0: + resolution: {integrity: sha512-otQGCwN5LztkrTzuGa87Xe1rRVuzhiLYsyPWYS0T7ksZYKxGv5bbv++s14cCe8rXTys3Medjt8Eu5AuwX4rRtw==} + engines: {node: '>=14.0.0'} + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -15461,6 +15490,9 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} @@ -23943,14 +23975,14 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@parcel/config-default@2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.11)(cssnano@6.1.2(postcss@8.4.38))(postcss@8.4.38)(srcset@4.0.0)(typescript@5.2.2)': + '@parcel/config-default@2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.11)(cssnano@6.1.2(postcss@8.4.38))(postcss@8.4.38)(srcset@4.0.0)(terser@5.31.1)(typescript@5.2.2)': dependencies: '@parcel/bundler-default': 2.9.3(@parcel/core@2.9.3) '@parcel/compressor-raw': 2.9.3(@parcel/core@2.9.3) '@parcel/core': 2.9.3 '@parcel/namer-default': 2.9.3(@parcel/core@2.9.3) '@parcel/optimizer-css': 2.9.3(@parcel/core@2.9.3) - '@parcel/optimizer-htmlnano': 2.9.3(@parcel/core@2.9.3)(cssnano@6.1.2(postcss@8.4.38))(postcss@8.4.38)(srcset@4.0.0)(typescript@5.2.2) + '@parcel/optimizer-htmlnano': 2.9.3(@parcel/core@2.9.3)(cssnano@6.1.2(postcss@8.4.38))(postcss@8.4.38)(srcset@4.0.0)(terser@5.31.1)(typescript@5.2.2) '@parcel/optimizer-image': 2.9.3(@parcel/core@2.9.3) '@parcel/optimizer-svgo': 2.9.3(@parcel/core@2.9.3) '@parcel/optimizer-swc': 2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.11) @@ -24124,10 +24156,10 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@parcel/optimizer-htmlnano@2.9.3(@parcel/core@2.9.3)(cssnano@6.1.2(postcss@8.4.38))(postcss@8.4.38)(srcset@4.0.0)(typescript@5.2.2)': + '@parcel/optimizer-htmlnano@2.9.3(@parcel/core@2.9.3)(cssnano@6.1.2(postcss@8.4.38))(postcss@8.4.38)(srcset@4.0.0)(terser@5.31.1)(typescript@5.2.2)': dependencies: '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) - htmlnano: 2.1.1(cssnano@6.1.2(postcss@8.4.38))(postcss@8.4.38)(srcset@4.0.0)(svgo@2.8.0)(typescript@5.2.2) + htmlnano: 2.1.1(cssnano@6.1.2(postcss@8.4.38))(postcss@8.4.38)(srcset@4.0.0)(svgo@2.8.0)(terser@5.31.1)(typescript@5.2.2) nullthrows: 1.1.1 posthtml: 0.16.6 svgo: 2.8.0 @@ -24667,10 +24699,11 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@plasmohq/consolidate@0.17.0(handlebars@4.7.8)(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.6)': + '@plasmohq/consolidate@0.17.0(babel-core@7.0.0-bridge.0(@babel/core@7.24.7))(handlebars@4.7.8)(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.6)': dependencies: bluebird: 3.7.2 optionalDependencies: + babel-core: 7.0.0-bridge.0(@babel/core@7.24.7) handlebars: 4.7.8 lodash: 4.17.21 react: 18.3.1 @@ -24695,10 +24728,10 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@plasmohq/parcel-config@0.40.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)(cssnano@6.1.2(postcss@8.4.38))(handlebars@4.7.8)(lodash@4.17.21)(postcss@8.4.38)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(srcset@4.0.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.2.2))(typescript@5.2.2)(underscore@1.13.6)': + '@plasmohq/parcel-config@0.40.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)(babel-core@7.0.0-bridge.0(@babel/core@7.24.7))(cssnano@6.1.2(postcss@8.4.38))(handlebars@4.7.8)(lodash@4.17.21)(postcss@8.4.38)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(srcset@4.0.0)(terser@5.31.1)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.2.2))(typescript@5.2.2)(underscore@1.13.6)': dependencies: '@parcel/compressor-raw': 2.9.3(@parcel/core@2.9.3) - '@parcel/config-default': 2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.11)(cssnano@6.1.2(postcss@8.4.38))(postcss@8.4.38)(srcset@4.0.0)(typescript@5.2.2) + '@parcel/config-default': 2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.11)(cssnano@6.1.2(postcss@8.4.38))(postcss@8.4.38)(srcset@4.0.0)(terser@5.31.1)(typescript@5.2.2) '@parcel/core': 2.9.3 '@parcel/optimizer-data-url': 2.9.3(@parcel/core@2.9.3) '@parcel/reporter-bundle-buddy': 2.9.3(@parcel/core@2.9.3) @@ -24731,7 +24764,7 @@ snapshots: '@plasmohq/parcel-transformer-inline-css': 0.3.11 '@plasmohq/parcel-transformer-manifest': 0.17.9 '@plasmohq/parcel-transformer-svelte': 0.5.2 - '@plasmohq/parcel-transformer-vue': 0.5.0(handlebars@4.7.8)(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.6) + '@plasmohq/parcel-transformer-vue': 0.5.0(babel-core@7.0.0-bridge.0(@babel/core@7.24.7))(handlebars@4.7.8)(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.6) transitivePeerDependencies: - '@swc/core' - '@swc/helpers' @@ -24912,7 +24945,7 @@ snapshots: '@parcel/utils': 2.9.3 svelte: 4.0.1 - '@plasmohq/parcel-transformer-vue@0.5.0(handlebars@4.7.8)(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.6)': + '@plasmohq/parcel-transformer-vue@0.5.0(babel-core@7.0.0-bridge.0(@babel/core@7.24.7))(handlebars@4.7.8)(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.6)': dependencies: '@parcel/core': 2.9.3 '@parcel/diagnostic': 2.9.3 @@ -24920,7 +24953,7 @@ snapshots: '@parcel/source-map': 2.1.1 '@parcel/types': 2.9.3(@parcel/core@2.9.3) '@parcel/utils': 2.9.3 - '@plasmohq/consolidate': 0.17.0(handlebars@4.7.8)(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.6) + '@plasmohq/consolidate': 0.17.0(babel-core@7.0.0-bridge.0(@babel/core@7.24.7))(handlebars@4.7.8)(lodash@4.17.21)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(underscore@1.13.6) '@vue/compiler-sfc': 3.3.4 nullthrows: 1.1.1 semver: 7.5.4 @@ -27051,10 +27084,10 @@ snapshots: '@typescript-eslint/types': 7.14.1 eslint-visitor-keys: 3.4.3 - '@udecode/plate-common@24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': + '@udecode/plate-common@24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': dependencies: - '@udecode/plate-core': 24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) - '@udecode/plate-utils': 24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + '@udecode/plate-core': 24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + '@udecode/plate-utils': 24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) '@udecode/slate': 24.3.1(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) '@udecode/slate-react': 24.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) '@udecode/slate-utils': 24.3.1(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) @@ -27079,10 +27112,10 @@ snapshots: - wonka - xstate - '@udecode/plate-common@24.5.2(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': + '@udecode/plate-common@24.5.2(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': dependencies: - '@udecode/plate-core': 24.4.0(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) - '@udecode/plate-utils': 24.5.2(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + '@udecode/plate-core': 24.4.0(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + '@udecode/plate-utils': 24.5.2(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) '@udecode/slate': 24.3.6(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) '@udecode/slate-react': 24.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) '@udecode/slate-utils': 24.3.6(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) @@ -27107,10 +27140,10 @@ snapshots: - wonka - xstate - '@udecode/plate-common@25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': + '@udecode/plate-common@25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': dependencies: - '@udecode/plate-core': 25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) - '@udecode/plate-utils': 25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + '@udecode/plate-core': 25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + '@udecode/plate-utils': 25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) '@udecode/slate': 25.0.0(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) '@udecode/slate-react': 25.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) '@udecode/slate-utils': 25.0.0(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) @@ -27135,13 +27168,13 @@ snapshots: - wonka - xstate - '@udecode/plate-core@24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': + '@udecode/plate-core@24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': dependencies: '@udecode/slate': 24.3.1(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) '@udecode/slate-react': 24.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) '@udecode/slate-utils': 24.3.1(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) '@udecode/utils': 24.3.0 - '@udecode/zustood': 1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(zustand@3.7.2(react@18.3.1)) + '@udecode/zustood': 1.1.3(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(zustand@3.7.2(react@18.3.1)) clsx: 1.2.1 is-hotkey: 0.2.0 jotai: 1.7.2(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react@18.3.1)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) @@ -27169,13 +27202,13 @@ snapshots: - wonka - xstate - '@udecode/plate-core@24.4.0(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': + '@udecode/plate-core@24.4.0(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': dependencies: '@udecode/slate': 24.3.6(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) '@udecode/slate-react': 24.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) '@udecode/slate-utils': 24.3.6(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) '@udecode/utils': 24.3.0 - '@udecode/zustood': 1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(zustand@3.7.2(react@18.3.1)) + '@udecode/zustood': 1.1.3(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(zustand@3.7.2(react@18.3.1)) clsx: 1.2.1 is-hotkey: 0.2.0 jotai: 1.7.2(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react@18.3.1)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) @@ -27203,13 +27236,13 @@ snapshots: - wonka - xstate - '@udecode/plate-core@25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': + '@udecode/plate-core@25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': dependencies: '@udecode/slate': 25.0.0(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) '@udecode/slate-react': 25.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) '@udecode/slate-utils': 25.0.0(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) '@udecode/utils': 24.3.0 - '@udecode/zustood': 1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(zustand@3.7.2(react@18.3.1)) + '@udecode/zustood': 1.1.3(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(zustand@3.7.2(react@18.3.1)) clsx: 1.2.1 is-hotkey: 0.2.0 jotai: 1.7.2(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react@18.3.1)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) @@ -27237,10 +27270,10 @@ snapshots: - wonka - xstate - '@udecode/plate-utils@24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': + '@udecode/plate-utils@24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': dependencies: '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@udecode/plate-core': 24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + '@udecode/plate-core': 24.3.1(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) '@udecode/slate': 24.3.1(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) '@udecode/slate-react': 24.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) '@udecode/slate-utils': 24.3.1(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) @@ -27267,10 +27300,10 @@ snapshots: - wonka - xstate - '@udecode/plate-utils@24.5.2(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': + '@udecode/plate-utils@24.5.2(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': dependencies: '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@udecode/plate-core': 24.4.0(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + '@udecode/plate-core': 24.4.0(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) '@udecode/slate': 24.3.6(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) '@udecode/slate-react': 24.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) '@udecode/slate-utils': 24.3.6(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) @@ -27297,10 +27330,10 @@ snapshots: - wonka - xstate - '@udecode/plate-utils@25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': + '@udecode/plate-utils@25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(@types/react@18.3.3)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1))': dependencies: '@radix-ui/react-slot': 1.1.0(@types/react@18.3.3)(react@18.3.1) - '@udecode/plate-core': 25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) + '@udecode/plate-core': 25.0.1(@babel/core@7.24.7)(@babel/template@7.24.7)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(slate-history@0.100.0(slate@0.103.0))(slate-hyperscript@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0)(valtio@1.11.2(@types/react@18.3.3)(react@18.3.1)) '@udecode/slate': 25.0.0(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) '@udecode/slate-react': 25.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate-history@0.100.0(slate@0.103.0))(slate-react@0.102.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0))(slate@0.103.0) '@udecode/slate-utils': 25.0.0(slate-history@0.100.0(slate@0.103.0))(slate@0.103.0) @@ -27401,10 +27434,10 @@ snapshots: '@udecode/utils@24.3.0': {} - '@udecode/zustood@1.1.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2)(zustand@3.7.2(react@18.3.1))': + '@udecode/zustood@1.1.3(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505)(zustand@3.7.2(react@18.3.1))': dependencies: immer: 9.0.21 - react-tracked: 1.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2) + react-tracked: 1.7.14(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505) zustand: 3.7.2(react@18.3.1) transitivePeerDependencies: - react @@ -28266,6 +28299,8 @@ snapshots: get-intrinsic: 1.2.4 is-string: 1.0.7 + array-move@3.0.1: {} + array-move@4.0.0: {} array-union@2.1.0: {} @@ -30798,7 +30833,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.4 + debug: 4.3.5(supports-color@5.5.0) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -30938,6 +30973,12 @@ snapshots: follow-redirects@1.15.6: {} + fomir@0.22.0: + dependencies: + array-move: 3.0.1 + is-promise: 4.0.0 + react-fast-compare: 3.2.2 + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -31766,7 +31807,7 @@ snapshots: html5-qrcode@2.3.8: {} - htmlnano@2.1.1(cssnano@6.1.2(postcss@8.4.38))(postcss@8.4.38)(srcset@4.0.0)(svgo@2.8.0)(typescript@5.2.2): + htmlnano@2.1.1(cssnano@6.1.2(postcss@8.4.38))(postcss@8.4.38)(srcset@4.0.0)(svgo@2.8.0)(terser@5.31.1)(typescript@5.2.2): dependencies: cosmiconfig: 9.0.0(typescript@5.2.2) posthtml: 0.16.6 @@ -31776,6 +31817,7 @@ snapshots: postcss: 8.4.38 srcset: 4.0.0 svgo: 2.8.0 + terser: 5.31.1 transitivePeerDependencies: - typescript @@ -32192,6 +32234,8 @@ snapshots: is-plain-object@5.0.0: {} + is-promise@4.0.0: {} + is-reference@3.0.2: dependencies: '@types/estree': 1.0.5 @@ -34794,7 +34838,7 @@ snapshots: mlly: 1.7.1 pathe: 1.1.2 - plasmo@0.84.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)(cssnano@6.1.2(postcss@8.4.38))(handlebars@4.7.8)(lodash@4.17.21)(postcss@8.4.38)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(srcset@4.0.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.2.2))(underscore@1.13.6): + plasmo@0.84.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)(babel-core@7.0.0-bridge.0(@babel/core@7.24.7))(cssnano@6.1.2(postcss@8.4.38))(handlebars@4.7.8)(lodash@4.17.21)(postcss@8.4.38)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(srcset@4.0.0)(terser@5.31.1)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.2.2))(underscore@1.13.6): dependencies: '@expo/spawn-async': 1.7.2 '@parcel/core': 2.9.3 @@ -34802,7 +34846,7 @@ snapshots: '@parcel/package-manager': 2.9.3(@parcel/core@2.9.3) '@parcel/watcher': 2.2.0 '@plasmohq/init': 0.7.0 - '@plasmohq/parcel-config': 0.40.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)(cssnano@6.1.2(postcss@8.4.38))(handlebars@4.7.8)(lodash@4.17.21)(postcss@8.4.38)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(srcset@4.0.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.2.2))(typescript@5.2.2)(underscore@1.13.6) + '@plasmohq/parcel-config': 0.40.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)(babel-core@7.0.0-bridge.0(@babel/core@7.24.7))(cssnano@6.1.2(postcss@8.4.38))(handlebars@4.7.8)(lodash@4.17.21)(postcss@8.4.38)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(srcset@4.0.0)(terser@5.31.1)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.2.2))(typescript@5.2.2)(underscore@1.13.6) '@plasmohq/parcel-core': 0.1.8 buffer: 6.0.3 chalk: 5.3.0 @@ -35431,7 +35475,7 @@ snapshots: proxy-agent@6.3.1: dependencies: agent-base: 7.1.1 - debug: 4.3.4 + debug: 4.3.5(supports-color@5.5.0) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 lru-cache: 7.18.3 @@ -35926,14 +35970,15 @@ snapshots: transitivePeerDependencies: - '@types/react' - react-tracked@1.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2): + react-tracked@1.7.14(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505): dependencies: proxy-compare: 2.6.0 react: 18.3.1 - scheduler: 0.23.2 - use-context-selector: 1.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2) + scheduler: 0.24.0-canary-efb381bbf-20230505 + use-context-selector: 1.4.4(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505) optionalDependencies: react-dom: 18.3.1(react@18.3.1) + react-native: 0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4) react-virtuoso@4.7.11(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -36641,7 +36686,7 @@ snapshots: socks-proxy-agent@8.0.4: dependencies: agent-base: 7.1.1 - debug: 4.3.4 + debug: 4.3.5(supports-color@5.5.0) socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -37774,12 +37819,13 @@ snapshots: dependencies: react: 18.3.1 - use-context-selector@1.4.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(scheduler@0.23.2): + use-context-selector@1.4.4(react-dom@18.3.1(react@18.3.1))(react-native@0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4))(react@18.3.1)(scheduler@0.24.0-canary-efb381bbf-20230505): dependencies: react: 18.3.1 - scheduler: 0.23.2 + scheduler: 0.24.0-canary-efb381bbf-20230505 optionalDependencies: react-dom: 18.3.1(react@18.3.1) + react-native: 0.74.2(@babel/core@7.24.7)(@babel/preset-env@7.24.7(@babel/core@7.24.7))(@types/react@18.3.3)(bufferutil@4.0.8)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@6.0.4) use-debounce@9.0.4(react@18.3.1): dependencies: