@applemusic-like-lyrics/react-full 0.2.0-alpha.1 → 0.2.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.
- package/README.md +4 -2
- package/dist/amll-react-framework.css +1023 -0
- package/dist/amll-react-framework.js +13730 -6817
- package/dist/amll-react-framework.js.map +1 -1
- package/dist/components/AudioFFTVisualizer/index.d.ts +1 -0
- package/dist/components/AudioFFTVisualizer/index.d.ts.map +1 -0
- package/dist/components/AudioQualityTag/index.d.ts +7 -5
- package/dist/components/AudioQualityTag/index.d.ts.map +1 -0
- package/dist/components/BouncingSlider/index.d.ts +13 -8
- package/dist/components/BouncingSlider/index.d.ts.map +1 -0
- package/dist/components/ControlThumb/index.d.ts +2 -1
- package/dist/components/ControlThumb/index.d.ts.map +1 -0
- package/dist/components/Cover/index.d.ts +2 -1
- package/dist/components/Cover/index.d.ts.map +1 -0
- package/dist/components/MediaButton/index.d.ts +3 -2
- package/dist/components/MediaButton/index.d.ts.map +1 -0
- package/dist/components/MenuButton/index.d.ts +1 -0
- package/dist/components/MenuButton/index.d.ts.map +1 -0
- package/dist/components/MusicInfo/index.d.ts +1 -0
- package/dist/components/MusicInfo/index.d.ts.map +1 -0
- package/dist/components/PrebuiltLyricPlayer/index.d.ts +5 -2
- package/dist/components/PrebuiltLyricPlayer/index.d.ts.map +1 -0
- package/dist/components/TextMarquee/index.d.ts +1 -0
- package/dist/components/TextMarquee/index.d.ts.map +1 -0
- package/dist/components/ToggleIconButton/index.d.ts +1 -0
- package/dist/components/ToggleIconButton/index.d.ts.map +1 -0
- package/dist/components/ToggleIconButton/prebuilt-enum.d.ts +1 -0
- package/dist/components/ToggleIconButton/prebuilt-enum.d.ts.map +1 -0
- package/dist/components/VolumeControlSlider/index.d.ts +4 -2
- package/dist/components/VolumeControlSlider/index.d.ts.map +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/hook/useThrottle.d.ts +11 -0
- package/dist/hook/useThrottle.d.ts.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/layout/auto.d.ts +4 -1
- package/dist/layout/auto.d.ts.map +1 -0
- package/dist/layout/horizontal.d.ts +2 -1
- package/dist/layout/horizontal.d.ts.map +1 -0
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/vertical.d.ts +3 -1
- package/dist/layout/vertical.d.ts.map +1 -0
- package/dist/states/callbacks.d.ts +93 -0
- package/dist/states/callbacks.d.ts.map +1 -0
- package/dist/states/configAtoms.d.ts +174 -0
- package/dist/states/configAtoms.d.ts.map +1 -0
- package/dist/states/controlsAtoms.d.ts +24 -0
- package/dist/states/controlsAtoms.d.ts.map +1 -0
- package/dist/states/{music.d.ts → dataAtoms.d.ts} +71 -32
- package/dist/states/dataAtoms.d.ts.map +1 -0
- package/dist/utils/duration.d.ts +1 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -0
- package/package.json +49 -37
- package/dist/amll-react-framework.cjs +0 -64
- package/dist/amll-react-framework.cjs.map +0 -1
- package/dist/states/callback.d.ts +0 -80
- package/dist/states/config.d.ts +0 -130
- package/dist/states/index.d.ts +0 -3
- package/dist/utils/spring.d.ts +0 -25
|
@@ -1,34 +1,68 @@
|
|
|
1
1
|
import { LyricLine } from '@applemusic-like-lyrics/core';
|
|
2
|
+
export type SongData = {
|
|
3
|
+
type: "local";
|
|
4
|
+
filePath: string;
|
|
5
|
+
origOrder: number;
|
|
6
|
+
} | {
|
|
7
|
+
type: "custom";
|
|
8
|
+
id: string;
|
|
9
|
+
songJsonData: string;
|
|
10
|
+
origOrder: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* 艺术家信息的标准结构
|
|
14
|
+
*/
|
|
2
15
|
export interface ArtistStateEntry {
|
|
3
16
|
name: string;
|
|
4
17
|
id: string;
|
|
5
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* 音频质量的类型枚举
|
|
21
|
+
*/
|
|
6
22
|
export declare enum AudioQualityType {
|
|
7
23
|
None = "none",
|
|
24
|
+
Standard = "standard",
|
|
8
25
|
Lossless = "lossless",
|
|
9
|
-
|
|
26
|
+
HiResLossless = "hi-res-lossless",
|
|
10
27
|
DolbyAtmos = "dolby-atmos"
|
|
11
28
|
}
|
|
12
29
|
/**
|
|
13
|
-
*
|
|
30
|
+
* 描述音频质量完整信息的接口
|
|
31
|
+
*/
|
|
32
|
+
export interface MusicQualityState {
|
|
33
|
+
type: AudioQualityType;
|
|
34
|
+
codec: string;
|
|
35
|
+
channels: number;
|
|
36
|
+
sampleRate: number;
|
|
37
|
+
sampleFormat: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 当前播放歌曲的唯一标识符
|
|
41
|
+
*/
|
|
42
|
+
export declare const musicIdAtom: import('jotai').PrimitiveAtom<string> & {
|
|
43
|
+
init: string;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* 当前播放的音乐名称
|
|
14
47
|
*/
|
|
15
48
|
export declare const musicNameAtom: import('jotai').PrimitiveAtom<string> & {
|
|
16
49
|
init: string;
|
|
17
50
|
};
|
|
18
51
|
/**
|
|
19
|
-
*
|
|
52
|
+
* 当前播放的音乐创作者列表
|
|
20
53
|
*/
|
|
21
54
|
export declare const musicArtistsAtom: import('jotai').PrimitiveAtom<ArtistStateEntry[]> & {
|
|
22
55
|
init: ArtistStateEntry[];
|
|
23
56
|
};
|
|
24
57
|
/**
|
|
25
|
-
*
|
|
58
|
+
* 当前播放的音乐所属专辑名称
|
|
26
59
|
*/
|
|
27
60
|
export declare const musicAlbumNameAtom: import('jotai').PrimitiveAtom<string> & {
|
|
28
61
|
init: string;
|
|
29
62
|
};
|
|
30
63
|
/**
|
|
31
|
-
* 当前播放的音乐专辑封面 URL
|
|
64
|
+
* 当前播放的音乐专辑封面 URL
|
|
65
|
+
* 除了图片也可以是视频资源
|
|
32
66
|
*/
|
|
33
67
|
export declare const musicCoverAtom: import('jotai').PrimitiveAtom<string> & {
|
|
34
68
|
init: string;
|
|
@@ -40,23 +74,17 @@ export declare const musicCoverIsVideoAtom: import('jotai').PrimitiveAtom<boolea
|
|
|
40
74
|
init: boolean;
|
|
41
75
|
};
|
|
42
76
|
/**
|
|
43
|
-
*
|
|
77
|
+
* 当前音乐的总时长,单位为毫秒
|
|
44
78
|
*/
|
|
45
79
|
export declare const musicDurationAtom: import('jotai').PrimitiveAtom<number> & {
|
|
46
80
|
init: number;
|
|
47
81
|
};
|
|
48
82
|
/**
|
|
49
|
-
*
|
|
83
|
+
* 当前音乐是否正在播放
|
|
50
84
|
*/
|
|
51
85
|
export declare const musicPlayingAtom: import('jotai').PrimitiveAtom<boolean> & {
|
|
52
86
|
init: boolean;
|
|
53
87
|
};
|
|
54
|
-
/**
|
|
55
|
-
* 当前音乐的音质水平,如有提供则会显示在进度条下
|
|
56
|
-
*/
|
|
57
|
-
export declare const musicQualityAtom: import('jotai').PrimitiveAtom<AudioQualityType> & {
|
|
58
|
-
init: AudioQualityType;
|
|
59
|
-
};
|
|
60
88
|
/**
|
|
61
89
|
* 当前音乐的播放进度,单位为毫秒
|
|
62
90
|
*/
|
|
@@ -65,41 +93,52 @@ export declare const musicPlayingPositionAtom: import('jotai').PrimitiveAtom<num
|
|
|
65
93
|
};
|
|
66
94
|
/**
|
|
67
95
|
* 当前播放的音乐音量大小,范围在 [0.0-1.0] 之间
|
|
68
|
-
*
|
|
69
|
-
* 本状态将会保存在 localStorage 中
|
|
70
96
|
*/
|
|
71
97
|
export declare const musicVolumeAtom: import('jotai').WritableAtom<number, [number | typeof import('jotai/utils').RESET | ((prev: number) => number | typeof import('jotai/utils').RESET)], void>;
|
|
72
98
|
/**
|
|
73
|
-
*
|
|
99
|
+
* 当前播放的音乐的歌词行数据
|
|
74
100
|
*/
|
|
75
101
|
export declare const musicLyricLinesAtom: import('jotai').PrimitiveAtom<LyricLine[]> & {
|
|
76
102
|
init: LyricLine[];
|
|
77
103
|
};
|
|
78
104
|
/**
|
|
79
|
-
*
|
|
105
|
+
* 当前音乐的音质信息对象
|
|
80
106
|
*/
|
|
81
|
-
export declare const
|
|
107
|
+
export declare const musicQualityAtom: import('jotai').PrimitiveAtom<MusicQualityState> & {
|
|
108
|
+
init: MusicQualityState;
|
|
109
|
+
};
|
|
82
110
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
111
|
+
* 根据音质信息生成的、用于UI展示的标签内容
|
|
112
|
+
* 如果为 null,则不显示标签
|
|
113
|
+
*/
|
|
114
|
+
export declare const musicQualityTagAtom: import('jotai').PrimitiveAtom<{
|
|
115
|
+
tagIcon: boolean;
|
|
116
|
+
tagText: string;
|
|
117
|
+
isDolbyAtmos: boolean;
|
|
118
|
+
} | null> & {
|
|
119
|
+
init: {
|
|
120
|
+
tagIcon: boolean;
|
|
121
|
+
tagText: string;
|
|
122
|
+
isDolbyAtmos: boolean;
|
|
123
|
+
} | null;
|
|
124
|
+
};
|
|
125
|
+
export declare const currentPlaylistAtom: import('jotai').PrimitiveAtom<SongData[]> & {
|
|
126
|
+
init: SongData[];
|
|
127
|
+
};
|
|
128
|
+
export declare const currentPlaylistMusicIndexAtom: import('jotai').PrimitiveAtom<number> & {
|
|
129
|
+
init: number;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* 用于音频可视化频谱图的实时频域数据
|
|
85
133
|
*/
|
|
86
134
|
export declare const fftDataAtom: import('jotai').PrimitiveAtom<number[]> & {
|
|
87
135
|
init: number[];
|
|
88
136
|
};
|
|
89
137
|
/**
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* 如果无法获取到类似的数据,请传入 undefined 或 1.0 作为默认值,或不做任何处理(默认值即 1.0)
|
|
93
|
-
*
|
|
94
|
-
* 如需呈现音频可视化频谱图,请设置 fftDataAtom 的值
|
|
138
|
+
* 代表低频部分的音量大小,用于背景脉动等效果
|
|
139
|
+
* 取值范围建议在 [0.0-1.0] 之间
|
|
95
140
|
*/
|
|
96
141
|
export declare const lowFreqVolumeAtom: import('jotai').PrimitiveAtom<number> & {
|
|
97
142
|
init: number;
|
|
98
143
|
};
|
|
99
|
-
|
|
100
|
-
* 当前是否正在展示 AMLL 播放页面,设置为 true 时将会让背景和歌词实时展示动画效果
|
|
101
|
-
* 推荐在页面被隐藏的时候将其设置为 false,这样会减少其对性能的影响(例如暂停背景渲染和歌词行变换等)
|
|
102
|
-
*/
|
|
103
|
-
export declare const isLyricPageOpenedAtom: import('jotai').PrimitiveAtom<boolean> & {
|
|
104
|
-
init: boolean;
|
|
105
|
-
};
|
|
144
|
+
//# sourceMappingURL=dataAtoms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataAtoms.d.ts","sourceRoot":"","sources":["../../src/states/dataAtoms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAI9D,MAAM,MAAM,QAAQ,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACX;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC3B,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,aAAa,oBAAoB;IACjC,UAAU,gBAAgB;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACrB;AAMD;;GAEG;AACH,eAAO,MAAM,WAAW;;CAAW,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,aAAa;;CAAe,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,gBAAgB;;CAE3B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;CAAe,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,cAAc;;CAAW,CAAC;AAEvC;;GAEG;AACH,eAAO,MAAM,qBAAqB;;CAAc,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,iBAAiB;;CAAU,CAAC;AAEzC;;GAEG;AACH,eAAO,MAAM,gBAAgB;;CAAc,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,wBAAwB;;CAAU,CAAC;AAEhD;;GAEG;AACH,eAAO,MAAM,eAAe,6JAK3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB;;CAAwB,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,gBAAgB;;CAM3B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB;aACtB,OAAO;aACP,MAAM;kBACD,OAAO;;;iBAFZ,OAAO;iBACP,MAAM;sBACD,OAAO;;CACP,CAAC;AAEhB,eAAO,MAAM,mBAAmB;;CAAuB,CAAC;AAExD,eAAO,MAAM,6BAA6B;;CAAU,CAAC;AAMrD;;GAEG;AACH,eAAO,MAAM,WAAW;;CAAqB,CAAC;AAE9C;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;CAAkB,CAAC"}
|
package/dist/utils/duration.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duration.d.ts","sourceRoot":"","sources":["../../src/utils/duration.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,UAS1C"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './duration';
|
|
2
|
-
|
|
2
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applemusic-like-lyrics/react-full",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "AMLL 组件库的 React 绑定,但是更加完备且高度灵活",
|
|
5
5
|
"repository": {
|
|
6
|
-
"url": "https://github.com/
|
|
6
|
+
"url": "https://github.com/amll-dev/applemusic-like-lyrics.git",
|
|
7
7
|
"directory": "packages/react-full",
|
|
8
8
|
"type": "git"
|
|
9
9
|
},
|
|
10
|
-
"type": "module",
|
|
11
10
|
"license": "GPL-3.0",
|
|
11
|
+
"nx": {
|
|
12
|
+
"tags": [
|
|
13
|
+
"library"
|
|
14
|
+
],
|
|
15
|
+
"targets": {
|
|
16
|
+
"nx-release-publish": {
|
|
17
|
+
"executor": "@nx/js:release-publish",
|
|
18
|
+
"dependsOn": []
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"type": "module",
|
|
12
23
|
"main": "dist/amll-react-framework.cjs",
|
|
13
24
|
"module": "./dist/amll-react-framework.js",
|
|
14
25
|
"typings": "./dist/index.d.ts",
|
|
26
|
+
"style": "./dist/amll-react-framework.css",
|
|
15
27
|
"exports": {
|
|
16
28
|
".": {
|
|
17
29
|
"import": "./dist/amll-react-framework.js",
|
|
@@ -19,53 +31,53 @@
|
|
|
19
31
|
"types": "./dist/index.d.ts"
|
|
20
32
|
},
|
|
21
33
|
"./style.css": {
|
|
22
|
-
"import": "./dist/
|
|
23
|
-
"require": "./dist/
|
|
34
|
+
"import": "./dist/amll-react-framework.css",
|
|
35
|
+
"require": "./dist/amll-react-framework.css"
|
|
24
36
|
}
|
|
25
37
|
},
|
|
38
|
+
"sideEffects": [
|
|
39
|
+
"*.css"
|
|
40
|
+
],
|
|
26
41
|
"files": [
|
|
27
42
|
"dist/**/*.js",
|
|
28
43
|
"dist/**/*.ts",
|
|
29
44
|
"dist/**/*.cjs",
|
|
45
|
+
"dist/**/*.css",
|
|
30
46
|
"dist/**/*.map"
|
|
31
47
|
],
|
|
32
|
-
"devDependencies": {
|
|
33
|
-
"@biomejs/biome": "^1.8.3",
|
|
34
|
-
"@pixi/app": "^7.2.4",
|
|
35
|
-
"@pixi/core": "^7.2.4",
|
|
36
|
-
"@pixi/display": "^7.2.4",
|
|
37
|
-
"@pixi/filter-blur": "^7.2.4",
|
|
38
|
-
"@pixi/filter-color-matrix": "^7.2.4",
|
|
39
|
-
"@pixi/sprite": "^7.2.4",
|
|
40
|
-
"@radix-ui/themes": "^3.1.3",
|
|
41
|
-
"@types/react": "^18.3.5",
|
|
42
|
-
"@types/react-dom": "^18.2.7",
|
|
43
|
-
"@types/ungap__structured-clone": "^1.2.0",
|
|
44
|
-
"@vitejs/plugin-react": "^4.3.1",
|
|
45
|
-
"jotai": "^2.9.3",
|
|
46
|
-
"react": "^18.2.0",
|
|
47
|
-
"react-dom": "^18.2.0",
|
|
48
|
-
"typedoc": "^0.26.5",
|
|
49
|
-
"typedoc-plugin-markdown": "^4.2.3",
|
|
50
|
-
"typescript": "^5.5.4",
|
|
51
|
-
"vite": "^5.4.0",
|
|
52
|
-
"vite-plugin-dts": "^4.0.3",
|
|
53
|
-
"vite-plugin-svgr": "^4.2.0",
|
|
54
|
-
"vite-plugin-wasm": "^3.3.0",
|
|
55
|
-
"@applemusic-like-lyrics/lyric": "^0.2.4"
|
|
56
|
-
},
|
|
57
48
|
"dependencies": {
|
|
58
|
-
"@ungap/structured-clone": "^1.
|
|
49
|
+
"@ungap/structured-clone": "^1.3.0",
|
|
59
50
|
"classnames": "^2.5.1",
|
|
60
51
|
"corner-smoothing": "^0.1.5",
|
|
61
|
-
"framer-motion": "^
|
|
62
|
-
"
|
|
63
|
-
"@applemusic-like-lyrics/
|
|
52
|
+
"framer-motion": "^12.38.0",
|
|
53
|
+
"react-toastify": "^11.0.5",
|
|
54
|
+
"@applemusic-like-lyrics/core": "^0.3.1",
|
|
55
|
+
"@applemusic-like-lyrics/react": "^0.3.1"
|
|
64
56
|
},
|
|
65
57
|
"peerDependencies": {
|
|
66
|
-
"jotai": "
|
|
67
|
-
"react": "
|
|
68
|
-
"react-dom": "
|
|
58
|
+
"jotai": "^2",
|
|
59
|
+
"react": "^19",
|
|
60
|
+
"react-dom": "^19"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@biomejs/biome": "^2.4.8",
|
|
64
|
+
"@radix-ui/themes": "^3.3.0",
|
|
65
|
+
"@types/react": "^19.2.14",
|
|
66
|
+
"@types/react-dom": "^19.2.3",
|
|
67
|
+
"@types/ungap__structured-clone": "^1.2.0",
|
|
68
|
+
"@vitejs/plugin-react": "^6.0.1",
|
|
69
|
+
"babel-plugin-react-compiler": "^1.0.0",
|
|
70
|
+
"react-compiler-runtime": "^1.0.0",
|
|
71
|
+
"typedoc": "^0.28.17",
|
|
72
|
+
"typedoc-plugin-markdown": "^4.11.0",
|
|
73
|
+
"typescript": "^5.9.3",
|
|
74
|
+
"jotai-babel": "^0.1.0",
|
|
75
|
+
"vite": "^8.0.1",
|
|
76
|
+
"vite-plugin-dts": "^4.5.4",
|
|
77
|
+
"vite-plugin-svgr": "^4.5.0",
|
|
78
|
+
"vite-plugin-wasm": "^3.6.0",
|
|
79
|
+
"vite-plugin-babel": "^1.6.0",
|
|
80
|
+
"@applemusic-like-lyrics/lyric": "^0.4.1"
|
|
69
81
|
},
|
|
70
82
|
"scripts": {
|
|
71
83
|
"build:docs": "typedoc --plugin typedoc-plugin-markdown --out docs src/index.ts",
|