${staticHtml`${unsafeStatic(htmlStr)}`}`;
}
diff --git a/frontend/src/components/ui/desc-list.ts b/frontend/src/components/ui/desc-list.ts
index a21ab6d8be..03d0ac58c0 100644
--- a/frontend/src/components/ui/desc-list.ts
+++ b/frontend/src/components/ui/desc-list.ts
@@ -127,6 +127,7 @@ export class DescList extends LitElement {
vertical: !this.horizontal,
horizontal: this.horizontal,
})}
+ part="base"
>
+ ${msg("Loading interactive browser...")} +
++ ${msg("Browser is still warming up...")} +
++ ${msg( + `Interactive browser session timed out due to inactivity.`, + )} +
+- ${msg(`Interactive browser session timed out due to inactivity.`)} -
-- ${msg( - "Connection to interactive browser lost. Waiting to reconnect...", - )} -
-+ ${msg( + "Connection to interactive browser lost. Waiting to reconnect...", + )} +
+@@ -39,10 +39,12 @@ export function page( >
- ${msg( - "View or edit the current browser profile configuration.", - )} -
-
- ${msg(
- "Workflows that use this browser profile will behave as if they have logged into the same websites and have the same web cookies.",
- )}
-
- ${msg(html`
- It is highly recommended to create dedicated accounts to use when
- crawling. For details, refer to
-
- ${msg("browser profile best practices")}.
- `)}
-
& { language: Language };
-export const renderCode = ({ language, value, wrap }: Partial) => {
+export const renderCode = ({
+ language,
+ value,
+ noWrap,
+}: Partial) => {
return html`
`;
diff --git a/frontend/src/theme.stylesheet.css b/frontend/src/theme.stylesheet.css
index 2ad070739a..d04f04cfc8 100644
--- a/frontend/src/theme.stylesheet.css
+++ b/frontend/src/theme.stylesheet.css
@@ -122,6 +122,12 @@
}
@layer components {
+ sl-skeleton {
+ --border-radius: var(--sl-border-radius-small);
+ --color: var(--sl-color-neutral-50);
+ --sheen-color: var(--sl-color-neutral-100);
+ }
+
sl-avatar::part(base) {
transition: var(--sl-transition-x-fast) background-color;
}
diff --git a/frontend/src/types/events.d.ts b/frontend/src/types/events.d.ts
index 7b08caaa2d..fda2b2c6c4 100644
--- a/frontend/src/types/events.d.ts
+++ b/frontend/src/types/events.d.ts
@@ -2,7 +2,6 @@ import { type APIEventMap } from "@/controllers/api";
import { type CopiedEventMap } from "@/controllers/clipboard";
import { type NavigateEventMap } from "@/controllers/navigate";
import { type NotifyEventMap } from "@/controllers/notify";
-import { type UserGuideEventMap } from "@/index";
import { type AuthEventMap } from "@/utils/AuthService";
/**
@@ -15,6 +14,5 @@ declare global {
NotifyEventMap,
AuthEventMap,
APIEventMap,
- UserGuideEventMap,
CopiedEventMap {}
}
diff --git a/frontend/src/utils/crawl-workflows/settingsForDuplicate.ts b/frontend/src/utils/crawl-workflows/settingsForDuplicate.ts
index f664f62845..5ecf3b9247 100644
--- a/frontend/src/utils/crawl-workflows/settingsForDuplicate.ts
+++ b/frontend/src/utils/crawl-workflows/settingsForDuplicate.ts
@@ -16,7 +16,7 @@ import {
} from "@/types/workflow";
export type DuplicateWorkflowSettings = {
- workflow: WorkflowParams;
+ workflow: Partial;
scopeType?: ScopeType | NewWorkflowOnlyScopeType;
seeds?: Seed[];
seedFile?: StorageSeedFile;
@@ -27,11 +27,11 @@ export function settingsForDuplicate({
seeds,
seedFile,
}: {
- workflow: Workflow;
+ workflow: Partial;
seeds?: APIPaginatedList;
seedFile?: StorageSeedFile;
}): DuplicateWorkflowSettings {
- const workflowParams: WorkflowParams = {
+ const workflowParams: Partial = {
...workflow,
name: workflow.name ? msg(str`${workflow.name} Copy`) : "",
};
@@ -42,7 +42,7 @@ export function settingsForDuplicate({
scopeType:
seedFile || (seedItems?.length && seedItems.length > 1)
? NewWorkflowOnlyScopeType.PageList
- : workflowParams.config.scopeType,
+ : workflowParams.config?.scopeType,
workflow: workflowParams,
seeds: seedItems,
seedFile,
diff --git a/frontend/src/utils/pluralize.ts b/frontend/src/utils/pluralize.ts
index 08862130c8..83afe273c2 100644
--- a/frontend/src/utils/pluralize.ts
+++ b/frontend/src/utils/pluralize.ts
@@ -299,6 +299,58 @@ const plurals = {
id: "changes.plural.other",
}),
},
+ workflows: {
+ zero: msg("workflows", {
+ desc: 'plural form of "workflow" for zero workflows',
+ id: "workflows.plural.zero",
+ }),
+ one: msg("workflow", {
+ desc: 'singular form for "workflow"',
+ id: "workflows.plural.one",
+ }),
+ two: msg("workflows", {
+ desc: 'plural form of "workflow" for two workflows',
+ id: "workflows.plural.two",
+ }),
+ few: msg("workflows", {
+ desc: 'plural form of "workflow" for few workflows',
+ id: "workflows.plural.few",
+ }),
+ many: msg("workflows", {
+ desc: 'plural form of "workflow" for many workflows',
+ id: "workflows.plural.many",
+ }),
+ other: msg("workflows", {
+ desc: 'plural form of "workflow" for multiple/other workflows',
+ id: "workflows.plural.other",
+ }),
+ },
+ domains: {
+ zero: msg("domains", {
+ desc: 'plural form of "domain" for zero domains',
+ id: "domains.plural.zero",
+ }),
+ one: msg("domain", {
+ desc: 'singular form for "domain"',
+ id: "domains.plural.one",
+ }),
+ two: msg("domains", {
+ desc: 'plural form of "domain" for two domains',
+ id: "domains.plural.two",
+ }),
+ few: msg("domains", {
+ desc: 'plural form of "domain" for few domains',
+ id: "domains.plural.few",
+ }),
+ many: msg("domains", {
+ desc: 'plural form of "domain" for many domains',
+ id: "domains.plural.many",
+ }),
+ other: msg("domains", {
+ desc: 'plural form of "domain" for multiple/other domains',
+ id: "domains.plural.other",
+ }),
+ },
};
export const pluralOf = (word: keyof typeof plurals, count: number) => {
diff --git a/frontend/src/utils/workflow.ts b/frontend/src/utils/workflow.ts
index f2cbb7ebd1..14621dbbef 100644
--- a/frontend/src/utils/workflow.ts
+++ b/frontend/src/utils/workflow.ts
@@ -7,7 +7,7 @@ import { z } from "zod";
import { getAppSettings, type AppSettings } from "./app";
import type { Tags } from "@/components/ui/tag-input";
-import type { UserGuideEventMap } from "@/index";
+import type { BtrixUserGuideShowEvent } from "@/events/btrix-user-guide-show";
import {
Behavior,
CrawlerChannelImage,
@@ -73,12 +73,12 @@ export const workflowTabToGuideHash: Record = {
export function makeUserGuideEvent(
section: SectionsEnum,
-): UserGuideEventMap["btrix-user-guide-show"] {
+): BtrixUserGuideShowEvent {
const userGuideHash =
(workflowTabToGuideHash[section] as GuideHash | undefined) ||
GuideHash.Scope;
- return new CustomEvent(
+ return new CustomEvent(
"btrix-user-guide-show",
{
detail: {