@orbit-work/ui 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/appearance.cjs +4 -2
  2. package/dist/appearance.cjs.map +1 -1
  3. package/dist/appearance.d.cts +7 -1
  4. package/dist/appearance.d.ts +7 -1
  5. package/dist/appearance.js +5 -3
  6. package/dist/brand-preview.cjs +14 -0
  7. package/dist/brand-preview.cjs.map +1 -0
  8. package/dist/brand-preview.d.cts +13 -0
  9. package/dist/brand-preview.d.ts +13 -0
  10. package/dist/brand-preview.js +14 -0
  11. package/dist/brand-preview.js.map +1 -0
  12. package/dist/{chunk-KRP43SUA.cjs → chunk-JC7BHKS4.cjs} +2 -398
  13. package/dist/chunk-JC7BHKS4.cjs.map +1 -0
  14. package/dist/chunk-K7ONUTLA.cjs +240 -0
  15. package/dist/chunk-K7ONUTLA.cjs.map +1 -0
  16. package/dist/chunk-KTNWR3H5.js +399 -0
  17. package/dist/chunk-KTNWR3H5.js.map +1 -0
  18. package/dist/{chunk-S3R5QFO4.js → chunk-LSGO6AQR.js} +2 -398
  19. package/dist/chunk-LSGO6AQR.js.map +1 -0
  20. package/dist/chunk-Q7B4M5GC.cjs +399 -0
  21. package/dist/chunk-Q7B4M5GC.cjs.map +1 -0
  22. package/dist/chunk-ZXMHCL6D.js +240 -0
  23. package/dist/chunk-ZXMHCL6D.js.map +1 -0
  24. package/dist/core.css +12 -3
  25. package/dist/core.scoped.css +7888 -0
  26. package/dist/index.cjs +212 -377
  27. package/dist/index.cjs.map +1 -1
  28. package/dist/index.d.cts +37 -4
  29. package/dist/index.d.ts +37 -4
  30. package/dist/index.js +191 -356
  31. package/dist/index.js.map +1 -1
  32. package/dist/{appearance-D7uh_ZTy.d.cts → unifiedTheme-DQ-sETKO.d.cts} +13 -4
  33. package/dist/{appearance-D7uh_ZTy.d.ts → unifiedTheme-DQ-sETKO.d.ts} +13 -4
  34. package/dist/workbench.css +12 -3
  35. package/package.json +16 -2
  36. package/dist/chunk-KRP43SUA.cjs.map +0 -1
  37. package/dist/chunk-S3R5QFO4.js.map +0 -1
