@lobehub/chat 1.26.5 → 1.26.7

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,56 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ### [Version 1.26.7](https://github.com/lobehub/lobe-chat/compare/v1.26.6...v1.26.7)
6
+
7
+ <sup>Released on **2024-10-29**</sup>
8
+
9
+ #### 🐛 Bug Fixes
10
+
11
+ - **misc**: Remove PWA Install in Firefox and Arc.
12
+
13
+ <br/>
14
+
15
+ <details>
16
+ <summary><kbd>Improvements and Fixes</kbd></summary>
17
+
18
+ #### What's fixed
19
+
20
+ - **misc**: Remove PWA Install in Firefox and Arc, closes [#4532](https://github.com/lobehub/lobe-chat/issues/4532) ([4a380c5](https://github.com/lobehub/lobe-chat/commit/4a380c5))
21
+
22
+ </details>
23
+
24
+ <div align="right">
25
+
26
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
27
+
28
+ </div>
29
+
30
+ ### [Version 1.26.6](https://github.com/lobehub/lobe-chat/compare/v1.26.5...v1.26.6)
31
+
32
+ <sup>Released on **2024-10-29**</sup>
33
+
34
+ #### 💄 Styles
35
+
36
+ - **misc**: Add Qwen2.5-72B-Instruct model on HF provider.
37
+
38
+ <br/>
39
+
40
+ <details>
41
+ <summary><kbd>Improvements and Fixes</kbd></summary>
42
+
43
+ #### Styles
44
+
45
+ - **misc**: Add Qwen2.5-72B-Instruct model on HF provider, closes [#4530](https://github.com/lobehub/lobe-chat/issues/4530) ([d3c2f7a](https://github.com/lobehub/lobe-chat/commit/d3c2f7a))
46
+
47
+ </details>
48
+
49
+ <div align="right">
50
+
51
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
52
+
53
+ </div>
54
+
5
55
  ### [Version 1.26.5](https://github.com/lobehub/lobe-chat/compare/v1.26.4...v1.26.5)
6
56
 
7
57
  <sup>Released on **2024-10-29**</sup>
package/README.md CHANGED
@@ -285,14 +285,14 @@ Our marketplace is not just a showcase platform but also a collaborative space.
285
285
 
286
286
  <!-- AGENT LIST -->
287
287
 
288
- | Recent Submits | Description |
289
- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
290
- | [Vector Logo Generator](https://chat-preview.lobehub.com/market?agent=svg-logo)<br/><sup>By **[Justin3go](https://github.com/Justin3go)** on **2024-10-27**</sup> | Specializing in UI/UX design and logo creation<br/>`ui-ux-design` `logo-design` `user-needs` `interaction-design` `tool-usage` |
291
- | [Algorithm Answer Mentor](https://chat-preview.lobehub.com/market?agent=leetcode-tutor)<br/><sup>By **[Stark-X](https://github.com/Stark-X)** on **2024-10-21**</sup> | Specializes in LeetCode algorithm solutions and user guidance<br/>`algorithm` `problem-solving` `programming` `education` |
292
- | [Psychologist](https://chat-preview.lobehub.com/market?agent=psychological-counselor)<br/><sup>By **[JIANGTUNAN](https://github.com/JIANGTUNAN)** on **2024-10-21**</sup> | An experienced psychologist, warmly and patiently listening to your story.<br/>`psychological-counseling` `consultation` `sharing` `friendly` `doctor` `counselor` |
293
- | [Boxing Training Master](https://chat-preview.lobehub.com/market?agent=boxing-master)<br/><sup>By **[Luyi-2333](https://github.com/Luyi-2333)** on **2024-10-15**</sup> | Expert in boxing training guidance and personalized plan development<br/>`boxing-training` `personalized-plans` `fitness-guidance` `progress-evaluation` `technique-improvement` `health-and-nutrition` |
294
-
295
- > 📊 Total agents: [<kbd>**421**</kbd> ](https://github.com/lobehub/lobe-chat-agents)
288
+ | Recent Submits | Description |
289
+ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
290
+ | [Machine Vision LaTeX](https://chat-preview.lobehub.com/market?agent=cv-latex)<br/><sup>By **[5xiao0qing5](https://github.com/5xiao0qing5)** on **2024-10-29**</sup> | Specializes in explaining concepts of machine learning and deep learning<br/>`machine-learning` `deep-learning` `image-processing` `computer-vision` `la-te-x` |
291
+ | [Domain Analysis Master](https://chat-preview.lobehub.com/market?agent=domain)<br/><sup>By **[ccbikai](https://github.com/ccbikai)** on **2024-10-29**</sup> | Expert in domain analysis and humorous suggestions<br/>`domain-analysis` `humor` `culture` `website-suggestions` `purchase-advice` |
292
+ | [Ingo Hausmann](https://chat-preview.lobehub.com/market?agent=pc-beschaffung-ingo-hausmann)<br/><sup>By **[bionicprompter](https://github.com/bionicprompter)** on **2024-10-29**</sup> | Ingo Hausmann wants to be advised on a new purchase of PCs<br/>`company` `hardware` `needs-assessment` `it` `applications` |
293
+ | [Print to Table](https://chat-preview.lobehub.com/market?agent=print-to-table)<br/><sup>By **[printtotable](https://github.com/printtotable)** on **2024-10-29**</sup> | Transform data from images into organized tables in Excel.<br/>`data-extraction` `tables` `advertising` `influencer` `excel` |
294
+
295
+ > 📊 Total agents: [<kbd>**430**</kbd> ](https://github.com/lobehub/lobe-chat-agents)
296
296
 
297
297
  <!-- AGENT LIST -->
298
298
 
package/README.zh-CN.md CHANGED
@@ -274,14 +274,14 @@ LobeChat 的插件生态系统是其核心功能的重要扩展,它极大地
274
274
 
275
275
  <!-- AGENT LIST -->
276
276
 
277
- | 最近新增 | 助手说明 |
278
- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
279
- | [矢量 Logo 生成器](https://chat-preview.lobehub.com/market?agent=svg-logo)<br/><sup>By **[Justin3go](https://github.com/Justin3go)** on **2024-10-27**</sup> | 擅长 UI/UX 设计与 Logo 创作<br/>`ui-ux设计` `logo设计` `用户需求` `交互设计` `工具使用` |
280
- | [算法解答导师](https://chat-preview.lobehub.com/market?agent=leetcode-tutor)<br/><sup>By **[Stark-X](https://github.com/Stark-X)** on **2024-10-21**</sup> | 擅长 LeetCode 算法解答与用户指导<br/>`算法` `解题` `编程` `教育` |
281
- | [心理咨询师](https://chat-preview.lobehub.com/market?agent=psychological-counselor)<br/><sup>By **[JIANGTUNAN](https://github.com/JIANGTUNAN)** on **2024-10-21**</sup> | 一个资深心理医生,温暖和耐心的倾听你的故事。<br/>`心理咨询` `咨询` `倾述` `友好` `医生` `咨询师` |
282
- | [拳击训练大师](https://chat-preview.lobehub.com/market?agent=boxing-master)<br/><sup>By **[Luyi-2333](https://github.com/Luyi-2333)** on **2024-10-15**</sup> | 擅长拳击训练指导与个性化计划制定<br/>`拳击训练` `个性化计划` `健身指导` `进度评估` `技术提升` `健康与营养` |
283
-
284
- > 📊 Total agents: [<kbd>**421**</kbd> ](https://github.com/lobehub/lobe-chat-agents)
277
+ | 最近新增 | 助手说明 |
278
+ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
279
+ | [机器视觉 latex](https://chat-preview.lobehub.com/market?agent=cv-latex)<br/><sup>By **[5xiao0qing5](https://github.com/5xiao0qing5)** on **2024-10-29**</sup> | 擅长机器学习与深度学习概念解析<br/>`机器学习` `深度学习` `图像处理` `计算机视觉` `la-te-x` |
280
+ | [域名分析大师](https://chat-preview.lobehub.com/market?agent=domain)<br/><sup>By **[ccbikai](https://github.com/ccbikai)** on **2024-10-29**</sup> | 擅长域名分析与幽默建议<br/>`域名分析` `幽默` `文化` `建站建议` `购买建议` |
281
+ | [英戈・豪斯曼](https://chat-preview.lobehub.com/market?agent=pc-beschaffung-ingo-hausmann)<br/><sup>By **[bionicprompter](https://github.com/bionicprompter)** on **2024-10-29**</sup> | 英戈・豪斯曼希望就新购置的电脑进行咨询<br/>`公司` `硬件` `需求分析` `it` `应用` |
282
+ | [打印到表格](https://chat-preview.lobehub.com/market?agent=print-to-table)<br/><sup>By **[printtotable](https://github.com/printtotable)** on **2024-10-29**</sup> | 将图像数据转换为 Excel 中的组织表格。<br/>`数据提取` `表格` `广告` `影响者` `excel` |
283
+
284
+ > 📊 Total agents: [<kbd>**430**</kbd> ](https://github.com/lobehub/lobe-chat-agents)
285
285
 
286
286
  <!-- AGENT LIST -->
287
287
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "1.26.5",
3
+ "version": "1.26.7",
4
4
  "description": "Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
5
5
  "keywords": [
6
6
  "framework",
@@ -47,8 +47,6 @@ const manifest = async (): Promise<MetadataRoute.Manifest | any> => {
47
47
  },
48
48
  {
49
49
  form_factor: 'narrow',
50
- sizes: '640x1138',
51
-
52
50
  url: '/screenshots/shot-3.mobile.png',
53
51
  },
54
52
  {
@@ -15,6 +15,12 @@ const HuggingFace: ModelProviderCard = {
15
15
  id: 'google/gemma-2-2b-it',
16
16
  tokens: 8192,
17
17
  },
18
+ {
19
+ description: '阿里云通义千问团队开发的大型语言模型',
20
+ displayName: 'Qwen 2.5 72B Instruct',
21
+ id: 'Qwen/Qwen2.5-72B-Instruct',
22
+ tokens: 32_768,
23
+ },
18
24
  ],
19
25
  checkModel: 'mistralai/Mistral-7B-Instruct-v0.2',
20
26
  description:
@@ -11,10 +11,10 @@ const Install: any = dynamic(() => import('./Install'), {
11
11
  });
12
12
 
13
13
  const PWAInstall = memo(() => {
14
- const { isPWA } = usePlatform();
14
+ const { isPWA, isSupportInstallPWA } = usePlatform();
15
15
  const isShowPWAGuide = useUserStore((s) => s.isShowPWAGuide);
16
16
 
17
- if (isPWA || !isShowPWAGuide) return null;
17
+ if (isPWA || !isShowPWAGuide || !isSupportInstallPWA) return null;
18
18
 
19
19
  // only when the user is suitable for the pwa install and not install the pwa
20
20
  // then show the installation guide
@@ -38,6 +38,7 @@ describe('usePWAInstall', () => {
38
38
  });
39
39
 
40
40
  it('should return canInstall based on canInstall state when support PWA', () => {
41
+ document.body.innerHTML = `<div id="${PWA_INSTALL_ID}"></div>`;
41
42
  vi.mocked(usePlatform).mockReturnValue({ isSupportInstallPWA: true, isPWA: false } as any);
42
43
 
43
44
  const { result, rerender } = renderHook(() => usePWAInstall());
@@ -53,12 +54,12 @@ describe('usePWAInstall', () => {
53
54
  expect(result.current.canInstall).toBe(true);
54
55
  });
55
56
 
56
- it('should return canInstall as true when not support PWA', () => {
57
+ it('should return canInstall as false when not support PWA', () => {
57
58
  vi.mocked(usePlatform).mockReturnValue({ isSupportInstallPWA: false, isPWA: false } as any);
58
59
 
59
60
  const { result } = renderHook(() => usePWAInstall());
60
61
 
61
- expect(result.current.canInstall).toBe(true);
62
+ expect(result.current.canInstall).toBe(false);
62
63
  });
63
64
 
64
65
  it('should call pwa.showDialog when install is called', () => {
@@ -19,12 +19,11 @@ export const usePWAInstall = () => {
19
19
  }, []);
20
20
 
21
21
  const installCheck = () => {
22
- // 当在 PWA 中时,不显示安装按钮
23
- if (isPWA) return false;
24
- // 其他情况下,根据是否可以安装来显示安装按钮 (如已经安装则不显示)
25
- if (isSupportInstallPWA) return canInstall;
26
- // 当在不支持 PWA 的环境中时,安装按钮 (此时为安装教程)
27
- return true;
22
+ // 当在 PWA 或不支持 PWA 的环境中时,不显示安装按钮
23
+ if (isPWA || !isSupportInstallPWA) return false;
24
+ const pwa: any = document.querySelector(`#${PWA_INSTALL_ID}`);
25
+ if (!pwa) return false;
26
+ return canInstall;
28
27
  };
29
28
 
30
29
  return {
@@ -11,12 +11,14 @@ vi.mock('@/utils/platform', () => ({
11
11
  getPlatform: vi.fn(),
12
12
  isInStandaloneMode: vi.fn(),
13
13
  isSonomaOrLaterSafari: vi.fn(),
14
+ isArc: vi.fn(),
14
15
  }));
15
16
 
16
17
  describe('usePlatform', () => {
17
18
  it('should return correct platform info for Mac OS and Chrome', () => {
18
19
  vi.mocked(platformUtils.getPlatform).mockReturnValue('Mac OS');
19
20
  vi.mocked(platformUtils.getBrowser).mockReturnValue('Chrome');
21
+ vi.mocked(platformUtils.isArc).mockReturnValue(false);
20
22
  vi.mocked(platformUtils.isInStandaloneMode).mockReturnValue(false);
21
23
  vi.mocked(platformUtils.isSonomaOrLaterSafari).mockReturnValue(false);
22
24
 
@@ -27,10 +29,12 @@ describe('usePlatform', () => {
27
29
  isChrome: true,
28
30
  isChromium: true,
29
31
  isEdge: false,
32
+ isFirefox: false,
30
33
  isIOS: false,
31
34
  isMacOS: true,
32
35
  isPWA: false,
33
36
  isSafari: false,
37
+ isArc: false,
34
38
  isSonomaOrLaterSafari: false,
35
39
  isSupportInstallPWA: true,
36
40
  });
@@ -39,6 +43,7 @@ describe('usePlatform', () => {
39
43
  it('should return correct platform info for iOS and Safari', () => {
40
44
  vi.mocked(platformUtils.getPlatform).mockReturnValue('iOS');
41
45
  vi.mocked(platformUtils.getBrowser).mockReturnValue('Safari');
46
+ vi.mocked(platformUtils.isArc).mockReturnValue(false);
42
47
  vi.mocked(platformUtils.isInStandaloneMode).mockReturnValue(true);
43
48
  vi.mocked(platformUtils.isSonomaOrLaterSafari).mockReturnValue(true);
44
49
 
@@ -49,6 +54,8 @@ describe('usePlatform', () => {
49
54
  isChrome: false,
50
55
  isChromium: false,
51
56
  isEdge: false,
57
+ isArc: false,
58
+ isFirefox: false,
52
59
  isIOS: true,
53
60
  isMacOS: false,
54
61
  isPWA: true,
@@ -61,6 +68,7 @@ describe('usePlatform', () => {
61
68
  it('should return correct platform info for Windows and Edge', () => {
62
69
  vi.mocked(platformUtils.getPlatform).mockReturnValue('Windows');
63
70
  vi.mocked(platformUtils.getBrowser).mockReturnValue('Edge');
71
+ vi.mocked(platformUtils.isArc).mockReturnValue(false);
64
72
  vi.mocked(platformUtils.isInStandaloneMode).mockReturnValue(false);
65
73
  vi.mocked(platformUtils.isSonomaOrLaterSafari).mockReturnValue(false);
66
74
 
@@ -71,12 +79,64 @@ describe('usePlatform', () => {
71
79
  isChrome: false,
72
80
  isChromium: true,
73
81
  isEdge: true,
82
+ isFirefox: false,
74
83
  isIOS: false,
75
84
  isMacOS: false,
85
+ isArc: false,
76
86
  isPWA: false,
77
87
  isSafari: false,
78
88
  isSonomaOrLaterSafari: false,
79
89
  isSupportInstallPWA: true,
80
90
  });
81
91
  });
92
+
93
+ it('should return correct platform info for Firefox', () => {
94
+ vi.mocked(platformUtils.getPlatform).mockReturnValue('Windows');
95
+ vi.mocked(platformUtils.getBrowser).mockReturnValue('Firefox');
96
+ vi.mocked(platformUtils.isArc).mockReturnValue(false);
97
+ vi.mocked(platformUtils.isInStandaloneMode).mockReturnValue(false);
98
+ vi.mocked(platformUtils.isSonomaOrLaterSafari).mockReturnValue(false);
99
+
100
+ const { result } = renderHook(() => usePlatform());
101
+
102
+ expect(result.current).toEqual({
103
+ isApple: false,
104
+ isChrome: false,
105
+ isChromium: false,
106
+ isEdge: false,
107
+ isFirefox: true,
108
+ isIOS: false,
109
+ isMacOS: false,
110
+ isArc: false,
111
+ isPWA: false,
112
+ isSafari: false,
113
+ isSonomaOrLaterSafari: false,
114
+ isSupportInstallPWA: false,
115
+ });
116
+ });
117
+
118
+ it('should return correct platform info for Arc', () => {
119
+ vi.mocked(platformUtils.getPlatform).mockReturnValue('Mac OS');
120
+ vi.mocked(platformUtils.getBrowser).mockReturnValue('Chrome');
121
+ vi.mocked(platformUtils.isArc).mockReturnValue(true);
122
+ vi.mocked(platformUtils.isInStandaloneMode).mockReturnValue(false);
123
+ vi.mocked(platformUtils.isSonomaOrLaterSafari).mockReturnValue(false);
124
+
125
+ const { result } = renderHook(() => usePlatform());
126
+
127
+ expect(result.current).toEqual({
128
+ isApple: true,
129
+ isChrome: true,
130
+ isChromium: true,
131
+ isEdge: false,
132
+ isFirefox: false,
133
+ isIOS: false,
134
+ isMacOS: true,
135
+ isArc: true,
136
+ isPWA: false,
137
+ isSafari: false,
138
+ isSonomaOrLaterSafari: false,
139
+ isSupportInstallPWA: false,
140
+ });
141
+ });
82
142
  });
@@ -1,8 +1,9 @@
1
- import { useRef } from 'react';
1
+ import { useMemo, useRef } from 'react';
2
2
 
3
3
  import {
4
4
  getBrowser,
5
5
  getPlatform,
6
+ isArc,
6
7
  isInStandaloneMode,
7
8
  isSonomaOrLaterSafari,
8
9
  } from '@/utils/platform';
@@ -12,21 +13,30 @@ export const usePlatform = () => {
12
13
  const browser = useRef(getBrowser());
13
14
 
14
15
  const platformInfo = {
15
- isApple: platform.current && ['Mac OS', 'iOS'].includes(platform.current),
16
- isChrome: browser.current === 'Chrome',
17
- isChromium: browser.current && ['Chrome', 'Edge', 'Opera', 'Brave'].includes(browser.current),
18
- isEdge: browser.current === 'Edge',
19
- isIOS: platform.current === 'iOS',
20
- isMacOS: platform.current === 'Mac OS',
16
+ isApple: platform.current && ['mac os', 'ios'].includes(platform.current?.toLowerCase()),
17
+ isArc: isArc(),
18
+ isChrome: browser.current?.toLowerCase() === 'chrome',
19
+ isChromium:
20
+ browser.current &&
21
+ ['chrome', 'edge', 'opera', 'brave'].includes(browser.current?.toLowerCase()),
22
+ isEdge: browser.current?.toLowerCase() === 'edge',
23
+ isFirefox: browser.current?.toLowerCase() === 'firefox',
24
+ isIOS: platform.current?.toLowerCase() === 'ios',
25
+ isMacOS: platform.current?.toLowerCase() === 'mac os',
21
26
  isPWA: isInStandaloneMode(),
22
- isSafari: browser.current === 'Safari',
27
+ isSafari: browser.current?.toLowerCase() === 'safari',
23
28
  isSonomaOrLaterSafari: isSonomaOrLaterSafari(),
24
29
  };
25
30
 
26
- return {
27
- ...platformInfo,
28
- isSupportInstallPWA:
29
- (platformInfo.isChromium && !platformInfo.isIOS) ||
30
- (platformInfo.isMacOS && platformInfo.isSonomaOrLaterSafari),
31
- };
31
+ return useMemo(
32
+ () => ({
33
+ ...platformInfo,
34
+ isSupportInstallPWA:
35
+ !platformInfo.isArc &&
36
+ !platformInfo.isFirefox &&
37
+ ((platformInfo.isChromium && !platformInfo.isIOS) ||
38
+ (platformInfo.isMacOS && platformInfo.isSonomaOrLaterSafari)),
39
+ }),
40
+ [platformInfo],
41
+ );
32
42
  };
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, it, vi } from 'vitest';
2
2
 
3
- import { isSonomaOrLaterSafari } from './platform';
3
+ import { isArc, isSonomaOrLaterSafari } from './platform';
4
4
 
5
5
  describe('isSonomaOrLaterSafari', () => {
6
6
  beforeEach(() => {
@@ -80,4 +80,58 @@ describe('isSonomaOrLaterSafari', () => {
80
80
  );
81
81
  expect(isSonomaOrLaterSafari()).toBe(true);
82
82
  });
83
+
84
+ describe('isArc', () => {
85
+ // 保存原始的 window 对象
86
+ const originalWindow = { ...window };
87
+
88
+ beforeEach(() => {
89
+ // 重置 window 对象
90
+ vi.stubGlobal('window', { ...originalWindow });
91
+ // 模拟 matchMedia
92
+ window.matchMedia = vi.fn().mockReturnValue({ matches: false });
93
+ });
94
+
95
+ afterEach(() => {
96
+ // 清理所有模拟
97
+ vi.restoreAllMocks();
98
+ });
99
+
100
+ it('should return false when on server side', () => {
101
+ vi.mock('./platform', async (importOriginal) => {
102
+ const mod = await importOriginal();
103
+
104
+ return {
105
+ // @ts-ignore
106
+ ...mod,
107
+ isOnServerSide: true,
108
+ };
109
+ });
110
+ expect(isArc()).toBe(false);
111
+ });
112
+
113
+ it('should return true when CSS custom property matches', () => {
114
+ window.matchMedia = vi.fn().mockReturnValue({ matches: true });
115
+ expect(isArc()).toBe(true);
116
+ });
117
+
118
+ it('should return true when "arc" is in window', () => {
119
+ (window as any).arc = {};
120
+ expect(isArc()).toBe(true);
121
+ });
122
+
123
+ it('should return true when "ArcControl" is in window', () => {
124
+ (window as any).ArcControl = {};
125
+ expect(isArc()).toBe(true);
126
+ });
127
+
128
+ it('should return true when "ARCControl" is in window', () => {
129
+ (window as any).ARCControl = {};
130
+ expect(isArc()).toBe(true);
131
+ });
132
+
133
+ it('should return false when none of the conditions are met', () => {
134
+ expect(isArc()).toBe(false);
135
+ });
136
+ });
83
137
  });
@@ -25,6 +25,15 @@ export const browserInfo = {
25
25
 
26
26
  export const isMacOS = () => getPlatform() === 'Mac OS';
27
27
 
28
+ export const isArc = () => {
29
+ if (isOnServerSide) return false;
30
+ return (
31
+ window.matchMedia('(--arc-palette-focus: var(--arc-background-simple-color))').matches ||
32
+ Boolean('arc' in window || 'ArcControl' in window || 'ARCControl' in window) ||
33
+ Boolean(getComputedStyle(document.documentElement).getPropertyValue('--arc-palette-title'))
34
+ );
35
+ };
36
+
28
37
  export const isInStandaloneMode = () => {
29
38
  if (isOnServerSide) return false;
30
39
  return (