@idealyst/mcp-server 1.0.84
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 +202 -0
- package/dist/data/cli-commands.d.ts +2 -0
- package/dist/data/cli-commands.d.ts.map +1 -0
- package/dist/data/cli-commands.js +100 -0
- package/dist/data/cli-commands.js.map +1 -0
- package/dist/data/components/Accordion.d.ts +15 -0
- package/dist/data/components/Accordion.d.ts.map +1 -0
- package/dist/data/components/Accordion.js +112 -0
- package/dist/data/components/Accordion.js.map +1 -0
- package/dist/data/components/ActivityIndicator.d.ts +15 -0
- package/dist/data/components/ActivityIndicator.d.ts.map +1 -0
- package/dist/data/components/ActivityIndicator.js +82 -0
- package/dist/data/components/ActivityIndicator.js.map +1 -0
- package/dist/data/components/Alert.d.ts +15 -0
- package/dist/data/components/Alert.d.ts.map +1 -0
- package/dist/data/components/Alert.js +132 -0
- package/dist/data/components/Alert.js.map +1 -0
- package/dist/data/components/Avatar.d.ts +15 -0
- package/dist/data/components/Avatar.d.ts.map +1 -0
- package/dist/data/components/Avatar.js +93 -0
- package/dist/data/components/Avatar.js.map +1 -0
- package/dist/data/components/Badge.d.ts +15 -0
- package/dist/data/components/Badge.d.ts.map +1 -0
- package/dist/data/components/Badge.js +64 -0
- package/dist/data/components/Badge.js.map +1 -0
- package/dist/data/components/Breadcrumb.d.ts +15 -0
- package/dist/data/components/Breadcrumb.d.ts.map +1 -0
- package/dist/data/components/Breadcrumb.js +96 -0
- package/dist/data/components/Breadcrumb.js.map +1 -0
- package/dist/data/components/Button.d.ts +15 -0
- package/dist/data/components/Button.d.ts.map +1 -0
- package/dist/data/components/Button.js +87 -0
- package/dist/data/components/Button.js.map +1 -0
- package/dist/data/components/Card.d.ts +15 -0
- package/dist/data/components/Card.d.ts.map +1 -0
- package/dist/data/components/Card.js +67 -0
- package/dist/data/components/Card.js.map +1 -0
- package/dist/data/components/Checkbox.d.ts +15 -0
- package/dist/data/components/Checkbox.d.ts.map +1 -0
- package/dist/data/components/Checkbox.js +118 -0
- package/dist/data/components/Checkbox.js.map +1 -0
- package/dist/data/components/Chip.d.ts +15 -0
- package/dist/data/components/Chip.d.ts.map +1 -0
- package/dist/data/components/Chip.js +76 -0
- package/dist/data/components/Chip.js.map +1 -0
- package/dist/data/components/Dialog.d.ts +15 -0
- package/dist/data/components/Dialog.d.ts.map +1 -0
- package/dist/data/components/Dialog.js +137 -0
- package/dist/data/components/Dialog.js.map +1 -0
- package/dist/data/components/Divider.d.ts +15 -0
- package/dist/data/components/Divider.d.ts.map +1 -0
- package/dist/data/components/Divider.js +71 -0
- package/dist/data/components/Divider.js.map +1 -0
- package/dist/data/components/Icon.d.ts +15 -0
- package/dist/data/components/Icon.d.ts.map +1 -0
- package/dist/data/components/Icon.js +70 -0
- package/dist/data/components/Icon.js.map +1 -0
- package/dist/data/components/Image.d.ts +15 -0
- package/dist/data/components/Image.d.ts.map +1 -0
- package/dist/data/components/Image.js +122 -0
- package/dist/data/components/Image.js.map +1 -0
- package/dist/data/components/Input.d.ts +15 -0
- package/dist/data/components/Input.d.ts.map +1 -0
- package/dist/data/components/Input.js +109 -0
- package/dist/data/components/Input.js.map +1 -0
- package/dist/data/components/List.d.ts +15 -0
- package/dist/data/components/List.d.ts.map +1 -0
- package/dist/data/components/List.js +113 -0
- package/dist/data/components/List.js.map +1 -0
- package/dist/data/components/Menu.d.ts +15 -0
- package/dist/data/components/Menu.d.ts.map +1 -0
- package/dist/data/components/Menu.js +132 -0
- package/dist/data/components/Menu.js.map +1 -0
- package/dist/data/components/Popover.d.ts +15 -0
- package/dist/data/components/Popover.d.ts.map +1 -0
- package/dist/data/components/Popover.js +159 -0
- package/dist/data/components/Popover.js.map +1 -0
- package/dist/data/components/Pressable.d.ts +15 -0
- package/dist/data/components/Pressable.d.ts.map +1 -0
- package/dist/data/components/Pressable.js +125 -0
- package/dist/data/components/Pressable.js.map +1 -0
- package/dist/data/components/Progress.d.ts +15 -0
- package/dist/data/components/Progress.d.ts.map +1 -0
- package/dist/data/components/Progress.js +95 -0
- package/dist/data/components/Progress.js.map +1 -0
- package/dist/data/components/RadioButton.d.ts +15 -0
- package/dist/data/components/RadioButton.d.ts.map +1 -0
- package/dist/data/components/RadioButton.js +140 -0
- package/dist/data/components/RadioButton.js.map +1 -0
- package/dist/data/components/SVGImage.d.ts +15 -0
- package/dist/data/components/SVGImage.d.ts.map +1 -0
- package/dist/data/components/SVGImage.js +112 -0
- package/dist/data/components/SVGImage.js.map +1 -0
- package/dist/data/components/Screen.d.ts +15 -0
- package/dist/data/components/Screen.d.ts.map +1 -0
- package/dist/data/components/Screen.js +99 -0
- package/dist/data/components/Screen.js.map +1 -0
- package/dist/data/components/Select.d.ts +15 -0
- package/dist/data/components/Select.d.ts.map +1 -0
- package/dist/data/components/Select.js +146 -0
- package/dist/data/components/Select.js.map +1 -0
- package/dist/data/components/Skeleton.d.ts +15 -0
- package/dist/data/components/Skeleton.d.ts.map +1 -0
- package/dist/data/components/Skeleton.js +110 -0
- package/dist/data/components/Skeleton.js.map +1 -0
- package/dist/data/components/Slider.d.ts +15 -0
- package/dist/data/components/Slider.d.ts.map +1 -0
- package/dist/data/components/Slider.js +129 -0
- package/dist/data/components/Slider.js.map +1 -0
- package/dist/data/components/Switch.d.ts +15 -0
- package/dist/data/components/Switch.d.ts.map +1 -0
- package/dist/data/components/Switch.js +127 -0
- package/dist/data/components/Switch.js.map +1 -0
- package/dist/data/components/TabBar.d.ts +15 -0
- package/dist/data/components/TabBar.d.ts.map +1 -0
- package/dist/data/components/TabBar.js +145 -0
- package/dist/data/components/TabBar.js.map +1 -0
- package/dist/data/components/Table.d.ts +15 -0
- package/dist/data/components/Table.d.ts.map +1 -0
- package/dist/data/components/Table.js +151 -0
- package/dist/data/components/Table.js.map +1 -0
- package/dist/data/components/Tabs.d.ts +15 -0
- package/dist/data/components/Tabs.d.ts.map +1 -0
- package/dist/data/components/Tabs.js +150 -0
- package/dist/data/components/Tabs.js.map +1 -0
- package/dist/data/components/Text.d.ts +15 -0
- package/dist/data/components/Text.d.ts.map +1 -0
- package/dist/data/components/Text.js +85 -0
- package/dist/data/components/Text.js.map +1 -0
- package/dist/data/components/TextArea.d.ts +15 -0
- package/dist/data/components/TextArea.d.ts.map +1 -0
- package/dist/data/components/TextArea.js +155 -0
- package/dist/data/components/TextArea.js.map +1 -0
- package/dist/data/components/Tooltip.d.ts +15 -0
- package/dist/data/components/Tooltip.d.ts.map +1 -0
- package/dist/data/components/Tooltip.js +105 -0
- package/dist/data/components/Tooltip.js.map +1 -0
- package/dist/data/components/Video.d.ts +15 -0
- package/dist/data/components/Video.d.ts.map +1 -0
- package/dist/data/components/Video.js +168 -0
- package/dist/data/components/Video.js.map +1 -0
- package/dist/data/components/View.d.ts +15 -0
- package/dist/data/components/View.d.ts.map +1 -0
- package/dist/data/components/View.js +126 -0
- package/dist/data/components/View.js.map +1 -0
- package/dist/data/components/index.d.ts +37 -0
- package/dist/data/components/index.d.ts.map +1 -0
- package/dist/data/components/index.js +110 -0
- package/dist/data/components/index.js.map +1 -0
- package/dist/data/framework-guides.d.ts +2 -0
- package/dist/data/framework-guides.d.ts.map +1 -0
- package/dist/data/framework-guides.js +589 -0
- package/dist/data/framework-guides.js.map +1 -0
- package/dist/data/icon-guide.d.ts +2 -0
- package/dist/data/icon-guide.d.ts.map +1 -0
- package/dist/data/icon-guide.js +285 -0
- package/dist/data/icon-guide.js.map +1 -0
- package/dist/data/icons.json +7452 -0
- package/dist/data/navigation-guides.d.ts +2 -0
- package/dist/data/navigation-guides.d.ts.map +1 -0
- package/dist/data/navigation-guides.js +1196 -0
- package/dist/data/navigation-guides.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +422 -0
- package/dist/index.js.map +1 -0
- package/package.json +34 -0
- package/src/data/cli-commands.ts +103 -0
- package/src/data/components/Accordion.ts +106 -0
- package/src/data/components/ActivityIndicator.ts +82 -0
- package/src/data/components/Alert.ts +132 -0
- package/src/data/components/Avatar.ts +93 -0
- package/src/data/components/Badge.ts +63 -0
- package/src/data/components/Breadcrumb.ts +94 -0
- package/src/data/components/Button.ts +86 -0
- package/src/data/components/Card.ts +67 -0
- package/src/data/components/Checkbox.ts +117 -0
- package/src/data/components/Chip.ts +93 -0
- package/src/data/components/Dialog.ts +136 -0
- package/src/data/components/Divider.ts +70 -0
- package/src/data/components/Icon.ts +70 -0
- package/src/data/components/Image.ts +121 -0
- package/src/data/components/Input.ts +150 -0
- package/src/data/components/List.ts +103 -0
- package/src/data/components/Menu.ts +125 -0
- package/src/data/components/Popover.ts +159 -0
- package/src/data/components/Pressable.ts +123 -0
- package/src/data/components/Progress.ts +95 -0
- package/src/data/components/RadioButton.ts +130 -0
- package/src/data/components/SVGImage.ts +114 -0
- package/src/data/components/Screen.ts +103 -0
- package/src/data/components/Select.ts +140 -0
- package/src/data/components/Skeleton.ts +102 -0
- package/src/data/components/Slider.ts +150 -0
- package/src/data/components/Switch.ts +127 -0
- package/src/data/components/TabBar.ts +142 -0
- package/src/data/components/Table.ts +153 -0
- package/src/data/components/Tabs.ts +152 -0
- package/src/data/components/Text.ts +85 -0
- package/src/data/components/TextArea.ts +155 -0
- package/src/data/components/Tooltip.ts +105 -0
- package/src/data/components/Video.ts +168 -0
- package/src/data/components/View.ts +126 -0
- package/src/data/components/index.ts +109 -0
- package/src/data/framework-guides.ts +593 -0
- package/src/data/icon-guide.ts +284 -0
- package/src/data/icons.json +7452 -0
- package/src/data/navigation-guides.ts +1199 -0
- package/src/index.ts +473 -0
- package/test-client.js +86 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
export const Popover = {
|
|
2
|
+
category: "overlay",
|
|
3
|
+
description: "Floating overlay that displays content anchored to an element, useful for tooltips, menus, and contextual information",
|
|
4
|
+
props: `
|
|
5
|
+
- \`open\`: boolean - Whether the popover is open/visible
|
|
6
|
+
- \`onOpenChange\`: (open: boolean) => void - Called when popover should open/close
|
|
7
|
+
- \`anchor\`: ReactNode | React.RefObject<Element> - Anchor element to position relative to
|
|
8
|
+
- \`children\`: ReactNode - Content to display inside popover
|
|
9
|
+
- \`placement\`: PopoverPlacement - Preferred placement (top, bottom, left, right with -start, -end modifiers)
|
|
10
|
+
- \`offset\`: number - Distance from anchor element in pixels
|
|
11
|
+
- \`closeOnClickOutside\`: boolean - Close when clicking outside (default: true)
|
|
12
|
+
- \`closeOnEscapeKey\`: boolean - Close on Escape key press (web only, default: true)
|
|
13
|
+
- \`showArrow\`: boolean - Show arrow pointing to anchor
|
|
14
|
+
- \`style\`: any - Additional custom styles
|
|
15
|
+
- \`testID\`: string - Test identifier
|
|
16
|
+
`,
|
|
17
|
+
features: [
|
|
18
|
+
"12 placement options with smart positioning",
|
|
19
|
+
"Automatic repositioning on scroll/resize",
|
|
20
|
+
"Click outside to close",
|
|
21
|
+
"Escape key to close (web)",
|
|
22
|
+
"Optional arrow indicator",
|
|
23
|
+
"Offset control",
|
|
24
|
+
"Accessible with focus management",
|
|
25
|
+
],
|
|
26
|
+
bestPractices: [
|
|
27
|
+
"Use for contextual information that doesn't require immediate action",
|
|
28
|
+
"Keep popover content focused and concise",
|
|
29
|
+
"Use arrow to clearly indicate relationship to anchor",
|
|
30
|
+
"Allow closing via click outside and Escape key",
|
|
31
|
+
"Don't nest popovers",
|
|
32
|
+
"Consider using Dialog for critical content",
|
|
33
|
+
],
|
|
34
|
+
usage: `
|
|
35
|
+
import { Popover, Button, View, Text } from '@idealyst/components';
|
|
36
|
+
import { useState, useRef } from 'react';
|
|
37
|
+
|
|
38
|
+
function Example() {
|
|
39
|
+
const [open, setOpen] = useState(false);
|
|
40
|
+
const buttonRef = useRef(null);
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<>
|
|
44
|
+
<div ref={buttonRef}>
|
|
45
|
+
<Button onPress={() => setOpen(true)}>Show Info</Button>
|
|
46
|
+
</div>
|
|
47
|
+
<Popover
|
|
48
|
+
open={open}
|
|
49
|
+
onOpenChange={setOpen}
|
|
50
|
+
anchor={buttonRef}
|
|
51
|
+
placement="bottom"
|
|
52
|
+
showArrow
|
|
53
|
+
>
|
|
54
|
+
<View spacing="sm" style={{ padding: 16 }}>
|
|
55
|
+
<Text weight="bold">Information</Text>
|
|
56
|
+
<Text>Additional context or help text</Text>
|
|
57
|
+
</View>
|
|
58
|
+
</Popover>
|
|
59
|
+
</>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
`,
|
|
63
|
+
examples: {
|
|
64
|
+
basic: `import { Popover, Button, Text } from '@idealyst/components';
|
|
65
|
+
import { useState, useRef } from 'react';
|
|
66
|
+
|
|
67
|
+
const [open, setOpen] = useState(false);
|
|
68
|
+
const buttonRef = useRef(null);
|
|
69
|
+
|
|
70
|
+
<div ref={buttonRef}>
|
|
71
|
+
<Button onPress={() => setOpen(true)}>Open</Button>
|
|
72
|
+
</div>
|
|
73
|
+
<Popover open={open} onOpenChange={setOpen} anchor={buttonRef}>
|
|
74
|
+
<Text>Popover content</Text>
|
|
75
|
+
</Popover>`,
|
|
76
|
+
variants: `import { Popover, Button, View } from '@idealyst/components';
|
|
77
|
+
|
|
78
|
+
// Different placements
|
|
79
|
+
<Popover open={open} onOpenChange={setOpen} anchor={ref} placement="top">
|
|
80
|
+
<View>Top</View>
|
|
81
|
+
</Popover>
|
|
82
|
+
<Popover open={open} onOpenChange={setOpen} anchor={ref} placement="bottom-start">
|
|
83
|
+
<View>Bottom Start</View>
|
|
84
|
+
</Popover>
|
|
85
|
+
<Popover open={open} onOpenChange={setOpen} anchor={ref} placement="right-end">
|
|
86
|
+
<View>Right End</View>
|
|
87
|
+
</Popover>`,
|
|
88
|
+
"with-icons": `import { Popover, Button, View, Icon, Text } from '@idealyst/components';
|
|
89
|
+
import { useState, useRef } from 'react';
|
|
90
|
+
|
|
91
|
+
const buttonRef = useRef(null);
|
|
92
|
+
const [open, setOpen] = useState(false);
|
|
93
|
+
|
|
94
|
+
<div ref={buttonRef}>
|
|
95
|
+
<Button icon="help-circle" variant="text" onPress={() => setOpen(true)} />
|
|
96
|
+
</div>
|
|
97
|
+
<Popover open={open} onOpenChange={setOpen} anchor={buttonRef} showArrow>
|
|
98
|
+
<View spacing="sm" style={{ padding: 12, maxWidth: 250 }}>
|
|
99
|
+
<View style={{ flexDirection: 'row', gap: 8, alignItems: 'center' }}>
|
|
100
|
+
<Icon name="information" size="md" color="primary" />
|
|
101
|
+
<Text weight="bold">Help</Text>
|
|
102
|
+
</View>
|
|
103
|
+
<Text size="small">This feature allows you to...</Text>
|
|
104
|
+
</View>
|
|
105
|
+
</Popover>`,
|
|
106
|
+
interactive: `import { Popover, Button, View, Text, Input } from '@idealyst/components';
|
|
107
|
+
import { useState, useRef } from 'react';
|
|
108
|
+
|
|
109
|
+
function Example() {
|
|
110
|
+
const [open, setOpen] = useState(false);
|
|
111
|
+
const [value, setValue] = useState('');
|
|
112
|
+
const buttonRef = useRef(null);
|
|
113
|
+
|
|
114
|
+
return (
|
|
115
|
+
<View spacing="md">
|
|
116
|
+
<div ref={buttonRef}>
|
|
117
|
+
<Button onPress={() => setOpen(true)}>Edit Name</Button>
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
<Popover
|
|
121
|
+
open={open}
|
|
122
|
+
onOpenChange={setOpen}
|
|
123
|
+
anchor={buttonRef}
|
|
124
|
+
placement="bottom-start"
|
|
125
|
+
closeOnClickOutside={false}
|
|
126
|
+
>
|
|
127
|
+
<View spacing="md" style={{ padding: 16, minWidth: 250 }}>
|
|
128
|
+
<Text weight="bold">Edit Name</Text>
|
|
129
|
+
<Input
|
|
130
|
+
value={value}
|
|
131
|
+
onChangeText={setValue}
|
|
132
|
+
placeholder="Enter name"
|
|
133
|
+
/>
|
|
134
|
+
<View style={{ flexDirection: 'row', gap: 8, justifyContent: 'flex-end' }}>
|
|
135
|
+
<Button
|
|
136
|
+
variant="outlined"
|
|
137
|
+
size="small"
|
|
138
|
+
onPress={() => setOpen(false)}
|
|
139
|
+
>
|
|
140
|
+
Cancel
|
|
141
|
+
</Button>
|
|
142
|
+
<Button
|
|
143
|
+
size="small"
|
|
144
|
+
onPress={() => {
|
|
145
|
+
handleSave(value);
|
|
146
|
+
setOpen(false);
|
|
147
|
+
}}
|
|
148
|
+
>
|
|
149
|
+
Save
|
|
150
|
+
</Button>
|
|
151
|
+
</View>
|
|
152
|
+
</View>
|
|
153
|
+
</Popover>
|
|
154
|
+
</View>
|
|
155
|
+
);
|
|
156
|
+
}`,
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=Popover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../../src/data/components/Popover.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,QAAQ,EAAE,SAAS;IACnB,WAAW,EAAE,uHAAuH;IACpI,KAAK,EAAE;;;;;;;;;;;;CAYR;IACC,QAAQ,EAAE;QACR,6CAA6C;QAC7C,0CAA0C;QAC1C,wBAAwB;QACxB,2BAA2B;QAC3B,0BAA0B;QAC1B,gBAAgB;QAChB,kCAAkC;KACnC;IACD,aAAa,EAAE;QACb,sEAAsE;QACtE,0CAA0C;QAC1C,sDAAsD;QACtD,gDAAgD;QAChD,qBAAqB;QACrB,4CAA4C;KAC7C;IACD,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BR;IACC,QAAQ,EAAE;QACR,KAAK,EAAE;;;;;;;;;;;WAWA;QAEP,QAAQ,EAAE;;;;;;;;;;;WAWH;QAEP,YAAY,EAAE;;;;;;;;;;;;;;;;;WAiBP;QAEP,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkDf;KACC;CACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const Pressable: {
|
|
2
|
+
category: string;
|
|
3
|
+
description: string;
|
|
4
|
+
props: string;
|
|
5
|
+
features: string[];
|
|
6
|
+
bestPractices: string[];
|
|
7
|
+
usage: string;
|
|
8
|
+
examples: {
|
|
9
|
+
basic: string;
|
|
10
|
+
variants: string;
|
|
11
|
+
"with-icons": string;
|
|
12
|
+
interactive: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=Pressable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pressable.d.ts","sourceRoot":"","sources":["../../../src/data/components/Pressable.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;;CA8HrB,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export const Pressable = {
|
|
2
|
+
category: "utility",
|
|
3
|
+
description: "Wrapper component that detects various press interactions on children",
|
|
4
|
+
props: `
|
|
5
|
+
- \`children\`: ReactNode - Content to render inside pressable area
|
|
6
|
+
- \`onPress\`: () => void - Called when press gesture is activated
|
|
7
|
+
- \`onPressIn\`: () => void - Called when press gesture starts
|
|
8
|
+
- \`onPressOut\`: () => void - Called when press gesture ends
|
|
9
|
+
- \`disabled\`: boolean - Whether the pressable is disabled
|
|
10
|
+
- \`style\`: any - Additional styles to apply
|
|
11
|
+
- \`testID\`: string - Test identifier
|
|
12
|
+
- \`accessibilityLabel\`: string - Accessibility label for screen readers
|
|
13
|
+
- \`accessibilityRole\`: string - Accessibility role (web)
|
|
14
|
+
`,
|
|
15
|
+
features: [
|
|
16
|
+
"Press, press-in, press-out callbacks",
|
|
17
|
+
"Disabled state",
|
|
18
|
+
"Accessibility support",
|
|
19
|
+
"Custom styling",
|
|
20
|
+
"Cross-platform support",
|
|
21
|
+
"Touch feedback",
|
|
22
|
+
],
|
|
23
|
+
bestPractices: [
|
|
24
|
+
"Use for custom interactive elements",
|
|
25
|
+
"Prefer Button for standard button interactions",
|
|
26
|
+
"Provide accessibilityLabel for screen readers",
|
|
27
|
+
"Use accessibilityRole for semantic meaning",
|
|
28
|
+
"Add visual feedback on press",
|
|
29
|
+
"Ensure minimum 44x44px touch target",
|
|
30
|
+
],
|
|
31
|
+
usage: `
|
|
32
|
+
import { Pressable, Text, View } from '@idealyst/components';
|
|
33
|
+
|
|
34
|
+
<Pressable onPress={() => console.log('Pressed')}>
|
|
35
|
+
<View style={{ padding: 16, backgroundColor: '#f0f0f0' }}>
|
|
36
|
+
<Text>Press me</Text>
|
|
37
|
+
</View>
|
|
38
|
+
</Pressable>
|
|
39
|
+
`,
|
|
40
|
+
examples: {
|
|
41
|
+
basic: `import { Pressable, Text } from '@idealyst/components';
|
|
42
|
+
|
|
43
|
+
<Pressable onPress={() => console.log('Pressed')}>
|
|
44
|
+
<Text>Tap here</Text>
|
|
45
|
+
</Pressable>`,
|
|
46
|
+
variants: `import { Pressable, View, Text } from '@idealyst/components';
|
|
47
|
+
import { useState } from 'react';
|
|
48
|
+
|
|
49
|
+
function Example() {
|
|
50
|
+
const [pressed, setPressed] = useState(false);
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<Pressable
|
|
54
|
+
onPressIn={() => setPressed(true)}
|
|
55
|
+
onPressOut={() => setPressed(false)}
|
|
56
|
+
>
|
|
57
|
+
<View
|
|
58
|
+
style={{
|
|
59
|
+
padding: 16,
|
|
60
|
+
backgroundColor: pressed ? '#e0e0e0' : '#f5f5f5',
|
|
61
|
+
borderRadius: 8,
|
|
62
|
+
}}
|
|
63
|
+
>
|
|
64
|
+
<Text>{pressed ? 'Pressing...' : 'Press me'}</Text>
|
|
65
|
+
</View>
|
|
66
|
+
</Pressable>
|
|
67
|
+
);
|
|
68
|
+
}`,
|
|
69
|
+
"with-icons": `import { Pressable, View, Icon, Text } from '@idealyst/components';
|
|
70
|
+
|
|
71
|
+
<Pressable
|
|
72
|
+
onPress={() => handleAction()}
|
|
73
|
+
accessibilityLabel="Perform action"
|
|
74
|
+
accessibilityRole="button"
|
|
75
|
+
>
|
|
76
|
+
<View
|
|
77
|
+
style={{
|
|
78
|
+
flexDirection: 'row',
|
|
79
|
+
alignItems: 'center',
|
|
80
|
+
gap: 8,
|
|
81
|
+
padding: 12,
|
|
82
|
+
backgroundColor: '#f0f0f0',
|
|
83
|
+
borderRadius: 8,
|
|
84
|
+
}}
|
|
85
|
+
>
|
|
86
|
+
<Icon name="star" size="md" color="primary" />
|
|
87
|
+
<Text>Custom Button</Text>
|
|
88
|
+
</View>
|
|
89
|
+
</Pressable>`,
|
|
90
|
+
interactive: `import { Pressable, View, Text, Icon } from '@idealyst/components';
|
|
91
|
+
import { useState } from 'react';
|
|
92
|
+
|
|
93
|
+
function CustomCard() {
|
|
94
|
+
const [selected, setSelected] = useState(false);
|
|
95
|
+
|
|
96
|
+
return (
|
|
97
|
+
<Pressable
|
|
98
|
+
onPress={() => setSelected(!selected)}
|
|
99
|
+
accessibilityLabel="Toggle selection"
|
|
100
|
+
>
|
|
101
|
+
<View
|
|
102
|
+
style={{
|
|
103
|
+
padding: 16,
|
|
104
|
+
backgroundColor: selected ? '#e3f2fd' : '#fff',
|
|
105
|
+
borderWidth: 2,
|
|
106
|
+
borderColor: selected ? '#2196f3' : '#e0e0e0',
|
|
107
|
+
borderRadius: 8,
|
|
108
|
+
}}
|
|
109
|
+
>
|
|
110
|
+
<View style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>
|
|
111
|
+
<View spacing="xs">
|
|
112
|
+
<Text weight="bold">Custom Card</Text>
|
|
113
|
+
<Text size="small">Tap to {selected ? 'deselect' : 'select'}</Text>
|
|
114
|
+
</View>
|
|
115
|
+
{selected && (
|
|
116
|
+
<Icon name="check-circle" size="lg" color="primary" />
|
|
117
|
+
)}
|
|
118
|
+
</View>
|
|
119
|
+
</View>
|
|
120
|
+
</Pressable>
|
|
121
|
+
);
|
|
122
|
+
}`,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=Pressable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pressable.js","sourceRoot":"","sources":["../../../src/data/components/Pressable.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,SAAS;IACnB,WAAW,EAAE,uEAAuE;IACpF,KAAK,EAAE;;;;;;;;;;CAUR;IACC,QAAQ,EAAE;QACR,sCAAsC;QACtC,gBAAgB;QAChB,uBAAuB;QACvB,gBAAgB;QAChB,wBAAwB;QACxB,gBAAgB;KACjB;IACD,aAAa,EAAE;QACb,qCAAqC;QACrC,gDAAgD;QAChD,+CAA+C;QAC/C,4CAA4C;QAC5C,8BAA8B;QAC9B,qCAAqC;KACtC;IACD,KAAK,EAAE;;;;;;;;CAQR;IACC,QAAQ,EAAE;QACR,KAAK,EAAE;;;;aAIE;QAET,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;EAsBZ;QAEE,YAAY,EAAE;;;;;;;;;;;;;;;;;;;;aAoBL;QAET,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCf;KACC;CACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const Progress: {
|
|
2
|
+
category: string;
|
|
3
|
+
description: string;
|
|
4
|
+
props: string;
|
|
5
|
+
features: string[];
|
|
6
|
+
bestPractices: string[];
|
|
7
|
+
usage: string;
|
|
8
|
+
examples: {
|
|
9
|
+
basic: string;
|
|
10
|
+
variants: string;
|
|
11
|
+
"with-icons": string;
|
|
12
|
+
interactive: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=Progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Progress.d.ts","sourceRoot":"","sources":["../../../src/data/components/Progress.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;CAgGpB,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export const Progress = {
|
|
2
|
+
category: "feedback",
|
|
3
|
+
description: "Progress indicator showing completion status of tasks or operations",
|
|
4
|
+
props: `
|
|
5
|
+
- \`value\`: number - Current progress value (0-max)
|
|
6
|
+
- \`max\`: number - Maximum value (default: 100)
|
|
7
|
+
- \`variant\`: 'linear' | 'circular' - Progress bar style
|
|
8
|
+
- \`intent\`: 'primary' | 'neutral' | 'success' | 'error' | 'warning' - Color scheme
|
|
9
|
+
- \`size\`: 'small' | 'medium' | 'large' - Size of progress indicator
|
|
10
|
+
- \`indeterminate\`: boolean - Show indeterminate/loading state
|
|
11
|
+
- \`showLabel\`: boolean - Show percentage label
|
|
12
|
+
- \`label\`: string - Custom label text
|
|
13
|
+
- \`rounded\`: boolean - Rounded ends (linear variant)
|
|
14
|
+
- \`style\`: ViewStyle - Additional custom styles
|
|
15
|
+
- \`testID\`: string - Test identifier
|
|
16
|
+
`,
|
|
17
|
+
features: [
|
|
18
|
+
"Linear and circular variants",
|
|
19
|
+
"Determinate and indeterminate modes",
|
|
20
|
+
"Five intent colors",
|
|
21
|
+
"Three sizes",
|
|
22
|
+
"Percentage label support",
|
|
23
|
+
"Custom label text",
|
|
24
|
+
"Rounded ends option",
|
|
25
|
+
],
|
|
26
|
+
bestPractices: [
|
|
27
|
+
"Use determinate progress when percentage is known",
|
|
28
|
+
"Use indeterminate progress for unknown duration",
|
|
29
|
+
"Show label for user feedback",
|
|
30
|
+
"Use circular variant for compact spaces",
|
|
31
|
+
"Match intent to operation context",
|
|
32
|
+
],
|
|
33
|
+
usage: `
|
|
34
|
+
import { Progress } from '@idealyst/components';
|
|
35
|
+
|
|
36
|
+
<Progress
|
|
37
|
+
value={65}
|
|
38
|
+
variant="linear"
|
|
39
|
+
intent="primary"
|
|
40
|
+
showLabel
|
|
41
|
+
/>
|
|
42
|
+
`,
|
|
43
|
+
examples: {
|
|
44
|
+
basic: `import { Progress } from '@idealyst/components';
|
|
45
|
+
|
|
46
|
+
<Progress value={50} />`,
|
|
47
|
+
variants: `import { Progress, View } from '@idealyst/components';
|
|
48
|
+
|
|
49
|
+
<View spacing="md">
|
|
50
|
+
<Progress value={30} variant="linear" intent="primary" />
|
|
51
|
+
<Progress value={60} variant="linear" intent="success" />
|
|
52
|
+
<Progress value={value} variant="circular" size="large" showLabel />
|
|
53
|
+
</View>`,
|
|
54
|
+
"with-icons": `import { Progress, View, Text } from '@idealyst/components';
|
|
55
|
+
|
|
56
|
+
<View spacing="sm">
|
|
57
|
+
<View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
|
|
58
|
+
<Text>Uploading...</Text>
|
|
59
|
+
<Text>{progress}%</Text>
|
|
60
|
+
</View>
|
|
61
|
+
<Progress value={progress} intent="primary" />
|
|
62
|
+
</View>`,
|
|
63
|
+
interactive: `import { Progress, Button, View, Text } from '@idealyst/components';
|
|
64
|
+
import { useState, useEffect } from 'react';
|
|
65
|
+
|
|
66
|
+
function Example() {
|
|
67
|
+
const [progress, setProgress] = useState(0);
|
|
68
|
+
const [running, setRunning] = useState(false);
|
|
69
|
+
|
|
70
|
+
useEffect(() => {
|
|
71
|
+
if (running && progress < 100) {
|
|
72
|
+
const timer = setTimeout(() => setProgress(progress + 10), 500);
|
|
73
|
+
return () => clearTimeout(timer);
|
|
74
|
+
} else if (progress >= 100) {
|
|
75
|
+
setRunning(false);
|
|
76
|
+
}
|
|
77
|
+
}, [progress, running]);
|
|
78
|
+
|
|
79
|
+
const handleStart = () => {
|
|
80
|
+
setProgress(0);
|
|
81
|
+
setRunning(true);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
return (
|
|
85
|
+
<View spacing="md">
|
|
86
|
+
<Progress value={progress} intent="success" showLabel />
|
|
87
|
+
<Button onPress={handleStart} disabled={running}>
|
|
88
|
+
Start
|
|
89
|
+
</Button>
|
|
90
|
+
</View>
|
|
91
|
+
);
|
|
92
|
+
}`,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=Progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Progress.js","sourceRoot":"","sources":["../../../src/data/components/Progress.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,qEAAqE;IAClF,KAAK,EAAE;;;;;;;;;;;;CAYR;IACC,QAAQ,EAAE;QACR,8BAA8B;QAC9B,qCAAqC;QACrC,oBAAoB;QACpB,aAAa;QACb,0BAA0B;QAC1B,mBAAmB;QACnB,qBAAqB;KACtB;IACD,aAAa,EAAE;QACb,mDAAmD;QACnD,iDAAiD;QACjD,8BAA8B;QAC9B,yCAAyC;QACzC,mCAAmC;KACpC;IACD,KAAK,EAAE;;;;;;;;;CASR;IACC,QAAQ,EAAE;QACR,KAAK,EAAE;;wBAEa;QAEpB,QAAQ,EAAE;;;;;;QAMN;QAEJ,YAAY,EAAE;;;;;;;;QAQV;QAEJ,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6Bf;KACC;CACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const RadioButton: {
|
|
2
|
+
category: string;
|
|
3
|
+
description: string;
|
|
4
|
+
props: string;
|
|
5
|
+
features: string[];
|
|
6
|
+
bestPractices: string[];
|
|
7
|
+
usage: string;
|
|
8
|
+
examples: {
|
|
9
|
+
basic: string;
|
|
10
|
+
variants: string;
|
|
11
|
+
"with-icons": string;
|
|
12
|
+
interactive: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=RadioButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioButton.d.ts","sourceRoot":"","sources":["../../../src/data/components/RadioButton.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;;;;;;;CA6IvB,CAAC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
export const RadioButton = {
|
|
2
|
+
category: "form",
|
|
3
|
+
description: "Radio button for single-choice selection within a group",
|
|
4
|
+
props: `
|
|
5
|
+
RadioButton Props:
|
|
6
|
+
- \`value\`: string - The value of this radio button
|
|
7
|
+
- \`checked\`: boolean - Whether the radio is checked
|
|
8
|
+
- \`onPress\`: () => void - Press handler
|
|
9
|
+
- \`disabled\`: boolean - Whether disabled
|
|
10
|
+
- \`label\`: string - Label text
|
|
11
|
+
- \`size\`: 'small' | 'medium' | 'large' - Radio size
|
|
12
|
+
- \`intent\`: 'primary' | 'success' | 'error' | 'warning' | 'neutral' - Color scheme
|
|
13
|
+
- \`style\`: ViewStyle - Additional styles
|
|
14
|
+
- \`testID\`: string - Test identifier
|
|
15
|
+
|
|
16
|
+
RadioGroup Props:
|
|
17
|
+
- \`value\`: string - Currently selected value
|
|
18
|
+
- \`onValueChange\`: (value: string) => void - Selection change handler
|
|
19
|
+
- \`disabled\`: boolean - Disable all radio buttons
|
|
20
|
+
- \`orientation\`: 'horizontal' | 'vertical' - Layout orientation
|
|
21
|
+
- \`children\`: ReactNode - Radio button children
|
|
22
|
+
- \`style\`: ViewStyle - Additional styles
|
|
23
|
+
- \`testID\`: string - Test identifier
|
|
24
|
+
`,
|
|
25
|
+
features: [
|
|
26
|
+
"Single selection within group",
|
|
27
|
+
"Horizontal and vertical layouts",
|
|
28
|
+
"Label support",
|
|
29
|
+
"Three sizes",
|
|
30
|
+
"Five intent colors",
|
|
31
|
+
"Disabled state (individual or group)",
|
|
32
|
+
"Controlled component",
|
|
33
|
+
],
|
|
34
|
+
bestPractices: [
|
|
35
|
+
"Use RadioGroup to manage selection state",
|
|
36
|
+
"Always provide labels for accessibility",
|
|
37
|
+
"Use for mutually exclusive options (3-5 choices)",
|
|
38
|
+
"For 2 options, consider Switch or Checkbox",
|
|
39
|
+
"For many options (>5), consider Select",
|
|
40
|
+
"Group related options visually",
|
|
41
|
+
],
|
|
42
|
+
usage: `
|
|
43
|
+
import { RadioGroup, RadioButton } from '@idealyst/components';
|
|
44
|
+
import { useState } from 'react';
|
|
45
|
+
|
|
46
|
+
function Example() {
|
|
47
|
+
const [value, setValue] = useState('option1');
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<RadioGroup value={value} onValueChange={setValue}>
|
|
51
|
+
<RadioButton value="option1" label="Option 1" />
|
|
52
|
+
<RadioButton value="option2" label="Option 2" />
|
|
53
|
+
<RadioButton value="option3" label="Option 3" />
|
|
54
|
+
</RadioGroup>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
`,
|
|
58
|
+
examples: {
|
|
59
|
+
basic: `import { RadioGroup, RadioButton } from '@idealyst/components';
|
|
60
|
+
|
|
61
|
+
<RadioGroup value={selected} onValueChange={setSelected}>
|
|
62
|
+
<RadioButton value="a" label="Choice A" />
|
|
63
|
+
<RadioButton value="b" label="Choice B" />
|
|
64
|
+
</RadioGroup>`,
|
|
65
|
+
variants: `import { RadioGroup, RadioButton, View } from '@idealyst/components';
|
|
66
|
+
|
|
67
|
+
<View spacing="md">
|
|
68
|
+
{/* Vertical (default) */}
|
|
69
|
+
<RadioGroup value={value} onValueChange={setValue}>
|
|
70
|
+
<RadioButton value="1" label="Option 1" />
|
|
71
|
+
<RadioButton value="2" label="Option 2" />
|
|
72
|
+
</RadioGroup>
|
|
73
|
+
|
|
74
|
+
{/* Horizontal */}
|
|
75
|
+
<RadioGroup value={value} onValueChange={setValue} orientation="horizontal">
|
|
76
|
+
<RadioButton value="1" label="Small" size="small" />
|
|
77
|
+
<RadioButton value="2" label="Medium" size="medium" />
|
|
78
|
+
<RadioButton value="3" label="Large" size="large" />
|
|
79
|
+
</RadioGroup>
|
|
80
|
+
</View>`,
|
|
81
|
+
"with-icons": `import { RadioGroup, RadioButton } from '@idealyst/components';
|
|
82
|
+
|
|
83
|
+
<RadioGroup value={plan} onValueChange={setPlan}>
|
|
84
|
+
<RadioButton
|
|
85
|
+
value="free"
|
|
86
|
+
label="Free Plan"
|
|
87
|
+
intent="neutral"
|
|
88
|
+
/>
|
|
89
|
+
<RadioButton
|
|
90
|
+
value="pro"
|
|
91
|
+
label="Pro Plan"
|
|
92
|
+
intent="primary"
|
|
93
|
+
/>
|
|
94
|
+
<RadioButton
|
|
95
|
+
value="enterprise"
|
|
96
|
+
label="Enterprise Plan"
|
|
97
|
+
intent="success"
|
|
98
|
+
/>
|
|
99
|
+
</RadioGroup>`,
|
|
100
|
+
interactive: `import { RadioGroup, RadioButton, View, Text, Card } from '@idealyst/components';
|
|
101
|
+
import { useState } from 'react';
|
|
102
|
+
|
|
103
|
+
function Example() {
|
|
104
|
+
const [shipping, setShipping] = useState('standard');
|
|
105
|
+
|
|
106
|
+
const options = [
|
|
107
|
+
{ value: 'standard', label: 'Standard (5-7 days)', price: 'Free' },
|
|
108
|
+
{ value: 'express', label: 'Express (2-3 days)', price: '$10' },
|
|
109
|
+
{ value: 'overnight', label: 'Overnight', price: '$25' },
|
|
110
|
+
];
|
|
111
|
+
|
|
112
|
+
return (
|
|
113
|
+
<View spacing="md">
|
|
114
|
+
<Text weight="bold">Select Shipping Method</Text>
|
|
115
|
+
<RadioGroup value={shipping} onValueChange={setShipping}>
|
|
116
|
+
{options.map((option) => (
|
|
117
|
+
<Card
|
|
118
|
+
key={option.value}
|
|
119
|
+
variant={shipping === option.value ? 'outlined' : 'default'}
|
|
120
|
+
padding="small"
|
|
121
|
+
clickable
|
|
122
|
+
onPress={() => setShipping(option.value)}
|
|
123
|
+
>
|
|
124
|
+
<View style={{ flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center' }}>
|
|
125
|
+
<RadioButton
|
|
126
|
+
value={option.value}
|
|
127
|
+
label={option.label}
|
|
128
|
+
checked={shipping === option.value}
|
|
129
|
+
/>
|
|
130
|
+
<Text weight="bold">{option.price}</Text>
|
|
131
|
+
</View>
|
|
132
|
+
</Card>
|
|
133
|
+
))}
|
|
134
|
+
</RadioGroup>
|
|
135
|
+
</View>
|
|
136
|
+
);
|
|
137
|
+
}`,
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=RadioButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioButton.js","sourceRoot":"","sources":["../../../src/data/components/RadioButton.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,yDAAyD;IACtE,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;CAoBR;IACC,QAAQ,EAAE;QACR,+BAA+B;QAC/B,iCAAiC;QACjC,eAAe;QACf,aAAa;QACb,oBAAoB;QACpB,sCAAsC;QACtC,sBAAsB;KACvB;IACD,aAAa,EAAE;QACb,0CAA0C;QAC1C,yCAAyC;QACzC,kDAAkD;QAClD,4CAA4C;QAC5C,wCAAwC;QACxC,gCAAgC;KACjC;IACD,KAAK,EAAE;;;;;;;;;;;;;;;CAeR;IACC,QAAQ,EAAE;QACR,KAAK,EAAE;;;;;cAKG;QAEV,QAAQ,EAAE;;;;;;;;;;;;;;;QAeN;QAEJ,YAAY,EAAE;;;;;;;;;;;;;;;;;;cAkBJ;QAEV,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCf;KACC;CACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare const SVGImage: {
|
|
2
|
+
category: string;
|
|
3
|
+
description: string;
|
|
4
|
+
props: string;
|
|
5
|
+
features: string[];
|
|
6
|
+
bestPractices: string[];
|
|
7
|
+
usage: string;
|
|
8
|
+
examples: {
|
|
9
|
+
basic: string;
|
|
10
|
+
variants: string;
|
|
11
|
+
"with-icons": string;
|
|
12
|
+
interactive: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=SVGImage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SVGImage.d.ts","sourceRoot":"","sources":["../../../src/data/components/SVGImage.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;CAiHpB,CAAC"}
|