package/dist/index.js CHANGED
@@ -7,23 +7,28 @@ import {
7
7
  import {
8
8
  BUILTIN_ORBITWORK_SKINS,
9
9
  DEFAULT_ORBITWORK_SKIN_ID,
10
+ TENANT_THEME_COLOR_KEYS
11
+ } from "./chunk-KTNWR3H5.js";
12
+ import {
13
+ applyUnifiedTheme,
14
+ localizedCopy,
15
+ mergeUnifiedTheme,
16
+ removeUnifiedTheme
17
+ } from "./chunk-ZXMHCL6D.js";
18
+ import {
10
19
  HEX_COLOR,
11
20
  ORBITWORK_FONT_SCALES,
12
- ORBITWORK_SKIN_CSS_VARIABLES,
13
- TENANT_THEME_COLOR_KEYS,
14
21
  assertKnownKeys,
15
22
  ds2ContrastRatio,
16
- fontScaleTokens,
17
23
  hasOrbitworkSkinChatBackground,
18
24
  isOrbitworkFontScale,
19
25
  isRecord,
20
- normalizeOrbitworkSkinPublicPartStyles,
21
26
  orbitworkSkinChatBackgroundMaskColor,
22
27
  orbitworkSkinImageCssValue,
23
28
  parseOrbitworkSkin,
24
29
  resolveOrbitworkFontScale,
25
30
  resolveOrbitworkSkinChatBackgroundMask
26
- } from "./chunk-S3R5QFO4.js";
31
+ } from "./chunk-LSGO6AQR.js";
27
32
  import {
28
33
  BROWSER_ANNOTATION_POPUP_STYLES,
29
34
  BROWSER_ANNOTATION_PROPERTY_DEFS
@@ -26717,7 +26722,7 @@ function DesktopAboutSettingsView({
26717
26722
  className: "flex flex-col items-center py-10 text-center text-[color:var(--ow-text)]",
26718
26723
  "aria-labelledby": "desktop-about-product-name",
26719
26724
  children: [
26720
- /* @__PURE__ */ jsx152("img", { "data-ow-part": "logo", src: logoSrc, alt: "", className: "size-16" }),
26725
+ /* @__PURE__ */ jsx152("img", { "data-ow-part": "logo", src: logoSrc, alt: "", className: "size-16 object-contain" }),
26721
26726
  /* @__PURE__ */ jsx152(
26722
26727
  "h2",
26723
26728
  {
@@ -28453,7 +28458,7 @@ function DesktopConnectorCardView({
28453
28458
  }
28454
28459
 
28455
28460
  // src/theme/core/tenantTheme.ts
28456
- var ROOT_KEYS = /* @__PURE__ */ new Set(["name", "logo", "favicon", "modes", "typography", "branding"]);
28461
+ var ROOT_KEYS = /* @__PURE__ */ new Set(["name", "logo", "loginKV", "favicon", "modes", "typography", "branding"]);
28457
28462
  var MODE_KEYS = /* @__PURE__ */ new Set(["light", "dark"]);
28458
28463
  var COLOR_KEYS = new Set(TENANT_THEME_COLOR_KEYS);
28459
28464
  var TYPOGRAPHY_KEYS = /* @__PURE__ */ new Set(["fontSans", "fontMono"]);
@@ -28559,6 +28564,7 @@ function parseTenantTheme(input) {
28559
28564
  assertKnownKeys(input, ROOT_KEYS, "\u79DF\u6237\u4E3B\u9898");
28560
28565
  const name = parseLimitedText(input.name, "name", LENGTH_LIMITS.name, true);
28561
28566
  const logo = parseAsset(input.logo, "logo", true);
28567
+ const loginKV = parseAsset(input.loginKV, "loginKV", false);
28562
28568
  const favicon = parseAsset(input.favicon, "favicon", false);
28563
28569
  if (!isRecord(input.modes)) throw new Error("modes \u5FC5\u987B\u662F\u5BF9\u8C61");
28564
28570
  assertKnownKeys(input.modes, MODE_KEYS, "modes");
@@ -28578,6 +28584,7 @@ function parseTenantTheme(input) {
28578
28584
  theme: {
28579
28585
  name,
28580
28586
  logo,
28587
+ ...loginKV !== void 0 ? { loginKV } : {},
28581
28588
  ...favicon !== void 0 ? { favicon } : {},
28582
28589
  modes: { ...light ? { light } : {}, ...dark ? { dark } : {} },
28583
28590
  typography: { fontSans: fontSans.trim(), fontMono: fontMono.trim() },
@@ -28589,228 +28596,8 @@ function parseTenantTheme(input) {
28589
28596
  }
28590
28597
  }
28591
28598
 
28592
- // src/theme/core/unifiedTheme.ts
28593
- var TENANT_TOKEN_MAP = {
28594
- bg: "--ow-bg",
28595
- surface: "--ow-surface",
28596
- surface2: "--ow-surface-2",
28597
- text: "--ow-text",
28598
- text2: "--ow-text-2",
28599
- text3: "--ow-text-3",
28600
- border: "--ow-border",
28601
- borderStrong: "--ow-border-strong"
28602
- };
28603
- function tenantTokens(theme, mode) {
28604
- const colors = theme?.modes[mode];
28605
- if (!colors) return {};
28606
- return Object.fromEntries(
28607
- Object.entries(TENANT_TOKEN_MAP).map(([key, token]) => [token, colors[key]])
28608
- );
28609
- }
28610
- function skinTokens(skin, mode) {
28611
- const values = skin?.modes[mode];
28612
- if (!values) return {};
28613
- const tokens = {};
28614
- for (const [rawKey, value] of Object.entries(values)) {
28615
- const key = rawKey;
28616
- const property = ORBITWORK_SKIN_CSS_VARIABLES[key];
28617
- if (!property || !value) continue;
28618
- if (key === "chatBackgroundImage") {
28619
- const image = orbitworkSkinImageCssValue(value);
28620
- if (image) tokens[property] = image;
28621
- continue;
28622
- }
28623
- if (key === "chatBackgroundMaskColor") {
28624
- const mask = resolveOrbitworkSkinChatBackgroundMask(value);
28625
- tokens[property] = mask.color;
28626
- tokens["--ow-chat-bg-mask-start-opacity"] = `${mask.startOpacity}%`;
28627
- tokens["--ow-chat-bg-mask-end-opacity"] = `${mask.endOpacity}%`;
28628
- continue;
28629
- }
28630
- if (key === "chatBackgroundOverlay" && values.chatBackgroundMaskColor) continue;
28631
- tokens[property] = value;
28632
- }
28633
- return tokens;
28634
- }
28635
- function localeCandidates(locale) {
28636
- let canonical = "en-US";
28637
- try {
28638
- canonical = Intl.getCanonicalLocales(locale)[0] ?? "en-US";
28639
- } catch {
28640
- }
28641
- const language = canonical.split("-")[0] ?? "en";
28642
- return [.../* @__PURE__ */ new Set([canonical, language, "en-US"])];
28643
- }
28644
- function localizedCopy(source, locale) {
28645
- if (!source) return void 0;
28646
- for (const candidate of localeCandidates(locale)) {
28647
- if (source[candidate]) return source[candidate];
28648
- }
28649
- return void 0;
28650
- }
28651
- function mergeUnifiedTheme(brand, tenant, userSkin, mode, locale = "en-US", appearanceOverlaySkin = null, fontScalePreference = null) {
28652
- const chatBackgroundImage = appearanceOverlaySkin?.modes[mode]?.chatBackgroundImage ?? userSkin?.modes[mode]?.chatBackgroundImage;
28653
- const tokens = {
28654
- ...brand?.modes[mode] ?? {},
28655
- ...tenantTokens(tenant, mode),
28656
- ...skinTokens(userSkin, mode),
28657
- ...skinTokens(appearanceOverlaySkin, mode),
28658
- ...fontScaleTokens(resolveOrbitworkFontScale(fontScalePreference, userSkin?.fontScale))
28659
- };
28660
- const typography = tenant?.typography ?? brand?.typography;
28661
- if (typography) {
28662
- tokens["--ow-font-sans"] = typography.fontSans;
28663
- tokens["--ow-font-mono"] = typography.fontMono;
28664
- }
28665
- const brandCopy = localizedCopy(brand?.branding, locale);
28666
- const tenantCopy = localizedCopy(tenant?.branding, locale);
28667
- const copy = tenantCopy ? { ...brandCopy ?? {}, ...tenantCopy } : brandCopy ?? null;
28668
- const logo = tenant?.logo || brand?.logo;
28669
- const favicon = tenant?.favicon || brand?.favicon;
28670
- const branding = copy ? {
28671
- ...copy,
28672
- ...logo ? { logo } : {},
28673
- ...favicon ? { favicon } : {}
28674
- } : null;
28675
- return {
28676
- mode,
28677
- tokens,
28678
- branding,
28679
- skin: userSkin?.modes[mode] || appearanceOverlaySkin?.modes[mode] ? {
28680
- id: userSkin?.id ?? appearanceOverlaySkin?.id ?? "default",
28681
- ...userSkin?.contributes?.publicPartStyles ? { publicPartStyles: userSkin.contributes.publicPartStyles } : {},
28682
- ...chatBackgroundImage ? { chatBackgroundImage } : {},
28683
- hasChatBackgroundImage: Boolean(chatBackgroundImage),
28684
- hasUserBubbleStyle: Boolean(
28685
- userSkin?.modes[mode]?.userBubbleBackground || userSkin?.modes[mode]?.userBubbleForeground || userSkin?.modes[mode]?.userBubbleBorder
28686
- )
28687
- } : null,
28688
- sources: {
28689
- brand: brand?.id ?? null,
28690
- tenant: tenant?.name ?? null,
28691
- user: userSkin?.id ?? null
28692
- }
28693
- };
28694
- }
28695
-
28696
28599
  // src/theme/providers/ThemeProvider.tsx
28697
28600
  import { createContext as createContext5, useCallback as useCallback40, useContext as useContext5, useEffect as useEffect37, useMemo as useMemo12, useState as useState61 } from "react";
28698
-
28699
- // src/theme/utils/themeApplier.ts
28700
- var managedProperties = /* @__PURE__ */ new WeakMap();
28701
- var managedPublicPartStyles = /* @__PURE__ */ new WeakMap();
28702
- var managedPublicPartScopes = /* @__PURE__ */ new WeakMap();
28703
- var managedChatBackgroundImages = /* @__PURE__ */ new WeakMap();
28704
- var nextPublicPartScope = 0;
28705
- var CHAT_BACKGROUND_IMAGE_PROPERTY = "--ow-chat-bg-image";
28706
- function applyUnifiedTheme(theme, target = document.documentElement) {
28707
- const previous = managedProperties.get(target) ?? /* @__PURE__ */ new Set();
28708
- const next = new Set(Object.keys(theme.tokens));
28709
- for (const property of previous) {
28710
- if (!next.has(property)) target.style.removeProperty(property);
28711
- }
28712
- for (const [property, value] of Object.entries(theme.tokens)) {
28713
- if (value === void 0) continue;
28714
- const appliedValue = property === CHAT_BACKGROUND_IMAGE_PROPERTY && theme.skin?.chatBackgroundImage ? chatBackgroundImageCssValue(target, theme.skin.chatBackgroundImage, value) : value;
28715
- target.style.setProperty(property, appliedValue);
28716
- }
28717
- if (!next.has(CHAT_BACKGROUND_IMAGE_PROPERTY) || !theme.skin?.chatBackgroundImage) {
28718
- releaseChatBackgroundImage(target);
28719
- }
28720
- managedProperties.set(target, next);
28721
- setOptionalAttribute(target, "data-ow-brand-theme", theme.sources.brand);
28722
- setOptionalAttribute(target, "data-tenant-theme", theme.sources.tenant);
28723
- setOptionalAttribute(target, "data-ow-skin", theme.skin?.id ?? null);
28724
- if (theme.skin?.hasChatBackgroundImage) target.setAttribute("data-desktop-background-image", "");
28725
- else target.removeAttribute("data-desktop-background-image");
28726
- if (theme.skin?.hasUserBubbleStyle) target.setAttribute("data-chat-user-bubble-skin", "");
28727
- else target.removeAttribute("data-chat-user-bubble-skin");
28728
- const targetDocument = target.ownerDocument ?? (typeof document === "undefined" ? null : document);
28729
- if (targetDocument) applyPublicPartStyles(target, targetDocument, theme.skin);
28730
- }
28731
- function removeUnifiedTheme(target = document.documentElement) {
28732
- for (const property of managedProperties.get(target) ?? []) target.style.removeProperty(property);
28733
- managedProperties.delete(target);
28734
- releaseChatBackgroundImage(target);
28735
- target.removeAttribute("data-ow-brand-theme");
28736
- target.removeAttribute("data-tenant-theme");
28737
- target.removeAttribute("data-ow-skin");
28738
- target.removeAttribute("data-desktop-background-image");
28739
- target.removeAttribute("data-chat-user-bubble-skin");
28740
- removePublicPartStyles(target);
28741
- }
28742
- function chatBackgroundImageCssValue(target, dataUrl, fallback) {
28743
- const current = managedChatBackgroundImages.get(target);
28744
- if (current?.dataUrl === dataUrl) return `url("${current.objectUrl}")`;
28745
- const separator = dataUrl.indexOf(",");
28746
- const header = separator >= 0 ? dataUrl.slice(0, separator) : "";
28747
- if (!/^data:image\/(?:png|jpeg|webp);base64$/i.test(header)) {
28748
- releaseChatBackgroundImage(target);
28749
- return fallback;
28750
- }
28751
- try {
28752
- const binary = globalThis.atob(dataUrl.slice(separator + 1));
28753
- const bytes = new Uint8Array(binary.length);
28754
- for (let index = 0; index < binary.length; index += 1) bytes[index] = binary.charCodeAt(index);
28755
- const objectUrl = globalThis.URL.createObjectURL(new Blob([bytes], { type: header.slice(5, -7) }));
28756
- releaseChatBackgroundImage(target);
28757
- managedChatBackgroundImages.set(target, { dataUrl, objectUrl });
28758
- return `url("${objectUrl}")`;
28759
- } catch {
28760
- releaseChatBackgroundImage(target);
28761
- return fallback;
28762
- }
28763
- }
28764
- function releaseChatBackgroundImage(target) {
28765
- const current = managedChatBackgroundImages.get(target);
28766
- if (!current) return;
28767
- globalThis.URL.revokeObjectURL(current.objectUrl);
28768
- managedChatBackgroundImages.delete(target);
28769
- }
28770
- function setOptionalAttribute(target, name, value) {
28771
- if (value) target.setAttribute(name, value);
28772
- else target.removeAttribute(name);
28773
- }
28774
- function removePublicPartStyles(target) {
28775
- managedPublicPartStyles.get(target)?.remove();
28776
- managedPublicPartStyles.delete(target);
28777
- target.removeAttribute("data-ow-skin-scope");
28778
- }
28779
- function applyPublicPartStyles(target, document2, skin) {
28780
- const previous = managedPublicPartStyles.get(target);
28781
- if (!skin?.publicPartStyles) {
28782
- removePublicPartStyles(target);
28783
- return;
28784
- }
28785
- let normalized;
28786
- try {
28787
- normalized = normalizeOrbitworkSkinPublicPartStyles(skin.publicPartStyles);
28788
- } catch (error) {
28789
- console.error("[theme] rejected invalid public-part styles at apply time:", error);
28790
- removePublicPartStyles(target);
28791
- return;
28792
- }
28793
- let scopeId = managedPublicPartScopes.get(target);
28794
- if (!scopeId) {
28795
- scopeId = `ow-skin-${++nextPublicPartScope}`;
28796
- managedPublicPartScopes.set(target, scopeId);
28797
- }
28798
- target.setAttribute("data-ow-skin-scope", scopeId);
28799
- const scope = `[data-ow-skin-scope="${scopeId}"]`;
28800
- const scopedCss = normalized.replace(/([^{}]+)\{/g, (_match, selector) => {
28801
- const selectors = selector.split(",").map((item) => `${scope} ${item.trim()}`).join(", ");
28802
- return `${selectors} {`;
28803
- });
28804
- const style = previous ?? document2.createElement("style");
28805
- style.setAttribute("data-ow-skin-style", scopeId);
28806
- style.textContent = scopedCss;
28807
- if (!previous) {
28808
- managedPublicPartStyles.set(target, style);
28809
- document2.head.appendChild(style);
28810
- }
28811
- }
28812
-
28813
- // src/theme/providers/ThemeProvider.tsx
28814
28601
  import { jsx as jsx157 } from "react/jsx-runtime";
28815
28602
  var STORAGE_KEY = "ow-theme";
28816
28603
  var SKIN_STORAGE_KEY = "ow-skin-id";
@@ -28885,7 +28672,7 @@ function ThemeProvider({
28885
28672
  const builtinSkins = BUILTIN_ORBITWORK_SKINS;
28886
28673
  const skins = useMemo12(() => [...BUILTIN_ORBITWORK_SKINS, ...customSkins], [customSkins]);
28887
28674
  const activeSkin = tryOnSkin ?? skin;
28888
- const fontScale = resolveOrbitworkFontScale(fontScalePreference, activeSkin?.fontScale);
28675
+ const fontScale = resolveOrbitworkFontScale(fontScalePreference, activeSkin?.fontScale ?? brandTheme?.fontScale);
28889
28676
  const unifiedTheme = useMemo12(
28890
28677
  () => mergeUnifiedTheme(
28891
28678
  brandTheme,
@@ -30336,6 +30123,7 @@ function DesktopConnectorDetailView({
30336
30123
  import { Fragment as Fragment52, jsx as jsx167, jsxs as jsxs138 } from "react/jsx-runtime";
30337
30124
  function DesktopHomeView({
30338
30125
  title = void 0,
30126
+ brandLogoSrc,
30339
30127
  backdrop,
30340
30128
  capsules,
30341
30129
  mounts,
@@ -30358,7 +30146,15 @@ function DesktopHomeView({
30358
30146
  ),
30359
30147
  children: [
30360
30148
  /* @__PURE__ */ jsxs138("div", { "data-slot": "desktop-home-hero", className: "flex items-center gap-[14px]", children: [
30361
- /* @__PURE__ */ jsx167(OrbitworkMark, { variant: "auto", size: 34 }),
30149
+ brandLogoSrc ? /* @__PURE__ */ jsx167(
30150
+ "img",
30151
+ {
30152
+ "data-ow-part": "brand-logo",
30153
+ src: brandLogoSrc,
30154
+ alt: "",
30155
+ className: "h-[34px] w-[34px] object-contain"
30156
+ }
30157
+ ) : /* @__PURE__ */ jsx167(OrbitworkMark, { variant: "auto", size: 34 }),
30362
30158
  /* @__PURE__ */ jsx167(
30363
30159
  "h1",
30364
30160
  {
@@ -30462,7 +30258,7 @@ function defaultLoginLabels(t) {
30462
30258
  };
30463
30259
  }
30464
30260
  var LOGIN_PANE = "flex w-full max-w-[320px] flex-col";
30465
- var LOGIN_MARK = "mx-auto mb-10 block w-[46px] [aspect-ratio:73.4/45.3]";
30261
+ var LOGIN_MARK = "mx-auto mb-10 block h-[46px] w-[46px] object-contain";
30466
30262
  var LOGIN_HEADING = "mb-3 text-center font-[family-name:var(--ow-font-sans)] text-ow-fs-title font-bold text-[color:var(--ow-text)]";
30467
30263
  var LOGIN_SUBTITLE = "mx-auto mb-8 max-w-[320px] text-pretty text-center font-[family-name:var(--ow-font-sans)] text-ow-fs-ui font-normal leading-[1.6] text-[color:var(--ow-text-3)]";
30468
30264
  var LOGIN_LINK = "cursor-pointer rounded-[var(--ow-radius-xs)] border-0 bg-transparent p-0 font-[family-name:var(--ow-font-sans)] text-ow-fs-body-sm font-normal leading-none text-[color:var(--ow-link)] transition-[color] duration-[var(--ow-dur-1)] ease-[var(--ow-ease-beacon)] hover:text-[color:var(--ow-link-hover)] hover:underline active:text-[color:var(--ow-link-hover)] focus-visible:[outline:var(--ow-focus-ring-w)_solid_var(--ow-focus-ring)] focus-visible:outline-offset-[var(--ow-focus-ring-offset)]";
@@ -32857,6 +32653,7 @@ var SidebarShell = forwardRef92(function SidebarShell2({
32857
32653
  import { Fragment as Fragment57, jsx as jsx179, jsxs as jsxs150 } from "react/jsx-runtime";
32858
32654
  function DesktopSidebarView(props) {
32859
32655
  const { t } = useUiLocale();
32656
+ const { branding } = useBranding();
32860
32657
  const { projects } = props;
32861
32658
  const projectsLabel = props.projectsLabel ?? t("sidebar.projects");
32862
32659
  const { isImeEnter, onCompositionStart, onCompositionEnd } = useImeAwareEnter();
@@ -33065,7 +32862,25 @@ function DesktopSidebarView(props) {
33065
32862
  {
33066
32863
  "data-ow-part": "brand",
33067
32864
  className: cn("flex items-center gap-1.5 px-[9px] pb-5", props.platform === "windows" && "mt-2"),
33068
- children: /* @__PURE__ */ jsx179(OrbitworkLockup, { theme: "auto", size: 20 })
32865
+ children: props.brandLogoSrc ? /* @__PURE__ */ jsxs150(Fragment57, { children: [
32866
+ /* @__PURE__ */ jsx179(
32867
+ "img",
32868
+ {
32869
+ "data-ow-part": "brand-logo",
32870
+ src: props.brandLogoSrc,
32871
+ alt: "",
32872
+ className: "h-5 w-5 flex-none object-contain"
32873
+ }
32874
+ ),
32875
+ branding?.productName ? /* @__PURE__ */ jsx179(
32876
+ "span",
32877
+ {
32878
+ "data-ow-part": "brand-name",
32879
+ className: "truncate font-[family-name:var(--ow-font-display,'Space_Grotesk',sans-serif)] text-[20px] font-medium leading-none tracking-[-0.01em] text-[color:var(--ow-text)]",
32880
+ children: branding.productName
32881
+ }
32882
+ ) : null
32883
+ ] }) : /* @__PURE__ */ jsx179(OrbitworkLockup, { theme: "auto", size: 20 })
33069
32884
  }
33070
32885
  ),
33071
32886
  /* @__PURE__ */ jsxs150("nav", { "data-ow-part": "navigation", className: "flex flex-col gap-0.5", children: [
@@ -37549,9 +37364,28 @@ function PdfPreviewDialog({
37549
37364
  );
37550
37365
  }
37551
37366
 
37367
+ // src/components/domain/preview/BrandPreviewScope.tsx
37368
+ import { useLayoutEffect as useLayoutEffect9, useMemo as useMemo16, useRef as useRef48 } from "react";
37369
+ import { jsx as jsx202 } from "react/jsx-runtime";
37370
+ function BrandPreviewScope({ brandTheme, mode, locale = "zh-CN", className, children }) {
37371
+ const rootRef = useRef48(null);
37372
+ const unified = useMemo16(() => mergeUnifiedTheme(brandTheme, null, null, mode, locale), [brandTheme, mode, locale]);
37373
+ useLayoutEffect9(() => {
37374
+ const el = rootRef.current;
37375
+ if (!el) return;
37376
+ applyUnifiedTheme(unified, el);
37377
+ return () => removeUnifiedTheme(el);
37378
+ }, [unified]);
37379
+ const brandingValue = useMemo16(
37380
+ () => ({ branding: unified.branding, tenantLoading: false, tenantError: null }),
37381
+ [unified]
37382
+ );
37383
+ return /* @__PURE__ */ jsx202(BrandingContext.Provider, { value: brandingValue, children: /* @__PURE__ */ jsx202("div", { ref: rootRef, className: cn("ow-ui-scope", className), "data-theme": mode, children }) });
37384
+ }
37385
+
37552
37386
  // src/components/domain/skills/McpServerListView/index.tsx
37553
37387
  import { useState as useState84 } from "react";
37554
- import { jsx as jsx202, jsxs as jsxs171 } from "react/jsx-runtime";
37388
+ import { jsx as jsx203, jsxs as jsxs171 } from "react/jsx-runtime";
37555
37389
  var PAGE_SIZE2 = 8;
37556
37390
  var MCP_LIST_CLASS = "flex flex-col gap-2";
37557
37391
  var MCP_ROW_CLASS = "grid grid-cols-[28px_38px_1fr_auto] items-start gap-2 rounded-[var(--ow-radius-lg)] border border-[color:var(--ow-border)] bg-[var(--ow-bg)] p-3.5";
@@ -37566,7 +37400,7 @@ function McpServerListView({
37566
37400
  }) {
37567
37401
  const { t } = useUiLocale();
37568
37402
  if (loading && servers.length === 0) {
37569
- return /* @__PURE__ */ jsx202(
37403
+ return /* @__PURE__ */ jsx203(
37570
37404
  "div",
37571
37405
  {
37572
37406
  "data-slot": "mcp-server-list",
@@ -37574,13 +37408,13 @@ function McpServerListView({
37574
37408
  "aria-busy": "true",
37575
37409
  "aria-label": t("interface.loadingMcpConfiguration59237"),
37576
37410
  children: [0, 1, 2].map((index) => /* @__PURE__ */ jsxs171("div", { className: MCP_ROW_CLASS, "data-slot": "mcp-server-row", "data-ow-state": "loading", children: [
37577
- /* @__PURE__ */ jsx202("span", {}),
37578
- /* @__PURE__ */ jsx202(Skeleton, { variant: "block", width: 38, height: 38, radius: "var(--ow-radius-md)" }),
37411
+ /* @__PURE__ */ jsx203("span", {}),
37412
+ /* @__PURE__ */ jsx203(Skeleton, { variant: "block", width: 38, height: 38, radius: "var(--ow-radius-md)" }),
37579
37413
  /* @__PURE__ */ jsxs171("div", { "data-ow-part": "body", children: [
37580
- /* @__PURE__ */ jsx202(Skeleton, { variant: "line", width: "42%", height: 13 }),
37581
- /* @__PURE__ */ jsx202(Skeleton, { variant: "line", width: "66%", height: 11 })
37414
+ /* @__PURE__ */ jsx203(Skeleton, { variant: "line", width: "42%", height: 13 }),
37415
+ /* @__PURE__ */ jsx203(Skeleton, { variant: "line", width: "66%", height: 11 })
37582
37416
  ] }),
37583
- /* @__PURE__ */ jsx202("span", {})
37417
+ /* @__PURE__ */ jsx203("span", {})
37584
37418
  ] }, index))
37585
37419
  }
37586
37420
  );
@@ -37595,7 +37429,7 @@ function McpServerListView({
37595
37429
  正上方 40px,用不着再在正文里指一次路。本件也没有 onAdd 之类的回调,凭空造一个
37596
37430
  新接口只为渲一枚重复的钮不划算。
37597
37431
  副句因此只承担「接进来会怎样」这一件事,并收在 440 量度内一行放得下。 */
37598
- /* @__PURE__ */ jsx202(
37432
+ /* @__PURE__ */ jsx203(
37599
37433
  EmptyState,
37600
37434
  {
37601
37435
  size: "page",
@@ -37608,8 +37442,8 @@ function McpServerListView({
37608
37442
  const totalPages = Math.max(1, Math.ceil(servers.length / PAGE_SIZE2));
37609
37443
  const currentPage = Math.min(page, totalPages);
37610
37444
  return /* @__PURE__ */ jsxs171("div", { "data-slot": "mcp-server-list", className: MCP_LIST_CLASS, children: [
37611
- servers.slice((currentPage - 1) * PAGE_SIZE2, currentPage * PAGE_SIZE2).map((server) => /* @__PURE__ */ jsx202(McpServerRow, { server, onRefresh, onCopy, onRemove }, server.id)),
37612
- totalPages > 1 && /* @__PURE__ */ jsx202(Pagination, { current: currentPage, total: servers.length, pageSize: PAGE_SIZE2, onChange: onPageChange })
37445
+ servers.slice((currentPage - 1) * PAGE_SIZE2, currentPage * PAGE_SIZE2).map((server) => /* @__PURE__ */ jsx203(McpServerRow, { server, onRefresh, onCopy, onRemove }, server.id)),
37446
+ totalPages > 1 && /* @__PURE__ */ jsx203(Pagination, { current: currentPage, total: servers.length, pageSize: PAGE_SIZE2, onChange: onPageChange })
37613
37447
  ] });
37614
37448
  }
37615
37449
  function McpServerRow({
@@ -37650,7 +37484,7 @@ function McpServerRow({
37650
37484
  "data-ow-state": [expanded && "expanded", busy && "busy"].filter(Boolean).join(" ") || void 0,
37651
37485
  className: cn(MCP_ROW_CLASS, expanded && "bg-[var(--ow-surface)]"),
37652
37486
  children: [
37653
- /* @__PURE__ */ jsx202(
37487
+ /* @__PURE__ */ jsx203(
37654
37488
  Button,
37655
37489
  {
37656
37490
  variant: "ghost",
@@ -37664,23 +37498,23 @@ function McpServerRow({
37664
37498
  "aria-label": expanded ? t("interface.collapseMcpDetails0a7b3") : t("interface.expandMcpDetails7b820"),
37665
37499
  "aria-expanded": hasDetails ? expanded : void 0,
37666
37500
  onClick: () => setExpanded((value) => !value),
37667
- children: /* @__PURE__ */ jsx202(ChevRight, {})
37501
+ children: /* @__PURE__ */ jsx203(ChevRight, {})
37668
37502
  }
37669
37503
  ),
37670
- /* @__PURE__ */ jsx202(
37504
+ /* @__PURE__ */ jsx203(
37671
37505
  "span",
37672
37506
  {
37673
37507
  "data-ow-part": "icon",
37674
37508
  "data-ow-kind": server.type,
37675
37509
  className: "inline-flex h-[38px] w-[38px] items-center justify-center rounded-[var(--ow-radius-md)] bg-[var(--ow-surface-2)] text-[color:var(--ow-text-2)] [&_svg]:h-4 [&_svg]:w-4",
37676
- children: server.type === "stdio" ? /* @__PURE__ */ jsx202(Terminal, {}) : /* @__PURE__ */ jsx202(Globe, {})
37510
+ children: server.type === "stdio" ? /* @__PURE__ */ jsx203(Terminal, {}) : /* @__PURE__ */ jsx203(Globe, {})
37677
37511
  }
37678
37512
  ),
37679
37513
  /* @__PURE__ */ jsxs171("div", { "data-ow-part": "body", className: "flex min-w-0 flex-col gap-1.5", children: [
37680
37514
  /* @__PURE__ */ jsxs171("div", { "data-ow-part": "title", className: "flex min-w-0 items-center gap-2", children: [
37681
- /* @__PURE__ */ jsx202("b", { className: "min-w-0 overflow-hidden text-ellipsis whitespace-nowrap text-ow-fs-ui font-semibold leading-[1.25] text-[color:var(--ow-text)]", children: server.displayName || server.id }),
37682
- /* @__PURE__ */ jsx202(Tag, { size: "sm", variant: "default", shape: "square", children: server.type === "stdio" ? "STDIO" : "HTTP" }),
37683
- /* @__PURE__ */ jsx202(Chip, { dot: chipToneOf(statusTone), label: statusLabel, description: server.statusText })
37515
+ /* @__PURE__ */ jsx203("b", { className: "min-w-0 overflow-hidden text-ellipsis whitespace-nowrap text-ow-fs-ui font-semibold leading-[1.25] text-[color:var(--ow-text)]", children: server.displayName || server.id }),
37516
+ /* @__PURE__ */ jsx203(Tag, { size: "sm", variant: "default", shape: "square", children: server.type === "stdio" ? "STDIO" : "HTTP" }),
37517
+ /* @__PURE__ */ jsx203(Chip, { dot: chipToneOf(statusTone), label: statusLabel, description: server.statusText })
37684
37518
  ] }),
37685
37519
  hasDetails && expanded && /* @__PURE__ */ jsxs171(
37686
37520
  "div",
@@ -37688,7 +37522,7 @@ function McpServerRow({
37688
37522
  "data-ow-part": "details",
37689
37523
  className: "mt-1 rounded-[var(--ow-radius-md)] border border-[color:var(--ow-border-strong)] bg-[var(--ow-bg)] px-3 py-2.5 text-[color:var(--ow-text-2)]",
37690
37524
  children: [
37691
- /* @__PURE__ */ jsx202(
37525
+ /* @__PURE__ */ jsx203(
37692
37526
  "div",
37693
37527
  {
37694
37528
  "data-ow-part": "summary",
@@ -37696,7 +37530,7 @@ function McpServerRow({
37696
37530
  children: server.summary || "-"
37697
37531
  }
37698
37532
  ),
37699
- server.toolNames.length > 0 && /* @__PURE__ */ jsx202(
37533
+ server.toolNames.length > 0 && /* @__PURE__ */ jsx203(
37700
37534
  "div",
37701
37535
  {
37702
37536
  "data-ow-part": "tools",
@@ -37708,12 +37542,12 @@ function McpServerRow({
37708
37542
  t("interface.suggestedActionaba23"),
37709
37543
  " "
37710
37544
  ] }),
37711
- /* @__PURE__ */ jsx202("p", { className: "m-0 text-ow-fs-body-sm leading-[1.45] text-[color:var(--ow-error)]", children: server.errorSummary ?? t("interface.thisMcpServerHasNotReturned72d88") })
37545
+ /* @__PURE__ */ jsx203("p", { className: "m-0 text-ow-fs-body-sm leading-[1.45] text-[color:var(--ow-error)]", children: server.errorSummary ?? t("interface.thisMcpServerHasNotReturned72d88") })
37712
37546
  ]
37713
37547
  }
37714
37548
  )
37715
37549
  ] }),
37716
- /* @__PURE__ */ jsx202("div", { "data-ow-part": "actions", className: "flex items-start gap-1.5", children: /* @__PURE__ */ jsx202(
37550
+ /* @__PURE__ */ jsx203("div", { "data-ow-part": "actions", className: "flex items-start gap-1.5", children: /* @__PURE__ */ jsx203(
37717
37551
  RowOverflowMenu,
37718
37552
  {
37719
37553
  disabled: busy,
@@ -37722,20 +37556,20 @@ function McpServerRow({
37722
37556
  {
37723
37557
  key: "reconnect",
37724
37558
  label: reconnecting ? t("interface.reconnecting90fd6") : t("interface.reconnect7dcec"),
37725
- icon: /* @__PURE__ */ jsx202(Refresh, {})
37559
+ icon: /* @__PURE__ */ jsx203(Refresh, {})
37726
37560
  },
37727
37561
  ...hasDetails ? [
37728
37562
  {
37729
37563
  key: "copy",
37730
37564
  label: t("interface.copyErrorSummarybfc73"),
37731
- icon: /* @__PURE__ */ jsx202(Terminal, {}),
37565
+ icon: /* @__PURE__ */ jsx203(Terminal, {}),
37732
37566
  confirmsInPlace: true
37733
37567
  }
37734
37568
  ] : [],
37735
37569
  {
37736
37570
  key: "remove",
37737
37571
  label: removing ? t("sidebar.deleting") : t("common.delete"),
37738
- icon: /* @__PURE__ */ jsx202(Trash, {}),
37572
+ icon: /* @__PURE__ */ jsx203(Trash, {}),
37739
37573
  danger: true
37740
37574
  }
37741
37575
  ],
@@ -37780,7 +37614,7 @@ function statusLabelOf(server) {
37780
37614
  }
37781
37615
 
37782
37616
  // src/components/domain/skills/SkillCardView/index.tsx
37783
- import { jsx as jsx203 } from "react/jsx-runtime";
37617
+ import { jsx as jsx204 } from "react/jsx-runtime";
37784
37618
  function SkillCardView({
37785
37619
  name,
37786
37620
  desc,
@@ -37801,14 +37635,14 @@ function SkillCardView({
37801
37635
  const { t } = useUiLocale();
37802
37636
  const label = actionLabel ?? (installing ? outdated ? t("common.updating") : t("common.installing") : outdated ? t("common.update") : installed ? t("common.use") : t("common.install"));
37803
37637
  const status = installing ? "installing" : !installed ? void 0 : outdated ? "update" : "installed";
37804
- return /* @__PURE__ */ jsx203(
37638
+ return /* @__PURE__ */ jsx204(
37805
37639
  DesktopCatalogCardView,
37806
37640
  {
37807
37641
  avatar,
37808
37642
  name,
37809
37643
  version: showVersion ? version : void 0,
37810
37644
  status,
37811
- badge: mine ? /* @__PURE__ */ jsx203(StatusTag, { status: "mine" }) : void 0,
37645
+ badge: mine ? /* @__PURE__ */ jsx204(StatusTag, { status: "mine" }) : void 0,
37812
37646
  description: desc,
37813
37647
  metaItems,
37814
37648
  actionLabel: label,
@@ -37822,7 +37656,7 @@ function SkillCardView({
37822
37656
  }
37823
37657
 
37824
37658
  // src/components/domain/skills/SkillDetailPanelView/index.tsx
37825
- import { jsx as jsx204, jsxs as jsxs172 } from "react/jsx-runtime";
37659
+ import { jsx as jsx205, jsxs as jsxs172 } from "react/jsx-runtime";
37826
37660
  function SkillDetailPanelView({
37827
37661
  avatar,
37828
37662
  name,
@@ -37863,27 +37697,27 @@ function SkillDetailPanelView({
37863
37697
  backLabel,
37864
37698
  onBack,
37865
37699
  children: [
37866
- authorization && /* @__PURE__ */ jsx204(DesktopDetailSection, { title: t("permissions.authorize"), children: authorization }),
37867
- /* @__PURE__ */ jsx204(DesktopDetailSection, { title: t("interface.instructionsbee77"), children: loading ? /* @__PURE__ */ jsxs172(
37700
+ authorization && /* @__PURE__ */ jsx205(DesktopDetailSection, { title: t("permissions.authorize"), children: authorization }),
37701
+ /* @__PURE__ */ jsx205(DesktopDetailSection, { title: t("interface.instructionsbee77"), children: loading ? /* @__PURE__ */ jsxs172(
37868
37702
  "div",
37869
37703
  {
37870
37704
  "data-ow-part": "loading",
37871
37705
  role: "status",
37872
37706
  className: "flex items-center gap-2 py-4 text-ow-fs-ui leading-[1.5] text-[color:var(--ow-text-3)]",
37873
37707
  children: [
37874
- /* @__PURE__ */ jsx204(Spinner, { size: "md" }),
37875
- /* @__PURE__ */ jsx204("span", { children: loadingText })
37708
+ /* @__PURE__ */ jsx205(Spinner, { size: "md" }),
37709
+ /* @__PURE__ */ jsx205("span", { children: loadingText })
37876
37710
  ]
37877
37711
  }
37878
- ) : error ? /* @__PURE__ */ jsx204(
37712
+ ) : error ? /* @__PURE__ */ jsx205(
37879
37713
  InlineMessage,
37880
37714
  {
37881
37715
  variant: "error",
37882
37716
  detail: errorDetail,
37883
- action: onRetry && /* @__PURE__ */ jsx204(Button, { variant: "secondary", size: "sm", onClick: onRetry, children: t("common.retry") }),
37717
+ action: onRetry && /* @__PURE__ */ jsx205(Button, { variant: "secondary", size: "sm", onClick: onRetry, children: t("common.retry") }),
37884
37718
  children: error
37885
37719
  }
37886
- ) : docContent ? /* @__PURE__ */ jsx204(
37720
+ ) : docContent ? /* @__PURE__ */ jsx205(
37887
37721
  "div",
37888
37722
  {
37889
37723
  "data-ow-part": "document",
@@ -37894,7 +37728,7 @@ function SkillDetailPanelView({
37894
37728
  /* A5-B4:`markSize={32}` 这条逃生舱撤掉——文档区是详情页里的整栏内容位,
37895
37729
  md 档的 40 就是给这种块内空态定的;单独调一个 32 只会让全库多一个「差不多
37896
37730
  但不一样」的体量。空态仍跟随正文左对齐,不做居中处理。 */
37897
- /* @__PURE__ */ jsx204(EmptyState, { className: "items-start py-4 text-left", message: emptyText })
37731
+ /* @__PURE__ */ jsx205(EmptyState, { className: "items-start py-4 text-left", message: emptyText })
37898
37732
  ) })
37899
37733
  ]
37900
37734
  }
@@ -37903,7 +37737,7 @@ function SkillDetailPanelView({
37903
37737
 
37904
37738
  // src/components/domain/skills/SkillDetailView/index.tsx
37905
37739
  import { useState as useState85 } from "react";
37906
- import { Fragment as Fragment71, jsx as jsx205, jsxs as jsxs173 } from "react/jsx-runtime";
37740
+ import { Fragment as Fragment71, jsx as jsx206, jsxs as jsxs173 } from "react/jsx-runtime";
37907
37741
  function SkillDetailView(props) {
37908
37742
  const { t } = useUiLocale();
37909
37743
  const [confirmUninstall, setConfirmUninstall] = useState85(false);
@@ -37912,14 +37746,14 @@ function SkillDetailView(props) {
37912
37746
  outdated: props.outdated,
37913
37747
  installing: props.installing
37914
37748
  });
37915
- const actions = /* @__PURE__ */ jsx205(
37749
+ const actions = /* @__PURE__ */ jsx206(
37916
37750
  DesktopAgentDetailActions,
37917
37751
  {
37918
37752
  installed: props.installed,
37919
37753
  outdated: props.outdated,
37920
37754
  installing: props.installing,
37921
37755
  primaryLabel: props.actionLabel ?? t("interface.useSkillaabba"),
37922
- primaryIcon: props.actionIcon ?? /* @__PURE__ */ jsx205(Sparkles, {}),
37756
+ primaryIcon: props.actionIcon ?? /* @__PURE__ */ jsx206(Sparkles, {}),
37923
37757
  primaryVisible: Boolean(props.onUse),
37924
37758
  primaryDisabled: props.actionDisabled,
37925
37759
  onInstall: props.onInstall,
@@ -37927,12 +37761,12 @@ function SkillDetailView(props) {
37927
37761
  onPrimaryAction: () => props.onUse?.(),
37928
37762
  menuItems: [
37929
37763
  ...props.menuItems ?? [],
37930
- ...props.onOpenDir ? [{ key: "openDir", label: t("interface.openFolder031c1"), icon: /* @__PURE__ */ jsx205(Folder, {}) }] : [],
37764
+ ...props.onOpenDir ? [{ key: "openDir", label: t("interface.openFolder031c1"), icon: /* @__PURE__ */ jsx206(Folder, {}) }] : [],
37931
37765
  ...props.onUninstall ? [
37932
37766
  {
37933
37767
  key: "uninstall",
37934
37768
  label: t("common.uninstall"),
37935
- icon: /* @__PURE__ */ jsx205(Trash, {}),
37769
+ icon: /* @__PURE__ */ jsx206(Trash, {}),
37936
37770
  danger: true,
37937
37771
  disabled: props.installing
37938
37772
  }
@@ -37946,7 +37780,7 @@ function SkillDetailView(props) {
37946
37780
  }
37947
37781
  );
37948
37782
  return /* @__PURE__ */ jsxs173(Fragment71, { children: [
37949
- /* @__PURE__ */ jsx205(
37783
+ /* @__PURE__ */ jsx206(
37950
37784
  SkillDetailPanelView,
37951
37785
  {
37952
37786
  avatar: props.avatar,
@@ -37954,7 +37788,7 @@ function SkillDetailView(props) {
37954
37788
  author: props.author,
37955
37789
  version: props.version,
37956
37790
  updatedAt: props.updatedAt,
37957
- status: installStatus && /* @__PURE__ */ jsx205(StatusTag, { status: installStatus }),
37791
+ status: installStatus && /* @__PURE__ */ jsx206(StatusTag, { status: installStatus }),
37958
37792
  badge: props.badge,
37959
37793
  brief: props.brief,
37960
37794
  authorization: props.authorization,
@@ -37970,7 +37804,7 @@ function SkillDetailView(props) {
37970
37804
  actions
37971
37805
  }
37972
37806
  ),
37973
- confirmUninstall && props.onUninstall && /* @__PURE__ */ jsx205(
37807
+ confirmUninstall && props.onUninstall && /* @__PURE__ */ jsx206(
37974
37808
  UninstallConfirmDialog,
37975
37809
  {
37976
37810
  title: t("interface.uninstallSkill053a6"),
@@ -37986,34 +37820,34 @@ function SkillDetailView(props) {
37986
37820
  }
37987
37821
 
37988
37822
  // src/components/domain/skills/SkillImportDialogView/index.tsx
37989
- import { Fragment as Fragment72, jsx as jsx206, jsxs as jsxs174 } from "react/jsx-runtime";
37823
+ import { Fragment as Fragment72, jsx as jsx207, jsxs as jsxs174 } from "react/jsx-runtime";
37990
37824
  function Reading({ value }) {
37991
- return /* @__PURE__ */ jsx206("span", { className: "font-[family-name:var(--ow-font-mono)] tabular-nums text-[color:var(--ow-text-2)]", children: value });
37825
+ return /* @__PURE__ */ jsx207("span", { className: "font-[family-name:var(--ow-font-mono)] tabular-nums text-[color:var(--ow-text-2)]", children: value });
37992
37826
  }
37993
37827
  function SkillImportDialogView(props) {
37994
37828
  const { t } = useUiLocale();
37995
- return /* @__PURE__ */ jsx206(
37829
+ return /* @__PURE__ */ jsx207(
37996
37830
  Dialog,
37997
37831
  {
37998
37832
  open: true,
37999
37833
  width: 520,
38000
- icon: /* @__PURE__ */ jsx206(Sparkles, {}),
37834
+ icon: /* @__PURE__ */ jsx207(Sparkles, {}),
38001
37835
  iconTone: "info",
38002
37836
  title: t("interface.importSkillsb58e5"),
38003
37837
  subtitle: t("interface.importZipTarGzOrTgz9bc0e"),
38004
37838
  onClose: props.onClose,
38005
37839
  actions: null,
38006
- children: /* @__PURE__ */ jsx206(
37840
+ children: /* @__PURE__ */ jsx207(
38007
37841
  EmptyState,
38008
37842
  {
38009
37843
  markSize: 36,
38010
37844
  message: t("interface.eachSkillRootMustContainSkill21cb0"),
38011
37845
  action: /* @__PURE__ */ jsxs174("div", { className: "flex items-center gap-3", children: [
38012
- /* @__PURE__ */ jsxs174(Button, { variant: "secondary", icon: /* @__PURE__ */ jsx206(Paperclip, {}), onClick: props.onInstallArchive, children: [
37846
+ /* @__PURE__ */ jsxs174(Button, { variant: "secondary", icon: /* @__PURE__ */ jsx207(Paperclip, {}), onClick: props.onInstallArchive, children: [
38013
37847
  t("interface.chooseArchiveb19d9"),
38014
37848
  " "
38015
37849
  ] }),
38016
- /* @__PURE__ */ jsxs174(Button, { variant: "secondary", icon: /* @__PURE__ */ jsx206(Folder, {}), onClick: props.onInstallDirectory, children: [
37850
+ /* @__PURE__ */ jsxs174(Button, { variant: "secondary", icon: /* @__PURE__ */ jsx207(Folder, {}), onClick: props.onInstallDirectory, children: [
38017
37851
  t("interface.chooseFoldered358"),
38018
37852
  " "
38019
37853
  ] })
@@ -38025,32 +37859,32 @@ function SkillImportDialogView(props) {
38025
37859
  }
38026
37860
  function SkillImportResultDialogView(props) {
38027
37861
  const { t } = useUiLocale();
38028
- return /* @__PURE__ */ jsx206(
37862
+ return /* @__PURE__ */ jsx207(
38029
37863
  Dialog,
38030
37864
  {
38031
37865
  open: true,
38032
37866
  width: 520,
38033
- icon: /* @__PURE__ */ jsx206(Sparkles, {}),
37867
+ icon: /* @__PURE__ */ jsx207(Sparkles, {}),
38034
37868
  iconTone: "info",
38035
37869
  title: t("interface.importResults74740"),
38036
37870
  subtitle: /* @__PURE__ */ jsxs174(Fragment72, { children: [
38037
37871
  t("common.success"),
38038
37872
  " ",
38039
- /* @__PURE__ */ jsx206(Reading, { value: props.summary.success }),
37873
+ /* @__PURE__ */ jsx207(Reading, { value: props.summary.success }),
38040
37874
  " ",
38041
37875
  t("interface.itemsFailed1d550"),
38042
- /* @__PURE__ */ jsx206(Reading, { value: props.summary.failed }),
37876
+ /* @__PURE__ */ jsx207(Reading, { value: props.summary.failed }),
38043
37877
  " ",
38044
37878
  t("interface.itemsSkippedebee7"),
38045
37879
  " ",
38046
- /* @__PURE__ */ jsx206(Reading, { value: props.summary.skipped }),
37880
+ /* @__PURE__ */ jsx207(Reading, { value: props.summary.skipped }),
38047
37881
  " ",
38048
37882
  t("interface.itemsf7b2a"),
38049
37883
  " "
38050
37884
  ] }),
38051
37885
  onClose: props.onClose,
38052
- actions: /* @__PURE__ */ jsx206(Button, { variant: "primary", onClick: props.onClose, children: t("common.done") }),
38053
- children: /* @__PURE__ */ jsx206(
37886
+ actions: /* @__PURE__ */ jsx207(Button, { variant: "primary", onClick: props.onClose, children: t("common.done") }),
37887
+ children: /* @__PURE__ */ jsx207(
38054
37888
  "div",
38055
37889
  {
38056
37890
  "data-ow-part": "result-list",
@@ -38062,7 +37896,7 @@ function SkillImportResultDialogView(props) {
38062
37896
  "data-ow-state": item.status,
38063
37897
  className: "flex flex-col gap-1 p-3 bg-ow-surface-2 [border-radius:var(--ow-radius-control)]",
38064
37898
  children: [
38065
- /* @__PURE__ */ jsx206(
37899
+ /* @__PURE__ */ jsx207(
38066
37900
  "span",
38067
37901
  {
38068
37902
  "data-ow-part": "status",
@@ -38075,7 +37909,7 @@ function SkillImportResultDialogView(props) {
38075
37909
  children: skillImportStatusLabel(item.status)
38076
37910
  }
38077
37911
  ),
38078
- /* @__PURE__ */ jsx206(
37912
+ /* @__PURE__ */ jsx207(
38079
37913
  "span",
38080
37914
  {
38081
37915
  "data-ow-part": "name",
@@ -38083,7 +37917,7 @@ function SkillImportResultDialogView(props) {
38083
37917
  children: item.name ?? item.sourceName
38084
37918
  }
38085
37919
  ),
38086
- item.reason && /* @__PURE__ */ jsx206(
37920
+ item.reason && /* @__PURE__ */ jsx207(
38087
37921
  "span",
38088
37922
  {
38089
37923
  "data-ow-part": "reason",
@@ -38108,7 +37942,7 @@ function skillImportStatusLabel(status) {
38108
37942
 
38109
37943
  // src/components/domain/tasks/ScheduledTaskCardView/index.tsx
38110
37944
  import { useState as useState86 } from "react";
38111
- import { Fragment as Fragment73, jsx as jsx207, jsxs as jsxs175 } from "react/jsx-runtime";
37945
+ import { Fragment as Fragment73, jsx as jsx208, jsxs as jsxs175 } from "react/jsx-runtime";
38112
37946
  var STATUS_FALLBACK_LABEL = {
38113
37947
  running: "\u8FD0\u884C\u4E2D",
38114
37948
  done: "\u4E0A\u6B21\u6210\u529F",
@@ -38167,14 +38001,14 @@ function ScheduledTaskCardView({
38167
38001
  STATUS_DOT_CLASS[task.status.key]
38168
38002
  ),
38169
38003
  children: [
38170
- task.status.key === "running" && /* @__PURE__ */ jsx207(BeaconSpinner, { size: 16 }),
38171
- task.status.key === "done" && /* @__PURE__ */ jsx207(Check, {}),
38172
- task.status.key === "paused" && /* @__PURE__ */ jsx207(Pause, {}),
38173
- task.status.key === "failed" && /* @__PURE__ */ jsx207(Close, {})
38004
+ task.status.key === "running" && /* @__PURE__ */ jsx208(BeaconSpinner, { size: 16 }),
38005
+ task.status.key === "done" && /* @__PURE__ */ jsx208(Check, {}),
38006
+ task.status.key === "paused" && /* @__PURE__ */ jsx208(Pause, {}),
38007
+ task.status.key === "failed" && /* @__PURE__ */ jsx208(Close, {})
38174
38008
  ]
38175
38009
  }
38176
38010
  ),
38177
- /* @__PURE__ */ jsx207(
38011
+ /* @__PURE__ */ jsx208(
38178
38012
  "span",
38179
38013
  {
38180
38014
  "data-ow-part": "name",
@@ -38185,7 +38019,7 @@ function ScheduledTaskCardView({
38185
38019
  children: task.name || t("common.untitledTask")
38186
38020
  }
38187
38021
  ),
38188
- /* @__PURE__ */ jsx207(
38022
+ /* @__PURE__ */ jsx208(
38189
38023
  "span",
38190
38024
  {
38191
38025
  "data-ow-part": "frequency",
@@ -38194,7 +38028,7 @@ function ScheduledTaskCardView({
38194
38028
  }
38195
38029
  )
38196
38030
  ] }),
38197
- /* @__PURE__ */ jsx207(
38031
+ /* @__PURE__ */ jsx208(
38198
38032
  "div",
38199
38033
  {
38200
38034
  "data-ow-part": "prompt",
@@ -38217,15 +38051,15 @@ function ScheduledTaskCardView({
38217
38051
  "data-ow-part": "next-run",
38218
38052
  className: "inline-flex items-center gap-1 font-[family-name:var(--ow-font-mono)] tabular-nums [&_svg]:size-4",
38219
38053
  children: [
38220
- /* @__PURE__ */ jsx207(Clock, {}),
38054
+ /* @__PURE__ */ jsx208(Clock, {}),
38221
38055
  " ",
38222
38056
  task.nextLabel
38223
38057
  ]
38224
38058
  }
38225
38059
  ),
38226
38060
  statusLabel && /* @__PURE__ */ jsxs175(Fragment73, { children: [
38227
- /* @__PURE__ */ jsx207("span", { "data-ow-part": "separator", children: "\xB7" }),
38228
- /* @__PURE__ */ jsx207(
38061
+ /* @__PURE__ */ jsx208("span", { "data-ow-part": "separator", children: "\xB7" }),
38062
+ /* @__PURE__ */ jsx208(
38229
38063
  "span",
38230
38064
  {
38231
38065
  "data-ow-part": "status-label",
@@ -38235,8 +38069,8 @@ function ScheduledTaskCardView({
38235
38069
  }
38236
38070
  )
38237
38071
  ] }),
38238
- /* @__PURE__ */ jsx207("span", { "data-ow-part": "spacer", className: "flex-1" }),
38239
- /* @__PURE__ */ jsx207(ScheduledTaskCardMenu, { paused: task.paused, onEdit, onToggle, onDelete })
38072
+ /* @__PURE__ */ jsx208("span", { "data-ow-part": "spacer", className: "flex-1" }),
38073
+ /* @__PURE__ */ jsx208(ScheduledTaskCardMenu, { paused: task.paused, onEdit, onToggle, onDelete })
38240
38074
  ]
38241
38075
  }
38242
38076
  )
@@ -38260,27 +38094,27 @@ function ScheduledTaskCardMenu({
38260
38094
  void onToggle().finally(() => setToggling(false));
38261
38095
  }
38262
38096
  };
38263
- return /* @__PURE__ */ jsx207(
38097
+ return /* @__PURE__ */ jsx208(
38264
38098
  "span",
38265
38099
  {
38266
38100
  "data-ow-part": "menu",
38267
38101
  className: "inline-flex",
38268
38102
  onClick: (event) => event.stopPropagation(),
38269
38103
  onKeyDown: (event) => event.stopPropagation(),
38270
- children: /* @__PURE__ */ jsx207(
38104
+ children: /* @__PURE__ */ jsx208(
38271
38105
  RowOverflowMenu,
38272
38106
  {
38273
38107
  width: 180,
38274
38108
  disabled: toggling,
38275
38109
  ariaLabel: t("common.moreActions"),
38276
38110
  items: [
38277
- { key: "edit", label: t("plugins.editConfig"), icon: /* @__PURE__ */ jsx207(Edit, {}) },
38111
+ { key: "edit", label: t("plugins.editConfig"), icon: /* @__PURE__ */ jsx208(Edit, {}) },
38278
38112
  {
38279
38113
  key: "toggle",
38280
38114
  label: toggling ? t("common.updating") : paused ? t("interface.resumeSchedule8280b") : t("interface.pauseSchedule49447"),
38281
- icon: paused ? /* @__PURE__ */ jsx207(Play, {}) : /* @__PURE__ */ jsx207(Pause, {})
38115
+ icon: paused ? /* @__PURE__ */ jsx208(Play, {}) : /* @__PURE__ */ jsx208(Pause, {})
38282
38116
  },
38283
- { key: "delete", label: t("sidebar.deleteTask"), icon: /* @__PURE__ */ jsx207(Trash, {}), danger: true }
38117
+ { key: "delete", label: t("sidebar.deleteTask"), icon: /* @__PURE__ */ jsx208(Trash, {}), danger: true }
38284
38118
  ],
38285
38119
  onSelect: select
38286
38120
  }
@@ -38290,7 +38124,7 @@ function ScheduledTaskCardMenu({
38290
38124
  }
38291
38125
 
38292
38126
  // src/components/domain/tasks/ScheduledTaskDeleteDialog/index.tsx
38293
- import { Fragment as Fragment74, jsx as jsx208, jsxs as jsxs176 } from "react/jsx-runtime";
38127
+ import { Fragment as Fragment74, jsx as jsx209, jsxs as jsxs176 } from "react/jsx-runtime";
38294
38128
  function ScheduledTaskDeleteDialog({
38295
38129
  taskName,
38296
38130
  deleting = false,
@@ -38304,15 +38138,15 @@ function ScheduledTaskDeleteDialog({
38304
38138
  {
38305
38139
  open: true,
38306
38140
  variant: "danger",
38307
- icon: /* @__PURE__ */ jsx208(Trash, {}),
38141
+ icon: /* @__PURE__ */ jsx209(Trash, {}),
38308
38142
  title: t("interface.deleteScheduledTaskcbbfd"),
38309
38143
  closable: false,
38310
38144
  closeOnOverlayClick: !deleting,
38311
38145
  closeOnEscape: !deleting,
38312
38146
  onClose: onCancel,
38313
38147
  actions: /* @__PURE__ */ jsxs176(Fragment74, { children: [
38314
- /* @__PURE__ */ jsx208(Button, { variant: "secondary", type: "button", disabled: deleting, onClick: onCancel, children: t("common.cancel") }),
38315
- /* @__PURE__ */ jsx208(Button, { variant: "danger", type: "button", loading: deleting, disabled: deleting, onClick: onConfirm, children: deleting ? t("sidebar.deleting") : t("common.delete") })
38148
+ /* @__PURE__ */ jsx209(Button, { variant: "secondary", type: "button", disabled: deleting, onClick: onCancel, children: t("common.cancel") }),
38149
+ /* @__PURE__ */ jsx209(Button, { variant: "danger", type: "button", loading: deleting, disabled: deleting, onClick: onConfirm, children: deleting ? t("sidebar.deleting") : t("common.delete") })
38316
38150
  ] }),
38317
38151
  children: [
38318
38152
  /* @__PURE__ */ jsxs176("p", { className: "m-0", children: [
@@ -38321,14 +38155,14 @@ function ScheduledTaskDeleteDialog({
38321
38155
  t("interface.itsScheduleAndRunHistoryWill906a8"),
38322
38156
  " "
38323
38157
  ] }),
38324
- error && /* @__PURE__ */ jsx208("div", { "data-ow-part": "error", className: "mt-3", children: /* @__PURE__ */ jsx208(InlineMessage, { variant: "error", children: error }) })
38158
+ error && /* @__PURE__ */ jsx209("div", { "data-ow-part": "error", className: "mt-3", children: /* @__PURE__ */ jsx209(InlineMessage, { variant: "error", children: error }) })
38325
38159
  ]
38326
38160
  }
38327
38161
  );
38328
38162
  }
38329
38163
 
38330
38164
  // src/components/domain/tasks/ScheduledTaskDetailView/index.tsx
38331
- import { Fragment as Fragment75, jsx as jsx209, jsxs as jsxs177 } from "react/jsx-runtime";
38165
+ import { Fragment as Fragment75, jsx as jsx210, jsxs as jsxs177 } from "react/jsx-runtime";
38332
38166
  var DETAIL_STATUS_CLASS = {
38333
38167
  running: "bg-[var(--ow-info-tint)] text-[color:var(--ow-info-on-tint)]",
38334
38168
  done: "bg-[var(--ow-success-tint)] text-[color:var(--ow-success-on-tint)]",
@@ -38371,30 +38205,30 @@ function ScheduledTaskDetailView({
38371
38205
  className: "relative flex shrink-0 items-center justify-between px-7 pb-3.5 pt-[18px]",
38372
38206
  children: [
38373
38207
  /* @__PURE__ */ jsxs177("div", { "data-ow-part": "header-title", className: "flex items-center gap-3", children: [
38374
- /* @__PURE__ */ jsx209(BackButton, { label: t("interface.backToScheduledTasksa35cf"), onClick: onBack }),
38208
+ /* @__PURE__ */ jsx210(BackButton, { label: t("interface.backToScheduledTasksa35cf"), onClick: onBack }),
38375
38209
  /* @__PURE__ */ jsxs177("div", { children: [
38376
- /* @__PURE__ */ jsx209("div", { "data-ow-part": "title", className: "text-ow-fs-ui font-semibold leading-[1.2] text-[color:var(--ow-text)]", children: task.name }),
38210
+ /* @__PURE__ */ jsx210("div", { "data-ow-part": "title", className: "text-ow-fs-ui font-semibold leading-[1.2] text-[color:var(--ow-text)]", children: task.name }),
38377
38211
  /* @__PURE__ */ jsxs177(
38378
38212
  "div",
38379
38213
  {
38380
38214
  "data-ow-part": "subtitle",
38381
38215
  className: "mt-2 text-ow-fs-body-sm font-normal leading-[1.3] text-[color:var(--ow-text-3)]",
38382
38216
  children: [
38383
- /* @__PURE__ */ jsx209("span", { className: "font-[family-name:var(--ow-font-mono)] tabular-nums", children: task.scheduleLabel }),
38217
+ /* @__PURE__ */ jsx210("span", { className: "font-[family-name:var(--ow-font-mono)] tabular-nums", children: task.scheduleLabel }),
38384
38218
  " \xB7 ",
38385
38219
  task.statusLabel,
38386
38220
  " \xB7 \u4E0B\u6B21 ",
38387
- /* @__PURE__ */ jsx209("span", { className: "font-[family-name:var(--ow-font-mono)] tabular-nums", children: task.nextRunLabel })
38221
+ /* @__PURE__ */ jsx210("span", { className: "font-[family-name:var(--ow-font-mono)] tabular-nums", children: task.nextRunLabel })
38388
38222
  ]
38389
38223
  }
38390
38224
  )
38391
38225
  ] })
38392
38226
  ] }),
38393
38227
  /* @__PURE__ */ jsxs177("div", { "data-ow-part": "header-actions", className: "ml-auto flex gap-2 [&_[data-slot=button]_svg]:size-4", children: [
38394
- /* @__PURE__ */ jsx209(Button, { variant: "primary", icon: runningNow ? void 0 : /* @__PURE__ */ jsx209(Play, {}), onClick: onRunNow, disabled: runningNow, children: runningNow ? t("interface.running666b4") : t("interface.runNow9a428") }),
38395
- /* @__PURE__ */ jsx209(Button, { variant: "secondary", icon: /* @__PURE__ */ jsx209(Edit, {}), onClick: onEdit, children: t("common.edit") }),
38396
- /* @__PURE__ */ jsx209(Button, { variant: "secondary", icon: task.paused ? /* @__PURE__ */ jsx209(Play, {}) : /* @__PURE__ */ jsx209(Pause, {}), onClick: onToggle, children: task.paused ? t("interface.enabled4e9c") : t("interface.pause13044") }),
38397
- /* @__PURE__ */ jsx209(Button, { variant: "danger", icon: /* @__PURE__ */ jsx209(Trash, {}), onClick: onDelete, children: t("common.delete") })
38228
+ /* @__PURE__ */ jsx210(Button, { variant: "primary", icon: runningNow ? void 0 : /* @__PURE__ */ jsx210(Play, {}), onClick: onRunNow, disabled: runningNow, children: runningNow ? t("interface.running666b4") : t("interface.runNow9a428") }),
38229
+ /* @__PURE__ */ jsx210(Button, { variant: "secondary", icon: /* @__PURE__ */ jsx210(Edit, {}), onClick: onEdit, children: t("common.edit") }),
38230
+ /* @__PURE__ */ jsx210(Button, { variant: "secondary", icon: task.paused ? /* @__PURE__ */ jsx210(Play, {}) : /* @__PURE__ */ jsx210(Pause, {}), onClick: onToggle, children: task.paused ? t("interface.enabled4e9c") : t("interface.pause13044") }),
38231
+ /* @__PURE__ */ jsx210(Button, { variant: "danger", icon: /* @__PURE__ */ jsx210(Trash, {}), onClick: onDelete, children: t("common.delete") })
38398
38232
  ] })
38399
38233
  ]
38400
38234
  }
@@ -38407,10 +38241,10 @@ function ScheduledTaskDetailView({
38407
38241
  className: "rounded-[var(--ow-radius-card)] border border-[color:var(--ow-border)] bg-[var(--ow-bg)] p-[14px]",
38408
38242
  children: [
38409
38243
  /* @__PURE__ */ jsxs177("div", { "data-ow-part": "summary-grid", className: "grid grid-cols-2 gap-x-6 gap-y-4", children: [
38410
- /* @__PURE__ */ jsx209(DetailField, { label: t("interface.repeatFrequency335a3"), value: task.scheduleLabel, mono: true }),
38411
- /* @__PURE__ */ jsx209(DetailField, { label: t("interface.nextRun37307"), value: task.nextRunLabel, mono: true }),
38244
+ /* @__PURE__ */ jsx210(DetailField, { label: t("interface.repeatFrequency335a3"), value: task.scheduleLabel, mono: true }),
38245
+ /* @__PURE__ */ jsx210(DetailField, { label: t("interface.nextRun37307"), value: task.nextRunLabel, mono: true }),
38412
38246
  /* @__PURE__ */ jsxs177("div", { "data-slot": "scheduled-task-detail-field", children: [
38413
- /* @__PURE__ */ jsx209(
38247
+ /* @__PURE__ */ jsx210(
38414
38248
  "div",
38415
38249
  {
38416
38250
  "data-ow-part": "label",
@@ -38418,7 +38252,7 @@ function ScheduledTaskDetailView({
38418
38252
  children: t("common.status")
38419
38253
  }
38420
38254
  ),
38421
- /* @__PURE__ */ jsx209("div", { "data-ow-part": "value", className: "text-ow-fs-ui font-medium leading-[1.4] text-[color:var(--ow-text)]", children: /* @__PURE__ */ jsxs177(
38255
+ /* @__PURE__ */ jsx210("div", { "data-ow-part": "value", className: "text-ow-fs-ui font-medium leading-[1.4] text-[color:var(--ow-text)]", children: /* @__PURE__ */ jsxs177(
38422
38256
  "span",
38423
38257
  {
38424
38258
  "data-ow-part": "status",
@@ -38428,15 +38262,15 @@ function ScheduledTaskDetailView({
38428
38262
  DETAIL_STATUS_CLASS[task.statusKey]
38429
38263
  ),
38430
38264
  children: [
38431
- task.statusKey === "running" && /* @__PURE__ */ jsx209(BeaconSpinner, { size: 12 }),
38265
+ task.statusKey === "running" && /* @__PURE__ */ jsx210(BeaconSpinner, { size: 12 }),
38432
38266
  task.statusLabel
38433
38267
  ]
38434
38268
  }
38435
38269
  ) })
38436
38270
  ] }),
38437
- /* @__PURE__ */ jsx209(DetailField, { label: t("interface.modelf86c1"), value: task.modelName }),
38438
- /* @__PURE__ */ jsx209(DetailField, { label: t("interface.project82b62"), value: task.projectName }),
38439
- task.notifyTargetLabel && /* @__PURE__ */ jsx209(DetailField, { label: t("interface.notifyOnCompletion8fde2"), value: task.notifyTargetLabel })
38271
+ /* @__PURE__ */ jsx210(DetailField, { label: t("interface.modelf86c1"), value: task.modelName }),
38272
+ /* @__PURE__ */ jsx210(DetailField, { label: t("interface.project82b62"), value: task.projectName }),
38273
+ task.notifyTargetLabel && /* @__PURE__ */ jsx210(DetailField, { label: t("interface.notifyOnCompletion8fde2"), value: task.notifyTargetLabel })
38440
38274
  ] }),
38441
38275
  task.promptPreview && /* @__PURE__ */ jsxs177("div", { "data-slot": "scheduled-task-prompt", className: "mt-4 border-t border-[color:var(--ow-border)] pt-4", children: [
38442
38276
  /* @__PURE__ */ jsxs177(
@@ -38450,7 +38284,7 @@ function ScheduledTaskDetailView({
38450
38284
  ]
38451
38285
  }
38452
38286
  ),
38453
- /* @__PURE__ */ jsx209(
38287
+ /* @__PURE__ */ jsx210(
38454
38288
  "div",
38455
38289
  {
38456
38290
  "data-ow-part": "content",
@@ -38490,7 +38324,7 @@ function ScheduledTaskDetailView({
38490
38324
  + surface 底 + 居中一句,无母题无钮;原型 template.dc.html L1841)——它替的是
38491
38325
  一张列表卡的位置,所以要占住那块面,而不是在空气里摆一枚母题。
38492
38326
  文案同步换成原型那句:说清「恢复之后会怎样」,不是「尚未运行」这种状态读数。 */
38493
- /* @__PURE__ */ jsx209(EmptyState, { variant: "card", message: t("interface.noRunsYetResumeTheSchedule55236") })
38327
+ /* @__PURE__ */ jsx210(EmptyState, { variant: "card", message: t("interface.noRunsYetResumeTheSchedule55236") })
38494
38328
  ) : /* @__PURE__ */ jsxs177(
38495
38329
  "div",
38496
38330
  {
@@ -38510,7 +38344,7 @@ function ScheduledTaskDetailView({
38510
38344
  "#",
38511
38345
  run.turnLabel
38512
38346
  ] }),
38513
- /* @__PURE__ */ jsx209(
38347
+ /* @__PURE__ */ jsx210(
38514
38348
  "span",
38515
38349
  {
38516
38350
  "data-ow-part": "run-status-icon",
@@ -38519,7 +38353,7 @@ function ScheduledTaskDetailView({
38519
38353
  "inline-flex size-5 items-center justify-center rounded-[var(--ow-radius-pill)] [&_svg]:size-3",
38520
38354
  RUN_STATUS_DOT_CLASS[run.statusKey]
38521
38355
  ),
38522
- children: run.statusKey === "running" ? /* @__PURE__ */ jsx209(BeaconSpinner, { size: 13 }) : run.statusKey === "done" ? /* @__PURE__ */ jsx209(Check, {}) : run.statusKey === "failed" ? /* @__PURE__ */ jsx209(Close, {}) : null
38356
+ children: run.statusKey === "running" ? /* @__PURE__ */ jsx210(BeaconSpinner, { size: 13 }) : run.statusKey === "done" ? /* @__PURE__ */ jsx210(Check, {}) : run.statusKey === "failed" ? /* @__PURE__ */ jsx210(Close, {}) : null
38523
38357
  }
38524
38358
  )
38525
38359
  ] }),
@@ -38531,7 +38365,7 @@ function ScheduledTaskDetailView({
38531
38365
  className: "flex items-center gap-2 font-[family-name:var(--ow-font-mono)] text-ow-fs-body-sm font-medium leading-[1.3] text-[color:var(--ow-text)] tabular-nums",
38532
38366
  children: [
38533
38367
  run.when,
38534
- /* @__PURE__ */ jsx209(
38368
+ /* @__PURE__ */ jsx210(
38535
38369
  "span",
38536
38370
  {
38537
38371
  "data-ow-part": "run-status-label",
@@ -38546,7 +38380,7 @@ function ScheduledTaskDetailView({
38546
38380
  ]
38547
38381
  }
38548
38382
  ),
38549
- /* @__PURE__ */ jsx209(
38383
+ /* @__PURE__ */ jsx210(
38550
38384
  "div",
38551
38385
  {
38552
38386
  "data-ow-part": "run-summary",
@@ -38555,12 +38389,12 @@ function ScheduledTaskDetailView({
38555
38389
  }
38556
38390
  )
38557
38391
  ] }),
38558
- /* @__PURE__ */ jsx209(
38392
+ /* @__PURE__ */ jsx210(
38559
38393
  "div",
38560
38394
  {
38561
38395
  "data-ow-part": "run-trailing",
38562
38396
  className: "inline-flex shrink-0 items-center gap-2 text-[color:var(--ow-text-3)]",
38563
- children: /* @__PURE__ */ jsx209(ChevRight, { className: "size-[15px]" })
38397
+ children: /* @__PURE__ */ jsx210(ChevRight, { className: "size-[15px]" })
38564
38398
  }
38565
38399
  )
38566
38400
  ]
@@ -38588,12 +38422,12 @@ function ScheduledTaskDetailView({
38588
38422
  hasMoreRuns && /* §6/§10:原来是 variant="unstyled" + 手接旧共享 btn 段——绕开 Button 变体
38589
38423
  就等于绕开 hover/press/focus-visible/disabled 全套状态。改 ghost 正规变体
38590
38424
  (中性文字钮,28 高在 §7 控件高表内,状态全集由原语自带)。 */
38591
- /* @__PURE__ */ jsx209(Button, { variant: "ghost", size: "sm", disabled: loadingMoreRuns, onClick: onLoadMoreRuns, children: loadingMoreRuns ? /* @__PURE__ */ jsxs177(Fragment75, { children: [
38592
- /* @__PURE__ */ jsx209(BeaconSpinner, { size: 13 }),
38425
+ /* @__PURE__ */ jsx210(Button, { variant: "ghost", size: "sm", disabled: loadingMoreRuns, onClick: onLoadMoreRuns, children: loadingMoreRuns ? /* @__PURE__ */ jsxs177(Fragment75, { children: [
38426
+ /* @__PURE__ */ jsx210(BeaconSpinner, { size: 13 }),
38593
38427
  " ",
38594
38428
  t("common.loading")
38595
38429
  ] }) : /* @__PURE__ */ jsxs177(Fragment75, { children: [
38596
- /* @__PURE__ */ jsx209(ChevDown, {}),
38430
+ /* @__PURE__ */ jsx210(ChevDown, {}),
38597
38431
  " ",
38598
38432
  t("common.loadMore")
38599
38433
  ] }) })
@@ -38613,7 +38447,7 @@ function DetailField({
38613
38447
  mono = false
38614
38448
  }) {
38615
38449
  return /* @__PURE__ */ jsxs177("div", { "data-slot": "scheduled-task-detail-field", children: [
38616
- /* @__PURE__ */ jsx209(
38450
+ /* @__PURE__ */ jsx210(
38617
38451
  "div",
38618
38452
  {
38619
38453
  "data-ow-part": "label",
@@ -38621,7 +38455,7 @@ function DetailField({
38621
38455
  children: label
38622
38456
  }
38623
38457
  ),
38624
- /* @__PURE__ */ jsx209(
38458
+ /* @__PURE__ */ jsx210(
38625
38459
  "div",
38626
38460
  {
38627
38461
  "data-ow-part": "value",
@@ -38636,7 +38470,7 @@ function DetailField({
38636
38470
  }
38637
38471
 
38638
38472
  // src/components/domain/tasks/ScheduledTasksSpaceView/index.tsx
38639
- import { jsx as jsx210, jsxs as jsxs178 } from "react/jsx-runtime";
38473
+ import { jsx as jsx211, jsxs as jsxs178 } from "react/jsx-runtime";
38640
38474
  function ScheduledTasksSpaceView({
38641
38475
  totalCount,
38642
38476
  loading,
@@ -38649,23 +38483,23 @@ function ScheduledTasksSpaceView({
38649
38483
  }) {
38650
38484
  const { t } = useUiLocale();
38651
38485
  return /* @__PURE__ */ jsxs178("div", { "data-slot": "scheduled-tasks-space", className: "relative flex h-full min-h-0 flex-col", children: [
38652
- /* @__PURE__ */ jsx210(
38486
+ /* @__PURE__ */ jsx211(
38653
38487
  PageHead,
38654
38488
  {
38655
38489
  eyebrow: t("interface.automation90e4e"),
38656
38490
  title: t("common.scheduledTasks"),
38657
38491
  description: t("interface.tasksThatRunOnASchedule2b9c2"),
38658
38492
  meta: `${totalCount} \u4E2A\u4EFB\u52A1`,
38659
- actions: /* @__PURE__ */ jsx210(Button, { variant: "primary", icon: /* @__PURE__ */ jsx210(Plus, {}), onClick: onCreate, children: t("common.newTask") })
38493
+ actions: /* @__PURE__ */ jsx211(Button, { variant: "primary", icon: /* @__PURE__ */ jsx211(Plus, {}), onClick: onCreate, children: t("common.newTask") })
38660
38494
  }
38661
38495
  ),
38662
38496
  /* @__PURE__ */ jsxs178("div", { "data-ow-part": "scroll", className: "ow-scrollbar min-h-0 flex-1 overflow-y-auto px-7 pb-7 pt-5", children: [
38663
- error && hasTasks && /* @__PURE__ */ jsx210("div", { "data-ow-part": "error", children: /* @__PURE__ */ jsxs178(
38497
+ error && hasTasks && /* @__PURE__ */ jsx211("div", { "data-ow-part": "error", children: /* @__PURE__ */ jsxs178(
38664
38498
  InlineMessage,
38665
38499
  {
38666
38500
  variant: "error",
38667
38501
  detail: error,
38668
- action: /* @__PURE__ */ jsx210(Button, { variant: "secondary", size: "sm", onClick: onRetry, children: t("common.retry") }),
38502
+ action: /* @__PURE__ */ jsx211(Button, { variant: "secondary", size: "sm", onClick: onRetry, children: t("common.retry") }),
38669
38503
  children: [
38670
38504
  t("interface.couldNotRefreshScheduledTasks17ce8"),
38671
38505
  " "
@@ -38683,17 +38517,17 @@ function ScheduledTasksSpaceView({
38683
38517
  "aria-live": "polite",
38684
38518
  className: "flex items-center justify-center gap-2 py-24 text-ow-fs-ui font-normal leading-[1.5] text-[color:var(--ow-text-2)]",
38685
38519
  children: [
38686
- /* @__PURE__ */ jsx210(BeaconSpinner, { size: 16 }),
38687
- /* @__PURE__ */ jsx210("span", { children: t("interface.loadingScheduledTaskseb09f") })
38520
+ /* @__PURE__ */ jsx211(BeaconSpinner, { size: 16 }),
38521
+ /* @__PURE__ */ jsx211("span", { children: t("interface.loadingScheduledTaskseb09f") })
38688
38522
  ]
38689
38523
  }
38690
38524
  )
38691
- ) : error && !hasTasks ? /* @__PURE__ */ jsx210("div", { "data-ow-part": "error", className: "mx-auto my-6 max-w-[560px]", children: /* @__PURE__ */ jsxs178(
38525
+ ) : error && !hasTasks ? /* @__PURE__ */ jsx211("div", { "data-ow-part": "error", className: "mx-auto my-6 max-w-[560px]", children: /* @__PURE__ */ jsxs178(
38692
38526
  InlineMessage,
38693
38527
  {
38694
38528
  variant: "error",
38695
38529
  detail: error,
38696
- action: /* @__PURE__ */ jsx210(Button, { variant: "secondary", onClick: onRetry, children: t("common.retry") }),
38530
+ action: /* @__PURE__ */ jsx211(Button, { variant: "secondary", onClick: onRetry, children: t("common.retry") }),
38697
38531
  children: [
38698
38532
  t("interface.couldNotLoadScheduledTasks12c21"),
38699
38533
  " "
@@ -38705,7 +38539,7 @@ function ScheduledTasksSpaceView({
38705
38539
  (原型 template.dc.html L1771–1780)。此前是 md 档单句,三件信息塌成一行。
38706
38540
  §4:空态第二入口与页头「新建任务」是同一动作同一形制——primary 实底主钮,
38707
38541
  与页头钮成对出现;CTA 不带图标,图标只留给页头钮(原型空态钮即无图标)。 */
38708
- /* @__PURE__ */ jsx210(
38542
+ /* @__PURE__ */ jsx211(
38709
38543
  EmptyState,
38710
38544
  {
38711
38545
  size: "page",
@@ -38716,7 +38550,7 @@ function ScheduledTasksSpaceView({
38716
38550
  onAction: onCreate
38717
38551
  }
38718
38552
  )
38719
- ) : /* @__PURE__ */ jsx210(
38553
+ ) : /* @__PURE__ */ jsx211(
38720
38554
  "div",
38721
38555
  {
38722
38556
  "data-ow-part": "grid",
@@ -38762,6 +38596,7 @@ export {
38762
38596
  Brain,
38763
38597
  Branch,
38764
38598
  BranchDivider,
38599
+ BrandPreviewScope,
38765
38600
  BrowserAnnotationPopupView,
38766
38601
  BrowserDeviceToolbarView,
38767
38602
  BrowserFindBarView,