@onekeyfe/react-native-native-list 6.7.0-alpha.409 → 6.7.0-alpha.412

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.
Files changed (121) hide show
  1. package/android/src/main/java/com/onekey/nativelist/NativeListAccessoryStack.kt +5 -0
  2. package/android/src/main/java/com/onekey/nativelist/NativeListGeneratedIcons.kt +47 -0
  3. package/android/src/main/java/com/onekey/nativelist/NativeListLeadingVisual.kt +5 -0
  4. package/android/src/main/java/com/onekey/nativelist/NativeListPrimitives.kt +117 -338
  5. package/android/src/main/java/com/onekey/nativelist/NativeListRendererRowView.kt +5 -0
  6. package/docs/SPEC.md +114 -7
  7. package/ios/NativeListAccessoryStack.swift +6 -16
  8. package/ios/NativeListDataRowRenderer.swift +15 -6
  9. package/ios/NativeListDesignAssets.swift +13 -84
  10. package/ios/NativeListGeneratedIcons.swift +55 -0
  11. package/ios/NativeListIconBinding.swift +171 -0
  12. package/ios/NativeListIdentityRenderer.swift +12 -10
  13. package/ios/NativeListLeadingVisual.swift +11 -9
  14. package/ios/NativeListMarketRenderer.swift +7 -13
  15. package/ios/NativeListMediaTileRenderer.swift +6 -2
  16. package/ios/NativeListMetricCardRenderer.swift +4 -2
  17. package/ios/NativeListSectionHeaderRenderer.swift +12 -4
  18. package/ios/tests/NativeListAccessoryStackTests.swift +12 -0
  19. package/ios/tests/NativeListSharedIconTests.swift +236 -0
  20. package/lib/module/web/NativeListGeneratedIcons.js +31 -0
  21. package/lib/module/web/NativeListWebEngine.js +21 -323
  22. package/lib/module/web/templates/ActivityRowRenderer.js +4 -24
  23. package/lib/module/web/templates/MarketTableRowRenderer.js +11 -15
  24. package/lib/module/web/templates/MediaTileRowRenderer.js +2 -12
  25. package/lib/typescript/src/web/NativeListGeneratedIcons.d.ts +2 -0
  26. package/lib/typescript/src/web/NativeListWebEngine.d.ts +0 -1
  27. package/package.json +10 -4
  28. package/react-native-native-list.podspec +0 -5
  29. package/scripts/generate-icons.mjs +150 -0
  30. package/scripts/generate-icons.test.mjs +288 -0
  31. package/scripts/native-list-icons.json +260 -0
  32. package/src/web/NativeListGeneratedIcons.ts +28 -0
  33. package/src/web/NativeListWebEngine.ts +25 -405
  34. package/src/web/templates/ActivityRowRenderer.ts +15 -53
  35. package/src/web/templates/MarketTableRowRenderer.ts +17 -29
  36. package/src/web/templates/MediaTileRowRenderer.ts +2 -15
  37. package/ios/Resources/NativeListIcons.xcassets/Contents.json +0 -1
  38. package/ios/Resources/NativeListIcons.xcassets/onekey_arrow_bottom.imageset/Contents.json +0 -1
  39. package/ios/Resources/NativeListIcons.xcassets/onekey_arrow_bottom.imageset/icon.svg +0 -1
  40. package/ios/Resources/NativeListIcons.xcassets/onekey_arrow_top.imageset/Contents.json +0 -1
  41. package/ios/Resources/NativeListIcons.xcassets/onekey_arrow_top.imageset/icon.svg +0 -1
  42. package/ios/Resources/NativeListIcons.xcassets/onekey_badge_verified_solid.imageset/Contents.json +0 -1
  43. package/ios/Resources/NativeListIcons.xcassets/onekey_badge_verified_solid.imageset/icon.svg +0 -1
  44. package/ios/Resources/NativeListIcons.xcassets/onekey_chart_trending_up.imageset/Contents.json +0 -1
  45. package/ios/Resources/NativeListIcons.xcassets/onekey_chart_trending_up.imageset/icon.svg +0 -1
  46. package/ios/Resources/NativeListIcons.xcassets/onekey_checkbox_checked.imageset/Contents.json +0 -1
  47. package/ios/Resources/NativeListIcons.xcassets/onekey_checkbox_checked.imageset/icon.svg +0 -1
  48. package/ios/Resources/NativeListIcons.xcassets/onekey_checkbox_indeterminate.imageset/Contents.json +0 -1
  49. package/ios/Resources/NativeListIcons.xcassets/onekey_checkbox_indeterminate.imageset/icon.svg +0 -1
  50. package/ios/Resources/NativeListIcons.xcassets/onekey_chevron_bottom.imageset/Contents.json +0 -1
  51. package/ios/Resources/NativeListIcons.xcassets/onekey_chevron_bottom.imageset/icon.svg +0 -1
  52. package/ios/Resources/NativeListIcons.xcassets/onekey_chevron_grabber_ver.imageset/Contents.json +0 -1
  53. package/ios/Resources/NativeListIcons.xcassets/onekey_chevron_grabber_ver.imageset/icon.svg +0 -1
  54. package/ios/Resources/NativeListIcons.xcassets/onekey_chevron_right_small.imageset/Contents.json +0 -1
  55. package/ios/Resources/NativeListIcons.xcassets/onekey_chevron_right_small.imageset/icon.svg +0 -1
  56. package/ios/Resources/NativeListIcons.xcassets/onekey_chevron_top.imageset/Contents.json +0 -1
  57. package/ios/Resources/NativeListIcons.xcassets/onekey_chevron_top.imageset/icon.svg +0 -1
  58. package/ios/Resources/NativeListIcons.xcassets/onekey_crypto_coin_outline.imageset/Contents.json +0 -15
  59. package/ios/Resources/NativeListIcons.xcassets/onekey_crypto_coin_outline.imageset/icon.svg +0 -4
  60. package/ios/Resources/NativeListIcons.xcassets/onekey_document2.imageset/Contents.json +0 -1
  61. package/ios/Resources/NativeListIcons.xcassets/onekey_document2.imageset/icon.svg +0 -1
  62. package/ios/Resources/NativeListIcons.xcassets/onekey_dot_hor.imageset/Contents.json +0 -1
  63. package/ios/Resources/NativeListIcons.xcassets/onekey_dot_hor.imageset/icon.svg +0 -1
  64. package/ios/Resources/NativeListIcons.xcassets/onekey_dot_ver_solid.imageset/Contents.json +0 -1
  65. package/ios/Resources/NativeListIcons.xcassets/onekey_dot_ver_solid.imageset/icon.svg +0 -1
  66. package/ios/Resources/NativeListIcons.xcassets/onekey_drag.imageset/Contents.json +0 -1
  67. package/ios/Resources/NativeListIcons.xcassets/onekey_drag.imageset/icon.svg +0 -1
  68. package/ios/Resources/NativeListIcons.xcassets/onekey_error_solid.imageset/Contents.json +0 -1
  69. package/ios/Resources/NativeListIcons.xcassets/onekey_error_solid.imageset/icon.svg +0 -1
  70. package/ios/Resources/NativeListIcons.xcassets/onekey_gas_solid.imageset/Contents.json +0 -15
  71. package/ios/Resources/NativeListIcons.xcassets/onekey_gas_solid.imageset/icon.svg +0 -3
  72. package/ios/Resources/NativeListIcons.xcassets/onekey_image_square_waves.imageset/Contents.json +0 -1
  73. package/ios/Resources/NativeListIcons.xcassets/onekey_image_square_waves.imageset/icon.svg +0 -1
  74. package/ios/Resources/NativeListIcons.xcassets/onekey_info_circle.imageset/Contents.json +0 -1
  75. package/ios/Resources/NativeListIcons.xcassets/onekey_info_circle.imageset/icon.svg +0 -1
  76. package/ios/Resources/NativeListIcons.xcassets/onekey_minus_circle.imageset/Contents.json +0 -1
  77. package/ios/Resources/NativeListIcons.xcassets/onekey_minus_circle.imageset/icon.svg +0 -1
  78. package/ios/Resources/NativeListIcons.xcassets/onekey_minus_circle_solid.imageset/Contents.json +0 -1
  79. package/ios/Resources/NativeListIcons.xcassets/onekey_minus_circle_solid.imageset/icon.svg +0 -1
  80. package/ios/Resources/NativeListIcons.xcassets/onekey_pencil.imageset/Contents.json +0 -1
  81. package/ios/Resources/NativeListIcons.xcassets/onekey_pencil.imageset/icon.svg +0 -1
  82. package/ios/Resources/NativeListIcons.xcassets/onekey_plus_circle.imageset/Contents.json +0 -1
  83. package/ios/Resources/NativeListIcons.xcassets/onekey_plus_circle.imageset/icon.svg +0 -1
  84. package/ios/Resources/NativeListIcons.xcassets/onekey_plus_large.imageset/Contents.json +0 -1
  85. package/ios/Resources/NativeListIcons.xcassets/onekey_plus_large.imageset/icon.svg +0 -1
  86. package/ios/Resources/NativeListIcons.xcassets/onekey_plus_small.imageset/Contents.json +0 -1
  87. package/ios/Resources/NativeListIcons.xcassets/onekey_plus_small.imageset/icon.svg +0 -1
  88. package/ios/Resources/NativeListIcons.xcassets/onekey_questionmark_solid.imageset/Contents.json +0 -1
  89. package/ios/Resources/NativeListIcons.xcassets/onekey_questionmark_solid.imageset/icon.svg +0 -1
  90. package/ios/Resources/NativeListIcons.xcassets/onekey_refresh_ccw_outline.imageset/Contents.json +0 -15
  91. package/ios/Resources/NativeListIcons.xcassets/onekey_refresh_ccw_outline.imageset/icon.svg +0 -3
  92. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_account_error_custom.imageset/Contents.json +0 -15
  93. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_account_error_custom.imageset/icon.svg +0 -14
  94. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_all_networks_solid.imageset/Contents.json +0 -15
  95. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_all_networks_solid.imageset/icon.svg +0 -12
  96. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_apple_brand.imageset/Contents.json +0 -15
  97. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_apple_brand.imageset/icon.svg +0 -6
  98. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_bot_illus.imageset/Contents.json +0 -15
  99. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_bot_illus.imageset/icon.svg +0 -15
  100. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_crossed_small_solid.imageset/Contents.json +0 -15
  101. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_crossed_small_solid.imageset/icon.svg +0 -3
  102. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_globus_outline.imageset/Contents.json +0 -15
  103. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_globus_outline.imageset/icon.svg +0 -7
  104. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_google_illus.imageset/Contents.json +0 -15
  105. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_google_illus.imageset/icon.svg +0 -18
  106. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_lock_solid.imageset/Contents.json +0 -15
  107. package/ios/Resources/NativeListIcons.xcassets/onekey_selector_lock_solid.imageset/icon.svg +0 -7
  108. package/ios/Resources/NativeListIcons.xcassets/onekey_shield_exclamation.imageset/Contents.json +0 -1
  109. package/ios/Resources/NativeListIcons.xcassets/onekey_shield_exclamation.imageset/icon.svg +0 -1
  110. package/ios/Resources/NativeListIcons.xcassets/onekey_speaker_promote.imageset/Contents.json +0 -1
  111. package/ios/Resources/NativeListIcons.xcassets/onekey_speaker_promote.imageset/icon.svg +0 -1
  112. package/ios/Resources/NativeListIcons.xcassets/onekey_star.imageset/Contents.json +0 -1
  113. package/ios/Resources/NativeListIcons.xcassets/onekey_star.imageset/icon.svg +0 -1
  114. package/ios/Resources/NativeListIcons.xcassets/onekey_star_solid.imageset/Contents.json +0 -1
  115. package/ios/Resources/NativeListIcons.xcassets/onekey_star_solid.imageset/icon.svg +0 -1
  116. package/ios/Resources/NativeListIcons.xcassets/onekey_swap_hor.imageset/Contents.json +0 -1
  117. package/ios/Resources/NativeListIcons.xcassets/onekey_swap_hor.imageset/icon.svg +0 -1
  118. package/ios/Resources/NativeListIcons.xcassets/onekey_ticket.imageset/Contents.json +0 -1
  119. package/ios/Resources/NativeListIcons.xcassets/onekey_ticket.imageset/icon.svg +0 -1
  120. package/ios/Resources/NativeListIcons.xcassets/onekey_wallet.imageset/Contents.json +0 -1
  121. package/ios/Resources/NativeListIcons.xcassets/onekey_wallet.imageset/icon.svg +0 -1
