aha-components 1.7.11 → 1.8.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 +10 -0
- package/dist/Avatar.esm.js +2 -0
- package/dist/Avatar.esm.js.map +1 -0
- package/dist/Avatar.js +2 -0
- package/dist/Avatar.js.map +1 -0
- package/dist/Badge.esm.js +2 -0
- package/dist/Badge.esm.js.map +1 -0
- package/dist/Badge.js +2 -0
- package/dist/Badge.js.map +1 -0
- package/dist/Checkbox.esm.js +1 -1
- package/dist/Checkbox.esm.js.map +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/Checkbox.js.map +1 -1
- package/dist/Radio.esm.js +1 -1
- package/dist/Radio.esm.js.map +1 -1
- package/dist/Radio.js +1 -1
- package/dist/Radio.js.map +1 -1
- package/dist/Table.esm.js +1 -1
- package/dist/Table.esm.js.map +1 -1
- package/dist/Table.js +1 -1
- package/dist/Table.js.map +1 -1
- package/dist/Tag.esm.js +1 -1
- package/dist/Tag.esm.js.map +1 -1
- package/dist/Tag.js +1 -1
- package/dist/Tag.js.map +1 -1
- package/dist/Textarea.esm.js +1 -1
- package/dist/Textarea.esm.js.map +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/Textarea.js.map +1 -1
- package/dist/components/Avatar/Avatar.stories.d.ts +12 -0
- package/dist/components/Avatar/index.d.ts +42 -0
- package/dist/components/Badge/Badge.stories.d.ts +15 -0
- package/dist/components/Badge/index.d.ts +71 -0
- package/dist/components/Checkbox/Checkbox.stories.d.ts +5 -4
- package/dist/components/Checkbox/index.d.ts +6 -0
- package/dist/components/Radio/Radio.stories.d.ts +6 -4
- package/dist/components/Radio/index.d.ts +6 -0
- package/dist/components/Tag/Tag.stories.d.ts +5 -8
- package/dist/components/Tag/index.d.ts +24 -2
- package/dist/components/Textarea/Textarea.stories.d.ts +2 -0
- package/dist/components/Textarea/Textarea.test.d.ts +1 -0
- package/dist/components/Textarea/index.d.ts +12 -0
- package/dist/design-tokens/theme.css +26 -0
- package/dist/design-tokens/theme.tailwind4.css +26 -0
- package/dist/index.css +3848 -0
- package/dist/index.d.ts +153 -4
- package/dist/index.esm.css +3848 -0
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/theme.css +26 -0
- package/dist/tokens.d.ts +28 -0
- package/package.json +1 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React, { type FC } from 'react';
|
|
2
|
+
export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
3
|
+
export interface AvatarProps {
|
|
4
|
+
size?: AvatarSize;
|
|
5
|
+
src?: string | null;
|
|
6
|
+
alt?: string;
|
|
7
|
+
/** Two-letter initials displayed when no image is provided */
|
|
8
|
+
initials?: string;
|
|
9
|
+
/** Custom icon component displayed as placeholder */
|
|
10
|
+
placeholderIcon?: FC<{
|
|
11
|
+
style?: React.CSSProperties;
|
|
12
|
+
}>;
|
|
13
|
+
/** Online/offline status indicator dot */
|
|
14
|
+
status?: 'online' | 'offline';
|
|
15
|
+
/** Company logo badge displayed bottom-right */
|
|
16
|
+
companyIcon?: {
|
|
17
|
+
src: string;
|
|
18
|
+
alt?: string;
|
|
19
|
+
};
|
|
20
|
+
/** Blue verified checkmark badge */
|
|
21
|
+
verified?: boolean;
|
|
22
|
+
style?: React.CSSProperties;
|
|
23
|
+
className?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface AvatarLabelGroupProps {
|
|
26
|
+
size?: 'sm' | 'md' | 'lg' | 'xl';
|
|
27
|
+
name: string;
|
|
28
|
+
supportingText?: string;
|
|
29
|
+
avatarSrc?: string | null;
|
|
30
|
+
avatarInitials?: string;
|
|
31
|
+
status?: 'online' | 'offline';
|
|
32
|
+
companyIcon?: {
|
|
33
|
+
src: string;
|
|
34
|
+
alt?: string;
|
|
35
|
+
};
|
|
36
|
+
verified?: boolean;
|
|
37
|
+
style?: React.CSSProperties;
|
|
38
|
+
className?: string;
|
|
39
|
+
}
|
|
40
|
+
declare const Avatar: React.FC<AvatarProps>;
|
|
41
|
+
export declare const AvatarLabelGroup: React.FC<AvatarLabelGroupProps>;
|
|
42
|
+
export default Avatar;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { Badge } from './index';
|
|
3
|
+
declare const meta: Meta<typeof Badge>;
|
|
4
|
+
export default meta;
|
|
5
|
+
export declare const AllColors: StoryObj;
|
|
6
|
+
export declare const AllSizes: StoryObj;
|
|
7
|
+
export declare const WithDot: StoryObj;
|
|
8
|
+
export declare const WithIcon: StoryObj;
|
|
9
|
+
export declare const WithButton: StoryObj;
|
|
10
|
+
export declare const PillIconOnly: StoryObj;
|
|
11
|
+
export declare const BadgeColorIconOnly: StoryObj;
|
|
12
|
+
export declare const ModernIconOnly: StoryObj;
|
|
13
|
+
export declare const WithAvatar: StoryObj;
|
|
14
|
+
export declare const ModernWithButton: StoryObj;
|
|
15
|
+
export declare const Modern: StoryObj;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { MouseEventHandler, ReactNode } from 'react';
|
|
3
|
+
export type BadgeColor = 'gray' | 'brand' | 'error' | 'warning' | 'success' | 'grayBlue' | 'blueLight' | 'blue' | 'indigo' | 'purple' | 'pink' | 'orange';
|
|
4
|
+
export type BadgeVariant = 'pill' | 'badge' | 'modern';
|
|
5
|
+
export type BadgeSize = 'sm' | 'md' | 'lg';
|
|
6
|
+
export type BadgeIconComponent = React.FC<{
|
|
7
|
+
style?: React.CSSProperties;
|
|
8
|
+
className?: string;
|
|
9
|
+
}>;
|
|
10
|
+
export interface BadgeProps {
|
|
11
|
+
variant?: BadgeVariant;
|
|
12
|
+
size?: BadgeSize;
|
|
13
|
+
color?: BadgeColor;
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
style?: React.CSSProperties;
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare const Badge: React.FC<BadgeProps>;
|
|
19
|
+
export interface BadgeWithDotProps {
|
|
20
|
+
variant?: BadgeVariant;
|
|
21
|
+
size?: BadgeSize;
|
|
22
|
+
color?: BadgeColor;
|
|
23
|
+
children: ReactNode;
|
|
24
|
+
style?: React.CSSProperties;
|
|
25
|
+
className?: string;
|
|
26
|
+
}
|
|
27
|
+
export declare const BadgeWithDot: React.FC<BadgeWithDotProps>;
|
|
28
|
+
export interface BadgeWithIconProps {
|
|
29
|
+
variant?: BadgeVariant;
|
|
30
|
+
size?: BadgeSize;
|
|
31
|
+
color?: BadgeColor;
|
|
32
|
+
iconLeading?: BadgeIconComponent;
|
|
33
|
+
iconTrailing?: BadgeIconComponent;
|
|
34
|
+
children: ReactNode;
|
|
35
|
+
style?: React.CSSProperties;
|
|
36
|
+
className?: string;
|
|
37
|
+
}
|
|
38
|
+
export declare const BadgeWithIcon: React.FC<BadgeWithIconProps>;
|
|
39
|
+
export interface BadgeWithButtonProps {
|
|
40
|
+
variant?: BadgeVariant;
|
|
41
|
+
size?: BadgeSize;
|
|
42
|
+
color?: BadgeColor;
|
|
43
|
+
icon?: BadgeIconComponent;
|
|
44
|
+
children: ReactNode;
|
|
45
|
+
buttonLabel?: string;
|
|
46
|
+
onButtonClick?: MouseEventHandler<HTMLButtonElement>;
|
|
47
|
+
style?: React.CSSProperties;
|
|
48
|
+
className?: string;
|
|
49
|
+
}
|
|
50
|
+
export declare const BadgeWithButton: React.FC<BadgeWithButtonProps>;
|
|
51
|
+
export interface BadgeIconProps {
|
|
52
|
+
variant?: BadgeVariant;
|
|
53
|
+
size?: BadgeSize;
|
|
54
|
+
color?: BadgeColor;
|
|
55
|
+
icon: BadgeIconComponent;
|
|
56
|
+
style?: React.CSSProperties;
|
|
57
|
+
className?: string;
|
|
58
|
+
}
|
|
59
|
+
export declare const BadgeIcon: React.FC<BadgeIconProps>;
|
|
60
|
+
export interface BadgeWithImageProps {
|
|
61
|
+
variant?: Exclude<BadgeVariant, 'modern'>;
|
|
62
|
+
size?: BadgeSize;
|
|
63
|
+
color?: BadgeColor;
|
|
64
|
+
imgSrc: string;
|
|
65
|
+
imgAlt?: string;
|
|
66
|
+
children: ReactNode;
|
|
67
|
+
style?: React.CSSProperties;
|
|
68
|
+
className?: string;
|
|
69
|
+
}
|
|
70
|
+
export declare const BadgeWithImage: React.FC<BadgeWithImageProps>;
|
|
71
|
+
export default Badge;
|
|
@@ -3,10 +3,11 @@ import Checkbox from './index';
|
|
|
3
3
|
declare const meta: Meta<typeof Checkbox>;
|
|
4
4
|
export default meta;
|
|
5
5
|
type Story = StoryObj<typeof Checkbox>;
|
|
6
|
-
export declare const
|
|
6
|
+
export declare const Default: Story;
|
|
7
7
|
export declare const WithLabel: Story;
|
|
8
|
-
export declare const
|
|
9
|
-
export declare const
|
|
10
|
-
export declare const Disabled: Story;
|
|
8
|
+
export declare const WithHint: Story;
|
|
9
|
+
export declare const Sizes: Story;
|
|
11
10
|
export declare const AllStates: Story;
|
|
11
|
+
export declare const Focused: Story;
|
|
12
|
+
export declare const WithHintAllStates: Story;
|
|
12
13
|
export declare const Controlled: Story;
|
|
@@ -7,6 +7,12 @@ export interface CheckboxProps {
|
|
|
7
7
|
className?: string;
|
|
8
8
|
style?: React.CSSProperties;
|
|
9
9
|
children?: React.ReactNode;
|
|
10
|
+
/** sm = 16px, md = 20px */
|
|
11
|
+
size?: 'sm' | 'md';
|
|
12
|
+
/** Secondary description rendered below the label */
|
|
13
|
+
hint?: React.ReactNode;
|
|
14
|
+
/** Force focused appearance (useful for Storybook demos) */
|
|
15
|
+
isFocused?: boolean;
|
|
10
16
|
}
|
|
11
17
|
declare const Checkbox: React.FC<CheckboxProps>;
|
|
12
18
|
export default Checkbox;
|
|
@@ -3,8 +3,10 @@ import Radio from './index';
|
|
|
3
3
|
declare const meta: Meta<typeof Radio>;
|
|
4
4
|
export default meta;
|
|
5
5
|
type Story = StoryObj<typeof Radio>;
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const
|
|
8
|
-
export declare const Disabled: Story;
|
|
9
|
-
export declare const RadioGroup: Story;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const WithHint: Story;
|
|
10
8
|
export declare const Sizes: Story;
|
|
9
|
+
export declare const AllStates: Story;
|
|
10
|
+
export declare const Focused: Story;
|
|
11
|
+
export declare const RadioGroup: Story;
|
|
12
|
+
export declare const RadioGroupWithHint: Story;
|
|
@@ -8,6 +8,12 @@ export interface RadioProps {
|
|
|
8
8
|
children?: React.ReactNode;
|
|
9
9
|
value?: any;
|
|
10
10
|
name?: string;
|
|
11
|
+
/** sm = 16px, md = 20px */
|
|
12
|
+
size?: 'sm' | 'md';
|
|
13
|
+
/** Secondary description rendered below the label */
|
|
14
|
+
hint?: React.ReactNode;
|
|
15
|
+
/** Force focused appearance (useful for Storybook demos) */
|
|
16
|
+
isFocused?: boolean;
|
|
11
17
|
}
|
|
12
18
|
declare const Radio: React.FC<RadioProps>;
|
|
13
19
|
export default Radio;
|
|
@@ -4,11 +4,8 @@ declare const meta: Meta<typeof Tag>;
|
|
|
4
4
|
export default meta;
|
|
5
5
|
type Story = StoryObj<typeof meta>;
|
|
6
6
|
export declare const Default: Story;
|
|
7
|
-
export declare const
|
|
8
|
-
export declare const
|
|
9
|
-
export declare const
|
|
10
|
-
export declare const
|
|
11
|
-
export declare const
|
|
12
|
-
export declare const Clickable: Story;
|
|
13
|
-
export declare const CustomColors: Story;
|
|
14
|
-
export declare const ComplexExample: Story;
|
|
7
|
+
export declare const Overview: Story;
|
|
8
|
+
export declare const Size: Story;
|
|
9
|
+
export declare const Icons: Story;
|
|
10
|
+
export declare const Actions: Story;
|
|
11
|
+
export declare const Checkbox: Story;
|
|
@@ -1,19 +1,41 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
export type TagColor = 'Green' | 'Red' | 'Orange' | 'Cyan' | 'Violet' | 'Pink' | 'Gray' | 'Yellow' | 'Blue' | string;
|
|
3
3
|
export type TagVariant = 'light' | 'fill';
|
|
4
|
-
|
|
4
|
+
/** sm/md/lg are the canonical sizes; large/small are legacy aliases */
|
|
5
|
+
export type TagSize = 'sm' | 'md' | 'lg' | 'large' | 'small';
|
|
6
|
+
/** Leading icon variant */
|
|
7
|
+
export type TagIconType = 'none' | 'dot' | 'avatar' | 'icon';
|
|
8
|
+
/** Right-side action */
|
|
9
|
+
export type TagAction = 'none' | 'x-close' | 'count';
|
|
10
|
+
/** @deprecated Use iconType instead */
|
|
5
11
|
export type IconPosition = 'leading' | 'after' | 'none';
|
|
6
12
|
export interface TagProps {
|
|
7
13
|
children: React.ReactNode;
|
|
8
|
-
color
|
|
14
|
+
color?: TagColor;
|
|
9
15
|
variant?: TagVariant;
|
|
10
16
|
size?: TagSize;
|
|
11
17
|
stroke?: boolean;
|
|
18
|
+
iconType?: TagIconType;
|
|
12
19
|
icon?: React.ReactElement;
|
|
20
|
+
avatarSrc?: string;
|
|
21
|
+
dotColor?: string;
|
|
22
|
+
action?: TagAction;
|
|
23
|
+
count?: number;
|
|
24
|
+
onClose?: () => void;
|
|
25
|
+
checkbox?: boolean;
|
|
26
|
+
checked?: boolean;
|
|
27
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
28
|
+
/** @deprecated use iconType='icon' */
|
|
13
29
|
iconPosition?: IconPosition;
|
|
14
30
|
className?: string;
|
|
15
31
|
onClick?: () => void;
|
|
16
32
|
[key: string]: any;
|
|
17
33
|
}
|
|
34
|
+
export interface TagAvatarProps {
|
|
35
|
+
src?: string;
|
|
36
|
+
alt?: string;
|
|
37
|
+
size?: number;
|
|
38
|
+
}
|
|
39
|
+
export declare const TagAvatar: React.FC<TagAvatarProps>;
|
|
18
40
|
declare const Tag: React.FC<TagProps>;
|
|
19
41
|
export default Tag;
|
|
@@ -13,3 +13,5 @@ export declare const WithMaxLength: Story;
|
|
|
13
13
|
export declare const AutoSize: Story;
|
|
14
14
|
export declare const Controlled: Story;
|
|
15
15
|
export declare const AllStates: Story;
|
|
16
|
+
export declare const LinkifyUncontrolled: Story;
|
|
17
|
+
export declare const LinkifyControlled: Story;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
interface LinkifyOptions {
|
|
3
|
+
validate?: (url: string) => boolean;
|
|
4
|
+
className?: string;
|
|
5
|
+
needProtocol?: boolean;
|
|
6
|
+
needHost?: boolean;
|
|
7
|
+
allowedTlds?: string[];
|
|
8
|
+
}
|
|
2
9
|
export interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {
|
|
3
10
|
/** 是否禁用 */
|
|
4
11
|
disabled?: boolean;
|
|
@@ -33,6 +40,11 @@ export interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTex
|
|
|
33
40
|
onFocus?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;
|
|
34
41
|
/** 失焦回调 */
|
|
35
42
|
onBlur?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;
|
|
43
|
+
/** 是否启用实时链接识别 */
|
|
44
|
+
linkify?: boolean;
|
|
45
|
+
/** 链接识别配置 */
|
|
46
|
+
linkifyOptions?: LinkifyOptions;
|
|
36
47
|
}
|
|
48
|
+
export declare const websiteValidator: (url: string, needProtocol?: boolean, needHost?: boolean, allowedTlds?: string[]) => boolean;
|
|
37
49
|
declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
|
|
38
50
|
export default Textarea;
|
|
@@ -85,6 +85,20 @@
|
|
|
85
85
|
--color-gray-900: #1c1917;
|
|
86
86
|
--color-gray-950: #171412;
|
|
87
87
|
|
|
88
|
+
/* gray-blue */
|
|
89
|
+
--color-gray-blue-25: #fcfcfd;
|
|
90
|
+
--color-gray-blue-50: #f8f9fc;
|
|
91
|
+
--color-gray-blue-100: #eaecf5;
|
|
92
|
+
--color-gray-blue-200: #d5d9eb;
|
|
93
|
+
--color-gray-blue-300: #b3b8db;
|
|
94
|
+
--color-gray-blue-400: #717bbc;
|
|
95
|
+
--color-gray-blue-500: #4e5ba6;
|
|
96
|
+
--color-gray-blue-600: #3e4784;
|
|
97
|
+
--color-gray-blue-700: #363f72;
|
|
98
|
+
--color-gray-blue-800: #293056;
|
|
99
|
+
--color-gray-blue-900: #101323;
|
|
100
|
+
--color-gray-blue-950: #0d0f1c;
|
|
101
|
+
|
|
88
102
|
/* moss */
|
|
89
103
|
--color-moss-25: #fafdf7;
|
|
90
104
|
--color-moss-50: #f5fbee;
|
|
@@ -580,6 +594,18 @@
|
|
|
580
594
|
--color-gray-800: var(--color-gray-800);
|
|
581
595
|
--color-gray-900: var(--color-gray-900);
|
|
582
596
|
--color-gray-950: var(--color-gray-950);
|
|
597
|
+
--color-gray-blue-25: var(--color-gray-blue-25);
|
|
598
|
+
--color-gray-blue-50: var(--color-gray-blue-50);
|
|
599
|
+
--color-gray-blue-100: var(--color-gray-blue-100);
|
|
600
|
+
--color-gray-blue-200: var(--color-gray-blue-200);
|
|
601
|
+
--color-gray-blue-300: var(--color-gray-blue-300);
|
|
602
|
+
--color-gray-blue-400: var(--color-gray-blue-400);
|
|
603
|
+
--color-gray-blue-500: var(--color-gray-blue-500);
|
|
604
|
+
--color-gray-blue-600: var(--color-gray-blue-600);
|
|
605
|
+
--color-gray-blue-700: var(--color-gray-blue-700);
|
|
606
|
+
--color-gray-blue-800: var(--color-gray-blue-800);
|
|
607
|
+
--color-gray-blue-900: var(--color-gray-blue-900);
|
|
608
|
+
--color-gray-blue-950: var(--color-gray-blue-950);
|
|
583
609
|
--color-moss-25: var(--color-moss-25);
|
|
584
610
|
--color-moss-50: var(--color-moss-50);
|
|
585
611
|
--color-moss-100: var(--color-moss-100);
|
|
@@ -85,6 +85,20 @@
|
|
|
85
85
|
--color-gray-900: #1c1917;
|
|
86
86
|
--color-gray-950: #171412;
|
|
87
87
|
|
|
88
|
+
/* gray-blue */
|
|
89
|
+
--color-gray-blue-25: #fcfcfd;
|
|
90
|
+
--color-gray-blue-50: #f8f9fc;
|
|
91
|
+
--color-gray-blue-100: #eaecf5;
|
|
92
|
+
--color-gray-blue-200: #d5d9eb;
|
|
93
|
+
--color-gray-blue-300: #b3b8db;
|
|
94
|
+
--color-gray-blue-400: #717bbc;
|
|
95
|
+
--color-gray-blue-500: #4e5ba6;
|
|
96
|
+
--color-gray-blue-600: #3e4784;
|
|
97
|
+
--color-gray-blue-700: #363f72;
|
|
98
|
+
--color-gray-blue-800: #293056;
|
|
99
|
+
--color-gray-blue-900: #101323;
|
|
100
|
+
--color-gray-blue-950: #0d0f1c;
|
|
101
|
+
|
|
88
102
|
/* moss */
|
|
89
103
|
--color-moss-25: #fafdf7;
|
|
90
104
|
--color-moss-50: #f5fbee;
|
|
@@ -580,6 +594,18 @@
|
|
|
580
594
|
--color-gray-800: var(--color-gray-800);
|
|
581
595
|
--color-gray-900: var(--color-gray-900);
|
|
582
596
|
--color-gray-950: var(--color-gray-950);
|
|
597
|
+
--color-gray-blue-25: var(--color-gray-blue-25);
|
|
598
|
+
--color-gray-blue-50: var(--color-gray-blue-50);
|
|
599
|
+
--color-gray-blue-100: var(--color-gray-blue-100);
|
|
600
|
+
--color-gray-blue-200: var(--color-gray-blue-200);
|
|
601
|
+
--color-gray-blue-300: var(--color-gray-blue-300);
|
|
602
|
+
--color-gray-blue-400: var(--color-gray-blue-400);
|
|
603
|
+
--color-gray-blue-500: var(--color-gray-blue-500);
|
|
604
|
+
--color-gray-blue-600: var(--color-gray-blue-600);
|
|
605
|
+
--color-gray-blue-700: var(--color-gray-blue-700);
|
|
606
|
+
--color-gray-blue-800: var(--color-gray-blue-800);
|
|
607
|
+
--color-gray-blue-900: var(--color-gray-blue-900);
|
|
608
|
+
--color-gray-blue-950: var(--color-gray-blue-950);
|
|
583
609
|
--color-moss-25: var(--color-moss-25);
|
|
584
610
|
--color-moss-50: var(--color-moss-50);
|
|
585
611
|
--color-moss-100: var(--color-moss-100);
|