@coffic/cosy-ui 0.8.29 → 0.9.1

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.
@@ -1,9 +1,3 @@
1
- /**
2
- * 国际化文本配置
3
- *
4
- * 提供组件的多语言文本内容
5
- */
6
-
7
1
  // 定义文本内容的类型
8
2
  type TextContent = Record<string, Record<string, string>>;
9
3
 
@@ -1,6 +1,4 @@
1
- import { getRelativeLocaleUrl } from 'astro:i18n';
2
1
  import type { AstroGlobal } from 'astro';
3
- import { cosyLogger } from '../../src-astro/cosy';
4
2
 
5
3
  // 默认语言
6
4
  export const DEFAULT_LANGUAGE = 'en';
@@ -11,111 +9,92 @@ export const DEFAULT_LANGUAGE = 'en';
11
9
  * 提供语言相关的工具函数,用于多语言支持
12
10
  */
13
11
  export class LanguageUtil {
14
- static getRelativeLink(locale: string, astro: AstroGlobal): string {
15
- const debug = false;
16
- const currentLocale = astro.currentLocale;
17
- const originalPath = astro.originPathname;
18
- const result = getRelativeLocaleUrl(
19
- locale,
20
- originalPath.replaceAll('/' + currentLocale, '')
21
- );
22
-
23
- if (debug) {
24
- cosyLogger.debug(
25
- `getRelativeLink: locale=${locale}, currentPath=${originalPath}, currentLocale=${currentLocale}, result=${result}`
26
- );
27
- }
28
-
29
- return result;
30
- }
31
-
32
- static getLanguageName(code: string | undefined): string {
33
- switch (code) {
34
- case 'en':
35
- return 'English';
36
- case 'zh-cn':
37
- return '简体中文';
38
- case 'zh':
39
- return '中文';
40
- case undefined:
41
- default:
42
- return 'not known';
12
+ static getLanguageName(code: string | undefined): string {
13
+ switch (code) {
14
+ case 'en':
15
+ return 'English';
16
+ case 'zh-cn':
17
+ return '简体中文';
18
+ case 'zh':
19
+ return '中文';
20
+ default:
21
+ return code || 'not known';
22
+ }
43
23
  }
44
- }
45
24
 
46
- /**
47
- * 获取当前语言
48
- * @param astro Astro全局对象
49
- * @returns 当前应使用的语言代码
50
- */
51
- static getCurrentLanguage(astro: AstroGlobal): string {
52
- // 尝试从Astro全局对象中获取语言
53
- const astroLang = astro.currentLocale;
54
- if (astroLang) {
55
- return astroLang;
56
- }
57
- // 尝试从URL中获取语言
58
- const urlLang = this.getLanguageFromURL(astro.url.pathname);
59
- if (urlLang) {
60
- return urlLang;
61
- }
62
-
63
- // 尝试从浏览器设置中获取语言
64
- const browserLang = this.getLanguageFromBrowser();
65
- if (browserLang) {
66
- return browserLang;
25
+ /**
26
+ * 获取当前语言
27
+ * @param astro Astro全局对象
28
+ * @returns 当前应使用的语言代码
29
+ */
30
+ static getCurrentLanguage(astro: AstroGlobal): string {
31
+ // 尝试从Astro全局对象中获取语言
32
+ const astroLang = astro.currentLocale;
33
+ if (astroLang) {
34
+ return astroLang;
35
+ }
36
+ // 尝试从URL中获取语言
37
+ const urlLang = this.getLanguageFromURL(astro.url.pathname);
38
+ if (urlLang) {
39
+ return urlLang;
40
+ }
41
+
42
+ // 尝试从浏览器设置中获取语言
43
+ const browserLang = this.getLanguageFromBrowser();
44
+ if (browserLang) {
45
+ return browserLang;
46
+ }
47
+
48
+ // 尝试从Astro全局对象中获取语言
49
+ const preferredLocale = astro.preferredLocale;
50
+ if (preferredLocale) {
51
+ return preferredLocale;
52
+ }
53
+
54
+ // 如果无法检测,返回默认语言
55
+ return DEFAULT_LANGUAGE;
67
56
  }
68
57
 
69
- // 尝试从Astro全局对象中获取语言
70
- const preferredLocale = astro.preferredLocale;
71
- if (preferredLocale) {
72
- return preferredLocale;
58
+ /**
59
+ * 从URL中提取语言代码
60
+ * @param url 当前URL
61
+ * @returns 从URL中提取的语言代码,如果无法提取则返回undefined
62
+ */
63
+ private static getLanguageFromURL(url: string): string | undefined {
64
+ let currentUrl = url;
65
+
66
+ if (currentUrl === undefined) {
67
+ if (typeof window === 'undefined') return undefined;
68
+ currentUrl = window.location.href;
69
+ }
70
+
71
+ // 尝试从路径中提取语言代码
72
+ // 例如: /zh-cn/components/button
73
+ const pathMatch = currentUrl.match(/^\/([\w-]+)\//);
74
+ if (pathMatch) {
75
+ return pathMatch[1];
76
+ }
77
+
78
+ // 尝试从查询参数中提取语言代码
79
+ // 例如: ?lang=zh-cn
80
+ const urlParams = new URLSearchParams(currentUrl.split('?')[1]);
81
+ const langParam = urlParams.get('lang');
82
+ if (langParam) {
83
+ return langParam;
84
+ }
85
+
86
+ return undefined;
73
87
  }
74
88
 
75
- // 如果无法检测,返回默认语言
76
- return DEFAULT_LANGUAGE;
77
- }
78
-
79
- /**
80
- * 从URL中提取语言代码
81
- * @param url 当前URL
82
- * @returns 从URL中提取的语言代码,如果无法提取则返回undefined
83
- */
84
- private static getLanguageFromURL(url: string): string | undefined {
85
- let currentUrl = url;
89
+ /**
90
+ * 从浏览器设置中获取首选语言
91
+ * @returns 从浏览器设置中获取的语言代码,如果无法获取则返回undefined
92
+ */
93
+ private static getLanguageFromBrowser(): string | undefined {
94
+ if (typeof navigator === 'undefined') return undefined;
86
95
 
87
- if (currentUrl === undefined) {
88
- if (typeof window === 'undefined') return undefined;
89
- currentUrl = window.location.href;
96
+ // 获取浏览器语言
97
+ const browserLang = navigator.language.toLowerCase();
98
+ return browserLang;
90
99
  }
91
-
92
- // 尝试从路径中提取语言代码
93
- // 例如: /zh-cn/components/button
94
- const pathMatch = currentUrl.match(/^\/([\w-]+)\//);
95
- if (pathMatch) {
96
- return pathMatch[1];
97
- }
98
-
99
- // 尝试从查询参数中提取语言代码
100
- // 例如: ?lang=zh-cn
101
- const urlParams = new URLSearchParams(currentUrl.split('?')[1]);
102
- const langParam = urlParams.get('lang');
103
- if (langParam) {
104
- return langParam;
105
- }
106
-
107
- return undefined;
108
- }
109
-
110
- /**
111
- * 从浏览器设置中获取首选语言
112
- * @returns 从浏览器设置中获取的语言代码,如果无法获取则返回undefined
113
- */
114
- private static getLanguageFromBrowser(): string | undefined {
115
- if (typeof navigator === 'undefined') return undefined;
116
-
117
- // 获取浏览器语言
118
- const browserLang = navigator.language.toLowerCase();
119
- return browserLang;
120
- }
121
100
  }
@@ -22,8 +22,9 @@ import {
22
22
  Link,
23
23
  Image,
24
24
  ThemeSwitcher,
25
- } from '@coffic/cosy-ui';
25
+ } from '../../index-astro';
26
26
  import Logo from '../../src/assets/logo-rounded.png';
27
+ import { i18n } from 'astro:config/server';
27
28
 
28
29
  export interface Props extends IHeaderProps {
29
30
  debug?: boolean;
@@ -31,7 +32,6 @@ export interface Props extends IHeaderProps {
31
32
 
32
33
  const {
33
34
  height = 'md',
34
- languages = ['zh-cn', 'en'],
35
35
  logo = Logo,
36
36
  logoHref = '/',
37
37
  navItems = [],
@@ -200,7 +200,7 @@ const activeLink = LinkUtil.getActiveLink(
200
200
  }
201
201
 
202
202
  {showThemeSwitcher && <ThemeSwitcher />}
203
- {languages.length > 1 && <LanguageSwitcher languages={languages} />}
203
+ {i18n !== undefined && <LanguageSwitcher />}
204
204
 
205
205
  <slot name="navbar-end" />
206
206
  </div>
@@ -19,50 +19,59 @@
19
19
  * <LanguageSwitcher />
20
20
  * ```
21
21
  *
22
- * 自定义语言列表:
23
- * ```astro
24
- * <LanguageSwitcher
25
- * languages={['zh-cn', 'en']}
26
- * />
27
- * ```
28
22
  */
29
23
 
30
- import { ChevronDownIcon, LanguageUtil } from '../../index-astro';
24
+ import {
25
+ ChevronDownIcon,
26
+ LanguageUtil,
27
+ Link,
28
+ ListItem,
29
+ } from '../../index-astro';
31
30
  import '../../style.ts';
31
+ import { i18n } from 'astro:config/server';
32
32
 
33
33
  interface Props {
34
- languages: string[];
35
34
  /**
36
35
  * 自定义类名
37
36
  */
38
37
  class?: string;
39
38
  }
40
39
 
41
- const { languages = ['zh-cn', 'en'], class: className = '' } = Astro.props;
40
+ const { class: className = '' } = Astro.props;
41
+
42
+ let links: any[] = [];
43
+ let currentLocale: string | undefined = undefined;
44
+ let currentLanguageName: string | undefined = undefined;
42
45
 
43
- const currentLocale = Astro.currentLocale;
44
- const currentLanguageName = LanguageUtil.getLanguageName(currentLocale);
46
+ if (i18n !== undefined) {
47
+ const { getSwitcherLinks } = await import('./switcher_util.ts');
48
+ links = getSwitcherLinks(Astro);
49
+
50
+ currentLocale = Astro.currentLocale!;
51
+ currentLanguageName = LanguageUtil.getLanguageName(currentLocale);
52
+ } else {
53
+ throw new Error('can not use LanguageSwitcher when i18n is disabled');
54
+ }
45
55
  ---
46
56
 
47
- <!-- 语言切换按钮 -->
48
- <div class={`cosy:dropdown cosy:dropdown-end ${className}`}>
49
- <div tabindex="0" role="button" class:list={['cosy:btn cosy:btn-ghost']}>
50
- <span class="cosy:mr-1">{currentLanguageName}</span>
51
- <ChevronDownIcon size="16px" class="cosy:w-4 cosy:h-4" />
52
- </div>
53
- <ul
54
- tabindex="0"
55
- class="cosy:z-[1] cosy:bg-base-100 cosy:shadow cosy:p-2 cosy:rounded-box cosy:w-32 cosy:dropdown-content cosy:menu">
56
- {
57
- languages.map((lang) => (
58
- <li class={currentLocale === lang ? 'cosy:disabled' : ''}>
59
- <a
60
- href={LanguageUtil.getRelativeLink(lang, Astro)}
61
- class={currentLocale === lang ? 'cosy:active' : ''}>
62
- {LanguageUtil.getLanguageName(lang)}
63
- </a>
64
- </li>
65
- ))
66
- }
67
- </ul>
68
- </div>
57
+ {
58
+ i18n !== undefined && (
59
+ <div class={`cosy:dropdown cosy:dropdown-end ${className}`}>
60
+ <div tabindex="0" role="button" class:list={['cosy:btn cosy:btn-ghost']}>
61
+ <span class="cosy:mr-1">{currentLanguageName}</span>
62
+ <ChevronDownIcon size="16px" class="cosy:w-4 cosy:h-4" />
63
+ </div>
64
+ <ul
65
+ tabindex="0"
66
+ class="cosy:z-[1] cosy:bg-base-100 cosy:shadow cosy:p-2 cosy:rounded-box cosy:w-32 cosy:dropdown-content cosy:menu">
67
+ {links.map((link) => (
68
+ <ListItem>
69
+ <Link href={link.url} active={currentLocale === link.locale}>
70
+ {link.name}
71
+ </Link>
72
+ </ListItem>
73
+ ))}
74
+ </ul>
75
+ </div>
76
+ )
77
+ }
@@ -1,11 +1,3 @@
1
1
  import LanguageSwitcher from './LanguageSwitcher.astro';
2
- import LanguageSwitcherBasic from './LanguageSwitcherBasic.astro';
3
- import BasicSourceCode from './LanguageSwitcherBasic.astro?raw';
4
- import { extractSimpleExample } from '../../src/utils/component';
5
2
 
6
- export { LanguageSwitcher, LanguageSwitcherBasic };
7
-
8
- // 导出示例源代码
9
- export const LanguageSwitcherExampleCodes = {
10
- Basic: extractSimpleExample(BasicSourceCode, 'LanguageSwitcher'),
11
- };
3
+ export { LanguageSwitcher };
@@ -0,0 +1,40 @@
1
+ import { getRelativeLocaleUrl, getRelativeLocaleUrlList } from 'astro:i18n';
2
+ import type { AstroGlobal } from 'astro';
3
+ import { LanguageUtil } from '../../index-astro';
4
+
5
+ export interface SwitcherLink {
6
+ locale: string;
7
+ name: string;
8
+ url: string;
9
+ }
10
+
11
+ // 获取基础路径
12
+ const getBaseUrl = (): string => {
13
+ return import.meta.env.BASE_URL;
14
+ };
15
+
16
+ const getLocaleFromUrl = (url: string): string => {
17
+ return url.replace(getBaseUrl(), '').split('/')[0];
18
+ };
19
+
20
+ export function getSwitcherLinks(astro: AstroGlobal): SwitcherLink[] {
21
+ const currentLocale = astro.currentLocale;
22
+
23
+ if (currentLocale === undefined) {
24
+ throw new Error('can not get switcher links when i18n is disabled');
25
+ }
26
+
27
+ const currentLocalURLPrefix = getRelativeLocaleUrl(currentLocale, '');
28
+ const pathname = astro.url.pathname + '/';
29
+ const slug = pathname.replace(
30
+ currentLocalURLPrefix,
31
+ ''
32
+ );
33
+ const urls = getRelativeLocaleUrlList(slug);
34
+
35
+ return urls.map((url) => ({
36
+ locale: getLocaleFromUrl(url),
37
+ name: LanguageUtil.getLanguageName(getLocaleFromUrl(url)),
38
+ url: url
39
+ }));
40
+ }
@@ -100,6 +100,7 @@ interface Props extends HTMLAttributes<'a'> {
100
100
  | 'warning'
101
101
  | 'error';
102
102
  align?: 'left' | 'center' | 'right';
103
+ active?: boolean;
103
104
  }
104
105
 
105
106
  const {
@@ -121,6 +122,7 @@ const {
121
122
  fullWidth = false,
122
123
  color,
123
124
  align,
125
+ active = false,
124
126
  ...rest
125
127
  } = Astro.props;
126
128
 
@@ -159,7 +161,10 @@ const classes = [
159
161
  animation === 'hover-scale' &&
160
162
  'cosy:hover:scale-105 cosy:transition-transform',
161
163
 
162
- // 新增:按钮风格
164
+ // Active state
165
+ active && 'cosy:active',
166
+
167
+ // 按钮风格
163
168
  btn && 'cosy:btn',
164
169
  btn && size === 'sm' && 'cosy:btn-sm',
165
170
  btn && size === 'lg' && 'cosy:btn-lg',
@@ -1,10 +1,35 @@
1
1
  ---
2
2
  /**
3
3
  * @component ListItem
4
- * @description List item component with loading animations
5
- * @props loading?: boolean
6
- * @props duration?: number
7
- * @props animationType?: string
4
+ *
5
+ * @description
6
+ * ListItem 组件用于在列表中显示单个项目。它内置了多种加载动画效果,可以方便地通过 `loading` 属性来控制加载状态,并通过 `loadingAnimationType` 属性切换不同的加载Loading动画样式。
7
+ *
8
+ * @usage
9
+ * 基本用法:
10
+ * ```astro
11
+ * <ListItem>这是一个列表项</ListItem>
12
+ * ```
13
+ *
14
+ * 加载状态:
15
+ * ```astro
16
+ * <ListItem loading={true}>加载中的列表项</ListItem>
17
+ * ```
18
+ *
19
+ * 指定加载动画类型:
20
+ * ```astro
21
+ * <ListItem loading={true} loadingAnimationType="pulse">使用脉冲动画加载</ListItem>
22
+ * <ListItem loading={true} loadingAnimationType="icon-left">使用左侧图标动画加载</ListItem>
23
+ * ```
24
+ *
25
+ * @props
26
+ * @prop {string} [class] - 自定义 CSS 类名。
27
+ * @prop {boolean} [loading=false] - 控制是否显示加载动画。
28
+ * @prop {number} [duration] - 动画的持续时间(单位:毫秒)。
29
+ * @prop {('none'|'ring'|'icon-left'|'icon-right'|'breath'|'pulse'|'glow')} [loadingAnimationType='none'] - 加载动画的类型。
30
+ *
31
+ * @slots
32
+ * @slot default - 列表项的内容。
8
33
  */
9
34
  import '../../style.ts';
10
35
  import ListItemRing from './ListItemRing.astro';
@@ -14,16 +39,38 @@ import ListItemBreath from './ListItemBreath.astro';
14
39
  import ListItemPulse from './ListItemPulse.astro';
15
40
  import ListItemGlow from './ListItemGlow.astro';
16
41
 
42
+ interface Props {
43
+ class?: string;
44
+ loading?: boolean;
45
+ duration?: number;
46
+ loadingAnimationType?:
47
+ | 'none'
48
+ | 'ring'
49
+ | 'icon-left'
50
+ | 'icon-right'
51
+ | 'breath'
52
+ | 'pulse'
53
+ | 'glow';
54
+ }
55
+
17
56
  const {
18
57
  loading = false,
19
58
  duration,
20
- animationType = 'ring',
59
+ loadingAnimationType = 'none',
21
60
  ...restProps
22
61
  } = Astro.props;
23
62
  ---
24
63
 
25
64
  {
26
- animationType === 'ring' && (
65
+ loadingAnimationType === 'none' && (
66
+ <li {...restProps}>
67
+ <slot />
68
+ </li>
69
+ )
70
+ }
71
+
72
+ {
73
+ loadingAnimationType === 'ring' && (
27
74
  <ListItemRing loading={loading} duration={duration} {...restProps}>
28
75
  <slot />
29
76
  </ListItemRing>
@@ -31,7 +78,7 @@ const {
31
78
  }
32
79
 
33
80
  {
34
- animationType === 'icon-left' && (
81
+ loadingAnimationType === 'icon-left' && (
35
82
  <ListItemIconLeft loading={loading} duration={duration} {...restProps}>
36
83
  <slot />
37
84
  </ListItemIconLeft>
@@ -39,7 +86,7 @@ const {
39
86
  }
40
87
 
41
88
  {
42
- animationType === 'icon-right' && (
89
+ loadingAnimationType === 'icon-right' && (
43
90
  <ListItemIconRight loading={loading} duration={duration} {...restProps}>
44
91
  <slot />
45
92
  </ListItemIconRight>
@@ -47,7 +94,7 @@ const {
47
94
  }
48
95
 
49
96
  {
50
- animationType === 'breath' && (
97
+ loadingAnimationType === 'breath' && (
51
98
  <ListItemBreath loading={loading} duration={duration} {...restProps}>
52
99
  <slot />
53
100
  </ListItemBreath>
@@ -55,7 +102,7 @@ const {
55
102
  }
56
103
 
57
104
  {
58
- animationType === 'pulse' && (
105
+ loadingAnimationType === 'pulse' && (
59
106
  <ListItemPulse loading={loading} duration={duration} {...restProps}>
60
107
  <slot />
61
108
  </ListItemPulse>
@@ -63,7 +110,7 @@ const {
63
110
  }
64
111
 
65
112
  {
66
- animationType === 'glow' && (
113
+ loadingAnimationType === 'glow' && (
67
114
  <ListItemGlow loading={loading} duration={duration} {...restProps}>
68
115
  <slot />
69
116
  </ListItemGlow>
@@ -1,87 +1,82 @@
1
1
  import type { INavItem } from './nav';
2
2
 
3
3
  export interface IHeaderProps {
4
- /**
5
- * 侧边栏是否默认展开
6
- * @default false
7
- */
8
- defaultSidebarOpen?: boolean;
4
+ /**
5
+ * 侧边栏是否默认展开
6
+ * @default false
7
+ */
8
+ defaultSidebarOpen?: boolean;
9
9
 
10
- /**
11
- * 导航栏高度
12
- * @default "md"
13
- */
14
- height?: '3xs' | '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
10
+ /**
11
+ * 导航栏高度
12
+ * @default "md"
13
+ */
14
+ height?: '3xs' | '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
15
15
 
16
- /**
17
- * 语言选项列表
18
- */
19
- languages?: string[];
16
+ /**
17
+ * Logo图片元数据
18
+ */
19
+ logo?: ImageMetadata;
20
20
 
21
- /**
22
- * Logo图片元数据
23
- */
24
- logo?: ImageMetadata;
21
+ /**
22
+ * Logo 链接地址
23
+ * @default "/"
24
+ */
25
+ logoHref?: string;
25
26
 
26
- /**
27
- * Logo 链接地址
28
- * @default "/"
29
- */
30
- logoHref?: string;
27
+ /**
28
+ * 导航菜单项
29
+ */
30
+ navItems?: INavItem[];
31
31
 
32
- /**
33
- * 导航菜单项
34
- */
35
- navItems?: INavItem[];
32
+ /**
33
+ * 导航栏位置
34
+ * @default "start"
35
+ */
36
+ navPosition?: 'start' | 'center' | 'end';
36
37
 
37
- /**
38
- * 导航栏位置
39
- * @default "start"
40
- */
41
- navPosition?: 'start' | 'center' | 'end';
38
+ /**
39
+ * 水平内边距
40
+ * @default "md"
41
+ */
42
+ paddingHorizontal?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
42
43
 
43
- /**
44
- * 水平内边距
45
- * @default "md"
46
- */
47
- paddingHorizontal?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
44
+ /**
45
+ * 垂直内边距
46
+ * @default "md"
47
+ */
48
+ paddingVertical?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
48
49
 
49
- /**
50
- * 垂直内边距
51
- * @default "md"
52
- */
53
- paddingVertical?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
50
+ /**
51
+ * 圆角大小
52
+ * @default "md"
53
+ */
54
+ rounded?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
54
55
 
55
- /**
56
- * 圆角大小
57
- * @default "md"
58
- */
59
- rounded?: 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
56
+ /**
57
+ * 是否显示侧边栏切换按钮
58
+ * @default false
59
+ */
60
+ showSidebarToggle?: boolean;
60
61
 
61
- /**
62
- * 是否显示侧边栏切换按钮
63
- * @default false
64
- */
65
- showSidebarToggle?: boolean;
62
+ /**
63
+ * 是否显示主题切换按钮
64
+ * @default false
65
+ */
66
+ showThemeSwitcher?: boolean;
66
67
 
67
- /**
68
- * 是否显示主题切换按钮
69
- * @default false
70
- */
71
- showThemeSwitcher?: boolean;
68
+ /**
69
+ * 社交媒体链接列表
70
+ */
71
+ socialLinks?: Array<{
72
+ name: string;
73
+ url: string;
74
+ icon: any;
75
+ }>;
72
76
 
73
- /**
74
- * 社交媒体链接列表
75
- */
76
- socialLinks?: Array<{
77
- name: string;
78
- url: string;
79
- icon: any;
80
- }>;
81
-
82
- /**
83
- * 是否固定在顶部
84
- * @default true
85
- */
86
- sticky?: boolean;
77
+ /**
78
+ * 是否固定在顶部
79
+ * @default true
80
+ */
81
+ sticky?: boolean;
87
82
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coffic/cosy-ui",
3
- "version": "0.8.29",
3
+ "version": "0.9.1",
4
4
  "description": "An astro component library",
5
5
  "author": {
6
6
  "name": "nookery",
@@ -1,7 +0,0 @@
1
- ---
2
- import LanguageSwitcher from './LanguageSwitcher.astro';
3
- ---
4
-
5
- <div class="cosy:flex cosy:justify-center">
6
- <LanguageSwitcher languages={['zh-cn', 'en']} />
7
- </div>