@fragmentsx/figma-converter 0.0.1

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 (63) hide show
  1. package/package.json +31 -0
  2. package/playground/index.html +12 -0
  3. package/playground/node_modules/.bin/tsc +17 -0
  4. package/playground/node_modules/.bin/tsserver +17 -0
  5. package/playground/node_modules/.bin/vite +17 -0
  6. package/playground/package.json +25 -0
  7. package/playground/src/123.json +527 -0
  8. package/playground/src/App.tsx +534 -0
  9. package/playground/src/doc.json +4024 -0
  10. package/playground/src/main.tsx +4 -0
  11. package/playground/tsconfig.json +12 -0
  12. package/playground/vite.config.ts +59 -0
  13. package/src/__tests__/fixtures/simple-frame.json +70 -0
  14. package/src/__tests__/fixtures/with-effects.json +19 -0
  15. package/src/__tests__/fixtures/with-image.json +16 -0
  16. package/src/__tests__/integration.test.ts +113 -0
  17. package/src/__tests__/validation.test.ts +108 -0
  18. package/src/converter.test.ts +206 -0
  19. package/src/converter.ts +165 -0
  20. package/src/diff/__tests__/buildBreakpointFrame.test.ts +43 -0
  21. package/src/diff/__tests__/computeDelta.test.ts +33 -0
  22. package/src/diff/__tests__/matchNodes.test.ts +52 -0
  23. package/src/diff/buildBreakpointFrame.ts +99 -0
  24. package/src/diff/computeDelta.ts +40 -0
  25. package/src/diff/index.ts +3 -0
  26. package/src/diff/matchNodes.ts +46 -0
  27. package/src/images/__tests__/collectImages.test.ts +30 -0
  28. package/src/images/collectImages.ts +29 -0
  29. package/src/index.ts +16 -0
  30. package/src/mappers/__tests__/borderRadius.test.ts +28 -0
  31. package/src/mappers/__tests__/layout.test.ts +71 -0
  32. package/src/mappers/__tests__/nodeMapper.test.ts +394 -0
  33. package/src/mappers/__tests__/position.test.ts +67 -0
  34. package/src/mappers/__tests__/size.test.ts +69 -0
  35. package/src/mappers/borderRadius.ts +18 -0
  36. package/src/mappers/index.ts +5 -0
  37. package/src/mappers/layout.ts +58 -0
  38. package/src/mappers/nodeMapper.ts +330 -0
  39. package/src/mappers/position.ts +71 -0
  40. package/src/mappers/size.ts +39 -0
  41. package/src/styles/__tests__/border.test.ts +19 -0
  42. package/src/styles/__tests__/effects.test.ts +60 -0
  43. package/src/styles/__tests__/gradientFallback.test.ts +96 -0
  44. package/src/styles/__tests__/paint.test.ts +126 -0
  45. package/src/styles/border.ts +40 -0
  46. package/src/styles/effects.ts +40 -0
  47. package/src/styles/gradientFallback.ts +113 -0
  48. package/src/styles/index.ts +3 -0
  49. package/src/styles/paint.ts +164 -0
  50. package/src/text/__tests__/textToHtml.test.ts +66 -0
  51. package/src/text/textToHtml.ts +83 -0
  52. package/src/types/figma.ts +127 -0
  53. package/src/types/index.ts +2 -0
  54. package/src/types/result.ts +115 -0
  55. package/src/utils/__tests__/color.test.ts +15 -0
  56. package/src/utils/__tests__/id.test.ts +20 -0
  57. package/src/utils/color.ts +20 -0
  58. package/src/utils/id.ts +9 -0
  59. package/src/utils/index.ts +2 -0
  60. package/src/validation.ts +94 -0
  61. package/tsconfig.json +15 -0
  62. package/vite.config.ts +26 -0
  63. package/vitest.config.ts +14 -0
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@fragmentsx/figma-converter",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "main": "./dist/index.cjs.js",
6
+ "module": "./dist/index.es.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.es.js",
11
+ "require": "./dist/index.cjs.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "dependencies": {
16
+ "@fragmentsx/definition": "0.2.2",
17
+ "@fragmentsx/utils": "0.2.0"
18
+ },
19
+ "devDependencies": {
20
+ "vite": "^6.1.0",
21
+ "vite-plugin-dts": "^4.5.0",
22
+ "vitest": "^4.0.0",
23
+ "typescript": "^5.5.4"
24
+ },
25
+ "scripts": {
26
+ "build": "vite build",
27
+ "dev": "vite build --watch",
28
+ "test": "vitest run",
29
+ "lint": "eslint src --fix"
30
+ }
31
+ }
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="ru">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Converter Playground</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ <script type="module" src="/src/main.tsx"></script>
11
+ </body>
12
+ </html>
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/home/runner/work/fragments/fragments/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/bin/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/typescript@5.8.3/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="/home/runner/work/fragments/fragments/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/bin/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/typescript@5.8.3/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/node_modules:$NODE_PATH"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
15
+ else
16
+ exec node "$basedir/../typescript/bin/tsc" "$@"
17
+ fi
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/home/runner/work/fragments/fragments/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/bin/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/typescript@5.8.3/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="/home/runner/work/fragments/fragments/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/bin/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/typescript@5.8.3/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/node_modules:$NODE_PATH"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
15
+ else
16
+ exec node "$basedir/../typescript/bin/tsserver" "$@"
17
+ fi
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*) basedir=`cygpath -w "$basedir"`;;
6
+ esac
7
+
8
+ if [ -z "$NODE_PATH" ]; then
9
+ export NODE_PATH="/home/runner/work/fragments/fragments/node_modules/.pnpm/vite@6.3.5_@types+node@22.19.11_jiti@2.6.1_terser@5.46.0_yaml@2.4.2/node_modules/vite/bin/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/vite@6.3.5_@types+node@22.19.11_jiti@2.6.1_terser@5.46.0_yaml@2.4.2/node_modules/vite/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/vite@6.3.5_@types+node@22.19.11_jiti@2.6.1_terser@5.46.0_yaml@2.4.2/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/node_modules"
10
+ else
11
+ export NODE_PATH="/home/runner/work/fragments/fragments/node_modules/.pnpm/vite@6.3.5_@types+node@22.19.11_jiti@2.6.1_terser@5.46.0_yaml@2.4.2/node_modules/vite/bin/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/vite@6.3.5_@types+node@22.19.11_jiti@2.6.1_terser@5.46.0_yaml@2.4.2/node_modules/vite/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/vite@6.3.5_@types+node@22.19.11_jiti@2.6.1_terser@5.46.0_yaml@2.4.2/node_modules:/home/runner/work/fragments/fragments/node_modules/.pnpm/node_modules:$NODE_PATH"
12
+ fi
13
+ if [ -x "$basedir/node" ]; then
14
+ exec "$basedir/node" "$basedir/../vite/bin/vite.js" "$@"
15
+ else
16
+ exec node "$basedir/../vite/bin/vite.js" "$@"
17
+ fi
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@fragmentsx/converter-playground",
3
+ "version": "0.0.1",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build"
9
+ },
10
+ "dependencies": {
11
+ "react": "^18.3.1",
12
+ "react-dom": "^18.3.1",
13
+ "@fragmentsx/figma-converter": "workspace:*",
14
+ "@fragmentsx/client-core": "workspace:*",
15
+ "@fragmentsx/render-react": "workspace:*",
16
+ "@fragmentsx/definition": "workspace:*"
17
+ },
18
+ "devDependencies": {
19
+ "@vitejs/plugin-react": "^4.3.0",
20
+ "vite": "^6.1.0",
21
+ "typescript": "^5.5.4",
22
+ "@types/react": "^18.3.0",
23
+ "@types/react-dom": "^18.3.0"
24
+ }
25
+ }
@@ -0,0 +1,527 @@
1
+ {
2
+ "_type": "Fragment",
3
+ "_id": "4eef5cfcbee4ae",
4
+ "children": [
5
+ {
6
+ "_type": "Frame",
7
+ "_id": "db328de8660f00",
8
+ "name": "desktop",
9
+ "parent": "$Fragment:4eef5cfcbee4ae",
10
+ "children": [
11
+ {
12
+ "_type": "Frame",
13
+ "_id": "19cd6d3d79c045",
14
+ "name": "Frame 5",
15
+ "parent": "$Frame:db328de8660f00",
16
+ "children": [],
17
+ "paint": {
18
+ "_type": "Paint",
19
+ "_id": "8e00b4f78093b6",
20
+ "parent": "$Frame:19cd6d3d79c045",
21
+ "overrides": [],
22
+ "type": "Solid",
23
+ "solid": "#cd6464"
24
+ },
25
+ "border": {
26
+ "_type": "Border",
27
+ "_id": "323df5968fa6c7",
28
+ "parent": "$Frame:19cd6d3d79c045",
29
+ "overrides": [],
30
+ "type": "None"
31
+ },
32
+ "borderRadius": "0px 0px 0px 0px",
33
+ "layerMode": "none",
34
+ "width": 95.5,
35
+ "height": 40,
36
+ "widthType": "Fill",
37
+ "heightType": "Fixed",
38
+ "position": "relative",
39
+ "opacity": 1,
40
+ "rotate": 0,
41
+ "overflow": "hidden",
42
+ "visible": true,
43
+ "overrides": []
44
+ },
45
+ {
46
+ "_type": "Frame",
47
+ "_id": "0ca5b3266657f9",
48
+ "name": "Frame 6",
49
+ "parent": "$Frame:db328de8660f00",
50
+ "children": [],
51
+ "paint": {
52
+ "_type": "Paint",
53
+ "_id": "7bac21bd7c0567",
54
+ "parent": "$Frame:0ca5b3266657f9",
55
+ "overrides": [],
56
+ "type": "Solid",
57
+ "solid": "#cd6464"
58
+ },
59
+ "border": {
60
+ "_type": "Border",
61
+ "_id": "349d71aa58f49e",
62
+ "parent": "$Frame:0ca5b3266657f9",
63
+ "overrides": [],
64
+ "type": "None"
65
+ },
66
+ "borderRadius": "0px 0px 0px 0px",
67
+ "layerMode": "none",
68
+ "width": 95.5,
69
+ "height": 40,
70
+ "widthType": "Fill",
71
+ "heightType": "Fixed",
72
+ "position": "relative",
73
+ "opacity": 1,
74
+ "rotate": 0,
75
+ "overflow": "hidden",
76
+ "visible": true,
77
+ "overrides": []
78
+ },
79
+ {
80
+ "_type": "Frame",
81
+ "_id": "90e22c4e973bf3",
82
+ "name": "Registered",
83
+ "parent": "$Frame:db328de8660f00",
84
+ "children": [
85
+ {
86
+ "_type": "Frame",
87
+ "_id": "b5200a399bb6c9",
88
+ "name": "carbon:user-avatar-filled",
89
+ "parent": "$Frame:90e22c4e973bf3",
90
+ "children": [
91
+ {
92
+ "_type": "Frame",
93
+ "_id": "81aa707e759113",
94
+ "name": "Vector",
95
+ "parent": "$Frame:b5200a399bb6c9",
96
+ "children": [],
97
+ "paint": {
98
+ "_type": "Paint",
99
+ "_id": "0c4d323d601e34",
100
+ "parent": "$Frame:81aa707e759113",
101
+ "type": "Image",
102
+ "image": {
103
+ "_type": "ImagePaint",
104
+ "_id": "2ef690b8c6b1c7",
105
+ "parent": "$Paint:0c4d323d601e34",
106
+ "src": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyLjM3NDUgMTEuNDY2MUMxMy4wOTI2IDEwLjYwMjIgMTMuNTkyIDkuNTc4IDEzLjgzMDUgOC40ODAyMkMxNC4wNjkgNy4zODI0NCAxNC4wMzk2IDYuMjQzMzYgMTMuNzQ0OCA1LjE1OTM0QzEzLjQ1IDQuMDc1MzEgMTIuODk4NSAzLjA3ODI0IDEyLjEzNjggMi4yNTI0N0MxMS4zNzUyIDEuNDI2NjkgMTAuNDI1OCAwLjc5NjUwNiA5LjM2OTEzIDAuNDE1MjIxQzguMzEyNDIgMC4wMzM5MzU3IDcuMTc5NDMgLTAuMDg3MjMxOSA2LjA2NTk4IDAuMDYxOTY4QzQuOTUyNTQgMC4yMTExNjggMy44OTE0MSAwLjYyNjM0NiAyLjk3MjM2IDEuMjcyMzhDMi4wNTMzMSAxLjkxODQyIDEuMzAzMzcgMi43NzYzIDAuNzg1OTk2IDMuNzczNDZDMC4yNjg2MTkgNC43NzA2MyAtMC4wMDA5ODEyOTYgNS44Nzc3MyAyLjY4MzgyZS0wNiA3LjAwMTEzQzAuMDAwNDIzMDEgOC42MzQyMSAwLjU3NTkxMyAxMC4yMTUgMS42MjU1IDExLjQ2NjFMMS42MTU1IDExLjQ3NDZDMS42NTA1IDExLjUxNjYgMS42OTA1IDExLjU1MjYgMS43MjY1IDExLjU5NDFDMS43NzE1IDExLjY0NTYgMS44MiAxMS42OTQxIDEuODY2NSAxMS43NDQxQzIuMDA1ODQgMTEuODk2NSAyLjE1MDg0IDEyLjA0MTUgMi4zMDE1IDEyLjE3OTFDMi4zNDgxNyAxMi4yMjA1IDIuMzk0ODQgMTIuMjYwOCAyLjQ0MTUgMTIuMzAwMUMyLjYwMTUgMTIuNDM4NSAyLjc2NjUgMTIuNTY4OCAyLjkzNjUgMTIuNjkxMUMyLjk1ODUgMTIuNzA2MSAyLjk3ODUgMTIuNzI1NiAzLjAwMDUgMTIuNzQxMVYxMi43MzUxQzQuMTcxNTMgMTMuNTU5MyA1LjU2ODU0IDE0LjAwMTYgNy4wMDA1IDE0LjAwMTZDOC40MzI0NyAxNC4wMDE2IDkuODI5NDggMTMuNTU5MyAxMS4wMDA1IDEyLjczNTFWMTIuNzQxMUMxMS4wMjI1IDEyLjcyNTYgMTEuMDQyIDEyLjcwNjEgMTEuMDY0NSAxMi42OTExQzExLjIzNDUgMTIuNTY4NSAxMS4zOTk1IDEyLjQzODEgMTEuNTU5NSAxMi4zMDAxQzExLjYwNjIgMTIuMjYwNSAxMS42NTI4IDEyLjIyMDEgMTEuNjk5NSAxMi4xNzkxQzExLjg0OTggMTIuMDQxNSAxMS45OTQ4IDExLjg5NjUgMTIuMTM0NSAxMS43NDQxQzEyLjE4MSAxMS42OTQxIDEyLjIyOSAxMS42NDU2IDEyLjI3NDUgMTEuNTk0MUMxMi4zMSAxMS41NTI2IDEyLjM1MDUgMTEuNTE2NiAxMi4zODU1IDExLjQ3NDFMMTIuMzc0NSAxMS40NjYxWk03IDMuMDAxMTNDNy40NDUwMSAzLjAwMTEzIDcuODgwMDMgMy4xMzMwOSA4LjI1MDA0IDMuMzgwMzJDOC42MjAwNSAzLjYyNzU1IDguOTA4NDMgMy45Nzg5NiA5LjA3ODczIDQuMzkwMDlDOS4yNDkwMyA0LjgwMTIyIDkuMjkzNTkgNS4yNTM2MiA5LjIwNjc3IDUuNjkwMDhDOS4xMTk5NSA2LjEyNjU0IDguOTA1NjYgNi41Mjc0NSA4LjU5MDk5IDYuODQyMTJDOC4yNzYzMiA3LjE1Njc5IDcuODc1NDEgNy4zNzEwOCA3LjQzODk2IDcuNDU3OUM3LjAwMjUgNy41NDQ3MSA2LjU1MDEgNy41MDAxNSA2LjEzODk3IDcuMzI5ODZDNS43Mjc4MyA3LjE1OTU2IDUuMzc2NDMgNi44NzExNyA1LjEyOTIgNi41MDExNkM0Ljg4MTk2IDYuMTMxMTUgNC43NSA1LjY5NjE0IDQuNzUgNS4yNTExM0M0Ljc1IDQuNjU0MzkgNC45ODcwNiA0LjA4MjA5IDUuNDA5MDEgMy42NjAxNEM1LjgzMDk3IDMuMjM4MTggNi40MDMyNyAzLjAwMTEzIDcgMy4wMDExM1pNMy4wMDM1IDExLjQ2NjFDMy4wMTIxOCAxMC44MDk2IDMuMjc4OTggMTAuMTgyOSAzLjc0NjE4IDkuNzIxNkM0LjIxMzM5IDkuMjYwMjkgNC44NDM0MyA5LjAwMTQ3IDUuNSA5LjAwMTEzSDguNUM5LjE1NjU4IDkuMDAxNDcgOS43ODY2MiA5LjI2MDI5IDEwLjI1MzggOS43MjE2QzEwLjcyMSAxMC4xODI5IDEwLjk4NzggMTAuODA5NiAxMC45OTY1IDExLjQ2NjFDOS44OTk5MiAxMi40NTQzIDguNDc2MTMgMTMuMDAxMiA3IDEzLjAwMTJDNS41MjM4NyAxMy4wMDEyIDQuMTAwMDggMTIuNDU0MyAzLjAwMzUgMTEuNDY2MVoiIGZpbGw9IiM3RTgzOTIiLz4KPC9zdmc+Cg==",
107
+ "scale": "Cover",
108
+ "overrides": []
109
+ },
110
+ "overrides": []
111
+ },
112
+ "width": 13.99000072479248,
113
+ "height": 14.001599311828613,
114
+ "widthType": "Fixed",
115
+ "heightType": "Fixed",
116
+ "position": "absolute",
117
+ "opacity": 1,
118
+ "rotate": 0,
119
+ "overflow": "visible",
120
+ "visible": true,
121
+ "overrides": []
122
+ }
123
+ ],
124
+ "paint": {
125
+ "_type": "Paint",
126
+ "_id": "8f7da1809e4f37",
127
+ "parent": "$Frame:b5200a399bb6c9",
128
+ "type": "None",
129
+ "overrides": []
130
+ },
131
+ "border": {
132
+ "_type": "Border",
133
+ "_id": "f88c0a69e1ff4b",
134
+ "parent": "$Frame:b5200a399bb6c9",
135
+ "overrides": [],
136
+ "type": "None"
137
+ },
138
+ "borderRadius": "0px 0px 0px 0px",
139
+ "layerMode": "none",
140
+ "width": 16,
141
+ "height": 16,
142
+ "widthType": "Fixed",
143
+ "heightType": "Fixed",
144
+ "position": "relative",
145
+ "opacity": 1,
146
+ "rotate": 0,
147
+ "overflow": "hidden",
148
+ "visible": true,
149
+ "overrides": []
150
+ },
151
+ {
152
+ "_type": "Text",
153
+ "_id": "667574810d207b",
154
+ "name": "14 120",
155
+ "parent": "$Frame:90e22c4e973bf3",
156
+ "content": "<p style=\"font-size: 10px; font-family: Onest; font-weight: 700; color: #7e8392; line-height: 94.9999988079071%\">14 120</p>",
157
+ "textAlign": "left",
158
+ "width": 30,
159
+ "height": 9,
160
+ "widthType": "Hug",
161
+ "heightType": "Hug",
162
+ "position": "relative",
163
+ "opacity": 1,
164
+ "rotate": 0,
165
+ "overrides": []
166
+ },
167
+ {
168
+ "_type": "Text",
169
+ "_id": "c1d70b8a4f13b0",
170
+ "name": "registered",
171
+ "parent": "$Frame:90e22c4e973bf3",
172
+ "content": "<p style=\"font-size: 10px; font-family: Onest; font-weight: 700; color: #7e8392; line-height: 94.9999988079071%\">registered</p>",
173
+ "textAlign": "left",
174
+ "width": 63,
175
+ "height": 9,
176
+ "widthType": "Hug",
177
+ "heightType": "Hug",
178
+ "position": "relative",
179
+ "opacity": 1,
180
+ "rotate": 0,
181
+ "overrides": []
182
+ }
183
+ ],
184
+ "paint": {
185
+ "_type": "Paint",
186
+ "_id": "f7e91edcba0dcb",
187
+ "parent": "$Frame:90e22c4e973bf3",
188
+ "type": "None",
189
+ "overrides": []
190
+ },
191
+ "border": {
192
+ "_type": "Border",
193
+ "_id": "59ec6f09d6a1ed",
194
+ "parent": "$Frame:90e22c4e973bf3",
195
+ "overrides": [],
196
+ "type": "None"
197
+ },
198
+ "borderRadius": "23.5px 23.5px 23.5px 23.5px",
199
+ "layerMode": "flex",
200
+ "layerDirection": "horizontal",
201
+ "layerDistribute": "start",
202
+ "layerAlign": "center",
203
+ "layerGap": 3,
204
+ "layerWrap": false,
205
+ "padding": "8px 5px 8px 5px",
206
+ "width": 125,
207
+ "height": 20,
208
+ "widthType": "Fixed",
209
+ "heightType": "Fixed",
210
+ "position": "relative",
211
+ "opacity": 1,
212
+ "rotate": 0,
213
+ "overflow": "hidden",
214
+ "visible": true,
215
+ "overrides": []
216
+ }
217
+ ],
218
+ "paint": {
219
+ "_type": "Paint",
220
+ "_id": "ef92912b7aec8f",
221
+ "parent": "$Frame:db328de8660f00",
222
+ "overrides": [],
223
+ "type": "Solid",
224
+ "solid": "#d8d0d0"
225
+ },
226
+ "border": {
227
+ "_type": "Border",
228
+ "_id": "dc65dc189a9ecb",
229
+ "parent": "$Frame:db328de8660f00",
230
+ "overrides": [],
231
+ "type": "None"
232
+ },
233
+ "borderRadius": "0px 0px 0px 0px",
234
+ "layerMode": "flex",
235
+ "layerDirection": "horizontal",
236
+ "layerDistribute": "start",
237
+ "layerAlign": "start",
238
+ "layerGap": 30,
239
+ "layerWrap": false,
240
+ "padding": "18px 18px 18px 18px",
241
+ "width": 412,
242
+ "height": 76,
243
+ "widthType": "Fixed",
244
+ "heightType": "Hug",
245
+ "position": "absolute",
246
+ "left": 0,
247
+ "top": 0,
248
+ "opacity": 1,
249
+ "rotate": 0,
250
+ "overflow": "hidden",
251
+ "visible": true,
252
+ "overrides": [
253
+ {
254
+ "_type": "Frame",
255
+ "_id": "a241b34832eac0",
256
+ "parent": "$Frame:db328de8660f00",
257
+ "overrideFrom": "$Frame:db328de8660f00",
258
+ "name": "mobile",
259
+ "layerDirection": "vertical",
260
+ "width": 180,
261
+ "height": 196,
262
+ "left": -1652,
263
+ "top": -455,
264
+ "threshold": 180
265
+ }
266
+ ],
267
+ "isPrimary": true,
268
+ "isBreakpoint": true,
269
+ "threshold": 412
270
+ },
271
+ {
272
+ "_type": "Frame",
273
+ "_id": "a241b34832eac0",
274
+ "name": "mobile",
275
+ "parent": "$Fragment:4eef5cfcbee4ae",
276
+ "children": [
277
+ {
278
+ "_type": "Frame",
279
+ "_id": "c243c81c97e3b5",
280
+ "name": "Frame 5",
281
+ "parent": "$Frame:a241b34832eac0",
282
+ "children": [],
283
+ "paint": {
284
+ "_type": "Paint",
285
+ "_id": "7cee6416248f64",
286
+ "parent": "$Frame:c243c81c97e3b5",
287
+ "overrides": [],
288
+ "type": "Solid",
289
+ "solid": "#cd6464"
290
+ },
291
+ "border": {
292
+ "_type": "Border",
293
+ "_id": "2b31c5439c09cb",
294
+ "parent": "$Frame:c243c81c97e3b5",
295
+ "overrides": [],
296
+ "type": "None"
297
+ },
298
+ "borderRadius": "0px 0px 0px 0px",
299
+ "layerMode": "none",
300
+ "width": 144,
301
+ "height": 40,
302
+ "widthType": "Fill",
303
+ "heightType": "Fixed",
304
+ "position": "relative",
305
+ "opacity": 1,
306
+ "rotate": 0,
307
+ "overflow": "hidden",
308
+ "visible": true,
309
+ "overrides": []
310
+ },
311
+ {
312
+ "_type": "Frame",
313
+ "_id": "8bb8346e3cd8c7",
314
+ "name": "Frame 6",
315
+ "parent": "$Frame:a241b34832eac0",
316
+ "children": [],
317
+ "paint": {
318
+ "_type": "Paint",
319
+ "_id": "4b3f1159206949",
320
+ "parent": "$Frame:8bb8346e3cd8c7",
321
+ "overrides": [],
322
+ "type": "Solid",
323
+ "solid": "#cd6464"
324
+ },
325
+ "border": {
326
+ "_type": "Border",
327
+ "_id": "04247bb89e54f5",
328
+ "parent": "$Frame:8bb8346e3cd8c7",
329
+ "overrides": [],
330
+ "type": "None"
331
+ },
332
+ "borderRadius": "0px 0px 0px 0px",
333
+ "layerMode": "none",
334
+ "width": 144,
335
+ "height": 40,
336
+ "widthType": "Fill",
337
+ "heightType": "Fixed",
338
+ "position": "relative",
339
+ "opacity": 1,
340
+ "rotate": 0,
341
+ "overflow": "hidden",
342
+ "visible": true,
343
+ "overrides": []
344
+ },
345
+ {
346
+ "_type": "Frame",
347
+ "_id": "ed1b0585cc5bf8",
348
+ "name": "Registered",
349
+ "parent": "$Frame:a241b34832eac0",
350
+ "children": [
351
+ {
352
+ "_type": "Frame",
353
+ "_id": "d15c78c414cd75",
354
+ "name": "carbon:user-avatar-filled",
355
+ "parent": "$Frame:ed1b0585cc5bf8",
356
+ "children": [
357
+ {
358
+ "_type": "Frame",
359
+ "_id": "9e301a78ab5bef",
360
+ "name": "Vector",
361
+ "parent": "$Frame:d15c78c414cd75",
362
+ "children": [],
363
+ "paint": {
364
+ "_type": "Paint",
365
+ "_id": "833c11cd686e71",
366
+ "parent": "$Frame:9e301a78ab5bef",
367
+ "type": "Image",
368
+ "image": {
369
+ "_type": "ImagePaint",
370
+ "_id": "e2918e00cfbf36",
371
+ "parent": "$Paint:833c11cd686e71",
372
+ "src": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAxNCAxNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyLjM3NDUgMTEuNDY2MUMxMy4wOTI2IDEwLjYwMjIgMTMuNTkyIDkuNTc4IDEzLjgzMDUgOC40ODAyMkMxNC4wNjkgNy4zODI0NCAxNC4wMzk2IDYuMjQzMzYgMTMuNzQ0OCA1LjE1OTM0QzEzLjQ1IDQuMDc1MzEgMTIuODk4NSAzLjA3ODI0IDEyLjEzNjggMi4yNTI0N0MxMS4zNzUyIDEuNDI2NjkgMTAuNDI1OCAwLjc5NjUwNiA5LjM2OTEzIDAuNDE1MjIxQzguMzEyNDIgMC4wMzM5MzU3IDcuMTc5NDMgLTAuMDg3MjMxOSA2LjA2NTk4IDAuMDYxOTY4QzQuOTUyNTQgMC4yMTExNjggMy44OTE0MSAwLjYyNjM0NiAyLjk3MjM2IDEuMjcyMzhDMi4wNTMzMSAxLjkxODQyIDEuMzAzMzcgMi43NzYzIDAuNzg1OTk2IDMuNzczNDZDMC4yNjg2MTkgNC43NzA2MyAtMC4wMDA5ODEyOTYgNS44Nzc3MyAyLjY4MzgyZS0wNiA3LjAwMTEzQzAuMDAwNDIzMDEgOC42MzQyMSAwLjU3NTkxMyAxMC4yMTUgMS42MjU1IDExLjQ2NjFMMS42MTU1IDExLjQ3NDZDMS42NTA1IDExLjUxNjYgMS42OTA1IDExLjU1MjYgMS43MjY1IDExLjU5NDFDMS43NzE1IDExLjY0NTYgMS44MiAxMS42OTQxIDEuODY2NSAxMS43NDQxQzIuMDA1ODQgMTEuODk2NSAyLjE1MDg0IDEyLjA0MTUgMi4zMDE1IDEyLjE3OTFDMi4zNDgxNyAxMi4yMjA1IDIuMzk0ODQgMTIuMjYwOCAyLjQ0MTUgMTIuMzAwMUMyLjYwMTUgMTIuNDM4NSAyLjc2NjUgMTIuNTY4OCAyLjkzNjUgMTIuNjkxMUMyLjk1ODUgMTIuNzA2MSAyLjk3ODUgMTIuNzI1NiAzLjAwMDUgMTIuNzQxMVYxMi43MzUxQzQuMTcxNTMgMTMuNTU5MyA1LjU2ODU0IDE0LjAwMTYgNy4wMDA1IDE0LjAwMTZDOC40MzI0NyAxNC4wMDE2IDkuODI5NDggMTMuNTU5MyAxMS4wMDA1IDEyLjczNTFWMTIuNzQxMUMxMS4wMjI1IDEyLjcyNTYgMTEuMDQyIDEyLjcwNjEgMTEuMDY0NSAxMi42OTExQzExLjIzNDUgMTIuNTY4NSAxMS4zOTk1IDEyLjQzODEgMTEuNTU5NSAxMi4zMDAxQzExLjYwNjIgMTIuMjYwNSAxMS42NTI4IDEyLjIyMDEgMTEuNjk5NSAxMi4xNzkxQzExLjg0OTggMTIuMDQxNSAxMS45OTQ4IDExLjg5NjUgMTIuMTM0NSAxMS43NDQxQzEyLjE4MSAxMS42OTQxIDEyLjIyOSAxMS42NDU2IDEyLjI3NDUgMTEuNTk0MUMxMi4zMSAxMS41NTI2IDEyLjM1MDUgMTEuNTE2NiAxMi4zODU1IDExLjQ3NDFMMTIuMzc0NSAxMS40NjYxWk03IDMuMDAxMTNDNy40NDUwMSAzLjAwMTEzIDcuODgwMDMgMy4xMzMwOSA4LjI1MDA0IDMuMzgwMzJDOC42MjAwNSAzLjYyNzU1IDguOTA4NDMgMy45Nzg5NiA5LjA3ODczIDQuMzkwMDlDOS4yNDkwMyA0LjgwMTIyIDkuMjkzNTkgNS4yNTM2MiA5LjIwNjc3IDUuNjkwMDhDOS4xMTk5NSA2LjEyNjU0IDguOTA1NjYgNi41Mjc0NSA4LjU5MDk5IDYuODQyMTJDOC4yNzYzMiA3LjE1Njc5IDcuODc1NDEgNy4zNzEwOCA3LjQzODk2IDcuNDU3OUM3LjAwMjUgNy41NDQ3MSA2LjU1MDEgNy41MDAxNSA2LjEzODk3IDcuMzI5ODZDNS43Mjc4MyA3LjE1OTU2IDUuMzc2NDMgNi44NzExNyA1LjEyOTIgNi41MDExNkM0Ljg4MTk2IDYuMTMxMTUgNC43NSA1LjY5NjE0IDQuNzUgNS4yNTExM0M0Ljc1IDQuNjU0MzkgNC45ODcwNiA0LjA4MjA5IDUuNDA5MDEgMy42NjAxNEM1LjgzMDk3IDMuMjM4MTggNi40MDMyNyAzLjAwMTEzIDcgMy4wMDExM1pNMy4wMDM1IDExLjQ2NjFDMy4wMTIxOCAxMC44MDk2IDMuMjc4OTggMTAuMTgyOSAzLjc0NjE4IDkuNzIxNkM0LjIxMzM5IDkuMjYwMjkgNC44NDM0MyA5LjAwMTQ3IDUuNSA5LjAwMTEzSDguNUM5LjE1NjU4IDkuMDAxNDcgOS43ODY2MiA5LjI2MDI5IDEwLjI1MzggOS43MjE2QzEwLjcyMSAxMC4xODI5IDEwLjk4NzggMTAuODA5NiAxMC45OTY1IDExLjQ2NjFDOS44OTk5MiAxMi40NTQzIDguNDc2MTMgMTMuMDAxMiA3IDEzLjAwMTJDNS41MjM4NyAxMy4wMDEyIDQuMTAwMDggMTIuNDU0MyAzLjAwMzUgMTEuNDY2MVoiIGZpbGw9IiM3RTgzOTIiLz4KPC9zdmc+Cg==",
373
+ "scale": "Cover",
374
+ "overrides": []
375
+ },
376
+ "overrides": []
377
+ },
378
+ "width": 13.99000072479248,
379
+ "height": 14.001599311828613,
380
+ "widthType": "Fixed",
381
+ "heightType": "Fixed",
382
+ "position": "absolute",
383
+ "opacity": 1,
384
+ "rotate": 0,
385
+ "overflow": "visible",
386
+ "visible": true,
387
+ "overrides": []
388
+ }
389
+ ],
390
+ "paint": {
391
+ "_type": "Paint",
392
+ "_id": "426aad11e91769",
393
+ "parent": "$Frame:d15c78c414cd75",
394
+ "type": "None",
395
+ "overrides": []
396
+ },
397
+ "border": {
398
+ "_type": "Border",
399
+ "_id": "5990caaad240f1",
400
+ "parent": "$Frame:d15c78c414cd75",
401
+ "overrides": [],
402
+ "type": "None"
403
+ },
404
+ "borderRadius": "0px 0px 0px 0px",
405
+ "layerMode": "none",
406
+ "width": 16,
407
+ "height": 16,
408
+ "widthType": "Fixed",
409
+ "heightType": "Fixed",
410
+ "position": "relative",
411
+ "opacity": 1,
412
+ "rotate": 0,
413
+ "overflow": "hidden",
414
+ "visible": true,
415
+ "overrides": []
416
+ },
417
+ {
418
+ "_type": "Text",
419
+ "_id": "0b6d06d3bfdcdb",
420
+ "name": "14 120",
421
+ "parent": "$Frame:ed1b0585cc5bf8",
422
+ "content": "<p style=\"font-size: 10px; font-family: Onest; font-weight: 700; color: #7e8392; line-height: 94.9999988079071%\">14 120</p>",
423
+ "textAlign": "left",
424
+ "width": 30,
425
+ "height": 9,
426
+ "widthType": "Hug",
427
+ "heightType": "Hug",
428
+ "position": "relative",
429
+ "opacity": 1,
430
+ "rotate": 0,
431
+ "overrides": []
432
+ },
433
+ {
434
+ "_type": "Text",
435
+ "_id": "7edd9fac7c26fd",
436
+ "name": "registered",
437
+ "parent": "$Frame:ed1b0585cc5bf8",
438
+ "content": "<p style=\"font-size: 10px; font-family: Onest; font-weight: 700; color: #7e8392; line-height: 94.9999988079071%\">registered</p>",
439
+ "textAlign": "left",
440
+ "width": 63,
441
+ "height": 9,
442
+ "widthType": "Hug",
443
+ "heightType": "Hug",
444
+ "position": "relative",
445
+ "opacity": 1,
446
+ "rotate": 0,
447
+ "overrides": []
448
+ }
449
+ ],
450
+ "paint": {
451
+ "_type": "Paint",
452
+ "_id": "0b1d37eb2b7cd1",
453
+ "parent": "$Frame:ed1b0585cc5bf8",
454
+ "type": "None",
455
+ "overrides": []
456
+ },
457
+ "border": {
458
+ "_type": "Border",
459
+ "_id": "cb587a530b85c9",
460
+ "parent": "$Frame:ed1b0585cc5bf8",
461
+ "overrides": [],
462
+ "type": "None"
463
+ },
464
+ "borderRadius": "23.5px 23.5px 23.5px 23.5px",
465
+ "layerMode": "flex",
466
+ "layerDirection": "horizontal",
467
+ "layerDistribute": "start",
468
+ "layerAlign": "center",
469
+ "layerGap": 3,
470
+ "layerWrap": false,
471
+ "padding": "8px 5px 8px 5px",
472
+ "width": 125,
473
+ "height": 20,
474
+ "widthType": "Fixed",
475
+ "heightType": "Fixed",
476
+ "position": "relative",
477
+ "opacity": 1,
478
+ "rotate": 0,
479
+ "overflow": "hidden",
480
+ "visible": true,
481
+ "overrides": []
482
+ }
483
+ ],
484
+ "paint": {
485
+ "_type": "Paint",
486
+ "_id": "df446b3c26673d",
487
+ "parent": "$Frame:a241b34832eac0",
488
+ "overrides": [],
489
+ "type": "Solid",
490
+ "solid": "#d8d0d0"
491
+ },
492
+ "border": {
493
+ "_type": "Border",
494
+ "_id": "fe054cfeb72005",
495
+ "parent": "$Frame:a241b34832eac0",
496
+ "overrides": [],
497
+ "type": "None"
498
+ },
499
+ "borderRadius": "0px 0px 0px 0px",
500
+ "layerMode": "flex",
501
+ "layerDirection": "vertical",
502
+ "layerDistribute": "start",
503
+ "layerAlign": "start",
504
+ "layerGap": 30,
505
+ "layerWrap": false,
506
+ "padding": "18px 18px 18px 18px",
507
+ "width": 180,
508
+ "height": 196,
509
+ "widthType": "Fixed",
510
+ "heightType": "Hug",
511
+ "position": "absolute",
512
+ "left": 462,
513
+ "top": 0,
514
+ "opacity": 1,
515
+ "rotate": 0,
516
+ "overflow": "hidden",
517
+ "visible": true,
518
+ "overrides": [],
519
+ "isBreakpoint": true,
520
+ "isPrimary": false,
521
+ "threshold": 180,
522
+ "overrideFrom": "$Frame:db328de8660f00"
523
+ }
524
+ ],
525
+ "properties": [],
526
+ "cssChunks": []
527
+ }