diff --git a/src/App.tsx b/src/App.tsx index b736c21..3d092f1 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -162,6 +162,7 @@ type TasksProps = StackProps & { const Tasks = (props: TasksProps) => ( { const Upload = (props: FileUpload.RootProps) => { return ( - + drop your files here { const url = URL.createObjectURL(blob); @@ -23,6 +31,7 @@ const downloadFile = (blob: Blob, fileName: string) => { }; const Task = (process: TaskState, selectedAccount: Account | undefined) => { + const [dialogOpen, setDialogOpen] = createSignal(false); const statusError = (error: string) => ( { const statusSuccess = (result: Blob) => { return ( <> - - downloadFile( - result, - process.file.name - .split(".") - .slice(0, -1) - .join(".") - .concat(".mp4"), - ) - } - variant="ghost" - > - - ( - - - - )} + openSignal={[dialogOpen, setDialogOpen]} account={selectedAccount} result={result} /> + + ( + + + + )} + /> + + + + + + + + + ); }; @@ -104,6 +135,7 @@ const Task = (process: TaskState, selectedAccount: Account | undefined) => { { mediaRecorder?.mimeType || mimeType || fallbackMimeType; const fileExtension = usedMime.split("/")[1]?.split(";")[0] || "webm"; const blob = new Blob(audioChunks, { type: usedMime }); - const file = new File( - [blob], - `rec-${new Date().toISOString().replace(/:/g, "-")}.${fileExtension}`, - { type: usedMime }, - ); + const fileDate = new Date() + .toLocaleTimeString() + .replace(/:/g, "-") + .replace(/\s+/g, "_"); + const file = new File([blob], `rec-${fileDate}.${fileExtension}`, { + type: usedMime, + }); addTask(props.selectedAccount(), file); audioChunks = []; diff --git a/src/components/PostDialog.tsx b/src/components/PostDialog.tsx index b63e546..db0300e 100644 --- a/src/components/PostDialog.tsx +++ b/src/components/PostDialog.tsx @@ -1,4 +1,4 @@ -import { Component, createSignal } from "solid-js"; +import { Component, createSignal, Signal } from "solid-js"; import { SendIcon, XIcon } from "lucide-solid"; import { Stack } from "styled-system/jsx"; @@ -16,19 +16,16 @@ import { Textarea } from "~/components/ui/textarea"; import { Account } from "~/lib/accounts"; const PostDialog = (props: { - trigger: Component; result: Blob; account: Account | undefined; + openSignal: Signal; }) => { const [postContent, setPostContent] = createSignal(""); const [posting, setPosting] = createSignal(false); - const [open, setOpen] = createSignal(false); + const [open, setOpen] = props.openSignal; return ( setOpen(e.open)}> - } - /> diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx index 64b6dc7..879ce9d 100644 --- a/src/components/Settings.tsx +++ b/src/components/Settings.tsx @@ -224,13 +224,15 @@ const Settings = () => { }; const Accounts = () => { - const item = (account: Account) => ( + const item = (account: Account, isLatest: boolean) => ( {account.handle ? `@${account.handle}` : account.did} @@ -253,13 +255,17 @@ const Settings = () => { } > - {item} + {(acc, idx) => item(acc, idx() === accounts.length - 1)} ); return ( accounts - + { @@ -376,13 +383,11 @@ const Settings = () => { signal={[backgroundColor, setBackgroundColor]} /> - - - + diff --git a/src/components/ui/menu.tsx b/src/components/ui/menu.tsx new file mode 100644 index 0000000..8884a71 --- /dev/null +++ b/src/components/ui/menu.tsx @@ -0,0 +1 @@ +export * as Menu from './styled/menu' diff --git a/src/components/ui/styled/menu.tsx b/src/components/ui/styled/menu.tsx new file mode 100644 index 0000000..2516d76 --- /dev/null +++ b/src/components/ui/styled/menu.tsx @@ -0,0 +1,98 @@ +import { type Assign, Menu } from '@ark-ui/solid' +import type { ComponentProps } from 'solid-js' +import { type MenuVariantProps, menu } from 'styled-system/recipes' +import type { HTMLStyledProps } from 'styled-system/types' +import { createStyleContext } from './utils/create-style-context' + +const { withRootProvider, withContext } = createStyleContext(menu) + +export type RootProviderProps = ComponentProps +export const RootProvider = withRootProvider>( + Menu.RootProvider, +) + +export type RootProps = ComponentProps +export const Root = withRootProvider>(Menu.Root) + +export const Arrow = withContext, Menu.ArrowBaseProps>>( + Menu.Arrow, + 'arrow', +) + +export const ArrowTip = withContext, Menu.ArrowTipBaseProps>>( + Menu.ArrowTip, + 'arrowTip', +) + +export const CheckboxItem = withContext, Menu.CheckboxItemBaseProps>>( + Menu.CheckboxItem, + 'item', +) + +export const Content = withContext, Menu.ContentBaseProps>>( + Menu.Content, + 'content', +) + +export const ContextTrigger = withContext< + Assign, Menu.ContextTriggerBaseProps> +>(Menu.ContextTrigger, 'contextTrigger') + +export const Indicator = withContext, Menu.IndicatorBaseProps>>( + Menu.Indicator, + 'indicator', +) + +export const ItemGroupLabel = withContext< + Assign, Menu.ItemGroupLabelBaseProps> +>(Menu.ItemGroupLabel, 'itemGroupLabel') + +export const ItemGroup = withContext, Menu.ItemGroupBaseProps>>( + Menu.ItemGroup, + 'itemGroup', +) + +export const ItemIndicator = withContext< + Assign, Menu.ItemIndicatorBaseProps> +>(Menu.ItemIndicator, 'itemIndicator') + +export const Item = withContext, Menu.ItemBaseProps>>( + Menu.Item, + 'item', +) + +export const ItemText = withContext, Menu.ItemTextBaseProps>>( + Menu.ItemText, + 'itemText', +) + +export const Positioner = withContext, Menu.PositionerBaseProps>>( + Menu.Positioner, + 'positioner', +) + +export const RadioItemGroup = withContext< + Assign, Menu.RadioItemGroupBaseProps> +>(Menu.RadioItemGroup, 'itemGroup') + +export const RadioItem = withContext, Menu.RadioItemBaseProps>>( + Menu.RadioItem, + 'item', +) + +export const Separator = withContext, Menu.SeparatorBaseProps>>( + Menu.Separator, + 'separator', +) + +export const TriggerItem = withContext, Menu.TriggerItemBaseProps>>( + Menu.TriggerItem, + 'triggerItem', +) + +export const Trigger = withContext, Menu.TriggerBaseProps>>( + Menu.Trigger, + 'trigger', +) + +export { MenuContext as Context } from '@ark-ui/solid' diff --git a/src/index.css b/src/index.css index bf47461..84d0926 100644 --- a/src/index.css +++ b/src/index.css @@ -3,3 +3,8 @@ .lucide { stroke-width: 3px; } + +.input, +.button--variant_outline { + border-bottom-width: 2px; +} diff --git a/src/lib/render.ts b/src/lib/render.ts index 7441b54..adb5751 100644 --- a/src/lib/render.ts +++ b/src/lib/render.ts @@ -336,11 +336,12 @@ export const render = async (file: File, opts: RenderOptions) => { drawBackground(); if (pfpImg) { - const pfpSize = Math.min(renderCanvas.width, renderCanvas.height) * 0.5; - const pfpX = (renderCanvas.width - pfpSize) / 2; - const pfpY = (renderCanvas.height - pfpSize) / 2; + const centerX = renderCanvas.width / 2; + const centerY = renderCanvas.height / 2; + const baseRadius = + Math.min(renderCanvas.width, renderCanvas.height) * 0.15; - drawPfp(ctx, pfpImg, pfpX, pfpY, pfpSize); + drawPfp(ctx, pfpImg, centerX, centerY, baseRadius); } await videoSource.add(0, duration);