@ledgerhq/react-ui 0.8.3-next.0 → 0.9.0-nightly.0

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 (32) hide show
  1. package/lib/assets/cryptoIcons.d.ts +1 -0
  2. package/lib/assets/cryptoIcons.js +1 -0
  3. package/lib/assets/index.d.ts +1 -0
  4. package/lib/assets/index.js +2 -0
  5. package/lib/cjs/assets/cryptoIcons.js +21 -0
  6. package/lib/cjs/assets/cryptoIcons.js.map +7 -0
  7. package/lib/cjs/assets/index.js +2 -0
  8. package/lib/cjs/assets/index.js.map +2 -2
  9. package/lib/cjs/components/asorted/Icon/CryptoIcon.js +53 -0
  10. package/lib/cjs/components/asorted/Icon/CryptoIcon.js.map +7 -0
  11. package/lib/cjs/components/asorted/Icon/CryptoIcons.stories.js +130 -0
  12. package/lib/cjs/components/asorted/Icon/CryptoIcons.stories.js.map +7 -0
  13. package/lib/cjs/components/asorted/Icon/Icons.stories.js +1 -1
  14. package/lib/cjs/components/asorted/Icon/Icons.stories.js.map +1 -1
  15. package/lib/cjs/components/asorted/Icon/index.js +2 -0
  16. package/lib/cjs/components/asorted/Icon/index.js.map +2 -2
  17. package/lib/cjs/components/asorted/index.js +1 -0
  18. package/lib/cjs/components/asorted/index.js.map +2 -2
  19. package/lib/cjs/styles/global.js +22 -0
  20. package/lib/cjs/styles/global.js.map +2 -2
  21. package/lib/cjs/styles/helpers.js +10 -0
  22. package/lib/cjs/styles/helpers.js.map +2 -2
  23. package/lib/components/asorted/Icon/CryptoIcon.d.ts +10 -0
  24. package/lib/components/asorted/Icon/CryptoIcon.js +23 -0
  25. package/lib/components/asorted/Icon/index.d.ts +1 -0
  26. package/lib/components/asorted/Icon/index.js +1 -0
  27. package/lib/components/asorted/index.d.ts +1 -1
  28. package/lib/components/asorted/index.js +1 -1
  29. package/lib/styles/global.js +22 -0
  30. package/lib/styles/helpers.d.ts +1 -0
  31. package/lib/styles/helpers.js +9 -0
  32. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ export * from "@ledgerhq/crypto-icons-ui/react";
@@ -0,0 +1 @@
1
+ export * from "@ledgerhq/crypto-icons-ui/react";
@@ -1,2 +1,3 @@
1
1
  export * as Icons from "@ledgerhq/icons-ui/react";
2
+ export * as CryptoIcons from "@ledgerhq/crypto-icons-ui/react";
2
3
  export * as Logos from "./logos";
@@ -1,4 +1,6 @@
1
1
  import * as Icons_1 from "@ledgerhq/icons-ui/react";
2
2
  export { Icons_1 as Icons };
3
+ import * as CryptoIcons_1 from "@ledgerhq/crypto-icons-ui/react";
4
+ export { CryptoIcons_1 as CryptoIcons };
3
5
  import * as Logos_1 from "./logos";
4
6
  export { Logos_1 as Logos };
@@ -0,0 +1,21 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
+ var __reExport = (target, module2, desc) => {
9
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
10
+ for (let key of __getOwnPropNames(module2))
11
+ if (!__hasOwnProp.call(target, key) && key !== "default")
12
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
13
+ }
14
+ return target;
15
+ };
16
+ var __toModule = (module2) => {
17
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
18
+ };
19
+ __markAsModule(exports);
20
+ __reExport(exports, __toModule(require("@ledgerhq/crypto-icons-ui/react")));
21
+ //# sourceMappingURL=cryptoIcons.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/assets/cryptoIcons.ts"],
4
+ "sourcesContent": ["export * from \"@ledgerhq/crypto-icons-ui/react\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA,oBAAc;",
6
+ "names": []
7
+ }
@@ -22,9 +22,11 @@ var __toModule = (module2) => {
22
22
  return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
23
23
  };
24
24
  __export(exports, {
25
+ CryptoIcons: () => CryptoIcons,
25
26
  Icons: () => Icons,
26
27
  Logos: () => Logos
27
28
  });
28
29
  var Icons = __toModule(require("@ledgerhq/icons-ui/react"));
30
+ var CryptoIcons = __toModule(require("@ledgerhq/crypto-icons-ui/react"));
29
31
  var Logos = __toModule(require("./logos"));