@@ -0,0 +1,28 @@
1
+ // Generated by scripts/generate-icons.mjs. Coverage and legacy names only; hosts provide SVG resources.
2
+ export const nativeListGeneratedIcons: Readonly<Record<string, string>> = {
3
+ AccountErrorCustom: 'AccountErrorCustom',
4
+ AllNetworksSolid: 'AllNetworksSolid',
5
+ AppleBrand: 'AppleBrand',
6
+ BadgeVerifiedSolid: 'BadgeRecognizedSolid',
7
+ BotIllus: 'BotIllus',
8
+ CheckboxCheckedCustom: 'CheckboxCheckedCustom',
9
+ CheckboxIndeterminateCustom: 'CheckboxIndeterminateCustom',
10
+ ChevronRightSmallOutline: 'ChevronRightSmallOutline',
11
+ Circle: 'Circle',
12
+ CrossedSmallSolid: 'CrossedSmallSolid',
13
+ CryptoCoinOutline: 'CryptoCoinOutline',
14
+ Document2Outline: 'Document2Outline',
15
+ DotHorOutline: 'DotHorOutline',
16
+ DotVerSolid: 'DotVerSolid',
17
+ DragOutline: 'DragOutline',
18
+ GasSolid: 'GasSolid',
19
+ GlobusOutline: 'GlobusOutline',
20
+ GoogleIllus: 'GoogleIllus',
21
+ LockSolid: 'LockSolid',
22
+ PencilOutline: 'PencilOutline',
23
+ PlusLargeOutline: 'PlusLargeOutline',
24
+ PlusSmallOutline: 'PlusSmallOutline',
25
+ RefreshCcwOutline: 'RefreshCcwOutline',
26
+ TicketOutline: 'TicketOutline',
27
+ WalletOutline: 'WalletOutline',
28
+ };
@@ -1,3 +1,5 @@
1
+ import { createNamedIcon } from '@onekeyfe/react-native-image/icon/dom';
2
+ import { nativeListGeneratedIcons as selectorIcons } from './NativeListGeneratedIcons';
1
3
  import { applyTextWeight } from './templates/RowText';
