@1money/component-ui 0.0.46 β 0.0.48
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/components/Table/Table.d.ts +2 -2
- package/es/components/Table/Table.js +25 -148
- package/es/components/Table/VirtualTable.d.ts +2 -2
- package/es/components/Table/VirtualTable.js +30 -143
- package/es/components/Table/core/useTableColumns.d.ts +21 -7
- package/es/components/Table/core/useTableColumns.js +76 -14
- package/es/components/Table/core/useTableDataPipeline.d.ts +13 -6
- package/es/components/Table/core/useTableDataPipeline.js +193 -27
- package/es/components/Table/core/useTableExpand.d.ts +4 -2
- package/es/components/Table/core/useTableExpand.js +30 -5
- package/es/components/Table/core/useTableSelection.d.ts +3 -5
- package/es/components/Table/core/useTableSelection.js +1 -1
- package/es/components/Table/core/useTableSetup.d.ts +42 -0
- package/es/components/Table/core/useTableSetup.js +195 -0
- package/es/components/Table/features/ExpandTrigger.js +10 -2
- package/es/components/Table/features/FilterTrigger.d.ts +9 -0
- package/es/components/Table/features/FilterTrigger.js +157 -0
- package/es/components/Table/features/SelectionColumn.d.ts +3 -2
- package/es/components/Table/features/SelectionColumn.js +19 -6
- package/es/components/Table/interface.d.ts +103 -21
- package/es/components/Table/internal/kernel/FixedHolder/index.js +1 -2
- package/es/components/Table/internal/kernel/Table.d.ts +1 -1
- package/es/components/Table/internal/kernel/Table.js +2 -8
- package/es/components/Table/internal/kernel/VirtualTable/BodyGrid.js +1 -2
- package/es/components/Table/internal/kernel/VirtualTable/index.js +1 -2
- package/es/components/Table/internal/kernel/constant.d.ts +1 -1
- package/es/components/Table/internal/kernel/constant.js +1 -1
- package/es/components/Table/internal/kernel/hooks/useExpand.js +1 -2
- package/es/components/Table/internal/kernel/utils/offsetUtil.js +1 -2
- package/es/components/Table/renderers/BodyCell.d.ts +4 -4
- package/es/components/Table/renderers/BodyCell.js +1 -1
- package/es/components/Table/renderers/HeaderCell.d.ts +8 -4
- package/es/components/Table/renderers/HeaderCell.js +13 -3
- package/es/components/Table/style/Table.css +1 -1
- package/es/components/VirtualList/ScrollBar.js +1 -2
- package/es/index.css +1 -1
- package/lib/components/Table/Table.d.ts +2 -2
- package/lib/components/Table/Table.js +24 -150
- package/lib/components/Table/VirtualTable.d.ts +2 -2
- package/lib/components/Table/VirtualTable.js +28 -144
- package/lib/components/Table/core/useTableColumns.d.ts +21 -7
- package/lib/components/Table/core/useTableColumns.js +76 -14
- package/lib/components/Table/core/useTableDataPipeline.d.ts +13 -6
- package/lib/components/Table/core/useTableDataPipeline.js +192 -26
- package/lib/components/Table/core/useTableExpand.d.ts +4 -2
- package/lib/components/Table/core/useTableExpand.js +30 -5
- package/lib/components/Table/core/useTableSelection.d.ts +3 -5
- package/lib/components/Table/core/useTableSelection.js +1 -1
- package/lib/components/Table/core/useTableSetup.d.ts +42 -0
- package/lib/components/Table/core/useTableSetup.js +204 -0
- package/lib/components/Table/features/ExpandTrigger.js +10 -2
- package/lib/components/Table/features/FilterTrigger.d.ts +9 -0
- package/lib/components/Table/features/FilterTrigger.js +164 -0
- package/lib/components/Table/features/SelectionColumn.d.ts +3 -2
- package/lib/components/Table/features/SelectionColumn.js +19 -6
- package/lib/components/Table/interface.d.ts +103 -21
- package/lib/components/Table/internal/kernel/FixedHolder/index.js +1 -2
- package/lib/components/Table/internal/kernel/Table.d.ts +1 -1
- package/lib/components/Table/internal/kernel/Table.js +2 -8
- package/lib/components/Table/internal/kernel/VirtualTable/BodyGrid.js +1 -2
- package/lib/components/Table/internal/kernel/VirtualTable/index.js +1 -2
- package/lib/components/Table/internal/kernel/constant.d.ts +1 -1
- package/lib/components/Table/internal/kernel/constant.js +1 -1
- package/lib/components/Table/internal/kernel/hooks/useExpand.js +1 -2
- package/lib/components/Table/internal/kernel/utils/offsetUtil.js +1 -2
- package/lib/components/Table/renderers/BodyCell.d.ts +4 -4
- package/lib/components/Table/renderers/BodyCell.js +1 -1
- package/lib/components/Table/renderers/HeaderCell.d.ts +8 -4
- package/lib/components/Table/renderers/HeaderCell.js +13 -3
- package/lib/components/Table/style/Table.css +1 -1
- package/lib/components/VirtualList/ScrollBar.js +1 -2
- package/lib/index.css +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server/examples.generated.json +132 -0
- package/scripts/mcp-server/index.generated.json +344 -14
package/package.json
CHANGED
|
@@ -115,6 +115,12 @@
|
|
|
115
115
|
"source": "readme",
|
|
116
116
|
"compilable": true
|
|
117
117
|
},
|
|
118
|
+
"082ec26c8081a863c586ce7bb5d2c1fc35a0e901d02e7fe1a7e0d66fe526848e": {
|
|
119
|
+
"title": "Variants",
|
|
120
|
+
"code": "<div style={stackStyle}>\n <div>\n <TypographyTitle size=\"sm\" strong style={sectionTitleStyle}>\n Stroke\n </TypographyTitle>\n <Table {...(args as TableProps<Record<string, any>>)} dataSource={portfolioRows.slice(0, 4)} variant=\"stroke\" />\n </div>\n <div>\n <TypographyTitle size=\"sm\" strong style={sectionTitleStyle}>\n Fill\n </TypographyTitle>\n <Table {...(args as TableProps<Record<string, any>>)} dataSource={portfolioRows.slice(0, 4)} variant=\"fill\" />\n </div>\n </div>",
|
|
121
|
+
"source": "stories",
|
|
122
|
+
"compilable": false
|
|
123
|
+
},
|
|
118
124
|
"08616eb7b07c701d8cd3872fb1e802eac207a2cf2a3a802b28360fc7112d1ca8": {
|
|
119
125
|
"title": "Import",
|
|
120
126
|
"code": "import { Calendar } from '@1money/component-ui';\n// or\nimport { Calendar } from '@1money/component-ui/Calendar';",
|
|
@@ -139,6 +145,12 @@
|
|
|
139
145
|
"source": "readme",
|
|
140
146
|
"compilable": true
|
|
141
147
|
},
|
|
148
|
+
"0b1bd0a0c931658fda5287f712844f21f5f69c50228164f8c97deeb385ed9187": {
|
|
149
|
+
"title": "Filters",
|
|
150
|
+
"code": "<div>\n <TypographyBody size=\"sm\" color=\"default-tertiary\" style={hintStyle}>\n Click the funnel icon in a column header to filter. Multi-select is the\n default; selections apply on <em>OK</em>.\n </TypographyBody>\n <Table<PortfolioRow>\n rowKey=\"id\"\n size=\"large\"\n variant=\"stroke\"\n pagination={false}\n dataSource={portfolioRows}\n columns={[\n portfolioColumns[0],\n {\n ...portfolioColumns[1],\n filters: NETWORK_FILTER_ITEMS,\n onFilter: (value, record) => record.network === value,\n },\n {\n ...portfolioColumns[2],\n filters: STATUS_FILTER_ITEMS,\n onFilter: (value, record) => record.status === value,\n },\n portfolioColumns[3],\n portfolioColumns[4],\n ]}\n />\n </div>",
|
|
151
|
+
"source": "stories",
|
|
152
|
+
"compilable": true
|
|
153
|
+
},
|
|
142
154
|
"0c7c04366337519cd94b38f5358dfa8f9eec80c8f289ba172def5f00e1a89ba3": {
|
|
143
155
|
"title": "Date Picker Story",
|
|
144
156
|
"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>",
|
|
@@ -169,6 +181,12 @@
|
|
|
169
181
|
"source": "readme",
|
|
170
182
|
"compilable": true
|
|
171
183
|
},
|
|
184
|
+
"0e53815284d097cccdcb6cdff3952b42734dda8b58b4cdeac1948e5f1d2b3587": {
|
|
185
|
+
"title": "Expandable List",
|
|
186
|
+
"code": "<WalletRegistryStory\n dataSource={expandableListRows}\n defaultExpandedKeys={['wallet-big-tom', 'wallet-global-treasury']}\n />",
|
|
187
|
+
"source": "stories",
|
|
188
|
+
"compilable": true
|
|
189
|
+
},
|
|
172
190
|
"10c3dc4b995524ead942626d1a9e7ef96f11e52235700d42ddbf138090b3a9ad": {
|
|
173
191
|
"title": "Canonical usage",
|
|
174
192
|
"code": "import { Slider } from '@1money/component-ui';\n// or\nimport { Slider } from '@1money/component-ui/Slider';",
|
|
@@ -205,6 +223,12 @@
|
|
|
205
223
|
"source": "stories",
|
|
206
224
|
"compilable": false
|
|
207
225
|
},
|
|
226
|
+
"1622196bc98fc696224e0af42f3858aefbb46ae0237ebd7ed753d40c2e0f87d6": {
|
|
227
|
+
"title": "Single Select Filter",
|
|
228
|
+
"code": "<Table<PortfolioRow>\n rowKey=\"id\"\n pagination={false}\n dataSource={portfolioRows}\n columns={[\n portfolioColumns[0],\n {\n ...portfolioColumns[1],\n filters: NETWORK_FILTER_ITEMS,\n filterMultiple: false,\n onFilter: (value, record) => record.network === value,\n },\n portfolioColumns[2],\n portfolioColumns[3],\n ]}\n />",
|
|
229
|
+
"source": "stories",
|
|
230
|
+
"compilable": true
|
|
231
|
+
},
|
|
208
232
|
"1673418288f034d6e46db906f3b2fb8a2079625c30f15ed4c7c35c0e4568f940": {
|
|
209
233
|
"title": "Basic Usage",
|
|
210
234
|
"code": "import { Grid } from '@1money/component-ui';\nimport { GRID_ALIGN, GRID_JUSTIFY } from '@1money/component-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>",
|
|
@@ -253,6 +277,12 @@
|
|
|
253
277
|
"source": "canonical",
|
|
254
278
|
"compilable": true
|
|
255
279
|
},
|
|
280
|
+
"1c879c8d080ccdc8a79261e997d29861634e6ae8f74d950f7305a1167ddb1fb5": {
|
|
281
|
+
"title": "Figma Auto Conversion Table",
|
|
282
|
+
"code": "{\n const [expandedKeys, setExpandedKeys] = useState<React.Key[]>(['activity-row-2']);\n\n const handleToggle = (rowId: string) => {\n setExpandedKeys((currentKeys) => (\n currentKeys.includes(rowId)\n ? currentKeys.filter((key) => key !== rowId)\n : [...currentKeys, rowId]\n ));\n };\n\n return (\n <div style={figmaFrameStyle}>\n <Table<ActivityLedgerRow>\n rowKey=\"id\"\n size=\"small\"\n variant=\"stroke\"\n pagination={false}\n columns={createActivityLedgerColumns({\n expandedKeys,\n onToggle: handleToggle,\n })}\n dataSource={activityLedgerRows}\n expandable={{\n showExpandColumn: false,\n expandedRowKeys: expandedKeys,\n rowExpandable: (record) => Boolean(record.details?.length),\n expandedRowRender: (record) => (\n record.details\n ? <ActivityLedgerDetailsPanel details={record.details} />\n : null\n ),\n }}\n />\n </div>\n );\n }",
|
|
283
|
+
"source": "stories",
|
|
284
|
+
"compilable": true
|
|
285
|
+
},
|
|
256
286
|
"1cc244bf13712c43e79b378e25198234696ed488d0a147473327f0eb16c461bc": {
|
|
257
287
|
"title": "Searchable Sizes",
|
|
258
288
|
"code": "{\n const [largeValue, setLargeValue] = useState<string | number | undefined>('usdt');\n const [smallValue, setSmallValue] = useState<string | number | undefined>('usdt');\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 24, width: 320 }}>\n <Select\n {...args}\n size=\"large\"\n label=\"Large\"\n value={largeValue}\n onChange={(nextValue, option) => {\n setLargeValue(nextValue as string | number | undefined);\n args.onChange?.(nextValue, option);\n }}\n />\n <Select\n {...args}\n size=\"small\"\n label=\"Small\"\n filterInputAutoFocus={false}\n value={smallValue}\n onChange={(nextValue, option) => {\n setSmallValue(nextValue as string | number | undefined);\n args.onChange?.(nextValue, option);\n }}\n />\n </div>\n );\n }",
|
|
@@ -277,6 +307,12 @@
|
|
|
277
307
|
"source": "stories",
|
|
278
308
|
"compilable": false
|
|
279
309
|
},
|
|
310
|
+
"1df04178d3aa417559337049bac95bb324b380eefa44e8c04836ddf3595bc5b8": {
|
|
311
|
+
"title": "Expandable Column Config",
|
|
312
|
+
"code": "{\n const rows: RowExpandableDemoRow[] = [\n { id: 'r1', title: 'Order #1001', notes: 'Awaiting carrier handoff.' },\n { id: 'r2', title: 'Order #1002', notes: 'Refund issued for SKU-ABC.' },\n { id: 'r3', title: 'Order #1003', notes: 'Customer requested expedited shipping.' },\n ];\n\n const columns: TableColumn<RowExpandableDemoRow>[] = [\n { key: 'title', dataIndex: 'title', title: 'Order' },\n {\n key: 'status',\n title: 'Status',\n render: () => <Tag label=\"Open\" color=\"success\" />,\n },\n ];\n\n return (\n <div style={{ width: 720 }}>\n <TypographyBody className=\"om-mb-3\">\n Custom <code>columnTitle</code> / <code>columnWidth</code> / <code>fixed</code> on\n the expand column, plus <code>defaultExpandAllRows</code> to seed every\n row open on mount.\n </TypographyBody>\n <Table<RowExpandableDemoRow>\n rowKey=\"id\"\n size=\"small\"\n variant=\"stroke\"\n pagination={false}\n dataSource={rows}\n columns={columns}\n expandable={{\n columnTitle: 'Detail',\n columnWidth: 72,\n fixed: 'left',\n defaultExpandAllRows: true,\n expandedRowRender: (record) => (\n <div style={{ padding: '8px 16px', background: '#fafafa' }}>\n <TypographyLabel>{record.notes}</TypographyLabel>\n </div>\n ),\n }}\n />\n </div>\n );\n }",
|
|
313
|
+
"source": "stories",
|
|
314
|
+
"compilable": true
|
|
315
|
+
},
|
|
280
316
|
"1e2ce5743dcd5a069489baf67169280a5ebfc7ed959fc8cb1f7f52f846c1b544": {
|
|
281
317
|
"title": "Text Variant",
|
|
282
318
|
"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>",
|
|
@@ -469,6 +505,12 @@
|
|
|
469
505
|
"source": "stories",
|
|
470
506
|
"compilable": true
|
|
471
507
|
},
|
|
508
|
+
"2bfe01695a2d2aa890db17bef359b1c81761ad66301c5c548fe2e23750a8e5c8": {
|
|
509
|
+
"title": "Figma-aligned Expandable Example",
|
|
510
|
+
"code": "import { useState } from 'react';\n\ninterface WalletRow {\n id: string;\n walletName: string;\n walletSummary: string;\n}\n\nconst rows: WalletRow[] = [\n {\n id: 'wallet-ops',\n walletName: 'Operations wallet',\n walletSummary: '0x1234...abcd',\n },\n];\n\nfunction WalletDetails({ record }: { record: WalletRow }) {\n return <div>{record.walletSummary}</div>;\n}\n\nfunction WalletRegistryTable() {\n const [expandedRowKeys, setExpandedRowKeys] = useState<React.Key[]>(['wallet-ops']);\n\n return (\n <Table\n rowKey=\"id\"\n size=\"small\"\n variant=\"stroke\"\n pagination={false}\n columns={[\n {\n key: 'walletName',\n title: 'Wallet name',\n render: (_value, record) => (\n <button\n type=\"button\"\n onClick={() => {\n setExpandedRowKeys((current) => (\n current.includes(record.id)\n ? current.filter((key) => key !== record.id)\n : [...current, record.id]\n ));\n }}\n >\n {record.walletName}\n </button>\n ),\n },\n {\n key: 'walletSummary',\n dataIndex: 'walletSummary',\n title: 'Wallet address',\n },\n {\n key: 'actions',\n title: 'Actions',\n align: 'right',\n render: () => '...',\n },\n ]}\n dataSource={rows}\n expandable={{\n showExpandColumn: false,\n expandedRowKeys,\n expandedRowRender: (record) => <WalletDetails record={record} />,\n }}\n />\n );\n}",
|
|
511
|
+
"source": "readme",
|
|
512
|
+
"compilable": true
|
|
513
|
+
},
|
|
472
514
|
"2cca976a647db275dfb45ce8bb53bc85d304e49c3d91f76e5987d11e95b604c1": {
|
|
473
515
|
"title": "Import",
|
|
474
516
|
"code": "import { Cell } from '@1money/component-ui';\n// or\nimport { Cell } from '@1money/component-ui/Cell';",
|
|
@@ -847,6 +889,12 @@
|
|
|
847
889
|
"source": "stories",
|
|
848
890
|
"compilable": false
|
|
849
891
|
},
|
|
892
|
+
"5b6e430e96dfe718f6bd3291f933d68b2a94eed3e1bd87766079d71544d56592": {
|
|
893
|
+
"title": "Selection And Sort",
|
|
894
|
+
"code": "{\n const [selectedKeys, setSelectedKeys] = useState<React.Key[]>(['2']);\n\n return (\n <div>\n <TypographyBody size=\"sm\" color=\"default-tertiary\" style={hintStyle}>\n Selected rows: {selectedKeys.join(', ')}\n </TypographyBody>\n <Table\n {...(args as TableProps<Record<string, any>>)}\n rowSelection={{\n type: 'checkbox',\n selectedRowKeys: selectedKeys,\n onChange: (keys) => setSelectedKeys(keys),\n }}\n />\n </div>\n );\n }",
|
|
895
|
+
"source": "stories",
|
|
896
|
+
"compilable": false
|
|
897
|
+
},
|
|
850
898
|
"5bbda57b2d06dfefaed853ba5ad655bb306fd8ecfbc92a6a96dee1deffc1af2f": {
|
|
851
899
|
"title": "With Content",
|
|
852
900
|
"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 />",
|
|
@@ -991,6 +1039,12 @@
|
|
|
991
1039
|
"source": "readme",
|
|
992
1040
|
"compilable": true
|
|
993
1041
|
},
|
|
1042
|
+
"6f1ac382a21af48aded6d900902e14d386aec026b6a51b8efa0fbac1f515290a": {
|
|
1043
|
+
"title": "Fixed And Sticky",
|
|
1044
|
+
"code": "<Table<PortfolioRow>\n rowKey=\"id\"\n pagination={false}\n sticky\n scroll={{ x: 1120, y: 280 }}\n dataSource={portfolioRows}\n columns={[\n {\n ...portfolioColumns[0],\n fixed: 'left',\n },\n portfolioColumns[1],\n portfolioColumns[2],\n {\n key: 'owner',\n dataIndex: 'owner',\n title: 'Owner',\n width: 220,\n },\n {\n key: 'balance',\n dataIndex: 'balance',\n title: 'Balance',\n width: 160,\n align: 'right',\n render: (value) => formatBalance(value as number),\n },\n {\n ...portfolioColumns[4],\n fixed: 'right',\n },\n ]}\n />",
|
|
1045
|
+
"source": "stories",
|
|
1046
|
+
"compilable": true
|
|
1047
|
+
},
|
|
994
1048
|
"6f2b7da00479a6033fdaca36f0646a924c61cbf09cd0e07da6948a884af98a61": {
|
|
995
1049
|
"title": "Dependency",
|
|
996
1050
|
"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>",
|
|
@@ -1207,6 +1261,12 @@
|
|
|
1207
1261
|
"source": "readme",
|
|
1208
1262
|
"compilable": true
|
|
1209
1263
|
},
|
|
1264
|
+
"83d457fb7d2b3478dda19b79185daa8909a55b9786ff1b3cf560cec95743926d": {
|
|
1265
|
+
"title": "Basic Usage",
|
|
1266
|
+
"code": "<Table rowKey=\"id\" columns={columns} dataSource={rows} />",
|
|
1267
|
+
"source": "readme",
|
|
1268
|
+
"compilable": true
|
|
1269
|
+
},
|
|
1210
1270
|
"842244e70f89e2aaf6941718de836ab3a6e08d642a4d4bb2e80cee160158470f": {
|
|
1211
1271
|
"title": "Default",
|
|
1212
1272
|
"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,6 +1411,12 @@
|
|
|
1351
1411
|
"source": "stories",
|
|
1352
1412
|
"compilable": false
|
|
1353
1413
|
},
|
|
1414
|
+
"96217a515862bd694993e67890c003764d3d7dae09ba8304339664ed91eb84ac": {
|
|
1415
|
+
"title": "Filters With Sort And Pagination",
|
|
1416
|
+
"code": "{\n const [lastAction, setLastAction] = useState<string>('β');\n const [lastCount, setLastCount] = useState<number>(portfolioRows.length);\n\n return (\n <div>\n <TypographyBody size=\"sm\" color=\"default-tertiary\" style={hintStyle}>\n Filter on Network / Status, sort on Balance, paginate (size 3).{' '}\n Last <code>onChange</code> action: <strong>{lastAction}</strong>{' '}\n (rows on page: {lastCount}).\n </TypographyBody>\n <Table<PortfolioRow>\n rowKey=\"id\"\n dataSource={portfolioRows}\n pagination={{ pageSize: 3 }}\n onChange={(meta) => {\n setLastAction(meta.action);\n setLastCount(meta.currentDataSource.length);\n }}\n columns={[\n portfolioColumns[0],\n {\n ...portfolioColumns[1],\n filters: NETWORK_FILTER_ITEMS,\n onFilter: (value, record) => record.network === value,\n },\n {\n ...portfolioColumns[2],\n filters: STATUS_FILTER_ITEMS,\n onFilter: (value, record) => record.status === value,\n },\n portfolioColumns[3],\n portfolioColumns[4],\n ]}\n />\n </div>\n );\n }",
|
|
1417
|
+
"source": "stories",
|
|
1418
|
+
"compilable": true
|
|
1419
|
+
},
|
|
1354
1420
|
"96a4fb49627068cd32df95bce74ab746a2901c627dcd70fa9bf9c9247f21b7a3": {
|
|
1355
1421
|
"title": "Canonical usage",
|
|
1356
1422
|
"code": "import { Trigger } from '@1money/component-ui';\n// or\nimport { Trigger } from '@1money/component-ui/Trigger';",
|
|
@@ -1423,6 +1489,12 @@
|
|
|
1423
1489
|
"source": "canonical",
|
|
1424
1490
|
"compilable": true
|
|
1425
1491
|
},
|
|
1492
|
+
"9c1283e9fdf9b6890dff56e79eee2e25f49c665934a1a11e56ef9e636b23642d": {
|
|
1493
|
+
"title": "Figma Wallet Registry",
|
|
1494
|
+
"code": "<WalletRegistryStory\n dataSource={walletRegistryRows}\n defaultExpandedKeys={['wallet-ops']}\n />",
|
|
1495
|
+
"source": "stories",
|
|
1496
|
+
"compilable": true
|
|
1497
|
+
},
|
|
1426
1498
|
"9eae41b47da6d3b07d6bfdb98fe407b6be85aa68db3fe695699cf9588b65eda8": {
|
|
1427
1499
|
"title": "Placements",
|
|
1428
1500
|
"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 }",
|
|
@@ -1489,6 +1561,12 @@
|
|
|
1489
1561
|
"source": "stories",
|
|
1490
1562
|
"compilable": false
|
|
1491
1563
|
},
|
|
1564
|
+
"a5a0117d707475ad307fab2299eec3c085bafe1954ddc3724c5fdd67f326f19d": {
|
|
1565
|
+
"title": "Wallet List Panel",
|
|
1566
|
+
"code": "<div style={figmaFrameStyle}>\n <Table<WalletListRow>\n rowKey=\"id\"\n size=\"large\"\n variant=\"stroke\"\n pagination={false}\n columns={walletListPanelColumns}\n dataSource={walletListPanelRows}\n />\n </div>",
|
|
1567
|
+
"source": "stories",
|
|
1568
|
+
"compilable": true
|
|
1569
|
+
},
|
|
1492
1570
|
"a5a04f0b0f7ad14c2ae616df4f7820ea44171f7317f4ba0ab23f15985159dc24": {
|
|
1493
1571
|
"title": "Group Directions",
|
|
1494
1572
|
"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 }",
|
|
@@ -1693,6 +1771,18 @@
|
|
|
1693
1771
|
"source": "readme",
|
|
1694
1772
|
"compilable": true
|
|
1695
1773
|
},
|
|
1774
|
+
"b8db243638e9c756f8cc0fc389226284ba74cf2edceef451b608cb3ab9bfc07e": {
|
|
1775
|
+
"title": "Controlled Filters",
|
|
1776
|
+
"code": "{\n const [networkFilter, setNetworkFilter] = useState<TableFilterValue>(['Ethereum']);\n\n return (\n <div>\n <div style={controlBarStyle}>\n <TypographyBody size=\"sm\" color=\"default-tertiary\">\n Programmatically force network filter:\n </TypographyBody>\n <Button size=\"small\" color=\"grey\" onClick={() => setNetworkFilter(['Ethereum'])}>\n Ethereum\n </Button>\n <Button size=\"small\" color=\"grey\" onClick={() => setNetworkFilter(['Solana'])}>\n Solana\n </Button>\n <Button\n size=\"small\"\n color=\"grey\"\n onClick={() => setNetworkFilter(['Ethereum', 'Solana'])}\n >\n ETH + SOL\n </Button>\n <Button size=\"small\" variant=\"text\" onClick={() => setNetworkFilter([])}>\n Reset\n </Button>\n </div>\n <Table<PortfolioRow>\n rowKey=\"id\"\n pagination={false}\n dataSource={portfolioRows}\n // In controlled mode, the built-in filter dropdown's OK / Reset cannot\n // mutate the parent's state directly β listen to `onChange` and mirror\n // the new selection back into local state so the round-trip works.\n onChange={(meta) => {\n if (meta.action === 'filter') {\n setNetworkFilter(meta.filters?.network ?? []);\n }\n }}\n columns={[\n portfolioColumns[0],\n {\n ...portfolioColumns[1],\n filters: NETWORK_FILTER_ITEMS,\n filteredValue: networkFilter,\n onFilter: (value, record) => record.network === value,\n },\n portfolioColumns[2],\n portfolioColumns[3],\n ]}\n />\n </div>\n );\n }",
|
|
1777
|
+
"source": "stories",
|
|
1778
|
+
"compilable": true
|
|
1779
|
+
},
|
|
1780
|
+
"b9cc21db46c34c1f749ec2f5cc996c0eb92608376b07b2eb61f2bc427f045927": {
|
|
1781
|
+
"title": "Virtual Scrolling",
|
|
1782
|
+
"code": "{\n const largeData: PortfolioRow[] = Array.from({ length: 5000 }, (_, index) => ({\n id: `virtual-${index + 1}`,\n wallet: `Wallet ${index + 1}`,\n owner: `Desk ${index % 12}`,\n network: ['Ethereum', 'Solana', 'Polygon', 'Arbitrum'][index % 4],\n status: (['active', 'hold', 'review'] as const)[index % 3],\n balance: 200000 + (index * 1375),\n actionLabel: 'Open',\n countryFlag: index % 2 === 0 ? 'πΊπΈ' : 'πͺπΊ',\n }));\n\n return (\n <div>\n <TypographyBody size=\"sm\" color=\"default-tertiary\" style={hintStyle}>\n 5,000 rows rendered with the virtualized table kernel.\n </TypographyBody>\n <VirtualTable<PortfolioRow>\n rowKey=\"id\"\n columns={virtualColumns}\n dataSource={largeData}\n scroll={{ x: 740, y: 360 }}\n pagination={false}\n />\n </div>\n );\n }",
|
|
1783
|
+
"source": "stories",
|
|
1784
|
+
"compilable": true
|
|
1785
|
+
},
|
|
1696
1786
|
"ba061872d363c81e7be320d4e4c26b4ed1989d21480077c3a3055d45d54f1afd": {
|
|
1697
1787
|
"title": "Icon Hover Demo",
|
|
1698
1788
|
"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>",
|
|
@@ -1759,6 +1849,12 @@
|
|
|
1759
1849
|
"source": "stories",
|
|
1760
1850
|
"compilable": true
|
|
1761
1851
|
},
|
|
1852
|
+
"c23b54aeab8234b5665b9182a68e75b1d9b5ea969d997e08e1d4a41b85679209": {
|
|
1853
|
+
"title": "Sizes",
|
|
1854
|
+
"code": "<div style={stackStyle}>\n <div>\n <TypographyTitle size=\"sm\" strong style={sectionTitleStyle}>\n Large\n </TypographyTitle>\n <Table {...(args as TableProps<Record<string, any>>)} dataSource={portfolioRows.slice(0, 3)} size=\"large\" />\n </div>\n <div>\n <TypographyTitle size=\"sm\" strong style={sectionTitleStyle}>\n Small\n </TypographyTitle>\n <Table {...(args as TableProps<Record<string, any>>)} dataSource={portfolioRows.slice(0, 3)} size=\"small\" />\n </div>\n </div>",
|
|
1855
|
+
"source": "stories",
|
|
1856
|
+
"compilable": false
|
|
1857
|
+
},
|
|
1762
1858
|
"c2c42c200e9bad53b274260619d36029e7257a5f80b73408ffe619abdf14a9d9": {
|
|
1763
1859
|
"title": "Canonical usage",
|
|
1764
1860
|
"code": "import { Drawer } from '@1money/component-ui';\n// or\nimport { Drawer } from '@1money/component-ui/Drawer';",
|
|
@@ -1957,12 +2053,24 @@
|
|
|
1957
2053
|
"source": "stories",
|
|
1958
2054
|
"compilable": false
|
|
1959
2055
|
},
|
|
2056
|
+
"da280e337376d16711ea44dd2d411fa903a7b572376669f415c392652b3c6142": {
|
|
2057
|
+
"title": "Custom Filter Dropdown",
|
|
2058
|
+
"code": "<div>\n <TypographyBody size=\"sm\" color=\"default-tertiary\" style={hintStyle}>\n A consumer-provided dropdown β substring match against the wallet name.\n </TypographyBody>\n <Table<PortfolioRow>\n rowKey=\"id\"\n pagination={false}\n dataSource={portfolioRows}\n columns={[\n {\n ...portfolioColumns[0],\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (\n <div style={filterDropdownStyle}>\n <input\n autoFocus\n placeholder=\"Search wallet name\"\n value={String(selectedKeys[0] ?? '')}\n onChange={(e) =>\n setSelectedKeys(e.target.value ? [e.target.value] : [])\n }\n style={filterDropdownInputStyle}\n />\n <div style={filterDropdownFooterStyle}>\n <Button size=\"small\" variant=\"text\" onClick={clearFilters}>\n Clear\n </Button>\n <Button size=\"small\" color=\"primary\" onClick={confirm}>\n Search\n </Button>\n </div>\n </div>\n ),\n onFilter: (value, record) =>\n record.wallet.toLowerCase().includes(String(value).toLowerCase()),\n },\n portfolioColumns[1],\n portfolioColumns[2],\n portfolioColumns[3],\n ]}\n />\n </div>",
|
|
2059
|
+
"source": "stories",
|
|
2060
|
+
"compilable": true
|
|
2061
|
+
},
|
|
1960
2062
|
"da48319e963f8bce14fd2d0e6276dbdb8273cee567181e50abfb14f902872b76": {
|
|
1961
2063
|
"title": "Colors",
|
|
1962
2064
|
"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>",
|
|
1963
2065
|
"source": "stories",
|
|
1964
2066
|
"compilable": false
|
|
1965
2067
|
},
|
|
2068
|
+
"da7b2e8d26561713d8946001e3c1ba6ea8c38e7fe99e4982b9eadd4fec64215d": {
|
|
2069
|
+
"title": "Nested Data Index",
|
|
2070
|
+
"code": "<div>\n <TypographyBody size=\"sm\" color=\"default-tertiary\" style={hintStyle}>\n Columns read from <code>user.profile.name</code>,{' '}\n <code>user.profile.email</code>, and <code>balance.fiat</code> via\n array-form <code>dataIndex</code>.\n </TypographyBody>\n <Table<NestedWalletRow>\n rowKey=\"id\"\n pagination={false}\n dataSource={nestedRows}\n columns={[\n {\n key: 'name',\n dataIndex: ['user', 'profile', 'name'],\n title: 'Name',\n width: 220,\n },\n {\n key: 'email',\n dataIndex: ['user', 'profile', 'email'],\n title: 'Email',\n width: 260,\n },\n {\n key: 'asset',\n dataIndex: ['balance', 'asset'],\n title: 'Asset',\n width: 120,\n },\n {\n key: 'fiat',\n dataIndex: ['balance', 'fiat'],\n title: 'Balance',\n width: 160,\n align: 'right',\n sorter: (a, b) => a.balance.fiat - b.balance.fiat,\n render: (value) => formatBalance(value as number),\n },\n ]}\n />\n </div>",
|
|
2071
|
+
"source": "stories",
|
|
2072
|
+
"compilable": true
|
|
2073
|
+
},
|
|
1966
2074
|
"db11dae227995e92880a75b42e93f034782b06757a643753f468b4e0b598692a": {
|
|
1967
2075
|
"title": "Filter Wrap Spacing",
|
|
1968
2076
|
"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>",
|
|
@@ -2065,6 +2173,12 @@
|
|
|
2065
2173
|
"source": "stories",
|
|
2066
2174
|
"compilable": false
|
|
2067
2175
|
},
|
|
2176
|
+
"e507eed4788971490bf4cdd4a72e99bbbbb78635073b89a32022fdb2055c6a3b": {
|
|
2177
|
+
"title": "Virtual Usage",
|
|
2178
|
+
"code": "<VirtualTable\n rowKey=\"id\"\n columns={columns}\n dataSource={rows}\n scroll={{ x: 1200, y: 360 }}\n/>",
|
|
2179
|
+
"source": "readme",
|
|
2180
|
+
"compilable": true
|
|
2181
|
+
},
|
|
2068
2182
|
"e57037f057f4da5ac90baae9ad1d85153cb48c9cfff34a65cbe2a927bf5cb713": {
|
|
2069
2183
|
"title": "Usage",
|
|
2070
2184
|
"code": "<Dialog\n open={open}\n title=\"Confirm transfer\"\n onCancel={() => setOpen(false)}\n onOk={handleSubmit}\n/>",
|
|
@@ -2143,6 +2257,12 @@
|
|
|
2143
2257
|
"source": "stories",
|
|
2144
2258
|
"compilable": false
|
|
2145
2259
|
},
|
|
2260
|
+
"ef4904f8e094b98c456651c4a86b1a206b470678f945596a762b38b9855c76ae": {
|
|
2261
|
+
"title": "Rich Checkbox Props",
|
|
2262
|
+
"code": "<div>\n <TypographyBody size=\"sm\" color=\"default-tertiary\" style={hintStyle}>\n Rows in <code>hold</code> state are disabled and carry a per-row{' '}\n <code>title</code> / <code>aria-label</code> for accessibility.\n </TypographyBody>\n <Table<PortfolioRow>\n rowKey=\"id\"\n pagination={false}\n dataSource={portfolioRows.slice(0, 5)}\n columns={portfolioColumns}\n rowSelection={{\n type: 'checkbox',\n getCheckboxProps: (record) => ({\n disabled: record.status === 'hold',\n title:\n record.status === 'hold'\n ? `Locked β ${record.wallet} is on hold`\n : `Select ${record.wallet}`,\n 'aria-label': `Toggle selection for ${record.wallet}`,\n }),\n }}\n />\n </div>",
|
|
2263
|
+
"source": "stories",
|
|
2264
|
+
"compilable": true
|
|
2265
|
+
},
|
|
2146
2266
|
"efb94a978c87bf9343e9605b358b08efa2db1f476e21029ee2bda3da4f275448": {
|
|
2147
2267
|
"title": "Api Examples",
|
|
2148
2268
|
"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>",
|
|
@@ -2161,6 +2281,12 @@
|
|
|
2161
2281
|
"source": "stories",
|
|
2162
2282
|
"compilable": false
|
|
2163
2283
|
},
|
|
2284
|
+
"f0b43407e5af920de287ba579078143cd869cfc5885640bde4a41c50636377d4": {
|
|
2285
|
+
"title": "Row Expandable",
|
|
2286
|
+
"code": "{\n // Seed `r2` (a non-expandable row) into the controlled keys to prove the\n // render layer refuses to draw expanded content for it.\n const [expandedKeys, setExpandedKeys] = useState<React.Key[]>(['r1', 'r2']);\n\n const columns: TableColumn<RowExpandableDemoRow>[] = [\n { key: 'title', dataIndex: 'title', title: 'Order' },\n {\n key: 'kind',\n title: 'Kind',\n render: (_v, record) => (\n <Tag\n label={record.notes ? 'Has notes' : 'No notes'}\n color={record.notes ? 'success' : 'neutral'}\n />\n ),\n },\n ];\n\n return (\n <div style={{ width: 640 }}>\n <TypographyBody className=\"om-mb-3\">\n Rows without <code>notes</code> have no chevron, ignore the\n <code> expandRowByClick</code> shortcut, and refuse to render expanded content\n even when their key is forced into <code>expandedRowKeys</code>.\n </TypographyBody>\n <Table<RowExpandableDemoRow>\n rowKey=\"id\"\n size=\"small\"\n variant=\"stroke\"\n pagination={false}\n dataSource={rowExpandableDemoData}\n columns={columns}\n expandable={{\n expandedRowKeys: expandedKeys,\n onExpandedRowsChange: (keys) => setExpandedKeys([...keys]),\n expandRowByClick: true,\n rowExpandable: (record) => Boolean(record.notes),\n expandedRowRender: (record) => (\n <div style={{ padding: '8px 16px', background: '#fafafa' }}>\n <TypographyLabel>{record.notes}</TypographyLabel>\n </div>\n ),\n }}\n />\n </div>\n );\n }",
|
|
2287
|
+
"source": "stories",
|
|
2288
|
+
"compilable": true
|
|
2289
|
+
},
|
|
2164
2290
|
"f2c3b9fe0a35d0f3e87ed98754d67b66bdf140128496a16d3ebc5ba4819068cc": {
|
|
2165
2291
|
"title": "All Variants",
|
|
2166
2292
|
"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>",
|
|
@@ -2203,6 +2329,12 @@
|
|
|
2203
2329
|
"source": "readme",
|
|
2204
2330
|
"compilable": true
|
|
2205
2331
|
},
|
|
2332
|
+
"f59241468963f180aad8e4bfdf87c64b8defd166186019821c0a5462fcd36f72": {
|
|
2333
|
+
"title": "Import",
|
|
2334
|
+
"code": "import { Table, VirtualTable } from '@1money/component-ui';\n// or\nimport { Table, VirtualTable } from '@1money/component-ui/Table';",
|
|
2335
|
+
"source": "readme",
|
|
2336
|
+
"compilable": true
|
|
2337
|
+
},
|
|
2206
2338
|
"f5e88271260df2b0e8df1a0b03d96a4c3004f14d0e5aaec8892007d6c41fddb4": {
|
|
2207
2339
|
"title": "With Disabled",
|
|
2208
2340
|
"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 />",
|