@digabi/exam-engine-core 23.4.7-rte-peer-dep.0 → 23.5.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 (87) hide show
  1. package/dist/__tests__/playwright/Annotations.test.js +110 -28
  2. package/dist/__tests__/playwright/Annotations.test.js.map +1 -1
  3. package/dist/__tests__/playwright/attachments/Attachments.test.js +1 -1
  4. package/dist/__tests__/playwright/attachments/Attachments.test.js.map +1 -1
  5. package/dist/__tests__/playwright/exam/Exam.test.js +1 -1
  6. package/dist/__tests__/playwright/exam/Exam.test.js.map +1 -1
  7. package/dist/__tests__/playwright/grading-instructions/GradingInstructions.test.js +1 -1
  8. package/dist/__tests__/playwright/grading-instructions/GradingInstructions.test.js.map +1 -1
  9. package/dist/__tests__/playwright/stories/Annotations.story.d.ts +2 -2
  10. package/dist/__tests__/playwright/stories/Annotations.story.d.ts.map +1 -1
  11. package/dist/__tests__/playwright/stories/attachments/Attachments.story.d.ts +2 -2
  12. package/dist/__tests__/playwright/stories/attachments/Attachments.story.d.ts.map +1 -1
  13. package/dist/__tests__/playwright/stories/exam/Exam.story.d.ts +2 -2
  14. package/dist/__tests__/playwright/stories/exam/Exam.story.d.ts.map +1 -1
  15. package/dist/__tests__/playwright/stories/grading-intructions/GradingInstructions.story.d.ts +2 -2
  16. package/dist/__tests__/playwright/stories/grading-intructions/GradingInstructions.story.d.ts.map +1 -1
  17. package/dist/__tests__/playwright/utils/utils.d.ts +2 -1
  18. package/dist/__tests__/playwright/utils/utils.d.ts.map +1 -1
  19. package/dist/__tests__/playwright/utils/utils.js +19 -3
  20. package/dist/__tests__/playwright/utils/utils.js.map +1 -1
  21. package/dist/__tests__/tsconfig.tsbuildinfo +1 -1
  22. package/dist/components/context/AnnotationProvider.d.ts +11 -9
  23. package/dist/components/context/AnnotationProvider.d.ts.map +1 -1
  24. package/dist/components/context/AnnotationProvider.js +29 -13
  25. package/dist/components/context/AnnotationProvider.js.map +1 -1
  26. package/dist/components/exam/Exam.d.ts +2 -2
  27. package/dist/components/exam/Exam.d.ts.map +1 -1
  28. package/dist/components/exam/Exam.js.map +1 -1
  29. package/dist/components/exam/SectionTitle.d.ts.map +1 -1
  30. package/dist/components/exam/SectionTitle.js +1 -1
  31. package/dist/components/exam/SectionTitle.js.map +1 -1
  32. package/dist/components/grading/examAnnotationUtils.d.ts +2 -1
  33. package/dist/components/grading/examAnnotationUtils.d.ts.map +1 -1
  34. package/dist/components/grading/examAnnotationUtils.js +56 -50
  35. package/dist/components/grading/examAnnotationUtils.js.map +1 -1
  36. package/dist/components/grading-instructions/SectionTitle.d.ts.map +1 -1
  37. package/dist/components/grading-instructions/SectionTitle.js +1 -1
  38. package/dist/components/grading-instructions/SectionTitle.js.map +1 -1
  39. package/dist/components/shared/AnnotatableText.d.ts.map +1 -1
  40. package/dist/components/shared/AnnotatableText.js +6 -6
  41. package/dist/components/shared/AnnotatableText.js.map +1 -1
  42. package/dist/components/shared/AnnotationImageMark.d.ts +16 -0
  43. package/dist/components/shared/AnnotationImageMark.d.ts.map +1 -0
  44. package/dist/components/shared/AnnotationImageMark.js +99 -0
  45. package/dist/components/shared/AnnotationImageMark.js.map +1 -0
  46. package/dist/components/shared/AnnotationPopup.d.ts.map +1 -1
  47. package/dist/components/shared/AnnotationPopup.js +5 -2
  48. package/dist/components/shared/AnnotationPopup.js.map +1 -1
  49. package/dist/components/shared/AnnotationTextMark.d.ts +11 -0
  50. package/dist/components/shared/AnnotationTextMark.d.ts.map +1 -0
  51. package/dist/components/shared/AnnotationTextMark.js +21 -0
  52. package/dist/components/shared/AnnotationTextMark.js.map +1 -0
  53. package/dist/components/shared/Formula.d.ts +2 -2
  54. package/dist/components/shared/Formula.d.ts.map +1 -1
  55. package/dist/components/shared/Formula.js +81 -9
  56. package/dist/components/shared/Formula.js.map +1 -1
  57. package/dist/components/shared/HiddenAnnotationMark.d.ts +7 -0
  58. package/dist/components/shared/HiddenAnnotationMark.d.ts.map +1 -0
  59. package/dist/components/shared/HiddenAnnotationMark.js +7 -0
  60. package/dist/components/shared/HiddenAnnotationMark.js.map +1 -0
  61. package/dist/components/shared/markText.d.ts +4 -3
  62. package/dist/components/shared/markText.d.ts.map +1 -1
  63. package/dist/components/shared/markText.js +4 -3
  64. package/dist/components/shared/markText.js.map +1 -1
  65. package/dist/index.d.ts +1 -0
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +1 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/main-bundle.js +1 -1
  70. package/dist/main.css +1 -1
  71. package/dist/types/ExamAnnotations.d.ts +46 -0
  72. package/dist/types/ExamAnnotations.d.ts.map +1 -0
  73. package/dist/types/ExamAnnotations.js +2 -0
  74. package/dist/types/ExamAnnotations.js.map +1 -0
  75. package/dist/types/Score.d.ts +0 -26
  76. package/dist/types/Score.d.ts.map +1 -1
  77. package/package.json +4 -4
  78. package/dist/__tests__/annotations.test.d.ts +0 -2
  79. package/dist/__tests__/annotations.test.d.ts.map +0 -1
  80. package/dist/__tests__/annotations.test.js +0 -228
  81. package/dist/__tests__/annotations.test.js.map +0 -1
  82. package/dist/assets/closeButton.svg +0 -1
  83. package/dist/assets/collapse.svg +0 -12
  84. package/dist/assets/expand.svg +0 -12
  85. package/dist/assets/helpButton.svg +0 -9
  86. package/dist/assets/redoButton.svg +0 -5
  87. package/dist/assets/undoButton.svg +0 -5
