@powerhousedao/academy 5.1.0-dev.9 → 5.1.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 (75) hide show
  1. package/CHANGELOG.md +43 -1108
  2. package/blog/BeyondCommunication-ABlueprintForDevelopment.md +1 -2
  3. package/blog/TheChallengeOfChange.md +0 -1
  4. package/docs/academy/00-EthereumArgentinaHackathon.md +207 -0
  5. package/docs/academy/01-GetStarted/00-ExploreDemoPackage.mdx +27 -24
  6. package/docs/academy/01-GetStarted/01-CreateNewPowerhouseProject.md +9 -118
  7. package/docs/academy/01-GetStarted/02-DefineToDoListDocumentModel.md +28 -110
  8. package/docs/academy/01-GetStarted/03-ImplementOperationReducers.md +145 -191
  9. package/docs/academy/01-GetStarted/04-BuildToDoListEditor.md +218 -0
  10. package/docs/academy/{02-MasteryTrack/01-BuilderEnvironment → 01-GetStarted}/05-VetraStudio.md +6 -48
  11. package/docs/academy/01-GetStarted/06-ReactorMCP.md +58 -0
  12. package/docs/academy/01-GetStarted/_04-BuildToDoListEditor +1 -1
  13. package/docs/academy/02-MasteryTrack/01-BuilderEnvironment/03-BuilderTools.md +2 -2
  14. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/02-SpecifyTheStateSchema.md +44 -75
  15. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/03-SpecifyDocumentOperations.md +22 -28
  16. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/04-UseTheDocumentModelGenerator.md +31 -28
  17. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/05-ImplementDocumentReducers.md +206 -211
  18. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/06-ImplementDocumentModelTests.md +62 -176
  19. package/docs/academy/02-MasteryTrack/02-DocumentModelCreation/07-ExampleToDoListRepository.md +0 -21
  20. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/01-BuildingDocumentEditors.md +319 -309
  21. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/06-DocumentTools/00-DocumentToolbar.mdx +0 -4
  22. package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/06-DocumentTools/01-OperationHistory.md +0 -4
  23. package/docs/academy/02-MasteryTrack/05-Launch/04-ConfigureEnvironment.md +1 -1
  24. package/docs/academy/03-ExampleUsecases/Chatroom/02-CreateNewPowerhouseProject.md +35 -111
  25. package/docs/academy/03-ExampleUsecases/Chatroom/03-DefineChatroomDocumentModel.md +76 -255
  26. package/docs/academy/03-ExampleUsecases/Chatroom/04-ImplementOperationReducers.md +160 -281
  27. package/docs/academy/03-ExampleUsecases/Chatroom/05-ImplementChatroomEditor.md +35 -188
  28. package/docs/academy/03-ExampleUsecases/Chatroom/06-LaunchALocalReactor.md +7 -95
  29. package/docs/academy/03-ExampleUsecases/Chatroom/_category_.json +1 -1
  30. package/docs/academy/04-APIReferences/00-PowerhouseCLI.md +2 -6
  31. package/docs/academy/04-APIReferences/01-ReactHooks.md +501 -291
  32. package/docs/academy/05-Architecture/00-PowerhouseArchitecture.md +39 -7
  33. package/docs/academy/05-Architecture/02-ReferencingMonorepoPackages +65 -0
  34. package/docs/academy/05-Architecture/04-MovingBeyondCRUD +61 -0
  35. package/docs/academy/06-ComponentLibrary/00-DocumentEngineering.md +24 -72
  36. package/docs/academy/08-Glossary.md +0 -7
  37. package/docusaurus.config.ts +3 -28
  38. package/package.json +1 -1
  39. package/sidebars.ts +12 -49
  40. package/src/css/custom.css +18 -26
  41. package/docs/academy/01-GetStarted/04-WriteDocumentModelTests.md +0 -378
  42. package/docs/academy/01-GetStarted/05-BuildToDoListEditor.md +0 -560
  43. package/docs/academy/03-ExampleUsecases/TodoList/00-GetTheStarterCode.md +0 -24
  44. package/docs/academy/03-ExampleUsecases/TodoList/01-GenerateTodoListDocumentModel.md +0 -211
  45. package/docs/academy/03-ExampleUsecases/TodoList/02-ImplementTodoListDocumentModelReducerOperationHandlers.md +0 -171
  46. package/docs/academy/03-ExampleUsecases/TodoList/03-AddTestsForTodoListActions.md +0 -462
  47. package/docs/academy/03-ExampleUsecases/TodoList/04-GenerateTodoListDocumentEditor.md +0 -45
  48. package/docs/academy/03-ExampleUsecases/TodoList/05-ImplementTodoListDocumentEditorUIComponents.md +0 -422
  49. package/docs/academy/03-ExampleUsecases/TodoList/06-GenerateTodoDriveExplorer.md +0 -61
  50. package/docs/academy/03-ExampleUsecases/TodoList/07-AddSharedComponentForShowingTodoListStats.md +0 -384
  51. package/docs/academy/03-ExampleUsecases/TodoList/_category_.json +0 -8
  52. package/docs/academy/03-ExampleUsecases/VetraPackageLibrary/VetraPackageLibrary.md +0 -7
  53. package/docs/academy/03-ExampleUsecases/VetraPackageLibrary/_category_.json +0 -9
  54. package/docs/academy/04-APIReferences/06-VetraRemoteDrive.md +0 -160
  55. package/docs/academy/04-APIReferences/renown-sdk/00-Overview.md +0 -316
  56. package/docs/academy/04-APIReferences/renown-sdk/01-Authentication.md +0 -672
  57. package/docs/academy/04-APIReferences/renown-sdk/02-APIReference.md +0 -957
  58. package/docs/academy/04-APIReferences/renown-sdk/_category_.json +0 -8
  59. package/docs/academy/10-TodoListTutorial/02-ImplementTodoListDocumentModelReducerOperationHandlers.md +0 -171
  60. package/docs/academy/10-TodoListTutorial/03-AddTestsForTodoListActions.md +0 -462
  61. package/docs/academy/10-TodoListTutorial/05-ImplementTodoListDocumentEditorUIComponents.md +0 -422
  62. package/docs/academy/10-TodoListTutorial/07-AddSharedComponentForShowingTodoListStats.md +0 -370
  63. package/static/img/Vetra-logo-dark.svg +0 -11
  64. package/static/img/vetra-logo-light.svg +0 -11
  65. /package/docs/academy/{02-MasteryTrack/01-BuilderEnvironment → 01-GetStarted}/images/Modules.png +0 -0
  66. /package/docs/academy/{02-MasteryTrack/01-BuilderEnvironment → 01-GetStarted}/images/VetraStudioDrive.png +0 -0
  67. /package/docs/academy/02-MasteryTrack/03-BuildingUserExperiences/06-DocumentTools/{02-RevisionHistoryTimeline/360/237/232/247" → 02-RevisionHistoryTimeline} +0 -0
  68. /package/docs/academy/05-Architecture/05-DocumentModelTheory/{360/237/232/247 /01-WhatIsADocumentModel" → 01-WhatIsADocumentModel} +0 -0
  69. /package/docs/academy/05-Architecture/05-DocumentModelTheory/{360/237/232/247 /02-DAOandDocumentsModelsQ+A" → 02-DAOandDocumentsModelsQ+A} +0 -0
  70. /package/docs/academy/05-Architecture/05-DocumentModelTheory/{360/237/232/247 /02-domain-modeling" → 02-domain-modeling} +0 -0
  71. /package/docs/academy/05-Architecture/05-DocumentModelTheory/{360/237/232/247 /03-BenefitsOfDocumentModels" → 03-BenefitsOfDocumentModels} +0 -0
  72. /package/docs/academy/05-Architecture/05-DocumentModelTheory/{360/237/232/247 /04-UtilitiesAndTips" → 04-UtilitiesAndTips} +0 -0
  73. /package/docs/academy/05-Architecture/05-DocumentModelTheory/{360/237/232/247 /05-best-practices" → 05-best-practices} +0 -0
  74. /package/docs/academy/05-Architecture/05-DocumentModelTheory/{360/237/232/247 /_category_.json" → _category_.json} +0 -0
  75. /package/docs/academy/05-Architecture/05-DocumentModelTheory/{360/237/232/247 /three-data-layers.png" → three-data-layers.png} +0 -0
@@ -1,370 +0,0 @@
1
- # Step 7 - Add shared component for showing TodoList stats
2
-
3
- So far we've been creating components that live in the same directories as the editors that use them. But sometimes we want to use the same component across multiple editors.
4
-
5
- Let's create a component for showing statistics about our todos. We'd like this component to work with any set of todos or todo lists, so that we can use the same one in our document editor or in our drive editor or a folder.
6
-
7
- ## Creating the `<Stats />` component
8
-
9
- Create a new directory at `editors/components` and create two new files inside it:
10
-
11
- `editors/components/Stats.tsx` with this content:
12
-
13
- ```jsx
14
- import type {
15
- TodoItem,
16
- TodoListDocument,
17
- } from "todo-tutorial/document-models/todo-list";
18
-
19
- type Props = {
20
- todos: TodoItem[] | undefined;
21
- todoListDocuments?: TodoListDocument[] | undefined;
22
- createdAtUtcIso?: string;
23
- lastModifiedAtUtcIso?: string;
24
- };
25
-
26
- /** Generic component for showing statistics about todo lists and the todos they contain */
27
- export function Stats({
28
- todos,
29
- todoListDocuments,
30
- createdAtUtcIso,
31
- lastModifiedAtUtcIso,
32
- }: Props) {
33
- const totalTodos = todos?.length ?? 0;
34
- const totalChecked = todos?.filter((todo) => todo.checked).length ?? 0;
35
- const totalUnchecked = todos?.filter((todo) => !todo.checked).length ?? 0;
36
- const percentageChecked = Math.round(
37
- calculatePercentage(totalTodos, totalChecked),
38
- );
39
- const percentageUnchecked = Math.round(
40
- calculatePercentage(totalTodos, totalUnchecked),
41
- );
42
- const createdAt = createdAtUtcIso ? new Date(createdAtUtcIso) : null;
43
- const hasCreatedAt = createdAt !== null;
44
- const lastModified = lastModifiedAtUtcIso
45
- ? new Date(lastModifiedAtUtcIso)
46
- : null;
47
- const hasLastModified = lastModified !== null;
48
- const createdAtFormattedDate = createdAt
49
- ? createdAt.toLocaleDateString()
50
- : null;
51
- const lastModifiedFormattedDate = lastModified
52
- ? lastModified.toLocaleDateString()
53
- : null;
54
- const createdAtFormattedTime = createdAt
55
- ? createdAt.toLocaleTimeString()
56
- : null;
57
- const lastModifiedFormattedTime = lastModified
58
- ? lastModified.toLocaleTimeString()
59
- : null;
60
- const totalTodoListDocuments = todoListDocuments?.length ?? 0;
61
- const hasTodoLists = todoListDocuments !== undefined;
62
-
63
- return (
64
- <ul className="text-sm text-gray-800 max-w-1/2">
65
- {hasTodoLists && (
66
- <li className="flex justify-between">
67
- <span>Todo Lists:</span> <span>{totalTodoListDocuments}</span>
68
- </li>
69
- )}
70
- <li className="flex justify-between">
71
- <span>Todos:</span> <span>{totalTodos}</span>
72
- </li>
73
- <li className="flex justify-between">
74
- <span>Checked:</span>{" "}
75
- <span>
76
- {totalChecked} ({percentageChecked}%)
77
- </span>
78
- </li>
79
- <li className="flex justify-between">
80
- <span>Unchecked:</span>{" "}
81
- <span>
82
- {totalUnchecked} ({percentageUnchecked}%)
83
- </span>
84
- </li>
85
- {hasCreatedAt && (
86
- <li className="flex justify-between">
87
- <span>Created:</span>{" "}
88
- <span>
89
- {createdAtFormattedDate} {createdAtFormattedTime}
90
- </span>
91
- </li>
92
- )}
93
- {hasLastModified && (
94
- <li className="flex justify-between">
95
- <span>Last modified:</span>{" "}
96
- <span>
97
- {lastModifiedFormattedDate} {lastModifiedFormattedTime}
98
- </span>
99
- </li>
100
- )}
101
- </ul>
102
- );
103
- }
104
-
105
- function calculatePercentage(total: unknown, value: unknown) {
106
- if (typeof total !== "number" || typeof value !== "number") {
107
- return 0;
108
- }
109
- const ratio = value / total;
110
- if (isNaN(ratio)) {
111
- return 0;
112
- }
113
- return ratio * 100;
114
- }
115
- ```
116
-
117
- And `editors/components/index.ts` with this content:
118
-
119
- ```ts
120
- export { Stats } from "./Stats.js";
121
- ```
122
-
123
- The index file lets us use a nice neat import path like `todo-tutorial/editors/components` in all of our editor components.
124
-
125
- Don't be too concerned with the math and time related code you see here — those are just implementation details.
126
-
127
- ## Using the `<Stats />` component in our `TodoListEditor`
128
-
129
- Now let's use the `<Stats />` component in our `<TodoList />` component:
130
-
131
- ```diff
132
- import { useSelectedTodoListDocument } from "todo-tutorial/document-models/todo-list";
133
- + import { Stats } from "todo-tutorial/editors/components";
134
- import { EditTodoListName } from "./EditName.js";
135
- import { Todos } from "./Todos.js";
136
- import { AddTodo } from "./AddTodo.js";
137
- import { CloseButton } from "./CloseButton.js";
138
-
139
- /** Displays the selected todo list */
140
- export function TodoList() {
141
- const [selectedTodoList] = useSelectedTodoListDocument();
142
-
143
- if (!selectedTodoList) return null;
144
-
145
- const todos = selectedTodoList.state.global.items;
146
- + const createdAtUtcIso = selectedTodoList.header.createdAtUtcIso;
147
- + const lastModifiedAtUtcIso = selectedTodoList.header.lastModifiedAtUtcIso;
148
-
149
- return (
150
- <div>
151
- <section className="mb-4 flex gap-2 items-center">
152
- <div className="grow">
153
- <EditTodoListName />
154
- </div>
155
- <div className="flex-none">
156
- <CloseButton />
157
- </div>
158
- </section>
159
- + <section className="mb-4">
160
- + <Stats
161
- + todos={todos}
162
- + createdAtUtcIso={createdAtUtcIso}
163
- + lastModifiedAtUtcIso={lastModifiedAtUtcIso}
164
- + />
165
- + </section>
166
- <section className="mb-4">
167
- <Todos todos={todos} />
168
- </section>
169
- <section>
170
- <AddTodo />
171
- </section>
172
- </div>
173
- );
174
- }
175
- ```
176
-
177
- With this, you will now see statistics about the todo items in a todo list document.
178
-
179
- And now we can also show off the flexibility of our new `<Stats />` component. Since drives are also just documents themselves, we can derive the same information about a drive too. This means we can use this same component in our drive editor as well.
180
-
181
- ## Using the `<Stats />` component in our `TodoDriveExplorer`
182
-
183
- Let's add this to our `<DriveContents />` component, along with some conditional logic that either shows stats for the selected folder (if one is selected) or the selected drive otherwise.
184
-
185
- ```diff
186
- + import {
187
- + useSelectedDrive,
188
- + useSelectedFolder,
189
- + } from "@powerhousedao/reactor-browser";
190
- import { CreateDocument } from "./CreateDocument.js";
191
- import { EmptyState } from "./EmptyState.js";
192
- import { Files } from "./Files.js";
193
- import { Folders } from "./Folders.js";
194
- import { NavigationBreadcrumbs } from "./NavigationBreadcrumbs.js";
195
- + import { Stats } from "todo-tutorial/editors/components";
196
- + import {
197
- + useTodoListDocumentsInSelectedDrive,
198
- + useTodoListDocumentsInSelectedFolder,
199
- + type TodoItem,
200
- + type TodoListDocument,
201
- + } from "todo-tutorial/document-models/todo-list";
202
-
203
- + /** Small helper function to get all todo items from all todo lists */
204
- + export function getAllTodoItemsFromTodoLists(
205
- + todoLists: TodoListDocument[] | undefined,
206
- + ): TodoItem[] {
207
- + return todoLists?.flatMap((todoList) => todoList.state.global.items) ?? [];
208
- + }
209
-
210
- /** Shows the documents and folders in the selected drive */
211
- export function DriveContents() {
212
- + const selectedFolder = useSelectedFolder();
213
- + const hasSelectedFolder = selectedFolder !== undefined;
214
- return (
215
- <div className="space-y-6 px-6">
216
- <NavigationBreadcrumbs />
217
- + {hasSelectedFolder ? <FolderStats /> : <DriveStats />}
218
- <Folders />
219
- <Files />
220
- <EmptyState />
221
- <CreateDocument />
222
- </div>
223
- );
224
- }
225
-
226
- + /** Shows the statistics for the selected drive */
227
- + function DriveStats() {
228
- + const todoListDocumentsInSelectedDrive =
229
- + useTodoListDocumentsInSelectedDrive();
230
- + const allTodos = getAllTodoItemsFromTodoLists(
231
- + todoListDocumentsInSelectedDrive,
232
- + );
233
- + const [selectedDrive] = useSelectedDrive();
234
- + const driveCreatedAt = selectedDrive.header.createdAtUtcIso;
235
- + const driveLastModified = selectedDrive.header.lastModifiedAtUtcIso;
236
- +
237
- + return (
238
- + <Stats
239
- + todos={allTodos}
240
- + todoListDocuments={todoListDocumentsInSelectedDrive}
241
- + createdAtUtcIso={driveCreatedAt}
242
- + lastModifiedAtUtcIso={driveLastModified}
243
- + />
244
- + );
245
- + }
246
- +
247
- + /** Shows the statistics for the selected folder */
248
- + function FolderStats() {
249
- + const todoListDocumentsInSelectedFolder =
250
- + useTodoListDocumentsInSelectedFolder();
251
- + const allTodos = getAllTodoItemsFromTodoLists(
252
- + todoListDocumentsInSelectedFolder,
253
- + );
254
- +
255
- + return (
256
- + <Stats
257
- + todos={allTodos}
258
- + todoListDocuments={todoListDocumentsInSelectedFolder}
259
- + />
260
- + );
261
- + }
262
- ```
263
-
264
- The final result should look like this:
265
-
266
- ```jsx
267
- import {
268
- useSelectedDrive,
269
- useSelectedFolder,
270
- } from "@powerhousedao/reactor-browser";
271
- import { CreateDocument } from "./CreateDocument.js";
272
- import { EmptyState } from "./EmptyState.js";
273
- import { Files } from "./Files.js";
274
- import { Folders } from "./Folders.js";
275
- import { NavigationBreadcrumbs } from "./NavigationBreadcrumbs.js";
276
- import { Stats } from "todo-tutorial/editors/components";
277
- import {
278
- useTodoListDocumentsInSelectedDrive,
279
- useTodoListDocumentsInSelectedFolder,
280
- type TodoItem,
281
- type TodoListDocument,
282
- } from "todo-tutorial/document-models/todo-list";
283
-
284
- /** Small helper function to get all todo items from all todo lists */
285
- export function getAllTodoItemsFromTodoLists(
286
- todoLists: TodoListDocument[] | undefined,
287
- ): TodoItem[] {
288
- return todoLists?.flatMap((todoList) => todoList.state.global.items) ?? [];
289
- }
290
-
291
- /** Shows the documents and folders in the selected drive */
292
- export function DriveContents() {
293
- const selectedFolder = useSelectedFolder();
294
- const hasSelectedFolder = selectedFolder !== undefined;
295
- return (
296
- <div className="space-y-6 px-6">
297
- <NavigationBreadcrumbs />
298
- {hasSelectedFolder ? <FolderStats /> : <DriveStats />}
299
- <Folders />
300
- <Files />
301
- <EmptyState />
302
- <CreateDocument />
303
- </div>
304
- );
305
- }
306
-
307
- /** Shows the statistics for the selected drive */
308
- function DriveStats() {
309
- const todoListDocumentsInSelectedDrive =
310
- useTodoListDocumentsInSelectedDrive();
311
- const allTodos = getAllTodoItemsFromTodoLists(
312
- todoListDocumentsInSelectedDrive,
313
- );
314
- const [selectedDrive] = useSelectedDrive();
315
- const driveCreatedAt = selectedDrive.header.createdAtUtcIso;
316
- const driveLastModified = selectedDrive.header.lastModifiedAtUtcIso;
317
-
318
- return (
319
- <Stats
320
- todos={allTodos}
321
- todoListDocuments={todoListDocumentsInSelectedDrive}
322
- createdAtUtcIso={driveCreatedAt}
323
- lastModifiedAtUtcIso={driveLastModified}
324
- />
325
- );
326
- }
327
-
328
- /** Shows the statistics for the selected folder */
329
- function FolderStats() {
330
- const todoListDocumentsInSelectedFolder =
331
- useTodoListDocumentsInSelectedFolder();
332
- const allTodos = getAllTodoItemsFromTodoLists(
333
- todoListDocumentsInSelectedFolder,
334
- );
335
-
336
- return (
337
- <Stats
338
- todos={allTodos}
339
- todoListDocuments={todoListDocumentsInSelectedFolder}
340
- />
341
- );
342
- }
343
- ```
344
-
345
- With this update, you can now see the statistics for the todo lists and todo items for the selected drive, folder or document depending on which you select.
346
-
347
- ## Check your work
348
-
349
- To make sure all works as expected, we should:
350
-
351
- - check types
352
- run: `pnpm tsc`
353
-
354
- - check linting
355
- run: `pnpm lint`
356
-
357
- - check tests
358
- run: `pnpm test`
359
-
360
- - test in connect
361
- run: `pnpm connect` — you should now be able to see the `<Stats />` component showing the data for your drives, folder and documents.
362
-
363
- - make sure your code matches the code in the completed step branch
364
- run: `git diff step-7-complete-added-shared-component-for-showing-todo-list-stats`
365
-
366
- ## The end
367
-
368
- Congratulations! You now have a working `TodoList` document model, and editor for those documents, and a drive editor for managing those documents. This will make a good starting point for creating your own new implementations.
369
-
370
- We're excited to see what you build!
@@ -1,11 +0,0 @@
1
- <svg width="398" height="81" viewBox="0 0 398 81" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M373.299 10.9033C373.712 10.9033 374.082 11.1566 374.232 11.541L397.676 71.8486C397.931 72.504 397.448 73.2108 396.745 73.2109H383.399C382.983 73.2109 382.61 72.9529 382.463 72.5635L378.19 61.2168L373.516 48.5996L366.507 30.0625L360.499 45.9512H370.305C370.996 45.9512 371.48 46.636 371.247 47.2871L367.094 58.917C366.952 59.315 366.574 59.5811 366.152 59.5811H355.429L354.824 61.2168L350.55 72.5635C350.403 72.9529 350.031 73.2109 349.615 73.2109H336.19C335.487 73.2108 335.003 72.5049 335.257 71.8496L358.626 11.542C358.776 11.1571 359.146 10.9034 359.559 10.9033H373.299Z" fill="#22272E"/>
3
- <path d="M274.693 73.2113C274.141 73.2113 273.693 72.7635 273.693 72.2113V11.9033C273.693 11.351 274.141 10.9033 274.693 10.9033H307.573C319.489 10.9033 327.823 19.0034 327.823 30.6082C327.823 39.3313 322.761 46.4188 315.05 49.2227L329.696 71.6647C330.13 72.3299 329.652 73.2113 328.858 73.2113H314.119C313.777 73.2113 313.459 73.0367 313.275 72.7483L299.239 50.7025H288.881V72.2113C288.881 72.7635 288.433 73.2113 287.881 73.2113H274.693ZM288.881 37.0727H306.638C310.221 37.0727 312.636 34.5025 312.636 30.8419C312.636 27.1034 310.221 24.5332 306.638 24.5332H288.881V37.0727Z" fill="#22272E"/>
4
- <path d="M236.798 73.2113C236.246 73.2113 235.798 72.7635 235.798 72.2113V24.5332H217.532C216.814 24.5332 216.33 23.7991 216.613 23.1393L221.597 11.5094C221.755 11.1417 222.116 10.9033 222.516 10.9033H267.51C268.062 10.9033 268.51 11.351 268.51 11.9033V23.5332C268.51 24.0855 268.062 24.5332 267.51 24.5332H250.908V72.2113C250.908 72.7635 250.46 73.2113 249.908 73.2113H236.798Z" fill="#22272E"/>
5
- <path d="M175.291 73.2113C174.738 73.2113 174.291 72.7635 174.291 72.2113V11.9033C174.291 11.351 174.738 10.9033 175.291 10.9033H215.066C215.784 10.9033 216.268 11.6372 215.985 12.2971L211.003 23.9269C210.846 24.2947 210.484 24.5332 210.084 24.5332H189.481L189.478 34.5803H204.634C205.329 34.5803 205.813 35.273 205.572 35.9259L201.405 47.2442C201.26 47.6374 200.885 47.8987 200.466 47.8987H189.478V59.8929H213.635C214.187 59.8929 214.635 60.3407 214.635 60.8929V72.2113C214.635 72.7635 214.187 73.2113 213.635 73.2113H175.291Z" fill="#22272E"/>
6
- <path d="M130.753 73.2113C130.341 73.2113 129.97 72.9576 129.821 72.5726L106.452 12.2646C106.198 11.6093 106.681 10.9033 107.384 10.9033H120.811C121.226 10.9033 121.598 11.1604 121.746 11.549L136.766 51.1939C137.092 52.0549 138.31 52.0549 138.636 51.1939L153.657 11.549C153.804 11.1604 154.176 10.9033 154.592 10.9033H167.939C168.642 10.9033 169.126 11.6101 168.871 12.2657L145.426 72.5736C145.277 72.958 144.906 73.2113 144.494 73.2113H130.753Z" fill="#22272E"/>
7
- <path d="M0 48.3295C0 45.1116 2.60866 42.5029 5.8266 42.5029H9.36418C25.4539 42.5029 38.4972 55.5462 38.4972 71.6359V75.1735C38.4972 78.3914 35.8885 81.0001 32.6706 81.0001H5.8266C2.60865 81.0001 0 78.3914 0 75.1735V48.3295Z" fill="#38C780"/>
8
- <path d="M0 5.8266C0 2.60865 2.60866 0 5.8266 0H32.6706C35.8885 0 38.4972 2.60866 38.4972 5.8266V9.36418C38.4972 25.4539 25.4539 38.4972 9.36417 38.4972H5.8266C2.60865 38.4972 0 35.8885 0 32.6706V5.8266Z" fill="#38C780"/>
9
- <path d="M42.5034 71.6359C42.5034 55.5462 55.5467 42.5029 71.6364 42.5029H75.174C78.3919 42.5029 81.0006 45.1116 81.0006 48.3295V75.1735C81.0006 78.3914 78.3919 81.0001 75.174 81.0001H48.33C45.1121 81.0001 42.5034 78.3914 42.5034 75.1735V71.6359Z" fill="#38C780"/>
10
- <path d="M42.5034 5.8266C42.5034 2.60865 45.1121 0 48.33 0H75.174C78.3919 0 81.0006 2.60866 81.0006 5.8266V32.6706C81.0006 35.8885 78.3919 38.4972 75.174 38.4972H71.6364C55.5467 38.4972 42.5034 25.4539 42.5034 9.36417V5.8266Z" fill="#38C780"/>
11
- </svg>
@@ -1,11 +0,0 @@
1
- <svg width="398" height="81" viewBox="0 0 398 81" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M373.299 10.9033C373.712 10.9033 374.082 11.1566 374.232 11.541L397.676 71.8486C397.931 72.5039 397.448 73.2108 396.745 73.2109H383.399C382.983 73.2109 382.61 72.9527 382.463 72.5635L378.19 61.2168L373.516 48.5996L366.507 30.0625L360.499 45.9512H370.305C370.996 45.9512 371.48 46.636 371.247 47.2871L367.094 58.917C366.952 59.3147 366.574 59.5811 366.152 59.5811H355.429L354.824 61.2168L350.55 72.5635C350.403 72.9527 350.031 73.2109 349.615 73.2109H336.19C335.487 73.2109 335.004 72.5048 335.257 71.8496L358.626 11.542C358.776 11.1571 359.146 10.9034 359.559 10.9033H373.299Z" fill="#EFEFEF"/>
3
- <path d="M274.693 73.2113C274.141 73.2113 273.693 72.7635 273.693 72.2113V11.9033C273.693 11.351 274.141 10.9033 274.693 10.9033H307.573C319.489 10.9033 327.823 19.0034 327.823 30.6082C327.823 39.3313 322.761 46.4188 315.05 49.2227L329.696 71.6647C330.13 72.3299 329.652 73.2113 328.858 73.2113H314.119C313.777 73.2113 313.459 73.0367 313.275 72.7483L299.239 50.7025H288.881V72.2113C288.881 72.7635 288.433 73.2113 287.881 73.2113H274.693ZM288.881 37.0727H306.638C310.221 37.0727 312.636 34.5025 312.636 30.8419C312.636 27.1034 310.221 24.5332 306.638 24.5332H288.881V37.0727Z" fill="#EFEFEF"/>
4
- <path d="M236.798 73.2113C236.246 73.2113 235.798 72.7635 235.798 72.2113V24.5332H217.532C216.814 24.5332 216.33 23.7991 216.613 23.1393L221.597 11.5094C221.755 11.1417 222.116 10.9033 222.516 10.9033H267.51C268.062 10.9033 268.51 11.351 268.51 11.9033V23.5332C268.51 24.0855 268.062 24.5332 267.51 24.5332H250.908V72.2113C250.908 72.7635 250.46 73.2113 249.908 73.2113H236.798Z" fill="#EFEFEF"/>
5
- <path d="M175.291 73.2113C174.738 73.2113 174.291 72.7635 174.291 72.2113V11.9033C174.291 11.351 174.738 10.9033 175.291 10.9033H215.066C215.784 10.9033 216.268 11.6372 215.985 12.2971L211.003 23.9269C210.846 24.2947 210.484 24.5332 210.084 24.5332H189.481L189.478 34.5803H204.634C205.329 34.5803 205.813 35.273 205.572 35.9259L201.405 47.2442C201.26 47.6374 200.885 47.8987 200.466 47.8987H189.478V59.8929H213.635C214.187 59.8929 214.635 60.3407 214.635 60.8929V72.2113C214.635 72.7635 214.187 73.2113 213.635 73.2113H175.291Z" fill="#EFEFEF"/>
6
- <path d="M130.753 73.2113C130.341 73.2113 129.97 72.9576 129.821 72.5726L106.452 12.2646C106.198 11.6093 106.681 10.9033 107.384 10.9033H120.811C121.226 10.9033 121.598 11.1604 121.746 11.549L136.766 51.1939C137.092 52.0549 138.31 52.0549 138.636 51.1939L153.657 11.549C153.804 11.1604 154.176 10.9033 154.592 10.9033H167.939C168.642 10.9033 169.126 11.6101 168.871 12.2657L145.426 72.5736C145.277 72.958 144.906 73.2113 144.494 73.2113H130.753Z" fill="#EFEFEF"/>
7
- <path d="M0 48.3295C0 45.1116 2.60866 42.5029 5.8266 42.5029H9.36418C25.4539 42.5029 38.4972 55.5462 38.4972 71.6359V75.1735C38.4972 78.3914 35.8885 81.0001 32.6706 81.0001H5.8266C2.60865 81.0001 0 78.3914 0 75.1735V48.3295Z" fill="#38C780"/>
8
- <path d="M0 5.8266C0 2.60865 2.60866 0 5.8266 0H32.6706C35.8885 0 38.4972 2.60866 38.4972 5.8266V9.36418C38.4972 25.4539 25.4539 38.4972 9.36417 38.4972H5.8266C2.60865 38.4972 0 35.8885 0 32.6706V5.8266Z" fill="#38C780"/>
9
- <path d="M42.5034 71.6359C42.5034 55.5462 55.5467 42.5029 71.6364 42.5029H75.174C78.3919 42.5029 81.0006 45.1116 81.0006 48.3295V75.1735C81.0006 78.3914 78.3919 81.0001 75.174 81.0001H48.33C45.1121 81.0001 42.5034 78.3914 42.5034 75.1735V71.6359Z" fill="#38C780"/>
10
- <path d="M42.5034 5.8266C42.5034 2.60865 45.1121 0 48.33 0H75.174C78.3919 0 81.0006 2.60866 81.0006 5.8266V32.6706C81.0006 35.8885 78.3919 38.4972 75.174 38.4972H71.6364C55.5467 38.4972 42.5034 25.4539 42.5034 9.36417V5.8266Z" fill="#38C780"/>
11
- </svg>