Compare commits

..
Author SHA1 Message Date
ephraimduncan bd3192d8f9 Merge branch 'main' into fix/dev-hmr-full-reload
# Conflicts:
#	apps/remix/vite.config.ts
2026-05-08 06:24:27 +00:00
Ephraim Duncan c915ca97ea Merge branch 'main' into fix/dev-hmr-full-reload 2026-05-07 12:40:28 +00:00
ephraimduncan 478bfe3383 Merge branch 'main' into fix/dev-hmr-full-reload
# Conflicts:
#	apps/remix/vite.config.ts
2026-04-30 15:32:43 +00:00
ephraimduncan 6f95494ad9 fix(remix): restrict hono dev-server full-reload to backend files
@hono/vite-dev-server's default handleHotUpdate triggers a full page
reload for any changed module that was loaded for SSR. With React
Router's `ssr: true`, that is essentially every app/route file, so
every edit forced a full reload and React Refresh never ran.

Wrap serverAdapter(...) and override the returned plugin's
handleHotUpdate to only invoke the full-reload path for files under
apps/remix/server/** (the actual Hono backend). Everything else falls
through to the React Router HMR / React Refresh pipeline.
2026-04-30 15:28:09 +00:00
62 changed files with 196 additions and 244 deletions
@@ -58,7 +58,6 @@ export const Header = ({ className, ...props }: HeaderProps) => {
>
<div className="mx-auto flex w-full max-w-screen-xl items-center justify-between gap-x-4 px-4 md:justify-normal md:px-8">
<Link
prefetch="intent"
to={getRootHref(params)}
className="hidden rounded-md ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 md:inline"
>
@@ -68,7 +67,7 @@ export const Header = ({ className, ...props }: HeaderProps) => {
<AppNavDesktop setIsCommandMenuOpen={setIsCommandMenuOpen} />
<Button asChild variant="outline" className="relative hidden h-10 w-10 rounded-lg md:flex">
<Link prefetch="intent" to="/inbox" className="relative block h-10 w-10">
<Link to="/inbox" className="relative block h-10 w-10">
<InboxIcon className="h-5 w-5 flex-shrink-0 text-muted-foreground transition-colors hover:text-foreground" />
{unreadCountData && unreadCountData.count > 0 && (
@@ -70,7 +70,6 @@ export const AppNavDesktop = ({ className, setIsCommandMenuOpen, ...props }: App
>
{menuNavigationLinks.map(({ href, label }) => (
<Link
prefetch="intent"
key={href}
to={href}
className={cn(
@@ -80,14 +80,13 @@ export const AppNavMobile = ({ isMenuOpen, onMenuOpenChange }: AppNavMobileProps
return (
<Sheet open={isMenuOpen} onOpenChange={onMenuOpenChange}>
<SheetContent className="flex w-full max-w-[350px] flex-col">
<Link prefetch="intent" to="/" onClick={handleMenuItemClick}>
<Link to="/" onClick={handleMenuItemClick}>
<img src={LogoImage} alt="Documenso Logo" className="dark:invert" width={170} height={25} />
</Link>
<div className="mt-8 flex w-full flex-col items-start gap-y-4">
{menuNavigationLinks.map(({ href, text }) => (
<Link
prefetch="intent"
key={href}
className="flex items-center gap-2 font-semibold text-2xl text-foreground hover:text-foreground/80"
to={href}
@@ -63,7 +63,7 @@ export const DocumentPageViewButton = ({ envelope }: DocumentPageViewButtonProps
))
.with({ isComplete: false }, () => (
<Button className="w-full" asChild>
<Link prefetch="intent" to={formatPath}>
<Link to={formatPath}>
<Trans>Edit</Trans>
</Link>
</Button>
@@ -82,7 +82,7 @@ export const DocumentPageViewDropdown = ({ envelope }: DocumentPageViewDropdownP
{(isOwner || isCurrentTeamDocument) && !isComplete && (
<DropdownMenuItem asChild>
<Link prefetch="intent" to={`${documentsPath}/${envelope.id}/edit`}>
<Link to={`${documentsPath}/${envelope.id}/edit`}>
<Edit className="mr-2 h-4 w-4" />
<Trans>Edit</Trans>
</Link>
@@ -113,7 +113,7 @@ export const DocumentPageViewDropdown = ({ envelope }: DocumentPageViewDropdownP
/>
<DropdownMenuItem asChild>
<Link prefetch="intent" to={`${documentsPath}/${envelope.id}/logs`}>
<Link to={`${documentsPath}/${envelope.id}/logs`}>
<ScrollTextIcon className="mr-2 h-4 w-4" />
<Trans>Audit Logs</Trans>
</Link>
@@ -74,7 +74,7 @@ export default function EnvelopeEditorHeader() {
{editorConfig.embedded?.customBrandingLogo ? (
<img src={`/api/branding/logo/team/${envelope.teamId}`} alt="Logo" className="h-6 w-auto" />
) : (
<Link prefetch="intent" to="/">
<Link to="/">
<BrandingLogo className="h-6 w-auto" />
</Link>
)}
@@ -504,7 +504,7 @@ export const EnvelopeEditor = () => {
})}
asChild
>
<Link prefetch="intent" to={relativePath.basePath}>
<Link to={relativePath.basePath}>
<ArrowLeftIcon className="h-4 w-4 flex-shrink-0" />
{!minimizeLeftSidebar && (
@@ -54,7 +54,7 @@ export const FolderCard = ({ folder, onMove, onSettings, onDelete }: FolderCardP
};
return (
<Link prefetch="intent" to={formatPath()} data-folder-id={folder.id} data-folder-name={folder.name}>
<Link to={formatPath()} data-folder-id={folder.id} data-folder-name={folder.name}>
<Card className="h-full border border-border transition-all hover:bg-muted/50">
<CardContent className="p-4">
<div className="flex min-w-0 items-center gap-3">
@@ -70,7 +70,7 @@ export const FolderGrid = ({ type, parentId }: FolderGridProps) => {
className="flex flex-1 items-center font-medium text-muted-foreground text-sm hover:text-muted-foreground/80"
data-testid="folder-grid-breadcrumbs"
>
<Link prefetch="intent" to={formatRootPath()} className="flex items-center">
<Link to={formatRootPath()} className="flex items-center">
<HomeIcon className="mr-2 h-4 w-4" />
<Trans>Home</Trans>
</Link>
@@ -85,7 +85,7 @@ export const FolderGrid = ({ type, parentId }: FolderGridProps) => {
foldersData?.breadcrumbs.map((folder) => (
<div key={folder.id} className="flex items-center">
<span className="px-3">/</span>
<Link prefetch="intent" to={formatBreadCrumbPath(folder.id)} className="flex items-center">
<Link to={formatBreadCrumbPath(folder.id)} className="flex items-center">
<FolderIcon className="mr-2 h-4 w-4" />
<span>{folder.name}</span>
</Link>
@@ -188,7 +188,6 @@ export const FolderGrid = ({ type, parentId }: FolderGridProps) => {
{unpinnedFolders.length > 12 && (
<div className="mt-2 flex items-center justify-center">
<Link
prefetch="intent"
className="font-medium text-muted-foreground text-sm hover:text-foreground"
to={formatViewAllFoldersPath()}
>
@@ -59,11 +59,7 @@ export const MenuSwitcher = () => {
<DropdownMenuContent className={cn('z-[60] ml-6 w-full min-w-[12rem] md:ml-0')} align="end" forceMount>
<DropdownMenuItem className="px-4 py-2 text-muted-foreground" asChild>
<Link
prefetch="intent"
to="/settings/organisations?action=add-organisation"
className="flex items-center justify-between"
>
<Link to="/settings/organisations?action=add-organisation" className="flex items-center justify-between">
<Trans>Create Organisation</Trans>
<Plus className="ml-2 h-4 w-4" />
</Link>
@@ -72,20 +68,20 @@ export const MenuSwitcher = () => {
{isUserAdmin && (
<DropdownMenuItem className="px-4 py-2 text-muted-foreground" asChild>
<Link prefetch="intent" to="/admin">
<Link to="/admin">
<Trans>Admin panel</Trans>
</Link>
</DropdownMenuItem>
)}
<DropdownMenuItem className="px-4 py-2 text-muted-foreground" asChild>
<Link prefetch="intent" to="/inbox">
<Link to="/inbox">
<Trans>Personal Inbox</Trans>
</Link>
</DropdownMenuItem>
<DropdownMenuItem className="px-4 py-2 text-muted-foreground" asChild>
<Link prefetch="intent" to="/settings/profile">
<Link to="/settings/profile">
<Trans>User settings</Trans>
</Link>
</DropdownMenuItem>
@@ -147,7 +147,7 @@ export const OrgMenuSwitcher = () => {
)}
asChild
>
<Link prefetch="intent" to={`/o/${org.url}`} className="flex items-center space-x-2 pr-8">
<Link to={`/o/${org.url}`} className="flex items-center space-x-2 pr-8">
<span
className={cn('min-w-0 flex-1 truncate', {
'font-semibold': org.id === selectedOrg?.id,
@@ -161,7 +161,6 @@ export const OrgMenuSwitcher = () => {
{canExecuteOrganisationAction('MANAGE_ORGANISATION', org.currentOrganisationRole) && (
<div className="absolute top-0 right-0 bottom-0 flex items-center justify-center">
<Link
prefetch="intent"
to={`/o/${org.url}/settings`}
className="mr-2 rounded-sm border p-1 text-muted-foreground transition-opacity duration-200 group-hover:opacity-100 md:opacity-0"
>
@@ -173,7 +172,7 @@ export const OrgMenuSwitcher = () => {
))}
<Button variant="ghost" className="w-full justify-start" asChild>
<Link prefetch="intent" to="/settings/organisations?action=add-organisation">
<Link to="/settings/organisations?action=add-organisation">
<Plus className="mr-2 h-4 w-4" />
<Trans>Create Organisation</Trans>
</Link>
@@ -201,7 +200,7 @@ export const OrgMenuSwitcher = () => {
)}
asChild
>
<Link prefetch="intent" to={`/t/${team.url}`} className="flex items-center space-x-2 pr-8">
<Link to={`/t/${team.url}`} className="flex items-center space-x-2 pr-8">
<span
className={cn('min-w-0 flex-1 truncate', {
'font-semibold': team.id === currentTeam?.id,
@@ -215,7 +214,6 @@ export const OrgMenuSwitcher = () => {
{canExecuteTeamAction('MANAGE_TEAM', team.currentTeamRole) && (
<div className="absolute top-0 right-0 bottom-0 flex items-center justify-center">
<Link
prefetch="intent"
to={`/t/${team.url}/settings`}
className="mr-2 rounded-sm border p-1 text-muted-foreground opacity-0 transition-opacity duration-200 group-hover:opacity-100"
>
@@ -233,7 +231,7 @@ export const OrgMenuSwitcher = () => {
{displayedOrg && (
<Button variant="ghost" className="w-full justify-start" asChild>
<Link prefetch="intent" to={`/o/${displayedOrg.url}/settings/teams?action=add-team`}>
<Link to={`/o/${displayedOrg.url}/settings/teams?action=add-team`}>
<Plus className="mr-2 h-4 w-4" />
<Trans>Create Team</Trans>
</Link>
@@ -254,7 +252,7 @@ export const OrgMenuSwitcher = () => {
<div className="flex-1 overflow-y-auto p-1.5">
{isUserAdmin && (
<DropdownMenuItem className="px-4 py-2 text-muted-foreground" asChild>
<Link prefetch="intent" to="/admin">
<Link to="/admin">
<Trans>Admin panel</Trans>
</Link>
</DropdownMenuItem>
@@ -263,7 +261,7 @@ export const OrgMenuSwitcher = () => {
{currentOrganisation &&
canExecuteOrganisationAction('MANAGE_ORGANISATION', currentOrganisation.currentOrganisationRole) && (
<DropdownMenuItem className="px-4 py-2 text-muted-foreground" asChild>
<Link prefetch="intent" to={`/o/${currentOrganisation.url}/settings`}>
<Link to={`/o/${currentOrganisation.url}/settings`}>
<Trans>Organisation settings</Trans>
</Link>
</DropdownMenuItem>
@@ -271,20 +269,20 @@ export const OrgMenuSwitcher = () => {
{currentTeam && canExecuteTeamAction('MANAGE_TEAM', currentTeam.currentTeamRole) && (
<DropdownMenuItem className="px-4 py-2 text-muted-foreground" asChild>
<Link prefetch="intent" to={`/t/${currentTeam.url}/settings`}>
<Link to={`/t/${currentTeam.url}/settings`}>
<Trans>Team settings</Trans>
</Link>
</DropdownMenuItem>
)}
<DropdownMenuItem className="px-4 py-2 text-muted-foreground" asChild>
<Link prefetch="intent" to="/inbox">
<Link to="/inbox">
<Trans>Personal Inbox</Trans>
</Link>
</DropdownMenuItem>
<DropdownMenuItem className="px-4 py-2 text-muted-foreground" asChild>
<Link prefetch="intent" to="/settings/profile">
<Link to="/settings/profile">
<Trans>Account</Trans>
</Link>
</DropdownMenuItem>
@@ -299,7 +297,6 @@ export const OrgMenuSwitcher = () => {
{currentOrganisation && (
<DropdownMenuItem className="px-4 py-2 text-muted-foreground" asChild>
<Link
prefetch="intent"
to={{
pathname: `/o/${currentOrganisation.url}/support`,
search: currentTeam ? `?team=${currentTeam.id}` : '',
@@ -23,7 +23,7 @@ export const SettingsDesktopNav = ({ className, ...props }: SettingsDesktopNavPr
return (
<div className={cn('flex flex-col gap-y-2', className)} {...props}>
<Link prefetch="intent" to="/settings/profile">
<Link to="/settings/profile">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/profile') && 'bg-secondary')}
@@ -35,14 +35,14 @@ export const SettingsDesktopNav = ({ className, ...props }: SettingsDesktopNavPr
{isPersonalLayoutMode && (
<>
<Link prefetch="intent" to="/settings/document">
<Link to="/settings/document">
<Button variant="ghost" className={cn('w-full justify-start')}>
<Settings2Icon className="mr-2 h-5 w-5" />
<Trans>Preferences</Trans>
</Button>
</Link>
<Link prefetch="intent" className="w-full pl-8" to="/settings/document">
<Link className="w-full pl-8" to="/settings/document">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/document') && 'bg-secondary')}
@@ -51,7 +51,7 @@ export const SettingsDesktopNav = ({ className, ...props }: SettingsDesktopNavPr
</Button>
</Link>
<Link prefetch="intent" className="w-full pl-8" to="/settings/branding">
<Link className="w-full pl-8" to="/settings/branding">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/branding') && 'bg-secondary')}
@@ -60,7 +60,7 @@ export const SettingsDesktopNav = ({ className, ...props }: SettingsDesktopNavPr
</Button>
</Link>
<Link prefetch="intent" className="w-full pl-8" to="/settings/email">
<Link className="w-full pl-8" to="/settings/email">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/email') && 'bg-secondary')}
@@ -69,7 +69,7 @@ export const SettingsDesktopNav = ({ className, ...props }: SettingsDesktopNavPr
</Button>
</Link>
<Link prefetch="intent" to="/settings/public-profile">
<Link to="/settings/public-profile">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/public-profile') && 'bg-secondary')}
@@ -79,7 +79,7 @@ export const SettingsDesktopNav = ({ className, ...props }: SettingsDesktopNavPr
</Button>
</Link>
<Link prefetch="intent" to="/settings/tokens">
<Link to="/settings/tokens">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/tokens') && 'bg-secondary')}
@@ -89,7 +89,7 @@ export const SettingsDesktopNav = ({ className, ...props }: SettingsDesktopNavPr
</Button>
</Link>
<Link prefetch="intent" to="/settings/webhooks">
<Link to="/settings/webhooks">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/webhooks') && 'bg-secondary')}
@@ -101,7 +101,7 @@ export const SettingsDesktopNav = ({ className, ...props }: SettingsDesktopNavPr
</>
)}
<Link prefetch="intent" to="/settings/organisations">
<Link to="/settings/organisations">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/organisations') && 'bg-secondary')}
@@ -112,7 +112,7 @@ export const SettingsDesktopNav = ({ className, ...props }: SettingsDesktopNavPr
</Link>
{IS_BILLING_ENABLED() && hasManageableBillingOrgs && (
<Link prefetch="intent" to={isPersonalLayoutMode ? '/settings/billing-personal' : `/settings/billing`}>
<Link to={isPersonalLayoutMode ? '/settings/billing-personal' : `/settings/billing`}>
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/billing') && 'bg-secondary')}
@@ -123,7 +123,7 @@ export const SettingsDesktopNav = ({ className, ...props }: SettingsDesktopNavPr
</Link>
)}
<Link prefetch="intent" to="/settings/security">
<Link to="/settings/security">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/security') && 'bg-secondary')}
@@ -34,7 +34,7 @@ export const SettingsMobileNav = ({ className, ...props }: SettingsMobileNavProp
return (
<div className={cn('flex flex-wrap items-center justify-start gap-x-2 gap-y-4', className)} {...props}>
<Link prefetch="intent" to="/settings/profile">
<Link to="/settings/profile">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/profile') && 'bg-secondary')}
@@ -46,7 +46,7 @@ export const SettingsMobileNav = ({ className, ...props }: SettingsMobileNavProp
{isPersonalLayoutMode && (
<>
<Link prefetch="intent" to="/settings/document">
<Link to="/settings/document">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/document') && 'bg-secondary')}
@@ -56,7 +56,7 @@ export const SettingsMobileNav = ({ className, ...props }: SettingsMobileNavProp
</Button>
</Link>
<Link prefetch="intent" to="/settings/branding">
<Link to="/settings/branding">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/branding') && 'bg-secondary')}
@@ -66,7 +66,7 @@ export const SettingsMobileNav = ({ className, ...props }: SettingsMobileNavProp
</Button>
</Link>
<Link prefetch="intent" to="/settings/email">
<Link to="/settings/email">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/email') && 'bg-secondary')}
@@ -76,7 +76,7 @@ export const SettingsMobileNav = ({ className, ...props }: SettingsMobileNavProp
</Button>
</Link>
<Link prefetch="intent" to="/settings/public-profile">
<Link to="/settings/public-profile">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/public-profile') && 'bg-secondary')}
@@ -86,7 +86,7 @@ export const SettingsMobileNav = ({ className, ...props }: SettingsMobileNavProp
</Button>
</Link>
<Link prefetch="intent" to="/settings/tokens">
<Link to="/settings/tokens">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/tokens') && 'bg-secondary')}
@@ -96,7 +96,7 @@ export const SettingsMobileNav = ({ className, ...props }: SettingsMobileNavProp
</Button>
</Link>
<Link prefetch="intent" to="/settings/webhooks">
<Link to="/settings/webhooks">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/webhooks') && 'bg-secondary')}
@@ -108,7 +108,7 @@ export const SettingsMobileNav = ({ className, ...props }: SettingsMobileNavProp
</>
)}
<Link prefetch="intent" to="/settings/organisations">
<Link to="/settings/organisations">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/organisations') && 'bg-secondary')}
@@ -119,7 +119,7 @@ export const SettingsMobileNav = ({ className, ...props }: SettingsMobileNavProp
</Link>
{IS_BILLING_ENABLED() && hasManageableBillingOrgs && (
<Link prefetch="intent" to={isPersonalLayoutMode ? '/settings/billing-personal' : `/settings/billing`}>
<Link to={isPersonalLayoutMode ? '/settings/billing-personal' : `/settings/billing`}>
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/billing') && 'bg-secondary')}
@@ -130,7 +130,7 @@ export const SettingsMobileNav = ({ className, ...props }: SettingsMobileNavProp
</Link>
)}
<Link prefetch="intent" to="/settings/security">
<Link to="/settings/security">
<Button
variant="ghost"
className={cn('w-full justify-start', pathname?.startsWith('/settings/security') && 'bg-secondary')}
@@ -6,7 +6,7 @@ import { Link } from 'react-router';
export default function DocumentEditSkeleton() {
return (
<div className="mx-auto -mt-4 flex w-full max-w-screen-xl flex-col px-4 md:px-8">
<Link prefetch="intent" to="/" className="flex grow-0 items-center text-documenso-700 hover:opacity-80">
<Link to="/" className="flex grow-0 items-center text-documenso-700 hover:opacity-80">
<ChevronLeft className="mr-2 inline-block h-5 w-5" />
<Trans>Documents</Trans>
</Link>
@@ -71,11 +71,7 @@ export const AdminClaimsTable = ({ licenseFlags }: AdminClaimsTableProps) => {
{
header: t`Name`,
accessorKey: 'name',
cell: ({ row }) => (
<Link prefetch="intent" to={`/admin/organisations?query=claim:${row.original.id}`}>
{row.original.name}
</Link>
),
cell: ({ row }) => <Link to={`/admin/organisations?query=claim:${row.original.id}`}>{row.original.name}</Link>,
},
{
header: t`Allowed teams`,
@@ -71,7 +71,7 @@ export const AdminDashboardUsersTable = ({ users, totalPages, perPage, page }: A
cell: ({ row }) => {
return (
<Button className="w-24" asChild>
<Link prefetch="intent" to={`/admin/users/${row.original.id}`}>
<Link to={`/admin/users/${row.original.id}`}>
<Edit className="mr-2 -ml-1 h-4 w-4" />
<Trans>Edit</Trans>
</Link>
@@ -82,11 +82,7 @@ export const AdminOrganisationsTable = ({
{
header: t`Organisation`,
accessorKey: 'name',
cell: ({ row }) => (
<Link prefetch="intent" to={`/admin/organisations/${row.original.id}`}>
{row.original.name}
</Link>
),
cell: ({ row }) => <Link to={`/admin/organisations/${row.original.id}`}>{row.original.name}</Link>,
},
{
header: t`Created At`,
@@ -96,11 +92,7 @@ export const AdminOrganisationsTable = ({
{
header: t`Owner`,
accessorKey: 'owner',
cell: ({ row }) => (
<Link prefetch="intent" to={`/admin/users/${row.original.owner.id}`}>
{row.original.owner.name}
</Link>
),
cell: ({ row }) => <Link to={`/admin/users/${row.original.owner.id}`}>{row.original.owner.name}</Link>,
},
{
id: 'role',
@@ -160,14 +152,14 @@ export const AdminOrganisationsTable = ({
</DropdownMenuLabel>
<DropdownMenuItem asChild>
<Link prefetch="intent" to={`/admin/organisations/${row.original.id}`}>
<Link to={`/admin/organisations/${row.original.id}`}>
<SettingsIcon className="mr-2 h-4 w-4" />
<Trans>Manage</Trans>
</Link>
</DropdownMenuItem>
<DropdownMenuItem asChild>
<Link prefetch="intent" to={`/admin/users/${row.original.owner.id}`}>
<Link to={`/admin/users/${row.original.owner.id}`}>
<UserIcon className="mr-2 h-4 w-4" />
<Trans>View owner</Trans>
</Link>
@@ -58,7 +58,7 @@ export const DocumentsTableActionButton = ({ row }: DocumentsTableActionButtonPr
})
.with(isOwner ? { isDraft: true, isOwner: true } : { isDraft: true, isCurrentTeamDocument: true }, () => (
<Button className="w-32" asChild>
<Link prefetch="intent" to={formatPath}>
<Link to={formatPath}>
<Edit className="mr-2 -ml-1 h-4 w-4" />
<Trans>Edit</Trans>
</Link>
@@ -131,7 +131,7 @@ export const DocumentsTableActionDropdown = ({ row, onMoveDocument }: DocumentsT
)}
<DropdownMenuItem disabled={!canManageDocument || isComplete} asChild>
<Link prefetch="intent" to={formatPath}>
<Link to={formatPath}>
<Edit className="mr-2 h-4 w-4" />
<Trans>Edit</Trans>
</Link>
@@ -102,9 +102,7 @@ export const OrganisationEmailDomainsDataTable = () => {
cell: ({ row }) => (
<div className="flex justify-end space-x-2">
<Button asChild variant="outline">
<Link prefetch="intent" to={`/o/${organisation.url}/settings/email-domains/${row.original.id}`}>
Manage
</Link>
<Link to={`/o/${organisation.url}/settings/email-domains/${row.original.id}`}>Manage</Link>
</Button>
<OrganisationEmailDomainDeleteDialog
@@ -80,7 +80,7 @@ export const OrganisationGroupsDataTable = () => {
cell: ({ row }) => (
<div className="flex justify-end space-x-2">
<Button asChild variant="outline">
<Link prefetch="intent" to={`/o/${organisation.url}/settings/groups/${row.original.id}`}>
<Link to={`/o/${organisation.url}/settings/groups/${row.original.id}`}>
<Trans>Manage</Trans>
</Link>
</Button>
@@ -76,7 +76,7 @@ export const OrganisationTeamsTable = () => {
cell: ({ row }) => (
<div className="flex justify-end space-x-2">
<Button variant="outline" asChild>
<Link prefetch="intent" to={`/t/${row.original.url}/settings`}>
<Link to={`/t/${row.original.url}/settings`}>
<Trans>Manage</Trans>
</Link>
</Button>
@@ -78,7 +78,7 @@ export const TemplatesTableActionDropdown = ({
{canMutate && (
<>
<DropdownMenuItem asChild>
<Link prefetch="intent" to={formatPath}>
<Link to={formatPath}>
<Edit className="mr-2 h-4 w-4" />
<Trans>Edit</Trans>
</Link>
@@ -74,7 +74,7 @@ export const UserBillingOrganisationsTable = () => {
id: 'actions',
cell: ({ row }) => (
<Button asChild variant="outline">
<Link prefetch="intent" to={`/o/${row.original.url}/settings/billing`}>
<Link to={`/o/${row.original.url}/settings/billing`}>
<Trans>Manage Billing</Trans>
</Link>
</Button>
@@ -92,7 +92,7 @@ export const UserOrganisationsTable = () => {
<div className="flex justify-end space-x-2">
{canExecuteOrganisationAction('MANAGE_ORGANISATION', row.original.currentOrganisationRole) && (
<Button variant="outline" asChild>
<Link prefetch="intent" to={`/o/${row.original.url}/settings`}>
<Link to={`/o/${row.original.url}/settings`}>
<Trans>Manage</Trans>
</Link>
</Button>
@@ -95,7 +95,7 @@ export default function Layout({ loaderData, params, matches }: Route.ComponentP
}}
primaryButton={
<Button asChild>
<Link prefetch="intent" to="/">
<Link to="/">
<Trans>Go home</Trans>
</Link>
</Button>
@@ -64,7 +64,7 @@ export default function AdminLayout({ loaderData }: Route.ComponentProps) {
className={cn('justify-start md:w-full', pathname?.startsWith('/admin/stats') && 'bg-secondary')}
asChild
>
<Link prefetch="intent" to="/admin/stats">
<Link to="/admin/stats">
<BarChart3 className="mr-2 h-5 w-5" />
<Trans>Stats</Trans>
</Link>
@@ -75,7 +75,7 @@ export default function AdminLayout({ loaderData }: Route.ComponentProps) {
className={cn('justify-start md:w-full', pathname?.startsWith('/admin/organisations') && 'bg-secondary')}
asChild
>
<Link prefetch="intent" to="/admin/organisations">
<Link to="/admin/organisations">
<Building2Icon className="mr-2 h-5 w-5" />
<Trans>Organisations</Trans>
</Link>
@@ -86,7 +86,7 @@ export default function AdminLayout({ loaderData }: Route.ComponentProps) {
className={cn('justify-start md:w-full', pathname?.startsWith('/admin/claims') && 'bg-secondary')}
asChild
>
<Link prefetch="intent" to="/admin/claims">
<Link to="/admin/claims">
<Wallet2 className="mr-2 h-5 w-5" />
<Trans>Claims</Trans>
</Link>
@@ -97,7 +97,7 @@ export default function AdminLayout({ loaderData }: Route.ComponentProps) {
className={cn('justify-start md:w-full', pathname?.startsWith('/admin/users') && 'bg-secondary')}
asChild
>
<Link prefetch="intent" to="/admin/users">
<Link to="/admin/users">
<Users className="mr-2 h-5 w-5" />
<Trans>Users</Trans>
</Link>
@@ -108,7 +108,7 @@ export default function AdminLayout({ loaderData }: Route.ComponentProps) {
className={cn('justify-start md:w-full', pathname?.startsWith('/admin/documents') && 'bg-secondary')}
asChild
>
<Link prefetch="intent" to="/admin/documents">
<Link to="/admin/documents">
<FileStack className="mr-2 h-5 w-5" />
<Trans>Documents</Trans>
</Link>
@@ -122,7 +122,7 @@ export default function AdminLayout({ loaderData }: Route.ComponentProps) {
)}
asChild
>
<Link prefetch="intent" to="/admin/unsealed-documents">
<Link to="/admin/unsealed-documents">
<AlertTriangleIcon className="mr-2 h-5 w-5" />
<Trans>Unsealed Documents</Trans>
</Link>
@@ -133,7 +133,7 @@ export default function AdminLayout({ loaderData }: Route.ComponentProps) {
className={cn('justify-start md:w-full', pathname?.startsWith('/admin/email-domains') && 'bg-secondary')}
asChild
>
<Link prefetch="intent" to="/admin/email-domains">
<Link to="/admin/email-domains">
<MailIcon className="mr-2 h-5 w-5" />
<Trans>Email Domains</Trans>
</Link>
@@ -147,7 +147,7 @@ export default function AdminLayout({ loaderData }: Route.ComponentProps) {
)}
asChild
>
<Link prefetch="intent" to="/admin/organisation-insights">
<Link to="/admin/organisation-insights">
<Trophy className="mr-2 h-5 w-5" />
<Trans>Organisation Insights</Trans>
</Link>
@@ -158,7 +158,7 @@ export default function AdminLayout({ loaderData }: Route.ComponentProps) {
className={cn('justify-start md:w-full', pathname?.startsWith('/admin/site-settings') && 'bg-secondary')}
asChild
>
<Link prefetch="intent" to="/admin/site-settings">
<Link to="/admin/site-settings">
<Settings className="mr-2 h-5 w-5" />
<Trans>Site Settings</Trans>
</Link>
@@ -154,7 +154,7 @@ export default function AdminDocumentDetailsPage({ loaderData }: Route.Component
</TooltipProvider>
<Button variant="outline" asChild>
<Link prefetch="intent" to={`/admin/users/${envelope.userId}`}>
<Link to={`/admin/users/${envelope.userId}`}>
<Trans>Go to owner</Trans>
</Link>
</Button>
@@ -61,7 +61,6 @@ export default function AdminDocumentsPage() {
cell: ({ row }) => {
return (
<Link
prefetch="intent"
to={`/admin/documents/${row.original.envelopeId}`}
className="block max-w-[5rem] truncate font-medium hover:underline md:max-w-[10rem]"
>
@@ -86,7 +85,7 @@ export default function AdminDocumentsPage() {
return (
<Tooltip delayDuration={200}>
<TooltipTrigger>
<Link prefetch="intent" to={`/admin/users/${row.original.user.id}`}>
<Link to={`/admin/users/${row.original.user.id}`}>
<Avatar className="h-12 w-12 border-2 border-white border-solid dark:border-border">
<AvatarFallback className="text-muted-foreground text-xs">{avatarFallbackText}</AvatarFallback>
</Avatar>
@@ -58,7 +58,6 @@ export default function AdminEmailDomainsPage() {
accessorKey: 'domain',
cell: ({ row }) => (
<Link
prefetch="intent"
to={`/admin/email-domains/${row.original.id}`}
className="block max-w-[10rem] truncate font-medium hover:underline md:max-w-[15rem]"
>
@@ -70,11 +69,7 @@ export default function AdminEmailDomainsPage() {
header: _(msg`Organisation`),
accessorKey: 'organisation',
cell: ({ row }) => (
<Link
prefetch="intent"
to={`/admin/organisations/${row.original.organisation.id}`}
className="hover:underline"
>
<Link to={`/admin/organisations/${row.original.organisation.id}`} className="hover:underline">
{row.original.organisation.name}
</Link>
),
@@ -117,7 +112,7 @@ export default function AdminEmailDomainsPage() {
header: _(msg`Actions`),
cell: ({ row }) => (
<Button asChild variant="outline" size="sm">
<Link prefetch="intent" to={`/admin/email-domains/${row.original.id}`}>
<Link to={`/admin/email-domains/${row.original.id}`}>
<Trans>View</Trans>
</Link>
</Button>
@@ -48,7 +48,7 @@ export default function OrganisationInsights({ loaderData }: Route.ComponentProp
<div className="flex items-center justify-between">
<h2 className="font-semibold text-4xl">{organisationName}</h2>
<Button variant="outline" asChild>
<Link prefetch="intent" to={`/admin/organisations/${organisationId}`}>
<Link to={`/admin/organisations/${organisationId}`}>
<Trans>Manage organisation</Trans>
</Link>
</Button>
@@ -132,7 +132,7 @@ export default function OrganisationGroupSettingsPage({ params, loaderData }: Ro
header: t`Member`,
cell: ({ row }) => (
<div className="space-y-1">
<Link prefetch="intent" className="font-medium hover:underline" to={`/admin/users/${row.original.user.id}`}>
<Link className="font-medium hover:underline" to={`/admin/users/${row.original.user.id}`}>
{row.original.user.name ?? row.original.user.email}
</Link>
{row.original.user.name && (
@@ -236,7 +236,7 @@ export default function OrganisationGroupSettingsPage({ params, loaderData }: Ro
}}
primaryButton={
<Button asChild>
<Link prefetch="intent" to={`/admin/organisations`}>
<Link to={`/admin/organisations`}>
<Trans>Go back</Trans>
</Link>
</Button>
@@ -250,7 +250,7 @@ export default function OrganisationGroupSettingsPage({ params, loaderData }: Ro
<div>
<SettingsHeader title={t`Manage organisation`} subtitle={t`Manage the ${organisation.name} organisation`}>
<Button variant="outline" asChild>
<Link prefetch="intent" to={`/admin/organisation-insights/${organisationId}`}>
<Link to={`/admin/organisation-insights/${organisationId}`}>
<Trans>View insights</Trans>
</Link>
</Button>
@@ -57,7 +57,7 @@ export default function UserPage({ params }: { params: { id: number } }) {
}}
primaryButton={
<Button asChild>
<Link prefetch="intent" to={`/admin/users`}>
<Link to={`/admin/users`}>
<Trans>Go back</Trans>
</Link>
</Button>
@@ -74,7 +74,7 @@ export default function DashboardPage() {
</div>
<Button asChild className="mt-4" variant="outline">
<Link prefetch="intent" to="/settings/organisations?action=add-organisation">
<Link to="/settings/organisations?action=add-organisation">
<Trans>Create organisation</Trans>
</Link>
</Button>
@@ -102,7 +102,7 @@ export default function DashboardPage() {
<div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
{organisations.map((org) => (
<div key={org.id} className="group relative">
<Link prefetch="intent" to={`/o/${org.url}`}>
<Link to={`/o/${org.url}`}>
<Card className="h-full border pr-6 transition-all hover:bg-muted/50">
<CardContent className="p-4">
<div className="flex items-center gap-3">
@@ -143,7 +143,7 @@ export default function DashboardPage() {
{canExecuteOrganisationAction('MANAGE_ORGANISATION', org.currentOrganisationRole) && (
<div className="absolute top-4 right-4 text-muted-foreground opacity-0 transition-opacity duration-200 group-hover:opacity-100">
<Link prefetch="intent" to={`/o/${org.url}/settings`}>
<Link to={`/o/${org.url}/settings`}>
<SettingsIcon className="h-4 w-4" />
</Link>
</div>
@@ -176,7 +176,7 @@ export default function DashboardPage() {
<div className="flex gap-4">
{teams.map((team) => (
<div key={team.id} className="group relative">
<Link prefetch="intent" to={`/t/${team.url}`}>
<Link to={`/t/${team.url}`}>
<Card className="w-[350px] shrink-0 border transition-all hover:bg-muted/50">
<CardContent className="p-4">
<div className="flex items-center gap-3">
@@ -212,7 +212,7 @@ export default function DashboardPage() {
{canExecuteTeamAction('MANAGE_TEAM', team.currentTeamRole) && (
<div className="absolute top-4 right-4 text-muted-foreground opacity-0 transition-opacity duration-200 group-hover:opacity-100">
<Link prefetch="intent" to={`/t/${team.url}/settings`}>
<Link to={`/t/${team.url}/settings`}>
<SettingsIcon className="h-4 w-4" />
</Link>
</div>
@@ -115,7 +115,7 @@ export default function OrganisationSettingsTeamsPage() {
</div>
<Button asChild>
<Link prefetch="intent" to={`/o/${organisation.url}/settings`}>
<Link to={`/o/${organisation.url}/settings`}>
<Trans>Manage Organisation</Trans>
</Link>
</Button>
@@ -123,7 +123,7 @@ export default function OrganisationSettingsTeamsPage() {
<div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
{organisation.teams.map((team) => (
<Link prefetch="intent" to={`/t/${team.url}`} key={team.id}>
<Link to={`/t/${team.url}`} key={team.id}>
<Card className="h-full border border-border transition-all hover:bg-muted/50">
<CardContent className="p-4">
<div className="flex items-center gap-3">
@@ -178,19 +178,19 @@ const TeamDropdownMenu = ({ team }: { team: TGetOrganisationSessionResponse[0]['
</DropdownMenuTrigger>
<DropdownMenuContent align="end" onClick={(e) => e.stopPropagation()}>
<DropdownMenuItem asChild>
<Link prefetch="intent" to={`/t/${team.url}`}>
<Link to={`/t/${team.url}`}>
<ArrowRight className="mr-2 h-4 w-4" />
<Trans>Go to team</Trans>
</Link>
</DropdownMenuItem>
<DropdownMenuItem asChild>
<Link prefetch="intent" to={`/t/${team.url}/settings`}>
<Link to={`/t/${team.url}/settings`}>
<SettingsIcon className="mr-2 h-4 w-4" />
<Trans>Settings</Trans>
</Link>
</DropdownMenuItem>
<DropdownMenuItem asChild>
<Link prefetch="intent" to={`/t/${team.url}/settings/members`}>
<Link to={`/t/${team.url}/settings/members`}>
<UsersIcon className="mr-2 h-4 w-4" />
<Trans>Members</Trans>
</Link>
@@ -122,7 +122,7 @@ export default function SettingsLayout() {
}}
primaryButton={
<Button asChild>
<Link prefetch="intent" to={`/o/${organisation.url}`}>
<Link to={`/o/${organisation.url}`}>
<Trans>Go Back</Trans>
</Link>
</Button>
@@ -118,7 +118,7 @@ export default function OrganisationEmailDomainSettingsPage({ params }: Route.Co
}}
primaryButton={
<Button asChild>
<Link prefetch="intent" to={`/o/${organisation.url}/settings/email-domains`}>
<Link to={`/o/${organisation.url}/settings/email-domains`}>
<Trans>Go back</Trans>
</Link>
</Button>
@@ -83,7 +83,7 @@ export default function OrganisationGroupSettingsPage({ params }: Route.Componen
}}
primaryButton={
<Button asChild>
<Link prefetch="intent" to={`/o/${organisation.url}/settings/groups`}>
<Link to={`/o/${organisation.url}/settings/groups`}>
<Trans>Go back</Trans>
</Link>
</Button>
@@ -126,7 +126,7 @@ export default function SettingsSecurity({ loaderData }: Route.ComponentProps) {
</div>
<Button asChild variant="outline" className="bg-background">
<Link prefetch="intent" to="/settings/security/passkeys">
<Link to="/settings/security/passkeys">
<Trans>Manage passkeys</Trans>
</Link>
</Button>
@@ -144,7 +144,7 @@ export default function SettingsSecurity({ loaderData }: Route.ComponentProps) {
</div>
<Button asChild variant="outline" className="bg-background">
<Link prefetch="intent" to="/settings/security/activity">
<Link to="/settings/security/activity">
<Trans>View activity</Trans>
</Link>
</Button>
@@ -162,7 +162,7 @@ export default function SettingsSecurity({ loaderData }: Route.ComponentProps) {
</div>
<Button asChild variant="outline" className="bg-background">
<Link prefetch="intent" to="/settings/security/sessions">
<Link to="/settings/security/sessions">
<Trans>Manage sessions</Trans>
</Link>
</Button>
@@ -180,7 +180,7 @@ export default function SettingsSecurity({ loaderData }: Route.ComponentProps) {
</div>
<Button asChild variant="outline" className="bg-background">
<Link prefetch="intent" to="/settings/security/linked-accounts">
<Link to="/settings/security/linked-accounts">
<Trans>Manage linked accounts</Trans>
</Link>
</Button>
@@ -57,7 +57,7 @@ export default function Layout() {
}}
primaryButton={
<Button asChild>
<Link prefetch="intent" to="/settings/teams">
<Link to="/settings/teams">
<Trans>View teams</Trans>
</Link>
</Button>
@@ -93,7 +93,7 @@ export default function DocumentPage({ params }: Route.ComponentProps) {
}}
primaryButton={
<Button asChild>
<Link prefetch="intent" to={`/t/${team.url}/documents`}>
<Link to={`/t/${team.url}/documents`}>
<Trans>Go back</Trans>
</Link>
</Button>
@@ -112,7 +112,7 @@ export default function DocumentPage({ params }: Route.ComponentProps) {
<DocumentRecipientLinkCopyDialog recipients={envelope.recipients} />
)}
<Link prefetch="intent" to={documentRootPath} className="flex items-center text-documenso-700 hover:opacity-80">
<Link to={documentRootPath} className="flex items-center text-documenso-700 hover:opacity-80">
<ChevronLeft className="mr-2 inline-block h-5 w-5" />
<Trans>Documents</Trans>
</Link>
@@ -83,7 +83,7 @@ export function ErrorBoundary({ error, params }: Route.ErrorBoundaryProps) {
secondaryButton={null}
primaryButton={
<Button asChild className="w-32">
<Link prefetch="intent" to={`/t/${params.teamUrl}/documents`}>
<Link to={`/t/${params.teamUrl}/documents`}>
<ChevronLeftIcon className="mr-2 h-4 w-4" />
<Trans>Go Back</Trans>
</Link>
@@ -86,7 +86,7 @@ export default function EnvelopeEditorPage({ params }: Route.ComponentProps) {
}}
primaryButton={
<Button asChild>
<Link prefetch="intent" to={`/t/${team.url}/documents`}>
<Link to={`/t/${team.url}/documents`}>
<Trans>Go home</Trans>
</Link>
</Button>
@@ -107,7 +107,7 @@ export default function TeamsSettingsLayout() {
}}
primaryButton={
<Button asChild>
<Link prefetch="intent" to={`/t/${team.url}`}>
<Link to={`/t/${team.url}`}>
<Trans>Go Back</Trans>
</Link>
</Button>
@@ -203,7 +203,7 @@ export default function WebhookPage({ params }: Route.ComponentProps) {
}}
primaryButton={
<Button asChild>
<Link prefetch="intent" to={`/t/${team.url}/settings/webhooks`}>
<Link to={`/t/${team.url}/settings/webhooks`}>
<Trans>Go back</Trans>
</Link>
</Button>
@@ -48,7 +48,7 @@ export default function WebhookPage() {
{
header: t`Webhook`,
cell: ({ row }) => (
<Link prefetch="intent" to={`/t/${team.url}/settings/webhooks/${row.original.id}`}>
<Link to={`/t/${team.url}/settings/webhooks/${row.original.id}`}>
<p className="text-muted-foreground text-xs">{row.original.id}</p>
<p className="max-w-sm truncate font-semibold text-foreground text-xs" title={row.original.webhookUrl}>
{row.original.webhookUrl}
@@ -159,7 +159,7 @@ const WebhookTableActionDropdown = ({ webhook }: { webhook: Webhook }) => {
</DropdownMenuLabel>
<DropdownMenuItem asChild>
<Link prefetch="intent" to={`/t/${team.url}/settings/webhooks/${webhook.id}`}>
<Link to={`/t/${team.url}/settings/webhooks/${webhook.id}`}>
<ScrollTextIcon className="mr-2 h-4 w-4" />
<Trans>Logs</Trans>
</Link>
@@ -77,7 +77,7 @@ export default function TemplatePage({ params }: Route.ComponentProps) {
}}
primaryButton={
<Button asChild>
<Link prefetch="intent" to={`/t/${team.url}/templates`}>
<Link to={`/t/${team.url}/templates`}>
<Trans>Go back</Trans>
</Link>
</Button>
@@ -118,7 +118,7 @@ export default function TemplatePage({ params }: Route.ComponentProps) {
return (
<div className="mx-auto -mt-4 w-full max-w-screen-xl px-4 md:px-8">
<div className="flex flex-row justify-between">
<Link prefetch="intent" to={templateRootPath} className="flex items-center text-documenso-700 hover:opacity-80">
<Link to={templateRootPath} className="flex items-center text-documenso-700 hover:opacity-80">
<ChevronLeft className="mr-2 inline-block h-5 w-5" />
<Trans>Templates</Trans>
</Link>
@@ -139,7 +139,7 @@ export default function TemplatePage({ params }: Route.ComponentProps) {
/>
<Button asChild size="sm">
<Link prefetch="intent" to={`${templateRootPath}/${envelope.id}/edit`}>
<Link to={`${templateRootPath}/${envelope.id}/edit`}>
<LucideEdit className="mr-1.5 h-3.5 w-3.5" />
<Trans>Edit Template</Trans>
</Link>
@@ -101,7 +101,7 @@ export function ErrorBoundary({ error, params }: Route.ErrorBoundaryProps) {
secondaryButton={null}
primaryButton={
<Button asChild className="w-32">
<Link prefetch="intent" to={`/t/${params.teamUrl}/templates`}>
<Link to={`/t/${params.teamUrl}/templates`}>
<ChevronLeftIcon className="mr-2 h-4 w-4" />
<Trans>Go Back</Trans>
</Link>
+32 -17
View File
@@ -16,6 +16,37 @@ const require = createRequire(import.meta.url);
const pdfjsDistPath = path.dirname(require.resolve('pdfjs-dist/package.json'));
const cMapsDir = normalizePath(path.join(pdfjsDistPath, 'cmaps'));
const honoDevServer = serverAdapter({
entry: 'server/router.ts',
getLoadContext: async () => {
const { getLoadContext } = await import('./server/load-context');
return getLoadContext();
},
exclude: [
// Spread the defaults but replace the /.css$/ rule so that Bull
// Board's static CSS at /api/jobs/board/static/** passes through to Hono.
...devServerDefaults.exclude.map((pattern) =>
pattern instanceof RegExp && pattern.source === '.*\\.css$' ? /^(?!\/api\/jobs\/board\/).*\.css$/ : pattern,
),
'/assets/**',
'/src/app/**',
/\?(?:inline|url|no-inline|raw|import(?:&(?:inline|url|no-inline|raw)?)?)$/,
],
});
// Restrict @hono/vite-dev-server's full-reload to backend files. Otherwise it
// fires on any SSR-loaded module change, which kills HMR for the entire app.
const honoServerDir = path.resolve(__dirname, 'server') + path.sep;
const upstreamHandleHotUpdate = honoDevServer.handleHotUpdate;
honoDevServer.handleHotUpdate = async function (ctx) {
if (!ctx.file.startsWith(honoServerDir)) {
return;
}
return typeof upstreamHandleHotUpdate === 'function'
? upstreamHandleHotUpdate.call(this, ctx)
: upstreamHandleHotUpdate?.handler.call(this, ctx);
};
/**
* Note: We load the env variables externally so we can have runtime enviroment variables
* for docker.
@@ -45,23 +76,7 @@ export default defineConfig({
macrosPlugin(),
lingui(),
tsconfigPaths(),
serverAdapter({
entry: 'server/router.ts',
getLoadContext: async () => {
const { getLoadContext } = await import('./server/load-context');
return getLoadContext();
},
exclude: [
// Spread the defaults but replace the /.css$/ rule so that Bull
// Board's static CSS at /api/jobs/board/static/** passes through to Hono.
...devServerDefaults.exclude.map((pattern) =>
pattern instanceof RegExp && pattern.source === '.*\\.css$' ? /^(?!\/api\/jobs\/board\/).*\.css$/ : pattern,
),
'/assets/**',
'/src/app/**',
/\?(?:inline|url|no-inline|raw|import(?:&(?:inline|url|no-inline|raw)?)?)$/,
],
}),
honoDevServer,
],
ssr: {
noExternal: ['react-dropzone', 'plausible-tracker'],
-14
View File
@@ -349,20 +349,6 @@
"dev": true,
"license": "MIT"
},
"apps/docs/node_modules/typescript": {
"version": "5.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
},
"apps/docs/node_modules/undici-types": {
"version": "7.19.2",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz",
+4 -2
View File
@@ -2793,7 +2793,7 @@ msgstr "Vorlage konfigurieren"
msgid "Configure Template"
msgstr "Vorlage konfigurieren"
#. placeholder {0}: parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[currentField.type])
#. placeholder {0}: parseMessageDescriptor( _, FRIENDLY_FIELD_TYPE[currentField.type], )
#: apps/remix/app/components/embed/authoring/field-advanced-settings-drawer.tsx
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -5125,7 +5125,7 @@ msgstr "Läuft ab"
msgid "Expires {0}"
msgstr "Läuft ab am {0}"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat( 'mm:ss', )
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Läuft ab in {0}"
@@ -11077,6 +11077,7 @@ msgstr "Um dieses Dokument als angesehen zu markieren, müssen Sie als <0>{0}</0
msgid "To mark this document as viewed, you need to be logged in."
msgstr "Um dieses Dokument als angesehen zu markieren, müssen Sie angemeldet sein."
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -13677,3 +13678,4 @@ msgstr "Ihr Verifizierungscode:"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "your-domain.com another-domain.com"
msgstr "your-domain.com another-domain.com"
+7 -24
View File
@@ -2788,7 +2788,7 @@ msgstr "Configure template"
msgid "Configure Template"
msgstr "Configure Template"
#. placeholder {0}: parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[currentField.type])
#. placeholder {0}: parseMessageDescriptor( _, FRIENDLY_FIELD_TYPE[currentField.type], )
#: apps/remix/app/components/embed/authoring/field-advanced-settings-drawer.tsx
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -5120,7 +5120,7 @@ msgstr "Expires"
msgid "Expires {0}"
msgstr "Expires {0}"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat( 'mm:ss', )
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Expires in {0}"
@@ -6333,8 +6333,6 @@ msgstr "Loading suggestions..."
#: apps/remix/app/components/embed/embed-client-loading.tsx
#: apps/remix/app/components/general/default-recipients-multiselect-combobox.tsx
#: apps/remix/app/components/general/document/document-page-view-recent-activity.tsx
#: apps/remix/app/components/general/organisation-groups-multiselect-combobox.tsx
#: apps/remix/app/components/general/organisation-members-multiselect-combobox.tsx
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
msgid "Loading..."
msgstr "Loading..."
@@ -6911,18 +6909,10 @@ msgstr "No folders yet."
msgid "No further action is required from you at this time."
msgstr "No further action is required from you at this time."
#: apps/remix/app/components/general/organisation-groups-multiselect-combobox.tsx
msgid "No groups found"
msgstr "No groups found"
#: apps/remix/app/components/general/admin-license-card.tsx
msgid "No License Configured"
msgstr "No License Configured"
#: apps/remix/app/components/general/organisation-members-multiselect-combobox.tsx
msgid "No members found"
msgstr "No members found"
#: apps/remix/app/components/dialogs/team-member-create-dialog.tsx
msgid "No members selected"
msgstr "No members selected"
@@ -8782,18 +8772,10 @@ msgstr "Search documents..."
msgid "Search folders..."
msgstr "Search folders..."
#: apps/remix/app/components/general/organisation-groups-multiselect-combobox.tsx
msgid "Search groups by name"
msgstr "Search groups by name"
#: packages/ui/components/common/language-switcher-dialog.tsx
msgid "Search languages..."
msgstr "Search languages..."
#: apps/remix/app/components/general/organisation-members-multiselect-combobox.tsx
msgid "Search members by name or email"
msgstr "Search members by name or email"
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx
msgid "Secret"
msgstr "Secret"
@@ -8913,8 +8895,7 @@ msgstr "Select default role"
msgid "Select direction"
msgstr "Select direction"
#: apps/remix/app/components/general/organisation-groups-multiselect-combobox.tsx
#: apps/remix/app/components/general/organisation-groups-multiselect-combobox.tsx
#: apps/remix/app/components/dialogs/team-group-create-dialog.tsx
msgid "Select groups"
msgstr "Select groups"
@@ -8926,8 +8907,9 @@ msgstr "Select groups of members to add to the team."
msgid "Select groups to add to this team"
msgstr "Select groups to add to this team"
#: apps/remix/app/components/general/organisation-members-multiselect-combobox.tsx
#: apps/remix/app/components/general/organisation-members-multiselect-combobox.tsx
#: apps/remix/app/components/dialogs/organisation-group-create-dialog.tsx
#: apps/remix/app/components/dialogs/team-member-create-dialog.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx
msgid "Select members"
msgstr "Select members"
@@ -11072,6 +11054,7 @@ msgstr "To mark this document as viewed, you need to be logged in as <0>{0}</0>"
msgid "To mark this document as viewed, you need to be logged in."
msgstr "To mark this document as viewed, you need to be logged in."
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
+4 -2
View File
@@ -2793,7 +2793,7 @@ msgstr "Configurar plantilla"
msgid "Configure Template"
msgstr "Configurar plantilla"
#. placeholder {0}: parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[currentField.type])
#. placeholder {0}: parseMessageDescriptor( _, FRIENDLY_FIELD_TYPE[currentField.type], )
#: apps/remix/app/components/embed/authoring/field-advanced-settings-drawer.tsx
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -5125,7 +5125,7 @@ msgstr "Vence"
msgid "Expires {0}"
msgstr "Expira el {0}"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat( 'mm:ss', )
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Expira en {0}"
@@ -11077,6 +11077,7 @@ msgstr "Para marcar este documento como visto, debes iniciar sesión como <0>{0}
msgid "To mark this document as viewed, you need to be logged in."
msgstr "Para marcar este documento como visto, necesitas estar conectado."
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -13677,3 +13678,4 @@ msgstr "Su código de verificación:"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "your-domain.com another-domain.com"
msgstr "su-dominio.com otro-dominio.com"
+4 -2
View File
@@ -2793,7 +2793,7 @@ msgstr "Configurer le modèle"
msgid "Configure Template"
msgstr "Configurer le modèle"
#. placeholder {0}: parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[currentField.type])
#. placeholder {0}: parseMessageDescriptor( _, FRIENDLY_FIELD_TYPE[currentField.type], )
#: apps/remix/app/components/embed/authoring/field-advanced-settings-drawer.tsx
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -5125,7 +5125,7 @@ msgstr "Expire le"
msgid "Expires {0}"
msgstr "Expire le {0}"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat( 'mm:ss', )
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Expire dans {0}"
@@ -11077,6 +11077,7 @@ msgstr "Pour marquer ce document comme consulté, vous devez être connecté en
msgid "To mark this document as viewed, you need to be logged in."
msgstr "Pour marquer ce document comme vu, vous devez être connecté."
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -13677,3 +13678,4 @@ msgstr "Votre code de vérification :"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "your-domain.com another-domain.com"
msgstr "your-domain.com another-domain.com"
+4 -2
View File
@@ -2793,7 +2793,7 @@ msgstr "Configura il modello"
msgid "Configure Template"
msgstr "Configura Modello"
#. placeholder {0}: parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[currentField.type])
#. placeholder {0}: parseMessageDescriptor( _, FRIENDLY_FIELD_TYPE[currentField.type], )
#: apps/remix/app/components/embed/authoring/field-advanced-settings-drawer.tsx
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -5125,7 +5125,7 @@ msgstr "Scade"
msgid "Expires {0}"
msgstr "Scade il {0}"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat( 'mm:ss', )
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Scade in {0}"
@@ -11077,6 +11077,7 @@ msgstr "Per contrassegnare questo documento come visualizzato, è necessario ess
msgid "To mark this document as viewed, you need to be logged in."
msgstr "Per segnare questo documento come visualizzato, devi essere loggato."
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -13677,3 +13678,4 @@ msgstr "Il tuo codice di verifica:"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "your-domain.com another-domain.com"
msgstr "tuo-dominio.com altro-dominio.com"
+4 -2
View File
@@ -2793,7 +2793,7 @@ msgstr "テンプレートを構成"
msgid "Configure Template"
msgstr "テンプレートを設定"
#. placeholder {0}: parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[currentField.type])
#. placeholder {0}: parseMessageDescriptor( _, FRIENDLY_FIELD_TYPE[currentField.type], )
#: apps/remix/app/components/embed/authoring/field-advanced-settings-drawer.tsx
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -5125,7 +5125,7 @@ msgstr "有効期限"
msgid "Expires {0}"
msgstr "有効期限: {0}"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat( 'mm:ss', )
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "有効期限: 残り {0}"
@@ -11077,6 +11077,7 @@ msgstr "この文書を閲覧済みにするには、<0>{0}</0> としてログ
msgid "To mark this document as viewed, you need to be logged in."
msgstr "この文書を閲覧済みにするには、ログインしている必要があります。"
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -13677,3 +13678,4 @@ msgstr "認証コード:"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "your-domain.com another-domain.com"
msgstr "your-domain.com another-domain.com"
+4 -2
View File
@@ -2793,7 +2793,7 @@ msgstr "템플릿 구성"
msgid "Configure Template"
msgstr "템플릿 구성"
#. placeholder {0}: parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[currentField.type])
#. placeholder {0}: parseMessageDescriptor( _, FRIENDLY_FIELD_TYPE[currentField.type], )
#: apps/remix/app/components/embed/authoring/field-advanced-settings-drawer.tsx
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -5125,7 +5125,7 @@ msgstr "만료일"
msgid "Expires {0}"
msgstr "만료일 {0}"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat( 'mm:ss', )
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "{0} 후 만료"
@@ -11077,6 +11077,7 @@ msgstr "이 문서를 열람된 상태로 표시하려면 <0>{0}</0> 계정으
msgid "To mark this document as viewed, you need to be logged in."
msgstr "이 문서를 열람 완료로 표시하려면 로그인해야 합니다."
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -13677,3 +13678,4 @@ msgstr "인증 코드:"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "your-domain.com another-domain.com"
msgstr "your-domain.com another-domain.com"
+4 -2
View File
@@ -2793,7 +2793,7 @@ msgstr "Sjabloon configureren"
msgid "Configure Template"
msgstr "Sjabloon configureren"
#. placeholder {0}: parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[currentField.type])
#. placeholder {0}: parseMessageDescriptor( _, FRIENDLY_FIELD_TYPE[currentField.type], )
#: apps/remix/app/components/embed/authoring/field-advanced-settings-drawer.tsx
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -5125,7 +5125,7 @@ msgstr "Verloopt"
msgid "Expires {0}"
msgstr "Verloopt op {0}"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat( 'mm:ss', )
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Verloopt over {0}"
@@ -11077,6 +11077,7 @@ msgstr "Om dit document als bekeken te markeren, moet je ingelogd zijn als <0>{0
msgid "To mark this document as viewed, you need to be logged in."
msgstr "Om dit document als bekeken te markeren, moet u zijn ingelogd."
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -13677,3 +13678,4 @@ msgstr "Uw verificatiecode:"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "your-domain.com another-domain.com"
msgstr "your-domain.com another-domain.com"
+9 -9
View File
@@ -8,7 +8,7 @@ msgstr ""
"Language: pl\n"
"Project-Id-Version: documenso-app\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2026-05-08 03:04\n"
"PO-Revision-Date: 2026-05-07 05:08\n"
"Last-Translator: \n"
"Language-Team: Polish\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
@@ -2793,7 +2793,7 @@ msgstr "Skonfiguruj szablon"
msgid "Configure Template"
msgstr "Skonfiguruj szablon"
#. placeholder {0}: parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[currentField.type])
#. placeholder {0}: parseMessageDescriptor( _, FRIENDLY_FIELD_TYPE[currentField.type], )
#: apps/remix/app/components/embed/authoring/field-advanced-settings-drawer.tsx
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -5125,7 +5125,7 @@ msgstr "Wygasa"
msgid "Expires {0}"
msgstr "Wygasa {0}"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat( 'mm:ss', )
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Wygaśnie za {0}"
@@ -6926,7 +6926,7 @@ msgstr "Brak skonfigurowanej licencji"
#: apps/remix/app/components/general/organisation-members-multiselect-combobox.tsx
msgid "No members found"
msgstr "Nie znaleziono użytkowników"
msgstr "Nie znaleziono członków"
#: apps/remix/app/components/dialogs/team-member-create-dialog.tsx
msgid "No members selected"
@@ -8789,7 +8789,7 @@ msgstr "Szukaj folderów..."
#: apps/remix/app/components/general/organisation-groups-multiselect-combobox.tsx
msgid "Search groups by name"
msgstr "Szukaj nazwy grupy"
msgstr "Wyszukaj grupy po nazwie"
#: packages/ui/components/common/language-switcher-dialog.tsx
msgid "Search languages..."
@@ -8797,7 +8797,7 @@ msgstr "Szukaj języków..."
#: apps/remix/app/components/general/organisation-members-multiselect-combobox.tsx
msgid "Search members by name or email"
msgstr "Szukaj nazwy lub adresu e-mail użytkownika"
msgstr "Wyszukaj członków po imieniu, nazwisku lub e-mailu"
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx
msgid "Secret"
@@ -10926,9 +10926,7 @@ msgstr "Zostanie wysłana do właściciela po zakończeniu dokumentu."
#: packages/ui/components/document/document-email-checkboxes.tsx
msgid "This will be sent to the document owner when a recipient's signing window has expired."
msgstr ""
"Zostanie wysłana do właściciela dokumentu, gdy minie czas na podpisanie przez odbiorcę\n"
""
msgstr "Zostanie wysłana do właściciela dokumentu, gdy minie czas na podpisanie przez odbiorcę\n"
#: apps/remix/app/components/tables/organisation-email-domains-table.tsx
msgid "This will check and sync the status of all email domains for this organisation"
@@ -11079,6 +11077,7 @@ msgstr "Aby oznaczyć dokument jako wyświetlony, musisz być zalogowany jako <0
msgid "To mark this document as viewed, you need to be logged in."
msgstr "Aby oznaczyć dokument jako wyświetlony, musisz być zalogowany."
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -13679,3 +13678,4 @@ msgstr "Twój kod weryfikacyjny:"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "your-domain.com another-domain.com"
msgstr "your-domain.com another-domain.com"
+7 -24
View File
@@ -2788,7 +2788,7 @@ msgstr "Configurar modelo"
msgid "Configure Template"
msgstr "Configurar Modelo"
#. placeholder {0}: parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[currentField.type])
#. placeholder {0}: parseMessageDescriptor( _, FRIENDLY_FIELD_TYPE[currentField.type], )
#: apps/remix/app/components/embed/authoring/field-advanced-settings-drawer.tsx
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -5120,7 +5120,7 @@ msgstr ""
msgid "Expires {0}"
msgstr ""
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat( 'mm:ss', )
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "Expira em {0}"
@@ -6333,8 +6333,6 @@ msgstr "Carregando sugestões..."
#: apps/remix/app/components/embed/embed-client-loading.tsx
#: apps/remix/app/components/general/default-recipients-multiselect-combobox.tsx
#: apps/remix/app/components/general/document/document-page-view-recent-activity.tsx
#: apps/remix/app/components/general/organisation-groups-multiselect-combobox.tsx
#: apps/remix/app/components/general/organisation-members-multiselect-combobox.tsx
#: apps/remix/app/routes/_authenticated+/admin+/email-domains.$id.tsx
msgid "Loading..."
msgstr "Carregando..."
@@ -6911,18 +6909,10 @@ msgstr ""
msgid "No further action is required from you at this time."
msgstr "Nenhuma ação adicional é necessária de sua parte neste momento."
#: apps/remix/app/components/general/organisation-groups-multiselect-combobox.tsx
msgid "No groups found"
msgstr ""
#: apps/remix/app/components/general/admin-license-card.tsx
msgid "No License Configured"
msgstr ""
#: apps/remix/app/components/general/organisation-members-multiselect-combobox.tsx
msgid "No members found"
msgstr ""
#: apps/remix/app/components/dialogs/team-member-create-dialog.tsx
msgid "No members selected"
msgstr ""
@@ -8782,18 +8772,10 @@ msgstr "Pesquisar documentos..."
msgid "Search folders..."
msgstr "Pesquisar pastas..."
#: apps/remix/app/components/general/organisation-groups-multiselect-combobox.tsx
msgid "Search groups by name"
msgstr ""
#: packages/ui/components/common/language-switcher-dialog.tsx
msgid "Search languages..."
msgstr "Pesquisar idiomas..."
#: apps/remix/app/components/general/organisation-members-multiselect-combobox.tsx
msgid "Search members by name or email"
msgstr ""
#: apps/remix/app/components/dialogs/webhook-create-dialog.tsx
msgid "Secret"
msgstr "Segredo"
@@ -8913,8 +8895,7 @@ msgstr "Selecione a função padrão"
msgid "Select direction"
msgstr "Selecione a direção"
#: apps/remix/app/components/general/organisation-groups-multiselect-combobox.tsx
#: apps/remix/app/components/general/organisation-groups-multiselect-combobox.tsx
#: apps/remix/app/components/dialogs/team-group-create-dialog.tsx
msgid "Select groups"
msgstr "Selecione grupos"
@@ -8926,8 +8907,9 @@ msgstr "Selecione grupos de membros para adicionar à equipe."
msgid "Select groups to add to this team"
msgstr "Selecione grupos para adicionar a esta equipe"
#: apps/remix/app/components/general/organisation-members-multiselect-combobox.tsx
#: apps/remix/app/components/general/organisation-members-multiselect-combobox.tsx
#: apps/remix/app/components/dialogs/organisation-group-create-dialog.tsx
#: apps/remix/app/components/dialogs/team-member-create-dialog.tsx
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.groups.$id.tsx
msgid "Select members"
msgstr "Selecione membros"
@@ -11072,6 +11054,7 @@ msgstr "Para marcar este documento como visualizado, você precisa estar logado
msgid "To mark this document as viewed, you need to be logged in."
msgstr "Para marcar este documento como visualizado, você precisa estar logado."
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
+4 -2
View File
@@ -2793,7 +2793,7 @@ msgstr "配置模板"
msgid "Configure Template"
msgstr "配置模板"
#. placeholder {0}: parseMessageDescriptor(_, FRIENDLY_FIELD_TYPE[currentField.type])
#. placeholder {0}: parseMessageDescriptor( _, FRIENDLY_FIELD_TYPE[currentField.type], )
#: apps/remix/app/components/embed/authoring/field-advanced-settings-drawer.tsx
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -5125,7 +5125,7 @@ msgstr "到期时间"
msgid "Expires {0}"
msgstr "于 {0} 到期"
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat('mm:ss')
#. placeholder {0}: DateTime.fromMillis(Math.max(millisecondsRemaining, 0)).toFormat( 'mm:ss', )
#: apps/remix/app/components/general/document-signing/access-auth-2fa-form.tsx
msgid "Expires in {0}"
msgstr "将在 {0} 后过期"
@@ -11077,6 +11077,7 @@ msgstr "要将此文档标记为已查看,你需要以 <0>{0}</0> 登录"
msgid "To mark this document as viewed, you need to be logged in."
msgstr "要将此文档标记为已查看,您需要先登录。"
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#. placeholder {0}: emptyCheckboxFields.length > 0 ? 'Checkbox' : emptyRadioFields.length > 0 ? 'Radio' : 'Select'
#: packages/ui/primitives/document-flow/add-fields.tsx
#: packages/ui/primitives/template-flow/add-template-fields.tsx
@@ -13677,3 +13678,4 @@ msgstr "您的验证码:"
#: apps/remix/app/routes/_authenticated+/o.$orgUrl.settings.sso.tsx
msgid "your-domain.com another-domain.com"
msgstr "your-domain.com another-domain.com"
+1 -1
View File
@@ -61,7 +61,7 @@ export function AutoSizedText({ children, className, maxHeight, useRem = false }
return;
}
let newFontSize = fontSize.current;
let newFontSize: number;
const targetHeight = maxHeight && maxHeight < parentDimensions.height ? maxHeight : parentDimensions.height;