2
4
  import {
3
5
  applyRowContainerStyle,
@@ -97,8 +99,6 @@ export const WEB_REORDER_ANIMATION = {
97
99
  const REORDER_TOUCH_LONG_PRESS_MS = 120;
98
100
  const MARKET_LONG_PRESS_MS = 800;
99
101
  const MARKET_MOVE_CANCEL_PX = 10;
100
- export const WEB_MARKET_VERIFIED_PATH =
101
- 'M9.483 11.458v3.5h-1v-3.5z M10.467 2.698a2.03 2.03 0 0 1 3.065 0l1.358 1.564a.03.03 0 0 0 .028.01l2.046-.325a2.03 2.03 0 0 1 2.347 1.971l.037 2.07q0 .016.014.026l1.776 1.066a2.03 2.03 0 0 1 .532 3.019l-1.304 1.609a.03.03 0 0 0-.005.03l.675 1.956a2.03 2.03 0 0 1-1.533 2.656l-2.033.394a.03.03 0 0 0-.023.019l-.741 1.933a2.03 2.03 0 0 1-2.88 1.05l-1.811-1.006a.03.03 0 0 0-.03 0l-1.811 1.005a2.03 2.03 0 0 1-2.88-1.049l-.742-1.933a.03.03 0 0 0-.023-.019l-2.033-.394a2.03 2.03 0 0 1-1.532-2.656l.675-1.957a.03.03 0 0 0-.005-.029l-1.304-1.61a2.03 2.03 0 0 1 .532-3.018l1.776-1.066a.03.03 0 0 0 .014-.026l.035-2.07a2.03 2.03 0 0 1 2.349-1.97l2.045.324a.03.03 0 0 0 .028-.01zm1.516 3.76a.5.5 0 0 0-.447.276l-1.861 3.724H8.483a1 1 0 0 0-1 1v3.5a1 1 0 0 0 1 1h6.692a2 2 0 0 0 1.981-1.73l.341-2.5a2 2 0 0 0-1.982-2.27h-1.939l.197-1.269a1.5 1.5 0 0 0-1.481-1.731z';
102
102
  const REORDER_MOUSE_MOVE_THRESHOLD_PX = 5;
103
103
  const REORDER_EDGE_RATIO = 0.25;
104
104
  const REORDER_MAX_SPEED_ZONE_RATIO = 0.05;
@@ -1179,416 +1179,35 @@ function paintSelectorImageBackground(
1179
1179
  if (image.complete && image.naturalWidth > 0) update();
1180
1180
  }
1181
1181
 
1182
- // OneKey patch: use source SVG paths for selector actions and wallet provider marks.
1183
- const selectorIcons: Readonly<
1184
- Record<
1185
- string,
1186
- Readonly<{
1187
- viewBox: string;
1188
- paths: readonly Readonly<{
1189
- d: string;
1190
- fill: string;
1191
- fillRule: string;
1192
- opacity: number;
1193
- }>[];
1194
- }>
1195
- >
1196
- > = {
1197
- RefreshCcwOutline: {
1198
- viewBox: '0 0 24 24',
1199
- paths: [
1200
- {
1201
- d: 'M5 12a7 7 0 0 0 7 7 7.15 7.15 0 0 0 4.955-2h-2.943v-2h6v6h-2v-2.257A9.148 9.148 0 0 1 12 21a9 9 0 0 1-9-9v-1h2v1Zm1-6.754A9.148 9.148 0 0 1 12 3a9 9 0 0 1 9 9v1h-2v-1a7 7 0 0 0-7-7 7.15 7.15 0 0 0-4.955 2H10v2H4V3h2v2.246Z',
1202
- fill: 'currentColor',
1203
- fillRule: 'nonzero',
1204
- opacity: 1,
1205
- },
1206
- ],
1207
- },
1208
- DotVerSolid: {
1209
- viewBox: '0 0 24 24',
1210
- paths: [
1211
- {
1212
- d: 'M14 18v4h-4v-4zm0-4h-4v-4h4zm0-8h-4V2h4z',
1213
- fill: 'currentColor',
1214
- fillRule: 'nonzero',
1215
- opacity: 1,
1216
- },
1217
- ],
1218
- },
1219
- Document2Outline: {
1220
- viewBox: '0 0 24 24',
1221
- paths: [
1222
- {
1223
- d: 'M12 16H8v-2h4zm4-4H8v-2h8zm0-4H8V6h8z',
1224
- fill: 'currentColor',
1225
- fillRule: 'nonzero',
1226
- opacity: 1,
1227
- },
1228
- {
1229
- d: 'M20 22H4V2h16zM6 20h12V4H6z',
1230
- fill: 'currentColor',
1231
- fillRule: 'evenodd',
1232
- opacity: 1,
1233
- },
1234
- ],
1235
- },
1236
- WalletOutline: {
1237
- viewBox: '0 0 24 24',
1238
- paths: [
1239
- {
1240
- d: 'M15.5 13.25a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5',
1241
- fill: 'currentColor',
1242
- fillRule: 'nonzero',
1243
- opacity: 1,
1244
- },
1245
- {
1246
- d: 'M17 8h4v13H7a4 4 0 0 1-4-4V6.5A3.5 3.5 0 0 1 6.5 3H17zM5 17a2 2 0 0 0 2 2h12v-9H6.5c-.537 0-1.045-.12-1.5-.337zM6.5 5a1.5 1.5 0 1 0 0 3H15V5z',
1247
- fill: 'currentColor',
1248
- fillRule: 'evenodd',
1249
- opacity: 1,
1250
- },
1251
- ],
1252
- },
1253
- PlusLargeOutline: {
1254
- viewBox: '0 0 24 24',
1255
- paths: [
1256
- {
1257
- d: 'M13 11h8v2h-8v8h-2v-8H3v-2h8V3h2z',
1258
- fill: 'currentColor',
1259
- fillRule: 'nonzero',
1260
- opacity: 1,
1261
- },
1262
- ],
1263
- },
1264
- TicketOutline: {
1265
- viewBox: '0 0 24 24',
1266
- paths: [
1267
- {
1268
- d: 'M16 17.01h-2V15h2v2.01Zm0-4h-2V11h2v2.01Zm0-4h-2V7h2v2.01Z',
1269
- fill: 'currentColor',
1270
- fillRule: 'nonzero',
1271
- opacity: 1,
1272
- },
1273
- {
1274
- d: 'm22 9.927-.629.252c-1.661.665-1.661 2.977 0 3.642l.629.252V20H2v-5.927l.629-.252c1.661-.665 1.661-2.977 0-3.642L2 9.927V4h20v5.927ZM4 8.636c2.5 1.52 2.499 5.207 0 6.727V18h16v-2.637c-2.499-1.52-2.5-5.208 0-6.727V6H4v2.636Z',
1275
- fill: 'currentColor',
1276
- fillRule: 'evenodd',
1277
- opacity: 1,
1278
- },
1279
- ],
1280
- },
1281
- GasSolid: {
1282
- viewBox: '0 0 24 24',
1283
- paths: [
1284
- {
1285
- d: 'M15 9h4v7h1V8.414L17.586 6 19 4.586l3 3V18h-5v-7h-2v8h1v2H2v-2h1V3h12zM6 9v2h6V9z',
1286
- fill: 'currentColor',
1287
- fillRule: 'evenodd',
1288
- opacity: 1,
1289
- },
1290
- ],
1291
- },
1292
- CryptoCoinOutline: {
1293
- viewBox: '0 0 24 24',
1294
- paths: [
1295
- {
1296
- d: 'M11 16.387a4.5 4.5 0 0 1 0-8.775V6h2v1.613a4.5 4.5 0 0 1 2.856 2.067l-1.712 1.032a2.5 2.5 0 1 0 0 2.576l1.712 1.032A4.5 4.5 0 0 1 13 16.386V18h-2z',
1297
- fill: 'currentColor',
1298
- fillRule: 'nonzero',
1299
- opacity: 1,
1300
- },
1301
- {
1302
- d: 'M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10m-2 0a8 8 0 1 0-16 0 8 8 0 0 0 16 0',
1303
- fill: 'currentColor',
1304
- fillRule: 'evenodd',
1305
- opacity: 1,
1306
- },
1307
- ],
1308
- },
1309
- GlobusOutline: {
1310
- viewBox: '0 0 24 24',
1311
- paths: [
1312
- {
1313
- d: 'M12 2c5.185 0 9.448 3.947 9.95 9H22v2h-.05c-.502 5.053-4.765 9-9.95 9s-9.448-3.947-9.95-9H2v-2h.05C2.552 5.947 6.815 2 12 2M9.523 13c.09 1.982.438 3.726.934 5.002.29.746.612 1.282.917 1.614.304.331.517.384.626.384s.322-.053.626-.384c.305-.332.627-.868.917-1.614.496-1.276.845-3.02.934-5.002zm-5.459 0a8 8 0 0 0 4.8 6.36 10 10 0 0 1-.271-.633C7.994 17.187 7.61 15.189 7.52 13zm12.416 0c-.09 2.189-.474 4.187-1.073 5.727a10 10 0 0 1-.271.633 8 8 0 0 0 4.8-6.36zM8.863 4.639A8 8 0 0 0 4.064 11h3.457c.09-2.189.473-4.187 1.072-5.727q.127-.327.27-.634M12 4c-.109 0-.322.053-.626.384-.305.332-.627.868-.917 1.614-.496 1.276-.844 3.02-.934 5.002h4.954c-.09-1.982-.438-3.726-.934-5.002-.29-.746-.612-1.282-.917-1.614C12.322 4.053 12.109 4 12 4m3.136.639q.144.307.271.634c.599 1.54.982 3.538 1.073 5.727h3.456a8 8 0 0 0-4.8-6.361',
1314
- fill: 'currentColor',
1315
- fillRule: 'evenodd',
1316
- opacity: 1.0,
1317
- },
1318
- ],
1319
- },
1320
- LockSolid: {
1321
- viewBox: '0 0 24 24',
1322
- paths: [
1323
- {
1324
- d: 'M12 2a5 5 0 0 1 5 5v2h3v13H4V9h3V7a5 5 0 0 1 5-5m-1 11v5h2v-5zm1-9a3 3 0 0 0-3 3v2h6V7a3 3 0 0 0-3-3',
1325
- fill: 'currentColor',
1326
- fillRule: 'evenodd',
1327
- opacity: 1.0,
1328
- },
1329
- ],
1330
- },
1331
- GoogleIllus: {
1332
- viewBox: '0 0 24 24',
1333
- paths: [
1334
- {
1335
- d: 'M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09',
1336
- fill: '#4285F4',
1337
- fillRule: 'nonzero',
1338
- opacity: 1.0,
1339
- },
1340
- {
1341
- d: 'M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23',
1342
- fill: '#34A853',
1343
- fillRule: 'nonzero',
1344
- opacity: 1.0,
1345
- },
1346
- {
1347
- d: 'M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22z',
1348
- fill: '#FBBC05',
1349
- fillRule: 'nonzero',
1350
- opacity: 1.0,
1351
- },
1352
- {
1353
- d: 'M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53',
1354
- fill: '#EA4335',
1355
- fillRule: 'nonzero',
1356
- opacity: 1.0,
1357
- },
1358
- ],
1359
- },
1360
- AppleBrand: {
1361
- viewBox: '0 0 16 20',
1362
- paths: [
1363
- {
1364
- d: 'M11.67.834c.117 1.074-.315 2.153-.955 2.928-.64.773-1.692 1.378-2.718 1.298-.14-1.054.38-2.151.971-2.836C9.63 1.45 10.746.872 11.67.834M14.994 7.093c-.176.108-1.992 1.224-1.972 3.482.025 2.769 2.428 3.693 2.46 3.705l-.004.015a10.1 10.1 0 0 1-1.264 2.593c-.764 1.116-1.556 2.229-2.806 2.254-.598.011-1-.162-1.416-.343-.437-.19-.891-.386-1.609-.386-.751 0-1.226.203-1.683.398-.397.169-.78.333-1.32.354-1.208.047-2.124-1.207-2.895-2.32C.909 14.57-.294 10.414 1.322 7.612c.803-1.395 2.237-2.275 3.794-2.298.671-.014 1.32.244 1.89.47.434.172.821.326 1.135.326.282 0 .659-.149 1.099-.323.692-.273 1.539-.607 2.41-.518.599.026 2.276.24 3.354 1.818z',
1365
- fill: 'currentColor',
1366
- fillRule: 'nonzero',
1367
- opacity: 1.0,
1368
- },
1369
- ],
1370
- },
1371
- BotIllus: {
1372
- viewBox: '0 0 24 24',
1373
- paths: [
1374
- {
1375
- d: 'M11 2a1 1 0 1 1 2 0v1.8l1.6 1.6a1 1 0 1 1-1.4 1.4L12 5.6l-1.2 1.2a1 1 0 0 1-1.4-1.4L11 3.8z',
1376
- fill: '#8897A5',
1377
- fillRule: 'nonzero',
1378
- opacity: 1.0,
1379
- },
1380
- {
1381
- d: 'M8.0 6.0h8.0a5.0 5.0 0 0 1 5.0 5.0v4.0a5.0 5.0 0 0 1 -5.0 5.0h-8.0a5.0 5.0 0 0 1 -5.0 -5.0v-4.0a5.0 5.0 0 0 1 5.0 -5.0z',
1382
- fill: '#3FA9F5',
1383
- fillRule: 'nonzero',
1384
- opacity: 1.0,
1385
- },
1386
- {
1387
- d: 'M3.0 10.0h0.0a1.5 1.5 0 0 1 1.5 1.5v3.0a1.5 1.5 0 0 1 -1.5 1.5h0.0a1.5 1.5 0 0 1 -1.5 -1.5v-3.0a1.5 1.5 0 0 1 1.5 -1.5z',
1388
- fill: '#8897A5',
1389
- fillRule: 'nonzero',
1390
- opacity: 1.0,
1391
- },
1392
- {
1393
- d: 'M21.0 10.0h0.0a1.5 1.5 0 0 1 1.5 1.5v3.0a1.5 1.5 0 0 1 -1.5 1.5h0.0a1.5 1.5 0 0 1 -1.5 -1.5v-3.0a1.5 1.5 0 0 1 1.5 -1.5z',
1394
- fill: '#8897A5',
1395
- fillRule: 'nonzero',
1396
- opacity: 1.0,
1397
- },
1398
- {
1399
- d: 'M7.5 12.0a1.5 1.5 0 1 0 3.0 0a1.5 1.5 0 1 0 -3.0 0',
1400
- fill: '#10243E',
1401
- fillRule: 'nonzero',
1402
- opacity: 1.0,
1403
- },
1404
- {
1405
- d: 'M13.5 12.0a1.5 1.5 0 1 0 3.0 0a1.5 1.5 0 1 0 -3.0 0',
1406
- fill: '#10243E',
1407
- fillRule: 'nonzero',
1408
- opacity: 1.0,
1409
- },
1410
- {
1411
- d: 'M8.5 15.4c.9.8 2.08 1.2 3.5 1.2s2.6-.4 3.5-1.2c.24-.2.6-.18.8.06.2.23.17.6-.06.8-1.14.98-2.58 1.46-4.24 1.46s-3.1-.48-4.24-1.46a.58.58 0 0 1-.06-.8c.2-.24.56-.26.8-.06',
1412
- fill: '#10243E',
1413
- fillRule: 'nonzero',
1414
- opacity: 1.0,
1415
- },
1416
- ],
1417
- },
1418
- AllNetworksSolid: {
1419
- viewBox: '0 0 24 24',
1420
- paths: [
1421
- {
1422
- d: 'M15.333 13.998a1.335 1.335 0 1 1 0 2.67 1.335 1.335 0 0 1 0-2.67',
1423
- fill: 'currentColor',
1424
- fillRule: 'nonzero',
1425
- opacity: 1.0,
1426
- },
1427
- {
1428
- d: 'M12 0c6.627 0 12 5.373 12 12s-5.373 12-12 12S0 18.627 0 12 5.373 0 12 0M8 12.668A2 2 0 0 0 6 14.666V16c0 1.103.895 1.997 1.998 1.998h1.334A2 2 0 0 0 11.33 16v-1.334a2 2 0 0 0-1.998-1.998zm7.333 0a2.665 2.665 0 1 0 0 5.33 2.665 2.665 0 0 0 0-5.33M7.999 6.001A2 2 0 0 0 6.001 8v1.334c0 1.103.895 1.998 1.998 1.998h1.334a2 2 0 0 0 1.998-1.998V7.999a2 2 0 0 0-1.998-1.998zm6.667 0A2 2 0 0 0 12.668 8v1.334c0 1.103.895 1.998 1.998 1.998H16a2 2 0 0 0 1.998-1.998V7.999A2 2 0 0 0 16 6.001z',
1429
- fill: 'currentColor',
1430
- fillRule: 'evenodd',
1431
- opacity: 1.0,
1432
- },
1433
- ],
1434
- },
1435
- CrossedSmallSolid: {
1436
- viewBox: '0 0 24 24',
1437
- paths: [
1438
- {
1439
- d: 'M17.87 8.25 14.12 12l3.75 3.75-2.12 2.121-3.75-3.75-3.75 3.75-2.121-2.121L9.879 12l-3.75-3.75 2.12-2.121L12 9.879l3.75-3.75 2.122 2.121Z',
1440
- fill: 'currentColor',
1441
- fillRule: 'nonzero',
1442
- opacity: 1.0,
1443
- },
1444
- ],
1445
- },
1446
- AccountErrorCustom: {
1447
- viewBox: '0 0 18 18',
1448
- paths: [
1449
- {
1450
- d: 'M12.5 12.75a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5',
1451
- fill: '#000',
1452
- fillRule: 'nonzero',
1453
- opacity: 0.447,
1454
- },
1455
- {
1456
- d: 'M0 3.5A3.5 3.5 0 0 1 3.5 0h8.088A2.41 2.41 0 0 1 14 2.412V5h1a3 3 0 0 1 3 3v7a3 3 0 0 1-3 3H4a4 4 0 0 1-4-4zm2 3.163V14a2 2 0 0 0 2 2h11a1 1 0 0 0 1-1V8a1 1 0 0 0-1-1H3.5c-.537 0-1.045-.12-1.5-.337M2 3.5A1.5 1.5 0 0 0 3.5 5H12V2.412A.41.41 0 0 0 11.588 2H3.5A1.5 1.5 0 0 0 2 3.5',
1457
- fill: '#000',
1458
- fillRule: 'evenodd',
1459
- opacity: 0.447,
1460
- },
1461
- ],
1462
- },
1463
- PlusSmallOutline: {
1464
- viewBox: '0 0 24 24',
1465
- paths: [
1466
- {
1467
- d: 'M13 11h5v2h-5v5h-2v-5H6v-2h5V6h2z',
1468
- fill: 'currentColor',
1469
- fillRule: 'nonzero',
1470
- opacity: 1.0,
1471
- },
1472
- ],
1473
- },
1474
- DotHorOutline: {
1475
- viewBox: '0 0 24 24',
1476
- paths: [
1477
- {
1478
- d: 'M6 14H2v-4h4zm8 0h-4v-4h4zm8 0h-4v-4h4z',
1479
- fill: 'currentColor',
1480
- fillRule: 'nonzero',
1481
- opacity: 1.0,
1482
- },
1483
- ],
1484
- },
1485
- ChevronRightSmallOutline: {
1486
- viewBox: '0 0 24 24',
1487
- paths: [
1488
- {
1489
- d: 'M15.414 12 10 17.414 8.586 16l4-4-4-4L10 6.586z',
1490
- fill: 'currentColor',
1491
- fillRule: 'nonzero',
1492
- opacity: 1.0,
1493
- },
1494
- ],
1495
- },
1496
- DragOutline: {
1497
- viewBox: '0 0 24 24',
1498
- paths: [
1499
- {
1500
- d: 'M11 21H7v-4h4zm6 0h-4v-4h4zm-6-7H7v-4h4zm6 0h-4v-4h4zm-6-7H7V3h4zm6 0h-4V3h4z',
1501
- fill: 'currentColor',
1502
- fillRule: 'nonzero',
1503
- opacity: 1.0,
1504
- },
1505
- ],
1506
- },
1507
- PencilOutline: {
1508
- viewBox: '0 0 24 24',
1509
- paths: [
1510
- {
1511
- d: 'M22.414 7.5 7.914 22H2v-5.914l14.5-14.5zM4 16.914V20h3.086l9.5-9.5L13.5 7.414zM14.914 6 18 9.086 19.586 7.5 16.5 4.414z',
1512
- fill: 'currentColor',
1513
- fillRule: 'evenodd',
1514
- opacity: 1.0,
1515
- },
1516
- ],
1517
- },
1518
- CheckboxCheckedCustom: {
1519
- viewBox: '0 0 16 16',
1520
- paths: [
1521
- {
1522
- d: 'M12.204 5.043a1 1 0 0 1 0 1.414l-4.5 4.5a1 1 0 0 1-1.414 0l-2-2a1 1 0 1 1 1.414-1.414l1.293 1.293 3.793-3.793a1 1 0 0 1 1.414 0',
1523
- fill: 'currentColor',
1524
- fillRule: 'evenodd',
1525
- opacity: 1.0,
1526
- },
1527
- ],
1528
- },
1529
- CheckboxIndeterminateCustom: {
1530
- viewBox: '0 0 16 16',
1531
- paths: [
1532
- {
1533
- d: 'M4 8a1 1 0 0 1 1-1h6a1 1 0 0 1 0 2H5a1 1 0 0 1-1-1',
1534
- fill: 'currentColor',
1535
- fillRule: 'evenodd',
1536
- opacity: 1.0,
1537
- },
1538
- ],
1539
- },
1540
- Circle: {
1541
- viewBox: '0 0 24 24',
1542
- paths: [
1543
- {
1544
- d: 'M0 12a12 12 0 1 0 24 0a12 12 0 1 0 -24 0',
1545
- fill: 'currentColor',
1546
- fillRule: 'nonzero',
1547
- opacity: 1,
1548
- },
1549
- ],
1550
- },
1551
- BadgeVerifiedSolid: {
1552
- viewBox: '0 0 24 24',
1553
- paths: [
1554
- {
1555
- d: WEB_MARKET_VERIFIED_PATH,
1556
- fill: 'currentColor',
1557
- fillRule: 'evenodd',
1558
- opacity: 1,
1559
- },
1560
- ],
1561
- },
1562
- };
1563
1182
  function applySelectorIcon(element: HTMLElement, name: string) {
1564
- const icon = selectorIcons[name];
1565
- if (!icon) return;
1566
- element.textContent = '';
1567
- const svg = element.ownerDocument.createElementNS(
1568
- 'http://www.w3.org/2000/svg',
1569
- 'svg'
1570
- );
1571
- svg.setAttribute('viewBox', icon.viewBox);
1572
- svg.setAttribute('width', '24');
1573
- svg.setAttribute('height', '24');
1574
- svg.setAttribute('aria-hidden', 'true');
1575
- icon.paths.forEach((path) => {
1576
- const child = element.ownerDocument.createElementNS(
1183
+ const canonical = selectorIcons[name];
1184
+ if (!canonical) return;
1185
+ if (canonical === 'Circle') {
1186
+ const svg = element.ownerDocument.createElementNS(
1577
1187
  'http://www.w3.org/2000/svg',
1578
- 'path'
1188
+ 'svg'
1579
1189
  );
1580
- child.setAttribute('d', path.d);
1581
- child.setAttribute('fill', path.fill);
1582
- child.setAttribute('fill-rule', path.fillRule);
1583
- child.setAttribute('fill-opacity', String(path.opacity));
1584
- svg.appendChild(child);
1585
- });
1586
- element.appendChild(svg);
1190
+ svg.setAttribute('viewBox', '0 0 24 24');
1191
+ svg.setAttribute('width', '24');
1192
+ svg.setAttribute('height', '24');
1193
+ svg.setAttribute('aria-hidden', 'true');
1194
+ const circle = element.ownerDocument.createElementNS(
1195
+ 'http://www.w3.org/2000/svg',
1196
+ 'circle'
1197
+ );
1198
+ circle.setAttribute('cx', '12');
1199
+ circle.setAttribute('cy', '12');
1200
+ circle.setAttribute('r', '12');
1201
+ circle.setAttribute('fill', 'currentColor');
1202
+ svg.append(circle);
1203
+ element.replaceChildren(svg);
1204
+ return;
1205
+ }
1206
+ element.replaceChildren(createNamedIcon(element.ownerDocument, canonical));
1587
1207
  }
1588
1208
 
1589
1209
  function iconGlyph(name: string): string {
1590
1210
  const normalized = name.toLocaleLowerCase();
1591
- if (normalized === 'dotversolid') return '⋮';
1592
1211
  if (normalized.includes('chevron')) {
1593
1212
  if (normalized.includes('top')) return '⌃';
1594
1213
  if (normalized.includes('bottom')) return '⌄';
@@ -2022,6 +1641,7 @@ function createIconAction(
2022
1641
  if (element.tagName === 'BUTTON') {
2023
1642
  element.setAttribute('type', 'button');
2024
1643
  element.toggleAttribute('disabled', Boolean(disabled));
1644
+ if (name === 'DotVerSolid') element.setAttribute('aria-label', '⋮');
2025
1645
  }
2026
1646
  applySelectorIcon(element, name);
2027
1647
  if (actionKey) setData(element, 'nativeListAction', actionKey);
@@ -1,3 +1,4 @@
1
+ import { createNamedIcon } from '@onekeyfe/react-native-image/icon/dom';
1
2
  import type { ActivityAmount, ActivityRow, LeadingVisual } from '../../models';
2
3
  import { createElement, tagSlot, markActionAnchorSource } from './RowElements';
3
4
  import { RowVisualStyle, type RowPrimitives } from './RowVisual';
@@ -270,41 +271,18 @@ function createHistory(body: HTMLElement, primitives: RowPrimitives) {
270
271
  histories.set(body, v);
271
272
  return v;
272
273
  }
273
- const historyIconPaths: Readonly<Record<string, readonly string[]>> = {
274
- ArrowTopOutline: [
275
- 'M19.414 10 18 11.414l-5-5V21h-2V6.414l-5 5L4.586 10 12 2.586z',
276
- ],
277
- ArrowBottomOutline: [
278
- 'm13 17.586 5-5L19.414 14 12 21.414 4.586 14 6 12.586l5 5V3h2z',
279
- ],
280
- SwitchHorOutline: [
281
- 'm9.414 13-3 3H21v2H6.414l3 3L8 22.414 2.586 17 8 11.586zm12-6L16 12.414 14.586 11l3-3H3V6h14.586l-3-3L16 1.586z',
282
- ],
283
- CoinsOutline: [
284
- 'M9 3a7 7 0 0 1 6.328 4.008 7 7 0 1 1-6.657 9.983A7 7 0 0 1 9 3m5.718 6.008a5 5 0 1 0 .566 9.985 5 5 0 0 0-.566-9.985M9 5a5 5 0 0 0-.941 9.91 7 7 0 0 1 5.11-7.667A4.99 4.99 0 0 0 8.999 5Z',
285
- ],
286
- ShieldCheckDoneOutline: [
287
- 'M15.914 9.75 11 14.664 8.086 11.75 9.5 10.336l1.5 1.5 3.5-3.5z',
288
- 'M12.325 2.055 21 5.036v6.876c0 2.807-1.149 4.83-2.813 6.404-1.615 1.53-3.745 2.66-5.712 3.722l-.475.256-.475-.256c-1.967-1.061-4.097-2.192-5.713-3.722C4.15 16.741 3 14.72 3 11.912V5.036l8.675-2.981.325-.113zM5 6.463v5.45c0 2.165.851 3.686 2.188 4.951 1.275 1.208 2.965 2.154 4.812 3.154 1.847-1 3.537-1.946 4.813-3.154C18.148 15.6 19 14.078 19 11.912v-5.45l-7-2.405z',
289
- ],
290
- UnlockedOutline: [
291
- 'M13 18h-2v-5h2z',
292
- 'M12 2a5 5 0 0 1 5 5h-2a3 3 0 0 0-6 0v2h11v13H4V9h3V7a5 5 0 0 1 5-5M6 20h12v-9H6z',
293
- ],
294
- Document2Outline: [
295
- 'M12 16H8v-2h4zm4-4H8v-2h8zm0-4H8V6h8z',
296
- 'M20 22H4V2h16zM6 20h12V4H6z',
297
- ],
298
- CryptoCoinOutline: [
299
- 'M11 16.387a4.5 4.5 0 0 1 0-8.775V6h2v1.613a4.5 4.5 0 0 1 2.856 2.067l-1.712 1.032a2.5 2.5 0 1 0 0 2.576l1.712 1.032A4.5 4.5 0 0 1 13 16.386V18h-2z',
300
- 'M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10m-2 0a8 8 0 1 0-16 0 8 8 0 0 0 16 0',
301
- ],
302
- ImageSquareWavesOutline: [
303
- 'M14.25 7a2 2 0 1 1 0 4 2 2 0 0 1 0-4',
304
- 'M21 21H3V3h18zM5 16.414V19h12.586L14 15.414l-2 2-4-4zm0-2.828 3-3 4 4 2-2 5 5V5H5z',
305
- ],
306
- DotHorOutline: ['M6 14H2v-4h4zm8 0h-4v-4h4zm8 0h-4v-4h4z'],
307
- };
274
+ const historyIconNames = new Set([
275
+ 'ArrowTopOutline',
276
+ 'ArrowBottomOutline',
277
+ 'SwitchHorOutline',
278
+ 'CoinsOutline',
279
+ 'ShieldCheckDoneOutline',
280
+ 'UnlockedOutline',
281
+ 'Document2Outline',
282
+ 'CryptoCoinOutline',
283
+ 'ImageSquareWavesOutline',
284
+ 'DotHorOutline',
285
+ ]);
308
286
  function historyIcon(
309
287
  node: HTMLElement,
310
288
  source: LeadingVisual | undefined,
@@ -316,8 +294,7 @@ function historyIcon(
316
294
  : source?.kind === 'token'
317
295
  ? source.fallbackIcon?.name
318
296
  : undefined;
319
- const paths = name && historyIconPaths[name];
320
- if (!paths) return;
297
+ if (!name || !historyIconNames.has(name)) return;
321
298
  const placeholder = node.querySelector<HTMLElement>(
322
299
  '.ok-native-list-visual-fallback'
323
300
  );
@@ -334,24 +311,9 @@ function historyIcon(
334
311
  fallback.style.color = source.tintColor;
335
312
  else if (source && 'fallbackIcon' in source && source.fallbackIcon?.tintColor)
336
313
  fallback.style.color = source.fallbackIcon.tintColor;
337
- const svg = node.ownerDocument.createElementNS(
338
- 'http://www.w3.org/2000/svg',
339
- 'svg'
340
- );
341
- svg.setAttribute('viewBox', '0 0 24 24');
314
+ const svg = createNamedIcon(node.ownerDocument, name);
342
315
  svg.setAttribute('width', String(size));
343
316
  svg.setAttribute('height', String(size));
344
- svg.setAttribute('fill', 'currentColor');
345
- svg.setAttribute('aria-hidden', 'true');
346
- for (const d of paths) {
347
- const path = node.ownerDocument.createElementNS(
348
- 'http://www.w3.org/2000/svg',
349
- 'path'
350
- );
351
- path.setAttribute('d', d);
352
- path.setAttribute('fill-rule', 'evenodd');
353
- svg.append(path);
354
- }
355
317
  fallback.replaceChildren(svg);
356
318
  }
357
319
  function bindHistory(
@@ -1,3 +1,4 @@
1
+ import { createNamedIcon } from '@onekeyfe/react-native-image/icon/dom';
1
2
  import type {
2
3
  MarketRow,
3
4
  WebMarketTableCell,
@@ -26,10 +27,6 @@ const views = new WeakMap<HTMLElement, Views>();
26
27
  const columnSignatures = new WeakMap<readonly WebMarketTableColumn[], string>();
27
28
  let sparklineId = 0;
28
29
  const svgNamespace = 'http://www.w3.org/2000/svg';
29
- const outlineStar =
30
- 'm15.455 7.243 7.729 1.123-5.592 5.45 1.32 7.698L12 17.879l-6.911 3.635 1.32-7.698-5.592-5.45 7.728-1.123L12 .24zM9.872 9.071l-4.759.69 3.444 3.358-.814 4.738L12 15.62l.465.245 3.791 1.993-.813-4.739 3.443-3.357-4.758-.69L12 4.758z';
31
- const solidStar =
32
- 'm15.405 7.313 7.84 1.034-5.735 5.443 1.44 7.774L12 17.793l-6.948 3.771 1.44-7.774L.756 8.347l7.839-1.034L12 .178z';
33
30
  function columnsSignature(columns: readonly WebMarketTableColumn[]) {
34
31
  let signature = columnSignatures.get(columns);
35
32
  if (signature === undefined) {
@@ -176,19 +173,13 @@ function action(
176
173
  flexShrink: '0',
177
174
  });
178
175
  }
179
- function icon(document: Document, d: string, size: number): SVGSVGElement {
180
- const svg = document.createElementNS(svgNamespace, 'svg');
181
- svg.setAttribute('viewBox', '0 0 24 24');
176
+ function icon(document: Document, name: string, size: number): SVGSVGElement {
177
+ const svg = createNamedIcon(document, name);
182
178
  svg.setAttribute('width', String(size));
183
179
  svg.setAttribute('height', String(size));
184
- svg.setAttribute('aria-hidden', 'true');
185
- svg.setAttribute('fill', 'currentColor');
186
- const path = document.createElementNS(svgNamespace, 'path');
187
- path.setAttribute('d', d);
188
- path.setAttribute('fill-rule', 'evenodd');
189
- svg.appendChild(path);
190
180
  return svg;
191
181
  }
182
+
192
183
  function drawSparkline(
193
184
  element: HTMLElement,
194
185
  cell: Extract<WebMarketTableCell, { kind: 'sparkline' }>
@@ -453,11 +444,7 @@ function updateCell(
453
444
  );
454
445
  if (badge.actionKey) node.dataset.nativeListHoverAction = 'true';
455
446
  node.textContent = '';
456
- const svg = icon(
457
- document,
458
- 'M9.483 11.458v3.5h-1v-3.5z M10.467 2.698a2.03 2.03 0 0 1 3.065 0l1.358 1.564a.03.03 0 0 0 .028.01l2.046-.325a2.03 2.03 0 0 1 2.347 1.971l.037 2.07q0 .016.014.026l1.776 1.066a2.03 2.03 0 0 1 .532 3.019l-1.304 1.609a.03.03 0 0 0-.005.03l.675 1.956a2.03 2.03 0 0 1-1.533 2.656l-2.033.394a.03.03 0 0 0-.023.019l-.741 1.933a2.03 2.03 0 0 1-2.88 1.05l-1.811-1.006a.03.03 0 0 0-.03 0l-1.811 1.005a2.03 2.03 0 0 1-2.88-1.049l-.742-1.933a.03.03 0 0 0-.023-.019l-2.033-.394a2.03 2.03 0 0 1-1.532-2.656l.675-1.957a.03.03 0 0 0-.005-.029l-1.304-1.61a2.03 2.03 0 0 1 .532-3.018l1.776-1.066a.03.03 0 0 0 .014-.026l.035-2.07a2.03 2.03 0 0 1 2.349-1.97l2.045.324a.03.03 0 0 0 .028-.01zm1.516 3.76a.5.5 0 0 0-.447.276l-1.861 3.724H8.483a1 1 0 0 0-1 1v3.5a1 1 0 0 0 1 1h6.692a2 2 0 0 0 1.981-1.73l.341-2.5a2 2 0 0 0-1.982-2.27h-1.939l.197-1.269a1.5 1.5 0 0 0-1.481-1.731z',
459
- 14
460
- );
447
+ const svg = icon(document, 'BadgeRecognizedSolid', 14);
461
448
  node.appendChild(svg);
462
449
  }
463
450
  title.appendChild(node);
@@ -578,13 +565,7 @@ function updateCell(
578
565
  );
579
566
  button.style.padding = '0';
580
567
  button.style.color = 'var(--nl-icon-subdued)';
581
- button.appendChild(
582
- icon(
583
- document,
584
- 'M21 17h-4v4H3V7h4V3h14zM5 19h10V9H5zM9 7h8v8h2V5H9z',
585
- 14
586
- )
587
- );
568
+ button.appendChild(icon(document, 'Copy3Outline', 14));
588
569
  hoverFrame.appendChild(button);
589
570
  }
590
571
  track.appendChild(hoverFrame);
@@ -613,12 +594,19 @@ function updateCell(
613
594
  : 'var(--nl-icon-subdued)';
614
595
  let svg = button.querySelector('svg');
615
596
  if (!svg) {
616
- svg = icon(document, cell.active ? solidStar : outlineStar, 16);
597
+ svg = icon(document, cell.active ? 'StarSolid' : 'StarOutline', 16);
617
598
  button.appendChild(svg);
618
599
  }
619
- svg
620
- .querySelector('path')
621
- ?.setAttribute('d', cell.active ? solidStar : outlineStar);
600
+ const name = cell.active ? 'StarSolid' : 'StarOutline';
601
+ if (
602
+ !svg
603
+ .querySelector('use')
604
+ ?.getAttribute('href')
605
+ ?.endsWith(`#onekey-${name}`)
606
+ ) {
607
+ const replacement = icon(document, name, 16);
608
+ svg.replaceWith(replacement);
609
+ }
622
610
  if (!button.parentElement) element.appendChild(button);
623
611
  } else if (cell.kind === 'sparkline') drawSparkline(element, cell);
624
612
  else {