@@ -1,228 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const exam_engine_exams_1 = require("@digabi/exam-engine-exams");
7
- const exam_engine_mastering_1 = require("@digabi/exam-engine-mastering");
8
- require("@testing-library/jest-dom");
9
- const react_1 = require("@testing-library/react");
10
- const user_event_1 = __importDefault(require("@testing-library/user-event"));
11
- const fs_1 = require("fs");
12
- const path_1 = __importDefault(require("path"));
13
- const react_2 = __importDefault(require("react"));
14
- const parseExam_1 = __importDefault(require("../dist/parser/parseExam"));
15
- const Attachments_1 = __importDefault(require("../src/components/attachments/Attachments"));
16
- const Exam_1 = __importDefault(require("../src/components/exam/Exam"));
17
- const GradingInstructions_1 = __importDefault(require("../src/components/grading-instructions/GradingInstructions"));
18
- const examServerApi_1 = require("./examServerApi");
19
- class IntersectionObserver {
20
- constructor() {
21
- this.root = null;
22
- this.rootMargin = '';
23
- this.thresholds = [];
24
- this.disconnect = () => null;
25
- this.observe = () => null;
26
- this.takeRecords = () => [];
27
- this.unobserve = () => null;
28
- }
29
- }
30
- window.IntersectionObserver = IntersectionObserver;
31
- global.IntersectionObserver = IntersectionObserver;
32
- window.scrollTo = jest.fn();
33
- document.execCommand = jest.fn();
34
- describe('Annotations', () => {
35
- let doc;
36
- beforeEach(async () => {
37
- window.getSelection = jest.fn();
38
- const examPath = (0, exam_engine_exams_1.resolveExam)('FF/FF.xml');
39
- const resolveAttachment = (filename) => path_1.default.resolve(path_1.default.dirname(examPath), 'attachments', filename);
40
- const source = await fs_1.promises.readFile(examPath, 'utf-8');
41
- const results = await (0, exam_engine_mastering_1.masterExam)(source, () => '', (0, exam_engine_mastering_1.getMediaMetadataFromLocalFile)(resolveAttachment), {
42
- removeCorrectAnswers: false
43
- });
44
- doc = (0, parseExam_1.default)(results[0].xml, true);
45
- });
46
- afterEach(() => {
47
- ;
48
- window.getSelection.mockReset();
49
- window.scrollTo.mockReset();
50
- document.execCommand.mockReset();
51
- });
52
- const defaultTextToAnnotate = 'Sekä moraali että tavat pyrkivät ohjaamaan ihmisten käyttäytymistä.';
53
- const defaultAnnotationAnchor = 'e:exam:0 > e:section:1 > e:question:2 > e:question-instruction:1 > span:0 > p:0 > #text:0';
54
- it('popup is rendered', async () => {
55
- const exam = (0, react_1.render)(react_2.default.createElement(Exam_1.default, { ...getExamProps(), annotations: {}, onClickAnnotation: () => { }, onSaveAnnotation: () => { } }));
56
- await annotateText(exam, defaultAnnotationAnchor);
57
- expect(exam.getByTestId('annotation-popup')).toBeVisible();
58
- });
59
- it('popup is not rendered if annotation props are not passed', async () => {
60
- const exam = (0, react_1.render)(react_2.default.createElement(Exam_1.default, { ...getExamProps() }));
61
- const text = 'Sekä moraali että tavat pyrkivät ohjaamaan ihmisten käyttäytymistä.';
62
- const textElement = exam.getByText(text);
63
- mockWindowSelection(text, textElement, 0, text.length);
64
- await user_event_1.default.click(textElement);
65
- expect(exam.queryByTestId('annotation-popup')).not.toBeInTheDocument();
66
- });
67
- it('callback is called when annotation is saved', async () => {
68
- const saveAnnotationMock = jest.fn();
69
- const exam = (0, react_1.render)(react_2.default.createElement(Exam_1.default, { ...getExamProps(), annotations: {}, onClickAnnotation: () => { }, onSaveAnnotation: saveAnnotationMock }));
70
- await annotateText(exam, defaultAnnotationAnchor);
71
- const textbox = exam.getByTestId('edit-comment');
72
- react_1.fireEvent.input(textbox, {
73
- target: { innerText: 'New Value', innerHTML: 'New Value' }
74
- });
75
- await user_event_1.default.click(exam.getByText('Vastaa'));
76
- expect(saveAnnotationMock).toHaveBeenCalledTimes(1);
77
- expect(saveAnnotationMock).toHaveBeenCalledWith({
78
- annotationAnchor: defaultAnnotationAnchor,
79
- annotationId: undefined,
80
- displayNumber: '2',
81
- length: defaultTextToAnnotate.length,
82
- message: 'New Value',
83
- selectedText: defaultTextToAnnotate,
84
- startIndex: 0
85
- });
86
- });
87
- it('popup field is empty when creating new annotation', async () => {
88
- const annotationAnchor_7_1 = 'e:exam:0 > e:section:2 > e:question:7 > e:question:7.1 > e:question-title:0 > span:0 > #text:0';
89
- const exam = (0, react_1.render)(react_2.default.createElement(Exam_1.default, { ...getExamProps(), annotations: {}, onClickAnnotation: () => { }, onSaveAnnotation: () => { } }));
90
- await annotateText(exam, defaultAnnotationAnchor);
91
- const textbox = exam.getByTestId('edit-comment');
92
- react_1.fireEvent.input(textbox, {
93
- target: { innerText: 'New Value', innerHTML: 'New Value' }
94
- });
95
- await user_event_1.default.click(exam.getByText('Vastaa'));
96
- // text picked by getMarkedText includes leading/trailing whitespace, so they must be here too
97
- await annotateText(exam, annotationAnchor_7_1);
98
- expect(exam.getByTestId('edit-comment').textContent).toHaveLength(0);
99
- });
100
- it('callback is called when annotation is clicked', async () => {
101
- const clickAnnotationMock = jest.fn();
102
- const exam = (0, react_1.render)(react_2.default.createElement(Exam_1.default, { ...getExamProps(), annotations: { [defaultAnnotationAnchor]: [createAnnotation(1, 5, 12, 'moraali että')] }, onClickAnnotation: clickAnnotationMock, onSaveAnnotation: () => { } }));
103
- await user_event_1.default.click(exam.container.querySelector('[data-annotation-id="1"]'));
104
- expect(clickAnnotationMock).toHaveBeenCalledTimes(1);
105
- expect(clickAnnotationMock).toHaveBeenCalledWith(expect.anything(), {
106
- annotationAnchor: defaultAnnotationAnchor,
107
- annotationId: 1,
108
- displayNumber: '',
109
- hidden: false,
110
- length: 12,
111
- message: '',
112
- selectedText: 'moraali että',
113
- startIndex: 5
114
- });
115
- });
116
- it('annotations are added to dom when provided', () => {
117
- var _a, _b;
118
- const annotationProps = {
119
- annotations: {
120
- [defaultAnnotationAnchor]: [createAnnotation(1, 5, 7, 'moraali'), createAnnotation(3, 18, 5, 'tavat')]
121
- },
122
- onClickAnnotation: () => { },
123
- onSaveAnnotation: () => { }
124
- };
125
- const exam = (0, react_1.render)(react_2.default.createElement(Exam_1.default, { ...getExamProps(), ...annotationProps }));
126
- expect(exam.container.querySelector('[data-annotation-id="1"]')).toBeInTheDocument();
127
- expect((_a = exam.container.querySelector('[data-annotation-id="1"]')) === null || _a === void 0 ? void 0 : _a.textContent).toBe('moraali');
128
- expect(exam.container.querySelector('[data-annotation-id="3"]')).toBeInTheDocument();
129
- expect((_b = exam.container.querySelector('[data-annotation-id="3"]')) === null || _b === void 0 ? void 0 : _b.textContent).toBe('tavat');
130
- });
131
- it('hidden annotation works correctly', () => {
132
- var _a, _b;
133
- const annotationProps = {
134
- annotations: {
135
- [defaultAnnotationAnchor]: [
136
- {
137
- annotationId: 1,
138
- annotationAnchor: defaultAnnotationAnchor,
139
- hidden: true,
140
- startIndex: 24,
141
- length: 8,
142
- message: '',
143
- displayNumber: '',
144
- selectedText: 'pyrkivät'
145
- }
146
- ]
147
- },
148
- onClickAnnotation: () => { },
149
- onSaveAnnotation: () => { }
150
- };
151
- const exam = (0, react_1.render)(react_2.default.createElement(Exam_1.default, { ...getExamProps(), ...annotationProps }));
152
- expect(exam.container.querySelector('[data-annotation-id="1"]')).toBeInTheDocument();
153
- expect((_b = (_a = exam.container.querySelector('[data-annotation-id="1"]')) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.textContent).toBe('Sekä moraali että tavat pyrkivät ohjaamaan ihmisten käyttäytymistä.');
154
- });
155
- it('grading instructions can be annotated', async () => {
156
- const gi = (0, react_1.render)(react_2.default.createElement(GradingInstructions_1.default, { ...getCommonProps(), annotations: {}, onClickAnnotation: () => { }, onSaveAnnotation: () => { } }));
157
- await annotateText(gi, defaultAnnotationAnchor);
158
- expect(gi.getByTestId('annotation-popup')).toBeVisible();
159
- });
160
- it('attachments can be annotated', async () => {
161
- const annotationAnchor_7_A = 'e:exam:0 > e:section:2 > e:question:7 > e:external-material:3 > e:attachment:0 > span:1 > p:3 > #text:0';
162
- const gi = (0, react_1.render)(react_2.default.createElement(Attachments_1.default, { ...getCommonProps(), annotations: {}, onClickAnnotation: () => { }, onSaveAnnotation: () => { } }));
163
- await annotateText(gi, annotationAnchor_7_A);
164
- expect(gi.getByTestId('annotation-popup')).toBeVisible();
165
- });
166
- function createAnnotation(id, startIndex, length, selectedText) {
167
- return {
168
- annotationId: id,
169
- annotationAnchor: defaultAnnotationAnchor,
170
- hidden: false,
171
- startIndex,
172
- length,
173
- message: '',
174
- displayNumber: '',
175
- selectedText
176
- };
177
- }
178
- async function annotateText(exam, elementAnchor, startIndex = 0, length) {
179
- const textElement = exam.getByTestId(elementAnchor);
180
- const fullText = (textElement === null || textElement === void 0 ? void 0 : textElement.textContent) || '';
181
- const annotationLength = length || fullText.length;
182
- const text = fullText.substring(startIndex, startIndex + annotationLength);
183
- mockWindowSelection(text, textElement, startIndex, annotationLength);
184
- await user_event_1.default.click(textElement);
185
- }
186
- function mockWindowSelection(text = 'mocked selection text', element, startOffset = 0, length) {
187
- ;
188
- window.getSelection.mockImplementation(() => ({
189
- toString: () => text,
190
- rangeCount: 1,
191
- anchorNode: element.firstChild,
192
- focusNode: element.firstChild,
193
- getRangeAt: jest.fn().mockReturnValue({
194
- startOffset,
195
- endOffset: startOffset + length,
196
- startContainer: element,
197
- endContainer: element,
198
- cloneContents: jest.fn().mockReturnValue({ children: [], childNodes: [] })
199
- })
200
- }));
201
- }
202
- function getCommonProps() {
203
- return {
204
- doc,
205
- answers: [],
206
- attachmentsURL: '/attachments',
207
- resolveAttachment: (filename) => `/attachments/${encodeURIComponent(filename)}`
208
- };
209
- }
210
- function getExamProps() {
211
- const examProps = {
212
- ...getCommonProps(),
213
- casStatus: 'forbidden',
214
- examServerApi: examServerApi_1.examServerApi,
215
- restrictedAudioPlaybackStats: [],
216
- studentName: '[Kokelaan Nimi]',
217
- showUndoView: false,
218
- undoViewProps: {
219
- questionId: 0,
220
- title: '',
221
- close: () => undefined,
222
- restoreAnswer: () => undefined
223
- }
224
- };
225
- return examProps;
226
- }
227
- });
228
- //# sourceMappingURL=annotations.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"annotations.test.js","sourceRoot":"","sources":["../../__tests__/annotations.test.tsx"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30" height="30" viewBox="0 0 30 30"><defs><clipPath id="clip-path"><path d="M141.57-89.324v-2.34H143.2v2.34A2.3,2.3,0,0,1,140.9-87.03H130.1a2.3,2.3,0,0,1-2.292-2.294v-17.029a2.294,2.294,0,0,1,2.292-2.292h10.8a2.3,2.3,0,0,1,2.295,2.292v2.342H141.57v-2.342a.669.669,0,0,0-.67-.667H130.1a.667.667,0,0,0-.667.667v17.029a.668.668,0,0,0,.667.669h10.8A.67.67,0,0,0,141.57-89.324Zm3.271-13.579a1.069,1.069,0,0,1,1.825-.755l5.065,5.065a1.065,1.065,0,0,1,0,1.511l-5.065,5.067a1.07,1.07,0,0,1-1.825-.757v-2.412h-6.633a2.3,2.3,0,0,1-2.3-2.3v-.7a2.3,2.3,0,0,1,2.3-2.3h6.633V-102.9" fill="none" clip-rule="evenodd"/></clipPath><clipPath id="clip-path-2"><ellipse cx="10" cy="-29.606" rx="15" ry="14.933" fill="none"/></clipPath></defs><title>closeButton</title><rect width="30" height="30" fill="#fff" opacity="0"/><line x1="25" y1="5" x2="5" y2="25" fill="none" stroke="#6d6d6d" stroke-miterlimit="10" stroke-width="3"/><line x1="5" y1="5" x2="25" y2="25" fill="none" stroke="#6d6d6d" stroke-miterlimit="10" stroke-width="3"/></svg>
@@ -1,12 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <svg width="19px" height="12px" viewBox="0 0 19 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
- <!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
4
- <title>Page 1</title>
5
- <desc>Created with Sketch.</desc>
6
- <defs></defs>
7
- <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
- <g id="Kuuntelu-kokelas-painaa-nappia-Copy-18" transform="translate(-1068.000000, -19.000000)" stroke-width="3" stroke="#359BB7">
9
- <polyline id="Page-1" transform="translate(1077.999981, 26.000000) rotate(180.000000) translate(-1077.999981, -26.000000) " points="1085.99996 22 1077.99996 30 1070 22"></polyline>
10
- </g>
11
- </g>
12
- </svg>
@@ -1,12 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <svg width="18px" height="12px" viewBox="0 0 18 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
- <!-- Generator: Sketch 43.2 (39069) - http://www.bohemiancoding.com/sketch -->
4
- <title>Page 1</title>
5
- <desc>Created with Sketch.</desc>
6
- <defs></defs>
7
- <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
- <g id="Kuuntelu-kokelas-painaa-nappia-Copy-18" transform="translate(-1069.000000, -21.000000)" stroke-width="3" stroke="#359BB7">
9
- <polyline id="Page-1" points="1085.99996 22 1077.99996 30 1070 22"></polyline>
10
- </g>
11
- </g>
12
- </svg>
@@ -1,9 +0,0 @@
1
- <svg version="1.1"
2
- xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
3
- x="0px" y="0px" width="20px" height="20px" viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
4
- <path fill="#359BB7" d="M10,20C4.48,20,0,15.52,0,10C0,4.48,4.48,0,10,0s10,4.48,10,10C20,15.52,15.52,20,10,20z M5.57,5.88
5
- c-0.14,0.21-0.09,0.5,0.11,0.66l1.4,1.06c0.21,0.16,0.51,0.12,0.67-0.09c0.72-0.91,1.21-1.44,2.31-1.44c0.82,0,1.84,0.53,1.84,1.33
6
- c0,0.6-0.5,0.91-1.31,1.37c-0.95,0.53-2.2,1.19-2.2,2.85v0.16c0,0.27,0.22,0.48,0.48,0.48h2.26c0.27,0,0.48-0.22,0.48-0.48v-0.05
7
- c0-1.15,3.35-1.2,3.35-4.3c0-2.34-2.43-4.11-4.7-4.11C8.07,3.31,6.67,4.23,5.57,5.88z M8.15,15.16c0,1.02,0.83,1.85,1.85,1.85
8
- s1.85-0.83,1.85-1.85s-0.83-1.85-1.85-1.85S8.15,14.14,8.15,15.16z"/>
9
- </svg>
@@ -1,5 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="20px" viewBox="0 0 20 20" version="1.1">
2
- <g id="surface1">
3
- <path fill="#359BB7" d="M 18.316406 1.253906 C 18.859375 1.253906 19.378906 1.675781 19.378906 2.3125 L 19.378906 8.007812 C 19.378906 8.421875 19.042969 8.757812 18.628906 8.757812 L 12.9375 8.757812 C 12.300781 8.757812 11.882812 8.238281 11.882812 7.695312 C 11.882812 7.4375 11.976562 7.171875 12.191406 6.957031 L 13.953125 5.195312 C 12.851562 4.289062 11.460938 3.761719 9.996094 3.761719 C 6.554688 3.761719 3.753906 6.5625 3.753906 10.003906 C 3.753906 13.449219 6.554688 16.246094 9.996094 16.246094 C 12.851562 16.246094 13.488281 14.75 14.492188 14.75 C 15.214844 14.75 15.742188 15.335938 15.742188 15.996094 C 15.742188 17.367188 12.554688 18.75 10 18.75 C 5.179688 18.75 1.253906 14.824219 1.253906 10.003906 C 1.253906 5.183594 5.179688 1.265625 10 1.265625 C 12.132812 1.265625 14.148438 2.0625 15.71875 3.425781 L 17.578125 1.566406 C 17.792969 1.351562 18.058594 1.253906 18.316406 1.253906 Z M 18.316406 1.253906 "/>
4
- </g>
5
- </svg>
@@ -1,5 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="20px" viewBox="0 0 20 20" version="1.1">
2
- <g id="surface1">
3
- <path fill="#359BB7" d="M 18.75 10 C 18.75 14.820312 14.824219 18.746094 10.003906 18.746094 C 8.097656 18.746094 6.285156 18.136719 4.761719 16.992188 C 4.210938 16.578125 4.097656 15.796875 4.511719 15.242188 C 4.925781 14.691406 5.707031 14.582031 6.261719 14.996094 C 7.351562 15.8125 8.644531 16.242188 10.007812 16.242188 C 13.449219 16.242188 16.25 13.441406 16.25 10 C 16.25 6.558594 13.449219 3.757812 10.007812 3.757812 C 8.542969 3.757812 7.152344 4.285156 6.050781 5.1875 L 7.8125 6.953125 C 8.476562 7.617188 8.007812 8.753906 7.066406 8.753906 L 1.375 8.753906 C 0.960938 8.753906 0.625 8.417969 0.625 8.003906 L 0.625 2.304688 C 0.625 1.367188 1.761719 0.898438 2.425781 1.5625 L 4.285156 3.421875 C 5.855469 2.058594 7.871094 1.253906 10.003906 1.253906 C 14.824219 1.253906 18.75 5.179688 18.75 10 Z M 18.75 10 "/>
4
- </g>
5
- </svg>