@1money/component-ui 0.0.23 → 0.0.24
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/es/stories/docs/ComponentDocsPage.js +234 -0
- package/es/stories/docs/componentDocMeta.js +97 -0
- package/es/stories/docs/storybook-docs.css +79 -0
- package/lib/stories/docs/ComponentDocsPage.js +244 -0
- package/lib/stories/docs/componentDocMeta.js +104 -0
- package/lib/stories/docs/storybook-docs.css +79 -0
- package/package.json +23 -8
- package/scripts/mcp-server/README.md +267 -0
- package/scripts/mcp-server/bin.mjs +2 -0
- package/scripts/mcp-server/drift.json +5 -0
- package/scripts/mcp-server/examples.generated.json +2651 -0
- package/scripts/mcp-server/index.generated.json +18098 -0
- package/scripts/mcp-server/index.mjs +308 -26
- package/scripts/mcp-server/tools/get-examples.mjs +125 -0
- package/scripts/mcp-server/tools/get-library-info.mjs +25 -0
- package/scripts/mcp-server/tools/get-symbol.mjs +232 -0
- package/scripts/mcp-server/tools/get-token.mjs +60 -0
- package/scripts/mcp-server/tools/list-icons.mjs +38 -0
- package/scripts/mcp-server/tools/list-symbols.mjs +46 -0
- package/scripts/mcp-server/tools/resolve-import.mjs +125 -0
- package/scripts/mcp-server/tools/search-symbols.mjs +79 -0
- package/.agents/skills/1money-component-dev/SKILL.md +0 -224
- package/.agents/skills/1money-component-dev/checklist.md +0 -159
- package/.agents/skills/1money-component-dev/references/ComponentPatterns.md +0 -478
- package/.agents/skills/1money-component-dev/references/FigmaExtractionChecklist.md +0 -144
- package/.agents/skills/1money-component-dev/references/HooksGuide.md +0 -360
- package/.agents/skills/1money-component-dev/references/SemanticColors.md +0 -215
- package/.agents/skills/1money-component-dev/references/StyleSystemAPI.md +0 -389
- package/.claude/settings.local.json +0 -120
- package/.claude/skills/1money-component-dev/SKILL.md +0 -229
- package/.claude/skills/1money-component-dev/checklist.md +0 -159
- package/.claude/skills/1money-component-dev/references/ComponentPatterns.md +0 -478
- package/.claude/skills/1money-component-dev/references/FigmaExtractionChecklist.md +0 -144
- package/.claude/skills/1money-component-dev/references/HooksGuide.md +0 -360
- package/.claude/skills/1money-component-dev/references/SemanticColors.md +0 -215
- package/.claude/skills/1money-component-dev/references/StyleSystemAPI.md +0 -389
- package/.claude/skills/1money-component-review/SKILL.md +0 -316
- package/.claude/skills/component-pipeline/SKILL.md +0 -116
- package/.claude/skills/component-pipeline/checklist.md +0 -125
- package/.hintrc +0 -13
- package/@types/global.d.ts +0 -28
- package/AGENTS.md +0 -546
- package/CLAUDE.md +0 -1
- package/jest.setup.d.ts +0 -1
- package/jest.setup.ts +0 -1
- package/patches/primereact.patch +0 -323
- package/patches/react-pro-sidebar.patch +0 -6421
- package/public/favicon.ico +0 -0
- package/public/fonts/Aeonik/Aeonik-Air.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-AirItalic.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-Black.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-BlackItalic.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-Bold.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-BoldItalic.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-Light.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-LightItalic.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-Medium.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-MediumItalic.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-Regular.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-RegularItalic.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-Thin.ttf +0 -0
- package/public/fonts/Aeonik/Aeonik-ThinItalic.ttf +0 -0
- package/public/fonts/Inter/Inter-Black.ttf +0 -0
- package/public/fonts/Inter/Inter-BlackItalic.ttf +0 -0
- package/public/fonts/Inter/Inter-Bold.ttf +0 -0
- package/public/fonts/Inter/Inter-BoldItalic.ttf +0 -0
- package/public/fonts/Inter/Inter-ExtraBold.ttf +0 -0
- package/public/fonts/Inter/Inter-ExtraBoldItalic.ttf +0 -0
- package/public/fonts/Inter/Inter-ExtraLight.ttf +0 -0
- package/public/fonts/Inter/Inter-ExtraLightItalic.ttf +0 -0
- package/public/fonts/Inter/Inter-Italic.ttf +0 -0
- package/public/fonts/Inter/Inter-Light.ttf +0 -0
- package/public/fonts/Inter/Inter-LightItalic.ttf +0 -0
- package/public/fonts/Inter/Inter-Medium.ttf +0 -0
- package/public/fonts/Inter/Inter-MediumItalic.ttf +0 -0
- package/public/fonts/Inter/Inter-Regular.ttf +0 -0
- package/public/fonts/Inter/Inter-SemiBold.ttf +0 -0
- package/public/fonts/Inter/Inter-SemiBoldItalic.ttf +0 -0
- package/public/fonts/Inter/Inter-Thin.ttf +0 -0
- package/public/fonts/Inter/Inter-ThinItalic.ttf +0 -0
- package/public/fonts/Outfit/Outfit-Black.ttf +0 -0
- package/public/fonts/Outfit/Outfit-Bold.ttf +0 -0
- package/public/fonts/Outfit/Outfit-ExtraBold.ttf +0 -0
- package/public/fonts/Outfit/Outfit-ExtraLight.ttf +0 -0
- package/public/fonts/Outfit/Outfit-Light.ttf +0 -0
- package/public/fonts/Outfit/Outfit-Medium.ttf +0 -0
- package/public/fonts/Outfit/Outfit-Regular.ttf +0 -0
- package/public/fonts/Outfit/Outfit-SemiBold.ttf +0 -0
- package/public/fonts/Outfit/Outfit-Thin.ttf +0 -0
- package/public/github-mark.svg +0 -3
- package/public/tokens/GYEN.svg +0 -9
- package/public/tokens/PYUSD.svg +0 -9
- package/public/tokens/USDT.svg +0 -6
- package/scripts/mcp-server/resources.d.mts +0 -1
- package/scripts/mcp-server/resources.mjs +0 -102
- package/test/jsdom-global-register.d.ts +0 -1
- package/test/jsdom-global-register.js +0 -1
|
@@ -0,0 +1,2651 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1",
|
|
3
|
+
"examples": {
|
|
4
|
+
"002615fee8d755dab7889ab4b878d7d6b4e25024bba2b7cae8f9e4d86fc61cb4": {
|
|
5
|
+
"title": "Table",
|
|
6
|
+
"code": "{\n const contentCount = 3;\n const headerStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 16,\n };\n const rowStyle: React.CSSProperties = {\n ...headerStyle,\n };\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n border: '1px solid #e5e7eb',\n borderRadius: 24,\n backgroundColor: '#f9fafb',\n padding: 24,\n width: '100%',\n }}\n >\n <div style={headerStyle}>\n {Array.from({ length: 6 }).map((_, i) => (\n <Skeleton key={i} width=\"15%\" height=\"16px\" borderRadius=\"8px\" animation={args.animation} />\n ))}\n </div>\n <div style={{ width: '100%', height: 1, backgroundColor: '#e5e7eb' }} />\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n {Array.from({ length: contentCount }).map((_, i) => (\n <div key={i} style={rowStyle}>\n {Array.from({ length: 6 }).map((_, j) => (\n <Skeleton key={j} width=\"15%\" height=\"24px\" borderRadius=\"12px\" animation={args.animation} />\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n }",
|
|
7
|
+
"source": "stories",
|
|
8
|
+
"compilable": false
|
|
9
|
+
},
|
|
10
|
+
"00374992c219d7042d32ee0297713e87c7da0a14563aa91ec24246b11ddd8462": {
|
|
11
|
+
"title": "Hover Trigger",
|
|
12
|
+
"code": "<Dropdown\n {...args}\n trigger=\"hover\"\n hoverDelay={{ open: 100, close: 200 }}\n content={<MenuContent />}\n >\n <Button>Hover me</Button>\n </Dropdown>",
|
|
13
|
+
"source": "stories",
|
|
14
|
+
"compilable": false
|
|
15
|
+
},
|
|
16
|
+
"00ebb02ec69a1e88dc08dd1c08594a0cab9d86855da2de7eca6b118c6f886dc7": {
|
|
17
|
+
"title": "Cell Variant",
|
|
18
|
+
"code": "<Radio\n checked\n variant=\"cell\"\n size=\"large\"\n alignment=\"center\"\n icon=\"language\"\n tag=\"Popular\"\n label=\"Global account\"\n description=\"International settlement\"\n/>\n\n<RadioGroup\n value={selected}\n variant=\"cell\"\n size=\"large\"\n alignment=\"left\"\n direction=\"horizontal\"\n onChange={handleChange}\n options={[\n { value: 'swift', label: 'SWIFT', description: 'Receive via bank rails' },\n {\n value: 'global',\n label: 'Global account',\n description: 'International settlement',\n icon: 'language',\n },\n ]}\n/>",
|
|
19
|
+
"source": "readme",
|
|
20
|
+
"compilable": true
|
|
21
|
+
},
|
|
22
|
+
"018f2394328d31f76d39fcd543c941becb287828707ce2f98959543360d2a209": {
|
|
23
|
+
"title": "With Text",
|
|
24
|
+
"code": "<Divider>Section Title</Divider>\n<Divider orientation=\"left\">Left Title</Divider>\n<Divider orientation=\"right\">Right Title</Divider>",
|
|
25
|
+
"source": "readme",
|
|
26
|
+
"compilable": true
|
|
27
|
+
},
|
|
28
|
+
"01a336a327f3b1450173b3c03356bd341f077f546ef4a84c6861881c6f62d89e": {
|
|
29
|
+
"title": "Sizes",
|
|
30
|
+
"code": "<div style={rowStyle}>\n {BUTTON_SIZES.map((size) => (\n <Button {...args} key={size} size={size}>\n {size}\n </Button>\n ))}\n </div>",
|
|
31
|
+
"source": "stories",
|
|
32
|
+
"compilable": false
|
|
33
|
+
},
|
|
34
|
+
"01e3e9258a1bda78a667e40406fafe7b7cf89b5e3354d2035d37e360422aab36": {
|
|
35
|
+
"title": "RadioGroup With Children",
|
|
36
|
+
"code": "const [selected, setSelected] = useState<string | number>('a');\n\n<RadioGroup\n value={selected}\n onChange={(event) => {\n if (event.target.value !== undefined) {\n setSelected(event.target.value);\n }\n }}\n>\n <Radio value=\"a\" label=\"Option A\" />\n <Radio value=\"b\" label=\"Option B\" />\n <Radio value=\"c\" label=\"Option C\" />\n</RadioGroup>",
|
|
37
|
+
"source": "readme",
|
|
38
|
+
"compilable": true
|
|
39
|
+
},
|
|
40
|
+
"02eb41ce0715973b9fe2fb88cf59851f0fa8962318df7f86a9405a50cfe907b2": {
|
|
41
|
+
"title": "Canonical usage",
|
|
42
|
+
"code": "import { Checkbox } from '@1money/components-ui';\n// or\nimport { Checkbox } from '@1money/components-ui/Checkbox';",
|
|
43
|
+
"source": "canonical",
|
|
44
|
+
"compilable": true
|
|
45
|
+
},
|
|
46
|
+
"034773bdaca67ca0d5a236ca92c3d84403ca823cb8249eacea2414545523ab3d": {
|
|
47
|
+
"title": "Grouped",
|
|
48
|
+
"code": "{\n const [value, setValue] = useState<string | number | undefined>('usdt');\n\n return (\n <Select\n {...args}\n value={value}\n onChange={(nextValue, option) => {\n setValue(nextValue as string | number | undefined);\n args.onChange?.(nextValue, option);\n }}\n />\n );\n }",
|
|
49
|
+
"source": "stories",
|
|
50
|
+
"compilable": false
|
|
51
|
+
},
|
|
52
|
+
"03ae4647e3bd8aa48fde505061070eb0425296d0b86b97f0b240c36897efc68f": {
|
|
53
|
+
"title": "Split",
|
|
54
|
+
"code": "<Space split={<span>|</span>} size={SPACE_SIZE.large}>\n <span>Alpha</span>\n <span>Beta</span>\n <span>Gamma</span>\n </Space>",
|
|
55
|
+
"source": "stories",
|
|
56
|
+
"compilable": true
|
|
57
|
+
},
|
|
58
|
+
"03d4e0cef5922bd9d1c1934b5b1c8af440c30f7e1ae1f7f31d755dd518639b6c": {
|
|
59
|
+
"title": "Canonical usage",
|
|
60
|
+
"code": "import type { DialogFormProps } from '@1money/component-ui';",
|
|
61
|
+
"source": "canonical",
|
|
62
|
+
"compilable": true
|
|
63
|
+
},
|
|
64
|
+
"03db5f06b9d053c3b514bf4bd85fdb3c21604f60d3b598d6de714a98a3a17713": {
|
|
65
|
+
"title": "Usage",
|
|
66
|
+
"code": "<Slider\n label=\"Price\"\n description=\"Set your budget\"\n valuePrefix=\"$\"\n defaultValue={40}\n min={0}\n max={100}\n onChange={(value) => console.log(value)}\n/>",
|
|
67
|
+
"source": "readme",
|
|
68
|
+
"compilable": true
|
|
69
|
+
},
|
|
70
|
+
"03fa3fcdf3577c4278551ee032cd36a6b3f43a21aa6c2f807a57da22f9ac48dd": {
|
|
71
|
+
"title": "Field Request",
|
|
72
|
+
"code": "<ProForm\n {...args}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormSelect\n name=\"user\"\n label=\"User (async loaded)\"\n request={async () => {\n await new Promise((r) => setTimeout(r, 800));\n return [\n { label: 'Alice', value: 'alice' },\n { label: 'Bob', value: 'bob' },\n { label: 'Charlie', value: 'charlie' },\n ];\n }}\n />\n </ProForm>",
|
|
73
|
+
"source": "stories",
|
|
74
|
+
"compilable": false
|
|
75
|
+
},
|
|
76
|
+
"043dd268dff2f5670f3ab2c4c19161fec1e9322d74c3151a062126f0e295a632": {
|
|
77
|
+
"title": "Canonical usage",
|
|
78
|
+
"code": "import type { ProFormItemProps } from '@1money/component-ui';",
|
|
79
|
+
"source": "canonical",
|
|
80
|
+
"compilable": true
|
|
81
|
+
},
|
|
82
|
+
"047c2f9b4e0f29aa1bfa1d29f631e05af609d686dc8ddcf1ab8a44f3838c16a5": {
|
|
83
|
+
"title": "Default",
|
|
84
|
+
"code": "<DashboardTemplate />",
|
|
85
|
+
"source": "stories",
|
|
86
|
+
"compilable": true
|
|
87
|
+
},
|
|
88
|
+
"04e9dc127df402e09fdd97b4e5a8113b98bd6e4cc73a657077883081e9a0b8f2": {
|
|
89
|
+
"title": "Canonical usage",
|
|
90
|
+
"code": "import type { StepStatus } from '@1money/component-ui';",
|
|
91
|
+
"source": "canonical",
|
|
92
|
+
"compilable": true
|
|
93
|
+
},
|
|
94
|
+
"05717fb84522993ea86a1295a654c812fe4de71b24eacb8657ec875518efde6a": {
|
|
95
|
+
"title": "Usage",
|
|
96
|
+
"code": "<Alert\n status=\"info\"\n title=\"Information\"\n body=\"This is an informational message.\"\n link={{ label: 'Learn more', href: '/docs' }}\n onClose={() => console.log('closed')}\n/>",
|
|
97
|
+
"source": "readme",
|
|
98
|
+
"compilable": true
|
|
99
|
+
},
|
|
100
|
+
"069beba30456db7a61ea657851e695df2a417f06c69fdf677a0d60c1a7af3de9": {
|
|
101
|
+
"title": "Canonical usage",
|
|
102
|
+
"code": "import type { ProFormValueType } from '@1money/component-ui';",
|
|
103
|
+
"source": "canonical",
|
|
104
|
+
"compilable": true
|
|
105
|
+
},
|
|
106
|
+
"06b3a8e6513382a6e7d5bd530b625d83a008bbb52aa5f05cb2812e54e8854b3a": {
|
|
107
|
+
"title": "Api Examples",
|
|
108
|
+
"code": "<div style={DEMO_SECTION_STYLE}>\n <Row\n gutter={GRID_GUTTER_SPACED}\n align={GRID_ALIGN.middle}\n justify={GRID_JUSTIFY.spaceBetween}\n wrap={WRAP_DISABLED}\n prefixCls={GRID_ROW_PREFIX}\n >\n <Col span={SPAN_HALF} prefixCls={GRID_COL_PREFIX}><div style={DEMO_BOX_STYLE}>Span</div></Col>\n <Col span={SPAN_HALF} prefixCls={GRID_COL_PREFIX}><div style={DEMO_BOX_STYLE}>Span</div></Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_COMPACT} prefixCls={GRID_ROW_PREFIX}>\n <Col span={SPAN_QUARTER} offset={OFFSET_SMALL} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Offset</div>\n </Col>\n <Col span={SPAN_QUARTER} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Offset</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_COMPACT} prefixCls={GRID_ROW_PREFIX}>\n <Col span={SPAN_QUARTER} push={PUSH_SMALL} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Push</div>\n </Col>\n <Col span={SPAN_QUARTER} pull={PULL_SMALL} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Pull</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_RESPONSIVE} prefixCls={GRID_ROW_PREFIX}>\n <Col span={SPAN_HALF} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Responsive Gutter</div>\n </Col>\n <Col span={SPAN_HALF} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Responsive Gutter</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_REM} prefixCls={GRID_ROW_PREFIX}>\n <Col span={SPAN_HALF} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>String Gutter</div>\n </Col>\n <Col span={SPAN_HALF} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>String Gutter</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_COMPACT} prefixCls={GRID_ROW_PREFIX}>\n <Col span={SPAN_QUARTER} order={ORDER_LAST} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Order</div>\n </Col>\n <Col span={SPAN_QUARTER} order={ORDER_FIRST} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Order</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_COMPACT} prefixCls={GRID_ROW_PREFIX}>\n <Col flex={FLEX_ONE} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Flex 1</div>\n </Col>\n <Col flex={FLEX_TWO} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Flex 2</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED} wrap={WRAP_ENABLED} prefixCls={GRID_ROW_PREFIX}>\n <Col span={SPAN_BASE} sm={SPAN_SM} md={{ span: SPAN_MD, offset: OFFSET_SMALL }} lg={SPAN_LG} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Responsive</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED} justify={JUSTIFY_RESPONSIVE} prefixCls={GRID_ROW_PREFIX}>\n <Col span={SPAN_HALF} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Justify Responsive</div>\n </Col>\n <Col span={SPAN_HALF} prefixCls={GRID_COL_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Justify Responsive</div>\n </Col>\n </Row>\n\n </div>",
|
|
109
|
+
"source": "stories",
|
|
110
|
+
"compilable": true
|
|
111
|
+
},
|
|
112
|
+
"06fe88ad0e8ab0eb5303e6d550234af6433a3b3e5f18fcddba351e64fab26e13": {
|
|
113
|
+
"title": "Canonical usage",
|
|
114
|
+
"code": "import type { SelectOptionValue } from '@1money/component-ui';",
|
|
115
|
+
"source": "canonical",
|
|
116
|
+
"compilable": true
|
|
117
|
+
},
|
|
118
|
+
"0716e5e5fffc542e7b028181c93a5655fb3738281657fc43abb5eb99a95b3e8b": {
|
|
119
|
+
"title": "Custom Icon",
|
|
120
|
+
"code": "<Alert\n {...args}\n status=\"info\"\n title=\"Manual review queued\"\n body=\"This alert uses a custom icon to reflect a workflow-specific state instead of the default status glyph.\"\n icon={<Icons name=\"notificationWarning\" size={32} />}\n link={{ label: 'Open queue', onClick: fn() }}\n />",
|
|
121
|
+
"source": "stories",
|
|
122
|
+
"compilable": false
|
|
123
|
+
},
|
|
124
|
+
"07375b5c56ac79927802e4336d7ae0810a8b408066590d4011ab6dca04412897": {
|
|
125
|
+
"title": "Mask",
|
|
126
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 40 }}>\n {/* ── Common Masks ── */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>Common Masks</h3>\n <div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Phone</p>\n <Input.Mask\n label=\"Phone\"\n mask=\"(99) 99999-9999\"\n />\n </div>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>CPF</p>\n <Input.Mask\n label=\"CPF\"\n mask=\"999.999.999-99\"\n />\n </div>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>CNPJ</p>\n <Input.Mask\n label=\"CNPJ\"\n mask=\"99.999.999/9999-99\"\n />\n </div>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Date</p>\n <Input.Mask\n label=\"Date\"\n mask=\"99/99/9999\"\n />\n </div>\n </div>\n </div>\n\n {/* ── States ── */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>States</h3>\n <div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Filled</p>\n <Input.Mask\n label=\"CPF\"\n mask=\"999.999.999-99\"\n defaultValue=\"12345678901\"\n />\n </div>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Error</p>\n <Input.Mask\n label=\"CPF\"\n mask=\"999.999.999-99\"\n status=\"error\"\n feedback=\"Invalid CPF\"\n feedbackIcon={<Icons name=\"error\" size={16} />}\n defaultValue=\"123\"\n />\n </div>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Disabled</p>\n <Input.Mask\n label=\"CPF\"\n mask=\"999.999.999-99\"\n disabled\n defaultValue=\"12345678901\"\n />\n </div>\n </div>\n </div>\n\n </div>",
|
|
127
|
+
"source": "stories",
|
|
128
|
+
"compilable": true
|
|
129
|
+
},
|
|
130
|
+
"0738342c14cdb11218bb04fca3fb2f8adc34b4d7bbe92ca4a57b934569d07089": {
|
|
131
|
+
"title": "Marketing Page Layout",
|
|
132
|
+
"code": "<div style={DEMO_PAGE_STYLE}>\n <Row gutter={GRID_GUTTER_SPACED} justify={GRID_JUSTIFY.center}>\n <Col span={12} md={10} lg={8}>\n <div style={DEMO_CHART_BLOCK_STYLE}>Hero Section</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12} sm={6} lg={4}>\n <div style={DEMO_WIDGET_BLOCK_STYLE}>Feature Card A</div>\n </Col>\n <Col span={12} sm={6} lg={4}>\n <div style={DEMO_WIDGET_BLOCK_STYLE}>Feature Card B</div>\n </Col>\n <Col span={12} sm={6} lg={4}>\n <div style={DEMO_WIDGET_BLOCK_STYLE}>Feature Card C</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED} align={GRID_ALIGN.middle}>\n <Col span={12} md={6}>\n <div style={DEMO_MAIN_BLOCK_STYLE}>Image / Illustration</div>\n </Col>\n <Col span={12} md={6}>\n <div style={DEMO_MAIN_BLOCK_STYLE}>Value Description</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12}>\n <div style={DEMO_TABLE_BLOCK_STYLE}>FAQ / Timeline</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12}>\n <div style={DEMO_FOOTER_BLOCK_STYLE}>Footer Links</div>\n </Col>\n </Row>\n </div>",
|
|
133
|
+
"source": "stories",
|
|
134
|
+
"compilable": true
|
|
135
|
+
},
|
|
136
|
+
"079ea5a6232196a5bc2822e0a2466a32b0fbfa7bfa8b3a800a5e3d65b6226e42": {
|
|
137
|
+
"title": "Canonical usage",
|
|
138
|
+
"code": "import type { ProgressColor } from '@1money/component-ui';",
|
|
139
|
+
"source": "canonical",
|
|
140
|
+
"compilable": true
|
|
141
|
+
},
|
|
142
|
+
"07a4236cc3c96aa1a14a8ab647fef5e00704b05042314ec5815451b3dd3b5ba0": {
|
|
143
|
+
"title": "Usage",
|
|
144
|
+
"code": "<Typography.Display size=\"lg\">Account Overview</Typography.Display>\n\n<Typography.Headline size=\"md\">Settlement Timeline</Typography.Headline>\n\n<Typography.Title size=\"sm\" strong>\n Customer Details\n</Typography.Title>\n\n<Typography.Body size=\"md\" as=\"p\">\n Semantic body copy keeps product text aligned with the shared typography scale.\n</Typography.Body>\n\n<Typography.Body size=\"md\" ellipsis={{ tooltip: true }} copyable>\n 0x814f0d3a9b2c7e1f5d6a8b4c3e2f1a0d9c8b7a6f749f\n</Typography.Body>\n\n<Typography.Label size=\"sm\" htmlFor=\"email\">\n Email\n</Typography.Label>\n\n<Typography.Link size=\"md\" href=\"https://ant.design/components/typography/\" target=\"_blank\">\n Typography reference\n</Typography.Link>",
|
|
145
|
+
"source": "readme",
|
|
146
|
+
"compilable": true
|
|
147
|
+
},
|
|
148
|
+
"0914d8f9442c252fe06be76431695e7673a02bd475b9bad034e5bc5dedf021ff": {
|
|
149
|
+
"title": "Canonical usage",
|
|
150
|
+
"code": "import type { TriggerContent } from '@1money/component-ui';",
|
|
151
|
+
"source": "canonical",
|
|
152
|
+
"compilable": true
|
|
153
|
+
},
|
|
154
|
+
"0a72ee3d63ec85bf631eafb8407f424d82c2c3d9da1437fb18801bec174133af": {
|
|
155
|
+
"title": "Five Items",
|
|
156
|
+
"code": "<Segment\n items={[\n { value: 'tab1', label: 'Label' },\n { value: 'tab2', label: 'Label' },\n { value: 'tab3', label: 'Label' },\n { value: 'tab4', label: 'Label' },\n { value: 'tab5', label: 'Label' },\n ]}\n />",
|
|
157
|
+
"source": "stories",
|
|
158
|
+
"compilable": true
|
|
159
|
+
},
|
|
160
|
+
"0c0afbe2548cd54cf225af79ea0be88e179d1592672834759ce9d5c4dd0d7476": {
|
|
161
|
+
"title": "Canonical usage",
|
|
162
|
+
"code": "import type { ValidateTrigger } from '@1money/component-ui';",
|
|
163
|
+
"source": "canonical",
|
|
164
|
+
"compilable": true
|
|
165
|
+
},
|
|
166
|
+
"0c268f0ec6b90f7352970d3db858c53364c60f2321af3c578568fc93082425bb": {
|
|
167
|
+
"title": "Canonical usage",
|
|
168
|
+
"code": "import { Tabs } from '@1money/components-ui';\n// or\nimport { Tabs } from '@1money/components-ui/Tabs';",
|
|
169
|
+
"source": "canonical",
|
|
170
|
+
"compilable": true
|
|
171
|
+
},
|
|
172
|
+
"0c7c04366337519cd94b38f5358dfa8f9eec80c8f289ba172def5f00e1a89ba3": {
|
|
173
|
+
"title": "Date Picker Story",
|
|
174
|
+
"code": "<ProForm\n {...args}\n initialValues={{ birthday: null, startDate: null }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormDatePicker\n name=\"birthday\"\n label=\"Birthday\"\n fieldProps={{ dateFormat: 'yy-mm-dd', showIcon: true }}\n />\n <ProFormDatePicker\n name=\"startDate\"\n label=\"Start Date\"\n fieldProps={{ dateFormat: 'mm/dd/yy', showButtonBar: true }}\n />\n </ProForm>",
|
|
175
|
+
"source": "stories",
|
|
176
|
+
"compilable": false
|
|
177
|
+
},
|
|
178
|
+
"0caa8e66489f540fb7f7969ee8d11091048124739a3d26ddcbc22e6ba567048f": {
|
|
179
|
+
"title": "No Submitter",
|
|
180
|
+
"code": "<ProForm {...args} submitter={false}>\n <ProFormText name=\"search\" label=\"Search\" placeholder=\"Type to search...\" />\n </ProForm>",
|
|
181
|
+
"source": "stories",
|
|
182
|
+
"compilable": false
|
|
183
|
+
},
|
|
184
|
+
"0df7d43ad53f6a66386ebad5a61eaaf088d0b9200a5fb97e51f6c4964aefd05e": {
|
|
185
|
+
"title": "Usage",
|
|
186
|
+
"code": "<Switch label=\"Notifications\" onChange={(checked) => console.log(checked)} />\n\n<Switch\n label=\"Dark Mode\"\n description=\"Enable dark theme across the app\"\n defaultChecked\n/>",
|
|
187
|
+
"source": "readme",
|
|
188
|
+
"compilable": true
|
|
189
|
+
},
|
|
190
|
+
"0eccd89d4848e5f239f204a25e0a5afbc08ea70a21eb5403bc608a3da6da85ad": {
|
|
191
|
+
"title": "Canonical usage",
|
|
192
|
+
"code": "<Drawer />",
|
|
193
|
+
"source": "canonical",
|
|
194
|
+
"compilable": true
|
|
195
|
+
},
|
|
196
|
+
"0f561819e24a9b6521e16b4a9238c0250741795e0996d3dca59f7fb9a111ddf4": {
|
|
197
|
+
"title": "Canonical usage",
|
|
198
|
+
"code": "<ProFormText />",
|
|
199
|
+
"source": "canonical",
|
|
200
|
+
"compilable": true
|
|
201
|
+
},
|
|
202
|
+
"0f978c9e8cebacc672d00e70889ae1fb18b0d5a39b29dc3e53b0d53ab04aedf1": {
|
|
203
|
+
"title": "Canonical usage",
|
|
204
|
+
"code": "import type { PaginationItem } from '@1money/component-ui';",
|
|
205
|
+
"source": "canonical",
|
|
206
|
+
"compilable": true
|
|
207
|
+
},
|
|
208
|
+
"11f60c018746e51bd823c5ce8039341a2200f2e132e62e58f99f23cfe2166cbd": {
|
|
209
|
+
"title": "All Variants",
|
|
210
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n {PROGRESS_COLORS.map(color => (\n <div key={color} style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <h3 style={{ margin: 0 }}>{color}</h3>\n {PROGRESS_PLACEMENTS.map(placement => (\n <div key={`${color}-${placement}`} style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <h4 style={{ margin: 0 }}>{placement}</h4>\n {PROGRESS_STATES.map(state => (\n <Progress\n {...args}\n key={`${color}-${placement}-${state}`}\n color={color}\n placement={placement}\n state={state}\n percent={state === 'success' ? 100 : state === 'not-started' ? 0 : 25}\n feedback={state === 'error' ? 'Feedback' : undefined}\n />\n ))}\n </div>\n ))}\n </div>\n ))}\n </div>",
|
|
211
|
+
"source": "stories",
|
|
212
|
+
"compilable": false
|
|
213
|
+
},
|
|
214
|
+
"123291e7b1b33126adc91e8204e4002c37c71a74eb5bfca67a4da71b9aec2f6a": {
|
|
215
|
+
"title": "Default",
|
|
216
|
+
"code": "{\n const [value, setValue] = useState<string | number | undefined>('btc');\n\n return (\n <Select\n {...args}\n value={value}\n onChange={(nextValue, option) => {\n setValue(nextValue as string | number | undefined);\n args.onChange?.(nextValue, option);\n }}\n />\n );\n }",
|
|
217
|
+
"source": "stories",
|
|
218
|
+
"compilable": false
|
|
219
|
+
},
|
|
220
|
+
"1238535c7f91f78671738663cda3f3ed6984f0c29a539c190b264b03630e6d69": {
|
|
221
|
+
"title": "Disabled",
|
|
222
|
+
"code": "<Dropdown {...args} disabled content={<MenuContent />}>\n <Button disabled>Disabled</Button>\n </Dropdown>",
|
|
223
|
+
"source": "stories",
|
|
224
|
+
"compilable": false
|
|
225
|
+
},
|
|
226
|
+
"124abe44040ddcd13aa6aad8f0dd237bae86b652e64005957c39324a2182b934": {
|
|
227
|
+
"title": "Import",
|
|
228
|
+
"code": "import { Typography } from '@1money/components-ui';\n// or\nimport { Typography } from '@1money/components-ui/Typography';",
|
|
229
|
+
"source": "readme",
|
|
230
|
+
"compilable": true
|
|
231
|
+
},
|
|
232
|
+
"144e248f0e0e1f5a681bdd8625add8d71643d3cca3f40bd840d914b057970d9a": {
|
|
233
|
+
"title": "All Variants",
|
|
234
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <div>\n <p style={{ marginBottom: 8 }}>Default</p>\n <Copy {...args} contained/>\n </div>\n <div>\n <Copy {...args} contained={false} />\n </div>\n </div>",
|
|
235
|
+
"source": "stories",
|
|
236
|
+
"compilable": false
|
|
237
|
+
},
|
|
238
|
+
"1549a41755f2d85818188654c648d16f6deea173c67c20999f5d5aa896204817": {
|
|
239
|
+
"title": "Canonical usage",
|
|
240
|
+
"code": "<ProFormTextArea />",
|
|
241
|
+
"source": "canonical",
|
|
242
|
+
"compilable": true
|
|
243
|
+
},
|
|
244
|
+
"159060bf345ad56b198657357005740fb6892291717bb99ada373f0a62cdcdc9": {
|
|
245
|
+
"title": "Canonical usage",
|
|
246
|
+
"code": "import type { ProgressProps } from '@1money/component-ui';",
|
|
247
|
+
"source": "canonical",
|
|
248
|
+
"compilable": true
|
|
249
|
+
},
|
|
250
|
+
"17aad2a9b23bb7f9a4768f770a9b9b5b06d74dab24c5200037505b0047ec2391": {
|
|
251
|
+
"title": "Controlled",
|
|
252
|
+
"code": "{\n const [open, setOpen] = useState(false);\n return (\n <div style={ANCHOR_WRAPPER_STYLE}>\n <button id=\"tooltip-controlled\">Anchor</button>\n <div style={CONTROL_ROW_STYLE}>\n <button onClick={() => setOpen(true)}>Open</button>\n <button onClick={() => setOpen(false)}>Close</button>\n <button onClick={() => setOpen((v) => !v)}>Toggle</button>\n </div>\n <Tooltip\n anchorSelect=\"#tooltip-controlled\"\n title=\"Controlled\"\n body=\"This tooltip is controlled externally.\"\n open={open}\n onOpenChange={setOpen}\n />\n </div>\n );\n }",
|
|
253
|
+
"source": "stories",
|
|
254
|
+
"compilable": true
|
|
255
|
+
},
|
|
256
|
+
"182c2782ef8a0d17a1da002048cb2f2ccd2469370cc302d126d075b4394df24b": {
|
|
257
|
+
"title": "Canonical usage",
|
|
258
|
+
"code": "import type { TriggerContentContext } from '@1money/component-ui';",
|
|
259
|
+
"source": "canonical",
|
|
260
|
+
"compilable": true
|
|
261
|
+
},
|
|
262
|
+
"1856eecdadbccda4468f63edff75ac60c746187efb7df1f7699540bec7ce4929": {
|
|
263
|
+
"title": "Canonical usage",
|
|
264
|
+
"code": "import type { PortalProps } from '@1money/component-ui';",
|
|
265
|
+
"source": "canonical",
|
|
266
|
+
"compilable": true
|
|
267
|
+
},
|
|
268
|
+
"1ad3863a7ccae5d72cf0b223899e03501462831ed16ae711d9f497c103c00008": {
|
|
269
|
+
"title": "Group Cell Options",
|
|
270
|
+
"code": "{\n const [value, setValue] = React.useState<string | number>('swift');\n\n const handleChange = (event: RadioChangeEvent) => {\n if (event.target.value !== undefined) {\n setValue(event.target.value);\n }\n };\n\n return (\n <RadioGroup\n value={value}\n variant=\"cell\"\n size=\"large\"\n alignment=\"left\"\n direction=\"horizontal\"\n onChange={handleChange}\n options={[\n {\n value: 'swift',\n label: 'SWIFT',\n description: 'Receive via bank rails',\n icon: 'swift',\n },\n {\n value: 'global',\n label: 'Global account',\n description: 'International settlement',\n icon: 'language',\n },\n ]}\n />\n );\n }",
|
|
271
|
+
"source": "stories",
|
|
272
|
+
"compilable": true
|
|
273
|
+
},
|
|
274
|
+
"1d0cc410e4f667fa13d9ad249ca801acda6fd51fc78c87c3b00209163c48df6b": {
|
|
275
|
+
"title": "Range Selection",
|
|
276
|
+
"code": "<Calendar\n label=\"Date Range\"\n selectionMode=\"range\"\n numberOfMonths={2}\n/>",
|
|
277
|
+
"source": "readme",
|
|
278
|
+
"compilable": true
|
|
279
|
+
},
|
|
280
|
+
"1d55eaab6342218fa931b8a061cfa308bbaa48c4ed6bcd3d40557b5b13b938e9": {
|
|
281
|
+
"title": "Password",
|
|
282
|
+
"code": "{\n const sizes = ['large', 'small'] as const;\n const valueTypes = ['Placeholder', 'Filled'] as const;\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 40 }}>\n {sizes.map((size) => (\n <div key={size}>\n <h3 style={{ margin: '0 0 16px', textTransform: 'capitalize' }}>{size}</h3>\n <div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n {valueTypes.map((vt) => (\n <div key={`default-${vt}`} style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>\n default / {vt}\n </p>\n <Input.Password\n size={size}\n label=\"Password\"\n feedback=\"Feedback\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n placeholder=\"Enter password\"\n defaultValue={vt === 'Filled' ? 'secretpass' : undefined}\n />\n </div>\n ))}\n {/* Error */}\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>error / Filled</p>\n <Input.Password\n size={size}\n status=\"error\"\n label=\"Password\"\n feedback=\"Password too short\"\n feedbackIcon={<Icons name=\"error\" size={16} />}\n placeholder=\"Enter password\"\n defaultValue=\"123\"\n />\n </div>\n {/* Disabled */}\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>disabled / Filled</p>\n <Input.Password\n size={size}\n disabled\n label=\"Password\"\n placeholder=\"Enter password\"\n defaultValue=\"secretpass\"\n />\n </div>\n </div>\n </div>\n ))}\n </div>\n );\n }",
|
|
283
|
+
"source": "stories",
|
|
284
|
+
"compilable": true
|
|
285
|
+
},
|
|
286
|
+
"1d6e4664da8b92ef6df17dcaa33fbb89d503e9119ff6b26e08b59365bdcf248f": {
|
|
287
|
+
"title": "Drawer Form Left",
|
|
288
|
+
"code": "<DrawerForm\n {...args}\n title=\"Settings\"\n placement=\"left\"\n width={400}\n trigger={<Button color=\"secondary\">Open from Left</Button>}\n onFinish={async (values) => {\n alert(JSON.stringify(values, null, 2));\n }}\n >\n <ProFormText name=\"theme\" label=\"Theme\" placeholder=\"dark / light\" />\n <ProFormText name=\"language\" label=\"Language\" placeholder=\"en / zh\" />\n <ProFormSwitch name=\"notifications\" label=\"Enable Notifications\" />\n </DrawerForm>",
|
|
289
|
+
"source": "stories",
|
|
290
|
+
"compilable": false
|
|
291
|
+
},
|
|
292
|
+
"1e2ce5743dcd5a069489baf67169280a5ebfc7ed959fc8cb1f7f52f846c1b544": {
|
|
293
|
+
"title": "Text Variant",
|
|
294
|
+
"code": "<div style={columnStyle}>\n {BUTTON_SIZES.map((size) => (\n <div key={size}>\n <h3 style={sectionHeaderStyle}>Text - {size}</h3>\n <div style={rowStyle}>\n <Button {...args} variant={BUTTON_VARIANT.text} size={size}>\n Button\n </Button>\n <Button {...args} variant={BUTTON_VARIANT.text} size={size} disabled>\n Disabled\n </Button>\n <Button {...args} variant={BUTTON_VARIANT.text} size={size} loading>\n Loading\n </Button>\n </div>\n </div>\n ))}\n </div>",
|
|
295
|
+
"source": "stories",
|
|
296
|
+
"compilable": false
|
|
297
|
+
},
|
|
298
|
+
"1eb0a331971caa6d8ea905cd7fb9c8e846ff5dbc535c68ea157133495806f4e7": {
|
|
299
|
+
"title": "Canonical usage",
|
|
300
|
+
"code": "import { Navigation } from '@1money/components-ui';\n// or\nimport { Navigation } from '@1money/components-ui/Navigation';",
|
|
301
|
+
"source": "canonical",
|
|
302
|
+
"compilable": true
|
|
303
|
+
},
|
|
304
|
+
"1ecd90179c2ebd2ed33c0063235f9367b50ed37a7eba1d4c6aa1973033ed554c": {
|
|
305
|
+
"title": "Multi Select",
|
|
306
|
+
"code": "{\n const [selected, setSelected] = useState<string[]>(['Apple', 'Cherry', 'Fig']);\n\n const toggle = (item: string) => {\n setSelected((prev) =>\n prev.includes(item) ? prev.filter((v) => v !== item) : [...prev, item],\n );\n };\n\n return (\n <Dropdown\n {...args}\n overlayStyle={{ minWidth: 260 }}\n content={\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {selected.length > 0 && (\n <div style={selectedBarStyle}>\n <span style={{ fontSize: 14, fontWeight: 500, color: '#131313' }}>\n {selected.length} selected\n </span>\n <button\n type=\"button\"\n style={clearAllBtnStyle}\n onClick={() => setSelected([])}\n >\n <Icons name=\"cross\" size={16} color=\"#ae0000\" />\n Clear all\n </button>\n </div>\n )}\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n {SIMPLE_ITEMS.map((item) => (\n <DropdownItem\n key={item}\n title={item}\n selected={selected.includes(item)}\n onClick={() => toggle(item)}\n />\n ))}\n </div>\n </div>\n }\n >\n <Button>\n {selected.length > 0 ? `${selected.length} selected` : 'Select items'}\n </Button>\n </Dropdown>\n );\n }",
|
|
307
|
+
"source": "stories",
|
|
308
|
+
"compilable": false
|
|
309
|
+
},
|
|
310
|
+
"216b625401b1ee29a2c8f02427f776e18dd670858e53fd87ea414473832ba9c9": {
|
|
311
|
+
"title": "With Title",
|
|
312
|
+
"code": "<div style={ANCHOR_WRAPPER_STYLE}>\n <button id=\"tooltip-title\">Hover me</button>\n <Tooltip {...args} anchorSelect=\"#tooltip-title\" />\n </div>",
|
|
313
|
+
"source": "stories",
|
|
314
|
+
"compilable": false
|
|
315
|
+
},
|
|
316
|
+
"2179af6a270bc4891095e10b5a182d62e7767a442d309c3641e1cfea330c5d5f": {
|
|
317
|
+
"title": "Import",
|
|
318
|
+
"code": "import { Popconfirm } from '@1money/components-ui';\nimport '@1money/components-ui/index.css';",
|
|
319
|
+
"source": "readme",
|
|
320
|
+
"compilable": true
|
|
321
|
+
},
|
|
322
|
+
"21e145efeaada4cb2c7e716099dd9261f34d38e9df00905994175c1a5e9aabb5": {
|
|
323
|
+
"title": "Dynamic Data",
|
|
324
|
+
"code": "{\n const [count, setCount] = useState(100);\n const data = generateData(count);\n\n return (\n <div>\n <div style={{ marginBottom: 12, display: 'flex', gap: 8 }}>\n <button style={btnStyle} onClick={() => setCount((c) => c + 100)}>\n Add 100 items ({count} total)\n </button>\n <button style={btnStyle} onClick={() => setCount((c) => Math.max(0, c - 100))}>\n Remove 100 items\n </button>\n <button style={btnStyle} onClick={() => setCount(0)}>\n Clear\n </button>\n </div>\n <div style={containerStyle}>\n <VirtualList\n data={data}\n height={300}\n itemHeight={30}\n itemKey=\"id\"\n >\n {(item: Item) => (\n <div style={itemStyle(item.height)}>\n <span>Item {item.id}</span>\n </div>\n )}\n </VirtualList>\n </div>\n </div>\n );\n }",
|
|
325
|
+
"source": "stories",
|
|
326
|
+
"compilable": true
|
|
327
|
+
},
|
|
328
|
+
"21eb2cf21cf8e39cfc4a35ce8e3d25f28e8ecc6de0c0dec1707f725f281dc4fa": {
|
|
329
|
+
"title": "Usage",
|
|
330
|
+
"code": "<Cell iconStart=\"security\" iconEnd=\"arrowRight\" disabled>\n Authenticator app\n</Cell>",
|
|
331
|
+
"source": "readme",
|
|
332
|
+
"compilable": true
|
|
333
|
+
},
|
|
334
|
+
"21fc19a127fa75a33f2fedc609d8be2d2db4e044ec38917a3b2b7d048b68d7d3": {
|
|
335
|
+
"title": "All Variants",
|
|
336
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n {LINK_COLORS.map((color) => (\n <div key={color}>\n <h3 style={{ marginBottom: 12, textTransform: 'capitalize' }}>{color}</h3>\n {LINK_SIZES.map((size) => (\n <div\n key={`${color}-${size}`}\n style={{\n display: 'flex',\n gap: 48,\n alignItems: 'center',\n marginBottom: 8,\n }}\n >\n <span style={{ width: 64, fontSize: 12, textTransform: 'capitalize' }}>{size}</span>\n {STATES.map((state) => (\n <div\n key={`${color}-${size}-${state}`}\n style={{ display: 'flex', flexDirection: 'column', gap: 4 }}\n >\n <span style={{ fontSize: 10, color: '#888', textTransform: 'capitalize' }}>\n {state}\n </span>\n <Link\n {...args}\n color={color}\n size={size}\n disabled={state === 'disabled'}\n >\n Link\n </Link>\n </div>\n ))}\n </div>\n ))}\n </div>\n ))}\n </div>",
|
|
337
|
+
"source": "stories",
|
|
338
|
+
"compilable": false
|
|
339
|
+
},
|
|
340
|
+
"22701739de59f3ff8757908dd59dec110a126e3b95861d3ad523cb1552deeed7": {
|
|
341
|
+
"title": "All Variants",
|
|
342
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n {VARIANTS.map((variant) => (\n <div key={variant}>\n <h3 style={{ marginBottom: 12 }}>{variant}</h3>\n <Empty {...args} variant={variant} />\n </div>\n ))}\n </div>",
|
|
343
|
+
"source": "stories",
|
|
344
|
+
"compilable": false
|
|
345
|
+
},
|
|
346
|
+
"22edc8d5014aba685af83f60b94c089e387cc95677d233691190f5e2d031e262": {
|
|
347
|
+
"title": "Dotted",
|
|
348
|
+
"code": "<div>\n <p>Lorem ipsum dolor sit amet.</p>\n <Divider variant=\"dotted\" />\n <p>Lorem ipsum dolor sit amet.</p>\n <Divider variant=\"dotted\">Dotted</Divider>\n <p>Lorem ipsum dolor sit amet.</p>\n </div>",
|
|
349
|
+
"source": "stories",
|
|
350
|
+
"compilable": true
|
|
351
|
+
},
|
|
352
|
+
"231708504f9ec34c52004329a3bb5c026dbda32f45ef5a642b02861df747100a": {
|
|
353
|
+
"title": "Loading",
|
|
354
|
+
"code": "<div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Large</p>\n <Input\n label=\"Label\"\n placeholder=\"Loading...\"\n loading\n />\n </div>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Small</p>\n <Input\n size=\"small\"\n label=\"Label\"\n placeholder=\"Loading...\"\n loading\n />\n </div>\n </div>",
|
|
355
|
+
"source": "stories",
|
|
356
|
+
"compilable": true
|
|
357
|
+
},
|
|
358
|
+
"23bda2a849d16045cdaa73e374c204db1099cbca913ff14a7ef5f02f346f50b6": {
|
|
359
|
+
"title": "Usage",
|
|
360
|
+
"code": "// Basic\n<Button color=\"primary\" size=\"medium\">Submit</Button>\n\n// With icons\n<Button color=\"secondary\" iconStart={<Icons name=\"add\" size={16} />}>\n Add Item\n</Button>\n\n<Button color=\"grey\" iconEnd={<Icons name=\"arrowRight\" size={16} />}>\n Next\n</Button>\n\n// Loading state\n<Button loading>Processing...</Button>\n\n// Disabled\n<Button disabled>Unavailable</Button>",
|
|
361
|
+
"source": "readme",
|
|
362
|
+
"compilable": true
|
|
363
|
+
},
|
|
364
|
+
"24d5e46e111c329ee3e4214816d4f82614fd465fefb80ab345960c8ddc0bcef3": {
|
|
365
|
+
"title": "Usage",
|
|
366
|
+
"code": "<Segment\n defaultValue=\"overview\"\n items={[\n { value: 'overview', label: 'Overview' },\n { value: 'transactions', label: 'Transactions' },\n { value: 'analytics', label: 'Analytics' },\n ]}\n onChange={(value) => console.log('Selected:', value)}\n/>",
|
|
367
|
+
"source": "readme",
|
|
368
|
+
"compilable": true
|
|
369
|
+
},
|
|
370
|
+
"25481ee92272cd2b9cdd59f68f847651b99333df541c23495f75abe261b5686c": {
|
|
371
|
+
"title": "Upload Field",
|
|
372
|
+
"code": "<ProForm\n {...args}\n onFinish={(values) => {\n const files = values.attachment as FileList | null;\n alert(files ? `Selected: ${Array.from(files).map(f => f.name).join(', ')}` : 'No file');\n }}\n >\n <ProFormUpload\n name=\"attachment\"\n label=\"Attachment\"\n fieldProps={{ accept: '.pdf,.png,.jpg', multiple: true, buttonLabel: 'Choose Files' }}\n />\n </ProForm>",
|
|
373
|
+
"source": "stories",
|
|
374
|
+
"compilable": false
|
|
375
|
+
},
|
|
376
|
+
"25966efe47cbb331081aa62151a5d80e7324bfce0b4a1b82e323559d9349cd54": {
|
|
377
|
+
"title": "Canonical usage",
|
|
378
|
+
"code": "<Select />",
|
|
379
|
+
"source": "canonical",
|
|
380
|
+
"compilable": true
|
|
381
|
+
},
|
|
382
|
+
"259f23e43a9bab9ac08664151900a9dc9f3cc181adccdacc7a28bd34ab37be7e": {
|
|
383
|
+
"title": "Form Layout Patterns",
|
|
384
|
+
"code": "<div style={DEMO_PAGE_STYLE}>\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12}>\n <div style={DEMO_HEADER_BLOCK_STYLE}>Form Header</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12} md={3}>\n <div style={DEMO_FORM_LABEL_STYLE}>Label: Company Name</div>\n </Col>\n <Col span={12} md={9}>\n <div style={DEMO_FORM_FIELD_STYLE}>Input Field (span 9)</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12} md={3}>\n <div style={DEMO_FORM_LABEL_STYLE}>Label: Email</div>\n </Col>\n <Col span={12} md={9}>\n <div style={DEMO_FORM_FIELD_STYLE}>Input Field (span 9)</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12} md={{ span: 9, offset: 3 }}>\n <div style={DEMO_FORM_FIELD_STYLE}>Inline Help / Validation Message (offset 3)</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12} md={{ span: 9, offset: 3 }}>\n <Row gutter={GRID_GUTTER_COMPACT} justify={GRID_JUSTIFY.end}>\n <Col span={6} md={4} lg={3}>\n <div style={DEMO_FORM_ACTION_STYLE}>Secondary Action</div>\n </Col>\n <Col span={6} md={4} lg={3}>\n <div style={DEMO_FORM_ACTION_STYLE}>Primary Action</div>\n </Col>\n </Row>\n </Col>\n </Row>\n </div>",
|
|
385
|
+
"source": "stories",
|
|
386
|
+
"compilable": true
|
|
387
|
+
},
|
|
388
|
+
"25c5df1e3c4d654a48016148beb792280ff11859280c9f51c6c226b15ab3becf": {
|
|
389
|
+
"title": "Primary Icons",
|
|
390
|
+
"code": "{\n const handleCopy = (el: string) => {\n copy(el);\n };\n\n return <div style={{ display: 'grid', gap: 24, gridTemplateColumns: 'repeat(auto-fill, minmax(100px, 1fr))' }}>\n {/* Primary Icons */}\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='deposit' />\")}>\n <Icons {...args} name='deposit' />\n <span>Deposit</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='withdrawal' />\")}>\n <Icons {...args} name='withdrawal' />\n <span>Withdrawal</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='conversion' />\")}>\n <Icons {...args} name='conversion' />\n <span>Conversion</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='mintToken' />\")}>\n <Icons {...args} name='mintToken' />\n <span>MintToken</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='burnToken' />\")}>\n <Icons {...args} name='burnToken' />\n <span>BurnToken</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='accountLocked' />\")}>\n <Icons {...args} name='accountLocked' />\n <span>Account Locked</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='pending' />\")}>\n <Icons {...args} name='pending' />\n <span>Pending</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='success' />\")}>\n <Icons {...args} name='success' />\n <span>Success</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='fail' />\")}>\n <Icons {...args} name='fail' />\n <span>Fail</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='error' />\")}>\n <Icons {...args} name='error' />\n <span>Error</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='statusSuccess' color='#1F580033' />\")}>\n <Icons {...args} name='statusSuccess' color='#1F580033' />\n <span>Status Success</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='statusFail' color='#AE00001A' />\")}>\n <Icons {...args} name='statusFail' color='#AE00001A' />\n <span>Status Fail</span>\n </CopyIconBox>\n {/* Menu Icons */}\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='dashboard' />\")}>\n <Icons {...args} name='dashboard' />\n <span>Dashboard</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='digitalAsset' />\")}>\n <Icons {...args} name='digitalAsset' />\n <span>Digital Asset</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='addressBook' />\")}>\n <Icons {...args} name='addressBook' />\n <span>Address Book</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='linkedBankAccounts' />\")}>\n <Icons {...args} name='linkedBankAccounts' />\n <span>Linked Bank Accounts</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='wire' />\")}>\n <Icons {...args} name='wire' />\n <span>Wire</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='swift' />\")}>\n <Icons {...args} name='swift' />\n <span>Swift</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='account' />\")}>\n <Icons {...args} name='account' />\n <span>Account</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='profile' />\")}>\n <Icons {...args} name='profile' />\n <span>Profile</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='security' />\")}>\n <Icons {...args} name='security' />\n <span>Security</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='logout' />\")}>\n <Icons {...args} name='logout' />\n <span>Logout</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='portfolio' />\")}>\n <Icons {...args} name='portfolio' />\n <span>Portfolio</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='home' />\")}>\n <Icons {...args} name='home' />\n <span>Home</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='convert' />\")}>\n <Icons {...args} name='convert' />\n <span>Convert</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='withdraw' />\")}>\n <Icons {...args} name='withdraw' />\n <span>Withdraw</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='send' />\")}>\n <Icons {...args} name='send' />\n <span>Send</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='menuDeposit' />\")}>\n <Icons {...args} name='menuDeposit' />\n <span>Menu Deposit</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='company' />\")}>\n <Icons {...args} name='company' />\n <span>Company</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='parties' />\")}>\n <Icons {...args} name='parties' />\n <span>Parties</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='transactions' />\")}>\n <Icons {...args} name='transactions' />\n <span>Transactions</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='fiat' />\")}>\n <Icons {...args} name='fiat' />\n <span>Fiat</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='money' />\")}>\n <Icons {...args} name='money' />\n <span>Money</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='sendCrypto' />\")}>\n <Icons {...args} name='sendCrypto' />\n <span>Send Crypto</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='businessAccount' />\")}>\n <Icons {...args} name='businessAccount' />\n <span>Business Portfolio</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='individualAccount' />\")}>\n <Icons {...args} name='individualAccount' />\n <span>Identity</span>\n </CopyIconBox>\n\n {/* Functional Icons */}\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='arrowUp' />\")}>\n <Icons {...args} name='arrowUp' />\n <span>Arrow Up</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='arrowDown' />\")}>\n <Icons {...args} name='arrowDown' />\n <span>Arrow Down</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='arrowLeft' />\")}>\n <Icons {...args} name='arrowLeft' />\n <span>Arrow Left</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='arrowRight' />\")}>\n <Icons {...args} name='arrowRight' />\n <span>Arrow Right</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='add' />\")}>\n <Icons {...args} name='add' />\n <span>Add</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='minus' />\")}>\n <Icons {...args} name='minus' />\n <span>Minus</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='cross' />\")}>\n <Icons {...args} name='cross' />\n <span>Cross</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='more' />\")}>\n <Icons {...args} name='more' />\n <span>More</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='chevronDown' />\")}>\n <Icons {...args} name='chevronDown' />\n <span>Chevron Down</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='chevronUp' />\")}>\n <Icons {...args} name='chevronUp' />\n <span>Chevron Up</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='chevronLeft' />\")}>\n <Icons {...args} name='chevronLeft' />\n <span>Chevron Left</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='chevronRight' />\")}>\n <Icons {...args} name='chevronRight' />\n <span>Chevron Right</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='sort' />\")}>\n <Icons {...args} name='sort' />\n <span>Sort Default</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='sort' status='ascend' />\")}>\n <Icons {...args} name='sort' status='ascend' />\n <span>Sort Ascend</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='sort' status='descend' />\")}>\n <Icons {...args} name='sort' status='descend' />\n <span>Sort Descend</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='collapse' />\")}>\n <Icons {...args} name='collapse' />\n <span>Collapse</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='extend' />\")}>\n <Icons {...args} name='extend' />\n <span>Extend</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='spinner' />\")}>\n <Icons {...args} name='spinner' />\n <span>Spinner</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='check' />\")}>\n <Icons {...args} name='check' />\n <span>Check</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='remove' />\")}>\n <Icons {...args} name='remove' />\n <span>Remove</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='pix' />\")}>\n <Icons {...args} name='pix' />\n <span>PIX</span>\n </CopyIconBox>\n {/* System Icons */}\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='info' />\")}>\n <Icons {...args} name='info' />\n <span>Info</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='notifications' />\")}>\n <Icons {...args} name='notifications' />\n <span>Notifications</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='favorite' />\")}>\n <Icons {...args} name='favorite' />\n <span>Favorite</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='transferHistory' />\")}>\n <Icons {...args} name='transferHistory' />\n <span>Transfer History</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='support' />\")}>\n <Icons {...args} name='support' />\n <span>Support</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='help' />\")}>\n <Icons {...args} name='help' />\n <span>Help</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='language' />\")}>\n <Icons {...args} name='language' />\n <span>Language</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='share' />\")}>\n <Icons {...args} name='share' />\n <span>Share</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='products' />\")}>\n <Icons {...args} name='products' />\n <span>Products</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='hub' />\")}>\n <Icons {...args} name='hub' />\n <span>Hub</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='systemSecurity' />\")}>\n <Icons {...args} name='systemSecurity' />\n <span>System Security</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='fees' />\")}>\n <Icons {...args} name='fees' />\n <span>Fees</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='settings' />\")}>\n <Icons {...args} name='settings' />\n <span>Settings</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='id' />\")}>\n <Icons {...args} name='id' />\n <span>ID</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='viewBalance' />\")}>\n <Icons {...args} name='viewBalance' />\n <span>View Balance</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='hideBalance' />\")}>\n <Icons {...args} name='hideBalance' />\n <span>Hide Balance</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='privacy' />\")}>\n <Icons {...args} name='privacy' />\n <span>Privacy</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='card' />\")}>\n <Icons {...args} name='card' />\n <span>Card</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='coin' />\")}>\n <Icons {...args} name='coin' />\n <span>Coin</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='wallet' />\")}>\n <Icons {...args} name='wallet' />\n <span>Wallet</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='email' />\")}>\n <Icons {...args} name='email' />\n <span>Email</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='rewards' />\")}>\n <Icons {...args} name='rewards' />\n <span>Rewards</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='time' />\")}>\n <Icons {...args} name='time' />\n <span>Time</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='location' />\")}>\n <Icons {...args} name='location' />\n <span>Location</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='calendar' />\")}>\n <Icons {...args} name='calendar' />\n <span>Calendar</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='securityCheck' />\")}>\n <Icons {...args} name='securityCheck' />\n <span>Security Check</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='devices' />\")}>\n <Icons {...args} name='devices' />\n <span>Devices</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='images' />\")}>\n <Icons {...args} name='images' />\n <span>Images</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='bank' />\")}>\n <Icons {...args} name='bank' />\n <span>Bank</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='coins' />\")}>\n <Icons {...args} name='coins' />\n <span>Coins</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='earn' />\")}>\n <Icons {...args} name='earn' />\n <span>Earn</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='scan' />\")}>\n <Icons {...args} name='scan' />\n <span>Scan</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='search' />\")}>\n <Icons {...args} name='search' />\n <span>Search</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='maintenance' />\")}>\n <Icons {...args} name='maintenance' />\n <span>Maintenance</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='editFile' />\")}>\n <Icons {...args} name='editFile' />\n <span>Edit File</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='document' />\")}>\n <Icons {...args} name='document' />\n <span>Document</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='upload' />\")}>\n <Icons {...args} name='upload' />\n <span>Upload</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='gift' />\")}>\n <Icons {...args} name='gift' />\n <span>Gift</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='filter' />\")}>\n <Icons {...args} name='filter' />\n <span>Filter</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='expand' />\")}>\n <Icons {...args} name='expand' />\n <span>Expand</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='systemCollapse' />\")}>\n <Icons {...args} name='systemCollapse' />\n <span>System Collapse</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='refresh' />\")}>\n <Icons {...args} name='refresh' />\n <span>Refresh</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='transfer' />\")}>\n <Icons {...args} name='transfer' />\n <span>Transfer</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='link' />\")}>\n <Icons {...args} name='link' />\n <span>Link</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='save' />\")}>\n <Icons {...args} name='save' />\n <span>Save</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='like' />\")}>\n <Icons {...args} name='like' />\n <span>Like</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='dislike' />\")}>\n <Icons {...args} name='dislike' />\n <span>Dislike</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='copy' />\")}>\n <Icons {...args} name='copy' />\n <span>Copy</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='mobile' />\")}>\n <Icons {...args} name='mobile' />\n <span>Mobile</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='chat' />\")}>\n <Icons {...args} name='chat' />\n <span>Chat</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='swap' />\")}>\n <Icons {...args} name='swap' />\n <span>Swap</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='clock' />\")}>\n <Icons {...args} name='clock' />\n <span>Clock</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='desktop' />\")}>\n <Icons {...args} name='desktop' />\n <span>Desktop</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='usd' />\")}>\n <Icons {...args} name='usd' />\n <span>USD</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='eur' />\")}>\n <Icons {...args} name='eur' />\n <span>EUR</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='gbp' />\")}>\n <Icons {...args} name='gbp' />\n <span>GBP</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='jpy' />\")}>\n <Icons {...args} name='jpy' />\n <span>JPY</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='cny' />\")}>\n <Icons {...args} name='cny' />\n <span>CNY</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='google' />\")}>\n <Icons {...args} name='google' />\n <span>Google</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='apple' />\")}>\n <Icons {...args} name='apple' />\n <span>Apple</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='twitter' />\")}>\n <Icons {...args} name='twitter' />\n <span>Twitter</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='linkedIn' />\")}>\n <Icons {...args} name='linkedIn' />\n <span>LinkedIn</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='passkey' />\")}>\n <Icons {...args} name='passkey' />\n <span>Passkey</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='ach' />\")}>\n <Icons {...args} name='ach' />\n <span>ACH</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='apiKey' />\")}>\n <Icons {...args} name='apiKey' />\n <span>APIKey</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='brokenLink' />\")}>\n <Icons {...args} name='brokenLink' />\n <span>Broken Link</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='pause' />\")}>\n <Icons {...args} name='pause' />\n <span>Pause</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='autoConversionRules' />\")}>\n <Icons {...args} name='autoConversionRules' />\n <span>Auto Conversion Rules</span>\n </CopyIconBox>\n </div>;\n }",
|
|
391
|
+
"source": "stories",
|
|
392
|
+
"compilable": false
|
|
393
|
+
},
|
|
394
|
+
"25d3c27d4d446cfc5d638fc4025c31ea8026f219ad274ed16cbc32bef414ba5c": {
|
|
395
|
+
"title": "Checked",
|
|
396
|
+
"code": "<Switch {...args} label=\"Label\" defaultChecked />",
|
|
397
|
+
"source": "stories",
|
|
398
|
+
"compilable": false
|
|
399
|
+
},
|
|
400
|
+
"25f9f9086f93b5fe128992d1c388b0c9cd77df643010c4c5cc403527a80b7528": {
|
|
401
|
+
"title": "Canonical usage",
|
|
402
|
+
"code": "<QueryFilter />",
|
|
403
|
+
"source": "canonical",
|
|
404
|
+
"compilable": true
|
|
405
|
+
},
|
|
406
|
+
"26594eacf431540e6380fac7c7ff44f09d414de2052860d55187217317c0cbb1": {
|
|
407
|
+
"title": "Field Set",
|
|
408
|
+
"code": "<ProForm\n {...args}\n initialValues={{ phone: ['+1', '555-0100'] }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProForm.FieldSet name=\"phone\" label=\"Phone Number\" gap={8}>\n <Input placeholder=\"Area code\" style={{ width: 80 }} />\n <Input placeholder=\"Number\" style={{ width: 200 }} />\n </ProForm.FieldSet>\n <ProFormText name=\"email\" label=\"Email\" />\n </ProForm>",
|
|
409
|
+
"source": "stories",
|
|
410
|
+
"compilable": false
|
|
411
|
+
},
|
|
412
|
+
"267f5a3ff897958d20e8cf8872f84ac550344f94b274b43885d55f28b7e9fb62": {
|
|
413
|
+
"title": "Drawer Form Controlled",
|
|
414
|
+
"code": "{\n const [open, setOpen] = useState(false);\n\n return (\n <div style={{ display: 'flex', gap: 8 }}>\n <Button color=\"primary\" onClick={() => setOpen(true)}>Open (Controlled)</Button>\n <Button color=\"secondary\" onClick={() => setOpen(false)}>Close</Button>\n <DrawerForm\n {...args}\n open={open}\n onOpenChange={setOpen}\n title=\"Edit Profile\"\n width={520}\n initialValues={{ name: 'Alice', role: 'Admin' }}\n onFinish={async (values) => {\n alert(JSON.stringify(values, null, 2));\n }}\n >\n <ProFormText name=\"name\" label=\"Name\" rules={[{ required: true }]} />\n <ProFormText name=\"role\" label=\"Role\" />\n </DrawerForm>\n </div>\n );\n }",
|
|
415
|
+
"source": "stories",
|
|
416
|
+
"compilable": false
|
|
417
|
+
},
|
|
418
|
+
"2747faa4403a689de6d4dcfed855783441d64415a45749a3540e57922479641a": {
|
|
419
|
+
"title": "Dynamic List",
|
|
420
|
+
"code": "<ProForm\n {...args}\n initialValues={{\n members: [\n { name: 'Alice', role: 'Admin' },\n { name: 'Bob', role: 'Member' },\n ],\n }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormList name=\"members\" label=\"Team Members\" min={1} max={5}>\n {(fields) =>\n fields.map(({ name, key }) => (\n <div key={key} style={{ display: 'flex', gap: 8, alignItems: 'flex-end' }}>\n <ProFormText name={`${name}.name`} label=\"Name\" placeholder=\"Name\" />\n <ProFormText name={`${name}.role`} label=\"Role\" placeholder=\"Role\" />\n </div>\n ))\n }\n </ProFormList>\n </ProForm>",
|
|
421
|
+
"source": "stories",
|
|
422
|
+
"compilable": false
|
|
423
|
+
},
|
|
424
|
+
"27d6aac7d1c034f300fff363095f94668ca8ac06615c0e779fc6f83aba43ab8e": {
|
|
425
|
+
"title": "Cell Size Matrix",
|
|
426
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>\n <div>\n <h3 style={{ marginBottom: 12 }}>Alignment Left</h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <Radio\n checked\n variant=\"cell\"\n size=\"large\"\n alignment=\"left\"\n icon=\"swift\"\n label=\"Large\"\n description=\"Description\"\n style={{ width: 300 }}\n />\n <Radio\n checked\n variant=\"cell\"\n size=\"medium\"\n alignment=\"left\"\n icon=\"swift\"\n label=\"Medium\"\n style={{ width: 180 }}\n />\n <Radio\n checked\n variant=\"cell\"\n size=\"small\"\n alignment=\"left\"\n icon=\"swift\"\n label=\"Small\"\n style={{ width: 180 }}\n />\n </div>\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>Alignment Center</h3>\n <div style={{ display: 'flex', gap: 12, alignItems: 'flex-start', flexWrap: 'wrap' }}>\n <Radio\n checked\n variant=\"cell\"\n size=\"large\"\n alignment=\"center\"\n icon=\"language\"\n tag=\"Tag\"\n label=\"Large\"\n description=\"Description\"\n style={{ width: 200 }}\n />\n <Radio\n checked\n variant=\"cell\"\n size=\"medium\"\n alignment=\"center\"\n icon=\"usd\"\n label=\"Medium\"\n style={{ width: 200 }}\n />\n <Radio\n checked\n variant=\"cell\"\n size=\"small\"\n alignment=\"center\"\n icon=\"usd\"\n label=\"Small\"\n style={{ width: 200 }}\n />\n </div>\n </div>\n </div>",
|
|
427
|
+
"source": "stories",
|
|
428
|
+
"compilable": true
|
|
429
|
+
},
|
|
430
|
+
"283bf6fd5eff1ebe8a6ed952b6bd855c824f627f386f40f0a520e4ca0814982e": {
|
|
431
|
+
"title": "Notification Icons",
|
|
432
|
+
"code": "{\n const handleCopy = (el: string) => {\n copy(el);\n };\n return <div style={{ display: 'grid', gap: 24, gridTemplateColumns: 'repeat(auto-fill, minmax(200px, 1fr))' }}>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='notificationInfo' />\")}>\n <Icons {...args} name='notificationInfo' size={32} />\n <span>notificationInfo</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='notificationWarning' />\")}>\n <Icons {...args} name='notificationWarning' size={32} />\n <span>notificationWarning</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='notificationSuccess' />\")}>\n <Icons {...args} name='notificationSuccess' size={32} />\n <span>notificationSuccess</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='notificationError' />\")}>\n <Icons {...args} name='notificationError' size={32} />\n <span>notificationError</span>\n </CopyIconBox>\n </div>;\n }",
|
|
433
|
+
"source": "stories",
|
|
434
|
+
"compilable": false
|
|
435
|
+
},
|
|
436
|
+
"285dd42c2ca63f8f2eb21d39bf4dd6649d9b1383834a94ba626d242b9acc24a1": {
|
|
437
|
+
"title": "Import",
|
|
438
|
+
"code": "import { Upload, UploadFileBar } from '@1money/components-ui';\n// or\nimport { Upload, UploadFileBar } from '@1money/components-ui/Upload';",
|
|
439
|
+
"source": "readme",
|
|
440
|
+
"compilable": true
|
|
441
|
+
},
|
|
442
|
+
"28dcbb40d407a6c3c48dcdb51a06d11466a26d831324f8c583ab6b877bc5eb7d": {
|
|
443
|
+
"title": "Vertical Layout",
|
|
444
|
+
"code": "<Space direction={SPACE_DIRECTION.vertical} size={SPACE_SIZE.large}>\n <div>Top</div>\n <div>Bottom</div>\n</Space>",
|
|
445
|
+
"source": "readme",
|
|
446
|
+
"compilable": true
|
|
447
|
+
},
|
|
448
|
+
"2a00b4740e301b8a7ac79f978053cc5d0d9e28704a3496719ce12b34448697d2": {
|
|
449
|
+
"title": "Import",
|
|
450
|
+
"code": "import { Accordion } from '@1money/components-ui';\n// or\nimport { Accordion } from '@1money/components-ui/Accordion';",
|
|
451
|
+
"source": "readme",
|
|
452
|
+
"compilable": true
|
|
453
|
+
},
|
|
454
|
+
"2ab81b696087edd4949bb8a066c36ceb58197f8a8d1e3ab2f387eb6275fe724e": {
|
|
455
|
+
"title": "Canonical usage",
|
|
456
|
+
"code": "import type { VirtualListScrollInfo } from '@1money/component-ui';",
|
|
457
|
+
"source": "canonical",
|
|
458
|
+
"compilable": true
|
|
459
|
+
},
|
|
460
|
+
"2b97ea480bdd9e78ecabd54bc4c254a48c281f6121a50a054418593c9c9d8f5c": {
|
|
461
|
+
"title": "Middle Ellipsis",
|
|
462
|
+
"code": "<div style={{ ...STORY_LAYOUT_STYLE, maxWidth: 480 }}>\n <div style={ROW_STYLE}>\n <Typography.Label size=\"md\" color=\"default-secondary\">Sender ID</Typography.Label>\n <div style={CONSTRAINED_STYLE}>\n <Typography.Body size=\"md\" ellipsis={{ tooltip: true }} copyable>\n {SENDER_ID}\n </Typography.Body>\n </div>\n </div>\n <div style={ROW_STYLE}>\n <Typography.Label size=\"md\" color=\"default-secondary\">Recipient name</Typography.Label>\n <Typography.Body size=\"md\">Apextech LLC</Typography.Body>\n </div>\n <div style={ROW_STYLE}>\n <Typography.Label size=\"md\" color=\"default-secondary\">Recipient ID</Typography.Label>\n <div style={CONSTRAINED_STYLE}>\n <Typography.Body size=\"md\" ellipsis={{ tooltip: true }} copyable>\n {RECIPIENT_ID}\n </Typography.Body>\n </div>\n </div>\n </div>",
|
|
463
|
+
"source": "stories",
|
|
464
|
+
"compilable": true
|
|
465
|
+
},
|
|
466
|
+
"2c58c83426bf77e0fd761deff8e74853f41c3213c0b293c97d142554dca062bc": {
|
|
467
|
+
"title": "Canonical usage",
|
|
468
|
+
"code": "<ResizeObserver>Label</ResizeObserver>",
|
|
469
|
+
"source": "canonical",
|
|
470
|
+
"compilable": true
|
|
471
|
+
},
|
|
472
|
+
"2cca976a647db275dfb45ce8bb53bc85d304e49c3d91f76e5987d11e95b604c1": {
|
|
473
|
+
"title": "Import",
|
|
474
|
+
"code": "import { Cell } from '@1money/component-ui';\n// or\nimport { Cell } from '@1money/component-ui/Cell';",
|
|
475
|
+
"source": "readme",
|
|
476
|
+
"compilable": true
|
|
477
|
+
},
|
|
478
|
+
"2d7f3d765471e161eebea75b1e1a3270b8a6b415b29bbead4e0362770a9eef3b": {
|
|
479
|
+
"title": "Canonical usage",
|
|
480
|
+
"code": "import type { ProFormFieldSetProps } from '@1money/component-ui';",
|
|
481
|
+
"source": "canonical",
|
|
482
|
+
"compilable": true
|
|
483
|
+
},
|
|
484
|
+
"2db7958f91085606312d3dea5983e6a87724bdaaaeb755893810034b5be459a2": {
|
|
485
|
+
"title": "Copyable",
|
|
486
|
+
"code": "<Typography.Link\n size=\"md\"\n href=\"https://example.com/reference\"\n copyable={{ text: 'https://example.com/reference' }}\n>\n https://example.com/reference\n</Typography.Link>",
|
|
487
|
+
"source": "readme",
|
|
488
|
+
"compilable": true
|
|
489
|
+
},
|
|
490
|
+
"2e38eb2bbde2587fea5af46f3c34d8b7b9a3bc7951fa044bcd363a4ce3812a47": {
|
|
491
|
+
"title": "Canonical usage",
|
|
492
|
+
"code": "import type { StepProps } from '@1money/component-ui';",
|
|
493
|
+
"source": "canonical",
|
|
494
|
+
"compilable": true
|
|
495
|
+
},
|
|
496
|
+
"2f65549d43490603034b9f30beadb2efd27c2c0f454242a54f434f213d051491": {
|
|
497
|
+
"title": "Omit Nil",
|
|
498
|
+
"code": "<ProForm\n {...args}\n omitNil\n initialValues={{ name: '', email: '', note: null }}\n onFinish={(values) => {\n alert('Nil values stripped:\\n' + JSON.stringify(values, null, 2));\n }}\n >\n <ProFormText name=\"name\" label=\"Name (leave empty to omit)\" />\n <ProFormText name=\"email\" label=\"Email (leave empty to omit)\" />\n <ProFormText name=\"note\" label=\"Note (null → omitted)\" />\n </ProForm>",
|
|
499
|
+
"source": "stories",
|
|
500
|
+
"compilable": false
|
|
501
|
+
},
|
|
502
|
+
"2f6710b655bb5d7c4adb4aa08f77909913d90ba3a32d1fea39ab8604ddc2f8f5": {
|
|
503
|
+
"title": "Canonical usage",
|
|
504
|
+
"code": "import type { SelectSingleValue } from '@1money/component-ui';",
|
|
505
|
+
"source": "canonical",
|
|
506
|
+
"compilable": true
|
|
507
|
+
},
|
|
508
|
+
"31dd5c9e926c0deeefba1a4028848b13ee819e42fbdf5ba0438329ffa1907e66": {
|
|
509
|
+
"title": "Width Presets",
|
|
510
|
+
"code": "<ProForm {...args}>\n <ProFormText name=\"sm\" label=\"Small (sm = 160px)\" width=\"sm\" />\n <ProFormText name=\"md\" label=\"Medium (md = 240px)\" width=\"md\" />\n <ProFormText name=\"lg\" label=\"Large (lg = 320px)\" width=\"lg\" />\n <ProFormText name=\"xl\" label=\"XL (xl = 420px)\" width=\"xl\" />\n <ProFormText name=\"custom\" label=\"Custom (200px)\" width={200} />\n </ProForm>",
|
|
511
|
+
"source": "stories",
|
|
512
|
+
"compilable": false
|
|
513
|
+
},
|
|
514
|
+
"323997b5e7fbded862fcafd3b54089dd9dfae28d4b7c04fbe3d26f612a7b2406": {
|
|
515
|
+
"title": "Canonical usage",
|
|
516
|
+
"code": "import { Tooltip } from '@1money/components-ui';\n// or\nimport { Tooltip } from '@1money/components-ui/Tooltip';",
|
|
517
|
+
"source": "canonical",
|
|
518
|
+
"compilable": true
|
|
519
|
+
},
|
|
520
|
+
"3298cc00509da7da73ca2da525874e520a453a289a0c4985f6f11249b5768dba": {
|
|
521
|
+
"title": "Full Width",
|
|
522
|
+
"code": "<Tabs items={DEFAULT_ITEMS} fullWidth />",
|
|
523
|
+
"source": "stories",
|
|
524
|
+
"compilable": true
|
|
525
|
+
},
|
|
526
|
+
"331af5c2212fd55974bf970db262267197fa7ead2695ac5e5ad86d13f1a999d5": {
|
|
527
|
+
"title": "Canonical usage",
|
|
528
|
+
"code": "import type { ResizeObserverOnResize } from '@1money/component-ui';",
|
|
529
|
+
"source": "canonical",
|
|
530
|
+
"compilable": true
|
|
531
|
+
},
|
|
532
|
+
"34536f5f5abc20bc7255387d21700a4725ea8d6f9806b09cb947375f7afde43c": {
|
|
533
|
+
"title": "Label Right",
|
|
534
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <Switch {...args} label=\"Label\" description=\"Description\" labelPlacement=\"right\" />\n <Switch {...args} label=\"Label\" description=\"Description\" labelPlacement=\"right\" defaultChecked />\n </div>",
|
|
535
|
+
"source": "stories",
|
|
536
|
+
"compilable": false
|
|
537
|
+
},
|
|
538
|
+
"34e2f9c81f78d36f106c7236b21814e0edbc3300a9f8b86d898f88ce8076b551": {
|
|
539
|
+
"title": "Strong Support",
|
|
540
|
+
"code": "<div style={STORY_LAYOUT_STYLE}>\n <div style={STORY_SECTION_STYLE}>\n {TYPOGRAPHY_TITLE_SIZES.map(size => (\n <Typography.Title key={size} size={size} strong>\n Strong title {size}\n </Typography.Title>\n ))}\n </div>\n\n <div style={STORY_SECTION_STYLE}>\n {TYPOGRAPHY_BODY_SIZES.map(size => (\n <Typography.Body key={size} size={size} strong>\n Strong body {size}\n </Typography.Body>\n ))}\n </div>\n\n <div style={STORY_SECTION_STYLE}>\n {TYPOGRAPHY_LABEL_SIZES.map(size => (\n <Typography.Label key={size} size={size} strong>\n Strong label {size}\n </Typography.Label>\n ))}\n </div>\n </div>",
|
|
541
|
+
"source": "stories",
|
|
542
|
+
"compilable": true
|
|
543
|
+
},
|
|
544
|
+
"359419046d682dfd62714062c25dcec8d14f5e324dc74f77fe952a6dbc601d96": {
|
|
545
|
+
"title": "Api Examples",
|
|
546
|
+
"code": "<div style={DEMO_SECTION_STYLE}>\n <Space size={SPACE_SIZE.middle} align={SPACE_ALIGN.center}>\n <div style={DEMO_BOX_STYLE}>Align</div>\n <div style={DEMO_BOX_STYLE}>Center</div>\n </Space>\n <Space direction={SPACE_DIRECTION.vertical} size={SPACE_SIZE.large}>\n <div style={DEMO_BOX_STYLE}>Vertical</div>\n <div style={DEMO_BOX_STYLE}>Large</div>\n </Space>\n </div>",
|
|
547
|
+
"source": "stories",
|
|
548
|
+
"compilable": true
|
|
549
|
+
},
|
|
550
|
+
"35d03672d22c429b5728577ce7f8d9a9e1c71faa8b6a6831ec83c20ab0f32541": {
|
|
551
|
+
"title": "Dashboard Layout",
|
|
552
|
+
"code": "<div style={DEMO_PAGE_STYLE}>\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12}>\n <div style={DEMO_HEADER_BLOCK_STYLE}>Header (12/12)</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12} md={3} lg={3}>\n <div style={DEMO_SIDEBAR_BLOCK_STYLE}>Sidebar (12 → 3 → 3)</div>\n </Col>\n <Col span={12} md={9} lg={9}>\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={6} lg={3}>\n <div style={DEMO_WIDGET_BLOCK_STYLE}>KPI 1</div>\n </Col>\n <Col span={6} lg={3}>\n <div style={DEMO_WIDGET_BLOCK_STYLE}>KPI 2</div>\n </Col>\n <Col span={6} lg={3}>\n <div style={DEMO_WIDGET_BLOCK_STYLE}>KPI 3</div>\n </Col>\n <Col span={6} lg={3}>\n <div style={DEMO_WIDGET_BLOCK_STYLE}>KPI 4</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12} lg={8}>\n <div style={DEMO_CHART_BLOCK_STYLE}>Main Chart (12 → 8)</div>\n </Col>\n <Col span={12} lg={4}>\n <div style={DEMO_CHART_BLOCK_STYLE}>Side Panel (12 → 4)</div>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12}>\n <div style={DEMO_TABLE_BLOCK_STYLE}>Table Section (12/12)</div>\n </Col>\n </Row>\n </Col>\n </Row>\n\n <Row gutter={GRID_GUTTER_SPACED}>\n <Col span={12}>\n <div style={DEMO_FOOTER_BLOCK_STYLE}>Footer (12/12)</div>\n </Col>\n </Row>\n </div>",
|
|
553
|
+
"source": "stories",
|
|
554
|
+
"compilable": true
|
|
555
|
+
},
|
|
556
|
+
"35ef262aacb50e576c661e627da1e7f2a63d545598db02d89b2aca173d0a6129": {
|
|
557
|
+
"title": "Grid Layout",
|
|
558
|
+
"code": "<ProForm\n {...args}\n rowProps={{ gutter: 16 }}\n initialValues={{}}\n >\n <ProFormText name=\"firstName\" label=\"First Name\" colProps={{ span: 12 }} />\n <ProFormText name=\"lastName\" label=\"Last Name\" colProps={{ span: 12 }} />\n <ProFormText name=\"email\" label=\"Email\" colProps={{ span: 12 }} />\n <ProFormText name=\"phone\" label=\"Phone\" colProps={{ span: 12 }} />\n <ProFormTextArea name=\"address\" label=\"Address\" colProps={{ span: 24 }} />\n </ProForm>",
|
|
559
|
+
"source": "stories",
|
|
560
|
+
"compilable": false
|
|
561
|
+
},
|
|
562
|
+
"35f57c8747980e6bf5b6557fb00fbd1de7494d3164d9b0b0b2697c9badc38482": {
|
|
563
|
+
"title": "With Search",
|
|
564
|
+
"code": "{\n const [query, setQuery] = useState('');\n const filtered = SIMPLE_ITEMS.filter((item) =>\n item.toLowerCase().includes(query.toLowerCase()),\n );\n\n return (\n <Dropdown\n {...args}\n overlayStyle={{ minWidth: 240 }}\n content={\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n <Input.Search\n size=\"small\"\n placeholder=\"Search\"\n value={query}\n onChange={setQuery}\n allowClear\n />\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n {filtered.length === 0 && (\n <p style={{ ...itemSubtitleStyle, padding: '8px 12px' }}>\n No results found\n </p>\n )}\n {filtered.map((item) => (\n <DropdownItem key={item} title={item} />\n ))}\n </div>\n </div>\n }\n >\n <Button>Search Items</Button>\n </Dropdown>\n );\n }",
|
|
565
|
+
"source": "stories",
|
|
566
|
+
"compilable": false
|
|
567
|
+
},
|
|
568
|
+
"36235293da09b5cde1912c14c77f599d7ac78dba18bdc80d587926d6f474f656": {
|
|
569
|
+
"title": "Vertical Layout",
|
|
570
|
+
"code": "const VERTICAL_GAP = 16;\n\n<Flex vertical gap={VERTICAL_GAP}>\n <div>Top</div>\n <div>Bottom</div>\n</Flex>",
|
|
571
|
+
"source": "readme",
|
|
572
|
+
"compilable": true
|
|
573
|
+
},
|
|
574
|
+
"36cbaf7aab4a01a5e1c94430f29c9f8881ec84e60dac84ca5c2e32cb25e14ae5": {
|
|
575
|
+
"title": "Usage",
|
|
576
|
+
"code": "// Basic usage with icon name\n<Empty\n icon=\"transactions\"\n title=\"No record found\"\n description=\"Try adjusting your filters to find the record you are looking for\"\n/>\n\n// With custom icon component\n<Empty\n icon={<MyCustomIcon />}\n description=\"No data available\"\n/>\n\n// With action button\n<Empty\n variant=\"stroke\"\n icon=\"bank\"\n description=\"You don't have any bank accounts linked\"\n action={<Button>Add new bank account</Button>}\n/>",
|
|
577
|
+
"source": "readme",
|
|
578
|
+
"compilable": true
|
|
579
|
+
},
|
|
580
|
+
"36f868d28259a7ebb3c6decbe9768b0ac838fd1617e57e32bace1c0dde27546d": {
|
|
581
|
+
"title": "Usage",
|
|
582
|
+
"code": "<Calendar\n label=\"Date of Birth\"\n required\n placeholder=\"MM/DD/YYYY\"\n onChange={(e) => console.log(e.value)}\n/>",
|
|
583
|
+
"source": "readme",
|
|
584
|
+
"compilable": true
|
|
585
|
+
},
|
|
586
|
+
"3836a143b0bc0c3df0917e6d83e399c700a858b3e0cf7703a8417090067c3088": {
|
|
587
|
+
"title": "Default",
|
|
588
|
+
"code": "<Switch {...args} label=\"Label\" />",
|
|
589
|
+
"source": "stories",
|
|
590
|
+
"compilable": false
|
|
591
|
+
},
|
|
592
|
+
"38cc049b002ef2643d573c3ed8ec40bd44f8aadbccbeea471bedd8ace0207adb": {
|
|
593
|
+
"title": "Group Basic",
|
|
594
|
+
"code": "{\n const [value, setValue] = React.useState<string | number>('a');\n const handleChange = (event: RadioChangeEvent) => {\n if (event.target.value !== undefined) {\n setValue(event.target.value);\n }\n };\n\n return (\n <RadioGroup value={value} onChange={handleChange}>\n <Radio value=\"a\" label=\"Option A\" />\n <Radio value=\"b\" label=\"Option B\" />\n <Radio value=\"c\" label=\"Option C\" />\n </RadioGroup>\n );\n }",
|
|
595
|
+
"source": "stories",
|
|
596
|
+
"compilable": true
|
|
597
|
+
},
|
|
598
|
+
"38d85a62962bcd59b02127b7cf4808c8cb8ffe3d72866928828846cb5adb5e77": {
|
|
599
|
+
"title": "Basic Usage",
|
|
600
|
+
"code": "<Popconfirm\n title=\"Delete transfer rule?\"\n body=\"This action removes the rule immediately and cannot be undone.\"\n cancelText=\"Keep rule\"\n confirmText=\"Delete\"\n onConfirm={() => {\n // perform delete\n }}\n>\n <Button color=\"danger\">Delete rule</Button>\n</Popconfirm>",
|
|
601
|
+
"source": "readme",
|
|
602
|
+
"compilable": true
|
|
603
|
+
},
|
|
604
|
+
"390cabc2f23e7ce30b17814c2a5b8202b8da33904affa60c9bcf5e26fadd9d2f": {
|
|
605
|
+
"title": "Orientation Margin",
|
|
606
|
+
"code": "<div>\n <p>Lorem ipsum dolor sit amet.</p>\n <Divider orientation=\"left\" orientationMargin=\"0\">Left (margin 0)</Divider>\n <p>Lorem ipsum dolor sit amet.</p>\n <Divider orientation=\"left\" orientationMargin={50}>Left (margin 50)</Divider>\n <p>Lorem ipsum dolor sit amet.</p>\n <Divider orientation=\"right\" orientationMargin={0}>Right (margin 0)</Divider>\n <p>Lorem ipsum dolor sit amet.</p>\n </div>",
|
|
607
|
+
"source": "stories",
|
|
608
|
+
"compilable": true
|
|
609
|
+
},
|
|
610
|
+
"3b0609d66de90d74188d6f4ab20aa01fa0063b08806f15b90448a4dd7ff49fe2": {
|
|
611
|
+
"title": "Canonical usage",
|
|
612
|
+
"code": "import type { FormInstance } from '@1money/component-ui';",
|
|
613
|
+
"source": "canonical",
|
|
614
|
+
"compilable": true
|
|
615
|
+
},
|
|
616
|
+
"3b416ca019f27f4a1d80ae5a1bbafa8b6b9d196ebbdbf9df77bbd8d7c4118934": {
|
|
617
|
+
"title": "Custom Size And Wrap",
|
|
618
|
+
"code": "<Space size={[8, 16]} wrap style={{ maxWidth: 240 }}>\n {Array.from({ length: 10 }).map((_, index) => (\n <div style={DEMO_BOX_STYLE} key={index}>\n Item {index + 1}\n </div>\n ))}\n </Space>",
|
|
619
|
+
"source": "stories",
|
|
620
|
+
"compilable": true
|
|
621
|
+
},
|
|
622
|
+
"3c3505571d048f21d338aa69eef9958e1c52c1291853b9b05ab914623319a464": {
|
|
623
|
+
"title": "Async Request",
|
|
624
|
+
"code": "{\n const [userId, setUserId] = useState(1);\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <div style={{ display: 'flex', gap: 8 }}>\n <Button color={userId === 1 ? 'primary' : 'grey'} onClick={() => setUserId(1)}>\n User 1\n </Button>\n <Button color={userId === 2 ? 'primary' : 'grey'} onClick={() => setUserId(2)}>\n User 2\n </Button>\n </div>\n <ProForm\n {...args}\n params={{ userId }}\n request={async (params) => {\n await new Promise((r) => setTimeout(r, 1000));\n const data: Record<number, Record<string, unknown>> = {\n 1: { name: 'Alice', email: 'alice@example.com' },\n 2: { name: 'Bob', email: 'bob@example.com' },\n };\n return data[(params as { userId: number })?.userId] || {};\n }}\n >\n <ProFormText name=\"name\" label=\"Name\" />\n <ProFormText name=\"email\" label=\"Email\" />\n </ProForm>\n </div>\n );\n }",
|
|
625
|
+
"source": "stories",
|
|
626
|
+
"compilable": false
|
|
627
|
+
},
|
|
628
|
+
"3c5bbd0e70d50121131f70e69229d2badab6a0c4ce56c9343804fac5db4cc85d": {
|
|
629
|
+
"title": "Cell Centered",
|
|
630
|
+
"code": "<div style={{ display: 'flex', gap: 12, alignItems: 'flex-start', flexWrap: 'wrap' }}>\n <Radio\n checked\n variant=\"cell\"\n size=\"large\"\n alignment=\"center\"\n icon=\"language\"\n tag=\"Tag\"\n label=\"Global account\"\n description=\"International transfers\"\n style={{ width: 200 }}\n />\n <Radio\n checked\n variant=\"cell\"\n size=\"medium\"\n alignment=\"center\"\n icon=\"usd\"\n label=\"USD1\"\n style={{ width: 200 }}\n />\n <Radio\n checked\n variant=\"cell\"\n size=\"small\"\n alignment=\"center\"\n icon=\"usd\"\n label=\"USD1\"\n style={{ width: 200 }}\n />\n </div>",
|
|
631
|
+
"source": "stories",
|
|
632
|
+
"compilable": true
|
|
633
|
+
},
|
|
634
|
+
"3e868fc7054ec26b6d612e345cd084dcdbb6a51b7d290eae2fa333509e0c9b33": {
|
|
635
|
+
"title": "Canonical usage",
|
|
636
|
+
"code": "<Popconfirm />",
|
|
637
|
+
"source": "canonical",
|
|
638
|
+
"compilable": true
|
|
639
|
+
},
|
|
640
|
+
"3eeffae8089eb4c5263987d1efdbdb531b44459ca7f63135ee8f3a215faa0928": {
|
|
641
|
+
"title": "No Arrow",
|
|
642
|
+
"code": "<div style={ANCHOR_WRAPPER_STYLE}>\n <button id=\"tooltip-no-arrow\">Hover me</button>\n <Tooltip {...args} anchorSelect=\"#tooltip-no-arrow\" />\n </div>",
|
|
643
|
+
"source": "stories",
|
|
644
|
+
"compilable": false
|
|
645
|
+
},
|
|
646
|
+
"3f7947a62ea88c98ba7ab12c99856262c9bcfbce67805459f690e130f0d6920e": {
|
|
647
|
+
"title": "Canonical usage",
|
|
648
|
+
"code": "import { Space } from '@1money/components-ui';\n// or\nimport { Space } from '@1money/components-ui/Space';\nimport { SPACE_ALIGN, SPACE_DIRECTION, SPACE_SIZE } from '@1money/components-ui/Space';",
|
|
649
|
+
"source": "canonical",
|
|
650
|
+
"compilable": true
|
|
651
|
+
},
|
|
652
|
+
"3fed6ca7982c867ccd1b2b58023950f8365462d92b44c75722551d4d3127c8bb": {
|
|
653
|
+
"title": "Canonical usage",
|
|
654
|
+
"code": "import type { DialogSize } from '@1money/component-ui';",
|
|
655
|
+
"source": "canonical",
|
|
656
|
+
"compilable": true
|
|
657
|
+
},
|
|
658
|
+
"40a22244886d5bdbd3ed0c2eeccc5859897c73c7f35ce9d0b27a7a9547709f28": {
|
|
659
|
+
"title": "Import",
|
|
660
|
+
"code": "import { Tag } from '@1money/components-ui';\n// or\nimport { Tag } from '@1money/components-ui/Tag';",
|
|
661
|
+
"source": "readme",
|
|
662
|
+
"compilable": true
|
|
663
|
+
},
|
|
664
|
+
"40b55a924e580ca4161d97e698db47fb342eae5c804b2bfbaab1f5eb64a58e09": {
|
|
665
|
+
"title": "Basic",
|
|
666
|
+
"code": "<div style={containerStyle}>\n <VirtualList\n data={data1000}\n height={300}\n itemHeight={30}\n itemKey=\"id\"\n >\n {(item: Item) => (\n <div style={itemStyle(item.height)}>\n <span>Item {item.id}</span>\n <span style={{ color: '#999', fontSize: 12 }}>h: {item.height}px</span>\n </div>\n )}\n </VirtualList>\n </div>",
|
|
667
|
+
"source": "stories",
|
|
668
|
+
"compilable": true
|
|
669
|
+
},
|
|
670
|
+
"4186c0d2b90dd549d7f6497e4b7fb0b101654305b0e3e128cd0f1d6ca78bfb2a": {
|
|
671
|
+
"title": "Canonical usage",
|
|
672
|
+
"code": "import type { ValidateStatus } from '@1money/component-ui';",
|
|
673
|
+
"source": "canonical",
|
|
674
|
+
"compilable": true
|
|
675
|
+
},
|
|
676
|
+
"41c91bf415fa7b2b7fcfbba49136e2254bcf778a33e916d12446e042629a0943": {
|
|
677
|
+
"title": "Canonical usage",
|
|
678
|
+
"code": "import { Switch } from '@1money/components-ui';\n// or\nimport { Switch } from '@1money/components-ui/Switch';",
|
|
679
|
+
"source": "canonical",
|
|
680
|
+
"compilable": true
|
|
681
|
+
},
|
|
682
|
+
"421c6af797703e115fd55a10242e5ac801283d4eb80d5409fc997c7d9c730393": {
|
|
683
|
+
"title": "Canonical usage",
|
|
684
|
+
"code": "import type { ProFormGroupProps } from '@1money/component-ui';",
|
|
685
|
+
"source": "canonical",
|
|
686
|
+
"compilable": true
|
|
687
|
+
},
|
|
688
|
+
"42d09791892e2a4de1863d920b4d11b5c83b30770a9775f63645e3291eb98416": {
|
|
689
|
+
"title": "Custom Submitter",
|
|
690
|
+
"code": "<ProForm\n {...args}\n submitter={{\n submitText: 'Save Changes',\n resetText: 'Discard',\n render: (props, dom) => (\n <div style={{ display: 'flex', gap: 8, justifyContent: 'center' }}>\n {dom}\n </div>\n ),\n }}\n >\n <ProFormText name=\"title\" label=\"Title\" rules={[{ required: true }]} />\n <ProFormTextArea name=\"content\" label=\"Content\" />\n </ProForm>",
|
|
691
|
+
"source": "stories",
|
|
692
|
+
"compilable": false
|
|
693
|
+
},
|
|
694
|
+
"433e2ddc78741578443b854668e9b0bc02f7196c44580c8b913bf9d7d68c08ae": {
|
|
695
|
+
"title": "Canonical usage",
|
|
696
|
+
"code": "import { CoachMark } from '@1money/components-ui';\n// or\nimport { CoachMark } from '@1money/components-ui/CoachMark';",
|
|
697
|
+
"source": "canonical",
|
|
698
|
+
"compilable": true
|
|
699
|
+
},
|
|
700
|
+
"4382388bcd674e464f60d818049720fa134a38574be7255cff59425e9d027d63": {
|
|
701
|
+
"title": "Canonical usage",
|
|
702
|
+
"code": "import type { FormSize } from '@1money/component-ui';",
|
|
703
|
+
"source": "canonical",
|
|
704
|
+
"compilable": true
|
|
705
|
+
},
|
|
706
|
+
"4389223d4dd418331dd628d1bb657512018df7b6124067044b1b577c26853c32": {
|
|
707
|
+
"title": "Canonical usage",
|
|
708
|
+
"code": "<Dialog />",
|
|
709
|
+
"source": "canonical",
|
|
710
|
+
"compilable": true
|
|
711
|
+
},
|
|
712
|
+
"43cb69594b17d8f71ddb9912efb8eea26ee52cf45990ef9f7a2212c0694b0811": {
|
|
713
|
+
"title": "Dashed",
|
|
714
|
+
"code": "<div>\n <p>Lorem ipsum dolor sit amet.</p>\n <Divider variant=\"dashed\" />\n <p>Lorem ipsum dolor sit amet.</p>\n <Divider variant=\"dashed\">Dashed</Divider>\n <p>Lorem ipsum dolor sit amet.</p>\n </div>",
|
|
715
|
+
"source": "stories",
|
|
716
|
+
"compilable": true
|
|
717
|
+
},
|
|
718
|
+
"43cd04ae4cce4b5299321d915077358a92a0a5000ab402da2f9ba9ccac91ef84": {
|
|
719
|
+
"title": "Canonical usage",
|
|
720
|
+
"code": "import { Spinner } from '@1money/components-ui';\n// or\nimport { Spinner } from '@1money/components-ui/Spinner';",
|
|
721
|
+
"source": "canonical",
|
|
722
|
+
"compilable": true
|
|
723
|
+
},
|
|
724
|
+
"43e86173eaa57a1ad76a23b43ba3b90b40e118c2d4885e13b759adc68c95f5a8": {
|
|
725
|
+
"title": "Canonical usage",
|
|
726
|
+
"code": "import type { ProFormFormInstance } from '@1money/component-ui';",
|
|
727
|
+
"source": "canonical",
|
|
728
|
+
"compilable": true
|
|
729
|
+
},
|
|
730
|
+
"44c4b25e35236d2eaf4d26824badf330c6495194077c815a662b000591be91be": {
|
|
731
|
+
"title": "Multiple Collapsed",
|
|
732
|
+
"code": "{\n const [value, setValue] = useState<Array<string | number>>([\n 'btc',\n 'eth',\n 'usdt',\n 'usdc',\n 'sol',\n 'doge',\n ]);\n\n return (\n <div style={{ width: 320 }}>\n <Select\n {...args}\n multiple\n value={value}\n onChange={(nextValue, option) => {\n setValue((nextValue as Array<string | number>) ?? []);\n args.onChange?.(nextValue, option);\n }}\n />\n </div>\n );\n }",
|
|
733
|
+
"source": "stories",
|
|
734
|
+
"compilable": false
|
|
735
|
+
},
|
|
736
|
+
"45540f738e1068d8a124b639401d1c1ce52ae887afdc2aec99071704644db73a": {
|
|
737
|
+
"title": "Toolbar Spacing",
|
|
738
|
+
"code": "<div style={DEMO_PAGE_STYLE}>\n <div style={{ ...DEMO_PANEL_STYLE, display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <Space size={SPACE_SIZE.small} align={SPACE_ALIGN.center}>\n <div style={DEMO_INLINE_ITEM_STYLE}>Date Range</div>\n <div style={DEMO_INLINE_ITEM_STYLE}>Status</div>\n <div style={DEMO_INLINE_ITEM_STYLE}>Currency</div>\n </Space>\n <Space size={SPACE_SIZE.small} align={SPACE_ALIGN.center}>\n <div style={DEMO_INLINE_ITEM_STYLE}>Export</div>\n <div style={DEMO_INLINE_ITEM_STYLE}>Refresh</div>\n <div style={DEMO_INLINE_ITEM_STYLE}>Create</div>\n </Space>\n </div>\n </div>",
|
|
739
|
+
"source": "stories",
|
|
740
|
+
"compilable": true
|
|
741
|
+
},
|
|
742
|
+
"45927e79f2361b1e135a1b6aba335d6c44091ecc37424d0dcaf5424bb38149f4": {
|
|
743
|
+
"title": "Mode Read",
|
|
744
|
+
"code": "<ProForm\n {...args}\n mode=\"read\"\n initialValues={{ name: 'Alice', email: 'alice@example.com', active: true }}\n >\n <ProFormText name=\"name\" label=\"Name\" />\n <ProFormText name=\"email\" label=\"Email\" />\n <ProFormSwitch name=\"active\" label=\"Active\" />\n </ProForm>",
|
|
745
|
+
"source": "stories",
|
|
746
|
+
"compilable": false
|
|
747
|
+
},
|
|
748
|
+
"459fb4fed33834539f12047eb8791c8c459888b43df3cfa51c852237d244b1b1": {
|
|
749
|
+
"title": "Canonical usage",
|
|
750
|
+
"code": "createProFormField(config);",
|
|
751
|
+
"source": "canonical",
|
|
752
|
+
"compilable": true
|
|
753
|
+
},
|
|
754
|
+
"466a2cf763ac1374c62583da68c81d15d8aece066ae06417d6a4356855606954": {
|
|
755
|
+
"title": "With Badges",
|
|
756
|
+
"code": "<Tabs\n items={[\n { key: 'tab1', label: 'Overview', badge: 5 },\n { key: 'tab2', label: 'Transactions', badge: 12 },\n { key: 'tab3', label: 'Analytics' },\n { key: 'tab4', label: 'Settings', badge: 3 },\n ]}\n />",
|
|
757
|
+
"source": "stories",
|
|
758
|
+
"compilable": true
|
|
759
|
+
},
|
|
760
|
+
"4831602e1843344ccb14281ad853e240d2d5c1c2010be19cf091cacd678e6eda": {
|
|
761
|
+
"title": "Canonical usage",
|
|
762
|
+
"code": "import type { UsePaginationOptions } from '@1money/component-ui';",
|
|
763
|
+
"source": "canonical",
|
|
764
|
+
"compilable": true
|
|
765
|
+
},
|
|
766
|
+
"4844dfaf4dff931b3d5b14135a788fc632daa05669c14237139b0a15e6d1a793": {
|
|
767
|
+
"title": "Click Trigger",
|
|
768
|
+
"code": "<div style={ANCHOR_WRAPPER_STYLE}>\n <button id=\"tooltip-click\">Click me</button>\n <Tooltip\n {...args}\n anchorSelect=\"#tooltip-click\"\n openEvents={{ click: true, mouseover: false, mouseenter: false, focus: false }}\n closeEvents={{ click: true, mouseleave: false, mouseout: false, blur: false }}\n />\n </div>",
|
|
769
|
+
"source": "stories",
|
|
770
|
+
"compilable": false
|
|
771
|
+
},
|
|
772
|
+
"487a87a540c310c3a95d1656126aa0686d4ce8932394b10ef7be463bd2139b11": {
|
|
773
|
+
"title": "Canonical usage",
|
|
774
|
+
"code": "import type { FormLayout } from '@1money/component-ui';",
|
|
775
|
+
"source": "canonical",
|
|
776
|
+
"compilable": true
|
|
777
|
+
},
|
|
778
|
+
"48f6ebde7546d7db844b0cd43bd6e6ec6956746f93c55167fda6a2cd84599a3e": {
|
|
779
|
+
"title": "No Animation",
|
|
780
|
+
"code": "<Segment items={DEFAULT_ITEMS} animated={false} />",
|
|
781
|
+
"source": "stories",
|
|
782
|
+
"compilable": true
|
|
783
|
+
},
|
|
784
|
+
"4925f0fa31e738cbe6dcf51caa4529687907afbd4c5d75a2b6babee74973dcb6": {
|
|
785
|
+
"title": "Canonical usage",
|
|
786
|
+
"code": "import type { Rule } from '@1money/component-ui';",
|
|
787
|
+
"source": "canonical",
|
|
788
|
+
"compilable": true
|
|
789
|
+
},
|
|
790
|
+
"4946413c8eb03c3d0ed457a33ffdb8dfdef55dfe7f8f8440b878a1ae2be1c46a": {
|
|
791
|
+
"title": "With Default Value",
|
|
792
|
+
"code": "<Segment defaultValue=\"transactions\" items={DEFAULT_ITEMS} />",
|
|
793
|
+
"source": "stories",
|
|
794
|
+
"compilable": true
|
|
795
|
+
},
|
|
796
|
+
"49a2e96ec0947afd6fe798ab777749f04241987e5f6c9364ac5fdff699d8aa31": {
|
|
797
|
+
"title": "Canonical usage",
|
|
798
|
+
"code": "import type { TriggerProps } from '@1money/component-ui';",
|
|
799
|
+
"source": "canonical",
|
|
800
|
+
"compilable": true
|
|
801
|
+
},
|
|
802
|
+
"49ad060bce26c0a2bb20e2d9487869063f8aa30ca5cff68d8bbb108fbeef29a1": {
|
|
803
|
+
"title": "Dashed / Dotted",
|
|
804
|
+
"code": "<Divider variant=\"dashed\" />\n<Divider variant=\"dotted\">Dotted</Divider>",
|
|
805
|
+
"source": "readme",
|
|
806
|
+
"compilable": true
|
|
807
|
+
},
|
|
808
|
+
"49c72f97a10ef34333a88507a7d9e8e5bb582173ce599c9b9a2aae31efedb1e1": {
|
|
809
|
+
"title": "Inline Loading",
|
|
810
|
+
"code": "<button disabled={loading}>\n {loading ? (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <Spinner style={{ width: '16px', height: '16px' }} />\n <span>Loading...</span>\n </div>\n ) : (\n 'Submit'\n )}\n</button>",
|
|
811
|
+
"source": "readme",
|
|
812
|
+
"compilable": true
|
|
813
|
+
},
|
|
814
|
+
"49d5f7314ab1ae951fe87a5f276d65d91c81daf6f489b93cffa522dab5fa7054": {
|
|
815
|
+
"title": "Sizes",
|
|
816
|
+
"code": "<div style={{ display: 'flex', gap: 24, alignItems: 'center' }}>\n {LINK_SIZES.map((size) => (\n <Link {...args} key={size} size={size}>\n {size}\n </Link>\n ))}\n </div>",
|
|
817
|
+
"source": "stories",
|
|
818
|
+
"compilable": false
|
|
819
|
+
},
|
|
820
|
+
"49dfc73d483629f124012f5f0ce9f22e06b9496d4f80a2c7a2ad32ac3cb8f6c9": {
|
|
821
|
+
"title": "Kitchen Sink",
|
|
822
|
+
"code": "<ProForm\n {...args}\n grid\n rowProps={{ gutter: 16 }}\n initialValues={{\n name: '',\n email: '',\n bio: '',\n newsletter: false,\n darkMode: true,\n items: [{ title: 'Item 1' }],\n }}\n submitter={{ submitText: 'Create', resetText: 'Clear All' }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormText\n name=\"name\"\n label=\"Full Name\"\n colProps={{ span: 12 }}\n rules={[{ required: true }]}\n />\n <ProFormText\n name=\"email\"\n label=\"Email\"\n colProps={{ span: 12 }}\n rules={[{ required: true }]}\n />\n <ProFormTextArea\n name=\"bio\"\n label=\"Biography\"\n colProps={{ span: 24 }}\n />\n <ProFormCheckbox name=\"newsletter\" label=\"Subscribe to newsletter\" colProps={{ span: 12 }} />\n <ProFormSwitch name=\"darkMode\" label=\"Dark Mode\" colProps={{ span: 12 }} />\n <ProFormDependency name={['newsletter']}>\n {({ newsletter }) =>\n newsletter ? (\n <ProFormText\n name=\"frequency\"\n label=\"Email Frequency\"\n placeholder=\"daily / weekly / monthly\"\n colProps={{ span: 24 }}\n />\n ) : null\n }\n </ProFormDependency>\n </ProForm>",
|
|
823
|
+
"source": "stories",
|
|
824
|
+
"compilable": false
|
|
825
|
+
},
|
|
826
|
+
"49fefb1f1d8145921b4b4e7c674411c0a6ca5a63d9c22a60a5e82735ab251e86": {
|
|
827
|
+
"title": "Default",
|
|
828
|
+
"code": "<Dropdown {...args} content={<MenuContent />}>\n <Button>Actions</Button>\n </Dropdown>",
|
|
829
|
+
"source": "stories",
|
|
830
|
+
"compilable": false
|
|
831
|
+
},
|
|
832
|
+
"4a0586bd3c33f563c7de439b2edc169e9d921c2f9f7fb0c72e411af2d0637fa5": {
|
|
833
|
+
"title": "Canonical usage",
|
|
834
|
+
"code": "import type { ProFormFieldTransformFn } from '@1money/component-ui';",
|
|
835
|
+
"source": "canonical",
|
|
836
|
+
"compilable": true
|
|
837
|
+
},
|
|
838
|
+
"4a5e5cef011be8e4312b7e27e13d519193ffe35d681413267098a0f06182c9d9": {
|
|
839
|
+
"title": "Basic Usage",
|
|
840
|
+
"code": "// Basic icon (default 24px, color #131313)\n<Icons name=\"arrowRight\" />\nimport { Icons, IconWrapper, Logo } from '@1money/components-ui';\n\n// Custom size and color\n<Icons name=\"settings\" size={32} color=\"#3D73F2\" />\n\n// With explicit width/height\n<Icons name=\"search\" width={20} height={20} />\n\n// Icon with hover container\n<IconHover>\n <Icons name=\"more\" />\n</IconHover>\n\n// Disabled hover container\n<IconHover disabled>\n <Icons name=\"settings\" />\n</IconHover>\n\n// Logo\n<Icons name=\"logo\" size={40} />",
|
|
841
|
+
"source": "readme",
|
|
842
|
+
"compilable": true
|
|
843
|
+
},
|
|
844
|
+
"4aa25969f149eda32514cc530fb2b8fceabc54fcbf63b87641b7cfd13f967bda": {
|
|
845
|
+
"title": "Canonical usage",
|
|
846
|
+
"code": "<ProFormRadioGroup />",
|
|
847
|
+
"source": "canonical",
|
|
848
|
+
"compilable": true
|
|
849
|
+
},
|
|
850
|
+
"4ad4837cde91f1ebd2cad90d6f82683fd94957192e4b88fa46882aac2330b854": {
|
|
851
|
+
"title": "Group Collapsible",
|
|
852
|
+
"code": "<ProForm\n {...args}\n initialValues={{ name: 'Alice', bio: '', theme: 'light' }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProForm.Group title=\"Basic Info\" collapsible>\n <ProFormText name=\"name\" label=\"Name\" rules={[{ required: true }]} />\n <ProFormText name=\"bio\" label=\"Bio\" />\n </ProForm.Group>\n <ProForm.Group title=\"Preferences\" collapsible defaultCollapsed>\n <ProFormText name=\"theme\" label=\"Theme\" />\n <ProFormSwitch name=\"notifications\" label=\"Notifications\" />\n </ProForm.Group>\n </ProForm>",
|
|
853
|
+
"source": "stories",
|
|
854
|
+
"compilable": false
|
|
855
|
+
},
|
|
856
|
+
"4ae865ab021e175d88a07c485155d3003940a4025b8432040b9ebb3bfc9ac877": {
|
|
857
|
+
"title": "Single Select",
|
|
858
|
+
"code": "{\n const [selected, setSelected] = useState<string | null>(null);\n\n return (\n <Dropdown\n {...args}\n overlayStyle={{ minWidth: 380 }}\n content={({ close }) => (\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n {CURRENCIES.slice(0, 4).map((item) => (\n <DropdownItem\n key={item.code}\n selected={selected === item.code}\n left={<CurrencyIcon flag={item.flag} />}\n title={item.code}\n subtitle={item.name}\n right={<p style={itemAmountStyle}>{item.amount}</p>}\n onClick={() => {\n setSelected(item.code);\n close();\n }}\n />\n ))}\n </div>\n )}\n >\n <Button>\n {selected\n ? `${CURRENCIES.find((c) => c.code === selected)?.flag} ${selected}`\n : 'Choose currency'}\n </Button>\n </Dropdown>\n );\n }",
|
|
859
|
+
"source": "stories",
|
|
860
|
+
"compilable": false
|
|
861
|
+
},
|
|
862
|
+
"4bfe9b50aecfd9832aab22cf2c5dc3bea89aeaba7934e60fe4e7a9d8c3ce823b": {
|
|
863
|
+
"title": "Canonical usage",
|
|
864
|
+
"code": "import type { PortalContainer } from '@1money/component-ui';",
|
|
865
|
+
"source": "canonical",
|
|
866
|
+
"compilable": true
|
|
867
|
+
},
|
|
868
|
+
"4db81691f06b6d355c08291c79ad9154135a7851bc1653cf092a6f6ff1766a2a": {
|
|
869
|
+
"title": "Canonical usage",
|
|
870
|
+
"code": "import type { TriggerRole } from '@1money/component-ui';",
|
|
871
|
+
"source": "canonical",
|
|
872
|
+
"compilable": true
|
|
873
|
+
},
|
|
874
|
+
"4eb35f906280d6f50e93ee158c0792dc740933db4705b831c71d24aadf3e2de7": {
|
|
875
|
+
"title": "All Variants",
|
|
876
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n {TAG_SIZES.map((size) => (\n <div key={size}>\n <h3 style={{ marginBottom: 12 }}>{size}</h3>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 12, alignItems: 'center' }}>\n {TAG_COLORS.map((color) => (\n <Tag\n {...args}\n key={`${size}-${color}`}\n size={size}\n color={color}\n label={color}\n />\n ))}\n </div>\n </div>\n ))}\n </div>",
|
|
877
|
+
"source": "stories",
|
|
878
|
+
"compilable": false
|
|
879
|
+
},
|
|
880
|
+
"50164c21b0b9ce491a97b9f31ca0eab4a51ce38d2496720d37242f774f78df20": {
|
|
881
|
+
"title": "Canonical usage",
|
|
882
|
+
"code": "import { Slider } from '@1money/components-ui';\n// or\nimport { Slider } from '@1money/components-ui/Slider';",
|
|
883
|
+
"source": "canonical",
|
|
884
|
+
"compilable": true
|
|
885
|
+
},
|
|
886
|
+
"528ab6afb943c07fe6e0c68fe3bda683e292529a705bd2d968f4c5dfed7e3a83": {
|
|
887
|
+
"title": "Canonical usage",
|
|
888
|
+
"code": "import type { PaginationControlItem } from '@1money/component-ui';",
|
|
889
|
+
"source": "canonical",
|
|
890
|
+
"compilable": true
|
|
891
|
+
},
|
|
892
|
+
"52b3c46129e939dcab127c033e5069b7027eeec39a253fe8741b74807b6de599": {
|
|
893
|
+
"title": "Canonical usage",
|
|
894
|
+
"code": "<ProFormPassword />",
|
|
895
|
+
"source": "canonical",
|
|
896
|
+
"compilable": true
|
|
897
|
+
},
|
|
898
|
+
"52e49c0728ddadda69ef98366ad789e66211d87acbb7ca43af959df87ec0767b": {
|
|
899
|
+
"title": "Event Shape",
|
|
900
|
+
"code": "type RadioChangeEvent = {\n nativeEvent: Event;\n preventDefault: () => void;\n stopPropagation: () => void;\n target: {\n checked: boolean;\n disabled: boolean;\n id?: string;\n name?: string;\n type: 'radio';\n value?: string | number;\n };\n};",
|
|
901
|
+
"source": "readme",
|
|
902
|
+
"compilable": true
|
|
903
|
+
},
|
|
904
|
+
"52fff43bfcb2391a44e980e0fff53642d0b10d4dcc439c76c5d150e7209d9cad": {
|
|
905
|
+
"title": "CheckboxGroup",
|
|
906
|
+
"code": "import { Checkbox, CheckboxGroup } from '@1money/components-ui';\n// or\nimport { Checkbox, CheckboxGroup } from '@1money/components-ui/Checkbox';\n\n<CheckboxGroup\n name=\"fruits\"\n options={[\n { label: 'Apple', value: 'apple' },\n { label: 'Pear', value: 'pear' },\n ]}\n value={selectedValues}\n onChange={setSelectedValues}\n/>\n\n<Checkbox.Group defaultValue={['alpha']}>\n <Checkbox value=\"alpha\" label=\"Alpha\" />\n <Checkbox value=\"beta\" label=\"Beta\" />\n</Checkbox.Group>",
|
|
907
|
+
"source": "readme",
|
|
908
|
+
"compilable": true
|
|
909
|
+
},
|
|
910
|
+
"546ef2d886471f0e410921f3ca3fa1ec2db5d4bed5ff1902bc190d0d87c75054": {
|
|
911
|
+
"title": "Canonical usage",
|
|
912
|
+
"code": "<ProFormDatePicker />",
|
|
913
|
+
"source": "canonical",
|
|
914
|
+
"compilable": true
|
|
915
|
+
},
|
|
916
|
+
"5545418d49fc7cdc897ea3ab29b0c7e5326b5e6a7321eec41eece864275198a0": {
|
|
917
|
+
"title": "All Variants",
|
|
918
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 48 }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <h3>Default</h3>\n <div style={{ display: 'flex', gap: 24, alignItems: 'center' }}>\n <Spinner size={20} />\n <Spinner size={32} />\n <Spinner size={48} />\n </div>\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <h3>Brand</h3>\n <Spinner type=\"brand\" size={32} title=\"Loading\" />\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <h3>Brand + BG</h3>\n <Spinner type=\"brand-bg\" size={74} title=\"Loading\" body=\"Body text\" />\n </div>\n </div>",
|
|
919
|
+
"source": "stories",
|
|
920
|
+
"compilable": true
|
|
921
|
+
},
|
|
922
|
+
"5694ed3a17a8aaa5d7736cb50c6e16eff3b03b29a74afbbd401544ec9a894672": {
|
|
923
|
+
"title": "Drawer Form Story",
|
|
924
|
+
"code": "<DrawerForm\n {...args}\n title=\"Create User\"\n trigger={<Button color=\"primary\">Open Drawer Form</Button>}\n onFinish={async (values) => {\n alert(JSON.stringify(values, null, 2));\n }}\n >\n <ProFormText name=\"name\" label=\"Name\" rules={[{ required: true }]} />\n <ProFormText name=\"email\" label=\"Email\" rules={[{ required: true }]} />\n <ProFormTextArea name=\"bio\" label=\"Bio\" />\n <ProFormSwitch name=\"active\" label=\"Active\" />\n </DrawerForm>",
|
|
925
|
+
"source": "stories",
|
|
926
|
+
"compilable": false
|
|
927
|
+
},
|
|
928
|
+
"56b494b1a04a352e9bedd066d593b090bbc5039fc29319eceb82865d0e8dfb65": {
|
|
929
|
+
"title": "File Bar",
|
|
930
|
+
"code": "<UploadFileBar fileName=\"document.pdf\" />\n<UploadFileBar fileName=\"failed.pdf\" status={1} message=\"Upload failed\" onRemove={() => {}} />",
|
|
931
|
+
"source": "readme",
|
|
932
|
+
"compilable": true
|
|
933
|
+
},
|
|
934
|
+
"572f2d8e36841d6c929bf0ee4c11423ef33dc618291ed6bd10d900f09cf64d11": {
|
|
935
|
+
"title": "Frameless",
|
|
936
|
+
"code": "{\n const [value, setValue] = useState<string | number | undefined>('btc');\n\n return (\n <Select\n {...args}\n value={value}\n variant=\"frameless\"\n prefix={<Icons name=\"usd\" size={24} color=\"currentColor\" />}\n onChange={(nextValue, option) => {\n setValue(nextValue as string | number | undefined);\n args.onChange?.(nextValue, option);\n }}\n />\n );\n }",
|
|
937
|
+
"source": "stories",
|
|
938
|
+
"compilable": false
|
|
939
|
+
},
|
|
940
|
+
"57555cab23c1ab39cfa023e9e3f6cec2998ddc9537a47354aa1cf1fd14488461": {
|
|
941
|
+
"title": "Canonical usage",
|
|
942
|
+
"code": "import type { ProgressFormatContext } from '@1money/component-ui';",
|
|
943
|
+
"source": "canonical",
|
|
944
|
+
"compilable": true
|
|
945
|
+
},
|
|
946
|
+
"57e5a7e81ccfa1d876cf40e95b6165f9d630fe343bc29dbb15c3fe546e689e62": {
|
|
947
|
+
"title": "Default",
|
|
948
|
+
"code": "<div style={wrapperStyle}>\n <Step {...args} />\n </div>",
|
|
949
|
+
"source": "stories",
|
|
950
|
+
"compilable": false
|
|
951
|
+
},
|
|
952
|
+
"58bad3562da4a5152857d932ada3b06876ddf701e0bc5b396abc799cfee00ff8": {
|
|
953
|
+
"title": "All Variants",
|
|
954
|
+
"code": "<div style={columnStyle}>\n {LABEL_PLACEMENTS.map((placement) => (\n <div key={placement}>\n <h3 style={sectionHeaderStyle}>Label Placement: {placement}</h3>\n <div style={sectionBodyStyle}>\n {/* Default states */}\n <div style={rowStyle}>\n <Checkbox\n {...args}\n labelPlacement={placement}\n label=\"Unchecked\"\n />\n <Checkbox\n {...args}\n labelPlacement={placement}\n defaultChecked\n label=\"Checked\"\n />\n <Checkbox\n {...args}\n labelPlacement={placement}\n indeterminate\n label=\"Indeterminate\"\n />\n </div>\n {/* Disabled states */}\n <div style={rowStyle}>\n <Checkbox\n {...args}\n labelPlacement={placement}\n disabled\n label=\"Disabled\"\n />\n <Checkbox\n {...args}\n labelPlacement={placement}\n checked\n disabled\n label=\"Disabled Checked\"\n />\n <Checkbox\n {...args}\n labelPlacement={placement}\n indeterminate\n disabled\n label=\"Disabled Indeterminate\"\n />\n </div>\n </div>\n </div>\n ))}\n </div>",
|
|
955
|
+
"source": "stories",
|
|
956
|
+
"compilable": false
|
|
957
|
+
},
|
|
958
|
+
"5a95c3048a0d4147931cea1f357e39f808578b8e0f072baa127124f6004cef1d": {
|
|
959
|
+
"title": "Canonical usage",
|
|
960
|
+
"code": "<DialogForm />",
|
|
961
|
+
"source": "canonical",
|
|
962
|
+
"compilable": true
|
|
963
|
+
},
|
|
964
|
+
"5a9b5ddd9a26199701d3d3f2307a6ad3b964f66d5fdbfd30efdbbf8aba0c2c80": {
|
|
965
|
+
"title": "Canonical usage",
|
|
966
|
+
"code": "<ProFormSlider />",
|
|
967
|
+
"source": "canonical",
|
|
968
|
+
"compilable": true
|
|
969
|
+
},
|
|
970
|
+
"5b6b616e8d95d382632b332591de2af84de98f77720ee5b0628d3a44feff076a": {
|
|
971
|
+
"title": "Group With Extra",
|
|
972
|
+
"code": "<ProForm\n {...args}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProForm.Group\n title=\"Contact\"\n extra={<Button color=\"secondary\" size=\"small\">Import</Button>}\n >\n <ProFormText name=\"email\" label=\"Email\" />\n <ProFormText name=\"phone\" label=\"Phone\" />\n </ProForm.Group>\n </ProForm>",
|
|
973
|
+
"source": "stories",
|
|
974
|
+
"compilable": false
|
|
975
|
+
},
|
|
976
|
+
"5ba789cfffb9110e9a147117959a6e59585384a46fa350d42dedc8e0857f1821": {
|
|
977
|
+
"title": "Canonical usage",
|
|
978
|
+
"code": "<ProFormUpload />",
|
|
979
|
+
"source": "canonical",
|
|
980
|
+
"compilable": true
|
|
981
|
+
},
|
|
982
|
+
"5bbda57b2d06dfefaed853ba5ad655bb306fd8ecfbc92a6a96dee1deffc1af2f": {
|
|
983
|
+
"title": "With Content",
|
|
984
|
+
"code": "<Tabs\n defaultActiveKey=\"tab1\"\n items={[\n { key: 'tab1', label: 'Overview', children: <div>Overview content goes here</div> },\n { key: 'tab2', label: 'Transactions', children: <div>Transactions content goes here</div> },\n { key: 'tab3', label: 'Analytics', children: <div>Analytics content goes here</div> },\n ]}\n />",
|
|
985
|
+
"source": "stories",
|
|
986
|
+
"compilable": true
|
|
987
|
+
},
|
|
988
|
+
"5c8961675725144291340a7560c3c798389ce24d786783dedd6ffcac93193a0d": {
|
|
989
|
+
"title": "Batch Resize",
|
|
990
|
+
"code": "{\n const [batchInfo, setBatchInfo] = useState<string>('');\n\n return (\n <div>\n <p style={{ marginBottom: 8, color: '#666' }}>\n Collection batches resize events from multiple children into a single callback:\n </p>\n <ResizeObserver.Collection\n onBatchResize={(infos) => {\n setBatchInfo(\n `Batch: ${infos.length} resize(s) — ${infos.map((i) => `${i.data}: ${i.size.width}×${i.size.height}`).join(', ')}`,\n );\n }}\n >\n <div style={{ display: 'flex', gap: 16 }}>\n {['First', 'Second'].map((name) => (\n <ResizeObserver key={name} data={name}>\n <div style={{ ...boxStyle, minWidth: 150 }}>\n {name}\n </div>\n </ResizeObserver>\n ))}\n </div>\n </ResizeObserver.Collection>\n {batchInfo && <div style={infoStyle}>{batchInfo}</div>}\n </div>\n );\n }",
|
|
991
|
+
"source": "stories",
|
|
992
|
+
"compilable": true
|
|
993
|
+
},
|
|
994
|
+
"5ce7cb216d31f3e8bace6eec75085ae89aa47cfd850b1983e62033e9fc5f6042": {
|
|
995
|
+
"title": "Default",
|
|
996
|
+
"code": "<Tabs items={DEFAULT_ITEMS} />",
|
|
997
|
+
"source": "stories",
|
|
998
|
+
"compilable": true
|
|
999
|
+
},
|
|
1000
|
+
"5dc10afdccbf1759489ec0ca6e8837d8edd2fdacf6965a82e879ea4b1fe9cfbc": {
|
|
1001
|
+
"title": "All Variants",
|
|
1002
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n <div>\n <h3 style={{ marginBottom: 12 }}>Default (3 items)</h3>\n <Segment items={DEFAULT_ITEMS} />\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>5 items</h3>\n <Segment\n items={[\n { value: '1', label: 'Label' },\n { value: '2', label: 'Label' },\n { value: '3', label: 'Label' },\n { value: '4', label: 'Label' },\n { value: '5', label: 'Label' },\n ]}\n />\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>With disabled item</h3>\n <Segment\n items={[\n { value: '1', label: 'Active' },\n { value: '2', label: 'Normal' },\n { value: '3', label: 'Disabled', disabled: true },\n ]}\n />\n </div>\n </div>",
|
|
1003
|
+
"source": "stories",
|
|
1004
|
+
"compilable": true
|
|
1005
|
+
},
|
|
1006
|
+
"5eab08235fada880deb893a45f8e307f765861578cd95522dc38da0053be3353": {
|
|
1007
|
+
"title": "Canonical usage",
|
|
1008
|
+
"code": "import type { PaginationEllipsisItem } from '@1money/component-ui';",
|
|
1009
|
+
"source": "canonical",
|
|
1010
|
+
"compilable": true
|
|
1011
|
+
},
|
|
1012
|
+
"5f3b6d99f2f042d7c984a9f73cb179167b6c80cfbd3c106d1c96ecc86ba1a888": {
|
|
1013
|
+
"title": "Cell States",
|
|
1014
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <Radio\n checked\n variant=\"cell\"\n size=\"large\"\n alignment=\"left\"\n icon=\"swift\"\n label=\"Checked\"\n description=\"Primary selection\"\n style={{ width: 300 }}\n />\n <Radio\n checked\n variant=\"cell\"\n size=\"medium\"\n alignment=\"left\"\n icon=\"swift\"\n label=\"Medium\"\n style={{ width: 180 }}\n />\n <Radio\n checked\n variant=\"cell\"\n size=\"small\"\n alignment=\"left\"\n icon=\"swift\"\n label=\"Small\"\n style={{ width: 180 }}\n />\n <Radio\n checked\n disabled\n variant=\"cell\"\n size=\"large\"\n alignment=\"left\"\n icon=\"swift\"\n label=\"Disabled checked\"\n description=\"Disabled state\"\n style={{ width: 300 }}\n />\n </div>",
|
|
1015
|
+
"source": "stories",
|
|
1016
|
+
"compilable": true
|
|
1017
|
+
},
|
|
1018
|
+
"5f3c0615ec3a69ebd87d06468b31046b347a1553105db72ec7cc2fca6b04678e": {
|
|
1019
|
+
"title": "Group Cell Alignments",
|
|
1020
|
+
"code": "{\n const [leftValue, setLeftValue] = React.useState<string | number>('checked');\n const [centerValue, setCenterValue] = React.useState<string | number>('checked');\n\n const options = [\n {\n value: 'checked',\n label: 'Label',\n description: 'Description',\n icon: 'language',\n },\n {\n value: 'unchecked',\n label: 'Label',\n description: 'Description',\n icon: 'swift',\n },\n ];\n\n const handleLeftChange = (event: RadioChangeEvent) => {\n if (event.target.value !== undefined) {\n setLeftValue(event.target.value);\n }\n };\n\n const handleCenterChange = (event: RadioChangeEvent) => {\n if (event.target.value !== undefined) {\n setCenterValue(event.target.value);\n }\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>\n <div style={{ width: 300 }}>\n <h3 style={{ marginBottom: 12 }}>Alignment Left</h3>\n <RadioGroup\n value={leftValue}\n variant=\"cell\"\n size=\"large\"\n alignment=\"left\"\n direction=\"vertical\"\n onChange={handleLeftChange}\n options={options}\n />\n </div>\n <div style={{ width: 300 }}>\n <h3 style={{ marginBottom: 12 }}>Alignment Center</h3>\n <RadioGroup\n value={centerValue}\n variant=\"cell\"\n size=\"large\"\n alignment=\"center\"\n direction=\"vertical\"\n onChange={handleCenterChange}\n options={options}\n />\n </div>\n </div>\n );\n }",
|
|
1021
|
+
"source": "stories",
|
|
1022
|
+
"compilable": true
|
|
1023
|
+
},
|
|
1024
|
+
"5f4e0a0d85f2ecaf7434a70622e83ab0495c984cb44a41abe7be980b68b4274e": {
|
|
1025
|
+
"title": "Import",
|
|
1026
|
+
"code": "import { Space } from '@1money/components-ui';\n// or\nimport { Space } from '@1money/components-ui/Space';\nimport { SPACE_ALIGN, SPACE_DIRECTION, SPACE_SIZE } from '@1money/components-ui/Space';",
|
|
1027
|
+
"source": "readme",
|
|
1028
|
+
"compilable": true
|
|
1029
|
+
},
|
|
1030
|
+
"5fe4eaf6d6cc1aae1c57021991c5791efa10197d77e9fee4d8d3ad0301ed09b2": {
|
|
1031
|
+
"title": "Canonical usage",
|
|
1032
|
+
"code": "const result = usePagination(options);",
|
|
1033
|
+
"source": "canonical",
|
|
1034
|
+
"compilable": true
|
|
1035
|
+
},
|
|
1036
|
+
"600b7c61c09e62351c4da01ba0451212e347f76292d57d62d472809568ab33f1": {
|
|
1037
|
+
"title": "Canonical usage",
|
|
1038
|
+
"code": "const result = useResizeObserver(enabled, getTarget);",
|
|
1039
|
+
"source": "canonical",
|
|
1040
|
+
"compilable": true
|
|
1041
|
+
},
|
|
1042
|
+
"605adda93170929ef763469422e3708f248624774e5274b6053c7aa0c53b9680": {
|
|
1043
|
+
"title": "Action And Close",
|
|
1044
|
+
"code": "<Alert\n {...args}\n status=\"warning\"\n title=\"New compliance checklist\"\n body=\"A new checklist item is required before the next outbound transfer can be approved.\"\n link={{ label: 'Open checklist', onClick: fn() }}\n action={<Button onClick={fn()}>Review now</Button>}\n closable\n onClose={fn()}\n />",
|
|
1045
|
+
"source": "stories",
|
|
1046
|
+
"compilable": false
|
|
1047
|
+
},
|
|
1048
|
+
"60cbcdaca9952007d461beb3b4f61ed1039f1a0faf6382bf593852a3a1e96d74": {
|
|
1049
|
+
"title": "Canonical usage",
|
|
1050
|
+
"code": "import { Skeleton } from '@1money/components-ui';\n// or\nimport { Skeleton } from '@1money/components-ui/Skeleton';",
|
|
1051
|
+
"source": "canonical",
|
|
1052
|
+
"compilable": true
|
|
1053
|
+
},
|
|
1054
|
+
"61f7894b78494c7b8069bd9cba419dea3dc5215d42e3f43c87b4951f285b8421": {
|
|
1055
|
+
"title": "All Variants",
|
|
1056
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n {VARIANTS.map(variant => (\n <div key={variant}>\n <h3 style={{ marginBottom: 8 }}>{variant}</h3>\n <Divider variant={variant} />\n <Divider variant={variant}>{variant} with text</Divider>\n <Divider variant={variant} orientation=\"left\">Left</Divider>\n <Divider variant={variant} orientation=\"right\">Right</Divider>\n </div>\n ))}\n <h3>Vertical</h3>\n <div>\n Text\n {VARIANTS.map(variant => (\n <React.Fragment key={variant}>\n <Divider type=\"vertical\" variant={variant} />\n {variant}\n </React.Fragment>\n ))}\n </div>\n </div>",
|
|
1057
|
+
"source": "stories",
|
|
1058
|
+
"compilable": true
|
|
1059
|
+
},
|
|
1060
|
+
"62215ceb6b1bce283f5b3dce105d70132d7edfe684fc2e00f9c598761ae2abb4": {
|
|
1061
|
+
"title": "Canonical usage",
|
|
1062
|
+
"code": "import type { PopconfirmProps } from '@1money/component-ui';",
|
|
1063
|
+
"source": "canonical",
|
|
1064
|
+
"compilable": true
|
|
1065
|
+
},
|
|
1066
|
+
"63dbd5aa5b4f9b648a7f6152b99058966f4b36ade7cece4b750f71e4389a4dea": {
|
|
1067
|
+
"title": "Usage",
|
|
1068
|
+
"code": "<Carousel count={4} defaultActiveIndex={0} onChange={(index) => console.log(index)} />",
|
|
1069
|
+
"source": "readme",
|
|
1070
|
+
"compilable": true
|
|
1071
|
+
},
|
|
1072
|
+
"6478fc80ce583f333fa19561a67d364fae1c84389c5242714d4aa85e16ece19c": {
|
|
1073
|
+
"title": "Ellipsis Custom Chars",
|
|
1074
|
+
"code": "<div style={STORY_LAYOUT_STYLE}>\n <Typography.Label size=\"xs\" color=\"default-secondary\">start=6, end=6</Typography.Label>\n <div style={CONSTRAINED_STYLE}>\n <Typography.Body size=\"md\" ellipsis={{ start: 6, end: 6, tooltip: true }}>\n {SENDER_ID}\n </Typography.Body>\n </div>\n\n <Typography.Label size=\"xs\" color=\"default-secondary\">start=10, end=8</Typography.Label>\n <div style={CONSTRAINED_STYLE}>\n <Typography.Body size=\"md\" ellipsis={{ start: 10, end: 8, tooltip: true }}>\n {SENDER_ID}\n </Typography.Body>\n </div>\n </div>",
|
|
1075
|
+
"source": "stories",
|
|
1076
|
+
"compilable": true
|
|
1077
|
+
},
|
|
1078
|
+
"66d442fc9388c014800dbcc672d9dae750c1529fd05f0b26e8f4dbf091abd20b": {
|
|
1079
|
+
"title": "Visual Spec",
|
|
1080
|
+
"code": "<div style={PREVIEW_GRID_STYLE}>\n <TooltipPreviewCard label=\"Title + body / left aligned\" title=\"Title\" body=\"Body text\" />\n <TooltipPreviewCard label=\"Minimum width 48px\" body=\"Hi\" />\n <TooltipPreviewCard label=\"Maximum width 400px on web\" title=\"Long title\" body={LONG_BODY} />\n </div>",
|
|
1081
|
+
"source": "stories",
|
|
1082
|
+
"compilable": true
|
|
1083
|
+
},
|
|
1084
|
+
"67584b9b52bd672e0ebac7428297a5655e868141267114cdc9637baff807b308": {
|
|
1085
|
+
"title": "All Variants",
|
|
1086
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n <div>\n <h3 style={{ marginBottom: 12 }}>Default</h3>\n <Tabs\n items={[\n { key: 'tab1', label: 'Label' },\n { key: 'tab2', label: 'Label' },\n { key: 'tab3', label: 'Label' },\n ]}\n />\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>With Badges</h3>\n <Tabs\n items={[\n { key: 'tab1', label: 'Label', badge: 10 },\n { key: 'tab2', label: 'Label', badge: 5 },\n { key: 'tab3', label: 'Label', badge: 20 },\n ]}\n />\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>With Disabled</h3>\n <Tabs\n items={[\n { key: 'tab1', label: 'Label' },\n { key: 'tab2', label: 'Label', disabled: true },\n { key: 'tab3', label: 'Label' },\n ]}\n />\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>Full Width</h3>\n <Tabs\n fullWidth\n items={[\n { key: 'tab1', label: 'Label' },\n { key: 'tab2', label: 'Label' },\n { key: 'tab3', label: 'Label' },\n ]}\n />\n </div>\n </div>",
|
|
1087
|
+
"source": "stories",
|
|
1088
|
+
"compilable": true
|
|
1089
|
+
},
|
|
1090
|
+
"69b3c7f7f0c52a2b442c48facf31fa65600796fb8e47401b6b3c432389dbf92d": {
|
|
1091
|
+
"title": "Slider Story",
|
|
1092
|
+
"code": "<ProForm\n {...args}\n initialValues={{ volume: 50, price: 200 }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormSlider\n name=\"volume\"\n label=\"Volume\"\n fieldProps={{ min: 0, max: 100, step: 1 }}\n />\n <ProFormSlider\n name=\"price\"\n label=\"Price\"\n fieldProps={{ min: 0, max: 1000, step: 10, valuePrefix: '$' }}\n />\n </ProForm>",
|
|
1093
|
+
"source": "stories",
|
|
1094
|
+
"compilable": false
|
|
1095
|
+
},
|
|
1096
|
+
"6a4d77a29ff76bfcd465b53ac79952fae765bb337ef3ca2affc7781ce487a74f": {
|
|
1097
|
+
"title": "With Icon End",
|
|
1098
|
+
"code": "<Button {...args} iconEnd={<Icons name=\"arrowRight\" />}>\n Icon End\n </Button>",
|
|
1099
|
+
"source": "stories",
|
|
1100
|
+
"compilable": false
|
|
1101
|
+
},
|
|
1102
|
+
"6c73541844cb6bb287f5a4f0c9d25be0cbdd0d09518b1abd0c49b8d738ddfaa8": {
|
|
1103
|
+
"title": "Import",
|
|
1104
|
+
"code": "import { Spinner } from '@1money/components-ui';\n// or\nimport { Spinner } from '@1money/components-ui/Spinner';",
|
|
1105
|
+
"source": "readme",
|
|
1106
|
+
"compilable": true
|
|
1107
|
+
},
|
|
1108
|
+
"6ccfe4f2a1e0923b5c6ee03d7662c164882ad513d3e32a35a1ea7b9500f17169": {
|
|
1109
|
+
"title": "Responsive Usage",
|
|
1110
|
+
"code": "const GRID_GUTTER = { sm: 8, md: 16, lg: 24 };\nconst SPAN_BASE = 12;\nconst SPAN_SM = 6;\nconst SPAN_MD = 4;\nconst OFFSET_MD = 2;\nconst SPAN_LARGE = 3;\n\nimport { GRID_JUSTIFY } from '@1money/components-ui/Grid';\n\nconst GRID_JUSTIFY_RESPONSIVE = {\n sm: GRID_JUSTIFY.start,\n md: GRID_JUSTIFY.spaceBetween,\n lg: GRID_JUSTIFY.end\n};\nconst PUSH_COL = 1;\nconst PULL_COL = 1;\n\n<Grid gutter={GRID_GUTTER}>\n <Grid.Col span={SPAN_BASE} sm={SPAN_SM} md={{ span: SPAN_MD, offset: OFFSET_MD }} lg={SPAN_LARGE} />\n</Grid>\n\n<Grid gutter={GRID_GUTTER} justify={GRID_JUSTIFY_RESPONSIVE}>\n <Grid.Col span={SPAN_BASE} sm={SPAN_SM} md={{ span: SPAN_MD, offset: OFFSET_MD }} lg={SPAN_LARGE} />\n <Grid.Col span={SPAN_BASE} push={PUSH_COL} pull={PULL_COL} />\n</Grid>",
|
|
1111
|
+
"source": "readme",
|
|
1112
|
+
"compilable": true
|
|
1113
|
+
},
|
|
1114
|
+
"6f2b7da00479a6033fdaca36f0646a924c61cbf09cd0e07da6948a884af98a61": {
|
|
1115
|
+
"title": "Dependency",
|
|
1116
|
+
"code": "<ProForm\n {...args}\n initialValues={{ hasAccount: false, accountType: '' }}\n >\n <ProFormSwitch name=\"hasAccount\" label=\"Has Account\" />\n <ProFormDependency name={['hasAccount']}>\n {({ hasAccount }) =>\n hasAccount ? (\n <>\n <ProFormText\n name=\"accountId\"\n label=\"Account ID\"\n rules={[{ required: true }]}\n />\n <ProFormText name=\"accountName\" label=\"Account Name\" />\n </>\n ) : null\n }\n </ProFormDependency>\n </ProForm>",
|
|
1117
|
+
"source": "stories",
|
|
1118
|
+
"compilable": false
|
|
1119
|
+
},
|
|
1120
|
+
"701f468e63d72f0fe836f011aae7941f7202835fe80f43ae13f529a130c5a505": {
|
|
1121
|
+
"title": "Semantic Tags",
|
|
1122
|
+
"code": "<div style={STORY_LAYOUT_STYLE}>\n <Typography.Display size=\"sm\" as=\"h1\">\n Display rendered as h1\n </Typography.Display>\n <Typography.Headline size=\"md\" as=\"h2\">\n Headline rendered as h2\n </Typography.Headline>\n <Typography.Title size=\"lg\" as=\"h3\">\n Title rendered as h3\n </Typography.Title>\n <Typography.Body size=\"md\" as=\"p\">\n Body rendered as p for longer narrative content.\n </Typography.Body>\n <Typography.Label size=\"sm\" htmlFor=\"typography-story-input\">\n Email address\n </Typography.Label>\n <input id=\"typography-story-input\" placeholder=\"Input target for label\" />\n </div>",
|
|
1123
|
+
"source": "stories",
|
|
1124
|
+
"compilable": true
|
|
1125
|
+
},
|
|
1126
|
+
"711c445955f338d909c2ca767156df860542cbd4c4a2dd6f4962abe54d6905fe": {
|
|
1127
|
+
"title": "Canonical usage",
|
|
1128
|
+
"code": "import type { ProFormListAction } from '@1money/component-ui';",
|
|
1129
|
+
"source": "canonical",
|
|
1130
|
+
"compilable": true
|
|
1131
|
+
},
|
|
1132
|
+
"71f7aeb8fd7bb546bc7d562a717683681d8eccf7f2beeee86e3196121d6656f1": {
|
|
1133
|
+
"title": "With Icon Start",
|
|
1134
|
+
"code": "<Button {...args} iconStart={<Icons name=\"add\" />}>\n Icon Start\n </Button>",
|
|
1135
|
+
"source": "stories",
|
|
1136
|
+
"compilable": false
|
|
1137
|
+
},
|
|
1138
|
+
"724f2c2f5081ae9ec1b8b50f385cd5773c50b6ba6c8a9835738b3cd5184d59e5": {
|
|
1139
|
+
"title": "Canonical usage",
|
|
1140
|
+
"code": "import { Icons, IconWrapper, IconHover } from '@1money/components-ui';\n// or\nimport { Icons, IconWrapper, IconHover } from '@1money/components-ui/Icons';\n\n// Type import\nimport type { IconName } from '@1money/components-ui';",
|
|
1141
|
+
"source": "canonical",
|
|
1142
|
+
"compilable": true
|
|
1143
|
+
},
|
|
1144
|
+
"72e53f1f60724efcfebfca8207585573799139c8895777a6a6d283673008ba74": {
|
|
1145
|
+
"title": "Import",
|
|
1146
|
+
"code": "import { CoachMark } from '@1money/components-ui';\n// or\nimport { CoachMark } from '@1money/components-ui/CoachMark';",
|
|
1147
|
+
"source": "readme",
|
|
1148
|
+
"compilable": true
|
|
1149
|
+
},
|
|
1150
|
+
"7374135a0f5702e8c0e689b3ce2576b5c15b47c90d9fffe7c2bcff8693acd9ef": {
|
|
1151
|
+
"title": "Default",
|
|
1152
|
+
"code": "<Segment items={DEFAULT_ITEMS} />",
|
|
1153
|
+
"source": "stories",
|
|
1154
|
+
"compilable": true
|
|
1155
|
+
},
|
|
1156
|
+
"73da19095cdcbe4a8b8d7ec782967002cf9da27f5638d7ec08e376a8d777aeda": {
|
|
1157
|
+
"title": "Controlled and Uncontrolled",
|
|
1158
|
+
"code": "// Standalone controlled\n<Radio\n label=\"Controlled\"\n checked={value}\n onChange={(event) => setValue(event.target.checked)}\n/>\n\n// Standalone uncontrolled\n<Radio label=\"Uncontrolled\" defaultChecked />\n\n// Group controlled\n<RadioGroup value={selected} onChange={handleChange}>\n <Radio value=\"a\" label=\"Option A\" />\n <Radio value=\"b\" label=\"Option B\" />\n</RadioGroup>\n\n// Group uncontrolled\n<RadioGroup defaultValue=\"a\">\n <Radio value=\"a\" label=\"Option A\" />\n <Radio value=\"b\" label=\"Option B\" />\n</RadioGroup>",
|
|
1159
|
+
"source": "readme",
|
|
1160
|
+
"compilable": true
|
|
1161
|
+
},
|
|
1162
|
+
"74f28ec19da10ee7a3cecb129f444ca1e9b9bfa6a44bda5422d89c70a079ddc3": {
|
|
1163
|
+
"title": "Validation",
|
|
1164
|
+
"code": "<ProForm\n {...args}\n initialValues={{}}\n onFinish={(values) => alert('Success: ' + JSON.stringify(values))}\n >\n <ProFormText\n name=\"username\"\n label=\"Username\"\n rules={[\n { required: true, message: 'Username is required' },\n { min: 3, message: 'At least 3 characters' },\n { max: 20, message: 'At most 20 characters' },\n ]}\n />\n <ProFormText\n name=\"email\"\n label=\"Email\"\n rules={[\n { required: true, message: 'Email is required' },\n { pattern: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/, message: 'Invalid email' },\n ]}\n />\n <ProFormPassword\n name=\"password\"\n label=\"Password\"\n rules={[\n { required: true },\n { min: 8, message: 'At least 8 characters' },\n ]}\n />\n <ProFormCheckbox\n name=\"terms\"\n label=\"I accept the terms\"\n rules={[\n {\n validator: (value) => {\n if (!value) return 'You must accept the terms';\n return true;\n },\n },\n ]}\n />\n </ProForm>",
|
|
1165
|
+
"source": "stories",
|
|
1166
|
+
"compilable": false
|
|
1167
|
+
},
|
|
1168
|
+
"76052e611a155b488f8eee38973e3b050274bc58b0a974f66b8c9a55e77e28b6": {
|
|
1169
|
+
"title": "Canonical usage",
|
|
1170
|
+
"code": "import { Typography } from '@1money/components-ui';\n// or\nimport { Typography } from '@1money/components-ui/Typography';",
|
|
1171
|
+
"source": "canonical",
|
|
1172
|
+
"compilable": true
|
|
1173
|
+
},
|
|
1174
|
+
"76302edb4c36b3507a837c478a5be477379f78f3e0093f51d2c5874f610a1fb5": {
|
|
1175
|
+
"title": "Detail Panel Spacing",
|
|
1176
|
+
"code": "<div style={DEMO_PAGE_STYLE}>\n <Space size={SPACE_SIZE.large} align={SPACE_ALIGN.start} style={{ width: '100%' }}>\n <Space direction={SPACE_DIRECTION.vertical} size={SPACE_SIZE.middle} style={DEMO_COLUMN_STYLE}>\n <div style={DEMO_INLINE_ITEM_STYLE}>Business Name</div>\n <div style={DEMO_INLINE_ITEM_STYLE}>Registration Number</div>\n <div style={DEMO_INLINE_ITEM_STYLE}>Country</div>\n <div style={DEMO_INLINE_ITEM_STYLE}>Created At</div>\n </Space>\n\n <Space direction={SPACE_DIRECTION.vertical} size={SPACE_SIZE.middle} style={DEMO_COLUMN_STYLE}>\n <Space split={<span>|</span>} size={SPACE_SIZE.small}>\n <span>Risk: Medium</span>\n <span>KYB: Reviewing</span>\n <span>AML: Passed</span>\n </Space>\n <div style={DEMO_INLINE_ITEM_STYLE}>Operator: Derrick</div>\n <div style={DEMO_INLINE_ITEM_STYLE}>Last Updated: 2026-02-09</div>\n </Space>\n </Space>\n </div>",
|
|
1177
|
+
"source": "stories",
|
|
1178
|
+
"compilable": true
|
|
1179
|
+
},
|
|
1180
|
+
"766dd217b19892aada825661298c8a2786c749173f3ec4d4f1f4a8e6aa0c5724": {
|
|
1181
|
+
"title": "Ellipsis",
|
|
1182
|
+
"code": "// Default: start=8, end=4\n<Typography.Body size=\"md\" ellipsis>\n 0x814f0d3a9b2c7e1f5d6a8b4c3e2f1a0d749f\n</Typography.Body>\n// Fits → 0x814f0d3a9b2c7e1f5d6a8b4c3e2f1a0d749f\n// Overflows → 0x814f0d...749f\n\n// Custom character counts\n<Typography.Body size=\"md\" ellipsis={{ start: 6, end: 6 }}>\n 0x814f0d3a9b2c7e1f5d6a8b4c3e2f1a0d749f\n</Typography.Body>\n// Overflows → 0x814f...0d749f\n\n// With tooltip showing full text on hover\n<Typography.Body size=\"md\" ellipsis={{ tooltip: true }}>\n 0x814f0d3a9b2c7e1f5d6a8b4c3e2f1a0d749f\n</Typography.Body>",
|
|
1183
|
+
"source": "readme",
|
|
1184
|
+
"compilable": true
|
|
1185
|
+
},
|
|
1186
|
+
"770c9ef1e8d4b176e14cf2288788ed37782cbbee674dbb3f3017c1714e81a200": {
|
|
1187
|
+
"title": "Import",
|
|
1188
|
+
"code": "import { Switch } from '@1money/components-ui';\n// or\nimport { Switch } from '@1money/components-ui/Switch';",
|
|
1189
|
+
"source": "readme",
|
|
1190
|
+
"compilable": true
|
|
1191
|
+
},
|
|
1192
|
+
"77b3bac4d9e36462c300020fa400a7cfe5bc7aa77bd896162f48c5d77a0ada23": {
|
|
1193
|
+
"title": "Canonical usage",
|
|
1194
|
+
"code": "import type { DrawerPlacement } from '@1money/component-ui';",
|
|
1195
|
+
"source": "canonical",
|
|
1196
|
+
"compilable": true
|
|
1197
|
+
},
|
|
1198
|
+
"784dd70341f79c53f5d9474c553dbaa803f65c317904a95d6b511fd57dcff804": {
|
|
1199
|
+
"title": "Canonical usage",
|
|
1200
|
+
"code": "<ProFormGroup />",
|
|
1201
|
+
"source": "canonical",
|
|
1202
|
+
"compilable": true
|
|
1203
|
+
},
|
|
1204
|
+
"7880909af758a291affc6ba2a56af087c012f00945684528454d55e9faffbb53": {
|
|
1205
|
+
"title": "Sidebar Content Layout",
|
|
1206
|
+
"code": "<div style={DEMO_PAGE_STYLE}>\n <Flex gap={GAP_MIDDLE} align={FLEX_ALIGN.start} justify={FLEX_JUSTIFY.start} wrap={WRAP_DISABLED}>\n <Flex vertical gap={GAP_SMALL} style={{ ...DEMO_PANEL_STYLE, minWidth: 220 }}>\n <div style={DEMO_ITEM_STYLE}>Menu Group A</div>\n <div style={DEMO_ITEM_STYLE}>Menu Group B</div>\n <div style={DEMO_ITEM_STYLE}>Menu Group C</div>\n </Flex>\n\n <Flex vertical gap={GAP_MIDDLE} style={{ ...DEMO_PANEL_STYLE, flex: 1 }}>\n <Flex align={FLEX_ALIGN.center} justify={FLEX_JUSTIFY.spaceBetween}>\n <div style={DEMO_ITEM_STYLE}>Page Title</div>\n <Flex gap={GAP_SMALL}>\n <div style={DEMO_ITEM_STYLE}>Export</div>\n <div style={DEMO_ITEM_STYLE}>Create</div>\n </Flex>\n </Flex>\n <div style={DEMO_PANEL_STYLE}>Main Content</div>\n <Flex align={FLEX_ALIGN.center} justify={FLEX_JUSTIFY.end} gap={GAP_SMALL}>\n <div style={DEMO_ITEM_STYLE}>Cancel</div>\n <div style={DEMO_ITEM_STYLE}>Save</div>\n </Flex>\n </Flex>\n </Flex>\n </div>",
|
|
1207
|
+
"source": "stories",
|
|
1208
|
+
"compilable": true
|
|
1209
|
+
},
|
|
1210
|
+
"799a697a88c95889b4c090d62789d89c9f7e92453d3a048ccb28e552fbe17b5b": {
|
|
1211
|
+
"title": "Canonical usage",
|
|
1212
|
+
"code": "import type { ProFormContextValue } from '@1money/component-ui';",
|
|
1213
|
+
"source": "canonical",
|
|
1214
|
+
"compilable": true
|
|
1215
|
+
},
|
|
1216
|
+
"79d6736104fbd2a0cdb0081045a650f31fb2cdc051f7170c185c73b5a70c2bf0": {
|
|
1217
|
+
"title": "Canonical usage",
|
|
1218
|
+
"code": "import type { TriggerAction } from '@1money/component-ui';",
|
|
1219
|
+
"source": "canonical",
|
|
1220
|
+
"compilable": true
|
|
1221
|
+
},
|
|
1222
|
+
"7ae894e8181a0534204e98888ca38826cde3925bb26787a732a0829c181669a3": {
|
|
1223
|
+
"title": "Canonical usage",
|
|
1224
|
+
"code": "import type { TourStep } from '@1money/component-ui';",
|
|
1225
|
+
"source": "canonical",
|
|
1226
|
+
"compilable": true
|
|
1227
|
+
},
|
|
1228
|
+
"7aff0837c66402bc8bfd244cefc96957343db1dc910f9d19c3fd5a4d38936448": {
|
|
1229
|
+
"title": "Horizontal Scroll",
|
|
1230
|
+
"code": "<div style={{ ...containerStyle, width: 400 }}>\n <VirtualList\n data={data1000}\n height={300}\n itemHeight={30}\n itemKey=\"id\"\n scrollWidth={800}\n >\n {(item: Item, _index, { style, offsetX }) => (\n <div\n style={{\n ...itemStyle(30),\n ...style,\n transform: `translateX(-${offsetX}px)`,\n width: 800,\n }}\n >\n <span>Item {item.id}</span>\n <span style={{ color: '#999', fontSize: 12 }}>Wide content here →</span>\n <span style={{ marginLeft: 200 }}>End</span>\n </div>\n )}\n </VirtualList>\n </div>",
|
|
1231
|
+
"source": "stories",
|
|
1232
|
+
"compilable": true
|
|
1233
|
+
},
|
|
1234
|
+
"7b215bce46f64784de7156995e907e66d62ce4f4a9b7cb0950fa2f8f78463ad3": {
|
|
1235
|
+
"title": "All Placements",
|
|
1236
|
+
"code": "<div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(3, 1fr)',\n gap: 48,\n padding: 120,\n textAlign: 'center',\n }}\n >\n {PLACEMENTS.map((placement) => (\n <div key={placement}>\n <button id={`tooltip-${placement}`}>{placement}</button>\n <Tooltip {...args} placement={placement} anchorSelect={`#tooltip-${placement}`} />\n </div>\n ))}\n </div>",
|
|
1237
|
+
"source": "stories",
|
|
1238
|
+
"compilable": false
|
|
1239
|
+
},
|
|
1240
|
+
"7b2c94c513acf5b275219e155daac0f581e31ca51335008c34cfe3aac8e86beb": {
|
|
1241
|
+
"title": "All Variants",
|
|
1242
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n {SIZES.map(size => (\n <div key={size}>\n <h3 style={{ marginBottom: 12 }}>{size}</h3>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 24 }}>\n <Calendar\n size={size}\n label=\"Default\"\n required\n appendTo={null}\n />\n <Calendar\n size={size}\n label=\"Disabled\"\n disabled\n appendTo={null}\n />\n <Calendar\n size={size}\n label=\"Invalid\"\n invalid\n message=\"This field is required\"\n appendTo={null}\n />\n <Calendar\n size={size}\n label=\"Success\"\n success\n message=\"Looks good!\"\n appendTo={null}\n />\n </div>\n </div>\n ))}\n </div>",
|
|
1243
|
+
"source": "stories",
|
|
1244
|
+
"compilable": true
|
|
1245
|
+
},
|
|
1246
|
+
"7decc20ca0112ca8b497a08d1131565c7fc9d060ebdee8a34422d6f60b1a5c00": {
|
|
1247
|
+
"title": "Non Virtual",
|
|
1248
|
+
"code": "{\n const smallData = generateData(20);\n return (\n <div style={containerStyle}>\n <VirtualList\n data={smallData}\n height={300}\n itemHeight={30}\n itemKey=\"id\"\n virtual={false}\n >\n {(item: Item) => (\n <div style={itemStyle(item.height)}>\n <span>Item {item.id} (non-virtual)</span>\n </div>\n )}\n </VirtualList>\n </div>\n );\n }",
|
|
1249
|
+
"source": "stories",
|
|
1250
|
+
"compilable": true
|
|
1251
|
+
},
|
|
1252
|
+
"7e1e1d6bbd91a0fc8b5a8fd8d047345df926d0330af9470a74e3bc6326e04ca1": {
|
|
1253
|
+
"title": "All Variants",
|
|
1254
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 32, maxWidth: 400 }}>\n <div>\n <h3 style={{ marginBottom: 12 }}>Not Started</h3>\n <Slider\n label=\"Label\"\n description=\"Description\"\n valuePrefix=\"$\"\n />\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>Default (value=40)</h3>\n <Slider\n label=\"Label\"\n description=\"Description\"\n valuePrefix=\"$\"\n defaultValue={40}\n />\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>Disabled</h3>\n <Slider\n label=\"Label\"\n description=\"Description\"\n valuePrefix=\"$\"\n disabled\n />\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>Without Label</h3>\n <Slider\n description=\"Description\"\n showLabel={false}\n defaultValue={60}\n />\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>Without Description</h3>\n <Slider\n label=\"Label\"\n valuePrefix=\"$\"\n showDescription={false}\n defaultValue={75}\n />\n </div>\n </div>",
|
|
1255
|
+
"source": "stories",
|
|
1256
|
+
"compilable": true
|
|
1257
|
+
},
|
|
1258
|
+
"7e26a59ffd74e1167b6e8cc158a6b4d57088a2809930de494ce3b85f7c59a718": {
|
|
1259
|
+
"title": "Tag Group Wrap Layout",
|
|
1260
|
+
"code": "<div style={DEMO_PAGE_STYLE}>\n <Flex wrap={WRAP_ENABLED} gap={GAP_SMALL} align={FLEX_ALIGN.center} justify={FLEX_JUSTIFY.start}>\n <div style={DEMO_TAG_STYLE}>Pending</div>\n <div style={DEMO_TAG_STYLE}>Approved</div>\n <div style={DEMO_TAG_STYLE}>Rejected</div>\n <div style={DEMO_TAG_STYLE}>In Review</div>\n <div style={DEMO_TAG_STYLE}>Manual Check</div>\n <div style={DEMO_TAG_STYLE}>Needs Update</div>\n <div style={DEMO_TAG_STYLE}>Completed</div>\n <div style={DEMO_TAG_STYLE}>Escalated</div>\n </Flex>\n </div>",
|
|
1261
|
+
"source": "stories",
|
|
1262
|
+
"compilable": true
|
|
1263
|
+
},
|
|
1264
|
+
"7e423f9896eb2bcccdb051f9cae6f76f83c431686da59f2d1c5a3d6a8ce51474": {
|
|
1265
|
+
"title": "Canonical usage",
|
|
1266
|
+
"code": "import { Carousel } from '@1money/components-ui';\n// or\nimport { Carousel } from '@1money/components-ui/Carousel';",
|
|
1267
|
+
"source": "canonical",
|
|
1268
|
+
"compilable": true
|
|
1269
|
+
},
|
|
1270
|
+
"7f54085ee6892564556d190e01d8e809af4cd0841f2c8c6876faeb511fbe8834": {
|
|
1271
|
+
"title": "All Field Types",
|
|
1272
|
+
"code": "<ProForm\n {...args}\n initialValues={{\n text: 'Hello',\n textWithButton: '',\n password: 'secret123',\n textarea: 'Multi-line\\ncontent',\n agree: true,\n options: [],\n darkMode: false,\n role: 'admin',\n volume: 60,\n date: null,\n }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormText name=\"text\" label=\"Text Input\" placeholder=\"Type here...\" />\n <ProFormText\n name=\"textWithButton\"\n label=\"Text with Button\"\n placeholder=\"Enter verification code\"\n fieldProps={{\n suffix: (\n <Button color=\"primary\" size=\"small\" style={{ marginRight: -4 }}>\n Send Code\n </Button>\n ),\n }}\n />\n <ProFormPassword name=\"password\" label=\"Password\" placeholder=\"Password\" />\n <ProFormTextArea name=\"textarea\" label=\"Text Area\" placeholder=\"Enter long text\" />\n <ProFormCheckbox name=\"agree\" label=\"I agree to the terms\" />\n <ProFormCheckboxGroup\n name=\"options\"\n label=\"Pick options\"\n fieldProps={{\n options: [\n { label: 'Option A', value: 'a' },\n { label: 'Option B', value: 'b' },\n { label: 'Option C', value: 'c' },\n ],\n }}\n />\n <ProFormSwitch name=\"darkMode\" label=\"Dark Mode\" />\n <ProFormRadioGroup\n name=\"role\"\n label=\"Role\"\n fieldProps={{\n direction: 'horizontal',\n options: [\n { label: 'Admin', value: 'admin' },\n { label: 'Editor', value: 'editor' },\n { label: 'Viewer', value: 'viewer' },\n ],\n }}\n />\n <ProFormSlider\n name=\"volume\"\n label=\"Volume\"\n fieldProps={{ min: 0, max: 100 }}\n />\n <ProFormDatePicker\n name=\"date\"\n label=\"Date\"\n fieldProps={{ dateFormat: 'yy-mm-dd' }}\n />\n </ProForm>",
|
|
1273
|
+
"source": "stories",
|
|
1274
|
+
"compilable": false
|
|
1275
|
+
},
|
|
1276
|
+
"7f9b721c6811ebeeeda10ed23eb590ad0f0d00b3e64ce2aedb8a6e3b12179071": {
|
|
1277
|
+
"title": "Grouped Asset Options",
|
|
1278
|
+
"code": "{\n const [value, setValue] = useState<string | number | undefined>('usdt');\n\n return (\n <div style={storyContainerStyle}>\n <Select\n {...args}\n value={value}\n renderOption={renderAssetOption}\n onChange={(nextValue, option) => {\n setValue(nextValue as string | number | undefined);\n args.onChange?.(nextValue, option);\n }}\n />\n </div>\n );\n }",
|
|
1279
|
+
"source": "stories",
|
|
1280
|
+
"compilable": false
|
|
1281
|
+
},
|
|
1282
|
+
"7fcff23beb3f8649dd3c8e6b827035a4838bd0ceb71aec2a6debfbd16fc7d1f8": {
|
|
1283
|
+
"title": "Basic",
|
|
1284
|
+
"code": "<DrawerLauncher {...args} />",
|
|
1285
|
+
"source": "stories",
|
|
1286
|
+
"compilable": false
|
|
1287
|
+
},
|
|
1288
|
+
"802d7a93824c4a4841c52f2688f4d5b201b3c4f56435625c03ecafb2df0e8db6": {
|
|
1289
|
+
"title": "Canonical usage",
|
|
1290
|
+
"code": "import type { SelectStatus } from '@1money/component-ui';",
|
|
1291
|
+
"source": "canonical",
|
|
1292
|
+
"compilable": true
|
|
1293
|
+
},
|
|
1294
|
+
"81fa795ca4a1acae4ec31efda3c21167df7e3f24ad1461056a90469ff70b835a": {
|
|
1295
|
+
"title": "Multi Select With Checkbox",
|
|
1296
|
+
"code": "{\n const [selected, setSelected] = useState<string[]>(['Banana', 'Date']);\n\n const toggle = (item: string) => {\n setSelected((prev) =>\n prev.includes(item) ? prev.filter((v) => v !== item) : [...prev, item],\n );\n };\n\n return (\n <Dropdown\n {...args}\n overlayStyle={{ minWidth: 260 }}\n content={\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {selected.length > 0 && (\n <div style={selectedBarStyle}>\n <span style={{ fontSize: 14, fontWeight: 500, color: '#131313' }}>\n {selected.length} selected\n </span>\n <button\n type=\"button\"\n style={clearAllBtnStyle}\n onClick={() => setSelected([])}\n >\n <Icons name=\"cross\" size={16} color=\"#ae0000\" />\n Clear all\n </button>\n </div>\n )}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {SIMPLE_ITEMS.map((item) => (\n <div\n key={item}\n style={{\n padding: '6px 12px',\n borderRadius: 8,\n fontSize: 14,\n backgroundColor: selected.includes(item) ? '#f8f8f8' : 'transparent',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, cursor: 'pointer' }} onClick={() => toggle(item)}>\n <Checkbox\n checked={selected.includes(item)}\n onChange={() => toggle(item)}\n />\n <TypographyBody>{item}</TypographyBody>\n </div>\n\n </div>\n ))}\n </div>\n </div>\n }\n >\n <Button>\n {selected.length > 0 ? `${selected.length} selected` : 'Select items'}\n </Button>\n </Dropdown>\n );\n }",
|
|
1297
|
+
"source": "stories",
|
|
1298
|
+
"compilable": false
|
|
1299
|
+
},
|
|
1300
|
+
"8217407dd420ce682fb91f9e1bba564e90bed8d67c39533ac62c057b69593987": {
|
|
1301
|
+
"title": "Usage",
|
|
1302
|
+
"code": "<Input label=\"Amount\" placeholder=\"Value\" />\n\n<Input.Password label=\"Password\" />\n\n<Input.Search label=\"Search\" onSearch={(value) => console.log(value)} />\n\n<Input.TextArea label=\"Memo\" rows={4} />\n\n<Input.OTP length={6} />",
|
|
1303
|
+
"source": "readme",
|
|
1304
|
+
"compilable": true
|
|
1305
|
+
},
|
|
1306
|
+
"829d1add076b11f67d3d30e761c7861b952e35bb1ae8a1c71c99a97bbf5318a9": {
|
|
1307
|
+
"title": "All States",
|
|
1308
|
+
"code": "<div style={previewStackStyle}>\n <Cell {...args}>Authenticator app</Cell>\n <Cell {...args} className=\"om-component-ui-cell-hovered\">\n Authenticator app\n </Cell>\n <Cell {...args} active>\n Authenticator app\n </Cell>\n <Cell {...args} disabled>\n Authenticator app\n </Cell>\n </div>",
|
|
1309
|
+
"source": "stories",
|
|
1310
|
+
"compilable": false
|
|
1311
|
+
},
|
|
1312
|
+
"82ed28632bfdbef8997d2ce35118bfa9620a94a8c2ee8ebf3228c37f66eca988": {
|
|
1313
|
+
"title": "Decorations",
|
|
1314
|
+
"code": "<div style={STORY_LAYOUT_STYLE}>\n <Typography.Body size=\"md\" italic>\n Italic body copy\n </Typography.Body>\n <Typography.Body size=\"md\" underline>\n Underlined body copy\n </Typography.Body>\n <Typography.Body size=\"md\" delete>\n Deleted body copy\n </Typography.Body>\n <Typography.Body size=\"md\" underline delete>\n Underlined and deleted body copy\n </Typography.Body>\n <Typography.Link size=\"md\" href=\"https://ant.design/components/typography/\" underline delete>\n Link with combined decoration\n </Typography.Link>\n <Typography.Label size=\"md\" disabled>\n Disabled label\n </Typography.Label>\n </div>",
|
|
1315
|
+
"source": "stories",
|
|
1316
|
+
"compilable": true
|
|
1317
|
+
},
|
|
1318
|
+
"832687bdcc14df6731994d11b086d90daa70e8c701da773ecd71389df82887db": {
|
|
1319
|
+
"title": "Usage",
|
|
1320
|
+
"code": "<Tabs\n defaultActiveKey=\"tab1\"\n items={[\n { key: 'tab1', label: 'Overview', badge: 5 },\n { key: 'tab2', label: 'Transactions' },\n { key: 'tab3', label: 'Analytics', disabled: true },\n ]}\n onChange={(key) => console.log('Active tab:', key)}\n/>",
|
|
1321
|
+
"source": "readme",
|
|
1322
|
+
"compilable": true
|
|
1323
|
+
},
|
|
1324
|
+
"834b1493f597716ffd0faa47a8af73c11fd286bff5048777205a4596bd3e648b": {
|
|
1325
|
+
"title": "Sync To Url",
|
|
1326
|
+
"code": "<QueryFilter\n {...args}\n syncToUrl\n onFinish={(values) => {\n console.log('QueryFilter submit:', values);\n alert('Check URL bar — params synced!\\n' + JSON.stringify(values));\n }}\n >\n <ProFormText name=\"keyword\" label=\"Keyword\" placeholder=\"Search...\" />\n <ProFormSelect\n name=\"status\"\n label=\"Status\"\n valueEnum={{ all: 'All', active: 'Active', inactive: 'Inactive' }}\n />\n </QueryFilter>",
|
|
1327
|
+
"source": "stories",
|
|
1328
|
+
"compilable": false
|
|
1329
|
+
},
|
|
1330
|
+
"838291178b40cf32c5a10bdfadfad93e6a54827006c573ba8a145db2e9bf5697": {
|
|
1331
|
+
"title": "Usage",
|
|
1332
|
+
"code": "<Checkbox\n checked={isChecked}\n label=\"Accept terms\"\n description=\"You must accept the terms to continue\"\n onChange={(event) => setIsChecked(event.target.checked)}\n/>",
|
|
1333
|
+
"source": "readme",
|
|
1334
|
+
"compilable": true
|
|
1335
|
+
},
|
|
1336
|
+
"83a7f14ec7ad74308dcc340c21d3a1bd3bfae1a54793a236229c65619188361f": {
|
|
1337
|
+
"title": "Canonical usage",
|
|
1338
|
+
"code": "import { Input } from '@1money/components-ui';\n// or\nimport { Input } from '@1money/components-ui/Input';",
|
|
1339
|
+
"source": "canonical",
|
|
1340
|
+
"compilable": true
|
|
1341
|
+
},
|
|
1342
|
+
"83f9c4b31401922ddc84d60264badd258d516373ccfc2b81813bf57f5c7a1e5a": {
|
|
1343
|
+
"title": "Canonical usage",
|
|
1344
|
+
"code": "<ProFormFieldSet />",
|
|
1345
|
+
"source": "canonical",
|
|
1346
|
+
"compilable": true
|
|
1347
|
+
},
|
|
1348
|
+
"842244e70f89e2aaf6941718de836ab3a6e08d642a4d4bb2e80cee160158470f": {
|
|
1349
|
+
"title": "Default",
|
|
1350
|
+
"code": "{\n const sizes = ['large', 'small'] as const;\n const statuses = ['default', 'error'] as const;\n const valueTypes = ['Placeholder', 'Filled'] as const;\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 40 }}>\n {sizes.map((size) => (\n <div key={size}>\n <h3 style={{ margin: '0 0 16px', textTransform: 'capitalize' }}>{size}</h3>\n <div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n {statuses.map((status) =>\n valueTypes.map((vt) => (\n <div key={`${status}-${vt}`} style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>\n {status} / {vt}\n </p>\n <Input\n size={size}\n status={status}\n label=\"Label\"\n feedback=\"Feedback\"\n feedbackIcon={status === 'error' ? <Icons name=\"error\" size={16} /> : <Icons name=\"info\" size={16} />}\n placeholder=\"Value\"\n allowClear\n defaultValue={vt === 'Filled' ? 'Input value' : undefined}\n />\n </div>\n )),\n )}\n {/* Read-Only */}\n {valueTypes.map((vt) => (\n <div key={`readonly-${vt}`} style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>\n read-only / {vt}\n </p>\n <Input\n size={size}\n readOnly\n label=\"Label\"\n feedback=\"Feedback\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n placeholder=\"Value\"\n defaultValue={vt === 'Filled' ? 'Read-only value' : undefined}\n />\n </div>\n ))}\n {/* Disabled */}\n {valueTypes.map((vt) => (\n <div key={`disabled-${vt}`} style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>\n disabled / {vt}\n </p>\n <Input\n size={size}\n disabled\n label=\"Label\"\n feedback=\"Feedback\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n placeholder=\"Value\"\n defaultValue={vt === 'Filled' ? 'Disabled value' : undefined}\n />\n </div>\n ))}\n </div>\n </div>\n ))}\n\n {/* ── With Prefix / Suffix ── */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>With Prefix / Suffix</h3>\n <div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Prefix + Suffix</p>\n <Input\n label=\"Label\"\n defaultValue=\"100\"\n prefix={<span>USD</span>}\n suffix={<span>Max</span>}\n allowClear\n />\n </div>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Prefix only</p>\n <Input\n label=\"Label\"\n placeholder=\"Enter amount\"\n prefix={<span>$</span>}\n allowClear\n />\n </div>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Suffix only</p>\n <Input\n label=\"Label\"\n placeholder=\"Enter email\"\n suffix={<span>@gmail.com</span>}\n />\n </div>\n </div>\n </div>\n\n {/* ── Required / Info ── */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>Required / Info</h3>\n <div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Required</p>\n <Input\n label=\"Label\"\n required\n placeholder=\"Required field\"\n />\n </div>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Optional (required=false)</p>\n <Input\n label=\"Label\"\n required={false}\n placeholder=\"Optional field\"\n />\n </div>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>With Info</p>\n <Input\n label=\"Label\"\n info=\"Optional hint\"\n placeholder=\"Value\"\n />\n </div>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>With Tip</p>\n <Input\n label=\"Label\"\n tip=\"This is a helpful tooltip\"\n placeholder=\"Value\"\n />\n </div>\n <div style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Optional + Info + Tip</p>\n <Input\n label=\"Label\"\n required={false}\n info=\"Optional hint\"\n tip=\"This is a helpful tooltip\"\n placeholder=\"Value\"\n />\n </div>\n </div>\n </div>\n </div>\n );\n }",
|
|
1351
|
+
"source": "stories",
|
|
1352
|
+
"compilable": true
|
|
1353
|
+
},
|
|
1354
|
+
"85a3e1ad39461a191a1fdd7c9e26a2810d6e3f39e4304aad3029d5eec043b3d8": {
|
|
1355
|
+
"title": "RadioGroup With Options",
|
|
1356
|
+
"code": "const [selected, setSelected] = useState<string | number>('email');\n\n<RadioGroup\n value={selected}\n onChange={(event) => {\n if (event.target.value !== undefined) {\n setSelected(event.target.value);\n }\n }}\n options={[\n { value: 'email', label: 'Email', description: 'Receive via email' },\n { value: 'sms', label: 'SMS', description: 'Receive via text message' },\n { value: 'push', label: 'Push', description: 'Receive on your device' },\n ]}\n/>",
|
|
1357
|
+
"source": "readme",
|
|
1358
|
+
"compilable": true
|
|
1359
|
+
},
|
|
1360
|
+
"85bd84178bbfcd56c92db6d690a33530c91f2485e3d9d27441e33fdf838e377f": {
|
|
1361
|
+
"title": "Canonical usage",
|
|
1362
|
+
"code": "<ProFormList name=\"name\" />",
|
|
1363
|
+
"source": "canonical",
|
|
1364
|
+
"compilable": true
|
|
1365
|
+
},
|
|
1366
|
+
"8635e5203dcc0ffc85bde3edc3cafc477676635bb31ab8c71a82f13a90c00b5d": {
|
|
1367
|
+
"title": "Error",
|
|
1368
|
+
"code": "<div style={wrapperStyle}>\n <Step\n {...args}\n items={[\n {\n key: STEP_ITEM_KEYS.start,\n title: STEP_SAMPLE_COPY.title,\n description: STEP_SAMPLE_COPY.description,\n status: STEP_STATUS.error,\n tag: STEP_SAMPLE_COPY.tag,\n },\n {\n key: STEP_ITEM_KEYS.complete,\n title: STEP_SAMPLE_COPY.title,\n description: STEP_SAMPLE_COPY.description,\n status: STEP_STATUS.error,\n tag: STEP_SAMPLE_COPY.tag,\n },\n {\n key: STEP_ITEM_KEYS.error,\n title: STEP_SAMPLE_COPY.title,\n description: STEP_SAMPLE_COPY.description,\n status: STEP_STATUS.default,\n tag: STEP_SAMPLE_COPY.tag,\n },\n ]}\n />\n </div>",
|
|
1369
|
+
"source": "stories",
|
|
1370
|
+
"compilable": false
|
|
1371
|
+
},
|
|
1372
|
+
"86adb3cfba3b31e2471a79d61a1b957e43bef02210b83c118411573478e7d4d7": {
|
|
1373
|
+
"title": "Canonical usage",
|
|
1374
|
+
"code": "import { notification } from '@1money/components-ui';\n// or\nimport notification from '@1money/components-ui/Notification';",
|
|
1375
|
+
"source": "canonical",
|
|
1376
|
+
"compilable": true
|
|
1377
|
+
},
|
|
1378
|
+
"87119f77a8e04ec0f07dec55f2ef7985b167400772592d70172ee644167c1ebe": {
|
|
1379
|
+
"title": "Canonical usage",
|
|
1380
|
+
"code": "<ProFormSwitch />",
|
|
1381
|
+
"source": "canonical",
|
|
1382
|
+
"compilable": true
|
|
1383
|
+
},
|
|
1384
|
+
"87b1990f73c96b7555165d59c2646f36d1db7d9f27712298b04b46ac63020d03": {
|
|
1385
|
+
"title": "Controlled",
|
|
1386
|
+
"code": "{\n const [open, setOpen] = useState(false);\n\n return (\n <div style={POPCONFIRM_STORY_STYLE.controlledWrapper}>\n <Popconfirm\n {...args}\n open={open}\n onOpenChange={(nextOpen) => {\n setOpen(nextOpen);\n args.onOpenChange?.(nextOpen);\n }}\n onCancel={(event, context) => {\n args.onCancel?.(event, context);\n setOpen(false);\n }}\n onConfirm={(event, context) => {\n args.onConfirm?.(event, context);\n setOpen(false);\n }}\n >\n <Button>{POPCONFIRM_DEMO_COPY.controlledTriggerText}</Button>\n </Popconfirm>\n <Button\n size={BUTTON_SIZE.small}\n color={BUTTON_COLOR.grey}\n onClick={() => setOpen((prev) => !prev)}\n >\n {POPCONFIRM_DEMO_COPY.toggleText}: {open\n ? POPCONFIRM_DEMO_COPY.openStateText\n : POPCONFIRM_DEMO_COPY.closedStateText}\n </Button>\n </div>\n );\n }",
|
|
1387
|
+
"source": "stories",
|
|
1388
|
+
"compilable": false
|
|
1389
|
+
},
|
|
1390
|
+
"87dd752d00210f310d98413fe703cdc2d1dd610bd62efc974185675ea4f82d78": {
|
|
1391
|
+
"title": "Canonical usage",
|
|
1392
|
+
"code": "import type { DrawerFormProps } from '@1money/component-ui';",
|
|
1393
|
+
"source": "canonical",
|
|
1394
|
+
"compilable": true
|
|
1395
|
+
},
|
|
1396
|
+
"87df6d0f746b9be426eb490a25c877d56ac0252bcbdc0d69fa90260397387d4c": {
|
|
1397
|
+
"title": "Canonical usage",
|
|
1398
|
+
"code": "import type { DrawerProps } from '@1money/component-ui';",
|
|
1399
|
+
"source": "canonical",
|
|
1400
|
+
"compilable": true
|
|
1401
|
+
},
|
|
1402
|
+
"88336a196e8322974055de2b8c590f70ade08e176b0eac3f8cd6b72800b1b63a": {
|
|
1403
|
+
"title": "Canonical usage",
|
|
1404
|
+
"code": "import type { ProFormListProps } from '@1money/component-ui';",
|
|
1405
|
+
"source": "canonical",
|
|
1406
|
+
"compilable": true
|
|
1407
|
+
},
|
|
1408
|
+
"88a98229b741820a7e0d61f5e3e8e51340ac8d1cc2eb5332be8189a42f43b6ff": {
|
|
1409
|
+
"title": "No Animation",
|
|
1410
|
+
"code": "<Tabs items={DEFAULT_ITEMS} animated={false} />",
|
|
1411
|
+
"source": "stories",
|
|
1412
|
+
"compilable": true
|
|
1413
|
+
},
|
|
1414
|
+
"88c9a5db9af74e9bf306d1fde453862a643a76dc012d945baefc628eb65abacc": {
|
|
1415
|
+
"title": "Canonical usage",
|
|
1416
|
+
"code": "import { Grid, Row, Col } from '@1money/components-ui';\n// or\nimport { Grid, Row, Col } from '@1money/components-ui/Grid';\nimport { GRID_ALIGN, GRID_JUSTIFY } from '@1money/components-ui/Grid';",
|
|
1417
|
+
"source": "canonical",
|
|
1418
|
+
"compilable": true
|
|
1419
|
+
},
|
|
1420
|
+
"89acd530e5d3ac4d2f2cdc50085c98fc8d6ee5a3f488a16486455a35460bb354": {
|
|
1421
|
+
"title": "Long Text",
|
|
1422
|
+
"code": "<div style={PREVIEW_GRID_STYLE}>\n <TooltipPreviewCard\n label=\"Long body only\"\n body={EXTRA_LONG_TEXT}\n />\n <TooltipPreviewCard\n label=\"Long title + long body\"\n title=\"This is a very long tooltip title that might wrap to multiple lines\"\n body={EXTRA_LONG_TEXT}\n />\n <TooltipPreviewCard\n label=\"Long body with placement right\"\n body={EXTRA_LONG_TEXT}\n placement=\"right\"\n />\n </div>",
|
|
1423
|
+
"source": "stories",
|
|
1424
|
+
"compilable": true
|
|
1425
|
+
},
|
|
1426
|
+
"8a3e06c994d49e66e84658c981c59eb96d6e7a88fc16dbc6a2abf4d76493b94f": {
|
|
1427
|
+
"title": "Import",
|
|
1428
|
+
"code": "import { Carousel } from '@1money/components-ui';\n// or\nimport { Carousel } from '@1money/components-ui/Carousel';",
|
|
1429
|
+
"source": "readme",
|
|
1430
|
+
"compilable": true
|
|
1431
|
+
},
|
|
1432
|
+
"8bbc2c00d6f26600eaf14a2347cb6396fa9aed93dd50bb9b95614282b0c307ea": {
|
|
1433
|
+
"title": "Colors",
|
|
1434
|
+
"code": "<div style={{ display: 'flex', gap: 24, alignItems: 'center' }}>\n {LINK_COLORS.map((color) => (\n <Link {...args} key={color} color={color}>\n {color}\n </Link>\n ))}\n </div>",
|
|
1435
|
+
"source": "stories",
|
|
1436
|
+
"compilable": false
|
|
1437
|
+
},
|
|
1438
|
+
"8d9b4b816f395924fb061a9384e54b2fc8e97a3bfd441367d6c70ff5397f23ec": {
|
|
1439
|
+
"title": "Text With Icon",
|
|
1440
|
+
"code": "<Button {...args} variant={BUTTON_VARIANT.text} iconEnd={<Icons name=\"arrowRight\" />}>\n Learn More\n </Button>",
|
|
1441
|
+
"source": "stories",
|
|
1442
|
+
"compilable": false
|
|
1443
|
+
},
|
|
1444
|
+
"8df6f3452cf569f7cd621f94c1dd995eb5ec459f581e7d193254034e7a6dbbd2": {
|
|
1445
|
+
"title": "Large Dataset",
|
|
1446
|
+
"code": "<div style={containerStyle}>\n <VirtualList\n data={data10000}\n height={400}\n itemHeight={30}\n itemKey=\"id\"\n >\n {(item: Item) => (\n <div style={itemStyle(30)}>\n <span>Item {item.id}</span>\n <span style={{ color: '#999', fontSize: 12 }}>{item.id + 1} / 10000</span>\n </div>\n )}\n </VirtualList>\n </div>",
|
|
1447
|
+
"source": "stories",
|
|
1448
|
+
"compilable": true
|
|
1449
|
+
},
|
|
1450
|
+
"8eb6ee9780aed6e852f19eb5e510f31bf0e507d50da449a6da3f1fb8f76b33bc": {
|
|
1451
|
+
"title": "Canonical usage",
|
|
1452
|
+
"code": "import { Flex } from '@1money/components-ui';\n// or\nimport { Flex } from '@1money/components-ui/Flex';\nimport { FLEX_ALIGN, FLEX_GAP, FLEX_JUSTIFY, FLEX_WRAP } from '@1money/components-ui/Flex';",
|
|
1453
|
+
"source": "canonical",
|
|
1454
|
+
"compilable": true
|
|
1455
|
+
},
|
|
1456
|
+
"8ee4eda344b62edf1015fe21cd52d4f5a5dd71cc3afca58644d9f941978f4f08": {
|
|
1457
|
+
"title": "Canonical usage",
|
|
1458
|
+
"code": "import { Tag } from '@1money/components-ui';\n// or\nimport { Tag } from '@1money/components-ui/Tag';",
|
|
1459
|
+
"source": "canonical",
|
|
1460
|
+
"compilable": true
|
|
1461
|
+
},
|
|
1462
|
+
"8f2d97b44cca3977d39ba134e5981f875d9e8cf9cff20b301aed559b8870665b": {
|
|
1463
|
+
"title": "Vertical",
|
|
1464
|
+
"code": "Text <Divider type=\"vertical\" /> Text",
|
|
1465
|
+
"source": "readme",
|
|
1466
|
+
"compilable": true
|
|
1467
|
+
},
|
|
1468
|
+
"8ffb7323c737a0cc1f4c296336b8763bf0acdafb29eb029b4046496aaa1b4d27": {
|
|
1469
|
+
"title": "Import",
|
|
1470
|
+
"code": "import { Alert } from '@1money/components-ui';\n// or\nimport { Alert } from '@1money/components-ui/Alert';",
|
|
1471
|
+
"source": "readme",
|
|
1472
|
+
"compilable": true
|
|
1473
|
+
},
|
|
1474
|
+
"90952e793cfea81bc8613eaed2e1b60208c06b4e98ce6f0cc5a254619af9e93f": {
|
|
1475
|
+
"title": "Illustrations",
|
|
1476
|
+
"code": "// Old (still works)\nimport { Deprecated } from '@1money/components-ui';\n<Deprecated name=\"old-icon-name\" />\n\n// New (recommended)\nimport { Icons } from '@1money/components-ui';\n<Icons name=\"new-icon-name\" />",
|
|
1477
|
+
"source": "readme",
|
|
1478
|
+
"compilable": true
|
|
1479
|
+
},
|
|
1480
|
+
"90bea0eac958ff92526a0901cd2515a8694e96039b3d056e709ede70bd1b4678": {
|
|
1481
|
+
"title": "Search Only Filtered",
|
|
1482
|
+
"code": "{\n const [value, setValue] = useState<string | number | undefined>(undefined);\n const [searchValue, setSearchValue] = useState('');\n\n const trimmed = searchValue.trim().toLowerCase();\n const filteredOptions = trimmed\n ? ASSET_OPTIONS.filter((option) => {\n const label = String(option.label).toLowerCase();\n const description = String(option.description ?? '').toLowerCase();\n const optionValue = String(option.value).toLowerCase();\n return (\n label.includes(trimmed) ||\n description.includes(trimmed) ||\n optionValue.includes(trimmed)\n );\n })\n : [];\n\n return (\n <div style={storyContainerStyle}>\n <Select\n {...args}\n value={value}\n options={filteredOptions}\n searchValue={searchValue}\n emptyContent={trimmed ? 'No matches' : 'Type to search assets'}\n onSearchChange={(next) => {\n setSearchValue(next);\n args.onSearchChange?.(next);\n }}\n onChange={(nextValue, option) => {\n setValue(nextValue as string | number | undefined);\n args.onChange?.(nextValue, option);\n }}\n />\n </div>\n );\n }",
|
|
1483
|
+
"source": "stories",
|
|
1484
|
+
"compilable": false
|
|
1485
|
+
},
|
|
1486
|
+
"92884b0ad016e0b0699fc547bc92043837674393d2d601ebe0fc0aa31ced6498": {
|
|
1487
|
+
"title": "Canonical usage",
|
|
1488
|
+
"code": "<Tour open steps={[]} onClose={() => {}} />",
|
|
1489
|
+
"source": "canonical",
|
|
1490
|
+
"compilable": true
|
|
1491
|
+
},
|
|
1492
|
+
"92d700fd2da1bf06587fe4c86118bff9b3b4b42eb3ec5a4c9a790f7ac8950ff6": {
|
|
1493
|
+
"title": "Illustrations",
|
|
1494
|
+
"code": "{\n const handleCopy = (el: string) => {\n copy(el);\n };\n\n return <div style={{ display: 'grid', gap: 24, gridTemplateColumns: 'repeat(auto-fill, minmax(200px, 1fr))' }}>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='illusChecked' />\")}>\n <Icons {...args} name='illusChecked' />\n <span>illusChecked</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='illusEmailError' />\")}>\n <Icons {...args} name='illusEmailError' />\n <span>illusEmailError</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='illusLinkExpired' />\")}>\n <Icons {...args} name='illusLinkExpired' />\n <span>illusLinkExpired</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='illus2FA' />\")}>\n <Icons {...args} name='illus2FA' />\n <span>illus2FA</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='illusLocked' />\")}>\n <Icons {...args} name='illusLocked' />\n <span>illusLocked</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='illusError' />\")}>\n <Icons {...args} name='illusError' />\n <span>illusError</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='illusRegionNotSupported' />\")}>\n <Icons {...args} name='illusRegionNotSupported' />\n <span>illusRegionNotSupported</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='illusID' />\")}>\n <Icons {...args} name='illusID' />\n <span>illusID</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='illusVerification' />\")}>\n <Icons {...args} name='illusVerification' />\n <span>illusVerification</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='illusPending' />\")}>\n <Icons {...args} name='illusPending' color='#F4C600' />\n <span>illusPending</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='illusPasskey' />\")}>\n <Icons {...args} name='illusPasskey' />\n <span>illusPasskey</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='illusAddAccount' />\")}>\n <Icons {...args} name='illusAddAccount' />\n <span>illusAddAccount</span>\n </CopyIconBox>\n </div>;\n }",
|
|
1495
|
+
"source": "stories",
|
|
1496
|
+
"compilable": false
|
|
1497
|
+
},
|
|
1498
|
+
"93778978611c05850a486471281bd8bb01ceeac22d3d7708ec1c59aaefb0ae95": {
|
|
1499
|
+
"title": "Canonical usage",
|
|
1500
|
+
"code": "import { Alert } from '@1money/components-ui';\n// or\nimport { Alert } from '@1money/components-ui/Alert';",
|
|
1501
|
+
"source": "canonical",
|
|
1502
|
+
"compilable": true
|
|
1503
|
+
},
|
|
1504
|
+
"93b1291462e3499dc53cfc59ff3a287c0beb68213b4eb563c88cc64ce2158ba8": {
|
|
1505
|
+
"title": "Canonical usage",
|
|
1506
|
+
"code": "import type { ProFormColProps } from '@1money/component-ui';",
|
|
1507
|
+
"source": "canonical",
|
|
1508
|
+
"compilable": true
|
|
1509
|
+
},
|
|
1510
|
+
"93b8b9acce6685bc6f00a21f857fc812e41fb754d3e946d7576e2543f056f1c0": {
|
|
1511
|
+
"title": "Canonical usage",
|
|
1512
|
+
"code": "import { Upload, UploadFileBar } from '@1money/components-ui';\n// or\nimport { Upload, UploadFileBar } from '@1money/components-ui/Upload';",
|
|
1513
|
+
"source": "canonical",
|
|
1514
|
+
"compilable": true
|
|
1515
|
+
},
|
|
1516
|
+
"93d23d9eeea4da875fbe248ae5096c5ebccefaab935749a8067d38b9c0485be9": {
|
|
1517
|
+
"title": "With Description",
|
|
1518
|
+
"code": "<Switch {...args} label=\"Label\" description=\"Description\" />",
|
|
1519
|
+
"source": "stories",
|
|
1520
|
+
"compilable": false
|
|
1521
|
+
},
|
|
1522
|
+
"94f775f92f27f8bd4a4d9326ff913a157404db31807176b4ef09292284c90d8d": {
|
|
1523
|
+
"title": "Basic Usage",
|
|
1524
|
+
"code": "import { Grid } from '@1money/components-ui';\nimport { GRID_ALIGN, GRID_JUSTIFY } from '@1money/components-ui/Grid';\n\nconst GRID_GUTTER: [number, number] = [16, 8];\nconst SPAN_HALF = 6;\n\n<Grid gutter={GRID_GUTTER} justify={GRID_JUSTIFY.spaceBetween} align={GRID_ALIGN.middle}>\n <Grid.Col span={SPAN_HALF}>Left</Grid.Col>\n <Grid.Col span={SPAN_HALF}>Right</Grid.Col>\n</Grid>",
|
|
1525
|
+
"source": "readme",
|
|
1526
|
+
"compilable": true
|
|
1527
|
+
},
|
|
1528
|
+
"9532a16e360ac90c4955a5d2fb7dbfd364a470857fe111e7c0f76c886afe2153": {
|
|
1529
|
+
"title": "Multiple",
|
|
1530
|
+
"code": "{\n const [value, setValue] = useState<Array<string | number>>([\n 'btc',\n 'eth',\n 'usdt',\n 'usdc',\n 'sol',\n 'doge',\n 'ada',\n 'matic',\n ]);\n\n return (\n <Select\n {...args}\n multiple\n value={value}\n onChange={(nextValue, option) => {\n setValue((nextValue as Array<string | number>) ?? []);\n args.onChange?.(nextValue, option);\n }}\n />\n );\n }",
|
|
1531
|
+
"source": "stories",
|
|
1532
|
+
"compilable": false
|
|
1533
|
+
},
|
|
1534
|
+
"957f519084a4f84fd6a79517a4f2c6a85245176f268b9c5f6e090ee983e82fa8": {
|
|
1535
|
+
"title": "Single Content States",
|
|
1536
|
+
"code": "<div style={stackStyle}>\n <Alert\n {...args}\n title={multiLineTitle}\n body={undefined}\n link={undefined}\n closable={false}\n />\n <Alert\n {...args}\n title={undefined}\n body={multiLineBody}\n link={undefined}\n closable={false}\n />\n <Alert\n {...args}\n title={multiLineTitle}\n body={undefined}\n link={{ label: 'Open details', onClick: fn() }}\n closable={false}\n />\n <Alert\n\n title={multiLineTitle}\n body={undefined}\n closable={false}\n action={<Button onClick={(() => {\n console.log('Action button clicked');\n })}>Take action</Button>}\n />\n </div>",
|
|
1537
|
+
"source": "stories",
|
|
1538
|
+
"compilable": false
|
|
1539
|
+
},
|
|
1540
|
+
"95dc922235c54890ef40e287095692b232702132d592073e3c6b66efd6929f50": {
|
|
1541
|
+
"title": "Canonical usage",
|
|
1542
|
+
"code": "import { Copy } from '@1money/components-ui';\n// or\nimport { Copy } from '@1money/components-ui/Copy';",
|
|
1543
|
+
"source": "canonical",
|
|
1544
|
+
"compilable": true
|
|
1545
|
+
},
|
|
1546
|
+
"96811d7b0b7448138a55d8b001aae58595a2e5201ba8bc5ef5ca1cf1a79a8524": {
|
|
1547
|
+
"title": "Canonical usage",
|
|
1548
|
+
"code": "import { Segment } from '@1money/components-ui';\n// or\nimport { Segment } from '@1money/components-ui/Segment';",
|
|
1549
|
+
"source": "canonical",
|
|
1550
|
+
"compilable": true
|
|
1551
|
+
},
|
|
1552
|
+
"96e3c221e0a0bb936b1030912f88f56c0139a1804d4797492df913b9ec7b3766": {
|
|
1553
|
+
"title": "Nested",
|
|
1554
|
+
"code": "<Dropdown\n {...args}\n content={\n <div style={panelContentStyle}>\n <button type=\"button\" className=\"om-dropdown-item\">\n Profile\n </button>\n <Dropdown\n placement=\"right-start\"\n content={\n <div style={panelContentStyle}>\n <button type=\"button\" className=\"om-dropdown-item\">\n English\n </button>\n <button type=\"button\" className=\"om-dropdown-item\">\n 中文\n </button>\n <button type=\"button\" className=\"om-dropdown-item\">\n 日本語\n </button>\n </div>\n }\n >\n <button type=\"button\" className=\"om-dropdown-item\" style={{ justifyContent: 'space-between' }}>\n Language\n <Icons name=\"chevronRight\" size={14} color=\"#9fa3a3\" />\n </button>\n </Dropdown>\n <button type=\"button\" className=\"om-dropdown-item\">\n Settings\n </button>\n <button type=\"button\" className=\"om-dropdown-item\" style={{ color: '#e53935' }}>\n Sign out\n </button>\n </div>\n }\n >\n <Button>Menu</Button>\n </Dropdown>",
|
|
1555
|
+
"source": "stories",
|
|
1556
|
+
"compilable": false
|
|
1557
|
+
},
|
|
1558
|
+
"96f9cfe7a3579cf1c7ff57afe66be83040e23794844ce4d35758cae32e1c7cdb": {
|
|
1559
|
+
"title": "Usage",
|
|
1560
|
+
"code": "<Navigation\n items={[\n { key: 'home', label: 'Home', icon: 'home', active: true },\n { key: 'portfolio', label: 'Portfolio', icon: 'portfolio' },\n { key: 'transactions', label: 'Transactions', icon: 'transactions', children: [\n { key: 'deposits', label: 'Deposits' },\n { key: 'withdrawals', label: 'Withdrawals' },\n ]},\n ]}\n collapsible\n onCollapse={(collapsed) => console.log(collapsed)}\n/>",
|
|
1561
|
+
"source": "readme",
|
|
1562
|
+
"compilable": true
|
|
1563
|
+
},
|
|
1564
|
+
"97683a3f5c99b99a2b9a054edbee9d66d751fcb9ce9361898434af338708d3c9": {
|
|
1565
|
+
"title": "Canonical usage",
|
|
1566
|
+
"code": "<Step items={[]} />",
|
|
1567
|
+
"source": "canonical",
|
|
1568
|
+
"compilable": true
|
|
1569
|
+
},
|
|
1570
|
+
"97c44f1fee50bdc6a2d6a8cb4b7c56c51a2997d2ea78b3647cce7b0c249f6f8c": {
|
|
1571
|
+
"title": "Import",
|
|
1572
|
+
"code": "import { Tooltip } from '@1money/components-ui';\n// or\nimport { Tooltip } from '@1money/components-ui/Tooltip';",
|
|
1573
|
+
"source": "readme",
|
|
1574
|
+
"compilable": true
|
|
1575
|
+
},
|
|
1576
|
+
"97d3304eb6ad0bcd991e2dcc8d7d92caa6f844fd15f4fe6aa0b33d374d922ecd": {
|
|
1577
|
+
"title": "Basic Usage",
|
|
1578
|
+
"code": "<Radio\n label=\"Accept terms\"\n checked={isChecked}\n onChange={(event) => setIsChecked(event.target.checked)}\n/>",
|
|
1579
|
+
"source": "readme",
|
|
1580
|
+
"compilable": true
|
|
1581
|
+
},
|
|
1582
|
+
"9856c3fcdf26046e1e631b2aeb36d7da1f1f316ddb5a33f17c71a0434111aea0": {
|
|
1583
|
+
"title": "Default",
|
|
1584
|
+
"code": "{\n const [open, setOpen] = useState(false);\n const uploadRef = useRef<HTMLButtonElement>(null);\n const saveRef = useRef<HTMLButtonElement>(null);\n const moreRef = useRef<HTMLButtonElement>(null);\n\n return (\n <div>\n <Button color=\"primary\" onClick={() => setOpen(true)}>\n Begin Tour\n </Button>\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: 48, marginTop: 40, width: 500 }}>\n <div style={{ alignSelf: 'flex-start' }}>\n <Button ref={uploadRef} variant=\"text\">Upload</Button>\n </div>\n <div style={{ alignSelf: 'center' }}>\n <Button ref={saveRef} color=\"primary\">Save</Button>\n </div>\n <div style={{ alignSelf: 'flex-end' }}>\n <Button ref={moreRef} variant=\"text\">···</Button>\n </div>\n </div>\n\n <Tour\n open={open}\n onClose={() => setOpen(false)}\n steps={[\n {\n target: uploadRef,\n placement: 'bottom',\n heading: 'Upload File',\n body: 'Click to upload your files.',\n },\n {\n target: saveRef,\n placement: 'bottom',\n heading: 'Save',\n body: 'Save your changes.',\n },\n {\n target: moreRef,\n placement: 'bottom',\n heading: 'More',\n body: 'Click for more options.',\n },\n ]}\n />\n </div>\n );\n }",
|
|
1585
|
+
"source": "stories",
|
|
1586
|
+
"compilable": true
|
|
1587
|
+
},
|
|
1588
|
+
"991d316ea63cfd7ffbebf14b3b1e27e44442737febab245a5576b67e01d3af2a": {
|
|
1589
|
+
"title": "All Variants",
|
|
1590
|
+
"code": "<div style={{ display: 'flex', gap: 48 }}>\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', gap: 16 }}>\n <h3>Rectangle</h3>\n <Skeleton />\n <Skeleton width=\"10rem\" />\n <Skeleton width=\"5rem\" />\n <Skeleton height=\"2rem\" />\n <Skeleton width=\"10rem\" height=\"4rem\" />\n\n <h3 style={{ marginTop: 8 }}>Rounded</h3>\n <Skeleton borderRadius=\"16px\" />\n <Skeleton width=\"10rem\" borderRadius=\"16px\" />\n <Skeleton width=\"5rem\" borderRadius=\"16px\" />\n <Skeleton height=\"2rem\" borderRadius=\"16px\" />\n <Skeleton width=\"10rem\" height=\"4rem\" borderRadius=\"16px\" />\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <h3>Square</h3>\n <div style={{ display: 'flex', gap: 8 }}>\n <Skeleton size=\"2rem\" />\n <Skeleton size=\"3rem\" />\n <Skeleton size=\"4rem\" />\n <Skeleton size=\"5rem\" />\n </div>\n\n <h3 style={{ marginTop: 8 }}>Circle</h3>\n <div style={{ display: 'flex', gap: 8 }}>\n <Skeleton shape=\"circle\" size=\"2rem\" />\n <Skeleton shape=\"circle\" size=\"3rem\" />\n <Skeleton shape=\"circle\" size=\"4rem\" />\n <Skeleton shape=\"circle\" size=\"5rem\" />\n </div>\n </div>\n </div>",
|
|
1591
|
+
"source": "stories",
|
|
1592
|
+
"compilable": true
|
|
1593
|
+
},
|
|
1594
|
+
"99531c5452d90fd65cb2b8267d93bd81cafb03cf282005f5232b325f159fa2f7": {
|
|
1595
|
+
"title": "Responsive",
|
|
1596
|
+
"code": "<Row gutter={GRID_GUTTER}>\n <Col span={SPAN_BASE} sm={SPAN_SM} md={SPAN_MD} lg={SPAN_LG}><div style={DEMO_BOX_STYLE}>A</div></Col>\n <Col span={SPAN_BASE} sm={SPAN_SM} md={SPAN_MD} lg={SPAN_LG}><div style={DEMO_BOX_STYLE}>B</div></Col>\n <Col span={SPAN_BASE} sm={SPAN_SM} md={SPAN_MD} lg={SPAN_LG}><div style={DEMO_BOX_STYLE}>C</div></Col>\n </Row>",
|
|
1597
|
+
"source": "stories",
|
|
1598
|
+
"compilable": true
|
|
1599
|
+
},
|
|
1600
|
+
"995eb8461d39460977e9818109030cdeb75f213495063aab77b583441e8d6a76": {
|
|
1601
|
+
"title": "Basic Usage",
|
|
1602
|
+
"code": "import { Flex } from '@1money/components-ui';\nimport { FLEX_ALIGN, FLEX_GAP, FLEX_JUSTIFY } from '@1money/components-ui/Flex';\n\n<Flex gap={FLEX_GAP.middle} align={FLEX_ALIGN.center} justify={FLEX_JUSTIFY.spaceBetween}>\n <div>Left</div>\n <div>Right</div>\n</Flex>",
|
|
1603
|
+
"source": "readme",
|
|
1604
|
+
"compilable": true
|
|
1605
|
+
},
|
|
1606
|
+
"9a5aa0a4875e686c1a64a1085ed22b25ebf5849ebf8bf0cd0fb6376c887729ab": {
|
|
1607
|
+
"title": "Canonical usage",
|
|
1608
|
+
"code": "<DrawerForm />",
|
|
1609
|
+
"source": "canonical",
|
|
1610
|
+
"compilable": true
|
|
1611
|
+
},
|
|
1612
|
+
"9a6b2f4b0ce1fdea4c73f1f9ea0d1471dc97d3dd7783c798b6b99ddc7f3bf15c": {
|
|
1613
|
+
"title": "Import",
|
|
1614
|
+
"code": "import { Skeleton } from '@1money/components-ui';\n// or\nimport { Skeleton } from '@1money/components-ui/Skeleton';",
|
|
1615
|
+
"source": "readme",
|
|
1616
|
+
"compilable": true
|
|
1617
|
+
},
|
|
1618
|
+
"9af2306c1aff18816073dccbcebb287dda5cedc961f04ea7a2ad419875c3055b": {
|
|
1619
|
+
"title": "States",
|
|
1620
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <Radio label=\"Unchecked\" />\n <Radio label=\"Checked\" checked />\n <Radio label=\"Disabled unchecked\" disabled />\n <Radio label=\"Disabled checked\" checked disabled />\n </div>",
|
|
1621
|
+
"source": "stories",
|
|
1622
|
+
"compilable": true
|
|
1623
|
+
},
|
|
1624
|
+
"9b24b5a45401922ce5317e6b1dcdc28a9caba33fd0c952afb36b62e7cea62ea9": {
|
|
1625
|
+
"title": "Canonical usage",
|
|
1626
|
+
"code": "<ProFormSelect />",
|
|
1627
|
+
"source": "canonical",
|
|
1628
|
+
"compilable": true
|
|
1629
|
+
},
|
|
1630
|
+
"9c4b5f475fd76261b4364f04f169997152a1ceea87575298d7a413fd0a551085": {
|
|
1631
|
+
"title": "Canonical usage",
|
|
1632
|
+
"code": "import type { FormCoreInstance } from '@1money/component-ui';",
|
|
1633
|
+
"source": "canonical",
|
|
1634
|
+
"compilable": true
|
|
1635
|
+
},
|
|
1636
|
+
"9d095c31abb7ac97c40b817bfca40bcb706f8b8572f9a6af7218643f08b7464b": {
|
|
1637
|
+
"title": "Import",
|
|
1638
|
+
"code": "import { Flex } from '@1money/components-ui';\n// or\nimport { Flex } from '@1money/components-ui/Flex';\nimport { FLEX_ALIGN, FLEX_GAP, FLEX_JUSTIFY, FLEX_WRAP } from '@1money/components-ui/Flex';",
|
|
1639
|
+
"source": "readme",
|
|
1640
|
+
"compilable": true
|
|
1641
|
+
},
|
|
1642
|
+
"9eae41b47da6d3b07d6bfdb98fe407b6be85aa68db3fe695699cf9588b65eda8": {
|
|
1643
|
+
"title": "Placements",
|
|
1644
|
+
"code": "{\n const placements: Placement[] = [\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n ];\n\n return (\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: 12,\n padding: 120,\n justifyContent: 'center',\n }}\n >\n {placements.map((placement) => (\n <Dropdown\n {...args}\n key={placement}\n placement={placement}\n content={\n <div style={{ padding: 8, fontSize: 13, whiteSpace: 'nowrap' }}>\n {placement}\n </div>\n }\n >\n <Button size=\"small\">{placement}</Button>\n </Dropdown>\n ))}\n </div>\n );\n }",
|
|
1645
|
+
"source": "stories",
|
|
1646
|
+
"compilable": false
|
|
1647
|
+
},
|
|
1648
|
+
"9f45424f9178a891c69cb91fbb3cdf939868a5fd8c6570516eff0fb74a449cc9": {
|
|
1649
|
+
"title": "Vertical",
|
|
1650
|
+
"code": "<div>\n Text\n <Divider type=\"vertical\" />\n <a href=\"#\">Link</a>\n <Divider type=\"vertical\" />\n <a href=\"#\">Link</a>\n </div>",
|
|
1651
|
+
"source": "stories",
|
|
1652
|
+
"compilable": true
|
|
1653
|
+
},
|
|
1654
|
+
"a0079a48172d1c0f7be06f282a42c0f276ba3128f87074785f69d97884b29375": {
|
|
1655
|
+
"title": "Group Label Placement Right",
|
|
1656
|
+
"code": "{\n const [value, setValue] = React.useState<string | number>('a');\n const handleChange = (event: RadioChangeEvent) => {\n if (event.target.value !== undefined) {\n setValue(event.target.value);\n }\n };\n\n return (\n <RadioGroup value={value} onChange={handleChange} labelPlacement=\"right\">\n <Radio value=\"a\" label=\"Option A\" description=\"Description A\" />\n <Radio value=\"b\" label=\"Option B\" description=\"Description B\" />\n </RadioGroup>\n );\n }",
|
|
1657
|
+
"source": "stories",
|
|
1658
|
+
"compilable": true
|
|
1659
|
+
},
|
|
1660
|
+
"a0db5e8a8634435b7717e8162c8d43cd1a6918c73fb73a44d76d56fa6d532de2": {
|
|
1661
|
+
"title": "Canonical usage",
|
|
1662
|
+
"code": "import type { ProgressState } from '@1money/component-ui';",
|
|
1663
|
+
"source": "canonical",
|
|
1664
|
+
"compilable": true
|
|
1665
|
+
},
|
|
1666
|
+
"a0eaa77614f8bc2563173aa4c68d578c2a7d2957ec1696516c9656d43737f7e2": {
|
|
1667
|
+
"title": "Import",
|
|
1668
|
+
"code": "import { Segment } from '@1money/components-ui';\n// or\nimport { Segment } from '@1money/components-ui/Segment';",
|
|
1669
|
+
"source": "readme",
|
|
1670
|
+
"compilable": true
|
|
1671
|
+
},
|
|
1672
|
+
"a148c8eb1938e582f665219c3d3266bc21931e8547a0e516ec73f3a420387ec3": {
|
|
1673
|
+
"title": "Usage",
|
|
1674
|
+
"code": "<Link disabled>Read more</Link>",
|
|
1675
|
+
"source": "readme",
|
|
1676
|
+
"compilable": true
|
|
1677
|
+
},
|
|
1678
|
+
"a304a3d6b1220502a36e9ed2e198e53f9ce51219f0ff9f64776058c9f3798045": {
|
|
1679
|
+
"title": "Copyable Text",
|
|
1680
|
+
"code": "<div style={STORY_LAYOUT_STYLE}>\n <Typography.Body size=\"md\" copyable>\n Plain text with copy action\n </Typography.Body>\n <Typography.Body size=\"md\" copyable={{ text: 'custom-override-value' }}>\n Copy uses a different value\n </Typography.Body>\n </div>",
|
|
1681
|
+
"source": "stories",
|
|
1682
|
+
"compilable": true
|
|
1683
|
+
},
|
|
1684
|
+
"a384708daf54145061d22ec7ae65bd975180650d5364956566a5ba2641f012c5": {
|
|
1685
|
+
"title": "Label Placement and Direction",
|
|
1686
|
+
"code": "{/* Default variant uses labelPlacement */}\n<Radio label=\"Dot on left, label on right\" labelPlacement=\"left\" />\n<Radio label=\"Dot on right, label on left\" labelPlacement=\"right\" />\n\n{/* Cell variant uses alignment */}\n<Radio variant=\"cell\" alignment=\"left\" icon=\"swift\" label=\"Horizontal\" />\n<Radio variant=\"cell\" alignment=\"center\" icon=\"swift\" label=\"Vertical\" />\n\n<RadioGroup direction=\"horizontal\" value={selected} onChange={handleChange}>\n <Radio value=\"sm\" label=\"Small\" />\n <Radio value=\"md\" label=\"Medium\" />\n <Radio value=\"lg\" label=\"Large\" />\n</RadioGroup>",
|
|
1687
|
+
"source": "readme",
|
|
1688
|
+
"compilable": true
|
|
1689
|
+
},
|
|
1690
|
+
"a441ef91fd2695501c12b9a749acb9e33886f02b78b6e77d818f5c11c7a23fe7": {
|
|
1691
|
+
"title": "Group With Options",
|
|
1692
|
+
"code": "{\n const [value, setValue] = React.useState<string | number>('email');\n const handleChange = (event: RadioChangeEvent) => {\n if (event.target.value !== undefined) {\n setValue(event.target.value);\n }\n };\n\n return (\n <RadioGroup\n value={value}\n onChange={handleChange}\n options={[\n { value: 'email', label: 'Email', description: 'Receive via email' },\n { value: 'sms', label: 'SMS', description: 'Receive via text message' },\n { value: 'push', label: 'Push notification', description: 'Receive on your device' },\n ]}\n />\n );\n }",
|
|
1693
|
+
"source": "stories",
|
|
1694
|
+
"compilable": true
|
|
1695
|
+
},
|
|
1696
|
+
"a56b698411c5aa0624871fc60a5699dc1b9226f3ce9553b8fc9f1bbe7a3e4be7": {
|
|
1697
|
+
"title": "Logo",
|
|
1698
|
+
"code": "{\n const handleCopy = (el: string) => {\n copy(el);\n };\n\n return <div style={{\n display: 'grid', flexDirection: 'row', gap: 24, flexWrap: 'wrap', gridTemplateColumns: 'repeat(auto-fill, minmax(222px, 1fr))'\n }}>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='logo' />\")}>\n <Icons {...args} name='logo' />\n <span>logo</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='logoWord' />\")}>\n <Icons {...args} name='logoWord' width={150} height={30} />\n <span>logoWord</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='logoNetwork' />\")}>\n <Icons {...args} name='logoNetwork' width={150} height={30} />\n <span>logoNetwork</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='logoWithWords' />\")}>\n <Icons {...args} name='logoWithWords' width={180} height={36} />\n <span>logoWithWords</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='logoWithWords' networkLogo />\")}>\n <Icons {...args} name='logoWithWords' width={320} height={30} networkLogo />\n <span>logoWithWordsAndNetwork</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='logoBg' />\")}>\n <Icons {...args} name='logoBg' width={56} height={57} />\n <span>logoBg</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='logoBeta' />\")}>\n <Icons {...args} name='logoBeta' width={30} height={9} />\n <span>logoBeta</span>\n </CopyIconBox>\n <CopyIconBox onClick={() => handleCopy(\"<Icons name='logoWithBeta' />\")}>\n <Icons {...args} name='logoWithBeta' width={152} height={22} />\n <span>logoWithBeta</span>\n </CopyIconBox>\n </div>;\n }",
|
|
1699
|
+
"source": "stories",
|
|
1700
|
+
"compilable": false
|
|
1701
|
+
},
|
|
1702
|
+
"a5a04f0b0f7ad14c2ae616df4f7820ea44171f7317f4ba0ab23f15985159dc24": {
|
|
1703
|
+
"title": "Group Directions",
|
|
1704
|
+
"code": "{\n const [verticalValue, setVerticalValue] = React.useState<string | number>('a');\n const [horizontalValue, setHorizontalValue] = React.useState<string | number>('a');\n\n const handleVerticalChange = (event: RadioChangeEvent) => {\n if (event.target.value !== undefined) {\n setVerticalValue(event.target.value);\n }\n };\n\n const handleHorizontalChange = (event: RadioChangeEvent) => {\n if (event.target.value !== undefined) {\n setHorizontalValue(event.target.value);\n }\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>\n <div>\n <h3 style={{ marginBottom: 12 }}>Direction Vertical</h3>\n <RadioGroup value={verticalValue} onChange={handleVerticalChange} direction=\"vertical\">\n <Radio value=\"a\" label=\"Option A\" />\n <Radio value=\"b\" label=\"Option B\" />\n <Radio value=\"c\" label=\"Option C\" />\n </RadioGroup>\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>Direction Horizontal</h3>\n <RadioGroup value={horizontalValue} onChange={handleHorizontalChange} direction=\"horizontal\">\n <Radio value=\"a\" label=\"Option A\" />\n <Radio value=\"b\" label=\"Option B\" />\n <Radio value=\"c\" label=\"Option C\" />\n </RadioGroup>\n </div>\n </div>\n );\n }",
|
|
1705
|
+
"source": "stories",
|
|
1706
|
+
"compilable": true
|
|
1707
|
+
},
|
|
1708
|
+
"a5ae14150d1724de4984c10921713734e86d15771efe397f3015a01c77d13676": {
|
|
1709
|
+
"title": "Canonical usage",
|
|
1710
|
+
"code": "import { Cell } from '@1money/component-ui';\n// or\nimport { Cell } from '@1money/component-ui/Cell';",
|
|
1711
|
+
"source": "canonical",
|
|
1712
|
+
"compilable": true
|
|
1713
|
+
},
|
|
1714
|
+
"a823300963fcf8c4ccf8e531c42aa78d7ab59841b405c471d5c0c0d6ac0b9b22": {
|
|
1715
|
+
"title": "Text Area",
|
|
1716
|
+
"code": "{\n const states = ['default', 'error'] as const;\n const valueTypes = ['Placeholder', 'Filled'] as const;\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 40 }}>\n {/* ── Large ── */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>Large</h3>\n <div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n {states.map((status) =>\n valueTypes.map((vt) => (\n <div key={`${status}-${vt}`} style={{ width: 400 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>\n {status} / {vt}\n </p>\n <Input.TextArea\n label=\"Label\"\n feedback=\"Feedback\"\n feedbackIcon={status === 'error' ? <Icons name=\"error\" size={16} /> : <Icons name=\"info\" size={16} />}\n status={status}\n placeholder=\"Value\"\n defaultValue={vt === 'Filled' ? 'Longer memo value that spans multiple lines to demonstrate the filled state of the textarea component' : undefined}\n rows={4}\n showCount\n maxLength={250}\n />\n </div>\n )),\n )}\n {/* Disabled */}\n {valueTypes.map((vt) => (\n <div key={`disabled-${vt}`} style={{ width: 400 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>\n disabled / {vt}\n </p>\n <Input.TextArea\n label=\"Label\"\n feedback=\"Feedback\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n disabled\n placeholder=\"Value\"\n defaultValue={vt === 'Filled' ? 'Disabled filled value' : undefined}\n rows={4}\n showCount\n maxLength={250}\n />\n </div>\n ))}\n </div>\n </div>\n\n {/* ── Small ── */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>Small</h3>\n <div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n <div style={{ width: 400 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>default / Placeholder</p>\n <Input.TextArea\n size=\"small\"\n label=\"Label\"\n feedback=\"Feedback\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n placeholder=\"Value\"\n rows={3}\n showCount\n maxLength={250}\n />\n </div>\n <div style={{ width: 400 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>default / Filled</p>\n <Input.TextArea\n size=\"small\"\n label=\"Label\"\n feedback=\"Feedback\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n placeholder=\"Value\"\n defaultValue=\"Small filled value\"\n rows={3}\n showCount\n maxLength={250}\n />\n </div>\n </div>\n </div>\n </div>\n );\n }",
|
|
1717
|
+
"source": "stories",
|
|
1718
|
+
"compilable": true
|
|
1719
|
+
},
|
|
1720
|
+
"a95b0ad034e07b035fd0d4b861b4bb29fe68e7e04c8f0d3541178f4e15b7b0d1": {
|
|
1721
|
+
"title": "Canonical usage",
|
|
1722
|
+
"code": "import type { CreateProFormFieldConfig } from '@1money/component-ui';",
|
|
1723
|
+
"source": "canonical",
|
|
1724
|
+
"compilable": true
|
|
1725
|
+
},
|
|
1726
|
+
"aa0e9842f54e521f7ff371e51003e26ed69263bef1d5d37baaa5fd6fa189e32c": {
|
|
1727
|
+
"title": "Split Example",
|
|
1728
|
+
"code": "<Space split={<span>|</span>} size={SPACE_SIZE.small}>\n <span>Alpha</span>\n <span>Beta</span>\n <span>Gamma</span>\n</Space>",
|
|
1729
|
+
"source": "readme",
|
|
1730
|
+
"compilable": true
|
|
1731
|
+
},
|
|
1732
|
+
"aa54a561acdb2781536fc6d5bf4b05fc2a4ec7cc3a1952f3d8aa3086f866754a": {
|
|
1733
|
+
"title": "Canonical usage",
|
|
1734
|
+
"code": "import type { StepItem } from '@1money/component-ui';",
|
|
1735
|
+
"source": "canonical",
|
|
1736
|
+
"compilable": true
|
|
1737
|
+
},
|
|
1738
|
+
"ab9c2b8dec3865ef9826586aa69c01790a48073272eb97a2006323577fbf2550": {
|
|
1739
|
+
"title": "Dashboard Header Layout",
|
|
1740
|
+
"code": "<div style={DEMO_PAGE_STYLE}>\n <Flex\n gap={GAP_MIDDLE}\n align={FLEX_ALIGN.center}\n justify={FLEX_JUSTIFY.spaceBetween}\n wrap={WRAP_DISABLED}\n prefixCls={FLEX_PREFIX}\n >\n <div style={DEMO_BAR_STYLE}>Brand / Logo</div>\n <Flex gap={GAP_SMALL} align={FLEX_ALIGN.center}>\n <div style={DEMO_ITEM_STYLE}>Overview</div>\n <div style={DEMO_ITEM_STYLE}>Accounts</div>\n <div style={DEMO_ITEM_STYLE}>Transactions</div>\n </Flex>\n <Flex gap={GAP_SMALL} align={FLEX_ALIGN.center}>\n <div style={DEMO_ITEM_STYLE}>Search</div>\n <div style={DEMO_ITEM_STYLE}>Notification</div>\n <div style={DEMO_ITEM_STYLE}>Profile</div>\n </Flex>\n </Flex>\n </div>",
|
|
1741
|
+
"source": "stories",
|
|
1742
|
+
"compilable": true
|
|
1743
|
+
},
|
|
1744
|
+
"acab0e7cc530a58ffcca4edc686eb0a0b922021deac39c66bbd80ffd9d82ab5f": {
|
|
1745
|
+
"title": "Variable Height",
|
|
1746
|
+
"code": "<div style={containerStyle}>\n <VirtualList\n data={data1000}\n height={300}\n itemHeight={30}\n itemKey=\"id\"\n >\n {(item: Item) => (\n <div style={itemStyle(item.height)}>\n <span>Item {item.id}</span>\n <span style={{ color: '#999', fontSize: 12 }}>height: {item.height}px</span>\n </div>\n )}\n </VirtualList>\n </div>",
|
|
1747
|
+
"source": "stories",
|
|
1748
|
+
"compilable": true
|
|
1749
|
+
},
|
|
1750
|
+
"acd535782a8b3c08a8b1bb58612e250607a8c0fae373a31b2d8e0fc704d4721e": {
|
|
1751
|
+
"title": "Usage",
|
|
1752
|
+
"code": "const items = [\n { key: '1', title: 'Section Title', children: 'Content here...' },\n { key: '2', title: 'Another Section', children: 'More content...' },\n];\n\n<Accordion items={items} />\n<Accordion items={items} variant=\"stroke\" size=\"small\" />\n<Accordion items={items} multiple defaultActiveKeys={['1', '2']} />",
|
|
1753
|
+
"source": "readme",
|
|
1754
|
+
"compilable": true
|
|
1755
|
+
},
|
|
1756
|
+
"ae23f0d9349157c952b7752e33ea302d85c3d3f09654ece8ddf9107f7b194b68": {
|
|
1757
|
+
"title": "Usage",
|
|
1758
|
+
"code": "{/* Hover trigger (default) */}\n<button id=\"my-trigger\">Hover me</button>\n<Tooltip anchorSelect=\"#my-trigger\" body=\"Simple tooltip\" />\n\n{/* With title */}\n<button id=\"info-trigger\">Info</button>\n<Tooltip anchorSelect=\"#info-trigger\" title=\"Heading\" body=\"Detailed text\" placement=\"bottom\" />\n\n{/* Controlled */}\n<button id=\"ctrl-trigger\">Controlled</button>\n<Tooltip anchorSelect=\"#ctrl-trigger\" body=\"Controlled tooltip\" open={isOpen} onOpenChange={setIsOpen} />\n\n{/* Click trigger */}\n<button id=\"click-trigger\">Click me</button>\n<Tooltip\n anchorSelect=\"#click-trigger\"\n body=\"Click tooltip\"\n openEvents={{ click: true, mouseover: false, mouseenter: false, focus: false }}\n closeEvents={{ click: true, mouseleave: false, mouseout: false, blur: false }}\n/>",
|
|
1759
|
+
"source": "readme",
|
|
1760
|
+
"compilable": true
|
|
1761
|
+
},
|
|
1762
|
+
"aeb5b3145a02eaf5de7b756aa71f963aac5ab51ac00f7f76dbc2599ab7634b3a": {
|
|
1763
|
+
"title": "Canonical usage",
|
|
1764
|
+
"code": "import type { VirtualListProps } from '@1money/component-ui';",
|
|
1765
|
+
"source": "canonical",
|
|
1766
|
+
"compilable": true
|
|
1767
|
+
},
|
|
1768
|
+
"af6172fd099200e93181aeb231c5d69c5b4b4d057a1f32935aa2f35ed86ffebe": {
|
|
1769
|
+
"title": "Search",
|
|
1770
|
+
"code": "{\n const onSearch = fn();\n const sizes = ['large', 'small'] as const;\n const columns = [\n { label: 'Default', props: {} },\n { label: 'Disabled', props: { disabled: true } },\n ];\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 40 }}>\n {sizes.map((size) => (\n <div key={size}>\n <h3 style={{ margin: '0 0 16px', textTransform: 'capitalize' }}>{size}</h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>\n {/* Placeholder row */}\n <div>\n <p style={{ margin: '0 0 8px', color: '#666', fontSize: 13 }}>Placeholder</p>\n <div style={{ display: 'flex', gap: 16, flexWrap: 'wrap' }}>\n {columns.map((col) => (\n <div key={col.label} style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>{col.label}</p>\n <Input.Search\n size={size}\n placeholder=\"Search\"\n onSearch={onSearch}\n {...col.props}\n />\n </div>\n ))}\n </div>\n </div>\n {/* Filled row */}\n <div>\n <p style={{ margin: '0 0 8px', color: '#666', fontSize: 13 }}>Filled</p>\n <div style={{ display: 'flex', gap: 16, flexWrap: 'wrap' }}>\n {columns.map((col) => (\n <div key={col.label} style={{ width: 310 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>{col.label}</p>\n <Input.Search\n size={size}\n placeholder=\"Search\"\n defaultValue=\"Search\"\n allowClear\n onSearch={onSearch}\n {...col.props}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n ))}\n {/* Loading */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>Loading</h3>\n <div style={{ display: 'flex', gap: 16 }}>\n <div style={{ width: 310 }}>\n <Input.Search\n placeholder=\"Search\"\n defaultValue=\"Search\"\n loading\n onSearch={onSearch}\n />\n </div>\n </div>\n </div>\n </div>\n );\n }",
|
|
1771
|
+
"source": "stories",
|
|
1772
|
+
"compilable": false
|
|
1773
|
+
},
|
|
1774
|
+
"af895efcacf8986532f0595254021a9fc61222edede0123afbd36e0ca9de61bc": {
|
|
1775
|
+
"title": "Canonical usage",
|
|
1776
|
+
"code": "<ProFormCheckbox />",
|
|
1777
|
+
"source": "canonical",
|
|
1778
|
+
"compilable": true
|
|
1779
|
+
},
|
|
1780
|
+
"b01e2ee6d41091e4a6c12c9a96eb56c7c35c717754ac47bc643756c276654869": {
|
|
1781
|
+
"title": "With Both Icons",
|
|
1782
|
+
"code": "<Button {...args} iconStart={<Icons name=\"add\" />} iconEnd={<Icons name=\"arrowRight\" />}>\n Both Icons\n </Button>",
|
|
1783
|
+
"source": "stories",
|
|
1784
|
+
"compilable": false
|
|
1785
|
+
},
|
|
1786
|
+
"b040eead4ef6d0382049572436b1eb5a21c9357a41e519f5204a58fc04e0c1ab": {
|
|
1787
|
+
"title": "Usage",
|
|
1788
|
+
"code": "<Copy\n value=\"Text to copy\"\n onSuccess={(val) => console.log('Copied:', val)}\n onError={(val) => console.log('Failed:', val)}\n/>",
|
|
1789
|
+
"source": "readme",
|
|
1790
|
+
"compilable": true
|
|
1791
|
+
},
|
|
1792
|
+
"b0c2a7a4682cc6d39e1a0404cc97bb0a8e70753ca73f95e40a82e692077ed4d4": {
|
|
1793
|
+
"title": "With Description",
|
|
1794
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <Radio label=\"Option 1\" description=\"Description for option 1\" />\n <Radio\n label=\"Option 2\"\n description=\"Description for option 2\"\n checked\n />\n </div>",
|
|
1795
|
+
"source": "stories",
|
|
1796
|
+
"compilable": true
|
|
1797
|
+
},
|
|
1798
|
+
"b10ee9c589c50c54ef2d4a90431dccecd7acbe7e6c56c234cf8b3d476fcd9e00": {
|
|
1799
|
+
"title": "Scroll To",
|
|
1800
|
+
"code": "{\n const listRef = useRef<ListRef>(null);\n\n return (\n <div>\n <div style={{ marginBottom: 12, flexWrap: 'wrap', display: 'flex' }}>\n <button style={btnStyle} onClick={() => listRef.current?.scrollTo(0)}>\n Scroll to top\n </button>\n <button\n style={btnStyle}\n onClick={() => listRef.current?.scrollTo({ index: 50, align: 'top' })}\n >\n Index 50 (top)\n </button>\n <button\n style={btnStyle}\n onClick={() => listRef.current?.scrollTo({ index: 50, align: 'bottom' })}\n >\n Index 50 (bottom)\n </button>\n <button\n style={btnStyle}\n onClick={() => listRef.current?.scrollTo({ index: 50, align: 'auto' })}\n >\n Index 50 (auto)\n </button>\n <button\n style={btnStyle}\n onClick={() => listRef.current?.scrollTo({ index: 999, align: 'bottom' })}\n >\n Scroll to last\n </button>\n <button\n style={btnStyle}\n onClick={() =>\n listRef.current?.scrollTo({ index: 100, align: 'top', offset: 20 })\n }\n >\n Index 100 + 20px offset\n </button>\n <button\n style={btnStyle}\n onClick={() => listRef.current?.scrollTo({ key: 200, align: 'top' })}\n >\n Key 200 (top)\n </button>\n </div>\n <div style={containerStyle}>\n <VirtualList\n ref={listRef}\n data={data1000}\n height={300}\n itemHeight={30}\n itemKey=\"id\"\n >\n {(item: Item) => (\n <div style={itemStyle(item.height)}>\n <span>Item {item.id}</span>\n </div>\n )}\n </VirtualList>\n </div>\n </div>\n );\n }",
|
|
1801
|
+
"source": "stories",
|
|
1802
|
+
"compilable": true
|
|
1803
|
+
},
|
|
1804
|
+
"b1c6f9400c9b8e40e5ce950447b02ac670b68a1e55242b16a8dc86249f792a7f": {
|
|
1805
|
+
"title": "Canonical usage",
|
|
1806
|
+
"code": "<p>Above</p>\n<Divider />\n<p>Below</p>",
|
|
1807
|
+
"source": "canonical",
|
|
1808
|
+
"compilable": true
|
|
1809
|
+
},
|
|
1810
|
+
"b401bcf29ce360237f303ffbc81511ca04225c2399c82206a9313ca93d71ee07": {
|
|
1811
|
+
"title": "Full Featured",
|
|
1812
|
+
"code": "{\n const [query, setQuery] = useState('');\n const [selected, setSelected] = useState<string[]>(['USD', 'USDT', 'SOL']);\n\n const toggle = (code: string) => {\n setSelected((prev) =>\n prev.includes(code) ? prev.filter((v) => v !== code) : [...prev, code],\n );\n };\n\n const filtered = CURRENCIES.filter(\n (c) =>\n c.code.toLowerCase().includes(query.toLowerCase()) ||\n c.name.toLowerCase().includes(query.toLowerCase()),\n );\n\n const groups = useMemo(() => {\n const map = new Map<string, CurrencyItem[]>();\n filtered.forEach((c) => {\n const list = map.get(c.group) ?? [];\n list.push(c);\n map.set(c.group, list);\n });\n return map;\n }, [filtered]);\n\n return (\n <Dropdown\n {...args}\n overlayStyle={{ minWidth: 420 }}\n content={\n <div style={{ display: 'flex', flexDirection: 'column', gap: 0 }}>\n {/* Selected bar */}\n {selected.length > 0 && (\n <div style={selectedBarStyle}>\n <span style={{ fontSize: 14, fontWeight: 500, color: '#131313' }}>\n {selected.length} selected\n </span>\n <button\n type=\"button\"\n style={clearAllBtnStyle}\n onClick={() => setSelected([])}\n >\n <Icons name=\"cross\" size={16} color=\"#ae0000\" />\n Clear all\n </button>\n </div>\n )}\n\n {/* Search */}\n <div style={{ padding: '8px 0' }}>\n <Input.Search\n size=\"small\"\n placeholder=\"Search\"\n value={query}\n onChange={setQuery}\n allowClear\n />\n </div>\n\n {/* Grouped items */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n {Array.from(groups.entries()).map(([group, items]) => (\n <div key={group} style={{ display: 'flex', flexDirection: 'column' }}>\n <div style={groupHeaderStyle}>{group}</div>\n {items.map((item) => (\n <DropdownItem\n key={item.code}\n selected={selected.includes(item.code)}\n left={<CurrencyIcon flag={item.flag} />}\n title={item.code}\n subtitle={item.name}\n right={\n <p style={itemAmountStyle}>\n {item.amount}\n {item.amountUsd && (\n <>\n <br />\n {item.amountUsd}\n </>\n )}\n </p>\n }\n onClick={() => toggle(item.code)}\n />\n ))}\n </div>\n ))}\n {filtered.length === 0 && (\n <p style={{ ...itemSubtitleStyle, padding: '8px 12px' }}>\n No results found\n </p>\n )}\n </div>\n </div>\n }\n >\n <Button>\n {selected.length > 0 ? `${selected.length} currencies selected` : 'Select currencies'}\n </Button>\n </Dropdown>\n );\n }",
|
|
1813
|
+
"source": "stories",
|
|
1814
|
+
"compilable": false
|
|
1815
|
+
},
|
|
1816
|
+
"b5058892460d3456a042642b413b9da4a784488bd7e21f991f40aea1d5d14a93": {
|
|
1817
|
+
"title": "Canonical usage",
|
|
1818
|
+
"code": "import type { LabelAlign } from '@1money/component-ui';",
|
|
1819
|
+
"source": "canonical",
|
|
1820
|
+
"compilable": true
|
|
1821
|
+
},
|
|
1822
|
+
"b5122ab00632d0b9f9f205345094b8cc87d3de0e265bfa06f77f8c0538a72a4a": {
|
|
1823
|
+
"title": "Import",
|
|
1824
|
+
"code": "import { Link } from '@1money/component-ui';\n// or\nimport { Link } from '@1money/component-ui/Link';",
|
|
1825
|
+
"source": "readme",
|
|
1826
|
+
"compilable": true
|
|
1827
|
+
},
|
|
1828
|
+
"b53d16f186c5371a04bc88eb4e5f48d69652f711a0b9596a5b520eea56fd12b7": {
|
|
1829
|
+
"title": "Usage",
|
|
1830
|
+
"code": "<Link href=\"https://docs.1money.com\" target=\"_blank\">\n Documentation\n</Link>",
|
|
1831
|
+
"source": "readme",
|
|
1832
|
+
"compilable": true
|
|
1833
|
+
},
|
|
1834
|
+
"b544632e1c68a8027a7dc14c2772e211df6fcaa76bf806baaff18f201ed75656": {
|
|
1835
|
+
"title": "Canonical usage",
|
|
1836
|
+
"code": "<Table rowKey=\"id\" columns={columns} dataSource={rows} />",
|
|
1837
|
+
"source": "canonical",
|
|
1838
|
+
"compilable": true
|
|
1839
|
+
},
|
|
1840
|
+
"b5c565a619ca8c6ea6be3771a025e08245ee1157433a0f25341df72da8c82c84": {
|
|
1841
|
+
"title": "Canonical usage",
|
|
1842
|
+
"code": "import type { VirtualListRef } from '@1money/component-ui';",
|
|
1843
|
+
"source": "canonical",
|
|
1844
|
+
"compilable": true
|
|
1845
|
+
},
|
|
1846
|
+
"b5cf05bb6a8f45cfcd470fe1172b358fbd92178d3eece19d966999aa3f077105": {
|
|
1847
|
+
"title": "Canonical usage",
|
|
1848
|
+
"code": "import { Link } from '@1money/component-ui';\n// or\nimport { Link } from '@1money/component-ui/Link';",
|
|
1849
|
+
"source": "canonical",
|
|
1850
|
+
"compilable": true
|
|
1851
|
+
},
|
|
1852
|
+
"b669352c8c48a5998e787d52dcf642775655517e1ea3c28da5047402bfb8f815": {
|
|
1853
|
+
"title": "Canonical usage",
|
|
1854
|
+
"code": "import type { ResizeObserverSizeInfo } from '@1money/component-ui';",
|
|
1855
|
+
"source": "canonical",
|
|
1856
|
+
"compilable": true
|
|
1857
|
+
},
|
|
1858
|
+
"b6bf8d1eebcfbb2bb8d4eef7f3fbb26233d5abe1febad432c6cb4d4af6ad7a79": {
|
|
1859
|
+
"title": "Multiple Children",
|
|
1860
|
+
"code": "{\n const [sizes, setSizes] = useState<Record<string, SizeInfo>>({});\n\n const handleResize = (key: string) => (sizeInfo: SizeInfo) => {\n setSizes((prev) => ({ ...prev, [key]: sizeInfo }));\n };\n\n return (\n <div>\n <p style={{ marginBottom: 8, color: '#666' }}>\n Each box independently reports its size:\n </p>\n <div style={{ display: 'flex', gap: 16 }}>\n {['A', 'B', 'C'].map((key) => (\n <ResizeObserver key={key} onResize={handleResize(key)}>\n <div\n style={{\n ...boxStyle,\n minWidth: 120,\n width: 120 + ['A', 'B', 'C'].indexOf(key) * 40,\n }}\n >\n Box {key}\n {sizes[key] && (\n <div style={{ fontSize: 12, color: '#999', marginTop: 8 }}>\n {sizes[key].width} × {sizes[key].height}\n </div>\n )}\n </div>\n </ResizeObserver>\n ))}\n </div>\n </div>\n );\n }",
|
|
1861
|
+
"source": "stories",
|
|
1862
|
+
"compilable": true
|
|
1863
|
+
},
|
|
1864
|
+
"b85a9a4218f89a3b1cc4d062fb58ddec812f1555b1c52d1a71d3a3131c1c55da": {
|
|
1865
|
+
"title": "Default",
|
|
1866
|
+
"code": "<Popconfirm {...args}>\n <Button color={BUTTON_COLOR.danger}>{POPCONFIRM_DEMO_COPY.destructive.triggerText}</Button>\n </Popconfirm>",
|
|
1867
|
+
"source": "stories",
|
|
1868
|
+
"compilable": false
|
|
1869
|
+
},
|
|
1870
|
+
"b91a32c9ec2ecd84c681d080f87903691347b1bed2ec950e4e4d52c3df72ebd3": {
|
|
1871
|
+
"title": "Import",
|
|
1872
|
+
"code": "import { Copy } from '@1money/components-ui';\n// or\nimport { Copy } from '@1money/components-ui/Copy';",
|
|
1873
|
+
"source": "readme",
|
|
1874
|
+
"compilable": true
|
|
1875
|
+
},
|
|
1876
|
+
"ba061872d363c81e7be320d4e4c26b4ed1989d21480077c3a3055d45d54f1afd": {
|
|
1877
|
+
"title": "Icon Hover Demo",
|
|
1878
|
+
"code": "<div style={{ display: 'flex', gap: 24, flexWrap: 'wrap', alignItems: 'center' }}>\n <IconHover>\n <Icons {...args} name='deposit' />\n </IconHover>\n <IconHover>\n <Icons {...args} name='withdrawal' />\n </IconHover>\n <IconHover>\n <Icons {...args} name='conversion' />\n </IconHover>\n <IconHover>\n <Icons {...args} name='settings' />\n </IconHover>\n <IconHover>\n <Icons {...args} name='notifications' />\n </IconHover>\n <IconHover>\n <Icons {...args} name='cross' />\n </IconHover>\n <IconHover disabled>\n <Icons {...args} name='cross' />\n </IconHover>\n </div>",
|
|
1879
|
+
"source": "stories",
|
|
1880
|
+
"compilable": false
|
|
1881
|
+
},
|
|
1882
|
+
"bd798228effd9ea304dec801de169c61b68aa249974a07c893487d7bb9d57dc0": {
|
|
1883
|
+
"title": "Canonical usage",
|
|
1884
|
+
"code": "import type { ResizeObserverProps } from '@1money/component-ui';",
|
|
1885
|
+
"source": "canonical",
|
|
1886
|
+
"compilable": true
|
|
1887
|
+
},
|
|
1888
|
+
"bda0a33c638ce6212b4a0c6a592ef4de615a792af4360935f5c256a31d3c2bfc": {
|
|
1889
|
+
"title": "Controlled",
|
|
1890
|
+
"code": "{\n const [open, setOpen] = useState(false);\n\n return (\n <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>\n <Dropdown\n {...args}\n open={open}\n onOpenChange={(nextOpen) => {\n setOpen(nextOpen);\n args.onOpenChange?.(nextOpen);\n }}\n content={<MenuContent onClose={() => setOpen(false)} />}\n >\n <Button>Controlled</Button>\n </Dropdown>\n <Button color=\"grey\" size=\"small\" onClick={() => setOpen((prev) => !prev)}>\n Toggle: {open ? 'Open' : 'Closed'}\n </Button>\n </div>\n );\n }",
|
|
1891
|
+
"source": "stories",
|
|
1892
|
+
"compilable": false
|
|
1893
|
+
},
|
|
1894
|
+
"bda12b1c91d1a7916b63557e18512a55470038d5bedc1baa01461d2d9d13c544": {
|
|
1895
|
+
"title": "Address History",
|
|
1896
|
+
"code": "{\n const [selected, setSelected] = useState('1');\n\n return (\n <Dropdown\n {...args}\n overlayStyle={{ minWidth: 420 }}\n content={({ close }) => (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 0 }}>\n {/* Title */}\n <p style={panelTitleStyle}>Address History</p>\n\n {/* Address list */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {ADDRESSES.map((addr) => (\n <button\n key={addr.id}\n type=\"button\"\n style={selected === addr.id ? addressItemSelectedStyle : addressItemStyle}\n onClick={() => {\n setSelected(addr.id);\n close();\n }}\n >\n <div style={{ flex: 1, minWidth: 0 }}>\n <p style={itemTitleStyle}>{addr.label}</p>\n <p style={{ ...itemSubtitleStyle, wordBreak: 'break-all' }}>\n {addr.address}\n </p>\n </div>\n <div style={{ flexShrink: 0, textAlign: 'right' }}>\n <p style={itemAmountStyle}>{addr.token}</p>\n </div>\n <div style={{ flexShrink: 0, width: 16 }}>\n {selected === addr.id && (\n <Icons name=\"check\" size={16} color=\"#131313\" />\n )}\n </div>\n </button>\n ))}\n </div>\n\n {/* Footer action */}\n <div style={panelFooterStyle}>\n <button\n type=\"button\"\n style={{\n ...footerBtnStyle,\n backgroundColor: '#dde6f4',\n color: '#073387',\n }}\n >\n <Icons name=\"add\" size={16} color=\"#073387\" />\n New address\n </button>\n </div>\n </div>\n )}\n >\n <Button>Select Address</Button>\n </Dropdown>\n );\n }",
|
|
1897
|
+
"source": "stories",
|
|
1898
|
+
"compilable": false
|
|
1899
|
+
},
|
|
1900
|
+
"bea04481c1d6a537bdee648094a468c0153ef005defd5762fd0568a7312f0b71": {
|
|
1901
|
+
"title": "Canonical usage",
|
|
1902
|
+
"code": "<ProFormItem />",
|
|
1903
|
+
"source": "canonical",
|
|
1904
|
+
"compilable": true
|
|
1905
|
+
},
|
|
1906
|
+
"bea3fd79a9ce5be5ed4038daa57612f962de2b1b334870a215966790b6a5c1f5": {
|
|
1907
|
+
"title": "Usage",
|
|
1908
|
+
"code": "<CoachMark\n heading=\"Welcome to Dashboard\"\n body=\"Here you can see an overview of your finances.\"\n steps={4}\n defaultActiveStep={0}\n placement=\"top\"\n icon={<Icons name=\"dashboard\" size={24} />}\n onFinish={() => console.log('Tour complete')}\n onDismiss={() => console.log('Tour dismissed')}\n/>",
|
|
1909
|
+
"source": "readme",
|
|
1910
|
+
"compilable": true
|
|
1911
|
+
},
|
|
1912
|
+
"bec858e374183c180f6a8c8157e1d6204faf444043aa0bfe7145fdff1fb35c29": {
|
|
1913
|
+
"title": "Canonical usage",
|
|
1914
|
+
"code": "import type { QueryFilterProps } from '@1money/component-ui';",
|
|
1915
|
+
"source": "canonical",
|
|
1916
|
+
"compilable": true
|
|
1917
|
+
},
|
|
1918
|
+
"bfa365023d672d8f94c08d4bf7dba03404964ed3489949e44748853da10be22b": {
|
|
1919
|
+
"title": "Dialog Form Story",
|
|
1920
|
+
"code": "<DialogForm\n {...args}\n title=\"Create User\"\n trigger={<Button color=\"primary\">Open Dialog Form</Button>}\n onFinish={async (values) => {\n alert(JSON.stringify(values, null, 2));\n }}\n >\n <ProFormText name=\"name\" label=\"Name\" rules={[{ required: true }]} />\n <ProFormText name=\"email\" label=\"Email\" rules={[{ required: true }]} />\n <ProFormSwitch name=\"active\" label=\"Active\" />\n </DialogForm>",
|
|
1921
|
+
"source": "stories",
|
|
1922
|
+
"compilable": false
|
|
1923
|
+
},
|
|
1924
|
+
"bfb9824d83e218356e786080a15403f2dfc660af265b41a8eec26863bd40cc53": {
|
|
1925
|
+
"title": "Color Palette",
|
|
1926
|
+
"code": "<div style={STORY_LAYOUT_STYLE}>\n {TYPOGRAPHY_COLORS.map(color => (\n <Typography.Body key={color} size=\"md\" color={color}>\n {color}\n </Typography.Body>\n ))}\n </div>",
|
|
1927
|
+
"source": "stories",
|
|
1928
|
+
"compilable": true
|
|
1929
|
+
},
|
|
1930
|
+
"bfcdf99e7f52ffcf1dcf1ecb5cec8abe72003bb0176bb7aa1b8f4bf87df202ed": {
|
|
1931
|
+
"title": "Default",
|
|
1932
|
+
"code": "<div style={ANCHOR_WRAPPER_STYLE}>\n <button id=\"tooltip-default\">Hover me</button>\n <Tooltip {...args} anchorSelect=\"#tooltip-default\" />\n </div>",
|
|
1933
|
+
"source": "stories",
|
|
1934
|
+
"compilable": false
|
|
1935
|
+
},
|
|
1936
|
+
"bfef3654ba7e004cca9c6680de5d7039f9de64917fbbcc8e2f2ca84d014a58b2": {
|
|
1937
|
+
"title": "Canonical usage",
|
|
1938
|
+
"code": "import type { SelectProps } from '@1money/component-ui';",
|
|
1939
|
+
"source": "canonical",
|
|
1940
|
+
"compilable": true
|
|
1941
|
+
},
|
|
1942
|
+
"c145e8864a44d06820814a82b0d0e2e486e772f015830b8cc626831e2e025878": {
|
|
1943
|
+
"title": "Canonical usage",
|
|
1944
|
+
"code": "<Portal />",
|
|
1945
|
+
"source": "canonical",
|
|
1946
|
+
"compilable": true
|
|
1947
|
+
},
|
|
1948
|
+
"c196d3703b8f7605b2cf3ba5d441a3c20a72992b82874261716187376e93e86e": {
|
|
1949
|
+
"title": "Vertical",
|
|
1950
|
+
"code": "<Space direction={SPACE_DIRECTION.vertical} size={SPACE_SIZE.middle}>\n <div style={DEMO_BOX_STYLE}>Top</div>\n <div style={DEMO_BOX_STYLE}>Bottom</div>\n </Space>",
|
|
1951
|
+
"source": "stories",
|
|
1952
|
+
"compilable": true
|
|
1953
|
+
},
|
|
1954
|
+
"c2d0e5c92e119088561656cca130e7fe6d43a492895329f41b30087cb4f987a7": {
|
|
1955
|
+
"title": "Sizes",
|
|
1956
|
+
"code": "<div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>\n {TAG_SIZES.map((size) => (\n <Tag {...args} key={size} size={size} label={size} />\n ))}\n </div>",
|
|
1957
|
+
"source": "stories",
|
|
1958
|
+
"compilable": false
|
|
1959
|
+
},
|
|
1960
|
+
"c303f66164ebe41cd2a3afd4f3f393f888ada9d6806d059d56b47f502825f2f7": {
|
|
1961
|
+
"title": "OTP",
|
|
1962
|
+
"code": "{\n const onComplete = fn();\n const onChange = fn();\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 40 }}>\n {/* ── Large ── */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>Large</h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>\n <div>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>default / Empty</p>\n <Input.OTP\n label=\"Verification Code\"\n feedback=\"Feedback\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n length={6}\n onComplete={onComplete}\n onChange={onChange}\n />\n </div>\n <div>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>default / Partial</p>\n <Input.OTP\n label=\"Verification Code\"\n feedback=\"Feedback\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n length={6}\n defaultValue=\"123\"\n onComplete={onComplete}\n onChange={onChange}\n />\n </div>\n <div>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>error</p>\n <Input.OTP\n label=\"Verification Code\"\n status=\"error\"\n feedback=\"Invalid code\"\n feedbackIcon={<Icons name=\"error\" size={16} />}\n length={6}\n defaultValue=\"999999\"\n onComplete={onComplete}\n onChange={onChange}\n />\n </div>\n <div>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>disabled</p>\n <Input.OTP\n label=\"Verification Code\"\n disabled\n length={6}\n defaultValue=\"123456\"\n onComplete={onComplete}\n onChange={onChange}\n />\n </div>\n <div>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>mask (password style)</p>\n <Input.OTP\n label=\"PIN Code\"\n length={6}\n defaultValue=\"1234\"\n mask\n onComplete={onComplete}\n onChange={onChange}\n />\n </div>\n </div>\n </div>\n\n {/* ── Small ── */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>Small</h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>\n <div>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>default / Empty</p>\n <Input.OTP\n size=\"small\"\n label=\"Code\"\n length={6}\n onComplete={onComplete}\n onChange={onChange}\n />\n </div>\n <div>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>4-digit code</p>\n <Input.OTP\n size=\"small\"\n label=\"PIN\"\n length={4}\n defaultValue=\"12\"\n onComplete={onComplete}\n onChange={onChange}\n />\n </div>\n </div>\n </div>\n </div>\n );\n }",
|
|
1963
|
+
"source": "stories",
|
|
1964
|
+
"compilable": false
|
|
1965
|
+
},
|
|
1966
|
+
"c3aaf0098db4c77ba5af727f8c2eb70a9969be6ea15dcba309d583137cfe6e21": {
|
|
1967
|
+
"title": "Nested List",
|
|
1968
|
+
"code": "<ProForm\n {...args}\n initialValues={{\n groups: [\n { title: 'Group A', items: [{ name: 'Item 1' }] },\n ],\n }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormList name=\"groups\" label=\"Groups\">\n {(fields) =>\n fields.map(({ name, key }) => (\n <div key={key} style={{ border: '1px solid #eee', padding: 12, marginBottom: 8, borderRadius: 4 }}>\n <ProFormText name={`${name}.title`} label=\"Group Title\" />\n <ProFormList name=\"items\" label=\"Items\">\n {(subFields) =>\n subFields.map((sf) => (\n <ProFormText key={sf.key} name={`${sf.name}.name`} label=\"Item Name\" />\n ))\n }\n </ProFormList>\n </div>\n ))\n }\n </ProFormList>\n </ProForm>",
|
|
1969
|
+
"source": "stories",
|
|
1970
|
+
"compilable": false
|
|
1971
|
+
},
|
|
1972
|
+
"c4dc11bc9b4b9698e931dc881cc580895c8626b71430d09eec8f7054d49c46f0": {
|
|
1973
|
+
"title": "With Text",
|
|
1974
|
+
"code": "<div>\n <p>Lorem ipsum dolor sit amet.</p>\n <Divider>Text</Divider>\n <p>Lorem ipsum dolor sit amet.</p>\n <Divider orientation=\"left\">Left Text</Divider>\n <p>Lorem ipsum dolor sit amet.</p>\n <Divider orientation=\"right\">Right Text</Divider>\n <p>Lorem ipsum dolor sit amet.</p>\n </div>",
|
|
1975
|
+
"source": "stories",
|
|
1976
|
+
"compilable": true
|
|
1977
|
+
},
|
|
1978
|
+
"c4fb3c20755ba50100856ee70fc3b85038d8c04bef80a4aec58734e95995d8a8": {
|
|
1979
|
+
"title": "Canonical usage",
|
|
1980
|
+
"code": "<ProFormCheckboxGroup />",
|
|
1981
|
+
"source": "canonical",
|
|
1982
|
+
"compilable": true
|
|
1983
|
+
},
|
|
1984
|
+
"c5260837fe7728fca505a762c48a8ede3b34d472c53b2be29b29a49de267418d": {
|
|
1985
|
+
"title": "Import",
|
|
1986
|
+
"code": "import { Icons, IconWrapper, IconHover } from '@1money/components-ui';\n// or\nimport { Icons, IconWrapper, IconHover } from '@1money/components-ui/Icons';\n\n// Type import\nimport type { IconName } from '@1money/components-ui';",
|
|
1987
|
+
"source": "readme",
|
|
1988
|
+
"compilable": true
|
|
1989
|
+
},
|
|
1990
|
+
"c539c466c34edf9adf7a91c4b2d933518b120bce2cce74457c78e0579e6f91b5": {
|
|
1991
|
+
"title": "Canonical usage",
|
|
1992
|
+
"code": "import type { DropdownProps } from '@1money/component-ui';",
|
|
1993
|
+
"source": "canonical",
|
|
1994
|
+
"compilable": true
|
|
1995
|
+
},
|
|
1996
|
+
"c5c8294cf8e64c0260dadcf294fe23c8dc5b054d7780988addeb5f5bfa8f6658": {
|
|
1997
|
+
"title": "Page Loading Overlay",
|
|
1998
|
+
"code": "const PageLoader = ({ isLoading }) => {\n if (!isLoading) return null;\n\n return (\n <div className=\"page-loader-overlay\">\n <Spinner\n style={{ width: '50px', height: '50px' }}\n strokeWidth=\"3\"\n />\n <p>Loading your data...</p>\n </div>\n );\n};",
|
|
1999
|
+
"source": "readme",
|
|
2000
|
+
"compilable": true
|
|
2001
|
+
},
|
|
2002
|
+
"c614ee8b96a68d951bd7d9eb5c0f2a5c3be262fa670d2d245894f0a91deb000d": {
|
|
2003
|
+
"title": "Canonical usage",
|
|
2004
|
+
"code": "<Pagination />",
|
|
2005
|
+
"source": "canonical",
|
|
2006
|
+
"compilable": true
|
|
2007
|
+
},
|
|
2008
|
+
"c61edd4d5f5113671afbb2b5ce72b88a70f64bf63d8e320cd21c669831574cd1": {
|
|
2009
|
+
"title": "Canonical usage",
|
|
2010
|
+
"code": "<ProFormDependency name={[]}>{() => {}}</ProFormDependency>",
|
|
2011
|
+
"source": "canonical",
|
|
2012
|
+
"compilable": true
|
|
2013
|
+
},
|
|
2014
|
+
"c6a83d6c798d0d40463dd843e21e8d400034b2e02b102cc4f379e4a07d4b9fe7": {
|
|
2015
|
+
"title": "Import",
|
|
2016
|
+
"code": "import { Slider } from '@1money/components-ui';\n// or\nimport { Slider } from '@1money/components-ui/Slider';",
|
|
2017
|
+
"source": "readme",
|
|
2018
|
+
"compilable": true
|
|
2019
|
+
},
|
|
2020
|
+
"c6c6006c18fc013fe133931a21d10e19d9263c424b639dbe5b1038884729bb32": {
|
|
2021
|
+
"title": "Horizontal",
|
|
2022
|
+
"code": "<p>Above</p>\n<Divider />\n<p>Below</p>",
|
|
2023
|
+
"source": "readme",
|
|
2024
|
+
"compilable": true
|
|
2025
|
+
},
|
|
2026
|
+
"c7034bd09dee419c111b7c340fad09a444cfe9e9697b0595059c042314217da5": {
|
|
2027
|
+
"title": "Custom Styling",
|
|
2028
|
+
"code": "<Dropdown\n {...args}\n overlayClassName=\"custom-dropdown-panel\"\n overlayStyle={{ minWidth: 240 }}\n content={<MenuContent />}\n >\n <Button>Custom Style</Button>\n </Dropdown>",
|
|
2029
|
+
"source": "stories",
|
|
2030
|
+
"compilable": false
|
|
2031
|
+
},
|
|
2032
|
+
"c708d9a68618a957abae65c03f9ebb38fd38b515889a38cdc4abedf031315725": {
|
|
2033
|
+
"title": "Basic Usage",
|
|
2034
|
+
"code": "import { Space } from '@1money/components-ui';\nimport { SPACE_ALIGN, SPACE_DIRECTION, SPACE_SIZE } from '@1money/components-ui/Space';\n\n<Space size={SPACE_SIZE.middle} align={SPACE_ALIGN.center}>\n <span>Left</span>\n <span>Right</span>\n</Space>",
|
|
2035
|
+
"source": "readme",
|
|
2036
|
+
"compilable": true
|
|
2037
|
+
},
|
|
2038
|
+
"c7dcba25848c3c668f4be990f07f1a6cc8b5b3687bb3533b277bf10074bbbd74": {
|
|
2039
|
+
"title": "Mode Update",
|
|
2040
|
+
"code": "<ProForm\n {...args}\n mode=\"update\"\n initialValues={{ id: 'USR-001', name: 'Alice', email: 'alice@example.com' }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormText name=\"id\" label=\"ID\" mode=\"read\" />\n <ProFormText name=\"name\" label=\"Name\" rules={[{ required: true }]} />\n <ProFormText name=\"email\" label=\"Email\" />\n </ProForm>",
|
|
2041
|
+
"source": "stories",
|
|
2042
|
+
"compilable": false
|
|
2043
|
+
},
|
|
2044
|
+
"c9055581e81ec06997b903da8cf3dc5446cb9767423cb2fd80762ede31063176": {
|
|
2045
|
+
"title": "Disabled",
|
|
2046
|
+
"code": "{\n const [disabled, setDisabled] = useState(false);\n const [resizeCount, setResizeCount] = useState(0);\n\n return (\n <div>\n <div style={{ marginBottom: 12 }}>\n <label>\n <input\n type=\"checkbox\"\n checked={disabled}\n onChange={(e) => setDisabled(e.target.checked)}\n />\n {' '}Disable observer\n </label>\n <span style={{ marginLeft: 12, color: '#666' }}>\n Resize events received: {resizeCount}\n </span>\n </div>\n <ResizeObserver\n disabled={disabled}\n onResize={() => setResizeCount((c) => c + 1)}\n >\n <div style={boxStyle}>\n {disabled ? 'Observer disabled — resize events paused' : 'Resize me to trigger events'}\n </div>\n </ResizeObserver>\n </div>\n );\n }",
|
|
2047
|
+
"source": "stories",
|
|
2048
|
+
"compilable": true
|
|
2049
|
+
},
|
|
2050
|
+
"c9809b17f15305dd053e92c369352c1ab74e40750e704156f35c50b22b0fb7af": {
|
|
2051
|
+
"title": "Network Selector",
|
|
2052
|
+
"code": "{\n const [selected, setSelected] = useState('BNB');\n\n return (\n <Dropdown\n {...args}\n overlayStyle={{ minWidth: 420 }}\n content={({ close }) => (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n <Alert\n status=\"warning\"\n body=\"Please only top up through supported networks, otherwise you may lose your funds\"\n closable={false}\n />\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n {NETWORKS.map((network) => (\n <DropdownItem\n key={network.code}\n selected={selected === network.code}\n left={<CurrencyIcon flag={network.icon} />}\n title={network.code}\n subtitle={network.name}\n right={<p style={itemAmountStyle}>{network.time}</p>}\n onClick={() => {\n setSelected(network.code);\n close();\n }}\n />\n ))}\n </div>\n </div>\n )}\n >\n <Button>\n {selected ? `${NETWORKS.find((n) => n.code === selected)?.icon} ${selected}` : 'Select Network'}\n </Button>\n </Dropdown>\n );\n }",
|
|
2053
|
+
"source": "stories",
|
|
2054
|
+
"compilable": false
|
|
2055
|
+
},
|
|
2056
|
+
"ca3b9b0ee348c09e621b11cf2534f5d42546ed5004f5f00f042b20c9ca6a7548": {
|
|
2057
|
+
"title": "Canonical usage",
|
|
2058
|
+
"code": "import type { DialogFooterRender } from '@1money/component-ui';",
|
|
2059
|
+
"source": "canonical",
|
|
2060
|
+
"compilable": true
|
|
2061
|
+
},
|
|
2062
|
+
"ca70d69f9d217bc2fb7464ca43a6e4014c47f608128b31fcaef0dce251e15ea4": {
|
|
2063
|
+
"title": "With Disabled",
|
|
2064
|
+
"code": "<Segment\n items={[\n { value: 'tab1', label: 'Overview' },\n { value: 'tab2', label: 'Transactions' },\n { value: 'tab3', label: 'Analytics', disabled: true },\n { value: 'tab4', label: 'Settings' },\n ]}\n />",
|
|
2065
|
+
"source": "stories",
|
|
2066
|
+
"compilable": true
|
|
2067
|
+
},
|
|
2068
|
+
"cb70ebe2c9a937bb1cd0ba29f708510c4c1e22e8ac2caacd37674882f698a196": {
|
|
2069
|
+
"title": "Canonical usage",
|
|
2070
|
+
"code": "import type { SelectRenderOptionMeta } from '@1money/component-ui';",
|
|
2071
|
+
"source": "canonical",
|
|
2072
|
+
"compilable": true
|
|
2073
|
+
},
|
|
2074
|
+
"cc02e88440947a6233796037b3d5c91a08dccc0fbd6048c0d19e0c449e82dc73": {
|
|
2075
|
+
"title": "Canonical usage",
|
|
2076
|
+
"code": "import type { DropdownContentContext } from '@1money/component-ui';",
|
|
2077
|
+
"source": "canonical",
|
|
2078
|
+
"compilable": true
|
|
2079
|
+
},
|
|
2080
|
+
"cc0a911d74a5939f71b3e713aed21e4a2dd1adc41fcc547aa40a60cf82549caa": {
|
|
2081
|
+
"title": "Import",
|
|
2082
|
+
"code": "import { Radio, RadioGroup } from '@1money/components-ui';\n// or tree-shakeable\nimport { Radio, RadioGroup } from '@1money/components-ui/Radio';",
|
|
2083
|
+
"source": "readme",
|
|
2084
|
+
"compilable": true
|
|
2085
|
+
},
|
|
2086
|
+
"ccaa3cb3e660ea38beaa59a26d94e5aa6bcd8ea3fb8449f82d28e13875c9c05e": {
|
|
2087
|
+
"title": "Group Disabled",
|
|
2088
|
+
"code": "<RadioGroup value=\"a\" disabled>\n <Radio value=\"a\" label=\"Option A\" />\n <Radio value=\"b\" label=\"Option B\" />\n <Radio value=\"c\" label=\"Option C\" />\n </RadioGroup>",
|
|
2089
|
+
"source": "stories",
|
|
2090
|
+
"compilable": true
|
|
2091
|
+
},
|
|
2092
|
+
"ce3412158804bef977933a6f68163249822402fcf44facae20470ccfd61de718": {
|
|
2093
|
+
"title": "Import",
|
|
2094
|
+
"code": "import { Calendar } from '@1money/components-ui';\n// or\nimport { Calendar } from '@1money/components-ui/Calendar';",
|
|
2095
|
+
"source": "readme",
|
|
2096
|
+
"compilable": true
|
|
2097
|
+
},
|
|
2098
|
+
"ce5a29cdd05e46095aa4e0495f15de25d4e29a8772e83863f793f174d89170df": {
|
|
2099
|
+
"title": "Trade",
|
|
2100
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 32, maxWidth: 660 }}>\n <div>\n <h3 style={{ margin: '0 0 8px' }}>Default (Placeholder)</h3>\n <Input.Trade\n currencySymbol=\"$\"\n currencyUnit=\"USD\"\n showMax\n onMax={fn()}\n onSwap={fn()}\n exchangeText=\"0 USDT\"\n />\n </div>\n <div>\n <h3 style={{ margin: '0 0 8px' }}>Default (Filled)</h3>\n <Input.Trade\n currencySymbol=\"$\"\n currencyUnit=\"USD\"\n defaultValue=\"123,456,789\"\n showMax\n onMax={fn()}\n onSwap={fn()}\n exchangeText=\"123,456,789 USDT\"\n />\n </div>\n <div>\n <h3 style={{ margin: '0 0 8px' }}>Error</h3>\n <Input.Trade\n currencySymbol=\"$\"\n currencyUnit=\"USD\"\n defaultValue=\"123,456,789\"\n status=\"error\"\n showMax\n onMax={fn()}\n onSwap={fn()}\n exchangeText=\"123,456,789 USDT\"\n feedback=\"Insufficient balance\"\n />\n </div>\n <div>\n <h3 style={{ margin: '0 0 8px' }}>Disabled</h3>\n <Input.Trade\n currencySymbol=\"$\"\n currencyUnit=\"USD\"\n defaultValue=\"123,456,789\"\n disabled\n showMax\n onSwap={fn()}\n exchangeText=\"123,456,789 USDT\"\n />\n </div>\n </div>",
|
|
2101
|
+
"source": "stories",
|
|
2102
|
+
"compilable": false
|
|
2103
|
+
},
|
|
2104
|
+
"cef06a2fa9ec150e4ab25d3ca42529946e43096750463d7e09e45104bfe938a9": {
|
|
2105
|
+
"title": "Canonical usage",
|
|
2106
|
+
"code": "import type { SelectSize } from '@1money/component-ui';",
|
|
2107
|
+
"source": "canonical",
|
|
2108
|
+
"compilable": true
|
|
2109
|
+
},
|
|
2110
|
+
"cf77657b10de8590abb4f91c96d5208ef8e88c19ca770632f85ea70ebd3f41f2": {
|
|
2111
|
+
"title": "Debounce Field",
|
|
2112
|
+
"code": "<ProForm\n {...args}\n onValuesChange={(changed) => {\n console.log('onValuesChange (debounced):', changed);\n }}\n >\n <ProFormText\n name=\"search\"\n label=\"Search (300ms debounce — check console)\"\n debounceTime={300}\n placeholder=\"Type fast...\"\n />\n <ProFormText name=\"instant\" label=\"Instant (no debounce)\" placeholder=\"Type fast...\" />\n </ProForm>",
|
|
2113
|
+
"source": "stories",
|
|
2114
|
+
"compilable": false
|
|
2115
|
+
},
|
|
2116
|
+
"cf7c4b8794bcd349562a79995712162df90283bb284d622f89e02d30e115598d": {
|
|
2117
|
+
"title": "Colors",
|
|
2118
|
+
"code": "<div style={rowStyle}>\n {BUTTON_COLORS.map((color) => (\n <Button {...args} key={color} color={color}>\n {color}\n </Button>\n ))}\n </div>",
|
|
2119
|
+
"source": "stories",
|
|
2120
|
+
"compilable": false
|
|
2121
|
+
},
|
|
2122
|
+
"d04fb66d67c8ae60bbd4a4937cb198b9b91ef7835b27f5766f421c864efdf891": {
|
|
2123
|
+
"title": "Canonical usage",
|
|
2124
|
+
"code": "<VirtualList />",
|
|
2125
|
+
"source": "canonical",
|
|
2126
|
+
"compilable": true
|
|
2127
|
+
},
|
|
2128
|
+
"d07754a416050437d6b99b5541fa4eb847f75facc92eb9f9427194d138408140": {
|
|
2129
|
+
"title": "Canonical usage",
|
|
2130
|
+
"code": "import type { DialogProps } from '@1money/component-ui';",
|
|
2131
|
+
"source": "canonical",
|
|
2132
|
+
"compilable": true
|
|
2133
|
+
},
|
|
2134
|
+
"d0b89ae2fa1043346a2874d6f6ab1231cc0e830f16e1f70fd5614d322a61b044": {
|
|
2135
|
+
"title": "Canonical usage",
|
|
2136
|
+
"code": "import type { SelectValue } from '@1money/component-ui';",
|
|
2137
|
+
"source": "canonical",
|
|
2138
|
+
"compilable": true
|
|
2139
|
+
},
|
|
2140
|
+
"d17ae919d30d1b43236c52018609c72e725c0e22e47938fa2bed04cae70b2542": {
|
|
2141
|
+
"title": "Usage",
|
|
2142
|
+
"code": "<Tag label=\"Active\" color=\"success\" />\n<Tag label=\"Warning\" color=\"warning\" icon=\"add\" removable onRemove={() => {}} />\n<Tag label=\"Medium\" size=\"medium\" color=\"recommended\" />\n<Tag label=\"Small\" size=\"small\" color=\"negative\" />",
|
|
2143
|
+
"source": "readme",
|
|
2144
|
+
"compilable": true
|
|
2145
|
+
},
|
|
2146
|
+
"d1cd64f002a5ae848ed3cbc7468dc0fdeec83147216a79bfa61857ed1d9fb9b9": {
|
|
2147
|
+
"title": "Placements",
|
|
2148
|
+
"code": "<div style={POPCONFIRM_STORY_STYLE.placementsWrapper}>\n {POPCONFIRM_PLACEMENTS.map((placement) => (\n <Popconfirm\n {...args}\n key={placement}\n placement={placement}\n title={placement}\n body={POPCONFIRM_DEMO_COPY.placementBody}\n >\n <Button size={BUTTON_SIZE.small} color={BUTTON_COLOR.grey}>\n {placement}\n </Button>\n </Popconfirm>\n ))}\n </div>",
|
|
2149
|
+
"source": "stories",
|
|
2150
|
+
"compilable": false
|
|
2151
|
+
},
|
|
2152
|
+
"d2edd9eacbc07e5e229da3827b202d5da1fe8f4ca569e59c8162ce3927cbf36e": {
|
|
2153
|
+
"title": "Import",
|
|
2154
|
+
"code": "import { Input } from '@1money/components-ui';\n// or\nimport { Input } from '@1money/components-ui/Input';",
|
|
2155
|
+
"source": "readme",
|
|
2156
|
+
"compilable": true
|
|
2157
|
+
},
|
|
2158
|
+
"d41dbb44d3d8769c1d0adb9e207bae7aeb9410730ab9e50b3897b5913c110ee7": {
|
|
2159
|
+
"title": "Field Dependencies",
|
|
2160
|
+
"code": "<ProForm\n {...args}\n initialValues={{ country: '', city: '' }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormSelect\n name=\"country\"\n label=\"Country\"\n valueEnum={{ us: 'United States', cn: 'China', jp: 'Japan' }}\n />\n <ProFormSelect\n name=\"city\"\n label=\"City (auto-loads based on Country)\"\n dependencies={['country']}\n request={async (params) => {\n await new Promise((r) => setTimeout(r, 500));\n const cities: Record<string, Array<{ label: string; value: string }>> = {\n us: [{ label: 'New York', value: 'ny' }, { label: 'Los Angeles', value: 'la' }],\n cn: [{ label: 'Beijing', value: 'bj' }, { label: 'Shanghai', value: 'sh' }],\n jp: [{ label: 'Tokyo', value: 'tk' }, { label: 'Osaka', value: 'os' }],\n };\n return cities[params?.country as string] ?? [];\n }}\n />\n </ProForm>",
|
|
2161
|
+
"source": "stories",
|
|
2162
|
+
"compilable": false
|
|
2163
|
+
},
|
|
2164
|
+
"d48d8676eb8b36a6ebc4a499db4fc5db1f7cad9d843dab155bcc0e51ae112dd7": {
|
|
2165
|
+
"title": "Import",
|
|
2166
|
+
"code": "import { Empty } from '@1money/components-ui';\n// or\nimport { Empty } from '@1money/components-ui/Empty';",
|
|
2167
|
+
"source": "readme",
|
|
2168
|
+
"compilable": true
|
|
2169
|
+
},
|
|
2170
|
+
"d4cfa73d1f8594d54e518f6d453f327da0cbfe5696e915132697bab1461257a2": {
|
|
2171
|
+
"title": "Canonical usage",
|
|
2172
|
+
"code": "import type { ProFormMode } from '@1money/component-ui';",
|
|
2173
|
+
"source": "canonical",
|
|
2174
|
+
"compilable": true
|
|
2175
|
+
},
|
|
2176
|
+
"d6d63abfec53aafed291131ef3a163dafcf0b09dbf5655a9457e4a8c5e75868e": {
|
|
2177
|
+
"title": "Canonical usage",
|
|
2178
|
+
"code": "<Dropdown />",
|
|
2179
|
+
"source": "canonical",
|
|
2180
|
+
"compilable": true
|
|
2181
|
+
},
|
|
2182
|
+
"d8541ce54f9d19430978dbd976d464fbc05c5ff5c9d4b33b03a2e25d6b11992c": {
|
|
2183
|
+
"title": "Canonical usage",
|
|
2184
|
+
"code": "import { Button } from '@1money/components-ui';\n// or\nimport { Button } from '@1money/components-ui/Button';",
|
|
2185
|
+
"source": "canonical",
|
|
2186
|
+
"compilable": true
|
|
2187
|
+
},
|
|
2188
|
+
"d91c28bb6a118b26bb8a54276fb59ec8a840474d47297b0ab6537c738cb98876": {
|
|
2189
|
+
"title": "Canonical usage",
|
|
2190
|
+
"code": "import type { PopconfirmTrigger } from '@1money/component-ui';",
|
|
2191
|
+
"source": "canonical",
|
|
2192
|
+
"compilable": true
|
|
2193
|
+
},
|
|
2194
|
+
"d9882ee38a2bc32f9e2590509a569226bc8b174cfe3c16f5a1bdfbbc7662bf62": {
|
|
2195
|
+
"title": "Placement",
|
|
2196
|
+
"code": "{\n const [open, setOpen] = useState(false);\n const [placement, setPlacement] = useState<DrawerPlacement>('right');\n\n const openDrawer = (p: DrawerPlacement) => {\n setPlacement(p);\n setOpen(true);\n };\n\n return (\n <div style={{ display: 'flex', gap: 8 }}>\n <Button onClick={() => openDrawer('top')}>Top</Button>\n <Button onClick={() => openDrawer('right')}>Right</Button>\n <Button onClick={() => openDrawer('bottom')}>Bottom</Button>\n <Button onClick={() => openDrawer('left')}>Left</Button>\n <Drawer\n open={open}\n placement={placement}\n title={`${placement} drawer`}\n onClose={() => setOpen(false)}\n width={360}\n height={300}\n >\n <p>Drawer slides in from the {placement}.</p>\n </Drawer>\n </div>\n );\n }",
|
|
2197
|
+
"source": "stories",
|
|
2198
|
+
"compilable": true
|
|
2199
|
+
},
|
|
2200
|
+
"d994495c029f812a3de0502ae8cfe6dd7e8d6a14d695143c5e427eb20b730904": {
|
|
2201
|
+
"title": "Primary",
|
|
2202
|
+
"code": "<Flex {...args}>\n <div style={DEMO_BOX_STYLE}>One</div>\n <div style={DEMO_BOX_STYLE}>Two</div>\n <div style={DEMO_BOX_STYLE}>Three</div>\n </Flex>",
|
|
2203
|
+
"source": "stories",
|
|
2204
|
+
"compilable": false
|
|
2205
|
+
},
|
|
2206
|
+
"d9aa8ed0c57561146c619eba9bd5fa468ec9bac579c2ba44822fc35b3c17dcc7": {
|
|
2207
|
+
"title": "Usage",
|
|
2208
|
+
"code": "<Cell iconStart=\"security\" iconEnd=\"arrowRight\">\n Authenticator app\n</Cell>",
|
|
2209
|
+
"source": "readme",
|
|
2210
|
+
"compilable": true
|
|
2211
|
+
},
|
|
2212
|
+
"d9c8c640f134945ee1c690fc09f249d48531b5e05729faa4795d7411a8b3bc4e": {
|
|
2213
|
+
"title": "Default",
|
|
2214
|
+
"code": "<ProForm\n {...args}\n initialValues={{ username: '', email: '' }}\n onFinish={(values) => {\n args.onFinish?.(values);\n alert(JSON.stringify(values, null, 2));\n }}\n >\n <ProFormText\n name=\"username\"\n label=\"Username\"\n placeholder=\"Enter username\"\n rules={[{ required: true, message: 'Username is required' }]}\n />\n <ProFormText\n name=\"email\"\n label=\"Email\"\n placeholder=\"Enter email\"\n rules={[{ required: true }, { type: 'email', message: 'Invalid email' }]}\n />\n </ProForm>",
|
|
2215
|
+
"source": "stories",
|
|
2216
|
+
"compilable": false
|
|
2217
|
+
},
|
|
2218
|
+
"da48319e963f8bce14fd2d0e6276dbdb8273cee567181e50abfb14f902872b76": {
|
|
2219
|
+
"title": "Colors",
|
|
2220
|
+
"code": "<div style={{ display: 'flex', flexWrap: 'wrap', gap: 12, alignItems: 'center' }}>\n {TAG_COLORS.map((color) => (\n <Tag {...args} key={color} color={color} label={color} />\n ))}\n </div>",
|
|
2221
|
+
"source": "stories",
|
|
2222
|
+
"compilable": false
|
|
2223
|
+
},
|
|
2224
|
+
"db11dae227995e92880a75b42e93f034782b06757a643753f468b4e0b598692a": {
|
|
2225
|
+
"title": "Filter Wrap Spacing",
|
|
2226
|
+
"code": "<div style={DEMO_PAGE_STYLE}>\n <Space size={[8, 12]} wrap style={{ maxWidth: 640 }}>\n <div style={DEMO_CHIP_ITEM_STYLE}>All</div>\n <div style={DEMO_CHIP_ITEM_STYLE}>High Risk</div>\n <div style={DEMO_CHIP_ITEM_STYLE}>KYC Pending</div>\n <div style={DEMO_CHIP_ITEM_STYLE}>Manual Review</div>\n <div style={DEMO_CHIP_ITEM_STYLE}>Today</div>\n <div style={DEMO_CHIP_ITEM_STYLE}>This Week</div>\n <div style={DEMO_CHIP_ITEM_STYLE}>Large Amount</div>\n <div style={DEMO_CHIP_ITEM_STYLE}>USDT</div>\n <div style={DEMO_CHIP_ITEM_STYLE}>USD</div>\n </Space>\n </div>",
|
|
2227
|
+
"source": "stories",
|
|
2228
|
+
"compilable": true
|
|
2229
|
+
},
|
|
2230
|
+
"db1561752135c60ff5a677102a19f86d01a79b50a6824699a9c6fe7a9ead392f": {
|
|
2231
|
+
"title": "Canonical usage",
|
|
2232
|
+
"code": "import type { ProFormFieldConvertValueFn } from '@1money/component-ui';",
|
|
2233
|
+
"source": "canonical",
|
|
2234
|
+
"compilable": true
|
|
2235
|
+
},
|
|
2236
|
+
"dbdf57d8d45ba16d7872023c8baa1986123e9011100cd6332a0023a7d8d2a832": {
|
|
2237
|
+
"title": "All Variants",
|
|
2238
|
+
"code": "<div style={columnStyle}>\n {BUTTON_SIZES.map((size) => (\n <div key={size}>\n <h3 style={sectionHeaderStyle}>{size}</h3>\n <div style={rowStyle}>\n {BUTTON_COLORS.map((color) => (\n <Button {...args} key={`${size}-${color}`} size={size} color={color}>\n {color}\n </Button>\n ))}\n </div>\n <div style={{ ...rowStyle, marginTop: 8 }}>\n {BUTTON_COLORS.map((color) => (\n <Button {...args} key={`${size}-${color}-disabled`} size={size} color={color} disabled>\n {color}\n </Button>\n ))}\n </div>\n <div style={{ ...rowStyle, marginTop: 8 }}>\n {BUTTON_COLORS.map((color) => (\n <Button {...args} key={`${size}-${color}-loading`} size={size} color={color} loading>\n {color}\n </Button>\n ))}\n </div>\n </div>\n ))}\n </div>",
|
|
2239
|
+
"source": "stories",
|
|
2240
|
+
"compilable": false
|
|
2241
|
+
},
|
|
2242
|
+
"dbe5994cff8f6c4f3635681f94133b647911651dcbd137756971ec6c7ff898f9": {
|
|
2243
|
+
"title": "Primary",
|
|
2244
|
+
"code": "<Grid {...args}>\n <Grid.Col span={SPAN_THIRD}><div style={DEMO_BOX_STYLE}>4</div></Grid.Col>\n <Grid.Col span={SPAN_THIRD}><div style={DEMO_BOX_STYLE}>4</div></Grid.Col>\n <Grid.Col span={SPAN_THIRD}><div style={DEMO_BOX_STYLE}>4</div></Grid.Col>\n </Grid>",
|
|
2245
|
+
"source": "stories",
|
|
2246
|
+
"compilable": false
|
|
2247
|
+
},
|
|
2248
|
+
"dc01398c0ec62b3b260632c8c528234ca38fcf7b153be444936a2dd5cf7ffcc0": {
|
|
2249
|
+
"title": "All Variants",
|
|
2250
|
+
"code": "<div style={stackStyle}>\n <Alert\n {...args}\n status=\"info\"\n title=\"Sync in progress\"\n body=\"Large uploads may take a few more seconds to appear everywhere.\"\n link={{ label: 'See sync status', onClick: fn() }}\n closable={false}\n />\n <Alert\n {...args}\n status=\"success\"\n title=\"Verification complete\"\n body=\"Your account passed the latest security checks.\"\n link={{ label: 'Open audit log', onClick: fn() }}\n closable={false}\n />\n <Alert\n {...args}\n status=\"warning\"\n title=\"Review payout details\"\n body=\"One recipient is missing bank metadata and may fail on submission.\"\n link={{ label: 'Fix recipient', onClick: fn() }}\n closable={false}\n />\n <Alert\n {...args}\n status=\"error\"\n title=\"Transfer failed\"\n body=\"The quoted rate expired before settlement. Refresh and try again.\"\n link={{ label: 'Retry transfer', onClick: fn() }}\n closable={false}\n />\n </div>",
|
|
2251
|
+
"source": "stories",
|
|
2252
|
+
"compilable": false
|
|
2253
|
+
},
|
|
2254
|
+
"dd0dc5a0741ff7e4495ca9fb3eb3072f77d4f1b84be6af9dda1675475566cbcf": {
|
|
2255
|
+
"title": "Render Props",
|
|
2256
|
+
"code": "{\n const [size, setSize] = useState<SizeInfo | null>(null);\n\n return (\n <div>\n <p style={{ marginBottom: 8, color: '#666' }}>\n Using render-props pattern for ref forwarding:\n </p>\n <ResizeObserver onResize={(sizeInfo) => setSize(sizeInfo)}>\n {(ref) => (\n <div ref={ref as React.RefObject<HTMLDivElement>} style={boxStyle}>\n Render-props child\n {size && (\n <div style={{ fontSize: 12, color: '#999', marginTop: 8 }}>\n {size.width} × {size.height}\n </div>\n )}\n </div>\n )}\n </ResizeObserver>\n </div>\n );\n }",
|
|
2257
|
+
"source": "stories",
|
|
2258
|
+
"compilable": true
|
|
2259
|
+
},
|
|
2260
|
+
"dd7a9e1ecc57d2efc005885114cec94320649768480f7dd0006adb2ea5855d5d": {
|
|
2261
|
+
"title": "Canonical usage",
|
|
2262
|
+
"code": "import type { ProFormRequestOption } from '@1money/component-ui';",
|
|
2263
|
+
"source": "canonical",
|
|
2264
|
+
"compilable": true
|
|
2265
|
+
},
|
|
2266
|
+
"dda0f285741a298f3e8cd24f768a9faf10789e206854eb6555fc79970dcb9c2d": {
|
|
2267
|
+
"title": "Import",
|
|
2268
|
+
"code": "import { Tabs } from '@1money/components-ui';\n// or\nimport { Tabs } from '@1money/components-ui/Tabs';",
|
|
2269
|
+
"source": "readme",
|
|
2270
|
+
"compilable": true
|
|
2271
|
+
},
|
|
2272
|
+
"ddba2f9ed531e8d41eb802983744dee6f9a543308278efec1b7cbab638caf0e5": {
|
|
2273
|
+
"title": "Loading State",
|
|
2274
|
+
"code": "<ProForm {...args} initialValues={{ name: 'Loading...' }}>\n <ProFormText name=\"name\" label=\"Name\" />\n <ProFormText name=\"email\" label=\"Email\" />\n </ProForm>",
|
|
2275
|
+
"source": "stories",
|
|
2276
|
+
"compilable": false
|
|
2277
|
+
},
|
|
2278
|
+
"de44f389edfa47e77cf32f1bd6ece4161001640b190878192b1685205bc79377": {
|
|
2279
|
+
"title": "Amount",
|
|
2280
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 40 }}>\n {/* ── Large ── */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>Large</h3>\n <div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n {/* Placeholder */}\n <div style={{ width: 400 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Placeholder</p>\n <Input.Amount\n label=\"You send\"\n feedback=\"$2,992.68 USDC available\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n placeholder=\"Enter amount\"\n actionLabel=\"Use Max\"\n onAction={fn()}\n currencyIcon={<img src={USDC_ICON} alt=\"USDC\" />}\n currencyLabel=\"USDC\"\n onCurrencyClick={fn()}\n />\n </div>\n {/* Filled */}\n <div style={{ width: 400 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Filled</p>\n <Input.Amount\n label=\"You send\"\n feedback=\"$2,992.68 USDC available\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n defaultValue=\"1,250.00\"\n actionLabel=\"Use Max\"\n onAction={fn()}\n currencyIcon={<img src={USDC_ICON} alt=\"USDC\" />}\n currencyLabel=\"USDC\"\n onCurrencyClick={fn()}\n />\n </div>\n {/* Disabled */}\n <div style={{ width: 400 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Disabled</p>\n <Input.Amount\n label=\"You send\"\n feedback=\"$2,992.68 USDC available\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n disabled\n actionLabel=\"Use Max\"\n currencyIcon={<img src={USDC_ICON} alt=\"USDC\" />}\n currencyLabel=\"USDC\"\n />\n </div>\n {/* Error */}\n <div style={{ width: 400 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Error</p>\n <Input.Amount\n label=\"You send\"\n status=\"error\"\n feedback=\"Insufficient balance\"\n feedbackIcon={<Icons name=\"error\" size={16} />}\n defaultValue=\"999,999.99\"\n actionLabel=\"Use Max\"\n onAction={fn()}\n currencyIcon={<img src={USDC_ICON} alt=\"USDC\" />}\n currencyLabel=\"USDC\"\n onCurrencyClick={fn()}\n />\n </div>\n </div>\n </div>\n\n {/* ── Small ── */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>Small</h3>\n <div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n <div style={{ width: 400 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Placeholder</p>\n <Input.Amount\n size=\"small\"\n label=\"You send\"\n feedback=\"$2,992.68 USDT available\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n placeholder=\"Enter amount\"\n actionLabel=\"Use Max\"\n onAction={fn()}\n currencyIcon={<img src={USDT_ICON} alt=\"USDT\" />}\n currencyLabel=\"USDT\"\n onCurrencyClick={fn()}\n />\n </div>\n <div style={{ width: 400 }}>\n <p style={{ margin: '0 0 4px', fontSize: 12, color: '#999' }}>Filled</p>\n <Input.Amount\n size=\"small\"\n label=\"You send\"\n feedback=\"$2,992.68 USDT available\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n defaultValue=\"500.00\"\n actionLabel=\"Use Max\"\n onAction={fn()}\n currencyIcon={<img src={USDT_ICON} alt=\"USDT\" />}\n currencyLabel=\"USDT\"\n onCurrencyClick={fn()}\n />\n </div>\n </div>\n </div>\n\n {/* ── With prefix currency selector ── */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>With Prefix Currency</h3>\n <div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n <div style={{ width: 400 }}>\n <Input.Amount\n label=\"You send\"\n feedback=\"65,482.55 USD1 available\"\n feedbackIcon={<Icons name=\"info\" size={16} />}\n defaultValue=\"0\"\n prefix={\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 8 }}>\n <img src={USDT_ICON} alt=\"USDT\" style={{ width: 24, height: 24, borderRadius: '50%' }} />\n <span>USDT</span>\n </span>\n }\n actionLabel=\"Use Max\"\n onAction={fn()}\n currencyIcon={<img src={USDC_ICON} alt=\"USDC\" />}\n currencyLabel=\"USDC\"\n onCurrencyClick={fn()}\n />\n </div>\n </div>\n </div>\n\n {/* ── Currency only (no action) ── */}\n <div>\n <h3 style={{ margin: '0 0 16px' }}>Currency Only (no action button)</h3>\n <div style={{ display: 'flex', gap: 24, flexWrap: 'wrap' }}>\n <div style={{ width: 400 }}>\n <Input.Amount\n label=\"Amount\"\n placeholder=\"0.00\"\n currencyIcon={<img src={USDC_ICON} alt=\"USDC\" />}\n currencyLabel=\"USDC\"\n onCurrencyClick={fn()}\n />\n </div>\n </div>\n </div>\n </div>",
|
|
2281
|
+
"source": "stories",
|
|
2282
|
+
"compilable": false
|
|
2283
|
+
},
|
|
2284
|
+
"deac1f8bf34d4c1fa4d9d7bcf9bb8f258a87481df55c9c7d02d45ec6766aef71": {
|
|
2285
|
+
"title": "Small",
|
|
2286
|
+
"code": "<DialogLauncher {...args} />",
|
|
2287
|
+
"source": "stories",
|
|
2288
|
+
"compilable": false
|
|
2289
|
+
},
|
|
2290
|
+
"deb7c1bde978d151f18de91d4197364ea35d0d3f4dd7b0ba705acbf4eaa9eade": {
|
|
2291
|
+
"title": "Canonical usage",
|
|
2292
|
+
"code": "import type { PopconfirmActionContext } from '@1money/component-ui';",
|
|
2293
|
+
"source": "canonical",
|
|
2294
|
+
"compilable": true
|
|
2295
|
+
},
|
|
2296
|
+
"df516870a4f3b627969e2e1b0c6fc40fccc4ccb0fb7c04a34e5e169a928de479": {
|
|
2297
|
+
"title": "Usage",
|
|
2298
|
+
"code": "<Cell iconStart=\"security\" iconEnd=\"arrowRight\" active>\n Authenticator app\n</Cell>",
|
|
2299
|
+
"source": "readme",
|
|
2300
|
+
"compilable": true
|
|
2301
|
+
},
|
|
2302
|
+
"e10bfd381cb38acb38120e8d2efaf6b5cde348cfa810261c23abb94f219581b9": {
|
|
2303
|
+
"title": "Primary",
|
|
2304
|
+
"code": "<Typography.Body {...args} />",
|
|
2305
|
+
"source": "stories",
|
|
2306
|
+
"compilable": false
|
|
2307
|
+
},
|
|
2308
|
+
"e1a8744a63bb83a89bcb9eda48e6f3874777ee0c7821e132cc555d0bf0998f0b": {
|
|
2309
|
+
"title": "Import",
|
|
2310
|
+
"code": "import { Navigation } from '@1money/components-ui';\n// or\nimport { Navigation } from '@1money/components-ui/Navigation';",
|
|
2311
|
+
"source": "readme",
|
|
2312
|
+
"compilable": true
|
|
2313
|
+
},
|
|
2314
|
+
"e2d97535c3a577c0c337fa59b2a6832e6337e4a07486d72339fb65ecb4899382": {
|
|
2315
|
+
"title": "Import",
|
|
2316
|
+
"code": "import { Checkbox } from '@1money/components-ui';\n// or\nimport { Checkbox } from '@1money/components-ui/Checkbox';",
|
|
2317
|
+
"source": "readme",
|
|
2318
|
+
"compilable": true
|
|
2319
|
+
},
|
|
2320
|
+
"e37aca8f7c9d9b0e9ebfac3d27da7b71899323685544aefcf84f04338a9232ce": {
|
|
2321
|
+
"title": "Canonical usage",
|
|
2322
|
+
"code": "<Progress percent={0} />",
|
|
2323
|
+
"source": "canonical",
|
|
2324
|
+
"compilable": true
|
|
2325
|
+
},
|
|
2326
|
+
"e45470810804263c8bc829534812b03b22c7885a5d86df48dfecce21f3ab3a2f": {
|
|
2327
|
+
"title": "Usage",
|
|
2328
|
+
"code": "<Link href=\"https://1money.com\" color=\"primary\" size=\"large\">\n Visit 1Money\n</Link>",
|
|
2329
|
+
"source": "readme",
|
|
2330
|
+
"compilable": true
|
|
2331
|
+
},
|
|
2332
|
+
"e590bf2afc81b30b930dada6662ca8d5f1563febfe83f4e804b82bdeaa55d9e3": {
|
|
2333
|
+
"title": "Value Enum",
|
|
2334
|
+
"code": "<ProForm\n {...args}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormSelect\n name=\"status\"\n label=\"Status\"\n valueEnum={{ active: 'Active', inactive: 'Inactive', pending: { text: 'Pending', disabled: true } }}\n />\n <ProFormRadioGroup\n name=\"role\"\n label=\"Role\"\n valueEnum={{ admin: 'Admin', editor: 'Editor', viewer: 'Viewer' }}\n />\n </ProForm>",
|
|
2335
|
+
"source": "stories",
|
|
2336
|
+
"compilable": false
|
|
2337
|
+
},
|
|
2338
|
+
"e5c65a663400bac3c3f390e36b09d4a78425de95dde7cad603a185c1cc30f68c": {
|
|
2339
|
+
"title": "Import",
|
|
2340
|
+
"code": "import { Grid, Row, Col } from '@1money/components-ui';\n// or\nimport { Grid, Row, Col } from '@1money/components-ui/Grid';\nimport { GRID_ALIGN, GRID_JUSTIFY } from '@1money/components-ui/Grid';",
|
|
2341
|
+
"source": "readme",
|
|
2342
|
+
"compilable": true
|
|
2343
|
+
},
|
|
2344
|
+
"e64bbef33f26f6cb756b2904ed6134a86633064c76641e65a06e65ed9fafa302": {
|
|
2345
|
+
"title": "All Placements",
|
|
2346
|
+
"code": "<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 80, padding: 60 }}>\n {PLACEMENTS.map((p: CoachMarkPlacement) => (\n <div key={p} style={{ display: 'flex', justifyContent: 'center' }}>\n <CoachMark\n steps={[\n { icon: <span style={{ fontSize: 24 }}>👋</span>, heading: 'Welcome', body: 'Get started with the dashboard.' },\n { icon: <span style={{ fontSize: 24 }}>🔍</span>, heading: 'Search', body: 'Find anything quickly.' },\n { icon: <span style={{ fontSize: 24 }}>💳</span>, heading: 'Balance', body: 'Track all accounts.' },\n ]}\n placement={p}\n />\n </div>\n ))}\n </div>",
|
|
2347
|
+
"source": "stories",
|
|
2348
|
+
"compilable": true
|
|
2349
|
+
},
|
|
2350
|
+
"e6697016dfdd32f6f999330e42ac897a235b3aca69ce17e3d84e78ced6d9ef67": {
|
|
2351
|
+
"title": "Grouped Items",
|
|
2352
|
+
"code": "{\n const groups = useMemo(() => {\n const map = new Map<string, CurrencyItem[]>();\n CURRENCIES.forEach((c) => {\n const list = map.get(c.group) ?? [];\n list.push(c);\n map.set(c.group, list);\n });\n return map;\n }, []);\n\n return (\n <Dropdown\n {...args}\n overlayStyle={{ minWidth: 380 }}\n content={\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n {Array.from(groups.entries()).map(([group, items]) => (\n <div key={group} style={{ display: 'flex', flexDirection: 'column' }}>\n <div style={groupHeaderStyle}>{group}</div>\n {items.map((item) => (\n <DropdownItem\n key={item.code}\n left={<CurrencyIcon flag={item.flag} />}\n title={item.code}\n subtitle={item.name}\n right={\n <p style={itemAmountStyle}>\n {item.amount}\n {item.amountUsd && (\n <>\n <br />\n {item.amountUsd}\n </>\n )}\n </p>\n }\n />\n ))}\n </div>\n ))}\n </div>\n }\n >\n <Button>Currency List</Button>\n </Dropdown>\n );\n }",
|
|
2353
|
+
"source": "stories",
|
|
2354
|
+
"compilable": false
|
|
2355
|
+
},
|
|
2356
|
+
"e80f4581561ee3095a2839fea6b7193b3e3a682901390a7f6147c36c9a75cc0d": {
|
|
2357
|
+
"title": "Asset Multi Select Actions",
|
|
2358
|
+
"code": "{\n const [open, setOpen] = useState(false);\n const [value, setValue] = useState<Array<string | number>>(['btc']);\n const [draftValue, setDraftValue] = useState<Array<string | number>>(['btc']);\n\n return (\n <div style={storyContainerStyle}>\n <Select\n {...args}\n multiple\n open={open}\n value={open ? draftValue : value}\n renderOption={renderAssetOption}\n panelFooter={(\n <div style={assetFooterActionsStyle}>\n <Button\n color=\"grey\"\n size=\"small\"\n style={{ flex: 1 }}\n onClick={() => {\n setDraftValue([]);\n }}\n >\n Reset\n </Button>\n <Button\n size=\"small\"\n style={{ flex: 1 }}\n onClick={() => {\n setValue(draftValue);\n setOpen(false);\n args.onOpenChange?.(false);\n }}\n >\n Apply\n </Button>\n </div>\n )}\n onOpenChange={(nextOpen) => {\n setOpen(nextOpen);\n setDraftValue(value);\n args.onOpenChange?.(nextOpen);\n }}\n onChange={(nextValue, option) => {\n setDraftValue((nextValue as Array<string | number>) ?? []);\n args.onChange?.(nextValue, option);\n }}\n />\n </div>\n );\n }",
|
|
2359
|
+
"source": "stories",
|
|
2360
|
+
"compilable": false
|
|
2361
|
+
},
|
|
2362
|
+
"e8366ffc0f016219e2e3c8525fc51ad1e6b761782aa7021fb8a40588988b1bb9": {
|
|
2363
|
+
"title": "Canonical usage",
|
|
2364
|
+
"code": "import { Radio, RadioGroup } from '@1money/components-ui';\n// or tree-shakeable\nimport { Radio, RadioGroup } from '@1money/components-ui/Radio';",
|
|
2365
|
+
"source": "canonical",
|
|
2366
|
+
"compilable": true
|
|
2367
|
+
},
|
|
2368
|
+
"e9f60d4e278ffd41098f4db04f41855ffd8a9cb7a16f51dc8f8e99f4295effaa": {
|
|
2369
|
+
"title": "Disabled",
|
|
2370
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <Switch {...args} label=\"Unchecked disabled\" disabled />\n <Switch {...args} label=\"Checked disabled\" disabled defaultChecked />\n </div>",
|
|
2371
|
+
"source": "stories",
|
|
2372
|
+
"compilable": false
|
|
2373
|
+
},
|
|
2374
|
+
"ead69923c50561a8b08e90c7dc7f2b6f0d3e3b1d3aa61f06af6f26303aeacc90": {
|
|
2375
|
+
"title": "Canonical usage",
|
|
2376
|
+
"code": "import type { ProFormProps } from '@1money/component-ui';",
|
|
2377
|
+
"source": "canonical",
|
|
2378
|
+
"compilable": true
|
|
2379
|
+
},
|
|
2380
|
+
"eb427461f9033ecdecd7f9fbecd2c65d93d6a9f081ee8af32cd9665d94095ec9": {
|
|
2381
|
+
"title": "Semantic Scale",
|
|
2382
|
+
"code": "<div style={STORY_LAYOUT_STYLE}>\n <div style={STORY_SECTION_STYLE}>\n {TYPOGRAPHY_DISPLAY_SIZES.map(size => (\n <Typography.Display key={size} size={size}>\n Display {size}\n </Typography.Display>\n ))}\n </div>\n\n <div style={STORY_SECTION_STYLE}>\n {TYPOGRAPHY_HEADLINE_SIZES.map(size => (\n <Typography.Headline key={size} size={size}>\n Headline {size}\n </Typography.Headline>\n ))}\n </div>\n\n <div style={STORY_SECTION_STYLE}>\n {TYPOGRAPHY_TITLE_SIZES.map(size => (\n <Typography.Title key={size} size={size}>\n Title {size}\n </Typography.Title>\n ))}\n </div>\n\n <div style={STORY_SECTION_STYLE}>\n {TYPOGRAPHY_BODY_SIZES.map(size => (\n <Typography.Body key={size} size={size}>\n Body {size} brings readable, content-first copy into forms, lists, and dense product surfaces.\n </Typography.Body>\n ))}\n </div>\n\n <div style={STORY_SECTION_STYLE}>\n {TYPOGRAPHY_LABEL_SIZES.map(size => (\n <Typography.Label key={size} size={size}>\n Label {size}\n </Typography.Label>\n ))}\n </div>\n\n <div style={STORY_SECTION_STYLE}>\n {TYPOGRAPHY_LINK_SIZES.map(size => (\n <Typography.Link key={size} size={size} href=\"https://ant.design/components/typography/\" target=\"_blank\">\n Link {size}\n </Typography.Link>\n ))}\n </div>\n </div>",
|
|
2383
|
+
"source": "stories",
|
|
2384
|
+
"compilable": true
|
|
2385
|
+
},
|
|
2386
|
+
"ec48d516a07ba5085b42c5936ddd4094b99978b593ccd77f2840587b3c15fe54": {
|
|
2387
|
+
"title": "Canonical usage",
|
|
2388
|
+
"code": "import type { PaginationPageItem } from '@1money/component-ui';",
|
|
2389
|
+
"source": "canonical",
|
|
2390
|
+
"compilable": true
|
|
2391
|
+
},
|
|
2392
|
+
"ede4a5629c02420f621373a9169c9671b906cc09439931df34b222da85911147": {
|
|
2393
|
+
"title": "With Action",
|
|
2394
|
+
"code": "<Alert\n {...args}\n status=\"info\"\n title=\"Payment instruction ready\"\n body=\"Share the deposit instruction with your treasury team or copy it directly.\"\n link={{ label: 'Preview instruction', onClick: fn() }}\n action={<Button onClick={fn()}>Copy details</Button>}\n closable={false}\n />",
|
|
2395
|
+
"source": "stories",
|
|
2396
|
+
"compilable": false
|
|
2397
|
+
},
|
|
2398
|
+
"eded2f3304b55730029801800edc5a3c7449e2643b4b52dbc06d117d3fa78b9c": {
|
|
2399
|
+
"title": "Canonical usage",
|
|
2400
|
+
"code": "import type { DropdownTrigger } from '@1money/component-ui';",
|
|
2401
|
+
"source": "canonical",
|
|
2402
|
+
"compilable": true
|
|
2403
|
+
},
|
|
2404
|
+
"ee2bdbb626c56a393f970bf1d78c39af26d41db0d878c1454242d504dadfb8c5": {
|
|
2405
|
+
"title": "Usage",
|
|
2406
|
+
"code": "// Basic spinner\n<Spinner />\n\n// Custom size\n<Spinner style={{ width: '20px', height: '20px' }} />\n\n// Custom animation duration\n<Spinner animationDuration=\"1s\" />\n\n// Custom stroke width\n<Spinner strokeWidth=\"3\" />\n\n// Custom fill\n<Spinner style={{ width: '60px', height: '60px' }} fill=\"#E8F5E8\" />",
|
|
2407
|
+
"source": "readme",
|
|
2408
|
+
"compilable": true
|
|
2409
|
+
},
|
|
2410
|
+
"ee930a68e587cff54897859095b7846cd2ee864a89a0d0e9fd833dbd1db85b82": {
|
|
2411
|
+
"title": "All Variants",
|
|
2412
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n <div>\n <h3 style={{ marginBottom: 12 }}>Label Left (Default)</h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <Switch {...args} label=\"Label\" description=\"Description\" />\n <Switch {...args} label=\"Label\" description=\"Description\" defaultChecked />\n <Switch {...args} label=\"Label\" description=\"Description\" disabled />\n <Switch {...args} label=\"Label\" description=\"Description\" disabled defaultChecked />\n </div>\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>Label Right</h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n <Switch {...args} label=\"Label\" description=\"Description\" labelPlacement=\"right\" />\n <Switch {...args} label=\"Label\" description=\"Description\" labelPlacement=\"right\" defaultChecked />\n <Switch {...args} label=\"Label\" description=\"Description\" labelPlacement=\"right\" disabled />\n <Switch {...args} label=\"Label\" description=\"Description\" labelPlacement=\"right\" disabled defaultChecked />\n </div>\n </div>\n </div>",
|
|
2413
|
+
"source": "stories",
|
|
2414
|
+
"compilable": false
|
|
2415
|
+
},
|
|
2416
|
+
"eebcc41c1f2c8421eb9925d8e4befdff5d0d9a0ac7ce205ace525ed07ee9f647": {
|
|
2417
|
+
"title": "Canonical usage",
|
|
2418
|
+
"code": "import type { PaginationProps } from '@1money/component-ui';",
|
|
2419
|
+
"source": "canonical",
|
|
2420
|
+
"compilable": true
|
|
2421
|
+
},
|
|
2422
|
+
"ef4db8ac914fd8f1b7ba6beb4ffdee91eb4c6541f40cad46d0d74c3e00a5d0e1": {
|
|
2423
|
+
"title": "Canonical usage",
|
|
2424
|
+
"code": "import type { SelectOption } from '@1money/component-ui';",
|
|
2425
|
+
"source": "canonical",
|
|
2426
|
+
"compilable": true
|
|
2427
|
+
},
|
|
2428
|
+
"ef6129271a1cc811da6f293b9cb03f5514e410a9c60c0abec3e045e6376745b1": {
|
|
2429
|
+
"title": "Canonical usage",
|
|
2430
|
+
"code": "import { Empty } from '@1money/components-ui';\n// or\nimport { Empty } from '@1money/components-ui/Empty';",
|
|
2431
|
+
"source": "canonical",
|
|
2432
|
+
"compilable": true
|
|
2433
|
+
},
|
|
2434
|
+
"efb94a978c87bf9343e9605b358b08efa2db1f476e21029ee2bda3da4f275448": {
|
|
2435
|
+
"title": "Api Examples",
|
|
2436
|
+
"code": "<div style={DEMO_SECTION_STYLE}>\n <Flex\n gap={GAP_MIDDLE}\n align={FLEX_ALIGN.center}\n justify={FLEX_JUSTIFY.spaceBetween}\n wrap={WRAP_DISABLED}\n prefixCls={FLEX_PREFIX}\n >\n <div style={DEMO_BOX_STYLE}>Align</div>\n <div style={DEMO_BOX_STYLE}>Justify</div>\n </Flex>\n\n <Flex vertical gap={GAP_LARGE} wrap={WRAP_ENABLED} prefixCls={FLEX_PREFIX}>\n <div style={DEMO_BOX_STYLE}>Vertical</div>\n <div style={DEMO_BOX_STYLE}>Wrap</div>\n </Flex>\n </div>",
|
|
2437
|
+
"source": "stories",
|
|
2438
|
+
"compilable": true
|
|
2439
|
+
},
|
|
2440
|
+
"effa85b9bec5c09b1096a3dc9f627ae7c6e52a1192e3f25d6c8ccec1fb06ad0f": {
|
|
2441
|
+
"title": "Custom Icon",
|
|
2442
|
+
"code": "<Popconfirm {...args}>\n <Button color={BUTTON_COLOR.warning}>{POPCONFIRM_DEMO_COPY.archive.triggerText}</Button>\n </Popconfirm>",
|
|
2443
|
+
"source": "stories",
|
|
2444
|
+
"compilable": false
|
|
2445
|
+
},
|
|
2446
|
+
"f00e8c206a0704e37e6ae2cd3256fd59d70a1fb49e526ae606d6d9c83b6d2966": {
|
|
2447
|
+
"title": "List Required",
|
|
2448
|
+
"code": "<ProForm\n {...args}\n initialValues={{ members: [] }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormList\n name=\"members\"\n label=\"Team Members\"\n required\n requiredMessage=\"Add at least one member\"\n >\n {(fields) =>\n fields.map(({ name, key }) => (\n <ProFormText key={key} name={`${name}.name`} label=\"Name\" />\n ))\n }\n </ProFormList>\n </ProForm>",
|
|
2449
|
+
"source": "stories",
|
|
2450
|
+
"compilable": false
|
|
2451
|
+
},
|
|
2452
|
+
"f02ed49d7825c626c3191734244f3e88dfbf48e8a2720ddd268229fe063b846a": {
|
|
2453
|
+
"title": "Canonical usage",
|
|
2454
|
+
"code": "import type { StepTagConfig } from '@1money/component-ui';",
|
|
2455
|
+
"source": "canonical",
|
|
2456
|
+
"compilable": true
|
|
2457
|
+
},
|
|
2458
|
+
"f065597d223dc1f13a2322f8264117765b4ffe077f96a1224d73320e187354ec": {
|
|
2459
|
+
"title": "Canonical usage",
|
|
2460
|
+
"code": "import type { SubmitterProps } from '@1money/component-ui';",
|
|
2461
|
+
"source": "canonical",
|
|
2462
|
+
"compilable": true
|
|
2463
|
+
},
|
|
2464
|
+
"f1fd9c22aed7f64f20f92113407cac7aeb1750a0623e511784dda6813e00b67e": {
|
|
2465
|
+
"title": "Canonical usage",
|
|
2466
|
+
"code": "Trigger();",
|
|
2467
|
+
"source": "canonical",
|
|
2468
|
+
"compilable": true
|
|
2469
|
+
},
|
|
2470
|
+
"f2c3b9fe0a35d0f3e87ed98754d67b66bdf140128496a16d3ebc5ba4819068cc": {
|
|
2471
|
+
"title": "All Variants",
|
|
2472
|
+
"code": "<div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n <div>\n <h3 style={{ marginBottom: 12 }}>Default</h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <Radio label=\"Unchecked\" />\n <Radio label=\"Checked\" checked />\n <Radio label=\"Disabled unchecked\" disabled />\n <Radio label=\"Disabled checked\" checked disabled />\n </div>\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>With Description</h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <Radio label=\"Unchecked\" description=\"Helper text\" />\n <Radio label=\"Checked\" description=\"Helper text\" checked />\n <Radio\n label=\"Disabled unchecked\"\n description=\"Helper text\"\n disabled\n />\n <Radio\n label=\"Disabled checked\"\n description=\"Helper text\"\n checked\n disabled\n />\n </div>\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>Label Placement: Right</h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <Radio label=\"Unchecked\" labelPlacement=\"right\" />\n <Radio label=\"Checked\" labelPlacement=\"right\" checked />\n <Radio\n label=\"With description\"\n description=\"Helper text\"\n labelPlacement=\"right\"\n />\n </div>\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>Cell</h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <Radio\n checked\n variant=\"cell\"\n size=\"large\"\n alignment=\"left\"\n icon=\"swift\"\n label=\"Wire transfer\"\n description=\"Receive via SWIFT\"\n style={{ width: 320 }}\n />\n <Radio\n variant=\"cell\"\n size=\"medium\"\n alignment=\"left\"\n icon=\"usd\"\n label=\"USD1\"\n style={{ width: 180 }}\n />\n <Radio\n checked\n variant=\"cell\"\n size=\"large\"\n alignment=\"center\"\n icon=\"language\"\n tag=\"Popular\"\n label=\"Global account\"\n description=\"Use for international settlement\"\n style={{ width: 220 }}\n />\n </div>\n </div>\n </div>",
|
|
2473
|
+
"source": "stories",
|
|
2474
|
+
"compilable": true
|
|
2475
|
+
},
|
|
2476
|
+
"f3a91dcc57956f6ad5d0a390fd1f02519474f3ddfd4691ac865e8f7001fa9ef5": {
|
|
2477
|
+
"title": "H5 Width Spec",
|
|
2478
|
+
"code": "<TooltipPreviewCard\n label=\"Maximum width 300px on H5\"\n title=\"Long title\"\n body={LONG_BODY}\n />",
|
|
2479
|
+
"source": "stories",
|
|
2480
|
+
"compilable": true
|
|
2481
|
+
},
|
|
2482
|
+
"f3e3e35db28e26c2e5f1870c2e23d646f593f798d99eda835808ea9652ed85d7": {
|
|
2483
|
+
"title": "Canonical usage",
|
|
2484
|
+
"code": "import type { TourProps } from '@1money/component-ui';",
|
|
2485
|
+
"source": "canonical",
|
|
2486
|
+
"compilable": true
|
|
2487
|
+
},
|
|
2488
|
+
"f4820b22bbba91a3284238e73606be5b7825b28d6c345dcc4dde9b0681f61efd": {
|
|
2489
|
+
"title": "Group Cell Directions",
|
|
2490
|
+
"code": "{\n const [verticalValue, setVerticalValue] = React.useState<string | number>('swift');\n const [horizontalValue, setHorizontalValue] = React.useState<string | number>('swift');\n\n const options = [\n {\n value: 'swift',\n label: 'SWIFT',\n description: 'Receive via bank rails',\n icon: 'swift',\n },\n {\n value: 'global',\n label: 'Global account',\n description: 'International settlement',\n icon: 'language',\n },\n ];\n\n const handleVerticalChange = (event: RadioChangeEvent) => {\n if (event.target.value !== undefined) {\n setVerticalValue(event.target.value);\n }\n };\n\n const handleHorizontalChange = (event: RadioChangeEvent) => {\n if (event.target.value !== undefined) {\n setHorizontalValue(event.target.value);\n }\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>\n <div style={{ width: 320 }}>\n <h3 style={{ marginBottom: 12 }}>Cell Direction Vertical</h3>\n <RadioGroup\n value={verticalValue}\n variant=\"cell\"\n size=\"large\"\n alignment=\"left\"\n direction=\"vertical\"\n onChange={handleVerticalChange}\n options={options}\n />\n </div>\n <div>\n <h3 style={{ marginBottom: 12 }}>Cell Direction Horizontal</h3>\n <RadioGroup\n value={horizontalValue}\n variant=\"cell\"\n size=\"large\"\n alignment=\"left\"\n direction=\"horizontal\"\n onChange={handleHorizontalChange}\n options={options}\n />\n </div>\n </div>\n );\n }",
|
|
2491
|
+
"source": "stories",
|
|
2492
|
+
"compilable": true
|
|
2493
|
+
},
|
|
2494
|
+
"f49c87dfe21fbf4df7cf48ca08171e7695c029a2bb70a176aec70a90274cb24c": {
|
|
2495
|
+
"title": "Basic",
|
|
2496
|
+
"code": "{\n const [size, setSize] = useState<SizeInfo | null>(null);\n\n return (\n <div>\n <p style={{ marginBottom: 8, color: '#666' }}>\n Drag the bottom-right corner to resize the box:\n </p>\n <ResizeObserver onResize={(sizeInfo) => setSize(sizeInfo)}>\n <div style={boxStyle}>\n Resize me!\n </div>\n </ResizeObserver>\n {size && (\n <div style={infoStyle}>\n <div>width: {size.width}px</div>\n <div>height: {size.height}px</div>\n <div>offsetWidth: {size.offsetWidth}px</div>\n <div>offsetHeight: {size.offsetHeight}px</div>\n </div>\n )}\n </div>\n );\n }",
|
|
2497
|
+
"source": "stories",
|
|
2498
|
+
"compilable": true
|
|
2499
|
+
},
|
|
2500
|
+
"f4d026d776aab61228b8c9e5a262948371f2441ac1be1fff0026dd1c3e0659cd": {
|
|
2501
|
+
"title": "Canonical usage",
|
|
2502
|
+
"code": "import type { PopconfirmPlacement } from '@1money/component-ui';",
|
|
2503
|
+
"source": "canonical",
|
|
2504
|
+
"compilable": true
|
|
2505
|
+
},
|
|
2506
|
+
"f4f6718e815517b85df1ffee8b8b6101efc4f409150c16d25dc6d84726c971be": {
|
|
2507
|
+
"title": "Readonly Mode",
|
|
2508
|
+
"code": "<ProForm\n {...args}\n initialValues={{\n name: 'John Doe',\n email: 'john@example.com',\n bio: 'Software engineer with 10 years of experience.',\n newsletter: true,\n active: true,\n }}\n >\n <ProFormText name=\"name\" label=\"Name\" />\n <ProFormText name=\"email\" label=\"Email\" />\n <ProFormTextArea name=\"bio\" label=\"Bio\" />\n <ProFormCheckbox name=\"newsletter\" label=\"Newsletter\" />\n <ProFormSwitch name=\"active\" label=\"Active\" />\n </ProForm>",
|
|
2509
|
+
"source": "stories",
|
|
2510
|
+
"compilable": false
|
|
2511
|
+
},
|
|
2512
|
+
"f54ff3b0b6680cdec37c94acb43bf7f58648670a16b6c7be3cd82ca792d177fd": {
|
|
2513
|
+
"title": "Canonical usage",
|
|
2514
|
+
"code": "import type { DropdownContent } from '@1money/component-ui';",
|
|
2515
|
+
"source": "canonical",
|
|
2516
|
+
"compilable": true
|
|
2517
|
+
},
|
|
2518
|
+
"f573e24b6bb2a0cf68e3dba916cbc777330e61e503cca982f2c5c5633a8d0b7a": {
|
|
2519
|
+
"title": "Usage",
|
|
2520
|
+
"code": "// Rectangle (default)\n<Skeleton />\n<Skeleton width=\"10rem\" />\n<Skeleton width=\"10rem\" height=\"4rem\" />\n\n// Rounded\n<Skeleton borderRadius=\"16px\" />\n\n// Square\n<Skeleton size=\"3rem\" />\n\n// Circle\n<Skeleton shape=\"circle\" size=\"4rem\" />\n\n// No animation\n<Skeleton animation=\"none\" />",
|
|
2521
|
+
"source": "readme",
|
|
2522
|
+
"compilable": true
|
|
2523
|
+
},
|
|
2524
|
+
"f5d6b11a550669747fb5a248be92fdbc1d02dc42ab2c8700fe44d9e09c3989ae": {
|
|
2525
|
+
"title": "Import",
|
|
2526
|
+
"code": "import { Divider } from '@1money/components-ui';",
|
|
2527
|
+
"source": "readme",
|
|
2528
|
+
"compilable": true
|
|
2529
|
+
},
|
|
2530
|
+
"f5e88271260df2b0e8df1a0b03d96a4c3004f14d0e5aaec8892007d6c41fddb4": {
|
|
2531
|
+
"title": "With Disabled",
|
|
2532
|
+
"code": "<Tabs\n items={[\n { key: 'tab1', label: 'Overview' },\n { key: 'tab2', label: 'Transactions' },\n { key: 'tab3', label: 'Analytics', disabled: true },\n { key: 'tab4', label: 'Settings' },\n ]}\n />",
|
|
2533
|
+
"source": "stories",
|
|
2534
|
+
"compilable": true
|
|
2535
|
+
},
|
|
2536
|
+
"f65811de7e147a092ae6e528449abcbde02b46201711bbf2cbf88493d3723538": {
|
|
2537
|
+
"title": "Vertical",
|
|
2538
|
+
"code": "<Flex vertical gap={GAP_SMALL}>\n <div style={DEMO_BOX_STYLE}>Top</div>\n <div style={DEMO_BOX_STYLE}>Bottom</div>\n </Flex>",
|
|
2539
|
+
"source": "stories",
|
|
2540
|
+
"compilable": true
|
|
2541
|
+
},
|
|
2542
|
+
"f6add1649c4e02d141bd89c9cedf782cf9bf66c617de71226b13802729c7a205": {
|
|
2543
|
+
"title": "Usage",
|
|
2544
|
+
"code": "<Upload\n mode=\"basic\"\n chooseOptions={{ label: 'Upload file', icon: () => <></> }}\n onUpload={(e) => console.log(e.files)}\n/>",
|
|
2545
|
+
"source": "readme",
|
|
2546
|
+
"compilable": true
|
|
2547
|
+
},
|
|
2548
|
+
"f7b16782ec97c865cee1e4efd85132f308a13cf49fb00e7e75113b8db2f00476": {
|
|
2549
|
+
"title": "Mode Edit",
|
|
2550
|
+
"code": "<ProForm\n {...args}\n mode=\"edit\"\n initialValues={{ name: '', email: '' }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormText name=\"name\" label=\"Name\" rules={[{ required: true }]} />\n <ProFormText name=\"email\" label=\"Email\" />\n </ProForm>",
|
|
2551
|
+
"source": "stories",
|
|
2552
|
+
"compilable": false
|
|
2553
|
+
},
|
|
2554
|
+
"f7d75c4c5f4f678aa093b1506c43f3b64f084e77935a1995764eafb16f65acb3": {
|
|
2555
|
+
"title": "Canonical usage",
|
|
2556
|
+
"code": "import type { UsePaginationResult } from '@1money/component-ui';",
|
|
2557
|
+
"source": "canonical",
|
|
2558
|
+
"compilable": true
|
|
2559
|
+
},
|
|
2560
|
+
"f7f96c74f982e37eb075e6bd5affd0bbcf3d63faca5bb60a1175fe7725dad87b": {
|
|
2561
|
+
"title": "Multiple Files",
|
|
2562
|
+
"code": "<Upload\n label=\"Label\"\n description=\"Description\"\n feedback=\"Feedback\"\n >\n <UploadFileBar fileName=\"File name.PDF\" onRemove={fn()} />\n <UploadFileBar fileName=\"File name.PDF\" onRemove={fn()} />\n <UploadFileBar\n fileName=\"File name.PDF\"\n status={1}\n message=\"Upload failed\"\n onRemove={fn()}\n />\n </Upload>",
|
|
2563
|
+
"source": "stories",
|
|
2564
|
+
"compilable": false
|
|
2565
|
+
},
|
|
2566
|
+
"f83a21f43532c533551423571b437ae45b5e8e0ff76b9b783f68587c6b9a7e8d": {
|
|
2567
|
+
"title": "Canonical usage",
|
|
2568
|
+
"code": "import type { ProFormFieldProps } from '@1money/component-ui';",
|
|
2569
|
+
"source": "canonical",
|
|
2570
|
+
"compilable": true
|
|
2571
|
+
},
|
|
2572
|
+
"fa1715f659ca9bd453db3ccb6d40b47193e9dc838467b79a6a453d0b8b5aaed5": {
|
|
2573
|
+
"title": "Canonical usage",
|
|
2574
|
+
"code": "import type { ProFormValueEnumObj } from '@1money/component-ui';",
|
|
2575
|
+
"source": "canonical",
|
|
2576
|
+
"compilable": true
|
|
2577
|
+
},
|
|
2578
|
+
"fbd87569f46a26241c78761898d378521f9b220ad8c158ad1b3f619a9043f07d": {
|
|
2579
|
+
"title": "Primary",
|
|
2580
|
+
"code": "<Space {...args}>\n <div style={DEMO_BOX_STYLE}>One</div>\n <div style={DEMO_BOX_STYLE}>Two</div>\n <div style={DEMO_BOX_STYLE}>Three</div>\n </Space>",
|
|
2581
|
+
"source": "stories",
|
|
2582
|
+
"compilable": false
|
|
2583
|
+
},
|
|
2584
|
+
"fc7f011734a4a3a103721b68af73859114acc940da01099883443728203b2cad": {
|
|
2585
|
+
"title": "Canonical usage",
|
|
2586
|
+
"code": "import type { SelectMultipleValue } from '@1money/component-ui';",
|
|
2587
|
+
"source": "canonical",
|
|
2588
|
+
"compilable": true
|
|
2589
|
+
},
|
|
2590
|
+
"fca476fdc8a8454562178330e2ef42b7cb756bb782574109179b48b0b5f2dfcb": {
|
|
2591
|
+
"title": "Plain",
|
|
2592
|
+
"code": "<div>\n <p>Lorem ipsum dolor sit amet.</p>\n <Divider plain>Text</Divider>\n <p>Lorem ipsum dolor sit amet.</p>\n </div>",
|
|
2593
|
+
"source": "stories",
|
|
2594
|
+
"compilable": true
|
|
2595
|
+
},
|
|
2596
|
+
"fcf58f34ec54a1feebe1b6bcd494ced5bc067fe18fe4faea458801a538a151fb": {
|
|
2597
|
+
"title": "Grid Responsive",
|
|
2598
|
+
"code": "<ProForm\n {...args}\n grid\n rowProps={{ gutter: 16 }}\n initialValues={{}}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormText\n name=\"firstName\"\n label=\"First Name\"\n colProps={{ span: 12, sm: 12, md: 8, lg: 6 }}\n />\n <ProFormText\n name=\"lastName\"\n label=\"Last Name\"\n colProps={{ span: 12, sm: 12, md: 8, lg: 6 }}\n />\n <ProFormText\n name=\"email\"\n label=\"Email\"\n colProps={{ span: 24, sm: 24, md: 8, lg: 6 }}\n />\n <ProFormText\n name=\"phone\"\n label=\"Phone\"\n colProps={{ span: 24, sm: 12, md: 12, lg: 6 }}\n />\n <ProFormTextArea\n name=\"address\"\n label=\"Address\"\n colProps={{ span: 24 }}\n />\n </ProForm>",
|
|
2599
|
+
"source": "stories",
|
|
2600
|
+
"compilable": false
|
|
2601
|
+
},
|
|
2602
|
+
"fd2a2c6d3a51c13f2b7674054f0afc8f88905362641c5a16d2c84fcaffff1d7a": {
|
|
2603
|
+
"title": "Group Horizontal",
|
|
2604
|
+
"code": "{\n const [value, setValue] = React.useState<string | number>('sm');\n const handleChange = (event: RadioChangeEvent) => {\n if (event.target.value !== undefined) {\n setValue(event.target.value);\n }\n };\n\n return (\n <RadioGroup value={value} onChange={handleChange} direction=\"horizontal\">\n <Radio value=\"sm\" label=\"Small\" />\n <Radio value=\"md\" label=\"Medium\" />\n <Radio value=\"lg\" label=\"Large\" />\n </RadioGroup>\n );\n }",
|
|
2605
|
+
"source": "stories",
|
|
2606
|
+
"compilable": true
|
|
2607
|
+
},
|
|
2608
|
+
"fd353a0cfce510dee427ac20924a2b4af00ee7928140326c422816b303a11ad9": {
|
|
2609
|
+
"title": "Canonical usage",
|
|
2610
|
+
"code": "import type { SelectRenderValueMeta } from '@1money/component-ui';",
|
|
2611
|
+
"source": "canonical",
|
|
2612
|
+
"compilable": true
|
|
2613
|
+
},
|
|
2614
|
+
"fdf213199dc6788118e3f64a9156e33557e5611b1ca721d8b7c388245959d211": {
|
|
2615
|
+
"title": "Import",
|
|
2616
|
+
"code": "import { Button } from '@1money/components-ui';\n// or\nimport { Button } from '@1money/components-ui/Button';",
|
|
2617
|
+
"source": "readme",
|
|
2618
|
+
"compilable": true
|
|
2619
|
+
},
|
|
2620
|
+
"fe70357422313c2126f48b89c098c85159c4543c5ef3739330d48f86d8d0a509": {
|
|
2621
|
+
"title": "Canonical usage",
|
|
2622
|
+
"code": "import { Accordion } from '@1money/components-ui';\n// or\nimport { Accordion } from '@1money/components-ui/Accordion';",
|
|
2623
|
+
"source": "canonical",
|
|
2624
|
+
"compilable": true
|
|
2625
|
+
},
|
|
2626
|
+
"fe831014a074368cace22558725ed6a61ffdfa556cec55c5284d20d0357f8e2e": {
|
|
2627
|
+
"title": "Canonical usage",
|
|
2628
|
+
"code": "import type { ProgressPlacement } from '@1money/component-ui';",
|
|
2629
|
+
"source": "canonical",
|
|
2630
|
+
"compilable": true
|
|
2631
|
+
},
|
|
2632
|
+
"fe9b007dfbadb99c5e9b23715cac072ae441727d20418766456554881470ea68": {
|
|
2633
|
+
"title": "Canonical usage",
|
|
2634
|
+
"code": "import { Calendar } from '@1money/components-ui';\n// or\nimport { Calendar } from '@1money/components-ui/Calendar';",
|
|
2635
|
+
"source": "canonical",
|
|
2636
|
+
"compilable": true
|
|
2637
|
+
},
|
|
2638
|
+
"feb0c04288ce976b2a2dd118a352d0c9501645b51a4f529bf1cb1d9057ef34f1": {
|
|
2639
|
+
"title": "Radio Group Story",
|
|
2640
|
+
"code": "<ProForm\n {...args}\n initialValues={{ gender: 'male', plan: 'pro' }}\n onFinish={(values) => alert(JSON.stringify(values, null, 2))}\n >\n <ProFormRadioGroup\n name=\"gender\"\n label=\"Gender\"\n fieldProps={{\n options: [\n { label: 'Male', value: 'male' },\n { label: 'Female', value: 'female' },\n { label: 'Other', value: 'other' },\n ],\n }}\n />\n <ProFormRadioGroup\n name=\"plan\"\n label=\"Plan\"\n fieldProps={{\n direction: 'horizontal',\n options: [\n { label: 'Free', value: 'free' },\n { label: 'Pro', value: 'pro' },\n { label: 'Enterprise', value: 'enterprise' },\n ],\n }}\n />\n </ProForm>",
|
|
2641
|
+
"source": "stories",
|
|
2642
|
+
"compilable": false
|
|
2643
|
+
},
|
|
2644
|
+
"fee60afafe32035844a3102b3d30152024652c2b12eb46104b0dfb5c8026dc26": {
|
|
2645
|
+
"title": "Canonical usage",
|
|
2646
|
+
"code": "import type { ProFormDependencyProps } from '@1money/component-ui';",
|
|
2647
|
+
"source": "canonical",
|
|
2648
|
+
"compilable": true
|
|
2649
|
+
}
|
|
2650
|
+
}
|
|
2651
|
+
}
|