30
32
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/assets/index.ts"],
4
- "sourcesContent": ["export * as Icons from \"@ledgerhq/icons-ui/react\";\nexport * as Logos from \"./logos\";\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AACvB,YAAuB;",
4
+ "sourcesContent": ["export * as Icons from \"@ledgerhq/icons-ui/react\";\nexport * as CryptoIcons from \"@ledgerhq/crypto-icons-ui/react\";\nexport * as Logos from \"./logos\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AACvB,kBAA6B;AAC7B,YAAuB;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,53 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
+ var __export = (target, all) => {
9
+ __markAsModule(target);
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __reExport = (target, module2, desc) => {
14
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
15
+ for (let key of __getOwnPropNames(module2))
16
+ if (!__hasOwnProp.call(target, key) && key !== "default")
17
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
18
+ }
19
+ return target;
20
+ };
21
+ var __toModule = (module2) => {
22
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
23
+ };
24
+ __export(exports, {
25
+ default: () => CryptoIcon_default,
26
+ iconNames: () => iconNames
27
+ });
28
+ var icons = __toModule(require("@ledgerhq/crypto-icons-ui/react"));
29
+ var import_react = __toModule(require("react"));
30
+ var import_styles = __toModule(require("../../../styles"));
31
+ var import_styled_components = __toModule(require("styled-components"));
32
+ const iconNames = Array.from(Object.keys(icons).reduce((set, rawKey) => {
33
+ const key = rawKey;
34
+ if (!set.has(key))
35
+ set.add(key);
36
+ return set;
37
+ }, new Set()));
38
+ const CryptoIcon = ({ name, size = 16, color, backgroundColor }) => {
39
+ const maybeIconName = `${name}`;
40
+ const { colors } = (0, import_styled_components.useTheme)();
41
+ if (maybeIconName in icons) {
42
+ const Component = icons[maybeIconName];
43
+ const defaultColor = Component.DefaultColor;
44
+ const contrastedColor = (0, import_styles.ensureContrast)(color || defaultColor, backgroundColor || colors.background.main);
45
+ return /* @__PURE__ */ import_react.default.createElement(Component, {
46
+ size,
47
+ color: contrastedColor
48
+ });
49
+ }
50
+ return null;
51
+ };
52
+ var CryptoIcon_default = CryptoIcon;
53
+ //# sourceMappingURL=CryptoIcon.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/components/asorted/Icon/CryptoIcon.tsx"],
4
+ "sourcesContent": ["import * as icons from \"@ledgerhq/crypto-icons-ui/react\";\nimport React from \"react\";\nimport { ensureContrast } from \"../../../styles\";\nimport { useTheme } from \"styled-components\";\n\nexport type Props = {\n name: string;\n size?: number;\n color?: string;\n backgroundColor?: string; // overrides background color to ensure contrast with icon color\n};\n\nexport const iconNames = Array.from(\n Object.keys(icons).reduce((set, rawKey) => {\n const key = rawKey;\n if (!set.has(key)) set.add(key);\n return set;\n }, new Set<string>()),\n);\n\nconst CryptoIcon = ({ name, size = 16, color, backgroundColor }: Props): JSX.Element | null => {\n const maybeIconName = `${name}`;\n const { colors } = useTheme();\n if (maybeIconName in icons) {\n // @ts-expect-error FIXME I don't know how to make you happy ts\n const Component = icons[maybeIconName];\n const defaultColor = Component.DefaultColor;\n const contrastedColor = ensureContrast(\n color || defaultColor,\n backgroundColor || colors.background.main,\n );\n return <Component size={size} color={contrastedColor} />;\n }\n return null;\n};\n\nexport default CryptoIcon;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AACvB,mBAAkB;AAClB,oBAA+B;AAC/B,+BAAyB;AASlB,MAAM,YAAY,MAAM,KAC7B,OAAO,KAAK,OAAO,OAAO,CAAC,KAAK,WAAW;AACzC,QAAM,MAAM;AACZ,MAAI,CAAC,IAAI,IAAI;AAAM,QAAI,IAAI;AAC3B,SAAO;AAAA,GACN,IAAI;AAGT,MAAM,aAAa,CAAC,EAAE,MAAM,OAAO,IAAI,OAAO,sBAAiD;AAC7F,QAAM,gBAAgB,GAAG;AACzB,QAAM,EAAE,WAAW;AACnB,MAAI,iBAAiB,OAAO;AAE1B,UAAM,YAAY,MAAM;AACxB,UAAM,eAAe,UAAU;AAC/B,UAAM,kBAAkB,kCACtB,SAAS,cACT,mBAAmB,OAAO,WAAW;AAEvC,WAAO,mDAAC,WAAD;AAAA,MAAW;AAAA,MAAY,OAAO;AAAA;AAAA;AAEvC,SAAO;AAAA;AAGT,IAAO,qBAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,130 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
+ var __export = (target, all) => {
9
+ __markAsModule(target);
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __reExport = (target, module2, desc) => {
14
+ if (module2 && typeof module2 === "object" || typeof module2 === "function") {
15
+ for (let key of __getOwnPropNames(module2))
16
+ if (!__hasOwnProp.call(target, key) && key !== "default")
17
+ __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
18
+ }
19
+ return target;
20
+ };
21
+ var __toModule = (module2) => {
22
+ return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
23
+ };
24
+ __export(exports, {
25
+ ListCryptoIcons: () => ListCryptoIcons,
26
+ SingleCryptoIcon: () => SingleCryptoIcon,
27
+ default: () => CryptoIcons_stories_default
28
+ });
29
+ var import_react = __toModule(require("react"));
30
+ var import_styled_components = __toModule(require("styled-components"));
31
+ var import__ = __toModule(require("../../.."));
32
+ var cryptoIcons = __toModule(require("@ledgerhq/crypto-icons-ui/react"));
33
+ const ScrollArea = (0, import_styled_components.default)(import__.Grid)`
34
+ flex: 1;
35
+ height: auto;
36
+ ${(p) => p.theme.overflow.y};
37
+ `;
38
+ const Container = (0, import_styled_components.default)(import__.Flex).attrs({
39
+ flex: 1,
40
+ flexDirection: "column",
41
+ p: 4
42
+ })`
43
+ overflow: hidden;
44
+ height: calc(100vh - 4em);
45
+ `;
46
+ const IconContainer = (0, import_styled_components.default)(import__.Flex).attrs({
47
+ flexDirection: "column",
48
+ justifyContent: "flex-end",
49
+ alignItems: "center",
50
+ p: 4
51
+ })`
52
+ ${(p) => p.active ? `background-color: ${p.theme.colors.neutral.c20};` : ``}
53
+ border-radius: 4px;
54
+ height: 100px;
55
+ `;
56
+ const Bold = import_styled_components.default.b`
57
+ color: ${(p) => p.theme.colors.primary.c80};
58
+ `;
59
+ const Story = {
60
+ title: "Asorted/CryptoIcons",
61
+ argTypes: {
62
+ size: {
63
+ type: "number",
64
+ description: "Icon size for preview",
65
+ defaultValue: 32
66
+ },
67
+ color: {
68
+ type: "string",
69
+ description: "Color",
70
+ control: { control: "color" }
71
+ },
72
+ name: {
73
+ type: "enum",
74
+ defaultValue: "BTC",
75
+ description: "[Only for single icon], Icon name",
76
+ control: {
77
+ options: Object.keys(cryptoIcons),
78
+ control: {
79
+ type: "select"
80
+ }
81
+ }
82
+ }
83
+ }
84
+ };
85
+ var CryptoIcons_stories_default = Story;
86
+ const ListTemplate = (args) => {
87
+ const color = args.color || void 0;
88
+ const [search, setSearch] = (0, import_react.useState)("");
89
+ const s = search.toLowerCase();
90
+ const regexp = new RegExp(s, "i");
91
+ return /* @__PURE__ */ import_react.default.createElement(Container, null, /* @__PURE__ */ import_react.default.createElement(import__.SearchInput, {
92
+ value: search,
93
+ onChange: setSearch
94
+ }), /* @__PURE__ */ import_react.default.createElement(ScrollArea, {
95
+ gridTemplateColumns: "repeat(auto-fill, 100px);",
96
+ gridTemplateRows: "repeat(auto-fill, 100px);",
97
+ gridGap: 4,
98
+ mt: 4
99
+ }, Object.keys(cryptoIcons).sort((a, b) => {
100
+ return s ? b.toLowerCase().indexOf(s) - a.toLowerCase().indexOf(s) : a.localeCompare(b);
101
+ }).map((name) => {
102
+ const match = name.match(regexp);
103
+ const active = s && match;
104
+ const index = match?.index ?? 0;
105
+ return /* @__PURE__ */ import_react.default.createElement(IconContainer, {
106
+ active: !!active
107
+ }, /* @__PURE__ */ import_react.default.createElement(import__.Flex, {
108
+ flex: 1,
109
+ justifyContent: "center",
110
+ alignItems: "center"
111
+ }, /* @__PURE__ */ import_react.default.createElement(import__.CryptoIcon, {
112
+ key: name,
113
+ name,
114
+ size: args.size,
115
+ color
116
+ })), /* @__PURE__ */ import_react.default.createElement(import__.Text, {
117
+ variant: "extraSmall"
118
+ }, active ? /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, name.substr(0, index), /* @__PURE__ */ import_react.default.createElement(Bold, null, name.substr(index, s.length)), name.substr(index + s.length)) : name));
119
+ })));
120
+ };
121
+ const IconTemplate = (args) => {
122
+ const color = args.color || void 0;
123
+ return /* @__PURE__ */ import_react.default.createElement(import__.CryptoIcon, {
124
+ ...args,
125
+ color
126
+ });
127
+ };
128
+ const ListCryptoIcons = ListTemplate.bind({});
129
+ const SingleCryptoIcon = IconTemplate.bind({});
130
+ //# sourceMappingURL=CryptoIcons.stories.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/components/asorted/Icon/CryptoIcons.stories.tsx"],
4
+ "sourcesContent": ["import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { Text, SearchInput, Flex, Grid, CryptoIcon } from \"../../..\";\nimport * as cryptoIcons from \"@ledgerhq/crypto-icons-ui/react\";\n\ntype CryptoIconsProps = {\n name: keyof typeof cryptoIcons;\n size?: number;\n color?: string;\n};\n\nconst ScrollArea = styled(Grid)`\n flex: 1;\n height: auto;\n ${(p) => p.theme.overflow.y};\n`;\n\nconst Container = styled(Flex).attrs({\n flex: 1,\n flexDirection: \"column\",\n p: 4,\n})`\n overflow: hidden;\n height: calc(100vh - 4em);\n`;\n\nconst IconContainer = styled(Flex).attrs<{ active?: boolean }>({\n flexDirection: \"column\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n p: 4,\n})<{ active?: boolean }>`\n ${(p) => (p.active ? `background-color: ${p.theme.colors.neutral.c20};` : ``)}\n border-radius: 4px;\n height: 100px;\n`;\n\nconst Bold = styled.b`\n color: ${(p) => p.theme.colors.primary.c80};\n`;\n\nconst Story = {\n title: \"Asorted/CryptoIcons\",\n argTypes: {\n size: {\n type: \"number\",\n description: \"Icon size for preview\",\n defaultValue: 32,\n },\n color: {\n type: \"string\",\n description: \"Color\",\n control: { control: \"color\" },\n },\n name: {\n type: \"enum\",\n defaultValue: \"BTC\",\n description: \"[Only for single icon], Icon name\",\n control: {\n options: Object.keys(cryptoIcons),\n control: {\n type: \"select\",\n },\n },\n },\n },\n};\nexport default Story;\n\nconst ListTemplate = (args: CryptoIconsProps) => {\n const color = args.color || undefined;\n const [search, setSearch] = useState(\"\");\n const s = search.toLowerCase();\n const regexp = new RegExp(s, \"i\");\n\n return (\n <Container>\n <SearchInput value={search} onChange={setSearch} />\n <ScrollArea\n gridTemplateColumns=\"repeat(auto-fill, 100px);\"\n gridTemplateRows=\"repeat(auto-fill, 100px);\"\n gridGap={4}\n mt={4}\n >\n {Object.keys(cryptoIcons)\n .sort((a, b) => {\n return s ? b.toLowerCase().indexOf(s) - a.toLowerCase().indexOf(s) : a.localeCompare(b);\n })\n // @ts-expect-error FIXME I don't know how to make you happy ts\n .map((name: keyof typeof cryptoIcons) => {\n const match = name.match(regexp);\n const active = s && match;\n const index = match?.index ?? 0;\n return (\n <IconContainer active={!!active}>\n <Flex flex={1} justifyContent=\"center\" alignItems=\"center\">\n <CryptoIcon key={name} name={name} size={args.size} color={color} />\n </Flex>\n <Text variant=\"extraSmall\">\n {active ? (\n <>\n {name.substr(0, index)}\n <Bold>{name.substr(index, s.length)}</Bold>\n {name.substr(index + s.length)}\n </>\n ) : (\n name\n )}\n </Text>\n </IconContainer>\n );\n })}\n </ScrollArea>\n </Container>\n );\n};\nconst IconTemplate = (args: CryptoIconsProps) => {\n const color = args.color || undefined;\n\n return <CryptoIcon {...args} color={color} />;\n};\n\nexport const ListCryptoIcons = ListTemplate.bind({});\nexport const SingleCryptoIcon = IconTemplate.bind({});\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAChC,+BAAmB;AACnB,eAA0D;AAC1D,kBAA6B;AAQ7B,MAAM,aAAa,sCAAO;AAAA;AAAA;AAAA,IAGtB,CAAC,MAAM,EAAE,MAAM,SAAS;AAAA;AAG5B,MAAM,YAAY,sCAAO,eAAM,MAAM;AAAA,EACnC,MAAM;AAAA,EACN,eAAe;AAAA,EACf,GAAG;AAAA;AAAA;AAAA;AAAA;AAML,MAAM,gBAAgB,sCAAO,eAAM,MAA4B;AAAA,EAC7D,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,GAAG;AAAA;AAAA,IAED,CAAC,MAAO,EAAE,SAAS,qBAAqB,EAAE,MAAM,OAAO,QAAQ,SAAS;AAAA;AAAA;AAAA;AAK5E,MAAM,OAAO,iCAAO;AAAA,WACT,CAAC,MAAM,EAAE,MAAM,OAAO,QAAQ;AAAA;AAGzC,MAAM,QAAQ;AAAA,EACZ,OAAO;AAAA,EACP,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,cAAc;AAAA;AAAA,IAEhB,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS,EAAE,SAAS;AAAA;AAAA,IAEtB,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,MACb,SAAS;AAAA,QACP,SAAS,OAAO,KAAK;AAAA,QACrB,SAAS;AAAA,UACP,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAMhB,IAAO,8BAAQ;AAEf,MAAM,eAAe,CAAC,SAA2B;AAC/C,QAAM,QAAQ,KAAK,SAAS;AAC5B,QAAM,CAAC,QAAQ,aAAa,2BAAS;AACrC,QAAM,IAAI,OAAO;AACjB,QAAM,SAAS,IAAI,OAAO,GAAG;AAE7B,SACE,mDAAC,WAAD,MACE,mDAAC,sBAAD;AAAA,IAAa,OAAO;AAAA,IAAQ,UAAU;AAAA,MACtC,mDAAC,YAAD;AAAA,IACE,qBAAoB;AAAA,IACpB,kBAAiB;AAAA,IACjB,SAAS;AAAA,IACT,IAAI;AAAA,KAEH,OAAO,KAAK,aACV,KAAK,CAAC,GAAG,MAAM;AACd,WAAO,IAAI,EAAE,cAAc,QAAQ,KAAK,EAAE,cAAc,QAAQ,KAAK,EAAE,cAAc;AAAA,KAGtF,IAAI,CAAC,SAAmC;AACvC,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,SAAS,KAAK;AACpB,UAAM,QAAQ,OAAO,SAAS;AAC9B,WACE,mDAAC,eAAD;AAAA,MAAe,QAAQ,CAAC,CAAC;AAAA,OACvB,mDAAC,eAAD;AAAA,MAAM,MAAM;AAAA,MAAG,gBAAe;AAAA,MAAS,YAAW;AAAA,OAChD,mDAAC,qBAAD;AAAA,MAAY,KAAK;AAAA,MAAM;AAAA,MAAY,MAAM,KAAK;AAAA,MAAM;AAAA,SAEtD,mDAAC,eAAD;AAAA,MAAM,SAAQ;AAAA,OACX,SACC,wFACG,KAAK,OAAO,GAAG,QAChB,mDAAC,MAAD,MAAO,KAAK,OAAO,OAAO,EAAE,UAC3B,KAAK,OAAO,QAAQ,EAAE,WAGzB;AAAA;AAAA;AAUpB,MAAM,eAAe,CAAC,SAA2B;AAC/C,QAAM,QAAQ,KAAK,SAAS;AAE5B,SAAO,mDAAC,qBAAD;AAAA,OAAgB;AAAA,IAAM;AAAA;AAAA;AAGxB,MAAM,kBAAkB,aAAa,KAAK;AAC1C,MAAM,mBAAmB,aAAa,KAAK;",
6
+ "names": []
7
+ }
@@ -42,7 +42,7 @@ const Container = (0, import_styled_components.default)(import__.Flex).attrs({
42
42
  p: 4
43
43
  })`
44
44
  overflow: hidden;
45
- height: calc(100vh - 2em);
45
+ height: calc(100vh - 4em);
46
46
  `;
47
47
  const IconContainer = (0, import_styled_components.default)(import__.Flex).attrs({
48
48
  flexDirection: "column",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/asorted/Icon/Icons.stories.tsx"],
4
- "sourcesContent": ["import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport Icon, { iconNames, Props as IconProps } from \"./Icon\";\nimport { useTheme } from \"styled-components\";\nimport { Text, SearchInput, Flex, Grid } from \"../../..\";\n\nconst ScrollArea = styled(Grid)`\n flex: 1;\n height: auto;\n ${(p) => p.theme.overflow.y};\n`;\n\nconst Container = styled(Flex).attrs({\n flex: 1,\n flexDirection: \"column\",\n p: 4,\n})`\n overflow: hidden;\n height: calc(100vh - 2em);\n`;\n\nconst IconContainer = styled(Flex).attrs<{ active?: boolean }>({\n flexDirection: \"column\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n p: 4,\n})<{ active?: boolean }>`\n ${(p) => (p.active ? `background-color: ${p.theme.colors.neutral.c20};` : ``)}\n border-radius: 4px;\n height: 100px;\n`;\n\nconst Bold = styled.b`\n color: ${(p) => p.theme.colors.primary.c80};\n`;\n\nconst Story = {\n title: \"Asorted/Icons\",\n argTypes: {\n weight: {\n type: \"enum\",\n description: \"Weight\",\n defaultValue: \"Medium\",\n control: {\n options: [\"Light\", \"Medium\", \"Regular\", \"Thin\", \"UltraLight\"],\n control: {\n type: \"select\",\n },\n },\n },\n size: {\n type: \"number\",\n description: \"Icon size for preview\",\n defaultValue: 32,\n },\n color: {\n type: \"string\",\n description: \"Color\",\n control: { control: \"color\" },\n },\n name: {\n type: \"enum\",\n defaultValue: \"Activity\",\n description: \"[Only for single icon], Icon name\",\n control: {\n options: iconNames,\n control: {\n type: \"select\",\n },\n },\n },\n },\n};\nexport default Story;\n\nconst ListTemplate = (args: IconProps) => {\n const theme = useTheme();\n const color = args.color || theme.colors.neutral.c100;\n const [search, setSearch] = useState(\"\");\n const s = search.toLowerCase();\n const regexp = new RegExp(s, \"i\");\n\n return (\n <Container>\n <SearchInput value={search} onChange={setSearch} />\n <ScrollArea\n gridTemplateColumns=\"repeat(auto-fill, 100px);\"\n gridTemplateRows=\"repeat(auto-fill, 100px);\"\n gridGap={4}\n mt={4}\n >\n {iconNames\n .sort((a: string, b: string) => {\n return s ? b.toLowerCase().indexOf(s) - a.toLowerCase().indexOf(s) : a.localeCompare(b);\n })\n .map((name) => {\n const match = name.match(regexp);\n const active = s && match;\n const index = match?.index ?? 0;\n return (\n <IconContainer active={!!active}>\n <Flex flex={1} justifyContent=\"center\" alignItems=\"center\">\n <Icon\n key={name}\n name={name}\n weight={args.weight}\n size={args.size}\n color={color}\n />\n </Flex>\n <Text variant=\"extraSmall\">\n {active ? (\n <>\n {name.substr(0, index)}\n <Bold>{name.substr(index, s.length)}</Bold>\n {name.substr(index + s.length)}\n </>\n ) : (\n name\n )}\n </Text>\n </IconContainer>\n );\n })}\n </ScrollArea>\n </Container>\n );\n};\nconst IconTemplate = (args: IconProps) => {\n const theme = useTheme();\n const color = args.color || theme.colors.neutral.c100;\n\n return <Icon {...args} color={color} />;\n};\n\nexport const List = ListTemplate.bind({});\nexport const SingleIcon = IconTemplate.bind({});\n"],
4
+ "sourcesContent": ["import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport Icon, { iconNames, Props as IconProps } from \"./Icon\";\nimport { useTheme } from \"styled-components\";\nimport { Text, SearchInput, Flex, Grid } from \"../../..\";\n\nconst ScrollArea = styled(Grid)`\n flex: 1;\n height: auto;\n ${(p) => p.theme.overflow.y};\n`;\n\nconst Container = styled(Flex).attrs({\n flex: 1,\n flexDirection: \"column\",\n p: 4,\n})`\n overflow: hidden;\n height: calc(100vh - 4em);\n`;\n\nconst IconContainer = styled(Flex).attrs<{ active?: boolean }>({\n flexDirection: \"column\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n p: 4,\n})<{ active?: boolean }>`\n ${(p) => (p.active ? `background-color: ${p.theme.colors.neutral.c20};` : ``)}\n border-radius: 4px;\n height: 100px;\n`;\n\nconst Bold = styled.b`\n color: ${(p) => p.theme.colors.primary.c80};\n`;\n\nconst Story = {\n title: \"Asorted/Icons\",\n argTypes: {\n weight: {\n type: \"enum\",\n description: \"Weight\",\n defaultValue: \"Medium\",\n control: {\n options: [\"Light\", \"Medium\", \"Regular\", \"Thin\", \"UltraLight\"],\n control: {\n type: \"select\",\n },\n },\n },\n size: {\n type: \"number\",\n description: \"Icon size for preview\",\n defaultValue: 32,\n },\n color: {\n type: \"string\",\n description: \"Color\",\n control: { control: \"color\" },\n },\n name: {\n type: \"enum\",\n defaultValue: \"Activity\",\n description: \"[Only for single icon], Icon name\",\n control: {\n options: iconNames,\n control: {\n type: \"select\",\n },\n },\n },\n },\n};\nexport default Story;\n\nconst ListTemplate = (args: IconProps) => {\n const theme = useTheme();\n const color = args.color || theme.colors.neutral.c100;\n const [search, setSearch] = useState(\"\");\n const s = search.toLowerCase();\n const regexp = new RegExp(s, \"i\");\n\n return (\n <Container>\n <SearchInput value={search} onChange={setSearch} />\n <ScrollArea\n gridTemplateColumns=\"repeat(auto-fill, 100px);\"\n gridTemplateRows=\"repeat(auto-fill, 100px);\"\n gridGap={4}\n mt={4}\n >\n {iconNames\n .sort((a: string, b: string) => {\n return s ? b.toLowerCase().indexOf(s) - a.toLowerCase().indexOf(s) : a.localeCompare(b);\n })\n .map((name) => {\n const match = name.match(regexp);\n const active = s && match;\n const index = match?.index ?? 0;\n return (\n <IconContainer active={!!active}>\n <Flex flex={1} justifyContent=\"center\" alignItems=\"center\">\n <Icon\n key={name}\n name={name}\n weight={args.weight}\n size={args.size}\n color={color}\n />\n </Flex>\n <Text variant=\"extraSmall\">\n {active ? (\n <>\n {name.substr(0, index)}\n <Bold>{name.substr(index, s.length)}</Bold>\n {name.substr(index + s.length)}\n </>\n ) : (\n name\n )}\n </Text>\n </IconContainer>\n );\n })}\n </ScrollArea>\n </Container>\n );\n};\nconst IconTemplate = (args: IconProps) => {\n const theme = useTheme();\n const color = args.color || theme.colors.neutral.c100;\n\n return <Icon {...args} color={color} />;\n};\n\nexport const List = ListTemplate.bind({});\nexport const SingleIcon = IconTemplate.bind({});\n"],
5
5
  "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -23,10 +23,12 @@ var __toModule = (module2) => {
23
23
  };
24
24
  __export(exports, {
25
25
  BoxedIcon: () => import_BoxedIcon.default,
26
+ CryptoIcon: () => import_CryptoIcon.default,
26
27
  IconBox: () => import_BoxedIcon.IconBox,
27
28
  default: () => import_Icon.default,
28
29
  iconNames: () => import_Icon.iconNames
29
30
  });
30
31
  var import_Icon = __toModule(require("./Icon"));
31
32
  var import_BoxedIcon = __toModule(require("./BoxedIcon"));
33
+ var import_CryptoIcon = __toModule(require("./CryptoIcon"));
32
34
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/asorted/Icon/index.tsx"],
4
- "sourcesContent": ["export { default, iconNames } from \"./Icon\";\nimport BoxedIcon, { IconBox } from \"./BoxedIcon\";\nexport { BoxedIcon, IconBox };\nexport type { Props } from \"./Icon\";\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAmC;AACnC,uBAAmC;",
4
+ "sourcesContent": ["export { default, iconNames } from \"./Icon\";\nimport BoxedIcon, { IconBox } from \"./BoxedIcon\";\nexport { BoxedIcon, IconBox };\nexport type { Props } from \"./Icon\";\nexport { default as CryptoIcon } from \"./CryptoIcon\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAmC;AACnC,uBAAmC;AAGnC,wBAAsC;",
6
6
  "names": []
7
7
  }
@@ -23,6 +23,7 @@ var __toModule = (module2) => {
23
23
  };
24
24
  __export(exports, {
25
25
  BoxedIcon: () => import_Icon.BoxedIcon,
26
+ CryptoIcon: () => import_Icon.CryptoIcon,
26
27
  Divider: () => import_Divider.default,
27
28
  Icon: () => import_Icon.default,
28
29
  IconBox: () => import_Icon.IconBox,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/asorted/index.ts"],
4
- "sourcesContent": ["export { default as Divider } from \"./Divider\";\nexport { default as Icon, IconBox, BoxedIcon } from \"./Icon\";\nexport { default as Text } from \"./Text\";\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmC;AACnC,kBAAoD;AACpD,kBAAgC;",
4
+ "sourcesContent": ["export { default as Divider } from \"./Divider\";\nexport { default as Icon, IconBox, BoxedIcon, CryptoIcon } from \"./Icon\";\nexport { default as Text } from \"./Text\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmC;AACnC,kBAAgE;AAChE,kBAAgC;",
6
6
  "names": []
7
7
  }
@@ -57,5 +57,27 @@ const GlobalStyle = import_styled_components.createGlobalStyle`
57
57
  ${(props) => typeof props.fontsPath === "string" ? import_styles2.fontStyles : ""}
58
58
 
59
59
  ${import_styles.default}
60
+
61
+ ::-webkit-scrollbar {
62
+ width: 12px;
63
+ height: 12px;
64
+ background-color: rgba(0,0,0,0);
65
+ }
66
+ ::-webkit-scrollbar-button {
67
+ opacity: 0;
68
+ height: 0;
69
+ width: 0;
70
+ }
71
+ ::-webkit-scrollbar-track {
72
+ background-color: rgba(0,0,0,0);
73
+ }
74
+ ::-webkit-scrollbar-thumb {
75
+ box-shadow: inset 0 0 0 12px var(--track-color);
76
+ border: 2px solid rgba(0,0,0,0);
77
+ border-radius: 12px;
78
+ }
79
+ ::-webkit-scrollbar-corner {
80
+ opacity: 0;
81
+ }
60
82
  `;
61
83
  //# sourceMappingURL=global.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/styles/global.ts"],
4
- "sourcesContent": ["import { createGlobalStyle } from \"styled-components\";\n\nimport { rgba } from \"./helpers\";\nimport tippyStyles from \"../components/message/Tooltip/styles\";\nimport { fontStyles } from \"../components/asorted/Text/styles\";\n\nexport type GlobalStyleProps = {\n fontsPath?: string;\n fontMappings?: (name: string) => string;\n};\n\nexport const GlobalStyle = createGlobalStyle<GlobalStyleProps>`\n html {\n box-sizing: border-box;\n }\n\n body {\n font-family: Inter;\n font-size: 100%;\n }\n\n * {\n margin: 0;\n padding: 0;\n font: inherit;\n color: inherit;\n user-select: inherit;\n cursor: inherit;\n outline: none;\n }\n\n ::selection {\n background: ${(p) => rgba(p.theme.colors.primary.c100, 0.1)};\n }\n\n --track-color: rgba(0,0,0,0);\n\n ${(props) => (typeof props.fontsPath === \"string\" ? fontStyles : \"\")}\n\n ${tippyStyles}\n`;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA,+BAAkC;AAElC,qBAAqB;AACrB,oBAAwB;AACxB,qBAA2B;AAOpB,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAqBT,CAAC,MAAM,yBAAK,EAAE,MAAM,OAAO,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,IAKvD,CAAC,UAAW,OAAO,MAAM,cAAc,WAAW,4BAAa;AAAA;AAAA,IAE/D;AAAA;",
4
+ "sourcesContent": ["import { createGlobalStyle } from \"styled-components\";\n\nimport { rgba } from \"./helpers\";\nimport tippyStyles from \"../components/message/Tooltip/styles\";\nimport { fontStyles } from \"../components/asorted/Text/styles\";\n\nexport type GlobalStyleProps = {\n fontsPath?: string;\n fontMappings?: (name: string) => string;\n};\n\nexport const GlobalStyle = createGlobalStyle<GlobalStyleProps>`\n html {\n box-sizing: border-box;\n }\n\n body {\n font-family: Inter;\n font-size: 100%;\n }\n\n * {\n margin: 0;\n padding: 0;\n font: inherit;\n color: inherit;\n user-select: inherit;\n cursor: inherit;\n outline: none;\n }\n\n ::selection {\n background: ${(p) => rgba(p.theme.colors.primary.c100, 0.1)};\n }\n\n --track-color: rgba(0,0,0,0);\n\n ${(props) => (typeof props.fontsPath === \"string\" ? fontStyles : \"\")}\n\n ${tippyStyles}\n\n ::-webkit-scrollbar {\n width: 12px;\n height: 12px;\n background-color: rgba(0,0,0,0);\n }\n ::-webkit-scrollbar-button {\n opacity: 0;\n height: 0;\n width: 0;\n }\n ::-webkit-scrollbar-track {\n background-color: rgba(0,0,0,0);\n }\n ::-webkit-scrollbar-thumb {\n box-shadow: inset 0 0 0 12px var(--track-color);\n border: 2px solid rgba(0,0,0,0);\n border-radius: 12px;\n }\n ::-webkit-scrollbar-corner {\n opacity: 0;\n }\n`;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA,+BAAkC;AAElC,qBAAqB;AACrB,oBAAwB;AACxB,qBAA2B;AAOpB,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAqBT,CAAC,MAAM,yBAAK,EAAE,MAAM,OAAO,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,IAKvD,CAAC,UAAW,OAAO,MAAM,cAAc,WAAW,4BAAa;AAAA;AAAA,IAE/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -23,6 +23,7 @@ var __toModule = (module2) => {
23
23
  };
24
24
  __export(exports, {
25
25
  darken: () => darken,
26
+ ensureContrast: () => ensureContrast,
26
27
  ff: () => ff,
27
28
  lighten: () => lighten,
28
29
  mix: () => mix,
@@ -44,4 +45,13 @@ const ff = (v) => {
44
45
  fontStyle: style
45
46
  };
46
47
  };
48
+ const ensureContrast = (color1, color2) => {
49
+ const colorL1 = (0, import_color.default)(color1).luminosity() + 0.05;
50
+ const colorL2 = (0, import_color.default)(color2).luminosity() + 0.05;
51
+ const lRatio = colorL1 > colorL2 ? colorL1 / colorL2 : colorL2 / colorL1;
52
+ if (lRatio < 1.5) {
53
+ return (0, import_color.default)(color1).rotate(180).negate().string();
54
+ }
55
+ return color1;
56
+ };
47
57
  //# sourceMappingURL=helpers.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/styles/helpers.ts"],
4
- "sourcesContent": ["import Color from \"color\";\n\nimport { fontFamilies } from \"./theme\";\n\nexport const rgba = (c: string, a: number): string => Color(c).alpha(a).rgb().toString();\n\nexport const darken = (c: string, a: number): string => Color(c).darken(a).toString();\n\nexport const lighten = (c: string, a: number): string => Color(c).lighten(a).toString();\n\nexport const mix = (c: string, b: string, a: number): string =>\n Color(c).mix(Color(b), a).toString();\n\nexport const ff = (v: string) => {\n const [font, type = \"Regular\"] = v.split(\"|\");\n // @ts-expect-error FIXME\n const { style, weight } = fontFamilies[font][type];\n // @ts-expect-error FIXME\n const fallback: string = fontFamilies[font].fallback ?? \"Arial\";\n\n return {\n fontFamily: `${font}, ${fallback}`,\n fontWeight: weight,\n fontStyle: style,\n };\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAElB,mBAA6B;AAEtB,MAAM,OAAO,CAAC,GAAW,MAAsB,0BAAM,GAAG,MAAM,GAAG,MAAM;AAEvE,MAAM,SAAS,CAAC,GAAW,MAAsB,0BAAM,GAAG,OAAO,GAAG;AAEpE,MAAM,UAAU,CAAC,GAAW,MAAsB,0BAAM,GAAG,QAAQ,GAAG;AAEtE,MAAM,MAAM,CAAC,GAAW,GAAW,MACxC,0BAAM,GAAG,IAAI,0BAAM,IAAI,GAAG;AAErB,MAAM,KAAK,CAAC,MAAc;AAC/B,QAAM,CAAC,MAAM,OAAO,aAAa,EAAE,MAAM;AAEzC,QAAM,EAAE,OAAO,WAAW,0BAAa,MAAM;AAE7C,QAAM,WAAmB,0BAAa,MAAM,YAAY;AAExD,SAAO;AAAA,IACL,YAAY,GAAG,SAAS;AAAA,IACxB,YAAY;AAAA,IACZ,WAAW;AAAA;AAAA;",
4
+ "sourcesContent": ["import Color from \"color\";\n\nimport { fontFamilies } from \"./theme\";\n\nexport const rgba = (c: string, a: number): string => Color(c).alpha(a).rgb().toString();\n\nexport const darken = (c: string, a: number): string => Color(c).darken(a).toString();\n\nexport const lighten = (c: string, a: number): string => Color(c).lighten(a).toString();\n\nexport const mix = (c: string, b: string, a: number): string =>\n Color(c).mix(Color(b), a).toString();\n\nexport const ff = (v: string) => {\n const [font, type = \"Regular\"] = v.split(\"|\");\n // @ts-expect-error FIXME\n const { style, weight } = fontFamilies[font][type];\n // @ts-expect-error FIXME\n const fallback: string = fontFamilies[font].fallback ?? \"Arial\";\n\n return {\n fontFamily: `${font}, ${fallback}`,\n fontWeight: weight,\n fontStyle: style,\n };\n};\n\nexport const ensureContrast = (color1: string, color2: string) => {\n const colorL1 = Color(color1).luminosity() + 0.05;\n const colorL2 = Color(color2).luminosity() + 0.05;\n\n const lRatio = colorL1 > colorL2 ? colorL1 / colorL2 : colorL2 / colorL1;\n\n if (lRatio < 1.5) {\n return Color(color1).rotate(180).negate().string();\n }\n return color1;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAElB,mBAA6B;AAEtB,MAAM,OAAO,CAAC,GAAW,MAAsB,0BAAM,GAAG,MAAM,GAAG,MAAM;AAEvE,MAAM,SAAS,CAAC,GAAW,MAAsB,0BAAM,GAAG,OAAO,GAAG;AAEpE,MAAM,UAAU,CAAC,GAAW,MAAsB,0BAAM,GAAG,QAAQ,GAAG;AAEtE,MAAM,MAAM,CAAC,GAAW,GAAW,MACxC,0BAAM,GAAG,IAAI,0BAAM,IAAI,GAAG;AAErB,MAAM,KAAK,CAAC,MAAc;AAC/B,QAAM,CAAC,MAAM,OAAO,aAAa,EAAE,MAAM;AAEzC,QAAM,EAAE,OAAO,WAAW,0BAAa,MAAM;AAE7C,QAAM,WAAmB,0BAAa,MAAM,YAAY;AAExD,SAAO;AAAA,IACL,YAAY,GAAG,SAAS;AAAA,IACxB,YAAY;AAAA,IACZ,WAAW;AAAA;AAAA;AAIR,MAAM,iBAAiB,CAAC,QAAgB,WAAmB;AAChE,QAAM,UAAU,0BAAM,QAAQ,eAAe;AAC7C,QAAM,UAAU,0BAAM,QAAQ,eAAe;AAE7C,QAAM,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU;AAEjE,MAAI,SAAS,KAAK;AAChB,WAAO,0BAAM,QAAQ,OAAO,KAAK,SAAS;AAAA;AAE5C,SAAO;AAAA;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ export declare type Props = {
3
+ name: string;
4
+ size?: number;
5
+ color?: string;
6
+ backgroundColor?: string;
7
+ };
8
+ export declare const iconNames: string[];
9
+ declare const CryptoIcon: ({ name, size, color, backgroundColor }: Props) => JSX.Element | null;
10
+ export default CryptoIcon;
@@ -0,0 +1,23 @@
1
+ import * as icons from "@ledgerhq/crypto-icons-ui/react";
2
+ import React from "react";
3
+ import { ensureContrast } from "../../../styles";
4
+ import { useTheme } from "styled-components";
5
+ export const iconNames = Array.from(Object.keys(icons).reduce((set, rawKey) => {
6
+ const key = rawKey;
7
+ if (!set.has(key))
8
+ set.add(key);
9
+ return set;
10
+ }, new Set()));
11
+ const CryptoIcon = ({ name, size = 16, color, backgroundColor }) => {
12
+ const maybeIconName = `${name}`;
13
+ const { colors } = useTheme();
14
+ if (maybeIconName in icons) {
15
+ // @ts-expect-error FIXME I don't know how to make you happy ts
16
+ const Component = icons[maybeIconName];
17
+ const defaultColor = Component.DefaultColor;
18
+ const contrastedColor = ensureContrast(color || defaultColor, backgroundColor || colors.background.main);
19
+ return React.createElement(Component, { size: size, color: contrastedColor });
20
+ }
21
+ return null;
22
+ };
23
+ export default CryptoIcon;
@@ -2,3 +2,4 @@ export { default, iconNames } from "./Icon";
2
2
  import BoxedIcon, { IconBox } from "./BoxedIcon";
3
3
  export { BoxedIcon, IconBox };
4
4
  export type { Props } from "./Icon";
5
+ export { default as CryptoIcon } from "./CryptoIcon";
@@ -1,3 +1,4 @@
1
1
  export { default, iconNames } from "./Icon";
2
2
  import BoxedIcon, { IconBox } from "./BoxedIcon";
3
3
  export { BoxedIcon, IconBox };
4
+ export { default as CryptoIcon } from "./CryptoIcon";
@@ -1,3 +1,3 @@
1
1
  export { default as Divider } from "./Divider";
2
- export { default as Icon, IconBox, BoxedIcon } from "./Icon";
2
+ export { default as Icon, IconBox, BoxedIcon, CryptoIcon } from "./Icon";
3
3
  export { default as Text } from "./Text";
@@ -1,3 +1,3 @@
1
1
  export { default as Divider } from "./Divider";
2
- export { default as Icon, IconBox, BoxedIcon } from "./Icon";
2
+ export { default as Icon, IconBox, BoxedIcon, CryptoIcon } from "./Icon";
3
3
  export { default as Text } from "./Text";
@@ -31,4 +31,26 @@ export const GlobalStyle = createGlobalStyle `
31
31
  ${(props) => (typeof props.fontsPath === "string" ? fontStyles : "")}
32
32
 
33
33
  ${tippyStyles}
34
+
35
+ ::-webkit-scrollbar {
36
+ width: 12px;
37
+ height: 12px;
38
+ background-color: rgba(0,0,0,0);
39
+ }
40
+ ::-webkit-scrollbar-button {
41
+ opacity: 0;
42
+ height: 0;
43
+ width: 0;
44
+ }
45
+ ::-webkit-scrollbar-track {
46
+ background-color: rgba(0,0,0,0);
47
+ }
48
+ ::-webkit-scrollbar-thumb {
49
+ box-shadow: inset 0 0 0 12px var(--track-color);
50
+ border: 2px solid rgba(0,0,0,0);
51
+ border-radius: 12px;
52
+ }
53
+ ::-webkit-scrollbar-corner {
54
+ opacity: 0;
55
+ }
34
56
  `;
@@ -7,3 +7,4 @@ export declare const ff: (v: string) => {
7
7
  fontWeight: any;
8
8
  fontStyle: any;
9
9
  };
10
+ export declare const ensureContrast: (color1: string, color2: string) => string;
@@ -17,3 +17,12 @@ export const ff = (v) => {
17
17
  fontStyle: style,
18
18
  };
19
19
  };
20
+ export const ensureContrast = (color1, color2) => {
21
+ const colorL1 = Color(color1).luminosity() + 0.05;
22
+ const colorL2 = Color(color2).luminosity() + 0.05;
23
+ const lRatio = colorL1 > colorL2 ? colorL1 / colorL2 : colorL2 / colorL1;
24
+ if (lRatio < 1.5) {
25
+ return Color(color1).rotate(180).negate().string();
26
+ }
27
+ return color1;
28
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/react-ui",
3
- "version": "0.8.3-next.0",
3
+ "version": "0.9.0-nightly.0",
4
4
  "description": "Ledger Live - Desktop UI",
5
5
  "author": "Ledger Live Team <team-live@ledger.fr>",
6
6
  "repository": {
@@ -58,6 +58,7 @@
58
58
  "dependencies": {
59
59
  "@floating-ui/react-dom": "^0.4.0",
60
60
  "@ledgerhq/icons-ui": "^0.2.7",
61
+ "@ledgerhq/crypto-icons-ui": "^0.2.0-nightly.0",
61
62
  "@ledgerhq/ui-shared": "^0.1.9",
62
63
  "@tippyjs/react": "^4.2.6",
63
64
  "@types/color": "^3.0.2",
@@ -116,7 +117,7 @@
116
117
  "scripts": {
117
118
  "storybook": "start-storybook -p 6006 -s ./src",
118
119
  "build": "tsc -p tsconfig.prod.json && node scripts/transpile && node scripts/postBuild",
119
- "prebuild:storybook": "pnpm -F ui-shared -F icons-ui build",
120
+ "prebuild:storybook": "pnpm -F ui-shared -F icons-ui -F crypto-icons-ui build",
120
121
  "build:storybook": "build-storybook -s ./src",
121
122
  "watch": "tsc -p tsconfig.prod.json --watch",
122
123
  "clean": "rimraf lib",